(self.webpackChunktradingview = self.webpackChunktradingview || []).push([
    [30128], {
        756218: (e, t, s) => {
            e.exports = [{
                name: s(777754).t(null, void 0, s(695271)),
                value: "",
                search_type: "undefined"
            }, {
                name: s(777754).t(null, void 0, s(426294)),
                value: "stocks",
                search_type: "stocks"
            }, {
                name: s(777754).t(null, void 0, s(301992)),
                value: "funds",
                search_type: "funds"
            }, {
                name: s(777754).t(null, void 0, s(468631)),
                value: "futures",
                search_type: "futures"
            }, {
                name: s(777754).t(null, void 0, s(324241)),
                value: "forex",
                search_type: "forex"
            }, {
                name: s(777754).t(null, void 0, s(494695)),
                value: "cfd",
                search_type: "cfd"
            }, {
                name: s(777754).t(null, void 0, s(612760)),
                value: "bitcoin,crypto",
                search_type: "crypto"
            }, {
                name: s(777754).t(null, void 0, s(433468)),
                value: "index",
                search_type: "index"
            }, {
                name: s(777754).t(null, void 0, s(290368)),
                value: "bond",
                search_type: "bond"
            }, {
                name: s(777754).t(null, void 0, s(337556)),
                value: "economic",
                search_type: "economic"
            }]
        },
        799402: (e, t, s) => {
            "use strict";
            s.d(t, {
                AuthToken: () => c
            });
            var n = s(707957),
                o = s.n(n),
                r = s(201089),
                i = s(120780);
            const a = (0, r.getLogger)("ChartApi.AuthToken", {
                color: "#173"
            });
            class c {
                constructor() {
                    this.invalidated = new(o()), this._tid = 0, window.loginStateChange || (window.loginStateChange = new(o())), window.loginStateChange.subscribe(this, (e => {
                        e || (this._set(window.user.auth_token), this.invalidated.fire())
                    })), this._set(window.user.auth_token)
                }
                get(e) {
                    return window.is_authenticated ? !e && performance.now() < this._cache.monoValidThru && Date.now() < this._cache.wallValidThru ? (a.logInfo(`Using cached token ${this._cache.token}`), Promise.resolve(this._cache.token)) : this._fetch(Boolean(e), 0).then((e => {
                        if (!window.is_authenticated) throw new Error("User logged out while the request was in flight");
                        return this._set(e), e
                    })).catch((e => (a.logError(`Error fetching new token: ${e&&e.message}`), ""))) : Promise.resolve("")
                }
                reset() {
                    this._set(void 0), this.invalidated.fire()
                }
                _set(e) {
                    if (window.is_authenticated && void 0 !== e) {
                        const t = function(e) {
                            if ("" === e) return 144e5;
                            try {
                                const t = JSON.parse(atob(e.split(".")[1].replace(/-/g, "+").replace(/_/g, "/"))),
                                    s = 1e3 * (t.exp - t.iat);
                                if (!isFinite(s)) throw new Error("invalid expiration");
                                return Math.max(s - 3e5, 3e5)
                            } catch (t) {
                                return a.logError(`${e} is invalid: ${t.message}`), 144e5
                            }
                        }(e);
                        this._cache = {
                            token: e,
                            monoValidThru: performance.now() + t,
                            wallValidThru: Date.now() + t
                        }, clearTimeout(this._tid), this._tid = setTimeout((() => this.reset()), t), a.logInfo(`Cached for ${t} ms: ${e}`)
                    } else this._cache = {
                        token: "",
                        monoValidThru: -1 / 0,
                        wallValidThru: -1 / 0
                    }, clearTimeout(this._tid), a.logInfo("Cache dropped")
                }
                _fetch(e, t) {
                    return a.logNormal(`Fetching a new token, grabSession=${e}`), (0, i.fetch)("/quote_token/", {
                        method: "POST",
                        headers: {
                            "Content-Type": "application/x-www-form-urlencoded"
                        },
                        body: e ? "grabSession=true" : ""
                    }).then((e => {
                        if (!e.ok) throw new Error(`Response status is not ok: ${e.status}`);
                        return e.json().then(String)
                    }), (s => {
                        if (t >= 3) throw s;
                        return a.logWarn("Request failed, will retry"),
                            function(e) {
                                return new Promise((t => setTimeout(t, 1e3 * e)))
                            }(t).then((() => this._fetch(e, t + 1)))
                    }))
                }
            }
        },
        448203: (e, t, s) => {
            "use strict";
            s.r(t), s.d(t, {
                TVChartApiBase: () => S
            });
            var n = s(12481),
                o = s(650151),
                r = s(778016),
                i = s(125226),
                a = s(6826),
                c = s.n(a);
            class d {
                constructor(e) {
                    this._cache = e
                }
                async getValue(e) {
                    const t = await this._cache.match(e);
                    if (!t) return null;
                    return "application/json" === (0, o.ensureNotNull)(t.headers.get("Content-Type")) ? t.json() : t.text()
                }
                async setValue(e, t) {
                    return "string" == typeof t ? this._cache.put(e, new Response(t, {
                        headers: {
                            "content-type": "text/plain"
                        }
                    })) : this._cache.put(e, new Response(JSON.stringify(t), {
                        headers: {
                            "content-type": "application/json"
                        }
                    }))
                }
            }
            class u {
                constructor() {
                    this._data = new Map
                }
                async getValue(e) {
                    var t;
                    return null !== (t = this._data.get(e)) && void 0 !== t ? t : null
                }
                async setValue(e, t) {
                    this._data.set(e, t)
                }
            }
            var l = s(678515),
                h = s(201089),
                _ = s(175203),
                m = s(833813);

            function p(e) {
                return e.index = e.i, e.value = e.v, delete e.i, delete e.v, e
            }

            function f(e) {
                for (const t of Object.keys(e)) e[t].t && (e[t].turnaround = e[t].t), e[t].s && !e[t].series && (e[t].series = e[t].s.map(p)), e[t].st && !e[t].series && (e[t].series = e[t].st.map(p))
            }
            class g {
                set_broker(e) {
                    return [e]
                }
                set_data_quality() {
                    return ["low"]
                }
                quote_create_session(e) {
                    return [e]
                }
                quote_delete_session(e) {
                    return [e]
                }
                quote_set_fields(e, t) {
                    return [e].concat(t)
                }
                quote_add_symbols(e, t) {
                    return [e].concat(t)
                }
                quote_remove_symbols(e, t) {
                    return [e].concat(t)
                }
                quote_fast_symbols(e, t) {
                    return [e].concat(t)
                }
                quote_hibernate_all(e) {
                    return [e]
                }
                depth_create_session(e, t, s) {
                    return [e, t, s]
                }
                depth_delete_session(e) {
                    return [e]
                }
                depth_set_symbol(e, t) {
                    return [e, t]
                }
                depth_clear_symbol(e) {
                    return [e]
                }
                depth_set_scale(e, t) {
                    return [e, t]
                }
                chart_create_session(e, t) {
                    return [e, t ? "disable_statistics" : ""]
                }
                chart_delete_session(e) {
                    return [e]
                }
                set_auth_token(e) {
                    return [e]
                }
                set_locale(e, t) {
                    return [e, t]
                }
                switch_timezone(e, t) {
                    return [e, t]
                }
                resolve_symbol(e, t, s) {
                    return [e, t, s]
                }
                create_series(e, t, s, n, o, r, i) {
                    return [e, t, s = s || "", n, o, r, i]
                }
                remove_series(e, t) {
                    return [e, t]
                }
                modify_series(e, t, s, n, o, r) {
                    return [e, t, s = s || "", n, o, r]
                }
                request_more_data(e, t, s) {
                    return [e, t, s]
                }
                request_studies_metadata(e, t) {
                    return [e, t]
                }
                create_study(e, t, s, n, o, r) {
                    return [e, t, s = s || "", n, o].concat(r)
                }
                create_child_study(e, t, s, n, o, r) {
                    return this.create_study(e, t, s, n, o, r)
                }
                child_study_rebind(e, t, s, n, o, r) {
                    return [e, t, s = s || "", n, o].concat(r)
                }
                remove_study(e, t) {
                    return [e, t]
                }
                modify_study(e, t, s, n) {
                    return [e, t, s = s || ""].concat(n)
                }
                create_pointset(e, t, s, n, o, r) {
                    return [e, t, s = s || "", n, o].concat(r)
                }
                modify_pointset(e, t, s, n) {
                    return [e, t, s = s || ""].concat(n)
                }
                remove_pointset(e, t) {
                    return [e, t]
                }
                request_more_tickmarks(e, t, s) {
                    return [e, t, s]
                }
                get_first_bar_time(e, t, s) {
                    return [e, t, s]
                }
                replay_create_session(e) {
                    return [e]
                }
                replay_delete_session(e) {
                    return [e]
                }
                replay_reset(e, t, s) {
                    return [e, t, s]
                }
                replay_start(e, t, s) {
                    return [e, t, s]
                }
                replay_stop(e, t) {
                    return [e, t]
                }
                replay_step(e, t, s) {
                    return [e, t, s]
                }
                replay_add_series(e, t, s, n) {
                    return [e, t, s, n]
                }
                replay_remove_series(e, t, s, n) {
                    return [e, t, s, n]
                }
                replay_set_resolution(e, t, s) {
                    return [e, t, s]
                }
                convertTimescaleResponse(e) {
                    const t = e.marks.map((e => ({
                            span: e[0],
                            time: e[1],
                            index: e[2]
                        }))),
                        s = void 0 === e.index_diff ? [] : e.index_diff.map((e => ({
                            old: e[0],
                            new: e[1]
                        })));
                    return { ...e,
                        marks: t,
                        index_diff: s
                    }
                }
                getDataUpdateObjects(e) {
                    return this.getTimescaleObjects(e)
                }
                getTimescaleObjects(e) {
                    return e.params[0]
                }
                getTimescaleChangeset(e) {
                    return e.params[1]
                }
                prepareDataUpdateObjects(e, t, s) {
                    for (const n of Object.keys(t)) {
                        const o = t[n],
                            r = {
                                customId: n,
                                turnaround: o.turnaround,
                                plots: o.series ? o.series : o.plots
                            };
                        o.ns && (r.nonseries = o.ns), o.lbs && (r.lastBar = {
                            closeTime: o.lbs.bar_close_time
                        });
                        for (const e of r.plots)
                            for (let t = 0; t < e.value.length; ++t) 1e100 === e.value[t] && (e.value[t] = void 0);
                        s(e, n, {
                            method: "data_update",
                            params: r
                        })
                    }
                }
                unpack(e) {
                    const t = JSON.parse(e);
                    t.m && t.p && (t.method = t.m, t.params = t.p, t.time = t.t);
                    const s = t.params[1];
                    switch (t.method) {
                        case "qsd":
                            t.method = "quote_symbol_data", s.symbolname = s.n, s.status = s.s, s.values = s.v, s.values.change = s.v.ch, s.values.last_price = s.v.lp, s.values.change_percent = s.v.chp, delete s.n, delete s.s, delete s.v, delete s.values.ch, delete s.values.lp, delete s.values.chp;
                            break;
                        case "du":
                            t.method = "data_update", f(s);
                            break;
                        case "clear_data":
                            for (const e of Object.keys(s)) s[e].turnaround = s[e].t;
                            break;
                        case "timescale_update":
                            f(s)
                    }
                    return t
                }
                prepareEncodeMessage(e, t) {
                    return JSON.stringify({
                        m: e,
                        p: t
                    })
                }
                request_data_problems() {
                    return []
                }
            }
            var y = s(397150),
                w = s(61378);
            const b = (0, h.getLogger)("ChartApi.TrafficMeter", {
                    maxCount: 20,
                    color: "#268"
                }),
                v = (0, i.isFeatureEnabled)("multiple_SoS"),
                k = ["", "KB", "MB", "GB", "TB"];

            function C(e) {
                if (0 === e) return "0";
                const t = (0, l.toInt)(Math.floor(Math.log(e) / Math.log(1024)));
                return (e / Math.pow(1024, t)).toFixed(2) + k[t]
            }
            class S {
                constructor(e, t) {
                    this.sessionid = null, this._banInfo = new(c())(null), this._isAuthTokenLoaded = !1, this._authTokenDfd = null, this._serverTimeOffset = 0, this._serverTimeBasePoint = Date.now() - performance.now(), this._initCachePromise = async function(e) {
                        try {
                            const t = await caches.open(e);
                            return new d(t)
                        } catch (e) {
                            return new u
                        }
                    }("TVChartApi"), this._trafficStats = {
                        total: 0,
                        sinceConnect: 0,
                        lastChunk: 0
                    }, this._studyCounter = 0, this._childStudyCounter = 0, this._lowQualityEnabled = !1, this._brokerId = "", this._sendingQueuedRequestsCount = 0, this._modifyStudyMap = new Map, this._disconnectCount = 0, this._isConnected = !1, this._dataHandleModule = new g, this._notificationHandlers = {}, this._loadNewBars = !1, this._connectionsLimitReached = new(c())(!1), this._wsBackendConnection = e, this._chartApiLog = t, this._wsBackendConnection.onReconnect(this._bindSocketEvents.bind(this)), this._wsBackendConnection.setLogger(t, h.getLogHistory), this._wsBackendConnection.setTelemetry(_.telemetry), this._bindSocketEvents(), setInterval((() => {
                        b.logNormal("Last 30 seconds:" + C(this._trafficStats.lastChunk) + " Since last connect:" + C(this._trafficStats.sinceConnect) + " Total traffic:" + C(this._trafficStats.total)), this._trafficStats.lastChunk = 0
                    }), 3e4), this._connectionsLimitReached.subscribe((e => {
                        e && this.disconnect()
                    }))
                }
                connect(e) {
                    this._connectOnlyOptions = e, this._wsBackendConnection.isConnected() || this._wsBackendConnection.isConnecting() || this._wsBackendConnection.connect()
                }
                disconnect() {
                    this._wsBackendConnection.disconnect()
                }
                availablePriceSources() {
                    return Promise.resolve([])
                }
                connectionBanInfo() {
                    return this._banInfo.readonly()
                }
                connectionsLimitReached() {
                    return this._connectionsLimitReached.readonly()
                }
                serverTime() {
                    return Math.round(this._serverTimeBasePoint + performance.now())
                }
                serverTimeOffset() {
                    return this._serverTimeOffset
                }
                setLoadNew(e) {
                    this._loadNewBars = !!e
                }
                canCreateStudy(e) {
                    if (!(0, r.enabled)(m.ProductFeatures.STUDY_ON_STUDY)) return !1;
                    const t = (0, o.ensureNotNull)((0, r.getConfig)(m.ProductFeatures.STUDY_ON_STUDY));
                    return !0 === e ? this._childStudyCounter < t.child_limit : this._studyCounter < t.limit
                }
                createStudy(e, t, s, n, o, r, i, a) {
                    if (!this.canCreateStudy()) return (0, y.showTooManyStudiesNotice)(), !1;
                    this._notificationHandlers[e][t] = new w.HandlerInfo(i, t);
                    let c = !1;
                    return c = v ? this._sendRequest("create_study", [e, t, s, n, o, r]) : this._sendRequest(!0 === a ? "create_child_study" : "create_study", [e, t, s, n, o, r]), !1 !== c && (this._studyCounter++, a && this._childStudyCounter++, c)
                }
                rebindStudy(e, t, s, n, o, r, i, a) {
                    if (1 === a) {
                        if (!this.canCreateStudy(!0)) return !1;
                        this._childStudyCounter++
                    } else 2 === a && this._childStudyCounter--;
                    return s = s || "", this._notificationHandlers[e][t] = new w.HandlerInfo(i, t), this._sendRequest("child_study_rebind", [e, t, s, n, o, r]), !0
                }
                modifyStudy(e, t, s, r, i, a) {
                    var c, d;
                    a = null != a ? a : 0, this._childStudyCounter += a;
                    const u = e + t;
                    if (this._notificationHandlers[e][t] = new w.HandlerInfo(i, t), this._modifyStudyMap.has(u)) {
                        return null === (c = (0, o.ensureDefined)(this._modifyStudyMap.get(u))(e, t, s, r)) || void 0 === c || c
                    } {
                        const o = (0, n.default)(((e, t, s, n) => this._sendRequest("modify_study", [e, t, s, n])), 500, {
                            maxWait: 550
                        });
                        return this._modifyStudyMap.set(u, o), null === (d = o(e, t, s, r)) || void 0 === d || d
                    }
                }
                unpack(e) {
                    return this._dataHandleModule.unpack(e)
                }
                sendRequest(e, t) {
                    return this._sendRequest(e, t)
                }
                _init() {
                    this._notificationHandlers = {}, this._studyCounter = 0, this._childStudyCounter = 0, this._modifyStudyMap = new Map
                }
                _onMessage(e) {
                    this._calcTrafficStats(e);
                    const t = this.unpack(e);
                    "protocol_switched" !== t.method ? "protocol_error" !== t.method ? this._dispatchNotification(t, e) : this._processProtocolError(t) : this._chartApiLog.logError("Unexpected protocol changing request, try skipping. Requested protocol:" + t.params[0])
                }
                _processProtocolError(e) {
                    const t = e.params[0];
                    this._chartApiLog.logError(`Protocol error. Reason=${t}.`), "banned" !== t && "banned by user_id" !== t && "banned by ip" !== t || (this._banInfo.setValue({
                        reason: t
                    }), this.disconnect()), this._connectionsLimitReached.setValue("user connections limit reached" === t)
                }
                _bindSocketEvents() {
                    this.connectDfd = new Promise(((e, t) => {
                        this._wsBackendConnection.on("connect", (() => {
                            this._onConnect(), e()
                        })), this._wsBackendConnection.on("message", this._onMessage.bind(this)), this._wsBackendConnection.on("disconnect", (() => {
                            this._authTokenDfd && (this._authTokenDfd = null), this._onDataProblemsPromiseErrback && this._onDataProblemsPromiseErrback(), this._isConnected = !1, this._studyCounter = 0, this._notifySessions({
                                method: "disconnected",
                                params: []
                            }), this._banInfo.value() || delete this._metadataCallback, this._disconnectCount = (this._disconnectCount || 0) + 1, this._wsBackendConnection.isConnected() && (this._telemetryDisconnectTimeout = setTimeout((() => {
                                _.telemetry.sendChartReport("disconnect")
                            }), 5e3), this._wsBackendConnection.isMaxReconnects() && (this._notifySessions({
                                method: "reconnect_bailout",
                                params: []
                            }), t(), _.telemetry.sendChartReport("reconnect_bailout")))
                        }))
                    }))
                }
                _calcTrafficStats(e) {
                    const t = e.length;
                    this._trafficStats.total += t, this._trafficStats.sinceConnect += t, this._trafficStats.lastChunk += t
                }
            }
        },
        84461: (e, t, s) => {
            "use strict";
            var n = s(389137).declareClassAsPureInterface;

            function o() {}
            TradingView.WEB_SOCKET_WAS_CONNECTED = !1, o.prototype.defaultResolutions = function() {}, o.prototype.availableCurrencies = function() {}, o.prototype.availableUnits = function() {}, o.prototype.supportedSymbolsTypes = function() {}, o.prototype.symbolsGrouping = function() {}, o.prototype.quoteCreateSession = function(e) {}, o.prototype.quoteDeleteSession = function(e) {}, o.prototype.quoteSetFields = function(e, t) {}, o.prototype.quoteAddSymbols = function(e, t) {}, o.prototype.quoteRemoveSymbols = function(e, t) {}, o.prototype.quoteFastSymbols = function(e, t) {}, o.prototype.depthCreateSession = function(e, t, s) {}, o.prototype.depthDeleteSession = function(e) {}, o.prototype.depthSetSymbol = function(e, t) {}, o.prototype.depthClearSymbol = function(e) {}, o.prototype.depthSetScale = function(e, t) {}, o.prototype.chartCreateSession = function(e, t) {}, o.prototype.chartDeleteSession = function(e) {}, o.prototype.createSession = function(e, t) {}, o.prototype.removeSession = function(e) {}, o.prototype.connected = function() {}, o.prototype.connect = function() {}, o.prototype.disconnect = function() {}, o.prototype.switchTimezone = function(e, t) {}, o.prototype.resolveSymbol = function(e, t, s, n) {}, o.prototype.createSeries = function(e, t, s, n, o, r, i, a) {}, o.prototype.removeSeries = function(e, t, s) {}, o.prototype.modifySeries = function(e, t, s, n, o, r, i) {}, o.prototype.requestMoreData = function(e, t, s, n) {}, o.prototype.requestMetadata = function(e, t, s) {}, o.prototype.canCreateStudy = function(e, t) {}, o.prototype.createStudy = function(e, t, s, n, o, r, i) {}, o.prototype.getStudyCounter = function() {}, o.prototype.rebindStudy = function(e, t, s, n, o, r, i, a) {}, o.prototype.removeStudy = function(e, t, s) {}, o.prototype.modifyStudy = function(e, t, s, n, o) {}, o.prototype.createPointset = function(e, t, s, n, o, r, i) {}, o.prototype.modifyPointset = function(e, t, s, n, o) {}, o.prototype.removePointset = function(e, t, s) {}, o.prototype.requestMoreTickmarks = function(e, t, s, n) {}, o.prototype.requestFirstBarTime = function(e, t, s, n) {}, o.prototype._invokeHandler = function(e, t) {}, o.prototype._sendRequest = function(e, t) {}, o.prototype._onMessage = function(e) {}, o.prototype._dispatchNotification = function(e) {}, o.prototype._invokeNotificationHandler = function(e, t, s) {}, o.prototype._notifySessions = function(e) {}, o.prototype.unpack = function(e) {}, o.prototype.searchSymbols = function(e, t, s, n, o, r, i, a, c, d) {}, o.prototype.serverTimeOffset = function() {}, o.prototype.getMarks = function(e, t, s, n, o) {}, o.prototype.getTimescaleMarks = function(e, t, s, n, o) {}, n(o, "ChartApiInterface"), e.exports.ChartApiInterface = o
        },
        730128: (e, t, s) => {
            "use strict";
            e = s.nmd(e);
            var n = !1,
                o = !1,
                r = !1,
                i = s(822914).default,
                a = s(84461).ChartApiInterface;
            const {
                HandlerInfo: c
            } = s(61378);
            var d = s(799402).AuthToken,
                u = s(66974),
                l = s(175203).telemetry,
                h = s(244842),
                _ = s(846540),
                m = s(389137).requireFullInterfaceImplementation,
                p = s(125226).isFeatureEnabled,
                f = s(314802).isOnMobileAppPage,
                g = s(230648).ResponseMethods,
                y = s(201089),
                w = s(638456).onWidget,
                b = y.getLogger("ChartApi.Core", {
                    color: "#706"
                }),
                v = y.getLogger("ChartApi.ChartSession", {
                    color: "#706"
                }),
                k = y.getLogger("ChartApi.ChartSession", {
                    highRate: !0,
                    maxCount: 100,
                    color: "#706"
                }),
                C = y.getLogger("ChartApi.ChartSession", {
                    maxCount: 0,
                    color: "#706"
                }),
                S = y.getLogger("ChartApi.ChartSession", {
                    maxCount: 50,
                    color: "#706"
                }),
                q = y.getLogger("ChartApi.QuoteSession", {
                    maxCount: 50,
                    color: "#660"
                }),
                T = y.getLogger("ChartApi.QuoteSession", {
                    highRate: !0,
                    maxCount: 10,
                    color: "#660"
                }),
                R = s(756218),
                M = s(928691).errorToString,
                D = s(120780).fetch,
                N = s(389743),
                P = s(315347).TIMEFRAMETYPE,
                {
                    getLogoUrlResolver: x,
                    LogoSize: E
                } = s(849204);
            const {
                TVChartApiBase: A
            } = s(448203);
            var H = p("broker_id_session"),
                I = !f("any"),
                O = p("tick_intervals") && !w(),
                B = null;

            function L() {
                if (null === B) {
                    const e = document.querySelector('link[rel~="conversions-config"]'),
                        t = new URL(e.href);
                    B = D(t.toString(), {
                        method: "GET"
                    }).then((function(e) {
                        if (!e.ok) throw new Error("Response status is not success");
                        return e.json()
                    })).then((e => {
                        const t = x();
                        return e.currencies.forEach((e => {
                            void 0 !== e.logoid && (e.logoUrl = t.getSymbolLogoUrl(e.logoid, E.Medium))
                        })), e
                    }))
                }
                return B
            }

            function U(e) {
                if (null === e) return "";
                if (e.type === P.PeriodBack) {
                    var t = e.value;
                    return "YTD" !== t && "D" === t.slice(-1) && (t = t.slice(0, -1)), t
                }
                return "r," + e.from + ":" + e.to
            }
            class V extends A {
                constructor(e) {
                    super(e, b), this._notificationHandlers = {}, this._sessions = {}, this._pendingMessagesQueue = []
                }
                defaultResolutions() {
                    var e = ["1", "3", "5", "15", "30", "45", "60", "120", "180", "240", "1D", "1W", "1M", "3M", "6M", "12M", "1R", "10R", "100R", "1000R"];
                    if (!h.enabled("widget")) {
                        var t = ["1S", "5S", "10S", "15S", "30S"];
                        return O && (t = ["1T", "10T", "100T", "1000T"].concat(t)), t.concat(e)
                    }
                    return e
                }
                availableCurrencies() {
                    return L().then((e => e.currencies))
                }
                availableUnits() {
                    return L().then((e => {
                        const t = {};
                        for (const s of e.units) t[s.type] || (t[s.type] = []), t[s.type].push(s);
                        return t
                    }))
                }
                supportedSymbolsTypes() {
                    return "bovespa" === TradingView.widgetCustomer ? R.filter((function(e) {
                        return -1 !== ["", "stock", "futures", "index"].indexOf(e.value)
                    })) : "cme" === TradingView.widgetCustomer ? R.filter((function(e) {
                        return e.value !== _.types.QUANDL
                    })) : R
                }
                symbolsGrouping() {
                    return {
                        futures: /^(.+?)([12]!|\w\d{4})?$/
                    }
                }
                enableLowQualityMode() {
                    this._lowQualityEnabled = !0, this._sendLowQualityModeIfEnabled()
                }
                _sendLowQualityModeIfEnabled() {
                    this._lowQualityEnabled && this.connected() && this._sendRequest("set_data_quality", [])
                }
                quoteCreateSession(e) {
                    return this._sendRequest("quote_create_session", [e])
                }
                quoteDeleteSession(e) {
                    return this._sendRequest("quote_delete_session", [e])
                }
                quoteSetFields(e, t) {
                    return this._sendRequest("quote_set_fields", [e, t])
                }
                quoteAddSymbols(e, t) {
                    return this._sendRequest("quote_add_symbols", [e, t])
                }
                quoteRemoveSymbols(e, t) {
                    return this._sendRequest("quote_remove_symbols", [e, t])
                }
                quoteFastSymbols(e, t) {
                    return this._sendRequest("quote_fast_symbols", [e, t])
                }
                quoteHibernateAll(e) {
                    return this._sendRequest("quote_hibernate_all", [e])
                }
                depthCreateSession(e, t, s) {
                    return this._sendRequest("depth_create_session", [e, t, s])
                }
                depthDeleteSession(e) {
                    return this._sendRequest("depth_delete_session", [e])
                }
                depthSetSymbol(e, t) {
                    return this._sendRequest("depth_set_symbol", [e, t])
                }
                depthClearSymbol(e) {
                    return this._sendRequest("depth_clear_symbol", [e])
                }
                depthSetScale(e, t) {
                    return this._sendRequest("depth_set_scale", [e, t])
                }
                chartCreateSession(e, t) {
                    return this._sendRequest("chart_create_session", [e, t])
                }
                chartDeleteSession(e) {
                    return this._sendRequest("chart_delete_session", [e])
                }
                createSession(e, t) {
                    this._sessions[e] = t, this._notificationHandlers[e] = {}, this.connected() && this._isAuthTokenLoaded && t.onMessage({
                        method: "connected",
                        params: []
                    })
                }
                removeSession(e) {
                    delete this._sessions[e], delete this._notificationHandlers[e]
                }
                connected() {
                    return !!this._isConnected
                }
                setBroker(e) {
                    return e === this._brokerId || (this._brokerId = e, this._sendBrokerIdToSession(this._brokerId))
                }
                disconnectReason(e) {
                    return 1e3 === e ? "Normal closure, meaning that the purpose for which the connection was established has been fulfilled." : 1001 === e ? 'An endpoint is "going away", such as a server going down or a browser having navigated away from a page.' : 1002 === e ? "An endpoint is terminating the connection due to a protocol error" : 1003 === e ? "An endpoint is terminating the connection because it has received a type of data it cannot accept (e.g., an endpoint that understands only text data MAY send this if it receives a binary message)." : 1004 === e ? "Reserved. The specific meaning might be defined in the future." : 1005 === e ? "No status code was actually present." : 1006 === e ? "The connection was closed abnormally, e.g., without sending or receiving a Close control frame" : 1007 === e ? "An endpoint is terminating the connection because it has received data within a message that was not consistent with the type of the message (e.g., non-UTF-8 [http://tools.ietf.org/html/rfc3629] data within a text message)." : 1008 === e ? 'An endpoint is terminating the connection because it has received a message that "violates its policy". This reason is given either if there is no other sutible reason, or if there is a need to hide specific details about the policy.' : 1009 === e ? "An endpoint is terminating the connection because it has received a message that is too big for it to process." : 1010 === e ? "An endpoint (client) is terminating the connection because it has expected the server to negotiate one or more extension, but the server didn't return them in the response message of the WebSocket handshake. <br /> Specifically, the extensions that are needed are: " + event.reason : 1011 === e ? "A server is terminating the connection because it encountered an unexpected condition that prevented it from fulfilling the request." : 1015 === e ? "The connection was closed due to a failure to perform a TLS handshake (e.g., the server certificate can't be verified)." : "Unknown reason"
                }
                _sendBrokerIdToSession(e) {
                    return !H || this._sendRequest("set_broker", [e])
                }
                _getAuthTokenDfd(e) {
                    if (this._loadNewBars) return Promise.resolve("load_new_token");
                    if (h.enabled("widget") || -1 !== window.location.search.indexOf("widget_token") || -1 !== window.location.hash.indexOf("widget_token")) {
                        var t = window.TradingView && window.TradingView.widgetCustomer || "";
                        return Promise.resolve(N[t] || "widget_user_token")
                    }
                    if (!window.is_authenticated) return Promise.resolve("unauthorized_user_token");
                    var s = this;
                    if (!s._authTokenManager) {
                        var n = new d;
                        s._authTokenManager = n, s._authTokenManager.invalidated.subscribe(null, (function(e) {
                            s._authTokenManager.get().then((function(e) {
                                e && s.connected() && s._sendRequest("set_auth_token", [e])
                            }))
                        }))
                    }
                    return s._authTokenManager.get(e)
                }
                _onConnect() {
                    if (!this.connected()) {
                        this._trafficStats.sinceConnect = 0, this._isAuthTokenLoaded = !1;
                        var e = this;
                        if (this._connectOnlyOptions = this._connectOnlyOptions || {}, this._authTokenDfd = this._getAuthTokenDfd(this._connectOnlyOptions.tokenGrabSession), this._connectOnlyOptions = {}, this.sessionid = this._wsBackendConnection.getSessionId(), this.sessionid && !this._isConnected) {
                            this._pendingMessagesQueue = [], this._sendingQueuedRequestsCount = 0, this._isConnected = !0, this._banInfo.setValue(null), this._connectionsLimitReached.setValue(!1);
                            var t = JSON.parse(this.sessionid);
                            this._sendLowQualityModeIfEnabled(), this._metadataServerHash = t.studies_metadata_hash || null;
                            var s = this._wsBackendConnection.getConnectionEstablished();
                            try {
                                var n = (performance.now() - s) / 1e3,
                                    r = t.timestamp + n;
                                this._serverTimeOffset = r - Date.now() / 1e3, this._serverTimeBasePoint = Math.round(1e3 * t.timestamp - s)
                            } catch (e) {
                                this._serverTimeOffset = 0, this._serverTimeBasePoint = Date.now() - performance.now()
                            }
                            if (b.logInfo("Time shift with server:" + Math.round(this._serverTimeOffset) + " seconds."), this._authTokenDfd) {
                                this._sendingQueuedRequestsCount += 1, b.logInfo("Wait for auth token before send messages");
                                var i = this._authTokenDfd;
                                i.then((function(t) {
                                    if (null !== e._authTokenDfd && e._authTokenDfd === i) {
                                        if (b.logNormal("Auth token request is finished, token: " + Boolean(t)), e._authTokenDfd = null, t) {
                                            const s = [{
                                                method: "set_auth_token",
                                                args: [t]
                                            }];
                                            if (I) {
                                                const e = window.initData && window.initData.currentLocaleInfo;
                                                e && s.push({
                                                    method: "set_locale",
                                                    args: [e.iso, e.flag.toUpperCase()]
                                                })
                                            }
                                            e._pendingMessagesQueue.unshift(...s)
                                        }
                                        e._onSendingQueueRequestFinished(), e._isAuthTokenLoaded = !0, e._notifySessions({
                                            method: "connected",
                                            params: []
                                        })
                                    } else b.logNormal("Comes auth token after requesting new token or after socket disconnected")
                                })).catch((function(e) {
                                    b.logNormal(M(e))
                                }))
                            } else b.logWarn("Deferred auth token object is not valid"), this._isAuthTokenLoaded = !0;
                            "" !== this._brokerId && this._sendBrokerIdToSession(this._brokerId);
                            var a = this._wsBackendConnection.getConnectionStart();
                            TradingView.WEB_SOCKET_WAS_CONNECTED = !0, l.setSessionInfo(this.sessionid), l.sendChartReport("websocket_connected"), l.sendChartReport("websocket_connection_time_frame", {
                                    value: s - a
                                }), l.sendChartReport("reconnect_count_frame", {
                                    value: this._wsBackendConnection.getReconnectCount()
                                }), l.sendChartReport("redirect_count_frame", {
                                    value: this._wsBackendConnection.getRedirectCount()
                                }), o || (o = !0, l.sendChartReport("before_websocket_connection_time_frame", {
                                    value: a
                                })),
                                this._wsBackendConnection.resetCounters(), clearTimeout(this._telemetryDisconnectTimeout)
                        }
                    }
                }
                switchTimezone(e, t) {
                    return this._sendRequest("switch_timezone", [e, t])
                }
                resolveSymbol(e, t, s, n) {
                    return l.timeCounters.series["resolve_symbol_" + e] = window.performance.now(), this._notificationHandlers[e][t] = new c(n, t), this._sendRequest("resolve_symbol", [e, t, s])
                }
                createSeries(e, t, s, n, o, r, i, a) {
                    this._notificationHandlers[e][t] = new c(a, t), l.timeCounters.series.marks.push("create_series_" + e);
                    const d = U(i);
                    return this._sendRequest("create_series", [e, t, s, n, o, r, d])
                }
                removeSeries(e, t) {
                    return delete this._notificationHandlers[e][t], this._sendRequest("remove_series", [e, t])
                }
                modifySeries(e, t, s, n, o, r, i) {
                    this._notificationHandlers[e][t] = new c(i, t);
                    const a = U(r);
                    return this._sendRequest("modify_series", [e, t, s, n, o, a])
                }
                requestMoreData(e, t, s, n) {
                    if ("number" != typeof s) throw new Error("unsupported request to load more data, bars=" + s);
                    return this._notificationHandlers[e][t] = new c(n, t), this._sendRequest("request_more_data", [e, t, s])
                }
                requestMetadata(e, t, s) {
                    var n = this;
                    if (n._metadataCallback) n._metadataCallback.handlers.push(s);
                    else {
                        var o = h.enabled("widget"),
                            r = o ? "studies_metadata_widget" : "studies_metadata",
                            a = "pro_hash",
                            c = [];
                        n._metadataCallback = e => {
                            n._metadataCallback = null, this._initCachePromise.then((t => {
                                t.setValue(r, i(e)).then((function() {
                                    if (b.logNormal("Updated studies_metadata cache"), !o) {
                                        var e = pro.hash();
                                        t.setValue(a, i(e)).then((function() {
                                            b.logNormal("Updated pro_hash cache")
                                        })).catch((function(e) {
                                            b.logError("Cannot update pro_hash cache, reason: " + e)
                                        }))
                                    }
                                })).catch((function(e) {
                                    b.logError("Cannot update studies_metadata cache, reason: " + e)
                                }));
                                for (var s = 0; s < c.length; s++) {
                                    (0, c[s])(i(e))
                                }
                            }))
                        }, n._metadataCallback.handlers = c, n._metadataCallback.handlers.push(s), b.logNormal("Requesting pro hash"), this._initCachePromise.then((s => {
                            s.getValue(a).then((function(a) {
                                var c = pro.hash();
                                null !== a && a === c || o ? (b.logNormal("Pro hash has not changed, requesting from local"), s.getValue(r).then((function(s) {
                                    var o = null !== s && s.params[1].hash || null;
                                    if (null === o || null === n._metadataServerHash || n._metadataServerHash !== o) return b.logNormal("Metadata hash has changed (cached:'" + o + "', server:'" + n._metadataServerHash + "'')"), void n._requestMetadataFromServer(e, t, n._metadataCallback);
                                    if (pro.hasPackage("tv-volumebyprice") && void 0 === s.params[1].metainfo.find((function(e) {
                                            return e.id.includes("@tv-volumebyprice")
                                        }))) return b.logNormal("De-sync detected! pro.hash contains VbPR studies, but data from cache doesn't and pro.hash isn't changed, pro.hash=" + c), void n._requestMetadataFromServer(e, t, n._metadataCallback);
                                    if (b.logNormal("Using studies_metadata from browser cache"), n._metadataCallback) {
                                        for (var r = 0; r < n._metadataCallback.handlers.length; r++) {
                                            (0, n._metadataCallback.handlers[r])(i(s))
                                        }
                                        n._metadataCallback = null
                                    } else b.logWarn("Cached metadata received, but callback expired")
                                })).catch((function(s) {
                                    b.logError("Cannot get studies_metadata, reason: " + s), n._requestMetadataFromServer(e, t, n._metadataCallback)
                                }))) : (b.logNormal("Pro hash has changed (cached: '" + a + "', current:'" + c + "')"),
                                    n._requestMetadataFromServer(e, t, n._metadataCallback))
                            })).catch((function(s) {
                                b.logError("Cannot get studies_metadata, reason: " + s), n._requestMetadataFromServer(e, t, n._metadataCallback)
                            }))
                        }))
                    }
                }
                authTokenManager() {
                    return this._authTokenManager
                }
                _requestMetadataFromServer(e, t, s) {
                    return !!s && (b.logNormal("Request studies_metadata from server"), this._notificationHandlers[e][t] = new c(s, t), this._sendRequest("request_studies_metadata", [e, t]))
                }
                removeStudy(e, t, s) {
                    const n = e + t;
                    delete this._notificationHandlers[e][t], this._modifyStudyMap.has(n) && this._modifyStudyMap.get(n).flush();
                    var o = this._sendRequest("remove_study", [e, t]);
                    return !1 !== o && (this._modifyStudyMap.delete(n), this._studyCounter--, s && this._childStudyCounter--, o)
                }
                createPointset(e, t, s, n, o, r, i) {
                    return this._notificationHandlers[e][t] = new c(i, t), this._sendRequest("create_pointset", [e, t, s, n, o, r])
                }
                modifyPointset(e, t, s, n, o) {
                    return this._notificationHandlers[e][t] = new c(o, t), this._sendRequest("modify_pointset", [e, t, s, n])
                }
                removePointset(e, t, s) {
                    return this._notificationHandlers[e][t] = new c(s, t), this._sendRequest("remove_pointset", [e, t])
                }
                requestMoreTickmarks(e, t, s, n) {
                    return this._notificationHandlers[e][t] = new c(n, t), this._sendRequest("request_more_tickmarks", [e, t, s])
                }
                requestFirstBarTime(e, t, s, n) {
                    return this._notificationHandlers[e][t] = new c(n, t), this._sendRequest("get_first_bar_time", [e, t, s])
                }
                redirectCount() {
                    return this._wsBackendConnection.getRedirectCount()
                }
                disconnectCount() {
                    return this._disconnectCount || 0
                }
                _invokeHandler(e, t) {
                    e && e(t)
                }
                _flushPendingMessages() {
                    b.logInfo("Flush pending messages. Count=" + this._pendingMessagesQueue.length), this._pendingMessagesQueue.forEach((function(e) {
                        this._sendRequest(e.method, e.args)
                    }), this), this._pendingMessagesQueue = []
                }
                _sendRequest(e, t) {
                    if (0 !== this._sendingQueuedRequestsCount) return this._pendingMessagesQueue.push({
                        method: e,
                        args: t
                    }), !0;
                    var s = this._dataHandleModule[e].apply(this._dataHandleModule, t),
                        n = {
                            m: e,
                            p: s
                        },
                        o = JSON.stringify(n);
                    if (s.length > 0) {
                        var r = s[0];
                        r.startsWith("qs_") ? q.logNormal("send: " + o) : r.startsWith("cs_") && v.logNormal("send: " + o)
                    } else b.logNormal("send: " + o);
                    var i = this._dataHandleModule.prepareEncodeMessage(e, s);
                    return this._wsBackendConnection.send(i)
                }
                _onSendingQueueRequestFinished() {
                    this._sendingQueuedRequestsCount -= 1, b.logInfo("Sending queue request finished. Remaining pending requests=" + this._sendingQueuedRequestsCount), this._sendingQueuedRequestsCount < 0 && b.logError("Invalid queue state=" + this._sendingQueuedRequestsCount), 0 === this._sendingQueuedRequestsCount && this._flushPendingMessages()
                }
                _convertTimescaleResponse(e) {
                    return this._dataHandleModule.convertTimescaleResponse(e)
                }
                _appendDuration(e, t) {
                    return e ? t + ", duration: " + Math.round(Date.now() / 1e3 - e + this._serverTimeOffset) + "s" : t
                }
                _dispatchNotification(e, t) {
                    if ("request_data_problems" === e.method && this._onDataProblemsPromiseCb) this._onDataProblemsPromiseCb(e.params);
                    else {
                        var s = e.params.shift();
                        if (this._notificationHandlers[s]) {
                            var o = e.params[0];
                            if ("symbol_resolved" === e.method) {
                                var i = e.params[1].full_name;
                                l.sendChartReport("symbol_resolved", {
                                    count: 1,
                                    additional: {
                                        symbol: i
                                    }
                                });
                                var a = l.timeCounters.series["resolve_symbol_" + s];
                                "number" == typeof a && l.sendChartReport("symbol_resolve_time_frame", {
                                    value: window.performance.now() - a,
                                    additional: {
                                        symbol: i
                                    }
                                })
                            }
                            if (["series_error", "series_completed"].includes(e.method) && l.timeCounters.series.marks.length > 0) {
                                var c = "create_series_" + s,
                                    d = l.timeCounters.series.marks.indexOf(c);
                                d >= 0 && l.timeCounters.series.marks.splice(d, 1)
                            }
                            r || "series_error" !== e.method || (r = !0);
                            var u = this._wsBackendConnection.getConnectionEstablished();
                            if (null !== u && "series_completed" === e.method && (r || (r = !0, l.sendChartReport("first_series_full_time_frame", {
                                    value: window.performance.now() - u
                                }), l.timeCounters.series.marks = []), n || (n = !0, l.sendChartReport("page_full_load_time_frame", {
                                    value: window.performance.now()
                                }))), s.startsWith("cs_")) {
                                var h = "recv: " + t;
                                "data_update" === e.method ? (h = y.isHighRateEnabled() ? h : h.slice(0, 500), k.logNormal(this._appendDuration(e.time, h))) : "study_loading" === e.method ? C.logNormal(this._appendDuration(e.time, h)) : "tickmark_update" === e.method ? S.logNormal(this._appendDuration(e.time, h)) : v.logNormal(this._appendDuration(e.time, h))
                            }
                            if (s.startsWith("qs_"))("quote_symbol_data" === e.method ? T.logNormal : q.logNormal)("recv: " + t);
                            switch (e.method) {
                                case "timescale_update":
                                    var _ = this._dataHandleModule.getTimescaleObjects(e),
                                        m = this._dataHandleModule.getTimescaleChangeset(e);
                                    (p = this._convertTimescaleResponse(m)).clear = 0 === p.changes.length && 0 === p.index_diff.length && 0 === p.marks.length, this._sessions[s].onMessage({
                                        method: "timescale_update",
                                        params: p
                                    }), this._dataHandleModule.prepareDataUpdateObjects(s, _, function(e, t, s) {
                                        this._invokeNotificationHandler(e, t, s)
                                    }.bind(this));
                                    break;
                                case "tickmark_update":
                                    var p;
                                    (p = this._convertTimescaleResponse(e.params[0])).changes = [], this._sessions[s].onMessage({
                                        method: "timescale_update",
                                        params: p
                                    });
                                    break;
                                case "data_update":
                                    _ = this._dataHandleModule.getDataUpdateObjects(e);
                                    this._dataHandleModule.prepareDataUpdateObjects(s, _, function(e, t, s) {
                                        this._invokeNotificationHandler(e, t, s)
                                    }.bind(this));
                                    break;
                                case "index_update":
                                    for (var f in e.params[0]) {
                                        var w = {
                                            method: "index_update",
                                            params: e.params[0][f]
                                        };
                                        this._invokeNotificationHandler(s, f, w)
                                    }
                                    break;
                                case "critical_error":
                                    b.logInfo(new Date + " critical_error session:" + this.sessionid + " reason:" + e.params[0]), l.sendChartReport("critical_error"), this._sessions[s].onMessage({
                                        method: "critical_error",
                                        params: e.params
                                    });
                                    break;
                                case "timescale_completed":
                                case "quote_symbol_data":
                                case "quote_list_fields":
                                case "quote_completed":
                                case "depth_symbol_error":
                                case "depth_symbol_success":
                                case "dd":
                                case "dpu":
                                case "depth_bar_last_value":
                                    this._sessions[s].onMessage({
                                        method: e.method,
                                        params: e.params
                                    });
                                    break;
                                case "clear_data":
                                    for (var R in e.params[0]) this._invokeNotificationHandler(s, R, {
                                        method: "clear_data",
                                        params: e.params[0][R]
                                    });
                                    break;
                                case g.point:
                                case g.resolutions:
                                case g.endOfData:
                                case g.instanceId:
                                case g.error:
                                case g.ok:
                                    this._sessions[s].onMessage(e);
                                    break;
                                case "series_timeframe":
                                    e.params[4] = function(e) {
                                            if (null == e) return null;
                                            var t = /r,(\d+):(\d+)/.exec(e);
                                            return null !== t ? {
                                                from: Number(t[1]),
                                                to: Number(t[2]),
                                                type: P.TimeRange
                                            } : {
                                                value: e,
                                                type: P.PeriodBack
                                            }
                                        }(e.params[4]),
                                        this._invokeNotificationHandler(s, o, e);
                                    break;
                                case "symbol_resolved":
                                    ! function(e) {
                                        if (void 0 === e.corrections) {
                                            var t = e.subsessions.find((function(t) {
                                                return t.id === e.subsession_id
                                            }));
                                            void 0 !== t && (e.corrections = t["session-correction"])
                                        }
                                    }(e.params[1]), this._invokeNotificationHandler(s, o, e);
                                    break;
                                default:
                                    this._invokeNotificationHandler(s, o, e)
                            }
                        }
                    }
                }
                _isStrategy(e, t) {
                    var s = this._notificationHandlers[e][t];
                    return s && s.handler && s.handler.isTVScriptStrategy
                }
                _invokeNotificationHandler(e, t, s) {
                    if (void 0 !== t) {
                        var n = this._notificationHandlers[e][t];
                        void 0 !== n && this._invokeHandler(n.handler, s)
                    }
                }
                _notifySessions(e) {
                    for (var t in this._sessions) {
                        if (!this._sessions.hasOwnProperty(t)) return;
                        var s = this._sessions[t];
                        "function" == typeof s.onMessage && s.onMessage(e)
                    }
                }
                searchSymbols(e, t, s, n, o, r, i, a, c, d) {
                    var h = this;
                    this._symbolSearchRequest && this._symbolSearchRequest.abort();
                    var m = location.protocol + "//" + window.SS_HOST;
                    u.isProd() ? m += "/symbol_search/" : m += "/local_search/", window.SS_URL && (m = window.SS_URL);
                    var p = {
                        text: e,
                        exchange: t,
                        type: s,
                        hl: o,
                        lang: n
                    };
                    window.SS_DOMAIN_PARAMETER && (p.domain = window.SS_DOMAIN_PARAMETER), r && (p.strict = 1), s === _.types.QUANDL && (m = "https://quandlapi.tradingview.com/api/v3/datasets.json", p = {
                        query: e,
                        database_code: t
                    }), i && (p.broker = i, a && (p.tradable = !0), c && (p.unhide = c));
                    var f = Object.keys(p).map((function(e) {
                            return encodeURIComponent(e) + "=" + encodeURIComponent(p[e])
                        })).join("&"),
                        g = new XMLHttpRequest;
                    g.open("GET", m + "?" + f);
                    var y = window.performance.now();

                    function w() {
                        l.sendChartReport("symbol_search_time_frame", {
                            value: window.performance.now() - y
                        })
                    }

                    function b() {
                        w(), l.sendChartReport("symbol_search_http_error"), h._symbolSearchRequest = null
                    }
                    g.addEventListener("load", (function() {
                        var e = JSON.parse(g.responseText);
                        d && d(e), w(), l.sendChartReport("symbol_search_http_status", {
                            value: g.status
                        }), h._symbolSearchRequest = null
                    })), g.addEventListener("error", b), g.addEventListener("timeout", b), this._symbolSearchRequest = g, g.send()
                }
                getMarks(e, t, s, n, o) {
                    throw Error("This method is not implemented")
                }
                getTimescaleMarks(e, t, s, n, o) {
                    throw Error("This method is not implemented")
                }
                getPingInfo() {
                    return this._wsBackendConnection.getPingInfo()
                }
                requestDataProblems() {
                    return this._requestDataProblemsPromise || (this._requestDataProblemsPromise = this.connectDfd.then((() => new Promise(((e, t) => {
                        this._onDataProblemsPromiseErrback = t, this._sendRequest("request_data_problems", []) ? this._onDataProblemsPromiseCb = e : t()
                    })))).finally((() => {
                        this._requestDataProblemsPromise = null
                    }))), this._requestDataProblemsPromise
                }
                getStudyCounter() {
                    return this._studyCounter
                }
            }
            m(V, "TVChartApi", a, "ChartApiInterface"), window.ChartApiInstance = new V(window.WSBackendConnection), e && e.exports && (e.exports = V)
        },
        61378: (e, t, s) => {
            "use strict";
            s.r(t), s.d(t, {
                HandlerInfo: () => n
            });
            class n {
                constructor(e, t) {
                    this.handler = e, this.customId = t
                }
            }
        },
        230648: (e, t, s) => {
            "use strict";
            var n, o;
            s.d(t, {
                    ResponseMethods: () => n
                }),
                function(e) {
                    e.error = "replay_error", e.point = "replay_point", e.ok = "replay_ok", e.resolutions = "replay_resolutions", e.endOfData = "replay_data_end", e.instanceId = "replay_instance_id"
                }(n || (n = {})),
                function(e) {
                    e.tooSmallDelay = "too_small_delay",
                        e.alreadyInAutoplay = "already_in_autoplay", e.nothingToStop = "nothing_to_stop", e.pointTooDeep = "point_too_deep", e.alreadyInSession = "already_in_session", e.thereIsNoSuchSeries = "no_series", e.notAllowedInAutoplay = "not_allow_in_autoplay", e.invalidResolution = "invalid_resolution"
                }(o || (o = {}))
        },
        928691: (e, t, s) => {
            "use strict";

            function n(e) {
                if (void 0 === e) return "";
                if (e instanceof Error) {
                    let t = e.message;
                    return e.stack && (t += " " + e.stack), t
                }
                return "string" == typeof e ? e.toString() : JSON.stringify(e)
            }
            s.d(t, {
                errorToString: () => n
            })
        },
        389743: e => {
            "use strict";
            e.exports = JSON.parse('{"adx":"widget_user_token-adx","adxD":"widget_user_token-adxD","agencialbmcombr":"widget_user_token-agencialbmcombr","ambito":"widget_user_token-ambito","artechecom":"widget_user_token-ArtecheD","atlcapital":"widget_user_token-atlcapital","bankirosru":"widget_user_token-bankirosru","bbvach":"widget_user_token-bbvach","belugagroupru":"widget_user_token-belugagroupru","bovespa":"widget_user_token-bmfbovespacombr","cincodias":"widget_user_token-cincodias","ceocaD":"widget_user_token-ceocaD","ceocaRT":"widget_user_token-ceocaRT","copees":"widget_user_token-copees","dailyfx":"widget_user_token-dailyfx","easynvestcombr":"widget_user_token-easynvestcombr","elconfidencial":"widget_user_token-elconfidencial","elespanolcom":"widget_user_token-elespanolcom","elobreroes":"widget_user_token-elobreroes","elnacionalD":"widget_user_token-ElNacionalD","elpaisfinanciero":"widget_user_token-elpaisfinanciero","euqueroinvestir":"widget_user_token-euqueroinvestircom","eurex":"widget_user_token-eurex","eurofins":"widget_user_token-eurofins","epe":"widget_user_token-epe","europapresses":"widget_user_token-europapresses","finanzasD":"widget_user_token-FinanzasD","forbescombr":"widget_user_token-forbescombr","genialinvestimentos":"widget_user_token-genialinvestimentos","healthitalia":"widget_user_token-healthitalia","hegnarno":"widget_user_token-hegnarno","hipotecariocomar":"widget_user_token-hipotecariocomar","investopedia":"widget_user_token-investopedia","ivsgroup":"widget_user_token-ivsgroup","lainformacioncom":"widget_user_token-lainformacioncom","marcopolocombr":"widget_user_token-marcopolocombr","mercadofinancierocom":"widget_user_token-mercadofinancierocom","moex":"widget_user_token-moex","moneytimescombr":"widget_user_token-moneytimescombr","negocios":"widget_user_token-negocios","NGX":"widget_user_token-NGX","NoticiasagricolaD":"widget_user_token-noticiasagricolaD","okdiario":"widget_user_token-okdiario","pse":"widget_user_token-pse","poder360":"widget_user_token-poder360","pseD":"widget_user_token-pseD","riyadhcapitalD":"widget_user_token-riyadhcapitalD","riyadhcapitalRT":"widget_user_token-riyadhcapitalRT","qecomqa":"widget_user_token-qecomqa","samolet":"widget_user_token-samolet","seudinheiro":"widget_user_token-seudinheiro","softwareag":"widget_user_token-softwareag","sogeclair":"widget_user_token-sogeclair","sgcompanyit":"widget_user_token-sgcompanyit","sharejunction":"widget_user_token-sharejunction","smartlab-custom":"widget_user_token-smartlab","smartlab":"widget_user_token-smartlab","spacemoneycombr":"widget_user_token-spacemoneycombr","tradersclubbrasil":"widget_user_token-tradersclubbrasil","tradersclubbrasilD":"widget_user_token-tradersclubbrasilD","tradingview":"widget_user_token-tradingview","twitter":"widget_user_token-twitter","vocesaabrilcombr":"widget_user_token-vocesaabrilcombr","xCrtyJksp":"widget_user_token-xCrtyJksp","xpicombr":"widget_user_token-xpicombr"}')
        }
    }
]);