Actualizacion maquina principal
[dotfiles/.git] / .config / coc / extensions / node_modules / coc-prettier / node_modules / rxjs / bundles / rxjs.umd.js
diff --git a/.config/coc/extensions/node_modules/coc-prettier/node_modules/rxjs/bundles/rxjs.umd.js b/.config/coc/extensions/node_modules/coc-prettier/node_modules/rxjs/bundles/rxjs.umd.js
new file mode 100644 (file)
index 0000000..ae3dc28
--- /dev/null
@@ -0,0 +1,9342 @@
+/**
+  @license
+                                 Apache License
+                         Version 2.0, January 2004
+                      http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+    "License" shall mean the terms and conditions for use, reproduction,
+    and distribution as defined by Sections 1 through 9 of this document.
+
+    "Licensor" shall mean the copyright owner or entity authorized by
+    the copyright owner that is granting the License.
+
+    "Legal Entity" shall mean the union of the acting entity and all
+    other entities that control, are controlled by, or are under common
+    control with that entity. For the purposes of this definition,
+    "control" means (i) the power, direct or indirect, to cause the
+    direction or management of such entity, whether by contract or
+    otherwise, or (ii) ownership of fifty percent (50%) or more of the
+    outstanding shares, or (iii) beneficial ownership of such entity.
+
+    "You" (or "Your") shall mean an individual or Legal Entity
+    exercising permissions granted by this License.
+
+    "Source" form shall mean the preferred form for making modifications,
+    including but not limited to software source code, documentation
+    source, and configuration files.
+
+    "Object" form shall mean any form resulting from mechanical
+    transformation or translation of a Source form, including but
+    not limited to compiled object code, generated documentation,
+    and conversions to other media types.
+
+    "Work" shall mean the work of authorship, whether in Source or
+    Object form, made available under the License, as indicated by a
+    copyright notice that is included in or attached to the work
+    (an example is provided in the Appendix below).
+
+    "Derivative Works" shall mean any work, whether in Source or Object
+    form, that is based on (or derived from) the Work and for which the
+    editorial revisions, annotations, elaborations, or other modifications
+    represent, as a whole, an original work of authorship. For the purposes
+    of this License, Derivative Works shall not include works that remain
+    separable from, or merely link (or bind by name) to the interfaces of,
+    the Work and Derivative Works thereof.
+
+    "Contribution" shall mean any work of authorship, including
+    the original version of the Work and any modifications or additions
+    to that Work or Derivative Works thereof, that is intentionally
+    submitted to Licensor for inclusion in the Work by the copyright owner
+    or by an individual or Legal Entity authorized to submit on behalf of
+    the copyright owner. For the purposes of this definition, "submitted"
+    means any form of electronic, verbal, or written communication sent
+    to the Licensor or its representatives, including but not limited to
+    communication on electronic mailing lists, source code control systems,
+    and issue tracking systems that are managed by, or on behalf of, the
+    Licensor for the purpose of discussing and improving the Work, but
+    excluding communication that is conspicuously marked or otherwise
+    designated in writing by the copyright owner as "Not a Contribution."
+
+    "Contributor" shall mean Licensor and any individual or Legal Entity
+    on behalf of whom a Contribution has been received by Licensor and
+    subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+    this License, each Contributor hereby grants to You a perpetual,
+    worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+    copyright license to reproduce, prepare Derivative Works of,
+    publicly display, publicly perform, sublicense, and distribute the
+    Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+    this License, each Contributor hereby grants to You a perpetual,
+    worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+    (except as stated in this section) patent license to make, have made,
+    use, offer to sell, sell, import, and otherwise transfer the Work,
+    where such license applies only to those patent claims licensable
+    by such Contributor that are necessarily infringed by their
+    Contribution(s) alone or by combination of their Contribution(s)
+    with the Work to which such Contribution(s) was submitted. If You
+    institute patent litigation against any entity (including a
+    cross-claim or counterclaim in a lawsuit) alleging that the Work
+    or a Contribution incorporated within the Work constitutes direct
+    or contributory patent infringement, then any patent licenses
+    granted to You under this License for that Work shall terminate
+    as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+    Work or Derivative Works thereof in any medium, with or without
+    modifications, and in Source or Object form, provided that You
+    meet the following conditions:
+
+    (a) You must give any other recipients of the Work or
+        Derivative Works a copy of this License; and
+
+    (b) You must cause any modified files to carry prominent notices
+        stating that You changed the files; and
+
+    (c) You must retain, in the Source form of any Derivative Works
+        that You distribute, all copyright, patent, trademark, and
+        attribution notices from the Source form of the Work,
+        excluding those notices that do not pertain to any part of
+        the Derivative Works; and
+
+    (d) If the Work includes a "NOTICE" text file as part of its
+        distribution, then any Derivative Works that You distribute must
+        include a readable copy of the attribution notices contained
+        within such NOTICE file, excluding those notices that do not
+        pertain to any part of the Derivative Works, in at least one
+        of the following places: within a NOTICE text file distributed
+        as part of the Derivative Works; within the Source form or
+        documentation, if provided along with the Derivative Works; or,
+        within a display generated by the Derivative Works, if and
+        wherever such third-party notices normally appear. The contents
+        of the NOTICE file are for informational purposes only and
+        do not modify the License. You may add Your own attribution
+        notices within Derivative Works that You distribute, alongside
+        or as an addendum to the NOTICE text from the Work, provided
+        that such additional attribution notices cannot be construed
+        as modifying the License.
+
+    You may add Your own copyright statement to Your modifications and
+    may provide additional or different license terms and conditions
+    for use, reproduction, or distribution of Your modifications, or
+    for any such Derivative Works as a whole, provided Your use,
+    reproduction, and distribution of the Work otherwise complies with
+    the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+    any Contribution intentionally submitted for inclusion in the Work
+    by You to the Licensor shall be under the terms and conditions of
+    this License, without any additional terms or conditions.
+    Notwithstanding the above, nothing herein shall supersede or modify
+    the terms of any separate license agreement you may have executed
+    with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+    names, trademarks, service marks, or product names of the Licensor,
+    except as required for reasonable and customary use in describing the
+    origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+    agreed to in writing, Licensor provides the Work (and each
+    Contributor provides its Contributions) on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+    implied, including, without limitation, any warranties or conditions
+    of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+    PARTICULAR PURPOSE. You are solely responsible for determining the
+    appropriateness of using or redistributing the Work and assume any
+    risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+    whether in tort (including negligence), contract, or otherwise,
+    unless required by applicable law (such as deliberate and grossly
+    negligent acts) or agreed to in writing, shall any Contributor be
+    liable to You for damages, including any direct, indirect, special,
+    incidental, or consequential damages of any character arising as a
+    result of this License or out of the use or inability to use the
+    Work (including but not limited to damages for loss of goodwill,
+    work stoppage, computer failure or malfunction, or any and all
+    other commercial damages or losses), even if such Contributor
+    has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+    the Work or Derivative Works thereof, You may choose to offer,
+    and charge a fee for, acceptance of support, warranty, indemnity,
+    or other liability obligations and/or rights consistent with this
+    License. However, in accepting such obligations, You may act only
+    on Your own behalf and on Your sole responsibility, not on behalf
+    of any other Contributor, and only if You agree to indemnify,
+    defend, and hold each Contributor harmless for any liability
+    incurred by, or claims asserted against, such Contributor by reason
+    of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+    To apply the Apache License to your work, attach the following
+    boilerplate notice, with the fields enclosed by brackets "[]"
+    replaced with your own identifying information. (Don't include
+    the brackets!)  The text should be enclosed in the appropriate
+    comment syntax for the file format. We also recommend that a
+    file or class name and description of purpose be included on the
+    same "printed page" as the copyright notice for easier
+    identification within third-party archives.
+
+ Copyright (c) 2015-2018 Google, Inc., Netflix, Inc., Microsoft Corp. and contributors
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+     http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+
+ **/
+/**
+  @license
+                                 Apache License
+                         Version 2.0, January 2004
+                      http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+    "License" shall mean the terms and conditions for use, reproduction,
+    and distribution as defined by Sections 1 through 9 of this document.
+
+    "Licensor" shall mean the copyright owner or entity authorized by
+    the copyright owner that is granting the License.
+
+    "Legal Entity" shall mean the union of the acting entity and all
+    other entities that control, are controlled by, or are under common
+    control with that entity. For the purposes of this definition,
+    "control" means (i) the power, direct or indirect, to cause the
+    direction or management of such entity, whether by contract or
+    otherwise, or (ii) ownership of fifty percent (50%) or more of the
+    outstanding shares, or (iii) beneficial ownership of such entity.
+
+    "You" (or "Your") shall mean an individual or Legal Entity
+    exercising permissions granted by this License.
+
+    "Source" form shall mean the preferred form for making modifications,
+    including but not limited to software source code, documentation
+    source, and configuration files.
+
+    "Object" form shall mean any form resulting from mechanical
+    transformation or translation of a Source form, including but
+    not limited to compiled object code, generated documentation,
+    and conversions to other media types.
+
+    "Work" shall mean the work of authorship, whether in Source or
+    Object form, made available under the License, as indicated by a
+    copyright notice that is included in or attached to the work
+    (an example is provided in the Appendix below).
+
+    "Derivative Works" shall mean any work, whether in Source or Object
+    form, that is based on (or derived from) the Work and for which the
+    editorial revisions, annotations, elaborations, or other modifications
+    represent, as a whole, an original work of authorship. For the purposes
+    of this License, Derivative Works shall not include works that remain
+    separable from, or merely link (or bind by name) to the interfaces of,
+    the Work and Derivative Works thereof.
+
+    "Contribution" shall mean any work of authorship, including
+    the original version of the Work and any modifications or additions
+    to that Work or Derivative Works thereof, that is intentionally
+    submitted to Licensor for inclusion in the Work by the copyright owner
+    or by an individual or Legal Entity authorized to submit on behalf of
+    the copyright owner. For the purposes of this definition, "submitted"
+    means any form of electronic, verbal, or written communication sent
+    to the Licensor or its representatives, including but not limited to
+    communication on electronic mailing lists, source code control systems,
+    and issue tracking systems that are managed by, or on behalf of, the
+    Licensor for the purpose of discussing and improving the Work, but
+    excluding communication that is conspicuously marked or otherwise
+    designated in writing by the copyright owner as "Not a Contribution."
+
+    "Contributor" shall mean Licensor and any individual or Legal Entity
+    on behalf of whom a Contribution has been received by Licensor and
+    subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+    this License, each Contributor hereby grants to You a perpetual,
+    worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+    copyright license to reproduce, prepare Derivative Works of,
+    publicly display, publicly perform, sublicense, and distribute the
+    Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+    this License, each Contributor hereby grants to You a perpetual,
+    worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+    (except as stated in this section) patent license to make, have made,
+    use, offer to sell, sell, import, and otherwise transfer the Work,
+    where such license applies only to those patent claims licensable
+    by such Contributor that are necessarily infringed by their
+    Contribution(s) alone or by combination of their Contribution(s)
+    with the Work to which such Contribution(s) was submitted. If You
+    institute patent litigation against any entity (including a
+    cross-claim or counterclaim in a lawsuit) alleging that the Work
+    or a Contribution incorporated within the Work constitutes direct
+    or contributory patent infringement, then any patent licenses
+    granted to You under this License for that Work shall terminate
+    as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+    Work or Derivative Works thereof in any medium, with or without
+    modifications, and in Source or Object form, provided that You
+    meet the following conditions:
+
+    (a) You must give any other recipients of the Work or
+        Derivative Works a copy of this License; and
+
+    (b) You must cause any modified files to carry prominent notices
+        stating that You changed the files; and
+
+    (c) You must retain, in the Source form of any Derivative Works
+        that You distribute, all copyright, patent, trademark, and
+        attribution notices from the Source form of the Work,
+        excluding those notices that do not pertain to any part of
+        the Derivative Works; and
+
+    (d) If the Work includes a "NOTICE" text file as part of its
+        distribution, then any Derivative Works that You distribute must
+        include a readable copy of the attribution notices contained
+        within such NOTICE file, excluding those notices that do not
+        pertain to any part of the Derivative Works, in at least one
+        of the following places: within a NOTICE text file distributed
+        as part of the Derivative Works; within the Source form or
+        documentation, if provided along with the Derivative Works; or,
+        within a display generated by the Derivative Works, if and
+        wherever such third-party notices normally appear. The contents
+        of the NOTICE file are for informational purposes only and
+        do not modify the License. You may add Your own attribution
+        notices within Derivative Works that You distribute, alongside
+        or as an addendum to the NOTICE text from the Work, provided
+        that such additional attribution notices cannot be construed
+        as modifying the License.
+
+    You may add Your own copyright statement to Your modifications and
+    may provide additional or different license terms and conditions
+    for use, reproduction, or distribution of Your modifications, or
+    for any such Derivative Works as a whole, provided Your use,
+    reproduction, and distribution of the Work otherwise complies with
+    the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+    any Contribution intentionally submitted for inclusion in the Work
+    by You to the Licensor shall be under the terms and conditions of
+    this License, without any additional terms or conditions.
+    Notwithstanding the above, nothing herein shall supersede or modify
+    the terms of any separate license agreement you may have executed
+    with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+    names, trademarks, service marks, or product names of the Licensor,
+    except as required for reasonable and customary use in describing the
+    origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+    agreed to in writing, Licensor provides the Work (and each
+    Contributor provides its Contributions) on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+    implied, including, without limitation, any warranties or conditions
+    of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+    PARTICULAR PURPOSE. You are solely responsible for determining the
+    appropriateness of using or redistributing the Work and assume any
+    risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+    whether in tort (including negligence), contract, or otherwise,
+    unless required by applicable law (such as deliberate and grossly
+    negligent acts) or agreed to in writing, shall any Contributor be
+    liable to You for damages, including any direct, indirect, special,
+    incidental, or consequential damages of any character arising as a
+    result of this License or out of the use or inability to use the
+    Work (including but not limited to damages for loss of goodwill,
+    work stoppage, computer failure or malfunction, or any and all
+    other commercial damages or losses), even if such Contributor
+    has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+    the Work or Derivative Works thereof, You may choose to offer,
+    and charge a fee for, acceptance of support, warranty, indemnity,
+    or other liability obligations and/or rights consistent with this
+    License. However, in accepting such obligations, You may act only
+    on Your own behalf and on Your sole responsibility, not on behalf
+    of any other Contributor, and only if You agree to indemnify,
+    defend, and hold each Contributor harmless for any liability
+    incurred by, or claims asserted against, such Contributor by reason
+    of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+    To apply the Apache License to your work, attach the following
+    boilerplate notice, with the fields enclosed by brackets "[]"
+    replaced with your own identifying information. (Don't include
+    the brackets!)  The text should be enclosed in the appropriate
+    comment syntax for the file format. We also recommend that a
+    file or class name and description of purpose be included on the
+    same "printed page" as the copyright notice for easier
+    identification within third-party archives.
+
+ Copyright (c) 2015-2018 Google, Inc., Netflix, Inc., Microsoft Corp. and contributors
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+     http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+
+ **/
+(function (global, factory) {
+    typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :
+    typeof define === 'function' && define.amd ? define('rxjs', ['exports'], factory) :
+    (factory((global.rxjs = {})));
+}(this, (function (exports) { 'use strict';
+
+    /*! *****************************************************************************\r
+    Copyright (c) Microsoft Corporation. All rights reserved.\r
+    Licensed under the Apache License, Version 2.0 (the "License"); you may not use\r
+    this file except in compliance with the License. You may obtain a copy of the\r
+    License at http://www.apache.org/licenses/LICENSE-2.0\r
+\r
+    THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\r
+    KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\r
+    WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\r
+    MERCHANTABLITY OR NON-INFRINGEMENT.\r
+\r
+    See the Apache Version 2.0 License for specific language governing permissions\r
+    and limitations under the License.\r
+    ***************************************************************************** */\r
+    /* global Reflect, Promise */\r
+\r
+    var extendStatics = Object.setPrototypeOf ||\r
+        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r
+        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r
+\r
+    function __extends(d, b) {\r
+        extendStatics(d, b);\r
+        function __() { this.constructor = d; }\r
+        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r
+    }\r
+\r
+    var __assign = Object.assign || function __assign(t) {\r
+        for (var s, i = 1, n = arguments.length; i < n; i++) {\r
+            s = arguments[i];\r
+            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r
+        }\r
+        return t;\r
+    };\r
+\r
+    function __rest(s, e) {\r
+        var t = {};\r
+        for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r
+            t[p] = s[p];\r
+        if (s != null && typeof Object.getOwnPropertySymbols === "function")\r
+            for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) if (e.indexOf(p[i]) < 0)\r
+                t[p[i]] = s[p[i]];\r
+        return t;\r
+    }
+
+    function isFunction(x) {
+        return typeof x === 'function';
+    }
+
+    var _enable_super_gross_mode_that_will_cause_bad_things = false;
+    var config = {
+        Promise: undefined,
+        set useDeprecatedSynchronousErrorHandling(value) {
+            if (value) {
+                var error = new Error();
+                console.warn('DEPRECATED! RxJS was set to use deprecated synchronous error handling behavior by code at: \n' + error.stack);
+            }
+            else if (_enable_super_gross_mode_that_will_cause_bad_things) {
+                console.log('RxJS: Back to a better error behavior. Thank you. <3');
+            }
+            _enable_super_gross_mode_that_will_cause_bad_things = value;
+        },
+        get useDeprecatedSynchronousErrorHandling() {
+            return _enable_super_gross_mode_that_will_cause_bad_things;
+        },
+    };
+
+    function hostReportError(err) {
+        setTimeout(function () { throw err; }, 0);
+    }
+
+    var empty = {
+        closed: true,
+        next: function (value) { },
+        error: function (err) {
+            if (config.useDeprecatedSynchronousErrorHandling) {
+                throw err;
+            }
+            else {
+                hostReportError(err);
+            }
+        },
+        complete: function () { }
+    };
+
+    var isArray = (function () { return Array.isArray || (function (x) { return x && typeof x.length === 'number'; }); })();
+
+    function isObject(x) {
+        return x !== null && typeof x === 'object';
+    }
+
+    var UnsubscriptionErrorImpl = (function () {
+        function UnsubscriptionErrorImpl(errors) {
+            Error.call(this);
+            this.message = errors ?
+                errors.length + " errors occurred during unsubscription:\n" + errors.map(function (err, i) { return i + 1 + ") " + err.toString(); }).join('\n  ') : '';
+            this.name = 'UnsubscriptionError';
+            this.errors = errors;
+            return this;
+        }
+        UnsubscriptionErrorImpl.prototype = Object.create(Error.prototype);
+        return UnsubscriptionErrorImpl;
+    })();
+    var UnsubscriptionError = UnsubscriptionErrorImpl;
+
+    var Subscription = (function () {
+        function Subscription(unsubscribe) {
+            this.closed = false;
+            this._parentOrParents = null;
+            this._subscriptions = null;
+            if (unsubscribe) {
+                this._unsubscribe = unsubscribe;
+            }
+        }
+        Subscription.prototype.unsubscribe = function () {
+            var errors;
+            if (this.closed) {
+                return;
+            }
+            var _a = this, _parentOrParents = _a._parentOrParents, _unsubscribe = _a._unsubscribe, _subscriptions = _a._subscriptions;
+            this.closed = true;
+            this._parentOrParents = null;
+            this._subscriptions = null;
+            if (_parentOrParents instanceof Subscription) {
+                _parentOrParents.remove(this);
+            }
+            else if (_parentOrParents !== null) {
+                for (var index = 0; index < _parentOrParents.length; ++index) {
+                    var parent_1 = _parentOrParents[index];
+                    parent_1.remove(this);
+                }
+            }
+            if (isFunction(_unsubscribe)) {
+                try {
+                    _unsubscribe.call(this);
+                }
+                catch (e) {
+                    errors = e instanceof UnsubscriptionError ? flattenUnsubscriptionErrors(e.errors) : [e];
+                }
+            }
+            if (isArray(_subscriptions)) {
+                var index = -1;
+                var len = _subscriptions.length;
+                while (++index < len) {
+                    var sub = _subscriptions[index];
+                    if (isObject(sub)) {
+                        try {
+                            sub.unsubscribe();
+                        }
+                        catch (e) {
+                            errors = errors || [];
+                            if (e instanceof UnsubscriptionError) {
+                                errors = errors.concat(flattenUnsubscriptionErrors(e.errors));
+                            }
+                            else {
+                                errors.push(e);
+                            }
+                        }
+                    }
+                }
+            }
+            if (errors) {
+                throw new UnsubscriptionError(errors);
+            }
+        };
+        Subscription.prototype.add = function (teardown) {
+            var subscription = teardown;
+            if (!teardown) {
+                return Subscription.EMPTY;
+            }
+            switch (typeof teardown) {
+                case 'function':
+                    subscription = new Subscription(teardown);
+                case 'object':
+                    if (subscription === this || subscription.closed || typeof subscription.unsubscribe !== 'function') {
+                        return subscription;
+                    }
+                    else if (this.closed) {
+                        subscription.unsubscribe();
+                        return subscription;
+                    }
+                    else if (!(subscription instanceof Subscription)) {
+                        var tmp = subscription;
+                        subscription = new Subscription();
+                        subscription._subscriptions = [tmp];
+                    }
+                    break;
+                default: {
+                    throw new Error('unrecognized teardown ' + teardown + ' added to Subscription.');
+                }
+            }
+            var _parentOrParents = subscription._parentOrParents;
+            if (_parentOrParents === null) {
+                subscription._parentOrParents = this;
+            }
+            else if (_parentOrParents instanceof Subscription) {
+                if (_parentOrParents === this) {
+                    return subscription;
+                }
+                subscription._parentOrParents = [_parentOrParents, this];
+            }
+            else if (_parentOrParents.indexOf(this) === -1) {
+                _parentOrParents.push(this);
+            }
+            else {
+                return subscription;
+            }
+            var subscriptions = this._subscriptions;
+            if (subscriptions === null) {
+                this._subscriptions = [subscription];
+            }
+            else {
+                subscriptions.push(subscription);
+            }
+            return subscription;
+        };
+        Subscription.prototype.remove = function (subscription) {
+            var subscriptions = this._subscriptions;
+            if (subscriptions) {
+                var subscriptionIndex = subscriptions.indexOf(subscription);
+                if (subscriptionIndex !== -1) {
+                    subscriptions.splice(subscriptionIndex, 1);
+                }
+            }
+        };
+        Subscription.EMPTY = (function (empty) {
+            empty.closed = true;
+            return empty;
+        }(new Subscription()));
+        return Subscription;
+    }());
+    function flattenUnsubscriptionErrors(errors) {
+        return errors.reduce(function (errs, err) { return errs.concat((err instanceof UnsubscriptionError) ? err.errors : err); }, []);
+    }
+
+    var rxSubscriber = (function () {
+        return typeof Symbol === 'function'
+            ? Symbol('rxSubscriber')
+            : '@@rxSubscriber_' + Math.random();
+    })();
+
+    var Subscriber = (function (_super) {
+        __extends(Subscriber, _super);
+        function Subscriber(destinationOrNext, error, complete) {
+            var _this = _super.call(this) || this;
+            _this.syncErrorValue = null;
+            _this.syncErrorThrown = false;
+            _this.syncErrorThrowable = false;
+            _this.isStopped = false;
+            switch (arguments.length) {
+                case 0:
+                    _this.destination = empty;
+                    break;
+                case 1:
+                    if (!destinationOrNext) {
+                        _this.destination = empty;
+                        break;
+                    }
+                    if (typeof destinationOrNext === 'object') {
+                        if (destinationOrNext instanceof Subscriber) {
+                            _this.syncErrorThrowable = destinationOrNext.syncErrorThrowable;
+                            _this.destination = destinationOrNext;
+                            destinationOrNext.add(_this);
+                        }
+                        else {
+                            _this.syncErrorThrowable = true;
+                            _this.destination = new SafeSubscriber(_this, destinationOrNext);
+                        }
+                        break;
+                    }
+                default:
+                    _this.syncErrorThrowable = true;
+                    _this.destination = new SafeSubscriber(_this, destinationOrNext, error, complete);
+                    break;
+            }
+            return _this;
+        }
+        Subscriber.prototype[rxSubscriber] = function () { return this; };
+        Subscriber.create = function (next, error, complete) {
+            var subscriber = new Subscriber(next, error, complete);
+            subscriber.syncErrorThrowable = false;
+            return subscriber;
+        };
+        Subscriber.prototype.next = function (value) {
+            if (!this.isStopped) {
+                this._next(value);
+            }
+        };
+        Subscriber.prototype.error = function (err) {
+            if (!this.isStopped) {
+                this.isStopped = true;
+                this._error(err);
+            }
+        };
+        Subscriber.prototype.complete = function () {
+            if (!this.isStopped) {
+                this.isStopped = true;
+                this._complete();
+            }
+        };
+        Subscriber.prototype.unsubscribe = function () {
+            if (this.closed) {
+                return;
+            }
+            this.isStopped = true;
+            _super.prototype.unsubscribe.call(this);
+        };
+        Subscriber.prototype._next = function (value) {
+            this.destination.next(value);
+        };
+        Subscriber.prototype._error = function (err) {
+            this.destination.error(err);
+            this.unsubscribe();
+        };
+        Subscriber.prototype._complete = function () {
+            this.destination.complete();
+            this.unsubscribe();
+        };
+        Subscriber.prototype._unsubscribeAndRecycle = function () {
+            var _parentOrParents = this._parentOrParents;
+            this._parentOrParents = null;
+            this.unsubscribe();
+            this.closed = false;
+            this.isStopped = false;
+            this._parentOrParents = _parentOrParents;
+            return this;
+        };
+        return Subscriber;
+    }(Subscription));
+    var SafeSubscriber = (function (_super) {
+        __extends(SafeSubscriber, _super);
+        function SafeSubscriber(_parentSubscriber, observerOrNext, error, complete) {
+            var _this = _super.call(this) || this;
+            _this._parentSubscriber = _parentSubscriber;
+            var next;
+            var context = _this;
+            if (isFunction(observerOrNext)) {
+                next = observerOrNext;
+            }
+            else if (observerOrNext) {
+                next = observerOrNext.next;
+                error = observerOrNext.error;
+                complete = observerOrNext.complete;
+                if (observerOrNext !== empty) {
+                    context = Object.create(observerOrNext);
+                    if (isFunction(context.unsubscribe)) {
+                        _this.add(context.unsubscribe.bind(context));
+                    }
+                    context.unsubscribe = _this.unsubscribe.bind(_this);
+                }
+            }
+            _this._context = context;
+            _this._next = next;
+            _this._error = error;
+            _this._complete = complete;
+            return _this;
+        }
+        SafeSubscriber.prototype.next = function (value) {
+            if (!this.isStopped && this._next) {
+                var _parentSubscriber = this._parentSubscriber;
+                if (!config.useDeprecatedSynchronousErrorHandling || !_parentSubscriber.syncErrorThrowable) {
+                    this.__tryOrUnsub(this._next, value);
+                }
+                else if (this.__tryOrSetError(_parentSubscriber, this._next, value)) {
+                    this.unsubscribe();
+                }
+            }
+        };
+        SafeSubscriber.prototype.error = function (err) {
+            if (!this.isStopped) {
+                var _parentSubscriber = this._parentSubscriber;
+                var useDeprecatedSynchronousErrorHandling = config.useDeprecatedSynchronousErrorHandling;
+                if (this._error) {
+                    if (!useDeprecatedSynchronousErrorHandling || !_parentSubscriber.syncErrorThrowable) {
+                        this.__tryOrUnsub(this._error, err);
+                        this.unsubscribe();
+                    }
+                    else {
+                        this.__tryOrSetError(_parentSubscriber, this._error, err);
+                        this.unsubscribe();
+                    }
+                }
+                else if (!_parentSubscriber.syncErrorThrowable) {
+                    this.unsubscribe();
+                    if (useDeprecatedSynchronousErrorHandling) {
+                        throw err;
+                    }
+                    hostReportError(err);
+                }
+                else {
+                    if (useDeprecatedSynchronousErrorHandling) {
+                        _parentSubscriber.syncErrorValue = err;
+                        _parentSubscriber.syncErrorThrown = true;
+                    }
+                    else {
+                        hostReportError(err);
+                    }
+                    this.unsubscribe();
+                }
+            }
+        };
+        SafeSubscriber.prototype.complete = function () {
+            var _this = this;
+            if (!this.isStopped) {
+                var _parentSubscriber = this._parentSubscriber;
+                if (this._complete) {
+                    var wrappedComplete = function () { return _this._complete.call(_this._context); };
+                    if (!config.useDeprecatedSynchronousErrorHandling || !_parentSubscriber.syncErrorThrowable) {
+                        this.__tryOrUnsub(wrappedComplete);
+                        this.unsubscribe();
+                    }
+                    else {
+                        this.__tryOrSetError(_parentSubscriber, wrappedComplete);
+                        this.unsubscribe();
+                    }
+                }
+                else {
+                    this.unsubscribe();
+                }
+            }
+        };
+        SafeSubscriber.prototype.__tryOrUnsub = function (fn, value) {
+            try {
+                fn.call(this._context, value);
+            }
+            catch (err) {
+                this.unsubscribe();
+                if (config.useDeprecatedSynchronousErrorHandling) {
+                    throw err;
+                }
+                else {
+                    hostReportError(err);
+                }
+            }
+        };
+        SafeSubscriber.prototype.__tryOrSetError = function (parent, fn, value) {
+            if (!config.useDeprecatedSynchronousErrorHandling) {
+                throw new Error('bad call');
+            }
+            try {
+                fn.call(this._context, value);
+            }
+            catch (err) {
+                if (config.useDeprecatedSynchronousErrorHandling) {
+                    parent.syncErrorValue = err;
+                    parent.syncErrorThrown = true;
+                    return true;
+                }
+                else {
+                    hostReportError(err);
+                    return true;
+                }
+            }
+            return false;
+        };
+        SafeSubscriber.prototype._unsubscribe = function () {
+            var _parentSubscriber = this._parentSubscriber;
+            this._context = null;
+            this._parentSubscriber = null;
+            _parentSubscriber.unsubscribe();
+        };
+        return SafeSubscriber;
+    }(Subscriber));
+
+    function canReportError(observer) {
+        while (observer) {
+            var _a = observer, closed_1 = _a.closed, destination = _a.destination, isStopped = _a.isStopped;
+            if (closed_1 || isStopped) {
+                return false;
+            }
+            else if (destination && destination instanceof Subscriber) {
+                observer = destination;
+            }
+            else {
+                observer = null;
+            }
+        }
+        return true;
+    }
+
+    function toSubscriber(nextOrObserver, error, complete) {
+        if (nextOrObserver) {
+            if (nextOrObserver instanceof Subscriber) {
+                return nextOrObserver;
+            }
+            if (nextOrObserver[rxSubscriber]) {
+                return nextOrObserver[rxSubscriber]();
+            }
+        }
+        if (!nextOrObserver && !error && !complete) {
+            return new Subscriber(empty);
+        }
+        return new Subscriber(nextOrObserver, error, complete);
+    }
+
+    var observable = (function () { return typeof Symbol === 'function' && Symbol.observable || '@@observable'; })();
+
+    function identity(x) {
+        return x;
+    }
+
+    function pipe() {
+        var fns = [];
+        for (var _i = 0; _i < arguments.length; _i++) {
+            fns[_i] = arguments[_i];
+        }
+        return pipeFromArray(fns);
+    }
+    function pipeFromArray(fns) {
+        if (fns.length === 0) {
+            return identity;
+        }
+        if (fns.length === 1) {
+            return fns[0];
+        }
+        return function piped(input) {
+            return fns.reduce(function (prev, fn) { return fn(prev); }, input);
+        };
+    }
+
+    var Observable = (function () {
+        function Observable(subscribe) {
+            this._isScalar = false;
+            if (subscribe) {
+                this._subscribe = subscribe;
+            }
+        }
+        Observable.prototype.lift = function (operator) {
+            var observable$$1 = new Observable();
+            observable$$1.source = this;
+            observable$$1.operator = operator;
+            return observable$$1;
+        };
+        Observable.prototype.subscribe = function (observerOrNext, error, complete) {
+            var operator = this.operator;
+            var sink = toSubscriber(observerOrNext, error, complete);
+            if (operator) {
+                sink.add(operator.call(sink, this.source));
+            }
+            else {
+                sink.add(this.source || (config.useDeprecatedSynchronousErrorHandling && !sink.syncErrorThrowable) ?
+                    this._subscribe(sink) :
+                    this._trySubscribe(sink));
+            }
+            if (config.useDeprecatedSynchronousErrorHandling) {
+                if (sink.syncErrorThrowable) {
+                    sink.syncErrorThrowable = false;
+                    if (sink.syncErrorThrown) {
+                        throw sink.syncErrorValue;
+                    }
+                }
+            }
+            return sink;
+        };
+        Observable.prototype._trySubscribe = function (sink) {
+            try {
+                return this._subscribe(sink);
+            }
+            catch (err) {
+                if (config.useDeprecatedSynchronousErrorHandling) {
+                    sink.syncErrorThrown = true;
+                    sink.syncErrorValue = err;
+                }
+                if (canReportError(sink)) {
+                    sink.error(err);
+                }
+                else {
+                    console.warn(err);
+                }
+            }
+        };
+        Observable.prototype.forEach = function (next, promiseCtor) {
+            var _this = this;
+            promiseCtor = getPromiseCtor(promiseCtor);
+            return new promiseCtor(function (resolve, reject) {
+                var subscription;
+                subscription = _this.subscribe(function (value) {
+                    try {
+                        next(value);
+                    }
+                    catch (err) {
+                        reject(err);
+                        if (subscription) {
+                            subscription.unsubscribe();
+                        }
+                    }
+                }, reject, resolve);
+            });
+        };
+        Observable.prototype._subscribe = function (subscriber) {
+            var source = this.source;
+            return source && source.subscribe(subscriber);
+        };
+        Observable.prototype[observable] = function () {
+            return this;
+        };
+        Observable.prototype.pipe = function () {
+            var operations = [];
+            for (var _i = 0; _i < arguments.length; _i++) {
+                operations[_i] = arguments[_i];
+            }
+            if (operations.length === 0) {
+                return this;
+            }
+            return pipeFromArray(operations)(this);
+        };
+        Observable.prototype.toPromise = function (promiseCtor) {
+            var _this = this;
+            promiseCtor = getPromiseCtor(promiseCtor);
+            return new promiseCtor(function (resolve, reject) {
+                var value;
+                _this.subscribe(function (x) { return value = x; }, function (err) { return reject(err); }, function () { return resolve(value); });
+            });
+        };
+        Observable.create = function (subscribe) {
+            return new Observable(subscribe);
+        };
+        return Observable;
+    }());
+    function getPromiseCtor(promiseCtor) {
+        if (!promiseCtor) {
+            promiseCtor = config.Promise || Promise;
+        }
+        if (!promiseCtor) {
+            throw new Error('no Promise impl found');
+        }
+        return promiseCtor;
+    }
+
+    var ObjectUnsubscribedErrorImpl = (function () {
+        function ObjectUnsubscribedErrorImpl() {
+            Error.call(this);
+            this.message = 'object unsubscribed';
+            this.name = 'ObjectUnsubscribedError';
+            return this;
+        }
+        ObjectUnsubscribedErrorImpl.prototype = Object.create(Error.prototype);
+        return ObjectUnsubscribedErrorImpl;
+    })();
+    var ObjectUnsubscribedError = ObjectUnsubscribedErrorImpl;
+
+    var SubjectSubscription = (function (_super) {
+        __extends(SubjectSubscription, _super);
+        function SubjectSubscription(subject, subscriber) {
+            var _this = _super.call(this) || this;
+            _this.subject = subject;
+            _this.subscriber = subscriber;
+            _this.closed = false;
+            return _this;
+        }
+        SubjectSubscription.prototype.unsubscribe = function () {
+            if (this.closed) {
+                return;
+            }
+            this.closed = true;
+            var subject = this.subject;
+            var observers = subject.observers;
+            this.subject = null;
+            if (!observers || observers.length === 0 || subject.isStopped || subject.closed) {
+                return;
+            }
+            var subscriberIndex = observers.indexOf(this.subscriber);
+            if (subscriberIndex !== -1) {
+                observers.splice(subscriberIndex, 1);
+            }
+        };
+        return SubjectSubscription;
+    }(Subscription));
+
+    var SubjectSubscriber = (function (_super) {
+        __extends(SubjectSubscriber, _super);
+        function SubjectSubscriber(destination) {
+            var _this = _super.call(this, destination) || this;
+            _this.destination = destination;
+            return _this;
+        }
+        return SubjectSubscriber;
+    }(Subscriber));
+    var Subject = (function (_super) {
+        __extends(Subject, _super);
+        function Subject() {
+            var _this = _super.call(this) || this;
+            _this.observers = [];
+            _this.closed = false;
+            _this.isStopped = false;
+            _this.hasError = false;
+            _this.thrownError = null;
+            return _this;
+        }
+        Subject.prototype[rxSubscriber] = function () {
+            return new SubjectSubscriber(this);
+        };
+        Subject.prototype.lift = function (operator) {
+            var subject = new AnonymousSubject(this, this);
+            subject.operator = operator;
+            return subject;
+        };
+        Subject.prototype.next = function (value) {
+            if (this.closed) {
+                throw new ObjectUnsubscribedError();
+            }
+            if (!this.isStopped) {
+                var observers = this.observers;
+                var len = observers.length;
+                var copy = observers.slice();
+                for (var i = 0; i < len; i++) {
+                    copy[i].next(value);
+                }
+            }
+        };
+        Subject.prototype.error = function (err) {
+            if (this.closed) {
+                throw new ObjectUnsubscribedError();
+            }
+            this.hasError = true;
+            this.thrownError = err;
+            this.isStopped = true;
+            var observers = this.observers;
+            var len = observers.length;
+            var copy = observers.slice();
+            for (var i = 0; i < len; i++) {
+                copy[i].error(err);
+            }
+            this.observers.length = 0;
+        };
+        Subject.prototype.complete = function () {
+            if (this.closed) {
+                throw new ObjectUnsubscribedError();
+            }
+            this.isStopped = true;
+            var observers = this.observers;
+            var len = observers.length;
+            var copy = observers.slice();
+            for (var i = 0; i < len; i++) {
+                copy[i].complete();
+            }
+            this.observers.length = 0;
+        };
+        Subject.prototype.unsubscribe = function () {
+            this.isStopped = true;
+            this.closed = true;
+            this.observers = null;
+        };
+        Subject.prototype._trySubscribe = function (subscriber) {
+            if (this.closed) {
+                throw new ObjectUnsubscribedError();
+            }
+            else {
+                return _super.prototype._trySubscribe.call(this, subscriber);
+            }
+        };
+        Subject.prototype._subscribe = function (subscriber) {
+            if (this.closed) {
+                throw new ObjectUnsubscribedError();
+            }
+            else if (this.hasError) {
+                subscriber.error(this.thrownError);
+                return Subscription.EMPTY;
+            }
+            else if (this.isStopped) {
+                subscriber.complete();
+                return Subscription.EMPTY;
+            }
+            else {
+                this.observers.push(subscriber);
+                return new SubjectSubscription(this, subscriber);
+            }
+        };
+        Subject.prototype.asObservable = function () {
+            var observable = new Observable();
+            observable.source = this;
+            return observable;
+        };
+        Subject.create = function (destination, source) {
+            return new AnonymousSubject(destination, source);
+        };
+        return Subject;
+    }(Observable));
+    var AnonymousSubject = (function (_super) {
+        __extends(AnonymousSubject, _super);
+        function AnonymousSubject(destination, source) {
+            var _this = _super.call(this) || this;
+            _this.destination = destination;
+            _this.source = source;
+            return _this;
+        }
+        AnonymousSubject.prototype.next = function (value) {
+            var destination = this.destination;
+            if (destination && destination.next) {
+                destination.next(value);
+            }
+        };
+        AnonymousSubject.prototype.error = function (err) {
+            var destination = this.destination;
+            if (destination && destination.error) {
+                this.destination.error(err);
+            }
+        };
+        AnonymousSubject.prototype.complete = function () {
+            var destination = this.destination;
+            if (destination && destination.complete) {
+                this.destination.complete();
+            }
+        };
+        AnonymousSubject.prototype._subscribe = function (subscriber) {
+            var source = this.source;
+            if (source) {
+                return this.source.subscribe(subscriber);
+            }
+            else {
+                return Subscription.EMPTY;
+            }
+        };
+        return AnonymousSubject;
+    }(Subject));
+
+    function refCount() {
+        return function refCountOperatorFunction(source) {
+            return source.lift(new RefCountOperator(source));
+        };
+    }
+    var RefCountOperator = (function () {
+        function RefCountOperator(connectable) {
+            this.connectable = connectable;
+        }
+        RefCountOperator.prototype.call = function (subscriber, source) {
+            var connectable = this.connectable;
+            connectable._refCount++;
+            var refCounter = new RefCountSubscriber(subscriber, connectable);
+            var subscription = source.subscribe(refCounter);
+            if (!refCounter.closed) {
+                refCounter.connection = connectable.connect();
+            }
+            return subscription;
+        };
+        return RefCountOperator;
+    }());
+    var RefCountSubscriber = (function (_super) {
+        __extends(RefCountSubscriber, _super);
+        function RefCountSubscriber(destination, connectable) {
+            var _this = _super.call(this, destination) || this;
+            _this.connectable = connectable;
+            return _this;
+        }
+        RefCountSubscriber.prototype._unsubscribe = function () {
+            var connectable = this.connectable;
+            if (!connectable) {
+                this.connection = null;
+                return;
+            }
+            this.connectable = null;
+            var refCount = connectable._refCount;
+            if (refCount <= 0) {
+                this.connection = null;
+                return;
+            }
+            connectable._refCount = refCount - 1;
+            if (refCount > 1) {
+                this.connection = null;
+                return;
+            }
+            var connection = this.connection;
+            var sharedConnection = connectable._connection;
+            this.connection = null;
+            if (sharedConnection && (!connection || sharedConnection === connection)) {
+                sharedConnection.unsubscribe();
+            }
+        };
+        return RefCountSubscriber;
+    }(Subscriber));
+
+    var ConnectableObservable = (function (_super) {
+        __extends(ConnectableObservable, _super);
+        function ConnectableObservable(source, subjectFactory) {
+            var _this = _super.call(this) || this;
+            _this.source = source;
+            _this.subjectFactory = subjectFactory;
+            _this._refCount = 0;
+            _this._isComplete = false;
+            return _this;
+        }
+        ConnectableObservable.prototype._subscribe = function (subscriber) {
+            return this.getSubject().subscribe(subscriber);
+        };
+        ConnectableObservable.prototype.getSubject = function () {
+            var subject = this._subject;
+            if (!subject || subject.isStopped) {
+                this._subject = this.subjectFactory();
+            }
+            return this._subject;
+        };
+        ConnectableObservable.prototype.connect = function () {
+            var connection = this._connection;
+            if (!connection) {
+                this._isComplete = false;
+                connection = this._connection = new Subscription();
+                connection.add(this.source
+                    .subscribe(new ConnectableSubscriber(this.getSubject(), this)));
+                if (connection.closed) {
+                    this._connection = null;
+                    connection = Subscription.EMPTY;
+                }
+            }
+            return connection;
+        };
+        ConnectableObservable.prototype.refCount = function () {
+            return refCount()(this);
+        };
+        return ConnectableObservable;
+    }(Observable));
+    var connectableObservableDescriptor = (function () {
+        var connectableProto = ConnectableObservable.prototype;
+        return {
+            operator: { value: null },
+            _refCount: { value: 0, writable: true },
+            _subject: { value: null, writable: true },
+            _connection: { value: null, writable: true },
+            _subscribe: { value: connectableProto._subscribe },
+            _isComplete: { value: connectableProto._isComplete, writable: true },
+            getSubject: { value: connectableProto.getSubject },
+            connect: { value: connectableProto.connect },
+            refCount: { value: connectableProto.refCount }
+        };
+    })();
+    var ConnectableSubscriber = (function (_super) {
+        __extends(ConnectableSubscriber, _super);
+        function ConnectableSubscriber(destination, connectable) {
+            var _this = _super.call(this, destination) || this;
+            _this.connectable = connectable;
+            return _this;
+        }
+        ConnectableSubscriber.prototype._error = function (err) {
+            this._unsubscribe();
+            _super.prototype._error.call(this, err);
+        };
+        ConnectableSubscriber.prototype._complete = function () {
+            this.connectable._isComplete = true;
+            this._unsubscribe();
+            _super.prototype._complete.call(this);
+        };
+        ConnectableSubscriber.prototype._unsubscribe = function () {
+            var connectable = this.connectable;
+            if (connectable) {
+                this.connectable = null;
+                var connection = connectable._connection;
+                connectable._refCount = 0;
+                connectable._subject = null;
+                connectable._connection = null;
+                if (connection) {
+                    connection.unsubscribe();
+                }
+            }
+        };
+        return ConnectableSubscriber;
+    }(SubjectSubscriber));
+    var RefCountSubscriber$1 = (function (_super) {
+        __extends(RefCountSubscriber, _super);
+        function RefCountSubscriber(destination, connectable) {
+            var _this = _super.call(this, destination) || this;
+            _this.connectable = connectable;
+            return _this;
+        }
+        RefCountSubscriber.prototype._unsubscribe = function () {
+            var connectable = this.connectable;
+            if (!connectable) {
+                this.connection = null;
+                return;
+            }
+            this.connectable = null;
+            var refCount$$1 = connectable._refCount;
+            if (refCount$$1 <= 0) {
+                this.connection = null;
+                return;
+            }
+            connectable._refCount = refCount$$1 - 1;
+            if (refCount$$1 > 1) {
+                this.connection = null;
+                return;
+            }
+            var connection = this.connection;
+            var sharedConnection = connectable._connection;
+            this.connection = null;
+            if (sharedConnection && (!connection || sharedConnection === connection)) {
+                sharedConnection.unsubscribe();
+            }
+        };
+        return RefCountSubscriber;
+    }(Subscriber));
+
+    function groupBy(keySelector, elementSelector, durationSelector, subjectSelector) {
+        return function (source) {
+            return source.lift(new GroupByOperator(keySelector, elementSelector, durationSelector, subjectSelector));
+        };
+    }
+    var GroupByOperator = (function () {
+        function GroupByOperator(keySelector, elementSelector, durationSelector, subjectSelector) {
+            this.keySelector = keySelector;
+            this.elementSelector = elementSelector;
+            this.durationSelector = durationSelector;
+            this.subjectSelector = subjectSelector;
+        }
+        GroupByOperator.prototype.call = function (subscriber, source) {
+            return source.subscribe(new GroupBySubscriber(subscriber, this.keySelector, this.elementSelector, this.durationSelector, this.subjectSelector));
+        };
+        return GroupByOperator;
+    }());
+    var GroupBySubscriber = (function (_super) {
+        __extends(GroupBySubscriber, _super);
+        function GroupBySubscriber(destination, keySelector, elementSelector, durationSelector, subjectSelector) {
+            var _this = _super.call(this, destination) || this;
+            _this.keySelector = keySelector;
+            _this.elementSelector = elementSelector;
+            _this.durationSelector = durationSelector;
+            _this.subjectSelector = subjectSelector;
+            _this.groups = null;
+            _this.attemptedToUnsubscribe = false;
+            _this.count = 0;
+            return _this;
+        }
+        GroupBySubscriber.prototype._next = function (value) {
+            var key;
+            try {
+                key = this.keySelector(value);
+            }
+            catch (err) {
+                this.error(err);
+                return;
+            }
+            this._group(value, key);
+        };
+        GroupBySubscriber.prototype._group = function (value, key) {
+            var groups = this.groups;
+            if (!groups) {
+                groups = this.groups = new Map();
+            }
+            var group = groups.get(key);
+            var element;
+            if (this.elementSelector) {
+                try {
+                    element = this.elementSelector(value);
+                }
+                catch (err) {
+                    this.error(err);
+                }
+            }
+            else {
+                element = value;
+            }
+            if (!group) {
+                group = (this.subjectSelector ? this.subjectSelector() : new Subject());
+                groups.set(key, group);
+                var groupedObservable = new GroupedObservable(key, group, this);
+                this.destination.next(groupedObservable);
+                if (this.durationSelector) {
+                    var duration = void 0;
+                    try {
+                        duration = this.durationSelector(new GroupedObservable(key, group));
+                    }
+                    catch (err) {
+                        this.error(err);
+                        return;
+                    }
+                    this.add(duration.subscribe(new GroupDurationSubscriber(key, group, this)));
+                }
+            }
+            if (!group.closed) {
+                group.next(element);
+            }
+        };
+        GroupBySubscriber.prototype._error = function (err) {
+            var groups = this.groups;
+            if (groups) {
+                groups.forEach(function (group, key) {
+                    group.error(err);
+                });
+                groups.clear();
+            }
+            this.destination.error(err);
+        };
+        GroupBySubscriber.prototype._complete = function () {
+            var groups = this.groups;
+            if (groups) {
+                groups.forEach(function (group, key) {
+                    group.complete();
+                });
+                groups.clear();
+            }
+            this.destination.complete();
+        };
+        GroupBySubscriber.prototype.removeGroup = function (key) {
+            this.groups.delete(key);
+        };
+        GroupBySubscriber.prototype.unsubscribe = function () {
+            if (!this.closed) {
+                this.attemptedToUnsubscribe = true;
+                if (this.count === 0) {
+                    _super.prototype.unsubscribe.call(this);
+                }
+            }
+        };
+        return GroupBySubscriber;
+    }(Subscriber));
+    var GroupDurationSubscriber = (function (_super) {
+        __extends(GroupDurationSubscriber, _super);
+        function GroupDurationSubscriber(key, group, parent) {
+            var _this = _super.call(this, group) || this;
+            _this.key = key;
+            _this.group = group;
+            _this.parent = parent;
+            return _this;
+        }
+        GroupDurationSubscriber.prototype._next = function (value) {
+            this.complete();
+        };
+        GroupDurationSubscriber.prototype._unsubscribe = function () {
+            var _a = this, parent = _a.parent, key = _a.key;
+            this.key = this.parent = null;
+            if (parent) {
+                parent.removeGroup(key);
+            }
+        };
+        return GroupDurationSubscriber;
+    }(Subscriber));
+    var GroupedObservable = (function (_super) {
+        __extends(GroupedObservable, _super);
+        function GroupedObservable(key, groupSubject, refCountSubscription) {
+            var _this = _super.call(this) || this;
+            _this.key = key;
+            _this.groupSubject = groupSubject;
+            _this.refCountSubscription = refCountSubscription;
+            return _this;
+        }
+        GroupedObservable.prototype._subscribe = function (subscriber) {
+            var subscription = new Subscription();
+            var _a = this, refCountSubscription = _a.refCountSubscription, groupSubject = _a.groupSubject;
+            if (refCountSubscription && !refCountSubscription.closed) {
+                subscription.add(new InnerRefCountSubscription(refCountSubscription));
+            }
+            subscription.add(groupSubject.subscribe(subscriber));
+            return subscription;
+        };
+        return GroupedObservable;
+    }(Observable));
+    var InnerRefCountSubscription = (function (_super) {
+        __extends(InnerRefCountSubscription, _super);
+        function InnerRefCountSubscription(parent) {
+            var _this = _super.call(this) || this;
+            _this.parent = parent;
+            parent.count++;
+            return _this;
+        }
+        InnerRefCountSubscription.prototype.unsubscribe = function () {
+            var parent = this.parent;
+            if (!parent.closed && !this.closed) {
+                _super.prototype.unsubscribe.call(this);
+                parent.count -= 1;
+                if (parent.count === 0 && parent.attemptedToUnsubscribe) {
+                    parent.unsubscribe();
+                }
+            }
+        };
+        return InnerRefCountSubscription;
+    }(Subscription));
+
+    var BehaviorSubject = (function (_super) {
+        __extends(BehaviorSubject, _super);
+        function BehaviorSubject(_value) {
+            var _this = _super.call(this) || this;
+            _this._value = _value;
+            return _this;
+        }
+        Object.defineProperty(BehaviorSubject.prototype, "value", {
+            get: function () {
+                return this.getValue();
+            },
+            enumerable: true,
+            configurable: true
+        });
+        BehaviorSubject.prototype._subscribe = function (subscriber) {
+            var subscription = _super.prototype._subscribe.call(this, subscriber);
+            if (subscription && !subscription.closed) {
+                subscriber.next(this._value);
+            }
+            return subscription;
+        };
+        BehaviorSubject.prototype.getValue = function () {
+            if (this.hasError) {
+                throw this.thrownError;
+            }
+            else if (this.closed) {
+                throw new ObjectUnsubscribedError();
+            }
+            else {
+                return this._value;
+            }
+        };
+        BehaviorSubject.prototype.next = function (value) {
+            _super.prototype.next.call(this, this._value = value);
+        };
+        return BehaviorSubject;
+    }(Subject));
+
+    var Action = (function (_super) {
+        __extends(Action, _super);
+        function Action(scheduler, work) {
+            return _super.call(this) || this;
+        }
+        Action.prototype.schedule = function (state, delay) {
+            if (delay === void 0) { delay = 0; }
+            return this;
+        };
+        return Action;
+    }(Subscription));
+
+    var AsyncAction = (function (_super) {
+        __extends(AsyncAction, _super);
+        function AsyncAction(scheduler, work) {
+            var _this = _super.call(this, scheduler, work) || this;
+            _this.scheduler = scheduler;
+            _this.work = work;
+            _this.pending = false;
+            return _this;
+        }
+        AsyncAction.prototype.schedule = function (state, delay) {
+            if (delay === void 0) { delay = 0; }
+            if (this.closed) {
+                return this;
+            }
+            this.state = state;
+            var id = this.id;
+            var scheduler = this.scheduler;
+            if (id != null) {
+                this.id = this.recycleAsyncId(scheduler, id, delay);
+            }
+            this.pending = true;
+            this.delay = delay;
+            this.id = this.id || this.requestAsyncId(scheduler, this.id, delay);
+            return this;
+        };
+        AsyncAction.prototype.requestAsyncId = function (scheduler, id, delay) {
+            if (delay === void 0) { delay = 0; }
+            return setInterval(scheduler.flush.bind(scheduler, this), delay);
+        };
+        AsyncAction.prototype.recycleAsyncId = function (scheduler, id, delay) {
+            if (delay === void 0) { delay = 0; }
+            if (delay !== null && this.delay === delay && this.pending === false) {
+                return id;
+            }
+            clearInterval(id);
+            return undefined;
+        };
+        AsyncAction.prototype.execute = function (state, delay) {
+            if (this.closed) {
+                return new Error('executing a cancelled action');
+            }
+            this.pending = false;
+            var error = this._execute(state, delay);
+            if (error) {
+                return error;
+            }
+            else if (this.pending === false && this.id != null) {
+                this.id = this.recycleAsyncId(this.scheduler, this.id, null);
+            }
+        };
+        AsyncAction.prototype._execute = function (state, delay) {
+            var errored = false;
+            var errorValue = undefined;
+            try {
+                this.work(state);
+            }
+            catch (e) {
+                errored = true;
+                errorValue = !!e && e || new Error(e);
+            }
+            if (errored) {
+                this.unsubscribe();
+                return errorValue;
+            }
+        };
+        AsyncAction.prototype._unsubscribe = function () {
+            var id = this.id;
+            var scheduler = this.scheduler;
+            var actions = scheduler.actions;
+            var index = actions.indexOf(this);
+            this.work = null;
+            this.state = null;
+            this.pending = false;
+            this.scheduler = null;
+            if (index !== -1) {
+                actions.splice(index, 1);
+            }
+            if (id != null) {
+                this.id = this.recycleAsyncId(scheduler, id, null);
+            }
+            this.delay = null;
+        };
+        return AsyncAction;
+    }(Action));
+
+    var QueueAction = (function (_super) {
+        __extends(QueueAction, _super);
+        function QueueAction(scheduler, work) {
+            var _this = _super.call(this, scheduler, work) || this;
+            _this.scheduler = scheduler;
+            _this.work = work;
+            return _this;
+        }
+        QueueAction.prototype.schedule = function (state, delay) {
+            if (delay === void 0) { delay = 0; }
+            if (delay > 0) {
+                return _super.prototype.schedule.call(this, state, delay);
+            }
+            this.delay = delay;
+            this.state = state;
+            this.scheduler.flush(this);
+            return this;
+        };
+        QueueAction.prototype.execute = function (state, delay) {
+            return (delay > 0 || this.closed) ?
+                _super.prototype.execute.call(this, state, delay) :
+                this._execute(state, delay);
+        };
+        QueueAction.prototype.requestAsyncId = function (scheduler, id, delay) {
+            if (delay === void 0) { delay = 0; }
+            if ((delay !== null && delay > 0) || (delay === null && this.delay > 0)) {
+                return _super.prototype.requestAsyncId.call(this, scheduler, id, delay);
+            }
+            return scheduler.flush(this);
+        };
+        return QueueAction;
+    }(AsyncAction));
+
+    var Scheduler = (function () {
+        function Scheduler(SchedulerAction, now) {
+            if (now === void 0) { now = Scheduler.now; }
+            this.SchedulerAction = SchedulerAction;
+            this.now = now;
+        }
+        Scheduler.prototype.schedule = function (work, delay, state) {
+            if (delay === void 0) { delay = 0; }
+            return new this.SchedulerAction(this, work).schedule(state, delay);
+        };
+        Scheduler.now = function () { return Date.now(); };
+        return Scheduler;
+    }());
+
+    var AsyncScheduler = (function (_super) {
+        __extends(AsyncScheduler, _super);
+        function AsyncScheduler(SchedulerAction, now) {
+            if (now === void 0) { now = Scheduler.now; }
+            var _this = _super.call(this, SchedulerAction, function () {
+                if (AsyncScheduler.delegate && AsyncScheduler.delegate !== _this) {
+                    return AsyncScheduler.delegate.now();
+                }
+                else {
+                    return now();
+                }
+            }) || this;
+            _this.actions = [];
+            _this.active = false;
+            _this.scheduled = undefined;
+            return _this;
+        }
+        AsyncScheduler.prototype.schedule = function (work, delay, state) {
+            if (delay === void 0) { delay = 0; }
+            if (AsyncScheduler.delegate && AsyncScheduler.delegate !== this) {
+                return AsyncScheduler.delegate.schedule(work, delay, state);
+            }
+            else {
+                return _super.prototype.schedule.call(this, work, delay, state);
+            }
+        };
+        AsyncScheduler.prototype.flush = function (action) {
+            var actions = this.actions;
+            if (this.active) {
+                actions.push(action);
+                return;
+            }
+            var error;
+            this.active = true;
+            do {
+                if (error = action.execute(action.state, action.delay)) {
+                    break;
+                }
+            } while (action = actions.shift());
+            this.active = false;
+            if (error) {
+                while (action = actions.shift()) {
+                    action.unsubscribe();
+                }
+                throw error;
+            }
+        };
+        return AsyncScheduler;
+    }(Scheduler));
+
+    var QueueScheduler = (function (_super) {
+        __extends(QueueScheduler, _super);
+        function QueueScheduler() {
+            return _super !== null && _super.apply(this, arguments) || this;
+        }
+        return QueueScheduler;
+    }(AsyncScheduler));
+
+    var queueScheduler = new QueueScheduler(QueueAction);
+    var queue = queueScheduler;
+
+    var EMPTY = new Observable(function (subscriber) { return subscriber.complete(); });
+    function empty$1(scheduler) {
+        return scheduler ? emptyScheduled(scheduler) : EMPTY;
+    }
+    function emptyScheduled(scheduler) {
+        return new Observable(function (subscriber) { return scheduler.schedule(function () { return subscriber.complete(); }); });
+    }
+
+    function isScheduler(value) {
+        return value && typeof value.schedule === 'function';
+    }
+
+    var subscribeToArray = function (array) { return function (subscriber) {
+        for (var i = 0, len = array.length; i < len && !subscriber.closed; i++) {
+            subscriber.next(array[i]);
+        }
+        subscriber.complete();
+    }; };
+
+    function scheduleArray(input, scheduler) {
+        return new Observable(function (subscriber) {
+            var sub = new Subscription();
+            var i = 0;
+            sub.add(scheduler.schedule(function () {
+                if (i === input.length) {
+                    subscriber.complete();
+                    return;
+                }
+                subscriber.next(input[i++]);
+                if (!subscriber.closed) {
+                    sub.add(this.schedule());
+                }
+            }));
+            return sub;
+        });
+    }
+
+    function fromArray(input, scheduler) {
+        if (!scheduler) {
+            return new Observable(subscribeToArray(input));
+        }
+        else {
+            return scheduleArray(input, scheduler);
+        }
+    }
+
+    function of() {
+        var args = [];
+        for (var _i = 0; _i < arguments.length; _i++) {
+            args[_i] = arguments[_i];
+        }
+        var scheduler = args[args.length - 1];
+        if (isScheduler(scheduler)) {
+            args.pop();
+            return scheduleArray(args, scheduler);
+        }
+        else {
+            return fromArray(args);
+        }
+    }
+
+    function throwError(error, scheduler) {
+        if (!scheduler) {
+            return new Observable(function (subscriber) { return subscriber.error(error); });
+        }
+        else {
+            return new Observable(function (subscriber) { return scheduler.schedule(dispatch, 0, { error: error, subscriber: subscriber }); });
+        }
+    }
+    function dispatch(_a) {
+        var error = _a.error, subscriber = _a.subscriber;
+        subscriber.error(error);
+    }
+
+    (function (NotificationKind) {
+        NotificationKind["NEXT"] = "N";
+        NotificationKind["ERROR"] = "E";
+        NotificationKind["COMPLETE"] = "C";
+    })(exports.NotificationKind || (exports.NotificationKind = {}));
+    var Notification = (function () {
+        function Notification(kind, value, error) {
+            this.kind = kind;
+            this.value = value;
+            this.error = error;
+            this.hasValue = kind === 'N';
+        }
+        Notification.prototype.observe = function (observer) {
+            switch (this.kind) {
+                case 'N':
+                    return observer.next && observer.next(this.value);
+                case 'E':
+                    return observer.error && observer.error(this.error);
+                case 'C':
+                    return observer.complete && observer.complete();
+            }
+        };
+        Notification.prototype.do = function (next, error, complete) {
+            var kind = this.kind;
+            switch (kind) {
+                case 'N':
+                    return next && next(this.value);
+                case 'E':
+                    return error && error(this.error);
+                case 'C':
+                    return complete && complete();
+            }
+        };
+        Notification.prototype.accept = function (nextOrObserver, error, complete) {
+            if (nextOrObserver && typeof nextOrObserver.next === 'function') {
+                return this.observe(nextOrObserver);
+            }
+            else {
+                return this.do(nextOrObserver, error, complete);
+            }
+        };
+        Notification.prototype.toObservable = function () {
+            var kind = this.kind;
+            switch (kind) {
+                case 'N':
+                    return of(this.value);
+                case 'E':
+                    return throwError(this.error);
+                case 'C':
+                    return empty$1();
+            }
+            throw new Error('unexpected notification kind value');
+        };
+        Notification.createNext = function (value) {
+            if (typeof value !== 'undefined') {
+                return new Notification('N', value);
+            }
+            return Notification.undefinedValueNotification;
+        };
+        Notification.createError = function (err) {
+            return new Notification('E', undefined, err);
+        };
+        Notification.createComplete = function () {
+            return Notification.completeNotification;
+        };
+        Notification.completeNotification = new Notification('C');
+        Notification.undefinedValueNotification = new Notification('N', undefined);
+        return Notification;
+    }());
+
+    function observeOn(scheduler, delay) {
+        if (delay === void 0) { delay = 0; }
+        return function observeOnOperatorFunction(source) {
+            return source.lift(new ObserveOnOperator(scheduler, delay));
+        };
+    }
+    var ObserveOnOperator = (function () {
+        function ObserveOnOperator(scheduler, delay) {
+            if (delay === void 0) { delay = 0; }
+            this.scheduler = scheduler;
+            this.delay = delay;
+        }
+        ObserveOnOperator.prototype.call = function (subscriber, source) {
+            return source.subscribe(new ObserveOnSubscriber(subscriber, this.scheduler, this.delay));
+        };
+        return ObserveOnOperator;
+    }());
+    var ObserveOnSubscriber = (function (_super) {
+        __extends(ObserveOnSubscriber, _super);
+        function ObserveOnSubscriber(destination, scheduler, delay) {
+            if (delay === void 0) { delay = 0; }
+            var _this = _super.call(this, destination) || this;
+            _this.scheduler = scheduler;
+            _this.delay = delay;
+            return _this;
+        }
+        ObserveOnSubscriber.dispatch = function (arg) {
+            var notification = arg.notification, destination = arg.destination;
+            notification.observe(destination);
+            this.unsubscribe();
+        };
+        ObserveOnSubscriber.prototype.scheduleMessage = function (notification) {
+            var destination = this.destination;
+            destination.add(this.scheduler.schedule(ObserveOnSubscriber.dispatch, this.delay, new ObserveOnMessage(notification, this.destination)));
+        };
+        ObserveOnSubscriber.prototype._next = function (value) {
+            this.scheduleMessage(Notification.createNext(value));
+        };
+        ObserveOnSubscriber.prototype._error = function (err) {
+            this.scheduleMessage(Notification.createError(err));
+            this.unsubscribe();
+        };
+        ObserveOnSubscriber.prototype._complete = function () {
+            this.scheduleMessage(Notification.createComplete());
+            this.unsubscribe();
+        };
+        return ObserveOnSubscriber;
+    }(Subscriber));
+    var ObserveOnMessage = (function () {
+        function ObserveOnMessage(notification, destination) {
+            this.notification = notification;
+            this.destination = destination;
+        }
+        return ObserveOnMessage;
+    }());
+
+    var ReplaySubject = (function (_super) {
+        __extends(ReplaySubject, _super);
+        function ReplaySubject(bufferSize, windowTime, scheduler) {
+            if (bufferSize === void 0) { bufferSize = Number.POSITIVE_INFINITY; }
+            if (windowTime === void 0) { windowTime = Number.POSITIVE_INFINITY; }
+            var _this = _super.call(this) || this;
+            _this.scheduler = scheduler;
+            _this._events = [];
+            _this._infiniteTimeWindow = false;
+            _this._bufferSize = bufferSize < 1 ? 1 : bufferSize;
+            _this._windowTime = windowTime < 1 ? 1 : windowTime;
+            if (windowTime === Number.POSITIVE_INFINITY) {
+                _this._infiniteTimeWindow = true;
+                _this.next = _this.nextInfiniteTimeWindow;
+            }
+            else {
+                _this.next = _this.nextTimeWindow;
+            }
+            return _this;
+        }
+        ReplaySubject.prototype.nextInfiniteTimeWindow = function (value) {
+            var _events = this._events;
+            _events.push(value);
+            if (_events.length > this._bufferSize) {
+                _events.shift();
+            }
+            _super.prototype.next.call(this, value);
+        };
+        ReplaySubject.prototype.nextTimeWindow = function (value) {
+            this._events.push(new ReplayEvent(this._getNow(), value));
+            this._trimBufferThenGetEvents();
+            _super.prototype.next.call(this, value);
+        };
+        ReplaySubject.prototype._subscribe = function (subscriber) {
+            var _infiniteTimeWindow = this._infiniteTimeWindow;
+            var _events = _infiniteTimeWindow ? this._events : this._trimBufferThenGetEvents();
+            var scheduler = this.scheduler;
+            var len = _events.length;
+            var subscription;
+            if (this.closed) {
+                throw new ObjectUnsubscribedError();
+            }
+            else if (this.isStopped || this.hasError) {
+                subscription = Subscription.EMPTY;
+            }
+            else {
+                this.observers.push(subscriber);
+                subscription = new SubjectSubscription(this, subscriber);
+            }
+            if (scheduler) {
+                subscriber.add(subscriber = new ObserveOnSubscriber(subscriber, scheduler));
+            }
+            if (_infiniteTimeWindow) {
+                for (var i = 0; i < len && !subscriber.closed; i++) {
+                    subscriber.next(_events[i]);
+                }
+            }
+            else {
+                for (var i = 0; i < len && !subscriber.closed; i++) {
+                    subscriber.next(_events[i].value);
+                }
+            }
+            if (this.hasError) {
+                subscriber.error(this.thrownError);
+            }
+            else if (this.isStopped) {
+                subscriber.complete();
+            }
+            return subscription;
+        };
+        ReplaySubject.prototype._getNow = function () {
+            return (this.scheduler || queue).now();
+        };
+        ReplaySubject.prototype._trimBufferThenGetEvents = function () {
+            var now = this._getNow();
+            var _bufferSize = this._bufferSize;
+            var _windowTime = this._windowTime;
+            var _events = this._events;
+            var eventsCount = _events.length;
+            var spliceCount = 0;
+            while (spliceCount < eventsCount) {
+                if ((now - _events[spliceCount].time) < _windowTime) {
+                    break;
+                }
+                spliceCount++;
+            }
+            if (eventsCount > _bufferSize) {
+                spliceCount = Math.max(spliceCount, eventsCount - _bufferSize);
+            }
+            if (spliceCount > 0) {
+                _events.splice(0, spliceCount);
+            }
+            return _events;
+        };
+        return ReplaySubject;
+    }(Subject));
+    var ReplayEvent = (function () {
+        function ReplayEvent(time, value) {
+            this.time = time;
+            this.value = value;
+        }
+        return ReplayEvent;
+    }());
+
+    var AsyncSubject = (function (_super) {
+        __extends(AsyncSubject, _super);
+        function AsyncSubject() {
+            var _this = _super !== null && _super.apply(this, arguments) || this;
+            _this.value = null;
+            _this.hasNext = false;
+            _this.hasCompleted = false;
+            return _this;
+        }
+        AsyncSubject.prototype._subscribe = function (subscriber) {
+            if (this.hasError) {
+                subscriber.error(this.thrownError);
+                return Subscription.EMPTY;
+            }
+            else if (this.hasCompleted && this.hasNext) {
+                subscriber.next(this.value);
+                subscriber.complete();
+                return Subscription.EMPTY;
+            }
+            return _super.prototype._subscribe.call(this, subscriber);
+        };
+        AsyncSubject.prototype.next = function (value) {
+            if (!this.hasCompleted) {
+                this.value = value;
+                this.hasNext = true;
+            }
+        };
+        AsyncSubject.prototype.error = function (error) {
+            if (!this.hasCompleted) {
+                _super.prototype.error.call(this, error);
+            }
+        };
+        AsyncSubject.prototype.complete = function () {
+            this.hasCompleted = true;
+            if (this.hasNext) {
+                _super.prototype.next.call(this, this.value);
+            }
+            _super.prototype.complete.call(this);
+        };
+        return AsyncSubject;
+    }(Subject));
+
+    var nextHandle = 1;
+    var RESOLVED = (function () { return Promise.resolve(); })();
+    var activeHandles = {};
+    function findAndClearHandle(handle) {
+        if (handle in activeHandles) {
+            delete activeHandles[handle];
+            return true;
+        }
+        return false;
+    }
+    var Immediate = {
+        setImmediate: function (cb) {
+            var handle = nextHandle++;
+            activeHandles[handle] = true;
+            RESOLVED.then(function () { return findAndClearHandle(handle) && cb(); });
+            return handle;
+        },
+        clearImmediate: function (handle) {
+            findAndClearHandle(handle);
+        },
+    };
+
+    var AsapAction = (function (_super) {
+        __extends(AsapAction, _super);
+        function AsapAction(scheduler, work) {
+            var _this = _super.call(this, scheduler, work) || this;
+            _this.scheduler = scheduler;
+            _this.work = work;
+            return _this;
+        }
+        AsapAction.prototype.requestAsyncId = function (scheduler, id, delay) {
+            if (delay === void 0) { delay = 0; }
+            if (delay !== null && delay > 0) {
+                return _super.prototype.requestAsyncId.call(this, scheduler, id, delay);
+            }
+            scheduler.actions.push(this);
+            return scheduler.scheduled || (scheduler.scheduled = Immediate.setImmediate(scheduler.flush.bind(scheduler, null)));
+        };
+        AsapAction.prototype.recycleAsyncId = function (scheduler, id, delay) {
+            if (delay === void 0) { delay = 0; }
+            if ((delay !== null && delay > 0) || (delay === null && this.delay > 0)) {
+                return _super.prototype.recycleAsyncId.call(this, scheduler, id, delay);
+            }
+            if (scheduler.actions.length === 0) {
+                Immediate.clearImmediate(id);
+                scheduler.scheduled = undefined;
+            }
+            return undefined;
+        };
+        return AsapAction;
+    }(AsyncAction));
+
+    var AsapScheduler = (function (_super) {
+        __extends(AsapScheduler, _super);
+        function AsapScheduler() {
+            return _super !== null && _super.apply(this, arguments) || this;
+        }
+        AsapScheduler.prototype.flush = function (action) {
+            this.active = true;
+            this.scheduled = undefined;
+            var actions = this.actions;
+            var error;
+            var index = -1;
+            var count = actions.length;
+            action = action || actions.shift();
+            do {
+                if (error = action.execute(action.state, action.delay)) {
+                    break;
+                }
+            } while (++index < count && (action = actions.shift()));
+            this.active = false;
+            if (error) {
+                while (++index < count && (action = actions.shift())) {
+                    action.unsubscribe();
+                }
+                throw error;
+            }
+        };
+        return AsapScheduler;
+    }(AsyncScheduler));
+
+    var asapScheduler = new AsapScheduler(AsapAction);
+    var asap = asapScheduler;
+
+    var asyncScheduler = new AsyncScheduler(AsyncAction);
+    var async = asyncScheduler;
+
+    var AnimationFrameAction = (function (_super) {
+        __extends(AnimationFrameAction, _super);
+        function AnimationFrameAction(scheduler, work) {
+            var _this = _super.call(this, scheduler, work) || this;
+            _this.scheduler = scheduler;
+            _this.work = work;
+            return _this;
+        }
+        AnimationFrameAction.prototype.requestAsyncId = function (scheduler, id, delay) {
+            if (delay === void 0) { delay = 0; }
+            if (delay !== null && delay > 0) {
+                return _super.prototype.requestAsyncId.call(this, scheduler, id, delay);
+            }
+            scheduler.actions.push(this);
+            return scheduler.scheduled || (scheduler.scheduled = requestAnimationFrame(function () { return scheduler.flush(null); }));
+        };
+        AnimationFrameAction.prototype.recycleAsyncId = function (scheduler, id, delay) {
+            if (delay === void 0) { delay = 0; }
+            if ((delay !== null && delay > 0) || (delay === null && this.delay > 0)) {
+                return _super.prototype.recycleAsyncId.call(this, scheduler, id, delay);
+            }
+            if (scheduler.actions.length === 0) {
+                cancelAnimationFrame(id);
+                scheduler.scheduled = undefined;
+            }
+            return undefined;
+        };
+        return AnimationFrameAction;
+    }(AsyncAction));
+
+    var AnimationFrameScheduler = (function (_super) {
+        __extends(AnimationFrameScheduler, _super);
+        function AnimationFrameScheduler() {
+            return _super !== null && _super.apply(this, arguments) || this;
+        }
+        AnimationFrameScheduler.prototype.flush = function (action) {
+            this.active = true;
+            this.scheduled = undefined;
+            var actions = this.actions;
+            var error;
+            var index = -1;
+            var count = actions.length;
+            action = action || actions.shift();
+            do {
+                if (error = action.execute(action.state, action.delay)) {
+                    break;
+                }
+            } while (++index < count && (action = actions.shift()));
+            this.active = false;
+            if (error) {
+                while (++index < count && (action = actions.shift())) {
+                    action.unsubscribe();
+                }
+                throw error;
+            }
+        };
+        return AnimationFrameScheduler;
+    }(AsyncScheduler));
+
+    var animationFrameScheduler = new AnimationFrameScheduler(AnimationFrameAction);
+    var animationFrame = animationFrameScheduler;
+
+    var VirtualTimeScheduler = (function (_super) {
+        __extends(VirtualTimeScheduler, _super);
+        function VirtualTimeScheduler(SchedulerAction, maxFrames) {
+            if (SchedulerAction === void 0) { SchedulerAction = VirtualAction; }
+            if (maxFrames === void 0) { maxFrames = Number.POSITIVE_INFINITY; }
+            var _this = _super.call(this, SchedulerAction, function () { return _this.frame; }) || this;
+            _this.maxFrames = maxFrames;
+            _this.frame = 0;
+            _this.index = -1;
+            return _this;
+        }
+        VirtualTimeScheduler.prototype.flush = function () {
+            var _a = this, actions = _a.actions, maxFrames = _a.maxFrames;
+            var error, action;
+            while ((action = actions[0]) && action.delay <= maxFrames) {
+                actions.shift();
+                this.frame = action.delay;
+                if (error = action.execute(action.state, action.delay)) {
+                    break;
+                }
+            }
+            if (error) {
+                while (action = actions.shift()) {
+                    action.unsubscribe();
+                }
+                throw error;
+            }
+        };
+        VirtualTimeScheduler.frameTimeFactor = 10;
+        return VirtualTimeScheduler;
+    }(AsyncScheduler));
+    var VirtualAction = (function (_super) {
+        __extends(VirtualAction, _super);
+        function VirtualAction(scheduler, work, index) {
+            if (index === void 0) { index = scheduler.index += 1; }
+            var _this = _super.call(this, scheduler, work) || this;
+            _this.scheduler = scheduler;
+            _this.work = work;
+            _this.index = index;
+            _this.active = true;
+            _this.index = scheduler.index = index;
+            return _this;
+        }
+        VirtualAction.prototype.schedule = function (state, delay) {
+            if (delay === void 0) { delay = 0; }
+            if (!this.id) {
+                return _super.prototype.schedule.call(this, state, delay);
+            }
+            this.active = false;
+            var action = new VirtualAction(this.scheduler, this.work);
+            this.add(action);
+            return action.schedule(state, delay);
+        };
+        VirtualAction.prototype.requestAsyncId = function (scheduler, id, delay) {
+            if (delay === void 0) { delay = 0; }
+            this.delay = scheduler.frame + delay;
+            var actions = scheduler.actions;
+            actions.push(this);
+            actions.sort(VirtualAction.sortActions);
+            return true;
+        };
+        VirtualAction.prototype.recycleAsyncId = function (scheduler, id, delay) {
+            if (delay === void 0) { delay = 0; }
+            return undefined;
+        };
+        VirtualAction.prototype._execute = function (state, delay) {
+            if (this.active === true) {
+                return _super.prototype._execute.call(this, state, delay);
+            }
+        };
+        VirtualAction.sortActions = function (a, b) {
+            if (a.delay === b.delay) {
+                if (a.index === b.index) {
+                    return 0;
+                }
+                else if (a.index > b.index) {
+                    return 1;
+                }
+                else {
+                    return -1;
+                }
+            }
+            else if (a.delay > b.delay) {
+                return 1;
+            }
+            else {
+                return -1;
+            }
+        };
+        return VirtualAction;
+    }(AsyncAction));
+
+    function noop() { }
+
+    function isObservable(obj) {
+        return !!obj && (obj instanceof Observable || (typeof obj.lift === 'function' && typeof obj.subscribe === 'function'));
+    }
+
+    var ArgumentOutOfRangeErrorImpl = (function () {
+        function ArgumentOutOfRangeErrorImpl() {
+            Error.call(this);
+            this.message = 'argument out of range';
+            this.name = 'ArgumentOutOfRangeError';
+            return this;
+        }
+        ArgumentOutOfRangeErrorImpl.prototype = Object.create(Error.prototype);
+        return ArgumentOutOfRangeErrorImpl;
+    })();
+    var ArgumentOutOfRangeError = ArgumentOutOfRangeErrorImpl;
+
+    var EmptyErrorImpl = (function () {
+        function EmptyErrorImpl() {
+            Error.call(this);
+            this.message = 'no elements in sequence';
+            this.name = 'EmptyError';
+            return this;
+        }
+        EmptyErrorImpl.prototype = Object.create(Error.prototype);
+        return EmptyErrorImpl;
+    })();
+    var EmptyError = EmptyErrorImpl;
+
+    var TimeoutErrorImpl = (function () {
+        function TimeoutErrorImpl() {
+            Error.call(this);
+            this.message = 'Timeout has occurred';
+            this.name = 'TimeoutError';
+            return this;
+        }
+        TimeoutErrorImpl.prototype = Object.create(Error.prototype);
+        return TimeoutErrorImpl;
+    })();
+    var TimeoutError = TimeoutErrorImpl;
+
+    function map(project, thisArg) {
+        return function mapOperation(source) {
+            if (typeof project !== 'function') {
+                throw new TypeError('argument is not a function. Are you looking for `mapTo()`?');
+            }
+            return source.lift(new MapOperator(project, thisArg));
+        };
+    }
+    var MapOperator = (function () {
+        function MapOperator(project, thisArg) {
+            this.project = project;
+            this.thisArg = thisArg;
+        }
+        MapOperator.prototype.call = function (subscriber, source) {
+            return source.subscribe(new MapSubscriber(subscriber, this.project, this.thisArg));
+        };
+        return MapOperator;
+    }());
+    var MapSubscriber = (function (_super) {
+        __extends(MapSubscriber, _super);
+        function MapSubscriber(destination, project, thisArg) {
+            var _this = _super.call(this, destination) || this;
+            _this.project = project;
+            _this.count = 0;
+            _this.thisArg = thisArg || _this;
+            return _this;
+        }
+        MapSubscriber.prototype._next = function (value) {
+            var result;
+            try {
+                result = this.project.call(this.thisArg, value, this.count++);
+            }
+            catch (err) {
+                this.destination.error(err);
+                return;
+            }
+            this.destination.next(result);
+        };
+        return MapSubscriber;
+    }(Subscriber));
+
+    function bindCallback(callbackFunc, resultSelector, scheduler) {
+        if (resultSelector) {
+            if (isScheduler(resultSelector)) {
+                scheduler = resultSelector;
+            }
+            else {
+                return function () {
+                    var args = [];
+                    for (var _i = 0; _i < arguments.length; _i++) {
+                        args[_i] = arguments[_i];
+                    }
+                    return bindCallback(callbackFunc, scheduler).apply(void 0, args).pipe(map(function (args) { return isArray(args) ? resultSelector.apply(void 0, args) : resultSelector(args); }));
+                };
+            }
+        }
+        return function () {
+            var args = [];
+            for (var _i = 0; _i < arguments.length; _i++) {
+                args[_i] = arguments[_i];
+            }
+            var context = this;
+            var subject;
+            var params = {
+                context: context,
+                subject: subject,
+                callbackFunc: callbackFunc,
+                scheduler: scheduler,
+            };
+            return new Observable(function (subscriber) {
+                if (!scheduler) {
+                    if (!subject) {
+                        subject = new AsyncSubject();
+                        var handler = function () {
+                            var innerArgs = [];
+                            for (var _i = 0; _i < arguments.length; _i++) {
+                                innerArgs[_i] = arguments[_i];
+                            }
+                            subject.next(innerArgs.length <= 1 ? innerArgs[0] : innerArgs);
+                            subject.complete();
+                        };
+                        try {
+                            callbackFunc.apply(context, args.concat([handler]));
+                        }
+                        catch (err) {
+                            if (canReportError(subject)) {
+                                subject.error(err);
+                            }
+                            else {
+                                console.warn(err);
+                            }
+                        }
+                    }
+                    return subject.subscribe(subscriber);
+                }
+                else {
+                    var state = {
+                        args: args, subscriber: subscriber, params: params,
+                    };
+                    return scheduler.schedule(dispatch$1, 0, state);
+                }
+            });
+        };
+    }
+    function dispatch$1(state) {
+        var _this = this;
+        var args = state.args, subscriber = state.subscriber, params = state.params;
+        var callbackFunc = params.callbackFunc, context = params.context, scheduler = params.scheduler;
+        var subject = params.subject;
+        if (!subject) {
+            subject = params.subject = new AsyncSubject();
+            var handler = function () {
+                var innerArgs = [];
+                for (var _i = 0; _i < arguments.length; _i++) {
+                    innerArgs[_i] = arguments[_i];
+                }
+                var value = innerArgs.length <= 1 ? innerArgs[0] : innerArgs;
+                _this.add(scheduler.schedule(dispatchNext, 0, { value: value, subject: subject }));
+            };
+            try {
+                callbackFunc.apply(context, args.concat([handler]));
+            }
+            catch (err) {
+                subject.error(err);
+            }
+        }
+        this.add(subject.subscribe(subscriber));
+    }
+    function dispatchNext(state) {
+        var value = state.value, subject = state.subject;
+        subject.next(value);
+        subject.complete();
+    }
+
+    function bindNodeCallback(callbackFunc, resultSelector, scheduler) {
+        if (resultSelector) {
+            if (isScheduler(resultSelector)) {
+                scheduler = resultSelector;
+            }
+            else {
+                return function () {
+                    var args = [];
+                    for (var _i = 0; _i < arguments.length; _i++) {
+                        args[_i] = arguments[_i];
+                    }
+                    return bindNodeCallback(callbackFunc, scheduler).apply(void 0, args).pipe(map(function (args) { return isArray(args) ? resultSelector.apply(void 0, args) : resultSelector(args); }));
+                };
+            }
+        }
+        return function () {
+            var args = [];
+            for (var _i = 0; _i < arguments.length; _i++) {
+                args[_i] = arguments[_i];
+            }
+            var params = {
+                subject: undefined,
+                args: args,
+                callbackFunc: callbackFunc,
+                scheduler: scheduler,
+                context: this,
+            };
+            return new Observable(function (subscriber) {
+                var context = params.context;
+                var subject = params.subject;
+                if (!scheduler) {
+                    if (!subject) {
+                        subject = params.subject = new AsyncSubject();
+                        var handler = function () {
+                            var innerArgs = [];
+                            for (var _i = 0; _i < arguments.length; _i++) {
+                                innerArgs[_i] = arguments[_i];
+                            }
+                            var err = innerArgs.shift();
+                            if (err) {
+                                subject.error(err);
+                                return;
+                            }
+                            subject.next(innerArgs.length <= 1 ? innerArgs[0] : innerArgs);
+                            subject.complete();
+                        };
+                        try {
+                            callbackFunc.apply(context, args.concat([handler]));
+                        }
+                        catch (err) {
+                            if (canReportError(subject)) {
+                                subject.error(err);
+                            }
+                            else {
+                                console.warn(err);
+                            }
+                        }
+                    }
+                    return subject.subscribe(subscriber);
+                }
+                else {
+                    return scheduler.schedule(dispatch$2, 0, { params: params, subscriber: subscriber, context: context });
+                }
+            });
+        };
+    }
+    function dispatch$2(state) {
+        var _this = this;
+        var params = state.params, subscriber = state.subscriber, context = state.context;
+        var callbackFunc = params.callbackFunc, args = params.args, scheduler = params.scheduler;
+        var subject = params.subject;
+        if (!subject) {
+            subject = params.subject = new AsyncSubject();
+            var handler = function () {
+                var innerArgs = [];
+                for (var _i = 0; _i < arguments.length; _i++) {
+                    innerArgs[_i] = arguments[_i];
+                }
+                var err = innerArgs.shift();
+                if (err) {
+                    _this.add(scheduler.schedule(dispatchError$1, 0, { err: err, subject: subject }));
+                }
+                else {
+                    var value = innerArgs.length <= 1 ? innerArgs[0] : innerArgs;
+                    _this.add(scheduler.schedule(dispatchNext$1, 0, { value: value, subject: subject }));
+                }
+            };
+            try {
+                callbackFunc.apply(context, args.concat([handler]));
+            }
+            catch (err) {
+                this.add(scheduler.schedule(dispatchError$1, 0, { err: err, subject: subject }));
+            }
+        }
+        this.add(subject.subscribe(subscriber));
+    }
+    function dispatchNext$1(arg) {
+        var value = arg.value, subject = arg.subject;
+        subject.next(value);
+        subject.complete();
+    }
+    function dispatchError$1(arg) {
+        var err = arg.err, subject = arg.subject;
+        subject.error(err);
+    }
+
+    var OuterSubscriber = (function (_super) {
+        __extends(OuterSubscriber, _super);
+        function OuterSubscriber() {
+            return _super !== null && _super.apply(this, arguments) || this;
+        }
+        OuterSubscriber.prototype.notifyNext = function (outerValue, innerValue, outerIndex, innerIndex, innerSub) {
+            this.destination.next(innerValue);
+        };
+        OuterSubscriber.prototype.notifyError = function (error, innerSub) {
+            this.destination.error(error);
+        };
+        OuterSubscriber.prototype.notifyComplete = function (innerSub) {
+            this.destination.complete();
+        };
+        return OuterSubscriber;
+    }(Subscriber));
+
+    var InnerSubscriber = (function (_super) {
+        __extends(InnerSubscriber, _super);
+        function InnerSubscriber(parent, outerValue, outerIndex) {
+            var _this = _super.call(this) || this;
+            _this.parent = parent;
+            _this.outerValue = outerValue;
+            _this.outerIndex = outerIndex;
+            _this.index = 0;
+            return _this;
+        }
+        InnerSubscriber.prototype._next = function (value) {
+            this.parent.notifyNext(this.outerValue, value, this.outerIndex, this.index++, this);
+        };
+        InnerSubscriber.prototype._error = function (error) {
+            this.parent.notifyError(error, this);
+            this.unsubscribe();
+        };
+        InnerSubscriber.prototype._complete = function () {
+            this.parent.notifyComplete(this);
+            this.unsubscribe();
+        };
+        return InnerSubscriber;
+    }(Subscriber));
+
+    var subscribeToPromise = function (promise) { return function (subscriber) {
+        promise.then(function (value) {
+            if (!subscriber.closed) {
+                subscriber.next(value);
+                subscriber.complete();
+            }
+        }, function (err) { return subscriber.error(err); })
+            .then(null, hostReportError);
+        return subscriber;
+    }; };
+
+    function getSymbolIterator() {
+        if (typeof Symbol !== 'function' || !Symbol.iterator) {
+            return '@@iterator';
+        }
+        return Symbol.iterator;
+    }
+    var iterator = getSymbolIterator();
+
+    var subscribeToIterable = function (iterable) { return function (subscriber) {
+        var iterator$$1 = iterable[iterator]();
+        do {
+            var item = void 0;
+            try {
+                item = iterator$$1.next();
+            }
+            catch (err) {
+                subscriber.error(err);
+                return subscriber;
+            }
+            if (item.done) {
+                subscriber.complete();
+                break;
+            }
+            subscriber.next(item.value);
+            if (subscriber.closed) {
+                break;
+            }
+        } while (true);
+        if (typeof iterator$$1.return === 'function') {
+            subscriber.add(function () {
+                if (iterator$$1.return) {
+                    iterator$$1.return();
+                }
+            });
+        }
+        return subscriber;
+    }; };
+
+    var subscribeToObservable = function (obj) { return function (subscriber) {
+        var obs = obj[observable]();
+        if (typeof obs.subscribe !== 'function') {
+            throw new TypeError('Provided object does not correctly implement Symbol.observable');
+        }
+        else {
+            return obs.subscribe(subscriber);
+        }
+    }; };
+
+    var isArrayLike = (function (x) { return x && typeof x.length === 'number' && typeof x !== 'function'; });
+
+    function isPromise(value) {
+        return !!value && typeof value.subscribe !== 'function' && typeof value.then === 'function';
+    }
+
+    var subscribeTo = function (result) {
+        if (!!result && typeof result[observable] === 'function') {
+            return subscribeToObservable(result);
+        }
+        else if (isArrayLike(result)) {
+            return subscribeToArray(result);
+        }
+        else if (isPromise(result)) {
+            return subscribeToPromise(result);
+        }
+        else if (!!result && typeof result[iterator] === 'function') {
+            return subscribeToIterable(result);
+        }
+        else {
+            var value = isObject(result) ? 'an invalid object' : "'" + result + "'";
+            var msg = "You provided " + value + " where a stream was expected."
+                + ' You can provide an Observable, Promise, Array, or Iterable.';
+            throw new TypeError(msg);
+        }
+    };
+
+    function subscribeToResult(outerSubscriber, result, outerValue, outerIndex, innerSubscriber) {
+        if (innerSubscriber === void 0) { innerSubscriber = new InnerSubscriber(outerSubscriber, outerValue, outerIndex); }
+        if (innerSubscriber.closed) {
+            return undefined;
+        }
+        if (result instanceof Observable) {
+            return result.subscribe(innerSubscriber);
+        }
+        return subscribeTo(result)(innerSubscriber);
+    }
+
+    var NONE = {};
+    function combineLatest() {
+        var observables = [];
+        for (var _i = 0; _i < arguments.length; _i++) {
+            observables[_i] = arguments[_i];
+        }
+        var resultSelector = null;
+        var scheduler = null;
+        if (isScheduler(observables[observables.length - 1])) {
+            scheduler = observables.pop();
+        }
+        if (typeof observables[observables.length - 1] === 'function') {
+            resultSelector = observables.pop();
+        }
+        if (observables.length === 1 && isArray(observables[0])) {
+            observables = observables[0];
+        }
+        return fromArray(observables, scheduler).lift(new CombineLatestOperator(resultSelector));
+    }
+    var CombineLatestOperator = (function () {
+        function CombineLatestOperator(resultSelector) {
+            this.resultSelector = resultSelector;
+        }
+        CombineLatestOperator.prototype.call = function (subscriber, source) {
+            return source.subscribe(new CombineLatestSubscriber(subscriber, this.resultSelector));
+        };
+        return CombineLatestOperator;
+    }());
+    var CombineLatestSubscriber = (function (_super) {
+        __extends(CombineLatestSubscriber, _super);
+        function CombineLatestSubscriber(destination, resultSelector) {
+            var _this = _super.call(this, destination) || this;
+            _this.resultSelector = resultSelector;
+            _this.active = 0;
+            _this.values = [];
+            _this.observables = [];
+            return _this;
+        }
+        CombineLatestSubscriber.prototype._next = function (observable) {
+            this.values.push(NONE);
+            this.observables.push(observable);
+        };
+        CombineLatestSubscriber.prototype._complete = function () {
+            var observables = this.observables;
+            var len = observables.length;
+            if (len === 0) {
+                this.destination.complete();
+            }
+            else {
+                this.active = len;
+                this.toRespond = len;
+                for (var i = 0; i < len; i++) {
+                    var observable = observables[i];
+                    this.add(subscribeToResult(this, observable, observable, i));
+                }
+            }
+        };
+        CombineLatestSubscriber.prototype.notifyComplete = function (unused) {
+            if ((this.active -= 1) === 0) {
+                this.destination.complete();
+            }
+        };
+        CombineLatestSubscriber.prototype.notifyNext = function (outerValue, innerValue, outerIndex, innerIndex, innerSub) {
+            var values = this.values;
+            var oldVal = values[outerIndex];
+            var toRespond = !this.toRespond
+                ? 0
+                : oldVal === NONE ? --this.toRespond : this.toRespond;
+            values[outerIndex] = innerValue;
+            if (toRespond === 0) {
+                if (this.resultSelector) {
+                    this._tryResultSelector(values);
+                }
+                else {
+                    this.destination.next(values.slice());
+                }
+            }
+        };
+        CombineLatestSubscriber.prototype._tryResultSelector = function (values) {
+            var result;
+            try {
+                result = this.resultSelector.apply(this, values);
+            }
+            catch (err) {
+                this.destination.error(err);
+                return;
+            }
+            this.destination.next(result);
+        };
+        return CombineLatestSubscriber;
+    }(OuterSubscriber));
+
+    function scheduleObservable(input, scheduler) {
+        return new Observable(function (subscriber) {
+            var sub = new Subscription();
+            sub.add(scheduler.schedule(function () {
+                var observable$$1 = input[observable]();
+                sub.add(observable$$1.subscribe({
+                    next: function (value) { sub.add(scheduler.schedule(function () { return subscriber.next(value); })); },
+                    error: function (err) { sub.add(scheduler.schedule(function () { return subscriber.error(err); })); },
+                    complete: function () { sub.add(scheduler.schedule(function () { return subscriber.complete(); })); },
+                }));
+            }));
+            return sub;
+        });
+    }
+
+    function schedulePromise(input, scheduler) {
+        return new Observable(function (subscriber) {
+            var sub = new Subscription();
+            sub.add(scheduler.schedule(function () { return input.then(function (value) {
+                sub.add(scheduler.schedule(function () {
+                    subscriber.next(value);
+                    sub.add(scheduler.schedule(function () { return subscriber.complete(); }));
+                }));
+            }, function (err) {
+                sub.add(scheduler.schedule(function () { return subscriber.error(err); }));
+            }); }));
+            return sub;
+        });
+    }
+
+    function scheduleIterable(input, scheduler) {
+        if (!input) {
+            throw new Error('Iterable cannot be null');
+        }
+        return new Observable(function (subscriber) {
+            var sub = new Subscription();
+            var iterator$$1;
+            sub.add(function () {
+                if (iterator$$1 && typeof iterator$$1.return === 'function') {
+                    iterator$$1.return();
+                }
+            });
+            sub.add(scheduler.schedule(function () {
+                iterator$$1 = input[iterator]();
+                sub.add(scheduler.schedule(function () {
+                    if (subscriber.closed) {
+                        return;
+                    }
+                    var value;
+                    var done;
+                    try {
+                        var result = iterator$$1.next();
+                        value = result.value;
+                        done = result.done;
+                    }
+                    catch (err) {
+                        subscriber.error(err);
+                        return;
+                    }
+                    if (done) {
+                        subscriber.complete();
+                    }
+                    else {
+                        subscriber.next(value);
+                        this.schedule();
+                    }
+                }));
+            }));
+            return sub;
+        });
+    }
+
+    function isInteropObservable(input) {
+        return input && typeof input[observable] === 'function';
+    }
+
+    function isIterable(input) {
+        return input && typeof input[iterator] === 'function';
+    }
+
+    function scheduled(input, scheduler) {
+        if (input != null) {
+            if (isInteropObservable(input)) {
+                return scheduleObservable(input, scheduler);
+            }
+            else if (isPromise(input)) {
+                return schedulePromise(input, scheduler);
+            }
+            else if (isArrayLike(input)) {
+                return scheduleArray(input, scheduler);
+            }
+            else if (isIterable(input) || typeof input === 'string') {
+                return scheduleIterable(input, scheduler);
+            }
+        }
+        throw new TypeError((input !== null && typeof input || input) + ' is not observable');
+    }
+
+    function from(input, scheduler) {
+        if (!scheduler) {
+            if (input instanceof Observable) {
+                return input;
+            }
+            return new Observable(subscribeTo(input));
+        }
+        else {
+            return scheduled(input, scheduler);
+        }
+    }
+
+    function mergeMap(project, resultSelector, concurrent) {
+        if (concurrent === void 0) { concurrent = Number.POSITIVE_INFINITY; }
+        if (typeof resultSelector === 'function') {
+            return function (source) { return source.pipe(mergeMap(function (a, i) { return from(project(a, i)).pipe(map(function (b, ii) { return resultSelector(a, b, i, ii); })); }, concurrent)); };
+        }
+        else if (typeof resultSelector === 'number') {
+            concurrent = resultSelector;
+        }
+        return function (source) { return source.lift(new MergeMapOperator(project, concurrent)); };
+    }
+    var MergeMapOperator = (function () {
+        function MergeMapOperator(project, concurrent) {
+            if (concurrent === void 0) { concurrent = Number.POSITIVE_INFINITY; }
+            this.project = project;
+            this.concurrent = concurrent;
+        }
+        MergeMapOperator.prototype.call = function (observer, source) {
+            return source.subscribe(new MergeMapSubscriber(observer, this.project, this.concurrent));
+        };
+        return MergeMapOperator;
+    }());
+    var MergeMapSubscriber = (function (_super) {
+        __extends(MergeMapSubscriber, _super);
+        function MergeMapSubscriber(destination, project, concurrent) {
+            if (concurrent === void 0) { concurrent = Number.POSITIVE_INFINITY; }
+            var _this = _super.call(this, destination) || this;
+            _this.project = project;
+            _this.concurrent = concurrent;
+            _this.hasCompleted = false;
+            _this.buffer = [];
+            _this.active = 0;
+            _this.index = 0;
+            return _this;
+        }
+        MergeMapSubscriber.prototype._next = function (value) {
+            if (this.active < this.concurrent) {
+                this._tryNext(value);
+            }
+            else {
+                this.buffer.push(value);
+            }
+        };
+        MergeMapSubscriber.prototype._tryNext = function (value) {
+            var result;
+            var index = this.index++;
+            try {
+                result = this.project(value, index);
+            }
+            catch (err) {
+                this.destination.error(err);
+                return;
+            }
+            this.active++;
+            this._innerSub(result, value, index);
+        };
+        MergeMapSubscriber.prototype._innerSub = function (ish, value, index) {
+            var innerSubscriber = new InnerSubscriber(this, value, index);
+            var destination = this.destination;
+            destination.add(innerSubscriber);
+            var innerSubscription = subscribeToResult(this, ish, undefined, undefined, innerSubscriber);
+            if (innerSubscription !== innerSubscriber) {
+                destination.add(innerSubscription);
+            }
+        };
+        MergeMapSubscriber.prototype._complete = function () {
+            this.hasCompleted = true;
+            if (this.active === 0 && this.buffer.length === 0) {
+                this.destination.complete();
+            }
+            this.unsubscribe();
+        };
+        MergeMapSubscriber.prototype.notifyNext = function (outerValue, innerValue, outerIndex, innerIndex, innerSub) {
+            this.destination.next(innerValue);
+        };
+        MergeMapSubscriber.prototype.notifyComplete = function (innerSub) {
+            var buffer = this.buffer;
+            this.remove(innerSub);
+            this.active--;
+            if (buffer.length > 0) {
+                this._next(buffer.shift());
+            }
+            else if (this.active === 0 && this.hasCompleted) {
+                this.destination.complete();
+            }
+        };
+        return MergeMapSubscriber;
+    }(OuterSubscriber));
+    var flatMap = mergeMap;
+
+    function mergeAll(concurrent) {
+        if (concurrent === void 0) { concurrent = Number.POSITIVE_INFINITY; }
+        return mergeMap(identity, concurrent);
+    }
+
+    function concatAll() {
+        return mergeAll(1);
+    }
+
+    function concat() {
+        var observables = [];
+        for (var _i = 0; _i < arguments.length; _i++) {
+            observables[_i] = arguments[_i];
+        }
+        return concatAll()(of.apply(void 0, observables));
+    }
+
+    function defer(observableFactory) {
+        return new Observable(function (subscriber) {
+            var input;
+            try {
+                input = observableFactory();
+            }
+            catch (err) {
+                subscriber.error(err);
+                return undefined;
+            }
+            var source = input ? from(input) : empty$1();
+            return source.subscribe(subscriber);
+        });
+    }
+
+    function forkJoin() {
+        var sources = [];
+        for (var _i = 0; _i < arguments.length; _i++) {
+            sources[_i] = arguments[_i];
+        }
+        if (sources.length === 1) {
+            var first_1 = sources[0];
+            if (isArray(first_1)) {
+                return forkJoinInternal(first_1, null);
+            }
+            if (isObject(first_1) && Object.getPrototypeOf(first_1) === Object.prototype) {
+                var keys = Object.keys(first_1);
+                return forkJoinInternal(keys.map(function (key) { return first_1[key]; }), keys);
+            }
+        }
+        if (typeof sources[sources.length - 1] === 'function') {
+            var resultSelector_1 = sources.pop();
+            sources = (sources.length === 1 && isArray(sources[0])) ? sources[0] : sources;
+            return forkJoinInternal(sources, null).pipe(map(function (args) { return resultSelector_1.apply(void 0, args); }));
+        }
+        return forkJoinInternal(sources, null);
+    }
+    function forkJoinInternal(sources, keys) {
+        return new Observable(function (subscriber) {
+            var len = sources.length;
+            if (len === 0) {
+                subscriber.complete();
+                return;
+            }
+            var values = new Array(len);
+            var completed = 0;
+            var emitted = 0;
+            var _loop_1 = function (i) {
+                var source = from(sources[i]);
+                var hasValue = false;
+                subscriber.add(source.subscribe({
+                    next: function (value) {
+                        if (!hasValue) {
+                            hasValue = true;
+                            emitted++;
+                        }
+                        values[i] = value;
+                    },
+                    error: function (err) { return subscriber.error(err); },
+                    complete: function () {
+                        completed++;
+                        if (completed === len || !hasValue) {
+                            if (emitted === len) {
+                                subscriber.next(keys ?
+                                    keys.reduce(function (result, key, i) { return (result[key] = values[i], result); }, {}) :
+                                    values);
+                            }
+                            subscriber.complete();
+                        }
+                    }
+                }));
+            };
+            for (var i = 0; i < len; i++) {
+                _loop_1(i);
+            }
+        });
+    }
+
+    function fromEvent(target, eventName, options, resultSelector) {
+        if (isFunction(options)) {
+            resultSelector = options;
+            options = undefined;
+        }
+        if (resultSelector) {
+            return fromEvent(target, eventName, options).pipe(map(function (args) { return isArray(args) ? resultSelector.apply(void 0, args) : resultSelector(args); }));
+        }
+        return new Observable(function (subscriber) {
+            function handler(e) {
+                if (arguments.length > 1) {
+                    subscriber.next(Array.prototype.slice.call(arguments));
+                }
+                else {
+                    subscriber.next(e);
+                }
+            }
+            setupSubscription(target, eventName, handler, subscriber, options);
+        });
+    }
+    function setupSubscription(sourceObj, eventName, handler, subscriber, options) {
+        var unsubscribe;
+        if (isEventTarget(sourceObj)) {
+            var source_1 = sourceObj;
+            sourceObj.addEventListener(eventName, handler, options);
+            unsubscribe = function () { return source_1.removeEventListener(eventName, handler, options); };
+        }
+        else if (isJQueryStyleEventEmitter(sourceObj)) {
+            var source_2 = sourceObj;
+            sourceObj.on(eventName, handler);
+            unsubscribe = function () { return source_2.off(eventName, handler); };
+        }
+        else if (isNodeStyleEventEmitter(sourceObj)) {
+            var source_3 = sourceObj;
+            sourceObj.addListener(eventName, handler);
+            unsubscribe = function () { return source_3.removeListener(eventName, handler); };
+        }
+        else if (sourceObj && sourceObj.length) {
+            for (var i = 0, len = sourceObj.length; i < len; i++) {
+                setupSubscription(sourceObj[i], eventName, handler, subscriber, options);
+            }
+        }
+        else {
+            throw new TypeError('Invalid event target');
+        }
+        subscriber.add(unsubscribe);
+    }
+    function isNodeStyleEventEmitter(sourceObj) {
+        return sourceObj && typeof sourceObj.addListener === 'function' && typeof sourceObj.removeListener === 'function';
+    }
+    function isJQueryStyleEventEmitter(sourceObj) {
+        return sourceObj && typeof sourceObj.on === 'function' && typeof sourceObj.off === 'function';
+    }
+    function isEventTarget(sourceObj) {
+        return sourceObj && typeof sourceObj.addEventListener === 'function' && typeof sourceObj.removeEventListener === 'function';
+    }
+
+    function fromEventPattern(addHandler, removeHandler, resultSelector) {
+        if (resultSelector) {
+            return fromEventPattern(addHandler, removeHandler).pipe(map(function (args) { return isArray(args) ? resultSelector.apply(void 0, args) : resultSelector(args); }));
+        }
+        return new Observable(function (subscriber) {
+            var handler = function () {
+                var e = [];
+                for (var _i = 0; _i < arguments.length; _i++) {
+                    e[_i] = arguments[_i];
+                }
+                return subscriber.next(e.length === 1 ? e[0] : e);
+            };
+            var retValue;
+            try {
+                retValue = addHandler(handler);
+            }
+            catch (err) {
+                subscriber.error(err);
+                return undefined;
+            }
+            if (!isFunction(removeHandler)) {
+                return undefined;
+            }
+            return function () { return removeHandler(handler, retValue); };
+        });
+    }
+
+    function generate(initialStateOrOptions, condition, iterate, resultSelectorOrObservable, scheduler) {
+        var resultSelector;
+        var initialState;
+        if (arguments.length == 1) {
+            var options = initialStateOrOptions;
+            initialState = options.initialState;
+            condition = options.condition;
+            iterate = options.iterate;
+            resultSelector = options.resultSelector || identity;
+            scheduler = options.scheduler;
+        }
+        else if (resultSelectorOrObservable === undefined || isScheduler(resultSelectorOrObservable)) {
+            initialState = initialStateOrOptions;
+            resultSelector = identity;
+            scheduler = resultSelectorOrObservable;
+        }
+        else {
+            initialState = initialStateOrOptions;
+            resultSelector = resultSelectorOrObservable;
+        }
+        return new Observable(function (subscriber) {
+            var state = initialState;
+            if (scheduler) {
+                return scheduler.schedule(dispatch$3, 0, {
+                    subscriber: subscriber,
+                    iterate: iterate,
+                    condition: condition,
+                    resultSelector: resultSelector,
+                    state: state
+                });
+            }
+            do {
+                if (condition) {
+                    var conditionResult = void 0;
+                    try {
+                        conditionResult = condition(state);
+                    }
+                    catch (err) {
+                        subscriber.error(err);
+                        return undefined;
+                    }
+                    if (!conditionResult) {
+                        subscriber.complete();
+                        break;
+                    }
+                }
+                var value = void 0;
+                try {
+                    value = resultSelector(state);
+                }
+                catch (err) {
+                    subscriber.error(err);
+                    return undefined;
+                }
+                subscriber.next(value);
+                if (subscriber.closed) {
+                    break;
+                }
+                try {
+                    state = iterate(state);
+                }
+                catch (err) {
+                    subscriber.error(err);
+                    return undefined;
+                }
+            } while (true);
+            return undefined;
+        });
+    }
+    function dispatch$3(state) {
+        var subscriber = state.subscriber, condition = state.condition;
+        if (subscriber.closed) {
+            return undefined;
+        }
+        if (state.needIterate) {
+            try {
+                state.state = state.iterate(state.state);
+            }
+            catch (err) {
+                subscriber.error(err);
+                return undefined;
+            }
+        }
+        else {
+            state.needIterate = true;
+        }
+        if (condition) {
+            var conditionResult = void 0;
+            try {
+                conditionResult = condition(state.state);
+            }
+            catch (err) {
+                subscriber.error(err);
+                return undefined;
+            }
+            if (!conditionResult) {
+                subscriber.complete();
+                return undefined;
+            }
+            if (subscriber.closed) {
+                return undefined;
+            }
+        }
+        var value;
+        try {
+            value = state.resultSelector(state.state);
+        }
+        catch (err) {
+            subscriber.error(err);
+            return undefined;
+        }
+        if (subscriber.closed) {
+            return undefined;
+        }
+        subscriber.next(value);
+        if (subscriber.closed) {
+            return undefined;
+        }
+        return this.schedule(state);
+    }
+
+    function iif(condition, trueResult, falseResult) {
+        if (trueResult === void 0) { trueResult = EMPTY; }
+        if (falseResult === void 0) { falseResult = EMPTY; }
+        return defer(function () { return condition() ? trueResult : falseResult; });
+    }
+
+    function isNumeric(val) {
+        return !isArray(val) && (val - parseFloat(val) + 1) >= 0;
+    }
+
+    function interval(period, scheduler) {
+        if (period === void 0) { period = 0; }
+        if (scheduler === void 0) { scheduler = async; }
+        if (!isNumeric(period) || period < 0) {
+            period = 0;
+        }
+        if (!scheduler || typeof scheduler.schedule !== 'function') {
+            scheduler = async;
+        }
+        return new Observable(function (subscriber) {
+            subscriber.add(scheduler.schedule(dispatch$4, period, { subscriber: subscriber, counter: 0, period: period }));
+            return subscriber;
+        });
+    }
+    function dispatch$4(state) {
+        var subscriber = state.subscriber, counter = state.counter, period = state.period;
+        subscriber.next(counter);
+        this.schedule({ subscriber: subscriber, counter: counter + 1, period: period }, period);
+    }
+
+    function merge() {
+        var observables = [];
+        for (var _i = 0; _i < arguments.length; _i++) {
+            observables[_i] = arguments[_i];
+        }
+        var concurrent = Number.POSITIVE_INFINITY;
+        var scheduler = null;
+        var last = observables[observables.length - 1];
+        if (isScheduler(last)) {
+            scheduler = observables.pop();
+            if (observables.length > 1 && typeof observables[observables.length - 1] === 'number') {
+                concurrent = observables.pop();
+            }
+        }
+        else if (typeof last === 'number') {
+            concurrent = observables.pop();
+        }
+        if (scheduler === null && observables.length === 1 && observables[0] instanceof Observable) {
+            return observables[0];
+        }
+        return mergeAll(concurrent)(fromArray(observables, scheduler));
+    }
+
+    var NEVER = new Observable(noop);
+    function never() {
+        return NEVER;
+    }
+
+    function onErrorResumeNext() {
+        var sources = [];
+        for (var _i = 0; _i < arguments.length; _i++) {
+            sources[_i] = arguments[_i];
+        }
+        if (sources.length === 0) {
+            return EMPTY;
+        }
+        var first = sources[0], remainder = sources.slice(1);
+        if (sources.length === 1 && isArray(first)) {
+            return onErrorResumeNext.apply(void 0, first);
+        }
+        return new Observable(function (subscriber) {
+            var subNext = function () { return subscriber.add(onErrorResumeNext.apply(void 0, remainder).subscribe(subscriber)); };
+            return from(first).subscribe({
+                next: function (value) { subscriber.next(value); },
+                error: subNext,
+                complete: subNext,
+            });
+        });
+    }
+
+    function pairs(obj, scheduler) {
+        if (!scheduler) {
+            return new Observable(function (subscriber) {
+                var keys = Object.keys(obj);
+                for (var i = 0; i < keys.length && !subscriber.closed; i++) {
+                    var key = keys[i];
+                    if (obj.hasOwnProperty(key)) {
+                        subscriber.next([key, obj[key]]);
+                    }
+                }
+                subscriber.complete();
+            });
+        }
+        else {
+            return new Observable(function (subscriber) {
+                var keys = Object.keys(obj);
+                var subscription = new Subscription();
+                subscription.add(scheduler.schedule(dispatch$5, 0, { keys: keys, index: 0, subscriber: subscriber, subscription: subscription, obj: obj }));
+                return subscription;
+            });
+        }
+    }
+    function dispatch$5(state) {
+        var keys = state.keys, index = state.index, subscriber = state.subscriber, subscription = state.subscription, obj = state.obj;
+        if (!subscriber.closed) {
+            if (index < keys.length) {
+                var key = keys[index];
+                subscriber.next([key, obj[key]]);
+                subscription.add(this.schedule({ keys: keys, index: index + 1, subscriber: subscriber, subscription: subscription, obj: obj }));
+            }
+            else {
+                subscriber.complete();
+            }
+        }
+    }
+
+    function not(pred, thisArg) {
+        function notPred() {
+            return !(notPred.pred.apply(notPred.thisArg, arguments));
+        }
+        notPred.pred = pred;
+        notPred.thisArg = thisArg;
+        return notPred;
+    }
+
+    function filter(predicate, thisArg) {
+        return function filterOperatorFunction(source) {
+            return source.lift(new FilterOperator(predicate, thisArg));
+        };
+    }
+    var FilterOperator = (function () {
+        function FilterOperator(predicate, thisArg) {
+            this.predicate = predicate;
+            this.thisArg = thisArg;
+        }
+        FilterOperator.prototype.call = function (subscriber, source) {
+            return source.subscribe(new FilterSubscriber(subscriber, this.predicate, this.thisArg));
+        };
+        return FilterOperator;
+    }());
+    var FilterSubscriber = (function (_super) {
+        __extends(FilterSubscriber, _super);
+        function FilterSubscriber(destination, predicate, thisArg) {
+            var _this = _super.call(this, destination) || this;
+            _this.predicate = predicate;
+            _this.thisArg = thisArg;
+            _this.count = 0;
+            return _this;
+        }
+        FilterSubscriber.prototype._next = function (value) {
+            var result;
+            try {
+                result = this.predicate.call(this.thisArg, value, this.count++);
+            }
+            catch (err) {
+                this.destination.error(err);
+                return;
+            }
+            if (result) {
+                this.destination.next(value);
+            }
+        };
+        return FilterSubscriber;
+    }(Subscriber));
+
+    function partition(source, predicate, thisArg) {
+        return [
+            filter(predicate, thisArg)(new Observable(subscribeTo(source))),
+            filter(not(predicate, thisArg))(new Observable(subscribeTo(source)))
+        ];
+    }
+
+    function race() {
+        var observables = [];
+        for (var _i = 0; _i < arguments.length; _i++) {
+            observables[_i] = arguments[_i];
+        }
+        if (observables.length === 1) {
+            if (isArray(observables[0])) {
+                observables = observables[0];
+            }
+            else {
+                return observables[0];
+            }
+        }
+        return fromArray(observables, undefined).lift(new RaceOperator());
+    }
+    var RaceOperator = (function () {
+        function RaceOperator() {
+        }
+        RaceOperator.prototype.call = function (subscriber, source) {
+            return source.subscribe(new RaceSubscriber(subscriber));
+        };
+        return RaceOperator;
+    }());
+    var RaceSubscriber = (function (_super) {
+        __extends(RaceSubscriber, _super);
+        function RaceSubscriber(destination) {
+            var _this = _super.call(this, destination) || this;
+            _this.hasFirst = false;
+            _this.observables = [];
+            _this.subscriptions = [];
+            return _this;
+        }
+        RaceSubscriber.prototype._next = function (observable) {
+            this.observables.push(observable);
+        };
+        RaceSubscriber.prototype._complete = function () {
+            var observables = this.observables;
+            var len = observables.length;
+            if (len === 0) {
+                this.destination.complete();
+            }
+            else {
+                for (var i = 0; i < len && !this.hasFirst; i++) {
+                    var observable = observables[i];
+                    var subscription = subscribeToResult(this, observable, observable, i);
+                    if (this.subscriptions) {
+                        this.subscriptions.push(subscription);
+                    }
+                    this.add(subscription);
+                }
+                this.observables = null;
+            }
+        };
+        RaceSubscriber.prototype.notifyNext = function (outerValue, innerValue, outerIndex, innerIndex, innerSub) {
+            if (!this.hasFirst) {
+                this.hasFirst = true;
+                for (var i = 0; i < this.subscriptions.length; i++) {
+                    if (i !== outerIndex) {
+                        var subscription = this.subscriptions[i];
+                        subscription.unsubscribe();
+                        this.remove(subscription);
+                    }
+                }
+                this.subscriptions = null;
+            }
+            this.destination.next(innerValue);
+        };
+        return RaceSubscriber;
+    }(OuterSubscriber));
+
+    function range(start, count, scheduler) {
+        if (start === void 0) { start = 0; }
+        return new Observable(function (subscriber) {
+            if (count === undefined) {
+                count = start;
+                start = 0;
+            }
+            var index = 0;
+            var current = start;
+            if (scheduler) {
+                return scheduler.schedule(dispatch$6, 0, {
+                    index: index, count: count, start: start, subscriber: subscriber
+                });
+            }
+            else {
+                do {
+                    if (index++ >= count) {
+                        subscriber.complete();
+                        break;
+                    }
+                    subscriber.next(current++);
+                    if (subscriber.closed) {
+                        break;
+                    }
+                } while (true);
+            }
+            return undefined;
+        });
+    }
+    function dispatch$6(state) {
+        var start = state.start, index = state.index, count = state.count, subscriber = state.subscriber;
+        if (index >= count) {
+            subscriber.complete();
+            return;
+        }
+        subscriber.next(start);
+        if (subscriber.closed) {
+            return;
+        }
+        state.index = index + 1;
+        state.start = start + 1;
+        this.schedule(state);
+    }
+
+    function timer(dueTime, periodOrScheduler, scheduler) {
+        if (dueTime === void 0) { dueTime = 0; }
+        var period = -1;
+        if (isNumeric(periodOrScheduler)) {
+            period = Number(periodOrScheduler) < 1 && 1 || Number(periodOrScheduler);
+        }
+        else if (isScheduler(periodOrScheduler)) {
+            scheduler = periodOrScheduler;
+        }
+        if (!isScheduler(scheduler)) {
+            scheduler = async;
+        }
+        return new Observable(function (subscriber) {
+            var due = isNumeric(dueTime)
+                ? dueTime
+                : (+dueTime - scheduler.now());
+            return scheduler.schedule(dispatch$7, due, {
+                index: 0, period: period, subscriber: subscriber
+            });
+        });
+    }
+    function dispatch$7(state) {
+        var index = state.index, period = state.period, subscriber = state.subscriber;
+        subscriber.next(index);
+        if (subscriber.closed) {
+            return;
+        }
+        else if (period === -1) {
+            return subscriber.complete();
+        }
+        state.index = index + 1;
+        this.schedule(state, period);
+    }
+
+    function using(resourceFactory, observableFactory) {
+        return new Observable(function (subscriber) {
+            var resource;
+            try {
+                resource = resourceFactory();
+            }
+            catch (err) {
+                subscriber.error(err);
+                return undefined;
+            }
+            var result;
+            try {
+                result = observableFactory(resource);
+            }
+            catch (err) {
+                subscriber.error(err);
+                return undefined;
+            }
+            var source = result ? from(result) : EMPTY;
+            var subscription = source.subscribe(subscriber);
+            return function () {
+                subscription.unsubscribe();
+                if (resource) {
+                    resource.unsubscribe();
+                }
+            };
+        });
+    }
+
+    function zip() {
+        var observables = [];
+        for (var _i = 0; _i < arguments.length; _i++) {
+            observables[_i] = arguments[_i];
+        }
+        var resultSelector = observables[observables.length - 1];
+        if (typeof resultSelector === 'function') {
+            observables.pop();
+        }
+        return fromArray(observables, undefined).lift(new ZipOperator(resultSelector));
+    }
+    var ZipOperator = (function () {
+        function ZipOperator(resultSelector) {
+            this.resultSelector = resultSelector;
+        }
+        ZipOperator.prototype.call = function (subscriber, source) {
+            return source.subscribe(new ZipSubscriber(subscriber, this.resultSelector));
+        };
+        return ZipOperator;
+    }());
+    var ZipSubscriber = (function (_super) {
+        __extends(ZipSubscriber, _super);
+        function ZipSubscriber(destination, resultSelector, values) {
+            if (values === void 0) { values = Object.create(null); }
+            var _this = _super.call(this, destination) || this;
+            _this.iterators = [];
+            _this.active = 0;
+            _this.resultSelector = (typeof resultSelector === 'function') ? resultSelector : null;
+            _this.values = values;
+            return _this;
+        }
+        ZipSubscriber.prototype._next = function (value) {
+            var iterators = this.iterators;
+            if (isArray(value)) {
+                iterators.push(new StaticArrayIterator(value));
+            }
+            else if (typeof value[iterator] === 'function') {
+                iterators.push(new StaticIterator(value[iterator]()));
+            }
+            else {
+                iterators.push(new ZipBufferIterator(this.destination, this, value));
+            }
+        };
+        ZipSubscriber.prototype._complete = function () {
+            var iterators = this.iterators;
+            var len = iterators.length;
+            this.unsubscribe();
+            if (len === 0) {
+                this.destination.complete();
+                return;
+            }
+            this.active = len;
+            for (var i = 0; i < len; i++) {
+                var iterator$$1 = iterators[i];
+                if (iterator$$1.stillUnsubscribed) {
+                    var destination = this.destination;
+                    destination.add(iterator$$1.subscribe(iterator$$1, i));
+                }
+                else {
+                    this.active--;
+                }
+            }
+        };
+        ZipSubscriber.prototype.notifyInactive = function () {
+            this.active--;
+            if (this.active === 0) {
+                this.destination.complete();
+            }
+        };
+        ZipSubscriber.prototype.checkIterators = function () {
+            var iterators = this.iterators;
+            var len = iterators.length;
+            var destination = this.destination;
+            for (var i = 0; i < len; i++) {
+                var iterator$$1 = iterators[i];
+                if (typeof iterator$$1.hasValue === 'function' && !iterator$$1.hasValue()) {
+                    return;
+                }
+            }
+            var shouldComplete = false;
+            var args = [];
+            for (var i = 0; i < len; i++) {
+                var iterator$$1 = iterators[i];
+                var result = iterator$$1.next();
+                if (iterator$$1.hasCompleted()) {
+                    shouldComplete = true;
+                }
+                if (result.done) {
+                    destination.complete();
+                    return;
+                }
+                args.push(result.value);
+            }
+            if (this.resultSelector) {
+                this._tryresultSelector(args);
+            }
+            else {
+                destination.next(args);
+            }
+            if (shouldComplete) {
+                destination.complete();
+            }
+        };
+        ZipSubscriber.prototype._tryresultSelector = function (args) {
+            var result;
+            try {
+                result = this.resultSelector.apply(this, args);
+            }
+            catch (err) {
+                this.destination.error(err);
+                return;
+            }
+            this.destination.next(result);
+        };
+        return ZipSubscriber;
+    }(Subscriber));
+    var StaticIterator = (function () {
+        function StaticIterator(iterator$$1) {
+            this.iterator = iterator$$1;
+            this.nextResult = iterator$$1.next();
+        }
+        StaticIterator.prototype.hasValue = function () {
+            return true;
+        };
+        StaticIterator.prototype.next = function () {
+            var result = this.nextResult;
+            this.nextResult = this.iterator.next();
+            return result;
+        };
+        StaticIterator.prototype.hasCompleted = function () {
+            var nextResult = this.nextResult;
+            return nextResult && nextResult.done;
+        };
+        return StaticIterator;
+    }());
+    var StaticArrayIterator = (function () {
+        function StaticArrayIterator(array) {
+            this.array = array;
+            this.index = 0;
+            this.length = 0;
+            this.length = array.length;
+        }
+        StaticArrayIterator.prototype[iterator] = function () {
+            return this;
+        };
+        StaticArrayIterator.prototype.next = function (value) {
+            var i = this.index++;
+            var array = this.array;
+            return i < this.length ? { value: array[i], done: false } : { value: null, done: true };
+        };
+        StaticArrayIterator.prototype.hasValue = function () {
+            return this.array.length > this.index;
+        };
+        StaticArrayIterator.prototype.hasCompleted = function () {
+            return this.array.length === this.index;
+        };
+        return StaticArrayIterator;
+    }());
+    var ZipBufferIterator = (function (_super) {
+        __extends(ZipBufferIterator, _super);
+        function ZipBufferIterator(destination, parent, observable) {
+            var _this = _super.call(this, destination) || this;
+            _this.parent = parent;
+            _this.observable = observable;
+            _this.stillUnsubscribed = true;
+            _this.buffer = [];
+            _this.isComplete = false;
+            return _this;
+        }
+        ZipBufferIterator.prototype[iterator] = function () {
+            return this;
+        };
+        ZipBufferIterator.prototype.next = function () {
+            var buffer = this.buffer;
+            if (buffer.length === 0 && this.isComplete) {
+                return { value: null, done: true };
+            }
+            else {
+                return { value: buffer.shift(), done: false };
+            }
+        };
+        ZipBufferIterator.prototype.hasValue = function () {
+            return this.buffer.length > 0;
+        };
+        ZipBufferIterator.prototype.hasCompleted = function () {
+            return this.buffer.length === 0 && this.isComplete;
+        };
+        ZipBufferIterator.prototype.notifyComplete = function () {
+            if (this.buffer.length > 0) {
+                this.isComplete = true;
+                this.parent.notifyInactive();
+            }
+            else {
+                this.destination.complete();
+            }
+        };
+        ZipBufferIterator.prototype.notifyNext = function (outerValue, innerValue, outerIndex, innerIndex, innerSub) {
+            this.buffer.push(innerValue);
+            this.parent.checkIterators();
+        };
+        ZipBufferIterator.prototype.subscribe = function (value, index) {
+            return subscribeToResult(this, this.observable, this, index);
+        };
+        return ZipBufferIterator;
+    }(OuterSubscriber));
+
+    function audit(durationSelector) {
+        return function auditOperatorFunction(source) {
+            return source.lift(new AuditOperator(durationSelector));
+        };
+    }
+    var AuditOperator = (function () {
+        function AuditOperator(durationSelector) {
+            this.durationSelector = durationSelector;
+        }
+        AuditOperator.prototype.call = function (subscriber, source) {
+            return source.subscribe(new AuditSubscriber(subscriber, this.durationSelector));
+        };
+        return AuditOperator;
+    }());
+    var AuditSubscriber = (function (_super) {
+        __extends(AuditSubscriber, _super);
+        function AuditSubscriber(destination, durationSelector) {
+            var _this = _super.call(this, destination) || this;
+            _this.durationSelector = durationSelector;
+            _this.hasValue = false;
+            return _this;
+        }
+        AuditSubscriber.prototype._next = function (value) {
+            this.value = value;
+            this.hasValue = true;
+            if (!this.throttled) {
+                var duration = void 0;
+                try {
+                    var durationSelector = this.durationSelector;
+                    duration = durationSelector(value);
+                }
+                catch (err) {
+                    return this.destination.error(err);
+                }
+                var innerSubscription = subscribeToResult(this, duration);
+                if (!innerSubscription || innerSubscription.closed) {
+                    this.clearThrottle();
+                }
+                else {
+                    this.add(this.throttled = innerSubscription);
+                }
+            }
+        };
+        AuditSubscriber.prototype.clearThrottle = function () {
+            var _a = this, value = _a.value, hasValue = _a.hasValue, throttled = _a.throttled;
+            if (throttled) {
+                this.remove(throttled);
+                this.throttled = null;
+                throttled.unsubscribe();
+            }
+            if (hasValue) {
+                this.value = null;
+                this.hasValue = false;
+                this.destination.next(value);
+            }
+        };
+        AuditSubscriber.prototype.notifyNext = function (outerValue, innerValue, outerIndex, innerIndex) {
+            this.clearThrottle();
+        };
+        AuditSubscriber.prototype.notifyComplete = function () {
+            this.clearThrottle();
+        };
+        return AuditSubscriber;
+    }(OuterSubscriber));
+
+    function auditTime(duration, scheduler) {
+        if (scheduler === void 0) { scheduler = async; }
+        return audit(function () { return timer(duration, scheduler); });
+    }
+
+    function buffer(closingNotifier) {
+        return function bufferOperatorFunction(source) {
+            return source.lift(new BufferOperator(closingNotifier));
+        };
+    }
+    var BufferOperator = (function () {
+        function BufferOperator(closingNotifier) {
+            this.closingNotifier = closingNotifier;
+        }
+        BufferOperator.prototype.call = function (subscriber, source) {
+            return source.subscribe(new BufferSubscriber(subscriber, this.closingNotifier));
+        };
+        return BufferOperator;
+    }());
+    var BufferSubscriber = (function (_super) {
+        __extends(BufferSubscriber, _super);
+        function BufferSubscriber(destination, closingNotifier) {
+            var _this = _super.call(this, destination) || this;
+            _this.buffer = [];
+            _this.add(subscribeToResult(_this, closingNotifier));
+            return _this;
+        }
+        BufferSubscriber.prototype._next = function (value) {
+            this.buffer.push(value);
+        };
+        BufferSubscriber.prototype.notifyNext = function (outerValue, innerValue, outerIndex, innerIndex, innerSub) {
+            var buffer = this.buffer;
+            this.buffer = [];
+            this.destination.next(buffer);
+        };
+        return BufferSubscriber;
+    }(OuterSubscriber));
+
+    function bufferCount(bufferSize, startBufferEvery) {
+        if (startBufferEvery === void 0) { startBufferEvery = null; }
+        return function bufferCountOperatorFunction(source) {
+            return source.lift(new BufferCountOperator(bufferSize, startBufferEvery));
+        };
+    }
+    var BufferCountOperator = (function () {
+        function BufferCountOperator(bufferSize, startBufferEvery) {
+            this.bufferSize = bufferSize;
+            this.startBufferEvery = startBufferEvery;
+            if (!startBufferEvery || bufferSize === startBufferEvery) {
+                this.subscriberClass = BufferCountSubscriber;
+            }
+            else {
+                this.subscriberClass = BufferSkipCountSubscriber;
+            }
+        }
+        BufferCountOperator.prototype.call = function (subscriber, source) {
+            return source.subscribe(new this.subscriberClass(subscriber, this.bufferSize, this.startBufferEvery));
+        };
+        return BufferCountOperator;
+    }());
+    var BufferCountSubscriber = (function (_super) {
+        __extends(BufferCountSubscriber, _super);
+        function BufferCountSubscriber(destination, bufferSize) {
+            var _this = _super.call(this, destination) || this;
+            _this.bufferSize = bufferSize;
+            _this.buffer = [];
+            return _this;
+        }
+        BufferCountSubscriber.prototype._next = function (value) {
+            var buffer = this.buffer;
+            buffer.push(value);
+            if (buffer.length == this.bufferSize) {
+                this.destination.next(buffer);
+                this.buffer = [];
+            }
+        };
+        BufferCountSubscriber.prototype._complete = function () {
+            var buffer = this.buffer;
+            if (buffer.length > 0) {
+                this.destination.next(buffer);
+            }
+            _super.prototype._complete.call(this);
+        };
+        return BufferCountSubscriber;
+    }(Subscriber));
+    var BufferSkipCountSubscriber = (function (_super) {
+        __extends(BufferSkipCountSubscriber, _super);
+        function BufferSkipCountSubscriber(destination, bufferSize, startBufferEvery) {
+            var _this = _super.call(this, destination) || this;
+            _this.bufferSize = bufferSize;
+            _this.startBufferEvery = startBufferEvery;
+            _this.buffers = [];
+            _this.count = 0;
+            return _this;
+        }
+        BufferSkipCountSubscriber.prototype._next = function (value) {
+            var _a = this, bufferSize = _a.bufferSize, startBufferEvery = _a.startBufferEvery, buffers = _a.buffers, count = _a.count;
+            this.count++;
+            if (count % startBufferEvery === 0) {
+                buffers.push([]);
+            }
+            for (var i = buffers.length; i--;) {
+                var buffer = buffers[i];
+                buffer.push(value);
+                if (buffer.length === bufferSize) {
+                    buffers.splice(i, 1);
+                    this.destination.next(buffer);
+                }
+            }
+        };
+        BufferSkipCountSubscriber.prototype._complete = function () {
+            var _a = this, buffers = _a.buffers, destination = _a.destination;
+            while (buffers.length > 0) {
+                var buffer = buffers.shift();
+                if (buffer.length > 0) {
+                    destination.next(buffer);
+                }
+            }
+            _super.prototype._complete.call(this);
+        };
+        return BufferSkipCountSubscriber;
+    }(Subscriber));
+
+    function bufferTime(bufferTimeSpan) {
+        var length = arguments.length;
+        var scheduler = async;
+        if (isScheduler(arguments[arguments.length - 1])) {
+            scheduler = arguments[arguments.length - 1];
+            length--;
+        }
+        var bufferCreationInterval = null;
+        if (length >= 2) {
+            bufferCreationInterval = arguments[1];
+        }
+        var maxBufferSize = Number.POSITIVE_INFINITY;
+        if (length >= 3) {
+            maxBufferSize = arguments[2];
+        }
+        return function bufferTimeOperatorFunction(source) {
+            return source.lift(new BufferTimeOperator(bufferTimeSpan, bufferCreationInterval, maxBufferSize, scheduler));
+        };
+    }
+    var BufferTimeOperator = (function () {
+        function BufferTimeOperator(bufferTimeSpan, bufferCreationInterval, maxBufferSize, scheduler) {
+            this.bufferTimeSpan = bufferTimeSpan;
+            this.bufferCreationInterval = bufferCreationInterval;
+            this.maxBufferSize = maxBufferSize;
+            this.scheduler = scheduler;
+        }
+        BufferTimeOperator.prototype.call = function (subscriber, source) {
+            return source.subscribe(new BufferTimeSubscriber(subscriber, this.bufferTimeSpan, this.bufferCreationInterval, this.maxBufferSize, this.scheduler));
+        };
+        return BufferTimeOperator;
+    }());
+    var Context = (function () {
+        function Context() {
+            this.buffer = [];
+        }
+        return Context;
+    }());
+    var BufferTimeSubscriber = (function (_super) {
+        __extends(BufferTimeSubscriber, _super);
+        function BufferTimeSubscriber(destination, bufferTimeSpan, bufferCreationInterval, maxBufferSize, scheduler) {
+            var _this = _super.call(this, destination) || this;
+            _this.bufferTimeSpan = bufferTimeSpan;
+            _this.bufferCreationInterval = bufferCreationInterval;
+            _this.maxBufferSize = maxBufferSize;
+            _this.scheduler = scheduler;
+            _this.contexts = [];
+            var context = _this.openContext();
+            _this.timespanOnly = bufferCreationInterval == null || bufferCreationInterval < 0;
+            if (_this.timespanOnly) {
+                var timeSpanOnlyState = { subscriber: _this, context: context, bufferTimeSpan: bufferTimeSpan };
+                _this.add(context.closeAction = scheduler.schedule(dispatchBufferTimeSpanOnly, bufferTimeSpan, timeSpanOnlyState));
+            }
+            else {
+                var closeState = { subscriber: _this, context: context };
+                var creationState = { bufferTimeSpan: bufferTimeSpan, bufferCreationInterval: bufferCreationInterval, subscriber: _this, scheduler: scheduler };
+                _this.add(context.closeAction = scheduler.schedule(dispatchBufferClose, bufferTimeSpan, closeState));
+                _this.add(scheduler.schedule(dispatchBufferCreation, bufferCreationInterval, creationState));
+            }
+            return _this;
+        }
+        BufferTimeSubscriber.prototype._next = function (value) {
+            var contexts = this.contexts;
+            var len = contexts.length;
+            var filledBufferContext;
+            for (var i = 0; i < len; i++) {
+                var context_1 = contexts[i];
+                var buffer = context_1.buffer;
+                buffer.push(value);
+                if (buffer.length == this.maxBufferSize) {
+                    filledBufferContext = context_1;
+                }
+            }
+            if (filledBufferContext) {
+                this.onBufferFull(filledBufferContext);
+            }
+        };
+        BufferTimeSubscriber.prototype._error = function (err) {
+            this.contexts.length = 0;
+            _super.prototype._error.call(this, err);
+        };
+        BufferTimeSubscriber.prototype._complete = function () {
+            var _a = this, contexts = _a.contexts, destination = _a.destination;
+            while (contexts.length > 0) {
+                var context_2 = contexts.shift();
+                destination.next(context_2.buffer);
+            }
+            _super.prototype._complete.call(this);
+        };
+        BufferTimeSubscriber.prototype._unsubscribe = function () {
+            this.contexts = null;
+        };
+        BufferTimeSubscriber.prototype.onBufferFull = function (context) {
+            this.closeContext(context);
+            var closeAction = context.closeAction;
+            closeAction.unsubscribe();
+            this.remove(closeAction);
+            if (!this.closed && this.timespanOnly) {
+                context = this.openContext();
+                var bufferTimeSpan = this.bufferTimeSpan;
+                var timeSpanOnlyState = { subscriber: this, context: context, bufferTimeSpan: bufferTimeSpan };
+                this.add(context.closeAction = this.scheduler.schedule(dispatchBufferTimeSpanOnly, bufferTimeSpan, timeSpanOnlyState));
+            }
+        };
+        BufferTimeSubscriber.prototype.openContext = function () {
+            var context = new Context();
+            this.contexts.push(context);
+            return context;
+        };
+        BufferTimeSubscriber.prototype.closeContext = function (context) {
+            this.destination.next(context.buffer);
+            var contexts = this.contexts;
+            var spliceIndex = contexts ? contexts.indexOf(context) : -1;
+            if (spliceIndex >= 0) {
+                contexts.splice(contexts.indexOf(context), 1);
+            }
+        };
+        return BufferTimeSubscriber;
+    }(Subscriber));
+    function dispatchBufferTimeSpanOnly(state) {
+        var subscriber = state.subscriber;
+        var prevContext = state.context;
+        if (prevContext) {
+            subscriber.closeContext(prevContext);
+        }
+        if (!subscriber.closed) {
+            state.context = subscriber.openContext();
+            state.context.closeAction = this.schedule(state, state.bufferTimeSpan);
+        }
+    }
+    function dispatchBufferCreation(state) {
+        var bufferCreationInterval = state.bufferCreationInterval, bufferTimeSpan = state.bufferTimeSpan, subscriber = state.subscriber, scheduler = state.scheduler;
+        var context = subscriber.openContext();
+        var action = this;
+        if (!subscriber.closed) {
+            subscriber.add(context.closeAction = scheduler.schedule(dispatchBufferClose, bufferTimeSpan, { subscriber: subscriber, context: context }));
+            action.schedule(state, bufferCreationInterval);
+        }
+    }
+    function dispatchBufferClose(arg) {
+        var subscriber = arg.subscriber, context = arg.context;
+        subscriber.closeContext(context);
+    }
+
+    function bufferToggle(openings, closingSelector) {
+        return function bufferToggleOperatorFunction(source) {
+            return source.lift(new BufferToggleOperator(openings, closingSelector));
+        };
+    }
+    var BufferToggleOperator = (function () {
+        function BufferToggleOperator(openings, closingSelector) {
+            this.openings = openings;
+            this.closingSelector = closingSelector;
+        }
+        BufferToggleOperator.prototype.call = function (subscriber, source) {
+            return source.subscribe(new BufferToggleSubscriber(subscriber, this.openings, this.closingSelector));
+        };
+        return BufferToggleOperator;
+    }());
+    var BufferToggleSubscriber = (function (_super) {
+        __extends(BufferToggleSubscriber, _super);
+        function BufferToggleSubscriber(destination, openings, closingSelector) {
+            var _this = _super.call(this, destination) || this;
+            _this.openings = openings;
+            _this.closingSelector = closingSelector;
+            _this.contexts = [];
+            _this.add(subscribeToResult(_this, openings));
+            return _this;
+        }
+        BufferToggleSubscriber.prototype._next = function (value) {
+            var contexts = this.contexts;
+            var len = contexts.length;
+            for (var i = 0; i < len; i++) {
+                contexts[i].buffer.push(value);
+            }
+        };
+        BufferToggleSubscriber.prototype._error = function (err) {
+            var contexts = this.contexts;
+            while (contexts.length > 0) {
+                var context_1 = contexts.shift();
+                context_1.subscription.unsubscribe();
+                context_1.buffer = null;
+                context_1.subscription = null;
+            }
+            this.contexts = null;
+            _super.prototype._error.call(this, err);
+        };
+        BufferToggleSubscriber.prototype._complete = function () {
+            var contexts = this.contexts;
+            while (contexts.length > 0) {
+                var context_2 = contexts.shift();
+                this.destination.next(context_2.buffer);
+                context_2.subscription.unsubscribe();
+                context_2.buffer = null;
+                context_2.subscription = null;
+            }
+            this.contexts = null;
+            _super.prototype._complete.call(this);
+        };
+        BufferToggleSubscriber.prototype.notifyNext = function (outerValue, innerValue, outerIndex, innerIndex, innerSub) {
+            outerValue ? this.closeBuffer(outerValue) : this.openBuffer(innerValue);
+        };
+        BufferToggleSubscriber.prototype.notifyComplete = function (innerSub) {
+            this.closeBuffer(innerSub.context);
+        };
+        BufferToggleSubscriber.prototype.openBuffer = function (value) {
+            try {
+                var closingSelector = this.closingSelector;
+                var closingNotifier = closingSelector.call(this, value);
+                if (closingNotifier) {
+                    this.trySubscribe(closingNotifier);
+                }
+            }
+            catch (err) {
+                this._error(err);
+            }
+        };
+        BufferToggleSubscriber.prototype.closeBuffer = function (context) {
+            var contexts = this.contexts;
+            if (contexts && context) {
+                var buffer = context.buffer, subscription = context.subscription;
+                this.destination.next(buffer);
+                contexts.splice(contexts.indexOf(context), 1);
+                this.remove(subscription);
+                subscription.unsubscribe();
+            }
+        };
+        BufferToggleSubscriber.prototype.trySubscribe = function (closingNotifier) {
+            var contexts = this.contexts;
+            var buffer = [];
+            var subscription = new Subscription();
+            var context = { buffer: buffer, subscription: subscription };
+            contexts.push(context);
+            var innerSubscription = subscribeToResult(this, closingNotifier, context);
+            if (!innerSubscription || innerSubscription.closed) {
+                this.closeBuffer(context);
+            }
+            else {
+                innerSubscription.context = context;
+                this.add(innerSubscription);
+                subscription.add(innerSubscription);
+            }
+        };
+        return BufferToggleSubscriber;
+    }(OuterSubscriber));
+
+    function bufferWhen(closingSelector) {
+        return function (source) {
+            return source.lift(new BufferWhenOperator(closingSelector));
+        };
+    }
+    var BufferWhenOperator = (function () {
+        function BufferWhenOperator(closingSelector) {
+            this.closingSelector = closingSelector;
+        }
+        BufferWhenOperator.prototype.call = function (subscriber, source) {
+            return source.subscribe(new BufferWhenSubscriber(subscriber, this.closingSelector));
+        };
+        return BufferWhenOperator;
+    }());
+    var BufferWhenSubscriber = (function (_super) {
+        __extends(BufferWhenSubscriber, _super);
+        function BufferWhenSubscriber(destination, closingSelector) {
+            var _this = _super.call(this, destination) || this;
+            _this.closingSelector = closingSelector;
+            _this.subscribing = false;
+            _this.openBuffer();
+            return _this;
+        }
+        BufferWhenSubscriber.prototype._next = function (value) {
+            this.buffer.push(value);
+        };
+        BufferWhenSubscriber.prototype._complete = function () {
+            var buffer = this.buffer;
+            if (buffer) {
+                this.destination.next(buffer);
+            }
+            _super.prototype._complete.call(this);
+        };
+        BufferWhenSubscriber.prototype._unsubscribe = function () {
+            this.buffer = null;
+            this.subscribing = false;
+        };
+        BufferWhenSubscriber.prototype.notifyNext = function (outerValue, innerValue, outerIndex, innerIndex, innerSub) {
+            this.openBuffer();
+        };
+        BufferWhenSubscriber.prototype.notifyComplete = function () {
+            if (this.subscribing) {
+                this.complete();
+            }
+            else {
+                this.openBuffer();
+            }
+        };
+        BufferWhenSubscriber.prototype.openBuffer = function () {
+            var closingSubscription = this.closingSubscription;
+            if (closingSubscription) {
+                this.remove(closingSubscription);
+                closingSubscription.unsubscribe();
+            }
+            var buffer = this.buffer;
+            if (this.buffer) {
+                this.destination.next(buffer);
+            }
+            this.buffer = [];
+            var closingNotifier;
+            try {
+                var closingSelector = this.closingSelector;
+                closingNotifier = closingSelector();
+            }
+            catch (err) {
+                return this.error(err);
+            }
+            closingSubscription = new Subscription();
+            this.closingSubscription = closingSubscription;
+            this.add(closingSubscription);
+            this.subscribing = true;
+            closingSubscription.add(subscribeToResult(this, closingNotifier));
+            this.subscribing = false;
+        };
+        return BufferWhenSubscriber;
+    }(OuterSubscriber));
+
+    function catchError(selector) {
+        return function catchErrorOperatorFunction(source) {
+            var operator = new CatchOperator(selector);
+            var caught = source.lift(operator);
+            return (operator.caught = caught);
+        };
+    }
+    var CatchOperator = (function () {
+        function CatchOperator(selector) {
+            this.selector = selector;
+        }
+        CatchOperator.prototype.call = function (subscriber, source) {
+            return source.subscribe(new CatchSubscriber(subscriber, this.selector, this.caught));
+        };
+        return CatchOperator;
+    }());
+    var CatchSubscriber = (function (_super) {
+        __extends(CatchSubscriber, _super);
+        function CatchSubscriber(destination, selector, caught) {
+            var _this = _super.call(this, destination) || this;
+            _this.selector = selector;
+            _this.caught = caught;
+            return _this;
+        }
+        CatchSubscriber.prototype.error = function (err) {
+            if (!this.isStopped) {
+                var result = void 0;
+                try {
+                    result = this.selector(err, this.caught);
+                }
+                catch (err2) {
+                    _super.prototype.error.call(this, err2);
+                    return;
+                }
+                this._unsubscribeAndRecycle();
+                var innerSubscriber = new InnerSubscriber(this, undefined, undefined);
+                this.add(innerSubscriber);
+                var innerSubscription = subscribeToResult(this, result, undefined, undefined, innerSubscriber);
+                if (innerSubscription !== innerSubscriber) {
+                    this.add(innerSubscription);
+                }
+            }
+        };
+        return CatchSubscriber;
+    }(OuterSubscriber));
+
+    function combineAll(project) {
+        return function (source) { return source.lift(new CombineLatestOperator(project)); };
+    }
+
+    function combineLatest$1() {
+        var observables = [];
+        for (var _i = 0; _i < arguments.length; _i++) {
+            observables[_i] = arguments[_i];
+        }
+        var project = null;
+        if (typeof observables[observables.length - 1] === 'function') {
+            project = observables.pop();
+        }
+        if (observables.length === 1 && isArray(observables[0])) {
+            observables = observables[0].slice();
+        }
+        return function (source) { return source.lift.call(from([source].concat(observables)), new CombineLatestOperator(project)); };
+    }
+
+    function concat$1() {
+        var observables = [];
+        for (var _i = 0; _i < arguments.length; _i++) {
+            observables[_i] = arguments[_i];
+        }
+        return function (source) { return source.lift.call(concat.apply(void 0, [source].concat(observables))); };
+    }
+
+    function concatMap(project, resultSelector) {
+        return mergeMap(project, resultSelector, 1);
+    }
+
+    function concatMapTo(innerObservable, resultSelector) {
+        return concatMap(function () { return innerObservable; }, resultSelector);
+    }
+
+    function count(predicate) {
+        return function (source) { return source.lift(new CountOperator(predicate, source)); };
+    }
+    var CountOperator = (function () {
+        function CountOperator(predicate, source) {
+            this.predicate = predicate;
+            this.source = source;
+        }
+        CountOperator.prototype.call = function (subscriber, source) {
+            return source.subscribe(new CountSubscriber(subscriber, this.predicate, this.source));
+        };
+        return CountOperator;
+    }());
+    var CountSubscriber = (function (_super) {
+        __extends(CountSubscriber, _super);
+        function CountSubscriber(destination, predicate, source) {
+            var _this = _super.call(this, destination) || this;
+            _this.predicate = predicate;
+            _this.source = source;
+            _this.count = 0;
+            _this.index = 0;
+            return _this;
+        }
+        CountSubscriber.prototype._next = function (value) {
+            if (this.predicate) {
+                this._tryPredicate(value);
+            }
+            else {
+                this.count++;
+            }
+        };
+        CountSubscriber.prototype._tryPredicate = function (value) {
+            var result;
+            try {
+                result = this.predicate(value, this.index++, this.source);
+            }
+            catch (err) {
+                this.destination.error(err);
+                return;
+            }
+            if (result) {
+                this.count++;
+            }
+        };
+        CountSubscriber.prototype._complete = function () {
+            this.destination.next(this.count);
+            this.destination.complete();
+        };
+        return CountSubscriber;
+    }(Subscriber));
+
+    function debounce(durationSelector) {
+        return function (source) { return source.lift(new DebounceOperator(durationSelector)); };
+    }
+    var DebounceOperator = (function () {
+        function DebounceOperator(durationSelector) {
+            this.durationSelector = durationSelector;
+        }
+        DebounceOperator.prototype.call = function (subscriber, source) {
+            return source.subscribe(new DebounceSubscriber(subscriber, this.durationSelector));
+        };
+        return DebounceOperator;
+    }());
+    var DebounceSubscriber = (function (_super) {
+        __extends(DebounceSubscriber, _super);
+        function DebounceSubscriber(destination, durationSelector) {
+            var _this = _super.call(this, destination) || this;
+            _this.durationSelector = durationSelector;
+            _this.hasValue = false;
+            _this.durationSubscription = null;
+            return _this;
+        }
+        DebounceSubscriber.prototype._next = function (value) {
+            try {
+                var result = this.durationSelector.call(this, value);
+                if (result) {
+                    this._tryNext(value, result);
+                }
+            }
+            catch (err) {
+                this.destination.error(err);
+            }
+        };
+        DebounceSubscriber.prototype._complete = function () {
+            this.emitValue();
+            this.destination.complete();
+        };
+        DebounceSubscriber.prototype._tryNext = function (value, duration) {
+            var subscription = this.durationSubscription;
+            this.value = value;
+            this.hasValue = true;
+            if (subscription) {
+                subscription.unsubscribe();
+                this.remove(subscription);
+            }
+            subscription = subscribeToResult(this, duration);
+            if (subscription && !subscription.closed) {
+                this.add(this.durationSubscription = subscription);
+            }
+        };
+        DebounceSubscriber.prototype.notifyNext = function (outerValue, innerValue, outerIndex, innerIndex, innerSub) {
+            this.emitValue();
+        };
+        DebounceSubscriber.prototype.notifyComplete = function () {
+            this.emitValue();
+        };
+        DebounceSubscriber.prototype.emitValue = function () {
+            if (this.hasValue) {
+                var value = this.value;
+                var subscription = this.durationSubscription;
+                if (subscription) {
+                    this.durationSubscription = null;
+                    subscription.unsubscribe();
+                    this.remove(subscription);
+                }
+                this.value = null;
+                this.hasValue = false;
+                _super.prototype._next.call(this, value);
+            }
+        };
+        return DebounceSubscriber;
+    }(OuterSubscriber));
+
+    function debounceTime(dueTime, scheduler) {
+        if (scheduler === void 0) { scheduler = async; }
+        return function (source) { return source.lift(new DebounceTimeOperator(dueTime, scheduler)); };
+    }
+    var DebounceTimeOperator = (function () {
+        function DebounceTimeOperator(dueTime, scheduler) {
+            this.dueTime = dueTime;
+            this.scheduler = scheduler;
+        }
+        DebounceTimeOperator.prototype.call = function (subscriber, source) {
+            return source.subscribe(new DebounceTimeSubscriber(subscriber, this.dueTime, this.scheduler));
+        };
+        return DebounceTimeOperator;
+    }());
+    var DebounceTimeSubscriber = (function (_super) {
+        __extends(DebounceTimeSubscriber, _super);
+        function DebounceTimeSubscriber(destination, dueTime, scheduler) {
+            var _this = _super.call(this, destination) || this;
+            _this.dueTime = dueTime;
+            _this.scheduler = scheduler;
+            _this.debouncedSubscription = null;
+            _this.lastValue = null;
+            _this.hasValue = false;
+            return _this;
+        }
+        DebounceTimeSubscriber.prototype._next = function (value) {
+            this.clearDebounce();
+            this.lastValue = value;
+            this.hasValue = true;
+            this.add(this.debouncedSubscription = this.scheduler.schedule(dispatchNext$2, this.dueTime, this));
+        };
+        DebounceTimeSubscriber.prototype._complete = function () {
+            this.debouncedNext();
+            this.destination.complete();
+        };
+        DebounceTimeSubscriber.prototype.debouncedNext = function () {
+            this.clearDebounce();
+            if (this.hasValue) {
+                var lastValue = this.lastValue;
+                this.lastValue = null;
+                this.hasValue = false;
+                this.destination.next(lastValue);
+            }
+        };
+        DebounceTimeSubscriber.prototype.clearDebounce = function () {
+            var debouncedSubscription = this.debouncedSubscription;
+            if (debouncedSubscription !== null) {
+                this.remove(debouncedSubscription);
+                debouncedSubscription.unsubscribe();
+                this.debouncedSubscription = null;
+            }
+        };
+        return DebounceTimeSubscriber;
+    }(Subscriber));
+    function dispatchNext$2(subscriber) {
+        subscriber.debouncedNext();
+    }
+
+    function defaultIfEmpty(defaultValue) {
+        if (defaultValue === void 0) { defaultValue = null; }
+        return function (source) { return source.lift(new DefaultIfEmptyOperator(defaultValue)); };
+    }
+    var DefaultIfEmptyOperator = (function () {
+        function DefaultIfEmptyOperator(defaultValue) {
+            this.defaultValue = defaultValue;
+        }
+        DefaultIfEmptyOperator.prototype.call = function (subscriber, source) {
+            return source.subscribe(new DefaultIfEmptySubscriber(subscriber, this.defaultValue));
+        };
+        return DefaultIfEmptyOperator;
+    }());
+    var DefaultIfEmptySubscriber = (function (_super) {
+        __extends(DefaultIfEmptySubscriber, _super);
+        function DefaultIfEmptySubscriber(destination, defaultValue) {
+            var _this = _super.call(this, destination) || this;
+            _this.defaultValue = defaultValue;
+            _this.isEmpty = true;
+            return _this;
+        }
+        DefaultIfEmptySubscriber.prototype._next = function (value) {
+            this.isEmpty = false;
+            this.destination.next(value);
+        };
+        DefaultIfEmptySubscriber.prototype._complete = function () {
+            if (this.isEmpty) {
+                this.destination.next(this.defaultValue);
+            }
+            this.destination.complete();
+        };
+        return DefaultIfEmptySubscriber;
+    }(Subscriber));
+
+    function isDate(value) {
+        return value instanceof Date && !isNaN(+value);
+    }
+
+    function delay(delay, scheduler) {
+        if (scheduler === void 0) { scheduler = async; }
+        var absoluteDelay = isDate(delay);
+        var delayFor = absoluteDelay ? (+delay - scheduler.now()) : Math.abs(delay);
+        return function (source) { return source.lift(new DelayOperator(delayFor, scheduler)); };
+    }
+    var DelayOperator = (function () {
+        function DelayOperator(delay, scheduler) {
+            this.delay = delay;
+            this.scheduler = scheduler;
+        }
+        DelayOperator.prototype.call = function (subscriber, source) {
+            return source.subscribe(new DelaySubscriber(subscriber, this.delay, this.scheduler));
+        };
+        return DelayOperator;
+    }());
+    var DelaySubscriber = (function (_super) {
+        __extends(DelaySubscriber, _super);
+        function DelaySubscriber(destination, delay, scheduler) {
+            var _this = _super.call(this, destination) || this;
+            _this.delay = delay;
+            _this.scheduler = scheduler;
+            _this.queue = [];
+            _this.active = false;
+            _this.errored = false;
+            return _this;
+        }
+        DelaySubscriber.dispatch = function (state) {
+            var source = state.source;
+            var queue = source.queue;
+            var scheduler = state.scheduler;
+            var destination = state.destination;
+            while (queue.length > 0 && (queue[0].time - scheduler.now()) <= 0) {
+                queue.shift().notification.observe(destination);
+            }
+            if (queue.length > 0) {
+                var delay_1 = Math.max(0, queue[0].time - scheduler.now());
+                this.schedule(state, delay_1);
+            }
+            else {
+                this.unsubscribe();
+                source.active = false;
+            }
+        };
+        DelaySubscriber.prototype._schedule = function (scheduler) {
+            this.active = true;
+            var destination = this.destination;
+            destination.add(scheduler.schedule(DelaySubscriber.dispatch, this.delay, {
+                source: this, destination: this.destination, scheduler: scheduler
+            }));
+        };
+        DelaySubscriber.prototype.scheduleNotification = function (notification) {
+            if (this.errored === true) {
+                return;
+            }
+            var scheduler = this.scheduler;
+            var message = new DelayMessage(scheduler.now() + this.delay, notification);
+            this.queue.push(message);
+            if (this.active === false) {
+                this._schedule(scheduler);
+            }
+        };
+        DelaySubscriber.prototype._next = function (value) {
+            this.scheduleNotification(Notification.createNext(value));
+        };
+        DelaySubscriber.prototype._error = function (err) {
+            this.errored = true;
+            this.queue = [];
+            this.destination.error(err);
+            this.unsubscribe();
+        };
+        DelaySubscriber.prototype._complete = function () {
+            this.scheduleNotification(Notification.createComplete());
+            this.unsubscribe();
+        };
+        return DelaySubscriber;
+    }(Subscriber));
+    var DelayMessage = (function () {
+        function DelayMessage(time, notification) {
+            this.time = time;
+            this.notification = notification;
+        }
+        return DelayMessage;
+    }());
+
+    function delayWhen(delayDurationSelector, subscriptionDelay) {
+        if (subscriptionDelay) {
+            return function (source) {
+                return new SubscriptionDelayObservable(source, subscriptionDelay)
+                    .lift(new DelayWhenOperator(delayDurationSelector));
+            };
+        }
+        return function (source) { return source.lift(new DelayWhenOperator(delayDurationSelector)); };
+    }
+    var DelayWhenOperator = (function () {
+        function DelayWhenOperator(delayDurationSelector) {
+            this.delayDurationSelector = delayDurationSelector;
+        }
+        DelayWhenOperator.prototype.call = function (subscriber, source) {
+            return source.subscribe(new DelayWhenSubscriber(subscriber, this.delayDurationSelector));
+        };
+        return DelayWhenOperator;
+    }());
+    var DelayWhenSubscriber = (function (_super) {
+        __extends(DelayWhenSubscriber, _super);
+        function DelayWhenSubscriber(destination, delayDurationSelector) {
+            var _this = _super.call(this, destination) || this;
+            _this.delayDurationSelector = delayDurationSelector;
+            _this.completed = false;
+            _this.delayNotifierSubscriptions = [];
+            _this.index = 0;
+            return _this;
+        }
+        DelayWhenSubscriber.prototype.notifyNext = function (outerValue, innerValue, outerIndex, innerIndex, innerSub) {
+            this.destination.next(outerValue);
+            this.removeSubscription(innerSub);
+            this.tryComplete();
+        };
+        DelayWhenSubscriber.prototype.notifyError = function (error, innerSub) {
+            this._error(error);
+        };
+        DelayWhenSubscriber.prototype.notifyComplete = function (innerSub) {
+            var value = this.removeSubscription(innerSub);
+            if (value) {
+                this.destination.next(value);
+            }
+            this.tryComplete();
+        };
+        DelayWhenSubscriber.prototype._next = function (value) {
+            var index = this.index++;
+            try {
+                var delayNotifier = this.delayDurationSelector(value, index);
+                if (delayNotifier) {
+                    this.tryDelay(delayNotifier, value);
+                }
+            }
+            catch (err) {
+                this.destination.error(err);
+            }
+        };
+        DelayWhenSubscriber.prototype._complete = function () {
+            this.completed = true;
+            this.tryComplete();
+            this.unsubscribe();
+        };
+        DelayWhenSubscriber.prototype.removeSubscription = function (subscription) {
+            subscription.unsubscribe();
+            var subscriptionIdx = this.delayNotifierSubscriptions.indexOf(subscription);
+            if (subscriptionIdx !== -1) {
+                this.delayNotifierSubscriptions.splice(subscriptionIdx, 1);
+            }
+            return subscription.outerValue;
+        };
+        DelayWhenSubscriber.prototype.tryDelay = function (delayNotifier, value) {
+            var notifierSubscription = subscribeToResult(this, delayNotifier, value);
+            if (notifierSubscription && !notifierSubscription.closed) {
+                var destination = this.destination;
+                destination.add(notifierSubscription);
+                this.delayNotifierSubscriptions.push(notifierSubscription);
+            }
+        };
+        DelayWhenSubscriber.prototype.tryComplete = function () {
+            if (this.completed && this.delayNotifierSubscriptions.length === 0) {
+                this.destination.complete();
+            }
+        };
+        return DelayWhenSubscriber;
+    }(OuterSubscriber));
+    var SubscriptionDelayObservable = (function (_super) {
+        __extends(SubscriptionDelayObservable, _super);
+        function SubscriptionDelayObservable(source, subscriptionDelay) {
+            var _this = _super.call(this) || this;
+            _this.source = source;
+            _this.subscriptionDelay = subscriptionDelay;
+            return _this;
+        }
+        SubscriptionDelayObservable.prototype._subscribe = function (subscriber) {
+            this.subscriptionDelay.subscribe(new SubscriptionDelaySubscriber(subscriber, this.source));
+        };
+        return SubscriptionDelayObservable;
+    }(Observable));
+    var SubscriptionDelaySubscriber = (function (_super) {
+        __extends(SubscriptionDelaySubscriber, _super);
+        function SubscriptionDelaySubscriber(parent, source) {
+            var _this = _super.call(this) || this;
+            _this.parent = parent;
+            _this.source = source;
+            _this.sourceSubscribed = false;
+            return _this;
+        }
+        SubscriptionDelaySubscriber.prototype._next = function (unused) {
+            this.subscribeToSource();
+        };
+        SubscriptionDelaySubscriber.prototype._error = function (err) {
+            this.unsubscribe();
+            this.parent.error(err);
+        };
+        SubscriptionDelaySubscriber.prototype._complete = function () {
+            this.unsubscribe();
+            this.subscribeToSource();
+        };
+        SubscriptionDelaySubscriber.prototype.subscribeToSource = function () {
+            if (!this.sourceSubscribed) {
+                this.sourceSubscribed = true;
+                this.unsubscribe();
+                this.source.subscribe(this.parent);
+            }
+        };
+        return SubscriptionDelaySubscriber;
+    }(Subscriber));
+
+    function dematerialize() {
+        return function dematerializeOperatorFunction(source) {
+            return source.lift(new DeMaterializeOperator());
+        };
+    }
+    var DeMaterializeOperator = (function () {
+        function DeMaterializeOperator() {
+        }
+        DeMaterializeOperator.prototype.call = function (subscriber, source) {
+            return source.subscribe(new DeMaterializeSubscriber(subscriber));
+        };
+        return DeMaterializeOperator;
+    }());
+    var DeMaterializeSubscriber = (function (_super) {
+        __extends(DeMaterializeSubscriber, _super);
+        function DeMaterializeSubscriber(destination) {
+            return _super.call(this, destination) || this;
+        }
+        DeMaterializeSubscriber.prototype._next = function (value) {
+            value.observe(this.destination);
+        };
+        return DeMaterializeSubscriber;
+    }(Subscriber));
+
+    function distinct(keySelector, flushes) {
+        return function (source) { return source.lift(new DistinctOperator(keySelector, flushes)); };
+    }
+    var DistinctOperator = (function () {
+        function DistinctOperator(keySelector, flushes) {
+            this.keySelector = keySelector;
+            this.flushes = flushes;
+        }
+        DistinctOperator.prototype.call = function (subscriber, source) {
+            return source.subscribe(new DistinctSubscriber(subscriber, this.keySelector, this.flushes));
+        };
+        return DistinctOperator;
+    }());
+    var DistinctSubscriber = (function (_super) {
+        __extends(DistinctSubscriber, _super);
+        function DistinctSubscriber(destination, keySelector, flushes) {
+            var _this = _super.call(this, destination) || this;
+            _this.keySelector = keySelector;
+            _this.values = new Set();
+            if (flushes) {
+                _this.add(subscribeToResult(_this, flushes));
+            }
+            return _this;
+        }
+        DistinctSubscriber.prototype.notifyNext = function (outerValue, innerValue, outerIndex, innerIndex, innerSub) {
+            this.values.clear();
+        };
+        DistinctSubscriber.prototype.notifyError = function (error, innerSub) {
+            this._error(error);
+        };
+        DistinctSubscriber.prototype._next = function (value) {
+            if (this.keySelector) {
+                this._useKeySelector(value);
+            }
+            else {
+                this._finalizeNext(value, value);
+            }
+        };
+        DistinctSubscriber.prototype._useKeySelector = function (value) {
+            var key;
+            var destination = this.destination;
+            try {
+                key = this.keySelector(value);
+            }
+            catch (err) {
+                destination.error(err);
+                return;
+            }
+            this._finalizeNext(key, value);
+        };
+        DistinctSubscriber.prototype._finalizeNext = function (key, value) {
+            var values = this.values;
+            if (!values.has(key)) {
+                values.add(key);
+                this.destination.next(value);
+            }
+        };
+        return DistinctSubscriber;
+    }(OuterSubscriber));
+
+    function distinctUntilChanged(compare, keySelector) {
+        return function (source) { return source.lift(new DistinctUntilChangedOperator(compare, keySelector)); };
+    }
+    var DistinctUntilChangedOperator = (function () {
+        function DistinctUntilChangedOperator(compare, keySelector) {
+            this.compare = compare;
+            this.keySelector = keySelector;
+        }
+        DistinctUntilChangedOperator.prototype.call = function (subscriber, source) {
+            return source.subscribe(new DistinctUntilChangedSubscriber(subscriber, this.compare, this.keySelector));
+        };
+        return DistinctUntilChangedOperator;
+    }());
+    var DistinctUntilChangedSubscriber = (function (_super) {
+        __extends(DistinctUntilChangedSubscriber, _super);
+        function DistinctUntilChangedSubscriber(destination, compare, keySelector) {
+            var _this = _super.call(this, destination) || this;
+            _this.keySelector = keySelector;
+            _this.hasKey = false;
+            if (typeof compare === 'function') {
+                _this.compare = compare;
+            }
+            return _this;
+        }
+        DistinctUntilChangedSubscriber.prototype.compare = function (x, y) {
+            return x === y;
+        };
+        DistinctUntilChangedSubscriber.prototype._next = function (value) {
+            var key;
+            try {
+                var keySelector = this.keySelector;
+                key = keySelector ? keySelector(value) : value;
+            }
+            catch (err) {
+                return this.destination.error(err);
+            }
+            var result = false;
+            if (this.hasKey) {
+                try {
+                    var compare = this.compare;
+                    result = compare(this.key, key);
+                }
+                catch (err) {
+                    return this.destination.error(err);
+                }
+            }
+            else {
+                this.hasKey = true;
+            }
+            if (!result) {
+                this.key = key;
+                this.destination.next(value);
+            }
+        };
+        return DistinctUntilChangedSubscriber;
+    }(Subscriber));
+
+    function distinctUntilKeyChanged(key, compare) {
+        return distinctUntilChanged(function (x, y) { return compare ? compare(x[key], y[key]) : x[key] === y[key]; });
+    }
+
+    function throwIfEmpty(errorFactory) {
+        if (errorFactory === void 0) { errorFactory = defaultErrorFactory; }
+        return function (source) {
+            return source.lift(new ThrowIfEmptyOperator(errorFactory));
+        };
+    }
+    var ThrowIfEmptyOperator = (function () {
+        function ThrowIfEmptyOperator(errorFactory) {
+            this.errorFactory = errorFactory;
+        }
+        ThrowIfEmptyOperator.prototype.call = function (subscriber, source) {
+            return source.subscribe(new ThrowIfEmptySubscriber(subscriber, this.errorFactory));
+        };
+        return ThrowIfEmptyOperator;
+    }());
+    var ThrowIfEmptySubscriber = (function (_super) {
+        __extends(ThrowIfEmptySubscriber, _super);
+        function ThrowIfEmptySubscriber(destination, errorFactory) {
+            var _this = _super.call(this, destination) || this;
+            _this.errorFactory = errorFactory;
+            _this.hasValue = false;
+            return _this;
+        }
+        ThrowIfEmptySubscriber.prototype._next = function (value) {
+            this.hasValue = true;
+            this.destination.next(value);
+        };
+        ThrowIfEmptySubscriber.prototype._complete = function () {
+            if (!this.hasValue) {
+                var err = void 0;
+                try {
+                    err = this.errorFactory();
+                }
+                catch (e) {
+                    err = e;
+                }
+                this.destination.error(err);
+            }
+            else {
+                return this.destination.complete();
+            }
+        };
+        return ThrowIfEmptySubscriber;
+    }(Subscriber));
+    function defaultErrorFactory() {
+        return new EmptyError();
+    }
+
+    function take(count) {
+        return function (source) {
+            if (count === 0) {
+                return empty$1();
+            }
+            else {
+                return source.lift(new TakeOperator(count));
+            }
+        };
+    }
+    var TakeOperator = (function () {
+        function TakeOperator(total) {
+            this.total = total;
+            if (this.total < 0) {
+                throw new ArgumentOutOfRangeError;
+            }
+        }
+        TakeOperator.prototype.call = function (subscriber, source) {
+            return source.subscribe(new TakeSubscriber(subscriber, this.total));
+        };
+        return TakeOperator;
+    }());
+    var TakeSubscriber = (function (_super) {
+        __extends(TakeSubscriber, _super);
+        function TakeSubscriber(destination, total) {
+            var _this = _super.call(this, destination) || this;
+            _this.total = total;
+            _this.count = 0;
+            return _this;
+        }
+        TakeSubscriber.prototype._next = function (value) {
+            var total = this.total;
+            var count = ++this.count;
+            if (count <= total) {
+                this.destination.next(value);
+                if (count === total) {
+                    this.destination.complete();
+                    this.unsubscribe();
+                }
+            }
+        };
+        return TakeSubscriber;
+    }(Subscriber));
+
+    function elementAt(index, defaultValue) {
+        if (index < 0) {
+            throw new ArgumentOutOfRangeError();
+        }
+        var hasDefaultValue = arguments.length >= 2;
+        return function (source) { return source.pipe(filter(function (v, i) { return i === index; }), take(1), hasDefaultValue
+            ? defaultIfEmpty(defaultValue)
+            : throwIfEmpty(function () { return new ArgumentOutOfRangeError(); })); };
+    }
+
+    function endWith() {
+        var array = [];
+        for (var _i = 0; _i < arguments.length; _i++) {
+            array[_i] = arguments[_i];
+        }
+        return function (source) { return concat(source, of.apply(void 0, array)); };
+    }
+
+    function every(predicate, thisArg) {
+        return function (source) { return source.lift(new EveryOperator(predicate, thisArg, source)); };
+    }
+    var EveryOperator = (function () {
+        function EveryOperator(predicate, thisArg, source) {
+            this.predicate = predicate;
+            this.thisArg = thisArg;
+            this.source = source;
+        }
+        EveryOperator.prototype.call = function (observer, source) {
+            return source.subscribe(new EverySubscriber(observer, this.predicate, this.thisArg, this.source));
+        };
+        return EveryOperator;
+    }());
+    var EverySubscriber = (function (_super) {
+        __extends(EverySubscriber, _super);
+        function EverySubscriber(destination, predicate, thisArg, source) {
+            var _this = _super.call(this, destination) || this;
+            _this.predicate = predicate;
+            _this.thisArg = thisArg;
+            _this.source = source;
+            _this.index = 0;
+            _this.thisArg = thisArg || _this;
+            return _this;
+        }
+        EverySubscriber.prototype.notifyComplete = function (everyValueMatch) {
+            this.destination.next(everyValueMatch);
+            this.destination.complete();
+        };
+        EverySubscriber.prototype._next = function (value) {
+            var result = false;
+            try {
+                result = this.predicate.call(this.thisArg, value, this.index++, this.source);
+            }
+            catch (err) {
+                this.destination.error(err);
+                return;
+            }
+            if (!result) {
+                this.notifyComplete(false);
+            }
+        };
+        EverySubscriber.prototype._complete = function () {
+            this.notifyComplete(true);
+        };
+        return EverySubscriber;
+    }(Subscriber));
+
+    function exhaust() {
+        return function (source) { return source.lift(new SwitchFirstOperator()); };
+    }
+    var SwitchFirstOperator = (function () {
+        function SwitchFirstOperator() {
+        }
+        SwitchFirstOperator.prototype.call = function (subscriber, source) {
+            return source.subscribe(new SwitchFirstSubscriber(subscriber));
+        };
+        return SwitchFirstOperator;
+    }());
+    var SwitchFirstSubscriber = (function (_super) {
+        __extends(SwitchFirstSubscriber, _super);
+        function SwitchFirstSubscriber(destination) {
+            var _this = _super.call(this, destination) || this;
+            _this.hasCompleted = false;
+            _this.hasSubscription = false;
+            return _this;
+        }
+        SwitchFirstSubscriber.prototype._next = function (value) {
+            if (!this.hasSubscription) {
+                this.hasSubscription = true;
+                this.add(subscribeToResult(this, value));
+            }
+        };
+        SwitchFirstSubscriber.prototype._complete = function () {
+            this.hasCompleted = true;
+            if (!this.hasSubscription) {
+                this.destination.complete();
+            }
+        };
+        SwitchFirstSubscriber.prototype.notifyComplete = function (innerSub) {
+            this.remove(innerSub);
+            this.hasSubscription = false;
+            if (this.hasCompleted) {
+                this.destination.complete();
+            }
+        };
+        return SwitchFirstSubscriber;
+    }(OuterSubscriber));
+
+    function exhaustMap(project, resultSelector) {
+        if (resultSelector) {
+            return function (source) { return source.pipe(exhaustMap(function (a, i) { return from(project(a, i)).pipe(map(function (b, ii) { return resultSelector(a, b, i, ii); })); })); };
+        }
+        return function (source) {
+            return source.lift(new ExhaustMapOperator(project));
+        };
+    }
+    var ExhaustMapOperator = (function () {
+        function ExhaustMapOperator(project) {
+            this.project = project;
+        }
+        ExhaustMapOperator.prototype.call = function (subscriber, source) {
+            return source.subscribe(new ExhaustMapSubscriber(subscriber, this.project));
+        };
+        return ExhaustMapOperator;
+    }());
+    var ExhaustMapSubscriber = (function (_super) {
+        __extends(ExhaustMapSubscriber, _super);
+        function ExhaustMapSubscriber(destination, project) {
+            var _this = _super.call(this, destination) || this;
+            _this.project = project;
+            _this.hasSubscription = false;
+            _this.hasCompleted = false;
+            _this.index = 0;
+            return _this;
+        }
+        ExhaustMapSubscriber.prototype._next = function (value) {
+            if (!this.hasSubscription) {
+                this.tryNext(value);
+            }
+        };
+        ExhaustMapSubscriber.prototype.tryNext = function (value) {
+            var result;
+            var index = this.index++;
+            try {
+                result = this.project(value, index);
+            }
+            catch (err) {
+                this.destination.error(err);
+                return;
+            }
+            this.hasSubscription = true;
+            this._innerSub(result, value, index);
+        };
+        ExhaustMapSubscriber.prototype._innerSub = function (result, value, index) {
+            var innerSubscriber = new InnerSubscriber(this, value, index);
+            var destination = this.destination;
+            destination.add(innerSubscriber);
+            var innerSubscription = subscribeToResult(this, result, undefined, undefined, innerSubscriber);
+            if (innerSubscription !== innerSubscriber) {
+                destination.add(innerSubscription);
+            }
+        };
+        ExhaustMapSubscriber.prototype._complete = function () {
+            this.hasCompleted = true;
+            if (!this.hasSubscription) {
+                this.destination.complete();
+            }
+            this.unsubscribe();
+        };
+        ExhaustMapSubscriber.prototype.notifyNext = function (outerValue, innerValue, outerIndex, innerIndex, innerSub) {
+            this.destination.next(innerValue);
+        };
+        ExhaustMapSubscriber.prototype.notifyError = function (err) {
+            this.destination.error(err);
+        };
+        ExhaustMapSubscriber.prototype.notifyComplete = function (innerSub) {
+            var destination = this.destination;
+            destination.remove(innerSub);
+            this.hasSubscription = false;
+            if (this.hasCompleted) {
+                this.destination.complete();
+            }
+        };
+        return ExhaustMapSubscriber;
+    }(OuterSubscriber));
+
+    function expand(project, concurrent, scheduler) {
+        if (concurrent === void 0) { concurrent = Number.POSITIVE_INFINITY; }
+        if (scheduler === void 0) { scheduler = undefined; }
+        concurrent = (concurrent || 0) < 1 ? Number.POSITIVE_INFINITY : concurrent;
+        return function (source) { return source.lift(new ExpandOperator(project, concurrent, scheduler)); };
+    }
+    var ExpandOperator = (function () {
+        function ExpandOperator(project, concurrent, scheduler) {
+            this.project = project;
+            this.concurrent = concurrent;
+            this.scheduler = scheduler;
+        }
+        ExpandOperator.prototype.call = function (subscriber, source) {
+            return source.subscribe(new ExpandSubscriber(subscriber, this.project, this.concurrent, this.scheduler));
+        };
+        return ExpandOperator;
+    }());
+    var ExpandSubscriber = (function (_super) {
+        __extends(ExpandSubscriber, _super);
+        function ExpandSubscriber(destination, project, concurrent, scheduler) {
+            var _this = _super.call(this, destination) || this;
+            _this.project = project;
+            _this.concurrent = concurrent;
+            _this.scheduler = scheduler;
+            _this.index = 0;
+            _this.active = 0;
+            _this.hasCompleted = false;
+            if (concurrent < Number.POSITIVE_INFINITY) {
+                _this.buffer = [];
+            }
+            return _this;
+        }
+        ExpandSubscriber.dispatch = function (arg) {
+            var subscriber = arg.subscriber, result = arg.result, value = arg.value, index = arg.index;
+            subscriber.subscribeToProjection(result, value, index);
+        };
+        ExpandSubscriber.prototype._next = function (value) {
+            var destination = this.destination;
+            if (destination.closed) {
+                this._complete();
+                return;
+            }
+            var index = this.index++;
+            if (this.active < this.concurrent) {
+                destination.next(value);
+                try {
+                    var project = this.project;
+                    var result = project(value, index);
+                    if (!this.scheduler) {
+                        this.subscribeToProjection(result, value, index);
+                    }
+                    else {
+                        var state = { subscriber: this, result: result, value: value, index: index };
+                        var destination_1 = this.destination;
+                        destination_1.add(this.scheduler.schedule(ExpandSubscriber.dispatch, 0, state));
+                    }
+                }
+                catch (e) {
+                    destination.error(e);
+                }
+            }
+            else {
+                this.buffer.push(value);
+            }
+        };
+        ExpandSubscriber.prototype.subscribeToProjection = function (result, value, index) {
+            this.active++;
+            var destination = this.destination;
+            destination.add(subscribeToResult(this, result, value, index));
+        };
+        ExpandSubscriber.prototype._complete = function () {
+            this.hasCompleted = true;
+            if (this.hasCompleted && this.active === 0) {
+                this.destination.complete();
+            }
+            this.unsubscribe();
+        };
+        ExpandSubscriber.prototype.notifyNext = function (outerValue, innerValue, outerIndex, innerIndex, innerSub) {
+            this._next(innerValue);
+        };
+        ExpandSubscriber.prototype.notifyComplete = function (innerSub) {
+            var buffer = this.buffer;
+            var destination = this.destination;
+            destination.remove(innerSub);
+            this.active--;
+            if (buffer && buffer.length > 0) {
+                this._next(buffer.shift());
+            }
+            if (this.hasCompleted && this.active === 0) {
+                this.destination.complete();
+            }
+        };
+        return ExpandSubscriber;
+    }(OuterSubscriber));
+
+    function finalize(callback) {
+        return function (source) { return source.lift(new FinallyOperator(callback)); };
+    }
+    var FinallyOperator = (function () {
+        function FinallyOperator(callback) {
+            this.callback = callback;
+        }
+        FinallyOperator.prototype.call = function (subscriber, source) {
+            return source.subscribe(new FinallySubscriber(subscriber, this.callback));
+        };
+        return FinallyOperator;
+    }());
+    var FinallySubscriber = (function (_super) {
+        __extends(FinallySubscriber, _super);
+        function FinallySubscriber(destination, callback) {
+            var _this = _super.call(this, destination) || this;
+            _this.add(new Subscription(callback));
+            return _this;
+        }
+        return FinallySubscriber;
+    }(Subscriber));
+
+    function find(predicate, thisArg) {
+        if (typeof predicate !== 'function') {
+            throw new TypeError('predicate is not a function');
+        }
+        return function (source) { return source.lift(new FindValueOperator(predicate, source, false, thisArg)); };
+    }
+    var FindValueOperator = (function () {
+        function FindValueOperator(predicate, source, yieldIndex, thisArg) {
+            this.predicate = predicate;
+            this.source = source;
+            this.yieldIndex = yieldIndex;
+            this.thisArg = thisArg;
+        }
+        FindValueOperator.prototype.call = function (observer, source) {
+            return source.subscribe(new FindValueSubscriber(observer, this.predicate, this.source, this.yieldIndex, this.thisArg));
+        };
+        return FindValueOperator;
+    }());
+    var FindValueSubscriber = (function (_super) {
+        __extends(FindValueSubscriber, _super);
+        function FindValueSubscriber(destination, predicate, source, yieldIndex, thisArg) {
+            var _this = _super.call(this, destination) || this;
+            _this.predicate = predicate;
+            _this.source = source;
+            _this.yieldIndex = yieldIndex;
+            _this.thisArg = thisArg;
+            _this.index = 0;
+            return _this;
+        }
+        FindValueSubscriber.prototype.notifyComplete = function (value) {
+            var destination = this.destination;
+            destination.next(value);
+            destination.complete();
+            this.unsubscribe();
+        };
+        FindValueSubscriber.prototype._next = function (value) {
+            var _a = this, predicate = _a.predicate, thisArg = _a.thisArg;
+            var index = this.index++;
+            try {
+                var result = predicate.call(thisArg || this, value, index, this.source);
+                if (result) {
+                    this.notifyComplete(this.yieldIndex ? index : value);
+                }
+            }
+            catch (err) {
+                this.destination.error(err);
+            }
+        };
+        FindValueSubscriber.prototype._complete = function () {
+            this.notifyComplete(this.yieldIndex ? -1 : undefined);
+        };
+        return FindValueSubscriber;
+    }(Subscriber));
+
+    function findIndex(predicate, thisArg) {
+        return function (source) { return source.lift(new FindValueOperator(predicate, source, true, thisArg)); };
+    }
+
+    function first(predicate, defaultValue) {
+        var hasDefaultValue = arguments.length >= 2;
+        return function (source) { return source.pipe(predicate ? filter(function (v, i) { return predicate(v, i, source); }) : identity, take(1), hasDefaultValue ? defaultIfEmpty(defaultValue) : throwIfEmpty(function () { return new EmptyError(); })); };
+    }
+
+    function ignoreElements() {
+        return function ignoreElementsOperatorFunction(source) {
+            return source.lift(new IgnoreElementsOperator());
+        };
+    }
+    var IgnoreElementsOperator = (function () {
+        function IgnoreElementsOperator() {
+        }
+        IgnoreElementsOperator.prototype.call = function (subscriber, source) {
+            return source.subscribe(new IgnoreElementsSubscriber(subscriber));
+        };
+        return IgnoreElementsOperator;
+    }());
+    var IgnoreElementsSubscriber = (function (_super) {
+        __extends(IgnoreElementsSubscriber, _super);
+        function IgnoreElementsSubscriber() {
+            return _super !== null && _super.apply(this, arguments) || this;
+        }
+        IgnoreElementsSubscriber.prototype._next = function (unused) {
+        };
+        return IgnoreElementsSubscriber;
+    }(Subscriber));
+
+    function isEmpty() {
+        return function (source) { return source.lift(new IsEmptyOperator()); };
+    }
+    var IsEmptyOperator = (function () {
+        function IsEmptyOperator() {
+        }
+        IsEmptyOperator.prototype.call = function (observer, source) {
+            return source.subscribe(new IsEmptySubscriber(observer));
+        };
+        return IsEmptyOperator;
+    }());
+    var IsEmptySubscriber = (function (_super) {
+        __extends(IsEmptySubscriber, _super);
+        function IsEmptySubscriber(destination) {
+            return _super.call(this, destination) || this;
+        }
+        IsEmptySubscriber.prototype.notifyComplete = function (isEmpty) {
+            var destination = this.destination;
+            destination.next(isEmpty);
+            destination.complete();
+        };
+        IsEmptySubscriber.prototype._next = function (value) {
+            this.notifyComplete(false);
+        };
+        IsEmptySubscriber.prototype._complete = function () {
+            this.notifyComplete(true);
+        };
+        return IsEmptySubscriber;
+    }(Subscriber));
+
+    function takeLast(count) {
+        return function takeLastOperatorFunction(source) {
+            if (count === 0) {
+                return empty$1();
+            }
+            else {
+                return source.lift(new TakeLastOperator(count));
+            }
+        };
+    }
+    var TakeLastOperator = (function () {
+        function TakeLastOperator(total) {
+            this.total = total;
+            if (this.total < 0) {
+                throw new ArgumentOutOfRangeError;
+            }
+        }
+        TakeLastOperator.prototype.call = function (subscriber, source) {
+            return source.subscribe(new TakeLastSubscriber(subscriber, this.total));
+        };
+        return TakeLastOperator;
+    }());
+    var TakeLastSubscriber = (function (_super) {
+        __extends(TakeLastSubscriber, _super);
+        function TakeLastSubscriber(destination, total) {
+            var _this = _super.call(this, destination) || this;
+            _this.total = total;
+            _this.ring = new Array();
+            _this.count = 0;
+            return _this;
+        }
+        TakeLastSubscriber.prototype._next = function (value) {
+            var ring = this.ring;
+            var total = this.total;
+            var count = this.count++;
+            if (ring.length < total) {
+                ring.push(value);
+            }
+            else {
+                var index = count % total;
+                ring[index] = value;
+            }
+        };
+        TakeLastSubscriber.prototype._complete = function () {
+            var destination = this.destination;
+            var count = this.count;
+            if (count > 0) {
+                var total = this.count >= this.total ? this.total : this.count;
+                var ring = this.ring;
+                for (var i = 0; i < total; i++) {
+                    var idx = (count++) % total;
+                    destination.next(ring[idx]);
+                }
+            }
+            destination.complete();
+        };
+        return TakeLastSubscriber;
+    }(Subscriber));
+
+    function last(predicate, defaultValue) {
+        var hasDefaultValue = arguments.length >= 2;
+        return function (source) { return source.pipe(predicate ? filter(function (v, i) { return predicate(v, i, source); }) : identity, takeLast(1), hasDefaultValue ? defaultIfEmpty(defaultValue) : throwIfEmpty(function () { return new EmptyError(); })); };
+    }
+
+    function mapTo(value) {
+        return function (source) { return source.lift(new MapToOperator(value)); };
+    }
+    var MapToOperator = (function () {
+        function MapToOperator(value) {
+            this.value = value;
+        }
+        MapToOperator.prototype.call = function (subscriber, source) {
+            return source.subscribe(new MapToSubscriber(subscriber, this.value));
+        };
+        return MapToOperator;
+    }());
+    var MapToSubscriber = (function (_super) {
+        __extends(MapToSubscriber, _super);
+        function MapToSubscriber(destination, value) {
+            var _this = _super.call(this, destination) || this;
+            _this.value = value;
+            return _this;
+        }
+        MapToSubscriber.prototype._next = function (x) {
+            this.destination.next(this.value);
+        };
+        return MapToSubscriber;
+    }(Subscriber));
+
+    function materialize() {
+        return function materializeOperatorFunction(source) {
+            return source.lift(new MaterializeOperator());
+        };
+    }
+    var MaterializeOperator = (function () {
+        function MaterializeOperator() {
+        }
+        MaterializeOperator.prototype.call = function (subscriber, source) {
+            return source.subscribe(new MaterializeSubscriber(subscriber));
+        };
+        return MaterializeOperator;
+    }());
+    var MaterializeSubscriber = (function (_super) {
+        __extends(MaterializeSubscriber, _super);
+        function MaterializeSubscriber(destination) {
+            return _super.call(this, destination) || this;
+        }
+        MaterializeSubscriber.prototype._next = function (value) {
+            this.destination.next(Notification.createNext(value));
+        };
+        MaterializeSubscriber.prototype._error = function (err) {
+            var destination = this.destination;
+            destination.next(Notification.createError(err));
+            destination.complete();
+        };
+        MaterializeSubscriber.prototype._complete = function () {
+            var destination = this.destination;
+            destination.next(Notification.createComplete());
+            destination.complete();
+        };
+        return MaterializeSubscriber;
+    }(Subscriber));
+
+    function scan(accumulator, seed) {
+        var hasSeed = false;
+        if (arguments.length >= 2) {
+            hasSeed = true;
+        }
+        return function scanOperatorFunction(source) {
+            return source.lift(new ScanOperator(accumulator, seed, hasSeed));
+        };
+    }
+    var ScanOperator = (function () {
+        function ScanOperator(accumulator, seed, hasSeed) {
+            if (hasSeed === void 0) { hasSeed = false; }
+            this.accumulator = accumulator;
+            this.seed = seed;
+            this.hasSeed = hasSeed;
+        }
+        ScanOperator.prototype.call = function (subscriber, source) {
+            return source.subscribe(new ScanSubscriber(subscriber, this.accumulator, this.seed, this.hasSeed));
+        };
+        return ScanOperator;
+    }());
+    var ScanSubscriber = (function (_super) {
+        __extends(ScanSubscriber, _super);
+        function ScanSubscriber(destination, accumulator, _seed, hasSeed) {
+            var _this = _super.call(this, destination) || this;
+            _this.accumulator = accumulator;
+            _this._seed = _seed;
+            _this.hasSeed = hasSeed;
+            _this.index = 0;
+            return _this;
+        }
+        Object.defineProperty(ScanSubscriber.prototype, "seed", {
+            get: function () {
+                return this._seed;
+            },
+            set: function (value) {
+                this.hasSeed = true;
+                this._seed = value;
+            },
+            enumerable: true,
+            configurable: true
+        });
+        ScanSubscriber.prototype._next = function (value) {
+            if (!this.hasSeed) {
+                this.seed = value;
+                this.destination.next(value);
+            }
+            else {
+                return this._tryNext(value);
+            }
+        };
+        ScanSubscriber.prototype._tryNext = function (value) {
+            var index = this.index++;
+            var result;
+            try {
+                result = this.accumulator(this.seed, value, index);
+            }
+            catch (err) {
+                this.destination.error(err);
+            }
+            this.seed = result;
+            this.destination.next(result);
+        };
+        return ScanSubscriber;
+    }(Subscriber));
+
+    function reduce(accumulator, seed) {
+        if (arguments.length >= 2) {
+            return function reduceOperatorFunctionWithSeed(source) {
+                return pipe(scan(accumulator, seed), takeLast(1), defaultIfEmpty(seed))(source);
+            };
+        }
+        return function reduceOperatorFunction(source) {
+            return pipe(scan(function (acc, value, index) { return accumulator(acc, value, index + 1); }), takeLast(1))(source);
+        };
+    }
+
+    function max(comparer) {
+        var max = (typeof comparer === 'function')
+            ? function (x, y) { return comparer(x, y) > 0 ? x : y; }
+            : function (x, y) { return x > y ? x : y; };
+        return reduce(max);
+    }
+
+    function merge$1() {
+        var observables = [];
+        for (var _i = 0; _i < arguments.length; _i++) {
+            observables[_i] = arguments[_i];
+        }
+        return function (source) { return source.lift.call(merge.apply(void 0, [source].concat(observables))); };
+    }
+
+    function mergeMapTo(innerObservable, resultSelector, concurrent) {
+        if (concurrent === void 0) { concurrent = Number.POSITIVE_INFINITY; }
+        if (typeof resultSelector === 'function') {
+            return mergeMap(function () { return innerObservable; }, resultSelector, concurrent);
+        }
+        if (typeof resultSelector === 'number') {
+            concurrent = resultSelector;
+        }
+        return mergeMap(function () { return innerObservable; }, concurrent);
+    }
+
+    function mergeScan(accumulator, seed, concurrent) {
+        if (concurrent === void 0) { concurrent = Number.POSITIVE_INFINITY; }
+        return function (source) { return source.lift(new MergeScanOperator(accumulator, seed, concurrent)); };
+    }
+    var MergeScanOperator = (function () {
+        function MergeScanOperator(accumulator, seed, concurrent) {
+            this.accumulator = accumulator;
+            this.seed = seed;
+            this.concurrent = concurrent;
+        }
+        MergeScanOperator.prototype.call = function (subscriber, source) {
+            return source.subscribe(new MergeScanSubscriber(subscriber, this.accumulator, this.seed, this.concurrent));
+        };
+        return MergeScanOperator;
+    }());
+    var MergeScanSubscriber = (function (_super) {
+        __extends(MergeScanSubscriber, _super);
+        function MergeScanSubscriber(destination, accumulator, acc, concurrent) {
+            var _this = _super.call(this, destination) || this;
+            _this.accumulator = accumulator;
+            _this.acc = acc;
+            _this.concurrent = concurrent;
+            _this.hasValue = false;
+            _this.hasCompleted = false;
+            _this.buffer = [];
+            _this.active = 0;
+            _this.index = 0;
+            return _this;
+        }
+        MergeScanSubscriber.prototype._next = function (value) {
+            if (this.active < this.concurrent) {
+                var index = this.index++;
+                var destination = this.destination;
+                var ish = void 0;
+                try {
+                    var accumulator = this.accumulator;
+                    ish = accumulator(this.acc, value, index);
+                }
+                catch (e) {
+                    return destination.error(e);
+                }
+                this.active++;
+                this._innerSub(ish, value, index);
+            }
+            else {
+                this.buffer.push(value);
+            }
+        };
+        MergeScanSubscriber.prototype._innerSub = function (ish, value, index) {
+            var innerSubscriber = new InnerSubscriber(this, value, index);
+            var destination = this.destination;
+            destination.add(innerSubscriber);
+            var innerSubscription = subscribeToResult(this, ish, undefined, undefined, innerSubscriber);
+            if (innerSubscription !== innerSubscriber) {
+                destination.add(innerSubscription);
+            }
+        };
+        MergeScanSubscriber.prototype._complete = function () {
+            this.hasCompleted = true;
+            if (this.active === 0 && this.buffer.length === 0) {
+                if (this.hasValue === false) {
+                    this.destination.next(this.acc);
+                }
+                this.destination.complete();
+            }
+            this.unsubscribe();
+        };
+        MergeScanSubscriber.prototype.notifyNext = function (outerValue, innerValue, outerIndex, innerIndex, innerSub) {
+            var destination = this.destination;
+            this.acc = innerValue;
+            this.hasValue = true;
+            destination.next(innerValue);
+        };
+        MergeScanSubscriber.prototype.notifyComplete = function (innerSub) {
+            var buffer = this.buffer;
+            var destination = this.destination;
+            destination.remove(innerSub);
+            this.active--;
+            if (buffer.length > 0) {
+                this._next(buffer.shift());
+            }
+            else if (this.active === 0 && this.hasCompleted) {
+                if (this.hasValue === false) {
+                    this.destination.next(this.acc);
+                }
+                this.destination.complete();
+            }
+        };
+        return MergeScanSubscriber;
+    }(OuterSubscriber));
+
+    function min(comparer) {
+        var min = (typeof comparer === 'function')
+            ? function (x, y) { return comparer(x, y) < 0 ? x : y; }
+            : function (x, y) { return x < y ? x : y; };
+        return reduce(min);
+    }
+
+    function multicast(subjectOrSubjectFactory, selector) {
+        return function multicastOperatorFunction(source) {
+            var subjectFactory;
+            if (typeof subjectOrSubjectFactory === 'function') {
+                subjectFactory = subjectOrSubjectFactory;
+            }
+            else {
+                subjectFactory = function subjectFactory() {
+                    return subjectOrSubjectFactory;
+                };
+            }
+            if (typeof selector === 'function') {
+                return source.lift(new MulticastOperator(subjectFactory, selector));
+            }
+            var connectable = Object.create(source, connectableObservableDescriptor);
+            connectable.source = source;
+            connectable.subjectFactory = subjectFactory;
+            return connectable;
+        };
+    }
+    var MulticastOperator = (function () {
+        function MulticastOperator(subjectFactory, selector) {
+            this.subjectFactory = subjectFactory;
+            this.selector = selector;
+        }
+        MulticastOperator.prototype.call = function (subscriber, source) {
+            var selector = this.selector;
+            var subject = this.subjectFactory();
+            var subscription = selector(subject).subscribe(subscriber);
+            subscription.add(source.subscribe(subject));
+            return subscription;
+        };
+        return MulticastOperator;
+    }());
+
+    function onErrorResumeNext$1() {
+        var nextSources = [];
+        for (var _i = 0; _i < arguments.length; _i++) {
+            nextSources[_i] = arguments[_i];
+        }
+        if (nextSources.length === 1 && isArray(nextSources[0])) {
+            nextSources = nextSources[0];
+        }
+        return function (source) { return source.lift(new OnErrorResumeNextOperator(nextSources)); };
+    }
+    var OnErrorResumeNextOperator = (function () {
+        function OnErrorResumeNextOperator(nextSources) {
+            this.nextSources = nextSources;
+        }
+        OnErrorResumeNextOperator.prototype.call = function (subscriber, source) {
+            return source.subscribe(new OnErrorResumeNextSubscriber(subscriber, this.nextSources));
+        };
+        return OnErrorResumeNextOperator;
+    }());
+    var OnErrorResumeNextSubscriber = (function (_super) {
+        __extends(OnErrorResumeNextSubscriber, _super);
+        function OnErrorResumeNextSubscriber(destination, nextSources) {
+            var _this = _super.call(this, destination) || this;
+            _this.destination = destination;
+            _this.nextSources = nextSources;
+            return _this;
+        }
+        OnErrorResumeNextSubscriber.prototype.notifyError = function (error, innerSub) {
+            this.subscribeToNextSource();
+        };
+        OnErrorResumeNextSubscriber.prototype.notifyComplete = function (innerSub) {
+            this.subscribeToNextSource();
+        };
+        OnErrorResumeNextSubscriber.prototype._error = function (err) {
+            this.subscribeToNextSource();
+            this.unsubscribe();
+        };
+        OnErrorResumeNextSubscriber.prototype._complete = function () {
+            this.subscribeToNextSource();
+            this.unsubscribe();
+        };
+        OnErrorResumeNextSubscriber.prototype.subscribeToNextSource = function () {
+            var next = this.nextSources.shift();
+            if (!!next) {
+                var innerSubscriber = new InnerSubscriber(this, undefined, undefined);
+                var destination = this.destination;
+                destination.add(innerSubscriber);
+                var innerSubscription = subscribeToResult(this, next, undefined, undefined, innerSubscriber);
+                if (innerSubscription !== innerSubscriber) {
+                    destination.add(innerSubscription);
+                }
+            }
+            else {
+                this.destination.complete();
+            }
+        };
+        return OnErrorResumeNextSubscriber;
+    }(OuterSubscriber));
+
+    function pairwise() {
+        return function (source) { return source.lift(new PairwiseOperator()); };
+    }
+    var PairwiseOperator = (function () {
+        function PairwiseOperator() {
+        }
+        PairwiseOperator.prototype.call = function (subscriber, source) {
+            return source.subscribe(new PairwiseSubscriber(subscriber));
+        };
+        return PairwiseOperator;
+    }());
+    var PairwiseSubscriber = (function (_super) {
+        __extends(PairwiseSubscriber, _super);
+        function PairwiseSubscriber(destination) {
+            var _this = _super.call(this, destination) || this;
+            _this.hasPrev = false;
+            return _this;
+        }
+        PairwiseSubscriber.prototype._next = function (value) {
+            var pair;
+            if (this.hasPrev) {
+                pair = [this.prev, value];
+            }
+            else {
+                this.hasPrev = true;
+            }
+            this.prev = value;
+            if (pair) {
+                this.destination.next(pair);
+            }
+        };
+        return PairwiseSubscriber;
+    }(Subscriber));
+
+    function partition$1(predicate, thisArg) {
+        return function (source) { return [
+            filter(predicate, thisArg)(source),
+            filter(not(predicate, thisArg))(source)
+        ]; };
+    }
+
+    function pluck() {
+        var properties = [];
+        for (var _i = 0; _i < arguments.length; _i++) {
+            properties[_i] = arguments[_i];
+        }
+        var length = properties.length;
+        if (length === 0) {
+            throw new Error('list of properties cannot be empty.');
+        }
+        return function (source) { return map(plucker(properties, length))(source); };
+    }
+    function plucker(props, length) {
+        var mapper = function (x) {
+            var currentProp = x;
+            for (var i = 0; i < length; i++) {
+                var p = currentProp != null ? currentProp[props[i]] : undefined;
+                if (p !== void 0) {
+                    currentProp = p;
+                }
+                else {
+                    return undefined;
+                }
+            }
+            return currentProp;
+        };
+        return mapper;
+    }
+
+    function publish(selector) {
+        return selector ?
+            multicast(function () { return new Subject(); }, selector) :
+            multicast(new Subject());
+    }
+
+    function publishBehavior(value) {
+        return function (source) { return multicast(new BehaviorSubject(value))(source); };
+    }
+
+    function publishLast() {
+        return function (source) { return multicast(new AsyncSubject())(source); };
+    }
+
+    function publishReplay(bufferSize, windowTime, selectorOrScheduler, scheduler) {
+        if (selectorOrScheduler && typeof selectorOrScheduler !== 'function') {
+            scheduler = selectorOrScheduler;
+        }
+        var selector = typeof selectorOrScheduler === 'function' ? selectorOrScheduler : undefined;
+        var subject = new ReplaySubject(bufferSize, windowTime, scheduler);
+        return function (source) { return multicast(function () { return subject; }, selector)(source); };
+    }
+
+    function race$1() {
+        var observables = [];
+        for (var _i = 0; _i < arguments.length; _i++) {
+            observables[_i] = arguments[_i];
+        }
+        return function raceOperatorFunction(source) {
+            if (observables.length === 1 && isArray(observables[0])) {
+                observables = observables[0];
+            }
+            return source.lift.call(race.apply(void 0, [source].concat(observables)));
+        };
+    }
+
+    function repeat(count) {
+        if (count === void 0) { count = -1; }
+        return function (source) {
+            if (count === 0) {
+                return empty$1();
+            }
+            else if (count < 0) {
+                return source.lift(new RepeatOperator(-1, source));
+            }
+            else {
+                return source.lift(new RepeatOperator(count - 1, source));
+            }
+        };
+    }
+    var RepeatOperator = (function () {
+        function RepeatOperator(count, source) {
+            this.count = count;
+            this.source = source;
+        }
+        RepeatOperator.prototype.call = function (subscriber, source) {
+            return source.subscribe(new RepeatSubscriber(subscriber, this.count, this.source));
+        };
+        return RepeatOperator;
+    }());
+    var RepeatSubscriber = (function (_super) {
+        __extends(RepeatSubscriber, _super);
+        function RepeatSubscriber(destination, count, source) {
+            var _this = _super.call(this, destination) || this;
+            _this.count = count;
+            _this.source = source;
+            return _this;
+        }
+        RepeatSubscriber.prototype.complete = function () {
+            if (!this.isStopped) {
+                var _a = this, source = _a.source, count = _a.count;
+                if (count === 0) {
+                    return _super.prototype.complete.call(this);
+                }
+                else if (count > -1) {
+                    this.count = count - 1;
+                }
+                source.subscribe(this._unsubscribeAndRecycle());
+            }
+        };
+        return RepeatSubscriber;
+    }(Subscriber));
+
+    function repeatWhen(notifier) {
+        return function (source) { return source.lift(new RepeatWhenOperator(notifier)); };
+    }
+    var RepeatWhenOperator = (function () {
+        function RepeatWhenOperator(notifier) {
+            this.notifier = notifier;
+        }
+        RepeatWhenOperator.prototype.call = function (subscriber, source) {
+            return source.subscribe(new RepeatWhenSubscriber(subscriber, this.notifier, source));
+        };
+        return RepeatWhenOperator;
+    }());
+    var RepeatWhenSubscriber = (function (_super) {
+        __extends(RepeatWhenSubscriber, _super);
+        function RepeatWhenSubscriber(destination, notifier, source) {
+            var _this = _super.call(this, destination) || this;
+            _this.notifier = notifier;
+            _this.source = source;
+            _this.sourceIsBeingSubscribedTo = true;
+            return _this;
+        }
+        RepeatWhenSubscriber.prototype.notifyNext = function (outerValue, innerValue, outerIndex, innerIndex, innerSub) {
+            this.sourceIsBeingSubscribedTo = true;
+            this.source.subscribe(this);
+        };
+        RepeatWhenSubscriber.prototype.notifyComplete = function (innerSub) {
+            if (this.sourceIsBeingSubscribedTo === false) {
+                return _super.prototype.complete.call(this);
+            }
+        };
+        RepeatWhenSubscriber.prototype.complete = function () {
+            this.sourceIsBeingSubscribedTo = false;
+            if (!this.isStopped) {
+                if (!this.retries) {
+                    this.subscribeToRetries();
+                }
+                if (!this.retriesSubscription || this.retriesSubscription.closed) {
+                    return _super.prototype.complete.call(this);
+                }
+                this._unsubscribeAndRecycle();
+                this.notifications.next();
+            }
+        };
+        RepeatWhenSubscriber.prototype._unsubscribe = function () {
+            var _a = this, notifications = _a.notifications, retriesSubscription = _a.retriesSubscription;
+            if (notifications) {
+                notifications.unsubscribe();
+                this.notifications = null;
+            }
+            if (retriesSubscription) {
+                retriesSubscription.unsubscribe();
+                this.retriesSubscription = null;
+            }
+            this.retries = null;
+        };
+        RepeatWhenSubscriber.prototype._unsubscribeAndRecycle = function () {
+            var _unsubscribe = this._unsubscribe;
+            this._unsubscribe = null;
+            _super.prototype._unsubscribeAndRecycle.call(this);
+            this._unsubscribe = _unsubscribe;
+            return this;
+        };
+        RepeatWhenSubscriber.prototype.subscribeToRetries = function () {
+            this.notifications = new Subject();
+            var retries;
+            try {
+                var notifier = this.notifier;
+                retries = notifier(this.notifications);
+            }
+            catch (e) {
+                return _super.prototype.complete.call(this);
+            }
+            this.retries = retries;
+            this.retriesSubscription = subscribeToResult(this, retries);
+        };
+        return RepeatWhenSubscriber;
+    }(OuterSubscriber));
+
+    function retry(count) {
+        if (count === void 0) { count = -1; }
+        return function (source) { return source.lift(new RetryOperator(count, source)); };
+    }
+    var RetryOperator = (function () {
+        function RetryOperator(count, source) {
+            this.count = count;
+            this.source = source;
+        }
+        RetryOperator.prototype.call = function (subscriber, source) {
+            return source.subscribe(new RetrySubscriber(subscriber, this.count, this.source));
+        };
+        return RetryOperator;
+    }());
+    var RetrySubscriber = (function (_super) {
+        __extends(RetrySubscriber, _super);
+        function RetrySubscriber(destination, count, source) {
+            var _this = _super.call(this, destination) || this;
+            _this.count = count;
+            _this.source = source;
+            return _this;
+        }
+        RetrySubscriber.prototype.error = function (err) {
+            if (!this.isStopped) {
+                var _a = this, source = _a.source, count = _a.count;
+                if (count === 0) {
+                    return _super.prototype.error.call(this, err);
+                }
+                else if (count > -1) {
+                    this.count = count - 1;
+                }
+                source.subscribe(this._unsubscribeAndRecycle());
+            }
+        };
+        return RetrySubscriber;
+    }(Subscriber));
+
+    function retryWhen(notifier) {
+        return function (source) { return source.lift(new RetryWhenOperator(notifier, source)); };
+    }
+    var RetryWhenOperator = (function () {
+        function RetryWhenOperator(notifier, source) {
+            this.notifier = notifier;
+            this.source = source;
+        }
+        RetryWhenOperator.prototype.call = function (subscriber, source) {
+            return source.subscribe(new RetryWhenSubscriber(subscriber, this.notifier, this.source));
+        };
+        return RetryWhenOperator;
+    }());
+    var RetryWhenSubscriber = (function (_super) {
+        __extends(RetryWhenSubscriber, _super);
+        function RetryWhenSubscriber(destination, notifier, source) {
+            var _this = _super.call(this, destination) || this;
+            _this.notifier = notifier;
+            _this.source = source;
+            return _this;
+        }
+        RetryWhenSubscriber.prototype.error = function (err) {
+            if (!this.isStopped) {
+                var errors = this.errors;
+                var retries = this.retries;
+                var retriesSubscription = this.retriesSubscription;
+                if (!retries) {
+                    errors = new Subject();
+                    try {
+                        var notifier = this.notifier;
+                        retries = notifier(errors);
+                    }
+                    catch (e) {
+                        return _super.prototype.error.call(this, e);
+                    }
+                    retriesSubscription = subscribeToResult(this, retries);
+                }
+                else {
+                    this.errors = null;
+                    this.retriesSubscription = null;
+                }
+                this._unsubscribeAndRecycle();
+                this.errors = errors;
+                this.retries = retries;
+                this.retriesSubscription = retriesSubscription;
+                errors.next(err);
+            }
+        };
+        RetryWhenSubscriber.prototype._unsubscribe = function () {
+            var _a = this, errors = _a.errors, retriesSubscription = _a.retriesSubscription;
+            if (errors) {
+                errors.unsubscribe();
+                this.errors = null;
+            }
+            if (retriesSubscription) {
+                retriesSubscription.unsubscribe();
+                this.retriesSubscription = null;
+            }
+            this.retries = null;
+        };
+        RetryWhenSubscriber.prototype.notifyNext = function (outerValue, innerValue, outerIndex, innerIndex, innerSub) {
+            var _unsubscribe = this._unsubscribe;
+            this._unsubscribe = null;
+            this._unsubscribeAndRecycle();
+            this._unsubscribe = _unsubscribe;
+            this.source.subscribe(this);
+        };
+        return RetryWhenSubscriber;
+    }(OuterSubscriber));
+
+    function sample(notifier) {
+        return function (source) { return source.lift(new SampleOperator(notifier)); };
+    }
+    var SampleOperator = (function () {
+        function SampleOperator(notifier) {
+            this.notifier = notifier;
+        }
+        SampleOperator.prototype.call = function (subscriber, source) {
+            var sampleSubscriber = new SampleSubscriber(subscriber);
+            var subscription = source.subscribe(sampleSubscriber);
+            subscription.add(subscribeToResult(sampleSubscriber, this.notifier));
+            return subscription;
+        };
+        return SampleOperator;
+    }());
+    var SampleSubscriber = (function (_super) {
+        __extends(SampleSubscriber, _super);
+        function SampleSubscriber() {
+            var _this = _super !== null && _super.apply(this, arguments) || this;
+            _this.hasValue = false;
+            return _this;
+        }
+        SampleSubscriber.prototype._next = function (value) {
+            this.value = value;
+            this.hasValue = true;
+        };
+        SampleSubscriber.prototype.notifyNext = function (outerValue, innerValue, outerIndex, innerIndex, innerSub) {
+            this.emitValue();
+        };
+        SampleSubscriber.prototype.notifyComplete = function () {
+            this.emitValue();
+        };
+        SampleSubscriber.prototype.emitValue = function () {
+            if (this.hasValue) {
+                this.hasValue = false;
+                this.destination.next(this.value);
+            }
+        };
+        return SampleSubscriber;
+    }(OuterSubscriber));
+
+    function sampleTime(period, scheduler) {
+        if (scheduler === void 0) { scheduler = async; }
+        return function (source) { return source.lift(new SampleTimeOperator(period, scheduler)); };
+    }
+    var SampleTimeOperator = (function () {
+        function SampleTimeOperator(period, scheduler) {
+            this.period = period;
+            this.scheduler = scheduler;
+        }
+        SampleTimeOperator.prototype.call = function (subscriber, source) {
+            return source.subscribe(new SampleTimeSubscriber(subscriber, this.period, this.scheduler));
+        };
+        return SampleTimeOperator;
+    }());
+    var SampleTimeSubscriber = (function (_super) {
+        __extends(SampleTimeSubscriber, _super);
+        function SampleTimeSubscriber(destination, period, scheduler) {
+            var _this = _super.call(this, destination) || this;
+            _this.period = period;
+            _this.scheduler = scheduler;
+            _this.hasValue = false;
+            _this.add(scheduler.schedule(dispatchNotification, period, { subscriber: _this, period: period }));
+            return _this;
+        }
+        SampleTimeSubscriber.prototype._next = function (value) {
+            this.lastValue = value;
+            this.hasValue = true;
+        };
+        SampleTimeSubscriber.prototype.notifyNext = function () {
+            if (this.hasValue) {
+                this.hasValue = false;
+                this.destination.next(this.lastValue);
+            }
+        };
+        return SampleTimeSubscriber;
+    }(Subscriber));
+    function dispatchNotification(state) {
+        var subscriber = state.subscriber, period = state.period;
+        subscriber.notifyNext();
+        this.schedule(state, period);
+    }
+
+    function sequenceEqual(compareTo, comparator) {
+        return function (source) { return source.lift(new SequenceEqualOperator(compareTo, comparator)); };
+    }
+    var SequenceEqualOperator = (function () {
+        function SequenceEqualOperator(compareTo, comparator) {
+            this.compareTo = compareTo;
+            this.comparator = comparator;
+        }
+        SequenceEqualOperator.prototype.call = function (subscriber, source) {
+            return source.subscribe(new SequenceEqualSubscriber(subscriber, this.compareTo, this.comparator));
+        };
+        return SequenceEqualOperator;
+    }());
+    var SequenceEqualSubscriber = (function (_super) {
+        __extends(SequenceEqualSubscriber, _super);
+        function SequenceEqualSubscriber(destination, compareTo, comparator) {
+            var _this = _super.call(this, destination) || this;
+            _this.compareTo = compareTo;
+            _this.comparator = comparator;
+            _this._a = [];
+            _this._b = [];
+            _this._oneComplete = false;
+            _this.destination.add(compareTo.subscribe(new SequenceEqualCompareToSubscriber(destination, _this)));
+            return _this;
+        }
+        SequenceEqualSubscriber.prototype._next = function (value) {
+            if (this._oneComplete && this._b.length === 0) {
+                this.emit(false);
+            }
+            else {
+                this._a.push(value);
+                this.checkValues();
+            }
+        };
+        SequenceEqualSubscriber.prototype._complete = function () {
+            if (this._oneComplete) {
+                this.emit(this._a.length === 0 && this._b.length === 0);
+            }
+            else {
+                this._oneComplete = true;
+            }
+            this.unsubscribe();
+        };
+        SequenceEqualSubscriber.prototype.checkValues = function () {
+            var _c = this, _a = _c._a, _b = _c._b, comparator = _c.comparator;
+            while (_a.length > 0 && _b.length > 0) {
+                var a = _a.shift();
+                var b = _b.shift();
+                var areEqual = false;
+                try {
+                    areEqual = comparator ? comparator(a, b) : a === b;
+                }
+                catch (e) {
+                    this.destination.error(e);
+                }
+                if (!areEqual) {
+                    this.emit(false);
+                }
+            }
+        };
+        SequenceEqualSubscriber.prototype.emit = function (value) {
+            var destination = this.destination;
+            destination.next(value);
+            destination.complete();
+        };
+        SequenceEqualSubscriber.prototype.nextB = function (value) {
+            if (this._oneComplete && this._a.length === 0) {
+                this.emit(false);
+            }
+            else {
+                this._b.push(value);
+                this.checkValues();
+            }
+        };
+        SequenceEqualSubscriber.prototype.completeB = function () {
+            if (this._oneComplete) {
+                this.emit(this._a.length === 0 && this._b.length === 0);
+            }
+            else {
+                this._oneComplete = true;
+            }
+        };
+        return SequenceEqualSubscriber;
+    }(Subscriber));
+    var SequenceEqualCompareToSubscriber = (function (_super) {
+        __extends(SequenceEqualCompareToSubscriber, _super);
+        function SequenceEqualCompareToSubscriber(destination, parent) {
+            var _this = _super.call(this, destination) || this;
+            _this.parent = parent;
+            return _this;
+        }
+        SequenceEqualCompareToSubscriber.prototype._next = function (value) {
+            this.parent.nextB(value);
+        };
+        SequenceEqualCompareToSubscriber.prototype._error = function (err) {
+            this.parent.error(err);
+            this.unsubscribe();
+        };
+        SequenceEqualCompareToSubscriber.prototype._complete = function () {
+            this.parent.completeB();
+            this.unsubscribe();
+        };
+        return SequenceEqualCompareToSubscriber;
+    }(Subscriber));
+
+    function shareSubjectFactory() {
+        return new Subject();
+    }
+    function share() {
+        return function (source) { return refCount()(multicast(shareSubjectFactory)(source)); };
+    }
+
+    function shareReplay(configOrBufferSize, windowTime, scheduler) {
+        var config;
+        if (configOrBufferSize && typeof configOrBufferSize === 'object') {
+            config = configOrBufferSize;
+        }
+        else {
+            config = {
+                bufferSize: configOrBufferSize,
+                windowTime: windowTime,
+                refCount: false,
+                scheduler: scheduler
+            };
+        }
+        return function (source) { return source.lift(shareReplayOperator(config)); };
+    }
+    function shareReplayOperator(_a) {
+        var _b = _a.bufferSize, bufferSize = _b === void 0 ? Number.POSITIVE_INFINITY : _b, _c = _a.windowTime, windowTime = _c === void 0 ? Number.POSITIVE_INFINITY : _c, useRefCount = _a.refCount, scheduler = _a.scheduler;
+        var subject;
+        var refCount = 0;
+        var subscription;
+        var hasError = false;
+        var isComplete = false;
+        return function shareReplayOperation(source) {
+            refCount++;
+            var innerSub;
+            if (!subject || hasError) {
+                hasError = false;
+                subject = new ReplaySubject(bufferSize, windowTime, scheduler);
+                innerSub = subject.subscribe(this);
+                subscription = source.subscribe({
+                    next: function (value) { subject.next(value); },
+                    error: function (err) {
+                        hasError = true;
+                        subject.error(err);
+                    },
+                    complete: function () {
+                        isComplete = true;
+                        subscription = undefined;
+                        subject.complete();
+                    },
+                });
+            }
+            else {
+                innerSub = subject.subscribe(this);
+            }
+            this.add(function () {
+                refCount--;
+                innerSub.unsubscribe();
+                if (subscription && !isComplete && useRefCount && refCount === 0) {
+                    subscription.unsubscribe();
+                    subscription = undefined;
+                    subject = undefined;
+                }
+            });
+        };
+    }
+
+    function single(predicate) {
+        return function (source) { return source.lift(new SingleOperator(predicate, source)); };
+    }
+    var SingleOperator = (function () {
+        function SingleOperator(predicate, source) {
+            this.predicate = predicate;
+            this.source = source;
+        }
+        SingleOperator.prototype.call = function (subscriber, source) {
+            return source.subscribe(new SingleSubscriber(subscriber, this.predicate, this.source));
+        };
+        return SingleOperator;
+    }());
+    var SingleSubscriber = (function (_super) {
+        __extends(SingleSubscriber, _super);
+        function SingleSubscriber(destination, predicate, source) {
+            var _this = _super.call(this, destination) || this;
+            _this.predicate = predicate;
+            _this.source = source;
+            _this.seenValue = false;
+            _this.index = 0;
+            return _this;
+        }
+        SingleSubscriber.prototype.applySingleValue = function (value) {
+            if (this.seenValue) {
+                this.destination.error('Sequence contains more than one element');
+            }
+            else {
+                this.seenValue = true;
+                this.singleValue = value;
+            }
+        };
+        SingleSubscriber.prototype._next = function (value) {
+            var index = this.index++;
+            if (this.predicate) {
+                this.tryNext(value, index);
+            }
+            else {
+                this.applySingleValue(value);
+            }
+        };
+        SingleSubscriber.prototype.tryNext = function (value, index) {
+            try {
+                if (this.predicate(value, index, this.source)) {
+                    this.applySingleValue(value);
+                }
+            }
+            catch (err) {
+                this.destination.error(err);
+            }
+        };
+        SingleSubscriber.prototype._complete = function () {
+            var destination = this.destination;
+            if (this.index > 0) {
+                destination.next(this.seenValue ? this.singleValue : undefined);
+                destination.complete();
+            }
+            else {
+                destination.error(new EmptyError);
+            }
+        };
+        return SingleSubscriber;
+    }(Subscriber));
+
+    function skip(count) {
+        return function (source) { return source.lift(new SkipOperator(count)); };
+    }
+    var SkipOperator = (function () {
+        function SkipOperator(total) {
+            this.total = total;
+        }
+        SkipOperator.prototype.call = function (subscriber, source) {
+            return source.subscribe(new SkipSubscriber(subscriber, this.total));
+        };
+        return SkipOperator;
+    }());
+    var SkipSubscriber = (function (_super) {
+        __extends(SkipSubscriber, _super);
+        function SkipSubscriber(destination, total) {
+            var _this = _super.call(this, destination) || this;
+            _this.total = total;
+            _this.count = 0;
+            return _this;
+        }
+        SkipSubscriber.prototype._next = function (x) {
+            if (++this.count > this.total) {
+                this.destination.next(x);
+            }
+        };
+        return SkipSubscriber;
+    }(Subscriber));
+
+    function skipLast(count) {
+        return function (source) { return source.lift(new SkipLastOperator(count)); };
+    }
+    var SkipLastOperator = (function () {
+        function SkipLastOperator(_skipCount) {
+            this._skipCount = _skipCount;
+            if (this._skipCount < 0) {
+                throw new ArgumentOutOfRangeError;
+            }
+        }
+        SkipLastOperator.prototype.call = function (subscriber, source) {
+            if (this._skipCount === 0) {
+                return source.subscribe(new Subscriber(subscriber));
+            }
+            else {
+                return source.subscribe(new SkipLastSubscriber(subscriber, this._skipCount));
+            }
+        };
+        return SkipLastOperator;
+    }());
+    var SkipLastSubscriber = (function (_super) {
+        __extends(SkipLastSubscriber, _super);
+        function SkipLastSubscriber(destination, _skipCount) {
+            var _this = _super.call(this, destination) || this;
+            _this._skipCount = _skipCount;
+            _this._count = 0;
+            _this._ring = new Array(_skipCount);
+            return _this;
+        }
+        SkipLastSubscriber.prototype._next = function (value) {
+            var skipCount = this._skipCount;
+            var count = this._count++;
+            if (count < skipCount) {
+                this._ring[count] = value;
+            }
+            else {
+                var currentIndex = count % skipCount;
+                var ring = this._ring;
+                var oldValue = ring[currentIndex];
+                ring[currentIndex] = value;
+                this.destination.next(oldValue);
+            }
+        };
+        return SkipLastSubscriber;
+    }(Subscriber));
+
+    function skipUntil(notifier) {
+        return function (source) { return source.lift(new SkipUntilOperator(notifier)); };
+    }
+    var SkipUntilOperator = (function () {
+        function SkipUntilOperator(notifier) {
+            this.notifier = notifier;
+        }
+        SkipUntilOperator.prototype.call = function (destination, source) {
+            return source.subscribe(new SkipUntilSubscriber(destination, this.notifier));
+        };
+        return SkipUntilOperator;
+    }());
+    var SkipUntilSubscriber = (function (_super) {
+        __extends(SkipUntilSubscriber, _super);
+        function SkipUntilSubscriber(destination, notifier) {
+            var _this = _super.call(this, destination) || this;
+            _this.hasValue = false;
+            var innerSubscriber = new InnerSubscriber(_this, undefined, undefined);
+            _this.add(innerSubscriber);
+            _this.innerSubscription = innerSubscriber;
+            var innerSubscription = subscribeToResult(_this, notifier, undefined, undefined, innerSubscriber);
+            if (innerSubscription !== innerSubscriber) {
+                _this.add(innerSubscription);
+                _this.innerSubscription = innerSubscription;
+            }
+            return _this;
+        }
+        SkipUntilSubscriber.prototype._next = function (value) {
+            if (this.hasValue) {
+                _super.prototype._next.call(this, value);
+            }
+        };
+        SkipUntilSubscriber.prototype.notifyNext = function (outerValue, innerValue, outerIndex, innerIndex, innerSub) {
+            this.hasValue = true;
+            if (this.innerSubscription) {
+                this.innerSubscription.unsubscribe();
+            }
+        };
+        SkipUntilSubscriber.prototype.notifyComplete = function () {
+        };
+        return SkipUntilSubscriber;
+    }(OuterSubscriber));
+
+    function skipWhile(predicate) {
+        return function (source) { return source.lift(new SkipWhileOperator(predicate)); };
+    }
+    var SkipWhileOperator = (function () {
+        function SkipWhileOperator(predicate) {
+            this.predicate = predicate;
+        }
+        SkipWhileOperator.prototype.call = function (subscriber, source) {
+            return source.subscribe(new SkipWhileSubscriber(subscriber, this.predicate));
+        };
+        return SkipWhileOperator;
+    }());
+    var SkipWhileSubscriber = (function (_super) {
+        __extends(SkipWhileSubscriber, _super);
+        function SkipWhileSubscriber(destination, predicate) {
+            var _this = _super.call(this, destination) || this;
+            _this.predicate = predicate;
+            _this.skipping = true;
+            _this.index = 0;
+            return _this;
+        }
+        SkipWhileSubscriber.prototype._next = function (value) {
+            var destination = this.destination;
+            if (this.skipping) {
+                this.tryCallPredicate(value);
+            }
+            if (!this.skipping) {
+                destination.next(value);
+            }
+        };
+        SkipWhileSubscriber.prototype.tryCallPredicate = function (value) {
+            try {
+                var result = this.predicate(value, this.index++);
+                this.skipping = Boolean(result);
+            }
+            catch (err) {
+                this.destination.error(err);
+            }
+        };
+        return SkipWhileSubscriber;
+    }(Subscriber));
+
+    function startWith() {
+        var array = [];
+        for (var _i = 0; _i < arguments.length; _i++) {
+            array[_i] = arguments[_i];
+        }
+        var scheduler = array[array.length - 1];
+        if (isScheduler(scheduler)) {
+            array.pop();
+            return function (source) { return concat(array, source, scheduler); };
+        }
+        else {
+            return function (source) { return concat(array, source); };
+        }
+    }
+
+    var SubscribeOnObservable = (function (_super) {
+        __extends(SubscribeOnObservable, _super);
+        function SubscribeOnObservable(source, delayTime, scheduler) {
+            if (delayTime === void 0) { delayTime = 0; }
+            if (scheduler === void 0) { scheduler = asap; }
+            var _this = _super.call(this) || this;
+            _this.source = source;
+            _this.delayTime = delayTime;
+            _this.scheduler = scheduler;
+            if (!isNumeric(delayTime) || delayTime < 0) {
+                _this.delayTime = 0;
+            }
+            if (!scheduler || typeof scheduler.schedule !== 'function') {
+                _this.scheduler = asap;
+            }
+            return _this;
+        }
+        SubscribeOnObservable.create = function (source, delay, scheduler) {
+            if (delay === void 0) { delay = 0; }
+            if (scheduler === void 0) { scheduler = asap; }
+            return new SubscribeOnObservable(source, delay, scheduler);
+        };
+        SubscribeOnObservable.dispatch = function (arg) {
+            var source = arg.source, subscriber = arg.subscriber;
+            return this.add(source.subscribe(subscriber));
+        };
+        SubscribeOnObservable.prototype._subscribe = function (subscriber) {
+            var delay = this.delayTime;
+            var source = this.source;
+            var scheduler = this.scheduler;
+            return scheduler.schedule(SubscribeOnObservable.dispatch, delay, {
+                source: source, subscriber: subscriber
+            });
+        };
+        return SubscribeOnObservable;
+    }(Observable));
+
+    function subscribeOn(scheduler, delay) {
+        if (delay === void 0) { delay = 0; }
+        return function subscribeOnOperatorFunction(source) {
+            return source.lift(new SubscribeOnOperator(scheduler, delay));
+        };
+    }
+    var SubscribeOnOperator = (function () {
+        function SubscribeOnOperator(scheduler, delay) {
+            this.scheduler = scheduler;
+            this.delay = delay;
+        }
+        SubscribeOnOperator.prototype.call = function (subscriber, source) {
+            return new SubscribeOnObservable(source, this.delay, this.scheduler).subscribe(subscriber);
+        };
+        return SubscribeOnOperator;
+    }());
+
+    function switchMap(project, resultSelector) {
+        if (typeof resultSelector === 'function') {
+            return function (source) { return source.pipe(switchMap(function (a, i) { return from(project(a, i)).pipe(map(function (b, ii) { return resultSelector(a, b, i, ii); })); })); };
+        }
+        return function (source) { return source.lift(new SwitchMapOperator(project)); };
+    }
+    var SwitchMapOperator = (function () {
+        function SwitchMapOperator(project) {
+            this.project = project;
+        }
+        SwitchMapOperator.prototype.call = function (subscriber, source) {
+            return source.subscribe(new SwitchMapSubscriber(subscriber, this.project));
+        };
+        return SwitchMapOperator;
+    }());
+    var SwitchMapSubscriber = (function (_super) {
+        __extends(SwitchMapSubscriber, _super);
+        function SwitchMapSubscriber(destination, project) {
+            var _this = _super.call(this, destination) || this;
+            _this.project = project;
+            _this.index = 0;
+            return _this;
+        }
+        SwitchMapSubscriber.prototype._next = function (value) {
+            var result;
+            var index = this.index++;
+            try {
+                result = this.project(value, index);
+            }
+            catch (error) {
+                this.destination.error(error);
+                return;
+            }
+            this._innerSub(result, value, index);
+        };
+        SwitchMapSubscriber.prototype._innerSub = function (result, value, index) {
+            var innerSubscription = this.innerSubscription;
+            if (innerSubscription) {
+                innerSubscription.unsubscribe();
+            }
+            var innerSubscriber = new InnerSubscriber(this, value, index);
+            var destination = this.destination;
+            destination.add(innerSubscriber);
+            this.innerSubscription = subscribeToResult(this, result, undefined, undefined, innerSubscriber);
+            if (this.innerSubscription !== innerSubscriber) {
+                destination.add(this.innerSubscription);
+            }
+        };
+        SwitchMapSubscriber.prototype._complete = function () {
+            var innerSubscription = this.innerSubscription;
+            if (!innerSubscription || innerSubscription.closed) {
+                _super.prototype._complete.call(this);
+            }
+            this.unsubscribe();
+        };
+        SwitchMapSubscriber.prototype._unsubscribe = function () {
+            this.innerSubscription = null;
+        };
+        SwitchMapSubscriber.prototype.notifyComplete = function (innerSub) {
+            var destination = this.destination;
+            destination.remove(innerSub);
+            this.innerSubscription = null;
+            if (this.isStopped) {
+                _super.prototype._complete.call(this);
+            }
+        };
+        SwitchMapSubscriber.prototype.notifyNext = function (outerValue, innerValue, outerIndex, innerIndex, innerSub) {
+            this.destination.next(innerValue);
+        };
+        return SwitchMapSubscriber;
+    }(OuterSubscriber));
+
+    function switchAll() {
+        return switchMap(identity);
+    }
+
+    function switchMapTo(innerObservable, resultSelector) {
+        return resultSelector ? switchMap(function () { return innerObservable; }, resultSelector) : switchMap(function () { return innerObservable; });
+    }
+
+    function takeUntil(notifier) {
+        return function (source) { return source.lift(new TakeUntilOperator(notifier)); };
+    }
+    var TakeUntilOperator = (function () {
+        function TakeUntilOperator(notifier) {
+            this.notifier = notifier;
+        }
+        TakeUntilOperator.prototype.call = function (subscriber, source) {
+            var takeUntilSubscriber = new TakeUntilSubscriber(subscriber);
+            var notifierSubscription = subscribeToResult(takeUntilSubscriber, this.notifier);
+            if (notifierSubscription && !takeUntilSubscriber.seenValue) {
+                takeUntilSubscriber.add(notifierSubscription);
+                return source.subscribe(takeUntilSubscriber);
+            }
+            return takeUntilSubscriber;
+        };
+        return TakeUntilOperator;
+    }());
+    var TakeUntilSubscriber = (function (_super) {
+        __extends(TakeUntilSubscriber, _super);
+        function TakeUntilSubscriber(destination) {
+            var _this = _super.call(this, destination) || this;
+            _this.seenValue = false;
+            return _this;
+        }
+        TakeUntilSubscriber.prototype.notifyNext = function (outerValue, innerValue, outerIndex, innerIndex, innerSub) {
+            this.seenValue = true;
+            this.complete();
+        };
+        TakeUntilSubscriber.prototype.notifyComplete = function () {
+        };
+        return TakeUntilSubscriber;
+    }(OuterSubscriber));
+
+    function takeWhile(predicate, inclusive) {
+        if (inclusive === void 0) { inclusive = false; }
+        return function (source) {
+            return source.lift(new TakeWhileOperator(predicate, inclusive));
+        };
+    }
+    var TakeWhileOperator = (function () {
+        function TakeWhileOperator(predicate, inclusive) {
+            this.predicate = predicate;
+            this.inclusive = inclusive;
+        }
+        TakeWhileOperator.prototype.call = function (subscriber, source) {
+            return source.subscribe(new TakeWhileSubscriber(subscriber, this.predicate, this.inclusive));
+        };
+        return TakeWhileOperator;
+    }());
+    var TakeWhileSubscriber = (function (_super) {
+        __extends(TakeWhileSubscriber, _super);
+        function TakeWhileSubscriber(destination, predicate, inclusive) {
+            var _this = _super.call(this, destination) || this;
+            _this.predicate = predicate;
+            _this.inclusive = inclusive;
+            _this.index = 0;
+            return _this;
+        }
+        TakeWhileSubscriber.prototype._next = function (value) {
+            var destination = this.destination;
+            var result;
+            try {
+                result = this.predicate(value, this.index++);
+            }
+            catch (err) {
+                destination.error(err);
+                return;
+            }
+            this.nextOrComplete(value, result);
+        };
+        TakeWhileSubscriber.prototype.nextOrComplete = function (value, predicateResult) {
+            var destination = this.destination;
+            if (Boolean(predicateResult)) {
+                destination.next(value);
+            }
+            else {
+                if (this.inclusive) {
+                    destination.next(value);
+                }
+                destination.complete();
+            }
+        };
+        return TakeWhileSubscriber;
+    }(Subscriber));
+
+    function tap(nextOrObserver, error, complete) {
+        return function tapOperatorFunction(source) {
+            return source.lift(new DoOperator(nextOrObserver, error, complete));
+        };
+    }
+    var DoOperator = (function () {
+        function DoOperator(nextOrObserver, error, complete) {
+            this.nextOrObserver = nextOrObserver;
+            this.error = error;
+            this.complete = complete;
+        }
+        DoOperator.prototype.call = function (subscriber, source) {
+            return source.subscribe(new TapSubscriber(subscriber, this.nextOrObserver, this.error, this.complete));
+        };
+        return DoOperator;
+    }());
+    var TapSubscriber = (function (_super) {
+        __extends(TapSubscriber, _super);
+        function TapSubscriber(destination, observerOrNext, error, complete) {
+            var _this = _super.call(this, destination) || this;
+            _this._tapNext = noop;
+            _this._tapError = noop;
+            _this._tapComplete = noop;
+            _this._tapError = error || noop;
+            _this._tapComplete = complete || noop;
+            if (isFunction(observerOrNext)) {
+                _this._context = _this;
+                _this._tapNext = observerOrNext;
+            }
+            else if (observerOrNext) {
+                _this._context = observerOrNext;
+                _this._tapNext = observerOrNext.next || noop;
+                _this._tapError = observerOrNext.error || noop;
+                _this._tapComplete = observerOrNext.complete || noop;
+            }
+            return _this;
+        }
+        TapSubscriber.prototype._next = function (value) {
+            try {
+                this._tapNext.call(this._context, value);
+            }
+            catch (err) {
+                this.destination.error(err);
+                return;
+            }
+            this.destination.next(value);
+        };
+        TapSubscriber.prototype._error = function (err) {
+            try {
+                this._tapError.call(this._context, err);
+            }
+            catch (err) {
+                this.destination.error(err);
+                return;
+            }
+            this.destination.error(err);
+        };
+        TapSubscriber.prototype._complete = function () {
+            try {
+                this._tapComplete.call(this._context);
+            }
+            catch (err) {
+                this.destination.error(err);
+                return;
+            }
+            return this.destination.complete();
+        };
+        return TapSubscriber;
+    }(Subscriber));
+
+    var defaultThrottleConfig = {
+        leading: true,
+        trailing: false
+    };
+    function throttle(durationSelector, config) {
+        if (config === void 0) { config = defaultThrottleConfig; }
+        return function (source) { return source.lift(new ThrottleOperator(durationSelector, config.leading, config.trailing)); };
+    }
+    var ThrottleOperator = (function () {
+        function ThrottleOperator(durationSelector, leading, trailing) {
+            this.durationSelector = durationSelector;
+            this.leading = leading;
+            this.trailing = trailing;
+        }
+        ThrottleOperator.prototype.call = function (subscriber, source) {
+            return source.subscribe(new ThrottleSubscriber(subscriber, this.durationSelector, this.leading, this.trailing));
+        };
+        return ThrottleOperator;
+    }());
+    var ThrottleSubscriber = (function (_super) {
+        __extends(ThrottleSubscriber, _super);
+        function ThrottleSubscriber(destination, durationSelector, _leading, _trailing) {
+            var _this = _super.call(this, destination) || this;
+            _this.destination = destination;
+            _this.durationSelector = durationSelector;
+            _this._leading = _leading;
+            _this._trailing = _trailing;
+            _this._hasValue = false;
+            return _this;
+        }
+        ThrottleSubscriber.prototype._next = function (value) {
+            this._hasValue = true;
+            this._sendValue = value;
+            if (!this._throttled) {
+                if (this._leading) {
+                    this.send();
+                }
+                else {
+                    this.throttle(value);
+                }
+            }
+        };
+        ThrottleSubscriber.prototype.send = function () {
+            var _a = this, _hasValue = _a._hasValue, _sendValue = _a._sendValue;
+            if (_hasValue) {
+                this.destination.next(_sendValue);
+                this.throttle(_sendValue);
+            }
+            this._hasValue = false;
+            this._sendValue = null;
+        };
+        ThrottleSubscriber.prototype.throttle = function (value) {
+            var duration = this.tryDurationSelector(value);
+            if (!!duration) {
+                this.add(this._throttled = subscribeToResult(this, duration));
+            }
+        };
+        ThrottleSubscriber.prototype.tryDurationSelector = function (value) {
+            try {
+                return this.durationSelector(value);
+            }
+            catch (err) {
+                this.destination.error(err);
+                return null;
+            }
+        };
+        ThrottleSubscriber.prototype.throttlingDone = function () {
+            var _a = this, _throttled = _a._throttled, _trailing = _a._trailing;
+            if (_throttled) {
+                _throttled.unsubscribe();
+            }
+            this._throttled = null;
+            if (_trailing) {
+                this.send();
+            }
+        };
+        ThrottleSubscriber.prototype.notifyNext = function (outerValue, innerValue, outerIndex, innerIndex, innerSub) {
+            this.throttlingDone();
+        };
+        ThrottleSubscriber.prototype.notifyComplete = function () {
+            this.throttlingDone();
+        };
+        return ThrottleSubscriber;
+    }(OuterSubscriber));
+
+    function throttleTime(duration, scheduler, config) {
+        if (scheduler === void 0) { scheduler = async; }
+        if (config === void 0) { config = defaultThrottleConfig; }
+        return function (source) { return source.lift(new ThrottleTimeOperator(duration, scheduler, config.leading, config.trailing)); };
+    }
+    var ThrottleTimeOperator = (function () {
+        function ThrottleTimeOperator(duration, scheduler, leading, trailing) {
+            this.duration = duration;
+            this.scheduler = scheduler;
+            this.leading = leading;
+            this.trailing = trailing;
+        }
+        ThrottleTimeOperator.prototype.call = function (subscriber, source) {
+            return source.subscribe(new ThrottleTimeSubscriber(subscriber, this.duration, this.scheduler, this.leading, this.trailing));
+        };
+        return ThrottleTimeOperator;
+    }());
+    var ThrottleTimeSubscriber = (function (_super) {
+        __extends(ThrottleTimeSubscriber, _super);
+        function ThrottleTimeSubscriber(destination, duration, scheduler, leading, trailing) {
+            var _this = _super.call(this, destination) || this;
+            _this.duration = duration;
+            _this.scheduler = scheduler;
+            _this.leading = leading;
+            _this.trailing = trailing;
+            _this._hasTrailingValue = false;
+            _this._trailingValue = null;
+            return _this;
+        }
+        ThrottleTimeSubscriber.prototype._next = function (value) {
+            if (this.throttled) {
+                if (this.trailing) {
+                    this._trailingValue = value;
+                    this._hasTrailingValue = true;
+                }
+            }
+            else {
+                this.add(this.throttled = this.scheduler.schedule(dispatchNext$3, this.duration, { subscriber: this }));
+                if (this.leading) {
+                    this.destination.next(value);
+                }
+                else if (this.trailing) {
+                    this._trailingValue = value;
+                    this._hasTrailingValue = true;
+                }
+            }
+        };
+        ThrottleTimeSubscriber.prototype._complete = function () {
+            if (this._hasTrailingValue) {
+                this.destination.next(this._trailingValue);
+                this.destination.complete();
+            }
+            else {
+                this.destination.complete();
+            }
+        };
+        ThrottleTimeSubscriber.prototype.clearThrottle = function () {
+            var throttled = this.throttled;
+            if (throttled) {
+                if (this.trailing && this._hasTrailingValue) {
+                    this.destination.next(this._trailingValue);
+                    this._trailingValue = null;
+                    this._hasTrailingValue = false;
+                }
+                throttled.unsubscribe();
+                this.remove(throttled);
+                this.throttled = null;
+            }
+        };
+        return ThrottleTimeSubscriber;
+    }(Subscriber));
+    function dispatchNext$3(arg) {
+        var subscriber = arg.subscriber;
+        subscriber.clearThrottle();
+    }
+
+    function timeInterval(scheduler) {
+        if (scheduler === void 0) { scheduler = async; }
+        return function (source) { return defer(function () {
+            return source.pipe(scan(function (_a, value) {
+                var current = _a.current;
+                return ({ value: value, current: scheduler.now(), last: current });
+            }, { current: scheduler.now(), value: undefined, last: undefined }), map(function (_a) {
+                var current = _a.current, last = _a.last, value = _a.value;
+                return new TimeInterval(value, current - last);
+            }));
+        }); };
+    }
+    var TimeInterval = (function () {
+        function TimeInterval(value, interval) {
+            this.value = value;
+            this.interval = interval;
+        }
+        return TimeInterval;
+    }());
+
+    function timeoutWith(due, withObservable, scheduler) {
+        if (scheduler === void 0) { scheduler = async; }
+        return function (source) {
+            var absoluteTimeout = isDate(due);
+            var waitFor = absoluteTimeout ? (+due - scheduler.now()) : Math.abs(due);
+            return source.lift(new TimeoutWithOperator(waitFor, absoluteTimeout, withObservable, scheduler));
+        };
+    }
+    var TimeoutWithOperator = (function () {
+        function TimeoutWithOperator(waitFor, absoluteTimeout, withObservable, scheduler) {
+            this.waitFor = waitFor;
+            this.absoluteTimeout = absoluteTimeout;
+            this.withObservable = withObservable;
+            this.scheduler = scheduler;
+        }
+        TimeoutWithOperator.prototype.call = function (subscriber, source) {
+            return source.subscribe(new TimeoutWithSubscriber(subscriber, this.absoluteTimeout, this.waitFor, this.withObservable, this.scheduler));
+        };
+        return TimeoutWithOperator;
+    }());
+    var TimeoutWithSubscriber = (function (_super) {
+        __extends(TimeoutWithSubscriber, _super);
+        function TimeoutWithSubscriber(destination, absoluteTimeout, waitFor, withObservable, scheduler) {
+            var _this = _super.call(this, destination) || this;
+            _this.absoluteTimeout = absoluteTimeout;
+            _this.waitFor = waitFor;
+            _this.withObservable = withObservable;
+            _this.scheduler = scheduler;
+            _this.action = null;
+            _this.scheduleTimeout();
+            return _this;
+        }
+        TimeoutWithSubscriber.dispatchTimeout = function (subscriber) {
+            var withObservable = subscriber.withObservable;
+            subscriber._unsubscribeAndRecycle();
+            subscriber.add(subscribeToResult(subscriber, withObservable));
+        };
+        TimeoutWithSubscriber.prototype.scheduleTimeout = function () {
+            var action = this.action;
+            if (action) {
+                this.action = action.schedule(this, this.waitFor);
+            }
+            else {
+                this.add(this.action = this.scheduler.schedule(TimeoutWithSubscriber.dispatchTimeout, this.waitFor, this));
+            }
+        };
+        TimeoutWithSubscriber.prototype._next = function (value) {
+            if (!this.absoluteTimeout) {
+                this.scheduleTimeout();
+            }
+            _super.prototype._next.call(this, value);
+        };
+        TimeoutWithSubscriber.prototype._unsubscribe = function () {
+            this.action = null;
+            this.scheduler = null;
+            this.withObservable = null;
+        };
+        return TimeoutWithSubscriber;
+    }(OuterSubscriber));
+
+    function timeout(due, scheduler) {
+        if (scheduler === void 0) { scheduler = async; }
+        return timeoutWith(due, throwError(new TimeoutError()), scheduler);
+    }
+
+    function timestamp(scheduler) {
+        if (scheduler === void 0) { scheduler = async; }
+        return map(function (value) { return new Timestamp(value, scheduler.now()); });
+    }
+    var Timestamp = (function () {
+        function Timestamp(value, timestamp) {
+            this.value = value;
+            this.timestamp = timestamp;
+        }
+        return Timestamp;
+    }());
+
+    function toArrayReducer(arr, item, index) {
+        if (index === 0) {
+            return [item];
+        }
+        arr.push(item);
+        return arr;
+    }
+    function toArray() {
+        return reduce(toArrayReducer, []);
+    }
+
+    function window$1(windowBoundaries) {
+        return function windowOperatorFunction(source) {
+            return source.lift(new WindowOperator(windowBoundaries));
+        };
+    }
+    var WindowOperator = (function () {
+        function WindowOperator(windowBoundaries) {
+            this.windowBoundaries = windowBoundaries;
+        }
+        WindowOperator.prototype.call = function (subscriber, source) {
+            var windowSubscriber = new WindowSubscriber(subscriber);
+            var sourceSubscription = source.subscribe(windowSubscriber);
+            if (!sourceSubscription.closed) {
+                windowSubscriber.add(subscribeToResult(windowSubscriber, this.windowBoundaries));
+            }
+            return sourceSubscription;
+        };
+        return WindowOperator;
+    }());
+    var WindowSubscriber = (function (_super) {
+        __extends(WindowSubscriber, _super);
+        function WindowSubscriber(destination) {
+            var _this = _super.call(this, destination) || this;
+            _this.window = new Subject();
+            destination.next(_this.window);
+            return _this;
+        }
+        WindowSubscriber.prototype.notifyNext = function (outerValue, innerValue, outerIndex, innerIndex, innerSub) {
+            this.openWindow();
+        };
+        WindowSubscriber.prototype.notifyError = function (error, innerSub) {
+            this._error(error);
+        };
+        WindowSubscriber.prototype.notifyComplete = function (innerSub) {
+            this._complete();
+        };
+        WindowSubscriber.prototype._next = function (value) {
+            this.window.next(value);
+        };
+        WindowSubscriber.prototype._error = function (err) {
+            this.window.error(err);
+            this.destination.error(err);
+        };
+        WindowSubscriber.prototype._complete = function () {
+            this.window.complete();
+            this.destination.complete();
+        };
+        WindowSubscriber.prototype._unsubscribe = function () {
+            this.window = null;
+        };
+        WindowSubscriber.prototype.openWindow = function () {
+            var prevWindow = this.window;
+            if (prevWindow) {
+                prevWindow.complete();
+            }
+            var destination = this.destination;
+            var newWindow = this.window = new Subject();
+            destination.next(newWindow);
+        };
+        return WindowSubscriber;
+    }(OuterSubscriber));
+
+    function windowCount(windowSize, startWindowEvery) {
+        if (startWindowEvery === void 0) { startWindowEvery = 0; }
+        return function windowCountOperatorFunction(source) {
+            return source.lift(new WindowCountOperator(windowSize, startWindowEvery));
+        };
+    }
+    var WindowCountOperator = (function () {
+        function WindowCountOperator(windowSize, startWindowEvery) {
+            this.windowSize = windowSize;
+            this.startWindowEvery = startWindowEvery;
+        }
+        WindowCountOperator.prototype.call = function (subscriber, source) {
+            return source.subscribe(new WindowCountSubscriber(subscriber, this.windowSize, this.startWindowEvery));
+        };
+        return WindowCountOperator;
+    }());
+    var WindowCountSubscriber = (function (_super) {
+        __extends(WindowCountSubscriber, _super);
+        function WindowCountSubscriber(destination, windowSize, startWindowEvery) {
+            var _this = _super.call(this, destination) || this;
+            _this.destination = destination;
+            _this.windowSize = windowSize;
+            _this.startWindowEvery = startWindowEvery;
+            _this.windows = [new Subject()];
+            _this.count = 0;
+            destination.next(_this.windows[0]);
+            return _this;
+        }
+        WindowCountSubscriber.prototype._next = function (value) {
+            var startWindowEvery = (this.startWindowEvery > 0) ? this.startWindowEvery : this.windowSize;
+            var destination = this.destination;
+            var windowSize = this.windowSize;
+            var windows = this.windows;
+            var len = windows.length;
+            for (var i = 0; i < len && !this.closed; i++) {
+                windows[i].next(value);
+            }
+            var c = this.count - windowSize + 1;
+            if (c >= 0 && c % startWindowEvery === 0 && !this.closed) {
+                windows.shift().complete();
+            }
+            if (++this.count % startWindowEvery === 0 && !this.closed) {
+                var window_1 = new Subject();
+                windows.push(window_1);
+                destination.next(window_1);
+            }
+        };
+        WindowCountSubscriber.prototype._error = function (err) {
+            var windows = this.windows;
+            if (windows) {
+                while (windows.length > 0 && !this.closed) {
+                    windows.shift().error(err);
+                }
+            }
+            this.destination.error(err);
+        };
+        WindowCountSubscriber.prototype._complete = function () {
+            var windows = this.windows;
+            if (windows) {
+                while (windows.length > 0 && !this.closed) {
+                    windows.shift().complete();
+                }
+            }
+            this.destination.complete();
+        };
+        WindowCountSubscriber.prototype._unsubscribe = function () {
+            this.count = 0;
+            this.windows = null;
+        };
+        return WindowCountSubscriber;
+    }(Subscriber));
+
+    function windowTime(windowTimeSpan) {
+        var scheduler = async;
+        var windowCreationInterval = null;
+        var maxWindowSize = Number.POSITIVE_INFINITY;
+        if (isScheduler(arguments[3])) {
+            scheduler = arguments[3];
+        }
+        if (isScheduler(arguments[2])) {
+            scheduler = arguments[2];
+        }
+        else if (isNumeric(arguments[2])) {
+            maxWindowSize = Number(arguments[2]);
+        }
+        if (isScheduler(arguments[1])) {
+            scheduler = arguments[1];
+        }
+        else if (isNumeric(arguments[1])) {
+            windowCreationInterval = Number(arguments[1]);
+        }
+        return function windowTimeOperatorFunction(source) {
+            return source.lift(new WindowTimeOperator(windowTimeSpan, windowCreationInterval, maxWindowSize, scheduler));
+        };
+    }
+    var WindowTimeOperator = (function () {
+        function WindowTimeOperator(windowTimeSpan, windowCreationInterval, maxWindowSize, scheduler) {
+            this.windowTimeSpan = windowTimeSpan;
+            this.windowCreationInterval = windowCreationInterval;
+            this.maxWindowSize = maxWindowSize;
+            this.scheduler = scheduler;
+        }
+        WindowTimeOperator.prototype.call = function (subscriber, source) {
+            return source.subscribe(new WindowTimeSubscriber(subscriber, this.windowTimeSpan, this.windowCreationInterval, this.maxWindowSize, this.scheduler));
+        };
+        return WindowTimeOperator;
+    }());
+    var CountedSubject = (function (_super) {
+        __extends(CountedSubject, _super);
+        function CountedSubject() {
+            var _this = _super !== null && _super.apply(this, arguments) || this;
+            _this._numberOfNextedValues = 0;
+            return _this;
+        }
+        CountedSubject.prototype.next = function (value) {
+            this._numberOfNextedValues++;
+            _super.prototype.next.call(this, value);
+        };
+        Object.defineProperty(CountedSubject.prototype, "numberOfNextedValues", {
+            get: function () {
+                return this._numberOfNextedValues;
+            },
+            enumerable: true,
+            configurable: true
+        });
+        return CountedSubject;
+    }(Subject));
+    var WindowTimeSubscriber = (function (_super) {
+        __extends(WindowTimeSubscriber, _super);
+        function WindowTimeSubscriber(destination, windowTimeSpan, windowCreationInterval, maxWindowSize, scheduler) {
+            var _this = _super.call(this, destination) || this;
+            _this.destination = destination;
+            _this.windowTimeSpan = windowTimeSpan;
+            _this.windowCreationInterval = windowCreationInterval;
+            _this.maxWindowSize = maxWindowSize;
+            _this.scheduler = scheduler;
+            _this.windows = [];
+            var window = _this.openWindow();
+            if (windowCreationInterval !== null && windowCreationInterval >= 0) {
+                var closeState = { subscriber: _this, window: window, context: null };
+                var creationState = { windowTimeSpan: windowTimeSpan, windowCreationInterval: windowCreationInterval, subscriber: _this, scheduler: scheduler };
+                _this.add(scheduler.schedule(dispatchWindowClose, windowTimeSpan, closeState));
+                _this.add(scheduler.schedule(dispatchWindowCreation, windowCreationInterval, creationState));
+            }
+            else {
+                var timeSpanOnlyState = { subscriber: _this, window: window, windowTimeSpan: windowTimeSpan };
+                _this.add(scheduler.schedule(dispatchWindowTimeSpanOnly, windowTimeSpan, timeSpanOnlyState));
+            }
+            return _this;
+        }
+        WindowTimeSubscriber.prototype._next = function (value) {
+            var windows = this.windows;
+            var len = windows.length;
+            for (var i = 0; i < len; i++) {
+                var window_1 = windows[i];
+                if (!window_1.closed) {
+                    window_1.next(value);
+                    if (window_1.numberOfNextedValues >= this.maxWindowSize) {
+                        this.closeWindow(window_1);
+                    }
+                }
+            }
+        };
+        WindowTimeSubscriber.prototype._error = function (err) {
+            var windows = this.windows;
+            while (windows.length > 0) {
+                windows.shift().error(err);
+            }
+            this.destination.error(err);
+        };
+        WindowTimeSubscriber.prototype._complete = function () {
+            var windows = this.windows;
+            while (windows.length > 0) {
+                var window_2 = windows.shift();
+                if (!window_2.closed) {
+                    window_2.complete();
+                }
+            }
+            this.destination.complete();
+        };
+        WindowTimeSubscriber.prototype.openWindow = function () {
+            var window = new CountedSubject();
+            this.windows.push(window);
+            var destination = this.destination;
+            destination.next(window);
+            return window;
+        };
+        WindowTimeSubscriber.prototype.closeWindow = function (window) {
+            window.complete();
+            var windows = this.windows;
+            windows.splice(windows.indexOf(window), 1);
+        };
+        return WindowTimeSubscriber;
+    }(Subscriber));
+    function dispatchWindowTimeSpanOnly(state) {
+        var subscriber = state.subscriber, windowTimeSpan = state.windowTimeSpan, window = state.window;
+        if (window) {
+            subscriber.closeWindow(window);
+        }
+        state.window = subscriber.openWindow();
+        this.schedule(state, windowTimeSpan);
+    }
+    function dispatchWindowCreation(state) {
+        var windowTimeSpan = state.windowTimeSpan, subscriber = state.subscriber, scheduler = state.scheduler, windowCreationInterval = state.windowCreationInterval;
+        var window = subscriber.openWindow();
+        var action = this;
+        var context = { action: action, subscription: null };
+        var timeSpanState = { subscriber: subscriber, window: window, context: context };
+        context.subscription = scheduler.schedule(dispatchWindowClose, windowTimeSpan, timeSpanState);
+        action.add(context.subscription);
+        action.schedule(state, windowCreationInterval);
+    }
+    function dispatchWindowClose(state) {
+        var subscriber = state.subscriber, window = state.window, context = state.context;
+        if (context && context.action && context.subscription) {
+            context.action.remove(context.subscription);
+        }
+        subscriber.closeWindow(window);
+    }
+
+    function windowToggle(openings, closingSelector) {
+        return function (source) { return source.lift(new WindowToggleOperator(openings, closingSelector)); };
+    }
+    var WindowToggleOperator = (function () {
+        function WindowToggleOperator(openings, closingSelector) {
+            this.openings = openings;
+            this.closingSelector = closingSelector;
+        }
+        WindowToggleOperator.prototype.call = function (subscriber, source) {
+            return source.subscribe(new WindowToggleSubscriber(subscriber, this.openings, this.closingSelector));
+        };
+        return WindowToggleOperator;
+    }());
+    var WindowToggleSubscriber = (function (_super) {
+        __extends(WindowToggleSubscriber, _super);
+        function WindowToggleSubscriber(destination, openings, closingSelector) {
+            var _this = _super.call(this, destination) || this;
+            _this.openings = openings;
+            _this.closingSelector = closingSelector;
+            _this.contexts = [];
+            _this.add(_this.openSubscription = subscribeToResult(_this, openings, openings));
+            return _this;
+        }
+        WindowToggleSubscriber.prototype._next = function (value) {
+            var contexts = this.contexts;
+            if (contexts) {
+                var len = contexts.length;
+                for (var i = 0; i < len; i++) {
+                    contexts[i].window.next(value);
+                }
+            }
+        };
+        WindowToggleSubscriber.prototype._error = function (err) {
+            var contexts = this.contexts;
+            this.contexts = null;
+            if (contexts) {
+                var len = contexts.length;
+                var index = -1;
+                while (++index < len) {
+                    var context_1 = contexts[index];
+                    context_1.window.error(err);
+                    context_1.subscription.unsubscribe();
+                }
+            }
+            _super.prototype._error.call(this, err);
+        };
+        WindowToggleSubscriber.prototype._complete = function () {
+            var contexts = this.contexts;
+            this.contexts = null;
+            if (contexts) {
+                var len = contexts.length;
+                var index = -1;
+                while (++index < len) {
+                    var context_2 = contexts[index];
+                    context_2.window.complete();
+                    context_2.subscription.unsubscribe();
+                }
+            }
+            _super.prototype._complete.call(this);
+        };
+        WindowToggleSubscriber.prototype._unsubscribe = function () {
+            var contexts = this.contexts;
+            this.contexts = null;
+            if (contexts) {
+                var len = contexts.length;
+                var index = -1;
+                while (++index < len) {
+                    var context_3 = contexts[index];
+                    context_3.window.unsubscribe();
+                    context_3.subscription.unsubscribe();
+                }
+            }
+        };
+        WindowToggleSubscriber.prototype.notifyNext = function (outerValue, innerValue, outerIndex, innerIndex, innerSub) {
+            if (outerValue === this.openings) {
+                var closingNotifier = void 0;
+                try {
+                    var closingSelector = this.closingSelector;
+                    closingNotifier = closingSelector(innerValue);
+                }
+                catch (e) {
+                    return this.error(e);
+                }
+                var window_1 = new Subject();
+                var subscription = new Subscription();
+                var context_4 = { window: window_1, subscription: subscription };
+                this.contexts.push(context_4);
+                var innerSubscription = subscribeToResult(this, closingNotifier, context_4);
+                if (innerSubscription.closed) {
+                    this.closeWindow(this.contexts.length - 1);
+                }
+                else {
+                    innerSubscription.context = context_4;
+                    subscription.add(innerSubscription);
+                }
+                this.destination.next(window_1);
+            }
+            else {
+                this.closeWindow(this.contexts.indexOf(outerValue));
+            }
+        };
+        WindowToggleSubscriber.prototype.notifyError = function (err) {
+            this.error(err);
+        };
+        WindowToggleSubscriber.prototype.notifyComplete = function (inner) {
+            if (inner !== this.openSubscription) {
+                this.closeWindow(this.contexts.indexOf(inner.context));
+            }
+        };
+        WindowToggleSubscriber.prototype.closeWindow = function (index) {
+            if (index === -1) {
+                return;
+            }
+            var contexts = this.contexts;
+            var context = contexts[index];
+            var window = context.window, subscription = context.subscription;
+            contexts.splice(index, 1);
+            window.complete();
+            subscription.unsubscribe();
+        };
+        return WindowToggleSubscriber;
+    }(OuterSubscriber));
+
+    function windowWhen(closingSelector) {
+        return function windowWhenOperatorFunction(source) {
+            return source.lift(new WindowOperator$1(closingSelector));
+        };
+    }
+    var WindowOperator$1 = (function () {
+        function WindowOperator(closingSelector) {
+            this.closingSelector = closingSelector;
+        }
+        WindowOperator.prototype.call = function (subscriber, source) {
+            return source.subscribe(new WindowSubscriber$1(subscriber, this.closingSelector));
+        };
+        return WindowOperator;
+    }());
+    var WindowSubscriber$1 = (function (_super) {
+        __extends(WindowSubscriber, _super);
+        function WindowSubscriber(destination, closingSelector) {
+            var _this = _super.call(this, destination) || this;
+            _this.destination = destination;
+            _this.closingSelector = closingSelector;
+            _this.openWindow();
+            return _this;
+        }
+        WindowSubscriber.prototype.notifyNext = function (outerValue, innerValue, outerIndex, innerIndex, innerSub) {
+            this.openWindow(innerSub);
+        };
+        WindowSubscriber.prototype.notifyError = function (error, innerSub) {
+            this._error(error);
+        };
+        WindowSubscriber.prototype.notifyComplete = function (innerSub) {
+            this.openWindow(innerSub);
+        };
+        WindowSubscriber.prototype._next = function (value) {
+            this.window.next(value);
+        };
+        WindowSubscriber.prototype._error = function (err) {
+            this.window.error(err);
+            this.destination.error(err);
+            this.unsubscribeClosingNotification();
+        };
+        WindowSubscriber.prototype._complete = function () {
+            this.window.complete();
+            this.destination.complete();
+            this.unsubscribeClosingNotification();
+        };
+        WindowSubscriber.prototype.unsubscribeClosingNotification = function () {
+            if (this.closingNotification) {
+                this.closingNotification.unsubscribe();
+            }
+        };
+        WindowSubscriber.prototype.openWindow = function (innerSub) {
+            if (innerSub === void 0) { innerSub = null; }
+            if (innerSub) {
+                this.remove(innerSub);
+                innerSub.unsubscribe();
+            }
+            var prevWindow = this.window;
+            if (prevWindow) {
+                prevWindow.complete();
+            }
+            var window = this.window = new Subject();
+            this.destination.next(window);
+            var closingNotifier;
+            try {
+                var closingSelector = this.closingSelector;
+                closingNotifier = closingSelector();
+            }
+            catch (e) {
+                this.destination.error(e);
+                this.window.error(e);
+                return;
+            }
+            this.add(this.closingNotification = subscribeToResult(this, closingNotifier));
+        };
+        return WindowSubscriber;
+    }(OuterSubscriber));
+
+    function withLatestFrom() {
+        var args = [];
+        for (var _i = 0; _i < arguments.length; _i++) {
+            args[_i] = arguments[_i];
+        }
+        return function (source) {
+            var project;
+            if (typeof args[args.length - 1] === 'function') {
+                project = args.pop();
+            }
+            var observables = args;
+            return source.lift(new WithLatestFromOperator(observables, project));
+        };
+    }
+    var WithLatestFromOperator = (function () {
+        function WithLatestFromOperator(observables, project) {
+            this.observables = observables;
+            this.project = project;
+        }
+        WithLatestFromOperator.prototype.call = function (subscriber, source) {
+            return source.subscribe(new WithLatestFromSubscriber(subscriber, this.observables, this.project));
+        };
+        return WithLatestFromOperator;
+    }());
+    var WithLatestFromSubscriber = (function (_super) {
+        __extends(WithLatestFromSubscriber, _super);
+        function WithLatestFromSubscriber(destination, observables, project) {
+            var _this = _super.call(this, destination) || this;
+            _this.observables = observables;
+            _this.project = project;
+            _this.toRespond = [];
+            var len = observables.length;
+            _this.values = new Array(len);
+            for (var i = 0; i < len; i++) {
+                _this.toRespond.push(i);
+            }
+            for (var i = 0; i < len; i++) {
+                var observable = observables[i];
+                _this.add(subscribeToResult(_this, observable, observable, i));
+            }
+            return _this;
+        }
+        WithLatestFromSubscriber.prototype.notifyNext = function (outerValue, innerValue, outerIndex, innerIndex, innerSub) {
+            this.values[outerIndex] = innerValue;
+            var toRespond = this.toRespond;
+            if (toRespond.length > 0) {
+                var found = toRespond.indexOf(outerIndex);
+                if (found !== -1) {
+                    toRespond.splice(found, 1);
+                }
+            }
+        };
+        WithLatestFromSubscriber.prototype.notifyComplete = function () {
+        };
+        WithLatestFromSubscriber.prototype._next = function (value) {
+            if (this.toRespond.length === 0) {
+                var args = [value].concat(this.values);
+                if (this.project) {
+                    this._tryProject(args);
+                }
+                else {
+                    this.destination.next(args);
+                }
+            }
+        };
+        WithLatestFromSubscriber.prototype._tryProject = function (args) {
+            var result;
+            try {
+                result = this.project.apply(this, args);
+            }
+            catch (err) {
+                this.destination.error(err);
+                return;
+            }
+            this.destination.next(result);
+        };
+        return WithLatestFromSubscriber;
+    }(OuterSubscriber));
+
+    function zip$1() {
+        var observables = [];
+        for (var _i = 0; _i < arguments.length; _i++) {
+            observables[_i] = arguments[_i];
+        }
+        return function zipOperatorFunction(source) {
+            return source.lift.call(zip.apply(void 0, [source].concat(observables)));
+        };
+    }
+
+    function zipAll(project) {
+        return function (source) { return source.lift(new ZipOperator(project)); };
+    }
+
+
+
+    var _operators = /*#__PURE__*/Object.freeze({
+        audit: audit,
+        auditTime: auditTime,
+        buffer: buffer,
+        bufferCount: bufferCount,
+        bufferTime: bufferTime,
+        bufferToggle: bufferToggle,
+        bufferWhen: bufferWhen,
+        catchError: catchError,
+        combineAll: combineAll,
+        combineLatest: combineLatest$1,
+        concat: concat$1,
+        concatAll: concatAll,
+        concatMap: concatMap,
+        concatMapTo: concatMapTo,
+        count: count,
+        debounce: debounce,
+        debounceTime: debounceTime,
+        defaultIfEmpty: defaultIfEmpty,
+        delay: delay,
+        delayWhen: delayWhen,
+        dematerialize: dematerialize,
+        distinct: distinct,
+        distinctUntilChanged: distinctUntilChanged,
+        distinctUntilKeyChanged: distinctUntilKeyChanged,
+        elementAt: elementAt,
+        endWith: endWith,
+        every: every,
+        exhaust: exhaust,
+        exhaustMap: exhaustMap,
+        expand: expand,
+        filter: filter,
+        finalize: finalize,
+        find: find,
+        findIndex: findIndex,
+        first: first,
+        groupBy: groupBy,
+        ignoreElements: ignoreElements,
+        isEmpty: isEmpty,
+        last: last,
+        map: map,
+        mapTo: mapTo,
+        materialize: materialize,
+        max: max,
+        merge: merge$1,
+        mergeAll: mergeAll,
+        mergeMap: mergeMap,
+        flatMap: flatMap,
+        mergeMapTo: mergeMapTo,
+        mergeScan: mergeScan,
+        min: min,
+        multicast: multicast,
+        observeOn: observeOn,
+        onErrorResumeNext: onErrorResumeNext$1,
+        pairwise: pairwise,
+        partition: partition$1,
+        pluck: pluck,
+        publish: publish,
+        publishBehavior: publishBehavior,
+        publishLast: publishLast,
+        publishReplay: publishReplay,
+        race: race$1,
+        reduce: reduce,
+        repeat: repeat,
+        repeatWhen: repeatWhen,
+        retry: retry,
+        retryWhen: retryWhen,
+        refCount: refCount,
+        sample: sample,
+        sampleTime: sampleTime,
+        scan: scan,
+        sequenceEqual: sequenceEqual,
+        share: share,
+        shareReplay: shareReplay,
+        single: single,
+        skip: skip,
+        skipLast: skipLast,
+        skipUntil: skipUntil,
+        skipWhile: skipWhile,
+        startWith: startWith,
+        subscribeOn: subscribeOn,
+        switchAll: switchAll,
+        switchMap: switchMap,
+        switchMapTo: switchMapTo,
+        take: take,
+        takeLast: takeLast,
+        takeUntil: takeUntil,
+        takeWhile: takeWhile,
+        tap: tap,
+        throttle: throttle,
+        throttleTime: throttleTime,
+        throwIfEmpty: throwIfEmpty,
+        timeInterval: timeInterval,
+        timeout: timeout,
+        timeoutWith: timeoutWith,
+        timestamp: timestamp,
+        toArray: toArray,
+        window: window$1,
+        windowCount: windowCount,
+        windowTime: windowTime,
+        windowToggle: windowToggle,
+        windowWhen: windowWhen,
+        withLatestFrom: withLatestFrom,
+        zip: zip$1,
+        zipAll: zipAll
+    });
+
+    var SubscriptionLog = (function () {
+        function SubscriptionLog(subscribedFrame, unsubscribedFrame) {
+            if (unsubscribedFrame === void 0) { unsubscribedFrame = Number.POSITIVE_INFINITY; }
+            this.subscribedFrame = subscribedFrame;
+            this.unsubscribedFrame = unsubscribedFrame;
+        }
+        return SubscriptionLog;
+    }());
+
+    var SubscriptionLoggable = (function () {
+        function SubscriptionLoggable() {
+            this.subscriptions = [];
+        }
+        SubscriptionLoggable.prototype.logSubscribedFrame = function () {
+            this.subscriptions.push(new SubscriptionLog(this.scheduler.now()));
+            return this.subscriptions.length - 1;
+        };
+        SubscriptionLoggable.prototype.logUnsubscribedFrame = function (index) {
+            var subscriptionLogs = this.subscriptions;
+            var oldSubscriptionLog = subscriptionLogs[index];
+            subscriptionLogs[index] = new SubscriptionLog(oldSubscriptionLog.subscribedFrame, this.scheduler.now());
+        };
+        return SubscriptionLoggable;
+    }());
+
+    function applyMixins(derivedCtor, baseCtors) {
+        for (var i = 0, len = baseCtors.length; i < len; i++) {
+            var baseCtor = baseCtors[i];
+            var propertyKeys = Object.getOwnPropertyNames(baseCtor.prototype);
+            for (var j = 0, len2 = propertyKeys.length; j < len2; j++) {
+                var name_1 = propertyKeys[j];
+                derivedCtor.prototype[name_1] = baseCtor.prototype[name_1];
+            }
+        }
+    }
+
+    var ColdObservable = (function (_super) {
+        __extends(ColdObservable, _super);
+        function ColdObservable(messages, scheduler) {
+            var _this = _super.call(this, function (subscriber) {
+                var observable = this;
+                var index = observable.logSubscribedFrame();
+                var subscription = new Subscription();
+                subscription.add(new Subscription(function () {
+                    observable.logUnsubscribedFrame(index);
+                }));
+                observable.scheduleMessages(subscriber);
+                return subscription;
+            }) || this;
+            _this.messages = messages;
+            _this.subscriptions = [];
+            _this.scheduler = scheduler;
+            return _this;
+        }
+        ColdObservable.prototype.scheduleMessages = function (subscriber) {
+            var messagesLength = this.messages.length;
+            for (var i = 0; i < messagesLength; i++) {
+                var message = this.messages[i];
+                subscriber.add(this.scheduler.schedule(function (_a) {
+                    var message = _a.message, subscriber = _a.subscriber;
+                    message.notification.observe(subscriber);
+                }, message.frame, { message: message, subscriber: subscriber }));
+            }
+        };
+        return ColdObservable;
+    }(Observable));
+    applyMixins(ColdObservable, [SubscriptionLoggable]);
+
+    var HotObservable = (function (_super) {
+        __extends(HotObservable, _super);
+        function HotObservable(messages, scheduler) {
+            var _this = _super.call(this) || this;
+            _this.messages = messages;
+            _this.subscriptions = [];
+            _this.scheduler = scheduler;
+            return _this;
+        }
+        HotObservable.prototype._subscribe = function (subscriber) {
+            var subject = this;
+            var index = subject.logSubscribedFrame();
+            var subscription = new Subscription();
+            subscription.add(new Subscription(function () {
+                subject.logUnsubscribedFrame(index);
+            }));
+            subscription.add(_super.prototype._subscribe.call(this, subscriber));
+            return subscription;
+        };
+        HotObservable.prototype.setup = function () {
+            var subject = this;
+            var messagesLength = subject.messages.length;
+            for (var i = 0; i < messagesLength; i++) {
+                (function () {
+                    var message = subject.messages[i];
+                    subject.scheduler.schedule(function () { message.notification.observe(subject); }, message.frame);
+                })();
+            }
+        };
+        return HotObservable;
+    }(Subject));
+    applyMixins(HotObservable, [SubscriptionLoggable]);
+
+    var defaultMaxFrame = 750;
+    var TestScheduler = (function (_super) {
+        __extends(TestScheduler, _super);
+        function TestScheduler(assertDeepEqual) {
+            var _this = _super.call(this, VirtualAction, defaultMaxFrame) || this;
+            _this.assertDeepEqual = assertDeepEqual;
+            _this.hotObservables = [];
+            _this.coldObservables = [];
+            _this.flushTests = [];
+            _this.runMode = false;
+            return _this;
+        }
+        TestScheduler.prototype.createTime = function (marbles) {
+            var indexOf = marbles.indexOf('|');
+            if (indexOf === -1) {
+                throw new Error('marble diagram for time should have a completion marker "|"');
+            }
+            return indexOf * TestScheduler.frameTimeFactor;
+        };
+        TestScheduler.prototype.createColdObservable = function (marbles, values, error) {
+            if (marbles.indexOf('^') !== -1) {
+                throw new Error('cold observable cannot have subscription offset "^"');
+            }
+            if (marbles.indexOf('!') !== -1) {
+                throw new Error('cold observable cannot have unsubscription marker "!"');
+            }
+            var messages = TestScheduler.parseMarbles(marbles, values, error, undefined, this.runMode);
+            var cold = new ColdObservable(messages, this);
+            this.coldObservables.push(cold);
+            return cold;
+        };
+        TestScheduler.prototype.createHotObservable = function (marbles, values, error) {
+            if (marbles.indexOf('!') !== -1) {
+                throw new Error('hot observable cannot have unsubscription marker "!"');
+            }
+            var messages = TestScheduler.parseMarbles(marbles, values, error, undefined, this.runMode);
+            var subject = new HotObservable(messages, this);
+            this.hotObservables.push(subject);
+            return subject;
+        };
+        TestScheduler.prototype.materializeInnerObservable = function (observable, outerFrame) {
+            var _this = this;
+            var messages = [];
+            observable.subscribe(function (value) {
+                messages.push({ frame: _this.frame - outerFrame, notification: Notification.createNext(value) });
+            }, function (err) {
+                messages.push({ frame: _this.frame - outerFrame, notification: Notification.createError(err) });
+            }, function () {
+                messages.push({ frame: _this.frame - outerFrame, notification: Notification.createComplete() });
+            });
+            return messages;
+        };
+        TestScheduler.prototype.expectObservable = function (observable, subscriptionMarbles) {
+            var _this = this;
+            if (subscriptionMarbles === void 0) { subscriptionMarbles = null; }
+            var actual = [];
+            var flushTest = { actual: actual, ready: false };
+            var subscriptionParsed = TestScheduler.parseMarblesAsSubscriptions(subscriptionMarbles, this.runMode);
+            var subscriptionFrame = subscriptionParsed.subscribedFrame === Number.POSITIVE_INFINITY ?
+                0 : subscriptionParsed.subscribedFrame;
+            var unsubscriptionFrame = subscriptionParsed.unsubscribedFrame;
+            var subscription;
+            this.schedule(function () {
+                subscription = observable.subscribe(function (x) {
+                    var value = x;
+                    if (x instanceof Observable) {
+                        value = _this.materializeInnerObservable(value, _this.frame);
+                    }
+                    actual.push({ frame: _this.frame, notification: Notification.createNext(value) });
+                }, function (err) {
+                    actual.push({ frame: _this.frame, notification: Notification.createError(err) });
+                }, function () {
+                    actual.push({ frame: _this.frame, notification: Notification.createComplete() });
+                });
+            }, subscriptionFrame);
+            if (unsubscriptionFrame !== Number.POSITIVE_INFINITY) {
+                this.schedule(function () { return subscription.unsubscribe(); }, unsubscriptionFrame);
+            }
+            this.flushTests.push(flushTest);
+            var runMode = this.runMode;
+            return {
+                toBe: function (marbles, values, errorValue) {
+                    flushTest.ready = true;
+                    flushTest.expected = TestScheduler.parseMarbles(marbles, values, errorValue, true, runMode);
+                }
+            };
+        };
+        TestScheduler.prototype.expectSubscriptions = function (actualSubscriptionLogs) {
+            var flushTest = { actual: actualSubscriptionLogs, ready: false };
+            this.flushTests.push(flushTest);
+            var runMode = this.runMode;
+            return {
+                toBe: function (marbles) {
+                    var marblesArray = (typeof marbles === 'string') ? [marbles] : marbles;
+                    flushTest.ready = true;
+                    flushTest.expected = marblesArray.map(function (marbles) {
+                        return TestScheduler.parseMarblesAsSubscriptions(marbles, runMode);
+                    });
+                }
+            };
+        };
+        TestScheduler.prototype.flush = function () {
+            var _this = this;
+            var hotObservables = this.hotObservables;
+            while (hotObservables.length > 0) {
+                hotObservables.shift().setup();
+            }
+            _super.prototype.flush.call(this);
+            this.flushTests = this.flushTests.filter(function (test) {
+                if (test.ready) {
+                    _this.assertDeepEqual(test.actual, test.expected);
+                    return false;
+                }
+                return true;
+            });
+        };
+        TestScheduler.parseMarblesAsSubscriptions = function (marbles, runMode) {
+            var _this = this;
+            if (runMode === void 0) { runMode = false; }
+            if (typeof marbles !== 'string') {
+                return new SubscriptionLog(Number.POSITIVE_INFINITY);
+            }
+            var len = marbles.length;
+            var groupStart = -1;
+            var subscriptionFrame = Number.POSITIVE_INFINITY;
+            var unsubscriptionFrame = Number.POSITIVE_INFINITY;
+            var frame = 0;
+            var _loop_1 = function (i) {
+                var nextFrame = frame;
+                var advanceFrameBy = function (count) {
+                    nextFrame += count * _this.frameTimeFactor;
+                };
+                var c = marbles[i];
+                switch (c) {
+                    case ' ':
+                        if (!runMode) {
+                            advanceFrameBy(1);
+                        }
+                        break;
+                    case '-':
+                        advanceFrameBy(1);
+                        break;
+                    case '(':
+                        groupStart = frame;
+                        advanceFrameBy(1);
+                        break;
+                    case ')':
+                        groupStart = -1;
+                        advanceFrameBy(1);
+                        break;
+                    case '^':
+                        if (subscriptionFrame !== Number.POSITIVE_INFINITY) {
+                            throw new Error('found a second subscription point \'^\' in a ' +
+                                'subscription marble diagram. There can only be one.');
+                        }
+                        subscriptionFrame = groupStart > -1 ? groupStart : frame;
+                        advanceFrameBy(1);
+                        break;
+                    case '!':
+                        if (unsubscriptionFrame !== Number.POSITIVE_INFINITY) {
+                            throw new Error('found a second subscription point \'^\' in a ' +
+                                'subscription marble diagram. There can only be one.');
+                        }
+                        unsubscriptionFrame = groupStart > -1 ? groupStart : frame;
+                        break;
+                    default:
+                        if (runMode && c.match(/^[0-9]$/)) {
+                            if (i === 0 || marbles[i - 1] === ' ') {
+                                var buffer = marbles.slice(i);
+                                var match = buffer.match(/^([0-9]+(?:\.[0-9]+)?)(ms|s|m) /);
+                                if (match) {
+                                    i += match[0].length - 1;
+                                    var duration = parseFloat(match[1]);
+                                    var unit = match[2];
+                                    var durationInMs = void 0;
+                                    switch (unit) {
+                                        case 'ms':
+                                            durationInMs = duration;
+                                            break;
+                                        case 's':
+                                            durationInMs = duration * 1000;
+                                            break;
+                                        case 'm':
+                                            durationInMs = duration * 1000 * 60;
+                                            break;
+                                        default:
+                                            break;
+                                    }
+                                    advanceFrameBy(durationInMs / this_1.frameTimeFactor);
+                                    break;
+                                }
+                            }
+                        }
+                        throw new Error('there can only be \'^\' and \'!\' markers in a ' +
+                            'subscription marble diagram. Found instead \'' + c + '\'.');
+                }
+                frame = nextFrame;
+                out_i_1 = i;
+            };
+            var this_1 = this, out_i_1;
+            for (var i = 0; i < len; i++) {
+                _loop_1(i);
+                i = out_i_1;
+            }
+            if (unsubscriptionFrame < 0) {
+                return new SubscriptionLog(subscriptionFrame);
+            }
+            else {
+                return new SubscriptionLog(subscriptionFrame, unsubscriptionFrame);
+            }
+        };
+        TestScheduler.parseMarbles = function (marbles, values, errorValue, materializeInnerObservables, runMode) {
+            var _this = this;
+            if (materializeInnerObservables === void 0) { materializeInnerObservables = false; }
+            if (runMode === void 0) { runMode = false; }
+            if (marbles.indexOf('!') !== -1) {
+                throw new Error('conventional marble diagrams cannot have the ' +
+                    'unsubscription marker "!"');
+            }
+            var len = marbles.length;
+            var testMessages = [];
+            var subIndex = runMode ? marbles.replace(/^[ ]+/, '').indexOf('^') : marbles.indexOf('^');
+            var frame = subIndex === -1 ? 0 : (subIndex * -this.frameTimeFactor);
+            var getValue = typeof values !== 'object' ?
+                function (x) { return x; } :
+                function (x) {
+                    if (materializeInnerObservables && values[x] instanceof ColdObservable) {
+                        return values[x].messages;
+                    }
+                    return values[x];
+                };
+            var groupStart = -1;
+            var _loop_2 = function (i) {
+                var nextFrame = frame;
+                var advanceFrameBy = function (count) {
+                    nextFrame += count * _this.frameTimeFactor;
+                };
+                var notification = void 0;
+                var c = marbles[i];
+                switch (c) {
+                    case ' ':
+                        if (!runMode) {
+                            advanceFrameBy(1);
+                        }
+                        break;
+                    case '-':
+                        advanceFrameBy(1);
+                        break;
+                    case '(':
+                        groupStart = frame;
+                        advanceFrameBy(1);
+                        break;
+                    case ')':
+                        groupStart = -1;
+                        advanceFrameBy(1);
+                        break;
+                    case '|':
+                        notification = Notification.createComplete();
+                        advanceFrameBy(1);
+                        break;
+                    case '^':
+                        advanceFrameBy(1);
+                        break;
+                    case '#':
+                        notification = Notification.createError(errorValue || 'error');
+                        advanceFrameBy(1);
+                        break;
+                    default:
+                        if (runMode && c.match(/^[0-9]$/)) {
+                            if (i === 0 || marbles[i - 1] === ' ') {
+                                var buffer = marbles.slice(i);
+                                var match = buffer.match(/^([0-9]+(?:\.[0-9]+)?)(ms|s|m) /);
+                                if (match) {
+                                    i += match[0].length - 1;
+                                    var duration = parseFloat(match[1]);
+                                    var unit = match[2];
+                                    var durationInMs = void 0;
+                                    switch (unit) {
+                                        case 'ms':
+                                            durationInMs = duration;
+                                            break;
+                                        case 's':
+                                            durationInMs = duration * 1000;
+                                            break;
+                                        case 'm':
+                                            durationInMs = duration * 1000 * 60;
+                                            break;
+                                        default:
+                                            break;
+                                    }
+                                    advanceFrameBy(durationInMs / this_2.frameTimeFactor);
+                                    break;
+                                }
+                            }
+                        }
+                        notification = Notification.createNext(getValue(c));
+                        advanceFrameBy(1);
+                        break;
+                }
+                if (notification) {
+                    testMessages.push({ frame: groupStart > -1 ? groupStart : frame, notification: notification });
+                }
+                frame = nextFrame;
+                out_i_2 = i;
+            };
+            var this_2 = this, out_i_2;
+            for (var i = 0; i < len; i++) {
+                _loop_2(i);
+                i = out_i_2;
+            }
+            return testMessages;
+        };
+        TestScheduler.prototype.run = function (callback) {
+            var prevFrameTimeFactor = TestScheduler.frameTimeFactor;
+            var prevMaxFrames = this.maxFrames;
+            TestScheduler.frameTimeFactor = 1;
+            this.maxFrames = Number.POSITIVE_INFINITY;
+            this.runMode = true;
+            AsyncScheduler.delegate = this;
+            var helpers = {
+                cold: this.createColdObservable.bind(this),
+                hot: this.createHotObservable.bind(this),
+                flush: this.flush.bind(this),
+                expectObservable: this.expectObservable.bind(this),
+                expectSubscriptions: this.expectSubscriptions.bind(this),
+            };
+            try {
+                var ret = callback(helpers);
+                this.flush();
+                return ret;
+            }
+            finally {
+                TestScheduler.frameTimeFactor = prevFrameTimeFactor;
+                this.maxFrames = prevMaxFrames;
+                this.runMode = false;
+                AsyncScheduler.delegate = undefined;
+            }
+        };
+        return TestScheduler;
+    }(VirtualTimeScheduler));
+
+
+
+    var _testing = /*#__PURE__*/Object.freeze({
+        TestScheduler: TestScheduler
+    });
+
+    var __window = typeof window !== 'undefined' && window;
+    var __self = typeof self !== 'undefined' && typeof WorkerGlobalScope !== 'undefined' &&
+        self instanceof WorkerGlobalScope && self;
+    var __global = typeof global !== 'undefined' && global;
+    var _root = __window || __global || __self;
+    (function () {
+        if (!_root) {
+            throw new Error('RxJS could not find any global context (window, self, global)');
+        }
+    })();
+
+    function getCORSRequest() {
+        if (_root.XMLHttpRequest) {
+            return new _root.XMLHttpRequest();
+        }
+        else if (!!_root.XDomainRequest) {
+            return new _root.XDomainRequest();
+        }
+        else {
+            throw new Error('CORS is not supported by your browser');
+        }
+    }
+    function getXMLHttpRequest() {
+        if (_root.XMLHttpRequest) {
+            return new _root.XMLHttpRequest();
+        }
+        else {
+            var progId = void 0;
+            try {
+                var progIds = ['Msxml2.XMLHTTP', 'Microsoft.XMLHTTP', 'Msxml2.XMLHTTP.4.0'];
+                for (var i = 0; i < 3; i++) {
+                    try {
+                        progId = progIds[i];
+                        if (new _root.ActiveXObject(progId)) {
+                            break;
+                        }
+                    }
+                    catch (e) {
+                    }
+                }
+                return new _root.ActiveXObject(progId);
+            }
+            catch (e) {
+                throw new Error('XMLHttpRequest is not supported by your browser');
+            }
+        }
+    }
+    function ajaxGet(url, headers) {
+        if (headers === void 0) { headers = null; }
+        return new AjaxObservable({ method: 'GET', url: url, headers: headers });
+    }
+    function ajaxPost(url, body, headers) {
+        return new AjaxObservable({ method: 'POST', url: url, body: body, headers: headers });
+    }
+    function ajaxDelete(url, headers) {
+        return new AjaxObservable({ method: 'DELETE', url: url, headers: headers });
+    }
+    function ajaxPut(url, body, headers) {
+        return new AjaxObservable({ method: 'PUT', url: url, body: body, headers: headers });
+    }
+    function ajaxPatch(url, body, headers) {
+        return new AjaxObservable({ method: 'PATCH', url: url, body: body, headers: headers });
+    }
+    var mapResponse = map(function (x, index) { return x.response; });
+    function ajaxGetJSON(url, headers) {
+        return mapResponse(new AjaxObservable({
+            method: 'GET',
+            url: url,
+            responseType: 'json',
+            headers: headers
+        }));
+    }
+    var AjaxObservable = (function (_super) {
+        __extends(AjaxObservable, _super);
+        function AjaxObservable(urlOrRequest) {
+            var _this = _super.call(this) || this;
+            var request = {
+                async: true,
+                createXHR: function () {
+                    return this.crossDomain ? getCORSRequest() : getXMLHttpRequest();
+                },
+                crossDomain: true,
+                withCredentials: false,
+                headers: {},
+                method: 'GET',
+                responseType: 'json',
+                timeout: 0
+            };
+            if (typeof urlOrRequest === 'string') {
+                request.url = urlOrRequest;
+            }
+            else {
+                for (var prop in urlOrRequest) {
+                    if (urlOrRequest.hasOwnProperty(prop)) {
+                        request[prop] = urlOrRequest[prop];
+                    }
+                }
+            }
+            _this.request = request;
+            return _this;
+        }
+        AjaxObservable.prototype._subscribe = function (subscriber) {
+            return new AjaxSubscriber(subscriber, this.request);
+        };
+        AjaxObservable.create = (function () {
+            var create = function (urlOrRequest) {
+                return new AjaxObservable(urlOrRequest);
+            };
+            create.get = ajaxGet;
+            create.post = ajaxPost;
+            create.delete = ajaxDelete;
+            create.put = ajaxPut;
+            create.patch = ajaxPatch;
+            create.getJSON = ajaxGetJSON;
+            return create;
+        })();
+        return AjaxObservable;
+    }(Observable));
+    var AjaxSubscriber = (function (_super) {
+        __extends(AjaxSubscriber, _super);
+        function AjaxSubscriber(destination, request) {
+            var _this = _super.call(this, destination) || this;
+            _this.request = request;
+            _this.done = false;
+            var headers = request.headers = request.headers || {};
+            if (!request.crossDomain && !_this.getHeader(headers, 'X-Requested-With')) {
+                headers['X-Requested-With'] = 'XMLHttpRequest';
+            }
+            var contentTypeHeader = _this.getHeader(headers, 'Content-Type');
+            if (!contentTypeHeader && !(_root.FormData && request.body instanceof _root.FormData) && typeof request.body !== 'undefined') {
+                headers['Content-Type'] = 'application/x-www-form-urlencoded; charset=UTF-8';
+            }
+            request.body = _this.serializeBody(request.body, _this.getHeader(request.headers, 'Content-Type'));
+            _this.send();
+            return _this;
+        }
+        AjaxSubscriber.prototype.next = function (e) {
+            this.done = true;
+            var _a = this, xhr = _a.xhr, request = _a.request, destination = _a.destination;
+            var result;
+            try {
+                result = new AjaxResponse(e, xhr, request);
+            }
+            catch (err) {
+                return destination.error(err);
+            }
+            destination.next(result);
+        };
+        AjaxSubscriber.prototype.send = function () {
+            var _a = this, request = _a.request, _b = _a.request, user = _b.user, method = _b.method, url = _b.url, async = _b.async, password = _b.password, headers = _b.headers, body = _b.body;
+            try {
+                var xhr = this.xhr = request.createXHR();
+                this.setupEvents(xhr, request);
+                if (user) {
+                    xhr.open(method, url, async, user, password);
+                }
+                else {
+                    xhr.open(method, url, async);
+                }
+                if (async) {
+                    xhr.timeout = request.timeout;
+                    xhr.responseType = request.responseType;
+                }
+                if ('withCredentials' in xhr) {
+                    xhr.withCredentials = !!request.withCredentials;
+                }
+                this.setHeaders(xhr, headers);
+                if (body) {
+                    xhr.send(body);
+                }
+                else {
+                    xhr.send();
+                }
+            }
+            catch (err) {
+                this.error(err);
+            }
+        };
+        AjaxSubscriber.prototype.serializeBody = function (body, contentType) {
+            if (!body || typeof body === 'string') {
+                return body;
+            }
+            else if (_root.FormData && body instanceof _root.FormData) {
+                return body;
+            }
+            if (contentType) {
+                var splitIndex = contentType.indexOf(';');
+                if (splitIndex !== -1) {
+                    contentType = contentType.substring(0, splitIndex);
+                }
+            }
+            switch (contentType) {
+                case 'application/x-www-form-urlencoded':
+                    return Object.keys(body).map(function (key) { return encodeURIComponent(key) + "=" + encodeURIComponent(body[key]); }).join('&');
+                case 'application/json':
+                    return JSON.stringify(body);
+                default:
+                    return body;
+            }
+        };
+        AjaxSubscriber.prototype.setHeaders = function (xhr, headers) {
+            for (var key in headers) {
+                if (headers.hasOwnProperty(key)) {
+                    xhr.setRequestHeader(key, headers[key]);
+                }
+            }
+        };
+        AjaxSubscriber.prototype.getHeader = function (headers, headerName) {
+            for (var key in headers) {
+                if (key.toLowerCase() === headerName.toLowerCase()) {
+                    return headers[key];
+                }
+            }
+            return undefined;
+        };
+        AjaxSubscriber.prototype.setupEvents = function (xhr, request) {
+            var progressSubscriber = request.progressSubscriber;
+            function xhrTimeout(e) {
+                var _a = xhrTimeout, subscriber = _a.subscriber, progressSubscriber = _a.progressSubscriber, request = _a.request;
+                if (progressSubscriber) {
+                    progressSubscriber.error(e);
+                }
+                var error;
+                try {
+                    error = new AjaxTimeoutError(this, request);
+                }
+                catch (err) {
+                    error = err;
+                }
+                subscriber.error(error);
+            }
+            xhr.ontimeout = xhrTimeout;
+            xhrTimeout.request = request;
+            xhrTimeout.subscriber = this;
+            xhrTimeout.progressSubscriber = progressSubscriber;
+            if (xhr.upload && 'withCredentials' in xhr) {
+                if (progressSubscriber) {
+                    var xhrProgress_1;
+                    xhrProgress_1 = function (e) {
+                        var progressSubscriber = xhrProgress_1.progressSubscriber;
+                        progressSubscriber.next(e);
+                    };
+                    if (_root.XDomainRequest) {
+                        xhr.onprogress = xhrProgress_1;
+                    }
+                    else {
+                        xhr.upload.onprogress = xhrProgress_1;
+                    }
+                    xhrProgress_1.progressSubscriber = progressSubscriber;
+                }
+                var xhrError_1;
+                xhrError_1 = function (e) {
+                    var _a = xhrError_1, progressSubscriber = _a.progressSubscriber, subscriber = _a.subscriber, request = _a.request;
+                    if (progressSubscriber) {
+                        progressSubscriber.error(e);
+                    }
+                    var error;
+                    try {
+                        error = new AjaxError('ajax error', this, request);
+                    }
+                    catch (err) {
+                        error = err;
+                    }
+                    subscriber.error(error);
+                };
+                xhr.onerror = xhrError_1;
+                xhrError_1.request = request;
+                xhrError_1.subscriber = this;
+                xhrError_1.progressSubscriber = progressSubscriber;
+            }
+            function xhrReadyStateChange(e) {
+                return;
+            }
+            xhr.onreadystatechange = xhrReadyStateChange;
+            xhrReadyStateChange.subscriber = this;
+            xhrReadyStateChange.progressSubscriber = progressSubscriber;
+            xhrReadyStateChange.request = request;
+            function xhrLoad(e) {
+                var _a = xhrLoad, subscriber = _a.subscriber, progressSubscriber = _a.progressSubscriber, request = _a.request;
+                if (this.readyState === 4) {
+                    var status_1 = this.status === 1223 ? 204 : this.status;
+                    var response = (this.responseType === 'text' ? (this.response || this.responseText) : this.response);
+                    if (status_1 === 0) {
+                        status_1 = response ? 200 : 0;
+                    }
+                    if (status_1 < 400) {
+                        if (progressSubscriber) {
+                            progressSubscriber.complete();
+                        }
+                        subscriber.next(e);
+                        subscriber.complete();
+                    }
+                    else {
+                        if (progressSubscriber) {
+                            progressSubscriber.error(e);
+                        }
+                        var error = void 0;
+                        try {
+                            error = new AjaxError('ajax error ' + status_1, this, request);
+                        }
+                        catch (err) {
+                            error = err;
+                        }
+                        subscriber.error(error);
+                    }
+                }
+            }
+            xhr.onload = xhrLoad;
+            xhrLoad.subscriber = this;
+            xhrLoad.progressSubscriber = progressSubscriber;
+            xhrLoad.request = request;
+        };
+        AjaxSubscriber.prototype.unsubscribe = function () {
+            var _a = this, done = _a.done, xhr = _a.xhr;
+            if (!done && xhr && xhr.readyState !== 4 && typeof xhr.abort === 'function') {
+                xhr.abort();
+            }
+            _super.prototype.unsubscribe.call(this);
+        };
+        return AjaxSubscriber;
+    }(Subscriber));
+    var AjaxResponse = (function () {
+        function AjaxResponse(originalEvent, xhr, request) {
+            this.originalEvent = originalEvent;
+            this.xhr = xhr;
+            this.request = request;
+            this.status = xhr.status;
+            this.responseType = xhr.responseType || request.responseType;
+            this.response = parseXhrResponse(this.responseType, xhr);
+        }
+        return AjaxResponse;
+    }());
+    var AjaxErrorImpl = (function () {
+        function AjaxErrorImpl(message, xhr, request) {
+            Error.call(this);
+            this.message = message;
+            this.name = 'AjaxError';
+            this.xhr = xhr;
+            this.request = request;
+            this.status = xhr.status;
+            this.responseType = xhr.responseType || request.responseType;
+            this.response = parseXhrResponse(this.responseType, xhr);
+            return this;
+        }
+        AjaxErrorImpl.prototype = Object.create(Error.prototype);
+        return AjaxErrorImpl;
+    })();
+    var AjaxError = AjaxErrorImpl;
+    function parseJson(xhr) {
+        if ('response' in xhr) {
+            return xhr.responseType ? xhr.response : JSON.parse(xhr.response || xhr.responseText || 'null');
+        }
+        else {
+            return JSON.parse(xhr.responseText || 'null');
+        }
+    }
+    function parseXhrResponse(responseType, xhr) {
+        switch (responseType) {
+            case 'json':
+                return parseJson(xhr);
+            case 'xml':
+                return xhr.responseXML;
+            case 'text':
+            default:
+                return ('response' in xhr) ? xhr.response : xhr.responseText;
+        }
+    }
+    function AjaxTimeoutErrorImpl(xhr, request) {
+        AjaxError.call(this, 'ajax timeout', xhr, request);
+        this.name = 'AjaxTimeoutError';
+        return this;
+    }
+    var AjaxTimeoutError = AjaxTimeoutErrorImpl;
+
+    var ajax = (function () { return AjaxObservable.create; })();
+
+
+
+    var _ajax = /*#__PURE__*/Object.freeze({
+        ajax: ajax,
+        AjaxResponse: AjaxResponse,
+        AjaxError: AjaxError,
+        AjaxTimeoutError: AjaxTimeoutError
+    });
+
+    var DEFAULT_WEBSOCKET_CONFIG = {
+        url: '',
+        deserializer: function (e) { return JSON.parse(e.data); },
+        serializer: function (value) { return JSON.stringify(value); },
+    };
+    var WEBSOCKETSUBJECT_INVALID_ERROR_OBJECT = 'WebSocketSubject.error must be called with an object with an error code, and an optional reason: { code: number, reason: string }';
+    var WebSocketSubject = (function (_super) {
+        __extends(WebSocketSubject, _super);
+        function WebSocketSubject(urlConfigOrSource, destination) {
+            var _this = _super.call(this) || this;
+            if (urlConfigOrSource instanceof Observable) {
+                _this.destination = destination;
+                _this.source = urlConfigOrSource;
+            }
+            else {
+                var config = _this._config = __assign({}, DEFAULT_WEBSOCKET_CONFIG);
+                _this._output = new Subject();
+                if (typeof urlConfigOrSource === 'string') {
+                    config.url = urlConfigOrSource;
+                }
+                else {
+                    for (var key in urlConfigOrSource) {
+                        if (urlConfigOrSource.hasOwnProperty(key)) {
+                            config[key] = urlConfigOrSource[key];
+                        }
+                    }
+                }
+                if (!config.WebSocketCtor && WebSocket) {
+                    config.WebSocketCtor = WebSocket;
+                }
+                else if (!config.WebSocketCtor) {
+                    throw new Error('no WebSocket constructor can be found');
+                }
+                _this.destination = new ReplaySubject();
+            }
+            return _this;
+        }
+        WebSocketSubject.prototype.lift = function (operator) {
+            var sock = new WebSocketSubject(this._config, this.destination);
+            sock.operator = operator;
+            sock.source = this;
+            return sock;
+        };
+        WebSocketSubject.prototype._resetState = function () {
+            this._socket = null;
+            if (!this.source) {
+                this.destination = new ReplaySubject();
+            }
+            this._output = new Subject();
+        };
+        WebSocketSubject.prototype.multiplex = function (subMsg, unsubMsg, messageFilter) {
+            var self = this;
+            return new Observable(function (observer) {
+                try {
+                    self.next(subMsg());
+                }
+                catch (err) {
+                    observer.error(err);
+                }
+                var subscription = self.subscribe(function (x) {
+                    try {
+                        if (messageFilter(x)) {
+                            observer.next(x);
+                        }
+                    }
+                    catch (err) {
+                        observer.error(err);
+                    }
+                }, function (err) { return observer.error(err); }, function () { return observer.complete(); });
+                return function () {
+                    try {
+                        self.next(unsubMsg());
+                    }
+                    catch (err) {
+                        observer.error(err);
+                    }
+                    subscription.unsubscribe();
+                };
+            });
+        };
+        WebSocketSubject.prototype._connectSocket = function () {
+            var _this = this;
+            var _a = this._config, WebSocketCtor = _a.WebSocketCtor, protocol = _a.protocol, url = _a.url, binaryType = _a.binaryType;
+            var observer = this._output;
+            var socket = null;
+            try {
+                socket = protocol ?
+                    new WebSocketCtor(url, protocol) :
+                    new WebSocketCtor(url);
+                this._socket = socket;
+                if (binaryType) {
+                    this._socket.binaryType = binaryType;
+                }
+            }
+            catch (e) {
+                observer.error(e);
+                return;
+            }
+            var subscription = new Subscription(function () {
+                _this._socket = null;
+                if (socket && socket.readyState === 1) {
+                    socket.close();
+                }
+            });
+            socket.onopen = function (e) {
+                var _socket = _this._socket;
+                if (!_socket) {
+                    socket.close();
+                    _this._resetState();
+                    return;
+                }
+                var openObserver = _this._config.openObserver;
+                if (openObserver) {
+                    openObserver.next(e);
+                }
+                var queue = _this.destination;
+                _this.destination = Subscriber.create(function (x) {
+                    if (socket.readyState === 1) {
+                        try {
+                            var serializer = _this._config.serializer;
+                            socket.send(serializer(x));
+                        }
+                        catch (e) {
+                            _this.destination.error(e);
+                        }
+                    }
+                }, function (e) {
+                    var closingObserver = _this._config.closingObserver;
+                    if (closingObserver) {
+                        closingObserver.next(undefined);
+                    }
+                    if (e && e.code) {
+                        socket.close(e.code, e.reason);
+                    }
+                    else {
+                        observer.error(new TypeError(WEBSOCKETSUBJECT_INVALID_ERROR_OBJECT));
+                    }
+                    _this._resetState();
+                }, function () {
+                    var closingObserver = _this._config.closingObserver;
+                    if (closingObserver) {
+                        closingObserver.next(undefined);
+                    }
+                    socket.close();
+                    _this._resetState();
+                });
+                if (queue && queue instanceof ReplaySubject) {
+                    subscription.add(queue.subscribe(_this.destination));
+                }
+            };
+            socket.onerror = function (e) {
+                _this._resetState();
+                observer.error(e);
+            };
+            socket.onclose = function (e) {
+                _this._resetState();
+                var closeObserver = _this._config.closeObserver;
+                if (closeObserver) {
+                    closeObserver.next(e);
+                }
+                if (e.wasClean) {
+                    observer.complete();
+                }
+                else {
+                    observer.error(e);
+                }
+            };
+            socket.onmessage = function (e) {
+                try {
+                    var deserializer = _this._config.deserializer;
+                    observer.next(deserializer(e));
+                }
+                catch (err) {
+                    observer.error(err);
+                }
+            };
+        };
+        WebSocketSubject.prototype._subscribe = function (subscriber) {
+            var _this = this;
+            var source = this.source;
+            if (source) {
+                return source.subscribe(subscriber);
+            }
+            if (!this._socket) {
+                this._connectSocket();
+            }
+            this._output.subscribe(subscriber);
+            subscriber.add(function () {
+                var _socket = _this._socket;
+                if (_this._output.observers.length === 0) {
+                    if (_socket && _socket.readyState === 1) {
+                        _socket.close();
+                    }
+                    _this._resetState();
+                }
+            });
+            return subscriber;
+        };
+        WebSocketSubject.prototype.unsubscribe = function () {
+            var _socket = this._socket;
+            if (_socket && _socket.readyState === 1) {
+                _socket.close();
+            }
+            this._resetState();
+            _super.prototype.unsubscribe.call(this);
+        };
+        return WebSocketSubject;
+    }(AnonymousSubject));
+
+    function webSocket(urlConfigOrSource) {
+        return new WebSocketSubject(urlConfigOrSource);
+    }
+
+
+
+    var _webSocket = /*#__PURE__*/Object.freeze({
+        webSocket: webSocket,
+        WebSocketSubject: WebSocketSubject
+    });
+
+    function fromFetch(input, initWithSelector) {
+        if (initWithSelector === void 0) { initWithSelector = {}; }
+        var selector = initWithSelector.selector, init = __rest(initWithSelector, ["selector"]);
+        return new Observable(function (subscriber) {
+            var controller = new AbortController();
+            var signal = controller.signal;
+            var abortable = true;
+            var unsubscribed = false;
+            var subscription = new Subscription();
+            subscription.add(function () {
+                unsubscribed = true;
+                if (abortable) {
+                    controller.abort();
+                }
+            });
+            var perSubscriberInit;
+            if (init) {
+                if (init.signal) {
+                    if (init.signal.aborted) {
+                        controller.abort();
+                    }
+                    else {
+                        var outerSignal_1 = init.signal;
+                        var outerSignalHandler_1 = function () {
+                            if (!signal.aborted) {
+                                controller.abort();
+                            }
+                        };
+                        outerSignal_1.addEventListener('abort', outerSignalHandler_1);
+                        subscription.add(function () { return outerSignal_1.removeEventListener('abort', outerSignalHandler_1); });
+                    }
+                }
+                perSubscriberInit = __assign({}, init, { signal: signal });
+            }
+            else {
+                perSubscriberInit = { signal: signal };
+            }
+            fetch(input, perSubscriberInit).then(function (response) {
+                if (selector) {
+                    subscription.add(from(selector(response)).subscribe(function (value) { return subscriber.next(value); }, function (err) {
+                        abortable = false;
+                        if (!unsubscribed) {
+                            subscriber.error(err);
+                        }
+                    }, function () {
+                        abortable = false;
+                        subscriber.complete();
+                    }));
+                }
+                else {
+                    abortable = false;
+                    subscriber.next(response);
+                    subscriber.complete();
+                }
+            }).catch(function (err) {
+                abortable = false;
+                if (!unsubscribed) {
+                    subscriber.error(err);
+                }
+            });
+            return subscription;
+        });
+    }
+
+
+
+    var _fetch = /*#__PURE__*/Object.freeze({
+        fromFetch: fromFetch
+    });
+
+    var operators = _operators;
+    var testing = _testing;
+    var ajax$1 = _ajax;
+    var webSocket$1 = _webSocket;
+    var fetch$1 = _fetch;
+
+    exports.operators = operators;
+    exports.testing = testing;
+    exports.ajax = ajax$1;
+    exports.webSocket = webSocket$1;
+    exports.fetch = fetch$1;
+    exports.Observable = Observable;
+    exports.ConnectableObservable = ConnectableObservable;
+    exports.GroupedObservable = GroupedObservable;
+    exports.observable = observable;
+    exports.Subject = Subject;
+    exports.BehaviorSubject = BehaviorSubject;
+    exports.ReplaySubject = ReplaySubject;
+    exports.AsyncSubject = AsyncSubject;
+    exports.asap = asap;
+    exports.asapScheduler = asapScheduler;
+    exports.async = async;
+    exports.asyncScheduler = asyncScheduler;
+    exports.queue = queue;
+    exports.queueScheduler = queueScheduler;
+    exports.animationFrame = animationFrame;
+    exports.animationFrameScheduler = animationFrameScheduler;
+    exports.VirtualTimeScheduler = VirtualTimeScheduler;
+    exports.VirtualAction = VirtualAction;
+    exports.Scheduler = Scheduler;
+    exports.Subscription = Subscription;
+    exports.Subscriber = Subscriber;
+    exports.Notification = Notification;
+    exports.pipe = pipe;
+    exports.noop = noop;
+    exports.identity = identity;
+    exports.isObservable = isObservable;
+    exports.ArgumentOutOfRangeError = ArgumentOutOfRangeError;
+    exports.EmptyError = EmptyError;
+    exports.ObjectUnsubscribedError = ObjectUnsubscribedError;
+    exports.UnsubscriptionError = UnsubscriptionError;
+    exports.TimeoutError = TimeoutError;
+    exports.bindCallback = bindCallback;
+    exports.bindNodeCallback = bindNodeCallback;
+    exports.combineLatest = combineLatest;
+    exports.concat = concat;
+    exports.defer = defer;
+    exports.empty = empty$1;
+    exports.forkJoin = forkJoin;
+    exports.from = from;
+    exports.fromEvent = fromEvent;
+    exports.fromEventPattern = fromEventPattern;
+    exports.generate = generate;
+    exports.iif = iif;
+    exports.interval = interval;
+    exports.merge = merge;
+    exports.never = never;
+    exports.of = of;
+    exports.onErrorResumeNext = onErrorResumeNext;
+    exports.pairs = pairs;
+    exports.partition = partition;
+    exports.race = race;
+    exports.range = range;
+    exports.throwError = throwError;
+    exports.timer = timer;
+    exports.using = using;
+    exports.zip = zip;
+    exports.scheduled = scheduled;
+    exports.EMPTY = EMPTY;
+    exports.NEVER = NEVER;
+    exports.config = config;
+
+    Object.defineProperty(exports, '__esModule', { value: true });
+
+})));
+
+//# sourceMappingURL=rxjs.umd.js.map
+