docs: public static byte[] decode(byte[] source, int off, int len, int options) throws java.io.IOException {
  
          // Lots of error checking and exception throwing
          if (source == null) {
              throw new NullPointerException("Cannot decode null source array.");
          } // end if
          if (off < 0 || off + len > source.length) {
              throw new IllegalArgumentException(String.format(
                      "Source array with length %d cannot have offset of %d and process %d bytes.", source.length, off, len));
          } // end if
  
          if (len == 0) {
              return new byte[0];
          } else if (len < 4) {
              throw new IllegalArgumentException(
                      "Base64-encoded string must have at least four characters, but length specified was " + len);
          } // end if
  
          byte[] DECODABET = getDecodabet(options);
  
          int len34 = len * 3 / 4; // Estimate on array size
          byte[] outBuff = new byte[len34]; // Upper limit on size of output
          int outBuffPosn = 0; // Keep track of where we're writing
  
          byte[] b4 = new byte[4]; // Four byte buffer from source, eliminating white space
          int b4Posn = 0; // Keep track of four byte input buffer
          int i = 0; // Source array counter
          byte sbiDecode = 0; // Special value from DECODABET
  
          for (i = off; i < off + len; i++) { // Loop through source
  
              sbiDecode = DECODABET[source[i] & 0xFF];
  
              // White space, Equals sign, or legit Base64 character
              // Note the values such as -5 and -9 in the
              // DECODABETs at the top of the file.
              if (sbiDecode >= WHITE_SPACE_ENC) {
                  if (sbiDecode >= EQUALS_SIGN_ENC) {
                      b4[b4Posn++] = source[i]; // Save non-whitespace
                      if (b4Posn > 3) { // Time to decode?
                          outBuffPosn += decode4to3(b4, 0, outBuff, outBuffPosn, options);
                          b4Posn = 0;
  
                          // If that was the equals sign, break out of 'for' loop
                          if (source[i] == EQUALS_SIGN) {
                              break;
                          } // end if: equals sign
                      } // end if: quartet built
                  } // end if: equals sign or better
              } // end if: white space, equals sign or better
              else {
                  // There's a bad input character in the Base64 stream.
                  throw new java.io.IOException(String.format("Bad Base64 input character decimal %d in array position %d",
                          ((int) source[i]) & 0xFF, i));
              } // end else:
          } // each input character
  
          byte[] out = new byte[outBuffPosn];
          System.arraycopy(outBuff, 0, out, 0, outBuffPosn);
          return out;
      }