"use strict";
(self.webpackChunktradingview = self.webpackChunktradingview || []).push([
    [19247], {
        261030: (e, t, n) => {
            n.d(t, {
                CookieSettings: () => a,
                bannerPrivacyPreferenceKey: () => p,
                checkBannerPrivacyPreferenceKey: () => T,
                cookieSettingsChangeEvent: () => l,
                cookieSettingsReady: () => c,
                getCookieSetting: () => z,
                hideBanner: () => x,
                isBannerVisible: () => L,
                notApplicateBanner: () => V,
                setCookieSetting: () => P,
                showBanner: () => A
            });
            var a, o = n(251954),
                i = n(955273),
                r = n(49437),
                s = n(66974),
                _ = n(181706);
            ! function(e) {
                e.Analytics = "analytics", e.Advertising = "advertising"
            }(a || (a = {}));
            const l = "cookie_settings_changed",
                c = (0, i.createDeferredPromise)(),
                g = window.location.hostname.split("."),
                d = (0, s.isLocal)() ? "" : "." + g.slice(1, g.length).join("."),
                u = "cookieBanner",
                p = (0, s.isProd)() ? "cookiePrivacyPreferenceBannerProduction" : "cookiePrivacyPreferenceBannerLocal",
                h = "accepted",
                m = "ignored",
                b = "notApplicable",
                f = "cookiesSettings",
                w = "localCookiesSettings",
                v = "cookiePrivacyPreferenceBanner",
                y = {
                    [a.Analytics]: !1,
                    [a.Advertising]: !1
                };

            function k() {
                return r.TVLocalStorage.removeItem(u)
            }

            function S(e) {
                return r.TVLocalStorage.getItem(e) === h || r.TVLocalStorage.getItem(e) === b
            }

            function T() {
                return e = p, _.get(e) === h || _.get(e) === b;
                var e
            }

            function x() {
                I(h)
            }

            function A() {
                I(m)
            }

            function V() {
                I(b)
            }

            function I(e) {
                _.set(p, e, 3653, "/", d)
            }

            function L() {
                return _.get(p) === m
            }

            function P(e, t) {
                y[e] = t, _.set((0, s.isProd)() ? f : w, JSON.stringify(y), 3653, "/", d), o.emit(l, e, t)
            }

            function z(e) {
                return y[e]
            }

            function F() {
                return r.TVLocalStorage.removeItem(v)
            }! function() {
                const e = _.get((0, s.isProd)() ? f : w),
                    t = r.TVLocalStorage.getItem(v),
                    n = r.TVLocalStorage.getItem(f);
                if (e) {
                    t && n && (F(), r.TVLocalStorage.removeItem(f)), S(u) && k();
                    try {
                        const t = JSON.parse(e);
                        y[a.Analytics] = (null == t ? void 0 : t[a.Analytics]) || !1, y[a.Advertising] = (null == t ? void 0 : t[a.Advertising]) || !1
                    } catch (e) {}
                } else if (S(u) && (P(a.Analytics, !0), P(a.Advertising, !0), x(), k()), t && n) {
                    const e = JSON.parse(n);
                    I(t), P(a.Analytics, null == e ? void 0 : e[a.Analytics]), P(a.Advertising, null == e ? void 0 : e[a.Advertising]), F(), r.TVLocalStorage.removeItem(f)
                }
            }()
        },
        66974: (e, t, n) => {
            n.r(t), n.d(t, {
                environment: () => i,
                getEnvironmentByHost: () => o,
                isDebug: () => _,
                isLocal: () => r,
                isProd: () => s
            });
            const a = new Set(["battle", "staging", "test", "local"]);

            function o(e) {
                return -1 !== ["i18n.tradingview.com", "partial.tradingview.com", "www.tradingview.com", "wwwcn.tradingview.com"].indexOf(e) || -1 !== ["d33t3vvu2t2yu5.cloudfront.net", "dwq4do82y8xi7.cloudfront.net", "s.tradingview.com", "s3.tradingview.com"].indexOf(e) || e.match(/^[a-z]{2}\.tradingview\.com/) || e.match(/prod-[^.]+.tradingview.com/) ? "battle" : e.includes("tradingview.com") || e.includes("staging") ? "staging" : "local"
            }

            function i() {
                const e = self.environment;
                return function(e) {
                    a.has(e) || console.warn("Invalid environment " + e)
                }(e), e
            }

            function r() {
                return "local" === i()
            }

            function s() {
                return "battle" === i()
            }

            function _() {
                return !s()
            }
        },
        125226: (e, t, n) => {
            var a = n(49437).TVLocalStorage,
                o = n(942634).Delegate,
                i = n(855385);
            n(638456);
            var r = new o;
            TradingView.FeatureToggle = {
                force_prefix: "forcefeaturetoggle.",
                onChanged: new o,
                enableFeature: function(e) {
                    a.setItem(this.force_prefix + e, "true"), r.fire(e)
                },
                disableFeature: function(e) {
                    a.setItem(this.force_prefix + e, "false"), r.fire(e)
                },
                resetFeature: function(e) {
                    a.removeItem(this.force_prefix + e), r.fire(e)
                },
                onFeaturesStateChanged: function() {
                    return r
                }
            }, TradingView.isFeatureEnabled = function(e) {
                var t = "featuretoggle_seed";

                function o(e) {
                    try {
                        var n = i(e + function() {
                            if (window.user && window.user.id) return window.user.id;
                            var e = a.getItem(t);
                            return null !== e || (e = Math.floor(1e6 * Math.random()), a.setItem(t, e)), e
                        }());
                        return new DataView(n).getUint32(0, !0) / 4294967296
                    } catch (e) {
                        return .5
                    }
                }

                function s(t) {
                    return !("local" !== window.environment || ! function(e) {
                        var t = ["address_validation_enabled", "skip_navigation_on_chart", "tick_intervals", "broker_TRADESTATION", "broker_TRADOVATE_dev", "black_friday_mainpage", "black_friday_popup", "datawindow", "trading-fast-renew-oauth-token", "switching_year_to_month_disabled", "default_year_billing_cycle_switcher", "marketing-analytics", "visible_address_fields_by_default", "slow-support-warning", "hide-trading-floating-toolbar", "details_disable_bid_ask", "vat_disabled", "disable_recaptcha_on_signup", "braintree-gopro-in-order-dialog", "braintree-apple-pay", "braintree-google-pay", "braintree-apple-pay-trial", "braintree-google-pay-trial", "braintree-3ds-enabled", "order_presets", "trial_increased_monthly_discounts", "checkout-tvcoins", "checkout-3ds", "checkout-subscriptions", "razorpay-card-tvcoins", "razorpay-card-subscriptions", "razorpay-upi-tvcoins", "razorpay-upi-subscriptions", "dlocal-payments", "hide_gopro_popup_upgrade_button", "tradestation_use_sync_mapper", "broker_id_session", "modular_broker_use_sync_mapper", "oanda-european-accounts-warning", "mobile_show_bottom_panel", "disable_save_settings", "ignore_mobile_apps_distinguish_pro_full_name", "desktop_version_notification_enabled", "favorites-in-broker-dropdown", "hide_ecomonic_events", "mobile_trading_web", "mobile_trading_ios", "mobile_trading_android", "hide_real_brokers_on_mobile", "disable_tradestation_country_block", "enable_trading_server_logger", "hide_ranges_label_colors", "disable_user_specific_encryption", "minds_widget_enabled", "self-replacing-advanced-chart-widget", "disable-calendar-advanced-chart-widget", "disable-lse-data-screener-heatmap-widgets", "symphony_notification_badges", "paper_competition_banner", "paper_competition_started_dialog", "paper_subaccount_custom_currency", "disable_pushstream_connections_for_anonymous_users", "use_staging_verifier", "account_verifier_maintenance", "ibkr_use_new_init_session_api", "tradestation_account_data_streaming", "enable_eventsource_pushstream_transport", "enable_eventsource_pushstream_mobile", "performance_test_mode", "ftx_request_server_logger", "ibkr_request_server_logger", "disallow_concurrent_sessions", "check_ibkr_side_maintenance", "tradestation_request_server_logger", "trading_request_server_logger", "hide_tweet_drawingtool", "hide_anchored_note", "editor_new_save", "no_buy_hold_backtesting", "editor_new_save_only", "backtesting_report", "enable_new_custom_public_chats", "bottom_panel_track_events", "ibkr_ws_account_summary", "continuous_front_contract_trading", "vertex-tax-included", "enable_traded_context_linking", "order_context_validation_in_instant_mode", "show_data_problems_in_help_center", "chart_storage_hibernation_delay_60min", "chart_storage_hibernation_delay_10min", "chart_storage_hibernation_delay_5min", "force_disable_jsx_menu_items_rendering", "hide_dom", "enable_sign_in_popup_with_evercookie", "start_replay_right_after_point_selection", "switching_raf_toast", "new_order_size_calculator", "order_type_specific_settings_saving", "hide_position_trade_value", "paper_force_connect_pushstream", "use_broker_logos_from_single_source", "alerts-on-watchlists", "alerts-start-christmas", "alerts-use-http-caching", "alerts-remove-offline-pop-ups", "alerts-remove-clear-alerts-button", "forexcom_session_v2", "fxcm_server_logger", "minds_comments_enable_for_free_users", "fxcm_trailing_stop_bracket", "mock_tweet_data_for_tests", "replay_result_sharing", "ibkr_ws_server_logger", "options_strategy_analyzer_tab", "options_details_widget", "options_overlay", "options_product_page", "options_exchange_nse", "options_exchange_cme", "options_exchange_cbot", "options_exchange_comex", "options_exchange_nymex", "options_exchange_bse", "options_exchange_opra", "ibkr_subscribe_to_order_updates_first", "rest_logout_on_429", "amp_oauth_authorization", "blueline_oauth_authorization", "dorman_oauth_authorization", "cqg_oauth_authorization", "ironbeam_oauth_authorization", "optimus_oauth_authorization", "stonex_oauth_authorization", "tickmill_oauth_authorization", "ibkr_ws_account_ledger", "force_max_allowed_pulling_intervals", "fxcm_password_authorization_type", "change_password_suggestion_popup", "ibkr_disable_ws_connect_timeout", "oanda_rest_api", "launch-oanda-country-group-1", "launch-oanda-country-group-2", "launch-oanda-country-group-3", "news_enable_streaming", "news_screener_page_client", "news_enable_streaming_hibernation", "news_streaming_hibernation_delay_60min", "news_streaming_hibernation_delay_10min", "news_streaming_hibernation_delay_5min", "replay_trading_brackets", "cqg-realtime-bandwidth-limit", "cityindex_spreadbetting", "paper_use_new_auth", "stack_trace_clickable", "oauth2_code_flow_provider_server_logger", "turn_off_ai", "enable_binanceapis_base_url", "unsibscribe_competition_for_participants", "enable_first_touch_is_selection", "paper_delay_trading", "static_dom", "binance_disable_live_account_verification", "enable_forced_email_confirmation", "ylg_oauth_authorization", "show_replay_trading_panel", "order_ticket_resizable_drawer_on", "enable_toast_notifications_groupable", "enable_order_moving_by_price_line", "replay_trading_on_study", "enable_anchor_for_traded_objects", "snowplow_3", "renew_token_preemption_30", "renew_token_preemption_60", "renew_token_preemption_120", "do_not_open_ot_from_plus_button", "rest_use_async_mapper", "mockbroker_server_logging", "oanda_rest_server_logging"],
                            n = "[A-Z]+[a-zA-Z0-9_]+",
                            a = new RegExp(`broker_${n}_dev`, "g"),
                            o = new RegExp(`hide_${n}_on_ios`, "g"),
                            i = new RegExp(`hide_${n}_on_android`, "g"),
                            r = new RegExp(`hide_${n}_on_mobile_web`, "g");
                        return -1 === t.indexOf(e) && -1 === e.indexOf("-maintenance") && !1 === a.test(e) && !1 === o.test(e) && !1 === i.test(e) && !1 === r.test(e)
                    }(t)) || (!e[t] || -1 !== e[t]) && (!!("true" === a.getItem(TradingView.FeatureToggle.force_prefix + t) || window.is_authenticated && "undefined" != typeof user && user.settings && "true" === user.settings[TradingView.FeatureToggle.force_prefix + t]) || !("false" === a.getItem(TradingView.FeatureToggle.force_prefix + t) || window.is_authenticated && "undefined" != typeof user && user.settings && "false" === user.settings[TradingView.FeatureToggle.force_prefix + t]) && (!!e[t] && (1 === e[t] || o(t) <= e[t])))
                }
                return TradingView.onWidget() || Promise.all([n.e(1867), n.e(34604)]).then(n.bind(n, 501867)).then((t => {
                    t.pushStreamMultiplexer.on("featuretoggle", (function(t) {
                        var n = s(t.name);
                        e[t.name] = t.state, n !== s(t.name) && r.fire(t.name)
                    }))
                })), s
            }(window.featureToggleState || {}), t.FeatureToggle = TradingView.FeatureToggle, t.isFeatureEnabled = TradingView.isFeatureEnabled, t.onFeaturesStateChanged = TradingView.FeatureToggle.onFeaturesStateChanged.bind(TradingView.FeatureToggle)
        },
        49437: (e, t, n) => {
            const {
                getLogger: a
            } = n(338619), o = a("TVLocalStorage");
            var i = function() {
                try {
                    this.isAvailable = !0, this.localStorage = window.localStorage, this.localStorage.setItem("tvlocalstorage.available", "true")
                } catch (e) {
                    delete this.isAvailable, delete this.localStorage
                }
                this._updateLength();
                try {
                    this._report()
                } catch (e) {}
            };
            i.prototype._report = function() {
                if (this.isAvailable) {
                    const e = 10,
                        t = [];
                    for (let e = 0; e < this.localStorage.length; e++) {
                        const n = this.key(e);
                        t.push({
                            key: n,
                            length: String(this.getItem(n)).length
                        })
                    }
                    t.sort(((e, t) => t.length - e.length));
                    const n = t.slice(0, e);
                    t.sort(((e, t) => t.key.length - e.key.length));
                    const a = t.slice(0, e);
                    o.logNormal(`Total amount of keys in Local Storage: ${this.length}`), o.logNormal(`Top ${e} keys with longest values: ${JSON.stringify(n)}`), o.logNormal(`Top ${e} longest key names: ${JSON.stringify(a)}`);
                    try {
                        navigator.storage.estimate().then((e => {
                            o.logNormal(`Storage estimate: ${JSON.stringify(e)}`)
                        }))
                    } catch (e) {}
                }
            }, i.prototype.length = 0, i.prototype.isAvailable = !1, i.prototype.localStorage = {
                "tvlocalstorage.available": "false"
            }, i.prototype._updateLength = function() {
                if (this.isAvailable) this.length = this.localStorage.length;
                else {
                    var e, t = 0;
                    for (e in this.localStorage) this.localStorage.hasOwnProperty(e) && t++;
                    this.length = t
                }
            }, i.prototype.key = function(e) {
                return this.isAvailable ? this.localStorage.key(e) : Object.keys(this.localStorage)[e]
            }, i.prototype.getItem = function(e) {
                return this.isAvailable ? this.localStorage.getItem(e) : void 0 === this.localStorage[e] ? null : this.localStorage[e]
            }, i.prototype.setItem = function(e, t) {
                this.isAvailable ? this.localStorage.setItem(e, t) : this.localStorage[e] = t, this._updateLength()
            }, i.prototype.removeItem = function(e) {
                this.isAvailable ? this.localStorage.removeItem(e) : delete this.localStorage[e], this._updateLength()
            }, i.prototype.clear = function() {
                this.isAvailable ? this.localStorage.clear() : this.localStorage = {}, this._updateLength()
            }, window.TVLocalStorage = new i, e.exports.TVLocalStorage = window.TVLocalStorage
        },
        955273: (e, t, n) => {
            function a() {
                let e, t;
                return {
                    promise: new Promise(((n, a) => {
                        e = n, t = a
                    })),
                    reject: t,
                    resolve: e
                }
            }
            n.d(t, {
                createDeferredPromise: () => a
            })
        }
    }
]);