docs: private static boolean nullSafeEquals(Object o1, Object o2) {
          if (o1 == o2) {
              return true;
          }
          if (o1 == null || o2 == null) {
              return false;
          }
          if (o1.equals(o2)) {
              return true;
          }
          if (o1.getClass().isArray() && o2.getClass().isArray()) {
              if (o1 instanceof Object[] && o2 instanceof Object[]) {
                  return Arrays.equals((Object[]) o1, (Object[]) o2);
              }
              if (o1 instanceof boolean[] && o2 instanceof boolean[]) {
                  return Arrays.equals((boolean[]) o1, (boolean[]) o2);
              }
              if (o1 instanceof byte[] && o2 instanceof byte[]) {
                  return Arrays.equals((byte[]) o1, (byte[]) o2);
              }
              if (o1 instanceof char[] && o2 instanceof char[]) {
                  return Arrays.equals((char[]) o1, (char[]) o2);
              }
              if (o1 instanceof double[] && o2 instanceof double[]) {
                  return Arrays.equals((double[]) o1, (double[]) o2);
              }
              if (o1 instanceof float[] && o2 instanceof float[]) {
                  return Arrays.equals((float[]) o1, (float[]) o2);
              }
              if (o1 instanceof int[] && o2 instanceof int[]) {
                  return Arrays.equals((int[]) o1, (int[]) o2);
              }
              if (o1 instanceof long[] && o2 instanceof long[]) {
                  return Arrays.equals((long[]) o1, (long[]) o2);
              }
              if (o1 instanceof short[] && o2 instanceof short[]) {
                  return Arrays.equals((short[]) o1, (short[]) o2);
              }
          }
          return false;
      }
  
  }