PageSourceSearch

https://lamaisonanilondon.com/public/js/lib/gsap/all.js

js lamaisonanilondon.com collected 2026-10-06 20:43:10 UTC 803,964 bytes, 24,882 lines download raw bytes

vendor: 5,425 bytes, lines 1-173
1(function (global, factory) {
2  typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :
3  typeof define === 'function' && define.amd ? define(['exports'], factory) :
4  (global = global || self, factory(global.window = global.window || {}));
5}(this, (function (exports) { 'use strict';
6
7  function _defineProperties(target, props) {
8    for (var i = 0; i < props.length; i++) {
9      var descriptor = props[i];
10      descriptor.enumerable = descriptor.enumerable || false;
11      descriptor.configurable = true;
12      if ("value" in descriptor) descriptor.writable = true;
13      Object.defineProperty(target, descriptor.key, descriptor);
14    }
15  }
16
17  function _createClass(Constructor, protoProps, staticProps) {
18    if (protoProps) _defineProperties(Constructor.prototype, protoProps);
19    if (staticProps) _defineProperties(Constructor, staticProps);
20    return Constructor;
21  }
22
23  function _inheritsLoose(subClass, superClass) {
24    subClass.prototype = Object.create(superClass.prototype);
25    subClass.prototype.constructor = subClass;
26    subClass.__proto__ = superClass;
27  }
28
29  function _assertThisInitialized(self) {
30    if (self === void 0) {
31      throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
32    }
33
34    return self;
35  }
36
37  /*!
38   * GSAP 3.12.5
39   * https://gsap.com
40   *
41   * @license Copyright 2008-2024, GreenSock. All rights reserved.
42   * Subject to the terms at https://gsap.com/standard-license or for
43   * Club GSAP members, the agreement issued with that membership.
44   * @author: Jack Doyle, [email protected]
45  */
46  var _config = {
47    autoSleep: 120,
48    force3D: "auto",
49    nullTargetWarn: 1,
50    units: {
51      lineHeight: ""
52    }
53  },
54      _defaults = {
55    duration: .5,
56    overwrite: false,
57    delay: 0
58  },
59      _suppressOverwrites,
60      _reverting,
61      _context,
62      _bigNum = 1e8,
63      _tinyNum = 1 / _bigNum,
64      _2PI = Math.PI * 2,
65      _HALF_PI = _2PI / 4,
66      _gsID = 0,
67      _sqrt = Math.sqrt,
68      _cos = Math.cos,
69      _sin = Math.sin,
70      _isString = function _isString(value) {
71    return typeof value === "string";
72  },
73      _isFunction = function _isFunction(value) {
74    return typeof value === "function";
75  },
76      _isNumber = function _isNumber(value) {
77    return typeof value === "number";
78  },
79      _isUndefined = function _isUndefined(value) {
80    return typeof value === "undefined";
81  },
82      _isObject = function _isObject(value) {
83    return typeof value === "object";
84  },
85      _isNotFalse = function _isNotFalse(value) {
86    return value !== false;
87  },
88      _windowExists = function _windowExists() {
89    return typeof window !== "undefined";
90  },
91      _isFuncOrString = function _isFuncOrString(value) {
92    return _isFunction(value) || _isString(value);
93  },
94      _isTypedArray = typeof ArrayBuffer === "function" && ArrayBuffer.isView || function () {},
95      _isArray = Array.isArray,
96      _strictNumExp = /(?:-?\.?\d|\.)+/gi,
97      _numExp = /[-+=.]*\d+[.e\-+]*\d*[e\-+]*\d*/g,
98      _numWithUnitExp = /[-+=.]*\d+[.e-]*\d*[a-z%]*/g,
99      _complexStringNumExp = /[-+=.]*\d+\.?\d*(?:e-|e\+)?\d*/gi,
100      _relExp = /[+-]=-?[.\d]+/,
101      _delimitedValueExp = /[^,'"\[\]\s]+/gi,
102      _unitExp = /^[+\-=e\s\d]*\d+[.\d]*([a-z]*|%)\s*$/i,
103      _globalTimeline,
104      _win,
105      _coreInitted,
106      _doc,
107      _globals = {},
108      _installScope = {},
109      _coreReady,
110      _install = function _install(scope) {
111    return (_installScope = _merge(scope, _globals)) && gsap;
112  },
113      _missingPlugin = function _missingPlugin(property, value) {
114    return console.warn("Invalid property", property, "set to", value, "Missing plugin? gsap.registerPlugin()");
115  },
116      _warn = function _warn(message, suppress) {
117    return !suppress && console.warn(message);
118  },
119      _addGlobal = function _addGlobal(name, obj) {
120    return name && (_globals[name] = obj) && _installScope && (_installScope[name] = obj) || _globals;
121  },
122      _emptyFunc = function _emptyFunc() {
123    return 0;
124  },
125      _startAtRevertConfig = {
126    suppressEvents: true,
127    isStart: true,
128    kill: false
129  },
130      _revertConfigNoKill = {
131    suppressEvents: true,
132    kill: false
133  },
134      _revertConfig = {
135    suppressEvents: true
136  },
137      _reservedProps = {},
138      _lazyTweens = [],
139      _lazyLookup = {},
140      _lastRenderedFrame,
141      _plugins = {},
142      _effects = {},
143      _nextGCFrame = 30,
144      _harnessPlugins = [],
145      _callbackNames = "",
146      _harness = function _harness(targets) {
147    var target = targets[0],
148        harnessPlugin,
149        i;
150    _isObject(target) || _isFunction(target) || (targets = [targets]);
151
152    if (!(harnessPlugin = (target._gsap || {}).harness)) {
153      i = _harnessPlugins.length;
154
155      while (i-- && !_harnessPlugins[i].targetTest(target)) {}
156
157      harnessPlugin = _harnessPlugins[i];
158    }
159
160    i = targets.length;
161
162    while (i--) {
163      targets[i] && (targets[i]._gsap || (targets[i]._gsap = new GSCache(targets[i], harnessPlugin))) || targets.splice(i, 1);
164    }
165
166    return targets;
167  },
168      _getCache = function _getCache(target) {
169    return target._gsap || _harness(toArray(target))[0]._gsap;
170  },
171      _getProperty = function _getProperty(target, property, v) {
172    return (v = target[property]) && _isFunction(v) ? target[property]() : _isUndefined(v) && target.getAttribute && target.getAttribute(property) || v;
173  },
vendor: 6,338 bytes, lines 174-383
174      _forEachName = function _forEachName(names, func) {
175    return (names = names.split(",")).forEach(func) || names;
176  },
177      _round = function _round(value) {
178    return Math.round(value * 100000) / 100000 || 0;
179  },
180      _roundPrecise = function _roundPrecise(value) {
181    return Math.round(value * 10000000) / 10000000 || 0;
182  },
183      _parseRelative = function _parseRelative(start, value) {
184    var operator = value.charAt(0),
185        end = parseFloat(value.substr(2));
186    start = parseFloat(start);
187    return operator === "+" ? start + end : operator === "-" ? start - end : operator === "*" ? start * end : start / end;
188  },
189      _arrayContainsAny = function _arrayContainsAny(toSearch, toFind) {
190    var l = toFind.length,
191        i = 0;
192
193    for (; toSearch.indexOf(toFind[i]) < 0 && ++i < l;) {}
194
195    return i < l;
196  },
197      _lazyRender = function _lazyRender() {
198    var l = _lazyTweens.length,
199        a = _lazyTweens.slice(0),
200        i,
201        tween;
202
203    _lazyLookup = {};
204    _lazyTweens.length = 0;
205
206    for (i = 0; i < l; i++) {
207      tween = a[i];
208      tween && tween._lazy && (tween.render(tween._lazy[0], tween._lazy[1], true)._lazy = 0);
209    }
210  },
211      _lazySafeRender = function _lazySafeRender(animation, time, suppressEvents, force) {
212    _lazyTweens.length && !_reverting && _lazyRender();
213    animation.render(time, suppressEvents, force || _reverting && time < 0 && (animation._initted || animation._startAt));
214    _lazyTweens.length && !_reverting && _lazyRender();
215  },
216      _numericIfPossible = function _numericIfPossible(value) {
217    var n = parseFloat(value);
218    return (n || n === 0) && (value + "").match(_delimitedValueExp).length < 2 ? n : _isString(value) ? value.trim() : value;
219  },
220      _passThrough = function _passThrough(p) {
221    return p;
222  },
223      _setDefaults = function _setDefaults(obj, defaults) {
224    for (var p in defaults) {
225      p in obj || (obj[p] = defaults[p]);
226    }
227
228    return obj;
229  },
230      _setKeyframeDefaults = function _setKeyframeDefaults(excludeDuration) {
231    return function (obj, defaults) {
232      for (var p in defaults) {
233        p in obj || p === "duration" && excludeDuration || p === "ease" || (obj[p] = defaults[p]);
234      }
235    };
236  },
237      _merge = function _merge(base, toMerge) {
238    for (var p in toMerge) {
239      base[p] = toMerge[p];
240    }
241
242    return base;
243  },
244      _mergeDeep = function _mergeDeep(base, toMerge) {
245    for (var p in toMerge) {
246      p !== "__proto__" && p !== "constructor" && p !== "prototype" && (base[p] = _isObject(toMerge[p]) ? _mergeDeep(base[p] || (base[p] = {}), toMerge[p]) : toMerge[p]);
247    }
248
249    return base;
250  },
251      _copyExcluding = function _copyExcluding(obj, excluding) {
252    var copy = {},
253        p;
254
255    for (p in obj) {
256      p in excluding || (copy[p] = obj[p]);
257    }
258
259    return copy;
260  },
261      _inheritDefaults = function _inheritDefaults(vars) {
262    var parent = vars.parent || _globalTimeline,
263        func = vars.keyframes ? _setKeyframeDefaults(_isArray(vars.keyframes)) : _setDefaults;
264
265    if (_isNotFalse(vars.inherit)) {
266      while (parent) {
267        func(vars, parent.vars.defaults);
268        parent = parent.parent || parent._dp;
269      }
270    }
271
272    return vars;
273  },
274      _arraysMatch = function _arraysMatch(a1, a2) {
275    var i = a1.length,
276        match = i === a2.length;
277
278    while (match && i-- && a1[i] === a2[i]) {}
279
280    return i < 0;
281  },
282      _addLinkedListItem = function _addLinkedListItem(parent, child, firstProp, lastProp, sortBy) {
283    if (firstProp === void 0) {
284      firstProp = "_first";
285    }
286
287    if (lastProp === void 0) {
288      lastProp = "_last";
289    }
290
291    var prev = parent[lastProp],
292        t;
293
294    if (sortBy) {
295      t = child[sortBy];
296
297      while (prev && prev[sortBy] > t) {
298        prev = prev._prev;
299      }
300    }
301
302    if (prev) {
303      child._next = prev._next;
304      prev._next = child;
305    } else {
306      child._next = parent[firstProp];
307      parent[firstProp] = child;
308    }
309
310    if (child._next) {
311      child._next._prev = child;
312    } else {
313      parent[lastProp] = child;
314    }
315
316    child._prev = prev;
317    child.parent = child._dp = parent;
318    return child;
319  },
320      _removeLinkedListItem = function _removeLinkedListItem(parent, child, firstProp, lastProp) {
321    if (firstProp === void 0) {
322      firstProp = "_first";
323    }
324
325    if (lastProp === void 0) {
326      lastProp = "_last";
327    }
328
329    var prev = child._prev,
330        next = child._next;
331
332    if (prev) {
333      prev._next = next;
334    } else if (parent[firstProp] === child) {
335      parent[firstProp] = next;
336    }
337
338    if (next) {
339      next._prev = prev;
340    } else if (parent[lastProp] === child) {
341      parent[lastProp] = prev;
342    }
343
344    child._next = child._prev = child.parent = null;
345  },
346      _removeFromParent = function _removeFromParent(child, onlyIfParentHasAutoRemove) {
347    child.parent && (!onlyIfParentHasAutoRemove || child.parent.autoRemoveChildren) && child.parent.remove && child.parent.remove(child);
348    child._act = 0;
349  },
350      _uncache = function _uncache(animation, child) {
351    if (animation && (!child || child._end > animation._dur || child._start < 0)) {
352      var a = animation;
353
354      while (a) {
355        a._dirty = 1;
356        a = a.parent;
357      }
358    }
359
360    return animation;
361  },
362      _recacheAncestors = function _recacheAncestors(animation) {
363    var parent = animation.parent;
364
365    while (parent && parent.parent) {
366      parent._dirty = 1;
367      parent.totalDuration();
368      parent = parent.parent;
369    }
370
371    return animation;
372  },
373      _rewindStartAt = function _rewindStartAt(tween, totalTime, suppressEvents, force) {
374    return tween._startAt && (_reverting ? tween._startAt.revert(_revertConfigNoKill) : tween.vars.immediateRender && !tween.vars.autoRevert || tween._startAt.render(totalTime, true, force));
375  },
376      _hasNoPausedAncestors = function _hasNoPausedAncestors(animation) {
377    return !animation || animation._ts && _hasNoPausedAncestors(animation.parent);
378  },
379      _elapsedCycleDuration = function _elapsedCycleDuration(animation) {
380    return animation._repeat ? _animationCycle(animation._tTime, animation = animation.duration() + animation._rDelay) * animation : 0;
381  },
382      _animationCycle = function _animationCycle(tTime, cycleDuration) {
383    var whole = Math.floor(tTime /= cycleDuration
vendor: 17,487 bytes, lines 383-851
383);
384    return tTime && whole === tTime ? whole - 1 : whole;
385  },
386      _parentToChildTotalTime = function _parentToChildTotalTime(parentTime, child) {
387    return (parentTime - child._start) * child._ts + (child._ts >= 0 ? 0 : child._dirty ? child.totalDuration() : child._tDur);
388  },
389      _setEnd = function _setEnd(animation) {
390    return animation._end = _roundPrecise(animation._start + (animation._tDur / Math.abs(animation._ts || animation._rts || _tinyNum) || 0));
391  },
392      _alignPlayhead = function _alignPlayhead(animation, totalTime) {
393    var parent = animation._dp;
394
395    if (parent && parent.smoothChildTiming && animation._ts) {
396      animation._start = _roundPrecise(parent._time - (animation._ts > 0 ? totalTime / animation._ts : ((animation._dirty ? animation.totalDuration() : animation._tDur) - totalTime) / -animation._ts));
397
398      _setEnd(animation);
399
400      parent._dirty || _uncache(parent, animation);
401    }
402
403    return animation;
404  },
405      _postAddChecks = function _postAddChecks(timeline, child) {
406    var t;
407
408    if (child._time || !child._dur && child._initted || child._start < timeline._time && (child._dur || !child.add)) {
409      t = _parentToChildTotalTime(timeline.rawTime(), child);
410
411      if (!child._dur || _clamp(0, child.totalDuration(), t) - child._tTime > _tinyNum) {
412        child.render(t, true);
413      }
414    }
415
416    if (_uncache(timeline, child)._dp && timeline._initted && timeline._time >= timeline._dur && timeline._ts) {
417      if (timeline._dur < timeline.duration()) {
418        t = timeline;
419
420        while (t._dp) {
421          t.rawTime() >= 0 && t.totalTime(t._tTime);
422          t = t._dp;
423        }
424      }
425
426      timeline._zTime = -_tinyNum;
427    }
428  },
429      _addToTimeline = function _addToTimeline(timeline, child, position, skipChecks) {
430    child.parent && _removeFromParent(child);
431    child._start = _roundPrecise((_isNumber(position) ? position : position || timeline !== _globalTimeline ? _parsePosition(timeline, position, child) : timeline._time) + child._delay);
432    child._end = _roundPrecise(child._start + (child.totalDuration() / Math.abs(child.timeScale()) || 0));
433
434    _addLinkedListItem(timeline, child, "_first", "_last", timeline._sort ? "_start" : 0);
435
436    _isFromOrFromStart(child) || (timeline._recent = child);
437    skipChecks || _postAddChecks(timeline, child);
438    timeline._ts < 0 && _alignPlayhead(timeline, timeline._tTime);
439    return timeline;
440  },
441      _scrollTrigger = function _scrollTrigger(animation, trigger) {
442    return (_globals.ScrollTrigger || _missingPlugin("scrollTrigger", trigger)) && _globals.ScrollTrigger.create(trigger, animation);
443  },
444      _attemptInitTween = function _attemptInitTween(tween, time, force, suppressEvents, tTime) {
445    _initTween(tween, time, tTime);
446
447    if (!tween._initted) {
448      return 1;
449    }
450
451    if (!force && tween._pt && !_reverting && (tween._dur && tween.vars.lazy !== false || !tween._dur && tween.vars.lazy) && _lastRenderedFrame !== _ticker.frame) {
452      _lazyTweens.push(tween);
453
454      tween._lazy = [tTime, suppressEvents];
455      return 1;
456    }
457  },
458      _parentPlayheadIsBeforeStart = function _parentPlayheadIsBeforeStart(_ref) {
459    var parent = _ref.parent;
460    return parent && parent._ts && parent._initted && !parent._lock && (parent.rawTime() < 0 || _parentPlayheadIsBeforeStart(parent));
461  },
462      _isFromOrFromStart = function _isFromOrFromStart(_ref2) {
463    var data = _ref2.data;
464    return data === "isFromStart" || data === "isStart";
465  },
466      _renderZeroDurationTween = function _renderZeroDurationTween(tween, totalTime, suppressEvents, force) {
467    var prevRatio = tween.ratio,
468        ratio = totalTime < 0 || !totalTime && (!tween._start && _parentPlayheadIsBeforeStart(tween) && !(!tween._initted && _isFromOrFromStart(tween)) || (tween._ts < 0 || tween._dp._ts < 0) && !_isFromOrFromStart(tween)) ? 0 : 1,
469        repeatDelay = tween._rDelay,
470        tTime = 0,
471        pt,
472        iteration,
473        prevIteration;
474
475    if (repeatDelay && tween._repeat) {
476      tTime = _clamp(0, tween._tDur, totalTime);
477      iteration = _animationCycle(tTime, repeatDelay);
478      tween._yoyo && iteration & 1 && (ratio = 1 - ratio);
479
480      if (iteration !== _animationCycle(tween._tTime, repeatDelay)) {
481        prevRatio = 1 - ratio;
482        tween.vars.repeatRefresh && tween._initted && tween.invalidate();
483      }
484    }
485
486    if (ratio !== prevRatio || _reverting || force || tween._zTime === _tinyNum || !totalTime && tween._zTime) {
487      if (!tween._initted && _attemptInitTween(tween, totalTime, force, suppressEvents, tTime)) {
488        return;
489      }
490
491      prevIteration = tween._zTime;
492      tween._zTime = totalTime || (suppressEvents ? _tinyNum : 0);
493      suppressEvents || (suppressEvents = totalTime && !prevIteration);
494      tween.ratio = ratio;
495      tween._from && (ratio = 1 - ratio);
496      tween._time = 0;
497      tween._tTime = tTime;
498      pt = tween._pt;
499
500      while (pt) {
501        pt.r(ratio, pt.d);
502        pt = pt._next;
503      }
504
505      totalTime < 0 && _rewindStartAt(tween, totalTime, suppressEvents, true);
506      tween._onUpdate && !suppressEvents && _callback(tween, "onUpdate");
507      tTime && tween._repeat && !suppressEvents && tween.parent && _callback(tween, "onRepeat");
508
509      if ((totalTime >= tween._tDur || totalTime < 0) && tween.ratio === ratio) {
510        ratio && _removeFromParent(tween, 1);
511
512        if (!suppressEvents && !_reverting) {
513          _callback(tween, ratio ? "onComplete" : "onReverseComplete", true);
514
515          tween._prom && tween._prom();
516        }
517      }
518    } else if (!tween._zTime) {
519      tween._zTime = totalTime;
520    }
521  },
522      _findNextPauseTween = function _findNextPauseTween(animation, prevTime, time) {
523    var child;
524
525    if (time > prevTime) {
526      child = animation._first;
527
528      while (child && child._start <= time) {
529        if (child.data === "isPause" && child._start > prevTime) {
530          return child;
531        }
532
533        child = child._next;
534      }
535    } else {
536      child = animation._last;
537
538      while (child && child._start >= time) {
539        if (child.data === "isPause" && child._start < prevTime) {
540          return child;
541        }
542
543        child = child._prev;
544      }
545    }
546  },
547      _setDuration = function _setDuration(animation, duration, skipUncache, leavePlayhead) {
548    var repeat = animation._repeat,
549        dur = _roundPrecise(duration) || 0,
550        totalProgress = animation._tTime / animation._tDur;
551    totalProgress && !leavePlayhead && (animation._time *= dur / animation._dur);
552    animation._dur = dur;
553    animation._tDur = !repeat ? dur : repeat < 0 ? 1e10 : _roundPrecise(dur * (repeat + 1) + animation._rDelay * repeat);
554    totalProgress > 0 && !leavePlayhead && _alignPlayhead(animation, animation._tTime = animation._tDur * totalProgress);
555    animation.parent && _setEnd(animation);
556    skipUncache || _uncache(animation.parent, animation);
557    return animation;
558  },
559      _onUpdateTotalDuration = function _onUpdateTotalDuration(animation) {
560    return animation instanceof Timeline ? _uncache(animation) : _setDuration(animation, animation._dur);
561  },
562      _zeroPosition = {
563    _start: 0,
564    endTime: _emptyFunc,
565    totalDuration: _emptyFunc
566  },
567      _parsePosition = function _parsePosition(animation, position, percentAnimation) {
568    var labels = animation.labels,
569        recent = animation._recent || _zeroPosition,
570        clippedDuration = animation.duration() >= _bigNum ? recent.endTime(false) : animation._dur,
571        i,
572        offset,
573        isPercent;
574
575    if (_isString(position) && (isNaN(position) || position in labels)) {
576      offset = position.charAt(0);
577      isPercent = position.substr(-1) === "%";
578      i = position.indexOf("=");
579
580      if (offset === "<" || offset === ">") {
581        i >= 0 && (position = position.replace(/=/, ""));
582        return (offset === "<" ? recent._start : recent.endTime(recent._repeat >= 0)) + (parseFloat(position.substr(1)) || 0) * (isPercent ? (i < 0 ? recent : percentAnimation).totalDuration() / 100 : 1);
583      }
584
585      if (i < 0) {
586        position in labels || (labels[position] = clippedDuration);
587        return labels[position];
588      }
589
590      offset = parseFloat(position.charAt(i - 1) + position.substr(i + 1));
591
592      if (isPercent && percentAnimation) {
593        offset = offset / 100 * (_isArray(percentAnimation) ? percentAnimation[0] : percentAnimation).totalDuration();
594      }
595
596      return i > 1 ? _parsePosition(animation, position.substr(0, i - 1), percentAnimation) + offset : clippedDuration + offset;
597    }
598
599    return position == null ? clippedDuration : +position;
600  },
601      _createTweenType = function _createTweenType(type, params, timeline) {
602    var isLegacy = _isNumber(params[1]),
603        varsIndex = (isLegacy ? 2 : 1) + (type < 2 ? 0 : 1),
604        vars = params[varsIndex],
605        irVars,
606        parent;
607
608    isLegacy && (vars.duration = params[1]);
609    vars.parent = timeline;
610
611    if (type) {
612      irVars = vars;
613      parent = timeline;
614
615      while (parent && !("immediateRender" in irVars)) {
616        irVars = parent.vars.defaults || {};
617        parent = _isNotFalse(parent.vars.inherit) && parent.parent;
618      }
619
620      vars.immediateRender = _isNotFalse(irVars.immediateRender);
621      type < 2 ? vars.runBackwards = 1 : vars.startAt = params[varsIndex - 1];
622    }
623
624    return new Tween(params[0], vars, params[varsIndex + 1]);
625  },
626      _conditionalReturn = function _conditionalReturn(value, func) {
627    return value || value === 0 ? func(value) : func;
628  },
629      _clamp = function _clamp(min, max, value) {
630    return value < min ? min : value > max ? max : value;
631  },
632      getUnit = function getUnit(value, v) {
633    return !_isString(value) || !(v = _unitExp.exec(value)) ? "" : v[1];
634  },
635      clamp = function clamp(min, max, value) {
636    return _conditionalReturn(value, function (v) {
637      return _clamp(min, max, v);
638    });
639  },
640      _slice = [].slice,
641      _isArrayLike = function _isArrayLike(value, nonEmpty) {
642    return value && _isObject(value) && "length" in value && (!nonEmpty && !value.length || value.length - 1 in value && _isObject(value[0])) && !value.nodeType && value !== _win;
643  },
644      _flatten = function _flatten(ar, leaveStrings, accumulator) {
645    if (accumulator === void 0) {
646      accumulator = [];
647    }
648
649    return ar.forEach(function (value) {
650      var _accumulator;
651
652      return _isString(value) && !leaveStrings || _isArrayLike(value, 1) ? (_accumulator = accumulator).push.apply(_accumulator, toArray(value)) : accumulator.push(value);
653    }) || accumulator;
654  },
655      toArray = function toArray(value, scope, leaveStrings) {
656    return _context && !scope && _context.selector ? _context.selector(value) : _isString(value) && !leaveStrings && (_coreInitted || !_wake()) ? _slice.call((scope || _doc).querySelectorAll(value), 0) : _isArray(value) ? _flatten(value, leaveStrings) : _isArrayLike(value) ? _slice.call(value, 0) : value ? [value] : [];
657  },
658      selector = function selector(value) {
659    value = toArray(value)[0] || _warn("Invalid scope") || {};
660    return function (v) {
661      var el = value.current || value.nativeElement || value;
662      return toArray(v, el.querySelectorAll ? el : el === value ? _warn("Invalid scope") || _doc.createElement("div") : value);
663    };
664  },
665      shuffle = function shuffle(a) {
666    return a.sort(function () {
667      return .5 - Math.random();
668    });
669  },
670      distribute = function distribute(v) {
671    if (_isFunction(v)) {
672      return v;
673    }
674
675    var vars = _isObject(v) ? v : {
676      each: v
677    },
678        ease = _parseEase(vars.ease),
679        from = vars.from || 0,
680        base = parseFloat(vars.base) || 0,
681        cache = {},
682        isDecimal = from > 0 && from < 1,
683        ratios = isNaN(from) || isDecimal,
684        axis = vars.axis,
685        ratioX = from,
686        ratioY = from;
687
688    if (_isString(from)) {
689      ratioX = ratioY = {
690        center: .5,
691        edges: .5,
692        end: 1
693      }[from] || 0;
694    } else if (!isDecimal && ratios) {
695      ratioX = from[0];
696      ratioY = from[1];
697    }
698
699    return function (i, target, a) {
700      var l = (a || vars).length,
701          distances = cache[l],
702          originX,
703          originY,
704          x,
705          y,
706          d,
707          j,
708          max,
709          min,
710          wrapAt;
711
712      if (!distances) {
713        wrapAt = vars.grid === "auto" ? 0 : (vars.grid || [1, _bigNum])[1];
714
715        if (!wrapAt) {
716          max = -_bigNum;
717
718          while (max < (max = a[wrapAt++].getBoundingClientRect().left) && wrapAt < l) {}
719
720          wrapAt < l && wrapAt--;
721        }
722
723        distances = cache[l] = [];
724        originX = ratios ? Math.min(wrapAt, l) * ratioX - .5 : from % wrapAt;
725        originY = wrapAt === _bigNum ? 0 : ratios ? l * ratioY / wrapAt - .5 : from / wrapAt | 0;
726        max = 0;
727        min = _bigNum;
728
729        for (j = 0; j < l; j++) {
730          x = j % wrapAt - originX;
731          y = originY - (j / wrapAt | 0);
732          distances[j] = d = !axis ? _sqrt(x * x + y * y) : Math.abs(axis === "y" ? y : x);
733          d > max && (max = d);
734          d < min && (min = d);
735        }
736
737        from === "random" && shuffle(distances);
738        distances.max = max - min;
739        distances.min = min;
740        distances.v = l = (parseFloat(vars.amount) || parseFloat(vars.each) * (wrapAt > l ? l - 1 : !axis ? Math.max(wrapAt, l / wrapAt) : axis === "y" ? l / wrapAt : wrapAt) || 0) * (from === "edges" ? -1 : 1);
741        distances.b = l < 0 ? base - l : base;
742        distances.u = getUnit(vars.amount || vars.each) || 0;
743        ease = ease && l < 0 ? _invertEase(ease) : ease;
744      }
745
746      l = (distances[i] - distances.min) / distances.max || 0;
747      return _roundPrecise(distances.b + (ease ? ease(l) : l) * distances.v) + distances.u;
748    };
749  },
750      _roundModifier = function _roundModifier(v) {
751    var p = Math.pow(10, ((v + "").split(".")[1] || "").length);
752    return function (raw) {
753      var n = _roundPrecise(Math.round(parseFloat(raw) / v) * v * p);
754
755      return (n - n % 1) / p + (_isNumber(raw) ? 0 : getUnit(raw));
756    };
757  },
758      snap = function snap(snapTo, value) {
759    var isArray = _isArray(snapTo),
760        radius,
761        is2D;
762
763    if (!isArray && _isObject(snapTo)) {
764      radius = isArray = snapTo.radius || _bigNum;
765
766      if (snapTo.values) {
767        snapTo = toArray(snapTo.values);
768
769        if (is2D = !_isNumber(snapTo[0])) {
770          radius *= radius;
771        }
772      } else {
773        snapTo = _roundModifier(snapTo.increment);
774      }
775    }
776
777    return _conditionalReturn(value, !isArray ? _roundModifier(snapTo) : _isFunction(snapTo) ? function (raw) {
778      is2D = snapTo(raw);
779      return Math.abs(is2D - raw) <= radius ? is2D : raw;
780    } : function (raw) {
781      var x = parseFloat(is2D ? raw.x : raw),
782          y = parseFloat(is2D ? raw.y : 0),
783          min = _bigNum,
784          closest = 0,
785          i = snapTo.length,
786          dx,
787          dy;
788
789      while (i--) {
790        if (is2D) {
791          dx = snapTo[i].x - x;
792          dy = snapTo[i].y - y;
793          dx = dx * dx + dy * dy;
794        } else {
795          dx = Math.abs(snapTo[i] - x);
796        }
797
798        if (dx < min) {
799          min = dx;
800          closest = i;
801        }
802      }
803
804      closest = !radius || min <= radius ? snapTo[closest] : raw;
805      return is2D || closest === raw || _isNumber(raw) ? closest : closest + getUnit(raw);
806    });
807  },
808      random = function random(min, max, roundingIncrement, returnFunction) {
809    return _conditionalReturn(_isArray(min) ? !max : roundingIncrement === true ? !!(roundingIncrement = 0) : !returnFunction, function () {
810      return _isArray(min) ? min[~~(Math.random() * min.length)] : (roundingIncrement = roundingIncrement || 1e-5) && (returnFunction = roundingIncrement < 1 ? Math.pow(10, (roundingIncrement + "").length - 2) : 1) && Math.floor(Math.round((min - roundingIncrement / 2 + Math.random() * (max - min + roundingIncrement * .99)) / roundingIncrement) * roundingIncrement * returnFunction) / returnFunction;
811    });
812  },
813      pipe = function pipe() {
814    for (var _len = arguments.length, functions = new Array(_len), _key = 0; _key < _len; _key++) {
815      functions[_key] = arguments[_key];
816    }
817
818    return function (value) {
819      return functions.reduce(function (v, f) {
820        return f(v);
821      }, value);
822    };
823  },
824      unitize = function unitize(func, unit) {
825    return function (value) {
826      return func(parseFloat(value)) + (unit || getUnit(value));
827    };
828  },
829      normalize = function normalize(min, max, value) {
830    return mapRange(min, max, 0, 1, value);
831  },
832      _wrapArray = function _wrapArray(a, wrapper, value) {
833    return _conditionalReturn(value, function (index) {
834      return a[~~wrapper(index)];
835    });
836  },
837      wrap = function wrap(min, max, value) {
838    var range = max - min;
839    return _isArray(min) ? _wrapArray(min, wrap(0, min.length), max) : _conditionalReturn(value, function (value) {
840      return (range + (value - min) % range) % range + min;
841    });
842  },
843      wrapYoyo = function wrapYoyo(min, max, value) {
844    var range = max - min,
845        total = range * 2;
846    return _isArray(min) ? _wrapArray(min, wrapYoyo(0, min.length - 1), max) : _conditionalReturn(value, function (value) {
847      value = (total + (value - min) % total) % total || 0;
848      return min + (value > range ? total - value : value);
849    });
850  },
851      _replaceRandom = function _replaceRandom(
vendor: 531 bytes, lines 851-867
851value) {
852    var prev = 0,
853        s = "",
854        i,
855        nums,
856        end,
857        isArray;
858
859    while (~(i = value.indexOf("random(", prev))) {
860      end = value.indexOf(")", i);
861      isArray = value.charAt(i + 7) === "[";
862      nums = value.substr(i + 7, end - i - 7).match(isArray ? _delimitedValueExp : _strictNumExp);
863      s += value.substr(prev, i - prev) + random(isArray ? nums : +nums[0], isArray ? 0 : +nums[1], +nums[2] || 1e-5);
864      prev = end + 1;
865    }
866
867    return s + value.substr(prev, value.length - prev
vendor: 14,290 bytes, lines 867-1383
867);
868  },
869      mapRange = function mapRange(inMin, inMax, outMin, outMax, value) {
870    var inRange = inMax - inMin,
871        outRange = outMax - outMin;
872    return _conditionalReturn(value, function (value) {
873      return outMin + ((value - inMin) / inRange * outRange || 0);
874    });
875  },
876      interpolate = function interpolate(start, end, progress, mutate) {
877    var func = isNaN(start + end) ? 0 : function (p) {
878      return (1 - p) * start + p * end;
879    };
880
881    if (!func) {
882      var isString = _isString(start),
883          master = {},
884          p,
885          i,
886          interpolators,
887          l,
888          il;
889
890      progress === true && (mutate = 1) && (progress = null);
891
892      if (isString) {
893        start = {
894          p: start
895        };
896        end = {
897          p: end
898        };
899      } else if (_isArray(start) && !_isArray(end)) {
900        interpolators = [];
901        l = start.length;
902        il = l - 2;
903
904        for (i = 1; i < l; i++) {
905          interpolators.push(interpolate(start[i - 1], start[i]));
906        }
907
908        l--;
909
910        func = function func(p) {
911          p *= l;
912          var i = Math.min(il, ~~p);
913          return interpolators[i](p - i);
914        };
915
916        progress = end;
917      } else if (!mutate) {
918        start = _merge(_isArray(start) ? [] : {}, start);
919      }
920
921      if (!interpolators) {
922        for (p in end) {
923          _addPropTween.call(master, start, p, "get", end[p]);
924        }
925
926        func = function func(p) {
927          return _renderPropTweens(p, master) || (isString ? start.p : start);
928        };
929      }
930    }
931
932    return _conditionalReturn(progress, func);
933  },
934      _getLabelInDirection = function _getLabelInDirection(timeline, fromTime, backward) {
935    var labels = timeline.labels,
936        min = _bigNum,
937        p,
938        distance,
939        label;
940
941    for (p in labels) {
942      distance = labels[p] - fromTime;
943
944      if (distance < 0 === !!backward && distance && min > (distance = Math.abs(distance))) {
945        label = p;
946        min = distance;
947      }
948    }
949
950    return label;
951  },
952      _callback = function _callback(animation, type, executeLazyFirst) {
953    var v = animation.vars,
954        callback = v[type],
955        prevContext = _context,
956        context = animation._ctx,
957        params,
958        scope,
959        result;
960
961    if (!callback) {
962      return;
963    }
964
965    params = v[type + "Params"];
966    scope = v.callbackScope || animation;
967    executeLazyFirst && _lazyTweens.length && _lazyRender();
968    context && (_context = context);
969    result = params ? callback.apply(scope, params) : callback.call(scope);
970    _context = prevContext;
971    return result;
972  },
973      _interrupt = function _interrupt(animation) {
974    _removeFromParent(animation);
975
976    animation.scrollTrigger && animation.scrollTrigger.kill(!!_reverting);
977    animation.progress() < 1 && _callback(animation, "onInterrupt");
978    return animation;
979  },
980      _quickTween,
981      _registerPluginQueue = [],
982      _createPlugin = function _createPlugin(config) {
983    if (!config) return;
984    config = !config.name && config["default"] || config;
985
986    if (_windowExists() || config.headless) {
987      var name = config.name,
988          isFunc = _isFunction(config),
989          Plugin = name && !isFunc && config.init ? function () {
990        this._props = [];
991      } : config,
992          instanceDefaults = {
993        init: _emptyFunc,
994        render: _renderPropTweens,
995        add: _addPropTween,
996        kill: _killPropTweensOf,
997        modifier: _addPluginModifier,
998        rawVars: 0
999      },
1000          statics = {
1001        targetTest: 0,
1002        get: 0,
1003        getSetter: _getSetter,
1004        aliases: {},
1005        register: 0
1006      };
1007
1008      _wake();
1009
1010      if (config !== Plugin) {
1011        if (_plugins[name]) {
1012          return;
1013        }
1014
1015        _setDefaults(Plugin, _setDefaults(_copyExcluding(config, instanceDefaults), statics));
1016
1017        _merge(Plugin.prototype, _merge(instanceDefaults, _copyExcluding(config, statics)));
1018
1019        _plugins[Plugin.prop = name] = Plugin;
1020
1021        if (config.targetTest) {
1022          _harnessPlugins.push(Plugin);
1023
1024          _reservedProps[name] = 1;
1025        }
1026
1027        name = (name === "css" ? "CSS" : name.charAt(0).toUpperCase() + name.substr(1)) + "Plugin";
1028      }
1029
1030      _addGlobal(name, Plugin);
1031
1032      config.register && config.register(gsap, Plugin, PropTween);
1033    } else {
1034      _registerPluginQueue.push(config);
1035    }
1036  },
1037      _255 = 255,
1038      _colorLookup = {
1039    aqua: [0, _255, _255],
1040    lime: [0, _255, 0],
1041    silver: [192, 192, 192],
1042    black: [0, 0, 0],
1043    maroon: [128, 0, 0],
1044    teal: [0, 128, 128],
1045    blue: [0, 0, _255],
1046    navy: [0, 0, 128],
1047    white: [_255, _255, _255],
1048    olive: [128, 128, 0],
1049    yellow: [_255, _255, 0],
1050    orange: [_255, 165, 0],
1051    gray: [128, 128, 128],
1052    purple: [128, 0, 128],
1053    green: [0, 128, 0],
1054    red: [_255, 0, 0],
1055    pink: [_255, 192, 203],
1056    cyan: [0, _255, _255],
1057    transparent: [_255, _255, _255, 0]
1058  },
1059      _hue = function _hue(h, m1, m2) {
1060    h += h < 0 ? 1 : h > 1 ? -1 : 0;
1061    return (h * 6 < 1 ? m1 + (m2 - m1) * h * 6 : h < .5 ? m2 : h * 3 < 2 ? m1 + (m2 - m1) * (2 / 3 - h) * 6 : m1) * _255 + .5 | 0;
1062  },
1063      splitColor = function splitColor(v, toHSL, forceAlpha) {
1064    var a = !v ? _colorLookup.black : _isNumber(v) ? [v >> 16, v >> 8 & _255, v & _255] : 0,
1065        r,
1066        g,
1067        b,
1068        h,
1069        s,
1070        l,
1071        max,
1072        min,
1073        d,
1074        wasHSL;
1075
1076    if (!a) {
1077      if (v.substr(-1) === ",") {
1078        v = v.substr(0, v.length - 1);
1079      }
1080
1081      if (_colorLookup[v]) {
1082        a = _colorLookup[v];
1083      } else if (v.charAt(0) === "#") {
1084        if (v.length < 6) {
1085          r = v.charAt(1);
1086          g = v.charAt(2);
1087          b = v.charAt(3);
1088          v = "#" + r + r + g + g + b + b + (v.length === 5 ? v.charAt(4) + v.charAt(4) : "");
1089        }
1090
1091        if (v.length === 9) {
1092          a = parseInt(v.substr(1, 6), 16);
1093          return [a >> 16, a >> 8 & _255, a & _255, parseInt(v.substr(7), 16) / 255];
1094        }
1095
1096        v = parseInt(v.substr(1), 16);
1097        a = [v >> 16, v >> 8 & _255, v & _255];
1098      } else if (v.substr(0, 3) === "hsl") {
1099        a = wasHSL = v.match(_strictNumExp);
1100
1101        if (!toHSL) {
1102          h = +a[0] % 360 / 360;
1103          s = +a[1] / 100;
1104          l = +a[2] / 100;
1105          g = l <= .5 ? l * (s + 1) : l + s - l * s;
1106          r = l * 2 - g;
1107          a.length > 3 && (a[3] *= 1);
1108          a[0] = _hue(h + 1 / 3, r, g);
1109          a[1] = _hue(h, r, g);
1110          a[2] = _hue(h - 1 / 3, r, g);
1111        } else if (~v.indexOf("=")) {
1112          a = v.match(_numExp);
1113          forceAlpha && a.length < 4 && (a[3] = 1);
1114          return a;
1115        }
1116      } else {
1117        a = v.match(_strictNumExp) || _colorLookup.transparent;
1118      }
1119
1120      a = a.map(Number);
1121    }
1122
1123    if (toHSL && !wasHSL) {
1124      r = a[0] / _255;
1125      g = a[1] / _255;
1126      b = a[2] / _255;
1127      max = Math.max(r, g, b);
1128      min = Math.min(r, g, b);
1129      l = (max + min) / 2;
1130
1131      if (max === min) {
1132        h = s = 0;
1133      } else {
1134        d = max - min;
1135        s = l > 0.5 ? d / (2 - max - min) : d / (max + min);
1136        h = max === r ? (g - b) / d + (g < b ? 6 : 0) : max === g ? (b - r) / d + 2 : (r - g) / d + 4;
1137        h *= 60;
1138      }
1139
1140      a[0] = ~~(h + .5);
1141      a[1] = ~~(s * 100 + .5);
1142      a[2] = ~~(l * 100 + .5);
1143    }
1144
1145    forceAlpha && a.length < 4 && (a[3] = 1);
1146    return a;
1147  },
1148      _colorOrderData = function _colorOrderData(v) {
1149    var values = [],
1150        c = [],
1151        i = -1;
1152    v.split(_colorExp).forEach(function (v) {
1153      var a = v.match(_numWithUnitExp) || [];
1154      values.push.apply(values, a);
1155      c.push(i += a.length + 1);
1156    });
1157    values.c = c;
1158    return values;
1159  },
1160      _formatColors = function _formatColors(s, toHSL, orderMatchData) {
1161    var result = "",
1162        colors = (s + result).match(_colorExp),
1163        type = toHSL ? "hsla(" : "rgba(",
1164        i = 0,
1165        c,
1166        shell,
1167        d,
1168        l;
1169
1170    if (!colors) {
1171      return s;
1172    }
1173
1174    colors = colors.map(function (color) {
1175      return (color = splitColor(color, toHSL, 1)) && type + (toHSL ? color[0] + "," + color[1] + "%," + color[2] + "%," + color[3] : color.join(",")) + ")";
1176    });
1177
1178    if (orderMatchData) {
1179      d = _colorOrderData(s);
1180      c = orderMatchData.c;
1181
1182      if (c.join(result) !== d.c.join(result)) {
1183        shell = s.replace(_colorExp, "1").split(_numWithUnitExp);
1184        l = shell.length - 1;
1185
1186        for (; i < l; i++) {
1187          result += shell[i] + (~c.indexOf(i) ? colors.shift() || type + "0,0,0,0)" : (d.length ? d : colors.length ? colors : orderMatchData).shift());
1188        }
1189      }
1190    }
1191
1192    if (!shell) {
1193      shell = s.split(_colorExp);
1194      l = shell.length - 1;
1195
1196      for (; i < l; i++) {
1197        result += shell[i] + colors[i];
1198      }
1199    }
1200
1201    return result + shell[l];
1202  },
1203      _colorExp = function () {
1204    var s = "(?:\\b(?:(?:rgb|rgba|hsl|hsla)\\(.+?\\))|\\B#(?:[0-9a-f]{3,4}){1,2}\\b",
1205        p;
1206
1207    for (p in _colorLookup) {
1208      s += "|" + p + "\\b";
1209    }
1210
1211    return new RegExp(s + ")", "gi");
1212  }(),
1213      _hslExp = /hsl[a]?\(/,
1214      _colorStringFilter = function _colorStringFilter(a) {
1215    var combined = a.join(" "),
1216        toHSL;
1217    _colorExp.lastIndex = 0;
1218
1219    if (_colorExp.test(combined)) {
1220      toHSL = _hslExp.test(combined);
1221      a[1] = _formatColors(a[1], toHSL);
1222      a[0] = _formatColors(a[0], toHSL, _colorOrderData(a[1]));
1223      return true;
1224    }
1225  },
1226      _tickerActive,
1227      _ticker = function () {
1228    var _getTime = Date.now,
1229        _lagThreshold = 500,
1230        _adjustedLag = 33,
1231        _startTime = _getTime(),
1232        _lastUpdate = _startTime,
1233        _gap = 1000 / 240,
1234        _nextTime = _gap,
1235        _listeners = [],
1236        _id,
1237        _req,
1238        _raf,
1239        _self,
1240        _delta,
1241        _i,
1242        _tick = function _tick(v) {
1243      var elapsed = _getTime() - _lastUpdate,
1244          manual = v === true,
1245          overlap,
1246          dispatch,
1247          time,
1248          frame;
1249
1250      (elapsed > _lagThreshold || elapsed < 0) && (_startTime += elapsed - _adjustedLag);
1251      _lastUpdate += elapsed;
1252      time = _lastUpdate - _startTime;
1253      overlap = time - _nextTime;
1254
1255      if (overlap > 0 || manual) {
1256        frame = ++_self.frame;
1257        _delta = time - _self.time * 1000;
1258        _self.time = time = time / 1000;
1259        _nextTime += overlap + (overlap >= _gap ? 4 : _gap - overlap);
1260        dispatch = 1;
1261      }
1262
1263      manual || (_id = _req(_tick));
1264
1265      if (dispatch) {
1266        for (_i = 0; _i < _listeners.length; _i++) {
1267          _listeners[_i](time, _delta, frame, v);
1268        }
1269      }
1270    };
1271
1272    _self = {
1273      time: 0,
1274      frame: 0,
1275      tick: function tick() {
1276        _tick(true);
1277      },
1278      deltaRatio: function deltaRatio(fps) {
1279        return _delta / (1000 / (fps || 60));
1280      },
1281      wake: function wake() {
1282        if (_coreReady) {
1283          if (!_coreInitted && _windowExists()) {
1284            _win = _coreInitted = window;
1285            _doc = _win.document || {};
1286            _globals.gsap = gsap;
1287            (_win.gsapVersions || (_win.gsapVersions = [])).push(gsap.version);
1288
1289            _install(_installScope || _win.GreenSockGlobals || !_win.gsap && _win || {});
1290
1291            _registerPluginQueue.forEach(_createPlugin);
1292          }
1293
1294          _raf = typeof requestAnimationFrame !== "undefined" && requestAnimationFrame;
1295          _id && _self.sleep();
1296
1297          _req = _raf || function (f) {
1298            return setTimeout(f, _nextTime - _self.time * 1000 + 1 | 0);
1299          };
1300
1301          _tickerActive = 1;
1302
1303          _tick(2);
1304        }
1305      },
1306      sleep: function sleep() {
1307        (_raf ? cancelAnimationFrame : clearTimeout)(_id);
1308        _tickerActive = 0;
1309        _req = _emptyFunc;
1310      },
1311      lagSmoothing: function lagSmoothing(threshold, adjustedLag) {
1312        _lagThreshold = threshold || Infinity;
1313        _adjustedLag = Math.min(adjustedLag || 33, _lagThreshold);
1314      },
1315      fps: function fps(_fps) {
1316        _gap = 1000 / (_fps || 240);
1317        _nextTime = _self.time * 1000 + _gap;
1318      },
1319      add: function add(callback, once, prioritize) {
1320        var func = once ? function (t, d, f, v) {
1321          callback(t, d, f, v);
1322
1323          _self.remove(func);
1324        } : callback;
1325
1326        _self.remove(callback);
1327
1328        _listeners[prioritize ? "unshift" : "push"](func);
1329
1330        _wake();
1331
1332        return func;
1333      },
1334      remove: function remove(callback, i) {
1335        ~(i = _listeners.indexOf(callback)) && _listeners.splice(i, 1) && _i >= i && _i--;
1336      },
1337      _listeners: _listeners
1338    };
1339    return _self;
1340  }(),
1341      _wake = function _wake() {
1342    return !_tickerActive && _ticker.wake();
1343  },
1344      _easeMap = {},
1345      _customEaseExp = /^[\d.\-M][\d.\-,\s]/,
1346      _quotesExp = /["']/g,
1347      _parseObjectInString = function _parseObjectInString(value) {
1348    var obj = {},
1349        split = value.substr(1, value.length - 3).split(":"),
1350        key = split[0],
1351        i = 1,
1352        l = split.length,
1353        index,
1354        val,
1355        parsedVal;
1356
1357    for (; i < l; i++) {
1358      val = split[i];
1359      index = i !== l - 1 ? val.lastIndexOf(",") : val.length;
1360      parsedVal = val.substr(0, index);
1361      obj[key] = isNaN(parsedVal) ? parsedVal.replace(_quotesExp, "").trim() : +parsedVal;
1362      key = val.substr(index + 1).trim();
1363    }
1364
1365    return obj;
1366  },
1367      _valueInParentheses = function _valueInParentheses(value) {
1368    var open = value.indexOf("(") + 1,
1369        close = value.indexOf(")"),
1370        nested = value.indexOf("(", open);
1371    return value.substring(open, ~nested && nested < close ? value.indexOf(")", close + 1) : close);
1372  },
1373      _configEaseFromString = function _configEaseFromString(name) {
1374    var split = (name + "").split("("),
1375        ease = _easeMap[split[0]];
1376    return ease && split.length > 1 && ease.config ? ease.config.apply(null, ~name.indexOf("{") ? [_parseObjectInString(split[1])] : _valueInParentheses(name).split(",").map(_numericIfPossible)) : _easeMap._CE && _customEaseExp.test(name) ? _easeMap._CE("", name) : ease;
1377  },
1378      _invertEase = function _invertEase(ease) {
1379    return function (p) {
1380      return 1 - ease(1 - p);
1381    };
1382  },
1383      _p
1383ropagateYoyoEase = function _propagateYoyoEase(timeline, isYoyo) {
1384    var child = timeline._first,
1385        ease;
1386
1387    while (child) {
1388      if (child instanceof Timeline) {
1389        _propagateYoyoEase(child, isYoyo);
1390      } else if (child.vars.yoyoEase && (!child._yoyo || !child._repeat) && child._yoyo !== isYoyo) {
1391        if (child.timeline) {
1392          _propagateYoyoEase(child.timeline, isYoyo);
1393        } else {
1394          ease = child._ease;
1395          child._ease = child._yEase;
1396          child._yEase = ease;
1397          child._yoyo = isYoyo;
1398        }
1399      }
1400
1401      child = child._next;
1402    }
vendor: 3,445 bytes, lines 1402-1513
1402
1403  },
1404      _parseEase = function _parseEase(ease, defaultEase) {
1405    return !ease ? defaultEase : (_isFunction(ease) ? ease : _easeMap[ease] || _configEaseFromString(ease)) || defaultEase;
1406  },
1407      _insertEase = function _insertEase(names, easeIn, easeOut, easeInOut) {
1408    if (easeOut === void 0) {
1409      easeOut = function easeOut(p) {
1410        return 1 - easeIn(1 - p);
1411      };
1412    }
1413
1414    if (easeInOut === void 0) {
1415      easeInOut = function easeInOut(p) {
1416        return p < .5 ? easeIn(p * 2) / 2 : 1 - easeIn((1 - p) * 2) / 2;
1417      };
1418    }
1419
1420    var ease = {
1421      easeIn: easeIn,
1422      easeOut: easeOut,
1423      easeInOut: easeInOut
1424    },
1425        lowercaseName;
1426
1427    _forEachName(names, function (name) {
1428      _easeMap[name] = _globals[name] = ease;
1429      _easeMap[lowercaseName = name.toLowerCase()] = easeOut;
1430
1431      for (var p in ease) {
1432        _easeMap[lowercaseName + (p === "easeIn" ? ".in" : p === "easeOut" ? ".out" : ".inOut")] = _easeMap[name + "." + p] = ease[p];
1433      }
1434    });
1435
1436    return ease;
1437  },
1438      _easeInOutFromOut = function _easeInOutFromOut(easeOut) {
1439    return function (p) {
1440      return p < .5 ? (1 - easeOut(1 - p * 2)) / 2 : .5 + easeOut((p - .5) * 2) / 2;
1441    };
1442  },
1443      _configElastic = function _configElastic(type, amplitude, period) {
1444    var p1 = amplitude >= 1 ? amplitude : 1,
1445        p2 = (period || (type ? .3 : .45)) / (amplitude < 1 ? amplitude : 1),
1446        p3 = p2 / _2PI * (Math.asin(1 / p1) || 0),
1447        easeOut = function easeOut(p) {
1448      return p === 1 ? 1 : p1 * Math.pow(2, -10 * p) * _sin((p - p3) * p2) + 1;
1449    },
1450        ease = type === "out" ? easeOut : type === "in" ? function (p) {
1451      return 1 - easeOut(1 - p);
1452    } : _easeInOutFromOut(easeOut);
1453
1454    p2 = _2PI / p2;
1455
1456    ease.config = function (amplitude, period) {
1457      return _configElastic(type, amplitude, period);
1458    };
1459
1460    return ease;
1461  },
1462      _configBack = function _configBack(type, overshoot) {
1463    if (overshoot === void 0) {
1464      overshoot = 1.70158;
1465    }
1466
1467    var easeOut = function easeOut(p) {
1468      return p ? --p * p * ((overshoot + 1) * p + overshoot) + 1 : 0;
1469    },
1470        ease = type === "out" ? easeOut : type === "in" ? function (p) {
1471      return 1 - easeOut(1 - p);
1472    } : _easeInOutFromOut(easeOut);
1473
1474    ease.config = function (overshoot) {
1475      return _configBack(type, overshoot);
1476    };
1477
1478    return ease;
1479  };
1480
1481  _forEachName("Linear,Quad,Cubic,Quart,Quint,Strong", function (name, i) {
1482    var power = i < 5 ? i + 1 : i;
1483
1484    _insertEase(name + ",Power" + (power - 1), i ? function (p) {
1485      return Math.pow(p, power);
1486    } : function (p) {
1487      return p;
1488    }, function (p) {
1489      return 1 - Math.pow(1 - p, power);
1490    }, function (p) {
1491      return p < .5 ? Math.pow(p * 2, power) / 2 : 1 - Math.pow((1 - p) * 2, power) / 2;
1492    });
1493  });
1494
1495  _easeMap.Linear.easeNone = _easeMap.none = _easeMap.Linear.easeIn;
1496
1497  _insertEase("Elastic", _configElastic("in"), _configElastic("out"), _configElastic());
1498
1499  (function (n, c) {
1500    var n1 = 1 / c,
1501        n2 = 2 * n1,
1502        n3 = 2.5 * n1,
1503        easeOut = function easeOut(p) {
1504      return p < n1 ? n * p * p : p < n2 ? n * Math.pow(p - 1.5 / c, 2) + .75 : p < n3 ? n * (p -= 2.25 / c) * p + .9375 : n * Math.pow(p - 2.625 / c, 2) + .984375;
1505    };
1506
1507    _insertEase("Bounce", function (p) {
1508      return 1 - easeOut(1 - p);
1509    }, easeOut);
1510  })(7.5625, 2.75);
1511
1512  _insertEase("Expo", function (p) {
1513    return 
vendor: 18,509 bytes, lines 1513-2088
1513p ? Math.pow(2, 10 * (p - 1)) : 0;
1514  });
1515
1516  _insertEase("Circ", function (p) {
1517    return -(_sqrt(1 - p * p) - 1);
1518  });
1519
1520  _insertEase("Sine", function (p) {
1521    return p === 1 ? 1 : -_cos(p * _HALF_PI) + 1;
1522  });
1523
1524  _insertEase("Back", _configBack("in"), _configBack("out"), _configBack());
1525
1526  _easeMap.SteppedEase = _easeMap.steps = _globals.SteppedEase = {
1527    config: function config(steps, immediateStart) {
1528      if (steps === void 0) {
1529        steps = 1;
1530      }
1531
1532      var p1 = 1 / steps,
1533          p2 = steps + (immediateStart ? 0 : 1),
1534          p3 = immediateStart ? 1 : 0,
1535          max = 1 - _tinyNum;
1536      return function (p) {
1537        return ((p2 * _clamp(0, max, p) | 0) + p3) * p1;
1538      };
1539    }
1540  };
1541  _defaults.ease = _easeMap["quad.out"];
1542
1543  _forEachName("onComplete,onUpdate,onStart,onRepeat,onReverseComplete,onInterrupt", function (name) {
1544    return _callbackNames += name + "," + name + "Params,";
1545  });
1546
1547  var GSCache = function GSCache(target, harness) {
1548    this.id = _gsID++;
1549    target._gsap = this;
1550    this.target = target;
1551    this.harness = harness;
1552    this.get = harness ? harness.get : _getProperty;
1553    this.set = harness ? harness.getSetter : _getSetter;
1554  };
1555  var Animation = function () {
1556    function Animation(vars) {
1557      this.vars = vars;
1558      this._delay = +vars.delay || 0;
1559
1560      if (this._repeat = vars.repeat === Infinity ? -2 : vars.repeat || 0) {
1561        this._rDelay = vars.repeatDelay || 0;
1562        this._yoyo = !!vars.yoyo || !!vars.yoyoEase;
1563      }
1564
1565      this._ts = 1;
1566
1567      _setDuration(this, +vars.duration, 1, 1);
1568
1569      this.data = vars.data;
1570
1571      if (_context) {
1572        this._ctx = _context;
1573
1574        _context.data.push(this);
1575      }
1576
1577      _tickerActive || _ticker.wake();
1578    }
1579
1580    var _proto = Animation.prototype;
1581
1582    _proto.delay = function delay(value) {
1583      if (value || value === 0) {
1584        this.parent && this.parent.smoothChildTiming && this.startTime(this._start + value - this._delay);
1585        this._delay = value;
1586        return this;
1587      }
1588
1589      return this._delay;
1590    };
1591
1592    _proto.duration = function duration(value) {
1593      return arguments.length ? this.totalDuration(this._repeat > 0 ? value + (value + this._rDelay) * this._repeat : value) : this.totalDuration() && this._dur;
1594    };
1595
1596    _proto.totalDuration = function totalDuration(value) {
1597      if (!arguments.length) {
1598        return this._tDur;
1599      }
1600
1601      this._dirty = 0;
1602      return _setDuration(this, this._repeat < 0 ? value : (value - this._repeat * this._rDelay) / (this._repeat + 1));
1603    };
1604
1605    _proto.totalTime = function totalTime(_totalTime, suppressEvents) {
1606      _wake();
1607
1608      if (!arguments.length) {
1609        return this._tTime;
1610      }
1611
1612      var parent = this._dp;
1613
1614      if (parent && parent.smoothChildTiming && this._ts) {
1615        _alignPlayhead(this, _totalTime);
1616
1617        !parent._dp || parent.parent || _postAddChecks(parent, this);
1618
1619        while (parent && parent.parent) {
1620          if (parent.parent._time !== parent._start + (parent._ts >= 0 ? parent._tTime / parent._ts : (parent.totalDuration() - parent._tTime) / -parent._ts)) {
1621            parent.totalTime(parent._tTime, true);
1622          }
1623
1624          parent = parent.parent;
1625        }
1626
1627        if (!this.parent && this._dp.autoRemoveChildren && (this._ts > 0 && _totalTime < this._tDur || this._ts < 0 && _totalTime > 0 || !this._tDur && !_totalTime)) {
1628          _addToTimeline(this._dp, this, this._start - this._delay);
1629        }
1630      }
1631
1632      if (this._tTime !== _totalTime || !this._dur && !suppressEvents || this._initted && Math.abs(this._zTime) === _tinyNum || !_totalTime && !this._initted && (this.add || this._ptLookup)) {
1633        this._ts || (this._pTime = _totalTime);
1634
1635        _lazySafeRender(this, _totalTime, suppressEvents);
1636      }
1637
1638      return this;
1639    };
1640
1641    _proto.time = function time(value, suppressEvents) {
1642      return arguments.length ? this.totalTime(Math.min(this.totalDuration(), value + _elapsedCycleDuration(this)) % (this._dur + this._rDelay) || (value ? this._dur : 0), suppressEvents) : this._time;
1643    };
1644
1645    _proto.totalProgress = function totalProgress(value, suppressEvents) {
1646      return arguments.length ? this.totalTime(this.totalDuration() * value, suppressEvents) : this.totalDuration() ? Math.min(1, this._tTime / this._tDur) : this.rawTime() > 0 ? 1 : 0;
1647    };
1648
1649    _proto.progress = function progress(value, suppressEvents) {
1650      return arguments.length ? this.totalTime(this.duration() * (this._yoyo && !(this.iteration() & 1) ? 1 - value : value) + _elapsedCycleDuration(this), suppressEvents) : this.duration() ? Math.min(1, this._time / this._dur) : this.rawTime() > 0 ? 1 : 0;
1651    };
1652
1653    _proto.iteration = function iteration(value, suppressEvents) {
1654      var cycleDuration = this.duration() + this._rDelay;
1655
1656      return arguments.length ? this.totalTime(this._time + (value - 1) * cycleDuration, suppressEvents) : this._repeat ? _animationCycle(this._tTime, cycleDuration) + 1 : 1;
1657    };
1658
1659    _proto.timeScale = function timeScale(value, suppressEvents) {
1660      if (!arguments.length) {
1661        return this._rts === -_tinyNum ? 0 : this._rts;
1662      }
1663
1664      if (this._rts === value) {
1665        return this;
1666      }
1667
1668      var tTime = this.parent && this._ts ? _parentToChildTotalTime(this.parent._time, this) : this._tTime;
1669      this._rts = +value || 0;
1670      this._ts = this._ps || value === -_tinyNum ? 0 : this._rts;
1671      this.totalTime(_clamp(-Math.abs(this._delay), this._tDur, tTime), suppressEvents !== false);
1672
1673      _setEnd(this);
1674
1675      return _recacheAncestors(this);
1676    };
1677
1678    _proto.paused = function paused(value) {
1679      if (!arguments.length) {
1680        return this._ps;
1681      }
1682
1683      if (this._ps !== value) {
1684        this._ps = value;
1685
1686        if (value) {
1687          this._pTime = this._tTime || Math.max(-this._delay, this.rawTime());
1688          this._ts = this._act = 0;
1689        } else {
1690          _wake();
1691
1692          this._ts = this._rts;
1693          this.totalTime(this.parent && !this.parent.smoothChildTiming ? this.rawTime() : this._tTime || this._pTime, this.progress() === 1 && Math.abs(this._zTime) !== _tinyNum && (this._tTime -= _tinyNum));
1694        }
1695      }
1696
1697      return this;
1698    };
1699
1700    _proto.startTime = function startTime(value) {
1701      if (arguments.length) {
1702        this._start = value;
1703        var parent = this.parent || this._dp;
1704        parent && (parent._sort || !this.parent) && _addToTimeline(parent, this, value - this._delay);
1705        return this;
1706      }
1707
1708      return this._start;
1709    };
1710
1711    _proto.endTime = function endTime(includeRepeats) {
1712      return this._start + (_isNotFalse(includeRepeats) ? this.totalDuration() : this.duration()) / Math.abs(this._ts || 1);
1713    };
1714
1715    _proto.rawTime = function rawTime(wrapRepeats) {
1716      var parent = this.parent || this._dp;
1717      return !parent ? this._tTime : wrapRepeats && (!this._ts || this._repeat && this._time && this.totalProgress() < 1) ? this._tTime % (this._dur + this._rDelay) : !this._ts ? this._tTime : _parentToChildTotalTime(parent.rawTime(wrapRepeats), this);
1718    };
1719
1720    _proto.revert = function revert(config) {
1721      if (config === void 0) {
1722        config = _revertConfig;
1723      }
1724
1725      var prevIsReverting = _reverting;
1726      _reverting = config;
1727
1728      if (this._initted || this._startAt) {
1729        this.timeline && this.timeline.revert(config);
1730        this.totalTime(-0.01, config.suppressEvents);
1731      }
1732
1733      this.data !== "nested" && config.kill !== false && this.kill();
1734      _reverting = prevIsReverting;
1735      return this;
1736    };
1737
1738    _proto.globalTime = function globalTime(rawTime) {
1739      var animation = this,
1740          time = arguments.length ? rawTime : animation.rawTime();
1741
1742      while (animation) {
1743        time = animation._start + time / (Math.abs(animation._ts) || 1);
1744        animation = animation._dp;
1745      }
1746
1747      return !this.parent && this._sat ? this._sat.globalTime(rawTime) : time;
1748    };
1749
1750    _proto.repeat = function repeat(value) {
1751      if (arguments.length) {
1752        this._repeat = value === Infinity ? -2 : value;
1753        return _onUpdateTotalDuration(this);
1754      }
1755
1756      return this._repeat === -2 ? Infinity : this._repeat;
1757    };
1758
1759    _proto.repeatDelay = function repeatDelay(value) {
1760      if (arguments.length) {
1761        var time = this._time;
1762        this._rDelay = value;
1763
1764        _onUpdateTotalDuration(this);
1765
1766        return time ? this.time(time) : this;
1767      }
1768
1769      return this._rDelay;
1770    };
1771
1772    _proto.yoyo = function yoyo(value) {
1773      if (arguments.length) {
1774        this._yoyo = value;
1775        return this;
1776      }
1777
1778      return this._yoyo;
1779    };
1780
1781    _proto.seek = function seek(position, suppressEvents) {
1782      return this.totalTime(_parsePosition(this, position), _isNotFalse(suppressEvents));
1783    };
1784
1785    _proto.restart = function restart(includeDelay, suppressEvents) {
1786      return this.play().totalTime(includeDelay ? -this._delay : 0, _isNotFalse(suppressEvents));
1787    };
1788
1789    _proto.play = function play(from, suppressEvents) {
1790      from != null && this.seek(from, suppressEvents);
1791      return this.reversed(false).paused(false);
1792    };
1793
1794    _proto.reverse = function reverse(from, suppressEvents) {
1795      from != null && this.seek(from || this.totalDuration(), suppressEvents);
1796      return this.reversed(true).paused(false);
1797    };
1798
1799    _proto.pause = function pause(atTime, suppressEvents) {
1800      atTime != null && this.seek(atTime, suppressEvents);
1801      return this.paused(true);
1802    };
1803
1804    _proto.resume = function resume() {
1805      return this.paused(false);
1806    };
1807
1808    _proto.reversed = function reversed(value) {
1809      if (arguments.length) {
1810        !!value !== this.reversed() && this.timeScale(-this._rts || (value ? -_tinyNum : 0));
1811        return this;
1812      }
1813
1814      return this._rts < 0;
1815    };
1816
1817    _proto.invalidate = function invalidate() {
1818      this._initted = this._act = 0;
1819      this._zTime = -_tinyNum;
1820      return this;
1821    };
1822
1823    _proto.isActive = function isActive() {
1824      var parent = this.parent || this._dp,
1825          start = this._start,
1826          rawTime;
1827      return !!(!parent || this._ts && this._initted && parent.isActive() && (rawTime = parent.rawTime(true)) >= start && rawTime < this.endTime(true) - _tinyNum);
1828    };
1829
1830    _proto.eventCallback = function eventCallback(type, callback, params) {
1831      var vars = this.vars;
1832
1833      if (arguments.length > 1) {
1834        if (!callback) {
1835          delete vars[type];
1836        } else {
1837          vars[type] = callback;
1838          params && (vars[type + "Params"] = params);
1839          type === "onUpdate" && (this._onUpdate = callback);
1840        }
1841
1842        return this;
1843      }
1844
1845      return vars[type];
1846    };
1847
1848    _proto.then = function then(onFulfilled) {
1849      var self = this;
1850      return new Promise(function (resolve) {
1851        var f = _isFunction(onFulfilled) ? onFulfilled : _passThrough,
1852            _resolve = function _resolve() {
1853          var _then = self.then;
1854          self.then = null;
1855          _isFunction(f) && (f = f(self)) && (f.then || f === self) && (self.then = _then);
1856          resolve(f);
1857          self.then = _then;
1858        };
1859
1860        if (self._initted && self.totalProgress() === 1 && self._ts >= 0 || !self._tTime && self._ts < 0) {
1861          _resolve();
1862        } else {
1863          self._prom = _resolve;
1864        }
1865      });
1866    };
1867
1868    _proto.kill = function kill() {
1869      _interrupt(this);
1870    };
1871
1872    return Animation;
1873  }();
1874
1875  _setDefaults(Animation.prototype, {
1876    _time: 0,
1877    _start: 0,
1878    _end: 0,
1879    _tTime: 0,
1880    _tDur: 0,
1881    _dirty: 0,
1882    _repeat: 0,
1883    _yoyo: false,
1884    parent: null,
1885    _initted: false,
1886    _rDelay: 0,
1887    _ts: 1,
1888    _dp: 0,
1889    ratio: 0,
1890    _zTime: -_tinyNum,
1891    _prom: 0,
1892    _ps: false,
1893    _rts: 1
1894  });
1895
1896  var Timeline = function (_Animation) {
1897    _inheritsLoose(Timeline, _Animation);
1898
1899    function Timeline(vars, position) {
1900      var _this;
1901
1902      if (vars === void 0) {
1903        vars = {};
1904      }
1905
1906      _this = _Animation.call(this, vars) || this;
1907      _this.labels = {};
1908      _this.smoothChildTiming = !!vars.smoothChildTiming;
1909      _this.autoRemoveChildren = !!vars.autoRemoveChildren;
1910      _this._sort = _isNotFalse(vars.sortChildren);
1911      _globalTimeline && _addToTimeline(vars.parent || _globalTimeline, _assertThisInitialized(_this), position);
1912      vars.reversed && _this.reverse();
1913      vars.paused && _this.paused(true);
1914      vars.scrollTrigger && _scrollTrigger(_assertThisInitialized(_this), vars.scrollTrigger);
1915      return _this;
1916    }
1917
1918    var _proto2 = Timeline.prototype;
1919
1920    _proto2.to = function to(targets, vars, position) {
1921      _createTweenType(0, arguments, this);
1922
1923      return this;
1924    };
1925
1926    _proto2.from = function from(targets, vars, position) {
1927      _createTweenType(1, arguments, this);
1928
1929      return this;
1930    };
1931
1932    _proto2.fromTo = function fromTo(targets, fromVars, toVars, position) {
1933      _createTweenType(2, arguments, this);
1934
1935      return this;
1936    };
1937
1938    _proto2.set = function set(targets, vars, position) {
1939      vars.duration = 0;
1940      vars.parent = this;
1941      _inheritDefaults(vars).repeatDelay || (vars.repeat = 0);
1942      vars.immediateRender = !!vars.immediateRender;
1943      new Tween(targets, vars, _parsePosition(this, position), 1);
1944      return this;
1945    };
1946
1947    _proto2.call = function call(callback, params, position) {
1948      return _addToTimeline(this, Tween.delayedCall(0, callback, params), position);
1949    };
1950
1951    _proto2.staggerTo = function staggerTo(targets, duration, vars, stagger, position, onCompleteAll, onCompleteAllParams) {
1952      vars.duration = duration;
1953      vars.stagger = vars.stagger || stagger;
1954      vars.onComplete = onCompleteAll;
1955      vars.onCompleteParams = onCompleteAllParams;
1956      vars.parent = this;
1957      new Tween(targets, vars, _parsePosition(this, position));
1958      return this;
1959    };
1960
1961    _proto2.staggerFrom = function staggerFrom(targets, duration, vars, stagger, position, onCompleteAll, onCompleteAllParams) {
1962      vars.runBackwards = 1;
1963      _inheritDefaults(vars).immediateRender = _isNotFalse(vars.immediateRender);
1964      return this.staggerTo(targets, duration, vars, stagger, position, onCompleteAll, onCompleteAllParams);
1965    };
1966
1967    _proto2.staggerFromTo = function staggerFromTo(targets, duration, fromVars, toVars, stagger, position, onCompleteAll, onCompleteAllParams) {
1968      toVars.startAt = fromVars;
1969      _inheritDefaults(toVars).immediateRender = _isNotFalse(toVars.immediateRender);
1970      return this.staggerTo(targets, duration, toVars, stagger, position, onCompleteAll, onCompleteAllParams);
1971    };
1972
1973    _proto2.render = function render(totalTime, suppressEvents, force) {
1974      var prevTime = this._time,
1975          tDur = this._dirty ? this.totalDuration() : this._tDur,
1976          dur = this._dur,
1977          tTime = totalTime <= 0 ? 0 : _roundPrecise(totalTime),
1978          crossingStart = this._zTime < 0 !== totalTime < 0 && (this._initted || !dur),
1979          time,
1980          child,
1981          next,
1982          iteration,
1983          cycleDuration,
1984          prevPaused,
1985          pauseTween,
1986          timeScale,
1987          prevStart,
1988          prevIteration,
1989          yoyo,
1990          isYoyo;
1991      this !== _globalTimeline && tTime > tDur && totalTime >= 0 && (tTime = tDur);
1992
1993      if (tTime !== this._tTime || force || crossingStart) {
1994        if (prevTime !== this._time && dur) {
1995          tTime += this._time - prevTime;
1996          totalTime += this._time - prevTime;
1997        }
1998
1999        time = tTime;
2000        prevStart = this._start;
2001        timeScale = this._ts;
2002        prevPaused = !timeScale;
2003
2004        if (crossingStart) {
2005          dur || (prevTime = this._zTime);
2006          (totalTime || !suppressEvents) && (this._zTime = totalTime);
2007        }
2008
2009        if (this._repeat) {
2010          yoyo = this._yoyo;
2011          cycleDuration = dur + this._rDelay;
2012
2013          if (this._repeat < -1 && totalTime < 0) {
2014            return this.totalTime(cycleDuration * 100 + totalTime, suppressEvents, force);
2015          }
2016
2017          time = _roundPrecise(tTime % cycleDuration);
2018
2019          if (tTime === tDur) {
2020            iteration = this._repeat;
2021            time = dur;
2022          } else {
2023            iteration = ~~(tTime / cycleDuration);
2024
2025            if (iteration && iteration === tTime / cycleDuration) {
2026              time = dur;
2027              iteration--;
2028            }
2029
2030            time > dur && (time = dur);
2031          }
2032
2033          prevIteration = _animationCycle(this._tTime, cycleDuration);
2034          !prevTime && this._tTime && prevIteration !== iteration && this._tTime - prevIteration * cycleDuration - this._dur <= 0 && (prevIteration = iteration);
2035
2036          if (yoyo && iteration & 1) {
2037            time = dur - time;
2038            isYoyo = 1;
2039          }
2040
2041          if (iteration !== prevIteration && !this._lock) {
2042            var rewinding = yoyo && prevIteration & 1,
2043                doesWrap = rewinding === (yoyo && iteration & 1);
2044            iteration < prevIteration && (rewinding = !rewinding);
2045            prevTime = rewinding ? 0 : tTime % dur ? dur : tTime;
2046            this._lock = 1;
2047            this.render(prevTime || (isYoyo ? 0 : _roundPrecise(iteration * cycleDuration)), suppressEvents, !dur)._lock = 0;
2048            this._tTime = tTime;
2049            !suppressEvents && this.parent && _callback(this, "onRepeat");
2050            this.vars.repeatRefresh && !isYoyo && (this.invalidate()._lock = 1);
2051
2052            if (prevTime && prevTime !== this._time || prevPaused !== !this._ts || this.vars.onRepeat && !this.parent && !this._act) {
2053              return this;
2054            }
2055
2056            dur = this._dur;
2057            tDur = this._tDur;
2058
2059            if (doesWrap) {
2060              this._lock = 2;
2061              prevTime = rewinding ? dur : -0.0001;
2062              this.render(prevTime, true);
2063              this.vars.repeatRefresh && !isYoyo && this.invalidate();
2064            }
2065
2066            this._lock = 0;
2067
2068            if (!this._ts && !prevPaused) {
2069              return this;
2070            }
2071
2072            _propagateYoyoEase(this, isYoyo);
2073          }
2074        }
2075
2076        if (this._hasPause && !this._forcing && this._lock < 2) {
2077          pauseTween = _findNextPauseTween(this, _roundPrecise(prevTime), _roundPrecise(time));
2078
2079          if (pauseTween) {
2080            tTime -= time - (time = pauseTween._start);
2081          }
2082        }
2083
2084        this._tTime = tTime;
2085        this._time = time;
2086        this._act = !timeScale;
2087
2088        if (!this._initted) {
vendor: 15,202 bytes, lines 2089-2621
2089          this._onUpdate = this.vars.onUpdate;
2090          this._initted = 1;
2091          this._zTime = totalTime;
2092          prevTime = 0;
2093        }
2094
2095        if (!prevTime && time && !suppressEvents && !iteration) {
2096          _callback(this, "onStart");
2097
2098          if (this._tTime !== tTime) {
2099            return this;
2100          }
2101        }
2102
2103        if (time >= prevTime && totalTime >= 0) {
2104          child = this._first;
2105
2106          while (child) {
2107            next = child._next;
2108
2109            if ((child._act || time >= child._start) && child._ts && pauseTween !== child) {
2110              if (child.parent !== this) {
2111                return this.render(totalTime, suppressEvents, force);
2112              }
2113
2114              child.render(child._ts > 0 ? (time - child._start) * child._ts : (child._dirty ? child.totalDuration() : child._tDur) + (time - child._start) * child._ts, suppressEvents, force);
2115
2116              if (time !== this._time || !this._ts && !prevPaused) {
2117                pauseTween = 0;
2118                next && (tTime += this._zTime = -_tinyNum);
2119                break;
2120              }
2121            }
2122
2123            child = next;
2124          }
2125        } else {
2126          child = this._last;
2127          var adjustedTime = totalTime < 0 ? totalTime : time;
2128
2129          while (child) {
2130            next = child._prev;
2131
2132            if ((child._act || adjustedTime <= child._end) && child._ts && pauseTween !== child) {
2133              if (child.parent !== this) {
2134                return this.render(totalTime, suppressEvents, force);
2135              }
2136
2137              child.render(child._ts > 0 ? (adjustedTime - child._start) * child._ts : (child._dirty ? child.totalDuration() : child._tDur) + (adjustedTime - child._start) * child._ts, suppressEvents, force || _reverting && (child._initted || child._startAt));
2138
2139              if (time !== this._time || !this._ts && !prevPaused) {
2140                pauseTween = 0;
2141                next && (tTime += this._zTime = adjustedTime ? -_tinyNum : _tinyNum);
2142                break;
2143              }
2144            }
2145
2146            child = next;
2147          }
2148        }
2149
2150        if (pauseTween && !suppressEvents) {
2151          this.pause();
2152          pauseTween.render(time >= prevTime ? 0 : -_tinyNum)._zTime = time >= prevTime ? 1 : -1;
2153
2154          if (this._ts) {
2155            this._start = prevStart;
2156
2157            _setEnd(this);
2158
2159            return this.render(totalTime, suppressEvents, force);
2160          }
2161        }
2162
2163        this._onUpdate && !suppressEvents && _callback(this, "onUpdate", true);
2164        if (tTime === tDur && this._tTime >= this.totalDuration() || !tTime && prevTime) if (prevStart === this._start || Math.abs(timeScale) !== Math.abs(this._ts)) if (!this._lock) {
2165          (totalTime || !dur) && (tTime === tDur && this._ts > 0 || !tTime && this._ts < 0) && _removeFromParent(this, 1);
2166
2167          if (!suppressEvents && !(totalTime < 0 && !prevTime) && (tTime || prevTime || !tDur)) {
2168            _callback(this, tTime === tDur && totalTime >= 0 ? "onComplete" : "onReverseComplete", true);
2169
2170            this._prom && !(tTime < tDur && this.timeScale() > 0) && this._prom();
2171          }
2172        }
2173      }
2174
2175      return this;
2176    };
2177
2178    _proto2.add = function add(child, position) {
2179      var _this2 = this;
2180
2181      _isNumber(position) || (position = _parsePosition(this, position, child));
2182
2183      if (!(child instanceof Animation)) {
2184        if (_isArray(child)) {
2185          child.forEach(function (obj) {
2186            return _this2.add(obj, position);
2187          });
2188          return this;
2189        }
2190
2191        if (_isString(child)) {
2192          return this.addLabel(child, position);
2193        }
2194
2195        if (_isFunction(child)) {
2196          child = Tween.delayedCall(0, child);
2197        } else {
2198          return this;
2199        }
2200      }
2201
2202      return this !== child ? _addToTimeline(this, child, position) : this;
2203    };
2204
2205    _proto2.getChildren = function getChildren(nested, tweens, timelines, ignoreBeforeTime) {
2206      if (nested === void 0) {
2207        nested = true;
2208      }
2209
2210      if (tweens === void 0) {
2211        tweens = true;
2212      }
2213
2214      if (timelines === void 0) {
2215        timelines = true;
2216      }
2217
2218      if (ignoreBeforeTime === void 0) {
2219        ignoreBeforeTime = -_bigNum;
2220      }
2221
2222      var a = [],
2223          child = this._first;
2224
2225      while (child) {
2226        if (child._start >= ignoreBeforeTime) {
2227          if (child instanceof Tween) {
2228            tweens && a.push(child);
2229          } else {
2230            timelines && a.push(child);
2231            nested && a.push.apply(a, child.getChildren(true, tweens, timelines));
2232          }
2233        }
2234
2235        child = child._next;
2236      }
2237
2238      return a;
2239    };
2240
2241    _proto2.getById = function getById(id) {
2242      var animations = this.getChildren(1, 1, 1),
2243          i = animations.length;
2244
2245      while (i--) {
2246        if (animations[i].vars.id === id) {
2247          return animations[i];
2248        }
2249      }
2250    };
2251
2252    _proto2.remove = function remove(child) {
2253      if (_isString(child)) {
2254        return this.removeLabel(child);
2255      }
2256
2257      if (_isFunction(child)) {
2258        return this.killTweensOf(child);
2259      }
2260
2261      _removeLinkedListItem(this, child);
2262
2263      if (child === this._recent) {
2264        this._recent = this._last;
2265      }
2266
2267      return _uncache(this);
2268    };
2269
2270    _proto2.totalTime = function totalTime(_totalTime2, suppressEvents) {
2271      if (!arguments.length) {
2272        return this._tTime;
2273      }
2274
2275      this._forcing = 1;
2276
2277      if (!this._dp && this._ts) {
2278        this._start = _roundPrecise(_ticker.time - (this._ts > 0 ? _totalTime2 / this._ts : (this.totalDuration() - _totalTime2) / -this._ts));
2279      }
2280
2281      _Animation.prototype.totalTime.call(this, _totalTime2, suppressEvents);
2282
2283      this._forcing = 0;
2284      return this;
2285    };
2286
2287    _proto2.addLabel = function addLabel(label, position) {
2288      this.labels[label] = _parsePosition(this, position);
2289      return this;
2290    };
2291
2292    _proto2.removeLabel = function removeLabel(label) {
2293      delete this.labels[label];
2294      return this;
2295    };
2296
2297    _proto2.addPause = function addPause(position, callback, params) {
2298      var t = Tween.delayedCall(0, callback || _emptyFunc, params);
2299      t.data = "isPause";
2300      this._hasPause = 1;
2301      return _addToTimeline(this, t, _parsePosition(this, position));
2302    };
2303
2304    _proto2.removePause = function removePause(position) {
2305      var child = this._first;
2306      position = _parsePosition(this, position);
2307
2308      while (child) {
2309        if (child._start === position && child.data === "isPause") {
2310          _removeFromParent(child);
2311        }
2312
2313        child = child._next;
2314      }
2315    };
2316
2317    _proto2.killTweensOf = function killTweensOf(targets, props, onlyActive) {
2318      var tweens = this.getTweensOf(targets, onlyActive),
2319          i = tweens.length;
2320
2321      while (i--) {
2322        _overwritingTween !== tweens[i] && tweens[i].kill(targets, props);
2323      }
2324
2325      return this;
2326    };
2327
2328    _proto2.getTweensOf = function getTweensOf(targets, onlyActive) {
2329      var a = [],
2330          parsedTargets = toArray(targets),
2331          child = this._first,
2332          isGlobalTime = _isNumber(onlyActive),
2333          children;
2334
2335      while (child) {
2336        if (child instanceof Tween) {
2337          if (_arrayContainsAny(child._targets, parsedTargets) && (isGlobalTime ? (!_overwritingTween || child._initted && child._ts) && child.globalTime(0) <= onlyActive && child.globalTime(child.totalDuration()) > onlyActive : !onlyActive || child.isActive())) {
2338            a.push(child);
2339          }
2340        } else if ((children = child.getTweensOf(parsedTargets, onlyActive)).length) {
2341          a.push.apply(a, children);
2342        }
2343
2344        child = child._next;
2345      }
2346
2347      return a;
2348    };
2349
2350    _proto2.tweenTo = function tweenTo(position, vars) {
2351      vars = vars || {};
2352
2353      var tl = this,
2354          endTime = _parsePosition(tl, position),
2355          _vars = vars,
2356          startAt = _vars.startAt,
2357          _onStart = _vars.onStart,
2358          onStartParams = _vars.onStartParams,
2359          immediateRender = _vars.immediateRender,
2360          initted,
2361          tween = Tween.to(tl, _setDefaults({
2362        ease: vars.ease || "none",
2363        lazy: false,
2364        immediateRender: false,
2365        time: endTime,
2366        overwrite: "auto",
2367        duration: vars.duration || Math.abs((endTime - (startAt && "time" in startAt ? startAt.time : tl._time)) / tl.timeScale()) || _tinyNum,
2368        onStart: function onStart() {
2369          tl.pause();
2370
2371          if (!initted) {
2372            var duration = vars.duration || Math.abs((endTime - (startAt && "time" in startAt ? startAt.time : tl._time)) / tl.timeScale());
2373            tween._dur !== duration && _setDuration(tween, duration, 0, 1).render(tween._time, true, true);
2374            initted = 1;
2375          }
2376
2377          _onStart && _onStart.apply(tween, onStartParams || []);
2378        }
2379      }, vars));
2380
2381      return immediateRender ? tween.render(0) : tween;
2382    };
2383
2384    _proto2.tweenFromTo = function tweenFromTo(fromPosition, toPosition, vars) {
2385      return this.tweenTo(toPosition, _setDefaults({
2386        startAt: {
2387          time: _parsePosition(this, fromPosition)
2388        }
2389      }, vars));
2390    };
2391
2392    _proto2.recent = function recent() {
2393      return this._recent;
2394    };
2395
2396    _proto2.nextLabel = function nextLabel(afterTime) {
2397      if (afterTime === void 0) {
2398        afterTime = this._time;
2399      }
2400
2401      return _getLabelInDirection(this, _parsePosition(this, afterTime));
2402    };
2403
2404    _proto2.previousLabel = function previousLabel(beforeTime) {
2405      if (beforeTime === void 0) {
2406        beforeTime = this._time;
2407      }
2408
2409      return _getLabelInDirection(this, _parsePosition(this, beforeTime), 1);
2410    };
2411
2412    _proto2.currentLabel = function currentLabel(value) {
2413      return arguments.length ? this.seek(value, true) : this.previousLabel(this._time + _tinyNum);
2414    };
2415
2416    _proto2.shiftChildren = function shiftChildren(amount, adjustLabels, ignoreBeforeTime) {
2417      if (ignoreBeforeTime === void 0) {
2418        ignoreBeforeTime = 0;
2419      }
2420
2421      var child = this._first,
2422          labels = this.labels,
2423          p;
2424
2425      while (child) {
2426        if (child._start >= ignoreBeforeTime) {
2427          child._start += amount;
2428          child._end += amount;
2429        }
2430
2431        child = child._next;
2432      }
2433
2434      if (adjustLabels) {
2435        for (p in labels) {
2436          if (labels[p] >= ignoreBeforeTime) {
2437            labels[p] += amount;
2438          }
2439        }
2440      }
2441
2442      return _uncache(this);
2443    };
2444
2445    _proto2.invalidate = function invalidate(soft) {
2446      var child = this._first;
2447      this._lock = 0;
2448
2449      while (child) {
2450        child.invalidate(soft);
2451        child = child._next;
2452      }
2453
2454      return _Animation.prototype.invalidate.call(this, soft);
2455    };
2456
2457    _proto2.clear = function clear(includeLabels) {
2458      if (includeLabels === void 0) {
2459        includeLabels = true;
2460      }
2461
2462      var child = this._first,
2463          next;
2464
2465      while (child) {
2466        next = child._next;
2467        this.remove(child);
2468        child = next;
2469      }
2470
2471      this._dp && (this._time = this._tTime = this._pTime = 0);
2472      includeLabels && (this.labels = {});
2473      return _uncache(this);
2474    };
2475
2476    _proto2.totalDuration = function totalDuration(value) {
2477      var max = 0,
2478          self = this,
2479          child = self._last,
2480          prevStart = _bigNum,
2481          prev,
2482          start,
2483          parent;
2484
2485      if (arguments.length) {
2486        return self.timeScale((self._repeat < 0 ? self.duration() : self.totalDuration()) / (self.reversed() ? -value : value));
2487      }
2488
2489      if (self._dirty) {
2490        parent = self.parent;
2491
2492        while (child) {
2493          prev = child._prev;
2494          child._dirty && child.totalDuration();
2495          start = child._start;
2496
2497          if (start > prevStart && self._sort && child._ts && !self._lock) {
2498            self._lock = 1;
2499            _addToTimeline(self, child, start - child._delay, 1)._lock = 0;
2500          } else {
2501            prevStart = start;
2502          }
2503
2504          if (start < 0 && child._ts) {
2505            max -= start;
2506
2507            if (!parent && !self._dp || parent && parent.smoothChildTiming) {
2508              self._start += start / self._ts;
2509              self._time -= start;
2510              self._tTime -= start;
2511            }
2512
2513            self.shiftChildren(-start, false, -1e999);
2514            prevStart = 0;
2515          }
2516
2517          child._end > max && child._ts && (max = child._end);
2518          child = prev;
2519        }
2520
2521        _setDuration(self, self === _globalTimeline && self._time > max ? self._time : max, 1, 1);
2522
2523        self._dirty = 0;
2524      }
2525
2526      return self._tDur;
2527    };
2528
2529    Timeline.updateRoot = function updateRoot(time) {
2530      if (_globalTimeline._ts) {
2531        _lazySafeRender(_globalTimeline, _parentToChildTotalTime(time, _globalTimeline));
2532
2533        _lastRenderedFrame = _ticker.frame;
2534      }
2535
2536      if (_ticker.frame >= _nextGCFrame) {
2537        _nextGCFrame += _config.autoSleep || 120;
2538        var child = _globalTimeline._first;
2539        if (!child || !child._ts) if (_config.autoSleep && _ticker._listeners.length < 2) {
2540          while (child && !child._ts) {
2541            child = child._next;
2542          }
2543
2544          child || _ticker.sleep();
2545        }
2546      }
2547    };
2548
2549    return Timeline;
2550  }(Animation);
2551
2552  _setDefaults(Timeline.prototype, {
2553    _lock: 0,
2554    _hasPause: 0,
2555    _forcing: 0
2556  });
2557
2558  var _addComplexStringPropTween = function _addComplexStringPropTween(target, prop, start, end, setter, stringFilter, funcParam) {
2559    var pt = new PropTween(this._pt, target, prop, 0, 1, _renderComplexString, null, setter),
2560        index = 0,
2561        matchIndex = 0,
2562        result,
2563        startNums,
2564        color,
2565        endNum,
2566        chunk,
2567        startNum,
2568        hasRandom,
2569        a;
2570    pt.b = start;
2571    pt.e = end;
2572    start += "";
2573    end += "";
2574
2575    if (hasRandom = ~end.indexOf("random(")) {
2576      end = _replaceRandom(end);
2577    }
2578
2579    if (stringFilter) {
2580      a = [start, end];
2581      stringFilter(a, target, prop);
2582      start = a[0];
2583      end = a[1];
2584    }
2585
2586    startNums = start.match(_complexStringNumExp) || [];
2587
2588    while (result = _complexStringNumExp.exec(end)) {
2589      endNum = result[0];
2590      chunk = end.substring(index, result.index);
2591
2592      if (color) {
2593        color = (color + 1) % 5;
2594      } else if (chunk.substr(-5) === "rgba(") {
2595        color = 1;
2596      }
2597
2598      if (endNum !== startNums[matchIndex++]) {
2599        startNum = parseFloat(startNums[matchIndex - 1]) || 0;
2600        pt._pt = {
2601          _next: pt._pt,
2602          p: chunk || matchIndex === 1 ? chunk : ",",
2603          s: startNum,
2604          c: endNum.charAt(1) === "=" ? _parseRelative(startNum, endNum) - startNum : parseFloat(endNum) - startNum,
2605          m: color && color < 4 ? Math.round : 0
2606        };
2607        index = _complexStringNumExp.lastIndex;
2608      }
2609    }
2610
2611    pt.c = index < end.length ? end.substring(index, end.length) : "";
2612    pt.fp = funcParam;
2613
2614    if (_relExp.test(end) || hasRandom) {
2615      pt.e = 0;
2616    }
2617
2618    this._pt = pt;
2619    return pt;
2620  },
2621      _addPropTween = function _addPropTween(target, prop, start, end, index, targets, modifier, stringFilter, funcParam, optional) {
vendor: 9,840 bytes, lines 2622-2908
2622    _isFunction(end) && (end = end(index || 0, target, targets));
2623    var currentValue = target[prop],
2624        parsedStart = start !== "get" ? start : !_isFunction(currentValue) ? currentValue : funcParam ? target[prop.indexOf("set") || !_isFunction(target["get" + prop.substr(3)]) ? prop : "get" + prop.substr(3)](funcParam) : target[prop](),
2625        setter = !_isFunction(currentValue) ? _setterPlain : funcParam ? _setterFuncWithParam : _setterFunc,
2626        pt;
2627
2628    if (_isString(end)) {
2629      if (~end.indexOf("random(")) {
2630        end = _replaceRandom(end);
2631      }
2632
2633      if (end.charAt(1) === "=") {
2634        pt = _parseRelative(parsedStart, end) + (getUnit(parsedStart) || 0);
2635
2636        if (pt || pt === 0) {
2637          end = pt;
2638        }
2639      }
2640    }
2641
2642    if (!optional || parsedStart !== end || _forceAllPropTweens) {
2643      if (!isNaN(parsedStart * end) && end !== "") {
2644        pt = new PropTween(this._pt, target, prop, +parsedStart || 0, end - (parsedStart || 0), typeof currentValue === "boolean" ? _renderBoolean : _renderPlain, 0, setter);
2645        funcParam && (pt.fp = funcParam);
2646        modifier && pt.modifier(modifier, this, target);
2647        return this._pt = pt;
2648      }
2649
2650      !currentValue && !(prop in target) && _missingPlugin(prop, end);
2651      return _addComplexStringPropTween.call(this, target, prop, parsedStart, end, setter, stringFilter || _config.stringFilter, funcParam);
2652    }
2653  },
2654      _processVars = function _processVars(vars, index, target, targets, tween) {
2655    _isFunction(vars) && (vars = _parseFuncOrString(vars, tween, index, target, targets));
2656
2657    if (!_isObject(vars) || vars.style && vars.nodeType || _isArray(vars) || _isTypedArray(vars)) {
2658      return _isString(vars) ? _parseFuncOrString(vars, tween, index, target, targets) : vars;
2659    }
2660
2661    var copy = {},
2662        p;
2663
2664    for (p in vars) {
2665      copy[p] = _parseFuncOrString(vars[p], tween, index, target, targets);
2666    }
2667
2668    return copy;
2669  },
2670      _checkPlugin = function _checkPlugin(property, vars, tween, index, target, targets) {
2671    var plugin, pt, ptLookup, i;
2672
2673    if (_plugins[property] && (plugin = new _plugins[property]()).init(target, plugin.rawVars ? vars[property] : _processVars(vars[property], index, target, targets, tween), tween, index, targets) !== false) {
2674      tween._pt = pt = new PropTween(tween._pt, target, property, 0, 1, plugin.render, plugin, 0, plugin.priority);
2675
2676      if (tween !== _quickTween) {
2677        ptLookup = tween._ptLookup[tween._targets.indexOf(target)];
2678        i = plugin._props.length;
2679
2680        while (i--) {
2681          ptLookup[plugin._props[i]] = pt;
2682        }
2683      }
2684    }
2685
2686    return plugin;
2687  },
2688      _overwritingTween,
2689      _forceAllPropTweens,
2690      _initTween = function _initTween(tween, time, tTime) {
2691    var vars = tween.vars,
2692        ease = vars.ease,
2693        startAt = vars.startAt,
2694        immediateRender = vars.immediateRender,
2695        lazy = vars.lazy,
2696        onUpdate = vars.onUpdate,
2697        runBackwards = vars.runBackwards,
2698        yoyoEase = vars.yoyoEase,
2699        keyframes = vars.keyframes,
2700        autoRevert = vars.autoRevert,
2701        dur = tween._dur,
2702        prevStartAt = tween._startAt,
2703        targets = tween._targets,
2704        parent = tween.parent,
2705        fullTargets = parent && parent.data === "nested" ? parent.vars.targets : targets,
2706        autoOverwrite = tween._overwrite === "auto" && !_suppressOverwrites,
2707        tl = tween.timeline,
2708        cleanVars,
2709        i,
2710        p,
2711        pt,
2712        target,
2713        hasPriority,
2714        gsData,
2715        harness,
2716        plugin,
2717        ptLookup,
2718        index,
2719        harnessVars,
2720        overwritten;
2721    tl && (!keyframes || !ease) && (ease = "none");
2722    tween._ease = _parseEase(ease, _defaults.ease);
2723    tween._yEase = yoyoEase ? _invertEase(_parseEase(yoyoEase === true ? ease : yoyoEase, _defaults.ease)) : 0;
2724
2725    if (yoyoEase && tween._yoyo && !tween._repeat) {
2726      yoyoEase = tween._yEase;
2727      tween._yEase = tween._ease;
2728      tween._ease = yoyoEase;
2729    }
2730
2731    tween._from = !tl && !!vars.runBackwards;
2732
2733    if (!tl || keyframes && !vars.stagger) {
2734      harness = targets[0] ? _getCache(targets[0]).harness : 0;
2735      harnessVars = harness && vars[harness.prop];
2736      cleanVars = _copyExcluding(vars, _reservedProps);
2737
2738      if (prevStartAt) {
2739        prevStartAt._zTime < 0 && prevStartAt.progress(1);
2740        time < 0 && runBackwards && immediateRender && !autoRevert ? prevStartAt.render(-1, true) : prevStartAt.revert(runBackwards && dur ? _revertConfigNoKill : _startAtRevertConfig);
2741        prevStartAt._lazy = 0;
2742      }
2743
2744      if (startAt) {
2745        _removeFromParent(tween._startAt = Tween.set(targets, _setDefaults({
2746          data: "isStart",
2747          overwrite: false,
2748          parent: parent,
2749          immediateRender: true,
2750          lazy: !prevStartAt && _isNotFalse(lazy),
2751          startAt: null,
2752          delay: 0,
2753          onUpdate: onUpdate && function () {
2754            return _callback(tween, "onUpdate");
2755          },
2756          stagger: 0
2757        }, startAt)));
2758
2759        tween._startAt._dp = 0;
2760        tween._startAt._sat = tween;
2761        time < 0 && (_reverting || !immediateRender && !autoRevert) && tween._startAt.revert(_revertConfigNoKill);
2762
2763        if (immediateRender) {
2764          if (dur && time <= 0 && tTime <= 0) {
2765            time && (tween._zTime = time);
2766            return;
2767          }
2768        }
2769      } else if (runBackwards && dur) {
2770        if (!prevStartAt) {
2771          time && (immediateRender = false);
2772          p = _setDefaults({
2773            overwrite: false,
2774            data: "isFromStart",
2775            lazy: immediateRender && !prevStartAt && _isNotFalse(lazy),
2776            immediateRender: immediateRender,
2777            stagger: 0,
2778            parent: parent
2779          }, cleanVars);
2780          harnessVars && (p[harness.prop] = harnessVars);
2781
2782          _removeFromParent(tween._startAt = Tween.set(targets, p));
2783
2784          tween._startAt._dp = 0;
2785          tween._startAt._sat = tween;
2786          time < 0 && (_reverting ? tween._startAt.revert(_revertConfigNoKill) : tween._startAt.render(-1, true));
2787          tween._zTime = time;
2788
2789          if (!immediateRender) {
2790            _initTween(tween._startAt, _tinyNum, _tinyNum);
2791          } else if (!time) {
2792            return;
2793          }
2794        }
2795      }
2796
2797      tween._pt = tween._ptCache = 0;
2798      lazy = dur && _isNotFalse(lazy) || lazy && !dur;
2799
2800      for (i = 0; i < targets.length; i++) {
2801        target = targets[i];
2802        gsData = target._gsap || _harness(targets)[i]._gsap;
2803        tween._ptLookup[i] = ptLookup = {};
2804        _lazyLookup[gsData.id] && _lazyTweens.length && _lazyRender();
2805        index = fullTargets === targets ? i : fullTargets.indexOf(target);
2806
2807        if (harness && (plugin = new harness()).init(target, harnessVars || cleanVars, tween, index, fullTargets) !== false) {
2808          tween._pt = pt = new PropTween(tween._pt, target, plugin.name, 0, 1, plugin.render, plugin, 0, plugin.priority);
2809
2810          plugin._props.forEach(function (name) {
2811            ptLookup[name] = pt;
2812          });
2813
2814          plugin.priority && (hasPriority = 1);
2815        }
2816
2817        if (!harness || harnessVars) {
2818          for (p in cleanVars) {
2819            if (_plugins[p] && (plugin = _checkPlugin(p, cleanVars, tween, index, target, fullTargets))) {
2820              plugin.priority && (hasPriority = 1);
2821            } else {
2822              ptLookup[p] = pt = _addPropTween.call(tween, target, p, "get", cleanVars[p], index, fullTargets, 0, vars.stringFilter);
2823            }
2824          }
2825        }
2826
2827        tween._op && tween._op[i] && tween.kill(target, tween._op[i]);
2828
2829        if (autoOverwrite && tween._pt) {
2830          _overwritingTween = tween;
2831
2832          _globalTimeline.killTweensOf(target, ptLookup, tween.globalTime(time));
2833
2834          overwritten = !tween.parent;
2835          _overwritingTween = 0;
2836        }
2837
2838        tween._pt && lazy && (_lazyLookup[gsData.id] = 1);
2839      }
2840
2841      hasPriority && _sortPropTweensByPriority(tween);
2842      tween._onInit && tween._onInit(tween);
2843    }
2844
2845    tween._onUpdate = onUpdate;
2846    tween._initted = (!tween._op || tween._pt) && !overwritten;
2847    keyframes && time <= 0 && tl.render(_bigNum, true, true);
2848  },
2849      _updatePropTweens = function _updatePropTweens(tween, property, value, start, startIsRelative, ratio, time, skipRecursion) {
2850    var ptCache = (tween._pt && tween._ptCache || (tween._ptCache = {}))[property],
2851        pt,
2852        rootPT,
2853        lookup,
2854        i;
2855
2856    if (!ptCache) {
2857      ptCache = tween._ptCache[property] = [];
2858      lookup = tween._ptLookup;
2859      i = tween._targets.length;
2860
2861      while (i--) {
2862        pt = lookup[i][property];
2863
2864        if (pt && pt.d && pt.d._pt) {
2865          pt = pt.d._pt;
2866
2867          while (pt && pt.p !== property && pt.fp !== property) {
2868            pt = pt._next;
2869          }
2870        }
2871
2872        if (!pt) {
2873          _forceAllPropTweens = 1;
2874          tween.vars[property] = "+=0";
2875
2876          _initTween(tween, time);
2877
2878          _forceAllPropTweens = 0;
2879          return skipRecursion ? _warn(property + " not eligible for reset") : 1;
2880        }
2881
2882        ptCache.push(pt);
2883      }
2884    }
2885
2886    i = ptCache.length;
2887
2888    while (i--) {
2889      rootPT = ptCache[i];
2890      pt = rootPT._pt || rootPT;
2891      pt.s = (start || start === 0) && !startIsRelative ? start : pt.s + (start || 0) + ratio * pt.c;
2892      pt.c = value - pt.s;
2893      rootPT.e && (rootPT.e = _round(value) + getUnit(rootPT.e));
2894      rootPT.b && (rootPT.b = pt.s + getUnit(rootPT.b));
2895    }
2896  },
2897      _addAliasesToVars = function _addAliasesToVars(targets, vars) {
2898    var harness = targets[0] ? _getCache(targets[0]).harness : 0,
2899        propertyAliases = harness && harness.aliases,
2900        copy,
2901        p,
2902        i,
2903        aliases;
2904
2905    if (!propertyAliases) {
2906      return vars;
2907    }
2908
vendor: 4,984 bytes, lines 2909-3051
2909    copy = _merge({}, vars);
2910
2911    for (p in propertyAliases) {
2912      if (p in copy) {
2913        aliases = propertyAliases[p].split(",");
2914        i = aliases.length;
2915
2916        while (i--) {
2917          copy[aliases[i]] = copy[p];
2918        }
2919      }
2920    }
2921
2922    return copy;
2923  },
2924      _parseKeyframe = function _parseKeyframe(prop, obj, allProps, easeEach) {
2925    var ease = obj.ease || easeEach || "power1.inOut",
2926        p,
2927        a;
2928
2929    if (_isArray(obj)) {
2930      a = allProps[prop] || (allProps[prop] = []);
2931      obj.forEach(function (value, i) {
2932        return a.push({
2933          t: i / (obj.length - 1) * 100,
2934          v: value,
2935          e: ease
2936        });
2937      });
2938    } else {
2939      for (p in obj) {
2940        a = allProps[p] || (allProps[p] = []);
2941        p === "ease" || a.push({
2942          t: parseFloat(prop),
2943          v: obj[p],
2944          e: ease
2945        });
2946      }
2947    }
2948  },
2949      _parseFuncOrString = function _parseFuncOrString(value, tween, i, target, targets) {
2950    return _isFunction(value) ? value.call(tween, i, target, targets) : _isString(value) && ~value.indexOf("random(") ? _replaceRandom(value) : value;
2951  },
2952      _staggerTweenProps = _callbackNames + "repeat,repeatDelay,yoyo,repeatRefresh,yoyoEase,autoRevert",
2953      _staggerPropsToSkip = {};
2954
2955  _forEachName(_staggerTweenProps + ",id,stagger,delay,duration,paused,scrollTrigger", function (name) {
2956    return _staggerPropsToSkip[name] = 1;
2957  });
2958
2959  var Tween = function (_Animation2) {
2960    _inheritsLoose(Tween, _Animation2);
2961
2962    function Tween(targets, vars, position, skipInherit) {
2963      var _this3;
2964
2965      if (typeof vars === "number") {
2966        position.duration = vars;
2967        vars = position;
2968        position = null;
2969      }
2970
2971      _this3 = _Animation2.call(this, skipInherit ? vars : _inheritDefaults(vars)) || this;
2972      var _this3$vars = _this3.vars,
2973          duration = _this3$vars.duration,
2974          delay = _this3$vars.delay,
2975          immediateRender = _this3$vars.immediateRender,
2976          stagger = _this3$vars.stagger,
2977          overwrite = _this3$vars.overwrite,
2978          keyframes = _this3$vars.keyframes,
2979          defaults = _this3$vars.defaults,
2980          scrollTrigger = _this3$vars.scrollTrigger,
2981          yoyoEase = _this3$vars.yoyoEase,
2982          parent = vars.parent || _globalTimeline,
2983          parsedTargets = (_isArray(targets) || _isTypedArray(targets) ? _isNumber(targets[0]) : "length" in vars) ? [targets] : toArray(targets),
2984          tl,
2985          i,
2986          copy,
2987          l,
2988          p,
2989          curTarget,
2990          staggerFunc,
2991          staggerVarsToMerge;
2992      _this3._targets = parsedTargets.length ? _harness(parsedTargets) : _warn("GSAP target " + targets + " not found. https://gsap.com", !_config.nullTargetWarn) || [];
2993      _this3._ptLookup = [];
2994      _this3._overwrite = overwrite;
2995
2996      if (keyframes || stagger || _isFuncOrString(duration) || _isFuncOrString(delay)) {
2997        vars = _this3.vars;
2998        tl = _this3.timeline = new Timeline({
2999          data: "nested",
3000          defaults: defaults || {},
3001          targets: parent && parent.data === "nested" ? parent.vars.targets : parsedTargets
3002        });
3003        tl.kill();
3004        tl.parent = tl._dp = _assertThisInitialized(_this3);
3005        tl._start = 0;
3006
3007        if (stagger || _isFuncOrString(duration) || _isFuncOrString(delay)) {
3008          l = parsedTargets.length;
3009          staggerFunc = stagger && distribute(stagger);
3010
3011          if (_isObject(stagger)) {
3012            for (p in stagger) {
3013              if (~_staggerTweenProps.indexOf(p)) {
3014                staggerVarsToMerge || (staggerVarsToMerge = {});
3015                staggerVarsToMerge[p] = stagger[p];
3016              }
3017            }
3018          }
3019
3020          for (i = 0; i < l; i++) {
3021            copy = _copyExcluding(vars, _staggerPropsToSkip);
3022            copy.stagger = 0;
3023            yoyoEase && (copy.yoyoEase = yoyoEase);
3024            staggerVarsToMerge && _merge(copy, staggerVarsToMerge);
3025            curTarget = parsedTargets[i];
3026            copy.duration = +_parseFuncOrString(duration, _assertThisInitialized(_this3), i, curTarget, parsedTargets);
3027            copy.delay = (+_parseFuncOrString(delay, _assertThisInitialized(_this3), i, curTarget, parsedTargets) || 0) - _this3._delay;
3028
3029            if (!stagger && l === 1 && copy.delay) {
3030              _this3._delay = delay = copy.delay;
3031              _this3._start += delay;
3032              copy.delay = 0;
3033            }
3034
3035            tl.to(curTarget, copy, staggerFunc ? staggerFunc(i, curTarget, parsedTargets) : 0);
3036            tl._ease = _easeMap.none;
3037          }
3038
3039          tl.duration() ? duration = delay = 0 : _this3.timeline = 0;
3040        } else if (keyframes) {
3041          _inheritDefaults(_setDefaults(tl.vars.defaults, {
3042            ease: "none"
3043          }));
3044
3045          tl._ease = _parseEase(keyframes.ease || vars.ease || "none");
3046          var time = 0,
3047              a,
3048              kf,
3049              v;
3050
3051          if (_isArray(keyframes)) {
vendor: 6,477 bytes, lines 3052-3258
3052            keyframes.forEach(function (frame) {
3053              return tl.to(parsedTargets, frame, ">");
3054            });
3055            tl.duration();
3056          } else {
3057            copy = {};
3058
3059            for (p in keyframes) {
3060              p === "ease" || p === "easeEach" || _parseKeyframe(p, keyframes[p], copy, keyframes.easeEach);
3061            }
3062
3063            for (p in copy) {
3064              a = copy[p].sort(function (a, b) {
3065                return a.t - b.t;
3066              });
3067              time = 0;
3068
3069              for (i = 0; i < a.length; i++) {
3070                kf = a[i];
3071                v = {
3072                  ease: kf.e,
3073                  duration: (kf.t - (i ? a[i - 1].t : 0)) / 100 * duration
3074                };
3075                v[p] = kf.v;
3076                tl.to(parsedTargets, v, time);
3077                time += v.duration;
3078              }
3079            }
3080
3081            tl.duration() < duration && tl.to({}, {
3082              duration: duration - tl.duration()
3083            });
3084          }
3085        }
3086
3087        duration || _this3.duration(duration = tl.duration());
3088      } else {
3089        _this3.timeline = 0;
3090      }
3091
3092      if (overwrite === true && !_suppressOverwrites) {
3093        _overwritingTween = _assertThisInitialized(_this3);
3094
3095        _globalTimeline.killTweensOf(parsedTargets);
3096
3097        _overwritingTween = 0;
3098      }
3099
3100      _addToTimeline(parent, _assertThisInitialized(_this3), position);
3101
3102      vars.reversed && _this3.reverse();
3103      vars.paused && _this3.paused(true);
3104
3105      if (immediateRender || !duration && !keyframes && _this3._start === _roundPrecise(parent._time) && _isNotFalse(immediateRender) && _hasNoPausedAncestors(_assertThisInitialized(_this3)) && parent.data !== "nested") {
3106        _this3._tTime = -_tinyNum;
3107
3108        _this3.render(Math.max(0, -delay) || 0);
3109      }
3110
3111      scrollTrigger && _scrollTrigger(_assertThisInitialized(_this3), scrollTrigger);
3112      return _this3;
3113    }
3114
3115    var _proto3 = Tween.prototype;
3116
3117    _proto3.render = function render(totalTime, suppressEvents, force) {
3118      var prevTime = this._time,
3119          tDur = this._tDur,
3120          dur = this._dur,
3121          isNegative = totalTime < 0,
3122          tTime = totalTime > tDur - _tinyNum && !isNegative ? tDur : totalTime < _tinyNum ? 0 : totalTime,
3123          time,
3124          pt,
3125          iteration,
3126          cycleDuration,
3127          prevIteration,
3128          isYoyo,
3129          ratio,
3130          timeline,
3131          yoyoEase;
3132
3133      if (!dur) {
3134        _renderZeroDurationTween(this, totalTime, suppressEvents, force);
3135      } else if (tTime !== this._tTime || !totalTime || force || !this._initted && this._tTime || this._startAt && this._zTime < 0 !== isNegative) {
3136        time = tTime;
3137        timeline = this.timeline;
3138
3139        if (this._repeat) {
3140          cycleDuration = dur + this._rDelay;
3141
3142          if (this._repeat < -1 && isNegative) {
3143            return this.totalTime(cycleDuration * 100 + totalTime, suppressEvents, force);
3144          }
3145
3146          time = _roundPrecise(tTime % cycleDuration);
3147
3148          if (tTime === tDur) {
3149            iteration = this._repeat;
3150            time = dur;
3151          } else {
3152            iteration = ~~(tTime / cycleDuration);
3153
3154            if (iteration && iteration === _roundPrecise(tTime / cycleDuration)) {
3155              time = dur;
3156              iteration--;
3157            }
3158
3159            time > dur && (time = dur);
3160          }
3161
3162          isYoyo = this._yoyo && iteration & 1;
3163
3164          if (isYoyo) {
3165            yoyoEase = this._yEase;
3166            time = dur - time;
3167          }
3168
3169          prevIteration = _animationCycle(this._tTime, cycleDuration);
3170
3171          if (time === prevTime && !force && this._initted && iteration === prevIteration) {
3172            this._tTime = tTime;
3173            return this;
3174          }
3175
3176          if (iteration !== prevIteration) {
3177            timeline && this._yEase && _propagateYoyoEase(timeline, isYoyo);
3178
3179            if (this.vars.repeatRefresh && !isYoyo && !this._lock && this._time !== cycleDuration && this._initted) {
3180              this._lock = force = 1;
3181              this.render(_roundPrecise(cycleDuration * iteration), true).invalidate()._lock = 0;
3182            }
3183          }
3184        }
3185
3186        if (!this._initted) {
3187          if (_attemptInitTween(this, isNegative ? totalTime : time, force, suppressEvents, tTime)) {
3188            this._tTime = 0;
3189            return this;
3190          }
3191
3192          if (prevTime !== this._time && !(force && this.vars.repeatRefresh && iteration !== prevIteration)) {
3193            return this;
3194          }
3195
3196          if (dur !== this._dur) {
3197            return this.render(totalTime, suppressEvents, force);
3198          }
3199        }
3200
3201        this._tTime = tTime;
3202        this._time = time;
3203
3204        if (!this._act && this._ts) {
3205          this._act = 1;
3206          this._lazy = 0;
3207        }
3208
3209        this.ratio = ratio = (yoyoEase || this._ease)(time / dur);
3210
3211        if (this._from) {
3212          this.ratio = ratio = 1 - ratio;
3213        }
3214
3215        if (time && !prevTime && !suppressEvents && !iteration) {
3216          _callback(this, "onStart");
3217
3218          if (this._tTime !== tTime) {
3219            return this;
3220          }
3221        }
3222
3223        pt = this._pt;
3224
3225        while (pt) {
3226          pt.r(ratio, pt.d);
3227          pt = pt._next;
3228        }
3229
3230        timeline && timeline.render(totalTime < 0 ? totalTime : timeline._dur * timeline._ease(time / this._dur), suppressEvents, force) || this._startAt && (this._zTime = totalTime);
3231
3232        if (this._onUpdate && !suppressEvents) {
3233          isNegative && _rewindStartAt(this, totalTime, suppressEvents, force);
3234
3235          _callback(this, "onUpdate");
3236        }
3237
3238        this._repeat && iteration !== prevIteration && this.vars.onRepeat && !suppressEvents && this.parent && _callback(this, "onRepeat");
3239
3240        if ((tTime === this._tDur || !tTime) && this._tTime === tTime) {
3241          isNegative && !this._onUpdate && _rewindStartAt(this, totalTime, true, true);
3242          (totalTime || !dur) && (tTime === this._tDur && this._ts > 0 || !tTime && this._ts < 0) && _removeFromParent(this, 1);
3243
3244          if (!suppressEvents && !(isNegative && !prevTime) && (tTime || prevTime || isYoyo)) {
3245            _callback(this, tTime === tDur ? "onComplete" : "onReverseComplete", true);
3246
3247            this._prom && !(tTime < tDur && this.timeScale() > 0) && this._prom();
3248          }
3249        }
3250      }
3251
3252      return this;
3253    };
3254
3255    _proto3.targets = function targets() {
3256      return this._targets;
3257    };
3258
vendor: 1,310 bytes, lines 3259-3292
3259    _proto3.invalidate = function invalidate(soft) {
3260      (!soft || !this.vars.runBackwards) && (this._startAt = 0);
3261      this._pt = this._op = this._onUpdate = this._lazy = this.ratio = 0;
3262      this._ptLookup = [];
3263      this.timeline && this.timeline.invalidate(soft);
3264      return _Animation2.prototype.invalidate.call(this, soft);
3265    };
3266
3267    _proto3.resetTo = function resetTo(property, value, start, startIsRelative, skipRecursion) {
3268      _tickerActive || _ticker.wake();
3269      this._ts || this.play();
3270      var time = Math.min(this._dur, (this._dp._time - this._start) * this._ts),
3271          ratio;
3272      this._initted || _initTween(this, time);
3273      ratio = this._ease(time / this._dur);
3274
3275      if (_updatePropTweens(this, property, value, start, startIsRelative, ratio, time, skipRecursion)) {
3276        return this.resetTo(property, value, start, startIsRelative, 1);
3277      }
3278
3279      _alignPlayhead(this, 0);
3280
3281      this.parent || _addLinkedListItem(this._dp, this, "_first", "_last", this._dp._sort ? "_start" : 0);
3282      return this.render(0);
3283    };
3284
3285    _proto3.kill = function kill(targets, vars) {
3286      if (vars === void 0) {
3287        vars = "all";
3288      }
3289
3290      if (!targets && (!vars || vars === "all")) {
3291        this._lazy = this._pt = 0;
3292        return this.parent ? _interrupt(this) :
vendor: 16,527 bytes, lines 3292-3894
3292 this;
3293      }
3294
3295      if (this.timeline) {
3296        var tDur = this.timeline.totalDuration();
3297        this.timeline.killTweensOf(targets, vars, _overwritingTween && _overwritingTween.vars.overwrite !== true)._first || _interrupt(this);
3298        this.parent && tDur !== this.timeline.totalDuration() && _setDuration(this, this._dur * this.timeline._tDur / tDur, 0, 1);
3299        return this;
3300      }
3301
3302      var parsedTargets = this._targets,
3303          killingTargets = targets ? toArray(targets) : parsedTargets,
3304          propTweenLookup = this._ptLookup,
3305          firstPT = this._pt,
3306          overwrittenProps,
3307          curLookup,
3308          curOverwriteProps,
3309          props,
3310          p,
3311          pt,
3312          i;
3313
3314      if ((!vars || vars === "all") && _arraysMatch(parsedTargets, killingTargets)) {
3315        vars === "all" && (this._pt = 0);
3316        return _interrupt(this);
3317      }
3318
3319      overwrittenProps = this._op = this._op || [];
3320
3321      if (vars !== "all") {
3322        if (_isString(vars)) {
3323          p = {};
3324
3325          _forEachName(vars, function (name) {
3326            return p[name] = 1;
3327          });
3328
3329          vars = p;
3330        }
3331
3332        vars = _addAliasesToVars(parsedTargets, vars);
3333      }
3334
3335      i = parsedTargets.length;
3336
3337      while (i--) {
3338        if (~killingTargets.indexOf(parsedTargets[i])) {
3339          curLookup = propTweenLookup[i];
3340
3341          if (vars === "all") {
3342            overwrittenProps[i] = vars;
3343            props = curLookup;
3344            curOverwriteProps = {};
3345          } else {
3346            curOverwriteProps = overwrittenProps[i] = overwrittenProps[i] || {};
3347            props = vars;
3348          }
3349
3350          for (p in props) {
3351            pt = curLookup && curLookup[p];
3352
3353            if (pt) {
3354              if (!("kill" in pt.d) || pt.d.kill(p) === true) {
3355                _removeLinkedListItem(this, pt, "_pt");
3356              }
3357
3358              delete curLookup[p];
3359            }
3360
3361            if (curOverwriteProps !== "all") {
3362              curOverwriteProps[p] = 1;
3363            }
3364          }
3365        }
3366      }
3367
3368      this._initted && !this._pt && firstPT && _interrupt(this);
3369      return this;
3370    };
3371
3372    Tween.to = function to(targets, vars) {
3373      return new Tween(targets, vars, arguments[2]);
3374    };
3375
3376    Tween.from = function from(targets, vars) {
3377      return _createTweenType(1, arguments);
3378    };
3379
3380    Tween.delayedCall = function delayedCall(delay, callback, params, scope) {
3381      return new Tween(callback, 0, {
3382        immediateRender: false,
3383        lazy: false,
3384        overwrite: false,
3385        delay: delay,
3386        onComplete: callback,
3387        onReverseComplete: callback,
3388        onCompleteParams: params,
3389        onReverseCompleteParams: params,
3390        callbackScope: scope
3391      });
3392    };
3393
3394    Tween.fromTo = function fromTo(targets, fromVars, toVars) {
3395      return _createTweenType(2, arguments);
3396    };
3397
3398    Tween.set = function set(targets, vars) {
3399      vars.duration = 0;
3400      vars.repeatDelay || (vars.repeat = 0);
3401      return new Tween(targets, vars);
3402    };
3403
3404    Tween.killTweensOf = function killTweensOf(targets, props, onlyActive) {
3405      return _globalTimeline.killTweensOf(targets, props, onlyActive);
3406    };
3407
3408    return Tween;
3409  }(Animation);
3410
3411  _setDefaults(Tween.prototype, {
3412    _targets: [],
3413    _lazy: 0,
3414    _startAt: 0,
3415    _op: 0,
3416    _onInit: 0
3417  });
3418
3419  _forEachName("staggerTo,staggerFrom,staggerFromTo", function (name) {
3420    Tween[name] = function () {
3421      var tl = new Timeline(),
3422          params = _slice.call(arguments, 0);
3423
3424      params.splice(name === "staggerFromTo" ? 5 : 4, 0, 0);
3425      return tl[name].apply(tl, params);
3426    };
3427  });
3428
3429  var _setterPlain = function _setterPlain(target, property, value) {
3430    return target[property] = value;
3431  },
3432      _setterFunc = function _setterFunc(target, property, value) {
3433    return target[property](value);
3434  },
3435      _setterFuncWithParam = function _setterFuncWithParam(target, property, value, data) {
3436    return target[property](data.fp, value);
3437  },
3438      _setterAttribute = function _setterAttribute(target, property, value) {
3439    return target.setAttribute(property, value);
3440  },
3441      _getSetter = function _getSetter(target, property) {
3442    return _isFunction(target[property]) ? _setterFunc : _isUndefined(target[property]) && target.setAttribute ? _setterAttribute : _setterPlain;
3443  },
3444      _renderPlain = function _renderPlain(ratio, data) {
3445    return data.set(data.t, data.p, Math.round((data.s + data.c * ratio) * 1000000) / 1000000, data);
3446  },
3447      _renderBoolean = function _renderBoolean(ratio, data) {
3448    return data.set(data.t, data.p, !!(data.s + data.c * ratio), data);
3449  },
3450      _renderComplexString = function _renderComplexString(ratio, data) {
3451    var pt = data._pt,
3452        s = "";
3453
3454    if (!ratio && data.b) {
3455      s = data.b;
3456    } else if (ratio === 1 && data.e) {
3457      s = data.e;
3458    } else {
3459      while (pt) {
3460        s = pt.p + (pt.m ? pt.m(pt.s + pt.c * ratio) : Math.round((pt.s + pt.c * ratio) * 10000) / 10000) + s;
3461        pt = pt._next;
3462      }
3463
3464      s += data.c;
3465    }
3466
3467    data.set(data.t, data.p, s, data);
3468  },
3469      _renderPropTweens = function _renderPropTweens(ratio, data) {
3470    var pt = data._pt;
3471
3472    while (pt) {
3473      pt.r(ratio, pt.d);
3474      pt = pt._next;
3475    }
3476  },
3477      _addPluginModifier = function _addPluginModifier(modifier, tween, target, property) {
3478    var pt = this._pt,
3479        next;
3480
3481    while (pt) {
3482      next = pt._next;
3483      pt.p === property && pt.modifier(modifier, tween, target);
3484      pt = next;
3485    }
3486  },
3487      _killPropTweensOf = function _killPropTweensOf(property) {
3488    var pt = this._pt,
3489        hasNonDependentRemaining,
3490        next;
3491
3492    while (pt) {
3493      next = pt._next;
3494
3495      if (pt.p === property && !pt.op || pt.op === property) {
3496        _removeLinkedListItem(this, pt, "_pt");
3497      } else if (!pt.dep) {
3498        hasNonDependentRemaining = 1;
3499      }
3500
3501      pt = next;
3502    }
3503
3504    return !hasNonDependentRemaining;
3505  },
3506      _setterWithModifier = function _setterWithModifier(target, property, value, data) {
3507    data.mSet(target, property, data.m.call(data.tween, value, data.mt), data);
3508  },
3509      _sortPropTweensByPriority = function _sortPropTweensByPriority(parent) {
3510    var pt = parent._pt,
3511        next,
3512        pt2,
3513        first,
3514        last;
3515
3516    while (pt) {
3517      next = pt._next;
3518      pt2 = first;
3519
3520      while (pt2 && pt2.pr > pt.pr) {
3521        pt2 = pt2._next;
3522      }
3523
3524      if (pt._prev = pt2 ? pt2._prev : last) {
3525        pt._prev._next = pt;
3526      } else {
3527        first = pt;
3528      }
3529
3530      if (pt._next = pt2) {
3531        pt2._prev = pt;
3532      } else {
3533        last = pt;
3534      }
3535
3536      pt = next;
3537    }
3538
3539    parent._pt = first;
3540  };
3541
3542  var PropTween = function () {
3543    function PropTween(next, target, prop, start, change, renderer, data, setter, priority) {
3544      this.t = target;
3545      this.s = start;
3546      this.c = change;
3547      this.p = prop;
3548      this.r = renderer || _renderPlain;
3549      this.d = data || this;
3550      this.set = setter || _setterPlain;
3551      this.pr = priority || 0;
3552      this._next = next;
3553
3554      if (next) {
3555        next._prev = this;
3556      }
3557    }
3558
3559    var _proto4 = PropTween.prototype;
3560
3561    _proto4.modifier = function modifier(func, tween, target) {
3562      this.mSet = this.mSet || this.set;
3563      this.set = _setterWithModifier;
3564      this.m = func;
3565      this.mt = target;
3566      this.tween = tween;
3567    };
3568
3569    return PropTween;
3570  }();
3571
3572  _forEachName(_callbackNames + "parent,duration,ease,delay,overwrite,runBackwards,startAt,yoyo,immediateRender,repeat,repeatDelay,data,paused,reversed,lazy,callbackScope,stringFilter,id,yoyoEase,stagger,inherit,repeatRefresh,keyframes,autoRevert,scrollTrigger", function (name) {
3573    return _reservedProps[name] = 1;
3574  });
3575
3576  _globals.TweenMax = _globals.TweenLite = Tween;
3577  _globals.TimelineLite = _globals.TimelineMax = Timeline;
3578  _globalTimeline = new Timeline({
3579    sortChildren: false,
3580    defaults: _defaults,
3581    autoRemoveChildren: true,
3582    id: "root",
3583    smoothChildTiming: true
3584  });
3585  _config.stringFilter = _colorStringFilter;
3586
3587  var _media = [],
3588      _listeners = {},
3589      _emptyArray = [],
3590      _lastMediaTime = 0,
3591      _contextID = 0,
3592      _dispatch = function _dispatch(type) {
3593    return (_listeners[type] || _emptyArray).map(function (f) {
3594      return f();
3595    });
3596  },
3597      _onMediaChange = function _onMediaChange() {
3598    var time = Date.now(),
3599        matches = [];
3600
3601    if (time - _lastMediaTime > 2) {
3602      _dispatch("matchMediaInit");
3603
3604      _media.forEach(function (c) {
3605        var queries = c.queries,
3606            conditions = c.conditions,
3607            match,
3608            p,
3609            anyMatch,
3610            toggled;
3611
3612        for (p in queries) {
3613          match = _win.matchMedia(queries[p]).matches;
3614          match && (anyMatch = 1);
3615
3616          if (match !== conditions[p]) {
3617            conditions[p] = match;
3618            toggled = 1;
3619          }
3620        }
3621
3622        if (toggled) {
3623          c.revert();
3624          anyMatch && matches.push(c);
3625        }
3626      });
3627
3628      _dispatch("matchMediaRevert");
3629
3630      matches.forEach(function (c) {
3631        return c.onMatch(c, function (func) {
3632          return c.add(null, func);
3633        });
3634      });
3635      _lastMediaTime = time;
3636
3637      _dispatch("matchMedia");
3638    }
3639  };
3640
3641  var Context = function () {
3642    function Context(func, scope) {
3643      this.selector = scope && selector(scope);
3644      this.data = [];
3645      this._r = [];
3646      this.isReverted = false;
3647      this.id = _contextID++;
3648      func && this.add(func);
3649    }
3650
3651    var _proto5 = Context.prototype;
3652
3653    _proto5.add = function add(name, func, scope) {
3654      if (_isFunction(name)) {
3655        scope = func;
3656        func = name;
3657        name = _isFunction;
3658      }
3659
3660      var self = this,
3661          f = function f() {
3662        var prev = _context,
3663            prevSelector = self.selector,
3664            result;
3665        prev && prev !== self && prev.data.push(self);
3666        scope && (self.selector = selector(scope));
3667        _context = self;
3668        result = func.apply(self, arguments);
3669        _isFunction(result) && self._r.push(result);
3670        _context = prev;
3671        self.selector = prevSelector;
3672        self.isReverted = false;
3673        return result;
3674      };
3675
3676      self.last = f;
3677      return name === _isFunction ? f(self, function (func) {
3678        return self.add(null, func);
3679      }) : name ? self[name] = f : f;
3680    };
3681
3682    _proto5.ignore = function ignore(func) {
3683      var prev = _context;
3684      _context = null;
3685      func(this);
3686      _context = prev;
3687    };
3688
3689    _proto5.getTweens = function getTweens() {
3690      var a = [];
3691      this.data.forEach(function (e) {
3692        return e instanceof Context ? a.push.apply(a, e.getTweens()) : e instanceof Tween && !(e.parent && e.parent.data === "nested") && a.push(e);
3693      });
3694      return a;
3695    };
3696
3697    _proto5.clear = function clear() {
3698      this._r.length = this.data.length = 0;
3699    };
3700
3701    _proto5.kill = function kill(revert, matchMedia) {
3702      var _this4 = this;
3703
3704      if (revert) {
3705        (function () {
3706          var tweens = _this4.getTweens(),
3707              i = _this4.data.length,
3708              t;
3709
3710          while (i--) {
3711            t = _this4.data[i];
3712
3713            if (t.data === "isFlip") {
3714              t.revert();
3715              t.getChildren(true, true, false).forEach(function (tween) {
3716                return tweens.splice(tweens.indexOf(tween), 1);
3717              });
3718            }
3719          }
3720
3721          tweens.map(function (t) {
3722            return {
3723              g: t._dur || t._delay || t._sat && !t._sat.vars.immediateRender ? t.globalTime(0) : -Infinity,
3724              t: t
3725            };
3726          }).sort(function (a, b) {
3727            return b.g - a.g || -Infinity;
3728          }).forEach(function (o) {
3729            return o.t.revert(revert);
3730          });
3731          i = _this4.data.length;
3732
3733          while (i--) {
3734            t = _this4.data[i];
3735
3736            if (t instanceof Timeline) {
3737              if (t.data !== "nested") {
3738                t.scrollTrigger && t.scrollTrigger.revert();
3739                t.kill();
3740              }
3741            } else {
3742              !(t instanceof Tween) && t.revert && t.revert(revert);
3743            }
3744          }
3745
3746          _this4._r.forEach(function (f) {
3747            return f(revert, _this4);
3748          });
3749
3750          _this4.isReverted = true;
3751        })();
3752      } else {
3753        this.data.forEach(function (e) {
3754          return e.kill && e.kill();
3755        });
3756      }
3757
3758      this.clear();
3759
3760      if (matchMedia) {
3761        var i = _media.length;
3762
3763        while (i--) {
3764          _media[i].id === this.id && _media.splice(i, 1);
3765        }
3766      }
3767    };
3768
3769    _proto5.revert = function revert(config) {
3770      this.kill(config || {});
3771    };
3772
3773    return Context;
3774  }();
3775
3776  var MatchMedia = function () {
3777    function MatchMedia(scope) {
3778      this.contexts = [];
3779      this.scope = scope;
3780      _context && _context.data.push(this);
3781    }
3782
3783    var _proto6 = MatchMedia.prototype;
3784
3785    _proto6.add = function add(conditions, func, scope) {
3786      _isObject(conditions) || (conditions = {
3787        matches: conditions
3788      });
3789      var context = new Context(0, scope || this.scope),
3790          cond = context.conditions = {},
3791          mq,
3792          p,
3793          active;
3794      _context && !context.selector && (context.selector = _context.selector);
3795      this.contexts.push(context);
3796      func = context.add("onMatch", func);
3797      context.queries = conditions;
3798
3799      for (p in conditions) {
3800        if (p === "all") {
3801          active = 1;
3802        } else {
3803          mq = _win.matchMedia(conditions[p]);
3804
3805          if (mq) {
3806            _media.indexOf(context) < 0 && _media.push(context);
3807            (cond[p] = mq.matches) && (active = 1);
3808            mq.addListener ? mq.addListener(_onMediaChange) : mq.addEventListener("change", _onMediaChange);
3809          }
3810        }
3811      }
3812
3813      active && func(context, function (f) {
3814        return context.add(null, f);
3815      });
3816      return this;
3817    };
3818
3819    _proto6.revert = function revert(config) {
3820      this.kill(config || {});
3821    };
3822
3823    _proto6.kill = function kill(revert) {
3824      this.contexts.forEach(function (c) {
3825        return c.kill(revert, true);
3826      });
3827    };
3828
3829    return MatchMedia;
3830  }();
3831
3832  var _gsap = {
3833    registerPlugin: function registerPlugin() {
3834      for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
3835        args[_key2] = arguments[_key2];
3836      }
3837
3838      args.forEach(function (config) {
3839        return _createPlugin(config);
3840      });
3841    },
3842    timeline: function timeline(vars) {
3843      return new Timeline(vars);
3844    },
3845    getTweensOf: function getTweensOf(targets, onlyActive) {
3846      return _globalTimeline.getTweensOf(targets, onlyActive);
3847    },
3848    getProperty: function getProperty(target, property, unit, uncache) {
3849      _isString(target) && (target = toArray(target)[0]);
3850
3851      var getter = _getCache(target || {}).get,
3852          format = unit ? _passThrough : _numericIfPossible;
3853
3854      unit === "native" && (unit = "");
3855      return !target ? target : !property ? function (property, unit, uncache) {
3856        return format((_plugins[property] && _plugins[property].get || getter)(target, property, unit, uncache));
3857      } : format((_plugins[property] && _plugins[property].get || getter)(target, property, unit, uncache));
3858    },
3859    quickSetter: function quickSetter(target, property, unit) {
3860      target = toArray(target);
3861
3862      if (target.length > 1) {
3863        var setters = target.map(function (t) {
3864          return gsap.quickSetter(t, property, unit);
3865        }),
3866            l = setters.length;
3867        return function (value) {
3868          var i = l;
3869
3870          while (i--) {
3871            setters[i](value);
3872          }
3873        };
3874      }
3875
3876      target = target[0] || {};
3877
3878      var Plugin = _plugins[property],
3879          cache = _getCache(target),
3880          p = cache.harness && (cache.harness.aliases || {})[property] || property,
3881          setter = Plugin ? function (value) {
3882        var p = new Plugin();
3883        _quickTween._pt = 0;
3884        p.init(target, unit ? value + unit : value, _quickTween, 0, [target]);
3885        p.render(1, p);
3886        _quickTween._pt && _renderPropTweens(1, _quickTween);
3887      } : cache.set(target, p);
3888
3889      return Plugin ? setter : function (value) {
3890        return setter(target, p, unit ? value + unit : value, cache, 1);
3891      };
3892    },
3893    quickTo: function quickTo(target, property, vars) {
3894      var _
3894merge2;
3895
3896      var tween = gsap.to(target, _merge((_merge2 = {}, _merge2[property] = "+=0.1", _merge2.paused = true, _merge
vendor: 5,649 bytes, lines 3896-4098
38962), vars || {})),
3897          func = function func(value, start, startIsRelative) {
3898        return tween.resetTo(property, value, start, startIsRelative);
3899      };
3900
3901      func.tween = tween;
3902      return func;
3903    },
3904    isTweening: function isTweening(targets) {
3905      return _globalTimeline.getTweensOf(targets, true).length > 0;
3906    },
3907    defaults: function defaults(value) {
3908      value && value.ease && (value.ease = _parseEase(value.ease, _defaults.ease));
3909      return _mergeDeep(_defaults, value || {});
3910    },
3911    config: function config(value) {
3912      return _mergeDeep(_config, value || {});
3913    },
3914    registerEffect: function registerEffect(_ref3) {
3915      var name = _ref3.name,
3916          effect = _ref3.effect,
3917          plugins = _ref3.plugins,
3918          defaults = _ref3.defaults,
3919          extendTimeline = _ref3.extendTimeline;
3920      (plugins || "").split(",").forEach(function (pluginName) {
3921        return pluginName && !_plugins[pluginName] && !_globals[pluginName] && _warn(name + " effect requires " + pluginName + " plugin.");
3922      });
3923
3924      _effects[name] = function (targets, vars, tl) {
3925        return effect(toArray(targets), _setDefaults(vars || {}, defaults), tl);
3926      };
3927
3928      if (extendTimeline) {
3929        Timeline.prototype[name] = function (targets, vars, position) {
3930          return this.add(_effects[name](targets, _isObject(vars) ? vars : (position = vars) && {}, this), position);
3931        };
3932      }
3933    },
3934    registerEase: function registerEase(name, ease) {
3935      _easeMap[name] = _parseEase(ease);
3936    },
3937    parseEase: function parseEase(ease, defaultEase) {
3938      return arguments.length ? _parseEase(ease, defaultEase) : _easeMap;
3939    },
3940    getById: function getById(id) {
3941      return _globalTimeline.getById(id);
3942    },
3943    exportRoot: function exportRoot(vars, includeDelayedCalls) {
3944      if (vars === void 0) {
3945        vars = {};
3946      }
3947
3948      var tl = new Timeline(vars),
3949          child,
3950          next;
3951      tl.smoothChildTiming = _isNotFalse(vars.smoothChildTiming);
3952
3953      _globalTimeline.remove(tl);
3954
3955      tl._dp = 0;
3956      tl._time = tl._tTime = _globalTimeline._time;
3957      child = _globalTimeline._first;
3958
3959      while (child) {
3960        next = child._next;
3961
3962        if (includeDelayedCalls || !(!child._dur && child instanceof Tween && child.vars.onComplete === child._targets[0])) {
3963          _addToTimeline(tl, child, child._start - child._delay);
3964        }
3965
3966        child = next;
3967      }
3968
3969      _addToTimeline(_globalTimeline, tl, 0);
3970
3971      return tl;
3972    },
3973    context: function context(func, scope) {
3974      return func ? new Context(func, scope) : _context;
3975    },
3976    matchMedia: function matchMedia(scope) {
3977      return new MatchMedia(scope);
3978    },
3979    matchMediaRefresh: function matchMediaRefresh() {
3980      return _media.forEach(function (c) {
3981        var cond = c.conditions,
3982            found,
3983            p;
3984
3985        for (p in cond) {
3986          if (cond[p]) {
3987            cond[p] = false;
3988            found = 1;
3989          }
3990        }
3991
3992        found && c.revert();
3993      }) || _onMediaChange();
3994    },
3995    addEventListener: function addEventListener(type, callback) {
3996      var a = _listeners[type] || (_listeners[type] = []);
3997      ~a.indexOf(callback) || a.push(callback);
3998    },
3999    removeEventListener: function removeEventListener(type, callback) {
4000      var a = _listeners[type],
4001          i = a && a.indexOf(callback);
4002      i >= 0 && a.splice(i, 1);
4003    },
4004    utils: {
4005      wrap: wrap,
4006      wrapYoyo: wrapYoyo,
4007      distribute: distribute,
4008      random: random,
4009      snap: snap,
4010      normalize: normalize,
4011      getUnit: getUnit,
4012      clamp: clamp,
4013      splitColor: splitColor,
4014      toArray: toArray,
4015      selector: selector,
4016      mapRange: mapRange,
4017      pipe: pipe,
4018      unitize: unitize,
4019      interpolate: interpolate,
4020      shuffle: shuffle
4021    },
4022    install: _install,
4023    effects: _effects,
4024    ticker: _ticker,
4025    updateRoot: Timeline.updateRoot,
4026    plugins: _plugins,
4027    globalTimeline: _globalTimeline,
4028    core: {
4029      PropTween: PropTween,
4030      globals: _addGlobal,
4031      Tween: Tween,
4032      Timeline: Timeline,
4033      Animation: Animation,
4034      getCache: _getCache,
4035      _removeLinkedListItem: _removeLinkedListItem,
4036      reverting: function reverting() {
4037        return _reverting;
4038      },
4039      context: function context(toAdd) {
4040        if (toAdd && _context) {
4041          _context.data.push(toAdd);
4042
4043          toAdd._ctx = _context;
4044        }
4045
4046        return _context;
4047      },
4048      suppressOverwrites: function suppressOverwrites(value) {
4049        return _suppressOverwrites = value;
4050      }
4051    }
4052  };
4053
4054  _forEachName("to,from,fromTo,delayedCall,set,killTweensOf", function (name) {
4055    return _gsap[name] = Tween[name];
4056  });
4057
4058  _ticker.add(Timeline.updateRoot);
4059
4060  _quickTween = _gsap.to({}, {
4061    duration: 0
4062  });
4063
4064  var _getPluginPropTween = function _getPluginPropTween(plugin, prop) {
4065    var pt = plugin._pt;
4066
4067    while (pt && pt.p !== prop && pt.op !== prop && pt.fp !== prop) {
4068      pt = pt._next;
4069    }
4070
4071    return pt;
4072  },
4073      _addModifiers = function _addModifiers(tween, modifiers) {
4074    var targets = tween._targets,
4075        p,
4076        i,
4077        pt;
4078
4079    for (p in modifiers) {
4080      i = targets.length;
4081
4082      while (i--) {
4083        pt = tween._ptLookup[i][p];
4084
4085        if (pt && (pt = pt.d)) {
4086          if (pt._pt) {
4087            pt = _getPluginPropTween(pt, p);
4088          }
4089
4090          pt && pt.modifier && pt.modifier(modifiers[p], tween, targets[i], p);
4091        }
4092      }
4093    }
4094  },
4095      _buildModifierPlugin = function _buildModifierPlugin(name, modifier) {
4096    return {
4097      name: name,
4098      
vendor: 21,125 bytes, lines 4098-4749
4098rawVars: 1,
4099      init: function init(target, vars, tween) {
4100        tween._onInit = function (tween) {
4101          var temp, p;
4102
4103          if (_isString(vars)) {
4104            temp = {};
4105
4106            _forEachName(vars, function (name) {
4107              return temp[name] = 1;
4108            });
4109
4110            vars = temp;
4111          }
4112
4113          if (modifier) {
4114            temp = {};
4115
4116            for (p in vars) {
4117              temp[p] = modifier(vars[p]);
4118            }
4119
4120            vars = temp;
4121          }
4122
4123          _addModifiers(tween, vars);
4124        };
4125      }
4126    };
4127  };
4128
4129  var gsap = _gsap.registerPlugin({
4130    name: "attr",
4131    init: function init(target, vars, tween, index, targets) {
4132      var p, pt, v;
4133      this.tween = tween;
4134
4135      for (p in vars) {
4136        v = target.getAttribute(p) || "";
4137        pt = this.add(target, "setAttribute", (v || 0) + "", vars[p], index, targets, 0, 0, p);
4138        pt.op = p;
4139        pt.b = v;
4140
4141        this._props.push(p);
4142      }
4143    },
4144    render: function render(ratio, data) {
4145      var pt = data._pt;
4146
4147      while (pt) {
4148        _reverting ? pt.set(pt.t, pt.p, pt.b, pt) : pt.r(ratio, pt.d);
4149        pt = pt._next;
4150      }
4151    }
4152  }, {
4153    name: "endArray",
4154    init: function init(target, value) {
4155      var i = value.length;
4156
4157      while (i--) {
4158        this.add(target, i, target[i] || 0, value[i], 0, 0, 0, 0, 0, 1);
4159      }
4160    }
4161  }, _buildModifierPlugin("roundProps", _roundModifier), _buildModifierPlugin("modifiers"), _buildModifierPlugin("snap", snap)) || _gsap;
4162  Tween.version = Timeline.version = gsap.version = "3.12.5";
4163  _coreReady = 1;
4164  _windowExists() && _wake();
4165  var Power0 = _easeMap.Power0,
4166      Power1 = _easeMap.Power1,
4167      Power2 = _easeMap.Power2,
4168      Power3 = _easeMap.Power3,
4169      Power4 = _easeMap.Power4,
4170      Linear = _easeMap.Linear,
4171      Quad = _easeMap.Quad,
4172      Cubic = _easeMap.Cubic,
4173      Quart = _easeMap.Quart,
4174      Quint = _easeMap.Quint,
4175      Strong = _easeMap.Strong,
4176      Elastic = _easeMap.Elastic,
4177      Back = _easeMap.Back,
4178      SteppedEase = _easeMap.SteppedEase,
4179      Bounce = _easeMap.Bounce,
4180      Sine = _easeMap.Sine,
4181      Expo = _easeMap.Expo,
4182      Circ = _easeMap.Circ;
4183
4184  var _win$1,
4185      _doc$1,
4186      _docElement,
4187      _pluginInitted,
4188      _tempDiv,
4189      _tempDivStyler,
4190      _recentSetterPlugin,
4191      _reverting$1,
4192      _windowExists$1 = function _windowExists() {
4193    return typeof window !== "undefined";
4194  },
4195      _transformProps = {},
4196      _RAD2DEG = 180 / Math.PI,
4197      _DEG2RAD = Math.PI / 180,
4198      _atan2 = Math.atan2,
4199      _bigNum$1 = 1e8,
4200      _capsExp = /([A-Z])/g,
4201      _horizontalExp = /(left|right|width|margin|padding|x)/i,
4202      _complexExp = /[\s,\(]\S/,
4203      _propertyAliases = {
4204    autoAlpha: "opacity,visibility",
4205    scale: "scaleX,scaleY",
4206    alpha: "opacity"
4207  },
4208      _renderCSSProp = function _renderCSSProp(ratio, data) {
4209    return data.set(data.t, data.p, Math.round((data.s + data.c * ratio) * 10000) / 10000 + data.u, data);
4210  },
4211      _renderPropWithEnd = function _renderPropWithEnd(ratio, data) {
4212    return data.set(data.t, data.p, ratio === 1 ? data.e : Math.round((data.s + data.c * ratio) * 10000) / 10000 + data.u, data);
4213  },
4214      _renderCSSPropWithBeginning = function _renderCSSPropWithBeginning(ratio, data) {
4215    return data.set(data.t, data.p, ratio ? Math.round((data.s + data.c * ratio) * 10000) / 10000 + data.u : data.b, data);
4216  },
4217      _renderRoundedCSSProp = function _renderRoundedCSSProp(ratio, data) {
4218    var value = data.s + data.c * ratio;
4219    data.set(data.t, data.p, ~~(value + (value < 0 ? -.5 : .5)) + data.u, data);
4220  },
4221      _renderNonTweeningValue = function _renderNonTweeningValue(ratio, data) {
4222    return data.set(data.t, data.p, ratio ? data.e : data.b, data);
4223  },
4224      _renderNonTweeningValueOnlyAtEnd = function _renderNonTweeningValueOnlyAtEnd(ratio, data) {
4225    return data.set(data.t, data.p, ratio !== 1 ? data.b : data.e, data);
4226  },
4227      _setterCSSStyle = function _setterCSSStyle(target, property, value) {
4228    return target.style[property] = value;
4229  },
4230      _setterCSSProp = function _setterCSSProp(target, property, value) {
4231    return target.style.setProperty(property, value);
4232  },
4233      _setterTransform = function _setterTransform(target, property, value) {
4234    return target._gsap[property] = value;
4235  },
4236      _setterScale = function _setterScale(target, property, value) {
4237    return target._gsap.scaleX = target._gsap.scaleY = value;
4238  },
4239      _setterScaleWithRender = function _setterScaleWithRender(target, property, value, data, ratio) {
4240    var cache = target._gsap;
4241    cache.scaleX = cache.scaleY = value;
4242    cache.renderTransform(ratio, cache);
4243  },
4244      _setterTransformWithRender = function _setterTransformWithRender(target, property, value, data, ratio) {
4245    var cache = target._gsap;
4246    cache[property] = value;
4247    cache.renderTransform(ratio, cache);
4248  },
4249      _transformProp = "transform",
4250      _transformOriginProp = _transformProp + "Origin",
4251      _saveStyle = function _saveStyle(property, isNotCSS) {
4252    var _this = this;
4253
4254    var target = this.target,
4255        style = target.style,
4256        cache = target._gsap;
4257
4258    if (property in _transformProps && style) {
4259      this.tfm = this.tfm || {};
4260
4261      if (property !== "transform") {
4262        property = _propertyAliases[property] || property;
4263        ~property.indexOf(",") ? property.split(",").forEach(function (a) {
4264          return _this.tfm[a] = _get(target, a);
4265        }) : this.tfm[property] = cache.x ? cache[property] : _get(target, property);
4266        property === _transformOriginProp && (this.tfm.zOrigin = cache.zOrigin);
4267      } else {
4268        return _propertyAliases.transform.split(",").forEach(function (p) {
4269          return _saveStyle.call(_this, p, isNotCSS);
4270        });
4271      }
4272
4273      if (this.props.indexOf(_transformProp) >= 0) {
4274        return;
4275      }
4276
4277      if (cache.svg) {
4278        this.svgo = target.getAttribute("data-svg-origin");
4279        this.props.push(_transformOriginProp, isNotCSS, "");
4280      }
4281
4282      property = _transformProp;
4283    }
4284
4285    (style || isNotCSS) && this.props.push(property, isNotCSS, style[property]);
4286  },
4287      _removeIndependentTransforms = function _removeIndependentTransforms(style) {
4288    if (style.translate) {
4289      style.removeProperty("translate");
4290      style.removeProperty("scale");
4291      style.removeProperty("rotate");
4292    }
4293  },
4294      _revertStyle = function _revertStyle() {
4295    var props = this.props,
4296        target = this.target,
4297        style = target.style,
4298        cache = target._gsap,
4299        i,
4300        p;
4301
4302    for (i = 0; i < props.length; i += 3) {
4303      props[i + 1] ? target[props[i]] = props[i + 2] : props[i + 2] ? style[props[i]] = props[i + 2] : style.removeProperty(props[i].substr(0, 2) === "--" ? props[i] : props[i].replace(_capsExp, "-$1").toLowerCase());
4304    }
4305
4306    if (this.tfm) {
4307      for (p in this.tfm) {
4308        cache[p] = this.tfm[p];
4309      }
4310
4311      if (cache.svg) {
4312        cache.renderTransform();
4313        target.setAttribute("data-svg-origin", this.svgo || "");
4314      }
4315
4316      i = _reverting$1();
4317
4318      if ((!i || !i.isStart) && !style[_transformProp]) {
4319        _removeIndependentTransforms(style);
4320
4321        if (cache.zOrigin && style[_transformOriginProp]) {
4322          style[_transformOriginProp] += " " + cache.zOrigin + "px";
4323          cache.zOrigin = 0;
4324          cache.renderTransform();
4325        }
4326
4327        cache.uncache = 1;
4328      }
4329    }
4330  },
4331      _getStyleSaver = function _getStyleSaver(target, properties) {
4332    var saver = {
4333      target: target,
4334      props: [],
4335      revert: _revertStyle,
4336      save: _saveStyle
4337    };
4338    target._gsap || gsap.core.getCache(target);
4339    properties && properties.split(",").forEach(function (p) {
4340      return saver.save(p);
4341    });
4342    return saver;
4343  },
4344      _supports3D,
4345      _createElement = function _createElement(type, ns) {
4346    var e = _doc$1.createElementNS ? _doc$1.createElementNS((ns || "http://www.w3.org/1999/xhtml").replace(/^https/, "http"), type) : _doc$1.createElement(type);
4347    return e && e.style ? e : _doc$1.createElement(type);
4348  },
4349      _getComputedProperty = function _getComputedProperty(target, property, skipPrefixFallback) {
4350    var cs = getComputedStyle(target);
4351    return cs[property] || cs.getPropertyValue(property.replace(_capsExp, "-$1").toLowerCase()) || cs.getPropertyValue(property) || !skipPrefixFallback && _getComputedProperty(target, _checkPropPrefix(property) || property, 1) || "";
4352  },
4353      _prefixes = "O,Moz,ms,Ms,Webkit".split(","),
4354      _checkPropPrefix = function _checkPropPrefix(property, element, preferPrefix) {
4355    var e = element || _tempDiv,
4356        s = e.style,
4357        i = 5;
4358
4359    if (property in s && !preferPrefix) {
4360      return property;
4361    }
4362
4363    property = property.charAt(0).toUpperCase() + property.substr(1);
4364
4365    while (i-- && !(_prefixes[i] + property in s)) {}
4366
4367    return i < 0 ? null : (i === 3 ? "ms" : i >= 0 ? _prefixes[i] : "") + property;
4368  },
4369      _initCore = function _initCore() {
4370    if (_windowExists$1() && window.document) {
4371      _win$1 = window;
4372      _doc$1 = _win$1.document;
4373      _docElement = _doc$1.documentElement;
4374      _tempDiv = _createElement("div") || {
4375        style: {}
4376      };
4377      _tempDivStyler = _createElement("div");
4378      _transformProp = _checkPropPrefix(_transformProp);
4379      _transformOriginProp = _transformProp + "Origin";
4380      _tempDiv.style.cssText = "border-width:0;line-height:0;position:absolute;padding:0";
4381      _supports3D = !!_checkPropPrefix("perspective");
4382      _reverting$1 = gsap.core.reverting;
4383      _pluginInitted = 1;
4384    }
4385  },
4386      _getBBoxHack = function _getBBoxHack(swapIfPossible) {
4387    var svg = _createElement("svg", this.ownerSVGElement && this.ownerSVGElement.getAttribute("xmlns") || "http://www.w3.org/2000/svg"),
4388        oldParent = this.parentNode,
4389        oldSibling = this.nextSibling,
4390        oldCSS = this.style.cssText,
4391        bbox;
4392
4393    _docElement.appendChild(svg);
4394
4395    svg.appendChild(this);
4396    this.style.display = "block";
4397
4398    if (swapIfPossible) {
4399      try {
4400        bbox = this.getBBox();
4401        this._gsapBBox = this.getBBox;
4402        this.getBBox = _getBBoxHack;
4403      } catch (e) {}
4404    } else if (this._gsapBBox) {
4405      bbox = this._gsapBBox();
4406    }
4407
4408    if (oldParent) {
4409      if (oldSibling) {
4410        oldParent.insertBefore(this, oldSibling);
4411      } else {
4412        oldParent.appendChild(this);
4413      }
4414    }
4415
4416    _docElement.removeChild(svg);
4417
4418    this.style.cssText = oldCSS;
4419    return bbox;
4420  },
4421      _getAttributeFallbacks = function _getAttributeFallbacks(target, attributesArray) {
4422    var i = attributesArray.length;
4423
4424    while (i--) {
4425      if (target.hasAttribute(attributesArray[i])) {
4426        return target.getAttribute(attributesArray[i]);
4427      }
4428    }
4429  },
4430      _getBBox = function _getBBox(target) {
4431    var bounds;
4432
4433    try {
4434      bounds = target.getBBox();
4435    } catch (error) {
4436      bounds = _getBBoxHack.call(target, true);
4437    }
4438
4439    bounds && (bounds.width || bounds.height) || target.getBBox === _getBBoxHack || (bounds = _getBBoxHack.call(target, true));
4440    return bounds && !bounds.width && !bounds.x && !bounds.y ? {
4441      x: +_getAttributeFallbacks(target, ["x", "cx", "x1"]) || 0,
4442      y: +_getAttributeFallbacks(target, ["y", "cy", "y1"]) || 0,
4443      width: 0,
4444      height: 0
4445    } : bounds;
4446  },
4447      _isSVG = function _isSVG(e) {
4448    return !!(e.getCTM && (!e.parentNode || e.ownerSVGElement) && _getBBox(e));
4449  },
4450      _removeProperty = function _removeProperty(target, property) {
4451    if (property) {
4452      var style = target.style,
4453          first2Chars;
4454
4455      if (property in _transformProps && property !== _transformOriginProp) {
4456        property = _transformProp;
4457      }
4458
4459      if (style.removeProperty) {
4460        first2Chars = property.substr(0, 2);
4461
4462        if (first2Chars === "ms" || property.substr(0, 6) === "webkit") {
4463          property = "-" + property;
4464        }
4465
4466        style.removeProperty(first2Chars === "--" ? property : property.replace(_capsExp, "-$1").toLowerCase());
4467      } else {
4468        style.removeAttribute(property);
4469      }
4470    }
4471  },
4472      _addNonTweeningPT = function _addNonTweeningPT(plugin, target, property, beginning, end, onlySetAtEnd) {
4473    var pt = new PropTween(plugin._pt, target, property, 0, 1, onlySetAtEnd ? _renderNonTweeningValueOnlyAtEnd : _renderNonTweeningValue);
4474    plugin._pt = pt;
4475    pt.b = beginning;
4476    pt.e = end;
4477
4478    plugin._props.push(property);
4479
4480    return pt;
4481  },
4482      _nonConvertibleUnits = {
4483    deg: 1,
4484    rad: 1,
4485    turn: 1
4486  },
4487      _nonStandardLayouts = {
4488    grid: 1,
4489    flex: 1
4490  },
4491      _convertToUnit = function _convertToUnit(target, property, value, unit) {
4492    var curValue = parseFloat(value) || 0,
4493        curUnit = (value + "").trim().substr((curValue + "").length) || "px",
4494        style = _tempDiv.style,
4495        horizontal = _horizontalExp.test(property),
4496        isRootSVG = target.tagName.toLowerCase() === "svg",
4497        measureProperty = (isRootSVG ? "client" : "offset") + (horizontal ? "Width" : "Height"),
4498        amount = 100,
4499        toPixels = unit === "px",
4500        toPercent = unit === "%",
4501        px,
4502        parent,
4503        cache,
4504        isSVG;
4505
4506    if (unit === curUnit || !curValue || _nonConvertibleUnits[unit] || _nonConvertibleUnits[curUnit]) {
4507      return curValue;
4508    }
4509
4510    curUnit !== "px" && !toPixels && (curValue = _convertToUnit(target, property, value, "px"));
4511    isSVG = target.getCTM && _isSVG(target);
4512
4513    if ((toPercent || curUnit === "%") && (_transformProps[property] || ~property.indexOf("adius"))) {
4514      px = isSVG ? target.getBBox()[horizontal ? "width" : "height"] : target[measureProperty];
4515      return _round(toPercent ? curValue / px * amount : curValue / 100 * px);
4516    }
4517
4518    style[horizontal ? "width" : "height"] = amount + (toPixels ? curUnit : unit);
4519    parent = ~property.indexOf("adius") || unit === "em" && target.appendChild && !isRootSVG ? target : target.parentNode;
4520
4521    if (isSVG) {
4522      parent = (target.ownerSVGElement || {}).parentNode;
4523    }
4524
4525    if (!parent || parent === _doc$1 || !parent.appendChild) {
4526      parent = _doc$1.body;
4527    }
4528
4529    cache = parent._gsap;
4530
4531    if (cache && toPercent && cache.width && horizontal && cache.time === _ticker.time && !cache.uncache) {
4532      return _round(curValue / cache.width * amount);
4533    } else {
4534      if (toPercent && (property === "height" || property === "width")) {
4535        var v = target.style[property];
4536        target.style[property] = amount + unit;
4537        px = target[measureProperty];
4538        v ? target.style[property] = v : _removeProperty(target, property);
4539      } else {
4540        (toPercent || curUnit === "%") && !_nonStandardLayouts[_getComputedProperty(parent, "display")] && (style.position = _getComputedProperty(target, "position"));
4541        parent === target && (style.position = "static");
4542        parent.appendChild(_tempDiv);
4543        px = _tempDiv[measureProperty];
4544        parent.removeChild(_tempDiv);
4545        style.position = "absolute";
4546      }
4547
4548      if (horizontal && toPercent) {
4549        cache = _getCache(parent);
4550        cache.time = _ticker.time;
4551        cache.width = parent[measureProperty];
4552      }
4553    }
4554
4555    return _round(toPixels ? px * curValue / amount : px && curValue ? amount / px * curValue : 0);
4556  },
4557      _get = function _get(target, property, unit, uncache) {
4558    var value;
4559    _pluginInitted || _initCore();
4560
4561    if (property in _propertyAliases && property !== "transform") {
4562      property = _propertyAliases[property];
4563
4564      if (~property.indexOf(",")) {
4565        property = property.split(",")[0];
4566      }
4567    }
4568
4569    if (_transformProps[property] && property !== "transform") {
4570      value = _parseTransform(target, uncache);
4571      value = property !== "transformOrigin" ? value[property] : value.svg ? value.origin : _firstTwoOnly(_getComputedProperty(target, _transformOriginProp)) + " " + value.zOrigin + "px";
4572    } else {
4573      value = target.style[property];
4574
4575      if (!value || value === "auto" || uncache || ~(value + "").indexOf("calc(")) {
4576        value = _specialProps[property] && _specialProps[property](target, property, unit) || _getComputedProperty(target, property) || _getProperty(target, property) || (property === "opacity" ? 1 : 0);
4577      }
4578    }
4579
4580    return unit && !~(value + "").trim().indexOf(" ") ? _convertToUnit(target, property, value, unit) + unit : value;
4581  },
4582      _tweenComplexCSSString = function _tweenComplexCSSString(target, prop, start, end) {
4583    if (!start || start === "none") {
4584      var p = _checkPropPrefix(prop, target, 1),
4585          s = p && _getComputedProperty(target, p, 1);
4586
4587      if (s && s !== start) {
4588        prop = p;
4589        start = s;
4590      } else if (prop === "borderColor") {
4591        start = _getComputedProperty(target, "borderTopColor");
4592      }
4593    }
4594
4595    var pt = new PropTween(this._pt, target.style, prop, 0, 1, _renderComplexString),
4596        index = 0,
4597        matchIndex = 0,
4598        a,
4599        result,
4600        startValues,
4601        startNum,
4602        color,
4603        startValue,
4604        endValue,
4605        endNum,
4606        chunk,
4607        endUnit,
4608        startUnit,
4609        endValues;
4610    pt.b = start;
4611    pt.e = end;
4612    start += "";
4613    end += "";
4614
4615    if (end === "auto") {
4616      startValue = target.style[prop];
4617      target.style[prop] = end;
4618      end = _getComputedProperty(target, prop) || end;
4619      startValue ? target.style[prop] = startValue : _removeProperty(target, prop);
4620    }
4621
4622    a = [start, end];
4623
4624    _colorStringFilter(a);
4625
4626    start = a[0];
4627    end = a[1];
4628    startValues = start.match(_numWithUnitExp) || [];
4629    endValues = end.match(_numWithUnitExp) || [];
4630
4631    if (endValues.length) {
4632      while (result = _numWithUnitExp.exec(end)) {
4633        endValue = result[0];
4634        chunk = end.substring(index, result.index);
4635
4636        if (color) {
4637          color = (color + 1) % 5;
4638        } else if (chunk.substr(-5) === "rgba(" || chunk.substr(-5) === "hsla(") {
4639          color = 1;
4640        }
4641
4642        if (endValue !== (startValue = startValues[matchIndex++] || "")) {
4643          startNum = parseFloat(startValue) || 0;
4644          startUnit = startValue.substr((startNum + "").length);
4645          endValue.charAt(1) === "=" && (endValue = _parseRelative(startNum, endValue) + startUnit);
4646          endNum = parseFloat(endValue);
4647          endUnit = endValue.substr((endNum + "").length);
4648          index = _numWithUnitExp.lastIndex - endUnit.length;
4649
4650          if (!endUnit) {
4651            endUnit = endUnit || _config.units[prop] || startUnit;
4652
4653            if (index === end.length) {
4654              end += endUnit;
4655              pt.e += endUnit;
4656            }
4657          }
4658
4659          if (startUnit !== endUnit) {
4660            startNum = _convertToUnit(target, prop, startValue, endUnit) || 0;
4661          }
4662
4663          pt._pt = {
4664            _next: pt._pt,
4665            p: chunk || matchIndex === 1 ? chunk : ",",
4666            s: startNum,
4667            c: endNum - startNum,
4668            m: color && color < 4 || prop === "zIndex" ? Math.round : 0
4669          };
4670        }
4671      }
4672
4673      pt.c = index < end.length ? end.substring(index, end.length) : "";
4674    } else {
4675      pt.r = prop === "display" && end === "none" ? _renderNonTweeningValueOnlyAtEnd : _renderNonTweeningValue;
4676    }
4677
4678    _relExp.test(end) && (pt.e = 0);
4679    this._pt = pt;
4680    return pt;
4681  },
4682      _keywordToPercent = {
4683    top: "0%",
4684    bottom: "100%",
4685    left: "0%",
4686    right: "100%",
4687    center: "50%"
4688  },
4689      _convertKeywordsToPercentages = function _convertKeywordsToPercentages(value) {
4690    var split = value.split(" "),
4691        x = split[0],
4692        y = split[1] || "50%";
4693
4694    if (x === "top" || x === "bottom" || y === "left" || y === "right") {
4695      value = x;
4696      x = y;
4697      y = value;
4698    }
4699
4700    split[0] = _keywordToPercent[x] || x;
4701    split[1] = _keywordToPercent[y] || y;
4702    return split.join(" ");
4703  },
4704      _renderClearProps = function _renderClearProps(ratio, data) {
4705    if (data.tween && data.tween._time === data.tween._dur) {
4706      var target = data.t,
4707          style = target.style,
4708          props = data.u,
4709          cache = target._gsap,
4710          prop,
4711          clearTransforms,
4712          i;
4713
4714      if (props === "all" || props === true) {
4715        style.cssText = "";
4716        clearTransforms = 1;
4717      } else {
4718        props = props.split(",");
4719        i = props.length;
4720
4721        while (--i > -1) {
4722          prop = props[i];
4723
4724          if (_transformProps[prop]) {
4725            clearTransforms = 1;
4726            prop = prop === "transformOrigin" ? _transformOriginProp : _transformProp;
4727          }
4728
4729          _removeProperty(target, prop);
4730        }
4731      }
4732
4733      if (clearTransforms) {
4734        _removeProperty(target, _transformProp);
4735
4736        if (cache) {
4737          cache.svg && target.removeAttribute("transform");
4738
4739          _parseTransform(target, 1);
4740
4741          cache.uncache = 1;
4742
4743          _removeIndependentTransforms(style);
4744        }
4745      }
4746    }
4747  },
4748      _specialProps = {
4749    clearProps: function clearProps(plugin, target, property, endValue, tween) {
vendor: 1,580 bytes, lines 4750-4790
4750      if (tween.data !== "isFromStart") {
4751        var pt = plugin._pt = new PropTween(plugin._pt, target, property, 0, 0, _renderClearProps);
4752        pt.u = endValue;
4753        pt.pr = -10;
4754        pt.tween = tween;
4755
4756        plugin._props.push(property);
4757
4758        return 1;
4759      }
4760    }
4761  },
4762      _identity2DMatrix = [1, 0, 0, 1, 0, 0],
4763      _rotationalProperties = {},
4764      _isNullTransform = function _isNullTransform(value) {
4765    return value === "matrix(1, 0, 0, 1, 0, 0)" || value === "none" || !value;
4766  },
4767      _getComputedTransformMatrixAsArray = function _getComputedTransformMatrixAsArray(target) {
4768    var matrixString = _getComputedProperty(target, _transformProp);
4769
4770    return _isNullTransform(matrixString) ? _identity2DMatrix : matrixString.substr(7).match(_numExp).map(_round);
4771  },
4772      _getMatrix = function _getMatrix(target, force2D) {
4773    var cache = target._gsap || _getCache(target),
4774        style = target.style,
4775        matrix = _getComputedTransformMatrixAsArray(target),
4776        parent,
4777        nextSibling,
4778        temp,
4779        addedToDOM;
4780
4781    if (cache.svg && target.getAttribute("transform")) {
4782      temp = target.transform.baseVal.consolidate().matrix;
4783      matrix = [temp.a, temp.b, temp.c, temp.d, temp.e, temp.f];
4784      return matrix.join(",") === "1,0,0,1,0,0" ? _identity2DMatrix : matrix;
4785    } else if (matrix === _identity2DMatrix && !target.offsetParent && target !== _docElement && !cache.svg) {
4786      temp = style.display;
4787      style.display = "block";
4788      parent = target.parentNode;
4789
4790      if (!parent || !target.offsetParent
vendor: 18,926 bytes, lines 4790-5387
4790) {
4791        addedToDOM = 1;
4792        nextSibling = target.nextElementSibling;
4793
4794        _docElement.appendChild(target);
4795      }
4796
4797      matrix = _getComputedTransformMatrixAsArray(target);
4798      temp ? style.display = temp : _removeProperty(target, "display");
4799
4800      if (addedToDOM) {
4801        nextSibling ? parent.insertBefore(target, nextSibling) : parent ? parent.appendChild(target) : _docElement.removeChild(target);
4802      }
4803    }
4804
4805    return force2D && matrix.length > 6 ? [matrix[0], matrix[1], matrix[4], matrix[5], matrix[12], matrix[13]] : matrix;
4806  },
4807      _applySVGOrigin = function _applySVGOrigin(target, origin, originIsAbsolute, smooth, matrixArray, pluginToAddPropTweensTo) {
4808    var cache = target._gsap,
4809        matrix = matrixArray || _getMatrix(target, true),
4810        xOriginOld = cache.xOrigin || 0,
4811        yOriginOld = cache.yOrigin || 0,
4812        xOffsetOld = cache.xOffset || 0,
4813        yOffsetOld = cache.yOffset || 0,
4814        a = matrix[0],
4815        b = matrix[1],
4816        c = matrix[2],
4817        d = matrix[3],
4818        tx = matrix[4],
4819        ty = matrix[5],
4820        originSplit = origin.split(" "),
4821        xOrigin = parseFloat(originSplit[0]) || 0,
4822        yOrigin = parseFloat(originSplit[1]) || 0,
4823        bounds,
4824        determinant,
4825        x,
4826        y;
4827
4828    if (!originIsAbsolute) {
4829      bounds = _getBBox(target);
4830      xOrigin = bounds.x + (~originSplit[0].indexOf("%") ? xOrigin / 100 * bounds.width : xOrigin);
4831      yOrigin = bounds.y + (~(originSplit[1] || originSplit[0]).indexOf("%") ? yOrigin / 100 * bounds.height : yOrigin);
4832    } else if (matrix !== _identity2DMatrix && (determinant = a * d - b * c)) {
4833      x = xOrigin * (d / determinant) + yOrigin * (-c / determinant) + (c * ty - d * tx) / determinant;
4834      y = xOrigin * (-b / determinant) + yOrigin * (a / determinant) - (a * ty - b * tx) / determinant;
4835      xOrigin = x;
4836      yOrigin = y;
4837    }
4838
4839    if (smooth || smooth !== false && cache.smooth) {
4840      tx = xOrigin - xOriginOld;
4841      ty = yOrigin - yOriginOld;
4842      cache.xOffset = xOffsetOld + (tx * a + ty * c) - tx;
4843      cache.yOffset = yOffsetOld + (tx * b + ty * d) - ty;
4844    } else {
4845      cache.xOffset = cache.yOffset = 0;
4846    }
4847
4848    cache.xOrigin = xOrigin;
4849    cache.yOrigin = yOrigin;
4850    cache.smooth = !!smooth;
4851    cache.origin = origin;
4852    cache.originIsAbsolute = !!originIsAbsolute;
4853    target.style[_transformOriginProp] = "0px 0px";
4854
4855    if (pluginToAddPropTweensTo) {
4856      _addNonTweeningPT(pluginToAddPropTweensTo, cache, "xOrigin", xOriginOld, xOrigin);
4857
4858      _addNonTweeningPT(pluginToAddPropTweensTo, cache, "yOrigin", yOriginOld, yOrigin);
4859
4860      _addNonTweeningPT(pluginToAddPropTweensTo, cache, "xOffset", xOffsetOld, cache.xOffset);
4861
4862      _addNonTweeningPT(pluginToAddPropTweensTo, cache, "yOffset", yOffsetOld, cache.yOffset);
4863    }
4864
4865    target.setAttribute("data-svg-origin", xOrigin + " " + yOrigin);
4866  },
4867      _parseTransform = function _parseTransform(target, uncache) {
4868    var cache = target._gsap || new GSCache(target);
4869
4870    if ("x" in cache && !uncache && !cache.uncache) {
4871      return cache;
4872    }
4873
4874    var style = target.style,
4875        invertedScaleX = cache.scaleX < 0,
4876        px = "px",
4877        deg = "deg",
4878        cs = getComputedStyle(target),
4879        origin = _getComputedProperty(target, _transformOriginProp) || "0",
4880        x,
4881        y,
4882        z,
4883        scaleX,
4884        scaleY,
4885        rotation,
4886        rotationX,
4887        rotationY,
4888        skewX,
4889        skewY,
4890        perspective,
4891        xOrigin,
4892        yOrigin,
4893        matrix,
4894        angle,
4895        cos,
4896        sin,
4897        a,
4898        b,
4899        c,
4900        d,
4901        a12,
4902        a22,
4903        t1,
4904        t2,
4905        t3,
4906        a13,
4907        a23,
4908        a33,
4909        a42,
4910        a43,
4911        a32;
4912    x = y = z = rotation = rotationX = rotationY = skewX = skewY = perspective = 0;
4913    scaleX = scaleY = 1;
4914    cache.svg = !!(target.getCTM && _isSVG(target));
4915
4916    if (cs.translate) {
4917      if (cs.translate !== "none" || cs.scale !== "none" || cs.rotate !== "none") {
4918        style[_transformProp] = (cs.translate !== "none" ? "translate3d(" + (cs.translate + " 0 0").split(" ").slice(0, 3).join(", ") + ") " : "") + (cs.rotate !== "none" ? "rotate(" + cs.rotate + ") " : "") + (cs.scale !== "none" ? "scale(" + cs.scale.split(" ").join(",") + ") " : "") + (cs[_transformProp] !== "none" ? cs[_transformProp] : "");
4919      }
4920
4921      style.scale = style.rotate = style.translate = "none";
4922    }
4923
4924    matrix = _getMatrix(target, cache.svg);
4925
4926    if (cache.svg) {
4927      if (cache.uncache) {
4928        t2 = target.getBBox();
4929        origin = cache.xOrigin - t2.x + "px " + (cache.yOrigin - t2.y) + "px";
4930        t1 = "";
4931      } else {
4932        t1 = !uncache && target.getAttribute("data-svg-origin");
4933      }
4934
4935      _applySVGOrigin(target, t1 || origin, !!t1 || cache.originIsAbsolute, cache.smooth !== false, matrix);
4936    }
4937
4938    xOrigin = cache.xOrigin || 0;
4939    yOrigin = cache.yOrigin || 0;
4940
4941    if (matrix !== _identity2DMatrix) {
4942      a = matrix[0];
4943      b = matrix[1];
4944      c = matrix[2];
4945      d = matrix[3];
4946      x = a12 = matrix[4];
4947      y = a22 = matrix[5];
4948
4949      if (matrix.length === 6) {
4950        scaleX = Math.sqrt(a * a + b * b);
4951        scaleY = Math.sqrt(d * d + c * c);
4952        rotation = a || b ? _atan2(b, a) * _RAD2DEG : 0;
4953        skewX = c || d ? _atan2(c, d) * _RAD2DEG + rotation : 0;
4954        skewX && (scaleY *= Math.abs(Math.cos(skewX * _DEG2RAD)));
4955
4956        if (cache.svg) {
4957          x -= xOrigin - (xOrigin * a + yOrigin * c);
4958          y -= yOrigin - (xOrigin * b + yOrigin * d);
4959        }
4960      } else {
4961        a32 = matrix[6];
4962        a42 = matrix[7];
4963        a13 = matrix[8];
4964        a23 = matrix[9];
4965        a33 = matrix[10];
4966        a43 = matrix[11];
4967        x = matrix[12];
4968        y = matrix[13];
4969        z = matrix[14];
4970        angle = _atan2(a32, a33);
4971        rotationX = angle * _RAD2DEG;
4972
4973        if (angle) {
4974          cos = Math.cos(-angle);
4975          sin = Math.sin(-angle);
4976          t1 = a12 * cos + a13 * sin;
4977          t2 = a22 * cos + a23 * sin;
4978          t3 = a32 * cos + a33 * sin;
4979          a13 = a12 * -sin + a13 * cos;
4980          a23 = a22 * -sin + a23 * cos;
4981          a33 = a32 * -sin + a33 * cos;
4982          a43 = a42 * -sin + a43 * cos;
4983          a12 = t1;
4984          a22 = t2;
4985          a32 = t3;
4986        }
4987
4988        angle = _atan2(-c, a33);
4989        rotationY = angle * _RAD2DEG;
4990
4991        if (angle) {
4992          cos = Math.cos(-angle);
4993          sin = Math.sin(-angle);
4994          t1 = a * cos - a13 * sin;
4995          t2 = b * cos - a23 * sin;
4996          t3 = c * cos - a33 * sin;
4997          a43 = d * sin + a43 * cos;
4998          a = t1;
4999          b = t2;
5000          c = t3;
5001        }
5002
5003        angle = _atan2(b, a);
5004        rotation = angle * _RAD2DEG;
5005
5006        if (angle) {
5007          cos = Math.cos(angle);
5008          sin = Math.sin(angle);
5009          t1 = a * cos + b * sin;
5010          t2 = a12 * cos + a22 * sin;
5011          b = b * cos - a * sin;
5012          a22 = a22 * cos - a12 * sin;
5013          a = t1;
5014          a12 = t2;
5015        }
5016
5017        if (rotationX && Math.abs(rotationX) + Math.abs(rotation) > 359.9) {
5018          rotationX = rotation = 0;
5019          rotationY = 180 - rotationY;
5020        }
5021
5022        scaleX = _round(Math.sqrt(a * a + b * b + c * c));
5023        scaleY = _round(Math.sqrt(a22 * a22 + a32 * a32));
5024        angle = _atan2(a12, a22);
5025        skewX = Math.abs(angle) > 0.0002 ? angle * _RAD2DEG : 0;
5026        perspective = a43 ? 1 / (a43 < 0 ? -a43 : a43) : 0;
5027      }
5028
5029      if (cache.svg) {
5030        t1 = target.getAttribute("transform");
5031        cache.forceCSS = target.setAttribute("transform", "") || !_isNullTransform(_getComputedProperty(target, _transformProp));
5032        t1 && target.setAttribute("transform", t1);
5033      }
5034    }
5035
5036    if (Math.abs(skewX) > 90 && Math.abs(skewX) < 270) {
5037      if (invertedScaleX) {
5038        scaleX *= -1;
5039        skewX += rotation <= 0 ? 180 : -180;
5040        rotation += rotation <= 0 ? 180 : -180;
5041      } else {
5042        scaleY *= -1;
5043        skewX += skewX <= 0 ? 180 : -180;
5044      }
5045    }
5046
5047    uncache = uncache || cache.uncache;
5048    cache.x = x - ((cache.xPercent = x && (!uncache && cache.xPercent || (Math.round(target.offsetWidth / 2) === Math.round(-x) ? -50 : 0))) ? target.offsetWidth * cache.xPercent / 100 : 0) + px;
5049    cache.y = y - ((cache.yPercent = y && (!uncache && cache.yPercent || (Math.round(target.offsetHeight / 2) === Math.round(-y) ? -50 : 0))) ? target.offsetHeight * cache.yPercent / 100 : 0) + px;
5050    cache.z = z + px;
5051    cache.scaleX = _round(scaleX);
5052    cache.scaleY = _round(scaleY);
5053    cache.rotation = _round(rotation) + deg;
5054    cache.rotationX = _round(rotationX) + deg;
5055    cache.rotationY = _round(rotationY) + deg;
5056    cache.skewX = skewX + deg;
5057    cache.skewY = skewY + deg;
5058    cache.transformPerspective = perspective + px;
5059
5060    if (cache.zOrigin = parseFloat(origin.split(" ")[2]) || !uncache && cache.zOrigin || 0) {
5061      style[_transformOriginProp] = _firstTwoOnly(origin);
5062    }
5063
5064    cache.xOffset = cache.yOffset = 0;
5065    cache.force3D = _config.force3D;
5066    cache.renderTransform = cache.svg ? _renderSVGTransforms : _supports3D ? _renderCSSTransforms : _renderNon3DTransforms;
5067    cache.uncache = 0;
5068    return cache;
5069  },
5070      _firstTwoOnly = function _firstTwoOnly(value) {
5071    return (value = value.split(" "))[0] + " " + value[1];
5072  },
5073      _addPxTranslate = function _addPxTranslate(target, start, value) {
5074    var unit = getUnit(start);
5075    return _round(parseFloat(start) + parseFloat(_convertToUnit(target, "x", value + "px", unit))) + unit;
5076  },
5077      _renderNon3DTransforms = function _renderNon3DTransforms(ratio, cache) {
5078    cache.z = "0px";
5079    cache.rotationY = cache.rotationX = "0deg";
5080    cache.force3D = 0;
5081
5082    _renderCSSTransforms(ratio, cache);
5083  },
5084      _zeroDeg = "0deg",
5085      _zeroPx = "0px",
5086      _endParenthesis = ") ",
5087      _renderCSSTransforms = function _renderCSSTransforms(ratio, cache) {
5088    var _ref = cache || this,
5089        xPercent = _ref.xPercent,
5090        yPercent = _ref.yPercent,
5091        x = _ref.x,
5092        y = _ref.y,
5093        z = _ref.z,
5094        rotation = _ref.rotation,
5095        rotationY = _ref.rotationY,
5096        rotationX = _ref.rotationX,
5097        skewX = _ref.skewX,
5098        skewY = _ref.skewY,
5099        scaleX = _ref.scaleX,
5100        scaleY = _ref.scaleY,
5101        transformPerspective = _ref.transformPerspective,
5102        force3D = _ref.force3D,
5103        target = _ref.target,
5104        zOrigin = _ref.zOrigin,
5105        transforms = "",
5106        use3D = force3D === "auto" && ratio && ratio !== 1 || force3D === true;
5107
5108    if (zOrigin && (rotationX !== _zeroDeg || rotationY !== _zeroDeg)) {
5109      var angle = parseFloat(rotationY) * _DEG2RAD,
5110          a13 = Math.sin(angle),
5111          a33 = Math.cos(angle),
5112          cos;
5113
5114      angle = parseFloat(rotationX) * _DEG2RAD;
5115      cos = Math.cos(angle);
5116      x = _addPxTranslate(target, x, a13 * cos * -zOrigin);
5117      y = _addPxTranslate(target, y, -Math.sin(angle) * -zOrigin);
5118      z = _addPxTranslate(target, z, a33 * cos * -zOrigin + zOrigin);
5119    }
5120
5121    if (transformPerspective !== _zeroPx) {
5122      transforms += "perspective(" + transformPerspective + _endParenthesis;
5123    }
5124
5125    if (xPercent || yPercent) {
5126      transforms += "translate(" + xPercent + "%, " + yPercent + "%) ";
5127    }
5128
5129    if (use3D || x !== _zeroPx || y !== _zeroPx || z !== _zeroPx) {
5130      transforms += z !== _zeroPx || use3D ? "translate3d(" + x + ", " + y + ", " + z + ") " : "translate(" + x + ", " + y + _endParenthesis;
5131    }
5132
5133    if (rotation !== _zeroDeg) {
5134      transforms += "rotate(" + rotation + _endParenthesis;
5135    }
5136
5137    if (rotationY !== _zeroDeg) {
5138      transforms += "rotateY(" + rotationY + _endParenthesis;
5139    }
5140
5141    if (rotationX !== _zeroDeg) {
5142      transforms += "rotateX(" + rotationX + _endParenthesis;
5143    }
5144
5145    if (skewX !== _zeroDeg || skewY !== _zeroDeg) {
5146      transforms += "skew(" + skewX + ", " + skewY + _endParenthesis;
5147    }
5148
5149    if (scaleX !== 1 || scaleY !== 1) {
5150      transforms += "scale(" + scaleX + ", " + scaleY + _endParenthesis;
5151    }
5152
5153    target.style[_transformProp] = transforms || "translate(0, 0)";
5154  },
5155      _renderSVGTransforms = function _renderSVGTransforms(ratio, cache) {
5156    var _ref2 = cache || this,
5157        xPercent = _ref2.xPercent,
5158        yPercent = _ref2.yPercent,
5159        x = _ref2.x,
5160        y = _ref2.y,
5161        rotation = _ref2.rotation,
5162        skewX = _ref2.skewX,
5163        skewY = _ref2.skewY,
5164        scaleX = _ref2.scaleX,
5165        scaleY = _ref2.scaleY,
5166        target = _ref2.target,
5167        xOrigin = _ref2.xOrigin,
5168        yOrigin = _ref2.yOrigin,
5169        xOffset = _ref2.xOffset,
5170        yOffset = _ref2.yOffset,
5171        forceCSS = _ref2.forceCSS,
5172        tx = parseFloat(x),
5173        ty = parseFloat(y),
5174        a11,
5175        a21,
5176        a12,
5177        a22,
5178        temp;
5179
5180    rotation = parseFloat(rotation);
5181    skewX = parseFloat(skewX);
5182    skewY = parseFloat(skewY);
5183
5184    if (skewY) {
5185      skewY = parseFloat(skewY);
5186      skewX += skewY;
5187      rotation += skewY;
5188    }
5189
5190    if (rotation || skewX) {
5191      rotation *= _DEG2RAD;
5192      skewX *= _DEG2RAD;
5193      a11 = Math.cos(rotation) * scaleX;
5194      a21 = Math.sin(rotation) * scaleX;
5195      a12 = Math.sin(rotation - skewX) * -scaleY;
5196      a22 = Math.cos(rotation - skewX) * scaleY;
5197
5198      if (skewX) {
5199        skewY *= _DEG2RAD;
5200        temp = Math.tan(skewX - skewY);
5201        temp = Math.sqrt(1 + temp * temp);
5202        a12 *= temp;
5203        a22 *= temp;
5204
5205        if (skewY) {
5206          temp = Math.tan(skewY);
5207          temp = Math.sqrt(1 + temp * temp);
5208          a11 *= temp;
5209          a21 *= temp;
5210        }
5211      }
5212
5213      a11 = _round(a11);
5214      a21 = _round(a21);
5215      a12 = _round(a12);
5216      a22 = _round(a22);
5217    } else {
5218      a11 = scaleX;
5219      a22 = scaleY;
5220      a21 = a12 = 0;
5221    }
5222
5223    if (tx && !~(x + "").indexOf("px") || ty && !~(y + "").indexOf("px")) {
5224      tx = _convertToUnit(target, "x", x, "px");
5225      ty = _convertToUnit(target, "y", y, "px");
5226    }
5227
5228    if (xOrigin || yOrigin || xOffset || yOffset) {
5229      tx = _round(tx + xOrigin - (xOrigin * a11 + yOrigin * a12) + xOffset);
5230      ty = _round(ty + yOrigin - (xOrigin * a21 + yOrigin * a22) + yOffset);
5231    }
5232
5233    if (xPercent || yPercent) {
5234      temp = target.getBBox();
5235      tx = _round(tx + xPercent / 100 * temp.width);
5236      ty = _round(ty + yPercent / 100 * temp.height);
5237    }
5238
5239    temp = "matrix(" + a11 + "," + a21 + "," + a12 + "," + a22 + "," + tx + "," + ty + ")";
5240    target.setAttribute("transform", temp);
5241    forceCSS && (target.style[_transformProp] = temp);
5242  },
5243      _addRotationalPropTween = function _addRotationalPropTween(plugin, target, property, startNum, endValue) {
5244    var cap = 360,
5245        isString = _isString(endValue),
5246        endNum = parseFloat(endValue) * (isString && ~endValue.indexOf("rad") ? _RAD2DEG : 1),
5247        change = endNum - startNum,
5248        finalValue = startNum + change + "deg",
5249        direction,
5250        pt;
5251
5252    if (isString) {
5253      direction = endValue.split("_")[1];
5254
5255      if (direction === "short") {
5256        change %= cap;
5257
5258        if (change !== change % (cap / 2)) {
5259          change += change < 0 ? cap : -cap;
5260        }
5261      }
5262
5263      if (direction === "cw" && change < 0) {
5264        change = (change + cap * _bigNum$1) % cap - ~~(change / cap) * cap;
5265      } else if (direction === "ccw" && change > 0) {
5266        change = (change - cap * _bigNum$1) % cap - ~~(change / cap) * cap;
5267      }
5268    }
5269
5270    plugin._pt = pt = new PropTween(plugin._pt, target, property, startNum, change, _renderPropWithEnd);
5271    pt.e = finalValue;
5272    pt.u = "deg";
5273
5274    plugin._props.push(property);
5275
5276    return pt;
5277  },
5278      _assign = function _assign(target, source) {
5279    for (var p in source) {
5280      target[p] = source[p];
5281    }
5282
5283    return target;
5284  },
5285      _addRawTransformPTs = function _addRawTransformPTs(plugin, transforms, target) {
5286    var startCache = _assign({}, target._gsap),
5287        exclude = "perspective,force3D,transformOrigin,svgOrigin",
5288        style = target.style,
5289        endCache,
5290        p,
5291        startValue,
5292        endValue,
5293        startNum,
5294        endNum,
5295        startUnit,
5296        endUnit;
5297
5298    if (startCache.svg) {
5299      startValue = target.getAttribute("transform");
5300      target.setAttribute("transform", "");
5301      style[_transformProp] = transforms;
5302      endCache = _parseTransform(target, 1);
5303
5304      _removeProperty(target, _transformProp);
5305
5306      target.setAttribute("transform", startValue);
5307    } else {
5308      startValue = getComputedStyle(target)[_transformProp];
5309      style[_transformProp] = transforms;
5310      endCache = _parseTransform(target, 1);
5311      style[_transformProp] = startValue;
5312    }
5313
5314    for (p in _transformProps) {
5315      startValue = startCache[p];
5316      endValue = endCache[p];
5317
5318      if (startValue !== endValue && exclude.indexOf(p) < 0) {
5319        startUnit = getUnit(startValue);
5320        endUnit = getUnit(endValue);
5321        startNum = startUnit !== endUnit ? _convertToUnit(target, p, startValue, endUnit) : parseFloat(startValue);
5322        endNum = parseFloat(endValue);
5323        plugin._pt = new PropTween(plugin._pt, endCache, p, startNum, endNum - startNum, _renderCSSProp);
5324        plugin._pt.u = endUnit || 0;
5325
5326        plugin._props.push(p);
5327      }
5328    }
5329
5330    _assign(endCache, startCache);
5331  };
5332
5333  _forEachName("padding,margin,Width,Radius", function (name, index) {
5334    var t = "Top",
5335        r = "Right",
5336        b = "Bottom",
5337        l = "Left",
5338        props = (index < 3 ? [t, r, b, l] : [t + l, t + r, b + r, b + l]).map(function (side) {
5339      return index < 2 ? name + side : "border" + side + name;
5340    });
5341
5342    _specialProps[index > 1 ? "border" + name : name] = function (plugin, target, property, endValue, tween) {
5343      var a, vars;
5344
5345      if (arguments.length < 4) {
5346        a = props.map(function (prop) {
5347          return _get(plugin, prop, property);
5348        });
5349        vars = a.join(" ");
5350        return vars.split(a[0]).length === 5 ? a[0] : vars;
5351      }
5352
5353      a = (endValue + "").split(" ");
5354      vars = {};
5355      props.forEach(function (prop, i) {
5356        return vars[prop] = a[i] = a[i] || a[(i - 1) / 2 | 0];
5357      });
5358      plugin.init(target, vars, tween);
5359    };
5360  });
5361
5362  var CSSPlugin = {
5363    name: "css",
5364    register: _initCore,
5365    targetTest: function targetTest(target) {
5366      return target.style && target.nodeType;
5367    },
5368    init: function init(target, vars, tween, index, targets) {
5369      var props = this._props,
5370          style = target.style,
5371          startAt = tween.vars.startAt,
5372          startValue,
5373          endValue,
5374          endNum,
5375          startNum,
5376          type,
5377          specialProp,
5378          p,
5379          startUnit,
5380          endUnit,
5381          relative,
5382          isTransformRelated,
5383          transformPropTween,
5384          cache,
5385          smooth,
5386          hasPriority,
5387          inlineProps
vendor: 8,025 bytes, lines 5387-5574
5387;
5388      _pluginInitted || _initCore();
5389      this.styles = this.styles || _getStyleSaver(target);
5390      inlineProps = this.styles.props;
5391      this.tween = tween;
5392
5393      for (p in vars) {
5394        if (p === "autoRound") {
5395          continue;
5396        }
5397
5398        endValue = vars[p];
5399
5400        if (_plugins[p] && _checkPlugin(p, vars, tween, index, target, targets)) {
5401          continue;
5402        }
5403
5404        type = typeof endValue;
5405        specialProp = _specialProps[p];
5406
5407        if (type === "function") {
5408          endValue = endValue.call(tween, index, target, targets);
5409          type = typeof endValue;
5410        }
5411
5412        if (type === "string" && ~endValue.indexOf("random(")) {
5413          endValue = _replaceRandom(endValue);
5414        }
5415
5416        if (specialProp) {
5417          specialProp(this, target, p, endValue, tween) && (hasPriority = 1);
5418        } else if (p.substr(0, 2) === "--") {
5419          startValue = (getComputedStyle(target).getPropertyValue(p) + "").trim();
5420          endValue += "";
5421          _colorExp.lastIndex = 0;
5422
5423          if (!_colorExp.test(startValue)) {
5424            startUnit = getUnit(startValue);
5425            endUnit = getUnit(endValue);
5426          }
5427
5428          endUnit ? startUnit !== endUnit && (startValue = _convertToUnit(target, p, startValue, endUnit) + endUnit) : startUnit && (endValue += startUnit);
5429          this.add(style, "setProperty", startValue, endValue, index, targets, 0, 0, p);
5430          props.push(p);
5431          inlineProps.push(p, 0, style[p]);
5432        } else if (type !== "undefined") {
5433          if (startAt && p in startAt) {
5434            startValue = typeof startAt[p] === "function" ? startAt[p].call(tween, index, target, targets) : startAt[p];
5435            _isString(startValue) && ~startValue.indexOf("random(") && (startValue = _replaceRandom(startValue));
5436            getUnit(startValue + "") || startValue === "auto" || (startValue += _config.units[p] || getUnit(_get(target, p)) || "");
5437            (startValue + "").charAt(1) === "=" && (startValue = _get(target, p));
5438          } else {
5439            startValue = _get(target, p);
5440          }
5441
5442          startNum = parseFloat(startValue);
5443          relative = type === "string" && endValue.charAt(1) === "=" && endValue.substr(0, 2);
5444          relative && (endValue = endValue.substr(2));
5445          endNum = parseFloat(endValue);
5446
5447          if (p in _propertyAliases) {
5448            if (p === "autoAlpha") {
5449              if (startNum === 1 && _get(target, "visibility") === "hidden" && endNum) {
5450                startNum = 0;
5451              }
5452
5453              inlineProps.push("visibility", 0, style.visibility);
5454
5455              _addNonTweeningPT(this, style, "visibility", startNum ? "inherit" : "hidden", endNum ? "inherit" : "hidden", !endNum);
5456            }
5457
5458            if (p !== "scale" && p !== "transform") {
5459              p = _propertyAliases[p];
5460              ~p.indexOf(",") && (p = p.split(",")[0]);
5461            }
5462          }
5463
5464          isTransformRelated = p in _transformProps;
5465
5466          if (isTransformRelated) {
5467            this.styles.save(p);
5468
5469            if (!transformPropTween) {
5470              cache = target._gsap;
5471              cache.renderTransform && !vars.parseTransform || _parseTransform(target, vars.parseTransform);
5472              smooth = vars.smoothOrigin !== false && cache.smooth;
5473              transformPropTween = this._pt = new PropTween(this._pt, style, _transformProp, 0, 1, cache.renderTransform, cache, 0, -1);
5474              transformPropTween.dep = 1;
5475            }
5476
5477            if (p === "scale") {
5478              this._pt = new PropTween(this._pt, cache, "scaleY", cache.scaleY, (relative ? _parseRelative(cache.scaleY, relative + endNum) : endNum) - cache.scaleY || 0, _renderCSSProp);
5479              this._pt.u = 0;
5480              props.push("scaleY", p);
5481              p += "X";
5482            } else if (p === "transformOrigin") {
5483              inlineProps.push(_transformOriginProp, 0, style[_transformOriginProp]);
5484              endValue = _convertKeywordsToPercentages(endValue);
5485
5486              if (cache.svg) {
5487                _applySVGOrigin(target, endValue, 0, smooth, 0, this);
5488              } else {
5489                endUnit = parseFloat(endValue.split(" ")[2]) || 0;
5490                endUnit !== cache.zOrigin && _addNonTweeningPT(this, cache, "zOrigin", cache.zOrigin, endUnit);
5491
5492                _addNonTweeningPT(this, style, p, _firstTwoOnly(startValue), _firstTwoOnly(endValue));
5493              }
5494
5495              continue;
5496            } else if (p === "svgOrigin") {
5497              _applySVGOrigin(target, endValue, 1, smooth, 0, this);
5498
5499              continue;
5500            } else if (p in _rotationalProperties) {
5501              _addRotationalPropTween(this, cache, p, startNum, relative ? _parseRelative(startNum, relative + endValue) : endValue);
5502
5503              continue;
5504            } else if (p === "smoothOrigin") {
5505              _addNonTweeningPT(this, cache, "smooth", cache.smooth, endValue);
5506
5507              continue;
5508            } else if (p === "force3D") {
5509              cache[p] = endValue;
5510              continue;
5511            } else if (p === "transform") {
5512              _addRawTransformPTs(this, endValue, target);
5513
5514              continue;
5515            }
5516          } else if (!(p in style)) {
5517            p = _checkPropPrefix(p) || p;
5518          }
5519
5520          if (isTransformRelated || (endNum || endNum === 0) && (startNum || startNum === 0) && !_complexExp.test(endValue) && p in style) {
5521            startUnit = (startValue + "").substr((startNum + "").length);
5522            endNum || (endNum = 0);
5523            endUnit = getUnit(endValue) || (p in _config.units ? _config.units[p] : startUnit);
5524            startUnit !== endUnit && (startNum = _convertToUnit(target, p, startValue, endUnit));
5525            this._pt = new PropTween(this._pt, isTransformRelated ? cache : style, p, startNum, (relative ? _parseRelative(startNum, relative + endNum) : endNum) - startNum, !isTransformRelated && (endUnit === "px" || p === "zIndex") && vars.autoRound !== false ? _renderRoundedCSSProp : _renderCSSProp);
5526            this._pt.u = endUnit || 0;
5527
5528            if (startUnit !== endUnit && endUnit !== "%") {
5529              this._pt.b = startValue;
5530              this._pt.r = _renderCSSPropWithBeginning;
5531            }
5532          } else if (!(p in style)) {
5533            if (p in target) {
5534              this.add(target, p, startValue || target[p], relative ? relative + endValue : endValue, index, targets);
5535            } else if (p !== "parseTransform") {
5536              _missingPlugin(p, endValue);
5537
5538              continue;
5539            }
5540          } else {
5541            _tweenComplexCSSString.call(this, target, p, startValue, relative ? relative + endValue : endValue);
5542          }
5543
5544          isTransformRelated || (p in style ? inlineProps.push(p, 0, style[p]) : inlineProps.push(p, 1, startValue || target[p]));
5545          props.push(p);
5546        }
5547      }
5548
5549      hasPriority && _sortPropTweensByPriority(this);
5550    },
5551    render: function render(ratio, data) {
5552      if (data.tween._time || !_reverting$1()) {
5553        var pt = data._pt;
5554
5555        while (pt) {
5556          pt.r(ratio, pt.d);
5557          pt = pt._next;
5558        }
5559      } else {
5560        data.styles.revert();
5561      }
5562    },
5563    get: _get,
5564    aliases: _propertyAliases,
5565    getSetter: function getSetter(target, property, plugin) {
5566      var p = _propertyAliases[property];
5567      p && p.indexOf(",") < 0 && (property = p);
5568      return property in _transformProps && property !== _transformOriginProp && (target._gsap.x || _get(target, "x")) ? plugin && _recentSetterPlugin === plugin ? property === "scale" ? _setterScale : _setterTransform : (_recentSetterPlugin = plugin || {}) && (property === "scale" ? _setterScaleWithRender : _setterTransformWithRender) : target.style && !_isUndefined(target.style[property]) ? _setterCSSStyle : ~property.indexOf("-") ? _setterCSSProp : _getSetter(target, property);
5569    },
5570    core: {
5571      _removeProperty: _removeProperty,
5572      _getMatrix: _getMatrix
5573    }
5574  };
vendor: 2,267 bytes, lines 5575-5633
5575  gsap.utils.checkPrefix = _checkPropPrefix;
5576  gsap.core.getStyleSaver = _getStyleSaver;
5577
5578  (function (positionAndScale, rotation, others, aliases) {
5579    var all = _forEachName(positionAndScale + "," + rotation + "," + others, function (name) {
5580      _transformProps[name] = 1;
5581    });
5582
5583    _forEachName(rotation, function (name) {
5584      _config.units[name] = "deg";
5585      _rotationalProperties[name] = 1;
5586    });
5587
5588    _propertyAliases[all[13]] = positionAndScale + "," + rotation;
5589
5590    _forEachName(aliases, function (name) {
5591      var split = name.split(":");
5592      _propertyAliases[split[1]] = all[split[0]];
5593    });
5594  })("x,y,z,scale,scaleX,scaleY,xPercent,yPercent", "rotation,rotationX,rotationY,skewX,skewY", "transform,transformOrigin,svgOrigin,force3D,smoothOrigin,transformPerspective", "0:translateX,1:translateY,2:translateZ,8:rotate,8:rotationZ,8:rotateZ,9:rotateX,10:rotateY");
5595
5596  _forEachName("x,y,z,top,right,bottom,left,width,height,fontSize,padding,margin,perspective", function (name) {
5597    _config.units[name] = "px";
5598  });
5599
5600  gsap.registerPlugin(CSSPlugin);
5601
5602  var _svgPathExp = /[achlmqstvz]|(-?\d*\.?\d*(?:e[\-+]?\d+)?)[0-9]/ig,
5603      _numbersExp = /(?:(-)?\d*\.?\d*(?:e[\-+]?\d+)?)[0-9]/ig,
5604      _scientific = /[\+\-]?\d*\.?\d+e[\+\-]?\d+/ig,
5605      _selectorExp = /(^[#\.][a-z]|[a-y][a-z])/i,
5606      _DEG2RAD$1 = Math.PI / 180,
5607      _RAD2DEG$1 = 180 / Math.PI,
5608      _sin$1 = Math.sin,
5609      _cos$1 = Math.cos,
5610      _abs = Math.abs,
5611      _sqrt$1 = Math.sqrt,
5612      _atan2$1 = Math.atan2,
5613      _largeNum = 1e8,
5614      _isString$1 = function _isString(value) {
5615    return typeof value === "string";
5616  },
5617      _isNumber$1 = function _isNumber(value) {
5618    return typeof value === "number";
5619  },
5620      _isUndefined$1 = function _isUndefined(value) {
5621    return typeof value === "undefined";
5622  },
5623      _temp = {},
5624      _temp2 = {},
5625      _roundingNum = 1e5,
5626      _wrapProgress = function _wrapProgress(progress) {
5627    return Math.round((progress + _largeNum) % 1 * _roundingNum) / _roundingNum || (progress < 0 ? 0 : 1);
5628  },
5629      _round$1 = function _round(value) {
5630    return Math.round(value * _roundingNum) / _roundingNum || 0;
5631  },
5632      _roundPrecise$1 = function _roundPrecise(value) {
5633    return Math.round(value * 1e10) / 1e10 || 0
vendor: 12,714 bytes, lines 5633-6097
5633;
5634  },
5635      _splitSegment = function _splitSegment(rawPath, segIndex, i, t) {
5636    var segment = rawPath[segIndex],
5637        shift = t === 1 ? 6 : subdivideSegment(segment, i, t);
5638
5639    if ((shift || !t) && shift + i + 2 < segment.length) {
5640      rawPath.splice(segIndex, 0, segment.slice(0, i + shift + 2));
5641      segment.splice(0, i + shift);
5642      return 1;
5643    }
5644  },
5645      _getSampleIndex = function _getSampleIndex(samples, length, progress) {
5646    var l = samples.length,
5647        i = ~~(progress * l);
5648
5649    if (samples[i] > length) {
5650      while (--i && samples[i] > length) {}
5651
5652      i < 0 && (i = 0);
5653    } else {
5654      while (samples[++i] < length && i < l) {}
5655    }
5656
5657    return i < l ? i : l - 1;
5658  },
5659      _reverseRawPath = function _reverseRawPath(rawPath, skipOuter) {
5660    var i = rawPath.length;
5661    skipOuter || rawPath.reverse();
5662
5663    while (i--) {
5664      rawPath[i].reversed || reverseSegment(rawPath[i]);
5665    }
5666  },
5667      _copyMetaData = function _copyMetaData(source, copy) {
5668    copy.totalLength = source.totalLength;
5669
5670    if (source.samples) {
5671      copy.samples = source.samples.slice(0);
5672      copy.lookup = source.lookup.slice(0);
5673      copy.minLength = source.minLength;
5674      copy.resolution = source.resolution;
5675    } else if (source.totalPoints) {
5676      copy.totalPoints = source.totalPoints;
5677    }
5678
5679    return copy;
5680  },
5681      _appendOrMerge = function _appendOrMerge(rawPath, segment) {
5682    var index = rawPath.length,
5683        prevSeg = rawPath[index - 1] || [],
5684        l = prevSeg.length;
5685
5686    if (index && segment[0] === prevSeg[l - 2] && segment[1] === prevSeg[l - 1]) {
5687      segment = prevSeg.concat(segment.slice(2));
5688      index--;
5689    }
5690
5691    rawPath[index] = segment;
5692  },
5693      _bestDistance;
5694
5695  function getRawPath(value) {
5696    value = _isString$1(value) && _selectorExp.test(value) ? document.querySelector(value) || value : value;
5697    var e = value.getAttribute ? value : 0,
5698        rawPath;
5699
5700    if (e && (value = value.getAttribute("d"))) {
5701      if (!e._gsPath) {
5702        e._gsPath = {};
5703      }
5704
5705      rawPath = e._gsPath[value];
5706      return rawPath && !rawPath._dirty ? rawPath : e._gsPath[value] = stringToRawPath(value);
5707    }
5708
5709    return !value ? console.warn("Expecting a <path> element or an SVG path data string") : _isString$1(value) ? stringToRawPath(value) : _isNumber$1(value[0]) ? [value] : value;
5710  }
5711  function copyRawPath(rawPath) {
5712    var a = [],
5713        i = 0;
5714
5715    for (; i < rawPath.length; i++) {
5716      a[i] = _copyMetaData(rawPath[i], rawPath[i].slice(0));
5717    }
5718
5719    return _copyMetaData(rawPath, a);
5720  }
5721  function reverseSegment(segment) {
5722    var i = 0,
5723        y;
5724    segment.reverse();
5725
5726    for (; i < segment.length; i += 2) {
5727      y = segment[i];
5728      segment[i] = segment[i + 1];
5729      segment[i + 1] = y;
5730    }
5731
5732    segment.reversed = !segment.reversed;
5733  }
5734
5735  var _createPath = function _createPath(e, ignore) {
5736    var path = document.createElementNS("http://www.w3.org/2000/svg", "path"),
5737        attr = [].slice.call(e.attributes),
5738        i = attr.length,
5739        name;
5740    ignore = "," + ignore + ",";
5741
5742    while (--i > -1) {
5743      name = attr[i].nodeName.toLowerCase();
5744
5745      if (ignore.indexOf("," + name + ",") < 0) {
5746        path.setAttributeNS(null, name, attr[i].nodeValue);
5747      }
5748    }
5749
5750    return path;
5751  },
5752      _typeAttrs = {
5753    rect: "rx,ry,x,y,width,height",
5754    circle: "r,cx,cy",
5755    ellipse: "rx,ry,cx,cy",
5756    line: "x1,x2,y1,y2"
5757  },
5758      _attrToObj = function _attrToObj(e, attrs) {
5759    var props = attrs ? attrs.split(",") : [],
5760        obj = {},
5761        i = props.length;
5762
5763    while (--i > -1) {
5764      obj[props[i]] = +e.getAttribute(props[i]) || 0;
5765    }
5766
5767    return obj;
5768  };
5769
5770  function convertToPath(element, swap) {
5771    var type = element.tagName.toLowerCase(),
5772        circ = 0.552284749831,
5773        data,
5774        x,
5775        y,
5776        r,
5777        ry,
5778        path,
5779        rcirc,
5780        rycirc,
5781        points,
5782        w,
5783        h,
5784        x2,
5785        x3,
5786        x4,
5787        x5,
5788        x6,
5789        y2,
5790        y3,
5791        y4,
5792        y5,
5793        y6,
5794        attr;
5795
5796    if (type === "path" || !element.getBBox) {
5797      return element;
5798    }
5799
5800    path = _createPath(element, "x,y,width,height,cx,cy,rx,ry,r,x1,x2,y1,y2,points");
5801    attr = _attrToObj(element, _typeAttrs[type]);
5802
5803    if (type === "rect") {
5804      r = attr.rx;
5805      ry = attr.ry || r;
5806      x = attr.x;
5807      y = attr.y;
5808      w = attr.width - r * 2;
5809      h = attr.height - ry * 2;
5810
5811      if (r || ry) {
5812        x2 = x + r * (1 - circ);
5813        x3 = x + r;
5814        x4 = x3 + w;
5815        x5 = x4 + r * circ;
5816        x6 = x4 + r;
5817        y2 = y + ry * (1 - circ);
5818        y3 = y + ry;
5819        y4 = y3 + h;
5820        y5 = y4 + ry * circ;
5821        y6 = y4 + ry;
5822        data = "M" + x6 + "," + y3 + " V" + y4 + " C" + [x6, y5, x5, y6, x4, y6, x4 - (x4 - x3) / 3, y6, x3 + (x4 - x3) / 3, y6, x3, y6, x2, y6, x, y5, x, y4, x, y4 - (y4 - y3) / 3, x, y3 + (y4 - y3) / 3, x, y3, x, y2, x2, y, x3, y, x3 + (x4 - x3) / 3, y, x4 - (x4 - x3) / 3, y, x4, y, x5, y, x6, y2, x6, y3].join(",") + "z";
5823      } else {
5824        data = "M" + (x + w) + "," + y + " v" + h + " h" + -w + " v" + -h + " h" + w + "z";
5825      }
5826    } else if (type === "circle" || type === "ellipse") {
5827      if (type === "circle") {
5828        r = ry = attr.r;
5829        rycirc = r * circ;
5830      } else {
5831        r = attr.rx;
5832        ry = attr.ry;
5833        rycirc = ry * circ;
5834      }
5835
5836      x = attr.cx;
5837      y = attr.cy;
5838      rcirc = r * circ;
5839      data = "M" + (x + r) + "," + y + " C" + [x + r, y + rycirc, x + rcirc, y + ry, x, y + ry, x - rcirc, y + ry, x - r, y + rycirc, x - r, y, x - r, y - rycirc, x - rcirc, y - ry, x, y - ry, x + rcirc, y - ry, x + r, y - rycirc, x + r, y].join(",") + "z";
5840    } else if (type === "line") {
5841      data = "M" + attr.x1 + "," + attr.y1 + " L" + attr.x2 + "," + attr.y2;
5842    } else if (type === "polyline" || type === "polygon") {
5843      points = (element.getAttribute("points") + "").match(_numbersExp) || [];
5844      x = points.shift();
5845      y = points.shift();
5846      data = "M" + x + "," + y + " L" + points.join(",");
5847
5848      if (type === "polygon") {
5849        data += "," + x + "," + y + "z";
5850      }
5851    }
5852
5853    path.setAttribute("d", rawPathToString(path._gsRawPath = stringToRawPath(data)));
5854
5855    if (swap && element.parentNode) {
5856      element.parentNode.insertBefore(path, element);
5857      element.parentNode.removeChild(element);
5858    }
5859
5860    return path;
5861  }
5862
5863  function getRotationAtBezierT(segment, i, t) {
5864    var a = segment[i],
5865        b = segment[i + 2],
5866        c = segment[i + 4],
5867        x;
5868    a += (b - a) * t;
5869    b += (c - b) * t;
5870    a += (b - a) * t;
5871    x = b + (c + (segment[i + 6] - c) * t - b) * t - a;
5872    a = segment[i + 1];
5873    b = segment[i + 3];
5874    c = segment[i + 5];
5875    a += (b - a) * t;
5876    b += (c - b) * t;
5877    a += (b - a) * t;
5878    return _round$1(_atan2$1(b + (c + (segment[i + 7] - c) * t - b) * t - a, x) * _RAD2DEG$1);
5879  }
5880
5881  function sliceRawPath(rawPath, start, end) {
5882    end = _isUndefined$1(end) ? 1 : _roundPrecise$1(end) || 0;
5883    start = _roundPrecise$1(start) || 0;
5884    var loops = Math.max(0, ~~(_abs(end - start) - 1e-8)),
5885        path = copyRawPath(rawPath);
5886
5887    if (start > end) {
5888      start = 1 - start;
5889      end = 1 - end;
5890
5891      _reverseRawPath(path);
5892
5893      path.totalLength = 0;
5894    }
5895
5896    if (start < 0 || end < 0) {
5897      var offset = Math.abs(~~Math.min(start, end)) + 1;
5898      start += offset;
5899      end += offset;
5900    }
5901
5902    path.totalLength || cacheRawPathMeasurements(path);
5903    var wrap = end > 1,
5904        s = getProgressData(path, start, _temp, true),
5905        e = getProgressData(path, end, _temp2),
5906        eSeg = e.segment,
5907        sSeg = s.segment,
5908        eSegIndex = e.segIndex,
5909        sSegIndex = s.segIndex,
5910        ei = e.i,
5911        si = s.i,
5912        sameSegment = sSegIndex === eSegIndex,
5913        sameBezier = ei === si && sameSegment,
5914        wrapsBehind,
5915        sShift,
5916        eShift,
5917        i,
5918        copy,
5919        totalSegments,
5920        l,
5921        j;
5922
5923    if (wrap || loops) {
5924      wrapsBehind = eSegIndex < sSegIndex || sameSegment && ei < si || sameBezier && e.t < s.t;
5925
5926      if (_splitSegment(path, sSegIndex, si, s.t)) {
5927        sSegIndex++;
5928
5929        if (!wrapsBehind) {
5930          eSegIndex++;
5931
5932          if (sameBezier) {
5933            e.t = (e.t - s.t) / (1 - s.t);
5934            ei = 0;
5935          } else if (sameSegment) {
5936            ei -= si;
5937          }
5938        }
5939      }
5940
5941      if (Math.abs(1 - (end - start)) < 1e-5) {
5942        eSegIndex = sSegIndex - 1;
5943      } else if (!e.t && eSegIndex) {
5944        eSegIndex--;
5945      } else if (_splitSegment(path, eSegIndex, ei, e.t) && wrapsBehind) {
5946        sSegIndex++;
5947      }
5948
5949      if (s.t === 1) {
5950        sSegIndex = (sSegIndex + 1) % path.length;
5951      }
5952
5953      copy = [];
5954      totalSegments = path.length;
5955      l = 1 + totalSegments * loops;
5956      j = sSegIndex;
5957      l += (totalSegments - sSegIndex + eSegIndex) % totalSegments;
5958
5959      for (i = 0; i < l; i++) {
5960        _appendOrMerge(copy, path[j++ % totalSegments]);
5961      }
5962
5963      path = copy;
5964    } else {
5965      eShift = e.t === 1 ? 6 : subdivideSegment(eSeg, ei, e.t);
5966
5967      if (start !== end) {
5968        sShift = subdivideSegment(sSeg, si, sameBezier ? s.t / e.t : s.t);
5969        sameSegment && (eShift += sShift);
5970        eSeg.splice(ei + eShift + 2);
5971        (sShift || si) && sSeg.splice(0, si + sShift);
5972        i = path.length;
5973
5974        while (i--) {
5975          (i < sSegIndex || i > eSegIndex) && path.splice(i, 1);
5976        }
5977      } else {
5978        eSeg.angle = getRotationAtBezierT(eSeg, ei + eShift, 0);
5979        ei += eShift;
5980        s = eSeg[ei];
5981        e = eSeg[ei + 1];
5982        eSeg.length = eSeg.totalLength = 0;
5983        eSeg.totalPoints = path.totalPoints = 8;
5984        eSeg.push(s, e, s, e, s, e, s, e);
5985      }
5986    }
5987
5988    path.totalLength = 0;
5989    return path;
5990  }
5991
5992  function measureSegment(segment, startIndex, bezierQty) {
5993    startIndex = startIndex || 0;
5994
5995    if (!segment.samples) {
5996      segment.samples = [];
5997      segment.lookup = [];
5998    }
5999
6000    var resolution = ~~segment.resolution || 12,
6001        inc = 1 / resolution,
6002        endIndex = bezierQty ? startIndex + bezierQty * 6 + 1 : segment.length,
6003        x1 = segment[startIndex],
6004        y1 = segment[startIndex + 1],
6005        samplesIndex = startIndex ? startIndex / 6 * resolution : 0,
6006        samples = segment.samples,
6007        lookup = segment.lookup,
6008        min = (startIndex ? segment.minLength : _largeNum) || _largeNum,
6009        prevLength = samples[samplesIndex + bezierQty * resolution - 1],
6010        length = startIndex ? samples[samplesIndex - 1] : 0,
6011        i,
6012        j,
6013        x4,
6014        x3,
6015        x2,
6016        xd,
6017        xd1,
6018        y4,
6019        y3,
6020        y2,
6021        yd,
6022        yd1,
6023        inv,
6024        t,
6025        lengthIndex,
6026        l,
6027        segLength;
6028    samples.length = lookup.length = 0;
6029
6030    for (j = startIndex + 2; j < endIndex; j += 6) {
6031      x4 = segment[j + 4] - x1;
6032      x3 = segment[j + 2] - x1;
6033      x2 = segment[j] - x1;
6034      y4 = segment[j + 5] - y1;
6035      y3 = segment[j + 3] - y1;
6036      y2 = segment[j + 1] - y1;
6037      xd = xd1 = yd = yd1 = 0;
6038
6039      if (_abs(x4) < .01 && _abs(y4) < .01 && _abs(x2) + _abs(y2) < .01) {
6040        if (segment.length > 8) {
6041          segment.splice(j, 6);
6042          j -= 6;
6043          endIndex -= 6;
6044        }
6045      } else {
6046        for (i = 1; i <= resolution; i++) {
6047          t = inc * i;
6048          inv = 1 - t;
6049          xd = xd1 - (xd1 = (t * t * x4 + 3 * inv * (t * x3 + inv * x2)) * t);
6050          yd = yd1 - (yd1 = (t * t * y4 + 3 * inv * (t * y3 + inv * y2)) * t);
6051          l = _sqrt$1(yd * yd + xd * xd);
6052
6053          if (l < min) {
6054            min = l;
6055          }
6056
6057          length += l;
6058          samples[samplesIndex++] = length;
6059        }
6060      }
6061
6062      x1 += x4;
6063      y1 += y4;
6064    }
6065
6066    if (prevLength) {
6067      prevLength -= length;
6068
6069      for (; samplesIndex < samples.length; samplesIndex++) {
6070        samples[samplesIndex] += prevLength;
6071      }
6072    }
6073
6074    if (samples.length && min) {
6075      segment.totalLength = segLength = samples[samples.length - 1] || 0;
6076      segment.minLength = min;
6077
6078      if (segLength / min < 9999) {
6079        l = lengthIndex = 0;
6080
6081        for (i = 0; i < segLength; i += min) {
6082          lookup[l++] = samples[lengthIndex] < i ? ++lengthIndex : lengthIndex;
6083        }
6084      }
6085    } else {
6086      segment.totalLength = samples[0] = 0;
6087    }
6088
6089    return startIndex ? length - samples[startIndex / 2 - 1] : length;
6090  }
6091
6092  function cacheRawPathMeasurements(rawPath, resolution) {
6093    var pathLength, points, i;
6094
6095    for (i = pathLength = points = 0; i < rawPath.length; i++) {
6096      rawPath[i].resolution = ~~resolution || 12;
6097      p
vendor: 3,989 bytes, lines 6097-6241
6097oints += rawPath[i].length;
6098      pathLength += measureSegment(rawPath[i]);
6099    }
6100
6101    rawPath.totalPoints = points;
6102    rawPath.totalLength = pathLength;
6103    return rawPath;
6104  }
6105  function subdivideSegment(segment, i, t) {
6106    if (t <= 0 || t >= 1) {
6107      return 0;
6108    }
6109
6110    var ax = segment[i],
6111        ay = segment[i + 1],
6112        cp1x = segment[i + 2],
6113        cp1y = segment[i + 3],
6114        cp2x = segment[i + 4],
6115        cp2y = segment[i + 5],
6116        bx = segment[i + 6],
6117        by = segment[i + 7],
6118        x1a = ax + (cp1x - ax) * t,
6119        x2 = cp1x + (cp2x - cp1x) * t,
6120        y1a = ay + (cp1y - ay) * t,
6121        y2 = cp1y + (cp2y - cp1y) * t,
6122        x1 = x1a + (x2 - x1a) * t,
6123        y1 = y1a + (y2 - y1a) * t,
6124        x2a = cp2x + (bx - cp2x) * t,
6125        y2a = cp2y + (by - cp2y) * t;
6126    x2 += (x2a - x2) * t;
6127    y2 += (y2a - y2) * t;
6128    segment.splice(i + 2, 4, _round$1(x1a), _round$1(y1a), _round$1(x1), _round$1(y1), _round$1(x1 + (x2 - x1) * t), _round$1(y1 + (y2 - y1) * t), _round$1(x2), _round$1(y2), _round$1(x2a), _round$1(y2a));
6129    segment.samples && segment.samples.splice(i / 6 * segment.resolution | 0, 0, 0, 0, 0, 0, 0, 0);
6130    return 6;
6131  }
6132
6133  function getProgressData(rawPath, progress, decoratee, pushToNextIfAtEnd) {
6134    decoratee = decoratee || {};
6135    rawPath.totalLength || cacheRawPathMeasurements(rawPath);
6136
6137    if (progress < 0 || progress > 1) {
6138      progress = _wrapProgress(progress);
6139    }
6140
6141    var segIndex = 0,
6142        segment = rawPath[0],
6143        samples,
6144        resolution,
6145        length,
6146        min,
6147        max,
6148        i,
6149        t;
6150
6151    if (!progress) {
6152      t = i = segIndex = 0;
6153      segment = rawPath[0];
6154    } else if (progress === 1) {
6155      t = 1;
6156      segIndex = rawPath.length - 1;
6157      segment = rawPath[segIndex];
6158      i = segment.length - 8;
6159    } else {
6160      if (rawPath.length > 1) {
6161        length = rawPath.totalLength * progress;
6162        max = i = 0;
6163
6164        while ((max += rawPath[i++].totalLength) < length) {
6165          segIndex = i;
6166        }
6167
6168        segment = rawPath[segIndex];
6169        min = max - segment.totalLength;
6170        progress = (length - min) / (max - min) || 0;
6171      }
6172
6173      samples = segment.samples;
6174      resolution = segment.resolution;
6175      length = segment.totalLength * progress;
6176      i = segment.lookup.length ? segment.lookup[~~(length / segment.minLength)] || 0 : _getSampleIndex(samples, length, progress);
6177      min = i ? samples[i - 1] : 0;
6178      max = samples[i];
6179
6180      if (max < length) {
6181        min = max;
6182        max = samples[++i];
6183      }
6184
6185      t = 1 / resolution * ((length - min) / (max - min) + i % resolution);
6186      i = ~~(i / resolution) * 6;
6187
6188      if (pushToNextIfAtEnd && t === 1) {
6189        if (i + 6 < segment.length) {
6190          i += 6;
6191          t = 0;
6192        } else if (segIndex + 1 < rawPath.length) {
6193          i = t = 0;
6194          segment = rawPath[++segIndex];
6195        }
6196      }
6197    }
6198
6199    decoratee.t = t;
6200    decoratee.i = i;
6201    decoratee.path = rawPath;
6202    decoratee.segment = segment;
6203    decoratee.segIndex = segIndex;
6204    return decoratee;
6205  }
6206
6207  function getPositionOnPath(rawPath, progress, includeAngle, point) {
6208    var segment = rawPath[0],
6209        result = point || {},
6210        samples,
6211        resolution,
6212        length,
6213        min,
6214        max,
6215        i,
6216        t,
6217        a,
6218        inv;
6219
6220    if (progress < 0 || progress > 1) {
6221      progress = _wrapProgress(progress);
6222    }
6223
6224    segment.lookup || cacheRawPathMeasurements(rawPath);
6225
6226    if (rawPath.length > 1) {
6227      length = rawPath.totalLength * progress;
6228      max = i = 0;
6229
6230      while ((max += rawPath[i++].totalLength) < length) {
6231        segment = rawPath[i];
6232      }
6233
6234      min = max - segment.totalLength;
6235      progress = (length - min) / (max - min) || 0;
6236    }
6237
6238    samples = segment.samples;
6239    resolution = segment.resolution;
6240    length = segment.totalLength * progress;
6241    i = segment.lookup.length ? segment.lookup[progress < 1 ? ~~(length / 
vendor: 16,896 bytes, lines 6241-6857
6241segment.minLength) : segment.lookup.length - 1] || 0 : _getSampleIndex(samples, length, progress);
6242    min = i ? samples[i - 1] : 0;
6243    max = samples[i];
6244
6245    if (max < length) {
6246      min = max;
6247      max = samples[++i];
6248    }
6249
6250    t = 1 / resolution * ((length - min) / (max - min) + i % resolution) || 0;
6251    inv = 1 - t;
6252    i = ~~(i / resolution) * 6;
6253    a = segment[i];
6254    result.x = _round$1((t * t * (segment[i + 6] - a) + 3 * inv * (t * (segment[i + 4] - a) + inv * (segment[i + 2] - a))) * t + a);
6255    result.y = _round$1((t * t * (segment[i + 7] - (a = segment[i + 1])) + 3 * inv * (t * (segment[i + 5] - a) + inv * (segment[i + 3] - a))) * t + a);
6256
6257    if (includeAngle) {
6258      result.angle = segment.totalLength ? getRotationAtBezierT(segment, i, t >= 1 ? 1 - 1e-9 : t ? t : 1e-9) : segment.angle || 0;
6259    }
6260
6261    return result;
6262  }
6263  function transformRawPath(rawPath, a, b, c, d, tx, ty) {
6264    var j = rawPath.length,
6265        segment,
6266        l,
6267        i,
6268        x,
6269        y;
6270
6271    while (--j > -1) {
6272      segment = rawPath[j];
6273      l = segment.length;
6274
6275      for (i = 0; i < l; i += 2) {
6276        x = segment[i];
6277        y = segment[i + 1];
6278        segment[i] = x * a + y * c + tx;
6279        segment[i + 1] = x * b + y * d + ty;
6280      }
6281    }
6282
6283    rawPath._dirty = 1;
6284    return rawPath;
6285  }
6286
6287  function arcToSegment(lastX, lastY, rx, ry, angle, largeArcFlag, sweepFlag, x, y) {
6288    if (lastX === x && lastY === y) {
6289      return;
6290    }
6291
6292    rx = _abs(rx);
6293    ry = _abs(ry);
6294
6295    var angleRad = angle % 360 * _DEG2RAD$1,
6296        cosAngle = _cos$1(angleRad),
6297        sinAngle = _sin$1(angleRad),
6298        PI = Math.PI,
6299        TWOPI = PI * 2,
6300        dx2 = (lastX - x) / 2,
6301        dy2 = (lastY - y) / 2,
6302        x1 = cosAngle * dx2 + sinAngle * dy2,
6303        y1 = -sinAngle * dx2 + cosAngle * dy2,
6304        x1_sq = x1 * x1,
6305        y1_sq = y1 * y1,
6306        radiiCheck = x1_sq / (rx * rx) + y1_sq / (ry * ry);
6307
6308    if (radiiCheck > 1) {
6309      rx = _sqrt$1(radiiCheck) * rx;
6310      ry = _sqrt$1(radiiCheck) * ry;
6311    }
6312
6313    var rx_sq = rx * rx,
6314        ry_sq = ry * ry,
6315        sq = (rx_sq * ry_sq - rx_sq * y1_sq - ry_sq * x1_sq) / (rx_sq * y1_sq + ry_sq * x1_sq);
6316
6317    if (sq < 0) {
6318      sq = 0;
6319    }
6320
6321    var coef = (largeArcFlag === sweepFlag ? -1 : 1) * _sqrt$1(sq),
6322        cx1 = coef * (rx * y1 / ry),
6323        cy1 = coef * -(ry * x1 / rx),
6324        sx2 = (lastX + x) / 2,
6325        sy2 = (lastY + y) / 2,
6326        cx = sx2 + (cosAngle * cx1 - sinAngle * cy1),
6327        cy = sy2 + (sinAngle * cx1 + cosAngle * cy1),
6328        ux = (x1 - cx1) / rx,
6329        uy = (y1 - cy1) / ry,
6330        vx = (-x1 - cx1) / rx,
6331        vy = (-y1 - cy1) / ry,
6332        temp = ux * ux + uy * uy,
6333        angleStart = (uy < 0 ? -1 : 1) * Math.acos(ux / _sqrt$1(temp)),
6334        angleExtent = (ux * vy - uy * vx < 0 ? -1 : 1) * Math.acos((ux * vx + uy * vy) / _sqrt$1(temp * (vx * vx + vy * vy)));
6335
6336    isNaN(angleExtent) && (angleExtent = PI);
6337
6338    if (!sweepFlag && angleExtent > 0) {
6339      angleExtent -= TWOPI;
6340    } else if (sweepFlag && angleExtent < 0) {
6341      angleExtent += TWOPI;
6342    }
6343
6344    angleStart %= TWOPI;
6345    angleExtent %= TWOPI;
6346
6347    var segments = Math.ceil(_abs(angleExtent) / (TWOPI / 4)),
6348        rawPath = [],
6349        angleIncrement = angleExtent / segments,
6350        controlLength = 4 / 3 * _sin$1(angleIncrement / 2) / (1 + _cos$1(angleIncrement / 2)),
6351        ma = cosAngle * rx,
6352        mb = sinAngle * rx,
6353        mc = sinAngle * -ry,
6354        md = cosAngle * ry,
6355        i;
6356
6357    for (i = 0; i < segments; i++) {
6358      angle = angleStart + i * angleIncrement;
6359      x1 = _cos$1(angle);
6360      y1 = _sin$1(angle);
6361      ux = _cos$1(angle += angleIncrement);
6362      uy = _sin$1(angle);
6363      rawPath.push(x1 - controlLength * y1, y1 + controlLength * x1, ux + controlLength * uy, uy - controlLength * ux, ux, uy);
6364    }
6365
6366    for (i = 0; i < rawPath.length; i += 2) {
6367      x1 = rawPath[i];
6368      y1 = rawPath[i + 1];
6369      rawPath[i] = x1 * ma + y1 * mc + cx;
6370      rawPath[i + 1] = x1 * mb + y1 * md + cy;
6371    }
6372
6373    rawPath[i - 2] = x;
6374    rawPath[i - 1] = y;
6375    return rawPath;
6376  }
6377
6378  function stringToRawPath(d) {
6379    var a = (d + "").replace(_scientific, function (m) {
6380      var n = +m;
6381      return n < 0.0001 && n > -0.0001 ? 0 : n;
6382    }).match(_svgPathExp) || [],
6383        path = [],
6384        relativeX = 0,
6385        relativeY = 0,
6386        twoThirds = 2 / 3,
6387        elements = a.length,
6388        points = 0,
6389        errorMessage = "ERROR: malformed path: " + d,
6390        i,
6391        j,
6392        x,
6393        y,
6394        command,
6395        isRelative,
6396        segment,
6397        startX,
6398        startY,
6399        difX,
6400        difY,
6401        beziers,
6402        prevCommand,
6403        flag1,
6404        flag2,
6405        line = function line(sx, sy, ex, ey) {
6406      difX = (ex - sx) / 3;
6407      difY = (ey - sy) / 3;
6408      segment.push(sx + difX, sy + difY, ex - difX, ey - difY, ex, ey);
6409    };
6410
6411    if (!d || !isNaN(a[0]) || isNaN(a[1])) {
6412      console.log(errorMessage);
6413      return path;
6414    }
6415
6416    for (i = 0; i < elements; i++) {
6417      prevCommand = command;
6418
6419      if (isNaN(a[i])) {
6420        command = a[i].toUpperCase();
6421        isRelative = command !== a[i];
6422      } else {
6423        i--;
6424      }
6425
6426      x = +a[i + 1];
6427      y = +a[i + 2];
6428
6429      if (isRelative) {
6430        x += relativeX;
6431        y += relativeY;
6432      }
6433
6434      if (!i) {
6435        startX = x;
6436        startY = y;
6437      }
6438
6439      if (command === "M") {
6440        if (segment) {
6441          if (segment.length < 8) {
6442            path.length -= 1;
6443          } else {
6444            points += segment.length;
6445          }
6446        }
6447
6448        relativeX = startX = x;
6449        relativeY = startY = y;
6450        segment = [x, y];
6451        path.push(segment);
6452        i += 2;
6453        command = "L";
6454      } else if (command === "C") {
6455        if (!segment) {
6456          segment = [0, 0];
6457        }
6458
6459        if (!isRelative) {
6460          relativeX = relativeY = 0;
6461        }
6462
6463        segment.push(x, y, relativeX + a[i + 3] * 1, relativeY + a[i + 4] * 1, relativeX += a[i + 5] * 1, relativeY += a[i + 6] * 1);
6464        i += 6;
6465      } else if (command === "S") {
6466        difX = relativeX;
6467        difY = relativeY;
6468
6469        if (prevCommand === "C" || prevCommand === "S") {
6470          difX += relativeX - segment[segment.length - 4];
6471          difY += relativeY - segment[segment.length - 3];
6472        }
6473
6474        if (!isRelative) {
6475          relativeX = relativeY = 0;
6476        }
6477
6478        segment.push(difX, difY, x, y, relativeX += a[i + 3] * 1, relativeY += a[i + 4] * 1);
6479        i += 4;
6480      } else if (command === "Q") {
6481        difX = relativeX + (x - relativeX) * twoThirds;
6482        difY = relativeY + (y - relativeY) * twoThirds;
6483
6484        if (!isRelative) {
6485          relativeX = relativeY = 0;
6486        }
6487
6488        relativeX += a[i + 3] * 1;
6489        relativeY += a[i + 4] * 1;
6490        segment.push(difX, difY, relativeX + (x - relativeX) * twoThirds, relativeY + (y - relativeY) * twoThirds, relativeX, relativeY);
6491        i += 4;
6492      } else if (command === "T") {
6493        difX = relativeX - segment[segment.length - 4];
6494        difY = relativeY - segment[segment.length - 3];
6495        segment.push(relativeX + difX, relativeY + difY, x + (relativeX + difX * 1.5 - x) * twoThirds, y + (relativeY + difY * 1.5 - y) * twoThirds, relativeX = x, relativeY = y);
6496        i += 2;
6497      } else if (command === "H") {
6498        line(relativeX, relativeY, relativeX = x, relativeY);
6499        i += 1;
6500      } else if (command === "V") {
6501        line(relativeX, relativeY, relativeX, relativeY = x + (isRelative ? relativeY - relativeX : 0));
6502        i += 1;
6503      } else if (command === "L" || command === "Z") {
6504        if (command === "Z") {
6505          x = startX;
6506          y = startY;
6507          segment.closed = true;
6508        }
6509
6510        if (command === "L" || _abs(relativeX - x) > 0.5 || _abs(relativeY - y) > 0.5) {
6511          line(relativeX, relativeY, x, y);
6512
6513          if (command === "L") {
6514            i += 2;
6515          }
6516        }
6517
6518        relativeX = x;
6519        relativeY = y;
6520      } else if (command === "A") {
6521        flag1 = a[i + 4];
6522        flag2 = a[i + 5];
6523        difX = a[i + 6];
6524        difY = a[i + 7];
6525        j = 7;
6526
6527        if (flag1.length > 1) {
6528          if (flag1.length < 3) {
6529            difY = difX;
6530            difX = flag2;
6531            j--;
6532          } else {
6533            difY = flag2;
6534            difX = flag1.substr(2);
6535            j -= 2;
6536          }
6537
6538          flag2 = flag1.charAt(1);
6539          flag1 = flag1.charAt(0);
6540        }
6541
6542        beziers = arcToSegment(relativeX, relativeY, +a[i + 1], +a[i + 2], +a[i + 3], +flag1, +flag2, (isRelative ? relativeX : 0) + difX * 1, (isRelative ? relativeY : 0) + difY * 1);
6543        i += j;
6544
6545        if (beziers) {
6546          for (j = 0; j < beziers.length; j++) {
6547            segment.push(beziers[j]);
6548          }
6549        }
6550
6551        relativeX = segment[segment.length - 2];
6552        relativeY = segment[segment.length - 1];
6553      } else {
6554        console.log(errorMessage);
6555      }
6556    }
6557
6558    i = segment.length;
6559
6560    if (i < 6) {
6561      path.pop();
6562      i = 0;
6563    } else if (segment[0] === segment[i - 2] && segment[1] === segment[i - 1]) {
6564      segment.closed = true;
6565    }
6566
6567    path.totalPoints = points + i;
6568    return path;
6569  }
6570  function bezierToPoints(x1, y1, x2, y2, x3, y3, x4, y4, threshold, points, index) {
6571    var x12 = (x1 + x2) / 2,
6572        y12 = (y1 + y2) / 2,
6573        x23 = (x2 + x3) / 2,
6574        y23 = (y2 + y3) / 2,
6575        x34 = (x3 + x4) / 2,
6576        y34 = (y3 + y4) / 2,
6577        x123 = (x12 + x23) / 2,
6578        y123 = (y12 + y23) / 2,
6579        x234 = (x23 + x34) / 2,
6580        y234 = (y23 + y34) / 2,
6581        x1234 = (x123 + x234) / 2,
6582        y1234 = (y123 + y234) / 2,
6583        dx = x4 - x1,
6584        dy = y4 - y1,
6585        d2 = _abs((x2 - x4) * dy - (y2 - y4) * dx),
6586        d3 = _abs((x3 - x4) * dy - (y3 - y4) * dx),
6587        length;
6588
6589    if (!points) {
6590      points = [x1, y1, x4, y4];
6591      index = 2;
6592    }
6593
6594    points.splice(index || points.length - 2, 0, x1234, y1234);
6595
6596    if ((d2 + d3) * (d2 + d3) > threshold * (dx * dx + dy * dy)) {
6597      length = points.length;
6598      bezierToPoints(x1, y1, x12, y12, x123, y123, x1234, y1234, threshold, points, index);
6599      bezierToPoints(x1234, y1234, x234, y234, x34, y34, x4, y4, threshold, points, index + 2 + (points.length - length));
6600    }
6601
6602    return points;
6603  }
6604  function flatPointsToSegment(points, curviness) {
6605    if (curviness === void 0) {
6606      curviness = 1;
6607    }
6608
6609    var x = points[0],
6610        y = 0,
6611        segment = [x, y],
6612        i = 2;
6613
6614    for (; i < points.length; i += 2) {
6615      segment.push(x, y, points[i], y = (points[i] - x) * curviness / 2, x = points[i], -y);
6616    }
6617
6618    return segment;
6619  }
6620  function pointsToSegment(points, curviness) {
6621    _abs(points[0] - points[2]) < 1e-4 && _abs(points[1] - points[3]) < 1e-4 && (points = points.slice(2));
6622    var l = points.length - 2,
6623        x = +points[0],
6624        y = +points[1],
6625        nextX = +points[2],
6626        nextY = +points[3],
6627        segment = [x, y, x, y],
6628        dx2 = nextX - x,
6629        dy2 = nextY - y,
6630        closed = Math.abs(points[l] - x) < 0.001 && Math.abs(points[l + 1] - y) < 0.001,
6631        prevX,
6632        prevY,
6633        i,
6634        dx1,
6635        dy1,
6636        r1,
6637        r2,
6638        r3,
6639        tl,
6640        mx1,
6641        mx2,
6642        mxm,
6643        my1,
6644        my2,
6645        mym;
6646
6647    if (closed) {
6648      points.push(nextX, nextY);
6649      nextX = x;
6650      nextY = y;
6651      x = points[l - 2];
6652      y = points[l - 1];
6653      points.unshift(x, y);
6654      l += 4;
6655    }
6656
6657    curviness = curviness || curviness === 0 ? +curviness : 1;
6658
6659    for (i = 2; i < l; i += 2) {
6660      prevX = x;
6661      prevY = y;
6662      x = nextX;
6663      y = nextY;
6664      nextX = +points[i + 2];
6665      nextY = +points[i + 3];
6666
6667      if (x === nextX && y === nextY) {
6668        continue;
6669      }
6670
6671      dx1 = dx2;
6672      dy1 = dy2;
6673      dx2 = nextX - x;
6674      dy2 = nextY - y;
6675      r1 = _sqrt$1(dx1 * dx1 + dy1 * dy1);
6676      r2 = _sqrt$1(dx2 * dx2 + dy2 * dy2);
6677      r3 = _sqrt$1(Math.pow(dx2 / r2 + dx1 / r1, 2) + Math.pow(dy2 / r2 + dy1 / r1, 2));
6678      tl = (r1 + r2) * curviness * 0.25 / r3;
6679      mx1 = x - (x - prevX) * (r1 ? tl / r1 : 0);
6680      mx2 = x + (nextX - x) * (r2 ? tl / r2 : 0);
6681      mxm = x - (mx1 + ((mx2 - mx1) * (r1 * 3 / (r1 + r2) + 0.5) / 4 || 0));
6682      my1 = y - (y - prevY) * (r1 ? tl / r1 : 0);
6683      my2 = y + (nextY - y) * (r2 ? tl / r2 : 0);
6684      mym = y - (my1 + ((my2 - my1) * (r1 * 3 / (r1 + r2) + 0.5) / 4 || 0));
6685
6686      if (x !== prevX || y !== prevY) {
6687        segment.push(_round$1(mx1 + mxm), _round$1(my1 + mym), _round$1(x), _round$1(y), _round$1(mx2 + mxm), _round$1(my2 + mym));
6688      }
6689    }
6690
6691    x !== nextX || y !== nextY || segment.length < 4 ? segment.push(_round$1(nextX), _round$1(nextY), _round$1(nextX), _round$1(nextY)) : segment.length -= 2;
6692
6693    if (segment.length === 2) {
6694      segment.push(x, y, x, y, x, y);
6695    } else if (closed) {
6696      segment.splice(0, 6);
6697      segment.length = segment.length - 6;
6698    }
6699
6700    return segment;
6701  }
6702
6703  function pointToSegDist(x, y, x1, y1, x2, y2) {
6704    var dx = x2 - x1,
6705        dy = y2 - y1,
6706        t;
6707
6708    if (dx || dy) {
6709      t = ((x - x1) * dx + (y - y1) * dy) / (dx * dx + dy * dy);
6710
6711      if (t > 1) {
6712        x1 = x2;
6713        y1 = y2;
6714      } else if (t > 0) {
6715        x1 += dx * t;
6716        y1 += dy * t;
6717      }
6718    }
6719
6720    return Math.pow(x - x1, 2) + Math.pow(y - y1, 2);
6721  }
6722
6723  function simplifyStep(points, first, last, tolerance, simplified) {
6724    var maxSqDist = tolerance,
6725        firstX = points[first],
6726        firstY = points[first + 1],
6727        lastX = points[last],
6728        lastY = points[last + 1],
6729        index,
6730        i,
6731        d;
6732
6733    for (i = first + 2; i < last; i += 2) {
6734      d = pointToSegDist(points[i], points[i + 1], firstX, firstY, lastX, lastY);
6735
6736      if (d > maxSqDist) {
6737        index = i;
6738        maxSqDist = d;
6739      }
6740    }
6741
6742    if (maxSqDist > tolerance) {
6743      index - first > 2 && simplifyStep(points, first, index, tolerance, simplified);
6744      simplified.push(points[index], points[index + 1]);
6745      last - index > 2 && simplifyStep(points, index, last, tolerance, simplified);
6746    }
6747  }
6748
6749  function simplifyPoints(points, tolerance) {
6750    var prevX = parseFloat(points[0]),
6751        prevY = parseFloat(points[1]),
6752        temp = [prevX, prevY],
6753        l = points.length - 2,
6754        i,
6755        x,
6756        y,
6757        dx,
6758        dy,
6759        result,
6760        last;
6761    tolerance = Math.pow(tolerance || 1, 2);
6762
6763    for (i = 2; i < l; i += 2) {
6764      x = parseFloat(points[i]);
6765      y = parseFloat(points[i + 1]);
6766      dx = prevX - x;
6767      dy = prevY - y;
6768
6769      if (dx * dx + dy * dy > tolerance) {
6770        temp.push(x, y);
6771        prevX = x;
6772        prevY = y;
6773      }
6774    }
6775
6776    temp.push(parseFloat(points[l]), parseFloat(points[l + 1]));
6777    last = temp.length - 2;
6778    result = [temp[0], temp[1]];
6779    simplifyStep(temp, 0, last, tolerance, result);
6780    result.push(temp[last], temp[last + 1]);
6781    return result;
6782  }
6783
6784  function getClosestProgressOnBezier(iterations, px, py, start, end, slices, x0, y0, x1, y1, x2, y2, x3, y3) {
6785    var inc = (end - start) / slices,
6786        best = 0,
6787        t = start,
6788        x,
6789        y,
6790        d,
6791        dx,
6792        dy,
6793        inv;
6794    _bestDistance = _largeNum;
6795
6796    while (t <= end) {
6797      inv = 1 - t;
6798      x = inv * inv * inv * x0 + 3 * inv * inv * t * x1 + 3 * inv * t * t * x2 + t * t * t * x3;
6799      y = inv * inv * inv * y0 + 3 * inv * inv * t * y1 + 3 * inv * t * t * y2 + t * t * t * y3;
6800      dx = x - px;
6801      dy = y - py;
6802      d = dx * dx + dy * dy;
6803
6804      if (d < _bestDistance) {
6805        _bestDistance = d;
6806        best = t;
6807      }
6808
6809      t += inc;
6810    }
6811
6812    return iterations > 1 ? getClosestProgressOnBezier(iterations - 1, px, py, Math.max(best - inc, 0), Math.min(best + inc, 1), slices, x0, y0, x1, y1, x2, y2, x3, y3) : best;
6813  }
6814
6815  function getClosestData(rawPath, x, y, slices) {
6816    var closest = {
6817      j: 0,
6818      i: 0,
6819      t: 0
6820    },
6821        bestDistance = _largeNum,
6822        i,
6823        j,
6824        t,
6825        segment;
6826
6827    for (j = 0; j < rawPath.length; j++) {
6828      segment = rawPath[j];
6829
6830      for (i = 0; i < segment.length; i += 6) {
6831        t = getClosestProgressOnBezier(1, x, y, 0, 1, slices || 20, segment[i], segment[i + 1], segment[i + 2], segment[i + 3], segment[i + 4], segment[i + 5], segment[i + 6], segment[i + 7]);
6832
6833        if (bestDistance > _bestDistance) {
6834          bestDistance = _bestDistance;
6835          closest.j = j;
6836          closest.i = i;
6837          closest.t = t;
6838        }
6839      }
6840    }
6841
6842    return closest;
6843  }
6844  function rawPathToString(rawPath) {
6845    if (_isNumber$1(rawPath[0])) {
6846      rawPath = [rawPath];
6847    }
6848
6849    var result = "",
6850        l = rawPath.length,
6851        sl,
6852        s,
6853        i,
6854        segment;
6855
6856    for (s = 0; s < l; s++) {
6857      segment = rawPath[s];
vendor: 8,187 bytes, lines 6858-7170
6858      result += "M" + _round$1(segment[0]) + "," + _round$1(segment[1]) + " C";
6859      sl = segment.length;
6860
6861      for (i = 2; i < sl; i++) {
6862        result += _round$1(segment[i++]) + "," + _round$1(segment[i++]) + " " + _round$1(segment[i++]) + "," + _round$1(segment[i++]) + " " + _round$1(segment[i++]) + "," + _round$1(segment[i]) + " ";
6863      }
6864
6865      if (segment.closed) {
6866        result += "z";
6867      }
6868    }
6869
6870    return result;
6871  }
6872
6873  /*!
6874   * CustomEase 3.12.5
6875   * https://gsap.com
6876   *
6877   * @license Copyright 2008-2024, GreenSock. All rights reserved.
6878   * Subject to the terms at https://gsap.com/standard-license or for
6879   * Club GSAP members, the agreement issued with that membership.
6880   * @author: Jack Doyle, [email protected]
6881  */
6882
6883  var gsap$1,
6884      _coreInitted$1,
6885      _getGSAP = function _getGSAP() {
6886    return gsap$1 || typeof window !== "undefined" && (gsap$1 = window.gsap) && gsap$1.registerPlugin && gsap$1;
6887  },
6888      _initCore$1 = function _initCore() {
6889    gsap$1 = _getGSAP();
6890
6891    if (gsap$1) {
6892      gsap$1.registerEase("_CE", CustomEase.create);
6893      _coreInitted$1 = 1;
6894    } else {
6895      console.warn("Please gsap.registerPlugin(CustomEase)");
6896    }
6897  },
6898      _bigNum$2 = 1e20,
6899      _round$2 = function _round(value) {
6900    return ~~(value * 1000 + (value < 0 ? -.5 : .5)) / 1000;
6901  },
6902      _numExp$1 = /[-+=.]*\d+[.e\-+]*\d*[e\-+]*\d*/gi,
6903      _needsParsingExp = /[cLlsSaAhHvVtTqQ]/g,
6904      _findMinimum = function _findMinimum(values) {
6905    var l = values.length,
6906        min = _bigNum$2,
6907        i;
6908
6909    for (i = 1; i < l; i += 6) {
6910      +values[i] < min && (min = +values[i]);
6911    }
6912
6913    return min;
6914  },
6915      _normalize = function _normalize(values, height, originY) {
6916    if (!originY && originY !== 0) {
6917      originY = Math.max(+values[values.length - 1], +values[1]);
6918    }
6919
6920    var tx = +values[0] * -1,
6921        ty = -originY,
6922        l = values.length,
6923        sx = 1 / (+values[l - 2] + tx),
6924        sy = -height || (Math.abs(+values[l - 1] - +values[1]) < 0.01 * (+values[l - 2] - +values[0]) ? _findMinimum(values) + ty : +values[l - 1] + ty),
6925        i;
6926
6927    if (sy) {
6928      sy = 1 / sy;
6929    } else {
6930      sy = -sx;
6931    }
6932
6933    for (i = 0; i < l; i += 2) {
6934      values[i] = (+values[i] + tx) * sx;
6935      values[i + 1] = (+values[i + 1] + ty) * sy;
6936    }
6937  },
6938      _bezierToPoints = function _bezierToPoints(x1, y1, x2, y2, x3, y3, x4, y4, threshold, points, index) {
6939    var x12 = (x1 + x2) / 2,
6940        y12 = (y1 + y2) / 2,
6941        x23 = (x2 + x3) / 2,
6942        y23 = (y2 + y3) / 2,
6943        x34 = (x3 + x4) / 2,
6944        y34 = (y3 + y4) / 2,
6945        x123 = (x12 + x23) / 2,
6946        y123 = (y12 + y23) / 2,
6947        x234 = (x23 + x34) / 2,
6948        y234 = (y23 + y34) / 2,
6949        x1234 = (x123 + x234) / 2,
6950        y1234 = (y123 + y234) / 2,
6951        dx = x4 - x1,
6952        dy = y4 - y1,
6953        d2 = Math.abs((x2 - x4) * dy - (y2 - y4) * dx),
6954        d3 = Math.abs((x3 - x4) * dy - (y3 - y4) * dx),
6955        length;
6956
6957    if (!points) {
6958      points = [{
6959        x: x1,
6960        y: y1
6961      }, {
6962        x: x4,
6963        y: y4
6964      }];
6965      index = 1;
6966    }
6967
6968    points.splice(index || points.length - 1, 0, {
6969      x: x1234,
6970      y: y1234
6971    });
6972
6973    if ((d2 + d3) * (d2 + d3) > threshold * (dx * dx + dy * dy)) {
6974      length = points.length;
6975
6976      _bezierToPoints(x1, y1, x12, y12, x123, y123, x1234, y1234, threshold, points, index);
6977
6978      _bezierToPoints(x1234, y1234, x234, y234, x34, y34, x4, y4, threshold, points, index + 1 + (points.length - length));
6979    }
6980
6981    return points;
6982  };
6983
6984  var CustomEase = function () {
6985    function CustomEase(id, data, config) {
6986      _coreInitted$1 || _initCore$1();
6987      this.id = id;
6988       this.setData(data, config);
6989    }
6990
6991    var _proto = CustomEase.prototype;
6992
6993    _proto.setData = function setData(data, config) {
6994      config = config || {};
6995      data = data || "0,0,1,1";
6996      var values = data.match(_numExp$1),
6997          closest = 1,
6998          points = [],
6999          lookup = [],
7000          precision = config.precision || 1,
7001          fast = precision <= 1,
7002          l,
7003          a1,
7004          a2,
7005          i,
7006          inc,
7007          j,
7008          point,
7009          prevPoint,
7010          p;
7011      this.data = data;
7012
7013      if (_needsParsingExp.test(data) || ~data.indexOf("M") && data.indexOf("C") < 0) {
7014        values = stringToRawPath(data)[0];
7015      }
7016
7017      l = values.length;
7018
7019      if (l === 4) {
7020        values.unshift(0, 0);
7021        values.push(1, 1);
7022        l = 8;
7023      } else if ((l - 2) % 6) {
7024        throw "Invalid CustomEase";
7025      }
7026
7027      if (+values[0] !== 0 || +values[l - 2] !== 1) {
7028        _normalize(values, config.height, config.originY);
7029      }
7030
7031      this.segment = values;
7032
7033      for (i = 2; i < l; i += 6) {
7034        a1 = {
7035          x: +values[i - 2],
7036          y: +values[i - 1]
7037        };
7038        a2 = {
7039          x: +values[i + 4],
7040          y: +values[i + 5]
7041        };
7042        points.push(a1, a2);
7043
7044        _bezierToPoints(a1.x, a1.y, +values[i], +values[i + 1], +values[i + 2], +values[i + 3], a2.x, a2.y, 1 / (precision * 200000), points, points.length - 1);
7045      }
7046
7047      l = points.length;
7048
7049      for (i = 0; i < l; i++) {
7050        point = points[i];
7051        prevPoint = points[i - 1] || point;
7052
7053        if ((point.x > prevPoint.x || prevPoint.y !== point.y && prevPoint.x === point.x || point === prevPoint) && point.x <= 1) {
7054          prevPoint.cx = point.x - prevPoint.x;
7055          prevPoint.cy = point.y - prevPoint.y;
7056          prevPoint.n = point;
7057          prevPoint.nx = point.x;
7058
7059          if (fast && i > 1 && Math.abs(prevPoint.cy / prevPoint.cx - points[i - 2].cy / points[i - 2].cx) > 2) {
7060            fast = 0;
7061          }
7062
7063          if (prevPoint.cx < closest) {
7064            if (!prevPoint.cx) {
7065              prevPoint.cx = 0.001;
7066
7067              if (i === l - 1) {
7068                prevPoint.x -= 0.001;
7069                closest = Math.min(closest, 0.001);
7070                fast = 0;
7071              }
7072            } else {
7073              closest = prevPoint.cx;
7074            }
7075          }
7076        } else {
7077          points.splice(i--, 1);
7078          l--;
7079        }
7080      }
7081
7082      l = 1 / closest + 1 | 0;
7083      inc = 1 / l;
7084      j = 0;
7085      point = points[0];
7086
7087      if (fast) {
7088        for (i = 0; i < l; i++) {
7089          p = i * inc;
7090
7091          if (point.nx < p) {
7092            point = points[++j];
7093          }
7094
7095          a1 = point.y + (p - point.x) / point.cx * point.cy;
7096          lookup[i] = {
7097            x: p,
7098            cx: inc,
7099            y: a1,
7100            cy: 0,
7101            nx: 9
7102          };
7103
7104          if (i) {
7105            lookup[i - 1].cy = a1 - lookup[i - 1].y;
7106          }
7107        }
7108
7109        lookup[l - 1].cy = points[points.length - 1].y - a1;
7110      } else {
7111        for (i = 0; i < l; i++) {
7112          if (point.nx < i * inc) {
7113            point = points[++j];
7114          }
7115
7116          lookup[i] = point;
7117        }
7118
7119        if (j < points.length - 1) {
7120          lookup[i - 1] = points[points.length - 2];
7121        }
7122      }
7123
7124      this.ease = function (p) {
7125        var point = lookup[p * l | 0] || lookup[l - 1];
7126
7127        if (point.nx < p) {
7128          point = point.n;
7129        }
7130
7131        return point.y + (p - point.x) / point.cx * point.cy;
7132      };
7133
7134      this.ease.custom = this;
7135      this.id && gsap$1 && gsap$1.registerEase(this.id, this.ease);
7136      return this;
7137    };
7138
7139    _proto.getSVGData = function getSVGData(config) {
7140      return CustomEase.getSVGData(this, config);
7141    };
7142
7143    CustomEase.create = function create(id, data, config) {
7144      return new CustomEase(id, data, config).ease;
7145    };
7146
7147    CustomEase.register = function register(core) {
7148      gsap$1 = core;
7149
7150      _initCore$1();
7151    };
7152
7153    CustomEase.get = function get(id) {
7154      return gsap$1.parseEase(id);
7155    };
7156
7157    CustomEase.getSVGData = function getSVGData(ease, config) {
7158      config = config || {};
7159      var width = config.width || 100,
7160          height = config.height || 100,
7161          x = config.x || 0,
7162          y = (config.y || 0) + height,
7163          e = gsap$1.utils.toArray(config.path)[0],
7164          a,
7165          slope,
7166          i,
7167          inc,
7168          tx,
7169          ty,
7170          precision,
vendor: 7,069 bytes, lines 7171-7410
7171          threshold,
7172          prevX,
7173          prevY;
7174
7175      if (config.invert) {
7176        height = -height;
7177        y = 0;
7178      }
7179
7180      if (typeof ease === "string") {
7181        ease = gsap$1.parseEase(ease);
7182      }
7183
7184      if (ease.custom) {
7185        ease = ease.custom;
7186      }
7187
7188      if (ease instanceof CustomEase) {
7189        a = rawPathToString(transformRawPath([ease.segment], width, 0, 0, -height, x, y));
7190      } else {
7191        a = [x, y];
7192        precision = Math.max(5, (config.precision || 1) * 200);
7193        inc = 1 / precision;
7194        precision += 2;
7195        threshold = 5 / precision;
7196        prevX = _round$2(x + inc * width);
7197        prevY = _round$2(y + ease(inc) * -height);
7198        slope = (prevY - y) / (prevX - x);
7199
7200        for (i = 2; i < precision; i++) {
7201          tx = _round$2(x + i * inc * width);
7202          ty = _round$2(y + ease(i * inc) * -height);
7203
7204          if (Math.abs((ty - prevY) / (tx - prevX) - slope) > threshold || i === precision - 1) {
7205            a.push(prevX, prevY);
7206            slope = (ty - prevY) / (tx - prevX);
7207          }
7208
7209          prevX = tx;
7210          prevY = ty;
7211        }
7212
7213        a = "M" + a.join(",");
7214      }
7215
7216      e && e.setAttribute("d", a);
7217      return a;
7218    };
7219
7220    return CustomEase;
7221  }();
7222  _getGSAP() && gsap$1.registerPlugin(CustomEase);
7223  CustomEase.version = "3.12.5";
7224
7225  var _doc$2,
7226      _win$2,
7227      _docElement$1,
7228      _body,
7229      _divContainer,
7230      _svgContainer,
7231      _identityMatrix,
7232      _gEl,
7233      _transformProp$1 = "transform",
7234      _transformOriginProp$1 = _transformProp$1 + "Origin",
7235      _hasOffsetBug,
7236      _setDoc = function _setDoc(element) {
7237    var doc = element.ownerDocument || element;
7238
7239    if (!(_transformProp$1 in element.style) && "msTransform" in element.style) {
7240      _transformProp$1 = "msTransform";
7241      _transformOriginProp$1 = _transformProp$1 + "Origin";
7242    }
7243
7244    while (doc.parentNode && (doc = doc.parentNode)) {}
7245
7246    _win$2 = window;
7247    _identityMatrix = new Matrix2D();
7248
7249    if (doc) {
7250      _doc$2 = doc;
7251      _docElement$1 = doc.documentElement;
7252      _body = doc.body;
7253      _gEl = _doc$2.createElementNS("http://www.w3.org/2000/svg", "g");
7254      _gEl.style.transform = "none";
7255      var d1 = doc.createElement("div"),
7256          d2 = doc.createElement("div"),
7257          root = doc && (doc.body || doc.firstElementChild);
7258
7259      if (root && root.appendChild) {
7260        root.appendChild(d1);
7261        d1.appendChild(d2);
7262        d1.setAttribute("style", "position:static;transform:translate3d(0,0,1px)");
7263        _hasOffsetBug = d2.offsetParent !== d1;
7264        root.removeChild(d1);
7265      }
7266    }
7267
7268    return doc;
7269  },
7270      _forceNonZeroScale = function _forceNonZeroScale(e) {
7271    var a, cache;
7272
7273    while (e && e !== _body) {
7274      cache = e._gsap;
7275      cache && cache.uncache && cache.get(e, "x");
7276
7277      if (cache && !cache.scaleX && !cache.scaleY && cache.renderTransform) {
7278        cache.scaleX = cache.scaleY = 1e-4;
7279        cache.renderTransform(1, cache);
7280        a ? a.push(cache) : a = [cache];
7281      }
7282
7283      e = e.parentNode;
7284    }
7285
7286    return a;
7287  },
7288      _svgTemps = [],
7289      _divTemps = [],
7290      _getDocScrollTop = function _getDocScrollTop() {
7291    return _win$2.pageYOffset || _doc$2.scrollTop || _docElement$1.scrollTop || _body.scrollTop || 0;
7292  },
7293      _getDocScrollLeft = function _getDocScrollLeft() {
7294    return _win$2.pageXOffset || _doc$2.scrollLeft || _docElement$1.scrollLeft || _body.scrollLeft || 0;
7295  },
7296      _svgOwner = function _svgOwner(element) {
7297    return element.ownerSVGElement || ((element.tagName + "").toLowerCase() === "svg" ? element : null);
7298  },
7299      _isFixed = function _isFixed(element) {
7300    if (_win$2.getComputedStyle(element).position === "fixed") {
7301      return true;
7302    }
7303
7304    element = element.parentNode;
7305
7306    if (element && element.nodeType === 1) {
7307      return _isFixed(element);
7308    }
7309  },
7310      _createSibling = function _createSibling(element, i) {
7311    if (element.parentNode && (_doc$2 || _setDoc(element))) {
7312      var svg = _svgOwner(element),
7313          ns = svg ? svg.getAttribute("xmlns") || "http://www.w3.org/2000/svg" : "http://www.w3.org/1999/xhtml",
7314          type = svg ? i ? "rect" : "g" : "div",
7315          x = i !== 2 ? 0 : 100,
7316          y = i === 3 ? 100 : 0,
7317          css = "position:absolute;display:block;pointer-events:none;margin:0;padding:0;",
7318          e = _doc$2.createElementNS ? _doc$2.createElementNS(ns.replace(/^https/, "http"), type) : _doc$2.createElement(type);
7319
7320      if (i) {
7321        if (!svg) {
7322          if (!_divContainer) {
7323            _divContainer = _createSibling(element);
7324            _divContainer.style.cssText = css;
7325          }
7326
7327          e.style.cssText = css + "width:0.1px;height:0.1px;top:" + y + "px;left:" + x + "px";
7328
7329          _divContainer.appendChild(e);
7330        } else {
7331          _svgContainer || (_svgContainer = _createSibling(element));
7332          e.setAttribute("width", 0.01);
7333          e.setAttribute("height", 0.01);
7334          e.setAttribute("transform", "translate(" + x + "," + y + ")");
7335
7336          _svgContainer.appendChild(e);
7337        }
7338      }
7339
7340      return e;
7341    }
7342
7343    throw "Need document and parent.";
7344  },
7345      _consolidate = function _consolidate(m) {
7346    var c = new Matrix2D(),
7347        i = 0;
7348
7349    for (; i < m.numberOfItems; i++) {
7350      c.multiply(m.getItem(i).matrix);
7351    }
7352
7353    return c;
7354  },
7355      _getCTM = function _getCTM(svg) {
7356    var m = svg.getCTM(),
7357        transform;
7358
7359    if (!m) {
7360      transform = svg.style[_transformProp$1];
7361      svg.style[_transformProp$1] = "none";
7362      svg.appendChild(_gEl);
7363      m = _gEl.getCTM();
7364      svg.removeChild(_gEl);
7365      transform ? svg.style[_transformProp$1] = transform : svg.style.removeProperty(_transformProp$1.replace(/([A-Z])/g, "-$1").toLowerCase());
7366    }
7367
7368    return m || _identityMatrix.clone();
7369  },
7370      _placeSiblings = function _placeSiblings(element, adjustGOffset) {
7371    var svg = _svgOwner(element),
7372        isRootSVG = element === svg,
7373        siblings = svg ? _svgTemps : _divTemps,
7374        parent = element.parentNode,
7375        container,
7376        m,
7377        b,
7378        x,
7379        y,
7380        cs;
7381
7382    if (element === _win$2) {
7383      return element;
7384    }
7385
7386    siblings.length || siblings.push(_createSibling(element, 1), _createSibling(element, 2), _createSibling(element, 3));
7387    container = svg ? _svgContainer : _divContainer;
7388
7389    if (svg) {
7390      if (isRootSVG) {
7391        b = _getCTM(element);
7392        x = -b.e / b.a;
7393        y = -b.f / b.d;
7394        m = _identityMatrix;
7395      } else if (element.getBBox) {
7396        b = element.getBBox();
7397        m = element.transform ? element.transform.baseVal : {};
7398        m = !m.numberOfItems ? _identityMatrix : m.numberOfItems > 1 ? _consolidate(m) : m.getItem(0).matrix;
7399        x = m.a * b.x + m.c * b.y;
7400        y = m.b * b.x + m.d * b.y;
7401      } else {
7402        m = new Matrix2D();
7403        x = y = 0;
7404      }
7405
7406      if (adjustGOffset && element.tagName.toLowerCase() === "g") {
7407        x = y = 0;
7408      }
7409
7410      (isRootSVG ? svg : parent).appendChild(container);
vendor: 1,153 bytes, lines 7411-7446
7411      container.setAttribute("transform", "matrix(" + m.a + "," + m.b + "," + m.c + "," + m.d + "," + (m.e + x) + "," + (m.f + y) + ")");
7412    } else {
7413      x = y = 0;
7414
7415      if (_hasOffsetBug) {
7416        m = element.offsetParent;
7417        b = element;
7418
7419        while (b && (b = b.parentNode) && b !== m && b.parentNode) {
7420          if ((_win$2.getComputedStyle(b)[_transformProp$1] + "").length > 4) {
7421            x = b.offsetLeft;
7422            y = b.offsetTop;
7423            b = 0;
7424          }
7425        }
7426      }
7427
7428      cs = _win$2.getComputedStyle(element);
7429
7430      if (cs.position !== "absolute" && cs.position !== "fixed") {
7431        m = element.offsetParent;
7432
7433        while (parent && parent !== m) {
7434          x += parent.scrollLeft || 0;
7435          y += parent.scrollTop || 0;
7436          parent = parent.parentNode;
7437        }
7438      }
7439
7440      b = container.style;
7441      b.top = element.offsetTop - y + "px";
7442      b.left = element.offsetLeft - x + "px";
7443      b[_transformProp$1] = cs[_transformProp$1];
7444      b[_transformOriginProp$1] = cs[_transformOriginProp$1];
7445      b.position = cs.position === "fixed" ? "fixed" : "absolute";
7446      element.parentNode
vendor: 37,620 bytes, lines 7446-8701
7446.appendChild(container);
7447    }
7448
7449    return container;
7450  },
7451      _setMatrix = function _setMatrix(m, a, b, c, d, e, f) {
7452    m.a = a;
7453    m.b = b;
7454    m.c = c;
7455    m.d = d;
7456    m.e = e;
7457    m.f = f;
7458    return m;
7459  };
7460
7461  var Matrix2D = function () {
7462    function Matrix2D(a, b, c, d, e, f) {
7463      if (a === void 0) {
7464        a = 1;
7465      }
7466
7467      if (b === void 0) {
7468        b = 0;
7469      }
7470
7471      if (c === void 0) {
7472        c = 0;
7473      }
7474
7475      if (d === void 0) {
7476        d = 1;
7477      }
7478
7479      if (e === void 0) {
7480        e = 0;
7481      }
7482
7483      if (f === void 0) {
7484        f = 0;
7485      }
7486
7487      _setMatrix(this, a, b, c, d, e, f);
7488    }
7489
7490    var _proto = Matrix2D.prototype;
7491
7492    _proto.inverse = function inverse() {
7493      var a = this.a,
7494          b = this.b,
7495          c = this.c,
7496          d = this.d,
7497          e = this.e,
7498          f = this.f,
7499          determinant = a * d - b * c || 1e-10;
7500      return _setMatrix(this, d / determinant, -b / determinant, -c / determinant, a / determinant, (c * f - d * e) / determinant, -(a * f - b * e) / determinant);
7501    };
7502
7503    _proto.multiply = function multiply(matrix) {
7504      var a = this.a,
7505          b = this.b,
7506          c = this.c,
7507          d = this.d,
7508          e = this.e,
7509          f = this.f,
7510          a2 = matrix.a,
7511          b2 = matrix.c,
7512          c2 = matrix.b,
7513          d2 = matrix.d,
7514          e2 = matrix.e,
7515          f2 = matrix.f;
7516      return _setMatrix(this, a2 * a + c2 * c, a2 * b + c2 * d, b2 * a + d2 * c, b2 * b + d2 * d, e + e2 * a + f2 * c, f + e2 * b + f2 * d);
7517    };
7518
7519    _proto.clone = function clone() {
7520      return new Matrix2D(this.a, this.b, this.c, this.d, this.e, this.f);
7521    };
7522
7523    _proto.equals = function equals(matrix) {
7524      var a = this.a,
7525          b = this.b,
7526          c = this.c,
7527          d = this.d,
7528          e = this.e,
7529          f = this.f;
7530      return a === matrix.a && b === matrix.b && c === matrix.c && d === matrix.d && e === matrix.e && f === matrix.f;
7531    };
7532
7533    _proto.apply = function apply(point, decoratee) {
7534      if (decoratee === void 0) {
7535        decoratee = {};
7536      }
7537
7538      var x = point.x,
7539          y = point.y,
7540          a = this.a,
7541          b = this.b,
7542          c = this.c,
7543          d = this.d,
7544          e = this.e,
7545          f = this.f;
7546      decoratee.x = x * a + y * c + e || 0;
7547      decoratee.y = x * b + y * d + f || 0;
7548      return decoratee;
7549    };
7550
7551    return Matrix2D;
7552  }();
7553  function getGlobalMatrix(element, inverse, adjustGOffset, includeScrollInFixed) {
7554    if (!element || !element.parentNode || (_doc$2 || _setDoc(element)).documentElement === element) {
7555      return new Matrix2D();
7556    }
7557
7558    var zeroScales = _forceNonZeroScale(element),
7559        svg = _svgOwner(element),
7560        temps = svg ? _svgTemps : _divTemps,
7561        container = _placeSiblings(element, adjustGOffset),
7562        b1 = temps[0].getBoundingClientRect(),
7563        b2 = temps[1].getBoundingClientRect(),
7564        b3 = temps[2].getBoundingClientRect(),
7565        parent = container.parentNode,
7566        isFixed = !includeScrollInFixed && _isFixed(element),
7567        m = new Matrix2D((b2.left - b1.left) / 100, (b2.top - b1.top) / 100, (b3.left - b1.left) / 100, (b3.top - b1.top) / 100, b1.left + (isFixed ? 0 : _getDocScrollLeft()), b1.top + (isFixed ? 0 : _getDocScrollTop()));
7568
7569    parent.removeChild(container);
7570
7571    if (zeroScales) {
7572      b1 = zeroScales.length;
7573
7574      while (b1--) {
7575        b2 = zeroScales[b1];
7576        b2.scaleX = b2.scaleY = 0;
7577        b2.renderTransform(1, b2);
7578      }
7579    }
7580
7581    return inverse ? m.inverse() : m;
7582  }
7583
7584  var gsap$2,
7585      _win$3,
7586      _doc$3,
7587      _docElement$2,
7588      _body$1,
7589      _tempDiv$1,
7590      _placeholderDiv,
7591      _coreInitted$2,
7592      _checkPrefix,
7593      _toArray,
7594      _supportsPassive,
7595      _isTouchDevice,
7596      _touchEventLookup,
7597      _isMultiTouching,
7598      _isAndroid,
7599      InertiaPlugin,
7600      _defaultCursor,
7601      _supportsPointer,
7602      _context$1,
7603      _getStyleSaver$1,
7604      _dragCount$1 = 0,
7605      _windowExists$2 = function _windowExists() {
7606    return typeof window !== "undefined";
7607  },
7608      _getGSAP$1 = function _getGSAP() {
7609    return gsap$2 || _windowExists$2() && (gsap$2 = window.gsap) && gsap$2.registerPlugin && gsap$2;
7610  },
7611      _isFunction$1 = function _isFunction(value) {
7612    return typeof value === "function";
7613  },
7614      _isObject$1 = function _isObject(value) {
7615    return typeof value === "object";
7616  },
7617      _isUndefined$2 = function _isUndefined(value) {
7618    return typeof value === "undefined";
7619  },
7620      _emptyFunc$1 = function _emptyFunc() {
7621    return false;
7622  },
7623      _transformProp$2 = "transform",
7624      _transformOriginProp$2 = "transformOrigin",
7625      _round$3 = function _round(value) {
7626    return Math.round(value * 10000) / 10000;
7627  },
7628      _isArray$1 = Array.isArray,
7629      _createElement$1 = function _createElement(type, ns) {
7630    var e = _doc$3.createElementNS ? _doc$3.createElementNS((ns || "http://www.w3.org/1999/xhtml").replace(/^https/, "http"), type) : _doc$3.createElement(type);
7631    return e.style ? e : _doc$3.createElement(type);
7632  },
7633      _RAD2DEG$2 = 180 / Math.PI,
7634      _bigNum$3 = 1e20,
7635      _identityMatrix$1 = new Matrix2D(),
7636      _getTime = Date.now || function () {
7637    return new Date().getTime();
7638  },
7639      _renderQueue = [],
7640      _lookup = {},
7641      _lookupCount = 0,
7642      _clickableTagExp = /^(?:a|input|textarea|button|select)$/i,
7643      _lastDragTime = 0,
7644      _temp1 = {},
7645      _windowProxy = {},
7646      _copy = function _copy(obj, factor) {
7647    var copy = {},
7648        p;
7649
7650    for (p in obj) {
7651      copy[p] = factor ? obj[p] * factor : obj[p];
7652    }
7653
7654    return copy;
7655  },
7656      _extend = function _extend(obj, defaults) {
7657    for (var p in defaults) {
7658      if (!(p in obj)) {
7659        obj[p] = defaults[p];
7660      }
7661    }
7662
7663    return obj;
7664  },
7665      _setTouchActionForAllDescendants = function _setTouchActionForAllDescendants(elements, value) {
7666    var i = elements.length,
7667        children;
7668
7669    while (i--) {
7670      value ? elements[i].style.touchAction = value : elements[i].style.removeProperty("touch-action");
7671      children = elements[i].children;
7672      children && children.length && _setTouchActionForAllDescendants(children, value);
7673    }
7674  },
7675      _renderQueueTick = function _renderQueueTick() {
7676    return _renderQueue.forEach(function (func) {
7677      return func();
7678    });
7679  },
7680      _addToRenderQueue = function _addToRenderQueue(func) {
7681    _renderQueue.push(func);
7682
7683    if (_renderQueue.length === 1) {
7684      gsap$2.ticker.add(_renderQueueTick);
7685    }
7686  },
7687      _renderQueueTimeout = function _renderQueueTimeout() {
7688    return !_renderQueue.length && gsap$2.ticker.remove(_renderQueueTick);
7689  },
7690      _removeFromRenderQueue = function _removeFromRenderQueue(func) {
7691    var i = _renderQueue.length;
7692
7693    while (i--) {
7694      if (_renderQueue[i] === func) {
7695        _renderQueue.splice(i, 1);
7696      }
7697    }
7698
7699    gsap$2.to(_renderQueueTimeout, {
7700      overwrite: true,
7701      delay: 15,
7702      duration: 0,
7703      onComplete: _renderQueueTimeout,
7704      data: "_draggable"
7705    });
7706  },
7707      _setDefaults$1 = function _setDefaults(obj, defaults) {
7708    for (var p in defaults) {
7709      if (!(p in obj)) {
7710        obj[p] = defaults[p];
7711      }
7712    }
7713
7714    return obj;
7715  },
7716      _addListener = function _addListener(element, type, func, capture) {
7717    if (element.addEventListener) {
7718      var touchType = _touchEventLookup[type];
7719      capture = capture || (_supportsPassive ? {
7720        passive: false
7721      } : null);
7722      element.addEventListener(touchType || type, func, capture);
7723      touchType && type !== touchType && element.addEventListener(type, func, capture);
7724    }
7725  },
7726      _removeListener = function _removeListener(element, type, func, capture) {
7727    if (element.removeEventListener) {
7728      var touchType = _touchEventLookup[type];
7729      element.removeEventListener(touchType || type, func, capture);
7730      touchType && type !== touchType && element.removeEventListener(type, func, capture);
7731    }
7732  },
7733      _preventDefault = function _preventDefault(event) {
7734    event.preventDefault && event.preventDefault();
7735    event.preventManipulation && event.preventManipulation();
7736  },
7737      _hasTouchID = function _hasTouchID(list, ID) {
7738    var i = list.length;
7739
7740    while (i--) {
7741      if (list[i].identifier === ID) {
7742        return true;
7743      }
7744    }
7745  },
7746      _onMultiTouchDocumentEnd = function _onMultiTouchDocumentEnd(event) {
7747    _isMultiTouching = event.touches && _dragCount$1 < event.touches.length;
7748
7749    _removeListener(event.target, "touchend", _onMultiTouchDocumentEnd);
7750  },
7751      _onMultiTouchDocument = function _onMultiTouchDocument(event) {
7752    _isMultiTouching = event.touches && _dragCount$1 < event.touches.length;
7753
7754    _addListener(event.target, "touchend", _onMultiTouchDocumentEnd);
7755  },
7756      _getDocScrollTop$1 = function _getDocScrollTop(doc) {
7757    return _win$3.pageYOffset || doc.scrollTop || doc.documentElement.scrollTop || doc.body.scrollTop || 0;
7758  },
7759      _getDocScrollLeft$1 = function _getDocScrollLeft(doc) {
7760    return _win$3.pageXOffset || doc.scrollLeft || doc.documentElement.scrollLeft || doc.body.scrollLeft || 0;
7761  },
7762      _addScrollListener = function _addScrollListener(e, callback) {
7763    _addListener(e, "scroll", callback);
7764
7765    if (!_isRoot(e.parentNode)) {
7766      _addScrollListener(e.parentNode, callback);
7767    }
7768  },
7769      _removeScrollListener = function _removeScrollListener(e, callback) {
7770    _removeListener(e, "scroll", callback);
7771
7772    if (!_isRoot(e.parentNode)) {
7773      _removeScrollListener(e.parentNode, callback);
7774    }
7775  },
7776      _isRoot = function _isRoot(e) {
7777    return !!(!e || e === _docElement$2 || e.nodeType === 9 || e === _doc$3.body || e === _win$3 || !e.nodeType || !e.parentNode);
7778  },
7779      _getMaxScroll = function _getMaxScroll(element, axis) {
7780    var dim = axis === "x" ? "Width" : "Height",
7781        scroll = "scroll" + dim,
7782        client = "client" + dim;
7783    return Math.max(0, _isRoot(element) ? Math.max(_docElement$2[scroll], _body$1[scroll]) - (_win$3["inner" + dim] || _docElement$2[client] || _body$1[client]) : element[scroll] - element[client]);
7784  },
7785      _recordMaxScrolls = function _recordMaxScrolls(e, skipCurrent) {
7786    var x = _getMaxScroll(e, "x"),
7787        y = _getMaxScroll(e, "y");
7788
7789    if (_isRoot(e)) {
7790      e = _windowProxy;
7791    } else {
7792      _recordMaxScrolls(e.parentNode, skipCurrent);
7793    }
7794
7795    e._gsMaxScrollX = x;
7796    e._gsMaxScrollY = y;
7797
7798    if (!skipCurrent) {
7799      e._gsScrollX = e.scrollLeft || 0;
7800      e._gsScrollY = e.scrollTop || 0;
7801    }
7802  },
7803      _setStyle = function _setStyle(element, property, value) {
7804    var style = element.style;
7805
7806    if (!style) {
7807      return;
7808    }
7809
7810    if (_isUndefined$2(style[property])) {
7811      property = _checkPrefix(property, element) || property;
7812    }
7813
7814    if (value == null) {
7815      style.removeProperty && style.removeProperty(property.replace(/([A-Z])/g, "-$1").toLowerCase());
7816    } else {
7817      style[property] = value;
7818    }
7819  },
7820      _getComputedStyle = function _getComputedStyle(element) {
7821    return _win$3.getComputedStyle(element instanceof Element ? element : element.host || (element.parentNode || {}).host || element);
7822  },
7823      _tempRect = {},
7824      _parseRect = function _parseRect(e) {
7825    if (e === _win$3) {
7826      _tempRect.left = _tempRect.top = 0;
7827      _tempRect.width = _tempRect.right = _docElement$2.clientWidth || e.innerWidth || _body$1.clientWidth || 0;
7828      _tempRect.height = _tempRect.bottom = (e.innerHeight || 0) - 20 < _docElement$2.clientHeight ? _docElement$2.clientHeight : e.innerHeight || _body$1.clientHeight || 0;
7829      return _tempRect;
7830    }
7831
7832    var doc = e.ownerDocument || _doc$3,
7833        r = !_isUndefined$2(e.pageX) ? {
7834      left: e.pageX - _getDocScrollLeft$1(doc),
7835      top: e.pageY - _getDocScrollTop$1(doc),
7836      right: e.pageX - _getDocScrollLeft$1(doc) + 1,
7837      bottom: e.pageY - _getDocScrollTop$1(doc) + 1
7838    } : !e.nodeType && !_isUndefined$2(e.left) && !_isUndefined$2(e.top) ? e : _toArray(e)[0].getBoundingClientRect();
7839
7840    if (_isUndefined$2(r.right) && !_isUndefined$2(r.width)) {
7841      r.right = r.left + r.width;
7842      r.bottom = r.top + r.height;
7843    } else if (_isUndefined$2(r.width)) {
7844      r = {
7845        width: r.right - r.left,
7846        height: r.bottom - r.top,
7847        right: r.right,
7848        left: r.left,
7849        bottom: r.bottom,
7850        top: r.top
7851      };
7852    }
7853
7854    return r;
7855  },
7856      _dispatchEvent = function _dispatchEvent(target, type, callbackName) {
7857    var vars = target.vars,
7858        callback = vars[callbackName],
7859        listeners = target._listeners[type],
7860        result;
7861
7862    if (_isFunction$1(callback)) {
7863      result = callback.apply(vars.callbackScope || target, vars[callbackName + "Params"] || [target.pointerEvent]);
7864    }
7865
7866    if (listeners && target.dispatchEvent(type) === false) {
7867      result = false;
7868    }
7869
7870    return result;
7871  },
7872      _getBounds = function _getBounds(target, context) {
7873    var e = _toArray(target)[0],
7874        top,
7875        left,
7876        offset;
7877
7878    if (!e.nodeType && e !== _win$3) {
7879      if (!_isUndefined$2(target.left)) {
7880        offset = {
7881          x: 0,
7882          y: 0
7883        };
7884        return {
7885          left: target.left - offset.x,
7886          top: target.top - offset.y,
7887          width: target.width,
7888          height: target.height
7889        };
7890      }
7891
7892      left = target.min || target.minX || target.minRotation || 0;
7893      top = target.min || target.minY || 0;
7894      return {
7895        left: left,
7896        top: top,
7897        width: (target.max || target.maxX || target.maxRotation || 0) - left,
7898        height: (target.max || target.maxY || 0) - top
7899      };
7900    }
7901
7902    return _getElementBounds(e, context);
7903  },
7904      _point1 = {},
7905      _getElementBounds = function _getElementBounds(element, context) {
7906    context = _toArray(context)[0];
7907    var isSVG = element.getBBox && element.ownerSVGElement,
7908        doc = element.ownerDocument || _doc$3,
7909        left,
7910        right,
7911        top,
7912        bottom,
7913        matrix,
7914        p1,
7915        p2,
7916        p3,
7917        p4,
7918        bbox,
7919        width,
7920        height,
7921        cs;
7922
7923    if (element === _win$3) {
7924      top = _getDocScrollTop$1(doc);
7925      left = _getDocScrollLeft$1(doc);
7926      right = left + (doc.documentElement.clientWidth || element.innerWidth || doc.body.clientWidth || 0);
7927      bottom = top + ((element.innerHeight || 0) - 20 < doc.documentElement.clientHeight ? doc.documentElement.clientHeight : element.innerHeight || doc.body.clientHeight || 0);
7928    } else if (context === _win$3 || _isUndefined$2(context)) {
7929      return element.getBoundingClientRect();
7930    } else {
7931      left = top = 0;
7932
7933      if (isSVG) {
7934        bbox = element.getBBox();
7935        width = bbox.width;
7936        height = bbox.height;
7937      } else {
7938        if (element.viewBox && (bbox = element.viewBox.baseVal)) {
7939          left = bbox.x || 0;
7940          top = bbox.y || 0;
7941          width = bbox.width;
7942          height = bbox.height;
7943        }
7944
7945        if (!width) {
7946          cs = _getComputedStyle(element);
7947          bbox = cs.boxSizing === "border-box";
7948          width = (parseFloat(cs.width) || element.clientWidth || 0) + (bbox ? 0 : parseFloat(cs.borderLeftWidth) + parseFloat(cs.borderRightWidth));
7949          height = (parseFloat(cs.height) || element.clientHeight || 0) + (bbox ? 0 : parseFloat(cs.borderTopWidth) + parseFloat(cs.borderBottomWidth));
7950        }
7951      }
7952
7953      right = width;
7954      bottom = height;
7955    }
7956
7957    if (element === context) {
7958      return {
7959        left: left,
7960        top: top,
7961        width: right - left,
7962        height: bottom - top
7963      };
7964    }
7965
7966    matrix = getGlobalMatrix(context, true).multiply(getGlobalMatrix(element));
7967    p1 = matrix.apply({
7968      x: left,
7969      y: top
7970    });
7971    p2 = matrix.apply({
7972      x: right,
7973      y: top
7974    });
7975    p3 = matrix.apply({
7976      x: right,
7977      y: bottom
7978    });
7979    p4 = matrix.apply({
7980      x: left,
7981      y: bottom
7982    });
7983    left = Math.min(p1.x, p2.x, p3.x, p4.x);
7984    top = Math.min(p1.y, p2.y, p3.y, p4.y);
7985    return {
7986      left: left,
7987      top: top,
7988      width: Math.max(p1.x, p2.x, p3.x, p4.x) - left,
7989      height: Math.max(p1.y, p2.y, p3.y, p4.y) - top
7990    };
7991  },
7992      _parseInertia = function _parseInertia(draggable, snap, max, min, factor, forceZeroVelocity) {
7993    var vars = {},
7994        a,
7995        i,
7996        l;
7997
7998    if (snap) {
7999      if (factor !== 1 && snap instanceof Array) {
8000        vars.end = a = [];
8001        l = snap.length;
8002
8003        if (_isObject$1(snap[0])) {
8004          for (i = 0; i < l; i++) {
8005            a[i] = _copy(snap[i], factor);
8006          }
8007        } else {
8008          for (i = 0; i < l; i++) {
8009            a[i] = snap[i] * factor;
8010          }
8011        }
8012
8013        max += 1.1;
8014        min -= 1.1;
8015      } else if (_isFunction$1(snap)) {
8016        vars.end = function (value) {
8017          var result = snap.call(draggable, value),
8018              copy,
8019              p;
8020
8021          if (factor !== 1) {
8022            if (_isObject$1(result)) {
8023              copy = {};
8024
8025              for (p in result) {
8026                copy[p] = result[p] * factor;
8027              }
8028
8029              result = copy;
8030            } else {
8031              result *= factor;
8032            }
8033          }
8034
8035          return result;
8036        };
8037      } else {
8038        vars.end = snap;
8039      }
8040    }
8041
8042    if (max || max === 0) {
8043      vars.max = max;
8044    }
8045
8046    if (min || min === 0) {
8047      vars.min = min;
8048    }
8049
8050    if (forceZeroVelocity) {
8051      vars.velocity = 0;
8052    }
8053
8054    return vars;
8055  },
8056      _isClickable = function _isClickable(element) {
8057    var data;
8058    return !element || !element.getAttribute || element === _body$1 ? false : (data = element.getAttribute("data-clickable")) === "true" || data !== "false" && (_clickableTagExp.test(element.nodeName + "") || element.getAttribute("contentEditable") === "true") ? true : _isClickable(element.parentNode);
8059  },
8060      _setSelectable = function _setSelectable(elements, selectable) {
8061    var i = elements.length,
8062        e;
8063
8064    while (i--) {
8065      e = elements[i];
8066      e.ondragstart = e.onselectstart = selectable ? null : _emptyFunc$1;
8067      gsap$2.set(e, {
8068        lazy: true,
8069        userSelect: selectable ? "text" : "none"
8070      });
8071    }
8072  },
8073      _isFixed$1 = function _isFixed(element) {
8074    if (_getComputedStyle(element).position === "fixed") {
8075      return true;
8076    }
8077
8078    element = element.parentNode;
8079
8080    if (element && element.nodeType === 1) {
8081      return _isFixed(element);
8082    }
8083  },
8084      _supports3D$1,
8085      _addPaddingBR,
8086      ScrollProxy = function ScrollProxy(element, vars) {
8087    element = gsap$2.utils.toArray(element)[0];
8088    vars = vars || {};
8089    var content = document.createElement("div"),
8090        style = content.style,
8091        node = element.firstChild,
8092        offsetTop = 0,
8093        offsetLeft = 0,
8094        prevTop = element.scrollTop,
8095        prevLeft = element.scrollLeft,
8096        scrollWidth = element.scrollWidth,
8097        scrollHeight = element.scrollHeight,
8098        extraPadRight = 0,
8099        maxLeft = 0,
8100        maxTop = 0,
8101        elementWidth,
8102        elementHeight,
8103        contentHeight,
8104        nextNode,
8105        transformStart,
8106        transformEnd;
8107
8108    if (_supports3D$1 && vars.force3D !== false) {
8109      transformStart = "translate3d(";
8110      transformEnd = "px,0px)";
8111    } else if (_transformProp$2) {
8112      transformStart = "translate(";
8113      transformEnd = "px)";
8114    }
8115
8116    this.scrollTop = function (value, force) {
8117      if (!arguments.length) {
8118        return -this.top();
8119      }
8120
8121      this.top(-value, force);
8122    };
8123
8124    this.scrollLeft = function (value, force) {
8125      if (!arguments.length) {
8126        return -this.left();
8127      }
8128
8129      this.left(-value, force);
8130    };
8131
8132    this.left = function (value, force) {
8133      if (!arguments.length) {
8134        return -(element.scrollLeft + offsetLeft);
8135      }
8136
8137      var dif = element.scrollLeft - prevLeft,
8138          oldOffset = offsetLeft;
8139
8140      if ((dif > 2 || dif < -2) && !force) {
8141        prevLeft = element.scrollLeft;
8142        gsap$2.killTweensOf(this, {
8143          left: 1,
8144          scrollLeft: 1
8145        });
8146        this.left(-prevLeft);
8147
8148        if (vars.onKill) {
8149          vars.onKill();
8150        }
8151
8152        return;
8153      }
8154
8155      value = -value;
8156
8157      if (value < 0) {
8158        offsetLeft = value - 0.5 | 0;
8159        value = 0;
8160      } else if (value > maxLeft) {
8161        offsetLeft = value - maxLeft | 0;
8162        value = maxLeft;
8163      } else {
8164        offsetLeft = 0;
8165      }
8166
8167      if (offsetLeft || oldOffset) {
8168        if (!this._skip) {
8169          style[_transformProp$2] = transformStart + -offsetLeft + "px," + -offsetTop + transformEnd;
8170        }
8171
8172        if (offsetLeft + extraPadRight >= 0) {
8173          style.paddingRight = offsetLeft + extraPadRight + "px";
8174        }
8175      }
8176
8177      element.scrollLeft = value | 0;
8178      prevLeft = element.scrollLeft;
8179    };
8180
8181    this.top = function (value, force) {
8182      if (!arguments.length) {
8183        return -(element.scrollTop + offsetTop);
8184      }
8185
8186      var dif = element.scrollTop - prevTop,
8187          oldOffset = offsetTop;
8188
8189      if ((dif > 2 || dif < -2) && !force) {
8190        prevTop = element.scrollTop;
8191        gsap$2.killTweensOf(this, {
8192          top: 1,
8193          scrollTop: 1
8194        });
8195        this.top(-prevTop);
8196
8197        if (vars.onKill) {
8198          vars.onKill();
8199        }
8200
8201        return;
8202      }
8203
8204      value = -value;
8205
8206      if (value < 0) {
8207        offsetTop = value - 0.5 | 0;
8208        value = 0;
8209      } else if (value > maxTop) {
8210        offsetTop = value - maxTop | 0;
8211        value = maxTop;
8212      } else {
8213        offsetTop = 0;
8214      }
8215
8216      if (offsetTop || oldOffset) {
8217        if (!this._skip) {
8218          style[_transformProp$2] = transformStart + -offsetLeft + "px," + -offsetTop + transformEnd;
8219        }
8220      }
8221
8222      element.scrollTop = value | 0;
8223      prevTop = element.scrollTop;
8224    };
8225
8226    this.maxScrollTop = function () {
8227      return maxTop;
8228    };
8229
8230    this.maxScrollLeft = function () {
8231      return maxLeft;
8232    };
8233
8234    this.disable = function () {
8235      node = content.firstChild;
8236
8237      while (node) {
8238        nextNode = node.nextSibling;
8239        element.appendChild(node);
8240        node = nextNode;
8241      }
8242
8243      if (element === content.parentNode) {
8244        element.removeChild(content);
8245      }
8246    };
8247
8248    this.enable = function () {
8249      node = element.firstChild;
8250
8251      if (node === content) {
8252        return;
8253      }
8254
8255      while (node) {
8256        nextNode = node.nextSibling;
8257        content.appendChild(node);
8258        node = nextNode;
8259      }
8260
8261      element.appendChild(content);
8262      this.calibrate();
8263    };
8264
8265    this.calibrate = function (force) {
8266      var widthMatches = element.clientWidth === elementWidth,
8267          cs,
8268          x,
8269          y;
8270      prevTop = element.scrollTop;
8271      prevLeft = element.scrollLeft;
8272
8273      if (widthMatches && element.clientHeight === elementHeight && content.offsetHeight === contentHeight && scrollWidth === element.scrollWidth && scrollHeight === element.scrollHeight && !force) {
8274        return;
8275      }
8276
8277      if (offsetTop || offsetLeft) {
8278        x = this.left();
8279        y = this.top();
8280        this.left(-element.scrollLeft);
8281        this.top(-element.scrollTop);
8282      }
8283
8284      cs = _getComputedStyle(element);
8285
8286      if (!widthMatches || force) {
8287        style.display = "block";
8288        style.width = "auto";
8289        style.paddingRight = "0px";
8290        extraPadRight = Math.max(0, element.scrollWidth - element.clientWidth);
8291
8292        if (extraPadRight) {
8293          extraPadRight += parseFloat(cs.paddingLeft) + (_addPaddingBR ? parseFloat(cs.paddingRight) : 0);
8294        }
8295      }
8296
8297      style.display = "inline-block";
8298      style.position = "relative";
8299      style.overflow = "visible";
8300      style.verticalAlign = "top";
8301      style.boxSizing = "content-box";
8302      style.width = "100%";
8303      style.paddingRight = extraPadRight + "px";
8304
8305      if (_addPaddingBR) {
8306        style.paddingBottom = cs.paddingBottom;
8307      }
8308
8309      elementWidth = element.clientWidth;
8310      elementHeight = element.clientHeight;
8311      scrollWidth = element.scrollWidth;
8312      scrollHeight = element.scrollHeight;
8313      maxLeft = element.scrollWidth - elementWidth;
8314      maxTop = element.scrollHeight - elementHeight;
8315      contentHeight = content.offsetHeight;
8316      style.display = "block";
8317
8318      if (x || y) {
8319        this.left(x);
8320        this.top(y);
8321      }
8322    };
8323
8324    this.content = content;
8325    this.element = element;
8326    this._skip = false;
8327    this.enable();
8328  },
8329      _initCore$2 = function _initCore(required) {
8330    if (_windowExists$2() && document.body) {
8331      var nav = window && window.navigator;
8332      _win$3 = window;
8333      _doc$3 = document;
8334      _docElement$2 = _doc$3.documentElement;
8335      _body$1 = _doc$3.body;
8336      _tempDiv$1 = _createElement$1("div");
8337      _supportsPointer = !!window.PointerEvent;
8338      _placeholderDiv = _createElement$1("div");
8339      _placeholderDiv.style.cssText = "visibility:hidden;height:1px;top:-1px;pointer-events:none;position:relative;clear:both;cursor:grab";
8340      _defaultCursor = _placeholderDiv.style.cursor === "grab" ? "grab" : "move";
8341      _isAndroid = nav && nav.userAgent.toLowerCase().indexOf("android") !== -1;
8342      _isTouchDevice = "ontouchstart" in _docElement$2 && "orientation" in _win$3 || nav && (nav.MaxTouchPoints > 0 || nav.msMaxTouchPoints > 0);
8343
8344      _addPaddingBR = function () {
8345        var div = _createElement$1("div"),
8346            child = _createElement$1("div"),
8347            childStyle = child.style,
8348            parent = _body$1,
8349            val;
8350
8351        childStyle.display = "inline-block";
8352        childStyle.position = "relative";
8353        div.style.cssText = "width:90px;height:40px;padding:10px;overflow:auto;visibility:hidden";
8354        div.appendChild(child);
8355        parent.appendChild(div);
8356        val = child.offsetHeight + 18 > div.scrollHeight;
8357        parent.removeChild(div);
8358        return val;
8359      }();
8360
8361      _touchEventLookup = function (types) {
8362        var standard = types.split(","),
8363            converted = ("onpointerdown" in _tempDiv$1 ? "pointerdown,pointermove,pointerup,pointercancel" : "onmspointerdown" in _tempDiv$1 ? "MSPointerDown,MSPointerMove,MSPointerUp,MSPointerCancel" : types).split(","),
8364            obj = {},
8365            i = 4;
8366
8367        while (--i > -1) {
8368          obj[standard[i]] = converted[i];
8369          obj[converted[i]] = standard[i];
8370        }
8371
8372        try {
8373          _docElement$2.addEventListener("test", null, Object.defineProperty({}, "passive", {
8374            get: function get() {
8375              _supportsPassive = 1;
8376            }
8377          }));
8378        } catch (e) {}
8379
8380        return obj;
8381      }("touchstart,touchmove,touchend,touchcancel");
8382
8383      _addListener(_doc$3, "touchcancel", _emptyFunc$1);
8384
8385      _addListener(_win$3, "touchmove", _emptyFunc$1);
8386
8387      _body$1 && _body$1.addEventListener("touchstart", _emptyFunc$1);
8388
8389      _addListener(_doc$3, "contextmenu", function () {
8390        for (var p in _lookup) {
8391          if (_lookup[p].isPressed) {
8392            _lookup[p].endDrag();
8393          }
8394        }
8395      });
8396
8397      gsap$2 = _coreInitted$2 = _getGSAP$1();
8398    }
8399
8400    if (gsap$2) {
8401      InertiaPlugin = gsap$2.plugins.inertia;
8402
8403      _context$1 = gsap$2.core.context || function () {};
8404
8405      _checkPrefix = gsap$2.utils.checkPrefix;
8406      _transformProp$2 = _checkPrefix(_transformProp$2);
8407      _transformOriginProp$2 = _checkPrefix(_transformOriginProp$2);
8408      _toArray = gsap$2.utils.toArray;
8409      _getStyleSaver$1 = gsap$2.core.getStyleSaver;
8410      _supports3D$1 = !!_checkPrefix("perspective");
8411    } else if (required) {
8412      console.warn("Please gsap.registerPlugin(Draggable)");
8413    }
8414  };
8415
8416  var EventDispatcher = function () {
8417    function EventDispatcher(target) {
8418      this._listeners = {};
8419      this.target = target || this;
8420    }
8421
8422    var _proto = EventDispatcher.prototype;
8423
8424    _proto.addEventListener = function addEventListener(type, callback) {
8425      var list = this._listeners[type] || (this._listeners[type] = []);
8426
8427      if (!~list.indexOf(callback)) {
8428        list.push(callback);
8429      }
8430    };
8431
8432    _proto.removeEventListener = function removeEventListener(type, callback) {
8433      var list = this._listeners[type],
8434          i = list && list.indexOf(callback);
8435      i >= 0 && list.splice(i, 1);
8436    };
8437
8438    _proto.dispatchEvent = function dispatchEvent(type) {
8439      var _this = this;
8440
8441      var result;
8442      (this._listeners[type] || []).forEach(function (callback) {
8443        return callback.call(_this, {
8444          type: type,
8445          target: _this.target
8446        }) === false && (result = false);
8447      });
8448      return result;
8449    };
8450
8451    return EventDispatcher;
8452  }();
8453
8454  var Draggable = function (_EventDispatcher) {
8455    _inheritsLoose(Draggable, _EventDispatcher);
8456
8457    function Draggable(target, vars) {
8458      var _this2;
8459
8460      _this2 = _EventDispatcher.call(this) || this;
8461      _coreInitted$2 || _initCore$2(1);
8462      target = _toArray(target)[0];
8463      _this2.styles = _getStyleSaver$1 && _getStyleSaver$1(target, "transform,left,top");
8464
8465      if (!InertiaPlugin) {
8466        InertiaPlugin = gsap$2.plugins.inertia;
8467      }
8468
8469      _this2.vars = vars = _copy(vars || {});
8470      _this2.target = target;
8471      _this2.x = _this2.y = _this2.rotation = 0;
8472      _this2.dragResistance = parseFloat(vars.dragResistance) || 0;
8473      _this2.edgeResistance = isNaN(vars.edgeResistance) ? 1 : parseFloat(vars.edgeResistance) || 0;
8474      _this2.lockAxis = vars.lockAxis;
8475      _this2.autoScroll = vars.autoScroll || 0;
8476      _this2.lockedAxis = null;
8477      _this2.allowEventDefault = !!vars.allowEventDefault;
8478      gsap$2.getProperty(target, "x");
8479
8480      var type = (vars.type || "x,y").toLowerCase(),
8481          xyMode = ~type.indexOf("x") || ~type.indexOf("y"),
8482          rotationMode = type.indexOf("rotation") !== -1,
8483          xProp = rotationMode ? "rotation" : xyMode ? "x" : "left",
8484          yProp = xyMode ? "y" : "top",
8485          allowX = !!(~type.indexOf("x") || ~type.indexOf("left") || type === "scroll"),
8486          allowY = !!(~type.indexOf("y") || ~type.indexOf("top") || type === "scroll"),
8487          minimumMovement = vars.minimumMovement || 2,
8488          self = _assertThisInitialized(_this2),
8489          triggers = _toArray(vars.trigger || vars.handle || target),
8490          killProps = {},
8491          dragEndTime = 0,
8492          checkAutoScrollBounds = false,
8493          autoScrollMarginTop = vars.autoScrollMarginTop || 40,
8494          autoScrollMarginRight = vars.autoScrollMarginRight || 40,
8495          autoScrollMarginBottom = vars.autoScrollMarginBottom || 40,
8496          autoScrollMarginLeft = vars.autoScrollMarginLeft || 40,
8497          isClickable = vars.clickableTest || _isClickable,
8498          clickTime = 0,
8499          gsCache = target._gsap || gsap$2.core.getCache(target),
8500          isFixed = _isFixed$1(target),
8501          getPropAsNum = function getPropAsNum(property, unit) {
8502        return parseFloat(gsCache.get(target, property, unit));
8503      },
8504          ownerDoc = target.ownerDocument || _doc$3,
8505          enabled,
8506          scrollProxy,
8507          startPointerX,
8508          startPointerY,
8509          startElementX,
8510          startElementY,
8511          hasBounds,
8512          hasDragCallback,
8513          hasMoveCallback,
8514          maxX,
8515          minX,
8516          maxY,
8517          minY,
8518          touch,
8519          touchID,
8520          rotationOrigin,
8521          dirty,
8522          old,
8523          snapX,
8524          snapY,
8525          snapXY,
8526          isClicking,
8527          touchEventTarget,
8528          matrix,
8529          interrupted,
8530          allowNativeTouchScrolling,
8531          touchDragAxis,
8532          isDispatching,
8533          clickDispatch,
8534          trustedClickDispatch,
8535          isPreventingDefault,
8536          innerMatrix,
8537          dragged,
8538          onContextMenu = function onContextMenu(e) {
8539        _preventDefault(e);
8540
8541        e.stopImmediatePropagation && e.stopImmediatePropagation();
8542        return false;
8543      },
8544          render = function render(suppressEvents) {
8545        if (self.autoScroll && self.isDragging && (checkAutoScrollBounds || dirty)) {
8546          var e = target,
8547              autoScrollFactor = self.autoScroll * 15,
8548              parent,
8549              isRoot,
8550              rect,
8551              pointerX,
8552              pointerY,
8553              changeX,
8554              changeY,
8555              gap;
8556          checkAutoScrollBounds = false;
8557          _windowProxy.scrollTop = _win$3.pageYOffset != null ? _win$3.pageYOffset : ownerDoc.documentElement.scrollTop != null ? ownerDoc.documentElement.scrollTop : ownerDoc.body.scrollTop;
8558          _windowProxy.scrollLeft = _win$3.pageXOffset != null ? _win$3.pageXOffset : ownerDoc.documentElement.scrollLeft != null ? ownerDoc.documentElement.scrollLeft : ownerDoc.body.scrollLeft;
8559          pointerX = self.pointerX - _windowProxy.scrollLeft;
8560          pointerY = self.pointerY - _windowProxy.scrollTop;
8561
8562          while (e && !isRoot) {
8563            isRoot = _isRoot(e.parentNode);
8564            parent = isRoot ? _windowProxy : e.parentNode;
8565            rect = isRoot ? {
8566              bottom: Math.max(_docElement$2.clientHeight, _win$3.innerHeight || 0),
8567              right: Math.max(_docElement$2.clientWidth, _win$3.innerWidth || 0),
8568              left: 0,
8569              top: 0
8570            } : parent.getBoundingClientRect();
8571            changeX = changeY = 0;
8572
8573            if (allowY) {
8574              gap = parent._gsMaxScrollY - parent.scrollTop;
8575
8576              if (gap < 0) {
8577                changeY = gap;
8578              } else if (pointerY > rect.bottom - autoScrollMarginBottom && gap) {
8579                checkAutoScrollBounds = true;
8580                changeY = Math.min(gap, autoScrollFactor * (1 - Math.max(0, rect.bottom - pointerY) / autoScrollMarginBottom) | 0);
8581              } else if (pointerY < rect.top + autoScrollMarginTop && parent.scrollTop) {
8582                checkAutoScrollBounds = true;
8583                changeY = -Math.min(parent.scrollTop, autoScrollFactor * (1 - Math.max(0, pointerY - rect.top) / autoScrollMarginTop) | 0);
8584              }
8585
8586              if (changeY) {
8587                parent.scrollTop += changeY;
8588              }
8589            }
8590
8591            if (allowX) {
8592              gap = parent._gsMaxScrollX - parent.scrollLeft;
8593
8594              if (gap < 0) {
8595                changeX = gap;
8596              } else if (pointerX > rect.right - autoScrollMarginRight && gap) {
8597                checkAutoScrollBounds = true;
8598                changeX = Math.min(gap, autoScrollFactor * (1 - Math.max(0, rect.right - pointerX) / autoScrollMarginRight) | 0);
8599              } else if (pointerX < rect.left + autoScrollMarginLeft && parent.scrollLeft) {
8600                checkAutoScrollBounds = true;
8601                changeX = -Math.min(parent.scrollLeft, autoScrollFactor * (1 - Math.max(0, pointerX - rect.left) / autoScrollMarginLeft) | 0);
8602              }
8603
8604              if (changeX) {
8605                parent.scrollLeft += changeX;
8606              }
8607            }
8608
8609            if (isRoot && (changeX || changeY)) {
8610              _win$3.scrollTo(parent.scrollLeft, parent.scrollTop);
8611
8612              setPointerPosition(self.pointerX + changeX, self.pointerY + changeY);
8613            }
8614
8615            e = parent;
8616          }
8617        }
8618
8619        if (dirty) {
8620          var x = self.x,
8621              y = self.y;
8622
8623          if (rotationMode) {
8624            self.deltaX = x - parseFloat(gsCache.rotation);
8625            self.rotation = x;
8626            gsCache.rotation = x + "deg";
8627            gsCache.renderTransform(1, gsCache);
8628          } else {
8629            if (scrollProxy) {
8630              if (allowY) {
8631                self.deltaY = y - scrollProxy.top();
8632                scrollProxy.top(y);
8633              }
8634
8635              if (allowX) {
8636                self.deltaX = x - scrollProxy.left();
8637                scrollProxy.left(x);
8638              }
8639            } else if (xyMode) {
8640              if (allowY) {
8641                self.deltaY = y - parseFloat(gsCache.y);
8642                gsCache.y = y + "px";
8643              }
8644
8645              if (allowX) {
8646                self.deltaX = x - parseFloat(gsCache.x);
8647                gsCache.x = x + "px";
8648              }
8649
8650              gsCache.renderTransform(1, gsCache);
8651            } else {
8652              if (allowY) {
8653                self.deltaY = y - parseFloat(target.style.top || 0);
8654                target.style.top = y + "px";
8655              }
8656
8657              if (allowX) {
8658                self.deltaX = x - parseFloat(target.style.left || 0);
8659                target.style.left = x + "px";
8660              }
8661            }
8662          }
8663
8664          if (hasDragCallback && !suppressEvents && !isDispatching) {
8665            isDispatching = true;
8666
8667            if (_dispatchEvent(self, "drag", "onDrag") === false) {
8668              if (allowX) {
8669                self.x -= self.deltaX;
8670              }
8671
8672              if (allowY) {
8673                self.y -= self.deltaY;
8674              }
8675
8676              render(true);
8677            }
8678
8679            isDispatching = false;
8680          }
8681        }
8682
8683        dirty = false;
8684      },
8685          syncXY = function syncXY(skipOnUpdate, skipSnap) {
8686        var x = self.x,
8687            y = self.y,
8688            snappedValue,
8689            cs;
8690
8691        if (!target._gsap) {
8692          gsCache = gsap$2.core.getCache(target);
8693        }
8694
8695        gsCache.uncache && gsap$2.getProperty(target, "x");
8696
8697        if (xyMode) {
8698          self.x = parseFloat(gsCache.x);
8699          self.y = parseFloat(gsCache.y);
8700        } else if (rotationMode) {
8701          self.x = self.rotation = 
8701parseFloat(gsCache.rotation
vendor: 18,383 bytes, lines 8701-9251
8701);
8702        } else if (scrollProxy) {
8703          self.y = scrollProxy.top();
8704          self.x = scrollProxy.left();
8705        } else {
8706          self.y = parseFloat(target.style.top || (cs = _getComputedStyle(target)) && cs.top) || 0;
8707          self.x = parseFloat(target.style.left || (cs || {}).left) || 0;
8708        }
8709
8710        if ((snapX || snapY || snapXY) && !skipSnap && (self.isDragging || self.isThrowing)) {
8711          if (snapXY) {
8712            _temp1.x = self.x;
8713            _temp1.y = self.y;
8714            snappedValue = snapXY(_temp1);
8715
8716            if (snappedValue.x !== self.x) {
8717              self.x = snappedValue.x;
8718              dirty = true;
8719            }
8720
8721            if (snappedValue.y !== self.y) {
8722              self.y = snappedValue.y;
8723              dirty = true;
8724            }
8725          }
8726
8727          if (snapX) {
8728            snappedValue = snapX(self.x);
8729
8730            if (snappedValue !== self.x) {
8731              self.x = snappedValue;
8732
8733              if (rotationMode) {
8734                self.rotation = snappedValue;
8735              }
8736
8737              dirty = true;
8738            }
8739          }
8740
8741          if (snapY) {
8742            snappedValue = snapY(self.y);
8743
8744            if (snappedValue !== self.y) {
8745              self.y = snappedValue;
8746            }
8747
8748            dirty = true;
8749          }
8750        }
8751
8752        dirty && render(true);
8753
8754        if (!skipOnUpdate) {
8755          self.deltaX = self.x - x;
8756          self.deltaY = self.y - y;
8757
8758          _dispatchEvent(self, "throwupdate", "onThrowUpdate");
8759        }
8760      },
8761          buildSnapFunc = function buildSnapFunc(snap, min, max, factor) {
8762        if (min == null) {
8763          min = -_bigNum$3;
8764        }
8765
8766        if (max == null) {
8767          max = _bigNum$3;
8768        }
8769
8770        if (_isFunction$1(snap)) {
8771          return function (n) {
8772            var edgeTolerance = !self.isPressed ? 1 : 1 - self.edgeResistance;
8773            return snap.call(self, (n > max ? max + (n - max) * edgeTolerance : n < min ? min + (n - min) * edgeTolerance : n) * factor) * factor;
8774          };
8775        }
8776
8777        if (_isArray$1(snap)) {
8778          return function (n) {
8779            var i = snap.length,
8780                closest = 0,
8781                absDif = _bigNum$3,
8782                val,
8783                dif;
8784
8785            while (--i > -1) {
8786              val = snap[i];
8787              dif = val - n;
8788
8789              if (dif < 0) {
8790                dif = -dif;
8791              }
8792
8793              if (dif < absDif && val >= min && val <= max) {
8794                closest = i;
8795                absDif = dif;
8796              }
8797            }
8798
8799            return snap[closest];
8800          };
8801        }
8802
8803        return isNaN(snap) ? function (n) {
8804          return n;
8805        } : function () {
8806          return snap * factor;
8807        };
8808      },
8809          buildPointSnapFunc = function buildPointSnapFunc(snap, minX, maxX, minY, maxY, radius, factor) {
8810        radius = radius && radius < _bigNum$3 ? radius * radius : _bigNum$3;
8811
8812        if (_isFunction$1(snap)) {
8813          return function (point) {
8814            var edgeTolerance = !self.isPressed ? 1 : 1 - self.edgeResistance,
8815                x = point.x,
8816                y = point.y,
8817                result,
8818                dx,
8819                dy;
8820            point.x = x = x > maxX ? maxX + (x - maxX) * edgeTolerance : x < minX ? minX + (x - minX) * edgeTolerance : x;
8821            point.y = y = y > maxY ? maxY + (y - maxY) * edgeTolerance : y < minY ? minY + (y - minY) * edgeTolerance : y;
8822            result = snap.call(self, point);
8823
8824            if (result !== point) {
8825              point.x = result.x;
8826              point.y = result.y;
8827            }
8828
8829            if (factor !== 1) {
8830              point.x *= factor;
8831              point.y *= factor;
8832            }
8833
8834            if (radius < _bigNum$3) {
8835              dx = point.x - x;
8836              dy = point.y - y;
8837
8838              if (dx * dx + dy * dy > radius) {
8839                point.x = x;
8840                point.y = y;
8841              }
8842            }
8843
8844            return point;
8845          };
8846        }
8847
8848        if (_isArray$1(snap)) {
8849          return function (p) {
8850            var i = snap.length,
8851                closest = 0,
8852                minDist = _bigNum$3,
8853                x,
8854                y,
8855                point,
8856                dist;
8857
8858            while (--i > -1) {
8859              point = snap[i];
8860              x = point.x - p.x;
8861              y = point.y - p.y;
8862              dist = x * x + y * y;
8863
8864              if (dist < minDist) {
8865                closest = i;
8866                minDist = dist;
8867              }
8868            }
8869
8870            return minDist <= radius ? snap[closest] : p;
8871          };
8872        }
8873
8874        return function (n) {
8875          return n;
8876        };
8877      },
8878          calculateBounds = function calculateBounds() {
8879        var bounds, targetBounds, snap, snapIsRaw;
8880        hasBounds = false;
8881
8882        if (scrollProxy) {
8883          scrollProxy.calibrate();
8884          self.minX = minX = -scrollProxy.maxScrollLeft();
8885          self.minY = minY = -scrollProxy.maxScrollTop();
8886          self.maxX = maxX = self.maxY = maxY = 0;
8887          hasBounds = true;
8888        } else if (!!vars.bounds) {
8889          bounds = _getBounds(vars.bounds, target.parentNode);
8890
8891          if (rotationMode) {
8892            self.minX = minX = bounds.left;
8893            self.maxX = maxX = bounds.left + bounds.width;
8894            self.minY = minY = self.maxY = maxY = 0;
8895          } else if (!_isUndefined$2(vars.bounds.maxX) || !_isUndefined$2(vars.bounds.maxY)) {
8896            bounds = vars.bounds;
8897            self.minX = minX = bounds.minX;
8898            self.minY = minY = bounds.minY;
8899            self.maxX = maxX = bounds.maxX;
8900            self.maxY = maxY = bounds.maxY;
8901          } else {
8902            targetBounds = _getBounds(target, target.parentNode);
8903            self.minX = minX = Math.round(getPropAsNum(xProp, "px") + bounds.left - targetBounds.left);
8904            self.minY = minY = Math.round(getPropAsNum(yProp, "px") + bounds.top - targetBounds.top);
8905            self.maxX = maxX = Math.round(minX + (bounds.width - targetBounds.width));
8906            self.maxY = maxY = Math.round(minY + (bounds.height - targetBounds.height));
8907          }
8908
8909          if (minX > maxX) {
8910            self.minX = maxX;
8911            self.maxX = maxX = minX;
8912            minX = self.minX;
8913          }
8914
8915          if (minY > maxY) {
8916            self.minY = maxY;
8917            self.maxY = maxY = minY;
8918            minY = self.minY;
8919          }
8920
8921          if (rotationMode) {
8922            self.minRotation = minX;
8923            self.maxRotation = maxX;
8924          }
8925
8926          hasBounds = true;
8927        }
8928
8929        if (vars.liveSnap) {
8930          snap = vars.liveSnap === true ? vars.snap || {} : vars.liveSnap;
8931          snapIsRaw = _isArray$1(snap) || _isFunction$1(snap);
8932
8933          if (rotationMode) {
8934            snapX = buildSnapFunc(snapIsRaw ? snap : snap.rotation, minX, maxX, 1);
8935            snapY = null;
8936          } else {
8937            if (snap.points) {
8938              snapXY = buildPointSnapFunc(snapIsRaw ? snap : snap.points, minX, maxX, minY, maxY, snap.radius, scrollProxy ? -1 : 1);
8939            } else {
8940              if (allowX) {
8941                snapX = buildSnapFunc(snapIsRaw ? snap : snap.x || snap.left || snap.scrollLeft, minX, maxX, scrollProxy ? -1 : 1);
8942              }
8943
8944              if (allowY) {
8945                snapY = buildSnapFunc(snapIsRaw ? snap : snap.y || snap.top || snap.scrollTop, minY, maxY, scrollProxy ? -1 : 1);
8946              }
8947            }
8948          }
8949        }
8950      },
8951          onThrowComplete = function onThrowComplete() {
8952        self.isThrowing = false;
8953
8954        _dispatchEvent(self, "throwcomplete", "onThrowComplete");
8955      },
8956          onThrowInterrupt = function onThrowInterrupt() {
8957        self.isThrowing = false;
8958      },
8959          animate = function animate(inertia, forceZeroVelocity) {
8960        var snap, snapIsRaw, tween, overshootTolerance;
8961
8962        if (inertia && InertiaPlugin) {
8963          if (inertia === true) {
8964            snap = vars.snap || vars.liveSnap || {};
8965            snapIsRaw = _isArray$1(snap) || _isFunction$1(snap);
8966            inertia = {
8967              resistance: (vars.throwResistance || vars.resistance || 1000) / (rotationMode ? 10 : 1)
8968            };
8969
8970            if (rotationMode) {
8971              inertia.rotation = _parseInertia(self, snapIsRaw ? snap : snap.rotation, maxX, minX, 1, forceZeroVelocity);
8972            } else {
8973              if (allowX) {
8974                inertia[xProp] = _parseInertia(self, snapIsRaw ? snap : snap.points || snap.x || snap.left, maxX, minX, scrollProxy ? -1 : 1, forceZeroVelocity || self.lockedAxis === "x");
8975              }
8976
8977              if (allowY) {
8978                inertia[yProp] = _parseInertia(self, snapIsRaw ? snap : snap.points || snap.y || snap.top, maxY, minY, scrollProxy ? -1 : 1, forceZeroVelocity || self.lockedAxis === "y");
8979              }
8980
8981              if (snap.points || _isArray$1(snap) && _isObject$1(snap[0])) {
8982                inertia.linkedProps = xProp + "," + yProp;
8983                inertia.radius = snap.radius;
8984              }
8985            }
8986          }
8987
8988          self.isThrowing = true;
8989          overshootTolerance = !isNaN(vars.overshootTolerance) ? vars.overshootTolerance : vars.edgeResistance === 1 ? 0 : 1 - self.edgeResistance + 0.2;
8990
8991          if (!inertia.duration) {
8992            inertia.duration = {
8993              max: Math.max(vars.minDuration || 0, "maxDuration" in vars ? vars.maxDuration : 2),
8994              min: !isNaN(vars.minDuration) ? vars.minDuration : overshootTolerance === 0 || _isObject$1(inertia) && inertia.resistance > 1000 ? 0 : 0.5,
8995              overshoot: overshootTolerance
8996            };
8997          }
8998
8999          self.tween = tween = gsap$2.to(scrollProxy || target, {
9000            inertia: inertia,
9001            data: "_draggable",
9002            inherit: false,
9003            onComplete: onThrowComplete,
9004            onInterrupt: onThrowInterrupt,
9005            onUpdate: vars.fastMode ? _dispatchEvent : syncXY,
9006            onUpdateParams: vars.fastMode ? [self, "onthrowupdate", "onThrowUpdate"] : snap && snap.radius ? [false, true] : []
9007          });
9008
9009          if (!vars.fastMode) {
9010            if (scrollProxy) {
9011              scrollProxy._skip = true;
9012            }
9013
9014            tween.render(1e9, true, true);
9015            syncXY(true, true);
9016            self.endX = self.x;
9017            self.endY = self.y;
9018
9019            if (rotationMode) {
9020              self.endRotation = self.x;
9021            }
9022
9023            tween.play(0);
9024            syncXY(true, true);
9025
9026            if (scrollProxy) {
9027              scrollProxy._skip = false;
9028            }
9029          }
9030        } else if (hasBounds) {
9031          self.applyBounds();
9032        }
9033      },
9034          updateMatrix = function updateMatrix(shiftStart) {
9035        var start = matrix,
9036            p;
9037        matrix = getGlobalMatrix(target.parentNode, true);
9038
9039        if (shiftStart && self.isPressed && !matrix.equals(start || new Matrix2D())) {
9040          p = start.inverse().apply({
9041            x: startPointerX,
9042            y: startPointerY
9043          });
9044          matrix.apply(p, p);
9045          startPointerX = p.x;
9046          startPointerY = p.y;
9047        }
9048
9049        if (matrix.equals(_identityMatrix$1)) {
9050          matrix = null;
9051        }
9052      },
9053          recordStartPositions = function recordStartPositions() {
9054        var edgeTolerance = 1 - self.edgeResistance,
9055            offsetX = isFixed ? _getDocScrollLeft$1(ownerDoc) : 0,
9056            offsetY = isFixed ? _getDocScrollTop$1(ownerDoc) : 0,
9057            parsedOrigin,
9058            x,
9059            y;
9060
9061        if (xyMode) {
9062          gsCache.x = getPropAsNum(xProp, "px") + "px";
9063          gsCache.y = getPropAsNum(yProp, "px") + "px";
9064          gsCache.renderTransform();
9065        }
9066
9067        updateMatrix(false);
9068        _point1.x = self.pointerX - offsetX;
9069        _point1.y = self.pointerY - offsetY;
9070        matrix && matrix.apply(_point1, _point1);
9071        startPointerX = _point1.x;
9072        startPointerY = _point1.y;
9073
9074        if (dirty) {
9075          setPointerPosition(self.pointerX, self.pointerY);
9076          render(true);
9077        }
9078
9079        innerMatrix = getGlobalMatrix(target);
9080
9081        if (scrollProxy) {
9082          calculateBounds();
9083          startElementY = scrollProxy.top();
9084          startElementX = scrollProxy.left();
9085        } else {
9086          if (isTweening()) {
9087            syncXY(true, true);
9088            calculateBounds();
9089          } else {
9090            self.applyBounds();
9091          }
9092
9093          if (rotationMode) {
9094            parsedOrigin = target.ownerSVGElement ? [gsCache.xOrigin - target.getBBox().x, gsCache.yOrigin - target.getBBox().y] : (_getComputedStyle(target)[_transformOriginProp$2] || "0 0").split(" ");
9095            rotationOrigin = self.rotationOrigin = getGlobalMatrix(target).apply({
9096              x: parseFloat(parsedOrigin[0]) || 0,
9097              y: parseFloat(parsedOrigin[1]) || 0
9098            });
9099            syncXY(true, true);
9100            x = self.pointerX - rotationOrigin.x - offsetX;
9101            y = rotationOrigin.y - self.pointerY + offsetY;
9102            startElementX = self.x;
9103            startElementY = self.y = Math.atan2(y, x) * _RAD2DEG$2;
9104          } else {
9105            startElementY = getPropAsNum(yProp, "px");
9106            startElementX = getPropAsNum(xProp, "px");
9107          }
9108        }
9109
9110        if (hasBounds && edgeTolerance) {
9111          if (startElementX > maxX) {
9112            startElementX = maxX + (startElementX - maxX) / edgeTolerance;
9113          } else if (startElementX < minX) {
9114            startElementX = minX - (minX - startElementX) / edgeTolerance;
9115          }
9116
9117          if (!rotationMode) {
9118            if (startElementY > maxY) {
9119              startElementY = maxY + (startElementY - maxY) / edgeTolerance;
9120            } else if (startElementY < minY) {
9121              startElementY = minY - (minY - startElementY) / edgeTolerance;
9122            }
9123          }
9124        }
9125
9126        self.startX = startElementX = _round$3(startElementX);
9127        self.startY = startElementY = _round$3(startElementY);
9128      },
9129          isTweening = function isTweening() {
9130        return self.tween && self.tween.isActive();
9131      },
9132          removePlaceholder = function removePlaceholder() {
9133        if (_placeholderDiv.parentNode && !isTweening() && !self.isDragging) {
9134          _placeholderDiv.parentNode.removeChild(_placeholderDiv);
9135        }
9136      },
9137          onPress = function onPress(e, force) {
9138        var i;
9139
9140        if (!enabled || self.isPressed || !e || (e.type === "mousedown" || e.type === "pointerdown") && !force && _getTime() - clickTime < 30 && _touchEventLookup[self.pointerEvent.type]) {
9141          isPreventingDefault && e && enabled && _preventDefault(e);
9142          return;
9143        }
9144
9145        interrupted = isTweening();
9146        dragged = false;
9147        self.pointerEvent = e;
9148
9149        if (_touchEventLookup[e.type]) {
9150          touchEventTarget = ~e.type.indexOf("touch") ? e.currentTarget || e.target : ownerDoc;
9151
9152          _addListener(touchEventTarget, "touchend", onRelease);
9153
9154          _addListener(touchEventTarget, "touchmove", onMove);
9155
9156          _addListener(touchEventTarget, "touchcancel", onRelease);
9157
9158          _addListener(ownerDoc, "touchstart", _onMultiTouchDocument);
9159        } else {
9160          touchEventTarget = null;
9161
9162          _addListener(ownerDoc, "mousemove", onMove);
9163        }
9164
9165        touchDragAxis = null;
9166
9167        if (!_supportsPointer || !touchEventTarget) {
9168          _addListener(ownerDoc, "mouseup", onRelease);
9169
9170          e && e.target && _addListener(e.target, "mouseup", onRelease);
9171        }
9172
9173        isClicking = isClickable.call(self, e.target) && vars.dragClickables === false && !force;
9174
9175        if (isClicking) {
9176          _addListener(e.target, "change", onRelease);
9177
9178          _dispatchEvent(self, "pressInit", "onPressInit");
9179
9180          _dispatchEvent(self, "press", "onPress");
9181
9182          _setSelectable(triggers, true);
9183
9184          isPreventingDefault = false;
9185          return;
9186        }
9187
9188        allowNativeTouchScrolling = !touchEventTarget || allowX === allowY || self.vars.allowNativeTouchScrolling === false || self.vars.allowContextMenu && e && (e.ctrlKey || e.which > 2) ? false : allowX ? "y" : "x";
9189        isPreventingDefault = !allowNativeTouchScrolling && !self.allowEventDefault;
9190
9191        if (isPreventingDefault) {
9192          _preventDefault(e);
9193
9194          _addListener(_win$3, "touchforcechange", _preventDefault);
9195        }
9196
9197        if (e.changedTouches) {
9198          e = touch = e.changedTouches[0];
9199          touchID = e.identifier;
9200        } else if (e.pointerId) {
9201          touchID = e.pointerId;
9202        } else {
9203          touch = touchID = null;
9204        }
9205
9206        _dragCount$1++;
9207
9208        _addToRenderQueue(render);
9209
9210        startPointerY = self.pointerY = e.pageY;
9211        startPointerX = self.pointerX = e.pageX;
9212
9213        _dispatchEvent(self, "pressInit", "onPressInit");
9214
9215        if (allowNativeTouchScrolling || self.autoScroll) {
9216          _recordMaxScrolls(target.parentNode);
9217        }
9218
9219        if (target.parentNode && self.autoScroll && !scrollProxy && !rotationMode && target.parentNode._gsMaxScrollX && !_placeholderDiv.parentNode && !target.getBBox) {
9220          _placeholderDiv.style.width = target.parentNode.scrollWidth + "px";
9221          target.parentNode.appendChild(_placeholderDiv);
9222        }
9223
9224        recordStartPositions();
9225        self.tween && self.tween.kill();
9226        self.isThrowing = false;
9227        gsap$2.killTweensOf(scrollProxy || target, killProps, true);
9228        scrollProxy && gsap$2.killTweensOf(target, {
9229          scrollTo: 1
9230        }, true);
9231        self.tween = self.lockedAxis = null;
9232
9233        if (vars.zIndexBoost || !rotationMode && !scrollProxy && vars.zIndexBoost !== false) {
9234          target.style.zIndex = Draggable.zIndex++;
9235        }
9236
9237        self.isPressed = true;
9238        hasDragCallback = !!(vars.onDrag || self._listeners.drag);
9239        hasMoveCallback = !!(vars.onMove || self._listeners.move);
9240
9241        if (vars.cursor !== false || vars.activeCursor) {
9242          i = triggers.length;
9243
9244          while (--i > -1) {
9245            gsap$2.set(triggers[i], {
9246              cursor: vars.activeCursor || vars.cursor || (_defaultCursor === "grab" ? "grabbing" : _defaultCursor)
9247            });
9248          }
9249        }
9250
9251        _dispatchEvent(self, "press", "onPress");
vendor: 2,449 bytes, lines 9252-9319
9252      },
9253          onMove = function onMove(e) {
9254        var originalEvent = e,
9255            touches,
9256            pointerX,
9257            pointerY,
9258            i,
9259            dx,
9260            dy;
9261
9262        if (!enabled || _isMultiTouching || !self.isPressed || !e) {
9263          isPreventingDefault && e && enabled && _preventDefault(e);
9264          return;
9265        }
9266
9267        self.pointerEvent = e;
9268        touches = e.changedTouches;
9269
9270        if (touches) {
9271          e = touches[0];
9272
9273          if (e !== touch && e.identifier !== touchID) {
9274            i = touches.length;
9275
9276            while (--i > -1 && (e = touches[i]).identifier !== touchID && e.target !== target) {}
9277
9278            if (i < 0) {
9279              return;
9280            }
9281          }
9282        } else if (e.pointerId && touchID && e.pointerId !== touchID) {
9283          return;
9284        }
9285
9286        if (touchEventTarget && allowNativeTouchScrolling && !touchDragAxis) {
9287          _point1.x = e.pageX - (isFixed ? _getDocScrollLeft$1(ownerDoc) : 0);
9288          _point1.y = e.pageY - (isFixed ? _getDocScrollTop$1(ownerDoc) : 0);
9289          matrix && matrix.apply(_point1, _point1);
9290          pointerX = _point1.x;
9291          pointerY = _point1.y;
9292          dx = Math.abs(pointerX - startPointerX);
9293          dy = Math.abs(pointerY - startPointerY);
9294
9295          if (dx !== dy && (dx > minimumMovement || dy > minimumMovement) || _isAndroid && allowNativeTouchScrolling === touchDragAxis) {
9296            touchDragAxis = dx > dy && allowX ? "x" : "y";
9297
9298            if (allowNativeTouchScrolling && touchDragAxis !== allowNativeTouchScrolling) {
9299              _addListener(_win$3, "touchforcechange", _preventDefault);
9300            }
9301
9302            if (self.vars.lockAxisOnTouchScroll !== false && allowX && allowY) {
9303              self.lockedAxis = touchDragAxis === "x" ? "y" : "x";
9304              _isFunction$1(self.vars.onLockAxis) && self.vars.onLockAxis.call(self, originalEvent);
9305            }
9306
9307            if (_isAndroid && allowNativeTouchScrolling === touchDragAxis) {
9308              onRelease(originalEvent);
9309              return;
9310            }
9311          }
9312        }
9313
9314        if (!self.allowEventDefault && (!allowNativeTouchScrolling || touchDragAxis && allowNativeTouchScrolling !== touchDragAxis) && originalEvent.cancelable !== false) {
9315          _preventDefault(originalEvent);
9316
9317          isPreventingDefault = true;
9318        } else if (isPreventingDefault) {
9319          isPreventingDefault = false;
vendor: 3,933 bytes, lines 9320-9448
9320        }
9321
9322        if (self.autoScroll) {
9323          checkAutoScrollBounds = true;
9324        }
9325
9326        setPointerPosition(e.pageX, e.pageY, hasMoveCallback);
9327      },
9328          setPointerPosition = function setPointerPosition(pointerX, pointerY, invokeOnMove) {
9329        var dragTolerance = 1 - self.dragResistance,
9330            edgeTolerance = 1 - self.edgeResistance,
9331            prevPointerX = self.pointerX,
9332            prevPointerY = self.pointerY,
9333            prevStartElementY = startElementY,
9334            prevX = self.x,
9335            prevY = self.y,
9336            prevEndX = self.endX,
9337            prevEndY = self.endY,
9338            prevEndRotation = self.endRotation,
9339            prevDirty = dirty,
9340            xChange,
9341            yChange,
9342            x,
9343            y,
9344            dif,
9345            temp;
9346        self.pointerX = pointerX;
9347        self.pointerY = pointerY;
9348
9349        if (isFixed) {
9350          pointerX -= _getDocScrollLeft$1(ownerDoc);
9351          pointerY -= _getDocScrollTop$1(ownerDoc);
9352        }
9353
9354        if (rotationMode) {
9355          y = Math.atan2(rotationOrigin.y - pointerY, pointerX - rotationOrigin.x) * _RAD2DEG$2;
9356          dif = self.y - y;
9357
9358          if (dif > 180) {
9359            startElementY -= 360;
9360            self.y = y;
9361          } else if (dif < -180) {
9362            startElementY += 360;
9363            self.y = y;
9364          }
9365
9366          if (self.x !== startElementX || Math.abs(startElementY - y) > minimumMovement) {
9367            self.y = y;
9368            x = startElementX + (startElementY - y) * dragTolerance;
9369          } else {
9370            x = startElementX;
9371          }
9372        } else {
9373          if (matrix) {
9374            temp = pointerX * matrix.a + pointerY * matrix.c + matrix.e;
9375            pointerY = pointerX * matrix.b + pointerY * matrix.d + matrix.f;
9376            pointerX = temp;
9377          }
9378
9379          yChange = pointerY - startPointerY;
9380          xChange = pointerX - startPointerX;
9381
9382          if (yChange < minimumMovement && yChange > -minimumMovement) {
9383            yChange = 0;
9384          }
9385
9386          if (xChange < minimumMovement && xChange > -minimumMovement) {
9387            xChange = 0;
9388          }
9389
9390          if ((self.lockAxis || self.lockedAxis) && (xChange || yChange)) {
9391            temp = self.lockedAxis;
9392
9393            if (!temp) {
9394              self.lockedAxis = temp = allowX && Math.abs(xChange) > Math.abs(yChange) ? "y" : allowY ? "x" : null;
9395
9396              if (temp && _isFunction$1(self.vars.onLockAxis)) {
9397                self.vars.onLockAxis.call(self, self.pointerEvent);
9398              }
9399            }
9400
9401            if (temp === "y") {
9402              yChange = 0;
9403            } else if (temp === "x") {
9404              xChange = 0;
9405            }
9406          }
9407
9408          x = _round$3(startElementX + xChange * dragTolerance);
9409          y = _round$3(startElementY + yChange * dragTolerance);
9410        }
9411
9412        if ((snapX || snapY || snapXY) && (self.x !== x || self.y !== y && !rotationMode)) {
9413          if (snapXY) {
9414            _temp1.x = x;
9415            _temp1.y = y;
9416            temp = snapXY(_temp1);
9417            x = _round$3(temp.x);
9418            y = _round$3(temp.y);
9419          }
9420
9421          if (snapX) {
9422            x = _round$3(snapX(x));
9423          }
9424
9425          if (snapY) {
9426            y = _round$3(snapY(y));
9427          }
9428        }
9429
9430        if (hasBounds) {
9431          if (x > maxX) {
9432            x = maxX + Math.round((x - maxX) * edgeTolerance);
9433          } else if (x < minX) {
9434            x = minX + Math.round((x - minX) * edgeTolerance);
9435          }
9436
9437          if (!rotationMode) {
9438            if (y > maxY) {
9439              y = Math.round(maxY + (y - maxY) * edgeTolerance);
9440            } else if (y < minY) {
9441              y = Math.round(minY + (y - minY) * edgeTolerance);
9442            }
9443          }
9444        }
9445
9446        if (self.x !== x || self.y !== y && !rotationMode) {
9447          if (rotationMode) {
9448            self.endRotation = self.x = self.endX = x
vendor: 13,674 bytes, lines 9448-9855
9448;
9449            dirty = true;
9450          } else {
9451            if (allowY) {
9452              self.y = self.endY = y;
9453              dirty = true;
9454            }
9455
9456            if (allowX) {
9457              self.x = self.endX = x;
9458              dirty = true;
9459            }
9460          }
9461
9462          if (!invokeOnMove || _dispatchEvent(self, "move", "onMove") !== false) {
9463            if (!self.isDragging && self.isPressed) {
9464              self.isDragging = dragged = true;
9465
9466              _dispatchEvent(self, "dragstart", "onDragStart");
9467            }
9468          } else {
9469            self.pointerX = prevPointerX;
9470            self.pointerY = prevPointerY;
9471            startElementY = prevStartElementY;
9472            self.x = prevX;
9473            self.y = prevY;
9474            self.endX = prevEndX;
9475            self.endY = prevEndY;
9476            self.endRotation = prevEndRotation;
9477            dirty = prevDirty;
9478          }
9479        }
9480      },
9481          onRelease = function onRelease(e, force) {
9482        if (!enabled || !self.isPressed || e && touchID != null && !force && (e.pointerId && e.pointerId !== touchID && e.target !== target || e.changedTouches && !_hasTouchID(e.changedTouches, touchID))) {
9483          isPreventingDefault && e && enabled && _preventDefault(e);
9484          return;
9485        }
9486
9487        self.isPressed = false;
9488        var originalEvent = e,
9489            wasDragging = self.isDragging,
9490            isContextMenuRelease = self.vars.allowContextMenu && e && (e.ctrlKey || e.which > 2),
9491            placeholderDelayedCall = gsap$2.delayedCall(0.001, removePlaceholder),
9492            touches,
9493            i,
9494            syntheticEvent,
9495            eventTarget,
9496            syntheticClick;
9497
9498        if (touchEventTarget) {
9499          _removeListener(touchEventTarget, "touchend", onRelease);
9500
9501          _removeListener(touchEventTarget, "touchmove", onMove);
9502
9503          _removeListener(touchEventTarget, "touchcancel", onRelease);
9504
9505          _removeListener(ownerDoc, "touchstart", _onMultiTouchDocument);
9506        } else {
9507          _removeListener(ownerDoc, "mousemove", onMove);
9508        }
9509
9510        _removeListener(_win$3, "touchforcechange", _preventDefault);
9511
9512        if (!_supportsPointer || !touchEventTarget) {
9513          _removeListener(ownerDoc, "mouseup", onRelease);
9514
9515          e && e.target && _removeListener(e.target, "mouseup", onRelease);
9516        }
9517
9518        dirty = false;
9519
9520        if (wasDragging) {
9521          dragEndTime = _lastDragTime = _getTime();
9522          self.isDragging = false;
9523        }
9524
9525        _removeFromRenderQueue(render);
9526
9527        if (isClicking && !isContextMenuRelease) {
9528          if (e) {
9529            _removeListener(e.target, "change", onRelease);
9530
9531            self.pointerEvent = originalEvent;
9532          }
9533
9534          _setSelectable(triggers, false);
9535
9536          _dispatchEvent(self, "release", "onRelease");
9537
9538          _dispatchEvent(self, "click", "onClick");
9539
9540          isClicking = false;
9541          return;
9542        }
9543
9544        i = triggers.length;
9545
9546        while (--i > -1) {
9547          _setStyle(triggers[i], "cursor", vars.cursor || (vars.cursor !== false ? _defaultCursor : null));
9548        }
9549
9550        _dragCount$1--;
9551
9552        if (e) {
9553          touches = e.changedTouches;
9554
9555          if (touches) {
9556            e = touches[0];
9557
9558            if (e !== touch && e.identifier !== touchID) {
9559              i = touches.length;
9560
9561              while (--i > -1 && (e = touches[i]).identifier !== touchID && e.target !== target) {}
9562
9563              if (i < 0 && !force) {
9564                return;
9565              }
9566            }
9567          }
9568
9569          self.pointerEvent = originalEvent;
9570          self.pointerX = e.pageX;
9571          self.pointerY = e.pageY;
9572        }
9573
9574        if (isContextMenuRelease && originalEvent) {
9575          _preventDefault(originalEvent);
9576
9577          isPreventingDefault = true;
9578
9579          _dispatchEvent(self, "release", "onRelease");
9580        } else if (originalEvent && !wasDragging) {
9581          isPreventingDefault = false;
9582
9583          if (interrupted && (vars.snap || vars.bounds)) {
9584            animate(vars.inertia || vars.throwProps);
9585          }
9586
9587          _dispatchEvent(self, "release", "onRelease");
9588
9589          if ((!_isAndroid || originalEvent.type !== "touchmove") && originalEvent.type.indexOf("cancel") === -1) {
9590            _dispatchEvent(self, "click", "onClick");
9591
9592            if (_getTime() - clickTime < 300) {
9593              _dispatchEvent(self, "doubleclick", "onDoubleClick");
9594            }
9595
9596            eventTarget = originalEvent.target || target;
9597            clickTime = _getTime();
9598
9599            syntheticClick = function syntheticClick() {
9600              if (clickTime !== clickDispatch && self.enabled() && !self.isPressed && !originalEvent.defaultPrevented) {
9601                if (eventTarget.click) {
9602                  eventTarget.click();
9603                } else if (ownerDoc.createEvent) {
9604                  syntheticEvent = ownerDoc.createEvent("MouseEvents");
9605                  syntheticEvent.initMouseEvent("click", true, true, _win$3, 1, self.pointerEvent.screenX, self.pointerEvent.screenY, self.pointerX, self.pointerY, false, false, false, false, 0, null);
9606                  eventTarget.dispatchEvent(syntheticEvent);
9607                }
9608              }
9609            };
9610
9611            if (!_isAndroid && !originalEvent.defaultPrevented) {
9612              gsap$2.delayedCall(0.05, syntheticClick);
9613            }
9614          }
9615        } else {
9616          animate(vars.inertia || vars.throwProps);
9617
9618          if (!self.allowEventDefault && originalEvent && (vars.dragClickables !== false || !isClickable.call(self, originalEvent.target)) && wasDragging && (!allowNativeTouchScrolling || touchDragAxis && allowNativeTouchScrolling === touchDragAxis) && originalEvent.cancelable !== false) {
9619            isPreventingDefault = true;
9620
9621            _preventDefault(originalEvent);
9622          } else {
9623            isPreventingDefault = false;
9624          }
9625
9626          _dispatchEvent(self, "release", "onRelease");
9627        }
9628
9629        isTweening() && placeholderDelayedCall.duration(self.tween.duration());
9630        wasDragging && _dispatchEvent(self, "dragend", "onDragEnd");
9631        return true;
9632      },
9633          updateScroll = function updateScroll(e) {
9634        if (e && self.isDragging && !scrollProxy) {
9635          var parent = e.target || target.parentNode,
9636              deltaX = parent.scrollLeft - parent._gsScrollX,
9637              deltaY = parent.scrollTop - parent._gsScrollY;
9638
9639          if (deltaX || deltaY) {
9640            if (matrix) {
9641              startPointerX -= deltaX * matrix.a + deltaY * matrix.c;
9642              startPointerY -= deltaY * matrix.d + deltaX * matrix.b;
9643            } else {
9644              startPointerX -= deltaX;
9645              startPointerY -= deltaY;
9646            }
9647
9648            parent._gsScrollX += deltaX;
9649            parent._gsScrollY += deltaY;
9650            setPointerPosition(self.pointerX, self.pointerY);
9651          }
9652        }
9653      },
9654          onClick = function onClick(e) {
9655        var time = _getTime(),
9656            recentlyClicked = time - clickTime < 100,
9657            recentlyDragged = time - dragEndTime < 50,
9658            alreadyDispatched = recentlyClicked && clickDispatch === clickTime,
9659            defaultPrevented = self.pointerEvent && self.pointerEvent.defaultPrevented,
9660            alreadyDispatchedTrusted = recentlyClicked && trustedClickDispatch === clickTime,
9661            trusted = e.isTrusted || e.isTrusted == null && recentlyClicked && alreadyDispatched;
9662
9663        if ((alreadyDispatched || recentlyDragged && self.vars.suppressClickOnDrag !== false) && e.stopImmediatePropagation) {
9664          e.stopImmediatePropagation();
9665        }
9666
9667        if (recentlyClicked && !(self.pointerEvent && self.pointerEvent.defaultPrevented) && (!alreadyDispatched || trusted && !alreadyDispatchedTrusted)) {
9668          if (trusted && alreadyDispatched) {
9669            trustedClickDispatch = clickTime;
9670          }
9671
9672          clickDispatch = clickTime;
9673          return;
9674        }
9675
9676        if (self.isPressed || recentlyDragged || recentlyClicked) {
9677          if (!trusted || !e.detail || !recentlyClicked || defaultPrevented) {
9678            _preventDefault(e);
9679          }
9680        }
9681
9682        if (!recentlyClicked && !recentlyDragged && !dragged) {
9683          e && e.target && (self.pointerEvent = e);
9684
9685          _dispatchEvent(self, "click", "onClick");
9686        }
9687      },
9688          localizePoint = function localizePoint(p) {
9689        return matrix ? {
9690          x: p.x * matrix.a + p.y * matrix.c + matrix.e,
9691          y: p.x * matrix.b + p.y * matrix.d + matrix.f
9692        } : {
9693          x: p.x,
9694          y: p.y
9695        };
9696      };
9697
9698      old = Draggable.get(target);
9699      old && old.kill();
9700
9701      _this2.startDrag = function (event, align) {
9702        var r1, r2, p1, p2;
9703        onPress(event || self.pointerEvent, true);
9704
9705        if (align && !self.hitTest(event || self.pointerEvent)) {
9706          r1 = _parseRect(event || self.pointerEvent);
9707          r2 = _parseRect(target);
9708          p1 = localizePoint({
9709            x: r1.left + r1.width / 2,
9710            y: r1.top + r1.height / 2
9711          });
9712          p2 = localizePoint({
9713            x: r2.left + r2.width / 2,
9714            y: r2.top + r2.height / 2
9715          });
9716          startPointerX -= p1.x - p2.x;
9717          startPointerY -= p1.y - p2.y;
9718        }
9719
9720        if (!self.isDragging) {
9721          self.isDragging = dragged = true;
9722
9723          _dispatchEvent(self, "dragstart", "onDragStart");
9724        }
9725      };
9726
9727      _this2.drag = onMove;
9728
9729      _this2.endDrag = function (e) {
9730        return onRelease(e || self.pointerEvent, true);
9731      };
9732
9733      _this2.timeSinceDrag = function () {
9734        return self.isDragging ? 0 : (_getTime() - dragEndTime) / 1000;
9735      };
9736
9737      _this2.timeSinceClick = function () {
9738        return (_getTime() - clickTime) / 1000;
9739      };
9740
9741      _this2.hitTest = function (target, threshold) {
9742        return Draggable.hitTest(self.target, target, threshold);
9743      };
9744
9745      _this2.getDirection = function (from, diagonalThreshold) {
9746        var mode = from === "velocity" && InertiaPlugin ? from : _isObject$1(from) && !rotationMode ? "element" : "start",
9747            xChange,
9748            yChange,
9749            ratio,
9750            direction,
9751            r1,
9752            r2;
9753
9754        if (mode === "element") {
9755          r1 = _parseRect(self.target);
9756          r2 = _parseRect(from);
9757        }
9758
9759        xChange = mode === "start" ? self.x - startElementX : mode === "velocity" ? InertiaPlugin.getVelocity(target, xProp) : r1.left + r1.width / 2 - (r2.left + r2.width / 2);
9760
9761        if (rotationMode) {
9762          return xChange < 0 ? "counter-clockwise" : "clockwise";
9763        } else {
9764          diagonalThreshold = diagonalThreshold || 2;
9765          yChange = mode === "start" ? self.y - startElementY : mode === "velocity" ? InertiaPlugin.getVelocity(target, yProp) : r1.top + r1.height / 2 - (r2.top + r2.height / 2);
9766          ratio = Math.abs(xChange / yChange);
9767          direction = ratio < 1 / diagonalThreshold ? "" : xChange < 0 ? "left" : "right";
9768
9769          if (ratio < diagonalThreshold) {
9770            if (direction !== "") {
9771              direction += "-";
9772            }
9773
9774            direction += yChange < 0 ? "up" : "down";
9775          }
9776        }
9777
9778        return direction;
9779      };
9780
9781      _this2.applyBounds = function (newBounds, sticky) {
9782        var x, y, forceZeroVelocity, e, parent, isRoot;
9783
9784        if (newBounds && vars.bounds !== newBounds) {
9785          vars.bounds = newBounds;
9786          return self.update(true, sticky);
9787        }
9788
9789        syncXY(true);
9790        calculateBounds();
9791
9792        if (hasBounds && !isTweening()) {
9793          x = self.x;
9794          y = self.y;
9795
9796          if (x > maxX) {
9797            x = maxX;
9798          } else if (x < minX) {
9799            x = minX;
9800          }
9801
9802          if (y > maxY) {
9803            y = maxY;
9804          } else if (y < minY) {
9805            y = minY;
9806          }
9807
9808          if (self.x !== x || self.y !== y) {
9809            forceZeroVelocity = true;
9810            self.x = self.endX = x;
9811
9812            if (rotationMode) {
9813              self.endRotation = x;
9814            } else {
9815              self.y = self.endY = y;
9816            }
9817
9818            dirty = true;
9819            render(true);
9820
9821            if (self.autoScroll && !self.isDragging) {
9822              _recordMaxScrolls(target.parentNode);
9823
9824              e = target;
9825              _windowProxy.scrollTop = _win$3.pageYOffset != null ? _win$3.pageYOffset : ownerDoc.documentElement.scrollTop != null ? ownerDoc.documentElement.scrollTop : ownerDoc.body.scrollTop;
9826              _windowProxy.scrollLeft = _win$3.pageXOffset != null ? _win$3.pageXOffset : ownerDoc.documentElement.scrollLeft != null ? ownerDoc.documentElement.scrollLeft : ownerDoc.body.scrollLeft;
9827
9828              while (e && !isRoot) {
9829                isRoot = _isRoot(e.parentNode);
9830                parent = isRoot ? _windowProxy : e.parentNode;
9831
9832                if (allowY && parent.scrollTop > parent._gsMaxScrollY) {
9833                  parent.scrollTop = parent._gsMaxScrollY;
9834                }
9835
9836                if (allowX && parent.scrollLeft > parent._gsMaxScrollX) {
9837                  parent.scrollLeft = parent._gsMaxScrollX;
9838                }
9839
9840                e = parent;
9841              }
9842            }
9843          }
9844
9845          if (self.isThrowing && (forceZeroVelocity || self.endX > maxX || self.endX < minX || self.endY > maxY || self.endY < minY)) {
9846            animate(vars.inertia || vars.throwProps, forceZeroVelocity);
9847          }
9848        }
9849
9850        return self;
9851      };
9852
9853      _this2.update = function (applyBounds, sticky, ignoreExternalChanges) {
9854        if (sticky && self.isPressed) {
9855          
vendor: 3,076 bytes, lines 9855-9956
9855var m = getGlobalMatrix(target),
9856              p = innerMatrix.apply({
9857            x: self.x - startElementX,
9858            y: self.y - startElementY
9859          }),
9860              m2 = getGlobalMatrix(target.parentNode, true);
9861          m2.apply({
9862            x: m.e - p.x,
9863            y: m.f - p.y
9864          }, p);
9865          self.x -= p.x - m2.e;
9866          self.y -= p.y - m2.f;
9867          render(true);
9868          recordStartPositions();
9869        }
9870
9871        var x = self.x,
9872            y = self.y;
9873        updateMatrix(!sticky);
9874
9875        if (applyBounds) {
9876          self.applyBounds();
9877        } else {
9878          dirty && ignoreExternalChanges && render(true);
9879          syncXY(true);
9880        }
9881
9882        if (sticky) {
9883          setPointerPosition(self.pointerX, self.pointerY);
9884          dirty && render(true);
9885        }
9886
9887        if (self.isPressed && !sticky && (allowX && Math.abs(x - self.x) > 0.01 || allowY && Math.abs(y - self.y) > 0.01 && !rotationMode)) {
9888          recordStartPositions();
9889        }
9890
9891        if (self.autoScroll) {
9892          _recordMaxScrolls(target.parentNode, self.isDragging);
9893
9894          checkAutoScrollBounds = self.isDragging;
9895          render(true);
9896
9897          _removeScrollListener(target, updateScroll);
9898
9899          _addScrollListener(target, updateScroll);
9900        }
9901
9902        return self;
9903      };
9904
9905      _this2.enable = function (type) {
9906        var setVars = {
9907          lazy: true
9908        },
9909            id,
9910            i,
9911            trigger;
9912
9913        if (vars.cursor !== false) {
9914          setVars.cursor = vars.cursor || _defaultCursor;
9915        }
9916
9917        if (gsap$2.utils.checkPrefix("touchCallout")) {
9918          setVars.touchCallout = "none";
9919        }
9920
9921        if (type !== "soft") {
9922          _setTouchActionForAllDescendants(triggers, allowX === allowY ? "none" : vars.allowNativeTouchScrolling && target.scrollHeight === target.clientHeight === (target.scrollWidth === target.clientHeight) || vars.allowEventDefault ? "manipulation" : allowX ? "pan-y" : "pan-x");
9923
9924          i = triggers.length;
9925
9926          while (--i > -1) {
9927            trigger = triggers[i];
9928            _supportsPointer || _addListener(trigger, "mousedown", onPress);
9929
9930            _addListener(trigger, "touchstart", onPress);
9931
9932            _addListener(trigger, "click", onClick, true);
9933
9934            gsap$2.set(trigger, setVars);
9935
9936            if (trigger.getBBox && trigger.ownerSVGElement && allowX !== allowY) {
9937              gsap$2.set(trigger.ownerSVGElement, {
9938                touchAction: vars.allowNativeTouchScrolling || vars.allowEventDefault ? "manipulation" : allowX ? "pan-y" : "pan-x"
9939              });
9940            }
9941
9942            vars.allowContextMenu || _addListener(trigger, "contextmenu", onContextMenu);
9943          }
9944
9945          _setSelectable(triggers, false);
9946        }
9947
9948        _addScrollListener(target, updateScroll);
9949
9950        enabled = true;
9951
9952        if (InertiaPlugin && type !== "soft") {
9953          InertiaPlugin.track(scrollProxy || target, xyMode ? "x,y" : rotationMode ? "rotation" : "top,left");
9954        }
9955
9956        target._gsDragID = id =
vendor: 5,480 bytes, lines 9956-10162
9956 "d" + _lookupCount++;
9957        _lookup[id] = self;
9958
9959        if (scrollProxy) {
9960          scrollProxy.enable();
9961          scrollProxy.element._gsDragID = id;
9962        }
9963
9964        (vars.bounds || rotationMode) && recordStartPositions();
9965        vars.bounds && self.applyBounds();
9966        return self;
9967      };
9968
9969      _this2.disable = function (type) {
9970        var dragging = self.isDragging,
9971            i = triggers.length,
9972            trigger;
9973
9974        while (--i > -1) {
9975          _setStyle(triggers[i], "cursor", null);
9976        }
9977
9978        if (type !== "soft") {
9979          _setTouchActionForAllDescendants(triggers, null);
9980
9981          i = triggers.length;
9982
9983          while (--i > -1) {
9984            trigger = triggers[i];
9985
9986            _setStyle(trigger, "touchCallout", null);
9987
9988            _removeListener(trigger, "mousedown", onPress);
9989
9990            _removeListener(trigger, "touchstart", onPress);
9991
9992            _removeListener(trigger, "click", onClick, true);
9993
9994            _removeListener(trigger, "contextmenu", onContextMenu);
9995          }
9996
9997          _setSelectable(triggers, true);
9998
9999          if (touchEventTarget) {
10000            _removeListener(touchEventTarget, "touchcancel", onRelease);
10001
10002            _removeListener(touchEventTarget, "touchend", onRelease);
10003
10004            _removeListener(touchEventTarget, "touchmove", onMove);
10005          }
10006
10007          _removeListener(ownerDoc, "mouseup", onRelease);
10008
10009          _removeListener(ownerDoc, "mousemove", onMove);
10010        }
10011
10012        _removeScrollListener(target, updateScroll);
10013
10014        enabled = false;
10015
10016        if (InertiaPlugin && type !== "soft") {
10017          InertiaPlugin.untrack(scrollProxy || target, xyMode ? "x,y" : rotationMode ? "rotation" : "top,left");
10018          self.tween && self.tween.kill();
10019        }
10020
10021        scrollProxy && scrollProxy.disable();
10022
10023        _removeFromRenderQueue(render);
10024
10025        self.isDragging = self.isPressed = isClicking = false;
10026        dragging && _dispatchEvent(self, "dragend", "onDragEnd");
10027        return self;
10028      };
10029
10030      _this2.enabled = function (value, type) {
10031        return arguments.length ? value ? self.enable(type) : self.disable(type) : enabled;
10032      };
10033
10034      _this2.kill = function () {
10035        self.isThrowing = false;
10036        self.tween && self.tween.kill();
10037        self.disable();
10038        gsap$2.set(triggers, {
10039          clearProps: "userSelect"
10040        });
10041        delete _lookup[target._gsDragID];
10042        return self;
10043      };
10044
10045      _this2.revert = function () {
10046        this.kill();
10047        this.styles && this.styles.revert();
10048      };
10049
10050      if (~type.indexOf("scroll")) {
10051        scrollProxy = _this2.scrollProxy = new ScrollProxy(target, _extend({
10052          onKill: function onKill() {
10053            self.isPressed && onRelease(null);
10054          }
10055        }, vars));
10056        target.style.overflowY = allowY && !_isTouchDevice ? "auto" : "hidden";
10057        target.style.overflowX = allowX && !_isTouchDevice ? "auto" : "hidden";
10058        target = scrollProxy.content;
10059      }
10060
10061      if (rotationMode) {
10062        killProps.rotation = 1;
10063      } else {
10064        if (allowX) {
10065          killProps[xProp] = 1;
10066        }
10067
10068        if (allowY) {
10069          killProps[yProp] = 1;
10070        }
10071      }
10072
10073      gsCache.force3D = "force3D" in vars ? vars.force3D : true;
10074
10075      _context$1(_assertThisInitialized(_this2));
10076
10077      _this2.enable();
10078
10079      return _this2;
10080    }
10081
10082    Draggable.register = function register(core) {
10083      gsap$2 = core;
10084
10085      _initCore$2();
10086    };
10087
10088    Draggable.create = function create(targets, vars) {
10089      _coreInitted$2 || _initCore$2(true);
10090      return _toArray(targets).map(function (target) {
10091        return new Draggable(target, vars);
10092      });
10093    };
10094
10095    Draggable.get = function get(target) {
10096      return _lookup[(_toArray(target)[0] || {})._gsDragID];
10097    };
10098
10099    Draggable.timeSinceDrag = function timeSinceDrag() {
10100      return (_getTime() - _lastDragTime) / 1000;
10101    };
10102
10103    Draggable.hitTest = function hitTest(obj1, obj2, threshold) {
10104      if (obj1 === obj2) {
10105        return false;
10106      }
10107
10108      var r1 = _parseRect(obj1),
10109          r2 = _parseRect(obj2),
10110          top = r1.top,
10111          left = r1.left,
10112          right = r1.right,
10113          bottom = r1.bottom,
10114          width = r1.width,
10115          height = r1.height,
10116          isOutside = r2.left > right || r2.right < left || r2.top > bottom || r2.bottom < top,
10117          overlap,
10118          area,
10119          isRatio;
10120
10121      if (isOutside || !threshold) {
10122        return !isOutside;
10123      }
10124
10125      isRatio = (threshold + "").indexOf("%") !== -1;
10126      threshold = parseFloat(threshold) || 0;
10127      overlap = {
10128        left: Math.max(left, r2.left),
10129        top: Math.max(top, r2.top)
10130      };
10131      overlap.width = Math.min(right, r2.right) - overlap.left;
10132      overlap.height = Math.min(bottom, r2.bottom) - overlap.top;
10133
10134      if (overlap.width < 0 || overlap.height < 0) {
10135        return false;
10136      }
10137
10138      if (isRatio) {
10139        threshold *= 0.01;
10140        area = overlap.width * overlap.height;
10141        return area >= width * height * threshold || area >= r2.width * r2.height * threshold;
10142      }
10143
10144      return overlap.width > threshold && overlap.height > threshold;
10145    };
10146
10147    return Draggable;
10148  }(EventDispatcher);
10149
10150  _setDefaults$1(Draggable.prototype, {
10151    pointerX: 0,
10152    pointerY: 0,
10153    startX: 0,
10154    startY: 0,
10155    deltaX: 0,
10156    deltaY: 0,
10157    isDragging: false,
10158    isPressed: false
10159  });
10160
10161  Draggable.zIndex = 1000;
10162  Draggable.version = "3.1
101622.5";
10163  _getGSAP$1() && gsap$2.registerPlugin(Draggable);
10164
10165  /*!
10166   * CSSRulePlugin 3.12.5
10167   * https://gsap.com
10168   *
10169   * @license Copyright 2008-2024, GreenSock. All rights reserved.
10170   * Subject to the terms at https://gsap.com/standard-license or for
10171   * Club GSAP members, the agreement issued with that membership.
10172   * @author: Jack Doyle, [email protected]
10173  */
10174  var gsap$3,
10175      _coreInitted$3,
10176      _doc$4,
10177      CSSPlugin$1,
10178      _windowExists$3 = function _windowExists() {
10179    return typeof window !== "undefined";
10180  },
10181      _getGSAP$2 = function _getGSAP() {
10182    return gsap$3 || _windowExists$3() && (gsap$3 = window.gsap) && gsap$3.registerPlugin && gsap$3;
10183  },
vendor: 1,389 bytes, lines 10184-10243
10184      _checkRegister = function _checkRegister() {
10185    if (!_coreInitted$3) {
10186      _initCore$3();
10187
10188      if (!CSSPlugin$1) {
10189        console.warn("Please gsap.registerPlugin(CSSPlugin, CSSRulePlugin)");
10190      }
10191    }
10192
10193    return _coreInitted$3;
10194  },
10195      _initCore$3 = function _initCore(core) {
10196    gsap$3 = core || _getGSAP$2();
10197
10198    if (_windowExists$3()) {
10199      _doc$4 = document;
10200    }
10201
10202    if (gsap$3) {
10203      CSSPlugin$1 = gsap$3.plugins.css;
10204
10205      if (CSSPlugin$1) {
10206        _coreInitted$3 = 1;
10207      }
10208    }
10209  };
10210
10211  var CSSRulePlugin = {
10212    version: "3.12.5",
10213    name: "cssRule",
10214    init: function init(target, value, tween, index, targets) {
10215      if (!_checkRegister() || typeof target.cssText === "undefined") {
10216        return false;
10217      }
10218
10219      var div = target._gsProxy = target._gsProxy || _doc$4.createElement("div");
10220
10221      this.ss = target;
10222      this.style = div.style;
10223      div.style.cssText = target.cssText;
10224      CSSPlugin$1.prototype.init.call(this, div, value, tween, index, targets);
10225    },
10226    render: function render(ratio, data) {
10227      var pt = data._pt,
10228          style = data.style,
10229          ss = data.ss,
10230          i;
10231
10232      while (pt) {
10233        pt.r(ratio, pt.d);
10234        pt = pt._next;
10235      }
10236
10237      i = style.length;
10238
10239      while (--i > -1) {
10240        ss[style[i]] = style[style[i]];
10241      }
10242    },
10243    getRule: function getRule(selector) {
vendor: 4,352 bytes, lines 10244-10403
10244      _checkRegister();
10245
10246      var ruleProp = _doc$4.all ? "rules" : "cssRules",
10247          styleSheets = _doc$4.styleSheets,
10248          i = styleSheets.length,
10249          pseudo = selector.charAt(0) === ":",
10250          j,
10251          curSS,
10252          cs,
10253          a;
10254      selector = (pseudo ? "" : ",") + selector.split("::").join(":").toLowerCase() + ",";
10255
10256      if (pseudo) {
10257        a = [];
10258      }
10259
10260      while (i--) {
10261        try {
10262          curSS = styleSheets[i][ruleProp];
10263
10264          if (!curSS) {
10265            continue;
10266          }
10267
10268          j = curSS.length;
10269        } catch (e) {
10270          console.warn(e);
10271          continue;
10272        }
10273
10274        while (--j > -1) {
10275          cs = curSS[j];
10276
10277          if (cs.selectorText && ("," + cs.selectorText.split("::").join(":").toLowerCase() + ",").indexOf(selector) !== -1) {
10278            if (pseudo) {
10279              a.push(cs.style);
10280            } else {
10281              return cs.style;
10282            }
10283          }
10284        }
10285      }
10286
10287      return a;
10288    },
10289    register: _initCore$3
10290  };
10291  _getGSAP$2() && gsap$3.registerPlugin(CSSRulePlugin);
10292
10293  /*!
10294   * EaselPlugin 3.12.5
10295   * https://gsap.com
10296   *
10297   * @license Copyright 2008-2024, GreenSock. All rights reserved.
10298   * Subject to the terms at https://gsap.com/standard-license or for
10299   * Club GSAP members, the agreement issued with that membership.
10300   * @author: Jack Doyle, [email protected]
10301  */
10302  var gsap$4,
10303      _coreInitted$4,
10304      _win$4,
10305      _createJS,
10306      _ColorFilter,
10307      _ColorMatrixFilter,
10308      _colorProps = "redMultiplier,greenMultiplier,blueMultiplier,alphaMultiplier,redOffset,greenOffset,blueOffset,alphaOffset".split(","),
10309      _windowExists$4 = function _windowExists() {
10310    return typeof window !== "undefined";
10311  },
10312      _getGSAP$3 = function _getGSAP() {
10313    return gsap$4 || _windowExists$4() && (gsap$4 = window.gsap) && gsap$4.registerPlugin && gsap$4;
10314  },
10315      _getCreateJS = function _getCreateJS() {
10316    return _createJS || _win$4 && _win$4.createjs || _win$4 || {};
10317  },
10318      _warn$1 = function _warn(message) {
10319    return console.warn(message);
10320  },
10321      _cache = function _cache(target) {
10322    var b = target.getBounds && target.getBounds();
10323
10324    if (!b) {
10325      b = target.nominalBounds || {
10326        x: 0,
10327        y: 0,
10328        width: 100,
10329        height: 100
10330      };
10331      target.setBounds && target.setBounds(b.x, b.y, b.width, b.height);
10332    }
10333
10334    target.cache && target.cache(b.x, b.y, b.width, b.height);
10335
10336    _warn$1("EaselPlugin: for filters to display in EaselJS, you must call the object's cache() method first. GSAP attempted to use the target's getBounds() for the cache but that may not be completely accurate. " + target);
10337  },
10338      _parseColorFilter = function _parseColorFilter(target, v, plugin) {
10339    if (!_ColorFilter) {
10340      _ColorFilter = _getCreateJS().ColorFilter;
10341
10342      if (!_ColorFilter) {
10343        _warn$1("EaselPlugin error: The EaselJS ColorFilter JavaScript file wasn't loaded.");
10344      }
10345    }
10346
10347    var filters = target.filters || [],
10348        i = filters.length,
10349        c,
10350        s,
10351        e,
10352        a,
10353        p,
10354        pt;
10355
10356    while (i--) {
10357      if (filters[i] instanceof _ColorFilter) {
10358        s = filters[i];
10359        break;
10360      }
10361    }
10362
10363    if (!s) {
10364      s = new _ColorFilter();
10365      filters.push(s);
10366      target.filters = filters;
10367    }
10368
10369    e = s.clone();
10370
10371    if (v.tint != null) {
10372      c = gsap$4.utils.splitColor(v.tint);
10373      a = v.tintAmount != null ? +v.tintAmount : 1;
10374      e.redOffset = +c[0] * a;
10375      e.greenOffset = +c[1] * a;
10376      e.blueOffset = +c[2] * a;
10377      e.redMultiplier = e.greenMultiplier = e.blueMultiplier = 1 - a;
10378    } else {
10379      for (p in v) {
10380        if (p !== "exposure") if (p !== "brightness") {
10381          e[p] = +v[p];
10382        }
10383      }
10384    }
10385
10386    if (v.exposure != null) {
10387      e.redOffset = e.greenOffset = e.blueOffset = 255 * (+v.exposure - 1);
10388      e.redMultiplier = e.greenMultiplier = e.blueMultiplier = 1;
10389    } else if (v.brightness != null) {
10390      a = +v.brightness - 1;
10391      e.redOffset = e.greenOffset = e.blueOffset = a > 0 ? a * 255 : 0;
10392      e.redMultiplier = e.greenMultiplier = e.blueMultiplier = 1 - Math.abs(a);
10393    }
10394
10395    i = 8;
10396
10397    while (i--) {
10398      p = _colorProps[i];
10399
10400      if (s[p] !== e[p]) {
10401        pt = plugin.add(s, p, s[p], e[p], 0, 0, 0, 0, 0, 1);
10402
10403        if (pt) {
vendor: 5,418 bytes, lines 10404-10600
10404          pt.op = "easel_colorFilter";
10405        }
10406      }
10407    }
10408
10409    plugin._props.push("easel_colorFilter");
10410
10411    if (!target.cacheID) {
10412      _cache(target);
10413    }
10414  },
10415      _idMatrix = [1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0],
10416      _lumR = 0.212671,
10417      _lumG = 0.715160,
10418      _lumB = 0.072169,
10419      _applyMatrix = function _applyMatrix(m, m2) {
10420    if (!(m instanceof Array) || !(m2 instanceof Array)) {
10421      return m2;
10422    }
10423
10424    var temp = [],
10425        i = 0,
10426        z = 0,
10427        y,
10428        x;
10429
10430    for (y = 0; y < 4; y++) {
10431      for (x = 0; x < 5; x++) {
10432        z = x === 4 ? m[i + 4] : 0;
10433        temp[i + x] = m[i] * m2[x] + m[i + 1] * m2[x + 5] + m[i + 2] * m2[x + 10] + m[i + 3] * m2[x + 15] + z;
10434      }
10435
10436      i += 5;
10437    }
10438
10439    return temp;
10440  },
10441      _setSaturation = function _setSaturation(m, n) {
10442    if (isNaN(n)) {
10443      return m;
10444    }
10445
10446    var inv = 1 - n,
10447        r = inv * _lumR,
10448        g = inv * _lumG,
10449        b = inv * _lumB;
10450    return _applyMatrix([r + n, g, b, 0, 0, r, g + n, b, 0, 0, r, g, b + n, 0, 0, 0, 0, 0, 1, 0], m);
10451  },
10452      _colorize = function _colorize(m, color, amount) {
10453    if (isNaN(amount)) {
10454      amount = 1;
10455    }
10456
10457    var c = gsap$4.utils.splitColor(color),
10458        r = c[0] / 255,
10459        g = c[1] / 255,
10460        b = c[2] / 255,
10461        inv = 1 - amount;
10462    return _applyMatrix([inv + amount * r * _lumR, amount * r * _lumG, amount * r * _lumB, 0, 0, amount * g * _lumR, inv + amount * g * _lumG, amount * g * _lumB, 0, 0, amount * b * _lumR, amount * b * _lumG, inv + amount * b * _lumB, 0, 0, 0, 0, 0, 1, 0], m);
10463  },
10464      _setHue = function _setHue(m, n) {
10465    if (isNaN(n)) {
10466      return m;
10467    }
10468
10469    n *= Math.PI / 180;
10470    var c = Math.cos(n),
10471        s = Math.sin(n);
10472    return _applyMatrix([_lumR + c * (1 - _lumR) + s * -_lumR, _lumG + c * -_lumG + s * -_lumG, _lumB + c * -_lumB + s * (1 - _lumB), 0, 0, _lumR + c * -_lumR + s * 0.143, _lumG + c * (1 - _lumG) + s * 0.14, _lumB + c * -_lumB + s * -0.283, 0, 0, _lumR + c * -_lumR + s * -(1 - _lumR), _lumG + c * -_lumG + s * _lumG, _lumB + c * (1 - _lumB) + s * _lumB, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1], m);
10473  },
10474      _setContrast = function _setContrast(m, n) {
10475    if (isNaN(n)) {
10476      return m;
10477    }
10478
10479    n += 0.01;
10480    return _applyMatrix([n, 0, 0, 0, 128 * (1 - n), 0, n, 0, 0, 128 * (1 - n), 0, 0, n, 0, 128 * (1 - n), 0, 0, 0, 1, 0], m);
10481  },
10482      _parseColorMatrixFilter = function _parseColorMatrixFilter(target, v, plugin) {
10483    if (!_ColorMatrixFilter) {
10484      _ColorMatrixFilter = _getCreateJS().ColorMatrixFilter;
10485
10486      if (!_ColorMatrixFilter) {
10487        _warn$1("EaselPlugin: The EaselJS ColorMatrixFilter JavaScript file wasn't loaded.");
10488      }
10489    }
10490
10491    var filters = target.filters || [],
10492        i = filters.length,
10493        matrix,
10494        startMatrix,
10495        s,
10496        pg;
10497
10498    while (--i > -1) {
10499      if (filters[i] instanceof _ColorMatrixFilter) {
10500        s = filters[i];
10501        break;
10502      }
10503    }
10504
10505    if (!s) {
10506      s = new _ColorMatrixFilter(_idMatrix.slice());
10507      filters.push(s);
10508      target.filters = filters;
10509    }
10510
10511    startMatrix = s.matrix;
10512    matrix = _idMatrix.slice();
10513
10514    if (v.colorize != null) {
10515      matrix = _colorize(matrix, v.colorize, Number(v.colorizeAmount));
10516    }
10517
10518    if (v.contrast != null) {
10519      matrix = _setContrast(matrix, Number(v.contrast));
10520    }
10521
10522    if (v.hue != null) {
10523      matrix = _setHue(matrix, Number(v.hue));
10524    }
10525
10526    if (v.saturation != null) {
10527      matrix = _setSaturation(matrix, Number(v.saturation));
10528    }
10529
10530    i = matrix.length;
10531
10532    while (--i > -1) {
10533      if (matrix[i] !== startMatrix[i]) {
10534        pg = plugin.add(startMatrix, i, startMatrix[i], matrix[i], 0, 0, 0, 0, 0, 1);
10535
10536        if (pg) {
10537          pg.op = "easel_colorMatrixFilter";
10538        }
10539      }
10540    }
10541
10542    plugin._props.push("easel_colorMatrixFilter");
10543
10544    if (!target.cacheID) {
10545      _cache();
10546    }
10547
10548    plugin._matrix = startMatrix;
10549  },
10550      _initCore$4 = function _initCore(core) {
10551    gsap$4 = core || _getGSAP$3();
10552
10553    if (_windowExists$4()) {
10554      _win$4 = window;
10555    }
10556
10557    if (gsap$4) {
10558      _coreInitted$4 = 1;
10559    }
10560  };
10561
10562  var EaselPlugin = {
10563    version: "3.12.5",
10564    name: "easel",
10565    init: function init(target, value, tween, index, targets) {
10566      if (!_coreInitted$4) {
10567        _initCore$4();
10568
10569        if (!gsap$4) {
10570          _warn$1("Please gsap.registerPlugin(EaselPlugin)");
10571        }
10572      }
10573
10574      this.target = target;
10575      var p, pt, tint, colorMatrix, end, labels, i;
10576
10577      for (p in value) {
10578        end = value[p];
10579
10580        if (p === "colorFilter" || p === "tint" || p === "tintAmount" || p === "exposure" || p === "brightness") {
10581          if (!tint) {
10582            _parseColorFilter(target, value.colorFilter || value, this);
10583
10584            tint = true;
10585          }
10586        } else if (p === "saturation" || p === "contrast" || p === "hue" || p === "colorize" || p === "colorizeAmount") {
10587          if (!colorMatrix) {
10588            _parseColorMatrixFilter(target, value.colorMatrixFilter || value, this);
10589
10590            colorMatrix = true;
10591          }
10592        } else if (p === "frame") {
10593          if (typeof end === "string" && end.charAt(1) !== "=" && (labels = target.labels)) {
10594            for (i = 0; i < labels.length; i++) {
10595              if (labels[i].label === end) {
10596                end = labels[i].position;
10597              }
10598            }
10599          }
10600
vendor: 5,367 bytes, lines 10601-10812
10601          pt = this.add(target, "gotoAndStop", target.currentFrame, end, index, targets, Math.round, 0, 0, 1);
10602
10603          if (pt) {
10604            pt.op = p;
10605          }
10606        } else if (target[p] != null) {
10607          this.add(target, p, "get", end);
10608        }
10609      }
10610    },
10611    render: function render(ratio, data) {
10612      var pt = data._pt;
10613
10614      while (pt) {
10615        pt.r(ratio, pt.d);
10616        pt = pt._next;
10617      }
10618
10619      if (data.target.cacheID) {
10620        data.target.updateCache();
10621      }
10622    },
10623    register: _initCore$4
10624  };
10625
10626  EaselPlugin.registerCreateJS = function (createjs) {
10627    _createJS = createjs;
10628  };
10629
10630  _getGSAP$3() && gsap$4.registerPlugin(EaselPlugin);
10631
10632  /*!
10633   * EasePack 3.12.5
10634   * https://gsap.com
10635   *
10636   * @license Copyright 2008-2024, GreenSock. All rights reserved.
10637   * Subject to the terms at https://gsap.com/standard-license or for
10638   * Club GSAP members, the agreement issued with that membership.
10639   * @author: Jack Doyle, [email protected]
10640  */
10641  var gsap$5,
10642      _registerEase,
10643      _getGSAP$4 = function _getGSAP() {
10644    return gsap$5 || typeof window !== "undefined" && (gsap$5 = window.gsap) && gsap$5.registerPlugin && gsap$5;
10645  },
10646      _boolean = function _boolean(value, defaultValue) {
10647    return !!(typeof value === "undefined" ? defaultValue : value && !~(value + "").indexOf("false"));
10648  },
10649      _initCore$5 = function _initCore(core) {
10650    gsap$5 = core || _getGSAP$4();
10651
10652    if (gsap$5) {
10653      _registerEase = gsap$5.registerEase;
10654
10655      var eases = gsap$5.parseEase(),
10656          createConfig = function createConfig(ease) {
10657        return function (ratio) {
10658          var y = 0.5 + ratio / 2;
10659
10660          ease.config = function (p) {
10661            return ease(2 * (1 - p) * p * y + p * p);
10662          };
10663        };
10664      },
10665          p;
10666
10667      for (p in eases) {
10668        if (!eases[p].config) {
10669          createConfig(eases[p]);
10670        }
10671      }
10672
10673      _registerEase("slow", SlowMo);
10674
10675      _registerEase("expoScale", ExpoScaleEase);
10676
10677      _registerEase("rough", RoughEase);
10678
10679      for (p in EasePack) {
10680        p !== "version" && gsap$5.core.globals(p, EasePack[p]);
10681      }
10682    }
10683  },
10684      _createSlowMo = function _createSlowMo(linearRatio, power, yoyoMode) {
10685    linearRatio = Math.min(1, linearRatio || 0.7);
10686
10687    var pow = linearRatio < 1 ? power || power === 0 ? power : 0.7 : 0,
10688        p1 = (1 - linearRatio) / 2,
10689        p3 = p1 + linearRatio,
10690        calcEnd = _boolean(yoyoMode);
10691
10692    return function (p) {
10693      var r = p + (0.5 - p) * pow;
10694      return p < p1 ? calcEnd ? 1 - (p = 1 - p / p1) * p : r - (p = 1 - p / p1) * p * p * p * r : p > p3 ? calcEnd ? p === 1 ? 0 : 1 - (p = (p - p3) / p1) * p : r + (p - r) * (p = (p - p3) / p1) * p * p * p : calcEnd ? 1 : r;
10695    };
10696  },
10697      _createExpoScale = function _createExpoScale(start, end, ease) {
10698    var p1 = Math.log(end / start),
10699        p2 = end - start;
10700    ease && (ease = gsap$5.parseEase(ease));
10701    return function (p) {
10702      return (start * Math.exp(p1 * (ease ? ease(p) : p)) - start) / p2;
10703    };
10704  },
10705      EasePoint = function EasePoint(time, value, next) {
10706    this.t = time;
10707    this.v = value;
10708
10709    if (next) {
10710      this.next = next;
10711      next.prev = this;
10712      this.c = next.v - value;
10713      this.gap = next.t - time;
10714    }
10715  },
10716      _createRoughEase = function _createRoughEase(vars) {
10717    if (typeof vars !== "object") {
10718      vars = {
10719        points: +vars || 20
10720      };
10721    }
10722
10723    var taper = vars.taper || "none",
10724        a = [],
10725        cnt = 0,
10726        points = (+vars.points || 20) | 0,
10727        i = points,
10728        randomize = _boolean(vars.randomize, true),
10729        clamp = _boolean(vars.clamp),
10730        template = gsap$5 ? gsap$5.parseEase(vars.template) : 0,
10731        strength = (+vars.strength || 1) * 0.4,
10732        x,
10733        y,
10734        bump,
10735        invX,
10736        obj,
10737        pnt,
10738        recent;
10739
10740    while (--i > -1) {
10741      x = randomize ? Math.random() : 1 / points * i;
10742      y = template ? template(x) : x;
10743
10744      if (taper === "none") {
10745        bump = strength;
10746      } else if (taper === "out") {
10747        invX = 1 - x;
10748        bump = invX * invX * strength;
10749      } else if (taper === "in") {
10750        bump = x * x * strength;
10751      } else if (x < 0.5) {
10752        invX = x * 2;
10753        bump = invX * invX * 0.5 * strength;
10754      } else {
10755        invX = (1 - x) * 2;
10756        bump = invX * invX * 0.5 * strength;
10757      }
10758
10759      if (randomize) {
10760        y += Math.random() * bump - bump * 0.5;
10761      } else if (i % 2) {
10762        y += bump * 0.5;
10763      } else {
10764        y -= bump * 0.5;
10765      }
10766
10767      if (clamp) {
10768        if (y > 1) {
10769          y = 1;
10770        } else if (y < 0) {
10771          y = 0;
10772        }
10773      }
10774
10775      a[cnt++] = {
10776        x: x,
10777        y: y
10778      };
10779    }
10780
10781    a.sort(function (a, b) {
10782      return a.x - b.x;
10783    });
10784    pnt = new EasePoint(1, 1, null);
10785    i = points;
10786
10787    while (i--) {
10788      obj = a[i];
10789      pnt = new EasePoint(obj.x, obj.y, pnt);
10790    }
10791
10792    recent = new EasePoint(0, 0, pnt.t ? pnt : pnt.next);
10793    return function (p) {
10794      var pnt = recent;
10795
10796      if (p > pnt.t) {
10797        while (pnt.next && p >= pnt.t) {
10798          pnt = pnt.next;
10799        }
10800
10801        pnt = pnt.prev;
10802      } else {
10803        while (pnt.prev && p <= pnt.t) {
10804          pnt = pnt.prev;
10805        }
10806      }
10807
10808      recent = pnt;
10809      return pnt.v + (p - pnt.t) / pnt.gap * pnt.c;
10810    };
10811  };
10812
10813  var SlowMo = _createSlowMo(0.7);
10814  SlowMo.ease = SlowMo;
10815  SlowMo.config = _createSlowMo;
10816  var ExpoScaleEase = _createExpoScale(1, 2);
10817  ExpoScaleEase.config = _createExpoScale;
10818  var RoughEase = _createRoughEase();
10819  RoughEase.ease = RoughEase;
10820  RoughEase.config = _createRoughEase;
10821  var EasePack = {
10822    SlowMo: SlowMo,
10823    RoughEase: RoughEase,
10824    ExpoScaleEase: ExpoScaleEase
10825  };
10826
10827  for (var p in EasePack) {
10828    EasePack[p].register = _initCore$5;
10829    EasePack[p].version = "3.12.5";
10830  }
10831
10832  _getGSAP$4() && gsap$5.registerPlugin(SlowMo);
10833
10834  /*!
10835   * Flip 3.12.5
10836   * https://gsap.com
10837   *
10838   * @license Copyright 2008-2024, GreenSock. All rights reserved.
10839   * Subject to the terms at https://gsap.com/standard-license or for
10840   * Club GSAP members, the agreement issued with that membership.
vendor: 9,690 bytes, lines 10840-11157
10840
10841   * @author: Jack Doyle, [email protected]
10842  */
10843
10844  var _id = 1,
10845      _toArray$1,
10846      gsap$6,
10847      _batch,
10848      _batchAction,
10849      _body$2,
10850      _closestTenth,
10851      _getStyleSaver$2,
10852      _forEachBatch = function _forEachBatch(batch, name) {
10853    return batch.actions.forEach(function (a) {
10854      return a.vars[name] && a.vars[name](a);
10855    });
10856  },
10857      _batchLookup = {},
10858      _RAD2DEG$3 = 180 / Math.PI,
10859      _DEG2RAD$2 = Math.PI / 180,
10860      _emptyObj = {},
10861      _dashedNameLookup = {},
10862      _memoizedRemoveProps = {},
10863      _listToArray = function _listToArray(list) {
10864    return typeof list === "string" ? list.split(" ").join("").split(",") : list;
10865  },
10866      _callbacks = _listToArray("onStart,onUpdate,onComplete,onReverseComplete,onInterrupt"),
10867      _removeProps = _listToArray("transform,transformOrigin,width,height,position,top,left,opacity,zIndex,maxWidth,maxHeight,minWidth,minHeight"),
10868      _getEl = function _getEl(target) {
10869    return _toArray$1(target)[0] || console.warn("Element not found:", target);
10870  },
10871      _round$4 = function _round(value) {
10872    return Math.round(value * 10000) / 10000 || 0;
10873  },
10874      _toggleClass = function _toggleClass(targets, className, action) {
10875    return targets.forEach(function (el) {
10876      return el.classList[action](className);
10877    });
10878  },
10879      _reserved = {
10880    zIndex: 1,
10881    kill: 1,
10882    simple: 1,
10883    spin: 1,
10884    clearProps: 1,
10885    targets: 1,
10886    toggleClass: 1,
10887    onComplete: 1,
10888    onUpdate: 1,
10889    onInterrupt: 1,
10890    onStart: 1,
10891    delay: 1,
10892    repeat: 1,
10893    repeatDelay: 1,
10894    yoyo: 1,
10895    scale: 1,
10896    fade: 1,
10897    absolute: 1,
10898    props: 1,
10899    onEnter: 1,
10900    onLeave: 1,
10901    custom: 1,
10902    paused: 1,
10903    nested: 1,
10904    prune: 1,
10905    absoluteOnLeave: 1
10906  },
10907      _fitReserved = {
10908    zIndex: 1,
10909    simple: 1,
10910    clearProps: 1,
10911    scale: 1,
10912    absolute: 1,
10913    fitChild: 1,
10914    getVars: 1,
10915    props: 1
10916  },
10917      _camelToDashed = function _camelToDashed(p) {
10918    return p.replace(/([A-Z])/g, "-$1").toLowerCase();
10919  },
10920      _copy$1 = function _copy(obj, exclude) {
10921    var result = {},
10922        p;
10923
10924    for (p in obj) {
10925      exclude[p] || (result[p] = obj[p]);
10926    }
10927
10928    return result;
10929  },
10930      _memoizedProps = {},
10931      _memoizeProps = function _memoizeProps(props) {
10932    var p = _memoizedProps[props] = _listToArray(props);
10933
10934    _memoizedRemoveProps[props] = p.concat(_removeProps);
10935    return p;
10936  },
10937      _getInverseGlobalMatrix = function _getInverseGlobalMatrix(el) {
10938    var cache = el._gsap || gsap$6.core.getCache(el);
10939
10940    if (cache.gmCache === gsap$6.ticker.frame) {
10941      return cache.gMatrix;
10942    }
10943
10944    cache.gmCache = gsap$6.ticker.frame;
10945    return cache.gMatrix = getGlobalMatrix(el, true, false, true);
10946  },
10947      _getDOMDepth = function _getDOMDepth(el, invert, level) {
10948    if (level === void 0) {
10949      level = 0;
10950    }
10951
10952    var parent = el.parentNode,
10953        inc = 1000 * Math.pow(10, level) * (invert ? -1 : 1),
10954        l = invert ? -inc * 900 : 0;
10955
10956    while (el) {
10957      l += inc;
10958      el = el.previousSibling;
10959    }
10960
10961    return parent ? l + _getDOMDepth(parent, invert, level + 1) : l;
10962  },
10963      _orderByDOMDepth = function _orderByDOMDepth(comps, invert, isElStates) {
10964    comps.forEach(function (comp) {
10965      return comp.d = _getDOMDepth(isElStates ? comp.element : comp.t, invert);
10966    });
10967    comps.sort(function (c1, c2) {
10968      return c1.d - c2.d;
10969    });
10970    return comps;
10971  },
10972      _recordInlineStyles = function _recordInlineStyles(elState, props) {
10973    var style = elState.element.style,
10974        a = elState.css = elState.css || [],
10975        i = props.length,
10976        p,
10977        v;
10978
10979    while (i--) {
10980      p = props[i];
10981      v = style[p] || style.getPropertyValue(p);
10982      a.push(v ? p : _dashedNameLookup[p] || (_dashedNameLookup[p] = _camelToDashed(p)), v);
10983    }
10984
10985    return style;
10986  },
10987      _applyInlineStyles = function _applyInlineStyles(state) {
10988    var css = state.css,
10989        style = state.element.style,
10990        i = 0;
10991    state.cache.uncache = 1;
10992
10993    for (; i < css.length; i += 2) {
10994      css[i + 1] ? style[css[i]] = css[i + 1] : style.removeProperty(css[i]);
10995    }
10996
10997    if (!css[css.indexOf("transform") + 1] && style.translate) {
10998      style.removeProperty("translate");
10999      style.removeProperty("scale");
11000      style.removeProperty("rotate");
11001    }
11002  },
11003      _setFinalStates = function _setFinalStates(comps, onlyTransforms) {
11004    comps.forEach(function (c) {
11005      return c.a.cache.uncache = 1;
11006    });
11007    onlyTransforms || comps.finalStates.forEach(_applyInlineStyles);
11008  },
11009      _absoluteProps = "paddingTop,paddingRight,paddingBottom,paddingLeft,gridArea,transition".split(","),
11010      _makeAbsolute = function _makeAbsolute(elState, fallbackNode, ignoreBatch) {
11011    var element = elState.element,
11012        width = elState.width,
11013        height = elState.height,
11014        uncache = elState.uncache,
11015        getProp = elState.getProp,
11016        style = element.style,
11017        i = 4,
11018        result,
11019        displayIsNone,
11020        cs;
11021    typeof fallbackNode !== "object" && (fallbackNode = elState);
11022
11023    if (_batch && ignoreBatch !== 1) {
11024      _batch._abs.push({
11025        t: element,
11026        b: elState,
11027        a: elState,
11028        sd: 0
11029      });
11030
11031      _batch._final.push(function () {
11032        return (elState.cache.uncache = 1) && _applyInlineStyles(elState);
11033      });
11034
11035      return element;
11036    }
11037
11038    displayIsNone = getProp("display") === "none";
11039
11040    if (!elState.isVisible || displayIsNone) {
11041      displayIsNone && (_recordInlineStyles(elState, ["display"]).display = fallbackNode.display);
11042      elState.matrix = fallbackNode.matrix;
11043      elState.width = width = elState.width || fallbackNode.width;
11044      elState.height = height = elState.height || fallbackNode.height;
11045    }
11046
11047    _recordInlineStyles(elState, _absoluteProps);
11048
11049    cs = window.getComputedStyle(element);
11050
11051    while (i--) {
11052      style[_absoluteProps[i]] = cs[_absoluteProps[i]];
11053    }
11054
11055    style.gridArea = "1 / 1 / 1 / 1";
11056    style.transition = "none";
11057    style.position = "absolute";
11058    style.width = width + "px";
11059    style.height = height + "px";
11060    style.top || (style.top = "0px");
11061    style.left || (style.left = "0px");
11062
11063    if (uncache) {
11064      result = new ElementState(element);
11065    } else {
11066      result = _copy$1(elState, _emptyObj);
11067      result.position = "absolute";
11068
11069      if (elState.simple) {
11070        var bounds = element.getBoundingClientRect();
11071        result.matrix = new Matrix2D(1, 0, 0, 1, bounds.left + _getDocScrollLeft(), bounds.top + _getDocScrollTop());
11072      } else {
11073        result.matrix = getGlobalMatrix(element, false, false, true);
11074      }
11075    }
11076
11077    result = _fit(result, elState, true);
11078    elState.x = _closestTenth(result.x, 0.01);
11079    elState.y = _closestTenth(result.y, 0.01);
11080    return element;
11081  },
11082      _filterComps = function _filterComps(comps, targets) {
11083    if (targets !== true) {
11084      targets = _toArray$1(targets);
11085      comps = comps.filter(function (c) {
11086        if (targets.indexOf((c.sd < 0 ? c.b : c.a).element) !== -1) {
11087          return true;
11088        } else {
11089          c.t._gsap.renderTransform(1);
11090
11091          if (c.b.isVisible) {
11092            c.t.style.width = c.b.width + "px";
11093            c.t.style.height = c.b.height + "px";
11094          }
11095        }
11096      });
11097    }
11098
11099    return comps;
11100  },
11101      _makeCompsAbsolute = function _makeCompsAbsolute(comps) {
11102    return _orderByDOMDepth(comps, true).forEach(function (c) {
11103      return (c.a.isVisible || c.b.isVisible) && _makeAbsolute(c.sd < 0 ? c.b : c.a, c.b, 1);
11104    });
11105  },
11106      _findElStateInState = function _findElStateInState(state, other) {
11107    return other && state.idLookup[_parseElementState(other).id] || state.elementStates[0];
11108  },
11109      _parseElementState = function _parseElementState(elOrNode, props, simple, other) {
11110    return elOrNode instanceof ElementState ? elOrNode : elOrNode instanceof FlipState ? _findElStateInState(elOrNode, other) : new ElementState(typeof elOrNode === "string" ? _getEl(elOrNode) || console.warn(elOrNode + " not found") : elOrNode, props, simple);
11111  },
11112      _recordProps = function _recordProps(elState, props) {
11113    var getProp = gsap$6.getProperty(elState.element, null, "native"),
11114        obj = elState.props = {},
11115        i = props.length;
11116
11117    while (i--) {
11118      obj[props[i]] = (getProp(props[i]) + "").trim();
11119    }
11120
11121    obj.zIndex && (obj.zIndex = parseFloat(obj.zIndex) || 0);
11122    return elState;
11123  },
11124      _applyProps = function _applyProps(element, props) {
11125    var style = element.style || element,
11126        p;
11127
11128    for (p in props) {
11129      style[p] = props[p];
11130    }
11131  },
11132      _getID = function _getID(el) {
11133    var id = el.getAttribute("data-flip-id");
11134    id || el.setAttribute("data-flip-id", id = "auto-" + _id++);
11135    return id;
11136  },
11137      _elementsFromElementStates = function _elementsFromElementStates(elStates) {
11138    return elStates.map(function (elState) {
11139      return elState.element;
11140    });
11141  },
11142      _handleCallback = function _handleCallback(callback, elStates, tl) {
11143    return callback && elStates.length && tl.add(callback(_elementsFromElementStates(elStates), tl, new FlipState(elStates, 0, true)), 0);
11144  },
11145      _fit = function _fit(fromState, toState, scale, applyProps, fitChild, vars) {
11146    var element = fromState.element,
11147        cache = fromState.cache,
11148        parent = fromState.parent,
11149        x = fromState.x,
11150        y = fromState.y,
11151        width = toState.width,
11152        height = toState.height,
11153        scaleX = toState.scaleX,
11154        scaleY = toState.scaleY,
11155        rotation = toState.rotation,
11156        bounds = toState.bounds,
11157        styles = vars && _getStyleSaver$2 && _getStyleSaver$2(element, "transform
vendor: 1,214 bytes, lines 11157-11184
11157"),
11158        dimensionState = fromState,
11159        _toState$matrix = toState.matrix,
11160        e = _toState$matrix.e,
11161        f = _toState$matrix.f,
11162        deep = fromState.bounds.width !== bounds.width || fromState.bounds.height !== bounds.height || fromState.scaleX !== scaleX || fromState.scaleY !== scaleY || fromState.rotation !== rotation,
11163        simple = !deep && fromState.simple && toState.simple && !fitChild,
11164        skewX,
11165        fromPoint,
11166        toPoint,
11167        getProp,
11168        parentMatrix,
11169        matrix,
11170        bbox;
11171
11172    if (simple || !parent) {
11173      scaleX = scaleY = 1;
11174      rotation = skewX = 0;
11175    } else {
11176      parentMatrix = _getInverseGlobalMatrix(parent);
11177      matrix = parentMatrix.clone().multiply(toState.ctm ? toState.matrix.clone().multiply(toState.ctm) : toState.matrix);
11178      rotation = _round$4(Math.atan2(matrix.b, matrix.a) * _RAD2DEG$3);
11179      skewX = _round$4(Math.atan2(matrix.c, matrix.d) * _RAD2DEG$3 + rotation) % 360;
11180      scaleX = Math.sqrt(Math.pow(matrix.a, 2) + Math.pow(matrix.b, 2));
11181      scaleY = Math.sqrt(Math.pow(matrix.c, 2) + Math.pow(matrix.d, 2)) * Math.cos(skewX * _DEG2RAD$2);
11182
11183      if (fitChild) {
11184        fitChild = _toArray$1(fitChild)[0];
vendor: 4,248 bytes, lines 11185-11320
11185        getProp = gsap$6.getProperty(fitChild);
11186        bbox = fitChild.getBBox && typeof fitChild.getBBox === "function" && fitChild.getBBox();
11187        dimensionState = {
11188          scaleX: getProp("scaleX"),
11189          scaleY: getProp("scaleY"),
11190          width: bbox ? bbox.width : Math.ceil(parseFloat(getProp("width", "px"))),
11191          height: bbox ? bbox.height : parseFloat(getProp("height", "px"))
11192        };
11193      }
11194
11195      cache.rotation = rotation + "deg";
11196      cache.skewX = skewX + "deg";
11197    }
11198
11199    if (scale) {
11200      scaleX *= width === dimensionState.width || !dimensionState.width ? 1 : width / dimensionState.width;
11201      scaleY *= height === dimensionState.height || !dimensionState.height ? 1 : height / dimensionState.height;
11202      cache.scaleX = scaleX;
11203      cache.scaleY = scaleY;
11204    } else {
11205      width = _closestTenth(width * scaleX / dimensionState.scaleX, 0);
11206      height = _closestTenth(height * scaleY / dimensionState.scaleY, 0);
11207      element.style.width = width + "px";
11208      element.style.height = height + "px";
11209    }
11210
11211    applyProps && _applyProps(element, toState.props);
11212
11213    if (simple || !parent) {
11214      x += e - fromState.matrix.e;
11215      y += f - fromState.matrix.f;
11216    } else if (deep || parent !== toState.parent) {
11217      cache.renderTransform(1, cache);
11218      matrix = getGlobalMatrix(fitChild || element, false, false, true);
11219      fromPoint = parentMatrix.apply({
11220        x: matrix.e,
11221        y: matrix.f
11222      });
11223      toPoint = parentMatrix.apply({
11224        x: e,
11225        y: f
11226      });
11227      x += toPoint.x - fromPoint.x;
11228      y += toPoint.y - fromPoint.y;
11229    } else {
11230      parentMatrix.e = parentMatrix.f = 0;
11231      toPoint = parentMatrix.apply({
11232        x: e - fromState.matrix.e,
11233        y: f - fromState.matrix.f
11234      });
11235      x += toPoint.x;
11236      y += toPoint.y;
11237    }
11238
11239    x = _closestTenth(x, 0.02);
11240    y = _closestTenth(y, 0.02);
11241
11242    if (vars && !(vars instanceof ElementState)) {
11243      styles && styles.revert();
11244    } else {
11245      cache.x = x + "px";
11246      cache.y = y + "px";
11247      cache.renderTransform(1, cache);
11248    }
11249
11250    if (vars) {
11251      vars.x = x;
11252      vars.y = y;
11253      vars.rotation = rotation;
11254      vars.skewX = skewX;
11255
11256      if (scale) {
11257        vars.scaleX = scaleX;
11258        vars.scaleY = scaleY;
11259      } else {
11260        vars.width = width;
11261        vars.height = height;
11262      }
11263    }
11264
11265    return vars || cache;
11266  },
11267      _parseState = function _parseState(targetsOrState, vars) {
11268    return targetsOrState instanceof FlipState ? targetsOrState : new FlipState(targetsOrState, vars);
11269  },
11270      _getChangingElState = function _getChangingElState(toState, fromState, id) {
11271    var to1 = toState.idLookup[id],
11272        to2 = toState.alt[id];
11273    return to2.isVisible && (!(fromState.getElementState(to2.element) || to2).isVisible || !to1.isVisible) ? to2 : to1;
11274  },
11275      _bodyMetrics = [],
11276      _bodyProps = "width,height,overflowX,overflowY".split(","),
11277      _bodyLocked,
11278      _lockBodyScroll = function _lockBodyScroll(lock) {
11279    if (lock !== _bodyLocked) {
11280      var s = _body$2.style,
11281          w = _body$2.clientWidth === window.outerWidth,
11282          h = _body$2.clientHeight === window.outerHeight,
11283          i = 4;
11284
11285      if (lock && (w || h)) {
11286        while (i--) {
11287          _bodyMetrics[i] = s[_bodyProps[i]];
11288        }
11289
11290        if (w) {
11291          s.width = _body$2.clientWidth + "px";
11292          s.overflowY = "hidden";
11293        }
11294
11295        if (h) {
11296          s.height = _body$2.clientHeight + "px";
11297          s.overflowX = "hidden";
11298        }
11299
11300        _bodyLocked = lock;
11301      } else if (_bodyLocked) {
11302        while (i--) {
11303          _bodyMetrics[i] ? s[_bodyProps[i]] = _bodyMetrics[i] : s.removeProperty(_camelToDashed(_bodyProps[i]));
11304        }
11305
11306        _bodyLocked = lock;
11307      }
11308    }
11309  },
11310      _fromTo = function _fromTo(fromState, toState, vars, relative) {
11311    fromState instanceof FlipState && toState instanceof FlipState || console.warn("Not a valid state object.");
11312    vars = vars || {};
11313
11314    var _vars = vars,
11315        clearProps = _vars.clearProps,
11316        onEnter = _vars.onEnter,
11317        onLeave = _vars.onLeave,
11318        absolute = _vars.absolute,
11319        absoluteOnLeave = _vars.absoluteOnLeave,
11320        custom = _vars.custom,
vendor: 3,935 bytes, lines 11321-11454
11321        delay = _vars.delay,
11322        paused = _vars.paused,
11323        repeat = _vars.repeat,
11324        repeatDelay = _vars.repeatDelay,
11325        yoyo = _vars.yoyo,
11326        toggleClass = _vars.toggleClass,
11327        nested = _vars.nested,
11328        _zIndex = _vars.zIndex,
11329        scale = _vars.scale,
11330        fade = _vars.fade,
11331        stagger = _vars.stagger,
11332        spin = _vars.spin,
11333        prune = _vars.prune,
11334        props = ("props" in vars ? vars : fromState).props,
11335        tweenVars = _copy$1(vars, _reserved),
11336        animation = gsap$6.timeline({
11337      delay: delay,
11338      paused: paused,
11339      repeat: repeat,
11340      repeatDelay: repeatDelay,
11341      yoyo: yoyo,
11342      data: "isFlip"
11343    }),
11344        remainingProps = tweenVars,
11345        entering = [],
11346        leaving = [],
11347        comps = [],
11348        swapOutTargets = [],
11349        spinNum = spin === true ? 1 : spin || 0,
11350        spinFunc = typeof spin === "function" ? spin : function () {
11351      return spinNum;
11352    },
11353        interrupted = fromState.interrupted || toState.interrupted,
11354        addFunc = animation[relative !== 1 ? "to" : "from"],
11355        v,
11356        p,
11357        endTime,
11358        i,
11359        el,
11360        comp,
11361        state,
11362        targets,
11363        finalStates,
11364        fromNode,
11365        toNode,
11366        run,
11367        a,
11368        b;
11369
11370    for (p in toState.idLookup) {
11371      toNode = !toState.alt[p] ? toState.idLookup[p] : _getChangingElState(toState, fromState, p);
11372      el = toNode.element;
11373      fromNode = fromState.idLookup[p];
11374      fromState.alt[p] && el === fromNode.element && (fromState.alt[p].isVisible || !toNode.isVisible) && (fromNode = fromState.alt[p]);
11375
11376      if (fromNode) {
11377        comp = {
11378          t: el,
11379          b: fromNode,
11380          a: toNode,
11381          sd: fromNode.element === el ? 0 : toNode.isVisible ? 1 : -1
11382        };
11383        comps.push(comp);
11384
11385        if (comp.sd) {
11386          if (comp.sd < 0) {
11387            comp.b = toNode;
11388            comp.a = fromNode;
11389          }
11390
11391          interrupted && _recordInlineStyles(comp.b, props ? _memoizedRemoveProps[props] : _removeProps);
11392          fade && comps.push(comp.swap = {
11393            t: fromNode.element,
11394            b: comp.b,
11395            a: comp.a,
11396            sd: -comp.sd,
11397            swap: comp
11398          });
11399        }
11400
11401        el._flip = fromNode.element._flip = _batch ? _batch.timeline : animation;
11402      } else if (toNode.isVisible) {
11403        comps.push({
11404          t: el,
11405          b: _copy$1(toNode, {
11406            isVisible: 1
11407          }),
11408          a: toNode,
11409          sd: 0,
11410          entering: 1
11411        });
11412        el._flip = _batch ? _batch.timeline : animation;
11413      }
11414    }
11415
11416    props && (_memoizedProps[props] || _memoizeProps(props)).forEach(function (p) {
11417      return tweenVars[p] = function (i) {
11418        return comps[i].a.props[p];
11419      };
11420    });
11421    comps.finalStates = finalStates = [];
11422
11423    run = function run() {
11424      _orderByDOMDepth(comps);
11425
11426      _lockBodyScroll(true);
11427
11428      for (i = 0; i < comps.length; i++) {
11429        comp = comps[i];
11430        a = comp.a;
11431        b = comp.b;
11432
11433        if (prune && !a.isDifferent(b) && !comp.entering) {
11434          comps.splice(i--, 1);
11435        } else {
11436          el = comp.t;
11437          nested && !(comp.sd < 0) && i && (a.matrix = getGlobalMatrix(el, false, false, true));
11438
11439          if (b.isVisible && a.isVisible) {
11440            if (comp.sd < 0) {
11441              state = new ElementState(el, props, fromState.simple);
11442
11443              _fit(state, a, scale, 0, 0, state);
11444
11445              state.matrix = getGlobalMatrix(el, false, false, true);
11446              state.css = comp.b.css;
11447              comp.a = a = state;
11448              fade && (el.style.opacity = interrupted ? b.opacity : a.opacity);
11449              stagger && swapOutTargets.push(el);
11450            } else if (comp.sd > 0 && fade) {
11451              el.style.opacity = interrupted ? a.opacity - b.opacity : "0";
11452            }
11453
11454            _fit(a, b, scale, props
vendor: 12,565 bytes, lines 11454-11872
11454);
11455          } else if (b.isVisible !== a.isVisible) {
11456            if (!b.isVisible) {
11457              a.isVisible && entering.push(a);
11458              comps.splice(i--, 1);
11459            } else if (!a.isVisible) {
11460              b.css = a.css;
11461              leaving.push(b);
11462              comps.splice(i--, 1);
11463              absolute && nested && _fit(a, b, scale, props);
11464            }
11465          }
11466
11467          if (!scale) {
11468            el.style.maxWidth = Math.max(a.width, b.width) + "px";
11469            el.style.maxHeight = Math.max(a.height, b.height) + "px";
11470            el.style.minWidth = Math.min(a.width, b.width) + "px";
11471            el.style.minHeight = Math.min(a.height, b.height) + "px";
11472          }
11473
11474          nested && toggleClass && el.classList.add(toggleClass);
11475        }
11476
11477        finalStates.push(a);
11478      }
11479
11480      var classTargets;
11481
11482      if (toggleClass) {
11483        classTargets = finalStates.map(function (s) {
11484          return s.element;
11485        });
11486        nested && classTargets.forEach(function (e) {
11487          return e.classList.remove(toggleClass);
11488        });
11489      }
11490
11491      _lockBodyScroll(false);
11492
11493      if (scale) {
11494        tweenVars.scaleX = function (i) {
11495          return comps[i].a.scaleX;
11496        };
11497
11498        tweenVars.scaleY = function (i) {
11499          return comps[i].a.scaleY;
11500        };
11501      } else {
11502        tweenVars.width = function (i) {
11503          return comps[i].a.width + "px";
11504        };
11505
11506        tweenVars.height = function (i) {
11507          return comps[i].a.height + "px";
11508        };
11509
11510        tweenVars.autoRound = vars.autoRound || false;
11511      }
11512
11513      tweenVars.x = function (i) {
11514        return comps[i].a.x + "px";
11515      };
11516
11517      tweenVars.y = function (i) {
11518        return comps[i].a.y + "px";
11519      };
11520
11521      tweenVars.rotation = function (i) {
11522        return comps[i].a.rotation + (spin ? spinFunc(i, targets[i], targets) * 360 : 0);
11523      };
11524
11525      tweenVars.skewX = function (i) {
11526        return comps[i].a.skewX;
11527      };
11528
11529      targets = comps.map(function (c) {
11530        return c.t;
11531      });
11532
11533      if (_zIndex || _zIndex === 0) {
11534        tweenVars.modifiers = {
11535          zIndex: function zIndex() {
11536            return _zIndex;
11537          }
11538        };
11539        tweenVars.zIndex = _zIndex;
11540        tweenVars.immediateRender = vars.immediateRender !== false;
11541      }
11542
11543      fade && (tweenVars.opacity = function (i) {
11544        return comps[i].sd < 0 ? 0 : comps[i].sd > 0 ? comps[i].a.opacity : "+=0";
11545      });
11546
11547      if (swapOutTargets.length) {
11548        stagger = gsap$6.utils.distribute(stagger);
11549        var dummyArray = targets.slice(swapOutTargets.length);
11550
11551        tweenVars.stagger = function (i, el) {
11552          return stagger(~swapOutTargets.indexOf(el) ? targets.indexOf(comps[i].swap.t) : i, el, dummyArray);
11553        };
11554      }
11555
11556      _callbacks.forEach(function (name) {
11557        return vars[name] && animation.eventCallback(name, vars[name], vars[name + "Params"]);
11558      });
11559
11560      if (custom && targets.length) {
11561        remainingProps = _copy$1(tweenVars, _reserved);
11562
11563        if ("scale" in custom) {
11564          custom.scaleX = custom.scaleY = custom.scale;
11565          delete custom.scale;
11566        }
11567
11568        for (p in custom) {
11569          v = _copy$1(custom[p], _fitReserved);
11570          v[p] = tweenVars[p];
11571          !("duration" in v) && "duration" in tweenVars && (v.duration = tweenVars.duration);
11572          v.stagger = tweenVars.stagger;
11573          addFunc.call(animation, targets, v, 0);
11574          delete remainingProps[p];
11575        }
11576      }
11577
11578      if (targets.length || leaving.length || entering.length) {
11579        toggleClass && animation.add(function () {
11580          return _toggleClass(classTargets, toggleClass, animation._zTime < 0 ? "remove" : "add");
11581        }, 0) && !paused && _toggleClass(classTargets, toggleClass, "add");
11582        targets.length && addFunc.call(animation, targets, remainingProps, 0);
11583      }
11584
11585      _handleCallback(onEnter, entering, animation);
11586
11587      _handleCallback(onLeave, leaving, animation);
11588
11589      var batchTl = _batch && _batch.timeline;
11590
11591      if (batchTl) {
11592        batchTl.add(animation, 0);
11593
11594        _batch._final.push(function () {
11595          return _setFinalStates(comps, !clearProps);
11596        });
11597      }
11598
11599      endTime = animation.duration();
11600      animation.call(function () {
11601        var forward = animation.time() >= endTime;
11602        forward && !batchTl && _setFinalStates(comps, !clearProps);
11603        toggleClass && _toggleClass(classTargets, toggleClass, forward ? "remove" : "add");
11604      });
11605    };
11606
11607    absoluteOnLeave && (absolute = comps.filter(function (comp) {
11608      return !comp.sd && !comp.a.isVisible && comp.b.isVisible;
11609    }).map(function (comp) {
11610      return comp.a.element;
11611    }));
11612
11613    if (_batch) {
11614      var _batch$_abs;
11615
11616      absolute && (_batch$_abs = _batch._abs).push.apply(_batch$_abs, _filterComps(comps, absolute));
11617
11618      _batch._run.push(run);
11619    } else {
11620      absolute && _makeCompsAbsolute(_filterComps(comps, absolute));
11621      run();
11622    }
11623
11624    var anim = _batch ? _batch.timeline : animation;
11625
11626    anim.revert = function () {
11627      return _killFlip(anim, 1, 1);
11628    };
11629
11630    return anim;
11631  },
11632      _interrupt$1 = function _interrupt(tl) {
11633    tl.vars.onInterrupt && tl.vars.onInterrupt.apply(tl, tl.vars.onInterruptParams || []);
11634    tl.getChildren(true, false, true).forEach(_interrupt);
11635  },
11636      _killFlip = function _killFlip(tl, action, force) {
11637    if (tl && tl.progress() < 1 && (!tl.paused() || force)) {
11638      if (action) {
11639        _interrupt$1(tl);
11640
11641        action < 2 && tl.progress(1);
11642        tl.kill();
11643      }
11644
11645      return true;
11646    }
11647  },
11648      _createLookup = function _createLookup(state) {
11649    var lookup = state.idLookup = {},
11650        alt = state.alt = {},
11651        elStates = state.elementStates,
11652        i = elStates.length,
11653        elState;
11654
11655    while (i--) {
11656      elState = elStates[i];
11657      lookup[elState.id] ? alt[elState.id] = elState : lookup[elState.id] = elState;
11658    }
11659  };
11660
11661  var FlipState = function () {
11662    function FlipState(targets, vars, targetsAreElementStates) {
11663      this.props = vars && vars.props;
11664      this.simple = !!(vars && vars.simple);
11665
11666      if (targetsAreElementStates) {
11667        this.targets = _elementsFromElementStates(targets);
11668        this.elementStates = targets;
11669
11670        _createLookup(this);
11671      } else {
11672        this.targets = _toArray$1(targets);
11673        var soft = vars && (vars.kill === false || vars.batch && !vars.kill);
11674        _batch && !soft && _batch._kill.push(this);
11675        this.update(soft || !!_batch);
11676      }
11677    }
11678
11679    var _proto = FlipState.prototype;
11680
11681    _proto.update = function update(soft) {
11682      var _this = this;
11683
11684      this.elementStates = this.targets.map(function (el) {
11685        return new ElementState(el, _this.props, _this.simple);
11686      });
11687
11688      _createLookup(this);
11689
11690      this.interrupt(soft);
11691      this.recordInlineStyles();
11692      return this;
11693    };
11694
11695    _proto.clear = function clear() {
11696      this.targets.length = this.elementStates.length = 0;
11697
11698      _createLookup(this);
11699
11700      return this;
11701    };
11702
11703    _proto.fit = function fit(state, scale, nested) {
11704      var elStatesInOrder = _orderByDOMDepth(this.elementStates.slice(0), false, true),
11705          toElStates = (state || this).idLookup,
11706          i = 0,
11707          fromNode,
11708          toNode;
11709
11710      for (; i < elStatesInOrder.length; i++) {
11711        fromNode = elStatesInOrder[i];
11712        nested && (fromNode.matrix = getGlobalMatrix(fromNode.element, false, false, true));
11713        toNode = toElStates[fromNode.id];
11714        toNode && _fit(fromNode, toNode, scale, true, 0, fromNode);
11715        fromNode.matrix = getGlobalMatrix(fromNode.element, false, false, true);
11716      }
11717
11718      return this;
11719    };
11720
11721    _proto.getProperty = function getProperty(element, property) {
11722      var es = this.getElementState(element) || _emptyObj;
11723
11724      return (property in es ? es : es.props || _emptyObj)[property];
11725    };
11726
11727    _proto.add = function add(state) {
11728      var i = state.targets.length,
11729          lookup = this.idLookup,
11730          alt = this.alt,
11731          index,
11732          es,
11733          es2;
11734
11735      while (i--) {
11736        es = state.elementStates[i];
11737        es2 = lookup[es.id];
11738
11739        if (es2 && (es.element === es2.element || alt[es.id] && alt[es.id].element === es.element)) {
11740          index = this.elementStates.indexOf(es.element === es2.element ? es2 : alt[es.id]);
11741          this.targets.splice(index, 1, state.targets[i]);
11742          this.elementStates.splice(index, 1, es);
11743        } else {
11744          this.targets.push(state.targets[i]);
11745          this.elementStates.push(es);
11746        }
11747      }
11748
11749      state.interrupted && (this.interrupted = true);
11750      state.simple || (this.simple = false);
11751
11752      _createLookup(this);
11753
11754      return this;
11755    };
11756
11757    _proto.compare = function compare(state) {
11758      var l1 = state.idLookup,
11759          l2 = this.idLookup,
11760          unchanged = [],
11761          changed = [],
11762          enter = [],
11763          leave = [],
11764          targets = [],
11765          a1 = state.alt,
11766          a2 = this.alt,
11767          place = function place(s1, s2, el) {
11768        return (s1.isVisible !== s2.isVisible ? s1.isVisible ? enter : leave : s1.isVisible ? changed : unchanged).push(el) && targets.push(el);
11769      },
11770          placeIfDoesNotExist = function placeIfDoesNotExist(s1, s2, el) {
11771        return targets.indexOf(el) < 0 && place(s1, s2, el);
11772      },
11773          s1,
11774          s2,
11775          p,
11776          el,
11777          s1Alt,
11778          s2Alt,
11779          c1,
11780          c2;
11781
11782      for (p in l1) {
11783        s1Alt = a1[p];
11784        s2Alt = a2[p];
11785        s1 = !s1Alt ? l1[p] : _getChangingElState(state, this, p);
11786        el = s1.element;
11787        s2 = l2[p];
11788
11789        if (s2Alt) {
11790          c2 = s2.isVisible || !s2Alt.isVisible && el === s2.element ? s2 : s2Alt;
11791          c1 = s1Alt && !s1.isVisible && !s1Alt.isVisible && c2.element === s1Alt.element ? s1Alt : s1;
11792
11793          if (c1.isVisible && c2.isVisible && c1.element !== c2.element) {
11794            (c1.isDifferent(c2) ? changed : unchanged).push(c1.element, c2.element);
11795            targets.push(c1.element, c2.element);
11796          } else {
11797            place(c1, c2, c1.element);
11798          }
11799
11800          s1Alt && c1.element === s1Alt.element && (s1Alt = l1[p]);
11801          placeIfDoesNotExist(c1.element !== s2.element && s1Alt ? s1Alt : c1, s2, s2.element);
11802          placeIfDoesNotExist(s1Alt && s1Alt.element === s2Alt.element ? s1Alt : c1, s2Alt, s2Alt.element);
11803          s1Alt && placeIfDoesNotExist(s1Alt, s2Alt.element === s1Alt.element ? s2Alt : s2, s1Alt.element);
11804        } else {
11805          !s2 ? enter.push(el) : !s2.isDifferent(s1) ? unchanged.push(el) : place(s1, s2, el);
11806          s1Alt && placeIfDoesNotExist(s1Alt, s2, s1Alt.element);
11807        }
11808      }
11809
11810      for (p in l2) {
11811        if (!l1[p]) {
11812          leave.push(l2[p].element);
11813          a2[p] && leave.push(a2[p].element);
11814        }
11815      }
11816
11817      return {
11818        changed: changed,
11819        unchanged: unchanged,
11820        enter: enter,
11821        leave: leave
11822      };
11823    };
11824
11825    _proto.recordInlineStyles = function recordInlineStyles() {
11826      var props = _memoizedRemoveProps[this.props] || _removeProps,
11827          i = this.elementStates.length;
11828
11829      while (i--) {
11830        _recordInlineStyles(this.elementStates[i], props);
11831      }
11832    };
11833
11834    _proto.interrupt = function interrupt(soft) {
11835      var _this2 = this;
11836
11837      var timelines = [];
11838      this.targets.forEach(function (t) {
11839        var tl = t._flip,
11840            foundInProgress = _killFlip(tl, soft ? 0 : 1);
11841
11842        soft && foundInProgress && timelines.indexOf(tl) < 0 && tl.add(function () {
11843          return _this2.updateVisibility();
11844        });
11845        foundInProgress && timelines.push(tl);
11846      });
11847      !soft && timelines.length && this.updateVisibility();
11848      this.interrupted || (this.interrupted = !!timelines.length);
11849    };
11850
11851    _proto.updateVisibility = function updateVisibility() {
11852      this.elementStates.forEach(function (es) {
11853        var b = es.element.getBoundingClientRect();
11854        es.isVisible = !!(b.width || b.height || b.top || b.left);
11855        es.uncache = 1;
11856      });
11857    };
11858
11859    _proto.getElementState = function getElementState(element) {
11860      return this.elementStates[this.targets.indexOf(_getEl(element))];
11861    };
11862
11863    _proto.makeAbsolute = function makeAbsolute() {
11864      return _orderByDOMDepth(this.elementStates.slice(0), true, true).map(_makeAbsolute);
11865    };
11866
11867    return FlipState;
11868  }();
11869
11870  var ElementState = function () {
11871    function ElementState(element, props, simple) {
11872      
vendor: 1,320 bytes, lines 11872-11898
11872this.element = element;
11873      this.update(props, simple);
11874    }
11875
11876    var _proto2 = ElementState.prototype;
11877
11878    _proto2.isDifferent = function isDifferent(state) {
11879      var b1 = this.bounds,
11880          b2 = state.bounds;
11881      return b1.top !== b2.top || b1.left !== b2.left || b1.width !== b2.width || b1.height !== b2.height || !this.matrix.equals(state.matrix) || this.opacity !== state.opacity || this.props && state.props && JSON.stringify(this.props) !== JSON.stringify(state.props);
11882    };
11883
11884    _proto2.update = function update(props, simple) {
11885      var self = this,
11886          element = self.element,
11887          getProp = gsap$6.getProperty(element),
11888          cache = gsap$6.core.getCache(element),
11889          bounds = element.getBoundingClientRect(),
11890          bbox = element.getBBox && typeof element.getBBox === "function" && element.nodeName.toLowerCase() !== "svg" && element.getBBox(),
11891          m = simple ? new Matrix2D(1, 0, 0, 1, bounds.left + _getDocScrollLeft(), bounds.top + _getDocScrollTop()) : getGlobalMatrix(element, false, false, true);
11892      self.getProp = getProp;
11893      self.element = element;
11894      self.id = _getID(element);
11895      self.matrix = m;
11896      self.cache = cache;
11897      self.bounds = bounds;
11898      self.isVisible = !!(bounds.width || bounds.height || bounds.left || bounds.top);
vendor: 4,199 bytes, lines 11899-12048
11899      self.display = getProp("display");
11900      self.position = getProp("position");
11901      self.parent = element.parentNode;
11902      self.x = getProp("x");
11903      self.y = getProp("y");
11904      self.scaleX = cache.scaleX;
11905      self.scaleY = cache.scaleY;
11906      self.rotation = getProp("rotation");
11907      self.skewX = getProp("skewX");
11908      self.opacity = getProp("opacity");
11909      self.width = bbox ? bbox.width : _closestTenth(getProp("width", "px"), 0.04);
11910      self.height = bbox ? bbox.height : _closestTenth(getProp("height", "px"), 0.04);
11911      props && _recordProps(self, _memoizedProps[props] || _memoizeProps(props));
11912      self.ctm = element.getCTM && element.nodeName.toLowerCase() === "svg" && _getCTM(element).inverse();
11913      self.simple = simple || _round$4(m.a) === 1 && !_round$4(m.b) && !_round$4(m.c) && _round$4(m.d) === 1;
11914      self.uncache = 0;
11915    };
11916
11917    return ElementState;
11918  }();
11919
11920  var FlipAction = function () {
11921    function FlipAction(vars, batch) {
11922      this.vars = vars;
11923      this.batch = batch;
11924      this.states = [];
11925      this.timeline = batch.timeline;
11926    }
11927
11928    var _proto3 = FlipAction.prototype;
11929
11930    _proto3.getStateById = function getStateById(id) {
11931      var i = this.states.length;
11932
11933      while (i--) {
11934        if (this.states[i].idLookup[id]) {
11935          return this.states[i];
11936        }
11937      }
11938    };
11939
11940    _proto3.kill = function kill() {
11941      this.batch.remove(this);
11942    };
11943
11944    return FlipAction;
11945  }();
11946
11947  var FlipBatch = function () {
11948    function FlipBatch(id) {
11949      this.id = id;
11950      this.actions = [];
11951      this._kill = [];
11952      this._final = [];
11953      this._abs = [];
11954      this._run = [];
11955      this.data = {};
11956      this.state = new FlipState();
11957      this.timeline = gsap$6.timeline();
11958    }
11959
11960    var _proto4 = FlipBatch.prototype;
11961
11962    _proto4.add = function add(config) {
11963      var result = this.actions.filter(function (action) {
11964        return action.vars === config;
11965      });
11966
11967      if (result.length) {
11968        return result[0];
11969      }
11970
11971      result = new FlipAction(typeof config === "function" ? {
11972        animate: config
11973      } : config, this);
11974      this.actions.push(result);
11975      return result;
11976    };
11977
11978    _proto4.remove = function remove(action) {
11979      var i = this.actions.indexOf(action);
11980      i >= 0 && this.actions.splice(i, 1);
11981      return this;
11982    };
11983
11984    _proto4.getState = function getState(merge) {
11985      var _this3 = this;
11986
11987      var prevBatch = _batch,
11988          prevAction = _batchAction;
11989      _batch = this;
11990      this.state.clear();
11991      this._kill.length = 0;
11992      this.actions.forEach(function (action) {
11993        if (action.vars.getState) {
11994          action.states.length = 0;
11995          _batchAction = action;
11996          action.state = action.vars.getState(action);
11997        }
11998
11999        merge && action.states.forEach(function (s) {
12000          return _this3.state.add(s);
12001        });
12002      });
12003      _batchAction = prevAction;
12004      _batch = prevBatch;
12005      this.killConflicts();
12006      return this;
12007    };
12008
12009    _proto4.animate = function animate() {
12010      var _this4 = this;
12011
12012      var prevBatch = _batch,
12013          tl = this.timeline,
12014          i = this.actions.length,
12015          finalStates,
12016          endTime;
12017      _batch = this;
12018      tl.clear();
12019      this._abs.length = this._final.length = this._run.length = 0;
12020      this.actions.forEach(function (a) {
12021        a.vars.animate && a.vars.animate(a);
12022        var onEnter = a.vars.onEnter,
12023            onLeave = a.vars.onLeave,
12024            targets = a.targets,
12025            s,
12026            result;
12027
12028        if (targets && targets.length && (onEnter || onLeave)) {
12029          s = new FlipState();
12030          a.states.forEach(function (state) {
12031            return s.add(state);
12032          });
12033          result = s.compare(Flip.getState(targets));
12034          result.enter.length && onEnter && onEnter(result.enter);
12035          result.leave.length && onLeave && onLeave(result.leave);
12036        }
12037      });
12038
12039      _makeCompsAbsolute(this._abs);
12040
12041      this._run.forEach(function (f) {
12042        return f();
12043      });
12044
12045      endTime = tl.duration();
12046      finalStates = this._final.slice(0);
12047      tl.add(function () {
12048        if (endTime <= tl.time()) {
vendor: 5,171 bytes, lines 12049-12240
12049          finalStates.forEach(function (f) {
12050            return f();
12051          });
12052
12053          _forEachBatch(_this4, "onComplete");
12054        }
12055      });
12056      _batch = prevBatch;
12057
12058      while (i--) {
12059        this.actions[i].vars.once && this.actions[i].kill();
12060      }
12061
12062      _forEachBatch(this, "onStart");
12063
12064      tl.restart();
12065      return this;
12066    };
12067
12068    _proto4.loadState = function loadState(done) {
12069      done || (done = function done() {
12070        return 0;
12071      });
12072      var queue = [];
12073      this.actions.forEach(function (c) {
12074        if (c.vars.loadState) {
12075          var i,
12076              f = function f(targets) {
12077            targets && (c.targets = targets);
12078            i = queue.indexOf(f);
12079
12080            if (~i) {
12081              queue.splice(i, 1);
12082              queue.length || done();
12083            }
12084          };
12085
12086          queue.push(f);
12087          c.vars.loadState(f);
12088        }
12089      });
12090      queue.length || done();
12091      return this;
12092    };
12093
12094    _proto4.setState = function setState() {
12095      this.actions.forEach(function (c) {
12096        return c.targets = c.vars.setState && c.vars.setState(c);
12097      });
12098      return this;
12099    };
12100
12101    _proto4.killConflicts = function killConflicts(soft) {
12102      this.state.interrupt(soft);
12103
12104      this._kill.forEach(function (state) {
12105        return state.interrupt(soft);
12106      });
12107
12108      return this;
12109    };
12110
12111    _proto4.run = function run(skipGetState, merge) {
12112      var _this5 = this;
12113
12114      if (this !== _batch) {
12115        skipGetState || this.getState(merge);
12116        this.loadState(function () {
12117          if (!_this5._killed) {
12118            _this5.setState();
12119
12120            _this5.animate();
12121          }
12122        });
12123      }
12124
12125      return this;
12126    };
12127
12128    _proto4.clear = function clear(stateOnly) {
12129      this.state.clear();
12130      stateOnly || (this.actions.length = 0);
12131    };
12132
12133    _proto4.getStateById = function getStateById(id) {
12134      var i = this.actions.length,
12135          s;
12136
12137      while (i--) {
12138        s = this.actions[i].getStateById(id);
12139
12140        if (s) {
12141          return s;
12142        }
12143      }
12144
12145      return this.state.idLookup[id] && this.state;
12146    };
12147
12148    _proto4.kill = function kill() {
12149      this._killed = 1;
12150      this.clear();
12151      delete _batchLookup[this.id];
12152    };
12153
12154    return FlipBatch;
12155  }();
12156
12157  var Flip = function () {
12158    function Flip() {}
12159
12160    Flip.getState = function getState(targets, vars) {
12161      var state = _parseState(targets, vars);
12162
12163      _batchAction && _batchAction.states.push(state);
12164      vars && vars.batch && Flip.batch(vars.batch).state.add(state);
12165      return state;
12166    };
12167
12168    Flip.from = function from(state, vars) {
12169      vars = vars || {};
12170      "clearProps" in vars || (vars.clearProps = true);
12171      return _fromTo(state, _parseState(vars.targets || state.targets, {
12172        props: vars.props || state.props,
12173        simple: vars.simple,
12174        kill: !!vars.kill
12175      }), vars, -1);
12176    };
12177
12178    Flip.to = function to(state, vars) {
12179      return _fromTo(state, _parseState(vars.targets || state.targets, {
12180        props: vars.props || state.props,
12181        simple: vars.simple,
12182        kill: !!vars.kill
12183      }), vars, 1);
12184    };
12185
12186    Flip.fromTo = function fromTo(fromState, toState, vars) {
12187      return _fromTo(fromState, toState, vars);
12188    };
12189
12190    Flip.fit = function fit(fromEl, toEl, vars) {
12191      var v = vars ? _copy$1(vars, _fitReserved) : {},
12192          _ref = vars || v,
12193          absolute = _ref.absolute,
12194          scale = _ref.scale,
12195          getVars = _ref.getVars,
12196          props = _ref.props,
12197          runBackwards = _ref.runBackwards,
12198          onComplete = _ref.onComplete,
12199          simple = _ref.simple,
12200          fitChild = vars && vars.fitChild && _getEl(vars.fitChild),
12201          before = _parseElementState(toEl, props, simple, fromEl),
12202          after = _parseElementState(fromEl, 0, simple, before),
12203          inlineProps = props ? _memoizedRemoveProps[props] : _removeProps,
12204          ctx = gsap$6.context();
12205
12206      props && _applyProps(v, before.props);
12207
12208      _recordInlineStyles(after, inlineProps);
12209
12210      if (runBackwards) {
12211        "immediateRender" in v || (v.immediateRender = true);
12212
12213        v.onComplete = function () {
12214          _applyInlineStyles(after);
12215
12216          onComplete && onComplete.apply(this, arguments);
12217        };
12218      }
12219
12220      absolute && _makeAbsolute(after, before);
12221      v = _fit(after, before, scale || fitChild, props, fitChild, v.duration || getVars ? v : 0);
12222      ctx && !getVars && ctx.add(function () {
12223        return function () {
12224          return _applyInlineStyles(after);
12225        };
12226      });
12227      return getVars ? v : v.duration ? gsap$6.to(after.element, v) : null;
12228    };
12229
12230    Flip.makeAbsolute = function makeAbsolute(targetsOrStates, vars) {
12231      return (targetsOrStates instanceof FlipState ? targetsOrStates : new FlipState(targetsOrStates, vars)).makeAbsolute();
12232    };
12233
12234    Flip.batch = function batch(id) {
12235      id || (id = "default");
12236      return _batchLookup[id] || (_batchLookup[id] = new FlipBatch(id));
12237    };
12238
12239    Flip.killFlipsOf = function killFlipsOf(targets, complete) {
12240      (targets instanceof FlipState ? targets.targets : _toArray$1(targets)).forEac
vendor: 13,942 bytes, lines 12240-12667
12240h(function (t) {
12241        return t && _killFlip(t._flip, complete !== false ? 1 : 2);
12242      });
12243    };
12244
12245    Flip.isFlipping = function isFlipping(target) {
12246      var f = Flip.getByTarget(target);
12247      return !!f && f.isActive();
12248    };
12249
12250    Flip.getByTarget = function getByTarget(target) {
12251      return (_getEl(target) || _emptyObj)._flip;
12252    };
12253
12254    Flip.getElementState = function getElementState(target, props) {
12255      return new ElementState(_getEl(target), props);
12256    };
12257
12258    Flip.convertCoordinates = function convertCoordinates(fromElement, toElement, point) {
12259      var m = getGlobalMatrix(toElement, true, true).multiply(getGlobalMatrix(fromElement));
12260      return point ? m.apply(point) : m;
12261    };
12262
12263    Flip.register = function register(core) {
12264      _body$2 = typeof document !== "undefined" && document.body;
12265
12266      if (_body$2) {
12267        gsap$6 = core;
12268
12269        _setDoc(_body$2);
12270
12271        _toArray$1 = gsap$6.utils.toArray;
12272        _getStyleSaver$2 = gsap$6.core.getStyleSaver;
12273        var snap = gsap$6.utils.snap(0.1);
12274
12275        _closestTenth = function _closestTenth(value, add) {
12276          return snap(parseFloat(value) + add);
12277        };
12278      }
12279    };
12280
12281    return Flip;
12282  }();
12283  Flip.version = "3.12.5";
12284  typeof window !== "undefined" && window.gsap && window.gsap.registerPlugin(Flip);
12285
12286  /*!
12287   * MotionPathPlugin 3.12.5
12288   * https://gsap.com
12289   *
12290   * @license Copyright 2008-2024, GreenSock. All rights reserved.
12291   * Subject to the terms at https://gsap.com/standard-license or for
12292   * Club GSAP members, the agreement issued with that membership.
12293   * @author: Jack Doyle, [email protected]
12294  */
12295
12296  var _xProps = "x,translateX,left,marginLeft,xPercent".split(","),
12297      _yProps = "y,translateY,top,marginTop,yPercent".split(","),
12298      _DEG2RAD$3 = Math.PI / 180,
12299      gsap$7,
12300      PropTween$1,
12301      _getUnit,
12302      _toArray$2,
12303      _getStyleSaver$3,
12304      _reverting$2,
12305      _getGSAP$5 = function _getGSAP() {
12306    return gsap$7 || typeof window !== "undefined" && (gsap$7 = window.gsap) && gsap$7.registerPlugin && gsap$7;
12307  },
12308      _populateSegmentFromArray = function _populateSegmentFromArray(segment, values, property, mode) {
12309    var l = values.length,
12310        si = mode === 2 ? 0 : mode,
12311        i = 0,
12312        v;
12313
12314    for (; i < l; i++) {
12315      segment[si] = v = parseFloat(values[i][property]);
12316      mode === 2 && (segment[si + 1] = 0);
12317      si += 2;
12318    }
12319
12320    return segment;
12321  },
12322      _getPropNum = function _getPropNum(target, prop, unit) {
12323    return parseFloat(target._gsap.get(target, prop, unit || "px")) || 0;
12324  },
12325      _relativize = function _relativize(segment) {
12326    var x = segment[0],
12327        y = segment[1],
12328        i;
12329
12330    for (i = 2; i < segment.length; i += 2) {
12331      x = segment[i] += x;
12332      y = segment[i + 1] += y;
12333    }
12334  },
12335      _segmentToRawPath = function _segmentToRawPath(plugin, segment, target, x, y, slicer, vars, unitX, unitY) {
12336    if (vars.type === "cubic") {
12337      segment = [segment];
12338    } else {
12339      vars.fromCurrent !== false && segment.unshift(_getPropNum(target, x, unitX), y ? _getPropNum(target, y, unitY) : 0);
12340      vars.relative && _relativize(segment);
12341      var pointFunc = y ? pointsToSegment : flatPointsToSegment;
12342      segment = [pointFunc(segment, vars.curviness)];
12343    }
12344
12345    segment = slicer(_align(segment, target, vars));
12346
12347    _addDimensionalPropTween(plugin, target, x, segment, "x", unitX);
12348
12349    y && _addDimensionalPropTween(plugin, target, y, segment, "y", unitY);
12350    return cacheRawPathMeasurements(segment, vars.resolution || (vars.curviness === 0 ? 20 : 12));
12351  },
12352      _emptyFunc$2 = function _emptyFunc(v) {
12353    return v;
12354  },
12355      _numExp$2 = /[-+\.]*\d+\.?(?:e-|e\+)?\d*/g,
12356      _originToPoint = function _originToPoint(element, origin, parentMatrix) {
12357    var m = getGlobalMatrix(element),
12358        x = 0,
12359        y = 0,
12360        svg;
12361
12362    if ((element.tagName + "").toLowerCase() === "svg") {
12363      svg = element.viewBox.baseVal;
12364      svg.width || (svg = {
12365        width: +element.getAttribute("width"),
12366        height: +element.getAttribute("height")
12367      });
12368    } else {
12369      svg = origin && element.getBBox && element.getBBox();
12370    }
12371
12372    if (origin && origin !== "auto") {
12373      x = origin.push ? origin[0] * (svg ? svg.width : element.offsetWidth || 0) : origin.x;
12374      y = origin.push ? origin[1] * (svg ? svg.height : element.offsetHeight || 0) : origin.y;
12375    }
12376
12377    return parentMatrix.apply(x || y ? m.apply({
12378      x: x,
12379      y: y
12380    }) : {
12381      x: m.e,
12382      y: m.f
12383    });
12384  },
12385      _getAlignMatrix = function _getAlignMatrix(fromElement, toElement, fromOrigin, toOrigin) {
12386    var parentMatrix = getGlobalMatrix(fromElement.parentNode, true, true),
12387        m = parentMatrix.clone().multiply(getGlobalMatrix(toElement)),
12388        fromPoint = _originToPoint(fromElement, fromOrigin, parentMatrix),
12389        _originToPoint2 = _originToPoint(toElement, toOrigin, parentMatrix),
12390        x = _originToPoint2.x,
12391        y = _originToPoint2.y,
12392        p;
12393
12394    m.e = m.f = 0;
12395
12396    if (toOrigin === "auto" && toElement.getTotalLength && toElement.tagName.toLowerCase() === "path") {
12397      p = toElement.getAttribute("d").match(_numExp$2) || [];
12398      p = m.apply({
12399        x: +p[0],
12400        y: +p[1]
12401      });
12402      x += p.x;
12403      y += p.y;
12404    }
12405
12406    if (p) {
12407      p = m.apply(toElement.getBBox());
12408      x -= p.x;
12409      y -= p.y;
12410    }
12411
12412    m.e = x - fromPoint.x;
12413    m.f = y - fromPoint.y;
12414    return m;
12415  },
12416      _align = function _align(rawPath, target, _ref) {
12417    var align = _ref.align,
12418        matrix = _ref.matrix,
12419        offsetX = _ref.offsetX,
12420        offsetY = _ref.offsetY,
12421        alignOrigin = _ref.alignOrigin;
12422
12423    var x = rawPath[0][0],
12424        y = rawPath[0][1],
12425        curX = _getPropNum(target, "x"),
12426        curY = _getPropNum(target, "y"),
12427        alignTarget,
12428        m,
12429        p;
12430
12431    if (!rawPath || !rawPath.length) {
12432      return getRawPath("M0,0L0,0");
12433    }
12434
12435    if (align) {
12436      if (align === "self" || (alignTarget = _toArray$2(align)[0] || target) === target) {
12437        transformRawPath(rawPath, 1, 0, 0, 1, curX - x, curY - y);
12438      } else {
12439        if (alignOrigin && alignOrigin[2] !== false) {
12440          gsap$7.set(target, {
12441            transformOrigin: alignOrigin[0] * 100 + "% " + alignOrigin[1] * 100 + "%"
12442          });
12443        } else {
12444          alignOrigin = [_getPropNum(target, "xPercent") / -100, _getPropNum(target, "yPercent") / -100];
12445        }
12446
12447        m = _getAlignMatrix(target, alignTarget, alignOrigin, "auto");
12448        p = m.apply({
12449          x: x,
12450          y: y
12451        });
12452        transformRawPath(rawPath, m.a, m.b, m.c, m.d, curX + m.e - (p.x - m.e), curY + m.f - (p.y - m.f));
12453      }
12454    }
12455
12456    if (matrix) {
12457      transformRawPath(rawPath, matrix.a, matrix.b, matrix.c, matrix.d, matrix.e, matrix.f);
12458    } else if (offsetX || offsetY) {
12459      transformRawPath(rawPath, 1, 0, 0, 1, offsetX || 0, offsetY || 0);
12460    }
12461
12462    return rawPath;
12463  },
12464      _addDimensionalPropTween = function _addDimensionalPropTween(plugin, target, property, rawPath, pathProperty, forceUnit) {
12465    var cache = target._gsap,
12466        harness = cache.harness,
12467        alias = harness && harness.aliases && harness.aliases[property],
12468        prop = alias && alias.indexOf(",") < 0 ? alias : property,
12469        pt = plugin._pt = new PropTween$1(plugin._pt, target, prop, 0, 0, _emptyFunc$2, 0, cache.set(target, prop, plugin));
12470    pt.u = _getUnit(cache.get(target, prop, forceUnit)) || 0;
12471    pt.path = rawPath;
12472    pt.pp = pathProperty;
12473
12474    plugin._props.push(prop);
12475  },
12476      _sliceModifier = function _sliceModifier(start, end) {
12477    return function (rawPath) {
12478      return start || end !== 1 ? sliceRawPath(rawPath, start, end) : rawPath;
12479    };
12480  };
12481
12482  var MotionPathPlugin = {
12483    version: "3.12.5",
12484    name: "motionPath",
12485    register: function register(core, Plugin, propTween) {
12486      gsap$7 = core;
12487      _getUnit = gsap$7.utils.getUnit;
12488      _toArray$2 = gsap$7.utils.toArray;
12489      _getStyleSaver$3 = gsap$7.core.getStyleSaver;
12490
12491      _reverting$2 = gsap$7.core.reverting || function () {};
12492
12493      PropTween$1 = propTween;
12494    },
12495    init: function init(target, vars, tween) {
12496      if (!gsap$7) {
12497        console.warn("Please gsap.registerPlugin(MotionPathPlugin)");
12498        return false;
12499      }
12500
12501      if (!(typeof vars === "object" && !vars.style) || !vars.path) {
12502        vars = {
12503          path: vars
12504        };
12505      }
12506
12507      var rawPaths = [],
12508          _vars = vars,
12509          path = _vars.path,
12510          autoRotate = _vars.autoRotate,
12511          unitX = _vars.unitX,
12512          unitY = _vars.unitY,
12513          x = _vars.x,
12514          y = _vars.y,
12515          firstObj = path[0],
12516          slicer = _sliceModifier(vars.start, "end" in vars ? vars.end : 1),
12517          rawPath,
12518          p;
12519
12520      this.rawPaths = rawPaths;
12521      this.target = target;
12522      this.tween = tween;
12523      this.styles = _getStyleSaver$3 && _getStyleSaver$3(target, "transform");
12524
12525      if (this.rotate = autoRotate || autoRotate === 0) {
12526        this.rOffset = parseFloat(autoRotate) || 0;
12527        this.radians = !!vars.useRadians;
12528        this.rProp = vars.rotation || "rotation";
12529        this.rSet = target._gsap.set(target, this.rProp, this);
12530        this.ru = _getUnit(target._gsap.get(target, this.rProp)) || 0;
12531      }
12532
12533      if (Array.isArray(path) && !("closed" in path) && typeof firstObj !== "number") {
12534        for (p in firstObj) {
12535          if (!x && ~_xProps.indexOf(p)) {
12536            x = p;
12537          } else if (!y && ~_yProps.indexOf(p)) {
12538            y = p;
12539          }
12540        }
12541
12542        if (x && y) {
12543          rawPaths.push(_segmentToRawPath(this, _populateSegmentFromArray(_populateSegmentFromArray([], path, x, 0), path, y, 1), target, x, y, slicer, vars, unitX || _getUnit(path[0][x]), unitY || _getUnit(path[0][y])));
12544        } else {
12545          x = y = 0;
12546        }
12547
12548        for (p in firstObj) {
12549          p !== x && p !== y && rawPaths.push(_segmentToRawPath(this, _populateSegmentFromArray([], path, p, 2), target, p, 0, slicer, vars, _getUnit(path[0][p])));
12550        }
12551      } else {
12552        rawPath = slicer(_align(getRawPath(vars.path), target, vars));
12553        cacheRawPathMeasurements(rawPath, vars.resolution);
12554        rawPaths.push(rawPath);
12555
12556        _addDimensionalPropTween(this, target, vars.x || "x", rawPath, "x", vars.unitX || "px");
12557
12558        _addDimensionalPropTween(this, target, vars.y || "y", rawPath, "y", vars.unitY || "px");
12559      }
12560    },
12561    render: function render(ratio, data) {
12562      var rawPaths = data.rawPaths,
12563          i = rawPaths.length,
12564          pt = data._pt;
12565
12566      if (data.tween._time || !_reverting$2()) {
12567        if (ratio > 1) {
12568          ratio = 1;
12569        } else if (ratio < 0) {
12570          ratio = 0;
12571        }
12572
12573        while (i--) {
12574          getPositionOnPath(rawPaths[i], ratio, !i && data.rotate, rawPaths[i]);
12575        }
12576
12577        while (pt) {
12578          pt.set(pt.t, pt.p, pt.path[pt.pp] + pt.u, pt.d, ratio);
12579          pt = pt._next;
12580        }
12581
12582        data.rotate && data.rSet(data.target, data.rProp, rawPaths[0].angle * (data.radians ? _DEG2RAD$3 : 1) + data.rOffset + data.ru, data, ratio);
12583      } else {
12584        data.styles.revert();
12585      }
12586    },
12587    getLength: function getLength(path) {
12588      return cacheRawPathMeasurements(getRawPath(path)).totalLength;
12589    },
12590    sliceRawPath: sliceRawPath,
12591    getRawPath: getRawPath,
12592    pointsToSegment: pointsToSegment,
12593    stringToRawPath: stringToRawPath,
12594    rawPathToString: rawPathToString,
12595    transformRawPath: transformRawPath,
12596    getGlobalMatrix: getGlobalMatrix,
12597    getPositionOnPath: getPositionOnPath,
12598    cacheRawPathMeasurements: cacheRawPathMeasurements,
12599    convertToPath: function convertToPath$1(targets, swap) {
12600      return _toArray$2(targets).map(function (target) {
12601        return convertToPath(target, swap !== false);
12602      });
12603    },
12604    convertCoordinates: function convertCoordinates(fromElement, toElement, point) {
12605      var m = getGlobalMatrix(toElement, true, true).multiply(getGlobalMatrix(fromElement));
12606      return point ? m.apply(point) : m;
12607    },
12608    getAlignMatrix: _getAlignMatrix,
12609    getRelativePosition: function getRelativePosition(fromElement, toElement, fromOrigin, toOrigin) {
12610      var m = _getAlignMatrix(fromElement, toElement, fromOrigin, toOrigin);
12611
12612      return {
12613        x: m.e,
12614        y: m.f
12615      };
12616    },
12617    arrayToRawPath: function arrayToRawPath(value, vars) {
12618      vars = vars || {};
12619
12620      var segment = _populateSegmentFromArray(_populateSegmentFromArray([], value, vars.x || "x", 0), value, vars.y || "y", 1);
12621
12622      vars.relative && _relativize(segment);
12623      return [vars.type === "cubic" ? segment : pointsToSegment(segment, vars.curviness)];
12624    }
12625  };
12626  _getGSAP$5() && gsap$7.registerPlugin(MotionPathPlugin);
12627
12628  /*!
12629   * Observer 3.12.5
12630   * https://gsap.com
12631   *
12632   * @license Copyright 2008-2024, GreenSock. All rights reserved.
12633   * Subject to the terms at https://gsap.com/standard-license or for
12634   * Club GSAP members, the agreement issued with that membership.
12635   * @author: Jack Doyle, [email protected]
12636  */
12637  var gsap$8,
12638      _coreInitted$5,
12639      _clamp$1,
12640      _win$5,
12641      _doc$5,
12642      _docEl,
12643      _body$3,
12644      _isTouch,
12645      _pointerType,
12646      ScrollTrigger,
12647      _root,
12648      _normalizer,
12649      _eventTypes,
12650      _context$2,
12651      _getGSAP$6 = function _getGSAP() {
12652    return gsap$8 || typeof window !== "undefined" && (gsap$8 = window.gsap) && gsap$8.registerPlugin && gsap$8;
12653  },
12654      _startup = 1,
12655      _observers = [];
12656      exports._scrollers = [];
12657      exports._proxies = [];
12658      var _getTime$1 = Date.now,
12659      _bridge = function _bridge(name, value) {
12660    return value;
12661  },
12662      _integrate = function _integrate() {
12663    var core = ScrollTrigger.core,
12664        data = core.bridge || {},
12665        scrollers = core._scrollers,
12666        proxies = core._proxies;
12667    scrollers.push.apply(scrollers, exports._scrollers);
vendor: 10,243 bytes, lines 12668-12944
12668    proxies.push.apply(proxies, exports._proxies);
12669    exports._scrollers = scrollers;
12670    exports._proxies = proxies;
12671
12672    _bridge = function _bridge(name, value) {
12673      return data[name](value);
12674    };
12675  },
12676      _getProxyProp = function _getProxyProp(element, property) {
12677    return ~exports._proxies.indexOf(element) && exports._proxies[exports._proxies.indexOf(element) + 1][property];
12678  },
12679      _isViewport = function _isViewport(el) {
12680    return !!~_root.indexOf(el);
12681  },
12682      _addListener$1 = function _addListener(element, type, func, passive, capture) {
12683    return element.addEventListener(type, func, {
12684      passive: passive !== false,
12685      capture: !!capture
12686    });
12687  },
12688      _removeListener$1 = function _removeListener(element, type, func, capture) {
12689    return element.removeEventListener(type, func, !!capture);
12690  },
12691      _scrollLeft = "scrollLeft",
12692      _scrollTop = "scrollTop",
12693      _onScroll = function _onScroll() {
12694    return _normalizer && _normalizer.isPressed || exports._scrollers.cache++;
12695  },
12696      _scrollCacheFunc = function _scrollCacheFunc(f, doNotCache) {
12697    var cachingFunc = function cachingFunc(value) {
12698      if (value || value === 0) {
12699        _startup && (_win$5.history.scrollRestoration = "manual");
12700        var isNormalizing = _normalizer && _normalizer.isPressed;
12701        value = cachingFunc.v = Math.round(value) || (_normalizer && _normalizer.iOS ? 1 : 0);
12702        f(value);
12703        cachingFunc.cacheID = exports._scrollers.cache;
12704        isNormalizing && _bridge("ss", value);
12705      } else if (doNotCache || exports._scrollers.cache !== cachingFunc.cacheID || _bridge("ref")) {
12706        cachingFunc.cacheID = exports._scrollers.cache;
12707        cachingFunc.v = f();
12708      }
12709
12710      return cachingFunc.v + cachingFunc.offset;
12711    };
12712
12713    cachingFunc.offset = 0;
12714    return f && cachingFunc;
12715  },
12716      _horizontal = {
12717    s: _scrollLeft,
12718    p: "left",
12719    p2: "Left",
12720    os: "right",
12721    os2: "Right",
12722    d: "width",
12723    d2: "Width",
12724    a: "x",
12725    sc: _scrollCacheFunc(function (value) {
12726      return arguments.length ? _win$5.scrollTo(value, _vertical.sc()) : _win$5.pageXOffset || _doc$5[_scrollLeft] || _docEl[_scrollLeft] || _body$3[_scrollLeft] || 0;
12727    })
12728  },
12729      _vertical = {
12730    s: _scrollTop,
12731    p: "top",
12732    p2: "Top",
12733    os: "bottom",
12734    os2: "Bottom",
12735    d: "height",
12736    d2: "Height",
12737    a: "y",
12738    op: _horizontal,
12739    sc: _scrollCacheFunc(function (value) {
12740      return arguments.length ? _win$5.scrollTo(_horizontal.sc(), value) : _win$5.pageYOffset || _doc$5[_scrollTop] || _docEl[_scrollTop] || _body$3[_scrollTop] || 0;
12741    })
12742  },
12743      _getTarget = function _getTarget(t, self) {
12744    return (self && self._ctx && self._ctx.selector || gsap$8.utils.toArray)(t)[0] || (typeof t === "string" && gsap$8.config().nullTargetWarn !== false ? console.warn("Element not found:", t) : null);
12745  },
12746      _getScrollFunc = function _getScrollFunc(element, _ref) {
12747    var s = _ref.s,
12748        sc = _ref.sc;
12749    _isViewport(element) && (element = _doc$5.scrollingElement || _docEl);
12750
12751    var i = exports._scrollers.indexOf(element),
12752        offset = sc === _vertical.sc ? 1 : 2;
12753
12754    !~i && (i = exports._scrollers.push(element) - 1);
12755    exports._scrollers[i + offset] || _addListener$1(element, "scroll", _onScroll);
12756    var prev = exports._scrollers[i + offset],
12757        func = prev || (exports._scrollers[i + offset] = _scrollCacheFunc(_getProxyProp(element, s), true) || (_isViewport(element) ? sc : _scrollCacheFunc(function (value) {
12758      return arguments.length ? element[s] = value : element[s];
12759    })));
12760    func.target = element;
12761    prev || (func.smooth = gsap$8.getProperty(element, "scrollBehavior") === "smooth");
12762    return func;
12763  },
12764      _getVelocityProp = function _getVelocityProp(value, minTimeRefresh, useDelta) {
12765    var v1 = value,
12766        v2 = value,
12767        t1 = _getTime$1(),
12768        t2 = t1,
12769        min = minTimeRefresh || 50,
12770        dropToZeroTime = Math.max(500, min * 3),
12771        update = function update(value, force) {
12772      var t = _getTime$1();
12773
12774      if (force || t - t1 > min) {
12775        v2 = v1;
12776        v1 = value;
12777        t2 = t1;
12778        t1 = t;
12779      } else if (useDelta) {
12780        v1 += value;
12781      } else {
12782        v1 = v2 + (value - v2) / (t - t2) * (t1 - t2);
12783      }
12784    },
12785        reset = function reset() {
12786      v2 = v1 = useDelta ? 0 : v1;
12787      t2 = t1 = 0;
12788    },
12789        getVelocity = function getVelocity(latestValue) {
12790      var tOld = t2,
12791          vOld = v2,
12792          t = _getTime$1();
12793
12794      (latestValue || latestValue === 0) && latestValue !== v1 && update(latestValue);
12795      return t1 === t2 || t - t2 > dropToZeroTime ? 0 : (v1 + (useDelta ? vOld : -vOld)) / ((useDelta ? t : t1) - tOld) * 1000;
12796    };
12797
12798    return {
12799      update: update,
12800      reset: reset,
12801      getVelocity: getVelocity
12802    };
12803  },
12804      _getEvent = function _getEvent(e, preventDefault) {
12805    preventDefault && !e._gsapAllow && e.preventDefault();
12806    return e.changedTouches ? e.changedTouches[0] : e;
12807  },
12808      _getAbsoluteMax = function _getAbsoluteMax(a) {
12809    var max = Math.max.apply(Math, a),
12810        min = Math.min.apply(Math, a);
12811    return Math.abs(max) >= Math.abs(min) ? max : min;
12812  },
12813      _setScrollTrigger = function _setScrollTrigger() {
12814    ScrollTrigger = gsap$8.core.globals().ScrollTrigger;
12815    ScrollTrigger && ScrollTrigger.core && _integrate();
12816  },
12817      _initCore$6 = function _initCore(core) {
12818    gsap$8 = core || _getGSAP$6();
12819
12820    if (!_coreInitted$5 && gsap$8 && typeof document !== "undefined" && document.body) {
12821      _win$5 = window;
12822      _doc$5 = document;
12823      _docEl = _doc$5.documentElement;
12824      _body$3 = _doc$5.body;
12825      _root = [_win$5, _doc$5, _docEl, _body$3];
12826      _clamp$1 = gsap$8.utils.clamp;
12827
12828      _context$2 = gsap$8.core.context || function () {};
12829
12830      _pointerType = "onpointerenter" in _body$3 ? "pointer" : "mouse";
12831      _isTouch = Observer.isTouch = _win$5.matchMedia && _win$5.matchMedia("(hover: none), (pointer: coarse)").matches ? 1 : "ontouchstart" in _win$5 || navigator.maxTouchPoints > 0 || navigator.msMaxTouchPoints > 0 ? 2 : 0;
12832      _eventTypes = Observer.eventTypes = ("ontouchstart" in _docEl ? "touchstart,touchmove,touchcancel,touchend" : !("onpointerdown" in _docEl) ? "mousedown,mousemove,mouseup,mouseup" : "pointerdown,pointermove,pointercancel,pointerup").split(",");
12833      setTimeout(function () {
12834        return _startup = 0;
12835      }, 500);
12836
12837      _setScrollTrigger();
12838
12839      _coreInitted$5 = 1;
12840    }
12841
12842    return _coreInitted$5;
12843  };
12844
12845  _horizontal.op = _vertical;
12846  exports._scrollers.cache = 0;
12847  var Observer = function () {
12848    function Observer(vars) {
12849      this.init(vars);
12850    }
12851
12852    var _proto = Observer.prototype;
12853
12854    _proto.init = function init(vars) {
12855      _coreInitted$5 || _initCore$6(gsap$8) || console.warn("Please gsap.registerPlugin(Observer)");
12856      ScrollTrigger || _setScrollTrigger();
12857      var tolerance = vars.tolerance,
12858          dragMinimum = vars.dragMinimum,
12859          type = vars.type,
12860          target = vars.target,
12861          lineHeight = vars.lineHeight,
12862          debounce = vars.debounce,
12863          preventDefault = vars.preventDefault,
12864          onStop = vars.onStop,
12865          onStopDelay = vars.onStopDelay,
12866          ignore = vars.ignore,
12867          wheelSpeed = vars.wheelSpeed,
12868          event = vars.event,
12869          onDragStart = vars.onDragStart,
12870          onDragEnd = vars.onDragEnd,
12871          onDrag = vars.onDrag,
12872          onPress = vars.onPress,
12873          onRelease = vars.onRelease,
12874          onRight = vars.onRight,
12875          onLeft = vars.onLeft,
12876          onUp = vars.onUp,
12877          onDown = vars.onDown,
12878          onChangeX = vars.onChangeX,
12879          onChangeY = vars.onChangeY,
12880          onChange = vars.onChange,
12881          onToggleX = vars.onToggleX,
12882          onToggleY = vars.onToggleY,
12883          onHover = vars.onHover,
12884          onHoverEnd = vars.onHoverEnd,
12885          onMove = vars.onMove,
12886          ignoreCheck = vars.ignoreCheck,
12887          isNormalizer = vars.isNormalizer,
12888          onGestureStart = vars.onGestureStart,
12889          onGestureEnd = vars.onGestureEnd,
12890          onWheel = vars.onWheel,
12891          onEnable = vars.onEnable,
12892          onDisable = vars.onDisable,
12893          onClick = vars.onClick,
12894          scrollSpeed = vars.scrollSpeed,
12895          capture = vars.capture,
12896          allowClicks = vars.allowClicks,
12897          lockAxis = vars.lockAxis,
12898          onLockAxis = vars.onLockAxis;
12899      this.target = target = _getTarget(target) || _docEl;
12900      this.vars = vars;
12901      ignore && (ignore = gsap$8.utils.toArray(ignore));
12902      tolerance = tolerance || 1e-9;
12903      dragMinimum = dragMinimum || 0;
12904      wheelSpeed = wheelSpeed || 1;
12905      scrollSpeed = scrollSpeed || 1;
12906      type = type || "wheel,touch,pointer";
12907      debounce = debounce !== false;
12908      lineHeight || (lineHeight = parseFloat(_win$5.getComputedStyle(_body$3).lineHeight) || 22);
12909
12910      var id,
12911          onStopDelayedCall,
12912          dragged,
12913          moved,
12914          wheeled,
12915          locked,
12916          axis,
12917          self = this,
12918          prevDeltaX = 0,
12919          prevDeltaY = 0,
12920          passive = vars.passive || !preventDefault,
12921          scrollFuncX = _getScrollFunc(target, _horizontal),
12922          scrollFuncY = _getScrollFunc(target, _vertical),
12923          scrollX = scrollFuncX(),
12924          scrollY = scrollFuncY(),
12925          limitToTouch = ~type.indexOf("touch") && !~type.indexOf("pointer") && _eventTypes[0] === "pointerdown",
12926          isViewport = _isViewport(target),
12927          ownerDoc = target.ownerDocument || _doc$5,
12928          deltaX = [0, 0, 0],
12929          deltaY = [0, 0, 0],
12930          onClickTime = 0,
12931          clickCapture = function clickCapture() {
12932        return onClickTime = _getTime$1();
12933      },
12934          _ignoreCheck = function _ignoreCheck(e, isPointerOrTouch) {
12935        return (self.event = e) && ignore && ~ignore.indexOf(e.target) || isPointerOrTouch && limitToTouch && e.pointerType !== "touch" || ignoreCheck && ignoreCheck(e, isPointerOrTouch);
12936      },
12937          onStopFunc = function onStopFunc() {
12938        self._vx.reset();
12939
12940        self._vy.reset();
12941
12942        onStopDelayedCall.pause();
12943        onStop && onStop(self);
12944      },
vendor: 9,992 bytes, lines 12945-13236
12945          update = function update() {
12946        var dx = self.deltaX = _getAbsoluteMax(deltaX),
12947            dy = self.deltaY = _getAbsoluteMax(deltaY),
12948            changedX = Math.abs(dx) >= tolerance,
12949            changedY = Math.abs(dy) >= tolerance;
12950
12951        onChange && (changedX || changedY) && onChange(self, dx, dy, deltaX, deltaY);
12952
12953        if (changedX) {
12954          onRight && self.deltaX > 0 && onRight(self);
12955          onLeft && self.deltaX < 0 && onLeft(self);
12956          onChangeX && onChangeX(self);
12957          onToggleX && self.deltaX < 0 !== prevDeltaX < 0 && onToggleX(self);
12958          prevDeltaX = self.deltaX;
12959          deltaX[0] = deltaX[1] = deltaX[2] = 0;
12960        }
12961
12962        if (changedY) {
12963          onDown && self.deltaY > 0 && onDown(self);
12964          onUp && self.deltaY < 0 && onUp(self);
12965          onChangeY && onChangeY(self);
12966          onToggleY && self.deltaY < 0 !== prevDeltaY < 0 && onToggleY(self);
12967          prevDeltaY = self.deltaY;
12968          deltaY[0] = deltaY[1] = deltaY[2] = 0;
12969        }
12970
12971        if (moved || dragged) {
12972          onMove && onMove(self);
12973
12974          if (dragged) {
12975            onDrag(self);
12976            dragged = false;
12977          }
12978
12979          moved = false;
12980        }
12981
12982        locked && !(locked = false) && onLockAxis && onLockAxis(self);
12983
12984        if (wheeled) {
12985          onWheel(self);
12986          wheeled = false;
12987        }
12988
12989        id = 0;
12990      },
12991          onDelta = function onDelta(x, y, index) {
12992        deltaX[index] += x;
12993        deltaY[index] += y;
12994
12995        self._vx.update(x);
12996
12997        self._vy.update(y);
12998
12999        debounce ? id || (id = requestAnimationFrame(update)) : update();
13000      },
13001          onTouchOrPointerDelta = function onTouchOrPointerDelta(x, y) {
13002        if (lockAxis && !axis) {
13003          self.axis = axis = Math.abs(x) > Math.abs(y) ? "x" : "y";
13004          locked = true;
13005        }
13006
13007        if (axis !== "y") {
13008          deltaX[2] += x;
13009
13010          self._vx.update(x, true);
13011        }
13012
13013        if (axis !== "x") {
13014          deltaY[2] += y;
13015
13016          self._vy.update(y, true);
13017        }
13018
13019        debounce ? id || (id = requestAnimationFrame(update)) : update();
13020      },
13021          _onDrag = function _onDrag(e) {
13022        if (_ignoreCheck(e, 1)) {
13023          return;
13024        }
13025
13026        e = _getEvent(e, preventDefault);
13027        var x = e.clientX,
13028            y = e.clientY,
13029            dx = x - self.x,
13030            dy = y - self.y,
13031            isDragging = self.isDragging;
13032        self.x = x;
13033        self.y = y;
13034
13035        if (isDragging || Math.abs(self.startX - x) >= dragMinimum || Math.abs(self.startY - y) >= dragMinimum) {
13036          onDrag && (dragged = true);
13037          isDragging || (self.isDragging = true);
13038          onTouchOrPointerDelta(dx, dy);
13039          isDragging || onDragStart && onDragStart(self);
13040        }
13041      },
13042          _onPress = self.onPress = function (e) {
13043        if (_ignoreCheck(e, 1) || e && e.button) {
13044          return;
13045        }
13046
13047        self.axis = axis = null;
13048        onStopDelayedCall.pause();
13049        self.isPressed = true;
13050        e = _getEvent(e);
13051        prevDeltaX = prevDeltaY = 0;
13052        self.startX = self.x = e.clientX;
13053        self.startY = self.y = e.clientY;
13054
13055        self._vx.reset();
13056
13057        self._vy.reset();
13058
13059        _addListener$1(isNormalizer ? target : ownerDoc, _eventTypes[1], _onDrag, passive, true);
13060
13061        self.deltaX = self.deltaY = 0;
13062        onPress && onPress(self);
13063      },
13064          _onRelease = self.onRelease = function (e) {
13065        if (_ignoreCheck(e, 1)) {
13066          return;
13067        }
13068
13069        _removeListener$1(isNormalizer ? target : ownerDoc, _eventTypes[1], _onDrag, true);
13070
13071        var isTrackingDrag = !isNaN(self.y - self.startY),
13072            wasDragging = self.isDragging,
13073            isDragNotClick = wasDragging && (Math.abs(self.x - self.startX) > 3 || Math.abs(self.y - self.startY) > 3),
13074            eventData = _getEvent(e);
13075
13076        if (!isDragNotClick && isTrackingDrag) {
13077          self._vx.reset();
13078
13079          self._vy.reset();
13080
13081          if (preventDefault && allowClicks) {
13082            gsap$8.delayedCall(0.08, function () {
13083              if (_getTime$1() - onClickTime > 300 && !e.defaultPrevented) {
13084                if (e.target.click) {
13085                  e.target.click();
13086                } else if (ownerDoc.createEvent) {
13087                  var syntheticEvent = ownerDoc.createEvent("MouseEvents");
13088                  syntheticEvent.initMouseEvent("click", true, true, _win$5, 1, eventData.screenX, eventData.screenY, eventData.clientX, eventData.clientY, false, false, false, false, 0, null);
13089                  e.target.dispatchEvent(syntheticEvent);
13090                }
13091              }
13092            });
13093          }
13094        }
13095
13096        self.isDragging = self.isGesturing = self.isPressed = false;
13097        onStop && wasDragging && !isNormalizer && onStopDelayedCall.restart(true);
13098        onDragEnd && wasDragging && onDragEnd(self);
13099        onRelease && onRelease(self, isDragNotClick);
13100      },
13101          _onGestureStart = function _onGestureStart(e) {
13102        return e.touches && e.touches.length > 1 && (self.isGesturing = true) && onGestureStart(e, self.isDragging);
13103      },
13104          _onGestureEnd = function _onGestureEnd() {
13105        return (self.isGesturing = false) || onGestureEnd(self);
13106      },
13107          onScroll = function onScroll(e) {
13108        if (_ignoreCheck(e)) {
13109          return;
13110        }
13111
13112        var x = scrollFuncX(),
13113            y = scrollFuncY();
13114        onDelta((x - scrollX) * scrollSpeed, (y - scrollY) * scrollSpeed, 1);
13115        scrollX = x;
13116        scrollY = y;
13117        onStop && onStopDelayedCall.restart(true);
13118      },
13119          _onWheel = function _onWheel(e) {
13120        if (_ignoreCheck(e)) {
13121          return;
13122        }
13123
13124        e = _getEvent(e, preventDefault);
13125        onWheel && (wheeled = true);
13126        var multiplier = (e.deltaMode === 1 ? lineHeight : e.deltaMode === 2 ? _win$5.innerHeight : 1) * wheelSpeed;
13127        onDelta(e.deltaX * multiplier, e.deltaY * multiplier, 0);
13128        onStop && !isNormalizer && onStopDelayedCall.restart(true);
13129      },
13130          _onMove = function _onMove(e) {
13131        if (_ignoreCheck(e)) {
13132          return;
13133        }
13134
13135        var x = e.clientX,
13136            y = e.clientY,
13137            dx = x - self.x,
13138            dy = y - self.y;
13139        self.x = x;
13140        self.y = y;
13141        moved = true;
13142        onStop && onStopDelayedCall.restart(true);
13143        (dx || dy) && onTouchOrPointerDelta(dx, dy);
13144      },
13145          _onHover = function _onHover(e) {
13146        self.event = e;
13147        onHover(self);
13148      },
13149          _onHoverEnd = function _onHoverEnd(e) {
13150        self.event = e;
13151        onHoverEnd(self);
13152      },
13153          _onClick = function _onClick(e) {
13154        return _ignoreCheck(e) || _getEvent(e, preventDefault) && onClick(self);
13155      };
13156
13157      onStopDelayedCall = self._dc = gsap$8.delayedCall(onStopDelay || 0.25, onStopFunc).pause();
13158      self.deltaX = self.deltaY = 0;
13159      self._vx = _getVelocityProp(0, 50, true);
13160      self._vy = _getVelocityProp(0, 50, true);
13161      self.scrollX = scrollFuncX;
13162      self.scrollY = scrollFuncY;
13163      self.isDragging = self.isGesturing = self.isPressed = false;
13164
13165      _context$2(this);
13166
13167      self.enable = function (e) {
13168        if (!self.isEnabled) {
13169          _addListener$1(isViewport ? ownerDoc : target, "scroll", _onScroll);
13170
13171          type.indexOf("scroll") >= 0 && _addListener$1(isViewport ? ownerDoc : target, "scroll", onScroll, passive, capture);
13172          type.indexOf("wheel") >= 0 && _addListener$1(target, "wheel", _onWheel, passive, capture);
13173
13174          if (type.indexOf("touch") >= 0 && _isTouch || type.indexOf("pointer") >= 0) {
13175            _addListener$1(target, _eventTypes[0], _onPress, passive, capture);
13176
13177            _addListener$1(ownerDoc, _eventTypes[2], _onRelease);
13178
13179            _addListener$1(ownerDoc, _eventTypes[3], _onRelease);
13180
13181            allowClicks && _addListener$1(target, "click", clickCapture, true, true);
13182            onClick && _addListener$1(target, "click", _onClick);
13183            onGestureStart && _addListener$1(ownerDoc, "gesturestart", _onGestureStart);
13184            onGestureEnd && _addListener$1(ownerDoc, "gestureend", _onGestureEnd);
13185            onHover && _addListener$1(target, _pointerType + "enter", _onHover);
13186            onHoverEnd && _addListener$1(target, _pointerType + "leave", _onHoverEnd);
13187            onMove && _addListener$1(target, _pointerType + "move", _onMove);
13188          }
13189
13190          self.isEnabled = true;
13191          e && e.type && _onPress(e);
13192          onEnable && onEnable(self);
13193        }
13194
13195        return self;
13196      };
13197
13198      self.disable = function () {
13199        if (self.isEnabled) {
13200          _observers.filter(function (o) {
13201            return o !== self && _isViewport(o.target);
13202          }).length || _removeListener$1(isViewport ? ownerDoc : target, "scroll", _onScroll);
13203
13204          if (self.isPressed) {
13205            self._vx.reset();
13206
13207            self._vy.reset();
13208
13209            _removeListener$1(isNormalizer ? target : ownerDoc, _eventTypes[1], _onDrag, true);
13210          }
13211
13212          _removeListener$1(isViewport ? ownerDoc : target, "scroll", onScroll, capture);
13213
13214          _removeListener$1(target, "wheel", _onWheel, capture);
13215
13216          _removeListener$1(target, _eventTypes[0], _onPress, capture);
13217
13218          _removeListener$1(ownerDoc, _eventTypes[2], _onRelease);
13219
13220          _removeListener$1(ownerDoc, _eventTypes[3], _onRelease);
13221
13222          _removeListener$1(target, "click", clickCapture, true);
13223
13224          _removeListener$1(target, "click", _onClick);
13225
13226          _removeListener$1(ownerDoc, "gesturestart", _onGestureStart);
13227
13228          _removeListener$1(ownerDoc, "gestureend", _onGestureEnd);
13229
13230          _removeListener$1(target, _pointerType + "enter", _onHover);
13231
13232          _removeListener$1(target, _pointerType + "leave", _onHoverEnd);
13233
13234          _removeListener$1(target, _pointerType + "move", _onMove);
13235
13236          self.isEnabled = self.isPressed = self.isDragging = false;
vendor: 13,673 bytes, lines 13237-13677
13237          onDisable && onDisable(self);
13238        }
13239      };
13240
13241      self.kill = self.revert = function () {
13242        self.disable();
13243
13244        var i = _observers.indexOf(self);
13245
13246        i >= 0 && _observers.splice(i, 1);
13247        _normalizer === self && (_normalizer = 0);
13248      };
13249
13250      _observers.push(self);
13251
13252      isNormalizer && _isViewport(target) && (_normalizer = self);
13253      self.enable(event);
13254    };
13255
13256    _createClass(Observer, [{
13257      key: "velocityX",
13258      get: function get() {
13259        return this._vx.getVelocity();
13260      }
13261    }, {
13262      key: "velocityY",
13263      get: function get() {
13264        return this._vy.getVelocity();
13265      }
13266    }]);
13267
13268    return Observer;
13269  }();
13270  Observer.version = "3.12.5";
13271
13272  Observer.create = function (vars) {
13273    return new Observer(vars);
13274  };
13275
13276  Observer.register = _initCore$6;
13277
13278  Observer.getAll = function () {
13279    return _observers.slice();
13280  };
13281
13282  Observer.getById = function (id) {
13283    return _observers.filter(function (o) {
13284      return o.vars.id === id;
13285    })[0];
13286  };
13287
13288  _getGSAP$6() && gsap$8.registerPlugin(Observer);
13289
13290  /*!
13291   * PixiPlugin 3.12.5
13292   * https://gsap.com
13293   *
13294   * @license Copyright 2008-2024, GreenSock. All rights reserved.
13295   * Subject to the terms at https://gsap.com/standard-license or for
13296   * Club GSAP members, the agreement issued with that membership.
13297   * @author: Jack Doyle, [email protected]
13298  */
13299  var gsap$9,
13300      _splitColor,
13301      _coreInitted$6,
13302      _PIXI,
13303      PropTween$2,
13304      _getSetter$1,
13305      _isV4,
13306      _windowExists$5 = function _windowExists() {
13307    return typeof window !== "undefined";
13308  },
13309      _getGSAP$7 = function _getGSAP() {
13310    return gsap$9 || _windowExists$5() && (gsap$9 = window.gsap) && gsap$9.registerPlugin && gsap$9;
13311  },
13312      _isFunction$2 = function _isFunction(value) {
13313    return typeof value === "function";
13314  },
13315      _warn$2 = function _warn(message) {
13316    return console.warn(message);
13317  },
13318      _idMatrix$1 = [1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0],
13319      _lumR$1 = 0.212671,
13320      _lumG$1 = 0.715160,
13321      _lumB$1 = 0.072169,
13322      _filterClass = function _filterClass(name) {
13323    return _isFunction$2(_PIXI[name]) ? _PIXI[name] : _PIXI.filters[name];
13324  },
13325      _applyMatrix$1 = function _applyMatrix(m, m2) {
13326    var temp = [],
13327        i = 0,
13328        z = 0,
13329        y,
13330        x;
13331
13332    for (y = 0; y < 4; y++) {
13333      for (x = 0; x < 5; x++) {
13334        z = x === 4 ? m[i + 4] : 0;
13335        temp[i + x] = m[i] * m2[x] + m[i + 1] * m2[x + 5] + m[i + 2] * m2[x + 10] + m[i + 3] * m2[x + 15] + z;
13336      }
13337
13338      i += 5;
13339    }
13340
13341    return temp;
13342  },
13343      _setSaturation$1 = function _setSaturation(m, n) {
13344    var inv = 1 - n,
13345        r = inv * _lumR$1,
13346        g = inv * _lumG$1,
13347        b = inv * _lumB$1;
13348    return _applyMatrix$1([r + n, g, b, 0, 0, r, g + n, b, 0, 0, r, g, b + n, 0, 0, 0, 0, 0, 1, 0], m);
13349  },
13350      _colorize$1 = function _colorize(m, color, amount) {
13351    var c = _splitColor(color),
13352        r = c[0] / 255,
13353        g = c[1] / 255,
13354        b = c[2] / 255,
13355        inv = 1 - amount;
13356
13357    return _applyMatrix$1([inv + amount * r * _lumR$1, amount * r * _lumG$1, amount * r * _lumB$1, 0, 0, amount * g * _lumR$1, inv + amount * g * _lumG$1, amount * g * _lumB$1, 0, 0, amount * b * _lumR$1, amount * b * _lumG$1, inv + amount * b * _lumB$1, 0, 0, 0, 0, 0, 1, 0], m);
13358  },
13359      _setHue$1 = function _setHue(m, n) {
13360    n *= Math.PI / 180;
13361    var c = Math.cos(n),
13362        s = Math.sin(n);
13363    return _applyMatrix$1([_lumR$1 + c * (1 - _lumR$1) + s * -_lumR$1, _lumG$1 + c * -_lumG$1 + s * -_lumG$1, _lumB$1 + c * -_lumB$1 + s * (1 - _lumB$1), 0, 0, _lumR$1 + c * -_lumR$1 + s * 0.143, _lumG$1 + c * (1 - _lumG$1) + s * 0.14, _lumB$1 + c * -_lumB$1 + s * -0.283, 0, 0, _lumR$1 + c * -_lumR$1 + s * -(1 - _lumR$1), _lumG$1 + c * -_lumG$1 + s * _lumG$1, _lumB$1 + c * (1 - _lumB$1) + s * _lumB$1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1], m);
13364  },
13365      _setContrast$1 = function _setContrast(m, n) {
13366    return _applyMatrix$1([n, 0, 0, 0, 0.5 * (1 - n), 0, n, 0, 0, 0.5 * (1 - n), 0, 0, n, 0, 0.5 * (1 - n), 0, 0, 0, 1, 0], m);
13367  },
13368      _getFilter = function _getFilter(target, type) {
13369    var filterClass = _filterClass(type),
13370        filters = target.filters || [],
13371        i = filters.length,
13372        filter;
13373
13374    filterClass || _warn$2(type + " not found. PixiPlugin.registerPIXI(PIXI)");
13375
13376    while (--i > -1) {
13377      if (filters[i] instanceof filterClass) {
13378        return filters[i];
13379      }
13380    }
13381
13382    filter = new filterClass();
13383
13384    if (type === "BlurFilter") {
13385      filter.blur = 0;
13386    }
13387
13388    filters.push(filter);
13389    target.filters = filters;
13390    return filter;
13391  },
13392      _addColorMatrixFilterCacheTween = function _addColorMatrixFilterCacheTween(p, plugin, cache, vars) {
13393    plugin.add(cache, p, cache[p], vars[p]);
13394
13395    plugin._props.push(p);
13396  },
13397      _applyBrightnessToMatrix = function _applyBrightnessToMatrix(brightness, matrix) {
13398    var filterClass = _filterClass("ColorMatrixFilter"),
13399        temp = new filterClass();
13400
13401    temp.matrix = matrix;
13402    temp.brightness(brightness, true);
13403    return temp.matrix;
13404  },
13405      _copy$2 = function _copy(obj) {
13406    var copy = {},
13407        p;
13408
13409    for (p in obj) {
13410      copy[p] = obj[p];
13411    }
13412
13413    return copy;
13414  },
13415      _CMFdefaults = {
13416    contrast: 1,
13417    saturation: 1,
13418    colorizeAmount: 0,
13419    colorize: "rgb(255,255,255)",
13420    hue: 0,
13421    brightness: 1
13422  },
13423      _parseColorMatrixFilter$1 = function _parseColorMatrixFilter(target, v, pg) {
13424    var filter = _getFilter(target, "ColorMatrixFilter"),
13425        cache = target._gsColorMatrixFilter = target._gsColorMatrixFilter || _copy$2(_CMFdefaults),
13426        combine = v.combineCMF && !("colorMatrixFilter" in v && !v.colorMatrixFilter),
13427        i,
13428        matrix,
13429        startMatrix;
13430
13431    startMatrix = filter.matrix;
13432
13433    if (v.resolution) {
13434      filter.resolution = v.resolution;
13435    }
13436
13437    if (v.matrix && v.matrix.length === startMatrix.length) {
13438      matrix = v.matrix;
13439
13440      if (cache.contrast !== 1) {
13441        _addColorMatrixFilterCacheTween("contrast", pg, cache, _CMFdefaults);
13442      }
13443
13444      if (cache.hue) {
13445        _addColorMatrixFilterCacheTween("hue", pg, cache, _CMFdefaults);
13446      }
13447
13448      if (cache.brightness !== 1) {
13449        _addColorMatrixFilterCacheTween("brightness", pg, cache, _CMFdefaults);
13450      }
13451
13452      if (cache.colorizeAmount) {
13453        _addColorMatrixFilterCacheTween("colorize", pg, cache, _CMFdefaults);
13454
13455        _addColorMatrixFilterCacheTween("colorizeAmount", pg, cache, _CMFdefaults);
13456      }
13457
13458      if (cache.saturation !== 1) {
13459        _addColorMatrixFilterCacheTween("saturation", pg, cache, _CMFdefaults);
13460      }
13461    } else {
13462      matrix = _idMatrix$1.slice();
13463
13464      if (v.contrast != null) {
13465        matrix = _setContrast$1(matrix, +v.contrast);
13466
13467        _addColorMatrixFilterCacheTween("contrast", pg, cache, v);
13468      } else if (cache.contrast !== 1) {
13469        if (combine) {
13470          matrix = _setContrast$1(matrix, cache.contrast);
13471        } else {
13472          _addColorMatrixFilterCacheTween("contrast", pg, cache, _CMFdefaults);
13473        }
13474      }
13475
13476      if (v.hue != null) {
13477        matrix = _setHue$1(matrix, +v.hue);
13478
13479        _addColorMatrixFilterCacheTween("hue", pg, cache, v);
13480      } else if (cache.hue) {
13481        if (combine) {
13482          matrix = _setHue$1(matrix, cache.hue);
13483        } else {
13484          _addColorMatrixFilterCacheTween("hue", pg, cache, _CMFdefaults);
13485        }
13486      }
13487
13488      if (v.brightness != null) {
13489        matrix = _applyBrightnessToMatrix(+v.brightness, matrix);
13490
13491        _addColorMatrixFilterCacheTween("brightness", pg, cache, v);
13492      } else if (cache.brightness !== 1) {
13493        if (combine) {
13494          matrix = _applyBrightnessToMatrix(cache.brightness, matrix);
13495        } else {
13496          _addColorMatrixFilterCacheTween("brightness", pg, cache, _CMFdefaults);
13497        }
13498      }
13499
13500      if (v.colorize != null) {
13501        v.colorizeAmount = "colorizeAmount" in v ? +v.colorizeAmount : 1;
13502        matrix = _colorize$1(matrix, v.colorize, v.colorizeAmount);
13503
13504        _addColorMatrixFilterCacheTween("colorize", pg, cache, v);
13505
13506        _addColorMatrixFilterCacheTween("colorizeAmount", pg, cache, v);
13507      } else if (cache.colorizeAmount) {
13508        if (combine) {
13509          matrix = _colorize$1(matrix, cache.colorize, cache.colorizeAmount);
13510        } else {
13511          _addColorMatrixFilterCacheTween("colorize", pg, cache, _CMFdefaults);
13512
13513          _addColorMatrixFilterCacheTween("colorizeAmount", pg, cache, _CMFdefaults);
13514        }
13515      }
13516
13517      if (v.saturation != null) {
13518        matrix = _setSaturation$1(matrix, +v.saturation);
13519
13520        _addColorMatrixFilterCacheTween("saturation", pg, cache, v);
13521      } else if (cache.saturation !== 1) {
13522        if (combine) {
13523          matrix = _setSaturation$1(matrix, cache.saturation);
13524        } else {
13525          _addColorMatrixFilterCacheTween("saturation", pg, cache, _CMFdefaults);
13526        }
13527      }
13528    }
13529
13530    i = matrix.length;
13531
13532    while (--i > -1) {
13533      if (matrix[i] !== startMatrix[i]) {
13534        pg.add(startMatrix, i, startMatrix[i], matrix[i], "colorMatrixFilter");
13535      }
13536    }
13537
13538    pg._props.push("colorMatrixFilter");
13539  },
13540      _renderColor = function _renderColor(ratio, _ref) {
13541    var t = _ref.t,
13542        p = _ref.p,
13543        color = _ref.color,
13544        set = _ref.set;
13545    set(t, p, color[0] << 16 | color[1] << 8 | color[2]);
13546  },
13547      _renderDirtyCache = function _renderDirtyCache(ratio, _ref2) {
13548    var g = _ref2.g;
13549
13550    if (g) {
13551      g.dirty++;
13552      g.clearDirty++;
13553    }
13554  },
13555      _renderAutoAlpha = function _renderAutoAlpha(ratio, data) {
13556    data.t.visible = !!data.t.alpha;
13557  },
13558      _addColorTween = function _addColorTween(target, p, value, plugin) {
13559    var currentValue = target[p],
13560        startColor = _splitColor(_isFunction$2(currentValue) ? target[p.indexOf("set") || !_isFunction$2(target["get" + p.substr(3)]) ? p : "get" + p.substr(3)]() : currentValue),
13561        endColor = _splitColor(value);
13562
13563    plugin._pt = new PropTween$2(plugin._pt, target, p, 0, 0, _renderColor, {
13564      t: target,
13565      p: p,
13566      color: startColor,
13567      set: _getSetter$1(target, p)
13568    });
13569    plugin.add(startColor, 0, startColor[0], endColor[0]);
13570    plugin.add(startColor, 1, startColor[1], endColor[1]);
13571    plugin.add(startColor, 2, startColor[2], endColor[2]);
13572  },
13573      _colorProps$1 = {
13574    tint: 1,
13575    lineColor: 1,
13576    fillColor: 1
13577  },
13578      _xyContexts = "position,scale,skew,pivot,anchor,tilePosition,tileScale".split(","),
13579      _contexts = {
13580    x: "position",
13581    y: "position",
13582    tileX: "tilePosition",
13583    tileY: "tilePosition"
13584  },
13585      _colorMatrixFilterProps = {
13586    colorMatrixFilter: 1,
13587    saturation: 1,
13588    contrast: 1,
13589    hue: 1,
13590    colorize: 1,
13591    colorizeAmount: 1,
13592    brightness: 1,
13593    combineCMF: 1
13594  },
13595      _DEG2RAD$4 = Math.PI / 180,
13596      _isString$2 = function _isString(value) {
13597    return typeof value === "string";
13598  },
13599      _degreesToRadians = function _degreesToRadians(value) {
13600    return _isString$2(value) && value.charAt(1) === "=" ? value.substr(0, 2) + parseFloat(value.substr(2)) * _DEG2RAD$4 : value * _DEG2RAD$4;
13601  },
13602      _renderPropWithEnd$1 = function _renderPropWithEnd(ratio, data) {
13603    return data.set(data.t, data.p, ratio === 1 ? data.e : Math.round((data.s + data.c * ratio) * 100000) / 100000, data);
13604  },
13605      _addRotationalPropTween$1 = function _addRotationalPropTween(plugin, target, property, startNum, endValue, radians) {
13606    var cap = 360 * (radians ? _DEG2RAD$4 : 1),
13607        isString = _isString$2(endValue),
13608        relative = isString && endValue.charAt(1) === "=" ? +(endValue.charAt(0) + "1") : 0,
13609        endNum = parseFloat(relative ? endValue.substr(2) : endValue) * (radians ? _DEG2RAD$4 : 1),
13610        change = relative ? endNum * relative : endNum - startNum,
13611        finalValue = startNum + change,
13612        direction,
13613        pt;
13614
13615    if (isString) {
13616      direction = endValue.split("_")[1];
13617
13618      if (direction === "short") {
13619        change %= cap;
13620
13621        if (change !== change % (cap / 2)) {
13622          change += change < 0 ? cap : -cap;
13623        }
13624      }
13625
13626      if (direction === "cw" && change < 0) {
13627        change = (change + cap * 1e10) % cap - ~~(change / cap) * cap;
13628      } else if (direction === "ccw" && change > 0) {
13629        change = (change - cap * 1e10) % cap - ~~(change / cap) * cap;
13630      }
13631    }
13632
13633    plugin._pt = pt = new PropTween$2(plugin._pt, target, property, startNum, change, _renderPropWithEnd$1);
13634    pt.e = finalValue;
13635    return pt;
13636  },
13637      _initCore$7 = function _initCore() {
13638    if (!_coreInitted$6) {
13639      gsap$9 = _getGSAP$7();
13640      _PIXI = _coreInitted$6 = _PIXI || _windowExists$5() && window.PIXI;
13641      _isV4 = _PIXI && _PIXI.VERSION && _PIXI.VERSION.charAt(0) === "4";
13642
13643      _splitColor = function _splitColor(color) {
13644        return gsap$9.utils.splitColor((color + "").substr(0, 2) === "0x" ? "#" + color.substr(2) : color);
13645      };
13646    }
13647  },
13648      i,
13649      p$1;
13650
13651  for (i = 0; i < _xyContexts.length; i++) {
13652    p$1 = _xyContexts[i];
13653    _contexts[p$1 + "X"] = p$1;
13654    _contexts[p$1 + "Y"] = p$1;
13655  }
13656
13657  var PixiPlugin = {
13658    version: "3.12.5",
13659    name: "pixi",
13660    register: function register(core, Plugin, propTween) {
13661      gsap$9 = core;
13662      PropTween$2 = propTween;
13663      _getSetter$1 = Plugin.getSetter;
13664
13665      _initCore$7();
13666    },
13667    headless: true,
13668    registerPIXI: function registerPIXI(pixi) {
13669      _PIXI = pixi;
13670    },
13671    init: function init(target, values, tween, index, targets) {
13672      _PIXI || _initCore$7();
13673
13674      if (!_PIXI) {
13675        _warn$2("PIXI was not found. PixiPlugin.registerPIXI(PIXI);");
13676
13677        return false;
vendor: 2,279 bytes, lines 13678-13729
13678      }
13679
13680      var context, axis, value, colorMatrix, filter, p, padding, i, data;
13681
13682      for (p in values) {
13683        context = _contexts[p];
13684        value = values[p];
13685
13686        if (context) {
13687          axis = ~p.charAt(p.length - 1).toLowerCase().indexOf("x") ? "x" : "y";
13688          this.add(target[context], axis, target[context][axis], context === "skew" ? _degreesToRadians(value) : value, 0, 0, 0, 0, 0, 1);
13689        } else if (p === "scale" || p === "anchor" || p === "pivot" || p === "tileScale") {
13690          this.add(target[p], "x", target[p].x, value);
13691          this.add(target[p], "y", target[p].y, value);
13692        } else if (p === "rotation" || p === "angle") {
13693          _addRotationalPropTween$1(this, target, p, target[p], value, p === "rotation");
13694        } else if (_colorMatrixFilterProps[p]) {
13695          if (!colorMatrix) {
13696            _parseColorMatrixFilter$1(target, values.colorMatrixFilter || values, this);
13697
13698            colorMatrix = true;
13699          }
13700        } else if (p === "blur" || p === "blurX" || p === "blurY" || p === "blurPadding") {
13701          filter = _getFilter(target, "BlurFilter");
13702          this.add(filter, p, filter[p], value);
13703
13704          if (values.blurPadding !== 0) {
13705            padding = values.blurPadding || Math.max(filter[p], value) * 2;
13706            i = target.filters.length;
13707
13708            while (--i > -1) {
13709              target.filters[i].padding = Math.max(target.filters[i].padding, padding);
13710            }
13711          }
13712        } else if (_colorProps$1[p]) {
13713          if ((p === "lineColor" || p === "fillColor") && target instanceof _PIXI.Graphics) {
13714            data = (target.geometry || target).graphicsData;
13715            this._pt = new PropTween$2(this._pt, target, p, 0, 0, _renderDirtyCache, {
13716              g: target.geometry || target
13717            });
13718            i = data.length;
13719
13720            while (--i > -1) {
13721              _addColorTween(_isV4 ? data[i] : data[i][p.substr(0, 4) + "Style"], _isV4 ? p : "color", value, this);
13722            }
13723          } else {
13724            _addColorTween(target, p, value, this);
13725          }
13726        } else if (p === "autoAlpha") {
13727          this._pt = new PropTween$2(this._pt, target, "visible", 0, 0, _renderAutoAlpha);
13728          this.add(target, "alpha", target.alpha, value);
13729
vendor: 12,467 bytes, lines 13730-14122
13730          this._props.push("alpha", "visible");
13731        } else if (p !== "resolution") {
13732          this.add(target, p, "get", value);
13733        }
13734
13735        this._props.push(p);
13736      }
13737    }
13738  };
13739  _getGSAP$7() && gsap$9.registerPlugin(PixiPlugin);
13740
13741  /*!
13742   * ScrollToPlugin 3.12.5
13743   * https://gsap.com
13744   *
13745   * @license Copyright 2008-2024, GreenSock. All rights reserved.
13746   * Subject to the terms at https://gsap.com/standard-license or for
13747   * Club GSAP members, the agreement issued with that membership.
13748   * @author: Jack Doyle, [email protected]
13749  */
13750  var gsap$a,
13751      _coreInitted$7,
13752      _window,
13753      _docEl$1,
13754      _body$4,
13755      _toArray$3,
13756      _config$1,
13757      ScrollTrigger$1,
13758      _windowExists$6 = function _windowExists() {
13759    return typeof window !== "undefined";
13760  },
13761      _getGSAP$8 = function _getGSAP() {
13762    return gsap$a || _windowExists$6() && (gsap$a = window.gsap) && gsap$a.registerPlugin && gsap$a;
13763  },
13764      _isString$3 = function _isString(value) {
13765    return typeof value === "string";
13766  },
13767      _isFunction$3 = function _isFunction(value) {
13768    return typeof value === "function";
13769  },
13770      _max = function _max(element, axis) {
13771    var dim = axis === "x" ? "Width" : "Height",
13772        scroll = "scroll" + dim,
13773        client = "client" + dim;
13774    return element === _window || element === _docEl$1 || element === _body$4 ? Math.max(_docEl$1[scroll], _body$4[scroll]) - (_window["inner" + dim] || _docEl$1[client] || _body$4[client]) : element[scroll] - element["offset" + dim];
13775  },
13776      _buildGetter = function _buildGetter(e, axis) {
13777    var p = "scroll" + (axis === "x" ? "Left" : "Top");
13778
13779    if (e === _window) {
13780      if (e.pageXOffset != null) {
13781        p = "page" + axis.toUpperCase() + "Offset";
13782      } else {
13783        e = _docEl$1[p] != null ? _docEl$1 : _body$4;
13784      }
13785    }
13786
13787    return function () {
13788      return e[p];
13789    };
13790  },
13791      _clean = function _clean(value, index, target, targets) {
13792    _isFunction$3(value) && (value = value(index, target, targets));
13793
13794    if (typeof value !== "object") {
13795      return _isString$3(value) && value !== "max" && value.charAt(1) !== "=" ? {
13796        x: value,
13797        y: value
13798      } : {
13799        y: value
13800      };
13801    } else if (value.nodeType) {
13802      return {
13803        y: value,
13804        x: value
13805      };
13806    } else {
13807      var result = {},
13808          p;
13809
13810      for (p in value) {
13811        result[p] = p !== "onAutoKill" && _isFunction$3(value[p]) ? value[p](index, target, targets) : value[p];
13812      }
13813
13814      return result;
13815    }
13816  },
13817      _getOffset = function _getOffset(element, container) {
13818    element = _toArray$3(element)[0];
13819
13820    if (!element || !element.getBoundingClientRect) {
13821      return console.warn("scrollTo target doesn't exist. Using 0") || {
13822        x: 0,
13823        y: 0
13824      };
13825    }
13826
13827    var rect = element.getBoundingClientRect(),
13828        isRoot = !container || container === _window || container === _body$4,
13829        cRect = isRoot ? {
13830      top: _docEl$1.clientTop - (_window.pageYOffset || _docEl$1.scrollTop || _body$4.scrollTop || 0),
13831      left: _docEl$1.clientLeft - (_window.pageXOffset || _docEl$1.scrollLeft || _body$4.scrollLeft || 0)
13832    } : container.getBoundingClientRect(),
13833        offsets = {
13834      x: rect.left - cRect.left,
13835      y: rect.top - cRect.top
13836    };
13837
13838    if (!isRoot && container) {
13839      offsets.x += _buildGetter(container, "x")();
13840      offsets.y += _buildGetter(container, "y")();
13841    }
13842
13843    return offsets;
13844  },
13845      _parseVal = function _parseVal(value, target, axis, currentVal, offset) {
13846    return !isNaN(value) && typeof value !== "object" ? parseFloat(value) - offset : _isString$3(value) && value.charAt(1) === "=" ? parseFloat(value.substr(2)) * (value.charAt(0) === "-" ? -1 : 1) + currentVal - offset : value === "max" ? _max(target, axis) - offset : Math.min(_max(target, axis), _getOffset(value, target)[axis] - offset);
13847  },
13848      _initCore$8 = function _initCore() {
13849    gsap$a = _getGSAP$8();
13850
13851    if (_windowExists$6() && gsap$a && typeof document !== "undefined" && document.body) {
13852      _window = window;
13853      _body$4 = document.body;
13854      _docEl$1 = document.documentElement;
13855      _toArray$3 = gsap$a.utils.toArray;
13856      gsap$a.config({
13857        autoKillThreshold: 7
13858      });
13859      _config$1 = gsap$a.config();
13860      _coreInitted$7 = 1;
13861    }
13862  };
13863
13864  var ScrollToPlugin = {
13865    version: "3.12.5",
13866    name: "scrollTo",
13867    rawVars: 1,
13868    register: function register(core) {
13869      gsap$a = core;
13870
13871      _initCore$8();
13872    },
13873    init: function init(target, value, tween, index, targets) {
13874      _coreInitted$7 || _initCore$8();
13875      var data = this,
13876          snapType = gsap$a.getProperty(target, "scrollSnapType");
13877      data.isWin = target === _window;
13878      data.target = target;
13879      data.tween = tween;
13880      value = _clean(value, index, target, targets);
13881      data.vars = value;
13882      data.autoKill = !!value.autoKill;
13883      data.getX = _buildGetter(target, "x");
13884      data.getY = _buildGetter(target, "y");
13885      data.x = data.xPrev = data.getX();
13886      data.y = data.yPrev = data.getY();
13887      ScrollTrigger$1 || (ScrollTrigger$1 = gsap$a.core.globals().ScrollTrigger);
13888      gsap$a.getProperty(target, "scrollBehavior") === "smooth" && gsap$a.set(target, {
13889        scrollBehavior: "auto"
13890      });
13891
13892      if (snapType && snapType !== "none") {
13893        data.snap = 1;
13894        data.snapInline = target.style.scrollSnapType;
13895        target.style.scrollSnapType = "none";
13896      }
13897
13898      if (value.x != null) {
13899        data.add(data, "x", data.x, _parseVal(value.x, target, "x", data.x, value.offsetX || 0), index, targets);
13900
13901        data._props.push("scrollTo_x");
13902      } else {
13903        data.skipX = 1;
13904      }
13905
13906      if (value.y != null) {
13907        data.add(data, "y", data.y, _parseVal(value.y, target, "y", data.y, value.offsetY || 0), index, targets);
13908
13909        data._props.push("scrollTo_y");
13910      } else {
13911        data.skipY = 1;
13912      }
13913    },
13914    render: function render(ratio, data) {
13915      var pt = data._pt,
13916          target = data.target,
13917          tween = data.tween,
13918          autoKill = data.autoKill,
13919          xPrev = data.xPrev,
13920          yPrev = data.yPrev,
13921          isWin = data.isWin,
13922          snap = data.snap,
13923          snapInline = data.snapInline,
13924          x,
13925          y,
13926          yDif,
13927          xDif,
13928          threshold;
13929
13930      while (pt) {
13931        pt.r(ratio, pt.d);
13932        pt = pt._next;
13933      }
13934
13935      x = isWin || !data.skipX ? data.getX() : xPrev;
13936      y = isWin || !data.skipY ? data.getY() : yPrev;
13937      yDif = y - yPrev;
13938      xDif = x - xPrev;
13939      threshold = _config$1.autoKillThreshold;
13940
13941      if (data.x < 0) {
13942        data.x = 0;
13943      }
13944
13945      if (data.y < 0) {
13946        data.y = 0;
13947      }
13948
13949      if (autoKill) {
13950        if (!data.skipX && (xDif > threshold || xDif < -threshold) && x < _max(target, "x")) {
13951          data.skipX = 1;
13952        }
13953
13954        if (!data.skipY && (yDif > threshold || yDif < -threshold) && y < _max(target, "y")) {
13955          data.skipY = 1;
13956        }
13957
13958        if (data.skipX && data.skipY) {
13959          tween.kill();
13960          data.vars.onAutoKill && data.vars.onAutoKill.apply(tween, data.vars.onAutoKillParams || []);
13961        }
13962      }
13963
13964      if (isWin) {
13965        _window.scrollTo(!data.skipX ? data.x : x, !data.skipY ? data.y : y);
13966      } else {
13967        data.skipY || (target.scrollTop = data.y);
13968        data.skipX || (target.scrollLeft = data.x);
13969      }
13970
13971      if (snap && (ratio === 1 || ratio === 0)) {
13972        y = target.scrollTop;
13973        x = target.scrollLeft;
13974        snapInline ? target.style.scrollSnapType = snapInline : target.style.removeProperty("scroll-snap-type");
13975        target.scrollTop = y + 1;
13976        target.scrollLeft = x + 1;
13977        target.scrollTop = y;
13978        target.scrollLeft = x;
13979      }
13980
13981      data.xPrev = data.x;
13982      data.yPrev = data.y;
13983      ScrollTrigger$1 && ScrollTrigger$1.update();
13984    },
13985    kill: function kill(property) {
13986      var both = property === "scrollTo",
13987          i = this._props.indexOf(property);
13988
13989      if (both || property === "scrollTo_x") {
13990        this.skipX = 1;
13991      }
13992
13993      if (both || property === "scrollTo_y") {
13994        this.skipY = 1;
13995      }
13996
13997      i > -1 && this._props.splice(i, 1);
13998      return !this._props.length;
13999    }
14000  };
14001  ScrollToPlugin.max = _max;
14002  ScrollToPlugin.getOffset = _getOffset;
14003  ScrollToPlugin.buildGetter = _buildGetter;
14004  _getGSAP$8() && gsap$a.registerPlugin(ScrollToPlugin);
14005
14006  /*!
14007   * ScrollTrigger 3.12.5
14008   * https://gsap.com
14009   *
14010   * @license Copyright 2008-2024, GreenSock. All rights reserved.
14011   * Subject to the terms at https://gsap.com/standard-license or for
14012   * Club GSAP members, the agreement issued with that membership.
14013   * @author: Jack Doyle, [email protected]
14014  */
14015
14016  var gsap$b,
14017      _coreInitted$8,
14018      _win$6,
14019      _doc$6,
14020      _docEl$2,
14021      _body$5,
14022      _root$1,
14023      _resizeDelay,
14024      _toArray$4,
14025      _clamp$2,
14026      _time2,
14027      _syncInterval,
14028      _refreshing,
14029      _pointerIsDown,
14030      _transformProp$3,
14031      _i,
14032      _prevWidth,
14033      _prevHeight,
14034      _autoRefresh,
14035      _sort,
14036      _suppressOverwrites$1,
14037      _ignoreResize,
14038      _normalizer$1,
14039      _ignoreMobileResize,
14040      _baseScreenHeight,
14041      _baseScreenWidth,
14042      _fixIOSBug,
14043      _context$3,
14044      _scrollRestoration,
14045      _div100vh,
14046      _100vh,
14047      _isReverted,
14048      _clampingMax,
14049      _limitCallbacks,
14050      _startup$1 = 1,
14051      _getTime$2 = Date.now,
14052      _time1 = _getTime$2(),
14053      _lastScrollTime = 0,
14054      _enabled = 0,
14055      _parseClamp = function _parseClamp(value, type, self) {
14056    var clamp = _isString$4(value) && (value.substr(0, 6) === "clamp(" || value.indexOf("max") > -1);
14057    self["_" + type + "Clamp"] = clamp;
14058    return clamp ? value.substr(6, value.length - 7) : value;
14059  },
14060      _keepClamp = function _keepClamp(value, clamp) {
14061    return clamp && (!_isString$4(value) || value.substr(0, 6) !== "clamp(") ? "clamp(" + value + ")" : value;
14062  },
14063      _rafBugFix = function _rafBugFix() {
14064    return _enabled && requestAnimationFrame(_rafBugFix);
14065  },
14066      _pointerDownHandler = function _pointerDownHandler() {
14067    return _pointerIsDown = 1;
14068  },
14069      _pointerUpHandler = function _pointerUpHandler() {
14070    return _pointerIsDown = 0;
14071  },
14072      _passThrough$1 = function _passThrough(v) {
14073    return v;
14074  },
14075      _round$5 = function _round(value) {
14076    return Math.round(value * 100000) / 100000 || 0;
14077  },
14078      _windowExists$7 = function _windowExists() {
14079    return typeof window !== "undefined";
14080  },
14081      _getGSAP$9 = function _getGSAP() {
14082    return gsap$b || _windowExists$7() && (gsap$b = window.gsap) && gsap$b.registerPlugin && gsap$b;
14083  },
14084      _isViewport$1 = function _isViewport(e) {
14085    return !!~_root$1.indexOf(e);
14086  },
14087      _getViewportDimension = function _getViewportDimension(dimensionProperty) {
14088    return (dimensionProperty === "Height" ? _100vh : _win$6["inner" + dimensionProperty]) || _docEl$2["client" + dimensionProperty] || _body$5["client" + dimensionProperty];
14089  },
14090      _getBoundsFunc = function _getBoundsFunc(element) {
14091    return _getProxyProp(element, "getBoundingClientRect") || (_isViewport$1(element) ? function () {
14092      _winOffsets.width = _win$6.innerWidth;
14093      _winOffsets.height = _100vh;
14094      return _winOffsets;
14095    } : function () {
14096      return _getBounds$1(element);
14097    });
14098  },
14099      _getSizeFunc = function _getSizeFunc(scroller, isViewport, _ref) {
14100    var d = _ref.d,
14101        d2 = _ref.d2,
14102        a = _ref.a;
14103    return (a = _getProxyProp(scroller, "getBoundingClientRect")) ? function () {
14104      return a()[d];
14105    } : function () {
14106      return (isViewport ? _getViewportDimension(d2) : scroller["client" + d2]) || 0;
14107    };
14108  },
14109      _getOffsetsFunc = function _getOffsetsFunc(element, isViewport) {
14110    return !isViewport || ~exports._proxies.indexOf(element) ? _getBoundsFunc(element) : function () {
14111      return _winOffsets;
14112    };
14113  },
14114      _maxScroll = function _maxScroll(element, _ref2) {
14115    var s = _ref2.s,
14116        d2 = _ref2.d2,
14117        d = _ref2.d,
14118        a = _ref2.a;
14119    return Math.max(0, (s = "scroll" + d2) && (a = _getProxyProp(element, s)) ? a() - _getBoundsFunc(element)()[d] : _isViewport$1(element) ? (_docEl$2[s] || _body$5[s]) - _getViewportDimension(d2) : element[s] - element["offset" + d2]);
14120  },
14121      _iterateAutoRefresh = function _iterateAutoRefresh(func, events) {
14122    for (var i = 0; i < _autoRefresh.length; i += 3) {
vendor: 7,264 bytes, lines 14123-14342
14123      (!events || ~events.indexOf(_autoRefresh[i + 1])) && func(_autoRefresh[i], _autoRefresh[i + 1], _autoRefresh[i + 2]);
14124    }
14125  },
14126      _isString$4 = function _isString(value) {
14127    return typeof value === "string";
14128  },
14129      _isFunction$4 = function _isFunction(value) {
14130    return typeof value === "function";
14131  },
14132      _isNumber$2 = function _isNumber(value) {
14133    return typeof value === "number";
14134  },
14135      _isObject$2 = function _isObject(value) {
14136    return typeof value === "object";
14137  },
14138      _endAnimation = function _endAnimation(animation, reversed, pause) {
14139    return animation && animation.progress(reversed ? 0 : 1) && pause && animation.pause();
14140  },
14141      _callback$1 = function _callback(self, func) {
14142    if (self.enabled) {
14143      var result = self._ctx ? self._ctx.add(function () {
14144        return func(self);
14145      }) : func(self);
14146      result && result.totalTime && (self.callbackAnimation = result);
14147    }
14148  },
14149      _abs$1 = Math.abs,
14150      _left = "left",
14151      _top = "top",
14152      _right = "right",
14153      _bottom = "bottom",
14154      _width = "width",
14155      _height = "height",
14156      _Right = "Right",
14157      _Left = "Left",
14158      _Top = "Top",
14159      _Bottom = "Bottom",
14160      _padding = "padding",
14161      _margin = "margin",
14162      _Width = "Width",
14163      _Height = "Height",
14164      _px = "px",
14165      _getComputedStyle$1 = function _getComputedStyle(element) {
14166    return _win$6.getComputedStyle(element);
14167  },
14168      _makePositionable = function _makePositionable(element) {
14169    var position = _getComputedStyle$1(element).position;
14170
14171    element.style.position = position === "absolute" || position === "fixed" ? position : "relative";
14172  },
14173      _setDefaults$2 = function _setDefaults(obj, defaults) {
14174    for (var p in defaults) {
14175      p in obj || (obj[p] = defaults[p]);
14176    }
14177
14178    return obj;
14179  },
14180      _getBounds$1 = function _getBounds(element, withoutTransforms) {
14181    var tween = withoutTransforms && _getComputedStyle$1(element)[_transformProp$3] !== "matrix(1, 0, 0, 1, 0, 0)" && gsap$b.to(element, {
14182      x: 0,
14183      y: 0,
14184      xPercent: 0,
14185      yPercent: 0,
14186      rotation: 0,
14187      rotationX: 0,
14188      rotationY: 0,
14189      scale: 1,
14190      skewX: 0,
14191      skewY: 0
14192    }).progress(1),
14193        bounds = element.getBoundingClientRect();
14194    tween && tween.progress(0).kill();
14195    return bounds;
14196  },
14197      _getSize = function _getSize(element, _ref3) {
14198    var d2 = _ref3.d2;
14199    return element["offset" + d2] || element["client" + d2] || 0;
14200  },
14201      _getLabelRatioArray = function _getLabelRatioArray(timeline) {
14202    var a = [],
14203        labels = timeline.labels,
14204        duration = timeline.duration(),
14205        p;
14206
14207    for (p in labels) {
14208      a.push(labels[p] / duration);
14209    }
14210
14211    return a;
14212  },
14213      _getClosestLabel = function _getClosestLabel(animation) {
14214    return function (value) {
14215      return gsap$b.utils.snap(_getLabelRatioArray(animation), value);
14216    };
14217  },
14218      _snapDirectional = function _snapDirectional(snapIncrementOrArray) {
14219    var snap = gsap$b.utils.snap(snapIncrementOrArray),
14220        a = Array.isArray(snapIncrementOrArray) && snapIncrementOrArray.slice(0).sort(function (a, b) {
14221      return a - b;
14222    });
14223    return a ? function (value, direction, threshold) {
14224      if (threshold === void 0) {
14225        threshold = 1e-3;
14226      }
14227
14228      var i;
14229
14230      if (!direction) {
14231        return snap(value);
14232      }
14233
14234      if (direction > 0) {
14235        value -= threshold;
14236
14237        for (i = 0; i < a.length; i++) {
14238          if (a[i] >= value) {
14239            return a[i];
14240          }
14241        }
14242
14243        return a[i - 1];
14244      } else {
14245        i = a.length;
14246        value += threshold;
14247
14248        while (i--) {
14249          if (a[i] <= value) {
14250            return a[i];
14251          }
14252        }
14253      }
14254
14255      return a[0];
14256    } : function (value, direction, threshold) {
14257      if (threshold === void 0) {
14258        threshold = 1e-3;
14259      }
14260
14261      var snapped = snap(value);
14262      return !direction || Math.abs(snapped - value) < threshold || snapped - value < 0 === direction < 0 ? snapped : snap(direction < 0 ? value - snapIncrementOrArray : value + snapIncrementOrArray);
14263    };
14264  },
14265      _getLabelAtDirection = function _getLabelAtDirection(timeline) {
14266    return function (value, st) {
14267      return _snapDirectional(_getLabelRatioArray(timeline))(value, st.direction);
14268    };
14269  },
14270      _multiListener = function _multiListener(func, element, types, callback) {
14271    return types.split(",").forEach(function (type) {
14272      return func(element, type, callback);
14273    });
14274  },
14275      _addListener$2 = function _addListener(element, type, func, nonPassive, capture) {
14276    return element.addEventListener(type, func, {
14277      passive: !nonPassive,
14278      capture: !!capture
14279    });
14280  },
14281      _removeListener$2 = function _removeListener(element, type, func, capture) {
14282    return element.removeEventListener(type, func, !!capture);
14283  },
14284      _wheelListener = function _wheelListener(func, el, scrollFunc) {
14285    scrollFunc = scrollFunc && scrollFunc.wheelHandler;
14286
14287    if (scrollFunc) {
14288      func(el, "wheel", scrollFunc);
14289      func(el, "touchmove", scrollFunc);
14290    }
14291  },
14292      _markerDefaults = {
14293    startColor: "green",
14294    endColor: "red",
14295    indent: 0,
14296    fontSize: "16px",
14297    fontWeight: "normal"
14298  },
14299      _defaults$1 = {
14300    toggleActions: "play",
14301    anticipatePin: 0
14302  },
14303      _keywords = {
14304    top: 0,
14305    left: 0,
14306    center: 0.5,
14307    bottom: 1,
14308    right: 1
14309  },
14310      _offsetToPx = function _offsetToPx(value, size) {
14311    if (_isString$4(value)) {
14312      var eqIndex = value.indexOf("="),
14313          relative = ~eqIndex ? +(value.charAt(eqIndex - 1) + 1) * parseFloat(value.substr(eqIndex + 1)) : 0;
14314
14315      if (~eqIndex) {
14316        value.indexOf("%") > eqIndex && (relative *= size / 100);
14317        value = value.substr(0, eqIndex - 1);
14318      }
14319
14320      value = relative + (value in _keywords ? _keywords[value] * size : ~value.indexOf("%") ? parseFloat(value) * size / 100 : parseFloat(value) || 0);
14321    }
14322
14323    return value;
14324  },
14325      _createMarker = function _createMarker(type, name, container, direction, _ref4, offset, matchWidthEl, containerAnimation) {
14326    var startColor = _ref4.startColor,
14327        endColor = _ref4.endColor,
14328        fontSize = _ref4.fontSize,
14329        indent = _ref4.indent,
14330        fontWeight = _ref4.fontWeight;
14331
14332    var e = _doc$6.createElement("div"),
14333        useFixedPosition = _isViewport$1(container) || _getProxyProp(container, "pinType") === "fixed",
14334        isScroller = type.indexOf("scroller") !== -1,
14335        parent = useFixedPosition ? _body$5 : container,
14336        isStart = type.indexOf("start") !== -1,
14337        color = isStart ? startColor : endColor,
14338        css = "border-color:" + color + ";font-size:" + fontSize + ";color:" + color + ";font-weight:" + fontWeight + ";pointer-events:none;white-space:nowrap;font-family:sans-serif,Arial;z-index:1000;padding:4px 8px;border-width:0;border-style:solid;";
14339
14340    css += "position:" + ((isScroller || containerAnimation) && useFixedPosition ? "fixed;" : "absolute;");
14341    (isScroller || containerAnimation || !useFixedPosition) && (css += (direction === _vertical ? _right : _bottom) + ":" + (offset + parseFloat(indent)) + "px;");
14342    matchWidthEl && (css += "box-sizing:border-box;text-align:left;
vendor: 11,014 bytes, lines 14342-14689
14342width:" + matchWidthEl.offsetWidth + "px;");
14343    e._isStart = isStart;
14344    e.setAttribute("class", "gsap-marker-" + type + (name ? " marker-" + name : ""));
14345    e.style.cssText = css;
14346    e.innerText = name || name === 0 ? type + "-" + name : type;
14347    parent.children[0] ? parent.insertBefore(e, parent.children[0]) : parent.appendChild(e);
14348    e._offset = e["offset" + direction.op.d2];
14349
14350    _positionMarker(e, 0, direction, isStart);
14351
14352    return e;
14353  },
14354      _positionMarker = function _positionMarker(marker, start, direction, flipped) {
14355    var vars = {
14356      display: "block"
14357    },
14358        side = direction[flipped ? "os2" : "p2"],
14359        oppositeSide = direction[flipped ? "p2" : "os2"];
14360    marker._isFlipped = flipped;
14361    vars[direction.a + "Percent"] = flipped ? -100 : 0;
14362    vars[direction.a] = flipped ? "1px" : 0;
14363    vars["border" + side + _Width] = 1;
14364    vars["border" + oppositeSide + _Width] = 0;
14365    vars[direction.p] = start + "px";
14366    gsap$b.set(marker, vars);
14367  },
14368      _triggers = [],
14369      _ids = {},
14370      _rafID,
14371      _sync = function _sync() {
14372    return _getTime$2() - _lastScrollTime > 34 && (_rafID || (_rafID = requestAnimationFrame(_updateAll)));
14373  },
14374      _onScroll$1 = function _onScroll() {
14375    if (!_normalizer$1 || !_normalizer$1.isPressed || _normalizer$1.startX > _body$5.clientWidth) {
14376      exports._scrollers.cache++;
14377
14378      if (_normalizer$1) {
14379        _rafID || (_rafID = requestAnimationFrame(_updateAll));
14380      } else {
14381        _updateAll();
14382      }
14383
14384      _lastScrollTime || _dispatch$1("scrollStart");
14385      _lastScrollTime = _getTime$2();
14386    }
14387  },
14388      _setBaseDimensions = function _setBaseDimensions() {
14389    _baseScreenWidth = _win$6.innerWidth;
14390    _baseScreenHeight = _win$6.innerHeight;
14391  },
14392      _onResize = function _onResize() {
14393    exports._scrollers.cache++;
14394    !_refreshing && !_ignoreResize && !_doc$6.fullscreenElement && !_doc$6.webkitFullscreenElement && (!_ignoreMobileResize || _baseScreenWidth !== _win$6.innerWidth || Math.abs(_win$6.innerHeight - _baseScreenHeight) > _win$6.innerHeight * 0.25) && _resizeDelay.restart(true);
14395  },
14396      _listeners$1 = {},
14397      _emptyArray$1 = [],
14398      _softRefresh = function _softRefresh() {
14399    return _removeListener$2(ScrollTrigger$2, "scrollEnd", _softRefresh) || _refreshAll(true);
14400  },
14401      _dispatch$1 = function _dispatch(type) {
14402    return _listeners$1[type] && _listeners$1[type].map(function (f) {
14403      return f();
14404    }) || _emptyArray$1;
14405  },
14406      _savedStyles = [],
14407      _revertRecorded = function _revertRecorded(media) {
14408    for (var i = 0; i < _savedStyles.length; i += 5) {
14409      if (!media || _savedStyles[i + 4] && _savedStyles[i + 4].query === media) {
14410        _savedStyles[i].style.cssText = _savedStyles[i + 1];
14411        _savedStyles[i].getBBox && _savedStyles[i].setAttribute("transform", _savedStyles[i + 2] || "");
14412        _savedStyles[i + 3].uncache = 1;
14413      }
14414    }
14415  },
14416      _revertAll = function _revertAll(kill, media) {
14417    var trigger;
14418
14419    for (_i = 0; _i < _triggers.length; _i++) {
14420      trigger = _triggers[_i];
14421
14422      if (trigger && (!media || trigger._ctx === media)) {
14423        if (kill) {
14424          trigger.kill(1);
14425        } else {
14426          trigger.revert(true, true);
14427        }
14428      }
14429    }
14430
14431    _isReverted = true;
14432    media && _revertRecorded(media);
14433    media || _dispatch$1("revert");
14434  },
14435      _clearScrollMemory = function _clearScrollMemory(scrollRestoration, force) {
14436    exports._scrollers.cache++;
14437    (force || !_refreshingAll) && exports._scrollers.forEach(function (obj) {
14438      return _isFunction$4(obj) && obj.cacheID++ && (obj.rec = 0);
14439    });
14440    _isString$4(scrollRestoration) && (_win$6.history.scrollRestoration = _scrollRestoration = scrollRestoration);
14441  },
14442      _refreshingAll,
14443      _refreshID = 0,
14444      _queueRefreshID,
14445      _queueRefreshAll = function _queueRefreshAll() {
14446    if (_queueRefreshID !== _refreshID) {
14447      var id = _queueRefreshID = _refreshID;
14448      requestAnimationFrame(function () {
14449        return id === _refreshID && _refreshAll(true);
14450      });
14451    }
14452  },
14453      _refresh100vh = function _refresh100vh() {
14454    _body$5.appendChild(_div100vh);
14455
14456    _100vh = !_normalizer$1 && _div100vh.offsetHeight || _win$6.innerHeight;
14457
14458    _body$5.removeChild(_div100vh);
14459  },
14460      _hideAllMarkers = function _hideAllMarkers(hide) {
14461    return _toArray$4(".gsap-marker-start, .gsap-marker-end, .gsap-marker-scroller-start, .gsap-marker-scroller-end").forEach(function (el) {
14462      return el.style.display = hide ? "none" : "block";
14463    });
14464  },
14465      _refreshAll = function _refreshAll(force, skipRevert) {
14466    if (_lastScrollTime && !force && !_isReverted) {
14467      _addListener$2(ScrollTrigger$2, "scrollEnd", _softRefresh);
14468
14469      return;
14470    }
14471
14472    _refresh100vh();
14473
14474    _refreshingAll = ScrollTrigger$2.isRefreshing = true;
14475
14476    exports._scrollers.forEach(function (obj) {
14477      return _isFunction$4(obj) && ++obj.cacheID && (obj.rec = obj());
14478    });
14479
14480    var refreshInits = _dispatch$1("refreshInit");
14481
14482    _sort && ScrollTrigger$2.sort();
14483    skipRevert || _revertAll();
14484
14485    exports._scrollers.forEach(function (obj) {
14486      if (_isFunction$4(obj)) {
14487        obj.smooth && (obj.target.style.scrollBehavior = "auto");
14488        obj(0);
14489      }
14490    });
14491
14492    _triggers.slice(0).forEach(function (t) {
14493      return t.refresh();
14494    });
14495
14496    _isReverted = false;
14497
14498    _triggers.forEach(function (t) {
14499      if (t._subPinOffset && t.pin) {
14500        var prop = t.vars.horizontal ? "offsetWidth" : "offsetHeight",
14501            original = t.pin[prop];
14502        t.revert(true, 1);
14503        t.adjustPinSpacing(t.pin[prop] - original);
14504        t.refresh();
14505      }
14506    });
14507
14508    _clampingMax = 1;
14509
14510    _hideAllMarkers(true);
14511
14512    _triggers.forEach(function (t) {
14513      var max = _maxScroll(t.scroller, t._dir),
14514          endClamp = t.vars.end === "max" || t._endClamp && t.end > max,
14515          startClamp = t._startClamp && t.start >= max;
14516
14517      (endClamp || startClamp) && t.setPositions(startClamp ? max - 1 : t.start, endClamp ? Math.max(startClamp ? max : t.start + 1, max) : t.end, true);
14518    });
14519
14520    _hideAllMarkers(false);
14521
14522    _clampingMax = 0;
14523    refreshInits.forEach(function (result) {
14524      return result && result.render && result.render(-1);
14525    });
14526
14527    exports._scrollers.forEach(function (obj) {
14528      if (_isFunction$4(obj)) {
14529        obj.smooth && requestAnimationFrame(function () {
14530          return obj.target.style.scrollBehavior = "smooth";
14531        });
14532        obj.rec && obj(obj.rec);
14533      }
14534    });
14535
14536    _clearScrollMemory(_scrollRestoration, 1);
14537
14538    _resizeDelay.pause();
14539
14540    _refreshID++;
14541    _refreshingAll = 2;
14542
14543    _updateAll(2);
14544
14545    _triggers.forEach(function (t) {
14546      return _isFunction$4(t.vars.onRefresh) && t.vars.onRefresh(t);
14547    });
14548
14549    _refreshingAll = ScrollTrigger$2.isRefreshing = false;
14550
14551    _dispatch$1("refresh");
14552  },
14553      _lastScroll = 0,
14554      _direction = 1,
14555      _primary,
14556      _updateAll = function _updateAll(force) {
14557    if (force === 2 || !_refreshingAll && !_isReverted) {
14558      ScrollTrigger$2.isUpdating = true;
14559      _primary && _primary.update(0);
14560
14561      var l = _triggers.length,
14562          time = _getTime$2(),
14563          recordVelocity = time - _time1 >= 50,
14564          scroll = l && _triggers[0].scroll();
14565
14566      _direction = _lastScroll > scroll ? -1 : 1;
14567      _refreshingAll || (_lastScroll = scroll);
14568
14569      if (recordVelocity) {
14570        if (_lastScrollTime && !_pointerIsDown && time - _lastScrollTime > 200) {
14571          _lastScrollTime = 0;
14572
14573          _dispatch$1("scrollEnd");
14574        }
14575
14576        _time2 = _time1;
14577        _time1 = time;
14578      }
14579
14580      if (_direction < 0) {
14581        _i = l;
14582
14583        while (_i-- > 0) {
14584          _triggers[_i] && _triggers[_i].update(0, recordVelocity);
14585        }
14586
14587        _direction = 1;
14588      } else {
14589        for (_i = 0; _i < l; _i++) {
14590          _triggers[_i] && _triggers[_i].update(0, recordVelocity);
14591        }
14592      }
14593
14594      ScrollTrigger$2.isUpdating = false;
14595    }
14596
14597    _rafID = 0;
14598  },
14599      _propNamesToCopy = [_left, _top, _bottom, _right, _margin + _Bottom, _margin + _Right, _margin + _Top, _margin + _Left, "display", "flexShrink", "float", "zIndex", "gridColumnStart", "gridColumnEnd", "gridRowStart", "gridRowEnd", "gridArea", "justifySelf", "alignSelf", "placeSelf", "order"],
14600      _stateProps = _propNamesToCopy.concat([_width, _height, "boxSizing", "max" + _Width, "max" + _Height, "position", _margin, _padding, _padding + _Top, _padding + _Right, _padding + _Bottom, _padding + _Left]),
14601      _swapPinOut = function _swapPinOut(pin, spacer, state) {
14602    _setState(state);
14603
14604    var cache = pin._gsap;
14605
14606    if (cache.spacerIsNative) {
14607      _setState(cache.spacerState);
14608    } else if (pin._gsap.swappedIn) {
14609      var parent = spacer.parentNode;
14610
14611      if (parent) {
14612        parent.insertBefore(pin, spacer);
14613        parent.removeChild(spacer);
14614      }
14615    }
14616
14617    pin._gsap.swappedIn = false;
14618  },
14619      _swapPinIn = function _swapPinIn(pin, spacer, cs, spacerState) {
14620    if (!pin._gsap.swappedIn) {
14621      var i = _propNamesToCopy.length,
14622          spacerStyle = spacer.style,
14623          pinStyle = pin.style,
14624          p;
14625
14626      while (i--) {
14627        p = _propNamesToCopy[i];
14628        spacerStyle[p] = cs[p];
14629      }
14630
14631      spacerStyle.position = cs.position === "absolute" ? "absolute" : "relative";
14632      cs.display === "inline" && (spacerStyle.display = "inline-block");
14633      pinStyle[_bottom] = pinStyle[_right] = "auto";
14634      spacerStyle.flexBasis = cs.flexBasis || "auto";
14635      spacerStyle.overflow = "visible";
14636      spacerStyle.boxSizing = "border-box";
14637      spacerStyle[_width] = _getSize(pin, _horizontal) + _px;
14638      spacerStyle[_height] = _getSize(pin, _vertical) + _px;
14639      spacerStyle[_padding] = pinStyle[_margin] = pinStyle[_top] = pinStyle[_left] = "0";
14640
14641      _setState(spacerState);
14642
14643      pinStyle[_width] = pinStyle["max" + _Width] = cs[_width];
14644      pinStyle[_height] = pinStyle["max" + _Height] = cs[_height];
14645      pinStyle[_padding] = cs[_padding];
14646
14647      if (pin.parentNode !== spacer) {
14648        pin.parentNode.insertBefore(spacer, pin);
14649        spacer.appendChild(pin);
14650      }
14651
14652      pin._gsap.swappedIn = true;
14653    }
14654  },
14655      _capsExp$1 = /([A-Z])/g,
14656      _setState = function _setState(state) {
14657    if (state) {
14658      var style = state.t.style,
14659          l = state.length,
14660          i = 0,
14661          p,
14662          value;
14663      (state.t._gsap || gsap$b.core.getCache(state.t)).uncache = 1;
14664
14665      for (; i < l; i += 2) {
14666        value = state[i + 1];
14667        p = state[i];
14668
14669        if (value) {
14670          style[p] = value;
14671        } else if (style[p]) {
14672          style.removeProperty(p.replace(_capsExp$1, "-$1").toLowerCase());
14673        }
14674      }
14675    }
14676  },
14677      _getState = function _getState(element) {
14678    var l = _stateProps.length,
14679        style = element.style,
14680        state = [],
14681        i = 0;
14682
14683    for (; i < l; i++) {
14684      state.push(_stateProps[i], style[_stateProps[i]]);
14685    }
14686
14687    state.t = element;
14688    return state;
14689  },
vendor: 4,984 bytes, lines 14690-14826
14690      _copyState = function _copyState(state, override, omitOffsets) {
14691    var result = [],
14692        l = state.length,
14693        i = omitOffsets ? 8 : 0,
14694        p;
14695
14696    for (; i < l; i += 2) {
14697      p = state[i];
14698      result.push(p, p in override ? override[p] : state[i + 1]);
14699    }
14700
14701    result.t = state.t;
14702    return result;
14703  },
14704      _winOffsets = {
14705    left: 0,
14706    top: 0
14707  },
14708      _parsePosition$1 = function _parsePosition(value, trigger, scrollerSize, direction, scroll, marker, markerScroller, self, scrollerBounds, borderWidth, useFixedPosition, scrollerMax, containerAnimation, clampZeroProp) {
14709    _isFunction$4(value) && (value = value(self));
14710
14711    if (_isString$4(value) && value.substr(0, 3) === "max") {
14712      value = scrollerMax + (value.charAt(4) === "=" ? _offsetToPx("0" + value.substr(3), scrollerSize) : 0);
14713    }
14714
14715    var time = containerAnimation ? containerAnimation.time() : 0,
14716        p1,
14717        p2,
14718        element;
14719    containerAnimation && containerAnimation.seek(0);
14720    isNaN(value) || (value = +value);
14721
14722    if (!_isNumber$2(value)) {
14723      _isFunction$4(trigger) && (trigger = trigger(self));
14724      var offsets = (value || "0").split(" "),
14725          bounds,
14726          localOffset,
14727          globalOffset,
14728          display;
14729      element = _getTarget(trigger, self) || _body$5;
14730      bounds = _getBounds$1(element) || {};
14731
14732      if ((!bounds || !bounds.left && !bounds.top) && _getComputedStyle$1(element).display === "none") {
14733        display = element.style.display;
14734        element.style.display = "block";
14735        bounds = _getBounds$1(element);
14736        display ? element.style.display = display : element.style.removeProperty("display");
14737      }
14738
14739      localOffset = _offsetToPx(offsets[0], bounds[direction.d]);
14740      globalOffset = _offsetToPx(offsets[1] || "0", scrollerSize);
14741      value = bounds[direction.p] - scrollerBounds[direction.p] - borderWidth + localOffset + scroll - globalOffset;
14742      markerScroller && _positionMarker(markerScroller, globalOffset, direction, scrollerSize - globalOffset < 20 || markerScroller._isStart && globalOffset > 20);
14743      scrollerSize -= scrollerSize - globalOffset;
14744    } else {
14745      containerAnimation && (value = gsap$b.utils.mapRange(containerAnimation.scrollTrigger.start, containerAnimation.scrollTrigger.end, 0, scrollerMax, value));
14746      markerScroller && _positionMarker(markerScroller, scrollerSize, direction, true);
14747    }
14748
14749    if (clampZeroProp) {
14750      self[clampZeroProp] = value || -0.001;
14751      value < 0 && (value = 0);
14752    }
14753
14754    if (marker) {
14755      var position = value + scrollerSize,
14756          isStart = marker._isStart;
14757      p1 = "scroll" + direction.d2;
14758
14759      _positionMarker(marker, position, direction, isStart && position > 20 || !isStart && (useFixedPosition ? Math.max(_body$5[p1], _docEl$2[p1]) : marker.parentNode[p1]) <= position + 1);
14760
14761      if (useFixedPosition) {
14762        scrollerBounds = _getBounds$1(markerScroller);
14763        useFixedPosition && (marker.style[direction.op.p] = scrollerBounds[direction.op.p] - direction.op.m - marker._offset + _px);
14764      }
14765    }
14766
14767    if (containerAnimation && element) {
14768      p1 = _getBounds$1(element);
14769      containerAnimation.seek(scrollerMax);
14770      p2 = _getBounds$1(element);
14771      containerAnimation._caScrollDist = p1[direction.p] - p2[direction.p];
14772      value = value / containerAnimation._caScrollDist * scrollerMax;
14773    }
14774
14775    containerAnimation && containerAnimation.seek(time);
14776    return containerAnimation ? value : Math.round(value);
14777  },
14778      _prefixExp = /(webkit|moz|length|cssText|inset)/i,
14779      _reparent = function _reparent(element, parent, top, left) {
14780    if (element.parentNode !== parent) {
14781      var style = element.style,
14782          p,
14783          cs;
14784
14785      if (parent === _body$5) {
14786        element._stOrig = style.cssText;
14787        cs = _getComputedStyle$1(element);
14788
14789        for (p in cs) {
14790          if (!+p && !_prefixExp.test(p) && cs[p] && typeof style[p] === "string" && p !== "0") {
14791            style[p] = cs[p];
14792          }
14793        }
14794
14795        style.top = top;
14796        style.left = left;
14797      } else {
14798        style.cssText = element._stOrig;
14799      }
14800
14801      gsap$b.core.getCache(element).uncache = 1;
14802      parent.appendChild(element);
14803    }
14804  },
14805      _interruptionTracker = function _interruptionTracker(getValueFunc, initialValue, onInterrupt) {
14806    var last1 = initialValue,
14807        last2 = last1;
14808    return function (value) {
14809      var current = Math.round(getValueFunc());
14810
14811      if (current !== last1 && current !== last2 && Math.abs(current - last1) > 3 && Math.abs(current - last2) > 3) {
14812        value = current;
14813        onInterrupt && onInterrupt();
14814      }
14815
14816      last2 = last1;
14817      last1 = value;
14818      return value;
14819    };
14820  },
14821      _shiftMarker = function _shiftMarker(marker, direction, value) {
14822    var vars = {};
14823    vars[direction.p] = "+=" + value;
14824    gsap$b.set(marker, vars);
14825  },
14826      _getTweenCreator = function _getTweenCreator(scroller, direction) {
vendor: 4,623 bytes, lines 14827-14955
14827    var getScroll = _getScrollFunc(scroller, direction),
14828        prop = "_scroll" + direction.p2,
14829        getTween = function getTween(scrollTo, vars, initialValue, change1, change2) {
14830      var tween = getTween.tween,
14831          onComplete = vars.onComplete,
14832          modifiers = {};
14833      initialValue = initialValue || getScroll();
14834
14835      var checkForInterruption = _interruptionTracker(getScroll, initialValue, function () {
14836        tween.kill();
14837        getTween.tween = 0;
14838      });
14839
14840      change2 = change1 && change2 || 0;
14841      change1 = change1 || scrollTo - initialValue;
14842      tween && tween.kill();
14843      vars[prop] = scrollTo;
14844      vars.inherit = false;
14845      vars.modifiers = modifiers;
14846
14847      modifiers[prop] = function () {
14848        return checkForInterruption(initialValue + change1 * tween.ratio + change2 * tween.ratio * tween.ratio);
14849      };
14850
14851      vars.onUpdate = function () {
14852        exports._scrollers.cache++;
14853        getTween.tween && _updateAll();
14854      };
14855
14856      vars.onComplete = function () {
14857        getTween.tween = 0;
14858        onComplete && onComplete.call(tween);
14859      };
14860
14861      tween = getTween.tween = gsap$b.to(scroller, vars);
14862      return tween;
14863    };
14864
14865    scroller[prop] = getScroll;
14866
14867    getScroll.wheelHandler = function () {
14868      return getTween.tween && getTween.tween.kill() && (getTween.tween = 0);
14869    };
14870
14871    _addListener$2(scroller, "wheel", getScroll.wheelHandler);
14872
14873    ScrollTrigger$2.isTouch && _addListener$2(scroller, "touchmove", getScroll.wheelHandler);
14874    return getTween;
14875  };
14876
14877  var ScrollTrigger$2 = function () {
14878    function ScrollTrigger(vars, animation) {
14879      _coreInitted$8 || ScrollTrigger.register(gsap$b) || console.warn("Please gsap.registerPlugin(ScrollTrigger)");
14880
14881      _context$3(this);
14882
14883      this.init(vars, animation);
14884    }
14885
14886    var _proto = ScrollTrigger.prototype;
14887
14888    _proto.init = function init(vars, animation) {
14889      this.progress = this.start = 0;
14890      this.vars && this.kill(true, true);
14891
14892      if (!_enabled) {
14893        this.update = this.refresh = this.kill = _passThrough$1;
14894        return;
14895      }
14896
14897      vars = _setDefaults$2(_isString$4(vars) || _isNumber$2(vars) || vars.nodeType ? {
14898        trigger: vars
14899      } : vars, _defaults$1);
14900
14901      var _vars = vars,
14902          onUpdate = _vars.onUpdate,
14903          toggleClass = _vars.toggleClass,
14904          id = _vars.id,
14905          onToggle = _vars.onToggle,
14906          onRefresh = _vars.onRefresh,
14907          scrub = _vars.scrub,
14908          trigger = _vars.trigger,
14909          pin = _vars.pin,
14910          pinSpacing = _vars.pinSpacing,
14911          invalidateOnRefresh = _vars.invalidateOnRefresh,
14912          anticipatePin = _vars.anticipatePin,
14913          onScrubComplete = _vars.onScrubComplete,
14914          onSnapComplete = _vars.onSnapComplete,
14915          once = _vars.once,
14916          snap = _vars.snap,
14917          pinReparent = _vars.pinReparent,
14918          pinSpacer = _vars.pinSpacer,
14919          containerAnimation = _vars.containerAnimation,
14920          fastScrollEnd = _vars.fastScrollEnd,
14921          preventOverlaps = _vars.preventOverlaps,
14922          direction = vars.horizontal || vars.containerAnimation && vars.horizontal !== false ? _horizontal : _vertical,
14923          isToggle = !scrub && scrub !== 0,
14924          scroller = _getTarget(vars.scroller || _win$6),
14925          scrollerCache = gsap$b.core.getCache(scroller),
14926          isViewport = _isViewport$1(scroller),
14927          useFixedPosition = ("pinType" in vars ? vars.pinType : _getProxyProp(scroller, "pinType") || isViewport && "fixed") === "fixed",
14928          callbacks = [vars.onEnter, vars.onLeave, vars.onEnterBack, vars.onLeaveBack],
14929          toggleActions = isToggle && vars.toggleActions.split(" "),
14930          markers = "markers" in vars ? vars.markers : _defaults$1.markers,
14931          borderWidth = isViewport ? 0 : parseFloat(_getComputedStyle$1(scroller)["border" + direction.p2 + _Width]) || 0,
14932          self = this,
14933          onRefreshInit = vars.onRefreshInit && function () {
14934        return vars.onRefreshInit(self);
14935      },
14936          getScrollerSize = _getSizeFunc(scroller, isViewport, direction),
14937          getScrollerOffsets = _getOffsetsFunc(scroller, isViewport),
14938          lastSnap = 0,
14939          lastRefresh = 0,
14940          prevProgress = 0,
14941          scrollFunc = _getScrollFunc(scroller, direction),
14942          tweenTo,
14943          pinCache,
14944          snapFunc,
14945          scroll1,
14946          scroll2,
14947          start,
14948          end,
14949          markerStart,
14950          markerEnd,
14951          markerStartTrigger,
14952          markerEndTrigger,
14953          markerVars,
14954          executingOnRefresh,
14955          change,
vendor: 7,747 bytes, lines 14956-15144
14956          pinOriginalState,
14957          pinActiveState,
14958          pinState,
14959          spacer,
14960          offset,
14961          pinGetter,
14962          pinSetter,
14963          pinStart,
14964          pinChange,
14965          spacingStart,
14966          spacerState,
14967          markerStartSetter,
14968          pinMoves,
14969          markerEndSetter,
14970          cs,
14971          snap1,
14972          snap2,
14973          scrubTween,
14974          scrubSmooth,
14975          snapDurClamp,
14976          snapDelayedCall,
14977          prevScroll,
14978          prevAnimProgress,
14979          caMarkerSetter,
14980          customRevertReturn;
14981
14982      self._startClamp = self._endClamp = false;
14983      self._dir = direction;
14984      anticipatePin *= 45;
14985      self.scroller = scroller;
14986      self.scroll = containerAnimation ? containerAnimation.time.bind(containerAnimation) : scrollFunc;
14987      scroll1 = scrollFunc();
14988      self.vars = vars;
14989      animation = animation || vars.animation;
14990
14991      if ("refreshPriority" in vars) {
14992        _sort = 1;
14993        vars.refreshPriority === -9999 && (_primary = self);
14994      }
14995
14996      scrollerCache.tweenScroll = scrollerCache.tweenScroll || {
14997        top: _getTweenCreator(scroller, _vertical),
14998        left: _getTweenCreator(scroller, _horizontal)
14999      };
15000      self.tweenTo = tweenTo = scrollerCache.tweenScroll[direction.p];
15001
15002      self.scrubDuration = function (value) {
15003        scrubSmooth = _isNumber$2(value) && value;
15004
15005        if (!scrubSmooth) {
15006          scrubTween && scrubTween.progress(1).kill();
15007          scrubTween = 0;
15008        } else {
15009          scrubTween ? scrubTween.duration(value) : scrubTween = gsap$b.to(animation, {
15010            ease: "expo",
15011            totalProgress: "+=0",
15012            inherit: false,
15013            duration: scrubSmooth,
15014            paused: true,
15015            onComplete: function onComplete() {
15016              return onScrubComplete && onScrubComplete(self);
15017            }
15018          });
15019        }
15020      };
15021
15022      if (animation) {
15023        animation.vars.lazy = false;
15024        animation._initted && !self.isReverted || animation.vars.immediateRender !== false && vars.immediateRender !== false && animation.duration() && animation.render(0, true, true);
15025        self.animation = animation.pause();
15026        animation.scrollTrigger = self;
15027        self.scrubDuration(scrub);
15028        snap1 = 0;
15029        id || (id = animation.vars.id);
15030      }
15031
15032      if (snap) {
15033        if (!_isObject$2(snap) || snap.push) {
15034          snap = {
15035            snapTo: snap
15036          };
15037        }
15038
15039        "scrollBehavior" in _body$5.style && gsap$b.set(isViewport ? [_body$5, _docEl$2] : scroller, {
15040          scrollBehavior: "auto"
15041        });
15042
15043        exports._scrollers.forEach(function (o) {
15044          return _isFunction$4(o) && o.target === (isViewport ? _doc$6.scrollingElement || _docEl$2 : scroller) && (o.smooth = false);
15045        });
15046
15047        snapFunc = _isFunction$4(snap.snapTo) ? snap.snapTo : snap.snapTo === "labels" ? _getClosestLabel(animation) : snap.snapTo === "labelsDirectional" ? _getLabelAtDirection(animation) : snap.directional !== false ? function (value, st) {
15048          return _snapDirectional(snap.snapTo)(value, _getTime$2() - lastRefresh < 500 ? 0 : st.direction);
15049        } : gsap$b.utils.snap(snap.snapTo);
15050        snapDurClamp = snap.duration || {
15051          min: 0.1,
15052          max: 2
15053        };
15054        snapDurClamp = _isObject$2(snapDurClamp) ? _clamp$2(snapDurClamp.min, snapDurClamp.max) : _clamp$2(snapDurClamp, snapDurClamp);
15055        snapDelayedCall = gsap$b.delayedCall(snap.delay || scrubSmooth / 2 || 0.1, function () {
15056          var scroll = scrollFunc(),
15057              refreshedRecently = _getTime$2() - lastRefresh < 500,
15058              tween = tweenTo.tween;
15059
15060          if ((refreshedRecently || Math.abs(self.getVelocity()) < 10) && !tween && !_pointerIsDown && lastSnap !== scroll) {
15061            var progress = (scroll - start) / change,
15062                totalProgress = animation && !isToggle ? animation.totalProgress() : progress,
15063                velocity = refreshedRecently ? 0 : (totalProgress - snap2) / (_getTime$2() - _time2) * 1000 || 0,
15064                change1 = gsap$b.utils.clamp(-progress, 1 - progress, _abs$1(velocity / 2) * velocity / 0.185),
15065                naturalEnd = progress + (snap.inertia === false ? 0 : change1),
15066                endValue,
15067                endScroll,
15068                _snap = snap,
15069                onStart = _snap.onStart,
15070                _onInterrupt = _snap.onInterrupt,
15071                _onComplete = _snap.onComplete;
15072            endValue = snapFunc(naturalEnd, self);
15073            _isNumber$2(endValue) || (endValue = naturalEnd);
15074            endScroll = Math.round(start + endValue * change);
15075
15076            if (scroll <= end && scroll >= start && endScroll !== scroll) {
15077              if (tween && !tween._initted && tween.data <= _abs$1(endScroll - scroll)) {
15078                return;
15079              }
15080
15081              if (snap.inertia === false) {
15082                change1 = endValue - progress;
15083              }
15084
15085              tweenTo(endScroll, {
15086                duration: snapDurClamp(_abs$1(Math.max(_abs$1(naturalEnd - totalProgress), _abs$1(endValue - totalProgress)) * 0.185 / velocity / 0.05 || 0)),
15087                ease: snap.ease || "power3",
15088                data: _abs$1(endScroll - scroll),
15089                onInterrupt: function onInterrupt() {
15090                  return snapDelayedCall.restart(true) && _onInterrupt && _onInterrupt(self);
15091                },
15092                onComplete: function onComplete() {
15093                  self.update();
15094                  lastSnap = scrollFunc();
15095
15096                  if (animation) {
15097                    scrubTween ? scrubTween.resetTo("totalProgress", endValue, animation._tTime / animation._tDur) : animation.progress(endValue);
15098                  }
15099
15100                  snap1 = snap2 = animation && !isToggle ? animation.totalProgress() : self.progress;
15101                  onSnapComplete && onSnapComplete(self);
15102                  _onComplete && _onComplete(self);
15103                }
15104              }, scroll, change1 * change, endScroll - scroll - change1 * change);
15105              onStart && onStart(self, tweenTo.tween);
15106            }
15107          } else if (self.isActive && lastSnap !== scroll) {
15108            snapDelayedCall.restart(true);
15109          }
15110        }).pause();
15111      }
15112
15113      id && (_ids[id] = self);
15114      trigger = self.trigger = _getTarget(trigger || pin !== true && pin);
15115      customRevertReturn = trigger && trigger._gsap && trigger._gsap.stRevert;
15116      customRevertReturn && (customRevertReturn = customRevertReturn(self));
15117      pin = pin === true ? trigger : _getTarget(pin);
15118      _isString$4(toggleClass) && (toggleClass = {
15119        targets: trigger,
15120        className: toggleClass
15121      });
15122
15123      if (pin) {
15124        pinSpacing === false || pinSpacing === _margin || (pinSpacing = !pinSpacing && pin.parentNode && pin.parentNode.style && _getComputedStyle$1(pin.parentNode).display === "flex" ? false : _padding);
15125        self.pin = pin;
15126        pinCache = gsap$b.core.getCache(pin);
15127
15128        if (!pinCache.spacer) {
15129          if (pinSpacer) {
15130            pinSpacer = _getTarget(pinSpacer);
15131            pinSpacer && !pinSpacer.nodeType && (pinSpacer = pinSpacer.current || pinSpacer.nativeElement);
15132            pinCache.spacerIsNative = !!pinSpacer;
15133            pinSpacer && (pinCache.spacerState = _getState(pinSpacer));
15134          }
15135
15136          pinCache.spacer = spacer = pinSpacer || _doc$6.createElement("div");
15137          spacer.classList.add("pin-spacer");
15138          id && spacer.classList.add("pin-spacer-" + id);
15139          pinCache.pinState = pinOriginalState = _getState(pin);
15140        } else {
15141          pinOriginalState = pinCache.pinState;
15142        }
15143
15144        vars.force3D !== false && gsap$b.set(pin, {
vendor: 4,121 bytes, lines 15145-15260
15145          force3D: true
15146        });
15147        self.spacer = spacer = pinCache.spacer;
15148        cs = _getComputedStyle$1(pin);
15149        spacingStart = cs[pinSpacing + direction.os2];
15150        pinGetter = gsap$b.getProperty(pin);
15151        pinSetter = gsap$b.quickSetter(pin, direction.a, _px);
15152
15153        _swapPinIn(pin, spacer, cs);
15154
15155        pinState = _getState(pin);
15156      }
15157
15158      if (markers) {
15159        markerVars = _isObject$2(markers) ? _setDefaults$2(markers, _markerDefaults) : _markerDefaults;
15160        markerStartTrigger = _createMarker("scroller-start", id, scroller, direction, markerVars, 0);
15161        markerEndTrigger = _createMarker("scroller-end", id, scroller, direction, markerVars, 0, markerStartTrigger);
15162        offset = markerStartTrigger["offset" + direction.op.d2];
15163
15164        var content = _getTarget(_getProxyProp(scroller, "content") || scroller);
15165
15166        markerStart = this.markerStart = _createMarker("start", id, content, direction, markerVars, offset, 0, containerAnimation);
15167        markerEnd = this.markerEnd = _createMarker("end", id, content, direction, markerVars, offset, 0, containerAnimation);
15168        containerAnimation && (caMarkerSetter = gsap$b.quickSetter([markerStart, markerEnd], direction.a, _px));
15169
15170        if (!useFixedPosition && !(exports._proxies.length && _getProxyProp(scroller, "fixedMarkers") === true)) {
15171          _makePositionable(isViewport ? _body$5 : scroller);
15172
15173          gsap$b.set([markerStartTrigger, markerEndTrigger], {
15174            force3D: true
15175          });
15176          markerStartSetter = gsap$b.quickSetter(markerStartTrigger, direction.a, _px);
15177          markerEndSetter = gsap$b.quickSetter(markerEndTrigger, direction.a, _px);
15178        }
15179      }
15180
15181      if (containerAnimation) {
15182        var oldOnUpdate = containerAnimation.vars.onUpdate,
15183            oldParams = containerAnimation.vars.onUpdateParams;
15184        containerAnimation.eventCallback("onUpdate", function () {
15185          self.update(0, 0, 1);
15186          oldOnUpdate && oldOnUpdate.apply(containerAnimation, oldParams || []);
15187        });
15188      }
15189
15190      self.previous = function () {
15191        return _triggers[_triggers.indexOf(self) - 1];
15192      };
15193
15194      self.next = function () {
15195        return _triggers[_triggers.indexOf(self) + 1];
15196      };
15197
15198      self.revert = function (revert, temp) {
15199        if (!temp) {
15200          return self.kill(true);
15201        }
15202
15203        var r = revert !== false || !self.enabled,
15204            prevRefreshing = _refreshing;
15205
15206        if (r !== self.isReverted) {
15207          if (r) {
15208            prevScroll = Math.max(scrollFunc(), self.scroll.rec || 0);
15209            prevProgress = self.progress;
15210            prevAnimProgress = animation && animation.progress();
15211          }
15212
15213          markerStart && [markerStart, markerEnd, markerStartTrigger, markerEndTrigger].forEach(function (m) {
15214            return m.style.display = r ? "none" : "block";
15215          });
15216
15217          if (r) {
15218            _refreshing = self;
15219            self.update(r);
15220          }
15221
15222          if (pin && (!pinReparent || !self.isActive)) {
15223            if (r) {
15224              _swapPinOut(pin, spacer, pinOriginalState);
15225            } else {
15226              _swapPinIn(pin, spacer, _getComputedStyle$1(pin), spacerState);
15227            }
15228          }
15229
15230          r || self.update(r);
15231          _refreshing = prevRefreshing;
15232          self.isReverted = r;
15233        }
15234      };
15235
15236      self.refresh = function (soft, force, position, pinOffset) {
15237        if ((_refreshing || !self.enabled) && !force) {
15238          return;
15239        }
15240
15241        if (pin && soft && _lastScrollTime) {
15242          _addListener$2(ScrollTrigger, "scrollEnd", _softRefresh);
15243
15244          return;
15245        }
15246
15247        !_refreshingAll && onRefreshInit && onRefreshInit(self);
15248        _refreshing = self;
15249
15250        if (tweenTo.tween && !position) {
15251          tweenTo.tween.kill();
15252          tweenTo.tween = 0;
15253        }
15254
15255        scrubTween && scrubTween.pause();
15256        invalidateOnRefresh && animation && animation.revert({
15257          kill: false
15258        }).invalidate();
15259        self.isReverted || self.revert(true, true);
15260        self._subPinOffset = false;
vendor: 5,560 bytes, lines 15261-15388
15261
15262        var size = getScrollerSize(),
15263            scrollerBounds = getScrollerOffsets(),
15264            max = containerAnimation ? containerAnimation.duration() : _maxScroll(scroller, direction),
15265            isFirstRefresh = change <= 0.01,
15266            offset = 0,
15267            otherPinOffset = pinOffset || 0,
15268            parsedEnd = _isObject$2(position) ? position.end : vars.end,
15269            parsedEndTrigger = vars.endTrigger || trigger,
15270            parsedStart = _isObject$2(position) ? position.start : vars.start || (vars.start === 0 || !trigger ? 0 : pin ? "0 0" : "0 100%"),
15271            pinnedContainer = self.pinnedContainer = vars.pinnedContainer && _getTarget(vars.pinnedContainer, self),
15272            triggerIndex = trigger && Math.max(0, _triggers.indexOf(self)) || 0,
15273            i = triggerIndex,
15274            cs,
15275            bounds,
15276            scroll,
15277            isVertical,
15278            override,
15279            curTrigger,
15280            curPin,
15281            oppositeScroll,
15282            initted,
15283            revertedPins,
15284            forcedOverflow,
15285            markerStartOffset,
15286            markerEndOffset;
15287
15288        if (markers && _isObject$2(position)) {
15289          markerStartOffset = gsap$b.getProperty(markerStartTrigger, direction.p);
15290          markerEndOffset = gsap$b.getProperty(markerEndTrigger, direction.p);
15291        }
15292
15293        while (i--) {
15294          curTrigger = _triggers[i];
15295          curTrigger.end || curTrigger.refresh(0, 1) || (_refreshing = self);
15296          curPin = curTrigger.pin;
15297
15298          if (curPin && (curPin === trigger || curPin === pin || curPin === pinnedContainer) && !curTrigger.isReverted) {
15299            revertedPins || (revertedPins = []);
15300            revertedPins.unshift(curTrigger);
15301            curTrigger.revert(true, true);
15302          }
15303
15304          if (curTrigger !== _triggers[i]) {
15305            triggerIndex--;
15306            i--;
15307          }
15308        }
15309
15310        _isFunction$4(parsedStart) && (parsedStart = parsedStart(self));
15311        parsedStart = _parseClamp(parsedStart, "start", self);
15312        start = _parsePosition$1(parsedStart, trigger, size, direction, scrollFunc(), markerStart, markerStartTrigger, self, scrollerBounds, borderWidth, useFixedPosition, max, containerAnimation, self._startClamp && "_startClamp") || (pin ? -0.001 : 0);
15313        _isFunction$4(parsedEnd) && (parsedEnd = parsedEnd(self));
15314
15315        if (_isString$4(parsedEnd) && !parsedEnd.indexOf("+=")) {
15316          if (~parsedEnd.indexOf(" ")) {
15317            parsedEnd = (_isString$4(parsedStart) ? parsedStart.split(" ")[0] : "") + parsedEnd;
15318          } else {
15319            offset = _offsetToPx(parsedEnd.substr(2), size);
15320            parsedEnd = _isString$4(parsedStart) ? parsedStart : (containerAnimation ? gsap$b.utils.mapRange(0, containerAnimation.duration(), containerAnimation.scrollTrigger.start, containerAnimation.scrollTrigger.end, start) : start) + offset;
15321            parsedEndTrigger = trigger;
15322          }
15323        }
15324
15325        parsedEnd = _parseClamp(parsedEnd, "end", self);
15326        end = Math.max(start, _parsePosition$1(parsedEnd || (parsedEndTrigger ? "100% 0" : max), parsedEndTrigger, size, direction, scrollFunc() + offset, markerEnd, markerEndTrigger, self, scrollerBounds, borderWidth, useFixedPosition, max, containerAnimation, self._endClamp && "_endClamp")) || -0.001;
15327        offset = 0;
15328        i = triggerIndex;
15329
15330        while (i--) {
15331          curTrigger = _triggers[i];
15332          curPin = curTrigger.pin;
15333
15334          if (curPin && curTrigger.start - curTrigger._pinPush <= start && !containerAnimation && curTrigger.end > 0) {
15335            cs = curTrigger.end - (self._startClamp ? Math.max(0, curTrigger.start) : curTrigger.start);
15336
15337            if ((curPin === trigger && curTrigger.start - curTrigger._pinPush < start || curPin === pinnedContainer) && isNaN(parsedStart)) {
15338              offset += cs * (1 - curTrigger.progress);
15339            }
15340
15341            curPin === pin && (otherPinOffset += cs);
15342          }
15343        }
15344
15345        start += offset;
15346        end += offset;
15347        self._startClamp && (self._startClamp += offset);
15348
15349        if (self._endClamp && !_refreshingAll) {
15350          self._endClamp = end || -0.001;
15351          end = Math.min(end, _maxScroll(scroller, direction));
15352        }
15353
15354        change = end - start || (start -= 0.01) && 0.001;
15355
15356        if (isFirstRefresh) {
15357          prevProgress = gsap$b.utils.clamp(0, 1, gsap$b.utils.normalize(start, end, prevScroll));
15358        }
15359
15360        self._pinPush = otherPinOffset;
15361
15362        if (markerStart && offset) {
15363          cs = {};
15364          cs[direction.a] = "+=" + offset;
15365          pinnedContainer && (cs[direction.p] = "-=" + scrollFunc());
15366          gsap$b.set([markerStart, markerEnd], cs);
15367        }
15368
15369        if (pin && !(_clampingMax && self.end >= _maxScroll(scroller, direction))) {
15370          cs = _getComputedStyle$1(pin);
15371          isVertical = direction === _vertical;
15372          scroll = scrollFunc();
15373          pinStart = parseFloat(pinGetter(direction.a)) + otherPinOffset;
15374
15375          if (!max && end > 1) {
15376            forcedOverflow = (isViewport ? _doc$6.scrollingElement || _docEl$2 : scroller).style;
15377            forcedOverflow = {
15378              style: forcedOverflow,
15379              value: forcedOverflow["overflow" + direction.a.toUpperCase()]
15380            };
15381
15382            if (isViewport && _getComputedStyle$1(_body$5)["overflow" + direction.a.toUpperCase()] !== "scroll") {
15383              forcedOverflow.style["overflow" + direction.a.toUpperCase()] = "scroll";
15384            }
15385          }
15386
15387          _swapPinIn(pin, spacer, cs);
15388
vendor: 4,418 bytes, lines 15389-15494
15389          pinState = _getState(pin);
15390          bounds = _getBounds$1(pin, true);
15391          oppositeScroll = useFixedPosition && _getScrollFunc(scroller, isVertical ? _horizontal : _vertical)();
15392
15393          if (pinSpacing) {
15394            spacerState = [pinSpacing + direction.os2, change + otherPinOffset + _px];
15395            spacerState.t = spacer;
15396            i = pinSpacing === _padding ? _getSize(pin, direction) + change + otherPinOffset : 0;
15397
15398            if (i) {
15399              spacerState.push(direction.d, i + _px);
15400              spacer.style.flexBasis !== "auto" && (spacer.style.flexBasis = i + _px);
15401            }
15402
15403            _setState(spacerState);
15404
15405            if (pinnedContainer) {
15406              _triggers.forEach(function (t) {
15407                if (t.pin === pinnedContainer && t.vars.pinSpacing !== false) {
15408                  t._subPinOffset = true;
15409                }
15410              });
15411            }
15412
15413            useFixedPosition && scrollFunc(prevScroll);
15414          } else {
15415            i = _getSize(pin, direction);
15416            i && spacer.style.flexBasis !== "auto" && (spacer.style.flexBasis = i + _px);
15417          }
15418
15419          if (useFixedPosition) {
15420            override = {
15421              top: bounds.top + (isVertical ? scroll - start : oppositeScroll) + _px,
15422              left: bounds.left + (isVertical ? oppositeScroll : scroll - start) + _px,
15423              boxSizing: "border-box",
15424              position: "fixed"
15425            };
15426            override[_width] = override["max" + _Width] = Math.ceil(bounds.width) + _px;
15427            override[_height] = override["max" + _Height] = Math.ceil(bounds.height) + _px;
15428            override[_margin] = override[_margin + _Top] = override[_margin + _Right] = override[_margin + _Bottom] = override[_margin + _Left] = "0";
15429            override[_padding] = cs[_padding];
15430            override[_padding + _Top] = cs[_padding + _Top];
15431            override[_padding + _Right] = cs[_padding + _Right];
15432            override[_padding + _Bottom] = cs[_padding + _Bottom];
15433            override[_padding + _Left] = cs[_padding + _Left];
15434            pinActiveState = _copyState(pinOriginalState, override, pinReparent);
15435            _refreshingAll && scrollFunc(0);
15436          }
15437
15438          if (animation) {
15439            initted = animation._initted;
15440
15441            _suppressOverwrites$1(1);
15442
15443            animation.render(animation.duration(), true, true);
15444            pinChange = pinGetter(direction.a) - pinStart + change + otherPinOffset;
15445            pinMoves = Math.abs(change - pinChange) > 1;
15446            useFixedPosition && pinMoves && pinActiveState.splice(pinActiveState.length - 2, 2);
15447            animation.render(0, true, true);
15448            initted || animation.invalidate(true);
15449            animation.parent || animation.totalTime(animation.totalTime());
15450
15451            _suppressOverwrites$1(0);
15452          } else {
15453            pinChange = change;
15454          }
15455
15456          forcedOverflow && (forcedOverflow.value ? forcedOverflow.style["overflow" + direction.a.toUpperCase()] = forcedOverflow.value : forcedOverflow.style.removeProperty("overflow-" + direction.a));
15457        } else if (trigger && scrollFunc() && !containerAnimation) {
15458          bounds = trigger.parentNode;
15459
15460          while (bounds && bounds !== _body$5) {
15461            if (bounds._pinOffset) {
15462              start -= bounds._pinOffset;
15463              end -= bounds._pinOffset;
15464            }
15465
15466            bounds = bounds.parentNode;
15467          }
15468        }
15469
15470        revertedPins && revertedPins.forEach(function (t) {
15471          return t.revert(false, true);
15472        });
15473        self.start = start;
15474        self.end = end;
15475        scroll1 = scroll2 = _refreshingAll ? prevScroll : scrollFunc();
15476
15477        if (!containerAnimation && !_refreshingAll) {
15478          scroll1 < prevScroll && scrollFunc(prevScroll);
15479          self.scroll.rec = 0;
15480        }
15481
15482        self.revert(false, true);
15483        lastRefresh = _getTime$2();
15484
15485        if (snapDelayedCall) {
15486          lastSnap = -1;
15487          snapDelayedCall.restart(true);
15488        }
15489
15490        _refreshing = 0;
15491        animation && isToggle && (animation._initted || prevAnimProgress) && animation.progress() !== prevAnimProgress && animation.progress(prevAnimProgress || 0, true).render(animation.time(), true, true);
15492
15493        if (isFirstRefresh || prevProgress !== self.progress || containerAnimation || invalidateOnRefresh) {
15494          animation && !isToggle
vendor: 10,328 bytes, lines 15494-15750
15494 && animation.totalProgress(containerAnimation && start < -0.001 && !prevProgress ? gsap$b.utils.normalize(start, end, 0) : prevProgress, true);
15495          self.progress = isFirstRefresh || (scroll1 - start) / change === prevProgress ? 0 : prevProgress;
15496        }
15497
15498        pin && pinSpacing && (spacer._pinOffset = Math.round(self.progress * pinChange));
15499        scrubTween && scrubTween.invalidate();
15500
15501        if (!isNaN(markerStartOffset)) {
15502          markerStartOffset -= gsap$b.getProperty(markerStartTrigger, direction.p);
15503          markerEndOffset -= gsap$b.getProperty(markerEndTrigger, direction.p);
15504
15505          _shiftMarker(markerStartTrigger, direction, markerStartOffset);
15506
15507          _shiftMarker(markerStart, direction, markerStartOffset - (pinOffset || 0));
15508
15509          _shiftMarker(markerEndTrigger, direction, markerEndOffset);
15510
15511          _shiftMarker(markerEnd, direction, markerEndOffset - (pinOffset || 0));
15512        }
15513
15514        isFirstRefresh && !_refreshingAll && self.update();
15515
15516        if (onRefresh && !_refreshingAll && !executingOnRefresh) {
15517          executingOnRefresh = true;
15518          onRefresh(self);
15519          executingOnRefresh = false;
15520        }
15521      };
15522
15523      self.getVelocity = function () {
15524        return (scrollFunc() - scroll2) / (_getTime$2() - _time2) * 1000 || 0;
15525      };
15526
15527      self.endAnimation = function () {
15528        _endAnimation(self.callbackAnimation);
15529
15530        if (animation) {
15531          scrubTween ? scrubTween.progress(1) : !animation.paused() ? _endAnimation(animation, animation.reversed()) : isToggle || _endAnimation(animation, self.direction < 0, 1);
15532        }
15533      };
15534
15535      self.labelToScroll = function (label) {
15536        return animation && animation.labels && (start || self.refresh() || start) + animation.labels[label] / animation.duration() * change || 0;
15537      };
15538
15539      self.getTrailing = function (name) {
15540        var i = _triggers.indexOf(self),
15541            a = self.direction > 0 ? _triggers.slice(0, i).reverse() : _triggers.slice(i + 1);
15542
15543        return (_isString$4(name) ? a.filter(function (t) {
15544          return t.vars.preventOverlaps === name;
15545        }) : a).filter(function (t) {
15546          return self.direction > 0 ? t.end <= start : t.start >= end;
15547        });
15548      };
15549
15550      self.update = function (reset, recordVelocity, forceFake) {
15551        if (containerAnimation && !forceFake && !reset) {
15552          return;
15553        }
15554
15555        var scroll = _refreshingAll === true ? prevScroll : self.scroll(),
15556            p = reset ? 0 : (scroll - start) / change,
15557            clipped = p < 0 ? 0 : p > 1 ? 1 : p || 0,
15558            prevProgress = self.progress,
15559            isActive,
15560            wasActive,
15561            toggleState,
15562            action,
15563            stateChanged,
15564            toggled,
15565            isAtMax,
15566            isTakingAction;
15567
15568        if (recordVelocity) {
15569          scroll2 = scroll1;
15570          scroll1 = containerAnimation ? scrollFunc() : scroll;
15571
15572          if (snap) {
15573            snap2 = snap1;
15574            snap1 = animation && !isToggle ? animation.totalProgress() : clipped;
15575          }
15576        }
15577
15578        if (anticipatePin && pin && !_refreshing && !_startup$1 && _lastScrollTime) {
15579          if (!clipped && start < scroll + (scroll - scroll2) / (_getTime$2() - _time2) * anticipatePin) {
15580            clipped = 0.0001;
15581          } else if (clipped === 1 && end > scroll + (scroll - scroll2) / (_getTime$2() - _time2) * anticipatePin) {
15582            clipped = 0.9999;
15583          }
15584        }
15585
15586        if (clipped !== prevProgress && self.enabled) {
15587          isActive = self.isActive = !!clipped && clipped < 1;
15588          wasActive = !!prevProgress && prevProgress < 1;
15589          toggled = isActive !== wasActive;
15590          stateChanged = toggled || !!clipped !== !!prevProgress;
15591          self.direction = clipped > prevProgress ? 1 : -1;
15592          self.progress = clipped;
15593
15594          if (stateChanged && !_refreshing) {
15595            toggleState = clipped && !prevProgress ? 0 : clipped === 1 ? 1 : prevProgress === 1 ? 2 : 3;
15596
15597            if (isToggle) {
15598              action = !toggled && toggleActions[toggleState + 1] !== "none" && toggleActions[toggleState + 1] || toggleActions[toggleState];
15599              isTakingAction = animation && (action === "complete" || action === "reset" || action in animation);
15600            }
15601          }
15602
15603          preventOverlaps && (toggled || isTakingAction) && (isTakingAction || scrub || !animation) && (_isFunction$4(preventOverlaps) ? preventOverlaps(self) : self.getTrailing(preventOverlaps).forEach(function (t) {
15604            return t.endAnimation();
15605          }));
15606
15607          if (!isToggle) {
15608            if (scrubTween && !_refreshing && !_startup$1) {
15609              scrubTween._dp._time - scrubTween._start !== scrubTween._time && scrubTween.render(scrubTween._dp._time - scrubTween._start);
15610
15611              if (scrubTween.resetTo) {
15612                scrubTween.resetTo("totalProgress", clipped, animation._tTime / animation._tDur);
15613              } else {
15614                scrubTween.vars.totalProgress = clipped;
15615                scrubTween.invalidate().restart();
15616              }
15617            } else if (animation) {
15618              animation.totalProgress(clipped, !!(_refreshing && (lastRefresh || reset)));
15619            }
15620          }
15621
15622          if (pin) {
15623            reset && pinSpacing && (spacer.style[pinSpacing + direction.os2] = spacingStart);
15624
15625            if (!useFixedPosition) {
15626              pinSetter(_round$5(pinStart + pinChange * clipped));
15627            } else if (stateChanged) {
15628              isAtMax = !reset && clipped > prevProgress && end + 1 > scroll && scroll + 1 >= _maxScroll(scroller, direction);
15629
15630              if (pinReparent) {
15631                if (!reset && (isActive || isAtMax)) {
15632                  var bounds = _getBounds$1(pin, true),
15633                      _offset = scroll - start;
15634
15635                  _reparent(pin, _body$5, bounds.top + (direction === _vertical ? _offset : 0) + _px, bounds.left + (direction === _vertical ? 0 : _offset) + _px);
15636                } else {
15637                  _reparent(pin, spacer);
15638                }
15639              }
15640
15641              _setState(isActive || isAtMax ? pinActiveState : pinState);
15642
15643              pinMoves && clipped < 1 && isActive || pinSetter(pinStart + (clipped === 1 && !isAtMax ? pinChange : 0));
15644            }
15645          }
15646
15647          snap && !tweenTo.tween && !_refreshing && !_startup$1 && snapDelayedCall.restart(true);
15648          toggleClass && (toggled || once && clipped && (clipped < 1 || !_limitCallbacks)) && _toArray$4(toggleClass.targets).forEach(function (el) {
15649            return el.classList[isActive || once ? "add" : "remove"](toggleClass.className);
15650          });
15651          onUpdate && !isToggle && !reset && onUpdate(self);
15652
15653          if (stateChanged && !_refreshing) {
15654            if (isToggle) {
15655              if (isTakingAction) {
15656                if (action === "complete") {
15657                  animation.pause().totalProgress(1);
15658                } else if (action === "reset") {
15659                  animation.restart(true).pause();
15660                } else if (action === "restart") {
15661                  animation.restart(true);
15662                } else {
15663                  animation[action]();
15664                }
15665              }
15666
15667              onUpdate && onUpdate(self);
15668            }
15669
15670            if (toggled || !_limitCallbacks) {
15671              onToggle && toggled && _callback$1(self, onToggle);
15672              callbacks[toggleState] && _callback$1(self, callbacks[toggleState]);
15673              once && (clipped === 1 ? self.kill(false, 1) : callbacks[toggleState] = 0);
15674
15675              if (!toggled) {
15676                toggleState = clipped === 1 ? 1 : 3;
15677                callbacks[toggleState] && _callback$1(self, callbacks[toggleState]);
15678              }
15679            }
15680
15681            if (fastScrollEnd && !isActive && Math.abs(self.getVelocity()) > (_isNumber$2(fastScrollEnd) ? fastScrollEnd : 2500)) {
15682              _endAnimation(self.callbackAnimation);
15683
15684              scrubTween ? scrubTween.progress(1) : _endAnimation(animation, action === "reverse" ? 1 : !clipped, 1);
15685            }
15686          } else if (isToggle && onUpdate && !_refreshing) {
15687            onUpdate(self);
15688          }
15689        }
15690
15691        if (markerEndSetter) {
15692          var n = containerAnimation ? scroll / containerAnimation.duration() * (containerAnimation._caScrollDist || 0) : scroll;
15693          markerStartSetter(n + (markerStartTrigger._isFlipped ? 1 : 0));
15694          markerEndSetter(n);
15695        }
15696
15697        caMarkerSetter && caMarkerSetter(-scroll / containerAnimation.duration() * (containerAnimation._caScrollDist || 0));
15698      };
15699
15700      self.enable = function (reset, refresh) {
15701        if (!self.enabled) {
15702          self.enabled = true;
15703
15704          _addListener$2(scroller, "resize", _onResize);
15705
15706          isViewport || _addListener$2(scroller, "scroll", _onScroll$1);
15707          onRefreshInit && _addListener$2(ScrollTrigger, "refreshInit", onRefreshInit);
15708
15709          if (reset !== false) {
15710            self.progress = prevProgress = 0;
15711            scroll1 = scroll2 = lastSnap = scrollFunc();
15712          }
15713
15714          refresh !== false && self.refresh();
15715        }
15716      };
15717
15718      self.getTween = function (snap) {
15719        return snap && tweenTo ? tweenTo.tween : scrubTween;
15720      };
15721
15722      self.setPositions = function (newStart, newEnd, keepClamp, pinOffset) {
15723        if (containerAnimation) {
15724          var st = containerAnimation.scrollTrigger,
15725              duration = containerAnimation.duration(),
15726              _change = st.end - st.start;
15727
15728          newStart = st.start + _change * newStart / duration;
15729          newEnd = st.start + _change * newEnd / duration;
15730        }
15731
15732        self.refresh(false, false, {
15733          start: _keepClamp(newStart, keepClamp && !!self._startClamp),
15734          end: _keepClamp(newEnd, keepClamp && !!self._endClamp)
15735        }, pinOffset);
15736        self.update();
15737      };
15738
15739      self.adjustPinSpacing = function (amount) {
15740        if (spacerState && amount) {
15741          var i = spacerState.indexOf(direction.d) + 1;
15742          spacerState[i] = parseFloat(spacerState[i]) + amount + _px;
15743          spacerState[1] = parseFloat(spacerState[1]) + amount + _px;
15744
15745          _setState(spacerState);
15746        }
15747      };
15748
15749      self.disable = function (reset, allowAnimation) {
15750        
vendor: 12,223 bytes, lines 15750-16114
15750if (self.enabled) {
15751          reset !== false && self.revert(true, true);
15752          self.enabled = self.isActive = false;
15753          allowAnimation || scrubTween && scrubTween.pause();
15754          prevScroll = 0;
15755          pinCache && (pinCache.uncache = 1);
15756          onRefreshInit && _removeListener$2(ScrollTrigger, "refreshInit", onRefreshInit);
15757
15758          if (snapDelayedCall) {
15759            snapDelayedCall.pause();
15760            tweenTo.tween && tweenTo.tween.kill() && (tweenTo.tween = 0);
15761          }
15762
15763          if (!isViewport) {
15764            var i = _triggers.length;
15765
15766            while (i--) {
15767              if (_triggers[i].scroller === scroller && _triggers[i] !== self) {
15768                return;
15769              }
15770            }
15771
15772            _removeListener$2(scroller, "resize", _onResize);
15773
15774            isViewport || _removeListener$2(scroller, "scroll", _onScroll$1);
15775          }
15776        }
15777      };
15778
15779      self.kill = function (revert, allowAnimation) {
15780        self.disable(revert, allowAnimation);
15781        scrubTween && !allowAnimation && scrubTween.kill();
15782        id && delete _ids[id];
15783
15784        var i = _triggers.indexOf(self);
15785
15786        i >= 0 && _triggers.splice(i, 1);
15787        i === _i && _direction > 0 && _i--;
15788        i = 0;
15789
15790        _triggers.forEach(function (t) {
15791          return t.scroller === self.scroller && (i = 1);
15792        });
15793
15794        i || _refreshingAll || (self.scroll.rec = 0);
15795
15796        if (animation) {
15797          animation.scrollTrigger = null;
15798          revert && animation.revert({
15799            kill: false
15800          });
15801          allowAnimation || animation.kill();
15802        }
15803
15804        markerStart && [markerStart, markerEnd, markerStartTrigger, markerEndTrigger].forEach(function (m) {
15805          return m.parentNode && m.parentNode.removeChild(m);
15806        });
15807        _primary === self && (_primary = 0);
15808
15809        if (pin) {
15810          pinCache && (pinCache.uncache = 1);
15811          i = 0;
15812
15813          _triggers.forEach(function (t) {
15814            return t.pin === pin && i++;
15815          });
15816
15817          i || (pinCache.spacer = 0);
15818        }
15819
15820        vars.onKill && vars.onKill(self);
15821      };
15822
15823      _triggers.push(self);
15824
15825      self.enable(false, false);
15826      customRevertReturn && customRevertReturn(self);
15827
15828      if (animation && animation.add && !change) {
15829        var updateFunc = self.update;
15830
15831        self.update = function () {
15832          self.update = updateFunc;
15833          start || end || self.refresh();
15834        };
15835
15836        gsap$b.delayedCall(0.01, self.update);
15837        change = 0.01;
15838        start = end = 0;
15839      } else {
15840        self.refresh();
15841      }
15842
15843      pin && _queueRefreshAll();
15844    };
15845
15846    ScrollTrigger.register = function register(core) {
15847      if (!_coreInitted$8) {
15848        gsap$b = core || _getGSAP$9();
15849        _windowExists$7() && window.document && ScrollTrigger.enable();
15850        _coreInitted$8 = _enabled;
15851      }
15852
15853      return _coreInitted$8;
15854    };
15855
15856    ScrollTrigger.defaults = function defaults(config) {
15857      if (config) {
15858        for (var p in config) {
15859          _defaults$1[p] = config[p];
15860        }
15861      }
15862
15863      return _defaults$1;
15864    };
15865
15866    ScrollTrigger.disable = function disable(reset, kill) {
15867      _enabled = 0;
15868
15869      _triggers.forEach(function (trigger) {
15870        return trigger[kill ? "kill" : "disable"](reset);
15871      });
15872
15873      _removeListener$2(_win$6, "wheel", _onScroll$1);
15874
15875      _removeListener$2(_doc$6, "scroll", _onScroll$1);
15876
15877      clearInterval(_syncInterval);
15878
15879      _removeListener$2(_doc$6, "touchcancel", _passThrough$1);
15880
15881      _removeListener$2(_body$5, "touchstart", _passThrough$1);
15882
15883      _multiListener(_removeListener$2, _doc$6, "pointerdown,touchstart,mousedown", _pointerDownHandler);
15884
15885      _multiListener(_removeListener$2, _doc$6, "pointerup,touchend,mouseup", _pointerUpHandler);
15886
15887      _resizeDelay.kill();
15888
15889      _iterateAutoRefresh(_removeListener$2);
15890
15891      for (var i = 0; i < exports._scrollers.length; i += 3) {
15892        _wheelListener(_removeListener$2, exports._scrollers[i], exports._scrollers[i + 1]);
15893
15894        _wheelListener(_removeListener$2, exports._scrollers[i], exports._scrollers[i + 2]);
15895      }
15896    };
15897
15898    ScrollTrigger.enable = function enable() {
15899      _win$6 = window;
15900      _doc$6 = document;
15901      _docEl$2 = _doc$6.documentElement;
15902      _body$5 = _doc$6.body;
15903
15904      if (gsap$b) {
15905        _toArray$4 = gsap$b.utils.toArray;
15906        _clamp$2 = gsap$b.utils.clamp;
15907        _context$3 = gsap$b.core.context || _passThrough$1;
15908        _suppressOverwrites$1 = gsap$b.core.suppressOverwrites || _passThrough$1;
15909        _scrollRestoration = _win$6.history.scrollRestoration || "auto";
15910        _lastScroll = _win$6.pageYOffset;
15911        gsap$b.core.globals("ScrollTrigger", ScrollTrigger);
15912
15913        if (_body$5) {
15914          _enabled = 1;
15915          _div100vh = document.createElement("div");
15916          _div100vh.style.height = "100vh";
15917          _div100vh.style.position = "absolute";
15918
15919          _refresh100vh();
15920
15921          _rafBugFix();
15922
15923          Observer.register(gsap$b);
15924          ScrollTrigger.isTouch = Observer.isTouch;
15925          _fixIOSBug = Observer.isTouch && /(iPad|iPhone|iPod|Mac)/g.test(navigator.userAgent);
15926          _ignoreMobileResize = Observer.isTouch === 1;
15927
15928          _addListener$2(_win$6, "wheel", _onScroll$1);
15929
15930          _root$1 = [_win$6, _doc$6, _docEl$2, _body$5];
15931
15932          if (gsap$b.matchMedia) {
15933            ScrollTrigger.matchMedia = function (vars) {
15934              var mm = gsap$b.matchMedia(),
15935                  p;
15936
15937              for (p in vars) {
15938                mm.add(p, vars[p]);
15939              }
15940
15941              return mm;
15942            };
15943
15944            gsap$b.addEventListener("matchMediaInit", function () {
15945              return _revertAll();
15946            });
15947            gsap$b.addEventListener("matchMediaRevert", function () {
15948              return _revertRecorded();
15949            });
15950            gsap$b.addEventListener("matchMedia", function () {
15951              _refreshAll(0, 1);
15952
15953              _dispatch$1("matchMedia");
15954            });
15955            gsap$b.matchMedia("(orientation: portrait)", function () {
15956              _setBaseDimensions();
15957
15958              return _setBaseDimensions;
15959            });
15960          } else {
15961            console.warn("Requires GSAP 3.11.0 or later");
15962          }
15963
15964          _setBaseDimensions();
15965
15966          _addListener$2(_doc$6, "scroll", _onScroll$1);
15967
15968          var bodyStyle = _body$5.style,
15969              border = bodyStyle.borderTopStyle,
15970              AnimationProto = gsap$b.core.Animation.prototype,
15971              bounds,
15972              i;
15973          AnimationProto.revert || Object.defineProperty(AnimationProto, "revert", {
15974            value: function value() {
15975              return this.time(-0.01, true);
15976            }
15977          });
15978          bodyStyle.borderTopStyle = "solid";
15979          bounds = _getBounds$1(_body$5);
15980          _vertical.m = Math.round(bounds.top + _vertical.sc()) || 0;
15981          _horizontal.m = Math.round(bounds.left + _horizontal.sc()) || 0;
15982          border ? bodyStyle.borderTopStyle = border : bodyStyle.removeProperty("border-top-style");
15983          _syncInterval = setInterval(_sync, 250);
15984          gsap$b.delayedCall(0.5, function () {
15985            return _startup$1 = 0;
15986          });
15987
15988          _addListener$2(_doc$6, "touchcancel", _passThrough$1);
15989
15990          _addListener$2(_body$5, "touchstart", _passThrough$1);
15991
15992          _multiListener(_addListener$2, _doc$6, "pointerdown,touchstart,mousedown", _pointerDownHandler);
15993
15994          _multiListener(_addListener$2, _doc$6, "pointerup,touchend,mouseup", _pointerUpHandler);
15995
15996          _transformProp$3 = gsap$b.utils.checkPrefix("transform");
15997
15998          _stateProps.push(_transformProp$3);
15999
16000          _coreInitted$8 = _getTime$2();
16001          _resizeDelay = gsap$b.delayedCall(0.2, _refreshAll).pause();
16002          _autoRefresh = [_doc$6, "visibilitychange", function () {
16003            var w = _win$6.innerWidth,
16004                h = _win$6.innerHeight;
16005
16006            if (_doc$6.hidden) {
16007              _prevWidth = w;
16008              _prevHeight = h;
16009            } else if (_prevWidth !== w || _prevHeight !== h) {
16010              _onResize();
16011            }
16012          }, _doc$6, "DOMContentLoaded", _refreshAll, _win$6, "load", _refreshAll, _win$6, "resize", _onResize];
16013
16014          _iterateAutoRefresh(_addListener$2);
16015
16016          _triggers.forEach(function (trigger) {
16017            return trigger.enable(0, 1);
16018          });
16019
16020          for (i = 0; i < exports._scrollers.length; i += 3) {
16021            _wheelListener(_removeListener$2, exports._scrollers[i], exports._scrollers[i + 1]);
16022
16023            _wheelListener(_removeListener$2, exports._scrollers[i], exports._scrollers[i + 2]);
16024          }
16025        }
16026      }
16027    };
16028
16029    ScrollTrigger.config = function config(vars) {
16030      "limitCallbacks" in vars && (_limitCallbacks = !!vars.limitCallbacks);
16031      var ms = vars.syncInterval;
16032      ms && clearInterval(_syncInterval) || (_syncInterval = ms) && setInterval(_sync, ms);
16033      "ignoreMobileResize" in vars && (_ignoreMobileResize = ScrollTrigger.isTouch === 1 && vars.ignoreMobileResize);
16034
16035      if ("autoRefreshEvents" in vars) {
16036        _iterateAutoRefresh(_removeListener$2) || _iterateAutoRefresh(_addListener$2, vars.autoRefreshEvents || "none");
16037        _ignoreResize = (vars.autoRefreshEvents + "").indexOf("resize") === -1;
16038      }
16039    };
16040
16041    ScrollTrigger.scrollerProxy = function scrollerProxy(target, vars) {
16042      var t = _getTarget(target),
16043          i = exports._scrollers.indexOf(t),
16044          isViewport = _isViewport$1(t);
16045
16046      if (~i) {
16047        exports._scrollers.splice(i, isViewport ? 6 : 2);
16048      }
16049
16050      if (vars) {
16051        isViewport ? exports._proxies.unshift(_win$6, vars, _body$5, vars, _docEl$2, vars) : exports._proxies.unshift(t, vars);
16052      }
16053    };
16054
16055    ScrollTrigger.clearMatchMedia = function clearMatchMedia(query) {
16056      _triggers.forEach(function (t) {
16057        return t._ctx && t._ctx.query === query && t._ctx.kill(true, true);
16058      });
16059    };
16060
16061    ScrollTrigger.isInViewport = function isInViewport(element, ratio, horizontal) {
16062      var bounds = (_isString$4(element) ? _getTarget(element) : element).getBoundingClientRect(),
16063          offset = bounds[horizontal ? _width : _height] * ratio || 0;
16064      return horizontal ? bounds.right - offset > 0 && bounds.left + offset < _win$6.innerWidth : bounds.bottom - offset > 0 && bounds.top + offset < _win$6.innerHeight;
16065    };
16066
16067    ScrollTrigger.positionInViewport = function positionInViewport(element, referencePoint, horizontal) {
16068      _isString$4(element) && (element = _getTarget(element));
16069      var bounds = element.getBoundingClientRect(),
16070          size = bounds[horizontal ? _width : _height],
16071          offset = referencePoint == null ? size / 2 : referencePoint in _keywords ? _keywords[referencePoint] * size : ~referencePoint.indexOf("%") ? parseFloat(referencePoint) * size / 100 : parseFloat(referencePoint) || 0;
16072      return horizontal ? (bounds.left + offset) / _win$6.innerWidth : (bounds.top + offset) / _win$6.innerHeight;
16073    };
16074
16075    ScrollTrigger.killAll = function killAll(allowListeners) {
16076      _triggers.slice(0).forEach(function (t) {
16077        return t.vars.id !== "ScrollSmoother" && t.kill();
16078      });
16079
16080      if (allowListeners !== true) {
16081        var listeners = _listeners$1.killAll || [];
16082        _listeners$1 = {};
16083        listeners.forEach(function (f) {
16084          return f();
16085        });
16086      }
16087    };
16088
16089    return ScrollTrigger;
16090  }();
16091  ScrollTrigger$2.version = "3.12.5";
16092
16093  ScrollTrigger$2.saveStyles = function (targets) {
16094    return targets ? _toArray$4(targets).forEach(function (target) {
16095      if (target && target.style) {
16096        var i = _savedStyles.indexOf(target);
16097
16098        i >= 0 && _savedStyles.splice(i, 5);
16099
16100        _savedStyles.push(target, target.style.cssText, target.getBBox && target.getAttribute("transform"), gsap$b.core.getCache(target), _context$3());
16101      }
16102    }) : _savedStyles;
16103  };
16104
16105  ScrollTrigger$2.revert = function (soft, media) {
16106    return _revertAll(!soft, media);
16107  };
16108
16109  ScrollTrigger$2.create = function (vars, animation) {
16110    return new ScrollTrigger$2(vars, animation);
16111  };
16112
16113  ScrollTrigger$2.refresh = function (safe) {
16114    return safe ? _onResize(
vendor: 12,843 bytes, lines 16114-16488
16114) : (_coreInitted$8 || ScrollTrigger$2.register()) && _refreshAll(true);
16115  };
16116
16117  ScrollTrigger$2.update = function (force) {
16118    return ++exports._scrollers.cache && _updateAll(force === true ? 2 : 0);
16119  };
16120
16121  ScrollTrigger$2.clearScrollMemory = _clearScrollMemory;
16122
16123  ScrollTrigger$2.maxScroll = function (element, horizontal) {
16124    return _maxScroll(element, horizontal ? _horizontal : _vertical);
16125  };
16126
16127  ScrollTrigger$2.getScrollFunc = function (element, horizontal) {
16128    return _getScrollFunc(_getTarget(element), horizontal ? _horizontal : _vertical);
16129  };
16130
16131  ScrollTrigger$2.getById = function (id) {
16132    return _ids[id];
16133  };
16134
16135  ScrollTrigger$2.getAll = function () {
16136    return _triggers.filter(function (t) {
16137      return t.vars.id !== "ScrollSmoother";
16138    });
16139  };
16140
16141  ScrollTrigger$2.isScrolling = function () {
16142    return !!_lastScrollTime;
16143  };
16144
16145  ScrollTrigger$2.snapDirectional = _snapDirectional;
16146
16147  ScrollTrigger$2.addEventListener = function (type, callback) {
16148    var a = _listeners$1[type] || (_listeners$1[type] = []);
16149    ~a.indexOf(callback) || a.push(callback);
16150  };
16151
16152  ScrollTrigger$2.removeEventListener = function (type, callback) {
16153    var a = _listeners$1[type],
16154        i = a && a.indexOf(callback);
16155    i >= 0 && a.splice(i, 1);
16156  };
16157
16158  ScrollTrigger$2.batch = function (targets, vars) {
16159    var result = [],
16160        varsCopy = {},
16161        interval = vars.interval || 0.016,
16162        batchMax = vars.batchMax || 1e9,
16163        proxyCallback = function proxyCallback(type, callback) {
16164      var elements = [],
16165          triggers = [],
16166          delay = gsap$b.delayedCall(interval, function () {
16167        callback(elements, triggers);
16168        elements = [];
16169        triggers = [];
16170      }).pause();
16171      return function (self) {
16172        elements.length || delay.restart(true);
16173        elements.push(self.trigger);
16174        triggers.push(self);
16175        batchMax <= elements.length && delay.progress(1);
16176      };
16177    },
16178        p;
16179
16180    for (p in vars) {
16181      varsCopy[p] = p.substr(0, 2) === "on" && _isFunction$4(vars[p]) && p !== "onRefreshInit" ? proxyCallback(p, vars[p]) : vars[p];
16182    }
16183
16184    if (_isFunction$4(batchMax)) {
16185      batchMax = batchMax();
16186
16187      _addListener$2(ScrollTrigger$2, "refresh", function () {
16188        return batchMax = vars.batchMax();
16189      });
16190    }
16191
16192    _toArray$4(targets).forEach(function (target) {
16193      var config = {};
16194
16195      for (p in varsCopy) {
16196        config[p] = varsCopy[p];
16197      }
16198
16199      config.trigger = target;
16200      result.push(ScrollTrigger$2.create(config));
16201    });
16202
16203    return result;
16204  };
16205
16206  var _clampScrollAndGetDurationMultiplier = function _clampScrollAndGetDurationMultiplier(scrollFunc, current, end, max) {
16207    current > max ? scrollFunc(max) : current < 0 && scrollFunc(0);
16208    return end > max ? (max - current) / (end - current) : end < 0 ? current / (current - end) : 1;
16209  },
16210      _allowNativePanning = function _allowNativePanning(target, direction) {
16211    if (direction === true) {
16212      target.style.removeProperty("touch-action");
16213    } else {
16214      target.style.touchAction = direction === true ? "auto" : direction ? "pan-" + direction + (Observer.isTouch ? " pinch-zoom" : "") : "none";
16215    }
16216
16217    target === _docEl$2 && _allowNativePanning(_body$5, direction);
16218  },
16219      _overflow = {
16220    auto: 1,
16221    scroll: 1
16222  },
16223      _nestedScroll = function _nestedScroll(_ref5) {
16224    var event = _ref5.event,
16225        target = _ref5.target,
16226        axis = _ref5.axis;
16227
16228    var node = (event.changedTouches ? event.changedTouches[0] : event).target,
16229        cache = node._gsap || gsap$b.core.getCache(node),
16230        time = _getTime$2(),
16231        cs;
16232
16233    if (!cache._isScrollT || time - cache._isScrollT > 2000) {
16234      while (node && node !== _body$5 && (node.scrollHeight <= node.clientHeight && node.scrollWidth <= node.clientWidth || !(_overflow[(cs = _getComputedStyle$1(node)).overflowY] || _overflow[cs.overflowX]))) {
16235        node = node.parentNode;
16236      }
16237
16238      cache._isScroll = node && node !== target && !_isViewport$1(node) && (_overflow[(cs = _getComputedStyle$1(node)).overflowY] || _overflow[cs.overflowX]);
16239      cache._isScrollT = time;
16240    }
16241
16242    if (cache._isScroll || axis === "x") {
16243      event.stopPropagation();
16244      event._gsapAllow = true;
16245    }
16246  },
16247      _inputObserver = function _inputObserver(target, type, inputs, nested) {
16248    return Observer.create({
16249      target: target,
16250      capture: true,
16251      debounce: false,
16252      lockAxis: true,
16253      type: type,
16254      onWheel: nested = nested && _nestedScroll,
16255      onPress: nested,
16256      onDrag: nested,
16257      onScroll: nested,
16258      onEnable: function onEnable() {
16259        return inputs && _addListener$2(_doc$6, Observer.eventTypes[0], _captureInputs, false, true);
16260      },
16261      onDisable: function onDisable() {
16262        return _removeListener$2(_doc$6, Observer.eventTypes[0], _captureInputs, true);
16263      }
16264    });
16265  },
16266      _inputExp = /(input|label|select|textarea)/i,
16267      _inputIsFocused,
16268      _captureInputs = function _captureInputs(e) {
16269    var isInput = _inputExp.test(e.target.tagName);
16270
16271    if (isInput || _inputIsFocused) {
16272      e._gsapAllow = true;
16273      _inputIsFocused = isInput;
16274    }
16275  },
16276      _getScrollNormalizer = function _getScrollNormalizer(vars) {
16277    _isObject$2(vars) || (vars = {});
16278    vars.preventDefault = vars.isNormalizer = vars.allowClicks = true;
16279    vars.type || (vars.type = "wheel,touch");
16280    vars.debounce = !!vars.debounce;
16281    vars.id = vars.id || "normalizer";
16282
16283    var _vars2 = vars,
16284        normalizeScrollX = _vars2.normalizeScrollX,
16285        momentum = _vars2.momentum,
16286        allowNestedScroll = _vars2.allowNestedScroll,
16287        onRelease = _vars2.onRelease,
16288        self,
16289        maxY,
16290        target = _getTarget(vars.target) || _docEl$2,
16291        smoother = gsap$b.core.globals().ScrollSmoother,
16292        smootherInstance = smoother && smoother.get(),
16293        content = _fixIOSBug && (vars.content && _getTarget(vars.content) || smootherInstance && vars.content !== false && !smootherInstance.smooth() && smootherInstance.content()),
16294        scrollFuncY = _getScrollFunc(target, _vertical),
16295        scrollFuncX = _getScrollFunc(target, _horizontal),
16296        scale = 1,
16297        initialScale = (Observer.isTouch && _win$6.visualViewport ? _win$6.visualViewport.scale * _win$6.visualViewport.width : _win$6.outerWidth) / _win$6.innerWidth,
16298        wheelRefresh = 0,
16299        resolveMomentumDuration = _isFunction$4(momentum) ? function () {
16300      return momentum(self);
16301    } : function () {
16302      return momentum || 2.8;
16303    },
16304        lastRefreshID,
16305        skipTouchMove,
16306        inputObserver = _inputObserver(target, vars.type, true, allowNestedScroll),
16307        resumeTouchMove = function resumeTouchMove() {
16308      return skipTouchMove = false;
16309    },
16310        scrollClampX = _passThrough$1,
16311        scrollClampY = _passThrough$1,
16312        updateClamps = function updateClamps() {
16313      maxY = _maxScroll(target, _vertical);
16314      scrollClampY = _clamp$2(_fixIOSBug ? 1 : 0, maxY);
16315      normalizeScrollX && (scrollClampX = _clamp$2(0, _maxScroll(target, _horizontal)));
16316      lastRefreshID = _refreshID;
16317    },
16318        removeContentOffset = function removeContentOffset() {
16319      content._gsap.y = _round$5(parseFloat(content._gsap.y) + scrollFuncY.offset) + "px";
16320      content.style.transform = "matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, " + parseFloat(content._gsap.y) + ", 0, 1)";
16321      scrollFuncY.offset = scrollFuncY.cacheID = 0;
16322    },
16323        ignoreDrag = function ignoreDrag() {
16324      if (skipTouchMove) {
16325        requestAnimationFrame(resumeTouchMove);
16326
16327        var offset = _round$5(self.deltaY / 2),
16328            scroll = scrollClampY(scrollFuncY.v - offset);
16329
16330        if (content && scroll !== scrollFuncY.v + scrollFuncY.offset) {
16331          scrollFuncY.offset = scroll - scrollFuncY.v;
16332
16333          var y = _round$5((parseFloat(content && content._gsap.y) || 0) - scrollFuncY.offset);
16334
16335          content.style.transform = "matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, " + y + ", 0, 1)";
16336          content._gsap.y = y + "px";
16337          scrollFuncY.cacheID = exports._scrollers.cache;
16338
16339          _updateAll();
16340        }
16341
16342        return true;
16343      }
16344
16345      scrollFuncY.offset && removeContentOffset();
16346      skipTouchMove = true;
16347    },
16348        tween,
16349        startScrollX,
16350        startScrollY,
16351        onStopDelayedCall,
16352        onResize = function onResize() {
16353      updateClamps();
16354
16355      if (tween.isActive() && tween.vars.scrollY > maxY) {
16356        scrollFuncY() > maxY ? tween.progress(1) && scrollFuncY(maxY) : tween.resetTo("scrollY", maxY);
16357      }
16358    };
16359
16360    content && gsap$b.set(content, {
16361      y: "+=0"
16362    });
16363
16364    vars.ignoreCheck = function (e) {
16365      return _fixIOSBug && e.type === "touchmove" && ignoreDrag() || scale > 1.05 && e.type !== "touchstart" || self.isGesturing || e.touches && e.touches.length > 1;
16366    };
16367
16368    vars.onPress = function () {
16369      skipTouchMove = false;
16370      var prevScale = scale;
16371      scale = _round$5((_win$6.visualViewport && _win$6.visualViewport.scale || 1) / initialScale);
16372      tween.pause();
16373      prevScale !== scale && _allowNativePanning(target, scale > 1.01 ? true : normalizeScrollX ? false : "x");
16374      startScrollX = scrollFuncX();
16375      startScrollY = scrollFuncY();
16376      updateClamps();
16377      lastRefreshID = _refreshID;
16378    };
16379
16380    vars.onRelease = vars.onGestureStart = function (self, wasDragging) {
16381      scrollFuncY.offset && removeContentOffset();
16382
16383      if (!wasDragging) {
16384        onStopDelayedCall.restart(true);
16385      } else {
16386        exports._scrollers.cache++;
16387        var dur = resolveMomentumDuration(),
16388            currentScroll,
16389            endScroll;
16390
16391        if (normalizeScrollX) {
16392          currentScroll = scrollFuncX();
16393          endScroll = currentScroll + dur * 0.05 * -self.velocityX / 0.227;
16394          dur *= _clampScrollAndGetDurationMultiplier(scrollFuncX, currentScroll, endScroll, _maxScroll(target, _horizontal));
16395          tween.vars.scrollX = scrollClampX(endScroll);
16396        }
16397
16398        currentScroll = scrollFuncY();
16399        endScroll = currentScroll + dur * 0.05 * -self.velocityY / 0.227;
16400        dur *= _clampScrollAndGetDurationMultiplier(scrollFuncY, currentScroll, endScroll, _maxScroll(target, _vertical));
16401        tween.vars.scrollY = scrollClampY(endScroll);
16402        tween.invalidate().duration(dur).play(0.01);
16403
16404        if (_fixIOSBug && tween.vars.scrollY >= maxY || currentScroll >= maxY - 1) {
16405          gsap$b.to({}, {
16406            onUpdate: onResize,
16407            duration: dur
16408          });
16409        }
16410      }
16411
16412      onRelease && onRelease(self);
16413    };
16414
16415    vars.onWheel = function () {
16416      tween._ts && tween.pause();
16417
16418      if (_getTime$2() - wheelRefresh > 1000) {
16419        lastRefreshID = 0;
16420        wheelRefresh = _getTime$2();
16421      }
16422    };
16423
16424    vars.onChange = function (self, dx, dy, xArray, yArray) {
16425      _refreshID !== lastRefreshID && updateClamps();
16426      dx && normalizeScrollX && scrollFuncX(scrollClampX(xArray[2] === dx ? startScrollX + (self.startX - self.x) : scrollFuncX() + dx - xArray[1]));
16427
16428      if (dy) {
16429        scrollFuncY.offset && removeContentOffset();
16430        var isTouch = yArray[2] === dy,
16431            y = isTouch ? startScrollY + self.startY - self.y : scrollFuncY() + dy - yArray[1],
16432            yClamped = scrollClampY(y);
16433        isTouch && y !== yClamped && (startScrollY += yClamped - y);
16434        scrollFuncY(yClamped);
16435      }
16436
16437      (dy || dx) && _updateAll();
16438    };
16439
16440    vars.onEnable = function () {
16441      _allowNativePanning(target, normalizeScrollX ? false : "x");
16442
16443      ScrollTrigger$2.addEventListener("refresh", onResize);
16444
16445      _addListener$2(_win$6, "resize", onResize);
16446
16447      if (scrollFuncY.smooth) {
16448        scrollFuncY.target.style.scrollBehavior = "auto";
16449        scrollFuncY.smooth = scrollFuncX.smooth = false;
16450      }
16451
16452      inputObserver.enable();
16453    };
16454
16455    vars.onDisable = function () {
16456      _allowNativePanning(target, true);
16457
16458      _removeListener$2(_win$6, "resize", onResize);
16459
16460      ScrollTrigger$2.removeEventListener("refresh", onResize);
16461      inputObserver.kill();
16462    };
16463
16464    vars.lockAxis = vars.lockAxis !== false;
16465    self = new Observer(vars);
16466    self.iOS = _fixIOSBug;
16467    _fixIOSBug && !scrollFuncY() && scrollFuncY(1);
16468    _fixIOSBug && gsap$b.ticker.add(_passThrough$1);
16469    onStopDelayedCall = self._dc;
16470    tween = gsap$b.to(self, {
16471      ease: "power4",
16472      paused: true,
16473      inherit: false,
16474      scrollX: normalizeScrollX ? "+=0.1" : "+=0",
16475      scrollY: "+=0.1",
16476      modifiers: {
16477        scrollY: _interruptionTracker(scrollFuncY, scrollFuncY(), function () {
16478          return tween.pause();
16479        })
16480      },
16481      onUpdate: _updateAll,
16482      onComplete: onStopDelayedCall.vars.onComplete
16483    });
16484    return self;
16485  };
16486
16487  ScrollTrigger$2.sort = function (func) {
16488    
16488return _triggers.sort(func || function (a, b) {
16489      return (a.vars.refreshPriority || 0) * -1e6 + a.start - (b.start + (b.vars.refreshPriority || 0) * -1e6);
16490    });
16491  };
16492
16493  ScrollTrigger$2.observe = function (vars) {
16494    return new Observer(vars);
16495  };
16496
16497  ScrollTrigger$2.normalizeScroll = function (vars) {
16498    if (typeof vars === "undefined") {
16499      return _normalizer$1;
16500    }
16501
16502    if (vars === true && _normalizer$1) {
16503      return _normalizer$1.enable();
16504    }
16505
16506    if (vars === false) {
16507      _normalizer$1 && _normalizer$1.kill();
16508      _normalizer$1 = vars;
16509      return;
16510    }
16511
16512    var normalizer = vars instanceof Observer ? vars : _getScrollNormalizer(vars);
16513    _normalizer$1 && _normalizer$1.target === normalizer.target && _normalizer$1.kill();
16514    _isViewport$1(normalizer.target) && (_normalizer$1 = normalizer);
16515    return normalizer;
16516  };
16517
16518  ScrollTrigger$2.core = {
16519    _getVelocityProp: _getVelocityProp,
16520    _inputObserver: _inputObserver,
16521    _scrollers: exports._scrollers,
16522    _proxies: exports._proxies,
16523    bridge: {
16524      ss: function ss() {
16525        _lastScrollTime || _dispatch$1("scrollStart");
16526        _lastScrollTime = _getTime$2();
16527      },
16528      ref: function ref() {
16529        return _refreshing;
16530      }
16531    }
16532  };
16533  _getGSAP$9() && gsap$b.registerPlugin(ScrollTrigger$2);
16534
16535  var _trimExp = /(?:^\s+|\s+$)/g;
16536  var emojiExp = /([\uD800-\uDBFF][\uDC00-\uDFFF](?:[\u200D\uFE0F][\uD800-\uDBFF][\uDC00-\uDFFF]){2,}|\uD83D\uDC69(?:\u200D(?:(?:\uD83D\uDC69\u200D)?\uD83D\uDC67|(?:\uD83D\uDC69\u200D)?\uD83D\uDC66)|\uD83C[\uDFFB-\uDFFF])|\uD83D\uDC69\u200D(?:\uD83D\uDC69\u200D)?\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC69\u200D(?:\uD83D\uDC69\u200D)?\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67])|\uD83C\uDFF3\uFE0F\u200D\uD83C\uDF08|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD37-\uDD39\uDD3D\uDD3E\uDDD6-\uDDDD])(?:\uD83C[\uDFFB-\uDFFF])\u200D[\u2640\u2642]\uFE0F|\uD83D\uDC69(?:\uD83C[\uDFFB-\uDFFF])\u200D(?:\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92])|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC6F\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD37-\uDD39\uDD3C-\uDD3E\uDDD6-\uDDDF])\u200D[\u2640\u2642]\uFE0F|\uD83C\uDDFD\uD83C\uDDF0|\uD83C\uDDF6\uD83C\uDDE6|\uD83C\uDDF4\uD83C\uDDF2|\uD83C\uDDE9(?:\uD83C[\uDDEA\uDDEC\uDDEF\uDDF0\uDDF2\uDDF4\uDDFF])|\uD83C\uDDF7(?:\uD83C[\uDDEA\uDDF4\uDDF8\uDDFA\uDDFC])|\uD83C\uDDE8(?:\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDEE\uDDF0-\uDDF5\uDDF7\uDDFA-\uDDFF])|(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)(?:\uFE0F\u200D[\u2640\u2642]|(?:\uD83C[\uDFFB-\uDFFF])\u200D[\u2640\u2642])\uFE0F|(?:\uD83D\uDC41\uFE0F\u200D\uD83D\uDDE8|\uD83D\uDC69(?:\uD83C[\uDFFB-\uDFFF])\u200D[\u2695\u2696\u2708]|\uD83D\uDC69\u200D[\u2695\u2696\u2708]|\uD83D\uDC68(?:(?:\uD83C[\uDFFB-\uDFFF])\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708]))\uFE0F|\uD83C\uDDF2(?:\uD83C[\uDDE6\uDDE8-\uDDED\uDDF0-\uDDFF])|\uD83D\uDC69\u200D(?:\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D(?:\uD83D[\uDC68\uDC69])|\uD83D[\uDC68\uDC69]))|\uD83C\uDDF1(?:\uD83C[\uDDE6-\uDDE8\uDDEE\uDDF0\uDDF7-\uDDFB\uDDFE])|\uD83C\uDDEF(?:\uD83C[\uDDEA\uDDF2\uDDF4\uDDF5])|\uD83C\uDDED(?:\uD83C[\uDDF0\uDDF2\uDDF3\uDDF7\uDDF9\uDDFA])|\uD83C\uDDEB(?:\uD83C[\uDDEE-\uDDF0\uDDF2\uDDF4\uDDF7])|[#\*0-9]\uFE0F\u20E3|\uD83C\uDDE7(?:\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEF\uDDF1-\uDDF4\uDDF6-\uDDF9\uDDFB\uDDFC\uDDFE\uDDFF])|\uD83C\uDDE6(?:\uD83C[\uDDE8-\uDDEC\uDDEE\uDDF1\uDDF2\uDDF4\uDDF6-\uDDFA\uDDFC\uDDFD\uDDFF])|\uD83C\uDDFF(?:\uD83C[\uDDE6\uDDF2\uDDFC])|\uD83C\uDDF5(?:\uD83C[\uDDE6\uDDEA-\uDDED\uDDF0-\uDDF3\uDDF7-\uDDF9\uDDFC\uDDFE])|\uD83C\uDDFB(?:\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDEE\uDDF3\uDDFA])|\uD83C\uDDF3(?:\uD83C[\uDDE6\uDDE8\uDDEA-\uDDEC\uDDEE\uDDF1\uDDF4\uDDF5\uDDF7\uDDFA\uDDFF])|\uD83C\uDFF4\uDB40\uDC67\uDB40\uDC62(?:\uDB40\uDC77\uDB40\uDC6C\uDB40\uDC73|\uDB40\uDC73\uDB40\uDC63\uDB40\uDC74|\uDB40\uDC65\uDB40\uDC6E\uDB40\uDC67)\uDB40\uDC7F|\uD83D\uDC68(?:\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83D\uDC68|(?:(?:\uD83D[\uDC68\uDC69])\u200D)?\uD83D\uDC66\u200D\uD83D\uDC66|(?:(?:\uD83D[\uDC68\uDC69])\u200D)?\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92])|(?:\uD83C[\uDFFB-\uDFFF])\u200D(?:\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]))|\uD83C\uDDF8(?:\uD83C[\uDDE6-\uDDEA\uDDEC-\uDDF4\uDDF7-\uDDF9\uDDFB\uDDFD-\uDDFF])|\uD83C\uDDF0(?:\uD83C[\uDDEA\uDDEC-\uDDEE\uDDF2\uDDF3\uDDF5\uDDF7\uDDFC\uDDFE\uDDFF])|\uD83C\uDDFE(?:\uD83C[\uDDEA\uDDF9])|\uD83C\uDDEE(?:\uD83C[\uDDE8-\uDDEA\uDDF1-\uDDF4\uDDF6-\uDDF9])|\uD83C\uDDF9(?:\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDED\uDDEF-\uDDF4\uDDF7\uDDF9\uDDFB\uDDFC\uDDFF])|\uD83C\uDDEC(?:\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEE\uDDF1-\uDDF3\uDDF5-\uDDFA\uDDFC\uDDFE])|\uD83C\uDDFA(?:\uD83C[\uDDE6\uDDEC\uDDF2\uDDF3\uDDF8\uDDFE\uDDFF])|\uD83C\uDDEA(?:\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDED\uDDF7-\uDDFA])|\uD83C\uDDFC(?:\uD83C[\uDDEB\uDDF8])|(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)(?:\uD83C[\uDFFB-\uDFFF])|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD37-\uDD39\uDD3D\uDD3E\uDDD6-\uDDDD])(?:\uD83C[\uDFFB-\uDFFF])|(?:[\u261D\u270A-\u270D]|\uD83C[\uDF85\uDFC2\uDFC7]|\uD83D[\uDC42\uDC43\uDC46-\uDC50\uDC66\uDC67\uDC70\uDC72\uDC74-\uDC76\uDC78\uDC7C\uDC83\uDC85\uDCAA\uDD74\uDD7A\uDD90\uDD95\uDD96\uDE4C\uDE4F\uDEC0\uDECC]|\uD83E[\uDD18-\uDD1C\uDD1E\uDD1F\uDD30-\uDD36\uDDD1-\uDDD5])(?:\uD83C[\uDFFB-\uDFFF])|\uD83D\uDC68(?:\u200D(?:(?:(?:\uD83D[\uDC68\uDC69])\u200D)?\uD83D\uDC67|(?:(?:\uD83D[\uDC68\uDC69])\u200D)?\uD83D\uDC66)|\uD83C[\uDFFB-\uDFFF])|(?:[\u261D\u26F9\u270A-\u270D]|\uD83C[\uDF85\uDFC2-\uD
vendor: 6,060 bytes, lines 16536-16661
16536FC4\uDFC7\uDFCA-\uDFCC]|\uD83D[\uDC42\uDC43\uDC46-\uDC50\uDC66-\uDC69\uDC6E\uDC70-\uDC78\uDC7C\uDC81-\uDC83\uDC85-\uDC87\uDCAA\uDD74\uDD75\uDD7A\uDD90\uDD95\uDD96\uDE45-\uDE47\uDE4B-\uDE4F\uDEA3\uDEB4-\uDEB6\uDEC0\uDECC]|\uD83E[\uDD18-\uDD1C\uDD1E\uDD1F\uDD26\uDD30-\uDD39\uDD3D\uDD3E\uDDD1-\uDDDD])(?:\uD83C[\uDFFB-\uDFFF])?|(?:[\u231A\u231B\u23E9-\u23EC\u23F0\u23F3\u25FD\u25FE\u2614\u2615\u2648-\u2653\u267F\u2693\u26A1\u26AA\u26AB\u26BD\u26BE\u26C4\u26C5\u26CE\u26D4\u26EA\u26F2\u26F3\u26F5\u26FA\u26FD\u2705\u270A\u270B\u2728\u274C\u274E\u2753-\u2755\u2757\u2795-\u2797\u27B0\u27BF\u2B1B\u2B1C\u2B50\u2B55]|\uD83C[\uDC04\uDCCF\uDD8E\uDD91-\uDD9A\uDDE6-\uDDFF\uDE01\uDE1A\uDE2F\uDE32-\uDE36\uDE38-\uDE3A\uDE50\uDE51\uDF00-\uDF20\uDF2D-\uDF35\uDF37-\uDF7C\uDF7E-\uDF93\uDFA0-\uDFCA\uDFCF-\uDFD3\uDFE0-\uDFF0\uDFF4\uDFF8-\uDFFF]|\uD83D[\uDC00-\uDC3E\uDC40\uDC42-\uDCFC\uDCFF-\uDD3D\uDD4B-\uDD4E\uDD50-\uDD67\uDD7A\uDD95\uDD96\uDDA4\uDDFB-\uDE4F\uDE80-\uDEC5\uDECC\uDED0-\uDED2\uDEEB\uDEEC\uDEF4-\uDEF8]|\uD83E[\uDD10-\uDD3A\uDD3C-\uDD3E\uDD40-\uDD45\uDD47-\uDD4C\uDD50-\uDD6B\uDD80-\uDD97\uDDC0\uDDD0-\uDDE6])|(?:[#\*0-9\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u231A\u231B\u2328\u23CF\u23E9-\u23F3\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB-\u25FE\u2600-\u2604\u260E\u2611\u2614\u2615\u2618\u261D\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u2648-\u2653\u2660\u2663\u2665\u2666\u2668\u267B\u267F\u2692-\u2697\u2699\u269B\u269C\u26A0\u26A1\u26AA\u26AB\u26B0\u26B1\u26BD\u26BE\u26C4\u26C5\u26C8\u26CE\u26CF\u26D1\u26D3\u26D4\u26E9\u26EA\u26F0-\u26F5\u26F7-\u26FA\u26FD\u2702\u2705\u2708-\u270D\u270F\u2712\u2714\u2716\u271D\u2721\u2728\u2733\u2734\u2744\u2747\u274C\u274E\u2753-\u2755\u2757\u2763\u2764\u2795-\u2797\u27A1\u27B0\u27BF\u2934\u2935\u2B05-\u2B07\u2B1B\u2B1C\u2B50\u2B55\u3030\u303D\u3297\u3299]|\uD83C[\uDC04\uDCCF\uDD70\uDD71\uDD7E\uDD7F\uDD8E\uDD91-\uDD9A\uDDE6-\uDDFF\uDE01\uDE02\uDE1A\uDE2F\uDE32-\uDE3A\uDE50\uDE51\uDF00-\uDF21\uDF24-\uDF93\uDF96\uDF97\uDF99-\uDF9B\uDF9E-\uDFF0\uDFF3-\uDFF5\uDFF7-\uDFFF]|\uD83D[\uDC00-\uDCFD\uDCFF-\uDD3D\uDD49-\uDD4E\uDD50-\uDD67\uDD6F\uDD70\uDD73-\uDD7A\uDD87\uDD8A-\uDD8D\uDD90\uDD95\uDD96\uDDA4\uDDA5\uDDA8\uDDB1\uDDB2\uDDBC\uDDC2-\uDDC4\uDDD1-\uDDD3\uDDDC-\uDDDE\uDDE1\uDDE3\uDDE8\uDDEF\uDDF3\uDDFA-\uDE4F\uDE80-\uDEC5\uDECB-\uDED2\uDEE0-\uDEE5\uDEE9\uDEEB\uDEEC\uDEF0\uDEF3-\uDEF8]|\uD83E[\uDD10-\uDD3A\uDD3C-\uDD3E\uDD40-\uDD45\uDD47-\uDD4C\uDD50-\uDD6B\uDD80-\uDD97\uDDC0\uDDD0-\uDDE6])\uFE0F)/;
16537  function getText(e) {
16538    var type = e.nodeType,
16539        result = "";
16540
16541    if (type === 1 || type === 9 || type === 11) {
16542      if (typeof e.textContent === "string") {
16543        return e.textContent;
16544      } else {
16545        for (e = e.firstChild; e; e = e.nextSibling) {
16546          result += getText(e);
16547        }
16548      }
16549    } else if (type === 3 || type === 4) {
16550      return e.nodeValue;
16551    }
16552
16553    return result;
16554  }
16555  function splitInnerHTML(element, delimiter, trim, preserveSpaces) {
16556    var node = element.firstChild,
16557        result = [],
16558        s;
16559
16560    while (node) {
16561      if (node.nodeType === 3) {
16562        s = (node.nodeValue + "").replace(/^\n+/g, "");
16563
16564        if (!preserveSpaces) {
16565          s = s.replace(/\s+/g, " ");
16566        }
16567
16568        result.push.apply(result, emojiSafeSplit(s, delimiter, trim, preserveSpaces));
16569      } else if ((node.nodeName + "").toLowerCase() === "br") {
16570        result[result.length - 1] += "<br>";
16571      } else {
16572        result.push(node.outerHTML);
16573      }
16574
16575      node = node.nextSibling;
16576    }
16577
16578    s = result.length;
16579
16580    while (s--) {
16581      result[s] === "&" && result.splice(s, 1, "&amp;");
16582    }
16583
16584    return result;
16585  }
16586  function emojiSafeSplit(text, delimiter, trim, preserveSpaces) {
16587    text += "";
16588    trim && (text = text.trim ? text.trim() : text.replace(_trimExp, ""));
16589
16590    if (delimiter && delimiter !== "") {
16591      return text.replace(/>/g, "&gt;").replace(/</g, "&lt;").split(delimiter);
16592    }
16593
16594    var result = [],
16595        l = text.length,
16596        i = 0,
16597        j,
16598        character;
16599
16600    for (; i < l; i++) {
16601      character = text.charAt(i);
16602
16603      if (character.charCodeAt(0) >= 0xD800 && character.charCodeAt(0) <= 0xDBFF || text.charCodeAt(i + 1) >= 0xFE00 && text.charCodeAt(i + 1) <= 0xFE0F) {
16604        j = ((text.substr(i, 12).split(emojiExp) || [])[1] || "").length || 2;
16605        character = text.substr(i, j);
16606        result.emoji = 1;
16607        i += j - 1;
16608      }
16609
16610      result.push(character === ">" ? "&gt;" : character === "<" ? "&lt;" : preserveSpaces && character === " " && (text.charAt(i - 1) === " " || text.charAt(i + 1) === " ") ? "&nbsp;" : character);
16611    }
16612
16613    return result;
16614  }
16615
16616  /*!
16617   * TextPlugin 3.12.5
16618   * https://gsap.com
16619   *
16620   * @license Copyright 2008-2024, GreenSock. All rights reserved.
16621   * Subject to the terms at https://gsap.com/standard-license or for
16622   * Club GSAP members, the agreement issued with that membership.
16623   * @author: Jack Doyle, [email protected]
16624  */
16625
16626  var gsap$c,
16627      _tempDiv$2,
16628      _getGSAP$a = function _getGSAP() {
16629    return gsap$c || typeof window !== "undefined" && (gsap$c = window.gsap) && gsap$c.registerPlugin && gsap$c;
16630  };
16631
16632  var TextPlugin = {
16633    version: "3.12.5",
16634    name: "text",
16635    init: function init(target, value, tween) {
16636      typeof value !== "object" && (value = {
16637        value: value
16638      });
16639
16640      var i = target.nodeName.toUpperCase(),
16641          data = this,
16642          _value = value,
16643          newClass = _value.newClass,
16644          oldClass = _value.oldClass,
16645          preserveSpaces = _value.preserveSpaces,
16646          rtl = _value.rtl,
16647          delimiter = data.delimiter = value.delimiter || "",
16648          fillChar = data.fillChar = value.fillChar || (value.padSpace ? "&nbsp;" : ""),
16649          _short,
16650          text,
16651          original,
16652          j,
16653          condensedText,
16654          condensedOriginal,
16655          aggregate,
16656          s;
16657
16658      data.svg = target.getBBox && (i === "TEXT" || i === "TSPAN");
16659
16660      if (!("innerHTML" in target) && !data.svg) {
16661        return false;
vendor: 3,527 bytes, lines 16662-16783
16662      }
16663
16664      data.target = target;
16665
16666      if (!("value" in value)) {
16667        data.text = data.original = [""];
16668        return;
16669      }
16670
16671      original = splitInnerHTML(target, delimiter, false, preserveSpaces);
16672      _tempDiv$2 || (_tempDiv$2 = document.createElement("div"));
16673      _tempDiv$2.innerHTML = value.value;
16674      text = splitInnerHTML(_tempDiv$2, delimiter, false, preserveSpaces);
16675      data.from = tween._from;
16676
16677      if ((data.from || rtl) && !(rtl && data.from)) {
16678        i = original;
16679        original = text;
16680        text = i;
16681      }
16682
16683      data.hasClass = !!(newClass || oldClass);
16684      data.newClass = rtl ? oldClass : newClass;
16685      data.oldClass = rtl ? newClass : oldClass;
16686      i = original.length - text.length;
16687      _short = i < 0 ? original : text;
16688
16689      if (i < 0) {
16690        i = -i;
16691      }
16692
16693      while (--i > -1) {
16694        _short.push(fillChar);
16695      }
16696
16697      if (value.type === "diff") {
16698        j = 0;
16699        condensedText = [];
16700        condensedOriginal = [];
16701        aggregate = "";
16702
16703        for (i = 0; i < text.length; i++) {
16704          s = text[i];
16705
16706          if (s === original[i]) {
16707            aggregate += s;
16708          } else {
16709            condensedText[j] = aggregate + s;
16710            condensedOriginal[j++] = aggregate + original[i];
16711            aggregate = "";
16712          }
16713        }
16714
16715        text = condensedText;
16716        original = condensedOriginal;
16717
16718        if (aggregate) {
16719          text.push(aggregate);
16720          original.push(aggregate);
16721        }
16722      }
16723
16724      value.speed && tween.duration(Math.min(0.05 / value.speed * _short.length, value.maxDuration || 9999));
16725      data.rtl = rtl;
16726      data.original = original;
16727      data.text = text;
16728
16729      data._props.push("text");
16730    },
16731    render: function render(ratio, data) {
16732      if (ratio > 1) {
16733        ratio = 1;
16734      } else if (ratio < 0) {
16735        ratio = 0;
16736      }
16737
16738      if (data.from) {
16739        ratio = 1 - ratio;
16740      }
16741
16742      var text = data.text,
16743          hasClass = data.hasClass,
16744          newClass = data.newClass,
16745          oldClass = data.oldClass,
16746          delimiter = data.delimiter,
16747          target = data.target,
16748          fillChar = data.fillChar,
16749          original = data.original,
16750          rtl = data.rtl,
16751          l = text.length,
16752          i = (rtl ? 1 - ratio : ratio) * l + 0.5 | 0,
16753          applyNew,
16754          applyOld,
16755          str;
16756
16757      if (hasClass && ratio) {
16758        applyNew = newClass && i;
16759        applyOld = oldClass && i !== l;
16760        str = (applyNew ? "<span class='" + newClass + "'>" : "") + text.slice(0, i).join(delimiter) + (applyNew ? "</span>" : "") + (applyOld ? "<span class='" + oldClass + "'>" : "") + delimiter + original.slice(i).join(delimiter) + (applyOld ? "</span>" : "");
16761      } else {
16762        str = text.slice(0, i).join(delimiter) + delimiter + original.slice(i).join(delimiter);
16763      }
16764
16765      if (data.svg) {
16766        target.textContent = str;
16767      } else {
16768        target.innerHTML = fillChar === "&nbsp;" && ~str.indexOf("  ") ? str.split("  ").join("&nbsp;&nbsp;") : str;
16769      }
16770    }
16771  };
16772  TextPlugin.splitInnerHTML = splitInnerHTML;
16773  TextPlugin.emojiSafeSplit = emojiSafeSplit;
16774  TextPlugin.getText = getText;
16775  _getGSAP$a() && gsap$c.registerPlugin(TextPlugin);
16776
16777  /*!
16778   * DrawSVGPlugin 3.12.5
16779   * https://gsap.com
16780   *
16781   * @license Copyright 2008-2024, GreenSock. All rights reserved.
16782   * Subject to the terms at https://gsap.com/standard-license or for
16783   * Club GSAP members, the agreement issued with that membership.
vendor: 5,669 bytes, lines 16783-16968
16783
16784   * @author: Jack Doyle, [email protected]
16785  */
16786  var gsap$d,
16787      _toArray$5,
16788      _win$7,
16789      _isEdge,
16790      _coreInitted$9,
16791      _warned,
16792      _getStyleSaver$4,
16793      _reverting$3,
16794      _windowExists$8 = function _windowExists() {
16795    return typeof window !== "undefined";
16796  },
16797      _getGSAP$b = function _getGSAP() {
16798    return gsap$d || _windowExists$8() && (gsap$d = window.gsap) && gsap$d.registerPlugin && gsap$d;
16799  },
16800      _numExp$3 = /[-+=\.]*\d+[\.e\-\+]*\d*[e\-\+]*\d*/gi,
16801      _types = {
16802    rect: ["width", "height"],
16803    circle: ["r", "r"],
16804    ellipse: ["rx", "ry"],
16805    line: ["x2", "y2"]
16806  },
16807      _round$6 = function _round(value) {
16808    return Math.round(value * 10000) / 10000;
16809  },
16810      _parseNum = function _parseNum(value) {
16811    return parseFloat(value) || 0;
16812  },
16813      _parseSingleVal = function _parseSingleVal(value, length) {
16814    var num = _parseNum(value);
16815
16816    return ~value.indexOf("%") ? num / 100 * length : num;
16817  },
16818      _getAttributeAsNumber = function _getAttributeAsNumber(target, attr) {
16819    return _parseNum(target.getAttribute(attr));
16820  },
16821      _sqrt$2 = Math.sqrt,
16822      _getDistance = function _getDistance(x1, y1, x2, y2, scaleX, scaleY) {
16823    return _sqrt$2(Math.pow((_parseNum(x2) - _parseNum(x1)) * scaleX, 2) + Math.pow((_parseNum(y2) - _parseNum(y1)) * scaleY, 2));
16824  },
16825      _warn$3 = function _warn(message) {
16826    return console.warn(message);
16827  },
16828      _hasNonScalingStroke = function _hasNonScalingStroke(target) {
16829    return target.getAttribute("vector-effect") === "non-scaling-stroke";
16830  },
16831      _bonusValidated = 1,
16832      _parse = function _parse(value, length, defaultStart) {
16833    var i = value.indexOf(" "),
16834        s,
16835        e;
16836
16837    if (i < 0) {
16838      s = defaultStart !== undefined ? defaultStart + "" : value;
16839      e = value;
16840    } else {
16841      s = value.substr(0, i);
16842      e = value.substr(i + 1);
16843    }
16844
16845    s = _parseSingleVal(s, length);
16846    e = _parseSingleVal(e, length);
16847    return s > e ? [e, s] : [s, e];
16848  },
16849      _getLength = function _getLength(target) {
16850    target = _toArray$5(target)[0];
16851
16852    if (!target) {
16853      return 0;
16854    }
16855
16856    var type = target.tagName.toLowerCase(),
16857        style = target.style,
16858        scaleX = 1,
16859        scaleY = 1,
16860        length,
16861        bbox,
16862        points,
16863        prevPoint,
16864        i,
16865        rx,
16866        ry;
16867
16868    if (_hasNonScalingStroke(target)) {
16869      scaleY = target.getScreenCTM();
16870      scaleX = _sqrt$2(scaleY.a * scaleY.a + scaleY.b * scaleY.b);
16871      scaleY = _sqrt$2(scaleY.d * scaleY.d + scaleY.c * scaleY.c);
16872    }
16873
16874    try {
16875      bbox = target.getBBox();
16876    } catch (e) {
16877      _warn$3("Some browsers won't measure invisible elements (like display:none or masks inside defs).");
16878    }
16879
16880    var _ref = bbox || {
16881      x: 0,
16882      y: 0,
16883      width: 0,
16884      height: 0
16885    },
16886        x = _ref.x,
16887        y = _ref.y,
16888        width = _ref.width,
16889        height = _ref.height;
16890
16891    if ((!bbox || !width && !height) && _types[type]) {
16892      width = _getAttributeAsNumber(target, _types[type][0]);
16893      height = _getAttributeAsNumber(target, _types[type][1]);
16894
16895      if (type !== "rect" && type !== "line") {
16896        width *= 2;
16897        height *= 2;
16898      }
16899
16900      if (type === "line") {
16901        x = _getAttributeAsNumber(target, "x1");
16902        y = _getAttributeAsNumber(target, "y1");
16903        width = Math.abs(width - x);
16904        height = Math.abs(height - y);
16905      }
16906    }
16907
16908    if (type === "path") {
16909      prevPoint = style.strokeDasharray;
16910      style.strokeDasharray = "none";
16911      length = target.getTotalLength() || 0;
16912      _round$6(scaleX) !== _round$6(scaleY) && !_warned && (_warned = 1) && _warn$3("Warning: <path> length cannot be measured when vector-effect is non-scaling-stroke and the element isn't proportionally scaled.");
16913      length *= (scaleX + scaleY) / 2;
16914      style.strokeDasharray = prevPoint;
16915    } else if (type === "rect") {
16916      length = width * 2 * scaleX + height * 2 * scaleY;
16917    } else if (type === "line") {
16918      length = _getDistance(x, y, x + width, y + height, scaleX, scaleY);
16919    } else if (type === "polyline" || type === "polygon") {
16920      points = target.getAttribute("points").match(_numExp$3) || [];
16921      type === "polygon" && points.push(points[0], points[1]);
16922      length = 0;
16923
16924      for (i = 2; i < points.length; i += 2) {
16925        length += _getDistance(points[i - 2], points[i - 1], points[i], points[i + 1], scaleX, scaleY) || 0;
16926      }
16927    } else if (type === "circle" || type === "ellipse") {
16928      rx = width / 2 * scaleX;
16929      ry = height / 2 * scaleY;
16930      length = Math.PI * (3 * (rx + ry) - _sqrt$2((3 * rx + ry) * (rx + 3 * ry)));
16931    }
16932
16933    return length || 0;
16934  },
16935      _getPosition = function _getPosition(target, length) {
16936    target = _toArray$5(target)[0];
16937
16938    if (!target) {
16939      return [0, 0];
16940    }
16941
16942    length || (length = _getLength(target) + 1);
16943
16944    var cs = _win$7.getComputedStyle(target),
16945        dash = cs.strokeDasharray || "",
16946        offset = _parseNum(cs.strokeDashoffset),
16947        i = dash.indexOf(",");
16948
16949    i < 0 && (i = dash.indexOf(" "));
16950    dash = i < 0 ? length : _parseNum(dash.substr(0, i));
16951    dash > length && (dash = length);
16952    return [-offset || 0, dash - offset || 0];
16953  },
16954      _initCore$9 = function _initCore() {
16955    if (_windowExists$8()) {
16956      _win$7 = window;
16957      _coreInitted$9 = gsap$d = _getGSAP$b();
16958      _toArray$5 = gsap$d.utils.toArray;
16959      _getStyleSaver$4 = gsap$d.core.getStyleSaver;
16960
16961      _reverting$3 = gsap$d.core.reverting || function () {};
16962
16963      _isEdge = ((_win$7.navigator || {}).userAgent || "").indexOf("Edge") !== -1;
16964    }
16965  };
16966
16967  var DrawSVGPlugin = {
16968    version: "3.1
vendor: 34,737 bytes, lines 16968-18122
169682.5",
16969    name: "drawSVG",
16970    register: function register(core) {
16971      gsap$d = core;
16972
16973      _initCore$9();
16974    },
16975    init: function init(target, value, tween, index, targets) {
16976      if (!target.getBBox) {
16977        return false;
16978      }
16979
16980      _coreInitted$9 || _initCore$9();
16981
16982      var length = _getLength(target),
16983          start,
16984          end,
16985          cs;
16986
16987      this.styles = _getStyleSaver$4 && _getStyleSaver$4(target, "strokeDashoffset,strokeDasharray,strokeMiterlimit");
16988      this.tween = tween;
16989      this._style = target.style;
16990      this._target = target;
16991
16992      if (value + "" === "true") {
16993        value = "0 100%";
16994      } else if (!value) {
16995        value = "0 0";
16996      } else if ((value + "").indexOf(" ") === -1) {
16997        value = "0 " + value;
16998      }
16999
17000      start = _getPosition(target, length);
17001      end = _parse(value, length, start[0]);
17002      this._length = _round$6(length);
17003      this._dash = _round$6(start[1] - start[0]);
17004      this._offset = _round$6(-start[0]);
17005      this._dashPT = this.add(this, "_dash", this._dash, _round$6(end[1] - end[0]), 0, 0, 0, 0, 0, 1);
17006      this._offsetPT = this.add(this, "_offset", this._offset, _round$6(-end[0]), 0, 0, 0, 0, 0, 1);
17007
17008      if (_isEdge) {
17009        cs = _win$7.getComputedStyle(target);
17010
17011        if (cs.strokeLinecap !== cs.strokeLinejoin) {
17012          end = _parseNum(cs.strokeMiterlimit);
17013          this.add(target.style, "strokeMiterlimit", end, end + 0.01);
17014        }
17015      }
17016
17017      this._live = _hasNonScalingStroke(target) || ~(value + "").indexOf("live");
17018      this._nowrap = ~(value + "").indexOf("nowrap");
17019
17020      this._props.push("drawSVG");
17021
17022      return _bonusValidated;
17023    },
17024    render: function render(ratio, data) {
17025      if (data.tween._time || !_reverting$3()) {
17026        var pt = data._pt,
17027            style = data._style,
17028            length,
17029            lengthRatio,
17030            dash,
17031            offset;
17032
17033        if (pt) {
17034          if (data._live) {
17035            length = _getLength(data._target);
17036
17037            if (length !== data._length) {
17038              lengthRatio = length / data._length;
17039              data._length = length;
17040
17041              if (data._offsetPT) {
17042                data._offsetPT.s *= lengthRatio;
17043                data._offsetPT.c *= lengthRatio;
17044              }
17045
17046              if (data._dashPT) {
17047                data._dashPT.s *= lengthRatio;
17048                data._dashPT.c *= lengthRatio;
17049              } else {
17050                data._dash *= lengthRatio;
17051              }
17052            }
17053          }
17054
17055          while (pt) {
17056            pt.r(ratio, pt.d);
17057            pt = pt._next;
17058          }
17059
17060          dash = data._dash || ratio && ratio !== 1 && 0.0001 || 0;
17061          length = data._length - dash + 0.1;
17062          offset = data._offset;
17063          dash && offset && dash + Math.abs(offset % data._length) > data._length - 0.2 && (offset += offset < 0 ? 0.1 : -0.1) && (length += 0.1);
17064          style.strokeDashoffset = dash ? offset : offset + 0.001;
17065          style.strokeDasharray = length < 0.2 ? "none" : dash ? dash + "px," + (data._nowrap ? 999999 : length) + "px" : "0px, 999999px";
17066        }
17067      } else {
17068        data.styles.revert();
17069      }
17070    },
17071    getLength: _getLength,
17072    getPosition: _getPosition
17073  };
17074  _getGSAP$b() && gsap$d.registerPlugin(DrawSVGPlugin);
17075
17076  /*!
17077   * Physics2DPlugin 3.12.5
17078   * https://gsap.com
17079   *
17080   * @license Copyright 2008-2024, GreenSock. All rights reserved.
17081   * Subject to the terms at https://gsap.com/standard-license or for
17082   * Club GSAP members, the agreement issued with that membership.
17083   * @author: Jack Doyle, [email protected]
17084  */
17085  var gsap$e,
17086      _coreInitted$a,
17087      _getUnit$1,
17088      _getStyleSaver$5,
17089      _reverting$4,
17090      _DEG2RAD$5 = Math.PI / 180,
17091      _getGSAP$c = function _getGSAP() {
17092    return gsap$e || typeof window !== "undefined" && (gsap$e = window.gsap) && gsap$e.registerPlugin && gsap$e;
17093  },
17094      _round$7 = function _round(value) {
17095    return Math.round(value * 10000) / 10000;
17096  },
17097      _initCore$a = function _initCore(core) {
17098    gsap$e = core || _getGSAP$c();
17099
17100    if (!_coreInitted$a) {
17101      _getUnit$1 = gsap$e.utils.getUnit;
17102      _getStyleSaver$5 = gsap$e.core.getStyleSaver;
17103
17104      _reverting$4 = gsap$e.core.reverting || function () {};
17105
17106      _coreInitted$a = 1;
17107    }
17108  };
17109
17110  var PhysicsProp = function PhysicsProp(target, p, velocity, acceleration, stepsPerTimeUnit) {
17111    var cache = target._gsap,
17112        curVal = cache.get(target, p);
17113    this.p = p;
17114    this.set = cache.set(target, p);
17115    this.s = this.val = parseFloat(curVal);
17116    this.u = _getUnit$1(curVal) || 0;
17117    this.vel = velocity || 0;
17118    this.v = this.vel / stepsPerTimeUnit;
17119
17120    if (acceleration || acceleration === 0) {
17121      this.acc = acceleration;
17122      this.a = this.acc / (stepsPerTimeUnit * stepsPerTimeUnit);
17123    } else {
17124      this.acc = this.a = 0;
17125    }
17126  };
17127
17128  var Physics2DPlugin = {
17129    version: "3.12.5",
17130    name: "physics2D",
17131    register: _initCore$a,
17132    init: function init(target, value, tween) {
17133      _coreInitted$a || _initCore$a();
17134      var data = this,
17135          angle = +value.angle || 0,
17136          velocity = +value.velocity || 0,
17137          acceleration = +value.acceleration || 0,
17138          xProp = value.xProp || "x",
17139          yProp = value.yProp || "y",
17140          aAngle = value.accelerationAngle || value.accelerationAngle === 0 ? +value.accelerationAngle : angle;
17141      data.styles = _getStyleSaver$5 && _getStyleSaver$5(target, value.xProp && value.xProp !== "x" ? value.xProp + "," + value.yProp : "transform");
17142      data.target = target;
17143      data.tween = tween;
17144      data.step = 0;
17145      data.sps = 30;
17146
17147      if (value.gravity) {
17148        acceleration = +value.gravity;
17149        aAngle = 90;
17150      }
17151
17152      angle *= _DEG2RAD$5;
17153      aAngle *= _DEG2RAD$5;
17154      data.fr = 1 - (+value.friction || 0);
17155
17156      data._props.push(xProp, yProp);
17157
17158      data.xp = new PhysicsProp(target, xProp, Math.cos(angle) * velocity, Math.cos(aAngle) * acceleration, data.sps);
17159      data.yp = new PhysicsProp(target, yProp, Math.sin(angle) * velocity, Math.sin(aAngle) * acceleration, data.sps);
17160      data.skipX = data.skipY = 0;
17161    },
17162    render: function render(ratio, data) {
17163      var xp = data.xp,
17164          yp = data.yp,
17165          tween = data.tween,
17166          target = data.target,
17167          step = data.step,
17168          sps = data.sps,
17169          fr = data.fr,
17170          skipX = data.skipX,
17171          skipY = data.skipY,
17172          time = tween._from ? tween._dur - tween._time : tween._time,
17173          x,
17174          y,
17175          tt,
17176          steps,
17177          remainder,
17178          i;
17179
17180      if (tween._time || !_reverting$4()) {
17181        if (fr === 1) {
17182          tt = time * time * 0.5;
17183          x = xp.s + xp.vel * time + xp.acc * tt;
17184          y = yp.s + yp.vel * time + yp.acc * tt;
17185        } else {
17186          time *= sps;
17187          steps = i = (time | 0) - step;
17188
17189          if (i < 0) {
17190            xp.v = xp.vel / sps;
17191            yp.v = yp.vel / sps;
17192            xp.val = xp.s;
17193            yp.val = yp.s;
17194            data.step = 0;
17195            steps = i = time | 0;
17196          }
17197
17198          remainder = time % 1 * fr;
17199
17200          while (i--) {
17201            xp.v += xp.a;
17202            yp.v += yp.a;
17203            xp.v *= fr;
17204            yp.v *= fr;
17205            xp.val += xp.v;
17206            yp.val += yp.v;
17207          }
17208
17209          x = xp.val + xp.v * remainder;
17210          y = yp.val + yp.v * remainder;
17211          data.step += steps;
17212        }
17213
17214        skipX || xp.set(target, xp.p, _round$7(x) + xp.u);
17215        skipY || yp.set(target, yp.p, _round$7(y) + yp.u);
17216      } else {
17217        data.styles.revert();
17218      }
17219    },
17220    kill: function kill(property) {
17221      if (this.xp.p === property) {
17222        this.skipX = 1;
17223      }
17224
17225      if (this.yp.p === property) {
17226        this.skipY = 1;
17227      }
17228    }
17229  };
17230  _getGSAP$c() && gsap$e.registerPlugin(Physics2DPlugin);
17231
17232  /*!
17233   * PhysicsPropsPlugin 3.12.5
17234   * https://gsap.com
17235   *
17236   * @license Copyright 2008-2024, GreenSock. All rights reserved.
17237   * Subject to the terms at https://gsap.com/standard-license or for
17238   * Club GSAP members, the agreement issued with that membership.
17239   * @author: Jack Doyle, [email protected]
17240  */
17241  var gsap$f,
17242      _coreInitted$b,
17243      _getUnit$2,
17244      _getStyleSaver$6,
17245      _reverting$5,
17246      _getGSAP$d = function _getGSAP() {
17247    return gsap$f || typeof window !== "undefined" && (gsap$f = window.gsap) && gsap$f.registerPlugin && gsap$f;
17248  },
17249      _round$8 = function _round(value) {
17250    return Math.round(value * 10000) / 10000;
17251  },
17252      _initCore$b = function _initCore(core) {
17253    gsap$f = core || _getGSAP$d();
17254
17255    if (!_coreInitted$b) {
17256      _getUnit$2 = gsap$f.utils.getUnit;
17257      _getStyleSaver$6 = gsap$f.core.getStyleSaver;
17258
17259      _reverting$5 = gsap$f.core.reverting || function () {};
17260
17261      _coreInitted$b = 1;
17262    }
17263  };
17264
17265  var PhysicsProp$1 = function PhysicsProp(target, p, velocity, acceleration, friction, stepsPerTimeUnit) {
17266    var cache = target._gsap,
17267        curVal = cache.get(target, p);
17268    this.p = p;
17269    this.set = cache.set(target, p);
17270    this.s = this.val = parseFloat(curVal);
17271    this.u = _getUnit$2(curVal) || 0;
17272    this.vel = velocity || 0;
17273    this.v = this.vel / stepsPerTimeUnit;
17274
17275    if (acceleration || acceleration === 0) {
17276      this.acc = acceleration;
17277      this.a = this.acc / (stepsPerTimeUnit * stepsPerTimeUnit);
17278    } else {
17279      this.acc = this.a = 0;
17280    }
17281
17282    this.fr = 1 - (friction || 0);
17283  };
17284
17285  var PhysicsPropsPlugin = {
17286    version: "3.12.5",
17287    name: "physicsProps",
17288    register: _initCore$b,
17289    init: function init(target, value, tween) {
17290      _coreInitted$b || _initCore$b();
17291      var data = this,
17292          p;
17293      data.styles = _getStyleSaver$6 && _getStyleSaver$6(target);
17294      data.target = target;
17295      data.tween = tween;
17296      data.step = 0;
17297      data.sps = 30;
17298      data.vProps = [];
17299
17300      for (p in value) {
17301        var _value$p = value[p],
17302            velocity = _value$p.velocity,
17303            acceleration = _value$p.acceleration,
17304            friction = _value$p.friction;
17305
17306        if (velocity || acceleration) {
17307          data.vProps.push(new PhysicsProp$1(target, p, velocity, acceleration, friction, data.sps));
17308
17309          data._props.push(p);
17310
17311          _getStyleSaver$6 && data.styles.save(p);
17312          friction && (data.hasFr = 1);
17313        }
17314      }
17315    },
17316    render: function render(ratio, data) {
17317      var vProps = data.vProps,
17318          tween = data.tween,
17319          target = data.target,
17320          step = data.step,
17321          hasFr = data.hasFr,
17322          sps = data.sps,
17323          i = vProps.length,
17324          time = tween._from ? tween._dur - tween._time : tween._time,
17325          curProp,
17326          steps,
17327          remainder,
17328          j,
17329          tt;
17330
17331      if (tween._time || !_reverting$5()) {
17332        if (hasFr) {
17333          time *= sps;
17334          steps = (time | 0) - step;
17335
17336          if (steps < 0) {
17337            while (i--) {
17338              curProp = vProps[i];
17339              curProp.v = curProp.vel / sps;
17340              curProp.val = curProp.s;
17341            }
17342
17343            i = vProps.length;
17344            data.step = step = 0;
17345            steps = time | 0;
17346          }
17347
17348          remainder = time % 1;
17349
17350          while (i--) {
17351            curProp = vProps[i];
17352            j = steps;
17353
17354            while (j--) {
17355              curProp.v += curProp.a;
17356              curProp.v *= curProp.fr;
17357              curProp.val += curProp.v;
17358            }
17359
17360            curProp.set(target, curProp.p, _round$8(curProp.val + curProp.v * remainder * curProp.fr) + curProp.u);
17361          }
17362
17363          data.step += steps;
17364        } else {
17365          tt = time * time * 0.5;
17366
17367          while (i--) {
17368            curProp = vProps[i];
17369            curProp.set(target, curProp.p, _round$8(curProp.s + curProp.vel * time + curProp.acc * tt) + curProp.u);
17370          }
17371        }
17372      } else {
17373        data.styles.revert();
17374      }
17375    },
17376    kill: function kill(property) {
17377      var vProps = this.vProps,
17378          i = vProps.length;
17379
17380      while (i--) {
17381        vProps[i].p === property && vProps.splice(i, 1);
17382      }
17383    }
17384  };
17385  _getGSAP$d() && gsap$f.registerPlugin(PhysicsPropsPlugin);
17386
17387  /*!
17388   * ScrambleTextPlugin 3.12.5
17389   * https://gsap.com
17390   *
17391   * @license Copyright 2008-2024, GreenSock. All rights reserved.
17392   * Subject to the terms at https://gsap.com/standard-license or for
17393   * Club GSAP members, the agreement issued with that membership.
17394   * @author: Jack Doyle, [email protected]
17395  */
17396
17397  var CharSet = function () {
17398    function CharSet(chars) {
17399      this.chars = emojiSafeSplit(chars);
17400      this.sets = [];
17401      this.length = 50;
17402
17403      for (var i = 0; i < 20; i++) {
17404        this.sets[i] = _scrambleText(80, this.chars);
17405      }
17406    }
17407
17408    var _proto = CharSet.prototype;
17409
17410    _proto.grow = function grow(newLength) {
17411      for (var i = 0; i < 20; i++) {
17412        this.sets[i] += _scrambleText(newLength - this.length, this.chars);
17413      }
17414
17415      this.length = newLength;
17416    };
17417
17418    return CharSet;
17419  }();
17420
17421  var gsap$g,
17422      _coreInitted$c,
17423      _getGSAP$e = function _getGSAP() {
17424    return gsap$g || typeof window !== "undefined" && (gsap$g = window.gsap) && gsap$g.registerPlugin && gsap$g;
17425  },
17426      _bonusValidated$1 = 1,
17427      _spacesExp = /\s+/g,
17428      _scrambleText = function _scrambleText(length, chars) {
17429    var l = chars.length,
17430        s = "";
17431
17432    while (--length > -1) {
17433      s += chars[~~(Math.random() * l)];
17434    }
17435
17436    return s;
17437  },
17438      _upper = "ABCDEFGHIJKLMNOPQRSTUVWXYZ",
17439      _lower = _upper.toLowerCase(),
17440      _charsLookup = {
17441    upperCase: new CharSet(_upper),
17442    lowerCase: new CharSet(_lower),
17443    upperAndLowerCase: new CharSet(_upper + _lower)
17444  },
17445      _initCore$c = function _initCore() {
17446    _coreInitted$c = gsap$g = _getGSAP$e();
17447  };
17448
17449  var ScrambleTextPlugin = {
17450    version: "3.12.5",
17451    name: "scrambleText",
17452    register: function register(core, Plugin, propTween) {
17453      gsap$g = core;
17454
17455      _initCore$c();
17456    },
17457    init: function init(target, value, tween, index, targets) {
17458      _coreInitted$c || _initCore$c();
17459      this.prop = "innerHTML" in target ? "innerHTML" : "textContent" in target ? "textContent" : 0;
17460
17461      if (!this.prop) {
17462        return;
17463      }
17464
17465      this.target = target;
17466
17467      if (typeof value !== "object") {
17468        value = {
17469          text: value
17470        };
17471      }
17472
17473      var text = value.text || value.value || "",
17474          trim = value.trim !== false,
17475          data = this,
17476          delim,
17477          maxLength,
17478          charset,
17479          splitByChars;
17480      data.delimiter = delim = value.delimiter || "";
17481      data.original = emojiSafeSplit(getText(target).replace(_spacesExp, " ").split("&nbsp;").join(""), delim, trim);
17482
17483      if (text === "{original}" || text === true || text == null) {
17484        text = data.original.join(delim);
17485      }
17486
17487      data.text = emojiSafeSplit((text || "").replace(_spacesExp, " "), delim, trim);
17488      data.hasClass = !!(value.newClass || value.oldClass);
17489      data.newClass = value.newClass;
17490      data.oldClass = value.oldClass;
17491      splitByChars = delim === "";
17492      data.textHasEmoji = splitByChars && !!data.text.emoji;
17493      data.charsHaveEmoji = !!value.chars && !!emojiSafeSplit(value.chars).emoji;
17494      data.length = splitByChars ? data.original.length : data.original.join(delim).length;
17495      data.lengthDif = (splitByChars ? data.text.length : data.text.join(delim).length) - data.length;
17496      data.fillChar = value.fillChar || value.chars && ~value.chars.indexOf(" ") ? "&nbsp;" : "";
17497      data.charSet = charset = _charsLookup[value.chars || "upperCase"] || new CharSet(value.chars);
17498      data.speed = 0.05 / (value.speed || 1);
17499      data.prevScrambleTime = 0;
17500      data.setIndex = Math.random() * 20 | 0;
17501      maxLength = data.length + Math.max(data.lengthDif, 0);
17502
17503      if (maxLength > charset.length) {
17504        charset.grow(maxLength);
17505      }
17506
17507      data.chars = charset.sets[data.setIndex];
17508      data.revealDelay = value.revealDelay || 0;
17509      data.tweenLength = value.tweenLength !== false;
17510      data.tween = tween;
17511      data.rightToLeft = !!value.rightToLeft;
17512
17513      data._props.push("scrambleText", "text");
17514
17515      return _bonusValidated$1;
17516    },
17517    render: function render(ratio, data) {
17518      var target = data.target,
17519          prop = data.prop,
17520          text = data.text,
17521          delimiter = data.delimiter,
17522          tween = data.tween,
17523          prevScrambleTime = data.prevScrambleTime,
17524          revealDelay = data.revealDelay,
17525          setIndex = data.setIndex,
17526          chars = data.chars,
17527          charSet = data.charSet,
17528          length = data.length,
17529          textHasEmoji = data.textHasEmoji,
17530          charsHaveEmoji = data.charsHaveEmoji,
17531          lengthDif = data.lengthDif,
17532          tweenLength = data.tweenLength,
17533          oldClass = data.oldClass,
17534          newClass = data.newClass,
17535          rightToLeft = data.rightToLeft,
17536          fillChar = data.fillChar,
17537          speed = data.speed,
17538          original = data.original,
17539          hasClass = data.hasClass,
17540          l = text.length,
17541          time = tween._time,
17542          timeDif = time - prevScrambleTime,
17543          i,
17544          i2,
17545          startText,
17546          endText,
17547          applyNew,
17548          applyOld,
17549          str,
17550          startClass,
17551          endClass,
17552          position,
17553          r;
17554
17555      if (revealDelay) {
17556        if (tween._from) {
17557          time = tween._dur - time;
17558        }
17559
17560        ratio = time === 0 ? 0 : time < revealDelay ? 0.000001 : time === tween._dur ? 1 : tween._ease((time - revealDelay) / (tween._dur - revealDelay));
17561      }
17562
17563      if (ratio < 0) {
17564        ratio = 0;
17565      } else if (ratio > 1) {
17566        ratio = 1;
17567      }
17568
17569      if (rightToLeft) {
17570        ratio = 1 - ratio;
17571      }
17572
17573      i = ~~(ratio * l + 0.5);
17574
17575      if (ratio) {
17576        if (timeDif > speed || timeDif < -speed) {
17577          data.setIndex = setIndex = (setIndex + (Math.random() * 19 | 0)) % 20;
17578          data.chars = charSet.sets[setIndex];
17579          data.prevScrambleTime += timeDif;
17580        }
17581
17582        endText = chars;
17583      } else {
17584        endText = original.join(delimiter);
17585      }
17586
17587      r = tween._from ? ratio : 1 - ratio;
17588      position = length + (tweenLength ? tween._from ? r * r * r : 1 - r * r * r : 1) * lengthDif;
17589
17590      if (rightToLeft) {
17591        if (ratio === 1 && (tween._from || tween.data === "isFromStart")) {
17592          startText = "";
17593          endText = original.join(delimiter);
17594        } else {
17595          str = text.slice(i).join(delimiter);
17596
17597          if (charsHaveEmoji) {
17598            startText = emojiSafeSplit(endText).slice(0, position - (textHasEmoji ? emojiSafeSplit(str) : str).length + 0.5 | 0).join("");
17599          } else {
17600            startText = endText.substr(0, position - (textHasEmoji ? emojiSafeSplit(str) : str).length + 0.5 | 0);
17601          }
17602
17603          endText = str;
17604        }
17605      } else {
17606        startText = text.slice(0, i).join(delimiter);
17607        i2 = (textHasEmoji ? emojiSafeSplit(startText) : startText).length;
17608
17609        if (charsHaveEmoji) {
17610          endText = emojiSafeSplit(endText).slice(i2, position + 0.5 | 0).join("");
17611        } else {
17612          endText = endText.substr(i2, position - i2 + 0.5 | 0);
17613        }
17614      }
17615
17616      if (hasClass) {
17617        startClass = rightToLeft ? oldClass : newClass;
17618        endClass = rightToLeft ? newClass : oldClass;
17619        applyNew = startClass && i !== 0;
17620        applyOld = endClass && i !== l;
17621        str = (applyNew ? "<span class='" + startClass + "'>" : "") + startText + (applyNew ? "</span>" : "") + (applyOld ? "<span class='" + endClass + "'>" : "") + delimiter + endText + (applyOld ? "</span>" : "");
17622      } else {
17623        str = startText + delimiter + endText;
17624      }
17625
17626      target[prop] = fillChar === "&nbsp;" && ~str.indexOf("  ") ? str.split("  ").join("&nbsp;&nbsp;") : str;
17627    }
17628  };
17629  ScrambleTextPlugin.emojiSafeSplit = emojiSafeSplit;
17630  ScrambleTextPlugin.getText = getText;
17631  _getGSAP$e() && gsap$g.registerPlugin(ScrambleTextPlugin);
17632
17633  /*!
17634   * CustomBounce 3.12.5
17635   * https://gsap.com
17636   *
17637   * @license Copyright 2008-2024, GreenSock. All rights reserved.
17638   * Subject to the terms at https://gsap.com/standard-license or for
17639   * Club GSAP members, the agreement issued with that membership.
17640   * @author: Jack Doyle, [email protected]
17641  */
17642  var gsap$h,
17643      _coreInitted$d,
17644      createCustomEase,
17645      _getGSAP$f = function _getGSAP() {
17646    return gsap$h || typeof window !== "undefined" && (gsap$h = window.gsap) && gsap$h.registerPlugin && gsap$h;
17647  },
17648      _initCore$d = function _initCore(required) {
17649    gsap$h = _getGSAP$f();
17650    createCustomEase = gsap$h && gsap$h.parseEase("_CE");
17651
17652    if (createCustomEase) {
17653      _coreInitted$d = 1;
17654
17655      gsap$h.parseEase("bounce").config = function (vars) {
17656        return typeof vars === "object" ? _create("", vars) : _create("bounce(" + vars + ")", {
17657          strength: +vars
17658        });
17659      };
17660    } else {
17661      required && console.warn("Please gsap.registerPlugin(CustomEase, CustomBounce)");
17662    }
17663  },
17664      _normalizeX = function _normalizeX(a) {
17665    var l = a.length,
17666        s = 1 / a[l - 2],
17667        rnd = 1000,
17668        i;
17669
17670    for (i = 2; i < l; i += 2) {
17671      a[i] = ~~(a[i] * s * rnd) / rnd;
17672    }
17673
17674    a[l - 2] = 1;
17675  },
17676      _create = function _create(id, vars) {
17677    if (!_coreInitted$d) {
17678      _initCore$d(1);
17679    }
17680
17681    vars = vars || {};
17682
17683    {
17684      var max = 0.999,
17685          decay = Math.min(max, vars.strength || 0.7),
17686          decayX = decay,
17687          gap = (vars.squash || 0) / 100,
17688          originalGap = gap,
17689          slope = 1 / 0.03,
17690          w = 0.2,
17691          h = 1,
17692          prevX = 0.1,
17693          path = [0, 0, 0.07, 0, 0.1, 1, 0.1, 1],
17694          squashPath = [0, 0, 0, 0, 0.1, 0, 0.1, 0],
17695          cp1,
17696          cp2,
17697          x,
17698          y,
17699          i,
17700          nextX,
17701          squishMagnitude;
17702
17703      for (i = 0; i < 200; i++) {
17704        w *= decayX * ((decayX + 1) / 2);
17705        h *= decay * decay;
17706        nextX = prevX + w;
17707        x = prevX + w * 0.49;
17708        y = 1 - h;
17709        cp1 = prevX + h / slope;
17710        cp2 = x + (x - cp1) * 0.8;
17711
17712        if (gap) {
17713          prevX += gap;
17714          cp1 += gap;
17715          x += gap;
17716          cp2 += gap;
17717          nextX += gap;
17718          squishMagnitude = gap / originalGap;
17719          squashPath.push(prevX - gap, 0, prevX - gap, squishMagnitude, prevX - gap / 2, squishMagnitude, prevX, squishMagnitude, prevX, 0, prevX, 0, prevX, squishMagnitude * -0.6, prevX + (nextX - prevX) / 6, 0, nextX, 0);
17720          path.push(prevX - gap, 1, prevX, 1, prevX, 1);
17721          gap *= decay * decay;
17722        }
17723
17724        path.push(prevX, 1, cp1, y, x, y, cp2, y, nextX, 1, nextX, 1);
17725        decay *= 0.95;
17726        slope = h / (nextX - cp2);
17727        prevX = nextX;
17728
17729        if (y > max) {
17730          break;
17731        }
17732      }
17733
17734      if (vars.endAtStart && vars.endAtStart !== "false") {
17735        x = -0.1;
17736        path.unshift(x, 1, x, 1, -0.07, 0);
17737
17738        if (originalGap) {
17739          gap = originalGap * 2.5;
17740          x -= gap;
17741          path.unshift(x, 1, x, 1, x, 1);
17742          squashPath.splice(0, 6);
17743          squashPath.unshift(x, 0, x, 0, x, 1, x + gap / 2, 1, x + gap, 1, x + gap, 0, x + gap, 0, x + gap, -0.6, x + gap + 0.033, 0);
17744
17745          for (i = 0; i < squashPath.length; i += 2) {
17746            squashPath[i] -= x;
17747          }
17748        }
17749
17750        for (i = 0; i < path.length; i += 2) {
17751          path[i] -= x;
17752          path[i + 1] = 1 - path[i + 1];
17753        }
17754      }
17755
17756      if (gap) {
17757        _normalizeX(squashPath);
17758
17759        squashPath[2] = "C" + squashPath[2];
17760        createCustomEase(vars.squashID || id + "-squash", "M" + squashPath.join(","));
17761      }
17762
17763      _normalizeX(path);
17764
17765      path[2] = "C" + path[2];
17766      return createCustomEase(id, "M" + path.join(","));
17767    }
17768  };
17769
17770  var CustomBounce = function () {
17771    function CustomBounce(id, vars) {
17772      this.ease = _create(id, vars);
17773    }
17774
17775    CustomBounce.create = function create(id, vars) {
17776      return _create(id, vars);
17777    };
17778
17779    CustomBounce.register = function register(core) {
17780      gsap$h = core;
17781
17782      _initCore$d();
17783    };
17784
17785    return CustomBounce;
17786  }();
17787  _getGSAP$f() && gsap$h.registerPlugin(CustomBounce);
17788  CustomBounce.version = "3.12.5";
17789
17790  /*!
17791   * CustomWiggle 3.12.5
17792   * https://gsap.com
17793   *
17794   * @license Copyright 2008-2024, GreenSock. All rights reserved.
17795   * Subject to the terms at https://gsap.com/standard-license or for
17796   * Club GSAP members, the agreement issued with that membership.
17797   * @author: Jack Doyle, [email protected]
17798  */
17799  var gsap$i,
17800      _coreInitted$e,
17801      createCustomEase$1,
17802      _getGSAP$g = function _getGSAP() {
17803    return gsap$i || typeof window !== "undefined" && (gsap$i = window.gsap) && gsap$i.registerPlugin && gsap$i;
17804  },
17805      _eases = {
17806    easeOut: "M0,1,C0.7,1,0.6,0,1,0",
17807    easeInOut: "M0,0,C0.1,0,0.24,1,0.444,1,0.644,1,0.6,0,1,0",
17808    anticipate: "M0,0,C0,0.222,0.024,0.386,0,0.4,0.18,0.455,0.65,0.646,0.7,0.67,0.9,0.76,1,0.846,1,1",
17809    uniform: "M0,0,C0,0.95,0,1,0,1,0,1,1,1,1,1,1,1,1,0,1,0"
17810  },
17811      _linearEase = function _linearEase(p) {
17812    return p;
17813  },
17814      _initCore$e = function _initCore(required) {
17815    if (!_coreInitted$e) {
17816      gsap$i = _getGSAP$g();
17817      createCustomEase$1 = gsap$i && gsap$i.parseEase("_CE");
17818
17819      if (createCustomEase$1) {
17820        for (var p in _eases) {
17821          _eases[p] = createCustomEase$1("", _eases[p]);
17822        }
17823
17824        _coreInitted$e = 1;
17825
17826        _create$1("wiggle").config = function (vars) {
17827          return typeof vars === "object" ? _create$1("", vars) : _create$1("wiggle(" + vars + ")", {
17828            wiggles: +vars
17829          });
17830        };
17831      } else {
17832        required && console.warn("Please gsap.registerPlugin(CustomEase, CustomWiggle)");
17833      }
17834    }
17835  },
17836      _parseEase$1 = function _parseEase(ease, invertNonCustomEases) {
17837    if (typeof ease !== "function") {
17838      ease = gsap$i.parseEase(ease) || createCustomEase$1("", ease);
17839    }
17840
17841    return ease.custom || !invertNonCustomEases ? ease : function (p) {
17842      return 1 - ease(p);
17843    };
17844  },
17845      _create$1 = function _create(id, vars) {
17846    if (!_coreInitted$e) {
17847      _initCore$e(1);
17848    }
17849
17850    vars = vars || {};
17851    var wiggles = (vars.wiggles || 10) | 0,
17852        inc = 1 / wiggles,
17853        x = inc / 2,
17854        anticipate = vars.type === "anticipate",
17855        yEase = _eases[vars.type] || _eases.easeOut,
17856        xEase = _linearEase,
17857        rnd = 1000,
17858        nextX,
17859        nextY,
17860        angle,
17861        handleX,
17862        handleY,
17863        easedX,
17864        y,
17865        path,
17866        i;
17867
17868    {
17869      if (anticipate) {
17870        xEase = yEase;
17871        yEase = _eases.easeOut;
17872      }
17873
17874      if (vars.timingEase) {
17875        xEase = _parseEase$1(vars.timingEase);
17876      }
17877
17878      if (vars.amplitudeEase) {
17879        yEase = _parseEase$1(vars.amplitudeEase, true);
17880      }
17881
17882      easedX = xEase(x);
17883      y = anticipate ? -yEase(x) : yEase(x);
17884      path = [0, 0, easedX / 4, 0, easedX / 2, y, easedX, y];
17885
17886      if (vars.type === "random") {
17887        path.length = 4;
17888        nextX = xEase(inc);
17889        nextY = Math.random() * 2 - 1;
17890
17891        for (i = 2; i < wiggles; i++) {
17892          x = nextX;
17893          y = nextY;
17894          nextX = xEase(inc * i);
17895          nextY = Math.random() * 2 - 1;
17896          angle = Math.atan2(nextY - path[path.length - 3], nextX - path[path.length - 4]);
17897          handleX = Math.cos(angle) * inc;
17898          handleY = Math.sin(angle) * inc;
17899          path.push(x - handleX, y - handleY, x, y, x + handleX, y + handleY);
17900        }
17901
17902        path.push(nextX, 0, 1, 0);
17903      } else {
17904        for (i = 1; i < wiggles; i++) {
17905          path.push(xEase(x + inc / 2), y);
17906          x += inc;
17907          y = (y > 0 ? -1 : 1) * yEase(i * inc);
17908          easedX = xEase(x);
17909          path.push(xEase(x - inc / 2), y, easedX, y);
17910        }
17911
17912        path.push(xEase(x + inc / 4), y, xEase(x + inc / 4), 0, 1, 0);
17913      }
17914
17915      i = path.length;
17916
17917      while (--i > -1) {
17918        path[i] = ~~(path[i] * rnd) / rnd;
17919      }
17920
17921      path[2] = "C" + path[2];
17922      return createCustomEase$1(id, "M" + path.join(","));
17923    }
17924  };
17925
17926  var CustomWiggle = function () {
17927    function CustomWiggle(id, vars) {
17928      this.ease = _create$1(id, vars);
17929    }
17930
17931    CustomWiggle.create = function create(id, vars) {
17932      return _create$1(id, vars);
17933    };
17934
17935    CustomWiggle.register = function register(core) {
17936      gsap$i = core;
17937
17938      _initCore$e();
17939    };
17940
17941    return CustomWiggle;
17942  }();
17943  _getGSAP$g() && gsap$i.registerPlugin(CustomWiggle);
17944  CustomWiggle.version = "3.12.5";
17945
17946  /*!
17947   * GSDevTools 3.12.5
17948   * https://gsap.com
17949   *
17950   * @license Copyright 2008-2024, GreenSock. All rights reserved.
17951   * Subject to the terms at https://gsap.com/standard-license or for
17952   * Club GSAP members, the agreement issued with that membership.
17953   * @author: Jack Doyle, [email protected]
17954  */
17955
17956  var gsap$j,
17957      _coreInitted$f,
17958      _doc$7,
17959      _docEl$3,
17960      _win$8,
17961      _recordedRoot,
17962      Animation$1,
17963      _rootTween,
17964      _rootInstance,
17965      _keyboardInstance,
17966      _globalTimeline$1,
17967      _independentRoot,
17968      _delayedCall,
17969      _context$4,
17970      _startupPhase = true,
17971      _globalStartTime = 0,
17972      _windowExists$9 = function _windowExists() {
17973    return typeof window !== "undefined";
17974  },
17975      _getGSAP$h = function _getGSAP() {
17976    return gsap$j || _windowExists$9() && (gsap$j = window.gsap) && gsap$j.registerPlugin && gsap$j;
17977  },
17978      _isString$5 = function _isString(value) {
17979    return typeof value === "string";
17980  },
17981      _isFunction$5 = function _isFunction(value) {
17982    return typeof value === "function";
17983  },
17984      _isObject$3 = function _isObject(value) {
17985    return typeof value === "object";
17986  },
17987      _isUndefined$3 = function _isUndefined(value) {
17988    return typeof value === "undefined";
17989  },
17990      _svgNS = "http://www.w3.org/2000/svg",
17991      _domNS = "http://www.w3.org/1999/xhtml",
17992      _idSeed = 0,
17993      _lookup$1 = {},
17994      _supportsStorage = function () {
17995    try {
17996      sessionStorage.setItem("gsTest", "1");
17997      sessionStorage.removeItem("gsTest");
17998      return true;
17999    } catch (e) {
18000      return false;
18001    }
18002  }(),
18003      _parseAnimation = function _parseAnimation(animationOrId) {
18004    return animationOrId instanceof Animation$1 ? animationOrId : animationOrId ? gsap$j.getById(animationOrId) : null;
18005  },
18006      _createElement$2 = function _createElement(type, container, cssText) {
18007    var element = _doc$7.createElementNS ? _doc$7.createElementNS(type === "svg" ? _svgNS : _domNS, type) : _doc$7.createElement(type);
18008
18009    if (container) {
18010      if (_isString$5(container)) {
18011        container = _doc$7.querySelector(container);
18012      }
18013
18014      container.appendChild(element);
18015    }
18016
18017    if (type === "svg") {
18018      element.setAttribute("xmlns", _svgNS);
18019      element.setAttribute("xmlns:xlink", _domNS);
18020    }
18021
18022    cssText && (element.style.cssText = cssText);
18023    return element;
18024  },
18025      _clearSelection = function _clearSelection() {
18026    if (_doc$7.selection) {
18027      _doc$7.selection.empty();
18028    } else if (_win$8.getSelection) {
18029      _win$8.getSelection().removeAllRanges();
18030    }
18031  },
18032      _getChildrenOf = function _getChildrenOf(timeline, includeTimelines) {
18033    var a = [],
18034        cnt = 0,
18035        Tween = gsap$j.core.Tween,
18036        tween = timeline._first;
18037
18038    while (tween) {
18039      if (tween instanceof Tween) {
18040        if (tween.vars.id) {
18041          a[cnt++] = tween;
18042        }
18043      } else {
18044        if (includeTimelines && tween.vars.id) {
18045          a[cnt++] = tween;
18046        }
18047
18048        a = a.concat(_getChildrenOf(tween, includeTimelines));
18049        cnt = a.length;
18050      }
18051
18052      tween = tween._next;
18053    }
18054
18055    return a;
18056  },
18057      _getClippedDuration = function _getClippedDuration(animation, excludeRootRepeats) {
18058    var max = 0,
18059        repeat = Math.max(0, animation._repeat),
18060        t = animation._first;
18061
18062    if (!t) {
18063      max = animation.duration();
18064    }
18065
18066    while (t) {
18067      max = Math.max(max, t.totalDuration() > 999 ? t.endTime(false) : t._start + t._tDur / t._ts);
18068      t = t._next;
18069    }
18070
18071    return !excludeRootRepeats && repeat ? max * (repeat + 1) + animation._rDelay * repeat : max;
18072  },
18073      _globalizeTime = function _globalizeTime(animation, rawTime) {
18074    var a = animation,
18075        time = arguments.length > 1 ? +rawTime : a.rawTime();
18076
18077    while (a) {
18078      time = a._start + time / (a._ts || 1);
18079      a = a.parent;
18080    }
18081
18082    return time;
18083  },
18084      _timeToProgress = function _timeToProgress(time, animation, defaultValue, relativeProgress) {
18085    var add, i, a;
18086
18087    if (_isString$5(time)) {
18088      if (time.charAt(1) === "=") {
18089        add = parseInt(time.charAt(0) + "1", 10) * parseFloat(time.substr(2));
18090
18091        if (add < 0 && relativeProgress === 0) {
18092          relativeProgress = 100;
18093        }
18094
18095        time = relativeProgress / 100 * animation.duration() + add;
18096      } else if (isNaN(time) && animation.labels && animation.labels[time] !== -1) {
18097        time = animation.labels[time];
18098      } else if (animation === _recordedRoot) {
18099        i = time.indexOf("=");
18100
18101        if (i > 0) {
18102          add = parseInt(time.charAt(i - 1) + "1", 10) * parseFloat(time.substr(i + 1));
18103          time = time.substr(0, i - 1);
18104        } else {
18105          add = 0;
18106        }
18107
18108        a = gsap$j.getById(time);
18109
18110        if (a) {
18111          time = _globalizeTime(a, defaultValue / 100 * a.duration()) + add;
18112        }
18113      }
18114    }
18115
18116    time = isNaN(time) ? defaultValue : parseFloat(time);
18117    return Math.min(100, Math.max(0, time / animation.duration() * 100));
18118  },
18119      _addedCSS,
18120      _createRootElement = function _createRootElement(element, minimal, css) {
18121    if (!_addedCSS) {
18122      _createElement$2("style", _docEl$3).innerHTML = '.gs-dev-tools{height:51px;bottom:0;left:0;right:0;display:block;position:fixed;overflow:visible;padding:0}.gs-dev-tools *{box-sizing:content-box;visibility:visible}.gs-dev-tools .gs-top{position:relative;z-index:499}.gs-dev-tools .gs-bottom{display:flex;align-items:center;justify-content:space-between;background-color:rgba(0,0,0,.6);height:42px;border-top:1px solid #999;position:relative}.gs-dev-tools .timeline{position:relative;height:8px;margin-left:15px;margin-right:15px;overflow:visible}.gs-dev-tools .progress-bar,.gs-dev-tools .timeline-track{height:8px;width:100%;position:absolute;top:0;left:0}.gs-dev-tools .timeline-track{background-color:#999;opacity:.6}.gs-dev-tools .progress-bar{background-color:#91e600;height:8px;top:0;width:0;pointer-events:none}.gs-dev-tools .seek-bar{width:100%;position:absolute;height:24px;top:-12px;left:0;background-color:transparent}
18122.gs-dev-tools .in-point,.gs-dev-tools .out-point{width:15px;height:26px;position:absolute;top:-18px}.gs-dev-tools .in-point-shape{fill:#6d9900;stroke:rgba(0,0,0,.5);stroke-width:1}.gs-dev-tools .out-point-shape{fill:#994242;stroke:rgba(0,0,0,.5);stroke-width:1}.gs-dev-tools .in-point{transform:translateX(-100%)}.gs-dev-tools .out-point{left:100%}.gs-dev-tools .grab{stroke:rgba(255,255,255,.3);stroke-width:1}.gs-dev-tools .playhead{position:absolute;top:-5px;transform:translate(-50%,0);left:0;border-radius:50%;width:16px;height:16px;border:1px solid #6d9900;background-color:#91e600}.gs-dev-tools .gs-btn-white{fill:#fff}.gs-dev-tools .pause{opacity:0}.gs-dev-tools .select-animation{vertical-align:middle;position:relative;padding:6px 10px}.gs-dev-tools .select-animation-container{flex-grow:4;width:40%}.gs-dev-tools .select-arrow{display:inline-block;width:12px;height:7px;margin:0 7px;transform:translate(0,-2px)}.gs-dev-tools .select-arrow-shape{stroke:rgba(255,255,255,.6);stroke-width:2px;fill:none}.gs-dev-tools .rewind{height:16px;width:19px;padding:10px 4px;min-width:24px}.gs-dev-tools .rewind-path{opacity:.6}.gs-dev-tools .play-pause{width:24px;height:24px;padding:6px 10px;min-width:24px}.gs-dev-tools .ease{width:30px;height:30px;padding:10px;min-width:30px;display:none}.gs-dev-tools .ease-path{fill:none;stroke:rgba(255,255,255,.6);stroke-width:2px}.gs-dev-tools .ease-border{fill:rgba(255,255,255,.25)}.gs-dev-tools .time-scale{font-family:monospace;font-size:18px;text-align:center;color:rgba(255,255,255,.6);padding:4px 4px 4px 0;min-width:30px;margin-left:7px}.gs-dev-tools .loop{width:20px;padding:5px;min-width:20px}.gs-dev-tools .loop-path{fill:rgba(255,255,255,.6)}.gs-dev-tools label span{color:#fff;font-family:monospace;text-decoration:none;font-size:16px;line-height:18px}.gs-dev-tools .time-scale span{color:rgba(255,255,255,.6)}.gs-dev-tools button:focus,.gs-dev-tools select:focus{outline:0}.gs-dev-tools label{position:relative;cursor:pointer}.gs-dev-tools label.locked{text-decoration:none;cursor:auto}.gs-dev-tools label input,.gs-dev-tools label select{position:absolute;left:0;top:0;z-index:1;font:inherit;font-size:inherit;line-height:inherit;height:100%;width:100%;color:#000!important;opacity:0;background:0 0;border:none;padding:0;margin:0;-webkit-appearance:none;-moz-appearance:none;appearance:none;cursor:pointer}.gs-dev-tools label input+.display{position:relative;z-index:2}.gs-dev-tools .gs-bottom-right{vertical-align:middle;display:flex;align-items:center;flex-grow:4;width:40%;justify-content:flex-end}.gs-dev-tools .time-container{font-size:18px;font-family:monospace;color:rgba(255,255,255,.6);margin:0 5px}.gs-dev-tools .logo{width:32px;height:32px;position:relative;top:2px;margin:0 12px}.gs-dev-tools .gs-hit-area{background-color:transparent;width:100%;height:100%;top:0;position:absolute}.gs-dev-tools.minimal{height:auto;display:flex;align-items:stretch}.gs-dev-tools.minimal .gs-top{order:2;flex-grow:4;background-color:rgba(0,0,0,1)}.gs-dev-tools.minimal .gs-bottom{background-color:rgba(0,0,0,1);border-top:none}.gs-dev-tools.minimal .timeline{top:50%;transform:translate(0,-50%)}.gs-dev-tools.minimal .in-point,.gs-dev-tools.minimal .out-point{display:none}.gs-dev-tools.minimal .select-animation-container{display:none}.gs-dev-tools.minimal .rewind{display:none}.gs-dev-tools.minimal .play-pause{width:20px;height:20px;padding:4px 6px;margin-left:14px}.gs-dev-tools.minimal .time-scale{min-width:26px}.gs-dev-tools.minimal .loop{width:18px;min-width:18px;display:none}.gs-dev-tools.minimal .gs-bottom-right{display:none}@media only screen and (max-width:600px){.gs-dev-tools{height:auto;display:flex;align-items:stretch}.gs-dev-tools .gs-top{order:2;flex-grow:4;background-color:rgba(0,0,0,1);height:42px}.gs-dev-tools .gs-bottom{background-color:rgba(0,0,0,1);border-top:none}.gs-dev-tools .timeline{top:50%;transform:translate(0,-50%)}.gs-dev-tools .in-point,.gs-dev-tools .out-point{display:none}.gs-dev-tools .select-animation-container{display:none}.gs-dev-tools .rewind{display:none}.gs-dev-tools .play-pause{width:20px;height:20px;padding:4px 6px;margin-left:14px}.gs-dev-tools .time-scale{min-width:26px}.gs-dev-tools .loop{width:18px;min-width:18px;display:none}.gs-dev-tools .gs-bottom-right{display:none}}';
18123      _addedCSS = true;
18124    }
18125
18126    if (_isString$5(element)) {
18127      element = _doc$7.querySelector(element);
18128    }
18129
18130    var root = _createElement$2("div", element || _docEl$3.getElementsByTagName("body")[0] || _docEl$3);
18131
18132    root.setAttribute("class", "gs-dev-tools" + (minimal ? " minimal" : ""));
18133    root.innerHTML = '<div class=gs-hit-area></div><div class=gs-top><div class=timeline><div class=timeline-track></div><div class=progress-bar></div><div class=seek-bar></div>
18133<svg class=in-point viewBox="0 0 15 26" xmlns=http://www.w3.org/2000/svg><polygon class=in-point-shape points=".5 .5 14.5 .5 14.5 25.5 .5 17.5"/><polyline class=grab points="5.5 4 5.5 15"/><polyline class=grab points="9.5 4 9.5 17"/></svg><svg class=out-point viewBox="0 0 15 26" xmlns=http://www.w3.org/2000/svg><polygon class=out-point-shape points=".5 .5 14.5 .5 14.5 17.5 .5 25.5"/><polyline class=grab points="5.5 4 5.5 17"/><polyline class=grab points="9.5 4 9.5 15"/></svg><div class=playhead></div></div></div><div class=gs-bottom><div class=select-animation-container><label class=select-animation><select class=animation-list><option>Global Timeline<option>myTimeline</select><nobr><span class="display animation-label">Global Timeline</span><svg class=select-arrow viewBox="0 0 12.05 6.73" xmlns=http://www.w3.org/2000/svg><polyline class=select-arrow-shape points="0.35 0.35 6.03 6.03 11.7 0.35"/></svg></nobr></label></div><svg class=rewind viewBox="0 0 12 15.38" xmlns=http://www.w3.org/2000/svg><path d=M0,.38H2v15H0Zm2,7,10,7.36V0Z class="gs-btn-white rewind-path"/></svg><svg class=play-pause viewBox="0 0 20.97 25.67" xmlns=http://www.w3.org/2000/svg><g class=play><path d="M8,4.88 C8,10.18 8,15.48 8,20.79 5.33,22.41 2.66,24.04 0,25.67 0,17.11 0,8.55 0,0 2.66,1.62 5.33,3.25 8,4.88" class="gs-btn-white play-1" style=stroke:#fff;stroke-width:.6px /><path d="M14.485,8.855 C16.64,10.18 18.8,11.5 20.97,12.83 16.64,15.48 12.32,18.13 8,20.79 8,15.48 8,10.18 8,4.88 10.16,6.2 12.32,7.53 14.48,8.85" class="gs-btn-white play-2" style=stroke:#fff;stroke-width:.6px /></g></svg> <svg class=loop viewBox="0 0 29 25.38" xmlns=http://www.w3.org/2000/svg><path d=M27.44,5.44,20.19,0V3.06H9.06A9.31,9.31,0,0,0,0,12.41,9.74,9.74,0,0,0,.69,16l3.06-2.23a6,6,0,0,1-.12-1.22,5.49,5.49,0,0,1,5.43-5.5H20.19v3.81Z class=loop-path /><path d=M25.25,11.54a5.18,5.18,0,0,1,.12,1.12,5.41,5.41,0,0,1-5.43,5.41H9.19V14.5L1.94,19.94l7.25,5.44V22.06H19.94A9.2,9.2,0,0,0,29,12.84a9.42,9.42,0,0,0-.68-3.53Z class=loop-path /></svg> <svg class=ease viewBox="0 0 25.67 25.67" xmlns=http://www.w3.org/2000/svg><path d=M.48,25.12c1.74-3.57,4.28-12.6,8.8-10.7s4.75,1.43,6.5-1.11S19.89,1.19,25.2.55 class=ease-path /><path d=M24.67,1V24.67H1V1H24.67m1-1H0V25.67H25.67V0Z class=ease-border /></svg><label class=time-scale><select><option value=10>10x<option value=5>5x<option value=2>2x<option value=1 selected>1x<option value=0.5>0.5x<option value=0.25>0.25x<option value=0.1>0.1x</select><span class="display time-scale-label">1x</span></label><div class=gs-bottom-right><div class=time-container><span class=time>0.00</span> / <span class=duration>0.00</span></div><a href="https://gsap.com/docs/v3/Plugins/GSDevTools?source=GSDevTools" target=_blank title=Docs><svg class=logo viewBox="0 0 100 100" xmlns=http://www.w3.org/2000/svg><path d="M60 15.4c-.3-.4-.5-.6-.5-.7.1-.6.2-1 .2-1.7v-.4c.6.6 1.3 1.3 1.8 1.7.2.2.5.3.8.3.2 0 .3 0 .5.1h1.6c.8 0 1.6.1 2 0 .1 0 .2 0 .3-.1.6-.3 1.4-1 2.1-1.6 0 .6.1 1.2.1 1.7v1.5c0 .3 0 .5.1.7-.1.1-.2.1-.4.2-.7.4-1.7 1-2.3.9-.5-.1-1.5-.3-2.6-.7-1.2-.3-2.4-.8-3.2-1.2 0 0-.1 0-.1-.1s-.2-.4-.4-.6zm24.6 21.9c-.5-1.7-1.9-2-4.2-.7.9-1.5 2.1-1.5 2.3-2.1.9-2.5-.6-4.6-1.2-5.3.7-1.8 1.4-4.5-1-6.8-1-1-2.4-1.2-3.6-1.1 1.8 1.7 3.4 4.4 2.5 7.2-.1.3-.9.7-1.7 1 0 0 .4 2-.3 3.5-.3.6-.8 1.5-1.3 2.6 1 .9 1.6 1 3 1.3-.9.1-1.2.4-1.2.5-.7 3 1 3.4 1.4 4.8 0 .1 0 .2.1.3v.4c-.3.3-1.4.5-2.5.5s-1.8 1-1.8 1c-.2.1-.3.3-.4.4v1c0 .1 0 .4.1.6.1.5.3 1.3.4 1.8.9.6 1.4.9 2.2 1.1.5.1 1 .2 1.5.1.3-.1.7-.3 1-.7 1.5-1.7 1.9-3.2 2.2-4.1 0-.1 0-.2.1-.2 0 .1.1.1.1.2 0 0 .1-.1.1-.2l.1-.1c1.3-1.6 2.9-4.5 2.1-7zM74.3 49.9c-.1-.3-.1-.7-.2-1.1v-.2c-.1-.2-.1-.4-.2-.6 0-.1-.1-.3-.1-.5s-.1-.5-.1-.7v-.1c0-.2-.1-.5-.1-.7-.1-.3-.1-.7-.2-1.1v-.1c0-.2 0-.3-.1-.5v-.9c0-.1 0-.2.1-.3V43h-.3c-1.1.1-3.8.4-6.7.2-1.2-.1-2.4-.3-3.6-.6-1-.3-1.8-.5-2.3-.7-1.2-.4-1.6-.6-1.8-.7 0 .2-.1.4-.1.7 0 .3-.1.5-.1.8-.1.2-.1.4-.2.6l.1.1c.5.5 1.5 1.3 1.5 2.1v.2c-.1.4-.4.5-.8.9-.1.1-.6.7-1.1 1.1l-.6.6c-.1 0-.1.1-.2.1-.1.1-.3.2-.4.3-.2.1-.7.5-.8.6-.1.1-.2.1-.3.1-2.8 8.8-2.2 13.5-1.5 16.1.1.5.3 1 .4 1.3-.4.5-.8 1-1.2 1.4-1.2 1.5-2 2.6-2.6 4.2 0 .1 0 .1-.1.2 0 .1 0 .2-.1.2-.2.5-.3 1-.4 1.5-.6 2.3-.8 4.5-.9 6.6-.1 2.4-.2 4.6-.5 6.9.7.3 3.1.9 4.7.6.2
18133-.1 0-3.9.6-5.7l.6-1.5c.4-.9.9-1.9 1.3-3.1.3-.7.5-1.5.7-2.4.1-.5.2-1 .3-1.6V74v-.1c.1-.6.1-1.3.1-2 0-.2-.7.3-1.1.9.3-1.8 1.3-2.1 2-3.2.3-.5.6-1.1.6-2 2.5-1.7 4-3.7 5-5.7.2-.4.4-.9.6-1.4.3-.8.5-1.6.7-2.4.3-1.4.8-3.2 1.2-4.8v-.1c.4-1.2.8-2.2 1.2-2.6-.2.9-.4 1.7-.6 2.5v.2c-.6 3.5-.7 6.2-2 9.2 1 2.6 1.9 3.9 2 7.6-2 0-3.2 1.6-3.7 3.2 1.2.3 3.9.7 8.3.1h.3c.1-.5.3-1.1.5-1.5.3-.8.5-1.5.6-2.2.2-1.3.1-2.4 0-3.2 3.9-3.7 2.6-11 1.6-16.6zm.3-15.1c.1-.3.2-.6.4-.8.2-.3.3-.7.5-1 .1-.3.3-.6.4-.9.5-1.5.4-2.8.3-3.5-.1 0-.1-.1-.2-.1-.5-.2-.9-.4-1.4-.6-.1 0-.2-.1-.3-.1-3.8-1.2-7.9-.9-11.9.1-1 .2-1.9.5-2.9.1-2.3-.8-3.9-1.9-4.6-2.8l-.2-.2c-.1.2-.2.4-.4.6.2 2.3-.5 3.9-1.4 5.1.9 1.2 2.6 2.8 3.6 3.4 1.1.6 1.7.7 3.4.4-.6.7-1.1 1-1.9 1.4.1.7.2 2 .5 3.4.3.3 1.2.8 2.3 1.3.5.3 1.1.5 1.7.7.8.3 1.7.6 2.4.8.1 0 .2.1.3.1.5.1 1.1.2 1.8.2h.9c2.1 0 4.5-.2 5.4-.3h.1c-.1-2.7.2-4.6.7-6.2.2-.3.4-.7.5-1.1zm-23.2 9.3v.2c-.3 1.7.5 2.4 1.9 3.4.6.5 0 .5.5.8.3.2.7.3 1 .3.3 0 .5 0 .8-.1.2-.1.4-.3.6-.5.1-.1.3-.2.5-.4.3-.2.6-.5.7-.6.1-.1.2-.1.3-.2.2-.2.5-.5.6-.7.2-.2.4-.5.5-.7 0-.1.1-.1.1-.1v-.1c.1-.4-.3-.8-.8-1.3-.2-.2-.4-.3-.5-.5-.3-.3-.6-.5-1-.7-.9-.5-1.9-.7-3-.7l-.3-.3c-2.2-2.5-3.2-4.8-3.9-6.5-.9-2.1-1.9-3.3-3.9-4.9 1 .4 1.8.8 2.3 1.1.5.4 1.3.4 1.9.2.2-.1.5-.2.7-.3.2-.1.4-.2.6-.4 1.6-1.3 2.5-3.8 2.6-5.6v-.1c.2-.3.6-1.1.8-1.4l.1.1c.1.1.3.2.6.5.1 0 .1.1.2.1.1.1.2.1.2.2.8.6 1.9 1.3 2.6 1.7 1.4.7 2.3.7 5.3-.1 2.2-.6 4.8-.8 6.8-.8 1.4 0 2.7.3 4 .7.2.1.4.1.5.2.3.1.6.2.9.4 0 0 .1 0 .1.1.8.4 2.1 1.2 2.5-.3.1-2-.6-3.9-1.6-5.3 0 0-.1 0-.1-.1-.1-.1-.2-.2-.4-.3-.1-.1-.2-.1-.3-.2-.1-.1-.2-.2-.4-.2-.6-.4-1.2-.8-1.6-.9-.1-.1-.3-.1-.4-.2h-.1-.1c-.1 0-.3-.1-.4-.1-.1 0-.1 0-.2-.1h-.1l-.2-.4c-.2-.1-.4-.2-.5-.2h-.6c-.3 0-.5.1-.7.1-.7.1-1.2.3-1.7.4-.2 0-.3.1-.5.1-.5.1-1 .2-1.6.2-.4 0-.9-.1-1.5-.2-.4-.1-.8-.2-1.1-.3-.2-.1-.4-.1-.6-.2-.6-.2-1.1-.3-1.7-.4h-.2-1.8c-.3 0-.6.1-1 .1H57.9c-.8 0-1.5 0-2.3-.1-.2 0-.5-.1-.7-.1-.5-.1-.9-.2-1.3-.4-.2-.1-.3-.1-.4-.2-.1 0-.2 0-.2-.1-.3-.1-.6-.1-.9-.1H51h-.1c-.4 0-.9.1-1.4.2-1.1.2-2.1.6-3 1.3-.3.2-.6.5-.8.8-.1.1-.2.2-.2.3-.4.6-.8 1.2-.9 2 0 .2-.1.4-.1.6 0 .2 1.7.7 2.3 2.8-.8-1.2-2.3-2.5-4.1-1.4-1.5 1-1.1 3.1-2.4 5.4-.3.5-.6.9-1 1.4-.8 1-.7 2.1.2 4.4 1.4 3.4 7.6 5.3 11.5 8.3l.4.4zm8.7-36.3c0 .6.1 1 .2 1.6v.1c0 .3.1.6.1.9.1 1.2.4 2 1 2.9 0 .1.1.1.1.2.3.2.5.3.8.4 1.1.2 3.1.3 4.2 0 .2-.1.5-.3.7-.5.4-.4.7-1.1.9-1.7.1-.7.3-1.3.4-1.8 0-.2.1-.4.1-.5v-.1c0-.2 0-.3.1-.5.2-.7.2-2.4.3-2.8.1-.7 0-1.8-.1-2.5 0-.2-.1-.4-.1-.5v-.1c-.2-.5-1.4-1.4-4.3-1.4-3.1 0-4 1-4.1 1.5v.1c0 .1 0 .3-.1.5-.1.4-.2 1.4-.2 1.9v2.3zm-6 88.6c0-.1-.1-.2-.1-.3-.7-1.5-1.1-3.5-1.3-4.6.4.1.7.6.8.3.2-.5-.4-1.5-.5-2.2v-.1c-.5-.5-4-.5-3.7-.3-.4.8-1 .6-1.3 2.1-.1.7.8.1 1.7.1-1.4.9-3 2.1-3.4 3.2-.1.1-.1.2-.1.3 0 .2-.1.4-.1.5-.1 1.2.5 1.6 2 2.4H48.4c1.4.3 3 .3 4.3.3 1.2-.2 1.6-.7 1.6-1.4-.2-.1-.2-.2-.2-.3z" style=fill:#efefef /><path d="M56.1 36.5c.3 1.4.5 2.4.8 4.2h-.2c-.1.5-.1.9-.1 1.3-1-.4-2.2-.5-2.6-.5-3.7-4.4-2.9-6.1-4.4-8.3.4-.2 1-.4 1.5-.8 1.6 1.9 3.3 3 5 4.1zm-1.7 13.2s-1.4 0-2.3-1c0 0-.1-.5.1-.7 0 0-1.2-1-1.5-1.7-.2-.5-.3-1.1-.2-1.6-4.4-3.7-10.9-4.2-12.9-9.1-.5-1.2-1.3-2.9-.9-3.9-.3.1-.5.2-.8.3-2.9.9-11.7 5.3-17.9 8.8 1.6 1.7 2.6 4.3 3.2 7.2l.3 1.5c.1.5.1 1 .2 1.5.1 1.4.4 2.7.8 3.9.2.8.6 1.5.9 2.2.6 1 1.2 1.9 2.1 2.6.6.5 1.2.9 1.9 1.3 2.1 1.1 5 1.6 8.6 1.5H37.9c.5 0 1 .1 1.5.1h.1c.4.1.9.1 1.3.2h.2c.4.1.9.2 1.3.4h.1c.4.1.8.3 1.1.5h.1c.4.2.7.4 1.1.6h.1c.7.4 1.3.9 1.9 1.5l.1.1c.6.5 1.1 1.1 1.5 1.8 0 .1.1.1.1.2s.1.1.1.2c.4.6 1.2 1.1 1.9 1.3.7-.9 1.5-1.8 2.2-2.8-1.6-6 0-11.7 1.8-16.9zm-26-15.9c5-2.4 9-4.1 9.9-4.5.3-.6.6-1.4.9-2.6.1-.3.2-.5.3-.8 1-2.7 2.7-2.8 3.5-3v-.2c.1-1.1.5-2 1-2.8-8.8 2.5-18 5.5-28 11.7-.1.1-.2.2-.4.2C11.3 34.5 3 40.3 1.3 51c2.4-2.7 6-5.6 10.5-8.5.1-.1.3-.2.5-.3.2-.1.5-.3.7-.4 1.2-.7 2.4-1.4 3.6-2.2 2.2-1.2 4.5-2.4 6.7-3.5 1.8-.8 3.5-1.6 5.1-2.3zm54.9 61.3l-.3-.3c-.8-.6-4.1-1.2-5.5-2.3-.4-.3-1.1-.7-1.7-1.1-1.6-.9-3.5-1.8-3.5-2.1v-.1c-.2-1.7-.2-7 .1-8.8.3-1.8.7-4.4.8-5.1.1-.6.5-1.2.1-1.2h-.4c-.2 0-.4.1-.8.1-1.5.3-4.3.6-6.6.4-.9-.1-1.6-.2-2-.3-.5-.1-.7-.2-.9-.3H62.3c-.4.5 0 2.7.6 4.8.3 1.1.8 2 1.2 3 .3.8.6 1.8.8 3.1 0 .2.1.4.1.7.2 2.8.3 3.6-.2 4.9-.1.3-.3.6-.4 1-.4.9-.7 1.7-.6 2.3 0 .2.1.4.1.5.2.4.6.7 1.2.8.2 0 .3.1.5.
181331.3 0 .6.1.9.1 3.4 0 5.2 0 8.6.4 2.5.4 3.9.6 5.1.5.4 0 .9-.1 1.4-.1 1.2-.2 1.8-.5 1.9-.9-.1.2-.1.1-.2-.1zM60.2 16.4zm-.5 1.7zm3.8.5c.1 0 .3.1.5.1.4.1.7.2 1.2.3.3.1.6.1.9.1h1.3c.3-.1.7-.1 1-.2.7-.2 1.5-.4 2.7-.6h.3c.3 0 .6.1.9.3.1.1.2.1.4.2.3.2.8.2 1.2.4h.1c.1 0 .1.1.2.1.6.3 1.3.7 1.9 1.1l.3.3c.9-.1 1.6-.2 2.1-.2h.1c-.2-.4-.3-1.3-1.8-.6-.6-.7-.8-1.3-2.1-.9-.1-.2-.2-.3-.3-.4l-.1-.1c-.1-.1-.2-.3-.3-.4 0-.1-.1-.1-.1-.2-.2-.3-.5-.5-.9-.7-.7-.4-1.5-.6-2.3-.5-.2 0-.4.1-.6.2-.1 0-.2.1-.2.1-.1 0-.2.1-.3.2-.5.3-1.3.8-2.1 1-.1 0-.1 0-.2.1-.2 0-.4.1-.5.1H66.5h-.1c-.4-.1-1.1-.2-2-.5-.1 0-.2-.1-.3-.1-.9-.2-1.8-.5-2.7-.8-.3-.1-.7-.2-1-.3-.1 0-.1 0-.2-.1h-.1s-.1 0-.1-.1c-.3-.3-.7-.6-1.3-.8-.5-.2-1.2-.4-2.1-.5-.2 0-.5 0-.7.1-.4.2-.8.6-1.2.9.1.1.3.3.4.5.1.2.2.4.3.7l-.6-.6c-.5-.4-1.1-.8-1.7-.9-.8-.2-1.4.4-2.3.9 1 0 1.8.1 2.5.4.1 0 .1 0 .2.1h.1c.1 0 .2.1.3.1.9.4 1.8.6 2.7.6h1.3c.5 0 .8-.1 1.1-.1.1 0 .4 0 .7-.1h2.2c.4.4.9.6 1.6.8z" style=fill:#88ce02 /><path d="M100 51.8c0-19.5-12.5-36.1-30-42.1.1-1.2.2-2.4.3-3.1.1-1.5.2-3.9-.5-4.9-1.6-2.3-9.1-2.1-10.5-.1-.4.6-.7 3.6-.6 5.9-1.1-.1-2.2-.1-3.3-.1-16.5 0-30.9 9-38.6 22.3-2.4 1.4-4.7 2.8-6.1 4C5.4 38 2.2 43.2 1 47c-1.6 4.7-1.1 7.6.4 5.8 1.2-1.5 6.6-5.9 10.1-8.2-.4 2.3-.6 4.8-.6 7.2 0 21 14.5 38.5 34 43.3-.1 1.1.1 2 .7 2.6.9.8 3.2 2 6.4 1.6 2.9-.3 3.5-.5 3.2-2.9h.2c2.7 0 5.3-.2 7.8-.7.1.1.2.2.4.3 1.5 1 7.1.8 9.6.7s6.2.9 8.6.5c2.9-.5 3.4-2.3 1.6-3.2-1.5-.8-3.8-1.3-6.7-3.1C90.6 83.4 100 68.7 100 51.8zM60.1 5.5c0-.5.1-1.5.2-2.1 0-.2 0-.4.1-.5v-.1c.1-.5 1-1.5 4.1-1.5 2.9 0 4.2.9 4.3 1.4v.1c0 .1 0 .3.1.5.1.8.2 1.9.1 2.7 0 .5-.1 2.1-.2 2.9 0 .1 0 .3-.1.5v.1c0 .2-.1.3-.1.5-.1.5-.2 1.1-.4 1.8-.1.6-.5 1.2-.9 1.7-.2.3-.5.5-.7.5-1.1.3-3.1.3-4.2 0-.3-.1-.5-.2-.8-.4 0-.1-.1-.1-.1-.2-.6-.9-.9-1.7-1-2.9 0-.4-.1-.6-.1-.9v-.1c-.1-.6-.2-1-.2-1.6v-.3c-.1-1.3-.1-2.1-.1-2.1zm-.4 7.5v-.4c.6.6 1.3 1.3 1.8 1.7.2.2.5.3.8.3.2 0 .3 0 .5.1h1.6c.8 0 1.6.1 2 0 .1 0 .2 0 .3-.1.6-.3 1.4-1 2.1-1.6 0 .6.1 1.2.1 1.7v1.5c0 .3 0 .5.1.7-.1.1-.2.1-.4.2-.7.4-1.7 1-2.3.9-.5-.1-1.5-.3-2.6-.7-1.2-.3-2.4-.8-3.2-1.2 0 0-.1 0-.1-.1-.2-.3-.4-.5-.6-.7-.3-.4-.5-.6-.5-.7.3-.4.4-.9.4-1.6zm.5 3.4zm-7.3-.3c.6.1 1.2.5 1.7.9.2.2.5.4.6.6-.1-.2-.2-.5-.3-.7-.1-.2-.3-.4-.4-.5.4-.3.8-.7 1.2-.9.2-.1.4-.1.7-.1.9.1 1.6.2 2.1.5.6.2 1 .5 1.3.8 0 0 .1 0 .1.1h.1c.1 0 .1 0 .2.1.3.1.6.2 1 .3.9.3 1.9.6 2.7.8.1 0 .2.1.3.1.9.2 1.6.4 2 .5h.4c.2 0 .4 0 .5-.1.1 0 .1 0 .2-.1.7-.2 1.5-.7 2.1-1 .1-.1.2-.1.3-.2.1 0 .2-.1.2-.1.2-.1.4-.2.6-.2.8-.2 1.7.1 2.3.5.3.2.6.4.9.7 0 .1.1.1.1.2.1.2.2.3.3.4l.1.1c.1.1.2.2.3.4 1.3-.4 1.5.2 2.1.9 1.6-.7 1.7.2 1.8.6h-.1c-.5 0-1.2 0-2.1.2l-.3-.3c-.5-.4-1.2-.8-1.9-1.1-.1 0-.1-.1-.2-.1h-.1c-.4-.2-.8-.2-1.2-.4-.1-.1-.2-.1-.4-.2-.3-.1-.6-.3-.9-.3h-.3c-1.2.1-2 .4-2.7.6-.3.1-.7.2-1 .2-.4.1-.8.1-1.3 0-.3 0-.6-.1-.9-.1-.5-.1-.8-.2-1.2-.3-.2 0-.3-.1-.5-.1h-.1c-.6-.2-1.2-.3-1.8-.4h-.1-2.1c-.4.1-.6.1-.7.1-.3 0-.7.1-1.1.1h-1.3c-.9 0-1.9-.2-2.7-.6-.1 0-.2-.1-.3-.1H53c-.1 0-.1 0-.2-.1-.7-.3-1.6-.4-2.5-.4 1.2-.8 1.8-1.4 2.6-1.3zm6.8 2zm-15.2 4.1c.1-.7.4-1.4.9-2 .1-.1.2-.2.2-.3l.8-.8c.9-.6 1.9-1.1 3-1.3.5-.1 1-.2 1.4-.2H52c.3 0 .6.1.9.1.1 0 .2 0 .2.1.1.1.2.1.4.2.4.2.8.3 1.3.4.2 0 .5.1.7.1.7.1 1.5.1 2.3.1H58.7c.4 0 .7-.1 1-.1H61.7c.6.1 1.1.2 1.7.4.2 0 .4.1.6.2.3.1.7.2 1.1.3.6.1 1.1.2 1.5.2.6 0 1.1-.1 1.6-.2.2 0 .3-.1.5-.1.5-.1 1-.3 1.7-.4.2 0 .5-.1.7-.1h.6c.2 0 .4.1.5.2l.1.1h.1c.1 0 .1 0 .2.1.2.1.3.1.4.1h.2c.1.1.3.1.4.2.4.2 1 .6 1.6.9.1.1.2.2.4.2.1.1.2.1.3.2.2.1.3.3.4.3l.1.1c1.1 1.4 1.8 3.3 1.6 5.3-.3 1.5-1.6.7-2.5.3 0 0-.1 0-.1-.1-.3-.1-.6-.2-.9-.4-.2-.1-.4-.1-.5-.2-1.2-.4-2.5-.7-4-.7-2 0-4.6.1-6.8.8-3 .8-4 .8-5.3.1-.8-.4-1.8-1.1-2.6-1.7-.1-.1-.2-.1-.2-.2-.1-.1-.1-.1-.2-.1-.3-.2-.6-.4-.6-.5l-.1-.1c-.2.3-.6 1-.8 1.4v.1c-.1 1.7-1 4.2-2.6 5.6-.2.1-.4.3-.6.4-.2.1-.5.2-.7.3-.7.2-1.4.2-1.9-.2-.5-.3-1.3-.7-2.3-1.1 2 1.6 3 2.8 3.9 4.9.7 1.7 1.7 4 3.9 6.5l.3.3c1.1 0 2.1.2 3 .7.4.2.7.4 1 .7.2.2.4.3.5.5.5.4.9.8.8 1.3v.1s0 .1-.1.1c-.1.2-.3.5-.5.7-.1.1-.4.4-.6.7-.1.1-.2.2-.3.2-.1.1-.4.3-.7.6-.2.2-.4.3-.5.4-.2.1-.4.4-.6.5-.3.1-.5.2-.8.1-.3 0-.7-.2-1-.3-.5-.3.1-.3-.5-.8-1.4-1-2.2-1.7-1.9-3.4v-.2c-.2-.1-.3-.3-.5-.4-3.9-3-10.1-4.9-11.5-8.3-.9-2.3-1-3.4-.2-4.4.4-.5.8-1 1-1.4 1.3-2.3.9-4.4 2.4
18133-5.4 1.8-1.2 3.3.2 4.1 1.4-.5-2.1-2.3-2.6-2.3-2.8.3.1.3-.1.3-.3zm29 20s-.1 0 0 0c-.1 0-.1 0 0 0-.9.1-3.3.3-5.4.3h-.9c-.7 0-1.3-.1-1.8-.2-.1 0-.2 0-.3-.1-.7-.2-1.6-.5-2.4-.8-.6-.2-1.2-.5-1.7-.7-1.1-.5-2.1-1.1-2.3-1.3-.5-1.4-.7-2.7-.7-3.4.8-.4 1.3-.7 1.9-1.4-1.7.3-2.4.2-3.4-.4-1-.5-2.6-2.2-3.6-3.4 1-1.2 1.7-2.9 1.4-5.1.1-.2.3-.4.4-.6 0 .1.1.1.2.2.7.9 2.4 2 4.6 2.8 1.1.4 2 .1 2.9-.1 4-1 8.1-1.3 11.9-.1.1 0 .2.1.3.1.5.2.9.4 1.4.6.1 0 .1.1.2.1.1.7.2 2-.3 3.5-.1.3-.2.6-.4.9-.2.3-.3.6-.5 1-.1.3-.2.5-.4.8-.2.4-.3.8-.5 1.3-.4 1.4-.7 3.4-.6 6zm-23.9-9c.4-.2 1-.4 1.5-.8 1.6 1.8 3.3 3 5 4.1.3 1.4.5 2.4.8 4.2h-.2c-.1.5-.1.9-.1 1.3-1-.4-2.2-.5-2.6-.5-3.7-4.3-3-6-4.4-8.3zm-32.9 6.5c-1.3.7-2.5 1.4-3.6 2.2-.2.1-.5.3-.7.4-.1.1-.3.2-.5.3-4.5 2.9-8.1 5.8-10.5 8.5 1.7-10.8 10-16.5 14.3-19.2.1-.1.2-.2.4-.2 10-6.2 19.2-9.2 28-11.7-.5.8-.9 1.7-1 2.8v.2c-.8.1-2.5.2-3.5 3-.1.2-.2.5-.3.8-.3 1.2-.6 2-.9 2.6-.9.4-5 2.2-9.9 4.5-1.6.8-3.3 1.6-5 2.4-2.3 1-4.6 2.2-6.8 3.4zm28 24.8s0-.1 0 0c-.4-.3-.8-.5-1.2-.7h-.1c-.4-.2-.7-.3-1.1-.5h-.1c-.4-.1-.8-.3-1.3-.4h-.2c-.4-.1-.8-.2-1.3-.2h-.1c-.5-.1-1-.1-1.5-.1H35.9c-3.7.1-6.5-.4-8.6-1.5-.7-.4-1.4-.8-1.9-1.3-.9-.7-1.5-1.6-2.1-2.6-.4-.7-.7-1.4-.9-2.2-.4-1.2-.6-2.5-.8-3.9 0-.5-.1-1-.2-1.5l-.3-1.5c-.6-2.9-1.6-5.5-3.2-7.2 6.3-3.5 15-7.9 17.8-8.8.3-.1.6-.2.8-.3-.3 1.1.4 2.7.9 3.9 2.1 4.9 8.6 5.4 12.9 9.1 0 .5 0 1.1.2 1.6.5.6 1.7 1.6 1.7 1.6-.2.2-.1.7-.1.7.9 1 2.3 1 2.3 1-1.8 5.2-3.4 10.9-1.9 16.9-.7 1-1.5 1.8-2.2 2.8-.7-.2-1.4-.6-1.9-1.3 0-.1-.1-.1-.1-.2s-.1-.1-.1-.2l-1.5-1.8-.1-.1c-.5-.4-1.2-.9-1.9-1.3zm7.9 33.6c-1.3.1-2.9 0-4.3-.3h-.2-.1c-1.5-.8-2.1-1.2-2-2.4 0-.2 0-.3.1-.5 0-.1.1-.2.1-.3.5-1.1 2.1-2.2 3.4-3.2-.8 0-1.8.7-1.7-.1.2-1.5.9-1.3 1.3-2.1-.2-.3 3.3-.2 3.8.3v.1c0 .7.7 1.7.5 2.2-.1.3-.4-.2-.8-.3.2 1.1.6 3.1 1.3 4.6.1.1.1.2.1.3 0 .1.1.2.1.3 0 .7-.4 1.2-1.6 1.4zM59 67.7c0 .9-.3 1.6-.6 2-.7 1.1-1.7 1.4-2 3.2.4-.6 1.1-1.1 1.1-.9 0 .8-.1 1.4-.1 2v.2c-.1.6-.2 1.1-.3 1.6-.2.9-.5 1.7-.7 2.4-.4 1.2-.9 2.1-1.3 3.1l-.6 1.5c-.6 1.7-.4 5.6-.6 5.7-1.6.3-4.1-.3-4.7-.6.3-2.2.4-4.5.5-6.9.1-2.1.3-4.3.9-6.6.1-.5.3-1 .4-1.5 0-.1 0-.2.1-.2 0-.1 0-.1.1-.2.5-1.6 1.4-2.7 2.6-4.2.4-.4.7-.9 1.2-1.4-.1-.4-.2-.8-.4-1.3-.7-2.6-1.3-7.3 1.5-16.1.1 0 .2-.1.3-.1.2-.1.7-.5.8-.6.1-.1.3-.2.4-.3.1 0 .1-.1.2-.1l.6-.6 1.1-1.1c.4-.4.7-.5.8-.9v-.2c0-.8-1.1-1.5-1.5-2.1l-.1-.1c.1-.2.1-.4.2-.6 0-.2.1-.5.1-.8 0-.2.1-.5.1-.7.1.1.6.4 1.8.7.6.2 1.3.4 2.3.7 1.1.3 2.4.5 3.6.6 2.9.2 5.6 0 6.7-.2h.3v.1c0 .1 0 .2-.1.3v.9c0 .2 0 .3.1.5v.1c0 .4.1.7.2 1.1 0 .3.1.5.1.7v.1c0 .3.1.5.1.7 0 .2.1.3.1.5.1.2.1.4.2.6v.2c.1.4.2.8.2 1.1 1 5.7 2.3 12.9-1.1 16.7.2.8.3 1.9 0 3.2-.1.7-.3 1.4-.6 2.2-.2.5-.3 1-.5 1.5h-.3c-4.5.6-7.1.2-8.3-.1.5-1.6 1.7-3.3 3.7-3.2-.1-3.7-1.1-5-2-7.6 1.3-3 1.3-5.7 2-9.2v-.2c.2-.8.3-1.6.6-2.5-.4.5-.8 1.5-1.2 2.6v.1c-.5 1.5-.9 3.4-1.2 4.8-.2.8-.4 1.6-.7 2.4-.2.5-.4.9-.6 1.4-1.5 1.9-3 3.9-5.5 5.6zm18.5 24.9c1.5 1.1 4.7 1.8 5.5 2.3l.3.3c.1.1.1.2.1.3-.1.4-.7.7-1.9.9-.5.1-.9.1-1.4.1-1.3 0-2.6-.2-5.1-.5-3.4-.5-5.2-.4-8.6-.4-.3 0-.6 0-.9-.1-.2 0-.4-.1-.5-.1-.6-.2-1-.5-1.2-.8-.1-.2-.1-.3-.1-.5-.1-.7.2-1.5.6-2.3.2-.4.3-.7.4-1 .5-1.3.4-2.1.2-4.9 0-.2-.1-.4-.1-.7-.2-1.3-.5-2.3-.8-3.1-.4-1.1-.9-1.9-1.2-3-.6-2.1-1-4.3-.6-4.8H62.5c.2.1.5.2.9.3.5.1 1.1.2 2 .3 2.2.2 5.1-.2 6.6-.4.3-.1.6-.1.8-.1h.4c.4 0 .1.6-.1 1.2-.1.7-.5 3.3-.8 5.1-.3 1.8-.2 7.1-.1 8.8v.1c0 .3 1.9 1.2 3.5 2.1.7.2 1.4.5 1.8.9zm4.8-48.2c0 .1 0 .1 0 0-.1.1-.2.2-.2.3 0-.1-.1-.1-.1-.2 0 .1 0 .2-.1.2-.2.9-.6 2.4-2.2 4.1-.4.4-.7.6-1 .7-.5.1-.9 0-1.5-.1-.9-.2-1.3-.6-2.2-1.1-.1-.6-.3-1.3-.4-1.8 0-.3-.1-.5-.1-.6v-1l.4-.4s.7-1 1.8-1 2.2-.2 2.5-.5v-.1-.3c0-.1 0-.2-.1-.3-.4-1.4-2.1-1.8-1.4-4.8 0-.2.3-.5 1.2-.5-1.4-.3-2-.4-3-1.3.5-1.1 1-1.9 1.3-2.6.8-1.5.3-3.5.3-3.5.8-.3 1.6-.7 1.7-1 .9-2.8-.7-5.5-2.5-7.2 1.2-.1 2.6.1 3.6 1.1 2.4 2.4 1.8 5 1 6.8.6.7 2.1 2.9 1.2 5.3-.2.6-1.4.6-2.3 2.1 2.3-1.3 3.7-1 4.2.7 1 2.4-.6 5.3-2.1 7z"/><path d="M22 53.4v-.2c0-.2-.1-.5-.2-.9s-.1-.8-.2-1.3c-.5-4.7-1.9-9.4-4.9-11.3 3.7-2 16.8-8.5 21.9-10.5 2.9-1.2.8-.4-.2 1.4-.8 1.4-.3 2.9-.5 3.2-.6.8-12.6 10.5-15.9 19.6zm32.2-2.3c-3.4 3.8-12 11-18.2 11.4 8.7-.2 12.2 4.1 14.7 9.7 2.6-5.2 2.7-10.3 2.6-16.1 0-2.6 1.8-6 .9-5zm5.3-23L54.3 24s-1.1 3.1-1 4.6c.1 1.6-1.8 2.7-.9 3.6.9.9 3.2 2.5 4 3.4.7.9 1.1 7.1 1.1 7.1l2.2 2.7s1-1.8 1.1-6.3c.2-5.4-2.9-7.1-3.3-8.6-.4-1.4.6-2.9 2-2.4zm3.1 45.6l3.9.3s1.2-2.2 2.1-3.5c.9-1.4.4-1.6 0-4.6-.4-3-1.4-9.3-1.2-13.6l-3.1 10.2s1.8 5.6 1.6 6.4c-.1.8-3.3 4.8-3.3 4.8zm5 18.8c-1.1 0-2.5-.4-3.5-.8l-1 .3.2 4s5.2.7 4.6-.4c-.6-1.2-.3-3.1-.3-3.1zm12 .6c-1 0-.3.2.4 1.2.8 1 .1 2-.8 2.3l3.2.5 1.9-1.7c.1 0-3.7-2.3-4.7-2.3zM73 76c-1.6.5-4.2.8-5.9.8-1.7.1-3.7-.1-5-.5v1.4s1.2.5 5.4.5c3.5.1 5.7-.8 5.7-.8l.9-.8c-.1.1.5-1.1-1.1-.6zm-.2 3.1c-1.6.6-3.9.6-5.6.7-1.7.1-3.7-.1-5-.5l.1 1.4s.7.3 4.9.4c3.5.1 5.7-.7 5.7-.7l.3-.5c-.1-.1.3-1-.4-.8zm5.9-42.7c-.9-.8-1.4-2.4-1.5-3.3l-1.9 2.5.7 1.2s2.5.1 2.8.1c.4 0 .3-.1-.1-.5zM69 14.7c.6-.7.2-2.7.2-2.7L66 14.6l-4.4-.8-.5-1.3-1.3-.1c.8 1.8 1.8 2.5 3.3 3.1.9.4 4.5.9 5.9-.8z" style=opacity:.4;fill-rule:evenodd;clip-rule:evenodd 
vendor: 26,308 bytes, lines 18133-19001
18133/></svg></a></div></div>';
18134
18135    if (element) {
18136      root.style.position = "absolute";
18137      root.style.top = minimal ? "calc(100% - 42px)" : "calc(100% - 51px)";
18138    }
18139
18140    if (css) {
18141      if (_isString$5(css)) {
18142        root.style.cssText = css;
18143      } else if (_isObject$3(css)) {
18144        css.data = "root";
18145        gsap$j.set(root, css).kill();
18146      }
18147
18148      if (root.style.top) {
18149        root.style.bottom = "auto";
18150      }
18151
18152      if (root.style.width) {
18153        gsap$j.set(root, {
18154          xPercent: -50,
18155          left: "50%",
18156          right: "auto",
18157          data: "root"
18158        }).kill();
18159      }
18160    }
18161
18162    if (!minimal && root.offsetWidth < 600) {
18163      root.setAttribute("class", "gs-dev-tools minimal");
18164
18165      if (element) {
18166        root.style.top = "calc(100% - 42px)";
18167      }
18168    }
18169
18170    return root;
18171  },
18172      _clickedOnce = true,
18173      _addListener$3 = function _addListener(e, type, callback, capture) {
18174    var handler, altType;
18175
18176    if (type === "mousedown" || type === "mouseup") {
18177      e.style.cursor = "pointer";
18178    }
18179
18180    if (type === "mousedown") {
18181      altType = !_isUndefined$3(e.onpointerdown) ? "pointerdown" : !_isUndefined$3(e.ontouchstart) ? "touchstart" : null;
18182
18183      if (altType) {
18184        handler = function handler(event) {
18185          if (event.target.nodeName.toLowerCase() !== "select" && event.type === altType) {
18186            event.stopPropagation();
18187
18188            if (_clickedOnce) {
18189              event.preventDefault();
18190              callback.call(e, event);
18191            }
18192          } else if (event.type !== altType) {
18193            callback.call(e, event);
18194          }
18195
18196          _clickedOnce = true;
18197        };
18198
18199        e.addEventListener(altType, handler, capture);
18200
18201        if (altType !== "pointerdown") {
18202          e.addEventListener(type, handler, capture);
18203        }
18204
18205        return;
18206      }
18207    }
18208
18209    e.addEventListener(type, callback, capture);
18210  },
18211      _removeListener$3 = function _removeListener(e, type, callback) {
18212    e.removeEventListener(type, callback);
18213    type = type !== "mousedown" ? null : !_isUndefined$3(e.onpointerdown) ? "pointerdown" : !_isUndefined$3(e.ontouchstart) ? "touchstart" : null;
18214
18215    if (type) {
18216      e.removeEventListener(type, callback);
18217    }
18218  },
18219      _selectValue = function _selectValue(element, value, label, insertIfAbsent) {
18220    var options = element.options,
18221        i = options.length,
18222        option;
18223    value += "";
18224
18225    while (--i > -1) {
18226      if (options[i].innerHTML === value || options[i].value === value) {
18227        element.selectedIndex = i;
18228        label.innerHTML = options[i].innerHTML;
18229        return options[i];
18230      }
18231    }
18232
18233    if (insertIfAbsent) {
18234      option = _createElement$2("option", element);
18235      option.setAttribute("value", value);
18236      option.innerHTML = label.innerHTML = _isString$5(insertIfAbsent) ? insertIfAbsent : value;
18237      element.selectedIndex = options.length - 1;
18238    }
18239  },
18240      _shiftSelectedValue = function _shiftSelectedValue(element, amount, label) {
18241    var options = element.options,
18242        i = Math.min(options.length - 1, Math.max(0, element.selectedIndex + amount));
18243    element.selectedIndex = i;
18244
18245    if (label) {
18246      label.innerHTML = options[i].innerHTML;
18247    }
18248
18249    return options[i].value;
18250  },
18251      _merge$1 = function _merge() {
18252    var t = _globalTimeline$1._first,
18253        duration,
18254        next,
18255        target;
18256
18257    if (_rootInstance) {
18258      duration = _recordedRoot._dur;
18259
18260      while (t) {
18261        next = t._next;
18262        target = t._targets && t._targets[0];
18263
18264        if (!(_isFunction$5(target) && target === t.vars.onComplete && !t._dur) && !(target && target._gsIgnore)) {
18265          _recordedRoot.add(t, t._start - t._delay);
18266        }
18267
18268        t = next;
18269      }
18270
18271      return duration !== _recordedRoot.duration();
18272    }
18273  },
18274      _buildPlayPauseMorph = function _buildPlayPauseMorph(svg) {
18275    var tl = gsap$j.timeline({
18276      data: "root",
18277      parent: _independentRoot,
18278      onComplete: function onComplete() {
18279        return tl.kill();
18280      }
18281    }, _independentRoot._time);
18282    tl.to(svg.querySelector(".play-1"), {
18283      duration: 0.4,
18284      attr: {
18285        d: "M5.75,3.13 C5.75,9.79 5.75,16.46 5.75,23.13 4.08,23.13 2.41,23.13 0.75,23.13 0.75,16.46 0.75,9.79 0.75,3.12 2.41,3.12 4.08,3.12 5.75,3.12"
18286      },
18287      ease: "power2.inOut",
18288      rotation: 360,
18289      transformOrigin: "50% 50%"
18290    }).to(svg.querySelector(".play-2"), {
18291      duration: 0.4,
18292      attr: {
18293        d: "M16.38,3.13 C16.38,9.79 16.38,16.46 16.38,23.13 14.71,23.13 13.04,23.13 11.38,23.13 11.38,16.46 11.38,9.79 11.38,3.12 13.04,3.12 14.71,3.12 16.38,3.12"
18294      },
18295      ease: "power2.inOut",
18296      rotation: 360,
18297      transformOrigin: "50% 50%"
18298    }, 0.05);
18299    return tl;
18300  },
18301      _buildLoopAnimation = function _buildLoopAnimation(svg) {
18302    var tl = gsap$j.timeline({
18303      data: "root",
18304      id: "loop",
18305      parent: _independentRoot,
18306      paused: true,
18307      onComplete: function onComplete() {
18308        return tl.kill();
18309      }
18310    }, _independentRoot._time);
18311    tl.to(svg, {
18312      duration: 0.5,
18313      rotation: 360,
18314      ease: "power3.inOut",
18315      transformOrigin: "50% 50%"
18316    }).to(svg.querySelectorAll(".loop-path"), {
18317      duration: 0.5,
18318      fill: "#91e600",
18319      ease: "none"
18320    }, 0);
18321    return tl;
18322  },
18323      _getAnimationById = function _getAnimationById(id) {
18324    return gsap$j.getById(id) || _independentRoot.getById(id) || id === _recordedRoot.vars.id && _recordedRoot;
18325  },
18326      _initCore$f = function _initCore(core) {
18327    gsap$j = core || _getGSAP$h();
18328
18329    if (!_coreInitted$f) {
18330      if (gsap$j && _windowExists$9()) {
18331        _doc$7 = document;
18332        _docEl$3 = _doc$7.documentElement;
18333        _win$8 = window;
18334
18335        _context$4 = gsap$j.core.context || function () {};
18336
18337        gsap$j.registerPlugin(Draggable);
18338        _globalTimeline$1 = gsap$j.globalTimeline;
18339        _globalTimeline$1._sort = true;
18340        _globalTimeline$1.autoRemoveChildren = false;
18341        Animation$1 = gsap$j.core.Animation;
18342        _independentRoot = gsap$j.timeline({
18343          data: "indy",
18344          autoRemoveChildren: true,
18345          smoothChildTiming: true
18346        });
18347
18348        _independentRoot.kill();
18349
18350        _independentRoot._dp = 0;
18351
18352        _independentRoot.to({}, {
18353          duration: 1e12
18354        });
18355
18356        _recordedRoot = gsap$j.timeline({
18357          data: "root",
18358          id: "Global Timeline",
18359          autoRemoveChildren: false,
18360          smoothChildTiming: true,
18361          parent: _independentRoot
18362        }, 0);
18363        _rootTween = gsap$j.to(_recordedRoot, {
18364          duration: 1,
18365          time: 1,
18366          ease: "none",
18367          data: "root",
18368          id: "_rootTween",
18369          paused: true,
18370          immediateRender: false,
18371          parent: _independentRoot
18372        }, 0);
18373
18374        _globalTimeline$1.killTweensOf = function (targets, props, onlyActive) {
18375          _recordedRoot.killTweensOf(targets, props, onlyActive);
18376
18377          _recordedRoot.killTweensOf.call(_globalTimeline$1, targets, props, onlyActive);
18378        };
18379
18380        _independentRoot._start = gsap$j.ticker.time;
18381        gsap$j.ticker.add(function (time) {
18382          return _independentRoot.render(time - _independentRoot._start);
18383        });
18384        _globalTimeline$1._start += _globalTimeline$1._time;
18385        _recordedRoot._start = _globalTimeline$1._time = _globalTimeline$1._tTime = 0;
18386
18387        _delayedCall = function _delayedCall(delay, callback, params, scope) {
18388          return gsap$j.to(callback, {
18389            delay: delay,
18390            duration: 0,
18391            onComplete: callback,
18392            onReverseComplete: callback,
18393            onCompleteParams: params,
18394            onReverseCompleteParams: params,
18395            callbackScope: scope,
18396            parent: _independentRoot
18397          }, _independentRoot._time);
18398        };
18399
18400        _delayedCall(0.01, function () {
18401          return _rootInstance ? _rootInstance.update() : _merge$1();
18402        });
18403
18404        _delayedCall(2, function () {
18405          var t, next, offset;
18406
18407          if (!_rootInstance) {
18408            _merge$1();
18409
18410            t = _recordedRoot._first;
18411            offset = _recordedRoot._start;
18412
18413            while (t) {
18414              next = t._next;
18415
18416              if (t._tDur !== t._tTime || !t._dur && t.progress() !== 1) {
18417                _globalTimeline$1.add(t, t._start - t._delay + offset);
18418              } else {
18419                t.kill();
18420              }
18421
18422              t = next;
18423            }
18424          }
18425
18426          if (GSDevTools.globalRecordingTime > 2) {
18427            _delayedCall(GSDevTools.globalRecordingTime - 2, function () {
18428              _rootInstance && _rootInstance.update();
18429              _globalTimeline$1.autoRemoveChildren = true;
18430            });
18431          } else {
18432            _globalTimeline$1.autoRemoveChildren = true;
18433          }
18434
18435          _startupPhase = false;
18436        });
18437
18438        _coreInitted$f = 1;
18439      }
18440    }
18441  },
18442      _checkIndependence = function _checkIndependence(animation, vars) {
18443    if (!vars.globalSync && animation.parent !== _globalTimeline$1) {
18444      _globalTimeline$1.add(animation, _globalTimeline$1.time());
18445    }
18446  },
18447      GSDevTools = function GSDevTools(vars) {
18448    if (!_coreInitted$f) {
18449      _initCore$f();
18450
18451      gsap$j || console.warn("Please gsap.registerPlugin(GSDevTools)");
18452    }
18453
18454    this.vars = vars = vars || {};
18455
18456    if (vars.animation) {
18457      (GSDevTools.getByAnimation(vars.animation) || {
18458        kill: function kill() {
18459          return 0;
18460        }
18461      }).kill();
18462    }
18463
18464    vars.id = vars.id || (_isString$5(vars.animation) ? vars.animation : _idSeed++);
18465    _lookup$1[vars.id + ""] = this;
18466    "globalSync" in vars || (vars.globalSync = !vars.animation);
18467
18468    var _self = this,
18469        root = _createRootElement(vars.container, vars.minimal, vars.css),
18470        find = function find(s) {
18471      return root.querySelector(s);
18472    },
18473        record = function record(key, value) {
18474      if (vars.persist !== false && _supportsStorage) {
18475        sessionStorage.setItem("gs-dev-" + key + vars.id, value);
18476      }
18477
18478      return value;
18479    },
18480        recall = function recall(key) {
18481      var value;
18482
18483      if (vars.persist !== false && _supportsStorage) {
18484        value = sessionStorage.getItem("gs-dev-" + key + vars.id);
18485        return key === "animation" ? value : key === "loop" ? value === "true" : parseFloat(value);
18486      }
18487    },
18488        playhead = find(".playhead"),
18489        timelineTrack = find(".timeline-track"),
18490        progressBar = find(".progress-bar"),
18491        timeLabel = find(".time"),
18492        durationLabel = find(".duration"),
18493        pixelToTimeRatio,
18494        timeAtDragStart,
18495        dragged,
18496        skipDragUpdates,
18497        progress = 0,
18498        inPoint = find(".in-point"),
18499        outPoint = find(".out-point"),
18500        inProgress = 0,
18501        outProgress = 100,
18502        pausedWhenDragStarted,
18503        list = find(".animation-list"),
18504        animationLabel = find(".animation-label"),
18505        selectedAnimation,
18506        linkedAnimation,
18507        declaredAnimation,
18508        startTime,
18509        endTime,
18510        _fullyInitialized,
18511        keyboardHandler,
18512        playPauseButton = find(".play-pause"),
18513        playPauseMorph = _buildPlayPauseMorph(playPauseButton),
18514        paused = false,
18515        loopButton = find(".loop"),
18516        loopAnimation = _buildLoopAnimation(loopButton),
18517        loopEnabled,
18518        timeScale = find(".time-scale select"),
18519        timeScaleLabel = find(".time-scale-label"),
18520        onPressTimeline = function onPressTimeline(element, originRatio, limitToInOut) {
18521      return function (e) {
18522        var trackBounds = timelineTrack.getBoundingClientRect(),
18523            elementBounds = element.getBoundingClientRect(),
18524            left = elementBounds.width * originRatio,
18525            x = gsap$j.getProperty(element, "x"),
18526            minX = trackBounds.left - elementBounds.left - left + x,
18527            maxX = trackBounds.right - elementBounds.right + (elementBounds.width - left) + x,
18528            unlimitedMinX = minX,
18529            limitBounds;
18530
18531        if (limitToInOut) {
18532          if (element !== inPoint) {
18533            limitBounds = inPoint.getBoundingClientRect();
18534
18535            if (limitBounds.left) {
18536              minX += limitBounds.left + limitBounds.width - trackBounds.left;
18537            }
18538          }
18539
18540          if (element !== outPoint) {
18541            limitBounds = outPoint.getBoundingClientRect();
18542
18543            if (limitBounds.left) {
18544              maxX -= trackBounds.left + trackBounds.width - limitBounds.left;
18545            }
18546          }
18547        }
18548
18549        pausedWhenDragStarted = paused;
18550        this.applyBounds({
18551          minX: minX,
18552          maxX: maxX
18553        });
18554        pixelToTimeRatio = linkedAnimation.duration() / trackBounds.width;
18555        timeAtDragStart = -unlimitedMinX * pixelToTimeRatio;
18556
18557        if (!skipDragUpdates) {
18558          linkedAnimation.pause(timeAtDragStart + pixelToTimeRatio * this.x);
18559        } else {
18560          linkedAnimation.pause();
18561        }
18562
18563        if (this.target === playhead) {
18564          if (this.activated) {
18565            this.allowEventDefault = false;
18566          }
18567
18568          this.activated = true;
18569        }
18570
18571        dragged = true;
18572      };
18573    },
18574        progressDrag = Draggable.create(playhead, {
18575      type: "x",
18576      cursor: "ew-resize",
18577      allowNativeTouchScrolling: false,
18578      allowEventDefault: true,
18579      onPress: onPressTimeline(playhead, 0.5, true),
18580      onDrag: function onDrag() {
18581        var time = timeAtDragStart + pixelToTimeRatio * this.x;
18582
18583        if (time < 0) {
18584          time = 0;
18585        } else if (time > linkedAnimation._dur) {
18586          time = linkedAnimation._dur;
18587        }
18588
18589        if (!skipDragUpdates) {
18590          linkedAnimation.time(time);
18591        }
18592
18593        progressBar.style.width = Math.min(outProgress - inProgress, Math.max(0, time / linkedAnimation._dur * 100 - inProgress)) + "%";
18594        timeLabel.innerHTML = time.toFixed(2);
18595      },
18596      onRelease: function onRelease() {
18597        paused || linkedAnimation.resume();
18598      }
18599    })[0],
18600        resetInOut = function resetInOut() {
18601      inProgress = 0;
18602      outProgress = 100;
18603      inPoint.style.left = "0%";
18604      outPoint.style.left = "100%";
18605      record("in", inProgress);
18606      record("out", outProgress);
18607      updateProgress(true);
18608    },
18609        inDrag = Draggable.create(inPoint, {
18610      type: "x",
18611      cursor: "ew-resize",
18612      zIndexBoost: false,
18613      allowNativeTouchScrolling: false,
18614      allowEventDefault: true,
18615      onPress: onPressTimeline(inPoint, 1, true),
18616      onDoubleClick: resetInOut,
18617      onDrag: function onDrag() {
18618        inProgress = (timeAtDragStart + pixelToTimeRatio * this.x) / linkedAnimation.duration() * 100;
18619        linkedAnimation.progress(inProgress / 100);
18620        updateProgress(true);
18621      },
18622      onRelease: function onRelease() {
18623        if (inProgress < 0) {
18624          inProgress = 0;
18625        }
18626
18627        _clearSelection();
18628
18629        inPoint.style.left = inProgress + "%";
18630        record("in", inProgress);
18631        gsap$j.set(inPoint, {
18632          x: 0,
18633          data: "root",
18634          display: "block"
18635        });
18636
18637        if (!paused) {
18638          linkedAnimation.resume();
18639        }
18640      }
18641    })[0],
18642        outDrag = Draggable.create(outPoint, {
18643      type: "x",
18644      cursor: "ew-resize",
18645      allowNativeTouchScrolling: false,
18646      allowEventDefault: true,
18647      zIndexBoost: false,
18648      onPress: onPressTimeline(outPoint, 0, true),
18649      onDoubleClick: resetInOut,
18650      onDrag: function onDrag() {
18651        outProgress = (timeAtDragStart + pixelToTimeRatio * this.x) / linkedAnimation.duration() * 100;
18652        linkedAnimation.progress(outProgress / 100);
18653        updateProgress(true);
18654      },
18655      onRelease: function onRelease() {
18656        if (outProgress > 100) {
18657          outProgress = 100;
18658        }
18659
18660        _clearSelection();
18661
18662        outPoint.style.left = outProgress + "%";
18663        record("out", outProgress);
18664        gsap$j.set(outPoint, {
18665          x: 0,
18666          data: "root",
18667          display: "block"
18668        });
18669
18670        if (!pausedWhenDragStarted) {
18671          play();
18672          linkedAnimation.resume();
18673        }
18674      }
18675    })[0],
18676        updateProgress = function updateProgress(force) {
18677      if (progressDrag.isPressed && force !== true) {
18678        return;
18679      }
18680
18681      var p = !loopEnabled && selectedAnimation._repeat === -1 ? selectedAnimation.totalTime() / selectedAnimation.duration() * 100 : linkedAnimation.progress() * 100 || 0,
18682          repeatDelayPhase = selectedAnimation._repeat && selectedAnimation._rDelay && selectedAnimation.totalTime() % (selectedAnimation.duration() + selectedAnimation._rDelay) > selectedAnimation.duration(),
18683          target;
18684
18685      if (p > 100) {
18686        p = 100;
18687      }
18688
18689      if (p >= outProgress) {
18690        if (loopEnabled && !linkedAnimation.paused() && !progressDrag.isDragging) {
18691          if (!repeatDelayPhase) {
18692            p = inProgress;
18693            target = linkedAnimation._targets && linkedAnimation._targets[0];
18694
18695            if (target === selectedAnimation) {
18696              target.seek(startTime + (endTime - startTime) * inProgress / 100);
18697            }
18698
18699            if (selectedAnimation._repeat > 0 && !inProgress && outProgress === 100) {
18700              if (selectedAnimation.totalProgress() === 1) {
18701                linkedAnimation.totalProgress(0, true).resume();
18702              }
18703            } else {
18704              linkedAnimation.progress(p / 100, true).resume();
18705            }
18706          }
18707        } else {
18708          if (p !== outProgress || selectedAnimation._repeat === -1) {
18709            p = outProgress;
18710            linkedAnimation.progress(p / 100);
18711          }
18712
18713          if (!paused && (outProgress < 100 || selectedAnimation.totalProgress() === 1 || selectedAnimation._repeat === -1)) {
18714            pause();
18715          }
18716        }
18717      } else if (p < inProgress) {
18718        p = inProgress;
18719        linkedAnimation.progress(p / 100, true);
18720      }
18721
18722      if (p !== progress || force === true) {
18723        progressBar.style.left = inProgress + "%";
18724        progressBar.style.width = Math.max(0, p - inProgress) + "%";
18725        playhead.style.left = p + "%";
18726        timeLabel.innerHTML = linkedAnimation._time.toFixed(2);
18727        durationLabel.innerHTML = linkedAnimation._dur.toFixed(2);
18728
18729        if (dragged) {
18730          playhead.style.transform = "translate(-50%,0)";
18731          playhead._gsap.x = "0px";
18732          playhead._gsap.xPercent = -50;
18733          dragged = false;
18734        }
18735
18736        progress = p;
18737      }
18738
18739      linkedAnimation.paused() !== paused && togglePlayPause();
18740    },
18741        onPressSeekBar = function onPressSeekBar(e) {
18742      if (progressDrag.isPressed) {
18743        return;
18744      }
18745
18746      var bounds = e.target.getBoundingClientRect(),
18747          x = (e.changedTouches ? e.changedTouches[0] : e).clientX,
18748          p = (x - bounds.left) / bounds.width * 100;
18749
18750      if (p < inProgress) {
18751        inProgress = p = Math.max(0, p);
18752        inPoint.style.left = inProgress + "%";
18753        inDrag.startDrag(e);
18754        return;
18755      } else if (p > outProgress) {
18756        outProgress = p = Math.min(100, p);
18757        outPoint.style.left = outProgress + "%";
18758        outDrag.startDrag(e);
18759        return;
18760      }
18761
18762      linkedAnimation.progress(p / 100).pause();
18763      updateProgress(true);
18764      progressDrag.startDrag(e);
18765    },
18766        play = function play() {
18767      if (linkedAnimation.progress() >= outProgress / 100) {
18768        _checkIndependence(linkedAnimation, vars);
18769
18770        var target = linkedAnimation._targets && linkedAnimation._targets[0];
18771
18772        if (target === selectedAnimation) {
18773          target.seek(startTime + (endTime - startTime) * inProgress / 100);
18774        }
18775
18776        if (linkedAnimation._repeat && !inProgress) {
18777          linkedAnimation.totalProgress(0, true);
18778        } else if (!linkedAnimation.reversed()) {
18779          linkedAnimation.progress(inProgress / 100, true);
18780        }
18781      }
18782
18783      playPauseMorph.play();
18784      linkedAnimation.resume();
18785
18786      if (paused) {
18787        _self.update();
18788      }
18789
18790      paused = false;
18791    },
18792        pause = function pause() {
18793      playPauseMorph.reverse();
18794
18795      if (linkedAnimation) {
18796        linkedAnimation.pause();
18797      }
18798
18799      paused = true;
18800    },
18801        togglePlayPause = function togglePlayPause() {
18802      if (paused) {
18803        play();
18804      } else {
18805        pause();
18806      }
18807    },
18808        onPressRewind = function onPressRewind(e) {
18809      if (progressDrag.isPressed) {
18810        return;
18811      }
18812
18813      _checkIndependence(linkedAnimation, vars);
18814
18815      var target = linkedAnimation._targets && linkedAnimation._targets[0];
18816
18817      if (target === selectedAnimation) {
18818        target.seek(startTime + (endTime - startTime) * inProgress / 100);
18819      }
18820
18821      linkedAnimation.progress(inProgress / 100, true);
18822
18823      if (!paused) {
18824        linkedAnimation.resume();
18825      }
18826    },
18827        loop = function loop(value) {
18828      loopEnabled = value;
18829      record("loop", loopEnabled);
18830
18831      if (loopEnabled) {
18832        loopAnimation.play();
18833
18834        if (linkedAnimation.progress() >= outProgress / 100) {
18835          var target = linkedAnimation._targets && linkedAnimation._targets[0];
18836
18837          if (target === selectedAnimation) {
18838            target.seek(startTime + (endTime - startTime) * inProgress / 100);
18839          }
18840
18841          if (selectedAnimation._repeat && !inProgress && outProgress === 100) {
18842            linkedAnimation.totalProgress(0, true);
18843          } else {
18844            linkedAnimation.progress(inProgress / 100, true);
18845          }
18846
18847          play();
18848        }
18849      } else {
18850        loopAnimation.reverse();
18851      }
18852    },
18853        toggleLoop = function toggleLoop() {
18854      return loop(!loopEnabled);
18855    },
18856        updateList = function updateList() {
18857      var animations = _getChildrenOf(declaredAnimation && !vars.globalSync ? declaredAnimation : _recordedRoot, true),
18858          options = list.children,
18859          matches = 0,
18860          option,
18861          i;
18862
18863      if (declaredAnimation && !vars.globalSync) {
18864        animations.unshift(declaredAnimation);
18865      } else if (!vars.hideGlobalTimeline) {
18866        animations.unshift(_recordedRoot);
18867      }
18868
18869      for (i = 0; i < animations.length; i++) {
18870        option = options[i] || _createElement$2("option", list);
18871        option.animation = animations[i];
18872        matches = i && animations[i].vars.id === animations[i - 1].vars.id ? matches + 1 : 0;
18873        option.setAttribute("value", option.innerHTML = animations[i].vars.id + (matches ? " [" + matches + "]" : animations[i + 1] && animations[i + 1].vars.id === animations[i].vars.id ? " [0]" : ""));
18874      }
18875
18876      for (; i < options.length; i++) {
18877        list.removeChild(options[i]);
18878      }
18879    },
18880        animation = function animation(anim) {
18881      var ts = parseFloat(timeScale.options[timeScale.selectedIndex].value) || 1,
18882          tl,
18883          maxDuration;
18884
18885      if (!arguments.length) {
18886        return selectedAnimation;
18887      }
18888
18889      if (_isString$5(anim)) {
18890        anim = _getAnimationById(anim);
18891      }
18892
18893      if (!(anim instanceof Animation$1)) {
18894        console.warn("GSDevTools error: invalid animation.");
18895      }
18896
18897      if (anim.scrollTrigger) {
18898        console.warn("GSDevTools can't work with ScrollTrigger-based animations; either the scrollbar -OR- the GSDevTools scrubber can control the animation.");
18899      }
18900
18901      if (anim === selectedAnimation) {
18902        return;
18903      }
18904
18905      if (selectedAnimation) {
18906        selectedAnimation._inProgress = inProgress;
18907        selectedAnimation._outProgress = outProgress;
18908      }
18909
18910      selectedAnimation = anim;
18911
18912      if (linkedAnimation) {
18913        ts = linkedAnimation.timeScale();
18914
18915        if (linkedAnimation._targets && linkedAnimation._targets[0] === declaredAnimation) {
18916          declaredAnimation.resume();
18917          linkedAnimation.kill();
18918        }
18919      }
18920
18921      inProgress = selectedAnimation._inProgress || 0;
18922      outProgress = selectedAnimation._outProgress || 100;
18923      inPoint.style.left = inProgress + "%";
18924      outPoint.style.left = outProgress + "%";
18925
18926      if (_fullyInitialized) {
18927        record("animation", selectedAnimation.vars.id);
18928        record("in", inProgress);
18929        record("out", outProgress);
18930      }
18931
18932      startTime = 0;
18933      maxDuration = vars.maxDuration || Math.min(1000, _getClippedDuration(selectedAnimation));
18934
18935      if (selectedAnimation === _recordedRoot || vars.globalSync) {
18936        _merge$1();
18937
18938        linkedAnimation = _rootTween;
18939        _rootInstance && _rootInstance !== _self && console.warn("Error: GSDevTools can only have one instance that's globally synchronized.");
18940        _rootInstance = _self;
18941
18942        if (selectedAnimation !== _recordedRoot) {
18943          tl = selectedAnimation;
18944          endTime = tl.totalDuration();
18945
18946          if (endTime > 99999999) {
18947            endTime = tl.duration();
18948          }
18949
18950          while (tl.parent) {
18951            startTime = startTime / tl._ts + tl._start;
18952            endTime = endTime / tl._ts + tl._start;
18953            tl = tl.parent;
18954          }
18955        } else {
18956          endTime = _recordedRoot.duration();
18957        }
18958
18959        if (endTime - startTime > maxDuration) {
18960          endTime = startTime + maxDuration;
18961        }
18962
18963        _recordedRoot.pause(startTime);
18964
18965        _rootTween.vars.time = endTime;
18966
18967        _rootTween.invalidate();
18968
18969        _rootTween.duration(endTime - startTime).timeScale(ts);
18970
18971        if (paused) {
18972          _rootTween.progress(1, true).pause(0, true);
18973        } else {
18974          _delayedCall(0.01, function () {
18975            _rootTween.resume().progress(inProgress / 100);
18976
18977            paused && play();
18978          });
18979        }
18980      } else {
18981        if (_rootInstance === _self) {
18982          _rootInstance = null;
18983        }
18984
18985        startTime = Math.min(inProgress * selectedAnimation.duration(), selectedAnimation.time());
18986
18987        if (selectedAnimation === declaredAnimation || !declaredAnimation) {
18988          linkedAnimation = selectedAnimation;
18989
18990          if (!loopEnabled && linkedAnimation._repeat) {
18991            loop(true);
18992          }
18993        } else {
18994          tl = selectedAnimation;
18995          endTime = tl.totalDuration();
18996
18997          if (endTime > 99999999) {
18998            endTime = tl.duration();
18999          }
19000
19001          while (tl.parent
19001.parent && tl !== declaredAnimation) {
19002            startTime = startTime / (tl._ts || tl._pauseTS) + tl._start;
19003            endTime = endTime / (tl._ts || tl._pauseTS
vendor: 11,468 bytes, lines 19003-19396
19003) + tl._start;
19004            tl = tl.parent;
19005          }
19006
19007          if (endTime - startTime > maxDuration) {
19008            endTime = startTime + maxDuration;
19009          }
19010
19011          declaredAnimation.pause(startTime);
19012          linkedAnimation = gsap$j.to(declaredAnimation, {
19013            duration: endTime - startTime,
19014            time: endTime,
19015            ease: "none",
19016            data: "root",
19017            parent: _independentRoot
19018          }, _independentRoot._time);
19019        }
19020
19021        linkedAnimation.timeScale(ts);
19022
19023        _rootTween.pause();
19024
19025        _recordedRoot.resume();
19026
19027        linkedAnimation.seek(0);
19028      }
19029
19030      durationLabel.innerHTML = linkedAnimation.duration().toFixed(2);
19031
19032      _selectValue(list, selectedAnimation.vars.id, animationLabel);
19033    },
19034        updateRootDuration = function updateRootDuration() {
19035      var time, ratio, duration;
19036
19037      if (selectedAnimation === _recordedRoot) {
19038        time = _recordedRoot._time;
19039
19040        _recordedRoot.progress(1, true).time(time, true);
19041
19042        time = (_rootTween._dp._time - _rootTween._start) * _rootTween._ts;
19043        duration = Math.min(1000, _recordedRoot.duration());
19044
19045        if (duration === 1000) {
19046          duration = Math.min(1000, _getClippedDuration(_recordedRoot));
19047        }
19048
19049        ratio = _rootTween.duration() / duration;
19050
19051        if (ratio !== 1 && duration) {
19052          inProgress *= ratio;
19053
19054          if (outProgress < 100) {
19055            outProgress *= ratio;
19056          }
19057
19058          _rootTween.seek(0);
19059
19060          _rootTween.vars.time = duration;
19061
19062          _rootTween.invalidate();
19063
19064          _rootTween.duration(duration);
19065
19066          _rootTween.time(time);
19067
19068          durationLabel.innerHTML = duration.toFixed(2);
19069          inPoint.style.left = inProgress + "%";
19070          outPoint.style.left = outProgress + "%";
19071          updateProgress(true);
19072        }
19073      }
19074    },
19075        onChangeAnimation = function onChangeAnimation(e) {
19076      animation(list.options[list.selectedIndex].animation);
19077
19078      if (e.target && e.target.blur) {
19079        e.target.blur();
19080      }
19081
19082      paused && play();
19083    },
19084        onChangeTimeScale = function onChangeTimeScale(e) {
19085      var ts = parseFloat(timeScale.options[timeScale.selectedIndex].value) || 1,
19086          target;
19087      linkedAnimation.timeScale(ts);
19088      record("timeScale", ts);
19089
19090      if (!paused) {
19091        if (linkedAnimation.progress() >= outProgress / 100) {
19092          target = linkedAnimation._targets && linkedAnimation._targets[0];
19093
19094          if (target === selectedAnimation) {
19095            target.seek(startTime + (endTime - startTime) * inProgress / 100);
19096          }
19097
19098          linkedAnimation.progress(inProgress / 100, true).pause();
19099        } else {
19100          linkedAnimation.pause();
19101        }
19102
19103        _delayedCall(0.01, function () {
19104          return linkedAnimation.resume();
19105        });
19106      }
19107
19108      timeScaleLabel.innerHTML = ts + "x";
19109
19110      if (timeScale.blur) {
19111        timeScale.blur();
19112      }
19113    },
19114        autoHideTween = gsap$j.to([find(".gs-bottom"), find(".gs-top")], {
19115      duration: 0.3,
19116      autoAlpha: 0,
19117      y: 50,
19118      ease: "power2.in",
19119      data: "root",
19120      paused: true,
19121      parent: _independentRoot
19122    }, _independentRoot._time),
19123        hidden = false,
19124        onMouseOut = function onMouseOut(e) {
19125      if (!Draggable.hitTest(e, root) && !progressDrag.isDragging && !inDrag.isDragging && !outDrag.isDragging) {
19126        autoHideDelayedCall.restart(true);
19127      }
19128    },
19129        hide = function hide() {
19130      if (!hidden) {
19131        autoHideTween.play();
19132        autoHideDelayedCall.pause();
19133        hidden = true;
19134      }
19135    },
19136        show = function show() {
19137      autoHideDelayedCall.pause();
19138
19139      if (hidden) {
19140        autoHideTween.reverse();
19141        hidden = false;
19142      }
19143    },
19144        toggleHide = function toggleHide() {
19145      if (hidden) {
19146        show();
19147      } else {
19148        hide();
19149      }
19150    },
19151        autoHideDelayedCall = _delayedCall(1.3, hide).pause(),
19152        initialize = function initialize(preliminary) {
19153      if (_startupPhase && !_globalStartTime) {
19154        _globalStartTime = _recordedRoot._start;
19155      }
19156
19157      _fullyInitialized = !preliminary;
19158      declaredAnimation = _parseAnimation(vars.animation);
19159
19160      if (declaredAnimation && !declaredAnimation.vars.id) {
19161        declaredAnimation.vars.id = "[no id]";
19162      }
19163
19164      _merge$1();
19165
19166      updateList();
19167
19168      var savedAnimation = _getAnimationById(recall("animation"));
19169
19170      if (savedAnimation) {
19171        savedAnimation._inProgress = recall("in") || 0;
19172        savedAnimation._outProgress = recall("out") || 100;
19173      }
19174
19175      vars.paused && pause();
19176      selectedAnimation = null;
19177      animation(declaredAnimation || savedAnimation || _recordedRoot);
19178      var ts = vars.timeScale || recall("timeScale"),
19179          savedInOut = savedAnimation === selectedAnimation;
19180
19181      if (ts) {
19182        _selectValue(timeScale, ts, timeScaleLabel, ts + "x");
19183
19184        linkedAnimation.timeScale(ts);
19185      }
19186
19187      inProgress = ("inTime" in vars ? _timeToProgress(vars.inTime, selectedAnimation, 0, 0) : savedInOut ? savedAnimation._inProgress : 0) || 0;
19188
19189      if (inProgress === 100 && !vars.animation && savedAnimation) {
19190        animation(_recordedRoot);
19191        inProgress = _timeToProgress(vars.inTime, selectedAnimation, 0, 0) || 0;
19192      }
19193
19194      if (inProgress) {
19195        inPoint.style.left = inProgress + "%";
19196        inPoint.style.display = outPoint.style.display = "block";
19197      }
19198
19199      outProgress = ("outTime" in vars ? _timeToProgress(vars.outTime, selectedAnimation, 100, inProgress) : savedInOut ? savedAnimation._outProgress : 0) || 100;
19200
19201      if (outProgress < inProgress) {
19202        outProgress = 100;
19203      }
19204
19205      if (outProgress !== 100) {
19206        outPoint.style.left = outProgress + "%";
19207        inPoint.style.display = outPoint.style.display = "block";
19208      }
19209
19210      loopEnabled = "loop" in vars ? vars.loop : recall("loop");
19211      loopEnabled && loop(true);
19212      vars.paused && linkedAnimation.progress(inProgress / 100, true).pause();
19213
19214      if (_startupPhase && selectedAnimation === _recordedRoot && _globalStartTime && vars.globalSync && !paused) {
19215        linkedAnimation.time(-_globalStartTime, true);
19216      }
19217
19218      updateProgress(true);
19219    };
19220
19221    _addListener$3(list, "change", onChangeAnimation);
19222
19223    _addListener$3(list, "mousedown", updateList);
19224
19225    _addListener$3(playPauseButton, "mousedown", togglePlayPause);
19226
19227    _addListener$3(find(".seek-bar"), "mousedown", onPressSeekBar);
19228
19229    _addListener$3(find(".rewind"), "mousedown", onPressRewind);
19230
19231    _addListener$3(loopButton, "mousedown", toggleLoop);
19232
19233    _addListener$3(timeScale, "change", onChangeTimeScale);
19234
19235    if (vars.visibility === "auto") {
19236      _addListener$3(root, "mouseout", onMouseOut);
19237
19238      _addListener$3(root, "mouseover", show);
19239    } else if (vars.visibility === "hidden") {
19240      hidden = true;
19241      autoHideTween.progress(1);
19242    }
19243
19244    if (vars.keyboard !== false) {
19245      if (_keyboardInstance && vars.keyboard) {
19246        console.warn("[GSDevTools warning] only one instance can be affected by keyboard shortcuts. There is already one active.");
19247      } else {
19248        _keyboardInstance = _self;
19249
19250        keyboardHandler = function keyboardHandler(e) {
19251          var key = e.keyCode ? e.keyCode : e.which,
19252              ts;
19253
19254          if (key === 32) {
19255            togglePlayPause();
19256          } else if (key === 38) {
19257            ts = parseFloat(_shiftSelectedValue(timeScale, -1, timeScaleLabel));
19258            linkedAnimation.timeScale(ts);
19259            record("timeScale", ts);
19260          } else if (key === 40) {
19261            ts = parseFloat(_shiftSelectedValue(timeScale, 1, timeScaleLabel));
19262            linkedAnimation.timeScale(ts);
19263            record("timeScale", ts);
19264          } else if (key === 37) {
19265            onPressRewind();
19266          } else if (key === 39) {
19267            linkedAnimation.progress(outProgress / 100);
19268          } else if (key === 76) {
19269            toggleLoop();
19270          } else if (key === 72) {
19271            toggleHide();
19272          } else if (key === 73) {
19273            inProgress = linkedAnimation.progress() * 100;
19274            record("in", inProgress);
19275            inPoint.style.left = inProgress + "%";
19276            updateProgress(true);
19277          } else if (key === 79) {
19278            outProgress = linkedAnimation.progress() * 100;
19279            record("out", outProgress);
19280            outPoint.style.left = outProgress + "%";
19281            updateProgress(true);
19282          }
19283        };
19284
19285        _addListener$3(_docEl$3, "keydown", keyboardHandler);
19286      }
19287    }
19288
19289    gsap$j.set(playhead, {
19290      xPercent: -50,
19291      x: 0,
19292      data: "root"
19293    });
19294    gsap$j.set(inPoint, {
19295      xPercent: -100,
19296      x: 0,
19297      data: "root"
19298    });
19299    inPoint._gsIgnore = outPoint._gsIgnore = playhead._gsIgnore = playPauseButton._gsIgnore = loopButton._gsIgnore = true;
19300    gsap$j.killTweensOf([inPoint, outPoint, playhead]);
19301    initialize(_startupPhase);
19302
19303    if (_startupPhase) {
19304      _delayedCall(0.0001, initialize, [false], this);
19305    }
19306
19307    gsap$j.ticker.add(updateProgress);
19308
19309    this.update = function (forceMerge) {
19310      if (_rootInstance === _self) {
19311        if (!_rootTween.paused() || forceMerge) {
19312          _merge$1();
19313        }
19314
19315        updateRootDuration();
19316      }
19317    };
19318
19319    this.kill = this.revert = function () {
19320      _removeListener$3(list, "change", onChangeAnimation);
19321
19322      _removeListener$3(list, "mousedown", updateList);
19323
19324      _removeListener$3(playPauseButton, "mousedown", togglePlayPause);
19325
19326      _removeListener$3(find(".seek-bar"), "mousedown", onPressSeekBar);
19327
19328      _removeListener$3(find(".rewind"), "mousedown", onPressRewind);
19329
19330      _removeListener$3(loopButton, "mousedown", toggleLoop);
19331
19332      _removeListener$3(timeScale, "change", onChangeTimeScale);
19333
19334      progressDrag.disable();
19335      inDrag.disable();
19336      outDrag.disable();
19337      gsap$j.ticker.remove(updateProgress);
19338
19339      _removeListener$3(root, "mouseout", onMouseOut);
19340
19341      _removeListener$3(root, "mouseover", show);
19342
19343      root.parentNode.removeChild(root);
19344
19345      if (_rootInstance === _self) {
19346        _rootInstance = null;
19347      }
19348
19349      if (_keyboardInstance === _self) {
19350        _keyboardInstance = null;
19351
19352        _removeListener$3(_docEl$3, "keydown", keyboardHandler);
19353      }
19354
19355      delete _lookup$1[vars.id + ""];
19356    };
19357
19358    this.minimal = function (value) {
19359      var isMinimal = root.classList.contains("minimal"),
19360          p;
19361
19362      if (!arguments.length || isMinimal === value) {
19363        return isMinimal;
19364      }
19365
19366      if (value) {
19367        root.classList.add("minimal");
19368      } else {
19369        root.classList.remove("minimal");
19370      }
19371
19372      if (vars.container) {
19373        root.style.top = value ? "calc(100% - 42px)" : "calc(100% - 51px)";
19374      }
19375
19376      if (progressDrag.isPressed) {
19377        skipDragUpdates = true;
19378        progressDrag.endDrag(progressDrag.pointerEvent);
19379        skipDragUpdates = false;
19380        p = linkedAnimation.progress() * 100;
19381        progressBar.style.width = Math.max(0, p - inProgress) + "%";
19382        playhead.style.left = p + "%";
19383        playhead.style.transform = "translate(-50%,0)";
19384        playhead._gsap.x = "0px";
19385        playhead._gsap.xPercent = -50;
19386        progressDrag.startDrag(progressDrag.pointerEvent, true);
19387      }
19388    };
19389
19390    this.animation = animation;
19391    this.updateList = updateList;
19392
19393    _context$4(this);
19394  };
19395
19396  GSDevTools.version = "3.1
vendor: 6,582 bytes, lines 19396-19667
193962.5";
19397  GSDevTools.globalRecordingTime = 2;
19398
19399  GSDevTools.getById = function (id) {
19400    return id ? _lookup$1[id] : _rootInstance;
19401  };
19402
19403  GSDevTools.getByAnimation = function (animation) {
19404    if (_isString$5(animation)) {
19405      animation = gsap$j.getById(animation);
19406    }
19407
19408    for (var p in _lookup$1) {
19409      if (_lookup$1[p].animation() === animation) {
19410        return _lookup$1[p];
19411      }
19412    }
19413  };
19414
19415  GSDevTools.create = function (vars) {
19416    return new GSDevTools(vars);
19417  };
19418
19419  GSDevTools.register = _initCore$f;
19420  _getGSAP$h() && gsap$j.registerPlugin(GSDevTools);
19421
19422  var gsap$k,
19423      _coreInitted$g,
19424      _toArray$6,
19425      _getUnit$3,
19426      _first,
19427      _ticker$1,
19428      _time1$1,
19429      _time2$1,
19430      _getCache$1,
19431      _getGSAP$i = function _getGSAP() {
19432    return gsap$k || typeof window !== "undefined" && (gsap$k = window.gsap);
19433  },
19434      _lookup$2 = {},
19435      _round$9 = function _round(value) {
19436    return Math.round(value * 10000) / 10000;
19437  },
19438      _getID$1 = function _getID(target) {
19439    return _getCache$1(target).id;
19440  },
19441      _getByTarget = function _getByTarget(target) {
19442    return _lookup$2[_getID$1(typeof target === "string" ? _toArray$6(target)[0] : target)];
19443  },
19444      _onTick = function _onTick(time) {
19445    var pt = _first,
19446        val;
19447
19448    if (time - _time1$1 >= 0.05) {
19449      _time2$1 = _time1$1;
19450      _time1$1 = time;
19451
19452      while (pt) {
19453        val = pt.g(pt.t, pt.p);
19454
19455        if (val !== pt.v1 || time - pt.t1 > 0.2) {
19456          pt.v2 = pt.v1;
19457          pt.v1 = val;
19458          pt.t2 = pt.t1;
19459          pt.t1 = time;
19460        }
19461
19462        pt = pt._next;
19463      }
19464    }
19465  },
19466      _types$1 = {
19467    deg: 360,
19468    rad: Math.PI * 2
19469  },
19470      _initCore$g = function _initCore() {
19471    gsap$k = _getGSAP$i();
19472
19473    if (gsap$k) {
19474      _toArray$6 = gsap$k.utils.toArray;
19475      _getUnit$3 = gsap$k.utils.getUnit;
19476      _getCache$1 = gsap$k.core.getCache;
19477      _ticker$1 = gsap$k.ticker;
19478      _coreInitted$g = 1;
19479    }
19480  };
19481
19482  var PropTracker = function PropTracker(target, property, type, next) {
19483    this.t = target;
19484    this.p = property;
19485    this.g = target._gsap.get;
19486    this.rCap = _types$1[type || _getUnit$3(this.g(target, property))];
19487    this.v1 = this.v2 = 0;
19488    this.t1 = this.t2 = _ticker$1.time;
19489
19490    if (next) {
19491      this._next = next;
19492      next._prev = this;
19493    }
19494  };
19495
19496  var VelocityTracker = function () {
19497    function VelocityTracker(target, property) {
19498      if (!_coreInitted$g) {
19499        _initCore$g();
19500      }
19501
19502      this.target = _toArray$6(target)[0];
19503      _lookup$2[_getID$1(this.target)] = this;
19504      this._props = {};
19505      property && this.add(property);
19506    }
19507
19508    VelocityTracker.register = function register(core) {
19509      gsap$k = core;
19510
19511      _initCore$g();
19512    };
19513
19514    var _proto = VelocityTracker.prototype;
19515
19516    _proto.get = function get(property, skipRecentTick) {
19517      var pt = this._props[property] || console.warn("Not tracking " + property + " velocity."),
19518          val,
19519          dif,
19520          rotationCap;
19521      val = parseFloat(skipRecentTick ? pt.v1 : pt.g(pt.t, pt.p));
19522      dif = val - parseFloat(pt.v2);
19523      rotationCap = pt.rCap;
19524
19525      if (rotationCap) {
19526        dif = dif % rotationCap;
19527
19528        if (dif !== dif % (rotationCap / 2)) {
19529          dif = dif < 0 ? dif + rotationCap : dif - rotationCap;
19530        }
19531      }
19532
19533      return _round$9(dif / ((skipRecentTick ? pt.t1 : _ticker$1.time) - pt.t2));
19534    };
19535
19536    _proto.getAll = function getAll() {
19537      var result = {},
19538          props = this._props,
19539          p;
19540
19541      for (p in props) {
19542        result[p] = this.get(p);
19543      }
19544
19545      return result;
19546    };
19547
19548    _proto.isTracking = function isTracking(property) {
19549      return property in this._props;
19550    };
19551
19552    _proto.add = function add(property, type) {
19553      if (!(property in this._props)) {
19554        if (!_first) {
19555          _ticker$1.add(_onTick);
19556
19557          _time1$1 = _time2$1 = _ticker$1.time;
19558        }
19559
19560        _first = this._props[property] = new PropTracker(this.target, property, type, _first);
19561      }
19562    };
19563
19564    _proto.remove = function remove(property) {
19565      var pt = this._props[property],
19566          prev,
19567          next;
19568
19569      if (pt) {
19570        prev = pt._prev;
19571        next = pt._next;
19572
19573        if (prev) {
19574          prev._next = next;
19575        }
19576
19577        if (next) {
19578          next._prev = prev;
19579        } else if (_first === pt) {
19580          _ticker$1.remove(_onTick);
19581
19582          _first = 0;
19583        }
19584
19585        delete this._props[property];
19586      }
19587    };
19588
19589    _proto.kill = function kill(shallow) {
19590      for (var p in this._props) {
19591        this.remove(p);
19592      }
19593
19594      if (!shallow) {
19595        delete _lookup$2[_getID$1(this.target)];
19596      }
19597    };
19598
19599    VelocityTracker.track = function track(targets, properties, types) {
19600      if (!_coreInitted$g) {
19601        _initCore$g();
19602      }
19603
19604      var result = [],
19605          targs = _toArray$6(targets),
19606          a = properties.split(","),
19607          t = (types || "").split(","),
19608          i = targs.length,
19609          tracker,
19610          j;
19611
19612      while (i--) {
19613        tracker = _getByTarget(targs[i]) || new VelocityTracker(targs[i]);
19614        j = a.length;
19615
19616        while (j--) {
19617          tracker.add(a[j], t[j] || t[0]);
19618        }
19619
19620        result.push(tracker);
19621      }
19622
19623      return result;
19624    };
19625
19626    VelocityTracker.untrack = function untrack(targets, properties) {
19627      var props = (properties || "").split(",");
19628
19629      _toArray$6(targets).forEach(function (target) {
19630        var tracker = _getByTarget(target);
19631
19632        if (tracker) {
19633          if (!props.length) {
19634            tracker.kill(1);
19635          } else {
19636            props.forEach(function (p) {
19637              return tracker.remove(p);
19638            });
19639          }
19640        }
19641      });
19642    };
19643
19644    VelocityTracker.isTracking = function isTracking(target, property) {
19645      var tracker = _getByTarget(target);
19646
19647      return tracker && tracker.isTracking(property);
19648    };
19649
19650    VelocityTracker.getVelocity = function getVelocity(target, property) {
19651      var tracker = _getByTarget(target);
19652
19653      return !tracker || !tracker.isTracking(property) ? console.warn("Not tracking velocity of " + property) : tracker.get(property);
19654    };
19655
19656    return VelocityTracker;
19657  }();
19658  VelocityTracker.getByTarget = _getByTarget;
19659  _getGSAP$i() && gsap$k.registerPlugin(VelocityTracker);
19660
19661  /*!
19662   * InertiaPlugin 3.12.5
19663   * https://gsap.com
19664   *
19665   * @license Copyright 2008-2024, GreenSock. All rights reserved.
19666   * Subject to the terms at https://gsap.com/standard-license or for
19667   * Club GSAP members, the agreement issued with that membership.
vendor: 10,032 bytes, lines 19667-20004
19667
19668   * @author: Jack Doyle, [email protected]
19669  */
19670
19671  var gsap$l,
19672      _coreInitted$h,
19673      _parseEase$2,
19674      _toArray$7,
19675      _power3,
19676      _config$2,
19677      _getUnit$4,
19678      PropTween$3,
19679      _getCache$2,
19680      _checkPointRatio,
19681      _clamp$3,
19682      _processingVars,
19683      _getStyleSaver$7,
19684      _reverting$6,
19685      _getTracker = VelocityTracker.getByTarget,
19686      _getGSAP$j = function _getGSAP() {
19687    return gsap$l || typeof window !== "undefined" && (gsap$l = window.gsap) && gsap$l.registerPlugin && gsap$l;
19688  },
19689      _isString$6 = function _isString(value) {
19690    return typeof value === "string";
19691  },
19692      _isNumber$3 = function _isNumber(value) {
19693    return typeof value === "number";
19694  },
19695      _isObject$4 = function _isObject(value) {
19696    return typeof value === "object";
19697  },
19698      _isFunction$6 = function _isFunction(value) {
19699    return typeof value === "function";
19700  },
19701      _bonusValidated$2 = 1,
19702      _isArray$2 = Array.isArray,
19703      _emptyFunc$3 = function _emptyFunc(p) {
19704    return p;
19705  },
19706      _bigNum$4 = 1e10,
19707      _tinyNum$1 = 1 / _bigNum$4,
19708      _checkPoint = 0.05,
19709      _round$a = function _round(value) {
19710    return Math.round(value * 10000) / 10000;
19711  },
19712      _extend$1 = function _extend(obj, defaults, exclude) {
19713    for (var p in defaults) {
19714      if (!(p in obj) && p !== exclude) {
19715        obj[p] = defaults[p];
19716      }
19717    }
19718
19719    return obj;
19720  },
19721      _deepClone = function _deepClone(obj) {
19722    var copy = {},
19723        p,
19724        v;
19725
19726    for (p in obj) {
19727      copy[p] = _isObject$4(v = obj[p]) && !_isArray$2(v) ? _deepClone(v) : v;
19728    }
19729
19730    return copy;
19731  },
19732      _getClosest = function _getClosest(n, values, max, min, radius) {
19733    var i = values.length,
19734        closest = 0,
19735        absDif = _bigNum$4,
19736        val,
19737        dif,
19738        p,
19739        dist;
19740
19741    if (_isObject$4(n)) {
19742      while (i--) {
19743        val = values[i];
19744        dif = 0;
19745
19746        for (p in n) {
19747          dist = val[p] - n[p];
19748          dif += dist * dist;
19749        }
19750
19751        if (dif < absDif) {
19752          closest = i;
19753          absDif = dif;
19754        }
19755      }
19756
19757      if ((radius || _bigNum$4) < _bigNum$4 && radius < Math.sqrt(absDif)) {
19758        return n;
19759      }
19760    } else {
19761      while (i--) {
19762        val = values[i];
19763        dif = val - n;
19764
19765        if (dif < 0) {
19766          dif = -dif;
19767        }
19768
19769        if (dif < absDif && val >= min && val <= max) {
19770          closest = i;
19771          absDif = dif;
19772        }
19773      }
19774    }
19775
19776    return values[closest];
19777  },
19778      _parseEnd = function _parseEnd(curProp, end, max, min, name, radius, velocity) {
19779    if (curProp.end === "auto") {
19780      return curProp;
19781    }
19782
19783    var endVar = curProp.end,
19784        adjustedEnd,
19785        p;
19786    max = isNaN(max) ? _bigNum$4 : max;
19787    min = isNaN(min) ? -_bigNum$4 : min;
19788
19789    if (_isObject$4(end)) {
19790      adjustedEnd = end.calculated ? end : (_isFunction$6(endVar) ? endVar(end, velocity) : _getClosest(end, endVar, max, min, radius)) || end;
19791
19792      if (!end.calculated) {
19793        for (p in adjustedEnd) {
19794          end[p] = adjustedEnd[p];
19795        }
19796
19797        end.calculated = true;
19798      }
19799
19800      adjustedEnd = adjustedEnd[name];
19801    } else {
19802      adjustedEnd = _isFunction$6(endVar) ? endVar(end, velocity) : _isArray$2(endVar) ? _getClosest(end, endVar, max, min, radius) : parseFloat(endVar);
19803    }
19804
19805    if (adjustedEnd > max) {
19806      adjustedEnd = max;
19807    } else if (adjustedEnd < min) {
19808      adjustedEnd = min;
19809    }
19810
19811    return {
19812      max: adjustedEnd,
19813      min: adjustedEnd,
19814      unitFactor: curProp.unitFactor
19815    };
19816  },
19817      _getNumOrDefault = function _getNumOrDefault(vars, property, defaultValue) {
19818    return isNaN(vars[property]) ? defaultValue : +vars[property];
19819  },
19820      _calculateChange = function _calculateChange(velocity, duration) {
19821    return duration * _checkPoint * velocity / _checkPointRatio;
19822  },
19823      _calculateDuration = function _calculateDuration(start, end, velocity) {
19824    return Math.abs((end - start) * _checkPointRatio / velocity / _checkPoint);
19825  },
19826      _reservedProps$1 = {
19827    resistance: 1,
19828    checkpoint: 1,
19829    preventOvershoot: 1,
19830    linkedProps: 1,
19831    radius: 1,
19832    duration: 1
19833  },
19834      _processLinkedProps = function _processLinkedProps(target, vars, getVal, resistance) {
19835    if (vars.linkedProps) {
19836      var linkedPropNames = vars.linkedProps.split(","),
19837          linkedProps = {},
19838          i,
19839          p,
19840          curProp,
19841          curVelocity,
19842          tracker,
19843          curDuration;
19844
19845      for (i = 0; i < linkedPropNames.length; i++) {
19846        p = linkedPropNames[i];
19847        curProp = vars[p];
19848
19849        if (curProp) {
19850          if (_isNumber$3(curProp.velocity)) {
19851            curVelocity = curProp.velocity;
19852          } else {
19853            tracker = tracker || _getTracker(target);
19854            curVelocity = tracker && tracker.isTracking(p) ? tracker.get(p) : 0;
19855          }
19856
19857          curDuration = Math.abs(curVelocity / _getNumOrDefault(curProp, "resistance", resistance));
19858          linkedProps[p] = parseFloat(getVal(target, p)) + _calculateChange(curVelocity, curDuration);
19859        }
19860      }
19861
19862      return linkedProps;
19863    }
19864  },
19865      _calculateTweenDuration = function _calculateTweenDuration(target, vars, maxDuration, minDuration, overshootTolerance, recordEnd) {
19866    if (maxDuration === void 0) {
19867      maxDuration = 10;
19868    }
19869
19870    if (minDuration === void 0) {
19871      minDuration = 0.2;
19872    }
19873
19874    if (overshootTolerance === void 0) {
19875      overshootTolerance = 1;
19876    }
19877
19878    if (recordEnd === void 0) {
19879      recordEnd = 0;
19880    }
19881
19882    _isString$6(target) && (target = _toArray$7(target)[0]);
19883
19884    if (!target) {
19885      return 0;
19886    }
19887
19888    var duration = 0,
19889        clippedDuration = _bigNum$4,
19890        inertiaVars = vars.inertia || vars,
19891        getVal = _getCache$2(target).get,
19892        resistance = _getNumOrDefault(inertiaVars, "resistance", _config$2.resistance),
19893        p,
19894        curProp,
19895        curDuration,
19896        curVelocity,
19897        curVal,
19898        end,
19899        curClippedDuration,
19900        tracker,
19901        unitFactor,
19902        linkedProps;
19903
19904    linkedProps = _processLinkedProps(target, inertiaVars, getVal, resistance);
19905
19906    for (p in inertiaVars) {
19907      if (!_reservedProps$1[p]) {
19908        curProp = inertiaVars[p];
19909
19910        if (!_isObject$4(curProp)) {
19911          tracker = tracker || _getTracker(target);
19912
19913          if (tracker && tracker.isTracking(p)) {
19914            curProp = _isNumber$3(curProp) ? {
19915              velocity: curProp
19916            } : {
19917              velocity: tracker.get(p)
19918            };
19919          } else {
19920            curVelocity = +curProp || 0;
19921            curDuration = Math.abs(curVelocity / resistance);
19922          }
19923        }
19924
19925        if (_isObject$4(curProp)) {
19926          if (_isNumber$3(curProp.velocity)) {
19927            curVelocity = curProp.velocity;
19928          } else {
19929            tracker = tracker || _getTracker(target);
19930            curVelocity = tracker && tracker.isTracking(p) ? tracker.get(p) : 0;
19931          }
19932
19933          curDuration = _clamp$3(minDuration, maxDuration, Math.abs(curVelocity / _getNumOrDefault(curProp, "resistance", resistance)));
19934          curVal = parseFloat(getVal(target, p)) || 0;
19935          end = curVal + _calculateChange(curVelocity, curDuration);
19936
19937          if ("end" in curProp) {
19938            curProp = _parseEnd(curProp, linkedProps && p in linkedProps ? linkedProps : end, curProp.max, curProp.min, p, inertiaVars.radius, curVelocity);
19939
19940            if (recordEnd) {
19941              _processingVars === vars && (_processingVars = inertiaVars = _deepClone(vars));
19942              inertiaVars[p] = _extend$1(curProp, inertiaVars[p], "end");
19943            }
19944          }
19945
19946          if ("max" in curProp && end > +curProp.max + _tinyNum$1) {
19947            unitFactor = curProp.unitFactor || _config$2.unitFactors[p] || 1;
19948            curClippedDuration = curVal > curProp.max && curProp.min !== curProp.max || curVelocity * unitFactor > -15 && curVelocity * unitFactor < 45 ? minDuration + (maxDuration - minDuration) * 0.1 : _calculateDuration(curVal, curProp.max, curVelocity);
19949
19950            if (curClippedDuration + overshootTolerance < clippedDuration) {
19951              clippedDuration = curClippedDuration + overshootTolerance;
19952            }
19953          } else if ("min" in curProp && end < +curProp.min - _tinyNum$1) {
19954            unitFactor = curProp.unitFactor || _config$2.unitFactors[p] || 1;
19955            curClippedDuration = curVal < curProp.min && curProp.min !== curProp.max || curVelocity * unitFactor > -45 && curVelocity * unitFactor < 15 ? minDuration + (maxDuration - minDuration) * 0.1 : _calculateDuration(curVal, curProp.min, curVelocity);
19956
19957            if (curClippedDuration + overshootTolerance < clippedDuration) {
19958              clippedDuration = curClippedDuration + overshootTolerance;
19959            }
19960          }
19961
19962          curClippedDuration > duration && (duration = curClippedDuration);
19963        }
19964
19965        curDuration > duration && (duration = curDuration);
19966      }
19967    }
19968
19969    duration > clippedDuration && (duration = clippedDuration);
19970    return duration > maxDuration ? maxDuration : duration < minDuration ? minDuration : duration;
19971  },
19972      _initCore$h = function _initCore() {
19973    gsap$l = _getGSAP$j();
19974
19975    if (gsap$l) {
19976      _parseEase$2 = gsap$l.parseEase;
19977      _toArray$7 = gsap$l.utils.toArray;
19978      _getUnit$4 = gsap$l.utils.getUnit;
19979      _getCache$2 = gsap$l.core.getCache;
19980      _clamp$3 = gsap$l.utils.clamp;
19981      _getStyleSaver$7 = gsap$l.core.getStyleSaver;
19982
19983      _reverting$6 = gsap$l.core.reverting || function () {};
19984
19985      _power3 = _parseEase$2("power3");
19986      _checkPointRatio = _power3(0.05);
19987      PropTween$3 = gsap$l.core.PropTween;
19988      gsap$l.config({
19989        resistance: 100,
19990        unitFactors: {
19991          time: 1000,
19992          totalTime: 1000,
19993          progress: 1000,
19994          totalProgress: 1000
19995        }
19996      });
19997      _config$2 = gsap$l.config();
19998      gsap$l.registerPlugin(VelocityTracker);
19999      _coreInitted$h = 1;
20000    }
20001  };
20002
20003  var InertiaPlugin$1 = {
20004    version: "3.1
vendor: 3,293 bytes, lines 20004-20099
200042.5",
20005    name: "inertia",
20006    register: function register(core) {
20007      gsap$l = core;
20008
20009      _initCore$h();
20010    },
20011    init: function init(target, vars, tween, index, targets) {
20012      _coreInitted$h || _initCore$h();
20013
20014      var tracker = _getTracker(target);
20015
20016      if (vars === "auto") {
20017        if (!tracker) {
20018          console.warn("No inertia tracking on " + target + ". InertiaPlugin.track(target) first.");
20019          return;
20020        }
20021
20022        vars = tracker.getAll();
20023      }
20024
20025      this.styles = _getStyleSaver$7 && typeof target.style === "object" && _getStyleSaver$7(target);
20026      this.target = target;
20027      this.tween = tween;
20028      _processingVars = vars;
20029
20030      var cache = target._gsap,
20031          getVal = cache.get,
20032          dur = vars.duration,
20033          durIsObj = _isObject$4(dur),
20034          preventOvershoot = vars.preventOvershoot || durIsObj && dur.overshoot === 0,
20035          resistance = _getNumOrDefault(vars, "resistance", _config$2.resistance),
20036          duration = _isNumber$3(dur) ? dur : _calculateTweenDuration(target, vars, durIsObj && dur.max || 10, durIsObj && dur.min || 0.2, durIsObj && "overshoot" in dur ? +dur.overshoot : preventOvershoot ? 0 : 1, true),
20037          p,
20038          curProp,
20039          curVal,
20040          unit,
20041          velocity,
20042          change1,
20043          end,
20044          change2,
20045          linkedProps;
20046
20047      vars = _processingVars;
20048      _processingVars = 0;
20049      linkedProps = _processLinkedProps(target, vars, getVal, resistance);
20050
20051      for (p in vars) {
20052        if (!_reservedProps$1[p]) {
20053          curProp = vars[p];
20054          _isFunction$6(curProp) && (curProp = curProp(index, target, targets));
20055
20056          if (_isNumber$3(curProp)) {
20057            velocity = curProp;
20058          } else if (_isObject$4(curProp) && !isNaN(curProp.velocity)) {
20059            velocity = +curProp.velocity;
20060          } else {
20061            if (tracker && tracker.isTracking(p)) {
20062              velocity = tracker.get(p);
20063            } else {
20064              console.warn("ERROR: No velocity was defined for " + target + " property: " + p);
20065            }
20066          }
20067
20068          change1 = _calculateChange(velocity, duration);
20069          change2 = 0;
20070          curVal = getVal(target, p);
20071          unit = _getUnit$4(curVal);
20072          curVal = parseFloat(curVal);
20073
20074          if (_isObject$4(curProp)) {
20075            end = curVal + change1;
20076
20077            if ("end" in curProp) {
20078              curProp = _parseEnd(curProp, linkedProps && p in linkedProps ? linkedProps : end, curProp.max, curProp.min, p, vars.radius, velocity);
20079            }
20080
20081            if ("max" in curProp && +curProp.max < end) {
20082              if (preventOvershoot || curProp.preventOvershoot) {
20083                change1 = curProp.max - curVal;
20084              } else {
20085                change2 = curProp.max - curVal - change1;
20086              }
20087            } else if ("min" in curProp && +curProp.min > end) {
20088              if (preventOvershoot || curProp.preventOvershoot) {
20089                change1 = curProp.min - curVal;
20090              } else {
20091                change2 = curProp.min - curVal - change1;
20092              }
20093            }
20094          }
20095
20096          this._props.push(p);
20097
20098          this.styles && this.styles.save(p);
20099          this._pt = new PropTween$3(this._pt, target, p, curVal, 
vendor: 12,848 bytes, lines 20099-20572
200990, _emptyFunc$3, 0, cache.set(target, p, this));
20100          this._pt.u = unit || 0;
20101          this._pt.c1 = change1;
20102          this._pt.c2 = change2;
20103        }
20104      }
20105
20106      tween.duration(duration);
20107      return _bonusValidated$2;
20108    },
20109    render: function render(ratio, data) {
20110      var pt = data._pt;
20111      ratio = _power3(data.tween._time / data.tween._dur);
20112
20113      if (ratio || !_reverting$6()) {
20114        while (pt) {
20115          pt.set(pt.t, pt.p, _round$a(pt.s + pt.c1 * ratio + pt.c2 * ratio * ratio) + pt.u, pt.d, ratio);
20116          pt = pt._next;
20117        }
20118      } else {
20119        data.styles.revert();
20120      }
20121    }
20122  };
20123  "track,untrack,isTracking,getVelocity,getByTarget".split(",").forEach(function (name) {
20124    return InertiaPlugin$1[name] = VelocityTracker[name];
20125  });
20126  _getGSAP$j() && gsap$l.registerPlugin(InertiaPlugin$1);
20127
20128  /*!
20129   * MorphSVGPlugin 3.12.5
20130   * https://gsap.com
20131   *
20132   * @license Copyright 2008-2024, GreenSock. All rights reserved.
20133   * Subject to the terms at https://gsap.com/standard-license or for
20134   * Club GSAP members, the agreement issued with that membership.
20135   * @author: Jack Doyle, [email protected]
20136  */
20137
20138  var gsap$m,
20139      _toArray$8,
20140      _lastLinkedAnchor,
20141      _coreInitted$i,
20142      PluginClass,
20143      _getGSAP$k = function _getGSAP() {
20144    return gsap$m || typeof window !== "undefined" && (gsap$m = window.gsap) && gsap$m.registerPlugin && gsap$m;
20145  },
20146      _isFunction$7 = function _isFunction(value) {
20147    return typeof value === "function";
20148  },
20149      _atan2$2 = Math.atan2,
20150      _cos$2 = Math.cos,
20151      _sin$2 = Math.sin,
20152      _sqrt$3 = Math.sqrt,
20153      _PI = Math.PI,
20154      _2PI$1 = _PI * 2,
20155      _angleMin = _PI * 0.3,
20156      _angleMax = _PI * 0.7,
20157      _bigNum$5 = 1e20,
20158      _numExp$4 = /[-+=\.]*\d+[\.e\-\+]*\d*[e\-\+]*\d*/gi,
20159      _selectorExp$1 = /(^[#\.][a-z]|[a-y][a-z])/i,
20160      _commands = /[achlmqstvz]/i,
20161      _log = function _log(message) {
20162    return console && console.warn(message);
20163  },
20164      _bonusValidated$3 = 1,
20165      _getAverageXY = function _getAverageXY(segment) {
20166    var l = segment.length,
20167        x = 0,
20168        y = 0,
20169        i;
20170
20171    for (i = 0; i < l; i++) {
20172      x += segment[i++];
20173      y += segment[i];
20174    }
20175
20176    return [x / (l / 2), y / (l / 2)];
20177  },
20178      _getSize$1 = function _getSize(segment) {
20179    var l = segment.length,
20180        xMax = segment[0],
20181        xMin = xMax,
20182        yMax = segment[1],
20183        yMin = yMax,
20184        x,
20185        y,
20186        i;
20187
20188    for (i = 6; i < l; i += 6) {
20189      x = segment[i];
20190      y = segment[i + 1];
20191
20192      if (x > xMax) {
20193        xMax = x;
20194      } else if (x < xMin) {
20195        xMin = x;
20196      }
20197
20198      if (y > yMax) {
20199        yMax = y;
20200      } else if (y < yMin) {
20201        yMin = y;
20202      }
20203    }
20204
20205    segment.centerX = (xMax + xMin) / 2;
20206    segment.centerY = (yMax + yMin) / 2;
20207    return segment.size = (xMax - xMin) * (yMax - yMin);
20208  },
20209      _getTotalSize = function _getTotalSize(rawPath, samplesPerBezier) {
20210    if (samplesPerBezier === void 0) {
20211      samplesPerBezier = 3;
20212    }
20213
20214    var j = rawPath.length,
20215        xMax = rawPath[0][0],
20216        xMin = xMax,
20217        yMax = rawPath[0][1],
20218        yMin = yMax,
20219        inc = 1 / samplesPerBezier,
20220        l,
20221        x,
20222        y,
20223        i,
20224        segment,
20225        k,
20226        t,
20227        inv,
20228        x1,
20229        y1,
20230        x2,
20231        x3,
20232        x4,
20233        y2,
20234        y3,
20235        y4;
20236
20237    while (--j > -1) {
20238      segment = rawPath[j];
20239      l = segment.length;
20240
20241      for (i = 6; i < l; i += 6) {
20242        x1 = segment[i];
20243        y1 = segment[i + 1];
20244        x2 = segment[i + 2] - x1;
20245        y2 = segment[i + 3] - y1;
20246        x3 = segment[i + 4] - x1;
20247        y3 = segment[i + 5] - y1;
20248        x4 = segment[i + 6] - x1;
20249        y4 = segment[i + 7] - y1;
20250        k = samplesPerBezier;
20251
20252        while (--k > -1) {
20253          t = inc * k;
20254          inv = 1 - t;
20255          x = (t * t * x4 + 3 * inv * (t * x3 + inv * x2)) * t + x1;
20256          y = (t * t * y4 + 3 * inv * (t * y3 + inv * y2)) * t + y1;
20257
20258          if (x > xMax) {
20259            xMax = x;
20260          } else if (x < xMin) {
20261            xMin = x;
20262          }
20263
20264          if (y > yMax) {
20265            yMax = y;
20266          } else if (y < yMin) {
20267            yMin = y;
20268          }
20269        }
20270      }
20271    }
20272
20273    rawPath.centerX = (xMax + xMin) / 2;
20274    rawPath.centerY = (yMax + yMin) / 2;
20275    rawPath.left = xMin;
20276    rawPath.width = xMax - xMin;
20277    rawPath.top = yMin;
20278    rawPath.height = yMax - yMin;
20279    return rawPath.size = (xMax - xMin) * (yMax - yMin);
20280  },
20281      _sortByComplexity = function _sortByComplexity(a, b) {
20282    return b.length - a.length;
20283  },
20284      _sortBySize = function _sortBySize(a, b) {
20285    var sizeA = a.size || _getSize$1(a),
20286        sizeB = b.size || _getSize$1(b);
20287
20288    return Math.abs(sizeB - sizeA) < (sizeA + sizeB) / 20 ? b.centerX - a.centerX || b.centerY - a.centerY : sizeB - sizeA;
20289  },
20290      _offsetSegment = function _offsetSegment(segment, shapeIndex) {
20291    var a = segment.slice(0),
20292        l = segment.length,
20293        wrap = l - 2,
20294        i,
20295        index;
20296    shapeIndex = shapeIndex | 0;
20297
20298    for (i = 0; i < l; i++) {
20299      index = (i + shapeIndex) % wrap;
20300      segment[i++] = a[index];
20301      segment[i] = a[index + 1];
20302    }
20303  },
20304      _getTotalMovement = function _getTotalMovement(sb, eb, shapeIndex, offsetX, offsetY) {
20305    var l = sb.length,
20306        d = 0,
20307        wrap = l - 2,
20308        index,
20309        i,
20310        x,
20311        y;
20312    shapeIndex *= 6;
20313
20314    for (i = 0; i < l; i += 6) {
20315      index = (i + shapeIndex) % wrap;
20316      y = sb[index] - (eb[i] - offsetX);
20317      x = sb[index + 1] - (eb[i + 1] - offsetY);
20318      d += _sqrt$3(x * x + y * y);
20319    }
20320
20321    return d;
20322  },
20323      _getClosestShapeIndex = function _getClosestShapeIndex(sb, eb, checkReverse) {
20324    var l = sb.length,
20325        sCenter = _getAverageXY(sb),
20326        eCenter = _getAverageXY(eb),
20327        offsetX = eCenter[0] - sCenter[0],
20328        offsetY = eCenter[1] - sCenter[1],
20329        min = _getTotalMovement(sb, eb, 0, offsetX, offsetY),
20330        minIndex = 0,
20331        copy,
20332        d,
20333        i;
20334
20335    for (i = 6; i < l; i += 6) {
20336      d = _getTotalMovement(sb, eb, i / 6, offsetX, offsetY);
20337
20338      if (d < min) {
20339        min = d;
20340        minIndex = i;
20341      }
20342    }
20343
20344    if (checkReverse) {
20345      copy = sb.slice(0);
20346      reverseSegment(copy);
20347
20348      for (i = 6; i < l; i += 6) {
20349        d = _getTotalMovement(copy, eb, i / 6, offsetX, offsetY);
20350
20351        if (d < min) {
20352          min = d;
20353          minIndex = -i;
20354        }
20355      }
20356    }
20357
20358    return minIndex / 6;
20359  },
20360      _getClosestAnchor = function _getClosestAnchor(rawPath, x, y) {
20361    var j = rawPath.length,
20362        closestDistance = _bigNum$5,
20363        closestX = 0,
20364        closestY = 0,
20365        segment,
20366        dx,
20367        dy,
20368        d,
20369        i,
20370        l;
20371
20372    while (--j > -1) {
20373      segment = rawPath[j];
20374      l = segment.length;
20375
20376      for (i = 0; i < l; i += 6) {
20377        dx = segment[i] - x;
20378        dy = segment[i + 1] - y;
20379        d = _sqrt$3(dx * dx + dy * dy);
20380
20381        if (d < closestDistance) {
20382          closestDistance = d;
20383          closestX = segment[i];
20384          closestY = segment[i + 1];
20385        }
20386      }
20387    }
20388
20389    return [closestX, closestY];
20390  },
20391      _getClosestSegment = function _getClosestSegment(bezier, pool, startIndex, sortRatio, offsetX, offsetY) {
20392    var l = pool.length,
20393        index = 0,
20394        minSize = Math.min(bezier.size || _getSize$1(bezier), pool[startIndex].size || _getSize$1(pool[startIndex])) * sortRatio,
20395        min = _bigNum$5,
20396        cx = bezier.centerX + offsetX,
20397        cy = bezier.centerY + offsetY,
20398        size,
20399        i,
20400        dx,
20401        dy,
20402        d;
20403
20404    for (i = startIndex; i < l; i++) {
20405      size = pool[i].size || _getSize$1(pool[i]);
20406
20407      if (size < minSize) {
20408        break;
20409      }
20410
20411      dx = pool[i].centerX - cx;
20412      dy = pool[i].centerY - cy;
20413      d = _sqrt$3(dx * dx + dy * dy);
20414
20415      if (d < min) {
20416        index = i;
20417        min = d;
20418      }
20419    }
20420
20421    d = pool[index];
20422    pool.splice(index, 1);
20423    return d;
20424  },
20425      _subdivideSegmentQty = function _subdivideSegmentQty(segment, quantity) {
20426    var tally = 0,
20427        max = 0.999999,
20428        l = segment.length,
20429        newPointsPerSegment = quantity / ((l - 2) / 6),
20430        ax,
20431        ay,
20432        cp1x,
20433        cp1y,
20434        cp2x,
20435        cp2y,
20436        bx,
20437        by,
20438        x1,
20439        y1,
20440        x2,
20441        y2,
20442        i,
20443        t;
20444
20445    for (i = 2; i < l; i += 6) {
20446      tally += newPointsPerSegment;
20447
20448      while (tally > max) {
20449        ax = segment[i - 2];
20450        ay = segment[i - 1];
20451        cp1x = segment[i];
20452        cp1y = segment[i + 1];
20453        cp2x = segment[i + 2];
20454        cp2y = segment[i + 3];
20455        bx = segment[i + 4];
20456        by = segment[i + 5];
20457        t = 1 / ((Math.floor(tally) || 1) + 1);
20458        x1 = ax + (cp1x - ax) * t;
20459        x2 = cp1x + (cp2x - cp1x) * t;
20460        x1 += (x2 - x1) * t;
20461        x2 += (cp2x + (bx - cp2x) * t - x2) * t;
20462        y1 = ay + (cp1y - ay) * t;
20463        y2 = cp1y + (cp2y - cp1y) * t;
20464        y1 += (y2 - y1) * t;
20465        y2 += (cp2y + (by - cp2y) * t - y2) * t;
20466        segment.splice(i, 4, ax + (cp1x - ax) * t, ay + (cp1y - ay) * t, x1, y1, x1 + (x2 - x1) * t, y1 + (y2 - y1) * t, x2, y2, cp2x + (bx - cp2x) * t, cp2y + (by - cp2y) * t);
20467        i += 6;
20468        l += 6;
20469        tally--;
20470      }
20471    }
20472
20473    return segment;
20474  },
20475      _equalizeSegmentQuantity = function _equalizeSegmentQuantity(start, end, shapeIndex, map, fillSafe) {
20476    var dif = end.length - start.length,
20477        longer = dif > 0 ? end : start,
20478        shorter = dif > 0 ? start : end,
20479        added = 0,
20480        sortMethod = map === "complexity" ? _sortByComplexity : _sortBySize,
20481        sortRatio = map === "position" ? 0 : typeof map === "number" ? map : 0.8,
20482        i = shorter.length,
20483        shapeIndices = typeof shapeIndex === "object" && shapeIndex.push ? shapeIndex.slice(0) : [shapeIndex],
20484        reverse = shapeIndices[0] === "reverse" || shapeIndices[0] < 0,
20485        log = shapeIndex === "log",
20486        eb,
20487        sb,
20488        b,
20489        x,
20490        y,
20491        offsetX,
20492        offsetY;
20493
20494    if (!shorter[0]) {
20495      return;
20496    }
20497
20498    if (longer.length > 1) {
20499      start.sort(sortMethod);
20500      end.sort(sortMethod);
20501      offsetX = longer.size || _getTotalSize(longer);
20502      offsetX = shorter.size || _getTotalSize(shorter);
20503      offsetX = longer.centerX - shorter.centerX;
20504      offsetY = longer.centerY - shorter.centerY;
20505
20506      if (sortMethod === _sortBySize) {
20507        for (i = 0; i < shorter.length; i++) {
20508          longer.splice(i, 0, _getClosestSegment(shorter[i], longer, i, sortRatio, offsetX, offsetY));
20509        }
20510      }
20511    }
20512
20513    if (dif) {
20514      if (dif < 0) {
20515        dif = -dif;
20516      }
20517
20518      if (longer[0].length > shorter[0].length) {
20519        _subdivideSegmentQty(shorter[0], (longer[0].length - shorter[0].length) / 6 | 0);
20520      }
20521
20522      i = shorter.length;
20523
20524      while (added < dif) {
20525        x = longer[i].size || _getSize$1(longer[i]);
20526        b = _getClosestAnchor(shorter, longer[i].centerX, longer[i].centerY);
20527        x = b[0];
20528        y = b[1];
20529        shorter[i++] = [x, y, x, y, x, y, x, y];
20530        shorter.totalPoints += 8;
20531        added++;
20532      }
20533    }
20534
20535    for (i = 0; i < start.length; i++) {
20536      eb = end[i];
20537      sb = start[i];
20538      dif = eb.length - sb.length;
20539
20540      if (dif < 0) {
20541        _subdivideSegmentQty(eb, -dif / 6 | 0);
20542      } else if (dif > 0) {
20543        _subdivideSegmentQty(sb, dif / 6 | 0);
20544      }
20545
20546      if (reverse && fillSafe !== false && !sb.reversed) {
20547        reverseSegment(sb);
20548      }
20549
20550      shapeIndex = shapeIndices[i] || shapeIndices[i] === 0 ? shapeIndices[i] : "auto";
20551
20552      if (shapeIndex) {
20553        if (sb.closed || Math.abs(sb[0] - sb[sb.length - 2]) < 0.5 && Math.abs(sb[1] - sb[sb.length - 1]) < 0.5) {
20554          if (shapeIndex === "auto" || shapeIndex === "log") {
20555            shapeIndices[i] = shapeIndex = _getClosestShapeIndex(sb, eb, !i || fillSafe === false);
20556
20557            if (shapeIndex < 0) {
20558              reverse = true;
20559              reverseSegment(sb);
20560              shapeIndex = -shapeIndex;
20561            }
20562
20563            _offsetSegment(sb, shapeIndex * 6);
20564          } else if (shapeIndex !== "reverse") {
20565            if (i && shapeIndex < 0) {
20566              reverseSegment(sb);
20567            }
20568
20569            _offsetSegment(sb, (shapeIndex < 0 ? -shapeIndex : shapeIndex) * 6);
20570          }
20571        } else if (!reverse && (shapeIndex === "auto" && Math.abs(eb[0] - sb[0]) + Math.abs(eb[1] - sb[1]) + Math.abs(eb[eb.length - 2] - sb[sb.length - 2]) + Math.abs(eb[eb.length - 1] - sb[sb.length - 1]) > Math.abs(eb[0] - sb[sb.length - 2]) + Math.abs(eb[1] - sb[sb.length - 1]) + Math.abs(eb[eb.length - 2] - sb[0]) + Math.abs(eb[eb.length - 1] - sb[1]) || shapeIndex % 2)) {
20572          reverseSegment(sb);
vendor: 3,683 bytes, lines 20573-20714
20573          shapeIndices[i] = -1;
20574          reverse = true;
20575        } else if (shapeIndex === "auto") {
20576          shapeIndices[i] = 0;
20577        } else if (shapeIndex === "reverse") {
20578          shapeIndices[i] = -1;
20579        }
20580
20581        if (sb.closed !== eb.closed) {
20582          sb.closed = eb.closed = false;
20583        }
20584      }
20585    }
20586
20587    log && _log("shapeIndex:[" + shapeIndices.join(",") + "]");
20588    start.shapeIndex = shapeIndices;
20589    return shapeIndices;
20590  },
20591      _pathFilter = function _pathFilter(a, shapeIndex, map, precompile, fillSafe) {
20592    var start = stringToRawPath(a[0]),
20593        end = stringToRawPath(a[1]);
20594
20595    if (!_equalizeSegmentQuantity(start, end, shapeIndex || shapeIndex === 0 ? shapeIndex : "auto", map, fillSafe)) {
20596      return;
20597    }
20598
20599    a[0] = rawPathToString(start);
20600    a[1] = rawPathToString(end);
20601
20602    if (precompile === "log" || precompile === true) {
20603      _log('precompile:["' + a[0] + '","' + a[1] + '"]');
20604    }
20605  },
20606      _offsetPoints = function _offsetPoints(text, offset) {
20607    if (!offset) {
20608      return text;
20609    }
20610
20611    var a = text.match(_numExp$4) || [],
20612        l = a.length,
20613        s = "",
20614        inc,
20615        i,
20616        j;
20617
20618    if (offset === "reverse") {
20619      i = l - 1;
20620      inc = -2;
20621    } else {
20622      i = ((parseInt(offset, 10) || 0) * 2 + 1 + l * 100) % l;
20623      inc = 2;
20624    }
20625
20626    for (j = 0; j < l; j += 2) {
20627      s += a[i - 1] + "," + a[i] + " ";
20628      i = (i + inc) % l;
20629    }
20630
20631    return s;
20632  },
20633      _equalizePointQuantity = function _equalizePointQuantity(a, quantity) {
20634    var tally = 0,
20635        x = parseFloat(a[0]),
20636        y = parseFloat(a[1]),
20637        s = x + "," + y + " ",
20638        max = 0.999999,
20639        newPointsPerSegment,
20640        i,
20641        l,
20642        j,
20643        factor,
20644        nextX,
20645        nextY;
20646    l = a.length;
20647    newPointsPerSegment = quantity * 0.5 / (l * 0.5 - 1);
20648
20649    for (i = 0; i < l - 2; i += 2) {
20650      tally += newPointsPerSegment;
20651      nextX = parseFloat(a[i + 2]);
20652      nextY = parseFloat(a[i + 3]);
20653
20654      if (tally > max) {
20655        factor = 1 / (Math.floor(tally) + 1);
20656        j = 1;
20657
20658        while (tally > max) {
20659          s += (x + (nextX - x) * factor * j).toFixed(2) + "," + (y + (nextY - y) * factor * j).toFixed(2) + " ";
20660          tally--;
20661          j++;
20662        }
20663      }
20664
20665      s += nextX + "," + nextY + " ";
20666      x = nextX;
20667      y = nextY;
20668    }
20669
20670    return s;
20671  },
20672      _pointsFilter = function _pointsFilter(a) {
20673    var startNums = a[0].match(_numExp$4) || [],
20674        endNums = a[1].match(_numExp$4) || [],
20675        dif = endNums.length - startNums.length;
20676
20677    if (dif > 0) {
20678      a[0] = _equalizePointQuantity(startNums, dif);
20679    } else {
20680      a[1] = _equalizePointQuantity(endNums, -dif);
20681    }
20682  },
20683      _buildPointsFilter = function _buildPointsFilter(shapeIndex) {
20684    return !isNaN(shapeIndex) ? function (a) {
20685      _pointsFilter(a);
20686
20687      a[1] = _offsetPoints(a[1], parseInt(shapeIndex, 10));
20688    } : _pointsFilter;
20689  },
20690      _parseShape = function _parseShape(shape, forcePath, target) {
20691    var isString = typeof shape === "string",
20692        e,
20693        type;
20694
20695    if (!isString || _selectorExp$1.test(shape) || (shape.match(_numExp$4) || []).length < 3) {
20696      e = _toArray$8(shape)[0];
20697
20698      if (e) {
20699        type = (e.nodeName + "").toUpperCase();
20700
20701        if (forcePath && type !== "PATH") {
20702          e = convertToPath(e, false);
20703          type = "PATH";
20704        }
20705
20706        shape = e.getAttribute(type === "PATH" ? "d" : "points") || "";
20707
20708        if (e === target) {
20709          shape = e.getAttributeNS(null, "data-original") || shape;
20710        }
20711      } else {
20712        _log("WARNING: invalid morph to: " + shape);
20713
20714        shape = false;
vendor: 5,241 bytes, lines 20715-20883
20715      }
20716    }
20717
20718    return shape;
20719  },
20720      _populateSmoothData = function _populateSmoothData(rawPath, tolerance) {
20721    var j = rawPath.length,
20722        limit = 0.2 * (tolerance || 1),
20723        smooth,
20724        segment,
20725        x,
20726        y,
20727        x2,
20728        y2,
20729        i,
20730        l,
20731        a,
20732        a2,
20733        isSmooth,
20734        smoothData;
20735
20736    while (--j > -1) {
20737      segment = rawPath[j];
20738      isSmooth = segment.isSmooth = segment.isSmooth || [0, 0, 0, 0];
20739      smoothData = segment.smoothData = segment.smoothData || [0, 0, 0, 0];
20740      isSmooth.length = 4;
20741      l = segment.length - 2;
20742
20743      for (i = 6; i < l; i += 6) {
20744        x = segment[i] - segment[i - 2];
20745        y = segment[i + 1] - segment[i - 1];
20746        x2 = segment[i + 2] - segment[i];
20747        y2 = segment[i + 3] - segment[i + 1];
20748        a = _atan2$2(y, x);
20749        a2 = _atan2$2(y2, x2);
20750        smooth = Math.abs(a - a2) < limit;
20751
20752        if (smooth) {
20753          smoothData[i - 2] = a;
20754          smoothData[i + 2] = a2;
20755          smoothData[i - 1] = _sqrt$3(x * x + y * y);
20756          smoothData[i + 3] = _sqrt$3(x2 * x2 + y2 * y2);
20757        }
20758
20759        isSmooth.push(smooth, smooth, 0, 0, smooth, smooth);
20760      }
20761
20762      if (segment[l] === segment[0] && segment[l + 1] === segment[1]) {
20763        x = segment[0] - segment[l - 2];
20764        y = segment[1] - segment[l - 1];
20765        x2 = segment[2] - segment[0];
20766        y2 = segment[3] - segment[1];
20767        a = _atan2$2(y, x);
20768        a2 = _atan2$2(y2, x2);
20769
20770        if (Math.abs(a - a2) < limit) {
20771          smoothData[l - 2] = a;
20772          smoothData[2] = a2;
20773          smoothData[l - 1] = _sqrt$3(x * x + y * y);
20774          smoothData[3] = _sqrt$3(x2 * x2 + y2 * y2);
20775          isSmooth[l - 2] = isSmooth[l - 1] = true;
20776        }
20777      }
20778    }
20779
20780    return rawPath;
20781  },
20782      _parseOriginFactors = function _parseOriginFactors(v) {
20783    var a = v.trim().split(" "),
20784        x = ~v.indexOf("left") ? 0 : ~v.indexOf("right") ? 100 : isNaN(parseFloat(a[0])) ? 50 : parseFloat(a[0]),
20785        y = ~v.indexOf("top") ? 0 : ~v.indexOf("bottom") ? 100 : isNaN(parseFloat(a[1])) ? 50 : parseFloat(a[1]);
20786    return {
20787      x: x / 100,
20788      y: y / 100
20789    };
20790  },
20791      _shortAngle = function _shortAngle(dif) {
20792    return dif !== dif % _PI ? dif + (dif < 0 ? _2PI$1 : -_2PI$1) : dif;
20793  },
20794      _morphMessage = "Use MorphSVGPlugin.convertToPath() to convert to a path before morphing.",
20795      _tweenRotation = function _tweenRotation(start, end, i, linkedPT) {
20796    var so = this._origin,
20797        eo = this._eOrigin,
20798        dx = start[i] - so.x,
20799        dy = start[i + 1] - so.y,
20800        d = _sqrt$3(dx * dx + dy * dy),
20801        sa = _atan2$2(dy, dx),
20802        angleDif,
20803        _short;
20804
20805    dx = end[i] - eo.x;
20806    dy = end[i + 1] - eo.y;
20807    angleDif = _atan2$2(dy, dx) - sa;
20808    _short = _shortAngle(angleDif);
20809
20810    if (!linkedPT && _lastLinkedAnchor && Math.abs(_short + _lastLinkedAnchor.ca) < _angleMin) {
20811      linkedPT = _lastLinkedAnchor;
20812    }
20813
20814    return this._anchorPT = _lastLinkedAnchor = {
20815      _next: this._anchorPT,
20816      t: start,
20817      sa: sa,
20818      ca: linkedPT && _short * linkedPT.ca < 0 && Math.abs(_short) > _angleMax ? angleDif : _short,
20819      sl: d,
20820      cl: _sqrt$3(dx * dx + dy * dy) - d,
20821      i: i
20822    };
20823  },
20824      _initCore$i = function _initCore(required) {
20825    gsap$m = _getGSAP$k();
20826    PluginClass = PluginClass || gsap$m && gsap$m.plugins.morphSVG;
20827
20828    if (gsap$m && PluginClass) {
20829      _toArray$8 = gsap$m.utils.toArray;
20830      PluginClass.prototype._tweenRotation = _tweenRotation;
20831      _coreInitted$i = 1;
20832    } else if (required) {
20833      _log("Please gsap.registerPlugin(MorphSVGPlugin)");
20834    }
20835  };
20836
20837  var MorphSVGPlugin = {
20838    version: "3.12.5",
20839    name: "morphSVG",
20840    rawVars: 1,
20841    register: function register(core, Plugin) {
20842      gsap$m = core;
20843      PluginClass = Plugin;
20844
20845      _initCore$i();
20846    },
20847    init: function init(target, value, tween, index, targets) {
20848      _coreInitted$i || _initCore$i(1);
20849
20850      if (!value) {
20851        _log("invalid shape");
20852
20853        return false;
20854      }
20855
20856      _isFunction$7(value) && (value = value.call(tween, index, target, targets));
20857      var type, p, pt, shape, isPoly, shapeIndex, map, startSmooth, endSmooth, start, end, i, j, l, startSeg, endSeg, precompiled, sData, eData, originFactors, useRotation, offset;
20858
20859      if (typeof value === "string" || value.getBBox || value[0]) {
20860        value = {
20861          shape: value
20862        };
20863      } else if (typeof value === "object") {
20864        type = {};
20865
20866        for (p in value) {
20867          type[p] = _isFunction$7(value[p]) && p !== "render" ? value[p].call(tween, index, target, targets) : value[p];
20868        }
20869
20870        value = type;
20871      }
20872
20873      var cs = target.nodeType ? window.getComputedStyle(target) : {},
20874          fill = cs.fill + "",
20875          fillSafe = !(fill === "none" || (fill.match(_numExp$4) || [])[3] === "0" || cs.fillRule === "evenodd"),
20876          origins = (value.origin || "50 50").split(",");
20877      type = (target.nodeName + "").toUpperCase();
20878      isPoly = type === "POLYLINE" || type === "POLYGON";
20879
20880      if (type !== "PATH" && !isPoly && !value.prop) {
20881        _log("Cannot morph a <" + type + "> element. " + _morphMessage);
20882
20883        return false;
20884      }
20885
20886      p = type === "PATH" ? "d" : "points";
20887
20888      if (!value.prop && !_isFunction$7(target.setAttribute)) {
20889        return false;
20890      }
20891
20892      shape = _parseShape(value.shape || value.d || value.points || "", p === "d", target);
20893
20894      if (isPoly && _commands.test(shape)) {
20895        _log("A <" + type + "> cannot accept path data. " + _morphMessage);
20896
20897        return false;
20898      }
20899
20900      shapeIndex = value.shapeIndex || value.shapeIndex === 0 ? value.shapeIndex : "auto";
20901      map = value.map || MorphSVGPlugin.defaultMap;
20902      this._prop = value.prop;
20903      this._render = value.render || MorphSVGPlugin.defaultRender;
20904      this._apply = "updateTarget" in value ? value.updateTarget : MorphSVGPlugin.defaultUpdateTarget;
20905      this._rnd = Math.pow(10, isNaN(value.precision) ? 2 : +value.precision);
20906      this._tween = tween;
20907
20908      if (shape) {
20909        this._target = target;
20910        precompiled = typeof value.precompile === "object";
20911        start = this._prop ? target[this._prop] : target.getAttribute(p);
20912
20913        if (!this._prop && !target.getAttributeNS(null, "data-original")) {
20914          target.setAttributeNS(null, "data-original", start);
20915        }
20916
20917        if (p === "d" || this._prop) {
20918          start = stringToRawPath(precompiled ? value.precompile[0] : start);
20919          end = stringToRawPath(precompiled ? value.precompile[1] : shape);
20920
20921          if (!precompiled && !_equalizeSegmentQuantity(start, end, shapeIndex, map, fillSafe)) {
20922            return false;
20923          }
20924
20925          if (value.precompile === "log" || value.precompile === true) {
20926            _log('precompile:["' + rawPathToString(start) + '","' + rawPathToString(end) + '"]');
20927          }
20928
20929          useRotation = (value.type || MorphSVGPlugin.defaultType) !== "linear";
20930
20931          if (useRotation) {
20932            start = _populateSmoothData(start, value.smoothTolerance);
20933            end = _populateSmoothData(end, value.smoothTolerance);
20934
20935            if (!start.size) {
20936              _getTotalSize(start);
20937            }
20938
20939            if (!end.size) {
20940              _getTotalSize(end);
20941            }
20942
20943            originFactors = _parseOriginFactors(origins[0]);
20944            this._origin = start.origin = {
20945              x: start.left + originFactors.x * start.width,
20946              y: start.top + originFactors.y * start.height
20947            };
20948
20949            if (origins[1]) {
20950              originFactors = _parseOriginFactors(origins[1]);
20951            }
20952
20953            this._eOrigin = {
20954              x: end.left + originFactors.x * end.width,
20955              y: end.top + originFactors.y * end.height
20956            };
20957          }
20958
20959          this._rawPath = target._gsRawPath = start;
20960          j = start.length;
20961
20962          while (--j > -1) {
20963            startSeg = start[j];
20964            endSeg = end[j];
20965            startSmooth = startSeg.isSmooth || [];
20966            endSmooth = endSeg.isSmooth || [];
20967            l = startSeg.length;
20968            _lastLinkedAnchor = 0;
20969
20970            for (i = 0; i < l; i += 2) {
20971              if (endSeg[i] !== startSeg[i] || endSeg[i + 1] !== startSeg[i + 1]) {
20972                if (useRotation) {
20973                  if (startSmooth[i] && endSmooth[i]) {
20974                    sData = startSeg.smoothData;
20975                    eData = endSeg.smoothData;
20976                    offset = i + (i === l - 4 ? 7 - l : 5);
20977                    this._controlPT = {
20978                      _next: this._controlPT,
20979                      i: i,
20980                      j: j,
20981                      l1s: sData[i + 1],
20982                      l1c: eData[i + 1] - sData[i + 1],
20983                      l2s: sData[offset],
20984                      l2c: eData[offset] - sData[offset]
20985                    };
20986                    pt = this._tweenRotation(startSeg, endSeg, i + 2);
20987
20988                    this._tweenRotation(startSeg, endSeg, i, pt);
20989
20990                    this._tweenRotation(startSeg, endSeg, offset - 1, pt);
20991
20992                    i += 4;
20993                  } else {
20994                    this._tweenRotation(startSeg, endSeg, i);
20995                  }
20996                } else {
20997                  pt = this.add(startSeg, i, startSeg[i], endSeg[i], 0, 0, 0, 0, 0, 1);
20998                  pt = this.add(startSeg, i + 1, startSeg[i + 1], endSeg[i + 1], 0, 0, 0, 0, 0, 1) || pt;
20999                }
21000              }
21001            }
21002          }
21003        } else {
21004          pt = this.add(target, "setAttribute", target.getAttribute(p) + "", shape + "", index, targets, 0, _buildPointsFilter(shapeIndex), p);
21005        }
21006
21007        if (useRotation) {
21008          this.add(this._origin, "x", this._origin.x, this._eOrigin.x, 0, 0, 0, 0, 0, 1);
21009          pt = this.add(this._origin, "y", this._origin.y, this._eOrigin.y, 0, 0, 0, 0, 0, 1);
21010        }
21011
21012        if (pt) {
21013          this._props.push("morphSVG");
21014
21015          pt.end = shape;
21016          pt.endProp = p;
21017        }
21018      }
21019
21020      return _bonusValidated$3;
21021    },
21022    render: function render(ratio, data) {
21023      var rawPath = data._rawPath,
21024          controlPT = data._controlPT,
21025          anchorPT = data._anchorPT,
21026          rnd = data._rnd,
21027          target = data._target,
21028          pt = data._pt,
21029          s,
21030          space,
21031          easeInOut,
21032          segment,
21033          l,
21034          angle,
21035          i,
21036          j,
21037          x,
21038          y,
21039          sin,
21040          cos,
21041          offset;
21042
21043      while (pt) {
21044        pt.r(ratio, pt.d);
21045        pt = pt._next;
21046      }
21047
21048      if (ratio === 1 && data._apply) {
21049        pt = data._pt;
21050
21051        while (pt) {
21052          if (pt.end) {
21053            if (data._prop) {
21054              target[data._prop] = pt.end;
21055            } else {
21056              target.setAttribute(pt.endProp, pt.end);
21057            }
21058          }
21059
21060          pt = pt._next;
21061        }
21062      } else if (rawPath) {
21063        while (anchorPT) {
21064          angle = anchorPT.sa + ratio * anchorPT.ca;
21065          l = anchorPT.sl + ratio * anchorPT.cl;
21066          anchorPT.t[anchorPT.i] = data._origin.x + _cos$2(angle) * l;
21067          anchorPT.t[anchorPT.i + 1] = data._origin.y + _sin$2(angle) * l;
21068          anchorPT = anchorPT._next;
21069        }
21070
21071        easeInOut = ratio < 0.5 ? 2 * ratio * ratio : (4 - 2 * ratio) * ratio - 1;
21072
21073        while (controlPT) {
21074          i = controlPT.i;
21075          segment = rawPath[controlPT.j];
21076          offset = i + (i === segment.length - 4 ? 7 - segment.length : 5);
21077          angle = _atan2$2(segment[offset] - segment[i + 1], segment[offset - 1] - segment[i]);
21078          sin = _sin$2(angle);
21079          cos = _cos$2(angle);
21080          x = segment[i + 2];
21081          y = segment[i + 3];
21082          l = controlPT.l1s + easeInOut * controlPT.l1c;
21083          segment[i] = x - cos * l;
21084          segment[i + 1] = y - sin * l;
21085          l = controlPT.l2s + easeInOut * controlPT.l2c;
21086          segment[offset - 1] = x + cos * l;
21087          segment[offset] = y + sin * l;
21088          controlPT = controlPT._next;
21089        }
21090
21091        target._gsRawPath = rawPath;
21092
21093        if (data._apply) {
21094          s = "";
21095          space = " ";
21096
21097          for (j = 0; j < rawPath.length; j++) {
21098            segment = rawPath[j];
21099            l = segment.length;
21100            s += "M" + (segment[0] * rnd | 0) / rnd + space + (segment[1] * rnd | 0) / rnd + " C";
21101
21102            for (i = 2; i < l; i++) {
21103              s += (segment[i] * rnd | 0) / rnd + space;
21104            }
21105          }
21106
21107          if (data._prop) {
21108            target[data._prop] = s;
21109          } else {
21110            target.setAttribute("d", s);
21111          }
21112        }
21113      }
21114
21115      data._render && rawPath && data._render.call(data._tween, rawPath, target);
21116    },
21117    kill: function kill(property) {
21118      this._pt = this._rawPath = 0;
21119    },
21120    getRawPath: getRawPath,
21121    stringToRawPath: stringToRawPath,
21122    rawPathToString: rawPathToString,
21123    normalizeStrings: function normalizeStrings(shape1, shape2, _ref) {
21124      var shapeIndex = _ref.shapeIndex,
21125          map = _ref.map;
21126      var result = [shape1, shape2];
21127
21128      _pathFilter(result, shapeIndex, map);
21129
21130      return result;
21131    },
21132    pathFilter: _pathFilter,
21133    pointsFilter: _pointsFilter,
21134    getTotalSize: _getTotalSize,
21135    equalizeSegmentQuantity: _equalizeSegmentQuantity,
21136    convertToPath: function convertToPath$1(targets, swap) {
21137      return _toArray$8(targets).map(function (target) {
21138        return convertToPath(target, swap !== false);
21139      });
21140    },
21141    defaultType: "linear",
21142    defaultUpdateTarget: true,
21143    defaultMap: "size"
21144  };
21145  _getGSAP$k() && gsap$m.registerPlugin(MorphSVGPlugin);
21146
21147  var _numbersExp$1 = /(?:(-)?\d*\.?\d*(?:e[\-+]?\d+)?)[0-9]/ig,
21148      _doc$8,
21149      _supportsPointer$1,
21150      _win$9,
21151      _body$6,
21152      gsap$n,
21153      _context$5,
21154      _selectionColor = "#4e7fff",
21155      _minimumMovement = 1,
21156      _DEG2RAD$6 = Math.PI / 180,
21157      _getTime$3 = Date.now || function () {
21158    return new Date().getTime();
21159  },
21160      _lastInteraction = 0,
21161      _isPressed = 0,
21162      _emptyFunc$4 = function _emptyFunc() {
21163    return false;
21164  },
21165      _interacted = function _interacted() {
21166    return _lastInteraction = _getTime$3();
21167  },
21168      _CTRL,
21169      _ALT,
21170      _SHIFT,
21171      _CMD,
21172      _recentlyAddedAnchor,
21173      _editingAxis = {},
21174      _history = [],
21175      _point = {},
21176      _temp$1 = [],
21177      _comma = ",",
21178      _selectedPaths = [],
21179      _preventDefault$1 = function _preventDefault(event) {
21180    if (event.preventDefault) {
21181      event.preventDefault();
21182
21183      if (event.preventManipulation) {
21184        event.preventManipulation();
21185      }
21186    }
21187  },
21188      _createElement$3 = function _createElement(type) {
21189    return _doc$8.createElementNS ? _doc$8.createElementNS("http://www.w3.org/1999/xhtml", type) : _doc$8.createElement(type);
21190  },
21191      _createSVG = function _createSVG(type, container, attributes) {
21192    var element = _doc$8.createElementNS("http://www.w3.org/2000/svg", type),
21193        reg = /([a-z])([A-Z])/g,
21194        p;
21195
21196    attributes = attributes || {};
21197    attributes["class"] = attributes["class"] || "path-editor";
21198
21199    for (p in attributes) {
21200      if (element.style[p] !== undefined) {
21201        element.style[p] = attributes[p];
21202      } else {
21203        element.setAttributeNS(null, p.replace(reg, "$1-$2").toLowerCase(), attributes[p]);
21204      }
21205    }
21206
21207    container.appendChild(element);
21208    return element;
21209  },
21210      _identityMatrixObject = {
21211    matrix: new Matrix2D()
21212  },
21213      _getConsolidatedMatrix = function _getConsolidatedMatrix(target) {
21214    return (target.transform && target.transform.baseVal.consolidate() || _identityMatrixObject).matrix;
21215  },
21216      _getConcatenatedTransforms = function _getConcatenatedTransforms(target) {
21217    var m = _getConsolidatedMatrix(target),
21218        owner = target.ownerSVGElement;
21219
21220    while ((target = target.parentNode) && target.ownerSVGElement === owner) {
21221      m.multiply(_getConsolidatedMatrix(target));
21222    }
21223
vendor: 1,038 bytes, lines 21224-21257
21224    return "matrix(" + m.a + "," + m.b + "," + m.c + "," + m.d + "," + m.e + "," + m.f + ")";
21225  },
21226      _addHistory = function _addHistory(pathEditor) {
21227    var selectedIndexes = [],
21228        a = pathEditor._selectedAnchors,
21229        i;
21230
21231    for (i = 0; i < a.length; i++) {
21232      selectedIndexes[i] = a[i].i;
21233    }
21234
21235    _history.unshift({
21236      path: pathEditor,
21237      d: pathEditor.path.getAttribute("d"),
21238      transform: pathEditor.path.getAttribute("transform") || "",
21239      selectedIndexes: selectedIndexes
21240    });
21241
21242    if (_history.length > 30) {
21243      _history.length = 30;
21244    }
21245  },
21246      _round$b = function _round(value) {
21247    return ~~(value * 1000 + (value < 0 ? -.5 : .5)) / 1000;
21248  },
21249      _getSquarePathData = function _getSquarePathData(size) {
21250    size = _round$b(size);
21251    return ["M-" + size, -size, size, -size, size, size, -size, size + "z"].join(_comma);
21252  },
21253      _getCirclePathData = function _getCirclePathData(size) {
21254    var circ = 0.552284749831,
21255        rcirc = _round$b(size * circ);
21256
21257    size = _round$b
vendor: 23,031 bytes, lines 21257-22010
21257(size);
21258    return "M" + size + ",0C" + [size, rcirc, rcirc, size, 0, size, -rcirc, size, -size, rcirc, -size, 0, -size, -rcirc, -rcirc, -size, 0, -size, rcirc, -size, size, -rcirc, size, 0].join(_comma) + "z";
21259  },
21260      _checkDeselect = function _checkDeselect(e) {
21261    if (!e.target._gsSelection && !_isPressed && _getTime$3() - _lastInteraction > 100) {
21262      var i = _selectedPaths.length;
21263
21264      while (--i > -1) {
21265        _selectedPaths[i].deselect();
21266      }
21267
21268      _selectedPaths.length = 0;
21269    }
21270  },
21271      _tempDiv$3,
21272      _touchEventLookup$1,
21273      _isMultiTouching$1 = 0,
21274      _addListener$4 = function _addListener(element, type, func, capture) {
21275    if (element.addEventListener) {
21276      var touchType = _touchEventLookup$1[type];
21277      capture = capture || {
21278        passive: false
21279      };
21280      element.addEventListener(touchType || type, func, capture);
21281
21282      if (touchType && type !== touchType && touchType.substr(0, 7) !== "pointer") {
21283        element.addEventListener(type, func, capture);
21284      }
21285    } else if (element.attachEvent) {
21286      element.attachEvent("on" + type, func);
21287    }
21288  },
21289      _removeListener$4 = function _removeListener(element, type, func) {
21290    if (element.removeEventListener) {
21291      var touchType = _touchEventLookup$1[type];
21292      element.removeEventListener(touchType || type, func);
21293
21294      if (touchType && type !== touchType && touchType.substr(0, 7) !== "pointer") {
21295        element.removeEventListener(type, func);
21296      }
21297    } else if (element.detachEvent) {
21298      element.detachEvent("on" + type, func);
21299    }
21300  },
21301      _hasTouchID$1 = function _hasTouchID(list, ID) {
21302    var i = list.length;
21303
21304    while (--i > -1) {
21305      if (list[i].identifier === ID) {
21306        return true;
21307      }
21308    }
21309
21310    return false;
21311  },
21312      _onMultiTouchDocumentEnd$1 = function _onMultiTouchDocumentEnd(e) {
21313    _isMultiTouching$1 = e.touches && _dragCount < e.touches.length;
21314
21315    _removeListener$4(e.target, "touchend", _onMultiTouchDocumentEnd);
21316  },
21317      _onMultiTouchDocument$1 = function _onMultiTouchDocument(e) {
21318    _isMultiTouching$1 = e.touches && _dragCount < e.touches.length;
21319
21320    _addListener$4(e.target, "touchend", _onMultiTouchDocumentEnd$1);
21321  },
21322      _bind = function _bind(func, scope) {
21323    return function (e) {
21324      return func.call(scope, e);
21325    };
21326  },
21327      _callback$2 = function _callback(type, self, param) {
21328    var callback = self.vars[type];
21329
21330    if (callback) {
21331      callback.call(self.vars.callbackScope || self, param || self);
21332    }
21333
21334    return self;
21335  },
21336      _copyElement,
21337      _resetSelection = function _resetSelection() {
21338    _copyElement.style.display = "block";
21339
21340    _copyElement.select();
21341
21342    _copyElement.style.display = "none";
21343  },
21344      _coreInitted$j,
21345      _initCore$j = function _initCore(core) {
21346    _doc$8 = document;
21347    _win$9 = window;
21348    _body$6 = _doc$8.body;
21349    gsap$n = gsap$n || core || _win$9.gsap || console.warn("Please gsap.registerPlugin(PathEditor)");
21350
21351    _context$5 = gsap$n && gsap$n.core.context || function () {};
21352
21353    _tempDiv$3 = _createElement$3("div");
21354    _copyElement = _createElement$3("textarea");
21355    _copyElement.style.display = "none";
21356    _body$6 && _body$6.appendChild(_copyElement);
21357
21358    _touchEventLookup$1 = function (types) {
21359      var standard = types.split(","),
21360          converted = (_tempDiv$3.onpointerdown !== undefined ? "pointerdown,pointermove,pointerup,pointercancel" : _tempDiv$3.onmspointerdown !== undefined ? "MSPointerDown,MSPointerMove,MSPointerUp,MSPointerCancel" : types).split(","),
21361          obj = {},
21362          i = 4;
21363
21364      while (--i > -1) {
21365        obj[standard[i]] = converted[i];
21366        obj[converted[i]] = standard[i];
21367      }
21368
21369      return obj;
21370    }("touchstart,touchmove,touchend,touchcancel");
21371
21372    SVGElement.prototype.getTransformToElement = SVGElement.prototype.getTransformToElement || function (e) {
21373      return e.getScreenCTM().inverse().multiply(this.getScreenCTM());
21374    };
21375
21376    _doc$8.addEventListener("keydown", function (e) {
21377      var key = e.keyCode || e.which,
21378          keyString = e.key || key,
21379          i,
21380          state,
21381          a,
21382          path;
21383
21384      if (keyString === "Shift" || key === 16) {
21385        _SHIFT = true;
21386      } else if (keyString === "Control" || key === 17) {
21387        _CTRL = true;
21388      } else if (keyString === "Meta" || key === 91) {
21389        _CMD = true;
21390      } else if (keyString === "Alt" || key === 18) {
21391        _ALT = true;
21392        i = _selectedPaths.length;
21393
21394        while (--i > -1) {
21395          _selectedPaths[i]._onPressAlt();
21396        }
21397      } else if ((keyString === "z" || key === 90) && (_CTRL || _CMD) && _history.length > 1) {
21398        _history.shift();
21399
21400        state = _history[0];
21401
21402        if (state) {
21403          path = state.path;
21404          path.path.setAttribute("d", state.d);
21405          path.path.setAttribute("transform", state.transform);
21406          path.init();
21407          a = path._anchors;
21408
21409          for (i = 0; i < a.length; i++) {
21410            if (state.selectedIndexes.indexOf(a[i].i) !== -1) {
21411              path._selectedAnchors.push(a[i]);
21412            }
21413          }
21414
21415          path._updateAnchors();
21416
21417          path.update();
21418
21419          if (path.vars.onUndo) {
21420            path.vars.onUndo.call(path);
21421          }
21422        }
21423      } else if (keyString === "Delete" || keyString === "Backspace" || key === 8 || key === 46 || key === 63272 || key === "d" && (_CTRL || _CMD)) {
21424        i = _selectedPaths.length;
21425
21426        while (--i > -1) {
21427          _selectedPaths[i]._deleteSelectedAnchors();
21428        }
21429      } else if ((keyString === "a" || key === 65) && (_CMD || _CTRL)) {
21430        i = _selectedPaths.length;
21431
21432        while (--i > -1) {
21433          _selectedPaths[i].select(true);
21434        }
21435      }
21436    }, true);
21437
21438    _doc$8.addEventListener("keyup", function (e) {
21439      var key = e.key || e.keyCode || e.which;
21440
21441      if (key === "Shift" || key === 16) {
21442        _SHIFT = false;
21443      } else if (key === "Control" || key === 17) {
21444        _CTRL = false;
21445      } else if (key === "Meta" || key === 91) {
21446        _CMD = false;
21447      } else if (key === "Alt" || key === 18) {
21448        _ALT = false;
21449        var i = _selectedPaths.length;
21450
21451        while (--i > -1) {
21452          _selectedPaths[i]._onReleaseAlt();
21453        }
21454      }
21455    }, true);
21456
21457    _supportsPointer$1 = !!_win$9.PointerEvent;
21458
21459    _addListener$4(_doc$8, "mouseup", _checkDeselect);
21460
21461    _addListener$4(_doc$8, "touchend", _checkDeselect);
21462
21463    _addListener$4(_doc$8, "touchcancel", _emptyFunc$4);
21464
21465    _addListener$4(_win$9, "touchmove", _emptyFunc$4);
21466
21467    _body$6 && _body$6.addEventListener("touchstart", _emptyFunc$4);
21468    _coreInitted$j = 1;
21469  },
21470      _onPress = function _onPress(e) {
21471    var self = this,
21472        ctm = getGlobalMatrix(self.target.parentNode, true),
21473        touchEventTarget,
21474        temp;
21475    this._matrix = this.target.transform.baseVal.getItem(0).matrix;
21476    this._ctm = ctm;
21477
21478    if (_touchEventLookup$1[e.type]) {
21479      touchEventTarget = e.type.indexOf("touch") !== -1 ? e.currentTarget || e.target : _doc$8;
21480
21481      _addListener$4(touchEventTarget, "touchend", self._onRelease);
21482
21483      _addListener$4(touchEventTarget, "touchmove", self._onMove);
21484
21485      _addListener$4(touchEventTarget, "touchcancel", self._onRelease);
21486
21487      _addListener$4(_doc$8, "touchstart", _onMultiTouchDocument$1);
21488
21489      _addListener$4(_win$9, "touchforcechange", _preventDefault$1);
21490    } else {
21491      touchEventTarget = null;
21492
21493      _addListener$4(_doc$8, "mousemove", self._onMove);
21494    }
21495
21496    if (!_supportsPointer$1) {
21497      _addListener$4(_doc$8, "mouseup", self._onRelease);
21498    }
21499
21500    _preventDefault$1(e);
21501
21502    _resetSelection();
21503
21504    if (e.changedTouches) {
21505      e = self.touch = e.changedTouches[0];
21506      self.touchID = e.identifier;
21507    } else if (e.pointerId) {
21508      self.touchID = e.pointerId;
21509    } else {
21510      self.touch = self.touchID = null;
21511    }
21512
21513    self._startPointerY = self.pointerY = e.pageY;
21514    self._startPointerX = self.pointerX = e.pageX;
21515    self._startElementX = self._matrix.e;
21516    self._startElementY = self._matrix.f;
21517
21518    if (this._ctm.a === 1 && this._ctm.b === 0 && this._ctm.c === 0 && this._ctm.d === 1) {
21519      this._ctm = null;
21520    } else {
21521      temp = self._startPointerX * this._ctm.a + self._startPointerY * this._ctm.c + this._ctm.e;
21522      self._startPointerY = self._startPointerX * this._ctm.b + self._startPointerY * this._ctm.d + this._ctm.f;
21523      self._startPointerX = temp;
21524    }
21525
21526    self.isPressed = _isPressed = true;
21527    self.touchEventTarget = touchEventTarget;
21528
21529    if (self.vars.onPress) {
21530      self.vars.onPress.call(self.vars.callbackScope || self, self.pointerEvent);
21531    }
21532  },
21533      _onMove = function _onMove(e) {
21534    var self = this,
21535        originalEvent = e,
21536        touches,
21537        i;
21538
21539    if (!self._enabled || _isMultiTouching$1 || !self.isPressed || !e) {
21540      return;
21541    }
21542
21543    self.pointerEvent = e;
21544    touches = e.changedTouches;
21545
21546    if (touches) {
21547      e = touches[0];
21548
21549      if (e !== self.touch && e.identifier !== self.touchID) {
21550        i = touches.length;
21551
21552        while (--i > -1 && (e = touches[i]).identifier !== self.touchID) {}
21553
21554        if (i < 0) {
21555          return;
21556        }
21557      }
21558    } else if (e.pointerId && self.touchID && e.pointerId !== self.touchID) {
21559      return;
21560    }
21561
21562    _preventDefault$1(originalEvent);
21563
21564    self.setPointerPosition(e.pageX, e.pageY);
21565
21566    if (self.vars.onDrag) {
21567      self.vars.onDrag.call(self.vars.callbackScope || self, self.pointerEvent);
21568    }
21569  },
21570      _onRelease = function _onRelease(e, force) {
21571    var self = this;
21572
21573    if (!self._enabled || !self.isPressed || e && self.touchID != null && !force && (e.pointerId && e.pointerId !== self.touchID || e.changedTouches && !_hasTouchID$1(e.changedTouches, self.touchID))) {
21574      return;
21575    }
21576
21577    _interacted();
21578
21579    self.isPressed = _isPressed = false;
21580    var originalEvent = e,
21581        wasDragging = self.isDragging,
21582        touchEventTarget = self.touchEventTarget,
21583        touches,
21584        i;
21585
21586    if (touchEventTarget) {
21587      _removeListener$4(touchEventTarget, "touchend", self._onRelease);
21588
21589      _removeListener$4(touchEventTarget, "touchmove", self._onMove);
21590
21591      _removeListener$4(touchEventTarget, "touchcancel", self._onRelease);
21592
21593      _removeListener$4(_doc$8, "touchstart", _onMultiTouchDocument$1);
21594    } else {
21595      _removeListener$4(_doc$8, "mousemove", self._onMove);
21596    }
21597
21598    if (!_supportsPointer$1) {
21599      _removeListener$4(_doc$8, "mouseup", self._onRelease);
21600
21601      if (e && e.target) {
21602        _removeListener$4(e.target, "mouseup", self._onRelease);
21603      }
21604    }
21605
21606    if (wasDragging) {
21607      self.isDragging = false;
21608    } else if (self.vars.onClick) {
21609      self.vars.onClick.call(self.vars.callbackScope || self, originalEvent);
21610    }
21611
21612    if (e) {
21613      touches = e.changedTouches;
21614
21615      if (touches) {
21616        e = touches[0];
21617
21618        if (e !== self.touch && e.identifier !== self.touchID) {
21619          i = touches.length;
21620
21621          while (--i > -1 && (e = touches[i]).identifier !== self.touchID) {}
21622
21623          if (i < 0) {
21624            return;
21625          }
21626        }
21627      }
21628
21629      self.pointerEvent = originalEvent;
21630      self.pointerX = e.pageX;
21631      self.pointerY = e.pageY;
21632    }
21633
21634    if (originalEvent && !wasDragging && self.vars.onDragRelease) {
21635      self.vars.onDragRelease.call(self, self.pointerEvent);
21636    } else {
21637      if (originalEvent) {
21638        _preventDefault$1(originalEvent);
21639      }
21640
21641      if (self.vars.onRelease) {
21642        self.vars.onRelease.call(self.vars.callbackScope || self, self.pointerEvent);
21643      }
21644    }
21645
21646    if (wasDragging && self.vars.onDragEnd) {
21647      self.vars.onDragEnd.call(self.vars.callbackScope || self, self.pointerEvent);
21648    }
21649
21650    return true;
21651  },
21652      _createSegmentAnchors = function _createSegmentAnchors(rawPath, j, editor, vars) {
21653    var segment = rawPath[j],
21654        l = segment.length - (segment.closed ? 6 : 0),
21655        a = [],
21656        i;
21657
21658    for (i = 0; i < l; i += 6) {
21659      a.push(new Anchor(editor, rawPath, j, i, vars));
21660    }
21661
21662    segment.closed && (a[0].isClosedStart = true);
21663    return a;
21664  },
21665      _getLength$1 = function _getLength(segment, i, i2) {
21666    var x = segment[i2] - segment[i],
21667        y = segment[i2 + 1] - segment[i + 1];
21668    return Math.sqrt(x * x + y * y);
21669  };
21670
21671  var DraggableSVG = function () {
21672    function DraggableSVG(target, vars) {
21673      this.target = typeof target === "string" ? _doc$8.querySelectorAll(target)[0] : target;
21674      this.vars = vars || {};
21675      this._onPress = _bind(_onPress, this);
21676      this._onMove = _bind(_onMove, this);
21677      this._onRelease = _bind(_onRelease, this);
21678      this.target.setAttribute("transform", (this.target.getAttribute("transform") || "") + " translate(0,0)");
21679      this._matrix = _getConsolidatedMatrix(this.target);
21680      this.x = this._matrix.e;
21681      this.y = this._matrix.f;
21682      this.snap = vars.snap;
21683
21684      if (!isNaN(vars.maxX) || !isNaN(vars.minX)) {
21685        this._bounds = 1;
21686        this.maxX = +vars.maxX;
21687        this.minX = +vars.minX;
21688      } else {
21689        this._bounds = 0;
21690      }
21691
21692      this.enabled(true);
21693    }
21694
21695    var _proto = DraggableSVG.prototype;
21696
21697    _proto.setPointerPosition = function setPointerPosition(pointerX, pointerY) {
21698      var rnd = 1000,
21699          xChange,
21700          yChange,
21701          x,
21702          y,
21703          temp;
21704      this.pointerX = pointerX;
21705      this.pointerY = pointerY;
21706
21707      if (this._ctm) {
21708        temp = pointerX * this._ctm.a + pointerY * this._ctm.c + this._ctm.e;
21709        pointerY = pointerX * this._ctm.b + pointerY * this._ctm.d + this._ctm.f;
21710        pointerX = temp;
21711      }
21712
21713      yChange = pointerY - this._startPointerY;
21714      xChange = pointerX - this._startPointerX;
21715
21716      if (yChange < _minimumMovement && yChange > -_minimumMovement) {
21717        yChange = 0;
21718      }
21719
21720      if (xChange < _minimumMovement && xChange > -_minimumMovement) {
21721        xChange = 0;
21722      }
21723
21724      x = ((this._startElementX + xChange) * rnd | 0) / rnd;
21725      y = ((this._startElementY + yChange) * rnd | 0) / rnd;
21726
21727      if (this.snap && !_SHIFT) {
21728        _point.x = x;
21729        _point.y = y;
21730        this.snap.call(this, _point);
21731        x = _point.x;
21732        y = _point.y;
21733      }
21734
21735      if (this.x !== x || this.y !== y) {
21736        this._matrix.f = this.y = y;
21737        this._matrix.e = this.x = x;
21738
21739        if (!this.isDragging && this.isPressed) {
21740          this.isDragging = true;
21741
21742          _callback$2("onDragStart", this, this.pointerEvent);
21743        }
21744      }
21745    };
21746
21747    _proto.enabled = function enabled(_enabled) {
21748      if (!arguments.length) {
21749        return this._enabled;
21750      }
21751
21752      var dragging;
21753      this._enabled = _enabled;
21754
21755      if (_enabled) {
21756        if (!_supportsPointer$1) {
21757          _addListener$4(this.target, "mousedown", this._onPress);
21758        }
21759
21760        _addListener$4(this.target, "touchstart", this._onPress);
21761
21762        _addListener$4(this.target, "click", this._onClick, true);
21763      } else {
21764        dragging = this.isDragging;
21765
21766        _removeListener$4(this.target, "mousedown", this._onPress);
21767
21768        _removeListener$4(this.target, "touchstart", this._onPress);
21769
21770        _removeListener$4(_win$9, "touchforcechange", _preventDefault$1);
21771
21772        _removeListener$4(this.target, "click", this._onClick);
21773
21774        if (this.touchEventTarget) {
21775          _removeListener$4(this.touchEventTarget, "touchcancel", this._onRelease);
21776
21777          _removeListener$4(this.touchEventTarget, "touchend", this._onRelease);
21778
21779          _removeListener$4(this.touchEventTarget, "touchmove", this._onMove);
21780        }
21781
21782        _removeListener$4(_doc$8, "mouseup", this._onRelease);
21783
21784        _removeListener$4(_doc$8, "mousemove", this._onMove);
21785
21786        this.isDragging = this.isPressed = false;
21787
21788        if (dragging) {
21789          _callback$2("onDragEnd", this, this.pointerEvent);
21790        }
21791      }
21792
21793      return this;
21794    };
21795
21796    _proto.endDrag = function endDrag(e) {
21797      this._onRelease(e);
21798    };
21799
21800    return DraggableSVG;
21801  }();
21802
21803  var Anchor = function () {
21804    function Anchor(editor, rawPath, j, i, vars) {
21805      this.editor = editor;
21806      this.element = _createSVG("path", editor._selection, {
21807        fill: _selectionColor,
21808        stroke: _selectionColor,
21809        strokeWidth: 2,
21810        vectorEffect: "non-scaling-stroke"
21811      });
21812      this.update(rawPath, j, i);
21813      this.element._gsSelection = true;
21814      this.vars = vars || {};
21815      this._draggable = new DraggableSVG(this.element, {
21816        callbackScope: this,
21817        onDrag: this.onDrag,
21818        snap: this.vars.snap,
21819        onPress: this.onPress,
21820        onRelease: this.onRelease,
21821        onClick: this.onClick,
21822        onDragEnd: this.onDragEnd
21823      });
21824    }
21825
21826    var _proto2 = Anchor.prototype;
21827
21828    _proto2.onPress = function onPress() {
21829      _callback$2("onPress", this);
21830    };
21831
21832    _proto2.onClick = function onClick() {
21833      _callback$2("onClick", this);
21834    };
21835
21836    _proto2.onDrag = function onDrag() {
21837      var s = this.segment;
21838      this.vars.onDrag.call(this.vars.callbackScope || this, this, this._draggable.x - s[this.i], this._draggable.y - s[this.i + 1]);
21839    };
21840
21841    _proto2.onDragEnd = function onDragEnd() {
21842      _callback$2("onDragEnd", this);
21843    };
21844
21845    _proto2.onRelease = function onRelease() {
21846      _callback$2("onRelease", this);
21847    };
21848
21849    _proto2.update = function update(rawPath, j, i) {
21850      if (rawPath) {
21851        this.rawPath = rawPath;
21852      }
21853
21854      if (arguments.length <= 1) {
21855        j = this.j;
21856        i = this.i;
21857      } else {
21858        this.j = j;
21859        this.i = i;
21860      }
21861
21862      var prevSmooth = this.smooth,
21863          segment = this.rawPath[j],
21864          pi = i === 0 && segment.closed ? segment.length - 4 : i - 2;
21865      this.segment = segment;
21866      this.smooth = i > 0 && i < segment.length - 2 && Math.abs(Math.atan2(segment[i + 1] - segment[pi + 1], segment[i] - segment[pi]) - Math.atan2(segment[i + 3] - segment[i + 1], segment[i + 2] - segment[i])) < 0.09 ? 2 : 0;
21867
21868      if (this.smooth !== prevSmooth) {
21869        this.element.setAttribute("d", this.smooth ? this.editor._circleHandle : this.editor._squareHandle);
21870      }
21871
21872      this.element.setAttribute("transform", "translate(" + segment[i] + "," + segment[i + 1] + ")");
21873    };
21874
21875    return Anchor;
21876  }();
21877
21878  var PathEditor = function () {
21879    function PathEditor(target, vars) {
21880      vars = vars || {};
21881      _coreInitted$j || _initCore$j();
21882      this.vars = vars;
21883      this.path = typeof target === "string" ? _doc$8.querySelectorAll(target)[0] : target;
21884      this._g = _createSVG("g", this.path.ownerSVGElement, {
21885        "class": "path-editor-g path-editor"
21886      });
21887      this._selectionHittest = _createSVG("path", this._g, {
21888        stroke: "transparent",
21889        strokeWidth: 16,
21890        fill: "none",
21891        vectorEffect: "non-scaling-stroke"
21892      });
21893      this._selection = vars._selection || _createSVG("g", this._g, {
21894        "class": "path-editor-selection path-editor"
21895      });
21896      this._selectionPath = _createSVG("path", this._selection, {
21897        stroke: _selectionColor,
21898        strokeWidth: 2,
21899        fill: "none",
21900        vectorEffect: "non-scaling-stroke"
21901      });
21902      this._selectedAnchors = [];
21903      this._line1 = _createSVG("polyline", this._selection, {
21904        stroke: _selectionColor,
21905        strokeWidth: 2,
21906        vectorEffect: "non-scaling-stroke"
21907      });
21908      this._line2 = _createSVG("polyline", this._selection, {
21909        stroke: _selectionColor,
21910        strokeWidth: 2,
21911        vectorEffect: "non-scaling-stroke"
21912      });
21913      this._line1.style.pointerEvents = this._line2.style.pointerEvents = this._selectionPath.style.pointerEvents = "none";
21914      this._enabled = true;
21915      var ctm = this.path.parentNode.getScreenCTM().inverse(),
21916          size = (ctm.a + ctm.d) / 2 * (vars.handleSize || 5);
21917      this._squareHandle = _getSquarePathData(size);
21918      this._circleHandle = _getCirclePathData(size * 1.15);
21919      this._handle1 = _createSVG("path", this._selection, {
21920        d: this._squareHandle,
21921        fill: _selectionColor,
21922        stroke: "transparent",
21923        strokeWidth: 6
21924      });
21925      this._handle2 = _createSVG("path", this._selection, {
21926        d: this._squareHandle,
21927        fill: _selectionColor,
21928        stroke: "transparent",
21929        strokeWidth: 6
21930      });
21931      this._handle1._draggable = new DraggableSVG(this._handle1, {
21932        onDrag: this._onDragHandle1,
21933        callbackScope: this,
21934        onPress: this._onPressHandle1,
21935        onRelease: this._onReleaseHandle,
21936        onClick: this._onClickHandle1,
21937        snap: vars.handleSnap
21938      });
21939      this._handle2._draggable = new DraggableSVG(this._handle2, {
21940        onDrag: this._onDragHandle2,
21941        callbackScope: this,
21942        onPress: this._onPressHandle2,
21943        onRelease: this._onReleaseHandle,
21944        onClick: this._onClickHandle2,
21945        snap: vars.handleSnap
21946      });
21947      this._handle1.style.visibility = this._handle2.style.visibility = "hidden";
21948      var selectionItems = [this._handle1, this._handle2, this._line1, this._line2, this._selection, this._selectionPath, this._selectionHittest],
21949          i = selectionItems.length;
21950
21951      while (--i > -1) {
21952        selectionItems[i]._gsSelection = true;
21953      }
21954
21955      if (vars.draggable !== false) {
21956        this._draggable = new DraggableSVG(this._selectionHittest, {
21957          callbackScope: this,
21958          onPress: this.select,
21959          onRelease: this._onRelease,
21960          onDrag: this._onDragPath,
21961          onDragEnd: this._saveState,
21962          maxX: this.vars.maxX,
21963          minX: this.vars.minX
21964        });
21965      }
21966
21967      this.init();
21968      this._selection.style.visibility = vars.selected === false ? "hidden" : "visible";
21969
21970      if (vars.selected !== false) {
21971        this.path._gsSelection = true;
21972
21973        _selectedPaths.push(this);
21974      }
21975
21976      this._saveState();
21977
21978      if (!_supportsPointer$1) {
21979        _addListener$4(this._selectionHittest, "mousedown", _bind(this._onClickSelectionPath, this));
21980
21981        _addListener$4(this._selectionHittest, "mouseup", _bind(this._onRelease, this));
21982      }
21983
21984      _addListener$4(this._selectionHittest, "touchstart", _bind(this._onClickSelectionPath, this));
21985
21986      _addListener$4(this._selectionHittest, "touchend", _bind(this._onRelease, this));
21987
21988      _context$5(this);
21989    }
21990
21991    var _proto3 = PathEditor.prototype;
21992
21993    _proto3._onRelease = function _onRelease(e) {
21994      var anchor = this._editingAnchor;
21995
21996      if (anchor) {
21997        _editingAxis.x = anchor.segment[anchor.i];
21998        _editingAxis.y = anchor.segment[anchor.i + 1];
21999      }
22000
22001      _removeListener$4(_win$9, "touchforcechange", _preventDefault$1);
22002
22003      _callback$2("onRelease", this, e);
22004    };
22005
22006    _proto3.init = function init() {
22007      var pathData = this.path.getAttribute("d"),
22008          rawPath = stringToRawPath(pathData),
22009          transform = this.path.getAttribute("transform") || "translate(0,0)",
22010          createAnchors = !this._rawPath || rawPath.totalPoints !== this._rawPath.totalPoints || rawPath.
vendor: 4,071 bytes, lines 22010-22155
22010length !== this._rawPath.length,
22011          anchorVars = {
22012        callbackScope: this,
22013        snap: this.vars.anchorSnap,
22014        onDrag: this._onDragAnchor,
22015        onPress: this._onPressAnchor,
22016        onRelease: this._onRelease,
22017        onClick: this._onClickAnchor,
22018        onDragEnd: this._onDragEndAnchor,
22019        maxX: this.vars.maxX,
22020        minX: this.vars.minX
22021      },
22022          l,
22023          i;
22024
22025      if (createAnchors && this._anchors && this._anchors.length) {
22026        for (i = 0; i < this._anchors.length; i++) {
22027          this._anchors[i].element.parentNode.removeChild(this._anchors[i].element);
22028
22029          this._anchors[i]._draggable.enabled(false);
22030        }
22031
22032        this._selectedAnchors.length = 0;
22033      }
22034
22035      this._rawPath = rawPath;
22036
22037      if (createAnchors) {
22038        this._anchors = _createSegmentAnchors(rawPath, 0, this, anchorVars);
22039        l = rawPath.length;
22040
22041        if (l > 1) {
22042          for (i = 1; i < l; i++) {
22043            this._anchors = this._anchors.concat(_createSegmentAnchors(rawPath, i, this, anchorVars));
22044          }
22045        }
22046      } else {
22047        i = this._anchors.length;
22048
22049        while (--i > -1) {
22050          this._anchors[i].update(rawPath);
22051        }
22052      }
22053
22054      this._selection.appendChild(this._handle1);
22055
22056      this._selection.appendChild(this._handle2);
22057
22058      this._selectionPath.setAttribute("d", pathData);
22059
22060      this._selectionHittest.setAttribute("d", pathData);
22061
22062      this._g.setAttribute("transform", _getConcatenatedTransforms(this.path.parentNode) || "translate(0,0)");
22063
22064      this._selection.setAttribute("transform", transform);
22065
22066      this._selectionHittest.setAttribute("transform", transform);
22067
22068      this._updateAnchors();
22069
22070      return this;
22071    };
22072
22073    _proto3._saveState = function _saveState() {
22074      _addHistory(this);
22075    };
22076
22077    _proto3._onClickSelectionPath = function _onClickSelectionPath(e) {
22078      if (this._selection.style.visibility === "hidden") {
22079        this.select();
22080      } else if (_ALT || e && e.altKey) {
22081        var anchorVars = {
22082          callbackScope: this,
22083          snap: this.vars.anchorSnap,
22084          onDrag: this._onDragAnchor,
22085          onPress: this._onPressAnchor,
22086          onRelease: this._onRelease,
22087          onClick: this._onClickAnchor,
22088          onDragEnd: this._onDragEndAnchor,
22089          maxX: this.vars.maxX,
22090          minX: this.vars.minX
22091        },
22092            ctm = this._selection.getScreenCTM().inverse(),
22093            newIndex,
22094            _i,
22095            anchor,
22096            x,
22097            y,
22098            closestData;
22099
22100        if (this._draggable) {
22101          this._draggable._onRelease(e);
22102        }
22103
22104        if (ctm) {
22105          x = e.clientX * ctm.a + e.clientY * ctm.c + ctm.e;
22106          y = e.clientX * ctm.b + e.clientY * ctm.d + ctm.f;
22107        }
22108
22109        closestData = getClosestData(this._rawPath, x, y);
22110        subdivideSegment(this._rawPath[closestData.j], closestData.i, closestData.t);
22111        newIndex = closestData.i + 6;
22112
22113        for (_i = 0; _i < this._anchors.length; _i++) {
22114          if (this._anchors[_i].i >= newIndex) {
22115            this._anchors[_i].i += 6;
22116          }
22117        }
22118
22119        anchor = new Anchor(this, this._rawPath, closestData.j, newIndex, anchorVars);
22120
22121        this._selection.appendChild(this._handle1);
22122
22123        this._selection.appendChild(this._handle2);
22124
22125        anchor._draggable._onPress(e);
22126
22127        _recentlyAddedAnchor = anchor;
22128
22129        this._anchors.push(anchor);
22130
22131        this._selectedAnchors.length = 0;
22132
22133        this._selectedAnchors.push(anchor);
22134
22135        this._updateAnchors();
22136
22137        this.update();
22138
22139        this._saveState();
22140      }
22141
22142      _resetSelection();
22143
22144      _addListener$4(_win$9, "touchforcechange", _preventDefault$1);
22145
22146      _callback$2("onPress", this);
22147    };
22148
22149    _proto3._onClickHandle1 = function _onClickHandle1() {
22150      var anchor = this._editingAnchor,
22151          i = anchor.i,
22152          s = anchor.segment,
22153          pi = anchor.isClosedStart ? s.length - 4 : i - 2;
22154
22155      if (_ALT && Math.abs(s[i] - s[pi]) < 5 && Math.abs(s[i + 1] - s[pi + 1]) < 5) {
vendor: 10,334 bytes, lines 22156-22490
22156        this._onClickAnchor(anchor);
22157      }
22158    };
22159
22160    _proto3._onClickHandle2 = function _onClickHandle2() {
22161      var anchor = this._editingAnchor,
22162          i = anchor.i,
22163          s = anchor.segment;
22164
22165      if (_ALT && Math.abs(s[i] - s[i + 2]) < 5 && Math.abs(s[i + 1] - s[i + 3]) < 5) {
22166        this._onClickAnchor(anchor);
22167      }
22168    };
22169
22170    _proto3._onDragEndAnchor = function _onDragEndAnchor(e) {
22171      _recentlyAddedAnchor = null;
22172
22173      this._saveState();
22174    };
22175
22176    _proto3.isSelected = function isSelected() {
22177      return this._selectedAnchors.length > 0 || this._selection.style.visibility === "visible";
22178    };
22179
22180    _proto3.select = function select(allAnchors) {
22181      this._selection.style.visibility = "visible";
22182      this._editingAnchor = null;
22183      this.path._gsSelection = true;
22184
22185      if (allAnchors === true) {
22186        var _i2 = this._anchors.length;
22187
22188        while (--_i2 > -1) {
22189          this._selectedAnchors[_i2] = this._anchors[_i2];
22190        }
22191      }
22192
22193      if (_selectedPaths.indexOf(this) === -1) {
22194        _selectedPaths.push(this);
22195      }
22196
22197      this._updateAnchors();
22198
22199      return this;
22200    };
22201
22202    _proto3.deselect = function deselect() {
22203      this._selection.style.visibility = "hidden";
22204      this._selectedAnchors.length = 0;
22205      this._editingAnchor = null;
22206      this.path._gsSelection = false;
22207
22208      _selectedPaths.splice(_selectedPaths.indexOf(this), 1);
22209
22210      this._updateAnchors();
22211
22212      return this;
22213    };
22214
22215    _proto3._onDragPath = function _onDragPath(e) {
22216      var transform = this._selectionHittest.getAttribute("transform") || "translate(0,0)";
22217
22218      this._selection.setAttribute("transform", transform);
22219
22220      this.path.setAttribute("transform", transform);
22221    };
22222
22223    _proto3._onPressAnchor = function _onPressAnchor(anchor) {
22224      if (this._selectedAnchors.indexOf(anchor) === -1) {
22225        if (!_SHIFT) {
22226          this._selectedAnchors.length = 0;
22227        }
22228
22229        this._selectedAnchors.push(anchor);
22230      } else if (_SHIFT) {
22231        this._selectedAnchors.splice(this._selectedAnchors.indexOf(anchor), 1);
22232
22233        anchor._draggable.endDrag();
22234      }
22235
22236      _editingAxis.x = anchor.segment[anchor.i];
22237      _editingAxis.y = anchor.segment[anchor.i + 1];
22238
22239      this._updateAnchors();
22240
22241      _callback$2("onPress", this);
22242    };
22243
22244    _proto3._deleteSelectedAnchors = function _deleteSelectedAnchors() {
22245      var anchors = this._selectedAnchors,
22246          i = anchors.length,
22247          anchor,
22248          index,
22249          j;
22250
22251      while (--i > -1) {
22252        anchor = anchors[i];
22253        anchor.element.parentNode.removeChild(anchor.element);
22254
22255        anchor._draggable.enabled(false);
22256
22257        index = anchor.i;
22258
22259        if (!index) {
22260          anchor.segment.splice(index, 6);
22261        } else if (index < anchor.segment.length - 2) {
22262          anchor.segment.splice(index - 2, 6);
22263        } else {
22264          anchor.segment.splice(index - 4, 6);
22265        }
22266
22267        anchors.splice(i, 1);
22268
22269        this._anchors.splice(this._anchors.indexOf(anchor), 1);
22270
22271        for (j = 0; j < this._anchors.length; j++) {
22272          if (this._anchors[j].i >= index) {
22273            this._anchors[j].i -= 6;
22274          }
22275        }
22276      }
22277
22278      this._updateAnchors();
22279
22280      this.update();
22281
22282      this._saveState();
22283
22284      if (this.vars.onDeleteAnchor) {
22285        this.vars.onDeleteAnchor.call(this.vars.callbackScope || this);
22286      }
22287    };
22288
22289    _proto3._onClickAnchor = function _onClickAnchor(anchor) {
22290      var i = anchor.i,
22291          segment = anchor.segment,
22292          pi = anchor.isClosedStart ? segment.length - 4 : i - 2,
22293          rnd = 1000,
22294          isEnd = !i || i >= segment.length - 2,
22295          angle1,
22296          angle2,
22297          length1,
22298          length2,
22299          sin,
22300          cos;
22301
22302      if (_ALT && _recentlyAddedAnchor !== anchor && this._editingAnchor) {
22303        anchor.smooth = !anchor.smooth;
22304
22305        if (isEnd && !anchor.isClosedStart) {
22306          anchor.smooth = false;
22307        }
22308
22309        anchor.element.setAttribute("d", anchor.smooth ? this._circleHandle : this._squareHandle);
22310
22311        if (anchor.smooth && (!isEnd || anchor.isClosedStart)) {
22312          angle1 = Math.atan2(segment[i + 1] - segment[pi + 1], segment[i] - segment[pi]);
22313          angle2 = Math.atan2(segment[i + 3] - segment[i + 1], segment[i + 2] - segment[i]);
22314          angle1 = (angle1 + angle2) / 2;
22315          length1 = _getLength$1(segment, pi, i);
22316          length2 = _getLength$1(segment, i, i + 2);
22317
22318          if (length1 < 0.2) {
22319            length1 = _getLength$1(segment, i, pi - 4) / 4;
22320            angle1 = angle2 || Math.atan2(segment[i + 7] - segment[pi - 3], segment[i + 6] - segment[pi - 4]);
22321          }
22322
22323          if (length2 < 0.2) {
22324            length2 = _getLength$1(segment, i, i + 6) / 4;
22325            angle2 = angle1 || Math.atan2(segment[i + 7] - segment[pi - 3], segment[i + 6] - segment[pi - 4]);
22326          }
22327
22328          sin = Math.sin(angle1);
22329          cos = Math.cos(angle1);
22330
22331          if (Math.abs(angle2 - angle1) < Math.PI / 2) {
22332            sin = -sin;
22333            cos = -cos;
22334          }
22335
22336          segment[pi] = ((segment[i] + cos * length1) * rnd | 0) / rnd;
22337          segment[pi + 1] = ((segment[i + 1] + sin * length1) * rnd | 0) / rnd;
22338          segment[i + 2] = ((segment[i] - cos * length2) * rnd | 0) / rnd;
22339          segment[i + 3] = ((segment[i + 1] - sin * length2) * rnd | 0) / rnd;
22340
22341          this._updateAnchors();
22342
22343          this.update();
22344
22345          this._saveState();
22346        } else if (!anchor.smooth && (!isEnd || anchor.isClosedStart)) {
22347          if (i || anchor.isClosedStart) {
22348            segment[pi] = segment[i];
22349            segment[pi + 1] = segment[i + 1];
22350          }
22351
22352          if (i < segment.length - 2) {
22353            segment[i + 2] = segment[i];
22354            segment[i + 3] = segment[i + 1];
22355          }
22356
22357          this._updateAnchors();
22358
22359          this.update();
22360
22361          this._saveState();
22362        }
22363      } else if (!_SHIFT) {
22364        this._selectedAnchors.length = 0;
22365
22366        this._selectedAnchors.push(anchor);
22367      }
22368
22369      _recentlyAddedAnchor = null;
22370
22371      this._updateAnchors();
22372    };
22373
22374    _proto3._updateAnchors = function _updateAnchors() {
22375      var anchor = this._selectedAnchors.length === 1 ? this._selectedAnchors[0] : null,
22376          segment = anchor ? anchor.segment : null,
22377          i,
22378          x,
22379          y;
22380      this._editingAnchor = anchor;
22381
22382      for (i = 0; i < this._anchors.length; i++) {
22383        this._anchors[i].element.style.fill = this._selectedAnchors.indexOf(this._anchors[i]) !== -1 ? _selectionColor : "white";
22384      }
22385
22386      if (anchor) {
22387        this._handle1.setAttribute("d", anchor.smooth ? this._circleHandle : this._squareHandle);
22388
22389        this._handle2.setAttribute("d", anchor.smooth ? this._circleHandle : this._squareHandle);
22390      }
22391
22392      i = anchor ? anchor.i : 0;
22393
22394      if (anchor && (i || anchor.isClosedStart)) {
22395        x = anchor.isClosedStart ? segment[segment.length - 4] : segment[i - 2];
22396        y = anchor.isClosedStart ? segment[segment.length - 3] : segment[i - 1];
22397        this._handle1.style.visibility = this._line1.style.visibility = !_ALT && x === segment[i] && y === segment[i + 1] ? "hidden" : "visible";
22398
22399        this._handle1.setAttribute("transform", "translate(" + x + _comma + y + ")");
22400
22401        this._line1.setAttribute("points", x + _comma + y + _comma + segment[i] + _comma + segment[i + 1]);
22402      } else {
22403        this._handle1.style.visibility = this._line1.style.visibility = "hidden";
22404      }
22405
22406      if (anchor && i < segment.length - 2) {
22407        x = segment[i + 2];
22408        y = segment[i + 3];
22409        this._handle2.style.visibility = this._line2.style.visibility = !_ALT && x === segment[i] && y === segment[i + 1] ? "hidden" : "visible";
22410
22411        this._handle2.setAttribute("transform", "translate(" + x + _comma + y + ")");
22412
22413        this._line2.setAttribute("points", segment[i] + _comma + segment[i + 1] + _comma + x + _comma + y);
22414      } else {
22415        this._handle2.style.visibility = this._line2.style.visibility = "hidden";
22416      }
22417    };
22418
22419    _proto3._onPressAlt = function _onPressAlt() {
22420      var anchor = this._editingAnchor;
22421
22422      if (anchor) {
22423        if (anchor.i || anchor.isClosedStart) {
22424          this._handle1.style.visibility = this._line1.style.visibility = "visible";
22425        }
22426
22427        if (anchor.i < anchor.segment.length - 2) {
22428          this._handle2.style.visibility = this._line2.style.visibility = "visible";
22429        }
22430      }
22431    };
22432
22433    _proto3._onReleaseAlt = function _onReleaseAlt() {
22434      var anchor = this._editingAnchor,
22435          s,
22436          i,
22437          pi;
22438
22439      if (anchor) {
22440        s = anchor.segment;
22441        i = anchor.i;
22442        pi = anchor.isClosedStart ? s.length - 4 : i - 2;
22443
22444        if (s[i] === s[pi] && s[i + 1] === s[pi + 1]) {
22445          this._handle1.style.visibility = this._line1.style.visibility = "hidden";
22446        }
22447
22448        if (s[i] === s[i + 2] && s[i + 1] === s[i + 3]) {
22449          this._handle2.style.visibility = this._line2.style.visibility = "hidden";
22450        }
22451      }
22452    };
22453
22454    _proto3._onPressHandle1 = function _onPressHandle1() {
22455      if (this._editingAnchor.smooth) {
22456        this._oppositeHandleLength = _getLength$1(this._editingAnchor.segment, this._editingAnchor.i, this._editingAnchor.i + 2);
22457      }
22458
22459      _callback$2("onPress", this);
22460    };
22461
22462    _proto3._onPressHandle2 = function _onPressHandle2() {
22463      if (this._editingAnchor.smooth) {
22464        this._oppositeHandleLength = _getLength$1(this._editingAnchor.segment, this._editingAnchor.isClosedStart ? this._editingAnchor.segment.length - 4 : this._editingAnchor.i - 2, this._editingAnchor.i);
22465      }
22466
22467      _callback$2("onPress", this);
22468    };
22469
22470    _proto3._onReleaseHandle = function _onReleaseHandle(e) {
22471      this._onRelease(e);
22472
22473      this._saveState();
22474    };
22475
22476    _proto3._onDragHandle1 = function _onDragHandle1() {
22477      var anchor = this._editingAnchor,
22478          s = anchor.segment,
22479          i = anchor.i,
22480          pi = anchor.isClosedStart ? s.length - 4 : i - 2,
22481          rnd = 1000,
22482          x = this._handle1._draggable.x,
22483          y = this._handle1._draggable.y,
22484          angle;
22485      s[pi] = x = (x * rnd | 0) / rnd;
22486      s[pi + 1] = y = (y * rnd | 0) / rnd;
22487
22488      if (anchor.smooth) {
22489        if (_ALT) {
22490          anchor.smooth = false;
vendor: 19,270 bytes, lines 22491-23147
22491          anchor.element.setAttribute("d", this._squareHandle);
22492
22493          this._handle1.setAttribute("d", this._squareHandle);
22494
22495          this._handle2.setAttribute("d", this._squareHandle);
22496        } else {
22497          angle = Math.atan2(s[i + 1] - y, s[i] - x);
22498          x = this._oppositeHandleLength * Math.cos(angle);
22499          y = this._oppositeHandleLength * Math.sin(angle);
22500          s[i + 2] = ((s[i] + x) * rnd | 0) / rnd;
22501          s[i + 3] = ((s[i + 1] + y) * rnd | 0) / rnd;
22502        }
22503      }
22504
22505      this.update();
22506    };
22507
22508    _proto3._onDragHandle2 = function _onDragHandle2() {
22509      var anchor = this._editingAnchor,
22510          s = anchor.segment,
22511          i = anchor.i,
22512          pi = anchor.isClosedStart ? s.length - 4 : i - 2,
22513          rnd = 1000,
22514          x = this._handle2._draggable.x,
22515          y = this._handle2._draggable.y,
22516          angle;
22517      s[i + 2] = x = (x * rnd | 0) / rnd;
22518      s[i + 3] = y = (y * rnd | 0) / rnd;
22519
22520      if (anchor.smooth) {
22521        if (_ALT) {
22522          anchor.smooth = false;
22523          anchor.element.setAttribute("d", this._squareHandle);
22524
22525          this._handle1.setAttribute("d", this._squareHandle);
22526
22527          this._handle2.setAttribute("d", this._squareHandle);
22528        } else {
22529          angle = Math.atan2(s[i + 1] - y, s[i] - x);
22530          x = this._oppositeHandleLength * Math.cos(angle);
22531          y = this._oppositeHandleLength * Math.sin(angle);
22532          s[pi] = ((s[i] + x) * rnd | 0) / rnd;
22533          s[pi + 1] = ((s[i + 1] + y) * rnd | 0) / rnd;
22534        }
22535      }
22536
22537      this.update();
22538    };
22539
22540    _proto3._onDragAnchor = function _onDragAnchor(anchor, changeX, changeY) {
22541      var anchors = this._selectedAnchors,
22542          l = anchors.length,
22543          rnd = 1000,
22544          i,
22545          j,
22546          s,
22547          a,
22548          pi;
22549
22550      for (j = 0; j < l; j++) {
22551        a = anchors[j];
22552        i = a.i;
22553        s = a.segment;
22554
22555        if (i) {
22556          s[i - 2] = ((s[i - 2] + changeX) * rnd | 0) / rnd;
22557          s[i - 1] = ((s[i - 1] + changeY) * rnd | 0) / rnd;
22558        } else if (a.isClosedStart) {
22559          pi = s.length - 2;
22560          s[pi] = _round$b(s[pi] + changeX);
22561          s[pi + 1] = _round$b(s[pi + 1] + changeY);
22562          s[pi - 2] = _round$b(s[pi - 2] + changeX);
22563          s[pi - 1] = _round$b(s[pi - 1] + changeY);
22564        }
22565
22566        s[i] = ((s[i] + changeX) * rnd | 0) / rnd;
22567        s[i + 1] = ((s[i + 1] + changeY) * rnd | 0) / rnd;
22568
22569        if (i < s.length - 2) {
22570          s[i + 2] = ((s[i + 2] + changeX) * rnd | 0) / rnd;
22571          s[i + 3] = ((s[i + 3] + changeY) * rnd | 0) / rnd;
22572        }
22573
22574        if (a !== anchor) {
22575          a.element.setAttribute("transform", "translate(" + s[i] + _comma + s[i + 1] + ")");
22576        }
22577      }
22578
22579      this.update();
22580    };
22581
22582    _proto3.enabled = function enabled(_enabled2) {
22583      if (!arguments.length) {
22584        return this._enabled;
22585      }
22586
22587      var i = this._anchors.length;
22588
22589      while (--i > -1) {
22590        this._anchors[i]._draggable.enabled(_enabled2);
22591      }
22592
22593      this._enabled = _enabled2;
22594
22595      this._handle1._draggable.enabled(_enabled2);
22596
22597      this._handle2._draggable.enabled(_enabled2);
22598
22599      if (this._draggable) {
22600        this._draggable.enabled(_enabled2);
22601      }
22602
22603      if (!_enabled2) {
22604        this.deselect();
22605        this._selectionHittest.parentNode && this._selectionHittest.parentNode.removeChild(this._selectionHittest);
22606        this._selection.parentNode && this._selection.parentNode.removeChild(this._selection);
22607      } else if (!this._selection.parentNode) {
22608        this.path.ownerSVGElement.appendChild(this._selectionHittest);
22609        this.path.ownerSVGElement.appendChild(this._selection);
22610        this.init();
22611
22612        this._saveState();
22613      }
22614
22615      this._updateAnchors();
22616
22617      return this.update();
22618    };
22619
22620    _proto3.update = function update(readPath) {
22621      var d = "",
22622          anchor = this._editingAnchor,
22623          i,
22624          s,
22625          x,
22626          y,
22627          pi;
22628
22629      if (readPath) {
22630        this.init();
22631      }
22632
22633      if (anchor) {
22634        i = anchor.i;
22635        s = anchor.segment;
22636
22637        if (i || anchor.isClosedStart) {
22638          pi = anchor.isClosedStart ? s.length - 4 : i - 2;
22639          x = s[pi];
22640          y = s[pi + 1];
22641
22642          this._handle1.setAttribute("transform", "translate(" + x + _comma + y + ")");
22643
22644          this._line1.setAttribute("points", x + _comma + y + _comma + s[i] + _comma + s[i + 1]);
22645        }
22646
22647        if (i < s.length - 2) {
22648          x = s[i + 2];
22649          y = s[i + 3];
22650
22651          this._handle2.setAttribute("transform", "translate(" + x + _comma + y + ")");
22652
22653          this._line2.setAttribute("points", s[i] + _comma + s[i + 1] + _comma + x + _comma + y);
22654        }
22655      }
22656
22657      if (readPath) {
22658        d = this.path.getAttribute("d");
22659      } else {
22660        for (i = 0; i < this._rawPath.length; i++) {
22661          s = this._rawPath[i];
22662
22663          if (s.length > 7) {
22664            d += "M" + s[0] + _comma + s[1] + "C" + s.slice(2).join(_comma);
22665          }
22666        }
22667
22668        this.path.setAttribute("d", d);
22669
22670        this._selectionPath.setAttribute("d", d);
22671
22672        this._selectionHittest.setAttribute("d", d);
22673      }
22674
22675      if (this.vars.onUpdate && this._enabled) {
22676        _callback$2("onUpdate", this, d);
22677      }
22678
22679      return this;
22680    };
22681
22682    _proto3.getRawPath = function getRawPath(applyTransforms, offsetX, offsetY) {
22683      if (applyTransforms) {
22684        var m = _getConsolidatedMatrix(this.path);
22685
22686        return transformRawPath(copyRawPath(this._rawPath), 1, 0, 0, 1, m.e + (offsetX || 0), m.f + (offsetY || 0));
22687      }
22688
22689      return this._rawPath;
22690    };
22691
22692    _proto3.getString = function getString(applyTransforms, offsetX, offsetY) {
22693      if (applyTransforms) {
22694        var m = _getConsolidatedMatrix(this.path);
22695
22696        return rawPathToString(transformRawPath(copyRawPath(this._rawPath), 1, 0, 0, 1, m.e + (offsetX || 0), m.f + (offsetY || 0)));
22697      }
22698
22699      return this.path.getAttribute("d");
22700    };
22701
22702    _proto3.getNormalizedSVG = function getNormalizedSVG(height, originY, shorten, onEaseError) {
22703      var s = this._rawPath[0],
22704          tx = s[0] * -1,
22705          ty = originY === 0 ? 0 : -(originY || s[1]),
22706          l = s.length,
22707          sx = 1 / (s[l - 2] + tx),
22708          sy = -height || s[l - 1] + ty,
22709          rnd = 1000,
22710          points,
22711          i,
22712          x1,
22713          y1,
22714          x2,
22715          y2;
22716      _temp$1.length = 0;
22717
22718      if (sy) {
22719        sy = 1 / sy;
22720      } else {
22721        sy = -sx;
22722      }
22723
22724      sx *= rnd;
22725      sy *= rnd;
22726
22727      for (i = 0; i < l; i += 2) {
22728        _temp$1[i] = ((s[i] + tx) * sx | 0) / rnd;
22729        _temp$1[i + 1] = ((s[i + 1] + ty) * sy | 0) / rnd;
22730      }
22731
22732      if (onEaseError) {
22733        points = [];
22734        l = _temp$1.length;
22735
22736        for (i = 2; i < l; i += 6) {
22737          x1 = _temp$1[i - 2];
22738          y1 = _temp$1[i - 1];
22739          x2 = _temp$1[i + 4];
22740          y2 = _temp$1[i + 5];
22741          points.push(x1, y1, x2, y2);
22742          bezierToPoints(x1, y1, _temp$1[i], _temp$1[i + 1], _temp$1[i + 2], _temp$1[i + 3], x2, y2, 0.001, points, points.length - 2);
22743        }
22744
22745        x1 = points[0];
22746        l = points.length;
22747
22748        for (i = 2; i < l; i += 2) {
22749          x2 = points[i];
22750
22751          if (x2 < x1 || x2 > 1 || x2 < 0) {
22752            onEaseError();
22753            break;
22754          }
22755
22756          x1 = x2;
22757        }
22758      }
22759
22760      if (shorten && l === 8 && _temp$1[0] === 0 && _temp$1[1] === 0 && _temp$1[l - 2] === 1 && _temp$1[l - 1] === 1) {
22761        return _temp$1.slice(2, 6).join(",");
22762      }
22763
22764      _temp$1[2] = "C" + _temp$1[2];
22765      return "M" + _temp$1.join(",");
22766    };
22767
22768    _proto3.kill = function kill() {
22769      this.enabled(false);
22770      this._g.parentNode && this._g.parentNode.removeChild(this._g);
22771    };
22772
22773    _proto3.revert = function revert() {
22774      this.kill();
22775    };
22776
22777    return PathEditor;
22778  }();
22779  PathEditor.simplifyPoints = simplifyPoints;
22780  PathEditor.pointsToSegment = pointsToSegment;
22781
22782  PathEditor.simplifySVG = function (data, vars) {
22783    var element, points, i, x1, x2, y1, y2, bezier, precision, tolerance, l, cornerThreshold;
22784    vars = vars || {};
22785    tolerance = vars.tolerance || 1;
22786    precision = vars.precision || 1 / tolerance;
22787    cornerThreshold = (vars.cornerThreshold === undefined ? 18 : +vars.cornerThreshold) * _DEG2RAD$6;
22788
22789    if (typeof data !== "string") {
22790      element = data;
22791      data = element.getAttribute("d");
22792    }
22793
22794    if (data.charAt(0) === "#" || data.charAt(0) === ".") {
22795      element = _doc$8.querySelector(data);
22796
22797      if (element) {
22798        data = element.getAttribute("d");
22799      }
22800    }
22801
22802    points = vars.curved === false && !/[achqstvz]/ig.test(data) ? data.match(_numbersExp$1) : stringToRawPath(data)[0];
22803
22804    if (vars.curved !== false) {
22805      bezier = points;
22806      points = [];
22807      l = bezier.length;
22808
22809      for (i = 2; i < l; i += 6) {
22810        x1 = +bezier[i - 2];
22811        y1 = +bezier[i - 1];
22812        x2 = +bezier[i + 4];
22813        y2 = +bezier[i + 5];
22814        points.push(_round$b(x1), _round$b(y1), _round$b(x2), _round$b(y2));
22815        bezierToPoints(x1, y1, +bezier[i], +bezier[i + 1], +bezier[i + 2], +bezier[i + 3], x2, y2, 1 / (precision * 200000), points, points.length - 2);
22816      }
22817
22818      points = pointsToSegment(simplifyPoints(points, tolerance), vars.curviness);
22819      points[2] = "C" + points[2];
22820    } else {
22821      points = simplifyPoints(points, tolerance);
22822    }
22823
22824    data = "M" + points.join(",");
22825
22826    if (element) {
22827      element.setAttribute("d", data);
22828    }
22829
22830    return data;
22831  };
22832
22833  PathEditor.create = function (target, vars) {
22834    return new PathEditor(target, vars);
22835  };
22836
22837  PathEditor.editingAxis = _editingAxis;
22838
22839  PathEditor.getSnapFunction = function (vars) {
22840    var r = vars.radius || 2,
22841        big = 1e20,
22842        minX = vars.x || vars.x === 0 ? vars.x : vars.width ? 0 : -big,
22843        minY = vars.y || vars.y === 0 ? vars.y : vars.height ? 0 : -big,
22844        maxX = minX + (vars.width || big * big),
22845        maxY = minY + (vars.height || big * big),
22846        containX = vars.containX !== false,
22847        containY = vars.containY !== false,
22848        axis = vars.axis,
22849        grid = vars.gridSize;
22850    r *= r;
22851    return function (p) {
22852      var x = p.x,
22853          y = p.y,
22854          gridX,
22855          gridY,
22856          dx,
22857          dy;
22858
22859      if (containX && x < minX || (dx = x - minX) * dx < r) {
22860        x = minX;
22861      } else if (containX && x > maxX || (dx = maxX - x) * dx < r) {
22862        x = maxX;
22863      }
22864
22865      if (containY && y < minY || (dy = y - minY) * dy < r) {
22866        y = minY;
22867      } else if (containY && y > maxY || (dy = maxY - y) * dy < r) {
22868        y = maxY;
22869      }
22870
22871      if (axis) {
22872        dx = x - axis.x;
22873        dy = y - axis.y;
22874
22875        if (dx * dx < r) {
22876          x = axis.x;
22877        }
22878
22879        if (dy * dy < r) {
22880          y = axis.y;
22881        }
22882      }
22883
22884      if (grid) {
22885        gridX = minX + Math.round((x - minX) / grid) * grid;
22886        dx = gridX - x;
22887        gridY = minY + Math.round((y - minY) / grid) * grid;
22888        dy = gridY - y;
22889
22890        if (dx * dx + dy * dy < r) {
22891          x = gridX;
22892          y = gridY;
22893        }
22894      }
22895
22896      p.x = x;
22897      p.y = y;
22898    };
22899  };
22900
22901  PathEditor.version = "3.12.5";
22902  PathEditor.register = _initCore$j;
22903
22904  /*!
22905   * MotionPathHelper 3.12.5
22906   * https://gsap.com
22907   *
22908   * @license Copyright 2008-2024, GreenSock. All rights reserved.
22909   * Subject to the terms at https://gsap.com/standard-license or for
22910   * Club GSAP members, the agreement issued with that membership.
22911   * @author: Jack Doyle, [email protected]
22912  */
22913
22914  var gsap$o,
22915      _win$a,
22916      _doc$9,
22917      _docEl$4,
22918      _body$7,
22919      MotionPathPlugin$1,
22920      _arrayToRawPath,
22921      _rawPathToString,
22922      _context$6,
22923      _selectorExp$2 = /(^[#\.][a-z]|[a-y][a-z])/i,
22924      _isString$7 = function _isString(value) {
22925    return typeof value === "string";
22926  },
22927      _createElement$4 = function _createElement(type, ns) {
22928    var e = _doc$9.createElementNS ? _doc$9.createElementNS((ns || "http://www.w3.org/1999/xhtml").replace(/^https/, "http"), type) : _doc$9.createElement(type);
22929    return e.style ? e : _doc$9.createElement(type);
22930  },
22931      _getPositionOnPage = function _getPositionOnPage(target) {
22932    var bounds = target.getBoundingClientRect(),
22933        windowOffsetY = _docEl$4.clientTop - (_win$a.pageYOffset || _docEl$4.scrollTop || _body$7.scrollTop || 0),
22934        windowOffsetX = _docEl$4.clientLeft - (_win$a.pageXOffset || _docEl$4.scrollLeft || _body$7.scrollLeft || 0);
22935    return {
22936      left: bounds.left + windowOffsetX,
22937      top: bounds.top + windowOffsetY,
22938      right: bounds.right + windowOffsetX,
22939      bottom: bounds.bottom + windowOffsetY
22940    };
22941  },
22942      _getInitialPath = function _getInitialPath(x, y) {
22943    var coordinates = [0, 31, 8, 58, 24, 75, 40, 90, 69, 100, 100, 100],
22944        i;
22945
22946    for (i = 0; i < coordinates.length; i += 2) {
22947      coordinates[i] += x;
22948      coordinates[i + 1] += y;
22949    }
22950
22951    return "M" + x + "," + y + "C" + coordinates.join(",");
22952  },
22953      _getGlobalTime = function _getGlobalTime(animation) {
22954    var time = animation.totalTime();
22955
22956    while (animation) {
22957      time = animation.startTime() + time / (animation.timeScale() || 1);
22958      animation = animation.parent;
22959    }
22960
22961    return time;
22962  },
22963      _copyElement$1,
22964      _initCopyToClipboard = function _initCopyToClipboard() {
22965    _copyElement$1 = _createElement$4("textarea");
22966    _copyElement$1.style.display = "none";
22967
22968    _body$7.appendChild(_copyElement$1);
22969  },
22970      _parsePath = function _parsePath(path, target, vars) {
22971    return _isString$7(path) && _selectorExp$2.test(path) ? _doc$9.querySelector(path) : Array.isArray(path) ? _rawPathToString(_arrayToRawPath([{
22972      x: gsap$o.getProperty(target, "x"),
22973      y: gsap$o.getProperty(target, "y")
22974    }].concat(path), vars)) : _isString$7(path) || path && (path.tagName + "").toLowerCase() === "path" ? path : 0;
22975  },
22976      _addCopyToClipboard = function _addCopyToClipboard(target, getter, onComplete) {
22977    target.addEventListener('click', function (e) {
22978      if (e.target._gsHelper) {
22979        var c = getter(e.target);
22980        _copyElement$1.value = c;
22981
22982        if (c && _copyElement$1.select) {
22983          console.log(c);
22984          _copyElement$1.style.display = "block";
22985
22986          _copyElement$1.select();
22987
22988          try {
22989            _doc$9.execCommand('copy');
22990
22991            _copyElement$1.blur();
22992
22993            onComplete && onComplete(target);
22994          } catch (err) {
22995            console.warn("Copy didn't work; this browser doesn't permit that.");
22996          }
22997
22998          _copyElement$1.style.display = "none";
22999        }
23000      }
23001    });
23002  },
23003      _identityMatrixObject$1 = {
23004    matrix: {
23005      a: 1,
23006      b: 0,
23007      c: 0,
23008      d: 1,
23009      e: 0,
23010      f: 0
23011    }
23012  },
23013      _getConsolidatedMatrix$1 = function _getConsolidatedMatrix(target) {
23014    return (target.transform.baseVal.consolidate() || _identityMatrixObject$1).matrix;
23015  },
23016      _findMotionPathTween = function _findMotionPathTween(target) {
23017    var tweens = gsap$o.getTweensOf(target),
23018        i = 0;
23019
23020    for (; i < tweens.length; i++) {
23021      if (tweens[i].vars.motionPath) {
23022        return tweens[i];
23023      } else if (tweens[i].timeline) {
23024        tweens.push.apply(tweens, tweens[i].timeline.getChildren());
23025      }
23026    }
23027  },
23028      _initCore$k = function _initCore(core, required) {
23029    var message = "Please gsap.registerPlugin(MotionPathPlugin)";
23030    _win$a = window;
23031    gsap$o = gsap$o || core || _win$a.gsap || console.warn(message);
23032    gsap$o && PathEditor.register(gsap$o);
23033    _doc$9 = document;
23034    _body$7 = _doc$9.body;
23035    _docEl$4 = _doc$9.documentElement;
23036
23037    if (gsap$o) {
23038      MotionPathPlugin$1 = gsap$o.plugins.motionPath;
23039      MotionPathHelper.PathEditor = PathEditor;
23040
23041      _context$6 = gsap$o.core.context || function () {};
23042    }
23043
23044    if (!MotionPathPlugin$1) {
23045      required === true && console.warn(message);
23046    } else {
23047      _initCopyToClipboard();
23048
23049      _arrayToRawPath = MotionPathPlugin$1.arrayToRawPath;
23050      _rawPathToString = MotionPathPlugin$1.rawPathToString;
23051    }
23052  };
23053
23054  var MotionPathHelper = function () {
23055    function MotionPathHelper(targetOrTween, vars) {
23056      var _this = this;
23057
23058      if (vars === void 0) {
23059        vars = {};
23060      }
23061
23062      if (!MotionPathPlugin$1) {
23063        _initCore$k(vars.gsap, 1);
23064      }
23065
23066      var copyButton = _createElement$4("div"),
23067          self = this,
23068          offset = {
23069        x: 0,
23070        y: 0
23071      },
23072          target,
23073          path,
23074          isSVG,
23075          startX,
23076          startY,
23077          position,
23078          svg,
23079          animation,
23080          svgNamespace,
23081          temp,
23082          matrix,
23083          refreshPath,
23084          animationToScrub,
23085          createdSVG;
23086
23087      if (targetOrTween instanceof gsap$o.core.Tween) {
23088        animation = targetOrTween;
23089        target = animation.targets()[0];
23090      } else {
23091        target = gsap$o.utils.toArray(targetOrTween)[0];
23092        animation = _findMotionPathTween(target);
23093      }
23094
23095      path = _parsePath(vars.path, target, vars);
23096      this.offset = offset;
23097      position = _getPositionOnPage(target);
23098      startX = parseFloat(gsap$o.getProperty(target, "x", "px"));
23099      startY = parseFloat(gsap$o.getProperty(target, "y", "px"));
23100      isSVG = target.getCTM && target.tagName.toLowerCase() !== "svg";
23101
23102      if (animation && !path) {
23103        path = _parsePath(animation.vars.motionPath.path || animation.vars.motionPath, target, animation.vars.motionPath);
23104      }
23105
23106      copyButton.setAttribute("class", "copy-motion-path");
23107      copyButton.style.cssText = "border-radius:8px; background-color:rgba(85, 85, 85, 0.7); color:#fff; cursor:pointer; padding:6px 12px; font-family:Signika Negative, Arial, sans-serif; position:fixed; left:50%; transform:translate(-50%, 0); font-size:19px; bottom:10px";
23108      copyButton.innerText = "COPY MOTION PATH";
23109      copyButton._gsHelper = self;
23110
23111      (gsap$o.utils.toArray(vars.container)[0] || _body$7).appendChild(copyButton);
23112
23113      _addCopyToClipboard(copyButton, function () {
23114        return self.getString();
23115      }, function () {
23116        return gsap$o.fromTo(copyButton, {
23117          backgroundColor: "white"
23118        }, {
23119          duration: 0.5,
23120          backgroundColor: "rgba(85, 85, 85, 0.6)"
23121        });
23122      });
23123
23124      svg = path && path.ownerSVGElement;
23125
23126      if (!svg) {
23127        svgNamespace = isSVG && target.ownerSVGElement && target.ownerSVGElement.getAttribute("xmlns") || "http://www.w3.org/2000/svg";
23128
23129        if (isSVG) {
23130          svg = target.ownerSVGElement;
23131          temp = target.getBBox();
23132          matrix = _getConsolidatedMatrix$1(target);
23133          startX = matrix.e;
23134          startY = matrix.f;
23135          offset.x = temp.x;
23136          offset.y = temp.y;
23137        } else {
23138          svg = _createElement$4("svg", svgNamespace);
23139          createdSVG = true;
23140
23141          _body$7.appendChild(svg);
23142
23143          svg.setAttribute("viewBox", "0 0 100 100");
23144          svg.setAttribute("class", "motion-path-helper");
23145          svg.style.cssText = "overflow:visible; background-color: transparent; position:absolute; z-index:5000; width:100px; height:100px; top:" + (position.top - startY) + "px; left:" + (position.left - startX) + "px;";
23146        }
23147
vendor: 4,132 bytes, lines 23148-23291
23148        temp = _isString$7(path) && !_selectorExp$2.test(path) ? path : _getInitialPath(startX, startY);
23149        path = _createElement$4("path", svgNamespace);
23150        path.setAttribute("d", temp);
23151        path.setAttribute("vector-effect", "non-scaling-stroke");
23152        path.style.cssText = "fill:transparent; stroke-width:" + (vars.pathWidth || 3) + "; stroke:" + (vars.pathColor || "#555") + "; opacity:" + (vars.pathOpacity || 0.6);
23153        svg.appendChild(path);
23154      } else {
23155        vars.pathColor && gsap$o.set(path, {
23156          stroke: vars.pathColor
23157        });
23158        vars.pathWidth && gsap$o.set(path, {
23159          strokeWidth: vars.pathWidth
23160        });
23161        vars.pathOpacity && gsap$o.set(path, {
23162          opacity: vars.pathOpacity
23163        });
23164      }
23165
23166      if (offset.x || offset.y) {
23167        gsap$o.set(path, {
23168          x: offset.x,
23169          y: offset.y
23170        });
23171      }
23172
23173      if (!("selected" in vars)) {
23174        vars.selected = true;
23175      }
23176
23177      if (!("anchorSnap" in vars)) {
23178        vars.anchorSnap = function (p) {
23179          if (p.x * p.x + p.y * p.y < 16) {
23180            p.x = p.y = 0;
23181          }
23182        };
23183      }
23184
23185      animationToScrub = animation && animation.parent && animation.parent.data === "nested" ? animation.parent.parent : animation;
23186
23187      vars.onPress = function () {
23188        animationToScrub.pause(0);
23189      };
23190
23191      refreshPath = function refreshPath() {
23192        animation.invalidate();
23193        animationToScrub.restart();
23194      };
23195
23196      vars.onRelease = vars.onDeleteAnchor = refreshPath;
23197      this.editor = PathEditor.create(path, vars);
23198
23199      if (vars.center) {
23200        gsap$o.set(target, {
23201          transformOrigin: "50% 50%",
23202          xPercent: -50,
23203          yPercent: -50
23204        });
23205      }
23206
23207      if (animation) {
23208        if (animation.vars.motionPath.path) {
23209          animation.vars.motionPath.path = path;
23210        } else {
23211          animation.vars.motionPath = {
23212            path: path
23213          };
23214        }
23215
23216        if (animationToScrub.parent !== gsap$o.globalTimeline) {
23217          gsap$o.globalTimeline.add(animationToScrub, _getGlobalTime(animationToScrub) - animationToScrub.delay());
23218        }
23219
23220        animationToScrub.repeat(-1).repeatDelay(1);
23221      } else {
23222        animation = animationToScrub = gsap$o.to(target, {
23223          motionPath: {
23224            path: path,
23225            start: vars.start || 0,
23226            end: "end" in vars ? vars.end : 1,
23227            autoRotate: "autoRotate" in vars ? vars.autoRotate : false,
23228            align: path,
23229            alignOrigin: vars.alignOrigin
23230          },
23231          duration: vars.duration || 5,
23232          ease: vars.ease || "power1.inOut",
23233          repeat: -1,
23234          repeatDelay: 1,
23235          paused: !vars.path
23236        });
23237      }
23238
23239      this.animation = animation;
23240
23241      _context$6(this);
23242
23243      this.kill = this.revert = function () {
23244        _this.editor.kill();
23245
23246        copyButton.parentNode && copyButton.parentNode.removeChild(copyButton);
23247        createdSVG && svg.parentNode && svg.parentNode.removeChild(svg);
23248        animationToScrub && animationToScrub.revert();
23249      };
23250    }
23251
23252    var _proto = MotionPathHelper.prototype;
23253
23254    _proto.getString = function getString() {
23255      return this.editor.getString(true, -this.offset.x, -this.offset.y);
23256    };
23257
23258    return MotionPathHelper;
23259  }();
23260  MotionPathHelper.register = _initCore$k;
23261
23262  MotionPathHelper.create = function (target, vars) {
23263    return new MotionPathHelper(target, vars);
23264  };
23265
23266  MotionPathHelper.editPath = function (path, vars) {
23267    return PathEditor.create(path, vars);
23268  };
23269
23270  MotionPathHelper.version = "3.12.5";
23271
23272  /*!
23273   * ScrollSmoother 3.12.5
23274   * https://gsap.com
23275   *
23276   * @license Copyright 2008-2024, GreenSock. All rights reserved.
23277   * Subject to the terms at https://gsap.com/standard-license or for
23278   * Club GSAP members, the agreement issued with that membership.
23279   * @author: Jack Doyle, [email protected]
23280  */
23281  var gsap$p,
23282      _coreInitted$k,
23283      _win$b,
23284      _doc$a,
23285      _docEl$5,
23286      _body$8,
23287      _toArray$9,
23288      _clamp$4,
23289      ScrollTrigger$3,
23290      _mainInstance,
23291      _expo,
23292      _getVelocityProp$1,
23293      _inputObserver$1,
23294      _context$7,
23295      _onResizeDelayedCall,
23296      _windowExists$a = function _windowExists() {
23297    return typeof window !== "undefined";
23298  },
23299      _getGSAP$l = function _getGSAP() {
23300    return gsap$p || _windowExists$a() && (gsap$p = window.gsap) && gsap$p.registerPlugin && gsap$p;
23301  },
23302      _round$c
vendor: 8,391 bytes, lines 23302-23537
23302 = function _round(value) {
23303    return Math.round(value * 100000) / 100000 || 0;
23304  },
23305      _maxScroll$1 = function _maxScroll(scroller) {
23306    return ScrollTrigger$3.maxScroll(scroller || _win$b);
23307  },
23308      _autoDistance = function _autoDistance(el, progress) {
23309    var parent = el.parentNode || _docEl$5,
23310        b1 = el.getBoundingClientRect(),
23311        b2 = parent.getBoundingClientRect(),
23312        gapTop = b2.top - b1.top,
23313        gapBottom = b2.bottom - b1.bottom,
23314        change = (Math.abs(gapTop) > Math.abs(gapBottom) ? gapTop : gapBottom) / (1 - progress),
23315        offset = -change * progress,
23316        ratio,
23317        extraChange;
23318
23319    if (change > 0) {
23320      ratio = b2.height / (_win$b.innerHeight + b2.height);
23321      extraChange = ratio === 0.5 ? b2.height * 2 : Math.min(b2.height, Math.abs(-change * ratio / (2 * ratio - 1))) * 2 * (progress || 1);
23322      offset += progress ? -extraChange * progress : -extraChange / 2;
23323      change += extraChange;
23324    }
23325
23326    return {
23327      change: change,
23328      offset: offset
23329    };
23330  },
23331      _wrap = function _wrap(el) {
23332    var wrapper = _doc$a.querySelector(".ScrollSmoother-wrapper");
23333
23334    if (!wrapper) {
23335      wrapper = _doc$a.createElement("div");
23336      wrapper.classList.add("ScrollSmoother-wrapper");
23337      el.parentNode.insertBefore(wrapper, el);
23338      wrapper.appendChild(el);
23339    }
23340
23341    return wrapper;
23342  };
23343
23344  var ScrollSmoother = function () {
23345    function ScrollSmoother(vars) {
23346      var _this = this;
23347
23348      _coreInitted$k || ScrollSmoother.register(gsap$p) || console.warn("Please gsap.registerPlugin(ScrollSmoother)");
23349      vars = this.vars = vars || {};
23350      _mainInstance && _mainInstance.kill();
23351      _mainInstance = this;
23352
23353      _context$7(this);
23354
23355      var _vars = vars,
23356          smoothTouch = _vars.smoothTouch,
23357          _onUpdate = _vars.onUpdate,
23358          onStop = _vars.onStop,
23359          smooth = _vars.smooth,
23360          onFocusIn = _vars.onFocusIn,
23361          normalizeScroll = _vars.normalizeScroll,
23362          wholePixels = _vars.wholePixels,
23363          content,
23364          wrapper,
23365          height,
23366          mainST,
23367          effects,
23368          sections,
23369          intervalID,
23370          wrapperCSS,
23371          contentCSS,
23372          paused,
23373          pausedNormalizer,
23374          recordedRefreshScroll,
23375          recordedRefreshScrub,
23376          allowUpdates,
23377          self = this,
23378          effectsPrefix = vars.effectsPrefix || "",
23379          scrollFunc = ScrollTrigger$3.getScrollFunc(_win$b),
23380          smoothDuration = ScrollTrigger$3.isTouch === 1 ? smoothTouch === true ? 0.8 : parseFloat(smoothTouch) || 0 : smooth === 0 || smooth === false ? 0 : parseFloat(smooth) || 0.8,
23381          speed = smoothDuration && +vars.speed || 1,
23382          currentY = 0,
23383          delta = 0,
23384          startupPhase = 1,
23385          tracker = _getVelocityProp$1(0),
23386          updateVelocity = function updateVelocity() {
23387        return tracker.update(-currentY);
23388      },
23389          scroll = {
23390        y: 0
23391      },
23392          removeScroll = function removeScroll() {
23393        return content.style.overflow = "visible";
23394      },
23395          isProxyScrolling,
23396          killScrub = function killScrub(trigger) {
23397        trigger.update();
23398        var scrub = trigger.getTween();
23399
23400        if (scrub) {
23401          scrub.pause();
23402          scrub._time = scrub._dur;
23403          scrub._tTime = scrub._tDur;
23404        }
23405
23406        isProxyScrolling = false;
23407        trigger.animation.progress(trigger.progress, true);
23408      },
23409          render = function render(y, force) {
23410        if (y !== currentY && !paused || force) {
23411          wholePixels && (y = Math.round(y));
23412
23413          if (smoothDuration) {
23414            content.style.transform = "matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, " + y + ", 0, 1)";
23415            content._gsap.y = y + "px";
23416          }
23417
23418          delta = y - currentY;
23419          currentY = y;
23420          ScrollTrigger$3.isUpdating || ScrollSmoother.isRefreshing || ScrollTrigger$3.update();
23421        }
23422      },
23423          scrollTop = function scrollTop(value) {
23424        if (arguments.length) {
23425          value < 0 && (value = 0);
23426          scroll.y = -value;
23427          isProxyScrolling = true;
23428          paused ? currentY = -value : render(-value);
23429          ScrollTrigger$3.isRefreshing ? mainST.update() : scrollFunc(value / speed);
23430          return this;
23431        }
23432
23433        return -currentY;
23434      },
23435          resizeObserver = typeof ResizeObserver !== "undefined" && vars.autoResize !== false && new ResizeObserver(function () {
23436        if (!ScrollTrigger$3.isRefreshing) {
23437          var max = _maxScroll$1(wrapper) * speed;
23438          max < -currentY && scrollTop(max);
23439
23440          _onResizeDelayedCall.restart(true);
23441        }
23442      }),
23443          lastFocusElement,
23444          _onFocusIn = function _onFocusIn(e) {
23445        wrapper.scrollTop = 0;
23446
23447        if (e.target.contains && e.target.contains(wrapper) || onFocusIn && onFocusIn(_this, e) === false) {
23448          return;
23449        }
23450
23451        ScrollTrigger$3.isInViewport(e.target) || e.target === lastFocusElement || _this.scrollTo(e.target, false, "center center");
23452        lastFocusElement = e.target;
23453      },
23454          _transformPosition = function _transformPosition(position, st) {
23455        if (position < st.start) {
23456          return position;
23457        }
23458
23459        var ratio = isNaN(st.ratio) ? 1 : st.ratio,
23460            change = st.end - st.start,
23461            distance = position - st.start,
23462            offset = st.offset || 0,
23463            pins = st.pins || [],
23464            pinOffset = pins.offset || 0,
23465            progressOffset = st._startClamp && st.start <= 0 || st.pins && st.pins.offset ? 0 : st._endClamp && st.end === _maxScroll$1() ? 1 : 0.5;
23466        pins.forEach(function (p) {
23467          change -= p.distance;
23468
23469          if (p.nativeStart <= position) {
23470            distance -= p.distance;
23471          }
23472        });
23473
23474        if (pinOffset) {
23475          distance *= (change - pinOffset / ratio) / change;
23476        }
23477
23478        return position + (distance - offset * progressOffset) / ratio - distance;
23479      },
23480          adjustEffectRelatedTriggers = function adjustEffectRelatedTriggers(st, triggers, partial) {
23481        partial || (st.pins.length = st.pins.offset = 0);
23482        var pins = st.pins,
23483            markers = st.markers,
23484            dif,
23485            isClamped,
23486            start,
23487            end,
23488            nativeStart,
23489            nativeEnd,
23490            i,
23491            trig;
23492
23493        for (i = 0; i < triggers.length; i++) {
23494          trig = triggers[i];
23495
23496          if (st.trigger && trig.trigger && st !== trig && (trig.trigger === st.trigger || trig.pinnedContainer === st.trigger || st.trigger.contains(trig.trigger))) {
23497            nativeStart = trig._startNative || trig._startClamp || trig.start;
23498            nativeEnd = trig._endNative || trig._endClamp || trig.end;
23499            start = _transformPosition(nativeStart, st);
23500            end = trig.pin && nativeEnd > 0 ? start + (nativeEnd - nativeStart) : _transformPosition(nativeEnd, st);
23501            trig.setPositions(start, end, true, (trig._startClamp ? Math.max(0, start) : start) - nativeStart);
23502            trig.markerStart && markers.push(gsap$p.quickSetter([trig.markerStart, trig.markerEnd], "y", "px"));
23503
23504            if (trig.pin && trig.end > 0 && !partial) {
23505              dif = trig.end - trig.start;
23506              isClamped = st._startClamp && trig.start < 0;
23507
23508              if (isClamped) {
23509                if (st.start > 0) {
23510                  st.setPositions(0, st.end + (st._startNative - st.start), true);
23511                  adjustEffectRelatedTriggers(st, triggers);
23512                  return;
23513                }
23514
23515                dif += trig.start;
23516                pins.offset = -trig.start;
23517              }
23518
23519              pins.push({
23520                start: trig.start,
23521                nativeStart: nativeStart,
23522                end: trig.end,
23523                distance: dif,
23524                trig: trig
23525              });
23526              st.setPositions(st.start, st.end + (isClamped ? -trig.start : dif), true);
23527            }
23528          }
23529        }
23530      },
23531          adjustParallaxPosition = function adjustParallaxPosition(triggers, createdAfterEffectWasApplied) {
23532        effects.forEach(function (st) {
23533          return adjustEffectRelatedTriggers(st, triggers, createdAfterEffectWasApplied);
23534        });
23535      },
23536          onRefresh = function onRefresh() {
23537        
vendor: 6,869 bytes, lines 23537-23722
23537removeScroll();
23538        requestAnimationFrame(removeScroll);
23539
23540        if (effects) {
23541          ScrollTrigger$3.getAll().forEach(function (st) {
23542            st._startNative = st.start;
23543            st._endNative = st.end;
23544          });
23545          effects.forEach(function (st) {
23546            var start = st._startClamp || st.start,
23547                end = st.autoSpeed ? Math.min(_maxScroll$1(), st.end) : start + Math.abs((st.end - start) / st.ratio),
23548                offset = end - st.end;
23549            start -= offset / 2;
23550            end -= offset / 2;
23551
23552            if (start > end) {
23553              var s = start;
23554              start = end;
23555              end = s;
23556            }
23557
23558            if (st._startClamp && start < 0) {
23559              end = st.ratio < 0 ? _maxScroll$1() : st.end / st.ratio;
23560              offset = end - st.end;
23561              start = 0;
23562            } else if (st.ratio < 0 || st._endClamp && end >= _maxScroll$1()) {
23563              end = _maxScroll$1();
23564              start = st.ratio < 0 ? 0 : st.ratio > 1 ? 0 : end - (end - st.start) / st.ratio;
23565              offset = (end - start) * st.ratio - (st.end - st.start);
23566            }
23567
23568            st.offset = offset || 0.0001;
23569            st.pins.length = st.pins.offset = 0;
23570            st.setPositions(start, end, true);
23571          });
23572          adjustParallaxPosition(ScrollTrigger$3.sort());
23573        }
23574
23575        tracker.reset();
23576      },
23577          addOnRefresh = function addOnRefresh() {
23578        return ScrollTrigger$3.addEventListener("refresh", onRefresh);
23579      },
23580          restoreEffects = function restoreEffects() {
23581        return effects && effects.forEach(function (st) {
23582          return st.vars.onRefresh(st);
23583        });
23584      },
23585          revertEffects = function revertEffects() {
23586        effects && effects.forEach(function (st) {
23587          return st.vars.onRefreshInit(st);
23588        });
23589        return restoreEffects;
23590      },
23591          effectValueGetter = function effectValueGetter(name, value, index, el) {
23592        return function () {
23593          var v = typeof value === "function" ? value(index, el) : value;
23594          v || v === 0 || (v = el.getAttribute("data-" + effectsPrefix + name) || (name === "speed" ? 1 : 0));
23595          el.setAttribute("data-" + effectsPrefix + name, v);
23596          var clamp = (v + "").substr(0, 6) === "clamp(";
23597          return {
23598            clamp: clamp,
23599            value: clamp ? v.substr(6, v.length - 7) : v
23600          };
23601        };
23602      },
23603          createEffect = function createEffect(el, speed, lag, index, effectsPadding) {
23604        effectsPadding = (typeof effectsPadding === "function" ? effectsPadding(index, el) : effectsPadding) || 0;
23605
23606        var getSpeed = effectValueGetter("speed", speed, index, el),
23607            getLag = effectValueGetter("lag", lag, index, el),
23608            startY = gsap$p.getProperty(el, "y"),
23609            cache = el._gsap,
23610            ratio,
23611            st,
23612            autoSpeed,
23613            scrub,
23614            progressOffset,
23615            yOffset,
23616            pins = [],
23617            initDynamicValues = function initDynamicValues() {
23618          speed = getSpeed();
23619          lag = parseFloat(getLag().value);
23620          ratio = parseFloat(speed.value) || 1;
23621          autoSpeed = speed.value === "auto";
23622          progressOffset = autoSpeed || st && st._startClamp && st.start <= 0 || pins.offset ? 0 : st && st._endClamp && st.end === _maxScroll$1() ? 1 : 0.5;
23623          scrub && scrub.kill();
23624          scrub = lag && gsap$p.to(el, {
23625            ease: _expo,
23626            overwrite: false,
23627            y: "+=0",
23628            duration: lag
23629          });
23630
23631          if (st) {
23632            st.ratio = ratio;
23633            st.autoSpeed = autoSpeed;
23634          }
23635        },
23636            revert = function revert() {
23637          cache.y = startY + "px";
23638          cache.renderTransform(1);
23639          initDynamicValues();
23640        },
23641            markers = [],
23642            change = 0,
23643            updateChange = function updateChange(self) {
23644          if (autoSpeed) {
23645            revert();
23646
23647            var auto = _autoDistance(el, _clamp$4(0, 1, -self.start / (self.end - self.start)));
23648
23649            change = auto.change;
23650            yOffset = auto.offset;
23651          } else {
23652            yOffset = pins.offset || 0;
23653            change = (self.end - self.start - yOffset) * (1 - ratio);
23654          }
23655
23656          pins.forEach(function (p) {
23657            return change -= p.distance * (1 - ratio);
23658          });
23659          self.offset = change || 0.001;
23660          self.vars.onUpdate(self);
23661          scrub && scrub.progress(1);
23662        };
23663
23664        initDynamicValues();
23665
23666        if (ratio !== 1 || autoSpeed || scrub) {
23667          st = ScrollTrigger$3.create({
23668            trigger: autoSpeed ? el.parentNode : el,
23669            start: function start() {
23670              return speed.clamp ? "clamp(top bottom+=" + effectsPadding + ")" : "top bottom+=" + effectsPadding;
23671            },
23672            end: function end() {
23673              return speed.value < 0 ? "max" : speed.clamp ? "clamp(bottom top-=" + effectsPadding + ")" : "bottom top-=" + effectsPadding;
23674            },
23675            scroller: wrapper,
23676            scrub: true,
23677            refreshPriority: -999,
23678            onRefreshInit: revert,
23679            onRefresh: updateChange,
23680            onKill: function onKill(self) {
23681              var i = effects.indexOf(self);
23682              i >= 0 && effects.splice(i, 1);
23683              revert();
23684            },
23685            onUpdate: function onUpdate(self) {
23686              var y = startY + change * (self.progress - progressOffset),
23687                  i = pins.length,
23688                  extraY = 0,
23689                  pin,
23690                  scrollY,
23691                  end;
23692
23693              if (self.offset) {
23694                if (i) {
23695                  scrollY = -currentY;
23696                  end = self.end;
23697
23698                  while (i--) {
23699                    pin = pins[i];
23700
23701                    if (pin.trig.isActive || scrollY >= pin.start && scrollY <= pin.end) {
23702                      if (scrub) {
23703                        pin.trig.progress += pin.trig.direction < 0 ? 0.001 : -0.001;
23704                        pin.trig.update(0, 0, 1);
23705                        scrub.resetTo("y", parseFloat(cache.y), -delta, true);
23706                        startupPhase && scrub.progress(1);
23707                      }
23708
23709                      return;
23710                    }
23711
23712                    scrollY > pin.end && (extraY += pin.distance);
23713                    end -= pin.distance;
23714                  }
23715
23716                  y = startY + extraY + change * ((gsap$p.utils.clamp(self.start, self.end, scrollY) - self.start - extraY) / (end - self.start) - progressOffset);
23717                }
23718
23719                markers.length && !autoSpeed && markers.forEach(function (setter) {
23720                  return setter(y - extraY);
23721                });
23722                y = _round$c
vendor: 8,738 bytes, lines 23722-24013
23722(y + yOffset);
23723
23724                if (scrub) {
23725                  scrub.resetTo("y", y, -delta, true);
23726                  startupPhase && scrub.progress(1);
23727                } else {
23728                  cache.y = y + "px";
23729                  cache.renderTransform(1);
23730                }
23731              }
23732            }
23733          });
23734          updateChange(st);
23735          gsap$p.core.getCache(st.trigger).stRevert = revertEffects;
23736          st.startY = startY;
23737          st.pins = pins;
23738          st.markers = markers;
23739          st.ratio = ratio;
23740          st.autoSpeed = autoSpeed;
23741          el.style.willChange = "transform";
23742        }
23743
23744        return st;
23745      };
23746
23747      addOnRefresh();
23748      ScrollTrigger$3.addEventListener("killAll", addOnRefresh);
23749      gsap$p.delayedCall(0.5, function () {
23750        return startupPhase = 0;
23751      });
23752      this.scrollTop = scrollTop;
23753
23754      this.scrollTo = function (target, smooth, position) {
23755        var p = gsap$p.utils.clamp(0, _maxScroll$1(), isNaN(target) ? _this.offset(target, position, !!smooth && !paused) : +target);
23756        !smooth ? scrollTop(p) : paused ? gsap$p.to(_this, {
23757          duration: smoothDuration,
23758          scrollTop: p,
23759          overwrite: "auto",
23760          ease: _expo
23761        }) : scrollFunc(p);
23762      };
23763
23764      this.offset = function (target, position, ignoreSpeed) {
23765        target = _toArray$9(target)[0];
23766        var cssText = target.style.cssText,
23767            st = ScrollTrigger$3.create({
23768          trigger: target,
23769          start: position || "top top"
23770        }),
23771            y;
23772
23773        if (effects) {
23774          startupPhase ? ScrollTrigger$3.refresh() : adjustParallaxPosition([st], true);
23775        }
23776
23777        y = st.start / (ignoreSpeed ? speed : 1);
23778        st.kill(false);
23779        target.style.cssText = cssText;
23780        gsap$p.core.getCache(target).uncache = 1;
23781        return y;
23782      };
23783
23784      function refreshHeight() {
23785        height = content.clientHeight;
23786        content.style.overflow = "visible";
23787        _body$8.style.height = _win$b.innerHeight + (height - _win$b.innerHeight) / speed + "px";
23788        return height - _win$b.innerHeight;
23789      }
23790
23791      this.content = function (element) {
23792        if (arguments.length) {
23793          var newContent = _toArray$9(element || "#smooth-content")[0] || console.warn("ScrollSmoother needs a valid content element.") || _body$8.children[0];
23794
23795          if (newContent !== content) {
23796            content = newContent;
23797            contentCSS = content.getAttribute("style") || "";
23798            resizeObserver && resizeObserver.observe(content);
23799            gsap$p.set(content, {
23800              overflow: "visible",
23801              width: "100%",
23802              boxSizing: "border-box",
23803              y: "+=0"
23804            });
23805            smoothDuration || gsap$p.set(content, {
23806              clearProps: "transform"
23807            });
23808          }
23809
23810          return this;
23811        }
23812
23813        return content;
23814      };
23815
23816      this.wrapper = function (element) {
23817        if (arguments.length) {
23818          wrapper = _toArray$9(element || "#smooth-wrapper")[0] || _wrap(content);
23819          wrapperCSS = wrapper.getAttribute("style") || "";
23820          refreshHeight();
23821          gsap$p.set(wrapper, smoothDuration ? {
23822            overflow: "hidden",
23823            position: "fixed",
23824            height: "100%",
23825            width: "100%",
23826            top: 0,
23827            left: 0,
23828            right: 0,
23829            bottom: 0
23830          } : {
23831            overflow: "visible",
23832            position: "relative",
23833            width: "100%",
23834            height: "auto",
23835            top: "auto",
23836            bottom: "auto",
23837            left: "auto",
23838            right: "auto"
23839          });
23840          return this;
23841        }
23842
23843        return wrapper;
23844      };
23845
23846      this.effects = function (targets, config) {
23847        var _effects;
23848
23849        effects || (effects = []);
23850
23851        if (!targets) {
23852          return effects.slice(0);
23853        }
23854
23855        targets = _toArray$9(targets);
23856        targets.forEach(function (target) {
23857          var i = effects.length;
23858
23859          while (i--) {
23860            effects[i].trigger === target && effects[i].kill();
23861          }
23862        });
23863        config = config || {};
23864        var _config = config,
23865            speed = _config.speed,
23866            lag = _config.lag,
23867            effectsPadding = _config.effectsPadding,
23868            effectsToAdd = [],
23869            i,
23870            st;
23871
23872        for (i = 0; i < targets.length; i++) {
23873          st = createEffect(targets[i], speed, lag, i, effectsPadding);
23874          st && effectsToAdd.push(st);
23875        }
23876
23877        (_effects = effects).push.apply(_effects, effectsToAdd);
23878
23879        config.refresh !== false && ScrollTrigger$3.refresh();
23880        return effectsToAdd;
23881      };
23882
23883      this.sections = function (targets, config) {
23884        var _sections;
23885
23886        sections || (sections = []);
23887
23888        if (!targets) {
23889          return sections.slice(0);
23890        }
23891
23892        var newSections = _toArray$9(targets).map(function (el) {
23893          return ScrollTrigger$3.create({
23894            trigger: el,
23895            start: "top 120%",
23896            end: "bottom -20%",
23897            onToggle: function onToggle(self) {
23898              el.style.opacity = self.isActive ? "1" : "0";
23899              el.style.pointerEvents = self.isActive ? "all" : "none";
23900            }
23901          });
23902        });
23903
23904        config && config.add ? (_sections = sections).push.apply(_sections, newSections) : sections = newSections.slice(0);
23905        return newSections;
23906      };
23907
23908      this.content(vars.content);
23909      this.wrapper(vars.wrapper);
23910
23911      this.render = function (y) {
23912        return render(y || y === 0 ? y : currentY);
23913      };
23914
23915      this.getVelocity = function () {
23916        return tracker.getVelocity(-currentY);
23917      };
23918
23919      ScrollTrigger$3.scrollerProxy(wrapper, {
23920        scrollTop: scrollTop,
23921        scrollHeight: function scrollHeight() {
23922          return refreshHeight() && _body$8.scrollHeight;
23923        },
23924        fixedMarkers: vars.fixedMarkers !== false && !!smoothDuration,
23925        content: content,
23926        getBoundingClientRect: function getBoundingClientRect() {
23927          return {
23928            top: 0,
23929            left: 0,
23930            width: _win$b.innerWidth,
23931            height: _win$b.innerHeight
23932          };
23933        }
23934      });
23935      ScrollTrigger$3.defaults({
23936        scroller: wrapper
23937      });
23938      var existingScrollTriggers = ScrollTrigger$3.getAll().filter(function (st) {
23939        return st.scroller === _win$b || st.scroller === wrapper;
23940      });
23941      existingScrollTriggers.forEach(function (st) {
23942        return st.revert(true, true);
23943      });
23944      mainST = ScrollTrigger$3.create({
23945        animation: gsap$p.fromTo(scroll, {
23946          y: function y() {
23947            allowUpdates = 0;
23948            return 0;
23949          }
23950        }, {
23951          y: function y() {
23952            allowUpdates = 1;
23953            return -refreshHeight();
23954          },
23955          immediateRender: false,
23956          ease: "none",
23957          data: "ScrollSmoother",
23958          duration: 100,
23959          onUpdate: function onUpdate() {
23960            if (allowUpdates) {
23961              var force = isProxyScrolling;
23962
23963              if (force) {
23964                killScrub(mainST);
23965                scroll.y = currentY;
23966              }
23967
23968              render(scroll.y, force);
23969              updateVelocity();
23970              _onUpdate && !paused && _onUpdate(self);
23971            }
23972          }
23973        }),
23974        onRefreshInit: function onRefreshInit(self) {
23975          if (ScrollSmoother.isRefreshing) {
23976            return;
23977          }
23978
23979          ScrollSmoother.isRefreshing = true;
23980
23981          if (effects) {
23982            var _pins = ScrollTrigger$3.getAll().filter(function (st) {
23983              return !!st.pin;
23984            });
23985
23986            effects.forEach(function (st) {
23987              if (!st.vars.pinnedContainer) {
23988                _pins.forEach(function (pinST) {
23989                  if (pinST.pin.contains(st.trigger)) {
23990                    var v = st.vars;
23991                    v.pinnedContainer = pinST.pin;
23992                    st.vars = null;
23993                    st.init(v, st.animation);
23994                  }
23995                });
23996              }
23997            });
23998          }
23999
24000          var scrub = self.getTween();
24001          recordedRefreshScrub = scrub && scrub._end > scrub._dp._time;
24002          recordedRefreshScroll = currentY;
24003          scroll.y = 0;
24004
24005          if (smoothDuration) {
24006            ScrollTrigger$3.isTouch === 1 && (wrapper.style.position = "absolute");
24007            wrapper.scrollTop = 0;
24008            ScrollTrigger$3.isTouch === 1 && (wrapper.style.position = "fixed");
24009          }
24010        },
24011        onRefresh: function onRefresh(self) {
24012          self.animation.invalidate();
24013          s
vendor: 5,964 bytes, lines 24013-24185
24013elf.setPositions(self.start, refreshHeight() / speed);
24014          recordedRefreshScrub || killScrub(self);
24015          scroll.y = -scrollFunc() * speed;
24016          render(scroll.y);
24017
24018          if (!startupPhase) {
24019            recordedRefreshScrub && (isProxyScrolling = false);
24020            self.animation.progress(gsap$p.utils.clamp(0, 1, recordedRefreshScroll / speed / -self.end));
24021          }
24022
24023          if (recordedRefreshScrub) {
24024            self.progress -= 0.001;
24025            self.update();
24026          }
24027
24028          ScrollSmoother.isRefreshing = false;
24029        },
24030        id: "ScrollSmoother",
24031        scroller: _win$b,
24032        invalidateOnRefresh: true,
24033        start: 0,
24034        refreshPriority: -9999,
24035        end: function end() {
24036          return refreshHeight() / speed;
24037        },
24038        onScrubComplete: function onScrubComplete() {
24039          tracker.reset();
24040          onStop && onStop(_this);
24041        },
24042        scrub: smoothDuration || true
24043      });
24044
24045      this.smooth = function (value) {
24046        if (arguments.length) {
24047          smoothDuration = value || 0;
24048          speed = smoothDuration && +vars.speed || 1;
24049          mainST.scrubDuration(value);
24050        }
24051
24052        return mainST.getTween() ? mainST.getTween().duration() : 0;
24053      };
24054
24055      mainST.getTween() && (mainST.getTween().vars.ease = vars.ease || _expo);
24056      this.scrollTrigger = mainST;
24057      vars.effects && this.effects(vars.effects === true ? "[data-" + effectsPrefix + "speed], [data-" + effectsPrefix + "lag]" : vars.effects, {
24058        effectsPadding: vars.effectsPadding,
24059        refresh: false
24060      });
24061      vars.sections && this.sections(vars.sections === true ? "[data-section]" : vars.sections);
24062      existingScrollTriggers.forEach(function (st) {
24063        st.vars.scroller = wrapper;
24064        st.revert(false, true);
24065        st.init(st.vars, st.animation);
24066      });
24067
24068      this.paused = function (value, allowNestedScroll) {
24069        if (arguments.length) {
24070          if (!!paused !== value) {
24071            if (value) {
24072              mainST.getTween() && mainST.getTween().pause();
24073              scrollFunc(-currentY / speed);
24074              tracker.reset();
24075              pausedNormalizer = ScrollTrigger$3.normalizeScroll();
24076              pausedNormalizer && pausedNormalizer.disable();
24077              paused = ScrollTrigger$3.observe({
24078                preventDefault: true,
24079                type: "wheel,touch,scroll",
24080                debounce: false,
24081                allowClicks: true,
24082                onChangeY: function onChangeY() {
24083                  return scrollTop(-currentY);
24084                }
24085              });
24086              paused.nested = _inputObserver$1(_docEl$5, "wheel,touch,scroll", true, allowNestedScroll !== false);
24087            } else {
24088              paused.nested.kill();
24089              paused.kill();
24090              paused = 0;
24091              pausedNormalizer && pausedNormalizer.enable();
24092              mainST.progress = (-currentY / speed - mainST.start) / (mainST.end - mainST.start);
24093              killScrub(mainST);
24094            }
24095          }
24096
24097          return this;
24098        }
24099
24100        return !!paused;
24101      };
24102
24103      this.kill = this.revert = function () {
24104        _this.paused(false);
24105
24106        killScrub(mainST);
24107        mainST.kill();
24108        var triggers = (effects || []).concat(sections || []),
24109            i = triggers.length;
24110
24111        while (i--) {
24112          triggers[i].kill();
24113        }
24114
24115        ScrollTrigger$3.scrollerProxy(wrapper);
24116        ScrollTrigger$3.removeEventListener("killAll", addOnRefresh);
24117        ScrollTrigger$3.removeEventListener("refresh", onRefresh);
24118        wrapper.style.cssText = wrapperCSS;
24119        content.style.cssText = contentCSS;
24120        var defaults = ScrollTrigger$3.defaults({});
24121        defaults && defaults.scroller === wrapper && ScrollTrigger$3.defaults({
24122          scroller: _win$b
24123        });
24124        _this.normalizer && ScrollTrigger$3.normalizeScroll(false);
24125        clearInterval(intervalID);
24126        _mainInstance = null;
24127        resizeObserver && resizeObserver.disconnect();
24128
24129        _body$8.style.removeProperty("height");
24130
24131        _win$b.removeEventListener("focusin", _onFocusIn);
24132      };
24133
24134      this.refresh = function (soft, force) {
24135        return mainST.refresh(soft, force);
24136      };
24137
24138      if (normalizeScroll) {
24139        this.normalizer = ScrollTrigger$3.normalizeScroll(normalizeScroll === true ? {
24140          debounce: true,
24141          content: !smoothDuration && content
24142        } : normalizeScroll);
24143      }
24144
24145      ScrollTrigger$3.config(vars);
24146      "overscrollBehavior" in _win$b.getComputedStyle(_body$8) && gsap$p.set([_body$8, _docEl$5], {
24147        overscrollBehavior: "none"
24148      });
24149      "scrollBehavior" in _win$b.getComputedStyle(_body$8) && gsap$p.set([_body$8, _docEl$5], {
24150        scrollBehavior: "auto"
24151      });
24152
24153      _win$b.addEventListener("focusin", _onFocusIn);
24154
24155      intervalID = setInterval(updateVelocity, 250);
24156      _doc$a.readyState === "loading" || requestAnimationFrame(function () {
24157        return ScrollTrigger$3.refresh();
24158      });
24159    }
24160
24161    ScrollSmoother.register = function register(core) {
24162      if (!_coreInitted$k) {
24163        gsap$p = core || _getGSAP$l();
24164
24165        if (_windowExists$a() && window.document) {
24166          _win$b = window;
24167          _doc$a = document;
24168          _docEl$5 = _doc$a.documentElement;
24169          _body$8 = _doc$a.body;
24170        }
24171
24172        if (gsap$p) {
24173          _toArray$9 = gsap$p.utils.toArray;
24174          _clamp$4 = gsap$p.utils.clamp;
24175          _expo = gsap$p.parseEase("expo");
24176
24177          _context$7 = gsap$p.core.context || function () {};
24178
24179          ScrollTrigger$3 = gsap$p.core.globals().ScrollTrigger;
24180          gsap$p.core.globals("ScrollSmoother", ScrollSmoother);
24181
24182          if (_body$8 && ScrollTrigger$3) {
24183            _onResizeDelayedCall = gsap$p.delayedCall(0.2, function () {
24184              return ScrollTrigger$3.isRefreshing || _mainInstance && _mainInstance.refresh();
24185            }).pause();
24186            _getVelocityProp$1 = ScrollTrigger$3.core._getVelocityProp;
24187            _inputObserver$1 = ScrollTrigger$3.core._inputObserver;
24188            ScrollSmoother.refresh = ScrollTrigger$3.refresh;
24189            _coreInitted$k = 1;
24190          }
24191        }
24192      }
24193
24194      return _coreInitted$k;
24195    };
24196
24197    _createClass(ScrollSmoother, [{
24198      key: "progress",
24199      get: function get() {
24200        return this.scrollTrigger ? this.scrollTrigger.animation._time / 100 : 0;
24201      }
24202    }]);
24203
24204    return ScrollSmoother;
24205  }();
24206  ScrollSmoother.version = "3.12.5";
24207
24208  ScrollSmoother.create = function (vars) {
24209    return _mainInstance && vars && _mainInstance.content() === _toArray$9(vars.content)[0] ? _mainInstance : new ScrollSmoother(vars);
24210  };
24211
24212  ScrollSmoother.get = function () {
24213    return _mainInstance;
24214  };
24215
24216  _getGSAP$l() && gsap$p.registerPlugin(ScrollSmoother);
24217
24218  /*!
24219   * SplitText: 3.12.5
24220   * https://gsap.com
24221   *
24222   * @license Copyright 2008-2024, GreenSock. All rights reserved.
24223   * Subject to the terms at https://gsap.com/standard-license or for
24224   * Club GSAP members, the agreement issued with that membership.
24225   * @author: Jack Doyle, [email protected]
24226  */
24227
24228  var _doc$b,
24229      _win$c,
24230      _coreInitted$l,
24231      gsap$q,
24232      _context$8,
24233      _toArray$a,
24234      _stripExp = /(?:\r|\n|\t\t)/g,
24235      _multipleSpacesExp = /(?:\s\s+)/g,
24236      _nonBreakingSpace = String.fromCharCode(160),
24237      _initCore$l = function _initCore(core) {
24238    _doc$b = document;
24239    _win$c = window;
24240    gsap$q = gsap$q || core || _win$c.gsap || console.warn("Please gsap.registerPlugin(SplitText)");
24241
24242    if (gsap$q) {
24243      _toArray$a = gsap$q.utils.toArray;
24244
24245      _context$8 = gsap$q.core.context || function () {};
24246
24247      _coreInitted$l = 1;
24248    }
24249  },
24250      _getComputedStyle$2 = function _getComputedStyle(element) {
24251    return _win$c.getComputedStyle(element);
24252  },
24253      _isAbsolute = function _isAbsolute(vars) {
24254    return vars.position === "absolute" || vars.absolute === true;
24255  },
24256      _findSpecialChars = function _findSpecialChars(text, chars) {
24257    var i = chars.length,
24258        s;
24259
24260    while (--i > -1) {
24261      s = chars[i];
24262
24263      if (text.substr(0, s.length) === s) {
24264        return s.length;
24265      }
24266    }
24267  },
24268      _divStart = " style='position:relative;display:inline-block;'",
24269      _cssClassFunc = function _cssClassFunc(cssClass, tag) {
24270    if (cssClass === void 0) {
24271      cssClass = "";
24272    }
24273
24274    var iterate = ~cssClass.indexOf("++"),
24275        num = 1;
24276
24277    if (iterate) {
24278      cssClass = cssClass.split("++").join("");
24279    }
24280
24281    return function () {
24282      return "<" + tag + _divStart + (cssClass ? " class='" + cssClass + (iterate ? num++ : "") + "'>" : ">");
24283    };
24284  },
24285      _swapText = function _swapText(element, oldText, newText) {
24286    var type = element.nodeType;
24287
24288    if (type === 1 || type === 9 || type === 11) {
24289      for (element = element.firstChild; element; element = element.nextSibling) {
24290        _swapText(element, oldText, newText);
24291      }
24292    } else if (type === 3 || type === 4) {
24293      element.nodeValue = element.nodeValue.split(oldText).join(newText);
24294    }
24295  },
24296      _pushReversed = function _pushReversed(a, merge) {
24297    var i = merge.length;
24298
24299    while (--i > -1) {
24300      a.push(merge[i]);
24301    }
24302  },
24303      _isBeforeWordDelimiter = function _isBeforeWordDelimiter(e, root, wordDelimiter) {
24304    var next;
24305
24306    while (e && e !== root) {
24307      next = e._next || e.nextSibling;
24308
24309      if (next) {
24310        return next.textContent.charAt(0) === wordDelimiter;
24311      }
24312
24313      e = e.parentNode || e._parent;
24314    }
24315  },
24316      _deWordify = function _deWordify(e) {
24317    var children = _toArray$a(e.childNodes),
24318        l = children.length,
24319        i,
24320        child;
24321
24322    for (i = 0; i < l; i++) {
24323      child = children[i];
24324
24325      if (child._isSplit) {
24326        _deWordify(child);
24327      } else {
24328        if (i && child.previousSibling && child.previousSibling.nodeType === 3) {
24329          child.previousSibling.nodeValue += child.nodeType === 3 ? child.nodeValue : child.firstChild.nodeValue;
24330          e.removeChild(child);
24331        } else if (child.nodeType !== 3) {
24332          e.insertBefore(child.firstChild, child);
24333          e.removeChild(child);
24334        }
24335      }
24336    }
24337  },
24338      _getStyleAsNumber = function _getStyleAsNumber(name, computedStyle) {
24339    return parseFloat(computedStyle[name]) || 0;
24340  },
24341      _setPositionsAfterSplit = function _setPositionsAfterSplit(element, vars, allChars, allWords, allLines, origWidth, origHeight) {
24342    var cs = _getComputedStyle$2(element),
24343        paddingLeft = _getStyleAsNumber("paddingLeft", cs),
24344        lineOffsetY = -999,
24345        borderTopAndBottom = _getStyleAsNumber("borderBottomWidth", cs) + _get
24345StyleAsNumber("borderTopWidth", cs),
24346        borderLeftAndRight = _getStyleAsNumber("borderLeftWidth", cs) + _getStyleAsNumber("borderRightWidth", cs),
24347        padTopAndBottom = _getStyleAsNumber("paddingTop", cs) + _getStyleAsNumber("paddingBottom", cs),
24348        padLeftAndRight = _getStyleAsNumber("paddingLeft", cs) + _getStyleAsNumber("paddingRight", cs),
24349        lineThreshold = _getStyleAsNumber("fontSize", cs) * (vars.lineThreshold || 0.2),
24350        textAlign = cs.textAlign,
24351        charArray = [],
24352        wordArray = [],
24353        lineArray = [],
24354        wordDelimiter = vars.wordDelimiter || " ",
24355        tag = vars.tag ? vars.tag : vars.span ? "span" : "div",
24356        types = vars.type || vars.split || "chars,words,lines",
24357        lines = allLines && ~types.indexOf("lines") ? [] : null,
24358        words = ~types.indexOf("words"),
24359        chars = ~types.indexOf("chars"),
24360        absolute = _isAbsolute(vars),
24361        linesClass = vars.linesClass,
24362        iterateLine = ~(linesClass || "").indexOf("++"),
24363        spaceNodesToRemove = [],
24364        isFlex = cs.display === "flex",
24365        prevInlineDisplay = element.style.display,
24366        i,
24367        j,
24368        l,
24369        node,
24370        nodes,
24371        isChild,
24372        curLine,
24373        addWordSpaces,
24374        style,
24375        lineNode,
24376        lineWidth,
24377        offset;
24378
24379    iterateLine && (linesClass = linesClass.split("++").join(""));
24380    isFlex && (element.style.display = "block");
24381    j = element.getElementsByTagName("*");
24382    l = j.length;
24383    nodes = [];
24384
24385    for (i = 0; i < l; i++) {
24386      nodes[i] = j[i];
24387    }
24388
24389    if (lines || absolute) {
24390      for (i = 0; i < l; i++) {
24391        node = nodes[i];
24392        isChild = node.parentNode === element;
24393
24394        if (isChild || absolute || chars && !words) {
24395          offset = node.offsetTop;
24396
24397          if (lines && isChild && Math.abs(offset - lineOffsetY) > lineThreshold && (node.nodeName !== "BR" || i === 0)) {
24398            curLine = [];
24399            lines.push(curLine);
24400            lineOffsetY = offset;
24401          }
24402
24403          if (absolute) {
24404            node._x = node.offsetLeft;
24405            node._y = offset;
24406            node._w = node.offsetWidth;
24407            node._h = node.offsetHeight;
24408          }
24409
24410          if (lines) {
24411            if (node._isSplit && isChild || !chars && isChild || words && isChild || !words && node.parentNode.parentNode === element && !node.parentNode._isSplit) {
24412              curLine.push(node);
24413              node._x -= paddingLeft;
24414
24415              if (_isBeforeWordDelimiter(node, element, wordDelimiter)) {
24416                node._wordEnd = true;
24417              }
24418            }
24419
24420            if (node.nodeName === "BR" && (node.nextSibling && node.nextSibling.nodeName === "BR" || i === 0)) {
24421              lines.push([]);
24422            }
24423          }
24424        }
24425      }
24426    }
24427
24428    for (i = 0; i < l; i++) {
24429      node = nodes[i];
24430      isChild = node.parentNode === element;
24431
24432      if (node.nodeName === "BR") {
24433        if (lines || absolute) {
24434          node.parentNode && node.parentNode.removeChild(node);
24435          nodes.splice(i--, 1);
24436          l--;
24437        } else if (!words) {
24438          element.appendChild(node);
24439        }
24440
24441        continue;
24442      }
24443
24444      if (absolute) {
24445        style = node.style;
24446
24447        if (!words && !isChild) {
24448          node._x += node.parentNode._x;
24449          node._y += node.parentNode._y;
24450        }
24451
24452        style.left = node._x + "px";
24453        style.top = node._y + "px";
24454        style.position = "absolute";
24455        style.display = "block";
24456        style.width = node._w + 1 + "px";
24457        style.height = node._h + "px";
24458      }
24459
24460      if (!words && chars) {
24461        if (node._isSplit) {
24462          node._next = j = node.nextSibling;
24463          node.parentNode.appendChild(node);
24464
24465          while (j && j.nodeType === 3 && j.textContent === " ") {
24466            node._next = j.nextSibling;
24467            node.parentNode.appendChild(j);
24468            j = j.nextSibling;
24469          }
24470        } else if (node.parentNode._isSplit) {
24471          node._parent = node.parentNode;
24472
24473          if (!node.previousSibling && node.firstChild) {
24474            node.firstChild._isFirst = true;
24475          }
24476
24477          if (node.nextSibling && node.nextSibling.textContent === " " && !node.nextSibling.nextSibling) {
24478            spaceNodesToRemove.push(node.nextSibling);
24479          }
24480
24481          node._next = node.nextSibling && node.nextSibling._isFirst ? null : node.nextSibling;
24482          node.parentNode.removeChild(node);
24483          nodes.splice(i--, 1);
24484          l--;
24485        } else if (!isChild) {
24486          offset = !node.nextSibling && _isBeforeWordDelimiter(node.parentNode, element, wordDelimiter);
24487          node.parentNode._parent && node.parentNode._parent.appendChild(node);
24488          offset && node.parentNode.appendChild(_doc$b.createTextNode(" "));
24489
24490          if (tag === "span") {
24491            node.style.display = "inline";
24492          }
24493
24494          charArray.push(node);
24495        }
24496      } else if (node.parentNode._isSplit && !node._isSplit && node.innerHTML !== "") {
24497        wordArray.push(node);
24498      } else if (chars && !node._isSplit) {
24499        if (tag === "span") {
24500          node.style.display = "inline";
24501        }
24502
24503        charArray.push(node);
24504      }
24505    }
24506
24507    i = spaceNodesToRemove.length;
24508
24509    while (--i > -1) {
24510      spaceNodesToRemove[i].parentNode.removeChild(spaceNodesToRemove[i]);
24511    }
24512
24513    if (lines) {
24514      if (absolute) {
24515        lineNode = _doc$b.createElement(tag);
24516        element.appendChild(lineNode);
24517        lineWidth = lineNode.offsetWidth + "px";
24518        offset = lineNode.offsetParent === element ? 0 : element.offsetLeft;
24519        element.removeChild(lineNode);
24520      }
24521
24522      style = element.style.cssText;
24523      element.style.cssText = "display:none;";
24524
24525      while (element.firstChild) {
24526        element.removeChild(element.firstChild);
24527      }
24528
24529      addWordSpaces = wordDelimiter === " " && (!absolute || !words && !c
24529hars);
24530
24531      for (i = 0; i < lines.length; i++) {
24532        curLine = lines[i];
24533        lineNode = _doc$b.createElement(tag);
24534        lineNode.style.cssText = "display:block;text-align:" + textAlign + ";position:" + (absolute ? "absolute;" : "relative;");
24535
24536        if (linesClass) {
24537          lineNode.className = linesClass + (iterateLine ? i + 1 : "");
24538        }
24539
24540        lineArray.push(lineNode);
24541        l = curLine.length;
24542
24543        for (j = 0; j < l; j++) {
24544          if (curLine[j].nodeName !== "BR") {
24545            node = curLine[j];
24546            lineNode.appendChild(node);
24547            addWordSpaces && node._wordEnd && lineNode.appendChild(_doc$b.createTextNode(" "));
24548
24549            if (absolute) {
24550              if (j === 0) {
24551                lineNode.style.top = node._y + "px";
24552                lineNode.style.left = paddingLeft + offset + "px";
24553              }
24554
24555              node.style.top = "0px";
24556
24557              if (offset) {
24558                node.style.left = node._x - offset + "px";
24559              }
24560            }
24561          }
24562        }
24563
24564        if (l === 0) {
24565          lineNode.innerHTML = "&nbsp;";
24566        } else if (!words && !chars) {
24567          _deWordify(lineNode);
24568
24569          _swapText(lineNode, String.fromCharCode(160), " ");
24570        }
24571
24572        if (absolute) {
24573          lineNode.style.width = lineWidth;
24574          lineNode.style.height = node._h + "px";
24575        }
24576
24577        element.appendChild(lineNode);
24578      }
24579
24580      element.style.cssText = style;
24581    }
24582
24583    if (absolute) {
24584      if (origHeight > element.clientHeight) {
24585        element.style.height = origHeight - padTopAndBottom + "px";
24586
24587        if (element.clientHeight < origHeight) {
24588          element.style.height = origHeight + borderTopAndBottom + "px";
24589        }
24590      }
24591
24592      if (origWidth > element.clientWidth) {
24593        element.style.width = origWidth - padLeftAndRight + "px";
24594
24595        if (element.clientWidth < origWidth) {
24596          element.style.width = origWidth + borderLeftAndRight + "px";
24597        }
24598      }
24599    }
24600
24601    isFlex && (prevInlineDisplay ? element.style.display = prevInlineDisplay : element.style.removeProperty("display"));
24602
24603    _pushReversed(allChars, charArray);
24604
24605    words && _pushReversed(allWords, wordArray);
24606
24607    _pushReversed(allLines, lineArray);
24608  },
24609      _splitRawText = function _splitRawText(element, vars, wordStart, charStart) {
24610    var tag = vars.tag ? vars.tag : vars.span ? "span" : "div",
24611        types = vars.type || vars.split || "chars,words,lines",
24612        chars = ~types.indexOf("chars"),
24613        absolute = _isAbsolute(vars),
24614        wordDelimiter = vars.wordDelimiter || " ",
24615        isWordDelimiter = function isWordDelimiter(_char) {
24616      return _char === wordDelimiter || _char === _nonBreakingSpace && wordDelimiter === " ";
24617    },
24618        space = wordDelimiter !== " " ? "" : absolute ? "&#173; " : " ",
24619        wordEnd = "</" + tag + ">",
24620        wordIsOpen = 1,
24621        specialChars = vars.specialChars ? typeof vars.specialChars === "function" ? vars.specialChars : _findSpecialChars : null,
24622        text,
24623        splitText,
24624        i,
24625        j,
24626        l,
24627        character,
24628        hasTagStart,
24629        testResult,
24630        container = _doc$b.createElement("div"),
24631        parent = element.parentNode;
24632
24633    parent.insertBefore(container, element);
24634    container.textContent = element.nodeValue;
24635    parent.removeChild(element);
24636    element = container;
24637    text = getText(element);
24638    hasTagStart = text.indexOf("<") !== -1;
24639
24640    if (vars.reduceWhiteSpace !== false) {
24641      text = text.replace(_multipleSpacesExp, " ").replace(_stripExp, "");
24642    }
24643
24644    if (hasTagStart) {
24645      text = text.split("<").join("{{LT}}");
24646    }
24647
24648    l = text.length;
24649    splitText = (text.charAt(0) === " " ? space : "") + wordStart();
24650
24651    for (i = 0; i < l; i++) {
24652      character = text.charAt(i);
24653
24654      if (specialChars && (testResult = specialChars(text.substr(i), vars.specialChars))) {
24655        character = text.substr(i, testResult || 1);
24656        splitText += chars && character !== " " ? charStart() + character + "</" + tag + ">" : character;
24657        i += testResult - 1;
24658      } else if (isWordDelimiter(character) && !isWordDelimiter(text.charAt(i - 1)) && i) {
24659        splitText += wordIsOpen ? wordEnd : "";
24660        wordIsOpen = 0;
24661
24662        while (isWordDelimiter(text.charAt(i + 1))) {
24663          splitText += space;
24664          i++;
24665        }
24666
24667        if (i === l - 1) {
24668          splitText += space;
24669        } else if (text.charAt(i + 1) !== ")") {
24670          splitText += space + wordStart();
24671          wordIsOpen = 1;
24672        }
24673      } else if (character === "{" && text.substr(i, 6) === "{{LT}}") {
24674        splitText += chars ? charStart() + "{{LT}}" + "</" + tag + ">" : "{{LT}}";
24675        i += 5;
24676      } else if (character.charCodeAt(0) >= 0xD800 && character.charCodeAt(0) <= 0xDBFF || text.charCodeAt(i + 1) >= 0xFE00 && text.charCodeAt(i + 1) <= 0xFE0F) {
24677        j = ((text.substr(i, 12).split(emojiExp) || [])[1] || "").length || 2;
24678        splitText += chars && character !== " " ? charStart() + text.substr(i, j) + "</" + tag + ">" : text.substr(i, j);
24679        i += j - 1;
24680      } else {
24681        splitText += chars && character !== " " ? charStart() + character + "</" + tag + ">" : character;
24682      }
24683    }
24684
24685    element.outerHTML = splitText + (wordIsOpen ? wordEnd : "");
24686    hasTagStart && _swapText(parent, "{{LT}}", "<");
24687  },
24688      _split = function _split(element, vars, wordStart, charStart) {
24689    var children = _toArray$a(element.childNodes),
24690        l = children.length,
24691        absolute = _isAbsolute(vars),
24692        i,
24693        child;
24694
24695    if (element.nodeType !== 3 || l > 1) {
24696      vars.absolute = false;
24697
24698      for (i = 0; i < l; i++) {
24699        child = children[i];
24700        child._next = child._isFirst = child._parent = child._wordEnd = null;
24701
24702        if (child.nodeType !== 3 || /\S+/.test(child.nodeValue)) {
24703          if (absolute && child.nodeType !== 3 && _getComputedStyle$2(child).display === "inline") {
24704            child.style.display = "inline-block";
24705            child.style.position = "relative";
24706          }
24707
24708          child._isSplit = true;
24709
24710          _split(child, vars, wordStart, charStart);
24711        }
24712      }
24713
24714      vars.absolute = absolute;
24715      element._isSplit = true;
24716      return;
24717    }
24718
24719    _splitRawText(element, vars, wordStart, charStart);
24720  };
24721
24722  var SplitText = function () {
24723    function SplitText(element, vars) {
24724      _coreInitted$l || _initCore$l();
24725      this.elements = _toArray$a(element);
24726      this.chars = [];
24727      this.words = [];
24728      this.lines = [];
24729      this._originals = [];
24730      this.vars = vars || {};
24731
24732      _context$8(this);
24733
24734       this.split(vars);
24735    }
24736
24737    var _proto = SplitText.prototype;
24738
24739    _proto.split = function split(vars) {
24740      this.isSplit && this.revert();
24741      this.vars = vars = vars || this.vars;
24742      this._originals.length = this.chars.length = this.words.length = this.lines.length = 0;
24743
24744      var i = this.elements.length,
24745          tag = vars.tag ? vars.tag : vars.span ? "span" : "div",
24746          wordStart = _cssClassFunc(vars.wordsClass, tag),
24747          charStart = _cssClassFunc(vars.charsClass, tag),
24748          origHeight,
24749          origWidth,
24750          e;
24751
24752      while (--i > -1) {
24753        e = this.elements[i];
24754        this._originals[i] = {
24755          html: e.innerHTML,
24756          style: e.getAttribute("style")
24757        };
24758        origHeight = e.clientHeight;
24759        origWidth = e.clientWidth;
24760
24761        _split(e, vars, wordStart, charStart);
24762
24763        _setPositionsAfterSplit(e, vars, this.chars, this.words, this.lines, origWidth, origHeight);
24764      }
24765
24766      this.chars.reverse();
24767      this.words.reverse();
24768      this.lines.reverse();
24769      this.isSplit = true;
24770      return this;
24771    };
24772
24773    _proto.revert = function revert() {
24774      var originals = this._originals;
24775
24776      if (!originals) {
24777        throw "revert() call wasn't scoped properly.";
24778      }
24779
24780      this.elements.forEach(function (e, i) {
24781        e.innerHTML = originals[i].html;
24782        e.setAttribute("style", originals[i].style);
24783      });
24784      this.chars = [];
24785      this.words = [];
24786      this.lines = [];
24787      this.isSplit = false;
24788      return this;
24789    };
24790
24791    SplitText.create = function create(element, vars) {
24792      return new SplitText(element, vars);
24793    };
24794
24795    return SplitText;
24796  }();
24797  SplitText.version = "3.12.5";
24798  SplitText.register = _initCore$l;
24799
24800  var gsapWithCSS = gsap.registerPlugin(CSSPlugin) || gsap,
24801      TweenMaxWithCSS = gsapWithCSS.core.Tween;
24802
24803  exports.Back = Back;
24804  exports.Bounce = Bounce;
24805  exports.CSSPlugin = CSSPlugin;
24806  exports.CSSRulePlugin = CSSRulePlugin;
24807  exports.Circ = Circ;
24808  exports.Cubic = Cubic;
24809  exports.CustomBounce = CustomBounce;
24810  exports.CustomEase = CustomEase;
24811  exports.CustomWiggle = CustomWiggle;
24812  exports.Draggable = Draggable;
24813  exports.DrawSVGPlugin = DrawSVGPlugin;
24814  exports.EasePack = EasePack;
24815  exports.EaselPlugin = EaselPlugin;
24816  exports.Elastic = Elastic;
24817  exports.Expo = Expo;
24818  exports.ExpoScaleEase = ExpoScaleEase;
24819  exports.Flip = Flip;
24820  exports.GSDevTools = GSDevTools;
24821  exports.InertiaPlugin = InertiaPlugin$1;
24822  exports.Linear = Linear;
24823  exports.MorphSVGPlugin = MorphSVGPlugin;
24824  exports.MotionPathHelper = MotionPathHelper;
24825  exports.MotionPathPlugin = MotionPathPlugin;
24826  exports.Observer = Observer;
24827  exports.Physics2DPlugin = Physics2DPlugin;
24828  exports.PhysicsPropsPlugin = PhysicsPropsPlugin;
24829  exports.PixiPlugin = PixiPlugin;
24830  exports.Power0 = Power0;
24831  exports.Power1 = Power1;
24832  exports.Power2 = Power2;
24833  exports.Power3 = Power3;
24834  exports.Power4 = Power4;
24835  exports.Quad = Quad;
24836  exports.Quart = Quart;
24837  exports.Quint = Quint;
24838  exports.RoughEase = RoughEase;
24839  exports.ScrambleTextPlugin = ScrambleTextPlugin;
24840  exports.ScrollSmoother = ScrollSmoother;
24841  exports.ScrollToPlugin = ScrollToPlugin;
24842  exports.ScrollTrigger = ScrollTrigger$2;
24843  exports.Sine = Sine;
24844  exports.SlowMo = SlowMo;
24845  exports.SplitText = SplitText;
24846  exports.SteppedEase = SteppedEase;
24847  exports.Strong = Strong;
24848  exports.TextPlugin = TextPlugin;
24849  exports.TimelineLite = Timeline;
24850  exports.TimelineMax = Timeline;
24851  exports.TweenLite = Tween;
24852  exports.TweenMax = TweenMaxWithCSS;
24853  exports.VelocityTracker = VelocityTracker;
24854  exports._getProxyProp = _getProxyProp;
24855  exports._getScrollFunc = _getScrollFunc;
24856  exports._getTarget = _getTarget;
24857  exports._getVelocityProp = _getVelocityProp;
24858  exports._horizontal = _horizontal;
24859  exports._isViewport = _isViewport;
24860  exports._vertical = _vertical;
24861  exports.clamp = clamp;
24862  exports.default = gsapWithCSS;
24863  exports.distribute = distribute;
24864  exports.getUnit = getUnit;
24865  exports.gsap = gsapWithCSS;
24866  exports.interpolate = interpolate;
24867  exports.mapRange = mapRange;
24868  exports.normalize = normalize;
24869  exports.pipe = pipe;
24870  exports.random = random;
24871  exports.selector = selector;
24872  exports.shuffle = shuffle;
24873  exports.snap = snap;
24874  exports.splitColor = splitColor;
24875  exports.toArray = toArray;
24876  exports.unitize = unitize;
24877  exports.wrap = wrap;
24878  exports.wrapYoyo = wrapYoyo;
24879
24880  Object.defineProperty(exports, '__esModule', { value: true });
24881
24882})));

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.