private final void addCount(long x, int check) {
    CounterCell[] as; long b, s;
      if ((as = counterCells) != null ||
          !Unsafe.compareAndSwapLong(this, BASECOUNT, b = baseCount, s = b + x)) {
        CounterCell a; long v; int m;
          boolean uncontended = true;
          if (as == null || (m = as.length - 1) < 0 ||
              (a = as[ThreadLocalRandom.getProbe() & m]) == null ||
              !(uncontended =
                  Unsafe.compareAndSwapLong(a, CELLVALUE, v = a.value, v + x))) {
              fullAddCount(x, uncontended);
              return;
          }
        if (check <= 1) {
          return;
        }
          s = sumCount();
      }
      if (check >= 0) {
          Node<V>[] tab, nt; int n, sc;
          while (s >= (long)(sc = sizeCtl) && (tab = table) != null &&
                 (n = tab.length) < MAXIMUM_CAPACITY) {
              int rs = resizeStamp(n) << RESIZE_STAMP_SHIFT;
              if (sc < 0) {
                if (sc == rs + MAX_RESIZERS || sc == rs + 1 ||
                    (nt = nextTable) == null || transferIndex <= 0) {
                  break;
                }
                if (Unsafe.compareAndSwapInt(this, SIZECTL, sc, sc + 1)) {
                  transfer(tab, nt);
                }
              }
              else if (Unsafe.compareAndSwapInt(this, SIZECTL, sc, rs + 2)) {
                transfer(tab, null);
              }
              s = sumCount();
          }
      }
  }
private final void addCount(long x, int check)