code: function timeoutHandler (tweenable, timestamp, duration, currentState,
        originalState, targetState, easing, step, schedule) {
        timeoutHandler_endTime = timestamp + duration;
        timeoutHandler_currentTime = Math.min(now(), timeoutHandler_endTime);
        timeoutHandler_isEnded =
          timeoutHandler_currentTime >= timeoutHandler_endTime;
  
        timeoutHandler_offset = duration - (
            timeoutHandler_endTime - timeoutHandler_currentTime);
  
        if (tweenable.isPlaying() && !timeoutHandler_isEnded) {
          tweenable._scheduleId = schedule(tweenable._timeoutHandler, UPDATE_TIME);
  
          applyFilter(tweenable, 'beforeTween');
          tweenProps(timeoutHandler_currentTime, currentState, originalState,
            targetState, duration, timestamp, easing);
          applyFilter(tweenable, 'afterTween');
  
          step(currentState, tweenable._attachment, timeoutHandler_offset);
        } else if (timeoutHandler_isEnded) {
          step(targetState, tweenable._attachment, timeoutHandler_offset);
          tweenable.stop(true);
        }
      }
docs: /*!
  Handles the update logic for one step of a tween.
  @param {Tweenable} tweenable
  @param {number} timestamp
  @param {number} duration
  @param {Object} currentState
  @param {Object} originalState
  @param {Object} targetState
  @param {Object} easing
  @param {Function(Object, *, number)} step
  @param {Function(Function,number)}} schedule