QueryLanguageEx
using System.Collections.Generic;
using System.Linq;
using System.Reactive.Concurrency;
using System.Reactive.Disposables;
using System.Reactive.Linq.ObservableImpl;
using System.Reactive.Subjects;
using System.Runtime.CompilerServices;
namespace System.Reactive.Linq
{
    [System.Runtime.CompilerServices.NullableContext(1)]
    [System.Runtime.CompilerServices.Nullable(0)]
    internal class QueryLanguageEx : IQueryLanguageEx
    {
        [System.Runtime.CompilerServices.Nullable(new byte[] {
            0,
            1
        })]
        private sealed class CreateWithEnumerableObservable<[System.Runtime.CompilerServices.Nullable(2)] TResult> : ObservableBase<TResult>
        {
            private readonly Func<IObserver<TResult>, IEnumerable<IObservable<object>>> _iteratorMethod;
            public CreateWithEnumerableObservable(Func<IObserver<TResult>, IEnumerable<IObservable<object>>> iteratorMethod)
            {
                _iteratorMethod = iteratorMethod;
            }
            protected override IDisposable SubscribeCore(IObserver<TResult> observer)
            {
                return Observable.Concat<object>(_iteratorMethod(observer)).Subscribe(new TerminalOnlyObserver<TResult>(observer));
            }
        }
        [System.Runtime.CompilerServices.Nullable(0)]
        private sealed class TerminalOnlyObserver<[System.Runtime.CompilerServices.Nullable(2)] TResult> : IObserver<object>
        {
            private readonly IObserver<TResult> _observer;
            public TerminalOnlyObserver(IObserver<TResult> observer)
            {
                _observer = observer;
            }
            public void OnCompleted()
            {
                _observer.OnCompleted();
            }
            public void OnError(Exception error)
            {
                _observer.OnError(error);
            }
            public void OnNext(object value)
            {
            }
        }
        [System.Runtime.CompilerServices.Nullable(new byte[] {
            0,
            1
        })]
        private sealed class CreateWithOnlyEnumerableObservable<[System.Runtime.CompilerServices.Nullable(2)] TResult> : ObservableBase<TResult>
        {
            private readonly Func<IEnumerable<IObservable<object>>> _iteratorMethod;
            public CreateWithOnlyEnumerableObservable(Func<IEnumerable<IObservable<object>>> iteratorMethod)
            {
                _iteratorMethod = iteratorMethod;
            }
            protected override IDisposable SubscribeCore(IObserver<TResult> observer)
            {
                return Observable.Concat<object>(_iteratorMethod()).Subscribe(new TerminalOnlyObserver<TResult>(observer));
            }
        }
        [System.Runtime.CompilerServices.Nullable(new byte[] {
            0,
            1
        })]
        private sealed class ExpandObservable<[System.Runtime.CompilerServices.Nullable(2)] TSource> : ObservableBase<TSource>
        {
            private readonly IObservable<TSource> _source;
            private readonly Func<TSource, IObservable<TSource>> _selector;
            private readonly IScheduler _scheduler;
            public ExpandObservable(IObservable<TSource> source, Func<TSource, IObservable<TSource>> selector, IScheduler scheduler)
            {
                _source = source;
                _selector = selector;
                _scheduler = scheduler;
            }
            protected override IDisposable SubscribeCore(IObserver<TSource> observer)
            {
                object outGate = new object();
                Queue<IObservable<TSource>> q = new Queue<IObservable<TSource>>();
                SerialDisposable i = new SerialDisposable();
                CompositeDisposable d = new CompositeDisposable {
                    i
                };
                int activeCount = 0;
                bool isAcquired = false;
                lock (q) {
                    q.Enqueue(_source);
                    activeCount++;
                }
                <>c__DisplayClass4_0 <>c__DisplayClass4_;
                <>c__DisplayClass4_.<SubscribeCore>g__ensureActive|0();
                return d;
            }
        }
        [System.Runtime.CompilerServices.Nullable(new byte[] {
            0,
            1,
            1
        })]
        private sealed class ForkJoinObservable<[System.Runtime.CompilerServices.Nullable(2)] TSource> : ObservableBase<TSource[]>
        {
            private readonly IEnumerable<IObservable<TSource>> _sources;
            public ForkJoinObservable(IEnumerable<IObservable<TSource>> sources)
            {
                _sources = sources;
            }
            protected override IDisposable SubscribeCore(IObserver<TSource[]> observer)
            {
                IObservable<TSource>[] array = Enumerable.ToArray<IObservable<TSource>>(_sources);
                int num = array.Length;
                if (num == 0) {
                    observer.OnCompleted();
                    return Disposable.Empty;
                }
                CompositeDisposable group = new CompositeDisposable(array.Length);
                object gate = new object();
                bool finished = false;
                bool[] hasResults = new bool[num];
                bool[] hasCompleted = new bool[num];
                List<TSource> results = new List<TSource>(num);
                lock (gate) {
                    for (int i = 0; i < num; i++) {
                        int currentIndex = i;
                        IObservable<TSource> source = array[i];
                        results.Add(default(TSource));
                        group.Add(ObservableExtensions.Subscribe<TSource>(source, (Action<TSource>)delegate(TSource value) {
                            lock (gate) {
                                if (!finished) {
                                    hasResults[currentIndex] = true;
                                    results[currentIndex] = value;
                                }
                            }
                        }, (Action<Exception>)delegate(Exception error) {
                            lock (gate) {
                                finished = true;
                                observer.OnError(error);
                                group.Dispose();
                            }
                        }, (Action)delegate {
                            lock (gate) {
                                if (!finished) {
                                    if (!hasResults[currentIndex])
                                        observer.OnCompleted();
                                    else {
                                        hasCompleted[currentIndex] = true;
                                        bool[] array2 = hasCompleted;
                                        for (int j = 0; j < array2.Length; j++) {
                                            if (!array2[j])
                                                return;
                                        }
                                        finished = true;
                                        observer.OnNext(results.ToArray());
                                        observer.OnCompleted();
                                    }
                                }
                            }
                        }));
                    }
                }
                return group;
            }
        }
        [System.Runtime.CompilerServices.Nullable(0)]
        private class ChainObservable<[System.Runtime.CompilerServices.Nullable(2)] T> : ISubject<IObservable<T>, T>, IObserver<IObservable<T>>, IObservable<T>
        {
            private readonly T _head;
            private readonly AsyncSubject<IObservable<T>> _tail = new AsyncSubject<IObservable<T>>();
            public ChainObservable(T head)
            {
                _head = head;
            }
            public IDisposable Subscribe(IObserver<T> observer)
            {
                CompositeDisposable compositeDisposable = new CompositeDisposable();
                compositeDisposable.Add(Scheduler.ScheduleAction<(IObserver<T>, CompositeDisposable, ChainObservable<T>)>((IScheduler)CurrentThreadScheduler.Instance, (observer, compositeDisposable, this), (Action<(IObserver<T>, CompositeDisposable, ChainObservable<T>)>)delegate((IObserver<T> observer, CompositeDisposable g, ChainObservable<T> this) state) {
                    state.observer.OnNext(state.this._head);
                    state.g.Add(Observable.Merge<T>((IObservable<IObservable<T>>)state.this._tail).Subscribe(state.observer));
                }));
                return compositeDisposable;
            }
            public void OnCompleted()
            {
                OnNext(Observable.Empty<T>());
            }
            public void OnError(Exception error)
            {
                OnNext(Observable.Throw<T>(error));
            }
            public void OnNext(IObservable<T> value)
            {
                _tail.OnNext(value);
                _tail.OnCompleted();
            }
        }
        [System.Runtime.CompilerServices.Nullable(new byte[] {
            0,
            1
        })]
        private sealed class CombineObservable<[System.Runtime.CompilerServices.Nullable(2)] TLeft, [System.Runtime.CompilerServices.Nullable(2)] TRight, [System.Runtime.CompilerServices.Nullable(2)] TResult> : ObservableBase<TResult>
        {
            private readonly IObservable<TLeft> _leftSource;
            private readonly IObservable<TRight> _rightSource;
            private readonly Func<IObserver<TResult>, IDisposable, IDisposable, IObserver<Either<Notification<TLeft>, Notification<TRight>>>> _combinerSelector;
            public CombineObservable(IObservable<TLeft> leftSource, IObservable<TRight> rightSource, Func<IObserver<TResult>, IDisposable, IDisposable, IObserver<Either<Notification<TLeft>, Notification<TRight>>>> combinerSelector)
            {
                _leftSource = leftSource;
                _rightSource = rightSource;
                _combinerSelector = combinerSelector;
            }
            protected override IDisposable SubscribeCore(IObserver<TResult> observer)
            {
                SingleAssignmentDisposable singleAssignmentDisposable = new SingleAssignmentDisposable();
                SingleAssignmentDisposable singleAssignmentDisposable2 = new SingleAssignmentDisposable();
                IObserver<Either<Notification<TLeft>, Notification<TRight>>> observer2 = _combinerSelector(observer, singleAssignmentDisposable, singleAssignmentDisposable2);
                object gate = new object();
                singleAssignmentDisposable.Disposable = Observable.Synchronize<Either<Notification<TLeft>, Notification<TRight>>>(Observable.Select<Notification<TLeft>, Either<Notification<TLeft>, Notification<TRight>>>(Observable.Materialize<TLeft>(_leftSource), (Func<Notification<TLeft>, Either<Notification<TLeft>, Notification<TRight>>>)((Notification<TLeft> x) => Either<Notification<TLeft>, Notification<TRight>>.CreateLeft(x))), gate).Subscribe(observer2);
                singleAssignmentDisposable2.Disposable = Observable.Synchronize<Either<Notification<TLeft>, Notification<TRight>>>(Observable.Select<Notification<TRight>, Either<Notification<TLeft>, Notification<TRight>>>(Observable.Materialize<TRight>(_rightSource), (Func<Notification<TRight>, Either<Notification<TLeft>, Notification<TRight>>>)((Notification<TRight> x) => Either<Notification<TLeft>, Notification<TRight>>.CreateRight(x))), gate).Subscribe(observer2);
                return StableCompositeDisposable.Create(singleAssignmentDisposable, singleAssignmentDisposable2);
            }
        }
        [return: System.Runtime.CompilerServices.Nullable(new byte[] {
            1,
            0,
            1,
            1
        })]
        public virtual IObservable<(TSource1, TSource2)> CombineLatest<[System.Runtime.CompilerServices.Nullable(2)] TSource1, [System.Runtime.CompilerServices.Nullable(2)] TSource2>(IObservable<TSource1> source1, IObservable<TSource2> source2)
        {
            return new CombineLatest<TSource1, TSource2, (TSource1, TSource2)>(source1, source2, (Func<TSource1, TSource2, (TSource1, TSource2)>)((TSource1 t1, TSource2 t2) => (t1, t2)));
        }
        [return: System.Runtime.CompilerServices.Nullable(new byte[] {
            1,
            0,
            1,
            1,
            1
        })]
        public virtual IObservable<(TSource1, TSource2, TSource3)> CombineLatest<[System.Runtime.CompilerServices.Nullable(2)] TSource1, [System.Runtime.CompilerServices.Nullable(2)] TSource2, [System.Runtime.CompilerServices.Nullable(2)] TSource3>(IObservable<TSource1> source1, IObservable<TSource2> source2, IObservable<TSource3> source3)
        {
            return new CombineLatest<TSource1, TSource2, TSource3, (TSource1, TSource2, TSource3)>(source1, source2, source3, (Func<TSource1, TSource2, TSource3, (TSource1, TSource2, TSource3)>)((TSource1 t1, TSource2 t2, TSource3 t3) => (t1, t2, t3)));
        }
        [return: System.Runtime.CompilerServices.Nullable(new byte[] {
            1,
            0,
            1,
            1,
            1,
            1
        })]
        public virtual IObservable<(TSource1, TSource2, TSource3, TSource4)> CombineLatest<[System.Runtime.CompilerServices.Nullable(2)] TSource1, [System.Runtime.CompilerServices.Nullable(2)] TSource2, [System.Runtime.CompilerServices.Nullable(2)] TSource3, [System.Runtime.CompilerServices.Nullable(2)] TSource4>(IObservable<TSource1> source1, IObservable<TSource2> source2, IObservable<TSource3> source3, IObservable<TSource4> source4)
        {
            return new CombineLatest<TSource1, TSource2, TSource3, TSource4, (TSource1, TSource2, TSource3, TSource4)>(source1, source2, source3, source4, (Func<TSource1, TSource2, TSource3, TSource4, (TSource1, TSource2, TSource3, TSource4)>)((TSource1 t1, TSource2 t2, TSource3 t3, TSource4 t4) => (t1, t2, t3, t4)));
        }
        [return: System.Runtime.CompilerServices.Nullable(new byte[] {
            1,
            0,
            1,
            1,
            1,
            1,
            1
        })]
        public virtual IObservable<(TSource1, TSource2, TSource3, TSource4, TSource5)> CombineLatest<[System.Runtime.CompilerServices.Nullable(2)] TSource1, [System.Runtime.CompilerServices.Nullable(2)] TSource2, [System.Runtime.CompilerServices.Nullable(2)] TSource3, [System.Runtime.CompilerServices.Nullable(2)] TSource4, [System.Runtime.CompilerServices.Nullable(2)] TSource5>(IObservable<TSource1> source1, IObservable<TSource2> source2, IObservable<TSource3> source3, IObservable<TSource4> source4, IObservable<TSource5> source5)
        {
            return new CombineLatest<TSource1, TSource2, TSource3, TSource4, TSource5, (TSource1, TSource2, TSource3, TSource4, TSource5)>(source1, source2, source3, source4, source5, (Func<TSource1, TSource2, TSource3, TSource4, TSource5, (TSource1, TSource2, TSource3, TSource4, TSource5)>)((TSource1 t1, TSource2 t2, TSource3 t3, TSource4 t4, TSource5 t5) => (t1, t2, t3, t4, t5)));
        }
        [return: System.Runtime.CompilerServices.Nullable(new byte[] {
            1,
            0,
            1,
            1,
            1,
            1,
            1,
            1
        })]
        public virtual IObservable<(TSource1, TSource2, TSource3, TSource4, TSource5, TSource6)> CombineLatest<[System.Runtime.CompilerServices.Nullable(2)] TSource1, [System.Runtime.CompilerServices.Nullable(2)] TSource2, [System.Runtime.CompilerServices.Nullable(2)] TSource3, [System.Runtime.CompilerServices.Nullable(2)] TSource4, [System.Runtime.CompilerServices.Nullable(2)] TSource5, [System.Runtime.CompilerServices.Nullable(2)] TSource6>(IObservable<TSource1> source1, IObservable<TSource2> source2, IObservable<TSource3> source3, IObservable<TSource4> source4, IObservable<TSource5> source5, IObservable<TSource6> source6)
        {
            return new CombineLatest<TSource1, TSource2, TSource3, TSource4, TSource5, TSource6, (TSource1, TSource2, TSource3, TSource4, TSource5, TSource6)>(source1, source2, source3, source4, source5, source6, (Func<TSource1, TSource2, TSource3, TSource4, TSource5, TSource6, (TSource1, TSource2, TSource3, TSource4, TSource5, TSource6)>)((TSource1 t1, TSource2 t2, TSource3 t3, TSource4 t4, TSource5 t5, TSource6 t6) => (t1, t2, t3, t4, t5, t6)));
        }
        [return: System.Runtime.CompilerServices.Nullable(new byte[] {
            1,
            0,
            1,
            1,
            1,
            1,
            1,
            1,
            1
        })]
        public virtual IObservable<(TSource1, TSource2, TSource3, TSource4, TSource5, TSource6, TSource7)> CombineLatest<[System.Runtime.CompilerServices.Nullable(2)] TSource1, [System.Runtime.CompilerServices.Nullable(2)] TSource2, [System.Runtime.CompilerServices.Nullable(2)] TSource3, [System.Runtime.CompilerServices.Nullable(2)] TSource4, [System.Runtime.CompilerServices.Nullable(2)] TSource5, [System.Runtime.CompilerServices.Nullable(2)] TSource6, [System.Runtime.CompilerServices.Nullable(2)] TSource7>(IObservable<TSource1> source1, IObservable<TSource2> source2, IObservable<TSource3> source3, IObservable<TSource4> source4, IObservable<TSource5> source5, IObservable<TSource6> source6, IObservable<TSource7> source7)
        {
            return new CombineLatest<TSource1, TSource2, TSource3, TSource4, TSource5, TSource6, TSource7, (TSource1, TSource2, TSource3, TSource4, TSource5, TSource6, TSource7)>(source1, source2, source3, source4, source5, source6, source7, (Func<TSource1, TSource2, TSource3, TSource4, TSource5, TSource6, TSource7, (TSource1, TSource2, TSource3, TSource4, TSource5, TSource6, TSource7)>)((TSource1 t1, TSource2 t2, TSource3 t3, TSource4 t4, TSource5 t5, TSource6 t6, TSource7 t7) => (t1, t2, t3, t4, t5, t6, t7)));
        }
        [return: System.Runtime.CompilerServices.Nullable(new byte[] {
            1,
            0,
            1,
            1,
            1,
            1,
            1,
            1,
            1,
            0,
            1
        })]
        public virtual IObservable<(TSource1, TSource2, TSource3, TSource4, TSource5, TSource6, TSource7, TSource8)> CombineLatest<[System.Runtime.CompilerServices.Nullable(2)] TSource1, [System.Runtime.CompilerServices.Nullable(2)] TSource2, [System.Runtime.CompilerServices.Nullable(2)] TSource3, [System.Runtime.CompilerServices.Nullable(2)] TSource4, [System.Runtime.CompilerServices.Nullable(2)] TSource5, [System.Runtime.CompilerServices.Nullable(2)] TSource6, [System.Runtime.CompilerServices.Nullable(2)] TSource7, [System.Runtime.CompilerServices.Nullable(2)] TSource8>(IObservable<TSource1> source1, IObservable<TSource2> source2, IObservable<TSource3> source3, IObservable<TSource4> source4, IObservable<TSource5> source5, IObservable<TSource6> source6, IObservable<TSource7> source7, IObservable<TSource8> source8)
        {
            return new CombineLatest<TSource1, TSource2, TSource3, TSource4, TSource5, TSource6, TSource7, TSource8, (TSource1, TSource2, TSource3, TSource4, TSource5, TSource6, TSource7, TSource8)>(source1, source2, source3, source4, source5, source6, source7, source8, (Func<TSource1, TSource2, TSource3, TSource4, TSource5, TSource6, TSource7, TSource8, (TSource1, TSource2, TSource3, TSource4, TSource5, TSource6, TSource7, TSource8)>)((TSource1 t1, TSource2 t2, TSource3 t3, TSource4 t4, TSource5 t5, TSource6 t6, TSource7 t7, TSource8 t8) => (t1, t2, t3, t4, t5, t6, t7, t8)));
        }
        [return: System.Runtime.CompilerServices.Nullable(new byte[] {
            1,
            0,
            1,
            1
        })]
        public virtual IObservable<(TSource1, TSource2)> Zip<[System.Runtime.CompilerServices.Nullable(2)] TSource1, [System.Runtime.CompilerServices.Nullable(2)] TSource2>(IObservable<TSource1> source1, IObservable<TSource2> source2)
        {
            return new Zip<TSource1, TSource2, (TSource1, TSource2)>.Observable(source1, source2, (Func<TSource1, TSource2, (TSource1, TSource2)>)((TSource1 t1, TSource2 t2) => (t1, t2)));
        }
        [return: System.Runtime.CompilerServices.Nullable(new byte[] {
            1,
            0,
            1,
            1,
            1
        })]
        public virtual IObservable<(TSource1, TSource2, TSource3)> Zip<[System.Runtime.CompilerServices.Nullable(2)] TSource1, [System.Runtime.CompilerServices.Nullable(2)] TSource2, [System.Runtime.CompilerServices.Nullable(2)] TSource3>(IObservable<TSource1> source1, IObservable<TSource2> source2, IObservable<TSource3> source3)
        {
            return new Zip<TSource1, TSource2, TSource3, (TSource1, TSource2, TSource3)>(source1, source2, source3, (Func<TSource1, TSource2, TSource3, (TSource1, TSource2, TSource3)>)((TSource1 t1, TSource2 t2, TSource3 t3) => (t1, t2, t3)));
        }
        [return: System.Runtime.CompilerServices.Nullable(new byte[] {
            1,
            0,
            1,
            1,
            1,
            1
        })]
        public virtual IObservable<(TSource1, TSource2, TSource3, TSource4)> Zip<[System.Runtime.CompilerServices.Nullable(2)] TSource1, [System.Runtime.CompilerServices.Nullable(2)] TSource2, [System.Runtime.CompilerServices.Nullable(2)] TSource3, [System.Runtime.CompilerServices.Nullable(2)] TSource4>(IObservable<TSource1> source1, IObservable<TSource2> source2, IObservable<TSource3> source3, IObservable<TSource4> source4)
        {
            return new Zip<TSource1, TSource2, TSource3, TSource4, (TSource1, TSource2, TSource3, TSource4)>(source1, source2, source3, source4, (Func<TSource1, TSource2, TSource3, TSource4, (TSource1, TSource2, TSource3, TSource4)>)((TSource1 t1, TSource2 t2, TSource3 t3, TSource4 t4) => (t1, t2, t3, t4)));
        }
        [return: System.Runtime.CompilerServices.Nullable(new byte[] {
            1,
            0,
            1,
            1,
            1,
            1,
            1
        })]
        public virtual IObservable<(TSource1, TSource2, TSource3, TSource4, TSource5)> Zip<[System.Runtime.CompilerServices.Nullable(2)] TSource1, [System.Runtime.CompilerServices.Nullable(2)] TSource2, [System.Runtime.CompilerServices.Nullable(2)] TSource3, [System.Runtime.CompilerServices.Nullable(2)] TSource4, [System.Runtime.CompilerServices.Nullable(2)] TSource5>(IObservable<TSource1> source1, IObservable<TSource2> source2, IObservable<TSource3> source3, IObservable<TSource4> source4, IObservable<TSource5> source5)
        {
            return new Zip<TSource1, TSource2, TSource3, TSource4, TSource5, (TSource1, TSource2, TSource3, TSource4, TSource5)>(source1, source2, source3, source4, source5, (Func<TSource1, TSource2, TSource3, TSource4, TSource5, (TSource1, TSource2, TSource3, TSource4, TSource5)>)((TSource1 t1, TSource2 t2, TSource3 t3, TSource4 t4, TSource5 t5) => (t1, t2, t3, t4, t5)));
        }
        [return: System.Runtime.CompilerServices.Nullable(new byte[] {
            1,
            0,
            1,
            1,
            1,
            1,
            1,
            1
        })]
        public virtual IObservable<(TSource1, TSource2, TSource3, TSource4, TSource5, TSource6)> Zip<[System.Runtime.CompilerServices.Nullable(2)] TSource1, [System.Runtime.CompilerServices.Nullable(2)] TSource2, [System.Runtime.CompilerServices.Nullable(2)] TSource3, [System.Runtime.CompilerServices.Nullable(2)] TSource4, [System.Runtime.CompilerServices.Nullable(2)] TSource5, [System.Runtime.CompilerServices.Nullable(2)] TSource6>(IObservable<TSource1> source1, IObservable<TSource2> source2, IObservable<TSource3> source3, IObservable<TSource4> source4, IObservable<TSource5> source5, IObservable<TSource6> source6)
        {
            return new Zip<TSource1, TSource2, TSource3, TSource4, TSource5, TSource6, (TSource1, TSource2, TSource3, TSource4, TSource5, TSource6)>(source1, source2, source3, source4, source5, source6, (Func<TSource1, TSource2, TSource3, TSource4, TSource5, TSource6, (TSource1, TSource2, TSource3, TSource4, TSource5, TSource6)>)((TSource1 t1, TSource2 t2, TSource3 t3, TSource4 t4, TSource5 t5, TSource6 t6) => (t1, t2, t3, t4, t5, t6)));
        }
        [return: System.Runtime.CompilerServices.Nullable(new byte[] {
            1,
            0,
            1,
            1,
            1,
            1,
            1,
            1,
            1
        })]
        public virtual IObservable<(TSource1, TSource2, TSource3, TSource4, TSource5, TSource6, TSource7)> Zip<[System.Runtime.CompilerServices.Nullable(2)] TSource1, [System.Runtime.CompilerServices.Nullable(2)] TSource2, [System.Runtime.CompilerServices.Nullable(2)] TSource3, [System.Runtime.CompilerServices.Nullable(2)] TSource4, [System.Runtime.CompilerServices.Nullable(2)] TSource5, [System.Runtime.CompilerServices.Nullable(2)] TSource6, [System.Runtime.CompilerServices.Nullable(2)] TSource7>(IObservable<TSource1> source1, IObservable<TSource2> source2, IObservable<TSource3> source3, IObservable<TSource4> source4, IObservable<TSource5> source5, IObservable<TSource6> source6, IObservable<TSource7> source7)
        {
            return new Zip<TSource1, TSource2, TSource3, TSource4, TSource5, TSource6, TSource7, (TSource1, TSource2, TSource3, TSource4, TSource5, TSource6, TSource7)>(source1, source2, source3, source4, source5, source6, source7, (Func<TSource1, TSource2, TSource3, TSource4, TSource5, TSource6, TSource7, (TSource1, TSource2, TSource3, TSource4, TSource5, TSource6, TSource7)>)((TSource1 t1, TSource2 t2, TSource3 t3, TSource4 t4, TSource5 t5, TSource6 t6, TSource7 t7) => (t1, t2, t3, t4, t5, t6, t7)));
        }
        [return: System.Runtime.CompilerServices.Nullable(new byte[] {
            1,
            0,
            1,
            1,
            1,
            1,
            1,
            1,
            1,
            0,
            1
        })]
        public virtual IObservable<(TSource1, TSource2, TSource3, TSource4, TSource5, TSource6, TSource7, TSource8)> Zip<[System.Runtime.CompilerServices.Nullable(2)] TSource1, [System.Runtime.CompilerServices.Nullable(2)] TSource2, [System.Runtime.CompilerServices.Nullable(2)] TSource3, [System.Runtime.CompilerServices.Nullable(2)] TSource4, [System.Runtime.CompilerServices.Nullable(2)] TSource5, [System.Runtime.CompilerServices.Nullable(2)] TSource6, [System.Runtime.CompilerServices.Nullable(2)] TSource7, [System.Runtime.CompilerServices.Nullable(2)] TSource8>(IObservable<TSource1> source1, IObservable<TSource2> source2, IObservable<TSource3> source3, IObservable<TSource4> source4, IObservable<TSource5> source5, IObservable<TSource6> source6, IObservable<TSource7> source7, IObservable<TSource8> source8)
        {
            return new Zip<TSource1, TSource2, TSource3, TSource4, TSource5, TSource6, TSource7, TSource8, (TSource1, TSource2, TSource3, TSource4, TSource5, TSource6, TSource7, TSource8)>(source1, source2, source3, source4, source5, source6, source7, source8, (Func<TSource1, TSource2, TSource3, TSource4, TSource5, TSource6, TSource7, TSource8, (TSource1, TSource2, TSource3, TSource4, TSource5, TSource6, TSource7, TSource8)>)((TSource1 t1, TSource2 t2, TSource3 t3, TSource4 t4, TSource5 t5, TSource6 t6, TSource7 t7, TSource8 t8) => (t1, t2, t3, t4, t5, t6, t7, t8)));
        }
        public virtual IObservable<TResult> Create<[System.Runtime.CompilerServices.Nullable(2)] TResult>(Func<IObserver<TResult>, IEnumerable<IObservable<object>>> iteratorMethod)
        {
            return new CreateWithEnumerableObservable<TResult>(iteratorMethod);
        }
        public virtual IObservable<Unit> Create(Func<IEnumerable<IObservable<object>>> iteratorMethod)
        {
            return new CreateWithOnlyEnumerableObservable<Unit>(iteratorMethod);
        }
        public virtual IObservable<TSource> Expand<[System.Runtime.CompilerServices.Nullable(2)] TSource>(IObservable<TSource> source, Func<TSource, IObservable<TSource>> selector, IScheduler scheduler)
        {
            return new ExpandObservable<TSource>(source, selector, scheduler);
        }
        public virtual IObservable<TSource> Expand<[System.Runtime.CompilerServices.Nullable(2)] TSource>(IObservable<TSource> source, Func<TSource, IObservable<TSource>> selector)
        {
            return source.Expand(selector, SchedulerDefaults.Iteration);
        }
        public virtual IObservable<TResult> ForkJoin<[System.Runtime.CompilerServices.Nullable(2)] TFirst, [System.Runtime.CompilerServices.Nullable(2)] TSecond, [System.Runtime.CompilerServices.Nullable(2)] TResult>(IObservable<TFirst> first, IObservable<TSecond> second, Func<TFirst, TSecond, TResult> resultSelector)
        {
            return Combine(first, second, delegate(IObserver<TResult> observer, IDisposable leftSubscription, IDisposable rightSubscription) {
                bool leftStopped = false;
                bool rightStopped = false;
                bool hasLeft = false;
                bool hasRight = false;
                TFirst lastLeft = (TFirst)default(TFirst);
                TSecond lastRight = (TSecond)default(TSecond);
                return new BinaryObserver<TFirst, TSecond>((Action<Notification<TFirst>>)delegate(Notification<TFirst> left) {
                    switch (left.Kind) {
                    case NotificationKind.OnNext:
                        hasLeft = true;
                        lastLeft = (TFirst)left.Value;
                        break;
                    case NotificationKind.OnError:
                        rightSubscription.Dispose();
                        observer.OnError(left.Exception);
                        break;
                    case NotificationKind.OnCompleted:
                        leftStopped = true;
                        if (rightStopped) {
                            if (!hasLeft)
                                observer.OnCompleted();
                            else if (!hasRight) {
                                observer.OnCompleted();
                            } else {
                                TResult value2;
                                try {
                                    value2 = resultSelector((TFirst)lastLeft, (TSecond)lastRight);
                                } catch (Exception error2) {
                                    observer.OnError(error2);
                                    return;
                                }
                                observer.OnNext(value2);
                                observer.OnCompleted();
                            }
                        }
                        break;
                    }
                }, (Action<Notification<TSecond>>)delegate(Notification<TSecond> right) {
                    switch (right.Kind) {
                    case NotificationKind.OnNext:
                        hasRight = true;
                        lastRight = (TSecond)right.Value;
                        break;
                    case NotificationKind.OnError:
                        leftSubscription.Dispose();
                        observer.OnError(right.Exception);
                        break;
                    case NotificationKind.OnCompleted:
                        rightStopped = true;
                        if (leftStopped) {
                            if (!hasLeft)
                                observer.OnCompleted();
                            else if (!hasRight) {
                                observer.OnCompleted();
                            } else {
                                TResult value;
                                try {
                                    value = resultSelector((TFirst)lastLeft, (TSecond)lastRight);
                                } catch (Exception error) {
                                    observer.OnError(error);
                                    return;
                                }
                                observer.OnNext(value);
                                observer.OnCompleted();
                            }
                        }
                        break;
                    }
                });
            });
        }
        public virtual IObservable<TSource[]> ForkJoin<[System.Runtime.CompilerServices.Nullable(2)] TSource>(params IObservable<TSource>[] sources)
        {
            return ((IEnumerable<IObservable<TSource>>)sources).ForkJoin();
        }
        public virtual IObservable<TSource[]> ForkJoin<[System.Runtime.CompilerServices.Nullable(2)] TSource>(IEnumerable<IObservable<TSource>> sources)
        {
            return new ForkJoinObservable<TSource>(sources);
        }
        public virtual IObservable<TResult> Let<[System.Runtime.CompilerServices.Nullable(2)] TSource, [System.Runtime.CompilerServices.Nullable(2)] TResult>(IObservable<TSource> source, Func<IObservable<TSource>, IObservable<TResult>> function)
        {
            return function(source);
        }
        public virtual IObservable<TResult> ManySelect<[System.Runtime.CompilerServices.Nullable(2)] TSource, [System.Runtime.CompilerServices.Nullable(2)] TResult>(IObservable<TSource> source, Func<IObservable<TSource>, TResult> selector)
        {
            return ManySelect(source, selector, DefaultScheduler.Instance);
        }
        public virtual IObservable<TResult> ManySelect<[System.Runtime.CompilerServices.Nullable(2)] TSource, [System.Runtime.CompilerServices.Nullable(2)] TResult>(IObservable<TSource> source, Func<IObservable<TSource>, TResult> selector, IScheduler scheduler)
        {
            return Observable.Defer(delegate {
                ChainObservable<TSource> chain = null;
                return Observable.Select<IObservable<TSource>, TResult>(Observable.ObserveOn<IObservable<TSource>>(Observable.Do<IObservable<TSource>>(Observable.Select<TSource, IObservable<TSource>>(source, (Func<TSource, IObservable<TSource>>)delegate(TSource x) {
                    ChainObservable<TSource> chainObservable = new ChainObservable<TSource>(x);
                    ((ChainObservable<TSource>)chain)?.OnNext((IObservable<TSource>)chainObservable);
                    chain = (ChainObservable<TSource>)chainObservable;
                    return chainObservable;
                }), (Action<IObservable<TSource>>)delegate {
                }, (Action<Exception>)delegate(Exception exception) {
                    ((ChainObservable<TSource>)chain)?.OnError(exception);
                }, (Action)delegate {
                    ((ChainObservable<TSource>)chain)?.OnCompleted();
                }), scheduler), selector);
            });
        }
        public virtual ListObservable<TSource> ToListObservable<[System.Runtime.CompilerServices.Nullable(2)] TSource>(IObservable<TSource> source)
        {
            return new ListObservable<TSource>(source);
        }
        [return: System.Runtime.CompilerServices.Nullable(new byte[] {
            1,
            0,
            1,
            1
        })]
        public virtual IObservable<(TFirst First, TSecond Second)> WithLatestFrom<[System.Runtime.CompilerServices.Nullable(2)] TFirst, [System.Runtime.CompilerServices.Nullable(2)] TSecond>(IObservable<TFirst> first, IObservable<TSecond> second)
        {
            return new WithLatestFrom<TFirst, TSecond, (TFirst, TSecond)>(first, second, (Func<TFirst, TSecond, (TFirst, TSecond)>)((TFirst t1, TSecond t2) => (t1, t2)));
        }
        [return: System.Runtime.CompilerServices.Nullable(new byte[] {
            1,
            0,
            1,
            1
        })]
        public virtual IObservable<(TFirst First, TSecond Second)> Zip<[System.Runtime.CompilerServices.Nullable(2)] TFirst, [System.Runtime.CompilerServices.Nullable(2)] TSecond>(IObservable<TFirst> first, IEnumerable<TSecond> second)
        {
            return new Zip<TFirst, TSecond, (TFirst, TSecond)>.Enumerable(first, second, (Func<TFirst, TSecond, (TFirst, TSecond)>)((TFirst t1, TSecond t2) => (t1, t2)));
        }
        private static IObservable<TResult> Combine<[System.Runtime.CompilerServices.Nullable(2)] TLeft, [System.Runtime.CompilerServices.Nullable(2)] TRight, [System.Runtime.CompilerServices.Nullable(2)] TResult>(IObservable<TLeft> leftSource, IObservable<TRight> rightSource, Func<IObserver<TResult>, IDisposable, IDisposable, IObserver<Either<Notification<TLeft>, Notification<TRight>>>> combinerSelector)
        {
            return new CombineObservable<TLeft, TRight, TResult>(leftSource, rightSource, combinerSelector);
        }
    }
}