(self.webpackChunktradingview = self.webpackChunktradingview || []).push([
    [57565, 29874, 83912], {
        654767: e => {
            e.exports = {
                wrap: "wrap-Un5MtNUE",
                list: "list-Un5MtNUE",
                item: "item-Un5MtNUE",
                selected: "selected-Un5MtNUE",
                bluishItem: "bluishItem-Un5MtNUE",
                noPadding: "noPadding-Un5MtNUE"
            }
        },
        463611: e => {
            e.exports = {}
        },
        305912: e => {
            e.exports = {}
        },
        135334: e => {
            e.exports = {}
        },
        570354: e => {
            e.exports = {}
        },
        724088: e => {
            e.exports = {}
        },
        700959: e => {
            e.exports = {}
        },
        614062: e => {
            e.exports = {}
        },
        997748: e => {
            e.exports = {}
        },
        280356: e => {
            e.exports = {}
        },
        959349: e => {
            e.exports = {}
        },
        478504: e => {
            e.exports = {}
        },
        527910: e => {
            e.exports = {}
        },
        206155: e => {
            e.exports = {}
        },
        673208: e => {
            e.exports = {}
        },
        89225: e => {
            e.exports = {}
        },
        728277: e => {
            e.exports = {}
        },
        281786: e => {
            e.exports = {}
        },
        649779: e => {
            e.exports = {}
        },
        13698: e => {
            e.exports = {}
        },
        276833: e => {
            e.exports = {
                badge: "badge-PlSmolIm",
                free: "free-PlSmolIm",
                content: "content-PlSmolIm",
                "size-xsmall": "size-xsmall-PlSmolIm",
                "size-small": "size-small-PlSmolIm",
                "size-medium": "size-medium-PlSmolIm",
                "size-large": "size-large-PlSmolIm",
                "size-xlarge": "size-xlarge-PlSmolIm"
            }
        },
        78217: e => {
            e.exports = {
                "tv-circle-logo-pair": "tv-circle-logo-pair-ocURKVwI",
                "tv-circle-logo-pair--xxxxsmall": "tv-circle-logo-pair--xxxxsmall-ocURKVwI",
                "tv-circle-logo-pair--xxxsmall": "tv-circle-logo-pair--xxxsmall-ocURKVwI",
                "tv-circle-logo-pair--xxsmall": "tv-circle-logo-pair--xxsmall-ocURKVwI",
                "tv-circle-logo-pair--xsmall": "tv-circle-logo-pair--xsmall-ocURKVwI",
                "tv-circle-logo-pair--small": "tv-circle-logo-pair--small-ocURKVwI",
                "tv-circle-logo-pair--medium": "tv-circle-logo-pair--medium-ocURKVwI",
                "tv-circle-logo-pair--large": "tv-circle-logo-pair--large-ocURKVwI",
                "tv-circle-logo-pair--xlarge": "tv-circle-logo-pair--xlarge-ocURKVwI",
                "tv-circle-logo-pair--xxlarge": "tv-circle-logo-pair--xxlarge-ocURKVwI",
                "tv-circle-logo-pair--xxxlarge": "tv-circle-logo-pair--xxxlarge-ocURKVwI",
                "tv-circle-logo-pair__logo": "tv-circle-logo-pair__logo-ocURKVwI",
                "tv-circle-logo-pair__logo--xxxxsmall": "tv-circle-logo-pair__logo--xxxxsmall-ocURKVwI",
                "tv-circle-logo-pair__logo--xxxsmall": "tv-circle-logo-pair__logo--xxxsmall-ocURKVwI",
                "tv-circle-logo-pair__logo--xxsmall": "tv-circle-logo-pair__logo--xxsmall-ocURKVwI",
                "tv-circle-logo-pair__logo--xsmall": "tv-circle-logo-pair__logo--xsmall-ocURKVwI",
                "tv-circle-logo-pair__logo--small": "tv-circle-logo-pair__logo--small-ocURKVwI",
                "tv-circle-logo-pair__logo--medium": "tv-circle-logo-pair__logo--medium-ocURKVwI",
                "tv-circle-logo-pair__logo--large": "tv-circle-logo-pair__logo--large-ocURKVwI",
                "tv-circle-logo-pair__logo--xlarge": "tv-circle-logo-pair__logo--xlarge-ocURKVwI",
                "tv-circle-logo-pair__logo--xxlarge": "tv-circle-logo-pair__logo--xxlarge-ocURKVwI",
                "tv-circle-logo-pair__logo--xxxlarge": "tv-circle-logo-pair__logo--xxxlarge-ocURKVwI",
                "tv-circle-logo-pair__logo-empty": "tv-circle-logo-pair__logo-empty-ocURKVwI"
            }
        },
        453917: e => {
            e.exports = {
                "css-value-copyright-transition-params": ".6s 0s cubic-bezier(.4, .01, .22, 1)",
                "css-value-copyright-transition-params-half-time": ".3s 0s cubic-bezier(.4, .01, .22, 1)",
                label: "label-dzbd7lyV",
                logoWrap: "logoWrap-dzbd7lyV",
                expandedWithTransition: "expandedWithTransition-dzbd7lyV",
                expandedByClick: "expandedByClick-dzbd7lyV",
                start: "start-dzbd7lyV",
                end: "end-dzbd7lyV",
                snap: "snap-dzbd7lyV",
                top: "top-dzbd7lyV",
                bottom: "bottom-dzbd7lyV",
                large: "large-dzbd7lyV",
                expanded: "expanded-dzbd7lyV",
                label__link: "label__link-dzbd7lyV"
            }
        },
        489928: e => {
            e.exports = {}
        },
        37882: e => {
            e.exports = {}
        },
        183972: e => {
            e.exports = {
                span: "span-KB961WD0"
            }
        },
        838280: e => {
            e.exports = {
                controls: "controls-MI_3SFEq",
                autosizeLabel: "autosizeLabel-MI_3SFEq",
                crossSign: "crossSign-MI_3SFEq",
                autosizeControl: "autosizeControl-MI_3SFEq",
                widthControl: "widthControl-MI_3SFEq",
                heightControl: "heightControl-MI_3SFEq"
            }
        },
        383867: e => {
            e.exports = {}
        },
        907356: e => {
            e.exports = {}
        },
        693558: e => {
            e.exports = {}
        },
        410058: e => {
            e.exports = {}
        },
        421294: e => {
            e.exports = {}
        },
        596789: e => {
            e.exports = {
                wrapper: "wrapper-PQ5O_1M7",
                touch: "touch-PQ5O_1M7"
            }
        },
        492575: e => {
            e.exports = {}
        },
        896108: e => {
            e.exports = {
                "tablet-normal-breakpoint": "(max-width: 768px)",
                "small-height-breakpoint": "(max-height: 360px)",
                "tablet-small-breakpoint": "(max-width: 430px)"
            }
        },
        810465: e => {
            e.exports = {
                wrapper: "wrapper-NLkHhUu3",
                newLabel: "newLabel-NLkHhUu3"
            }
        },
        269006: e => {
            e.exports = {
                container: "container-HTBJo9ba",
                top: "top-HTBJo9ba"
            }
        },
        29493: e => {
            e.exports = {
                list: "list-HGwPo2aR",
                item: "item-HGwPo2aR"
            }
        },
        547964: e => {
            e.exports = {
                elementWrap: "elementWrap-LeZwGiB6",
                itemsWrap: "itemsWrap-LeZwGiB6",
                item: "item-LeZwGiB6",
                active: "active-LeZwGiB6",
                itemContent: "itemContent-LeZwGiB6",
                dropdownItem: "dropdownItem-LeZwGiB6",
                dropdownIcon: "dropdownIcon-LeZwGiB6",
                dropdownListItem: "dropdownListItem-LeZwGiB6"
            }
        },
        54068: (e, t, o) => {
            "use strict";
            o.d(t, {
                LIST_COLORS: () => u,
                ListColor: () => i,
                changeDescription: () => C,
                createCrossTabSyncMiddleware: () => A,
                getCommands: () => I,
                getListByColor: () => E,
                getSymbolColor: () => D,
                getSymbolsByColor: () => $,
                getTimestamp: () => P,
                isListColor: () => p,
                markMany: () => f,
                reducer: () => M,
                remove: () => w,
                rename: () => S,
                renameSeparator: () => k,
                reset: () => b,
                setup: () => y,
                share: () => F,
                shiftCommand: () => x,
                updatePersistedState: () => T
            });
            var i, r = o(516388),
                n = o(438253),
                s = o(650151),
                l = o(199669),
                a = o(50991),
                c = o(340958),
                d = o(173777),
                h = o(559986);
            ! function(e) {
                e.Red = "red", e.Blue = "blue", e.Green = "green", e.Orange = "orange", e.Purple = "purple", e.Cyan = "cyan", e.Pink = "pink"
            }(i || (i = {}));
            const u = [i.Red, i.Blue, i.Green, i.Orange, i.Purple, i.Cyan, i.Pink];

            function p(e) {
                return new Set(u).has(e)
            }
            const _ = {
                lists: {
                    colors: [],
                    byColor: {},
                    bySymbol: {}
                },
                commands: [],
                timestamp: null
            };

            function g(e, t) {
                const {
                    lists: o
                } = e, i = o.byColor[t];
                i && 0 === i.symbols.length && (o.colors = o.colors.filter((e => e !== t)))
            }

            function m(e) {
                return (0, d.isSeparatorItem)(e)
            }
            const v = (0, r.createSlice)({
                    name: "marked-lists",
                    initialState: _,
                    reducers: {
                        setup: (e, t) => {
                            const {
                                lists: o,
                                timestamp: i
                            } = t.payload, r = {
                                lists: {
                                    colors: [],
                                    byColor: {},
                                    bySymbol: {}
                                },
                                commands: [],
                                timestamp: null
                            };
                            r.timestamp = i;
                            for (const e of function(e, t) {
                                    return [...e].sort(((e, o) => t.indexOf(e.color) - t.indexOf(o.color)))
                                }(o, u)) {
                                const t = e.symbols.filter((t => void 0 === r.lists.bySymbol[t] && (m(t) || (r.lists.bySymbol[t] = e.color), !0)));
                                r.lists.byColor[e.color] = {
                                    color: e.color,
                                    name: e.name,
                                    description: e.description,
                                    shared: e.shared,
                                    symbols: t,
                                    persistedState: e.persistedState
                                }, t.length > 0 && r.lists.colors.push(e.color)
                            }
                            return r
                        },
                        remove: (e, t) => {
                            const {
                                color: o,
                                symbols: i,
                                silent: r
                            } = t.payload, {
                                lists: l,
                                commands: a
                            } = e, d = l.byColor[o];
                            if (void 0 === d || 0 === d.symbols.length) return;
                            const h = new Set(i),
                                u = d.symbols.filter((e => !h.has(e)));
                            if (!(0, c.equalArrays)(u, d.symbols)) {
                                d.symbols = u;
                                for (const e of h) delete l.bySymbol[e];
                                r || a.push({
                                    type: "remove",
                                    color: o,
                                    symbols: [...h],
                                    prevLists: (0, s.ensureDefined)((0, n.original)(e)).lists
                                }), g(e, o)
                            }
                        },
                        markMany: (e, t) => {
                            const {
                                color: o,
                                before: i,
                                silent: r
                            } = t.payload, {
                                lists: l,
                                commands: a
                            } = e, {
                                unique: d,
                                exclusions: u
                            } = function(e, t) {
                                var o;
                                const {
                                    color: i,
                                    symbols: r,
                                    separators: n
                                } = t.payload, {
                                    lists: l
                                } = e, a = {}, c = new Set, d = e => m(e) ? ((0, s.assert)(null !== i), i) : l.bySymbol[e];
                                for (let e = 0; e < r.length; ++e) {
                                    const t = r[e];
                                    if (c.has(t) || m(t) && !n) continue;
                                    c.add(t);
                                    const i = d(t);
                                    void 0 !== i && (a[i] = null !== (o = a[i]) && void 0 !== o ? o : new Set).add(t)
                                }
                                return {
                                    exclusions: a,
                                    unique: c
                                }
                            }(e, t);
                            if (0 === d.size) return;
                            const p = function(e, t, o, i) {
                                const {
                                    color: r,
                                    before: n
                                } = t.payload, {
                                    lists: s
                                } = e;
                                let l;
                                if (null !== r && void 0 !== n && o.has(n)) {
                                    const e = s.byColor[r];
                                    if (void 0 !== e) {
                                        l = i;
                                        for (let t = e.symbols.indexOf(n); t >= 0; --t)
                                            if (!o.has(e.symbols[t])) {
                                                l = e.symbols[t];
                                                break
                                            }
                                    }
                                }
                                return l
                            }(e, t, d, h.LIST_START);
                            if (null !== o && void 0 !== u[o] && 1 === Object.keys(u).length) {
                                const t = l.byColor[o];
                                (0, s.assert)(void 0 !== t);
                                const _ = t.symbols.filter((e => !d.has(e))),
                                    v = (0, h.getTargetIndex)(_, i, p);
                                if (void 0 === v ? _.push(...d) : _.splice(v, 0, ...d), (0, c.equalArrays)(_, t.symbols)) return; {
                                    const i = u[o];
                                    (0, s.assert)(void 0 !== i), t.symbols = _;
                                    for (const e of i) delete l.bySymbol[e];
                                    for (const e of d) m(e) || (l.bySymbol[e] = o);
                                    return g(e, o), void(r || a.push({
                                        type: "replace",
                                        color: o,
                                        symbols: [...t.symbols],
                                        prevLists: (0, s.ensureDefined)((0, n.original)(e)).lists
                                    }))
                                }
                            }
                            for (const t in u) {
                                if (!u.hasOwnProperty(t)) continue;
                                const o = u[t];
                                (0, s.assert)(void 0 !== o);
                                const i = l.byColor[t];
                                (0, s.assert)(void 0 !== i), i.symbols = i.symbols.filter((e => !o.has(e) || (delete l.bySymbol[e], !1))), g(e, t)
                            }
                            if (null === o) return void(r || a.push({
                                type: "reset",
                                symbols: [...d],
                                prevLists: (0, s.ensureDefined)((0, n.original)(e)).lists
                            }));
                            const _ = l.byColor[o];
                            if (l.colors.includes(o)) {
                                (0, s.assert)(void 0 !== _);
                                const t = (0, h.getTargetIndex)(_.symbols, i, p);
                                void 0 === t ? (_.symbols.push(...d), r || (void 0 === u[o] ? a.push({
                                    type: "append",
                                    color: o,
                                    symbols: [...d],
                                    prevLists: (0, s.ensureDefined)((0, n.original)(e)).lists
                                }) : a.push({
                                    type: "replace",
                                    color: o,
                                    symbols: [..._.symbols],
                                    prevLists: (0, s.ensureDefined)((0, n.original)(e)).lists
                                }))) : (_.symbols.splice(t, 0, ...d), r || a.push({
                                    type: "replace",
                                    color: o,
                                    symbols: [..._.symbols],
                                    prevLists: (0, s.ensureDefined)((0, n.original)(e)).lists
                                }))
                            } else void 0 === _ ? l.byColor[o] = {
                                color: o,
                                symbols: [...d],
                                name: null,
                                description: null,
                                shared: !1,
                                persistedState: null
                            } : _.symbols = [...d], l.colors.push(o), r || a.push({
                                type: "append",
                                color: o,
                                symbols: [...d],
                                prevLists: (0, s.ensureDefined)((0, n.original)(e)).lists
                            });
                            for (const e of d) m(e) || (l.bySymbol[e] = o)
                        },
                        renameSeparator: (e, t) => {
                            const {
                                color: o,
                                separator: i,
                                name: r,
                                silent: l
                            } = t.payload;
                            if (i === r || !m(i) || !m(r)) return;
                            const a = e.lists.byColor[o];
                            (0, s.assert)(void 0 !== a);
                            const c = a.symbols.indexOf(i); - 1 !== c && -1 === a.symbols.indexOf(r) && (a.symbols.splice(c, 1, r), l || e.commands.push({
                                type: "rename-separator",
                                color: o,
                                separator: i,
                                name: r,
                                prevLists: (0, s.ensureDefined)((0, n.original)(e)).lists
                            }))
                        },
                        rename: (e, t) => {
                            const {
                                name: o,
                                color: i,
                                silent: r
                            } = t.payload, l = e.lists.byColor[i];
                            (0, s.assert)(void 0 !== l), l.name !== o && (l.name = o, r || e.commands.push({
                                type: "rename",
                                color: i,
                                name: o,
                                prevLists: (0, s.ensureDefined)((0, n.original)(e)).lists
                            }))
                        },
                        changeDescription: (e, t) => {
                            const {
                                color: o,
                                description: i,
                                silent: r
                            } = t.payload, l = e.lists.byColor[o];
                            (0, s.assert)(void 0 !== l), l.description !== i && (l.description = i, r || e.commands.push({
                                type: "change-description",
                                color: o,
                                description: i,
                                prevLists: (0, s.ensureDefined)((0, n.original)(e)).lists
                            }))
                        },
                        reset: (e, t) => {
                            const {
                                silent: o
                            } = t.payload, {
                                lists: i
                            } = e;
                            for (const e of u) {
                                const t = i.byColor[e];
                                void 0 !== t && (t.symbols = [])
                            }
                            i.colors = [], i.bySymbol = {}, o || e.commands.push({
                                type: "reset-all",
                                prevLists: (0, s.ensureDefined)((0, n.original)(e)).lists
                            })
                        },
                        share: (e, t) => {
                            const {
                                lists: o,
                                commands: i
                            } = e, {
                                shared: r,
                                color: l,
                                silent: a
                            } = t.payload, c = o.byColor[l];
                            void 0 !== c && c.shared !== r && (c.shared = r, a || i.push({
                                type: "share",
                                color: l,
                                shared: r,
                                prevLists: (0, s.ensureDefined)((0, n.original)(e)).lists
                            }))
                        },
                        updatePersistedState: (e, t) => {
                            const {
                                lists: o
                            } = e;
                            for (const e of u) {
                                const i = o.byColor[e],
                                    r = t.payload[e];
                                void 0 !== i && i.persistedState && r && (i.persistedState = { ...i.persistedState,
                                    ...r
                                })
                            }
                        },
                        shiftCommand: (e, t) => {
                            const {
                                count: o
                            } = t.payload;
                            e.commands.splice(0, o)
                        }
                    }
                }),
                {
                    markMany: f,
                    setup: y,
                    reset: b,
                    remove: w,
                    rename: S,
                    changeDescription: C,
                    renameSeparator: k,
                    shiftCommand: x,
                    share: F,
                    updatePersistedState: T
                } = v.actions,
                {
                    reducer: M
                } = v;

            function A(e, t, o = v) {
                return (0, l.createCrossTabSyncMiddleware)({
                    id: e,
                    channel: t,
                    event: "marked-list-cross-tab-sync",
                    filter: e => function(e, t) {
                        return t.actions.markMany.match(e) || t.actions.rename.match(e) || t.actions.changeDescription.match(e) || t.actions.remove.match(e) || t.actions.setup.match(e) || t.actions.renameSeparator.match(e) || t.actions.reset.match(e) || t.actions.share.match(e) || t.actions.updatePersistedState.match(e)
                    }(e, o)
                })
            }

            function D(e, t) {
                var o;
                return null !== (o = e.lists.bySymbol[a.qualified.cast(t)]) && void 0 !== o ? o : null
            }

            function E(e, t) {
                var o;
                return null !== (o = e.lists.byColor[t]) && void 0 !== o ? o : null
            }

            function $(e, t) {
                var o, i;
                return null !== (i = null === (o = E(e, t)) || void 0 === o ? void 0 : o.symbols) && void 0 !== i ? i : null
            }

            function I(e) {
                return e.commands
            }

            function P(e) {
                return e.timestamp
            }
        },
        559986: (e, t, o) => {
            "use strict";
            o.d(t, {
                LIST_START: () => i,
                getTargetIndex: () => r
            });
            const i = Symbol();

            function r(e, t, o) {
                const r = void 0 === o ? void 0 !== t ? e.indexOf(t) : void 0 : o === i ? 0 : e.indexOf(o) + 1;
                return -1 !== r ? r : void 0
            }
        },
        199669: (e, t, o) => {
            "use strict";

            function i(e) {
                const {
                    id: t,
                    event: o,
                    channel: i,
                    filter: r
                } = e;
                return e => (i.on(o, (o => {
                    const {
                        action: i,
                        emitter: n
                    } = JSON.parse(o);
                    n !== t && r(i) && e.dispatch({ ...i,
                        payload: { ...i.payload,
                            silent: !0
                        }
                    })
                })), e => n => {
                    const s = e(n);
                    return r(n) && (n.payload.silent || i.emit(o, JSON.stringify({
                        action: n,
                        emitter: t
                    }))), s
                })
            }
            o.d(t, {
                createCrossTabSyncMiddleware: () => i
            })
        },
        50991: (e, t, o) => {
            "use strict";
            o.d(t, {
                qualified: () => i
            });
            const i = {
                cast: e => e,
                castMany: e => e.map(i.cast)
            }
        },
        340958: (e, t, o) => {
            "use strict";

            function i(e, t) {
                if (e.length !== t.length) return !1;
                for (let o = 0; o < e.length; ++o)
                    if (e[o] !== t[o]) return !1;
                return !0
            }
            o.d(t, {
                equalArrays: () => i
            })
        },
        883522: (e, t, o) => {
            "use strict";
            o.d(t, {
                AppContext: () => i
            });
            const i = (0, o(50959).createContext)({
                isOnMobileAppPage: () => !1,
                isRtl: !1,
                locale: {
                    language: "en"
                }
            })
        },
        774465: (e, t, o) => {
            "use strict";
            o.d(t, {
                AnchorBadge: () => p,
                Badge: () => u,
                BadgeSize: () => r.BadgeSize
            });
            var i = o(50959),
                r = o(105573),
                n = o(497754),
                s = o.n(n),
                l = o(276833),
                a = o.n(l);

            function c(e) {
                const {
                    size: t = r.BadgeSize.Medium,
                    className: o,
                    isPaidBadge: i
                } = e;
                return s()(a().badge, !i && a().free, t && a()[`size-${t}`], o)
            }

            function d(e) {
                return s()(c(e), a().anchor)
            }

            function h(e) {
                const {
                    children: t,
                    contentClassName: o
                } = e;
                return i.createElement("span", {
                    className: s()(a().content, o)
                }, t)
            }

            function u(e) {
                const {
                    size: t = r.BadgeSize.Medium,
                    children: o,
                    className: n,
                    contentClassName: s,
                    ...l
                } = e;
                return i.createElement("span", { ...l,
                    className: c({
                        size: t,
                        className: n
                    })
                }, i.createElement(h, {
                    contentClassName: s
                }, o))
            }

            function p(e) {
                const {
                    size: t = r.BadgeSize.Medium,
                    children: o,
                    className: n,
                    contentClassName: s,
                    ...l
                } = e;
                return i.createElement("a", { ...l,
                    className: d({
                        size: t,
                        className: n
                    })
                }, i.createElement(h, {
                    contentClassName: s
                }, o))
            }
        },
        105573: (e, t, o) => {
            "use strict";
            var i;
            o.d(t, {
                    BadgeSize: () => i
                }),
                function(e) {
                    e.XSmall = "xsmall", e.Small = "small", e.Medium = "medium", e.Large = "large", e.XLarge = "xlarge"
                }(i || (i = {}))
        },
        115078: (e, t, o) => {
            "use strict";
            o.d(t, {
                getBlockStyleClasses: () => s,
                getLogoStyleClasses: () => l
            });
            var i = o(497754),
                r = o(78217),
                n = o.n(r);

            function s(e, t) {
                return i(n()["tv-circle-logo-pair"], n()[`tv-circle-logo-pair--${e}`], t)
            }

            function l(e, t = !0) {
                return i(n()["tv-circle-logo-pair__logo"], n()[`tv-circle-logo-pair__logo--${e}`], !t && n()["tv-circle-logo-pair__logo-empty"])
            }
        },
        741083: (e, t, o) => {
            "use strict";
            o.d(t, {
                presetDefault: () => i,
                presetPlatform: () => r
            });
            const i = {
                    enableActiveStateStyles: !0
                },
                r = {
                    enableActiveStateStyles: !1
                }
        },
        853970: (e, t, o) => {
            "use strict";
            o.d(t, {
                useOutsideEvent: () => i.useOutsideEvent
            });
            var i = o(31241)
        },
        973920: (e, t, o) => {
            "use strict";
            o.d(t, {
                SwitchGroupContext: () => n
            });
            var i = o(50959),
                r = o(755883);
            const n = (0, i.createContext)({
                getName: () => "",
                getValues: () => [],
                getOnChange: () => r.default,
                subscribe: r.default,
                unsubscribe: r.default
            })
        },
        771813: (e, t, o) => {
            "use strict";
            o.d(t, {
                makeSwitchGroupItem: () => n
            });
            var i = o(50959),
                r = o(973920);

            function n(e) {
                var t;
                return t = class extends i.PureComponent {
                    constructor() {
                        super(...arguments), this._onChange = e => {
                            this.context.getOnChange()(e)
                        }, this._onUpdate = e => {
                            e.includes(this.props.value) && this.forceUpdate()
                        }
                    }
                    componentDidMount() {
                        this.context.subscribe(this._onUpdate)
                    }
                    render() {
                        return i.createElement(e, { ...this.props,
                            name: this._getName(),
                            onChange: this._onChange,
                            checked: this._isChecked()
                        })
                    }
                    componentWillUnmount() {
                        this.context.unsubscribe(this._onUpdate)
                    }
                    _getName() {
                        return this.context.getName()
                    }
                    _isChecked() {
                        return this.context.getValues().includes(this.props.value)
                    }
                }, t.contextType = r.SwitchGroupContext, t
            }
        },
        355734: (e, t, o) => {
            "use strict";
            o.d(t, {
                createScopedVisibleElementFilter: () => c,
                getActiveElementSelectors: () => a
            });
            const i = ["button", "fieldset", "optgroup", "option", "select", "textarea", "input"],
                r = ["button", "input", "select", "textarea", "a[href]", "audio[controls]", "video[controls]", '[tabindex="0"]', '[contenteditable="true"]'].map((e => i.includes(e) ? `${e}:not(:disabled)` : e)).map((e => `${e}:not([tabindex="-1"])`)).join(",");

            function n(e) {
                return "visible" === getComputedStyle(e).visibility
            }

            function s(e, t) {
                if (e.matches("[inert],[inert] *")) return !0;
                let o = e;
                for (; o !== t && null !== o;) {
                    if (l(o)) return !0;
                    o = o.parentElement
                }
                return !1
            }

            function l(e) {
                return "none" === getComputedStyle(e).display
            }

            function a() {
                return r
            }

            function c(e) {
                return t => n(t) && !s(t, e)
            }
        },
        952598: (e, t, o) => {
            "use strict";
            var i;
            o.d(t, {
                    KnownAction: () => i,
                    widgetSheriffActions: () => r
                }),
                function(e) {
                    e.Expand = "expand-logo", e.LargeTradeLogo = "large-trade-logo"
                }(i || (i = {}));
            const r = new Set([i.Expand, i.LargeTradeLogo])
        },
        791325: (e, t, o) => {
            "use strict";
            o.r(t), o.d(t, {
                DOWN_ARROW: () => s,
                ENTER: () => l,
                ESC: () => a,
                LEFT_ARROW: () => i,
                RIGHT_ARROW: () => n,
                SLASH: () => d,
                SPACE: () => c,
                UP_ARROW: () => r
            });
            const i = 37,
                r = 38,
                n = 39,
                s = 40,
                l = 13,
                a = 27,
                c = 32,
                d = 47
        },
        35387: (e, t, o) => {
            "use strict";
            o.d(t, {
                entireWorldMarketsPreset: () => l,
                getMarketGroupNameMap: () => s,
                isMarketsPreset: () => a
            });
            var i = o(444372),
                r = o(143517),
                n = o(19138);
            o(882441);
            const s = () => ({
                    [r.MarketGroup.Custom]: "",
                    [r.MarketGroup.EntireWorld]: "",
                    [r.MarketGroup.NorthAmerica]: i.t(null, void 0, o(325381)),
                    [r.MarketGroup.Europe]: i.t(null, void 0, o(546890)),
                    [r.MarketGroup.MiddleEastAfrica]: i.t(null, void 0, o(850434)),
                    [r.MarketGroup.MexicoSouthAmerica]: i.t(null, void 0, o(770306)),
                    [r.MarketGroup.AsiaPacific]: i.t(null, void 0, o(4825)),
                    [r.MarketGroup.Worldwide]: i.t(null, void 0, o(321684)),
                    [r.MarketGroup.G20]: i.t(null, void 0, o(815636))
                }),
                l = e => ({
                    value: "entire_world",
                    name: i.t(null, void 0, o(537396)),
                    desc: "",
                    group: r.MarketGroup.Custom,
                    icon: n,
                    countries: null != e ? e : []
                });

            function a(e) {
                return e.group === r.MarketGroup.Custom && e.hasOwnProperty("countries")
            }
        },
        143517: (e, t, o) => {
            "use strict";
            var i;
            o.d(t, {
                    MarketGroup: () => i
                }),
                function(e) {
                    e.Custom = "Custom", e.EntireWorld = "Entire World", e.NorthAmerica = "North America", e.Europe = "Europe", e.MiddleEastAfrica = "Middle East / Africa", e.MexicoSouthAmerica = "Mexico and South America", e.AsiaPacific = "Asia / Pacific", e.Worldwide = "Worldwide", e.G20 = "G20"
                }(i || (i = {}))
        },
        67905: (e, t, o) => {
            "use strict";

            function i(e) {
                const t = new Map;
                return e.forEach((e => {
                    t.has(e.group) ? t.get(e.group).push(e) : t.set(e.group, [e])
                })), t
            }

            function r(e, t) {
                return t.map((t => e.find((e => e.value === t)))).filter((e => Boolean(e)))
            }

            function n(e, t = 2) {
                if (0 === e.length) return [];
                if (1 === t) return [e];
                const o = Math.floor(e.length / 2) + e.length % 2;
                return [e.slice(0, o), e.slice(o)].filter((e => e.length > 0))
            }
            o.d(t, {
                createGroupColumns: () => n,
                getMarketsByNames: () => r,
                splitMarketsByGroup: () => i
            })
        },
        893125: (e, t, o) => {
            "use strict";
            var i, r, n;
            o.d(t, {
                    GlobalMarket: () => n,
                    NonStockMarket: () => r,
                    StockMarket: () => i
                }),
                function(e) {
                    e.America = "america", e.Argentina = "argentina", e.Australia = "australia", e.Austria = "austria", e.Bahrain = "bahrain", e.Bangladesh = "bangladesh", e.Belgium = "belgium", e.Brazil = "brazil", e.Canada = "canada", e.Chile = "chile", e.China = "china", e.Colombia = "colombia",
                        e.Cyprus = "cyprus", e.Czech = "czech", e.Denmark = "denmark", e.Egypt = "egypt", e.Estonia = "estonia", e.Finland = "finland", e.France = "france", e.Germany = "germany", e.Greece = "greece", e.HongKong = "hongkong", e.Hungary = "hungary", e.Iceland = "iceland", e.India = "india", e.Indonesia = "indonesia", e.Israel = "israel", e.Italy = "italy", e.Japan = "japan", e.Kenya = "kenya", e.Kuwait = "kuwait", e.Latvia = "latvia", e.Lithuania = "lithuania", e.Luxembourg = "luxembourg", e.Malaysia = "malaysia", e.Mexico = "mexico", e.Morocco = "morocco", e.Netherlands = "netherlands", e.NewZealand = "newzealand", e.Nigeria = "nigeria", e.Norway = "norway", e.Pakistan = "pakistan", e.Peru = "peru", e.Philippines = "philippines", e.Poland = "poland", e.Portugal = "portugal", e.Qatar = "qatar", e.Romania = "romania", e.Russia = "russia", e.SaudiArabia = "ksa", e.Serbia = "serbia", e.Singapore = "singapore", e.Slovakia = "slovakia", e.SouthAfrica = "rsa", e.SouthKorea = "korea", e.Spain = "spain", e.SriLanka = "srilanka", e.Sweden = "sweden", e.Switzerland = "switzerland", e.Taiwan = "taiwan", e.Thailand = "thailand", e.Tunisia = "tunisia", e.Turkey = "turkey", e.UAE = "uae", e.UK = "uk", e.Venezuela = "venezuela", e.Vietnam = "vietnam"
                }(i || (i = {})),
                function(e) {
                    e.Forex = "forex", e.Crypto = "crypto", e.Coin = "coin", e.CFD = "cfd", e.Bonds = "bonds", e.Bond = "bond", e.Futures = "futures", e.Options = "options"
                }(r || (r = {})),
                function(e) {
                    e.Global = "global"
                }(n || (n = {}));
            i.Belgium, i.Cyprus, i.Denmark, i.Estonia, i.Finland, i.France, i.Germany, i.Greece, i.Hungary, i.Iceland, i.Italy, i.Latvia, i.Lithuania, i.Luxembourg, i.Netherlands, i.Norway, i.Poland, i.Portugal, i.Romania, i.Russia, i.Serbia, i.Slovakia, i.Spain, i.Sweden, i.Switzerland, i.Turkey, i.UK, i.Belgium, i.Cyprus, i.Denmark, i.Estonia, i.Finland, i.France, i.Germany, i.Greece, i.Hungary, i.Italy, i.Latvia, i.Lithuania, i.Luxembourg, i.Netherlands, i.Poland, i.Portugal, i.Romania, i.Slovakia, i.Spain, i.Sweden
        },
        780792: (e, t, o) => {
            "use strict";
            o.d(t, {
                AbstractIndicator: () => l
            });
            var i = o(338619),
                r = o(79342),
                n = o(625545);
            o(673747);
            const s = (0, i.getLogger)("GUI.Blocks.AbstractIndicator");
            class l {
                constructor(e) {
                    this._classSuffix = "", this._quoteSessionPrefix = "abstract-indicator", this._shortMode = !1, this._showTooltip = !0, this._subscribed = !1, this._tooltipType = "custom", this._lastTooltipText = "", this._quoteSession = e.quoteSession
                }
                getValue() {
                    return this._value
                }
                getTooltipText() {
                    return this._labelMap[this._value] || ""
                }
                getLabel() {
                    return this._labelMap[this._value] || ""
                }
                getElement() {
                    return this._el
                }
                update(e, t) {
                    this._updateValue(e, t), this._render()
                }
                setTooltipEnabled(e = !1) {
                    this._showTooltip !== e && (this._showTooltip = e, this._renderTooltip())
                }
                enableShortMode() {
                    !0 !== this._shortMode && (this._shortMode = !0, this._render())
                }
                disableShortMode() {
                    !1 !== this._shortMode && (this._shortMode = !1, this._render())
                }
                isShortModeEnabled() {
                    return this._shortMode
                }
                start() {
                    !this._subscribed && this._symbolName && (this._quoteSession || (this._quoteSession = (0, n.getQuoteSessionInstance)("simple")), this._quoteSession.subscribe(this._getQuoteSessionId(), this._symbolName, this.update.bind(this)), this._subscribed = !0)
                }
                stop() {
                    this._subscribed && this._quoteSession && this._symbolName && (this._quoteSession.unsubscribe(this._getQuoteSessionId(), this._symbolName), this._subscribed = !1)
                }
                setSessionStatusIcon(e) {
                    this._sessionStatusIcon !== e && (this._sessionStatusIcon = e, this._render())
                }
                _init(e) {
                    this._el = e.el ? e.el : document.createElement("span"), this._el.innerHTML = "", this._classMap = e.classMap, this._iconClassMap = e.iconClassMap, this._labelMap = e.labelMap, this._showTooltip = e.showTooltip, this._classSuffix = e.classSuffix, this._symbolName = e.symbol, this._sessionStatusIcon = e.sessionStatusIcon, this._onValueChange = e.onValueChange, e.tooltipType && (this._tooltipType = e.tooltipType), this._quoteSessionGUID = (0, r.guid)(), !0 === e.short && this.enableShortMode(), e.data && this._updateValue(e.data)
                }
                _clearClasses() {
                    Object.values(this._classMap).map((e => {
                        this._el.classList.remove(`${e}`), this._el.classList.remove(`${e}${this._classSuffix}`)
                    }))
                }
                _render() {
                    this._renderClasses(), this._renderTooltip(), this._renderLabel()
                }
                _renderLabel() {
                    this._el.textContent = this.getLabel()
                }
                _updateValue(e, t) {
                    var o;
                    const i = this._getValueFromData(e);
                    (t || i !== this._value) && (this._value = i, null === (o = this._onValueChange) || void 0 === o || o.call(this, this._value))
                }
                _renderClasses() {
                    const e = this._el.classList;
                    e.add(this._componentClass, this._componentClass + this._classSuffix);
                    const t = this._classMap[this._value];
                    for (const o in this._classMap) {
                        const i = this._classMap[o];
                        i && (i === t ? (e.add(i, i + this._classSuffix), this._sessionStatusIcon && e.add(i + "__withIcon")) : (e.remove(i, i + this._classSuffix), this._sessionStatusIcon && e.remove(i + "__withIcon")))
                    }!t && this._value && s.logWarn(`no className for status ${this._value}`)
                }
                _renderTooltip() {
                    const e = this._showTooltip ? this.getTooltipText() : "";
                    e !== this._lastTooltipText && (this._lastTooltipText = e, this._el.setAttribute("title", e), "custom" === this._tooltipType && this._el.classList.toggle("apply-common-tooltip", this._showTooltip))
                }
                _getQuoteSessionId() {
                    return `${this._quoteSessionPrefix}.${this._quoteSessionGUID}`
                }
            }
        },
        713438: (e, t, o) => {
            "use strict";
            o.d(t, {
                flagUrl: () => a,
                getMockedFlag: () => c
            });
            var i = o(61499),
                r = o(849204),
                n = o(701131),
                s = o(899411);
            const l = {
                erl: "EU",
                uk: "GB",
                bitcoin: "BTC"
            };

            function a(e, t, o = r.LogoSize.Medium) {
                return e ? (e.toLowerCase() in l && (e = l[e]), (0, r.getLogoUrlResolver)().getCountryFlagUrl(e.toUpperCase(), o)) : c(t)
            }

            function c(e) {
                return e === i.StdTheme.Dark ? n : s
            }
        },
        531327: (e, t, o) => {
            "use strict";

            function i(e) {
                return r() ? 0 : n() ? 45 : Math.min(Math.max(e, 45), 450)
            }
            o.d(t, {
                getWidgetBarPadding: () => i
            });
            const r = () => !window.matchMedia("(min-width: 768px)").matches,
                n = () => !window.matchMedia("(min-width: 1280px)").matches
        },
        404573: (e, t, o) => {
            "use strict";
            o.d(t, {
                Draggable: () => n
            });
            var i = o(650151),
                r = o(318557);
            o(492575);
            class n {
                constructor(e) {
                    var t, o;
                    this._helper = null, this._handleDragStart = e => {
                        var t;
                        if (null !== this._helper) return;
                        const o = this._source;
                        o.classList.add("ui-draggable-dragging");
                        const [i, n] = [(0, r.outerWidth)(o), (0, r.outerHeight)(o)];
                        this._helper = {
                            startTop: parseFloat(o.style.top) || 0,
                            startLeft: parseFloat(o.style.left) || 0,
                            nextTop: null,
                            nextLeft: null,
                            raf: null,
                            size: [i, n],
                            containment: this._containment instanceof HTMLElement ? [parseInt(getComputedStyle(this._containment).borderLeftWidth) + parseInt(getComputedStyle(this._containment).paddingLeft), parseInt(getComputedStyle(this._containment).borderTopWidth) + parseInt(getComputedStyle(this._containment).paddingTop), this._containment.offsetWidth - parseInt(getComputedStyle(this._containment).borderRightWidth) - parseInt(getComputedStyle(this._containment).paddingRight) - parseInt(getComputedStyle(o).marginLeft) - parseInt(getComputedStyle(o).marginRight) - i, this._containment.offsetHeight - parseInt(getComputedStyle(this._containment).borderBottomWidth) - parseInt(getComputedStyle(this._containment).paddingBottom) - parseInt(getComputedStyle(o).marginTop) - parseInt(getComputedStyle(o).marginBottom) - n] : "window" === this._containment ? [window.scrollX, window.scrollY, window.scrollX + document.documentElement.offsetWidth - i, window.scrollY + document.documentElement.offsetHeight - n] : null
                        }, null === (t = this._start) || void 0 === t || t.call(this)
                    }, this._handleDragMove = e => {
                        var t;
                        if (null === this._helper) return;
                        const {
                            current: o,
                            initial: i
                        } = e.detail, r = this._source, n = this._helper.nextTop, s = this._helper.nextLeft, l = "y" === this._axis || !1 === this._axis || 0 !== o.movementY;
                        if (l) {
                            const e = this._helper.startTop;
                            isFinite(e) && (this._helper.nextTop = o.clientY - i.clientY + e)
                        }
                        const a = "x" === this._axis || !1 === this._axis || 0 !== o.movementY;
                        if (a) {
                            const e = this._helper.startLeft;
                            isFinite(e) && (this._helper.nextLeft = o.clientX - i.clientX + e)
                        }
                        if (null !== this._helper.containment) {
                            const [e, t, o, i] = this._helper.containment;
                            l && this._helper.nextTop && (this._helper.nextTop = Math.min(this._helper.nextTop, i), this._helper.nextTop = Math.max(this._helper.nextTop, t)), a && this._helper.nextLeft && (this._helper.nextLeft = Math.min(this._helper.nextLeft, o), this._helper.nextLeft = Math.max(this._helper.nextLeft, e))
                        }
                        null !== this._helper.raf || n === this._helper.nextTop && s === this._helper.nextLeft || (this._helper.raf = requestAnimationFrame((() => {
                            null !== this._helper && (null !== this._helper.nextTop && (r.style.top = this._helper.nextTop + "px", this._helper.nextTop = null), null !== this._helper.nextLeft && (r.style.left = this._helper.nextLeft + "px", this._helper.nextLeft = null), this._helper.raf = null)
                        }))), null === (t = this._drag) || void 0 === t || t.call(this)
                    }, this._handleDragStop = e => {
                        var t;
                        if (null === this._helper) return;
                        this._source.classList.remove("ui-draggable-dragging"), this._helper = null, null === (t = this._stop) || void 0 === t || t.call(this)
                    };
                    const i = this._source = e.source;
                    i.classList.add("ui-draggable");
                    const n = this._handle = null !== (t = e.handle ? i.querySelector(e.handle) : null) && void 0 !== t ? t : i;
                    n.classList.add("ui-draggable-handle"), this._start = e.start, this._stop = e.stop, this._drag = e.drag, this._backend = new s({
                        handle: n,
                        onDragStart: this._handleDragStart,
                        onDragMove: this._handleDragMove,
                        onDragStop: this._handleDragStop
                    }), this._axis = null !== (o = e.axis) && void 0 !== o && o, this._containment = e.containment
                }
                destroy() {
                    const e = this._source;
                    e.classList.remove("ui-draggable"), e.classList.remove("ui-draggable-dragging");
                    this._handle.classList.remove("ui-draggable-handle"), this._backend.destroy(),
                        null !== this._helper && (this._helper.raf && cancelAnimationFrame(this._helper.raf), this._helper = null)
                }
            }
            class s {
                constructor(e) {
                    var t;
                    this._pointerStarted = !1, this._initial = null, this._handlePointerDown = e => {
                        if (null !== this._initial || 0 !== e.button) return;
                        if (!(e.target instanceof Element && this._handle.contains(e.target))) return;
                        if (this._initial = e, !this._distance && (this._pointerStart(), !this._pointerStarted)) return;
                        e.preventDefault();
                        const t = this._getEventTarget();
                        t.addEventListener("pointermove", this._handlePointerMove), t.addEventListener("pointerup", this._handlePointerUp), t.addEventListener("pointercancel", this._handlePointerUp), t.addEventListener("lostpointercapture", this._handleLostPointerCapture)
                    }, this._handleLostPointerCapture = e => {
                        this._getEventTarget() === e.target && this._handlePointerUp(e)
                    }, this._handlePointerMove = e => {
                        if (null !== this._initial && this._initial.pointerId === e.pointerId)
                            if (this._pointerStarted) this._pointerDrag(e);
                            else if (this._pointerDistanceMet(e)) {
                            if (this._pointerStart(), this._pointerStarted) return void this._pointerDrag(e);
                            this._handlePointerUp(e)
                        }
                    }, this._handlePointerUp = e => {
                        if (null === this._initial || this._initial.pointerId !== e.pointerId) return;
                        e.preventDefault();
                        const t = this._getEventTarget();
                        t.removeEventListener("pointermove", this._handlePointerMove), t.removeEventListener("pointerup", this._handlePointerUp), t.removeEventListener("pointercancel", this._handlePointerUp), t.removeEventListener("lostpointercapture", this._handlePointerUp), this._pointerStarted && (this._pointerStarted = !1, t.releasePointerCapture(this._initial.pointerId), this._dispatchEvent(this._createEvent("pointer-drag-stop", e))), this._initial = null
                    };
                    const o = this._handle = e.handle;
                    this._onDragStart = e.onDragStart, this._onDragMove = e.onDragMove, this._onDragStop = e.onDragStop, this._distance = null !== (t = e.distance) && void 0 !== t ? t : 0, this._rootElement = e.rootElement, o.style.touchAction = "none", o.addEventListener("pointerdown", this._handlePointerDown)
                }
                destroy() {
                    const e = this._handle;
                    e.style.touchAction = "", e.removeEventListener("pointerdown", this._handlePointerDown), e.removeEventListener("pointermove", this._handlePointerMove), e.removeEventListener("pointerup", this._handlePointerUp), e.removeEventListener("pointercancel", this._handlePointerUp), e.removeEventListener("lostpointercapture", this._handlePointerUp), null !== this._initial && (e.releasePointerCapture(this._initial.pointerId), this._initial = null), this._pointerStarted = !1
                }
                _pointerStart() {
                    if (!this._initial) return;
                    const e = this._getEventTarget();
                    this._dispatchEvent(this._createEvent("pointer-drag-start", this._initial)) ? (this._pointerStarted = !0, e.setPointerCapture(this._initial.pointerId)) : this._initial = null
                }
                _pointerDrag(e) {
                    e.preventDefault(), this._dispatchEvent(this._createEvent("pointer-drag-move", e))
                }
                _pointerDistanceMet(e) {
                    return !this._initial || !this._distance || Math.max(Math.abs(this._initial.clientX - e.clientX), Math.abs(this._initial.clientY - e.clientY)) >= this._distance
                }
                _getEventTarget() {
                    var e;
                    return null !== (e = this._rootElement) && void 0 !== e ? e : this._handle
                }
                _dispatchEvent(e) {
                    switch (e.type) {
                        case "pointer-drag-start":
                            this._onDragStart(e);
                            break;
                        case "pointer-drag-move":
                            this._onDragMove(e);
                            break;
                        case "pointer-drag-stop":
                            this._onDragStop(e)
                    }
                    return !e.defaultPrevented
                }
                _createEvent(e, t) {
                    return (0, i.assert)(null !== this._initial), new CustomEvent(e, {
                        bubbles: !0,
                        cancelable: !0,
                        detail: {
                            backend: this,
                            initial: this._initial,
                            current: t
                        }
                    })
                }
            }
        },
        746849: (e, t, o) => {
            "use strict";
            o.d(t, {
                checkIfExchangeAvailable: () => n,
                isUserNeedSignAgreement: () => r
            });
            o(466281);
            var i = o(406103);

            function r(e) {
                if (!(0, i.isIDCExchange)(e)) return !1;
                e = s(e);
                const t = window.pro,
                    o = t.getProduct(e);
                return void 0 !== o.idc_service_codes_delay && ((!Array.isArray(o.included_exchanges) || !o.included_exchanges.some((e => t.hasPackage(s(e))))) && ! function(e) {
                    const t = window.pro;
                    return t.hasPackage(e) || t.hasPackage(e + "_dly")
                }(e))
            }

            function n(e) {
                const t = window.pro;
                return new Promise((o => {
                    window.is_authenticated ? !t.getIDCExchanges(!0).length || t.isInvalidShopConf() ? t.updateShopConf().then((() => {
                        o(!r(e))
                    })).catch((() => {
                        o(!0)
                    })) : o(!r(e)) : o(!0)
                }))
            }

            function s(e) {
                return e.startsWith("exchange-") ? e : "exchange-{0}".format(e.toLowerCase())
            }
        },
        406103: (e, t, o) => {
            "use strict";
            o.d(t, {
                isIDCExchange: () => r
            });
            var i = o(343823);

            function r(e, t = !1) {
                var o, r, n;
                if (e && e.startsWith("exchange-")) return function(e, t = !1) {
                    var o;
                    const r = null === (o = window.pro) || void 0 === o ? void 0 : o.getProduct(e);
                    return !(void 0 === r || !(0, i.isProductDefined)(r) || (t ? !r.idc_service_codes_delay : !r.idc_service_codes))
                }(e, t);
                const s = (e || "").toLowerCase();
                return null !== (n = null === (r = null === (o = window.pro) || void 0 === o ? void 0 : o.getIDCExchanges(t)) || void 0 === r ? void 0 : r.includes(s)) && void 0 !== n && n
            }
        },
        833813: (e, t, o) => {
            "use strict";
            var i;
            o.d(t, {
                    ProductFeaturesEnum: () => i,
                    UNLIMITED_FEATURE_LIMIT: () => r
                }),
                function(e) {
                    e.CAN_EDIT_PUBLIC_CHATS = "CAN_EDIT_PUBLIC_CHATS", e.NO_SPONSORED_ADS = "NO_SPONSORED_ADS", e.ALERTS_NO_EXPIRATION = "ALERTS_NO_EXPIRATION", e.ALERTS_WEBHOOK = "ALERTS_WEBHOOK", e.SCREENER_AUTO_REFRESH = "SCREENER_AUTO_REFRESH", e.SCREENER_INTERVALS = "SCREENER_INTERVALS", e.SCREENER_EXPORT_DATA = "SCREENER_EXPORT_DATA", e.SOCIAL_ACTIVITY = "SOCIAL_ACTIVITY"
                }(i || (i = {}));
            const r = 99999
        },
        532442: (e, t, o) => {
            "use strict";

            function i(e) {
                const [t, o, i] = function(e) {
                    const t = e.toString();
                    return [Number(t.slice(0, 4)), Number(t.slice(4, 6)), Number(t.slice(6))]
                }(e);
                return new Date(t, o - 1, i)
            }
            o.d(t, {
                getDateFromYYYYMMDD: () => i
            })
        },
        583912: (e, t, o) => {
            "use strict";
            o.d(t, {
                linking: () => m
            });
            var i = o(290484),
                r = o(650151),
                n = o(375397),
                s = (o(764829), o(378975)),
                l = o(975179),
                a = o(338619),
                c = o(62802),
                d = o(588948),
                h = o(776734),
                u = o(149109),
                p = o(912445);
            const _ = (0, a.getLogger)("Linking");
            class g {
                constructor(e, t, o) {
                    this.watchedSymbol = new n.WatchedValue, this.seriesShortSymbol = new n.WatchedValue, this.proSymbol = new n.WatchedValue, this.ensuredProSymbol = new n.WatchedValue, this.watchedInterval = new n.WatchedValue, this.watchedIntraday = new n.WatchedValue, this.watchedSeconds = new n.WatchedValue, this.watchedTicks = new n.WatchedValue, this.watchedDataFrequencyResolution = new n.WatchedValue, this.watchedRange = new n.WatchedValue, this.watchedSupportedResolutions = new n.WatchedValue, this.watchedSupportedChartStyles = new n.WatchedValue,
                        this.symbolNamesList = new n.WatchedValue, this._chartWidgetCollection = null, this._chartWidgetBindingState = 0, this._activeChartWidget = null, this._linkingGroupCharts = null, this._boundChartWidget = null, this._watchedSymbolListenerBound = this._watchedSymbolListener.bind(this), this._watchedIntervalListenerBound = this._watchedIntervalListener.bind(this), this._muted = !1, this.updateBoundChartWidget = () => {
                            const e = this._chartToBind();
                            e !== this._boundChartWidget && (null === e ? this.unbindFromChartWidget() : this.bindToChartWidget(e))
                        }, this._updateAllGroupChartWidgets = () => {
                            var e;
                            null === (e = this._destroySymbolIntervalPropertySubscriptions) || void 0 === e || e.call(this);
                            const t = (0, r.ensureNotNull)(this._linkingGroupCharts).value(),
                                o = [],
                                i = [];
                            for (const e of t) {
                                const t = e.symbolWV().spawn(),
                                    r = e.resolutionWV().spawn();
                                t.subscribe(this._updateSymbolByProperty.bind(this, e)), r.subscribe(this._updateIntervalByProperty.bind(this, e)), o.push(t), i.push(r)
                            }
                            this._destroySymbolIntervalPropertySubscriptions = () => {
                                o.forEach((e => e.destroy())), i.forEach((e => e.destroy())), this._destroySymbolIntervalPropertySubscriptions = void 0
                            };
                            const n = this.watchedSymbol.value();
                            t.length > 1 && this._needApplySymbol(n) && !this._muted && this._setGroupSymbol(n);
                            const s = this.watchedInterval.value();
                            t.length > 1 && this._needApplyInterval(s) && !this._muted && this._setGroupInterval(s), this.updateBoundChartWidget()
                        }, this._groupIndex = e;
                    const i = (e, t) => {
                        e.subscribe((e => {
                            o() === this && t.setValue(e)
                        }), {
                            callWithLast: !0
                        })
                    };
                    i(this.watchedSymbol, t.watchedSymbol), i(this.seriesShortSymbol, t.seriesShortSymbol), i(this.proSymbol, t.proSymbol), i(this.ensuredProSymbol, t.ensuredProSymbol), i(this.watchedInterval, t.watchedInterval), i(this.watchedIntraday, t.watchedIntraday), i(this.watchedSeconds, t.watchedSeconds), i(this.watchedTicks, t.watchedTicks), i(this.watchedDataFrequencyResolution, t.watchedDataFrequencyResolution), i(this.watchedRange, t.watchedRange), i(this.watchedSupportedResolutions, t.watchedSupportedResolutions), i(this.watchedSupportedChartStyles, t.watchedSupportedChartStyles), i(this.symbolNamesList, t.symbolNamesList), this.watchedSymbol.subscribe((e => {
                        this._boundChartWidget && this._boundChartWidget.hasModel() && this._mainSeries().symbolSameAsCurrent(e) || this.proSymbol.setValue(e)
                    }), {
                        callWithLast: !0
                    })
                }
                mute(e) {
                    this._muted = e
                }
                bindToChartWidgetCollection(e) {
                    this.unbindFromChartWidgetCollection(), this._chartWidgetCollection = e, this._activeChartWidget = e.activeChartWidget.spawn(), this._activeChartWidget.subscribe(this.updateBoundChartWidget), this._linkingGroupCharts = e.linkingGroupsCharts(this._groupIndex).spawn(), this._linkingGroupCharts.subscribe(this._updateAllGroupChartWidgets), this.updateBoundChartWidget(), this._updateAllGroupChartWidgets()
                }
                unbindFromChartWidgetCollection() {
                    var e, t, o;
                    this.unbindFromChartWidget(), this._chartWidgetCollection = null, null === (e = this._activeChartWidget) || void 0 === e || e.destroy(), this._activeChartWidget = null, null === (t = this._linkingGroupCharts) || void 0 === t || t.destroy(), this._linkingGroupCharts = null, null === (o = this._destroySymbolIntervalPropertySubscriptions) || void 0 === o || o.call(this)
                }
                bindToChartWidget(e) {
                    if (this.unbindFromChartWidget(), this._boundChartWidget = e, e.hasModel()) return void this._onChartModelCreated(e.model());
                    e.modelCreated().subscribe(this, this._onChartModelCreated, !0), this._chartWidgetBindingState = 1;
                    const t = e.properties().childs().mainSeriesProperties.childs();
                    this.watchedSymbol.setValue(t.symbol.value()), this.watchedInterval.setValue(t.interval.value()), this._boundChartWidget.linkingGroupIndex().subscribe(this.updateBoundChartWidget)
                }
                unbindFromChartWidget() {
                    const e = this._boundChartWidget;
                    if (null !== e) {
                        switch (this._chartWidgetBindingState) {
                            case 1:
                                e.modelCreated().unsubscribeAll(this);
                                break;
                            case 2:
                                this.watchedSymbol.unsubscribe(this._watchedSymbolListenerBound);
                                const t = this._mainSeries().dataEvents();
                                t.symbolResolved().unsubscribeAll(this), t.symbolError().unsubscribeAll(this), this._mainSeries().onIntervalChanged().unsubscribeAll(this), this.watchedInterval.unsubscribe(this._watchedIntervalListenerBound), delete this.watchedSymbol.writeLock
                        }
                        e.linkingGroupIndex().unsubscribe(this.updateBoundChartWidget), this._boundChartWidget = null, this._chartWidgetBindingState = 0
                    }
                }
                boundChartWidget() {
                    return this._boundChartWidget
                }
                _mainSeries() {
                    if (!this._boundChartWidget) throw new Error("ChartWidget is undefined");
                    return this._boundChartWidget.model().mainSeries()
                }
                _watchedSymbolListener(e) {
                    this._needApplySymbol(e) && !this._muted && (this._setGroupSymbol(e), this._sendSnowplowAnalytics())
                }
                _updateSymbolByProperty(e, t) {
                    const o = this._symbolLock();
                    o && this._needApplySymbol(t) && !this._muted && this._setGroupSymbol(t), (o || e === this._boundChartWidget) && this.watchedSymbol.setValue(t)
                }
                _watchedIntervalListener(e) {
                    const t = s.Interval.normalize(e);
                    t && this._needApplyInterval(t) && !this._muted && this._setGroupInterval(t)
                }
                _updateIntervalByProperty(e, t) {
                    const o = this._intervalLock(),
                        i = s.Interval.normalize(t);
                    o && i && this._needApplyInterval(i) && !this._muted && this._setGroupInterval(i), (o || e === this._boundChartWidget) && this.watchedInterval.setValue(null != i ? i : t)
                }
                _sendSnowplowAnalytics() {
                    if (window.user.do_not_track) return;
                    const e = this._mainSeries(),
                        t = () => {
                            e.dataEvents().symbolResolved().unsubscribe(this, o)
                        },
                        o = o => {
                            (0, h.getTracker)().then((e => {
                                if (null === e) return;
                                const t = (0, r.ensureNotNull)(this._chartWidgetCollection),
                                    i = t.layout.value(),
                                    n = t.metaInfo.uid.value() || "";
                                e.trackChartSymbols(o.pro_name, o.type, i, n)
                            })), e.dataEvents().symbolError().unsubscribe(this, t)
                        };
                    e.dataEvents().symbolResolved().subscribe(this, o, !0), e.dataEvents().symbolError().subscribe(this, t, !0)
                }
                _updateSeriesSymbolInfo() {
                    this.seriesShortSymbol.setValue((0, r.ensureNotNull)(this._boundChartWidget).getSymbol(!0));
                    const e = this._mainSeries().symbolInfo();
                    if (e) {
                        const t = e.pro_name || !1;
                        this.proSymbol.setValue(t || this.watchedSymbol.value()), this.ensuredProSymbol.setValue(this.proSymbol.value()), e.aliases && this.symbolNamesList.setValue(e.aliases);
                        let o = (0, u.allChartStyles)();
                        ((0, l.isCloseBasedSymbol)(e) || this._mainSeries().intervalObj().is1Tick()) && (o = o.filter((e => (0, l.isSingleValueBasedStyle)(e)))), this.watchedSupportedChartStyles.setValue(o), this.watchedIntraday.setValue(!!e.has_intraday),
                            this.watchedSeconds.setValue(!!e.has_seconds), this.watchedTicks.setValue(!(0, l.isCloseBasedSymbol)(e) && !!e["is-tickbars-available"]), this.watchedRange.setValue(!(0, l.isCloseBasedSymbol)(e));
                        const i = e.data_frequency ? e.data_frequency : void 0;
                        this.watchedDataFrequencyResolution.setValue(i)
                    } else this.watchedIntraday.setValue(!1), this.watchedSeconds.setValue(!1), this.watchedTicks.setValue(!1), this.watchedRange.setValue(!1), this._mainSeries().isFailed() && this.ensuredProSymbol.setValue(this.proSymbol.value())
                }
                _onChartModelCreated(e) {
                    if (!this._boundChartWidget) throw new Error("ChartWidget is undefined");
                    this._chartWidgetBindingState = 2, this.watchedSymbol.setValue(this._boundChartWidget.symbolWV().value()), this.watchedSymbol.subscribe(this._watchedSymbolListenerBound);
                    const t = e.mainSeries().dataEvents();
                    t.symbolResolved().subscribe(this, this._updateSeriesSymbolInfo), t.symbolError().subscribe(this, this._updateSeriesSymbolInfo), e.mainSeries().onIntervalChanged().subscribe(this, this._updateSeriesSymbolInfo), this._updateSeriesSymbolInfo(), this.watchedInterval.setValue(this._boundChartWidget.resolutionWV().value()), this.watchedInterval.subscribe(this._watchedIntervalListenerBound), this._boundChartWidget.readOnly() && (this.watchedSymbol.writeLock = !0)
                }
                _chartToBind() {
                    var e;
                    const t = this._chartWidgetCollection;
                    return null === t ? null : t.activeChartWidget.value().linkingGroupIndex().value() === this._groupIndex ? t.activeChartWidget.value() : null !== this._boundChartWidget && this._boundChartWidget.linkingGroupIndex().value() === this._groupIndex ? this._boundChartWidget : null !== (e = t.getAll().find((e => e.linkingGroupIndex().value() === this._groupIndex))) && void 0 !== e ? e : null
                }
                _symbolLock() {
                    var e;
                    return !!(null === (e = this._chartWidgetCollection) || void 0 === e ? void 0 : e.lock.symbol.value())
                }
                _intervalLock() {
                    var e;
                    return !!(null === (e = this._chartWidgetCollection) || void 0 === e ? void 0 : e.lock.interval.value())
                }
                _chartsForLock(e) {
                    return (0 === e ? this._symbolLock() : this._intervalLock()) ? (0, r.ensureNotNull)(this._linkingGroupCharts).value() : this._boundChartWidget ? [this._boundChartWidget] : []
                }
                _setGroupSymbol(e) {
                    this.mute(!0), (0, r.ensureNotNull)(this._chartWidgetCollection).setSymbol(e, this._groupIndex, (0, r.ensureNotNull)(this._boundChartWidget)).finally((() => {
                        if (this._boundChartWidget) {
                            const t = this._boundChartWidget.model().mainSeries();
                            t.symbolSameAsCurrent(e) || (this.watchedSymbol.setValue(t.symbol()), this.proSymbol.setValue(t.proSymbol()))
                        }
                    })), this.mute(!1)
                }
                _needApplySymbol(e) {
                    const t = this._chartsForLock(0),
                        o = t.find((t => t.hasModel() && t.model().mainSeries().symbolInfo() && t.model().mainSeries().symbolSameAsResolved(e)));
                    if (o) {
                        const e = o.model().mainSeries();
                        if (t.every((t => e.symbolSameAsResolved(t.symbolWV().value())))) return !1
                    }
                    return t.some((t => t.symbolWV().value() !== e))
                }
                _setGroupInterval(e) {
                    this.mute(!0), (0, r.ensureNotNull)(this._chartWidgetCollection).setResolution(e, this._groupIndex).finally((() => {
                        if (this._boundChartWidget) {
                            const t = this._boundChartWidget.resolutionWV().value();
                            s.Interval.isEqual(t, e) || this.watchedInterval.setValue(t)
                        }
                    })), this.mute(!1)
                }
                _needApplyInterval(e) {
                    return this._chartsForLock(1).some((t => !s.Interval.isEqual(t.resolutionWV().value(), e)))
                }
            }
            const m = new class {
                constructor() {
                    this._watchedSymbol = new n.WatchedValue, this._seriesShortSymbol = new n.WatchedValue, this._proSymbol = new n.WatchedValue, this._ensuredProSymbol = new n.WatchedValue, this._watchedInterval = new n.WatchedValue, this._watchedIntraday = new n.WatchedValue, this._watchedSeconds = new n.WatchedValue, this._watchedTicks = new n.WatchedValue, this._watchedDataFrequencyResolution = new n.WatchedValue, this._watchedRange = new n.WatchedValue, this._watchedSupportedResolutions = new n.WatchedValue, this._watchedSupportedChartStyles = new n.WatchedValue([]), this._symbolNamesList = new n.WatchedValue, this._chartWidgetCollection = null, this._onSymbolLinkBound = this._onSymbolLink.bind(this), this._searchCharts = null, this._searchChartsLoadDebounced = null, this._selfEmit = !1, this._preventFeedBySymbol = !1, this._feedBySymbolDebounceCounter = 0, this._linkingGroups = new Map, this._activeLinkingGroup = new n.WatchedValue, this._activeLinkingGroupIndex = null, this._updateLinkingGroups = () => {
                        (0, r.ensureNotNull)(this._chartWidgetCollection).allLinkingGroups().value().forEach((e => this._linkingGroup(e))), this._linkingGroups.forEach((e => e.updateBoundChartWidget()))
                    }, this._activeLinkingGroup.setValue(this._linkingGroup(null));
                    const e = (e, t) => {
                        e.subscribe((e => t().setValue(e)), {
                            callWithLast: !0
                        })
                    };
                    e(this._watchedSymbol, (() => this._activeLinkingGroup.value().watchedSymbol)), e(this._seriesShortSymbol, (() => this._activeLinkingGroup.value().seriesShortSymbol)), e(this._proSymbol, (() => this._activeLinkingGroup.value().proSymbol)), e(this._ensuredProSymbol, (() => this._activeLinkingGroup.value().ensuredProSymbol)), e(this._watchedInterval, (() => this._activeLinkingGroup.value().watchedInterval)), e(this._watchedIntraday, (() => this._activeLinkingGroup.value().watchedIntraday)), e(this._watchedSeconds, (() => this._activeLinkingGroup.value().watchedSeconds)), e(this._watchedTicks, (() => this._activeLinkingGroup.value().watchedTicks)), e(this._watchedDataFrequencyResolution, (() => this._activeLinkingGroup.value().watchedDataFrequencyResolution)), e(this._watchedRange, (() => this._activeLinkingGroup.value().watchedRange)), e(this._watchedSupportedResolutions, (() => this._activeLinkingGroup.value().watchedSupportedResolutions)), e(this._watchedSupportedChartStyles, (() => this._activeLinkingGroup.value().watchedSupportedChartStyles)), e(this._symbolNamesList, (() => this._activeLinkingGroup.value().symbolNamesList));
                    const t = e => {
                        this._watchedSymbol.setValue(e.watchedSymbol.value()), this._seriesShortSymbol.setValue(e.seriesShortSymbol.value()), this._proSymbol.setValue(e.proSymbol.value()), this._ensuredProSymbol.setValue(e.ensuredProSymbol.value()), this._watchedInterval.setValue(e.watchedInterval.value()), this._watchedIntraday.setValue(e.watchedIntraday.value()), this._watchedSeconds.setValue(e.watchedSeconds.value()), this._watchedTicks.setValue(e.watchedTicks.value()), this._watchedDataFrequencyResolution.setValue(e.watchedDataFrequencyResolution.value()), this._watchedRange.setValue(e.watchedRange.value()),
                            this._watchedSupportedResolutions.setValue(e.watchedSupportedResolutions.value()), this._watchedSupportedChartStyles.setValue(e.watchedSupportedChartStyles.value()), this._symbolNamesList.setValue(e.symbolNamesList.value())
                    };
                    this._activeLinkingGroup.subscribe(t), t(this._activeLinkingGroup.value()), (0, p.setMuteLinkingGroup)(((e, t) => {
                        this._linkingGroup(e).mute(t)
                    }))
                }
                get symbol() {
                    return this._watchedSymbol
                }
                get proSymbol() {
                    return this._proSymbol.readonly()
                }
                get ensuredProSymbol() {
                    return this._ensuredProSymbol.readonly()
                }
                get symbolNamesList() {
                    return this._symbolNamesList.readonly()
                }
                get seriesShortSymbol() {
                    return this._seriesShortSymbol.readonly()
                }
                get interval() {
                    return this._watchedInterval
                }
                get intraday() {
                    return this._watchedIntraday.readonly()
                }
                get seconds() {
                    return this._watchedSeconds.readonly()
                }
                get ticks() {
                    return this._watchedTicks.readonly()
                }
                get range() {
                    return this._watchedRange.readonly()
                }
                get supportedResolutions() {
                    return this._watchedSupportedResolutions.readonly()
                }
                get supportedChartStyles() {
                    return this._watchedSupportedChartStyles.readonly()
                }
                get preventFeedBySymbol() {
                    return this._preventFeedBySymbol
                }
                get dataFrequencyResolution() {
                    return this._watchedDataFrequencyResolution.readonly()
                }
                activeLinkingGroup() {
                    return this._activeLinkingGroup.readonly()
                }
                getChartWidget() {
                    return this.activeLinkingGroup().value().boundChartWidget()
                }
                bindToChartWidgetCollection(e) {
                    var t;
                    null === (t = this._chartWidgetCollection) || void 0 === t || t.onAboutToBeDestroyed.unsubscribeAll(this), this._unbindFromChartWidgetCollection(), this._chartWidgetCollection = e, this._chartWidgetCollection.onAboutToBeDestroyed.subscribe(this, this._unbindFromChartWidgetCollection), this._chartWidgetCollection.allLinkingGroups().subscribe(this._updateLinkingGroups), this._updateLinkingGroups(), this._activeLinkingGroupIndex = e.activeLinkingGroup().spawn(), this._activeLinkingGroupIndex.subscribe((e => {
                        this._activeLinkingGroup.setValue(this._linkingGroup(e))
                    }), {
                        callWithLast: !0
                    }), this._linkingGroups.forEach((t => t.bindToChartWidgetCollection(e)))
                }
                bindToSearchCharts(e) {
                    this.unbindFromSearchCharts(), this._searchCharts = e, e.onSearchBySymbol.subscribe(this, this._onSearchBySymbol), e.loadingSymbol.subscribe((e => {
                        !1 === e && (this._feedBySymbolDebounceCounter = 0)
                    })), this._watchedSymbol.subscribe(this._onSymbolLinkBound)
                }
                unbindFromSearchCharts() {
                    this._searchCharts && (this._searchCharts.onSearchBySymbol.unsubscribe(this, this._onSearchBySymbol), this._watchedSymbol.unsubscribe(this._onSymbolLinkBound), this._searchCharts = null)
                }
                setPreventFeedBySymbol(e) {
                    this._preventFeedBySymbol = e
                }
                setSymbolAndLogInitiator(e, t, o) {
                    (this.symbol.value() !== e || o) && (_.logInfo(`Change linking symbol to ${e}, initiator: ${t}`), this.symbol.setValue(e, o))
                }
                _onSearchBySymbol(e) {
                    if (!e.resolved_symbol) throw new Error("no resolved_symbol");
                    this._selfEmit = !0, this._watchedSymbol.setValue(e.resolved_symbol), this._selfEmit = !1
                }
                _onSymbolLink(e) {
                    if (!this._selfEmit) {
                        if (!this._searchCharts) {
                            const e = "No search charts defined";
                            throw _.logError(e), new Error(e)
                        }
                        this._preventFeedBySymbol || this._loadSearchCharts(e)
                    }
                }
                _loadSearchCharts(e) {
                    if (!this._searchCharts) {
                        const e = "No search charts defined";
                        throw _.logError(e), new Error(e)
                    }
                    if (this._searchChartsLoadDebounced) return void(this._feedBySymbolDebounceCounter < 100 && (this._feedBySymbolDebounceCounter++, this._searchChartsLoadDebounced(e)));
                    const t = e => this._searchCharts ? (!0 === this._searchCharts.loadingSymbol.value() ? this._feedBySymbolDebounceCounter < 100 && (this._feedBySymbolDebounceCounter++, this._searchChartsLoadDebounced = (0, i.default)(t, 2e3), this._searchChartsLoadDebounced(e)) : this._searchChartsLoadDebounced = null, this._searchCharts.feedBySymbol.call(this._searchCharts, e)) : () => {};
                    !0 === this._searchCharts.loadingSymbol.value() ? this._feedBySymbolDebounceCounter < 100 && (this._feedBySymbolDebounceCounter++, this._searchChartsLoadDebounced = (0, i.default)(t, 2e3), this._searchChartsLoadDebounced(e)) : this._searchCharts.feedBySymbol(e)
                }
                _linkingGroup(e) {
                    let t = this._linkingGroups.get(e);
                    if (void 0 === t) {
                        const o = {
                            watchedSymbol: this._watchedSymbol,
                            seriesShortSymbol: this._seriesShortSymbol,
                            proSymbol: this._proSymbol,
                            ensuredProSymbol: this._ensuredProSymbol,
                            watchedInterval: this._watchedInterval,
                            watchedIntraday: this._watchedIntraday,
                            watchedSeconds: this._watchedSeconds,
                            watchedTicks: this._watchedTicks,
                            watchedDataFrequencyResolution: this._watchedDataFrequencyResolution,
                            watchedRange: this._watchedRange,
                            watchedSupportedResolutions: this._watchedSupportedResolutions,
                            watchedSupportedChartStyles: this._watchedSupportedChartStyles,
                            symbolNamesList: this._symbolNamesList
                        };
                        t = new g(e, o, (() => this._activeLinkingGroup.value())), this._linkingGroups.set(e, t), this._chartWidgetCollection && t.bindToChartWidgetCollection(this._chartWidgetCollection)
                    }
                    return t
                }
                _unbindFromChartWidgetCollection() {
                    var e;
                    null !== this._chartWidgetCollection && (null === (e = this._activeLinkingGroupIndex) || void 0 === e || e.destroy(), this._activeLinkingGroupIndex = null, this._linkingGroups.forEach((e => e.unbindFromChartWidgetCollection())), this._chartWidgetCollection.allLinkingGroups().unsubscribe(this._updateLinkingGroups), this._chartWidgetCollection = null)
                }
            }; {
                const e = (0, d.getFreshInitData)().symbolInfo,
                    t = e ? e.pro_symbol : c.getValue("editchart.model.symbol", window.DEFAULT_SYMBOL);
                m.setSymbolAndLogInitiator(t, "initial data")
            }
            window.TradingViewApi || (window.TradingViewApi = {
                linking: m
            })
        },
        575658: (e, t, o) => {
            "use strict";
            o.d(t, {
                setFixedBodyState: () => l
            });
            var i = o(76107),
                r = o(531327);
            let n = 0,
                s = !1;

            function l(e) {
                const {
                    body: t
                } = document, o = t.querySelector(".widgetbar-wrap");
                if (e && 1 == ++n) {
                    const e = (0, i.getCSSProperty)(t, "overflow"),
                        r = (0, i.getCSSPropertyNumericValue)(t, "padding-right");
                    "hidden" !== e.toLowerCase() && t.scrollHeight > t.offsetHeight && ((0, i.setStyle)(o, "right", `${(0,i.getScrollbarWidth)()}px`), t.style.paddingRight = `${r+(0,i.getScrollbarWidth)()}px`, s = !0), t.classList.add("i-no-scroll")
                } else if (!e && n > 0 && 0 == --n && (t.classList.remove("i-no-scroll"), s)) {
                    (0, i.setStyle)(o, "right", "0px");
                    let e = 0;
                    e = o ? (0, r.getWidgetBarPadding)((0, i.getContentWidth)(o)) : 0, t.scrollHeight <= t.clientHeight && (e -= (0, i.getScrollbarWidth)()), t.style.paddingRight = (e < 0 ? 0 : e) + "px", s = !1
                }
            }
        },
        912445: (e, t, o) => {
            "use strict";
            let i;

            function r(e, t) {
                null == i || i(e, t)
            }

            function n(e) {
                i = e
            }
            o.d(t, {
                muteLinkingGroup: () => r,
                setMuteLinkingGroup: () => n
            })
        },
        631456: (e, t, o) => {
            "use strict";
            o.d(t, {
                createReactRoot: () => l
            });
            var i = o(50959),
                r = o(632227),
                n = o(904237),
                s = o(957114);

            function l(e, t, o = "legacy") {
                const l = i.createElement(s.TVAppContextProvider, null, e);
                if ("modern" === o) {
                    const e = (0, n.createRoot)(t);
                    return e.render(l), {
                        render(t) {
                            e.render(i.createElement(s.TVAppContextProvider, null, t))
                        },
                        unmount() {
                            e.unmount()
                        }
                    }
                }
                return r.render(l, t), {
                    render(e) {
                        r.render(i.createElement(s.TVAppContextProvider, null, e), t)
                    },
                    unmount() {
                        r.unmountComponentAtNode(t)
                    }
                }
            }
        },
        318557: (e, t, o) => {
            "use strict";
            o.d(t, {
                contentHeight: () => r.contentHeight,
                outerHeight: () => r.outerHeight,
                outerWidth: () => r.outerWidth,
                position: () => s
            });
            var i = o(650151),
                r = o(746326);

            function n(e) {
                if (!e.getClientRects().length) return {
                    top: 0,
                    left: 0
                };
                const t = e.getBoundingClientRect(),
                    o = (0, i.ensureNotNull)(e.ownerDocument.defaultView);
                return {
                    top: t.top + o.pageYOffset,
                    left: t.left + o.pageXOffset
                }
            }

            function s(e) {
                const t = getComputedStyle(e);
                let o, i = {
                    top: 0,
                    left: 0
                };
                if ("fixed" === t.position) o = e.getBoundingClientRect();
                else {
                    o = n(e);
                    const t = e.ownerDocument;
                    let r = e.offsetParent || t.documentElement;
                    for (; r && (r === t.body || r === t.documentElement) && "static" === getComputedStyle(r).position;) r = r.parentElement;
                    r && r !== e && 1 === r.nodeType && (i = n(r), i.top += parseFloat(getComputedStyle(r).borderTopWidth), i.left += parseFloat(getComputedStyle(r).borderLeftWidth))
                }
                return {
                    top: o.top - i.top - parseFloat(t.marginTop),
                    left: o.left - i.left - parseFloat(t.marginLeft)
                }
            }
        },
        526225: (e, t, o) => {
            "use strict";
            o.d(t, {
                syncUserConversionData: () => h,
                syncUserData: () => d
            });
            var i = o(338619),
                r = o(345848),
                n = o(702598),
                s = o(875385);
            const l = (0, i.getLogger)("User.Sync");

            function a(e) {
                return `${e}_${window.user&&window.user.username||""}`
            }

            function c(e, t, o, i = !0) {
                o !== window.user.pro_plan && (window.user.pro_plan = o, window.user.is_pro = Boolean(o), (0, r.trackEvent)("Sync User Data", "Different Pro Plan", a(e))), t !== window.is_authenticated && (window.is_authenticated = t, i && window.loginStateChange.fire(), (0, r.trackEvent)("Sync User Data", "Different Auth", a(e)))
            }
            async function d(e) {
                try {
                    c(e, !0, (await (0, s.getProPlanDetailsForUser)()).pro_plan)
                } catch (t) {
                    ! function(e, t) {
                        403 === t.status && ["not_authenticated", "login_required"].includes(t.type || "") ? c(e, !1, void 0) : l.logError(t.message)
                    }(e, t)
                }
            }
            async function h(e, t = !0) {
                var o;
                const i = new URL("/pricing/", window.location.origin),
                    r = new URLSearchParams(window.location.search);
                r.has("_test_country") && i.searchParams.append("_test_country", null !== (o = r.get("_test_country")) && void 0 !== o ? o : "");
                const s = await (0, n.fetch)(i.href),
                    l = await s.json();
                return c(e, l.is_authenticated, l.user.pro_plan, t), l
            }
        },
        763532: (e, t, o) => {
            "use strict";
            o.d(t, {
                escapeCSVValue: () => a,
                saveTextFile: () => r
            });
            var i = o(638456);

            function r(e, t, o = "text/plain") {
                const r = new Blob([t], {
                    type: o
                });
                if (i.CheckMobile.iOS()) {
                    const t = new FileReader;
                    return t.onload = () => {
                        t.result && n(e, t.result.toString())
                    }, void t.readAsDataURL(r)
                }
                const s = window.URL.createObjectURL(r);
                navigator.msSaveOrOpenBlob ? navigator.msSaveOrOpenBlob(r, e) : window.navigator.msSaveBlob ? window.navigator.msSaveBlob(r, e) : (n(e, s), window.URL.revokeObjectURL(s))
            }

            function n(e, t) {
                const o = document.createElement("a");
                o.style.display = "none", document.body.appendChild(o), o.href = t, o.download = e, o.click(), document.body.removeChild(o)
            }
            const s = /[",\r\n]/,
                l = /"/g;

            function a(e) {
                return s.test(e) ? `"${e.replace(l,'""')}"` : e
            }
        },
        484400: (e, t, o) => {
            "use strict";
            o.d(t, {
                DEFAULT_THEME: () => i
            });
            const i = "light"
        },
        994123: (e, t, o) => {
            "use strict";
            o.d(t, {
                themes: () => a
            });
            var i = o(61499),
                r = o(444372);
            const n = JSON.parse('{"color-header-bg":"color-black","color-body-bg":"color-black","color-body-secondary-bg":"color-cold-gray-900","color-bg-primary":"color-cold-gray-850","color-bg-primary-hover":"color-cold-gray-800","color-bg-secondary":"color-cold-gray-900","color-bg-highlight":"color-cold-gray-900","color-bg-scroll-buttons":"color-cold-gray-800","color-legacy-bg-scroll-buttons":"color-cold-gray-550","color-legacy-bg-widget":"color-cold-gray-900","color-text-primary":"color-cold-gray-200","color-text-secondary":"color-cold-gray-450","color-text-tertiary":"color-cold-gray-400","color-text-disabled":"color-cold-gray-650","color-accent-content":"color-white","color-divider":"color-cold-gray-700","color-divider-hover":"color-cold-gray-800","color-divider-secondary":"color-cold-gray-800","color-box-shadow":"color-cold-gray-900","color-active-hover-text":"color-cold-gray-200","color-alert-text":"color-cold-gray-200","color-border":"color-cold-gray-750","color-border-chat-fields":"color-cold-gray-750","color-border-hover":"color-cold-gray-650","color-border-table":"color-cold-gray-800","color-brand":"color-tv-blue-500","color-brand-hover":"color-tv-blue-600","color-brand-active":"color-tv-blue-700","color-button-hover-bg":"color-cold-gray-850","color-chart-page-bg":"color-cold-gray-800","color-common-tooltip-bg":"color-cold-gray-750","color-danger":"color-ripe-red-600","color-danger-hover":"color-ripe-red-500","color-danger-active":"color-ripe-red-400","color-depthrenderer-fill-style":"color-cold-gray-150","color-depthrenderer-stroke-style":"color-cold-gray-650","color-disabled-border-and-color":"color-cold-gray-800","color-disabled-input":"color-cold-gray-750","color-empty-container-message":"color-cold-gray-450","color-halal":"color-iguana-green-400","color-continuous":"color-cold-gray-500","color-highlight-new":"color-tv-blue-a800","color-icons":"color-cold-gray-450","color-input-bg":"color-cold-gray-800","color-input-textarea-readonly":"color-cold-gray-650","color-input-placeholder-text":"color-cold-gray-700","color-input-publish-bg":"color-cold-gray-900","color-item-active-blue":"color-tv-blue-a900","color-item-hover-active-bg":"color-cold-gray-800","color-item-hover-bg":"color-cold-gray-800","color-item-hover-blue":"color-tv-blue-a800","color-item-selected-blue":"color-tv-blue-a800","color-item-active-text":"color-cold-gray-200","color-item-active-bg":"color-tv-blue-500","color-link":"color-tv-blue-500","color-link-hover":"color-tv-blue-600","color-link-active":"color-tv-blue-700","color-list-item":"color-cold-gray-450","color-list-nth-child-bg":"color-cold-gray-850","color-news-highlight":"color-cold-gray-800","color-pane-bg":"color-cold-gray-900","color-pane-secondary-bg":"color-cold-gray-850","color-placeholder":"color-cold-gray-650","color-popup-menu-item-hover-bg":"color-cold-gray-800","color-popup-menu-separator":"color-cold-gray-700","color-primary-symbol":"color-sky-blue-500","color-row-hover-active-bg":"color-cold-gray-800","color-sb-scrollbar-body-bg":"color-cold-gray-650","color-screener-description":"color-cold-gray-200","color-section-separator-border":"color-cold-gray-750","color-search-button-hover":"color-cold-gray-700","color-separator-table-chat":"color-cold-gray-750","color-success":"color-minty-green-700","color-success-hover":"color-minty-green-600","color-success-active":"color-minty-green-500","color-tag-active-bg":"color-cold-gray-750","color-tag-hover-bg":"color-cold-gray-800","color-text-regular":"color-cold-gray-200","color-toolbar-button-text":"color-cold-gray-200","color-toolbar-button-text-hover":"color-cold-gray-200","color-toolbar-button-text-active":"color-tv-blue-500","color-toolbar-button-text-active-hover":"color-tv-blue-600","color-toolbar-button-background-hover":"color-cold-gray-800","color-toolbar-button-background-secondary-hover":"color-cold-gray-750","color-toolbar-button-background-active":"color-tv-blue-a900","color-toolbar-button-background-active-hover":"color-tv-blue-a800","color-toolbar-toggle-button-background-active":"color-tv-blue-500","color-toolbar-toggle-button-background-active-hover":"color-tv-blue-600","color-toolbar-toggle-button-icon":"color-cold-gray-650","color-toolbar-interactive-element-text-normal":"color-cold-gray-200","color-toolbar-opened-element-bg":"color-cold-gray-800","color-toolbar-divider-background":"color-cold-gray-700","color-popup-background":"color-cold-gray-850","color-popup-element-text":"color-cold-gray-200","color-popup-element-text-hover":"color-cold-gray-250","color-popup-element-background-hover":"color-cold-gray-800","color-popup-element-secondary-text":"color-cold-gray-500","color-popup-element-hint-text":"color-cold-gray-600","color-popup-element-text-active":"color-cold-gray-200","color-popup-element-background-active":"color-tv-blue-500","color-popup-element-toolbox-text":"color-cold-gray-500","color-popup-element-toolbox-text-hover":"color-cold-gray-200","color-popup-element-toolbox-text-active-hover":"color-tv-blue-200","color-popup-element-toolbox-background-hover":"color-cold-gray-750","color-popup-element-toolbox-background-active-hover":"color-tv-blue-700","color-tooltip-bg":"color-cold-gray-750","color-tv-button-checked":"color-cold-gray-450","color-tv-dialog-caption":"color-cold-gray-50","color-tv-dropdown-item-hover-bg":"color-cold-gray-800","color-underlined-text":"color-cold-gray-450","color-widget-pages-bg":"color-cold-gray-900","color-warning":"color-tan-orange-700","color-forex-icon":"color-white","color-list-item-active-bg":"color-tv-blue-500","color-list-item-hover-bg":"color-cold-gray-800","color-list-item-text":"color-cold-gray-200","color-price-axis-label-back":"color-cold-gray-800","color-price-axis-label-text":"color-cold-gray-500","color-price-axis-gear":"color-cold-gray-200","color-price-axis-gear-hover":"color-cold-gray-400","color-price-axis-highlight":"color-cold-gray-800","color-bid":"color-tv-blue-500","color-scroll-bg":"color-cold-gray-750","color-scroll-border":"color-cold-gray-850","color-widget-border":"color-cold-gray-800","color-scroll-buttons-arrow":"color-white","color-control-intent-default":"color-cold-gray-650","color-control-intent-success":"color-minty-green-500","color-control-intent-primary":"color-tv-blue-500","color-control-intent-warning":"color-tan-orange-500","color-control-intent-danger":"color-ripe-red-500","color-growing":"color-minty-green-500","color-falling":"color-ripe-red-500","color-goto-label-background":"color-cold-gray-650","color-pre-market":"color-tan-orange-600","color-pre-market-bg":"color-tan-orange-400","color-post-market":"color-tv-blue-500","color-post-market-bg":"color-tv-blue-400","color-market-open":"color-minty-green-500","color-market-open-bg":"color-minty-green-400","color-market-closed":"color-cold-gray-400","color-market-holiday":"color-cold-gray-400","color-market-expired":"color-ripe-red-500","color-invalid-symbol":"color-ripe-red-400","color-invalid-symbol-hover":"color-ripe-red-500","color-delisted-symbol":"color-ripe-red-600","color-delisted-symbol-hover":"color-ripe-red-800","color-replay-mode":"color-tv-blue-500","color-replay-mode-point-select":"color-cold-gray-250","color-replay-mode-icon":"color-tv-blue-50","color-replay-mode-hover":"color-tv-blue-600","color-notaccurate-mode":"color-berry-pink-600","color-delay-mode":"color-tan-orange-700","color-delay-mode-bg":"color-tan-orange-400","color-eod-mode":"color-grapes-purple-700","color-eod-mode-bg":"color-grapes-purple-400","color-data-problem":"color-ripe-red-600","color-data-problem-bg":"color-ripe-red-400","color-data-problem-hover":"color-ripe-red-500","color-list-item-bg-highlighted":"color-tv-blue-a900","color-list-item-bg-selected":"color-tv-blue-a800","color-list-item-bg-highlighted-hover":"color-tv-blue-a800","color-list-item-bg-selected-hover":"color-tv-blue-a700","color-screener-header-bg":"color-cold-gray-850","color-screener-header-bg-hover":"color-cold-gray-800","color-overlay":"color-cold-gray-950","color-boost-button-content-selected":"color-tv-blue-100","color-boost-button-content-hover":"color-white","color-boost-button-bg-hover":"color-cold-gray-750","color-boost-button-border-hover":"color-cold-gray-750","color-boost-button-border-default":"color-cold-gray-700","color-x-twitter-content":"color-white","color-card-border":"color-cold-gray-700","color-card-border-hover":"color-cold-gray-600","color-background-special-primary":"color-black","color-stroke-special-primary":"color-cold-gray-800","color-selection-bg":"color-tv-blue-a700","color-default-gray":"color-cold-gray-450","color-featured-broker-badge-bg":"color-white","color-featured-broker-badge-bg-hover":"color-cold-gray-100","color-featured-broker-badge-text":"color-cold-gray-900"}'),
                s = JSON.parse('{"color-toolbar-button-text-active":"color-seeking-alpha-brand"}');
            var l = o(960095);
            const a = {
                [i.StdTheme.Light]: {
                    name: i.StdTheme.Light,
                    label: () => r.t(null, {
                        context: "colorThemeName"
                    }, o(696870)),
                    order: 2,
                    getThemedColor: e => (0, l.getHexColorByName)(e)
                },
                [i.StdTheme.Dark]: {
                    name: i.StdTheme.Dark,
                    label: () => r.t(null, {
                        context: "colorThemeName"
                    }, o(185119)),
                    order: 1,
                    getThemedColor: e => {
                        const t = n[e] || e;
                        return (0, l.getHexColorByName)(t)
                    }
                }
            };
            a.sa = {
                isPrivate: !0,
                noChartTheme: !0,
                name: "sa",
                getThemedColor: e => {
                    const t = s[e] || e;
                    return (0, l.getHexColorByName)(t)
                }
            }
        },
        787703: (e, t, o) => {
            "use strict";
            o.r(t), o.d(t, {
                isThemeExist: () => d,
                loadTheme: () => s,
                loadThemes: () => l,
                removeTheme: () => c,
                saveTheme: () => a
            });
            var i = o(702598);
            const r = (0, o(338619).getLogger)("Themes.Provider");
            let n = null;

            function s(e) {
                return (0, i.fetch)("/theme/?themeName=" + encodeURIComponent(e), {
                    credentials: "include",
                    method: "GET"
                }).then((e => e.json())).then((e => {
                    const t = {};
                    return e.content && (t.content = JSON.parse(e.content)), t
                }))
            }

            function l() {
                return n || (0, i.fetch)("/themes/", {
                    credentials: "include",
                    method: "GET"
                }).then((e => (n = e.json(), n)))
            }

            function a(e, t) {
                const o = new FormData;
                return o.append("content", JSON.stringify(t)), o.append("name", e), n = null, (0, i.fetch)("/save-theme/", {
                    credentials: "include",
                    method: "POST",
                    body: o
                }).then((e => e.json()), (e => r.logError(e)))
            }

            function c(e) {
                const t = new FormData;
                return t.append("name", e), n = null, (0, i.fetch)("/remove-theme/", {
                    credentials: "include",
                    method: "POST",
                    body: t
                }).then((e => e.json()), (e => r.logError(e)))
            }

            function d(e) {
                return s(e).then((e => Boolean(e.content)))
            }
        },
        674131: (e, t, o) => {
            "use strict";
            o.d(t, {
                dark: () => Z
            });
            var i = o(553407);
            const {
                colorWhite: r,
                colorColdGray100Alpha0: n,
                colorColdGray100Alpha6: s,
                colorColdGray200: l,
                colorColdGray300: a,
                colorColdGray400: c,
                colorColdGray450: d,
                colorColdGray600: h,
                colorColdGray800: u,
                colorColdGray900: p,
                colorDeepBlueA200: _,
                colorGrapesPurpleA200Alpha15: g,
                colorMintyGreen400: m,
                colorMintyGreen500: v,
                colorMintyGreen600: f,
                colorMintyGreen800: y,
                colorMintyGreen500Alpha5: b,
                colorMintyGreen500Alpha20: w,
                colorMintyGreen500Alpha28: S,
                colorMintyGreen500Alpha50: C,
                colorMintyGreenA900: k,
                colorRipeRed400: x,
                colorRipeRed500: F,
                colorRipeRed600: T,
                colorRipeRed800: M,
                colorRipeRed500Alpha5: A,
                colorRipeRed500Alpha20: D,
                colorRipeRed500Alpha28: E,
                colorRipeRed500Alpha50: $,
                colorRipeRedA900: I,
                colorBerryPink400Alpha50: P,
                colorBerryPink400Alpha75: B,
                colorBerryPink500: R,
                colorIguanaGreenA700: L,
                colorSkyBlue400Alpha5: O,
                colorSkyBlue400Alpha50: W,
                colorSkyBlue400Alpha75: N,
                colorSkyBlue500: V,
                colorDeepBlueA400: j,
                colorTvBlue400: q,
                colorTvBlue500: U,
                colorTvBlue500Alpha28: H,
                colorTvBlue600: z,
                colorTvBlue800: G,
                colorTvBlueA800: K,
                colorTanOrange500: X,
                colorTanOrange600: Y
            } = i.colors, Z = {
                content: {
                    chartProperties: {
                        scalesProperties: {
                            textColor: a,
                            lineColor: n,
                            backgroundColor: r
                        },
                        paneProperties: {
                            vertGridProperties: {
                                color: s
                            },
                            horzGridProperties: {
                                color: s
                            },
                            crossHairProperties: {
                                color: c
                            },
                            background: p,
                            backgroundGradientStartColor: "#181C27",
                            backgroundGradientEndColor: p,
                            backgroundType: "gradient",
                            separatorColor: u
                        }
                    },
                    sessions: {
                        graphics: {
                            backgrounds: {
                                outOfSession: {
                                    color: U,
                                    transparency: 92
                                },
                                preMarket: {
                                    color: X,
                                    transparency: 92
                                },
                                postMarket: {
                                    color: U,
                                    transparency: 92
                                }
                            },
                            vertlines: {
                                sessBreaks: {
                                    color: "#4985e7"
                                }
                            }
                        }
                    },
                    mainSourceProperties: {
                        baseLineColor: h,
                        prevClosePriceLineColor: "#555555",
                        priceLineColor: "",
                        highLowAvgPrice: {
                            highLowPriceLinesColor: "",
                            averagePriceLineColor: ""
                        },
                        bidAsk: {
                            bidLineColor: U,
                            askLineColor: x
                        },
                        prePostMarket: {
                            preMarketColor: Y,
                            postMarketColor: U
                        },
                        candleStyle: {
                            borderColor: "#378658",
                            upColor: v,
                            wickColor: "#737375",
                            wickUpColor: v,
                            wickDownColor: F,
                            downColor: F,
                            borderUpColor: v,
                            borderDownColor: F
                        },
                        volCandlesStyle: {
                            borderColor: "#378658",
                            upColor: v,
                            wickColor: "#737375",
                            wickUpColor: v,
                            wickDownColor: F,
                            downColor: F,
                            borderUpColor: v,
                            borderDownColor: F
                        },
                        haStyle: {
                            borderColor: "#378658",
                            upColor: v,
                            wickColor: "#737375",
                            wickUpColor: v,
                            wickDownColor: F,
                            downColor: F,
                            borderUpColor: v,
                            borderDownColor: F
                        },
                        hlcAreaStyle: {
                            highLineColor: v,
                            lowLineColor: F,
                            closeLineColor: d,
                            highCloseFillColor: w,
                            closeLowFillColor: D
                        },
                        hollowCandleStyle: {
                            upColor: v,
                            downColor: F,
                            borderColor: "#378658",
                            borderUpColor: v,
                            borderDownColor: F,
                            wickColor: "#737375",
                            wickUpColor: v,
                            wickDownColor: F
                        },
                        barStyle: {
                            downColor: F,
                            upColor: v
                        },
                        pnfStyle: {
                            downColor: F,
                            upColor: v,
                            upColorProjection: "#336854",
                            downColorProjection: "#7f323f"
                        },
                        baselineStyle: {
                            baselineColor: d,
                            topFillColor1: S,
                            topFillColor2: b,
                            bottomFillColor1: A,
                            bottomFillColor2: E,
                            topLineColor: v,
                            bottomLineColor: F
                        },
                        areaStyle: {
                            transparency: 100,
                            color1: H,
                            color2: U,
                            linecolor: U
                        },
                        hiloStyle: {
                            color: U,
                            borderColor: U,
                            labelColor: U
                        },
                        columnStyle: {
                            upColor: C,
                            downColor: $
                        },
                        renkoStyle: {
                            upColor: v,
                            downColor: F,
                            borderUpColor: v,
                            borderDownColor: F,
                            upColorProjection: "#336854",
                            downColorProjection: "#7f323f",
                            borderUpColorProjection: "#336854",
                            borderDownColorProjection: "#7f323f",
                            wickUpColor: v,
                            wickDownColor: F
                        },
                        lineStyle: {
                            color: U
                        },
                        lineWithMarkersStyle: {
                            color: U
                        },
                        steplineStyle: {
                            color: U
                        },
                        kagiStyle: {
                            downColor: F,
                            upColor: v,
                            upColorProjection: "#336854",
                            downColorProjection: "#7f323f"
                        },
                        pbStyle: {
                            upColor: v,
                            downColor: F,
                            borderUpColor: v,
                            borderDownColor: F,
                            upColorProjection: "#336854",
                            downColorProjection: "#7f323f",
                            borderUpColorProjection: "#336854",
                            borderDownColorProjection: "#7f323f"
                        },
                        rangeStyle: {
                            upColor: v,
                            downColor: F,
                            upColorProjection: "#336854",
                            downColorProjection: "#7f323f",
                            candlesUpColor: v,
                            candlesDownColor: F,
                            candlesBorderUpColor: v,
                            candlesBorderDownColor: F,
                            candlesWickUpColor: v,
                            candlesWickDownColor: F
                        },
                        tpoStyle: {
                            color: U,
                            tpo: {
                                colors: {
                                    gradientColors: [R, L, V, j]
                                }
                            },
                            volumeProfile: {
                                valuesColor: l,
                                vah: {
                                    color: l
                                },
                                val: {
                                    color: l
                                },
                                poc: {
                                    color: l
                                },
                                volumeColor: W,
                                valueAreaColor: N
                            },
                            levels: {
                                pocColor: l,
                                poorHighColor: _,
                                poorLowColor: _,
                                singleprintsColor: g,
                                vahColor: l,
                                valColor: l
                            }
                        },
                        volFootprintStyle: {
                            upColor: v,
                            downColor: F,
                            borderColor: "#378658",
                            borderUpColor: v,
                            borderDownColor: F,
                            wickColor: "#737375",
                            wickUpColor: v,
                            wickDownColor: F,
                            imbalanceHighlight: {
                                buyColor: v,
                                sellColor: F
                            },
                            bgColors: {
                                adjBuyBgColors: [k, y, f, m],
                                adjSellBgColors: [I, M, T, x],
                                adjTotalBgColors: [K, G, z, q],
                                buyBgColor: y,
                                sellBgColor: M,
                                totalBgColor: G,
                                pocColor: l
                            }
                        },
                        svpStyle: {
                            volumeProfile: {
                                valuesColor: l,
                                volumeColorUp: W,
                                volumeColorDown: P,
                                valueAreaColorUp: N,
                                valueAreaColorDown: B,
                                histogramBoxColor: O
                            },
                            vah: {
                                color: l
                            },
                            val: {
                                color: l
                            },
                            poc: {
                                color: l
                            },
                            developingPoc: {
                                color: l
                            },
                            developingVA: {
                                color: V
                            }
                        }
                    }
                }
            }
        },
        753460: (e, t, o) => {
            "use strict";
            o.d(t, {
                light: () => Y
            });
            var i = o(553407);
            const {
                colorWhite: r,
                colorBlack: n,
                colorColdGray150: s,
                colorColdGray300: l,
                colorColdGray400: a,
                colorColdGray450: c,
                colorColdGray800Alpha0: d,
                colorColdGray800Alpha6: h,
                colorColdGray900: u,
                colorGrapesPurpleA200Alpha15: p,
                colorMintyGreen200: _,
                colorMintyGreen400: g,
                colorMintyGreen500: m,
                colorMintyGreen600: v,
                colorMintyGreen800: f,
                colorMintyGreen500Alpha5: y,
                colorMintyGreen500Alpha20: b,
                colorMintyGreen500Alpha28: w,
                colorMintyGreen500Alpha50: S,
                colorRipeRed200: C,
                colorRipeRed400: k,
                colorRipeRed500: x,
                colorRipeRed600: F,
                colorRipeRedA700: T,
                colorRipeRed500Alpha5: M,
                colorRipeRed500Alpha28: A,
                colorRipeRed500Alpha50: D,
                colorRipeRed500Alpha20: E,
                colorDeepBlueA700: $,
                colorBerryPink500: I,
                colorBerryPink400Alpha50: P,
                colorBerryPink400Alpha75: B,
                colorIguanaGreenA700: R,
                colorSkyBlue400Alpha5: L,
                colorSkyBlue400Alpha50: O,
                colorSkyBlue400Alpha75: W,
                colorSkyBlue500: N,
                colorDeepBlueA400: V,
                colorTvBlue200: j,
                colorTvBlue400: q,
                colorTvBlue500: U,
                colorTvBlue500Alpha28: H,
                colorTvBlue600: z,
                colorTvBlue800: G,
                colorTanOrange500: K,
                colorTanOrange600: X
            } = i.colors, Y = {
                content: {
                    chartProperties: {
                        scalesProperties: {
                            textColor: u,
                            lineColor: d,
                            backgroundColor: r
                        },
                        paneProperties: {
                            vertGridProperties: {
                                color: h
                            },
                            horzGridProperties: {
                                color: h
                            },
                            crossHairProperties: {
                                color: a
                            },
                            backgroundType: "solid",
                            background: r,
                            backgroundGradientStartColor: r,
                            backgroundGradientEndColor: r,
                            separatorColor: s
                        }
                    },
                    sessions: {
                        graphics: {
                            backgrounds: {
                                outOfSession: {
                                    color: U,
                                    transparency: 92
                                },
                                preMarket: {
                                    color: K,
                                    transparency: 92
                                },
                                postMarket: {
                                    color: U,
                                    transparency: 92
                                }
                            },
                            vertlines: {
                                sessBreaks: {
                                    color: "#4985e7"
                                }
                            }
                        }
                    },
                    mainSourceProperties: {
                        baseLineColor: l,
                        prevClosePriceLineColor: "#555555",
                        priceLineColor: "",
                        highLowAvgPrice: {
                            highLowPriceLinesColor: "",
                            averagePriceLineColor: ""
                        },
                        bidAsk: {
                            bidLineColor: U,
                            askLineColor: k
                        },
                        prePostMarket: {
                            preMarketColor: X,
                            postMarketColor: U
                        },
                        candleStyle: {
                            borderColor: "#378658",
                            upColor: m,
                            wickColor: "#737375",
                            wickUpColor: m,
                            wickDownColor: x,
                            downColor: x,
                            borderUpColor: m,
                            borderDownColor: x
                        },
                        volCandlesStyle: {
                            borderColor: "#378658",
                            upColor: m,
                            wickColor: "#737375",
                            wickUpColor: m,
                            wickDownColor: x,
                            downColor: x,
                            borderUpColor: m,
                            borderDownColor: x
                        },
                        haStyle: {
                            borderColor: "#378658",
                            upColor: m,
                            wickColor: "#737375",
                            wickUpColor: m,
                            wickDownColor: x,
                            downColor: x,
                            borderUpColor: m,
                            borderDownColor: x
                        },
                        hlcAreaStyle: {
                            highLineColor: m,
                            lowLineColor: x,
                            closeLineColor: c,
                            highCloseFillColor: b,
                            closeLowFillColor: E
                        },
                        hollowCandleStyle: {
                            upColor: m,
                            downColor: x,
                            borderColor: "#378658",
                            borderUpColor: m,
                            borderDownColor: x,
                            wickColor: "#737375",
                            wickUpColor: m,
                            wickDownColor: x
                        },
                        barStyle: {
                            downColor: x,
                            upColor: m
                        },
                        pnfStyle: {
                            downColor: x,
                            upColor: m,
                            upColorProjection: "#a9dcc3",
                            downColorProjection: "#f5a6ae"
                        },
                        baselineStyle: {
                            baselineColor: c,
                            topFillColor1: w,
                            topFillColor2: y,
                            bottomFillColor1: M,
                            bottomFillColor2: A,
                            topLineColor: m,
                            bottomLineColor: x
                        },
                        areaStyle: {
                            transparency: 100,
                            color1: H,
                            color2: U,
                            linecolor: U
                        },
                        hiloStyle: {
                            color: U,
                            borderColor: U,
                            labelColor: U
                        },
                        columnStyle: {
                            upColor: S,
                            downColor: D
                        },
                        renkoStyle: {
                            upColor: m,
                            downColor: x,
                            borderUpColor: m,
                            borderDownColor: x,
                            upColorProjection: "#a9dcc3",
                            downColorProjection: "#f5a6ae",
                            borderUpColorProjection: "#a9dcc3",
                            borderDownColorProjection: "#f5a6ae",
                            wickUpColor: m,
                            wickDownColor: x
                        },
                        lineStyle: {
                            color: U
                        },
                        lineWithMarkersStyle: {
                            color: U
                        },
                        steplineStyle: {
                            color: U
                        },
                        kagiStyle: {
                            downColor: x,
                            upColor: m,
                            upColorProjection: "#a9dcc3",
                            downColorProjection: "#f5a6ae"
                        },
                        pbStyle: {
                            upColor: m,
                            downColor: x,
                            borderUpColor: m,
                            borderDownColor: x,
                            upColorProjection: "#a9dcc3",
                            downColorProjection: "#f5a6ae",
                            borderUpColorProjection: "#a9dcc3",
                            borderDownColorProjection: "#f5a6ae"
                        },
                        rangeStyle: {
                            upColor: m,
                            downColor: x,
                            upColorProjection: "#a9dcc3",
                            downColorProjection: "#f5a6ae",
                            candlesUpColor: m,
                            candlesDownColor: x,
                            candlesBorderUpColor: m,
                            candlesBorderDownColor: x,
                            candlesWickUpColor: m,
                            candlesWickDownColor: x
                        },
                        tpoStyle: {
                            color: U,
                            tpo: {
                                colors: {
                                    gradientColors: [I, R, N, V]
                                }
                            },
                            volumeProfile: {
                                valuesColor: u,
                                vah: {
                                    color: u
                                },
                                val: {
                                    color: u
                                },
                                poc: {
                                    color: u
                                },
                                volumeColor: O,
                                valueAreaColor: W
                            },
                            levels: {
                                pocColor: u,
                                poorHighColor: $,
                                poorLowColor: $,
                                singleprintsColor: p,
                                vahColor: u,
                                valColor: u
                            }
                        },
                        volFootprintStyle: {
                            upColor: m,
                            downColor: x,
                            borderColor: "#378658",
                            borderUpColor: m,
                            borderDownColor: x,
                            wickColor: "#737375",
                            wickUpColor: m,
                            wickDownColor: x,
                            imbalanceHighlight: {
                                buyColor: m,
                                sellColor: x
                            },
                            bgColors: {
                                adjBuyBgColors: [_, g, v, f],
                                adjSellBgColors: [C, k, F, T],
                                adjTotalBgColors: [j, q, z, G],
                                buyBgColor: g,
                                sellBgColor: k,
                                totalBgColor: q,
                                pocColor: n
                            }
                        },
                        svpStyle: {
                            volumeProfile: {
                                valuesColor: u,
                                volumeColorUp: O,
                                volumeColorDown: P,
                                valueAreaColorUp: W,
                                valueAreaColorDown: B,
                                histogramBoxColor: L
                            },
                            vah: {
                                color: u
                            },
                            val: {
                                color: u
                            },
                            poc: {
                                color: u
                            },
                            developingPoc: {
                                color: u
                            },
                            developingVA: {
                                color: N
                            }
                        }
                    }
                }
            }
        },
        86746: (e, t, o) => {
            "use strict";
            o.d(t, {
                darkTheme: () => c,
                getStdChartTheme: () => h,
                getStdThemeNames: () => d,
                lightTheme: () => a,
                translateThemeName: () => u
            });
            var i = o(444372),
                r = o(124829),
                n = o(753460),
                s = o(674131),
                l = o(61499);
            let a = (0, r.clone)(n.light),
                c = (0, r.clone)(s.dark);

            function d() {
                return [l.StdTheme.Light, l.StdTheme.Dark]
            }

            function h(e) {
                return {
                    [l.StdTheme.Light]: (0, r.clone)(a),
                    [l.StdTheme.Dark]: (0, r.clone)(c)
                }[e]
            }

            function u(e) {
                return {
                    [l.StdTheme.Light]: i.t(null, {
                        context: "colorThemeName"
                    }, o(696870)),
                    [l.StdTheme.Dark]: i.t(null, {
                        context: "colorThemeName"
                    }, o(185119))
                }[e] || e
            }
        },
        278855: (e, t, o) => {
            "use strict";

            function i() {
                return /(?:^|;)\s*theme=(dark|light)(?:;|$)|$/.exec(document.cookie)[1]
            }

            function r(e) {
                const t = function() {
                        const e = location.hostname.split(".").filter(Boolean);
                        return e.every(isFinite) ? location.host : e.slice(-2).join(".")
                    }(),
                    o = void 0 === e ? -1 : 3e8;
                document.cookie = `theme=${e};path=/;domain=${t};max-age=${o}`
            }
            o.d(t, {
                getThemeFromCookie: () => i,
                setThemeToCookie: () => r
            })
        },
        304986: (e, t, o) => {
            "use strict";
            o.d(t, {
                getThemeFromUserSettings: () => n,
                saveThemeInUserSettings: () => s
            });
            var i = o(62802),
                r = o(278855);

            function n() {
                return (0, r.getThemeFromCookie)() || (0, i.getValue)("current_theme.name") || null
            }

            function s(e) {
                (0, r.setThemeToCookie)(e), (0, i.setValue)("current_theme.name", e, {
                    forceFlush: !0
                })
            }
        },
        429874: (e, t, o) => {
            "use strict";
            o.r(t), o.d(t, {
                DEFAULT_THEME: () => c.DEFAULT_THEME,
                getCurrentTheme: () => u,
                getStdTheme: () => S,
                getStdThemeNames: () => b,
                getStdThemedValue: () => C,
                getTheme: () => f,
                getThemeNames: () => y,
                getThemedColor: () => p,
                isPublicTheme: () => h,
                isStdThemeName: () => w,
                isStdThemedDefaultValue: () => k,
                isThemeExist: () => T,
                loadTheme: () => _,
                removeTheme: () => F,
                restoreTheme: () => g,
                saveTheme: () => x,
                savedThemeName: () => m,
                syncTheme: () => v,
                themes: () => d.themes,
                translateStdThemeName: () => M
            });
            var i = o(724377),
                r = o(211183),
                n = o(304986);
            const s = o(787703);
            var l = o(86746),
                a = o(331633),
                c = o(484400),
                d = o(994123);

            function h(e) {
                return !e.isPrivate
            }

            function u() {
                return d.themes[a.watchedTheme.value()] || d.themes[c.DEFAULT_THEME]
            }

            function p(e) {
                return u().getThemedColor(e)
            }
            async function _(e, t) {
                const {
                    themeName: o,
                    standardTheme: i,
                    syncState: n = !0,
                    noUndo: s = !1,
                    applyOverrides: l = !1,
                    onlyActiveChart: a = !1
                } = t, c = await (i ? Promise.resolve(S(o)) : f(o)), d = !i;
                if (void 0 !== c.content) {
                    const t = !i || a;
                    l && (void 0 !== (h = c.content).chartProperties && (0, r.applyDefaultsOverrides)(h.chartProperties), void 0 !== h.mainSourceProperties && (0, r.applyDefaultsOverrides)(h.mainSourceProperties, void 0, !0, "mainSeriesProperties")), await e.applyTheme({
                        theme: c.content,
                        onlyActiveChart: t,
                        restoreNonThemeDefaults: d,
                        themeName: o,
                        standardTheme: i,
                        syncState: n,
                        noUndo: s
                    })
                }
                var h;
                return c
            }

            function g() {
                (0, a.setTheme)((0, n.getThemeFromUserSettings)() || c.DEFAULT_THEME)
            }

            function m() {
                return (0, n.getThemeFromUserSettings)()
            }

            function v() {
                (0, n.saveThemeInUserSettings)(u().name)
            }

            function f(e) {
                return s.loadTheme(e)
            }

            function y() {
                return s.loadThemes()
            }

            function b() {
                return l.getStdThemeNames()
            }

            function w(e) {
                return b().includes(e)
            }

            function S(e) {
                return l.getStdChartTheme(e) || {
                    content: void 0
                }
            }

            function C(e, t) {
                const o = t || u().name,
                    i = l.getStdChartTheme(o),
                    r = 0 !== e.length && e.split(".");
                return i && i.content && r ? r.reduce(((e, t) => e[t]), i.content) : null
            }

            function k(e, t, o) {
                const r = C(e, o);
                return null !== r && (0, i.areEqualRgba)((0, i.parseRgba)(r), (0, i.parseRgba)(String(t)))
            }

            function x(e, t) {
                return s.saveTheme(e, t)
            }

            function F(e) {
                return s.removeTheme(e)
            }

            function T(e) {
                return s.isThemeExist(e)
            }

            function M(e) {
                return l.translateThemeName(e)
            }
        },
        812352: (e, t, o) => {
            "use strict";
            o.d(t, {
                getLocale: () => s,
                getLocaleIso: () => l
            });
            var i = o(650151),
                r = o(882289);
            const n = function() {
                const e = document.querySelectorAll("link[rel~=link-locale][data-locale]");
                if (0 === e.length) return r;
                const t = {};
                return e.forEach((e => {
                    const o = (0, i.ensureNotNull)(e.getAttribute("data-locale"));
                    t[o] = { ...r[o],
                        href: e.href
                    }
                })), t
            }();

            function s(e) {
                return e = e || window.locale, n[e]
            }

            function l(e) {
                var t;
                return e = e || window.locale, null === (t = n[e]) || void 0 === t ? void 0 : t.iso
            }
        },
        642709: (e, t, o) => {
            "use strict";
            o.d(t, {
                DialogBreakpoints: () => r
            });
            var i = o(896108);
            const r = {
                SmallHeight: i["small-height-breakpoint"],
                TabletSmall: i["tablet-small-breakpoint"],
                TabletNormal: i["tablet-normal-breakpoint"]
            }
        },
        389401: (e, t, o) => {
            "use strict";
            o.d(t, {
                Measure: () => r
            });
            var i = o(444530);

            function r(e) {
                const {
                    children: t,
                    onResize: o
                } = e;
                return t((0, i.useResizeObserver)(o || (() => {}), [null === o]))
            }
        },
        2606: (e, t, o) => {
            "use strict";
            o.d(t, {
                isDetailsReady: () => i
            });
            const i = new(o(375397).WatchedValue)(!1)
        },
        137674: (e, t, o) => {
            "use strict";
            o.d(t, {
                createSymbolNote: () => g,
                showMindsPage: () => _,
                showSymbolIdeas: () => p,
                showSymbolNews: () => u,
                showSymbolNotes: () => h
            });
            var i = o(2606),
                r = o(421219),
                n = o(777453);
            async function s(e) {
                Promise.all([o.e(79706), o.e(75816), o.e(46445), o.e(93703), o.e(21356), o.e(62093), o.e(44524), o.e(2520), o.e(49481), o.e(53799), o.e(82421), o.e(59258), o.e(58985), o.e(75826), o.e(67158), o.e(29296), o.e(16356), o.e(97384), o.e(3782), o.e(49162), o.e(30358), o.e(17175), o.e(39967), o.e(81354), o.e(71938), o.e(27272), o.e(71553), o.e(44500), o.e(82321), o.e(16388), o.e(82311), o.e(11385), o.e(14742), o.e(73294), o.e(50996)]).then(o.bind(o, 768175)).then((t => {
                    t.renderNotesDialog(e)
                }))
            }
            var l = o(881607);
            var a = o(515828);
            let c = null;

            function d(e, t) {
                if (c && i.isDetailsReady.unsubscribe(c), c = () => {
                        var o, i, r;
                        (null === (r = null === (i = null === (o = null === window || void 0 === window ? void 0 : window.widgetbar) || void 0 === o ? void 0 : o.layout) || void 0 === i ? void 0 : i.getWidgetByType("detail")) || void 0 === r ? void 0 : r.widgetObject).navigate(e, t)
                    }, i.isDetailsReady.value()) return c(), void(c = null);
                i.isDetailsReady.subscribe(c, {
                    once: !0
                })
            }

            function h(e = null, t) {
                const o = (0, r.pathToGroup)(null != e ? e : "");
                t ? s(o) : d(o)
            }

            function u(e, t) {
                const i = (0, n.newsPathToGroup)(null != e ? e : "");
                t ? async function(e) {
                    (await Promise.all([o.e(4212), o.e(75816), o.e(93703), o.e(21356), o.e(62093), o.e(44524), o.e(2520), o.e(53953), o.e(49481), o.e(82421), o.e(74600), o.e(59258), o.e(58985), o.e(75826), o.e(67158), o.e(22164), o.e(49742), o.e(16190), o.e(97384), o.e(3782), o.e(49162), o.e(49325), o.e(85758), o.e(17175), o.e(7462), o.e(70125), o.e(18488), o.e(46879), o.e(52753), o.e(53791), o.e(4673), o.e(81029), o.e(82321), o.e(82464), o.e(66294), o.e(48975), o.e(84482)]).then(o.bind(o, 23154))).renderNewsDialog(e)
                }(i) : d(i)
            }

            function p(e, t) {
                const i = (0, l.ideasPathToGroup)(null != e ? e : "");
                t ? async function(e) {
                    (await Promise.all([o.e(10076), o.e(75816), o.e(46445), o.e(93703), o.e(21356), o.e(62093), o.e(44524), o.e(2520), o.e(62564), o.e(82421), o.e(59258), o.e(58985), o.e(67158), o.e(22164), o.e(16190), o.e(77280), o.e(97384), o.e(3782), o.e(49162), o.e(85758), o.e(52017), o.e(17175), o.e(7462), o.e(56261), o.e(52753), o.e(49180), o.e(95645), o.e(82627), o.e(27272), o.e(71030), o.e(82321), o.e(24951), o.e(2861), o.e(6889), o.e(69647), o.e(94673)]).then(o.bind(o, 790348))).renderIdeasDialog(e)
                }(i) : d(i)
            }

            function _(e, t, o) {
                d((0, a.createMindsPath)(null != e ? e : "", t, o))
            }

            function g(e = null, t) {
                const o = (0, r.pathToGroup)(null != e ? e : "") + "?new=" + performance.now();
                t && s(o), d(o)
            }
        },
        881607: (e, t, o) => {
            "use strict";
            o.d(t, {
                IDEAS_GROUP_PATH_PATTERN: () => i,
                ideasPathToGroup: () => r
            });
            const i = "/ideas/groups/:symbol/";

            function r(e) {
                return i.replace(":symbol", encodeURIComponent(e))
            }
        },
        515828: (e, t, o) => {
            "use strict";
            o.d(t, {
                createMindsPath: () => i
            });

            function i(e, t, o) {
                let i = "/minds/groups/:symbol/".replace(":symbol", encodeURIComponent(e));
                if (!t) return i;
                const r = new URLSearchParams;
                return r.set("mind", t), o && r.set("editable", "true"), i += `?${r.toString()}`, i
            }
        },
        777453: (e, t, o) => {
            "use strict";
            o.d(t, {
                NEWS_GROUP_PATH_PATTERN: () => i,
                newsPathToGroup: () => r
            });
            const i = "/news/groups/:symbol/";

            function r(e) {
                return i.replace(":symbol", encodeURIComponent(e))
            }
        },
        421219: (e, t, o) => {
            "use strict";
            o.d(t, {
                GROUP_PATH_PATTERN: () => r,
                NOTES_PATH_PATTERN: () => i,
                UNATTENDED_PATH_PATTERN: () => n,
                pathToGroup: () => s
            });
            const i = "/notes/",
                r = "/notes/groups/:symbol/",
                n = "/notes/unattended/";

            function s(e) {
                return e ? r.replace(":symbol", encodeURIComponent(e)) : n
            }
        },
        362052: (e, t, o) => {
            "use strict";
            o.d(t, {
                CompareLabel: () => s
            });
            var i = o(50959),
                r = o(558470),
                n = o(810465);

            function s(e) {
                return i.createElement("div", {
                    className: n.wrapper
                }, i.createElement("span", null, e.label), i.createElement(r.Badge, {
                    className: n.newLabel,
                    size: r.BadgeSize.XSmall
                }, "New"))
            }
        },
        263361: (e, t, o) => {
            "use strict";
            o.d(t, {
                useRovingTabindexElement: () => n
            });
            var i = o(50959),
                r = o(267521);

            function n(e, t = []) {
                const [o, n] = (0, i.useState)(!1), s = (0, r.useFunctionalRefObject)(e);
                return (0, i.useLayoutEffect)((() => {
                    const e = s.current;
                    if (null === e) return;
                    const t = e => {
                        switch (e.type) {
                            case "roving-tabindex:main-element":
                                n(!0);
                                break;
                            case "roving-tabindex:secondary-element":
                                n(!1)
                        }
                    };
                    return e.addEventListener("roving-tabindex:main-element", t), e.addEventListener("roving-tabindex:secondary-element", t), () => {
                        e.removeEventListener("roving-tabindex:main-element", t), e.removeEventListener("roving-tabindex:secondary-element", t)
                    }
                }), t), [s, o ? 0 : -1]
            }
        },
        957114: (e, t, o) => {
            "use strict";
            o.d(t, {
                TVAppContextProvider: () => c
            });
            var i = o(50959),
                r = o(883522),
                n = o(314802),
                s = o(881025),
                l = o(812352);
            const a = {
                iOs: "old",
                android: "new",
                old: "old",
                new: "new",
                any: "any"
            };

            function c(e) {
                const [t] = (0, i.useState)({
                    isOnMobileAppPage: e => (0, n.isOnMobileAppPage)(a[e]),
                    isRtl: (0, s.isRtl)(),
                    locale: (0, l.getLocale)()
                });
                return i.createElement(r.AppContext.Provider, {
                    value: t
                }, e.children)
            }
        },
        558470: (e, t, o) => {
            "use strict";
            o.d(t, {
                AnchorBadge: () => i.AnchorBadge,
                Badge: () => i.Badge,
                BadgeSize: () => i.BadgeSize
            });
            var i = o(774465)
        },
        623107: (e, t, o) => {
            "use strict";
            o.d(t, {
                DropdownContainer: () => l
            });
            var i = o(50959),
                r = o(269006),
                n = o(497754),
                s = o(650151);
            class l extends i.PureComponent {
                constructor() {
                    super(...arguments), this._container = null, this._setContainerRef = e => {
                        "function" == typeof this.props.reference && this.props.reference(e), "object" == typeof this.props.reference && (this.props.reference.current = e), this._container = e
                    }
                }
                componentDidMount() {
                    this.props.onDropdownWheelNoPassive && this._addPassiveListenerOnWheel(this.props.onDropdownWheelNoPassive)
                }
                componentDidUpdate(e) {
                    this.props.onDropdownWheelNoPassive !== e.onDropdownWheelNoPassive && this._updatePassiveListenerOnWheel(e.onDropdownWheelNoPassive)
                }
                componentWillUnmount() {
                    this.props.onDropdownWheelNoPassive && this._removePassiveListenerOnWheel(this.props.onDropdownWheelNoPassive)
                }
                render() {
                    const {
                        shadow: e = "bottom",
                        children: t,
                        className: o
                    } = this.props, s = n(r.container, r[e], o), l = {
                        maxHeight: this.props.maxHeight
                    };
                    return i.createElement("div", {
                        ref: this._setContainerRef,
                        style: l,
                        className: s,
                        onTouchStart: this.props.onDropdownTouchStart,
                        onTouchMove: this.props.onDropdownTouchMove,
                        onTouchEnd: this.props.onDropdownTouchEnd,
                        onWheel: this.props.onDropdownWheel
                    }, t)
                }
                _updatePassiveListenerOnWheel(e) {
                    e && this._removePassiveListenerOnWheel(e), this.props.onDropdownWheelNoPassive && this._addPassiveListenerOnWheel(this.props.onDropdownWheelNoPassive)
                }
                _addPassiveListenerOnWheel(e) {
                    (0, s.ensureNotNull)(this._container).addEventListener("wheel", e, {
                        passive: !1
                    })
                }
                _removePassiveListenerOnWheel(e) {
                    (0, s.ensureNotNull)(this._container).removeEventListener("wheel", e)
                }
            }
        },
        400236: (e, t, o) => {
            "use strict";
            o.d(t, {
                DropdownList: () => _
            });
            var i = o(50959),
                r = o(654767),
                n = o(497754),
                s = o(408317),
                l = o(100180),
                a = o(940014),
                c = o(623107),
                d = o(735270);
            const h = (0, l.makeNavigateable)(s.List),
                u = (0, d.makeAnchorable)(a.Dropdown),
                p = {
                    top: "top",
                    bottom: "bottom",
                    topRight: "top"
                };
            class _ extends i.PureComponent {
                render() {
                    const {
                        anchor: e = "bottom",
                        fontSize: t = 14,
                        root: o = "parent"
                    } = this.props, s = n(r.list, r[e]), {
                        dropdownClassName: l,
                        height: a,
                        ...d
                    } = this.props;
                    return i.createElement(u, { ...d,
                        className: l,
                        root: o
                    }, i.createElement(c.DropdownContainer, {
                        className: this.props.dropdownContainerClassName,
                        shadow: p[e],
                        maxHeight: this.props.maxHeight,
                        onDropdownTouchStart: this.props.onDropdownTouchStart ? this.props.onDropdownTouchStart : void 0,
                        onDropdownTouchMove: this.props.onDropdownTouchMove ? this.props.onDropdownTouchMove : void 0,
                        onDropdownTouchEnd: this.props.onDropdownTouchEnd ? this.props.onDropdownTouchEnd : void 0,
                        onDropdownWheelNoPassive: this.props.onDropdownWheelNoPassive ? this.props.onDropdownWheelNoPassive : void 0
                    }, i.createElement(h, { ...d,
                        width: this.props.width,
                        height: a,
                        className: this.props.className || s,
                        itemsClassName: this.props.itemsClassName || r.item,
                        selectedClassName: this.props.selectedClassName || r.selected,
                        fontSize: t,
                        reference: this.props.reference
                    })))
                }
            }
        },
        940014: (e, t, o) => {
            "use strict";
            o.d(t, {
                Dropdown: () => l
            });
            var i = o(50959),
                r = o(149368),
                n = o(368337);
            class s extends i.PureComponent {
                render() {
                    const e = {
                        position: "absolute",
                        top: this.props.top,
                        width: this.props.width,
                        height: this.props.height,
                        bottom: this.props.bottom,
                        right: this.props.right,
                        left: this.props.left,
                        zIndex: this.props.zIndex
                    };
                    return i.createElement("div", {
                        className: this.props.className,
                        style: e,
                        ref: this.props.reference
                    }, this.props.children)
                }
            }
            s.displayName = "Dropdown Container";
            const l = (0, n.makeOverlapable)((0, r.makeAttachable)(s))
        },
        336231: (e, t, o) => {
            "use strict";
            o.d(t, {
                ListItemWrap: () => r
            });
            var i = o(50959);
            class r extends i.PureComponent {
                constructor(e) {
                    super(e)
                }
                render() {
                    return i.createElement("div", {
                        className: this.props.className,
                        onClick: this.props.onClick,
                        ref: this.props.reference
                    }, this.props.children)
                }
            }
        },
        408317: (e, t, o) => {
            "use strict";
            o.d(t, {
                List: () => c
            });
            var i = o(50959),
                r = o(551080),
                n = o(29493),
                s = o(497754),
                l = o(336231),
                a = o(389401);
            class c extends i.PureComponent {
                constructor(e) {
                    super(e), this._handleResize = ([e]) => {
                        var t, o;
                        null === (o = (t = this.props).onMeasure) || void 0 === o || o.call(t, e.target.getBoundingClientRect())
                    }
                }
                render() {
                    const {
                        theme: e = n
                    } = this.props, t = s(e.list, {
                        [this.props.className]: Boolean(this.props.className)
                    }), {
                        fontSize: o = 13
                    } = this.props, l = {
                        bottom: this.props.bottom,
                        fontSize: o,
                        left: this.props.left,
                        height: this.props.height || "auto",
                        right: this.props.right,
                        top: this.props.top,
                        width: this.props.width,
                        zIndex: this.props.zIndex
                    };
                    return i.createElement(a.Measure, {
                        onResize: Boolean(this.props.onMeasure) ? this._handleResize : null
                    }, (e => i.createElement("div", {
                        className: t,
                        style: l,
                        ref: (0, r.mergeRefs)([this.props.reference, e])
                    }, this._wrapItems(this.props.items, this.props.selected))))
                }
                componentDidMount() {
                    if (void 0 !== this.props.selected && this.props.shouldScrollIfNotVisible) {
                        const e = this._items[this.props.selected];
                        e && this._scrollToItem(e)
                    }
                }
                componentDidUpdate() {
                    if (void 0 !== this.props.selected && this.props.shouldScrollIfNotVisible) {
                        const e = this._items[this.props.selected];
                        e && this._scrollToItem(e)
                    }
                }
                _wrapItems(e = [], t) {
                    this._items = [];
                    const {
                        itemWrap: o = l.ListItemWrap,
                        theme: r = n
                    } = this.props, a = o;
                    return e.map(((e, o) => {
                        const n = s(r.item, {
                            [this.props.itemsClassName]: Boolean(this.props.itemsClassName),
                            [this.props.selectedClassName]: t === o
                        });
                        return i.createElement(a, {
                            reference: t => {
                                t && this._items.push({
                                    elem: t,
                                    index: o,
                                    value: e
                                })
                            },
                            key: o,
                            onClick: () => this._onSelect(o),
                            className: n
                        }, e.elem)
                    }))
                }
                _onSelect(e) {
                    this.props.onSelect && this.props.onSelect(e, this._items[e].value)
                }
                _scrollToItem(e) {
                    e.elem.scrollIntoView({
                        block: "center"
                    })
                }
            }
            c.defaultProps = {
                shouldScrollIfNotVisible: !0
            }
        },
        18182: (e, t, o) => {
            "use strict";
            o.d(t, {
                MatchMedia: () => r
            });
            var i = o(50959);
            class r extends i.PureComponent {
                constructor(e) {
                    super(e), this._handleChange = () => {
                        this.forceUpdate()
                    }, this.state = {
                        query: window.matchMedia(this.props.rule)
                    }
                }
                componentDidMount() {
                    this._subscribe(this.state.query)
                }
                componentDidUpdate(e, t) {
                    this.state.query !== t.query && (this._unsubscribe(t.query), this._subscribe(this.state.query))
                }
                componentWillUnmount() {
                    this._unsubscribe(this.state.query)
                }
                render() {
                    return this.props.children(this.state.query.matches)
                }
                static getDerivedStateFromProps(e, t) {
                    return e.rule !== t.query.media ? {
                        query: window.matchMedia(e.rule)
                    } : null
                }
                _subscribe(e) {
                    e.addEventListener("change", this._handleChange)
                }
                _unsubscribe(e) {
                    e.removeEventListener("change", this._handleChange)
                }
            }
        },
        100180: (e, t, o) => {
            "use strict";
            o.d(t, {
                makeNavigateable: () => r
            });
            var i = o(50959);

            function r(e) {
                var t;
                return (t = class extends i.PureComponent {
                    constructor(e) {
                        super(e), this._items = this.props.items
                    }
                    componentDidUpdate(e) {
                        if (e.command !== this.props.command && this.props.command) switch (this.props.command.name) {
                            case "next":
                                this._next();
                                break;
                            case "prev":
                                this._prev()
                        }
                        e.items !== this.props.items && (this._items = this.props.items)
                    }
                    render() {
                        return i.createElement(e, { ...this.props
                        }, this.props.children)
                    }
                    _next() {
                        const {
                            selected: e = -1
                        } = this.props, t = e + 1;
                        this._items.length - 1 >= t ? this._navigateTo(t) : this._navigateTo(0)
                    }
                    _prev() {
                        const {
                            selected: e = -1
                        } = this.props, t = e - 1, o = this._items.length - 1;
                        0 <= t ? this._navigateTo(t) : this._navigateTo(o)
                    }
                    _navigateTo(e) {
                        this.props.onNavigate && this.props.onNavigate(e, this._items[e])
                    }
                }).displayName = "Navigateable Component", t
            }
        },
        150881: (e, t, o) => {
            "use strict";
            o.d(t, {
                TouchScrollContainer: () => c
            });
            var i = o(50959),
                r = o(259142),
                n = o(650151),
                s = o(638456);
            const l = CSS.supports("overscroll-behavior", "none");
            let a = 0;
            const c = (0, i.forwardRef)(((e, t) => {
                const {
                    children: o,
                    ...n
                } = e, c = (0, i.useRef)(null);
                return (0, i.useImperativeHandle)(t, (() => c.current)), (0, i.useLayoutEffect)((() => {
                    if (s.CheckMobile.iOS()) return a++, null !== c.current && (l ? 1 === a && (document.body.style.overscrollBehavior = "none") : (0, r.disableBodyScroll)(c.current, {
                        allowTouchMove: d(c)
                    })), () => {
                        a--, null !== c.current && (l ? 0 === a && (document.body.style.overscrollBehavior = "") : (0, r.enableBodyScroll)(c.current))
                    }
                }), []), i.createElement("div", {
                    ref: c,
                    ...n
                }, o)
            }));

            function d(e) {
                return t => {
                    const o = (0,
                            n.ensureNotNull)(e.current),
                        i = document.activeElement;
                    return !o.contains(t) || null !== i && o.contains(i) && i.contains(t)
                }
            }
        },
        364903: e => {
            e.exports = {
                modeTitle: "modeTitle-jsT3S4MA",
                modeTitleActive: "modeTitleActive-jsT3S4MA",
                switcherContainer: "switcherContainer-jsT3S4MA"
            }
        },
        8142: (e, t, o) => {
            "use strict";
            t.operators = {
                less: o.i18next(null, void 0, o(351755)),
                eless: o.i18next(null, void 0, o(471751)),
                greater: o.i18next(null, void 0, o(24933)),
                egreater: o.i18next(null, void 0, o(159393)),
                crosses: o.i18next(null, void 0, o(137933)),
                crosses_above: o.i18next(null, void 0, o(4478)),
                crosses_below: o.i18next(null, void 0, o(314942)),
                in_range: o.i18next(null, void 0, o(583075)),
                not_in_range: o.i18next(null, void 0, o(591176)),
                equal: o.i18next(null, void 0, o(319011)),
                nequal: o.i18next(null, void 0, o(809621))
            }
        },
        476230: (e, t, o) => {
            "use strict";
            o.d(t, {
                getBackendUrl: () => r
            });
            const i = () => window.SCREENER_HOST || "https://scanner.tradingview.com";

            function r(e, t = e) {
                return Array.isArray(e) ? e.length > 1 ? `${i()}/global/` : `${i()}/${t[0]}/` : `${i()}/${t}/`
            }
        },
        856660: (e, t, o) => {
            "use strict";
            o.d(t, {
                getScreenerIntervals: () => r
            });
            var i = o(444372);

            function r() {
                return [{
                    id: "1m",
                    title: i.t(null, {
                        plural: "{number} minutes",
                        count: 1,
                        replace: {
                            number: String(1)
                        }
                    }, o(532547)),
                    shortTitle: `1<sup class="tv-screener-toolbar__interval-sup">${i.t(null,{context:"interval_short"},o(768430))}</sup>`,
                    value: 1
                }, {
                    id: "5m",
                    title: i.t(null, {
                        plural: "{number} minutes",
                        count: 5,
                        replace: {
                            number: String(5)
                        }
                    }, o(532547)),
                    shortTitle: `5<sup class="tv-screener-toolbar__interval-sup">${i.t(null,{context:"interval_short"},o(768430))}</sup>`,
                    value: 5
                }, {
                    id: "15m",
                    title: i.t(null, {
                        plural: "{number} minutes",
                        count: 15,
                        replace: {
                            number: String(15)
                        }
                    }, o(532547)),
                    shortTitle: `15<sup class="tv-screener-toolbar__interval-sup">${i.t(null,{context:"interval_short"},o(768430))}</sup>`,
                    value: 15
                }, {
                    id: "30m",
                    title: i.t(null, {
                        plural: "{number} minutes",
                        count: 30,
                        replace: {
                            number: String(30)
                        }
                    }, o(532547)),
                    shortTitle: `30<sup class="tv-screener-toolbar__interval-sup">${i.t(null,{context:"interval_short"},o(768430))}</sup>`,
                    value: 30
                }, {
                    id: "1h",
                    title: i.t(null, {
                        plural: "{number} hours",
                        count: 1,
                        replace: {
                            number: String(1)
                        }
                    }, o(844646)),
                    shortTitle: `1<sup class="tv-screener-toolbar__interval-sup">${i.t(null,{context:"interval_short"},o(438048))}</sup>`,
                    value: 60
                }, {
                    id: "2h",
                    title: i.t(null, {
                        plural: "{number} hours",
                        count: 2,
                        replace: {
                            number: String(2)
                        }
                    }, o(844646)),
                    shortTitle: `2<sup class="tv-screener-toolbar__interval-sup">${i.t(null,{context:"interval_short"},o(438048))}</sup>`,
                    value: 120
                }, {
                    id: "4h",
                    title: i.t(null, {
                        plural: "{number} hours",
                        count: 4,
                        replace: {
                            number: String(4)
                        }
                    }, o(844646)),
                    shortTitle: `4<sup class="tv-screener-toolbar__interval-sup">${i.t(null,{context:"interval_short"},o(438048))}</sup>`,
                    value: 240
                }, {
                    id: "1D",
                    title: i.t(null, {
                        plural: "{number} days",
                        count: 1,
                        replace: {
                            number: String(1)
                        }
                    }, o(839501)),
                    shortTitle: `1<sup class="tv-screener-toolbar__interval-sup">${i.t(null,{context:"interval_short"},o(38691))}</sup>`,
                    value: null
                }, {
                    id: "1W",
                    title: i.t(null, {
                        plural: "{number} weeks",
                        count: 1,
                        replace: {
                            number: String(1)
                        }
                    }, o(718396)),
                    shortTitle: `1<sup class="tv-screener-toolbar__interval-sup">${i.t(null,{
context:"interval_short"},o(307408))}</sup>`,
                    value: "1W"
                }, {
                    id: "1M",
                    title: i.t(null, {
                        plural: "{number} months",
                        count: 1,
                        replace: {
                            number: String(1)
                        }
                    }, o(277186)),
                    shortTitle: `1<sup class="tv-screener-toolbar__interval-sup">${i.t(null,{context:"interval_short"},o(977995))}</sup>`,
                    value: "1M"
                }]
            }
        },
        819263: (e, t, o) => {
            "use strict";
            o.d(t, {
                mutateSimpleDate: () => s
            });
            var i = o(150335),
                r = o(246125),
                n = o(532442);

            function s(e) {
                return e && (0, i.isNumber)(e) ? r.dateFormatFunctions["yyyy-MM-dd"]((0, n.getDateFromYYYYMMDD)(e), !0) : "—"
            }
        },
        639581: (e, t, o) => {
            "use strict";

            function i(e) {
                return {
                    standalone: Boolean(e.standalone),
                    originalStandalone: Boolean(e.originalStandalone),
                    onWidget: Boolean(e.onWidget)
                }
            }

            function r(e) {
                const t = i(e);
                return t.standalone && t.originalStandalone && !t.onWidget
            }

            function n(e) {
                const t = i(e);
                return t.standalone && !t.originalStandalone && !t.onWidget
            }

            function s(e) {
                const t = i(e);
                return !t.standalone && t.originalStandalone && !t.onWidget
            }

            function l(e) {
                return i(e).onWidget
            }

            function a(e) {
                return r(e) ? "screener" : n(e) ? "market" : s(e) ? "chart" : "widget"
            }
            o.d(t, {
                getScreenerPage: () => a,
                isChartPage: () => s,
                isExternalWidget: () => l,
                isMarketPage: () => n,
                isScreenerPage: () => r
            })
        },
        753906: (e, t, o) => {
            "use strict";
            var i;
            o.d(t, {
                    UserActionState: () => i
                }),
                function(e) {
                    e.Click = "clicked", e.ApplyFilters = "filters_applied", e.Type = "typed", e.Slide = "slided", e.Drag = "drag"
                }(i || (i = {}))
        },
        408747: (e, t, o) => {
            "use strict";
            o.d(t, {
                DispatchContextMenuActionEvent: () => r
            });
            var i = o(753906);
            class r {
                constructor(e, t, o) {
                    this.event = "context_menu_action", this.state = i.UserActionState.Click, this.source = e, this.value = o.toString(), this.location = t
                }
            }
        },
        264355: (e, t, o) => {
            "use strict";
            o.d(t, {
                ChangeMarketEvent: () => i,
                ChangeMarketSelectionModeEvent: () => r
            });
            class i {
                constructor(e) {
                    this.event = "change_market", this.source = "market_selector", this.location = "toolbar", this.state = "", this.value = e
                }
            }
            class r {
                constructor(e) {
                    this.event = "change_market_selection_mode", this.source = "market_selection_mode_switch", this.location = "market_dialog", this.state = "", this.value = e
                }
            }
        },
        181952: (e, t, o) => {
            "use strict";
            o.d(t, {
                getColumnSetNameForSnowPlow: () => c,
                getFilterSetNameForSnowPlow: () => d,
                getSnowPlowRefreshInterval: () => a,
                initScreenerInstance: () => s,
                sendSnowPlowData: () => l
            });
            var i = o(776734),
                r = o(639581);
            let n;

            function s(e) {
                n = e
            }

            function l(e) {
                let t = "",
                    o = "";
                n && (t = (0, r.getScreenerPage)(n.screenerBridge), o = n.screenerType);
                (!n || !(0, r.isExternalWidget)(n.screenerBridge)) && (0, i.getTracker)().then((i => {
                    i && i.trackScreenerHighLevel(e, o, t)
                }))
            }

            function a(e) {
                return 1 === e ? "auto" : -1 === e ? "manual" : `${e}`
            }

            function c(e) {
                return n.defaultFieldSets.find((t => t.id === e)) ? e : "custom"
            }

            function d(e) {
                return n.defaultFilterSets.find((t => t.id === e)) ? e : "custom"
            }
        },
        716451: (e, t, o) => {
            "use strict";
            o.d(t, {
                SIGNAL: () => r,
                generateRecommendsRequest: () => d,
                getRecommendsRange: () => a,
                signalComputationFunctions: () => s,
                signalDisplayFunctions: () => l
            });
            var i = o(444372);
            const r = {
                    STRONG_BUY: {
                        key: "Strong Buy",
                        get title() {
                            return i.t(null, {
                                context: "screener_rating"
                            }, o(632309))
                        },
                        get shortTitle() {
                            return i.t(null, {
                                context: "screener_rating"
                            }, o(632309))
                        },
                        cssClass: "tv-screener-table__signal--strong-buy"
                    },
                    BUY: {
                        key: "Buy",
                        get title() {
                            return i.t(null, {
                                context: "screener_rating"
                            }, o(280903))
                        },
                        get shortTitle() {
                            return i.t(null, {
                                context: "first_letter_of_Buy"
                            }, o(355777))
                        },
                        cssClass: "tv-screener-table__signal--buy"
                    },
                    STRONG_SELL: {
                        key: "Strong Sell",
                        get title() {
                            return i.t(null, {
                                context: "screener_rating"
                            }, o(488234))
                        },
                        get shortTitle() {
                            return i.t(null, {
                                context: "screener_rating"
                            }, o(488234))
                        },
                        cssClass: "tv-screener-table__signal--strong-sell"
                    },
                    SELL: {
                        key: "Sell",
                        get title() {
                            return i.t(null, {
                                context: "screener_rating"
                            }, o(71780))
                        },
                        get shortTitle() {
                            return i.t(null, {
                                context: "first_letter_of_Sell"
                            }, o(992949))
                        },
                        cssClass: "tv-screener-table__signal--sell"
                    },
                    NEUTRAL: {
                        key: "Neutral",
                        get title() {
                            return i.t(null, {
                                context: "screener_rating"
                            }, o(147094))
                        },
                        get shortTitle() {
                            return i.t(null, {
                                context: "first_letter_of_Neutral"
                            }, o(695879))
                        },
                        cssClass: "tv-screener-table__signal--neutral"
                    }
                },
                n = (e, t = !1, o = !1) => {
                    const i = t ? "" : " i-hidden";
                    return o ? `<span title="${e.title}" class="tv-screener-table__signal apply-common-tooltip ${e.cssClass}${i}">${e.shortTitle}</span>` : `<span class="tv-screener-table__signal ${e.cssClass}${i}">${e.title}</span>`
                },
                s = {
                    computeMASignal: (e, t) => {
                        let o = r.NEUTRAL;
                        return e < t && (o = r.BUY), e > t && (o = r.SELL), o
                    },
                    computeRSISignal: (e, t) => {
                        let o = r.NEUTRAL;
                        return e < 30 && t < e && (o = r.BUY), e > 70 && t > e && (o = r.SELL), o
                    },
                    computeStochSignal: (e, t, o, i) => {
                        let n = r.NEUTRAL;
                        return e < 20 && t < 20 && e > t && o < i && (n = r.BUY), e > 80 && t > 80 && e < t && o > i && (n = r.SELL), n
                    },
                    computeCCI20Signal: (e, t) => {
                        let o = r.NEUTRAL;
                        return e < -100 && e > t && (o = r.BUY), e > 100 && e < t && (o = r.SELL), o
                    },
                    computeADXSignal: (e, t, o, i, n) => {
                        let s = r.NEUTRAL;
                        return e > 20 && i < n && t > o && (s = r.BUY), e > 20 && i > n && t < o && (s = r.SELL), s
                    },
                    computeAOSignal: (e, t, o) => {
                        let i = r.NEUTRAL;
                        return (e > 0 && t < 0 || e > 0 && t > 0 && e > t && o > t) && (i = r.BUY), (e < 0 && t > 0 || e < 0 && t < 0 && e < t && o < t) && (i = r.SELL), i
                    },
                    computeMomSignal: (e, t) => {
                        let o = r.NEUTRAL;
                        return e > t && (o = r.BUY), e < t && (o = r.SELL), o
                    },
                    computeMACDSignal: (e, t) => {
                        let o = r.NEUTRAL;
                        return e > t && (o = r.BUY), e < t && (o = r.SELL), o
                    },
                    computeBBBuySignal: (e, t) => {
                        let o = r.NEUTRAL;
                        return e < t && (o = r.BUY), o
                    },
                    computeBBSellSignal: (e, t) => {
                        let o = r.NEUTRAL;
                        return e > t && (o = r.SELL), o
                    },
                    computePSARSignal: (e, t) => {
                        let o = r.NEUTRAL;
                        return e < t && (o = r.BUY), e > t && (o = r.SELL), o
                    },
                    computeRecommendSignal: e => {
                        let t;
                        return e >= -1 && e < -.5 && (t = r.STRONG_SELL), e >= -.5 && e < -.1 && (t = r.SELL), e >= -.1 && e <= .1 && (t = r.NEUTRAL), e > .1 && e <= .5 && (t = r.BUY), e > .5 && e <= 1 && (t = r.STRONG_BUY), t
                    },
                    computeSimpleSignal: e => {
                        let t = r.NEUTRAL;
                        return -1 === e && (t = r.SELL), 1 === e && (t = r.BUY), t
                    }
                },
                l = {
                    processMASignal: (e, t, o, i) => {
                        if (null === t || null === o) return e;
                        const r = s.computeMASignal(t, o);
                        return `${e} ${n(r,i.displaySignal,!0)}`
                    },
                    processRSISignal: (e, t, o, i) => {
                        if (null === t) return e;
                        const r = s.computeRSISignal(t, o);
                        return `${e} ${n(r,i.displaySignal,!0)}`
                    },
                    processStochSignal: (e, t, o, i, r, l) => {
                        if (null === t || null === o) return e;
                        const a = s.computeStochSignal(t, o, i, r);
                        return `${e} ${n(a,l.displaySignal,!0)}`
                    },
                    processCCI20Signal: (e, t, o, i) => {
                        if (null === t || null === o) return e;
                        const r = s.computeCCI20Signal(t, o);
                        return `${e} ${n(r,i.displaySignal,!0)}`
                    },
                    processADXSignal: (e, t, o, i, r, l, a) => {
                        if (null === t || null === o || null === i) return e;
                        const c = s.computeADXSignal(t, o, i, r, l);
                        return `${e} ${n(c,a.displaySignal,!0)}`
                    },
                    processAOSignal: (e, t, o, i, r) => {
                        if (null === t || null === o || null === i) return e;
                        const l = s.computeAOSignal(t, o, i);
                        return `${e} ${n(l,r.displaySignal,!0)}`
                    },
                    processMomSignal: (e, t, o, i) => {
                        if (null === t || null === o) return e;
                        const r = s.computeMomSignal(t, o);
                        return `${e} ${n(r,i.displaySignal,!0)}`
                    },
                    processMACDSignal: (e, t, o, i) => {
                        if (null === t || null === o) return e;
                        const r = s.computeMACDSignal(t, o);
                        return `${e} ${n(r,i.displaySignal,!0)}`
                    },
                    processBBBuySignal: (e, t, o, i) => {
                        if (null === t || null === o) return e;
                        const r = s.computeBBBuySignal(t, o);
                        return `${e} ${n(r,i.displaySignal,!0)}`
                    },
                    processBBSellSignal: (e, t, o, i) => {
                        if (null === t || null === o) return e;
                        const r = s.computeBBSellSignal(t, o);
                        return `${e} ${n(r,i.displaySignal,!0)}`
                    },
                    processPSARSignal: (e, t, o, i) => {
                        if (null === t || null === o) return e;
                        const r = s.computePSARSignal(t, o);
                        return `${e} ${n(r,i.displaySignal,!0)}`
                    },
                    processRecommendSignal: e => {
                        if (null === e || !isNumber(e)) return e;
                        const t = s.computeRecommendSignal(e);
                        return void 0 === t ? e : `${n(t,!0)}`
                    },
                    processSimpleSignal: (e, t, o) => {
                        if (null === t || "&mdash;" === e) return e;
                        const i = s.computeSimpleSignal(t);
                        return `${e} ${n(i,o.displaySignal,!0)}`
                    }
                },
                a = () => [r.STRONG_BUY.title, r.BUY.title, r.NEUTRAL.title, r.SELL.title, r.STRONG_SELL.title],
                c = e => {
                    let t, o;
                    return e === r.STRONG_SELL.title && (t = [-1, -.5], o = -.5), e === r.SELL.title && (t = [-.5, -.1], o = -.1), e === r.NEUTRAL.title && (t = [-.1, .1]), e === r.BUY.title && (t = [.1, .5], o = .1), e === r.STRONG_BUY.title && (t = [.5, 1], o = .5), {
                        right: t,
                        notEqual: o
                    }
                },
                d = (e, t) => {
                    if (Array.isArray(e)) {
                        const o = e.map((e => c(e))),
                            i = [],
                            r = [];
                        for (const e of o) {
                            if (void 0 !== e.notEqual) {
                                o.filter((t => t.notEqual !== e.notEqual && (t.equal === e.notEqual || t.right && (t.right[0] === e.notEqual || t.right[1] === e.notEqual)))).length || i.push({
                                    left: t,
                                    operation: "nequal",
                                    right: e.notEqual
                                })
                            }
                            e.right && r.push({
                                left: t,
                                operation: "in_range",
                                right: e.right
                            }), void 0 !== e.equal && r.push({
                                left: t,
                                operation: "equal",
                                right: e.equal
                            })
                        }
                        return {
                            filter: i,
                            filter2AndPart: r,
                            filter2Flag: !0
                        }
                    }
                    const o = c(e);
                    if (0 === o.equal) return {
                        left: t,
                        operation: "equal",
                        right: 0
                    };
                    const i = [{
                        left: t,
                        operation: "in_range",
                        right: o.right
                    }];
                    return void 0 !== o.notEqual && i.push({
                        left: t,
                        operation: "nequal",
                        right: o.notEqual
                    }), i
                }
        },
        797914: (e, t, o) => {
            "use strict";
            o.d(t, {
                getProductIdFromStockExchange: () => l,
                hasStockScannerExchange: () => s,
                isEmbedUnrestrictedExchange: () => a
            });
            var i = o(721905),
                r = o(791798);
            const n = [];
            for (const e in i) i.hasOwnProperty(e) && i[e].hasOwnProperty("exchangesStocks") && i[e].exchangesStocks.forEach((e => {
                n.push(e)
            }));
            const s = e => (e = {
                OSL: "EURONEXTOSE",
                BCBA: "BYMA",
                AMEX: "NYSE ARCA"
            }[e] || e, n.includes(e));

            function l(e) {
                return r[e] || null
            }

            function a(e) {
                return ["ASX", "ATHEX"].includes(e)
            }
        },
        21180: (e, t, o) => {
            "use strict";
            o.d(t, {
                defaultStockMarket: () => s,
                markets: () => r
            });
            var i = o(775613);
            const r = (n = (0, i.getMarketsByScreenerType)("stock"), Object.entries(n).map((([e, t]) => {
                const o = t.group;
                return {
                    flag: t.flag,
                    get name() {
                        return t.title
                    },
                    desc: t.stocks.join(", "),
                    country: t.country,
                    group: o,
                    value: e
                }
            })));
            var n;
            const s = r.find((e => e.value === (0, i.getDefaultStockMarket)()))
        },
        307239: (e, t, o) => {
            "use strict";

            function i(e) {
                if (void 0 === e) return null;
                const t = e.match(/(delayed_streaming)_(\d+)/);
                return null === t ? null : {
                    mode: t[1],
                    interval: parseInt(t[2])
                }
            }

            function r(e) {
                const t = i(e.update_mode);
                return null === t || (e.update_mode = t.mode, e.update_mode_seconds = t.interval), e
            }
            o.r(t), o.d(t, {
                normalizeUpdateMode: () => r,
                parseUpdateMode: () => i
            })
        },
        870045: (e, t, o) => {
            "use strict";
            var i = o(414879),
                r = o(297525).tzData;
            let n;

            function s(e) {
                this._name = e;
                var t = r[e];
                if (t || (t = {
                        time: [],
                        offset: []
                    }, this._invalid = !0), t.time.length !== t.offset.length && (t = {
                        time: [],
                        offset: []
                    }, this._invalid = !0), !t.time_utc) {
                    for (var o = t.time, i = t.offset, n = o.length, s = new Array(n), l = 0; l < n; l++) o[l] *= 1e3, i[l] *= 1e3, s[l] = o[l] - i[l];
                    t.time_utc = s
                }
                this.tz = t
            }

            function l(e, t) {
                var o = e.length;
                if (0 === o) return -1;
                if (isNaN(t)) throw Error("Key is NaN");
                for (var i = 0, r = o - 1, n = a((i + r) / 2);;) {
                    if (e[n] > t) {
                        if ((r = n - 1) < i) return n
                    } else if (r < (i = n + 1)) return n < o - 1 ? n + 1 : -1;
                    n = a((i + r) / 2)
                }
            }
            s.prototype.offset_utc = function(e) {
                return s._offset(this.tz.time_utc, this.tz.offset, e)
            }, s.prototype.offset_loc = function(e) {
                return s._offset(this.tz.time, this.tz.offset, e)
            }, s.prototype.name = function() {
                return this._name
            }, s.prototype.correction_loc = function(e) {
                var t = this.tz.time,
                    o = this.tz.offset,
                    i = l(t, e);
                if (i < 1) return 0;
                var r = o[i] - o[i - 1];
                if (r > 0 && e - t[i - 1] <= r) return r;
                return 0
            }, s.prototype.is_valid = function() {
                return !this._invalid
            }, s._offset = function(e, t, o) {
                var i = l(e, o);
                return -1 === i ? 0 : t[i]
            };
            var a = function(e) {
                    return 0 | e
                },
                c = function(e) {
                    return 60 * e * 1e3
                },
                d = function(e, t) {
                    return h(e) - h(t)
                },
                h = function(e) {
                    return e < 0 ? a(e / 1e3) - (e % 1e3 != 0 ? 1 : 0) : a(e / 1e3)
                };

            function u(e) {
                return e % 4 == 0 && (e % 100 != 0 || e % 400 == 0)
            }
            var p = {
                    0: 0,
                    1: 31,
                    2: 59,
                    3: 90,
                    4: 120,
                    5: 151,
                    6: 181,
                    7: 212,
                    8: 243,
                    9: 273,
                    10: 304,
                    11: 334
                },
                _ = { ...i.WeekDays,
                    ...i.Months,
                    YEAR: 1,
                    MONTH: 2,
                    WEEK_OF_YEAR: 3,
                    DAY_OF_MONTH: 5,
                    DAY_OF_YEAR: 6,
                    DAY_OF_WEEK: 7,
                    HOUR_OF_DAY: 11,
                    MINUTE: 12,
                    SECOND: 13,
                    FIRST_DAY_OF_WEEK: i.WeekDays.SUNDAY,
                    LAST_DAY_OF_WEEK: i.WeekDays.SATURDAY,
                    minutesPerDay: 1440,
                    minutesPerWeek: 10080,
                    millisecondsPerDay: c(1440),
                    get_minutes_from_hhmm: function(e) {
                        return -1 !== e.indexOf(":") && (e = e.split(":").join("")), e % 100 + 60 * a(e / 100)
                    },
                    get_year: function(e) {
                        return e.getUTCFullYear()
                    },
                    get_month: function(e) {
                        return e.getUTCMonth()
                    },
                    get_hours: function(e) {
                        return e.getUTCHours()
                    },
                    get_minutes: function(e) {
                        return e.getUTCMinutes()
                    },
                    get_seconds: function(e) {
                        return e.getUTCSeconds()
                    },
                    get_day_of_month: function(e) {
                        return e.getUTCDate()
                    },
                    get_day_of_week: function(e) {
                        return e.getUTCDay() + 1
                    },
                    get_day_of_year: function(e) {
                        var t = e.getUTCMonth(),
                            o = p[t];
                        return t > _.JANUARY + 1 && u(e.getUTCFullYear()) && (o += 1), o + e.getUTCDate()
                    },
                    get_week_of_year: function(e) {
                        var t = new Date(Date.UTC(e.getUTCFullYear(), 0, 1)).getUTCDay(),
                            o = 0 === t ? 1 : 8 - t,
                            i = _.get_day_of_year(e) - o;
                        return Math.ceil(i / 7) + 1
                    },
                    get_minutes_from_midnight: function(e) {
                        return 60 * _.get_hours(e) + _.get_minutes(e)
                    },
                    get_minutes_with_hours: e => _.get_minutes_from_midnight(e),
                    set_hms: function(e, t, o, i, r, n) {
                        e.setUTCHours(t), e.setUTCMinutes(o), e.setUTCSeconds(i), e.setUTCMilliseconds(r), void 0 !== n && _.correct_time(e, n)
                    },
                    correct_time: function(e, t) {
                        var o = e.getTime(),
                            i = t.correction_loc(o);
                        e.setTime(o + i)
                    },
                    add_days_considering_dst: function(e, t, o) {
                        var i = e.offset_utc(t),
                            r = this.clone(t);
                        this.add_date(r, o);
                        var n = e.offset_utc(r);
                        return r.setTime(r.getTime() + i - n), r
                    },
                    add_years_considering_dst: function(e, t, o) {
                        let i = t;
                        for (let t = Math.abs(o); t > 0; t--) i = this.add_days_considering_dst(e, i, this.get_days_per_year(i) * Math.sign(o));
                        return i
                    },
                    add_date: function(e, t) {
                        e.setTime(e.getTime() + t * _.millisecondsPerDay)
                    },
                    add_minutes: function(e, t) {
                        e.setTime(e.getTime() + c(t))
                    },
                    set_seconds: function(e, t) {
                        const o = 86400,
                            i = t % o < 0 ? -1 : 0,
                            r = Math.trunc(t / o) + i,
                            n = t - r * o,
                            s = Math.trunc(n / 3600),
                            l = Math.trunc(n % 3600 / 60),
                            a = n - 3600 * s - 60 * l;
                        _.set_hms(e, s, l, a, 0), _.add_date(e, r)
                    },
                    clone: function(e) {
                        return new Date(e.getTime())
                    },
                    get_days_per_year: function(e) {
                        var t = e.getUTCFullYear();
                        return this.days_per_year(t)
                    },
                    days_per_year: function(e) {
                        return u(e) ? 366 : 365
                    },
                    is_leap_year: u,
                    get_days_in_month: function(e, t) {
                        let o;
                        switch (e) {
                            case 0:
                            case 2:
                            case 4:
                            case 6:
                            case 7:
                            case 9:
                            case 11:
                                o = 31;
                                break;
                            case 1:
                                o = 28, u(t) && o++;
                                break;
                            default:
                                o = 30
                        }
                        return o
                    },
                    get_part: function(e, t) {
                        switch (t) {
                            case _.YEAR:
                                return _.get_year(e);
                            case _.MONTH:
                                return _.get_month(e);
                            case _.DAY_OF_MONTH:
                                return _.get_day_of_month(e);
                            case _.WEEK_OF_YEAR:
                                return _.get_week_of_year(e);
                            case _.DAY_OF_WEEK:
                                return _.get_day_of_week(e);
                            case _.HOUR_OF_DAY:
                                return _.get_hours(e);
                            case _.MINUTE:
                                return _.get_minutes(e);
                            case _.DAY_OF_YEAR:
                                return _.get_day_of_year(e);
                            case _.SECOND:
                                return _.get_seconds(e);
                            default:
                                return e.getTime()
                        }
                    },
                    time_minutes: c,
                    time_seconds: function(e) {
                        return 1e3 * e
                    },
                    time_minutes_diff: function(e, t) {
                        return a(d(e, t) / 60)
                    },
                    time_seconds_diff: d,
                    utc_to_cal: function(e, t) {
                        return new Date(_.utc_to_cal_ts(e, t))
                    },
                    utc_to_cal_ts: function(e, t) {
                        return t + e.offset_utc(t)
                    },
                    get_cal: function(e, t, o, i, r, n, s) {
                        var l = new Date(Date.UTC(t, o, i, r || 0, n || 0, s || 0)),
                            a = e.offset_utc(+l);
                        return new Date(l.valueOf() - a)
                    },
                    get_cal_from_unix_timestamp_ms: function(e, t) {
                        return new Date(t + e.offset_utc(t))
                    },
                    get_cal_utc: function(e, t, o, i = 0, r = 0, n = 0) {
                        return new Date(Date.UTC(e, t, o, i, r, n))
                    },
                    cal_to_utc: function(e, t, o) {
                        var i = t.getTime();
                        return o && (i += e.correction_loc(i)), i - e.offset_loc(i)
                    },
                    get_timezone: function(e) {
                        return new s(e)
                    },
                    shift_day: function(e, t) {
                        var o = e - 1;
                        return (o += t) > 6 ? o %= 7 : o < 0 && (o = (7 + o % 7) % 7), o + 1
                    },
                    setCustomTimezones: function(e) {
                        n = e
                    }
                };
            e.exports = _
        },
        643322: (e, t, o) => {
            "use strict";
            o.d(t, {
                accumulate: () => l,
                combine: () => s,
                combineWithFilteredUpdate: () => n
            });
            var i = o(375397);

            function r(e, t, ...o) {
                let r = null;
                const n = (...t) => e(...t.map((e => e.value())), null == r ? void 0 : r.value()),
                    s = r = new i.WatchedValue(n(...o)),
                    l = () => {
                        t(...o.map((e => e.value()))) && s.setValue(n(...o))
                    },
                    a = o.map((e => e.spawn()));
                for (const e of a) e.subscribe(l);
                return s.readonly().spawn((() => {
                    a.forEach((e => e.destroy())), o.forEach((e => e.release()))
                }))
            }

            function n(e, t, ...o) {
                return r(e, t, ...o)
            }

            function s(e, ...t) {
                return r(e, (() => !0), ...t)
            }

            function l(e, t, o) {
                var r;
                const n = (t, o) => {
                        const i = t.map((e => e.value()));
                        return e(i, o)
                    },
                    s = new i.WatchedValue(n(t.value(), null == o ? void 0 : o.value())),
                    l = t.spawn();
                let a = [];
                const c = null !== (r = null == o ? void 0 : o.spawn()) && void 0 !== r ? r : new i.WatchedValue(void 0),
                    d = () => {
                        s.setValue(n(a, c.value()))
                    },
                    h = e => {
                        a.forEach((e => e.destroy())), a = e.map((e => e.spawn())), a.forEach((e => {
                            e.subscribe(d)
                        })), d()
                    };
                h(l.value()), l.subscribe(h), c.subscribe(d);
                return s.readonly().spawn((() => {
                    a.forEach((e => e.destroy())), l.destroy(), c.destroy(), t.release()
                }))
            }
        },
        942634: (e, t, o) => {
            "use strict";
            o.r(t), o.d(t, {
                Delegate: () => n
            });
            const i = (0, o(692558).getLogger)("Common.Delegate");

            function r(e) {
                return !e.singleShot
            }
            class n {
                constructor() {
                    this.fire = this._fireImpl.bind(this), this._listeners = []
                }
                subscribe(e, t, o) {
                    this._listeners.push({
                        object: e,
                        member: t,
                        singleShot: !!o,
                        skip: !1
                    })
                }
                unsubscribe(e, t) {
                    for (let o = 0; o < this._listeners.length; ++o) {
                        const i = this._listeners[o];
                        if (i.object === e && i.member === t) {
                            i.skip = !0, this._listeners.splice(o, 1);
                            break
                        }
                    }
                }
                unsubscribeAll(e) {
                    for (let t = this._listeners.length - 1; t >= 0; --t) {
                        const o = this._listeners[t];
                        o.object === e && (o.skip = !0, this._listeners.splice(t, 1))
                    }
                }
                destroy() {
                    this._listeners = []
                }
                _fireImpl(...e) {
                    const t = this._listeners;
                    this._listeners = this._listeners.filter(r);
                    const o = t.length;
                    for (let r = 0; r < o; ++r) {
                        const o = t[r];
                        if (!o.skip) try {
                            o.member.apply(o.object || null, e)
                        } catch (e) {
                            i.logError(`${e&&(e.stack||e.message)}`)
                        }
                    }
                }
            }
        },
        268552: e => {
            "use strict";
            var t = [{
                    d: "E-Mini S&P 500",
                    t: "ES"
                }, {
                    d: "E-Mini Nasdaq 100",
                    t: "NQ"
                }, {
                    d: "Gold",
                    t: "GC"
                }, {
                    d: "Silver",
                    t: "SI"
                }, {
                    d: "Crude Oil WTI",
                    t: "CL"
                }, {
                    d: "Natural Gas",
                    t: "NG"
                }, {
                    d: "Australian Dollar",
                    t: "6A"
                }, {
                    d: "Australian Dollar (Floor)",
                    t: "AD"
                }, {
                    d: "Euro FX",
                    t: "6E"
                }, {
                    d: "Euro FX (Floor)",
                    t: "EC"
                }, {
                    d: "Corn",
                    t: "ZC"
                }, {
                    d: "Corn (Floor)",
                    t: "C"
                }, {
                    d: "Eurodollar",
                    t: "GE"
                }, {
                    d: "Eurodollar (Floor)",
                    t: "ED"
                }],
                o = function() {
                    var e = [{
                        pattern: "(",
                        ctor: n
                    }, {
                        pattern: ")",
                        ctor: s
                    }, {
                        pattern: "+",
                        ctor: a
                    }, {
                        pattern: "-",
                        ctor: c
                    }, {
                        pattern: "*",
                        ctor: d
                    }, {
                        pattern: "/",
                        ctor: h
                    }, {
                        pattern: "^",
                        ctor: u
                    }, {
                        pattern: /\d+(?:\.\d*|(?![a-zA-Z0-9_!:.&]))|\.\d+/,
                        ctor: m
                    }, {
                        pattern: /\./,
                        ctor: y
                    }, {
                        pattern: /[a-zA-Z0-9_\u0370-\u1FFF_\u2E80-\uFFFF][a-zA-Z0-9_\u0020\u0370-\u1FFF_\u2E80-\uFFFF_!|:.&]*|'.+?'/,
                        ctor: g
                    }, {
                        pattern: /'[^']*/,
                        ctor: f
                    }, {
                        pattern: /[\0-\x20\s]+/,
                        ctor: r
                    }];

                    function o(e, t) {
                        var o = function() {};
                        return o.prototype = t.prototype, e.prototype = new o, e
                    }

                    function i() {}

                    function r(e) {
                        this.value = e
                    }

                    function n() {}

                    function s() {}

                    function l() {}

                    function a() {}

                    function c() {}

                    function d() {}

                    function h() {}

                    function u() {}
                    i.prototype.toString = function() {
                        return this.value
                    }, o(r, i), o(n, i), n.prototype.value = "(", o(s, i), s.prototype.value = ")", o(l, i), o(a, l), a.prototype.value = "+", a.prototype.precedence = 0, a.prototype.commutative = !0, o(c, l), c.prototype.value = "-", c.prototype.precedence = 0, c.prototype.commutative = !1, o(d, l), d.prototype.value = "*", d.prototype.precedence = 1, d.prototype.commutative = !0, o(h, l), h.prototype.value = "/", h.prototype.precedence = 1, h.prototype.commutative = !1, o(u, l), u.prototype.value = "^", u.prototype.precedence = 2, u.prototype.commutative = !1;
                    var p = /^'?(?:([A-Z0-9_]+):)?(.*?)'?$/i,
                        _ = /[+\-/*]/;

                    function g(e) {
                        this.value = e
                    }

                    function m(e) {
                        this.value = e
                    }

                    function v(e) {
                        this.value = e
                    }

                    function f() {
                        g.apply(this, arguments)
                    }

                    function y() {
                        m.apply(this, arguments)
                    }
                    o(g, i), g.prototype.toString = function() {
                            if (this.hasOwnProperty("_ticker")) {
                                var e = _.test(this._ticker) ? "'" : "";
                                return e + (this._exchange ? this._exchange + ":" : "") + this._ticker + e
                            }
                            return this.value
                        }, g.prototype.parse = function() {
                            var e = p.exec(this.value);
                            e[1] && (this._exchange = e[1]), this._ticker = e[2]
                        },
                        g.prototype.parseAsFutures = function() {
                            this.hasOwnProperty("_ticker") || this.parse();
                            for (var e = function(e) {
                                    return t.some((function(t) {
                                        return t.t === e
                                    }))
                                }, o = 2; o >= 1; --o) {
                                var i = this._ticker.slice(0, o);
                                if (e(i)) {
                                    this._root = i, this._contract = this._ticker.slice(o);
                                    break
                                }
                            }
                        }, g.prototype.exchange = function(e) {
                            if (this.hasOwnProperty("_ticker") || this.parse(), !(arguments.length > 0)) return this._exchange;
                            null == e ? delete this._exchange : this._exchange = e + ""
                        }, g.prototype.ticker = function(e) {
                            if (this.hasOwnProperty("_ticker") || this.parse(), !(arguments.length > 0)) return this._ticker;
                            null == e ? delete this._ticker : this._ticker = e + "", delete this._root, delete this._contract
                        }, g.prototype.root = function(e) {
                            if (this.hasOwnProperty("_root") || this.parseAsFutures(), !(arguments.length > 0)) return this._root;
                            null == e ? delete this._root : (this._root = e + "", this._root && (this._ticker = this._root + (this._contract || "")))
                        }, g.prototype.contract = function(e) {
                            if (this.hasOwnProperty("_contract") || this.parseAsFutures(), !(arguments.length > 0)) return this._root;
                            null == e ? delete this._contract : (this._contract = e + "", this._root && (this._ticker = this._root + this._contract))
                        }, o(m, i), m.prototype.toString = function() {
                            return this.hasOwnProperty("_normalizedValue") ? this._normalizedValue : this.value
                        }, m.prototype.parse = function() {
                            this._normalizedValue = this.value.replace(/^0+|\.0*$/g, "").replace(/(\.\d*?)0+$/, "$1").replace(/^(\.|$)/, "0$1")
                        }, v.prototype.toString = function() {
                            return this.value
                        }, o(f, g), f.prototype.isIncomplete = !0, f.prototype.incompleteSuggest = function() {
                            if ("'" !== this.value) return String("'")
                        }, o(y, m), y.prototype.isIncomplete = !0;
                    var b = new RegExp(e.map((function(e) {
                        return "(" + ("string" == typeof e.pattern ? e.pattern.replace(/[\^$()[\]{}*+?|\\]/g, "\\$&") : e.pattern.source) + ")"
                    })).concat(".").join("|"), "g");

                    function w(t, o) {
                        var i, n = [];
                        e: for (; i = b.exec(t);) {
                            for (var s = e.length; s--;)
                                if (i[s + 1]) {
                                    if (e[s].ctor) {
                                        var l = new e[s].ctor(i[s + 1]);
                                        l._offset = i.index, n.push(l)
                                    }
                                    continue e
                                }
                            var a = new v(i[0]);
                            a._offset = i.index, n.push(a)
                        }
                        if (o && o.recover) {
                            var c;
                            for (s = n.length; s--;) {
                                var d = n[s];
                                if (d instanceof m || d instanceof g) {
                                    if (void 0 !== c) {
                                        var h = new g(""),
                                            u = n.splice(s, c - s + 1, h);
                                        h.value = u.map((function(e) {
                                            return e.value
                                        })).join("")
                                    }
                                    c = s
                                } else d instanceof r || (c = void 0)
                            }
                        }
                        return n
                    }

                    function S(e) {
                        for (var t = [], o = 0; o < e.length; o++) e[o] instanceof r || t.push(e[o]);
                        return t
                    }

                    function C(e) {
                        e = S(e);
                        for (var t, o = [], i = [], r = 0; r < e.length; r++) {
                            var a = e[r];
                            if (a instanceof l) i.length && i[i.length - 1].minPrecedence > a.precedence && (i[i.length - 1].minPrecedence = a.precedence);
                            else if (a instanceof n) i.push(t = {
                                minPrecedence: 1 / 0,
                                openBraceIndex: r
                            });
                            else if (a instanceof s) {
                                var c = e[(t = i.pop()).openBraceIndex - 1],
                                    d = e[r + 1];
                                d instanceof l && !(d.precedence <= t.minPrecedence) || !(!(c instanceof l) || c.precedence < t.minPrecedence || c.precedence === t.minPrecedence && c.commutative) || (o.unshift(t.openBraceIndex), o.push(r), i.length && i[i.length - 1].minPrecedence > t.minPrecedence && (i[i.length - 1].minPrecedence = t.minPrecedence))
                            }
                        }
                        for (r = o.length; r--;) e.splice(o[r], 1);
                        return e
                    }

                    function k(e) {
                        if ("string" != typeof e) throw new TypeError("expression must be a string");
                        return (e = w(e)).filter((function(e) {
                            return e instanceof g
                        })).map((function(e) {
                            return e.exchange()
                        })).filter((function(e) {
                            return e
                        }))
                    }

                    function x(e) {
                        return 1 !== (e = k(e)).length ? null : e[0]
                    }

                    function F(e, t) {
                        return (e = k(e)).some((function(e) {
                            return t.includes((e || "").toUpperCase())
                        }))
                    }

                    function T(e) {
                        return e.join("")
                    }
                    return {
                        tokenize: w,
                        validate: function(e) {
                            for (var t = "init", o = "var", i = t, a = {
                                    warnings: [],
                                    errors: [],
                                    isEmpty: !0
                                }, c = [], d = 0; d < e.length; d++) {
                                if (!((u = e[d]) instanceof r)) {
                                    if (delete a.isEmpty, u.isIncomplete) {
                                        var h = {
                                            status: "incomplete",
                                            reason: "incomplete_token",
                                            offset: u._offset,
                                            token: u
                                        };
                                        if (u.incompleteSuggest && (h.recover = {
                                                append: u.incompleteSuggest()
                                            }), a.warnings.push(h), d !== e.length - 1) {
                                            h.status = "error";
                                            continue
                                        }
                                    }
                                    if (u instanceof g || u instanceof m) {
                                        if (i === o) {
                                            a.errors.push({
                                                status: "error",
                                                reason: "unexpected_token",
                                                offset: u._offset,
                                                token: u
                                            });
                                            continue
                                        }
                                        i = o
                                    } else if (u instanceof l) {
                                        if (i !== o) {
                                            a.errors.push({
                                                status: "error",
                                                reason: "unexpected_token",
                                                offset: u._offset,
                                                token: u
                                            });
                                            continue
                                        }
                                        i = "operator"
                                    } else if (u instanceof n) {
                                        if (i === o) {
                                            a.errors.push({
                                                status: "error",
                                                reason: "unexpected_token",
                                                offset: u._offset,
                                                token: u
                                            });
                                            continue
                                        }
                                        c.push(u), i = t
                                    } else if (u instanceof s) {
                                        if (i !== o) {
                                            a.errors.push({
                                                status: "error",
                                                reason: "unexpected_token",
                                                offset: u._offset,
                                                token: u
                                            });
                                            continue
                                        }
                                        c.pop() || a.errors.push({
                                            status: "error",
                                            reason: "unbalanced_brace",
                                            offset: u._offset,
                                            token: u,
                                            recover: {
                                                prepend: new n
                                            }
                                        }), i = o
                                    } else u instanceof v && a.errors.push({
                                        status: "error",
                                        reason: "unparsed_entity",
                                        offset: u._offset,
                                        token: u
                                    })
                                }
                            }
                            for (a.braceBalance = c.length, i !== o && a.warnings.push({
                                    status: "incomplete"
                                }); c.length;) {
                                var u;
                                h = {
                                    status: "incomplete",
                                    reason: "unbalanced_brace",
                                    offset: (u = c.pop())._offset,
                                    token: u
                                };
                                i === o && (h.recover = {
                                    append: new s
                                }), a.warnings.push(h)
                            }
                            return a.currentState = i, 0 === a.warnings.length && delete a.warnings, 0 === a.errors.length && delete a.errors, a
                        },
                        factorOutBraces: C,
                        normalizeTokens: function(e) {
                            for (var t = 0; t < e.length; t++) e[t].parse && e[t].parse();
                            return e
                        },
                        flip: function(e) {
                            var t = function(e) {
                                for (var t, o = 0, i = 1, a = 2, c = 3, d = o, u = 0, p = 0; p < e.length; p++) {
                                    var _ = e[p];
                                    if (!(_ instanceof r)) switch (d) {
                                        case o:
                                            if (!(_ instanceof m && 1 == +_.value)) return !1;
                                            d = i;
                                            break;
                                        case i:
                                            if (!(d === i && _ instanceof h)) return !1;
                                            d = a, t = p + 1;
                                            break;
                                        case a:
                                            if (_ instanceof n) d = c, u = 1;
                                            else if (_ instanceof l) return !1;
                                            break;
                                        case c:
                                            _ instanceof n ? u++ : _ instanceof s && --u <= 0 && (d = a)
                                    }
                                }
                                return e.slice(t)
                            }(e);
                            return C(t || [new m("1"), new h, new n].concat(e).concat(new s))
                        },
                        hasBatsSymbols: function(e) {
                            return F(e, ["BATS"])
                        },
                        hasEodSymbols: function(e) {
                            return (e = x(e)) && -1 !== e.toUpperCase().indexOf("_EOD")
                        },
                        hasChxjpySymbols: function(e) {
                            return F(e, ["CHXJPY"])
                        },
                        hasFreeDelaySymbols: function(e) {
                            return F(e, pro.getProductsByType(pro.PRODUCT_TYPES.exchange).map((function(e) {
                                return e.exchange.toUpperCase() + "_DLY"
                            })))
                        },
                        getExchange: x,
                        getExchanges: k,
                        isExchange: function(e, t) {
                            return !!(e = x(e)) && e.substring(0, t.length) === t
                        },
                        SymbolToken: g,
                        IncompleteSymbolToken: f,
                        NumberToken: m,
                        BinaryOperatorToken: l,
                        OpenBraceToken: n,
                        CloseBraceToken: s,
                        ticker: function(e) {
                            return new g(e).ticker()
                        },
                        shortName: function(e) {
                            if ("string" != typeof e) throw new TypeError("expression must be a string");
                            var t = C(S(w(e)));
                            return t.forEach((function(e) {
                                e instanceof g && e.exchange(null)
                            })), T(t)
                        },
                        normalize: function(e) {
                            if ("string" != typeof e) throw new TypeError("expression must be a string");
                            return T(C(S(w(e))))
                        }
                    }
                }();
            e.exports = o
        },
        257772: (e, t, o) => {
            "use strict";

            function i(e) {
                e.dispatchEvent(new CustomEvent("roving-tabindex:main-element"))
            }

            function r(e) {
                e.dispatchEvent(new CustomEvent("roving-tabindex:secondary-element"))
            }
            o.d(t, {
                becomeMainElement: () => i,
                becomeSecondaryElement: () => r
            })
        },
        871646: (e, t, o) => {
            "use strict";
            o.d(t, {
                mapKeyCodeToDirection: () => c,
                navigationOrderComparator: () => n,
                queryFocusableElements: () => l,
                queryTabbableElements: () => s,
                updateTabIndexes: () => a
            });
            var i = o(881025),
                r = o(355734);

            function n(e, t) {
                return e === t ? 0 : e.compareDocumentPosition(t) & Node.DOCUMENT_POSITION_FOLLOWING ? -1 : 1
            }

            function s(e) {
                return Array.from(e.querySelectorAll('button:not([disabled]):not([aria-disabled]):not([tabindex="-1"]), [tabindex]:not([disabled]):not([aria-disabled]):not([tabindex="-1"])')).filter((0, r.createScopedVisibleElementFilter)(e))
            }

            function l(e) {
                return Array.from(e.querySelectorAll('button:not([disabled]):not([aria-disabled="true"]):not([aria-disabled=""]), [tabindex]:not([disabled]):not([aria-disabled="true"]):not([aria-disabled=""])')).filter((0, r.createScopedVisibleElementFilter)(e))
            }

            function a() {
                window.dispatchEvent(new CustomEvent("keyboard-navigation-activation", {
                    bubbles: !0
                }))
            }

            function c(e) {
                const t = (0, i.isRtl)();
                switch (e) {
                    case 38:
                        return "blockPrev";
                    case 40:
                        return "blockNext";
                    case 37:
                        return t ? "inlineNext" : "inlinePrev";
                    case 39:
                        return t ? "inlinePrev" : "inlineNext";
                    default:
                        return null
                }
            }
        },
        168847: (e, t, o) => {
            "use strict";
            o.d(t, {
                SidebarCustomScroll: () => h
            });
            var i = o(778785),
                r = o(942634),
                n = o(318557),
                s = o(939656),
                l = o(404573);
            const a = [() => navigator.userAgent.includes("Win") && navigator.userAgent.includes("Chrome") ? 1 / window.devicePixelRatio : 1, () => 16, (e = (() => 0)) => {
                var t;
                return .8 * (null !== (t = e()) && void 0 !== t ? t : 0)
            }];
            o(693558);
            var c = o(596789);
            const d = {
                headerHeight: 0,
                additionalClass: "",
                alwaysVisible: !1,
                showBottomShadow: !0,
                scrollMarginTop: 1,
                bubbleScrollEvent: !1
            };
            class h {
                constructor(e, t, o = {}) {
                    if (this.scrolled = new r.Delegate, this.scrolltoend = new r.Delegate, this.scrolltostart = new r.Delegate, this.visibilityCallbacks = [], this._scrollTargetTop = 0, this._scrollSpeed = 40, this._shadowOffset = 10, this._shadowTop = null, this._shadowBottom = null, this._dragInitialized = !1, this._dragging = !1, this._draggable = null, this._atStart = !1, this._atEnd = !1, this._stickyBottom = null, this._animation = null, this._saved = null, this._options = { ...d,
                            ...o
                        }, this._wrapper = e, this._wrapper.classList.add(c.wrapper), this._content = t, this._headerHeight = this._options.headerHeight, this._scrollMarginTop = this._options.scrollMarginTop, this._scrollBar = document.createElement("div"), this._scrollBar.classList.add("sb-scrollbar", "sb-scrollbar-body"), this._options.additionalClass && this._scrollBar.classList.add(this._options.additionalClass), this._scrollBar.classList.toggle("active-always", this._options.alwaysVisible), this._scrollBarWrapper = document.createElement("div"), this._scrollBarWrapper.classList.add("sb-scrollbar-wrap"),
                        this._touch = i.touch, this._touch) return this._content.style.position = "relative", this._wrapper.classList.add(c.touch), void this._wrapper.addEventListener("scroll", (() => this._onScroll()));
                    this._wrapper.style.overflow = "hidden", this._unsubscribe = (() => {
                        const e = () => {
                                this._dragging || (this._options.alwaysVisible || this._scrollBar.classList.add("active"), this._onScroll())
                            },
                            t = () => {
                                this._dragging || (this._options.alwaysVisible || this._scrollBar.classList.remove("active"), this._onScroll())
                            },
                            o = e => {
                                const t = e.target instanceof HTMLElement ? e.target : null;
                                if ((!!!(null == t ? void 0 : t.closest(".ignore-horizontal-scroll")) || e.deltaY) && !e.defaultPrevented) {
                                    const t = function(e, t = (() => ({}))) {
                                        return {
                                            x: e.deltaX * a[e.deltaMode]((() => t().width)),
                                            y: e.deltaY * a[e.deltaMode]((() => t().height))
                                        }
                                    }(e, (() => ({
                                        height: this._wrapper.clientHeight
                                    }))).y;
                                    this.scroll(-t, 1) || (e.stopPropagation(), e.preventDefault())
                                }
                            };
                        return this._wrapper.addEventListener("mouseenter", e), this._wrapper.addEventListener("mouseleave", t), this._wrapper.addEventListener("wheel", o), () => {
                            this._wrapper.removeEventListener("mouseenter", e), this._wrapper.removeEventListener("mouseleave", t), this._wrapper.removeEventListener("wheel", o)
                        }
                    })(), !1 !== this._options.showTopShadow && (this._shadowTop = document.createElement("div"), this._shadowTop.classList.add("sb-inner-shadow", "top", "i-invisible"), this._wrapper.appendChild(this._shadowTop)), !1 !== this._options.showBottomShadow && (this._shadowBottom = document.createElement("div"), this._shadowBottom.classList.add("sb-inner-shadow"), this._wrapper.appendChild(this._shadowBottom)), this._shadowTop && this._headerHeight && (this._shadowTop.style.top = this._headerHeight - this._shadowOffset + "px"), this._wrapper.appendChild(this._scrollBarWrapper), this._scrollBarWrapper.appendChild(this._scrollBar), this._onScroll()
                }
                isTouch() {
                    return this._touch
                }
                getScrollBar() {
                    return this._scrollBar
                }
                initDraggable() {
                    return this._dragInitialized || (this._draggable = new l.Draggable({
                        axis: "y",
                        source: this._scrollBar,
                        containment: this._scrollBarWrapper,
                        start: () => {
                            this._dragging = !0
                        },
                        stop: () => {
                            this._dragging = !1
                        },
                        drag: () => {
                            this.updateScroll()
                        }
                    }), this._dragInitialized = !0), this
                }
                updateScroll() {
                    if (this._touch) return this;
                    const e = Math.ceil((0, n.position)(this._scrollBar).top - this._scrollMarginTop - this._headerHeight),
                        t = this.getContainerHeightWithoutHeader(),
                        o = (0, n.outerHeight)(this._content),
                        i = o - t - 1;
                    return t <= 0 || (this._scrollTargetTop = i <= 0 ? this._headerHeight : Math.min(-e * o / t + this._headerHeight, this._headerHeight), e + (0, n.contentHeight)(this._scrollBar) + 2 >= t ? this.scrollToEnd() : (this._content.style.top = this._scrollTargetTop + "px", this._onScroll())), this
                }
                getContainerHeightWithoutHeader() {
                    return this._wrapper.getBoundingClientRect().height - this._headerHeight
                }
                getContainerHeight() {
                    return this._wrapper.getBoundingClientRect().height
                }
                getContentHeight() {
                    return this._content.getBoundingClientRect().height
                }
                updateScrollBar() {
                    if (this._touch) return this;
                    const e = (0,
                            n.position)(this._content).top,
                        t = this.getContentHeight(),
                        o = this.getContainerHeight(),
                        i = this.getContainerHeightWithoutHeader(),
                        r = 1 + this._headerHeight,
                        s = i - 2,
                        l = (Math.abs(e) - this._headerHeight) * s / t,
                        a = o * o / t;
                    return this.isContentShort() ? (this._scrollBar.classList.add("js-hidden"), this._wrapper.classList.remove("sb-scroll-active")) : (this._scrollBar.classList.remove("js-hidden"), this._scrollBar.style.height = a + "px", this._scrollBar.style.top = r + l + "px", this._wrapper.classList.add("sb-scroll-active"), this.initDraggable()), this
                }
                scroll(e, t) {
                    const o = (0, n.position)(this._content).top,
                        i = (0, n.outerHeight)(this._content) - this.getContainerHeightWithoutHeader() - 1,
                        r = t || this._scrollSpeed;
                    return i <= 0 || (this._scrollTargetTop = Math.max(-i + this._headerHeight, Math.min(this._headerHeight, o + e * r)), this.setContentTop(this._scrollTargetTop), this._onScroll())
                }
                animateTo(e) {
                    if (this._touch) return this;
                    const t = (0, n.outerHeight)(this._content) - this.getContainerHeightWithoutHeader() - 1;
                    if (t <= 0) return !0;
                    this._scrollTargetTop = Math.max(-t + this._headerHeight, Math.min(this._headerHeight, -e)), this._animation && this._animation.stop(), this._animation = (0, s.doAnimate)({
                        duration: 500,
                        from: parseFloat(getComputedStyle(this._content).top),
                        to: this._scrollTargetTop,
                        onStep: (e, t) => {
                            this._content.style.top = t + "px"
                        },
                        onComplete: () => {
                            this._onScroll()
                        }
                    })
                }
                resize() {
                    const e = (0, n.outerHeight)(this._content),
                        t = (0, n.outerHeight)(this._wrapper);
                    !this._options.vAlignBottom && e < t ? this.atStart() || this.scrollToStart() : this.atEnd() ? this.scrollToEnd() : "number" == typeof this._stickyBottom && this.setContentTop(Math.min(0, this._stickyBottom + (0, n.outerHeight)(this._wrapper) - (0, n.outerHeight)(this._content)))
                }
                resizeHeader(e) {
                    const t = e - this._headerHeight;
                    this._headerHeight = e, this._scrollTargetTop += t, this._shadowTop && (this._shadowTop.style.top = this._headerHeight - this._shadowOffset + "px"), this.resize()
                }
                scrollTo(e, t) {
                    const o = {
                        position: "visible",
                        areaHeight: e instanceof HTMLElement ? (0, n.contentHeight)(e) : 0,
                        ...t
                    };
                    e instanceof HTMLElement && (e = o.offsetTop || (0, n.position)(e).top);
                    const i = (0, n.position)(this._content).top,
                        r = this._content.getBoundingClientRect().height,
                        s = this.getContainerHeightWithoutHeader();
                    if (r - s - 1 <= 0) return !0;
                    const l = -1 * (i - this._headerHeight),
                        a = l + s;
                    let c = 0;
                    if ("visible" === o.position) {
                        if (e > l && e + o.areaHeight < a) return !1;
                        c = e + o.areaHeight > a ? a - e - o.areaHeight : l - e
                    } else "top" === o.position && (c = l - e);
                    return this.scroll(c, 1), this._onScroll(), !1
                }
                scrollToEnd() {
                    const e = (0, n.position)(this._content).top,
                        t = (0, n.outerHeight)(this._content),
                        o = (0, n.outerHeight)(this._wrapper),
                        i = t > o ? e + (o - (t + e)) + 1 : 1;
                    return this.setContentTop(i), this._onScroll(), this
                }
                scrollToStart() {
                    return this.setContentTop(this._headerHeight), this._onScroll(), this
                }
                currentPosition() {
                    return Math.round((0, n.position)(this._content).top)
                }
                atStart() {
                    return Math.round((0, n.position)(this._content).top) >= this._headerHeight
                }
                atEnd(e) {
                    "number" == typeof e && isFinite(e) || (e = 0);
                    const t = Math.round((0, n.position)(this._content).top),
                        o = Math.floor((0, n.outerHeight)(this._content)),
                        i = Math.floor((0, n.outerHeight)(this._wrapper));
                    return o - Math.abs(t) - 1 <= i + e
                }
                checkContentVisibility() {
                    this._onContentVisible()
                }
                subscribeToContentVisible(e, t, o) {
                    this.visibilityCallbacks.push({
                        id: e,
                        element: t,
                        callback: o
                    })
                }
                triggerVisibilityCallbacks(e) {
                    this._onContentVisible(e)
                }
                save() {
                    return this._saved = {
                        top: (0, n.position)(this._content).top,
                        height: (0, n.outerHeight)(this._content)
                    }, this
                }
                restore() {
                    if (this._saved) {
                        if (this._saved.top === (0, n.position)(this._content).top && this._saved.height === (0, n.outerHeight)(this._content)) return this._saved = null, this;
                        this._options.vAlignBottom && (this._saved.top -= (0, n.outerHeight)(this._content) - this._saved.height, this._saved.top > this._headerHeight && (this._saved.top = this._headerHeight)), this.setContentTop(this._saved.top), this._saved = null, this._onScroll(!0)
                    }
                    return this
                }
                setContentTop(e) {
                    return this._touch ? this._options.vAlignBottom && (0, n.outerHeight)(this._content) < (0, n.outerHeight)(this._wrapper) ? (this._wrapper.style.overflowY = "visible", this._content.style.position = "absolute", this._content.style.bottom = "0px") : (this._content.style.position = "relative", this._content.style.position = "auto", this._wrapper.style.overflowY = "auto", this._wrapper.scrollTop = -e) : this._content.style.top = e + "px", this
                }
                isContentShort() {
                    return this.getContentHeight() <= this.getContainerHeightWithoutHeader()
                }
                destroy() {
                    var e;
                    this._animation && this._animation.stop(), this._scrollBarWrapper && this._scrollBarWrapper.remove(), this._shadowBottom && this._shadowBottom.remove(), this._shadowTop && this._shadowTop.remove(), this._draggable && (this._draggable.destroy(), this._draggable = null), this._content.style.cssText = "", this._wrapper.style.cssText = "", null === (e = this._unsubscribe) || void 0 === e || e.call(this)
                }
                _onScroll(e) {
                    this._touch || (this._content.style.bottom = "auto"), this.scrolled.fire(), this._dragging && !0 !== e || this.updateScrollBar();
                    const t = this.atStart(),
                        o = this.atEnd();
                    return this._shadowTop && this._shadowTop.classList.toggle("i-invisible", !!t), this._shadowBottom && this._shadowBottom.classList.toggle("i-invisible", !!o), this._onContentVisible(), !this._atStart && t ? (this._atStart = !0, this.scrolltostart.fire()) : this._atStart && !t && (this._atStart = !1), !this._atEnd && o ? (this._atEnd = !0, this.scrolltoend.fire()) : this._atEnd && !o && (this._atEnd = !1), this._options.vAlignBottom && (this._stickyBottom = (0, n.outerHeight)(this._content) - Math.abs((0, n.position)(this._content).top) - (0, n.outerHeight)(this._wrapper)), (this._atStart || this._atEnd) && ("function" == typeof this._options.bubbleScrollEvent ? Boolean(this._options.bubbleScrollEvent()) : Boolean(this._options.bubbleScrollEvent))
                }
                _contentIsVisible(e) {
                    return (0, n.position)(e.element).top > -1 * this.currentPosition()
                }
                _onContentVisible(e) {
                    if (!this.visibilityCallbacks.length) return;
                    const t = e || this._contentIsVisible.bind(this),
                        o = [],
                        i = this.visibilityCallbacks.filter(((e, i) => {
                            if (!this._content.contains(e.element)) return !1;
                            const r = t(e);
                            return r && o.push(i), !r
                        }));
                    o.forEach((t => {
                        this.visibilityCallbacks[t].callback(!!e)
                    })), this.visibilityCallbacks = i
                }
            }
        },
        149109: (e, t, o) => {
            "use strict";
            o.d(t, {
                allChartStyles: () => s
            });
            var i = o(764829),
                r = o(125226);
            const n = (0, o(638456).onWidget)();

            function s() {
                return function() {
                    const e = [0, 1, 9, 13, 2, 14, 15, 3, 16, 10];
                    return e.push(12), n || e.push(17), n || e.push(18), (0, r.isFeatureEnabled)("vpsession_chart_type") && !n && e.push(20), n || e.push(19), e
                }().concat(function() {
                    const e = [8];
                    return i.enabled("japanese_chart_styles") && (e.push(4, 7, 5, 6), e.push(11)), e
                }())
            }
        },
        378975: (e, t, o) => {
            "use strict";
            o.d(t, {
                Interval: () => d,
                ResolutionKind: () => n,
                SpecialResolutionKind: () => s
            });
            const i = /^(\d*)([TSHDWMR])$/,
                r = /^(\d+)$/;
            var n, s;
            ! function(e) {
                e.Ticks = "ticks", e.Seconds = "seconds", e.Minutes = "minutes", e.Days = "days", e.Weeks = "weeks", e.Months = "months", e.Range = "range", e.Invalid = "invalid"
            }(n || (n = {})),
            function(e) {
                e.Hours = "hours"
            }(s || (s = {}));
            const l = {};
            l[n.Ticks] = 1e3, l[n.Seconds] = 1e3, l[n.Minutes] = 60 * l[n.Seconds], l[n.Days] = 1440 * l[n.Minutes], l[n.Weeks] = 7 * l[n.Days];
            const a = {
                    T: n.Ticks,
                    S: n.Seconds,
                    D: n.Days,
                    W: n.Weeks,
                    M: n.Months,
                    R: n.Range
                },
                c = new Set([n.Ticks, n.Seconds, n.Minutes]);
            class d {
                constructor(e, t) {
                    this._kind = n.Invalid, this._multiplier = 0, e !== n.Invalid && t > 0 && (this._kind = e, this._multiplier = t)
                }
                kind() {
                    return this._kind
                }
                multiplier() {
                    return this._multiplier
                }
                isValid() {
                    return this.kind() !== n.Invalid && this.multiplier() > 0
                }
                isDWM() {
                    return this.isValid() && !this.isRange() && !this.isIntraday() && !this.isTicks()
                }
                isIntraday() {
                    const e = c.has(this.kind());
                    return this.isValid() && e
                }
                isSeconds() {
                    return this.kind() === n.Seconds
                }
                isMinutes() {
                    return this.kind() === n.Minutes
                }
                isMinuteHours() {
                    return this.kind() === n.Minutes && ((e = this.multiplier()) >= 60 && !(e % 60));
                    var e
                }
                isDays() {
                    return this.kind() === n.Days
                }
                isWeeks() {
                    return this.kind() === n.Weeks
                }
                isMonths() {
                    return this.kind() === n.Months
                }
                isRange() {
                    return this.kind() === n.Range
                }
                isTicks() {
                    return this.kind() === n.Ticks
                }
                is1Tick() {
                    return this.isTicks() && 1 === this.multiplier()
                }
                isTimeBased() {
                    return !this.isRange()
                }
                letter() {
                    return this.isValid() && this.kind() !== n.Minutes ? this.kind()[0].toUpperCase() : ""
                }
                value() {
                    return this.isValid() ? this.kind() === n.Minutes ? this.multiplier() + "" : this.multiplier() + this.letter() : ""
                }
                isEqualTo(e) {
                    if (!(e instanceof d)) throw new Error("Argument is not an Interval");
                    return !(!this.isValid() || !e.isValid()) && (this.kind() === e.kind() && this.multiplier() === e.multiplier())
                }
                inMilliseconds(e = Date.now()) {
                    if (!this.isValid() || this.isRange()) return NaN;
                    if (this.isMonths()) {
                        const t = new Date(e);
                        t.setUTCMonth(t.getUTCMonth() + (this.multiplier() || 1));
                        return +t - e
                    }
                    const t = this.multiplier();
                    return l[this.kind()] * t
                }
                static isEqual(e, t) {
                    return e === t || d.parse(e).isEqualTo(d.parse(t))
                }
                static parseExt(e) {
                    e = (e + "").toUpperCase().split(",")[0];
                    let t = i.exec(e);
                    return null !== t ? "H" === t[2] ? {
                        interval: new d(n.Minutes, 60 * h(t[1])),
                        guiResolutionKind: s.Hours
                    } : {
                        interval: new d(a[t[2]], h(t[1])),
                        guiResolutionKind: a[t[2]]
                    } : (t = r.exec(e), null !== t ? {
                        interval: new d(n.Minutes, h(t[1])),
                        guiResolutionKind: n.Minutes
                    } : {
                        interval: new d(n.Invalid, 0),
                        guiResolutionKind: n.Invalid
                    })
                }
                static parse(e) {
                    return d.parseExt(e).interval
                }
                static kind(e) {
                    return d.parse(e).kind()
                }
                static isValid(e) {
                    return d.parse(e).isValid()
                }
                static isDWM(e) {
                    return d.parse(e).isDWM()
                }
                static isIntraday(e) {
                    return d.parse(e).isIntraday()
                }
                static isSeconds(e) {
                    return d.parse(e).isSeconds()
                }
                static isMinutes(e) {
                    return d.parse(e).isMinutes()
                }
                static isMinuteHours(e) {
                    return d.parse(e).isMinuteHours()
                }
                static isDays(e) {
                    return d.parse(e).isDays()
                }
                static isWeeks(e) {
                    return d.parse(e).isWeeks()
                }
                static isMonths(e) {
                    return d.parse(e).isMonths()
                }
                static isRange(e) {
                    return d.parse(e).isRange()
                }
                static isTicks(e) {
                    return d.parse(e).isTicks()
                }
                static isTimeBased(e) {
                    return d.parse(e).isTimeBased()
                }
                static normalize(e) {
                    const t = d.parse(e);
                    return t.isValid() ? t.value() : null
                }
            }

            function h(e) {
                return 0 === e.length ? 1 : parseInt(e, 10)
            }
        },
        848292: (e, t, o) => {
            "use strict";
            o.d(t, {
                combineProperty: () => r
            });
            var i = o(998418);

            function r(e, ...t) {
                const o = () => e(...t.map((e => e.value()))),
                    r = (0, i.createPrimitiveProperty)(o()),
                    n = () => r.setValue(o()),
                    s = {};
                for (const e of t) e.subscribe(s, n);
                return r.destroy = () => {
                    t.forEach((e => e.unsubscribeAll(s))), t.forEach((e => e.release()))
                }, r
            }
        },
        272933: (e, t, o) => {
            "use strict";
            o.d(t, {
                combineProperty: () => s.combineProperty,
                createWVFromGetterAndSubscription: () => i.createWVFromGetterAndSubscription,
                createWVFromGetterAndSubscriptions: () => r.createWVFromGetterAndSubscriptions,
                createWVFromProperty: () => n.createWVFromProperty
            });
            var i = o(523965),
                r = o(203918),
                n = o(874145),
                s = (o(331613), o(848292))
        },
        523965: (e, t, o) => {
            "use strict";
            o.d(t, {
                createWVFromGetterAndSubscription: () => r
            });
            var i = o(375397);

            function r(e, t) {
                const o = new i.WatchedValue(e()),
                    r = {};
                t.subscribe(r, (() => {
                    o.setValue(e())
                }));
                return o.readonly().spawn((() => t.unsubscribeAll(r)))
            }
        },
        203918: (e, t, o) => {
            "use strict";
            o.d(t, {
                createWVFromGetterAndSubscriptions: () => r
            });
            var i = o(375397);

            function r(e, t) {
                const o = new i.WatchedValue(e()),
                    r = {};
                t.forEach((t => t.subscribe(r, (() => {
                    o.setValue(e())
                }))));
                return o.readonly().spawn((() => t.forEach((e => e.unsubscribeAll(r)))))
            }
        },
        874145: (e, t, o) => {
            "use strict";
            o.d(t, {
                createWVFromProperty: () => r
            });
            var i = o(523965);

            function r(e) {
                return (0, i.createWVFromGetterAndSubscription)((() => e.value()), e)
            }
        },
        658843: (e, t, o) => {
            "use strict";
            o.d(t, {
                Property: () => h
            });
            var i = o(569708),
                r = o(283873),
                n = o(683350),
                s = o(688987),
                l = o(650151),
                a = o(942634),
                c = o(805578);

            function d(e) {
                return null === e || (0, i.default)(e) && Number.isFinite(e) || (0, r.default)(e) || (0, n.default)(e)
            }
            class h {
                constructor(e) {
                    if (this._listeners = new a.Delegate, this._muteChildChanges = !1, this._childs = [], this._dependents = [], void 0 !== e)
                        if (d(e)) this._value = e;
                        else
                            for (const [t, o] of Object.entries(e)) this.addProperty(t, o)
                }
                destroy() {
                    var e, t;
                    this.listeners().destroy();
                    for (const o of this._childs) null === (t = null === (e = this.child(o)) || void 0 === e ? void 0 : e.destroy) || void 0 === t || t.call(e)
                }
                merge(e, t) {
                    let o = null,
                        i = 0;
                    if (t && (o = [], i = o.length), void 0 === e) return o;
                    if (d(e)) return this._value !== e && (null == o || o.push(this)), this._value = e, o;
                    if (Array.isArray(e))
                        for (let i = 0; i < e.length; i++) {
                            const r = this.childs()[i];
                            if (r) {
                                const n = r.merge(e[i], t);
                                null == o || o.push(...n)
                            } else {
                                const t = this.addProperty(`${i}`, e[i]);
                                null == o || o.push(t)
                            }
                        } else
                            for (const [i, r] of Object.entries(e)) {
                                const e = this.childs()[i];
                                if (e) {
                                    const i = e.merge(r, t);
                                    null == o || o.push(...i)
                                } else {
                                    const e = this.addProperty(i, r);
                                    null == o || o.push(e)
                                }
                            }
                    return o && o.length > i && o.push(this), o
                }
                mergeAndFire(e) {
                    const t = (0, l.ensureNotNull)(this.merge(e, !0));
                    this._muteChildChanges = !0;
                    for (const e of t) e._muteChildChanges = !0;
                    for (const e of t) e._muteChildChanges = !1, e.listeners().fire(e, "");
                    this._muteChildChanges = !1, t.length > 0 && this.listeners().fire(this, "")
                }
                state(e) {
                    let t = (0, s.default)(this.value) ? this.value() : void 0;
                    void 0 === t && (t = {});
                    for (const o of this._childs) {
                        if (e && -1 !== e.indexOf(o)) continue;
                        const i = this.childs()[o];
                        let r;
                        if (e) {
                            const t = [];
                            for (const i of e) i.startsWith(o + ".") && t.push(i.substring(o.length + 1));
                            r = null == i ? void 0 : i.state(t)
                        } else r = null == i ? void 0 : i.state();
                        (void 0 !== r || (null == i ? void 0 : i.storeStateIfUndefined())) && (t[o] = r)
                    }
                    return t
                }
                clone() {
                    return new h(this.state())
                }
                value() {
                    return this._value
                }
                listeners() {
                    return this._listeners
                }
                childCount() {
                    return this._childs.length
                }
                childNames() {
                    return this._childs
                }
                child(e) {
                    return this.childs()[e]
                }
                childByPath(e) {
                    let t = this;
                    for (const o of e.split(".")) {
                        if (void 0 === t) break;
                        t = t.child(o)
                    }
                    return t
                }
                hasChild(e) {
                    return this._childs.includes(e)
                }
                setValue(e, t) {
                    (this._value !== e || t) && (this._value = e, this._listeners.fire(this, ""))
                }
                setValueSilently(e) {
                    this._value = e
                }
                addProperty(e, t) {
                    const o = new h(t);
                    return this[e] = o, this._childs.push(e), o.subscribe(this, ((t, o) => this.childChanged(t, o ? `${e}.${o}` : e))), o
                }
                removeProperty(e) {
                    this[e].unsubscribeAll(this), delete this[e], this._childs = this._childs.filter((t => t !== e))
                }
                addChild(e, t) {
                    const o = this;
                    o[e] && o[e].unsubscribeAll(this), o[e] = t, -1 === this._childs.indexOf(e) && this._childs.push(e), t.subscribe(this, ((t, o) => this.childChanged(t, o ? `${e}.${o}` : e)))
                }
                childChanged(e, t) {
                    this._muteChildChanges || this._listeners.fire(this, t)
                }
                subscribe(e, t) {
                    this.listeners().subscribe(e, t, !1)
                }
                unsubscribe(e, t) {
                    this.listeners().unsubscribe(e, t)
                }
                unsubscribeAll(e) {
                    this.listeners().unsubscribeAll(e)
                }
                childs() {
                    return this
                }
                storeStateIfUndefined() {
                    return !0
                }
                ownership() {
                    return (0, c.ownership)(this)
                }
                weakReference() {
                    return (0, c.weakReference)(this)
                }
                addDependent(e) {
                    this._dependents.push(e)
                }
                removeDependent(e) {
                    const t = this._dependents.indexOf(e);
                    t >= 0 && this._dependents.splice(t, 1)
                }
                dependents() {
                    return this._dependents
                }
            }
        },
        255866: (e, t, o) => {
            "use strict";
            o.d(t, {
                VolumeFootprintTypeValues: () => i,
                containsFootprintTimePointIndexes: () => s,
                dematerializeVolumeFootprint: () => a,
                isVolumeFootprintInBarsRange: () => c,
                materializeVolumeFootprint: () => l
            });
            var i, r = o(501571),
                n = o(585240);
            ! function(e) {
                e.BuyAndSell = "Buy and sell", e.Delta = "Delta", e.Total = "Total"
            }(i || (i = {}));
            const s = !0;

            function l(e, t) {
                if (e.index >= t.length) return null;
                let o = t[e.index];
                return o === r.INVALID_TIME_POINT_INDEX && (o = null), null === o ? null : {
                    id: e.id,
                    index: o,
                    poc: e.poc,
                    val: e.val,
                    vah: e.vah,
                    levels: e.levels
                }
            }

            function a(e, t, o) {
                var i;
                return {
                    id: t,
                    index: (0, n.ensureTimePointIndexIndex)(o.indexOf(null !== (i = e.index) && void 0 !== i ? i : r.INVALID_TIME_POINT_INDEX)),
                    poc: e.poc,
                    val: e.val,
                    vah: e.vah,
                    levels: e.levels
                }
            }

            function c(e, t) {
                return t.contains(e.index)
            }
        },
        501571: (e, t, o) => {
            "use strict";
            o.d(t, {
                INVALID_TIME_POINT_INDEX: () => i,
                UNPLOTTABLE_TIME_POINT_INDEX: () => r
            });
            const i = -2e6,
                r = -1e6
        },
        991454: (e, t, o) => {
            "use strict";
            o(566953), o(486393);
            var i = o(673747),
                r = o(62802),
                n = o.n(r),
                s = (o(466281), o(714921)),
                l = o(248213);
            o(383867), o(527910), o(183972);
            var a = o(778785);
            o(486393);
            var c = o(444372),
                d = o(775613);
            var h = o(307239),
                u = o(735211),
                p = o(957365),
                _ = o(142567),
                g = o(574313);
            var m = o(96900);
            const v = new RegExp(/0+$/);
            class f extends u.PriceFormatter {
                constructor(e = {}) {
                    if (void 0 !== e.fractional) throw new Error("Fractional should not be used with this formatter");
                    super(e)
                }
                format(e, t = {}) {
                    const {
                        signPositive: o,
                        tailSize: i,
                        ignoreLocaleNumberFormat: r
                    } = t, n = e.toString(), s = (0, m.getNumberFormat)(this._ignoreLocaleNumberFormat || r);
                    if (-1 !== n.indexOf("e-")) {
                        const e = n.split("e-"),
                            t = Number(e[0]),
                            o = Number(e[1]);
                        return this._fractionalLength && o > this._fractionalLength + 1 ? `0${s.decimalSign}00` : `${t<0?"−":""}0${s.decimalSign}${"0".repeat(o-1)}${Math.abs(Math.round(t))}`
                    } {
                        let t = super.format(e, {
                            signPositive: o,
                            tailSize: i,
                            ignoreLocaleNumberFormat: r
                        });
                        t.includes("e") || (t = t.replace(v, ""));
                        const [n, l] = t.split(s.decimalSign);
                        return l && l.length >= 2 ? t : `${n}${s.decimalSign}${((l||"")+"00").substring(0,2)}`
                    }
                }
            }
            var y = o(719240),
                b = o(257288),
                w = o(716451),
                S = o(715050);
            const C = (0, o(856660).getScreenerIntervals)(),
                k = "1D";

            function x(e) {
                return C.find((t => t.id === e))
            }

            function F(e, t) {
                if (e = function(e) {
                        if (Ue[e] && Ue[e].alias) return Ue[e].alias;
                        return e
                    }(e), /(change|change_abs).\d{1,3}/.test(e) || Ue[e] && Ue[e].useDefaultTimeIntervalFromFieldName) return e.replace(".", "|");
                if (!t || t === k || Ue[e] && Ue[e].useDefaultTimeInterval) return e;
                const o = x(t);
                if (o) {
                    const t = o.value || "";
                    if (Ue[e] && Ue[e].customResolutions) {
                        const o = Ue[e].customResolutions;
                        if (t && -1 !== o.indexOf(t.toString())) return `${e}|${t}`
                    }
                }
                return e
            }
            var T = o(819263),
                M = o(523863);
            const A = {
                    common: ["common", "foreign-issuer"],
                    stock: ["common"],
                    dr: ["", "foreign-issuer"],
                    preferred: ["preferred"],
                    fund: ["fund"],
                    structured: [""],
                    spot: ["spot"],
                    futures: ["futures"]
                },
                D = {
                    closedend: ["closedend"],
                    etf: ["etf", "etf,odd", "etf,otc", "etf,cfd"],
                    etn: ["etn"],
                    mutual: ["mutual"],
                    reit: ["reit", "reit,cfd", "trust,reit"],
                    trust: ["trust"],
                    unit: ["unit"]
                },
                E = {
                    perpetual: ["perpetual"]
                };

            function $(e) {
                let t = [],
                    o = [];
                if (Array.isArray(e))
                    for (const i of e) {
                        const [e, r] = P(i);
                        t = [...t, ...e], o = [...o, ...r]
                    } else [t, o] = P(e);
                return o = [...new Set(o)], t.length && o.length ? [B("type", t), B("subtype", o)] : t.length ? [B("type", t)] : [B("subtype", o)]
            }

            function I(e) {
                const t = [],
                    o = [].concat(e);
                for (const e of o) R(e) && t.push({
                    left: "type",
                    operation: "in_range",
                    right: A[e]
                }), L(e) && t.push({
                    left: "typespecs",
                    operation: "has",
                    right: E[e]
                });
                return {
                    filter2Flag: !0,
                    filter2AndPart: t,
                    filter: []
                }
            }

            function P(e) {
                let t = [],
                    o = [];
                return "etn" === e ? [
                    ["structured"],
                    ["etn"]
                ] : (! function(e) {
                    return e in D
                }(e) ? ! function(e) {
                    return "common" === e || "preferred" === e || "stock" === e
                }(e) ? R(e) ? (t = [e], o = A[e]) : t = [e] : (t.push("stock"), o = A[e]) : (t.push("fund"), o = D[e]), [t, o])
            }

            function B(e, t) {
                const o = (0, M.uniq)(t),
                    i = 1 === o.length;
                return {
                    left: e,
                    operation: i ? "equal" : "in_range",
                    right: i ? o[0] : o
                }
            }

            function R(e) {
                return e in A
            }

            function L(e) {
                return e in E
            }
            var O = o(831154);
            const W = {
                name: [c.t(null, void 0, o(905791)), c.t(null, void 0, o(905791))],
                description: [c.t(null, void 0, o(178734)), c.t(null, void 0, o(178734))],
                country: [c.t(null, void 0, o(899937)), c.t(null, void 0, o(899937))],
                type: [c.t(null, void 0, o(356994)), c.t(null, void 0, o(356994))],
                after_tax_margin: [c.t(null, void 0, o(341051)), c.t(null, void 0, o(134673))],
                average_volume: [c.t(null, void 0, o(628963)), c.t(null, void 0, o(117230))],
                average_volume_30d_calc: [c.t(null, void 0, o(268637)), c.t(null, void 0, o(807239))],
                average_volume_60d_calc: [c.t(null, void 0, o(223169)), c.t(null, void 0, o(125190))],
                average_volume_90d_calc: [c.t(null, void 0, o(788255)), c.t(null, void 0, o(914334))],
                basic_eps_net_income: [c.t(null, void 0, o(489047)), c.t(null, void 0, o(736802))],
                beta_1_year: [c.t(null, void 0, o(169390)), c.t(null, void 0, o(36761))],
                beta_3_year: [c.t(null, void 0, o(851574)), c.t(null, void 0, o(671421))],
                beta_5_year: [c.t(null, void 0, o(89590)), c.t(null, void 0, o(395916))],
                candlestick: [c.t(null, {
                    context: "candlestick_pattern"
                }, o(928137)), c.t(null, {
                    context: "candlestick_pattern"
                }, o(928137))],
                current_ratio: [c.t(null, void 0, o(766730)), c.t(null, void 0, o(107179))],
                debt_to_assets: [c.t(null, void 0, o(163207)), c.t(null, void 0, o(163207))],
                debt_to_equity: [c.t(null, void 0, o(800007)), c.t(null, void 0, o(239308))],
                dividends_paid: [c.t(null, void 0, o(938878)), c.t(null, void 0, o(920332))],
                dividends_per_share_fq: [c.t(null, void 0, o(163627)), c.t(null, void 0, o(373181))],
                dividends_yield: [c.t(null, void 0, o(883408)), c.t(null, void 0, o(864771))],
                dividend_yield_recent: [c.t(null, void 0, o(883408)), c.t(null, void 0, o(864771))],
                dps_common_stock_prim_issue_fy: [c.t(null, void 0, o(712578)), c.t(null, void 0, o(411231))],
                earnings_per_share_basic_ttm: [c.t(null, void 0, o(519391)), c.t(null, void 0, o(986366))],
                earnings_per_share_diluted_ttm: [c.t(null, void 0, o(748754)), c.t(null, void 0, o(748754))],
                earnings_per_share_forecast_next_fq: [c.t(null, void 0, o(39889)), c.t(null, void 0, o(603058))],
                earnings_per_share_fq: [c.t(null, void 0, o(812577)), c.t(null, void 0, o(812577))],
                earnings_release_date: [c.t(null, void 0, o(352969)), c.t(null, void 0, o(352969))],
                earnings_release_next_date: [c.t(null, void 0, o(167826)), c.t(null, void 0, o(167826))],
                ebitda: [c.t(null, void 0, o(740969)), c.t(null, void 0, o(226413))],
                enterprise_value_ebitda_ttm: [c.t(null, void 0, o(288529)), c.t(null, void 0, o(501179))],
                enterprise_value_fq: [c.t(null, void 0, o(661975)), c.t(null, void 0, o(822893))],
                exchange: [c.t(null, void 0, o(786905)), c.t(null, void 0, o(786905))],
                free_cash_flow_margin_fy: [c.t(null, void 0, o(441415)), c.t(null, void 0, o(441415))],
                free_cash_flow_margin_ttm: [c.t(null, void 0, o(829593)), c.t(null, void 0, o(829593))],
                gross_margin: [c.t(null, void 0, o(411483)), c.t(null, void 0, o(821671))],
                gross_profit: [c.t(null, void 0, o(778480)), c.t(null, void 0, o(778480))],
                gross_profit_fq: [c.t(null, void 0, o(221872)), c.t(null, void 0, o(221872))],
                index: [c.t(null, void 0, o(223051)), c.t(null, void 0, o(223051))],
                industry: [c.t(null, void 0, o(407727)), c.t(null, void 0, o(407727))],
                last_annual_eps: [c.t(null, void 0, o(2650)), c.t(null, void 0, o(2650))],
                last_annual_revenue: [c.t(null, void 0, o(545657)), c.t(null, void 0, o(355630))],
                long_term_capital: [c.t(null, void 0, o(239426)), c.t(null, void 0, o(239426))],
                market_cap_basic: [c.t(null, void 0, o(361460)), c.t(null, void 0, o(217839))],
                market_cap_calc: [c.t(null, void 0, o(361460)), c.t(null, void 0, o(217839))],
                market_cap_diluted_calc: [c.t(null, void 0, o(769911)), c.t(null, void 0, o(317812))],
                net_debt: [c.t(null, void 0, o(76272)), c.t(null, void 0, o(27693))],
                net_income: [c.t(null, void 0, o(477692)), c.t(null, void 0, o(364491))],
                number_of_employees: [c.t(null, void 0, o(715223)), c.t(null, void 0, o(731116))],
                number_of_shareholders: [c.t(null, void 0, o(541984)), c.t(null, void 0, o(40908))],
                open_price: [c.t(null, void 0, o(351870)), c.t(null, void 0, o(16610))],
                operating_margin: [c.t(null, void 0, o(767772)), c.t(null, void 0, o(858851))],
                pre_tax_margin: [c.t(null, void 0, o(846426)), c.t(null, void 0, o(610956))],
                preferred_dividends: [c.t(null, void 0, o(709820)), c.t(null, void 0, o(329378))],
                prev_close_price: [c.t(null, void 0, o(764205)), c.t(null, void 0, o(363861))],
                price_52_week_high: [c.t(null, void 0, o(606619)), c.t(null, void 0, o(819159))],
                price_52_week_low: [c.t(null, void 0, o(65925)), c.t(null, void 0, o(357308))],
                price_book_ratio: [c.t(null, void 0, o(673639)), c.t(null, void 0, o(238173))],
                price_earnings_ttm: [c.t(null, void 0, o(809147)), c.t(null, void 0, o(371257))],
                price_percent_change_1_week: [c.t(null, void 0, o(794236)), c.t(null, void 0, o(421792))],
                price_percent_change_4_week: [c.t(null, void 0, o(994378)), c.t(null, void 0, o(250273))],
                price_percent_change_52_week: [c.t(null, void 0, o(918584)), c.t(null, void 0, o(979905))],
                price_revenue_ttm: [c.t(null, void 0, o(839605)), c.t(null, void 0, o(987202))],
                price_sales_ratio: [c.t(null, void 0, o(97257)), c.t(null, void 0, o(227203))],
                quick_ratio: [c.t(null, void 0, o(485571)), c.t(null, void 0, o(633399))],
                return_of_invested_capital_percent_ttm: [c.t(null, void 0, o(38840)), c.t(null, void 0, o(343773))],
                return_on_assets: [c.t(null, void 0, o(270789)), c.t(null, void 0, o(307859))],
                return_on_equity: [c.t(null, void 0, o(181306)), c.t(null, void 0, o(310165))],
                return_on_invested_capital: [c.t(null, void 0, o(156309)), c.t(null, void 0, o(343773))],
                revenue_per_employee: [c.t(null, void 0, o(674129)), c.t(null, void 0, o(137709))],
                sector: [c.t(null, void 0, o(99804)), c.t(null, void 0, o(99804))],
                submarket: [c.t(null, void 0, o(183913)), c.t(null, void 0, o(183913))],
                is_primary: [c.t(null, void 0, o(279362)), c.t(null, void 0, o(279362))],
                active_symbol: [c.t(null, void 0, o(597284)), c.t(null, void 0, o(597284))],
                eps_surprise_fq: [c.t(null, void 0, o(571858)), c.t(null, void 0, o(571858))],
                eps_surprise_percent_fq: [c.t(null, void 0, o(323939)), c.t(null, void 0, o(323939))],
                total_assets: [c.t(null, void 0, o(358964)), c.t(null, void 0, o(104760))],
                total_capital: [c.t(null, void 0, o(719353)), c.t(null, void 0, o(555440))],
                total_current_assets: [c.t(null, void 0, o(339010)), c.t(null, void 0, o(424391))],
                total_debt: [c.t(null, void 0, o(577126)), c.t(null, void 0, o(671507))],
                total_revenue: [c.t(null, void 0, o(307726)), c.t(null, void 0, o(278031))],
                total_liabilities_fy: [c.t(null, void 0, o(87517)), c.t(null, void 0, o(295707))],
                total_liabilities_fq: [c.t(null, void 0, o(220145)), c.t(null, void 0, o(532064))],
                total_shares_outstanding_fundamental: [c.t(null, void 0, o(96234)), c.t(null, void 0, o(288368))],
                volume: [c.t(null, void 0, o(937644)), c.t(null, {
                    context: "study"
                }, o(424261))],
                relative_volume: [c.t(null, void 0, o(963851)), c.t(null, void 0, o(297458))],
                relative_volume_at_time: [c.t(null, void 0, o(78742)), c.t(null, void 0, o(181743))],
                change_abs: [c.t(null, void 0, o(537276)), c.t(null, void 0, o(762888))],
                change: [c.t(null, void 0, o(923599)), c.t(null, void 0, o(335137))],
                "change.1": [c.t(null, void 0, o(413045)).format({
                    resolution: c.t(null, void 0, o(120468))
                }), c.t(null, void 0, o(829761)).format({
                    resolution: c.t(null, void 0, o(120468))
                })],
                "change_abs.1": [c.t(null, void 0, o(354557)).format({
                    resolution: c.t(null, void 0, o(120468))
                }), c.t(null, void 0, o(152555)).format({
                    resolution: c.t(null, void 0, o(120468))
                })],
                "change.5": [c.t(null, void 0, o(413045)).format({
                    resolution: c.t(null, void 0, o(576515))
                }), c.t(null, void 0, o(829761)).format({
                    resolution: c.t(null, void 0, o(576515))
                })],
                "change_abs.5": [c.t(null, void 0, o(354557)).format({
                    resolution: c.t(null, void 0, o(576515))
                }), c.t(null, void 0, o(152555)).format({
                    resolution: c.t(null, void 0, o(576515))
                })],
                "change.15": [c.t(null, void 0, o(413045)).format({
                    resolution: c.t(null, void 0, o(208608))
                }), c.t(null, void 0, o(829761)).format({
                    resolution: c.t(null, void 0, o(208608))
                })],
                "change_abs.15": [c.t(null, void 0, o(354557)).format({
                    resolution: c.t(null, void 0, o(208608))
                }), c.t(null, void 0, o(152555)).format({
                    resolution: c.t(null, void 0, o(208608))
                })],
                "change.60": [c.t(null, void 0, o(413045)).format({
                    resolution: c.t(null, void 0, o(336157))
                }), c.t(null, void 0, o(829761)).format({
                    resolution: c.t(null, void 0, o(336157))
                })],
                "change_abs.60": [c.t(null, void 0, o(354557)).format({
                    resolution: c.t(null, void 0, o(336157))
                }), c.t(null, void 0, o(152555)).format({
                    resolution: c.t(null, void 0, o(336157))
                })],
                "change.240": [c.t(null, void 0, o(413045)).format({
                    resolution: c.t(null, void 0, o(690755))
                }), c.t(null, void 0, o(829761)).format({
                    resolution: c.t(null, void 0, o(690755))
                })],
                "change_abs.240": [c.t(null, void 0, o(354557)).format({
                    resolution: c.t(null, void 0, o(690755))
                }), c.t(null, void 0, o(152555)).format({
                    resolution: c.t(null, void 0, o(690755))
                })],
                "change.1W": [c.t(null, void 0, o(413045)).format({
                    resolution: c.t(null, void 0, o(189696))
                }), c.t(null, void 0, o(829761)).format({
                    resolution: c.t(null, void 0, o(189696))
                })],
                "change_abs.1W": [c.t(null, void 0, o(354557)).format({
                    resolution: c.t(null, void 0, o(189696))
                }), c.t(null, void 0, o(152555)).format({
                    resolution: c.t(null, void 0, o(189696))
                })],
                "change.1M": [c.t(null, void 0, o(413045)).format({
                    resolution: c.t(null, void 0, o(333493))
                }), c.t(null, void 0, o(829761)).format({
                    resolution: c.t(null, void 0, o(333493))
                })],
                "change_abs.1M": [c.t(null, void 0, o(354557)).format({
                    resolution: c.t(null, void 0, o(333493))
                }), c.t(null, void 0, o(152555)).format({
                    resolution: c.t(null, void 0, o(333493))
                })],
                currency: [c.t(null, void 0, o(79899)), c.t(null, void 0, o(79899))],
                pre_change: [c.t(null, void 0, o(796768)), c.t(null, void 0, o(353211))],
                post_change: [c.t(null, void 0, o(287719)), c.t(null, void 0, o(427921))],
                bid: [c.t(null, void 0, o(395506)), c.t(null, void 0, o(395506))],
                ask: [c.t(null, void 0, o(535928)), c.t(null, void 0, o(535928))],
                close: [c.t(null, void 0, o(862578)), c.t(null, void 0, o(862578))],
                open: [c.t(null, void 0, o(16610)), c.t(null, void 0, o(16610))],
                high: [c.t(null, void 0, o(778254)), c.t(null, void 0, o(778254))],
                low: [c.t(null, void 0, o(165318)), c.t(null, void 0, o(165318))],
                gap: [c.t(null, void 0, o(907188)), c.t(null, void 0, o(907188))],
                price_earnings_to_growth_ttm: [c.t(null, void 0, o(6284)), c.t(null, void 0, o(955588))],
                price_sales: [c.t(null, void 0, o(10684)), c.t(null, void 0, o(10684))],
                price_book_fq: [c.t(null, void 0, o(126853)), c.t(null, void 0, o(368565))],
                price_free_cash_flow_ttm: [c.t(null, void 0, o(929758)), c.t(null, void 0, o(461751))],
                float_shares_outstanding: [c.t(null, void 0, o(99768)), c.t(null, void 0, o(620734))],
                free_cash_flow: [c.t(null, void 0, o(844667)), c.t(null, void 0, o(823980))],
                total_shares_outstanding: [c.t(null, void 0, o(600368)), c.t(null, void 0, o(600368))],
                total_shares_diluted: [c.t(null, void 0, o(788149)), c.t(null, void 0, o(788149))],
                total_value_traded: [c.t(null, void 0, o(525729)), c.t(null, void 0, o(660954))],
                change_from_open: [c.t(null, void 0, o(778676)), c.t(null, void 0, o(776021))],
                change_from_open_abs: [c.t(null, void 0, o(643878)), c.t(null, void 0, o(953086))],
                "Perf.W": [c.t(null, void 0, o(890996)), c.t(null, void 0, o(122577))],
                "Perf.1M": [c.t(null, void 0, o(585212)), c.t(null, void 0, o(802933))],
                "Perf.3M": [c.t(null, void 0, o(263886)), c.t(null, void 0, o(514469))],
                "Perf.6M": [c.t(null, void 0, o(143196)), c.t(null, void 0, o(319848))],
                "Perf.Y": [c.t(null, void 0, o(823446)), c.t(null, void 0, o(201989))],
                "Perf.YTD": [c.t(null, void 0, o(807134)), c.t(null, void 0, o(598739))],
                "Perf.5Y": [c.t(null, void 0, o(738333)), c.t(null, void 0, o(166710))],
                "Perf.All": [c.t(null, void 0, o(605881)), c.t(null, void 0, o(963837))],
                "Volatility.W": [c.t(null, void 0, o(130049)), c.t(null, void 0, o(70280))],
                "Volatility.M": [c.t(null, void 0, o(335961)), c.t(null, void 0, o(25711))],
                "Volatility.D": [c.t(null, void 0, o(339226)), c.t(null, void 0, o(339226))],
                RSI: [c.t(null, void 0, o(444554)), c.t(null, void 0, o(230537))],
                RSI7: [c.t(null, void 0, o(722241)), c.t(null, void 0, o(901578))],
                ADX: [c.t(null, void 0, o(500627)), c.t(null, void 0, o(431739))],
                "ADX+DI": [c.t(null, void 0, o(184381)), c.t(null, {
                    context: "Positive_Directional_Indicator_short_title"
                }, o(267618))],
                "ADX-DI": [c.t(null, void 0, o(474190)), c.t(null, {
                    context: "Negative_Directional_Indicator_short_title"
                }, o(371511))],
                ATR: [c.t(null, void 0, o(755882)), c.t(null, void 0, o(798268))],
                Mom: [c.t(null, void 0, o(468222)), c.t(null, void 0, o(126687))],
                "High.All": [c.t(null, void 0, o(176382)), c.t(null, void 0, o(176382))],
                "Low.All": [c.t(null, void 0, o(399900)), c.t(null, void 0, o(399900))],
                "High.6M": [c.t(null, void 0, o(203345)), c.t(null, void 0, o(203345))],
                "Low.6M": [c.t(null, void 0, o(248280)), c.t(null, void 0, o(248280))],
                "High.3M": [c.t(null, void 0, o(121250)), c.t(null, void 0, o(121250))],
                "Low.3M": [c.t(null, void 0, o(692070)), c.t(null, void 0, o(692070))],
                "High.1M": [c.t(null, void 0, o(220974)), c.t(null, void 0, o(220974))],
                "Low.1M": [c.t(null, void 0, o(352739)), c.t(null, void 0, o(352739))],
                EMA5: [c.t(null, void 0, o(513079)).format({
                    number: "5"
                }), c.t(null, void 0, o(755460))],
                EMA10: [c.t(null, void 0, o(513079)).format({
                    number: "10"
                }), c.t(null, void 0, o(775556))],
                EMA20: [c.t(null, void 0, o(513079)).format({
                    number: "20"
                }), c.t(null, void 0, o(559511))],
                EMA30: [c.t(null, void 0, o(513079)).format({
                    number: "30"
                }), c.t(null, void 0, o(727577))],
                EMA50: [c.t(null, void 0, o(513079)).format({
                    number: "50"
                }), c.t(null, void 0, o(30194))],
                EMA100: [c.t(null, void 0, o(513079)).format({
                    number: "100"
                }), c.t(null, void 0, o(790009))],
                EMA200: [c.t(null, void 0, o(513079)).format({
                    number: "200"
                }), c.t(null, void 0, o(302984))],
                SMA5: [c.t(null, void 0, o(141337)).format({
                    number: "5"
                }), c.t(null, void 0, o(646917))],
                SMA10: [c.t(null, void 0, o(141337)).format({
                    number: "10"
                }), c.t(null, void 0, o(524449))],
                SMA20: [c.t(null, void 0, o(141337)).format({
                    number: "20"
                }), c.t(null, void 0, o(860806))],
                SMA30: [c.t(null, void 0, o(141337)).format({
                    number: "30"
                }), c.t(null, void 0, o(869398))],
                SMA50: [c.t(null, void 0, o(141337)).format({
                    number: "50"
                }), c.t(null, void 0, o(552362))],
                SMA100: [c.t(null, void 0, o(141337)).format({
                    number: "100"
                }), c.t(null, void 0, o(769702))],
                SMA200: [c.t(null, void 0, o(141337)).format({
                    number: "200"
                }), c.t(null, void 0, o(346186))],
                "Stoch.K": [c.t(null, void 0, o(855483)), c.t(null, void 0, o(261017))],
                "Stoch.D": [c.t(null, void 0, o(41433)), c.t(null, void 0, o(742226))],
                "MACD.macd": [c.t(null, void 0, o(526469)), c.t(null, void 0, o(13668))],
                "MACD.signal": [c.t(null, void 0, o(723610)), c.t(null, void 0, o(696697))],
                "Aroon.Up": [c.t(null, void 0, o(225828)), c.t(null, void 0, o(89574))],
                "Aroon.Down": [c.t(null, void 0, o(787752)), c.t(null, void 0, o(512527))],
                "BB.upper": [c.t(null, void 0, o(94146)), c.t(null, void 0, o(318995))],
                "BB.lower": [c.t(null, void 0, o(623567)), c.t(null, void 0, o(626701))],
                goodwill: [c.t(null, void 0, o(577557)), c.t(null, void 0, o(577557))],
                debt_to_equity_fq: [c.t(null, void 0, o(379111)), c.t(null, void 0, o(206617))],
                CCI20: [c.t(null, void 0, o(893733)), c.t(null, void 0, o(892566))],
                "DonchCh20.Upper": [c.t(null, void 0, o(693480)), c.t(null, void 0, o(319815))],
                "DonchCh20.Lower": [c.t(null, void 0, o(4705)), c.t(null, void 0, o(239696))],
                HullMA9: [c.t(null, void 0, o(831572)), c.t(null, void 0, o(405681))],
                AO: [c.t(null, void 0, o(510206)), c.t(null, void 0, o(327665))],
                "Pivot.M.Classic.S3": [c.t(null, void 0, o(540685)), c.t(null, void 0, o(649248))],
                "Pivot.M.Classic.S2": [c.t(null, void 0, o(403135)), c.t(null, void 0, o(42913))],
                "Pivot.M.Classic.S1": [c.t(null, void 0, o(223647)), c.t(null, void 0, o(523814))],
                "Pivot.M.Classic.Middle": [c.t(null, void 0, o(654807)), c.t(null, void 0, o(82730))],
                "Pivot.M.Classic.R1": [c.t(null, void 0, o(232015)), c.t(null, void 0, o(985668))],
                "Pivot.M.Classic.R2": [c.t(null, void 0, o(974467)), c.t(null, void 0, o(610101))],
                "Pivot.M.Classic.R3": [c.t(null, void 0, o(903801)), c.t(null, void 0, o(622247))],
                "Pivot.M.Fibonacci.S3": [c.t(null, void 0, o(4937)), c.t(null, void 0, o(649248))],
                "Pivot.M.Fibonacci.S2": [c.t(null, void 0, o(79698)), c.t(null, void 0, o(42913))],
                "Pivot.M.Fibonacci.S1": [c.t(null, void 0, o(990180)), c.t(null, void 0, o(523814))],
                "Pivot.M.Fibonacci.Middle": [c.t(null, void 0, o(628462)), c.t(null, void 0, o(82730))],
                "Pivot.M.Fibonacci.R1": [c.t(null, void 0, o(992200)), c.t(null, void 0, o(985668))],
                "Pivot.M.Fibonacci.R2": [c.t(null, void 0, o(530871)), c.t(null, void 0, o(610101))],
                "Pivot.M.Fibonacci.R3": [c.t(null, void 0, o(693496)), c.t(null, void 0, o(622247))],
                "Pivot.M.Camarilla.S3": [c.t(null, void 0, o(142703)), c.t(null, void 0, o(649248))],
                "Pivot.M.Camarilla.S2": [c.t(null, void 0, o(128938)), c.t(null, void 0, o(42913))],
                "Pivot.M.Camarilla.S1": [c.t(null, void 0, o(28429)), c.t(null, void 0, o(523814))],
                "Pivot.M.Camarilla.Middle": [c.t(null, void 0, o(197758)), c.t(null, void 0, o(82730))],
                "Pivot.M.Camarilla.R1": [c.t(null, void 0, o(962748)), c.t(null, void 0, o(985668))],
                "Pivot.M.Camarilla.R2": [c.t(null, void 0, o(518732)), c.t(null, void 0, o(610101))],
                "Pivot.M.Camarilla.R3": [c.t(null, void 0, o(879438)), c.t(null, void 0, o(622247))],
                "Pivot.M.Woodie.S3": [c.t(null, void 0, o(891660)), c.t(null, void 0, o(649248))],
                "Pivot.M.Woodie.S2": [c.t(null, void 0, o(203566)), c.t(null, void 0, o(42913))],
                "Pivot.M.Woodie.S1": [c.t(null, void 0, o(536510)), c.t(null, void 0, o(523814))],
                "Pivot.M.Woodie.Middle": [c.t(null, void 0, o(357527)), c.t(null, void 0, o(82730))],
                "Pivot.M.Woodie.R1": [c.t(null, void 0, o(192732)), c.t(null, void 0, o(985668))],
                "Pivot.M.Woodie.R2": [c.t(null, void 0, o(574023)), c.t(null, void 0, o(610101))],
                "Pivot.M.Woodie.R3": [c.t(null, void 0, o(212993)), c.t(null, void 0, o(622247))],
                "Pivot.M.Demark.S1": [c.t(null, void 0, o(46685)), c.t(null, void 0, o(523814))],
                "Pivot.M.Demark.Middle": [c.t(null, void 0, o(695847)), c.t(null, void 0, o(82730))],
                "Pivot.M.Demark.R1": [c.t(null, void 0, o(742575)), c.t(null, void 0, o(985668))],
                "KltChnl.upper": [c.t(null, void 0, o(576828)), c.t(null, void 0, o(282330))],
                "KltChnl.lower": [c.t(null, void 0, o(621474)), c.t(null, void 0, o(865104))],
                "P.SAR": [c.t(null, void 0, o(32969)), c.t(null, void 0, o(971923))],
                "Value.Traded": [c.t(null, void 0, o(176126)), c.t(null, void 0, o(176126))],
                MoneyFlow: [c.t(null, void 0, o(484341)), c.t(null, {
                    context: "Money_Flow_short_title"
                }, o(114232))],
                ChaikinMoneyFlow: [c.t(null, void 0, o(467829)), c.t(null, {
                    context: "Chaikin_Money_Flow_short_title"
                }, o(732056))],
                "Recommend.All": [c.t(null, void 0, o(489415)), c.t(null, void 0, o(489415))],
                "Recommend.MA": [c.t(null, void 0, o(510759)), c.t(null, void 0, o(510759))],
                "Recommend.Other": [c.t(null, void 0, o(869945)), c.t(null, void 0, o(869945))],
                "Stoch.RSI.K": [c.t(null, void 0, o(209288)), c.t(null, void 0, o(146122))],
                "Stoch.RSI.D": [c.t(null, void 0, o(397008)), c.t(null, void 0, o(467469))],
                "W.R": [c.t(null, void 0, o(31110)), c.t(null, void 0, o(518711))],
                ROC: [c.t(null, void 0, o(686407)), c.t(null, void 0, o(476267))],
                BBPower: [c.t(null, {
                    context: "study"
                }, o(961333)), c.t(null, void 0, o(820736))],
                UO: [c.t(null, void 0, o(297506)), c.t(null, void 0, o(130541))],
                "Ichimoku.CLine": [c.t(null, void 0, o(252290)), c.t(null, void 0, o(158969))],
                "Ichimoku.BLine": [c.t(null, void 0, o(286153)), c.t(null, void 0, o(708109))],
                "Ichimoku.Lead1": [c.t(null, void 0, o(115742)), c.t(null, void 0, o(337063))],
                "Ichimoku.Lead2": [c.t(null, void 0, o(338775)), c.t(null, void 0, o(888233))],
                VWAP: [c.t(null, {
                    context: "study"
                }, o(363893)), c.t(null, void 0, o(705682))],
                VWMA: [c.t(null, void 0, o(991039)), c.t(null, void 0, o(529373))],
                ADR: [c.t(null, void 0, o(345336)), c.t(null, void 0, o(15769))],
                "24h_vol|5": [c.t(null, void 0, o(144117)), c.t(null, void 0, o(540224))],
                "24h_vol_change|5": [c.t(null, void 0, o(744492)), c.t(null, void 0, o(766382))],
                total_revenue_yoy_growth_fq: [c.t(null, void 0, o(659144)), c.t(null, void 0, o(659144))],
                total_revenue_qoq_growth_fq: [c.t(null, void 0, o(815831)), c.t(null, void 0, o(815831))],
                total_revenue_yoy_growth_fy: [c.t(null, void 0, o(733662)), c.t(null, void 0, o(733662))],
                total_revenue_yoy_growth_ttm: [c.t(null, void 0, o(699165)), c.t(null, void 0, o(699165))],
                gross_profit_yoy_growth_fq: [c.t(null, void 0, o(17233)), c.t(null, void 0, o(17233))],
                gross_profit_qoq_growth_fq: [c.t(null, void 0, o(697372)), c.t(null, void 0, o(697372))],
                gross_profit_yoy_growth_fy: [c.t(null, void 0, o(691522)), c.t(null, void 0, o(691522))],
                gross_profit_yoy_growth_ttm: [c.t(null, void 0, o(841564)), c.t(null, void 0, o(841564))],
                ebitda_yoy_growth_fq: [c.t(null, void 0, o(598271)), c.t(null, void 0, o(598271))],
                ebitda_qoq_growth_fq: [c.t(null, void 0, o(430668)), c.t(null, void 0, o(430668))],
                ebitda_yoy_growth_fy: [c.t(null, void 0, o(259569)), c.t(null, void 0, o(259569))],
                ebitda_yoy_growth_ttm: [c.t(null, void 0, o(570413)), c.t(null, void 0, o(570413))],
                net_income_yoy_growth_fq: [c.t(null, void 0, o(166047)), c.t(null, void 0, o(166047))],
                net_income_qoq_growth_fq: [c.t(null, void 0, o(274651)), c.t(null, void 0, o(274651))],
                net_income_yoy_growth_fy: [c.t(null, void 0, o(699836)), c.t(null, void 0, o(699836))],
                net_income_yoy_growth_ttm: [c.t(null, void 0, o(393811)), c.t(null, void 0, o(393811))],
                free_cash_flow_yoy_growth_fq: [c.t(null, void 0, o(930618)), c.t(null, void 0, o(930618))],
                free_cash_flow_qoq_growth_fq: [c.t(null, void 0, o(703584)), c.t(null, void 0, o(703584))],
                free_cash_flow_yoy_growth_fy: [c.t(null, void 0, o(951877)), c.t(null, void 0, o(951877))],
                free_cash_flow_yoy_growth_ttm: [c.t(null, void 0, o(511927)), c.t(null, void 0, o(511927))],
                earnings_per_share_diluted_yoy_growth_fq: [c.t(null, void 0, o(607493)), c.t(null, void 0, o(607493))],
                earnings_per_share_diluted_qoq_growth_fq: [c.t(null, void 0, o(4442)), c.t(null, void 0, o(4442))],
                earnings_per_share_diluted_yoy_growth_fy: [c.t(null, void 0, o(5344)), c.t(null, void 0, o(5344))],
                earnings_per_share_diluted_yoy_growth_ttm: [c.t(null, void 0, o(641613)), c.t(null, void 0, o(641613))],
                dps_common_stock_prim_issue_yoy_growth_fy: [c.t(null, void 0, o(529188)), c.t(null, void 0, o(529188))],
                total_assets_yoy_growth_fq: [c.t(null, void 0, o(799677)), c.t(null, void 0, o(799677))],
                total_assets_qoq_growth_fq: [c.t(null, void 0, o(417209)), c.t(null, void 0, o(417209))],
                total_assets_yoy_growth_fy: [c.t(null, void 0, o(666409)), c.t(null, void 0, o(666409))],
                total_debt_yoy_growth_fq: [c.t(null, void 0, o(419108)), c.t(null, void 0, o(419108))],
                total_debt_qoq_growth_fq: [c.t(null, void 0, o(847108)), c.t(null, void 0, o(847108))],
                total_debt_yoy_growth_fy: [c.t(null, void 0, o(178874)), c.t(null, void 0, o(178874))],
                sell_gen_admin_exp_other_ratio_fy: [c.t(null, void 0, o(59444)), c.t(null, void 0, o(643471))],
                sell_gen_admin_exp_other_ratio_ttm: [c.t(null, void 0, o(103374)), c.t(null, void 0, o(467336))],
                research_and_dev_ratio_fy: [c.t(null, void 0, o(818733)), c.t(null, void 0, o(239186))],
                research_and_dev_ratio_ttm: [c.t(null, void 0, o(231007)), c.t(null, void 0, o(775524))],
                gross_profit_margin_fy: [c.t(null, void 0, o(949976)), c.t(null, void 0, o(949976))],
                oper_income_margin_fy: [c.t(null, void 0, o(660525)), c.t(null, void 0, o(660525))],
                net_income_bef_disc_oper_margin_fy: [c.t(null, void 0, o(651951)), c.t(null, void 0, o(651951))],
                cash_n_equivalents_fq: [c.t(null, void 0, o(861516)), c.t(null, void 0, o(861516))],
                cash_n_equivalents_fy: [c.t(null, void 0, o(773575)), c.t(null, void 0, o(773575))],
                cash_n_short_term_invest_fq: [c.t(null, void 0, o(207792)), c.t(null, void 0, o(537521))],
                cash_n_short_term_invest_fy: [c.t(null, void 0, o(501717)), c.t(null, void 0, o(263143))],
                centralization: [c.t(null, void 0, o(975620)), c.t(null, void 0, o(975620))]
            };
            var N = o(870045);
            let V = null;
            const j = () => V;
            var q = o(775110),
                U = o(923549),
                H = o(238739),
                z = o(554794),
                G = o(162088),
                K = o(48632),
                X = o(502506),
                Y = o(601285),
                Z = o(383425),
                J = o(829016),
                Q = o(14723),
                ee = o(693505),
                te = o(159402),
                oe = o(364697),
                ie = o(110416),
                re = o(623788),
                ne = o(492619),
                se = o(11951),
                le = o(630410),
                ae = o(672687),
                ce = o(651316),
                de = o(601354),
                he = o(829605),
                ue = o(488287),
                pe = o(636627),
                _e = o(837553),
                ge = o(249478);
            const me = [{
                    key: "Candle.3BlackCrows",
                    name: c.t(null, void 0, o(995436)),
                    svg: q
                }, {
                    key: "Candle.3WhiteSoldiers",
                    name: c.t(null, void 0, o(56386)),
                    svg: U
                }, {
                    key: "Candle.AbandonedBaby.Bearish",
                    name: c.t(null, void 0, o(164388)),
                    svg: H
                }, {
                    key: "Candle.AbandonedBaby.Bullish",
                    name: c.t(null, void 0, o(677668)),
                    svg: z
                }, {
                    key: "Candle.Doji",
                    name: c.t(null, {
                        context: "study"
                    }, o(327517)),
                    svg: G
                }, {
                    key: "Candle.Doji.Dragonfly",
                    name: c.t(null, void 0, o(489930)),
                    svg: K
                }, {
                    key: "Candle.Doji.Gravestone",
                    name: c.t(null, void 0, o(208006)),
                    svg: X
                }, {
                    key: "Candle.Engulfing.Bearish",
                    name: c.t(null, void 0, o(405299)),
                    svg: Y
                }, {
                    key: "Candle.Engulfing.Bullish",
                    name: c.t(null, void 0, o(679832)),
                    svg: Z
                }, {
                    key: "Candle.EveningStar",
                    name: c.t(null, void 0, o(894075)),
                    svg: J
                }, {
                    key: "Candle.Hammer",
                    name: c.t(null, void 0, o(585085)),
                    svg: Q
                }, {
                    key: "Candle.HangingMan",
                    name: c.t(null, void 0, o(519287)),
                    svg: ee
                }, {
                    key: "Candle.Harami.Bearish",
                    name: c.t(null, void 0, o(66503)),
                    svg: te
                }, {
                    key: "Candle.Harami.Bullish",
                    name: c.t(null, void 0, o(84441)),
                    svg: oe
                }, {
                    key: "Candle.InvertedHammer",
                    name: c.t(null, void 0, o(439801)),
                    svg: ie
                }, {
                    key: "Candle.Kicking.Bearish",
                    name: c.t(null, void 0, o(604410)),
                    svg: re
                }, {
                    key: "Candle.Kicking.Bullish",
                    name: c.t(null, void 0, o(789371)),
                    svg: ne
                }, {
                    key: "Candle.LongShadow.Lower",
                    name: c.t(null, void 0, o(947641)),
                    svg: se
                }, {
                    key: "Candle.LongShadow.Upper",
                    name: c.t(null, void 0, o(978880)),
                    svg: le
                }, {
                    key: "Candle.Marubozu.Black",
                    name: c.t(null, void 0, o(810910)),
                    svg: ae
                }, {
                    key: "Candle.Marubozu.White",
                    name: c.t(null, void 0, o(579285)),
                    svg: ce
                }, {
                    key: "Candle.MorningStar",
                    name: c.t(null, void 0, o(440490)),
                    svg: de
                }, {
                    key: "Candle.ShootingStar",
                    name: c.t(null, void 0, o(956752)),
                    svg: he
                }, {
                    key: "Candle.SpinningTop.Black",
                    name: c.t(null, {
                        context: "study"
                    }, o(271354)),
                    svg: ue
                }, {
                    key: "Candle.SpinningTop.White",
                    name: c.t(null, {
                        context: "study"
                    }, o(397464)),
                    svg: pe
                }, {
                    key: "Candle.TriStar.Bearish",
                    name: c.t(null, void 0, o(863205)),
                    svg: _e
                }, {
                    key: "Candle.TriStar.Bullish",
                    name: c.t(null, void 0, o(512861)),
                    svg: ge
                }].sort(((e, t) => e.name.localeCompare(t.name))),
                ve = new f({
                    priceScale: 1e8,
                    minMove: 1
                }),
                fe = new u.PriceFormatter({
                    priceScale: 100,
                    minMove: 1,
                    fractional: !1
                }),
                ye = new u.PriceFormatter({
                    priceScale: 1,
                    minMove: 1,
                    fractional: !1
                }),
                be = new p.VolumeFormatter,
                we = new _.PercentageFormatter,
                Se = new _.PercentageFormatter({
                    priceScale: 1
                }),
                Ce = new class {
                    constructor(e) {
                        this._formatStr = e || "%y-%m-%d"
                    }
                    format(e) {
                        const t = new Date(1e3 * e);
                        return this._formatStr.replace("%y", (0, g.numberToStringWithLeadingZero)(t.getUTCFullYear(), 4)).replace("%m", (0, g.numberToStringWithLeadingZero)(t.getUTCMonth() + 1, 2)).replace("%d", (0, g.numberToStringWithLeadingZero)(t.getUTCDate(), 2))
                    }
                },
                ke = (0, w.getRecommendsRange)(),
                xe = {
                    Any: c.t(null, void 0, o(882675)),
                    Exotic: c.t(null, void 0, o(257626)),
                    Major: c.t(null, void 0, o(67973)),
                    Minor: c.t(null, void 0, o(844650)),
                    Africa: c.t(null, void 0, o(578163)),
                    Americas: c.t(null, void 0, o(615493)),
                    Asia: c.t(null, void 0, o(360389)),
                    Europe: c.t(null, void 0, o(546890)),
                    Pacific: c.t(null, void 0, o(847081)),
                    "Middle East": c.t(null, void 0, o(64614))
                },
                Fe = [{
                    key: "today",
                    name: c.t(null, void 0, o(205935))
                }, {
                    key: "tomorrow",
                    name: c.t(null, void 0, o(315404))
                }, {
                    key: "yesterday",
                    name: c.t(null, void 0, o(943320))
                }, {
                    key: "next_five",
                    name: c.t(null, void 0, o(558570))
                }, {
                    key: "prev_five",
                    name: c.t(null, void 0, o(988701))
                }, {
                    key: "this_week",
                    name: c.t(null, void 0, o(847228))
                }, {
                    key: "next_week",
                    name: c.t(null, void 0, o(116468))
                }, {
                    key: "prev_week",
                    name: c.t(null, void 0, o(50121))
                }, {
                    key: "this_month",
                    name: c.t(null, void 0, o(405778))
                }],
                Te = ["today", "yesterday", "prev_five", "prev_week", "this_week", "this_month"],
                Me = ["today", "tomorrow", "next_five", "next_week", "this_week", "this_month"],
                Ae = e => null == e || "" === e.toString().trim(),
                De = e => t => {
                    const o = Pe(t, Fe);
                    if (o) {
                        const t = Be(o);
                        if (t) return ((e, t, o = "earnings_release_date,earnings_release_next_date") => [{
                            left: o,
                            operation: "in_range",
                            right: [e / 1e3, t / 1e3]
                        }, {
                            left: o,
                            operation: "nequal",
                            right: t / 1e3
                        }])(t[0], t[1], e)
                    }
                    return !1
                },
                Ee = (e, t) => Object.keys(t).find((o => t[o] === e)) || e,
                $e = (e, t, o, i) => {
                    const r = i.filter((t => t[e] === o));
                    return r.length > 0 ? r[0][t] : ""
                },
                Ie = (e, t) => $e("key", "name", e, t),
                Pe = (e, t) => $e("name", "key", e, t),
                Be = e => {
                    const t = N.get_timezone(j()),
                        o = (() => {
                            const e = N.get_timezone(j()),
                                t = new Date,
                                o = N.utc_to_cal(e, t.getTime());
                            return N.get_cal(e, o.getUTCFullYear(), o.getUTCMonth(), o.getUTCDate())
                        })();
                    let i, r;
                    if ("today" === e) i = o.getTime(), r = N.add_days_considering_dst(t, o, 1).getTime();
                    else if ("tomorrow" === e) i = N.add_days_considering_dst(t, o, 1).getTime(), r = N.add_days_considering_dst(t, o, 2).getTime();
                    else if ("yesterday" === e) {
                        const e = 6e4;
                        i = N.add_days_considering_dst(t, o, -1).getTime(), r = o.getTime() - e
                    } else if ("next_five" === e) i = N.add_days_considering_dst(t, o, 1).getTime(), r = N.add_days_considering_dst(t, o, 5).getTime();
                    else if ("prev_five" === e) i = N.add_days_considering_dst(t, o, -5).getTime(), r = o.getTime();
                    else if ("this_week" === e) {
                        const e = (o.getDay() + 6) % 7;
                        i = N.add_days_considering_dst(t, o, -e).getTime(), r = N.add_days_considering_dst(t, o, 7 - e).getTime()
                    } else if ("next_week" === e) {
                        const e = (o.getDay() + 6) % 7 - 7;
                        i = N.add_days_considering_dst(t, o, -e).getTime(), r = N.add_days_considering_dst(t, o, 7 - e).getTime()
                    } else if ("prev_week" === e) {
                        const e = (o.getDay() + 6) % 7 + 7;
                        i = N.add_days_considering_dst(t, o, -e).getTime(), r = N.add_days_considering_dst(t, o, 7 - e).getTime()
                    } else if ("this_month" === e) {
                        const e = o.getDate(),
                            n = new Date(o.getFullYear(), o.getMonth(), 0).getDate();
                        i = N.add_days_considering_dst(t, o, 1 - e).getTime(),
                            r = N.add_days_considering_dst(t, o, n - e).getTime()
                    }
                    return !(!i || !r) && [i, r]
                },
                Re = {
                    dr: [c.t(null, void 0, o(578677)), c.t(null, void 0, o(56908)), {
                        nowrap: !0
                    }],
                    etf: [c.t(null, void 0, o(988789)), c.t(null, void 0, o(988789))],
                    common: [c.t(null, void 0, o(677186)), ""],
                    preferred: [c.t(null, void 0, o(804067)), c.t(null, void 0, o(82730))],
                    closedend: [c.t(null, void 0, o(107008)), c.t(null, void 0, o(932964))],
                    etn: [c.t(null, void 0, o(971065)), c.t(null, void 0, o(971065))],
                    reit: [c.t(null, void 0, o(702612)), c.t(null, void 0, o(702612))],
                    unit: [c.t(null, void 0, o(742444)), c.t(null, void 0, o(742444))],
                    mutual: [c.t(null, void 0, o(475950)), c.t(null, void 0, o(141836))],
                    trust: [c.t(null, void 0, o(608665)), c.t(null, void 0, o(773581))],
                    structured: [c.t(null, void 0, o(524048)), c.t(null, void 0, o(273807))],
                    spot: [c.t(null, void 0, o(783013)), ""],
                    futures: [c.t(null, void 0, o(353539)), ""],
                    perpetual: [c.t(null, void 0, o(14738)), ""]
                },
                Le = ["dr", "etf", "common", "preferred", "closedend", "etn", "reit", "unit", "mutual", "trust", "structured"],
                Oe = ["spot", "futures", "perpetual"],
                We = e => ["open", "high", "low", "close"].filter((t => t !== e)),
                Ne = e => ["SMA5", "SMA10", "SMA20", "SMA30", "SMA50", "SMA100", "SMA200", "EMA5", "EMA10", "EMA20", "EMA30", "EMA50", "EMA100", "EMA200"].filter((t => t !== e)),
                Ve = e => ["Ichimoku.BLine", "Ichimoku.CLine", "Ichimoku.Lead1", "Ichimoku.Lead2"].filter((t => t !== e)),
                je = ["crosses", "crosses_above", "crosses_below"];

            function qe(e, ...t) {
                const o = t[t.length - 1];
                if (o.searchValue) {
                    const t = (0, S.parseHtml)(e).childNodes;
                    let i = "";
                    for (let e = 0; e < t.length; e++) t[e].classList && (t[e].classList.contains("tv-screener__symbol") && (t[e].innerHTML = He(t[e].textContent.trim(), o.searchValue)), i += t[e].outerHTML);
                    return i + " "
                }
                return e
            }
            const Ue = {
                name: {
                    fixed: !0,
                    control: "select",
                    category: 1,
                    inplaceEditorLeftOffset: 10,
                    filterTitle: W.type[0],
                    rangeTitles: Re,
                    additionalColumns: ["description", "name", "type", "subtype", "update_mode"],
                    additionalFormatter: (e, t, o, i, r, n = "") => {
                        const s = ((e, t) => Ue.type.disabled || !Ue.type.checked ? "" : `<span class="tv-screener__type" title="${Ue.type.mutateDisplayValue(e,t)}"><sup>${Ue.type.mutateDisplayValue(e,t,!0)}</sup></span>`)(o, i);
                        return ((e, t, o, i, r) => {
                            const n = new y.DataModeIndicator({
                                classSuffix: "--for-screener",
                                short: !0
                            });
                            if (null !== r && "string" == typeof r) {
                                const e = (0, h.parseUpdateMode)(r);
                                null === e ? n.setMode(r) : n.setMode(e.mode, e.interval)
                            }
                            if (Ue.description.disabled || !Ue.description.checked) return n.getElement().outerHTML;
                            const s = {
                                description: e,
                                pro_name: i,
                                short_name: o
                            };
                            let l = e ? (0, b.getTranslatedSymbolDescription)(s).toString().toUpperCase() : "";
                            Ue.name.searchValue && (l = He(l, Ue.name.searchValue));
                            const a = !Ue.description.disabled || Ue.description.checked ? `<span class="tv-screener__description">${l} ${t}</span>` : "";
                            return `${n.getElement().outerHTML}${a}`
                        })(e, s, t, n, r)
                    },
                    mutateDisplayValue: qe,
                    tooltip: (e, t) => Ue.description.disabled || !Ue.description.checked ? t : e,
                    useDefaultRange: !0,
                    defaultRange: Le,
                    customFilterCondition: e => Ue.type.customFilterCondition(e),
                    search: !0
                },
                description: {
                    hiddenColumn: !0,
                    hideSetupColumn: !0
                },
                logoid: {
                    hiddenColumn: !1,
                    hideSetupColumn: !0,
                    skipField: !0
                },
                currency_logoid: {
                    hiddenColumn: !1,
                    hideSetupColumn: !0,
                    skipField: !0
                },
                base_currency_logoid: {
                    hiddenColumn: !1,
                    hideSetupColumn: !0,
                    skipField: !0
                },
                exchange: {
                    control: "select",
                    category: 1,
                    mutateDisplayValue: e => "AMEX" === e ? "NYSE ARCA" : e,
                    rangeTitles: {
                        AMEX: ["NYSE ARCA", "NYSE ARCA", {
                            nowrap: !0
                        }]
                    }
                },
                centralization: {
                    control: "select",
                    category: 1,
                    hideSetupColumn: !0,
                    rangeTitles: {
                        cex: ["CEX", "CEX"],
                        dex: ["DEX", "DEX"]
                    }
                },
                submarket: {
                    control: "select",
                    category: 1
                },
                sector: {
                    category: 1,
                    filterCondition: "select",
                    sourceRange: ["Major", "Minor", "Exotic"],
                    mutateDisplayValue: (e, ...t) => {
                        const o = qe(e, t);
                        return (0, O.triesTranslateScreenerData)(o)
                    }
                },
                index: {
                    control: "select",
                    isSingle: !0,
                    category: 1,
                    hideSetupColumn: !0,
                    groupFilter: !0,
                    customFilterCondition: e => {
                        const t = Ue.index.sourceRange ? Ue.index.sourceRange.find((t => t.name === e)) : null;
                        return !!t && {
                            type: "index",
                            values: [t.id]
                        }
                    }
                },
                industry: {
                    control: "select",
                    category: 1
                },
                country: {
                    control: "select",
                    category: 1
                },
                type: {
                    hiddenColumn: !0,
                    hideSetupColumn: !0,
                    filterCondition: "select",
                    category: 1,
                    rangeTitles: Re,
                    sortableColumn: !1,
                    resettableFilter: !1,
                    useDefaultRange: !0,
                    defaultRange: Le,
                    additionalColumns: ["subtype"],
                    mutateDisplayValue: (e, t, o = !1) => t && Re[t] ? Re[t][o ? 1 : 0] : Re[e] ? Re[e][o ? 1 : 0] : "",
                    customFilterCondition: $
                },
                market_cap_basic: {
                    control: "range",
                    formatter: be,
                    category: 1
                },
                market_cap_calc: {
                    control: "range",
                    formatter: be,
                    category: 1
                },
                market_cap_diluted_calc: {
                    control: "range",
                    formatter: be,
                    category: 1
                },
                volume: {
                    control: "range",
                    formatter: be,
                    category: 1
                },
                average_volume_10d_calc: {
                    title: W.average_volume[0],
                    shortTitle: W.average_volume[1],
                    control: "range",
                    formatter: be,
                    category: 1,
                    useDefaultTimeInterval: !0
                },
                average_volume_30d_calc: {
                    control: "range",
                    formatter: be,
                    category: 1,
                    useDefaultTimeInterval: !0
                },
                average_volume_60d_calc: {
                    control: "range",
                    formatter: be,
                    category: 1,
                    useDefaultTimeInterval: !0
                },
                average_volume_90d_calc: {
                    control: "range",
                    formatter: be,
                    category: 1,
                    useDefaultTimeInterval: !0
                },
                relative_volume_10d_calc: {
                    title: W.relative_volume[0],
                    shortTitle: W.relative_volume[1],
                    control: "condition",
                    hiddenOperators: je,
                    conditionFields: [],
                    formatter: fe,
                    filterFormatter: ye,
                    category: 1
                },
                "relative_volume_intraday.5": {
                    title: W.relative_volume_at_time[0],
                    shortTitle: W.relative_volume_at_time[1],
                    control: "condition",
                    hiddenOperators: je,
                    conditionFields: [],
                    formatter: fe,
                    filterFormatter: ye,
                    category: 1,
                    useDefaultTimeIntervalFromFieldName: !0
                },
                change: {
                    control: "condition",
                    hiddenOperators: je,
                    conditionFields: {
                        stock: ["premarket_change", "postmarket_change"],
                        default: []
                    },
                    formatter: we,
                    category: 3,
                    highlightChange: !0
                },
                "change.1": {
                    control: "condition",
                    hiddenOperators: je,
                    conditionFields: {
                        stock: ["change", "premarket_change", "postmarket_change"],
                        default: []
                    },
                    formatter: we,
                    category: 3,
                    highlightChange: !0
                },
                "change.5": {
                    control: "condition",
                    hiddenOperators: je,
                    conditionFields: {
                        stock: ["change", "premarket_change", "postmarket_change"],
                        default: []
                    },
                    formatter: we,
                    category: 3,
                    highlightChange: !0
                },
                "change.15": {
                    control: "condition",
                    hiddenOperators: je,
                    conditionFields: {
                        stock: ["change", "premarket_change", "postmarket_change"],
                        default: []
                    },
                    formatter: we,
                    category: 3,
                    highlightChange: !0
                },
                "change.60": {
                    control: "condition",
                    hiddenOperators: je,
                    conditionFields: {
                        stock: ["change", "premarket_change", "postmarket_change"],
                        default: []
                    },
                    formatter: we,
                    category: 3,
                    highlightChange: !0
                },
                "change.240": {
                    control: "condition",
                    hiddenOperators: je,
                    conditionFields: {
                        stock: ["change", "premarket_change", "postmarket_change"],
                        default: []
                    },
                    formatter: we,
                    category: 3,
                    highlightChange: !0
                },
                "change.1W": {
                    control: "condition",
                    hiddenOperators: je,
                    conditionFields: {
                        stock: ["change", "premarket_change", "postmarket_change"],
                        default: []
                    },
                    formatter: we,
                    category: 3,
                    highlightChange: !0
                },
                "change.1M": {
                    control: "condition",
                    hiddenOperators: je,
                    conditionFields: {
                        stock: ["change", "premarket_change", "postmarket_change"],
                        default: []
                    },
                    formatter: we,
                    category: 3,
                    highlightChange: !0
                },
                change_abs: {
                    control: "condition",
                    hiddenOperators: je,
                    conditionFields: [],
                    formatter: ve,
                    forexFormatter: ve,
                    category: 3,
                    highlightChange: !0
                },
                "change_abs.1": {
                    control: "condition",
                    hiddenOperators: je,
                    conditionFields: [],
                    formatter: ve,
                    forexFormatter: ve,
                    category: 3,
                    highlightChange: !0
                },
                "change_abs.5": {
                    control: "condition",
                    hiddenOperators: je,
                    conditionFields: [],
                    formatter: ve,
                    forexFormatter: ve,
                    category: 3,
                    highlightChange: !0
                },
                "change_abs.15": {
                    control: "condition",
                    hiddenOperators: je,
                    conditionFields: [],
                    formatter: ve,
                    forexFormatter: ve,
                    category: 3,
                    highlightChange: !0
                },
                "change_abs.60": {
                    control: "condition",
                    hiddenOperators: je,
                    conditionFields: [],
                    formatter: ve,
                    forexFormatter: ve,
                    category: 3,
                    highlightChange: !0
                },
                "change_abs.240": {
                    control: "condition",
                    hiddenOperators: je,
                    conditionFields: [],
                    formatter: ve,
                    forexFormatter: ve,
                    category: 3,
                    highlightChange: !0
                },
                "change_abs.1W": {
                    control: "condition",
                    hiddenOperators: je,
                    conditionFields: [],
                    formatter: ve,
                    forexFormatter: ve,
                    category: 3,
                    highlightChange: !0
                },
                "change_abs.1M": {
                    control: "condition",
                    hiddenOperators: je,
                    conditionFields: [],
                    formatter: ve,
                    forexFormatter: ve,
                    category: 3,
                    highlightChange: !0
                },
                bid: {
                    control: "condition",
                    hiddenOperators: je,
                    conditionFields: [],
                    formatter: fe,
                    filterFormatter: ye,
                    forexFormatter: ve,
                    category: 1,
                    mutateDisplayValue: e => `<span>${e}</span>`
                },
                ask: {
                    control: "condition",
                    hiddenOperators: je,
                    conditionFields: [],
                    formatter: fe,
                    filterFormatter: ye,
                    forexFormatter: ve,
                    category: 1,
                    mutateDisplayValue: e => `<span>${e}</span>`
                },
                open: {
                    control: "condition",
                    conditionFields: {
                        stock: We("open").concat("premarket_open", "postmarket_open", "premarket_close", "postmarket_close", Ne(), "HullMA9", "BB.upper", "BB.lower", Ve()),
                        forex: We("open").concat("bid", "ask", Ne(), "HullMA9", "BB.upper", "BB.lower", Ve()),
                        default: We("open").concat(Ne(), "BB.upper", "BB.lower", "HullMA9", Ve())
                    },
                    formatter: ve,
                    forexFormatter: ve,
                    category: 1
                },
                close: {
                    title: c.t(null, void 0, o(7953)),
                    shortTitle: c.t(null, void 0, o(7953)),
                    control: "condition",
                    conditionFields: {
                        stock: We("close").concat("premarket_close", "postmarket_close", Ne(), "HullMA9", "BB.upper", "BB.lower", Ve()),
                        forex: We("close").concat("bid", "ask", Ne(), "HullMA9", "BB.upper", "BB.lower", Ve()),
                        default: We("close").concat(Ne(), "BB.upper", "BB.lower", "HullMA9", Ve())
                    },
                    formatter: ve,
                    forexFormatter: ve,
                    category: 1,
                    mutateDisplayValue: e => `<span>${e}</span>`
                },
                high: {
                    control: "condition",
                    conditionFields: {
                        stock: We("high").concat("premarket_high", "postmarket_high", "premarket_close", "postmarket_close", Ne(), "HullMA9", "BB.upper", "BB.lower", Ve()),
                        forex: We("high").concat("bid", "ask", Ne(), "HullMA9", "BB.upper", "BB.lower", Ve()),
                        default: We("high").concat(Ne(), "BB.upper", "BB.lower", "HullMA9", Ve())
                    },
                    formatter: ve,
                    forexFormatter: ve,
                    category: 1
                },
                low: {
                    control: "condition",
                    conditionFields: {
                        stock: We("low").concat("premarket_low", "postmarket_low", "premarket_close", "postmarket_close", Ne(), "HullMA9", "BB.upper", "BB.lower", Ve()),
                        forex: We("low").concat("bid", "ask", Ne(), "HullMA9", "BB.upper", "BB.lower", Ve()),
                        default: We("low").concat(Ne(), "BB.upper", "BB.lower", "HullMA9", Ve())
                    },
                    formatter: ve,
                    forexFormatter: ve,
                    category: 1
                },
                gap: {
                    control: "condition",
                    hiddenOperators: je,
                    conditionFields: [],
                    formatter: we,
                    filterFormatter: Se,
                    category: 3,
                    highlightChange: !0
                },
                price_earnings_ttm: {
                    control: "condition",
                    hiddenOperators: je,
                    conditionFields: [],
                    formatter: fe,
                    filterFormatter: ye,
                    category: 2
                },
                price_sales_ratio: {
                    control: "condition",
                    hiddenOperators: je,
                    conditionFields: [],
                    formatter: fe,
                    filterFormatter: ye,
                    category: 2
                },
                return_on_assets: {
                    control: "condition",
                    hiddenOperators: je,
                    conditionFields: [],
                    formatter: fe,
                    filterFormatter: ye,
                    category: 2
                },
                return_on_equity: {
                    control: "condition",
                    hiddenOperators: je,
                    conditionFields: [],
                    formatter: fe,
                    filterFormatter: ye,
                    category: 2
                },
                debt_to_equity: {
                    control: "condition",
                    hiddenOperators: je,
                    conditionFields: [],
                    formatter: fe,
                    category: 2
                },
                current_ratio: {
                    control: "condition",
                    hiddenOperators: je,
                    conditionFields: [],
                    formatter: fe,
                    filterFormatter: ye,
                    category: 2
                },
                quick_ratio: {
                    control: "condition",
                    hiddenOperators: je,
                    conditionFields: [],
                    formatter: fe,
                    filterFormatter: ye,
                    category: 2
                },
                price_book_fq: {
                    control: "condition",
                    hiddenOperators: je,
                    conditionFields: [],
                    formatter: fe,
                    filterFormatter: ye,
                    category: 2
                },
                price_book_ratio: {
                    control: "condition",
                    hiddenOperators: je,
                    conditionFields: [],
                    formatter: fe,
                    filterFormatter: ye,
                    category: 2
                },
                price_free_cash_flow_ttm: {
                    control: "condition",
                    hiddenOperators: je,
                    conditionFields: [],
                    formatter: fe,
                    filterFormatter: ye,
                    category: 2
                },
                beta_1_year: {
                    control: "condition",
                    hiddenOperators: je,
                    conditionFields: [],
                    formatter: fe,
                    category: 3
                },
                operating_margin: {
                    control: "condition",
                    hiddenOperators: je,
                    conditionFields: [],
                    formatter: we,
                    filterFormatter: Se,
                    category: 2,
                    highlightChange: !0
                },
                earnings_per_share_basic_ttm: {
                    control: "condition",
                    hiddenOperators: je,
                    conditionFields: [],
                    formatter: fe,
                    filterFormatter: ye,
                    category: 2
                },
                ebitda: {
                    control: "range",
                    formatter: be,
                    category: 2
                },
                change_from_open: {
                    control: "condition",
                    hiddenOperators: je,
                    conditionFields: [],
                    formatter: we,
                    filterFormatter: Se,
                    category: 3,
                    highlightChange: !0
                },
                change_from_open_abs: {
                    control: "condition",
                    hiddenOperators: je,
                    conditionFields: [],
                    formatter: ve,
                    forexFormatter: ve,
                    category: 3,
                    highlightChange: !0
                },
                "Perf.W": {
                    control: "condition",
                    hiddenOperators: je,
                    conditionFields: [],
                    formatter: we,
                    filterFormatter: Se,
                    category: 3,
                    highlightChange: !0
                },
                "Perf.1M": {
                    control: "condition",
                    hiddenOperators: je,
                    conditionFields: [],
                    formatter: we,
                    filterFormatter: Se,
                    category: 3,
                    highlightChange: !0
                },
                "Perf.3M": {
                    control: "condition",
                    hiddenOperators: je,
                    conditionFields: [],
                    formatter: we,
                    filterFormatter: Se,
                    category: 3,
                    highlightChange: !0
                },
                "Perf.6M": {
                    control: "condition",
                    hiddenOperators: je,
                    conditionFields: [],
                    formatter: we,
                    filterFormatter: Se,
                    category: 3,
                    highlightChange: !0
                },
                "Perf.Y": {
                    control: "condition",
                    hiddenOperators: je,
                    conditionFields: [],
                    formatter: we,
                    filterFormatter: Se,
                    category: 3,
                    highlightChange: !0
                },
                "Perf.YTD": {
                    control: "condition",
                    hiddenOperators: je,
                    conditionFields: [],
                    formatter: we,
                    filterFormatter: Se,
                    category: 3,
                    highlightChange: !0
                },
                "Perf.5Y": {
                    control: "condition",
                    hiddenOperators: je,
                    conditionFields: [],
                    formatter: we,
                    filterFormatter: Se,
                    category: 3,
                    highlightChange: !0
                },
                "Perf.All": {
                    control: "condition",
                    hiddenOperators: je,
                    conditionFields: [],
                    formatter: we,
                    filterFormatter: Se,
                    category: 3,
                    highlightChange: !0
                },
                "Volatility.W": {
                    control: "condition",
                    conditionFields: [],
                    formatter: we,
                    filterFormatter: Se,
                    category: 3
                },
                "Volatility.M": {
                    control: "condition",
                    conditionFields: [],
                    formatter: we,
                    filterFormatter: Se,
                    category: 3
                },
                "Volatility.D": {
                    control: "condition",
                    conditionFields: [],
                    formatter: we,
                    filterFormatter: Se,
                    category: 3
                },
                RSI: {
                    control: "condition",
                    conditionFields: [],
                    formatter: fe,
                    filterFormatter: ye,
                    category: 3,
                    displaySignal: !0,
                    additionalColumns: ["RSI", "RSI[1]"],
                    mutateDisplayValue: w.signalDisplayFunctions.processRSISignal,
                    signalComputation: w.signalComputationFunctions.computeRSISignal
                },
                RSI7: {
                    control: "condition",
                    conditionFields: [],
                    formatter: fe,
                    filterFormatter: ye,
                    category: 3,
                    displaySignal: !0,
                    additionalColumns: ["RSI7", "RSI7[1]"],
                    mutateDisplayValue: w.signalDisplayFunctions.processRSISignal,
                    signalComputation: w.signalComputationFunctions.computeRSISignal
                },
                ADX: {
                    control: "condition",
                    conditionFields: [],
                    formatter: fe,
                    filterFormatter: ye,
                    category: 3,
                    displaySignal: !0,
                    additionalColumns: ["ADX", "ADX+DI", "ADX-DI", "ADX+DI[1]", "ADX-DI[1]"],
                    mutateDisplayValue: w.signalDisplayFunctions.processADXSignal,
                    signalComputation: w.signalComputationFunctions.computeADXSignal
                },
                "ADX+DI": {
                    control: "condition",
                    conditionFields: ["ADX-DI"],
                    formatter: fe,
                    filterFormatter: ye,
                    category: 3
                },
                "ADX-DI": {
                    control: "condition",
                    conditionFields: ["ADX+DI"],
                    formatter: fe,
                    filterFormatter: ye,
                    category: 3
                },
                ATR: {
                    control: "condition",
                    conditionFields: [],
                    formatter: ve,
                    category: 3
                },
                Mom: {
                    control: "condition",
                    conditionFields: [],
                    formatter: ve,
                    filterFormatter: ye,
                    category: 3,
                    displaySignal: !0,
                    additionalColumns: ["Mom", "Mom[1]"],
                    mutateDisplayValue: w.signalDisplayFunctions.processMomSignal,
                    signalComputation: w.signalComputationFunctions.computeMomSignal
                },
                "High.All": {
                    control: "toggle",
                    filter: {
                        operator: "eless",
                        value: "high"
                    },
                    formatter: fe,
                    forexFormatter: ve,
                    category: 3
                },
                "Low.All": {
                    control: "toggle",
                    filter: {
                        operator: "egreater",
                        value: "low"
                    },
                    formatter: fe,
                    forexFormatter: ve,
                    category: 3
                },
                price_52_week_high: {
                    control: "toggle",
                    filter: {
                        operator: "eless",
                        value: "high"
                    },
                    formatter: fe,
                    forexFormatter: ve,
                    category: 3
                },
                price_52_week_low: {
                    control: "toggle",
                    filter: {
                        operator: "egreater",
                        value: "low"
                    },
                    formatter: fe,
                    forexFormatter: ve,
                    category: 3
                },
                is_primary: {
                    title: W.is_primary[0],
                    control: "toggle",
                    filter: {
                        operator: "equal",
                        value: !0
                    },
                    category: 1
                },
                active_symbol: {
                    hideSetupColumn: !0,
                    control: "toggle",
                    filter: {
                        operator: "equal",
                        value: !0
                    },
                    category: 1
                },
                "High.6M": {
                    control: "toggle",
                    filter: {
                        operator: "eless",
                        value: "high"
                    },
                    formatter: fe,
                    forexFormatter: ve,
                    category: 3
                },
                "Low.6M": {
                    control: "toggle",
                    filter: {
                        operator: "egreater",
                        value: "low"
                    },
                    formatter: fe,
                    forexFormatter: ve,
                    category: 3
                },
                "High.3M": {
                    control: "toggle",
                    filter: {
                        operator: "eless",
                        value: "high"
                    },
                    formatter: fe,
                    forexFormatter: ve,
                    category: 3
                },
                "Low.3M": {
                    control: "toggle",
                    filter: {
                        operator: "egreater",
                        value: "low"
                    },
                    formatter: fe,
                    forexFormatter: ve,
                    category: 3
                },
                "High.1M": {
                    control: "toggle",
                    filter: {
                        operator: "eless",
                        value: "high"
                    },
                    formatter: fe,
                    forexFormatter: ve,
                    category: 3
                },
                "Low.1M": {
                    control: "toggle",
                    filter: {
                        operator: "egreater",
                        value: "low"
                    },
                    formatter: fe,
                    forexFormatter: ve,
                    category: 3
                },
                EMA5: {
                    control: "condition",
                    conditionFields: We().concat(Ne("EMA5")),
                    formatter: ve,
                    category: 3,
                    displaySignal: !0,
                    additionalColumns: ["EMA5", "close"],
                    mutateDisplayValue: w.signalDisplayFunctions.processMASignal,
                    signalComputation: w.signalComputationFunctions.computeMASignal
                },
                EMA10: {
                    control: "condition",
                    conditionFields: We().concat(Ne("EMA10")),
                    formatter: ve,
                    category: 3,
                    displaySignal: !0,
                    additionalColumns: ["EMA10", "close"],
                    mutateDisplayValue: w.signalDisplayFunctions.processMASignal,
                    signalComputation: w.signalComputationFunctions.computeMASignal
                },
                EMA20: {
                    control: "condition",
                    conditionFields: We().concat(Ne("EMA20")),
                    formatter: ve,
                    category: 3,
                    displaySignal: !0,
                    additionalColumns: ["EMA20", "close"],
                    mutateDisplayValue: w.signalDisplayFunctions.processMASignal,
                    signalComputation: w.signalComputationFunctions.computeMASignal
                },
                EMA30: {
                    control: "condition",
                    conditionFields: We().concat(Ne("EMA30")),
                    formatter: ve,
                    category: 3,
                    displaySignal: !0,
                    additionalColumns: ["EMA30", "close"],
                    mutateDisplayValue: w.signalDisplayFunctions.processMASignal,
                    signalComputation: w.signalComputationFunctions.computeMASignal
                },
                EMA50: {
                    control: "condition",
                    conditionFields: We().concat(Ne("EMA50")),
                    formatter: ve,
                    category: 3,
                    displaySignal: !0,
                    additionalColumns: ["EMA50", "close"],
                    mutateDisplayValue: w.signalDisplayFunctions.processMASignal,
                    signalComputation: w.signalComputationFunctions.computeMASignal
                },
                EMA100: {
                    control: "condition",
                    conditionFields: We().concat(Ne("EMA100")),
                    formatter: ve,
                    category: 3,
                    displaySignal: !0,
                    additionalColumns: ["EMA100", "close"],
                    mutateDisplayValue: w.signalDisplayFunctions.processMASignal,
                    signalComputation: w.signalComputationFunctions.computeMASignal
                },
                EMA200: {
                    control: "condition",
                    conditionFields: We().concat(Ne("EMA200")),
                    formatter: ve,
                    category: 3,
                    displaySignal: !0,
                    additionalColumns: ["EMA200", "close"],
                    mutateDisplayValue: w.signalDisplayFunctions.processMASignal,
                    signalComputation: w.signalComputationFunctions.computeMASignal
                },
                SMA5: {
                    control: "condition",
                    conditionFields: We().concat(Ne("SMA5")),
                    formatter: ve,
                    category: 3,
                    displaySignal: !0,
                    additionalColumns: ["SMA5", "close"],
                    mutateDisplayValue: w.signalDisplayFunctions.processMASignal,
                    signalComputation: w.signalComputationFunctions.computeMASignal
                },
                SMA10: {
                    control: "condition",
                    conditionFields: We().concat(Ne("SMA10")),
                    formatter: ve,
                    category: 3,
                    displaySignal: !0,
                    additionalColumns: ["SMA10", "close"],
                    mutateDisplayValue: w.signalDisplayFunctions.processMASignal,
                    signalComputation: w.signalComputationFunctions.computeMASignal
                },
                SMA20: {
                    control: "condition",
                    conditionFields: We().concat(Ne("SMA20")),
                    formatter: ve,
                    category: 3,
                    displaySignal: !0,
                    additionalColumns: ["SMA20", "close"],
                    mutateDisplayValue: w.signalDisplayFunctions.processMASignal,
                    signalComputation: w.signalComputationFunctions.computeMASignal
                },
                SMA30: {
                    control: "condition",
                    conditionFields: We().concat(Ne("SMA30")),
                    formatter: ve,
                    category: 3,
                    displaySignal: !0,
                    additionalColumns: ["SMA30", "close"],
                    mutateDisplayValue: w.signalDisplayFunctions.processMASignal,
                    signalComputation: w.signalComputationFunctions.computeMASignal
                },
                SMA50: {
                    control: "condition",
                    conditionFields: We().concat(Ne("SMA50")),
                    formatter: ve,
                    category: 3,
                    displaySignal: !0,
                    additionalColumns: ["SMA50", "close"],
                    mutateDisplayValue: w.signalDisplayFunctions.processMASignal,
                    signalComputation: w.signalComputationFunctions.computeMASignal
                },
                SMA100: {
                    control: "condition",
                    conditionFields: We().concat(Ne("SMA100")),
                    formatter: ve,
                    category: 3,
                    displaySignal: !0,
                    additionalColumns: ["SMA100", "close"],
                    mutateDisplayValue: w.signalDisplayFunctions.processMASignal,
                    signalComputation: w.signalComputationFunctions.computeMASignal
                },
                SMA200: {
                    control: "condition",
                    conditionFields: We().concat(Ne("SMA200")),
                    formatter: ve,
                    category: 3,
                    displaySignal: !0,
                    additionalColumns: ["SMA200", "close"],
                    mutateDisplayValue: w.signalDisplayFunctions.processMASignal,
                    signalComputation: w.signalComputationFunctions.computeMASignal
                },
                "Stoch.K": {
                    control: "condition",
                    conditionFields: We().concat(["Stoch.D"]),
                    formatter: fe,
                    category: 3,
                    displaySignal: !0,
                    additionalColumns: ["Stoch.K", "Stoch.D", "Stoch.K[1]", "Stoch.D[1]"],
                    mutateDisplayValue: w.signalDisplayFunctions.processStochSignal,
                    signalComputation: w.signalComputationFunctions.computeStochSignal
                },
                "Stoch.D": {
                    control: "condition",
                    conditionFields: We().concat(["Stoch.K"]),
                    formatter: fe,
                    category: 3
                },
                "MACD.macd": {
                    control: "condition",
                    conditionFields: We().concat(["MACD.signal"]),
                    formatter: ve,
                    category: 3,
                    displaySignal: !0,
                    additionalColumns: ["MACD.macd", "MACD.signal"],
                    mutateDisplayValue: w.signalDisplayFunctions.processMACDSignal,
                    signalComputation: w.signalComputationFunctions.computeMACDSignal
                },
                "MACD.signal": {
                    control: "condition",
                    conditionFields: We().concat(["MACD.macd"]),
                    formatter: ve,
                    category: 3
                },
                "Aroon.Up": {
                    control: "condition",
                    conditionFields: ["Aroon.Down"],
                    formatter: fe,
                    category: 3
                },
                "Aroon.Down": {
                    control: "condition",
                    conditionFields: ["Aroon.Up"],
                    formatter: fe,
                    category: 3
                },
                "BB.upper": {
                    control: "condition",
                    conditionFields: We().concat(["BB.lower", "KltChnl.upper", "KltChnl.lower"]),
                    formatter: ve,
                    category: 3,
                    displaySignal: !0,
                    additionalColumns: ["close", "BB.upper"],
                    mutateDisplayValue: w.signalDisplayFunctions.processBBSellSignal,
                    signalComputation: w.signalComputationFunctions.computeBBSellSignal
                },
                "BB.lower": {
                    control: "condition",
                    conditionFields: We().concat(["BB.upper", "KltChnl.upper", "KltChnl.lower"]),
                    formatter: ve,
                    category: 3,
                    displaySignal: !0,
                    additionalColumns: ["close", "BB.lower"],
                    mutateDisplayValue: w.signalDisplayFunctions.processBBBuySignal,
                    signalComputation: w.signalComputationFunctions.computeBBBuySignal
                },
                "KltChnl.upper": {
                    control: "condition",
                    conditionFields: We().concat(["KltChnl.lower", "BB.upper", "BB.lower"]),
                    formatter: ve,
                    category: 3
                },
                "KltChnl.lower": {
                    control: "condition",
                    conditionFields: We().concat(["KltChnl.upper", "BB.upper", "BB.lower"]),
                    formatter: ve,
                    category: 3
                },
                "P.SAR": {
                    control: "condition",
                    conditionFields: We(),
                    formatter: ve,
                    category: 3,
                    displaySignal: !0,
                    additionalColumns: ["P.SAR", "open"],
                    mutateDisplayValue: w.signalDisplayFunctions.processPSARSignal,
                    signalComputation: w.signalComputationFunctions.computePSARSignal
                },
                "Value.Traded": {
                    control: "range",
                    formatter: be,
                    category: 1
                },
                MoneyFlow: {
                    control: "condition",
                    conditionFields: [],
                    formatter: fe,
                    category: 3
                },
                ChaikinMoneyFlow: {
                    control: "condition",
                    conditionFields: [],
                    formatter: fe,
                    category: 3
                },
                goodwill: {
                    control: "range",
                    formatter: be,
                    category: 2
                },
                net_debt: {
                    control: "range",
                    formatter: be,
                    category: 2
                },
                total_debt: {
                    control: "range",
                    formatter: be,
                    category: 2
                },
                revenue_per_employee: {
                    control: "range",
                    formatter: be,
                    category: 2
                },
                return_on_invested_capital: {
                    control: "condition",
                    hiddenOperators: je,
                    conditionFields: [],
                    formatter: we,
                    filterFormatter: Se,
                    category: 2,
                    highlightChange: !0
                },
                after_tax_margin: {
                    control: "condition",
                    hiddenOperators: je,
                    conditionFields: [],
                    formatter: we,
                    filterFormatter: Se,
                    category: 2,
                    highlightChange: !0
                },
                pre_tax_margin: {
                    control: "condition",
                    hiddenOperators: je,
                    conditionFields: [],
                    formatter: we,
                    filterFormatter: Se,
                    category: 2,
                    highlightChange: !0
                },
                gross_margin: {
                    control: "condition",
                    hiddenOperators: je,
                    conditionFields: [],
                    formatter: we,
                    filterFormatter: Se,
                    category: 2,
                    highlightChange: !0
                },
                gross_profit_margin_fy: {
                    control: "condition",
                    hiddenOperators: je,
                    conditionFields: [],
                    formatter: we,
                    filterFormatter: Se,
                    category: 2,
                    highlightChange: !0
                },
                oper_income_margin_fy: {
                    control: "condition",
                    hiddenOperators: je,
                    conditionFields: [],
                    formatter: we,
                    filterFormatter: Se,
                    category: 2,
                    highlightChange: !0
                },
                net_income_bef_disc_oper_margin_fy: {
                    control: "condition",
                    hiddenOperators: je,
                    conditionFields: [],
                    formatter: we,
                    filterFormatter: Se,
                    category: 2,
                    highlightChange: !0
                },
                free_cash_flow_margin_fy: {
                    control: "condition",
                    hiddenOperators: je,
                    conditionFields: [],
                    formatter: we,
                    filterFormatter: Se,
                    category: 2,
                    highlightChange: !0
                },
                free_cash_flow_margin_ttm: {
                    control: "condition",
                    hiddenOperators: je,
                    conditionFields: [],
                    formatter: we,
                    filterFormatter: Se,
                    category: 2,
                    highlightChange: !0
                },
                sell_gen_admin_exp_other_ratio_fy: {
                    control: "condition",
                    hiddenOperators: je,
                    conditionFields: [],
                    formatter: we,
                    filterFormatter: Se,
                    category: 2
                },
                sell_gen_admin_exp_other_ratio_ttm: {
                    control: "condition",
                    hiddenOperators: je,
                    conditionFields: [],
                    formatter: we,
                    filterFormatter: Se,
                    category: 2
                },
                research_and_dev_ratio_fy: {
                    control: "condition",
                    hiddenOperators: je,
                    conditionFields: [],
                    formatter: we,
                    filterFormatter: Se,
                    category: 2
                },
                research_and_dev_ratio_ttm: {
                    control: "condition",
                    hiddenOperators: je,
                    conditionFields: [],
                    formatter: we,
                    filterFormatter: Se,
                    category: 2
                },
                dividends_paid: {
                    control: "range",
                    formatter: be,
                    category: 2
                },
                dividend_yield_recent: {
                    control: "condition",
                    hiddenOperators: je,
                    conditionFields: [],
                    formatter: we,
                    filterFormatter: Se,
                    category: 2,
                    highlightChange: !0
                },
                basic_eps_net_income: {
                    control: "condition",
                    hiddenOperators: je,
                    conditionFields: [],
                    formatter: fe,
                    filterFormatter: ye,
                    category: 2
                },
                net_income: {
                    control: "range",
                    formatter: be,
                    category: 2
                },
                gross_profit: {
                    control: "range",
                    formatter: be,
                    category: 2
                },
                gross_profit_fq: {
                    control: "range",
                    formatter: be,
                    category: 2
                },
                number_of_shareholders: {
                    control: "range",
                    formatter: be,
                    category: 2
                },
                float_shares_outstanding: {
                    control: "range",
                    formatter: be,
                    category: 2
                },
                total_shares_outstanding_fundamental: {
                    control: "range",
                    formatter: be,
                    category: 2
                },
                total_shares_outstanding: {
                    control: "range",
                    formatter: be,
                    category: 2
                },
                total_shares_diluted: {
                    control: "range",
                    formatter: be,
                    category: 2
                },
                total_value_traded: {
                    control: "range",
                    formatter: be,
                    category: 2
                },
                total_assets: {
                    control: "range",
                    formatter: be,
                    category: 2
                },
                total_current_assets: {
                    control: "range",
                    formatter: be,
                    category: 2
                },
                total_revenue: {
                    control: "range",
                    formatter: be,
                    category: 2
                },
                total_liabilities_fy: {
                    control: "range",
                    formatter: be,
                    category: 2
                },
                total_liabilities_fq: {
                    control: "range",
                    formatter: be,
                    category: 2
                },
                dividends_per_share_fq: {
                    control: "condition",
                    hiddenOperators: je,
                    conditionFields: [],
                    formatter: fe,
                    filterFormatter: ye,
                    category: 2
                },
                earnings_per_share_diluted_ttm: {
                    control: "condition",
                    hiddenOperators: je,
                    conditionFields: [],
                    formatter: fe,
                    filterFormatter: ye,
                    category: 2
                },
                enterprise_value_ebitda_ttm: {
                    control: "condition",
                    hiddenOperators: je,
                    conditionFields: [],
                    formatter: fe,
                    filterFormatter: ye,
                    category: 2
                },
                enterprise_value_fq: {
                    control: "range",
                    formatter: be,
                    category: 2
                },
                price_revenue_ttm: {
                    control: "condition",
                    hiddenOperators: je,
                    conditionFields: [],
                    formatter: fe,
                    filterFormatter: ye,
                    category: 2
                },
                number_of_employees: {
                    control: "range",
                    formatter: be,
                    category: 2
                },
                last_annual_eps: {
                    control: "condition",
                    hiddenOperators: je,
                    conditionFields: [],
                    formatter: fe,
                    filterFormatter: ye,
                    category: 2
                },
                last_annual_revenue: {
                    control: "range",
                    formatter: be,
                    category: 2
                },
                CCI20: {
                    control: "condition",
                    conditionFields: [],
                    formatter: fe,
                    category: 3,
                    displaySignal: !0,
                    additionalColumns: ["CCI20", "CCI20[1]"],
                    mutateDisplayValue: w.signalDisplayFunctions.processCCI20Signal,
                    signalComputation: w.signalComputationFunctions.computeCCI20Signal
                },
                "DonchCh20.Upper": {
                    control: "condition",
                    conditionFields: We().concat(["DonchCh20.Lower"]),
                    formatter: ve,
                    category: 3
                },
                "DonchCh20.Lower": {
                    control: "condition",
                    conditionFields: We().concat(["DonchCh20.Upper"]),
                    formatter: ve,
                    category: 3
                },
                HullMA9: {
                    control: "condition",
                    conditionFields: We().concat(Ne("HullMA9")),
                    formatter: ve,
                    category: 3,
                    displaySignal: !0,
                    additionalColumns: ["Rec.HullMA9"],
                    mutateDisplayValue: w.signalDisplayFunctions.processSimpleSignal,
                    signalComputation: w.signalComputationFunctions.computeSimpleSignal
                },
                AO: {
                    control: "condition",
                    conditionFields: [],
                    formatter: ve,
                    category: 3,
                    displaySignal: !0,
                    additionalColumns: ["AO", "AO[1]", "AO[2]"],
                    mutateDisplayValue: w.signalDisplayFunctions.processAOSignal,
                    signalComputation: w.signalComputationFunctions.computeAOSignal
                },
                "Pivot.M.Classic.Middle": {
                    formatter: fe,
                    forexFormatter: ve,
                    category: 3,
                    align: "right"
                },
                "Pivot.M.Classic.R1": {
                    formatter: fe,
                    forexFormatter: ve,
                    category: 3,
                    align: "right"
                },
                "Pivot.M.Classic.R2": {
                    formatter: fe,
                    forexFormatter: ve,
                    category: 3,
                    align: "right"
                },
                "Pivot.M.Classic.R3": {
                    formatter: fe,
                    forexFormatter: ve,
                    category: 3,
                    align: "right"
                },
                "Pivot.M.Classic.S1": {
                    formatter: fe,
                    forexFormatter: ve,
                    category: 3,
                    align: "right"
                },
                "Pivot.M.Classic.S2": {
                    formatter: fe,
                    forexFormatter: ve,
                    category: 3,
                    align: "right"
                },
                "Pivot.M.Classic.S3": {
                    formatter: fe,
                    forexFormatter: ve,
                    category: 3,
                    align: "right"
                },
                "Pivot.M.Fibonacci.Middle": {
                    formatter: fe,
                    forexFormatter: ve,
                    category: 3,
                    align: "right"
                },
                "Pivot.M.Fibonacci.R1": {
                    formatter: fe,
                    forexFormatter: ve,
                    category: 3,
                    align: "right"
                },
                "Pivot.M.Fibonacci.R2": {
                    formatter: fe,
                    forexFormatter: ve,
                    category: 3,
                    align: "right"
                },
                "Pivot.M.Fibonacci.R3": {
                    formatter: fe,
                    forexFormatter: ve,
                    category: 3,
                    align: "right"
                },
                "Pivot.M.Fibonacci.S1": {
                    formatter: fe,
                    forexFormatter: ve,
                    category: 3,
                    align: "right"
                },
                "Pivot.M.Fibonacci.S2": {
                    formatter: fe,
                    forexFormatter: ve,
                    category: 3,
                    align: "right"
                },
                "Pivot.M.Fibonacci.S3": {
                    formatter: fe,
                    forexFormatter: ve,
                    category: 3,
                    align: "right"
                },
                "Pivot.M.Camarilla.Middle": {
                    formatter: fe,
                    forexFormatter: ve,
                    category: 3,
                    align: "right"
                },
                "Pivot.M.Camarilla.R1": {
                    formatter: fe,
                    forexFormatter: ve,
                    category: 3,
                    align: "right"
                },
                "Pivot.M.Camarilla.R2": {
                    formatter: fe,
                    forexFormatter: ve,
                    category: 3,
                    align: "right"
                },
                "Pivot.M.Camarilla.R3": {
                    formatter: fe,
                    forexFormatter: ve,
                    category: 3,
                    align: "right"
                },
                "Pivot.M.Camarilla.S1": {
                    formatter: fe,
                    forexFormatter: ve,
                    category: 3,
                    align: "right"
                },
                "Pivot.M.Camarilla.S2": {
                    formatter: fe,
                    forexFormatter: ve,
                    category: 3,
                    align: "right"
                },
                "Pivot.M.Camarilla.S3": {
                    formatter: fe,
                    forexFormatter: ve,
                    category: 3,
                    align: "right"
                },
                "Pivot.M.Woodie.Middle": {
                    formatter: fe,
                    forexFormatter: ve,
                    category: 3,
                    align: "right"
                },
                "Pivot.M.Woodie.R1": {
                    formatter: fe,
                    forexFormatter: ve,
                    category: 3,
                    align: "right"
                },
                "Pivot.M.Woodie.R2": {
                    formatter: fe,
                    forexFormatter: ve,
                    category: 3,
                    align: "right"
                },
                "Pivot.M.Woodie.R3": {
                    formatter: fe,
                    forexFormatter: ve,
                    category: 3,
                    align: "right"
                },
                "Pivot.M.Woodie.S1": {
                    formatter: fe,
                    forexFormatter: ve,
                    category: 3,
                    align: "right"
                },
                "Pivot.M.Woodie.S2": {
                    formatter: fe,
                    forexFormatter: ve,
                    category: 3,
                    align: "right"
                },
                "Pivot.M.Woodie.S3": {
                    formatter: fe,
                    forexFormatter: ve,
                    category: 3,
                    align: "right"
                },
                "Pivot.M.Demark.Middle": {
                    formatter: fe,
                    forexFormatter: ve,
                    category: 3,
                    align: "right"
                },
                "Pivot.M.Demark.R1": {
                    formatter: fe,
                    forexFormatter: ve,
                    category: 3,
                    align: "right"
                },
                "Pivot.M.Demark.S1": {
                    formatter: fe,
                    forexFormatter: ve,
                    category: 3,
                    align: "right"
                },
                candlestick: {
                    alias: "name",
                    control: "select",
                    category: 3,
                    sortableColumn: !1,
                    additionalColumns: me.map((e => e.key)),
                    mutateDisplayValue: (e, ...t) => {
                        const o = [];
                        for (let e = 0; e < me.length; ++e) t[e] && o.push(me[e]);
                        return o.length ? o.map((e => `<span class="tv-screener-table__pattern_icon apply-common-tooltip common-tooltip-fixed common-tooltip-below common-tooltip-html" data-color-theme="round-shadow" title='<div class="tv-screener-table__pattern_tooltip_container">${e.svg}<div>${e.name}</div></div>'>${e.svg}</span>`)).join(" ") : '<span class="tv-screener-table__pattern_empty">—</span>'
                    },
                    range: me.map((e => e.name)),
                    sourceRange: me,
                    customFilterCondition: e => {
                        Array.isArray(e) || (e = [e]);
                        return {
                            left: e.map((e => Pe(e, me))).join(","),
                            operation: "equal",
                            right: 1
                        }
                    }
                },
                update_mode: {
                    hiddenColumn: !1,
                    hideSetupColumn: !0,
                    skipField: !0
                },
                premarket_change: {
                    title: c.t(null, void 0, o(796768)),
                    shortTitle: c.t(null, void 0, o(353211)),
                    control: "condition",
                    hiddenOperators: je,
                    conditionFields: ["change"],
                    formatter: we,
                    filterFormatter: Se,
                    category: 3,
                    highlightChange: !0
                },
                premarket_change_abs: {
                    title: c.t(null, void 0, o(910602)),
                    shortTitle: c.t(null, void 0, o(34990)),
                    control: "condition",
                    hiddenOperators: je,
                    conditionFields: ["change_abs"],
                    formatter: ve,
                    forexFormatter: ve,
                    category: 3,
                    highlightChange: !0
                },
                premarket_change_from_open: {
                    title: c.t(null, void 0, o(732699)),
                    shortTitle: c.t(null, void 0, o(596880)),
                    control: "condition",
                    hiddenOperators: je,
                    conditionFields: [],
                    formatter: we,
                    filterFormatter: Se,
                    category: 3,
                    highlightChange: !0
                },
                premarket_change_from_open_abs: {
                    title: c.t(null, void 0, o(892667)),
                    shortTitle: c.t(null, void 0, o(899332)),
                    control: "condition",
                    hiddenOperators: je,
                    conditionFields: [],
                    formatter: ve,
                    forexFormatter: ve,
                    category: 3,
                    highlightChange: !0
                },
                premarket_close: {
                    title: c.t(null, void 0, o(360312)),
                    shortTitle: c.t(null, void 0, o(360312)),
                    control: "condition",
                    hiddenOperators: je,
                    conditionFields: [],
                    formatter: fe,
                    filterFormatter: ye,
                    category: 1
                },
                premarket_gap: {
                    title: c.t(null, void 0, o(652207)),
                    shortTitle: c.t(null, void 0, o(652207)),
                    control: "condition",
                    hiddenOperators: je,
                    conditionFields: ["gap"],
                    formatter: we,
                    filterFormatter: Se,
                    category: 3,
                    highlightChange: !0
                },
                premarket_high: {
                    title: c.t(null, void 0, o(271515)),
                    shortTitle: c.t(null, void 0, o(271515)),
                    control: "condition",
                    hiddenOperators: je,
                    conditionFields: [],
                    formatter: fe,
                    filterFormatter: ye,
                    category: 1
                },
                premarket_low: {
                    title: c.t(null, void 0, o(551019)),
                    shortTitle: c.t(null, void 0, o(551019)),
                    control: "condition",
                    hiddenOperators: je,
                    conditionFields: [],
                    formatter: fe,
                    filterFormatter: ye,
                    category: 1
                },
                premarket_open: {
                    title: c.t(null, void 0, o(613611)),
                    shortTitle: c.t(null, void 0, o(613611)),
                    control: "condition",
                    hiddenOperators: je,
                    conditionFields: [],
                    formatter: fe,
                    filterFormatter: ye,
                    category: 1
                },
                premarket_volume: {
                    title: c.t(null, void 0, o(689401)),
                    shortTitle: c.t(null, void 0, o(689401)),
                    control: "range",
                    formatter: be,
                    category: 1
                },
                postmarket_change: {
                    title: c.t(null, void 0, o(287719)),
                    shortTitle: c.t(null, void 0, o(427921)),
                    control: "condition",
                    hiddenOperators: je,
                    conditionFields: ["change"],
                    formatter: we,
                    filterFormatter: Se,
                    category: 3,
                    highlightChange: !0
                },
                postmarket_change_abs: {
                    title: c.t(null, void 0, o(959511)),
                    shortTitle: c.t(null, void 0, o(846926)),
                    control: "condition",
                    hiddenOperators: je,
                    conditionFields: ["change_abs"],
                    formatter: ve,
                    forexFormatter: ve,
                    category: 3,
                    highlightChange: !0
                },
                postmarket_close: {
                    title: c.t(null, void 0, o(723752)),
                    shortTitle: c.t(null, void 0, o(723752)),
                    control: "condition",
                    hiddenOperators: je,
                    conditionFields: [],
                    formatter: fe,
                    filterFormatter: ye,
                    category: 1
                },
                postmarket_high: {
                    title: c.t(null, void 0, o(448860)),
                    shortTitle: c.t(null, void 0, o(448860)),
                    control: "condition",
                    hiddenOperators: je,
                    conditionFields: [],
                    formatter: fe,
                    filterFormatter: ye,
                    category: 1
                },
                postmarket_low: {
                    title: c.t(null, void 0, o(20712)),
                    shortTitle: c.t(null, void 0, o(20712)),
                    control: "condition",
                    hiddenOperators: je,
                    conditionFields: [],
                    formatter: fe,
                    filterFormatter: ye,
                    category: 1
                },
                postmarket_open: {
                    title: c.t(null, void 0, o(95190)),
                    shortTitle: c.t(null, void 0, o(95190)),
                    control: "condition",
                    hiddenOperators: je,
                    conditionFields: [],
                    formatter: fe,
                    filterFormatter: ye,
                    category: 1
                },
                postmarket_volume: {
                    title: c.t(null, void 0, o(999602)),
                    shortTitle: c.t(null, void 0, o(999602)),
                    control: "range",
                    formatter: be,
                    category: 1
                },
                earnings_per_share_forecast_next_fq: {
                    control: "condition",
                    hiddenOperators: je,
                    conditionFields: [],
                    formatter: fe,
                    filterFormatter: ye,
                    category: 2
                },
                earnings_per_share_fq: {
                    control: "condition",
                    hiddenOperators: je,
                    conditionFields: [],
                    formatter: fe,
                    filterFormatter: ye,
                    category: 2
                },
                earnings_release_date: {
                    control: "select",
                    isSingle: !0,
                    category: 2,
                    sortable: !1,
                    useDefaultRange: !0,
                    defaultRange: Fe.filter((e => -1 !== Te.indexOf(e.key))).map((e => e.name)),
                    sourceRange: Fe,
                    customFilterCondition: De("earnings_release_date"),
                    formatter: Ce
                },
                earnings_release_next_date: {
                    control: "select",
                    isSingle: !0,
                    category: 2,
                    sortable: !1,
                    useDefaultRange: !0,
                    defaultRange: Fe.filter((e => -1 !== Me.indexOf(e.key))).map((e => e.name)),
                    sourceRange: Fe,
                    customFilterCondition: De("earnings_release_next_date"),
                    formatter: Ce
                },
                "Recommend.All": {
                    control: "select",
                    category: 3,
                    mutateDisplayValue: w.signalDisplayFunctions.processRecommendSignal,
                    signalComputation: w.signalComputationFunctions.computeRecommendSignal,
                    useDefaultRange: !0,
                    sortable: !1,
                    sortSelectedFirst: !1,
                    defaultRange: ke,
                    customFilterCondition: e => (0, w.generateRecommendsRequest)(e, "Recommend.All")
                },
                "Recommend.MA": {
                    control: "select",
                    category: 3,
                    mutateDisplayValue: w.signalDisplayFunctions.processRecommendSignal,
                    signalComputation: w.signalComputationFunctions.computeRecommendSignal,
                    useDefaultRange: !0,
                    sortable: !1,
                    sortSelectedFirst: !1,
                    defaultRange: ke,
                    customFilterCondition: e => (0, w.generateRecommendsRequest)(e, "Recommend.MA")
                },
                "Recommend.Other": {
                    control: "select",
                    category: 3,
                    mutateDisplayValue: w.signalDisplayFunctions.processRecommendSignal,
                    signalComputation: w.signalComputationFunctions.computeRecommendSignal,
                    useDefaultRange: !0,
                    sortable: !1,
                    sortSelectedFirst: !1,
                    defaultRange: ke,
                    customFilterCondition: e => (0, w.generateRecommendsRequest)(e, "Recommend.Other")
                },
                "Stoch.RSI.K": {
                    control: "condition",
                    conditionFields: ["Stoch.RSI.D"],
                    formatter: fe,
                    category: 3,
                    displaySignal: !0,
                    additionalColumns: ["Rec.Stoch.RSI"],
                    mutateDisplayValue: w.signalDisplayFunctions.processSimpleSignal,
                    signalComputation: w.signalComputationFunctions.computeSimpleSignal
                },
                "Stoch.RSI.D": {
                    control: "condition",
                    conditionFields: ["Stoch.RSI.K"],
                    formatter: fe,
                    category: 3
                },
                "W.R": {
                    control: "condition",
                    conditionFields: [],
                    formatter: fe,
                    category: 3,
                    displaySignal: !0,
                    additionalColumns: ["Rec.WR"],
                    mutateDisplayValue: w.signalDisplayFunctions.processSimpleSignal,
                    signalComputation: w.signalComputationFunctions.computeSimpleSignal
                },
                ROC: {
                    control: "condition",
                    conditionFields: [],
                    formatter: fe,
                    category: 3
                },
                BBPower: {
                    control: "condition",
                    conditionFields: [],
                    formatter: ve,
                    category: 3,
                    displaySignal: !0,
                    additionalColumns: ["Rec.BBPower"],
                    mutateDisplayValue: w.signalDisplayFunctions.processSimpleSignal,
                    signalComputation: w.signalComputationFunctions.computeSimpleSignal
                },
                UO: {
                    control: "condition",
                    conditionFields: [],
                    formatter: fe,
                    category: 3,
                    displaySignal: !0,
                    additionalColumns: ["Rec.UO"],
                    mutateDisplayValue: w.signalDisplayFunctions.processSimpleSignal,
                    signalComputation: w.signalComputationFunctions.computeSimpleSignal
                },
                VWAP: {
                    control: "condition",
                    conditionFields: We().concat(Ne()),
                    formatter: ve,
                    category: 3
                },
                VWMA: {
                    control: "condition",
                    conditionFields: We().concat(Ne()),
                    formatter: ve,
                    category: 3,
                    displaySignal: !0,
                    additionalColumns: ["Rec.VWMA"],
                    mutateDisplayValue: w.signalDisplayFunctions.processSimpleSignal,
                    signalComputation: w.signalComputationFunctions.computeSimpleSignal
                },
                ADR: {
                    control: "condition",
                    conditionFields: We(),
                    formatter: ve,
                    category: 3
                },
                "Ichimoku.CLine": {
                    control: "condition",
                    conditionFields: We().concat(Ve("Ichimoku.CLine")),
                    formatter: ve,
                    category: 3
                },
                "Ichimoku.BLine": {
                    control: "condition",
                    conditionFields: We().concat(Ve("Ichimoku.BLine")),
                    formatter: ve,
                    category: 3,
                    displaySignal: !0,
                    additionalColumns: ["Rec.Ichimoku"],
                    mutateDisplayValue: w.signalDisplayFunctions.processSimpleSignal,
                    signalComputation: w.signalComputationFunctions.computeSimpleSignal
                },
                "Ichimoku.Lead1": {
                    control: "condition",
                    conditionFields: We().concat(Ve("Ichimoku.Lead1")),
                    formatter: ve,
                    category: 3
                },
                "Ichimoku.Lead2": {
                    control: "condition",
                    conditionFields: We().concat(Ve("Ichimoku.Lead2")),
                    formatter: ve,
                    category: 3
                },
                elements: {
                    hiddenOperators: je,
                    title: c.t(null, void 0, o(898507)),
                    shortTitle: c.t(null, void 0, o(898507)),
                    control: "condition",
                    conditionFields: [],
                    formatter: ye,
                    category: 1
                },
                basic_elements: {
                    hiddenOperators: je,
                    title: c.t(null, void 0, o(921906)),
                    shortTitle: c.t(null, void 0, o(921906)),
                    control: "condition",
                    conditionFields: [],
                    formatter: ye,
                    category: 1
                },
                dps_common_stock_prim_issue_fy: {
                    control: "condition",
                    hiddenOperators: je,
                    conditionFields: [],
                    formatter: fe,
                    filterFormatter: ye,
                    category: 2
                },
                "24h_vol|5": {
                    category: 1,
                    formatter: be,
                    control: "range",
                    title: W["24h_vol|5"][0],
                    shortTitle: W["24h_vol|5"][1]
                },
                "24h_vol_change|5": {
                    control: "condition",
                    hiddenOperators: je,
                    conditionFields: [],
                    formatter: we,
                    category: 1,
                    highlightChange: !0
                },
                currency: {
                    control: "select",
                    defaultRange: ["USD", "USDT", "USDC", "BUSD", "BTC", "ETH", "DAI", "BNB", "WBTC", "WETH"],
                    disabled: !0,
                    category: 1,
                    hideSetupColumn: !0
                },
                total_revenue_yoy_growth_fq: {
                    control: "condition",
                    hiddenOperators: je,
                    conditionFields: [],
                    formatter: we,
                    filterFormatter: Se,
                    category: 2,
                    highlightChange: !0
                },
                total_revenue_qoq_growth_fq: {
                    control: "condition",
                    hiddenOperators: je,
                    conditionFields: [],
                    formatter: we,
                    filterFormatter: Se,
                    category: 2,
                    highlightChange: !0
                },
                total_revenue_yoy_growth_fy: {
                    control: "condition",
                    hiddenOperators: je,
                    conditionFields: [],
                    formatter: we,
                    filterFormatter: Se,
                    category: 2,
                    highlightChange: !0
                },
                total_revenue_yoy_growth_ttm: {
                    control: "condition",
                    hiddenOperators: je,
                    conditionFields: [],
                    formatter: we,
                    filterFormatter: Se,
                    category: 2,
                    highlightChange: !0
                },
                gross_profit_yoy_growth_fq: {
                    control: "condition",
                    hiddenOperators: je,
                    conditionFields: [],
                    formatter: we,
                    filterFormatter: Se,
                    category: 2,
                    highlightChange: !0
                },
                gross_profit_qoq_growth_fq: {
                    control: "condition",
                    hiddenOperators: je,
                    conditionFields: [],
                    formatter: we,
                    filterFormatter: Se,
                    category: 2,
                    highlightChange: !0
                },
                gross_profit_yoy_growth_fy: {
                    control: "condition",
                    hiddenOperators: je,
                    conditionFields: [],
                    formatter: we,
                    filterFormatter: Se,
                    category: 2,
                    highlightChange: !0
                },
                gross_profit_yoy_growth_ttm: {
                    control: "condition",
                    hiddenOperators: je,
                    conditionFields: [],
                    formatter: we,
                    filterFormatter: Se,
                    category: 2,
                    highlightChange: !0
                },
                ebitda_yoy_growth_fq: {
                    control: "condition",
                    hiddenOperators: je,
                    conditionFields: [],
                    formatter: we,
                    filterFormatter: Se,
                    category: 2,
                    highlightChange: !0
                },
                ebitda_qoq_growth_fq: {
                    control: "condition",
                    hiddenOperators: je,
                    conditionFields: [],
                    formatter: we,
                    filterFormatter: Se,
                    category: 2,
                    highlightChange: !0
                },
                ebitda_yoy_growth_fy: {
                    control: "condition",
                    hiddenOperators: je,
                    conditionFields: [],
                    formatter: we,
                    filterFormatter: Se,
                    category: 2,
                    highlightChange: !0
                },
                ebitda_yoy_growth_ttm: {
                    control: "condition",
                    hiddenOperators: je,
                    conditionFields: [],
                    formatter: we,
                    filterFormatter: Se,
                    category: 2,
                    highlightChange: !0
                },
                net_income_yoy_growth_fq: {
                    control: "condition",
                    hiddenOperators: je,
                    conditionFields: [],
                    formatter: we,
                    filterFormatter: Se,
                    category: 2,
                    highlightChange: !0
                },
                net_income_qoq_growth_fq: {
                    control: "condition",
                    hiddenOperators: je,
                    conditionFields: [],
                    formatter: we,
                    filterFormatter: Se,
                    category: 2,
                    highlightChange: !0
                },
                net_income_yoy_growth_fy: {
                    control: "condition",
                    hiddenOperators: je,
                    conditionFields: [],
                    formatter: we,
                    filterFormatter: Se,
                    category: 2,
                    highlightChange: !0
                },
                net_income_yoy_growth_ttm: {
                    control: "condition",
                    hiddenOperators: je,
                    conditionFields: [],
                    formatter: we,
                    filterFormatter: Se,
                    category: 2,
                    highlightChange: !0
                },
                free_cash_flow_yoy_growth_fq: {
                    control: "condition",
                    hiddenOperators: je,
                    conditionFields: [],
                    formatter: we,
                    filterFormatter: Se,
                    category: 2,
                    highlightChange: !0
                },
                free_cash_flow_qoq_growth_fq: {
                    control: "condition",
                    hiddenOperators: je,
                    conditionFields: [],
                    formatter: we,
                    filterFormatter: Se,
                    category: 2,
                    highlightChange: !0
                },
                free_cash_flow_yoy_growth_fy: {
                    control: "condition",
                    hiddenOperators: je,
                    conditionFields: [],
                    formatter: we,
                    filterFormatter: Se,
                    category: 2,
                    highlightChange: !0
                },
                free_cash_flow_yoy_growth_ttm: {
                    control: "condition",
                    hiddenOperators: je,
                    conditionFields: [],
                    formatter: we,
                    filterFormatter: Se,
                    category: 2,
                    highlightChange: !0
                },
                earnings_per_share_diluted_yoy_growth_fq: {
                    control: "condition",
                    hiddenOperators: je,
                    conditionFields: [],
                    formatter: we,
                    filterFormatter: Se,
                    category: 2,
                    highlightChange: !0
                },
                earnings_per_share_diluted_qoq_growth_fq: {
                    control: "condition",
                    hiddenOperators: je,
                    conditionFields: [],
                    formatter: we,
                    filterFormatter: Se,
                    category: 2,
                    highlightChange: !0
                },
                earnings_per_share_diluted_yoy_growth_fy: {
                    control: "condition",
                    hiddenOperators: je,
                    conditionFields: [],
                    formatter: we,
                    filterFormatter: Se,
                    category: 2,
                    highlightChange: !0
                },
                earnings_per_share_diluted_yoy_growth_ttm: {
                    control: "condition",
                    hiddenOperators: je,
                    conditionFields: [],
                    formatter: we,
                    filterFormatter: Se,
                    category: 2,
                    highlightChange: !0
                },
                dps_common_stock_prim_issue_yoy_growth_fy: {
                    control: "condition",
                    hiddenOperators: je,
                    conditionFields: [],
                    formatter: we,
                    filterFormatter: Se,
                    category: 2,
                    highlightChange: !0
                },
                total_assets_yoy_growth_fq: {
                    control: "condition",
                    hiddenOperators: je,
                    conditionFields: [],
                    formatter: we,
                    filterFormatter: Se,
                    category: 2,
                    highlightChange: !0
                },
                total_assets_qoq_growth_fq: {
                    control: "condition",
                    hiddenOperators: je,
                    conditionFields: [],
                    formatter: we,
                    filterFormatter: Se,
                    category: 2,
                    highlightChange: !0
                },
                total_assets_yoy_growth_fy: {
                    control: "condition",
                    hiddenOperators: je,
                    conditionFields: [],
                    formatter: we,
                    filterFormatter: Se,
                    category: 2,
                    highlightChange: !0
                },
                total_debt_yoy_growth_fq: {
                    control: "condition",
                    hiddenOperators: je,
                    conditionFields: [],
                    formatter: we,
                    filterFormatter: Se,
                    category: 2,
                    highlightChange: !0
                },
                total_debt_qoq_growth_fq: {
                    control: "condition",
                    hiddenOperators: je,
                    conditionFields: [],
                    formatter: we,
                    filterFormatter: Se,
                    category: 2,
                    highlightChange: !0
                },
                total_debt_yoy_growth_fy: {
                    control: "condition",
                    hiddenOperators: je,
                    conditionFields: [],
                    formatter: we,
                    filterFormatter: Se,
                    category: 2,
                    highlightChange: !0
                },
                cash_n_equivalents_fq: {
                    control: "condition",
                    hiddenOperators: je,
                    conditionFields: [],
                    formatter: be,
                    category: 2
                },
                cash_n_equivalents_fy: {
                    control: "condition",
                    hiddenOperators: je,
                    conditionFields: [],
                    formatter: be,
                    category: 2
                },
                cash_n_short_term_invest_fq: {
                    control: "condition",
                    hiddenOperators: je,
                    conditionFields: [],
                    formatter: be,
                    category: 2
                },
                cash_n_short_term_invest_fy: {
                    control: "condition",
                    hiddenOperators: je,
                    conditionFields: [],
                    formatter: be,
                    category: 2
                }
            };

            function He(e, t) {
                t = t.replace(/(\s+)/, "(<[^>]+>)*$1(<[^>]+>)*");
                const o = new RegExp("(" + t + ")", "gi");
                return e.replace(o, "<mark>$1</mark>")
            }

            function ze(e, t) {
                for (let o = 0; o < e.length; ++o) {
                    const i = e[o];
                    i.left && Ue[i.left] && (i.left = F(i.left, t))
                }
            }

            function Ge(e, t, o, i) {
                if (Array.isArray(t) && 0 === t.length) throw new Error("Empty value");
                let r = o && o[e] ? o[e] : t;
                if ("function" == typeof Ue[e].customFilterCondition) {
                    const t = Ue[e].customFilterCondition(r);
                    if (t) return Array.isArray(t) ? ze(t, i) : ("candlestick" === e && (t.left = t.left.split(",").map((e => F(e, i))).join(",")), t.left && Ue[t.left] && (t.left = F(t.left, i))), t.filterOR && (ze(t.filter, i), ze(t.filterOR, i)), t.filter2Flag && (ze(t.filter, i), ze(t.filter2AndPart, i)), t
                }
                if ("function" == typeof Ue[e].mutateFilterConditionValue) {
                    const t = Ue[e].mutateFilterConditionValue(r);
                    t && (r = t)
                }
                const n = Array.isArray(r);
                if (r && "object" == typeof r && !n) {
                    const t = {
                        left: e,
                        operation: r.operator
                    };
                    return r.value && (t.right = r.value), t
                }
                return {
                    left: F(e, i),
                    operation: n ? "in_range" : "equal",
                    right: n ? r.slice() : r
                }
            }

            function Ke(e, t, o, i) {
                if (Ae(t) && Ae(o)) throw new Error("Empty value");
                let r, n = {};
                switch (Ue[e].control) {
                    case "range":
                        if (t && "object" == typeof t && !Array.isArray(t)) {
                            n = {
                                left: e,
                                operation: t.operator
                            }, t.value && (n.right = t.value);
                            break
                        }
                        var s = o ? Array.isArray(o[e]) && o[e].slice() || [] : t.slice();
                        n = {
                            left: F(e, i),
                            operation: "in_range",
                            right: s
                        }, 2 === s.length && isNumber(s[0]) && isNumber(s[1]) && (-1e100 == +s[0] ? n = {
                            left: F(e, i),
                            operation: "eless",
                            right: s[1]
                        } : 1e100 == +s[1] && (n = {
                            left: F(e, i),
                            operation: "egreater",
                            right: s[0]
                        }));
                        break;
                    case "condition":
                        if (Ae(t.operator)) throw new Error("Empty value operator");
                        if (Ae(t.value)) throw new Error("Empty value");
                        r = o && o[e].value ? o[e].value : t.value, Ue[r] && (r = F(r, i)), n = {
                            left: F(e, i),
                            operation: o && o[e].operator ? o[e].operator : t.operator,
                            right: r
                        };
                        break;
                    case "toggle":
                        n = {
                            left: F(e, i),
                            operation: o && o[e].operator ? o[e].operator : Ue[e].filter.operator,
                            right: o && o[e].value ? o[e].value : Ue[e].filter.value
                        };
                        break;
                    case "select":
                        n = Ge(e, t, o, i);
                        break;
                    default:
                        "select" === Ue[e].filterCondition && (n = Ge(e, t, o, i))
                }
                return n
            }

            function Xe(e, t) {
                ! function(e, t) {
                    for (const o in e) e[o].disabled = 2 === e[o].category || t.includes(o)
                }(e, (t || []).concat("type", "industry", "market_cap_basic", "beta_1_year", "Value.Traded", "MoneyFlow", "ChaikinMoneyFlow", "elements", "basic_elements", "premarket_change", "premarket_change_abs", "premarket_change_from_open", "premarket_change_from_open_abs", "premarket_close", "premarket_gap", "premarket_high", "premarket_low", "premarket_open", "premarket_volume", "postmarket_change", "postmarket_change_abs", "postmarket_close", "postmarket_high", "postmarket_low", "postmarket_open", "postmarket_volume"))
            }

            function Ye() {
                for (const e of Object.keys(W)) e in Ue && (Ue[e].title = Ue[e].title || W[e][0], Ue[e].shortTitle = Ue[e].shortTitle || W[e][1])
            }

            function Ze(e, t) {
                if (delete Ue.name.control, Ye(), "forex" === e && (Ue.country.title = c.t(null, void 0, o(703556)), Ue.country.shortTitle = c.t(null, void 0, o(703556)), delete Ue.sector.control, Ue.sector.title = c.t(null, void 0, o(533064)), Ue.sector.shortTitle = c.t(null, void 0, o(533064)), Ue.sector.resettableFilter = !1, Ue.sector.mutateFilterConditionValue = e => !!e && (Array.isArray(e) ? e.map((e => Ee(e, xe))) : Ee(e, xe))), "stock" === e) {
                    Ue.sector.title = c.t(null, void 0, o(99804)), Ue.sector.shortTitle = c.t(null, void 0, o(99804)), Ue.type.customFilterCondition = $, Ue.type.defaultRange = Le, Ue.name.defaultRange = Le, Ue.sector.control = "select", Ue.sector.resettableFilter = !0, delete Ue.sector.mutateFilterConditionValue;
                    for (const e in Ue) Ue[e].disabled = !1
                }["stock", "crypto"].includes(e) && (Ue.name.control = "select"), "crypto" === e && (Ue.sector.title = c.t(null, void 0, o(609797)), Ue.sector.shortTitle = c.t(null, void 0, o(609797)), Ue.sector.control = "select", Ue.sector.resettableFilter = !0, delete Ue.sector.mutateFilterConditionValue, Ue.name.additionalColumns.push("exchange"), Ue.type.defaultRange = Oe, Ue.name.defaultRange = Oe, Ue.type.customFilterCondition = I), "crypto" !== e && (Ue.name.additionalColumns = Ue.name.additionalColumns.filter((e => "exchange" !== e))), "crypto_mkt" === e && (Ue.sector.title = c.t(null, void 0, o(399709)), Ue.sector.shortTitle = c.t(null, void 0, o(399709))), ["crypto", "crypto_mkt"].includes(e) && (Ue.total_shares_outstanding.title = c.t(null, void 0, o(983692)), Ue.total_shares_outstanding.shortTitle = c.t(null, void 0, o(667808))), "sector" === e && (Ue.description.hiddenColumn = !1, Ue.description.title = c.t(null, void 0, o(99804)), Ue.description.shortTitle = c.t(null, void 0, o(99804)), Ue.description.mutateDisplayValue = qe), "industry" === e && (Ue.description.hiddenColumn = !1, Ue.description.title = c.t(null, void 0, o(407727)), Ue.description.shortTitle = c.t(null, void 0, o(407727)), Ue.description.mutateDisplayValue = qe, Ue.elements.title = c.t(null, void 0, o(921906)), Ue.elements.shortTitle = c.t(null, void 0, o(921906)), Ue.sector.control = "select", Ue.sector.resettableFilter = !0), ["sector", "industry"].includes(t) && (Ue.sector.hiddenColumn = !0), "bonds" === e && (Ue.close.title = c.t(null, {
                        context: "Bonds"
                    }, o(568461)), Ue.close.shortTitle = c.t(null, {
                        context: "Bonds"
                    }, o(568461)), Ue.coupon = {
                        title: c.t(null, void 0, o(332961)),
                        shortTitle: c.t(null, void 0, o(332961)),
                        align: "right",
                        formatter: we
                    }, Ue.maturity_date = {
                        title: c.t(null, void 0, o(147789)),
                        shortTitle: c.t(null, void 0, o(147789)),
                        align: "right",
                        mutateDisplayValue: T.mutateSimpleDate
                    }),
                    "continuous_futures" === e && (Ue.expiration = {
                        title: c.t(null, void 0, o(886777)),
                        shortTitle: c.t(null, void 0, o(886777)),
                        align: "right",
                        mutateDisplayValue: T.mutateSimpleDate
                    }),
                    function(e, t) {
                        switch (e) {
                            case "stock":
                                ["bid", "ask", "currency", "centralization"].forEach((e => {
                                    t[e].disabled = !0
                                }));
                                break;
                            case "forex":
                                Xe(t, ["exchange", "volume", "relative_volume_10d_calc", "relative_volume_intraday.5", "average_volume_10d_calc", "average_volume_30d_calc", "average_volume_60d_calc", "average_volume_90d_calc", "currency", "centralization"]);
                                break;
                            case "futures":
                            case "cfd":
                                Xe(t, ["bid", "ask", "centralization"]);
                                break;
                            case "crypto":
                                Xe(t, ["country", "sector"])
                        }
                    }(e, Ue);
                ["market_cap_calc", "market_cap_diluted_calc", "total_shares_outstanding", "total_shares_diluted", "total_value_traded", "24h_vol|5", "24h_vol_change|5"].forEach((t => {
                    Ue[t].disabled = !["crypto", "crypto_mkt"].includes(e)
                }));
                ["elements", "basic_elements"].forEach((t => {
                    Ue[t].disabled = !["sector", "industry"].includes(e)
                }))
            }
            Ye();
            const Je = [{
                    key: "-1",
                    name: c.t(null, void 0, o(710050))
                }, {
                    key: "1",
                    name: c.t(null, void 0, o(970223))
                }],
                Qe = [{
                    key: "-1",
                    name: '<div class="tv-screener-table__market-icon">' + o(578507) + "</div>"
                }, {
                    key: "1",
                    name: '<div class="tv-screener-table__market-icon">' + o(289523) + "</div>"
                }];

            function et() {
                const e = (e, t, o, i) => {
                    const r = Pe(e, Fe) || null,
                        n = r ? Be(r) : null;
                    return n && n[0] <= 1e3 * t && 1e3 * t <= n[1] ? i : o
                };
                Ue.earnings_release_next_time = {
                        isSingle: !0,
                        title: c.t(null, void 0, o(312806)),
                        tooltip: (t, o, i) => {
                            const r = Ue.earnings_release_next_date.value,
                                n = e(r, t, o, i);
                            return n ? Ie((s = n).toString(), Je) || s : void 0;
                            var s
                        },
                        shortTitle: c.t(null, void 0, o(312806)),
                        disableHeaderControl: !0,
                        align: "center",
                        additionalColumns: ["earnings_release_next_date", "earnings_release_time", "earnings_release_next_time"],
                        mutateDisplayValue: (t, o, i, r) => {
                            const n = Ue.earnings_release_next_date.value,
                                s = e(n, o, i, r);
                            return s ? Ie((l = s).toString(), Qe) || l : tt;
                            var l
                        },
                        category: 2
                    }, Ue.close.title = c.t(null, void 0, o(7953)), Ue.close.shortTitle = c.t(null, void 0, o(7953)), Ue.earnings_release_next_date = Object.assign(Ue.earnings_release_next_date, {
                        title: c.t(null, void 0, o(722677)),
                        shortTitle: c.t(null, void 0, o(722677)),
                        noAny: !0,
                        additionalColumns: ["earnings_release_date", "earnings_release_next_date"],
                        defaultRange: Fe.map((e => e.name)),
                        resettableFilter: !1,
                        mutateDisplayValue: (e, t, o, i) => {
                            if (!o && t) return Ce.format(t);
                            if (i.value) {
                                const e = Pe(i.value, Fe);
                                if (e) {
                                    const i = Be(e);
                                    if (i) {
                                        if (t && ot(t, i)) return Ce.format(t);
                                        if (o && ot(o, i)) return Ce.format(o)
                                    }
                                }
                            }
                            return e
                        },
                        customFilterCondition: De()
                    }), Ue.earnings_release_next_calendar_date = {
                        title: c.t(null, void 0, o(609254)),
                        shortTitle: c.t(null, void 0, o(609254)),
                        formatter: Ce,
                        category: 1,
                        additionalColumns: ["earnings_release_next_date", "earnings_release_calendar_date"],
                        mutateDisplayValue: (e, t, o) => {
                            const i = Pe(Ue.earnings_release_next_date.value, Fe);
                            if (i) {
                                const o = Be(i);
                                if (o && ot(t, o)) return e
                            }
                            return o ? Ce.format(o) : tt
                        }
                    }, delete Ue.earnings_per_share_forecast_next_fq.control, Ue.earnings_per_share_forecast_next_fq.title = c.t(null, void 0, o(881220)), Ue.earnings_per_share_forecast_next_fq.shortTitle = c.t(null, void 0, o(881220)),
                    Ue.earnings_per_share_forecast_next_fq.disableHeaderControl = !0, Ue.earnings_per_share_forecast_next_fq.align = "right", Ue.earnings_per_share_forecast_next_fq.additionalColumns = ["earnings_release_next_date", "earnings_per_share_forecast_fq"], Ue.earnings_per_share_forecast_next_fq.mutateDisplayValue = (e, t, o) => {
                        const i = Pe(Ue.earnings_release_next_date.value, Fe);
                        if (i) {
                            const o = Be(i);
                            if (o && ot(t, o)) return e
                        }
                        return o ? fe.format(o) : tt
                    }, Ue.earnings_per_share_fq.title = c.t(null, void 0, o(8041)), Ue.earnings_per_share_fq.shortTitle = c.t(null, void 0, o(8041)), Ue.eps_surprise_fq = {
                        control: "condition",
                        hiddenOperators: je,
                        conditionFields: [],
                        title: W.eps_surprise_fq[0],
                        shortTitle: W.eps_surprise_fq[1],
                        formatter: fe,
                        filterFormatter: ye,
                        category: 2,
                        highlightChange: !0
                    }, Ue.eps_surprise_percent_fq = {
                        control: "condition",
                        hiddenOperators: je,
                        conditionFields: [],
                        title: W.eps_surprise_percent_fq[0],
                        shortTitle: W.eps_surprise_percent_fq[1],
                        formatter: we,
                        filterFormatter: Se,
                        category: 2,
                        highlightChange: !0
                    }, Ue.revenue_fq = {
                        control: "condition",
                        hiddenOperators: je,
                        conditionFields: [],
                        title: c.t(null, void 0, o(484933)),
                        shortTitle: c.t(null, void 0, o(484933)),
                        formatter: be,
                        category: 1
                    }, Ue.revenue_forecast_next_fq = {
                        control: "condition",
                        hiddenOperators: je,
                        conditionFields: [],
                        title: c.t(null, void 0, o(792741)),
                        shortTitle: c.t(null, void 0, o(792741)),
                        formatter: be,
                        category: 1,
                        additionalColumns: ["earnings_release_next_date", "revenue_forecast_fq"],
                        mutateDisplayValue: (e, t, o) => {
                            const i = Pe(Ue.earnings_release_next_date.value, Fe);
                            if (i) {
                                const o = Be(i);
                                if (o && ot(t, o)) return "0" === e ? tt : e
                            }
                            return o ? be.format(o) : tt
                        }
                    }, rt()
            }
            const tt = '<span class="tv-screener-table__cell--color-normal">—</span>';

            function ot(e, t) {
                return function(e, t) {
                    const o = t[0],
                        i = t[1];
                    return o <= e && e <= i
                }(1e3 * e, t)
            }
            const it = e => {
                e.additionalColumns = ["earnings_release_next_date"], e.mutateDisplayValue = (e, t) => {
                    const o = Pe(Ue.earnings_release_next_date.value, Fe);
                    if (o) {
                        const e = Be(o);
                        if (e && ot(t, e)) return tt
                    }
                    return e
                }
            };

            function rt() {
                it(Ue.earnings_per_share_fq), it(Ue.eps_surprise_fq), it(Ue.eps_surprise_percent_fq), it(Ue.revenue_fq)
            }

            function nt(e, t = "stock", o = !0) {
                if (!e) return null;
                if (["crypto_mkt"].includes(t) && e.cryptoFormatter) return e.cryptoFormatter;
                if (["forex", "crypto", "crypto_mkt", "cfd", "futures"].includes(t)) {
                    if (e.forexFilterFormatter) return e.forexFilterFormatter;
                    if (e.forexFormatter) return e.forexFormatter
                }
                return o && e.filterFormatter ? e.filterFormatter : e.formatter ? e.formatter : null
            }
            const st = {};

            function lt(e, t, o, i) {
                const r = e + ";" + t + ";" + o + ";" + i;
                return st[r] || (st[r] = new u.PriceFormatter({
                    priceScale: e,
                    minMove: t,
                    fractional: o,
                    minMove2: i
                })), st[r]
            }

            function at(e) {
                return Ue[e] && !Ue[e].fixed && !Ue[e].disabled && !Ue[e].hideSetupColumn
            }

            function ct(e) {
                return e.filterTitle || e.title
            }
            var dt;

            function ht(e, t) {
                return Array.isArray(e) && Array.isArray(t) ? function(e, t) {
                    const o = [...e, ...t];
                    return [Math.min(...o), Math.max(...o)]
                }(e, t) : "string" != typeof e ? function(e, t) {
                    return e.operator !== t.operator ? null : "greater" === t.operator ? {
                        operator: e.operator,
                        value: Math.min(t.value, e.value)
                    } : {
                        operator: e.operator,
                        value: Math.max(e.value, t.value)
                    }
                }(e, t) : e === t ? e : null
            }! function(e) {
                e.Bonds = "bonds",
                    e.Cfd = "cfd", e.ContinuousFutures = "continuous_futures", e.Crypto = "crypto", e.CryptoBySymbol = "crypto_by_symbol", e.CryptoMkt = "crypto_mkt", e.CryptoMktBySymbol = "crypto_mkt_by_symbol", e.Currency = "currency", e.Forex = "forex", e.Futures = "futures", e.Industry = "industry", e.PostMarket = "post_market", e.PreMarket = "pre_market", e.Sector = "sector", e.Stock = "stock", e.StockCompact = "stock_compact"
            }(dt || (dt = {}));
            const ut = {
                    forex: {
                        top_gainers: c.t(null, void 0, o(497496)),
                        top_losers: c.t(null, void 0, o(67269))
                    },
                    default: {
                        top_gainers: c.t(null, void 0, o(534822)),
                        top_losers: c.t(null, void 0, o(619430))
                    }
                },
                pt = [{
                    id: "general",
                    title: c.t(null, void 0, o(704258)),
                    content: {
                        sort_field: "name",
                        sort_direction: "asc",
                        filters: {}
                    }
                }, {
                    id: "most_capitalized",
                    title: c.t(null, void 0, o(553743)),
                    content: {
                        sort_field: "market_cap_basic",
                        sort_direction: "desc",
                        filters: {
                            is_primary: {
                                operator: "equal",
                                value: !0
                            },
                            active_symbol: {
                                operator: "equal",
                                value: !0
                            }
                        }
                    }
                }, {
                    id: "volume_leaders",
                    title: c.t(null, void 0, o(476709)),
                    adjustFilter: {
                        volume: [1]
                    },
                    content: {
                        sort_field: "volume",
                        sort_direction: "desc",
                        filters: {
                            is_primary: {
                                operator: "equal",
                                value: !0
                            },
                            active_symbol: {
                                operator: "equal",
                                value: !0
                            }
                        }
                    }
                }, {
                    id: "top_gainers",
                    title: ut.default.top_gainers,
                    adjustFilter: {
                        change: [1]
                    },
                    content: {
                        sort_field: "change",
                        sort_direction: "desc",
                        filters: {
                            change: {
                                operator: "greater",
                                value: 0
                            },
                            is_primary: {
                                operator: "equal",
                                value: !0
                            },
                            active_symbol: {
                                operator: "equal",
                                value: !0
                            }
                        }
                    }
                }, {
                    id: "top_losers",
                    title: ut.default.top_losers,
                    adjustFilter: {
                        change: [0]
                    },
                    content: {
                        sort_field: "change",
                        sort_direction: "asc",
                        filters: {
                            change: {
                                operator: "less",
                                value: 0
                            },
                            is_primary: {
                                operator: "equal",
                                value: !0
                            },
                            active_symbol: {
                                operator: "equal",
                                value: !0
                            }
                        }
                    }
                }, {
                    id: "ath",
                    title: c.t(null, void 0, o(561723)),
                    content: {
                        sort_field: "name",
                        sort_direction: "asc",
                        filters: {
                            "High.All": {
                                operator: "eless",
                                value: "high"
                            },
                            is_primary: {
                                operator: "equal",
                                value: !0
                            },
                            active_symbol: {
                                operator: "equal",
                                value: !0
                            }
                        }
                    }
                }, {
                    id: "atl",
                    title: c.t(null, void 0, o(699864)),
                    content: {
                        sort_field: "name",
                        sort_direction: "asc",
                        filters: {
                            "Low.All": {
                                operator: "egreater",
                                value: "low"
                            },
                            is_primary: {
                                operator: "equal",
                                value: !0
                            },
                            active_symbol: {
                                operator: "equal",
                                value: !0
                            }
                        }
                    }
                }, {
                    id: "high_dividend",
                    title: c.t(null, void 0, o(768450)),
                    content: {
                        sort_field: "dividend_yield_recent",
                        sort_direction: "desc",
                        filters: {
                            dividend_yield_recent: {
                                operator: "greater",
                                value: 0
                            },
                            is_primary: {
                                operator: "equal",
                                value: !0
                            },
                            active_symbol: {
                                operator: "equal",
                                value: !0
                            }
                        }
                    }
                }, {
                    id: "above_52wk_high",
                    title: c.t(null, void 0, o(686478)),
                    content: {
                        sort_field: "name",
                        sort_direction: "asc",
                        filters: {
                            price_52_week_high: {
                                operator: "eless",
                                value: "high"
                            },
                            is_primary: {
                                operator: "equal",
                                value: !0
                            },
                            active_symbol: {
                                operator: "equal",
                                value: !0
                            }
                        }
                    }
                }, {
                    id: "below_52wk_low",
                    title: c.t(null, void 0, o(56273)),
                    content: {
                        sort_field: "name",
                        sort_direction: "asc",
                        filters: {
                            price_52_week_low: {
                                operator: "egreater",
                                value: "low"
                            },
                            is_primary: {
                                operator: "equal",
                                value: !0
                            },
                            active_symbol: {
                                operator: "equal",
                                value: !0
                            }
                        }
                    }
                }, {
                    id: "monthly_high",
                    title: c.t(null, void 0, o(708562)),
                    content: {
                        sort_field: "name",
                        sort_direction: "asc",
                        filters: {
                            "High.1M": {
                                operator: "eless",
                                value: "high"
                            },
                            is_primary: {
                                operator: "equal",
                                value: !0
                            },
                            active_symbol: {
                                operator: "equal",
                                value: !0
                            }
                        }
                    }
                }, {
                    id: "monthly_low",
                    title: c.t(null, void 0, o(202388)),
                    content: {
                        sort_field: "name",
                        sort_direction: "asc",
                        filters: {
                            "Low.1M": {
                                operator: "egreater",
                                value: "low"
                            },
                            is_primary: {
                                operator: "equal",
                                value: !0
                            },
                            active_symbol: {
                                operator: "equal",
                                value: !0
                            }
                        }
                    }
                }, {
                    id: "most_volatile",
                    title: c.t(null, void 0, o(284514)),
                    adjustFilter: {
                        "Volatility.D": [1]
                    },
                    content: {
                        sort_field: "Volatility.D",
                        sort_direction: "desc",
                        filters: {
                            is_primary: {
                                operator: "equal",
                                value: !0
                            },
                            active_symbol: {
                                operator: "equal",
                                value: !0
                            }
                        }
                    }
                }, {
                    id: "unusual_volume",
                    title: c.t(null, void 0, o(200419)),
                    adjustFilter: {
                        relative_volume_10d_calc: [1]
                    },
                    content: {
                        sort_field: "relative_volume_10d_calc",
                        sort_direction: "desc",
                        filters: {
                            is_primary: {
                                operator: "equal",
                                value: !0
                            },
                            relative_volume_10d_calc: null,
                            active_symbol: {
                                operator: "equal",
                                value: !0
                            }
                        }
                    }
                }, {
                    id: "overbought",
                    title: c.t(null, void 0, o(890846)),
                    content: {
                        sort_field: "name",
                        sort_direction: "asc",
                        filters: {
                            is_primary: {
                                operator: "equal",
                                value: !0
                            },
                            RSI: {
                                operator: "greater",
                                value: 70
                            },
                            active_symbol: {
                                operator: "equal",
                                value: !0
                            }
                        }
                    }
                }, {
                    id: "oversold",
                    title: c.t(null, void 0, o(96062)),
                    content: {
                        sort_field: "name",
                        sort_direction: "asc",
                        filters: {
                            is_primary: {
                                operator: "equal",
                                value: !0
                            },
                            RSI: {
                                operator: "less",
                                value: 30
                            },
                            active_symbol: {
                                operator: "equal",
                                value: !0
                            }
                        }
                    }
                }, {
                    id: "outperforming_SMA50",
                    title: c.t(null, void 0, o(862381)),
                    content: {
                        sort_field: "name",
                        sort_direction: "asc",
                        filters: {
                            is_primary: {
                                operator: "equal",
                                value: !0
                            },
                            SMA50: {
                                operator: "less",
                                value: "close"
                            },
                            active_symbol: {
                                operator: "equal",
                                value: !0
                            }
                        }
                    }
                }, {
                    id: "underperforming_SMA50",
                    title: c.t(null, void 0, o(196067)),
                    content: {
                        sort_field: "name",
                        sort_direction: "asc",
                        filters: {
                            is_primary: {
                                operator: "equal",
                                value: !0
                            },
                            SMA50: {
                                operator: "greater",
                                value: "close"
                            },
                            active_symbol: {
                                operator: "equal",
                                value: !0
                            }
                        }
                    }
                }, {
                    id: "earnings_this_week",
                    title: c.t(null, void 0, o(711478)),
                    content: {
                        sort_field: "market_cap_basic",
                        sort_direction: "desc",
                        filters: {
                            is_primary: {
                                operator: "equal",
                                value: !0
                            },
                            earnings_release_next_date: null,
                            active_symbol: {
                                operator: "equal",
                                value: !0
                            }
                        }
                    }
                }, {
                    id: "pre_market_gainers",
                    title: c.t(null, void 0, o(171794)),
                    adjustFilter: {
                        premarket_change: [1]
                    },
                    content: {
                        sort_field: "premarket_change",
                        sort_direction: "desc",
                        filters: {
                            is_primary: {
                                operator: "equal",
                                value: !0
                            },
                            premarket_change: {
                                operator: "greater",
                                value: 0
                            },
                            active_symbol: {
                                operator: "equal",
                                value: !0
                            }
                        }
                    }
                }, {
                    id: "after_hours_gainers",
                    title: c.t(null, void 0, o(126679)),
                    adjustFilter: {
                        postmarket_volume: [1]
                    },
                    content: {
                        sort_field: "postmarket_volume",
                        sort_direction: "desc",
                        filters: {
                            is_primary: {
                                operator: "equal",
                                value: !0
                            },
                            postmarket_volume: {
                                operator: "greater",
                                value: 0
                            },
                            active_symbol: {
                                operator: "equal",
                                value: !0
                            }
                        }
                    }
                }];

            function _t(e) {
                pt.forEach((t => {
                    if (t.disabled = !1, t.id in d.marketFilterValues.america)
                        for (const e in d.marketFilterValues.america[t.id]) t.content.filters[e] = d.marketFilterValues.america[t.id][e];
                    (t => {
                        ["forex", "crypto"].includes(e[0]) || e.includes("brazil") ? delete t.content.filters.name : t.content.filters.name = ["common", "dr", "etf"], 1 === e.length && "america" === e[0] ? t.content.filters.exchange = ["NYSE", "NASDAQ", "AMEX"] : delete t.content.filters.exchange, "general" === t.id && ("crypto" === e[0] && (t.content.sort_field = "24h_vol|5",
                            t.content.sort_direction = "desc"), "forex" === e[0] && (t.content.sort_field = "name", t.content.sort_direction = "asc"));
                        const o = [];
                        for (const n of e) {
                            const e = d.marketFilterValues[n];
                            if (e && t.id in e)
                                if (t.disabled || null !== e[t.id]) {
                                    const n = e[t.id];
                                    for (const e in n) {
                                        const s = n[e];
                                        if (null === s || (i = t.content.filters[e], r = s, Object.prototype.toString.call(i) !== Object.prototype.toString.call(r))) delete t.content.filters[e], o.push(e);
                                        else if (!o.includes(e) && e in t.content.filters) {
                                            const i = ht(t.content.filters[e], s);
                                            i ? t.content.filters[e] = i : (delete t.content.filters[e], o.push(e))
                                        } else t.content.filters[e] = s
                                    }
                                } else t.disabled = !0
                        }
                        var i, r;
                        "forex" === e[0] ? ut.forex[t.id] && (t.title = ut.forex[t.id]) : ut.default[t.id] && (t.title = ut.default[t.id])
                    })(t), "general" === t.id && (t.disabled = "forex" !== e[0] && "crypto" !== e[0]), ["pre_market_gainers", "after_hours_gainers"].includes(t.id) && (t.disabled = !0)
                }))
            }
            const gt = JSON.parse('["BAHRAIN","BELEX","BME","BMV","BIVA","BSSE","BVB","BVL","BVCV","BVMT","DFM","DSEBD","EURONEXT_AMS","EURONEXT_BRU","EURONEXT_LIS","EURONEXT_PAR","EURONEXTAMS","EURONEXTBRU","EURONEXTLIS","EURONEXTPAR","OSE","OSL","FSE","HKEX","HOSE","ICESG","LUXSE","MOEX","MYX","NAG","NASDAQDUBAI","NSE","NSENG","NSEKE","NGM","NZX","PSE","PSX","SAPSE","SET","SGX","SZSE","SHFE","TADAWUL","TSE","TWSE","FTSEST","LME"]');
            const mt = ["artechecom", "cincodias", "copees", "elconfidencial", "elespanolcom", "elnacionalD", "elpaisfinanciero", "elperiodicodelaenergia", "epe", "finanzasD", "lainformacioncom"],
                vt = ["bovespa", "forbescombr", "genialinvestimentos", "marcopolocombr", "moneytimescombr", "NoticiasagricolaD", "poder360", "seudinheiro", "spacemoneycombr", "tradersclubbrasil", "tradersclubbrasilD", "vocesaabrilcombr", "xpicombr"];
            var ft = o(942634);
            o(838280);
            var yt = o(61499),
                bt = o(429874);
            bt.themes[yt.StdTheme.Light].label(), yt.StdTheme.Light, bt.themes[yt.StdTheme.Dark].label(), yt.StdTheme.Dark;
            var wt, St = o(650151);
            ! function(e) {
                e.BaseCurrencyLogoId = "base_currency_logoid", e.Change = "change", e.Country = "country", e.CurrencyLogoId = "currency_logoid", e.Description = "description", e.Industry = "industry", e.LogoId = "logoid", e.Name = "name", e.Performance1M = "Perf.1M", e.Performance3M = "Perf.3M", e.Performance6M = "Perf.6M", e.PerformanceW = "Perf.W", e.PerformanceY = "Perf.Y", e.PerformanceYTD = "Perf.YTD", e.Sector = "sector"
            }(wt || (wt = {}));
            const Ct = [{
                    id: "overview",
                    title: c.t(null, void 0, o(15797)),
                    screenerTypeContent: {
                        stock: {
                            stock: [wt.LogoId, wt.Name, "close", "change", "change_abs", "Recommend.All", "volume", "Value.Traded", "market_cap_basic", "price_earnings_ttm", "earnings_per_share_basic_ttm", "number_of_employees", wt.Sector, "description", "type"],
                            _sector: [wt.LogoId, wt.Name, "close", "change", "change_abs", "Recommend.All", "volume", "Value.Traded", "market_cap_basic", "price_earnings_ttm", "earnings_per_share_basic_ttm", "number_of_employees", "industry", "description", "type"]
                        },
                        forex: [wt.BaseCurrencyLogoId, wt.CurrencyLogoId, wt.Name, "close", "change", "change_abs", "bid", "ask", "high", "low", "Recommend.All", "description", "type"],
                        crypto: [wt.BaseCurrencyLogoId, wt.CurrencyLogoId, wt.Name, "close", "change", "change_abs", "high", "low", "volume", "24h_vol|5", "24h_vol_change|5", "Recommend.All", "exchange", "description"],
                        crypto_mkt: [wt.BaseCurrencyLogoId, wt.Sector, "market_cap_calc", "market_cap_diluted_calc", "close", "total_shares_outstanding", "total_shares_diluted", "total_value_traded", "change"],
                        crypto_mkt_by_symbol: [wt.CurrencyLogoId, wt.Name, "close", "change", "change_abs", "high", "low", "volume", "Recommend.All", "exchange", "description"],
                        crypto_by_symbol: [wt.CurrencyLogoId, wt.Name, "exchange", "close", "change", "change_abs", "high", "low", "volume", "Recommend.All", "description"],
                        futures: [wt.LogoId, wt.Name, "close", "change", "change_abs", "high", "low", "Recommend.All", "description"],
                        continuous_futures: [wt.LogoId, wt.Name, "expiration", "close", "change", "change_abs", "high", "low", "Recommend.All", "description"],
                        cfd: [wt.LogoId, wt.Name, "close", "change", "change_abs", "high", "low", "Recommend.All", "description"],
                        sector: ["description", "market_cap_basic", "dividend_yield_recent", "change", "volume", "elements", "basic_elements"],
                        industry: ["description", "market_cap_basic", "dividend_yield_recent", "change", "volume", wt.Sector, "elements"],
                        currency: [wt.LogoId, wt.Name, "close", "change", "change_abs", "high", "low", "Recommend.All", "description"],
                        bonds: [wt.LogoId, wt.Name, "coupon", "maturity_date", "close", "change", "change_abs", "high", "low", "Recommend.All", "description"],
                        pre_market: [wt.LogoId, wt.Name, "premarket_close", "premarket_change_abs", "premarket_change", "premarket_volume", "premarket_gap", "close", "change", "volume", "market_cap_basic"],
                        post_market: [wt.LogoId, wt.Name, "postmarket_close", "postmarket_change_abs", "postmarket_change", "postmarket_volume", "close", "change", "volume", "market_cap_basic"]
                    },
                    content: [],
                    screeners: [dt.Stock, dt.StockCompact, dt.Forex, dt.Futures, dt.ContinuousFutures, dt.Cfd, dt.Crypto, dt.CryptoMkt, dt.CryptoMktBySymbol, dt.CryptoBySymbol, dt.Sector, dt.Industry, dt.Currency, dt.Bonds, dt.PreMarket, dt.PostMarket],
                    showOnWidget: !0
                }, {
                    id: "performance",
                    title: c.t(null, void 0, o(970074)),
                    screenerTypeContent: {
                        stock: [wt.LogoId, wt.Name, "description", "type", "change.1", "change.5", "change.15", "change.60", "change.240", "change", "change.1W", "change.1M", "Perf.3M", "Perf.6M", "Perf.YTD", "Perf.Y", "Perf.5Y", "Perf.All", "beta_1_year", "Volatility.D"],
                        futures: [wt.LogoId, wt.Name, "description", "type", "change", "change.1W", "change.1M", "Perf.3M", "Perf.6M", "Perf.YTD", "Perf.Y", "Volatility.D"],
                        continuous_futures: [wt.LogoId, wt.Name, "description", "type", "change", "change.1W", "change.1M", "Perf.3M", "Perf.6M", "Perf.YTD", "Perf.Y", "Volatility.D"],
                        forex: [wt.BaseCurrencyLogoId, wt.CurrencyLogoId, wt.Name, "description", "type", "change", "change.1W", "change.1M", "Perf.3M", "Perf.6M", "Perf.YTD", "Perf.Y", "Perf.5Y", "Perf.All", "Volatility.D"],
                        crypto: [wt.BaseCurrencyLogoId, wt.CurrencyLogoId, wt.Name, "description", "type", "change", "change.1W", "change.1M", "Perf.3M", "Perf.6M", "Perf.YTD", "Perf.Y", "Perf.5Y", "Perf.All", "Volatility.D"],
                        crypto_mkt: [wt.BaseCurrencyLogoId, wt.Sector, "description", "type", "change", "change.1W", "change.1M", "Perf.3M", "Perf.6M", "Perf.YTD", "Perf.Y", "Volatility.D"],
                        crypto_mkt_by_symbol: [wt.CurrencyLogoId, wt.Name, "description", "type", "change", "change.1W", "change.1M", "Perf.3M", "Perf.6M", "Perf.YTD", "Perf.Y", "Volatility.D"],
                        crypto_by_symbol: [wt.CurrencyLogoId, wt.Name, "exchange", "description", "type", "change", "change.1W", "change.1M", "Perf.3M", "Perf.6M", "Perf.YTD", "Perf.Y", "Volatility.D"],
                        cfd: [wt.LogoId, wt.Name, "description", "type", "change", "change.1W", "change.1M", "Perf.3M", "Perf.6M", "Perf.YTD", "Perf.Y", "Volatility.D"],
                        sector: ["description", "change", "change.1W", "change.1M", "Perf.3M", "Perf.6M", "Perf.YTD", "Perf.Y"],
                        industry: ["description", "change", "change.1W", "change.1M", "Perf.3M", "Perf.6M", "Perf.YTD", "Perf.Y"],
                        currency: [wt.LogoId, wt.Name, "description", "type", "change", "change.1W", "change.1M", "Perf.3M", "Perf.6M", "Perf.YTD", "Perf.Y", "Volatility.D"],
                        bonds: [wt.LogoId, wt.Name, "description", "type", "change", "change.1W", "change.1M", "Perf.3M", "Perf.6M", "Perf.YTD", "Perf.Y", "Volatility.D"]
                    },
                    content: [],
                    screeners: [dt.Stock, dt.StockCompact, dt.Forex, dt.Futures, dt.ContinuousFutures, dt.Cfd, dt.Crypto, dt.CryptoMkt, dt.CryptoBySymbol, dt.CryptoMktBySymbol, dt.Sector, dt.Industry, dt.Currency, dt.Bonds, dt.PreMarket, dt.PostMarket],
                    showOnWidget: !0
                }, {
                    id: "extended_hours",
                    title: c.t(null, void 0, o(832349)),
                    content: [wt.LogoId, wt.Name, "description", "premarket_close", "premarket_change", "premarket_gap", "premarket_volume", "close", "change", "volume", "postmarket_close", "postmarket_change", "postmarket_volume", "Recommend.All", "market_cap_basic"],
                    screeners: [dt.Stock],
                    showOnWidget: !1
                }, {
                    id: "valuation",
                    title: c.t(null, void 0, o(201884)),
                    content: [wt.LogoId, wt.Name, "description", "type", "close", "market_cap_basic", "price_earnings_ttm", "price_revenue_ttm", "earnings_per_share_basic_ttm", "last_annual_eps", "enterprise_value_ebitda_ttm", "enterprise_value_fq", "total_shares_outstanding_fundamental"],
                    screeners: [dt.Stock, dt.StockCompact, dt.PreMarket, dt.PostMarket],
                    showOnWidget: !0
                }, {
                    id: "dividends",
                    title: c.t(null, void 0, o(137260)),
                    content: [wt.LogoId, wt.Name, "description", "type", "close", "dividend_yield_recent", "dividends_paid", "dps_common_stock_prim_issue_fy"],
                    screeners: [dt.Stock, dt.StockCompact, dt.PreMarket, dt.PostMarket],
                    showOnWidget: !0
                }, {
                    id: "margins",
                    title: c.t(null, {
                        context: "screener"
                    }, o(113262)),
                    content: [wt.LogoId, wt.Name, "description", "type", "gross_margin", "operating_margin", "pre_tax_margin", "after_tax_margin"],
                    screeners: [dt.Stock, dt.StockCompact, dt.PreMarket, dt.PostMarket],
                    showOnWidget: !0
                }, {
                    id: "income_statement",
                    title: c.t(null, void 0, o(558462)),
                    content: [wt.LogoId, wt.Name, "description", "type", "basic_eps_net_income", "earnings_per_share_basic_ttm", "earnings_per_share_diluted_ttm", "ebitda", "gross_profit_fq", "gross_profit", "total_revenue", "last_annual_eps", "last_annual_revenue", "net_income"],
                    screeners: [dt.Stock, dt.StockCompact, dt.PreMarket, dt.PostMarket],
                    showOnWidget: !0
                }, {
                    id: "balance_sheet",
                    title: c.t(null, void 0, o(902524)),
                    content: [wt.LogoId, wt.Name, "description", "type", "current_ratio", "debt_to_equity", "net_debt", "quick_ratio", "total_assets", "total_debt", "total_current_assets"],
                    screeners: [dt.Stock, dt.StockCompact, dt.PreMarket, dt.PostMarket],
                    showOnWidget: !0
                }, {
                    id: "oscillators",
                    title: c.t(null, void 0, o(749128)),
                    screenerTypeContent: {
                        stock: [wt.LogoId, wt.Name, "Recommend.Other", "ADX", "AO", "ATR", "CCI20", "MACD.macd", "MACD.signal", "Mom", "RSI", "Stoch.K", "Stoch.D", "description", "type"],
                        forex: [wt.BaseCurrencyLogoId, wt.CurrencyLogoId, wt.Name, "Recommend.Other", "ADX", "AO", "ATR", "CCI20", "MACD.macd", "MACD.signal", "Mom", "RSI", "Stoch.K", "Stoch.D", "description", "type"],
                        futures: [wt.LogoId, wt.Name, "Recommend.Other", "ADX", "AO", "ATR", "CCI20", "MACD.macd", "MACD.signal", "Mom", "RSI", "Stoch.K", "Stoch.D", "description", "type"],
                        continuous_futures: [wt.LogoId, wt.Name, "Recommend.Other", "ADX", "AO", "ATR", "CCI20", "MACD.macd", "MACD.signal", "Mom", "RSI", "Stoch.K", "Stoch.D", "description", "type"],
                        crypto: [wt.BaseCurrencyLogoId, wt.CurrencyLogoId, wt.Name, "Recommend.Other", "ADX", "AO", "ATR", "CCI20", "MACD.macd", "MACD.signal", "Mom", "RSI", "Stoch.K", "Stoch.D", "description", "type"],
                        crypto_mkt: [wt.BaseCurrencyLogoId, wt.Sector, "Recommend.Other", "ADX", "AO", "ATR", "CCI20", "MACD.macd", "MACD.signal", "Mom", "RSI", "Stoch.K", "Stoch.D", "description", "type"],
                        crypto_mkt_by_symbol: [wt.CurrencyLogoId, wt.Name, "Recommend.Other", "ADX", "AO", "ATR", "CCI20", "MACD.macd", "MACD.signal", "Mom", "RSI", "Stoch.K", "Stoch.D", "description", "type"],
                        crypto_by_symbol: [wt.CurrencyLogoId, wt.Name, "exchange", "Recommend.Other", "ADX", "AO", "ATR", "CCI20", "MACD.macd", "MACD.signal", "Mom", "RSI", "Stoch.K", "Stoch.D", "description", "type"],
                        cfd: [wt.LogoId, wt.Name, "Recommend.Other", "ADX", "AO", "ATR", "CCI20", "MACD.macd", "MACD.signal", "Mom", "RSI", "Stoch.K", "Stoch.D", "description", "type"],
                        currency: [wt.LogoId, wt.Name, "Recommend.Other", "ADX", "AO", "ATR", "CCI20", "MACD.macd", "MACD.signal", "Mom", "RSI", "Stoch.K", "Stoch.D", "description", "type"],
                        bonds: [wt.LogoId, wt.Name, "Recommend.Other", "ADX", "AO", "ATR", "CCI20", "MACD.macd", "MACD.signal", "Mom", "RSI", "Stoch.K", "Stoch.D", "description", "type"]
                    },
                    content: [],
                    screeners: [dt.Stock, dt.StockCompact, dt.Forex, dt.Futures, dt.ContinuousFutures, dt.Cfd, dt.Crypto, dt.CryptoMkt, dt.CryptoMktBySymbol, dt.CryptoBySymbol, dt.Currency, dt.Bonds, dt.PreMarket, dt.PostMarket],
                    showOnWidget: !0
                }, {
                    id: "moving_averages",
                    title: c.t(null, void 0, o(61980)),
                    screenerTypeContent: {
                        stock: [wt.LogoId, wt.Name, "Recommend.MA", "close", "SMA20", "SMA50", "SMA200", "BB.upper", "BB.lower", "description", "type"],
                        forex: [wt.BaseCurrencyLogoId, wt.CurrencyLogoId, wt.Name, "Recommend.MA", "close", "SMA20", "SMA50", "SMA200", "BB.upper", "BB.lower", "description", "type"],
                        futures: [wt.LogoId, wt.Name, "Recommend.MA", "close", "SMA20", "SMA50", "SMA200", "BB.upper", "BB.lower", "description", "type"],
                        continuous_futures: [wt.LogoId, wt.Name, "Recommend.MA", "close", "SMA20", "SMA50", "SMA200", "BB.upper", "BB.lower", "description", "type"],
                        crypto: [wt.BaseCurrencyLogoId, wt.CurrencyLogoId, wt.Name, "Recommend.MA", "close", "SMA20", "SMA50", "SMA200", "BB.upper", "BB.lower", "description", "type"],
                        crypto_mkt: [wt.BaseCurrencyLogoId, wt.Sector, "Recommend.MA", "close", "SMA20", "SMA50", "SMA200", "BB.upper", "BB.lower", "description", "type"],
                        crypto_mkt_by_symbol: [wt.CurrencyLogoId, wt.Name, "Recommend.MA", "close", "SMA20", "SMA50", "SMA200", "BB.upper", "BB.lower", "description", "type"],
                        crypto_by_symbol: [wt.CurrencyLogoId, wt.Name, "exchange", "Recommend.MA", "close", "SMA20", "SMA50", "SMA200", "BB.upper", "BB.lower", "description", "type"],
                        cfd: [wt.LogoId, wt.Name, "Recommend.MA", "close", "SMA20", "SMA50", "SMA200", "BB.upper", "BB.lower", "description", "type"],
                        currency: [wt.LogoId, wt.Name, "Recommend.MA", "close", "SMA20", "SMA50", "SMA200", "BB.upper", "BB.lower", "description", "type"],
                        bonds: [wt.LogoId, wt.Name, "Recommend.MA", "close", "SMA20", "SMA50", "SMA200", "BB.upper", "BB.lower", "description", "type"]
                    },
                    content: [],
                    screeners: [dt.Stock, dt.StockCompact, dt.Forex, dt.Futures, dt.ContinuousFutures, dt.Cfd, dt.Crypto, dt.CryptoMkt, dt.CryptoMktBySymbol, dt.CryptoBySymbol, dt.Currency, dt.Bonds, dt.PreMarket, dt.PostMarket],
                    showOnWidget: !0
                }],
                kt = [wt.LogoId, "name", "market_cap_basic", "earnings_per_share_forecast_next_fq", "earnings_per_share_fq", "eps_surprise_fq", "eps_surprise_percent_fq", "revenue_forecast_next_fq", "revenue_fq", "earnings_release_next_date", "earnings_release_next_calendar_date", "earnings_release_next_time", "description", "type"];

            function xt(e) {
                const t = {
                    screenerType: dt.Stock,
                    markets: ["stock"],
                    isCompact: !1,
                    subtype: "",
                    isOnWidget: !1
                };
                let o = Ct;
                const i = Object.assign(t, e),
                    {
                        screenerType: r,
                        isCompact: n,
                        subtype: s,
                        isOnWidget: l
                    } = i,
                    {
                        markets: a
                    } = i;
                return o = o.filter((e => {
                    if (r === dt.Stock) {
                        const t = n ? `${r}_compact` : r;
                        return e.screeners.includes(t)
                    }
                    return e.screeners.includes(r)
                })), l && (o = o.filter((e => !0 === e.showOnWidget))), o.forEach((e => {
                    if (void 0 !== e.screenerTypeContent) {
                        const o = e.screenerTypeContent[(0, St.ensureDefined)(r)] || e.screenerTypeContent.stock;
                        if (t = o, Array.isArray(t)) e.content = (0, St.ensureDefined)(o);
                        else {
                            const t = Object.keys(o),
                                i = a.reduce(((e, t) => (e.push(`${(0,St.ensureDefined)(t)}_${(0,St.ensureDefined)(s)}`), e.push(`${(0,St.ensureDefined)(s)}`), e.push((0, St.ensureDefined)(t)), e)), []),
                                r = function(e, t) {
                                    for (const o of e)
                                        if (t.includes(o)) return o;
                                    return "stock"
                                }([...new Set(i)], t);
                            e.content = o[r]
                        }
                    }
                    var t;
                    l && (e.content = e.content.filter((e => "description" !== e)))
                })), o
            }
            const Ft = "america";

            function Tt(e) {
                const t = Mt((0, d.getMarketsByScreenerType)("stock"), e),
                    o = Mt((0, d.getMarketsByScreenerType)("forex"), e),
                    i = Mt((0, d.getMarketsByScreenerType)("crypto"), e);
                return t.concat(o).concat(i)
            }

            function Mt(e, t) {
                const o = function(e) {
                    const t = gt.slice();
                    return e && vt.includes(e) && t.splice(t.indexOf("BMFBOVESPA"), 1), "ambito" === e && t.splice(t.indexOf("BCBA"), 1), "hegnarno" === e && t.splice(t.indexOf("OSL"), 1), e && mt.includes(e) && t.splice(t.indexOf("BME"), 1), e && ["riyadhcapitalD", "riyadhcapitalRT"].includes(e) && (t.splice(t.indexOf("TADAWUL"), 1), t.splice(t.indexOf("DFM"), 1)), "NGX" === e && t.splice(t.indexOf("NSENG"), 1), t
                }(t);
                return Object.keys(e).filter((t => {
                    if (["forex", "crypto"].includes(t)) return !0;
                    const i = e[t];
                    return !!i && (i.stocks = i.stocks.filter((e => -1 === o.indexOf(e))), 0 !== i.stocks.length)
                })).map((t => ({
                    title: e[t] ? e[t].title + (e[t].stocks.length ? ` (${At(t,e)})` : "") : t,
                    value: t
                }))).sort(((e, t) => e.value === Ft ? -1 : t.value === Ft || e.title > t.title ? 1 : -1))
            }

            function At(e, t) {
                let o = [...t[e].stocks];
                const i = (0, d.getUnavailableWidgetExchangesMap)()[e];
                return i && (o = o.filter((e => !i.includes(e)))), o.join(", ")
            }

            function Dt(e) {
                return (0, d.getUnavailableWidgetMarkets)().includes(e)
            }
            var Et = o(120762),
                $t = o(439563);
            var It = o(764829),
                Pt = (o(281786), o(117192), o(13698), o(649779), o(224427), o(672913), o(386727), o(713710), o(421294), o(206155), o(728277), o(693558), o(478504), o(959349), o(280356), o(724088), o(305912), o(997748), o(135334), o(614062), o(570354), o(410058), o(930203)),
                Bt = o(713438);
            var Rt, Lt = o(290484),
                Ot = o(207678),
                Wt = o(848363),
                Nt = o(552279),
                Vt = (o(637152), o(862101), o(620853), o(927094)),
                jt = (o(907356), o(590508)),
                qt = o(779923),
                Ut = o(406103),
                Ht = o(746849),
                zt = o(797914);
            ! function(e) {
                e[e.None = 0] = "None", e[e.Widget = 1] = "Widget", e[e.Site = 2] = "Site"
            }(Rt || (Rt = {}));
            var Gt = o(547777),
                Kt = o(833813),
                Xt = o(881025),
                Yt = o(181952);
            class Zt {
                constructor(e) {
                    this.event = "change_timeframe", this.source = "timeframe_selector", this.location = "toolbar", this.state = "", this.value = e
                }
            }
            class Jt {
                constructor(e, t) {
                    this.event = "change_columnset", this.source = "columset_selector", this.location = "toolbar", this.state = "", this.value = (0, Yt.getColumnSetNameForSnowPlow)(t), this.source = e
                }
            }
            class Qt {
                constructor(e, t) {
                    this.event = "change_favorite_columnsets", this.source = "columnset_star_button", this.location = "toolbar", this.value = (0, Yt.getColumnSetNameForSnowPlow)(t), this.state = e
                }
            }
            class eo {
                constructor() {
                    this.event = "rename_custom_columnset", this.source = "columnset_pen_button", this.location = "toolbar", this.state = "", this.value = ""
                }
            }
            class to {
                constructor(e) {
                    this.event = "change_filterset", this.source = "filterset_selector", this.location = "toolbar", this.state = "", this.value = (0, Yt.getFilterSetNameForSnowPlow)(e)
                }
            }
            class oo {
                constructor() {
                    this.event = "rename_custom_filterset", this.source = "filterset_pen_button", this.location = "toolbar", this.state = "", this.value = ""
                }
            }
            var io = o(753906);
            class ro {
                constructor(e, t, o) {
                    this.event = "change_columns", this.source = "column_selector", this.location = "header_fields_popup" === e ? "header" : "toolbar", this.state = t ? "added" : "removed", this.value = o
                }
            }
            class no {
                constructor(e) {
                    this.event = "column_move", this.source = "column_header", this.location = "header", this.state = io.UserActionState.Drag, this.value = e
                }
            }
            class so {
                constructor() {
                    this.event = "refresh_screener_data", this.source = "refresh_button", this.location = "toolbar", this.state = "", this.value = ""
                }
            }
            class lo {
                constructor(e) {
                    this.event = "change_refresh_interval", this.source = "refresh_interval_selector", this.location = "toolbar", this.state = "", this.value = (0, Yt.getSnowPlowRefreshInterval)(e)
                }
            }
            var ao = o(486393);
            const co = o(338619).getLogger("Screener.Popups");
            class ho {
                constructor(e, t, o) {
                    this._model = e, this._view = t, this._bridge = o, this._markets = null, this._model.fieldSetSaved.subscribe(null, (() => this._view.$fieldSetsButton.removeClass("tv-screener-toolbar__button--unsaved"))), this._model.filterSetSaved.subscribe(null, (() => this._view.$filterSetsButton.removeClass("tv-screener-toolbar__button--unsaved"))),
                        this._fieldsPopupCache = {}
                }
                showPromptDialog(e, t) {
                    return new Promise((i => {
                        (0, qt.showRename)({
                            title: e.title,
                            text: e.label,
                            initValue: t,
                            mainButtonText: c.t(null, void 0, o(664e3)),
                            maxLength: 128,
                            onRename: ({
                                newValue: e,
                                dialogClose: t
                            }) => {
                                i(e), t()
                            },
                            onClose: i
                        })
                    }))
                }
                showMaintenanceDialog() {
                    (0, Vt.showNoticeDialog)({
                        type: "modal",
                        title: c.t(null, void 0, o(900543)),
                        content: c.t(null, void 0, o(673937))
                    })
                }
                showConfirmDialog(e) {
                    return new Promise((t => {
                        (0, qt.showConfirm)({
                            text: e,
                            onConfirm: ({
                                dialogClose: e
                            }) => {
                                t(!0), e()
                            },
                            onClose: () => t(!1)
                        })
                    }))
                }
                showNotice(e, t) {
                    (0, Vt.showNoticeDialog)({
                        content: e,
                        title: t
                    })
                }
                setFieldsPopup(e, t, i) {
                    e.addClass("tv-dropdown-behavior__button");
                    const r = ao(`<div class="${t||""}">`);
                    r.insertAfter(e).append(e);
                    const n = ao('<div class="tv-dropdown__body tv-dropdown__body--over-trigger tv-dropdown-behavior__body tv-screener-fields-popup i-hidden">').appendTo(r);
                    i && n.addClass(i);
                    const s = ao('<div class="tv-screener-fields-popup__search-wrap">').appendTo(n),
                        l = ao(`<input type="text" placeholder="${c.t(null,void 0,o(574769))}" class="tv-screener-fields-popup__search-input">`).appendTo(s),
                        a = ao('<div class="tv-dropdown-behavior__scroll">').appendTo(n),
                        d = ao('<div class="tv-screener-fields-popup__items-wrap tv-dropdown-behavior__inscroll">').appendTo(a);
                    "header_fields-button" === e.attr("data-name") && d.attr({
                        "data-name": "header_fields_popup"
                    });
                    const h = ao('<div class="tv-screener-fields-popup__item tv-screener-fields-popup__item--no-matches js-hidden">No matches</div>').appendTo(n);
                    l.on("change input", (e => {
                        const t = l.val().trim().toLowerCase();
                        t ? d.find(".js-fields-item").each((function() {
                            const e = ao(this);
                            e.toggleClass("js-hidden", !~e.text().toLowerCase().indexOf(t))
                        })) : d.find(".js-fields-item").removeClass("js-hidden"), h.toggleClass("js-hidden", !!d.find(".js-fields-item:not(.js-hidden)").size()), r.tvDropdown("updateScroll")
                    })), r.on("beforeOpenMenu", (() => {
                        l.val(""), d.find(".js-fields-item").removeClass("js-hidden"), h.addClass("js-hidden"), this.resetFieldsPopup(d), a.css("maxHeight", ao(window).height() - e.offset().top + ao(window).scrollTop() - e.outerHeight() - s.outerHeight() - 20)
                    })).on("afterOpenMenu", (() => {
                        l.focus()
                    })).tvDropdown({
                        scroll: !0,
                        noAnimation: !0
                    }), setTimeout((() => this.resetFieldsPopup(d)), 0)
                }
                resetFieldsPopup(e) {
                    e.empty();
                    const t = e => {
                            if (e in this._fieldsPopupCache) {
                                const t = this._fieldsPopupCache[e];
                                return t.checkbox.prop("checked", Ue[e].checked), t.item
                            }
                            const t = ao('<div class="tv-dropdown-behavior__item">');
                            ao(`<label data-field="${e}" class="tv-control-select__option-wrap tv-screener-fields-popup__item js-fields-item">\n\t\t\t\t<input type="checkbox" name="${e}" class="js-field-checkbox"${Ue[e].checked?" checked":""}>\n\t\t\t\t<span class="tv-control-checkbox__label">${(0,O.triesTranslateScreenerData)(Ue[e].title)}</span>\n\t\t\t</label>`).appendTo(t);
                            const o = t.find(".js-field-checkbox").tvControlCheckbox();
                            return this._fieldsPopupCache[e] = {
                                item: t,
                                checkbox: o
                            }, t
                        },
                        o = this._view.sortedFields.filter(at).sort(((e, t) => Ue[e].title.localeCompare(Ue[t].title, void 0, {
                            ignorePunctuation: !0,
                            numeric: !0
                        }))),
                        i = o.filter((e => Ue[e].checked)),
                        r = o.filter((e => !Ue[e].checked));
                    i.concat(r).forEach((o => {
                        "is_primary" !== o && t(o).appendTo(e)
                    })), e.find(".js-field-checkbox").off("change"), e.find(".js-field-checkbox").on("change", (t => {
                        const o = ao(t.currentTarget),
                            i = o.attr("name");
                        Ue[i].checked = o.prop("checked");
                        const r = e.attr("data-name"),
                            n = Ue[i].checked;
                        (0, Yt.sendSnowPlowData)(new ro(r, n, i));
                        const s = Ue[i].checked ? this._view._table.fieldsOrder.concat(i) : this._view._table.fieldsOrder.filter((e => e !== i));
                        this._model.preventPrevScanRequest(), this._model.fieldSetChanged.fire(s.filter((e => Ue[e] && !0 !== Ue[e].disabled && !0 !== Ue[e].hiddenColumn))), this._model.update(), this._view.$fieldSetsButton.toggleClass("tv-screener-toolbar__button--unsaved", this._model.isFieldSetChanged())
                    }))
                }
                setPopup(e, t, o) {
                    e.addClass("tv-dropdown-behavior__button");
                    const i = ao(`<div class="${t||""}">`);
                    i.insertAfter(e).append(e);
                    const r = ao('<div class="tv-dropdown__body tv-dropdown__body--over-trigger tv-dropdown-behavior__body tv-screener-popup i-hidden">').appendTo(i);
                    o && r.addClass(o);
                    const n = ao('<div class="tv-dropdown-behavior__scroll js-container">').appendTo(r);
                    return ao('<div class="tv-screener-popup__items-wrap tv-dropdown-behavior__inscroll js-content">').appendTo(n), i.on("beforeOpenMenu", (() => {
                        n.css("maxHeight", ao(window).height() - e.offset().top + ao(window).scrollTop() - 45)
                    })).tvDropdown({
                        scroll: !0,
                        noAnimation: !0
                    })
                }
                setFieldSetsPopup(e) {
                    const t = this.setPopup(e, "tv-screener-toolbar__button-wrap");
                    t.tvDropdown("disable");
                    const i = t.find(".js-content");
                    i.on("click", ".js-set", (e => {
                        const o = ao(e.currentTarget);
                        i.find(".js-item-active").removeClass("tv-screener-popup__item--active js-item-active"), o.addClass("tv-screener-popup__item--active js-item-active");
                        const r = o.attr("data-set");
                        this._model.applyFieldSet(r), this._view.adjustToolbarWidth(), t.tvDropdown("close"), (0, Yt.sendSnowPlowData)(new Jt("columnset_selector", r))
                    })).on("click", ".js-set-delete", (e => {
                        const i = ao(e.currentTarget),
                            r = this._model.getFieldSetById(i.parent().attr("data-set")),
                            n = this._model.currentFieldSetId() === r.id;
                        this.showConfirmDialog(c.t(null, void 0, o(838537)).format({
                            name: r.title
                        })).then((e => {
                            e && this._model.saveFieldSet({
                                id: r.id,
                                delete: 1
                            }, "Delete field set").then((() => {
                                this._model.removeFavoriteFieldSet(r.id), n && this._model.applyFieldSet(this._model.defaultFieldSets[0].id, null, !0), this._view.adjustToolbarWidth()
                            }))
                        })), t.tvDropdown("close"), e.stopPropagation()
                    })).on("click", ".js-set-star", (e => {
                        const t = ao(e.currentTarget),
                            o = t.parent().attr("data-set");
                        t.parent().toggleClass("tv-screener-popup__item--favorite"), this._model.addFavoriteFieldSet(o), e.stopPropagation(), (0, Yt.sendSnowPlowData)(new Qt("added", o))
                    })).on("click", ".js-set-star-active", (e => {
                        const t = ao(e.currentTarget),
                            o = t.parent().attr("data-set");
                        t.parent().toggleClass("tv-screener-popup__item--favorite"), this._model.removeFavoriteFieldSet(o), e.stopPropagation(), (0, Yt.sendSnowPlowData)(new Qt("removed", o))
                    })).on("click", ".js-set-rename", (e => {
                        const i = ao(e.currentTarget).parent().attr("data-set"),
                            r = this._model.getFieldSetById(i);
                        this.showPromptDialog({
                            title: c.t(null, void 0, o(312286)),
                            label: c.t(null, void 0, o(576904))
                        }, r.title).then((e => {
                            e && e !== r.title && (this._model.saveFieldSet({
                                id: r.id,
                                title: e
                            }, "Rename field set"), this._view.$fieldSetsButton.removeClass("tv-screener-toolbar__button--active js-no-pointer-events"), this._model.currentFieldSetId() == r.id && this._view.$fieldSetsButton.text(e), (0, Yt.sendSnowPlowData)(new eo))
                        })), t.tvDropdown("close"), e.stopPropagation()
                    })).on("click", ".js-save", (e => {
                        this.confirmAndSaveCurrentFieldSet().then((e => {
                            const t = this._model.getFieldSetById(e.id);
                            this._model.settingsSaver.setValue(this._model.settingKey + ".fieldSetId", e.id, {
                                forceFlush: !0
                            }), this._view.$fieldSetsButton.text(t.title);
                            const o = this.$favoritesBar && this.$favoritesBar.find(`.js-favorite-item[data-set=${e.id}]`) || ao();
                            o.size() && o.removeClass("tv-screener-toolbar__favorites-item--active")
                        })).catch((e => {
                            e && co.logError(e)
                        })), t.tvDropdown("close")
                    })), this._model.loadingComplete.subscribe(null, (() => {
                        t.tvDropdown("enable")
                    }), !0), t.on("beforeOpenMenu", (() => this.setFieldSetsPopupContent(i)))
                }
                setFieldSetsPopupContent(e) {
                    e.empty(), this._bridge.onWidget || ao(`<div class="tv-control-select__option-wrap tv-screener-popup__item tv-screener-popup__item--save js-save">${(0,Gt.appendEllipsis)(c.t(null,void 0,o(819213)))}</div>`).prepend(ao(o(470088)).attr({
                        class: "tv-screener-toolbar__button-icon",
                        width: "20",
                        height: "14",
                        style: "top: -2px; margin-right: 10px;"
                    })).appendTo(e);
                    const t = ao('<div class="tv-screener-popup__item--presets"></div>').appendTo(e);
                    this._model.settings.fieldSets.forEach((e => {
                        const i = ao(`<div class="tv-dropdown-behavior__item">\n\t\t\t\t<div data-set="${e.id}"  class="tv-control-select__option-wrap tv-screener-popup__item tv-screener-popup__item--preset js-set" title="${TradingView.clean(e.title)}">\n\t\t\t\t\t<span class="js-field-set-name"></span>\n\t\t\t\t\t<span class="tv-screener-popup__item-delete js-set-delete" title="${c.t(null,void 0,o(14180))}">\n\t\t\t\t\t\t${o(711732)}\n\t\t\t\t\t</span>\n\t\t\t\t\t<span class="tv-screener-popup__item-rename js-set-rename" title="${c.t(null,void 0,o(606321))}">\n\t\t\t\t\t\t${o(663719)}\n\t\t\t\t\t</span>\n\t\t\t\t\t<span class="tv-screener-popup__item-star-active js-set-star-active" title="${c.t(null,void 0,o(685106))}">\n\t\t\t\t\t\t${o(372665)}\n\t\t\t\t\t</span>\n\t\t\t\t\t<span class="tv-screener-popup__item-star js-set-star" title="${c.t(null,void 0,o(869207))}">\n\t\t\t\t\t\t${o(959597)}\n\t\t\t\t\t</span>\n\t\t\t\t</div>\n\t\t\t</div>`).appendTo(t);
                        i.find(".js-field-set-name").text(uo(e.title)), i.find(".js-set").toggleClass("tv-screener-popup__item--favorite", -1 !== this._model.favoriteFieldSets.indexOf(e.id))
                    })), this._model.defaultFieldSets.forEach((t => {
                        ao(`<div class="tv-dropdown-behavior__item">\n\t\t\t\t<div data-set="${t.id}" class="tv-control-select__option-wrap tv-screener-popup__item js-set">\n\t\t\t\t\t${t.title}\n\t\t\t\t\t${this._bridge.onWidget?"":`<span class="tv-screener-popup__item-star-active js-set-star-active" title="${c.t(null,void 0,o(685106))}">\n\t\t\t\t\t\t\t${o(372665)}\n\t\t\t\t\t\t</span>\n\t\t\t\t\t\t<span class="tv-screener-popup__item-star js-set-star" title="${c.t(null,void 0,o(869207))}">\n\t\t\t\t\t\t\t${o(959597)}\n\t\t\t\t\t\t</span>`}\n\t\t\t\t</div>\n\t\t\t</div>`).appendTo(e).find(".js-set").toggleClass("tv-screener-popup__item--favorite", -1 !== this._model.favoriteFieldSets.indexOf(t.id))
                    })), e.find(`[data-set="${this._model.currentFieldSetId()}"]`).addClass("tv-screener-popup__item--active js-item-active")
                }
                confirmAndSaveCurrentFieldSet() {
                    const e = this._model.getFieldSetById(this._model.currentFieldSetId()),
                        t = this._view._table.fieldsOrder.slice(0);
                    if (!Ue.type.disabled && Ue.type.checked) {
                        const e = t.indexOf("name"); - 1 !== e && t.splice(e + 1, 0, "type")
                    }
                    if (!Ue.description.disabled && Ue.description.checked) {
                        const e = t.indexOf("name"); - 1 !== e && t.splice(e + 1, 0, "description")
                    }
                    const i = JSON.stringify(t),
                        r = e && !this._model.defaultFieldSets.find((t => t.id === e.id));
                    return new Promise(((t, n) => runOrSignIn((() => this.showPromptDialog({
                        title: c.t(null, void 0, o(819213)),
                        label: c.t(null, void 0, o(576904))
                    }, e && e.title || "").then((o => {
                        if (void 0 === o) return void n();
                        const s = {
                            title: TradingView.clean(o),
                            content: i
                        };
                        let l = "Create field set";
                        r && e.title === o && (s.id = e.id, l = "Update field set"), this._model.saveFieldSet(s, l).then(t, n)
                    }))), {
                        source: "save columnset"
                    })))
                }
                setFilterSetsPopup(e) {
                    const t = this.setPopup(e, "tv-screener-toolbar__button-wrap", "tv-dropdown__body--position_right");
                    t.tvDropdown("disable");
                    const i = t.find(".js-content"),
                        r = this._bridge.$body;

                    function n(e) {
                        if ((0, Xt.isRtl)()) e.toggleClass("tv-dropdown__body--position_right", !0);
                        else {
                            const o = t.width(),
                                i = r.find(".tv-screener-toolbar").width(),
                                n = t.position().left,
                                s = i - (o + n);
                            e.toggleClass("tv-dropdown__body--position_right", n > s)
                        }
                    }
                    i.on("click", ".js-set", (e => {
                        const r = ao(e.currentTarget);
                        i.find(".js-item-active").removeClass("tv-screener-popup__item--active js-item-active"), r.addClass("tv-screener-popup__item--active js-item-active"), this._view.$filterSetsButton.toggleClass("i-disabled", !0), new Promise((e => {
                            this._bridge.onWidget ? e() : this._model.isFilterSetChanged() ? this.showConfirmDialog(c.t(null, void 0, o(484124))).then((t => {
                                t ? this.confirmAndSaveCurrentFilterSet().then(e, (t => {
                                    t && co.logError(t), e()
                                })) : e()
                            })) : e()
                        })).then((() => {
                            const e = uo(r.attr("data-set"));
                            this._model.applyFilterSet(e), this._model.trackEvent("Apply filter set " + e), this._view.$filterSetsButton.toggleClass("i-disabled", !1), (0, Yt.sendSnowPlowData)(new to(e))
                        })), setTimeout((() => t.tvDropdown("close")), 200)
                    })).on("click", ".js-set-delete", (e => {
                        const i = ao(e.currentTarget),
                            r = this._model.getFilterSetById(i.parent().attr("data-set")),
                            n = this._model.currentFilterSetId() === r.id;
                        this.showConfirmDialog(c.t(null, void 0, o(810292)).format({
                            name: r.title
                        })).then((e => {
                            e && this._model.saveFilterSet({
                                id: r.id,
                                delete: 1
                            }, "Delete filter set").then((() => {
                                if (n) {
                                    const e = this._model.defaultFilterSets.find((e => !0 !== e.disabled)) || this._model.defaultFilterSets[0];
                                    this._model.applyFilterSet(e.id)
                                }
                            }))
                        })), t.tvDropdown("close"), e.stopPropagation()
                    })).on("click", ".js-set-rename", (e => {
                        const i = ao(e.currentTarget).parent().attr("data-set"),
                            r = this._model.getFilterSetById(i);
                        this.showPromptDialog({
                            title: c.t(null, void 0, o(709186)),
                            label: c.t(null, void 0, o(723299))
                        }, r.title).then((e => {
                            e && e !== r.title && (this._model.saveFilterSet({
                                id: r.id,
                                title: e
                            }, "Rename filter set"), this._view.$filterSetsButton.removeClass("tv-screener-toolbar__button--active js-no-pointer-events"), this._model.currentFilterSetId() == r.id && this._view.$filterSetsButtonTitle.text(e), (0, Yt.sendSnowPlowData)(new oo))
                        })), t.tvDropdown("close"), e.stopPropagation()
                    })).on("click", ".js-save", (e => {
                        this.confirmAndSaveCurrentFilterSet().then((e => {
                            void 0 !== e.id ? (this._model.settingsSaver.setValue(this._model.settingKey + ".filterSetId", e.id, {
                                forceFlush: !0
                            }), this._view.$filterSetsButtonTitle.text(this._model.getFilterSetById(e.id).title)) : co.logError("Unable to get id of created set")
                        })).catch((e => {
                            e && co.logError(e)
                        })), t.tvDropdown("close")
                    })), this.$filterSetsPopupContent = i, this._bridge.width ? (n(i.parent().parent()), this._bridge.width.subscribe((() => {
                        n(i.parent().parent())
                    }))) : ao(window).on("resize", (() => {
                        n(i.parent().parent())
                    })), this._model.loadingComplete.subscribe(null, (() => {
                        t.tvDropdown("enable")
                    }), !0), t.on("beforeOpenMenu", (() => {
                        this.setFilterSetsPopupContent()
                    }))
                }
                setFilterSetsPopupContent() {
                    const e = this.$filterSetsPopupContent;
                    e.empty(), this._bridge.onWidget || ao(`<div class="tv-control-select__option-wrap tv-screener-popup__item tv-screener-popup__item--save tv-screener-popup__item--space-left js-save">${(0,Gt.appendEllipsis)(c.t(null,void 0,o(432248)))}</div>`).prepend(ao(o(470088)).attr({
                        class: "tv-screener-toolbar__button-icon",
                        width: "20",
                        height: "14",
                        style: "top: -2px; margin-right: 10px;"
                    })).appendTo(e);
                    const t = ao('<div class="tv-screener-popup__item--presets"></div>').appendTo(e);
                    this._model.settings.filterSets.forEach((e => {
                        const i = ao(`<div class="tv-dropdown-behavior__item">\n\t\t\t\t<div data-set="${e.id}" class="tv-control-select__option-wrap tv-screener-popup__item tv-screener-popup__item--preset tv-screener-popup__item--space-left js-set">\n\t\t\t\t\t<span class="js-filter-set-name"></span>\n\t\t\t\t\t<span class="tv-screener-popup__item-rename js-set-rename" title="${c.t(null,void 0,o(606321))}">\n\t\t\t\t\t\t${o(663719)}\n\t\t\t\t\t</span>\n\t\t\t\t\t<span class="tv-screener-popup__item-delete tv-screener-popup__item-delete--right js-set-delete" title="${c.t(null,void 0,o(14180))}">\n\t\t\t\t\t\t${o(711732)}\n\t\t\t\t\t</span>\n\t\t\t\t</div>\n\t\t\t</div>`);
                        i.find(".js-filter-set-name").text(uo(e.title)), i.appendTo(t)
                    })), this._model.defaultFilterSets.forEach((t => {
                        t.disabled || ao(`<div class="tv-dropdown-behavior__item">\n\t\t\t\t<div data-set="${t.id}" class="tv-control-select__option-wrap tv-screener-popup__item tv-screener-popup__item--space-left js-set">\n\t\t\t\t\t${t.title}\n\t\t\t\t</div>\n\t\t\t</div>`).appendTo(e)
                    })), e.find(`[data-set="${this._model.currentFilterSetId()}"]`).addClass("tv-screener-popup__item--active js-item-active")
                }
                confirmAndSaveCurrentFilterSet() {
                    const e = this._model.getFilterSetById(this._model.currentFilterSetId()),
                        t = JSON.stringify(this._model.currentFilterState()),
                        i = e && !this._model.defaultFilterSets.find((t => t.id === e.id));
                    return new Promise(((r, n) => runOrSignIn((() => this.showPromptDialog({
                        title: c.t(null, void 0, o(432248)),
                        label: c.t(null, void 0, o(723299))
                    }, e.title).then((o => {
                        if (void 0 === o) return void n();
                        const s = {
                            title: TradingView.clean(o),
                            content: t
                        };
                        let l = "Create filter set";
                        i && e.title === o && (s.id = e.id, l = "Update filter set"), this._model.saveFilterSet(s, l).then(r, n)
                    }))), {
                        source: "save screen"
                    })))
                }
                setHiddenFavoritesPopup(e, t, o, i) {
                    e.addClass("tv-dropdown-behavior__button");
                    const r = ao('<div class="tv-screener-toolbar__favorites-more-wrap">');
                    r.insertAfter(e).append(e);
                    const n = ao('<div class="tv-dropdown__body tv-dropdown__body--over-trigger tv-dropdown-behavior__body tv-dropdown__body--position_right i-hidden">').appendTo(r),
                        s = ao('<div class="tv-dropdown-behavior__scroll js-container">').appendTo(n),
                        l = ao('<div class="tv-screener-popup__items-wrap tv-dropdown-behavior__inscroll js-content">').appendTo(s);
                    l.on("click", ".js-set", (e => {
                        const t = ao(e.currentTarget).attr("data-set");
                        i(t), (0, Yt.sendSnowPlowData)(new Jt("columnset_favorites_picker", t)), r.tvDropdown("close")
                    }));
                    const a = () => {
                        l.empty(), t().forEach((e => {
                            ao(`<div class="tv-dropdown-behavior__item">\n\t\t\t\t\t<div data-set="${e.id}" class="tv-control-select__option-wrap tv-screener-popup__item js-set">\n\t\t\t\t\t\t${TradingView.clean(e.title)}\n\t\t\t\t\t</div>\n\t\t\t\t</div>`).toggleClass("tv-screener-popup__item--active", o(e.id)).appendTo(l)
                        })), r.tvDropdown("updateScroll")
                    };
                    return r.on("beforeOpenMenu", (() => {
                        a(), s.css("maxHeight", ao(window).height() - e.offset().top + ao(window).scrollTop() - 45)
                    })).on("resetContent", (() => a())).on("forceClose", (() => r.tvDropdown("close"))).tvDropdown({
                        scroll: !0,
                        noAnimation: !0
                    })
                }
                setSelectPopup(e, t) {
                    const {
                        wrapClass: o,
                        buttonClass: i,
                        dropdownClass: r
                    } = e, {
                        buttonTitle: n
                    } = t, s = ao(`<div class="${o} tv-dropdown tv-dropdown--inline tv-dropdown-behavior">`), l = ao(`<div class="tv-dropdown__button tv-dropdown-behavior__button ${i}" title="${n}">`).appendTo(s), a = ao(`<div class="tv-dropdown__body tv-dropdown-behavior__body tv-dropdown__body--over-trigger tv-dropdown__body--position_right i-hidden ${r}">`).appendTo(s), c = ao('<div class="tv-dropdown-behavior__scroll js-container">').appendTo(a), d = ao('<div class="tv-dropdown-behavior__inscroll js-content">').appendTo(c);
                    return s.on("beforeOpenMenu", (() => {
                        c.css("maxHeight", ao(window).height() - l.offset().top + ao(window).scrollTop() - 45)
                    })).on("forceClose", (() => s.tvDropdown("close"))).tvDropdown({
                        scroll: !0,
                        $wrap: l,
                        $body: a,
                        noAnimation: !0
                    }), {
                        $wrap: s,
                        $button: l,
                        $dropdownBody: a,
                        $dropdownContent: d
                    }
                }
                setMarketsList(e) {
                    this._markets = e
                }
                updateRefreshIntervalsPopupContent() {
                    if (!this.$filterRefreshIntervalsPopup || !this.$filterRefreshIntervalsPopup.length) return;
                    this.$filterRefreshIntervalsPopup.empty();
                    const e = this._view.refreshIntervals;
                    for (let t = 0; t < e.length; ++t) {
                        const i = e[t];
                        let r = null;
                        if (-1 === i) r = c.t(null, void 0, o(642668));
                        else {
                            const e = i / 60 | 0;
                            r = 1 === e ? c.t(null, void 0, o(857257)) : e < 1 ? this._model.isFastRefresh ? c.t(null, void 0, o(892276)) : c.t(null, {
                                plural: "Refresh every {0} seconds",
                                count: i
                            }, o(881467)).format(i) : c.t(null, {
                                plural: "Refresh every {0} minutes",
                                count: e
                            }, o(386883)).format(e)
                        }
                        ao(`<div class="tv-dropdown-behavior__item">\n\t\t\t\t<label class="tv-control-select__option-wrap tv-screener-popup__item js-interval">\n\t\t\t\t\t<span class="tv-control-radio">\n\t\t\t\t\t\t<input type="radio" name="interval" value="${i}" class="tv-control-radio__input">\n\t\t\t\t\t\t<span class="tv-control-radio__box"></span>\n\t\t\t\t\t</span>\n\t\t\t\t\t<span class="tv-control-radio__label tv-screener-popup__refresh-interval-label">${r}</span>\n\t\t\t\t</label>\n\t\t\t</div>`).appendTo(this.$filterRefreshIntervalsPopup)
                    }
                }
                setRefreshIntervalsPopup(e) {
                    const t = this.setPopup(e, "tv-screener-toolbar__button-wrap", "tv-screener-popup__refresh-intervals");
                    e.toggleClass("js-prevent-dropdown", !window.is_authenticated), e.on("click", (() => runOrSignIn((() => {}), {
                        source: "Screener refresh mode button"
                    }))), window.loginStateChange.subscribe(null, (() => {
                        e.toggleClass("js-prevent-dropdown", !window.is_authenticated)
                    }));
                    const o = t.find(".js-content");
                    this.$filterRefreshIntervalsPopup = o, this.updateRefreshIntervalsPopupContent(), t.on("beforeOpenMenu", (() => {
                        o.find(`input[value=${this._model.refreshInterval}]`).prop("checked", !0)
                    })), o.on("click", ".js-interval", (e => {
                        e.preventDefault();
                        const i = +ao(e.currentTarget).find("input").val();
                        setTimeout((() => t.tvDropdown("close")), Pt.dur / 2), i !== this._model.refreshInterval && (this._model.isFastRefresh ? (o.find(`input[value=${i}]`).prop("checked", !0), this._model.refreshInterval = i) : (0, Nt.runOrGoPro)((() => {
                            o.find(`input[value=${i}]`).prop("checked", !0), this._model.refreshInterval = i
                        }), Kt.ProductFeaturesEnum.SCREENER_AUTO_REFRESH, {
                            feature: "screenerAutoRefresh"
                        }, {
                            value: -1 === i
                        }), (0, Yt.sendSnowPlowData)(new lo(i)))
                    }))
                }
                setSelectIntervalContent(e, t, o = (() => {})) {
                    t.empty();
                    const i = this._model.selectedIntervalId;
                    for (const e of C) ao(`<div class="tv-dropdown-behavior__item">\n\t\t\t\t<div data-interval="${e.id}" title="${e.title}" class="tv-control-select__option-wrap tv-screener-popup__item js-select-interval ${e.id===i?"tv-screener-popup__select-interval-active":""}">\n\t\t\t\t\t${e.shortTitle}\n\t\t\t\t</div>\n\t\t\t</div>`).appendTo(t);
                    e.on("afterOpenMenu", (() => {
                        t.on("click", ".js-select-interval", (i => {
                            i.preventDefault();
                            const r = this._model.selectedIntervalId;
                            let n = x(ao(i.currentTarget).data("interval"));
                            if (!n || r === n.id) return;
                            const s = this._model.eodRestriction.value();
                            (0, Nt.runOrGoPro)((() => {
                                s !== Rt.None && "1d" !== n.id ? ((0, jt.createGoProDialog)({
                                        feature: "screenerIntervalsEod"
                                    }),
                                    n = x("1d")) : (t.find(".tv-screener-popup__select-interval-active").removeClass("tv-screener-popup__select-interval-active"), t.find(`[data-interval='${n.id}']`).addClass("tv-screener-popup__select-interval-active"), o(n))
                            }), Kt.ProductFeaturesEnum.SCREENER_INTERVALS, {
                                feature: "screenerIntervals"
                            }, {
                                interval: n.id
                            }), setTimeout((() => {
                                e.tvDropdown("close"), t.off("click")
                            }), Pt.dur / 2), (0, Yt.sendSnowPlowData)(new Zt(n.id))
                        }))
                    }))
                }
            }

            function uo(e) {
                return TradingView.clean(e, !0)
            }
            var po = o(920057),
                _o = o(650279);
            o(463611), o(700959);
            class go {
                constructor(e, t) {
                    this.event = "open_filters_dialog", this.location = "toolbar", this.value = "", this.source = e, this.state = t > 0 ? "with_counter" : "without_counter"
                }
            }
            class mo {
                constructor(e) {
                    this.event = "change_filter_dialog_tab", this.source = "filter_dialog_tab_button", this.location = "filter_dialog", this.value = "", this.state = e
                }
            }
            class vo {
                constructor() {
                    this.event = "filter_dialog_search_input_click", this.source = "filter_dialog_search_input", this.location = "filter_dialog", this.state = "user_clicked", this.value = ""
                }
            }
            class fo {
                constructor(e) {
                    this.event = "filter_dialog_search_no_terms_found", this.source = "filter_dialog_search_input", this.location = "filter_dialog", this.state = "empty_search_result", this.value = "", this.value = e
                }
            }
            class yo {
                constructor(e) {
                    this.event = "filter_dialog_applied_filters", this.source = "unknown", this.location = "filter_dialog", this.state = io.UserActionState.ApplyFilters, this.value = e
                }
            }
            class bo {
                constructor(e, t, o, i) {
                    this.event = "filter_use", this.value = e, this.state = t, this.source = o, this.location = i
                }
            }
            class wo {
                constructor(e) {
                    this.event = "apply_flagged_filter", this.source = "flagged_marker", this.location = "header", this.state = "enabled", this.value = e
                }
            }
            var So = o(486393);
            const Co = {
                filtersSearch: `<div class="tv-screener-search js-screener-search">\n\t\t<input type="text" class="tv-screener-search__input js-search-input" placeholder="${c.t(null,void 0,o(735232))}">\n\t\t${o(326529)}\n\t\t<div class="tv-screener-search__reset js-search-reset">\n\t\t\t<span class="tv-screener-search__reset-icon">${o(966631)}</span>\n\t\t\t${c.t(null,void 0,o(591140))}\n\t\t</div>\n\t</div>`,
                filtersBody: '<div class="tv-screener-dialog js-screener-dialog">\n\t\t<div class="tv-screener-dialog__wrap js-filters-wrap"></div>\n\t</div>'
            };
            var ko = [c.t(null, void 0, o(580066)), c.t(null, void 0, o(279304)), c.t(null, void 0, o(856135)), c.t(null, {
                context: "study"
            }, o(786575))];
            class xo {
                constructor(e, t, o) {
                    this._model = e, this._view = t, this._bridge = o, this._dialogTitle = "screener_filters", this._categories = null
                }
                showFiltersDialog(e) {
                    return Promise.all([o.e(57335), o.e(96645), o.e(91797), o.e(86021), o.e(36293), o.e(46086), o.e(37384)]).then(o.bind(o, 391935)).then((({
                        createTabbedDialog: t
                    }) => {
                        this._categories = this._getCategories();
                        const o = this._categories.map((e => ({
                                name: ko[e]
                            }))),
                            {
                                dialog: i,
                                tabs: r
                            } = t({
                                tabs: o,
                                additionalHeaderContent: Co.filtersSearch,
                                width: Math.min(1400, Math.max(646, So(window).width() - 200)),
                                height: Math.max(450, So(window).height() - 200),
                                contentAddClass: "js-dialog-content",
                                doNotCreatePages: !0,
                                destroyOnClose: !0
                            }),
                            n = i.$content.find(".js-dialog-content"),
                            s = i.$content.find(".js-screener-search");
                        this.$fieldSearchInput = s.find(".js-search-input"), this.$fieldSearchInput.on("input", (0, po.default)((e => {
                            this._view.updateFilterSearch(), i.updateScroll()
                        }), 100, {
                            leading: !1,
                            trailing: !0
                        })), this.$fieldSearchInput.on("click", (() => {
                            (0, Yt.sendSnowPlowData)(new vo)
                        }));
                        s.find(".js-search-reset").on("click", (e => this._view.resetAllFilters()));
                        const l = () => {
                            const e = this.$filtersPopup.get(0).clientWidth >= 1292;
                            e && !this._$filtersWrap.is(".js-2col") ? this._$filtersWrap.addClass("js-2col tv-screener-dialog__wrap--2col") : !e && this._$filtersWrap.is(".js-2col") && this._$filtersWrap.removeClass("js-2col tv-screener-dialog__wrap--2col")
                        };
                        this.$filtersPopup = So(Co.filtersBody), this._$filtersWrap = this.$filtersPopup.find(".js-filters-wrap");
                        const a = [];
                        this._view.sortedFields.forEach((e => {
                            Ue[e] && !Ue[e].disabled && Ue[e].control && a.push(this._view.addFieldFilter(e, this._$filtersWrap))
                        })), Promise.all(a).then((() => this._$filtersWrap.find(".js-wrap").each(((e, t) => {
                            this._view.initFilterHandlers(So(t))
                        })))), this.$filtersPopup.appendTo(n), e && this._model.settingsSaver.setValue(this._model.settingKey + ".filters.tab", 0), r.tabChanged.subscribe(null, (e => {
                            this.filtersDialogTabChanged(e), i.scrollToStart(), 0 !== e && (0, Yt.sendSnowPlowData)(new mo(e))
                        })), this._view.$filtersButton.addClass("js-no-pointer-events"), i.on("scroll", (() => {
                            i.$content.find(".js-dropdown-toggle.i-opened").trigger("resetPosition", null, n.parent())
                        }));
                        const c = this._getActiveFilters(!1).sort();
                        i.on("destroy", (e => {
                            const t = this._getActiveFilters(!1).sort();
                            for (const e in Ue) "condition" === Ue[e].control && Ue[e].value && (Ae(Ue[e].value.value) || Ae(Ue[e].value.operator)) && (Ue[e].value = null);
                            So(".tv-screener-dialog__filter-field").removeClass("js-hidden"), this.$fieldSearchInput.val(""), this.$filtersPopup.remove(), delete this.$filtersPopup, this._view.$filtersButton.removeClass("js-no-pointer-events"), delete this._dialog, So(window).off("resize", l), (0, _o.default)(c, t) || (0, Yt.sendSnowPlowData)(new yo(t.join(", ")))
                        })), this._model.trackEvent("Open filters dialog"), i.open(), So(window).on("resize", l), l(), this.$dialogContainer = i.$content, this._dialog = i
                    }))
                }
                filtersDialogTabChanged(e) {
                    const t = this._categories.map((e => "tv-screener-dialog--cat" + e)).join(" ");
                    this.$filtersPopup.removeClass(t).addClass("tv-screener-dialog--cat" + this._categories[e]).scrollTop(0)
                }
                destroy() {
                    this._dialog && (this._dialog.close(), delete this._dialog)
                }
                _getCategories() {
                    const e = [0];
                    return this._view.sortedFields.forEach((t => {
                        Ue[t] && !Ue[t].disabled && Ue[t].control && (e.includes(Ue[t].category) || e.push(Ue[t].category))
                    })), e.sort()
                }
                _getDefaultFiltersForCurrentFilterSet() {
                    const {
                        defaultFilterSets: e
                    } = this._model, t = this._model.currentFilterSetId();
                    return Object.values(e).filter((e => e.id === t))[0].content.filters
                }
                _fieldValueIsEqualToDefaultFilter(e) {
                    const t = this._getDefaultFiltersForCurrentFilterSet()[e],
                        o = Ue[e].value;
                    switch (Ue[e].control) {
                        case "condition":
                            return o.operator === t.operator && o.value.toString() === t.value.toString();
                        case "range":
                        case "select":
                            return o.sort().toString() === t.sort().toString();
                        default:
                            return Ue[e].value === o
                    }
                }
                _getActiveFilters(e = !0) {
                    const t = [];
                    for (const o in Ue)
                        if (Ue[o].value) {
                            if ("condition" === Ue[o].control && (Ae(Ue[o].value.operator) || Ae(Ue[o].value.value))) continue;
                            e ? t.push(ct(Ue[o])) : t.push(o)
                        }
                    return t
                }
            }
            var Fo = o(941285),
                To = o(433524),
                Mo = o(791325),
                Ao = o(763532);
            class Do {
                constructor() {
                    this._handlers = []
                }
                registerHandlers(e) {
                    this._handlers.push(e)
                }
                beforeAppendSymbol(e, t) {
                    this._handlers.forEach((o => {
                        o.beforeAppendSymbol && o.beforeAppendSymbol(e, t)
                    }))
                }
                beforeAppendContextMenuItems(e) {
                    return this._handlers.reduce(((t, o) => o.beforeAppendContextMenuItems ? t.concat(o.beforeAppendContextMenuItems(e)) : t), [])
                }
                afterSymbolConfirm(e, t) {
                    this._handlers.forEach((o => {
                        o.afterSymbolConfirm && o.afterSymbolConfirm(e, t)
                    }))
                }
                beforeAppendSymbolsHeader(e) {
                    this._handlers.forEach((t => {
                        t.beforeAppendSymbolsHeader && t.beforeAppendSymbolsHeader(e)
                    }))
                }
            }
            var Eo = o(813797),
                $o = o(251954),
                Io = o(622864);
            class Po extends class {
                constructor() {
                    this._retries = 5, this._cache = null, this._tryLoad = (e, t) => {
                        this._retries = this._retries - 1;
                        this._startLoading(e).then(t, 0 !== this._retries ? o => {
                            (0, Io.isAbortError)(o) || setTimeout((() => this._tryLoad(e, t)), 3e3)
                        } : void 0)
                    }
                }
                load(e) {
                    return this._cache || (this._cache = new Promise(this._tryLoad.bind(this, null != e ? e : null))), this._cache
                }
            } {
                _startLoading() {
                    return Promise.all([o.e(11553), o.e(42377)]).then(o.bind(o, 825806)).then((e => e.HammerJS))
                }
            }
            var Bo = o(50959),
                Ro = o(632227),
                Lo = o(497754),
                Oo = o.n(Lo),
                Wo = o(169986),
                No = o(694553),
                Vo = o(364903);

            function jo(e) {
                const t = Object.keys(e.modes),
                    o = Object.values(e.modes),
                    [i, r] = Bo.useState(t[0]);
                return Bo.createElement(Wo.CustomBehaviourContext.Provider, {
                    value: window.TradingView.onChartPage ? Wo.presetPlatform : Wo.presetDefault
                }, Bo.createElement(qo, {
                    isActive: i === t[0],
                    title: o[0]
                }), Bo.createElement("span", {
                    className: Vo.switcherContainer
                }, Bo.createElement(No.Switch, {
                    onChange: function(o) {
                        const i = o.currentTarget.checked ? t[1] : t[0];
                        r(i), e.onChange(i)
                    },
                    checked: i === t[1]
                })), Bo.createElement(qo, {
                    isActive: i === t[1],
                    title: o[1]
                }))
            }

            function qo(e) {
                return Bo.createElement("span", {
                    className: Oo()(Vo.modeTitle, e.isActive && Vo.modeTitleActive)
                }, e.title)
            }
            var Uo = o(547964),
                Ho = o(654767),
                zo = o(389401),
                Go = o(400236),
                Ko = o(79205),
                Xo = o(58407),
                Yo = o(444530);

            function Zo(e) {
                const {
                    children: t,
                    className: o,
                    onResize: i,
                    onClick: r
                } = e, n = (0, Yo.useResizeObserver)((([e]) => {
                    i(e.target.getBoundingClientRect())
                }));
                return Bo.createElement("div", {
                    ref: n,
                    className: o,
                    onClick: r
                }, t)
            }
            var Jo = o(690863);
            class Qo extends Bo.PureComponent {
                constructor(e) {
                    super(e), this._getDropdownHeight = () => {
                        if (!this._dropdownParent) return;
                        const e = window.innerHeight - this._dropdownParent.getBoundingClientRect().bottom - 20;
                        return e && e < 50 ? void 0 : e
                    }, this._getFirstHiddenItemIndex = () => {
                        let e;
                        if (this.state.availableWidth && !this._itemSizes.includes(null)) {
                            let t = 0;
                            for (e = 0; e < this.props.items.length; e++) {
                                const o = t + (this._itemSizes[e] || 0);
                                if (!((e === this.props.items.length - 1 ? o : o + 41) < this.state.availableWidth)) break;
                                t = o
                            }
                        } else e = this.state.availableWidth ? this.props.items.length : 0;
                        return e
                    }, this._onElementResize = ([e]) => {
                        this.setState({
                            availableWidth: e.contentRect.width,
                            isOpened: !1
                        })
                    }, this._onSelect = e => {
                        this.props.onSelect && this.props.onSelect(e),
                            this.setState({
                                activeItem: e,
                                isOpened: !1
                            })
                    }, this._onDropdownSelect = (e, t) => {
                        this.props.onSelect && this.props.onSelect(t.actualIndex), this.setState({
                            activeItem: t.actualIndex,
                            isOpened: !1
                        })
                    }, this._onOutsideClick = e => {
                        this.state.isOpened && (this.state.isOpened && (e.preventDefault(), e.stopPropagation()), this.setState({
                            isOpened: !1
                        }))
                    }, this._onDropdownItemClick = () => {
                        this.setState({
                            isOpened: !this.state.isOpened
                        })
                    }, this._onItemResize = (e, t) => {
                        this._itemSizes[e] = t.width, this._itemSizes.includes(null) || this.forceUpdate()
                    }, this._itemSizes = this.props.items.map((e => null)), this.state = {
                        availableWidth: 0,
                        activeItem: this.props.activeItem || 0,
                        isOpened: !1
                    }
                }
                render() {
                    const e = this._getFirstHiddenItemIndex(),
                        t = this.props.items.slice(0, e),
                        o = this.props.items.slice(e),
                        i = t.map(((e, t) => {
                            const o = this.state.activeItem === t,
                                i = Lo(Uo.itemContent, {
                                    [Uo.active]: o
                                });
                            return Bo.createElement(Zo, {
                                key: e.title,
                                className: Lo(Uo.item, {
                                    [Uo.active]: o
                                }),
                                onClick: this._onSelect.bind(this, t),
                                onResize: this._onItemResize.bind(this, t)
                            }, Bo.createElement("div", {
                                className: i
                            }, e.title))
                        })),
                        r = o.map(((e, o) => ({
                            elem: e.title,
                            actualIndex: o + t.length
                        }))),
                        n = this.state.activeItem - e,
                        s = n >= 0,
                        l = Bo.createElement(Xo.OutsideEvent, {
                            handler: this._onOutsideClick,
                            click: !0
                        }, (e => Bo.createElement("div", {
                            ref: e => e && (this._dropdownParent = Ro.findDOMNode(e))
                        }, Bo.createElement("div", {
                            className: Lo(Uo.item, {
                                [Uo.active]: s
                            }),
                            ref: e,
                            onClick: this._onDropdownItemClick
                        }, Bo.createElement("div", {
                            className: Lo(Uo.itemContent, Uo.dropdownItem, {
                                [Uo.active]: s
                            })
                        }, Bo.createElement(Ko.Icon, {
                            className: Lo(Uo.dropdownIcon, {
                                [Uo.active]: this.state.isOpened
                            }),
                            icon: Jo
                        }), Bo.createElement(Go.DropdownList, {
                            isOpened: this.state.isOpened,
                            items: r,
                            selected: s ? n : void 0,
                            onSelect: this._onDropdownSelect,
                            top: 27,
                            right: 0,
                            itemsClassName: Lo(Ho.bluishItem, Uo.dropdownListItem),
                            selectedClassName: this.props.selectedItemClassName,
                            maxHeight: this._getDropdownHeight()
                        }))))));
                    return Bo.createElement(zo.Measure, {
                        onResize: this._onElementResize
                    }, (e => Bo.createElement("div", {
                        className: Lo(Uo.elementWrap, this.props.className),
                        ref: e
                    }, Bo.createElement("div", {
                        className: Uo.itemsWrap
                    }, i, o.length ? l : void 0))))
                }
            }

            function ei(e, t) {
                Ro.render(Bo.createElement(Qo, { ...t
                }), e)
            }
            const ti = ["country", "sector", "industry", "description"],
                oi = ["close", "bid", "ask", "candlestick"],
                ii = ["Recommend.All", "Recommend.MA", "Recommend.Other"];

            function ri(e, t) {
                return e.indexOf(t)
            }

            function ni(e) {
                return e.map((e => (0, Ao.escapeCSVValue)(e))).join(",")
            }

            function si(e) {
                return e.map(((e, t) => Boolean(e) ? t : void 0)).filter(Boolean)
            }

            function li(e) {
                return me.find((t => t.key === e))
            }
            var ai = o(938354),
                ci = o(246125),
                di = o(920389),
                hi = o(264355);
            class ui {
                constructor() {
                    this.event = "export_screener_data", this.source = "export_button", this.location = "toolbar", this.state = "", this.value = ""
                }
            }
            class pi {
                constructor(e, t) {
                    this.event = "change_forex_group", this.source = "forex_group_selector", this.location = "toolbar", this.state = e, this.value = t
                }
            }
            var _i = o(531327);

            function gi(e) {
                return Promise.all([o.e(96266), o.e(75816), o.e(46445), o.e(21356), o.e(62093), o.e(44524), o.e(62564), o.e(82421), o.e(59258), o.e(67158), o.e(21251), o.e(93523), o.e(98734), o.e(94106), o.e(15440), o.e(43386), o.e(56383), o.e(78259), o.e(62526), o.e(61527), o.e(90150), o.e(67911)]).then(o.bind(o, 903284)).then((t => t.showScreenerMarketDialog(e)))
            }
            const mi = new Set(["dps_common_stock_prim_issue_yoy_growth_fy", "earnings_per_share_diluted_qoq_growth_fq", "earnings_per_share_diluted_yoy_growth_fq", "earnings_per_share_diluted_yoy_growth_fy", "earnings_per_share_diluted_yoy_growth_ttm", "ebitda_qoq_growth_fq", "ebitda_yoy_growth_fq", "ebitda_yoy_growth_fy", "ebitda_yoy_growth_ttm", "free_cash_flow_margin_fy", "free_cash_flow_margin_ttm", "free_cash_flow_qoq_growth_fq", "free_cash_flow_yoy_growth_fq", "free_cash_flow_yoy_growth_fy", "free_cash_flow_yoy_growth_ttm", "gross_profit_margin_fy", "gross_profit_qoq_growth_fq", "gross_profit_yoy_growth_fq", "gross_profit_yoy_growth_fy", "gross_profit_yoy_growth_ttm", "net_income_bef_disc_oper_margin_fy", "net_income_qoq_growth_fq", "net_income_yoy_growth_fq", "net_income_yoy_growth_fy", "net_income_yoy_growth_ttm", "oper_income_margin_fy", "total_assets_qoq_growth_fq", "total_assets_yoy_growth_fq", "total_assets_yoy_growth_fy", "total_debt_qoq_growth_fq", "total_debt_yoy_growth_fq", "total_debt_yoy_growth_fy", "total_revenue_qoq_growth_fq", "total_revenue_yoy_growth_fq", "total_revenue_yoy_growth_fy", "total_revenue_yoy_growth_ttm"]);

            function vi(e, t) {
                var o;
                return !!t.title && (t.title.toLowerCase() !== (null === (o = t.shortTitle) || void 0 === o ? void 0 : o.toLowerCase()) || function(e) {
                    return mi.has(e)
                }(e))
            }
            var fi = o(21180),
                yi = o(639581);

            function bi(e, t) {
                const o = setInterval((() => {
                    const i = document.querySelector(e);
                    if (i) {
                        clearInterval(o);
                        new ResizeObserver(t).observe(i), t()
                    }
                }), 20)
            }
            var wi = o(586240),
                Si = o(486393);
            const Ci = parseInt(wi["size-sticky-symbol-header-height"]);

            function ki(e) {
                const {
                    $toolbar: t
                } = e, o = t.outerHeight(), i = e.table.$stickyHeader, r = document.querySelector(".js-sticky-symbol-header-container") ? 64 + Ci : 64;

                function n(t) {
                    const n = t || Si(document).scrollTop(),
                        {
                            isSticky: s,
                            upperScrollLimit: l,
                            bottomScrollLimit: a
                        } = function(t) {
                            const n = e.table._$emptyMessage ? e.table._$emptyMessage.outerHeight() : 0,
                                s = e.$content.offset().top + e.$content.outerHeight(),
                                l = n || 48,
                                a = e.$content.offset().top - r - o,
                                c = s - l - r - o - i.outerHeight();
                            return {
                                isSticky: t >= a && t <= c,
                                bottomScrollLimit: c,
                                upperScrollLimit: a
                            }
                        }(n);
                    if (s) return "sticky";
                    return Math.abs(a - l) < 20 || n < l ? "absolute" : "bottom"
                }

                function s() {
                    const o = n(),
                        r = (0, Xt.isRtl)() ? e.$content.offset().left - Si(window).scrollLeft() : e.$content.offset().left,
                        s = e.$content.width(),
                        l = Si(e.table._table).width(),
                        a = function(t) {
                            const o = Ot.breakpoints.tablet,
                                i = n();
                            if (Si(window).width() > o) return "absolute" === i ? {
                                left: "",
                                right: ""
                            } : {
                                left: t,
                                right: ""
                            };
                            const r = e.$content.scrollLeft();
                            if ((0, Xt.isRtl)()) {
                                const t = e._getResizerBridgeWidth();
                                return "absolute" === i ? {
                                    left: "",
                                    right: r
                                } : {
                                    left: "",
                                    right: t + r
                                }
                            }
                            return {
                                left: t - r,
                                right: ""
                            }
                        }(r),
                        c = {
                            left: r,
                            width: s
                        },
                        d = { ...a,
                            width: l
                        };
                    if (t.css({
                            left: "",
                            right: ""
                        }), i.css({
                            left: "",
                            right: ""
                        }), "absolute" === o) return t.css({
                        width: s
                    }), void i.css(d);
                    t.css(c), i.css(d)
                }

                function l(e) {
                    t.css({
                        top: e
                    });
                    const r = e + o;
                    i.css({
                        top: r
                    })
                }
                const a = function() {
                    let e = Si(document).scrollTop(),
                        a = n(e);
                    return () => {
                        const c = Si(document).scrollTop(),
                            h = n(c);
                        if ("bottom" === h) {
                            d(h);
                            return l(e + r - c), void(a = "bottom")
                        }
                        if (a !== h) {
                            if (d(h), "absolute" === h) return t.css({
                                top: 0
                            }), i.css({
                                top: o
                            }), s(), void(a = "absolute");
                            "sticky" === h && (s(), l(r), e = c, a = "sticky")
                        }
                    }
                }();

                function c() {
                    s(), a()
                }

                function d(e) {
                    const o = "absolute" === e;
                    t.toggleClass("tv-screener-toolbar--markets_absolute", o), i.toggleClass("tv-screener-sticky-header-wrapper--markets_absolute", o), t.toggleClass("tv-screener-toolbar--markets_sticky", !o), i.toggleClass("tv-screener-sticky-header-wrapper--standalone_sticky", !0), i.toggleClass("tv-screener-sticky-header-wrapper--markets_sticky", !o)
                }
                const h = function() {
                    let e;
                    return () => {
                        clearTimeout(e), e = setTimeout(c, 0)
                    }
                }();
                document.addEventListener("scroll", (function() {
                    a(), (0, Xt.isRtl)() && s()
                }), {
                    passive: !0
                }), e.$content[0].addEventListener("scroll", s), window.addEventListener("resize", h), bi(".widgetbar-wrap", s), bi(".tv-screener-table", s), d(n()), c()
            }

            function xi(e) {
                const {
                    $before: t = null,
                    $appendTo: o = null,
                    $dropdownContainer: i = null,
                    beforeMakingSelectPopup: r = (() => {}),
                    makeSelectPopup: n,
                    afterMakingSelectPopup: s = (() => {}),
                    afterSelectPopupAppend: l = (() => {})
                } = e, a = {
                    $dropdownContainer: i
                };
                r();
                const {
                    $wrap: c,
                    $button: d,
                    $dropdownContent: h
                } = n(a);
                return s(c, d, h), (t || o) && (t ? c.insertBefore(t) : c.appendTo(o), l(c, d, h)), d
            }
            var Fi, Ti = o(137674),
                Mi = o(268552);
            ! function(e) {
                e[e.Header = 0] = "Header", e[e.Table = 1] = "Table"
            }(Fi || (Fi = {}));
            const Ai = {
                [Fi.Header]: {
                    description: "Open header context menu",
                    prepend: !1
                },
                [Fi.Table]: {
                    description: "Open context menu",
                    prepend: !0
                }
            };

            function Di(e, t, i) {
                return async function() {
                    const [{
                        Action: e
                    }, {
                        AddToWatchlistAction: t
                    }] = await Promise.all([o.e(34215).then(o.bind(o, 691371)), o.e(26417).then(o.bind(o, 937109))]);
                    return {
                        default: e,
                        addToWatchlist: t
                    }
                }().then((o => t(e, o))).then((t => {
                    const o = Object.values(t);
                    return Ai[i].prepend ? function(e, t) {
                        return e._lifecycle.beforeAppendContextMenuItems(t.length > 0 ? "bottom" : void 0).concat(t)
                    }(e.view, o) : o
                }))
            }

            function Ei(e, t, i) {
                const {
                    view: r,
                    e: n
                } = e;
                return Di(e, t, i).then((e => {
                    return t = e, i = n, o.e(34215).then(o.bind(o, 621452)).then((({
                        ContextMenuManager: e
                    }) => e.showMenu(t, i)));
                    var t, i
                })).then((() => {
                    const e = Ai[i].description;
                    r._model.trackEvent(e)
                }))
            }
            var $i, Ii = o(408747),
                Pi = o(362052),
                Bi = o(457965),
                Ri = o(324020),
                Li = o(486393);

            function Oi(e, t) {
                const {
                    view: o
                } = e, i = o._bridge, r = t.default, n = o._selectableList ? o._selectableList.getSelectedKeys().length : 1, s = { ...e,
                    selectedSymbolsCount: n
                };
                if ((0, yi.isExternalWidget)(i)) return { ...Ni(s, r)
                };
                if ((0, yi.isScreenerPage)(i) || (0, yi.isMarketPage)(i)) {
                    return { ...0 === n ? Ni(s, r) : {},
                        ...Wi(s, t.addToWatchlist)
                    }
                }
                return { ...Wi(s, t.addToWatchlist),
                    ...Vi(s, r),
                    ...ji(s, r)
                }
            }

            function Wi(e, t) {
                const {
                    view: i,
                    symbol: r,
                    shortName: n,
                    selectedSymbolsCount: s
                } = e;
                let l, a;
                0 === s ? (l = c.t(null, void 0, o(883424)).format({
                    symbolName: n
                }), a = [r]) : (l = c.t(null, void 0, o(538843)), a = i._selectableList ? i._selectableList.getSelectedKeys().slice(0) : []);
                return {
                    addToWatchListAction: new t({
                        label: l,
                        disabled: !0,
                        onExecute: () => {
                            (0,
                                Bi.runOrSigninWithFeature)((() => {
                                const e = i._getWatchlist();
                                e && (e.addSymbols(a), (0, Yt.sendSnowPlowData)(new Ii.DispatchContextMenuActionEvent($i.AddToWatchlist, "row", !0)))
                            }), {
                                feature: "watchList",
                                source: "add symbol to watchlist"
                            })
                        }
                    })
                }
            }

            function Ni(e, t) {
                const {
                    view: i
                } = e;
                return ["sector", "industry"].includes(i._model.screener_type) ? function(e, t) {
                    const {
                        e: i
                    } = e, r = Li(i.target).closest(".tv-screener-table__result-row").find(".tv-screener__symbol");
                    return {
                        openSymbolPageAction: new t({
                            actionId: "Screener.OpenSymbolOverview",
                            options: {
                                label: c.t(null, void 0, o(87294)).format({
                                    symbol: r.text()
                                }),
                                onExecute: () => {
                                    window.open(r.attr("href"), "_blank"), (0, Yt.sendSnowPlowData)(new Ii.DispatchContextMenuActionEvent($i.OpenSymbolPage, "row", !0))
                                }
                            }
                        })
                    }
                }(e, t) : function(e, t) {
                    const {
                        view: i,
                        shortName: r,
                        symbol: n
                    } = e;
                    return {
                        openChartAction: new t({
                            actionId: "Screener.OpenSymbolChart",
                            options: {
                                label: c.t(null, void 0, o(575633)).format({
                                    symbol: r
                                }),
                                onExecute: () => {
                                    const {
                                        applySymbol: e
                                    } = i._bridge;
                                    e && (e(n, !0), (0, Yt.sendSnowPlowData)(new Ii.DispatchContextMenuActionEvent($i.OpenChart, "row", !0)))
                                }
                            }
                        })
                    }
                }(e, t)
            }

            function Vi(e, t) {
                const {
                    view: i,
                    symbol: r,
                    shortName: n,
                    selectedSymbolsCount: s
                } = e;
                let l, a;
                0 === s ? (l = c.t(null, void 0, o(958471)).format({
                    symbol: n
                }), a = [r]) : (l = c.t(null, void 0, o(687186)), a = i._selectableList.getSelectedKeys());
                const d = {
                    onExecute: async () => {
                        var e;
                        for (const t of a) await (null === (e = i._bridge.chartWidgetCollection) || void 0 === e ? void 0 : e.activeChartWidget.value().addCompareAsOverlay(t, false))
                    }
                };
                return {
                    compareAction: new t({
                        actionId: "Screener.AddSymbolToCompare",
                        options: { ...d,
                            label: l
                        },
                        customActionOptions: { ...d,
                            jsxLabel: Bo.createElement(Pi.CompareLabel, {
                                label: l
                            })
                        }
                    })
                }
            }

            function ji(e, t) {
                const {
                    symbol: i,
                    shortName: r,
                    selectedSymbolsCount: n
                } = e;
                if (n > 0) return {};
                const s = new t({
                    actionId: "Note.Create",
                    options: {
                        icon: Ri,
                        label: c.t(null, void 0, o(133333)).format({
                            symbol: r
                        }),
                        onExecute: () => {
                            (0, di.runOrSignIn)((() => {
                                var e;
                                (0, Yt.sendSnowPlowData)(new Ii.DispatchContextMenuActionEvent($i.AddTextNote, "row", !0)), null === (e = window.widgetbar) || void 0 === e || e.setPage("base"), (0, Ti.createSymbolNote)(i)
                            }), {
                                source: "Add text note in screener"
                            })
                        }
                    }
                });
                return {
                    addToTextNotesAction: s
                }
            }! function(e) {
                e.AddToWatchlist = "add_to_watchlist", e.OpenChart = "open_chart", e.AddToCompare = "add_to_compare", e.AddTextNote = "add_text_note", e.OpenSymbolPage = "open_symbol_page"
            }($i || ($i = {}));
            var qi = o(375397),
                Ui = o(331633),
                Hi = o(842060);
            o(456057);

            function zi(e) {
                const t = (0, Hi.getStyleClasses)(e.size, e.className);
                return (0, Hi.isCircleLogoWithUrlProps)(e) ? `<img class="${t}" crossorigin src="${e.logoUrl}" alt="">` : `<span class="${t}">${e.placeholderLetter||""}</span>`
            }
            var Gi = o(115078);

            function Ki(e) {
                const {
                    primaryLogoUrl: t,
                    secondaryLogoUrl: o,
                    size: i,
                    className: r
                } = e;
                return `<span class="${(0,Gi.getBlockStyleClasses)(i,r)}">\n\t\t\t${Xi({logoUrl:o,size:i})}\n\t\t\t${Xi({logoUrl:t,size:i})}\n\t\t</span>`
            }

            function Xi(e) {
                const {
                    logoUrl: t,
                    size: o
                } = e, i = (0, Gi.getLogoStyleClasses)(o, Boolean(t));
                return void 0 === t ? `<span class="${i}"></span>` : `<img class="${i}" crossorigin src="${t}" alt="" />`
            }

            function Yi(e) {
                const {
                    symbolHtml: t,
                    logoUrl: o,
                    symbolFirstLetter: i,
                    size: r = "xsmall"
                } = e;
                return Zi({
                    symbolHtml: t,
                    logoHtml: zi({
                        logoUrl: o,
                        size: r,
                        placeholderLetter: i,
                        className: "tv-screener-table__logo-container"
                    })
                })
            }

            function Zi(e) {
                const {
                    logoHtml: t = "",
                    symbolHtml: o = "",
                    wrapHtmlClass: i = ""
                } = e;
                return `\n\t\t<div class="tv-screener-table__symbol-container ${i}">\n\t\t\t<div class="tv-screener-table__symbol-addition"></div>\n\t\t\t${t}\n\t\t\t<div class="tv-screener-table__symbol-container-description">\n\t\t\t\t${o}\n\t\t\t</div>\n\t\t</div>\n\t`
            }
            var Ji = o(849204);
            const Qi = (0, Ji.getLogoUrlResolver)();

            function er(e) {
                if (e && "null" !== e) return Qi.getSymbolLogoUrl(e, Ji.LogoSize.Medium)
            }

            function tr(e) {
                const {
                    fieldsOrder: t,
                    proSymbol: o,
                    rowData: i,
                    symbolHtml: r
                } = e, n = t.indexOf(wt.LogoId);
                if (-1 !== n) {
                    const e = i[n];
                    return Yi({
                        symbolHtml: r,
                        symbolFirstLetter: or(o),
                        logoUrl: er(e)
                    })
                }
                const s = t.indexOf(wt.BaseCurrencyLogoId),
                    l = -1 !== s,
                    a = t.indexOf(wt.CurrencyLogoId),
                    c = -1 !== a;
                if (l && c) {
                    const e = i[s],
                        t = i[a];
                    return function(e, t, o) {
                        return Zi({
                            symbolHtml: e,
                            logoHtml: Ki({
                                primaryLogoUrl: t,
                                secondaryLogoUrl: o,
                                size: "xsmall",
                                className: "tv-screener-table__logo-container"
                            })
                        })
                    }(r, er(e), er(t))
                }
                if (l) {
                    const e = i[s];
                    return Yi({
                        symbolHtml: r,
                        symbolFirstLetter: or(o),
                        logoUrl: er(e)
                    })
                }
                if (c) {
                    const e = i[a];
                    return Yi({
                        symbolHtml: r,
                        symbolFirstLetter: or(o),
                        logoUrl: er(e)
                    })
                }
                return Zi({
                    symbolHtml: r
                })
            }

            function or(e) {
                return (0, Mi.shortName)(e)[0]
            }

            function ir(e, t, o) {
                return e.get(F(t, o))
            }
            var rr;
            ! function(e) {
                e.Bool = "bool", e.FundamentalPrice = "fundamental_price", e.Number = "number", e.Percent = "percent", e.Price = "price", e.Text = "text", e.Time = "time"
            }(rr || (rr = {}));
            const nr = ["&mdash;", '<span class="tv-screener-table__cell--color-normal">—</span>'];

            function sr(e, t, o, i, r) {
                if (!ar() && !r) return "";
                const n = !e && o === rr.Price || !t && o === rr.FundamentalPrice || nr.includes(i),
                    s = ![rr.Price, rr.FundamentalPrice].includes(o);
                if (n || s) return "";
                let l;
                return l = o === rr.Price ? e : t, `<span class="tv-screener-table__cell-currency-value">${l}</span>`
            }
            const lr = "screener.showCurrencyLabel";

            function ar() {
                return r.getBool(lr, !0)
            }
            var cr = o(366619),
                dr = o(267562),
                hr = o(182951),
                ur = o(891250),
                pr = o(486393),
                _r = o(486393);
            class gr {
                constructor(e) {
                    this._setOptions(e), this._fields = {}, this._fieldsOrder = Array.isArray(e.fieldsOrder) && e.fieldsOrder || [], this.fieldsOrderChange = new ft.Delegate, this._columnsMap = new Map, this.afterFixCols = new ft.Delegate, this._additionalColumns = [], this._hiddenColumns = 0, this._throttleFixCols = (0, po.default)((() => {
                        "minimized" !== (this._model._bridge.bottomToolbarMode ? this._model._bridge.bottomToolbarMode.value() : "normal") && (this._unhideColumns(), this._unhideCells(), this._fixCols())
                    }), 10), this.dragStarted = new qi.WatchedValue, this._fieldsOrderChange = !1, this._updateEmptyMessageIcon = this._updateEmptyMessageIcon.bind(this), Ui.watchedTheme.subscribe(this._updateEmptyMessageIcon)
                }
                _setOptions(e) {
                    this._options = e || {}, this._model = this._options.model, this._defaultFormatter = this._options.defaultFormatter || (e => e.value), this._nullFormatter = this._options.nullFormatter || (() => "&mdash;"), this._widthChange = this._options.widthChange,
                        this._visibilityChange = this._options.visibilityChange, this._noDataString = this._options.noDataString, this._isUnavailableWidgetMarket = this._options.isUnavailableWidgetMarket, this._disableStickyHeader = e.disableStickyHeader
                }
                updateSortField(e, t) {
                    const o = this.getTh(e);
                    e && t && o.size() && (this.$theadRow.find(".tv-screener-table__sort--desc,.tv-screener-table__sort--asc").removeClass("tv-screener-table__sort--desc tv-screener-table__sort--asc"), o.find(".js-table-sort").empty().addClass(`tv-screener-table__sort--${t}`).append("asc" === t ? hr : ur))
                }
                highlightCell(e, t, o) {
                    const i = this.$tbody[0].querySelector(`tr[data-symbol="${e}"] td[data-field-key="${t}"]`);
                    if (i) {
                        i.classList.add("tv-screener-table__cell--highlighted");
                        const e = i.querySelector("span");
                        if (e) {
                            const t = o ? "tv-screener-table__cell--growing" : "tv-screener-table__cell--falling";
                            e.classList.add(t)
                        }
                    }
                }
                flickRow(e) {
                    this.$tbody[0].querySelectorAll(`tr[data-symbol="${e}"] td`).forEach((e => {
                        const t = e.querySelector("span");
                        t && t.classList.remove("tv-screener-table__cell--growing", "tv-screener-table__cell--falling")
                    }))
                }
                _createTable() {
                    if (this._table) return;
                    const e = document.createElement("table"),
                        t = ["tv-data-table"];
                    this._options.addTableClasses && t.push(...this._options.addTableClasses), e.classList.add(...t);
                    const o = document.createElement("colgroup"),
                        i = document.createElement("thead"),
                        r = ["tv-data-table__thead"];
                    this._options.addTheadClasses && r.push(...this._options.addTheadClasses), i.classList.add(...r);
                    const n = document.createElement("tr"),
                        s = ["tv-data-table__thead-row"];
                    this._options.addTheadRowClasses && s.push(...this._options.addTheadRowClasses), n.classList.add(...s);
                    const l = document.createElement("tbody");
                    l.classList.add("tv-data-table__tbody"), e.appendChild(o), e.appendChild(i), i.appendChild(n), e.appendChild(l), this._table = e, this._colgroup = o, this._theadRow = n, this._tbody = l, window.addEventListener("resize", (() => this._throttleFixCols())), this._widthChange.subscribe(this, (() => this._throttleFixCols())), this._model._bridge.bottomToolbarMode && this._model._bridge.bottomToolbarMode.subscribe((() => this._throttleFixCols())), this._visibilityChange && this._visibilityChange.subscribe((e => {
                        e && this._throttleFixCols()
                    }))
                }
                _createStickyWrapper() {
                    if (this._stickyWrapper) return;
                    const e = ["tv-data-table-sticky-wrapper"];
                    this._options.addStickyHeaderWrapperClasses && e.push(...this._options.addStickyHeaderWrapperClasses);
                    const t = document.createElement("div");
                    t.classList.add(...e);
                    const o = this._table.cloneNode(!0);
                    t.append(o), this._stickyWrapper = t
                }
                _createHeader() {
                    const e = document.createDocumentFragment(),
                        t = document.createDocumentFragment();
                    this._disableStickyHeader || this._createStickyWrapper();
                    for (let o = 0; o < this._columnsOrder.length; ++o) {
                        const i = this._columnsOrder[o];
                        if (!this._fields[i]) continue;
                        const r = document.createElement("th");
                        r.setAttribute("data-field", i);
                        const n = ["tv-data-table__th", "tv-data-table__cell", "js-tv-data-table-th", `js-tv-data-table-th-${this._esc(i)}`];
                        if (this._options.addThClasses) {
                            const e = "function" == typeof this._options.addThClasses ? this._options.addThClasses(i, this._fields[i]) : this._options.addThClasses;
                            n.push(...e)
                        }
                        r.classList.add(...mr(n));
                        const s = "function" == typeof this._options.titleFormatter ? this._options.titleFormatter(i, this._fields[i]) : this._fields[i] && (this._fields[i].content || this._fields[i].title) || i;
                        s instanceof pr ? r.append(s[0]) : r.innerHtml = s, this._setDraggable(r), t.append(r);
                        const l = document.createElement("col");
                        l.classList.add("js-tv-data-table-col", `js-tv-data-table-col-${this._esc(i)}`), e.append(l)
                    }
                    vr(this._colgroup), vr(this._theadRow);
                    const o = this._fields[this._model.searchField] ? this._fields[this._model.searchField].searchValue : void 0;
                    if (this._disableStickyHeader) this._colgroup.append(e), this._theadRow.append(t), this._setSearchInput(this._theadRow, o);
                    else {
                        const i = this._stickyWrapper.querySelector("table"),
                            r = i.querySelector("colgroup"),
                            n = i.querySelector("thead tr");
                        vr(r), vr(n);
                        const s = e.cloneNode(!0);
                        r.append(e), this._colgroup.append(s);
                        const l = t.cloneNode(!0);
                        n.append(t), this._theadRow.append(l), this._theadRowSticky = n, i.classList.add("tv-screener-table--fixed"), _r(this._theadRow).find(".js-table-sort").remove(), this._setSearchInput(this._theadRowSticky, o)
                    }
                }
                _setDraggable(e) {
                    const t = _r(e);
                    if (t.is(".js-draggable")) return;
                    const i = _r(this._theadRow);
                    let r = !1;
                    t.addClass("js-draggable").on("mousedown touchstart", (e => {
                        if (t.data("field") === this._model.searchField) return;
                        e.preventDefault(), t.css({
                            position: "relative",
                            left: 0
                        });
                        const n = t.offset().left;
                        let s = n;
                        const l = e.pageX || e.originalEvent.touches[0].pageX,
                            a = e => {
                                const c = (e.pageX || e.originalEvent.touches[0].pageX) - l;
                                if (!r) {
                                    if (Math.abs(c) < 10) return;
                                    o.e(34215).then(o.bind(o, 621452)).then((({
                                        ContextMenuManager: e
                                    }) => {
                                        null !== e.getShown() && (r = !1, t.css("left", "auto"), _r(window).off("mousemove touchmove", a), this._onDragStop(t))
                                    })), this._onDragStart(t), t.one("click", (e => {
                                        r && e.stopPropagation()
                                    }))
                                }
                                r = !0;
                                const d = i.offset().left,
                                    h = i.outerWidth(),
                                    u = t.outerWidth(),
                                    p = Math.max(d, Math.min(d + h - u, n + c)),
                                    _ = p + u / 2;
                                let g = _r(),
                                    m = !1;
                                const v = t.prev();
                                if (v.size() && ((0, Xt.isRtl)() ? _ > v.offset().left + v.outerWidth() / 2 : p <= d || _ < v.offset().left + v.outerWidth() / 2)) g = v;
                                else {
                                    const e = t.next();
                                    if (e.size() && !e.is(".i-hidden")) {
                                        (p + u >= d + h || ((0, Xt.isRtl)() ? _ < e.offset().left + e.outerWidth() / 2 : _ > e.offset().left + e.outerWidth() / 2)) && (g = e, m = !0)
                                    }
                                }
                                const f = g.data("field");
                                if (g.size() && "name" !== f) {
                                    const e = t.data("field"),
                                        o = _r(this._colgroup).find(`.js-tv-data-table-col-${this._esc(e)}`),
                                        i = _r(this._colgroup).find(`.js-tv-data-table-col-${this._esc(f)}`);
                                    let r = _r(),
                                        n = _r();
                                    this._stickyWrapper && (r = _r(this._stickyWrapper).find(`.js-tv-data-table-col-${this._esc(e)}`), n = _r(this._stickyWrapper).find(`.js-tv-data-table-col-${this._esc(f)}`)), m ? (o.insertAfter(i), r.size() && n.size() && r.insertAfter(n)) : (o.insertBefore(i), r.size() && n.size() && r.insertBefore(n));
                                    let l = _r(),
                                        a = _r();
                                    this._stickyWrapper && (l = _r(this._stickyWrapper).find(`.js-tv-data-table-th-${this._esc(e)}`), a = _r(this._stickyWrapper).find(`.js-tv-data-table-th-${this._esc(f)}`)), m ? (t.insertAfter(g), s = t.offset().left - g[0].offsetWidth,
                                        l.size() && a.size() && l.insertAfter(a)) : (t.insertBefore(g), s = t.offset().left + g[0].offsetWidth, l.size() && a.size() && l.insertBefore(a)), this._swapCols(e, f)
                                }
                                t.css("left", p - s)
                            };
                        _r(window).on("mousemove touchmove", a).one("mouseup touchend", (e => {
                            setTimeout((() => {
                                r = !1
                            }), 0), t.css("left", "auto"), _r(window).off("mousemove touchmove", a), r && this._onDragStop(t)
                        }))
                    }))
                }
                _setSearchInput(e, t) {
                    const o = e.querySelector(".js-search-query");
                    if (!o) return;
                    const i = o.querySelector(".js-search-input"),
                        r = o.querySelector(".js-input-reset");
                    (0, yi.isScreenerPage)(this._model._bridge) && i.focus();
                    const n = Boolean(t);
                    r.classList.toggle("i-hidden", !n), n && (i.value = t), i.addEventListener("input", (() => {
                        r.classList.toggle("i-hidden", 0 === i.value.length)
                    }));
                    const s = (0, Lt.default)((() => {
                        this._fields[this._model.searchField].searchValue = i.value, this._model.loading || this._model.update()
                    }), 400);
                    i.addEventListener("input", (() => s()))
                }
                _onDragStart(e) {
                    this._model.preventPrevScanRequest(), this.dragStarted.setValue(!0);
                    const t = e.data("field"),
                        o = this._getColByField(t);
                    o && (this._options.addDraggingThClasses && e[0].classList.add(...this._options.addDraggingThClasses), this._options.addDraggingColClasses && o.classList.add(...this._options.addDraggingColClasses))
                }
                _swapCols(e, t) {
                    const o = this._columnsOrder.indexOf(e),
                        i = this._columnsOrder.indexOf(t);
                    this._columnsOrder[o] = this._columnsOrder.splice(i, 1, this._columnsOrder[o])[0], this._fieldsOrderChanged = !0;
                    const r = Math.min(o, i),
                        n = Math.max(o, i),
                        s = this._tbody.children;
                    for (let e = 0; e < s.length; e++) {
                        const t = s[e].children,
                            o = t[r];
                        t[n].after(o)
                    }
                    const l = this._fieldsOrder.indexOf(e),
                        a = this._fieldsOrder.indexOf(t);
                    this._fieldsOrder[l] = this._fieldsOrder.splice(a, 1, this._fieldsOrder[l])[0]
                }
                _onDragStop(e) {
                    this.dragStarted.setValue(!1);
                    const t = e.data("field"),
                        o = this._getColByField(t);
                    o && (this._options.addDraggingThClasses && e[0].classList.remove(...this._options.addDraggingThClasses), this._options.addDraggingColClasses && o.classList.remove(...this._options.addDraggingColClasses), this._fieldsOrderChanged && (this.fieldsOrderChange.fire(), this._fieldsOrderChanged = !1, this._model.trackEvent(`Drag and drop ${"big"===this._options.table_style?"quotes":"non-quotes"} column`), (0, Yt.sendSnowPlowData)(new no(t))), this._fixCols())
                }
                _getColByField(e) {
                    return this._colgroup.querySelector(`.js-tv-data-table-col-${this._esc(e)}`)
                }
                _fixCols() {
                    const e = Array.from(this._theadRow.children);
                    if (0 === e.length) return;
                    this._table.classList.remove("tv-screener-table--fixed");
                    const t = this._table.querySelectorAll("col");
                    let o = e.map((e => Math.floor(e.getBoundingClientRect().width)));
                    const i = "big" === this._options.table_style,
                        r = window.innerWidth > Ot.breakpoints.tablet,
                        n = this._table.parentNode.offsetWidth;
                    let s = fr(o);
                    if (i && r && s > n) {
                        do {
                            s > n && (o.pop(), this._hideColumn()), s = fr(o)
                        } while (s > n);
                        const e = Math.floor((n - s) / o.length);
                        o = o.map((t => t + e));
                        const t = o.length - 1,
                            i = o[t],
                            r = n - fr(o);
                        o[t] = i + r
                    }
                    if (t.forEach(((e, t) => {
                            const i = o[t];
                            i ? e.style.width = `${i}px` : e.classList.add("i-hidden")
                        })), this._stickyWrapper) {
                        const e = this._stickyWrapper,
                            t = e.querySelector("colgroup"),
                            i = e.querySelector("table"),
                            r = this._colgroup.cloneNode(!0);
                        t.replaceWith(r), i.classList.add("tv-screener-table--fixed"), this._stickyWrapper.style.width = function(e, t) {
                            if (!((0, yi.isMarketPage)(e._model._bridge) && window.innerWidth > Ot.breakpoints.phone)) return;
                            return e._stickyWrapper.querySelectorAll("th").forEach(((e, o) => {
                                t[o] ? e.classList.remove("i-hidden") : e.classList.add("i-hidden")
                            })), `${Si(e._table).width()}px`
                        }(this, o) || `${s}px`
                    }
                    this._table.classList.add("tv-screener-table--fixed"), this.afterFixCols.fire()
                }
                _hideColumn() {
                    const e = this._theadRow.children;
                    for (let t = e.length - 1; t >= 0; t--) {
                        const o = e[t];
                        if (!o.classList.contains("i-hidden")) {
                            o.classList.add("i-hidden");
                            break
                        }
                    }
                    this._hiddenColumns++
                }
                _unhideColumns() {
                    const e = this._table.querySelectorAll("col"),
                        t = this._theadRow.querySelectorAll("th");
                    e.forEach(((e, o) => {
                        e.style.width = "", e.classList.remove("i-hidden"), t[o].classList.remove("i-hidden")
                    })), this._hiddenColumns = 0
                }
                _unhideCells() {
                    if (!this._tbody) return;
                    this._tbody.querySelectorAll("td.i-hidden").forEach((e => {
                        e.classList.remove("i-hidden")
                    }))
                }
                toggleSignals(e) {
                    const t = this._fields[e];
                    t.displaySignal = !t.displaySignal;
                    const o = this._columnsOrder.indexOf(e);
                    if (-1 === o) return;
                    const i = this._tbody.querySelectorAll(`.tv-data-table__row .tv-data-table__cell:nth-child(${o+1}) .tv-screener-table__signal`);
                    0 !== i.length && (i.forEach((e => e.classList.toggle("i-hidden", !t.displaySignal))), this._fixCols())
                }
                get $element() {
                    return this._createTable(), _r(this._table)
                }
                get $tbody() {
                    return this._createTable(), _r(this._tbody)
                }
                get $stickyHeader() {
                    return this._createTable(), this._createStickyWrapper(), _r(this._stickyWrapper)
                }
                get $theadRow() {
                    return this._disableStickyHeader ? _r(this._theadRow) : _r(this._theadRowSticky)
                }
                get additionalColumns() {
                    return this._additionalColumns
                }
                get fieldsOrder() {
                    return this._fieldsOrder
                }
                get columnsOrder() {
                    return this._columnsOrder
                }
                setColumnsMap(e) {
                    this._columnsMap = e
                }
                setFields(e) {
                    this._fieldsOrder = [], this._columnsOrder = [];
                    for (const [t, o] of Object.entries(e)) this._fieldsOrder.push(t), o.skipField || this._columnsOrder.push(t);
                    this._fields = {}, this._additionalColumns = [], this._fieldsOrder.forEach((t => {
                        this._fields[t] = e[t], e[t] && e[t].additionalColumns && e[t].additionalColumns.forEach((e => {
                            this._additionalColumns.includes(e) || this._additionalColumns.push(e)
                        }))
                    })), this.fieldsOrderChange.fire(), this._fieldsOrderChange = !0
                }
                update(e) {
                    this._fieldsOrderChange && (this._unhideColumns(), this._createTable(), this._createHeader()), this.clearData(), this.append(e), this._fieldsOrderChange && (this._fieldsOrderChange = !1), this._fixCols()
                }
                _updateEmptyMessageIcon() {
                    if (!this._$emptyMessage) return;
                    const e = function() {
                            var e;
                            return Ui.watchedTheme.value() || ((null === (e = document.querySelector("html")) || void 0 === e ? void 0 : e.classList.contains("theme-dark")) ? yt.StdTheme.Dark : yt.StdTheme.Light)
                        }(),
                        t = this._$emptyMessage.find("i"),
                        o = e === yt.StdTheme.Light ? dr : cr;
                    t.html(o)
                }
                _setEmptyMessage() {
                    let e, t = "";
                    (0, yi.isScreenerPage)(this._model._bridge) ? t = "tv-screener-table__empty-result--fixed": ((0,
                        yi.isChartPage)(this._model._bridge) || (0, yi.isExternalWidget)(this._model._bridge)) && (t = "tv-screener-table__empty-result--relative"), e = this._isUnavailableWidgetMarket ? c.t(null, void 0, o(838821)).format({
                        openLink: '<a href="https://www.tradingview.com/" target="_blank" rel="noopener" class="tv-screener-table__empty-result-link">',
                        closeLink: "</a>"
                    }) : this._noDataString || c.t(null, void 0, o(476822)), this._$emptyMessage = _r(`\n\t\t\t<div class="tv-screener-table__empty-result ${t}">\n\t\t\t\t<i class="js-no-results-icon"></i>\n\t\t\t\t<div class="tv-screener-table__empty-description">${e}</div>\n\t\t\t</div>\n\t\t`).insertAfter(this._table), this._updateEmptyMessageIcon(), (0, yi.isMarketPage)(this._model._bridge) ? this._fixCols() : this._model._view.fixStandaloneWidth()
                }
                append(e) {
                    this._$emptyMessage && this._$emptyMessage.remove();
                    const t = ir(this._columnsMap, "currency", this._model.selectedIntervalId),
                        o = ir(this._columnsMap, "fundamental_currency_code", this._model.selectedIntervalId),
                        i = document.createDocumentFragment();
                    for (let r = 0; r < e.length; r++) {
                        const n = e[r];
                        if (!Array.isArray(n.d)) continue;
                        const s = n.d[t],
                            l = n.d[o],
                            a = ["tv-data-table__row"];
                        if (this._options.addRowClasses) {
                            const e = "function" == typeof this._options.addRowClasses ? this._options.addRowClasses(n) : this._options.addRowClasses;
                            a.push(...e)
                        }
                        const c = [];
                        if (this._options.addRowAttrs) {
                            const e = "function" == typeof this._options.addRowAttrs ? this._options.addRowAttrs(n) : this._options.addRowAttrs;
                            for (const [t, o] of Object.entries(e)) c.push([t, o])
                        }
                        const d = document.createDocumentFragment();
                        let h = this._hiddenColumns;
                        for (let e = this._fieldsOrder.length - 1; e >= 0; --e) {
                            const t = this._fieldsOrder[e],
                                o = this._fields[t];
                            if (!o || o.skipField) continue;
                            const i = ir(this._columnsMap, t, this._model.selectedIntervalId),
                                r = o.additionalColumns ? o.additionalColumns.map((e => yr(n.d, ir(this._columnsMap, e, this._model.selectedIntervalId)))) : [];
                            let a = "";
                            const c = ["tv-data-table__cell"];
                            let u;
                            if (o.tooltip && ("function" == typeof o.tooltip ? a = o.tooltip(...r, o) : "string" == typeof o.tooltip && (a = o.tooltip), c.push("apply-common-tooltip")), "price" === o.type && r.length >= 4) {
                                const e = r.slice(-4);
                                e[2] = "true" === e[2], u = lt(...e)
                            } else u = nt(o, this._model.screener_type, !1);
                            "name" === t && r.push(n.s);
                            const p = yr(n.d, i);
                            let _ = null === p ? this._nullFormatter() : u && u.format(p) || this._defaultFormatter({
                                value: p,
                                fieldKey: t,
                                field: o,
                                rowData: n,
                                fieldsOrder: this._fieldsOrder,
                                title: a,
                                columnsMap: this._columnsMap
                            });
                            if (this._options.addCellClasses) {
                                const e = "function" == typeof this._options.addCellClasses ? this._options.addCellClasses({
                                    value: p,
                                    fieldKey: t,
                                    field: o
                                }) : this._options.addCellClasses;
                                c.push(...e)
                            }
                            const g = o.additionalFormatter ? o.additionalFormatter(...r) : "";
                            o.mutateDisplayValue && (_ = o.mutateDisplayValue(_, ...r, o)), this._model.hasMarkedSymbols() && c.push("tv-screener-table__cell--with-marker"), h > 0 && (c.push("i-hidden"), h--);
                            let m = _ + g + sr(s, l, o.type, _, (0, yi.isMarketPage)(this._model._bridge));
                            (t === wt.Name || t === wt.Sector && this._model.screener_type === dt.CryptoMkt) && (m = tr({
                                symbolHtml: m,
                                fieldsOrder: this._fieldsOrder,
                                rowData: n.d,
                                proSymbol: n.s
                            }));
                            const v = document.createElement("td");
                            v.classList.add(...c), v.title = a && "name" !== t ? a : "", v.setAttribute("data-field-key", t), v.innerHTML = m, d.prepend(v)
                        }
                        const u = document.createElement("tr");
                        u.classList.add(...a), c.forEach((e => u.setAttribute(...e))), u.append(d), this._options.onRowBuild && this._options.onRowBuild(u, n), i.appendChild(u)
                    }
                    this._tbody.appendChild(i), 0 === this._tbody.querySelectorAll("tr").length && this._setEmptyMessage(), this._options.onUpdate && this._options.onUpdate()
                }
                clearData(e) {
                    if (this._tbody)
                        if (e) {
                            const t = this._tbody.children,
                                o = t.length;
                            for (let i = e; i < o; i++) {
                                const o = t[e];
                                this._tbody.removeChild(o)
                            }
                        } else this._tbody.innerHTML = ""
                }
                setThContent(e, t) {
                    const o = this.getTh(e);
                    o.size() && (o.empty(), t instanceof pr ? o.append(t) : o.html(t), "name" === e && this._setSearchInput(this.$theadRow[0], this._fields[e].searchValue))
                }
                setColumnTitle(e, t) {
                    const o = this.getTh(e);
                    o.size() && o.find(".js-head-title").text(t)
                }
                setSearchText(e) {
                    const t = this.getTh(this._model.searchField);
                    t.size() && t.find(".js-field-total").text(e)
                }
                getTh(e) {
                    const t = this.$theadRow;
                    return t && t.find(`.js-tv-data-table-th-${this._esc(e)}`) || _r()
                }
                _esc(e) {
                    return e.replace(/[\.|]/g, "_")
                }
            }

            function mr(e) {
                return e.filter(Boolean)
            }

            function vr(e) {
                const t = e.children;
                0 !== t.length && Array.from(t).forEach((t => e.removeChild(t)))
            }

            function fr(e) {
                return e.reduce(((e, t) => e + t))
            }

            function yr(e, t) {
                return e[t]
            }
            var br = o(705526),
                wr = o(197439);
            const Sr = {
                america: "usa",
                euronext: "europe",
                hongkong: "hong-kong",
                newzealand: "new-zealand",
                uk: "united-kingdom",
                rsa: "south-africa",
                srilanka: "sri-lanka"
            };

            function Cr(e, t, o = "sector") {
                return e && t ? (Sr[t] && (t = Sr[t]), `/markets/stocks-${t}/sectorandindustry-${o}/${(i=e,i.replace(/[^a-zA-Z0-9]+/g,"-").replace(/-+/g,"-").replace(/^-|-$/g,"")).toLowerCase()}/`) : "/markets/stocks-usa/sectorandindustry-sector/";
                var i
            }

            function kr(e) {
                const t = e._model,
                    o = e._bridge,
                    i = {
                        screenerType: Mr(t),
                        market: t.markets[0],
                        utm: t.utm,
                        largeChartUrl: t.largeChartUrl,
                        tableStyle: o.table_style,
                        screenerPlacement: (0, yi.getScreenerPage)(o),
                        openChartOnSameTab: o.open_chart_on_same_tab,
                        bridgeBaseUrl: o.baseUrl,
                        selectedIntervalId: t.selectedIntervalId
                    };
                return e => function(e) {
                    switch (e.fieldKey) {
                        case wt.Name:
                            return function(e) {
                                const {
                                    value: t,
                                    title: o,
                                    screenerPlacement: i,
                                    openChartOnSameTab: r
                                } = e;
                                if ("chart" !== i) {
                                    const i = Ar(e);
                                    return `<a class="tv-screener__symbol apply-common-tooltip" title="${(0,To.htmlEscape)(o)}" href="${(0,To.htmlEscape)(i)}" ${r?"":'target="_blank" rel="noopener"'}>${t}</a>`
                                }
                                return `<div class="tv-screener__symbol tv-screener__symbol--text apply-common-tooltip" title="${o}">${t}</div>`
                            }(e);
                        case wt.Description:
                            return function(e) {
                                const {
                                    value: t,
                                    screenerType: o,
                                    market: i
                                } = e;
                                if (["sector", "industry"].includes(o)) {
                                    const e = xr(t);
                                    return `<a class="tv-screener__symbol" target="_blank" rel="noopener" href="${Cr(t,i,o)}">\n\t\t\t\t\t\t${e}\n\t\t\t\t\t</a>`
                                }
                                return Fr(t)
                            }(e);
                        case wt.Sector:
                            return function(e) {
                                const {
                                    value: t,
                                    fieldKey: o,
                                    screenerType: i,
                                    market: r,
                                    tableStyle: n,
                                    utm: s,
                                    openChartOnSameTab: l
                                } = e;
                                if (i === dt.CryptoMkt) {
                                    const o = Ar(e);
                                    return `<a class="tv-screener__symbol" href="${(0,To.htmlEscape)((0,
br.addUtmToUrl)(o,s))}" ${l?"":'target="_blank" rel="noopener"'}>\n\t\t\t\t\t\t${t}\n\t\t\t\t\t</a>`
                                }
                                if ("big" === n) return Tr(t, r, o);
                                return t
                            }(e);
                        case wt.Industry:
                            return function(e) {
                                const {
                                    value: t,
                                    fieldKey: o,
                                    screenerType: i,
                                    market: r,
                                    tableStyle: n
                                } = e;
                                if ("big" === n && i !== dt.CryptoMkt) return Tr(t, r, o);
                                return Fr(t)
                            }(e);
                        case wt.Country:
                            return (0, ai.triesTranslateCountrieName)(e.value);
                        default:
                            return e.value
                    }
                }({ ...e,
                    ...i
                })
            }

            function xr(e) {
                return (0, O.triesTranslateScreenerData)(e)
            }

            function Fr(e) {
                const t = xr(e);
                return `<span class="tv-screener-table__cell--fix-width" title="${t}">${t}</span>`
            }

            function Tr(e, t, o) {
                const i = xr(e);
                return `<a class="tv-screener__symbol" target="_blank" rel="noopener" href="${Cr(e,t,o)}">\n\t\t\t\t<span class="tv-screener__symbol--secondary">${i}</span>\n\t\t\t</a>`
            }

            function Mr(e) {
                return e.screener_type
            }

            function Ar(e) {
                const {
                    rowData: t,
                    screenerType: o,
                    screenerPlacement: i,
                    utm: r,
                    largeChartUrl: n,
                    columnsMap: s,
                    selectedIntervalId: l
                } = e;
                if (o === dt.CryptoMkt) {
                    const e = {
                        proName: t.s,
                        type: "crypto"
                    };
                    return "widget" === i && n ? (0, wr.makeTemplateSymbolUrl)(n, e) : (0, wr.makeSymbolPageUrl)(e)
                }
                const a = ir(s, "exchange", l);
                let c;
                a && (c = t.d[a]);
                const d = {
                    proName: t.s,
                    exchange: c,
                    type: o
                };
                return o === dt.ContinuousFutures ? (0, wr.makeSymbolChartUrl)(d) : "widget" === i && n ? (0, wr.makeTemplateSymbolUrl)(n, d) : (0, wr.makeSymbolPageUrl)(d, r)
            }
            var Dr, Er = o(583912);

            function $r(e) {
                const t = e._fields_order,
                    i = e._disableStickyHeader,
                    r = e._lifecycle,
                    n = e.widthChange,
                    s = e._model,
                    l = s.screener_type,
                    a = e._bridge,
                    d = a.table_style,
                    h = a.hide_controls,
                    u = a.visible,
                    p = (0, yi.getScreenerPage)(a),
                    _ = Ue.description,
                    g = {
                        model: s,
                        fieldsOrder: t,
                        titleFormatter: (t, o) => {
                            const i = e._getThContent(t, o);
                            return t === wt.Name && r.beforeAppendSymbolsHeader(i.get(0)), i
                        },
                        defaultFormatter: kr(e),
                        addTheadClasses: ["tv-screener-table__thead", i ? "tv-screener-table__thead--sticky" : "tv-screener-table__thead--regular"],
                        addThClasses: ["tv-data-table__sortable", "tv-screener-table__sortable", "tv-screener-table__th", d ? `tv-screener-table__th--${d}` : "", "widget" === p && h ? "tv-screener-table__th--no-toolbar" : ""],
                        addCellClasses: e => {
                            const {
                                value: t,
                                fieldKey: o,
                                field: i
                            } = e, r = ["tv-screener-table__cell"];
                            return r.push(... function(e) {
                                const t = [];
                                e.align === Dr.Right || e.align === Dr.Center || e.control && "select" !== e.control || t.push("tv-screener-table__cell--left");
                                e.align !== Dr.Center || e.control || t.push("tv-screener-table__cell--center");
                                return t
                            }(i)), i.highlightChange && t && r.push(t >= 0 ? "tv-screener-table__cell--up" : "tv-screener-table__cell--down"), o !== wt.Name || !_.disabled && _.checked || r.push("widget" === p ? "tv-screener-table__cell--widget-without-description" : "tv-screener-table__cell--without-description"), d && r.push(`tv-screener-table__cell--${d}`), "widget" === p && r.push(... function(e, t, o) {
                                const i = [];
                                e && i.push("tv-screener-table__cell--no-toolbar");
                                t === dt.CryptoMkt && i.push("tv-screener-table__cell--crypto_mkt");
                                return i
                            }(h, l)), r
                        },
                        widthChange: n,
                        visibilityChange: u,
                        table_style: d,
                        noDataString: e._noDataString,
                        isUnavailableWidgetMarket: e._isUnavailableWidgetMarket,
                        disableStickyHeader: i,
                        onRowBuild: (t, o) => {
                            const i = e._selectableList;
                            "chart" === p && Er.linking.proSymbol.value() === o.s && i && (e._setActiveElem(t), i.focusItem(t)), r.beforeAppendSymbol(o.s, t)
                        },
                        onUpdate: () => {
                            const t = e._selectableList;
                            t && t.restore()
                        }
                    },
                    m = { ...g,
                        sortable: !0,
                        addTableClasses: ["tv-screener-table"],
                        addTheadRowClasses: ["tv-data-table__stroke", "tv-screener-table__head"],
                        addRowClasses: () => ["tv-data-table__stroke", "tv-screener-table__result-row"],
                        addRowAttrs: e => ({
                            "data-symbol": e.s
                        }),
                        addStickyHeaderWrapperClasses: ["tv-screener-sticky-header-wrapper"],
                        addDraggingThClasses: ["tv-screener-table__th--dragging"],
                        addDraggingColClasses: ["tv-screener-table__col--dragging"]
                    },
                    v = new gr(m);
                return v.setFields({
                    name: {
                        title: c.t(null, void 0, o(905791))
                    }
                }), v
            }! function(e) {
                e.Center = "center", e.Right = "right"
            }(Dr || (Dr = {}));
            var Ir, Pr = o(486393);

            function Br(e) {
                const {
                    view: t
                } = e;
                return t._bridge.hide_controls ? Promise.resolve() : Ei(e, Rr, Fi.Header)
            }

            function Rr(e, t) {
                const {
                    fieldKey: o
                } = e, i = t.default, r = Ue[o], n = { ...e,
                    field: r
                };
                return { ...Lr(n, i),
                    ...Or(n, i),
                    ...Wr(n, i),
                    ...Nr(n, i)
                }
            }

            function Lr(e, t) {
                const {
                    view: i,
                    fieldKey: n
                } = e;
                if ("name" !== n) return {};
                const s = new t({
                        actionId: "Screener.ToggleVisibility.Description",
                        options: {
                            label: !Ue.description.disabled && Ue.description.checked ? c.t(null, void 0, o(838716)) : c.t(null, void 0, o(2948)),
                            disabled: Ue.description.disabled,
                            onExecute: () => {
                                const e = !Ue.description.checked;
                                Ue.description.checked = e, i.table.update(i._data), i.$fieldSetsButton.toggleClass("tv-screener-toolbar__button--unsaved", i._model.isFieldSetChanged()), (0, Yt.sendSnowPlowData)(new Ii.DispatchContextMenuActionEvent(Ir.ToggleDescription, "header", e))
                            }
                        }
                    }),
                    l = new t({
                        actionId: "Screener.ToggleVisibility.SymbolType",
                        options: {
                            label: !Ue.type.disabled && Ue.type.checked ? c.t(null, void 0, o(750892)) : c.t(null, void 0, o(907661)),
                            disabled: Ue.type.disabled,
                            onExecute: () => {
                                const e = !Ue.type.checked;
                                Ue.type.checked = e, i.table.update(i._data), i.$fieldSetsButton.toggleClass("tv-screener-toolbar__button--unsaved", i._model.isFieldSetChanged()), (0, Yt.sendSnowPlowData)(new Ii.DispatchContextMenuActionEvent(Ir.ToggleSymbolType, "header", e))
                            }
                        }
                    }),
                    a = !["forex", "crypto"].includes(i._model.screener_type),
                    d = new t({
                        actionId: "Screener.ToggleVisibility.Currency",
                        options: {
                            label: ar() ? c.t(null, void 0, o(645946)) : c.t(null, void 0, o(557413)),
                            onExecute: () => {
                                const e = !ar();
                                var t;
                                t = e, r.setValue(lr, t), i.table.update(i._data), (0, Yt.sendSnowPlowData)(new Ii.DispatchContextMenuActionEvent(Ir.ToggleShowCurrency, "header", e))
                            }
                        }
                    });
                return { ...a ? {
                        toggleCurrencyDisplayAction: d
                    } : null,
                    toggleDescriptionAction: s,
                    toggleSymbolTypeAction: l
                }
            }

            function Or(e, t) {
                const {
                    view: i,
                    fieldKey: r,
                    field: n
                } = e;
                if ("name" === r) return {};
                return {
                    removeColumnAction: new t({
                        actionId: "Screener.Column.Remove",
                        options: {
                            label: c.t(null, void 0, o(433500)),
                            onExecute: () => {
                                n.checked = !1;
                                const e = i._table.fieldsOrder.filter((e => e !== r));
                                i._model.fieldSetChanged.fire(e.filter((e => Ue[e] && !0 !== Ue[e].disabled && !0 !== Ue[e].hiddenColumn))), i._model.update(), i.$fieldSetsButton.toggleClass("tv-screener-toolbar__button--unsaved", i._model.isFieldSetChanged()), (0, Yt.sendSnowPlowData)(new Ii.DispatchContextMenuActionEvent(Ir.RemoveColumn, "header", r))
                            }
                        }
                    })
                }
            }

            function Wr(e, t) {
                const {
                    view: i,
                    fieldKey: r,
                    field: n,
                    e: s
                } = e, l = s.currentTarget || s.target, a = new t({
                    actionId: "Screener.Filter.Reset",
                    options: {
                        label: c.t(null, void 0, o(357670)),
                        onExecute: () => {
                            i.resetFilter(r), (0, Yt.sendSnowPlowData)(new Ii.DispatchContextMenuActionEvent(Ir.ResetFilter, "header", r))
                        }
                    }
                }), d = new t({
                    actionId: "Screener.Filter.Change",
                    options: {
                        label: c.t(null, void 0, o(577779)),
                        onExecute: () => {
                            const e = Pr(l).closest("th");
                            i.showInplaceEditor(r, e), s.stopPropagation(), (0, Yt.sendSnowPlowData)(new Ii.DispatchContextMenuActionEvent(Ir.ChangeFilter, "header", r))
                        }
                    }
                });
                if (n.control) {
                    i.fieldValueString(r) || a.update({
                        disabled: !0
                    })
                } else a.update({
                    disabled: !0
                }), d.update({
                    disabled: !0
                });
                return {
                    resetFilterAction: a,
                    changeFilterAction: d
                }
            }

            function Nr(e, t) {
                const {
                    view: i,
                    fieldKey: r,
                    field: n
                } = e;
                if (!n.hasOwnProperty("displaySignal")) return {};
                const {
                    displaySignal: s
                } = n;
                return {
                    toggleSignalAction: new t({
                        actionId: "Screener.ToggleVisibility.Rating",
                        options: {
                            label: s ? c.t(null, void 0, o(219445)) : c.t(null, void 0, o(59823)),
                            onExecute: () => {
                                i._table.toggleSignals(r), (0, Yt.sendSnowPlowData)(new Ii.DispatchContextMenuActionEvent(Ir.ToggleSignal, "header", !s))
                            }
                        }
                    })
                }
            }! function(e) {
                e.ActiveOnly = "active_only", e.ToggleDescription = "show_description", e.ToggleSymbolType = "show_symbol_type", e.TogglePrimaryOnly = "show_primary_only", e.RemoveColumn = "remove_column", e.ResetFilter = "reset_filter", e.ChangeFilter = "change_filter", e.ToggleSignal = "show_rating", e.ToggleShowCurrency = "toggle_show_currency"
            }(Ir || (Ir = {}));
            var Vr = o(162469),
                jr = o(35387),
                qr = o(67905),
                Ur = o(491540),
                Hr = o(486393);
            const zr = o(583912).linking;
            o(637152);
            const {
                Delegate: Gr
            } = o(942634), Kr = o(338619).getLogger("Screener.View"), {
                operators: Xr,
                fields: Yr
            } = o(8142), Zr = c.t(null, {
                context: "forex_screener_pairs_select"
            }, o(567132)), Jr = c.t(null, void 0, o(580066)), Qr = c.t(null, void 0, o(882675)), en = o(182951), tn = o(891250), on = [-1, 10, 60], rn = [-1, 1], nn = {
                bonds: {
                    yields: c.t(null, {
                        context: "Bonds"
                    }, o(393630)),
                    prices: c.t(null, {
                        context: "Bonds"
                    }, o(290229))
                },
                crypto_mkt: {
                    USD: "USD",
                    BTC: "BTC"
                }
            }, sn = `<div class="tv-screener-table__search-query js-search-query ${Ue.description.disabled||!Ue.description.checked?"tv-screener-table__search-query--without-description":""}">\n\t\t<input\n\t\t\ttype="text"\n\t\t\tautocomplete="off"\n\t\t\tclass="tv-screener-table__search-input js-search-input"\n\t\t/>\n\t\t<span class="tv-search-bar__search-icon tv-screener-table__search-icon">${o(62555)}</span>\n\t\t<span class="tv-search-bar__input-reset tv-screener-table__input-reset i-hidden js-input-reset">${o(83170)}</span>\n\t</div>`;
            class ln {
                constructor(e, t) {
                    this._bridge = e, this._model = t, this._onWidget = e.onWidget, this._activeElem = null, this._changeSymbol = (0, Lt.default)(this._changeSymbol, 500), this._lifecycle = new Do, this.sortedFields = Object.keys(Ue).filter((e => Boolean(ct(Ue[e])))), this._popups = new ho(t, this, e), this._dialog = new xo(t, this, e), this._disableStickyHeader = this._bridge.disableStickyHeader, this._periodPicker = e.period_picker, this._noDataString = e.no_data_string, this._isUnavailableWidgetMarket = e.isUnavailableWidgetMarket, this._periodPickerButtons = [{
                        id: "yesterday",
                        title: c.t(null, void 0, o(943320))
                    }, {
                        id: "today",
                        title: c.t(null, void 0, o(205935))
                    }, {
                        id: "tomorrow",
                        title: c.t(null, void 0, o(315404))
                    }, {
                        id: "this_week",
                        title: c.t(null, void 0, o(847228))
                    }, {
                        id: "next_week",
                        title: c.t(null, void 0, o(116468))
                    }];
                    const i = "undefined" === this._model.settingKey ? this._model.screener_type : this._model.settingKey;
                    this._fields_order = this._model.settingsSaver.getJSON(i + ".fields_order", []), this._data = [], this._lastSetId = null, this.widthChange = new Gr, this._bridge.width && this._bridge.width.subscribe((() => {
                        this.widthChange.fire()
                    })), this._$groupSelect = null, this._preventHighlightChanges = !1, this._table = $r(this), this._model.fieldSetChanged.subscribe(null, (e => {
                        const t = {};
                        e.forEach((e => {
                            t[e] = Ue[e]
                        })), this._table.setFields(t)
                    })), this._model.filterSetChanged.subscribe(null, (() => {
                        this.$filterSetsButton.toggleClass("tv-screener-toolbar__button--unsaved", this._model.isFilterSetChanged())
                    })), this._table.fieldsOrderChange.subscribe(null, (() => {
                        this._model.fieldsOrder.setValue(this._table.fieldsOrder), this.$fieldSetsButton.toggleClass("tv-screener-toolbar__button--unsaved", this._model.isFieldSetChanged()), this._model.settingsSaver.setJSON(i + ".fields_order", this._table.fieldsOrder, {
                            forceFlush: !0
                        })
                    }));
                    let r = 0,
                        n = !1;
                    this._model.loadingStart.subscribe(null, (e => {
                        e ? (n = !0, this._bridge.standalone && (r = Hr(document).scrollTop()), this._showSpinner(this.$bottomLoadingScreen)) : (r = 0, this._model.isFastRefresh || this._showSpinner())
                    })), this._model.loadingStart.subscribe(null, (() => this.resetRefreshCounter(!0))), this._model.loadingComplete.subscribe(null, (() => {
                        n && this._bridge.standalone && 0 !== r && Hr(document).scrollTop() !== r ? (n = !1, Hr(document).scrollTop(r), r = 0) : this._bridge.standalone && this._isScrollBottom() && Hr(document).scrollTop(Hr(document).scrollTop() / 2), this._hideSpinner(), this.resetRefreshCounter()
                    })), this._model.eodRestriction.subscribe((() => this.updateIntervalButton()), {
                        callWithLast: !0
                    }), window.loginStateChange && window.loginStateChange.subscribe(null, (() => {
                        if (this.resetRefreshCounter(), "forex" === this._model.screener_type) {
                            const e = this._model.selectedGroups;
                            Ue.sector.value = Array.isArray(e) && e[0] === c.t(null, void 0, o(882675)) ? null : e, this._$groupSelectButton && (this._$groupSelectButton.empty(), this.updateGroupsButton(this._$groupSelectButton, e))
                        }
                    })), this._bridge.standalone && Hr(window).on("scroll", (() => {
                        Hr(".js-dropdown-toggle.i-opened").trigger("resetPosition")
                    }));
                    const s = (0, Lt.default)((() => {
                            this._tempBusy = !1
                        }), 250),
                        l = () => {
                            this._tempBusy || (this._tempBusy = !0), s()
                        };
                    this._bridge.standalone && Hr(window).on("scroll", l), Hr(window).on("resize", l), this.widthChange.subscribe(this, l), this._bridge.standalone || this._model.loadingComplete.subscribe(null, (() => {
                        this.isEndReached() ? (this.$content.addClass("tv-screener__content-pane--fully-loaded"), this._table.$element.css("margin-bottom", -this._contentPadding)) : (this.$content.removeClass("tv-screener__content-pane--fully-loaded"), this._table.$element.css("margin-bottom", ""))
                    })), TradingView.onChartPage && $o.subscribe("screener.selected_type_on_chart", (e => {
                        this._model.changeScreenerType(e).then((() => {
                            this._lastSetId = null, this._popups.setMarketsList((0, d.getMarketsByScreenerType)(this._model.screener_type)), "forex" === this._model.screener_type ? this._$groupSelect.removeClass("i-hidden") : this._$groupSelect.addClass("i-hidden"), this.updateIntervalButton(this._$selectIntervalButton, this._model.selectedIntervalId), this._popups.updateRefreshIntervalsPopupContent()
                        })).then((() => this.updateMarketButton())).catch((e => {
                            e && Kr.logError(e)
                        }))
                    }))
                }
                getSelectedSymbols() {
                    return this._selectableList ? this._selectableList.getSelectedKeys() : []
                }
                getFocusedSymbol() {
                    if (this._selectableList) return this._selectableList.getFocusedKey()
                }
                registerHooksHandlers(e) {
                    this._lifecycle.registerHandlers(e)
                }
                _isScrollBottom() {
                    return Hr(window).scrollTop() + Hr(window).height() === Hr(document).height()
                }
                _initSelectableList() {
                    this._selectableList = (0, Wt.createSelectableList)({
                        list: this.$content.get(0),
                        listItemClass: "tv-screener-table__result-row",
                        selectedListItemClass: "tv-screener-table__result-row--selected",
                        focusedListItemClass: "tv-screener-table__result-row--focused",
                        onNavigate: this._onSymbolsNavigate.bind(this),
                        onConfirm: this._onSymbolConfirm.bind(this),
                        getNodeKey: e => e.dataset.symbol
                    })
                }
                _getThContent(e, t) {
                    t || (t = Ue[e]);
                    const i = vi(e, t) ? Hr(`<div class="tv-screener-table__head-wrap js-head-wrap apply-common-tooltip common-tooltip-fixed" title="${t.title}" data-field="${e}">`) : Hr(`<div class="tv-screener-table__head-wrap js-head-wrap" data-field="${e}">`);
                    t.disableHeaderControl && i.addClass("tv-screener-table__head-wrap--disable-interaction");
                    const r = Hr('<div class="tv-screener-table__head-left js-head-left"></div>').appendTo(i),
                        n = Hr('<div class="tv-screener-table__head-left--text"></div>').appendTo(r),
                        s = Hr(`<div class="js-head-title">${t.shortTitle||t.title}</div>`).appendTo(n);
                    e === this._model.searchField && r.addClass(!Ue.description.disabled && Ue.description.checked ? "tv-screener-table__head-left--name-col" : this._onWidget ? "tv-screener-table__head-left--widget-name-col-without-description" : "tv-screener-table__head-left--name-col-without-description");
                    const l = Hr(`<span class="tv-screener-table__sort js-table-sort ${this._model._sortField.value()===e?`tv-screener-table__sort--${this._model._sortDirection.value()}`:""}">${"asc"===this._model._sortDirection.value()?en:tn}</span>`);
                    if (e === this._model.searchField) {
                        let e;
                        e = this._totalCount ? this._bridge.hide_load_more && this._bridge.page_size && this._totalCount >= this._bridge.page_size ? c.t(null, {
                            plural: "{number} matches",
                            count: this._bridge.page_size
                        }, o(646182)).format({
                            number: this._bridge.page_size
                        }) : c.t(null, {
                            plural: "{number} matches",
                            count: this._totalCount
                        }, o(646182)).format({
                            number: this._totalCount
                        }) : c.t(null, void 0, o(681982)), Hr(`<div class="js-field-total tv-screener-table__field-value--total">${e}</div>`).appendTo(r), this._onWidget || Hr(sn).appendTo(r)
                    }
                    let a = !1;
                    if (t.control && !this._bridge.hide_controls) {
                        const t = Hr(`<i data-field="${e}" class="js-filter-button tv-screener-table__filter-button">${o(630001)}</i>`);
                        t.appendTo(i);
                        if (this.fieldValueString(e)) {
                            t.addClass("tv-screener-table__filter-button--active");
                            const o = Hr(`<span class="js-field-value tv-screener-table__field-value apply-overflow-tooltip${"name"===e?" tv-screener-table__field-value--name":""}">${this.fieldValueString(e)}</span>`);
                            r.append(o), a = !0
                        }
                    }
                    return l.appendTo(i), s.addClass(a ? "tv-screener-table__head-left--title-two-lines" : "tv-screener-table__head-left--title-three-lines"), i
                }
                _updateTableSortField() {
                    const e = this._model._sortField.value(),
                        t = this._model._sortDirection.value();
                    this._table.updateSortField(e, t)
                }
                setFieldActive(e, t, o) {
                    this._dialog.$filtersPopup && (o || (o = this._dialog.$filtersPopup.find(`.js-filter-field-${e.replace(/\W/g,"")}`)), o && o.size() && o.toggleClass("tv-screener-dialog__filter-field--active", t))
                }
                _resetSearchCount() {
                    const e = this._getThContent(this._model.searchField).find(".js-field-total").text();
                    this._table.setSearchText(e)
                }
                _resetField(e) {
                    this.setFieldActive(e, this._model.fieldActive(e));
                    const t = this._getThContent(e);
                    if ("name" === e && this._lifecycle.beforeAppendSymbolsHeader(t.get(0)), this._table.setThContent(e, t), !this._dialog.$filtersPopup && this.$inplaceEditor && e === this._inplaceEditorField) {
                        const t = !this._isFilterValueEmpty(e),
                            o = this.$inplaceEditor.find(".js-reset"),
                            i = this.$inplaceEditor.find(".js-wrap");
                        t ? (o.removeClass("i-hidden"), i.removeClass("tv-screener-inplace-editor__filter-without-reset"), this.$inplaceEditor.removeClass("tv-screener-inplace-editor__without-reset")) : (o.addClass("i-hidden"), i.addClass("tv-screener-inplace-editor__filter-without-reset"), this.$inplaceEditor.addClass("tv-screener-inplace-editor__without-reset"))
                    }
                }
                _setupStickyHeader() {
                    if (this._disableStickyHeader) return;
                    const e = this._table.$stickyHeader;
                    e.insertBefore(this.$content);
                    const t = Hr('<span class="tv-screener-sticky-header-wrapper__right-substrate"></span>').prependTo(this.$content);
                    let r = Math.round(this.$toolbar.outerHeight());
                    if (new ResizeObserver((() => this.onResizeToolbar())).observe(this.$toolbar[0]), (0, yi.isMarketPage)(this._bridge)) ki(this);
                    else if (this._bridge.standalone) {
                        const o = 148;
                        let i;
                        this.$toolbar.toggleClass("tv-screener-toolbar--standalone_sticky", !0).css({
                            top: o
                        }), this._bridge.$body.css({
                            "padding-top": r
                        }), e.css({
                            top: r
                        });
                        const n = (i, n) => {
                                n || (n = Hr(document).scrollTop()), this._bridge.$body.css({
                                    "padding-top": r
                                }), this.$toolbar.css({
                                    top: i ? 0 : o - n
                                }), e.css({
                                    top: r
                                }), t.css({
                                    top: i ? r : 0
                                })
                            },
                            s = e => Hr(document).scrollTop() - (this.$content.offset().top - e) > 0;
                        Hr(document).on("scroll", (() => {
                            r = Math.round(this.$toolbar.outerHeight());
                            const o = Hr(document).scrollTop(),
                                l = Hr(document).scrollLeft();
                            let a;
                            this._onWidget || (a = s(r), n(a, o), this._$mainContainer.css("top", -o)), e.toggleClass("tv-screener-sticky-header-wrapper--standalone_sticky", a);
                            const c = (0, Xt.isRtl)() ? document.body.clientWidth - this.$content[0].getBoundingClientRect().right : -l;
                            e.css({
                                [(0, Xt.isRtl)() ? "right" : "left"]: a ? c : "auto"
                            }), t.toggleClass("tv-screener-sticky-header-wrapper__right-substrate--standalone_sticky", a), i !== a && this.updateToolbarButtons(), i = a, this.$bottomLoadingScreen.css({
                                left: l
                            })
                        })), Hr(window).on("resize", (() => {
                            this.fixStandaloneWidth(), r = Math.round(this.$toolbar.outerHeight());
                            const e = s(r);
                            n(e),
                                this.onResizeToolbar()
                        })), this.fixStandaloneWidth(), this._table.afterFixCols.subscribe(null, (() => {
                            this.fixStandaloneHorizontalScroll()
                        }))
                    } else {
                        this._bridge.$body.css({
                            overflow: "hidden"
                        });
                        let o = !1,
                            r = !1;
                        this.onResizeToolbar();
                        const n = () => {
                            const o = Math.round(e.outerHeight());
                            t.css({
                                top: -o
                            }), this.$content.css({
                                top: o
                            }), this._table.$element.css({
                                top: -o,
                                position: "relative"
                            })
                        };
                        (TradingView.onChartPage || this._onWidget) && n(), this.$content.on("scroll", (() => {
                            (0, i.hide)(), Eo.PopupColorSelector.hide(), (0, Xt.isRtl)() ? e.css("right", -(this.$content[0].scrollWidth - this.$content[0].clientWidth - (0, Xt.getLTRScrollLeft)(this.$content[0]))) : e.css("left", -this.$content.scrollLeft()), this._onWidget && this._bridge.hide_controls && e.css({
                                top: 0
                            })
                        })), TradingView.onChartPage && Hr(document).on("scroll", (() => {
                            window.innerWidth <= Ot.breakpoints.tablet && (o = this.$content.get(0).getBoundingClientRect().top < 0), e.toggleClass("tv-screener-sticky-header-wrapper--standalone_sticky", o), r !== o && e.css({
                                left: o ? -this.$content.scrollLeft() : 0
                            }), r = o
                        }))
                    }
                    this._bridge.hide_controls || (this.$headerFieldsButton = Hr(`<div class="tv-screener-sticky-header-wrapper__fields-button apply-common-tooltip common-tooltip-vertical common-tooltip-otl" title="${c.t(null,void 0,o(156194))}">\n\t\t\t\t${o(407499)}\n\t\t\t</div>`).appendTo(e), this.$headerFieldsButton.attr({
                        "data-name": "header_fields-button"
                    }), this._popups.setFieldsPopup(this.$headerFieldsButton, "tv-screener-sticky-header-wrapper__fields-button-wrap", "tv-dropdown__body--position_right")), this._model.loadingComplete.subscribe(null, (() => {
                        t.show()
                    }), !0)
                }
                _showSpinner(e = this.$loadingScreen) {
                    e.removeClass("js-hidden"), clearTimeout(this._spinnerTimeoutId), this._spinner || (this._spinnerTimeoutId = setTimeout((() => {
                        this._spinner = (new Fo.Spinner).spin(e.get(0))
                    }), 100))
                }
                _hideSpinner() {
                    this.$loadingScreen.addClass("js-hidden"), this.$bottomLoadingScreen.addClass("js-hidden"), clearTimeout(this._spinnerTimeoutId), this._spinner && (this._spinner.stop(), delete this._spinner)
                }
                _getResizerBridgeWidth() {
                    return window.widgetbar ? (0, _i.getWidgetBarPadding)(window.widgetbar.resizerBridge.width.value()) : 0
                }
                fixStandaloneWidth() {
                    if (this._bridge.standalone) {
                        this._bridge.$body.css({
                            "padding-right": "",
                            "padding-left": ""
                        });
                        const e = this._getResizerBridgeWidth(),
                            t = (0, Xt.isRtl)() ? "padding-left" : "padding-right";
                        this.$toolbar.width(Hr(window).width() - e), this._$mainHeader.css({
                            [t]: e
                        }), this.updateToolbarButtons(), this._table && this._table._$emptyMessage && !(0, yi.isMarketPage)(this._model._bridge) && this._table._$emptyMessage.css({
                            width: `calc(100% - ${e}px`
                        }), this.widthChange.fire()
                    }
                }
                fixStandaloneHorizontalScroll() {
                    if (this._bridge.standalone) {
                        const e = this._getResizerBridgeWidth(),
                            t = this._table.$element.width() + ((0, Xt.isRtl)() ? 0 : e),
                            o = Hr(window).width() < t,
                            i = (0, Xt.isRtl)() ? "padding-left" : "padding-right";
                        this._bridge.$body.css({
                            [i]: o ? t : ""
                        }), this.$toolbar.width(Hr(window).width() - e), this.updateToolbarButtons()
                    }
                }
                prepareLayout() {
                    this._bridge.$body.addClass("tv-screener" + (this._bridge.standalone ? " tv-screener--standalone" : "")),
                        this.$loadingScreen = Hr(`<div class="tv-screener__loading-screen${this._bridge.standalone&&!this._bridge.table_loading_screen?" tv-screener__loading-screen--standalone":""}">`).appendTo(this._bridge.$body), this.$toolbar = Hr(`<div class="tv-screener-toolbar${this._bridge.standalone?" tv-screener-toolbar--standalone":""} ${this._disableStickyHeader?"tv-screener-toolbar--markets":""}">`).appendTo(this._bridge.$body), this.$toolbar.on("contextmenu", (function(e) {
                            e.preventDefault()
                        })), Hr(".tv-screener__content-pane").remove(), this.$content = Hr('<div class="tv-screener__content-pane" tabindex="100">').data({
                            localScroll: !this._bridge.standalone
                        }).appendTo(this._bridge.$body), this.$content.on("contextmenu", (function(e) {
                            e.target.classList.contains("tv-screener__content-pane") && e.preventDefault()
                        })), this.$bottomLoadingScreen = Hr('<div class="tv-screener__bottom-loading-screen">').appendTo(this._bridge.$body), this._$mainContainer = Hr(".tv-screener__standalone-main-container"), this._$mainHeader = this._$mainContainer.find(".tv-header"), this._onWidget || (this.$refreshButton = Hr(`<div class="tv-screener-toolbar__button tv-screener-toolbar__button--with-options tv-screener-toolbar__button--refresh apply-common-tooltip common-tooltip-fixed" title="${c.t(null,void 0,o(110430))}"></div>`).attr({
                            "data-name": "screener-refresh",
                            "data-role": "button"
                        }).append(Hr(o(820713)).attr({
                            class: "tv-screener-toolbar__button-icon tv-screener-toolbar__button-icon--standalone-refresh",
                            width: "18",
                            height: "18"
                        })).appendTo(this.$toolbar), this.$refreshCounter = Hr('<span class="tv-screener-toolbar__refresh-counter">').text("00:00").appendTo(this.$refreshButton), this.$refreshIntervalButton = Hr(`<div class="tv-screener-toolbar__button tv-screener-toolbar__button--options tv-screener-toolbar__button--space_right apply-common-tooltip common-tooltip-fixed" title="${c.t(null,void 0,o(754010))}"></div>`).attr({
                            "data-name": "screener-refresh-interval",
                            "data-role": "button"
                        }).append(Hr(o(407499)).attr({
                            width: 3,
                            height: 13,
                            class: "tv-screener-toolbar__button-icon",
                            style: "top: -1px"
                        })).appendTo(this.$toolbar));
                    const e = this._model.currentFieldSetId(),
                        t = this._model.getFieldSetById(e);
                    this.$fieldSetsButton = Hr(`<div class="tv-screener-toolbar__button tv-screener-toolbar__button--animated\n\t\t\ttv-screener-toolbar__button--with-options tv-screener-toolbar__button--arrow-down\n\t\t\ttv-screener-toolbar__button--with-state apply-common-tooltip common-tooltip-fixed js-field-sets" title=" ${c.t(null,void 0,o(559798))}">\n\t\t\t\t${t?t.title:""}\n\t\t\t</div>`).attr({
                            "data-name": "screener-field-sets",
                            "data-role": "button",
                            "data-field-set": e
                        }).appendTo(this.$toolbar), this.$fieldsButton = Hr(`<div class="tv-screener-toolbar__button tv-screener-toolbar__button--options\n\t\t\ttv-screener-toolbar__button--square apply-common-tooltip common-tooltip-fixed\n\t\t\ttv-screener-toolbar__button--space_right" title=" ${c.t(null,void 0,o(156194))}">`).attr({
                            "data-name": "screener-fields",
                            "data-role": "button"
                        }).append(Hr(o(944499)).attr({
                            class: "tv-screener-toolbar__button-icon"
                        })).appendTo(this.$toolbar),
                        this.$favoritesBar = Hr('<div class="tv-screener-toolbar__favorites">').appendTo(this.$toolbar), this.$periodPicker = Hr('<div class="tv-screener-toolbar__period-picker">').appendTo(this.$toolbar);
                    const i = nn[this._model.screener_type];
                    i && (this._createSwitch(i), this.$toolbar.addClass("tv-screener-toolbar--one-line"));
                    const r = this._model.currentFilterSetId(),
                        n = this._model.getFilterSetById(r);
                    this.$filterSetsButton = Hr(`<div class="tv-screener-toolbar__button tv-screener-toolbar__button--with-options\n\t\t\ttv-screener-toolbar__button--arrow-down tv-screener-toolbar__button--with-state\n\t\t\tapply-common-tooltip common-tooltip-fixed js-filter-sets" title="${c.t(null,void 0,o(196428))}">`).attr({
                        "data-name": "screener-filter-sets",
                        "data-role": "button",
                        "data-filter-set": r
                    }).appendTo(this.$toolbar), this.$filterSetsButtonTitle = Hr(`<span>${n?n.title:""}</span>`).appendTo(this.$filterSetsButton), this.$filtersButton = Hr(`<div class="tv-screener-toolbar__button tv-screener-toolbar__button--options tv-screener-toolbar__button--filters apply-common-tooltip i-disabled common-tooltip-fixed" title="${c.t(null,void 0,o(54494))}">${c.t(null,void 0,o(846994))}</div>`).attr({
                        "data-name": "screener-filter",
                        "data-role": "button"
                    }).append(Hr(o(630001)).attr({
                        class: "tv-screener-toolbar__button-icon tv-screener-toolbar__button-icon--filters"
                    })).appendTo(this.$toolbar), this._model.loadingComplete.subscribe(null, (() => {
                        this.$filtersButton.removeClass("i-disabled")
                    }), !0);
                    const s = Hr('<div class="tv-screener-toolbar__filter-count-wrap">').on("click", (() => {
                        this.showActiveFilters(), (0, Yt.sendSnowPlowData)(new go("filter_counter_button", this._getFiltersCounterValue()))
                    })).appendTo(this.$toolbar);
                    if (this.$filterCount = Hr(`<span class="tv-screener-toolbar__filter-count js-hidden apply-common-tooltip common-tooltip-vertical common-tooltip-otl" title="${c.t(null,void 0,o(200803))}">`).attr({
                            "data-name": "screener-filter-count",
                            "data-role": "button"
                        }).appendTo(s), this._table.$element.appendTo(this.$content), this.initHandlers(), this._bridge.selection_disabled || this._initSelectableList(), this._onWidget && this._bridge.hide_controls && (this._contentPadding = this.$content.innerHeight() - this.$content.height(), this.$content.css("height", `calc(100% - ${this._contentPadding}px)`), this.$toolbar.hide()), this._bridge.hide_controls)[this.$refreshButton, this.$refreshIntervalButton, this.$fieldSetsButton, this.$fieldsButton, this.$filterSetsButton, this.$filtersButton, this.$filterCount].forEach((e => {
                        e && e.hide()
                    })), this._onWidget && (this._bridge.$body.addClass("tv-screener--hidden-toolbar"), this.$loadingScreen.addClass("tv-screener__loading-screen--hidden-toolbar"));
                    else {
                        this._onWidget || (this._$selectIntervalButton = this.addIntervalSelect({
                            $before: this.$filterSetsButton
                        }).attr({
                            "data-name": "screener-time-interval",
                            "data-role": "button"
                        }), this._$downloadButton = Hr(`<div class="tv-screener-toolbar__button tv-screener-toolbar__button--space_right tv-screener-toolbar__button--export apply-common-tooltip common-tooltip-fixed i-disabled" title="${c.t(null,void 0,o(301093))}"></div>`).attr({
                            "data-name": "screener-export-data",
                            "data-role": "button"
                        }).append(Hr(o(764162)).attr({
                            class: "tv-screener-toolbar__button-icon tv-screener-toolbar__button-icon--export"
                        })), this._$downloadButton.insertBefore(this._$selectIntervalButton), this._$downloadButton.on("click", (e => {
                            (0, Nt.runOrGoPro)((() => {
                                this._$downloadButton.toggleClass("i-loading", !0), this._model.getDownloadData().then((e => {
                                    const [t, ...o] = this._table.columnsOrder, i = [t, "description", ...o];
                                    try {
                                        const t = function(e, t, o, i) {
                                                const r = new Map,
                                                    n = [];
                                                for (const e of t) n.push(Ue[e].title), r.set(e, ri(o, e));
                                                const s = [n];
                                                for (const t of e) {
                                                    const e = [];
                                                    for (const [n, s] of Array.from(r.entries())) {
                                                        const r = Ue[n],
                                                            l = t.d[s];
                                                        if (null === l) e.push("");
                                                        else if (ti.includes(n)) e.push((0, O.triesTranslateScreenerData)(l));
                                                        else if ("earnings_release_date" === n || "earnings_release_next_date" === n) {
                                                            const t = nt(r, i, !1);
                                                            e.push(t.format(l))
                                                        } else if (r.signalComputation) ii.includes(n) ? e.push(r.signalComputation(l).title) : e.push(l.toString());
                                                        else {
                                                            const i = r.additionalColumns ? r.additionalColumns.map((e => t.d[ri(o, e)])) : [];
                                                            if (r.mutateDisplayValue && !oi.includes(n)) e.push(r.mutateDisplayValue(l, ...i, n));
                                                            else if ("candlestick" === n && r.additionalColumns) {
                                                                const {
                                                                    additionalColumns: t
                                                                } = r, o = si(i);
                                                                if (0 === o.length) e.push("");
                                                                else {
                                                                    const i = o.map((e => t[e])).map(li).filter(Boolean).map((e => e.name)).join(", ");
                                                                    e.push(i)
                                                                }
                                                            } else e.push(l.toString())
                                                        }
                                                    }
                                                    s.push(e)
                                                }
                                                return s
                                            }(e.data, i, this._model.getRequestColumns(), this._model.screener_type),
                                            o = t.map(ni).join("\r\n"),
                                            r = ci.dateFormatFunctions["yyyy-MM-dd"](new Date, !0),
                                            n = `${this._model.markets.join("_")}_${r}.csv`;
                                        (0, Ao.saveTextFile)(n, o, "text/csv")
                                    } catch (e) {
                                        Kr.logError(e.toString())
                                    }
                                    this._$downloadButton.toggleClass("i-loading", !1), this._model.trackEvent("Export screener data")
                                }))
                            }), Kt.ProductFeaturesEnum.SCREENER_EXPORT_DATA, {
                                feature: "screenerExportData"
                            }), (0, Yt.sendSnowPlowData)(new ui)
                        })), this._model.loadingComplete.subscribe(null, (() => {
                            this._$downloadButton.removeClass("i-disabled")
                        }), !0));
                        const e = this.addMarketSelect({
                                $before: this.$filterSetsButton
                            }),
                            t = Hr('<div class="tv-screener-toolbar__market-count-wrap">').on("click", (() => {
                                this._showMarketsDialog()
                            }));
                        this.$marketCount = Hr(`<span class="tv-screener-toolbar__filter-count tv-screener-toolbar__filter-count--market-count js-hidden apply-common-tooltip common-tooltip-vertical common-tooltip-otl" title="${c.t(null,void 0,o(482673))}">`).attr({
                            "data-name": "screener-market-count",
                            "data-role": "button"
                        }).appendTo(t), Hr(e).after(t), this._$groupSelectButton = this.addGroupSelect({
                            $before: this.$filterSetsButton
                        }), this._popups.setFieldsPopup(this.$fieldsButton, "tv-screener-toolbar__button-wrap"), this._popups.setFieldSetsPopup(this.$fieldSetsButton), this._popups.setFilterSetsPopup(this.$filterSetsButton), this._onWidget || this._popups.setRefreshIntervalsPopup(this.$refreshIntervalButton)
                    }
                    var l;
                    (l = this._model.timezone) && l !== V && (V = l), this._periodPicker ? (et(), this._selectedPeriodId = "today", this._setNewEarningsPeriod(this._selectedPeriodId), this.updatePeriodPicker(), this.$favoritesBar.hide(), Ue.earnings_release_next_date.onFilterChange = e => {
                        const t = this._periodPickerButtons.find((t => t.title === e));
                        this.changeEarningsPeriod(t ? t.id : "", !0)
                    }) : this.$periodPicker.hide(), this._showSpinner(), this.updateToolbarButtons(), this.onResizeToolbar()
                }
                onResizeToolbar() {
                    if (this._disableStickyHeader) return;
                    if (this._table.$stickyHeader.position().top < 0) return;
                    const e = Math.round(this.$toolbar.outerHeight());
                    (0, yi.isExternalWidget)(this._bridge) && this._bridge.hide_controls ? this._table.$stickyHeader.css({
                        top: 0
                    }) : this._table.$stickyHeader.css({
                        top: e
                    })
                }
                showMaintenance() {
                    this._bridge.$body.html(`<div class="tv-screener__maintenance">${c.t(null,void 0,o(673937))}</div>`)
                }
                initHandlers() {
                    this.$toolbar.on("hover", this.adjustToolbarWidth.bind(this)), this.$fieldSetsButton.on("transitionend", this.updateToolbarButtons.bind(this));
                    const e = e => {
                        const t = e.data("field");
                        if (!1 === Ue[t].sortableColumn) return;
                        const o = this._model._sortField.value(),
                            i = this._model._sortDirection.value();
                        Ue[t].disableHeaderControl || (o === t && this._model._sortDirection.setValue("asc" === i ? "desc" : "asc"), this._model._sortField.setValue(t), this._model.update())
                    };
                    if (a.mobiletouch) {
                        (new Po).load().then((t => {
                            const o = new t(Hr(".tv-screener")[0], {
                                touchAction: "auto"
                            });
                            o.get("press").set({
                                time: 500
                            }), o.on("press", (e => {
                                const t = Hr(e.target).closest(".js-head-wrap");
                                if (t.length) {
                                    Br({
                                        view: this,
                                        fieldKey: Hr(t).data("field"),
                                        e: e.srcEvent
                                    })
                                }
                                e.preventDefault()
                            })), o.on("tap", (t => {
                                if (Hr(t.target).closest(".js-search-input").length) return;
                                const o = Hr(t.target).closest(".js-head-wrap");
                                o.length && e(o)
                            }))
                        }))
                    } else Hr(".tv-screener").on("click", ".js-head-wrap", (t => {
                        const o = Hr(t.currentTarget);
                        e(o), t.stopPropagation()
                    })).on("contextmenu", ".js-head-wrap", (e => {
                        Br({
                            view: this,
                            fieldKey: Hr(e.currentTarget).data("field"),
                            e
                        }), e.preventDefault()
                    })), Hr(".tv-screener").on("click", ".js-filter-button", (e => {
                        const t = Hr(e.currentTarget).closest("th"),
                            o = t.data("field");
                        this.showInplaceEditor(o, t), e.stopPropagation()
                    }));
                    Hr(".tv-screener").on("click", ".js-search-input", (e => {
                            e.stopPropagation()
                        })), Hr(".tv-screener").on("click", ".js-input-reset", (e => {
                            Hr(e.currentTarget).addClass("i-hidden"), Hr(".tv-screener").find(".js-search-input").val(""), Ue[this._model.searchField].searchValue = "", this._model.update(), e.stopPropagation()
                        })), Hr(".tv-screener").on("click", ".js-filter-button", (e => {
                            const t = Hr(e.currentTarget).closest("th"),
                                o = t.data("field");
                            this.showInplaceEditor(o, t), e.stopPropagation()
                        })), this._bridge.table_context_menu_disabled || this._initTableContextMenu(), this.$content.on("scrolltoend", (e => {
                            this._model.loading || this._model.update(null, !0)
                        })), this.$refreshButton && this.$refreshButton.click((e => {
                            (0, di.runOrSignIn)((() => {
                                this._model.loading || this.refresh(), (0, Yt.sendSnowPlowData)(new so)
                            }), {
                                source: "Screener refresh button"
                            })
                        })), this.$filtersButton.click((() => {
                            this._dialog.showFiltersDialog(), (0, Yt.sendSnowPlowData)(new go("filter_button", this._getFiltersCounterValue()))
                        })), zr.proSymbol.subscribe((e => {
                            const t = this.$content.find(`[data-symbol="${e}"]`).get(0);
                            this._setActiveElem(t), this._selectableList && (t ? this._selectableList.focusItem(t) : this._selectableList.clear())
                        })),
                        this.$fieldSetsButton.on("click", (() => {
                            this._lastSetId = null
                        })), this.$toolbar.on("click", ".js-favorite-item", (e => {
                            const t = Hr(e.currentTarget).attr("data-set");
                            this._lastSetId !== t && (this._model.preventPrevScanRequest(), this.updateSetId(t, !1, this._bridge.hide_controls)), (0, Yt.sendSnowPlowData)(new Jt("columnset_favorites_picker", t))
                        })), this.$toolbar.on("click", ".js-period-picker-item", (e => {
                            const t = Hr(e.currentTarget).attr("data-period");
                            this.changeEarningsPeriod(t)
                        })), Hr(window).resize((e => this.updateToolbarButtons())), this._bridge.width && this._bridge.width.subscribe((() => this.updateToolbarButtons())), this._bridge.visible && this._bridge.visible.subscribe((e => {
                            e && (this.updateToolbarButtons(), this.adjustToolbarWidth())
                        })), this.updateFavoritesToolbar()
                }
                _initTableContextMenu() {
                    this.$content.on("contextmenu", ".tv-screener-table__result-row", (e => {
                        const t = Hr(e.currentTarget).data("symbol");
                        this._selectableList && this._selectableList.focusItem(e.currentTarget),
                            function(e) {
                                const t = (0, Mi.ticker)(e.symbol);
                                Ei({ ...e,
                                    shortName: t
                                }, Oi, Fi.Table)
                            }({
                                view: this,
                                symbol: t,
                                e
                            }), e.preventDefault()
                    }))
                }
                _onSymbolsNavigate(e) {
                    const t = e.cursor;
                    if (t) {
                        if (TradingView.onChartPage && this._setActiveElem(t), ["sector", "industry"].includes(this._model.screener_type)) return;
                        const e = t.dataset.symbol;
                        this._changeSymbol(e)
                    }
                }
                _changeSymbol(e) {
                    const t = zr.preventFeedBySymbol;
                    zr.setPreventFeedBySymbol(!0), zr.setSymbolAndLogInitiator(e, "screener"), zr.setPreventFeedBySymbol(t), this._model.trackEvent("Change symbol from table")
                }
                _setActiveElem(e) {
                    this._activeElem && this._activeElem.classList.remove("tv-screener-table__result-row--active"), e ? (e.classList.add("tv-screener-table__result-row--active"), this._activeElem = e) : this._activeElem = null
                }
                _onSymbolConfirm(e) {
                    e.items.forEach((t => {
                        const o = t.dataset.symbol;
                        o && this._lifecycle.afterSymbolConfirm(o, e.action)
                    }))
                }
                changeEarningsPeriod(e, t = !1) {
                    if (this._selectedPeriodId === e) return;
                    this._selectedPeriodId = e, this.updatePeriodPicker(), this._model.applyFieldSetContent(kt);
                    "tomorrow" === e || "next_week" === e ? (Ue.earnings_per_share_fq.mutateDisplayValue = () => tt, Ue.eps_surprise_fq.mutateDisplayValue = () => tt, Ue.eps_surprise_percent_fq.mutateDisplayValue = () => tt, Ue.revenue_fq.mutateDisplayValue = () => tt) : rt(), t || this._setNewEarningsPeriod(e, (() => {
                        this._resetField("earnings_release_next_date"), this._model.preventPrevScanRequest(), this._model.update()
                    }))
                }
                _setNewEarningsPeriod(e, t = (() => {})) {
                    const o = Ue.earnings_release_next_date.sourceRange.find((t => t.key === e));
                    o && (Ue.earnings_release_next_date.value = o.name, t())
                }
                get totalCount() {
                    return this._totalCount
                }
                get itemsCount() {
                    return this._itemsCount
                }
                set itemsCount(e) {
                    this._itemsCount = +e
                }
                set lastSetId(e) {
                    this._lastSetId = e
                }
                get popups() {
                    return this._popups
                }
                isEndReached() {
                    return 0 === this._data.length || "number" == typeof this._totalCount && this._data.length >= this._totalCount
                }
                display(e, t, o) {
                    if (this._hideSpinner(), this._setFiltersCount(), this._setMarketsCount(), this.$filterSetsButton.toggleClass("tv-screener-toolbar__button--unsaved", this._model.isFilterSetChanged()), !e || e.error || !e.data && !e.symbols) "abort" !== o && (this.resetItems(), this._table.setColumnsMap(t), this._table.update([]), this._resetField("name"), "error" === o ? Kr.logError(e.responseText || o) : e && e.error && Kr.logError(e.error));
                    else {
                        let o = e.data || e.symbols;
                        for (let e = 0; e < o.length; ++e) o[e].f && (o[e].d = o[e].f);
                        if (void 0 === this._totalCount) this._bridge.table_style || this.fixStandaloneWidth(), this._table.setColumnsMap(t), this._table.update(o), this._data = o;
                        else {
                            const e = this._getInvalidatedFrom(o);
                            0 === e ? (this._data = o, this._table.setColumnsMap(t), this._table.update(o)) : (e > 0 ? (o = o.slice(e), this._data = this._data.slice(0, e), this._table.clearData(e)) : o = o.slice(this._data.length), this._data = this._data.concat(o), this._table.setColumnsMap(t), this._table.append(o))
                        }
                        setTimeout((() => this.highlightChanges()), 0), this._totalCount = e.totalCount, this._resetSearchCount(), this._model._initialSortField && (this._model._sortField.setValue(this._model._initialSortField, !0), this._model._sortDirection.setValue(this._model._initialSortDirection, !0), delete this._model._initialSortField, delete this._model._initialSortDirection)
                    }
                }
                _getInvalidatedFrom(e) {
                    for (let t = 0; t < this._data.length; ++t) {
                        if (!e[t] || this._data[t].s !== e[t].s || !e[t].d) return t;
                        for (let o = 0; o < this._data[t].d.length; ++o)
                            if (this._data[t].d[o] !== e[t].d[o]) return t
                    }
                    return -1
                }
                get table() {
                    return this._table
                }
                resetItems() {
                    delete this._totalCount, this._data = []
                }
                _getFiltersCounterValue() {
                    const e = this._model.currentFilterState();
                    return e.filters && Object.keys(e.filters).length || 0
                }
                _setFiltersCount() {
                    const e = this._getFiltersCounterValue();
                    this.$filterCount.text(`${e}`).toggleClass("js-hidden", !e)
                }
                _setMarketsCount() {
                    const e = this._model.markets.length;
                    this.$marketCount && this.$marketCount.text(`${e}`).toggleClass("js-hidden", 1 === e || this._model.isEntireWorld)
                }
                _concatFieldValues(e, t) {
                    var o = [];
                    return e.forEach((e => {
                        o.push(this._getFieldValueFromRangeTitles(e, t))
                    })), o.join(", ")
                }
                _getFieldValueFromRangeTitles(e, t, o = !1) {
                    return Ue[t].rangeTitles && Ue[t].rangeTitles[e] ? Ue[t].rangeTitles[e][o ? 1 : 0] : "string" != typeof e ? "" : e
                }
                fieldValueString(e) {
                    const t = Ue[e].value;
                    if (Ae(t) || !1 === t) return "";
                    if ("select" === Ue[e].control) {
                        const i = c.t(null, {
                            plural: "{number} items",
                            count: t.length,
                            context: "combobox_input"
                        }, o(432121)).format({
                            number: t.length
                        });
                        return Array.isArray(t) ? `<span title="${this._concatFieldValues(t,e)}" class="apply-common-tooltip">${i}</span>` : this._getFieldValueFromRangeTitles(t, e, "dr" === t && "name" === e)
                    }
                    return "range" === Ue[e].control ? Array.isArray(t) ? this._rangeLeftValue(e) + " – " + this._rangeRightValue(e) : "" : "toggle" === Ue[e].control ? -1 !== e.toLowerCase().indexOf("high") ? c.t(null, void 0, o(980121)) : c.t(null, void 0, o(478104)) : "condition" !== Ue[e].control || Ae(t.operator) || Ae(t.value) ? "" : "in_range" === t.operator ? t.value[0] === t.value[1] ? Xr.equal + " " + t.value[0] : -1e100 === t.value[0] || this._isLessThenMin(t.value[0], e) ? Xr.less + " " + t.value[1] : 1e100 === t.value[1] || this._isGreaterThenMax(t.value[1], e) ? Xr.greater + " " + t.value[0] : this._rangeLeftValue(e) + " – " + this._rangeRightValue(e) : "not_in_range" === t.operator ? t.value[0] === t.value[1] ? Xr.nequal + " " + t.value[0] : -1e100 === t.value[0] || this._isLessThenMin(t.value[0], e) ? Xr.greater + " " + t.value[1] : 1e100 === t.value[1] || this._isGreaterThenMax(t.value[1], e) ? Xr.less + " " + t.value[0] : `${Xr.not_in_range} ${this._rangeLeftValue(e)} – ${this._rangeRightValue(e)}` : Xr[t.operator] + " " + ("number" == typeof t.value ? t.value : Ue[t.value].title)
                }
                updateToolbarButtons() {
                    this._bridge.period_picker ? this.updatePeriodPicker() : this._bridge.originalStandalone && this.updateOldFavoritesToolbar()
                }
                updateOldFavoritesToolbar() {
                    this.$hiddenFavoritesButtonWrap && this.$hiddenFavoritesButtonWrap.hide(), this.$favoritesBar.find(".js-favorite-item").remove();
                    let e = 0;
                    this.hiddenFavorites = [];
                    const t = this.$favoritesBar.width(),
                        i = "forex" !== this._model.screener_type || this._bridge.hide_controls ? 40 : 160,
                        r = e => e === this._model.currentFieldSetId();
                    if (this._model.favoriteFieldSets) {
                        let o = null;
                        for (let n = 0; n < this._model.favoriteFieldSets.length; ++n) {
                            const s = this._model.favoriteFieldSets[n],
                                l = this._model.getFieldSetById(s);
                            if (!l) return;
                            const a = Hr(`<div class="tv-screener-toolbar__favorites-item js-favorite-item" data-set="${l.id}">\n\t\t\t\t\t${(0,To.htmlEscape)(l.title)}\n\t\t\t\t</div>`).toggleClass("tv-screener-toolbar__favorites-item--active", r(l.id));
                            o ? a.insertAfter(o) : a.prependTo(this.$favoritesBar);
                            let c = a.outerWidth();
                            a[0].scrollWidth > c && a.addClass("apply-common-tooltip").attr("title", l.title), c += 9, e += c, e + i > t ? (e -= c, a.remove(), this.hiddenFavorites.push({
                                id: l.id,
                                title: l.title
                            })) : o = a
                        }
                    }
                    if (this.hiddenFavorites.length) {
                        if (this.hiddenFavorites.length === this._model.favoriteFieldSets.length && this.$hiddenFavoritesButtonWrap) return void this.$hiddenFavoritesButtonWrap.hide();
                        if (this.$hiddenFavoritesButtonWrap) this.$hiddenFavoritesButtonWrap.trigger("resetContent").show();
                        else {
                            const e = Hr(`<div class="tv-screener-toolbar__favorites-item tv-screener-toolbar__favorites-more apply-common-tooltip common-tooltip-fixed" title="${c.t(null,void 0,o(679584))}">`).appendTo(this.$favoritesBar);
                            this.$hiddenFavoritesButtonWrap = this._popups.setHiddenFavoritesPopup(e, (() => this.hiddenFavorites), r, (e => this.updateSetId(e, !1, this._bridge.hide_controls)))
                        }
                    }
                }
                updateSetId(e, t, o) {
                    this._lastSetId = e, this._model.applyFieldSet(e, t, o)
                }
                updateNewFavoritesToolbar() {
                    if (!this._model.favoriteFieldSets) return;
                    const e = {
                        items: this._model.favoriteFieldSets.map((e => ({
                            title: this._model.getFieldSetById(e).title
                        }))),
                        activeItem: this._model.favoriteFieldSets.indexOf(this._model.currentFieldSetId()),
                        onSelect: e => {
                            const t = this._model.favoriteFieldSets[e];
                            this._lastSetId !== t && (this._model.preventPrevScanRequest(), this.updateSetId(t, !1, this._bridge.hide_controls))
                        },
                        className: "tv-screener-toolbar__no-scroll-choicer-react-root",
                        selectedItemClassName: "tv-screener-toolbar__no-scroll-choicer-react-root-dropdown-item--selected"
                    };
                    ei(this.$favoritesBar.get(0), e)
                }
                updateFavoritesToolbar() {
                    this._onWidget || (this._bridge.originalStandalone ? this.updateOldFavoritesToolbar() : this.updateNewFavoritesToolbar())
                }
                updatePeriodPicker() {
                    const e = {
                        items: this._periodPickerButtons.map((e => ({
                            title: e.title
                        }))),
                        activeItem: this._periodPickerButtons.findIndex((e => e.id === this._selectedPeriodId)),
                        onSelect: e => {
                            const t = this._periodPickerButtons[e].id;
                            this.changeEarningsPeriod(t)
                        },
                        className: "tv-screener-toolbar__no-scroll-choicer-react-root",
                        selectedItemClassName: "tv-screener-toolbar__no-scroll-choicer-react-root-dropdown-item--selected"
                    };
                    ei(this.$periodPicker.get(0), e)
                }
                _getWatchlist() {
                    if (window.widgetbar) {
                        const t = window.widgetbar.setPage("base");
                        let o;
                        for (var e = 0; e < t.widgets.length; e++)
                            if ("watchlist" === t.widgets[e].type) {
                                o = t.widgets[e].widgetObject;
                                break
                            }
                        return o
                    }
                    return null
                }
                adjustToolbarWidth(e) {
                    const t = this.$fieldSetsButton[0].getBoundingClientRect();
                    if (e && "mouseenter" === e.type) this.$fieldSetsButton.css("width", t.width);
                    else {
                        this.$fieldSetsButton.css("width", "auto");
                        const e = this.$fieldSetsButton[0].getBoundingClientRect();
                        this.$fieldSetsButton.css("width", t.width), this.$fieldSetsButton[0].offsetWidth, this.$fieldSetsButton.css("width", e.width)
                    }
                }
                initFilterHandlers(e) {
                    const t = function() {
                            const e = {},
                                t = io.UserActionState.Type;
                            return (o, i, r, n) => {
                                let s = r;
                                e.hasOwnProperty(o) && (e[o].state === t && (s = t), clearTimeout(e[o].sender), r === io.UserActionState.Click && !1 === i) || (e[o] = {
                                    state: s,
                                    sender: setTimeout((() => (0, Yt.sendSnowPlowData)(new bo(i.toString(), r, o, n))), 1e4)
                                })
                            }
                        }(),
                        o = (e, t) => t.reduce(((t, o) => (o === e && (o -= 1), t += Math.floor(o / e / (1 / 4)))), "");
                    e.off("change.op").on("change.op", "select.js-filter-operator", (o => {
                        const i = Hr(o.target),
                            r = i.attr("name");
                        Ue[r].value || (Ue[r].value = {}), Ue[r].value.operator = i.val(), this._resetField(r), this._model.update();
                        const {
                            operator: n
                        } = Ue[r].value, s = e.hasClass("tv-screener-dialog__filter-field") ? "filter_dialog" : "columns";
                        t(r, n, io.UserActionState.Click, s)
                    })), e.off("change.op-val").on("change.op-val", "select.js-filter-operator-value", (o => {
                        const i = Hr(o.target),
                            {
                                value: r
                            } = o.target,
                            n = i.attr("name");
                        Ue[n].value || (Ue[n].value = {}), Ue[n].value.value = i.val(), this._resetField(n), this._model.update();
                        let {
                            operator: s
                        } = Ue[n].value;
                        const l = e.hasClass("tv-screener-dialog__filter-field") ? "filter_dialog" : "columns";
                        "" !== r && (s += "." + r), t(n, s, io.UserActionState.Click, l)
                    })), e.off("update.op-arb-val").on("update.op-arb-val", "input.js-filter-operator-arb-value", (o => {
                        const i = Hr(o.target),
                            r = i.attr("name");
                        Ue[r].value || (Ue[r].value = {});
                        let n = +i.val();
                        isFinite(n) && !Ae(i.val()) || (n = null), Ue[r].value.value = n, this._resetField(r), this._model.update();
                        const {
                            operator: s
                        } = Ue[r].value, l = e.hasClass("tv-screener-dialog__filter-field") ? "filter_dialog" : "columns";
                        t(r, s, io.UserActionState.Click, l)
                    }));
                    const i = e.find("input.js-filter-operator-between-left"),
                        r = e.find("input.js-filter-operator-between-right"),
                        n = e => {
                            const t = Hr(e.target).attr("name");
                            Ue[t].value || (Ue[t].value = {});
                            let o = +i.val();
                            (!isFinite(o) || Ae(i.val()) || this._isLessThenMin(o, t) || this._isGreaterThenMax(o, t)) && (o = -1e100);
                            let n = +r.val();
                            if ((!isFinite(n) || Ae(r.val()) || this._isLessThenMin(n, t) || this._isGreaterThenMax(n, t)) && (n = 1e100), o > n) {
                                const e = o;
                                o = n, n = e
                            }
                            Ue[t].value.value = [o, n], -1e100 === Ue[t].value.value[0] && 1e100 === Ue[t].value.value[1] && (Ue[t].value.value = ""), this._resetField(t), this._model.update()
                        };
                    e.off("update.op-between-left-val").on("update.op-between-left-val", "input.js-filter-operator-between-left", n), e.off("update.op-between-right-val").on("update.op-between-right-val", "input.js-filter-operator-between-right", n), e.off("change.toggle-val").on("change.toggle-val", "input.js-filter-toggle", (o => {
                        const i = Hr(o.target),
                            r = i.attr("name");
                        Ue[r].value = i.prop("checked"), this._resetField(r), this._model.update();
                        const n = e.hasClass("tv-screener-dialog__filter-field") ? "filter_dialog" : "columns";
                        t(r, i.prop("checked"), io.UserActionState.Click, n)
                    })), e.off("click.reset").on("click.reset", ".js-reset", (e => {
                        const t = Hr(e.currentTarget).data("field");
                        this.resetFilter(t)
                    }));
                    let s = "";
                    e.off("keydown.filterInput").on("keydown.filterInput", "input:not(.js-search-input):not(.js-filter-operator-arb-value)", (e => {
                        const t = Hr(e.currentTarget);
                        s = t.val()
                    })), e.off("keyup.filterInput").on("keyup.filterInput", "input:not(.js-search-input):not(.js-filter-operator-arb-value)", (i => {
                        const r = Hr(i.currentTarget),
                            n = r.data("field"),
                            l = r.data("bound");
                        if (void 0 === n || void 0 === l || s === r.val()) return;
                        const a = [this.parseRangeValue(n, r.val(), l), Ue[n].value ? Ue[n].value[1 - l] : Ue[n].range[1 - l]].sort(this._model.numericSorter),
                            c = this.approximateSliderValues(n, a);
                        if (e.find(`.tv-slider[data-field="${n}"]`).slider("values", c), Ue[n].value = a, this._resetField(n), this._model.update(), Ue[n].values) {
                            const i = e.hasClass("tv-screener-dialog__filter-field") ? "filter_dialog" : "columns",
                                r = o(Ue[n].values.length + 1, c);
                            t(n, r, io.UserActionState.Type, i)
                        }
                    }));
                    e.find(".tv-slider").off("slidechange").on("slidechange", ((e, t) => {
                        const o = Hr(e.currentTarget).data("field");
                        Ue[o].values ? 0 === t.values[0] && t.values[1] === Ue[o].values.length + 1 ? Ue[o].value = null : Ue[o].value = [0 === t.values[0] ? -1e100 : parseInt(Ue[o].values[t.values[0] - 1], 10), t.values[1] === Ue[o].values.length + 1 ? 1e100 : parseInt(Ue[o].values[t.values[1] - 1], 10)] : t.values[0] === Ue[o].range[0] && t.values[1] === Ue[o].range[1] ? Ue[o].value = null : Ue[o].value = t.values, this._resetField(o), this._model.update()
                    })).off("slide").on("slide", ((e, t) => {
                        const o = Hr(e.currentTarget),
                            i = o.data("field");
                        let r = t.values[0],
                            n = t.values[1];
                        if (r === n) return !1;
                        Ue[i].values && (r = 0 === t.values[0] ? this._rangeMinValue(i) : nt(Ue[i], this._model.screener_type).format(Ue[i].values[t.values[0] - 1]), n = t.values[1] === Ue[i].values.length + 1 ? this._rangeMaxValue(i) : nt(Ue[i], this._model.screener_type).format(Ue[i].values[t.values[1] - 1])),
                            t.value === t.values[0] ? o.find(".tv-slider__label--left").val(r) : (t.value === t.values[1] || o.find(".tv-slider__label--left").val(r), o.find(".tv-slider__label--right").val(n))
                    })).on("slidechange", ((i, r) => {
                        const n = Hr(i.currentTarget).data("field");
                        if (Ue[n].values) {
                            const i = e.hasClass("tv-screener-dialog__filter-field") ? "filter_dialog" : "columns",
                                s = o(Ue[n].values.length + 1, r.values);
                            t(n, s, io.UserActionState.Slide, i)
                        }
                    }))
                }
                parseRangeValue(e, t, o) {
                    if (-1 !== t.indexOf("<")) return Ue[e].range[0];
                    if (-1 !== t.indexOf(">")) return Ue[e].range[1];
                    t = t.replace(/%/g, "");
                    let i = nt(Ue[e], this._model.screener_type).parse(t);
                    if (!i.res) return Ue[e].range[o];
                    const r = i.value || 0 === i.value ? i.value : i.price;
                    return i = Math.min(Ue[e].range[1], Math.max(Ue[e].range[0], r)), i
                }
                approximateSliderValues(e, t) {
                    const o = [0, 0],
                        i = [].concat(-1e100, Ue[e].values, 1e100);
                    for (let e = 0; e < 2; e++)
                        for (let r = 0; r < i.length; r++) Math.abs(t[e] - i[r]) < Math.abs(t[e] - i[o[e]]) && (o[e] = r);
                    return o
                }
                updateFilterSearch() {
                    const e = this._dialog.$fieldSearchInput.val().trim().replace(/^,\s*|\s*,$/, "").toLowerCase().split(/\s*,\s*/);
                    this._dialog.$filtersPopup.find(".js-filter-field").removeClass("js-found");
                    const t = this._dialog.$filtersPopup.find(".js-filters-wrap").get(0);
                    e.forEach((e => {
                        let o = !1;
                        for (const i in Ue) {
                            const r = Array.from(t.querySelectorAll(`.js-filter-field-${i.replace(/\W/g,"")}:not(.js-found)`)),
                                n = ct(Ue[i]),
                                s = -1 !== i.toLowerCase().indexOf(e) || Boolean(n) && -1 !== n.toLowerCase().indexOf(e);
                            s && (o = !0), r.forEach((e => {
                                e.classList.toggle("js-hidden", !s), e.classList.toggle("js-found", s)
                            }))
                        }
                        o || 0 === e.length || (0, Yt.sendSnowPlowData)(new fo(e))
                    }))
                }
                showActiveFilters() {
                    if (this._dialog.$filtersPopup) return;
                    const e = this._dialog._getActiveFilters();
                    this._dialog.showFiltersDialog(!0).then((() => {
                        this._dialog.$dialogContainer.find(".js-search-input").val(e.join(", ")), this.updateFilterSearch()
                    }))
                }
                resetAllFilters() {
                    this._resetAllFilters = !0;
                    for (const e in Ue) this._isFilterValueEmpty(e) || this.resetFilter(e);
                    this._dialog.$dialogContainer.find(".js-search-input").val(""), this.updateFilterSearch(), this._resetAllFilters = !1
                }
                resetFilter(e) {
                    if (!Ue[e].value || !1 === Ue[e].resettableFilter) return;
                    Ue[e].value = null;
                    const t = this._dialog.$filtersPopup || this.$inplaceEditor;
                    if (t)
                        if ("select" === Ue[e].control) t.find(`.js-filter-field-${e.replace(/\W/g,"")}`).trigger("reset");
                        else if ("condition" === Ue[e].control) t.find(`[name="${e}"]`).val("").trigger("change");
                    else if ("toggle" === Ue[e].control) t.find(`[name="${e}"]`).prop("checked", !1);
                    else if ("range" === Ue[e].control) {
                        let o = Ue[e].range;
                        Ue[e].values && (o = [0, Ue[e].values.length + 1]), t.find(`.ui-slider[data-field="${e}"]`).slider("values", o).trigger("slide", {
                            values: o
                        })
                    }
                    this._resetField(e), this._model.update()
                }
                _rangeLeftValue(e) {
                    let t = Ue[e].value;
                    return "in_range" !== t.operator && "not_in_range" !== t.operator || (t = t.value), this._isLessThenMin(t[0], e) ? this._rangeMinValue(e) : nt(Ue[e], this._model.screener_type).format(t[0])
                }
                _rangeRightValue(e) {
                    let t = Ue[e].value;
                    return "in_range" !== t.operator && "not_in_range" !== t.operator || (t = t.value),
                        this._isGreaterThenMax(t[1], e) ? this._rangeMaxValue(e) : nt(Ue[e], this._model.screener_type).format(t[1])
                }
                _isGreaterThenMax(e, t) {
                    return Ue[t].range && e >= Ue[t].range[1]
                }
                _isLessThenMin(e, t) {
                    return Ue[t].range && e <= Ue[t].range[0]
                }
                _rangeMinValue(e) {
                    return "<" + nt(Ue[e], this._model.screener_type).format(Ue[e].values[0])
                }
                _rangeMaxValue(e) {
                    return ">" + nt(Ue[e], this._model.screener_type).format(Ue[e].values[Ue[e].values.length - 1])
                }
                _highlightActiveItems(e) {
                    if (!e.find(".js-filter-checkbox:checked").size()) return e.find(".tv-control-select__option-wrap").removeClass("i-active"), void e.find(".js-item-wrap-any .tv-control-select__option-wrap").addClass("i-active");
                    e.find(".js-filter-checkbox:checked, .js-filter-checkbox-any:checked").each((function() {
                        e.find(".tv-control-select__option-wrap").removeClass("i-active"), Hr(this).closest(".tv-control-select__option-wrap").addClass("i-active")
                    }))
                }
                _closeDropdown(e) {
                    e.tvDropdown("close"), this.$inplaceEditor && this.$inplaceEditor.focus()
                }
                _createMultiSelectItems(e, t, o, i, r) {
                    const n = (Ue[e].useDefaultRange ? Ue[e].defaultRange : Ue[e].range).slice().sort(((t, o) => {
                        if (!1 !== Ue[e].sortSelectedFirst) {
                            const i = Ue[e].value === t || Array.isArray(Ue[e].value) && ~Ue[e].value.indexOf(t),
                                r = Ue[e].value === o || Array.isArray(Ue[e].value) && ~Ue[e].value.indexOf(o);
                            if (i && !r) return -1;
                            if (r && !i) return 1
                        }
                        return !1 === Ue[e].sortable ? 0 : t > o ? 1 : -1
                    }));
                    for (let s = null === o ? 0 : -1; s < n.length; ++s) {
                        let l = -1 === s ? Qr : n[s];
                        const a = Hr(`<input type="checkbox" name="${l}" class="js-filter-checkbox${-1===s?"-any":""}"${Ue[e].value===l||Array.isArray(Ue[e].value)&&~Ue[e].value.indexOf(l)?"checked":""}>`); - 1 === s && (o = a), -1 === s && r && (l = r);
                        const c = Ue[e].rangeTitles,
                            d = c && c[l] && c[l][2],
                            h = this._getFieldValueFromRangeTitles(l, e);
                        let u;
                        u = d && !0 === d.nowrap ? `<span class="tv-control-checkbox__label--nowrap">${h}</span>` : "country" === e ? (0, ai.triesTranslateCountrieName)(h) : (0, O.triesTranslateScreenerData)(h);
                        const p = Hr(`<div class="tv-dropdown-behavior__item js-item-wrap${-1===s?"-any":""}">`).appendTo(t);
                        Hr(`<label data-field="${e}" class="tv-control-select__option-wrap ${i}__dropdown-checkbox-item">`).append(a).append(`<span class="tv-control-checkbox__label">${u}</span>`).appendTo(p), a.tvControlCheckbox()
                    }
                    return o
                }
                _createMultiSelectItemsElement(e, t, o, i, r = !1, n = (() => {}), s = !1, l) {
                    const a = {
                        changed: !1,
                        resetOptions: null
                    };
                    let c = Hr(),
                        d = Hr();
                    const h = "forex-group" === o.attr("data-select-name"),
                        u = o => {
                            const i = !t.find(".js-filter-checkbox:checked").size();
                            s ? c && c.prop("checked", !0) : d.prop("checked", i), r && this._highlightActiveItems(t), o || this._resetField(e), this._model.update(), a.changed = !o, n(t, i)
                        };
                    let p = Hr();
                    return a.resetOptions = o => {
                        t.empty(), d = this._createMultiSelectItems(e, t, s ? null : d, i, l), !0 !== o && (this._tryExecuteFilterChangeHandler(e), u(!0)), p = Hr()
                    }, a.resetOptions(), t.on("change", ".js-filter-checkbox", (i => {
                        const n = Hr(i.target),
                            l = n.attr("name");
                        if (r && Ue[e].value === l) return n.prop("checked", !0), void this._closeDropdown(o);
                        c = Hr(), n.prop("checked") ? (Ue[e].value ? r ? (t.find(".js-filter-checkbox").not(n).prop("checked", !1),
                            Ue[e].value = l) : (Array.isArray(Ue[e].value) || (Ue[e].value = [Ue[e].value]), Ue[e].value.push(l)) : Ue[e].value = l, h && (0, Yt.sendSnowPlowData)(new pi("added", l))) : (Array.isArray(Ue[e].value) ? (Ue[e].value.splice(Ue[e].value.indexOf(l), 1), 1 === Ue[e].value.length ? Ue[e].value = Ue[e].value[0] : Ue[e].value.length || (s ? (c = n, Ue[e].value = l) : Ue[e].value = null)) : s ? (c = n, Ue[e].value = l) : Ue[e].value = null, h && (0, Yt.sendSnowPlowData)(new pi("removed", l))), this._tryExecuteFilterChangeHandler(e), u(), r && this._closeDropdown(o)
                    })), s || t.on("click touchend", ".js-filter-checkbox-any", (i => {
                        const n = Hr(i.target).attr("name");
                        i.preventDefault(), setTimeout((() => {
                            if (!Ue[e].value) return d.prop("checked", !0), void this._closeDropdown(o);
                            d.prop("checked") ? (p.prop("checked", !0), Ue[e].value = p.toArray().map((e => e.name)), Ue[e].value.length ? 1 === Ue[e].value.length && (Ue[e].value = Ue[e].value[0]) : Ue[e].value = null) : (p = t.find(".js-filter-checkbox:checked"), t.find(".js-filter-checkbox").prop("checked", !1), Ue[e].value = null, h && (0, Yt.sendSnowPlowData)(new pi("added", n))), this._tryExecuteFilterChangeHandler(e), u(), r && this._closeDropdown(o)
                        }), 0)
                    })), a
                }
                _tryExecuteFilterChangeHandler(e) {
                    Ue[e].onFilterChange && Ue[e].onFilterChange(Ue[e].value)
                }
                _createMultiselectFilter(e, t, i, r, n = !1) {
                    const s = Hr(`<div class="${r}__selectbox-container js-filter-field-${e.replace(/\W/g,"")} js-dropdown-toggle">`).appendTo(t),
                        l = Hr(`<i class="${r}__selectbox-dropdown-toggle">`).append(Hr(o(376844)).attr({
                            width: 12,
                            height: 7
                        })),
                        a = Hr(`<span class="${r}__selectbox-caption ${r}__selectbox-caption--text-overflow">\n\t\t\t<span class="${r}__selectbox-caption-label js-label"></span>\n\t\t</span>`).append(l).appendTo(s),
                        d = a.find(".js-label"),
                        h = Hr('<div class="tv-dropdown__body tv-dropdown-behavior__body">');
                    let u = Hr();
                    if ((Ue[e].useDefaultRange ? Ue[e].defaultRange : Ue[e].range).length >= 16) {
                        const e = Hr(`<div class="${r}__search-wrap">`).appendTo(h);
                        u = Hr(`<input type="text" placeholder="${c.t(null,void 0,o(508573))}" class="${r}__search-input">`).appendTo(e);
                        const t = Hr(`<div class="tv-control-select__option-wrap ${r}__search-no-matches js-hidden">No matches</div>`).appendTo(h);
                        u.on("change input", (e => {
                            const o = u.val().trim().toLowerCase();
                            o ? _.find(".js-item-wrap").each((function() {
                                const e = Hr(this);
                                e.toggleClass("js-hidden", !~e.text().toLowerCase().indexOf(o))
                            })) : _.find(".js-item-wrap").removeClass("js-hidden"), _.find(".js-item-wrap-any").toggleClass("js-hidden", !!_.find(".js-item-wrap.js-hidden").size()), t.toggleClass("js-hidden", !!_.find(".js-item-wrap:not(.js-hidden)").size()), s.tvDropdown("updateScroll")
                        }))
                    }
                    const p = Hr('<div class="tv-dropdown-behavior__scroll">').appendTo(h),
                        _ = Hr('<div class="tv-screener-fields-popup__items-wrap tv-dropdown-behavior__inscroll">').appendTo(p),
                        g = this._createMultiSelectItemsElement(e, _, s, r, n, (() => {
                            d.empty(), _.find(".js-filter-checkbox:checked, .js-filter-checkbox-any:checked").each(((t, o) => {
                                d.append(Hr('<span class="tv-screener-dialog__filter-field-content-value">').text(this._getFieldValueFromRangeTitles(Hr(o).attr("name"), e)))
                            })), s.focus()
                        }), Ue[e].noAny),
                        m = e => {
                            if (!0 !== e && !s.is(".i-opened")) return;
                            const t = s.closest(".i-scrollable");
                            if (t.size() && (s.offset().top + s.height() < t.offset().top || s.offset().top > t.offset().top + t.height())) return void s.tvDropdown("close");
                            const o = i.offset(),
                                r = s.offset();
                            let n = Hr(window).height() - r.top + Hr(window).scrollTop() - 35;
                            u.size() && (n -= 45);
                            const l = Math.max(i.height() - (r.top - o.top), 60);
                            if (p.css("maxHeight", Math.min(l, n)), this._setDropdownPosition(h, s, i), h.parent().is(i)) {
                                const e = s.tvDropdown("getInstance").scroll;
                                e.updateScrollBar(), e.updateScroll()
                            } else h.appendTo(i)
                        };
                    let v;
                    s.tvDropdown({
                        $wrap: a,
                        $body: h,
                        scroll: !0,
                        closeWithEsc: !0,
                        noAnimation: !0
                    }).on("resetPosition", m).on("beforeOpenMenu", (() => {
                        g.changed && (g.resetOptions(!0), g.changed = !1), m(!0), n && (_.find(".tv-control-checkbox__box, .js-filter-checkbox, .js-filter-checkbox-any").hide(), this._highlightActiveItems(_), _.find(".tv-control-checkbox__label").css("margin-right", 0)), l.addClass(`${r}__selectbox-dropdown-toggle--open`)
                    })).on("afterOpenMenu", (() => {
                        v = _.find(".js-filter-checkbox:checked"), u.size() && setTimeout((() => {
                            u.focus().on("focusout", (function() {
                                u.focus(), setTimeout((function() {
                                    u.focus()
                                }), 10)
                            })), u.add(".tv-screener-inplace-editor__dropdown-checkbox-item").on("keypress keyup", (e => {
                                e.keyCode === Mo.ESC && this._closeDropdown(s)
                            }))
                        }), 0)
                    })).on("beforeCloseMenu", (() => {
                        l.removeClass(`${r}__selectbox-dropdown-toggle--open`), u.off("focusout keypress keyup")
                    })).on("afterCloseMenu", (() => {
                        s.tvDropdown("updateScroll"), h.detach();
                        const t = _.find(".js-filter-checkbox:checked"),
                            o = "tv-screener-dialog" === r ? "filter_dialog" : "columns",
                            i = Array.from(t).map((e => e.name)).join(",");
                        i !== Array.from(v).map((e => e.name)).join(",") && (0, Yt.sendSnowPlowData)(new bo(i, io.UserActionState.Click, e, o))
                    })).on("reset", g.resetOptions).on("mousedownoutside", (() => {
                        s.tvDropdown("close")
                    })), h.on("mousedown touchstart", (e => e.stopPropagation()))
                }
                _applySelectbox(e, t, i = {}) {
                    const r = i.classPrefix || "tv-screener-dialog",
                        n = Hr(`<label class="${r}__selectbox-container js-dropdown-toggle">`);
                    i.addClass && n.addClass(i.addClass), n.insertAfter(e), e.appendTo(n);
                    const s = Hr(`<i class="${r}__selectbox-dropdown-toggle">`).append(Hr(o(376844)).attr({
                            width: 12,
                            height: 7
                        })),
                        l = Hr(`<span class="${r}__selectbox-caption">\n\t\t\t<span class="${r}__selectbox-caption-label js-label"></span>\n\t\t</span>`).append(s).appendTo(n),
                        a = Hr('<div class="tv-dropdown__body tv-dropdown-behavior__body">'),
                        c = Hr('<div class="tv-dropdown-behavior__scroll">').appendTo(a),
                        d = Hr('<div class="tv-screener-fields-popup__items-wrap tv-dropdown-behavior__inscroll">').appendTo(c),
                        h = () => {
                            a.find(".js-option-selected").removeClass("i-active js-option-selected");
                            const t = a.find(`[data-value="${e.val()}"]`),
                                o = !t.data("value");
                            t.addClass("i-active js-option-selected").toggleClass(`${r}__selectbox-option--no-value`, o), l.find(".js-label").toggleClass(`${r}__selectbox-caption--no-value`, o).text(t.text())
                        },
                        u = () => {
                            d.empty();
                            const t = e.get(0).childNodes;
                            for (let e = 0; e < t.length; ++e) Hr(`<span data-value="${t[e].value}" class="tv-dropdown-behavior__item tv-control-select__option js-option">\n\t\t\t\t\t<span class="tv-control-select__option-wrap ${r}__selectbox-option-wrap">${t[e].textContent}</span>\n\t\t\t\t</span>`).appendTo(d);
                            h()
                        };
                    u(), e.on("change", h);
                    const p = e => {
                        if (!0 !== e && !n.is(".i-opened")) return;
                        const o = n.closest(".i-scrollable");
                        if (o.size() && (n.offset().top + n.height() < o.offset().top || n.offset().top > o.offset().top + o.height())) return void n.tvDropdown("close");
                        const i = t.offset(),
                            r = n.offset(),
                            s = Math.max(t.height() - (r.top - i.top), 60),
                            l = Hr(window).height() - r.top + Hr(window).scrollTop() - 35;
                        c.css("maxHeight", Math.min(s, l)), this._setDropdownPosition(a, n, t), a.appendTo(t)
                    };
                    return n.on("resetPosition", p).on("beforeOpenMenu", (() => {
                        p(!0), s.addClass(`${r}__selectbox-dropdown-toggle--open`)
                    })).on("beforeCloseMenu", (() => s.removeClass(`${r}__selectbox-dropdown-toggle--open`))).on("afterCloseMenu", (() => {
                        n.tvDropdown("updateScroll"), a.detach()
                    })).tvDropdown({
                        $wrap: l,
                        $body: a,
                        scroll: !0,
                        closeWithEsc: !0,
                        noAnimation: !0
                    }), d.on("click", ".js-option", (t => {
                        const o = Hr(t.currentTarget).data("value");
                        e.val() !== o && (e.val(o), e.trigger("change")), n.tvDropdown("close")
                    })), a.on("mousedown touchstart", (e => e.stopPropagation())), e.on("reset", u), n
                }
                _setDropdownPosition(e, t, o) {
                    const i = o.offset(),
                        r = t.offset();
                    e.css("top", r.top - i.top - 15), (0, Xt.isRtl)() ? e.css("right", o[0].scrollWidth - (r.left + t.width()) + i.left - (0, Xt.getLTRScrollLeft)(o[0])) : e.css("left", r.left - i.left)
                }
                _isFilterValueEmpty(e) {
                    const t = Ue[e].value;
                    return t && "condition" === Ue[e].control ? "" === t.value || null == t.value : !(t && (!Array.isArray(t) || t.length) && ("object" != typeof t || Object.keys(t).find((e => !!t[e]))))
                }
                addFieldFilter(e, t, i = "tv-screener-dialog", r) {
                    const n = Hr('<div class="' + i + "__filter-field js-filter-field js-filter-field-" + e.replace(/\W/g, "") + " " + i + "__filter-field--cat" + Ue[e].category + ' js-wrap">'),
                        s = !this._isFilterValueEmpty(e);
                    if (s) {
                        const e = t.find(".tv-screener-dialog__filter-field--active");
                        e.length > 0 ? n.insertAfter(e.last()) : t.prepend(n)
                    } else n.appendTo(t);
                    r && (s ? t.removeClass("tv-screener-inplace-editor__without-reset") : (n.addClass("tv-screener-inplace-editor__filter-without-reset"), t.addClass("tv-screener-inplace-editor__without-reset")));
                    let l = Ue[e].filterTitle || Ue[e].title;
                    "toggle" === Ue[e].control && "is_primary" !== e && "active_symbol" !== e && (l = c.t(null, void 0, o(865073)).format({
                        title: l
                    })), Hr(`<div class="${i}__filter-field-title js-filter-field-title-${e.replace(/\W/g,"")}">${l}</div>`).appendTo(n), this.setFieldActive(e, s, n);
                    const a = Hr(`<div class="${i}__filter-field-content ${i}__filter-field-content--${Ue[e].control} js-filter-field-_content">`).appendTo(n);
                    return Hr(`<div class="${i}__filter-field-reset ${s||!r?"":"i-hidden "}apply-common-tooltip js-reset" data-field="${e}" title="${c.t(null,void 0,o(658318))}">`).append(Hr(o(966631))).appendTo(n), new Promise((t => {
                        setTimeout((() => {
                            if ("select" === Ue[e].control) this._createMultiselectFilter(e, a, r ? this._bridge.$body : this._dialog.$dialogContainer, i, Ue[e].isSingle);
                            else if ("range" === Ue[e].control) {
                                const t = {
                                    range: !0
                                };
                                let o = Ue[e].range[0],
                                    i = Ue[e].range[1];
                                Ue[e].values ? (t.min = 0, t.max = Ue[e].values.length + 1, Ue[e].value && Array.isArray(Ue[e].value) ? (t.values = this.approximateSliderValues(e, Ue[e].value), o = this._rangeLeftValue(e), i = this._rangeRightValue(e)) : (t.values = [0, Ue[e].values.length + 1], o = this._rangeMinValue(e), i = this._rangeMaxValue(e))) : (t.min = Ue[e].range[0], t.max = Ue[e].range[1], t.values = Ue[e].value || [Ue[e].range[0], Ue[e].range[1]]), Hr(`<div class="tv-slider" data-field="${e}">\n\t\t\t\t\t\t<div class="tv-slider__labels">\n\t\t\t\t\t\t\t<input type="text" data-field="${e}" data-bound="0" class="tv-slider__label tv-slider__label--left" value="${o}"/>\n\t\t\t\t\t\t\t<input type="text" data-field="${e}" data-bound="1" class="tv-slider__label tv-slider__label--right" value="${i}"/>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>`).slider(t).appendTo(a)
                            } else if ("condition" === Ue[e].control) {
                                const t = Hr(`<select name="${e}" class="js-filter-operator js-hidden">`).appendTo(a);
                                let n, s = !0;
                                for (const o in Xr) Ue[e].hiddenOperators && -1 !== Ue[e].hiddenOperators.indexOf(o) || (s && !Ue[e].value && (s = !1, Ue[e].value = {
                                    operator: o
                                }), Hr(`<option value="${o}"${o===(Ue[e].value&&Ue[e].value.operator)?" selected":""}>${Xr[o]}</option>`).appendTo(t));
                                this._applySelectbox(t, r ? this._bridge.$body : this._dialog.$dialogContainer, {
                                    classPrefix: i,
                                    addClass: `${i}__filter-field-content--left`
                                }), n = Ue[e].conditionFields ? Array.isArray(Ue[e].conditionFields) ? Ue[e].conditionFields : Ue[e].conditionFields[this._model.screener_type] || Ue[e].conditionFields.default || Yr : Yr;
                                const l = Hr(`<select name="${e}" class="js-filter-operator-value js-hidden">`).appendTo(a);
                                let d;
                                if (Hr(`<option value="">${c.t(null,void 0,o(351514))}</option>`).appendTo(l), 0 === n.length) d = Hr(`<label class="${i}__selectbox-container js-dropdown-toggle ${i}__filter-field-content--middle js-hidden" tabindex="0">\n\t\t\t\t\t\t\t<span class="${i}__selectbox-caption-label js-label ${i}__selectbox-caption--no-value">${c.t(null,void 0,o(351514))}</span>\n\t\t\t\t\t\t</label>`).appendTo(a);
                                else {
                                    for (let t = 0; t < n.length; ++t) {
                                        const o = n[t];
                                        Hr(`<option value="${o}"${o===(Ue[e].value&&Ue[e].value.operator&&Ue[e].value.value)?" selected":""}>${Ue[o].title}</option>`).appendTo(l)
                                    }
                                    d = this._applySelectbox(l, r ? this._bridge.$body : this._dialog.$dialogContainer, {
                                        classPrefix: i,
                                        addClass: `${i}__filter-field-content--middle js-hidden`
                                    })
                                }
                                const h = Hr(`<input type="text" name="${e}" class="${i}__filter-field-content--right ${i}__filter-field-text js-filter-operator-arb-value">`).appendTo(a);
                                Ue[e].value && "number" == typeof Ue[e].value.value && h.val(`${Ue[e].value.value}`);
                                const u = e => {
                                        e.ctrlKey || e.metaKey || !e.charCode || !e.which || e.which < 32 || /[\d.-]/.test(String.fromCharCode(e.charCode)) || e.preventDefault()
                                    },
                                    p = e => {
                                        const t = {
                                            value: e.val()
                                        };
                                        return e.on("keypress", u).on("change input", (0, Lt.default)((o => {
                                            e.val() !== t.value && (e.trigger("update", o), t.value = e.val())
                                        }), 500)), t
                                    },
                                    _ = Hr(`<input type="text" name="${e}" class="${i}__filter-field-content--right ${i}__filter-between-input js-filter-operator-between-left js-hidden">`).appendTo(a);
                                !Ue[e].value || "in_range" !== Ue[e].value.operator && "not_in_range" !== Ue[e].value.operator || _.val(`${-1e100===Ue[e].value.value[0]||this._isLessThenMin(Ue[e].value.value[0],e)?"":Ue[e].value.value[0]}`);
                                const g = p(_),
                                    m = Hr(`<span class="${i}__filter-between-separator js-hidden">—</span>`).appendTo(a),
                                    v = Hr(`<input type="text" name="${e}" class="${i}__filter-field-content--right ${i}__filter-between-input js-filter-operator-between-right js-hidden">`).appendTo(a);
                                !Ue[e].value || "in_range" !== Ue[e].value.operator && "not_in_range" !== Ue[e].value.operator || v.val(`${1e100===Ue[e].value.value[1]||this._isGreaterThenMax(Ue[e].value.value[1],e)?"":Ue[e].value.value[1]}`);
                                const f = p(v),
                                    y = p(h),
                                    b = () => {
                                        const e = t.val(),
                                            o = e && "in_range" !== e && "not_in_range" !== e;
                                        d.toggleClass("js-hidden", !o), o || (y.value = "", h.val(""), l.val("").trigger("change"))
                                    },
                                    w = e => {
                                        const o = t.val(),
                                            i = o && "in_range" !== o && "not_in_range" !== o && !l.val();
                                        h.toggleClass("js-hidden", !i), i && !0 !== e && !this._resetAllFilters && setTimeout((() => {
                                            h.focus()
                                        }), 50)
                                    },
                                    S = e => {
                                        const o = "in_range" === t.val() || "not_in_range" === t.val();
                                        _.toggleClass("js-hidden", !o), m.toggleClass("js-hidden", !o), v.toggleClass("js-hidden", !o), o && !0 !== e && !this._resetAllFilters && setTimeout((() => {
                                            _.focus()
                                        }), 50), o || !0 === e || (g.value = "", f.value = "", _.val(""), v.val(""), l.val("").trigger("change"))
                                    };
                                "in_range" === t.val() || "not_in_range" === t.val() ? S(!0) : b(), w(!0), t.on("change", b).on("change", w).on("change", S), l.on("change", w)
                            } else if ("toggle" === Ue[e].control) {
                                Hr(`<label class="${i}__filter-toggle">\n\t\t\t\t\t\t<input type="checkbox" name="${e}" class="${i}__filter-dropdown-item-input tv-screener-filter-rollup__item-input js-filter-toggle" ${Ue[e].value?"checked":""}>\n\t\t\t\t\t\t<span class="${i}__filter-toggle-checkbox-title tv-control-checkbox__label">\n\t\t\t\t\t\t\t${-1!==e.toLowerCase().indexOf("high")?c.t(null,void 0,o(980121)):c.t(null,void 0,o(478104))}\n\t\t\t\t\t\t</span>\n\t\t\t\t\t</label>`).appendTo(a).find(".js-filter-toggle").tvControlCheckbox()
                            }
                            t()
                        }), r ? 0 : Pt.dur / 3.5)
                    }))
                }
                showInplaceEditor(e, t) {
                    if (!Ue[e]) return;
                    this._inplaceEditorField = e, this.$inplaceEditorTarget = t, this.$inplaceEditor || (this.$inplaceEditor = Hr('<div class="tv-screener-inplace-editor tv-screener-inplace-editor--hidden">').on("mousedownoutside", (e => {
                            const t = Ue[this._inplaceEditorField];
                            "condition" === t.control && t.value && (Ae(t.value.value) || Ae(t.value.operator)) && (this.$inplaceEditor.hasClass("js-hidden") || (t.value = null));
                            const o = this.$inplaceEditor.find(".js-dropdown-toggle.i-opened");
                            o.size() ? o.one("afterCloseMenu", (() => {
                                this.$inplaceEditor.addClass("tv-screener-inplace-editor--hidden js-hidden")
                            })) : this.$inplaceEditor.addClass("tv-screener-inplace-editor--hidden js-hidden")
                        })).on("keypress keyup", (e => {
                            e.keyCode !== Mo.ESC || Hr(".tv-dropdown__body.i-opened").length || this.$inplaceEditor.trigger("mousedownoutside")
                        })).attr("tabIndex", "0").appendTo(this._bridge.$body),
                        this._bridge.standalone && (this.$inplaceEditor.addClass("tv-screener-inplace-editor--standalone"), Hr(document).on("scroll", (() => {
                            this.$inplaceEditor.is(".js-hidden") || this.$inplaceEditor.css("top", this.$inplaceEditorTarget.offset().top - this._bridge.$body.offset().top)
                        })))), this.$inplaceEditor.empty().removeClass("tv-screener-inplace-editor__without-reset").removeClass("js-hidden").toggleClass("tv-screener-inplace-editor--slim", "toggle" === Ue[e].control).toggleClass("tv-screener-inplace-editor--wide", "condition" === Ue[e].control), this.addFieldFilter(e, this.$inplaceEditor, "tv-screener-inplace-editor", !0).then((() => {
                        this.initFilterHandlers(this.$inplaceEditor)
                    }));
                    const o = this.$inplaceEditor.find(".js-reset"),
                        i = Ue[e].inplaceEditorLeftOffset || 0,
                        r = this._getInplaceEditorBound(),
                        n = t.position().left;
                    if (this.$inplaceEditor.css("top", t.offset().top - this._bridge.$body.offset().top), (0, Xt.isRtl)()) {
                        const e = n + t.width(),
                            s = i + Math.min(this.$content.width() - e, r) - o.width();
                        this.$inplaceEditor.css("right", Math.max(s, 0))
                    } else this.$inplaceEditor.css("left", Math.max(i + Math.min(n, r) - o.width(), 0));
                    this.$inplaceEditor.removeClass("tv-screener-inplace-editor--hidden").focus(), this._model.trackEvent("Open inplace editor")
                }
                _getInplaceEditorBound() {
                    let e = this._bridge.$body.width() - this.$inplaceEditor.outerWidth() + Hr(document).scrollLeft();
                    if (this._bridge.standalone) {
                        const t = this._getResizerBridgeWidth(),
                            o = this._table.$element.width() + t;
                        Hr(window).width() < o && (e = (0, Xt.isRtl)() ? Hr(window).width() - t - this.$inplaceEditor.outerWidth() - Hr(document).scrollLeft() : Hr(window).width() - t - this.$inplaceEditor.outerWidth() + Hr(document).scrollLeft())
                    }
                    return e
                }
                setFilterSet(e) {
                    const t = this._model.getFilterSetById(e);
                    this.$filterSetsButton.removeClass("tv-screener-toolbar__button--unsaved").attr("data-filter-set", e), this.$filterSetsButtonTitle.text(t.title), this._popups.$filterSetsPopup && (this._popups.$filterSetsPopup.find(".tv-screener-popup__item").removeClass("tv-screener-popup__item--active"), this._popups.$filterSetsPopup.find(`[data-set="${e}"]`).addClass("tv-screener-popup__item--active"))
                }
                setFieldSet(e) {
                    const t = this._model.getFieldSetById(e);
                    this.$fieldSetsButton.removeClass("tv-screener-toolbar__button--unsaved").text(t.title).attr("data-field-set", e)
                }
                updateIntervalButton(e = this._$selectIntervalButton, t = this._model.selectedIntervalId) {
                    if (!e) return;
                    const o = x(t);
                    o && e.html(o.shortTitle);
                    const i = this._model.eodRestriction.value();
                    e.toggleClass("i-hidden", i === Rt.Widget)
                }
                addIntervalSelect({
                    $before: e = null,
                    $appendTo: t = null,
                    $dropdownContainer: i = null
                }) {
                    return xi({
                        $before: e,
                        $appendTo: t,
                        $dropdownContainer: i,
                        makeSelectPopup: e => {
                            const t = Object.assign({
                                buttonTitle: c.t(null, void 0, o(241173))
                            }, e);
                            return this._popups.setSelectPopup({
                                wrapClass: "tv-screener-toolbar__interval-select",
                                buttonClass: "tv-screener-toolbar__button tv-screener-toolbar__button--arrow-down tv-screener-toolbar__button--with-state apply-common-tooltip common-tooltip-fixed i-disabled"
                            }, t)
                        },
                        afterMakingSelectPopup: (e, t, o) => {
                            this._popups.setSelectIntervalContent(e, o, (e => {
                                this._model.setSelectedIntervalId(e.id),
                                    this.updateIntervalButton(t, e.id), this.updateToolbarButtons(), this.preventHighlightChanges(), this.refresh()
                            }))
                        },
                        afterSelectPopupAppend: (e, t) => {
                            this._model.loadingComplete.subscribe(null, (() => {
                                t.removeClass("i-disabled"), this.updateIntervalButton(t, this._model.selectedIntervalId)
                            }), !0)
                        }
                    })
                }
                updateGroupsButton(e, t) {
                    t.sort(((e, t) => Ue.sector.sourceRange.indexOf(e) > Ue.sector.sourceRange.indexOf(t) ? 1 : -1));
                    for (let i = 0; i < t.length; i++) {
                        const r = t[i] === Qr ? Zr : `${t[i]}${i===t.length-1?" "+c.t(null,void 0,o(389787)):""}`;
                        e.append(Hr('<span class="tv-screener-dialog__filter-field-content-value">').text(r))
                    }
                    e.attr("data-groups", t)
                }
                addGroupSelect({
                    $before: e = null,
                    $appendTo: t = null,
                    $dropdownContainer: i = null
                }) {
                    return xi({
                        $before: e,
                        $appendTo: t,
                        $dropdownContainer: i,
                        beforeMakingSelectPopup: () => {
                            if ("forex" === this._model.screener_type) {
                                const e = this._model.selectedGroups; - 1 === e.indexOf(Qr) && (Ue.sector.value = e)
                            }
                        },
                        makeSelectPopup: e => {
                            const t = {
                                wrapClass: "",
                                buttonClass: "tv-screener-toolbar__button tv-screener-toolbar__button--space_right tv-screener-toolbar__button--arrow-down tv-screener-toolbar__button--with-state apply-common-tooltip common-tooltip-fixed i-disabled"
                            };
                            "forex" !== this._model.screener_type && (t.wrapClass += " i-hidden");
                            const i = Object.assign({
                                buttonTitle: c.t(null, void 0, o(223477))
                            }, e);
                            return this._popups.setSelectPopup(t, i)
                        },
                        afterMakingSelectPopup: (e, t, o) => {
                            t.on("click", (() => {
                                o.off("change click touchend"), e.attr({
                                    "data-select-name": "forex-group"
                                }), this._createMultiSelectItemsElement("sector", o, e, "tv-screener-inplace-editor", !1, (e => {
                                    t.empty();
                                    const o = [];
                                    e.find(".js-filter-checkbox:checked, .js-filter-checkbox-any:checked").each(((e, t) => {
                                        const i = Hr(t).attr("name");
                                        o.push(i)
                                    })), this._model.setSelectedGroups(o);
                                    const i = o.map((e => xe[e] || e));
                                    this.updateGroupsButton(t, i), this.updateToolbarButtons()
                                }), !1, Jr)
                            }))
                        },
                        afterSelectPopupAppend: (e, t) => {
                            this._$groupSelect = e, this._model.loadingComplete.subscribe(null, (() => {
                                t.removeClass("i-disabled"), t.attr({
                                    "data-name": "screener-forex-pairs",
                                    "data-role": "button"
                                }), this.updateGroupsButton(t, this._model.selectedGroups)
                            }), !0)
                        }
                    })
                }
                updateMarketButton(e) {
                    const t = this._model.markets,
                        o = Hr(".js-screener-market-button");
                    let i, r, n;
                    if (1 === t.length) {
                        const e = t[0],
                            o = (0, d.getMarketsByScreenerType)(this._model.screener_type);
                        i = t[0], r = o[e].flag ? `<img alt="${s=o[e].flag}" crossorigin src="${(0,Bt.flagUrl)(s)}" class="tv-flag-country tv-flag-country--${s}">` : o[e].icon, n = o[e].title
                    } else i = "global", n = "global", r = Hr('\n\t\t\t\t<i alt="globe" class="tv-flag-country tv-flag-country--globe">\n\t\t\t\t</i>\n\t\t\t').html(Ur);
                    var s;
                    o.attr({
                        "data-name": "screener-markets",
                        "data-role": "button",
                        "data-market": i
                    }), o.html(r), o.parent().toggleClass("tv-screener-market-select--hidden", "stock" !== this._model.screener_type), e && e.append(`<span class="tv-screener-market-select__button-title">\n\t\t\t\t${n}\n\t\t\t</span><span class="tv-caret">`)
                }
                _showMarketsDialog() {
                    gi(this.getScreenerMarketDialogOptions())
                }
                addMarketSelect({
                    $before: e = null,
                    $appendTo: t = null,
                    $dropdownContainer: i = null,
                    caption: r = !1,
                    classSuffix: n = null
                }) {
                    if (this._onWidget) return;
                    const s = xi({
                        $before: e,
                        $appendTo: t,
                        $dropdownContainer: i,
                        makeSelectPopup: () => {
                            const e = {
                                    wrapClass: n ? "tv-screener-market-select tv-screener-market-select" + n : "tv-screener-market-select",
                                    buttonClass: "tv-screener-market-select__button js-screener-market-button apply-common-tooltip common-tooltip-fixed"
                                },
                                {
                                    wrapClass: t,
                                    buttonClass: i
                                } = e,
                                r = Hr(`<div class="${t} tv-dropdown tv-dropdown--inline tv-dropdown-behavior">`);
                            return {
                                $wrap: r,
                                $button: Hr(`<div class="tv-dropdown__button tv-dropdown-behavior__button ${i}" title="${c.t(null,void 0,o(348424))}">`).appendTo(r)
                            }
                        }
                    });
                    return this.getScreenerMarketDialogOptions = () => ({
                        title: c.t(null, void 0, o(702322)),
                        initialSelectedMarkets: this._model.isEntireWorld ? [(0, jr.entireWorldMarketsPreset)()] : (0, qr.getMarketsByNames)(fi.markets, this._model.markets),
                        autofocus: !0,
                        initialMode: (0, Vr.getMarketDialogMode)(),
                        defaultMarket: fi.defaultStockMarket,
                        onSelectComplete: e => {
                            (0, Vr.saveMarketSelectModeSetting)(e.mode);
                            const t = e.markets.map((e => e.value));
                            this.$filterSetsButton.toggleClass("i-disabled", !0), this.$fieldSetsButton.toggleClass("i-disabled", !0), this.$filtersButton.toggleClass("i-disabled", !0), this._model.isEntireWorld = 1 === t.length && "entire_world" === t[0], this._model.setMarket(this._model.isEntireWorld ? [] : t).then((() => {
                                this.$filterSetsButton.toggleClass("i-disabled", !1), this.$fieldSetsButton.toggleClass("i-disabled", !1), this.$filtersButton.toggleClass("i-disabled", !1), this.updateMarketButton(r && s || null)
                            })).catch((e => {
                                e && Kr.logError(e)
                            }))
                        },
                        onClose: () => {
                            (0, Yt.sendSnowPlowData)(new hi.ChangeMarketEvent(this._model.markets.join(",")))
                        }
                    }), s.on("click", (() => {
                        gi(this.getScreenerMarketDialogOptions())
                    })), this.updateMarketButton(r && s || null), s
                }
                refresh() {
                    document.hidden || this._tempBusy || (this._data && (this._prevData = this._data.slice()), this._model.invalidateRequest(), this._model.update(null, !1, !1, !1, !0))
                }
                get refreshIntervals() {
                    return this._model.isFastRefresh ? rn : on
                }
                resetRefreshCounter(e) {
                    if (clearInterval(this._refreshCounterIntervalId), !0 === e) return;
                    let t = this._model.refreshInterval;
                    const o = -1 === t || !user.is_pro && !this._model.isFastRefresh;
                    if (this.$refreshButton && this.$refreshButton.toggleClass("tv-screener-toolbar__button--with-counter", !o && !this._model.isFastRefresh).toggleClass("tv-screener-toolbar__button--active", !o), o) return;
                    const i = () => {
                        if (!this._model.isFastRefresh) {
                            const e = t / 60 | 0,
                                o = t % 60;
                            this.$refreshCounter.text(`${`00${e}`.slice(-2)}:${`00${o}`.slice(-2)}`)
                        }
                        t <= 0 ? this.refresh() : --t
                    };
                    i(), t >= 0 && (this._refreshCounterIntervalId = setInterval(i, 1e3))
                }
                preventHighlightChanges() {
                    this._preventHighlightChanges = !0
                }
                highlightChanges() {
                    if (this._preventHighlightChanges) return void(this._preventHighlightChanges = !1);
                    if (!this._prevData || !this._data || this._model.marketChangeProcess) return;
                    const e = {};
                    for (let t = 0; t < (this._prevData || []).length; ++t) e[this._prevData[t].s] = this._prevData[t].d;
                    if (delete this._prevData, this._model.isFastRefresh) {
                        const t = ["bid", "ask", "close"];
                        for (let o = 0; o < this._data.length; ++o) {
                            const i = this._data[o].s,
                                r = this._data[o].d,
                                n = e[i];
                            if (!n) continue;
                            const s = () => {
                                this._table.flickRow(i)
                            };
                            for (let e = 0; e < t.length; e++) {
                                const o = t[e],
                                    s = this._table.fieldsOrder.indexOf(o);
                                if (r[s] !== n[s]) {
                                    const e = r[s] > n[s];
                                    this._table.highlightCell(i, o, e)
                                }
                            }
                            setTimeout(s, 1e3)
                        }
                        return
                    }
                    const t = [];
                    for (let o = 0; o < this._data.length; ++o) {
                        const i = this._data[o].s,
                            r = this._data[o].d,
                            n = e[i];
                        if (!n) continue;
                        let s = !1;
                        for (let e = 0; e < r.length; ++e)
                            if (r[e] !== n[e]) {
                                s = !0;
                                break
                            }
                        s && t.push(i)
                    }
                    t.length && this._table.$tbody.find(`tr[data-symbol="${t.join('"],tr[data-symbol="')}"]`).addClass("tv-screener-table__result-row--flick")
                }
                _createSwitch(e) {
                    this.$switch = Hr('<div class="tv-screener-toolbar__switch">').appendTo(this.$toolbar);
                    const t = {
                        modes: e,
                        onChange: e => this._model.applySwitch(e)
                    };
                    ! function(e, t) {
                        Ro.render(Bo.createElement(jo, { ...t
                        }), e)
                    }(this.$switch[0], t)
                }
                get conditionOperators() {
                    return Xr
                }
            }
            var an = o(154834),
                cn = o(345848),
                dn = o(226722),
                hn = o(125226),
                un = o(476230),
                pn = o(124829),
                _n = o(175203);
            class gn {
                constructor() {
                    this._localSettings = {}
                }
                getValue(e, t) {
                    return this._localSettings.hasOwnProperty(e) ? this._localSettings[e] : t
                }
                setValue(e, t) {
                    this._localSettings[e] = t
                }
                getInt(e, t) {
                    return this.getValue(e, t)
                }
                getBool(e, t) {
                    return this.getValue(e, t)
                }
                setInt(e, t) {
                    this.setValue(e, t)
                }
                getJSON(e, t) {
                    return this.getValue(e, t)
                }
                setJSON(e, t) {
                    this.setValue(e, t)
                }
                remove(e) {
                    this._localSettings.hasOwnProperty(e) && delete this._localSettings[e]
                }
            }
            var mn = o(716004),
                vn = o(778016),
                fn = o(343823),
                yn = o(943645);

            function bn(e) {
                const {
                    value: t,
                    isMarketCurrency: i,
                    content: r
                } = e;
                return t === Cn.SYMBOL ? c.t(null, void 0, o(25976)) : i && t === Cn.MARKET ? c.t(null, void 0, o(754650)) : i ? c.t(null, void 0, o(754650)) + ` (${r})` : r
            }

            function wn(e) {
                const {
                    isGlobal: t,
                    financialCurrency: i,
                    symbolCurrencies: r
                } = e;
                let n = [];
                t && n.push({
                    value: Cn.MARKET,
                    isMarketCurrency: !0,
                    content: c.t(null, void 0, o(754650)),
                    description: c.t(null, void 0, o(497921))
                });
                const s = function(e, t) {
                    return e ? {
                        value: Cn.GLOBAL,
                        isMarketCurrency: !1,
                        content: kn.USD,
                        description: c.t(null, void 0, o(479677))
                    } : {
                        value: t,
                        isMarketCurrency: !0,
                        content: t,
                        description: c.t(null, void 0, o(497921))
                    }
                }(t, i);
                n.push(s);
                const l = Object.keys(kn).filter((e => e !== i)),
                    a = l.map((e => ({
                        value: e,
                        isMarketCurrency: !1,
                        content: e,
                        description: void 0
                    })));
                n = [...n, ...a];
                return 1 === r.length && [i, ...l].includes(r[0]) || n.unshift({
                    value: Cn.SYMBOL,
                    isMarketCurrency: !1,
                    content: c.t(null, void 0, o(25976)),
                    description: c.t(null, void 0, o(424534))
                }), {
                    defaultCurrency: s,
                    currencies: n
                }
            }
            class Sn {
                constructor(e) {
                    this.event = "convert_currency", this.source = "convert_currency_selector", this.location = "toolbar", this.state = "", this.value = e
                }
            }
            var Cn, kn, xn = o(486393);
            ! function(e) {
                e.MARKET = "market", e.SYMBOL = "symbol", e.GLOBAL = "global"
            }(Cn || (Cn = {})),
            function(e) {
                e.USD = "USD"
            }(kn || (kn = {}));
            class Fn {
                constructor(e, t, i) {
                    this.createCurrencySelect = () => ({
                        selectButton: this._initCurrencySelect({
                            $before: this._view.$filterSetsButton.parent()
                        }).attr({
                            "data-name": "screener-price-currency",
                            "data-role": "button"
                        }),
                        currencySelect: this
                    }), this.getPriceConversionObject = () => {
                        const {
                            value: e,
                            isMarketCurrency: t
                        } = this.getCurrentCurrency();
                        return e === Cn.SYMBOL ? {
                            to_symbol: !0
                        } : t ? {
                            to_symbol: !1
                        } : e === Cn.GLOBAL ? null : {
                            to_symbol: !1,
                            to_currency: e
                        }
                    }, this._initCurrencySelect = e => {
                        const {
                            $before: t = null,
                            $appendTo: o = null,
                            $dropdownContainer: i = null
                        } = e;
                        if (!(t || o)) throw new Error("Provide at least one of $before or $appendTo for SecreenerCurrencySelect");
                        return xi({
                            $before: t,
                            $appendTo: o,
                            $dropdownContainer: i,
                            makeSelectPopup: this._createSelectButton,
                            afterMakingSelectPopup: this._setSelectContent,
                            afterSelectPopupAppend: this._onLoad
                        })
                    }, this._createSelectButton = e => {
                        const t = {
                            buttonTitle: c.t(null, void 0, o(806682)),
                            ...e
                        };
                        return this._view._popups.setSelectPopup({
                            wrapClass: "tv-screener-toolbar__currency-select",
                            buttonClass: "tv-screener-toolbar__button tv-screener-toolbar__button--arrow-down tv-screener-toolbar__button--with-state apply-common-tooltip common-tooltip-fixed"
                        }, t)
                    }, this._setSelectContent = (e, t, o) => {
                        o.empty();
                        for (const e of this._availableCurrencies) {
                            const {
                                value: t,
                                content: i,
                                description: r
                            } = e, n = bn(e);
                            xn(`<div class="tv-dropdown-behavior__item">\n\t\t\t\t<div\n\t\t\t\t\tdata-currency="${t}"\n\t\t\t\t\ttitle="${r||i}"\n\t\t\t\t\tclass="tv-control-select__option-wrap tv-screener-popup__item js-currency-select ${t===this._currentCurrency.value?"tv-screener-popup__currency-select--active":""}"\n\t\t\t\t>\n\t\t\t\t\t${n}\n\t\t\t\t</div>\n\t\t\t</div>`).appendTo(o)
                        }
                        e.on("afterOpenMenu", (() => {
                            o.on("click", ".js-currency-select", (t => {
                                t.preventDefault();
                                const i = this._currentCurrency.value,
                                    r = t.currentTarget.dataset.currency;
                                r && r !== i && (o.find(".tv-screener-popup__currency-select--active").removeClass("tv-screener-popup__currency-select--active"), o.find(`[data-currency='${r}']`).addClass("tv-screener-popup__currency-select--active"), this._handleSelect(r), setTimeout((() => {
                                    e.tvDropdown("close"), o.off("click")
                                }), Pt.dur / 2))
                            }))
                        }))
                    }, this._handleSelect = e => {
                        this._currentCurrency = this._availableCurrencies.filter((t => t.value === e))[0],
                            function(e) {
                                if (e.isMarketCurrency) return void(0, Yt.sendSnowPlowData)(new Sn("market_currency"));
                                if (e.value === Cn.SYMBOL) return void(0, Yt.sendSnowPlowData)(new Sn("symbol_currency"));
                                (0, Yt.sendSnowPlowData)(new Sn("usd"))
                            }(this._currentCurrency), this._updateSelectButton(), this._view.preventHighlightChanges(), this._view.refresh()
                    }, this._onLoad = (e, t) => {
                        this._view._model.loadingComplete.subscribe(null, (() => {
                            t.removeClass("i-disabled"), this._updateSelectButton()
                        }), !0)
                    }, this._updateSelectButton = () => {
                        const {
                            content: e
                        } = this._currentCurrency, t = c.t(null, void 0, o(588467)) + `: ${e}`;
                        this._view._$currencySelectButton.html(t)
                    }, this._availableCurrencies = e, this._currentCurrency = t, this._view = i
                }
                getCurrentCurrency() {
                    return this._currentCurrency
                }
            }

            function Tn(e, t, o) {
                o._$currencySelectButton && (o._$currencySelectButton.parent().remove(), o._model._currencySelect = void 0);
                const i = o._bridge;
                if (!e || (0, yi.isExternalWidget)(i) || i.hide_controls) return;
                const r = function(e) {
                        return Array.isArray(e._model.markets) && e._model.markets.length > 1
                    }(o),
                    {
                        defaultCurrency: n,
                        currencies: s
                    } = wn({
                        isGlobal: r,
                        financialCurrency: e,
                        symbolCurrencies: t
                    });
                if (1 === s.length) return;
                const l = new Fn(s, n, o),
                    {
                        selectButton: a,
                        currencySelect: c
                    } = l.createCurrencySelect();
                o._$currencySelectButton = a, o._model._currencySelect = c
            }
            var Mn = o(157234);
            const An = {
                stock: {
                    title: c.t(null, void 0, o(483526)),
                    contentText: c.t(null, void 0, o(889708))
                }
            };
            var Dn = o(770605),
                En = o(486393);
            o(224427);
            const $n = o(583912).linking,
                {
                    Delegate: In
                } = o(942634),
                Pn = o(375397).WatchedValue,
                Bn = o(66974),
                Rn = o(338619).getLogger("Screener.Widget"),
                Ln = window.locale || "en";
            let On = 150;
            const Wn = e => Ue[e] && !0 !== Ue[e].disabled && !0 !== Ue[e].hiddenColumn,
                Nn = {
                    forex: "screener-forex",
                    crypto: "screener-crypto",
                    stock: "screener"
                },
                Vn = ["pricescale", "minmov", "fractional", "minmove2"];
            var jn, qn, Un = o(486393);
            It.enable("widget");
            const Hn = (0, Et.extractWidgetSettings)(window.initData.widgetDefaults),
                zn = document.querySelector("#js-screener-container"),
                Gn = Hn.locale || "en",
                Kn = (0, l.filterUtmInfo)(Hn);
            (0, s.createEmbedWidgetWrapper)(zn, "screener", Kn, {
                isWhiteLabel: Hn.whitelabel,
                locale: Gn,
                overflowAuto: !0
            });
            const Xn = Un("#js-screener-container"),
                Yn = document.querySelector(".js-embed-widget-head").getBoundingClientRect().height;
            document.querySelector(".js-embed-widget-body").style.height = `calc(100% - ${Yn}px)`, Hn.isTransparent && Xn.addClass("tv-widget-screener__container--transparent");
            const Zn = Tt(window.TradingView.widgetCustomer).map((e => e.value)),
                Jn = ["morocco"],
                Qn = [];
            if ((0, hn.isFeatureEnabled)("disable-lse-data-screener-heatmap-widgets") && !(null === (qn = null === (jn = Hn.permissionOverrides) || void 0 === jn ? void 0 : jn.market) || void 0 === qn ? void 0 : qn.includes("uk")) && Qn.push("uk"), Hn.market) {
                const e = !Zn.includes(Hn.market),
                    t = Jn.includes(Hn.market),
                    o = Qn.includes(Hn.market);
                (e && !t || o) && (Hn.market = Zn[0])
            }
            var es;
            Hn.screener_type || (Hn.screener_type = void 0 === (es = Hn.market) ? dt.Stock : ["forex", "crypto"].includes(es) ? es : dt.Stock);
            !async function(e) {
                var t;
                null === (t = await (0, $t.getEmbedWidgetTracker)()) || void 0 === t || t.trackWidgetPageView(e)
            }(Hn.screener_type === dt.CryptoMkt ? "cryptomktscreener" : "forexscreener");
            const ts = {
                $body: Xn,
                standalone: !1,
                onWidget: !0,
                widgetSettings: Hn,
                hide_controls: !Hn.showToolbar,
                marked_symbols_disabled: !0,
                table_context_menu_disabled: !1,
                open_chart_on_same_tab: !1,
                selection_disabled: !0,
                disableStickyHeader: !1,
                isUnavailableWidgetMarket: !(!Hn.market || !Dt(Hn.market))
            };
            (0, d.getUnavailableWidgetExchangesMap)()[Hn.market] && (ts.unavailableWidgetExchanges = (0, d.getUnavailableWidgetExchangesMap)()[Hn.market]), new class {
                constructor(e) {
                    if (this._bridge = e, this._pendingPromise = null, !("$body" in e) && "container" in e && (this._bridge.$body = En(e.container)), this._bridge.onWidget || "big" === this._bridge.table_style ? this.settingsSaver = new gn : this.settingsSaver = n(), this._bridge.page_size && (On = this._bridge.page_size), this._bridge.onWidget) {
                        let t;
                        if (e.widgetSettings.largeChartUrl) {
                            t = e.widgetSettings.largeChartUrl;
                            t.match(/^https?:\/\//) || (t = "http://" + t)
                        }
                        if (this.largeChartUrl = t, this.utm = (0, l.filterUtmInfo)(e.widgetSettings), this.screener_type = e.widgetSettings.screener_type, "crypto_mkt" === this.screener_type) {
                            const t = "BTC" === e.widgetSettings.displayCurrency ? "BTC" : "USD";
                            this.switchFilter = {
                                left: "name",
                                operation: "match",
                                right: t + "$"
                            }, pt.unshift({
                                id: "crypto_mkt",
                                title: "crypto_mkt",
                                content: {
                                    sort_field: "market_cap_calc",
                                    sort_direction: "desc",
                                    filters: {
                                        sector: {
                                            operator: "nempty"
                                        }
                                    }
                                }
                            })
                        }
                    } else this._bridge.standalone ? this.screener_type = e.screener_type || "stock" : this.screener_type = this.settingsSaver.getValue("screener.selected_type_on_chart", "stock");
                    this.settingKey = Nn[this.screener_type] || Nn.stock, this._bridge.onWidget && this.settingsSaver.setValue(`${Ln}.${this.settingKey}.market`, e.widgetSettings.market, {
                        forceFlush: !0
                    }), this.defaultFieldSets = xt({
                        screenerType: this.screener_type,
                        markets: this.markets,
                        isCompact: this.isServerRender(),
                        subtype: this._screenerSubtype(),
                        isOnWidget: this._bridge.onWidget
                    }), this._bridge.onWidget && (this._widgetInitColumn = e.widgetSettings.defaultColumn || this.defaultFieldSets[0].id, this._widgetInitScreen = e.widgetSettings.defaultScreen || pt[0].id), Ze(this.screener_type, this._screenerSubtype()), "forex" === this.screener_type && _t(["forex"]), this._bridge.getCurrentFilterSetId = () => this.currentFilterSetId(), this._bridge.applySymbol = (e, t = !1) => {
                        if (!0 === t || this._bridge.standalone) {
                            let t = "";
                            const o = (0, yn.getShortNameAndProName)(e);
                            t = this._bridge.onWidget && this.largeChartUrl ? (0, wr.makeTemplateSymbolUrl)(this.largeChartUrl, o) : (0, wr.makeSymbolChartUrl)(o, this.utm), window.open(t)
                        } else $n.setSymbolAndLogInitiator(e, "screener")
                    }, this._bridge.applyFilterSet = (e, t) => {
                        const o = !(0, _o.default)(t.sort(), this.markets.sort()),
                            i = o || e !== this.currentFilterSetId();
                        let r = o ? this.setMarket(t).then((() => this._view.updateMarketButton())) : Promise.resolve();
                        return i && (r = r.then((() => this.applyFilterSet(e)))), r
                    }, this.disabled = new Pn, this.fieldsOrder = new Pn, this._sortField = new Pn, this._sortDirection = new Pn, this.eodRestriction = new Pn(Rt.None), this._options = {}, this._initialSortField = e.sort_field || this.settingsSaver.getValue(this.settingKey + ".sort_field", "market_cap_basic"), this._initialSortDirection = e.sort_direction || this.settingsSaver.getValue(this.settingKey + ".sort_direction", "desc"), this.update = (0, Lt.default)(this.updateImpl.bind(this), 100), this._sortField.subscribe((e => {
                        this._view._updateTableSortField(), this.saveFiltersSettings(), delete this._initialSortField
                    })), this._sortDirection.subscribe((e => {
                        this._view._updateTableSortField(), this.saveFiltersSettings(), delete this._initialSortDirection
                    })), this.isScreenerWidgetUpdatedImpl = !1, this._bridge.visible && (0, yi.isChartPage)(this._bridge) && this._bridge.visible.subscribe((e => {
                        !this.isScreenerWidgetUpdatedImpl && e && (this.invalidateRequest(), this._bridge.disableStickyHeader ? this.updateImpl() : this.updateImpl(this._view._setupStickyHeader.bind(this._view)), this.isScreenerWidgetUpdatedImpl = !0)
                    })), this.scanRequest = null, this.loadingStart = new In, this.loadingComplete = new In, this.fieldSetChanged = new In, this.fieldSetSaved = new In, this.filterSetChanged = new In, this.filterSetSaved = new In, this.filterSetDeleted = new In, this.maxSafeInteger = Number.MAX_SAFE_INTEGER || Math.pow(2, 53) - 1, this.minSafeInteger = Number.MIN_SAFE_INTEGER || -(Math.pow(2, 53) - 1), this._tickers = [], "continuous_futures" === this.screener_type && (this._bridge.open_chart_on_same_tab = !1), this._bridge.hide_controls || this._initXWindowHandlers(), this._view = new ln(e, this);
                    const t = [this._initMarkedSymbols(this._view)];
                    var i;
                    !this._bridge._onWidget && window.pro && t.push(window.pro.ensureValidShopConf()), Promise.all(t).then((() => {
                        if ((0, hn.isFeatureEnabled)("screener-maintenance")) return void this._view.showMaintenance();
                        this._view.prepareLayout();
                        const e = () => {
                            this._checkCurrentSets(), this._view._selectedPeriodId && "today" === this._view._selectedPeriodId ? (this.applyFieldSetContent(kt), this._sortField.setValue("name"), this._sortDirection.setValue("asc")) : this.applyFieldSet(this._widgetInitColumn || this.currentFieldSetId(), !0), this.applyFilterSet(this._widgetInitScreen || this.currentFilterSetId(), !0), this._updateEodRestriction(), (0, yi.isChartPage)(this._bridge) && this._bridge.visible && !this._bridge.visible.value() || (this._bridge.disableStickyHeader ? this.updateImpl() : this.updateImpl(this._view._setupStickyHeader.bind(this._view)), this.isScreenerWidgetUpdatedImpl = !0)
                        };
                        if (this.isServerRender()) this.getMetaInfo(), this.getUserSettings(), e();
                        else {
                            const t = [this.getMetaInfo(), this.getUserSettings()];
                            Promise.all(t).then(e)
                        }
                        window.loginStateChange && window.loginStateChange.subscribe(null, (e => this.onLoginStateChange(e))), this._bridge.onWidget || Promise.all([o.e(21630), o.e(1867), o.e(30359)]).then(o.bind(o, 538573)).then((({
                            SupportTicketData: e
                        }) => {
                            e.setScreener(this)
                        })), Bn.isProd() || (window._exposed_screenerWidget = this), this.isServerRender() && delete this._bridge.server_data
                    })), (0, Yt.initScreenerInstance)(this), e.standalone && "stock" === e.screener_type && !e.period_picker && (i = {
                        notificationData: An.stock,
                        onConfirm: () => window.open("/screener/", "_blank")
                    }, Promise.all([o.e(95360), o.e(75816), o.e(46445), o.e(21356), o.e(62093), o.e(44524), o.e(88015), o.e(44812), o.e(62526), o.e(90150), o.e(59269)]).then(o.bind(o, 747679)).then((e => e.showScreenerNewStandaloneDialog(i))))
                }
                async _initMarkedSymbols(e) {
                    if (!this.hasMarkedSymbols()) return;
                    const t = await Promise.all([o.e(26871), o.e(75816), o.e(46445), o.e(21356), o.e(62093), o.e(44524), o.e(53799), o.e(74600), o.e(25480), o.e(88015), o.e(30614), o.e(63168), o.e(75364), o.e(57458), o.e(62526), o.e(83147), o.e(1867), o.e(90150), o.e(74339)]).then(o.bind(o, 778358)),
                        i = await Promise.all([o.e(26871), o.e(75816), o.e(46445), o.e(21356), o.e(62093), o.e(44524), o.e(53799), o.e(74600), o.e(25480), o.e(88015), o.e(30614), o.e(63168), o.e(75364), o.e(57458), o.e(62526), o.e(83147), o.e(1867), o.e(90150), o.e(74339)]).then(o.bind(o, 721992));
                    this.markableSymbols = new t.MarkableSymbols({
                        symbolsView: e,
                        markerContainerSelector: ".tv-screener-table__symbol-addition",
                        activeMarkerClass: "tv-screener-table__marker--active",
                        additionalMarkerClass: "tv-screener-table__marker"
                    });
                    this._markedSymbolsFilter = new i.MarkedSymbolsFilter({
                        symbolsView: e,
                        containerSelector: ".tv-screener-table__head-left--text",
                        className: "tv-screener-table__head-left--marker",
                        disableSaveState: this._bridge.disableSaveMarkedSymbolsFilter
                    });
                    const r = this._markedSymbolsFilter.getStream();
                    this._tickers = this._initTickers || this._markedSymbolsFilter.getSymbolsForScan(), this._markedSymbolsFilter.isActive() && (this._bridge.server_data = null);
                    let n = !0;
                    r.on(i.FilterEvents.Init, (() => {
                        this._tickers = this._initTickers || this._markedSymbolsFilter.getSymbolsForScan(), n = !1
                    })), r.on(i.FilterEvents.FilterByMarkedSymbols, (e => {
                        if (!n) {
                            const e = this._markedSymbolsFilter._colorManager.getColor();
                            (0, Yt.sendSnowPlowData)(new wo(e))
                        }
                        this._tickers = e, this._prevScanData = null, this._prevRequestData = null, this.invalidateRequest(), (0, yi.isScreenerPage)(this._bridge) && n || this.update()
                    })), r.on(i.FilterEvents.Disable, (() => {
                        this._tickers = this._initTickers || [], this.invalidateRequest(), this.update()
                    }))
                }
                _initXWindowHandlers() {
                    this._bridge.onWidget || (this._registerXWindowHandler("screener.market-changed", (() => {
                        _t(this.markets);
                        let e = this.currentFilterSetId();
                        const t = this.defaultFilterSets.find((t => t.id === e));
                        if (t && t.disabled) {
                            const t = this.defaultFilterSets.find((e => !e.disabled));
                            e = t ? t.id : ""
                        }
                        this.getUserSettings().then((() => {
                            this.applyFilterSet(e, !0), this._view.updateMarketButton(), this.invalidateRequest(), this.updateImpl()
                        }))
                    })), this._registerXWindowHandler("screener.save-field-set", (e => {
                        const t = e.setId;
                        this.getUserSettings().then((() => {
                            t && t === this.currentFieldSetId() && this._view.$fieldSetsButton.text(this.getFieldSetById(t).title)
                        }))
                    })), this._registerXWindowHandler("screener.save-filter-set", (e => {
                        const t = e.setId;
                        this.getUserSettings().then((() => {
                            t && t === this.currentFilterSetId() && this._view.$filterSetsButtonTitle.text(this.getFilterSetById(t).title)
                        }))
                    })), this._registerXWindowHandler("screener.add-field-set-to-favorites", (() => {
                        this.getUserSettings()
                    })), this._registerXWindowHandler("screener.remove-field-set-from-favorites", (() => {
                        this.getUserSettings()
                    })), this._registerXWindowHandler("screener.apply-field-set", (e => {
                        this.applyFieldSetImpl(e.setId, e.initial, !1), this._view.lastSetId = e.setId
                    })), this._registerXWindowHandler("screener.apply-filter-set", (e => {
                        this.applyFilterSet(e.setId, e.doNotUpdate, !1)
                    })), this._registerXWindowHandler("screener.change-selected-interval-id", (e => {
                        this._view.updateIntervalButton(null, e.id), this.invalidateRequest(), this.updateImpl()
                    })))
                }
                _registerXWindowHandler(e, t) {
                    dn.TVXWindowEvents.on(e, (e => {
                        const o = JSON.parse(e);
                        this.settingKey === o.settingKey && t(o)
                    }))
                }
                _sendXWindowEvent(e, t) {
                    this._bridge.onWidget || "big" === this._bridge.table_style || dn.TVXWindowEvents.emit(e, t)
                }
                _checkCurrentSets() {
                    const e = this.currentFieldSetId();
                    e && !this.getFieldSetById(e) && this.settingsSaver.remove(this.settingKey + ".fieldSetId");
                    const t = this.currentFilterSetId();
                    t && !this.getFilterSetById(t) && this.settingsSaver.remove(this.settingKey + ".filterSetId")
                }
                isServerRender() {
                    return window.initData.screener_metainfo && window.initData.screener_data && this._bridge.server_data
                }
                updateMetaInfo(e) {
                    Ue.index.disabled = !0, Ue.submarket.disabled = !0, "crypto" === this.screener_type && (Ue.currency.useDefaultRange = !0, Ue.currency.disabled = !1);
                    const t = new Set,
                        o = this.markets || [this.market];
                    Ue.is_primary.disabled = ["crypto", "forex"].includes(o[0]), e.fields.forEach((e => {
                        if ("currency" === e.n && e.r.forEach((e => t.add(e))), e.n in Ue) {
                            if (Ue[e.n].type = e.t, "index" === e.n) return Ue.index.disabled = !1, Ue.index.sourceRange = e.r,
                                void(Ue.index.range = Ue.index.sourceRange ? Ue.index.sourceRange.map((e => e.name)) : []);
                            if ("submarket" === e.n && e.r.length >= 1 && (e.r = e.r.filter((e => "" !== e)), e.r.length > 0 && (Ue.submarket.disabled = !1)), !Ue[e.n].range && Ue[e.n].useDefaultRange ? Ue[e.n].range = Ue[e.n].defaultRange : Ue[e.n].useDefaultRange || (Ue[e.n].range = e.r), "exchange" === e.n && this._bridge.unavailableWidgetExchanges && this._bridge.unavailableWidgetExchanges.length && (Ue[e.n].range = this._getFilteredExchangesForWidget(Ue[e.n].range)), function(e, t) {
                                    const o = (0, d.getMarketFieldValuesByScreenerType)(e.screener_type),
                                        i = (0, d.getMarketFieldValuesByScreenerType)(dt.Stock).america;
                                    let r, n = [];
                                    for (const a of e.markets) o[a] && (r = o[a][t] || i[t], r && Array.isArray(r) && (s = n, l = r, n = [...new Set([...s, ...l])].sort(((e, t) => e - t))));
                                    var s, l;
                                    Ue[t].values = r
                                }(this, e.n), !1 === Ue[e.n].sortable) return;
                            e.t === rr.Price && (Ue[e.n].additionalColumns ? Ue[e.n].additionalColumns = Ue[e.n].additionalColumns.concat(Vn) : Ue[e.n].additionalColumns = Vn), e.t === rr.Text && (Ue[e.n].range = Ue[e.n].range.sort()), o = e, [rr.Number, rr.FundamentalPrice].includes(o.t) && Ue[e.n].range && !Ue[e.n].useDefaultRange && (Ue[e.n].range = Ue[e.n].range.map((e => Math.min(Math.max(e, this.minSafeInteger), this.maxSafeInteger))).sort(this.numericSorter)), Ue[e.n].values && !Ue[e.n].range && (Ue[e.n].range = [this.minSafeInteger, this.maxSafeInteger]), Ue[e.n].values && Ue[e.n].range && (Ue[e.n].range[0] > Ue[e.n].values[0] && (Ue[e.n].range[0] = Ue[e.n].values[0]), Ue[e.n].range[1] < Ue[e.n].values[Ue[e.n].values.length - 1] && (Ue[e.n].range[1] = Ue[e.n].values[Ue[e.n].values.length - 1])), "range" !== Ue[e.n].control || Ue[e.n].values || Ue[e.n].range || (Ue[e.n].range = [this.minSafeInteger, this.maxSafeInteger], Ue[e.n].values = [this.minSafeInteger, 0, this.maxSafeInteger])
                        } else if (-1 !== e.n.indexOf("|")) {
                            const t = e.n.split("|");
                            Ue[t[0]] || (Ue[t[0]] = {}), Ue[t[0]].customResolutions || (Ue[t[0]].customResolutions = []), Ue[t[0]].customResolutions.push(t[1])
                        }
                        var o
                    })), Tn(e.financial_currency, [...t], this._view), _t(this.markets), this.defaultFilterSets = pt
                }
                getMetaInfo() {
                    if (this.isServerRender()) return this.updateMetaInfo(JSON.parse(window.initData.screener_metainfo)), Promise.resolve();
                    const e = this._getScanUrl("metainfo"),
                        t = t => ({
                            type: "POST",
                            url: e,
                            data: JSON.stringify({
                                markets: this.markets
                            }),
                            beforeSend: () => {
                                null !== this._pendingPromise && this._pendingPromise.abort()
                            },
                            success: e => {
                                this.updateMetaInfo(e), t()
                            },
                            dataType: "json",
                            xhrFields: {
                                withCredentials: !0
                            }
                        });
                    return new Promise((e => {
                        this.loadingStart.fire(), this._pendingPromise = En.ajax(t(e)).fail((e => {
                            "abort" !== e.statusText && Rn.logError("Failed to load screener metainfo")
                        })).always((() => {
                            this.loadingComplete.fire(), this._pendingPromise = null
                        }))
                    }))
                }
                fieldActive(e) {
                    return !(!Ue[e] || !Ue[e].value || "condition" !== Ue[e].control || "in_range" !== Ue[e].value.operator || 2 !== Ue[e].value.value.length) || !(!Ue[e] || !Ue[e].value || "condition" === Ue[e].control && (!Ue[e].value.operator || "number" != typeof Ue[e].value.value && !Ue[e].value.value) || "range" === Ue[e].control && Ue[e].value[0] === Ue[e].range[0] && Ue[e].value[1] === Ue[e].range[1])
                }
                patchFiltersForMarketPages(e) {
                    let t = {
                        russia: [{
                            left: "typespecs",
                            operation: "has_none_of",
                            right: "foreign-issuer"
                        }],
                        brazil: [{
                            left: "typespecs",
                            operation: "has_none_of",
                            right: "odd"
                        }],
                        thailand: [{
                            left: "typespecs",
                            operation: "has_none_of",
                            right: "foreign"
                        }],
                        uk: [{
                            left: "typespecs",
                            operation: "has_none_of",
                            right: "cdi"
                        }, {
                            left: "exchange",
                            operation: "equal",
                            right: "LSE"
                        }]
                    }[this.markets[0]];
                    if (["sector", "industry"].includes(this.screener_type) && t && (t = t.filter((e => "exchange" !== e.left))), !t || 0 === t.length) return e;
                    const o = (0, an.default)(e);
                    if (!e.filter) return o.filter = [...t], o;
                    for (const e of t) {
                        0 === o.filter.filter((t => (0, _o.default)(t, e))).length && o.filter.push(e)
                    }
                    return o
                }
                getScannerParams(e) {
                    let t = null,
                        o = null,
                        i = null,
                        r = {};
                    if (e) {
                        const n = this.getFilterSetById(e);
                        t = n.content.sort_field, o = n.content.filters || {}, i = Object.keys(n.content.filters || {}), r = n.content.options
                    } else i = Object.keys(Ue).filter((e => this.fieldActive(e))), r = this._options;
                    t || (t = this._sortField.value() || this._initialSortField);
                    const n = {
                        filter: [],
                        _groups: [],
                        options: r
                    };
                    for (let e = 0; e < i.length; ++e) {
                        const t = i[e];
                        if ("condition" === Ue[t].control && !Ue[t].value) continue;
                        if ("name" === t && Array.isArray(Ue[t].value)) {
                            let e = !1;
                            const o = Ue[t].value;
                            for (let t = 0; t < o.length; ++t)
                                if ("nequal" === o[t].operator) {
                                    e = !0;
                                    break
                                }
                            if (e) continue
                        }
                        const r = Ue[t].groupFilter ? n._groups : n.filter;
                        let s = Ke(t, Ue[t].value, o, this.selectedIntervalId);
                        if (s.filter2Flag && (s.filter2AndPart.length && (n.filter2 || (n.filter2 = {
                                operator: "and",
                                operands: []
                            }), n.filter2.operands.push({
                                operation: {
                                    operator: "or",
                                    operands: s.filter2AndPart.map((e => ({
                                        expression: e
                                    })))
                                }
                            })), s = s.filter), Array.isArray(s))
                            for (let e = 0; e < s.length; ++e) r.push(s[e]);
                        else r.push(s)
                    }
                    if (this.filterSetChanged.fire(), this.eodRestriction.value() !== Rt.None && (n.options.data_restrictions = "PREV_BAR"), n.markets = this.markets, (0, yi.isMarketPage)(this._bridge)) return this.patchFiltersForMarketPages(n);
                    const s = n.filter.filter((e => "is_primary" === e.left));
                    return s && !1 === s.left && (n.filter = n.filter.filter((e => "is_primary" !== e.left))), n
                }
                updateImpl(e, t, o, i = !0, r = !1, n = !1) {
                    if (t && this._view.isEndReached()) return;
                    if (this._view.table.dragStarted.value()) return;
                    if ((0, hn.isFeatureEnabled)("screener-maintenance")) return void this._view._popups.showMaintenanceDialog();
                    const s = this.generateScanRequest(),
                        l = [0, On];
                    s.range = l.slice(), i ? (t && this._currentItemsRange ? (l[0] = this._currentItemsRange[1], l[1] = l[0] + On, s.range[1] = l[1]) : this._view.resetItems(), this._currentItemsRange = l) : this._currentItemsRange ? s.range[1] = this._currentItemsRange[1] : this._view.resetItems(), !t && this._prevRequest && (0, _o.default)(s, this._prevRequest) ? "function" == typeof e && !0 === o && e() : (this._prevRequest = (0, pn.clone)(s), "function" == typeof e && e(), this.scan(s, t, r, n))
                }
                _getSymbols() {
                    let e;
                    switch (this.screener_type) {
                        case "forex":
                            e = ["forex"];
                            break;
                        case "sector":
                            e = ["sector"];
                            break;
                        case "industry":
                            e = ["industry"];
                            break;
                        case "continuous_futures":
                            e = ["futures"];
                            break;
                        default:
                            e = this._bridge.types || []
                    }
                    return {
                        query: {
                            types: e
                        },
                        tickers: this._tickers
                    }
                }
                generateScanRequest() {
                    const e = Object.assign({}, this.getScannerParams());
                    if (e.symbols = this._getSymbols(), e.columns = this.getRequestColumns(), e.sort = {
                            sortBy: F(this._sortField.value() || this._initialSortField, this.selectedIntervalId),
                            sortOrder: this._sortDirection.value() || this._initialSortDirection
                        }, e.preset = this.preset, window.language && (e.options || (e.options = {}), e.options.lang = window.language), this._bridge.onWidget && "forex" !== this.markets[0]) {
                        const t = (0, d.getMarketsByScreenerType)(this.screener_type)[this.markets[0]];
                        t && t.stocks && t.stocks.length && (e.symbols.query.exchanges = t.stocks.map((e => "NYSE ARCA" === e ? "AMEX" : e)), this._bridge.unavailableWidgetExchanges && this._bridge.unavailableWidgetExchanges.length && (e.symbols.query.exchanges = this._getFilteredExchangesForWidget(e.symbols.query.exchanges)))
                    }
                    if (e._groups.length > 0 && (e.symbols.groups = e._groups), delete e._groups, "predefined_filter" === this.currentFilterSetId()) {
                        const t = this.getFilterSetById("predefined_filter");
                        if (e.symbols || (e.symbols = {}), (0, pn.merge)(e.symbols, t.symbols), t.content && t.content.filters)
                            for (const [o, i] of Object.entries(t.content.filters))
                                if (Array.isArray(i))
                                    for (let t = 0; t < i.length; ++t) {
                                        const r = i[t];
                                        r.operator && "nequal" === r.operator && e.filter.push({
                                            left: o,
                                            operation: r.operator,
                                            right: r.value
                                        })
                                    } else {
                                        let t = {};
                                        void 0 !== i.operator && void 0 !== i.value ? t = {
                                            left: o,
                                            operation: i.operator,
                                            right: i.value
                                        } : void 0 !== i && void 0 !== i.operator ? (t = {
                                            left: o,
                                            operation: i.operator
                                        }, i.right && void 0 !== i.right && (t.right = i.right)) : void 0 !== i && (t = {
                                            left: o,
                                            operation: "equal",
                                            right: i
                                        }), "earnings_release_next_date,earnings_release_date" === t.left && (t.left = "earnings_release_date,earnings_release_next_date");
                                        e.filter.some((e => (0, _o.default)(t, e) || e.left === t.left && e.operation === t.operation)) || e.filter.push(t)
                                    }
                    }
                    for (let t = 0; t < e.columns.length; ++t) e.columns[t] = F(e.columns[t], this.selectedIntervalId);
                    if (Ue[this.searchField].searchValue) {
                        const t = {
                            left: !Ue.description.disabled && Ue.description.checked ? `${this.searchField},description` : this.searchField,
                            operation: "match",
                            right: Ue[this.searchField].searchValue
                        };
                        e.filter.push(t)
                    }
                    if (this._bridge.screener_field_match && e.filter.push({
                            left: this._bridge.screener_field_match.field,
                            operation: "match",
                            right: this._bridge.screener_field_match.pattern
                        }), this._bridge.hidden_filter && (this._bridge.hidden_filter.filter && (e.filter = e.filter.concat(this._bridge.hidden_filter.filter)), this._bridge.hidden_filter.options && (e.options = Object.assign(e.options || {}, this._bridge.hidden_filter.options))), this.switchFilter && e.filter.push(this.switchFilter), this._currencySelect) {
                        const t = this._currencySelect.getPriceConversionObject();
                        t && (e.price_conversion = t)
                    }
                    return this.eodRestriction.value() !== Rt.None ? e.options.data_restrictions = "PREV_BAR" : delete e.options.data_restrictions, e
                }
                getRequestColumns() {
                    const e = [dt.Stock, dt.Sector, dt.Industry].includes(this.screener_type) ? ["currency", "fundamental_currency_code"] : [];
                    return Array.from(new Set([...this.fieldsOrder.value(), ...this._view.table.additionalColumns, ...e]))
                }
                getDownloadData() {
                    const e = this._prevRequest ? (0, pn.clone)(this._prevRequest) : this.generateScanRequest();
                    delete e.range;
                    const t = this.fieldsOrder.value().slice(0);
                    for (let o = 0; o < t.length; ++o) {
                        const i = t[o];
                        e.columns[o] = F(i, this.selectedIntervalId)
                    }
                    return new Promise((t => {
                        this._sendScanRequest(JSON.stringify(e), (e => {
                            t(JSON.parse(e))
                        }))
                    }))
                }
                scan(e, t, o, i = !1) {
                    if (!i && this._bridge.visible && !0 !== this._bridge.visible.value()) return;
                    const r = JSON.stringify(e);
                    this.loading = !0, this.loadingStart.fire(t && !o);
                    const n = Date.now(),
                        s = function(e) {
                            const t = e.map(((e, t) => [e, t]));
                            return new Map(t)
                        }(e.columns);
                    if (this._bridge.isUnavailableWidgetMarket) return void this._view.display({
                        data: []
                    }, s);
                    const l = (t, o) => {
                            this.loading = !1;
                            const i = Date.now() - n,
                                r = JSON.parse(t);
                            this._shouldRerender(t, e) && (this._view.display(r, s, o), this._prevScanData = t, this._prevRequestData = (0, pn.clone)(e)), this.isServerRender() && r.request && (r.request.symbols && r.request.symbols.tickers && (this._initTickers = r.request.symbols.tickers, this._tickers = this._initTickers), this._options = r.request.options), this.loadingComplete.fire();
                            if (null !== location.pathname.match(/earnings\/{0,1}$/i) && !this.isServerRender()) {
                                const e = "error" === o ? "error" : "ok",
                                    t = void 0 !== r.status && 0 !== r.status ? r.status : "error" === e ? 400 : 200;
                                _n.telemetry.sendReport("calendars", "earnings_http_status", {
                                    value: t,
                                    additional: {
                                        source: "ScreenerWidget"
                                    }
                                }), _n.telemetry.sendReport("calendars", "earnings_response_time_frame", {
                                    value: i,
                                    additional: {
                                        source: "ScreenerWidget"
                                    }
                                }), _n.telemetry.sendReport("calendars", `earnings_${e}`)
                            }
                        },
                        a = (e, t) => {
                            const o = Date.now() - n;
                            this.loading = !1, this._view.display(e, s, t), this.loadingComplete.fire();
                            if (null !== location.pathname.match(/earnings\/{0,1}$/i) && !this.isServerRender()) {
                                const i = "error" === t ? "error" : "ok",
                                    r = void 0 !== e.status && 0 !== e.status ? e.status : "error" === i ? 400 : 200;
                                _n.telemetry.sendReport("calendars", "earnings_http_status", {
                                    value: r,
                                    additional: {
                                        source: "ScreenerWidget"
                                    }
                                }), _n.telemetry.sendReport("calendars", "earnings_response_time_frame", {
                                    value: o,
                                    additional: {
                                        source: "ScreenerWidget"
                                    }
                                }), _n.telemetry.sendReport("calendars", `earnings_${i}`)
                            }
                        };
                    this.isServerRender() ? l(window.initData.screener_data) : this._markedSymbolsFilter && this._markedSymbolsFilter.isActive() && !this._tickers.length ? this._view.display({
                        data: []
                    }, s) : (this.scanRequest && 4 !== this.scanRequest.readyState && this.scanRequest.abort(), this.scanRequest = this._sendScanRequest(r, l), this.scanRequest.fail(a), this.trackEvent("Scan request"), window.initData.filter_id && delete window.initData.filter_id)
                }
                preventPrevScanRequest() {
                    this.loading && this.scanRequest && (this.scanRequest.abort(), this.scanRequest = null)
                }
                _shouldRerender(e, t) {
                    return !this._isPrevScanDataEqual(e) || !this._isPrevRequestDataEqual(t)
                }
                _isPrevScanDataEqual(e) {
                    return this._prevScanData === e
                }
                _isPrevRequestDataEqual(e) {
                    return (0, _o.default)(e, this._prevRequestData)
                }
                isFieldSetChanged() {
                    if (this._bridge.onWidget) return !1;
                    const e = this.currentFieldSetId(),
                        t = e && this.getFieldSetById(e);
                    if (!e || !t) return !0;
                    const o = t.content.slice().filter(Wn),
                        i = this.fieldsOrder.value().slice().filter(Wn),
                        r = !Ue.type.disabled && -1 !== t.content.indexOf("type") !== Ue.type.checked,
                        n = !Ue.description.disabled && -1 !== t.content.indexOf("description") !== Ue.description.checked;
                    return o.join() !== i.join() || r || n
                }
                applyFieldSetContent(e) {
                    for (const t in Ue) Ue[t].checked = -1 !== e.indexOf(t);
                    this.fieldSetChanged.fire(e.filter((e => !0 !== Ue[e].hiddenColumn)))
                }
                applyFieldSetImpl(e, t, o = !0) {
                    const i = this.getFieldSetById(e),
                        r = i.content.filter((e => Ue[e] && !Ue[e].disabled));
                    if (this.applyFieldSetContent(r), t || this.update(), this._view.setFieldSet(e), this.settingsSaver.setValue(this.settingKey + ".fieldSetId", i.id, {
                            forceFlush: !0
                        }), this._view.updateFavoritesToolbar(), !t) {
                        const t = this.defaultFieldSets.find((t => t.id === e)) ? e : "custom";
                        this.trackEvent(`Apply field set ${t}`)
                    }
                    o && this._sendXWindowEvent("screener.apply-field-set", JSON.stringify({
                        setId: e,
                        initial: t,
                        settingKey: this.settingKey
                    }))
                }
                applyFieldSet(e, t, i) {
                    t || i || !this.isFieldSetChanged() ? this.applyFieldSetImpl(e, t) : new Promise((e => {
                        this._bridge.onWidget ? e() : this._view._popups.showConfirmDialog(o.i18next(null, void 0, o(716801))).then((t => {
                            t ? this._view.popups.confirmAndSaveCurrentFieldSet().then(e, (t => {
                                t && Rn.logError(t), e()
                            })) : e()
                        }))
                    })).then((() => {
                        this.applyFieldSetImpl(e, t)
                    }))
                }
                isFilterSetChanged() {
                    if (this._bridge.onWidget) return !1;
                    const e = this.currentFilterSetId(),
                        t = e && this.getFilterSetById(e);
                    if (!e || !t) return !0;
                    const o = this.markets || [this.market];
                    ["forex", "crypto"].includes(o[0]) && delete t.content.filters.is_primary;
                    const i = this.currentFilterState(),
                        r = {};
                    if (t.content.filters)
                        for (const e of Object.keys(t.content.filters)) {
                            const o = t.content.filters[e],
                                i = Ae(o.operator),
                                n = Ae(o.value);
                            (i && n || !i && !n) && (r[e] = o)
                        }
                    if (t.content.options && i.options) {
                        if (i.options.active_symbols_only !== t.content.options.active_symbols_only) return !0
                    }
                    const n = i.filters,
                        s = Object.keys(r).concat(Object.keys(n)).filter(((e, t, o) => o.indexOf(e) === t));
                    for (let e = 0; e < s.length; ++e) {
                        const t = s[e];
                        if (!r.hasOwnProperty(t) || !n.hasOwnProperty(t)) return !0;
                        if (Array.isArray(r[t]) ^ Array.isArray(n[t])) return !0;
                        if (Array.isArray(r[t]) && Array.isArray(n[t]) && r[t].sort(this.numericSorter).join() !== n[t].sort(this.numericSorter).join() || !Array.isArray(r[t]) && !(0, _o.default)(r[t], n[t])) return !0
                    }
                    return !!(t.content.sort_direction && t.content.sort_direction !== i.sort_direction || t.content.sort_field && t.content.sort_field !== i.sort_field)
                }
                currentFilterState() {
                    const e = {};
                    for (const t in Ue) {
                        const o = Ue[t].value;
                        if (["is_primary", "active_symbol"].includes(t)) {
                            if (!o) continue;
                            e[t] = {
                                operator: "equal",
                                value: !0
                            }
                        } else Ue[t].control && o && ("object" == typeof o ? "condition" === Ue[t].control ? Ae(o.operator) || Ae(o.value) || (e[t] = o) : Object.keys(o).some((e => !!o[e])) && (e[t] = o) : e[t] = o)
                    }
                    return {
                        filters: e,
                        sort_field: this._sortField.value() || this._initialSortField,
                        sort_direction: this._sortDirection.value() || this._initialSortDirection,
                        options: this._options
                    }
                }
                saveFieldSet(e, t) {
                    return this._view.$fieldSetsButton.toggleClass("i-disabled", !0), e.type = "fieldSet", e.screener_type = this.screener_type, this.saveSet(e, t).then((t => {
                        this._view.$fieldSetsButton.toggleClass("i-disabled", !1);
                        const o = t && t.id && `${t.id}`;
                        return e.delete || this.fieldSetSaved.fire(), this._sendXWindowEvent("screener.save-field-set", JSON.stringify({
                            setId: e.delete ? "" : o,
                            settingKey: this.settingKey
                        })), this.applyFieldSetImpl(o), t
                    }))
                }
                saveFilterSet(e, t) {
                    return this._view.$filterSetsButton.toggleClass("i-disabled", !0), e.type = "filterSet", e.screener_type = this.screener_type, e.markets = this.markets, this.saveSet(e, t).then((t => (this._view.$filterSetsButton.toggleClass("i-disabled", !1), e.setId = t && t.id && `${t.id}`, this.applyFilterSet(t.id), e.delete ? this.filterSetDeleted.fire(e.setId) : this.filterSetSaved.fire(e.setId, e.markets, !!e.content), this._sendXWindowEvent("screener.save-filter-set", JSON.stringify({
                        setId: e.delete ? "" : e.setId,
                        settingKey: this.settingKey
                    })), t)))
                }
                saveSet(e, t) {
                    return Promise.resolve({
                        type: "POST",
                        url: "/screener/save/",
                        data: e
                    }).then(En.ajax).then((e => (e.error ? Rn.logError(e.error) : t && this.trackEvent(t), this.getUserSettings().then((() => e)))))
                }
                _isExchangeRelevant(e) {
                    return Array.isArray(e.value) ? e.value.every((t => e.range.includes(t))) : e.range.includes(e.value)
                }
                _isSubmarketRelevant(e) {
                    return (Array.isArray(e.value) ? e.value : [e.value]).every((t => e.range.includes(t)))
                }
                applyFilterSet(e, t, o = !0) {
                    const i = this.getFilterSetById(e);
                    if (i) {
                        i.content.sort_field && this._sortField.setValue(i.content.sort_field), i.content.sort_direction && this._sortDirection.setValue(i.content.sort_direction), this._options = Object.assign({}, i.content.options);
                        for (const e in Ue) i.content.filters && e in i.content.filters ? ("condition" === Ue[e].control && Array.isArray(i.content.filters[e]) && 2 === i.content.filters[e].length && (i.content.filters[e] = {
                            operator: "in_range",
                            value: i.content.filters[e]
                        }), Ue[e].value = (0, pn.clone)(i.content.filters[e]), "submarket" !== e || !Ue[e].disabled && this._isSubmarketRelevant(Ue[e]) || (Ue[e].value = null), "is_primary" === e && Ue[e].disabled && (Ue[e].value = null), "condition" === Ue[e].control && Ue[e].value && (Ae(Ue[e].value.value) || Ae(Ue[e].value.operator)) && (Ue[e].value = null), "exchange" !== e || this._isExchangeRelevant(Ue[e]) || (Ue[e].value = null)) : !1 !== Ue[e].resettableFilter && (Ue[e].value = null), this._view._resetField(e, !1, !0);
                        this._options.hasOwnProperty("active_symbols_only") && (!0 === this._options.active_symbols_only && (Ue.active_symbol.value = !0), delete this._options.active_symbols_only), this.saveFiltersSettings(), !0 === t ? (this._view.setFilterSet(e), this.filterSetChanged.fire(e)) : this.updateImpl((() => {
                            this._view.setFilterSet(e), this.filterSetChanged.fire(e)
                        }), null, !0), this.settingsSaver.setValue(this.settingKey + ".filterSetId", i.id, {
                            forceFlush: !0
                        }), this.trackEvent("Apply filter set"), o && this._sendXWindowEvent("screener.apply-filter-set", JSON.stringify({
                            setId: e,
                            doNotUpdate: t,
                            settingKey: this.settingKey
                        }))
                    }
                }
                saveFiltersSettings() {
                    this.settingsSaver.setValue(this.settingKey + ".sort_direction", this._sortDirection.value() || this._initialSortDirection), this.settingsSaver.setValue(this.settingKey + ".sort_field", this._sortField.value() || this._initialSortField)
                }
                getUserSettings() {
                    const e = {
                        filterSets: [],
                        fieldSets: []
                    };
                    return this.isServerRender() ? this.favoriteFieldSets = this.defaultFieldSets.map((e => e.id)) : this.favoriteFieldSets = this.settingsSaver.getJSON(this.settingKey + ".favoriteFieldSets", this.defaultFieldSets.map((e => e.id))), window.is_authenticated ? new Promise((t => {
                        En.get("/screener/settings/", {
                            screener_type: this.screener_type
                        }).done((o => {
                            (o = o || e).filterSets = o.filterSets.map((e => {
                                const t = JSON.parse(e.content);
                                var o;
                                return t.filters = (o = t.filters, Object.keys(o).forEach((e => {
                                    const t = o[e];
                                    "market_cap_basic" === e && "nempty" === t.operation && delete o[e]
                                })), o), {
                                    id: e.id + "",
                                    title: e.title,
                                    content: t
                                }
                            })), o.fieldSets = o.fieldSets.map((e => ({
                                id: e.id + "",
                                title: e.title,
                                content: JSON.parse(e.content)
                            }))), this.settings = o, t()
                        }))
                    })) : (this.settings = e, Promise.resolve())
                }
                getFieldSetById(e) {
                    const t = t => t.id == e,
                        o = this.defaultFieldSets.find(t) || (this.settings ? this.settings.fieldSets.find(t) : null);
                    return o ? Object.assign({}, o, {
                        title: (0, mn.clean)(o.title, !0)
                    }) : null
                }
                getFilterSetById(e) {
                    if ("predefined_filter" === e) return this._bridge.predefined_filter;
                    const t = t => t.id == e,
                        o = pt.find(t) || (this.settings ? this.settings.filterSets.find(t) : null);
                    return o ? Object.assign({}, o, {
                        title: (0, mn.clean)(o.title, !0)
                    }) : null
                }
                addFavoriteFieldSet(e) {
                    -1 === this.favoriteFieldSets.indexOf(e) && this.favoriteFieldSets.push(e), this.settingsSaver.setJSON(this.settingKey + ".favoriteFieldSets", this.favoriteFieldSets, {
                        forceFlush: !0
                    }), this._view.updateFavoritesToolbar(), this.trackEvent("Add field set to favorites"), this._sendXWindowEvent("screener.add-field-set-to-favorites", JSON.stringify({
                        settingKey: this.settingKey,
                        date: Date.now()
                    }))
                }
                removeFavoriteFieldSet(e) {
                    this.favoriteFieldSets = this.favoriteFieldSets.filter((t => t !== e)), this.settingsSaver.setJSON(this.settingKey + ".favoriteFieldSets", this.favoriteFieldSets, {
                        forceFlush: !0
                    }), this._view.updateFavoritesToolbar(), this._sendXWindowEvent("screener.remove-field-set-from-favorites", JSON.stringify({
                        settingKey: this.settingKey,
                        date: Date.now()
                    }))
                }
                currentFieldSetId() {
                    return this.isServerRender() ? window.initData.fieldset_id : this.settingsSaver.getValue(this.settingKey + ".fieldSetId", this.defaultFieldSets[0].id)
                }
                currentFilterSetId() {
                    const e = pt.find((e => e.hasOwnProperty("disabled") && !e.disabled)) || pt[0];
                    return window.initData.filter_id || this.settingsSaver.getValue(this.settingKey + ".filterSetId", e.id)
                }
                getCurrentState() {
                    return {
                        requestParams: this._prevRequest || "none",
                        fieldSet: this.currentFieldSetId(),
                        filterSet: this.currentFilterSetId()
                    }
                }
                trackEvent(e) {
                    (0, cn.trackEvent)("Screener", e, this.markets.join(",") + " " + (this._bridge.standalone ? "standalone" : "on chart"))
                }
                numericSorter(e, t) {
                    return e > t ? 1 : -1
                }
                invalidateRequest() {
                    delete this._prevRequest
                }
                get selectedIntervalId() {
                    if (!this._bridge.hide_controls) {
                        if (this.eodRestriction.value() !== Rt.None) return "1D";
                        const e = this.settingsSaver.getValue(`${this.settingKey}.interval-id`, k);
                        return (this._bridge.onWidget || (0, vn.enabled)(Kt.ProductFeaturesEnum.SCREENER_INTERVALS) && -1 !== (0, vn.getConfig)(Kt.ProductFeaturesEnum.SCREENER_INTERVALS).interval.indexOf(e)) && x(e) ? e : k
                    }
                }
                setSelectedIntervalId(e) {
                    this.settingsSaver.setValue(`${this.settingKey}.interval-id`, e, {
                        forceFlush: !0
                    }), this._sendXWindowEvent("screener.change-selected-interval-id", JSON.stringify({
                        settingKey: this.settingKey,
                        id: e
                    }));
                    const t = x(e);
                    t && this.trackEvent(`Apply timeframe ${t.id}`)
                }
                get selectedGroups() {
                    return JSON.parse(this.settingsSaver.getValue(`${Ln}.screener-forex.groups`, '["Major","Minor"]')).map((e => xe[e] || e))
                }
                setSelectedGroups(e) {
                    const t = Object.keys(xe),
                        o = e.map((e => t.find((t => xe[t] === e)) || e));
                    this.settingsSaver.setValue(`${Ln}.screener-forex.groups`, JSON.stringify(o), {
                        forceFlush: !0
                    }), this.trackEvent("Change selected groups")
                }
                set markets(e) {
                    const t = Array.isArray(e) ? e : [e],
                        o = JSON.stringify(t);
                    this.settingsSaver.setValue(`${Ln}.${this.settingKey}.market`, o, {
                        forceFlush: !0
                    }), this.trackEvent("Change market"), this._sendXWindowEvent("screener.market-changed", JSON.stringify({
                        settingKey: this.settingKey,
                        date: Date.now()
                    }))
                }
                get preset() {
                    return window.initData.screener_preset
                }
                get markets() {
                    const e = (0, d.getDefaultMarketForLocale)(Ln, this.screener_type),
                        t = Object.keys((0, d.getMarketFieldValuesByScreenerType)(this.screener_type)),
                        o = this.settingsSaver.getValue(`${Ln}.${this.settingKey}.market`, JSON.stringify([e]));
                    let i;
                    if (this.settingsSaver.getBool(`${Ln}.${this.settingKey}.is-entire-world`, !1)) i = t;
                    else try {
                        i = JSON.parse(o), Array.isArray(i) && !i.some((e => !t.includes(e))) || (i = [e])
                    } catch (r) {
                        i = r instanceof SyntaxError && t.includes(o) ? [o] : [e]
                    }
                    if (window.initData.screener_market) return [window.initData.screener_market];
                    if (!(0, Mn.isGlobalScreenerAvailable)() && i.length > 1) return i = [e], i;
                    return i.every((e => t.includes(e))) ? i : [e]
                }
                set isEntireWorld(e) {
                    this.settingsSaver.setValue(`${Ln}.${this.settingKey}.is-entire-world`, e, {
                        forceFlush: !0
                    })
                }
                get isEntireWorld() {
                    const e = this.settingsSaver.getBool(`${Ln}.${this.settingKey}.is-entire-world`, !1);
                    return !(!(0, Mn.isGlobalScreenerAvailable)() && this.markets.length > 1) && e
                }
                get timezone() {
                    return function(e) {
                        const t = (0, d.getMarketsByScreenerType)("stock")[e];
                        return t ? t.timezone : null
                    }(this.markets[0])
                }
                _verifyAllSetsChanges(e) {
                    return (!0 === e ? Promise.resolve() : new Promise(((e, t) => {
                        this._bridge.onWidget ? e() : this.isFieldSetChanged() ? this._view.popups.showConfirmDialog(o.i18next(null, void 0, o(716801))).then((t => {
                            t ? this._view.popups.confirmAndSaveCurrentFieldSet().then(e, (t => {
                                t && Rn.logError(t), e()
                            })) : e()
                        })) : e()
                    }))).then((() => !0 === e ? Promise.resolve() : new Promise(((e, t) => {
                        this._bridge.onWidget ? e() : this.isFilterSetChanged() ? this._view.popups.showConfirmDialog(o.i18next(null, void 0, o(60440))).then((t => {
                            t ? this._view.popups.confirmAndSaveCurrentFilterSet().then(e, (t => {
                                t && Rn.logError(t), e()
                            })) : e()
                        })) : e()
                    }))))
                }
                setMarket(e, t, o) {
                    const i = Array.isArray(e) ? e : [e];
                    return !0 !== t && (0, _o.default)(i, this.markets) ? Promise.reject() : (this.markets = i, this._verifyAllSetsChanges(o).then((() => this.loadingStart.fire())).then((() => this.getMetaInfo())).then((() => {
                        this.defaultFieldSets = xt({
                            screenerType: this.screener_type,
                            isCompact: this.isServerRender(),
                            markets: this.markets,
                            subtype: "",
                            isOnWidget: this._bridge.onWidget
                        });
                        let e = this.currentFilterSetId();
                        const t = this.defaultFilterSets.find((t => t.id === e));
                        if (t && t.disabled) {
                            const t = this.defaultFilterSets.find((e => !e.disabled));
                            e = t ? t.id : ""
                        }
                        this.applyFieldSet(this.currentFieldSetId(), !0), this.applyFilterSet(e, !0), this.invalidateRequest(), this._updateEodRestriction(), this.update()
                    })))
                }
                _updateEodRestriction() {
                    const e = {
                        markets: this.markets,
                        isPro: (0, fn.isPro)(window.user),
                        isAnonymous: !window.is_authenticated,
                        screenerType: this.screener_type,
                        onWidget: (0, yi.isExternalWidget)(this._bridge)
                    };
                    this.eodRestriction.setValue(function(e) {
                        const {
                            screenerType: t,
                            markets: o,
                            onWidget: i,
                            isPro: r,
                            isAnonymous: n
                        } = e;
                        if (o.length > 1) return Rt.None;
                        if ("stock" !== t) return Rt.None;
                        const s = (0, d.getExchangesByMarkets)(o);
                        if (i) return s.every(zt.isEmbedUnrestrictedExchange) ? Rt.None : Rt.Widget;
                        if (r) return Rt.None;
                        const l = s.map(zt.getProductIdFromStockExchange);
                        return l.some((e => (0, Ut.isIDCExchange)(e, !0))) && (n || l.some((e => !!e && (0, Ht.isUserNeedSignAgreement)(e)))) ? Rt.Site : Rt.None
                    }(e))
                }
                changeScreenerType(e) {
                    return e === this.screener_type ? Promise.reject() : (this.trackEvent("Change screener type"), this._verifyAllSetsChanges().then((() => {
                        this.disabled.setValue(!0), this.marketChangeProcess = !0, this.screener_type = e, this.settingsSaver.setValue("screener.selected_type_on_chart", e, {
                            forceFlush: !0
                        }), this.settingKey = Nn[this.screener_type] || Nn.stock, this.defaultFieldSets = xt({
                            screenerType: this.screener_type,
                            markets: this.markets,
                            isCompact: this.isServerRender(),
                            subtype: "",
                            isOnWidget: this._bridge.onWidget
                        }), Ze(this.screener_type), _t(this.markets);
                        const t = this.selectedGroups;
                        Ue.sector.value = Array.isArray(t) && t[0] === o.i18next(null, void 0, o(882675)) ? null : t
                    })).then((() => this.loadingStart.fire())).then((() => this.getMetaInfo())).then((() => this.getUserSettings())).then((() => {
                        this._checkCurrentSets(), this.applyFieldSet(this.currentFieldSetId(), !0), this.applyFilterSet(this.currentFilterSetId(), !0)
                    })).then((() => {
                        let e = this.currentFilterSetId();
                        const t = this.defaultFilterSets.find((t => t.id === e));
                        if (t && t.disabled) {
                            const t = this.defaultFilterSets.find((e => !e.disabled));
                            e = t ? t.id : ""
                        }
                        this.applyFilterSet(e, !0), this.invalidateRequest(), this._updateEodRestriction(), this.updateImpl(void 0, void 0, void 0, void 0, void 0, !0), this.marketChangeProcess = !1, this.loadingComplete.subscribe(null, (() => {
                            this.disabled.setValue(!1)
                        }), !0)
                    })))
                }
                backendUrl(e) {
                    return (0, un.getBackendUrl)(this.markets, e)
                }
                onLoginStateChange(e) {
                    e || this.getUserSettings().then((() => this.applyFieldSet(this.currentFieldSetId(), !0))).then((() => this.setMarket(this.markets, !0, !0))).then((() => this._view.updateMarketButton()))
                }
                showNoticeIfNoFilters(e) {
                    let t;
                    if (e) {
                        const o = this.getFilterSetById(e);
                        t = o && o.content
                    } else t = this.currentFilterState();
                    return (!t || !Object.keys(t.filters || {}).length) && (this._view.popups.showNotice(o.i18next(null, void 0, o(957507)), o.i18next(null, void 0, o(824902))), !0)
                }
                bindScrollToBottom(e) {
                    const t = () => {
                            this.loading || this.update(null, !0)
                        },
                        o = () => {
                            En(window).bind("scrollto", {
                                to: "bottom",
                                tolerance: e
                            }, t), this.loadingComplete.unsubscribe(null, o)
                        };
                    this.loadingComplete.subscribe(null, o)
                }
                get isFastRefresh() {
                    return ["forex", "crypto"].includes(this.screener_type)
                }
                get refreshInterval() {
                    return this.isFastRefresh && !this._bridge.onWidget ? this._bridge.hide_controls ? 1 : window.is_authenticated ? this.settingsSaver.getInt(this.settingKey + ".refreshInterval", 1) || 1 : -1 : window.user && window.user.is_pro && this.settingsSaver.getInt(this.settingKey + ".refreshInterval", -1) || -1
                }
                set refreshInterval(e) {
                    this.settingsSaver.setValue(this.settingKey + ".refreshInterval", e, {
                        forceFlush: !0
                    }), this._view.resetRefreshCounter(), -1 !== e && this.trackEvent("Set refresh interval")
                }
                get view() {
                    return this._view
                }
                get searchField() {
                    return "sector" === this.screener_type || "industry" === this.screener_type ? "description" : "crypto_mkt" === this.screener_type ? "sector" : "name"
                }
                get screenerType() {
                    return this.screener_type
                }
                get screenerBridge() {
                    return this._bridge
                }
                applySwitch(e) {
                    if (delete this._bridge.screener_field_match, "crypto_mkt" === this.screener_type) this.switchFilter = {
                        left: "name",
                        operation: "match",
                        right: e + "$"
                    };
                    else if ("bonds" === this.screener_type) {
                        this.switchFilter = {
                            left: "description",
                            operation: "yields" === e ? "match" : "nmatch",
                            right: "YIELD$"
                        };
                        const t = "yields" === e ? o.i18next(null, {
                            context: "Bonds"
                        }, o(568461)) : o.i18next(null, void 0, o(862578));
                        Ue.close.title = t, Ue.close.shortTitle = t, this._view.table.setColumnTitle("close", t)
                    }
                    this.update()
                }
                hasMarkedSymbols() {
                    return It.enabled("marked_symbols") && !this._bridge.marked_symbols_disabled
                }
                _screenerSubtype() {
                    return this._bridge.screener_subtype || ""
                }
                _buildRequestData(e) {
                    if ("global" === this.markets[0]) {
                        const t = JSON.parse(e);
                        return delete t.markets, JSON.stringify(t)
                    }
                    return e
                }
                _sendScanRequest(e, t) {
                    const o = {
                        type: "POST",
                        url: this._getScanUrl("scan"),
                        data: this._buildRequestData(e),
                        success: t,
                        dataType: "text",
                        xhrFields: {
                            withCredentials: !Boolean(this._bridge.onWidget)
                        }
                    };
                    return En.ajax(o)
                }
                _getFilteredExchangesForWidget(e) {
                    return e.filter((e => !this._bridge.unavailableWidgetExchanges.includes(e)))
                }
                _getScanUrl(e) {
                    let t = this.backendUrl() + e;
                    const o = window.TradingView && window.TradingView.widgetCustomer || "";
                    return o && Dn[o] && (t += `?api_key=${Dn[o]}`), t
                }
            }(ts)
        },
        620853: (e, t, o) => {
            "use strict";
            var i = o(444372),
                r = o(778785),
                n = (o(673208), o(129859)),
                s = (o(637152), o(486393)),
                l = o(213398),
                a = o(725977);
            const c = {
                wrap: '<span class="tv-control-select__wrap tv-dropdown-behavior {{ class }}{{# touch }} tv-control-select__wrap--touch{{/ touch }}{{# disabled }} i-disabled{{/ disabled }}{{# readonly }} tv-control-select__wrap--readonly{{/ readonly}}"><span class="tv-control-select__control{{^ touch }} tv-dropdown-behavior__button{{/ touch }}{{# disabled }} i-disabled{{/ disabled }}"><span class="tv-control-select__control-inner"></span></span>{{^ touch }}<span class="tv-control-select__dropdown tv-dropdown-behavior__body {{ dropdown_class }} i-hidden"><span class="tv-control-select__scroll tv-dropdown-behavior__scroll"><span class="tv-dropdown-behavior__inscroll">{{> route }}</span></span></span>{{/ touch }}<span class="tv-control-select__caret js-dropdown-toggle"></span></span>',
                route: "{{# items }}{{# option }}{{> option }}{{/ option }}{{^ option }}{{# optgroup }}{{> optgroup }}{{/ optgroup }}{{/ option }}{{/ items }}",
                optgroup: '{{# label }}<span class="tv-dropdown-behavior__item tv-control-select__optgroup-label">{{ label }}</span>{{/ label }}{{> route }}{{# separator }}<hr class="tv-control-select__optgroup-separator">{{/ separator }}',
                option: `<span data-id="{{ id }}" class="tv-dropdown-behavior__item tv-control-select__option{{# disabled }} i-disabled{{/ disabled }}">\n\t\t\t<span class="tv-control-select__option-wrap">\n\t\t\t{{# multiple }}\n\t\t\t\t<span class="tv-control-checkbox">\n\t\t\t\t\t<input class="tv-control-checkbox__input" type="checkbox" {{# selected }} checked{{/ selected }}>\n\t\t\t\t\t<span class="tv-control-checkbox__box">${o(481516)}</span>\n\t\t\t\t</span>\n\t\t\t\t<span class="tv-control-checkbox__label">{{ label }}</span>\n\t\t\t{{/ multiple }}\n\t\t\t{{^ multiple }}\n\t\t\t\t{{ label }}\n\t\t\t{{/ multiple }}\n\t\t\t</span>\n\t\t</span>`
            };
            class d {
                constructor(e = {}) {
                    this._options = Object.assign({
                        noAnimation: !0
                    }, e), this.touch = r.mobiletouch, this.$select = this._options.$select, this._selectElement = this.$select[0], this.multiple = Boolean(this.$select.attr("multiple")), this._minDisplayCount = this._options.minDisplayCount || 1, this._emptyString = this._options.emptyString || i.t(null, {
                        context: "combobox_input"
                    }, o(589917)), this._defaultPlaceHoder = this._options.defaultPlaceHoder || !1, this.disabled = Boolean(this.$select.is(":disabled")), this.readonly = this._options.readonly, this.options = [], this.filterQuery = [], this.items = this._parseDomItems(this.$select), this._render(), e.initialValue && this.val(e.initialValue), this.$el.insertBefore(this.$select), this.$select.detach().addClass("i-inited").appendTo(this.$el)
                }
                val(e) {
                    this.multiple ? this._setMultipleValues(e) : this._setSingleValue(this._findOption(e))
                }
                enable() {
                    this.disabled = !1, this.$el.add(this.$dropdown).removeClass("i-disabled"), this.touch || (this.$el.tvDropdown("enable"), this.$control.attr("tabindex", this.$select.attr("tabindex") || 0))
                }
                disable() {
                    this.disabled = !0, this.$el.add(this.$dropdown).addClass("i-disabled"), this.touch || (this.$el.tvDropdown("disable"), this.$control.removeAttr("tabindex"))
                }
                setReadonly(e) {
                    this.readonly = e, this.$el.toggleClass("tv-control-select__wrap--readonly", e), this.$controlInner.toggleClass("tv-control-select__control-inner--readonly", e), this.$el.tvDropdown("setReadonly", e)
                }
                toggle() {
                    this.disabled || this.readonly || (this.touch ? this.$select.click() : this.$el.tvDropdown("toggle"))
                }
                open() {
                    this.disabled || this.readonly || (this.touch ? this.$select.click() : this.$el.tvDropdown("open"))
                }
                close() {
                    this.disabled || this.readonly || (this.touch ? this.$select.click() : (this._focusOption(this._selectElement.selectedIndex), this.$el.tvDropdown("close")))
                }
                destroy() {
                    this.$select.off("change"), this.$dropdown && this.$dropdown.off("click"), this.$select.removeClass("i-inited").insertBefore(this.$el), this.$el.tvDropdown("destroy"), this.$el.remove()
                }
                updateItems() {
                    this.options = [], this.items = this._parseDomItems(this.$select);
                    const e = this._renderDropdown();
                    if (!this.touch) {
                        this.$dropdown.find(".tv-control-select__option").remove();
                        const t = this.$dropdown.find(".tv-dropdown-behavior__inscroll");
                        this.$options = e.find(".tv-control-select__option");
                        for (let e = 0; e < this.$options.length; e++) {
                            const o = s(this.$options[e]),
                                i = o.data("id");
                            this.options[i] && (this.options[i].$el = o, t.append(o))
                        }
                    }
                    this.multiple ? (this._updateSelectBoxTitle(), this._updateCheckBoxes()) : this._updateSingleView(this._selectElement.selectedIndex)
                }
                _focusOption(e) {
                    const t = this.options[e].$el;
                    if (this._focusedOption = e, !this.touch) {
                        if (this._clearFocus(), t.addClass("i-active"), !this.dropdownScroll || !this.opened) return;
                        const e = this.dropdownScroll.currentPosition(),
                            o = t.outerHeight(),
                            i = t.position().top,
                            r = this.dropdownScroll.getContainerHeightWithoutHeader(),
                            n = -e + r < i + o;
                        i < -e ? this.dropdownScroll.scrollTo(i) : n && this.dropdownScroll.scrollTo(i + o)
                    }
                }
                _setSingleValue(e) {
                    const t = this.options[e].value;
                    (this.$select.val() && this.$select.val().toString()) !== t.toString() && this.$select.val(t).trigger("change")
                }
                _updateSingleView(e) {
                    const t = this.options[e];
                    t && (this._focusOption(e), this._selectElement.selectedIndex = e, this.$controlInner.text(t.label), this.$controlInner.toggleClass("tv-control-select__control-inner--option-disabled", t.disabled))
                }
                _toggleOption(e) {
                    const t = this.options[e].value,
                        o = this.$select.val() || [],
                        i = o.indexOf(t);
                    if (-1 !== i) o.splice(i, 1);
                    else if (o.length) {
                        const e = this.options[this._findOption(t)].id,
                            i = o.find((t => this.options[this._findOption(t)].id > e));
                        o.splice(i ? o.indexOf(i) : 0, 0, t)
                    } else o.push(t);
                    this._setMultipleValues(o)
                }
                _updateCheckBoxes() {
                    const e = this.$select.val() || [];
                    for (let t = 0; t < this.items.length; t++) {
                        const o = this.items[t];
                        o.$el.find(".tv-control-checkbox__input").prop("checked", -1 !== e.indexOf(o.value))
                    }
                }
                _updateSelectBoxTitle() {
                    const e = this.$select.val() || [];
                    if (e.length && !this._defaultPlaceHoder)
                        if (e.length === this.items.length) this.$controlInner.text(i.t(null, {
                            context: "combobox_input"
                        }, o(484135)));
                        else if (e.length > this._minDisplayCount) this.$controlInner.text(i.t(null, {
                        plural: "{number} items",
                        count: e.length,
                        context: "combobox_input"
                    }, o(432121)).format(e.length));
                    else {
                        const t = e.map((e => this.options[this._findOption(e)].label));
                        this.$controlInner.text(t.join(", "))
                    } else this.$controlInner.text(this._emptyString)
                }
                _setMultipleValues(e) {
                    this.$select.find("option").prop("selected", !1);
                    for (let t = 0; t < e.length; t++) {
                        const o = e[t];
                        this.$select.find(`option[value="${o}"]`).prop("selected", !0)
                    }
                    this.$select.trigger("change")
                }
                _clearFocus() {
                    this.$options.removeClass("i-active")
                }
                _findOption(e) {
                    const t = Object.keys(this.options);
                    for (let o = 0; o < t.length; o++)
                        if (this.options[t[o]].value.toString() === e.toString()) return this.options[t[o]].id
                }
                _parseDomItems(e) {
                    const t = e.children(),
                        o = [];
                    for (let e = 0; e < t.length; e++) {
                        const i = s(t[e]);
                        let r;
                        "optgroup" === i.prop("tagName").toLowerCase() ? r = {
                            optgroup: !0,
                            separator: Boolean(this._options.showOptgroupSeparators),
                            label: i.attr("label"),
                            items: this._parseDomItems(i)
                        } : "option" === i.prop("tagName").toLowerCase() && (r = {
                            id: i[0].index,
                            option: !0,
                            label: i.text().replace(/\//g, "​$&​"),
                            value: i.attr("value"),
                            disabled: i.is(":disabled")
                        }, this.options[r.id] = r), o.push(r)
                    }
                    return o
                }
                _render() {
                    if (this.$el = this._renderDropdown(),
                        this.$control = this.$el.find(".tv-control-select__control"), this.$controlInner = this.$el.find(".tv-control-select__control-inner"), !this.touch) {
                        this.$dropdown = this.$el.find(".tv-control-select__dropdown"), this.$options = this.$el.find(".tv-control-select__option");
                        for (let e = 0; e < this.$options.length; e++) {
                            const t = s(this.$options[e]),
                                o = t.data("id");
                            this.options[o] && (this.options[o].$el = t)
                        }
                    }
                    this.multiple ? (this._updateSelectBoxTitle(), this._updateCheckBoxes()) : (-1 === this._selectElement.selectedIndex && (this._selectElement.selectedIndex = 0), this._updateSingleView(this._selectElement.selectedIndex)), this.$select.on("change", (e => {
                        this.multiple ? (this._updateSelectBoxTitle(), this._updateCheckBoxes()) : this._updateSingleView(this._findOption(this.$select.val()))
                    })), this.touch || (this.$el.tvDropdown({
                        scroll: !0,
                        adaptBody: !0,
                        boundingElement: this._options.boundingElement,
                        maxHeight: this._options.maxHeight,
                        dropdownWidth: this._options.dropdownWidth,
                        noAnimation: this._options.noAnimation,
                        closeWithEsc: this._options.closeWithEsc
                    }), this.dropdownScroll = this.$el.tvDropdown("get", "scroll"), this.$dropdown.on("click", ".tv-control-select__option", (e => {
                        const t = parseInt(s(e.currentTarget).data("id"));
                        this.options[t] && !this.options[t].disabled && (this.multiple ? this._toggleOption(t) : (this._setSingleValue(t), this.close()))
                    })), this.$el.on("beforeOpenMenu", (() => {
                        this.opened = !0
                    })), this.$el.on("afterCloseMenu", (() => {
                        this.opened = !1, this.filterQuery = [], this.multiple || this._focusedOption.toString() === this._selectElement.selectedIndex.toString() || this._focusOption(this._selectElement.selectedIndex), this.multiple && this._clearFocus()
                    })), this.$el.on("click", (() => {
                        this.$control.focus()
                    })), this.$el.on("keydown", (e => {
                        this._filter(e)
                    })), this.disabled ? this.disable() : this.enable())
                }
                _renderDropdown() {
                    return s(l.render(c.wrap, {
                        items: this.items,
                        class: this.$select.attr("class"),
                        touch: this.touch,
                        multiple: this.multiple,
                        disabled: this.disabled,
                        readonly: this.readonly,
                        dropdown_class: this._options.addDropdownClass
                    }, c)).removeClass("tv-control-select")
                }
                _filter(e) {
                    if (9 === e.which) return void this.close();
                    if (13 === e.which && !this.opened) return;
                    if ((40 === e.which || 32 === e.which) && !this.opened) return this.open(), void e.preventDefault();
                    e.preventDefault(), this.opened || this.open();
                    const t = String.fromCharCode(e.which).toLowerCase();
                    if (t && -1 === [9, 13, 27, 38, 40].indexOf(e.which)) {
                        this.filterQuery.push(t);
                        const e = this.filterQuery.join("");
                        let o;
                        const i = Object.keys(this.options);
                        for (let t = 0; t < i.length; t++)
                            if (0 === this.options[i[t]].label.toLowerCase().indexOf(e) && !this.options[i[t]].disabled) {
                                o = this.options[i[t]].id;
                                break
                            }
                        void 0 !== o && this._focusOption(o), this.clearFilter && clearTimeout(this.clearFilter), this.clearFilter = setTimeout((() => {
                            this.filterQuery = []
                        }), 500)
                    }
                    32 !== e.which && 13 !== e.which || !this.opened || (this.multiple ? this._toggleOption(this._focusedOption) : (this._setSingleValue(this._focusedOption), this.close(), this.$el.one("keyup", (e => e.stopPropagation()))));
                    const o = e => {
                        let t;
                        if (this.options[this._focusedOption]) {
                            const o = this.options[this._focusedOption].$el[e](this.$dropdown, ".tv-control-select__option:not(.i-disabled)");
                            t = o.length ? o.data("id") : this._focusedOption
                        } else t = this.$options.first(".tv-control-select__option:not(.i-disabled)").data("id");
                        return t
                    };
                    40 === e.which && (this.filterQuery = [], this._focusOption(o("nextUntil"))), 38 === e.which && (this.filterQuery = [], this._focusOption(o("prevUntil"))), 27 === e.which && this.close()
                }
            }
            s.fn.tvControlSelect = (0, n.createTvBlockWithInstance)("tv-control-select", (function(e, t = {}) {
                return new d(a.extend(t, {
                    $select: e
                }))
            }))
        },
        637152: (e, t, o) => {
            "use strict";
            o.r(t), o.d(t, {
                DropdownView: () => c
            });
            o(672913), o(89225);
            var i = o(129859),
                r = o(168847),
                n = o(572845),
                s = o(791325),
                l = o(764829),
                a = o(486393);
            class c {
                constructor(e, t = {}) {
                    this.$el = e, this.$wrap = t.$wrap || e.find(".tv-dropdown-behavior__button"), this.$body = t.$body || e.find(".tv-dropdown-behavior__body"), this.notCloseWithCtrl = !!t.notCloseWithCtrl && t.notCloseWithCtrl, this.closeWithEsc = void 0 === t.closeWithEsc || t.closeWithEsc, this.closeWithEsc && this.$el.attr("tabIndex", 0), (e.data("scroll") || t.scroll) && (this.$scroll = this.$body.find(".tv-dropdown-behavior__scroll"), this.$inScroll = this.$scroll.find(".tv-dropdown-behavior__inscroll"), this.scroll = new r.SidebarCustomScroll(this.$scroll[0], this.$inScroll[0], {
                        showTopShadow: !1,
                        showBottomShadow: !1
                    }), this.$scrollBar = a(this.scroll.getScrollBar()), this.$scrollBar && this.$scrollBar.on("mousedown.tv-dropdown-view-scroll", (() => {
                        this.offClickOutside(), a(document).on("mouseup.tv-dropdown-view-scroll", (() => {
                            this.onClickOutside(), a(document).off("mouseup.tv-dropdown-view-scroll")
                        }))
                    }))), (e.data("adaptBody") || t.adaptBody) && (this._adaptBody = !0), (e.data("adaptOnlyInScrollHeight") || t.adaptOnlyInScrollHeight) && (this._adaptOnlyInScrollHeight = !0), this._fitScreen = e.data("fitScreen") || t.fitScreen, this._maxHeight = e.data("maxHeight") || t.maxHeight, this._dropdownWidth = e.data("dropdownWidth") || t.dropdownWidth, this._boundingElement = t.boundingElement, this.$wrap.add(e.find(".js-dropdown-toggle")).on("click", (e => {
                        a(e.currentTarget).hasClass("js-prevent-dropdown") || this.toggle()
                    })), this._checkIgnoreClickOutside = [], l.enabled("embed_resizer_overrides") && n.EmbedViewportDimensionsProvider.getInstance().startListening()
                }
                toggle() {
                    this.opened ? this.close(!0) : this.open()
                }
                open() {
                    this.opened || this.disabled || this.readonly || (this.$el.trigger("beforeOpenMenu"), this.$body.removeClass("i-hidden").addClass("i-opened"), this.$wrap.addClass("i-dropped"), this.$el.addClass("i-opened"), "horz" === this._fitScreen && this.fitHorizontally(), this._adaptBody && this.adaptBody(), this.onClickOutside(), this.$el.trigger("updateScroll"), this.$el.trigger("afterOpenMenu"), this.opened = !0, this.closeWithEsc && this.$el.on("keypress keyup", (e => {
                        e.keyCode === s.ESC && this.close(!0)
                    })))
                }
                onClickOutside() {
                    setTimeout((() => {
                        this.$body.on("clickoutside", (e => {
                            this._checkIgnoreClickOutside.length && this._checkIgnoreClickOutside.some((t => t(e))) || this.close(!0)
                        }))
                    }), 0)
                }
                offClickOutside() {
                    this.$body.off("clickoutside")
                }
                setCheckIgnoreClickOutside(e) {
                    this._checkIgnoreClickOutside.push(e)
                }
                dropCheckIgnoreClickOutside(e) {
                    var t = this._checkIgnoreClickOutside.indexOf(e); - 1 !== t && this._checkIgnoreClickOutside.splice(t, 1)
                }
                close(e = !1) {
                    !this.opened || this.disabled || this.readonly || !e && this.notCloseWithCtrl && (window.event.ctrlKey || window.event.metaKey) || (this.offClickOutside(), this.$wrap.removeClass("i-dropped"), this.$el.trigger("beforeCloseMenu"), this.$body.removeClass("i-opened").addClass("i-hidden"), this.$el.removeClass("i-opened"), this.closeWithEsc && this.$el.off("keypress keyup"), this.opened = !1, this.$el.trigger("afterCloseMenu"))
                }
                isOpened() {
                    return this.opened
                }
                updateScroll() {
                    this.scroll && (this.scroll.updateScrollBar(), this.scroll.scrollToStart())
                }
                enable() {
                    this.$wrap.removeClass("i-disabled"), this.disabled = !1
                }
                disable() {
                    this.$wrap.addClass("i-disabled"), this.disabled = !0
                }
                setReadonly(e) {
                    this.readonly = e
                }
                adaptBody() {
                    const e = this.$body,
                        t = this.$wrap.get(0).getBoundingClientRect(),
                        o = this._boundingElement ? this._boundingElement.getBoundingClientRect() : {
                            top: 0,
                            bottom: window.innerHeight,
                            height: window.innerHeight
                        };
                    if (l.enabled("embed_resizer_overrides")) {
                        const e = n.EmbedViewportDimensionsProvider.getInstance().data();
                        e && (o.top = Math.max(o.top, e.top - 32), o.height = Math.min(o.height, e.height), o.bottom = Math.min(o.bottom, e.bottom))
                    }
                    const i = parseFloat(e.css("padding-top")),
                        r = parseFloat(e.css("padding-bottom")),
                        s = this.$inScroll.outerHeight(!0) + i + r;
                    if (this.scroll && this.scroll.scrollToStart(), this._adaptOnlyInScrollHeight) {
                        const i = e.find(".js-dropdown-dummy"),
                            n = i ? parseFloat(i.css("padding-bottom")) + parseFloat(i.css("margin-bottom")) : 0,
                            s = t.top + t.height + n;
                        return void this.$el.find(".tv-dropdown-behavior__scroll").css("maxHeight", o.bottom - r - s - 25)
                    }
                    const a = this._maxHeight || s,
                        c = t.top + a + 25 <= o.bottom,
                        d = o.top + 15 + a <= t.bottom;
                    let h, u = this._maxHeight || "auto";
                    if (c) h = -i;
                    else if (d) h = -a + t.height + r;
                    else {
                        h = -t.top + o.top + 15 + 25 + i + r;
                        const e = o.height - 15 - 25 - r;
                        a > e && (u = e)
                    }
                    e.css("top", h), e.height(u), this._dropdownWidth && e.width(this._dropdownWidth)
                }
                fitHorizontally() {
                    this.$body.css("marginLeft", 0);
                    const e = document.body.getBoundingClientRect(),
                        t = parseFloat(a(document.body).css("paddingRight")),
                        o = this.$body.offset();
                    o.right = o.left + this.$body.outerWidth();
                    const i = Math.max(Math.min(0, e.right - t - o.right), e.left - o.left);
                    i && this.$body.css("marginLeft", i)
                }
                destroy() {
                    this.scroll && this.scroll.destroy(), this.offClickOutside(), this.$el.find(".js-dropdown-toggle").off("click"), this.$wrap.off("click")
                }
            }
            a.fn.tvDropdown = (0, i.createTvBlockWithInstance)("tv-dropdown", (function(e, t = {}) {
                return new c(e, t)
            }))
        },
        716004: (e, t, o) => {
            e = o.nmd(e), TradingView.cleanButAmpersand = function(e, t) {
                    var o = t ? ["&amp;"] : ["&"];
                    return TradingView.clean(e, t, o)
                }, TradingView.strip_tags = function(e) {
                    return e && e.replace ? e.replace(/(<([^>]+)>)/gi, "") : e
                }, TradingView.encodeSpread = function(e) {
                    return encodeURIComponent(e)
                }, TradingView.clean = function(e, t, o) {
                    var i = [
                            ["&", "&amp;"],
                            ["<", "&lt;"],
                            [">", "&gt;"],
                            ['"', "&quot;"],
                            ["'", "&#039;"],
                            ["'", "&#39;"]
                        ],
                        r = e;
                    if (!e || !e.replace) return r;
                    for (var n = 0; n < i.length; n++) {
                        var s = i[n][0],
                            l = i[n][1];
                        o && o.indexOf && -1 !== o.indexOf(t ? l : s) || (r = t ? r.replace(new RegExp(l, "g"), s) : r.replace(new RegExp(s, "g"), l))
                    }
                    return r
                },
                e && e.exports && (e.exports = {
                    clean: TradingView.clean,
                    cleanButAmpersand: TradingView.cleanButAmpersand,
                    stripTags: TradingView.strip_tags
                })
        },
        939656: (e, t, o) => {
            "use strict";

            function i(e, t, o) {
                return e * (1 - o) + t * o
            }
            o.d(t, {
                doAnimate: () => s,
                lerp: () => i
            });
            const r = {
                from: 0,
                duration: 250,
                easing: o(930203).easingFunc.easeOutCubic
            };
            class n {
                constructor(e) {
                    this._doing = !0, this._completed = !1, this._options = { ...r,
                        ...e
                    };
                    const t = performance.now();
                    window.requestAnimationFrame((e => {
                        this._animation(t, this._options.from, e)
                    }))
                }
                stop() {
                    this._doing = !1
                }
                completed() {
                    return this._completed
                }
                _animation(e, t, o) {
                    if (!this._doing) return void this._finishAnimation();
                    const r = (o = !o || o < 1e12 ? performance.now() : o) - e,
                        n = r >= this._options.duration || t === this._options.to,
                        s = i(this._options.from, this._options.to, this._options.easing(r / this._options.duration)),
                        l = n ? this._options.to : s,
                        a = l - t;
                    this._options.onStep(a, l), n ? this._finishAnimation() : window.requestAnimationFrame((t => {
                        this._animation(e, l, t)
                    }))
                }
                _finishAnimation() {
                    this._options.onComplete && this._options.onComplete(), this._completed = !0
                }
            }

            function s(e) {
                return new n(e)
            }
        },
        881025: (e, t, o) => {
            "use strict";
            o.r(t), o.d(t, {
                detectAutoDirection: () => f,
                forceLTRStr: () => d,
                forceLTRStrSsr: () => h,
                forceRTLStr: () => p,
                getLTRScrollLeft: () => _,
                getLTRScrollLeftOffset: () => g,
                isRtl: () => r,
                startWithLTR: () => c,
                stripLTRMarks: () => a,
                stripLTRStrSsr: () => u
            });
            var i = o(64531);
            const r = () => "rtl" === window.document.dir,
                n = "‪",
                s = "‬",
                l = new RegExp("‎|‪|‫|‬", "g");

            function a(e) {
                return "" !== e && r() && null != e ? e.replace(l, "") : e
            }

            function c(e) {
                return "" !== e && r() && null != e ? "‎" + e : e
            }

            function d(e) {
                return "" !== e && r() && null != e ? n + e + s : e
            }

            function h(e) {
                return n + e + s
            }

            function u(e) {
                return e.startsWith(n) && e.endsWith(s) ? e.slice(1, -1) : e
            }

            function p(e) {
                return "" !== e && r() && null != e ? "‫" + e + s : e
            }

            function _(e) {
                return (0, i.getNormalizedScrollLeft)(e, "rtl")
            }

            function g(e, t) {
                const o = (0, i.detectScrollType)();
                if ("indeterminate" === o) return 0;
                switch (o) {
                    case "negative":
                        t = e.clientWidth - e.scrollWidth + t;
                        break;
                    case "reverse":
                        t = e.scrollWidth - e.clientWidth - t
                }
                return t
            }
            const m = /[^\u0000-\u0040\u005B-\u0060\u007B-\u00BF\u00D7\u00F7\u02B9-\u02FF\u2000-\u200E\u2010-\u2029\u202C\u202F-\u2BFF]/,
                v = /[\u0590-\u07FF\u200F\u202B\u202E\uFB1D-\uFDFD\uFE70-\uFEFC]/;

            function f(e) {
                const t = m.exec(e);
                return t ? v.test(t[0]) ? "rtl" : "ltr" : ""
            }
        },
        590508: (e, t, o) => {
            "use strict";
            o.r(t), o.d(t, {
                createGoProDialog: () => a,
                onGoProDialog: () => l
            });
            var i = o(638456);
            const r = new Set,
                n = [],
                s = new Promise((e => {
                    window.addEventListener("load", (() => {
                        setTimeout((() => {
                            e()
                        }), 3e3)
                    })), setTimeout((() => {
                        e()
                    }), 3e3)
                }));

            function l(e, t) {
                n.push(e), t && t.forEach((e => {
                    r.add(e)
                }))
            }
            async function a(e) {
                var t;
                if (await s, n.forEach((t => {
                        t(e.feature)
                    })), r.has(e.feature)) return;
                if ((0, i.isSymphonyEmbed)()) {
                    const t = await Promise.all([o.e(96439), o.e(46445), o.e(77476), o.e(73399), o.e(43311), o.e(49978), o.e(44581)]).then(o.bind(o, 193510));
                    e.actionsOverride = t.symphonyActions, e.hideLimitTable = !0
                }
                const l = await Promise.all([o.e(56242), o.e(69297), o.e(75816), o.e(46445), o.e(65857), o.e(22164), o.e(36010), o.e(33253), o.e(491), o.e(34693), o.e(88778), o.e(43311), o.e(35955), o.e(20431), o.e(25790), o.e(82321), o.e(29147), o.e(24229), o.e(45113), o.e(5246)]).then(o.bind(o, 936819));
                await (null === (t = window.pro) || void 0 === t ? void 0 : t.ensureValidShopConf()), l.renderGoproDialog(e)
            }
            window.TradingView.createGoProDialog = a
        },
        927094: (e, t, o) => {
            "use strict";
            o.r(t), o.d(t, {
                createNoticeDialog: () => r,
                showNoticeDialog: () => n
            });
            var i = o(444372);
            async function r(e) {
                return (await Promise.all([o.e(57335), o.e(77476), o.e(42810), o.e(96645), o.e(10417), o.e(91797), o.e(61135), o.e(59355), o.e(86021), o.e(25977), o.e(46086), o.e(34834)]).then(o.bind(o, 81684))).createDialog({
                    width: 400,
                    destroyOnClose: !0,
                    title: i.t(null, void 0, o(620748)),
                    content: i.t(null, void 0, o(653497)),
                    contentWrapTemplate: '<div class="tv-dialog__section tv-dialog__section--no-border"><div class="tv-text"><p></p></div></div>',
                    actionsWrapTemplate: '<div class="tv-dialog__section tv-dialog__section--actions tv-dialog__section--no-border">',
                    actions: [{
                        name: "ok",
                        type: "primary",
                        text: i.t(null, void 0, o(819295)),
                        method: "close",
                        key: [13, 32]
                    }],
                    ...e
                })
            }

            function n(e) {
                r(e).then((e => e.open()))
            }
        },
        296638: (e, t, o) => {
            "use strict";
            o.d(t, {
                AggregateError: () => v,
                ApiError: () => m,
                accumulateErrors: () => n,
                checkPhoneCode: () => c,
                fetchPost: () => s,
                firstLoginData: () => l,
                firstLoginDataUrl: () => r,
                recoverPassword: () => y,
                recoverPasswordUrl: () => f,
                recoveryPassword: () => d,
                resendLink: () => a,
                signin: () => p,
                signinUrl: () => h,
                signup: () => g,
                signupUrl: () => _,
                socialAuth: () => w
            });
            var i = o(702598);
            const r = "/accounts/first_login_data/";

            function n(e, t) {
                return Object.entries(e).map((e => new m(e[1].join("\n"), t, e[0])))
            }

            function s(e, t) {
                return (0, i.fetch)(e, {
                    method: "POST",
                    credentials: "include",
                    mode: "same-origin",
                    body: t
                })
            }

            function l(e) {
                return s(r, e).then((e => e.ok ? e.json() : e.json().then((t => {
                    throw new v(n(t.errors, e.status))
                }))))
            }

            function a() {
                return s("/api/v1/users/anon/change-email/resend/").then((e => e.ok ? e.json() : e.json().then((e => {
                    throw Error(e.error)
                }))))
            }

            function c(e) {
                return s("/api/v1/recover_password/check_phone_code/", e).then((e => e.ok ? e.json() : e.json().then((e => {
                    throw Error(e.error)
                }))))
            }

            function d(e) {
                return s("/api/v1/recover_password/", e).then((e => e))
            }
            const h = "/accounts/signin/";

            function u(e) {
                return e.json().then((t => {
                    if ("error" in t && "" !== t.error || "code" in t || !e.ok) throw new m(t.error || t.detail, e.status, t.code, t.confirm_auth_data, t.two_factor_types, function(e) {
                        if (e.signature) return {
                            signature: e.signature,
                            email: e.email || "",
                            phone: e.phone || "",
                            socials: []
                        };
                        return
                    }(t));
                    return t
                }))
            }

            function p(e) {
                return s(h, e).then(u)
            }
            const _ = "/accounts/signup/";

            function g(e) {
                return s(_, e).then((e => e.json().then((t => {
                    if ("errors" in t && "" !== t.errors) throw new v(n(t.errors, e.status))
                }))))
            }
            class m extends Error {
                constructor(e, t, o, i, r, n) {
                    super(e), this.type = o, this.status = t, this.secondFactorTypes = r, this.socialConfirmData = i, this.resetPasswordData = n
                }
            }
            class v extends Error {
                constructor(e) {
                    super(e.map((e => e.message)).join("\n")), this.errors = [], this.errors = e
                }
            }
            const f = "/api/v1/recover_password/search/";

            function y(e) {
                return s(f, e).then(u)
            }
            const b = {
                headers: {
                    Accept: "application/json"
                }
            };

            function w(e) {
                const t = new URL(window.origin + "/accounts/complete/android-jwt/");
                return Object.entries(e).forEach((([e, o]) => o && t.searchParams.append(e, o))), (0, i.fetch)(t.href, b).then(u)
            }
        },
        802588: (e, t, o) => {
            "use strict";
            o.d(t, {
                isShowPromoVideo: () => h,
                isSignModalOpen: () => d,
                showSignModal: () => c
            });
            var i = o(586240),
                r = o(901896),
                n = o(490778);
            const s = i["media-mf-tablet-landscape"],
                l = i["media-mf-tablet-vertical"];
            let a = () => !1;
            async function c(e) {
                const t = Object.assign({}, e, {
                    isShowVideo: h()
                });
                if (window.TVD && window.TVD.signIn) return window.TVD.signIn(t); {
                    ! function() {
                        const e = window.matchMedia(i["media-mf-tablet-landscape"]).matches ? n : r,
                            t = document.createElement("link");
                        t.rel = "preload", t.as = "image", t.href = e, document.head.appendChild(t)
                    }();
                    const e = await Promise.all([o.e(69327), o.e(75816), o.e(46445), o.e(93703), o.e(21356), o.e(62093), o.e(44524), o.e(53799), o.e(62564), o.e(46489), o.e(25480), o.e(29800), o.e(77476), o.e(23141), o.e(95083), o.e(29296), o.e(64797), o.e(3062), o.e(22602), o.e(91248), o.e(60048), o.e(24177), o.e(82321), o.e(97046), o.e(64436), o.e(62526), o.e(36123)]).then(o.bind(o, 257020));
                    return a = e.isSignModalOpen, e.showSignModal(t)
                }
            }

            function d() {
                return a()
            }

            function h() {
                const e = window.matchMedia(s).matches,
                    t = window.matchMedia(l).matches,
                    o = window.innerWidth,
                    i = window.innerHeight;
                return !!e || !!t && !(!e && i < o)
            }
        },
        469959: (e, t, o) => {
            "use strict";
            o.d(t, {
                paidAccountCheck: () => s
            });
            var i = o(49437),
                r = o(638456);
            const n = (0, o(338619).getLogger)("PaidAccountCheck");
            async function s(e) {
                const {
                    onlyCheck: t,
                    successButtonText: s,
                    isNeedCancelButton: l
                } = e, a = window.user, c = i.TVLocalStorage.getItem("previous_username");
                if (a && window.is_authenticated && !a.is_pro && c && !(0, r.isSymphonyEmbed)()) {
                    const {
                        getProfile: e
                    } = await Promise.all([o.e(35256), o.e(90254)]).then(o.bind(o, 219173));
                    try {
                        const i = await e(c);
                        if (Boolean(i.pro_plan)) {
                            if (t) return c; {
                                const {
                                    showWrongAccountDialog: e
                                } = await Promise.all([o.e(18607), o.e(15190), o.e(12019)]).then(o.bind(o, 277019));
                                return e({
                                    userName: c,
                                    isNeedCancelButton: l,
                                    successButtonText: s
                                })
                            }
                        }
                    } catch (e) {
                        n.logError(e.message)
                    }
                }
                return !1
            }
        },
        572845: (e, t, o) => {
            "use strict";
            o.d(t, {
                EmbedViewportDimensionsProvider: () => r
            });
            var i = o(764829);
            class r {
                constructor() {
                    this._data = null, this._messageReceiver = null
                }
                startListening() {
                    this._messageReceiver || (this._messageReceiver = e => {
                        if (e.data) try {
                            const t = JSON.parse(e.data);
                            "set-embed-resizer-overrides" === t.event && (this._data = t.edges)
                        } catch (e) {}
                    }, this._addMessageListener())
                }
                destroy() {
                    this._removeMessageListener()
                }
                data() {
                    return this._data
                }
                static getInstance() {
                    return this._instance || (this._instance = new r), this._instance
                }
                _addMessageListener() {
                    this._messageReceiver && window.addEventListener("message", this._messageReceiver)
                }
                _removeMessageListener() {
                    this._messageReceiver && window.removeEventListener("message", this._messageReceiver), this._messageReceiver = null
                }
            }
            i.enabled("embed_resizer_overrides") && r.getInstance().startListening()
        },
        257288: (e, t, o) => {
            "use strict";
            o.d(t, {
                getTranslatedSymbolDescription: () => n
            });
            var i = o(444372);

            function r(e) {
                const t = `#${e}-symbol-description`,
                    r = i.t(t, void 0, o(956316));
                return r === t ? null : r
            }

            function n(e) {
                if (void 0 !== e.pro_name) {
                    const t = r(e.pro_name);
                    if (null !== t) return t;
                    if (void 0 !== e.short_name) {
                        const t = r(e.short_name);
                        if (null !== t) return t
                    }
                }
                return "en" !== e.language && void 0 !== e.local_description && e.language === window.language || "en" === e.language && void 0 !== e.local_description && e.language === window.language ? e.local_description : e.description || ""
            }
        },
        547777: (e, t, o) => {
            "use strict";

            function i(e) {
                return e + "…"
            }
            o.d(t, {
                appendEllipsis: () => i
            })
        },
        705526: (e, t, o) => {
            "use strict";
            o.d(t, {
                addUtmToUrl: () => r
            });
            var i = o(248213);

            function r(e, t) {
                if (!/([a-zA-Z0-9.-]*tradingview.com)|localhost/.test(e)) return e;
                const o = (0, i.buildUtmQueryString)(t);
                if ("" === o) return e;
                const r = e.indexOf("?"),
                    n = e.indexOf("#"),
                    s = -1 !== n;
                if (-1 !== r && (!s || r < n)) {
                    return `${e.slice(0,r)}?${s?e.slice(r+1,n):e.slice(r+1)}&${o}${s?e.slice(n):""}`
                }
                if (s) {
                    return `${e.slice(0,n)}?${o}${e.slice(n)}`
                }
                return `${e}?${o}`
            }
        },
        248213: (e, t, o) => {
            "use strict";
            o.d(t, {
                buildUtmQueryString: () => l,
                buildUtmQueryStringFromUrlParams: () => a,
                filterUtmInfo: () => s
            });
            var i = o(226057),
                r = o(433524);
            const n = ["utm_source", "utm_medium", "utm_campaign"];

            function s(e) {
                const t = {};
                return n.forEach((o => {
                    const i = e[o];
                    "string" == typeof i && "" !== i && (t[o] = (0, r.htmlEscape)(i))
                })), t
            }

            function l(e, t = !1) {
                const o = (0, i.createUrlParams)(e);
                return o && t ? "?" + o : o
            }

            function a(e) {
                return l(s((0, i.getUrlParams)()), e)
            }
        },
        943645: (e, t, o) => {
            "use strict";

            function i(e) {
                let t, o;
                return e.includes(":") ? (o = e.split(":")[1], t = e) : o = e, {
                    proName: t,
                    shortName: o
                }
            }
            o.d(t, {
                getShortNameAndProName: () => i
            })
        },
        460925: e => {
            e.exports = '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 18 18" width="18" height="18"><path fill="currentColor" d="M12 4h3v1h-1.04l-.88 9.64a1.5 1.5 0 0 1-1.5 1.36H6.42a1.5 1.5 0 0 1-1.5-1.36L4.05 5H3V4h3v-.5C6 2.67 6.67 2 7.5 2h3c.83 0 1.5.67 1.5 1.5V4ZM7.5 3a.5.5 0 0 0-.5.5V4h4v-.5a.5.5 0 0 0-.5-.5h-3ZM5.05 5l.87 9.55a.5.5 0 0 0 .5.45h5.17a.5.5 0 0 0 .5-.45L12.94 5h-7.9Z"/></svg>'
        },
        882441: e => {
            e.exports = '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 28 28" width="28" height="28"><path fill="currentColor" d="M11.88 4.23a10.04 10.04 0 0 1 4.24 0h-.02c.4.75.76 1.69 1.05 2.77h1.04c-.23-.9-.5-1.7-.81-2.42A10 10 0 0 1 21.14 7h1.35A10.98 10.98 0 0 0 5.5 7h1.35a10 10 0 0 1 3.76-2.42c-.3.72-.58 1.53-.8 2.42h1.03c.29-1.08.65-2.02 1.05-2.76l-.02-.01ZM11.9 23.76c-.4-.74-.76-1.68-1.05-2.76H9.8c.23.9.5 1.7.81 2.42A10 10 0 0 1 6.86 21H5.5a10.98 10.98 0 0 0 16.98 0h-1.35a10 10 0 0 1-3.76 2.42c.3-.72.58-1.53.8-2.42h-1.03c-.29 1.08-.65 2.02-1.05 2.76l.02.01a10.04 10.04 0 0 1-4.24 0h.02ZM11 17.61c-.86.94-2.35 1.39-3.82 1.39-3 0-5.18-2.18-5.18-5 0-2.8 2.13-5 5.02-5 1.56 0 2.82.53 3.71 1.46l-1.08 1.13a3.55 3.55 0 0 0-2.63-1.05A3.37 3.37 0 0 0 3.59 14c0 1.96 1.4 3.46 3.58 3.46.86 0 1.75-.18 2.3-.63v-2.15H7.05v-1.5H11v4.43ZM18 19v-1.5h-4.15c.18-.69.84-1.18 1.5-1.68l.56-.42c1.32-1.04 2-1.88 2-3.45C17.91 10 16.58 9 15.06 9 13.34 9 12 10.27 12 12.17h1.42c.01-1.04.72-1.67 1.63-1.67.9 0 1.44.62 1.44 1.5 0 .99-.58 1.54-1.52 2.28l-.52.4c-1.2.93-2.45 1.89-2.45 3.77V19h6ZM22.5 19c2.05 0 3.5-1.54 3.5-3.73v-2.54C26 10.54 24.55 9 22.5 9S19 10.54 19 12.73v2.54c0 2.19 1.45 3.73 3.5 3.73Zm0-1.48c-1.18 0-2-.83-2-2.25v-2.54c0-1.4.82-2.25 2-2.25 1.18 0 2 .84 2 2.25v2.54c0 1.42-.82 2.25-2 2.25Z"/></svg>'
        },
        19138: e => {
            e.exports = '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 28 28" width="28" height="28"><path fill="currentColor" fill-rule="evenodd" d="M11.88 4.23a10.04 10.04 0 0 1 4.24 0h-.02a16.57 16.57 0 0 1 1.57 5.24A12.6 12.6 0 0 1 14 10c-1.3 0-2.55-.19-3.67-.53.33-2.15.89-3.97 1.57-5.23l-.02-.01Zm-1.26.35a10.01 10.01 0 0 0-4.08 2.76 9.02 9.02 0 0 0 2.83 1.79c.28-1.75.71-3.3 1.25-4.55Zm-1.4 5.57c-1.27-.5-2.4-1.18-3.3-2.03a9.95 9.95 0 0 0 0 11.77c.92-.84 2.04-1.52 3.31-2.02a31.8 31.8 0 0 1 0-7.72Zm.16 8.74a9.58 9.58 0 0 0-2.83 1.78c1.1 1.22 2.5 2.18 4.07 2.75a19.14 19.14 0 0 1-1.24-4.53Zm2.5 4.88h.02a16.55 16.55 0 0 1-1.57-5.22 12.34 12.34 0 0 1 7.34 0 16.55 16.55 0 0 1-1.57 5.21l.02.01a10.04 10.04 0 0 1-4.24 0Zm5.5-.35a10.01 10.01 0 0 0 4.07-2.75 9.58 9.58 0 0 0-2.83-1.78c-.28 1.74-.7 3.29-1.24 4.53Zm1.39-5.55c1.27.5 2.4 1.18 3.31 2.02a9.96 9.96 0 0 0 0-11.77c-.9.85-2.03 1.54-3.3 2.03a31.81 31.81 0 0 1-.01 7.72Zm-.97-7.4a13.66 13.66 0 0 1-7.6 0 30.98 30.98 0 0 0 0 7.07 13.38 13.38 0 0 1 7.6 0 30.96 30.96 0 0 0 0-7.07Zm.83-1.34a9.02 9.02 0 0 0 2.83-1.8 10.01 10.01 0 0 0-4.08-2.75c.54 1.25.97 2.8 1.25 4.55ZM14 3a11 11 0 1 0 0 22 11 11 0 0 0 0-22Z"/></svg>'
        },
        324020: e => {
            e.exports = '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 28 28" width="28" height="28"><path fill="currentColor" d="M15 5H6.5C5.67 5 5 5.67 5 6.5v15c0 .83.67 1.5 1.5 1.5h15c.83 0 1.5-.67 1.5-1.5V16h1v5.5a2.5 2.5 0 0 1-2.5 2.5h-15A2.5 2.5 0 0 1 4 21.5v-15A2.5 2.5 0 0 1 6.5 4H15v1Zm7.41-.3a2 2 0 0 0-2.82 0l-.94.95-7.5 7.5-1 1-.15.14V19h4.7l.15-.15 1-1 7.5-7.5.94-.94a2 2 0 0 0 0-2.82L22.41 4.7Zm-2.12.71a1 1 0 0 1 1.42 0l1.88 1.88a1 1 0 0 1 0 1.42l-.59.58-1.65-1.64L19.71 6l.58-.59Zm.36 2.94L22.29 10l-6.79 6.8-1.65-1.65-1.64-1.65L19 6.7l1.65 1.65Zm-7.5 7.5 1.64 1.65-.5.5H11v-3.3l.5-.5 1.65 1.65Z"/></svg>'
        },
        470088: e => {
            e.exports = '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 22 15" width="22" height="15"><g fill="none" fill-rule="evenodd" stroke-width="2"><path stroke="#757575" d="M6.25 5.812L11 10.087l4.75-4.275M11 9.868V.315"/><path stroke="#ADAEB0" d="M21 10v4H1v-4"/></g></svg>'
        },
        820713: e => {
            e.exports = '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 18 18" width="18" height="18"><g transform="translate(-8 -7)"><path fill-rule="evenodd" d="M17 11c1.38 0 2.63.56 3.54 1.46L18 15h6V9l-2.05 2.05A6.976 6.976 0 0 0 17 9c-3.53 0-6.43 2.61-6.92 6h2.02a5 5 0 0 1 4.9-4zm6.92 6H21.9a5 5 0 0 1-4.9 4c-1.38 0-2.63-.56-3.54-1.46L16 17h-6v6l2.05-2.05A6.976 6.976 0 0 0 17 23c1.55 0 2.98-.51 4.14-1.36l1.5-1.5A6.89 6.89 0 0 0 23.92 17z"/></g></svg>'
        },
        376844: e => {
            e.exports = '<svg xmlns="http://www.w3.org/2000/svg" viewBox="299 131 12 7" width="12" height="7"><path fill="none" d="M300 132l5 5 5-5"/></svg>'
        },
        372665: e => {
            e.exports = '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 14 14" width="14" height="14"><path d="M10.893 9.512l.458 3.624c.014.105-.006.16-.02.176-.028.03-.109.005-.182-.03L7.812 11.73a1.973 1.973 0 0 0-.811-.16c-.302 0-.59.057-.81.16l-3.338 1.552c-.118.056-.164.051-.182.03-.014-.016-.034-.07-.02-.178L3.11 9.51c.06-.503-.162-1.18-.505-1.54L.087 5.302c-.085-.091-.09-.148-.086-.158.003-.01.04-.053.16-.077l3.621-.689c.491-.09 1.069-.506 1.315-.948L7.004 0l1.902 3.43c.246.442.824.859 1.312.947l3.617.69c.123.024.162.068.164.077.003.01-.003.066-.089.157L11.4 7.97c-.348.367-.57 1.045-.506 1.543z"/></svg>'
        },
        959597: e => {
            e.exports = '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 14 14" width="14" height="14"><path d="M9.901 9.639c-.102-.797.218-1.775.77-2.356l1.438-1.527-2.07-.395c-.784-.142-1.615-.742-2.008-1.446L7.003 2.06 5.97 3.917c-.391.702-1.222 1.301-2 1.443l-2.08.396 1.44 1.526c.547.577.866 1.549.77 2.353l-.262 2.086 1.93-.897a2.95 2.95 0 0 1 1.233-.254c.44 0 .87.085 1.233.254l1.93.897-.263-2.082zm.992-.127l.458 3.624c.014.105-.006.16-.02.176-.028.03-.109.005-.182-.03L7.812 11.73a1.973 1.973 0 0 0-.811-.16c-.302 0-.59.057-.81.16l-3.338 1.552c-.118.056-.164.051-.182.03-.014-.016-.034-.07-.02-.178L3.11 9.51c.06-.503-.162-1.18-.505-1.54L.087 5.302c-.085-.091-.09-.148-.086-.158.003-.01.04-.053.16-.077l3.621-.689c.491-.09 1.069-.506 1.315-.948L7.004 0l1.902 3.43c.246.442.824.859 1.312.947l3.617.69c.123.024.162.068.164.077.003.01-.003.066-.089.157L11.4 7.97c-.348.367-.57 1.045-.506 1.543z"/></svg>'
        },
        663719: e => {
            e.exports = '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 60 60"><path d="M0 46l35-35 14 14-35 35H0zM39 7l6-6c5-5 19 9 14 14l-6 6z"/></svg>'
        },
        491540: e => {
            e.exports = '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 18 18" width="18" height="18" fill="none"><path stroke="currentColor" d="M2.5 14.5c1.68-1.26 3.7-2 6.5-2s4.91.74 6.5 2m-13-11c1.68 1.26 3.7 2 6.5 2s4.91-.74 6.5-2"/><circle stroke="currentColor" cx="9" cy="9" r="8.5"/><path stroke="currentColor" d="M13.5 9c0 2.42-.55 4.58-1.4 6.12-.87 1.56-1.98 2.38-3.1 2.38s-2.23-.82-3.1-2.38c-.85-1.54-1.4-3.7-1.4-6.12s.55-4.58 1.4-6.12C6.77 1.32 7.88.5 9 .5s2.23.82 3.1 2.38c.85 1.54 1.4 3.7 1.4 6.12z"/></svg>'
        },
        83170: e => {
            e.exports = '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 14 12" width="14" height="12"><g fill="none" fill-rule="evenodd" stroke="#9DB2BD"><path d="M1 0l12 12M13 0L1 12"/></g></svg>'
        },
        630001: e => {
            e.exports = '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 19 22" width="19" height="22" fill="none"><path fill="currentColor" fill-rule="evenodd" d="M5 1v9.13a4 4 0 0 1 0 7.75V21a1 1 0 1 1-2 0v-3-.12a4 4 0 0 1 0-7.75V1a1 1 0 0 1 2 0zM2 14a2 2 0 1 1 4 0 2 2 0 0 1-4 0zm12-9.88V1a1 1 0 1 1 2 0v3.12a4 4 0 0 1 0 7.75V21a1 1 0 1 1-2 0v-9.13a4 4 0 0 1 0-7.75zM15 10a2 2 0 1 0 0-4 2 2 0 0 0 0 4z"/></svg>'
        },
        289523: e => {
            e.exports = '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" width="20" height="20"><path fill="none" fill-rule="evenodd" stroke-linecap="round" stroke-linejoin="round" d="M8.36 3.608a6.002 6.002 0 1 0 2.755 11.672 6.01 6.01 0 0 0 4.277-4.64 5 5 0 1 1-7.03-7.03z"/></svg>'
        },
        366619: e => {
            e.exports = '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 120 120" width="120" height="120"><path fill="#B2B5BE" fill-rule="evenodd" d="M23 39a36 36 0 0 1 72 0v13.15l15.1 8.44 2.16 1.2-1.64 1.86-12.85 14.59 3.73 4.03L98.57 85 95 81.13V117H77v-12H67v9H50V95H40v22H23V81.28l-3.8 3.61-2.76-2.9 4.05-3.84-12.77-14.5-1.64-1.86 2.16-1.2L23 52.34V39Zm72 36.33 10.98-12.46L95 56.73v18.6ZM23 56.92v18.03L12.35 62.87 23 56.92ZM59 7a32 32 0 0 0-32 32v74h9V91h18v19h9v-9h18v12h10V39A32 32 0 0 0 59 7Zm-7 36a3 3 0 1 1-6 0 3 3 0 0 1 6 0Zm19 3a3 3 0 1 0 0-6 3 3 0 0 0 0 6Z"/></svg>'
        },
        267562: e => {
            e.exports = '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 120 120" width="120" height="120"><path fill="#131722" fill-rule="evenodd" d="M23 39a36 36 0 0 1 72 0v13.15l15.1 8.44 2.16 1.2-1.64 1.86-12.85 14.59 3.73 4.03L98.57 85 95 81.13V117H77v-12H67v9H50V95H40v22H23V81.28l-3.8 3.61-2.76-2.9 4.05-3.84-12.77-14.5-1.64-1.86 2.16-1.2L23 52.34V39Zm72 36.33 10.98-12.46L95 56.73v18.6ZM23 56.92v18.03L12.35 62.87 23 56.92ZM59 7a32 32 0 0 0-32 32v74h9V91h18v19h9v-9h18v12h10V39A32 32 0 0 0 59 7Zm-7 36a3 3 0 1 1-6 0 3 3 0 0 1 6 0Zm19 3a3 3 0 1 0 0-6 3 3 0 0 0 0 6Z"/></svg>'
        },
        62555: e => {
            e.exports = '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" width="16" height="16"><g fill="none" stroke="currentColor" stroke-width="2" transform="translate(1 1)"><circle cx="6" cy="6" r="6"/><path d="M10 10l4 4"/></g></svg>'
        },
        966631: e => {
            e.exports = '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 18 18" width="18" height="18"><path d="M3.06 6.295C2.37 7.397 2 8.67 2 10c0 3.866 3.134 7 7 7s7-3.134 7-7-3.134-7-7-7V2c4.418 0 8 3.582 8 8s-3.582 8-8 8-8-3.582-8-8c0-1.556.444-3.007 1.212-4.236l.848.53zm0 0C2.37 7.397 2 8.67 2 10c0 3.866 3.134 7 7 7s7-3.134 7-7-3.134-7-7-7V2c4.418 0 8 3.582 8 8s-3.582 8-8 8-8-3.582-8-8c0-1.556.444-3.007 1.212-4.236l.848.53zM6 2.5L9 0v5L6 2.5z"/></svg>'
        },
        944499: e => {
            e.exports = '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 14 12" width="14" height="12" fill="none"><path fill="currentColor" fill-rule="evenodd" clip-rule="evenodd" d="M2.71 1.29H1.3v9.42H2.7V1.3zM1.3 0C.58 0 0 .58 0 1.29v9.42C0 11.42.58 12 1.29 12H2.7C3.42 12 4 11.42 4 10.71V1.3C4 .58 3.42 0 2.71 0H1.3zM7.7 1.29H6.3v9.42H7.7V1.3zM6.3 0C5.58 0 5 .58 5 1.29v9.42c0 .71.58 1.29 1.29 1.29H7.7C8.42 12 9 11.42 9 10.71V1.3C9 .58 8.42 0 7.71 0H6.3zm5 1.29h1.42v9.42H11.3V1.3zm-1.29 0C10 .58 10.58 0 11.29 0h1.42C13.42 0 14 .58 14 1.29v9.42c0 .71-.58 1.29-1.29 1.29H11.3c-.71 0-1.29-.58-1.29-1.29V1.3z"/></svg>'
        },
        764162: e => {
            e.exports = '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 14" width="16" height="14"><g fill="none" stroke="currentColor" stroke-width="1.5"><path d="M15 9v4H1V9M8 9V0"/><path d="M5 6l3 3 3-3"/></g></svg>'
        },
        326529: e => {
            e.exports = '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 18 18" width="18" height="18"><path fill="#ADAEB0" fill-rule="evenodd" d="M12.5 11h-.79l-.28-.27A6.47 6.47 0 0 0 13 6.5 6.5 6.5 0 1 0 6.5 13c1.61 0 3.09-.59 4.23-1.57l.27.28v.79l5 4.99L17.49 16l-4.99-5zm-6 0C4.01 11 2 8.99 2 6.5S4.01 2 6.5 2 11 4.01 11 6.5 8.99 11 6.5 11z"/></svg>'
        },
        711732: e => {
            e.exports = '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 10 10" width="10" height="10"><g fill="none" stroke="#758696" stroke-width="2"><path d="M1.125 9.11L9.13 1.104M1.125 1.105L9.13 9.11"/></g></svg>'
        },
        891250: e => {
            e.exports = '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 8 3" width="8" height="3"><path d="M0 0 L4 3 L8 0 Z"/></svg>'
        },
        182951: e => {
            e.exports = '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 8 3" width="8" height="3"><path d="M0 3 L4 0 L8 3 Z"/></svg>'
        },
        578507: e => {
            e.exports = '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" width="20" height="20"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="8.5" cy="8.5" r="3"/><path stroke-linecap="square" d="M13.5 8.5h3M.5 8.5h3M8.5 3.5v-3M13 4l2-2M2 15l2-2"/><path stroke-linecap="square" stroke-linejoin="bevel" d="M2 2l2 2"/><path stroke-linecap="square" d="M13 13l2 2M8.5 16.5v-3"/></g></svg>'
        },
        407499: e => {
            e.exports = '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 6 26" width="3" height="13" fill="currentColor"><circle cx="3" cy="3" r="3"/><circle cx="3" cy="13" r="3"/><circle cx="3" cy="23" r="3"/></svg>'
        },
        701131: (e, t, o) => {
            "use strict";
            e.exports = o.p + "mock-dark.16b5f3a431f502b03ae3.svg"
        },
        899411: (e, t, o) => {
            "use strict";
            e.exports = o.p + "mock-light.d201313017eb2c1b989f.svg"
        },
        882289: e => {
            "use strict";
            e.exports = JSON.parse('{"ar_AE":{"language":"ar","language_name":"العربية","flag":"sa","geoip_code":"sa","countries_with_this_language":["ae","bh","dj","dz","eg","er","iq","jo","km","kw","lb","ly","ma","mr","om","qa","sa","sd","so","sy","td","tn","ye"],"priority":500,"dir":"rtl","iso":"ar","iso_639_3":"arb","show_on_widgets":true,"global_name":"Arabic"},"br":{"language":"pt","language_name":"Português","flag":"br","geoip_code":"br","priority":650,"iso":"pt","iso_639_3":"por","show_on_widgets":true,"global_name":"Portuguese"},"ca_ES":{"language":"ca_ES","language_name":"Català","flag":"es","geoip_code":"es","priority":745,"iso":"ca","iso_639_3":"cat","disabled":true,"show_on_widgets":true,"global_name":"Catalan"},"cs":{"language":"cs","language_name":"Czech","flag":"cz","geoip_code":"cz","priority":718,"iso":"cs","iso_639_3":"ces","show_on_widgets":true,"global_name":"Czech","is_in_european_union":true,"isBattle":true},"de_DE":{"language":"de","language_name":"Deutsch","flag":"de","geoip_code":"de","countries_with_this_language":["at","ch"],"priority":756,"iso":"de","iso_639_3":"deu","show_on_widgets":true,"global_name":"German","is_in_european_union":true},"en":{"language":"en","language_name":"English","flag":"us","geoip_code":"us","priority":1000,"iso":"en","iso_639_3":"eng","show_on_widgets":true,"global_name":"English","is_only_recommended_tw_autorepost":true},"es":{"language":"es","language_name":"Español","flag":"es","geoip_code":"es","countries_with_this_language":["mx","ar","ve","cl","co","pe","uy","py","cr","gt","c","bo","pa","pr"],"priority":744,"iso":"es","iso_639_3":"spa","show_on_widgets":true,"global_name":"Spanish","is_in_european_union":true},"fa_IR":{"language":"fa","language_name":"فارسى","flag":"ir","geoip_code":"ir","priority":480,"dir":"rtl","iso":"fa","iso_639_3":"fas","show_on_widgets":false,"global_name":"Iranian","disabled":true},"fr":{"language":"fr","language_name":"Français","flag":"fr","geoip_code":"fr","priority":750,"iso":"fr","iso_639_3":"fra","show_on_widgets":true,"global_name":"French","is_in_european_union":true},"he_IL":{"language":"he_IL","language_name":"עברית","flag":"il","geoip_code":"il","priority":490,"dir":"rtl","iso":"he","iso_639_3":"heb","show_on_widgets":true,"global_name":"Israeli"},"hu_HU":{"language":"hu_HU","language_name":"Magyar","flag":"hu","geoip_code":"hu","priority":724,"iso":"hu","iso_639_3":"hun","show_on_widgets":true,"global_name":"Hungarian","is_in_european_union":true,"disabled":true},"id":{"language":"id_ID","language_name":"Bahasa Indonesia","flag":"id","geoip_code":"id","priority":648,"iso":"id","iso_639_3":"ind","show_on_widgets":true,"global_name":"Indonesian"},"in":{"language":"en","language_name":"English ‎(India)‎","flag":"in","geoip_code":"in","priority":800,"iso":"en","iso_639_3":"eng","show_on_widgets":true,"global_name":"Indian"},"it":{"language":"it","language_name":"Italiano","flag":"it","geoip_code":"it","priority":737,"iso":"it","iso_639_3":"ita","show_on_widgets":true,"global_name":"Italian","is_in_european_union":true},"ja":{"language":"ja","language_name":"日本語","flag":"jp","geoip_code":"jp","priority":600,"iso":"ja","iso_639_3":"jpn","show_on_widgets":true,"global_name":"Japanese"},"kr":{"language":"ko","language_name":"한국어","flag":"kr","geoip_code":"kr","priority":550,"iso":"ko","iso_639_3":"kor","show_on_widgets":true,"global_name":"Korean"},"ms_MY":{"language":"ms_MY","language_name":"Bahasa Melayu","flag":"my","geoip_code":"my","priority":647,"iso":"ms","iso_639_3":"zlm","show_on_widgets":true,"global_name":"Malaysian"},"pl":{"language":"pl","language_name":"Polski","flag":"pl","geoip_code":"pl","priority":725,"iso":"pl","iso_639_3":"pol","show_on_widgets":true,"global_name":"Polish","is_in_european_union":true},"ru":{"language":"ru","language_name":"Русский","flag":"ru","geoip_code":"ru","countries_with_this_language":["am","by","kg","kz","md","tj","tm","uz"],"priority":700,"iso":"ru","iso_639_3":"rus","show_on_widgets":true,"global_name":"Russian","is_only_recommended_tw_autorepost":true},"sv_SE":{"language":"sv","language_name":"Svenska","flag":"se","geoip_code":"se","priority":723,"iso":"sv","iso_639_3":"swe","show_on_widgets":true,"global_name":"Swedish","is_in_european_union":true},"th_TH":{"language":"th","language_name":"ภาษาไทย","flag":"th","geoip_code":"th","priority":646,"iso":"th","iso_639_3":"tha","show_on_widgets":true,"global_name":"Thai"},"tr":{"language":"tr","language_name":"Türkçe","flag":"tr","geoip_code":"tr","priority":713,"iso":"tr","iso_639_3":"tur","show_on_widgets":true,"global_name":"Turkish","is_only_recommended_tw_autorepost":true},"vi_VN":{"language":"vi","language_name":"Tiếng Việt","flag":"vn","geoip_code":"vn","priority":645,"iso":"vi","iso_639_3":"vie","show_on_widgets":true,"global_name":"Vietnamese"},"zh_CN":{"language":"zh","language_name":"简体中文","flag":"cn","geoip_code":"cn","countries_with_this_language":["zh"],"priority":537,"iso":"zh-Hans","iso_639_3":"cmn","show_on_widgets":true,"global_name":"Chinese"},"zh_TW":{"language":"zh_TW","language_name":"繁體中文","flag":"tw","geoip_code":"tw","countries_with_this_language":["hk"],"priority":536,"iso":"zh-Hant","iso_639_3":"cmn","show_on_widgets":true,"global_name":"Taiwanese"},"el":{"language":"el","language_name":"Greek","flag":"gr","geoip_code":"gr","priority":625,"iso":"el","iso_639_3":"ell","global_name":"Greek","is_in_european_union":true,"isBattle":true},"nl_NL":{"language":"nl_NL","language_name":"Dutch","flag":"nl","geoip_code":"nl","priority":731,"iso":"nl","iso_639_3":"nld","global_name":"Dutch","is_in_european_union":true,"isBattle":true},"ro":{"language":"ro","language_name":"Romanian","flag":"ro","geoip_code":"ro","priority":707,"iso":"ro","iso_639_3":"ron","global_name":"Romanian","is_in_european_union":true,"isBattle":true}}')
        },
        791798: e => {
            "use strict";
            e.exports = JSON.parse('{"NASDAQ":"exchange-nasdaq","NYSE":"exchange-nyse","NYSE ARCA":"exchange-amex","AMEX":"exchange-amex","OTC":"exchange-otc","DFM":"exchange-dfm","BCBA":"exchange-bcba","ASX":"exchange-asx","EURONEXT":"exchange-euronext_stocks","EURONEXTBRU":"exchange-euronext_stocks","EURONEXTPAR":"exchange-euronext_stocks","EURONEXTLIS":"exchange-euronext_stocks","EURONEXTAMS":"exchange-euronext_stocks","BAHRAIN":"exchange-bahrain","BMFBOVESPA":"exchange-bovespa_stocks","TSX":"exchange-tsx","TSXV":"exchange-tsxv","CSE":"exchange-cse","SIX":"exchange-six","BCS":"exchange-bcs","SSE":"exchange-sse","SZSE":"exchange-szse","BVC":"exchange-bvc","FWB":"exchange-fwb","SWB":"exchange-swb","XETR":"exchange-xetr","OMXCOP":"exchange-omxcop","OMXTSE":"exchange-omxtse","EGX":"exchange-egx","BME":"exchange-bme","OMXHEX":"exchange-omxhex","HKEX":"exchange-hkex","IDX":"exchange-idx","TASE":"exchange-tase","BSE":"exchange-bse","NSE":"exchange-nse","OMXICE":"exchange-omxice","MIL":"exchange-mil","MILSEDEX":"exchange-mil","FSE":"exchange-fse","NAG":"exchange-nag","SAPSE":"exchange-sapse","TSE":"exchange-omxtse","KRX":"exchange-krx_stocks","OMXVSE":"exchange-omxvse","OMXRSE":"exchange-omxrse","BMV":"exchange-bmv","MYX":"exchange-myx","NSENG":"exchange-nseng","NZX":"exchange-nzx","BVL":"exchange-bvl","GPW":"exchange-gpw","QSE":"exchange-qse","BELEX":"exchange-belex","MOEX":"exchange-moex_stocks","TADAWUL":"exchange-tadawul","OMXSTO":"exchange-omxsto","SGX":"exchange-sgx_stocks","SET":"exchange-set","BIST":"exchange-bist","TWSE":"exchange-twse","LSE":"exchange-lse","LSIN":"exchange-lsin","HOSE":"exchange-hose_stocks","JSE":"exchange-jse_stocks","OSE":"exchange-osl"}')
        },
        586240: e => {
            "use strict";
            e.exports = JSON.parse('{"size-header-height":"64px","size-sticky-symbol-header-height":"64px","size-dialog-fixed-header-height":"72px","media-phone":"(max-width: 767px)","media-phone-vertical":"(max-width: 479px)","media-mf-phone-vertical":"(min-width: 320px)","media-mf-phone-landscape":"(min-width: 568px)","media-mf-tablet-vertical":"(min-width: 768px)","media-mf-tablet-landscape":"(min-width: 1024px)","media-mf-laptop":"(min-width: 1280px)","media-mf-desktop-medium":"(min-width: 1440px)","media-mf-desktop-large":"(min-width: 1920px)"}')
        }
    },
    e => {
        e.O(0, [44631, 79779, 93703, 2520, 46489, 58985, 75826, 77476, 22164, 88488, 40142, 42810, 10417, 92115, 41563, 32175, 7001, 39963, 71329, 51488, 61135, 59355, 29266, 44985, 19234, 59683, 30070, 73484, 61161, 82321, 25977, 79774, 47793, 63847, 16120, 97525, 28721, 55825, 31154, 57569, 53698, 18404, 2910, 10637, 97575], (() => {
            return t = 991454, e(e.s = t);
            var t
        }));
        e.O()
    }
]);