@Override
  @Internal
  public @NotNull DataExternalizer<Collection<Integer>> createExternalizer() {
    return new DataExternalizer<>() {
      @Override
      public void save(@NotNull DataOutput out, @NotNull Collection<Integer> value) throws IOException {
        final int numberOfValues = value.size();

        int[] buffer = SPARE_BUFFER_LOCAL.getBuffer(numberOfValues);
        int ptr = 0;
        if (value instanceof IntCollection intCollection) {
          buffer = intCollection.toArray(buffer);
        } else {
          for (Integer i : value) {
            buffer[ptr++] = i;
          }
        }
        Arrays.sort(buffer, 0, numberOfValues);

        DataInputOutputUtil.writeINT(out, numberOfValues);
        int prev = 0;
        for (ptr = 0; ptr < numberOfValues; ++ptr) {
          int cur = buffer[ptr];
          DataInputOutputUtil.writeLONG(out, (long)cur - prev);
          prev = cur;
        }
      }

      @Override
      public @NotNull Collection<Integer> read(@NotNull DataInput in) throws IOException {
        int size = DataInputOutputUtil.readINT(in);
        List<Integer> result = new ArrayList<>(size);
        int prev = 0;
        while (size-- > 0) {
          int l = (int)(DataInputOutputUtil.readLONG(in) + prev);
          result.add(l);
          prev = l;
        }
        return result;
      }
    };
  }
@Override
  @Internal
  public @NotNull DataExternalizer<Collection<Integer>> createExternalizer()