docs: @CanIgnoreReturnValue
    public static long parseUnsignedLong(String string, int radix) {
      checkNotNull(string);
      if (string.length() == 0) {
        throw new NumberFormatException("empty string");
      }
      if (radix < Character.MIN_RADIX || radix > Character.MAX_RADIX) {
        throw new NumberFormatException("illegal radix: " + radix);
      }
  
      int maxSafePos = maxSafeDigits[radix] - 1;
      long value = 0;
      for (int pos = 0; pos < string.length(); pos++) {
        int digit = Character.digit(string.charAt(pos), radix);
        if (digit == -1) {
          throw new NumberFormatException(string);
        }
        if (pos > maxSafePos && overflowInParse(value, digit, radix)) {
          throw new NumberFormatException("Too large for unsigned long: " + string);
        }
        value = (value * radix) + digit;
      }
  
      return value;
    }