Browse Source

Auto-generating Zip and CombineLatest code using T4.

Bart De Smet 10 years ago
parent
commit
438e7e0c2c

+ 1322 - 0
Rx.NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/CombineLatest.Generated.cs

@@ -0,0 +1,1322 @@
+// Copyright (c) Microsoft Open Technologies, Inc. All rights reserved. See License.txt in the project root for license information.
+
+#if !NO_PERF
+using System;
+using System.Collections.Generic;
+using System.Collections.ObjectModel;
+using System.Linq;
+using System.Reactive.Disposables;
+
+namespace System.Reactive.Linq.ObservableImpl
+{
+	#region [3,16]-ary
+
+    /* The following code is generated by a T4 template. */
+
+    #region CombineLatest auto-generated code (4/14/2015 00:26:20)
+
+	class CombineLatest<T1, T2, T3, TResult> : Producer<TResult>
+    {
+        private readonly IObservable<T1> _source1;
+        private readonly IObservable<T2> _source2;
+        private readonly IObservable<T3> _source3;
+        private readonly Func<T1, T2, T3, TResult> _resultSelector;
+
+        public CombineLatest(IObservable<T1> source1, IObservable<T2> source2, IObservable<T3> source3, Func<T1, T2, T3, TResult> resultSelector)
+        {
+            _source1 = source1;
+            _source2 = source2;
+            _source3 = source3;
+            _resultSelector = resultSelector;
+        }
+
+        protected override IDisposable Run(IObserver<TResult> observer, IDisposable cancel, Action<IDisposable> setSink)
+        {
+            var sink = new _(this, observer, cancel);
+            setSink(sink);
+            return sink.Run();
+        }
+
+        class _ : CombineLatestSink<TResult>
+        {
+            private readonly CombineLatest<T1, T2, T3, TResult> _parent;
+
+            public _(CombineLatest<T1, T2, T3, TResult> parent, IObserver<TResult> observer, IDisposable cancel)
+                : base(3, observer, cancel)
+            {
+                _parent = parent;
+            }
+
+            private CombineLatestObserver<T1> _observer1;
+            private CombineLatestObserver<T2> _observer2;
+            private CombineLatestObserver<T3> _observer3;
+
+            public IDisposable Run()
+            {
+                var subscriptions = new SingleAssignmentDisposable[3];
+                for (int i = 0; i < 3; i++)
+                    subscriptions[i] = new SingleAssignmentDisposable();
+
+				_observer1 = new CombineLatestObserver<T1>(_gate, this, 0, subscriptions[0]);
+				_observer2 = new CombineLatestObserver<T2>(_gate, this, 1, subscriptions[1]);
+				_observer3 = new CombineLatestObserver<T3>(_gate, this, 2, subscriptions[2]);
+                
+                subscriptions[0].Disposable = _parent._source1.SubscribeSafe(_observer1);
+                subscriptions[1].Disposable = _parent._source2.SubscribeSafe(_observer2);
+                subscriptions[2].Disposable = _parent._source3.SubscribeSafe(_observer3);
+
+                return StableCompositeDisposable.Create(subscriptions);
+            }
+
+            protected override TResult GetResult()
+            {
+                return _parent._resultSelector(_observer1.Value, _observer2.Value, _observer3.Value);
+            }
+        }
+    }
+
+	class CombineLatest<T1, T2, T3, T4, TResult> : Producer<TResult>
+    {
+        private readonly IObservable<T1> _source1;
+        private readonly IObservable<T2> _source2;
+        private readonly IObservable<T3> _source3;
+        private readonly IObservable<T4> _source4;
+        private readonly Func<T1, T2, T3, T4, TResult> _resultSelector;
+
+        public CombineLatest(IObservable<T1> source1, IObservable<T2> source2, IObservable<T3> source3, IObservable<T4> source4, Func<T1, T2, T3, T4, TResult> resultSelector)
+        {
+            _source1 = source1;
+            _source2 = source2;
+            _source3 = source3;
+            _source4 = source4;
+            _resultSelector = resultSelector;
+        }
+
+        protected override IDisposable Run(IObserver<TResult> observer, IDisposable cancel, Action<IDisposable> setSink)
+        {
+            var sink = new _(this, observer, cancel);
+            setSink(sink);
+            return sink.Run();
+        }
+
+        class _ : CombineLatestSink<TResult>
+        {
+            private readonly CombineLatest<T1, T2, T3, T4, TResult> _parent;
+
+            public _(CombineLatest<T1, T2, T3, T4, TResult> parent, IObserver<TResult> observer, IDisposable cancel)
+                : base(4, observer, cancel)
+            {
+                _parent = parent;
+            }
+
+            private CombineLatestObserver<T1> _observer1;
+            private CombineLatestObserver<T2> _observer2;
+            private CombineLatestObserver<T3> _observer3;
+            private CombineLatestObserver<T4> _observer4;
+
+            public IDisposable Run()
+            {
+                var subscriptions = new SingleAssignmentDisposable[4];
+                for (int i = 0; i < 4; i++)
+                    subscriptions[i] = new SingleAssignmentDisposable();
+
+				_observer1 = new CombineLatestObserver<T1>(_gate, this, 0, subscriptions[0]);
+				_observer2 = new CombineLatestObserver<T2>(_gate, this, 1, subscriptions[1]);
+				_observer3 = new CombineLatestObserver<T3>(_gate, this, 2, subscriptions[2]);
+				_observer4 = new CombineLatestObserver<T4>(_gate, this, 3, subscriptions[3]);
+                
+                subscriptions[0].Disposable = _parent._source1.SubscribeSafe(_observer1);
+                subscriptions[1].Disposable = _parent._source2.SubscribeSafe(_observer2);
+                subscriptions[2].Disposable = _parent._source3.SubscribeSafe(_observer3);
+                subscriptions[3].Disposable = _parent._source4.SubscribeSafe(_observer4);
+
+                return StableCompositeDisposable.Create(subscriptions);
+            }
+
+            protected override TResult GetResult()
+            {
+                return _parent._resultSelector(_observer1.Value, _observer2.Value, _observer3.Value, _observer4.Value);
+            }
+        }
+    }
+
+#if !NO_LARGEARITY
+
+	class CombineLatest<T1, T2, T3, T4, T5, TResult> : Producer<TResult>
+    {
+        private readonly IObservable<T1> _source1;
+        private readonly IObservable<T2> _source2;
+        private readonly IObservable<T3> _source3;
+        private readonly IObservable<T4> _source4;
+        private readonly IObservable<T5> _source5;
+        private readonly Func<T1, T2, T3, T4, T5, TResult> _resultSelector;
+
+        public CombineLatest(IObservable<T1> source1, IObservable<T2> source2, IObservable<T3> source3, IObservable<T4> source4, IObservable<T5> source5, Func<T1, T2, T3, T4, T5, TResult> resultSelector)
+        {
+            _source1 = source1;
+            _source2 = source2;
+            _source3 = source3;
+            _source4 = source4;
+            _source5 = source5;
+            _resultSelector = resultSelector;
+        }
+
+        protected override IDisposable Run(IObserver<TResult> observer, IDisposable cancel, Action<IDisposable> setSink)
+        {
+            var sink = new _(this, observer, cancel);
+            setSink(sink);
+            return sink.Run();
+        }
+
+        class _ : CombineLatestSink<TResult>
+        {
+            private readonly CombineLatest<T1, T2, T3, T4, T5, TResult> _parent;
+
+            public _(CombineLatest<T1, T2, T3, T4, T5, TResult> parent, IObserver<TResult> observer, IDisposable cancel)
+                : base(5, observer, cancel)
+            {
+                _parent = parent;
+            }
+
+            private CombineLatestObserver<T1> _observer1;
+            private CombineLatestObserver<T2> _observer2;
+            private CombineLatestObserver<T3> _observer3;
+            private CombineLatestObserver<T4> _observer4;
+            private CombineLatestObserver<T5> _observer5;
+
+            public IDisposable Run()
+            {
+                var subscriptions = new SingleAssignmentDisposable[5];
+                for (int i = 0; i < 5; i++)
+                    subscriptions[i] = new SingleAssignmentDisposable();
+
+				_observer1 = new CombineLatestObserver<T1>(_gate, this, 0, subscriptions[0]);
+				_observer2 = new CombineLatestObserver<T2>(_gate, this, 1, subscriptions[1]);
+				_observer3 = new CombineLatestObserver<T3>(_gate, this, 2, subscriptions[2]);
+				_observer4 = new CombineLatestObserver<T4>(_gate, this, 3, subscriptions[3]);
+				_observer5 = new CombineLatestObserver<T5>(_gate, this, 4, subscriptions[4]);
+                
+                subscriptions[0].Disposable = _parent._source1.SubscribeSafe(_observer1);
+                subscriptions[1].Disposable = _parent._source2.SubscribeSafe(_observer2);
+                subscriptions[2].Disposable = _parent._source3.SubscribeSafe(_observer3);
+                subscriptions[3].Disposable = _parent._source4.SubscribeSafe(_observer4);
+                subscriptions[4].Disposable = _parent._source5.SubscribeSafe(_observer5);
+
+                return StableCompositeDisposable.Create(subscriptions);
+            }
+
+            protected override TResult GetResult()
+            {
+                return _parent._resultSelector(_observer1.Value, _observer2.Value, _observer3.Value, _observer4.Value, _observer5.Value);
+            }
+        }
+    }
+
+	class CombineLatest<T1, T2, T3, T4, T5, T6, TResult> : Producer<TResult>
+    {
+        private readonly IObservable<T1> _source1;
+        private readonly IObservable<T2> _source2;
+        private readonly IObservable<T3> _source3;
+        private readonly IObservable<T4> _source4;
+        private readonly IObservable<T5> _source5;
+        private readonly IObservable<T6> _source6;
+        private readonly Func<T1, T2, T3, T4, T5, T6, TResult> _resultSelector;
+
+        public CombineLatest(IObservable<T1> source1, IObservable<T2> source2, IObservable<T3> source3, IObservable<T4> source4, IObservable<T5> source5, IObservable<T6> source6, Func<T1, T2, T3, T4, T5, T6, TResult> resultSelector)
+        {
+            _source1 = source1;
+            _source2 = source2;
+            _source3 = source3;
+            _source4 = source4;
+            _source5 = source5;
+            _source6 = source6;
+            _resultSelector = resultSelector;
+        }
+
+        protected override IDisposable Run(IObserver<TResult> observer, IDisposable cancel, Action<IDisposable> setSink)
+        {
+            var sink = new _(this, observer, cancel);
+            setSink(sink);
+            return sink.Run();
+        }
+
+        class _ : CombineLatestSink<TResult>
+        {
+            private readonly CombineLatest<T1, T2, T3, T4, T5, T6, TResult> _parent;
+
+            public _(CombineLatest<T1, T2, T3, T4, T5, T6, TResult> parent, IObserver<TResult> observer, IDisposable cancel)
+                : base(6, observer, cancel)
+            {
+                _parent = parent;
+            }
+
+            private CombineLatestObserver<T1> _observer1;
+            private CombineLatestObserver<T2> _observer2;
+            private CombineLatestObserver<T3> _observer3;
+            private CombineLatestObserver<T4> _observer4;
+            private CombineLatestObserver<T5> _observer5;
+            private CombineLatestObserver<T6> _observer6;
+
+            public IDisposable Run()
+            {
+                var subscriptions = new SingleAssignmentDisposable[6];
+                for (int i = 0; i < 6; i++)
+                    subscriptions[i] = new SingleAssignmentDisposable();
+
+				_observer1 = new CombineLatestObserver<T1>(_gate, this, 0, subscriptions[0]);
+				_observer2 = new CombineLatestObserver<T2>(_gate, this, 1, subscriptions[1]);
+				_observer3 = new CombineLatestObserver<T3>(_gate, this, 2, subscriptions[2]);
+				_observer4 = new CombineLatestObserver<T4>(_gate, this, 3, subscriptions[3]);
+				_observer5 = new CombineLatestObserver<T5>(_gate, this, 4, subscriptions[4]);
+				_observer6 = new CombineLatestObserver<T6>(_gate, this, 5, subscriptions[5]);
+                
+                subscriptions[0].Disposable = _parent._source1.SubscribeSafe(_observer1);
+                subscriptions[1].Disposable = _parent._source2.SubscribeSafe(_observer2);
+                subscriptions[2].Disposable = _parent._source3.SubscribeSafe(_observer3);
+                subscriptions[3].Disposable = _parent._source4.SubscribeSafe(_observer4);
+                subscriptions[4].Disposable = _parent._source5.SubscribeSafe(_observer5);
+                subscriptions[5].Disposable = _parent._source6.SubscribeSafe(_observer6);
+
+                return StableCompositeDisposable.Create(subscriptions);
+            }
+
+            protected override TResult GetResult()
+            {
+                return _parent._resultSelector(_observer1.Value, _observer2.Value, _observer3.Value, _observer4.Value, _observer5.Value, _observer6.Value);
+            }
+        }
+    }
+
+	class CombineLatest<T1, T2, T3, T4, T5, T6, T7, TResult> : Producer<TResult>
+    {
+        private readonly IObservable<T1> _source1;
+        private readonly IObservable<T2> _source2;
+        private readonly IObservable<T3> _source3;
+        private readonly IObservable<T4> _source4;
+        private readonly IObservable<T5> _source5;
+        private readonly IObservable<T6> _source6;
+        private readonly IObservable<T7> _source7;
+        private readonly Func<T1, T2, T3, T4, T5, T6, T7, TResult> _resultSelector;
+
+        public CombineLatest(IObservable<T1> source1, IObservable<T2> source2, IObservable<T3> source3, IObservable<T4> source4, IObservable<T5> source5, IObservable<T6> source6, IObservable<T7> source7, Func<T1, T2, T3, T4, T5, T6, T7, TResult> resultSelector)
+        {
+            _source1 = source1;
+            _source2 = source2;
+            _source3 = source3;
+            _source4 = source4;
+            _source5 = source5;
+            _source6 = source6;
+            _source7 = source7;
+            _resultSelector = resultSelector;
+        }
+
+        protected override IDisposable Run(IObserver<TResult> observer, IDisposable cancel, Action<IDisposable> setSink)
+        {
+            var sink = new _(this, observer, cancel);
+            setSink(sink);
+            return sink.Run();
+        }
+
+        class _ : CombineLatestSink<TResult>
+        {
+            private readonly CombineLatest<T1, T2, T3, T4, T5, T6, T7, TResult> _parent;
+
+            public _(CombineLatest<T1, T2, T3, T4, T5, T6, T7, TResult> parent, IObserver<TResult> observer, IDisposable cancel)
+                : base(7, observer, cancel)
+            {
+                _parent = parent;
+            }
+
+            private CombineLatestObserver<T1> _observer1;
+            private CombineLatestObserver<T2> _observer2;
+            private CombineLatestObserver<T3> _observer3;
+            private CombineLatestObserver<T4> _observer4;
+            private CombineLatestObserver<T5> _observer5;
+            private CombineLatestObserver<T6> _observer6;
+            private CombineLatestObserver<T7> _observer7;
+
+            public IDisposable Run()
+            {
+                var subscriptions = new SingleAssignmentDisposable[7];
+                for (int i = 0; i < 7; i++)
+                    subscriptions[i] = new SingleAssignmentDisposable();
+
+				_observer1 = new CombineLatestObserver<T1>(_gate, this, 0, subscriptions[0]);
+				_observer2 = new CombineLatestObserver<T2>(_gate, this, 1, subscriptions[1]);
+				_observer3 = new CombineLatestObserver<T3>(_gate, this, 2, subscriptions[2]);
+				_observer4 = new CombineLatestObserver<T4>(_gate, this, 3, subscriptions[3]);
+				_observer5 = new CombineLatestObserver<T5>(_gate, this, 4, subscriptions[4]);
+				_observer6 = new CombineLatestObserver<T6>(_gate, this, 5, subscriptions[5]);
+				_observer7 = new CombineLatestObserver<T7>(_gate, this, 6, subscriptions[6]);
+                
+                subscriptions[0].Disposable = _parent._source1.SubscribeSafe(_observer1);
+                subscriptions[1].Disposable = _parent._source2.SubscribeSafe(_observer2);
+                subscriptions[2].Disposable = _parent._source3.SubscribeSafe(_observer3);
+                subscriptions[3].Disposable = _parent._source4.SubscribeSafe(_observer4);
+                subscriptions[4].Disposable = _parent._source5.SubscribeSafe(_observer5);
+                subscriptions[5].Disposable = _parent._source6.SubscribeSafe(_observer6);
+                subscriptions[6].Disposable = _parent._source7.SubscribeSafe(_observer7);
+
+                return StableCompositeDisposable.Create(subscriptions);
+            }
+
+            protected override TResult GetResult()
+            {
+                return _parent._resultSelector(_observer1.Value, _observer2.Value, _observer3.Value, _observer4.Value, _observer5.Value, _observer6.Value, _observer7.Value);
+            }
+        }
+    }
+
+	class CombineLatest<T1, T2, T3, T4, T5, T6, T7, T8, TResult> : Producer<TResult>
+    {
+        private readonly IObservable<T1> _source1;
+        private readonly IObservable<T2> _source2;
+        private readonly IObservable<T3> _source3;
+        private readonly IObservable<T4> _source4;
+        private readonly IObservable<T5> _source5;
+        private readonly IObservable<T6> _source6;
+        private readonly IObservable<T7> _source7;
+        private readonly IObservable<T8> _source8;
+        private readonly Func<T1, T2, T3, T4, T5, T6, T7, T8, TResult> _resultSelector;
+
+        public CombineLatest(IObservable<T1> source1, IObservable<T2> source2, IObservable<T3> source3, IObservable<T4> source4, IObservable<T5> source5, IObservable<T6> source6, IObservable<T7> source7, IObservable<T8> source8, Func<T1, T2, T3, T4, T5, T6, T7, T8, TResult> resultSelector)
+        {
+            _source1 = source1;
+            _source2 = source2;
+            _source3 = source3;
+            _source4 = source4;
+            _source5 = source5;
+            _source6 = source6;
+            _source7 = source7;
+            _source8 = source8;
+            _resultSelector = resultSelector;
+        }
+
+        protected override IDisposable Run(IObserver<TResult> observer, IDisposable cancel, Action<IDisposable> setSink)
+        {
+            var sink = new _(this, observer, cancel);
+            setSink(sink);
+            return sink.Run();
+        }
+
+        class _ : CombineLatestSink<TResult>
+        {
+            private readonly CombineLatest<T1, T2, T3, T4, T5, T6, T7, T8, TResult> _parent;
+
+            public _(CombineLatest<T1, T2, T3, T4, T5, T6, T7, T8, TResult> parent, IObserver<TResult> observer, IDisposable cancel)
+                : base(8, observer, cancel)
+            {
+                _parent = parent;
+            }
+
+            private CombineLatestObserver<T1> _observer1;
+            private CombineLatestObserver<T2> _observer2;
+            private CombineLatestObserver<T3> _observer3;
+            private CombineLatestObserver<T4> _observer4;
+            private CombineLatestObserver<T5> _observer5;
+            private CombineLatestObserver<T6> _observer6;
+            private CombineLatestObserver<T7> _observer7;
+            private CombineLatestObserver<T8> _observer8;
+
+            public IDisposable Run()
+            {
+                var subscriptions = new SingleAssignmentDisposable[8];
+                for (int i = 0; i < 8; i++)
+                    subscriptions[i] = new SingleAssignmentDisposable();
+
+				_observer1 = new CombineLatestObserver<T1>(_gate, this, 0, subscriptions[0]);
+				_observer2 = new CombineLatestObserver<T2>(_gate, this, 1, subscriptions[1]);
+				_observer3 = new CombineLatestObserver<T3>(_gate, this, 2, subscriptions[2]);
+				_observer4 = new CombineLatestObserver<T4>(_gate, this, 3, subscriptions[3]);
+				_observer5 = new CombineLatestObserver<T5>(_gate, this, 4, subscriptions[4]);
+				_observer6 = new CombineLatestObserver<T6>(_gate, this, 5, subscriptions[5]);
+				_observer7 = new CombineLatestObserver<T7>(_gate, this, 6, subscriptions[6]);
+				_observer8 = new CombineLatestObserver<T8>(_gate, this, 7, subscriptions[7]);
+                
+                subscriptions[0].Disposable = _parent._source1.SubscribeSafe(_observer1);
+                subscriptions[1].Disposable = _parent._source2.SubscribeSafe(_observer2);
+                subscriptions[2].Disposable = _parent._source3.SubscribeSafe(_observer3);
+                subscriptions[3].Disposable = _parent._source4.SubscribeSafe(_observer4);
+                subscriptions[4].Disposable = _parent._source5.SubscribeSafe(_observer5);
+                subscriptions[5].Disposable = _parent._source6.SubscribeSafe(_observer6);
+                subscriptions[6].Disposable = _parent._source7.SubscribeSafe(_observer7);
+                subscriptions[7].Disposable = _parent._source8.SubscribeSafe(_observer8);
+
+                return StableCompositeDisposable.Create(subscriptions);
+            }
+
+            protected override TResult GetResult()
+            {
+                return _parent._resultSelector(_observer1.Value, _observer2.Value, _observer3.Value, _observer4.Value, _observer5.Value, _observer6.Value, _observer7.Value, _observer8.Value);
+            }
+        }
+    }
+
+	class CombineLatest<T1, T2, T3, T4, T5, T6, T7, T8, T9, TResult> : Producer<TResult>
+    {
+        private readonly IObservable<T1> _source1;
+        private readonly IObservable<T2> _source2;
+        private readonly IObservable<T3> _source3;
+        private readonly IObservable<T4> _source4;
+        private readonly IObservable<T5> _source5;
+        private readonly IObservable<T6> _source6;
+        private readonly IObservable<T7> _source7;
+        private readonly IObservable<T8> _source8;
+        private readonly IObservable<T9> _source9;
+        private readonly Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, TResult> _resultSelector;
+
+        public CombineLatest(IObservable<T1> source1, IObservable<T2> source2, IObservable<T3> source3, IObservable<T4> source4, IObservable<T5> source5, IObservable<T6> source6, IObservable<T7> source7, IObservable<T8> source8, IObservable<T9> source9, Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, TResult> resultSelector)
+        {
+            _source1 = source1;
+            _source2 = source2;
+            _source3 = source3;
+            _source4 = source4;
+            _source5 = source5;
+            _source6 = source6;
+            _source7 = source7;
+            _source8 = source8;
+            _source9 = source9;
+            _resultSelector = resultSelector;
+        }
+
+        protected override IDisposable Run(IObserver<TResult> observer, IDisposable cancel, Action<IDisposable> setSink)
+        {
+            var sink = new _(this, observer, cancel);
+            setSink(sink);
+            return sink.Run();
+        }
+
+        class _ : CombineLatestSink<TResult>
+        {
+            private readonly CombineLatest<T1, T2, T3, T4, T5, T6, T7, T8, T9, TResult> _parent;
+
+            public _(CombineLatest<T1, T2, T3, T4, T5, T6, T7, T8, T9, TResult> parent, IObserver<TResult> observer, IDisposable cancel)
+                : base(9, observer, cancel)
+            {
+                _parent = parent;
+            }
+
+            private CombineLatestObserver<T1> _observer1;
+            private CombineLatestObserver<T2> _observer2;
+            private CombineLatestObserver<T3> _observer3;
+            private CombineLatestObserver<T4> _observer4;
+            private CombineLatestObserver<T5> _observer5;
+            private CombineLatestObserver<T6> _observer6;
+            private CombineLatestObserver<T7> _observer7;
+            private CombineLatestObserver<T8> _observer8;
+            private CombineLatestObserver<T9> _observer9;
+
+            public IDisposable Run()
+            {
+                var subscriptions = new SingleAssignmentDisposable[9];
+                for (int i = 0; i < 9; i++)
+                    subscriptions[i] = new SingleAssignmentDisposable();
+
+				_observer1 = new CombineLatestObserver<T1>(_gate, this, 0, subscriptions[0]);
+				_observer2 = new CombineLatestObserver<T2>(_gate, this, 1, subscriptions[1]);
+				_observer3 = new CombineLatestObserver<T3>(_gate, this, 2, subscriptions[2]);
+				_observer4 = new CombineLatestObserver<T4>(_gate, this, 3, subscriptions[3]);
+				_observer5 = new CombineLatestObserver<T5>(_gate, this, 4, subscriptions[4]);
+				_observer6 = new CombineLatestObserver<T6>(_gate, this, 5, subscriptions[5]);
+				_observer7 = new CombineLatestObserver<T7>(_gate, this, 6, subscriptions[6]);
+				_observer8 = new CombineLatestObserver<T8>(_gate, this, 7, subscriptions[7]);
+				_observer9 = new CombineLatestObserver<T9>(_gate, this, 8, subscriptions[8]);
+                
+                subscriptions[0].Disposable = _parent._source1.SubscribeSafe(_observer1);
+                subscriptions[1].Disposable = _parent._source2.SubscribeSafe(_observer2);
+                subscriptions[2].Disposable = _parent._source3.SubscribeSafe(_observer3);
+                subscriptions[3].Disposable = _parent._source4.SubscribeSafe(_observer4);
+                subscriptions[4].Disposable = _parent._source5.SubscribeSafe(_observer5);
+                subscriptions[5].Disposable = _parent._source6.SubscribeSafe(_observer6);
+                subscriptions[6].Disposable = _parent._source7.SubscribeSafe(_observer7);
+                subscriptions[7].Disposable = _parent._source8.SubscribeSafe(_observer8);
+                subscriptions[8].Disposable = _parent._source9.SubscribeSafe(_observer9);
+
+                return StableCompositeDisposable.Create(subscriptions);
+            }
+
+            protected override TResult GetResult()
+            {
+                return _parent._resultSelector(_observer1.Value, _observer2.Value, _observer3.Value, _observer4.Value, _observer5.Value, _observer6.Value, _observer7.Value, _observer8.Value, _observer9.Value);
+            }
+        }
+    }
+
+	class CombineLatest<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, TResult> : Producer<TResult>
+    {
+        private readonly IObservable<T1> _source1;
+        private readonly IObservable<T2> _source2;
+        private readonly IObservable<T3> _source3;
+        private readonly IObservable<T4> _source4;
+        private readonly IObservable<T5> _source5;
+        private readonly IObservable<T6> _source6;
+        private readonly IObservable<T7> _source7;
+        private readonly IObservable<T8> _source8;
+        private readonly IObservable<T9> _source9;
+        private readonly IObservable<T10> _source10;
+        private readonly Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, TResult> _resultSelector;
+
+        public CombineLatest(IObservable<T1> source1, IObservable<T2> source2, IObservable<T3> source3, IObservable<T4> source4, IObservable<T5> source5, IObservable<T6> source6, IObservable<T7> source7, IObservable<T8> source8, IObservable<T9> source9, IObservable<T10> source10, Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, TResult> resultSelector)
+        {
+            _source1 = source1;
+            _source2 = source2;
+            _source3 = source3;
+            _source4 = source4;
+            _source5 = source5;
+            _source6 = source6;
+            _source7 = source7;
+            _source8 = source8;
+            _source9 = source9;
+            _source10 = source10;
+            _resultSelector = resultSelector;
+        }
+
+        protected override IDisposable Run(IObserver<TResult> observer, IDisposable cancel, Action<IDisposable> setSink)
+        {
+            var sink = new _(this, observer, cancel);
+            setSink(sink);
+            return sink.Run();
+        }
+
+        class _ : CombineLatestSink<TResult>
+        {
+            private readonly CombineLatest<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, TResult> _parent;
+
+            public _(CombineLatest<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, TResult> parent, IObserver<TResult> observer, IDisposable cancel)
+                : base(10, observer, cancel)
+            {
+                _parent = parent;
+            }
+
+            private CombineLatestObserver<T1> _observer1;
+            private CombineLatestObserver<T2> _observer2;
+            private CombineLatestObserver<T3> _observer3;
+            private CombineLatestObserver<T4> _observer4;
+            private CombineLatestObserver<T5> _observer5;
+            private CombineLatestObserver<T6> _observer6;
+            private CombineLatestObserver<T7> _observer7;
+            private CombineLatestObserver<T8> _observer8;
+            private CombineLatestObserver<T9> _observer9;
+            private CombineLatestObserver<T10> _observer10;
+
+            public IDisposable Run()
+            {
+                var subscriptions = new SingleAssignmentDisposable[10];
+                for (int i = 0; i < 10; i++)
+                    subscriptions[i] = new SingleAssignmentDisposable();
+
+				_observer1 = new CombineLatestObserver<T1>(_gate, this, 0, subscriptions[0]);
+				_observer2 = new CombineLatestObserver<T2>(_gate, this, 1, subscriptions[1]);
+				_observer3 = new CombineLatestObserver<T3>(_gate, this, 2, subscriptions[2]);
+				_observer4 = new CombineLatestObserver<T4>(_gate, this, 3, subscriptions[3]);
+				_observer5 = new CombineLatestObserver<T5>(_gate, this, 4, subscriptions[4]);
+				_observer6 = new CombineLatestObserver<T6>(_gate, this, 5, subscriptions[5]);
+				_observer7 = new CombineLatestObserver<T7>(_gate, this, 6, subscriptions[6]);
+				_observer8 = new CombineLatestObserver<T8>(_gate, this, 7, subscriptions[7]);
+				_observer9 = new CombineLatestObserver<T9>(_gate, this, 8, subscriptions[8]);
+				_observer10 = new CombineLatestObserver<T10>(_gate, this, 9, subscriptions[9]);
+                
+                subscriptions[0].Disposable = _parent._source1.SubscribeSafe(_observer1);
+                subscriptions[1].Disposable = _parent._source2.SubscribeSafe(_observer2);
+                subscriptions[2].Disposable = _parent._source3.SubscribeSafe(_observer3);
+                subscriptions[3].Disposable = _parent._source4.SubscribeSafe(_observer4);
+                subscriptions[4].Disposable = _parent._source5.SubscribeSafe(_observer5);
+                subscriptions[5].Disposable = _parent._source6.SubscribeSafe(_observer6);
+                subscriptions[6].Disposable = _parent._source7.SubscribeSafe(_observer7);
+                subscriptions[7].Disposable = _parent._source8.SubscribeSafe(_observer8);
+                subscriptions[8].Disposable = _parent._source9.SubscribeSafe(_observer9);
+                subscriptions[9].Disposable = _parent._source10.SubscribeSafe(_observer10);
+
+                return StableCompositeDisposable.Create(subscriptions);
+            }
+
+            protected override TResult GetResult()
+            {
+                return _parent._resultSelector(_observer1.Value, _observer2.Value, _observer3.Value, _observer4.Value, _observer5.Value, _observer6.Value, _observer7.Value, _observer8.Value, _observer9.Value, _observer10.Value);
+            }
+        }
+    }
+
+	class CombineLatest<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, TResult> : Producer<TResult>
+    {
+        private readonly IObservable<T1> _source1;
+        private readonly IObservable<T2> _source2;
+        private readonly IObservable<T3> _source3;
+        private readonly IObservable<T4> _source4;
+        private readonly IObservable<T5> _source5;
+        private readonly IObservable<T6> _source6;
+        private readonly IObservable<T7> _source7;
+        private readonly IObservable<T8> _source8;
+        private readonly IObservable<T9> _source9;
+        private readonly IObservable<T10> _source10;
+        private readonly IObservable<T11> _source11;
+        private readonly Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, TResult> _resultSelector;
+
+        public CombineLatest(IObservable<T1> source1, IObservable<T2> source2, IObservable<T3> source3, IObservable<T4> source4, IObservable<T5> source5, IObservable<T6> source6, IObservable<T7> source7, IObservable<T8> source8, IObservable<T9> source9, IObservable<T10> source10, IObservable<T11> source11, Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, TResult> resultSelector)
+        {
+            _source1 = source1;
+            _source2 = source2;
+            _source3 = source3;
+            _source4 = source4;
+            _source5 = source5;
+            _source6 = source6;
+            _source7 = source7;
+            _source8 = source8;
+            _source9 = source9;
+            _source10 = source10;
+            _source11 = source11;
+            _resultSelector = resultSelector;
+        }
+
+        protected override IDisposable Run(IObserver<TResult> observer, IDisposable cancel, Action<IDisposable> setSink)
+        {
+            var sink = new _(this, observer, cancel);
+            setSink(sink);
+            return sink.Run();
+        }
+
+        class _ : CombineLatestSink<TResult>
+        {
+            private readonly CombineLatest<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, TResult> _parent;
+
+            public _(CombineLatest<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, TResult> parent, IObserver<TResult> observer, IDisposable cancel)
+                : base(11, observer, cancel)
+            {
+                _parent = parent;
+            }
+
+            private CombineLatestObserver<T1> _observer1;
+            private CombineLatestObserver<T2> _observer2;
+            private CombineLatestObserver<T3> _observer3;
+            private CombineLatestObserver<T4> _observer4;
+            private CombineLatestObserver<T5> _observer5;
+            private CombineLatestObserver<T6> _observer6;
+            private CombineLatestObserver<T7> _observer7;
+            private CombineLatestObserver<T8> _observer8;
+            private CombineLatestObserver<T9> _observer9;
+            private CombineLatestObserver<T10> _observer10;
+            private CombineLatestObserver<T11> _observer11;
+
+            public IDisposable Run()
+            {
+                var subscriptions = new SingleAssignmentDisposable[11];
+                for (int i = 0; i < 11; i++)
+                    subscriptions[i] = new SingleAssignmentDisposable();
+
+				_observer1 = new CombineLatestObserver<T1>(_gate, this, 0, subscriptions[0]);
+				_observer2 = new CombineLatestObserver<T2>(_gate, this, 1, subscriptions[1]);
+				_observer3 = new CombineLatestObserver<T3>(_gate, this, 2, subscriptions[2]);
+				_observer4 = new CombineLatestObserver<T4>(_gate, this, 3, subscriptions[3]);
+				_observer5 = new CombineLatestObserver<T5>(_gate, this, 4, subscriptions[4]);
+				_observer6 = new CombineLatestObserver<T6>(_gate, this, 5, subscriptions[5]);
+				_observer7 = new CombineLatestObserver<T7>(_gate, this, 6, subscriptions[6]);
+				_observer8 = new CombineLatestObserver<T8>(_gate, this, 7, subscriptions[7]);
+				_observer9 = new CombineLatestObserver<T9>(_gate, this, 8, subscriptions[8]);
+				_observer10 = new CombineLatestObserver<T10>(_gate, this, 9, subscriptions[9]);
+				_observer11 = new CombineLatestObserver<T11>(_gate, this, 10, subscriptions[10]);
+                
+                subscriptions[0].Disposable = _parent._source1.SubscribeSafe(_observer1);
+                subscriptions[1].Disposable = _parent._source2.SubscribeSafe(_observer2);
+                subscriptions[2].Disposable = _parent._source3.SubscribeSafe(_observer3);
+                subscriptions[3].Disposable = _parent._source4.SubscribeSafe(_observer4);
+                subscriptions[4].Disposable = _parent._source5.SubscribeSafe(_observer5);
+                subscriptions[5].Disposable = _parent._source6.SubscribeSafe(_observer6);
+                subscriptions[6].Disposable = _parent._source7.SubscribeSafe(_observer7);
+                subscriptions[7].Disposable = _parent._source8.SubscribeSafe(_observer8);
+                subscriptions[8].Disposable = _parent._source9.SubscribeSafe(_observer9);
+                subscriptions[9].Disposable = _parent._source10.SubscribeSafe(_observer10);
+                subscriptions[10].Disposable = _parent._source11.SubscribeSafe(_observer11);
+
+                return StableCompositeDisposable.Create(subscriptions);
+            }
+
+            protected override TResult GetResult()
+            {
+                return _parent._resultSelector(_observer1.Value, _observer2.Value, _observer3.Value, _observer4.Value, _observer5.Value, _observer6.Value, _observer7.Value, _observer8.Value, _observer9.Value, _observer10.Value, _observer11.Value);
+            }
+        }
+    }
+
+	class CombineLatest<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, TResult> : Producer<TResult>
+    {
+        private readonly IObservable<T1> _source1;
+        private readonly IObservable<T2> _source2;
+        private readonly IObservable<T3> _source3;
+        private readonly IObservable<T4> _source4;
+        private readonly IObservable<T5> _source5;
+        private readonly IObservable<T6> _source6;
+        private readonly IObservable<T7> _source7;
+        private readonly IObservable<T8> _source8;
+        private readonly IObservable<T9> _source9;
+        private readonly IObservable<T10> _source10;
+        private readonly IObservable<T11> _source11;
+        private readonly IObservable<T12> _source12;
+        private readonly Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, TResult> _resultSelector;
+
+        public CombineLatest(IObservable<T1> source1, IObservable<T2> source2, IObservable<T3> source3, IObservable<T4> source4, IObservable<T5> source5, IObservable<T6> source6, IObservable<T7> source7, IObservable<T8> source8, IObservable<T9> source9, IObservable<T10> source10, IObservable<T11> source11, IObservable<T12> source12, Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, TResult> resultSelector)
+        {
+            _source1 = source1;
+            _source2 = source2;
+            _source3 = source3;
+            _source4 = source4;
+            _source5 = source5;
+            _source6 = source6;
+            _source7 = source7;
+            _source8 = source8;
+            _source9 = source9;
+            _source10 = source10;
+            _source11 = source11;
+            _source12 = source12;
+            _resultSelector = resultSelector;
+        }
+
+        protected override IDisposable Run(IObserver<TResult> observer, IDisposable cancel, Action<IDisposable> setSink)
+        {
+            var sink = new _(this, observer, cancel);
+            setSink(sink);
+            return sink.Run();
+        }
+
+        class _ : CombineLatestSink<TResult>
+        {
+            private readonly CombineLatest<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, TResult> _parent;
+
+            public _(CombineLatest<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, TResult> parent, IObserver<TResult> observer, IDisposable cancel)
+                : base(12, observer, cancel)
+            {
+                _parent = parent;
+            }
+
+            private CombineLatestObserver<T1> _observer1;
+            private CombineLatestObserver<T2> _observer2;
+            private CombineLatestObserver<T3> _observer3;
+            private CombineLatestObserver<T4> _observer4;
+            private CombineLatestObserver<T5> _observer5;
+            private CombineLatestObserver<T6> _observer6;
+            private CombineLatestObserver<T7> _observer7;
+            private CombineLatestObserver<T8> _observer8;
+            private CombineLatestObserver<T9> _observer9;
+            private CombineLatestObserver<T10> _observer10;
+            private CombineLatestObserver<T11> _observer11;
+            private CombineLatestObserver<T12> _observer12;
+
+            public IDisposable Run()
+            {
+                var subscriptions = new SingleAssignmentDisposable[12];
+                for (int i = 0; i < 12; i++)
+                    subscriptions[i] = new SingleAssignmentDisposable();
+
+				_observer1 = new CombineLatestObserver<T1>(_gate, this, 0, subscriptions[0]);
+				_observer2 = new CombineLatestObserver<T2>(_gate, this, 1, subscriptions[1]);
+				_observer3 = new CombineLatestObserver<T3>(_gate, this, 2, subscriptions[2]);
+				_observer4 = new CombineLatestObserver<T4>(_gate, this, 3, subscriptions[3]);
+				_observer5 = new CombineLatestObserver<T5>(_gate, this, 4, subscriptions[4]);
+				_observer6 = new CombineLatestObserver<T6>(_gate, this, 5, subscriptions[5]);
+				_observer7 = new CombineLatestObserver<T7>(_gate, this, 6, subscriptions[6]);
+				_observer8 = new CombineLatestObserver<T8>(_gate, this, 7, subscriptions[7]);
+				_observer9 = new CombineLatestObserver<T9>(_gate, this, 8, subscriptions[8]);
+				_observer10 = new CombineLatestObserver<T10>(_gate, this, 9, subscriptions[9]);
+				_observer11 = new CombineLatestObserver<T11>(_gate, this, 10, subscriptions[10]);
+				_observer12 = new CombineLatestObserver<T12>(_gate, this, 11, subscriptions[11]);
+                
+                subscriptions[0].Disposable = _parent._source1.SubscribeSafe(_observer1);
+                subscriptions[1].Disposable = _parent._source2.SubscribeSafe(_observer2);
+                subscriptions[2].Disposable = _parent._source3.SubscribeSafe(_observer3);
+                subscriptions[3].Disposable = _parent._source4.SubscribeSafe(_observer4);
+                subscriptions[4].Disposable = _parent._source5.SubscribeSafe(_observer5);
+                subscriptions[5].Disposable = _parent._source6.SubscribeSafe(_observer6);
+                subscriptions[6].Disposable = _parent._source7.SubscribeSafe(_observer7);
+                subscriptions[7].Disposable = _parent._source8.SubscribeSafe(_observer8);
+                subscriptions[8].Disposable = _parent._source9.SubscribeSafe(_observer9);
+                subscriptions[9].Disposable = _parent._source10.SubscribeSafe(_observer10);
+                subscriptions[10].Disposable = _parent._source11.SubscribeSafe(_observer11);
+                subscriptions[11].Disposable = _parent._source12.SubscribeSafe(_observer12);
+
+                return StableCompositeDisposable.Create(subscriptions);
+            }
+
+            protected override TResult GetResult()
+            {
+                return _parent._resultSelector(_observer1.Value, _observer2.Value, _observer3.Value, _observer4.Value, _observer5.Value, _observer6.Value, _observer7.Value, _observer8.Value, _observer9.Value, _observer10.Value, _observer11.Value, _observer12.Value);
+            }
+        }
+    }
+
+	class CombineLatest<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, TResult> : Producer<TResult>
+    {
+        private readonly IObservable<T1> _source1;
+        private readonly IObservable<T2> _source2;
+        private readonly IObservable<T3> _source3;
+        private readonly IObservable<T4> _source4;
+        private readonly IObservable<T5> _source5;
+        private readonly IObservable<T6> _source6;
+        private readonly IObservable<T7> _source7;
+        private readonly IObservable<T8> _source8;
+        private readonly IObservable<T9> _source9;
+        private readonly IObservable<T10> _source10;
+        private readonly IObservable<T11> _source11;
+        private readonly IObservable<T12> _source12;
+        private readonly IObservable<T13> _source13;
+        private readonly Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, TResult> _resultSelector;
+
+        public CombineLatest(IObservable<T1> source1, IObservable<T2> source2, IObservable<T3> source3, IObservable<T4> source4, IObservable<T5> source5, IObservable<T6> source6, IObservable<T7> source7, IObservable<T8> source8, IObservable<T9> source9, IObservable<T10> source10, IObservable<T11> source11, IObservable<T12> source12, IObservable<T13> source13, Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, TResult> resultSelector)
+        {
+            _source1 = source1;
+            _source2 = source2;
+            _source3 = source3;
+            _source4 = source4;
+            _source5 = source5;
+            _source6 = source6;
+            _source7 = source7;
+            _source8 = source8;
+            _source9 = source9;
+            _source10 = source10;
+            _source11 = source11;
+            _source12 = source12;
+            _source13 = source13;
+            _resultSelector = resultSelector;
+        }
+
+        protected override IDisposable Run(IObserver<TResult> observer, IDisposable cancel, Action<IDisposable> setSink)
+        {
+            var sink = new _(this, observer, cancel);
+            setSink(sink);
+            return sink.Run();
+        }
+
+        class _ : CombineLatestSink<TResult>
+        {
+            private readonly CombineLatest<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, TResult> _parent;
+
+            public _(CombineLatest<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, TResult> parent, IObserver<TResult> observer, IDisposable cancel)
+                : base(13, observer, cancel)
+            {
+                _parent = parent;
+            }
+
+            private CombineLatestObserver<T1> _observer1;
+            private CombineLatestObserver<T2> _observer2;
+            private CombineLatestObserver<T3> _observer3;
+            private CombineLatestObserver<T4> _observer4;
+            private CombineLatestObserver<T5> _observer5;
+            private CombineLatestObserver<T6> _observer6;
+            private CombineLatestObserver<T7> _observer7;
+            private CombineLatestObserver<T8> _observer8;
+            private CombineLatestObserver<T9> _observer9;
+            private CombineLatestObserver<T10> _observer10;
+            private CombineLatestObserver<T11> _observer11;
+            private CombineLatestObserver<T12> _observer12;
+            private CombineLatestObserver<T13> _observer13;
+
+            public IDisposable Run()
+            {
+                var subscriptions = new SingleAssignmentDisposable[13];
+                for (int i = 0; i < 13; i++)
+                    subscriptions[i] = new SingleAssignmentDisposable();
+
+				_observer1 = new CombineLatestObserver<T1>(_gate, this, 0, subscriptions[0]);
+				_observer2 = new CombineLatestObserver<T2>(_gate, this, 1, subscriptions[1]);
+				_observer3 = new CombineLatestObserver<T3>(_gate, this, 2, subscriptions[2]);
+				_observer4 = new CombineLatestObserver<T4>(_gate, this, 3, subscriptions[3]);
+				_observer5 = new CombineLatestObserver<T5>(_gate, this, 4, subscriptions[4]);
+				_observer6 = new CombineLatestObserver<T6>(_gate, this, 5, subscriptions[5]);
+				_observer7 = new CombineLatestObserver<T7>(_gate, this, 6, subscriptions[6]);
+				_observer8 = new CombineLatestObserver<T8>(_gate, this, 7, subscriptions[7]);
+				_observer9 = new CombineLatestObserver<T9>(_gate, this, 8, subscriptions[8]);
+				_observer10 = new CombineLatestObserver<T10>(_gate, this, 9, subscriptions[9]);
+				_observer11 = new CombineLatestObserver<T11>(_gate, this, 10, subscriptions[10]);
+				_observer12 = new CombineLatestObserver<T12>(_gate, this, 11, subscriptions[11]);
+				_observer13 = new CombineLatestObserver<T13>(_gate, this, 12, subscriptions[12]);
+                
+                subscriptions[0].Disposable = _parent._source1.SubscribeSafe(_observer1);
+                subscriptions[1].Disposable = _parent._source2.SubscribeSafe(_observer2);
+                subscriptions[2].Disposable = _parent._source3.SubscribeSafe(_observer3);
+                subscriptions[3].Disposable = _parent._source4.SubscribeSafe(_observer4);
+                subscriptions[4].Disposable = _parent._source5.SubscribeSafe(_observer5);
+                subscriptions[5].Disposable = _parent._source6.SubscribeSafe(_observer6);
+                subscriptions[6].Disposable = _parent._source7.SubscribeSafe(_observer7);
+                subscriptions[7].Disposable = _parent._source8.SubscribeSafe(_observer8);
+                subscriptions[8].Disposable = _parent._source9.SubscribeSafe(_observer9);
+                subscriptions[9].Disposable = _parent._source10.SubscribeSafe(_observer10);
+                subscriptions[10].Disposable = _parent._source11.SubscribeSafe(_observer11);
+                subscriptions[11].Disposable = _parent._source12.SubscribeSafe(_observer12);
+                subscriptions[12].Disposable = _parent._source13.SubscribeSafe(_observer13);
+
+                return StableCompositeDisposable.Create(subscriptions);
+            }
+
+            protected override TResult GetResult()
+            {
+                return _parent._resultSelector(_observer1.Value, _observer2.Value, _observer3.Value, _observer4.Value, _observer5.Value, _observer6.Value, _observer7.Value, _observer8.Value, _observer9.Value, _observer10.Value, _observer11.Value, _observer12.Value, _observer13.Value);
+            }
+        }
+    }
+
+	class CombineLatest<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, TResult> : Producer<TResult>
+    {
+        private readonly IObservable<T1> _source1;
+        private readonly IObservable<T2> _source2;
+        private readonly IObservable<T3> _source3;
+        private readonly IObservable<T4> _source4;
+        private readonly IObservable<T5> _source5;
+        private readonly IObservable<T6> _source6;
+        private readonly IObservable<T7> _source7;
+        private readonly IObservable<T8> _source8;
+        private readonly IObservable<T9> _source9;
+        private readonly IObservable<T10> _source10;
+        private readonly IObservable<T11> _source11;
+        private readonly IObservable<T12> _source12;
+        private readonly IObservable<T13> _source13;
+        private readonly IObservable<T14> _source14;
+        private readonly Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, TResult> _resultSelector;
+
+        public CombineLatest(IObservable<T1> source1, IObservable<T2> source2, IObservable<T3> source3, IObservable<T4> source4, IObservable<T5> source5, IObservable<T6> source6, IObservable<T7> source7, IObservable<T8> source8, IObservable<T9> source9, IObservable<T10> source10, IObservable<T11> source11, IObservable<T12> source12, IObservable<T13> source13, IObservable<T14> source14, Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, TResult> resultSelector)
+        {
+            _source1 = source1;
+            _source2 = source2;
+            _source3 = source3;
+            _source4 = source4;
+            _source5 = source5;
+            _source6 = source6;
+            _source7 = source7;
+            _source8 = source8;
+            _source9 = source9;
+            _source10 = source10;
+            _source11 = source11;
+            _source12 = source12;
+            _source13 = source13;
+            _source14 = source14;
+            _resultSelector = resultSelector;
+        }
+
+        protected override IDisposable Run(IObserver<TResult> observer, IDisposable cancel, Action<IDisposable> setSink)
+        {
+            var sink = new _(this, observer, cancel);
+            setSink(sink);
+            return sink.Run();
+        }
+
+        class _ : CombineLatestSink<TResult>
+        {
+            private readonly CombineLatest<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, TResult> _parent;
+
+            public _(CombineLatest<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, TResult> parent, IObserver<TResult> observer, IDisposable cancel)
+                : base(14, observer, cancel)
+            {
+                _parent = parent;
+            }
+
+            private CombineLatestObserver<T1> _observer1;
+            private CombineLatestObserver<T2> _observer2;
+            private CombineLatestObserver<T3> _observer3;
+            private CombineLatestObserver<T4> _observer4;
+            private CombineLatestObserver<T5> _observer5;
+            private CombineLatestObserver<T6> _observer6;
+            private CombineLatestObserver<T7> _observer7;
+            private CombineLatestObserver<T8> _observer8;
+            private CombineLatestObserver<T9> _observer9;
+            private CombineLatestObserver<T10> _observer10;
+            private CombineLatestObserver<T11> _observer11;
+            private CombineLatestObserver<T12> _observer12;
+            private CombineLatestObserver<T13> _observer13;
+            private CombineLatestObserver<T14> _observer14;
+
+            public IDisposable Run()
+            {
+                var subscriptions = new SingleAssignmentDisposable[14];
+                for (int i = 0; i < 14; i++)
+                    subscriptions[i] = new SingleAssignmentDisposable();
+
+				_observer1 = new CombineLatestObserver<T1>(_gate, this, 0, subscriptions[0]);
+				_observer2 = new CombineLatestObserver<T2>(_gate, this, 1, subscriptions[1]);
+				_observer3 = new CombineLatestObserver<T3>(_gate, this, 2, subscriptions[2]);
+				_observer4 = new CombineLatestObserver<T4>(_gate, this, 3, subscriptions[3]);
+				_observer5 = new CombineLatestObserver<T5>(_gate, this, 4, subscriptions[4]);
+				_observer6 = new CombineLatestObserver<T6>(_gate, this, 5, subscriptions[5]);
+				_observer7 = new CombineLatestObserver<T7>(_gate, this, 6, subscriptions[6]);
+				_observer8 = new CombineLatestObserver<T8>(_gate, this, 7, subscriptions[7]);
+				_observer9 = new CombineLatestObserver<T9>(_gate, this, 8, subscriptions[8]);
+				_observer10 = new CombineLatestObserver<T10>(_gate, this, 9, subscriptions[9]);
+				_observer11 = new CombineLatestObserver<T11>(_gate, this, 10, subscriptions[10]);
+				_observer12 = new CombineLatestObserver<T12>(_gate, this, 11, subscriptions[11]);
+				_observer13 = new CombineLatestObserver<T13>(_gate, this, 12, subscriptions[12]);
+				_observer14 = new CombineLatestObserver<T14>(_gate, this, 13, subscriptions[13]);
+                
+                subscriptions[0].Disposable = _parent._source1.SubscribeSafe(_observer1);
+                subscriptions[1].Disposable = _parent._source2.SubscribeSafe(_observer2);
+                subscriptions[2].Disposable = _parent._source3.SubscribeSafe(_observer3);
+                subscriptions[3].Disposable = _parent._source4.SubscribeSafe(_observer4);
+                subscriptions[4].Disposable = _parent._source5.SubscribeSafe(_observer5);
+                subscriptions[5].Disposable = _parent._source6.SubscribeSafe(_observer6);
+                subscriptions[6].Disposable = _parent._source7.SubscribeSafe(_observer7);
+                subscriptions[7].Disposable = _parent._source8.SubscribeSafe(_observer8);
+                subscriptions[8].Disposable = _parent._source9.SubscribeSafe(_observer9);
+                subscriptions[9].Disposable = _parent._source10.SubscribeSafe(_observer10);
+                subscriptions[10].Disposable = _parent._source11.SubscribeSafe(_observer11);
+                subscriptions[11].Disposable = _parent._source12.SubscribeSafe(_observer12);
+                subscriptions[12].Disposable = _parent._source13.SubscribeSafe(_observer13);
+                subscriptions[13].Disposable = _parent._source14.SubscribeSafe(_observer14);
+
+                return StableCompositeDisposable.Create(subscriptions);
+            }
+
+            protected override TResult GetResult()
+            {
+                return _parent._resultSelector(_observer1.Value, _observer2.Value, _observer3.Value, _observer4.Value, _observer5.Value, _observer6.Value, _observer7.Value, _observer8.Value, _observer9.Value, _observer10.Value, _observer11.Value, _observer12.Value, _observer13.Value, _observer14.Value);
+            }
+        }
+    }
+
+	class CombineLatest<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, TResult> : Producer<TResult>
+    {
+        private readonly IObservable<T1> _source1;
+        private readonly IObservable<T2> _source2;
+        private readonly IObservable<T3> _source3;
+        private readonly IObservable<T4> _source4;
+        private readonly IObservable<T5> _source5;
+        private readonly IObservable<T6> _source6;
+        private readonly IObservable<T7> _source7;
+        private readonly IObservable<T8> _source8;
+        private readonly IObservable<T9> _source9;
+        private readonly IObservable<T10> _source10;
+        private readonly IObservable<T11> _source11;
+        private readonly IObservable<T12> _source12;
+        private readonly IObservable<T13> _source13;
+        private readonly IObservable<T14> _source14;
+        private readonly IObservable<T15> _source15;
+        private readonly Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, TResult> _resultSelector;
+
+        public CombineLatest(IObservable<T1> source1, IObservable<T2> source2, IObservable<T3> source3, IObservable<T4> source4, IObservable<T5> source5, IObservable<T6> source6, IObservable<T7> source7, IObservable<T8> source8, IObservable<T9> source9, IObservable<T10> source10, IObservable<T11> source11, IObservable<T12> source12, IObservable<T13> source13, IObservable<T14> source14, IObservable<T15> source15, Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, TResult> resultSelector)
+        {
+            _source1 = source1;
+            _source2 = source2;
+            _source3 = source3;
+            _source4 = source4;
+            _source5 = source5;
+            _source6 = source6;
+            _source7 = source7;
+            _source8 = source8;
+            _source9 = source9;
+            _source10 = source10;
+            _source11 = source11;
+            _source12 = source12;
+            _source13 = source13;
+            _source14 = source14;
+            _source15 = source15;
+            _resultSelector = resultSelector;
+        }
+
+        protected override IDisposable Run(IObserver<TResult> observer, IDisposable cancel, Action<IDisposable> setSink)
+        {
+            var sink = new _(this, observer, cancel);
+            setSink(sink);
+            return sink.Run();
+        }
+
+        class _ : CombineLatestSink<TResult>
+        {
+            private readonly CombineLatest<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, TResult> _parent;
+
+            public _(CombineLatest<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, TResult> parent, IObserver<TResult> observer, IDisposable cancel)
+                : base(15, observer, cancel)
+            {
+                _parent = parent;
+            }
+
+            private CombineLatestObserver<T1> _observer1;
+            private CombineLatestObserver<T2> _observer2;
+            private CombineLatestObserver<T3> _observer3;
+            private CombineLatestObserver<T4> _observer4;
+            private CombineLatestObserver<T5> _observer5;
+            private CombineLatestObserver<T6> _observer6;
+            private CombineLatestObserver<T7> _observer7;
+            private CombineLatestObserver<T8> _observer8;
+            private CombineLatestObserver<T9> _observer9;
+            private CombineLatestObserver<T10> _observer10;
+            private CombineLatestObserver<T11> _observer11;
+            private CombineLatestObserver<T12> _observer12;
+            private CombineLatestObserver<T13> _observer13;
+            private CombineLatestObserver<T14> _observer14;
+            private CombineLatestObserver<T15> _observer15;
+
+            public IDisposable Run()
+            {
+                var subscriptions = new SingleAssignmentDisposable[15];
+                for (int i = 0; i < 15; i++)
+                    subscriptions[i] = new SingleAssignmentDisposable();
+
+				_observer1 = new CombineLatestObserver<T1>(_gate, this, 0, subscriptions[0]);
+				_observer2 = new CombineLatestObserver<T2>(_gate, this, 1, subscriptions[1]);
+				_observer3 = new CombineLatestObserver<T3>(_gate, this, 2, subscriptions[2]);
+				_observer4 = new CombineLatestObserver<T4>(_gate, this, 3, subscriptions[3]);
+				_observer5 = new CombineLatestObserver<T5>(_gate, this, 4, subscriptions[4]);
+				_observer6 = new CombineLatestObserver<T6>(_gate, this, 5, subscriptions[5]);
+				_observer7 = new CombineLatestObserver<T7>(_gate, this, 6, subscriptions[6]);
+				_observer8 = new CombineLatestObserver<T8>(_gate, this, 7, subscriptions[7]);
+				_observer9 = new CombineLatestObserver<T9>(_gate, this, 8, subscriptions[8]);
+				_observer10 = new CombineLatestObserver<T10>(_gate, this, 9, subscriptions[9]);
+				_observer11 = new CombineLatestObserver<T11>(_gate, this, 10, subscriptions[10]);
+				_observer12 = new CombineLatestObserver<T12>(_gate, this, 11, subscriptions[11]);
+				_observer13 = new CombineLatestObserver<T13>(_gate, this, 12, subscriptions[12]);
+				_observer14 = new CombineLatestObserver<T14>(_gate, this, 13, subscriptions[13]);
+				_observer15 = new CombineLatestObserver<T15>(_gate, this, 14, subscriptions[14]);
+                
+                subscriptions[0].Disposable = _parent._source1.SubscribeSafe(_observer1);
+                subscriptions[1].Disposable = _parent._source2.SubscribeSafe(_observer2);
+                subscriptions[2].Disposable = _parent._source3.SubscribeSafe(_observer3);
+                subscriptions[3].Disposable = _parent._source4.SubscribeSafe(_observer4);
+                subscriptions[4].Disposable = _parent._source5.SubscribeSafe(_observer5);
+                subscriptions[5].Disposable = _parent._source6.SubscribeSafe(_observer6);
+                subscriptions[6].Disposable = _parent._source7.SubscribeSafe(_observer7);
+                subscriptions[7].Disposable = _parent._source8.SubscribeSafe(_observer8);
+                subscriptions[8].Disposable = _parent._source9.SubscribeSafe(_observer9);
+                subscriptions[9].Disposable = _parent._source10.SubscribeSafe(_observer10);
+                subscriptions[10].Disposable = _parent._source11.SubscribeSafe(_observer11);
+                subscriptions[11].Disposable = _parent._source12.SubscribeSafe(_observer12);
+                subscriptions[12].Disposable = _parent._source13.SubscribeSafe(_observer13);
+                subscriptions[13].Disposable = _parent._source14.SubscribeSafe(_observer14);
+                subscriptions[14].Disposable = _parent._source15.SubscribeSafe(_observer15);
+
+                return StableCompositeDisposable.Create(subscriptions);
+            }
+
+            protected override TResult GetResult()
+            {
+                return _parent._resultSelector(_observer1.Value, _observer2.Value, _observer3.Value, _observer4.Value, _observer5.Value, _observer6.Value, _observer7.Value, _observer8.Value, _observer9.Value, _observer10.Value, _observer11.Value, _observer12.Value, _observer13.Value, _observer14.Value, _observer15.Value);
+            }
+        }
+    }
+
+	class CombineLatest<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, TResult> : Producer<TResult>
+    {
+        private readonly IObservable<T1> _source1;
+        private readonly IObservable<T2> _source2;
+        private readonly IObservable<T3> _source3;
+        private readonly IObservable<T4> _source4;
+        private readonly IObservable<T5> _source5;
+        private readonly IObservable<T6> _source6;
+        private readonly IObservable<T7> _source7;
+        private readonly IObservable<T8> _source8;
+        private readonly IObservable<T9> _source9;
+        private readonly IObservable<T10> _source10;
+        private readonly IObservable<T11> _source11;
+        private readonly IObservable<T12> _source12;
+        private readonly IObservable<T13> _source13;
+        private readonly IObservable<T14> _source14;
+        private readonly IObservable<T15> _source15;
+        private readonly IObservable<T16> _source16;
+        private readonly Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, TResult> _resultSelector;
+
+        public CombineLatest(IObservable<T1> source1, IObservable<T2> source2, IObservable<T3> source3, IObservable<T4> source4, IObservable<T5> source5, IObservable<T6> source6, IObservable<T7> source7, IObservable<T8> source8, IObservable<T9> source9, IObservable<T10> source10, IObservable<T11> source11, IObservable<T12> source12, IObservable<T13> source13, IObservable<T14> source14, IObservable<T15> source15, IObservable<T16> source16, Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, TResult> resultSelector)
+        {
+            _source1 = source1;
+            _source2 = source2;
+            _source3 = source3;
+            _source4 = source4;
+            _source5 = source5;
+            _source6 = source6;
+            _source7 = source7;
+            _source8 = source8;
+            _source9 = source9;
+            _source10 = source10;
+            _source11 = source11;
+            _source12 = source12;
+            _source13 = source13;
+            _source14 = source14;
+            _source15 = source15;
+            _source16 = source16;
+            _resultSelector = resultSelector;
+        }
+
+        protected override IDisposable Run(IObserver<TResult> observer, IDisposable cancel, Action<IDisposable> setSink)
+        {
+            var sink = new _(this, observer, cancel);
+            setSink(sink);
+            return sink.Run();
+        }
+
+        class _ : CombineLatestSink<TResult>
+        {
+            private readonly CombineLatest<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, TResult> _parent;
+
+            public _(CombineLatest<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, TResult> parent, IObserver<TResult> observer, IDisposable cancel)
+                : base(16, observer, cancel)
+            {
+                _parent = parent;
+            }
+
+            private CombineLatestObserver<T1> _observer1;
+            private CombineLatestObserver<T2> _observer2;
+            private CombineLatestObserver<T3> _observer3;
+            private CombineLatestObserver<T4> _observer4;
+            private CombineLatestObserver<T5> _observer5;
+            private CombineLatestObserver<T6> _observer6;
+            private CombineLatestObserver<T7> _observer7;
+            private CombineLatestObserver<T8> _observer8;
+            private CombineLatestObserver<T9> _observer9;
+            private CombineLatestObserver<T10> _observer10;
+            private CombineLatestObserver<T11> _observer11;
+            private CombineLatestObserver<T12> _observer12;
+            private CombineLatestObserver<T13> _observer13;
+            private CombineLatestObserver<T14> _observer14;
+            private CombineLatestObserver<T15> _observer15;
+            private CombineLatestObserver<T16> _observer16;
+
+            public IDisposable Run()
+            {
+                var subscriptions = new SingleAssignmentDisposable[16];
+                for (int i = 0; i < 16; i++)
+                    subscriptions[i] = new SingleAssignmentDisposable();
+
+				_observer1 = new CombineLatestObserver<T1>(_gate, this, 0, subscriptions[0]);
+				_observer2 = new CombineLatestObserver<T2>(_gate, this, 1, subscriptions[1]);
+				_observer3 = new CombineLatestObserver<T3>(_gate, this, 2, subscriptions[2]);
+				_observer4 = new CombineLatestObserver<T4>(_gate, this, 3, subscriptions[3]);
+				_observer5 = new CombineLatestObserver<T5>(_gate, this, 4, subscriptions[4]);
+				_observer6 = new CombineLatestObserver<T6>(_gate, this, 5, subscriptions[5]);
+				_observer7 = new CombineLatestObserver<T7>(_gate, this, 6, subscriptions[6]);
+				_observer8 = new CombineLatestObserver<T8>(_gate, this, 7, subscriptions[7]);
+				_observer9 = new CombineLatestObserver<T9>(_gate, this, 8, subscriptions[8]);
+				_observer10 = new CombineLatestObserver<T10>(_gate, this, 9, subscriptions[9]);
+				_observer11 = new CombineLatestObserver<T11>(_gate, this, 10, subscriptions[10]);
+				_observer12 = new CombineLatestObserver<T12>(_gate, this, 11, subscriptions[11]);
+				_observer13 = new CombineLatestObserver<T13>(_gate, this, 12, subscriptions[12]);
+				_observer14 = new CombineLatestObserver<T14>(_gate, this, 13, subscriptions[13]);
+				_observer15 = new CombineLatestObserver<T15>(_gate, this, 14, subscriptions[14]);
+				_observer16 = new CombineLatestObserver<T16>(_gate, this, 15, subscriptions[15]);
+                
+                subscriptions[0].Disposable = _parent._source1.SubscribeSafe(_observer1);
+                subscriptions[1].Disposable = _parent._source2.SubscribeSafe(_observer2);
+                subscriptions[2].Disposable = _parent._source3.SubscribeSafe(_observer3);
+                subscriptions[3].Disposable = _parent._source4.SubscribeSafe(_observer4);
+                subscriptions[4].Disposable = _parent._source5.SubscribeSafe(_observer5);
+                subscriptions[5].Disposable = _parent._source6.SubscribeSafe(_observer6);
+                subscriptions[6].Disposable = _parent._source7.SubscribeSafe(_observer7);
+                subscriptions[7].Disposable = _parent._source8.SubscribeSafe(_observer8);
+                subscriptions[8].Disposable = _parent._source9.SubscribeSafe(_observer9);
+                subscriptions[9].Disposable = _parent._source10.SubscribeSafe(_observer10);
+                subscriptions[10].Disposable = _parent._source11.SubscribeSafe(_observer11);
+                subscriptions[11].Disposable = _parent._source12.SubscribeSafe(_observer12);
+                subscriptions[12].Disposable = _parent._source13.SubscribeSafe(_observer13);
+                subscriptions[13].Disposable = _parent._source14.SubscribeSafe(_observer14);
+                subscriptions[14].Disposable = _parent._source15.SubscribeSafe(_observer15);
+                subscriptions[15].Disposable = _parent._source16.SubscribeSafe(_observer16);
+
+                return StableCompositeDisposable.Create(subscriptions);
+            }
+
+            protected override TResult GetResult()
+            {
+                return _parent._resultSelector(_observer1.Value, _observer2.Value, _observer3.Value, _observer4.Value, _observer5.Value, _observer6.Value, _observer7.Value, _observer8.Value, _observer9.Value, _observer10.Value, _observer11.Value, _observer12.Value, _observer13.Value, _observer14.Value, _observer15.Value, _observer16.Value);
+            }
+        }
+    }
+
+
+#endif
+
+	#endregion
+
+	#endregion
+}
+#endif

