docs: public static byte[] decode(String base64) {
  		int iLen = base64.length();
  		if (iLen % 4 != 0) {
  			throw new IllegalArgumentException("Length of Base64 encoded input string is not a multiple of 4.");
  		}
  		// remove trailing padding
  		while (iLen > 0 && base64.charAt(iLen - 1) == '=') {
  			iLen--;
  		}
  
  		int oLen = (iLen * 3) / 4;
  		byte[] out = new byte[oLen];
  
  		int ip = 0, op = 0;
  		while (ip < iLen) {
  			int i0 = base64.charAt(ip++);
  			int i1 = base64.charAt(ip++);
  			int i2 = ip < iLen ? base64.charAt(ip++) : 'A';
  			int i3 = ip < iLen ? base64.charAt(ip++) : 'A';
  
  			if (i0 > 127 || i1 > 127 || i2 > 127 || i3 > 127) {
  				throw new IllegalArgumentException("Illegal character in Base64 encoded data.");
  			}
  
  			int b0 = CHARS_2_NIBLES[i0];
  			int b1 = CHARS_2_NIBLES[i1];
  			int b2 = CHARS_2_NIBLES[i2];
  			int b3 = CHARS_2_NIBLES[i3];
  			if (b0 < 0 || b1 < 0 || b2 < 0 || b3 < 0) {
  				throw new IllegalArgumentException("Illegal character in Base64 encoded data.");
  			}
  
  			int o0 = (b0 << 2) | (b1 >>> 4);
  			int o1 = ((b1 & 0xf) << 4) | (b2 >>> 2);
  			int o2 = ((b2 & 3) << 6) | b3;
  			out[op++] = (byte) o0;
  			if (op < oLen) {
  				out[op++] = (byte) o1;
  			}
  			if (op < oLen) {
  				out[op++] = (byte) o2;
  			}
  		}
  		return out;
  	}