This was almost certainly my fault, but as I look at the implementation of Sets.cartesianProduct, I think its `contains` method made the assumption that `ImmutableSet.asList().indexOf` was O(1), which is no longer the case for Android.  It should probably get a specific `contains` implementation that actually is O(sets), not O(sets*setSize).
protected SortedSet<E> delegate() {
      return unmodifiableDelegate;
    }
    
    @Override
    public boolean removeIf(java.util.function.Predicate<? super E> filter) {
      throw new UnsupportedOperationException();
    }
    @Override
    public Stream<E> stream() {
      return delegate.stream();
    }
    @Override
    public Stream<E> parallelStream() {
      return delegate.parallelStream();
    }
    @Override
    public void forEach(Consumer<? super E> action) {
      delegate.forEach(action);
    }
    @Override
    public E lower(E e) {
      return delegate.lower(e);
    }
    @Override
    public E floor(E e) {
      return delegate.floor(e);
    }
    @Override
    public E ceiling(E e) {