+ 134 - 0
Rx.NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/CombineLatest.Generated.tt

@@ -0,0 +1,134 @@
+<#@ template debug="false" hostspecific="false" language="C#" #>
+<#@ assembly name="System.Core" #>
+<#@ import namespace="System.Linq" #>
+<#@ import namespace="System.Text" #>
+<#@ import namespace="System.Collections.Generic" #>
+<#@ output extension=".cs" #>
+// Copyright (c) Microsoft Open Technologies, Inc. All rights reserved. See License.txt in the project root for license information.
+
+#if !NO_PERF
+using System;
+using System.Collections.Generic;
+using System.Collections.ObjectModel;
+using System.Linq;
+using System.Reactive.Disposables;
+
+namespace System.Reactive.Linq.ObservableImpl
+{
+	#region [3,16]-ary
+
+    /* The following code is generated by a T4 template. */
+
+    #region CombineLatest auto-generated code (<#=DateTime.Now.ToString()#>)
+
+<#
+for (var i = 3; i <= 16; i++)
+{
+	var ts = string.Join(", ", Enumerable.Range(1, i).Select(j => "T" + j));
+	var os = string.Join(", ", Enumerable.Range(1, i).Select(j => "IObservable<T" + j + "> source" + j));
+	var vs = string.Join(", ", Enumerable.Range(1, i).Select(j => "_observer" + j + ".Value"));
+
+	if (i == 5)
+	{
+#>
+#if !NO_LARGEARITY
+
+<#
+	}
+#>
+	class CombineLatest<<#=ts#>, TResult> : Producer<TResult>
+    {
+<#
+for (var j = 1; j <= i; j++)
+{
+#>
+        private readonly IObservable<T<#=j#>> _source<#=j#>;
+<#
+}
+#>
+        private readonly Func<<#=ts#>, TResult> _resultSelector;
+
+        public CombineLatest(<#=os#>, Func<<#=ts#>, TResult> resultSelector)
+        {
+<#
+for (var j = 1; j <= i; j++)
+{
+#>
+            _source<#=j#> = source<#=j#>;
+<#
+}
+#>
+            _resultSelector = resultSelector;
+        }
+
+        protected override IDisposable Run(IObserver<TResult> observer, IDisposable cancel, Action<IDisposable> setSink)
+        {
+            var sink = new _(this, observer, cancel);
+            setSink(sink);
+            return sink.Run();
+        }
+
+        class _ : CombineLatestSink<TResult>
+        {
+            private readonly CombineLatest<<#=ts#>, TResult> _parent;
+
+            public _(CombineLatest<<#=ts#>, TResult> parent, IObserver<TResult> observer, IDisposable cancel)
+                : base(<#=i#>, observer, cancel)
+            {
+                _parent = parent;
+            }
+
+<#
+for (var j = 1; j <= i; j++)
+{
+#>
+            private CombineLatestObserver<T<#=j#>> _observer<#=j#>;
+<#
+}
+#>
+
+            public IDisposable Run()
+            {
+                var subscriptions = new SingleAssignmentDisposable[<#=i#>];
+                for (int i = 0; i < <#=i#>; i++)
+                    subscriptions[i] = new SingleAssignmentDisposable();
+
+<#
+for (var j = 1; j <= i; j++)
+{
+#>
+				_observer<#=j#> = new CombineLatestObserver<T<#=j#>>(_gate, this, <#=j - 1#>, subscriptions[<#=j - 1#>]);
+<#
+}
+#>
+                
+<#
+for (var j = 1; j <= i; j++)
+{
+#>
+                subscriptions[<#=j - 1#>].Disposable = _parent._source<#=j#>.SubscribeSafe(_observer<#=j#>);
+<#
+}
+#>
+
+                return StableCompositeDisposable.Create(subscriptions);
+            }
+
+            protected override TResult GetResult()
+            {
+                return _parent._resultSelector(<#=vs#>);
+            }
+        }
+    }
+
+<#
+}
+#>
+
+#endif
+
+	#endregion
+
+	#endregion
+}
+#endif

+ 0 - 1305
Rx.NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/CombineLatest.cs

@@ -226,1311 +226,6 @@ namespace System.Reactive.Linq.ObservableImpl
 
     #region [3,16]-ary
 
-    /* The following code is generated by a tool checked in to $/.../Source/Tools/CodeGenerators. */
-
-    #region CombineLatest auto-generated code (6/10/2012 7:22:14 PM)
-
-    class CombineLatest<T1, T2, T3, TResult> : Producer<TResult>
-    {
-        private readonly IObservable<T1> _source1;
-        private readonly IObservable<T2> _source2;
-        private readonly IObservable<T3> _source3;
-        private readonly Func<T1, T2, T3, TResult> _resultSelector;
-
-        public CombineLatest(IObservable<T1> source1, IObservable<T2> source2, IObservable<T3> source3, Func<T1, T2, T3, TResult> resultSelector)
-        {
-            _source1 = source1;
-            _source2 = source2;
-            _source3 = source3;
-            _resultSelector = resultSelector;
-        }
-
-        protected override IDisposable Run(IObserver<TResult> observer, IDisposable cancel, Action<IDisposable> setSink)
-        {
-            var sink = new _(this, observer, cancel);
-            setSink(sink);
-            return sink.Run();
-        }
-
-        class _ : CombineLatestSink<TResult>
-        {
-            private readonly CombineLatest<T1, T2, T3, TResult> _parent;
-
-            public _(CombineLatest<T1, T2, T3, TResult> parent, IObserver<TResult> observer, IDisposable cancel)
-                : base(3, observer, cancel)
-            {
-                _parent = parent;
-            }
-
-            private CombineLatestObserver<T1> _observer1;
-            private CombineLatestObserver<T2> _observer2;
-            private CombineLatestObserver<T3> _observer3;
-
-            public IDisposable Run()
-            {
-                var subscriptions = new SingleAssignmentDisposable[3];
-                for (int i = 0; i < 3; i++)
-                    subscriptions[i] = new SingleAssignmentDisposable();
-
-                _observer1 = new CombineLatestObserver<T1>(_gate, this, 0, subscriptions[0]);
-                _observer2 = new CombineLatestObserver<T2>(_gate, this, 1, subscriptions[1]);
-                _observer3 = new CombineLatestObserver<T3>(_gate, this, 2, subscriptions[2]);
-
-                subscriptions[0].Disposable = _parent._source1.SubscribeSafe(_observer1);
-                subscriptions[1].Disposable = _parent._source2.SubscribeSafe(_observer2);
-                subscriptions[2].Disposable = _parent._source3.SubscribeSafe(_observer3);
-
-                return StableCompositeDisposable.Create(subscriptions);
-            }
-
-            protected override TResult GetResult()
-            {
-                return _parent._resultSelector(_observer1.Value, _observer2.Value, _observer3.Value);
-            }
-        }
-    }
-
-    class CombineLatest<T1, T2, T3, T4, TResult> : Producer<TResult>
-    {
-        private readonly IObservable<T1> _source1;
-        private readonly IObservable<T2> _source2;
-        private readonly IObservable<T3> _source3;
-        private readonly IObservable<T4> _source4;
-        private readonly Func<T1, T2, T3, T4, TResult> _resultSelector;
-
-        public CombineLatest(IObservable<T1> source1, IObservable<T2> source2, IObservable<T3> source3, IObservable<T4> source4, Func<T1, T2, T3, T4, TResult> resultSelector)
-        {
-            _source1 = source1;
-            _source2 = source2;
-            _source3 = source3;
-            _source4 = source4;
-            _resultSelector = resultSelector;
-        }
-
-        protected override IDisposable Run(IObserver<TResult> observer, IDisposable cancel, Action<IDisposable> setSink)
-        {
-            var sink = new _(this, observer, cancel);
-            setSink(sink);
-            return sink.Run();
-        }
-
-        class _ : CombineLatestSink<TResult>
-        {
-            private readonly CombineLatest<T1, T2, T3, T4, TResult> _parent;
-
-            public _(CombineLatest<T1, T2, T3, T4, TResult> parent, IObserver<TResult> observer, IDisposable cancel)
-                : base(4, observer, cancel)
-            {
-                _parent = parent;
-            }
-
-            private CombineLatestObserver<T1> _observer1;
-            private CombineLatestObserver<T2> _observer2;
-            private CombineLatestObserver<T3> _observer3;
-            private CombineLatestObserver<T4> _observer4;
-
-            public IDisposable Run()
-            {
-                var subscriptions = new SingleAssignmentDisposable[4];
-                for (int i = 0; i < 4; i++)
-                    subscriptions[i] = new SingleAssignmentDisposable();
-
-                _observer1 = new CombineLatestObserver<T1>(_gate, this, 0, subscriptions[0]);
-                _observer2 = new CombineLatestObserver<T2>(_gate, this, 1, subscriptions[1]);
-                _observer3 = new CombineLatestObserver<T3>(_gate, this, 2, subscriptions[2]);
-                _observer4 = new CombineLatestObserver<T4>(_gate, this, 3, subscriptions[3]);
-
-                subscriptions[0].Disposable = _parent._source1.SubscribeSafe(_observer1);
-                subscriptions[1].Disposable = _parent._source2.SubscribeSafe(_observer2);
-                subscriptions[2].Disposable = _parent._source3.SubscribeSafe(_observer3);
-                subscriptions[3].Disposable = _parent._source4.SubscribeSafe(_observer4);
-
-                return StableCompositeDisposable.Create(subscriptions);
-            }
-
-            protected override TResult GetResult()
-            {
-                return _parent._resultSelector(_observer1.Value, _observer2.Value, _observer3.Value, _observer4.Value);
-            }
-        }
-    }
-
-#if !NO_LARGEARITY
-
-    class CombineLatest<T1, T2, T3, T4, T5, TResult> : Producer<TResult>
-    {
-        private readonly IObservable<T1> _source1;
-        private readonly IObservable<T2> _source2;
-        private readonly IObservable<T3> _source3;
-        private readonly IObservable<T4> _source4;
-        private readonly IObservable<T5> _source5;
-        private readonly Func<T1, T2, T3, T4, T5, TResult> _resultSelector;
-
-        public CombineLatest(IObservable<T1> source1, IObservable<T2> source2, IObservable<T3> source3, IObservable<T4> source4, IObservable<T5> source5, Func<T1, T2, T3, T4, T5, TResult> resultSelector)
-        {
-            _source1 = source1;
-            _source2 = source2;
-            _source3 = source3;
-            _source4 = source4;
-            _source5 = source5;
-            _resultSelector = resultSelector;
-        }
-
-        protected override IDisposable Run(IObserver<TResult> observer, IDisposable cancel, Action<IDisposable> setSink)
-        {
-            var sink = new _(this, observer, cancel);
-            setSink(sink);
-            return sink.Run();
-        }
-
-        class _ : CombineLatestSink<TResult>
-        {
-            private readonly CombineLatest<T1, T2, T3, T4, T5, TResult> _parent;
-
-            public _(CombineLatest<T1, T2, T3, T4, T5, TResult> parent, IObserver<TResult> observer, IDisposable cancel)
-                : base(5, observer, cancel)
-            {
-                _parent = parent;
-            }
-
-            private CombineLatestObserver<T1> _observer1;
-            private CombineLatestObserver<T2> _observer2;
-            private CombineLatestObserver<T3> _observer3;
-            private CombineLatestObserver<T4> _observer4;
-            private CombineLatestObserver<T5> _observer5;
-
-            public IDisposable Run()
-            {
-                var subscriptions = new SingleAssignmentDisposable[5];
-                for (int i = 0; i < 5; i++)
-                    subscriptions[i] = new SingleAssignmentDisposable();
-
-                _observer1 = new CombineLatestObserver<T1>(_gate, this, 0, subscriptions[0]);
-                _observer2 = new CombineLatestObserver<T2>(_gate, this, 1, subscriptions[1]);
-                _observer3 = new CombineLatestObserver<T3>(_gate, this, 2, subscriptions[2]);
-                _observer4 = new CombineLatestObserver<T4>(_gate, this, 3, subscriptions[3]);
-                _observer5 = new CombineLatestObserver<T5>(_gate, this, 4, subscriptions[4]);
-
-                subscriptions[0].Disposable = _parent._source1.SubscribeSafe(_observer1);
-                subscriptions[1].Disposable = _parent._source2.SubscribeSafe(_observer2);
-                subscriptions[2].Disposable = _parent._source3.SubscribeSafe(_observer3);
-                subscriptions[3].Disposable = _parent._source4.SubscribeSafe(_observer4);
-                subscriptions[4].Disposable = _parent._source5.SubscribeSafe(_observer5);
-
-                return StableCompositeDisposable.Create(subscriptions);
-            }
-
-            protected override TResult GetResult()
-            {
-                return _parent._resultSelector(_observer1.Value, _observer2.Value, _observer3.Value, _observer4.Value, _observer5.Value);
-            }
-        }
-    }
-
-    class CombineLatest<T1, T2, T3, T4, T5, T6, TResult> : Producer<TResult>
-    {
-        private readonly IObservable<T1> _source1;
-        private readonly IObservable<T2> _source2;
-        private readonly IObservable<T3> _source3;
-        private readonly IObservable<T4> _source4;
-        private readonly IObservable<T5> _source5;
-        private readonly IObservable<T6> _source6;
-        private readonly Func<T1, T2, T3, T4, T5, T6, TResult> _resultSelector;
-
-        public CombineLatest(IObservable<T1> source1, IObservable<T2> source2, IObservable<T3> source3, IObservable<T4> source4, IObservable<T5> source5, IObservable<T6> source6, Func<T1, T2, T3, T4, T5, T6, TResult> resultSelector)
-        {
-            _source1 = source1;
-            _source2 = source2;
-            _source3 = source3;
-            _source4 = source4;
-            _source5 = source5;
-            _source6 = source6;
-            _resultSelector = resultSelector;
-        }
-
-        protected override IDisposable Run(IObserver<TResult> observer, IDisposable cancel, Action<IDisposable> setSink)
-        {
-            var sink = new _(this, observer, cancel);
-            setSink(sink);
-            return sink.Run();
-        }
-
-        class _ : CombineLatestSink<TResult>
-        {
-            private readonly CombineLatest<T1, T2, T3, T4, T5, T6, TResult> _parent;
-
-            public _(CombineLatest<T1, T2, T3, T4, T5, T6, TResult> parent, IObserver<TResult> observer, IDisposable cancel)
-                : base(6, observer, cancel)
-            {
-                _parent = parent;
-            }
-
-            private CombineLatestObserver<T1> _observer1;
-            private CombineLatestObserver<T2> _observer2;
-            private CombineLatestObserver<T3> _observer3;
-            private CombineLatestObserver<T4> _observer4;
-            private CombineLatestObserver<T5> _observer5;
-            private CombineLatestObserver<T6> _observer6;
-
-            public IDisposable Run()
-            {
-                var subscriptions = new SingleAssignmentDisposable[6];
-                for (int i = 0; i < 6; i++)
-                    subscriptions[i] = new SingleAssignmentDisposable();
-
-                _observer1 = new CombineLatestObserver<T1>(_gate, this, 0, subscriptions[0]);
-                _observer2 = new CombineLatestObserver<T2>(_gate, this, 1, subscriptions[1]);
-                _observer3 = new CombineLatestObserver<T3>(_gate, this, 2, subscriptions[2]);
-                _observer4 = new CombineLatestObserver<T4>(_gate, this, 3, subscriptions[3]);
-                _observer5 = new CombineLatestObserver<T5>(_gate, this, 4, subscriptions[4]);
-                _observer6 = new CombineLatestObserver<T6>(_gate, this, 5, subscriptions[5]);
-
-                subscriptions[0].Disposable = _parent._source1.SubscribeSafe(_observer1);
-                subscriptions[1].Disposable = _parent._source2.SubscribeSafe(_observer2);
-                subscriptions[2].Disposable = _parent._source3.SubscribeSafe(_observer3);
-                subscriptions[3].Disposable = _parent._source4.SubscribeSafe(_observer4);
-                subscriptions[4].Disposable = _parent._source5.SubscribeSafe(_observer5);
-                subscriptions[5].Disposable = _parent._source6.SubscribeSafe(_observer6);
-
-                return StableCompositeDisposable.Create(subscriptions);
-            }
-
-            protected override TResult GetResult()
-            {
-                return _parent._resultSelector(_observer1.Value, _observer2.Value, _observer3.Value, _observer4.Value, _observer5.Value, _observer6.Value);
-            }
-        }
-    }
-
-    class CombineLatest<T1, T2, T3, T4, T5, T6, T7, TResult> : Producer<TResult>
-    {
-        private readonly IObservable<T1> _source1;
-        private readonly IObservable<T2> _source2;
-        private readonly IObservable<T3> _source3;
-        private readonly IObservable<T4> _source4;
-        private readonly IObservable<T5> _source5;
-        private readonly IObservable<T6> _source6;
-        private readonly IObservable<T7> _source7;
-        private readonly Func<T1, T2, T3, T4, T5, T6, T7, TResult> _resultSelector;
-
-        public CombineLatest(IObservable<T1> source1, IObservable<T2> source2, IObservable<T3> source3, IObservable<T4> source4, IObservable<T5> source5, IObservable<T6> source6, IObservable<T7> source7, Func<T1, T2, T3, T4, T5, T6, T7, TResult> resultSelector)
-        {
-            _source1 = source1;
-            _source2 = source2;
-            _source3 = source3;
-            _source4 = source4;
-            _source5 = source5;
-            _source6 = source6;
-            _source7 = source7;
-            _resultSelector = resultSelector;
-        }
-
-        protected override IDisposable Run(IObserver<TResult> observer, IDisposable cancel, Action<IDisposable> setSink)
-        {
-            var sink = new _(this, observer, cancel);
-            setSink(sink);
-            return sink.Run();
-        }
-
-        class _ : CombineLatestSink<TResult>
-        {
-            private readonly CombineLatest<T1, T2, T3, T4, T5, T6, T7, TResult> _parent;
-
-            public _(CombineLatest<T1, T2, T3, T4, T5, T6, T7, TResult> parent, IObserver<TResult> observer, IDisposable cancel)
-                : base(7, observer, cancel)
-            {
-                _parent = parent;
-            }
-
-            private CombineLatestObserver<T1> _observer1;
-            private CombineLatestObserver<T2> _observer2;
-            private CombineLatestObserver<T3> _observer3;
-            private CombineLatestObserver<T4> _observer4;
-            private CombineLatestObserver<T5> _observer5;
-            private CombineLatestObserver<T6> _observer6;
-            private CombineLatestObserver<T7> _observer7;
-
-            public IDisposable Run()
-            {
-                var subscriptions = new SingleAssignmentDisposable[7];
-                for (int i = 0; i < 7; i++)
-                    subscriptions[i] = new SingleAssignmentDisposable();
-
-                _observer1 = new CombineLatestObserver<T1>(_gate, this, 0, subscriptions[0]);
-                _observer2 = new CombineLatestObserver<T2>(_gate, this, 1, subscriptions[1]);
-                _observer3 = new CombineLatestObserver<T3>(_gate, this, 2, subscriptions[2]);
-                _observer4 = new CombineLatestObserver<T4>(_gate, this, 3, subscriptions[3]);
-                _observer5 = new CombineLatestObserver<T5>(_gate, this, 4, subscriptions[4]);
-                _observer6 = new CombineLatestObserver<T6>(_gate, this, 5, subscriptions[5]);
-                _observer7 = new CombineLatestObserver<T7>(_gate, this, 6, subscriptions[6]);
-
-                subscriptions[0].Disposable = _parent._source1.SubscribeSafe(_observer1);
-                subscriptions[1].Disposable = _parent._source2.SubscribeSafe(_observer2);
-                subscriptions[2].Disposable = _parent._source3.SubscribeSafe(_observer3);
-                subscriptions[3].Disposable = _parent._source4.SubscribeSafe(_observer4);
-                subscriptions[4].Disposable = _parent._source5.SubscribeSafe(_observer5);
-                subscriptions[5].Disposable = _parent._source6.SubscribeSafe(_observer6);
-                subscriptions[6].Disposable = _parent._source7.SubscribeSafe(_observer7);
-
-                return StableCompositeDisposable.Create(subscriptions);
-            }
-
-            protected override TResult GetResult()
-            {
-                return _parent._resultSelector(_observer1.Value, _observer2.Value, _observer3.Value, _observer4.Value, _observer5.Value, _observer6.Value, _observer7.Value);
-            }
-        }
-    }
-
-    class CombineLatest<T1, T2, T3, T4, T5, T6, T7, T8, TResult> : Producer<TResult>
-    {
-        private readonly IObservable<T1> _source1;
-        private readonly IObservable<T2> _source2;
-        private readonly IObservable<T3> _source3;
-        private readonly IObservable<T4> _source4;
-        private readonly IObservable<T5> _source5;
-        private readonly IObservable<T6> _source6;
-        private readonly IObservable<T7> _source7;
-        private readonly IObservable<T8> _source8;
-        private readonly Func<T1, T2, T3, T4, T5, T6, T7, T8, TResult> _resultSelector;
-
-        public CombineLatest(IObservable<T1> source1, IObservable<T2> source2, IObservable<T3> source3, IObservable<T4> source4, IObservable<T5> source5, IObservable<T6> source6, IObservable<T7> source7, IObservable<T8> source8, Func<T1, T2, T3, T4, T5, T6, T7, T8, TResult> resultSelector)
-        {
-            _source1 = source1;
-            _source2 = source2;
-            _source3 = source3;
-            _source4 = source4;
-            _source5 = source5;
-            _source6 = source6;
-            _source7 = source7;
-            _source8 = source8;
-            _resultSelector = resultSelector;
-        }
-
-        protected override IDisposable Run(IObserver<TResult> observer, IDisposable cancel, Action<IDisposable> setSink)
-        {
-            var sink = new _(this, observer, cancel);
-            setSink(sink);
-            return sink.Run();
-        }
-
-        class _ : CombineLatestSink<TResult>
-        {
-            private readonly CombineLatest<T1, T2, T3, T4, T5, T6, T7, T8, TResult> _parent;
-
-            public _(CombineLatest<T1, T2, T3, T4, T5, T6, T7, T8, TResult> parent, IObserver<TResult> observer, IDisposable cancel)
-                : base(8, observer, cancel)
-            {
-                _parent = parent;
-            }
-
-            private CombineLatestObserver<T1> _observer1;
-            private CombineLatestObserver<T2> _observer2;
-            private CombineLatestObserver<T3> _observer3;
-            private CombineLatestObserver<T4> _observer4;
-            private CombineLatestObserver<T5> _observer5;
-            private CombineLatestObserver<T6> _observer6;
-            private CombineLatestObserver<T7> _observer7;
-            private CombineLatestObserver<T8> _observer8;
-
-            public IDisposable Run()
-            {
-                var subscriptions = new SingleAssignmentDisposable[8];
-                for (int i = 0; i < 8; i++)
-                    subscriptions[i] = new SingleAssignmentDisposable();
-
-                _observer1 = new CombineLatestObserver<T1>(_gate, this, 0, subscriptions[0]);
-                _observer2 = new CombineLatestObserver<T2>(_gate, this, 1, subscriptions[1]);
-                _observer3 = new CombineLatestObserver<T3>(_gate, this, 2, subscriptions[2]);
-                _observer4 = new CombineLatestObserver<T4>(_gate, this, 3, subscriptions[3]);
-                _observer5 = new CombineLatestObserver<T5>(_gate, this, 4, subscriptions[4]);
-                _observer6 = new CombineLatestObserver<T6>(_gate, this, 5, subscriptions[5]);
-                _observer7 = new CombineLatestObserver<T7>(_gate, this, 6, subscriptions[6]);
-                _observer8 = new CombineLatestObserver<T8>(_gate, this, 7, subscriptions[7]);
-
-                subscriptions[0].Disposable = _parent._source1.SubscribeSafe(_observer1);
-                subscriptions[1].Disposable = _parent._source2.SubscribeSafe(_observer2);
-                subscriptions[2].Disposable = _parent._source3.SubscribeSafe(_observer3);
-                subscriptions[3].Disposable = _parent._source4.SubscribeSafe(_observer4);
-                subscriptions[4].Disposable = _parent._source5.SubscribeSafe(_observer5);
-                subscriptions[5].Disposable = _parent._source6.SubscribeSafe(_observer6);
-                subscriptions[6].Disposable = _parent._source7.SubscribeSafe(_observer7);
-                subscriptions[7].Disposable = _parent._source8.SubscribeSafe(_observer8);
-
-                return StableCompositeDisposable.Create(subscriptions);
-            }
-
-            protected override TResult GetResult()
-            {
-                return _parent._resultSelector(_observer1.Value, _observer2.Value, _observer3.Value, _observer4.Value, _observer5.Value, _observer6.Value, _observer7.Value, _observer8.Value);
-            }
-        }
-    }
-
-    class CombineLatest<T1, T2, T3, T4, T5, T6, T7, T8, T9, TResult> : Producer<TResult>
-    {
-        private readonly IObservable<T1> _source1;
-        private readonly IObservable<T2> _source2;
-        private readonly IObservable<T3> _source3;
-        private readonly IObservable<T4> _source4;
-        private readonly IObservable<T5> _source5;
-        private readonly IObservable<T6> _source6;
-        private readonly IObservable<T7> _source7;
-        private readonly IObservable<T8> _source8;
-        private readonly IObservable<T9> _source9;
-        private readonly Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, TResult> _resultSelector;
-
-        public CombineLatest(IObservable<T1> source1, IObservable<T2> source2, IObservable<T3> source3, IObservable<T4> source4, IObservable<T5> source5, IObservable<T6> source6, IObservable<T7> source7, IObservable<T8> source8, IObservable<T9> source9, Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, TResult> resultSelector)
-        {
-            _source1 = source1;
-            _source2 = source2;
-            _source3 = source3;
-            _source4 = source4;
-            _source5 = source5;
-            _source6 = source6;
-            _source7 = source7;
-            _source8 = source8;
-            _source9 = source9;
-            _resultSelector = resultSelector;
-        }
-
-        protected override IDisposable Run(IObserver<TResult> observer, IDisposable cancel, Action<IDisposable> setSink)
-        {
-            var sink = new _(this, observer, cancel);
-            setSink(sink);
-            return sink.Run();
-        }
-
-        class _ : CombineLatestSink<TResult>
-        {
-            private readonly CombineLatest<T1, T2, T3, T4, T5, T6, T7, T8, T9, TResult> _parent;
-
-            public _(CombineLatest<T1, T2, T3, T4, T5, T6, T7, T8, T9, TResult> parent, IObserver<TResult> observer, IDisposable cancel)
-                : base(9, observer, cancel)
-            {
-                _parent = parent;
-            }
-
-            private CombineLatestObserver<T1> _observer1;
-            private CombineLatestObserver<T2> _observer2;
-            private CombineLatestObserver<T3> _observer3;
-            private CombineLatestObserver<T4> _observer4;
-            private CombineLatestObserver<T5> _observer5;
-            private CombineLatestObserver<T6> _observer6;
-            private CombineLatestObserver<T7> _observer7;
-            private CombineLatestObserver<T8> _observer8;
-            private CombineLatestObserver<T9> _observer9;
-
-            public IDisposable Run()
-            {
-                var subscriptions = new SingleAssignmentDisposable[9];
-                for (int i = 0; i < 9; i++)
-                    subscriptions[i] = new SingleAssignmentDisposable();
-
-                _observer1 = new CombineLatestObserver<T1>(_gate, this, 0, subscriptions[0]);
-                _observer2 = new CombineLatestObserver<T2>(_gate, this, 1, subscriptions[1]);
-                _observer3 = new CombineLatestObserver<T3>(_gate, this, 2, subscriptions[2]);
-                _observer4 = new CombineLatestObserver<T4>(_gate, this, 3, subscriptions[3]);
-                _observer5 = new CombineLatestObserver<T5>(_gate, this, 4, subscriptions[4]);
-                _observer6 = new CombineLatestObserver<T6>(_gate, this, 5, subscriptions[5]);
-                _observer7 = new CombineLatestObserver<T7>(_gate, this, 6, subscriptions[6]);
-                _observer8 = new CombineLatestObserver<T8>(_gate, this, 7, subscriptions[7]);
-                _observer9 = new CombineLatestObserver<T9>(_gate, this, 8, subscriptions[8]);
-
-                subscriptions[0].Disposable = _parent._source1.SubscribeSafe(_observer1);
-                subscriptions[1].Disposable = _parent._source2.SubscribeSafe(_observer2);
-                subscriptions[2].Disposable = _parent._source3.SubscribeSafe(_observer3);
-                subscriptions[3].Disposable = _parent._source4.SubscribeSafe(_observer4);
-                subscriptions[4].Disposable = _parent._source5.SubscribeSafe(_observer5);
-                subscriptions[5].Disposable = _parent._source6.SubscribeSafe(_observer6);
-                subscriptions[6].Disposable = _parent._source7.SubscribeSafe(_observer7);
-                subscriptions[7].Disposable = _parent._source8.SubscribeSafe(_observer8);
-                subscriptions[8].Disposable = _parent._source9.SubscribeSafe(_observer9);
-
-                return StableCompositeDisposable.Create(subscriptions);
-            }
-
-            protected override TResult GetResult()
-            {
-                return _parent._resultSelector(_observer1.Value, _observer2.Value, _observer3.Value, _observer4.Value, _observer5.Value, _observer6.Value, _observer7.Value, _observer8.Value, _observer9.Value);
-            }
-        }
-    }
-
-    class CombineLatest<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, TResult> : Producer<TResult>
-    {
-        private readonly IObservable<T1> _source1;
-        private readonly IObservable<T2> _source2;
-        private readonly IObservable<T3> _source3;
-        private readonly IObservable<T4> _source4;
-        private readonly IObservable<T5> _source5;
-        private readonly IObservable<T6> _source6;
-        private readonly IObservable<T7> _source7;
-        private readonly IObservable<T8> _source8;
-        private readonly IObservable<T9> _source9;
-        private readonly IObservable<T10> _source10;
-        private readonly Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, TResult> _resultSelector;
-
-        public CombineLatest(IObservable<T1> source1, IObservable<T2> source2, IObservable<T3> source3, IObservable<T4> source4, IObservable<T5> source5, IObservable<T6> source6, IObservable<T7> source7, IObservable<T8> source8, IObservable<T9> source9, IObservable<T10> source10, Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, TResult> resultSelector)
-        {
-            _source1 = source1;
-            _source2 = source2;
-            _source3 = source3;
-            _source4 = source4;
-            _source5 = source5;
-            _source6 = source6;
-            _source7 = source7;
-            _source8 = source8;
-            _source9 = source9;
-            _source10 = source10;
-            _resultSelector = resultSelector;
-        }
-
-        protected override IDisposable Run(IObserver<TResult> observer, IDisposable cancel, Action<IDisposable> setSink)
-        {
-            var sink = new _(this, observer, cancel);
-            setSink(sink);
-            return sink.Run();
-        }
-
-        class _ : CombineLatestSink<TResult>
-        {
-            private readonly CombineLatest<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, TResult> _parent;
-
-            public _(CombineLatest<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, TResult> parent, IObserver<TResult> observer, IDisposable cancel)
-                : base(10, observer, cancel)
-            {
-                _parent = parent;
-            }
-
-            private CombineLatestObserver<T1> _observer1;
-            private CombineLatestObserver<T2> _observer2;
-            private CombineLatestObserver<T3> _observer3;
-            private CombineLatestObserver<T4> _observer4;
-            private CombineLatestObserver<T5> _observer5;
-            private CombineLatestObserver<T6> _observer6;
-            private CombineLatestObserver<T7> _observer7;
-            private CombineLatestObserver<T8> _observer8;
-            private CombineLatestObserver<T9> _observer9;
-            private CombineLatestObserver<T10> _observer10;
-
-            public IDisposable Run()
-            {
-                var subscriptions = new SingleAssignmentDisposable[10];
-                for (int i = 0; i < 10; i++)
-                    subscriptions[i] = new SingleAssignmentDisposable();
-
-                _observer1 = new CombineLatestObserver<T1>(_gate, this, 0, subscriptions[0]);
-                _observer2 = new CombineLatestObserver<T2>(_gate, this, 1, subscriptions[1]);
-                _observer3 = new CombineLatestObserver<T3>(_gate, this, 2, subscriptions[2]);
-                _observer4 = new CombineLatestObserver<T4>(_gate, this, 3, subscriptions[3]);
-                _observer5 = new CombineLatestObserver<T5>(_gate, this, 4, subscriptions[4]);
-                _observer6 = new CombineLatestObserver<T6>(_gate, this, 5, subscriptions[5]);
-                _observer7 = new CombineLatestObserver<T7>(_gate, this, 6, subscriptions[6]);
-                _observer8 = new CombineLatestObserver<T8>(_gate, this, 7, subscriptions[7]);
-                _observer9 = new CombineLatestObserver<T9>(_gate, this, 8, subscriptions[8]);
-                _observer10 = new CombineLatestObserver<T10>(_gate, this, 9, subscriptions[9]);
-
-                subscriptions[0].Disposable = _parent._source1.SubscribeSafe(_observer1);
-                subscriptions[1].Disposable = _parent._source2.SubscribeSafe(_observer2);
-                subscriptions[2].Disposable = _parent._source3.SubscribeSafe(_observer3);
-                subscriptions[3].Disposable = _parent._source4.SubscribeSafe(_observer4);
-                subscriptions[4].Disposable = _parent._source5.SubscribeSafe(_observer5);
-                subscriptions[5].Disposable = _parent._source6.SubscribeSafe(_observer6);
-                subscriptions[6].Disposable = _parent._source7.SubscribeSafe(_observer7);
-                subscriptions[7].Disposable = _parent._source8.SubscribeSafe(_observer8);
-                subscriptions[8].Disposable = _parent._source9.SubscribeSafe(_observer9);
-                subscriptions[9].Disposable = _parent._source10.SubscribeSafe(_observer10);
-
-                return StableCompositeDisposable.Create(subscriptions);
-            }
-
-            protected override TResult GetResult()
-            {
-                return _parent._resultSelector(_observer1.Value, _observer2.Value, _observer3.Value, _observer4.Value, _observer5.Value, _observer6.Value, _observer7.Value, _observer8.Value, _observer9.Value, _observer10.Value);
-            }
-        }
-    }
-
-    class CombineLatest<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, TResult> : Producer<TResult>
-    {
-        private readonly IObservable<T1> _source1;
-        private readonly IObservable<T2> _source2;
-        private readonly IObservable<T3> _source3;
-        private readonly IObservable<T4> _source4;
-        private readonly IObservable<T5> _source5;
-        private readonly IObservable<T6> _source6;
-        private readonly IObservable<T7> _source7;
-        private readonly IObservable<T8> _source8;
-        private readonly IObservable<T9> _source9;
-        private readonly IObservable<T10> _source10;
-        private readonly IObservable<T11> _source11;
-        private readonly Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, TResult> _resultSelector;
-
-        public CombineLatest(IObservable<T1> source1, IObservable<T2> source2, IObservable<T3> source3, IObservable<T4> source4, IObservable<T5> source5, IObservable<T6> source6, IObservable<T7> source7, IObservable<T8> source8, IObservable<T9> source9, IObservable<T10> source10, IObservable<T11> source11, Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, TResult> resultSelector)
-        {
-            _source1 = source1;
-            _source2 = source2;
-            _source3 = source3;
-            _source4 = source4;
-            _source5 = source5;
-            _source6 = source6;
-            _source7 = source7;
-            _source8 = source8;
-            _source9 = source9;
-            _source10 = source10;
-            _source11 = source11;
-            _resultSelector = resultSelector;
-        }
-
-        protected override IDisposable Run(IObserver<TResult> observer, IDisposable cancel, Action<IDisposable> setSink)
-        {
-            var sink = new _(this, observer, cancel);
-            setSink(sink);
-            return sink.Run();
-        }
-
-        class _ : CombineLatestSink<TResult>
-        {
-            private readonly CombineLatest<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, TResult> _parent;
-
-            public _(CombineLatest<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, TResult> parent, IObserver<TResult> observer, IDisposable cancel)
-                : base(11, observer, cancel)
-            {
-                _parent = parent;
-            }
-
-            private CombineLatestObserver<T1> _observer1;
-            private CombineLatestObserver<T2> _observer2;
-            private CombineLatestObserver<T3> _observer3;
-            private CombineLatestObserver<T4> _observer4;
-            private CombineLatestObserver<T5> _observer5;
-            private CombineLatestObserver<T6> _observer6;
-            private CombineLatestObserver<T7> _observer7;
-            private CombineLatestObserver<T8> _observer8;
-            private CombineLatestObserver<T9> _observer9;
-            private CombineLatestObserver<T10> _observer10;
-            private CombineLatestObserver<T11> _observer11;
-
-            public IDisposable Run()
-            {
-                var subscriptions = new SingleAssignmentDisposable[11];
-                for (int i = 0; i < 11; i++)
-                    subscriptions[i] = new SingleAssignmentDisposable();
-
-                _observer1 = new CombineLatestObserver<T1>(_gate, this, 0, subscriptions[0]);
-                _observer2 = new CombineLatestObserver<T2>(_gate, this, 1, subscriptions[1]);
-                _observer3 = new CombineLatestObserver<T3>(_gate, this, 2, subscriptions[2]);
-                _observer4 = new CombineLatestObserver<T4>(_gate, this, 3, subscriptions[3]);
-                _observer5 = new CombineLatestObserver<T5>(_gate, this, 4, subscriptions[4]);
-                _observer6 = new CombineLatestObserver<T6>(_gate, this, 5, subscriptions[5]);
-                _observer7 = new CombineLatestObserver<T7>(_gate, this, 6, subscriptions[6]);
-                _observer8 = new CombineLatestObserver<T8>(_gate, this, 7, subscriptions[7]);
-                _observer9 = new CombineLatestObserver<T9>(_gate, this, 8, subscriptions[8]);
-                _observer10 = new CombineLatestObserver<T10>(_gate, this, 9, subscriptions[9]);
-                _observer11 = new CombineLatestObserver<T11>(_gate, this, 10, subscriptions[10]);
-
-                subscriptions[0].Disposable = _parent._source1.SubscribeSafe(_observer1);
-                subscriptions[1].Disposable = _parent._source2.SubscribeSafe(_observer2);
-                subscriptions[2].Disposable = _parent._source3.SubscribeSafe(_observer3);
-                subscriptions[3].Disposable = _parent._source4.SubscribeSafe(_observer4);
-                subscriptions[4].Disposable = _parent._source5.SubscribeSafe(_observer5);
-                subscriptions[5].Disposable = _parent._source6.SubscribeSafe(_observer6);
-                subscriptions[6].Disposable = _parent._source7.SubscribeSafe(_observer7);
-                subscriptions[7].Disposable = _parent._source8.SubscribeSafe(_observer8);
-                subscriptions[8].Disposable = _parent._source9.SubscribeSafe(_observer9);
-                subscriptions[9].Disposable = _parent._source10.SubscribeSafe(_observer10);
-                subscriptions[10].Disposable = _parent._source11.SubscribeSafe(_observer11);
-
-                return StableCompositeDisposable.Create(subscriptions);
-            }
-
-            protected override TResult GetResult()
-            {
-                return _parent._resultSelector(_observer1.Value, _observer2.Value, _observer3.Value, _observer4.Value, _observer5.Value, _observer6.Value, _observer7.Value, _observer8.Value, _observer9.Value, _observer10.Value, _observer11.Value);
-            }
-        }
-    }
-
-    class CombineLatest<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, TResult> : Producer<TResult>
-    {
-        private readonly IObservable<T1> _source1;
-        private readonly IObservable<T2> _source2;
-        private readonly IObservable<T3> _source3;
-        private readonly IObservable<T4> _source4;
-        private readonly IObservable<T5> _source5;
-        private readonly IObservable<T6> _source6;
-        private readonly IObservable<T7> _source7;
-        private readonly IObservable<T8> _source8;
-        private readonly IObservable<T9> _source9;
-        private readonly IObservable<T10> _source10;
-        private readonly IObservable<T11> _source11;
-        private readonly IObservable<T12> _source12;
-        private readonly Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, TResult> _resultSelector;
-
-        public CombineLatest(IObservable<T1> source1, IObservable<T2> source2, IObservable<T3> source3, IObservable<T4> source4, IObservable<T5> source5, IObservable<T6> source6, IObservable<T7> source7, IObservable<T8> source8, IObservable<T9> source9, IObservable<T10> source10, IObservable<T11> source11, IObservable<T12> source12, Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, TResult> resultSelector)
-        {
-            _source1 = source1;
-            _source2 = source2;
-            _source3 = source3;
-            _source4 = source4;
-            _source5 = source5;
-            _source6 = source6;
-            _source7 = source7;
-            _source8 = source8;
-            _source9 = source9;
-            _source10 = source10;
-            _source11 = source11;
-            _source12 = source12;
-            _resultSelector = resultSelector;
-        }
-
-        protected override IDisposable Run(IObserver<TResult> observer, IDisposable cancel, Action<IDisposable> setSink)
-        {
-            var sink = new _(this, observer, cancel);
-            setSink(sink);
-            return sink.Run();
-        }
-
-        class _ : CombineLatestSink<TResult>
-        {
-            private readonly CombineLatest<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, TResult> _parent;
-
-            public _(CombineLatest<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, TResult> parent, IObserver<TResult> observer, IDisposable cancel)
-                : base(12, observer, cancel)
-            {
-                _parent = parent;
-            }
-
-            private CombineLatestObserver<T1> _observer1;
-            private CombineLatestObserver<T2> _observer2;
-            private CombineLatestObserver<T3> _observer3;
-            private CombineLatestObserver<T4> _observer4;
-            private CombineLatestObserver<T5> _observer5;
-            private CombineLatestObserver<T6> _observer6;
-            private CombineLatestObserver<T7> _observer7;
-            private CombineLatestObserver<T8> _observer8;
-            private CombineLatestObserver<T9> _observer9;
-            private CombineLatestObserver<T10> _observer10;
-            private CombineLatestObserver<T11> _observer11;
-            private CombineLatestObserver<T12> _observer12;
-
-            public IDisposable Run()
-            {
-                var subscriptions = new SingleAssignmentDisposable[12];
-                for (int i = 0; i < 12; i++)
-                    subscriptions[i] = new SingleAssignmentDisposable();
-
-                _observer1 = new CombineLatestObserver<T1>(_gate, this, 0, subscriptions[0]);
-                _observer2 = new CombineLatestObserver<T2>(_gate, this, 1, subscriptions[1]);
-                _observer3 = new CombineLatestObserver<T3>(_gate, this, 2, subscriptions[2]);
-                _observer4 = new CombineLatestObserver<T4>(_gate, this, 3, subscriptions[3]);
-                _observer5 = new CombineLatestObserver<T5>(_gate, this, 4, subscriptions[4]);
-                _observer6 = new CombineLatestObserver<T6>(_gate, this, 5, subscriptions[5]);
-                _observer7 = new CombineLatestObserver<T7>(_gate, this, 6, subscriptions[6]);
-                _observer8 = new CombineLatestObserver<T8>(_gate, this, 7, subscriptions[7]);
-                _observer9 = new CombineLatestObserver<T9>(_gate, this, 8, subscriptions[8]);
-                _observer10 = new CombineLatestObserver<T10>(_gate, this, 9, subscriptions[9]);
-                _observer11 = new CombineLatestObserver<T11>(_gate, this, 10, subscriptions[10]);
-                _observer12 = new CombineLatestObserver<T12>(_gate, this, 11, subscriptions[11]);
-
-                subscriptions[0].Disposable = _parent._source1.SubscribeSafe(_observer1);
-                subscriptions[1].Disposable = _parent._source2.SubscribeSafe(_observer2);
-                subscriptions[2].Disposable = _parent._source3.SubscribeSafe(_observer3);
-                subscriptions[3].Disposable = _parent._source4.SubscribeSafe(_observer4);
-                subscriptions[4].Disposable = _parent._source5.SubscribeSafe(_observer5);
-                subscriptions[5].Disposable = _parent._source6.SubscribeSafe(_observer6);
-                subscriptions[6].Disposable = _parent._source7.SubscribeSafe(_observer7);
-                subscriptions[7].Disposable = _parent._source8.SubscribeSafe(_observer8);
-                subscriptions[8].Disposable = _parent._source9.SubscribeSafe(_observer9);
-                subscriptions[9].Disposable = _parent._source10.SubscribeSafe(_observer10);
-                subscriptions[10].Disposable = _parent._source11.SubscribeSafe(_observer11);
-                subscriptions[11].Disposable = _parent._source12.SubscribeSafe(_observer12);
-
-                return StableCompositeDisposable.Create(subscriptions);
-            }
-
-            protected override TResult GetResult()
-            {
-                return _parent._resultSelector(_observer1.Value, _observer2.Value, _observer3.Value, _observer4.Value, _observer5.Value, _observer6.Value, _observer7.Value, _observer8.Value, _observer9.Value, _observer10.Value, _observer11.Value, _observer12.Value);
-            }
-        }
-    }
-
-    class CombineLatest<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, TResult> : Producer<TResult>
-    {
-        private readonly IObservable<T1> _source1;
-        private readonly IObservable<T2> _source2;
-        private readonly IObservable<T3> _source3;
-        private readonly IObservable<T4> _source4;
-        private readonly IObservable<T5> _source5;
-        private readonly IObservable<T6> _source6;
-        private readonly IObservable<T7> _source7;
-        private readonly IObservable<T8> _source8;
-        private readonly IObservable<T9> _source9;
-        private readonly IObservable<T10> _source10;
-        private readonly IObservable<T11> _source11;
-        private readonly IObservable<T12> _source12;
-        private readonly IObservable<T13> _source13;
-        private readonly Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, TResult> _resultSelector;
-
-        public CombineLatest(IObservable<T1> source1, IObservable<T2> source2, IObservable<T3> source3, IObservable<T4> source4, IObservable<T5> source5, IObservable<T6> source6, IObservable<T7> source7, IObservable<T8> source8, IObservable<T9> source9, IObservable<T10> source10, IObservable<T11> source11, IObservable<T12> source12, IObservable<T13> source13, Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, TResult> resultSelector)
-        {
-            _source1 = source1;
-            _source2 = source2;
-            _source3 = source3;
-            _source4 = source4;
-            _source5 = source5;
-            _source6 = source6;
-            _source7 = source7;
-            _source8 = source8;
-            _source9 = source9;
-            _source10 = source10;
-            _source11 = source11;
-            _source12 = source12;
-            _source13 = source13;
-            _resultSelector = resultSelector;
-        }
-
-        protected override IDisposable Run(IObserver<TResult> observer, IDisposable cancel, Action<IDisposable> setSink)
-        {
-            var sink = new _(this, observer, cancel);
-            setSink(sink);
-            return sink.Run();
-        }
-
-        class _ : CombineLatestSink<TResult>
-        {
-            private readonly CombineLatest<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, TResult> _parent;
-
-            public _(CombineLatest<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, TResult> parent, IObserver<TResult> observer, IDisposable cancel)
-                : base(13, observer, cancel)
-            {
-                _parent = parent;
-            }
-
-            private CombineLatestObserver<T1> _observer1;
-            private CombineLatestObserver<T2> _observer2;
-            private CombineLatestObserver<T3> _observer3;
-            private CombineLatestObserver<T4> _observer4;
-            private CombineLatestObserver<T5> _observer5;
-            private CombineLatestObserver<T6> _observer6;
-            private CombineLatestObserver<T7> _observer7;
-            private CombineLatestObserver<T8> _observer8;
-            private CombineLatestObserver<T9> _observer9;
-            private CombineLatestObserver<T10> _observer10;
-            private CombineLatestObserver<T11> _observer11;
-            private CombineLatestObserver<T12> _observer12;
-            private CombineLatestObserver<T13> _observer13;
-
-            public IDisposable Run()
-            {
-                var subscriptions = new SingleAssignmentDisposable[13];
-                for (int i = 0; i < 13; i++)
-                    subscriptions[i] = new SingleAssignmentDisposable();
-
-                _observer1 = new CombineLatestObserver<T1>(_gate, this, 0, subscriptions[0]);
-                _observer2 = new CombineLatestObserver<T2>(_gate, this, 1, subscriptions[1]);
-                _observer3 = new CombineLatestObserver<T3>(_gate, this, 2, subscriptions[2]);
-                _observer4 = new CombineLatestObserver<T4>(_gate, this, 3, subscriptions[3]);
-                _observer5 = new CombineLatestObserver<T5>(_gate, this, 4, subscriptions[4]);
-                _observer6 = new CombineLatestObserver<T6>(_gate, this, 5, subscriptions[5]);
-                _observer7 = new CombineLatestObserver<T7>(_gate, this, 6, subscriptions[6]);
-                _observer8 = new CombineLatestObserver<T8>(_gate, this, 7, subscriptions[7]);
-                _observer9 = new CombineLatestObserver<T9>(_gate, this, 8, subscriptions[8]);
-                _observer10 = new CombineLatestObserver<T10>(_gate, this, 9, subscriptions[9]);
-                _observer11 = new CombineLatestObserver<T11>(_gate, this, 10, subscriptions[10]);
-                _observer12 = new CombineLatestObserver<T12>(_gate, this, 11, subscriptions[11]);
-                _observer13 = new CombineLatestObserver<T13>(_gate, this, 12, subscriptions[12]);
-
-                subscriptions[0].Disposable = _parent._source1.SubscribeSafe(_observer1);
-                subscriptions[1].Disposable = _parent._source2.SubscribeSafe(_observer2);
-                subscriptions[2].Disposable = _parent._source3.SubscribeSafe(_observer3);
-                subscriptions[3].Disposable = _parent._source4.SubscribeSafe(_observer4);
-                subscriptions[4].Disposable = _parent._source5.SubscribeSafe(_observer5);
-                subscriptions[5].Disposable = _parent._source6.SubscribeSafe(_observer6);
-                subscriptions[6].Disposable = _parent._source7.SubscribeSafe(_observer7);
-                subscriptions[7].Disposable = _parent._source8.SubscribeSafe(_observer8);
-                subscriptions[8].Disposable = _parent._source9.SubscribeSafe(_observer9);
-                subscriptions[9].Disposable = _parent._source10.SubscribeSafe(_observer10);
-                subscriptions[10].Disposable = _parent._source11.SubscribeSafe(_observer11);
-                subscriptions[11].Disposable = _parent._source12.SubscribeSafe(_observer12);
-                subscriptions[12].Disposable = _parent._source13.SubscribeSafe(_observer13);
-
-                return StableCompositeDisposable.Create(subscriptions);
-            }
-
-            protected override TResult GetResult()
-            {
-                return _parent._resultSelector(_observer1.Value, _observer2.Value, _observer3.Value, _observer4.Value, _observer5.Value, _observer6.Value, _observer7.Value, _observer8.Value, _observer9.Value, _observer10.Value, _observer11.Value, _observer12.Value, _observer13.Value);
-            }
-        }
-    }
-
-    class CombineLatest<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, TResult> : Producer<TResult>
-    {
-        private readonly IObservable<T1> _source1;
-        private readonly IObservable<T2> _source2;
-        private readonly IObservable<T3> _source3;
-        private readonly IObservable<T4> _source4;
-        private readonly IObservable<T5> _source5;
-        private readonly IObservable<T6> _source6;
-        private readonly IObservable<T7> _source7;
-        private readonly IObservable<T8> _source8;
-        private readonly IObservable<T9> _source9;
-        private readonly IObservable<T10> _source10;
-        private readonly IObservable<T11> _source11;
-        private readonly IObservable<T12> _source12;
-        private readonly IObservable<T13> _source13;
-        private readonly IObservable<T14> _source14;
-        private readonly Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, TResult> _resultSelector;
-
-        public CombineLatest(IObservable<T1> source1, IObservable<T2> source2, IObservable<T3> source3, IObservable<T4> source4, IObservable<T5> source5, IObservable<T6> source6, IObservable<T7> source7, IObservable<T8> source8, IObservable<T9> source9, IObservable<T10> source10, IObservable<T11> source11, IObservable<T12> source12, IObservable<T13> source13, IObservable<T14> source14, Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, TResult> resultSelector)
-        {
-            _source1 = source1;
-            _source2 = source2;
-            _source3 = source3;
-            _source4 = source4;
-            _source5 = source5;
-            _source6 = source6;
-            _source7 = source7;
-            _source8 = source8;
-            _source9 = source9;
-            _source10 = source10;
-            _source11 = source11;
-            _source12 = source12;
-            _source13 = source13;
-            _source14 = source14;
-            _resultSelector = resultSelector;
-        }
-
-        protected override IDisposable Run(IObserver<TResult> observer, IDisposable cancel, Action<IDisposable> setSink)
-        {
-            var sink = new _(this, observer, cancel);
-            setSink(sink);
-            return sink.Run();
-        }
-
-        class _ : CombineLatestSink<TResult>
-        {
-            private readonly CombineLatest<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, TResult> _parent;
-
-            public _(CombineLatest<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, TResult> parent, IObserver<TResult> observer, IDisposable cancel)
-                : base(14, observer, cancel)
-            {
-                _parent = parent;
-            }
-
-            private CombineLatestObserver<T1> _observer1;
-            private CombineLatestObserver<T2> _observer2;
-            private CombineLatestObserver<T3> _observer3;
-            private CombineLatestObserver<T4> _observer4;
-            private CombineLatestObserver<T5> _observer5;
-            private CombineLatestObserver<T6> _observer6;
-            private CombineLatestObserver<T7> _observer7;
-            private CombineLatestObserver<T8> _observer8;
-            private CombineLatestObserver<T9> _observer9;
-            private CombineLatestObserver<T10> _observer10;
-            private CombineLatestObserver<T11> _observer11;
-            private CombineLatestObserver<T12> _observer12;
-            private CombineLatestObserver<T13> _observer13;
-            private CombineLatestObserver<T14> _observer14;
-
-            public IDisposable Run()
-            {
-                var subscriptions = new SingleAssignmentDisposable[14];
-                for (int i = 0; i < 14; i++)
-                    subscriptions[i] = new SingleAssignmentDisposable();
-
-                _observer1 = new CombineLatestObserver<T1>(_gate, this, 0, subscriptions[0]);
-                _observer2 = new CombineLatestObserver<T2>(_gate, this, 1, subscriptions[1]);
-                _observer3 = new CombineLatestObserver<T3>(_gate, this, 2, subscriptions[2]);
-                _observer4 = new CombineLatestObserver<T4>(_gate, this, 3, subscriptions[3]);
-                _observer5 = new CombineLatestObserver<T5>(_gate, this, 4, subscriptions[4]);
-                _observer6 = new CombineLatestObserver<T6>(_gate, this, 5, subscriptions[5]);
-                _observer7 = new CombineLatestObserver<T7>(_gate, this, 6, subscriptions[6]);
-                _observer8 = new CombineLatestObserver<T8>(_gate, this, 7, subscriptions[7]);
-                _observer9 = new CombineLatestObserver<T9>(_gate, this, 8, subscriptions[8]);
-                _observer10 = new CombineLatestObserver<T10>(_gate, this, 9, subscriptions[9]);
-                _observer11 = new CombineLatestObserver<T11>(_gate, this, 10, subscriptions[10]);
-                _observer12 = new CombineLatestObserver<T12>(_gate, this, 11, subscriptions[11]);
-                _observer13 = new CombineLatestObserver<T13>(_gate, this, 12, subscriptions[12]);
-                _observer14 = new CombineLatestObserver<T14>(_gate, this, 13, subscriptions[13]);
-
-                subscriptions[0].Disposable = _parent._source1.SubscribeSafe(_observer1);
-                subscriptions[1].Disposable = _parent._source2.SubscribeSafe(_observer2);
-                subscriptions[2].Disposable = _parent._source3.SubscribeSafe(_observer3);
-                subscriptions[3].Disposable = _parent._source4.SubscribeSafe(_observer4);
-                subscriptions[4].Disposable = _parent._source5.SubscribeSafe(_observer5);
-                subscriptions[5].Disposable = _parent._source6.SubscribeSafe(_observer6);
-                subscriptions[6].Disposable = _parent._source7.SubscribeSafe(_observer7);
-                subscriptions[7].Disposable = _parent._source8.SubscribeSafe(_observer8);
-                subscriptions[8].Disposable = _parent._source9.SubscribeSafe(_observer9);
-                subscriptions[9].Disposable = _parent._source10.SubscribeSafe(_observer10);
-                subscriptions[10].Disposable = _parent._source11.SubscribeSafe(_observer11);
-                subscriptions[11].Disposable = _parent._source12.SubscribeSafe(_observer12);
-                subscriptions[12].Disposable = _parent._source13.SubscribeSafe(_observer13);
-                subscriptions[13].Disposable = _parent._source14.SubscribeSafe(_observer14);
-
-                return StableCompositeDisposable.Create(subscriptions);
-            }
-
-            protected override TResult GetResult()
-            {
-                return _parent._resultSelector(_observer1.Value, _observer2.Value, _observer3.Value, _observer4.Value, _observer5.Value, _observer6.Value, _observer7.Value, _observer8.Value, _observer9.Value, _observer10.Value, _observer11.Value, _observer12.Value, _observer13.Value, _observer14.Value);
-            }
-        }
-    }
-
-    class CombineLatest<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, TResult> : Producer<TResult>
-    {
-        private readonly IObservable<T1> _source1;
-        private readonly IObservable<T2> _source2;
-        private readonly IObservable<T3> _source3;
-        private readonly IObservable<T4> _source4;
-        private readonly IObservable<T5> _source5;
-        private readonly IObservable<T6> _source6;
-        private readonly IObservable<T7> _source7;
-        private readonly IObservable<T8> _source8;
-        private readonly IObservable<T9> _source9;
-        private readonly IObservable<T10> _source10;
-        private readonly IObservable<T11> _source11;
-        private readonly IObservable<T12> _source12;
-        private readonly IObservable<T13> _source13;
-        private readonly IObservable<T14> _source14;
-        private readonly IObservable<T15> _source15;
-        private readonly Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, TResult> _resultSelector;
-
-        public CombineLatest(IObservable<T1> source1, IObservable<T2> source2, IObservable<T3> source3, IObservable<T4> source4, IObservable<T5> source5, IObservable<T6> source6, IObservable<T7> source7, IObservable<T8> source8, IObservable<T9> source9, IObservable<T10> source10, IObservable<T11> source11, IObservable<T12> source12, IObservable<T13> source13, IObservable<T14> source14, IObservable<T15> source15, Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, TResult> resultSelector)
-        {
-            _source1 = source1;
-            _source2 = source2;
-            _source3 = source3;
-            _source4 = source4;
-            _source5 = source5;
-            _source6 = source6;
-            _source7 = source7;
-            _source8 = source8;
-            _source9 = source9;
-            _source10 = source10;
-            _source11 = source11;
-            _source12 = source12;
-            _source13 = source13;
-            _source14 = source14;
-            _source15 = source15;
-            _resultSelector = resultSelector;
-        }
-
-        protected override IDisposable Run(IObserver<TResult> observer, IDisposable cancel, Action<IDisposable> setSink)
-        {
-            var sink = new _(this, observer, cancel);
-            setSink(sink);
-            return sink.Run();
-        }
-
-        class _ : CombineLatestSink<TResult>
-        {
-            private readonly CombineLatest<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, TResult> _parent;
-
-            public _(CombineLatest<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, TResult> parent, IObserver<TResult> observer, IDisposable cancel)
-                : base(15, observer, cancel)
-            {
-                _parent = parent;
-            }
-
-            private CombineLatestObserver<T1> _observer1;
-            private CombineLatestObserver<T2> _observer2;
-            private CombineLatestObserver<T3> _observer3;
-            private CombineLatestObserver<T4> _observer4;
-            private CombineLatestObserver<T5> _observer5;
-            private CombineLatestObserver<T6> _observer6;
-            private CombineLatestObserver<T7> _observer7;
-            private CombineLatestObserver<T8> _observer8;
-            private CombineLatestObserver<T9> _observer9;
-            private CombineLatestObserver<T10> _observer10;
-            private CombineLatestObserver<T11> _observer11;
-            private CombineLatestObserver<T12> _observer12;
-            private CombineLatestObserver<T13> _observer13;
-            private CombineLatestObserver<T14> _observer14;
-            private CombineLatestObserver<T15> _observer15;
-
-            public IDisposable Run()
-            {
-                var subscriptions = new SingleAssignmentDisposable[15];
-                for (int i = 0; i < 15; i++)
-                    subscriptions[i] = new SingleAssignmentDisposable();
-
-                _observer1 = new CombineLatestObserver<T1>(_gate, this, 0, subscriptions[0]);
-                _observer2 = new CombineLatestObserver<T2>(_gate, this, 1, subscriptions[1]);
-                _observer3 = new CombineLatestObserver<T3>(_gate, this, 2, subscriptions[2]);
-                _observer4 = new CombineLatestObserver<T4>(_gate, this, 3, subscriptions[3]);
-                _observer5 = new CombineLatestObserver<T5>(_gate, this, 4, subscriptions[4]);
-                _observer6 = new CombineLatestObserver<T6>(_gate, this, 5, subscriptions[5]);
-                _observer7 = new CombineLatestObserver<T7>(_gate, this, 6, subscriptions[6]);
-                _observer8 = new CombineLatestObserver<T8>(_gate, this, 7, subscriptions[7]);
-                _observer9 = new CombineLatestObserver<T9>(_gate, this, 8, subscriptions[8]);
-                _observer10 = new CombineLatestObserver<T10>(_gate, this, 9, subscriptions[9]);
-                _observer11 = new CombineLatestObserver<T11>(_gate, this, 10, subscriptions[10]);
-                _observer12 = new CombineLatestObserver<T12>(_gate, this, 11, subscriptions[11]);
-                _observer13 = new CombineLatestObserver<T13>(_gate, this, 12, subscriptions[12]);
-                _observer14 = new CombineLatestObserver<T14>(_gate, this, 13, subscriptions[13]);
-                _observer15 = new CombineLatestObserver<T15>(_gate, this, 14, subscriptions[14]);
-
-                subscriptions[0].Disposable = _parent._source1.SubscribeSafe(_observer1);
-                subscriptions[1].Disposable = _parent._source2.SubscribeSafe(_observer2);
-                subscriptions[2].Disposable = _parent._source3.SubscribeSafe(_observer3);
-                subscriptions[3].Disposable = _parent._source4.SubscribeSafe(_observer4);
-                subscriptions[4].Disposable = _parent._source5.SubscribeSafe(_observer5);
-                subscriptions[5].Disposable = _parent._source6.SubscribeSafe(_observer6);
-                subscriptions[6].Disposable = _parent._source7.SubscribeSafe(_observer7);
-                subscriptions[7].Disposable = _parent._source8.SubscribeSafe(_observer8);
-                subscriptions[8].Disposable = _parent._source9.SubscribeSafe(_observer9);
-                subscriptions[9].Disposable = _parent._source10.SubscribeSafe(_observer10);
-                subscriptions[10].Disposable = _parent._source11.SubscribeSafe(_observer11);
-                subscriptions[11].Disposable = _parent._source12.SubscribeSafe(_observer12);
-                subscriptions[12].Disposable = _parent._source13.SubscribeSafe(_observer13);
-                subscriptions[13].Disposable = _parent._source14.SubscribeSafe(_observer14);
-                subscriptions[14].Disposable = _parent._source15.SubscribeSafe(_observer15);
-
-                return StableCompositeDisposable.Create(subscriptions);
-            }
-
-            protected override TResult GetResult()
-            {
-                return _parent._resultSelector(_observer1.Value, _observer2.Value, _observer3.Value, _observer4.Value, _observer5.Value, _observer6.Value, _observer7.Value, _observer8.Value, _observer9.Value, _observer10.Value, _observer11.Value, _observer12.Value, _observer13.Value, _observer14.Value, _observer15.Value);
-            }
-        }
-    }
-
-    class CombineLatest<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, TResult> : Producer<TResult>
-    {
-        private readonly IObservable<T1> _source1;
-        private readonly IObservable<T2> _source2;
-        private readonly IObservable<T3> _source3;
-        private readonly IObservable<T4> _source4;
-        private readonly IObservable<T5> _source5;
-        private readonly IObservable<T6> _source6;
-        private readonly IObservable<T7> _source7;
-        private readonly IObservable<T8> _source8;
-        private readonly IObservable<T9> _source9;
-        private readonly IObservable<T10> _source10;
-        private readonly IObservable<T11> _source11;
-        private readonly IObservable<T12> _source12;
-        private readonly IObservable<T13> _source13;
-        private readonly IObservable<T14> _source14;
-        private readonly IObservable<T15> _source15;
-        private readonly IObservable<T16> _source16;
-        private readonly Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, TResult> _resultSelector;
-
-        public CombineLatest(IObservable<T1> source1, IObservable<T2> source2, IObservable<T3> source3, IObservable<T4> source4, IObservable<T5> source5, IObservable<T6> source6, IObservable<T7> source7, IObservable<T8> source8, IObservable<T9> source9, IObservable<T10> source10, IObservable<T11> source11, IObservable<T12> source12, IObservable<T13> source13, IObservable<T14> source14, IObservable<T15> source15, IObservable<T16> source16, Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, TResult> resultSelector)
-        {
-            _source1 = source1;
-            _source2 = source2;
-            _source3 = source3;
-            _source4 = source4;
-            _source5 = source5;
-            _source6 = source6;
-            _source7 = source7;
-            _source8 = source8;
-            _source9 = source9;
-            _source10 = source10;
-            _source11 = source11;
-            _source12 = source12;
-            _source13 = source13;
-            _source14 = source14;
-            _source15 = source15;
-            _source16 = source16;
-            _resultSelector = resultSelector;
-        }
-
-        protected override IDisposable Run(IObserver<TResult> observer, IDisposable cancel, Action<IDisposable> setSink)
-        {
-            var sink = new _(this, observer, cancel);
-            setSink(sink);
-            return sink.Run();
-        }
-
-        class _ : CombineLatestSink<TResult>
-        {
-            private readonly CombineLatest<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, TResult> _parent;
-
-            public _(CombineLatest<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, TResult> parent, IObserver<TResult> observer, IDisposable cancel)
-                : base(16, observer, cancel)
-            {
-                _parent = parent;
-            }
-
-            private CombineLatestObserver<T1> _observer1;
-            private CombineLatestObserver<T2> _observer2;
-            private CombineLatestObserver<T3> _observer3;
-            private CombineLatestObserver<T4> _observer4;
-            private CombineLatestObserver<T5> _observer5;
-            private CombineLatestObserver<T6> _observer6;
-            private CombineLatestObserver<T7> _observer7;
-            private CombineLatestObserver<T8> _observer8;
-            private CombineLatestObserver<T9> _observer9;
-            private CombineLatestObserver<T10> _observer10;
-            private CombineLatestObserver<T11> _observer11;
-            private CombineLatestObserver<T12> _observer12;
-            private CombineLatestObserver<T13> _observer13;
-            private CombineLatestObserver<T14> _observer14;
-            private CombineLatestObserver<T15> _observer15;
-            private CombineLatestObserver<T16> _observer16;
-
-            public IDisposable Run()
-            {
-                var subscriptions = new SingleAssignmentDisposable[16];
-                for (int i = 0; i < 16; i++)
-                    subscriptions[i] = new SingleAssignmentDisposable();
-
-                _observer1 = new CombineLatestObserver<T1>(_gate, this, 0, subscriptions[0]);
-                _observer2 = new CombineLatestObserver<T2>(_gate, this, 1, subscriptions[1]);
-                _observer3 = new CombineLatestObserver<T3>(_gate, this, 2, subscriptions[2]);
-                _observer4 = new CombineLatestObserver<T4>(_gate, this, 3, subscriptions[3]);
-                _observer5 = new CombineLatestObserver<T5>(_gate, this, 4, subscriptions[4]);
-                _observer6 = new CombineLatestObserver<T6>(_gate, this, 5, subscriptions[5]);
-                _observer7 = new CombineLatestObserver<T7>(_gate, this, 6, subscriptions[6]);
-                _observer8 = new CombineLatestObserver<T8>(_gate, this, 7, subscriptions[7]);
-                _observer9 = new CombineLatestObserver<T9>(_gate, this, 8, subscriptions[8]);
-                _observer10 = new CombineLatestObserver<T10>(_gate, this, 9, subscriptions[9]);
-                _observer11 = new CombineLatestObserver<T11>(_gate, this, 10, subscriptions[10]);
-                _observer12 = new CombineLatestObserver<T12>(_gate, this, 11, subscriptions[11]);
-                _observer13 = new CombineLatestObserver<T13>(_gate, this, 12, subscriptions[12]);
-                _observer14 = new CombineLatestObserver<T14>(_gate, this, 13, subscriptions[13]);
-                _observer15 = new CombineLatestObserver<T15>(_gate, this, 14, subscriptions[14]);
-                _observer16 = new CombineLatestObserver<T16>(_gate, this, 15, subscriptions[15]);
-
-                subscriptions[0].Disposable = _parent._source1.SubscribeSafe(_observer1);
-                subscriptions[1].Disposable = _parent._source2.SubscribeSafe(_observer2);
-                subscriptions[2].Disposable = _parent._source3.SubscribeSafe(_observer3);
-                subscriptions[3].Disposable = _parent._source4.SubscribeSafe(_observer4);
-                subscriptions[4].Disposable = _parent._source5.SubscribeSafe(_observer5);
-                subscriptions[5].Disposable = _parent._source6.SubscribeSafe(_observer6);
-                subscriptions[6].Disposable = _parent._source7.SubscribeSafe(_observer7);
-                subscriptions[7].Disposable = _parent._source8.SubscribeSafe(_observer8);
-                subscriptions[8].Disposable = _parent._source9.SubscribeSafe(_observer9);
-                subscriptions[9].Disposable = _parent._source10.SubscribeSafe(_observer10);
-                subscriptions[10].Disposable = _parent._source11.SubscribeSafe(_observer11);
-                subscriptions[11].Disposable = _parent._source12.SubscribeSafe(_observer12);
-                subscriptions[12].Disposable = _parent._source13.SubscribeSafe(_observer13);
-                subscriptions[13].Disposable = _parent._source14.SubscribeSafe(_observer14);
-                subscriptions[14].Disposable = _parent._source15.SubscribeSafe(_observer15);
-                subscriptions[15].Disposable = _parent._source16.SubscribeSafe(_observer16);
-
-                return StableCompositeDisposable.Create(subscriptions);
-            }
-
-            protected override TResult GetResult()
-            {
-                return _parent._resultSelector(_observer1.Value, _observer2.Value, _observer3.Value, _observer4.Value, _observer5.Value, _observer6.Value, _observer7.Value, _observer8.Value, _observer9.Value, _observer10.Value, _observer11.Value, _observer12.Value, _observer13.Value, _observer14.Value, _observer15.Value, _observer16.Value);
-            }
-        }
-    }
-
-#endif
-
-    #endregion
-
     #region Helpers for n-ary overloads
 
     interface ICombineLatest

+ 2001 - 0
Rx.NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Zip.Generated.cs

@@ -0,0 +1,2001 @@
+// Copyright (c) Microsoft Open Technologies, Inc. All rights reserved. See License.txt in the project root for license information.
+
+#if !NO_PERF
+using System;
+using System.Collections.Generic;
+using System.Collections.ObjectModel;
+using System.Linq;
+using System.Reactive.Disposables;
+
+namespace System.Reactive.Linq.ObservableImpl
+{
+	#region [3,16]-ary
+
+    /* The following code is generated by a T4 template. */
+
+    #region CombineLatest auto-generated code (4/14/2015 00:35:42)
+
+	class Zip<T1, T2, T3, TResult> : Producer<TResult>
+    {
+        private readonly IObservable<T1> _source1;
+        private readonly IObservable<T2> _source2;
+        private readonly IObservable<T3> _source3;
+        private readonly Func<T1, T2, T3, TResult> _resultSelector;
+
+        public Zip(IObservable<T1> source1, IObservable<T2> source2, IObservable<T3> source3, Func<T1, T2, T3, TResult> resultSelector)
+        {
+            _source1 = source1;
+            _source2 = source2;
+            _source3 = source3;
+            _resultSelector = resultSelector;
+        }
+
+        protected override IDisposable Run(IObserver<TResult> observer, IDisposable cancel, Action<IDisposable> setSink)
+        {
+            var sink = new _(this, observer, cancel);
+            setSink(sink);
+            return sink.Run();
+        }
+
+        class _ : ZipSink<TResult>
+        {
+            private readonly Zip<T1, T2, T3, TResult> _parent;
+
+            public _(Zip<T1, T2, T3, TResult> parent, IObserver<TResult> observer, IDisposable cancel)
+                : base(3, observer, cancel)
+            {
+                _parent = parent;
+            }
+
+            private ZipObserver<T1> _observer1;
+            private ZipObserver<T2> _observer2;
+            private ZipObserver<T3> _observer3;
+
+            public IDisposable Run()
+            {
+				var disposables = new IDisposable[4];
+
+				var d1 = new SingleAssignmentDisposable();
+				disposables[0] = d1;
+				_observer1 = new ZipObserver<T1>(_gate, this, 0, d1);
+				base.Queues[0] = _observer1.Values;
+
+				var d2 = new SingleAssignmentDisposable();
+				disposables[1] = d2;
+				_observer2 = new ZipObserver<T2>(_gate, this, 1, d2);
+				base.Queues[1] = _observer2.Values;
+
+				var d3 = new SingleAssignmentDisposable();
+				disposables[2] = d3;
+				_observer3 = new ZipObserver<T3>(_gate, this, 2, d3);
+				base.Queues[2] = _observer3.Values;
+
+                d1.Disposable = _parent._source1.SubscribeSafe(_observer1);
+                d2.Disposable = _parent._source2.SubscribeSafe(_observer2);
+                d3.Disposable = _parent._source3.SubscribeSafe(_observer3);
+
+				disposables[3] = Disposable.Create(() =>
+                {
+                    _observer1.Values.Clear();
+                    _observer2.Values.Clear();
+                    _observer3.Values.Clear();
+                });
+
+                return StableCompositeDisposable.Create(disposables);
+            }
+
+            protected override TResult GetResult()
+            {
+                return _parent._resultSelector(_observer1.Values.Dequeue(), _observer2.Values.Dequeue(), _observer3.Values.Dequeue());
+            }
+        }
+    }
+
+	class Zip<T1, T2, T3, T4, TResult> : Producer<TResult>
+    {
+        private readonly IObservable<T1> _source1;
+        private readonly IObservable<T2> _source2;
+        private readonly IObservable<T3> _source3;
+        private readonly IObservable<T4> _source4;
+        private readonly Func<T1, T2, T3, T4, TResult> _resultSelector;
+
+        public Zip(IObservable<T1> source1, IObservable<T2> source2, IObservable<T3> source3, IObservable<T4> source4, Func<T1, T2, T3, T4, TResult> resultSelector)
+        {
+            _source1 = source1;
+            _source2 = source2;
+            _source3 = source3;
+            _source4 = source4;
+            _resultSelector = resultSelector;
+        }
+
+        protected override IDisposable Run(IObserver<TResult> observer, IDisposable cancel, Action<IDisposable> setSink)
+        {
+            var sink = new _(this, observer, cancel);
+            setSink(sink);
+            return sink.Run();
+        }
+
+        class _ : ZipSink<TResult>
+        {
+            private readonly Zip<T1, T2, T3, T4, TResult> _parent;
+
+            public _(Zip<T1, T2, T3, T4, TResult> parent, IObserver<TResult> observer, IDisposable cancel)
+                : base(4, observer, cancel)
+            {
+                _parent = parent;
+            }
+
+            private ZipObserver<T1> _observer1;
+            private ZipObserver<T2> _observer2;
+            private ZipObserver<T3> _observer3;
+            private ZipObserver<T4> _observer4;
+
+            public IDisposable Run()
+            {
+				var disposables = new IDisposable[5];
+
+				var d1 = new SingleAssignmentDisposable();
+				disposables[0] = d1;
+				_observer1 = new ZipObserver<T1>(_gate, this, 0, d1);
+				base.Queues[0] = _observer1.Values;
+
+				var d2 = new SingleAssignmentDisposable();
+				disposables[1] = d2;
+				_observer2 = new ZipObserver<T2>(_gate, this, 1, d2);
+				base.Queues[1] = _observer2.Values;
+
+				var d3 = new SingleAssignmentDisposable();
+				disposables[2] = d3;
+				_observer3 = new ZipObserver<T3>(_gate, this, 2, d3);
+				base.Queues[2] = _observer3.Values;
+
+				var d4 = new SingleAssignmentDisposable();
+				disposables[3] = d4;
+				_observer4 = new ZipObserver<T4>(_gate, this, 3, d4);
+				base.Queues[3] = _observer4.Values;
+
+                d1.Disposable = _parent._source1.SubscribeSafe(_observer1);
+                d2.Disposable = _parent._source2.SubscribeSafe(_observer2);
+                d3.Disposable = _parent._source3.SubscribeSafe(_observer3);
+                d4.Disposable = _parent._source4.SubscribeSafe(_observer4);
+
+				disposables[4] = Disposable.Create(() =>
+                {
+                    _observer1.Values.Clear();
+                    _observer2.Values.Clear();
+                    _observer3.Values.Clear();
+                    _observer4.Values.Clear();
+                });
+
+                return StableCompositeDisposable.Create(disposables);
+            }
+
+            protected override TResult GetResult()
+            {
+                return _parent._resultSelector(_observer1.Values.Dequeue(), _observer2.Values.Dequeue(), _observer3.Values.Dequeue(), _observer4.Values.Dequeue());
+            }
+        }
+    }
+
+#if !NO_LARGEARITY
+
+	class Zip<T1, T2, T3, T4, T5, TResult> : Producer<TResult>
+    {
+        private readonly IObservable<T1> _source1;
+        private readonly IObservable<T2> _source2;
+        private readonly IObservable<T3> _source3;
+        private readonly IObservable<T4> _source4;
+        private readonly IObservable<T5> _source5;
+        private readonly Func<T1, T2, T3, T4, T5, TResult> _resultSelector;
+
+        public Zip(IObservable<T1> source1, IObservable<T2> source2, IObservable<T3> source3, IObservable<T4> source4, IObservable<T5> source5, Func<T1, T2, T3, T4, T5, TResult> resultSelector)
+        {
+            _source1 = source1;
+            _source2 = source2;
+            _source3 = source3;
+            _source4 = source4;
+            _source5 = source5;
+            _resultSelector = resultSelector;
+        }
+
+        protected override IDisposable Run(IObserver<TResult> observer, IDisposable cancel, Action<IDisposable> setSink)
+        {
+            var sink = new _(this, observer, cancel);
+            setSink(sink);
+            return sink.Run();
+        }
+
+        class _ : ZipSink<TResult>
+        {
+            private readonly Zip<T1, T2, T3, T4, T5, TResult> _parent;
+
+            public _(Zip<T1, T2, T3, T4, T5, TResult> parent, IObserver<TResult> observer, IDisposable cancel)
+                : base(5, observer, cancel)
+            {
+                _parent = parent;
+            }
+
+            private ZipObserver<T1> _observer1;
+            private ZipObserver<T2> _observer2;
+            private ZipObserver<T3> _observer3;
+            private ZipObserver<T4> _observer4;
+            private ZipObserver<T5> _observer5;
+
+            public IDisposable Run()
+            {
+				var disposables = new IDisposable[6];
+
+				var d1 = new SingleAssignmentDisposable();
+				disposables[0] = d1;
+				_observer1 = new ZipObserver<T1>(_gate, this, 0, d1);
+				base.Queues[0] = _observer1.Values;
+
+				var d2 = new SingleAssignmentDisposable();
+				disposables[1] = d2;
+				_observer2 = new ZipObserver<T2>(_gate, this, 1, d2);
+				base.Queues[1] = _observer2.Values;
+
+				var d3 = new SingleAssignmentDisposable();
+				disposables[2] = d3;
+				_observer3 = new ZipObserver<T3>(_gate, this, 2, d3);
+				base.Queues[2] = _observer3.Values;
+
+				var d4 = new SingleAssignmentDisposable();
+				disposables[3] = d4;
+				_observer4 = new ZipObserver<T4>(_gate, this, 3, d4);
+				base.Queues[3] = _observer4.Values;
+
+				var d5 = new SingleAssignmentDisposable();
+				disposables[4] = d5;
+				_observer5 = new ZipObserver<T5>(_gate, this, 4, d5);
+				base.Queues[4] = _observer5.Values;
+
+                d1.Disposable = _parent._source1.SubscribeSafe(_observer1);
+                d2.Disposable = _parent._source2.SubscribeSafe(_observer2);
+                d3.Disposable = _parent._source3.SubscribeSafe(_observer3);
+                d4.Disposable = _parent._source4.SubscribeSafe(_observer4);
+                d5.Disposable = _parent._source5.SubscribeSafe(_observer5);
+
+				disposables[5] = Disposable.Create(() =>
+                {
+                    _observer1.Values.Clear();
+                    _observer2.Values.Clear();
+                    _observer3.Values.Clear();
+                    _observer4.Values.Clear();
+                    _observer5.Values.Clear();
+                });
+
+                return StableCompositeDisposable.Create(disposables);
+            }
+
+            protected override TResult GetResult()
+            {
+                return _parent._resultSelector(_observer1.Values.Dequeue(), _observer2.Values.Dequeue(), _observer3.Values.Dequeue(), _observer4.Values.Dequeue(), _observer5.Values.Dequeue());
+            }
+        }
+    }
+
+	class Zip<T1, T2, T3, T4, T5, T6, TResult> : Producer<TResult>
+    {
+        private readonly IObservable<T1> _source1;
+        private readonly IObservable<T2> _source2;
+        private readonly IObservable<T3> _source3;
+        private readonly IObservable<T4> _source4;
+        private readonly IObservable<T5> _source5;
+        private readonly IObservable<T6> _source6;
+        private readonly Func<T1, T2, T3, T4, T5, T6, TResult> _resultSelector;
+
+        public Zip(IObservable<T1> source1, IObservable<T2> source2, IObservable<T3> source3, IObservable<T4> source4, IObservable<T5> source5, IObservable<T6> source6, Func<T1, T2, T3, T4, T5, T6, TResult> resultSelector)
+        {
+            _source1 = source1;
+            _source2 = source2;
+            _source3 = source3;
+            _source4 = source4;
+            _source5 = source5;
+            _source6 = source6;
+            _resultSelector = resultSelector;
+        }
+
+        protected override IDisposable Run(IObserver<TResult> observer, IDisposable cancel, Action<IDisposable> setSink)
+        {
+            var sink = new _(this, observer, cancel);
+            setSink(sink);
+            return sink.Run();
+        }
+
+        class _ : ZipSink<TResult>
+        {
+            private readonly Zip<T1, T2, T3, T4, T5, T6, TResult> _parent;
+
+            public _(Zip<T1, T2, T3, T4, T5, T6, TResult> parent, IObserver<TResult> observer, IDisposable cancel)
+                : base(6, observer, cancel)
+            {
+                _parent = parent;
+            }
+
+            private ZipObserver<T1> _observer1;
+            private ZipObserver<T2> _observer2;
+            private ZipObserver<T3> _observer3;
+            private ZipObserver<T4> _observer4;
+            private ZipObserver<T5> _observer5;
+            private ZipObserver<T6> _observer6;
+
+            public IDisposable Run()
+            {
+				var disposables = new IDisposable[7];
+
+				var d1 = new SingleAssignmentDisposable();
+				disposables[0] = d1;
+				_observer1 = new ZipObserver<T1>(_gate, this, 0, d1);
+				base.Queues[0] = _observer1.Values;
+
+				var d2 = new SingleAssignmentDisposable();
+				disposables[1] = d2;
+				_observer2 = new ZipObserver<T2>(_gate, this, 1, d2);
+				base.Queues[1] = _observer2.Values;
+
+				var d3 = new SingleAssignmentDisposable();
+				disposables[2] = d3;
+				_observer3 = new ZipObserver<T3>(_gate, this, 2, d3);
+				base.Queues[2] = _observer3.Values;
+
+				var d4 = new SingleAssignmentDisposable();
+				disposables[3] = d4;
+				_observer4 = new ZipObserver<T4>(_gate, this, 3, d4);
+				base.Queues[3] = _observer4.Values;
+
+				var d5 = new SingleAssignmentDisposable();
+				disposables[4] = d5;
+				_observer5 = new ZipObserver<T5>(_gate, this, 4, d5);
+				base.Queues[4] = _observer5.Values;
+
+				var d6 = new SingleAssignmentDisposable();
+				disposables[5] = d6;
+				_observer6 = new ZipObserver<T6>(_gate, this, 5, d6);
+				base.Queues[5] = _observer6.Values;
+
+                d1.Disposable = _parent._source1.SubscribeSafe(_observer1);
+                d2.Disposable = _parent._source2.SubscribeSafe(_observer2);
+                d3.Disposable = _parent._source3.SubscribeSafe(_observer3);
+                d4.Disposable = _parent._source4.SubscribeSafe(_observer4);
+                d5.Disposable = _parent._source5.SubscribeSafe(_observer5);
+                d6.Disposable = _parent._source6.SubscribeSafe(_observer6);
+
+				disposables[6] = Disposable.Create(() =>
+                {
+                    _observer1.Values.Clear();
+                    _observer2.Values.Clear();
+                    _observer3.Values.Clear();
+                    _observer4.Values.Clear();
+                    _observer5.Values.Clear();
+                    _observer6.Values.Clear();
+                });
+
+                return StableCompositeDisposable.Create(disposables);
+            }
+
+            protected override TResult GetResult()
+            {
+                return _parent._resultSelector(_observer1.Values.Dequeue(), _observer2.Values.Dequeue(), _observer3.Values.Dequeue(), _observer4.Values.Dequeue(), _observer5.Values.Dequeue(), _observer6.Values.Dequeue());
+            }
+        }
+    }
+
+	class Zip<T1, T2, T3, T4, T5, T6, T7, TResult> : Producer<TResult>
+    {
+        private readonly IObservable<T1> _source1;
+        private readonly IObservable<T2> _source2;
+        private readonly IObservable<T3> _source3;
+        private readonly IObservable<T4> _source4;
+        private readonly IObservable<T5> _source5;
+        private readonly IObservable<T6> _source6;
+        private readonly IObservable<T7> _source7;
+        private readonly Func<T1, T2, T3, T4, T5, T6, T7, TResult> _resultSelector;
+
+        public Zip(IObservable<T1> source1, IObservable<T2> source2, IObservable<T3> source3, IObservable<T4> source4, IObservable<T5> source5, IObservable<T6> source6, IObservable<T7> source7, Func<T1, T2, T3, T4, T5, T6, T7, TResult> resultSelector)
+        {
+            _source1 = source1;
+            _source2 = source2;
+            _source3 = source3;
+            _source4 = source4;
+            _source5 = source5;
+            _source6 = source6;
+            _source7 = source7;
+            _resultSelector = resultSelector;
+        }
+
+        protected override IDisposable Run(IObserver<TResult> observer, IDisposable cancel, Action<IDisposable> setSink)
+        {
+            var sink = new _(this, observer, cancel);
+            setSink(sink);
+            return sink.Run();
+        }
+
+        class _ : ZipSink<TResult>
+        {
+            private readonly Zip<T1, T2, T3, T4, T5, T6, T7, TResult> _parent;
+
+            public _(Zip<T1, T2, T3, T4, T5, T6, T7, TResult> parent, IObserver<TResult> observer, IDisposable cancel)
+                : base(7, observer, cancel)
+            {
+                _parent = parent;
+            }
+
+            private ZipObserver<T1> _observer1;
+            private ZipObserver<T2> _observer2;
+            private ZipObserver<T3> _observer3;
+            private ZipObserver<T4> _observer4;
+            private ZipObserver<T5> _observer5;
+            private ZipObserver<T6> _observer6;
+            private ZipObserver<T7> _observer7;
+
+            public IDisposable Run()
+            {
+				var disposables = new IDisposable[8];
+
+				var d1 = new SingleAssignmentDisposable();
+				disposables[0] = d1;
+				_observer1 = new ZipObserver<T1>(_gate, this, 0, d1);
+				base.Queues[0] = _observer1.Values;
+
+				var d2 = new SingleAssignmentDisposable();
+				disposables[1] = d2;
+				_observer2 = new ZipObserver<T2>(_gate, this, 1, d2);
+				base.Queues[1] = _observer2.Values;
+
+				var d3 = new SingleAssignmentDisposable();
+				disposables[2] = d3;
+				_observer3 = new ZipObserver<T3>(_gate, this, 2, d3);
+				base.Queues[2] = _observer3.Values;
+
+				var d4 = new SingleAssignmentDisposable();
+				disposables[3] = d4;
+				_observer4 = new ZipObserver<T4>(_gate, this, 3, d4);
+				base.Queues[3] = _observer4.Values;
+
+				var d5 = new SingleAssignmentDisposable();
+				disposables[4] = d5;
+				_observer5 = new ZipObserver<T5>(_gate, this, 4, d5);
+				base.Queues[4] = _observer5.Values;
+
+				var d6 = new SingleAssignmentDisposable();
+				disposables[5] = d6;
+				_observer6 = new ZipObserver<T6>(_gate, this, 5, d6);
+				base.Queues[5] = _observer6.Values;
+
+				var d7 = new SingleAssignmentDisposable();
+				disposables[6] = d7;
+				_observer7 = new ZipObserver<T7>(_gate, this, 6, d7);
+				base.Queues[6] = _observer7.Values;
+
+                d1.Disposable = _parent._source1.SubscribeSafe(_observer1);
+                d2.Disposable = _parent._source2.SubscribeSafe(_observer2);
+                d3.Disposable = _parent._source3.SubscribeSafe(_observer3);
+                d4.Disposable = _parent._source4.SubscribeSafe(_observer4);
+                d5.Disposable = _parent._source5.SubscribeSafe(_observer5);
+                d6.Disposable = _parent._source6.SubscribeSafe(_observer6);
+                d7.Disposable = _parent._source7.SubscribeSafe(_observer7);
+
+				disposables[7] = Disposable.Create(() =>
+                {
+                    _observer1.Values.Clear();
+                    _observer2.Values.Clear();
+                    _observer3.Values.Clear();
+                    _observer4.Values.Clear();
+                    _observer5.Values.Clear();
+                    _observer6.Values.Clear();
+                    _observer7.Values.Clear();
+                });
+
+                return StableCompositeDisposable.Create(disposables);
+            }
+
+            protected override TResult GetResult()
+            {
+                return _parent._resultSelector(_observer1.Values.Dequeue(), _observer2.Values.Dequeue(), _observer3.Values.Dequeue(), _observer4.Values.Dequeue(), _observer5.Values.Dequeue(), _observer6.Values.Dequeue(), _observer7.Values.Dequeue());
+            }
+        }
+    }
+
+	class Zip<T1, T2, T3, T4, T5, T6, T7, T8, TResult> : Producer<TResult>
+    {
+        private readonly IObservable<T1> _source1;
+        private readonly IObservable<T2> _source2;
+        private readonly IObservable<T3> _source3;
+        private readonly IObservable<T4> _source4;
+        private readonly IObservable<T5> _source5;
+        private readonly IObservable<T6> _source6;
+        private readonly IObservable<T7> _source7;
+        private readonly IObservable<T8> _source8;
+        private readonly Func<T1, T2, T3, T4, T5, T6, T7, T8, TResult> _resultSelector;
+
+        public Zip(IObservable<T1> source1, IObservable<T2> source2, IObservable<T3> source3, IObservable<T4> source4, IObservable<T5> source5, IObservable<T6> source6, IObservable<T7> source7, IObservable<T8> source8, Func<T1, T2, T3, T4, T5, T6, T7, T8, TResult> resultSelector)
+        {
+            _source1 = source1;
+            _source2 = source2;
+            _source3 = source3;
+            _source4 = source4;
+            _source5 = source5;
+            _source6 = source6;
+            _source7 = source7;
+            _source8 = source8;
+            _resultSelector = resultSelector;
+        }
+
+        protected override IDisposable Run(IObserver<TResult> observer, IDisposable cancel, Action<IDisposable> setSink)
+        {
+            var sink = new _(this, observer, cancel);
+            setSink(sink);
+            return sink.Run();
+        }
+
+        class _ : ZipSink<TResult>
+        {
+            private readonly Zip<T1, T2, T3, T4, T5, T6, T7, T8, TResult> _parent;
+
+            public _(Zip<T1, T2, T3, T4, T5, T6, T7, T8, TResult> parent, IObserver<TResult> observer, IDisposable cancel)
+                : base(8, observer, cancel)
+            {
+                _parent = parent;
+            }
+
+            private ZipObserver<T1> _observer1;
+            private ZipObserver<T2> _observer2;
+            private ZipObserver<T3> _observer3;
+            private ZipObserver<T4> _observer4;
+            private ZipObserver<T5> _observer5;
+            private ZipObserver<T6> _observer6;
+            private ZipObserver<T7> _observer7;
+            private ZipObserver<T8> _observer8;
+
+            public IDisposable Run()
+            {
+				var disposables = new IDisposable[9];
+
+				var d1 = new SingleAssignmentDisposable();
+				disposables[0] = d1;
+				_observer1 = new ZipObserver<T1>(_gate, this, 0, d1);
+				base.Queues[0] = _observer1.Values;
+
+				var d2 = new SingleAssignmentDisposable();
+				disposables[1] = d2;
+				_observer2 = new ZipObserver<T2>(_gate, this, 1, d2);
+				base.Queues[1] = _observer2.Values;
+
+				var d3 = new SingleAssignmentDisposable();
+				disposables[2] = d3;
+				_observer3 = new ZipObserver<T3>(_gate, this, 2, d3);
+				base.Queues[2] = _observer3.Values;
+
+				var d4 = new SingleAssignmentDisposable();
+				disposables[3] = d4;
+				_observer4 = new ZipObserver<T4>(_gate, this, 3, d4);
+				base.Queues[3] = _observer4.Values;
+
+				var d5 = new SingleAssignmentDisposable();
+				disposables[4] = d5;
+				_observer5 = new ZipObserver<T5>(_gate, this, 4, d5);
+				base.Queues[4] = _observer5.Values;
+
+				var d6 = new SingleAssignmentDisposable();
+				disposables[5] = d6;
+				_observer6 = new ZipObserver<T6>(_gate, this, 5, d6);
+				base.Queues[5] = _observer6.Values;
+
+				var d7 = new SingleAssignmentDisposable();
+				disposables[6] = d7;
+				_observer7 = new ZipObserver<T7>(_gate, this, 6, d7);
+				base.Queues[6] = _observer7.Values;
+
+				var d8 = new SingleAssignmentDisposable();
+				disposables[7] = d8;
+				_observer8 = new ZipObserver<T8>(_gate, this, 7, d8);
+				base.Queues[7] = _observer8.Values;
+
+                d1.Disposable = _parent._source1.SubscribeSafe(_observer1);
+                d2.Disposable = _parent._source2.SubscribeSafe(_observer2);
+                d3.Disposable = _parent._source3.SubscribeSafe(_observer3);
+                d4.Disposable = _parent._source4.SubscribeSafe(_observer4);
+                d5.Disposable = _parent._source5.SubscribeSafe(_observer5);
+                d6.Disposable = _parent._source6.SubscribeSafe(_observer6);
+                d7.Disposable = _parent._source7.SubscribeSafe(_observer7);
+                d8.Disposable = _parent._source8.SubscribeSafe(_observer8);
+
+				disposables[8] = Disposable.Create(() =>
+                {
+                    _observer1.Values.Clear();
+                    _observer2.Values.Clear();
+                    _observer3.Values.Clear();
+                    _observer4.Values.Clear();
+                    _observer5.Values.Clear();
+                    _observer6.Values.Clear();
+                    _observer7.Values.Clear();
+                    _observer8.Values.Clear();
+                });
+
+                return StableCompositeDisposable.Create(disposables);
+            }
+
+            protected override TResult GetResult()
+            {
+                return _parent._resultSelector(_observer1.Values.Dequeue(), _observer2.Values.Dequeue(), _observer3.Values.Dequeue(), _observer4.Values.Dequeue(), _observer5.Values.Dequeue(), _observer6.Values.Dequeue(), _observer7.Values.Dequeue(), _observer8.Values.Dequeue());
+            }
+        }
+    }
+
+	class Zip<T1, T2, T3, T4, T5, T6, T7, T8, T9, TResult> : Producer<TResult>
+    {
+        private readonly IObservable<T1> _source1;
+        private readonly IObservable<T2> _source2;
+        private readonly IObservable<T3> _source3;
+        private readonly IObservable<T4> _source4;
+        private readonly IObservable<T5> _source5;
+        private readonly IObservable<T6> _source6;
+        private readonly IObservable<T7> _source7;
+        private readonly IObservable<T8> _source8;
+        private readonly IObservable<T9> _source9;
+        private readonly Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, TResult> _resultSelector;
+
+        public Zip(IObservable<T1> source1, IObservable<T2> source2, IObservable<T3> source3, IObservable<T4> source4, IObservable<T5> source5, IObservable<T6> source6, IObservable<T7> source7, IObservable<T8> source8, IObservable<T9> source9, Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, TResult> resultSelector)
+        {
+            _source1 = source1;
+            _source2 = source2;
+            _source3 = source3;
+            _source4 = source4;
+            _source5 = source5;
+            _source6 = source6;
+            _source7 = source7;
+            _source8 = source8;
+            _source9 = source9;
+            _resultSelector = resultSelector;
+        }
+
+        protected override IDisposable Run(IObserver<TResult> observer, IDisposable cancel, Action<IDisposable> setSink)
+        {
+            var sink = new _(this, observer, cancel);
+            setSink(sink);
+            return sink.Run();
+        }
+
+        class _ : ZipSink<TResult>
+        {
+            private readonly Zip<T1, T2, T3, T4, T5, T6, T7, T8, T9, TResult> _parent;
+
+            public _(Zip<T1, T2, T3, T4, T5, T6, T7, T8, T9, TResult> parent, IObserver<TResult> observer, IDisposable cancel)
+                : base(9, observer, cancel)
+            {
+                _parent = parent;
+            }
+
+            private ZipObserver<T1> _observer1;
+            private ZipObserver<T2> _observer2;
+            private ZipObserver<T3> _observer3;
+            private ZipObserver<T4> _observer4;
+            private ZipObserver<T5> _observer5;
+            private ZipObserver<T6> _observer6;
+            private ZipObserver<T7> _observer7;
+            private ZipObserver<T8> _observer8;
+            private ZipObserver<T9> _observer9;
+
+            public IDisposable Run()
+            {
+				var disposables = new IDisposable[10];
+
+				var d1 = new SingleAssignmentDisposable();
+				disposables[0] = d1;
+				_observer1 = new ZipObserver<T1>(_gate, this, 0, d1);
+				base.Queues[0] = _observer1.Values;
+
+				var d2 = new SingleAssignmentDisposable();
+				disposables[1] = d2;
+				_observer2 = new ZipObserver<T2>(_gate, this, 1, d2);
+				base.Queues[1] = _observer2.Values;
+
+				var d3 = new SingleAssignmentDisposable();
+				disposables[2] = d3;
+				_observer3 = new ZipObserver<T3>(_gate, this, 2, d3);
+				base.Queues[2] = _observer3.Values;
+
+				var d4 = new SingleAssignmentDisposable();
+				disposables[3] = d4;
+				_observer4 = new ZipObserver<T4>(_gate, this, 3, d4);
+				base.Queues[3] = _observer4.Values;
+
+				var d5 = new SingleAssignmentDisposable();
+				disposables[4] = d5;
+				_observer5 = new ZipObserver<T5>(_gate, this, 4, d5);
+				base.Queues[4] = _observer5.Values;
+
+				var d6 = new SingleAssignmentDisposable();
+				disposables[5] = d6;
+				_observer6 = new ZipObserver<T6>(_gate, this, 5, d6);
+				base.Queues[5] = _observer6.Values;
+
+				var d7 = new SingleAssignmentDisposable();
+				disposables[6] = d7;
+				_observer7 = new ZipObserver<T7>(_gate, this, 6, d7);
+				base.Queues[6] = _observer7.Values;
+
+				var d8 = new SingleAssignmentDisposable();
+				disposables[7] = d8;
+				_observer8 = new ZipObserver<T8>(_gate, this, 7, d8);
+				base.Queues[7] = _observer8.Values;
+
+				var d9 = new SingleAssignmentDisposable();
+				disposables[8] = d9;
+				_observer9 = new ZipObserver<T9>(_gate, this, 8, d9);
+				base.Queues[8] = _observer9.Values;
+
+                d1.Disposable = _parent._source1.SubscribeSafe(_observer1);
+                d2.Disposable = _parent._source2.SubscribeSafe(_observer2);
+                d3.Disposable = _parent._source3.SubscribeSafe(_observer3);
+                d4.Disposable = _parent._source4.SubscribeSafe(_observer4);
+                d5.Disposable = _parent._source5.SubscribeSafe(_observer5);
+                d6.Disposable = _parent._source6.SubscribeSafe(_observer6);
+                d7.Disposable = _parent._source7.SubscribeSafe(_observer7);
+                d8.Disposable = _parent._source8.SubscribeSafe(_observer8);
+                d9.Disposable = _parent._source9.SubscribeSafe(_observer9);
+
+				disposables[9] = Disposable.Create(() =>
+                {
+                    _observer1.Values.Clear();
+                    _observer2.Values.Clear();
+                    _observer3.Values.Clear();
+                    _observer4.Values.Clear();
+                    _observer5.Values.Clear();
+                    _observer6.Values.Clear();
+                    _observer7.Values.Clear();
+                    _observer8.Values.Clear();
+                    _observer9.Values.Clear();
+                });
+
+                return StableCompositeDisposable.Create(disposables);
+            }
+
+            protected override TResult GetResult()
+            {
+                return _parent._resultSelector(_observer1.Values.Dequeue(), _observer2.Values.Dequeue(), _observer3.Values.Dequeue(), _observer4.Values.Dequeue(), _observer5.Values.Dequeue(), _observer6.Values.Dequeue(), _observer7.Values.Dequeue(), _observer8.Values.Dequeue(), _observer9.Values.Dequeue());
+            }
+        }
+    }
+
+	class Zip<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, TResult> : Producer<TResult>
+    {
+        private readonly IObservable<T1> _source1;
+        private readonly IObservable<T2> _source2;
+        private readonly IObservable<T3> _source3;
+        private readonly IObservable<T4> _source4;
+        private readonly IObservable<T5> _source5;
+        private readonly IObservable<T6> _source6;
+        private readonly IObservable<T7> _source7;
+        private readonly IObservable<T8> _source8;
+        private readonly IObservable<T9> _source9;
+        private readonly IObservable<T10> _source10;
+        private readonly Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, TResult> _resultSelector;
+
+        public Zip(IObservable<T1> source1, IObservable<T2> source2, IObservable<T3> source3, IObservable<T4> source4, IObservable<T5> source5, IObservable<T6> source6, IObservable<T7> source7, IObservable<T8> source8, IObservable<T9> source9, IObservable<T10> source10, Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, TResult> resultSelector)
+        {
+            _source1 = source1;
+            _source2 = source2;
+            _source3 = source3;
+            _source4 = source4;
+            _source5 = source5;
+            _source6 = source6;
+            _source7 = source7;
+            _source8 = source8;
+            _source9 = source9;
+            _source10 = source10;
+            _resultSelector = resultSelector;
+        }
+
+        protected override IDisposable Run(IObserver<TResult> observer, IDisposable cancel, Action<IDisposable> setSink)
+        {
+            var sink = new _(this, observer, cancel);
+            setSink(sink);
+            return sink.Run();
+        }
+
+        class _ : ZipSink<TResult>
+        {
+            private readonly Zip<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, TResult> _parent;
+
+            public _(Zip<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, TResult> parent, IObserver<TResult> observer, IDisposable cancel)
+                : base(10, observer, cancel)
+            {
+                _parent = parent;
+            }
+
+            private ZipObserver<T1> _observer1;
+            private ZipObserver<T2> _observer2;
+            private ZipObserver<T3> _observer3;
+            private ZipObserver<T4> _observer4;
+            private ZipObserver<T5> _observer5;
+            private ZipObserver<T6> _observer6;
+            private ZipObserver<T7> _observer7;
+            private ZipObserver<T8> _observer8;
+            private ZipObserver<T9> _observer9;
+            private ZipObserver<T10> _observer10;
+
+            public IDisposable Run()
+            {
+				var disposables = new IDisposable[11];
+
+				var d1 = new SingleAssignmentDisposable();
+				disposables[0] = d1;
+				_observer1 = new ZipObserver<T1>(_gate, this, 0, d1);
+				base.Queues[0] = _observer1.Values;
+
+				var d2 = new SingleAssignmentDisposable();
+				disposables[1] = d2;
+				_observer2 = new ZipObserver<T2>(_gate, this, 1, d2);
+				base.Queues[1] = _observer2.Values;
+
+				var d3 = new SingleAssignmentDisposable();
+				disposables[2] = d3;
+				_observer3 = new ZipObserver<T3>(_gate, this, 2, d3);
+				base.Queues[2] = _observer3.Values;
+
+				var d4 = new SingleAssignmentDisposable();
+				disposables[3] = d4;
+				_observer4 = new ZipObserver<T4>(_gate, this, 3, d4);
+				base.Queues[3] = _observer4.Values;
+
+				var d5 = new SingleAssignmentDisposable();
+				disposables[4] = d5;
+				_observer5 = new ZipObserver<T5>(_gate, this, 4, d5);
+				base.Queues[4] = _observer5.Values;
+
+				var d6 = new SingleAssignmentDisposable();
+				disposables[5] = d6;
+				_observer6 = new ZipObserver<T6>(_gate, this, 5, d6);
+				base.Queues[5] = _observer6.Values;
+
+				var d7 = new SingleAssignmentDisposable();
+				disposables[6] = d7;
+				_observer7 = new ZipObserver<T7>(_gate, this, 6, d7);
+				base.Queues[6] = _observer7.Values;
+
+				var d8 = new SingleAssignmentDisposable();
+				disposables[7] = d8;
+				_observer8 = new ZipObserver<T8>(_gate, this, 7, d8);
+				base.Queues[7] = _observer8.Values;
+
+				var d9 = new SingleAssignmentDisposable();
+				disposables[8] = d9;
+				_observer9 = new ZipObserver<T9>(_gate, this, 8, d9);
+				base.Queues[8] = _observer9.Values;
+
+				var d10 = new SingleAssignmentDisposable();
+				disposables[9] = d10;
+				_observer10 = new ZipObserver<T10>(_gate, this, 9, d10);
+				base.Queues[9] = _observer10.Values;
+
+                d1.Disposable = _parent._source1.SubscribeSafe(_observer1);
+                d2.Disposable = _parent._source2.SubscribeSafe(_observer2);
+                d3.Disposable = _parent._source3.SubscribeSafe(_observer3);
+                d4.Disposable = _parent._source4.SubscribeSafe(_observer4);
+                d5.Disposable = _parent._source5.SubscribeSafe(_observer5);
+                d6.Disposable = _parent._source6.SubscribeSafe(_observer6);
+                d7.Disposable = _parent._source7.SubscribeSafe(_observer7);
+                d8.Disposable = _parent._source8.SubscribeSafe(_observer8);
+                d9.Disposable = _parent._source9.SubscribeSafe(_observer9);
+                d10.Disposable = _parent._source10.SubscribeSafe(_observer10);
+
+				disposables[10] = Disposable.Create(() =>
+                {
+                    _observer1.Values.Clear();
+                    _observer2.Values.Clear();
+                    _observer3.Values.Clear();
+                    _observer4.Values.Clear();
+                    _observer5.Values.Clear();
+                    _observer6.Values.Clear();
+                    _observer7.Values.Clear();
+                    _observer8.Values.Clear();
+                    _observer9.Values.Clear();
+                    _observer10.Values.Clear();
+                });
+
+                return StableCompositeDisposable.Create(disposables);
+            }
+
+            protected override TResult GetResult()
+            {
+                return _parent._resultSelector(_observer1.Values.Dequeue(), _observer2.Values.Dequeue(), _observer3.Values.Dequeue(), _observer4.Values.Dequeue(), _observer5.Values.Dequeue(), _observer6.Values.Dequeue(), _observer7.Values.Dequeue(), _observer8.Values.Dequeue(), _observer9.Values.Dequeue(), _observer10.Values.Dequeue());
+            }
+        }
+    }
+
+	class Zip<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, TResult> : Producer<TResult>
+    {
+        private readonly IObservable<T1> _source1;
+        private readonly IObservable<T2> _source2;
+        private readonly IObservable<T3> _source3;
+        private readonly IObservable<T4> _source4;
+        private readonly IObservable<T5> _source5;
+        private readonly IObservable<T6> _source6;
+        private readonly IObservable<T7> _source7;
+        private readonly IObservable<T8> _source8;
+        private readonly IObservable<T9> _source9;
+        private readonly IObservable<T10> _source10;
+        private readonly IObservable<T11> _source11;
+        private readonly Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, TResult> _resultSelector;
+
+        public Zip(IObservable<T1> source1, IObservable<T2> source2, IObservable<T3> source3, IObservable<T4> source4, IObservable<T5> source5, IObservable<T6> source6, IObservable<T7> source7, IObservable<T8> source8, IObservable<T9> source9, IObservable<T10> source10, IObservable<T11> source11, Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, TResult> resultSelector)
+        {
+            _source1 = source1;
+            _source2 = source2;
+            _source3 = source3;
+            _source4 = source4;
+            _source5 = source5;
+            _source6 = source6;
+            _source7 = source7;
+            _source8 = source8;
+            _source9 = source9;
+            _source10 = source10;
+            _source11 = source11;
+            _resultSelector = resultSelector;
+        }
+
+        protected override IDisposable Run(IObserver<TResult> observer, IDisposable cancel, Action<IDisposable> setSink)
+        {
+            var sink = new _(this, observer, cancel);
+            setSink(sink);
+            return sink.Run();
+        }
+
+        class _ : ZipSink<TResult>
+        {
+            private readonly Zip<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, TResult> _parent;
+
+            public _(Zip<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, TResult> parent, IObserver<TResult> observer, IDisposable cancel)
+                : base(11, observer, cancel)
+            {
+                _parent = parent;
+            }
+
+            private ZipObserver<T1> _observer1;
+            private ZipObserver<T2> _observer2;
+            private ZipObserver<T3> _observer3;
+            private ZipObserver<T4> _observer4;
+            private ZipObserver<T5> _observer5;
+            private ZipObserver<T6> _observer6;
+            private ZipObserver<T7> _observer7;
+            private ZipObserver<T8> _observer8;
+            private ZipObserver<T9> _observer9;
+            private ZipObserver<T10> _observer10;
+            private ZipObserver<T11> _observer11;
+
+            public IDisposable Run()
+            {
+				var disposables = new IDisposable[12];
+
+				var d1 = new SingleAssignmentDisposable();
+				disposables[0] = d1;
+				_observer1 = new ZipObserver<T1>(_gate, this, 0, d1);
+				base.Queues[0] = _observer1.Values;
+
+				var d2 = new SingleAssignmentDisposable();
+				disposables[1] = d2;
+				_observer2 = new ZipObserver<T2>(_gate, this, 1, d2);
+				base.Queues[1] = _observer2.Values;
+
+				var d3 = new SingleAssignmentDisposable();
+				disposables[2] = d3;
+				_observer3 = new ZipObserver<T3>(_gate, this, 2, d3);
+				base.Queues[2] = _observer3.Values;
+
+				var d4 = new SingleAssignmentDisposable();
+				disposables[3] = d4;
+				_observer4 = new ZipObserver<T4>(_gate, this, 3, d4);
+				base.Queues[3] = _observer4.Values;
+
+				var d5 = new SingleAssignmentDisposable();
+				disposables[4] = d5;
+				_observer5 = new ZipObserver<T5>(_gate, this, 4, d5);
+				base.Queues[4] = _observer5.Values;
+
+				var d6 = new SingleAssignmentDisposable();
+				disposables[5] = d6;
+				_observer6 = new ZipObserver<T6>(_gate, this, 5, d6);
+				base.Queues[5] = _observer6.Values;
+
+				var d7 = new SingleAssignmentDisposable();
+				disposables[6] = d7;
+				_observer7 = new ZipObserver<T7>(_gate, this, 6, d7);
+				base.Queues[6] = _observer7.Values;
+
+				var d8 = new SingleAssignmentDisposable();
+				disposables[7] = d8;
+				_observer8 = new ZipObserver<T8>(_gate, this, 7, d8);
+				base.Queues[7] = _observer8.Values;
+
+				var d9 = new SingleAssignmentDisposable();
+				disposables[8] = d9;
+				_observer9 = new ZipObserver<T9>(_gate, this, 8, d9);
+				base.Queues[8] = _observer9.Values;
+
+				var d10 = new SingleAssignmentDisposable();
+				disposables[9] = d10;
+				_observer10 = new ZipObserver<T10>(_gate, this, 9, d10);
+				base.Queues[9] = _observer10.Values;
+
+				var d11 = new SingleAssignmentDisposable();
+				disposables[10] = d11;
+				_observer11 = new ZipObserver<T11>(_gate, this, 10, d11);
+				base.Queues[10] = _observer11.Values;
+
+                d1.Disposable = _parent._source1.SubscribeSafe(_observer1);
+                d2.Disposable = _parent._source2.SubscribeSafe(_observer2);
+                d3.Disposable = _parent._source3.SubscribeSafe(_observer3);
+                d4.Disposable = _parent._source4.SubscribeSafe(_observer4);
+                d5.Disposable = _parent._source5.SubscribeSafe(_observer5);
+                d6.Disposable = _parent._source6.SubscribeSafe(_observer6);
+                d7.Disposable = _parent._source7.SubscribeSafe(_observer7);
+                d8.Disposable = _parent._source8.SubscribeSafe(_observer8);
+                d9.Disposable = _parent._source9.SubscribeSafe(_observer9);
+                d10.Disposable = _parent._source10.SubscribeSafe(_observer10);
+                d11.Disposable = _parent._source11.SubscribeSafe(_observer11);
+
+				disposables[11] = Disposable.Create(() =>
+                {
+                    _observer1.Values.Clear();
+                    _observer2.Values.Clear();
+                    _observer3.Values.Clear();
+                    _observer4.Values.Clear();
+                    _observer5.Values.Clear();
+                    _observer6.Values.Clear();
+                    _observer7.Values.Clear();
+                    _observer8.Values.Clear();
+                    _observer9.Values.Clear();
+                    _observer10.Values.Clear();
+                    _observer11.Values.Clear();
+                });
+
+                return StableCompositeDisposable.Create(disposables);
+            }
+
+            protected override TResult GetResult()
+            {
+                return _parent._resultSelector(_observer1.Values.Dequeue(), _observer2.Values.Dequeue(), _observer3.Values.Dequeue(), _observer4.Values.Dequeue(), _observer5.Values.Dequeue(), _observer6.Values.Dequeue(), _observer7.Values.Dequeue(), _observer8.Values.Dequeue(), _observer9.Values.Dequeue(), _observer10.Values.Dequeue(), _observer11.Values.Dequeue());
+            }
+        }
+    }
+
+	class Zip<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, TResult> : Producer<TResult>
+    {
+        private readonly IObservable<T1> _source1;
+        private readonly IObservable<T2> _source2;
+        private readonly IObservable<T3> _source3;
+        private readonly IObservable<T4> _source4;
+        private readonly IObservable<T5> _source5;
+        private readonly IObservable<T6> _source6;
+        private readonly IObservable<T7> _source7;
+        private readonly IObservable<T8> _source8;
+        private readonly IObservable<T9> _source9;
+        private readonly IObservable<T10> _source10;
+        private readonly IObservable<T11> _source11;
+        private readonly IObservable<T12> _source12;
+        private readonly Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, TResult> _resultSelector;
+
+        public Zip(IObservable<T1> source1, IObservable<T2> source2, IObservable<T3> source3, IObservable<T4> source4, IObservable<T5> source5, IObservable<T6> source6, IObservable<T7> source7, IObservable<T8> source8, IObservable<T9> source9, IObservable<T10> source10, IObservable<T11> source11, IObservable<T12> source12, Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, TResult> resultSelector)
+        {
+            _source1 = source1;
+            _source2 = source2;
+            _source3 = source3;
+            _source4 = source4;
+            _source5 = source5;
+            _source6 = source6;
+            _source7 = source7;
+            _source8 = source8;
+            _source9 = source9;
+            _source10 = source10;
+            _source11 = source11;
+            _source12 = source12;
+            _resultSelector = resultSelector;
+        }
+
+        protected override IDisposable Run(IObserver<TResult> observer, IDisposable cancel, Action<IDisposable> setSink)
+        {
+            var sink = new _(this, observer, cancel);
+            setSink(sink);
+            return sink.Run();
+        }
+
+        class _ : ZipSink<TResult>
+        {
+            private readonly Zip<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, TResult> _parent;
+
+            public _(Zip<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, TResult> parent, IObserver<TResult> observer, IDisposable cancel)
+                : base(12, observer, cancel)
+            {
+                _parent = parent;
+            }
+
+            private ZipObserver<T1> _observer1;
+            private ZipObserver<T2> _observer2;
+            private ZipObserver<T3> _observer3;
+            private ZipObserver<T4> _observer4;
+            private ZipObserver<T5> _observer5;
+            private ZipObserver<T6> _observer6;
+            private ZipObserver<T7> _observer7;
+            private ZipObserver<T8> _observer8;
+            private ZipObserver<T9> _observer9;
+            private ZipObserver<T10> _observer10;
+            private ZipObserver<T11> _observer11;
+            private ZipObserver<T12> _observer12;
+
+            public IDisposable Run()
+            {
+				var disposables = new IDisposable[13];
+
+				var d1 = new SingleAssignmentDisposable();
+				disposables[0] = d1;
+				_observer1 = new ZipObserver<T1>(_gate, this, 0, d1);
+				base.Queues[0] = _observer1.Values;
+
+				var d2 = new SingleAssignmentDisposable();
+				disposables[1] = d2;
+				_observer2 = new ZipObserver<T2>(_gate, this, 1, d2);
+				base.Queues[1] = _observer2.Values;
+
+				var d3 = new SingleAssignmentDisposable();
+				disposables[2] = d3;
+				_observer3 = new ZipObserver<T3>(_gate, this, 2, d3);
+				base.Queues[2] = _observer3.Values;
+
+				var d4 = new SingleAssignmentDisposable();
+				disposables[3] = d4;
+				_observer4 = new ZipObserver<T4>(_gate, this, 3, d4);
+				base.Queues[3] = _observer4.Values;
+
+				var d5 = new SingleAssignmentDisposable();
+				disposables[4] = d5;
+				_observer5 = new ZipObserver<T5>(_gate, this, 4, d5);
+				base.Queues[4] = _observer5.Values;
+
+				var d6 = new SingleAssignmentDisposable();
+				disposables[5] = d6;
+				_observer6 = new ZipObserver<T6>(_gate, this, 5, d6);
+				base.Queues[5] = _observer6.Values;
+
+				var d7 = new SingleAssignmentDisposable();
+				disposables[6] = d7;
+				_observer7 = new ZipObserver<T7>(_gate, this, 6, d7);
+				base.Queues[6] = _observer7.Values;
+
+				var d8 = new SingleAssignmentDisposable();
+				disposables[7] = d8;
+				_observer8 = new ZipObserver<T8>(_gate, this, 7, d8);
+				base.Queues[7] = _observer8.Values;
+
+				var d9 = new SingleAssignmentDisposable();
+				disposables[8] = d9;
+				_observer9 = new ZipObserver<T9>(_gate, this, 8, d9);
+				base.Queues[8] = _observer9.Values;
+
+				var d10 = new SingleAssignmentDisposable();
+				disposables[9] = d10;
+				_observer10 = new ZipObserver<T10>(_gate, this, 9, d10);
+				base.Queues[9] = _observer10.Values;
+
+				var d11 = new SingleAssignmentDisposable();
+				disposables[10] = d11;
+				_observer11 = new ZipObserver<T11>(_gate, this, 10, d11);
+				base.Queues[10] = _observer11.Values;
+
+				var d12 = new SingleAssignmentDisposable();
+				disposables[11] = d12;
+				_observer12 = new ZipObserver<T12>(_gate, this, 11, d12);
+				base.Queues[11] = _observer12.Values;
+
+                d1.Disposable = _parent._source1.SubscribeSafe(_observer1);
+                d2.Disposable = _parent._source2.SubscribeSafe(_observer2);
+                d3.Disposable = _parent._source3.SubscribeSafe(_observer3);
+                d4.Disposable = _parent._source4.SubscribeSafe(_observer4);
+                d5.Disposable = _parent._source5.SubscribeSafe(_observer5);
+                d6.Disposable = _parent._source6.SubscribeSafe(_observer6);
+                d7.Disposable = _parent._source7.SubscribeSafe(_observer7);
+                d8.Disposable = _parent._source8.SubscribeSafe(_observer8);
+                d9.Disposable = _parent._source9.SubscribeSafe(_observer9);
+                d10.Disposable = _parent._source10.SubscribeSafe(_observer10);
+                d11.Disposable = _parent._source11.SubscribeSafe(_observer11);
+                d12.Disposable = _parent._source12.SubscribeSafe(_observer12);
+
+				disposables[12] = Disposable.Create(() =>
+                {
+                    _observer1.Values.Clear();
+                    _observer2.Values.Clear();
+                    _observer3.Values.Clear();
+                    _observer4.Values.Clear();
+                    _observer5.Values.Clear();
+                    _observer6.Values.Clear();
+                    _observer7.Values.Clear();
+                    _observer8.Values.Clear();
+                    _observer9.Values.Clear();
+                    _observer10.Values.Clear();
+                    _observer11.Values.Clear();
+                    _observer12.Values.Clear();
+                });
+
+                return StableCompositeDisposable.Create(disposables);
+            }
+
+            protected override TResult GetResult()
+            {
+                return _parent._resultSelector(_observer1.Values.Dequeue(), _observer2.Values.Dequeue(), _observer3.Values.Dequeue(), _observer4.Values.Dequeue(), _observer5.Values.Dequeue(), _observer6.Values.Dequeue(), _observer7.Values.Dequeue(), _observer8.Values.Dequeue(), _observer9.Values.Dequeue(), _observer10.Values.Dequeue(), _observer11.Values.Dequeue(), _observer12.Values.Dequeue());
+            }
+        }
+    }
+
+	class Zip<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, TResult> : Producer<TResult>
+    {
+        private readonly IObservable<T1> _source1;
+        private readonly IObservable<T2> _source2;
+        private readonly IObservable<T3> _source3;
+        private readonly IObservable<T4> _source4;
+        private readonly IObservable<T5> _source5;
+        private readonly IObservable<T6> _source6;
+        private readonly IObservable<T7> _source7;
+        private readonly IObservable<T8> _source8;
+        private readonly IObservable<T9> _source9;
+        private readonly IObservable<T10> _source10;
+        private readonly IObservable<T11> _source11;
+        private readonly IObservable<T12> _source12;
+        private readonly IObservable<T13> _source13;
+        private readonly Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, TResult> _resultSelector;
+
+        public Zip(IObservable<T1> source1, IObservable<T2> source2, IObservable<T3> source3, IObservable<T4> source4, IObservable<T5> source5, IObservable<T6> source6, IObservable<T7> source7, IObservable<T8> source8, IObservable<T9> source9, IObservable<T10> source10, IObservable<T11> source11, IObservable<T12> source12, IObservable<T13> source13, Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, TResult> resultSelector)
+        {
+            _source1 = source1;
+            _source2 = source2;
+            _source3 = source3;
+            _source4 = source4;
+            _source5 = source5;
+            _source6 = source6;
+            _source7 = source7;
+            _source8 = source8;
+            _source9 = source9;
+            _source10 = source10;
+            _source11 = source11;
+            _source12 = source12;
+            _source13 = source13;
+            _resultSelector = resultSelector;
+        }
+
+        protected override IDisposable Run(IObserver<TResult> observer, IDisposable cancel, Action<IDisposable> setSink)
+        {
+            var sink = new _(this, observer, cancel);
+            setSink(sink);
+            return sink.Run();
+        }
+
+        class _ : ZipSink<TResult>
+        {
+            private readonly Zip<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, TResult> _parent;
+
+            public _(Zip<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, TResult> parent, IObserver<TResult> observer, IDisposable cancel)
+                : base(13, observer, cancel)
+            {
+                _parent = parent;
+            }
+
+            private ZipObserver<T1> _observer1;
+            private ZipObserver<T2> _observer2;
+            private ZipObserver<T3> _observer3;
+            private ZipObserver<T4> _observer4;
+            private ZipObserver<T5> _observer5;
+            private ZipObserver<T6> _observer6;
+            private ZipObserver<T7> _observer7;
+            private ZipObserver<T8> _observer8;
+            private ZipObserver<T9> _observer9;
+            private ZipObserver<T10> _observer10;
+            private ZipObserver<T11> _observer11;
+            private ZipObserver<T12> _observer12;
+            private ZipObserver<T13> _observer13;
+
+            public IDisposable Run()
+            {
+				var disposables = new IDisposable[14];
+
+				var d1 = new SingleAssignmentDisposable();
+				disposables[0] = d1;
+				_observer1 = new ZipObserver<T1>(_gate, this, 0, d1);
+				base.Queues[0] = _observer1.Values;
+
+				var d2 = new SingleAssignmentDisposable();
+				disposables[1] = d2;
+				_observer2 = new ZipObserver<T2>(_gate, this, 1, d2);
+				base.Queues[1] = _observer2.Values;
+
+				var d3 = new SingleAssignmentDisposable();
+				disposables[2] = d3;
+				_observer3 = new ZipObserver<T3>(_gate, this, 2, d3);
+				base.Queues[2] = _observer3.Values;
+
+				var d4 = new SingleAssignmentDisposable();
+				disposables[3] = d4;
+				_observer4 = new ZipObserver<T4>(_gate, this, 3, d4);
+				base.Queues[3] = _observer4.Values;
+
+				var d5 = new SingleAssignmentDisposable();
+				disposables[4] = d5;
+				_observer5 = new ZipObserver<T5>(_gate, this, 4, d5);
+				base.Queues[4] = _observer5.Values;
+
+				var d6 = new SingleAssignmentDisposable();
+				disposables[5] = d6;
+				_observer6 = new ZipObserver<T6>(_gate, this, 5, d6);
+				base.Queues[5] = _observer6.Values;
+
+				var d7 = new SingleAssignmentDisposable();
+				disposables[6] = d7;
+				_observer7 = new ZipObserver<T7>(_gate, this, 6, d7);
+				base.Queues[6] = _observer7.Values;
+
+				var d8 = new SingleAssignmentDisposable();
+				disposables[7] = d8;
+				_observer8 = new ZipObserver<T8>(_gate, this, 7, d8);
+				base.Queues[7] = _observer8.Values;
+
+				var d9 = new SingleAssignmentDisposable();
+				disposables[8] = d9;
+				_observer9 = new ZipObserver<T9>(_gate, this, 8, d9);
+				base.Queues[8] = _observer9.Values;
+
+				var d10 = new SingleAssignmentDisposable();
+				disposables[9] = d10;
+				_observer10 = new ZipObserver<T10>(_gate, this, 9, d10);
+				base.Queues[9] = _observer10.Values;
+
+				var d11 = new SingleAssignmentDisposable();
+				disposables[10] = d11;
+				_observer11 = new ZipObserver<T11>(_gate, this, 10, d11);
+				base.Queues[10] = _observer11.Values;
+
+				var d12 = new SingleAssignmentDisposable();
+				disposables[11] = d12;
+				_observer12 = new ZipObserver<T12>(_gate, this, 11, d12);
+				base.Queues[11] = _observer12.Values;
+
+				var d13 = new SingleAssignmentDisposable();
+				disposables[12] = d13;
+				_observer13 = new ZipObserver<T13>(_gate, this, 12, d13);
+				base.Queues[12] = _observer13.Values;
+
+                d1.Disposable = _parent._source1.SubscribeSafe(_observer1);
+                d2.Disposable = _parent._source2.SubscribeSafe(_observer2);
+                d3.Disposable = _parent._source3.SubscribeSafe(_observer3);
+                d4.Disposable = _parent._source4.SubscribeSafe(_observer4);
+                d5.Disposable = _parent._source5.SubscribeSafe(_observer5);
+                d6.Disposable = _parent._source6.SubscribeSafe(_observer6);
+                d7.Disposable = _parent._source7.SubscribeSafe(_observer7);
+                d8.Disposable = _parent._source8.SubscribeSafe(_observer8);
+                d9.Disposable = _parent._source9.SubscribeSafe(_observer9);
+                d10.Disposable = _parent._source10.SubscribeSafe(_observer10);
+                d11.Disposable = _parent._source11.SubscribeSafe(_observer11);
+                d12.Disposable = _parent._source12.SubscribeSafe(_observer12);
+                d13.Disposable = _parent._source13.SubscribeSafe(_observer13);
+
+				disposables[13] = Disposable.Create(() =>
+                {
+                    _observer1.Values.Clear();
+                    _observer2.Values.Clear();
+                    _observer3.Values.Clear();
+                    _observer4.Values.Clear();
+                    _observer5.Values.Clear();
+                    _observer6.Values.Clear();
+                    _observer7.Values.Clear();
+                    _observer8.Values.Clear();
+                    _observer9.Values.Clear();
+                    _observer10.Values.Clear();
+                    _observer11.Values.Clear();
+                    _observer12.Values.Clear();
+                    _observer13.Values.Clear();
+                });
+
+                return StableCompositeDisposable.Create(disposables);
+            }
+
+            protected override TResult GetResult()
+            {
+                return _parent._resultSelector(_observer1.Values.Dequeue(), _observer2.Values.Dequeue(), _observer3.Values.Dequeue(), _observer4.Values.Dequeue(), _observer5.Values.Dequeue(), _observer6.Values.Dequeue(), _observer7.Values.Dequeue(), _observer8.Values.Dequeue(), _observer9.Values.Dequeue(), _observer10.Values.Dequeue(), _observer11.Values.Dequeue(), _observer12.Values.Dequeue(), _observer13.Values.Dequeue());
+            }
+        }
+    }
+
+	class Zip<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, TResult> : Producer<TResult>
+    {
+        private readonly IObservable<T1> _source1;
+        private readonly IObservable<T2> _source2;
+        private readonly IObservable<T3> _source3;
+        private readonly IObservable<T4> _source4;
+        private readonly IObservable<T5> _source5;
+        private readonly IObservable<T6> _source6;
+        private readonly IObservable<T7> _source7;
+        private readonly IObservable<T8> _source8;
+        private readonly IObservable<T9> _source9;
+        private readonly IObservable<T10> _source10;
+        private readonly IObservable<T11> _source11;
+        private readonly IObservable<T12> _source12;
+        private readonly IObservable<T13> _source13;
+        private readonly IObservable<T14> _source14;
+        private readonly Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, TResult> _resultSelector;
+
+        public Zip(IObservable<T1> source1, IObservable<T2> source2, IObservable<T3> source3, IObservable<T4> source4, IObservable<T5> source5, IObservable<T6> source6, IObservable<T7> source7, IObservable<T8> source8, IObservable<T9> source9, IObservable<T10> source10, IObservable<T11> source11, IObservable<T12> source12, IObservable<T13> source13, IObservable<T14> source14, Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, TResult> resultSelector)
+        {
+            _source1 = source1;
+            _source2 = source2;
+            _source3 = source3;
+            _source4 = source4;
+            _source5 = source5;
+            _source6 = source6;
+            _source7 = source7;
+            _source8 = source8;
+            _source9 = source9;
+            _source10 = source10;
+            _source11 = source11;
+            _source12 = source12;
+            _source13 = source13;
+            _source14 = source14;
+            _resultSelector = resultSelector;
+        }
+
+        protected override IDisposable Run(IObserver<TResult> observer, IDisposable cancel, Action<IDisposable> setSink)
+        {
+            var sink = new _(this, observer, cancel);
+            setSink(sink);
+            return sink.Run();
+        }
+
+        class _ : ZipSink<TResult>
+        {
+            private readonly Zip<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, TResult> _parent;
+
+            public _(Zip<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, TResult> parent, IObserver<TResult> observer, IDisposable cancel)
+                : base(14, observer, cancel)
+            {
+                _parent = parent;
+            }
+
+            private ZipObserver<T1> _observer1;
+            private ZipObserver<T2> _observer2;
+            private ZipObserver<T3> _observer3;
+            private ZipObserver<T4> _observer4;
+            private ZipObserver<T5> _observer5;
+            private ZipObserver<T6> _observer6;
+            private ZipObserver<T7> _observer7;
+            private ZipObserver<T8> _observer8;
+            private ZipObserver<T9> _observer9;
+            private ZipObserver<T10> _observer10;
+            private ZipObserver<T11> _observer11;
+            private ZipObserver<T12> _observer12;
+            private ZipObserver<T13> _observer13;
+            private ZipObserver<T14> _observer14;
+
+            public IDisposable Run()
+            {
+				var disposables = new IDisposable[15];
+
+				var d1 = new SingleAssignmentDisposable();
+				disposables[0] = d1;
+				_observer1 = new ZipObserver<T1>(_gate, this, 0, d1);
+				base.Queues[0] = _observer1.Values;
+
+				var d2 = new SingleAssignmentDisposable();
+				disposables[1] = d2;
+				_observer2 = new ZipObserver<T2>(_gate, this, 1, d2);
+				base.Queues[1] = _observer2.Values;
+
+				var d3 = new SingleAssignmentDisposable();
+				disposables[2] = d3;
+				_observer3 = new ZipObserver<T3>(_gate, this, 2, d3);
+				base.Queues[2] = _observer3.Values;
+
+				var d4 = new SingleAssignmentDisposable();
+				disposables[3] = d4;
+				_observer4 = new ZipObserver<T4>(_gate, this, 3, d4);
+				base.Queues[3] = _observer4.Values;
+
+				var d5 = new SingleAssignmentDisposable();
+				disposables[4] = d5;
+				_observer5 = new ZipObserver<T5>(_gate, this, 4, d5);
+				base.Queues[4] = _observer5.Values;
+
+				var d6 = new SingleAssignmentDisposable();
+				disposables[5] = d6;
+				_observer6 = new ZipObserver<T6>(_gate, this, 5, d6);
+				base.Queues[5] = _observer6.Values;
+
+				var d7 = new SingleAssignmentDisposable();
+				disposables[6] = d7;
+				_observer7 = new ZipObserver<T7>(_gate, this, 6, d7);
+				base.Queues[6] = _observer7.Values;
+
+				var d8 = new SingleAssignmentDisposable();
+				disposables[7] = d8;
+				_observer8 = new ZipObserver<T8>(_gate, this, 7, d8);
+				base.Queues[7] = _observer8.Values;
+
+				var d9 = new SingleAssignmentDisposable();
+				disposables[8] = d9;
+				_observer9 = new ZipObserver<T9>(_gate, this, 8, d9);
+				base.Queues[8] = _observer9.Values;
+
+				var d10 = new SingleAssignmentDisposable();
+				disposables[9] = d10;
+				_observer10 = new ZipObserver<T10>(_gate, this, 9, d10);
+				base.Queues[9] = _observer10.Values;
+
+				var d11 = new SingleAssignmentDisposable();
+				disposables[10] = d11;
+				_observer11 = new ZipObserver<T11>(_gate, this, 10, d11);
+				base.Queues[10] = _observer11.Values;
+
+				var d12 = new SingleAssignmentDisposable();
+				disposables[11] = d12;
+				_observer12 = new ZipObserver<T12>(_gate, this, 11, d12);
+				base.Queues[11] = _observer12.Values;
+
+				var d13 = new SingleAssignmentDisposable();
+				disposables[12] = d13;
+				_observer13 = new ZipObserver<T13>(_gate, this, 12, d13);
+				base.Queues[12] = _observer13.Values;
+
+				var d14 = new SingleAssignmentDisposable();
+				disposables[13] = d14;
+				_observer14 = new ZipObserver<T14>(_gate, this, 13, d14);
+				base.Queues[13] = _observer14.Values;
+
+                d1.Disposable = _parent._source1.SubscribeSafe(_observer1);
+                d2.Disposable = _parent._source2.SubscribeSafe(_observer2);
+                d3.Disposable = _parent._source3.SubscribeSafe(_observer3);
+                d4.Disposable = _parent._source4.SubscribeSafe(_observer4);
+                d5.Disposable = _parent._source5.SubscribeSafe(_observer5);
+                d6.Disposable = _parent._source6.SubscribeSafe(_observer6);
+                d7.Disposable = _parent._source7.SubscribeSafe(_observer7);
+                d8.Disposable = _parent._source8.SubscribeSafe(_observer8);
+                d9.Disposable = _parent._source9.SubscribeSafe(_observer9);
+                d10.Disposable = _parent._source10.SubscribeSafe(_observer10);
+                d11.Disposable = _parent._source11.SubscribeSafe(_observer11);
+                d12.Disposable = _parent._source12.SubscribeSafe(_observer12);
+                d13.Disposable = _parent._source13.SubscribeSafe(_observer13);
+                d14.Disposable = _parent._source14.SubscribeSafe(_observer14);
+
+				disposables[14] = Disposable.Create(() =>
+                {
+                    _observer1.Values.Clear();
+                    _observer2.Values.Clear();
+                    _observer3.Values.Clear();
+                    _observer4.Values.Clear();
+                    _observer5.Values.Clear();
+                    _observer6.Values.Clear();
+                    _observer7.Values.Clear();
+                    _observer8.Values.Clear();
+                    _observer9.Values.Clear();
+                    _observer10.Values.Clear();
+                    _observer11.Values.Clear();
+                    _observer12.Values.Clear();
+                    _observer13.Values.Clear();
+                    _observer14.Values.Clear();
+                });
+
+                return StableCompositeDisposable.Create(disposables);
+            }
+
+            protected override TResult GetResult()
+            {
+                return _parent._resultSelector(_observer1.Values.Dequeue(), _observer2.Values.Dequeue(), _observer3.Values.Dequeue(), _observer4.Values.Dequeue(), _observer5.Values.Dequeue(), _observer6.Values.Dequeue(), _observer7.Values.Dequeue(), _observer8.Values.Dequeue(), _observer9.Values.Dequeue(), _observer10.Values.Dequeue(), _observer11.Values.Dequeue(), _observer12.Values.Dequeue(), _observer13.Values.Dequeue(), _observer14.Values.Dequeue());
+            }
+        }
+    }
+
+	class Zip<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, TResult> : Producer<TResult>
+    {
+        private readonly IObservable<T1> _source1;
+        private readonly IObservable<T2> _source2;
+        private readonly IObservable<T3> _source3;
+        private readonly IObservable<T4> _source4;
+        private readonly IObservable<T5> _source5;
+        private readonly IObservable<T6> _source6;
+        private readonly IObservable<T7> _source7;
+        private readonly IObservable<T8> _source8;
+        private readonly IObservable<T9> _source9;
+        private readonly IObservable<T10> _source10;
+        private readonly IObservable<T11> _source11;
+        private readonly IObservable<T12> _source12;
+        private readonly IObservable<T13> _source13;
+        private readonly IObservable<T14> _source14;
+        private readonly IObservable<T15> _source15;
+        private readonly Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, TResult> _resultSelector;
+
+        public Zip(IObservable<T1> source1, IObservable<T2> source2, IObservable<T3> source3, IObservable<T4> source4, IObservable<T5> source5, IObservable<T6> source6, IObservable<T7> source7, IObservable<T8> source8, IObservable<T9> source9, IObservable<T10> source10, IObservable<T11> source11, IObservable<T12> source12, IObservable<T13> source13, IObservable<T14> source14, IObservable<T15> source15, Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, TResult> resultSelector)
+        {
+            _source1 = source1;
+            _source2 = source2;
+            _source3 = source3;
+            _source4 = source4;
+            _source5 = source5;
+            _source6 = source6;
+            _source7 = source7;
+            _source8 = source8;
+            _source9 = source9;
+            _source10 = source10;
+            _source11 = source11;
+            _source12 = source12;
+            _source13 = source13;
+            _source14 = source14;
+            _source15 = source15;
+            _resultSelector = resultSelector;
+        }
+
+        protected override IDisposable Run(IObserver<TResult> observer, IDisposable cancel, Action<IDisposable> setSink)
+        {
+            var sink = new _(this, observer, cancel);
+            setSink(sink);
+            return sink.Run();
+        }
+
+        class _ : ZipSink<TResult>
+        {
+            private readonly Zip<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, TResult> _parent;
+
+            public _(Zip<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, TResult> parent, IObserver<TResult> observer, IDisposable cancel)
+                : base(15, observer, cancel)
+            {
+                _parent = parent;
+            }
+
+            private ZipObserver<T1> _observer1;
+            private ZipObserver<T2> _observer2;
+            private ZipObserver<T3> _observer3;
+            private ZipObserver<T4> _observer4;
+            private ZipObserver<T5> _observer5;
+            private ZipObserver<T6> _observer6;
+            private ZipObserver<T7> _observer7;
+            private ZipObserver<T8> _observer8;
+            private ZipObserver<T9> _observer9;
+            private ZipObserver<T10> _observer10;
+            private ZipObserver<T11> _observer11;
+            private ZipObserver<T12> _observer12;
+            private ZipObserver<T13> _observer13;
+            private ZipObserver<T14> _observer14;
+            private ZipObserver<T15> _observer15;
+
+            public IDisposable Run()
+            {
+				var disposables = new IDisposable[16];
+
+				var d1 = new SingleAssignmentDisposable();
+				disposables[0] = d1;
+				_observer1 = new ZipObserver<T1>(_gate, this, 0, d1);
+				base.Queues[0] = _observer1.Values;
+
+				var d2 = new SingleAssignmentDisposable();
+				disposables[1] = d2;
+				_observer2 = new ZipObserver<T2>(_gate, this, 1, d2);
+				base.Queues[1] = _observer2.Values;
+
+				var d3 = new SingleAssignmentDisposable();
+				disposables[2] = d3;
+				_observer3 = new ZipObserver<T3>(_gate, this, 2, d3);
+				base.Queues[2] = _observer3.Values;
+
+				var d4 = new SingleAssignmentDisposable();
+				disposables[3] = d4;
+				_observer4 = new ZipObserver<T4>(_gate, this, 3, d4);
+				base.Queues[3] = _observer4.Values;
+
+				var d5 = new SingleAssignmentDisposable();
+				disposables[4] = d5;
+				_observer5 = new ZipObserver<T5>(_gate, this, 4, d5);
+				base.Queues[4] = _observer5.Values;
+
+				var d6 = new SingleAssignmentDisposable();
+				disposables[5] = d6;
+				_observer6 = new ZipObserver<T6>(_gate, this, 5, d6);
+				base.Queues[5] = _observer6.Values;
+
+				var d7 = new SingleAssignmentDisposable();
+				disposables[6] = d7;
+				_observer7 = new ZipObserver<T7>(_gate, this, 6, d7);
+				base.Queues[6] = _observer7.Values;
+
+				var d8 = new SingleAssignmentDisposable();
+				disposables[7] = d8;
+				_observer8 = new ZipObserver<T8>(_gate, this, 7, d8);
+				base.Queues[7] = _observer8.Values;
+
+				var d9 = new SingleAssignmentDisposable();
+				disposables[8] = d9;
+				_observer9 = new ZipObserver<T9>(_gate, this, 8, d9);
+				base.Queues[8] = _observer9.Values;
+
+				var d10 = new SingleAssignmentDisposable();
+				disposables[9] = d10;
+				_observer10 = new ZipObserver<T10>(_gate, this, 9, d10);
+				base.Queues[9] = _observer10.Values;
+
+				var d11 = new SingleAssignmentDisposable();
+				disposables[10] = d11;
+				_observer11 = new ZipObserver<T11>(_gate, this, 10, d11);
+				base.Queues[10] = _observer11.Values;
+
+				var d12 = new SingleAssignmentDisposable();
+				disposables[11] = d12;
+				_observer12 = new ZipObserver<T12>(_gate, this, 11, d12);
+				base.Queues[11] = _observer12.Values;
+
+				var d13 = new SingleAssignmentDisposable();
+				disposables[12] = d13;
+				_observer13 = new ZipObserver<T13>(_gate, this, 12, d13);
+				base.Queues[12] = _observer13.Values;
+
+				var d14 = new SingleAssignmentDisposable();
+				disposables[13] = d14;
+				_observer14 = new ZipObserver<T14>(_gate, this, 13, d14);
+				base.Queues[13] = _observer14.Values;
+
+				var d15 = new SingleAssignmentDisposable();
+				disposables[14] = d15;
+				_observer15 = new ZipObserver<T15>(_gate, this, 14, d15);
+				base.Queues[14] = _observer15.Values;
+
+                d1.Disposable = _parent._source1.SubscribeSafe(_observer1);
+                d2.Disposable = _parent._source2.SubscribeSafe(_observer2);
+                d3.Disposable = _parent._source3.SubscribeSafe(_observer3);
+                d4.Disposable = _parent._source4.SubscribeSafe(_observer4);
+                d5.Disposable = _parent._source5.SubscribeSafe(_observer5);
+                d6.Disposable = _parent._source6.SubscribeSafe(_observer6);
+                d7.Disposable = _parent._source7.SubscribeSafe(_observer7);
+                d8.Disposable = _parent._source8.SubscribeSafe(_observer8);
+                d9.Disposable = _parent._source9.SubscribeSafe(_observer9);
+                d10.Disposable = _parent._source10.SubscribeSafe(_observer10);
+                d11.Disposable = _parent._source11.SubscribeSafe(_observer11);
+                d12.Disposable = _parent._source12.SubscribeSafe(_observer12);
+                d13.Disposable = _parent._source13.SubscribeSafe(_observer13);
+                d14.Disposable = _parent._source14.SubscribeSafe(_observer14);
+                d15.Disposable = _parent._source15.SubscribeSafe(_observer15);
+
+				disposables[15] = Disposable.Create(() =>
+                {
+                    _observer1.Values.Clear();
+                    _observer2.Values.Clear();
+                    _observer3.Values.Clear();
+                    _observer4.Values.Clear();
+                    _observer5.Values.Clear();
+                    _observer6.Values.Clear();
+                    _observer7.Values.Clear();
+                    _observer8.Values.Clear();
+                    _observer9.Values.Clear();
+                    _observer10.Values.Clear();
+                    _observer11.Values.Clear();
+                    _observer12.Values.Clear();
+                    _observer13.Values.Clear();
+                    _observer14.Values.Clear();
+                    _observer15.Values.Clear();
+                });
+
+                return StableCompositeDisposable.Create(disposables);
+            }
+
+            protected override TResult GetResult()
+            {
+                return _parent._resultSelector(_observer1.Values.Dequeue(), _observer2.Values.Dequeue(), _observer3.Values.Dequeue(), _observer4.Values.Dequeue(), _observer5.Values.Dequeue(), _observer6.Values.Dequeue(), _observer7.Values.Dequeue(), _observer8.Values.Dequeue(), _observer9.Values.Dequeue(), _observer10.Values.Dequeue(), _observer11.Values.Dequeue(), _observer12.Values.Dequeue(), _observer13.Values.Dequeue(), _observer14.Values.Dequeue(), _observer15.Values.Dequeue());
+            }
+        }
+    }
+
+	class Zip<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, TResult> : Producer<TResult>
+    {
+        private readonly IObservable<T1> _source1;
+        private readonly IObservable<T2> _source2;
+        private readonly IObservable<T3> _source3;
+        private readonly IObservable<T4> _source4;
+        private readonly IObservable<T5> _source5;
+        private readonly IObservable<T6> _source6;
+        private readonly IObservable<T7> _source7;
+        private readonly IObservable<T8> _source8;
+        private readonly IObservable<T9> _source9;
+        private readonly IObservable<T10> _source10;
+        private readonly IObservable<T11> _source11;
+        private readonly IObservable<T12> _source12;
+        private readonly IObservable<T13> _source13;
+        private readonly IObservable<T14> _source14;
+        private readonly IObservable<T15> _source15;
+        private readonly IObservable<T16> _source16;
+        private readonly Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, TResult> _resultSelector;
+
+        public Zip(IObservable<T1> source1, IObservable<T2> source2, IObservable<T3> source3, IObservable<T4> source4, IObservable<T5> source5, IObservable<T6> source6, IObservable<T7> source7, IObservable<T8> source8, IObservable<T9> source9, IObservable<T10> source10, IObservable<T11> source11, IObservable<T12> source12, IObservable<T13> source13, IObservable<T14> source14, IObservable<T15> source15, IObservable<T16> source16, Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, TResult> resultSelector)
+        {
+            _source1 = source1;
+            _source2 = source2;
+            _source3 = source3;
+            _source4 = source4;
+            _source5 = source5;
+            _source6 = source6;
+            _source7 = source7;
+            _source8 = source8;
+            _source9 = source9;
+            _source10 = source10;
+            _source11 = source11;
+            _source12 = source12;
+            _source13 = source13;
+            _source14 = source14;
+            _source15 = source15;
+            _source16 = source16;
+            _resultSelector = resultSelector;
+        }
+
+        protected override IDisposable Run(IObserver<TResult> observer, IDisposable cancel, Action<IDisposable> setSink)
+        {
+            var sink = new _(this, observer, cancel);
+            setSink(sink);
+            return sink.Run();
+        }
+
+        class _ : ZipSink<TResult>
+        {
+            private readonly Zip<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, TResult> _parent;
+
+            public _(Zip<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, TResult> parent, IObserver<TResult> observer, IDisposable cancel)
+                : base(16, observer, cancel)
+            {
+                _parent = parent;
+            }
+
+            private ZipObserver<T1> _observer1;
+            private ZipObserver<T2> _observer2;
+            private ZipObserver<T3> _observer3;
+            private ZipObserver<T4> _observer4;
+            private ZipObserver<T5> _observer5;
+            private ZipObserver<T6> _observer6;
+            private ZipObserver<T7> _observer7;
+            private ZipObserver<T8> _observer8;
+            private ZipObserver<T9> _observer9;
+            private ZipObserver<T10> _observer10;
+            private ZipObserver<T11> _observer11;
+            private ZipObserver<T12> _observer12;
+            private ZipObserver<T13> _observer13;
+            private ZipObserver<T14> _observer14;
+            private ZipObserver<T15> _observer15;
+            private ZipObserver<T16> _observer16;
+
+            public IDisposable Run()
+            {
+				var disposables = new IDisposable[17];
+
+				var d1 = new SingleAssignmentDisposable();
+				disposables[0] = d1;
+				_observer1 = new ZipObserver<T1>(_gate, this, 0, d1);
+				base.Queues[0] = _observer1.Values;
+
+				var d2 = new SingleAssignmentDisposable();
+				disposables[1] = d2;
+				_observer2 = new ZipObserver<T2>(_gate, this, 1, d2);
+				base.Queues[1] = _observer2.Values;
+
+				var d3 = new SingleAssignmentDisposable();
+				disposables[2] = d3;
+				_observer3 = new ZipObserver<T3>(_gate, this, 2, d3);
+				base.Queues[2] = _observer3.Values;
+
+				var d4 = new SingleAssignmentDisposable();
+				disposables[3] = d4;
+				_observer4 = new ZipObserver<T4>(_gate, this, 3, d4);
+				base.Queues[3] = _observer4.Values;
+
+				var d5 = new SingleAssignmentDisposable();
+				disposables[4] = d5;
+				_observer5 = new ZipObserver<T5>(_gate, this, 4, d5);
+				base.Queues[4] = _observer5.Values;
+
+				var d6 = new SingleAssignmentDisposable();
+				disposables[5] = d6;
+				_observer6 = new ZipObserver<T6>(_gate, this, 5, d6);
+				base.Queues[5] = _observer6.Values;
+
+				var d7 = new SingleAssignmentDisposable();
+				disposables[6] = d7;
+				_observer7 = new ZipObserver<T7>(_gate, this, 6, d7);
+				base.Queues[6] = _observer7.Values;
+
+				var d8 = new SingleAssignmentDisposable();
+				disposables[7] = d8;
+				_observer8 = new ZipObserver<T8>(_gate, this, 7, d8);
+				base.Queues[7] = _observer8.Values;
+
+				var d9 = new SingleAssignmentDisposable();
+				disposables[8] = d9;
+				_observer9 = new ZipObserver<T9>(_gate, this, 8, d9);
+				base.Queues[8] = _observer9.Values;
+
+				var d10 = new SingleAssignmentDisposable();
+				disposables[9] = d10;
+				_observer10 = new ZipObserver<T10>(_gate, this, 9, d10);
+				base.Queues[9] = _observer10.Values;
+
+				var d11 = new SingleAssignmentDisposable();
+				disposables[10] = d11;
+				_observer11 = new ZipObserver<T11>(_gate, this, 10, d11);
+				base.Queues[10] = _observer11.Values;
+
+				var d12 = new SingleAssignmentDisposable();
+				disposables[11] = d12;
+				_observer12 = new ZipObserver<T12>(_gate, this, 11, d12);
+				base.Queues[11] = _observer12.Values;
+
+				var d13 = new SingleAssignmentDisposable();
+				disposables[12] = d13;
+				_observer13 = new ZipObserver<T13>(_gate, this, 12, d13);
+				base.Queues[12] = _observer13.Values;
+
+				var d14 = new SingleAssignmentDisposable();
+				disposables[13] = d14;
+				_observer14 = new ZipObserver<T14>(_gate, this, 13, d14);
+				base.Queues[13] = _observer14.Values;
+
+				var d15 = new SingleAssignmentDisposable();
+				disposables[14] = d15;
+				_observer15 = new ZipObserver<T15>(_gate, this, 14, d15);
+				base.Queues[14] = _observer15.Values;
+
+				var d16 = new SingleAssignmentDisposable();
+				disposables[15] = d16;
+				_observer16 = new ZipObserver<T16>(_gate, this, 15, d16);
+				base.Queues[15] = _observer16.Values;
+
+                d1.Disposable = _parent._source1.SubscribeSafe(_observer1);
+                d2.Disposable = _parent._source2.SubscribeSafe(_observer2);
+                d3.Disposable = _parent._source3.SubscribeSafe(_observer3);
+                d4.Disposable = _parent._source4.SubscribeSafe(_observer4);
+                d5.Disposable = _parent._source5.SubscribeSafe(_observer5);
+                d6.Disposable = _parent._source6.SubscribeSafe(_observer6);
+                d7.Disposable = _parent._source7.SubscribeSafe(_observer7);
+                d8.Disposable = _parent._source8.SubscribeSafe(_observer8);
+                d9.Disposable = _parent._source9.SubscribeSafe(_observer9);
+                d10.Disposable = _parent._source10.SubscribeSafe(_observer10);
+                d11.Disposable = _parent._source11.SubscribeSafe(_observer11);
+                d12.Disposable = _parent._source12.SubscribeSafe(_observer12);
+                d13.Disposable = _parent._source13.SubscribeSafe(_observer13);
+                d14.Disposable = _parent._source14.SubscribeSafe(_observer14);
+                d15.Disposable = _parent._source15.SubscribeSafe(_observer15);
+                d16.Disposable = _parent._source16.SubscribeSafe(_observer16);
+
+				disposables[16] = Disposable.Create(() =>
+                {
+                    _observer1.Values.Clear();
+                    _observer2.Values.Clear();
+                    _observer3.Values.Clear();
+                    _observer4.Values.Clear();
+                    _observer5.Values.Clear();
+                    _observer6.Values.Clear();
+                    _observer7.Values.Clear();
+                    _observer8.Values.Clear();
+                    _observer9.Values.Clear();
+                    _observer10.Values.Clear();
+                    _observer11.Values.Clear();
+                    _observer12.Values.Clear();
+                    _observer13.Values.Clear();
+                    _observer14.Values.Clear();
+                    _observer15.Values.Clear();
+                    _observer16.Values.Clear();
+                });
+
+                return StableCompositeDisposable.Create(disposables);
+            }
+
+            protected override TResult GetResult()
+            {
+                return _parent._resultSelector(_observer1.Values.Dequeue(), _observer2.Values.Dequeue(), _observer3.Values.Dequeue(), _observer4.Values.Dequeue(), _observer5.Values.Dequeue(), _observer6.Values.Dequeue(), _observer7.Values.Dequeue(), _observer8.Values.Dequeue(), _observer9.Values.Dequeue(), _observer10.Values.Dequeue(), _observer11.Values.Dequeue(), _observer12.Values.Dequeue(), _observer13.Values.Dequeue(), _observer14.Values.Dequeue(), _observer15.Values.Dequeue(), _observer16.Values.Dequeue());
+            }
+        }
+    }
+
+
+#endif
+
+	#endregion
+
+	#endregion
+}
+#endif

+ 146 - 0
Rx.NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Zip.Generated.tt

@@ -0,0 +1,146 @@
+<#@ template debug="false" hostspecific="false" language="C#" #>
+<#@ assembly name="System.Core" #>
+<#@ import namespace="System.Linq" #>
+<#@ import namespace="System.Text" #>
+<#@ import namespace="System.Collections.Generic" #>
+<#@ output extension=".cs" #>
+// Copyright (c) Microsoft Open Technologies, Inc. All rights reserved. See License.txt in the project root for license information.
+
+#if !NO_PERF
+using System;
+using System.Collections.Generic;
+using System.Collections.ObjectModel;
+using System.Linq;
+using System.Reactive.Disposables;
+
+namespace System.Reactive.Linq.ObservableImpl
+{
+	#region [3,16]-ary
+
+    /* The following code is generated by a T4 template. */
+
+    #region CombineLatest auto-generated code (<#=DateTime.Now.ToString()#>)
+
+<#
+for (var i = 3; i <= 16; i++)
+{
+	var ts = string.Join(", ", Enumerable.Range(1, i).Select(j => "T" + j));
+	var os = string.Join(", ", Enumerable.Range(1, i).Select(j => "IObservable<T" + j + "> source" + j));
+	var vs = string.Join(", ", Enumerable.Range(1, i).Select(j => "_observer" + j + ".Values.Dequeue()"));
+
+	if (i == 5)
+	{
+#>
+#if !NO_LARGEARITY
+
+<#
+	}
+#>
+	class Zip<<#=ts#>, TResult> : Producer<TResult>
+    {
+<#
+for (var j = 1; j <= i; j++)
+{
+#>
+        private readonly IObservable<T<#=j#>> _source<#=j#>;
+<#
+}
+#>
+        private readonly Func<<#=ts#>, TResult> _resultSelector;
+
+        public Zip(<#=os#>, Func<<#=ts#>, TResult> resultSelector)
+        {
+<#
+for (var j = 1; j <= i; j++)
+{
+#>
+            _source<#=j#> = source<#=j#>;
+<#
+}
+#>
+            _resultSelector = resultSelector;
+        }
+
+        protected override IDisposable Run(IObserver<TResult> observer, IDisposable cancel, Action<IDisposable> setSink)
+        {
+            var sink = new _(this, observer, cancel);
+            setSink(sink);
+            return sink.Run();
+        }
+
+        class _ : ZipSink<TResult>
+        {
+            private readonly Zip<<#=ts#>, TResult> _parent;
+
+            public _(Zip<<#=ts#>, TResult> parent, IObserver<TResult> observer, IDisposable cancel)
+                : base(<#=i#>, observer, cancel)
+            {
+                _parent = parent;
+            }
+
+<#
+for (var j = 1; j <= i; j++)
+{
+#>
+            private ZipObserver<T<#=j#>> _observer<#=j#>;
+<#
+}
+#>
+
+            public IDisposable Run()
+            {
+				var disposables = new IDisposable[<#=i + 1#>];
+
+<#
+for (var j = 1; j <= i; j++)
+{
+#>
+				var d<#=j#> = new SingleAssignmentDisposable();
+				disposables[<#=j - 1#>] = d<#=j#>;
+				_observer<#=j#> = new ZipObserver<T<#=j#>>(_gate, this, <#=j - 1#>, d<#=j#>);
+				base.Queues[<#= j - 1#>] = _observer<#=j#>.Values;
+
+<#
+}
+
+for (var j = 1; j <= i; j++)
+{
+#>
+                d<#=j#>.Disposable = _parent._source<#=j#>.SubscribeSafe(_observer<#=j#>);
+<#
+}
+#>
+
+				disposables[<#=i#>] = Disposable.Create(() =>
+                {
+<#
+for (var j = 1; j <= i; j++)
+{
+#>
+                    _observer<#=j#>.Values.Clear();
+<#
+}
+#>
+                });
+
+                return StableCompositeDisposable.Create(disposables);
+            }
+
+            protected override TResult GetResult()
+            {
+                return _parent._resultSelector(<#=vs#>);
+            }
+        }
+    }
+
+<#
+}
+#>
+
+#endif
+
+	#endregion
+
+	#endregion
+}
+#endif

+ 0 - 1654
Rx.NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Zip.cs

@@ -362,1660 +362,6 @@ namespace System.Reactive.Linq.ObservableImpl
 
     #region [3,16]-ary
 
-    /* The following code is generated by a tool checked in to $/.../Source/Tools/CodeGenerators. */
-
-    #region Zip auto-generated code (6/10/2012 8:13:21 PM)
-
-    class Zip<T1, T2, T3, TResult> : Producer<TResult>
-    {
-        private readonly IObservable<T1> _source1;
-        private readonly IObservable<T2> _source2;
-        private readonly IObservable<T3> _source3;
-        private readonly Func<T1, T2, T3, TResult> _resultSelector;
-
-        public Zip(IObservable<T1> source1, IObservable<T2> source2, IObservable<T3> source3, Func<T1, T2, T3, TResult> resultSelector)
-        {
-            _source1 = source1;
-            _source2 = source2;
-            _source3 = source3;
-            _resultSelector = resultSelector;
-        }
-
-        protected override IDisposable Run(IObserver<TResult> observer, IDisposable cancel, Action<IDisposable> setSink)
-        {
-            var sink = new _(this, observer, cancel);
-            setSink(sink);
-            return sink.Run();
-        }
-
-        class _ : ZipSink<TResult>
-        {
-            private readonly Zip<T1, T2, T3, TResult> _parent;
-
-            public _(Zip<T1, T2, T3, TResult> parent, IObserver<TResult> observer, IDisposable cancel)
-                : base(3, observer, cancel)
-            {
-                _parent = parent;
-            }
-
-            private ZipObserver<T1> _observer1;
-            private ZipObserver<T2> _observer2;
-            private ZipObserver<T3> _observer3;
-
-            public IDisposable Run()
-            {
-                var subscriptions = new SingleAssignmentDisposable[3];
-                for (int i = 0; i < 3; i++)
-                    subscriptions[i] = new SingleAssignmentDisposable();
-
-                _observer1 = new ZipObserver<T1>(_gate, this, 0, subscriptions[0]);
-                _observer2 = new ZipObserver<T2>(_gate, this, 1, subscriptions[1]);
-                _observer3 = new ZipObserver<T3>(_gate, this, 2, subscriptions[2]);
-
-                base.Queues[0] = _observer1.Values;
-                base.Queues[1] = _observer2.Values;
-                base.Queues[2] = _observer3.Values;
-
-                subscriptions[0].Disposable = _parent._source1.SubscribeSafe(_observer1);
-                subscriptions[1].Disposable = _parent._source2.SubscribeSafe(_observer2);
-                subscriptions[2].Disposable = _parent._source3.SubscribeSafe(_observer3);
-
-                return new CompositeDisposable(subscriptions)
-                    {
-                        Disposable.Create(() =>
-                        {
-                            _observer1.Values.Clear();
-                            _observer2.Values.Clear();
-                            _observer3.Values.Clear();
-                        })
-                    };
-            }
-
-            protected override TResult GetResult()
-            {
-                return _parent._resultSelector(_observer1.Values.Dequeue(), _observer2.Values.Dequeue(), _observer3.Values.Dequeue());
-            }
-        }
-    }
-
-    class Zip<T1, T2, T3, T4, TResult> : Producer<TResult>
-    {
-        private readonly IObservable<T1> _source1;
-        private readonly IObservable<T2> _source2;
-        private readonly IObservable<T3> _source3;
-        private readonly IObservable<T4> _source4;
-        private readonly Func<T1, T2, T3, T4, TResult> _resultSelector;
-
-        public Zip(IObservable<T1> source1, IObservable<T2> source2, IObservable<T3> source3, IObservable<T4> source4, Func<T1, T2, T3, T4, TResult> resultSelector)
-        {
-            _source1 = source1;
-            _source2 = source2;
-            _source3 = source3;
-            _source4 = source4;
-            _resultSelector = resultSelector;
-        }
-
-        protected override IDisposable Run(IObserver<TResult> observer, IDisposable cancel, Action<IDisposable> setSink)
-        {
-            var sink = new _(this, observer, cancel);
-            setSink(sink);
-            return sink.Run();
-        }
-
-        class _ : ZipSink<TResult>
-        {
-            private readonly Zip<T1, T2, T3, T4, TResult> _parent;
-
-            public _(Zip<T1, T2, T3, T4, TResult> parent, IObserver<TResult> observer, IDisposable cancel)
-                : base(4, observer, cancel)
-            {
-                _parent = parent;
-            }
-
-            private ZipObserver<T1> _observer1;
-            private ZipObserver<T2> _observer2;
-            private ZipObserver<T3> _observer3;
-            private ZipObserver<T4> _observer4;
-
-            public IDisposable Run()
-            {
-                var subscriptions = new SingleAssignmentDisposable[4];
-                for (int i = 0; i < 4; i++)
-                    subscriptions[i] = new SingleAssignmentDisposable();
-
-                _observer1 = new ZipObserver<T1>(_gate, this, 0, subscriptions[0]);
-                _observer2 = new ZipObserver<T2>(_gate, this, 1, subscriptions[1]);
-                _observer3 = new ZipObserver<T3>(_gate, this, 2, subscriptions[2]);
-                _observer4 = new ZipObserver<T4>(_gate, this, 3, subscriptions[3]);
-
-                base.Queues[0] = _observer1.Values;
-                base.Queues[1] = _observer2.Values;
-                base.Queues[2] = _observer3.Values;
-                base.Queues[3] = _observer4.Values;
-
-                subscriptions[0].Disposable = _parent._source1.SubscribeSafe(_observer1);
-                subscriptions[1].Disposable = _parent._source2.SubscribeSafe(_observer2);
-                subscriptions[2].Disposable = _parent._source3.SubscribeSafe(_observer3);
-                subscriptions[3].Disposable = _parent._source4.SubscribeSafe(_observer4);
-
-                return new CompositeDisposable(subscriptions)
-                    {
-                        Disposable.Create(() =>
-                        {
-                            _observer1.Values.Clear();
-                            _observer2.Values.Clear();
-                            _observer3.Values.Clear();
-                            _observer4.Values.Clear();
-                        })
-                    };
-            }
-
-            protected override TResult GetResult()
-            {
-                return _parent._resultSelector(_observer1.Values.Dequeue(), _observer2.Values.Dequeue(), _observer3.Values.Dequeue(), _observer4.Values.Dequeue());
-            }
-        }
-    }
-
-#if !NO_LARGEARITY
-    class Zip<T1, T2, T3, T4, T5, TResult> : Producer<TResult>
-    {
-        private readonly IObservable<T1> _source1;
-        private readonly IObservable<T2> _source2;
-        private readonly IObservable<T3> _source3;
-        private readonly IObservable<T4> _source4;
-        private readonly IObservable<T5> _source5;
-        private readonly Func<T1, T2, T3, T4, T5, TResult> _resultSelector;
-
-        public Zip(IObservable<T1> source1, IObservable<T2> source2, IObservable<T3> source3, IObservable<T4> source4, IObservable<T5> source5, Func<T1, T2, T3, T4, T5, TResult> resultSelector)
-        {
-            _source1 = source1;
-            _source2 = source2;
-            _source3 = source3;
-            _source4 = source4;
-            _source5 = source5;
-            _resultSelector = resultSelector;
-        }
-
-        protected override IDisposable Run(IObserver<TResult> observer, IDisposable cancel, Action<IDisposable> setSink)
-        {
-            var sink = new _(this, observer, cancel);
-            setSink(sink);
-            return sink.Run();
-        }
-
-        class _ : ZipSink<TResult>
-        {
-            private readonly Zip<T1, T2, T3, T4, T5, TResult> _parent;
-
-            public _(Zip<T1, T2, T3, T4, T5, TResult> parent, IObserver<TResult> observer, IDisposable cancel)
-                : base(5, observer, cancel)
-            {
-                _parent = parent;
-            }
-
-            private ZipObserver<T1> _observer1;
-            private ZipObserver<T2> _observer2;
-            private ZipObserver<T3> _observer3;
-            private ZipObserver<T4> _observer4;
-            private ZipObserver<T5> _observer5;
-
-            public IDisposable Run()
-            {
-                var subscriptions = new SingleAssignmentDisposable[5];
-                for (int i = 0; i < 5; i++)
-                    subscriptions[i] = new SingleAssignmentDisposable();
-
-                _observer1 = new ZipObserver<T1>(_gate, this, 0, subscriptions[0]);
-                _observer2 = new ZipObserver<T2>(_gate, this, 1, subscriptions[1]);
-                _observer3 = new ZipObserver<T3>(_gate, this, 2, subscriptions[2]);
-                _observer4 = new ZipObserver<T4>(_gate, this, 3, subscriptions[3]);
-                _observer5 = new ZipObserver<T5>(_gate, this, 4, subscriptions[4]);
-
-                base.Queues[0] = _observer1.Values;
-                base.Queues[1] = _observer2.Values;
-                base.Queues[2] = _observer3.Values;
-                base.Queues[3] = _observer4.Values;
-                base.Queues[4] = _observer5.Values;
-
-                subscriptions[0].Disposable = _parent._source1.SubscribeSafe(_observer1);
-                subscriptions[1].Disposable = _parent._source2.SubscribeSafe(_observer2);
-                subscriptions[2].Disposable = _parent._source3.SubscribeSafe(_observer3);
-                subscriptions[3].Disposable = _parent._source4.SubscribeSafe(_observer4);
-                subscriptions[4].Disposable = _parent._source5.SubscribeSafe(_observer5);
-
-                return new CompositeDisposable(subscriptions)
-                    {
-                        Disposable.Create(() =>
-                        {
-                            _observer1.Values.Clear();
-                            _observer2.Values.Clear();
-                            _observer3.Values.Clear();
-                            _observer4.Values.Clear();
-                            _observer5.Values.Clear();
-                        })
-                    };
-            }
-
-            protected override TResult GetResult()
-            {
-                return _parent._resultSelector(_observer1.Values.Dequeue(), _observer2.Values.Dequeue(), _observer3.Values.Dequeue(), _observer4.Values.Dequeue(), _observer5.Values.Dequeue());
-            }
-        }
-    }
-
-    class Zip<T1, T2, T3, T4, T5, T6, TResult> : Producer<TResult>
-    {
-        private readonly IObservable<T1> _source1;
-        private readonly IObservable<T2> _source2;
-        private readonly IObservable<T3> _source3;
-        private readonly IObservable<T4> _source4;
-        private readonly IObservable<T5> _source5;
-        private readonly IObservable<T6> _source6;
-        private readonly Func<T1, T2, T3, T4, T5, T6, TResult> _resultSelector;
-
-        public Zip(IObservable<T1> source1, IObservable<T2> source2, IObservable<T3> source3, IObservable<T4> source4, IObservable<T5> source5, IObservable<T6> source6, Func<T1, T2, T3, T4, T5, T6, TResult> resultSelector)
-        {
-            _source1 = source1;
-            _source2 = source2;
-            _source3 = source3;
-            _source4 = source4;
-            _source5 = source5;
-            _source6 = source6;
-            _resultSelector = resultSelector;
-        }
-
-        protected override IDisposable Run(IObserver<TResult> observer, IDisposable cancel, Action<IDisposable> setSink)
-        {
-            var sink = new _(this, observer, cancel);
-            setSink(sink);
-            return sink.Run();
-        }
-
-        class _ : ZipSink<TResult>
-        {
-            private readonly Zip<T1, T2, T3, T4, T5, T6, TResult> _parent;
-
-            public _(Zip<T1, T2, T3, T4, T5, T6, TResult> parent, IObserver<TResult> observer, IDisposable cancel)
-                : base(6, observer, cancel)
-            {
-                _parent = parent;
-            }
-
-            private ZipObserver<T1> _observer1;
-            private ZipObserver<T2> _observer2;
-            private ZipObserver<T3> _observer3;
-            private ZipObserver<T4> _observer4;
-            private ZipObserver<T5> _observer5;
-            private ZipObserver<T6> _observer6;
-
-            public IDisposable Run()
-            {
-                var subscriptions = new SingleAssignmentDisposable[6];
-                for (int i = 0; i < 6; i++)
-                    subscriptions[i] = new SingleAssignmentDisposable();
-
-                _observer1 = new ZipObserver<T1>(_gate, this, 0, subscriptions[0]);
-                _observer2 = new ZipObserver<T2>(_gate, this, 1, subscriptions[1]);
-                _observer3 = new ZipObserver<T3>(_gate, this, 2, subscriptions[2]);
-                _observer4 = new ZipObserver<T4>(_gate, this, 3, subscriptions[3]);
-                _observer5 = new ZipObserver<T5>(_gate, this, 4, subscriptions[4]);
-                _observer6 = new ZipObserver<T6>(_gate, this, 5, subscriptions[5]);
-
-                base.Queues[0] = _observer1.Values;
-                base.Queues[1] = _observer2.Values;
-                base.Queues[2] = _observer3.Values;
-                base.Queues[3] = _observer4.Values;
-                base.Queues[4] = _observer5.Values;
-                base.Queues[5] = _observer6.Values;
-
-                subscriptions[0].Disposable = _parent._source1.SubscribeSafe(_observer1);
-                subscriptions[1].Disposable = _parent._source2.SubscribeSafe(_observer2);
-                subscriptions[2].Disposable = _parent._source3.SubscribeSafe(_observer3);
-                subscriptions[3].Disposable = _parent._source4.SubscribeSafe(_observer4);
-                subscriptions[4].Disposable = _parent._source5.SubscribeSafe(_observer5);
-                subscriptions[5].Disposable = _parent._source6.SubscribeSafe(_observer6);
-
-                return new CompositeDisposable(subscriptions)
-                    {
-                        Disposable.Create(() =>
-                        {
-                            _observer1.Values.Clear();
-                            _observer2.Values.Clear();
-                            _observer3.Values.Clear();
-                            _observer4.Values.Clear();
-                            _observer5.Values.Clear();
-                            _observer6.Values.Clear();
-                        })
-                    };
-            }
-
-            protected override TResult GetResult()
-            {
-                return _parent._resultSelector(_observer1.Values.Dequeue(), _observer2.Values.Dequeue(), _observer3.Values.Dequeue(), _observer4.Values.Dequeue(), _observer5.Values.Dequeue(), _observer6.Values.Dequeue());
-            }
-        }
-    }
-
-    class Zip<T1, T2, T3, T4, T5, T6, T7, TResult> : Producer<TResult>
-    {
-        private readonly IObservable<T1> _source1;
-        private readonly IObservable<T2> _source2;
-        private readonly IObservable<T3> _source3;
-        private readonly IObservable<T4> _source4;
-        private readonly IObservable<T5> _source5;
-        private readonly IObservable<T6> _source6;
-        private readonly IObservable<T7> _source7;
-        private readonly Func<T1, T2, T3, T4, T5, T6, T7, TResult> _resultSelector;
-
-        public Zip(IObservable<T1> source1, IObservable<T2> source2, IObservable<T3> source3, IObservable<T4> source4, IObservable<T5> source5, IObservable<T6> source6, IObservable<T7> source7, Func<T1, T2, T3, T4, T5, T6, T7, TResult> resultSelector)
-        {
-            _source1 = source1;
-            _source2 = source2;
-            _source3 = source3;
-            _source4 = source4;
-            _source5 = source5;
-            _source6 = source6;
-            _source7 = source7;
-            _resultSelector = resultSelector;
-        }
-
-        protected override IDisposable Run(IObserver<TResult> observer, IDisposable cancel, Action<IDisposable> setSink)
-        {
-            var sink = new _(this, observer, cancel);
-            setSink(sink);
-            return sink.Run();
-        }
-
-        class _ : ZipSink<TResult>
-        {
-            private readonly Zip<T1, T2, T3, T4, T5, T6, T7, TResult> _parent;
-
-            public _(Zip<T1, T2, T3, T4, T5, T6, T7, TResult> parent, IObserver<TResult> observer, IDisposable cancel)
-                : base(7, observer, cancel)
-            {
-                _parent = parent;
-            }
-
-            private ZipObserver<T1> _observer1;
-            private ZipObserver<T2> _observer2;
-            private ZipObserver<T3> _observer3;
-            private ZipObserver<T4> _observer4;
-            private ZipObserver<T5> _observer5;
-            private ZipObserver<T6> _observer6;
-            private ZipObserver<T7> _observer7;
-
-            public IDisposable Run()
-            {
-                var subscriptions = new SingleAssignmentDisposable[7];
-                for (int i = 0; i < 7; i++)
-                    subscriptions[i] = new SingleAssignmentDisposable();
-
-                _observer1 = new ZipObserver<T1>(_gate, this, 0, subscriptions[0]);
-                _observer2 = new ZipObserver<T2>(_gate, this, 1, subscriptions[1]);
-                _observer3 = new ZipObserver<T3>(_gate, this, 2, subscriptions[2]);
-                _observer4 = new ZipObserver<T4>(_gate, this, 3, subscriptions[3]);
-                _observer5 = new ZipObserver<T5>(_gate, this, 4, subscriptions[4]);
-                _observer6 = new ZipObserver<T6>(_gate, this, 5, subscriptions[5]);
-                _observer7 = new ZipObserver<T7>(_gate, this, 6, subscriptions[6]);
-
-                base.Queues[0] = _observer1.Values;
-                base.Queues[1] = _observer2.Values;
-                base.Queues[2] = _observer3.Values;
-                base.Queues[3] = _observer4.Values;
-                base.Queues[4] = _observer5.Values;
-                base.Queues[5] = _observer6.Values;
-                base.Queues[6] = _observer7.Values;
-
-                subscriptions[0].Disposable = _parent._source1.SubscribeSafe(_observer1);
-                subscriptions[1].Disposable = _parent._source2.SubscribeSafe(_observer2);
-                subscriptions[2].Disposable = _parent._source3.SubscribeSafe(_observer3);
-                subscriptions[3].Disposable = _parent._source4.SubscribeSafe(_observer4);
-                subscriptions[4].Disposable = _parent._source5.SubscribeSafe(_observer5);
-                subscriptions[5].Disposable = _parent._source6.SubscribeSafe(_observer6);
-                subscriptions[6].Disposable = _parent._source7.SubscribeSafe(_observer7);
-
-                return new CompositeDisposable(subscriptions)
-                    {
-                        Disposable.Create(() =>
-                        {
-                            _observer1.Values.Clear();
-                            _observer2.Values.Clear();
-                            _observer3.Values.Clear();
-                            _observer4.Values.Clear();
-                            _observer5.Values.Clear();
-                            _observer6.Values.Clear();
-                            _observer7.Values.Clear();
-                        })
-                    };
-            }
-
-            protected override TResult GetResult()
-            {
-                return _parent._resultSelector(_observer1.Values.Dequeue(), _observer2.Values.Dequeue(), _observer3.Values.Dequeue(), _observer4.Values.Dequeue(), _observer5.Values.Dequeue(), _observer6.Values.Dequeue(), _observer7.Values.Dequeue());
-            }
-        }
-    }
-
-    class Zip<T1, T2, T3, T4, T5, T6, T7, T8, TResult> : Producer<TResult>
-    {
-        private readonly IObservable<T1> _source1;
-        private readonly IObservable<T2> _source2;
-        private readonly IObservable<T3> _source3;
-        private readonly IObservable<T4> _source4;
-        private readonly IObservable<T5> _source5;
-        private readonly IObservable<T6> _source6;
-        private readonly IObservable<T7> _source7;
-        private readonly IObservable<T8> _source8;
-        private readonly Func<T1, T2, T3, T4, T5, T6, T7, T8, TResult> _resultSelector;
-
-        public Zip(IObservable<T1> source1, IObservable<T2> source2, IObservable<T3> source3, IObservable<T4> source4, IObservable<T5> source5, IObservable<T6> source6, IObservable<T7> source7, IObservable<T8> source8, Func<T1, T2, T3, T4, T5, T6, T7, T8, TResult> resultSelector)
-        {
-            _source1 = source1;
-            _source2 = source2;
-            _source3 = source3;
-            _source4 = source4;
-            _source5 = source5;
-            _source6 = source6;
-            _source7 = source7;
-            _source8 = source8;
-            _resultSelector = resultSelector;
-        }
-
-        protected override IDisposable Run(IObserver<TResult> observer, IDisposable cancel, Action<IDisposable> setSink)
-        {
-            var sink = new _(this, observer, cancel);
-            setSink(sink);
-            return sink.Run();
-        }
-
-        class _ : ZipSink<TResult>
-        {
-            private readonly Zip<T1, T2, T3, T4, T5, T6, T7, T8, TResult> _parent;
-
-            public _(Zip<T1, T2, T3, T4, T5, T6, T7, T8, TResult> parent, IObserver<TResult> observer, IDisposable cancel)
-                : base(8, observer, cancel)
-            {
-                _parent = parent;
-            }
-
-            private ZipObserver<T1> _observer1;
-            private ZipObserver<T2> _observer2;
-            private ZipObserver<T3> _observer3;
-            private ZipObserver<T4> _observer4;
-            private ZipObserver<T5> _observer5;
-            private ZipObserver<T6> _observer6;
-            private ZipObserver<T7> _observer7;
-            private ZipObserver<T8> _observer8;
-
-            public IDisposable Run()
-            {
-                var subscriptions = new SingleAssignmentDisposable[8];
-                for (int i = 0; i < 8; i++)
-                    subscriptions[i] = new SingleAssignmentDisposable();
-
-                _observer1 = new ZipObserver<T1>(_gate, this, 0, subscriptions[0]);
-                _observer2 = new ZipObserver<T2>(_gate, this, 1, subscriptions[1]);
-                _observer3 = new ZipObserver<T3>(_gate, this, 2, subscriptions[2]);
-                _observer4 = new ZipObserver<T4>(_gate, this, 3, subscriptions[3]);
-                _observer5 = new ZipObserver<T5>(_gate, this, 4, subscriptions[4]);
-                _observer6 = new ZipObserver<T6>(_gate, this, 5, subscriptions[5]);
-                _observer7 = new ZipObserver<T7>(_gate, this, 6, subscriptions[6]);
-                _observer8 = new ZipObserver<T8>(_gate, this, 7, subscriptions[7]);
-
-                base.Queues[0] = _observer1.Values;
-                base.Queues[1] = _observer2.Values;
-                base.Queues[2] = _observer3.Values;
-                base.Queues[3] = _observer4.Values;
-                base.Queues[4] = _observer5.Values;
-                base.Queues[5] = _observer6.Values;
-                base.Queues[6] = _observer7.Values;
-                base.Queues[7] = _observer8.Values;
-
-                subscriptions[0].Disposable = _parent._source1.SubscribeSafe(_observer1);
-                subscriptions[1].Disposable = _parent._source2.SubscribeSafe(_observer2);
-                subscriptions[2].Disposable = _parent._source3.SubscribeSafe(_observer3);
-                subscriptions[3].Disposable = _parent._source4.SubscribeSafe(_observer4);
-                subscriptions[4].Disposable = _parent._source5.SubscribeSafe(_observer5);
-                subscriptions[5].Disposable = _parent._source6.SubscribeSafe(_observer6);
-                subscriptions[6].Disposable = _parent._source7.SubscribeSafe(_observer7);
-                subscriptions[7].Disposable = _parent._source8.SubscribeSafe(_observer8);
-
-                return new CompositeDisposable(subscriptions)
-                    {
-                        Disposable.Create(() =>
-                        {
-                            _observer1.Values.Clear();
-                            _observer2.Values.Clear();
-                            _observer3.Values.Clear();
-                            _observer4.Values.Clear();
-                            _observer5.Values.Clear();
-                            _observer6.Values.Clear();
-                            _observer7.Values.Clear();
-                            _observer8.Values.Clear();
-                        })
-                    };
-            }
-
-            protected override TResult GetResult()
-            {
-                return _parent._resultSelector(_observer1.Values.Dequeue(), _observer2.Values.Dequeue(), _observer3.Values.Dequeue(), _observer4.Values.Dequeue(), _observer5.Values.Dequeue(), _observer6.Values.Dequeue(), _observer7.Values.Dequeue(), _observer8.Values.Dequeue());
-            }
-        }
-    }
-
-    class Zip<T1, T2, T3, T4, T5, T6, T7, T8, T9, TResult> : Producer<TResult>
-    {
-        private readonly IObservable<T1> _source1;
-        private readonly IObservable<T2> _source2;
-        private readonly IObservable<T3> _source3;
-        private readonly IObservable<T4> _source4;
-        private readonly IObservable<T5> _source5;
-        private readonly IObservable<T6> _source6;
-        private readonly IObservable<T7> _source7;
-        private readonly IObservable<T8> _source8;
-        private readonly IObservable<T9> _source9;
-        private readonly Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, TResult> _resultSelector;
-
-        public Zip(IObservable<T1> source1, IObservable<T2> source2, IObservable<T3> source3, IObservable<T4> source4, IObservable<T5> source5, IObservable<T6> source6, IObservable<T7> source7, IObservable<T8> source8, IObservable<T9> source9, Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, TResult> resultSelector)
-        {
-            _source1 = source1;
-            _source2 = source2;
-            _source3 = source3;
-            _source4 = source4;
-            _source5 = source5;
-            _source6 = source6;
-            _source7 = source7;
-            _source8 = source8;
-            _source9 = source9;
-            _resultSelector = resultSelector;
-        }
-
-        protected override IDisposable Run(IObserver<TResult> observer, IDisposable cancel, Action<IDisposable> setSink)
-        {
-            var sink = new _(this, observer, cancel);
-            setSink(sink);
-            return sink.Run();
-        }
-
-        class _ : ZipSink<TResult>
-        {
-            private readonly Zip<T1, T2, T3, T4, T5, T6, T7, T8, T9, TResult> _parent;
-
-            public _(Zip<T1, T2, T3, T4, T5, T6, T7, T8, T9, TResult> parent, IObserver<TResult> observer, IDisposable cancel)
-                : base(9, observer, cancel)
-            {
-                _parent = parent;
-            }
-
-            private ZipObserver<T1> _observer1;
-            private ZipObserver<T2> _observer2;
-            private ZipObserver<T3> _observer3;
-            private ZipObserver<T4> _observer4;
-            private ZipObserver<T5> _observer5;
-            private ZipObserver<T6> _observer6;
-            private ZipObserver<T7> _observer7;
-            private ZipObserver<T8> _observer8;
-            private ZipObserver<T9> _observer9;
-
-            public IDisposable Run()
-            {
-                var subscriptions = new SingleAssignmentDisposable[9];
-                for (int i = 0; i < 9; i++)
-                    subscriptions[i] = new SingleAssignmentDisposable();
-
-                _observer1 = new ZipObserver<T1>(_gate, this, 0, subscriptions[0]);
-                _observer2 = new ZipObserver<T2>(_gate, this, 1, subscriptions[1]);
-                _observer3 = new ZipObserver<T3>(_gate, this, 2, subscriptions[2]);
-                _observer4 = new ZipObserver<T4>(_gate, this, 3, subscriptions[3]);
-                _observer5 = new ZipObserver<T5>(_gate, this, 4, subscriptions[4]);
-                _observer6 = new ZipObserver<T6>(_gate, this, 5, subscriptions[5]);
-                _observer7 = new ZipObserver<T7>(_gate, this, 6, subscriptions[6]);
-                _observer8 = new ZipObserver<T8>(_gate, this, 7, subscriptions[7]);
-                _observer9 = new ZipObserver<T9>(_gate, this, 8, subscriptions[8]);
-
-                base.Queues[0] = _observer1.Values;
-                base.Queues[1] = _observer2.Values;
-                base.Queues[2] = _observer3.Values;
-                base.Queues[3] = _observer4.Values;
-                base.Queues[4] = _observer5.Values;
-                base.Queues[5] = _observer6.Values;
-                base.Queues[6] = _observer7.Values;
-                base.Queues[7] = _observer8.Values;
-                base.Queues[8] = _observer9.Values;
-
-                subscriptions[0].Disposable = _parent._source1.SubscribeSafe(_observer1);
-                subscriptions[1].Disposable = _parent._source2.SubscribeSafe(_observer2);
-                subscriptions[2].Disposable = _parent._source3.SubscribeSafe(_observer3);
-                subscriptions[3].Disposable = _parent._source4.SubscribeSafe(_observer4);
-                subscriptions[4].Disposable = _parent._source5.SubscribeSafe(_observer5);
-                subscriptions[5].Disposable = _parent._source6.SubscribeSafe(_observer6);
-                subscriptions[6].Disposable = _parent._source7.SubscribeSafe(_observer7);
-                subscriptions[7].Disposable = _parent._source8.SubscribeSafe(_observer8);
-                subscriptions[8].Disposable = _parent._source9.SubscribeSafe(_observer9);
-
-                return new CompositeDisposable(subscriptions)
-                    {
-                        Disposable.Create(() =>
-                        {
-                            _observer1.Values.Clear();
-                            _observer2.Values.Clear();
-                            _observer3.Values.Clear();
-                            _observer4.Values.Clear();
-                            _observer5.Values.Clear();
-                            _observer6.Values.Clear();
-                            _observer7.Values.Clear();
-                            _observer8.Values.Clear();
-                            _observer9.Values.Clear();
-                        })
-                    };
-            }
-
-            protected override TResult GetResult()
-            {
-                return _parent._resultSelector(_observer1.Values.Dequeue(), _observer2.Values.Dequeue(), _observer3.Values.Dequeue(), _observer4.Values.Dequeue(), _observer5.Values.Dequeue(), _observer6.Values.Dequeue(), _observer7.Values.Dequeue(), _observer8.Values.Dequeue(), _observer9.Values.Dequeue());
-            }
-        }
-    }
-
-    class Zip<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, TResult> : Producer<TResult>
-    {
-        private readonly IObservable<T1> _source1;
-        private readonly IObservable<T2> _source2;
-        private readonly IObservable<T3> _source3;
-        private readonly IObservable<T4> _source4;
-        private readonly IObservable<T5> _source5;
-        private readonly IObservable<T6> _source6;
-        private readonly IObservable<T7> _source7;
-        private readonly IObservable<T8> _source8;
-        private readonly IObservable<T9> _source9;
-        private readonly IObservable<T10> _source10;
-        private readonly Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, TResult> _resultSelector;
-
-        public Zip(IObservable<T1> source1, IObservable<T2> source2, IObservable<T3> source3, IObservable<T4> source4, IObservable<T5> source5, IObservable<T6> source6, IObservable<T7> source7, IObservable<T8> source8, IObservable<T9> source9, IObservable<T10> source10, Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, TResult> resultSelector)
-        {
-            _source1 = source1;
-            _source2 = source2;
-            _source3 = source3;
-            _source4 = source4;
-            _source5 = source5;
-            _source6 = source6;
-            _source7 = source7;
-            _source8 = source8;
-            _source9 = source9;
-            _source10 = source10;
-            _resultSelector = resultSelector;
-        }
-
-        protected override IDisposable Run(IObserver<TResult> observer, IDisposable cancel, Action<IDisposable> setSink)
-        {
-            var sink = new _(this, observer, cancel);
-            setSink(sink);
-            return sink.Run();
-        }
-
-        class _ : ZipSink<TResult>
-        {
-            private readonly Zip<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, TResult> _parent;
-
-            public _(Zip<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, TResult> parent, IObserver<TResult> observer, IDisposable cancel)
-                : base(10, observer, cancel)
-            {
-                _parent = parent;
-            }
-
-            private ZipObserver<T1> _observer1;
-            private ZipObserver<T2> _observer2;
-            private ZipObserver<T3> _observer3;
-            private ZipObserver<T4> _observer4;
-            private ZipObserver<T5> _observer5;
-            private ZipObserver<T6> _observer6;
-            private ZipObserver<T7> _observer7;
-            private ZipObserver<T8> _observer8;
-            private ZipObserver<T9> _observer9;
-            private ZipObserver<T10> _observer10;
-
-            public IDisposable Run()
-            {
-                var subscriptions = new SingleAssignmentDisposable[10];
-                for (int i = 0; i < 10; i++)
-                    subscriptions[i] = new SingleAssignmentDisposable();
-
-                _observer1 = new ZipObserver<T1>(_gate, this, 0, subscriptions[0]);
-                _observer2 = new ZipObserver<T2>(_gate, this, 1, subscriptions[1]);
-                _observer3 = new ZipObserver<T3>(_gate, this, 2, subscriptions[2]);
-                _observer4 = new ZipObserver<T4>(_gate, this, 3, subscriptions[3]);
-                _observer5 = new ZipObserver<T5>(_gate, this, 4, subscriptions[4]);
-                _observer6 = new ZipObserver<T6>(_gate, this, 5, subscriptions[5]);
-                _observer7 = new ZipObserver<T7>(_gate, this, 6, subscriptions[6]);
-                _observer8 = new ZipObserver<T8>(_gate, this, 7, subscriptions[7]);
-                _observer9 = new ZipObserver<T9>(_gate, this, 8, subscriptions[8]);
-                _observer10 = new ZipObserver<T10>(_gate, this, 9, subscriptions[9]);
-
-                base.Queues[0] = _observer1.Values;
-                base.Queues[1] = _observer2.Values;
-                base.Queues[2] = _observer3.Values;
-                base.Queues[3] = _observer4.Values;
-                base.Queues[4] = _observer5.Values;
-                base.Queues[5] = _observer6.Values;
-                base.Queues[6] = _observer7.Values;
-                base.Queues[7] = _observer8.Values;
-                base.Queues[8] = _observer9.Values;
-                base.Queues[9] = _observer10.Values;
-
-                subscriptions[0].Disposable = _parent._source1.SubscribeSafe(_observer1);
-                subscriptions[1].Disposable = _parent._source2.SubscribeSafe(_observer2);
-                subscriptions[2].Disposable = _parent._source3.SubscribeSafe(_observer3);
-                subscriptions[3].Disposable = _parent._source4.SubscribeSafe(_observer4);
-                subscriptions[4].Disposable = _parent._source5.SubscribeSafe(_observer5);
-                subscriptions[5].Disposable = _parent._source6.SubscribeSafe(_observer6);
-                subscriptions[6].Disposable = _parent._source7.SubscribeSafe(_observer7);
-                subscriptions[7].Disposable = _parent._source8.SubscribeSafe(_observer8);
-                subscriptions[8].Disposable = _parent._source9.SubscribeSafe(_observer9);
-                subscriptions[9].Disposable = _parent._source10.SubscribeSafe(_observer10);
-
-                return new CompositeDisposable(subscriptions)
-                    {
-                        Disposable.Create(() =>
-                        {
-                            _observer1.Values.Clear();
-                            _observer2.Values.Clear();
-                            _observer3.Values.Clear();
-                            _observer4.Values.Clear();
-                            _observer5.Values.Clear();
-                            _observer6.Values.Clear();
-                            _observer7.Values.Clear();
-                            _observer8.Values.Clear();
-                            _observer9.Values.Clear();
-                            _observer10.Values.Clear();
-                        })
-                    };
-            }
-
-            protected override TResult GetResult()
-            {
-                return _parent._resultSelector(_observer1.Values.Dequeue(), _observer2.Values.Dequeue(), _observer3.Values.Dequeue(), _observer4.Values.Dequeue(), _observer5.Values.Dequeue(), _observer6.Values.Dequeue(), _observer7.Values.Dequeue(), _observer8.Values.Dequeue(), _observer9.Values.Dequeue(), _observer10.Values.Dequeue());
-            }
-        }
-    }
-
-    class Zip<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, TResult> : Producer<TResult>
-    {
-        private readonly IObservable<T1> _source1;
-        private readonly IObservable<T2> _source2;
-        private readonly IObservable<T3> _source3;
-        private readonly IObservable<T4> _source4;
-        private readonly IObservable<T5> _source5;
-        private readonly IObservable<T6> _source6;
-        private readonly IObservable<T7> _source7;
-        private readonly IObservable<T8> _source8;
-        private readonly IObservable<T9> _source9;
-        private readonly IObservable<T10> _source10;
-        private readonly IObservable<T11> _source11;
-        private readonly Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, TResult> _resultSelector;
-
-        public Zip(IObservable<T1> source1, IObservable<T2> source2, IObservable<T3> source3, IObservable<T4> source4, IObservable<T5> source5, IObservable<T6> source6, IObservable<T7> source7, IObservable<T8> source8, IObservable<T9> source9, IObservable<T10> source10, IObservable<T11> source11, Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, TResult> resultSelector)
-        {
-            _source1 = source1;
-            _source2 = source2;
-            _source3 = source3;
-            _source4 = source4;
-            _source5 = source5;
-            _source6 = source6;
-            _source7 = source7;
-            _source8 = source8;
-            _source9 = source9;
-            _source10 = source10;
-            _source11 = source11;
-            _resultSelector = resultSelector;
-        }
-
-        protected override IDisposable Run(IObserver<TResult> observer, IDisposable cancel, Action<IDisposable> setSink)
-        {
-            var sink = new _(this, observer, cancel);
-            setSink(sink);
-            return sink.Run();
-        }
-
-        class _ : ZipSink<TResult>
-        {
-            private readonly Zip<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, TResult> _parent;
-
-            public _(Zip<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, TResult> parent, IObserver<TResult> observer, IDisposable cancel)
-                : base(11, observer, cancel)
-            {
-                _parent = parent;
-            }
-
-            private ZipObserver<T1> _observer1;
-            private ZipObserver<T2> _observer2;
-            private ZipObserver<T3> _observer3;
-            private ZipObserver<T4> _observer4;
-            private ZipObserver<T5> _observer5;
-            private ZipObserver<T6> _observer6;
-            private ZipObserver<T7> _observer7;
-            private ZipObserver<T8> _observer8;
-            private ZipObserver<T9> _observer9;
-            private ZipObserver<T10> _observer10;
-            private ZipObserver<T11> _observer11;
-
-            public IDisposable Run()
-            {
-                var subscriptions = new SingleAssignmentDisposable[11];
-                for (int i = 0; i < 11; i++)
-                    subscriptions[i] = new SingleAssignmentDisposable();
-
-                _observer1 = new ZipObserver<T1>(_gate, this, 0, subscriptions[0]);
-                _observer2 = new ZipObserver<T2>(_gate, this, 1, subscriptions[1]);
-                _observer3 = new ZipObserver<T3>(_gate, this, 2, subscriptions[2]);
-                _observer4 = new ZipObserver<T4>(_gate, this, 3, subscriptions[3]);
-                _observer5 = new ZipObserver<T5>(_gate, this, 4, subscriptions[4]);
-                _observer6 = new ZipObserver<T6>(_gate, this, 5, subscriptions[5]);
-                _observer7 = new ZipObserver<T7>(_gate, this, 6, subscriptions[6]);
-                _observer8 = new ZipObserver<T8>(_gate, this, 7, subscriptions[7]);
-                _observer9 = new ZipObserver<T9>(_gate, this, 8, subscriptions[8]);
-                _observer10 = new ZipObserver<T10>(_gate, this, 9, subscriptions[9]);
-                _observer11 = new ZipObserver<T11>(_gate, this, 10, subscriptions[10]);
-
-                base.Queues[0] = _observer1.Values;
-                base.Queues[1] = _observer2.Values;
-                base.Queues[2] = _observer3.Values;
-                base.Queues[3] = _observer4.Values;
-                base.Queues[4] = _observer5.Values;
-                base.Queues[5] = _observer6.Values;
-                base.Queues[6] = _observer7.Values;
-                base.Queues[7] = _observer8.Values;
-                base.Queues[8] = _observer9.Values;
-                base.Queues[9] = _observer10.Values;
-                base.Queues[10] = _observer11.Values;
-
-                subscriptions[0].Disposable = _parent._source1.SubscribeSafe(_observer1);
-                subscriptions[1].Disposable = _parent._source2.SubscribeSafe(_observer2);
-                subscriptions[2].Disposable = _parent._source3.SubscribeSafe(_observer3);
-                subscriptions[3].Disposable = _parent._source4.SubscribeSafe(_observer4);
-                subscriptions[4].Disposable = _parent._source5.SubscribeSafe(_observer5);
-                subscriptions[5].Disposable = _parent._source6.SubscribeSafe(_observer6);
-                subscriptions[6].Disposable = _parent._source7.SubscribeSafe(_observer7);
-                subscriptions[7].Disposable = _parent._source8.SubscribeSafe(_observer8);
-                subscriptions[8].Disposable = _parent._source9.SubscribeSafe(_observer9);
-                subscriptions[9].Disposable = _parent._source10.SubscribeSafe(_observer10);
-                subscriptions[10].Disposable = _parent._source11.SubscribeSafe(_observer11);
-
-                return new CompositeDisposable(subscriptions)
-                    {
-                        Disposable.Create(() =>
-                        {
-                            _observer1.Values.Clear();
-                            _observer2.Values.Clear();
-                            _observer3.Values.Clear();
-                            _observer4.Values.Clear();
-                            _observer5.Values.Clear();
-                            _observer6.Values.Clear();
-                            _observer7.Values.Clear();
-                            _observer8.Values.Clear();
-                            _observer9.Values.Clear();
-                            _observer10.Values.Clear();
-                            _observer11.Values.Clear();
-                        })
-                    };
-            }
-
-            protected override TResult GetResult()
-            {
-                return _parent._resultSelector(_observer1.Values.Dequeue(), _observer2.Values.Dequeue(), _observer3.Values.Dequeue(), _observer4.Values.Dequeue(), _observer5.Values.Dequeue(), _observer6.Values.Dequeue(), _observer7.Values.Dequeue(), _observer8.Values.Dequeue(), _observer9.Values.Dequeue(), _observer10.Values.Dequeue(), _observer11.Values.Dequeue());
-            }
-        }
-    }
-
-    class Zip<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, TResult> : Producer<TResult>
-    {
-        private readonly IObservable<T1> _source1;
-        private readonly IObservable<T2> _source2;
-        private readonly IObservable<T3> _source3;
-        private readonly IObservable<T4> _source4;
-        private readonly IObservable<T5> _source5;
-        private readonly IObservable<T6> _source6;
-        private readonly IObservable<T7> _source7;
-        private readonly IObservable<T8> _source8;
-        private readonly IObservable<T9> _source9;
-        private readonly IObservable<T10> _source10;
-        private readonly IObservable<T11> _source11;
-        private readonly IObservable<T12> _source12;
-        private readonly Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, TResult> _resultSelector;
-
-        public Zip(IObservable<T1> source1, IObservable<T2> source2, IObservable<T3> source3, IObservable<T4> source4, IObservable<T5> source5, IObservable<T6> source6, IObservable<T7> source7, IObservable<T8> source8, IObservable<T9> source9, IObservable<T10> source10, IObservable<T11> source11, IObservable<T12> source12, Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, TResult> resultSelector)
-        {
-            _source1 = source1;
-            _source2 = source2;
-            _source3 = source3;
-            _source4 = source4;
-            _source5 = source5;
-            _source6 = source6;
-            _source7 = source7;
-            _source8 = source8;
-            _source9 = source9;
-            _source10 = source10;
-            _source11 = source11;
-            _source12 = source12;
-            _resultSelector = resultSelector;
-        }
-
-        protected override IDisposable Run(IObserver<TResult> observer, IDisposable cancel, Action<IDisposable> setSink)
-        {
-            var sink = new _(this, observer, cancel);
-            setSink(sink);
-            return sink.Run();
-        }
-
-        class _ : ZipSink<TResult>
-        {
-            private readonly Zip<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, TResult> _parent;
-
-            public _(Zip<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, TResult> parent, IObserver<TResult> observer, IDisposable cancel)
-                : base(12, observer, cancel)
-            {
-                _parent = parent;
-            }
-
-            private ZipObserver<T1> _observer1;
-            private ZipObserver<T2> _observer2;
-            private ZipObserver<T3> _observer3;
-            private ZipObserver<T4> _observer4;
-            private ZipObserver<T5> _observer5;
-            private ZipObserver<T6> _observer6;
-            private ZipObserver<T7> _observer7;
-            private ZipObserver<T8> _observer8;
-            private ZipObserver<T9> _observer9;
-            private ZipObserver<T10> _observer10;
-            private ZipObserver<T11> _observer11;
-            private ZipObserver<T12> _observer12;
-
-            public IDisposable Run()
-            {
-                var subscriptions = new SingleAssignmentDisposable[12];
-                for (int i = 0; i < 12; i++)
-                    subscriptions[i] = new SingleAssignmentDisposable();
-
-                _observer1 = new ZipObserver<T1>(_gate, this, 0, subscriptions[0]);
-                _observer2 = new ZipObserver<T2>(_gate, this, 1, subscriptions[1]);
-                _observer3 = new ZipObserver<T3>(_gate, this, 2, subscriptions[2]);
-                _observer4 = new ZipObserver<T4>(_gate, this, 3, subscriptions[3]);
-                _observer5 = new ZipObserver<T5>(_gate, this, 4, subscriptions[4]);
-                _observer6 = new ZipObserver<T6>(_gate, this, 5, subscriptions[5]);
-                _observer7 = new ZipObserver<T7>(_gate, this, 6, subscriptions[6]);
-                _observer8 = new ZipObserver<T8>(_gate, this, 7, subscriptions[7]);
-                _observer9 = new ZipObserver<T9>(_gate, this, 8, subscriptions[8]);
-                _observer10 = new ZipObserver<T10>(_gate, this, 9, subscriptions[9]);
-                _observer11 = new ZipObserver<T11>(_gate, this, 10, subscriptions[10]);
-                _observer12 = new ZipObserver<T12>(_gate, this, 11, subscriptions[11]);
-
-                base.Queues[0] = _observer1.Values;
-                base.Queues[1] = _observer2.Values;
-                base.Queues[2] = _observer3.Values;
-                base.Queues[3] = _observer4.Values;
-                base.Queues[4] = _observer5.Values;
-                base.Queues[5] = _observer6.Values;
-                base.Queues[6] = _observer7.Values;
-                base.Queues[7] = _observer8.Values;
-                base.Queues[8] = _observer9.Values;
-                base.Queues[9] = _observer10.Values;
-                base.Queues[10] = _observer11.Values;
-                base.Queues[11] = _observer12.Values;
-
-                subscriptions[0].Disposable = _parent._source1.SubscribeSafe(_observer1);
-                subscriptions[1].Disposable = _parent._source2.SubscribeSafe(_observer2);
-                subscriptions[2].Disposable = _parent._source3.SubscribeSafe(_observer3);
-                subscriptions[3].Disposable = _parent._source4.SubscribeSafe(_observer4);
-                subscriptions[4].Disposable = _parent._source5.SubscribeSafe(_observer5);
-                subscriptions[5].Disposable = _parent._source6.SubscribeSafe(_observer6);
-                subscriptions[6].Disposable = _parent._source7.SubscribeSafe(_observer7);
-                subscriptions[7].Disposable = _parent._source8.SubscribeSafe(_observer8);
-                subscriptions[8].Disposable = _parent._source9.SubscribeSafe(_observer9);
-                subscriptions[9].Disposable = _parent._source10.SubscribeSafe(_observer10);
-                subscriptions[10].Disposable = _parent._source11.SubscribeSafe(_observer11);
-                subscriptions[11].Disposable = _parent._source12.SubscribeSafe(_observer12);
-
-                return new CompositeDisposable(subscriptions)
-                    {
-                        Disposable.Create(() =>
-                        {
-                            _observer1.Values.Clear();
-                            _observer2.Values.Clear();
-                            _observer3.Values.Clear();
-                            _observer4.Values.Clear();
-                            _observer5.Values.Clear();
-                            _observer6.Values.Clear();
-                            _observer7.Values.Clear();
-                            _observer8.Values.Clear();
-                            _observer9.Values.Clear();
-                            _observer10.Values.Clear();
-                            _observer11.Values.Clear();
-                            _observer12.Values.Clear();
-                        })
-                    };
-            }
-
-            protected override TResult GetResult()
-            {
-                return _parent._resultSelector(_observer1.Values.Dequeue(), _observer2.Values.Dequeue(), _observer3.Values.Dequeue(), _observer4.Values.Dequeue(), _observer5.Values.Dequeue(), _observer6.Values.Dequeue(), _observer7.Values.Dequeue(), _observer8.Values.Dequeue(), _observer9.Values.Dequeue(), _observer10.Values.Dequeue(), _observer11.Values.Dequeue(), _observer12.Values.Dequeue());
-            }
-        }
-    }
-
-    class Zip<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, TResult> : Producer<TResult>
-    {
-        private readonly IObservable<T1> _source1;
-        private readonly IObservable<T2> _source2;
-        private readonly IObservable<T3> _source3;
-        private readonly IObservable<T4> _source4;
-        private readonly IObservable<T5> _source5;
-        private readonly IObservable<T6> _source6;
-        private readonly IObservable<T7> _source7;
-        private readonly IObservable<T8> _source8;
-        private readonly IObservable<T9> _source9;
-        private readonly IObservable<T10> _source10;
-        private readonly IObservable<T11> _source11;
-        private readonly IObservable<T12> _source12;
-        private readonly IObservable<T13> _source13;
-        private readonly Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, TResult> _resultSelector;
-
-        public Zip(IObservable<T1> source1, IObservable<T2> source2, IObservable<T3> source3, IObservable<T4> source4, IObservable<T5> source5, IObservable<T6> source6, IObservable<T7> source7, IObservable<T8> source8, IObservable<T9> source9, IObservable<T10> source10, IObservable<T11> source11, IObservable<T12> source12, IObservable<T13> source13, Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, TResult> resultSelector)
-        {
-            _source1 = source1;
-            _source2 = source2;
-            _source3 = source3;
-            _source4 = source4;
-            _source5 = source5;
-            _source6 = source6;
-            _source7 = source7;
-            _source8 = source8;
-            _source9 = source9;
-            _source10 = source10;
-            _source11 = source11;
-            _source12 = source12;
-            _source13 = source13;
-            _resultSelector = resultSelector;
-        }
-
-        protected override IDisposable Run(IObserver<TResult> observer, IDisposable cancel, Action<IDisposable> setSink)
-        {
-            var sink = new _(this, observer, cancel);
-            setSink(sink);
-            return sink.Run();
-        }
-
-        class _ : ZipSink<TResult>
-        {
-            private readonly Zip<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, TResult> _parent;
-
-            public _(Zip<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, TResult> parent, IObserver<TResult> observer, IDisposable cancel)
-                : base(13, observer, cancel)
-            {
-                _parent = parent;
-            }
-
-            private ZipObserver<T1> _observer1;
-            private ZipObserver<T2> _observer2;
-            private ZipObserver<T3> _observer3;
-            private ZipObserver<T4> _observer4;
-            private ZipObserver<T5> _observer5;
-            private ZipObserver<T6> _observer6;
-            private ZipObserver<T7> _observer7;
-            private ZipObserver<T8> _observer8;
-            private ZipObserver<T9> _observer9;
-            private ZipObserver<T10> _observer10;
-            private ZipObserver<T11> _observer11;
-            private ZipObserver<T12> _observer12;
-            private ZipObserver<T13> _observer13;
-
-            public IDisposable Run()
-            {
-                var subscriptions = new SingleAssignmentDisposable[13];
-                for (int i = 0; i < 13; i++)
-                    subscriptions[i] = new SingleAssignmentDisposable();
-
-                _observer1 = new ZipObserver<T1>(_gate, this, 0, subscriptions[0]);
-                _observer2 = new ZipObserver<T2>(_gate, this, 1, subscriptions[1]);
-                _observer3 = new ZipObserver<T3>(_gate, this, 2, subscriptions[2]);
-                _observer4 = new ZipObserver<T4>(_gate, this, 3, subscriptions[3]);
-                _observer5 = new ZipObserver<T5>(_gate, this, 4, subscriptions[4]);
-                _observer6 = new ZipObserver<T6>(_gate, this, 5, subscriptions[5]);
-                _observer7 = new ZipObserver<T7>(_gate, this, 6, subscriptions[6]);
-                _observer8 = new ZipObserver<T8>(_gate, this, 7, subscriptions[7]);
-                _observer9 = new ZipObserver<T9>(_gate, this, 8, subscriptions[8]);
-                _observer10 = new ZipObserver<T10>(_gate, this, 9, subscriptions[9]);
-                _observer11 = new ZipObserver<T11>(_gate, this, 10, subscriptions[10]);
-                _observer12 = new ZipObserver<T12>(_gate, this, 11, subscriptions[11]);
-                _observer13 = new ZipObserver<T13>(_gate, this, 12, subscriptions[12]);
-
-                base.Queues[0] = _observer1.Values;
-                base.Queues[1] = _observer2.Values;
-                base.Queues[2] = _observer3.Values;
-                base.Queues[3] = _observer4.Values;
-                base.Queues[4] = _observer5.Values;
-                base.Queues[5] = _observer6.Values;
-                base.Queues[6] = _observer7.Values;
-                base.Queues[7] = _observer8.Values;
-                base.Queues[8] = _observer9.Values;
-                base.Queues[9] = _observer10.Values;
-                base.Queues[10] = _observer11.Values;
-                base.Queues[11] = _observer12.Values;
-                base.Queues[12] = _observer13.Values;
-
-                subscriptions[0].Disposable = _parent._source1.SubscribeSafe(_observer1);
-                subscriptions[1].Disposable = _parent._source2.SubscribeSafe(_observer2);
-                subscriptions[2].Disposable = _parent._source3.SubscribeSafe(_observer3);
-                subscriptions[3].Disposable = _parent._source4.SubscribeSafe(_observer4);
-                subscriptions[4].Disposable = _parent._source5.SubscribeSafe(_observer5);
-                subscriptions[5].Disposable = _parent._source6.SubscribeSafe(_observer6);
-                subscriptions[6].Disposable = _parent._source7.SubscribeSafe(_observer7);
-                subscriptions[7].Disposable = _parent._source8.SubscribeSafe(_observer8);
-                subscriptions[8].Disposable = _parent._source9.SubscribeSafe(_observer9);
-                subscriptions[9].Disposable = _parent._source10.SubscribeSafe(_observer10);
-                subscriptions[10].Disposable = _parent._source11.SubscribeSafe(_observer11);
-                subscriptions[11].Disposable = _parent._source12.SubscribeSafe(_observer12);
-                subscriptions[12].Disposable = _parent._source13.SubscribeSafe(_observer13);
-
-                return new CompositeDisposable(subscriptions)
-                    {
-                        Disposable.Create(() =>
-                        {
-                            _observer1.Values.Clear();
-                            _observer2.Values.Clear();
-                            _observer3.Values.Clear();
-                            _observer4.Values.Clear();
-                            _observer5.Values.Clear();
-                            _observer6.Values.Clear();
-                            _observer7.Values.Clear();
-                            _observer8.Values.Clear();
-                            _observer9.Values.Clear();
-                            _observer10.Values.Clear();
-                            _observer11.Values.Clear();
-                            _observer12.Values.Clear();
-                            _observer13.Values.Clear();
-                        })
-                    };
-            }
-
-            protected override TResult GetResult()
-            {
-                return _parent._resultSelector(_observer1.Values.Dequeue(), _observer2.Values.Dequeue(), _observer3.Values.Dequeue(), _observer4.Values.Dequeue(), _observer5.Values.Dequeue(), _observer6.Values.Dequeue(), _observer7.Values.Dequeue(), _observer8.Values.Dequeue(), _observer9.Values.Dequeue(), _observer10.Values.Dequeue(), _observer11.Values.Dequeue(), _observer12.Values.Dequeue(), _observer13.Values.Dequeue());
-            }
-        }
-    }
-
-    class Zip<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, TResult> : Producer<TResult>
-    {
-        private readonly IObservable<T1> _source1;
-        private readonly IObservable<T2> _source2;
-        private readonly IObservable<T3> _source3;
-        private readonly IObservable<T4> _source4;
-        private readonly IObservable<T5> _source5;
-        private readonly IObservable<T6> _source6;
-        private readonly IObservable<T7> _source7;
-        private readonly IObservable<T8> _source8;
-        private readonly IObservable<T9> _source9;
-        private readonly IObservable<T10> _source10;
-        private readonly IObservable<T11> _source11;
-        private readonly IObservable<T12> _source12;
-        private readonly IObservable<T13> _source13;
-        private readonly IObservable<T14> _source14;
-        private readonly Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, TResult> _resultSelector;
-
-        public Zip(IObservable<T1> source1, IObservable<T2> source2, IObservable<T3> source3, IObservable<T4> source4, IObservable<T5> source5, IObservable<T6> source6, IObservable<T7> source7, IObservable<T8> source8, IObservable<T9> source9, IObservable<T10> source10, IObservable<T11> source11, IObservable<T12> source12, IObservable<T13> source13, IObservable<T14> source14, Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, TResult> resultSelector)
-        {
-            _source1 = source1;
-            _source2 = source2;
-            _source3 = source3;
-            _source4 = source4;
-            _source5 = source5;
-            _source6 = source6;
-            _source7 = source7;
-            _source8 = source8;
-            _source9 = source9;
-            _source10 = source10;
-            _source11 = source11;
-            _source12 = source12;
-            _source13 = source13;
-            _source14 = source14;
-            _resultSelector = resultSelector;
-        }
-
-        protected override IDisposable Run(IObserver<TResult> observer, IDisposable cancel, Action<IDisposable> setSink)
-        {
-            var sink = new _(this, observer, cancel);
-            setSink(sink);
-            return sink.Run();
-        }
-
-        class _ : ZipSink<TResult>
-        {
-            private readonly Zip<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, TResult> _parent;
-
-            public _(Zip<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, TResult> parent, IObserver<TResult> observer, IDisposable cancel)
-                : base(14, observer, cancel)
-            {
-                _parent = parent;
-            }
-
-            private ZipObserver<T1> _observer1;
-            private ZipObserver<T2> _observer2;
-            private ZipObserver<T3> _observer3;
-            private ZipObserver<T4> _observer4;
-            private ZipObserver<T5> _observer5;
-            private ZipObserver<T6> _observer6;
-            private ZipObserver<T7> _observer7;
-            private ZipObserver<T8> _observer8;
-            private ZipObserver<T9> _observer9;
-            private ZipObserver<T10> _observer10;
-            private ZipObserver<T11> _observer11;
-            private ZipObserver<T12> _observer12;
-            private ZipObserver<T13> _observer13;
-            private ZipObserver<T14> _observer14;
-
-            public IDisposable Run()
-            {
-                var subscriptions = new SingleAssignmentDisposable[14];
-                for (int i = 0; i < 14; i++)
-                    subscriptions[i] = new SingleAssignmentDisposable();
-
-                _observer1 = new ZipObserver<T1>(_gate, this, 0, subscriptions[0]);
-                _observer2 = new ZipObserver<T2>(_gate, this, 1, subscriptions[1]);
-                _observer3 = new ZipObserver<T3>(_gate, this, 2, subscriptions[2]);
-                _observer4 = new ZipObserver<T4>(_gate, this, 3, subscriptions[3]);
-                _observer5 = new ZipObserver<T5>(_gate, this, 4, subscriptions[4]);
-                _observer6 = new ZipObserver<T6>(_gate, this, 5, subscriptions[5]);
-                _observer7 = new ZipObserver<T7>(_gate, this, 6, subscriptions[6]);
-                _observer8 = new ZipObserver<T8>(_gate, this, 7, subscriptions[7]);
-                _observer9 = new ZipObserver<T9>(_gate, this, 8, subscriptions[8]);
-                _observer10 = new ZipObserver<T10>(_gate, this, 9, subscriptions[9]);
-                _observer11 = new ZipObserver<T11>(_gate, this, 10, subscriptions[10]);
-                _observer12 = new ZipObserver<T12>(_gate, this, 11, subscriptions[11]);
-                _observer13 = new ZipObserver<T13>(_gate, this, 12, subscriptions[12]);
-                _observer14 = new ZipObserver<T14>(_gate, this, 13, subscriptions[13]);
-
-                base.Queues[0] = _observer1.Values;
-                base.Queues[1] = _observer2.Values;
-                base.Queues[2] = _observer3.Values;
-                base.Queues[3] = _observer4.Values;
-                base.Queues[4] = _observer5.Values;
-                base.Queues[5] = _observer6.Values;
-                base.Queues[6] = _observer7.Values;
-                base.Queues[7] = _observer8.Values;
-                base.Queues[8] = _observer9.Values;
-                base.Queues[9] = _observer10.Values;
-                base.Queues[10] = _observer11.Values;
-                base.Queues[11] = _observer12.Values;
-                base.Queues[12] = _observer13.Values;
-                base.Queues[13] = _observer14.Values;
-
-                subscriptions[0].Disposable = _parent._source1.SubscribeSafe(_observer1);
-                subscriptions[1].Disposable = _parent._source2.SubscribeSafe(_observer2);
-                subscriptions[2].Disposable = _parent._source3.SubscribeSafe(_observer3);
-                subscriptions[3].Disposable = _parent._source4.SubscribeSafe(_observer4);
-                subscriptions[4].Disposable = _parent._source5.SubscribeSafe(_observer5);
-                subscriptions[5].Disposable = _parent._source6.SubscribeSafe(_observer6);
-                subscriptions[6].Disposable = _parent._source7.SubscribeSafe(_observer7);
-                subscriptions[7].Disposable = _parent._source8.SubscribeSafe(_observer8);
-                subscriptions[8].Disposable = _parent._source9.SubscribeSafe(_observer9);
-                subscriptions[9].Disposable = _parent._source10.SubscribeSafe(_observer10);
-                subscriptions[10].Disposable = _parent._source11.SubscribeSafe(_observer11);
-                subscriptions[11].Disposable = _parent._source12.SubscribeSafe(_observer12);
-                subscriptions[12].Disposable = _parent._source13.SubscribeSafe(_observer13);
-                subscriptions[13].Disposable = _parent._source14.SubscribeSafe(_observer14);
-
-                return new CompositeDisposable(subscriptions)
-                    {
-                        Disposable.Create(() =>
-                        {
-                            _observer1.Values.Clear();
-                            _observer2.Values.Clear();
-                            _observer3.Values.Clear();
-                            _observer4.Values.Clear();
-                            _observer5.Values.Clear();
-                            _observer6.Values.Clear();
-                            _observer7.Values.Clear();
-                            _observer8.Values.Clear();
-                            _observer9.Values.Clear();
-                            _observer10.Values.Clear();
-                            _observer11.Values.Clear();
-                            _observer12.Values.Clear();
-                            _observer13.Values.Clear();
-                            _observer14.Values.Clear();
-                        })
-                    };
-            }
-
-            protected override TResult GetResult()
-            {
-                return _parent._resultSelector(_observer1.Values.Dequeue(), _observer2.Values.Dequeue(), _observer3.Values.Dequeue(), _observer4.Values.Dequeue(), _observer5.Values.Dequeue(), _observer6.Values.Dequeue(), _observer7.Values.Dequeue(), _observer8.Values.Dequeue(), _observer9.Values.Dequeue(), _observer10.Values.Dequeue(), _observer11.Values.Dequeue(), _observer12.Values.Dequeue(), _observer13.Values.Dequeue(), _observer14.Values.Dequeue());
-            }
-        }
-    }
-
-    class Zip<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, TResult> : Producer<TResult>
-    {
-        private readonly IObservable<T1> _source1;
-        private readonly IObservable<T2> _source2;
-        private readonly IObservable<T3> _source3;
-        private readonly IObservable<T4> _source4;
-        private readonly IObservable<T5> _source5;
-        private readonly IObservable<T6> _source6;
-        private readonly IObservable<T7> _source7;
-        private readonly IObservable<T8> _source8;
-        private readonly IObservable<T9> _source9;
-        private readonly IObservable<T10> _source10;
-        private readonly IObservable<T11> _source11;
-        private readonly IObservable<T12> _source12;
-        private readonly IObservable<T13> _source13;
-        private readonly IObservable<T14> _source14;
-        private readonly IObservable<T15> _source15;
-        private readonly Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, TResult> _resultSelector;
-
-        public Zip(IObservable<T1> source1, IObservable<T2> source2, IObservable<T3> source3, IObservable<T4> source4, IObservable<T5> source5, IObservable<T6> source6, IObservable<T7> source7, IObservable<T8> source8, IObservable<T9> source9, IObservable<T10> source10, IObservable<T11> source11, IObservable<T12> source12, IObservable<T13> source13, IObservable<T14> source14, IObservable<T15> source15, Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, TResult> resultSelector)
-        {
-            _source1 = source1;
-            _source2 = source2;
-            _source3 = source3;
-            _source4 = source4;
-            _source5 = source5;
-            _source6 = source6;
-            _source7 = source7;
-            _source8 = source8;
-            _source9 = source9;
-            _source10 = source10;
-            _source11 = source11;
-            _source12 = source12;
-            _source13 = source13;
-            _source14 = source14;
-            _source15 = source15;
-            _resultSelector = resultSelector;
-        }
-
-        protected override IDisposable Run(IObserver<TResult> observer, IDisposable cancel, Action<IDisposable> setSink)
-        {
-            var sink = new _(this, observer, cancel);
-            setSink(sink);
-            return sink.Run();
-        }
-
-        class _ : ZipSink<TResult>
-        {
-            private readonly Zip<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, TResult> _parent;
-
-            public _(Zip<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, TResult> parent, IObserver<TResult> observer, IDisposable cancel)
-                : base(15, observer, cancel)
-            {
-                _parent = parent;
-            }
-
-            private ZipObserver<T1> _observer1;
-            private ZipObserver<T2> _observer2;
-            private ZipObserver<T3> _observer3;
-            private ZipObserver<T4> _observer4;
-            private ZipObserver<T5> _observer5;
-            private ZipObserver<T6> _observer6;
-            private ZipObserver<T7> _observer7;
-            private ZipObserver<T8> _observer8;
-            private ZipObserver<T9> _observer9;
-            private ZipObserver<T10> _observer10;
-            private ZipObserver<T11> _observer11;
-            private ZipObserver<T12> _observer12;
-            private ZipObserver<T13> _observer13;
-            private ZipObserver<T14> _observer14;
-            private ZipObserver<T15> _observer15;
-
-            public IDisposable Run()
-            {
-                var subscriptions = new SingleAssignmentDisposable[15];
-                for (int i = 0; i < 15; i++)
-                    subscriptions[i] = new SingleAssignmentDisposable();
-
-                _observer1 = new ZipObserver<T1>(_gate, this, 0, subscriptions[0]);
-                _observer2 = new ZipObserver<T2>(_gate, this, 1, subscriptions[1]);
-                _observer3 = new ZipObserver<T3>(_gate, this, 2, subscriptions[2]);
-                _observer4 = new ZipObserver<T4>(_gate, this, 3, subscriptions[3]);
-                _observer5 = new ZipObserver<T5>(_gate, this, 4, subscriptions[4]);
-                _observer6 = new ZipObserver<T6>(_gate, this, 5, subscriptions[5]);
-                _observer7 = new ZipObserver<T7>(_gate, this, 6, subscriptions[6]);
-                _observer8 = new ZipObserver<T8>(_gate, this, 7, subscriptions[7]);
-                _observer9 = new ZipObserver<T9>(_gate, this, 8, subscriptions[8]);
-                _observer10 = new ZipObserver<T10>(_gate, this, 9, subscriptions[9]);
-                _observer11 = new ZipObserver<T11>(_gate, this, 10, subscriptions[10]);
-                _observer12 = new ZipObserver<T12>(_gate, this, 11, subscriptions[11]);
-                _observer13 = new ZipObserver<T13>(_gate, this, 12, subscriptions[12]);
-                _observer14 = new ZipObserver<T14>(_gate, this, 13, subscriptions[13]);
-                _observer15 = new ZipObserver<T15>(_gate, this, 14, subscriptions[14]);
-
-                base.Queues[0] = _observer1.Values;
-                base.Queues[1] = _observer2.Values;
-                base.Queues[2] = _observer3.Values;
-                base.Queues[3] = _observer4.Values;
-                base.Queues[4] = _observer5.Values;
-                base.Queues[5] = _observer6.Values;
-                base.Queues[6] = _observer7.Values;
-                base.Queues[7] = _observer8.Values;
-                base.Queues[8] = _observer9.Values;
-                base.Queues[9] = _observer10.Values;
-                base.Queues[10] = _observer11.Values;
-                base.Queues[11] = _observer12.Values;
-                base.Queues[12] = _observer13.Values;
-                base.Queues[13] = _observer14.Values;
-                base.Queues[14] = _observer15.Values;
-
-                subscriptions[0].Disposable = _parent._source1.SubscribeSafe(_observer1);
-                subscriptions[1].Disposable = _parent._source2.SubscribeSafe(_observer2);
-                subscriptions[2].Disposable = _parent._source3.SubscribeSafe(_observer3);
-                subscriptions[3].Disposable = _parent._source4.SubscribeSafe(_observer4);
-                subscriptions[4].Disposable = _parent._source5.SubscribeSafe(_observer5);
-                subscriptions[5].Disposable = _parent._source6.SubscribeSafe(_observer6);
-                subscriptions[6].Disposable = _parent._source7.SubscribeSafe(_observer7);
-                subscriptions[7].Disposable = _parent._source8.SubscribeSafe(_observer8);
-                subscriptions[8].Disposable = _parent._source9.SubscribeSafe(_observer9);
-                subscriptions[9].Disposable = _parent._source10.SubscribeSafe(_observer10);
-                subscriptions[10].Disposable = _parent._source11.SubscribeSafe(_observer11);
-                subscriptions[11].Disposable = _parent._source12.SubscribeSafe(_observer12);
-                subscriptions[12].Disposable = _parent._source13.SubscribeSafe(_observer13);
-                subscriptions[13].Disposable = _parent._source14.SubscribeSafe(_observer14);
-                subscriptions[14].Disposable = _parent._source15.SubscribeSafe(_observer15);
-
-                return new CompositeDisposable(subscriptions)
-                    {
-                        Disposable.Create(() =>
-                        {
-                            _observer1.Values.Clear();
-                            _observer2.Values.Clear();
-                            _observer3.Values.Clear();
-                            _observer4.Values.Clear();
-                            _observer5.Values.Clear();
-                            _observer6.Values.Clear();
-                            _observer7.Values.Clear();
-                            _observer8.Values.Clear();
-                            _observer9.Values.Clear();
-                            _observer10.Values.Clear();
-                            _observer11.Values.Clear();
-                            _observer12.Values.Clear();
-                            _observer13.Values.Clear();
-                            _observer14.Values.Clear();
-                            _observer15.Values.Clear();
-                        })
-                    };
-            }
-
-            protected override TResult GetResult()
-            {
-                return _parent._resultSelector(_observer1.Values.Dequeue(), _observer2.Values.Dequeue(), _observer3.Values.Dequeue(), _observer4.Values.Dequeue(), _observer5.Values.Dequeue(), _observer6.Values.Dequeue(), _observer7.Values.Dequeue(), _observer8.Values.Dequeue(), _observer9.Values.Dequeue(), _observer10.Values.Dequeue(), _observer11.Values.Dequeue(), _observer12.Values.Dequeue(), _observer13.Values.Dequeue(), _observer14.Values.Dequeue(), _observer15.Values.Dequeue());
-            }
-        }
-    }
-
-    class Zip<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, TResult> : Producer<TResult>
-    {
-        private readonly IObservable<T1> _source1;
-        private readonly IObservable<T2> _source2;
-        private readonly IObservable<T3> _source3;
-        private readonly IObservable<T4> _source4;
-        private readonly IObservable<T5> _source5;
-        private readonly IObservable<T6> _source6;
-        private readonly IObservable<T7> _source7;
-        private readonly IObservable<T8> _source8;
-        private readonly IObservable<T9> _source9;
-        private readonly IObservable<T10> _source10;
-        private readonly IObservable<T11> _source11;
-        private readonly IObservable<T12> _source12;
-        private readonly IObservable<T13> _source13;
-        private readonly IObservable<T14> _source14;
-        private readonly IObservable<T15> _source15;
-        private readonly IObservable<T16> _source16;
-        private readonly Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, TResult> _resultSelector;
-
-        public Zip(IObservable<T1> source1, IObservable<T2> source2, IObservable<T3> source3, IObservable<T4> source4, IObservable<T5> source5, IObservable<T6> source6, IObservable<T7> source7, IObservable<T8> source8, IObservable<T9> source9, IObservable<T10> source10, IObservable<T11> source11, IObservable<T12> source12, IObservable<T13> source13, IObservable<T14> source14, IObservable<T15> source15, IObservable<T16> source16, Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, TResult> resultSelector)
-        {
-            _source1 = source1;
-            _source2 = source2;
-            _source3 = source3;
-            _source4 = source4;
-            _source5 = source5;
-            _source6 = source6;
-            _source7 = source7;
-            _source8 = source8;
-            _source9 = source9;
-            _source10 = source10;
-            _source11 = source11;
-            _source12 = source12;
-            _source13 = source13;
-            _source14 = source14;
-            _source15 = source15;
-            _source16 = source16;
-            _resultSelector = resultSelector;
-        }
-
-        protected override IDisposable Run(IObserver<TResult> observer, IDisposable cancel, Action<IDisposable> setSink)
-        {
-            var sink = new _(this, observer, cancel);
-            setSink(sink);
-            return sink.Run();
-        }
-
-        class _ : ZipSink<TResult>
-        {
-            private readonly Zip<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, TResult> _parent;
-
-            public _(Zip<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, TResult> parent, IObserver<TResult> observer, IDisposable cancel)
-                : base(16, observer, cancel)
-            {
-                _parent = parent;
-            }
-
-            private ZipObserver<T1> _observer1;
-            private ZipObserver<T2> _observer2;
-            private ZipObserver<T3> _observer3;
-            private ZipObserver<T4> _observer4;
-            private ZipObserver<T5> _observer5;
-            private ZipObserver<T6> _observer6;
-            private ZipObserver<T7> _observer7;
-            private ZipObserver<T8> _observer8;
-            private ZipObserver<T9> _observer9;
-            private ZipObserver<T10> _observer10;
-            private ZipObserver<T11> _observer11;
-            private ZipObserver<T12> _observer12;
-            private ZipObserver<T13> _observer13;
-            private ZipObserver<T14> _observer14;
-            private ZipObserver<T15> _observer15;
-            private ZipObserver<T16> _observer16;
-
-            public IDisposable Run()
-            {
-                var subscriptions = new SingleAssignmentDisposable[16];
-                for (int i = 0; i < 16; i++)
-                    subscriptions[i] = new SingleAssignmentDisposable();
-
-                _observer1 = new ZipObserver<T1>(_gate, this, 0, subscriptions[0]);
-                _observer2 = new ZipObserver<T2>(_gate, this, 1, subscriptions[1]);
-                _observer3 = new ZipObserver<T3>(_gate, this, 2, subscriptions[2]);
-                _observer4 = new ZipObserver<T4>(_gate, this, 3, subscriptions[3]);
-                _observer5 = new ZipObserver<T5>(_gate, this, 4, subscriptions[4]);
-                _observer6 = new ZipObserver<T6>(_gate, this, 5, subscriptions[5]);
-                _observer7 = new ZipObserver<T7>(_gate, this, 6, subscriptions[6]);
-                _observer8 = new ZipObserver<T8>(_gate, this, 7, subscriptions[7]);
-                _observer9 = new ZipObserver<T9>(_gate, this, 8, subscriptions[8]);
-                _observer10 = new ZipObserver<T10>(_gate, this, 9, subscriptions[9]);
-                _observer11 = new ZipObserver<T11>(_gate, this, 10, subscriptions[10]);
-                _observer12 = new ZipObserver<T12>(_gate, this, 11, subscriptions[11]);
-                _observer13 = new ZipObserver<T13>(_gate, this, 12, subscriptions[12]);
-                _observer14 = new ZipObserver<T14>(_gate, this, 13, subscriptions[13]);
-                _observer15 = new ZipObserver<T15>(_gate, this, 14, subscriptions[14]);
-                _observer16 = new ZipObserver<T16>(_gate, this, 15, subscriptions[15]);
-
-                base.Queues[0] = _observer1.Values;
-                base.Queues[1] = _observer2.Values;
-                base.Queues[2] = _observer3.Values;
-                base.Queues[3] = _observer4.Values;
-                base.Queues[4] = _observer5.Values;
-                base.Queues[5] = _observer6.Values;
-                base.Queues[6] = _observer7.Values;
-                base.Queues[7] = _observer8.Values;
-                base.Queues[8] = _observer9.Values;
-                base.Queues[9] = _observer10.Values;
-                base.Queues[10] = _observer11.Values;
-                base.Queues[11] = _observer12.Values;
-                base.Queues[12] = _observer13.Values;
-                base.Queues[13] = _observer14.Values;
-                base.Queues[14] = _observer15.Values;
-                base.Queues[15] = _observer16.Values;
-
-                subscriptions[0].Disposable = _parent._source1.SubscribeSafe(_observer1);
-                subscriptions[1].Disposable = _parent._source2.SubscribeSafe(_observer2);
-                subscriptions[2].Disposable = _parent._source3.SubscribeSafe(_observer3);
-                subscriptions[3].Disposable = _parent._source4.SubscribeSafe(_observer4);
-                subscriptions[4].Disposable = _parent._source5.SubscribeSafe(_observer5);
-                subscriptions[5].Disposable = _parent._source6.SubscribeSafe(_observer6);
-                subscriptions[6].Disposable = _parent._source7.SubscribeSafe(_observer7);
-                subscriptions[7].Disposable = _parent._source8.SubscribeSafe(_observer8);
-                subscriptions[8].Disposable = _parent._source9.SubscribeSafe(_observer9);
-                subscriptions[9].Disposable = _parent._source10.SubscribeSafe(_observer10);
-                subscriptions[10].Disposable = _parent._source11.SubscribeSafe(_observer11);
-                subscriptions[11].Disposable = _parent._source12.SubscribeSafe(_observer12);
-                subscriptions[12].Disposable = _parent._source13.SubscribeSafe(_observer13);
-                subscriptions[13].Disposable = _parent._source14.SubscribeSafe(_observer14);
-                subscriptions[14].Disposable = _parent._source15.SubscribeSafe(_observer15);
-                subscriptions[15].Disposable = _parent._source16.SubscribeSafe(_observer16);
-
-                return new CompositeDisposable(subscriptions)
-                    {
-                        Disposable.Create(() =>
-                        {
-                            _observer1.Values.Clear();
-                            _observer2.Values.Clear();
-                            _observer3.Values.Clear();
-                            _observer4.Values.Clear();
-                            _observer5.Values.Clear();
-                            _observer6.Values.Clear();
-                            _observer7.Values.Clear();
-                            _observer8.Values.Clear();
-                            _observer9.Values.Clear();
-                            _observer10.Values.Clear();
-                            _observer11.Values.Clear();
-                            _observer12.Values.Clear();
-                            _observer13.Values.Clear();
-                            _observer14.Values.Clear();
-                            _observer15.Values.Clear();
-                            _observer16.Values.Clear();
-                        })
-                    };
-            }
-
-            protected override TResult GetResult()
-            {
-                return _parent._resultSelector(_observer1.Values.Dequeue(), _observer2.Values.Dequeue(), _observer3.Values.Dequeue(), _observer4.Values.Dequeue(), _observer5.Values.Dequeue(), _observer6.Values.Dequeue(), _observer7.Values.Dequeue(), _observer8.Values.Dequeue(), _observer9.Values.Dequeue(), _observer10.Values.Dequeue(), _observer11.Values.Dequeue(), _observer12.Values.Dequeue(), _observer13.Values.Dequeue(), _observer14.Values.Dequeue(), _observer15.Values.Dequeue(), _observer16.Values.Dequeue());
-            }
-        }
-    }
-
-#endif
-
-    #endregion
-
     #region Helpers for n-ary overloads
 
     interface IZip

+ 23 - 0
Rx.NET/Source/System.Reactive.Linq/System.Reactive.Linq.csproj

@@ -47,6 +47,16 @@
     <Compile Include="Reactive\Linq\LocalQueryMethodImplementationTypeAttribute.cs" />
     <Compile Include="Reactive\Linq\Observable\Case.cs" />
     <Compile Include="Reactive\Linq\Observable\Collect.cs" />
+    <Compile Include="Reactive\Linq\Observable\Zip.Generated.cs">
+      <DependentUpon>Zip.Generated.tt</DependentUpon>
+      <AutoGen>True</AutoGen>
+      <DesignTime>True</DesignTime>
+    </Compile>
+    <Compile Include="Reactive\Linq\Observable\CombineLatest.Generated.cs">
+      <AutoGen>True</AutoGen>
+      <DesignTime>True</DesignTime>
+      <DependentUpon>CombineLatest.Generated.tt</DependentUpon>
+    </Compile>
     <Compile Include="Reactive\Linq\Observable\If.cs" />
     <Compile Include="Reactive\Linq\Observable\For.cs" />
     <Compile Include="Reactive\Linq\Observable\DoWhile.cs" />
@@ -217,6 +227,19 @@
   <ItemGroup>
     <EmbeddedResource Include="Strings_Linq.resx" />
   </ItemGroup>
+  <ItemGroup>
+    <Content Include="Reactive\Linq\Observable\Zip.Generated.tt">
+      <Generator>TextTemplatingFileGenerator</Generator>
+      <LastGenOutput>Zip.Generated.cs</LastGenOutput>
+    </Content>
+    <Content Include="Reactive\Linq\Observable\CombineLatest.Generated.tt">
+      <Generator>TextTemplatingFileGenerator</Generator>
+      <LastGenOutput>CombineLatest.Generated.cs</LastGenOutput>
+    </Content>
+  </ItemGroup>
+  <ItemGroup>
+    <Service Include="{508349B6-6B84-4DF5-91F0-309BEEBAD82D}" />
+  </ItemGroup>
   <Import Project="..\Import.targets" />
   <Import Project="$(SolutionDir)\.nuget\NuGet.targets" Condition="Exists('$(SolutionDir)\.nuget\NuGet.targets')" />
 </Project>