@Override
  public @NotNull List<E> subList(int fromIndex, int toIndex) {
    final List<E> subList = super.subList(fromIndex, toIndex);
    return new AbstractList<E>() {
      @Override
      public @NotNull E get(int index) {
        return subList.get(index);
      }

      @Override
      public int size() {
        return subList.size();
      }

      @Override
      public boolean add(@NotNull E e) {
        return subList.add(e);
      }

      @Override
      public E set(int index, @NotNull E element) {
        return subList.set(index, element);
      }

      @Override
      public void add(int index, @NotNull E element) {
        subList.add(index, element);
      }

      @Override
      public boolean addAll(int index, Collection<? extends E> c) {
        checkNotNullCollection(c);
        return subList.addAll(index, c);
      }

      @Override
      public @NotNull List<E> subList(int fromIndex, int toIndex) {
        return subList.subList(fromIndex, toIndex);
      }

      @Override
      public boolean addAll(@NotNull Collection<? extends E> c) {
        checkNotNullCollection(c);
        return subList.addAll(c);
      }
    };
  }
@Override
  public @NotNull List<E> subList(int fromIndex, int toIndex)