final Node<V> advance() {
          Node<V> e;
        if ((e = next) != null) {
          e = e.next;
        }
          for (;;) {
              Node<V>[] t; int i, n;  // must use locals in checks
            if (e != null) {
              return next = e;
            }
            if (baseIndex >= baseLimit || (t = tab) == null ||
                (n = t.length) <= (i = index) || i < 0) {
              return next = null;
            }
              if ((e = tabAt(t, i)) != null && e.hash < 0) {
                  if (e instanceof ForwardingNode) {
                      tab = ((ForwardingNode<V>)e).nextTable;
                      e = null;
                      pushState(t, i, n);
                      continue;
                  }
                  else if (e instanceof TreeBin) {
                    e = ((TreeBin<V>)e).first;
                  }
                  else {
                    e = null;
                  }
              }
            if (stack != null) {
              recoverState(n);
            }
            else if ((index = i + baseSize) >= n) {
              index = ++baseIndex; // visit upper slots if present
            }
          }
      }
final Node<V> advance()