var vf = Object.defineProperty, xf = Object.defineProperties; var yf = Object.getOwnPropertyDescriptors; var Ts = Object.getOwnPropertySymbols; var Ni = Object.prototype.hasOwnProperty, Mi = Object.prototype.propertyIsEnumerable; var Xa = Math.pow, Ii = (t, e, n) => e in t ? vf(t, e, { enumerable: !0, configurable: !0, writable: !0, value: n }) : t[e] = n, S = (t, e) => { for (var n in e || (e = {})) Ni.call(e, n) && Ii(t, n, e[n]); if (Ts) for (var n of Ts(e)) Mi.call(e, n) && Ii(t, n, e[n]); return t }, P = (t, e) => xf(t, yf(e)); var st = (t, e) => { var n = {}; for (var s in t) Ni.call(t, s) && e.indexOf(s) < 0 && (n[s] = t[s]); if (t != null && Ts) for (var s of Ts(t)) e.indexOf(s) < 0 && Mi.call(t, s) && (n[s] = t[s]); return n }; var N = (t, e, n) => new Promise((s, a) => { var o = c => { try { i(n.next(c)) } catch (l) { a(l) } }, r = c => { try { i(n.throw(c)) } catch (l) { a(l) } }, i = c => c.done ? s(c.value) : Promise.resolve(c.value).then(o, r); i((n = n.apply(t, e)).next()) }); import { dO as wf, p as U, H as J, b0 as de, aA as we, bO as ge, h as z, ck as In, c1 as kf, eT as cr, i_ as Un, e8 as ya, cQ as Nt, eP as _f, bt as wa, eM as Cf, bq as lr, y as p, t as se, E as ae, i$ as Ef, j0 as Af, g5 as Sf, fj as Tf, cP as it, bn as Ue, dY as ur, j1 as Fl, j as rt, gs as jl, gt as pr, h5 as Df, fZ as ka, j2 as lt, j3 as $l, j4 as Ul, i as yt, c as qe, U as Ut, ah as Kn, Y as q, g_ as Oi, hh as Li, R as If, bC as Vl, dh as Hl, df as Nf, j5 as Gl, j6 as Mf, j7 as Of, bh as dr, fc as ce, O as _n, G as Cn, j8 as Wl, $ as Jl, iZ as Yl, j9 as Kl, fC as Lf, ja as Rf, ge as mr, a8 as Xl, jb as Zl, jc as Pf, e$ as Bf, fA as fr, ga as zf, f_ as Ri, jd as Ds, hZ as hr, je as Ql, hX as Is, fi as qf, jf as Ff, h_ as Bo, h$ as zo, dS as Ks, M as eu, F as En, jg as os, cs as tu, fP as jf, jh as Ns, J as Ft, A as be, g3 as Za, bM as Xs, m as nu, cc as _a, ji as $f, jj as Uf, jk as Vf, bz as Xn, c3 as Hf, V as Gf, e as su, dA as au, jl as Wf, eA as Jf, d as Yf, jm as Pi, jn as Kf, jo as Xf, di as Zf, gQ as Zs, eZ as Qf, jp as Qs, aY as eh, l as Bi, bJ as th, u as ou, hz as ru, it as nh, bW as Qa, _ as sh, jq as ah, cS as oh, bR as zi, jr as rh, js as ih, jt as ch, g0 as lh, v as qi } from "./tracking-5779d19a.js"; import { N as Qt, m as en, t as uh, c as Ee, d as Je, n as iu, M as cu, e as gr, f as qo, h as wt, b as Ca, F as Kt, i as lu, j as uu, k as Ea, l as Pe, R as kt, o as _t, p as Fo, q as ph, r as pu, s as du, v as jo, w as dh, x as mh, y as fh, z as St, C as hh, G as gh, H as eo, I as bh, J as vh, K as xh, L as yh, O as gt, Q as wh, U as ea, V as kh, W as _h, X as Ch, D as mu, P as fu, T as hu, Y as Eh, Z as Ah, _ as gu, $ as Sh, A as Th, a0 as Dh, a1 as Ih, a2 as Nh, a3 as Mh, a4 as Fi, a5 as Ms, a6 as ji, a7 as Oh, a8 as Lh, E as Rh, a9 as Ph } from "./autocomplete_results-829164f2.js"; import { u as ue, l as bu, F as Y, f as ta, j as br, T as X, a as ne, S as vr, B as Aa, c as fe, h as ft, O as Ae, i as vu, b as xe, k as Bh, w as zh, n as qh, M as mn } from "./FlexBox-8b7f0d6c.js"; import { n as Fh, i as $i } from "./share_dialog-f2ebc006.js"; import { M as $t } from "./mousetrap-6acb8cb1.js"; import { u as jh, r as Ui, H as xu, h as $h } from "./index-5fa16c7e.js"; import { r as he, j as Uh, M as ds } from "./sortBy-53166f8e.js"; import { D as yu, z as wu, B as Vh, G as Hh, I as Gh, J as ku, K as Wh, L as bt, A as An, N as xr, c as Jh, O as Yh, Q as Me, V as Kh, W as Xh, X as Zh, Y as _u, i as Qh, Z as eg } from "./post-72fb30bd.js"; import { B as Vs } from "./button-8ee58a9a.js"; import "./_sentry-release-injection-file-9254565a.js"; import { t as Cu, a as Sa, b as ms, M as fs, s as tg } from "./Modal-83447875.js"; import { P as Eu } from "./modal-3f58ef3d.js"; import { L as ng, T as sg } from "./TrashIcon-618c7548.js"; import { T as Vi } from "./textarea-718e4ef4.js"; import { _ as Z, d as ag, u as $o, R as og } from "./responsive_img-3c51e57a.js"; import { e as Uo } from "./encodeHtmlEntities-35ab9c34.js"; import { a as Fe, T as rg } from "./util-typed-d6d3f2ff.js"; import { c as pe, X as yr } from "./x-933ea65f.js"; import { c as ig } from "./_arrayIncludesWith-27de2814.js"; import { _ as cg } from "./toNumber-f902633e.js"; import { as as Vo, at as Hi, au as mt, av as lg, aw as ug, T as Au, q as Gi, I as Ho, ax as Vt, ay as Jn, aq as fn, e as Su, u as pg, c as dg, az as mg, aA as fg, aB as Wi, aC as Ji, aD as hg } from "./Attachments-26bf7580.js"; import { b as Tu, H as gg, u as Du, d as bg, c as vg } from "./AlertDialog-f1c63885.js"; import { d as wr } from "./debounce-c95d884c.js"; import { p as na } from "./pick-971b5e11.js"; import { V as Ta, U as Iu, M as xg, P as yg, b as wg, l as kg, c as _g, d as Cg, e as Eg, f as Ag, g as Sg, h as Tg } from "./video_editor-b834fb32.js"; import { A as Dg } from "./AuditionPlayer-59a31fcb.js"; import { F as Nu } from "./FilePicker-c9d24a53.js"; import { M as vn, a as Mt, b as to, S as Ig } from "./Menu-8ddb0f91.js"; import { S as Sn } from "./Progress-d3ff4e14.js"; import { S as Ng, U as Mg, c as hn } from "./VideoVerticalMenu-e627c680.js"; import { D as Mu } from "./download-dea01c9e.js"; import { M as Og } from "./menu-46e3f3ec.js"; import { c as Lg } from "./tiktok-27b6efdb.js"; import { a as kr, B as Ou, b as _r, C as Lu, c as Ru, I as Pu, L as Bu, O as Cr, S as zu } from "./index-2d69285b.js"; import { H as qu } from "./index-e42bf16e.js"; import { m as Rg, t as Er, bd as Pg, aJ as Bg, bA as zg, a as qg, d as Fg } from "./homepage_hooks-258e84da.js"; import { M as jg, m as $g } from "./mention-a2befbf1.js"; import { H as Ug, u as Vg, a as Yi, C as sa } from "./HoverCard-92fb7948.js"; import { D as Hg, a as Gg } from "./Divider-a2a4ef65.js"; import { I as Wg } from "./ChooseGeneratedImageModal-21455ba2.js"; import { T as Pt } from "./Tooltip-2b2b71ff.js"; import { P as Jg } from "./PubAccentTheme-7a3e2ba8.js"; import { q as Ki } from "./transition-d7aff1cb.js"; import { a as Yg } from "./user-76406467.js"; import "./Divider.module-10da8075.js"; import { k as Xi } from "./keyBy-15cc8c09.js"; import { o as Kg } from "./omit-7d67b4d6.js"; import { T as rs } from "./TextInput-f605802a.js"; import { S as Xg } from "./Select-169c9194.js"; import { B as Zg, I as Qg, S as eb, L as tb, T as nb } from "./index-6384ea2c.js"; import { L as Fu } from "./link-e8367f9e.js"; import { L as sb } from "./list-5d68e69a.js"; import { C as Ar } from "./chevron-down-0a2aacdb.js"; import { S as ab } from "./Portal-64a61d16.js"; import { C as ob } from "./candlestick-chart-3c1cfe3a.js"; import { a as ju, M as $u } from "./MathJax-f8068bcc.js"; import { S as rb } from "./square-pen-04312085.js"; import { P as Zi } from "./Popover-e1be8edd.js"; import { ImageViewerModal as ib } from "./ImageViewerModal-93648707.js"; import { I as cb } from "./info-4fcf7ea1.js"; import { R as Uu } from "./Recipe-d18f4761.js"; (function() { try { var t = typeof window != "undefined" ? window : typeof global != "undefined" ? global : typeof self != "undefined" ? self : {}, e = new Error().stack; e && (t._sentryDebugIds = t._sentryDebugIds || {}, t._sentryDebugIds[e] = "713640c8-09c6-4372-9ff7-1f3e5ac332af", t._sentryDebugIdIdentifier = "sentry-dbid-713640c8-09c6-4372-9ff7-1f3e5ac332af") } catch (n) {} })(); /** * @license lucide-preact v0.323.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. */ const lb = pe("AlignCenter", [ ["line", { x1: "21", x2: "3", y1: "6", y2: "6", key: "1fp77t" }], ["line", { x1: "17", x2: "7", y1: "12", y2: "12", key: "rsh8ii" }], ["line", { x1: "19", x2: "5", y1: "18", y2: "18", key: "1t0tuv" }] ]); /** * @license lucide-preact v0.323.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. */ const ub = pe("AlignRight", [ ["line", { x1: "21", x2: "3", y1: "6", y2: "6", key: "1fp77t" }], ["line", { x1: "21", x2: "9", y1: "12", y2: "12", key: "1uyos4" }], ["line", { x1: "21", x2: "7", y1: "18", y2: "18", key: "1g9eri" }] ]); /** * @license lucide-preact v0.323.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. */ const pb = pe("Asterisk", [ ["path", { d: "M12 6v12", key: "1vza4d" }], ["path", { d: "M17.196 9 6.804 15", key: "1ah31z" }], ["path", { d: "m6.804 9 10.392 6", key: "1b6pxd" }] ]); /** * @license lucide-preact v0.323.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. */ const db = pe("CodeSquare", [ ["rect", { width: "18", height: "18", x: "3", y: "3", rx: "2", key: "afitv7" }], ["path", { d: "m10 10-2 2 2 2", key: "p6et6i" }], ["path", { d: "m14 14 2-2-2-2", key: "m075q2" }] ]); /** * @license lucide-preact v0.323.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. */ const mb = pe("Croissant", [ ["path", { d: "m4.6 13.11 5.79-3.21c1.89-1.05 4.79 1.78 3.71 3.71l-3.22 5.81C8.8 23.16.79 15.23 4.6 13.11Z", key: "1ozxlb" }], ["path", { d: "m10.5 9.5-1-2.29C9.2 6.48 8.8 6 8 6H4.5C2.79 6 2 6.5 2 8.5a7.71 7.71 0 0 0 2 4.83", key: "ffuyb5" }], ["path", { d: "M8 6c0-1.55.24-4-2-4-2 0-2.5 2.17-2.5 4", key: "osnpzi" }], ["path", { d: "m14.5 13.5 2.29 1c.73.3 1.21.7 1.21 1.5v3.5c0 1.71-.5 2.5-2.5 2.5a7.71 7.71 0 0 1-4.83-2", key: "1vubaw" }], ["path", { d: "M18 16c1.55 0 4-.24 4 2 0 2-2.17 2.5-4 2.5", key: "wxr772" }] ]); /** * @license lucide-preact v0.323.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. */ const fb = pe("DollarSign", [ ["line", { x1: "12", x2: "12", y1: "2", y2: "22", key: "7eqyqh" }], ["path", { d: "M17 5H9.5a3.5 3.5 0 0 0 0 7h5a3.5 3.5 0 0 1 0 7H6", key: "1b0p4s" }] ]); /** * @license lucide-preact v0.323.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. */ const hb = pe("Expand", [ ["path", { d: "m21 21-6-6m6 6v-4.8m0 4.8h-4.8", key: "1c15vz" }], ["path", { d: "M3 16.2V21m0 0h4.8M3 21l6-6", key: "1fsnz2" }], ["path", { d: "M21 7.8V3m0 0h-4.8M21 3l-6 6", key: "hawz9i" }], ["path", { d: "M3 7.8V3m0 0h4.8M3 3l6 6", key: "u9ee12" }] ]); /** * @license lucide-preact v0.323.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. */ const gb = pe("Feather", [ ["path", { d: "M20.24 12.24a6 6 0 0 0-8.49-8.49L5 10.5V19h8.5z", key: "u4sw5n" }], ["line", { x1: "16", x2: "2", y1: "8", y2: "22", key: "1c47m2" }], ["line", { x1: "17.5", x2: "9", y1: "15", y2: "15", key: "2fj3pr" }] ]); /** * @license lucide-preact v0.323.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. */ const bb = pe("Heading1", [ ["path", { d: "M4 12h8", key: "17cfdx" }], ["path", { d: "M4 18V6", key: "1rz3zl" }], ["path", { d: "M12 18V6", key: "zqpxq5" }], ["path", { d: "m17 12 3-2v8", key: "1hhhft" }] ]); /** * @license lucide-preact v0.323.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. */ const vb = pe("Heading2", [ ["path", { d: "M4 12h8", key: "17cfdx" }], ["path", { d: "M4 18V6", key: "1rz3zl" }], ["path", { d: "M12 18V6", key: "zqpxq5" }], ["path", { d: "M21 18h-4c0-4 4-3 4-6 0-1.5-2-2.5-4-1", key: "9jr5yi" }] ]); /** * @license lucide-preact v0.323.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. */ const xb = pe("Heading3", [ ["path", { d: "M4 12h8", key: "17cfdx" }], ["path", { d: "M4 18V6", key: "1rz3zl" }], ["path", { d: "M12 18V6", key: "zqpxq5" }], ["path", { d: "M17.5 10.5c1.7-1 3.5 0 3.5 1.5a2 2 0 0 1-2 2", key: "68ncm8" }], ["path", { d: "M17 17.5c2 1.5 4 .3 4-1.5a2 2 0 0 0-2-2", key: "1ejuhz" }] ]); /** * @license lucide-preact v0.323.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. */ const yb = pe("Heading4", [ ["path", { d: "M4 12h8", key: "17cfdx" }], ["path", { d: "M4 18V6", key: "1rz3zl" }], ["path", { d: "M12 18V6", key: "zqpxq5" }], ["path", { d: "M17 10v4h4", key: "13sv97" }], ["path", { d: "M21 10v8", key: "1kdml4" }] ]); /** * @license lucide-preact v0.323.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. */ const wb = pe("Heading5", [ ["path", { d: "M4 12h8", key: "17cfdx" }], ["path", { d: "M4 18V6", key: "1rz3zl" }], ["path", { d: "M12 18V6", key: "zqpxq5" }], ["path", { d: "M17 13v-3h4", key: "1nvgqp" }], ["path", { d: "M17 17.7c.4.2.8.3 1.3.3 1.5 0 2.7-1.1 2.7-2.5S19.8 13 18.3 13H17", key: "2nebdn" }] ]); /** * @license lucide-preact v0.323.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. */ const kb = pe("Heading6", [ ["path", { d: "M4 12h8", key: "17cfdx" }], ["path", { d: "M4 18V6", key: "1rz3zl" }], ["path", { d: "M12 18V6", key: "zqpxq5" }], ["circle", { cx: "19", cy: "16", r: "2", key: "15mx69" }], ["path", { d: "M20 10c-2 2-3 3.5-3 6", key: "f35dl0" }] ]); /** * @license lucide-preact v0.323.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. */ const _b = pe("Heading", [ ["path", { d: "M6 12h12", key: "8npq4p" }], ["path", { d: "M6 20V4", key: "1w1bmo" }], ["path", { d: "M18 20V4", key: "o2hl4u" }] ]); /** * @license lucide-preact v0.323.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. */ const Cb = pe("HelpCircle", [ ["circle", { cx: "12", cy: "12", r: "10", key: "1mglay" }], ["path", { d: "M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3", key: "1u773s" }], ["path", { d: "M12 17h.01", key: "p32p05" }] ]); /** * @license lucide-preact v0.323.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. */ const Eb = pe("ImageOff", [ ["line", { x1: "2", x2: "22", y1: "2", y2: "22", key: "a6p6uj" }], ["path", { d: "M10.41 10.41a2 2 0 1 1-2.83-2.83", key: "1bzlo9" }], ["line", { x1: "13.5", x2: "6", y1: "13.5", y2: "21", key: "1q0aeu" }], ["line", { x1: "18", x2: "21", y1: "12", y2: "15", key: "5mozeu" }], ["path", { d: "M3.59 3.59A1.99 1.99 0 0 0 3 5v14a2 2 0 0 0 2 2h14c.55 0 1.052-.22 1.41-.59", key: "mmje98" }], ["path", { d: "M21 15V5a2 2 0 0 0-2-2H9", key: "43el77" }] ]); /** * @license lucide-preact v0.323.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. */ const Qi = pe("Indent", [ ["polyline", { points: "3 8 7 12 3 16", key: "f3rxhf" }], ["line", { x1: "21", x2: "11", y1: "12", y2: "12", key: "1fxxak" }], ["line", { x1: "21", x2: "11", y1: "6", y2: "6", key: "asgu94" }], ["line", { x1: "21", x2: "11", y1: "18", y2: "18", key: "13dsj7" }] ]); /** * @license lucide-preact v0.323.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. */ const Ab = pe("Maximize2", [ ["polyline", { points: "15 3 21 3 21 9", key: "mznyad" }], ["polyline", { points: "9 21 3 21 3 15", key: "1avn1i" }], ["line", { x1: "21", x2: "14", y1: "3", y2: "10", key: "ota7mn" }], ["line", { x1: "3", x2: "10", y1: "21", y2: "14", key: "1atl0r" }] ]); /** * @license lucide-preact v0.323.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. */ const Sb = pe("MessageSquareQuote", [ ["path", { d: "M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z", key: "1lielz" }], ["path", { d: "M8 12a2 2 0 0 0 2-2V8H8", key: "1jfesj" }], ["path", { d: "M14 12a2 2 0 0 0 2-2V8h-2", key: "1dq9mh" }] ]); /** * @license lucide-preact v0.323.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. */ const Go = pe("Mic", [ ["path", { d: "M12 2a3 3 0 0 0-3 3v7a3 3 0 0 0 6 0V5a3 3 0 0 0-3-3Z", key: "131961" }], ["path", { d: "M19 10v2a7 7 0 0 1-14 0v-2", key: "1vc78b" }], ["line", { x1: "12", x2: "12", y1: "19", y2: "22", key: "x3vr5v" }] ]); /** * @license lucide-preact v0.323.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. */ const Tb = pe("MoveDiagonal2", [ ["polyline", { points: "5 11 5 5 11 5", key: "ncfzxk" }], ["polyline", { points: "19 13 19 19 13 19", key: "1mk7hk" }], ["line", { x1: "5", x2: "19", y1: "5", y2: "19", key: "mcyte3" }] ]); /** * @license lucide-preact v0.323.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. */ const Db = pe("Pilcrow", [ ["path", { d: "M13 4v16", key: "8vvj80" }], ["path", { d: "M17 4v16", key: "7dpous" }], ["path", { d: "M19 4H9.5a4.5 4.5 0 0 0 0 9H13", key: "sh4n9v" }] ]); /** * @license lucide-preact v0.323.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. */ const Ib = pe("PlaySquare", [ ["rect", { width: "18", height: "18", x: "3", y: "3", rx: "2", key: "afitv7" }], ["path", { d: "m9 8 6 4-6 4Z", key: "f1r3lt" }] ]); /** * @license lucide-preact v0.323.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. */ const Nb = pe("Redo", [ ["path", { d: "M21 7v6h-6", key: "3ptur4" }], ["path", { d: "M3 17a9 9 0 0 1 9-9 9 9 0 0 1 6 2.3l3 2.7", key: "1kgawr" }] ]); /** * @license lucide-preact v0.323.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. */ const Mb = pe("Sigma", [ ["path", { d: "M18 7V4H6l6 8-6 8h12v-3", key: "zis8ev" }] ]); /** * @license lucide-preact v0.323.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. */ const Ob = pe("Undo", [ ["path", { d: "M3 7v6h6", key: "1v2h90" }], ["path", { d: "M21 17a9 9 0 0 0-9-9 9 9 0 0 0-6 2.3L3 13", key: "1r6uu6" }] ]); /** * @license lucide-preact v0.323.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. */ const Lb = pe("Wand", [ ["path", { d: "M15 4V2", key: "z1p9b7" }], ["path", { d: "M15 16v-2", key: "px0unx" }], ["path", { d: "M8 9h2", key: "1g203m" }], ["path", { d: "M20 9h2", key: "19tzq7" }], ["path", { d: "M17.8 11.8 19 13", key: "yihg8r" }], ["path", { d: "M15 9h0", key: "kg5t1u" }], ["path", { d: "M17.8 6.2 19 5", key: "fd4us0" }], ["path", { d: "m3 21 9-9", key: "1jfql5" }], ["path", { d: "M12.2 6.2 11 5", key: "i3da3b" }] ]); function Rb() { for (var t = arguments.length, e = new Array(t), n = 0; n < t; n++) e[n] = arguments[n]; return de(() => s => { e.forEach(a => a(s)) }, e) } const Da = typeof window != "undefined" && typeof window.document != "undefined" && typeof window.document.createElement != "undefined"; function Nn(t) { const e = Object.prototype.toString.call(t); return e === "[object Window]" || e === "[object global]" } function Sr(t) { return "nodeType" in t } function je(t) { var e, n; return t ? Nn(t) ? t : Sr(t) && (e = (n = t.ownerDocument) == null ? void 0 : n.defaultView) != null ? e : window : window } function Tr(t) { const { Document: e } = je(t); return t instanceof e } function hs(t) { return Nn(t) ? !1 : t instanceof je(t).HTMLElement } function Pb(t) { return t instanceof je(t).SVGElement } function Mn(t) { return t ? Nn(t) ? t.document : Sr(t) ? Tr(t) ? t : hs(t) ? t.ownerDocument : document : document : document } const Qe = Da ? wf : U; function Ia(t) { const e = J(t); return Qe(() => { e.current = t }), we(function() { for (var n = arguments.length, s = new Array(n), a = 0; a < n; a++) s[a] = arguments[a]; return e.current == null ? void 0 : e.current(...s) }, []) } function Bb() { const t = J(null), e = we((s, a) => { t.current = setInterval(s, a) }, []), n = we(() => { t.current !== null && (clearInterval(t.current), t.current = null) }, []); return [e, n] } function is(t, e) { e === void 0 && (e = [t]); const n = J(t); return Qe(() => { n.current !== t && (n.current = t) }, e), n } function gs(t, e) { const n = J(); return de(() => { const s = t(n.current); return n.current = s, s }, [...e]) } function aa(t) { const e = Ia(t), n = J(null), s = we(a => { a !== n.current && (e == null || e(a, n.current)), n.current = a }, []); return [n, s] } function oa(t) { const e = J(); return U(() => { e.current = t }, [t]), e.current } let no = {}; function bs(t, e) { return de(() => { if (e) return e; const n = no[t] == null ? 0 : no[t] + 1; return no[t] = n, t + "-" + n }, [t, e]) } function Vu(t) { return function(e) { for (var n = arguments.length, s = new Array(n > 1 ? n - 1 : 0), a = 1; a < n; a++) s[a - 1] = arguments[a]; return s.reduce((o, r) => { const i = Object.entries(r); for (const [c, l] of i) { const u = o[c]; u != null && (o[c] = u + t * l) } return o }, S({}, e)) } } const xn = Vu(1), cs = Vu(-1); function zb(t) { return "clientX" in t && "clientY" in t } function Na(t) { if (!t) return !1; const { KeyboardEvent: e } = je(t.target); return e && t instanceof e } function qb(t) { if (!t) return !1; const { TouchEvent: e } = je(t.target); return e && t instanceof e } function ra(t) { if (qb(t)) { if (t.touches && t.touches.length) { const { clientX: e, clientY: n } = t.touches[0]; return { x: e, y: n } } else if (t.changedTouches && t.changedTouches.length) { const { clientX: e, clientY: n } = t.changedTouches[0]; return { x: e, y: n } } } return zb(t) ? { x: t.clientX, y: t.clientY } : null } const Ht = Object.freeze({ Translate: { toString(t) { if (!t) return; const { x: e, y: n } = t; return "translate3d(" + (e ? Math.round(e) : 0) + "px, " + (n ? Math.round(n) : 0) + "px, 0)" } }, Scale: { toString(t) { if (!t) return; const { scaleX: e, scaleY: n } = t; return "scaleX(" + e + ") scaleY(" + n + ")" } }, Transform: { toString(t) { if (t) return [Ht.Translate.toString(t), Ht.Scale.toString(t)].join(" ") } }, Transition: { toString(t) { let { property: e, duration: n, easing: s } = t; return e + " " + n + "ms " + s } } }), ec = "a,frame,iframe,input:not([type=hidden]):not(:disabled),select:not(:disabled),textarea:not(:disabled),button:not(:disabled),*[tabindex]"; function Fb(t) { return t.matches(ec) ? t : t.querySelector(ec) } const jb = { display: "none" }; function $b(t) { let { id: e, value: n } = t; return ge.createElement("div", { id: e, style: jb }, n) } const Ub = { position: "fixed", width: 1, height: 1, margin: -1, border: 0, padding: 0, overflow: "hidden", clip: "rect(0 0 0 0)", clipPath: "inset(100%)", whiteSpace: "nowrap" }; function Vb(t) { let { id: e, announcement: n } = t; return ge.createElement("div", { id: e, style: Ub, role: "status", "aria-live": "assertive", "aria-atomic": !0 }, n) } function Hb() { const [t, e] = z(""); return { announce: we(s => { s != null && e(s) }, []), announcement: t } } const Hu = In(null); function Gb(t) { const e = Nt(Hu); U(() => { if (!e) throw new Error("useDndMonitor must be used within a children of "); return e(t) }, [t, e]) } function Wb() { const [t] = z(() => new Set), e = we(s => (t.add(s), () => t.delete(s)), [t]); return [we(s => { let { type: a, event: o } = s; t.forEach(r => { var i; return (i = r[a]) == null ? void 0 : i.call(r, o) }) }, [t]), e] } const Jb = { draggable: ` To pick up a draggable item, press the space bar. While dragging, use the arrow keys to move the item. Press space again to drop the item in its new position, or press escape to cancel. ` }, Yb = { onDragStart(t) { let { active: e } = t; return "Picked up draggable item " + e.id + "." }, onDragOver(t) { let { active: e, over: n } = t; return n ? "Draggable item " + e.id + " was moved over droppable area " + n.id + "." : "Draggable item " + e.id + " is no longer over a droppable area." }, onDragEnd(t) { let { active: e, over: n } = t; return n ? "Draggable item " + e.id + " was dropped over droppable area " + n.id : "Draggable item " + e.id + " was dropped." }, onDragCancel(t) { let { active: e } = t; return "Dragging was cancelled. Draggable item " + e.id + " was dropped." } }; function Kb(t) { let { announcements: e = Yb, container: n, hiddenTextDescribedById: s, screenReaderInstructions: a = Jb } = t; const { announce: o, announcement: r } = Hb(), i = bs("DndLiveRegion"), [c, l] = z(!1); if (U(() => { l(!0) }, []), Gb(de(() => ({ onDragStart(d) { let { active: m } = d; o(e.onDragStart({ active: m })) }, onDragMove(d) { let { active: m, over: f } = d; e.onDragMove && o(e.onDragMove({ active: m, over: f })) }, onDragOver(d) { let { active: m, over: f } = d; o(e.onDragOver({ active: m, over: f })) }, onDragEnd(d) { let { active: m, over: f } = d; o(e.onDragEnd({ active: m, over: f })) }, onDragCancel(d) { let { active: m, over: f } = d; o(e.onDragCancel({ active: m, over: f })) } }), [o, e])), !c) return null; const u = ge.createElement(ge.Fragment, null, ge.createElement($b, { id: s, value: a.draggable }), ge.createElement(Vb, { id: i, announcement: r })); return n ? ya(u, n) : u } var Ce; (function(t) { t.DragStart = "dragStart", t.DragMove = "dragMove", t.DragEnd = "dragEnd", t.DragCancel = "dragCancel", t.DragOver = "dragOver", t.RegisterDroppable = "registerDroppable", t.SetDroppableDisabled = "setDroppableDisabled", t.UnregisterDroppable = "unregisterDroppable" })(Ce || (Ce = {})); function ia() {} function tc(t, e) { return de(() => ({ sensor: t, options: e != null ? e : {} }), [t, e]) } function Xb() { for (var t = arguments.length, e = new Array(t), n = 0; n < t; n++) e[n] = arguments[n]; return de(() => [...e].filter(s => s != null), [...e]) } const ct = Object.freeze({ x: 0, y: 0 }); function Gu(t, e) { return Math.sqrt(Math.pow(t.x - e.x, 2) + Math.pow(t.y - e.y, 2)) } function Zb(t, e) { const n = ra(t); if (!n) return "0 0"; const s = { x: (n.x - e.left) / e.width * 100, y: (n.y - e.top) / e.height * 100 }; return s.x + "% " + s.y + "%" } function Wu(t, e) { let { data: { value: n } } = t, { data: { value: s } } = e; return n - s } function Qb(t, e) { let { data: { value: n } } = t, { data: { value: s } } = e; return s - n } function nc(t) { let { left: e, top: n, height: s, width: a } = t; return [{ x: e, y: n }, { x: e + a, y: n }, { x: e, y: n + s }, { x: e + a, y: n + s }] } function Ju(t, e) { if (!t || t.length === 0) return null; const [n] = t; return e ? n[e] : n } function sc(t, e, n) { return e === void 0 && (e = t.left), n === void 0 && (n = t.top), { x: e + t.width * .5, y: n + t.height * .5 } } const ev = t => { let { collisionRect: e, droppableRects: n, droppableContainers: s } = t; const a = sc(e, e.left, e.top), o = []; for (const r of s) { const { id: i } = r, c = n.get(i); if (c) { const l = Gu(sc(c), a); o.push({ id: i, data: { droppableContainer: r, value: l } }) } } return o.sort(Wu) }, tv = t => { let { collisionRect: e, droppableRects: n, droppableContainers: s } = t; const a = nc(e), o = []; for (const r of s) { const { id: i } = r, c = n.get(i); if (c) { const l = nc(c), u = a.reduce((m, f, h) => m + Gu(l[h], f), 0), d = Number((u / 4).toFixed(4)); o.push({ id: i, data: { droppableContainer: r, value: d } }) } } return o.sort(Wu) }; function nv(t, e) { const n = Math.max(e.top, t.top), s = Math.max(e.left, t.left), a = Math.min(e.left + e.width, t.left + t.width), o = Math.min(e.top + e.height, t.top + t.height), r = a - s, i = o - n; if (s < a && n < o) { const c = e.width * e.height, l = t.width * t.height, u = r * i, d = u / (c + l - u); return Number(d.toFixed(4)) } return 0 } const sv = t => { let { collisionRect: e, droppableRects: n, droppableContainers: s } = t; const a = []; for (const o of s) { const { id: r } = o, i = n.get(r); if (i) { const c = nv(i, e); c > 0 && a.push({ id: r, data: { droppableContainer: o, value: c } }) } } return a.sort(Qb) }; function av(t, e, n) { return P(S({}, t), { scaleX: e && n ? e.width / n.width : 1, scaleY: e && n ? e.height / n.height : 1 }) } function Yu(t, e) { return t && e ? { x: t.left - e.left, y: t.top - e.top } : ct } function ov(t) { return function(n) { for (var s = arguments.length, a = new Array(s > 1 ? s - 1 : 0), o = 1; o < s; o++) a[o - 1] = arguments[o]; return a.reduce((r, i) => P(S({}, r), { top: r.top + t * i.y, bottom: r.bottom + t * i.y, left: r.left + t * i.x, right: r.right + t * i.x }), S({}, n)) } } const rv = ov(1); function Ku(t) { if (t.startsWith("matrix3d(")) { const e = t.slice(9, -1).split(/, /); return { x: +e[12], y: +e[13], scaleX: +e[0], scaleY: +e[5] } } else if (t.startsWith("matrix(")) { const e = t.slice(7, -1).split(/, /); return { x: +e[4], y: +e[5], scaleX: +e[0], scaleY: +e[3] } } return null } function iv(t, e, n) { const s = Ku(e); if (!s) return t; const { scaleX: a, scaleY: o, x: r, y: i } = s, c = t.left - r - (1 - a) * parseFloat(n), l = t.top - i - (1 - o) * parseFloat(n.slice(n.indexOf(" ") + 1)), u = a ? t.width / a : t.width, d = o ? t.height / o : t.height; return { width: u, height: d, top: l, right: c + u, bottom: l + d, left: c } } const cv = { ignoreTransform: !1 }; function On(t, e) { e === void 0 && (e = cv); let n = t.getBoundingClientRect(); if (e.ignoreTransform) { const { getComputedStyle: l } = je(t), { transform: u, transformOrigin: d } = l(t); u && (n = iv(n, u, d)) } const { top: s, left: a, width: o, height: r, bottom: i, right: c } = n; return { top: s, left: a, width: o, height: r, bottom: i, right: c } } function ac(t) { return On(t, { ignoreTransform: !0 }) } function lv(t) { const e = t.innerWidth, n = t.innerHeight; return { top: 0, left: 0, right: e, bottom: n, width: e, height: n } } function uv(t, e) { return e === void 0 && (e = je(t).getComputedStyle(t)), e.position === "fixed" } function pv(t, e) { e === void 0 && (e = je(t).getComputedStyle(t)); const n = /(auto|scroll|overlay)/; return ["overflow", "overflowX", "overflowY"].some(a => { const o = e[a]; return typeof o == "string" ? n.test(o) : !1 }) } function Ma(t, e) { const n = []; function s(a) { if (e != null && n.length >= e || !a) return n; if (Tr(a) && a.scrollingElement != null && !n.includes(a.scrollingElement)) return n.push(a.scrollingElement), n; if (!hs(a) || Pb(a) || n.includes(a)) return n; const { getComputedStyle: o } = je(a), r = o(a); return a !== t && pv(a, r) && n.push(a), uv(a, r) ? n : s(a.parentNode) } return t ? s(t) : n } function Xu(t) { const [e] = Ma(t, 1); return e != null ? e : null } function so(t) { return !Da || !t ? null : Nn(t) ? t : Sr(t) ? Tr(t) || t === Mn(t).scrollingElement ? window : hs(t) ? t : null : null } function Zu(t) { return Nn(t) ? t.scrollX : t.scrollLeft } function Qu(t) { return Nn(t) ? t.scrollY : t.scrollTop } function Wo(t) { return { x: Zu(t), y: Qu(t) } } var Ie; (function(t) { t[t.Forward = 1] = "Forward", t[t.Backward = -1] = "Backward" })(Ie || (Ie = {})); function ep(t) { return !Da || !t ? !1 : t === document.scrollingElement } function tp(t) { const e = { x: 0, y: 0 }, n = ep(t) ? { height: window.innerHeight, width: window.innerWidth } : { height: t.clientHeight, width: t.clientWidth }, s = { x: t.scrollWidth - n.width, y: t.scrollHeight - n.height }, a = t.scrollTop <= e.y, o = t.scrollLeft <= e.x, r = t.scrollTop >= s.y, i = t.scrollLeft >= s.x; return { isTop: a, isLeft: o, isBottom: r, isRight: i, maxScroll: s, minScroll: e } } const dv = { x: .2, y: .2 }; function mv(t, e, n, s, a) { let { top: o, left: r, right: i, bottom: c } = n; s === void 0 && (s = 10), a === void 0 && (a = dv); const { isTop: l, isBottom: u, isLeft: d, isRight: m } = tp(t), f = { x: 0, y: 0 }, h = { x: 0, y: 0 }, g = { height: e.height * a.y, width: e.width * a.x }; return !l && o <= e.top + g.height ? (f.y = Ie.Backward, h.y = s * Math.abs((e.top + g.height - o) / g.height)) : !u && c >= e.bottom - g.height && (f.y = Ie.Forward, h.y = s * Math.abs((e.bottom - g.height - c) / g.height)), !m && i >= e.right - g.width ? (f.x = Ie.Forward, h.x = s * Math.abs((e.right - g.width - i) / g.width)) : !d && r <= e.left + g.width && (f.x = Ie.Backward, h.x = s * Math.abs((e.left + g.width - r) / g.width)), { direction: f, speed: h } } function fv(t) { if (t === document.scrollingElement) { const { innerWidth: o, innerHeight: r } = window; return { top: 0, left: 0, right: o, bottom: r, width: o, height: r } } const { top: e, left: n, right: s, bottom: a } = t.getBoundingClientRect(); return { top: e, left: n, right: s, bottom: a, width: t.clientWidth, height: t.clientHeight } } function np(t) { return t.reduce((e, n) => xn(e, Wo(n)), ct) } function hv(t) { return t.reduce((e, n) => e + Zu(n), 0) } function gv(t) { return t.reduce((e, n) => e + Qu(n), 0) } function sp(t, e) { if (e === void 0 && (e = On), !t) return; const { top: n, left: s, bottom: a, right: o } = e(t); Xu(t) && (a <= 0 || o <= 0 || n >= window.innerHeight || s >= window.innerWidth) && t.scrollIntoView({ block: "center", inline: "center" }) } const bv = [ ["x", ["left", "right"], hv], ["y", ["top", "bottom"], gv] ]; class Dr { constructor(e, n) { this.rect = void 0, this.width = void 0, this.height = void 0, this.top = void 0, this.bottom = void 0, this.right = void 0, this.left = void 0; const s = Ma(n), a = np(s); this.rect = S({}, e), this.width = e.width, this.height = e.height; for (const [o, r, i] of bv) for (const c of r) Object.defineProperty(this, c, { get: () => { const l = i(s), u = a[o] - l; return this.rect[c] + u }, enumerable: !0 }); Object.defineProperty(this, "rect", { enumerable: !1 }) } } class Zn { constructor(e) { this.target = void 0, this.listeners = [], this.removeAll = () => { this.listeners.forEach(n => { var s; return (s = this.target) == null ? void 0 : s.removeEventListener(...n) }) }, this.target = e } add(e, n, s) { var a; (a = this.target) == null || a.addEventListener(e, n, s), this.listeners.push([e, n, s]) } } function vv(t) { const { EventTarget: e } = je(t); return t instanceof e ? t : Mn(t) } function ao(t, e) { const n = Math.abs(t.x), s = Math.abs(t.y); return typeof e == "number" ? Math.sqrt(Xa(n, 2) + Xa(s, 2)) > e : "x" in e && "y" in e ? n > e.x && s > e.y : "x" in e ? n > e.x : "y" in e ? s > e.y : !1 } var Ze; (function(t) { t.Click = "click", t.DragStart = "dragstart", t.Keydown = "keydown", t.ContextMenu = "contextmenu", t.Resize = "resize", t.SelectionChange = "selectionchange", t.VisibilityChange = "visibilitychange" })(Ze || (Ze = {})); function oc(t) { t.preventDefault() } function xv(t) { t.stopPropagation() } var te; (function(t) { t.Space = "Space", t.Down = "ArrowDown", t.Right = "ArrowRight", t.Left = "ArrowLeft", t.Up = "ArrowUp", t.Esc = "Escape", t.Enter = "Enter" })(te || (te = {})); const ap = { start: [te.Space, te.Enter], cancel: [te.Esc], end: [te.Space, te.Enter] }, yv = (t, e) => { let { currentCoordinates: n } = e; switch (t.code) { case te.Right: return P(S({}, n), { x: n.x + 25 }); case te.Left: return P(S({}, n), { x: n.x - 25 }); case te.Down: return P(S({}, n), { y: n.y + 25 }); case te.Up: return P(S({}, n), { y: n.y - 25 }) } }; class Ir { constructor(e) { this.props = void 0, this.autoScrollEnabled = !1, this.referenceCoordinates = void 0, this.listeners = void 0, this.windowListeners = void 0, this.props = e; const { event: { target: n } } = e; this.props = e, this.listeners = new Zn(Mn(n)), this.windowListeners = new Zn(je(n)), this.handleKeyDown = this.handleKeyDown.bind(this), this.handleCancel = this.handleCancel.bind(this), this.attach() } attach() { this.handleStart(), this.windowListeners.add(Ze.Resize, this.handleCancel), this.windowListeners.add(Ze.VisibilityChange, this.handleCancel), setTimeout(() => this.listeners.add(Ze.Keydown, this.handleKeyDown)) } handleStart() { const { activeNode: e, onStart: n } = this.props, s = e.node.current; s && sp(s), n(ct) } handleKeyDown(e) { if (Na(e)) { const { active: n, context: s, options: a } = this.props, { keyboardCodes: o = ap, coordinateGetter: r = yv, scrollBehavior: i = "smooth" } = a, { code: c } = e; if (o.end.includes(c)) { this.handleEnd(e); return } if (o.cancel.includes(c)) { this.handleCancel(e); return } const { collisionRect: l } = s.current, u = l ? { x: l.left, y: l.top } : ct; this.referenceCoordinates || (this.referenceCoordinates = u); const d = r(e, { active: n, context: s.current, currentCoordinates: u }); if (d) { const m = cs(d, u), f = { x: 0, y: 0 }, { scrollableAncestors: h } = s.current; for (const g of h) { const b = e.code, { isTop: x, isRight: v, isLeft: w, isBottom: E, maxScroll: _, minScroll: k } = tp(g), M = fv(g), y = { x: Math.min(b === te.Right ? M.right - M.width / 2 : M.right, Math.max(b === te.Right ? M.left : M.left + M.width / 2, d.x)), y: Math.min(b === te.Down ? M.bottom - M.height / 2 : M.bottom, Math.max(b === te.Down ? M.top : M.top + M.height / 2, d.y)) }, T = b === te.Right && !v || b === te.Left && !w, D = b === te.Down && !E || b === te.Up && !x; if (T && y.x !== d.x) { const C = g.scrollLeft + m.x, L = b === te.Right && C <= _.x || b === te.Left && C >= k.x; if (L && !m.y) { g.scrollTo({ left: C, behavior: i }); return } L ? f.x = g.scrollLeft - C : f.x = b === te.Right ? g.scrollLeft - _.x : g.scrollLeft - k.x, f.x && g.scrollBy({ left: -f.x, behavior: i }); break } else if (D && y.y !== d.y) { const C = g.scrollTop + m.y, L = b === te.Down && C <= _.y || b === te.Up && C >= k.y; if (L && !m.x) { g.scrollTo({ top: C, behavior: i }); return } L ? f.y = g.scrollTop - C : f.y = b === te.Down ? g.scrollTop - _.y : g.scrollTop - k.y, f.y && g.scrollBy({ top: -f.y, behavior: i }); break } } this.handleMove(e, xn(cs(d, this.referenceCoordinates), f)) } } } handleMove(e, n) { const { onMove: s } = this.props; e.preventDefault(), s(n) } handleEnd(e) { const { onEnd: n } = this.props; e.preventDefault(), this.detach(), n() } handleCancel(e) { const { onCancel: n } = this.props; e.preventDefault(), this.detach(), n() } detach() { this.listeners.removeAll(), this.windowListeners.removeAll() } } Ir.activators = [{ eventName: "onKeyDown", handler: (t, e, n) => { let { keyboardCodes: s = ap, onActivation: a } = e, { active: o } = n; const { code: r } = t.nativeEvent; if (s.start.includes(r)) { const i = o.activatorNode.current; return i && t.target !== i ? !1 : (t.preventDefault(), a == null || a({ event: t.nativeEvent }), !0) } return !1 } }]; function rc(t) { return !!(t && "distance" in t) } function ic(t) { return !!(t && "delay" in t) } class Nr { constructor(e, n, s) { var a; s === void 0 && (s = vv(e.event.target)), this.props = void 0, this.events = void 0, this.autoScrollEnabled = !0, this.document = void 0, this.activated = !1, this.initialCoordinates = void 0, this.timeoutId = null, this.listeners = void 0, this.documentListeners = void 0, this.windowListeners = void 0, this.props = e, this.events = n; const { event: o } = e, { target: r } = o; this.props = e, this.events = n, this.document = Mn(r), this.documentListeners = new Zn(this.document), this.listeners = new Zn(s), this.windowListeners = new Zn(je(r)), this.initialCoordinates = (a = ra(o)) != null ? a : ct, this.handleStart = this.handleStart.bind(this), this.handleMove = this.handleMove.bind(this), this.handleEnd = this.handleEnd.bind(this), this.handleCancel = this.handleCancel.bind(this), this.handleKeydown = this.handleKeydown.bind(this), this.removeTextSelection = this.removeTextSelection.bind(this), this.attach() } attach() { const { events: e, props: { options: { activationConstraint: n } } } = this; if (this.listeners.add(e.move.name, this.handleMove, { passive: !1 }), this.listeners.add(e.end.name, this.handleEnd), this.windowListeners.add(Ze.Resize, this.handleCancel), this.windowListeners.add(Ze.DragStart, oc), this.windowListeners.add(Ze.VisibilityChange, this.handleCancel), this.windowListeners.add(Ze.ContextMenu, oc), this.documentListeners.add(Ze.Keydown, this.handleKeydown), n) { if (rc(n)) return; if (ic(n)) { this.timeoutId = setTimeout(this.handleStart, n.delay); return } } this.handleStart() } detach() { this.listeners.removeAll(), this.windowListeners.removeAll(), setTimeout(this.documentListeners.removeAll, 50), this.timeoutId !== null && (clearTimeout(this.timeoutId), this.timeoutId = null) } handleStart() { const { initialCoordinates: e } = this, { onStart: n } = this.props; e && (this.activated = !0, this.documentListeners.add(Ze.Click, xv, { capture: !0 }), this.removeTextSelection(), this.documentListeners.add(Ze.SelectionChange, this.removeTextSelection), n(e)) } handleMove(e) { var n; const { activated: s, initialCoordinates: a, props: o } = this, { onMove: r, options: { activationConstraint: i } } = o; if (!a) return; const c = (n = ra(e)) != null ? n : ct, l = cs(a, c); if (!s && i) { if (ic(i)) return ao(l, i.tolerance) ? this.handleCancel() : void 0; if (rc(i)) return i.tolerance != null && ao(l, i.tolerance) ? this.handleCancel() : ao(l, i.distance) ? this.handleStart() : void 0 } e.cancelable && e.preventDefault(), r(c) } handleEnd() { const { onEnd: e } = this.props; this.detach(), e() } handleCancel() { const { onCancel: e } = this.props; this.detach(), e() } handleKeydown(e) { e.code === te.Esc && this.handleCancel() } removeTextSelection() { var e; (e = this.document.getSelection()) == null || e.removeAllRanges() } } const wv = { move: { name: "pointermove" }, end: { name: "pointerup" } }; class Mr extends Nr { constructor(e) { const { event: n } = e, s = Mn(n.target); super(e, wv, s) } } Mr.activators = [{ eventName: "onPointerDown", handler: (t, e) => { let { nativeEvent: n } = t, { onActivation: s } = e; return !n.isPrimary || n.button !== 0 ? !1 : (s == null || s({ event: n }), !0) } }]; const kv = { move: { name: "mousemove" }, end: { name: "mouseup" } }; var Jo; (function(t) { t[t.RightClick = 2] = "RightClick" })(Jo || (Jo = {})); class _v extends Nr { constructor(e) { super(e, kv, Mn(e.event.target)) } } _v.activators = [{ eventName: "onMouseDown", handler: (t, e) => { let { nativeEvent: n } = t, { onActivation: s } = e; return n.button === Jo.RightClick ? !1 : (s == null || s({ event: n }), !0) } }]; const oo = { move: { name: "touchmove" }, end: { name: "touchend" } }; class Cv extends Nr { constructor(e) { super(e, oo) } static setup() { return window.addEventListener(oo.move.name, e, { capture: !1, passive: !1 }), function() { window.removeEventListener(oo.move.name, e) }; function e() {} } } Cv.activators = [{ eventName: "onTouchStart", handler: (t, e) => { let { nativeEvent: n } = t, { onActivation: s } = e; const { touches: a } = n; return a.length > 1 ? !1 : (s == null || s({ event: n }), !0) } }]; var Qn; (function(t) { t[t.Pointer = 0] = "Pointer", t[t.DraggableRect = 1] = "DraggableRect" })(Qn || (Qn = {})); var ca; (function(t) { t[t.TreeOrder = 0] = "TreeOrder", t[t.ReversedTreeOrder = 1] = "ReversedTreeOrder" })(ca || (ca = {})); function Ev(t) { let { acceleration: e, activator: n = Qn.Pointer, canScroll: s, draggingRect: a, enabled: o, interval: r = 5, order: i = ca.TreeOrder, pointerCoordinates: c, scrollableAncestors: l, scrollableAncestorRects: u, delta: d, threshold: m } = t; const f = Sv({ delta: d, disabled: !o }), [h, g] = Bb(), b = J({ x: 0, y: 0 }), x = J({ x: 0, y: 0 }), v = de(() => { switch (n) { case Qn.Pointer: return c ? { top: c.y, bottom: c.y, left: c.x, right: c.x } : null; case Qn.DraggableRect: return a } }, [n, a, c]), w = J(null), E = we(() => { const k = w.current; if (!k) return; const M = b.current.x * x.current.x, y = b.current.y * x.current.y; k.scrollBy(M, y) }, []), _ = de(() => i === ca.TreeOrder ? [...l].reverse() : l, [i, l]); U(() => { if (!o || !l.length || !v) { g(); return } for (const k of _) { if ((s == null ? void 0 : s(k)) === !1) continue; const M = l.indexOf(k), y = u[M]; if (!y) continue; const { direction: T, speed: D } = mv(k, y, v, e, m); for (const C of ["x", "y"]) f[C][T[C]] || (D[C] = 0, T[C] = 0); if (D.x > 0 || D.y > 0) { g(), w.current = k, h(E, r), b.current = D, x.current = T; return } } b.current = { x: 0, y: 0 }, x.current = { x: 0, y: 0 }, g() }, [e, E, s, g, o, r, JSON.stringify(v), JSON.stringify(f), h, l, _, u, JSON.stringify(m)]) } const Av = { x: { [Ie.Backward]: !1, [Ie.Forward]: !1 }, y: { [Ie.Backward]: !1, [Ie.Forward]: !1 } }; function Sv(t) { let { delta: e, disabled: n } = t; const s = oa(e); return gs(a => { if (n || !s || !a) return Av; const o = { x: Math.sign(e.x - s.x), y: Math.sign(e.y - s.y) }; return { x: { [Ie.Backward]: a.x[Ie.Backward] || o.x === -1, [Ie.Forward]: a.x[Ie.Forward] || o.x === 1 }, y: { [Ie.Backward]: a.y[Ie.Backward] || o.y === -1, [Ie.Forward]: a.y[Ie.Forward] || o.y === 1 } } }, [n, e, s]) } function Tv(t, e) { const n = e !== null ? t.get(e) : void 0, s = n ? n.node.current : null; return gs(a => { var o; return e === null ? null : (o = s != null ? s : a) != null ? o : null }, [s, e]) } function Dv(t, e) { return de(() => t.reduce((n, s) => { const { sensor: a } = s, o = a.activators.map(r => ({ eventName: r.eventName, handler: e(r.handler, s) })); return [...n, ...o] }, []), [t, e]) } var ls; (function(t) { t[t.Always = 0] = "Always", t[t.BeforeDragging = 1] = "BeforeDragging", t[t.WhileDragging = 2] = "WhileDragging" })(ls || (ls = {})); var Yo; (function(t) { t.Optimized = "optimized" })(Yo || (Yo = {})); const cc = new Map; function Iv(t, e) { let { dragging: n, dependencies: s, config: a } = e; const [o, r] = z(null), i = o != null, { frequency: c, measure: l, strategy: u } = a, d = J(t), m = x(), f = is(m), h = we(function(v) { v === void 0 && (v = []), !f.current && r(w => w ? w.concat(v) : v) }, [f]), g = J(null), b = gs(v => { if (m && !n) return cc; const w = o; if (!v || v === cc || d.current !== t || w != null) { const E = new Map; for (let _ of t) { if (!_) continue; if (w && w.length > 0 && !w.includes(_.id) && _.rect.current) { E.set(_.id, _.rect.current); continue } const k = _.node.current, M = k ? new Dr(l(k), k) : null; _.rect.current = M, M && E.set(_.id, M) } return E } return v }, [t, o, n, m, l]); return U(() => { d.current = t }, [t]), U(() => { m || requestAnimationFrame(() => h()) }, [n, m]), U(() => { i && r(null) }, [i]), U(() => { m || typeof c != "number" || g.current !== null || (g.current = setTimeout(() => { h(), g.current = null }, c)) }, [c, m, h, ...s]), { droppableRects: b, measureDroppableContainers: h, measuringScheduled: i }; function x() { switch (u) { case ls.Always: return !1; case ls.BeforeDragging: return n; default: return !n } } } function Or(t, e) { return gs(n => t ? n || (typeof e == "function" ? e(t) : t) : null, [e, t]) } function Nv(t, e) { return Or(t, e) } function Mv(t) { let { callback: e, disabled: n } = t; const s = Ia(e), a = de(() => { if (n || typeof window == "undefined" || typeof window.MutationObserver == "undefined") return; const { MutationObserver: o } = window; return new o(s) }, [s, n]); return U(() => () => a == null ? void 0 : a.disconnect(), [a]), a } function Oa(t) { let { callback: e, disabled: n } = t; const s = Ia(e), a = de(() => { if (n || typeof window == "undefined" || typeof window.ResizeObserver == "undefined") return; const { ResizeObserver: o } = window; return new o(s) }, [n]); return U(() => () => a == null ? void 0 : a.disconnect(), [a]), a } function Ov(t) { return new Dr(On(t), t) } function lc(t, e, n) { e === void 0 && (e = Ov); const [s, a] = cr(i, null), o = Mv({ callback(c) { if (t) for (const l of c) { const { type: u, target: d } = l; if (u === "childList" && d instanceof HTMLElement && d.contains(t)) { a(); break } } } }), r = Oa({ callback: a }); return Qe(() => { a(), t ? (r == null || r.observe(t), o == null || o.observe(document.body, { childList: !0, subtree: !0 })) : (r == null || r.disconnect(), o == null || o.disconnect()) }, [t]), s; function i(c) { if (!t) return null; if (t.isConnected === !1) { var l; return (l = c != null ? c : n) != null ? l : null } const u = e(t); return JSON.stringify(c) === JSON.stringify(u) ? c : u } } function Lv(t) { const e = Or(t); return Yu(t, e) } const uc = []; function Rv(t) { const e = J(t), n = gs(s => t ? s && s !== uc && t && e.current && t.parentNode === e.current.parentNode ? s : Ma(t) : uc, [t]); return U(() => { e.current = t }, [t]), n } function Pv(t) { const [e, n] = z(null), s = J(t), a = we(o => { const r = so(o.target); r && n(i => i ? (i.set(r, Wo(r)), new Map(i)) : null) }, []); return U(() => { const o = s.current; if (t !== o) { r(o); const i = t.map(c => { const l = so(c); return l ? (l.addEventListener("scroll", a, { passive: !0 }), [l, Wo(l)]) : null }).filter(c => c != null); n(i.length ? new Map(i) : null), s.current = t } return () => { r(t), r(o) }; function r(i) { i.forEach(c => { const l = so(c); l == null || l.removeEventListener("scroll", a) }) } }, [a, t]), de(() => t.length ? e ? Array.from(e.values()).reduce((o, r) => xn(o, r), ct) : np(t) : ct, [t, e]) } function pc(t, e) { e === void 0 && (e = []); const n = J(null); return U(() => { n.current = null }, e), U(() => { const s = t !== ct; s && !n.current && (n.current = t), !s && n.current && (n.current = null) }, [t]), n.current ? cs(t, n.current) : ct } function Bv(t) { U(() => { if (!Da) return; const e = t.map(n => { let { sensor: s } = n; return s.setup == null ? void 0 : s.setup() }); return () => { for (const n of e) n == null || n() } }, t.map(e => { let { sensor: n } = e; return n })) } function zv(t, e) { return de(() => t.reduce((n, s) => { let { eventName: a, handler: o } = s; return n[a] = r => { o(r, e) }, n }, {}), [t, e]) } function op(t) { return de(() => t ? lv(t) : null, [t]) } const ro = []; function qv(t, e) { e === void 0 && (e = On); const [n] = t, s = op(n ? je(n) : null), [a, o] = cr(i, ro), r = Oa({ callback: o }); return t.length > 0 && a === ro && o(), Qe(() => { t.length ? t.forEach(c => r == null ? void 0 : r.observe(c)) : (r == null || r.disconnect(), o()) }, [t]), a; function i() { return t.length ? t.map(c => ep(c) ? s : new Dr(e(c), c)) : ro } } function rp(t) { if (!t) return null; if (t.children.length > 1) return t; const e = t.children[0]; return hs(e) ? e : t } function Fv(t) { let { measure: e } = t; const [n, s] = z(null), a = we(l => { for (const { target: u } of l) if (hs(u)) { s(d => { const m = e(u); return d ? P(S({}, d), { width: m.width, height: m.height }) : m }); break } }, [e]), o = Oa({ callback: a }), r = we(l => { const u = rp(l); o == null || o.disconnect(), u && (o == null || o.observe(u)), s(u ? e(u) : null) }, [e, o]), [i, c] = aa(r); return de(() => ({ nodeRef: i, rect: n, setRef: c }), [n, i, c]) } const jv = [{ sensor: Mr, options: {} }, { sensor: Ir, options: {} }], $v = { current: {} }, Hs = { draggable: { measure: ac }, droppable: { measure: ac, strategy: ls.WhileDragging, frequency: Yo.Optimized }, dragOverlay: { measure: On } }; class es extends Map { get(e) { var n; return e != null && (n = super.get(e)) != null ? n : void 0 } toArray() { return Array.from(this.values()) } getEnabled() { return this.toArray().filter(e => { let { disabled: n } = e; return !n }) } getNodeFor(e) { var n, s; return (n = (s = this.get(e)) == null ? void 0 : s.node.current) != null ? n : void 0 } } const Uv = { activatorEvent: null, active: null, activeNode: null, activeNodeRect: null, collisions: null, containerNodeRect: null, draggableNodes: new Map, droppableRects: new Map, droppableContainers: new es, over: null, dragOverlay: { nodeRef: { current: null }, rect: null, setRef: ia }, scrollableAncestors: [], scrollableAncestorRects: [], measuringConfiguration: Hs, measureDroppableContainers: ia, windowRect: null, measuringScheduled: !1 }, ip = { activatorEvent: null, activators: [], active: null, activeNodeRect: null, ariaDescribedById: { draggable: "" }, dispatch: ia, draggableNodes: new Map, over: null, measureDroppableContainers: ia }, vs = In(ip), cp = In(Uv); function Vv() { return { draggable: { active: null, initialCoordinates: { x: 0, y: 0 }, nodes: new Map, translate: { x: 0, y: 0 } }, droppable: { containers: new es } } } function Hv(t, e) { switch (e.type) { case Ce.DragStart: return P(S({}, t), { draggable: P(S({}, t.draggable), { initialCoordinates: e.initialCoordinates, active: e.active }) }); case Ce.DragMove: return t.draggable.active ? P(S({}, t), { draggable: P(S({}, t.draggable), { translate: { x: e.coordinates.x - t.draggable.initialCoordinates.x, y: e.coordinates.y - t.draggable.initialCoordinates.y } }) }) : t; case Ce.DragEnd: case Ce.DragCancel: return P(S({}, t), { draggable: P(S({}, t.draggable), { active: null, initialCoordinates: { x: 0, y: 0 }, translate: { x: 0, y: 0 } }) }); case Ce.RegisterDroppable: { const { element: n } = e, { id: s } = n, a = new es(t.droppable.containers); return a.set(s, n), P(S({}, t), { droppable: P(S({}, t.droppable), { containers: a }) }) } case Ce.SetDroppableDisabled: { const { id: n, key: s, disabled: a } = e, o = t.droppable.containers.get(n); if (!o || s !== o.key) return t; const r = new es(t.droppable.containers); return r.set(n, P(S({}, o), { disabled: a })), P(S({}, t), { droppable: P(S({}, t.droppable), { containers: r }) }) } case Ce.UnregisterDroppable: { const { id: n, key: s } = e, a = t.droppable.containers.get(n); if (!a || s !== a.key) return t; const o = new es(t.droppable.containers); return o.delete(n), P(S({}, t), { droppable: P(S({}, t.droppable), { containers: o }) }) } default: return t } } function Gv(t) { let { disabled: e } = t; const { active: n, activatorEvent: s, draggableNodes: a } = Nt(vs), o = oa(s), r = oa(n == null ? void 0 : n.id); return U(() => { if (!e && !s && o && r != null) { if (!Na(o) || document.activeElement === o.target) return; const i = a.get(r); if (!i) return; const { activatorNode: c, node: l } = i; if (!c.current && !l.current) return; requestAnimationFrame(() => { for (const u of [c.current, l.current]) { if (!u) continue; const d = Fb(u); if (d) { d.focus(); break } } }) } }, [s, e, a, r, o]), null } function lp(t, e) { let a = e, { transform: n } = a, s = st(a, ["transform"]); return t != null && t.length ? t.reduce((o, r) => r(S({ transform: o }, s)), n) : n } function Wv(t) { return de(() => ({ draggable: S(S({}, Hs.draggable), t == null ? void 0 : t.draggable), droppable: S(S({}, Hs.droppable), t == null ? void 0 : t.droppable), dragOverlay: S(S({}, Hs.dragOverlay), t == null ? void 0 : t.dragOverlay) }), [t == null ? void 0 : t.draggable, t == null ? void 0 : t.droppable, t == null ? void 0 : t.dragOverlay]) } function Jv(t) { let { activeNode: e, measure: n, initialRect: s, config: a = !0 } = t; const o = J(!1), { x: r, y: i } = typeof a == "boolean" ? { x: a, y: a } : a; Qe(() => { if (!r && !i || !e) { o.current = !1; return } if (o.current || !s) return; const l = e == null ? void 0 : e.node.current; if (!l || l.isConnected === !1) return; const u = n(l), d = Yu(u, s); if (r || (d.x = 0), i || (d.y = 0), o.current = !0, Math.abs(d.x) > 0 || Math.abs(d.y) > 0) { const m = Xu(l); m && m.scrollBy({ top: d.y, left: d.x }) } }, [e, r, i, s, n]) } const La = In(P(S({}, ct), { scaleX: 1, scaleY: 1 })); var Bt; (function(t) { t[t.Uninitialized = 0] = "Uninitialized", t[t.Initializing = 1] = "Initializing", t[t.Initialized = 2] = "Initialized" })(Bt || (Bt = {})); const Yv = kf(function(e) { var n, s, a, o; let Ti = e, { id: r, accessibility: i, autoScroll: c = !0, children: l, sensors: u = jv, collisionDetection: d = sv, measuring: m, modifiers: f } = Ti, h = st(Ti, ["id", "accessibility", "autoScroll", "children", "sensors", "collisionDetection", "measuring", "modifiers"]); const g = cr(Hv, void 0, Vv), [b, x] = g, [v, w] = Wb(), [E, _] = z(Bt.Uninitialized), k = E === Bt.Initialized, { draggable: { active: M, nodes: y, translate: T }, droppable: { containers: D } } = b, C = M ? y.get(M) : null, L = J({ initial: null, translated: null }), R = de(() => { var Ne; return M != null ? { id: M, data: (Ne = C == null ? void 0 : C.data) != null ? Ne : $v, rect: L } : null }, [M, C]), A = J(null), [I, O] = z(null), [B, j] = z(null), G = is(h, Object.values(h)), ke = bs("DndDescribedBy", r), Re = de(() => D.getEnabled(), [D]), ve = Wv(m), { droppableRects: _e, measureDroppableContainers: W, measuringScheduled: le } = Iv(Re, { dragging: k, dependencies: [T.x, T.y], config: ve.droppable }), K = Tv(y, M), H = de(() => B ? ra(B) : null, [B]), me = bf(), V = Nv(K, ve.draggable.measure); Jv({ activeNode: M ? y.get(M) : null, config: me.layoutShiftCompensation, initialRect: V, measure: ve.draggable.measure }); const $ = lc(K, ve.draggable.measure, V), He = lc(K ? K.parentElement : null), pt = J({ activatorEvent: null, active: null, activeNode: K, collisionRect: null, collisions: null, droppableRects: _e, draggableNodes: y, draggingNode: null, draggingNodeRect: null, droppableContainers: D, over: null, scrollableAncestors: [], scrollAdjustedTranslate: null }), sn = D.getNodeFor((n = pt.current.over) == null ? void 0 : n.id), At = Fv({ measure: ve.dragOverlay.measure }), an = (s = At.nodeRef.current) != null ? s : K, on = k ? (a = At.rect) != null ? a : $ : null, yi = !!(At.nodeRef.current && At.rect), wi = Lv(yi ? null : $), Ya = op(an ? je(an) : null), Ot = Rv(k ? sn != null ? sn : K : null), Cs = qv(Ot), Es = lp(f, { transform: { x: T.x - wi.x, y: T.y - wi.y, scaleX: 1, scaleY: 1 }, activatorEvent: B, active: R, activeNodeRect: $, containerNodeRect: He, draggingNodeRect: on, over: pt.current.over, overlayNodeRect: At.rect, scrollableAncestors: Ot, scrollableAncestorRects: Cs, windowRect: Ya }), ki = H ? xn(H, T) : null, _i = Pv(Ot), uf = pc(_i), pf = pc(_i, [$]), rn = xn(Es, uf), cn = on ? rv(on, Es) : null, zn = R && cn ? d({ active: R, collisionRect: cn, droppableRects: _e, droppableContainers: Re, pointerCoordinates: ki }) : null, Ci = Ju(zn, "id"), [Lt, Ei] = z(null), df = yi ? Es : xn(Es, pf), mf = av(df, (o = Lt == null ? void 0 : Lt.rect) != null ? o : null, $), Ai = we((Ne, Ge) => { let { sensor: We, options: Rt } = Ge; if (A.current == null) return; const Xe = y.get(A.current); if (!Xe) return; const tt = Ne.nativeEvent, dt = new We({ active: A.current, activeNode: Xe, event: tt, options: Rt, context: pt, onStart(nt) { const qn = A.current; if (qn == null) return; const Fn = y.get(qn); if (!Fn) return; const { onDragStart: As } = G.current, Ss = { active: { id: qn, data: Fn.data, rect: L } }; Un(() => { As == null || As(Ss), _(Bt.Initializing), x({ type: Ce.DragStart, initialCoordinates: nt, active: qn }), v({ type: "onDragStart", event: Ss }) }) }, onMove(nt) { x({ type: Ce.DragMove, coordinates: nt }) }, onEnd: ln(Ce.DragEnd), onCancel: ln(Ce.DragCancel) }); Un(() => { O(dt), j(Ne.nativeEvent) }); function ln(nt) { return function() { return N(this, null, function*() { const { active: Fn, collisions: As, over: Ss, scrollAdjustedTranslate: Di } = pt.current; let jn = null; if (Fn && Di) { const { cancelDrop: $n } = G.current; jn = { activatorEvent: tt, active: Fn, collisions: As, delta: Di, over: Ss }, nt === Ce.DragEnd && typeof $n == "function" && (yield Promise.resolve($n(jn))) && (nt = Ce.DragCancel) } A.current = null, Un(() => { x({ type: nt }), _(Bt.Uninitialized), Ei(null), O(null), j(null); const $n = nt === Ce.DragEnd ? "onDragEnd" : "onDragCancel"; if (jn) { const Ka = G.current[$n]; Ka == null || Ka(jn), v({ type: $n, event: jn }) } }) }) } } }, [y]), ff = we((Ne, Ge) => (We, Rt) => { const Xe = We.nativeEvent, tt = y.get(Rt); if (A.current !== null || !tt || Xe.dndKit || Xe.defaultPrevented) return; const dt = { active: tt }; Ne(We, Ge.options, dt) === !0 && (Xe.dndKit = { capturedBy: Ge.sensor }, A.current = Rt, Ai(We, Ge)) }, [y, Ai]), Si = Dv(u, ff); Bv(u), Qe(() => { $ && E === Bt.Initializing && _(Bt.Initialized) }, [$, E]), U(() => { const { onDragMove: Ne } = G.current, { active: Ge, activatorEvent: We, collisions: Rt, over: Xe } = pt.current; if (!Ge || !We) return; const tt = { active: Ge, activatorEvent: We, collisions: Rt, delta: { x: rn.x, y: rn.y }, over: Xe }; Un(() => { Ne == null || Ne(tt), v({ type: "onDragMove", event: tt }) }) }, [rn.x, rn.y]), U(() => { const { active: Ne, activatorEvent: Ge, collisions: We, droppableContainers: Rt, scrollAdjustedTranslate: Xe } = pt.current; if (!Ne || A.current == null || !Ge || !Xe) return; const { onDragOver: tt } = G.current, dt = Rt.get(Ci), ln = dt && dt.rect.current ? { id: dt.id, rect: dt.rect.current, data: dt.data, disabled: dt.disabled } : null, nt = { active: Ne, activatorEvent: Ge, collisions: We, delta: { x: Xe.x, y: Xe.y }, over: ln }; Un(() => { Ei(ln), tt == null || tt(nt), v({ type: "onDragOver", event: nt }) }) }, [Ci]), Qe(() => { pt.current = { activatorEvent: B, active: R, activeNode: K, collisionRect: cn, collisions: zn, droppableRects: _e, draggableNodes: y, draggingNode: an, draggingNodeRect: on, droppableContainers: D, over: Lt, scrollableAncestors: Ot, scrollAdjustedTranslate: rn }, L.current = { initial: on, translated: cn } }, [R, K, zn, cn, y, an, on, _e, D, Lt, Ot, rn]), Ev(P(S({}, me), { delta: T, draggingRect: cn, pointerCoordinates: ki, scrollableAncestors: Ot, scrollableAncestorRects: Cs })); const hf = de(() => ({ active: R, activeNode: K, activeNodeRect: $, activatorEvent: B, collisions: zn, containerNodeRect: He, dragOverlay: At, draggableNodes: y, droppableContainers: D, droppableRects: _e, over: Lt, measureDroppableContainers: W, scrollableAncestors: Ot, scrollableAncestorRects: Cs, measuringConfiguration: ve, measuringScheduled: le, windowRect: Ya }), [R, K, $, B, zn, He, At, y, D, _e, Lt, W, Ot, Cs, ve, le, Ya]), gf = de(() => ({ activatorEvent: B, activators: Si, active: R, activeNodeRect: $, ariaDescribedById: { draggable: ke }, dispatch: x, draggableNodes: y, over: Lt, measureDroppableContainers: W }), [B, Si, R, $, x, ke, y, Lt, W]); return ge.createElement(Hu.Provider, { value: w }, ge.createElement(vs.Provider, { value: gf }, ge.createElement(cp.Provider, { value: hf }, ge.createElement(La.Provider, { value: mf }, l)), ge.createElement(Gv, { disabled: (i == null ? void 0 : i.restoreFocus) === !1 })), ge.createElement(Kb, P(S({}, i), { hiddenTextDescribedById: ke }))); function bf() { const Ne = (I == null ? void 0 : I.autoScrollEnabled) === !1, Ge = typeof c == "object" ? c.enabled === !1 : c === !1, We = k && !Ne && !Ge; return typeof c == "object" ? P(S({}, c), { enabled: We }) : { enabled: We } } }), Kv = In(null), dc = "button", Xv = "Droppable"; function Zv(t) { let { id: e, data: n, disabled: s = !1, attributes: a } = t; const o = bs(Xv), { activators: r, activatorEvent: i, active: c, activeNodeRect: l, ariaDescribedById: u, draggableNodes: d, over: m } = Nt(vs), { role: f = dc, roleDescription: h = "draggable", tabIndex: g = 0 } = a != null ? a : {}, b = (c == null ? void 0 : c.id) === e, x = Nt(b ? La : Kv), [v, w] = aa(), [E, _] = aa(), k = zv(r, e), M = is(n); Qe(() => (d.set(e, { id: e, key: o, node: v, activatorNode: E, data: M }), () => { const T = d.get(e); T && T.key === o && d.delete(e) }), [d, e]); const y = de(() => ({ role: f, tabIndex: g, "aria-disabled": s, "aria-pressed": b && f === dc ? !0 : void 0, "aria-roledescription": h, "aria-describedby": u.draggable }), [s, f, g, b, h, u.draggable]); return { active: c, activatorEvent: i, activeNodeRect: l, attributes: y, isDragging: b, listeners: s ? void 0 : k, node: v, over: m, setNodeRef: w, setActivatorNodeRef: _, transform: x } } function up() { return Nt(cp) } const Qv = "Droppable", ex = { timeout: 25 }; function tx(t) { let { data: e, disabled: n = !1, id: s, resizeObserverConfig: a } = t; const o = bs(Qv), { active: r, dispatch: i, over: c, measureDroppableContainers: l } = Nt(vs), u = J({ disabled: n }), d = J(!1), m = J(null), f = J(null), { disabled: h, updateMeasurementsFor: g, timeout: b } = S(S({}, ex), a), x = is(g != null ? g : s), v = we(() => { if (!d.current) { d.current = !0; return } f.current != null && clearTimeout(f.current), f.current = setTimeout(() => { l(Array.isArray(x.current) ? x.current : [x.current]), f.current = null }, b) }, [b]), w = Oa({ callback: v, disabled: h || !r }), E = we((y, T) => { w && (T && (w.unobserve(T), d.current = !1), y && w.observe(y)) }, [w]), [_, k] = aa(E), M = is(e); return U(() => { !w || !_.current || (w.disconnect(), d.current = !1, w.observe(_.current)) }, [_, w]), Qe(() => (i({ type: Ce.RegisterDroppable, element: { id: s, key: o, disabled: n, node: _, rect: m, data: M } }), () => i({ type: Ce.UnregisterDroppable, key: o, id: s })), [s]), U(() => { n !== u.current.disabled && (i({ type: Ce.SetDroppableDisabled, id: s, key: o, disabled: n }), u.current.disabled = n) }, [s, o, n, i]), { active: r, rect: m, isOver: (c == null ? void 0 : c.id) === s, node: _, over: c, setNodeRef: k } } function nx(t) { let { animation: e, children: n } = t; const [s, a] = z(null), [o, r] = z(null), i = oa(n); return !n && !s && i && a(i), Qe(() => { if (!o) return; const c = s == null ? void 0 : s.key, l = s == null ? void 0 : s.props.id; if (c == null || l == null) { a(null); return } Promise.resolve(e(l, o)).then(() => { a(null) }) }, [e, s, o]), ge.createElement(ge.Fragment, null, n, s ? _f(s, { ref: r }) : null) } const sx = { x: 0, y: 0, scaleX: 1, scaleY: 1 }; function ax(t) { let { children: e } = t; return ge.createElement(vs.Provider, { value: ip }, ge.createElement(La.Provider, { value: sx }, e)) } const ox = { position: "fixed", touchAction: "none" }, rx = t => Na(t) ? "transform 250ms ease" : void 0, ix = wa((t, e) => { let { as: n, activatorEvent: s, adjustScale: a, children: o, className: r, rect: i, style: c, transform: l, transition: u = rx } = t; if (!i) return null; const d = a ? l : P(S({}, l), { scaleX: 1, scaleY: 1 }), m = S(P(S({}, ox), { width: i.width, height: i.height, top: i.top, left: i.left, transform: Ht.Transform.toString(d), transformOrigin: a && s ? Zb(s, i) : void 0, transition: typeof u == "function" ? u(s) : u }), c); return ge.createElement(n, { className: r, style: m, ref: e }, o) }), cx = t => e => { let { active: n, dragOverlay: s } = e; const a = {}, { styles: o, className: r } = t; if (o != null && o.active) for (const [i, c] of Object.entries(o.active)) c !== void 0 && (a[i] = n.node.style.getPropertyValue(i), n.node.style.setProperty(i, c)); if (o != null && o.dragOverlay) for (const [i, c] of Object.entries(o.dragOverlay)) c !== void 0 && s.node.style.setProperty(i, c); return r != null && r.active && n.node.classList.add(r.active), r != null && r.dragOverlay && s.node.classList.add(r.dragOverlay), function() { for (const [c, l] of Object.entries(a)) n.node.style.setProperty(c, l); r != null && r.active && n.node.classList.remove(r.active) } }, lx = t => { let { transform: { initial: e, final: n } } = t; return [{ transform: Ht.Transform.toString(e) }, { transform: Ht.Transform.toString(n) }] }, ux = { duration: 250, easing: "ease", keyframes: lx, sideEffects: cx({ styles: { active: { opacity: "0" } } }) }; function px(t) { let { config: e, draggableNodes: n, droppableContainers: s, measuringConfiguration: a } = t; return Ia((o, r) => { if (e === null) return; const i = n.get(o); if (!i) return; const c = i.node.current; if (!c) return; const l = rp(r); if (!l) return; const { transform: u } = je(r).getComputedStyle(r), d = Ku(u); if (!d) return; const m = typeof e == "function" ? e : dx(e); return sp(c, a.draggable.measure), m({ active: { id: o, data: i.data, node: c, rect: a.draggable.measure(c) }, draggableNodes: n, dragOverlay: { node: r, rect: a.dragOverlay.measure(l) }, droppableContainers: s, measuringConfiguration: a, transform: d }) }) } function dx(t) { const { duration: e, easing: n, sideEffects: s, keyframes: a } = S(S({}, ux), t); return o => { let v = o, { active: r, dragOverlay: i, transform: c } = v, l = st(v, ["active", "dragOverlay", "transform"]); if (!e) return; const u = { x: i.rect.left - r.rect.left, y: i.rect.top - r.rect.top }, d = { scaleX: c.scaleX !== 1 ? r.rect.width * c.scaleX / i.rect.width : 1, scaleY: c.scaleY !== 1 ? r.rect.height * c.scaleY / i.rect.height : 1 }, m = S({ x: c.x - u.x, y: c.y - u.y }, d), f = a(P(S({}, l), { active: r, dragOverlay: i, transform: { initial: c, final: m } })), [h] = f, g = f[f.length - 1]; if (JSON.stringify(h) === JSON.stringify(g)) return; const b = s == null ? void 0 : s(S({ active: r, dragOverlay: i }, l)), x = i.node.animate(f, { duration: e, easing: n, fill: "forwards" }); return new Promise(w => { x.onfinish = () => { b == null || b(), w() } }) } } let mc = 0; function mx(t) { return de(() => { if (t != null) return mc++, mc }, [t]) } const sle = ge.memo(t => { let { adjustScale: e = !1, children: n, dropAnimation: s, style: a, transition: o, modifiers: r, wrapperElement: i = "div", className: c, zIndex: l = 999 } = t; const { activatorEvent: u, active: d, activeNodeRect: m, containerNodeRect: f, draggableNodes: h, droppableContainers: g, dragOverlay: b, over: x, measuringConfiguration: v, scrollableAncestors: w, scrollableAncestorRects: E, windowRect: _ } = up(), k = Nt(La), M = mx(d == null ? void 0 : d.id), y = lp(r, { activatorEvent: u, active: d, activeNodeRect: m, containerNodeRect: f, draggingNodeRect: b.rect, over: x, overlayNodeRect: b.rect, scrollableAncestors: w, scrollableAncestorRects: E, transform: k, windowRect: _ }), T = Or(m), D = px({ config: s, draggableNodes: h, droppableContainers: g, measuringConfiguration: v }), C = T ? b.setRef : void 0; return ge.createElement(ax, null, ge.createElement(nx, { animation: D }, d && M ? ge.createElement(ix, { key: M, id: d.id, ref: C, as: i, activatorEvent: u, adjustScale: e, className: c, transition: o, rect: T, style: S({ zIndex: l }, a), transform: y }, n) : null)) }); function Lr(t, e, n) { const s = t.slice(); return s.splice(n < 0 ? s.length + n : n, 0, s.splice(e, 1)[0]), s } function fx(t, e) { return t.reduce((n, s, a) => { const o = e.get(s); return o && (n[a] = o), n }, Array(t.length)) } function Os(t) { return t !== null && t >= 0 } function hx(t, e) { if (t === e) return !0; if (t.length !== e.length) return !1; for (let n = 0; n < t.length; n++) if (t[n] !== e[n]) return !1; return !0 } function gx(t) { return typeof t == "boolean" ? { draggable: t, droppable: t } : t } const Rr = t => { let { rects: e, activeIndex: n, overIndex: s, index: a } = t; const o = Lr(e, s, n), r = e[a], i = o[a]; return !i || !r ? null : { x: i.left - r.left, y: i.top - r.top, scaleX: i.width / r.width, scaleY: i.height / r.height } }, Ls = { scaleX: 1, scaleY: 1 }, ale = t => { var e; let { activeIndex: n, activeNodeRect: s, index: a, rects: o, overIndex: r } = t; const i = (e = o[n]) != null ? e : s; if (!i) return null; if (a === n) { const l = o[r]; return l ? S({ x: 0, y: n < r ? l.top + l.height - (i.top + i.height) : l.top - i.top }, Ls) : null } const c = bx(o, a, n); return a > n && a <= r ? S({ x: 0, y: -i.height - c }, Ls) : a < n && a >= r ? S({ x: 0, y: i.height + c }, Ls) : S({ x: 0, y: 0 }, Ls) }; function bx(t, e, n) { const s = t[e], a = t[e - 1], o = t[e + 1]; return s ? n < e ? a ? s.top - (a.top + a.height) : o ? o.top - (s.top + s.height) : 0 : o ? o.top - (s.top + s.height) : a ? s.top - (a.top + a.height) : 0 : 0 } const pp = "Sortable", dp = ge.createContext({ activeIndex: -1, containerId: pp, disableTransforms: !1, items: [], overIndex: -1, useDragOverlay: !1, sortedRects: [], strategy: Rr, disabled: { draggable: !1, droppable: !1 } }); function vx(t) { let { children: e, id: n, items: s, strategy: a = Rr, disabled: o = !1 } = t; const { active: r, dragOverlay: i, droppableRects: c, over: l, measureDroppableContainers: u, measuringScheduled: d } = up(), m = bs(pp, n), f = i.rect !== null, h = de(() => s.map(M => typeof M == "object" && "id" in M ? M.id : M), [s]), g = r != null, b = r ? h.indexOf(r.id) : -1, x = l ? h.indexOf(l.id) : -1, v = J(h), w = !hx(h, v.current), E = x !== -1 && b === -1 || w, _ = gx(o); Qe(() => { w && g && !d && u(h) }, [w, h, g, u, d]), U(() => { v.current = h }, [h]); const k = de(() => ({ activeIndex: b, containerId: m, disabled: _, disableTransforms: E, items: h, overIndex: x, useDragOverlay: f, sortedRects: fx(h, c), strategy: a }), [b, m, _.draggable, _.droppable, E, h, x, c, f, a]); return ge.createElement(dp.Provider, { value: k }, e) } const xx = t => { let { id: e, items: n, activeIndex: s, overIndex: a } = t; return Lr(n, s, a).indexOf(e) }, yx = t => { let { containerId: e, isSorting: n, wasDragging: s, index: a, items: o, newIndex: r, previousItems: i, previousContainerId: c, transition: l } = t; return !l || !s || i !== o && a === r ? !1 : n ? !0 : r !== a && e === c }, wx = { duration: 200, easing: "ease" }, mp = "transform", kx = Ht.Transition.toString({ property: mp, duration: 0, easing: "linear" }), _x = { roleDescription: "sortable" }; function Cx(t) { let { disabled: e, index: n, node: s, rect: a } = t; const [o, r] = z(null), i = J(n); return Qe(() => { if (!e && n !== i.current && s.current) { const c = a.current; if (c) { const l = On(s.current, { ignoreTransform: !0 }), u = { x: c.left - l.left, y: c.top - l.top, scaleX: c.width / l.width, scaleY: c.height / l.height }; (u.x || u.y) && r(u) } } n !== i.current && (i.current = n) }, [e, n, s, a]), U(() => { o && requestAnimationFrame(() => { r(null) }) }, [o]), o } function Ex(t) { let { animateLayoutChanges: e = yx, attributes: n, disabled: s, data: a, getNewIndex: o = xx, id: r, strategy: i, resizeObserverConfig: c, transition: l = wx } = t; const { items: u, containerId: d, activeIndex: m, disabled: f, disableTransforms: h, sortedRects: g, overIndex: b, useDragOverlay: x, strategy: v } = Nt(dp), w = Ax(s, f), E = u.indexOf(r), _ = de(() => S({ sortable: { containerId: d, index: E, items: u } }, a), [d, a, E, u]), k = de(() => u.slice(u.indexOf(r)), [u, r]), { rect: M, node: y, isOver: T, setNodeRef: D } = tx({ id: r, data: _, disabled: w.droppable, resizeObserverConfig: S({ updateMeasurementsFor: k }, c) }), { active: C, activatorEvent: L, activeNodeRect: R, attributes: A, setNodeRef: I, listeners: O, isDragging: B, over: j, setActivatorNodeRef: G, transform: ke } = Zv({ id: r, data: _, attributes: S(S({}, _x), n), disabled: w.draggable }), Re = Rb(D, I), ve = !!C, _e = ve && !h && Os(m) && Os(b), W = !x && B, le = W && _e ? ke : null, K = i != null ? i : v, H = _e ? le != null ? le : K({ rects: g, activeNodeRect: R, activeIndex: m, overIndex: b, index: E }) : null, me = Os(m) && Os(b) ? o({ id: r, items: u, activeIndex: m, overIndex: b }) : E, V = C == null ? void 0 : C.id, $ = J({ activeId: V, items: u, newIndex: me, containerId: d }), He = u !== $.current.items, pt = e({ active: C, containerId: d, isDragging: B, isSorting: ve, id: r, index: E, items: u, newIndex: $.current.newIndex, previousItems: $.current.items, previousContainerId: $.current.containerId, transition: l, wasDragging: $.current.activeId != null }), sn = Cx({ disabled: !pt, index: E, node: y, rect: M }); return U(() => { ve && $.current.newIndex !== me && ($.current.newIndex = me), d !== $.current.containerId && ($.current.containerId = d), u !== $.current.items && ($.current.items = u) }, [ve, me, d, u]), U(() => { if (V === $.current.activeId) return; if (V && !$.current.activeId) { $.current.activeId = V; return } const an = setTimeout(() => { $.current.activeId = V }, 50); return () => clearTimeout(an) }, [V]), { active: C, activeIndex: m, attributes: A, data: _, rect: M, index: E, newIndex: me, items: u, isOver: T, isSorting: ve, isDragging: B, listeners: O, node: y, overIndex: b, over: j, setNodeRef: Re, setActivatorNodeRef: G, setDroppableNodeRef: D, setDraggableNodeRef: I, transform: sn != null ? sn : H, transition: At() }; function At() { if (sn || He && $.current.newIndex === E) return kx; if (!(W && !Na(L) || !l) && (ve || pt)) return Ht.Transition.toString(P(S({}, l), { property: mp })) } } function Ax(t, e) { var n, s; return typeof t == "boolean" ? { draggable: t, droppable: !1 } : { draggable: (n = t == null ? void 0 : t.draggable) != null ? n : e.draggable, droppable: (s = t == null ? void 0 : t.droppable) != null ? s : e.droppable } } function la(t) { if (!t) return !1; const e = t.data.current; return !!(e && "sortable" in e && typeof e.sortable == "object" && "containerId" in e.sortable && "items" in e.sortable && "index" in e.sortable) } const Sx = [te.Down, te.Right, te.Up, te.Left], Tx = (t, e) => { let { context: { active: n, collisionRect: s, droppableRects: a, droppableContainers: o, over: r, scrollableAncestors: i } } = e; if (Sx.includes(t.code)) { if (t.preventDefault(), !n || !s) return; const c = []; o.getEnabled().forEach(d => { if (!d || d != null && d.disabled) return; const m = a.get(d.id); if (m) switch (t.code) { case te.Down: s.top < m.top && c.push(d); break; case te.Up: s.top > m.top && c.push(d); break; case te.Left: s.left > m.left && c.push(d); break; case te.Right: s.left < m.left && c.push(d); break } }); const l = tv({ active: n, collisionRect: s, droppableRects: a, droppableContainers: c, pointerCoordinates: null }); let u = Ju(l, "id"); if (u === (r == null ? void 0 : r.id) && l.length > 1 && (u = l[1].id), u != null) { const d = o.get(n.id), m = o.get(u), f = m ? a.get(m.id) : null, h = m == null ? void 0 : m.node.current; if (h && f && d && m) { const b = Ma(h).some((k, M) => i[M] !== k), x = fp(d, m), v = Dx(d, m), w = b || !x ? { x: 0, y: 0 } : { x: v ? s.width - f.width : 0, y: v ? s.height - f.height : 0 }, E = { x: f.left, y: f.top }; return w.x && w.y ? E : cs(E, w) } } } }; function fp(t, e) { return !la(t) || !la(e) ? !1 : t.data.current.sortable.containerId === e.data.current.sortable.containerId } function Dx(t, e) { return !la(t) || !la(e) || !fp(t, e) ? !1 : t.data.current.sortable.index < e.data.current.sortable.index } const hp = Qt.create({ name: "heading", addOptions() { return { levels: [1, 2, 3, 4, 5, 6], HTMLAttributes: {} } }, content: "inline*", group: "block", defining: !0, addAttributes() { return { level: { default: 1, rendered: !1 } } }, parseHTML() { return this.options.levels.map(t => ({ tag: `h${t}`, attrs: { level: t } })) }, renderHTML({ node: t, HTMLAttributes: e }) { return [`h${this.options.levels.includes(t.attrs.level)?t.attrs.level:this.options.levels[0]}`, en(this.options.HTMLAttributes, e), 0] }, addCommands() { return { setHeading: t => ({ commands: e }) => this.options.levels.includes(t.level) ? e.setNode(this.name, t) : !1, toggleHeading: t => ({ commands: e }) => this.options.levels.includes(t.level) ? e.toggleNode(this.name, "paragraph", t) : !1 } }, addKeyboardShortcuts() { return this.options.levels.reduce((t, e) => P(S({}, t), { [`Mod-Alt-${e}`]: () => this.editor.commands.toggleHeading({ level: e }) }), {}) }, addInputRules() { return this.options.levels.map(t => uh({ find: new RegExp(`^(#{1,${t}})\\s$`), type: this.type, getAttributes: { level: t } })) } }), Pr = Qt.create({ name: "horizontalRule", addOptions() { return { HTMLAttributes: {} } }, group: "block", parseHTML() { return [{ tag: "hr" }] }, renderHTML({ HTMLAttributes: t }) { return ["hr", en(this.options.HTMLAttributes, t)] }, addCommands() { return { setHorizontalRule: () => ({ chain: t, state: e }) => { const { $to: n } = e.selection, s = t(); return n.parentOffset === 0 ? s.insertContentAt(Math.max(n.pos - 2, 0), { type: this.name }) : s.insertContent({ type: this.name }), s.command(({ tr: a, dispatch: o }) => { var r; if (o) { const { $to: i } = a.selection, c = i.end(); if (i.nodeAfter) i.nodeAfter.isTextblock ? a.setSelection(Ee.create(a.doc, i.pos + 1)) : i.nodeAfter.isBlock ? a.setSelection(Je.create(a.doc, i.pos)) : a.setSelection(Ee.create(a.doc, i.pos)); else { const l = (r = i.parent.type.contentMatch.defaultType) === null || r === void 0 ? void 0 : r.create(); l && (a.insert(c, l), a.setSelection(Ee.create(a.doc, c + 1))) } a.scrollIntoView() } return !0 }).run() } } }, addInputRules() { return [iu({ find: /^(?:---|—-|___\s|\*\*\*\s)$/, type: this.type })] } }), gp = cu.create({ name: "subscript", addOptions() { return { HTMLAttributes: {} } }, parseHTML() { return [{ tag: "sub" }, { style: "vertical-align", getAttrs(t) { return t !== "sub" ? !1 : null } }] }, renderHTML({ HTMLAttributes: t }) { return ["sub", en(this.options.HTMLAttributes, t), 0] }, addCommands() { return { setSubscript: () => ({ commands: t }) => t.setMark(this.name), toggleSubscript: () => ({ commands: t }) => t.toggleMark(this.name), unsetSubscript: () => ({ commands: t }) => t.unsetMark(this.name) } }, addKeyboardShortcuts() { return { "Mod-,": () => this.editor.commands.toggleSubscript() } } }), bp = cu.create({ name: "superscript", addOptions() { return { HTMLAttributes: {} } }, parseHTML() { return [{ tag: "sup" }, { style: "vertical-align", getAttrs(t) { return t !== "super" ? !1 : null } }] }, renderHTML({ HTMLAttributes: t }) { return ["sup", en(this.options.HTMLAttributes, t), 0] }, addCommands() { return { setSuperscript: () => ({ commands: t }) => t.setMark(this.name), toggleSuperscript: () => ({ commands: t }) => t.toggleMark(this.name), unsetSuperscript: () => ({ commands: t }) => t.unsetMark(this.name) } }, addKeyboardShortcuts() { return { "Mod-.": () => this.editor.commands.toggleSuperscript() } } }); var oe = {}; const Ix = "Á", Nx = "á", Mx = "Ă", Ox = "ă", Lx = "∾", Rx = "∿", Px = "∾̳", Bx = "Â", zx = "â", qx = "´", Fx = "А", jx = "а", $x = "Æ", Ux = "æ", Vx = "⁡", Hx = "𝔄", Gx = "𝔞", Wx = "À", Jx = "à", Yx = "ℵ", Kx = "ℵ", Xx = "Α", Zx = "α", Qx = "Ā", ey = "ā", ty = "⨿", ny = "&", sy = "&", ay = "⩕", oy = "⩓", ry = "∧", iy = "⩜", cy = "⩘", ly = "⩚", uy = "∠", py = "⦤", dy = "∠", my = "⦨", fy = "⦩", hy = "⦪", gy = "⦫", by = "⦬", vy = "⦭", xy = "⦮", yy = "⦯", wy = "∡", ky = "∟", _y = "⊾", Cy = "⦝", Ey = "∢", Ay = "Å", Sy = "⍼", Ty = "Ą", Dy = "ą", Iy = "𝔸", Ny = "𝕒", My = "⩯", Oy = "≈", Ly = "⩰", Ry = "≊", Py = "≋", By = "'", zy = "⁡", qy = "≈", Fy = "≊", jy = "Å", $y = "å", Uy = "𝒜", Vy = "𝒶", Hy = "≔", Gy = "*", Wy = "≈", Jy = "≍", Yy = "Ã", Ky = "ã", Xy = "Ä", Zy = "ä", Qy = "∳", ew = "⨑", tw = "≌", nw = "϶", sw = "‵", aw = "∽", ow = "⋍", rw = "∖", iw = "⫧", cw = "⊽", lw = "⌅", uw = "⌆", pw = "⌅", dw = "⎵", mw = "⎶", fw = "≌", hw = "Б", gw = "б", bw = "„", vw = "∵", xw = "∵", yw = "∵", ww = "⦰", kw = "϶", _w = "ℬ", Cw = "ℬ", Ew = "Β", Aw = "β", Sw = "ℶ", Tw = "≬", Dw = "𝔅", Iw = "𝔟", Nw = "⋂", Mw = "◯", Ow = "⋃", Lw = "⨀", Rw = "⨁", Pw = "⨂", Bw = "⨆", zw = "★", qw = "▽", Fw = "△", jw = "⨄", $w = "⋁", Uw = "⋀", Vw = "⤍", Hw = "⧫", Gw = "▪", Ww = "▴", Jw = "▾", Yw = "◂", Kw = "▸", Xw = "␣", Zw = "▒", Qw = "░", ek = "▓", tk = "█", nk = "=⃥", sk = "≡⃥", ak = "⫭", ok = "⌐", rk = "𝔹", ik = "𝕓", ck = "⊥", lk = "⊥", uk = "⋈", pk = "⧉", dk = "┐", mk = "╕", fk = "╖", hk = "╗", gk = "┌", bk = "╒", vk = "╓", xk = "╔", yk = "─", wk = "═", kk = "┬", _k = "╤", Ck = "╥", Ek = "╦", Ak = "┴", Sk = "╧", Tk = "╨", Dk = "╩", Ik = "⊟", Nk = "⊞", Mk = "⊠", Ok = "┘", Lk = "╛", Rk = "╜", Pk = "╝", Bk = "└", zk = "╘", qk = "╙", Fk = "╚", jk = "│", $k = "║", Uk = "┼", Vk = "╪", Hk = "╫", Gk = "╬", Wk = "┤", Jk = "╡", Yk = "╢", Kk = "╣", Xk = "├", Zk = "╞", Qk = "╟", e0 = "╠", t0 = "‵", n0 = "˘", s0 = "˘", a0 = "¦", o0 = "𝒷", r0 = "ℬ", i0 = "⁏", c0 = "∽", l0 = "⋍", u0 = "⧅", p0 = "\\", d0 = "⟈", m0 = "•", f0 = "•", h0 = "≎", g0 = "⪮", b0 = "≏", v0 = "≎", x0 = "≏", y0 = "Ć", w0 = "ć", k0 = "⩄", _0 = "⩉", C0 = "⩋", E0 = "∩", A0 = "⋒", S0 = "⩇", T0 = "⩀", D0 = "ⅅ", I0 = "∩︀", N0 = "⁁", M0 = "ˇ", O0 = "ℭ", L0 = "⩍", R0 = "Č", P0 = "č", B0 = "Ç", z0 = "ç", q0 = "Ĉ", F0 = "ĉ", j0 = "∰", $0 = "⩌", U0 = "⩐", V0 = "Ċ", H0 = "ċ", G0 = "¸", W0 = "¸", J0 = "⦲", Y0 = "¢", K0 = "·", X0 = "·", Z0 = "𝔠", Q0 = "ℭ", e_ = "Ч", t_ = "ч", n_ = "✓", s_ = "✓", a_ = "Χ", o_ = "χ", r_ = "ˆ", i_ = "≗", c_ = "↺", l_ = "↻", u_ = "⊛", p_ = "⊚", d_ = "⊝", m_ = "⊙", f_ = "®", h_ = "Ⓢ", g_ = "⊖", b_ = "⊕", v_ = "⊗", x_ = "○", y_ = "⧃", w_ = "≗", k_ = "⨐", __ = "⫯", C_ = "⧂", E_ = "∲", A_ = "”", S_ = "’", T_ = "♣", D_ = "♣", I_ = ":", N_ = "∷", M_ = "⩴", O_ = "≔", L_ = "≔", R_ = ",", P_ = "@", B_ = "∁", z_ = "∘", q_ = "∁", F_ = "ℂ", j_ = "≅", $_ = "⩭", U_ = "≡", V_ = "∮", H_ = "∯", G_ = "∮", W_ = "𝕔", J_ = "ℂ", Y_ = "∐", K_ = "∐", X_ = "©", Z_ = "©", Q_ = "℗", e1 = "∳", t1 = "↵", n1 = "✗", s1 = "⨯", a1 = "𝒞", o1 = "𝒸", r1 = "⫏", i1 = "⫑", c1 = "⫐", l1 = "⫒", u1 = "⋯", p1 = "⤸", d1 = "⤵", m1 = "⋞", f1 = "⋟", h1 = "↶", g1 = "⤽", b1 = "⩈", v1 = "⩆", x1 = "≍", y1 = "∪", w1 = "⋓", k1 = "⩊", _1 = "⊍", C1 = "⩅", E1 = "∪︀", A1 = "↷", S1 = "⤼", T1 = "⋞", D1 = "⋟", I1 = "⋎", N1 = "⋏", M1 = "¤", O1 = "↶", L1 = "↷", R1 = "⋎", P1 = "⋏", B1 = "∲", z1 = "∱", q1 = "⌭", F1 = "†", j1 = "‡", $1 = "ℸ", U1 = "↓", V1 = "↡", H1 = "⇓", G1 = "‐", W1 = "⫤", J1 = "⊣", Y1 = "⤏", K1 = "˝", X1 = "Ď", Z1 = "ď", Q1 = "Д", eC = "д", tC = "‡", nC = "⇊", sC = "ⅅ", aC = "ⅆ", oC = "⤑", rC = "⩷", iC = "°", cC = "∇", lC = "Δ", uC = "δ", pC = "⦱", dC = "⥿", mC = "𝔇", fC = "𝔡", hC = "⥥", gC = "⇃", bC = "⇂", vC = "´", xC = "˙", yC = "˝", wC = "`", kC = "˜", _C = "⋄", CC = "⋄", EC = "⋄", AC = "♦", SC = "♦", TC = "¨", DC = "ⅆ", IC = "ϝ", NC = "⋲", MC = "÷", OC = "÷", LC = "⋇", RC = "⋇", PC = "Ђ", BC = "ђ", zC = "⌞", qC = "⌍", FC = "$", jC = "𝔻", $C = "𝕕", UC = "¨", VC = "˙", HC = "⃜", GC = "≐", WC = "≑", JC = "≐", YC = "∸", KC = "∔", XC = "⊡", ZC = "⌆", QC = "∯", eE = "¨", tE = "⇓", nE = "⇐", sE = "⇔", aE = "⫤", oE = "⟸", rE = "⟺", iE = "⟹", cE = "⇒", lE = "⊨", uE = "⇑", pE = "⇕", dE = "∥", mE = "⤓", fE = "↓", hE = "↓", gE = "⇓", bE = "⇵", vE = "̑", xE = "⇊", yE = "⇃", wE = "⇂", kE = "⥐", _E = "⥞", CE = "⥖", EE = "↽", AE = "⥟", SE = "⥗", TE = "⇁", DE = "↧", IE = "⊤", NE = "⤐", ME = "⌟", OE = "⌌", LE = "𝒟", RE = "𝒹", PE = "Ѕ", BE = "ѕ", zE = "⧶", qE = "Đ", FE = "đ", jE = "⋱", $E = "▿", UE = "▾", VE = "⇵", HE = "⥯", GE = "⦦", WE = "Џ", JE = "џ", YE = "⟿", KE = "É", XE = "é", ZE = "⩮", QE = "Ě", eA = "ě", tA = "Ê", nA = "ê", sA = "≖", aA = "≕", oA = "Э", rA = "э", iA = "⩷", cA = "Ė", lA = "ė", uA = "≑", pA = "ⅇ", dA = "≒", mA = "𝔈", fA = "𝔢", hA = "⪚", gA = "È", bA = "è", vA = "⪖", xA = "⪘", yA = "⪙", wA = "∈", kA = "⏧", _A = "ℓ", CA = "⪕", EA = "⪗", AA = "Ē", SA = "ē", TA = "∅", DA = "∅", IA = "◻", NA = "∅", MA = "▫", OA = " ", LA = " ", RA = " ", PA = "Ŋ", BA = "ŋ", zA = " ", qA = "Ę", FA = "ę", jA = "𝔼", $A = "𝕖", UA = "⋕", VA = "⧣", HA = "⩱", GA = "ε", WA = "Ε", JA = "ε", YA = "ϵ", KA = "≖", XA = "≕", ZA = "≂", QA = "⪖", eS = "⪕", tS = "⩵", nS = "=", sS = "≂", aS = "≟", oS = "⇌", rS = "≡", iS = "⩸", cS = "⧥", lS = "⥱", uS = "≓", pS = "ℯ", dS = "ℰ", mS = "≐", fS = "⩳", hS = "≂", gS = "Η", bS = "η", vS = "Ð", xS = "ð", yS = "Ë", wS = "ë", kS = "€", _S = "!", CS = "∃", ES = "∃", AS = "ℰ", SS = "ⅇ", TS = "ⅇ", DS = "≒", IS = "Ф", NS = "ф", MS = "♀", OS = "ffi", LS = "ff", RS = "ffl", PS = "𝔉", BS = "𝔣", zS = "fi", qS = "◼", FS = "▪", jS = "fj", $S = "♭", US = "fl", VS = "▱", HS = "ƒ", GS = "𝔽", WS = "𝕗", JS = "∀", YS = "∀", KS = "⋔", XS = "⫙", ZS = "ℱ", QS = "⨍", eT = "½", tT = "⅓", nT = "¼", sT = "⅕", aT = "⅙", oT = "⅛", rT = "⅔", iT = "⅖", cT = "¾", lT = "⅗", uT = "⅜", pT = "⅘", dT = "⅚", mT = "⅝", fT = "⅞", hT = "⁄", gT = "⌢", bT = "𝒻", vT = "ℱ", xT = "ǵ", yT = "Γ", wT = "γ", kT = "Ϝ", _T = "ϝ", CT = "⪆", ET = "Ğ", AT = "ğ", ST = "Ģ", TT = "Ĝ", DT = "ĝ", IT = "Г", NT = "г", MT = "Ġ", OT = "ġ", LT = "≥", RT = "≧", PT = "⪌", BT = "⋛", zT = "≥", qT = "≧", FT = "⩾", jT = "⪩", $T = "⩾", UT = "⪀", VT = "⪂", HT = "⪄", GT = "⋛︀", WT = "⪔", JT = "𝔊", YT = "𝔤", KT = "≫", XT = "⋙", ZT = "⋙", QT = "ℷ", e2 = "Ѓ", t2 = "ѓ", n2 = "⪥", s2 = "≷", a2 = "⪒", o2 = "⪤", r2 = "⪊", i2 = "⪊", c2 = "⪈", l2 = "≩", u2 = "⪈", p2 = "≩", d2 = "⋧", m2 = "𝔾", f2 = "𝕘", h2 = "`", g2 = "≥", b2 = "⋛", v2 = "≧", x2 = "⪢", y2 = "≷", w2 = "⩾", k2 = "≳", _2 = "𝒢", C2 = "ℊ", E2 = "≳", A2 = "⪎", S2 = "⪐", T2 = "⪧", D2 = "⩺", I2 = ">", N2 = ">", M2 = "≫", O2 = "⋗", L2 = "⦕", R2 = "⩼", P2 = "⪆", B2 = "⥸", z2 = "⋗", q2 = "⋛", F2 = "⪌", j2 = "≷", $2 = "≳", U2 = "≩︀", V2 = "≩︀", H2 = "ˇ", G2 = " ", W2 = "½", J2 = "ℋ", Y2 = "Ъ", K2 = "ъ", X2 = "⥈", Z2 = "↔", Q2 = "⇔", eD = "↭", tD = "^", nD = "ℏ", sD = "Ĥ", aD = "ĥ", oD = "♥", rD = "♥", iD = "…", cD = "⊹", lD = "𝔥", uD = "ℌ", pD = "ℋ", dD = "⤥", mD = "⤦", fD = "⇿", hD = "∻", gD = "↩", bD = "↪", vD = "𝕙", xD = "ℍ", yD = "―", wD = "─", kD = "𝒽", _D = "ℋ", CD = "ℏ", ED = "Ħ", AD = "ħ", SD = "≎", TD = "≏", DD = "⁃", ID = "‐", ND = "Í", MD = "í", OD = "⁣", LD = "Î", RD = "î", PD = "И", BD = "и", zD = "İ", qD = "Е", FD = "е", jD = "¡", $D = "⇔", UD = "𝔦", VD = "ℑ", HD = "Ì", GD = "ì", WD = "ⅈ", JD = "⨌", YD = "∭", KD = "⧜", XD = "℩", ZD = "IJ", QD = "ij", eI = "Ī", tI = "ī", nI = "ℑ", sI = "ⅈ", aI = "ℐ", oI = "ℑ", rI = "ı", iI = "ℑ", cI = "⊷", lI = "Ƶ", uI = "⇒", pI = "℅", dI = "∞", mI = "⧝", fI = "ı", hI = "⊺", gI = "∫", bI = "∬", vI = "ℤ", xI = "∫", yI = "⊺", wI = "⋂", kI = "⨗", _I = "⨼", CI = "⁣", EI = "⁢", AI = "Ё", SI = "ё", TI = "Į", DI = "į", II = "𝕀", NI = "𝕚", MI = "Ι", OI = "ι", LI = "⨼", RI = "¿", PI = "𝒾", BI = "ℐ", zI = "∈", qI = "⋵", FI = "⋹", jI = "⋴", $I = "⋳", UI = "∈", VI = "⁢", HI = "Ĩ", GI = "ĩ", WI = "І", JI = "і", YI = "Ï", KI = "ï", XI = "Ĵ", ZI = "ĵ", QI = "Й", eN = "й", tN = "𝔍", nN = "𝔧", sN = "ȷ", aN = "𝕁", oN = "𝕛", rN = "𝒥", iN = "𝒿", cN = "Ј", lN = "ј", uN = "Є", pN = "є", dN = "Κ", mN = "κ", fN = "ϰ", hN = "Ķ", gN = "ķ", bN = "К", vN = "к", xN = "𝔎", yN = "𝔨", wN = "ĸ", kN = "Х", _N = "х", CN = "Ќ", EN = "ќ", AN = "𝕂", SN = "𝕜", TN = "𝒦", DN = "𝓀", IN = "⇚", NN = "Ĺ", MN = "ĺ", ON = "⦴", LN = "ℒ", RN = "Λ", PN = "λ", BN = "⟨", zN = "⟪", qN = "⦑", FN = "⟨", jN = "⪅", $N = "ℒ", UN = "«", VN = "⇤", HN = "⤟", GN = "←", WN = "↞", JN = "⇐", YN = "⤝", KN = "↩", XN = "↫", ZN = "⤹", QN = "⥳", eM = "↢", tM = "⤙", nM = "⤛", sM = "⪫", aM = "⪭", oM = "⪭︀", rM = "⤌", iM = "⤎", cM = "❲", lM = "{", uM = "[", pM = "⦋", dM = "⦏", mM = "⦍", fM = "Ľ", hM = "ľ", gM = "Ļ", bM = "ļ", vM = "⌈", xM = "{", yM = "Л", wM = "л", kM = "⤶", _M = "“", CM = "„", EM = "⥧", AM = "⥋", SM = "↲", TM = "≤", DM = "≦", IM = "⟨", NM = "⇤", MM = "←", OM = "←", LM = "⇐", RM = "⇆", PM = "↢", BM = "⌈", zM = "⟦", qM = "⥡", FM = "⥙", jM = "⇃", $M = "⌊", UM = "↽", VM = "↼", HM = "⇇", GM = "↔", WM = "↔", JM = "⇔", YM = "⇆", KM = "⇋", XM = "↭", ZM = "⥎", QM = "↤", eO = "⊣", tO = "⥚", nO = "⋋", sO = "⧏", aO = "⊲", oO = "⊴", rO = "⥑", iO = "⥠", cO = "⥘", lO = "↿", uO = "⥒", pO = "↼", dO = "⪋", mO = "⋚", fO = "≤", hO = "≦", gO = "⩽", bO = "⪨", vO = "⩽", xO = "⩿", yO = "⪁", wO = "⪃", kO = "⋚︀", _O = "⪓", CO = "⪅", EO = "⋖", AO = "⋚", SO = "⪋", TO = "⋚", DO = "≦", IO = "≶", NO = "≶", MO = "⪡", OO = "≲", LO = "⩽", RO = "≲", PO = "⥼", BO = "⌊", zO = "𝔏", qO = "𝔩", FO = "≶", jO = "⪑", $O = "⥢", UO = "↽", VO = "↼", HO = "⥪", GO = "▄", WO = "Љ", JO = "љ", YO = "⇇", KO = "≪", XO = "⋘", ZO = "⌞", QO = "⇚", eL = "⥫", tL = "◺", nL = "Ŀ", sL = "ŀ", aL = "⎰", oL = "⎰", rL = "⪉", iL = "⪉", cL = "⪇", lL = "≨", uL = "⪇", pL = "≨", dL = "⋦", mL = "⟬", fL = "⇽", hL = "⟦", gL = "⟵", bL = "⟵", vL = "⟸", xL = "⟷", yL = "⟷", wL = "⟺", kL = "⟼", _L = "⟶", CL = "⟶", EL = "⟹", AL = "↫", SL = "↬", TL = "⦅", DL = "𝕃", IL = "𝕝", NL = "⨭", ML = "⨴", OL = "∗", LL = "_", RL = "↙", PL = "↘", BL = "◊", zL = "◊", qL = "⧫", FL = "(", jL = "⦓", $L = "⇆", UL = "⌟", VL = "⇋", HL = "⥭", GL = "‎", WL = "⊿", JL = "‹", YL = "𝓁", KL = "ℒ", XL = "↰", ZL = "↰", QL = "≲", e3 = "⪍", t3 = "⪏", n3 = "[", s3 = "‘", a3 = "‚", o3 = "Ł", r3 = "ł", i3 = "⪦", c3 = "⩹", l3 = "<", u3 = "<", p3 = "≪", d3 = "⋖", m3 = "⋋", f3 = "⋉", h3 = "⥶", g3 = "⩻", b3 = "◃", v3 = "⊴", x3 = "◂", y3 = "⦖", w3 = "⥊", k3 = "⥦", _3 = "≨︀", C3 = "≨︀", E3 = "¯", A3 = "♂", S3 = "✠", T3 = "✠", D3 = "↦", I3 = "↦", N3 = "↧", M3 = "↤", O3 = "↥", L3 = "▮", R3 = "⨩", P3 = "М", B3 = "м", z3 = "—", q3 = "∺", F3 = "∡", j3 = " ", $3 = "ℳ", U3 = "𝔐", V3 = "𝔪", H3 = "℧", G3 = "µ", W3 = "*", J3 = "⫰", Y3 = "∣", K3 = "·", X3 = "⊟", Z3 = "−", Q3 = "∸", eR = "⨪", tR = "∓", nR = "⫛", sR = "…", aR = "∓", oR = "⊧", rR = "𝕄", iR = "𝕞", cR = "∓", lR = "𝓂", uR = "ℳ", pR = "∾", dR = "Μ", mR = "μ", fR = "⊸", hR = "⊸", gR = "∇", bR = "Ń", vR = "ń", xR = "∠⃒", yR = "≉", wR = "⩰̸", kR = "≋̸", _R = "ʼn", CR = "≉", ER = "♮", AR = "ℕ", SR = "♮", TR = " ", DR = "≎̸", IR = "≏̸", NR = "⩃", MR = "Ň", OR = "ň", LR = "Ņ", RR = "ņ", PR = "≇", BR = "⩭̸", zR = "⩂", qR = "Н", FR = "н", jR = "–", $R = "⤤", UR = "↗", VR = "⇗", HR = "↗", GR = "≠", WR = "≐̸", JR = "​", YR = "​", KR = "​", XR = "​", ZR = "≢", QR = "⤨", eP = "≂̸", tP = "≫", nP = "≪", sP = ` `, aP = "∄", oP = "∄", rP = "𝔑", iP = "𝔫", cP = "≧̸", lP = "≱", uP = "≱", pP = "≧̸", dP = "⩾̸", mP = "⩾̸", fP = "⋙̸", hP = "≵", gP = "≫⃒", bP = "≯", vP = "≯", xP = "≫̸", yP = "↮", wP = "⇎", kP = "⫲", _P = "∋", CP = "⋼", EP = "⋺", AP = "∋", SP = "Њ", TP = "њ", DP = "↚", IP = "⇍", NP = "‥", MP = "≦̸", OP = "≰", LP = "↚", RP = "⇍", PP = "↮", BP = "⇎", zP = "≰", qP = "≦̸", FP = "⩽̸", jP = "⩽̸", $P = "≮", UP = "⋘̸", VP = "≴", HP = "≪⃒", GP = "≮", WP = "⋪", JP = "⋬", YP = "≪̸", KP = "∤", XP = "⁠", ZP = " ", QP = "𝕟", e4 = "ℕ", t4 = "⫬", n4 = "¬", s4 = "≢", a4 = "≭", o4 = "∦", r4 = "∉", i4 = "≠", c4 = "≂̸", l4 = "∄", u4 = "≯", p4 = "≱", d4 = "≧̸", m4 = "≫̸", f4 = "≹", h4 = "⩾̸", g4 = "≵", b4 = "≎̸", v4 = "≏̸", x4 = "∉", y4 = "⋵̸", w4 = "⋹̸", k4 = "∉", _4 = "⋷", C4 = "⋶", E4 = "⧏̸", A4 = "⋪", S4 = "⋬", T4 = "≮", D4 = "≰", I4 = "≸", N4 = "≪̸", M4 = "⩽̸", O4 = "≴", L4 = "⪢̸", R4 = "⪡̸", P4 = "∌", B4 = "∌", z4 = "⋾", q4 = "⋽", F4 = "⊀", j4 = "⪯̸", $4 = "⋠", U4 = "∌", V4 = "⧐̸", H4 = "⋫", G4 = "⋭", W4 = "⊏̸", J4 = "⋢", Y4 = "⊐̸", K4 = "⋣", X4 = "⊂⃒", Z4 = "⊈", Q4 = "⊁", e6 = "⪰̸", t6 = "⋡", n6 = "≿̸", s6 = "⊃⃒", a6 = "⊉", o6 = "≁", r6 = "≄", i6 = "≇", c6 = "≉", l6 = "∤", u6 = "∦", p6 = "∦", d6 = "⫽⃥", m6 = "∂̸", f6 = "⨔", h6 = "⊀", g6 = "⋠", b6 = "⊀", v6 = "⪯̸", x6 = "⪯̸", y6 = "⤳̸", w6 = "↛", k6 = "⇏", _6 = "↝̸", C6 = "↛", E6 = "⇏", A6 = "⋫", S6 = "⋭", T6 = "⊁", D6 = "⋡", I6 = "⪰̸", N6 = "𝒩", M6 = "𝓃", O6 = "∤", L6 = "∦", R6 = "≁", P6 = "≄", B6 = "≄", z6 = "∤", q6 = "∦", F6 = "⋢", j6 = "⋣", $6 = "⊄", U6 = "⫅̸", V6 = "⊈", H6 = "⊂⃒", G6 = "⊈", W6 = "⫅̸", J6 = "⊁", Y6 = "⪰̸", K6 = "⊅", X6 = "⫆̸", Z6 = "⊉", Q6 = "⊃⃒", eB = "⊉", tB = "⫆̸", nB = "≹", sB = "Ñ", aB = "ñ", oB = "≸", rB = "⋪", iB = "⋬", cB = "⋫", lB = "⋭", uB = "Ν", pB = "ν", dB = "#", mB = "№", fB = " ", hB = "≍⃒", gB = "⊬", bB = "⊭", vB = "⊮", xB = "⊯", yB = "≥⃒", wB = ">⃒", kB = "⤄", _B = "⧞", CB = "⤂", EB = "≤⃒", AB = "<⃒", SB = "⊴⃒", TB = "⤃", DB = "⊵⃒", IB = "∼⃒", NB = "⤣", MB = "↖", OB = "⇖", LB = "↖", RB = "⤧", PB = "Ó", BB = "ó", zB = "⊛", qB = "Ô", FB = "ô", jB = "⊚", $B = "О", UB = "о", VB = "⊝", HB = "Ő", GB = "ő", WB = "⨸", JB = "⊙", YB = "⦼", KB = "Œ", XB = "œ", ZB = "⦿", QB = "𝔒", e5 = "𝔬", t5 = "˛", n5 = "Ò", s5 = "ò", a5 = "⧁", o5 = "⦵", r5 = "Ω", i5 = "∮", c5 = "↺", l5 = "⦾", u5 = "⦻", p5 = "‾", d5 = "⧀", m5 = "Ō", f5 = "ō", h5 = "Ω", g5 = "ω", b5 = "Ο", v5 = "ο", x5 = "⦶", y5 = "⊖", w5 = "𝕆", k5 = "𝕠", _5 = "⦷", C5 = "“", E5 = "‘", A5 = "⦹", S5 = "⊕", T5 = "↻", D5 = "⩔", I5 = "∨", N5 = "⩝", M5 = "ℴ", O5 = "ℴ", L5 = "ª", R5 = "º", P5 = "⊶", B5 = "⩖", z5 = "⩗", q5 = "⩛", F5 = "Ⓢ", j5 = "𝒪", $5 = "ℴ", U5 = "Ø", V5 = "ø", H5 = "⊘", G5 = "Õ", W5 = "õ", J5 = "⨶", Y5 = "⨷", K5 = "⊗", X5 = "Ö", Z5 = "ö", Q5 = "⌽", ez = "‾", tz = "⏞", nz = "⎴", sz = "⏜", az = "¶", oz = "∥", rz = "∥", iz = "⫳", cz = "⫽", lz = "∂", uz = "∂", pz = "П", dz = "п", mz = "%", fz = ".", hz = "‰", gz = "⊥", bz = "‱", vz = "𝔓", xz = "𝔭", yz = "Φ", wz = "φ", kz = "ϕ", _z = "ℳ", Cz = "☎", Ez = "Π", Az = "π", Sz = "⋔", Tz = "ϖ", Dz = "ℏ", Iz = "ℎ", Nz = "ℏ", Mz = "⨣", Oz = "⊞", Lz = "⨢", Rz = "+", Pz = "∔", Bz = "⨥", zz = "⩲", qz = "±", Fz = "±", jz = "⨦", $z = "⨧", Uz = "±", Vz = "ℌ", Hz = "⨕", Gz = "𝕡", Wz = "ℙ", Jz = "£", Yz = "⪷", Kz = "⪻", Xz = "≺", Zz = "≼", Qz = "⪷", eq = "≺", tq = "≼", nq = "≺", sq = "⪯", aq = "≼", oq = "≾", rq = "⪯", iq = "⪹", cq = "⪵", lq = "⋨", uq = "⪯", pq = "⪳", dq = "≾", mq = "′", fq = "″", hq = "ℙ", gq = "⪹", bq = "⪵", vq = "⋨", xq = "∏", yq = "∏", wq = "⌮", kq = "⌒", _q = "⌓", Cq = "∝", Eq = "∝", Aq = "∷", Sq = "∝", Tq = "≾", Dq = "⊰", Iq = "𝒫", Nq = "𝓅", Mq = "Ψ", Oq = "ψ", Lq = " ", Rq = "𝔔", Pq = "𝔮", Bq = "⨌", zq = "𝕢", qq = "ℚ", Fq = "⁗", jq = "𝒬", $q = "𝓆", Uq = "ℍ", Vq = "⨖", Hq = "?", Gq = "≟", Wq = '"', Jq = '"', Yq = "⇛", Kq = "∽̱", Xq = "Ŕ", Zq = "ŕ", Qq = "√", e8 = "⦳", t8 = "⟩", n8 = "⟫", s8 = "⦒", a8 = "⦥", o8 = "⟩", r8 = "»", i8 = "⥵", c8 = "⇥", l8 = "⤠", u8 = "⤳", p8 = "→", d8 = "↠", m8 = "⇒", f8 = "⤞", h8 = "↪", g8 = "↬", b8 = "⥅", v8 = "⥴", x8 = "⤖", y8 = "↣", w8 = "↝", k8 = "⤚", _8 = "⤜", C8 = "∶", E8 = "ℚ", A8 = "⤍", S8 = "⤏", T8 = "⤐", D8 = "❳", I8 = "}", N8 = "]", M8 = "⦌", O8 = "⦎", L8 = "⦐", R8 = "Ř", P8 = "ř", B8 = "Ŗ", z8 = "ŗ", q8 = "⌉", F8 = "}", j8 = "Р", $8 = "р", U8 = "⤷", V8 = "⥩", H8 = "”", G8 = "”", W8 = "↳", J8 = "ℜ", Y8 = "ℛ", K8 = "ℜ", X8 = "ℝ", Z8 = "ℜ", Q8 = "▭", eF = "®", tF = "®", nF = "∋", sF = "⇋", aF = "⥯", oF = "⥽", rF = "⌋", iF = "𝔯", cF = "ℜ", lF = "⥤", uF = "⇁", pF = "⇀", dF = "⥬", mF = "Ρ", fF = "ρ", hF = "ϱ", gF = "⟩", bF = "⇥", vF = "→", xF = "→", yF = "⇒", wF = "⇄", kF = "↣", _F = "⌉", CF = "⟧", EF = "⥝", AF = "⥕", SF = "⇂", TF = "⌋", DF = "⇁", IF = "⇀", NF = "⇄", MF = "⇌", OF = "⇉", LF = "↝", RF = "↦", PF = "⊢", BF = "⥛", zF = "⋌", qF = "⧐", FF = "⊳", jF = "⊵", $F = "⥏", UF = "⥜", VF = "⥔", HF = "↾", GF = "⥓", WF = "⇀", JF = "˚", YF = "≓", KF = "⇄", XF = "⇌", ZF = "‏", QF = "⎱", e7 = "⎱", t7 = "⫮", n7 = "⟭", s7 = "⇾", a7 = "⟧", o7 = "⦆", r7 = "𝕣", i7 = "ℝ", c7 = "⨮", l7 = "⨵", u7 = "⥰", p7 = ")", d7 = "⦔", m7 = "⨒", f7 = "⇉", h7 = "⇛", g7 = "›", b7 = "𝓇", v7 = "ℛ", x7 = "↱", y7 = "↱", w7 = "]", k7 = "’", _7 = "’", C7 = "⋌", E7 = "⋊", A7 = "▹", S7 = "⊵", T7 = "▸", D7 = "⧎", I7 = "⧴", N7 = "⥨", M7 = "℞", O7 = "Ś", L7 = "ś", R7 = "‚", P7 = "⪸", B7 = "Š", z7 = "š", q7 = "⪼", F7 = "≻", j7 = "≽", $7 = "⪰", U7 = "⪴", V7 = "Ş", H7 = "ş", G7 = "Ŝ", W7 = "ŝ", J7 = "⪺", Y7 = "⪶", K7 = "⋩", X7 = "⨓", Z7 = "≿", Q7 = "С", ej = "с", tj = "⊡", nj = "⋅", sj = "⩦", aj = "⤥", oj = "↘", rj = "⇘", ij = "↘", cj = "§", lj = ";", uj = "⤩", pj = "∖", dj = "∖", mj = "✶", fj = "𝔖", hj = "𝔰", gj = "⌢", bj = "♯", vj = "Щ", xj = "щ", yj = "Ш", wj = "ш", kj = "↓", _j = "←", Cj = "∣", Ej = "∥", Aj = "→", Sj = "↑", Tj = "­", Dj = "Σ", Ij = "σ", Nj = "ς", Mj = "ς", Oj = "∼", Lj = "⩪", Rj = "≃", Pj = "≃", Bj = "⪞", zj = "⪠", qj = "⪝", Fj = "⪟", jj = "≆", $j = "⨤", Uj = "⥲", Vj = "←", Hj = "∘", Gj = "∖", Wj = "⨳", Jj = "⧤", Yj = "∣", Kj = "⌣", Xj = "⪪", Zj = "⪬", Qj = "⪬︀", e9 = "Ь", t9 = "ь", n9 = "⌿", s9 = "⧄", a9 = "/", o9 = "𝕊", r9 = "𝕤", i9 = "♠", c9 = "♠", l9 = "∥", u9 = "⊓", p9 = "⊓︀", d9 = "⊔", m9 = "⊔︀", f9 = "√", h9 = "⊏", g9 = "⊑", b9 = "⊏", v9 = "⊑", x9 = "⊐", y9 = "⊒", w9 = "⊐", k9 = "⊒", _9 = "□", C9 = "□", E9 = "⊓", A9 = "⊏", S9 = "⊑", T9 = "⊐", D9 = "⊒", I9 = "⊔", N9 = "▪", M9 = "□", O9 = "▪", L9 = "→", R9 = "𝒮", P9 = "𝓈", B9 = "∖", z9 = "⌣", q9 = "⋆", F9 = "⋆", j9 = "☆", $9 = "★", U9 = "ϵ", V9 = "ϕ", H9 = "¯", G9 = "⊂", W9 = "⋐", J9 = "⪽", Y9 = "⫅", K9 = "⊆", X9 = "⫃", Z9 = "⫁", Q9 = "⫋", e$ = "⊊", t$ = "⪿", n$ = "⥹", s$ = "⊂", a$ = "⋐", o$ = "⊆", r$ = "⫅", i$ = "⊆", c$ = "⊊", l$ = "⫋", u$ = "⫇", p$ = "⫕", d$ = "⫓", m$ = "⪸", f$ = "≻", h$ = "≽", g$ = "≻", b$ = "⪰", v$ = "≽", x$ = "≿", y$ = "⪰", w$ = "⪺", k$ = "⪶", _$ = "⋩", C$ = "≿", E$ = "∋", A$ = "∑", S$ = "∑", T$ = "♪", D$ = "¹", I$ = "²", N$ = "³", M$ = "⊃", O$ = "⋑", L$ = "⪾", R$ = "⫘", P$ = "⫆", B$ = "⊇", z$ = "⫄", q$ = "⊃", F$ = "⊇", j$ = "⟉", $$ = "⫗", U$ = "⥻", V$ = "⫂", H$ = "⫌", G$ = "⊋", W$ = "⫀", J$ = "⊃", Y$ = "⋑", K$ = "⊇", X$ = "⫆", Z$ = "⊋", Q$ = "⫌", eU = "⫈", tU = "⫔", nU = "⫖", sU = "⤦", aU = "↙", oU = "⇙", rU = "↙", iU = "⤪", cU = "ß", lU = " ", uU = "⌖", pU = "Τ", dU = "τ", mU = "⎴", fU = "Ť", hU = "ť", gU = "Ţ", bU = "ţ", vU = "Т", xU = "т", yU = "⃛", wU = "⌕", kU = "𝔗", _U = "𝔱", CU = "∴", EU = "∴", AU = "∴", SU = "Θ", TU = "θ", DU = "ϑ", IU = "ϑ", NU = "≈", MU = "∼", OU = "  ", LU = " ", RU = " ", PU = "≈", BU = "∼", zU = "Þ", qU = "þ", FU = "˜", jU = "∼", $U = "≃", UU = "≅", VU = "≈", HU = "⨱", GU = "⊠", WU = "×", JU = "⨰", YU = "∭", KU = "⤨", XU = "⌶", ZU = "⫱", QU = "⊤", eV = "𝕋", tV = "𝕥", nV = "⫚", sV = "⤩", aV = "‴", oV = "™", rV = "™", iV = "▵", cV = "▿", lV = "◃", uV = "⊴", pV = "≜", dV = "▹", mV = "⊵", fV = "◬", hV = "≜", gV = "⨺", bV = "⃛", vV = "⨹", xV = "⧍", yV = "⨻", wV = "⏢", kV = "𝒯", _V = "𝓉", CV = "Ц", EV = "ц", AV = "Ћ", SV = "ћ", TV = "Ŧ", DV = "ŧ", IV = "≬", NV = "↞", MV = "↠", OV = "Ú", LV = "ú", RV = "↑", PV = "↟", BV = "⇑", zV = "⥉", qV = "Ў", FV = "ў", jV = "Ŭ", $V = "ŭ", UV = "Û", VV = "û", HV = "У", GV = "у", WV = "⇅", JV = "Ű", YV = "ű", KV = "⥮", XV = "⥾", ZV = "𝔘", QV = "𝔲", eH = "Ù", tH = "ù", nH = "⥣", sH = "↿", aH = "↾", oH = "▀", rH = "⌜", iH = "⌜", cH = "⌏", lH = "◸", uH = "Ū", pH = "ū", dH = "¨", mH = "_", fH = "⏟", hH = "⎵", gH = "⏝", bH = "⋃", vH = "⊎", xH = "Ų", yH = "ų", wH = "𝕌", kH = "𝕦", _H = "⤒", CH = "↑", EH = "↑", AH = "⇑", SH = "⇅", TH = "↕", DH = "↕", IH = "⇕", NH = "⥮", MH = "↿", OH = "↾", LH = "⊎", RH = "↖", PH = "↗", BH = "υ", zH = "ϒ", qH = "ϒ", FH = "Υ", jH = "υ", $H = "↥", UH = "⊥", VH = "⇈", HH = "⌝", GH = "⌝", WH = "⌎", JH = "Ů", YH = "ů", KH = "◹", XH = "𝒰", ZH = "𝓊", QH = "⋰", eG = "Ũ", tG = "ũ", nG = "▵", sG = "▴", aG = "⇈", oG = "Ü", rG = "ü", iG = "⦧", cG = "⦜", lG = "ϵ", uG = "ϰ", pG = "∅", dG = "ϕ", mG = "ϖ", fG = "∝", hG = "↕", gG = "⇕", bG = "ϱ", vG = "ς", xG = "⊊︀", yG = "⫋︀", wG = "⊋︀", kG = "⫌︀", _G = "ϑ", CG = "⊲", EG = "⊳", AG = "⫨", SG = "⫫", TG = "⫩", DG = "В", IG = "в", NG = "⊢", MG = "⊨", OG = "⊩", LG = "⊫", RG = "⫦", PG = "⊻", BG = "∨", zG = "⋁", qG = "≚", FG = "⋮", jG = "|", $G = "‖", UG = "|", VG = "‖", HG = "∣", GG = "|", WG = "❘", JG = "≀", YG = " ", KG = "𝔙", XG = "𝔳", ZG = "⊲", QG = "⊂⃒", eW = "⊃⃒", tW = "𝕍", nW = "𝕧", sW = "∝", aW = "⊳", oW = "𝒱", rW = "𝓋", iW = "⫋︀", cW = "⊊︀", lW = "⫌︀", uW = "⊋︀", pW = "⊪", dW = "⦚", mW = "Ŵ", fW = "ŵ", hW = "⩟", gW = "∧", bW = "⋀", vW = "≙", xW = "℘", yW = "𝔚", wW = "𝔴", kW = "𝕎", _W = "𝕨", CW = "℘", EW = "≀", AW = "≀", SW = "𝒲", TW = "𝓌", DW = "⋂", IW = "◯", NW = "⋃", MW = "▽", OW = "𝔛", LW = "𝔵", RW = "⟷", PW = "⟺", BW = "Ξ", zW = "ξ", qW = "⟵", FW = "⟸", jW = "⟼", $W = "⋻", UW = "⨀", VW = "𝕏", HW = "𝕩", GW = "⨁", WW = "⨂", JW = "⟶", YW = "⟹", KW = "𝒳", XW = "𝓍", ZW = "⨆", QW = "⨄", eJ = "△", tJ = "⋁", nJ = "⋀", sJ = "Ý", aJ = "ý", oJ = "Я", rJ = "я", iJ = "Ŷ", cJ = "ŷ", lJ = "Ы", uJ = "ы", pJ = "¥", dJ = "𝔜", mJ = "𝔶", fJ = "Ї", hJ = "ї", gJ = "𝕐", bJ = "𝕪", vJ = "𝒴", xJ = "𝓎", yJ = "Ю", wJ = "ю", kJ = "ÿ", _J = "Ÿ", CJ = "Ź", EJ = "ź", AJ = "Ž", SJ = "ž", TJ = "З", DJ = "з", IJ = "Ż", NJ = "ż", MJ = "ℨ", OJ = "​", LJ = "Ζ", RJ = "ζ", PJ = "𝔷", BJ = "ℨ", zJ = "Ж", qJ = "ж", FJ = "⇝", jJ = "𝕫", $J = "ℤ", UJ = "𝒵", VJ = "𝓏", HJ = "‍", GJ = "‌", WJ = { Aacute: Ix, aacute: Nx, Abreve: Mx, abreve: Ox, ac: Lx, acd: Rx, acE: Px, Acirc: Bx, acirc: zx, acute: qx, Acy: Fx, acy: jx, AElig: $x, aelig: Ux, af: Vx, Afr: Hx, afr: Gx, Agrave: Wx, agrave: Jx, alefsym: Yx, aleph: Kx, Alpha: Xx, alpha: Zx, Amacr: Qx, amacr: ey, amalg: ty, amp: ny, AMP: sy, andand: ay, And: oy, and: ry, andd: iy, andslope: cy, andv: ly, ang: uy, ange: py, angle: dy, angmsdaa: my, angmsdab: fy, angmsdac: hy, angmsdad: gy, angmsdae: by, angmsdaf: vy, angmsdag: xy, angmsdah: yy, angmsd: wy, angrt: ky, angrtvb: _y, angrtvbd: Cy, angsph: Ey, angst: Ay, angzarr: Sy, Aogon: Ty, aogon: Dy, Aopf: Iy, aopf: Ny, apacir: My, ap: Oy, apE: Ly, ape: Ry, apid: Py, apos: By, ApplyFunction: zy, approx: qy, approxeq: Fy, Aring: jy, aring: $y, Ascr: Uy, ascr: Vy, Assign: Hy, ast: Gy, asymp: Wy, asympeq: Jy, Atilde: Yy, atilde: Ky, Auml: Xy, auml: Zy, awconint: Qy, awint: ew, backcong: tw, backepsilon: nw, backprime: sw, backsim: aw, backsimeq: ow, Backslash: rw, Barv: iw, barvee: cw, barwed: lw, Barwed: uw, barwedge: pw, bbrk: dw, bbrktbrk: mw, bcong: fw, Bcy: hw, bcy: gw, bdquo: bw, becaus: vw, because: xw, Because: yw, bemptyv: ww, bepsi: kw, bernou: _w, Bernoullis: Cw, Beta: Ew, beta: Aw, beth: Sw, between: Tw, Bfr: Dw, bfr: Iw, bigcap: Nw, bigcirc: Mw, bigcup: Ow, bigodot: Lw, bigoplus: Rw, bigotimes: Pw, bigsqcup: Bw, bigstar: zw, bigtriangledown: qw, bigtriangleup: Fw, biguplus: jw, bigvee: $w, bigwedge: Uw, bkarow: Vw, blacklozenge: Hw, blacksquare: Gw, blacktriangle: Ww, blacktriangledown: Jw, blacktriangleleft: Yw, blacktriangleright: Kw, blank: Xw, blk12: Zw, blk14: Qw, blk34: ek, block: tk, bne: nk, bnequiv: sk, bNot: ak, bnot: ok, Bopf: rk, bopf: ik, bot: ck, bottom: lk, bowtie: uk, boxbox: pk, boxdl: dk, boxdL: mk, boxDl: fk, boxDL: hk, boxdr: gk, boxdR: bk, boxDr: vk, boxDR: xk, boxh: yk, boxH: wk, boxhd: kk, boxHd: _k, boxhD: Ck, boxHD: Ek, boxhu: Ak, boxHu: Sk, boxhU: Tk, boxHU: Dk, boxminus: Ik, boxplus: Nk, boxtimes: Mk, boxul: Ok, boxuL: Lk, boxUl: Rk, boxUL: Pk, boxur: Bk, boxuR: zk, boxUr: qk, boxUR: Fk, boxv: jk, boxV: $k, boxvh: Uk, boxvH: Vk, boxVh: Hk, boxVH: Gk, boxvl: Wk, boxvL: Jk, boxVl: Yk, boxVL: Kk, boxvr: Xk, boxvR: Zk, boxVr: Qk, boxVR: e0, bprime: t0, breve: n0, Breve: s0, brvbar: a0, bscr: o0, Bscr: r0, bsemi: i0, bsim: c0, bsime: l0, bsolb: u0, bsol: p0, bsolhsub: d0, bull: m0, bullet: f0, bump: h0, bumpE: g0, bumpe: b0, Bumpeq: v0, bumpeq: x0, Cacute: y0, cacute: w0, capand: k0, capbrcup: _0, capcap: C0, cap: E0, Cap: A0, capcup: S0, capdot: T0, CapitalDifferentialD: D0, caps: I0, caret: N0, caron: M0, Cayleys: O0, ccaps: L0, Ccaron: R0, ccaron: P0, Ccedil: B0, ccedil: z0, Ccirc: q0, ccirc: F0, Cconint: j0, ccups: $0, ccupssm: U0, Cdot: V0, cdot: H0, cedil: G0, Cedilla: W0, cemptyv: J0, cent: Y0, centerdot: K0, CenterDot: X0, cfr: Z0, Cfr: Q0, CHcy: e_, chcy: t_, check: n_, checkmark: s_, Chi: a_, chi: o_, circ: r_, circeq: i_, circlearrowleft: c_, circlearrowright: l_, circledast: u_, circledcirc: p_, circleddash: d_, CircleDot: m_, circledR: f_, circledS: h_, CircleMinus: g_, CirclePlus: b_, CircleTimes: v_, cir: x_, cirE: y_, cire: w_, cirfnint: k_, cirmid: __, cirscir: C_, ClockwiseContourIntegral: E_, CloseCurlyDoubleQuote: A_, CloseCurlyQuote: S_, clubs: T_, clubsuit: D_, colon: I_, Colon: N_, Colone: M_, colone: O_, coloneq: L_, comma: R_, commat: P_, comp: B_, compfn: z_, complement: q_, complexes: F_, cong: j_, congdot: $_, Congruent: U_, conint: V_, Conint: H_, ContourIntegral: G_, copf: W_, Copf: J_, coprod: Y_, Coproduct: K_, copy: X_, COPY: Z_, copysr: Q_, CounterClockwiseContourIntegral: e1, crarr: t1, cross: n1, Cross: s1, Cscr: a1, cscr: o1, csub: r1, csube: i1, csup: c1, csupe: l1, ctdot: u1, cudarrl: p1, cudarrr: d1, cuepr: m1, cuesc: f1, cularr: h1, cularrp: g1, cupbrcap: b1, cupcap: v1, CupCap: x1, cup: y1, Cup: w1, cupcup: k1, cupdot: _1, cupor: C1, cups: E1, curarr: A1, curarrm: S1, curlyeqprec: T1, curlyeqsucc: D1, curlyvee: I1, curlywedge: N1, curren: M1, curvearrowleft: O1, curvearrowright: L1, cuvee: R1, cuwed: P1, cwconint: B1, cwint: z1, cylcty: q1, dagger: F1, Dagger: j1, daleth: $1, darr: U1, Darr: V1, dArr: H1, dash: G1, Dashv: W1, dashv: J1, dbkarow: Y1, dblac: K1, Dcaron: X1, dcaron: Z1, Dcy: Q1, dcy: eC, ddagger: tC, ddarr: nC, DD: sC, dd: aC, DDotrahd: oC, ddotseq: rC, deg: iC, Del: cC, Delta: lC, delta: uC, demptyv: pC, dfisht: dC, Dfr: mC, dfr: fC, dHar: hC, dharl: gC, dharr: bC, DiacriticalAcute: vC, DiacriticalDot: xC, DiacriticalDoubleAcute: yC, DiacriticalGrave: wC, DiacriticalTilde: kC, diam: _C, diamond: CC, Diamond: EC, diamondsuit: AC, diams: SC, die: TC, DifferentialD: DC, digamma: IC, disin: NC, div: MC, divide: OC, divideontimes: LC, divonx: RC, DJcy: PC, djcy: BC, dlcorn: zC, dlcrop: qC, dollar: FC, Dopf: jC, dopf: $C, Dot: UC, dot: VC, DotDot: HC, doteq: GC, doteqdot: WC, DotEqual: JC, dotminus: YC, dotplus: KC, dotsquare: XC, doublebarwedge: ZC, DoubleContourIntegral: QC, DoubleDot: eE, DoubleDownArrow: tE, DoubleLeftArrow: nE, DoubleLeftRightArrow: sE, DoubleLeftTee: aE, DoubleLongLeftArrow: oE, DoubleLongLeftRightArrow: rE, DoubleLongRightArrow: iE, DoubleRightArrow: cE, DoubleRightTee: lE, DoubleUpArrow: uE, DoubleUpDownArrow: pE, DoubleVerticalBar: dE, DownArrowBar: mE, downarrow: fE, DownArrow: hE, Downarrow: gE, DownArrowUpArrow: bE, DownBreve: vE, downdownarrows: xE, downharpoonleft: yE, downharpoonright: wE, DownLeftRightVector: kE, DownLeftTeeVector: _E, DownLeftVectorBar: CE, DownLeftVector: EE, DownRightTeeVector: AE, DownRightVectorBar: SE, DownRightVector: TE, DownTeeArrow: DE, DownTee: IE, drbkarow: NE, drcorn: ME, drcrop: OE, Dscr: LE, dscr: RE, DScy: PE, dscy: BE, dsol: zE, Dstrok: qE, dstrok: FE, dtdot: jE, dtri: $E, dtrif: UE, duarr: VE, duhar: HE, dwangle: GE, DZcy: WE, dzcy: JE, dzigrarr: YE, Eacute: KE, eacute: XE, easter: ZE, Ecaron: QE, ecaron: eA, Ecirc: tA, ecirc: nA, ecir: sA, ecolon: aA, Ecy: oA, ecy: rA, eDDot: iA, Edot: cA, edot: lA, eDot: uA, ee: pA, efDot: dA, Efr: mA, efr: fA, eg: hA, Egrave: gA, egrave: bA, egs: vA, egsdot: xA, el: yA, Element: wA, elinters: kA, ell: _A, els: CA, elsdot: EA, Emacr: AA, emacr: SA, empty: TA, emptyset: DA, EmptySmallSquare: IA, emptyv: NA, EmptyVerySmallSquare: MA, emsp13: OA, emsp14: LA, emsp: RA, ENG: PA, eng: BA, ensp: zA, Eogon: qA, eogon: FA, Eopf: jA, eopf: $A, epar: UA, eparsl: VA, eplus: HA, epsi: GA, Epsilon: WA, epsilon: JA, epsiv: YA, eqcirc: KA, eqcolon: XA, eqsim: ZA, eqslantgtr: QA, eqslantless: eS, Equal: tS, equals: nS, EqualTilde: sS, equest: aS, Equilibrium: oS, equiv: rS, equivDD: iS, eqvparsl: cS, erarr: lS, erDot: uS, escr: pS, Escr: dS, esdot: mS, Esim: fS, esim: hS, Eta: gS, eta: bS, ETH: vS, eth: xS, Euml: yS, euml: wS, euro: kS, excl: _S, exist: CS, Exists: ES, expectation: AS, exponentiale: SS, ExponentialE: TS, fallingdotseq: DS, Fcy: IS, fcy: NS, female: MS, ffilig: OS, fflig: LS, ffllig: RS, Ffr: PS, ffr: BS, filig: zS, FilledSmallSquare: qS, FilledVerySmallSquare: FS, fjlig: jS, flat: $S, fllig: US, fltns: VS, fnof: HS, Fopf: GS, fopf: WS, forall: JS, ForAll: YS, fork: KS, forkv: XS, Fouriertrf: ZS, fpartint: QS, frac12: eT, frac13: tT, frac14: nT, frac15: sT, frac16: aT, frac18: oT, frac23: rT, frac25: iT, frac34: cT, frac35: lT, frac38: uT, frac45: pT, frac56: dT, frac58: mT, frac78: fT, frasl: hT, frown: gT, fscr: bT, Fscr: vT, gacute: xT, Gamma: yT, gamma: wT, Gammad: kT, gammad: _T, gap: CT, Gbreve: ET, gbreve: AT, Gcedil: ST, Gcirc: TT, gcirc: DT, Gcy: IT, gcy: NT, Gdot: MT, gdot: OT, ge: LT, gE: RT, gEl: PT, gel: BT, geq: zT, geqq: qT, geqslant: FT, gescc: jT, ges: $T, gesdot: UT, gesdoto: VT, gesdotol: HT, gesl: GT, gesles: WT, Gfr: JT, gfr: YT, gg: KT, Gg: XT, ggg: ZT, gimel: QT, GJcy: e2, gjcy: t2, gla: n2, gl: s2, glE: a2, glj: o2, gnap: r2, gnapprox: i2, gne: c2, gnE: l2, gneq: u2, gneqq: p2, gnsim: d2, Gopf: m2, gopf: f2, grave: h2, GreaterEqual: g2, GreaterEqualLess: b2, GreaterFullEqual: v2, GreaterGreater: x2, GreaterLess: y2, GreaterSlantEqual: w2, GreaterTilde: k2, Gscr: _2, gscr: C2, gsim: E2, gsime: A2, gsiml: S2, gtcc: T2, gtcir: D2, gt: I2, GT: N2, Gt: M2, gtdot: O2, gtlPar: L2, gtquest: R2, gtrapprox: P2, gtrarr: B2, gtrdot: z2, gtreqless: q2, gtreqqless: F2, gtrless: j2, gtrsim: $2, gvertneqq: U2, gvnE: V2, Hacek: H2, hairsp: G2, half: W2, hamilt: J2, HARDcy: Y2, hardcy: K2, harrcir: X2, harr: Z2, hArr: Q2, harrw: eD, Hat: tD, hbar: nD, Hcirc: sD, hcirc: aD, hearts: oD, heartsuit: rD, hellip: iD, hercon: cD, hfr: lD, Hfr: uD, HilbertSpace: pD, hksearow: dD, hkswarow: mD, hoarr: fD, homtht: hD, hookleftarrow: gD, hookrightarrow: bD, hopf: vD, Hopf: xD, horbar: yD, HorizontalLine: wD, hscr: kD, Hscr: _D, hslash: CD, Hstrok: ED, hstrok: AD, HumpDownHump: SD, HumpEqual: TD, hybull: DD, hyphen: ID, Iacute: ND, iacute: MD, ic: OD, Icirc: LD, icirc: RD, Icy: PD, icy: BD, Idot: zD, IEcy: qD, iecy: FD, iexcl: jD, iff: $D, ifr: UD, Ifr: VD, Igrave: HD, igrave: GD, ii: WD, iiiint: JD, iiint: YD, iinfin: KD, iiota: XD, IJlig: ZD, ijlig: QD, Imacr: eI, imacr: tI, image: nI, ImaginaryI: sI, imagline: aI, imagpart: oI, imath: rI, Im: iI, imof: cI, imped: lI, Implies: uI, incare: pI, in: "∈", infin: dI, infintie: mI, inodot: fI, intcal: hI, int: gI, Int: bI, integers: vI, Integral: xI, intercal: yI, Intersection: wI, intlarhk: kI, intprod: _I, InvisibleComma: CI, InvisibleTimes: EI, IOcy: AI, iocy: SI, Iogon: TI, iogon: DI, Iopf: II, iopf: NI, Iota: MI, iota: OI, iprod: LI, iquest: RI, iscr: PI, Iscr: BI, isin: zI, isindot: qI, isinE: FI, isins: jI, isinsv: $I, isinv: UI, it: VI, Itilde: HI, itilde: GI, Iukcy: WI, iukcy: JI, Iuml: YI, iuml: KI, Jcirc: XI, jcirc: ZI, Jcy: QI, jcy: eN, Jfr: tN, jfr: nN, jmath: sN, Jopf: aN, jopf: oN, Jscr: rN, jscr: iN, Jsercy: cN, jsercy: lN, Jukcy: uN, jukcy: pN, Kappa: dN, kappa: mN, kappav: fN, Kcedil: hN, kcedil: gN, Kcy: bN, kcy: vN, Kfr: xN, kfr: yN, kgreen: wN, KHcy: kN, khcy: _N, KJcy: CN, kjcy: EN, Kopf: AN, kopf: SN, Kscr: TN, kscr: DN, lAarr: IN, Lacute: NN, lacute: MN, laemptyv: ON, lagran: LN, Lambda: RN, lambda: PN, lang: BN, Lang: zN, langd: qN, langle: FN, lap: jN, Laplacetrf: $N, laquo: UN, larrb: VN, larrbfs: HN, larr: GN, Larr: WN, lArr: JN, larrfs: YN, larrhk: KN, larrlp: XN, larrpl: ZN, larrsim: QN, larrtl: eM, latail: tM, lAtail: nM, lat: sM, late: aM, lates: oM, lbarr: rM, lBarr: iM, lbbrk: cM, lbrace: lM, lbrack: uM, lbrke: pM, lbrksld: dM, lbrkslu: mM, Lcaron: fM, lcaron: hM, Lcedil: gM, lcedil: bM, lceil: vM, lcub: xM, Lcy: yM, lcy: wM, ldca: kM, ldquo: _M, ldquor: CM, ldrdhar: EM, ldrushar: AM, ldsh: SM, le: TM, lE: DM, LeftAngleBracket: IM, LeftArrowBar: NM, leftarrow: MM, LeftArrow: OM, Leftarrow: LM, LeftArrowRightArrow: RM, leftarrowtail: PM, LeftCeiling: BM, LeftDoubleBracket: zM, LeftDownTeeVector: qM, LeftDownVectorBar: FM, LeftDownVector: jM, LeftFloor: $M, leftharpoondown: UM, leftharpoonup: VM, leftleftarrows: HM, leftrightarrow: GM, LeftRightArrow: WM, Leftrightarrow: JM, leftrightarrows: YM, leftrightharpoons: KM, leftrightsquigarrow: XM, LeftRightVector: ZM, LeftTeeArrow: QM, LeftTee: eO, LeftTeeVector: tO, leftthreetimes: nO, LeftTriangleBar: sO, LeftTriangle: aO, LeftTriangleEqual: oO, LeftUpDownVector: rO, LeftUpTeeVector: iO, LeftUpVectorBar: cO, LeftUpVector: lO, LeftVectorBar: uO, LeftVector: pO, lEg: dO, leg: mO, leq: fO, leqq: hO, leqslant: gO, lescc: bO, les: vO, lesdot: xO, lesdoto: yO, lesdotor: wO, lesg: kO, lesges: _O, lessapprox: CO, lessdot: EO, lesseqgtr: AO, lesseqqgtr: SO, LessEqualGreater: TO, LessFullEqual: DO, LessGreater: IO, lessgtr: NO, LessLess: MO, lesssim: OO, LessSlantEqual: LO, LessTilde: RO, lfisht: PO, lfloor: BO, Lfr: zO, lfr: qO, lg: FO, lgE: jO, lHar: $O, lhard: UO, lharu: VO, lharul: HO, lhblk: GO, LJcy: WO, ljcy: JO, llarr: YO, ll: KO, Ll: XO, llcorner: ZO, Lleftarrow: QO, llhard: eL, lltri: tL, Lmidot: nL, lmidot: sL, lmoustache: aL, lmoust: oL, lnap: rL, lnapprox: iL, lne: cL, lnE: lL, lneq: uL, lneqq: pL, lnsim: dL, loang: mL, loarr: fL, lobrk: hL, longleftarrow: gL, LongLeftArrow: bL, Longleftarrow: vL, longleftrightarrow: xL, LongLeftRightArrow: yL, Longleftrightarrow: wL, longmapsto: kL, longrightarrow: _L, LongRightArrow: CL, Longrightarrow: EL, looparrowleft: AL, looparrowright: SL, lopar: TL, Lopf: DL, lopf: IL, loplus: NL, lotimes: ML, lowast: OL, lowbar: LL, LowerLeftArrow: RL, LowerRightArrow: PL, loz: BL, lozenge: zL, lozf: qL, lpar: FL, lparlt: jL, lrarr: $L, lrcorner: UL, lrhar: VL, lrhard: HL, lrm: GL, lrtri: WL, lsaquo: JL, lscr: YL, Lscr: KL, lsh: XL, Lsh: ZL, lsim: QL, lsime: e3, lsimg: t3, lsqb: n3, lsquo: s3, lsquor: a3, Lstrok: o3, lstrok: r3, ltcc: i3, ltcir: c3, lt: l3, LT: u3, Lt: p3, ltdot: d3, lthree: m3, ltimes: f3, ltlarr: h3, ltquest: g3, ltri: b3, ltrie: v3, ltrif: x3, ltrPar: y3, lurdshar: w3, luruhar: k3, lvertneqq: _3, lvnE: C3, macr: E3, male: A3, malt: S3, maltese: T3, Map: "⤅", map: D3, mapsto: I3, mapstodown: N3, mapstoleft: M3, mapstoup: O3, marker: L3, mcomma: R3, Mcy: P3, mcy: B3, mdash: z3, mDDot: q3, measuredangle: F3, MediumSpace: j3, Mellintrf: $3, Mfr: U3, mfr: V3, mho: H3, micro: G3, midast: W3, midcir: J3, mid: Y3, middot: K3, minusb: X3, minus: Z3, minusd: Q3, minusdu: eR, MinusPlus: tR, mlcp: nR, mldr: sR, mnplus: aR, models: oR, Mopf: rR, mopf: iR, mp: cR, mscr: lR, Mscr: uR, mstpos: pR, Mu: dR, mu: mR, multimap: fR, mumap: hR, nabla: gR, Nacute: bR, nacute: vR, nang: xR, nap: yR, napE: wR, napid: kR, napos: _R, napprox: CR, natural: ER, naturals: AR, natur: SR, nbsp: TR, nbump: DR, nbumpe: IR, ncap: NR, Ncaron: MR, ncaron: OR, Ncedil: LR, ncedil: RR, ncong: PR, ncongdot: BR, ncup: zR, Ncy: qR, ncy: FR, ndash: jR, nearhk: $R, nearr: UR, neArr: VR, nearrow: HR, ne: GR, nedot: WR, NegativeMediumSpace: JR, NegativeThickSpace: YR, NegativeThinSpace: KR, NegativeVeryThinSpace: XR, nequiv: ZR, nesear: QR, nesim: eP, NestedGreaterGreater: tP, NestedLessLess: nP, NewLine: sP, nexist: aP, nexists: oP, Nfr: rP, nfr: iP, ngE: cP, nge: lP, ngeq: uP, ngeqq: pP, ngeqslant: dP, nges: mP, nGg: fP, ngsim: hP, nGt: gP, ngt: bP, ngtr: vP, nGtv: xP, nharr: yP, nhArr: wP, nhpar: kP, ni: _P, nis: CP, nisd: EP, niv: AP, NJcy: SP, njcy: TP, nlarr: DP, nlArr: IP, nldr: NP, nlE: MP, nle: OP, nleftarrow: LP, nLeftarrow: RP, nleftrightarrow: PP, nLeftrightarrow: BP, nleq: zP, nleqq: qP, nleqslant: FP, nles: jP, nless: $P, nLl: UP, nlsim: VP, nLt: HP, nlt: GP, nltri: WP, nltrie: JP, nLtv: YP, nmid: KP, NoBreak: XP, NonBreakingSpace: ZP, nopf: QP, Nopf: e4, Not: t4, not: n4, NotCongruent: s4, NotCupCap: a4, NotDoubleVerticalBar: o4, NotElement: r4, NotEqual: i4, NotEqualTilde: c4, NotExists: l4, NotGreater: u4, NotGreaterEqual: p4, NotGreaterFullEqual: d4, NotGreaterGreater: m4, NotGreaterLess: f4, NotGreaterSlantEqual: h4, NotGreaterTilde: g4, NotHumpDownHump: b4, NotHumpEqual: v4, notin: x4, notindot: y4, notinE: w4, notinva: k4, notinvb: _4, notinvc: C4, NotLeftTriangleBar: E4, NotLeftTriangle: A4, NotLeftTriangleEqual: S4, NotLess: T4, NotLessEqual: D4, NotLessGreater: I4, NotLessLess: N4, NotLessSlantEqual: M4, NotLessTilde: O4, NotNestedGreaterGreater: L4, NotNestedLessLess: R4, notni: P4, notniva: B4, notnivb: z4, notnivc: q4, NotPrecedes: F4, NotPrecedesEqual: j4, NotPrecedesSlantEqual: $4, NotReverseElement: U4, NotRightTriangleBar: V4, NotRightTriangle: H4, NotRightTriangleEqual: G4, NotSquareSubset: W4, NotSquareSubsetEqual: J4, NotSquareSuperset: Y4, NotSquareSupersetEqual: K4, NotSubset: X4, NotSubsetEqual: Z4, NotSucceeds: Q4, NotSucceedsEqual: e6, NotSucceedsSlantEqual: t6, NotSucceedsTilde: n6, NotSuperset: s6, NotSupersetEqual: a6, NotTilde: o6, NotTildeEqual: r6, NotTildeFullEqual: i6, NotTildeTilde: c6, NotVerticalBar: l6, nparallel: u6, npar: p6, nparsl: d6, npart: m6, npolint: f6, npr: h6, nprcue: g6, nprec: b6, npreceq: v6, npre: x6, nrarrc: y6, nrarr: w6, nrArr: k6, nrarrw: _6, nrightarrow: C6, nRightarrow: E6, nrtri: A6, nrtrie: S6, nsc: T6, nsccue: D6, nsce: I6, Nscr: N6, nscr: M6, nshortmid: O6, nshortparallel: L6, nsim: R6, nsime: P6, nsimeq: B6, nsmid: z6, nspar: q6, nsqsube: F6, nsqsupe: j6, nsub: $6, nsubE: U6, nsube: V6, nsubset: H6, nsubseteq: G6, nsubseteqq: W6, nsucc: J6, nsucceq: Y6, nsup: K6, nsupE: X6, nsupe: Z6, nsupset: Q6, nsupseteq: eB, nsupseteqq: tB, ntgl: nB, Ntilde: sB, ntilde: aB, ntlg: oB, ntriangleleft: rB, ntrianglelefteq: iB, ntriangleright: cB, ntrianglerighteq: lB, Nu: uB, nu: pB, num: dB, numero: mB, numsp: fB, nvap: hB, nvdash: gB, nvDash: bB, nVdash: vB, nVDash: xB, nvge: yB, nvgt: wB, nvHarr: kB, nvinfin: _B, nvlArr: CB, nvle: EB, nvlt: AB, nvltrie: SB, nvrArr: TB, nvrtrie: DB, nvsim: IB, nwarhk: NB, nwarr: MB, nwArr: OB, nwarrow: LB, nwnear: RB, Oacute: PB, oacute: BB, oast: zB, Ocirc: qB, ocirc: FB, ocir: jB, Ocy: $B, ocy: UB, odash: VB, Odblac: HB, odblac: GB, odiv: WB, odot: JB, odsold: YB, OElig: KB, oelig: XB, ofcir: ZB, Ofr: QB, ofr: e5, ogon: t5, Ograve: n5, ograve: s5, ogt: a5, ohbar: o5, ohm: r5, oint: i5, olarr: c5, olcir: l5, olcross: u5, oline: p5, olt: d5, Omacr: m5, omacr: f5, Omega: h5, omega: g5, Omicron: b5, omicron: v5, omid: x5, ominus: y5, Oopf: w5, oopf: k5, opar: _5, OpenCurlyDoubleQuote: C5, OpenCurlyQuote: E5, operp: A5, oplus: S5, orarr: T5, Or: D5, or: I5, ord: N5, order: M5, orderof: O5, ordf: L5, ordm: R5, origof: P5, oror: B5, orslope: z5, orv: q5, oS: F5, Oscr: j5, oscr: $5, Oslash: U5, oslash: V5, osol: H5, Otilde: G5, otilde: W5, otimesas: J5, Otimes: Y5, otimes: K5, Ouml: X5, ouml: Z5, ovbar: Q5, OverBar: ez, OverBrace: tz, OverBracket: nz, OverParenthesis: sz, para: az, parallel: oz, par: rz, parsim: iz, parsl: cz, part: lz, PartialD: uz, Pcy: pz, pcy: dz, percnt: mz, period: fz, permil: hz, perp: gz, pertenk: bz, Pfr: vz, pfr: xz, Phi: yz, phi: wz, phiv: kz, phmmat: _z, phone: Cz, Pi: Ez, pi: Az, pitchfork: Sz, piv: Tz, planck: Dz, planckh: Iz, plankv: Nz, plusacir: Mz, plusb: Oz, pluscir: Lz, plus: Rz, plusdo: Pz, plusdu: Bz, pluse: zz, PlusMinus: qz, plusmn: Fz, plussim: jz, plustwo: $z, pm: Uz, Poincareplane: Vz, pointint: Hz, popf: Gz, Popf: Wz, pound: Jz, prap: Yz, Pr: Kz, pr: Xz, prcue: Zz, precapprox: Qz, prec: eq, preccurlyeq: tq, Precedes: nq, PrecedesEqual: sq, PrecedesSlantEqual: aq, PrecedesTilde: oq, preceq: rq, precnapprox: iq, precneqq: cq, precnsim: lq, pre: uq, prE: pq, precsim: dq, prime: mq, Prime: fq, primes: hq, prnap: gq, prnE: bq, prnsim: vq, prod: xq, Product: yq, profalar: wq, profline: kq, profsurf: _q, prop: Cq, Proportional: Eq, Proportion: Aq, propto: Sq, prsim: Tq, prurel: Dq, Pscr: Iq, pscr: Nq, Psi: Mq, psi: Oq, puncsp: Lq, Qfr: Rq, qfr: Pq, qint: Bq, qopf: zq, Qopf: qq, qprime: Fq, Qscr: jq, qscr: $q, quaternions: Uq, quatint: Vq, quest: Hq, questeq: Gq, quot: Wq, QUOT: Jq, rAarr: Yq, race: Kq, Racute: Xq, racute: Zq, radic: Qq, raemptyv: e8, rang: t8, Rang: n8, rangd: s8, range: a8, rangle: o8, raquo: r8, rarrap: i8, rarrb: c8, rarrbfs: l8, rarrc: u8, rarr: p8, Rarr: d8, rArr: m8, rarrfs: f8, rarrhk: h8, rarrlp: g8, rarrpl: b8, rarrsim: v8, Rarrtl: x8, rarrtl: y8, rarrw: w8, ratail: k8, rAtail: _8, ratio: C8, rationals: E8, rbarr: A8, rBarr: S8, RBarr: T8, rbbrk: D8, rbrace: I8, rbrack: N8, rbrke: M8, rbrksld: O8, rbrkslu: L8, Rcaron: R8, rcaron: P8, Rcedil: B8, rcedil: z8, rceil: q8, rcub: F8, Rcy: j8, rcy: $8, rdca: U8, rdldhar: V8, rdquo: H8, rdquor: G8, rdsh: W8, real: J8, realine: Y8, realpart: K8, reals: X8, Re: Z8, rect: Q8, reg: eF, REG: tF, ReverseElement: nF, ReverseEquilibrium: sF, ReverseUpEquilibrium: aF, rfisht: oF, rfloor: rF, rfr: iF, Rfr: cF, rHar: lF, rhard: uF, rharu: pF, rharul: dF, Rho: mF, rho: fF, rhov: hF, RightAngleBracket: gF, RightArrowBar: bF, rightarrow: vF, RightArrow: xF, Rightarrow: yF, RightArrowLeftArrow: wF, rightarrowtail: kF, RightCeiling: _F, RightDoubleBracket: CF, RightDownTeeVector: EF, RightDownVectorBar: AF, RightDownVector: SF, RightFloor: TF, rightharpoondown: DF, rightharpoonup: IF, rightleftarrows: NF, rightleftharpoons: MF, rightrightarrows: OF, rightsquigarrow: LF, RightTeeArrow: RF, RightTee: PF, RightTeeVector: BF, rightthreetimes: zF, RightTriangleBar: qF, RightTriangle: FF, RightTriangleEqual: jF, RightUpDownVector: $F, RightUpTeeVector: UF, RightUpVectorBar: VF, RightUpVector: HF, RightVectorBar: GF, RightVector: WF, ring: JF, risingdotseq: YF, rlarr: KF, rlhar: XF, rlm: ZF, rmoustache: QF, rmoust: e7, rnmid: t7, roang: n7, roarr: s7, robrk: a7, ropar: o7, ropf: r7, Ropf: i7, roplus: c7, rotimes: l7, RoundImplies: u7, rpar: p7, rpargt: d7, rppolint: m7, rrarr: f7, Rrightarrow: h7, rsaquo: g7, rscr: b7, Rscr: v7, rsh: x7, Rsh: y7, rsqb: w7, rsquo: k7, rsquor: _7, rthree: C7, rtimes: E7, rtri: A7, rtrie: S7, rtrif: T7, rtriltri: D7, RuleDelayed: I7, ruluhar: N7, rx: M7, Sacute: O7, sacute: L7, sbquo: R7, scap: P7, Scaron: B7, scaron: z7, Sc: q7, sc: F7, sccue: j7, sce: $7, scE: U7, Scedil: V7, scedil: H7, Scirc: G7, scirc: W7, scnap: J7, scnE: Y7, scnsim: K7, scpolint: X7, scsim: Z7, Scy: Q7, scy: ej, sdotb: tj, sdot: nj, sdote: sj, searhk: aj, searr: oj, seArr: rj, searrow: ij, sect: cj, semi: lj, seswar: uj, setminus: pj, setmn: dj, sext: mj, Sfr: fj, sfr: hj, sfrown: gj, sharp: bj, SHCHcy: vj, shchcy: xj, SHcy: yj, shcy: wj, ShortDownArrow: kj, ShortLeftArrow: _j, shortmid: Cj, shortparallel: Ej, ShortRightArrow: Aj, ShortUpArrow: Sj, shy: Tj, Sigma: Dj, sigma: Ij, sigmaf: Nj, sigmav: Mj, sim: Oj, simdot: Lj, sime: Rj, simeq: Pj, simg: Bj, simgE: zj, siml: qj, simlE: Fj, simne: jj, simplus: $j, simrarr: Uj, slarr: Vj, SmallCircle: Hj, smallsetminus: Gj, smashp: Wj, smeparsl: Jj, smid: Yj, smile: Kj, smt: Xj, smte: Zj, smtes: Qj, SOFTcy: e9, softcy: t9, solbar: n9, solb: s9, sol: a9, Sopf: o9, sopf: r9, spades: i9, spadesuit: c9, spar: l9, sqcap: u9, sqcaps: p9, sqcup: d9, sqcups: m9, Sqrt: f9, sqsub: h9, sqsube: g9, sqsubset: b9, sqsubseteq: v9, sqsup: x9, sqsupe: y9, sqsupset: w9, sqsupseteq: k9, square: _9, Square: C9, SquareIntersection: E9, SquareSubset: A9, SquareSubsetEqual: S9, SquareSuperset: T9, SquareSupersetEqual: D9, SquareUnion: I9, squarf: N9, squ: M9, squf: O9, srarr: L9, Sscr: R9, sscr: P9, ssetmn: B9, ssmile: z9, sstarf: q9, Star: F9, star: j9, starf: $9, straightepsilon: U9, straightphi: V9, strns: H9, sub: G9, Sub: W9, subdot: J9, subE: Y9, sube: K9, subedot: X9, submult: Z9, subnE: Q9, subne: e$, subplus: t$, subrarr: n$, subset: s$, Subset: a$, subseteq: o$, subseteqq: r$, SubsetEqual: i$, subsetneq: c$, subsetneqq: l$, subsim: u$, subsub: p$, subsup: d$, succapprox: m$, succ: f$, succcurlyeq: h$, Succeeds: g$, SucceedsEqual: b$, SucceedsSlantEqual: v$, SucceedsTilde: x$, succeq: y$, succnapprox: w$, succneqq: k$, succnsim: _$, succsim: C$, SuchThat: E$, sum: A$, Sum: S$, sung: T$, sup1: D$, sup2: I$, sup3: N$, sup: M$, Sup: O$, supdot: L$, supdsub: R$, supE: P$, supe: B$, supedot: z$, Superset: q$, SupersetEqual: F$, suphsol: j$, suphsub: $$, suplarr: U$, supmult: V$, supnE: H$, supne: G$, supplus: W$, supset: J$, Supset: Y$, supseteq: K$, supseteqq: X$, supsetneq: Z$, supsetneqq: Q$, supsim: eU, supsub: tU, supsup: nU, swarhk: sU, swarr: aU, swArr: oU, swarrow: rU, swnwar: iU, szlig: cU, Tab: lU, target: uU, Tau: pU, tau: dU, tbrk: mU, Tcaron: fU, tcaron: hU, Tcedil: gU, tcedil: bU, Tcy: vU, tcy: xU, tdot: yU, telrec: wU, Tfr: kU, tfr: _U, there4: CU, therefore: EU, Therefore: AU, Theta: SU, theta: TU, thetasym: DU, thetav: IU, thickapprox: NU, thicksim: MU, ThickSpace: OU, ThinSpace: LU, thinsp: RU, thkap: PU, thksim: BU, THORN: zU, thorn: qU, tilde: FU, Tilde: jU, TildeEqual: $U, TildeFullEqual: UU, TildeTilde: VU, timesbar: HU, timesb: GU, times: WU, timesd: JU, tint: YU, toea: KU, topbot: XU, topcir: ZU, top: QU, Topf: eV, topf: tV, topfork: nV, tosa: sV, tprime: aV, trade: oV, TRADE: rV, triangle: iV, triangledown: cV, triangleleft: lV, trianglelefteq: uV, triangleq: pV, triangleright: dV, trianglerighteq: mV, tridot: fV, trie: hV, triminus: gV, TripleDot: bV, triplus: vV, trisb: xV, tritime: yV, trpezium: wV, Tscr: kV, tscr: _V, TScy: CV, tscy: EV, TSHcy: AV, tshcy: SV, Tstrok: TV, tstrok: DV, twixt: IV, twoheadleftarrow: NV, twoheadrightarrow: MV, Uacute: OV, uacute: LV, uarr: RV, Uarr: PV, uArr: BV, Uarrocir: zV, Ubrcy: qV, ubrcy: FV, Ubreve: jV, ubreve: $V, Ucirc: UV, ucirc: VV, Ucy: HV, ucy: GV, udarr: WV, Udblac: JV, udblac: YV, udhar: KV, ufisht: XV, Ufr: ZV, ufr: QV, Ugrave: eH, ugrave: tH, uHar: nH, uharl: sH, uharr: aH, uhblk: oH, ulcorn: rH, ulcorner: iH, ulcrop: cH, ultri: lH, Umacr: uH, umacr: pH, uml: dH, UnderBar: mH, UnderBrace: fH, UnderBracket: hH, UnderParenthesis: gH, Union: bH, UnionPlus: vH, Uogon: xH, uogon: yH, Uopf: wH, uopf: kH, UpArrowBar: _H, uparrow: CH, UpArrow: EH, Uparrow: AH, UpArrowDownArrow: SH, updownarrow: TH, UpDownArrow: DH, Updownarrow: IH, UpEquilibrium: NH, upharpoonleft: MH, upharpoonright: OH, uplus: LH, UpperLeftArrow: RH, UpperRightArrow: PH, upsi: BH, Upsi: zH, upsih: qH, Upsilon: FH, upsilon: jH, UpTeeArrow: $H, UpTee: UH, upuparrows: VH, urcorn: HH, urcorner: GH, urcrop: WH, Uring: JH, uring: YH, urtri: KH, Uscr: XH, uscr: ZH, utdot: QH, Utilde: eG, utilde: tG, utri: nG, utrif: sG, uuarr: aG, Uuml: oG, uuml: rG, uwangle: iG, vangrt: cG, varepsilon: lG, varkappa: uG, varnothing: pG, varphi: dG, varpi: mG, varpropto: fG, varr: hG, vArr: gG, varrho: bG, varsigma: vG, varsubsetneq: xG, varsubsetneqq: yG, varsupsetneq: wG, varsupsetneqq: kG, vartheta: _G, vartriangleleft: CG, vartriangleright: EG, vBar: AG, Vbar: SG, vBarv: TG, Vcy: DG, vcy: IG, vdash: NG, vDash: MG, Vdash: OG, VDash: LG, Vdashl: RG, veebar: PG, vee: BG, Vee: zG, veeeq: qG, vellip: FG, verbar: jG, Verbar: $G, vert: UG, Vert: VG, VerticalBar: HG, VerticalLine: GG, VerticalSeparator: WG, VerticalTilde: JG, VeryThinSpace: YG, Vfr: KG, vfr: XG, vltri: ZG, vnsub: QG, vnsup: eW, Vopf: tW, vopf: nW, vprop: sW, vrtri: aW, Vscr: oW, vscr: rW, vsubnE: iW, vsubne: cW, vsupnE: lW, vsupne: uW, Vvdash: pW, vzigzag: dW, Wcirc: mW, wcirc: fW, wedbar: hW, wedge: gW, Wedge: bW, wedgeq: vW, weierp: xW, Wfr: yW, wfr: wW, Wopf: kW, wopf: _W, wp: CW, wr: EW, wreath: AW, Wscr: SW, wscr: TW, xcap: DW, xcirc: IW, xcup: NW, xdtri: MW, Xfr: OW, xfr: LW, xharr: RW, xhArr: PW, Xi: BW, xi: zW, xlarr: qW, xlArr: FW, xmap: jW, xnis: $W, xodot: UW, Xopf: VW, xopf: HW, xoplus: GW, xotime: WW, xrarr: JW, xrArr: YW, Xscr: KW, xscr: XW, xsqcup: ZW, xuplus: QW, xutri: eJ, xvee: tJ, xwedge: nJ, Yacute: sJ, yacute: aJ, YAcy: oJ, yacy: rJ, Ycirc: iJ, ycirc: cJ, Ycy: lJ, ycy: uJ, yen: pJ, Yfr: dJ, yfr: mJ, YIcy: fJ, yicy: hJ, Yopf: gJ, yopf: bJ, Yscr: vJ, yscr: xJ, YUcy: yJ, yucy: wJ, yuml: kJ, Yuml: _J, Zacute: CJ, zacute: EJ, Zcaron: AJ, zcaron: SJ, Zcy: TJ, zcy: DJ, Zdot: IJ, zdot: NJ, zeetrf: MJ, ZeroWidthSpace: OJ, Zeta: LJ, zeta: RJ, zfr: PJ, Zfr: BJ, ZHcy: zJ, zhcy: qJ, zigrarr: FJ, zopf: jJ, Zopf: $J, Zscr: UJ, zscr: VJ, zwj: HJ, zwnj: GJ }; var vp = WJ, Br = /[!-#%-\*,-\/:;\?@\[-\]_\{\}\xA1\xA7\xAB\xB6\xB7\xBB\xBF\u037E\u0387\u055A-\u055F\u0589\u058A\u05BE\u05C0\u05C3\u05C6\u05F3\u05F4\u0609\u060A\u060C\u060D\u061B\u061E\u061F\u066A-\u066D\u06D4\u0700-\u070D\u07F7-\u07F9\u0830-\u083E\u085E\u0964\u0965\u0970\u09FD\u0A76\u0AF0\u0C84\u0DF4\u0E4F\u0E5A\u0E5B\u0F04-\u0F12\u0F14\u0F3A-\u0F3D\u0F85\u0FD0-\u0FD4\u0FD9\u0FDA\u104A-\u104F\u10FB\u1360-\u1368\u1400\u166D\u166E\u169B\u169C\u16EB-\u16ED\u1735\u1736\u17D4-\u17D6\u17D8-\u17DA\u1800-\u180A\u1944\u1945\u1A1E\u1A1F\u1AA0-\u1AA6\u1AA8-\u1AAD\u1B5A-\u1B60\u1BFC-\u1BFF\u1C3B-\u1C3F\u1C7E\u1C7F\u1CC0-\u1CC7\u1CD3\u2010-\u2027\u2030-\u2043\u2045-\u2051\u2053-\u205E\u207D\u207E\u208D\u208E\u2308-\u230B\u2329\u232A\u2768-\u2775\u27C5\u27C6\u27E6-\u27EF\u2983-\u2998\u29D8-\u29DB\u29FC\u29FD\u2CF9-\u2CFC\u2CFE\u2CFF\u2D70\u2E00-\u2E2E\u2E30-\u2E4E\u3001-\u3003\u3008-\u3011\u3014-\u301F\u3030\u303D\u30A0\u30FB\uA4FE\uA4FF\uA60D-\uA60F\uA673\uA67E\uA6F2-\uA6F7\uA874-\uA877\uA8CE\uA8CF\uA8F8-\uA8FA\uA8FC\uA92E\uA92F\uA95F\uA9C1-\uA9CD\uA9DE\uA9DF\uAA5C-\uAA5F\uAADE\uAADF\uAAF0\uAAF1\uABEB\uFD3E\uFD3F\uFE10-\uFE19\uFE30-\uFE52\uFE54-\uFE61\uFE63\uFE68\uFE6A\uFE6B\uFF01-\uFF03\uFF05-\uFF0A\uFF0C-\uFF0F\uFF1A\uFF1B\uFF1F\uFF20\uFF3B-\uFF3D\uFF3F\uFF5B\uFF5D\uFF5F-\uFF65]|\uD800[\uDD00-\uDD02\uDF9F\uDFD0]|\uD801\uDD6F|\uD802[\uDC57\uDD1F\uDD3F\uDE50-\uDE58\uDE7F\uDEF0-\uDEF6\uDF39-\uDF3F\uDF99-\uDF9C]|\uD803[\uDF55-\uDF59]|\uD804[\uDC47-\uDC4D\uDCBB\uDCBC\uDCBE-\uDCC1\uDD40-\uDD43\uDD74\uDD75\uDDC5-\uDDC8\uDDCD\uDDDB\uDDDD-\uDDDF\uDE38-\uDE3D\uDEA9]|\uD805[\uDC4B-\uDC4F\uDC5B\uDC5D\uDCC6\uDDC1-\uDDD7\uDE41-\uDE43\uDE60-\uDE6C\uDF3C-\uDF3E]|\uD806[\uDC3B\uDE3F-\uDE46\uDE9A-\uDE9C\uDE9E-\uDEA2]|\uD807[\uDC41-\uDC45\uDC70\uDC71\uDEF7\uDEF8]|\uD809[\uDC70-\uDC74]|\uD81A[\uDE6E\uDE6F\uDEF5\uDF37-\uDF3B\uDF44]|\uD81B[\uDE97-\uDE9A]|\uD82F\uDC9F|\uD836[\uDE87-\uDE8B]|\uD83A[\uDD5E\uDD5F]/, Ln = {}, fc = {}; function JJ(t) { var e, n, s = fc[t]; if (s) return s; for (s = fc[t] = [], e = 0; e < 128; e++) n = String.fromCharCode(e), /^[0-9a-z]$/i.test(n) ? s.push(n) : s.push("%" + ("0" + e.toString(16).toUpperCase()).slice(-2)); for (e = 0; e < t.length; e++) s[t.charCodeAt(e)] = t[e]; return s } function Ra(t, e, n) { var s, a, o, r, i, c = ""; for (typeof e != "string" && (n = e, e = Ra.defaultChars), typeof n == "undefined" && (n = !0), i = JJ(e), s = 0, a = t.length; s < a; s++) { if (o = t.charCodeAt(s), n && o === 37 && s + 2 < a && /^[0-9a-f]{2}$/i.test(t.slice(s + 1, s + 3))) { c += t.slice(s, s + 3), s += 2; continue } if (o < 128) { c += i[o]; continue } if (o >= 55296 && o <= 57343) { if (o >= 55296 && o <= 56319 && s + 1 < a && (r = t.charCodeAt(s + 1), r >= 56320 && r <= 57343)) { c += encodeURIComponent(t[s] + t[s + 1]), s++; continue } c += "%EF%BF%BD"; continue } c += encodeURIComponent(t[s]) } return c } Ra.defaultChars = ";/?:@&=+$,-_.!~*'()#"; Ra.componentChars = "-_.!~*'()"; var YJ = Ra, hc = {}; function KJ(t) { var e, n, s = hc[t]; if (s) return s; for (s = hc[t] = [], e = 0; e < 128; e++) n = String.fromCharCode(e), s.push(n); for (e = 0; e < t.length; e++) n = t.charCodeAt(e), s[n] = "%" + ("0" + n.toString(16).toUpperCase()).slice(-2); return s } function Pa(t, e) { var n; return typeof e != "string" && (e = Pa.defaultChars), n = KJ(e), t.replace(/(%[a-f0-9]{2})+/gi, function(s) { var a, o, r, i, c, l, u, d = ""; for (a = 0, o = s.length; a < o; a += 3) { if (r = parseInt(s.slice(a + 1, a + 3), 16), r < 128) { d += n[r]; continue } if ((r & 224) === 192 && a + 3 < o && (i = parseInt(s.slice(a + 4, a + 6), 16), (i & 192) === 128)) { u = r << 6 & 1984 | i & 63, u < 128 ? d += "��" : d += String.fromCharCode(u), a += 3; continue } if ((r & 240) === 224 && a + 6 < o && (i = parseInt(s.slice(a + 4, a + 6), 16), c = parseInt(s.slice(a + 7, a + 9), 16), (i & 192) === 128 && (c & 192) === 128)) { u = r << 12 & 61440 | i << 6 & 4032 | c & 63, u < 2048 || u >= 55296 && u <= 57343 ? d += "���" : d += String.fromCharCode(u), a += 6; continue } if ((r & 248) === 240 && a + 9 < o && (i = parseInt(s.slice(a + 4, a + 6), 16), c = parseInt(s.slice(a + 7, a + 9), 16), l = parseInt(s.slice(a + 10, a + 12), 16), (i & 192) === 128 && (c & 192) === 128 && (l & 192) === 128)) { u = r << 18 & 1835008 | i << 12 & 258048 | c << 6 & 4032 | l & 63, u < 65536 || u > 1114111 ? d += "����" : (u -= 65536, d += String.fromCharCode(55296 + (u >> 10), 56320 + (u & 1023))), a += 9; continue } d += "�" } return d }) } Pa.defaultChars = ";/?:@&=+$,#"; Pa.componentChars = ""; var XJ = Pa, ZJ = function(e) { var n = ""; return n += e.protocol || "", n += e.slashes ? "//" : "", n += e.auth ? e.auth + "@" : "", e.hostname && e.hostname.indexOf(":") !== -1 ? n += "[" + e.hostname + "]" : n += e.hostname || "", n += e.port ? ":" + e.port : "", n += e.pathname || "", n += e.search || "", n += e.hash || "", n }; function ua() { this.protocol = null, this.slashes = null, this.auth = null, this.port = null, this.hostname = null, this.hash = null, this.search = null, this.pathname = null } var QJ = /^([a-z0-9.+-]+:)/i, eY = /:[0-9]*$/, tY = /^(\/\/?(?!\/)[^\?\s]*)(\?[^\s]*)?$/, nY = ["<", ">", '"', "`", " ", "\r", ` `, " "], sY = ["{", "}", "|", "\\", "^", "`"].concat(nY), aY = ["'"].concat(sY), gc = ["%", "/", "?", ";", "#"].concat(aY), bc = ["/", "?", "#"], oY = 255, vc = /^[+a-z0-9A-Z_-]{0,63}$/, rY = /^([+a-z0-9A-Z_-]{0,63})(.*)$/, xc = { javascript: !0, "javascript:": !0 }, yc = { http: !0, https: !0, ftp: !0, gopher: !0, file: !0, "http:": !0, "https:": !0, "ftp:": !0, "gopher:": !0, "file:": !0 }; function iY(t, e) { if (t && t instanceof ua) return t; var n = new ua; return n.parse(t, e), n } ua.prototype.parse = function(t, e) { var n, s, a, o, r, i = t; if (i = i.trim(), !e && t.split("#").length === 1) { var c = tY.exec(i); if (c) return this.pathname = c[1], c[2] && (this.search = c[2]), this } var l = QJ.exec(i); if (l && (l = l[0], a = l.toLowerCase(), this.protocol = l, i = i.substr(l.length)), (e || l || i.match(/^\/\/[^@\/]+@[^@\/]+/)) && (r = i.substr(0, 2) === "//", r && !(l && xc[l]) && (i = i.substr(2), this.slashes = !0)), !xc[l] && (r || l && !yc[l])) { var u = -1; for (n = 0; n < bc.length; n++) o = i.indexOf(bc[n]), o !== -1 && (u === -1 || o < u) && (u = o); var d, m; for (u === -1 ? m = i.lastIndexOf("@") : m = i.lastIndexOf("@", u), m !== -1 && (d = i.slice(0, m), i = i.slice(m + 1), this.auth = d), u = -1, n = 0; n < gc.length; n++) o = i.indexOf(gc[n]), o !== -1 && (u === -1 || o < u) && (u = o); u === -1 && (u = i.length), i[u - 1] === ":" && u--; var f = i.slice(0, u); i = i.slice(u), this.parseHost(f), this.hostname = this.hostname || ""; var h = this.hostname[0] === "[" && this.hostname[this.hostname.length - 1] === "]"; if (!h) { var g = this.hostname.split(/\./); for (n = 0, s = g.length; n < s; n++) { var b = g[n]; if (b && !b.match(vc)) { for (var x = "", v = 0, w = b.length; v < w; v++) b.charCodeAt(v) > 127 ? x += "x" : x += b[v]; if (!x.match(vc)) { var E = g.slice(0, n), _ = g.slice(n + 1), k = b.match(rY); k && (E.push(k[1]), _.unshift(k[2])), _.length && (i = _.join(".") + i), this.hostname = E.join("."); break } } } } this.hostname.length > oY && (this.hostname = ""), h && (this.hostname = this.hostname.substr(1, this.hostname.length - 2)) } var M = i.indexOf("#"); M !== -1 && (this.hash = i.substr(M), i = i.slice(0, M)); var y = i.indexOf("?"); return y !== -1 && (this.search = i.substr(y), i = i.slice(0, y)), i && (this.pathname = i), yc[a] && this.hostname && !this.pathname && (this.pathname = ""), this }; ua.prototype.parseHost = function(t) { var e = eY.exec(t); e && (e = e[0], e !== ":" && (this.port = e.substr(1)), t = t.substr(0, t.length - e.length)), t && (this.hostname = t) }; var cY = iY; Ln.encode = YJ; Ln.decode = XJ; Ln.format = ZJ; Ln.parse = cY; var Gt = {}, io, wc; function xp() { return wc || (wc = 1, io = /[\0-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]/), io } var co, kc; function yp() { return kc || (kc = 1, co = /[\0-\x1F\x7F-\x9F]/), co } var lo, _c; function lY() { return _c || (_c = 1, lo = /[\xAD\u0600-\u0605\u061C\u06DD\u070F\u08E2\u180E\u200B-\u200F\u202A-\u202E\u2060-\u2064\u2066-\u206F\uFEFF\uFFF9-\uFFFB]|\uD804[\uDCBD\uDCCD]|\uD82F[\uDCA0-\uDCA3]|\uD834[\uDD73-\uDD7A]|\uDB40[\uDC01\uDC20-\uDC7F]/), lo } var uo, Cc; function wp() { return Cc || (Cc = 1, uo = /[ \xA0\u1680\u2000-\u200A\u2028\u2029\u202F\u205F\u3000]/), uo } var Ec; function uY() { return Ec || (Ec = 1, Gt.Any = xp(), Gt.Cc = yp(), Gt.Cf = lY(), Gt.P = Br, Gt.Z = wp()), Gt }(function(t) { function e(A) { return Object.prototype.toString.call(A) } function n(A) { return e(A) === "[object String]" } var s = Object.prototype.hasOwnProperty; function a(A, I) { return s.call(A, I) } function o(A) { var I = Array.prototype.slice.call(arguments, 1); return I.forEach(function(O) { if (O) { if (typeof O != "object") throw new TypeError(O + "must be object"); Object.keys(O).forEach(function(B) { A[B] = O[B] }) } }), A } function r(A, I, O) { return [].concat(A.slice(0, I), O, A.slice(I + 1)) } function i(A) { return !(A >= 55296 && A <= 57343 || A >= 64976 && A <= 65007 || (A & 65535) === 65535 || (A & 65535) === 65534 || A >= 0 && A <= 8 || A === 11 || A >= 14 && A <= 31 || A >= 127 && A <= 159 || A > 1114111) } function c(A) { if (A > 65535) { A -= 65536; var I = 55296 + (A >> 10), O = 56320 + (A & 1023); return String.fromCharCode(I, O) } return String.fromCharCode(A) } var l = /\\([!"#$%&'()*+,\-.\/:;<=>?@[\\\]^_`{|}~])/g, u = /&([a-z#][a-z0-9]{1,31});/gi, d = new RegExp(l.source + "|" + u.source, "gi"), m = /^#((?:x[a-f0-9]{1,8}|[0-9]{1,8}))/i, f = vp; function h(A, I) { var O = 0; return a(f, I) ? f[I] : I.charCodeAt(0) === 35 && m.test(I) && (O = I[1].toLowerCase() === "x" ? parseInt(I.slice(2), 16) : parseInt(I.slice(1), 10), i(O)) ? c(O) : A } function g(A) { return A.indexOf("\\") < 0 ? A : A.replace(l, "$1") } function b(A) { return A.indexOf("\\") < 0 && A.indexOf("&") < 0 ? A : A.replace(d, function(I, O, B) { return O || h(I, B) }) } var x = /[&<>"]/, v = /[&<>"]/g, w = { "&": "&", "<": "<", ">": ">", '"': """ }; function E(A) { return w[A] } function _(A) { return x.test(A) ? A.replace(v, E) : A } var k = /[.?*+^$[\]\\(){}|-]/g; function M(A) { return A.replace(k, "\\$&") } function y(A) { switch (A) { case 9: case 32: return !0 } return !1 } function T(A) { if (A >= 8192 && A <= 8202) return !0; switch (A) { case 9: case 10: case 11: case 12: case 13: case 32: case 160: case 5760: case 8239: case 8287: case 12288: return !0 } return !1 } var D = Br; function C(A) { return D.test(A) } function L(A) { switch (A) { case 33: case 34: case 35: case 36: case 37: case 38: case 39: case 40: case 41: case 42: case 43: case 44: case 45: case 46: case 47: case 58: case 59: case 60: case 61: case 62: case 63: case 64: case 91: case 92: case 93: case 94: case 95: case 96: case 123: case 124: case 125: case 126: return !0; default: return !1 } } function R(A) { return A = A.trim().replace(/\s+/g, " "), "ẞ".toLowerCase() === "Ṿ" && (A = A.replace(/ẞ/g, "ß")), A.toLowerCase().toUpperCase() } t.lib = {}, t.lib.mdurl = Ln, t.lib.ucmicro = uY(), t.assign = o, t.isString = n, t.has = a, t.unescapeMd = g, t.unescapeAll = b, t.isValidEntityCode = i, t.fromCodePoint = c, t.escapeHtml = _, t.arrayReplaceAt = r, t.isSpace = y, t.isWhiteSpace = T, t.isMdAsciiPunct = L, t.isPunctChar = C, t.escapeRE = M, t.normalizeReference = R })(oe); var Ba = {}, pY = function(e, n, s) { var a, o, r, i, c = -1, l = e.posMax, u = e.pos; for (e.pos = n + 1, a = 1; e.pos < l;) { if (r = e.src.charCodeAt(e.pos), r === 93 && (a--, a === 0)) { o = !0; break } if (i = e.pos, e.md.inline.skipToken(e), r === 91) { if (i === e.pos - 1) a++; else if (s) return e.pos = u, -1 } } return o && (c = e.pos), e.pos = u, c }, Ac = oe.unescapeAll, dY = function(e, n, s) { var a, o, r = 0, i = n, c = { ok: !1, pos: 0, lines: 0, str: "" }; if (e.charCodeAt(n) === 60) { for (n++; n < s;) { if (a = e.charCodeAt(n), a === 10 || a === 60) return c; if (a === 62) return c.pos = n + 1, c.str = Ac(e.slice(i + 1, n)), c.ok = !0, c; if (a === 92 && n + 1 < s) { n += 2; continue } n++ } return c } for (o = 0; n < s && (a = e.charCodeAt(n), !(a === 32 || a < 32 || a === 127));) { if (a === 92 && n + 1 < s) { if (e.charCodeAt(n + 1) === 32) break; n += 2; continue } if (a === 40 && (o++, o > 32)) return c; if (a === 41) { if (o === 0) break; o-- } n++ } return i === n || o !== 0 || (c.str = Ac(e.slice(i, n)), c.lines = r, c.pos = n, c.ok = !0), c }, mY = oe.unescapeAll, fY = function(e, n, s) { var a, o, r = 0, i = n, c = { ok: !1, pos: 0, lines: 0, str: "" }; if (n >= s || (o = e.charCodeAt(n), o !== 34 && o !== 39 && o !== 40)) return c; for (n++, o === 40 && (o = 41); n < s;) { if (a = e.charCodeAt(n), a === o) return c.pos = n + 1, c.lines = r, c.str = mY(e.slice(i + 1, n)), c.ok = !0, c; if (a === 40 && o === 41) return c; a === 10 ? r++ : a === 92 && n + 1 < s && (n++, e.charCodeAt(n) === 10 && r++), n++ } return c }; Ba.parseLinkLabel = pY; Ba.parseLinkDestination = dY; Ba.parseLinkTitle = fY; var hY = oe.assign, gY = oe.unescapeAll, Xt = oe.escapeHtml, Ct = {}; Ct.code_inline = function(t, e, n, s, a) { var o = t[e]; return "" + Xt(t[e].content) + "" }; Ct.code_block = function(t, e, n, s, a) { var o = t[e]; return "" + Xt(t[e].content) + ` ` }; Ct.fence = function(t, e, n, s, a) { var o = t[e], r = o.info ? gY(o.info).trim() : "", i = "", c = "", l, u, d, m, f; return r && (d = r.split(/(\s+)/g), i = d[0], c = d.slice(2).join("")), n.highlight ? l = n.highlight(o.content, i, c) || Xt(o.content) : l = Xt(o.content), l.indexOf("" + l + ` `) : "
" + l + `
` }; Ct.image = function(t, e, n, s, a) { var o = t[e]; return o.attrs[o.attrIndex("alt")][1] = a.renderInlineAsText(o.children, n, s), a.renderToken(t, e, n) }; Ct.hardbreak = function(t, e, n) { return n.xhtmlOut ? `
` : `
` }; Ct.softbreak = function(t, e, n) { return n.breaks ? n.xhtmlOut ? `
` : `
` : ` ` }; Ct.text = function(t, e) { return Xt(t[e].content) }; Ct.html_block = function(t, e) { return t[e].content }; Ct.html_inline = function(t, e) { return t[e].content }; function Rn() { this.rules = hY({}, Ct) } Rn.prototype.renderAttrs = function(e) { var n, s, a; if (!e.attrs) return ""; for (a = "", n = 0, s = e.attrs.length; n < s; n++) a += " " + Xt(e.attrs[n][0]) + '="' + Xt(e.attrs[n][1]) + '"'; return a }; Rn.prototype.renderToken = function(e, n, s) { var a, o = "", r = !1, i = e[n]; return i.hidden ? "" : (i.block && i.nesting !== -1 && n && e[n - 1].hidden && (o += ` `), o += (i.nesting === -1 ? " ` : ">", o) }; Rn.prototype.renderInline = function(t, e, n) { for (var s, a = "", o = this.rules, r = 0, i = t.length; r < i; r++) s = t[r].type, typeof o[s] != "undefined" ? a += o[s](t, r, e, n, this) : a += this.renderToken(t, r, e); return a }; Rn.prototype.renderInlineAsText = function(t, e, n) { for (var s = "", a = 0, o = t.length; a < o; a++) t[a].type === "text" ? s += t[a].content : t[a].type === "image" ? s += this.renderInlineAsText(t[a].children, e, n) : t[a].type === "softbreak" && (s += ` `); return s }; Rn.prototype.render = function(t, e, n) { var s, a, o, r = "", i = this.rules; for (s = 0, a = t.length; s < a; s++) o = t[s].type, o === "inline" ? r += this.renderInline(t[s].children, e, n) : typeof i[o] != "undefined" ? r += i[t[s].type](t, s, e, n, this) : r += this.renderToken(t, s, e, n); return r }; var bY = Rn; function ut() { this.__rules__ = [], this.__cache__ = null } ut.prototype.__find__ = function(t) { for (var e = 0; e < this.__rules__.length; e++) if (this.__rules__[e].name === t) return e; return -1 }; ut.prototype.__compile__ = function() { var t = this, e = [""]; t.__rules__.forEach(function(n) { n.enabled && n.alt.forEach(function(s) { e.indexOf(s) < 0 && e.push(s) }) }), t.__cache__ = {}, e.forEach(function(n) { t.__cache__[n] = [], t.__rules__.forEach(function(s) { s.enabled && (n && s.alt.indexOf(n) < 0 || t.__cache__[n].push(s.fn)) }) }) }; ut.prototype.at = function(t, e, n) { var s = this.__find__(t), a = n || {}; if (s === -1) throw new Error("Parser rule not found: " + t); this.__rules__[s].fn = e, this.__rules__[s].alt = a.alt || [], this.__cache__ = null }; ut.prototype.before = function(t, e, n, s) { var a = this.__find__(t), o = s || {}; if (a === -1) throw new Error("Parser rule not found: " + t); this.__rules__.splice(a, 0, { name: e, enabled: !0, fn: n, alt: o.alt || [] }), this.__cache__ = null }; ut.prototype.after = function(t, e, n, s) { var a = this.__find__(t), o = s || {}; if (a === -1) throw new Error("Parser rule not found: " + t); this.__rules__.splice(a + 1, 0, { name: e, enabled: !0, fn: n, alt: o.alt || [] }), this.__cache__ = null }; ut.prototype.push = function(t, e, n) { var s = n || {}; this.__rules__.push({ name: t, enabled: !0, fn: e, alt: s.alt || [] }), this.__cache__ = null }; ut.prototype.enable = function(t, e) { Array.isArray(t) || (t = [t]); var n = []; return t.forEach(function(s) { var a = this.__find__(s); if (a < 0) { if (e) return; throw new Error("Rules manager: invalid rule name " + s) } this.__rules__[a].enabled = !0, n.push(s) }, this), this.__cache__ = null, n }; ut.prototype.enableOnly = function(t, e) { Array.isArray(t) || (t = [t]), this.__rules__.forEach(function(n) { n.enabled = !1 }), this.enable(t, e) }; ut.prototype.disable = function(t, e) { Array.isArray(t) || (t = [t]); var n = []; return t.forEach(function(s) { var a = this.__find__(s); if (a < 0) { if (e) return; throw new Error("Rules manager: invalid rule name " + s) } this.__rules__[a].enabled = !1, n.push(s) }, this), this.__cache__ = null, n }; ut.prototype.getRules = function(t) { return this.__cache__ === null && this.__compile__(), this.__cache__[t] || [] }; var zr = ut, vY = /\r\n?|\n/g, xY = /\0/g, yY = function(e) { var n; n = e.src.replace(vY, ` `), n = n.replace(xY, "�"), e.src = n }, wY = function(e) { var n; e.inlineMode ? (n = new e.Token("inline", "", 0), n.content = e.src, n.map = [0, 1], n.children = [], e.tokens.push(n)) : e.md.block.parse(e.src, e.md, e.env, e.tokens) }, kY = function(e) { var n = e.tokens, s, a, o; for (a = 0, o = n.length; a < o; a++) s = n[a], s.type === "inline" && e.md.inline.parse(s.content, e.md, e.env, s.children) }, _Y = oe.arrayReplaceAt; function CY(t) { return /^\s]/i.test(t) } function EY(t) { return /^<\/a\s*>/i.test(t) } var AY = function(e) { var n, s, a, o, r, i, c, l, u, d, m, f, h, g, b, x, v = e.tokens, w; if (e.md.options.linkify) { for (s = 0, a = v.length; s < a; s++) if (!(v[s].type !== "inline" || !e.md.linkify.pretest(v[s].content))) for (o = v[s].children, h = 0, n = o.length - 1; n >= 0; n--) { if (i = o[n], i.type === "link_close") { for (n--; o[n].level !== i.level && o[n].type !== "link_open";) n--; continue } if (i.type === "html_inline" && (CY(i.content) && h > 0 && h--, EY(i.content) && h++), !(h > 0) && i.type === "text" && e.md.linkify.test(i.content)) { for (u = i.content, w = e.md.linkify.match(u), c = [], f = i.level, m = 0, w.length > 0 && w[0].index === 0 && n > 0 && o[n - 1].type === "text_special" && (w = w.slice(1)), l = 0; l < w.length; l++) g = w[l].url, b = e.md.normalizeLink(g), e.md.validateLink(b) && (x = w[l].text, w[l].schema ? w[l].schema === "mailto:" && !/^mailto:/i.test(x) ? x = e.md.normalizeLinkText("mailto:" + x).replace(/^mailto:/, "") : x = e.md.normalizeLinkText(x) : x = e.md.normalizeLinkText("http://" + x).replace(/^http:\/\//, ""), d = w[l].index, d > m && (r = new e.Token("text", "", 0), r.content = u.slice(m, d), r.level = f, c.push(r)), r = new e.Token("link_open", "a", 1), r.attrs = [ ["href", b] ], r.level = f++, r.markup = "linkify", r.info = "auto", c.push(r), r = new e.Token("text", "", 0), r.content = x, r.level = f, c.push(r), r = new e.Token("link_close", "a", -1), r.level = --f, r.markup = "linkify", r.info = "auto", c.push(r), m = w[l].lastIndex); m < u.length && (r = new e.Token("text", "", 0), r.content = u.slice(m), r.level = f, c.push(r)), v[s].children = o = _Y(o, n, c) } } } }, kp = /\+-|\.\.|\?\?\?\?|!!!!|,,|--/, SY = /\((c|tm|r)\)/i, TY = /\((c|tm|r)\)/ig, DY = { c: "©", r: "®", tm: "™" }; function IY(t, e) { return DY[e.toLowerCase()] } function NY(t) { var e, n, s = 0; for (e = t.length - 1; e >= 0; e--) n = t[e], n.type === "text" && !s && (n.content = n.content.replace(TY, IY)), n.type === "link_open" && n.info === "auto" && s--, n.type === "link_close" && n.info === "auto" && s++ } function MY(t) { var e, n, s = 0; for (e = t.length - 1; e >= 0; e--) n = t[e], n.type === "text" && !s && kp.test(n.content) && (n.content = n.content.replace(/\+-/g, "±").replace(/\.{2,}/g, "…").replace(/([?!])…/g, "$1..").replace(/([?!]){4,}/g, "$1$1$1").replace(/,{2,}/g, ",").replace(/(^|[^-])---(?=[^-]|$)/mg, "$1—").replace(/(^|\s)--(?=\s|$)/mg, "$1–").replace(/(^|[^-\s])--(?=[^-\s]|$)/mg, "$1–")), n.type === "link_open" && n.info === "auto" && s--, n.type === "link_close" && n.info === "auto" && s++ } var OY = function(e) { var n; if (e.md.options.typographer) for (n = e.tokens.length - 1; n >= 0; n--) e.tokens[n].type === "inline" && (SY.test(e.tokens[n].content) && NY(e.tokens[n].children), kp.test(e.tokens[n].content) && MY(e.tokens[n].children)) }, Sc = oe.isWhiteSpace, Tc = oe.isPunctChar, Dc = oe.isMdAsciiPunct, LY = /['"]/, Ic = /['"]/g, Nc = "’"; function Rs(t, e, n) { return t.slice(0, e) + n + t.slice(e + 1) } function RY(t, e) { var n, s, a, o, r, i, c, l, u, d, m, f, h, g, b, x, v, w, E, _, k; for (E = [], n = 0; n < t.length; n++) { for (s = t[n], c = t[n].level, v = E.length - 1; v >= 0 && !(E[v].level <= c); v--); if (E.length = v + 1, s.type === "text") { a = s.content, r = 0, i = a.length; e: for (; r < i && (Ic.lastIndex = r, o = Ic.exec(a), !!o);) { if (b = x = !0, r = o.index + 1, w = o[0] === "'", u = 32, o.index - 1 >= 0) u = a.charCodeAt(o.index - 1); else for (v = n - 1; v >= 0 && !(t[v].type === "softbreak" || t[v].type === "hardbreak"); v--) if (t[v].content) { u = t[v].content.charCodeAt(t[v].content.length - 1); break } if (d = 32, r < i) d = a.charCodeAt(r); else for (v = n + 1; v < t.length && !(t[v].type === "softbreak" || t[v].type === "hardbreak"); v++) if (t[v].content) { d = t[v].content.charCodeAt(0); break } if (m = Dc(u) || Tc(String.fromCharCode(u)), f = Dc(d) || Tc(String.fromCharCode(d)), h = Sc(u), g = Sc(d), g ? b = !1 : f && (h || m || (b = !1)), h ? x = !1 : m && (g || f || (x = !1)), d === 34 && o[0] === '"' && u >= 48 && u <= 57 && (x = b = !1), b && x && (b = m, x = f), !b && !x) { w && (s.content = Rs(s.content, o.index, Nc)); continue } if (x) { for (v = E.length - 1; v >= 0 && (l = E[v], !(E[v].level < c)); v--) if (l.single === w && E[v].level === c) { l = E[v], w ? (_ = e.md.options.quotes[2], k = e.md.options.quotes[3]) : (_ = e.md.options.quotes[0], k = e.md.options.quotes[1]), s.content = Rs(s.content, o.index, k), t[l.token].content = Rs(t[l.token].content, l.pos, _), r += k.length - 1, l.token === n && (r += _.length - 1), a = s.content, i = a.length, E.length = v; continue e } } b ? E.push({ token: n, pos: o.index, single: w, level: c }) : x && w && (s.content = Rs(s.content, o.index, Nc)) } } } } var PY = function(e) { var n; if (e.md.options.typographer) for (n = e.tokens.length - 1; n >= 0; n--) e.tokens[n].type !== "inline" || !LY.test(e.tokens[n].content) || RY(e.tokens[n].children, e) }, BY = function(e) { var n, s, a, o, r, i, c = e.tokens; for (n = 0, s = c.length; n < s; n++) if (c[n].type === "inline") { for (a = c[n].children, r = a.length, o = 0; o < r; o++) a[o].type === "text_special" && (a[o].type = "text"); for (o = i = 0; o < r; o++) a[o].type === "text" && o + 1 < r && a[o + 1].type === "text" ? a[o + 1].content = a[o].content + a[o + 1].content : (o !== i && (a[i] = a[o]), i++); o !== i && (a.length = i) } }; function Pn(t, e, n) { this.type = t, this.tag = e, this.attrs = null, this.map = null, this.nesting = n, this.level = 0, this.children = null, this.content = "", this.markup = "", this.info = "", this.meta = null, this.block = !1, this.hidden = !1 } Pn.prototype.attrIndex = function(e) { var n, s, a; if (!this.attrs) return -1; for (n = this.attrs, s = 0, a = n.length; s < a; s++) if (n[s][0] === e) return s; return -1 }; Pn.prototype.attrPush = function(e) { this.attrs ? this.attrs.push(e) : this.attrs = [e] }; Pn.prototype.attrSet = function(e, n) { var s = this.attrIndex(e), a = [e, n]; s < 0 ? this.attrPush(a) : this.attrs[s] = a }; Pn.prototype.attrGet = function(e) { var n = this.attrIndex(e), s = null; return n >= 0 && (s = this.attrs[n][1]), s }; Pn.prototype.attrJoin = function(e, n) { var s = this.attrIndex(e); s < 0 ? this.attrPush([e, n]) : this.attrs[s][1] = this.attrs[s][1] + " " + n }; var qr = Pn, zY = qr; function _p(t, e, n) { this.src = t, this.env = n, this.tokens = [], this.inlineMode = !1, this.md = e } _p.prototype.Token = zY; var qY = _p, FY = zr, po = [ ["normalize", yY], ["block", wY], ["inline", kY], ["linkify", AY], ["replacements", OY], ["smartquotes", PY], ["text_join", BY] ]; function Fr() { this.ruler = new FY; for (var t = 0; t < po.length; t++) this.ruler.push(po[t][0], po[t][1]) } Fr.prototype.process = function(t) { var e, n, s; for (s = this.ruler.getRules(""), e = 0, n = s.length; e < n; e++) s[e](t) }; Fr.prototype.State = qY; var jY = Fr, mo = oe.isSpace; function fo(t, e) { var n = t.bMarks[e] + t.tShift[e], s = t.eMarks[e]; return t.src.slice(n, s) } function Mc(t) { var e = [], n = 0, s = t.length, a, o = !1, r = 0, i = ""; for (a = t.charCodeAt(n); n < s;) a === 124 && (o ? (i += t.substring(r, n - 1), r = n) : (e.push(i + t.substring(r, n)), i = "", r = n + 1)), o = a === 92, n++, a = t.charCodeAt(n); return e.push(i + t.substring(r)), e } var $Y = function(e, n, s, a) { var o, r, i, c, l, u, d, m, f, h, g, b, x, v, w, E, _, k; if (n + 2 > s || (u = n + 1, e.sCount[u] < e.blkIndent) || e.sCount[u] - e.blkIndent >= 4 || (i = e.bMarks[u] + e.tShift[u], i >= e.eMarks[u]) || (_ = e.src.charCodeAt(i++), _ !== 124 && _ !== 45 && _ !== 58) || i >= e.eMarks[u] || (k = e.src.charCodeAt(i++), k !== 124 && k !== 45 && k !== 58 && !mo(k)) || _ === 45 && mo(k)) return !1; for (; i < e.eMarks[u];) { if (o = e.src.charCodeAt(i), o !== 124 && o !== 45 && o !== 58 && !mo(o)) return !1; i++ } for (r = fo(e, n + 1), d = r.split("|"), h = [], c = 0; c < d.length; c++) { if (g = d[c].trim(), !g) { if (c === 0 || c === d.length - 1) continue; return !1 } if (!/^:?-+:?$/.test(g)) return !1; g.charCodeAt(g.length - 1) === 58 ? h.push(g.charCodeAt(0) === 58 ? "center" : "right") : g.charCodeAt(0) === 58 ? h.push("left") : h.push("") } if (r = fo(e, n).trim(), r.indexOf("|") === -1 || e.sCount[n] - e.blkIndent >= 4 || (d = Mc(r), d.length && d[0] === "" && d.shift(), d.length && d[d.length - 1] === "" && d.pop(), m = d.length, m === 0 || m !== h.length)) return !1; if (a) return !0; for (v = e.parentType, e.parentType = "table", E = e.md.block.ruler.getRules("blockquote"), f = e.push("table_open", "table", 1), f.map = b = [n, 0], f = e.push("thead_open", "thead", 1), f.map = [n, n + 1], f = e.push("tr_open", "tr", 1), f.map = [n, n + 1], c = 0; c < d.length; c++) f = e.push("th_open", "th", 1), h[c] && (f.attrs = [ ["style", "text-align:" + h[c]] ]), f = e.push("inline", "", 0), f.content = d[c].trim(), f.children = [], f = e.push("th_close", "th", -1); for (f = e.push("tr_close", "tr", -1), f = e.push("thead_close", "thead", -1), u = n + 2; u < s && !(e.sCount[u] < e.blkIndent); u++) { for (w = !1, c = 0, l = E.length; c < l; c++) if (E[c](e, u, s, !0)) { w = !0; break } if (w || (r = fo(e, u).trim(), !r) || e.sCount[u] - e.blkIndent >= 4) break; for (d = Mc(r), d.length && d[0] === "" && d.shift(), d.length && d[d.length - 1] === "" && d.pop(), u === n + 2 && (f = e.push("tbody_open", "tbody", 1), f.map = x = [n + 2, 0]), f = e.push("tr_open", "tr", 1), f.map = [u, u + 1], c = 0; c < m; c++) f = e.push("td_open", "td", 1), h[c] && (f.attrs = [ ["style", "text-align:" + h[c]] ]), f = e.push("inline", "", 0), f.content = d[c] ? d[c].trim() : "", f.children = [], f = e.push("td_close", "td", -1); f = e.push("tr_close", "tr", -1) } return x && (f = e.push("tbody_close", "tbody", -1), x[1] = u), f = e.push("table_close", "table", -1), b[1] = u, e.parentType = v, e.line = u, !0 }, UY = function(e, n, s) { var a, o, r; if (e.sCount[n] - e.blkIndent < 4) return !1; for (o = a = n + 1; a < s;) { if (e.isEmpty(a)) { a++; continue } if (e.sCount[a] - e.blkIndent >= 4) { a++, o = a; continue } break } return e.line = o, r = e.push("code_block", "code", 0), r.content = e.getLines(n, o, 4 + e.blkIndent, !1) + ` `, r.map = [n, e.line], !0 }, VY = function(e, n, s, a) { var o, r, i, c, l, u, d, m = !1, f = e.bMarks[n] + e.tShift[n], h = e.eMarks[n]; if (e.sCount[n] - e.blkIndent >= 4 || f + 3 > h || (o = e.src.charCodeAt(f), o !== 126 && o !== 96) || (l = f, f = e.skipChars(f, o), r = f - l, r < 3) || (d = e.src.slice(l, f), i = e.src.slice(f, h), o === 96 && i.indexOf(String.fromCharCode(o)) >= 0)) return !1; if (a) return !0; for (c = n; c++, !(c >= s || (f = l = e.bMarks[c] + e.tShift[c], h = e.eMarks[c], f < h && e.sCount[c] < e.blkIndent));) if (e.src.charCodeAt(f) === o && !(e.sCount[c] - e.blkIndent >= 4) && (f = e.skipChars(f, o), !(f - l < r) && (f = e.skipSpaces(f), !(f < h)))) { m = !0; break } return r = e.sCount[n], e.line = c + (m ? 1 : 0), u = e.push("fence", "code", 0), u.info = i, u.content = e.getLines(n + 1, c, r, !0), u.markup = d, u.map = [n, e.line], !0 }, Oc = oe.isSpace, HY = function(e, n, s, a) { var o, r, i, c, l, u, d, m, f, h, g, b, x, v, w, E, _, k, M, y, T = e.lineMax, D = e.bMarks[n] + e.tShift[n], C = e.eMarks[n]; if (e.sCount[n] - e.blkIndent >= 4 || e.src.charCodeAt(D++) !== 62) return !1; if (a) return !0; for (c = f = e.sCount[n] + 1, e.src.charCodeAt(D) === 32 ? (D++, c++, f++, o = !1, E = !0) : e.src.charCodeAt(D) === 9 ? (E = !0, (e.bsCount[n] + f) % 4 === 3 ? (D++, c++, f++, o = !1) : o = !0) : E = !1, h = [e.bMarks[n]], e.bMarks[n] = D; D < C && (r = e.src.charCodeAt(D), Oc(r));) { r === 9 ? f += 4 - (f + e.bsCount[n] + (o ? 1 : 0)) % 4 : f++; D++ } for (g = [e.bsCount[n]], e.bsCount[n] = e.sCount[n] + 1 + (E ? 1 : 0), u = D >= C, v = [e.sCount[n]], e.sCount[n] = f - c, w = [e.tShift[n]], e.tShift[n] = D - e.bMarks[n], k = e.md.block.ruler.getRules("blockquote"), x = e.parentType, e.parentType = "blockquote", m = n + 1; m < s && (y = e.sCount[m] < e.blkIndent, D = e.bMarks[m] + e.tShift[m], C = e.eMarks[m], !(D >= C)); m++) { if (e.src.charCodeAt(D++) === 62 && !y) { for (c = f = e.sCount[m] + 1, e.src.charCodeAt(D) === 32 ? (D++, c++, f++, o = !1, E = !0) : e.src.charCodeAt(D) === 9 ? (E = !0, (e.bsCount[m] + f) % 4 === 3 ? (D++, c++, f++, o = !1) : o = !0) : E = !1, h.push(e.bMarks[m]), e.bMarks[m] = D; D < C && (r = e.src.charCodeAt(D), Oc(r));) { r === 9 ? f += 4 - (f + e.bsCount[m] + (o ? 1 : 0)) % 4 : f++; D++ } u = D >= C, g.push(e.bsCount[m]), e.bsCount[m] = e.sCount[m] + 1 + (E ? 1 : 0), v.push(e.sCount[m]), e.sCount[m] = f - c, w.push(e.tShift[m]), e.tShift[m] = D - e.bMarks[m]; continue } if (u) break; for (_ = !1, i = 0, l = k.length; i < l; i++) if (k[i](e, m, s, !0)) { _ = !0; break } if (_) { e.lineMax = m, e.blkIndent !== 0 && (h.push(e.bMarks[m]), g.push(e.bsCount[m]), w.push(e.tShift[m]), v.push(e.sCount[m]), e.sCount[m] -= e.blkIndent); break } h.push(e.bMarks[m]), g.push(e.bsCount[m]), w.push(e.tShift[m]), v.push(e.sCount[m]), e.sCount[m] = -1 } for (b = e.blkIndent, e.blkIndent = 0, M = e.push("blockquote_open", "blockquote", 1), M.markup = ">", M.map = d = [n, 0], e.md.block.tokenize(e, n, m), M = e.push("blockquote_close", "blockquote", -1), M.markup = ">", e.lineMax = T, e.parentType = x, d[1] = e.line, i = 0; i < w.length; i++) e.bMarks[i + n] = h[i], e.tShift[i + n] = w[i], e.sCount[i + n] = v[i], e.bsCount[i + n] = g[i]; return e.blkIndent = b, !0 }, GY = oe.isSpace, WY = function(e, n, s, a) { var o, r, i, c, l = e.bMarks[n] + e.tShift[n], u = e.eMarks[n]; if (e.sCount[n] - e.blkIndent >= 4 || (o = e.src.charCodeAt(l++), o !== 42 && o !== 45 && o !== 95)) return !1; for (r = 1; l < u;) { if (i = e.src.charCodeAt(l++), i !== o && !GY(i)) return !1; i === o && r++ } return r < 3 ? !1 : (a || (e.line = n + 1, c = e.push("hr", "hr", 0), c.map = [n, e.line], c.markup = Array(r + 1).join(String.fromCharCode(o))), !0) }, Cp = oe.isSpace; function Lc(t, e) { var n, s, a, o; return s = t.bMarks[e] + t.tShift[e], a = t.eMarks[e], n = t.src.charCodeAt(s++), n !== 42 && n !== 45 && n !== 43 || s < a && (o = t.src.charCodeAt(s), !Cp(o)) ? -1 : s } function Rc(t, e) { var n, s = t.bMarks[e] + t.tShift[e], a = s, o = t.eMarks[e]; if (a + 1 >= o || (n = t.src.charCodeAt(a++), n < 48 || n > 57)) return -1; for (;;) { if (a >= o) return -1; if (n = t.src.charCodeAt(a++), n >= 48 && n <= 57) { if (a - s >= 10) return -1; continue } if (n === 41 || n === 46) break; return -1 } return a < o && (n = t.src.charCodeAt(a), !Cp(n)) ? -1 : a } function JY(t, e) { var n, s, a = t.level + 2; for (n = e + 2, s = t.tokens.length - 2; n < s; n++) t.tokens[n].level === a && t.tokens[n].type === "paragraph_open" && (t.tokens[n + 2].hidden = !0, t.tokens[n].hidden = !0, n += 2) } var YY = function(e, n, s, a) { var o, r, i, c, l, u, d, m, f, h, g, b, x, v, w, E, _, k, M, y, T, D, C, L, R, A, I, O, B = !1, j = !0; if (e.sCount[n] - e.blkIndent >= 4 || e.listIndent >= 0 && e.sCount[n] - e.listIndent >= 4 && e.sCount[n] < e.blkIndent) return !1; if (a && e.parentType === "paragraph" && e.sCount[n] >= e.blkIndent && (B = !0), (C = Rc(e, n)) >= 0) { if (d = !0, R = e.bMarks[n] + e.tShift[n], x = Number(e.src.slice(R, C - 1)), B && x !== 1) return !1 } else if ((C = Lc(e, n)) >= 0) d = !1; else return !1; if (B && e.skipSpaces(C) >= e.eMarks[n]) return !1; if (b = e.src.charCodeAt(C - 1), a) return !0; for (g = e.tokens.length, d ? (O = e.push("ordered_list_open", "ol", 1), x !== 1 && (O.attrs = [ ["start", x] ])) : O = e.push("bullet_list_open", "ul", 1), O.map = h = [n, 0], O.markup = String.fromCharCode(b), w = n, L = !1, I = e.md.block.ruler.getRules("list"), k = e.parentType, e.parentType = "list"; w < s;) { for (D = C, v = e.eMarks[w], u = E = e.sCount[w] + C - (e.bMarks[n] + e.tShift[n]); D < v;) { if (o = e.src.charCodeAt(D), o === 9) E += 4 - (E + e.bsCount[w]) % 4; else if (o === 32) E++; else break; D++ } if (r = D, r >= v ? l = 1 : l = E - u, l > 4 && (l = 1), c = u + l, O = e.push("list_item_open", "li", 1), O.markup = String.fromCharCode(b), O.map = m = [n, 0], d && (O.info = e.src.slice(R, C - 1)), T = e.tight, y = e.tShift[n], M = e.sCount[n], _ = e.listIndent, e.listIndent = e.blkIndent, e.blkIndent = c, e.tight = !0, e.tShift[n] = r - e.bMarks[n], e.sCount[n] = E, r >= v && e.isEmpty(n + 1) ? e.line = Math.min(e.line + 2, s) : e.md.block.tokenize(e, n, s, !0), (!e.tight || L) && (j = !1), L = e.line - n > 1 && e.isEmpty(e.line - 1), e.blkIndent = e.listIndent, e.listIndent = _, e.tShift[n] = y, e.sCount[n] = M, e.tight = T, O = e.push("list_item_close", "li", -1), O.markup = String.fromCharCode(b), w = n = e.line, m[1] = w, r = e.bMarks[n], w >= s || e.sCount[w] < e.blkIndent || e.sCount[n] - e.blkIndent >= 4) break; for (A = !1, i = 0, f = I.length; i < f; i++) if (I[i](e, w, s, !0)) { A = !0; break } if (A) break; if (d) { if (C = Rc(e, w), C < 0) break; R = e.bMarks[w] + e.tShift[w] } else if (C = Lc(e, w), C < 0) break; if (b !== e.src.charCodeAt(C - 1)) break } return d ? O = e.push("ordered_list_close", "ol", -1) : O = e.push("bullet_list_close", "ul", -1), O.markup = String.fromCharCode(b), h[1] = w, e.line = w, e.parentType = k, j && JY(e, g), !0 }, KY = oe.normalizeReference, Ps = oe.isSpace, XY = function(e, n, s, a) { var o, r, i, c, l, u, d, m, f, h, g, b, x, v, w, E, _ = 0, k = e.bMarks[n] + e.tShift[n], M = e.eMarks[n], y = n + 1; if (e.sCount[n] - e.blkIndent >= 4 || e.src.charCodeAt(k) !== 91) return !1; for (; ++k < M;) if (e.src.charCodeAt(k) === 93 && e.src.charCodeAt(k - 1) !== 92) { if (k + 1 === M || e.src.charCodeAt(k + 1) !== 58) return !1; break } for (c = e.lineMax, w = e.md.block.ruler.getRules("reference"), h = e.parentType, e.parentType = "reference"; y < c && !e.isEmpty(y); y++) if (!(e.sCount[y] - e.blkIndent > 3) && !(e.sCount[y] < 0)) { for (v = !1, u = 0, d = w.length; u < d; u++) if (w[u](e, y, c, !0)) { v = !0; break } if (v) break } for (x = e.getLines(n, y, e.blkIndent, !1).trim(), M = x.length, k = 1; k < M; k++) { if (o = x.charCodeAt(k), o === 91) return !1; if (o === 93) { f = k; break } else o === 10 ? _++ : o === 92 && (k++, k < M && x.charCodeAt(k) === 10 && _++) } if (f < 0 || x.charCodeAt(f + 1) !== 58) return !1; for (k = f + 2; k < M; k++) if (o = x.charCodeAt(k), o === 10) _++; else if (!Ps(o)) break; if (g = e.md.helpers.parseLinkDestination(x, k, M), !g.ok || (l = e.md.normalizeLink(g.str), !e.md.validateLink(l))) return !1; for (k = g.pos, _ += g.lines, r = k, i = _, b = k; k < M; k++) if (o = x.charCodeAt(k), o === 10) _++; else if (!Ps(o)) break; for (g = e.md.helpers.parseLinkTitle(x, k, M), k < M && b !== k && g.ok ? (E = g.str, k = g.pos, _ += g.lines) : (E = "", k = r, _ = i); k < M && (o = x.charCodeAt(k), !!Ps(o));) k++; if (k < M && x.charCodeAt(k) !== 10 && E) for (E = "", k = r, _ = i; k < M && (o = x.charCodeAt(k), !!Ps(o));) k++; return k < M && x.charCodeAt(k) !== 10 || (m = KY(x.slice(1, f)), !m) ? !1 : (a || (typeof e.env.references == "undefined" && (e.env.references = {}), typeof e.env.references[m] == "undefined" && (e.env.references[m] = { title: E, href: l }), e.parentType = h, e.line = n + _ + 1), !0) }, ZY = ["address", "article", "aside", "base", "basefont", "blockquote", "body", "caption", "center", "col", "colgroup", "dd", "details", "dialog", "dir", "div", "dl", "dt", "fieldset", "figcaption", "figure", "footer", "form", "frame", "frameset", "h1", "h2", "h3", "h4", "h5", "h6", "head", "header", "hr", "html", "iframe", "legend", "li", "link", "main", "menu", "menuitem", "nav", "noframes", "ol", "optgroup", "option", "p", "param", "section", "source", "summary", "table", "tbody", "td", "tfoot", "th", "thead", "title", "tr", "track", "ul"], za = {}, QY = "[a-zA-Z_:][a-zA-Z0-9:._-]*", eK = "[^\"'=<>`\\x00-\\x20]+", tK = "'[^']*'", nK = '"[^"]*"', sK = "(?:" + eK + "|" + tK + "|" + nK + ")", aK = "(?:\\s+" + QY + "(?:\\s*=\\s*" + sK + ")?)", Ep = "<[A-Za-z][A-Za-z0-9\\-]*" + aK + "*\\s*\\/?>", Ap = "<\\/[A-Za-z][A-Za-z0-9\\-]*\\s*>", oK = "|", rK = "<[?][\\s\\S]*?[?]>", iK = "]*>", cK = "", lK = new RegExp("^(?:" + Ep + "|" + Ap + "|" + oK + "|" + rK + "|" + iK + "|" + cK + ")"), uK = new RegExp("^(?:" + Ep + "|" + Ap + ")"); za.HTML_TAG_RE = lK; za.HTML_OPEN_CLOSE_TAG_RE = uK; var pK = ZY, dK = za.HTML_OPEN_CLOSE_TAG_RE, un = [ [/^<(script|pre|style|textarea)(?=(\s|>|$))/i, /<\/(script|pre|style|textarea)>/i, !0], [/^/, !0], [/^<\?/, /\?>/, !0], [/^/, !0], [/^/, !0], [new RegExp("^|$))", "i"), /^$/, !0], [new RegExp(dK.source + "\\s*$"), /^$/, !1] ], mK = function(e, n, s, a) { var o, r, i, c, l = e.bMarks[n] + e.tShift[n], u = e.eMarks[n]; if (e.sCount[n] - e.blkIndent >= 4 || !e.md.options.html || e.src.charCodeAt(l) !== 60) return !1; for (c = e.src.slice(l, u), o = 0; o < un.length && !un[o][0].test(c); o++); if (o === un.length) return !1; if (a) return un[o][2]; if (r = n + 1, !un[o][1].test(c)) { for (; r < s && !(e.sCount[r] < e.blkIndent); r++) if (l = e.bMarks[r] + e.tShift[r], u = e.eMarks[r], c = e.src.slice(l, u), un[o][1].test(c)) { c.length !== 0 && r++; break } } return e.line = r, i = e.push("html_block", "", 0), i.map = [n, r], i.content = e.getLines(n, r, e.blkIndent, !0), !0 }, Pc = oe.isSpace, fK = function(e, n, s, a) { var o, r, i, c, l = e.bMarks[n] + e.tShift[n], u = e.eMarks[n]; if (e.sCount[n] - e.blkIndent >= 4 || (o = e.src.charCodeAt(l), o !== 35 || l >= u)) return !1; for (r = 1, o = e.src.charCodeAt(++l); o === 35 && l < u && r <= 6;) r++, o = e.src.charCodeAt(++l); return r > 6 || l < u && !Pc(o) ? !1 : (a || (u = e.skipSpacesBack(u, l), i = e.skipCharsBack(u, 35, l), i > l && Pc(e.src.charCodeAt(i - 1)) && (u = i), e.line = n + 1, c = e.push("heading_open", "h" + String(r), 1), c.markup = "########".slice(0, r), c.map = [n, e.line], c = e.push("inline", "", 0), c.content = e.src.slice(l, u).trim(), c.map = [n, e.line], c.children = [], c = e.push("heading_close", "h" + String(r), -1), c.markup = "########".slice(0, r)), !0) }, hK = function(e, n, s) { var a, o, r, i, c, l, u, d, m, f = n + 1, h, g = e.md.block.ruler.getRules("paragraph"); if (e.sCount[n] - e.blkIndent >= 4) return !1; for (h = e.parentType, e.parentType = "paragraph"; f < s && !e.isEmpty(f); f++) if (!(e.sCount[f] - e.blkIndent > 3)) { if (e.sCount[f] >= e.blkIndent && (l = e.bMarks[f] + e.tShift[f], u = e.eMarks[f], l < u && (m = e.src.charCodeAt(l), (m === 45 || m === 61) && (l = e.skipChars(l, m), l = e.skipSpaces(l), l >= u)))) { d = m === 61 ? 1 : 2; break } if (!(e.sCount[f] < 0)) { for (o = !1, r = 0, i = g.length; r < i; r++) if (g[r](e, f, s, !0)) { o = !0; break } if (o) break } } return d ? (a = e.getLines(n, f, e.blkIndent, !1).trim(), e.line = f + 1, c = e.push("heading_open", "h" + String(d), 1), c.markup = String.fromCharCode(m), c.map = [n, e.line], c = e.push("inline", "", 0), c.content = a, c.map = [n, e.line - 1], c.children = [], c = e.push("heading_close", "h" + String(d), -1), c.markup = String.fromCharCode(m), e.parentType = h, !0) : !1 }, gK = function(e, n) { var s, a, o, r, i, c, l = n + 1, u = e.md.block.ruler.getRules("paragraph"), d = e.lineMax; for (c = e.parentType, e.parentType = "paragraph"; l < d && !e.isEmpty(l); l++) if (!(e.sCount[l] - e.blkIndent > 3) && !(e.sCount[l] < 0)) { for (a = !1, o = 0, r = u.length; o < r; o++) if (u[o](e, l, d, !0)) { a = !0; break } if (a) break } return s = e.getLines(n, l, e.blkIndent, !1).trim(), e.line = l, i = e.push("paragraph_open", "p", 1), i.map = [n, e.line], i = e.push("inline", "", 0), i.content = s, i.map = [n, e.line], i.children = [], i = e.push("paragraph_close", "p", -1), e.parentType = c, !0 }, Sp = qr, qa = oe.isSpace; function Et(t, e, n, s) { var a, o, r, i, c, l, u, d; for (this.src = t, this.md = e, this.env = n, this.tokens = s, this.bMarks = [], this.eMarks = [], this.tShift = [], this.sCount = [], this.bsCount = [], this.blkIndent = 0, this.line = 0, this.lineMax = 0, this.tight = !1, this.ddIndent = -1, this.listIndent = -1, this.parentType = "root", this.level = 0, this.result = "", o = this.src, d = !1, r = i = l = u = 0, c = o.length; i < c; i++) { if (a = o.charCodeAt(i), !d) if (qa(a)) { l++, a === 9 ? u += 4 - u % 4 : u++; continue } else d = !0; (a === 10 || i === c - 1) && (a !== 10 && i++, this.bMarks.push(r), this.eMarks.push(i), this.tShift.push(l), this.sCount.push(u), this.bsCount.push(0), d = !1, l = 0, u = 0, r = i + 1) } this.bMarks.push(o.length), this.eMarks.push(o.length), this.tShift.push(0), this.sCount.push(0), this.bsCount.push(0), this.lineMax = this.bMarks.length - 1 } Et.prototype.push = function(t, e, n) { var s = new Sp(t, e, n); return s.block = !0, n < 0 && this.level--, s.level = this.level, n > 0 && this.level++, this.tokens.push(s), s }; Et.prototype.isEmpty = function(e) { return this.bMarks[e] + this.tShift[e] >= this.eMarks[e] }; Et.prototype.skipEmptyLines = function(e) { for (var n = this.lineMax; e < n && !(this.bMarks[e] + this.tShift[e] < this.eMarks[e]); e++); return e }; Et.prototype.skipSpaces = function(e) { for (var n, s = this.src.length; e < s && (n = this.src.charCodeAt(e), !!qa(n)); e++); return e }; Et.prototype.skipSpacesBack = function(e, n) { if (e <= n) return e; for (; e > n;) if (!qa(this.src.charCodeAt(--e))) return e + 1; return e }; Et.prototype.skipChars = function(e, n) { for (var s = this.src.length; e < s && this.src.charCodeAt(e) === n; e++); return e }; Et.prototype.skipCharsBack = function(e, n, s) { if (e <= s) return e; for (; e > s;) if (n !== this.src.charCodeAt(--e)) return e + 1; return e }; Et.prototype.getLines = function(e, n, s, a) { var o, r, i, c, l, u, d, m = e; if (e >= n) return ""; for (u = new Array(n - e), o = 0; m < n; m++, o++) { for (r = 0, d = c = this.bMarks[m], m + 1 < n || a ? l = this.eMarks[m] + 1 : l = this.eMarks[m]; c < l && r < s;) { if (i = this.src.charCodeAt(c), qa(i)) i === 9 ? r += 4 - (r + this.bsCount[m]) % 4 : r++; else if (c - d < this.tShift[m]) r++; else break; c++ } r > s ? u[o] = new Array(r - s + 1).join(" ") + this.src.slice(c, l) : u[o] = this.src.slice(c, l) } return u.join("") }; Et.prototype.Token = Sp; var bK = Et, vK = zr, Bs = [ ["table", $Y, ["paragraph", "reference"]], ["code", UY], ["fence", VY, ["paragraph", "reference", "blockquote", "list"]], ["blockquote", HY, ["paragraph", "reference", "blockquote", "list"]], ["hr", WY, ["paragraph", "reference", "blockquote", "list"]], ["list", YY, ["paragraph", "reference", "blockquote"]], ["reference", XY], ["html_block", mK, ["paragraph", "reference", "blockquote"]], ["heading", fK, ["paragraph", "reference", "blockquote"]], ["lheading", hK], ["paragraph", gK] ]; function Fa() { this.ruler = new vK; for (var t = 0; t < Bs.length; t++) this.ruler.push(Bs[t][0], Bs[t][1], { alt: (Bs[t][2] || []).slice() }) } Fa.prototype.tokenize = function(t, e, n) { for (var s, a, o = this.ruler.getRules(""), r = o.length, i = e, c = !1, l = t.md.options.maxNesting; i < n && (t.line = i = t.skipEmptyLines(i), !(i >= n || t.sCount[i] < t.blkIndent));) { if (t.level >= l) { t.line = n; break } for (a = 0; a < r && (s = o[a](t, i, n, !1), !s); a++); t.tight = !c, t.isEmpty(t.line - 1) && (c = !0), i = t.line, i < n && t.isEmpty(i) && (c = !0, i++, t.line = i) } }; Fa.prototype.parse = function(t, e, n, s) { var a; t && (a = new this.State(t, e, n, s), this.tokenize(a, a.line, a.lineMax)) }; Fa.prototype.State = bK; var xK = Fa; function yK(t) { switch (t) { case 10: case 33: case 35: case 36: case 37: case 38: case 42: case 43: case 45: case 58: case 60: case 61: case 62: case 64: case 91: case 92: case 93: case 94: case 95: case 96: case 123: case 125: case 126: return !0; default: return !1 } } var wK = function(e, n) { for (var s = e.pos; s < e.posMax && !yK(e.src.charCodeAt(s));) s++; return s === e.pos ? !1 : (n || (e.pending += e.src.slice(e.pos, s)), e.pos = s, !0) }, kK = /(?:^|[^a-z0-9.+-])([a-z][a-z0-9.+-]*)$/i, _K = function(e, n) { var s, a, o, r, i, c, l, u; return !e.md.options.linkify || e.linkLevel > 0 || (s = e.pos, a = e.posMax, s + 3 > a) || e.src.charCodeAt(s) !== 58 || e.src.charCodeAt(s + 1) !== 47 || e.src.charCodeAt(s + 2) !== 47 || (o = e.pending.match(kK), !o) || (r = o[1], i = e.md.linkify.matchAtStart(e.src.slice(s - r.length)), !i) || (c = i.url, c = c.replace(/\*+$/, ""), l = e.md.normalizeLink(c), !e.md.validateLink(l)) ? !1 : (n || (e.pending = e.pending.slice(0, -r.length), u = e.push("link_open", "a", 1), u.attrs = [ ["href", l] ], u.markup = "linkify", u.info = "auto", u = e.push("text", "", 0), u.content = e.md.normalizeLinkText(c), u = e.push("link_close", "a", -1), u.markup = "linkify", u.info = "auto"), e.pos += c.length - r.length, !0) }, CK = oe.isSpace, EK = function(e, n) { var s, a, o, r = e.pos; if (e.src.charCodeAt(r) !== 10) return !1; if (s = e.pending.length - 1, a = e.posMax, !n) if (s >= 0 && e.pending.charCodeAt(s) === 32) if (s >= 1 && e.pending.charCodeAt(s - 1) === 32) { for (o = s - 1; o >= 1 && e.pending.charCodeAt(o - 1) === 32;) o--; e.pending = e.pending.slice(0, o), e.push("hardbreak", "br", 0) } else e.pending = e.pending.slice(0, -1), e.push("softbreak", "br", 0); else e.push("softbreak", "br", 0); for (r++; r < a && CK(e.src.charCodeAt(r));) r++; return e.pos = r, !0 }, AK = oe.isSpace, jr = []; for (var Bc = 0; Bc < 256; Bc++) jr.push(0); "\\!\"#$%&'()*+,./:;<=>?@[]^_`{|}~-".split("").forEach(function(t) { jr[t.charCodeAt(0)] = 1 }); var SK = function(e, n) { var s, a, o, r, i, c = e.pos, l = e.posMax; if (e.src.charCodeAt(c) !== 92 || (c++, c >= l)) return !1; if (s = e.src.charCodeAt(c), s === 10) { for (n || e.push("hardbreak", "br", 0), c++; c < l && (s = e.src.charCodeAt(c), !!AK(s));) c++; return e.pos = c, !0 } return r = e.src[c], s >= 55296 && s <= 56319 && c + 1 < l && (a = e.src.charCodeAt(c + 1), a >= 56320 && a <= 57343 && (r += e.src[c + 1], c++)), o = "\\" + r, n || (i = e.push("text_special", "", 0), s < 256 && jr[s] !== 0 ? i.content = r : i.content = o, i.markup = o, i.info = "escape"), e.pos = c + 1, !0 }, TK = function(e, n) { var s, a, o, r, i, c, l, u, d = e.pos, m = e.src.charCodeAt(d); if (m !== 96) return !1; for (s = d, d++, a = e.posMax; d < a && e.src.charCodeAt(d) === 96;) d++; if (o = e.src.slice(s, d), l = o.length, e.backticksScanned && (e.backticks[l] || 0) <= s) return n || (e.pending += o), e.pos += l, !0; for (i = c = d; (i = e.src.indexOf("`", c)) !== -1;) { for (c = i + 1; c < a && e.src.charCodeAt(c) === 96;) c++; if (u = c - i, u === l) return n || (r = e.push("code_inline", "code", 0), r.markup = o, r.content = e.src.slice(d, i).replace(/\n/g, " ").replace(/^ (.+) $/, "$1")), e.pos = c, !0; e.backticks[u] = i } return e.backticksScanned = !0, n || (e.pending += o), e.pos += l, !0 }, ja = {}; ja.tokenize = function(e, n) { var s, a, o, r, i, c = e.pos, l = e.src.charCodeAt(c); if (n || l !== 126 || (a = e.scanDelims(e.pos, !0), r = a.length, i = String.fromCharCode(l), r < 2)) return !1; for (r % 2 && (o = e.push("text", "", 0), o.content = i, r--), s = 0; s < r; s += 2) o = e.push("text", "", 0), o.content = i + i, e.delimiters.push({ marker: l, length: 0, token: e.tokens.length - 1, end: -1, open: a.can_open, close: a.can_close }); return e.pos += a.length, !0 }; function zc(t, e) { var n, s, a, o, r, i = [], c = e.length; for (n = 0; n < c; n++) a = e[n], a.marker === 126 && a.end !== -1 && (o = e[a.end], r = t.tokens[a.token], r.type = "s_open", r.tag = "s", r.nesting = 1, r.markup = "~~", r.content = "", r = t.tokens[o.token], r.type = "s_close", r.tag = "s", r.nesting = -1, r.markup = "~~", r.content = "", t.tokens[o.token - 1].type === "text" && t.tokens[o.token - 1].content === "~" && i.push(o.token - 1)); for (; i.length;) { for (n = i.pop(), s = n + 1; s < t.tokens.length && t.tokens[s].type === "s_close";) s++; s--, n !== s && (r = t.tokens[s], t.tokens[s] = t.tokens[n], t.tokens[n] = r) } } ja.postProcess = function(e) { var n, s = e.tokens_meta, a = e.tokens_meta.length; for (zc(e, e.delimiters), n = 0; n < a; n++) s[n] && s[n].delimiters && zc(e, s[n].delimiters) }; var $a = {}; $a.tokenize = function(e, n) { var s, a, o, r = e.pos, i = e.src.charCodeAt(r); if (n || i !== 95 && i !== 42) return !1; for (a = e.scanDelims(e.pos, i === 42), s = 0; s < a.length; s++) o = e.push("text", "", 0), o.content = String.fromCharCode(i), e.delimiters.push({ marker: i, length: a.length, token: e.tokens.length - 1, end: -1, open: a.can_open, close: a.can_close }); return e.pos += a.length, !0 }; function qc(t, e) { var n, s, a, o, r, i, c = e.length; for (n = c - 1; n >= 0; n--) s = e[n], !(s.marker !== 95 && s.marker !== 42) && s.end !== -1 && (a = e[s.end], i = n > 0 && e[n - 1].end === s.end + 1 && e[n - 1].marker === s.marker && e[n - 1].token === s.token - 1 && e[s.end + 1].token === a.token + 1, r = String.fromCharCode(s.marker), o = t.tokens[s.token], o.type = i ? "strong_open" : "em_open", o.tag = i ? "strong" : "em", o.nesting = 1, o.markup = i ? r + r : r, o.content = "", o = t.tokens[a.token], o.type = i ? "strong_close" : "em_close", o.tag = i ? "strong" : "em", o.nesting = -1, o.markup = i ? r + r : r, o.content = "", i && (t.tokens[e[n - 1].token].content = "", t.tokens[e[s.end + 1].token].content = "", n--)) } $a.postProcess = function(e) { var n, s = e.tokens_meta, a = e.tokens_meta.length; for (qc(e, e.delimiters), n = 0; n < a; n++) s[n] && s[n].delimiters && qc(e, s[n].delimiters) }; var DK = oe.normalizeReference, ho = oe.isSpace, IK = function(e, n) { var s, a, o, r, i, c, l, u, d, m = "", f = "", h = e.pos, g = e.posMax, b = e.pos, x = !0; if (e.src.charCodeAt(e.pos) !== 91 || (i = e.pos + 1, r = e.md.helpers.parseLinkLabel(e, e.pos, !0), r < 0)) return !1; if (c = r + 1, c < g && e.src.charCodeAt(c) === 40) { for (x = !1, c++; c < g && (a = e.src.charCodeAt(c), !(!ho(a) && a !== 10)); c++); if (c >= g) return !1; if (b = c, l = e.md.helpers.parseLinkDestination(e.src, c, e.posMax), l.ok) { for (m = e.md.normalizeLink(l.str), e.md.validateLink(m) ? c = l.pos : m = "", b = c; c < g && (a = e.src.charCodeAt(c), !(!ho(a) && a !== 10)); c++); if (l = e.md.helpers.parseLinkTitle(e.src, c, e.posMax), c < g && b !== c && l.ok) for (f = l.str, c = l.pos; c < g && (a = e.src.charCodeAt(c), !(!ho(a) && a !== 10)); c++); }(c >= g || e.src.charCodeAt(c) !== 41) && (x = !0), c++ } if (x) { if (typeof e.env.references == "undefined") return !1; if (c < g && e.src.charCodeAt(c) === 91 ? (b = c + 1, c = e.md.helpers.parseLinkLabel(e, c), c >= 0 ? o = e.src.slice(b, c++) : c = r + 1) : c = r + 1, o || (o = e.src.slice(i, r)), u = e.env.references[DK(o)], !u) return e.pos = h, !1; m = u.href, f = u.title } return n || (e.pos = i, e.posMax = r, d = e.push("link_open", "a", 1), d.attrs = s = [ ["href", m] ], f && s.push(["title", f]), e.linkLevel++, e.md.inline.tokenize(e), e.linkLevel--, d = e.push("link_close", "a", -1)), e.pos = c, e.posMax = g, !0 }, NK = oe.normalizeReference, go = oe.isSpace, MK = function(e, n) { var s, a, o, r, i, c, l, u, d, m, f, h, g, b = "", x = e.pos, v = e.posMax; if (e.src.charCodeAt(e.pos) !== 33 || e.src.charCodeAt(e.pos + 1) !== 91 || (c = e.pos + 2, i = e.md.helpers.parseLinkLabel(e, e.pos + 1, !1), i < 0)) return !1; if (l = i + 1, l < v && e.src.charCodeAt(l) === 40) { for (l++; l < v && (a = e.src.charCodeAt(l), !(!go(a) && a !== 10)); l++); if (l >= v) return !1; for (g = l, d = e.md.helpers.parseLinkDestination(e.src, l, e.posMax), d.ok && (b = e.md.normalizeLink(d.str), e.md.validateLink(b) ? l = d.pos : b = ""), g = l; l < v && (a = e.src.charCodeAt(l), !(!go(a) && a !== 10)); l++); if (d = e.md.helpers.parseLinkTitle(e.src, l, e.posMax), l < v && g !== l && d.ok) for (m = d.str, l = d.pos; l < v && (a = e.src.charCodeAt(l), !(!go(a) && a !== 10)); l++); else m = ""; if (l >= v || e.src.charCodeAt(l) !== 41) return e.pos = x, !1; l++ } else { if (typeof e.env.references == "undefined") return !1; if (l < v && e.src.charCodeAt(l) === 91 ? (g = l + 1, l = e.md.helpers.parseLinkLabel(e, l), l >= 0 ? r = e.src.slice(g, l++) : l = i + 1) : l = i + 1, r || (r = e.src.slice(c, i)), u = e.env.references[NK(r)], !u) return e.pos = x, !1; b = u.href, m = u.title } return n || (o = e.src.slice(c, i), e.md.inline.parse(o, e.md, e.env, h = []), f = e.push("image", "img", 0), f.attrs = s = [ ["src", b], ["alt", ""] ], f.children = h, f.content = o, m && s.push(["title", m])), e.pos = l, e.posMax = v, !0 }, OK = /^([a-zA-Z0-9.!#$%&'*+\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*)$/, LK = /^([a-zA-Z][a-zA-Z0-9+.\-]{1,31}):([^<>\x00-\x20]*)$/, RK = function(e, n) { var s, a, o, r, i, c, l = e.pos; if (e.src.charCodeAt(l) !== 60) return !1; for (i = e.pos, c = e.posMax;;) { if (++l >= c || (r = e.src.charCodeAt(l), r === 60)) return !1; if (r === 62) break } return s = e.src.slice(i + 1, l), LK.test(s) ? (a = e.md.normalizeLink(s), e.md.validateLink(a) ? (n || (o = e.push("link_open", "a", 1), o.attrs = [ ["href", a] ], o.markup = "autolink", o.info = "auto", o = e.push("text", "", 0), o.content = e.md.normalizeLinkText(s), o = e.push("link_close", "a", -1), o.markup = "autolink", o.info = "auto"), e.pos += s.length + 2, !0) : !1) : OK.test(s) ? (a = e.md.normalizeLink("mailto:" + s), e.md.validateLink(a) ? (n || (o = e.push("link_open", "a", 1), o.attrs = [ ["href", a] ], o.markup = "autolink", o.info = "auto", o = e.push("text", "", 0), o.content = e.md.normalizeLinkText(s), o = e.push("link_close", "a", -1), o.markup = "autolink", o.info = "auto"), e.pos += s.length + 2, !0) : !1) : !1 }, PK = za.HTML_TAG_RE; function BK(t) { return /^\s]/i.test(t) } function zK(t) { return /^<\/a\s*>/i.test(t) } function qK(t) { var e = t | 32; return e >= 97 && e <= 122 } var FK = function(e, n) { var s, a, o, r, i = e.pos; return !e.md.options.html || (o = e.posMax, e.src.charCodeAt(i) !== 60 || i + 2 >= o) || (s = e.src.charCodeAt(i + 1), s !== 33 && s !== 63 && s !== 47 && !qK(s)) || (a = e.src.slice(i).match(PK), !a) ? !1 : (n || (r = e.push("html_inline", "", 0), r.content = e.src.slice(i, i + a[0].length), BK(r.content) && e.linkLevel++, zK(r.content) && e.linkLevel--), e.pos += a[0].length, !0) }, Fc = vp, jK = oe.has, $K = oe.isValidEntityCode, jc = oe.fromCodePoint, UK = /^&#((?:x[a-f0-9]{1,6}|[0-9]{1,7}));/i, VK = /^&([a-z][a-z0-9]{1,31});/i, HK = function(e, n) { var s, a, o, r, i = e.pos, c = e.posMax; if (e.src.charCodeAt(i) !== 38 || i + 1 >= c) return !1; if (s = e.src.charCodeAt(i + 1), s === 35) { if (o = e.src.slice(i).match(UK), o) return n || (a = o[1][0].toLowerCase() === "x" ? parseInt(o[1].slice(1), 16) : parseInt(o[1], 10), r = e.push("text_special", "", 0), r.content = $K(a) ? jc(a) : jc(65533), r.markup = o[0], r.info = "entity"), e.pos += o[0].length, !0 } else if (o = e.src.slice(i).match(VK), o && jK(Fc, o[1])) return n || (r = e.push("text_special", "", 0), r.content = Fc[o[1]], r.markup = o[0], r.info = "entity"), e.pos += o[0].length, !0; return !1 }; function $c(t, e) { var n, s, a, o, r, i, c, l, u = {}, d = e.length; if (d) { var m = 0, f = -2, h = []; for (n = 0; n < d; n++) if (a = e[n], h.push(0), (e[m].marker !== a.marker || f !== a.token - 1) && (m = n), f = a.token, a.length = a.length || 0, !!a.close) { for (u.hasOwnProperty(a.marker) || (u[a.marker] = [-1, -1, -1, -1, -1, -1]), r = u[a.marker][(a.open ? 3 : 0) + a.length % 3], s = m - h[m] - 1, i = s; s > r; s -= h[s] + 1) if (o = e[s], o.marker === a.marker && o.open && o.end < 0 && (c = !1, (o.close || a.open) && (o.length + a.length) % 3 === 0 && (o.length % 3 !== 0 || a.length % 3 !== 0) && (c = !0), !c)) { l = s > 0 && !e[s - 1].open ? h[s - 1] + 1 : 0, h[n] = n - s + l, h[s] = l, a.open = !1, o.end = n, o.close = !1, i = -1, f = -2; break } i !== -1 && (u[a.marker][(a.open ? 3 : 0) + (a.length || 0) % 3] = i) } } } var GK = function(e) { var n, s = e.tokens_meta, a = e.tokens_meta.length; for ($c(e, e.delimiters), n = 0; n < a; n++) s[n] && s[n].delimiters && $c(e, s[n].delimiters) }, WK = function(e) { var n, s, a = 0, o = e.tokens, r = e.tokens.length; for (n = s = 0; n < r; n++) o[n].nesting < 0 && a--, o[n].level = a, o[n].nesting > 0 && a++, o[n].type === "text" && n + 1 < r && o[n + 1].type === "text" ? o[n + 1].content = o[n].content + o[n + 1].content : (n !== s && (o[s] = o[n]), s++); n !== s && (o.length = s) }, $r = qr, Uc = oe.isWhiteSpace, Vc = oe.isPunctChar, Hc = oe.isMdAsciiPunct; function xs(t, e, n, s) { this.src = t, this.env = n, this.md = e, this.tokens = s, this.tokens_meta = Array(s.length), this.pos = 0, this.posMax = this.src.length, this.level = 0, this.pending = "", this.pendingLevel = 0, this.cache = {}, this.delimiters = [], this._prev_delimiters = [], this.backticks = {}, this.backticksScanned = !1, this.linkLevel = 0 } xs.prototype.pushPending = function() { var t = new $r("text", "", 0); return t.content = this.pending, t.level = this.pendingLevel, this.tokens.push(t), this.pending = "", t }; xs.prototype.push = function(t, e, n) { this.pending && this.pushPending(); var s = new $r(t, e, n), a = null; return n < 0 && (this.level--, this.delimiters = this._prev_delimiters.pop()), s.level = this.level, n > 0 && (this.level++, this._prev_delimiters.push(this.delimiters), this.delimiters = [], a = { delimiters: this.delimiters }), this.pendingLevel = this.level, this.tokens.push(s), this.tokens_meta.push(a), s }; xs.prototype.scanDelims = function(t, e) { var n = t, s, a, o, r, i, c, l, u, d, m = !0, f = !0, h = this.posMax, g = this.src.charCodeAt(t); for (s = t > 0 ? this.src.charCodeAt(t - 1) : 32; n < h && this.src.charCodeAt(n) === g;) n++; return o = n - t, a = n < h ? this.src.charCodeAt(n) : 32, l = Hc(s) || Vc(String.fromCharCode(s)), d = Hc(a) || Vc(String.fromCharCode(a)), c = Uc(s), u = Uc(a), u ? m = !1 : d && (c || l || (m = !1)), c ? f = !1 : l && (u || d || (f = !1)), e ? (r = m, i = f) : (r = m && (!f || l), i = f && (!m || d)), { can_open: r, can_close: i, length: o } }; xs.prototype.Token = $r; var JK = xs, Gc = zr, bo = [ ["text", wK], ["linkify", _K], ["newline", EK], ["escape", SK], ["backticks", TK], ["strikethrough", ja.tokenize], ["emphasis", $a.tokenize], ["link", IK], ["image", MK], ["autolink", RK], ["html_inline", FK], ["entity", HK] ], vo = [ ["balance_pairs", GK], ["strikethrough", ja.postProcess], ["emphasis", $a.postProcess], ["fragments_join", WK] ]; function ys() { var t; for (this.ruler = new Gc, t = 0; t < bo.length; t++) this.ruler.push(bo[t][0], bo[t][1]); for (this.ruler2 = new Gc, t = 0; t < vo.length; t++) this.ruler2.push(vo[t][0], vo[t][1]) } ys.prototype.skipToken = function(t) { var e, n, s = t.pos, a = this.ruler.getRules(""), o = a.length, r = t.md.options.maxNesting, i = t.cache; if (typeof i[s] != "undefined") { t.pos = i[s]; return } if (t.level < r) for (n = 0; n < o && (t.level++, e = a[n](t, !0), t.level--, !e); n++); else t.pos = t.posMax; e || t.pos++, i[s] = t.pos }; ys.prototype.tokenize = function(t) { for (var e, n, s = this.ruler.getRules(""), a = s.length, o = t.posMax, r = t.md.options.maxNesting; t.pos < o;) { if (t.level < r) for (n = 0; n < a && (e = s[n](t, !1), !e); n++); if (e) { if (t.pos >= o) break; continue } t.pending += t.src[t.pos++] } t.pending && t.pushPending() }; ys.prototype.parse = function(t, e, n, s) { var a, o, r, i = new this.State(t, e, n, s); for (this.tokenize(i), o = this.ruler2.getRules(""), r = o.length, a = 0; a < r; a++) o[a](i) }; ys.prototype.State = JK; var YK = ys, xo, Wc; function KK() { return Wc || (Wc = 1, xo = function(t) { var e = {}; t = t || {}, e.src_Any = xp().source, e.src_Cc = yp().source, e.src_Z = wp().source, e.src_P = Br.source, e.src_ZPCc = [e.src_Z, e.src_P, e.src_Cc].join("|"), e.src_ZCc = [e.src_Z, e.src_Cc].join("|"); var n = "[><|]"; return e.src_pseudo_letter = "(?:(?!" + n + "|" + e.src_ZPCc + ")" + e.src_Any + ")", e.src_ip4 = "(?:(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)", e.src_auth = "(?:(?:(?!" + e.src_ZCc + "|[@/\\[\\]()]).)+@)?", e.src_port = "(?::(?:6(?:[0-4]\\d{3}|5(?:[0-4]\\d{2}|5(?:[0-2]\\d|3[0-5])))|[1-5]?\\d{1,4}))?", e.src_host_terminator = "(?=$|" + n + "|" + e.src_ZPCc + ")(?!" + (t["---"] ? "-(?!--)|" : "-|") + "_|:\\d|\\.-|\\.(?!$|" + e.src_ZPCc + "))", e.src_path = "(?:[/?#](?:(?!" + e.src_ZCc + "|" + n + `|[()[\\]{}.,"'?!\\-;]).|\\[(?:(?!` + e.src_ZCc + "|\\]).)*\\]|\\((?:(?!" + e.src_ZCc + "|[)]).)*\\)|\\{(?:(?!" + e.src_ZCc + '|[}]).)*\\}|\\"(?:(?!' + e.src_ZCc + `|["]).)+\\"|\\'(?:(?!` + e.src_ZCc + "|[']).)+\\'|\\'(?=" + e.src_pseudo_letter + "|[-])|\\.{2,}[a-zA-Z0-9%/&]|\\.(?!" + e.src_ZCc + "|[.]|$)|" + (t["---"] ? "\\-(?!--(?:[^-]|$))(?:-*)|" : "\\-+|") + ",(?!" + e.src_ZCc + "|$)|;(?!" + e.src_ZCc + "|$)|\\!+(?!" + e.src_ZCc + "|[!]|$)|\\?(?!" + e.src_ZCc + "|[?]|$))+|\\/)?", e.src_email_name = '[\\-;:&=\\+\\$,\\.a-zA-Z0-9_][\\-;:&=\\+\\$,\\"\\.a-zA-Z0-9_]*', e.src_xn = "xn--[a-z0-9\\-]{1,59}", e.src_domain_root = "(?:" + e.src_xn + "|" + e.src_pseudo_letter + "{1,63})", e.src_domain = "(?:" + e.src_xn + "|(?:" + e.src_pseudo_letter + ")|(?:" + e.src_pseudo_letter + "(?:-|" + e.src_pseudo_letter + "){0,61}" + e.src_pseudo_letter + "))", e.src_host = "(?:(?:(?:(?:" + e.src_domain + ")\\.)*" + e.src_domain + "))", e.tpl_host_fuzzy = "(?:" + e.src_ip4 + "|(?:(?:(?:" + e.src_domain + ")\\.)+(?:%TLDS%)))", e.tpl_host_no_ip_fuzzy = "(?:(?:(?:" + e.src_domain + ")\\.)+(?:%TLDS%))", e.src_host_strict = e.src_host + e.src_host_terminator, e.tpl_host_fuzzy_strict = e.tpl_host_fuzzy + e.src_host_terminator, e.src_host_port_strict = e.src_host + e.src_port + e.src_host_terminator, e.tpl_host_port_fuzzy_strict = e.tpl_host_fuzzy + e.src_port + e.src_host_terminator, e.tpl_host_port_no_ip_fuzzy_strict = e.tpl_host_no_ip_fuzzy + e.src_port + e.src_host_terminator, e.tpl_host_fuzzy_test = "localhost|www\\.|\\.\\d{1,3}\\.|(?:\\.(?:%TLDS%)(?:" + e.src_ZPCc + "|>|$))", e.tpl_email_fuzzy = "(^|" + n + '|"|\\(|' + e.src_ZCc + ")(" + e.src_email_name + "@" + e.tpl_host_fuzzy_strict + ")", e.tpl_link_fuzzy = "(^|(?![.:/\\-_@])(?:[$+<=>^`||]|" + e.src_ZPCc + "))((?![$+<=>^`||])" + e.tpl_host_port_fuzzy_strict + e.src_path + ")", e.tpl_link_no_ip_fuzzy = "(^|(?![.:/\\-_@])(?:[$+<=>^`||]|" + e.src_ZPCc + "))((?![$+<=>^`||])" + e.tpl_host_port_no_ip_fuzzy_strict + e.src_path + ")", e }), xo } function Ko(t) { var e = Array.prototype.slice.call(arguments, 1); return e.forEach(function(n) { n && Object.keys(n).forEach(function(s) { t[s] = n[s] }) }), t } function Ua(t) { return Object.prototype.toString.call(t) } function XK(t) { return Ua(t) === "[object String]" } function ZK(t) { return Ua(t) === "[object Object]" } function QK(t) { return Ua(t) === "[object RegExp]" } function Jc(t) { return Ua(t) === "[object Function]" } function eX(t) { return t.replace(/[.?*+^$[\]\\(){}|-]/g, "\\$&") } var Tp = { fuzzyLink: !0, fuzzyEmail: !0, fuzzyIP: !1 }; function tX(t) { return Object.keys(t || {}).reduce(function(e, n) { return e || Tp.hasOwnProperty(n) }, !1) } var nX = { "http:": { validate: function(t, e, n) { var s = t.slice(e); return n.re.http || (n.re.http = new RegExp("^\\/\\/" + n.re.src_auth + n.re.src_host_port_strict + n.re.src_path, "i")), n.re.http.test(s) ? s.match(n.re.http)[0].length : 0 } }, "https:": "http:", "ftp:": "http:", "//": { validate: function(t, e, n) { var s = t.slice(e); return n.re.no_http || (n.re.no_http = new RegExp("^" + n.re.src_auth + "(?:localhost|(?:(?:" + n.re.src_domain + ")\\.)+" + n.re.src_domain_root + ")" + n.re.src_port + n.re.src_host_terminator + n.re.src_path, "i")), n.re.no_http.test(s) ? e >= 3 && t[e - 3] === ":" || e >= 3 && t[e - 3] === "/" ? 0 : s.match(n.re.no_http)[0].length : 0 } }, "mailto:": { validate: function(t, e, n) { var s = t.slice(e); return n.re.mailto || (n.re.mailto = new RegExp("^" + n.re.src_email_name + "@" + n.re.src_host_strict, "i")), n.re.mailto.test(s) ? s.match(n.re.mailto)[0].length : 0 } } }, sX = "a[cdefgilmnoqrstuwxz]|b[abdefghijmnorstvwyz]|c[acdfghiklmnoruvwxyz]|d[ejkmoz]|e[cegrstu]|f[ijkmor]|g[abdefghilmnpqrstuwy]|h[kmnrtu]|i[delmnoqrst]|j[emop]|k[eghimnprwyz]|l[abcikrstuvy]|m[acdeghklmnopqrstuvwxyz]|n[acefgilopruz]|om|p[aefghklmnrstwy]|qa|r[eosuw]|s[abcdeghijklmnortuvxyz]|t[cdfghjklmnortvwz]|u[agksyz]|v[aceginu]|w[fs]|y[et]|z[amw]", aX = "biz|com|edu|gov|net|org|pro|web|xxx|aero|asia|coop|info|museum|name|shop|рф".split("|"); function oX(t) { t.__index__ = -1, t.__text_cache__ = "" } function rX(t) { return function(e, n) { var s = e.slice(n); return t.test(s) ? s.match(t)[0].length : 0 } } function Yc() { return function(t, e) { e.normalize(t) } } function pa(t) { var e = t.re = KK()(t.__opts__), n = t.__tlds__.slice(); t.onCompile(), t.__tlds_replaced__ || n.push(sX), n.push(e.src_xn), e.src_tlds = n.join("|"); function s(i) { return i.replace("%TLDS%", e.src_tlds) } e.email_fuzzy = RegExp(s(e.tpl_email_fuzzy), "i"), e.link_fuzzy = RegExp(s(e.tpl_link_fuzzy), "i"), e.link_no_ip_fuzzy = RegExp(s(e.tpl_link_no_ip_fuzzy), "i"), e.host_fuzzy_test = RegExp(s(e.tpl_host_fuzzy_test), "i"); var a = []; t.__compiled__ = {}; function o(i, c) { throw new Error('(LinkifyIt) Invalid schema "' + i + '": ' + c) } Object.keys(t.__schemas__).forEach(function(i) { var c = t.__schemas__[i]; if (c !== null) { var l = { validate: null, link: null }; if (t.__compiled__[i] = l, ZK(c)) { QK(c.validate) ? l.validate = rX(c.validate) : Jc(c.validate) ? l.validate = c.validate : o(i, c), Jc(c.normalize) ? l.normalize = c.normalize : c.normalize ? o(i, c) : l.normalize = Yc(); return } if (XK(c)) { a.push(i); return } o(i, c) } }), a.forEach(function(i) { t.__compiled__[t.__schemas__[i]] && (t.__compiled__[i].validate = t.__compiled__[t.__schemas__[i]].validate, t.__compiled__[i].normalize = t.__compiled__[t.__schemas__[i]].normalize) }), t.__compiled__[""] = { validate: null, normalize: Yc() }; var r = Object.keys(t.__compiled__).filter(function(i) { return i.length > 0 && t.__compiled__[i] }).map(eX).join("|"); t.re.schema_test = RegExp("(^|(?!_)(?:[><|]|" + e.src_ZPCc + "))(" + r + ")", "i"), t.re.schema_search = RegExp("(^|(?!_)(?:[><|]|" + e.src_ZPCc + "))(" + r + ")", "ig"), t.re.schema_at_start = RegExp("^" + t.re.schema_search.source, "i"), t.re.pretest = RegExp("(" + t.re.schema_test.source + ")|(" + t.re.host_fuzzy_test.source + ")|@", "i"), oX(t) } function iX(t, e) { var n = t.__index__, s = t.__last_index__, a = t.__text_cache__.slice(n, s); this.schema = t.__schema__.toLowerCase(), this.index = n + e, this.lastIndex = s + e, this.raw = a, this.text = a, this.url = a } function Xo(t, e) { var n = new iX(t, e); return t.__compiled__[n.schema].normalize(n, t), n } function Ke(t, e) { if (!(this instanceof Ke)) return new Ke(t, e); e || tX(t) && (e = t, t = {}), this.__opts__ = Ko({}, Tp, e), this.__index__ = -1, this.__last_index__ = -1, this.__schema__ = "", this.__text_cache__ = "", this.__schemas__ = Ko({}, nX, t), this.__compiled__ = {}, this.__tlds__ = aX, this.__tlds_replaced__ = !1, this.re = {}, pa(this) } Ke.prototype.add = function(e, n) { return this.__schemas__[e] = n, pa(this), this }; Ke.prototype.set = function(e) { return this.__opts__ = Ko(this.__opts__, e), this }; Ke.prototype.test = function(e) { if (this.__text_cache__ = e, this.__index__ = -1, !e.length) return !1; var n, s, a, o, r, i, c, l, u; if (this.re.schema_test.test(e)) { for (c = this.re.schema_search, c.lastIndex = 0; (n = c.exec(e)) !== null;) if (o = this.testSchemaAt(e, n[2], c.lastIndex), o) { this.__schema__ = n[2], this.__index__ = n.index + n[1].length, this.__last_index__ = n.index + n[0].length + o; break } } return this.__opts__.fuzzyLink && this.__compiled__["http:"] && (l = e.search(this.re.host_fuzzy_test), l >= 0 && (this.__index__ < 0 || l < this.__index__) && (s = e.match(this.__opts__.fuzzyIP ? this.re.link_fuzzy : this.re.link_no_ip_fuzzy)) !== null && (r = s.index + s[1].length, (this.__index__ < 0 || r < this.__index__) && (this.__schema__ = "", this.__index__ = r, this.__last_index__ = s.index + s[0].length))), this.__opts__.fuzzyEmail && this.__compiled__["mailto:"] && (u = e.indexOf("@"), u >= 0 && (a = e.match(this.re.email_fuzzy)) !== null && (r = a.index + a[1].length, i = a.index + a[0].length, (this.__index__ < 0 || r < this.__index__ || r === this.__index__ && i > this.__last_index__) && (this.__schema__ = "mailto:", this.__index__ = r, this.__last_index__ = i))), this.__index__ >= 0 }; Ke.prototype.pretest = function(e) { return this.re.pretest.test(e) }; Ke.prototype.testSchemaAt = function(e, n, s) { return this.__compiled__[n.toLowerCase()] ? this.__compiled__[n.toLowerCase()].validate(e, s, this) : 0 }; Ke.prototype.match = function(e) { var n = 0, s = []; this.__index__ >= 0 && this.__text_cache__ === e && (s.push(Xo(this, n)), n = this.__last_index__); for (var a = n ? e.slice(n) : e; this.test(a);) s.push(Xo(this, n)), a = a.slice(this.__last_index__), n += this.__last_index__; return s.length ? s : null }; Ke.prototype.matchAtStart = function(e) { if (this.__text_cache__ = e, this.__index__ = -1, !e.length) return null; var n = this.re.schema_at_start.exec(e); if (!n) return null; var s = this.testSchemaAt(e, n[2], n[0].length); return s ? (this.__schema__ = n[2], this.__index__ = n.index + n[1].length, this.__last_index__ = n.index + n[0].length + s, Xo(this, 0)) : null }; Ke.prototype.tlds = function(e, n) { return e = Array.isArray(e) ? e : [e], n ? (this.__tlds__ = this.__tlds__.concat(e).sort().filter(function(s, a, o) { return s !== o[a - 1] }).reverse(), pa(this), this) : (this.__tlds__ = e.slice(), this.__tlds_replaced__ = !0, pa(this), this) }; Ke.prototype.normalize = function(e) { e.schema || (e.url = "http://" + e.url), e.schema === "mailto:" && !/^mailto:/i.test(e.url) && (e.url = "mailto:" + e.url) }; Ke.prototype.onCompile = function() {}; var cX = Ke; const yn = 2147483647, vt = 36, Ur = 1, us = 26, lX = 38, uX = 700, Dp = 72, Ip = 128, Np = "-", pX = /^xn--/, dX = /[^\0-\x7F]/, mX = /[\x2E\u3002\uFF0E\uFF61]/g, fX = { overflow: "Overflow: input needs wider integers to process", "not-basic": "Illegal input >= 0x80 (not a basic code point)", "invalid-input": "Invalid input" }, yo = vt - Ur, xt = Math.floor, wo = String.fromCharCode; function zt(t) { throw new RangeError(fX[t]) } function hX(t, e) { const n = []; let s = t.length; for (; s--;) n[s] = e(t[s]); return n } function Mp(t, e) { const n = t.split("@"); let s = ""; n.length > 1 && (s = n[0] + "@", t = n[1]), t = t.replace(mX, "."); const a = t.split("."), o = hX(a, e).join("."); return s + o } function Vr(t) { const e = []; let n = 0; const s = t.length; for (; n < s;) { const a = t.charCodeAt(n++); if (a >= 55296 && a <= 56319 && n < s) { const o = t.charCodeAt(n++); (o & 64512) == 56320 ? e.push(((a & 1023) << 10) + (o & 1023) + 65536) : (e.push(a), n--) } else e.push(a) } return e } const Op = t => String.fromCodePoint(...t), gX = function(t) { return t >= 48 && t < 58 ? 26 + (t - 48) : t >= 65 && t < 91 ? t - 65 : t >= 97 && t < 123 ? t - 97 : vt }, Kc = function(t, e) { return t + 22 + 75 * (t < 26) - ((e != 0) << 5) }, Lp = function(t, e, n) { let s = 0; for (t = n ? xt(t / uX) : t >> 1, t += xt(t / e); t > yo * us >> 1; s += vt) t = xt(t / yo); return xt(s + (yo + 1) * t / (t + lX)) }, Hr = function(t) { const e = [], n = t.length; let s = 0, a = Ip, o = Dp, r = t.lastIndexOf(Np); r < 0 && (r = 0); for (let i = 0; i < r; ++i) t.charCodeAt(i) >= 128 && zt("not-basic"), e.push(t.charCodeAt(i)); for (let i = r > 0 ? r + 1 : 0; i < n;) { const c = s; for (let u = 1, d = vt;; d += vt) { i >= n && zt("invalid-input"); const m = gX(t.charCodeAt(i++)); m >= vt && zt("invalid-input"), m > xt((yn - s) / u) && zt("overflow"), s += m * u; const f = d <= o ? Ur : d >= o + us ? us : d - o; if (m < f) break; const h = vt - f; u > xt(yn / h) && zt("overflow"), u *= h } const l = e.length + 1; o = Lp(s - c, l, c == 0), xt(s / l) > yn - a && zt("overflow"), a += xt(s / l), s %= l, e.splice(s++, 0, a) } return String.fromCodePoint(...e) }, Gr = function(t) { const e = []; t = Vr(t); const n = t.length; let s = Ip, a = 0, o = Dp; for (const c of t) c < 128 && e.push(wo(c)); const r = e.length; let i = r; for (r && e.push(Np); i < n;) { let c = yn; for (const u of t) u >= s && u < c && (c = u); const l = i + 1; c - s > xt((yn - a) / l) && zt("overflow"), a += (c - s) * l, s = c; for (const u of t) if (u < s && ++a > yn && zt("overflow"), u === s) { let d = a; for (let m = vt;; m += vt) { const f = m <= o ? Ur : m >= o + us ? us : m - o; if (d < f) break; const h = d - f, g = vt - f; e.push(wo(Kc(f + h % g, 0))), d = xt(h / g) } e.push(wo(Kc(d, 0))), o = Lp(a, l, i === r), a = 0, ++i }++a, ++s } return e.join("") }, Rp = function(t) { return Mp(t, function(e) { return pX.test(e) ? Hr(e.slice(4).toLowerCase()) : e }) }, Pp = function(t) { return Mp(t, function(e) { return dX.test(e) ? "xn--" + Gr(e) : e }) }, bX = { version: "2.3.1", ucs2: { decode: Vr, encode: Op }, decode: Hr, encode: Gr, toASCII: Pp, toUnicode: Rp }, vX = Object.freeze(Object.defineProperty({ __proto__: null, decode: Hr, default: bX, encode: Gr, toASCII: Pp, toUnicode: Rp, ucs2decode: Vr, ucs2encode: Op }, Symbol.toStringTag, { value: "Module" })), xX = Cf(vX); var yX = { options: { html: !1, xhtmlOut: !1, breaks: !1, langPrefix: "language-", linkify: !1, typographer: !1, quotes: "“”‘’", highlight: null, maxNesting: 100 }, components: { core: {}, block: {}, inline: {} } }, wX = { options: { html: !1, xhtmlOut: !1, breaks: !1, langPrefix: "language-", linkify: !1, typographer: !1, quotes: "“”‘’", highlight: null, maxNesting: 20 }, components: { core: { rules: ["normalize", "block", "inline", "text_join"] }, block: { rules: ["paragraph"] }, inline: { rules: ["text"], rules2: ["balance_pairs", "fragments_join"] } } }, kX = { options: { html: !0, xhtmlOut: !0, breaks: !1, langPrefix: "language-", linkify: !1, typographer: !1, quotes: "“”‘’", highlight: null, maxNesting: 20 }, components: { core: { rules: ["normalize", "block", "inline", "text_join"] }, block: { rules: ["blockquote", "code", "fence", "heading", "hr", "html_block", "lheading", "list", "reference", "paragraph"] }, inline: { rules: ["autolink", "backticks", "emphasis", "entity", "escape", "html_inline", "image", "link", "newline", "text"], rules2: ["balance_pairs", "emphasis", "fragments_join"] } } }, ts = oe, _X = Ba, CX = bY, EX = jY, AX = xK, SX = YK, TX = cX, Yt = Ln, Bp = xX, DX = { default: yX, zero: wX, commonmark: kX }, IX = /^(vbscript|javascript|file|data):/, NX = /^data:image\/(gif|png|jpeg|webp);/; function MX(t) { var e = t.trim().toLowerCase(); return IX.test(e) ? !!NX.test(e) : !0 } var zp = ["http:", "https:", "mailto:"]; function OX(t) { var e = Yt.parse(t, !0); if (e.hostname && (!e.protocol || zp.indexOf(e.protocol) >= 0)) try { e.hostname = Bp.toASCII(e.hostname) } catch (n) {} return Yt.encode(Yt.format(e)) } function LX(t) { var e = Yt.parse(t, !0); if (e.hostname && (!e.protocol || zp.indexOf(e.protocol) >= 0)) try { e.hostname = Bp.toUnicode(e.hostname) } catch (n) {} return Yt.decode(Yt.format(e), Yt.decode.defaultChars + "%") } function et(t, e) { if (!(this instanceof et)) return new et(t, e); e || ts.isString(t) || (e = t || {}, t = "default"), this.inline = new SX, this.block = new AX, this.core = new EX, this.renderer = new CX, this.linkify = new TX, this.validateLink = MX, this.normalizeLink = OX, this.normalizeLinkText = LX, this.utils = ts, this.helpers = ts.assign({}, _X), this.options = {}, this.configure(t), e && this.set(e) } et.prototype.set = function(t) { return ts.assign(this.options, t), this }; et.prototype.configure = function(t) { var e = this, n; if (ts.isString(t) && (n = t, t = DX[n], !t)) throw new Error('Wrong `markdown-it` preset "' + n + '", check name'); if (!t) throw new Error("Wrong `markdown-it` preset, can't be empty"); return t.options && e.set(t.options), t.components && Object.keys(t.components).forEach(function(s) { t.components[s].rules && e[s].ruler.enableOnly(t.components[s].rules), t.components[s].rules2 && e[s].ruler2.enableOnly(t.components[s].rules2) }), this }; et.prototype.enable = function(t, e) { var n = []; Array.isArray(t) || (t = [t]), ["core", "block", "inline"].forEach(function(a) { n = n.concat(this[a].ruler.enable(t, !0)) }, this), n = n.concat(this.inline.ruler2.enable(t, !0)); var s = t.filter(function(a) { return n.indexOf(a) < 0 }); if (s.length && !e) throw new Error("MarkdownIt. Failed to enable unknown rule(s): " + s); return this }; et.prototype.disable = function(t, e) { var n = []; Array.isArray(t) || (t = [t]), ["core", "block", "inline"].forEach(function(a) { n = n.concat(this[a].ruler.disable(t, !0)) }, this), n = n.concat(this.inline.ruler2.disable(t, !0)); var s = t.filter(function(a) { return n.indexOf(a) < 0 }); if (s.length && !e) throw new Error("MarkdownIt. Failed to disable unknown rule(s): " + s); return this }; et.prototype.use = function(t) { var e = [this].concat(Array.prototype.slice.call(arguments, 1)); return t.apply(t, e), this }; et.prototype.parse = function(t, e) { if (typeof t != "string") throw new Error("Input data should be a String"); var n = new this.core.State(t, this, e); return this.core.process(n), n.tokens }; et.prototype.render = function(t, e) { return e = e || {}, this.renderer.render(this.parse(t, e), this.options, e) }; et.prototype.parseInline = function(t, e) { var n = new this.core.State(t, this, e); return n.inlineMode = !0, this.core.process(n), n.tokens }; et.prototype.renderInline = function(t, e) { return e = e || {}, this.renderer.render(this.parseInline(t, e), this.options, e) }; var RX = et, PX = RX; const BX = lr(PX), Wr = new gr({ nodes: { doc: { content: "block+" }, paragraph: { content: "inline*", group: "block", parseDOM: [{ tag: "p" }], toDOM() { return ["p", 0] } }, blockquote: { content: "block+", group: "block", parseDOM: [{ tag: "blockquote" }], toDOM() { return ["blockquote", 0] } }, horizontal_rule: { group: "block", parseDOM: [{ tag: "hr" }], toDOM() { return ["div", ["hr"]] } }, heading: { attrs: { level: { default: 1 } }, content: "(text | image)*", group: "block", defining: !0, parseDOM: [{ tag: "h1", attrs: { level: 1 } }, { tag: "h2", attrs: { level: 2 } }, { tag: "h3", attrs: { level: 3 } }, { tag: "h4", attrs: { level: 4 } }, { tag: "h5", attrs: { level: 5 } }, { tag: "h6", attrs: { level: 6 } }], toDOM(t) { return ["h" + t.attrs.level, 0] } }, code_block: { content: "text*", group: "block", code: !0, defining: !0, marks: "", attrs: { params: { default: "" } }, parseDOM: [{ tag: "pre", preserveWhitespace: "full", getAttrs: t => ({ params: t.getAttribute("data-params") || "" }) }], toDOM(t) { return ["pre", t.attrs.params ? { "data-params": t.attrs.params } : {}, ["code", 0] ] } }, ordered_list: { content: "list_item+", group: "block", attrs: { order: { default: 1 }, tight: { default: !1 } }, parseDOM: [{ tag: "ol", getAttrs(t) { return { order: t.hasAttribute("start") ? +t.getAttribute("start") : 1, tight: t.hasAttribute("data-tight") } } }], toDOM(t) { return ["ol", { start: t.attrs.order == 1 ? null : t.attrs.order, "data-tight": t.attrs.tight ? "true" : null }, 0] } }, bullet_list: { content: "list_item+", group: "block", attrs: { tight: { default: !1 } }, parseDOM: [{ tag: "ul", getAttrs: t => ({ tight: t.hasAttribute("data-tight") }) }], toDOM(t) { return ["ul", { "data-tight": t.attrs.tight ? "true" : null }, 0] } }, list_item: { content: "paragraph block*", defining: !0, parseDOM: [{ tag: "li" }], toDOM() { return ["li", 0] } }, text: { group: "inline" }, image: { inline: !0, attrs: { src: {}, alt: { default: null }, title: { default: null } }, group: "inline", draggable: !0, parseDOM: [{ tag: "img[src]", getAttrs(t) { return { src: t.getAttribute("src"), title: t.getAttribute("title"), alt: t.getAttribute("alt") } } }], toDOM(t) { return ["img", t.attrs] } }, hard_break: { inline: !0, group: "inline", selectable: !1, parseDOM: [{ tag: "br" }], toDOM() { return ["br"] } } }, marks: { em: { parseDOM: [{ tag: "i" }, { tag: "em" }, { style: "font-style", getAttrs: t => t == "italic" && null }], toDOM() { return ["em"] } }, strong: { parseDOM: [{ tag: "b" }, { tag: "strong" }, { style: "font-weight", getAttrs: t => /^(bold(er)?|[5-9]\d{2,})$/.test(t) && null }], toDOM() { return ["strong"] } }, link: { attrs: { href: {}, title: { default: null } }, inclusive: !1, parseDOM: [{ tag: "a[href]", getAttrs(t) { return { href: t.getAttribute("href"), title: t.getAttribute("title") } } }], toDOM(t) { return ["a", t.attrs] } }, code: { parseDOM: [{ tag: "code" }], toDOM() { return ["code"] } } } }); function zX(t, e) { if (t.isText && e.isText && qo.sameSet(t.marks, e.marks)) return t.withText(t.text + e.text) } class qX { constructor(e, n) { this.schema = e, this.tokenHandlers = n, this.stack = [{ type: e.topNodeType, attrs: null, content: [], marks: qo.none }] } top() { return this.stack[this.stack.length - 1] } push(e) { this.stack.length && this.top().content.push(e) } addText(e) { if (!e) return; let n = this.top(), s = n.content, a = s[s.length - 1], o = this.schema.text(e, n.marks), r; a && (r = zX(a, o)) ? s[s.length - 1] = r : s.push(o) } openMark(e) { let n = this.top(); n.marks = e.addToSet(n.marks) } closeMark(e) { let n = this.top(); n.marks = e.removeFromSet(n.marks) } parseTokens(e) { for (let n = 0; n < e.length; n++) { let s = e[n], a = this.tokenHandlers[s.type]; if (!a) throw new Error("Token type `" + s.type + "` not supported by Markdown parser"); a(this, s, e, n) } } addNode(e, n, s) { let a = this.top(), o = e.createAndFill(n, s, a ? a.marks : []); return o ? (this.push(o), o) : null } openNode(e, n) { this.stack.push({ type: e, attrs: n, content: [], marks: qo.none }) } closeNode() { let e = this.stack.pop(); return this.addNode(e.type, e.attrs, e.content) } } function Vn(t, e, n, s) { return t.getAttrs ? t.getAttrs(e, n, s) : t.attrs instanceof Function ? t.attrs(e) : t.attrs } function ko(t, e) { return t.noCloseToken || e == "code_inline" || e == "code_block" || e == "fence" } function Xc(t) { return t[t.length - 1] == ` ` ? t.slice(0, t.length - 1) : t } function _o() {} function FX(t, e) { let n = Object.create(null); for (let s in e) { let a = e[s]; if (a.block) { let o = t.nodeType(a.block); ko(a, s) ? n[s] = (r, i, c, l) => { r.openNode(o, Vn(a, i, c, l)), r.addText(Xc(i.content)), r.closeNode() } : (n[s + "_open"] = (r, i, c, l) => r.openNode(o, Vn(a, i, c, l)), n[s + "_close"] = r => r.closeNode()) } else if (a.node) { let o = t.nodeType(a.node); n[s] = (r, i, c, l) => r.addNode(o, Vn(a, i, c, l)) } else if (a.mark) { let o = t.marks[a.mark]; ko(a, s) ? n[s] = (r, i, c, l) => { r.openMark(o.create(Vn(a, i, c, l))), r.addText(Xc(i.content)), r.closeMark(o) } : (n[s + "_open"] = (r, i, c, l) => r.openMark(o.create(Vn(a, i, c, l))), n[s + "_close"] = r => r.closeMark(o)) } else if (a.ignore) ko(a, s) ? n[s] = _o : (n[s + "_open"] = _o, n[s + "_close"] = _o); else throw new RangeError("Unrecognized parsing spec " + JSON.stringify(a)) } return n.text = (s, a) => s.addText(a.content), n.inline = (s, a) => s.parseTokens(a.children), n.softbreak = n.softbreak || (s => s.addText(` `)), n } class jX { constructor(e, n, s) { this.schema = e, this.tokenizer = n, this.tokens = s, this.tokenHandlers = FX(e, s) } parse(e, n = {}) { let s = new qX(this.schema, this.tokenHandlers), a; s.parseTokens(this.tokenizer.parse(e, n)); do a = s.closeNode(); while (s.stack.length); return a || this.schema.topNodeType.createAndFill() } } function Zc(t, e) { for (; ++e < t.length;) if (t[e].type != "list_item_open") return t[e].hidden; return !1 } const $X = new jX(Wr, BX("commonmark", { html: !1 }), { blockquote: { block: "blockquote" }, paragraph: { block: "paragraph" }, list_item: { block: "list_item" }, bullet_list: { block: "bullet_list", getAttrs: (t, e, n) => ({ tight: Zc(e, n) }) }, ordered_list: { block: "ordered_list", getAttrs: (t, e, n) => ({ order: +t.attrGet("start") || 1, tight: Zc(e, n) }) }, heading: { block: "heading", getAttrs: t => ({ level: +t.tag.slice(1) }) }, code_block: { block: "code_block", noCloseToken: !0 }, fence: { block: "code_block", getAttrs: t => ({ params: t.info || "" }), noCloseToken: !0 }, hr: { node: "horizontal_rule" }, image: { node: "image", getAttrs: t => ({ src: t.attrGet("src"), title: t.attrGet("title") || null, alt: t.children[0] && t.children[0].content || null }) }, hardbreak: { node: "hard_break" }, em: { mark: "em" }, strong: { mark: "strong" }, link: { mark: "link", getAttrs: t => ({ href: t.attrGet("href"), title: t.attrGet("title") || null }) }, code_inline: { mark: "code", noCloseToken: !0 } }), qp = ({ node: t }) => { const e = t.attrs, { iTemplate: n } = ue(); return p(wt, { className: "directMessage", "data-drag-handle": "" }, p(bu, null, p(Y, { alignItems: "center", justifyContent: "center", flex: "grow", style: { marginBottom: "20px" } }, p(ta, { priority: "primary", leading: p(Rg, { size: 20 }) }, n `Message ${e.userName}`)))) }, Fp = ({ attrs: t }) => { const e = {}; for (const [n, s] of Object.entries(t)) e[n] = na(s, ["default"]); return e }, UX = "_blockContainer_19kps_1", VX = "_blockTitleContainer_19kps_13", HX = "_blockTitle_19kps_13", GX = "_blockSubTitle_19kps_34", WX = "_inlineContainer_19kps_48", JX = "_inlineText_19kps_58", gn = { blockContainer: UX, blockTitleContainer: VX, blockTitle: HX, blockSubTitle: GX, inlineContainer: WX, inlineText: JX }; function Oe({ msg: t, node: e, err: n, group: s }) { se(ae.EDITOR_NODE_RENDER_FAILED, { nodeType: e.type.name, nodeAttrs: e.attrs, errMsg: n == null ? void 0 : n.message }); const a = t != null ? t : "Something went wrong"; return s === "block" ? YX({ msg: a }) : KX({ msg: a }) } function jp({ size: t }) { const e = "http://www.w3.org/2000/svg", n = document.createElementNS(e, "svg"); n.setAttribute("width", `${t}`), n.setAttribute("height", `${t}`), n.setAttribute("viewBox", "0 0 24 24"), n.setAttribute("fill", "none"), n.setAttribute("stroke", "#363737"), n.setAttribute("stroke-width", "2"), n.setAttribute("stroke-linecap", "round"), n.setAttribute("stroke-linejoin", "round"); const s = document.createElementNS(e, "circle"); s.setAttribute("d", "M12 8V12M12 16H12.01M22 12C22 17.5228 17.5228 22 12 22C6.47715 22 2 17.5228 2 12C2 6.47715 6.47715 2 12 2C17.5228 2 22 6.47715 22 12Z"), s.setAttribute("cx", "12"), s.setAttribute("cy", "12"), s.setAttribute("r", "10"); const a = document.createElementNS(e, "line"); a.setAttribute("x1", "12"), a.setAttribute("x2", "12"), a.setAttribute("y1", "8"), a.setAttribute("y2", "12"); const o = document.createElementNS(e, "line"); return o.setAttribute("x1", "12"), o.setAttribute("x2", "12.01"), o.setAttribute("y1", "16"), o.setAttribute("y2", "16"), n.appendChild(s), n.appendChild(a), n.appendChild(o), n } function YX({ msg: t }) { const e = document.createElement("div"); e.className = gn.blockContainer; const n = document.createElement("div"); n.textContent = t, n.className = gn.blockTitle; const s = document.createElement("div"); s.textContent = "Try refreshing the page or try again later.", s.className = gn.blockSubTitle; const a = document.createElement("div"); return a.className = gn.blockTitleContainer, a.appendChild(n), a.appendChild(s), e.appendChild(jp({ size: 24 })), e.appendChild(a), e } function KX({ msg: t }) { const e = document.createElement("span"); e.className = gn.inlineContainer; const n = document.createElement("span"); return n.className = gn.inlineText, n.textContent = t, e.appendChild(jp({ size: 10 })), e.appendChild(n), e } var XX = ig; function ZX(t, e) { for (var n = t.length; n-- && XX(e, t[n], 0) > -1;); return n } var QX = ZX, eZ = Ef, tZ = Af, nZ = QX, Qc = Sf, sZ = Tf, aZ = cg; function oZ(t, e, n) { if (t = sZ(t), t && (n || e === void 0)) return t.slice(0, aZ(t) + 1); if (!t || !(e = eZ(e))) return t; var s = Qc(t), a = nZ(s, Qc(e)) + 1; return tZ(s, 0, a).join("") } var rZ = oZ; const iZ = lr(rZ), $p = [ ["list_item", "listItem"], ["bullet_list", "bulletList"], ["ordered_list", "orderedList"], ["hard_break", "hardBreak"], ["horizontal_rule", "horizontalRule"], ["code_block", "codeBlock"] ], Up = [ ["em", "italic"], ["strong", "bold"], ["strikethrough", "strike"] ], el = { image2: 1, image: 0, horizontal_rule: 0, youtube: 0, youtube2: 0, vimeo: 0, opensea: 0, twitter: 0, twitter2: 0, spotify: 0, spotify2: 0, soundcloud: 0, bandcamp: 0, kindle: 0, tiktok: 0, prediction_market: 0, lichess: 0, datawrapper: 0, recipe: 0 }, cZ = 100, lZ = (t, { maxLength: e = 356, getAfterCutoff: n = !1, withEllipsis: s = !1 } = {}) => { let a = "", o = !1; const r = {}, i = Zp(t); let c = !1; const l = Tn(t, u => { var f; if (o) return n; if (u.type === "paywall") return o = !0, !1; if (i) return !0; const d = (f = u.type) != null ? f : "undefined"; if (r[d] = (r[d] || 0) + 1, u.type && u.type in el && r[d] > el[u.type]) return o = !0, n; const m = e - a.length; if (m <= 0 && !i) return n; if (m > 0) { if (n) { if (u.type === "text" && u.text) if (a += u.text, e - a.length <= 0) u.text = u.text.substring(u.text.length + e - a.length - 1, u.text.length); else return !1 } else if (u.type === "text" && u.text) { a += u.text; const h = u.text; u.text = it(h, m), c = h !== u.text } } else return n; return !0 }); if (l && s && !c) { const u = uZ(l); let d = null, m = null; for (let g = u.length - 1; g >= 0 && !(d && m); g--) { const b = u[g]; d === null && b.type === "text" && (d = g), m === null && b.type !== "text" && b.type !== "paragraph" && (m = g) } const f = d !== null ? u[d] : null, h = f && m !== null && d !== null && m > d; f && !h && (f.text = hZ(f.text)) } return l }; function Tn(t, e) { if (!t || (Vo(t) || Hi(t)) && !e(t)) return null; if (Vo(t) && t.content && t.content.length > 0) { const n = e; if (t.content = t.content.filter(s => Tn(s, n)), t.content.length === 0) return null } else if (Hi(t)) { const n = mt({ fragment: t.content }), s = e; if (n.length > 0) { const a = n.filter(o => Tn(o, s)); if (a.length === 0) return null; lg({ fragment: t.content, content: a }) } } return t } function uZ(t) { var s; const e = [], n = [t]; for (; n.length;) { const a = n.pop(); if (!a) break; if (a.content && ((s = a.content) == null ? void 0 : s.length) > 0) for (let o = a.content.length - 1; o >= 0; o--) n.push(a.content[o]); else e.push(a) } return e } const Vp = (t, e) => { let n = []; if (t && (e(t) && n.push(t), t.content)) for (const s of t.content) n = n.concat(Vp(s, e)); return n }, Bn = (t, e) => { if (t) { if (e(t)) return t; if (t.content) for (const n of t.content) { const s = Bn(n, e); if (s) return s } } return null }, pZ = t => { const e = []; return t.nodesBetween(0, t.content.size, n => { var s; ((s = n.type) == null ? void 0 : s.name) === "cashtag" && e.push(n.attrs.symbol) }, 0), e }, dZ = new Set(["caption", "footnote", "captionedImage", "image", "image2"]), mZ = new Set(["bullet_list", "bulletList", "ordered_list", "orderedList", "blockquote"]), Zo = "x_li_start_placeholder_x", tl = (t, e) => { var n, s, a, o; if (((n = t.type) == null ? void 0 : n.name) === "list_item" || ((s = t.type) == null ? void 0 : s.name) === "listItem") return { open: Zo, close: "" }; if (((a = t.type) == null ? void 0 : a.name) === "paragraph" || t.isBlock && t.textContent.length > 0 && !mZ.has((o = t.type) == null ? void 0 : o.name)) { let r = "

"; return (e.length > 0 ? e[e.length - 1] : null) === Zo && (e.pop(), r += "* "), { open: r, close: "

" } } return null }, Hp = ({ node: t, recursiveDepth: e, tokens: n }) => { var a, o; if (e > cZ) return console.warn("Reached max recursive depth while converting document to HTML for podcast"), !1; let s = !0; if (dZ.has((a = t.type) == null ? void 0 : a.name)) s = !1; else if (t.isText) { if (t.text && t.text.length > 0) { const r = t.marks.filter(u => u.type.name === "link" && u.attrs.href)[0], i = t.marks.filter(u => u.type.name === "em")[0], c = t.marks.filter(u => u.type.name === "strong")[0], l = t.text; i ? n.push(`${l}`) : c ? n.push(`${l}`) : r ? n.push(`${l}`) : n.push(l) } } else if (tl(t, [])) { const r = tl(t, n); r && n.push(r.open), t.descendants(i => Hp({ node: i, recursiveDepth: e + 1, tokens: n })), r && n.push(r.close), s = !1 } else((o = t.type) == null ? void 0 : o.name) === "cashtag" && n.push(`${t.attrs.symbol} `); return s }, fZ = t => { const e = []; return t.descendants(n => Hp({ node: n, recursiveDepth: 1, tokens: e })), e.filter(n => n !== Zo).join("").trim() }, Gp = (t, { withLinks: e = !0, withCaptionsAndFootnotes: n = !1, forPodcast: s = !1, truncateAt: a = null, truncateTo: o = a, truncateEllipsis: r = "…", truncateExtension: i = null } = {}) => { let c = "", l = "", u = "", d = !0; return t.nodesBetween(0, t.content.size, m => { var f, h, g, b; if (!n && ["caption", "footnote"].includes((f = m.type) == null ? void 0 : f.name)) return !1; if (m.isText) { if (m.text && m.text.length > 0) { d = !1; let x; !Ue(o) && c.length < o && c.length + m.text.length >= o && (x = it(m.text, o - c.length, { ellipsis: r, extension: i })); const v = m.marks.filter(k => k.type.name === "link" && k.attrs.href)[0], w = m.marks.filter(k => k.type.name === "em")[0], E = m.marks.filter(k => k.type.name === "strong")[0]; let _ = m.text; c += _, w && s && (x && (x = `${x}`), _ = `${_}`), E && s && (x && (x = `${x}`), _ = `${_}`), !v || !e ? (x && (u = l + x), l += _) : s ? (x && (u = `${l}${x}`), l += `${_}`) : (x && (u = `${l}${x} [ ${v.attrs.href} ]`), l += `${_} [ ${v.attrs.href} ]`) } } else !d && ["hard_break", "hardBreak"].includes((h = m.type) == null ? void 0 : h.name) ? (d = !0, c += ` `, s ? l += "
" : l += ` `) : !d && m.isBlock ? (d = !0, c += ` `, s ? l += "

" : l += ` `) : ((g = m.type) == null ? void 0 : g.name) === "cashtag" ? l += `${m.attrs.symbol} ` : ((b = m.type) == null ? void 0 : b.name) === "substack_mentions" && (l += `${m.attrs.name} `) }, 0), !Ue(a) && c.length > a && u && (l = u), l = l.trim(), s && (l = l.replace(/\s*()+$/, "").trim()), l }, hZ = t => `${iZ(t,".")}...`, gZ = (t, e) => P(S({ name: t }, e), { addAttributes() { return e.attrs || {} }, parseHTML() { return e.parseDOM }, renderHTML({ node: n }) { return e.toDOM ? e.toDOM(n) : (console.warn("trying to create TipTapNode, no toDOM found for node", t), ["span"]) } }), bZ = (t, e) => { let n, s, a; if (t.doc.nodesBetween(t.selection.from, t.selection.to, (o, r) => { if (n || s) return !1; const i = o.marks.find(c => c.type === e); i && (n = o, s = i, a = { from: r, to: r + o.nodeSize }) }), !!n) return { node: n, mark: s, pos: a } }, Qo = (t, e) => { var o, r; let n, s, a; if (t.doc.nodesBetween(t.selection.from, t.selection.to, (i, c) => { if (n || s) return !1; if (c <= t.selection.from && t.selection.to <= c + i.nodeSize) { const l = i.marks.find(u => u.type === e); l && (n = i, s = l, a = { from: c, to: c + i.nodeSize }) } else return !1 }), !n) { if (t.selection.empty) { const i = t.doc.resolve(t.selection.from), c = i.nodeBefore && i.nodeBefore.marks.find(u => u.type === e), l = i.nodeAfter && i.nodeAfter.marks.find(u => u.type === e); (c || l) && (n = l ? i.nodeAfter : i.nodeBefore, s = l || c, a = l ? { from: i.pos, to: i.pos + i.nodeAfter.nodeSize } : { from: i.pos - ((r = (o = i.nodeBefore) == null ? void 0 : o.nodeSize) != null ? r : 0), to: i.pos }) } if (!n) return } return { node: n, mark: s, pos: a } }, vZ = (t, { allowedMarks: e = [] } = {}) => t.selection.empty ? !0 : Wp(t, t.selection.from, t.selection.to, { allowedMarks: e }), Wp = (t, e, n, { allowedMarks: s = [] } = {}) => { let a = !0, o = !1; return t.doc.nodesBetween(e, n, r => { if (!a) return !1; r.type !== t.schema.nodes.text ? o ? a = !1 : o = !0 : r.marks.find(i => !s.includes(i.type)) && (a = !1) }), a }, er = (t, e) => { var s; if (t.selection.empty) return !1; const n = Array.isArray(e) ? e : [e]; if ("node" in t.selection) { const a = t.selection; return n.includes((s = a.node) == null ? void 0 : s.type) } return xZ(t, t.selection.from, t.selection.to, n) }, xZ = (t, e, n, s) => { let a = null; return t.doc.nodesBetween(e, n, o => { if (a !== !1 && s.includes(o.type)) a = !0; else return a = !1, !1 }), a || !1 }, da = t => t.selection.empty ? null : yZ(t, t.selection.from, t.selection.to), yZ = (t, e, n) => { let s = null; return t.doc.nodesBetween(e, n, a => { if (s) return !1; if (a.type === t.schema.nodes.image2) return s = a.attrs.href, !1; a.type === t.schema.nodes.image3 && (s = a.attrs.href) }), s || null }, Jp = (t, e, n) => { t.selection.empty || wZ(t, e, t.selection.from, t.selection.to, n) }, wZ = (t, e, n, s, a) => { t.doc.nodesBetween(n, s, (o, r) => { (o.type === t.schema.nodes.image2 || o.type === t.schema.nodes.image3) && e.setNodeMarkup(r, o.type, Object.assign({}, o.attrs, { href: a }), o.marks) }) }, tr = t => ({ top: t.top + window.scrollY, bottom: t.bottom + window.scrollY, left: t.left + window.scrollX, right: t.right + window.scrollX }), Yp = (t, e, n, s) => { const a = document.body, o = window.innerWidth <= 481, i = kZ(t, e.from, e.to, m => [t.state.schema.nodes.image, t.state.schema.nodes.image2].includes(m.type)) ? -44 : 8, c = tr(t.coordsAtPos(e.from)), l = tr(t.coordsAtPos(e.to)); n.style.position = "fixed"; const u = l.bottom + (o ? a.scrollTop : 0), d = a.clientHeight - n.clientHeight - 96 - i; c.top < l.top ? (s && (s.style.left = "10px"), n.style.right = "", n.style.left = `${Math.min(c.left,l.left)}px`) : a.clientWidth - c.left > n.clientWidth ? (s && (s.style.left = "10px"), n.style.right = "", n.style.left = `${c.left}px`) : (s && (s.style.left = `${c.left-a.clientWidth+n.clientWidth}px`), n.style.right = "10px", n.style.left = ""), o || u < d ? (s && (s.style.top = "-9px", s.style.bottom = "auto", s.style.transform = ""), n.style.top = `${u+i}px`) : (s && (s.style.top = "auto", s.style.bottom = "-9px", s.style.transform = "rotate(180deg)"), n.style.top = `${d+i}px`) }, kZ = (t, e, n, s) => { let a = !1; return t.state.doc.nodesBetween(e, n, o => { if (a) return !1; a = s(o) }), a }, Wt = (t, e) => N(void 0, null, function*() { return Ca.maxOpen(yield Kp(t.content, e)) }), Kp = (t, e, n) => N(void 0, null, function*() { let s = []; for (let a = 0; a < t.childCount; a++) { let o = t.child(a); o.content.childCount && (o = o.copy(yield Kp(o.content, e, o))), o = yield e(o, a, n), Array.isArray(o) || (o = [o]), s = s.concat(br(o)) } return s = yield Promise.all(s), s = s.map(a => { if (!(a != null && a.content.childCount)) return [a]; const o = []; let r = []; for (let i = 0; i < a.content.childCount; i++) { const c = a.content.child(i); CZ(a, c) ? r.push(c) : (o.push(a.copy(Kt.fromArray(r))), r = [], o.push(c)) } return r.length && o.push(a.copy(Kt.fromArray(r))), o }).reduce((a, o) => a.concat(o), []), s = s.filter(a => a && !(a.type.name === "text" && !a.text) && !(a.type.name === "paragraph" && !a.content.childCount)), Kt.fromArray(s) }), nl = (t, e, n) => Ca.maxOpen(Xp(t.content, e, n)), Xp = (t, e, n) => { n = n || (o => o); const s = []; let a; for (let o = 0; o < t.childCount; o++) { let r = t.child(o); if (e(r)) a = a || [], a.push(r); else { if (a) { const [i, ...c] = n(a); s.push(sl(i, ...c)), a = null } r.content.childCount && (r = r.copy(Xp(r.content, e, n))), s.push(r) } } if (a) { const [o, ...r] = n(a); s.push(sl(o, ...r)), a = null } return Kt.fromArray(s) }, sl = (t, ...e) => { let n = t.content; for (const s of e) n = n.append(s.content); return t.copy(n) }, _Z = t => { if (!t) return !0; let e; if (typeof t == "string") try { e = JSON.parse(t) } catch (n) { return console.error("Could not parse doc", t), !1 } else e = t; if (!e || e.type !== "doc" || !Array.isArray(e.content)) return console.error("Could not parse doc", e), !1; for (const n of e.content) { if (!n || typeof n != "object") return console.error("Could not parse doc", e), !1; if (n.type !== "paragraph") return !1; if (n.content) { if (!Array.isArray(n.content)) return console.error("Could not parse doc", e), !1; if (n.type !== "text" || n.text && n.text.trim()) return !1 } } return !0 }, CZ = (t, e) => { const n = ["list_item", "listItem"].includes(t.type.name), s = ["bullet_list", "bulletList", "ordered_list", "orderedList"].includes(e.type.name); return n && s ? !0 : !!t.type.contentMatch && !!t.type.contentMatch.matchType(e.type) }, EZ = t => t.doc.resolve(t.selection.from).node(1), AZ = (t, e) => { var n; return e.includes((n = EZ(t)) == null ? void 0 : n.type) }, ie = (t, e) => { var r, i, c; const n = t.tr, s = n.selection instanceof Ee, o = s && ((c = (i = (r = n.selection.$from) == null ? void 0 : r.parent) == null ? void 0 : i.content) == null ? void 0 : c.size) === 0 ? t.selection.to - 1 : t.selection.to; if (Array.isArray(e)) for (const l of e.slice().reverse()) n.insert(o, l); else n.insert(o, e); return s || n.setSelection(Je.near(n.doc.resolve(o))), n }, SZ = (t, e) => { const n = t.tr; return n.replaceSelectionWith(e), n }, Le = (t, e) => { const n = t.selection.$from; for (let s = n.depth; s >= 0; s--) { const a = n.index(s); if (n.node(s).canReplaceWith(a, a, e)) return !0 } return !1 }, Zp = t => !!Bn(t, e => e.type === "paywall"), TZ = ({ attrs: t }) => { var n; const e = {}; if (!t) return e; for (const [s, a] of Object.entries(t)) e[s] = { default: (n = a.default) != null ? n : null, keepOnSplit: !1 }; return e }, F = ({ name: t, nodeSpec: e, addNodeView: n, addCommands: s }) => Qt.create({ name: t, content: e.content, marks: e.marks, group: e.group, inline: e.inline, atom: e.atom, selectable: e.selectable, draggable: e.draggable, code: e.code, whitespace: e.whitespace, defining: e.defining, isolating: e.isolating, addNodeView: n, addCommands: s, renderHTML(a) { return this.options.isStatic && e.toDOMStatic ? e.toDOMStatic(a.node) : e.toDOM(a.node) }, parseHTML() { return e.parseDOM }, addAttributes() { return TZ({ attrs: e.attrs }) } }), DZ = ({ doc: t, extensions: e, customDocument: n }) => { const s = lu(e), a = uu.fromJSON(s, t), o = document.createElement("div"); return Ea.fromSchema(s).serializeFragment(a.content, { document: n }, o), o.innerHTML }, re = t => { try { if (typeof t != "string") { const e = t.getAttribute("data-attrs"); if (e) return JSON.parse(e) } } catch (e) { return !1 } return !1 }, IZ = () => ({ userId: { default: null, keepOnSplit: !1 }, userName: { default: null, keepOnSplit: !1 }, canDm: { default: null, keepOnSplit: !1 }, dmUpgradeOptions: { default: null, keepOnSplit: !1 }, isEditorNode: { default: !1, keepOnSplit: !1 } }), zs = "directMessage", Qp = { name: zs, group: "block", selectable: !0, inline: !1, draggable: !0, atom: !0, attrs: Fp({ attrs: IZ() }), parseDOM: [{ tag: "div.directMessage", getAttrs: t => { try { if (t instanceof HTMLElement) { const e = t.getAttribute("data-attrs"); if (e) return JSON.parse(e) } } catch (e) { return !1 } return !1 } }], toDOM: t => { if (typeof window != "undefined" && t.attrs.isEditorNode) try { t.attrs.isEditor = !0; const n = document.createElement("div"); return n.className = zs, n.setAttribute("data-attrs", JSON.stringify(t.attrs)), Fe(p(qp, { node: S({}, t) }), n), n } catch (n) { return console.error("Error rendering DirectMessageEditor", n), Oe({ msg: null, node: t, err: n, group: "block" }) } return ["div", { class: `${zs} button`, "data-attrs": JSON.stringify(S({}, t.attrs)), "data-component-name": "DirectMessageToDOM" }] }, toDOMStatic: t => ["div", { class: zs, "data-attrs": JSON.stringify(P(S({}, t.attrs), { isEmail: !0 })), "data-component-name": "DirectMessageToDOMStatic" }] }, ed = Pe.create({ name: "directMessageExtension", addCommands() { return { insertDirectMessage: t => ({ dispatch: e, state: n }) => { const { user: s } = t, a = { userName: s.name, userId: s.id, isEditorNode: !0 }; return e && e(ie(n, n.schema.nodes.directMessage.create(a))), !0 } } } }), NZ = F({ name: "directMessage", nodeSpec: Qp, addCommands: ed.addCommands, addNodeView() { return kt(qp) } }); class Ve { constructor(e, n) { this.match = e, this.match = e, this.handler = typeof n == "string" ? MZ(n) : n } } function MZ(t) { return function(e, n, s, a) { let o = t; if (n[1]) { let r = n[0].lastIndexOf(n[1]); o += n[0].slice(r + n[1].length), s += r; let i = s - a; i > 0 && (o = n[0].slice(r - i, r) + o, s = a) } return e.tr.insertText(o, s, a) } } const OZ = 500; function LZ({ rules: t }) { let e = new _t({ state: { init() { return null }, apply(n, s) { let a = n.getMeta(this); return a || (n.selectionSet || n.docChanged ? null : s) } }, props: { handleTextInput(n, s, a, o) { return al(n, s, a, o, t, e) }, handleDOMEvents: { compositionend: n => { setTimeout(() => { let { $cursor: s } = n.state.selection; s && al(n, s.pos, s.pos, "", t, e) }) } } }, isInputRules: !0 }); return e } function al(t, e, n, s, a, o) { if (t.composing) return !1; let r = t.state, i = r.doc.resolve(e); if (i.parent.type.spec.code) return !1; let c = i.parent.textBetween(Math.max(0, i.parentOffset - OZ), i.parentOffset, null, "") + s; for (let l = 0; l < a.length; l++) { let u = a[l].match.exec(c), d = u && a[l].handler(r, u, e - (u[0].length - s.length), n); if (d) return t.dispatch(d.setMeta(o, { transform: d, from: e, to: n, text: s })), !0 } return !1 } const RZ = (t, e) => { let n = t.plugins; for (let s = 0; s < n.length; s++) { let a = n[s], o; if (a.spec.isInputRules && (o = a.getState(t))) { if (e) { let r = t.tr, i = o.transform; for (let c = i.steps.length - 1; c >= 0; c--) r.step(i.steps[c].invert(i.docs[c])); if (o.text) { let c = r.doc.resolve(o.from).marks(); r.replaceWith(o.from, o.to, t.schema.text(o.text, c)) } else r.delete(o.from, o.to); e(r) } return !0 } } return !1 }, PZ = new Ve(/--$/, "—"), BZ = new Ve(/\.\.\.$/, "…"), zZ = new Ve(/(?:^|[\s\{\[\(\<'"\u2018\u201C])(")$/, "“"), qZ = new Ve(/"$/, "”"), FZ = new Ve(/(?:^|[\s\{\[\(\<'"\u2018\u201C])(')$/, "‘"), jZ = new Ve(/'$/, "’"), $Z = [zZ, qZ, FZ, jZ]; function nr(t, e, n = null, s) { return new Ve(t, (a, o, r, i) => { let c = n instanceof Function ? n(o) : n, l = a.tr.delete(r, i), u = l.doc.resolve(r), d = u.blockRange(), m = d && Fo(d, e, c); if (!m) return null; l.wrap(d, m); let f = l.doc.resolve(r - 1).nodeBefore; return f && f.type == e && ph(l.doc, r - 1) && (!s || s(o, f)) && l.join(r - 1), l }) } function ol(t, e, n = null) { return new Ve(t, (s, a, o, r) => { let i = s.doc.resolve(o), c = n instanceof Function ? n(a) : n; return i.node(-1).canReplaceWith(i.index(-1), i.indexAfter(-1), e) ? s.tr.delete(o, r).setBlockType(o, o, e, c) : null }) } const UZ = ({ filetype: t, filename: e }) => p("div", { className: "file-embed-wrapper-editor" }, p("div", { className: "file-embed-aligner" }, p("div", { className: "file-embed-container placeholder" }, p(td, null)))), td = () => p("div", { className: "embed-loader-container" }, p("div", { className: "embed-loader" }), p("div", { className: "embed-loader-text" }, "Loading...")), rl = new pu("substack-placeholder"); class VZ extends _t { add(e, n, s) { n = n || e.state.selection.from, s = s || Fl; const a = {}, o = e.state.tr; return o.setMeta(Ye, { add: { id: a, pos: n, url: s } }), e.dispatch(o), a } addFile(e, n, { name: s, type: a }) { n = n || e.state.selection.from; const o = {}, r = e.state.tr; return r.setMeta(Ye, { addFile: { id: o, pos: n, name: s, type: a } }), e.dispatch(r), o } remove(e, n) { const a = Ye.getState(e.state).find(null, null, o => o.id == n); if (a.length) { const o = a[0].from, r = e.state.tr; return r.setMeta(Ye, { remove: { id: n } }), e.dispatch(r), o } return null } replace(e, n, s) { const a = this.remove(e, n); return a !== null ? (e.dispatch(e.state.tr.insert(a - 1, s)), !0) : !1 } } const Ye = new VZ({ state: { init() { return du.empty }, apply(t, e) { e = e.map(t.mapping, t.doc); const n = t.getMeta(rl); if (n && n.add) { const s = document.createElement("a"); s.className = "image-link placeholder", s.href = "javascript:void(0)"; const a = document.createElement("img"); a.src = n.add.url, s.appendChild(a), s.ondrop = s.ondragstart = s.onmousedown = () => !1; const o = jo.widget(n.add.pos, s, { id: n.add.id }); e = e.add(t.doc, [o]) } else if (n && n.addFile) { const { name: s, type: a } = n.addFile, o = document.createElement("div"); ur(p(UZ, { filename: s, filetype: a }), o); const r = jo.widget(n.addFile.pos, o, { id: n.addFile.id }); e = e.add(t.doc, [r]) } else n && n.remove && (e = e.remove(e.find(void 0, void 0, s => s.id == n.remove.id))); return e } }, key: rl, props: { decorations(t) { return this.getState(t) } } }), Se = t => { const e = document.createElement("div"); return e.innerHTML = t, { dom: e.querySelector("svg") } }, tn = (t, e) => { if (!t.dom) return { dom: null }; const n = document.createElement("div"); n.className = "dropdown-item-container"; const s = document.createElement("span"); s.innerText = e; const a = document.createElement("div"); return a.className = "dropdown-item-svg", a.appendChild(t.dom), n.appendChild(a), n.appendChild(s), { dom: n } }; Se(` `); Se(` `); Se(` `); Se(` `); Se(` `); Se(` `); const HZ = Se(` `); Se(` `); Se(` `); const GZ = Se(` `), WZ = Se(` `); Se(` `); Se(` `); const JZ = Se(` `), YZ = Se(` `), KZ = Se(` `), XZ = Se(` `), ZZ = Se(` `), QZ = Se(` `); tn(ZZ, "Buttons..."); tn(GZ, "Code block"); tn(JZ, "Footnote"); tn(KZ, "Divider"); tn(XZ, "Paywall"); tn(QZ, "Poetry block"); tn(WZ, "Pullquote"); function eQ() { var t = arguments[0]; typeof t == "string" && (t = document.createElement(t)); var e = 1, n = arguments[1]; if (n && typeof n == "object" && n.nodeType == null && !Array.isArray(n)) { for (var s in n) if (Object.prototype.hasOwnProperty.call(n, s)) { var a = n[s]; typeof a == "string" ? t.setAttribute(s, a) : a != null && (t[s] = a) } e++ } for (; e < arguments.length; e++) nd(t, arguments[e]); return t } function nd(t, e) { if (typeof e == "string") t.appendChild(document.createTextNode(e)); else if (e != null) if (e.nodeType != null) t.appendChild(e); else if (Array.isArray(e)) for (var n = 0; n < e.length; n++) nd(t, e[n]); else throw new RangeError("Unsupported child node: " + e) } var ns = "http://www.w3.org/2000/svg", tQ = "http://www.w3.org/1999/xlink", sr = "ProseMirror-icon"; function nQ(t) { for (var e = 0, n = 0; n < t.length; n++) e = (e << 5) - e + t.charCodeAt(n) | 0; return e } function sQ(t) { var e = document.createElement("div"); if (e.className = sr, t.path) { var n = "pm-icon-" + nQ(t.path).toString(16); document.getElementById(n) || aQ(n, t); var s = e.appendChild(document.createElementNS(ns, "svg")); s.style.width = t.width / t.height + "em"; var a = s.appendChild(document.createElementNS(ns, "use")); a.setAttributeNS(tQ, "href", /([^#]*)/.exec(document.location)[1] + "#" + n) } else t.dom ? e.appendChild(t.dom.cloneNode(!0)) : (e.appendChild(document.createElement("span")).textContent = t.text || "", t.css && (e.firstChild.style.cssText = t.css)); return e } function aQ(t, e) { var n = document.getElementById(sr + "-collection"); n || (n = document.createElementNS(ns, "svg"), n.id = sr + "-collection", n.style.display = "none", document.body.insertBefore(n, document.body.firstChild)); var s = document.createElementNS(ns, "symbol"); s.id = t, s.setAttribute("viewBox", "0 0 " + e.width + " " + e.height); var a = s.appendChild(document.createElementNS(ns, "path")); a.setAttribute("d", e.path), n.appendChild(s) } var Co = "ProseMirror-menu", sd = function(e) { this.spec = e }; sd.prototype.render = function(e) { var n = this.spec, s = n.render ? n.render(e) : n.icon ? sQ(n.icon) : n.label ? eQ("div", null, il(e, n.label)) : null; if (!s) throw new RangeError("MenuItem without icon or label property"); if (n.title) { var a = typeof n.title == "function" ? n.title(e.state) : n.title; s.setAttribute("title", il(e, a)) } n.class && s.classList.add(n.class), n.css && (s.style.cssText += n.css), s.addEventListener("mousedown", function(r) { r.preventDefault(), s.classList.contains(Co + "-disabled") || n.run(e.state, e.dispatch, e, r) }); function o(r) { if (n.select) { var i = n.select(r); if (s.style.display = i ? "" : "none", !i) return !1 } var c = !0; if (n.enable && (c = n.enable(r) || !1, cl(s, Co + "-disabled", !c)), n.active) { var l = c && n.active(r) || !1; cl(s, Co + "-active", l) } return !0 } return { dom: s, update: o } }; function il(t, e) { return t._props.translate ? t._props.translate(e) : e } function cl(t, e, n) { n ? t.classList.add(e) : t.classList.remove(e) } const oQ = 1900; let ad = class od extends sd { constructor(e, n) { super(e); const s = this.spec.run; this.spec.run = (a, o, r, i) => (se(ae.EDITOR_MENU_ICON_CLICKED, { button: n || this.spec.label || this.spec.title }), s.call(this, a, o, r, i)) } static fromMenuItem(e, n) { const { spec: s } = e; return new od(s, n) } }; const jt = "ProseMirror-prompt", ar = `${jt}-visible`; class rd { constructor(e) { this.options = e } read(e) { return e.value } validate(e) { return e = this.clean(e), !e && this.options.required ? "Required field" : this.options.validate && this.options.validate(e) } clean(e) { return this.options.clean ? this.options.clean(e) : e } } class Va extends rd { render() { const e = document.createElement("input"); return e.type = "text", e.placeholder = this.options.label, e.value = this.options.value || "", e.className = this.options.className || "", e.autocomplete = "off", e } } class rQ extends rd { render() { const e = document.createElement("select"); e.value = this.options.value || ""; const n = document.createElement("option"); return n.textContent = this.options.label, n.value = "", e.appendChild(n), this.options.options.forEach((s, a) => { const o = document.createElement("option"); o.textContent = s.label, o.value = String(a), e.appendChild(o) }), this.options.onChange && e.addEventListener("change", () => { const s = this.read(e); this.options.onChange(s) }, !1), e } read(e) { const n = this.options.options[e.value]; return n && n.value } } class iQ extends Va { constructor(e, n, s = "en") { const { iString: a } = I18N.i(s); super({ label: a("Enter URL..."), className: "url-input", value: n || e && e.mark.attrs.href || "", required: !0, clean: o => { let r; return o ? (r = o.trim(), r = r.startsWith("http") || r.startsWith("mailto") || /^%%.*%%$/.test(r) ? r : `http://${r}`) : r = "", r }, validate: o => { if (!/^%%.*%%$/.test(o)) { if (o.startsWith(`${rt()}/publish/post/`) && alert(a("This is a link to a post draft. Readers will not be able to access this page.")), o.length > oQ) return a("Link is too long"); try { const r = new URL(o); if (["http:", "https:", "mailto:"].includes(r.protocol)) return } catch (r) { console.error("Failed to parse URL:", r) } return o.startsWith("http") ? a("Invalid URL") : a("Invalid URL. Try using http://") } } }) } } function cQ(t, e) { const { from: n, $from: s, to: a, empty: o } = t.selection; return o ? !!e.isInSet(t.storedMarks || s.marks()) : t.doc.rangeHasMark(n, a, e) } function id(t) { return t == null ? null : t.scrollHeight > t.clientHeight ? t : id(t.parentElement) } function ma(t) { if (Jr(t)) return; const { iString: e } = I18N.i(t.language || "en"), n = `${jt}-${t.parentClass}`, s = t.root || document.body, a = t.scrollParent && document.querySelector && document.querySelector(t.scrollParent) || id(s) || window, o = s.appendChild(document.createElement("div")); o.classList.add(jt), t.className && o.classList.add(t.className), o.id = n, jl(document.body, ar); const r = h => { o.contains(h.target) || l() }, i = () => { var h; if (t.position) t.position(o, u); else { const g = t.parentClass && ((h = document.querySelector) == null ? void 0 : h.call(document, `.${t.parentClass}`)); if (g) { const b = g.getBoundingClientRect(); o.style.top = `${b.bottom+(t.offsetTop||0)}px`, o.style.left = `${b.left+(t.offsetLeft||0)}px` } else { const b = o.getBoundingClientRect(); o.style.top = `${(window.innerHeight-b.height)/2+(t.offsetTop||0)}px`, o.style.left = `${(window.innerWidth-b.width)/2+(t.offsetLeft||0)}px` } } }, c = h => { var b; h && h.preventDefault(); const g = lQ((b = t.fields) != null ? b : {}, d); g && l(g) }, l = h => { pr(document.body, ar), window.removeEventListener("mousedown", r), window.removeEventListener("resize", i, !1), a.removeEventListener("scroll", i, !1), o.parentNode && o.parentNode.removeChild(o), h ? (t.onSubmit && t.onSubmit(h), t.callback && t.callback(h)) : t.onCancel && t.onCancel(), t.onClose && t.onClose() }; setTimeout(() => window.addEventListener("mousedown", r), 50), window.addEventListener("resize", i, !1), a.addEventListener("scroll", i, !1); const u = o.appendChild(document.createElement("span")); u.className = "head"; const d = []; let m = 0; for (const h in t.fields) { m++; const g = t.fields[h].render(); g.tabIndex = m, d.push(g) } const f = o.appendChild(document.createElement("form")); if (t.title && (f.appendChild(document.createElement("h5")).textContent = t.title), d.forEach(h => { f.appendChild(document.createElement("div")).appendChild(h) }), !t.no_buttons) { const h = document.createElement("button"); h.type = "submit", h.className = `${jt}-submit`, h.textContent = t.submitText || "OK", h.addEventListener("click", c); const g = document.createElement("button"); g.type = "button", g.className = `${jt}-cancel`, g.textContent = e("Cancel"), g.addEventListener("click", () => l()); const b = f.appendChild(document.createElement("div")); b.className = `${jt}-buttons`, b.appendChild(h), b.appendChild(document.createTextNode(" ")), b.appendChild(g) } if (t.footer && f.appendChild(t.footer), t.openseaEmbedFooter && f.appendChild(t.openseaEmbedFooter), i(), f.addEventListener("submit", c), t.onInput && f.addEventListener("input", h => { var g; (g = t.onInput) == null || g.call(t, h, o) }), f.addEventListener("keydown", h => { if (h.keyCode == 27) h.preventDefault(), l(); else if (h.keyCode == 13 && !(h.ctrlKey || h.metaKey || h.shiftKey)) h.preventDefault(), c(); else if (h.keyCode == 9 && (window.setTimeout(() => { o.contains(document.activeElement) || l() }, 500), d.length > 1)) { for (let g = 0; g < d.length; g++) if (document.activeElement === d[g]) { g === 0 && h.shiftKey ? (h.preventDefault(), d[d.length - 1].focus()) : g === d.length - 1 && !h.shiftKey && (h.preventDefault(), d[0].focus()); break } } }), f.elements.length > 0) { let h = f.elements[0]; const g = Array.from(f.elements); for (const b of g) if (!b.value && ["INPUT", "TEXTAREA"].includes(b.nodeName)) { h = b; break } h.focus() } } function Jr(t) { var s; const e = `${jt}-${t.parentClass}`, n = document.getElementById(e); if (n) { let a; return n.querySelector && (a = n.querySelector(`.${jt}-cancel`)), a ? a.click() : ((s = n.parentNode) == null || s.removeChild(n), pr(document.body, ar)), !0 } } function lQ(t, e) { const n = {}; let s = 0; for (const o in t) { const r = t[o], i = e[s++], c = r.read(i), l = r.validate(c); if (l) return uQ(i, l), null; n[o] = r.clean(c) } return n } function uQ(t, e) { const n = t.parentNode; if (!n) return; const s = n.appendChild(document.createElement("div")); s.style.left = `${t.offsetLeft+t.offsetWidth+2}px`, s.style.top = `${t.offsetTop-5}px`, s.className = "ProseMirror-invalid", s.textContent = e, setTimeout(() => n.removeChild(s), 1500) } function pQ(t, e) { const n = t.selection.$from; for (let s = n.depth; s >= 0; s--) { const a = n.index(s); if (n.node(s).canReplaceWith(a, a, e)) return !0 } return !1 } const ll = { Enter: 13, Backspace: 8, Tab: 9, Shift: 16, Ctrl: 17, Alt: 18, Pause: 19, CapsLock: 20, Esc: 27, Space: 32, PageUp: 63276, PageDown: 63277, End: 63275, Home: 63273, Left: 63234, Up: 63232, Right: 63235, Down: 63233, PrintScrn: 44, Insert: 63302, Delete: 63272, ";": 186, "=": 187, Mod: 93, "*": 106, "-": 189, ".": 190, "/": 191, ",": 188, "`": 192, "[": 219, "\\": 220, "]": 221, "'": 222 }; function dQ(t) { return ll[t] ? ll[t] : t.toUpperCase().charCodeAt(0) } function mQ(t, e) { const n = e.split(/-(?!'?$)/), s = n.indexOf("Mod") !== -1, a = n.indexOf("Cmd") !== -1, o = n.indexOf("Ctrl") !== -1, r = n.indexOf("Shift") !== -1, i = n.indexOf("Alt") !== -1, c = n[n.length - 1], l = dQ(c), u = Df(), d = new CustomEvent("keydown", { bubbles: !0, cancelable: !0 }); d.key = c.replace(/Space/g, " "), d.shiftKey = r, d.altKey = i, d.ctrlKey = o || !u && s, d.metaKey = a || u && s, d.keyCode = l, d.which = l, d.view = window, t.dispatchEvent(d) } const De = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAY4AAAB0BAMAAABgVMiEAAAAMFBMVEX////7+/vt7e3o6Ojm5ubn5+fu7u709PTs7Oz39/f19fX29vby8vLx8fHz8/Pw8PCxY+A8AAAAoklEQVR4AWJgVHYZ+sBIgEE0vXzog7JAhrZZq4Y+WJnB4A5o5w5oAAYBGAi6mcKpQgIaClhCBklz7+AM/Gjo5+Dg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODgeO7g4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4OD4Zse3dmVXfIST0/B1vh0UtMKbNF7rAAAAAElFTkSuQmCC"; function fQ(t, e) { let n = null, s = [], a = []; return (...o) => new Promise((r, i) => { n !== null && window.clearTimeout(n), n = window.setTimeout(() => { t(...o).then(c => { s.forEach(l => l(c)), s = [] }).catch(c => { a.forEach(l => l(c)), a = [] }) }, e), s.push(r), a.push(i) }) } const hQ = ({ node: t, editor: e, deleteNode: n, updateAttributes: s, getPos: a }) => { const o = t.attrs, r = P(S({}, o), { isEditor: !!e }); return p(wt, { className: "digestPostEmbed", "data-drag-handle": "" }, p(yu, S({}, P(S({}, r), { isEditor: !0, editor: e, updateAttributes: s, deleteNode: n, getPos: a })))) }, Gs = "digest-post-embed", cd = { attrs: { nodeId: { default: null }, caption: { default: null }, size: { default: null }, isEditorNode: { default: !1 }, title: { default: null }, publishedBylines: { default: null }, post_date: { default: null }, cover_image: { default: null }, cover_image_alt: { default: null }, canonical_url: { default: null }, section_name: { default: null }, id: { default: null }, type: { default: null }, reaction_count: { default: null }, comment_count: { default: null }, publication_name: { default: null }, publication_logo_url: { default: null }, belowTheFold: { default: !1 } }, group: "block", draggable: !0, atom: !0, selectable: !0, isolating: !0, defining: !0, editable: !1, parseDOM: [{ tag: `.${Gs}`, getAttrs: t => { try { const e = JSON.parse(t.getAttribute("data-attrs")); return P(S({}, e), { nodeId: ka() }) } catch (e) { return !1 } } }], toDOM: t => { if (typeof window != "undefined" && t.attrs.isEditorNode) try { const e = document.createElement("div"); return e.className = Gs, e.setAttribute("data-attrs", JSON.stringify(t.attrs)), Fe(p(yu, P(S({}, t.attrs), { caption: t.attrs.caption, size: t.attrs.size || void 0, isEditor: !0 })), e), e } catch (e) { return console.error("Error rendering DigestPostEmbedWeb", e), Oe({ msg: null, node: t, err: e, group: "block" }) } return bQ(t) }, toDOMStatic: t => ["div", { class: Gs, "data-attrs": JSON.stringify(S({ isEmail: !0 }, t.attrs)) }] }, gQ = F({ name: "digestPostEmbed", nodeSpec: cd, addNodeView() { return kt(hQ) }, addCommands() { return { convertDigestPostEmbedToLinkV2: ({ pos: t, url: e }) => ({ dispatch: n, state: s, chain: a }) => { if (n) { const o = s.tr, r = t, i = r + e.length; return a().setNodeSelection(t).deleteSelection().command(({ tr: c }) => (c.insertText(e, r), !0)).command(({ tr: c }) => (c.addMark(r, i + 1, s.schema.marks.link.create({ text: e, href: e })), !0)).setTextSelection(Ee.create(o.doc, r, i + 1)).scrollIntoView().focus(i + 2).run() } return !0 }, convertDigestPostEmbedToEmbeddedPostV2: ({ pos: t, attrs: e }) => ({ dispatch: n, chain: s }) => { if (n) { const a = { id: e.id, url: e.url, title: e.title, publication_name: e.publication_name, publication_logo_url: e.publication_logo_url, date: e.post_date, comment_count: e.comment_count, bylines: e.publishedBylines }; return s().setNodeSelection(t).deleteCurrentNode().insertContent({ type: "embeddedPost", attrs: a }).run() } return !0 } } } }), bQ = t => ["div", { class: Gs, "data-attrs": JSON.stringify(t.attrs) }], Yr = (t, { customSchema: e } = {}) => { var a, o, r, i; if (e && !e.nodes.digestPostEmbed) return null; const n = lt(t); if (!n) return null; const s = $l({ url: t, currentSubdomain: (o = (a = window._preloads) == null ? void 0 : a.pub) == null ? void 0 : o.subdomain, currentCustomDomain: (i = (r = window._preloads) == null ? void 0 : r.pub) == null ? void 0 : i.custom_domain }); return n && (n.pathname.startsWith("/p/") || Ul(n)) && s ? t : null }, ld = t => N(void 0, null, function*() { const e = yield he.get("/api/v1/posts/digest_embed").query({ url: t.trim() }), { pub: n, post: s } = e.body, d = s, { truncated_body_text: a } = d, o = st(d, ["truncated_body_text"]), { name: r, logo_url: i } = n, l = na(o, ["title", "publishedBylines", "post_date", "cover_image", "cover_image_alt", "canonical_url", "section_name", "id", "type", "reaction_count", "comment_count"]); return P(S({ caption: a != null ? a : "", size: "lg", isEditor: !0 }, l), { publishedBylines: l.publishedBylines.map(m => na(m, ["id", "name", "bio", "photo_url", "is_guest", "bestseller_tier", "primaryPublicationSubscribeUrl", "primaryPublicationUrl", "primaryPublicationName", "primaryPublicationId"])), publication_name: r, publication_logo_url: i != null ? i : "" }) }), vQ = ` `, xQ = ` `, ud = { attrs: { id: { default: null }, url: { default: null }, publication_id: { default: null }, publication_name: { default: null }, publication_logo_url: { default: null }, title: { default: null }, truncated_body_text: { default: null }, date: { default: null }, like_count: { default: null }, comment_count: { default: null }, bylines: { default: null }, utm_campaign: { default: null }, belowTheFold: { default: !1 }, type: { default: null }, language: { default: "en" } }, untrackedAttrs: ["truncated_body_text", "bylines"], inline: !1, group: "block", draggable: !0, atom: !0, selectable: !0, isolating: !0, defining: !0, parseDOM: [{ tag: "div.embedded-post-wrap", getAttrs: re }], toDOM: t => { const { publication_logo_url: e, publication_name: n, title: s, truncated_body_text: a, url: o, bylines: r, date: i, like_count: c, comment_count: l, utm_campaign: u, id: d, type: m, language: f } = t.attrs, { iString: h } = I18N.i(f), g = yt(o, { utm_source: qe.substack, utm_campaign: u || Ut.postEmbed, utm_medium: Kn.web }); g === "" && console.error(`Invalid path (${o}) for post: ${d}`); const b = document.createElement("div"); b.classList.add("embedded-post-title-icon"), b.innerHTML = vQ; const x = document.createElement("div"); return x.classList.add("embedded-post-cta-icon"), x.innerHTML = xQ, ["div", { class: "embedded-post-wrap", "data-attrs": JSON.stringify(t.attrs), "data-component-name": "EmbeddedPostToDOM" }, ["a", { class: "embedded-post", native: !0, href: g }, ["div", { class: "embedded-post-header" }, e ? ["img", { class: "embedded-post-publication-logo", src: q(e, 56), loading: t.attrs.belowTheFold ? "lazy" : null }] : ["span", {}], ["span", { class: "embedded-post-publication-name" }, n || h("Failed to embed post")] ], ["div", { class: "embedded-post-title-wrapper" }, ...m === "podcast" ? [b] : [], ["div", { class: "embedded-post-title" }, s || h("Failed to embed post")] ], ...a ? [ ["div", { class: "embedded-post-body" }, Oi(a)] ] : [], ["div", { class: "embedded-post-cta-wrapper" }, ...m === "podcast" ? [x] : [], ["span", { class: "embedded-post-cta" }, h(m === "podcast" ? "Listen now" : "Read more")] ], ["div", { class: "embedded-post-meta" }, Li({ date: i, bylines: r, like_count: c, comment_count: l, language: f })] ] ] }, toDOMStatic: t => { const { publication_logo_url: e, publication_name: n, title: s, truncated_body_text: a, url: o, bylines: r, date: i, like_count: c, comment_count: l, utm_campaign: u, type: d, language: m } = t.attrs, { iString: f } = I18N.i(m), h = yt(o, { utm_source: qe.substack, utm_campaign: u || Ut.postEmbed, utm_medium: Kn.email }), g = q("/img/podcast-headphones.svg", 19, { format: "png" }), b = q("/img/audio-player-play.png", 12); return ["div", { class: "embedded-post-wrap", "data-component-name": "EmbeddedPostToDOMStatic" }, ["div", { class: "embedded-post" }, ["div", { class: "embedded-post-header" }, e ? ["img", { class: "embedded-post-publication-logo", src: q(e, 56), width: 28, height: 28 }] : ["span", {}], ["span", { class: "embedded-post-publication-name" }, n || f("Failed to embed post")] ], ["div", { class: "embedded-post-title-wrapper" }, ...d === "podcast" ? [ ["img", { class: "embedded-post-title-icon embedded-post-title-icon-static", src: g }] ] : [], ["a", { class: "embedded-post-title", href: h || "#" }, s || f("Failed to embed post")] ], ...a ? [ ["div", { class: "embedded-post-body" }, Oi(a)] ] : [ ["br"], ["br"] ], ["div", { class: "embedded-post-cta-wrapper" }, ...d === "podcast" ? [ ["img", { width: 12, height: 12, class: "embedded-post-cta-icon-static", src: b }] ] : [], ["a", { class: "embedded-post-cta", href: h || "#" }, f(d === "podcast" ? "Listen now" : "Read more")] ], ["div", { class: "embedded-post-meta" }, Li({ date: i, bylines: r, like_count: c, comment_count: l, language: m })] ] ] } }, yQ = F({ name: "embeddedPost", nodeSpec: ud, addCommands() { return { insertEmbeddedPost: t => ({ commands: e }) => e.insertContent({ type: this.name, attrs: t }) } } }), pd = (t, { customSchema: e, forceAllowOwnPub: n = !1 } = {}) => { var r, i, c, l; if (e && !e.nodes.embeddedPost) return null; const s = lt(t); if (!s) return null; const o = $l({ url: t, currentSubdomain: (i = (r = window._preloads) == null ? void 0 : r.pub) == null ? void 0 : i.subdomain, currentCustomDomain: (l = (c = window._preloads) == null ? void 0 : c.pub) == null ? void 0 : l.custom_domain }) && !n; return s && (s.pathname.startsWith("/p/") || Ul(s)) && !o ? t : null }, wQ = t => N(void 0, null, function*() { const e = (yield Z(() => import ("./sortBy-53166f8e.js").then(n => n.c), ["assets/sortBy-53166f8e.js", "assets/x-933ea65f.js", "assets/tracking-5779d19a.js", "assets/_sentry-release-injection-file-9254565a.js", "assets/FlexBox-8b7f0d6c.js", "assets/FlexBox-644f665d.css", "assets/HoverCard-92fb7948.js", "assets/useResponsive-4f80f3bd.js", "assets/transition-d7aff1cb.js", "assets/_defineProperty-fcca2d9e.js", "assets/react-laag.esm-23de3db0.js", "assets/HoverCard-6364507e.css", "assets/responsive_img-3c51e57a.js", "assets/responsive_img-51b02764.css", "assets/sortBy-a6711bc6.css"])).default; try { return (yield e.get("/api/v1/posts/embed").query({ url: t.trim() })).body } catch (n) { return null } }), dd = (s, ...a) => N(void 0, [s, ...a], function*(t, { customSchema: e, language: n = "en" } = {}) { const r = (e ? { schema: e } : yield Z(() => Promise.resolve().then(() => Te), void 0)).schema, i = yield wQ(t); return i ? r.nodes.embeddedPost.create(P(S({}, i), { language: n })) : null }), Eo = t => t ? { style: `background-color: ${t}` } : {}, fa = { attrs: { id: { default: null }, name: { default: "" }, logo_url: { default: null }, base_url: { default: null }, hero_text: { default: null }, author_name: { default: null }, show_subscribe: { default: !0 }, logo_bg_color: { default: null }, language: { default: "en" } }, inline: !1, group: "block", draggable: !0, atom: !0, selectable: !0, isolating: !0, defining: !0, parseDOM: [{ tag: "div.embedded-publication-wrap", getAttrs: re }], toDOMWithSubscribe: t => { const { name: e, logo_url: n, base_url: s, hero_text: a, author_name: o, logo_bg_color: r, language: i } = t.attrs, { iString: c, iTemplate: l } = I18N.i(i); return ["div", { class: "embedded-publication-wrap", "data-attrs": JSON.stringify(t.attrs), "data-component-name": "EmbeddedPublicationToDOMWithSubscribe" }, ["div", { class: "embedded-publication show-subscribe" }, ["a", { class: "embedded-publication-link-part", native: !0, href: yt(s, { utm_source: qe.substack, utm_campaign: Ut.publicationEmbed, utm_medium: Kn.web }) }, ...n ? [ ["img", S({ class: "embedded-publication-logo", src: q(n), width: 56, height: 56 }, Eo(r))] ] : [], ["h3", { class: "embedded-publication-name" }, e || c("Failed to embed publication")], ...a ? [ ["div", { class: "embedded-publication-hero-text" }, a] ] : [], ...o && !e.includes(o) ? [ ["div", { class: "embedded-publication-author-name" }, l `By ${o}`] ] : [] ], ["form", { class: "embedded-publication-subscribe", method: "GET", action: If({ base_url: s }, { addBase: !0 }) }, ["input", { type: "hidden", name: "source", value: "publication-embed" }], ["input", { type: "hidden", name: "autoSubmit", value: "true" }], ["input", { type: "email", class: "email-input", name: "email", placeholder: c("Type your email...") }], ["input", { type: "submit", class: "button primary", value: c("Subscribe") }] ] ] ] }, toDOMWithoutSubscribe: t => { const { name: e, logo_url: n, base_url: s, hero_text: a, author_name: o, logo_bg_color: r, language: i } = t.attrs, { iString: c, iTemplate: l } = I18N.i(i); return ["div", { class: "embedded-publication-wrap", "data-attrs": JSON.stringify(t.attrs) }, ["a", { class: "embedded-publication embedded-publication-flex", native: !0, href: yt(s, { utm_source: qe.substack, utm_campaign: Ut.publicationEmbed, utm_medium: Kn.web }) }, ...n ? [ ["div", { class: "embedded-publication-left" }, ["img", S({ class: "embedded-publication-logo", src: q(n), width: 40, height: 40 }, Eo(r))] ] ] : [], ["div", { class: "embedded-publication-right" }, ["h3", { class: "embedded-publication-name" }, e || c("Failed to embed publication")], ...a ? [ ["div", { class: "embedded-publication-hero-text" }, a] ] : [], ...o && !e.includes(o) ? [ ["div", { class: "embedded-publication-author-name" }, l `By ${o}`] ] : [] ] ] ] }, toDOMStatic: t => { const { name: e, logo_url: n, base_url: s, hero_text: a, author_name: o, logo_bg_color: r } = t.attrs, i = yt(s, { utm_source: qe.substack, utm_campaign: Ut.publicationEmbed, utm_medium: Kn.email }); return ["div", { class: "embedded-publication-wrap", "data-attrs": JSON.stringify(t.attrs), "data-component-name": "EmbeddedPublicationToDOMStatic" }, ["table", { class: "embedded-publication" }, ["tr", {}, ...n ? [ ["td", { class: "embedded-publication-left", valign: "top", width: 56 }, ["img", S({ class: "embedded-publication-logo", src: q(n), width: 40, height: 40 }, Eo(r))] ] ] : [], ["td", { class: "embedded-publication-right" }, ["h3", { class: "embedded-publication-name" }, ["a", { href: i }, e || "Failed to embed publication"] ], ...a ? [ ["div", { class: "embedded-publication-hero-text" }, ["a", { href: i }, a] ] ] : [], ...o && !e.includes(o) ? [ ["div", { class: "embedded-publication-author-name" }, ["a", { href: i }, `By ${o}`] ] ] : [] ] ] ] ] }, toDOM: t => t.attrs.show_subscribe ? fa.toDOMWithSubscribe(t) : fa.toDOMWithoutSubscribe(t) }, kQ = F({ name: "embeddedPublication", nodeSpec: fa, addCommands() { return { insertEmbeddedPublication: t => ({ commands: e }) => e.insertContent({ type: this.name, attrs: t }) } } }), md = (t, { customSchema: e } = {}) => { if (e && !e.nodes.embeddedPublication) return null; const n = lt(t); return n && (!n.pathname || n.pathname === "/") ? t : null }, fd = t => N(void 0, null, function*() { const e = (yield Z(() => import ("./sortBy-53166f8e.js").then(n => n.c), ["assets/sortBy-53166f8e.js", "assets/x-933ea65f.js", "assets/tracking-5779d19a.js", "assets/_sentry-release-injection-file-9254565a.js", "assets/FlexBox-8b7f0d6c.js", "assets/FlexBox-644f665d.css", "assets/HoverCard-92fb7948.js", "assets/useResponsive-4f80f3bd.js", "assets/transition-d7aff1cb.js", "assets/_defineProperty-fcca2d9e.js", "assets/react-laag.esm-23de3db0.js", "assets/HoverCard-6364507e.css", "assets/responsive_img-3c51e57a.js", "assets/responsive_img-51b02764.css", "assets/sortBy-a6711bc6.css"])).default; try { const n = yield e.get("/api/v1/publication/embed").query({ url: t.trim() }); return n.body.id ? n.body : null } catch (n) { return null } }), _Q = t => N(void 0, null, function*() { const e = yield fd(t); return e ? P(S({}, e), { show_subscribe: !0 }) : null }), hd = (n, ...s) => N(void 0, [n, ...s], function*(t, { customSchema: e } = {}) { const o = (e ? { schema: e } : yield Z(() => Promise.resolve().then(() => Te), void 0)).schema, r = yield _Q(t); return r ? o.nodes.embeddedPublication.create(r) : null }), gd = { attrs: { collection: { default: "" }, collection_slug: { default: "" }, creator: { default: "" }, description: { default: "" }, image_url: { default: "" }, name: { default: "" }, animation_url: { default: "" }, nft_logo_url: { default: "" }, permalink: { default: "" }, youtube_url: { default: null }, belowTheFold: { default: !1 } }, inline: !1, group: "block", draggable: !0, atom: !0, selectable: !0, isolating: !0, defining: !0, parseDOM: [{ tag: "div.opensea", getAttrs: re }], toDOMStatic: TQ, toDOM: DQ }, CQ = F({ name: "opensea", nodeSpec: gd, addCommands() { return { insertOpensea: t => ({ commands: e }) => e.insertContent({ type: this.name, attrs: t }) } } }), EQ = t => { var e, n, s; return (s = (n = (e = lt(t)) == null ? void 0 : e.pathname.match(/assets\/(ethereum\/)?(.+)/)) == null ? void 0 : n[2]) == null ? void 0 : s.split("/")[0] }, AQ = t => { var e, n, s; return (s = (n = (e = lt(t)) == null ? void 0 : e.pathname.match(/assets\/(ethereum\/)?(.+)/)) == null ? void 0 : n[2]) == null ? void 0 : s.split("/")[1] }, SQ = t => N(void 0, null, function*() { return (yield he.get("/api/v1/opensea").query({ contract: EQ(t), token_id: AQ(t) })).body }), bd = (n, s) => N(void 0, [n, s], function*(t, { customSchema: e }) { return e.nodes.opensea.create(yield SQ(t)) }); function TQ(t) { const e = document.createElement("div"); e.className = "opensea static", e.setAttribute("data-component-name", "OpenseaToDOMStatic"); const n = document.createElement("table"); n.className = "opensea-header-table"; const s = document.createElement("tr"); s.className = "opensea-header-row"; const a = document.createElement("tr"), o = document.createElement("td"), r = document.createElement("a"); r.className = "opensea-title", t.attrs.permalink && r.setAttribute("href", t.attrs.permalink), r.textContent = t.attrs.name, o.appendChild(r), a.appendChild(r); const i = document.createElement("tr"), c = document.createElement("td"), l = document.createElement("a"); l.className = "opensea-collection", t.attrs.collection_slug && l.setAttribute("href", `https://opensea.io/collection/${t.attrs.collection_slug}`), l.textContent = it(t.attrs.collection, 50), c.appendChild(l), i.appendChild(c); const u = document.createElement("td"), d = document.createElement("table"); u.className = "opensea-masthead", d.appendChild(a), d.appendChild(i), u.appendChild(d); const m = document.createElement("td"); m.className = "nft-logo"; const f = document.createElement("a"), h = document.createElement("img"); t.attrs.nft_logo_url && h.setAttribute("src", q(t.attrs.nft_logo_url)), t.attrs.permalink && f.setAttribute("href", t.attrs.permalink), t.attrs.belowTheFold && f.setAttribute("loading", "lazy"), f.appendChild(h), m.appendChild(f), s.appendChild(u), s.appendChild(m), n.appendChild(s); const g = document.createElement("a"); t.attrs.permalink && g.setAttribute("href", t.attrs.permalink); const b = document.createElement("img"); b.className = "opensea-image", t.attrs.image_url && b.setAttribute("src", q(t.attrs.image_url, 600, { crop: "fill" })), b.setAttribute("alt", t.attrs.name), b.setAttribute("width", "500"), t.attrs.belowTheFold && b.setAttribute("loading", "lazy"), g.appendChild(b); const x = document.createElement("table"); x.className = "opensea-footer-table"; const v = document.createElement("tr"), w = document.createElement("td"); w.className = "opensea-description", w.textContent = it(t.attrs.description, 200), v.appendChild(w); const E = document.createElement("tr"), _ = document.createElement("td"), k = document.createElement("a"); _.className = "opensea-creator", t.attrs.creator && k.setAttribute("href", `https://opensea.io/${t.attrs.creator}?tab=created`), k.textContent = `Created by ${it(t.attrs.creator,50)}`, _.appendChild(k), E.appendChild(_); const M = document.createElement("tr"), y = document.createElement("td"), T = document.createElement("a"), D = document.createElement("table"), C = document.createElement("tr"), L = document.createElement("td"); return T.className = "opensea-cta-link", t.attrs.permalink && T.setAttribute("href", t.attrs.permalink), D.setAttribute("cellspacing", "16"), D.className = "opensea-cta-table", L.className = "opensea-cta", L.textContent = "View on OpenSea", C.appendChild(L), D.appendChild(C), T.appendChild(D), y.appendChild(T), M.appendChild(y), t.attrs.description && x.appendChild(v), x.appendChild(E), x.appendChild(M), e.appendChild(n), e.appendChild(g), e.appendChild(x), e.querySelectorAll && Array.prototype.forEach.call(e.querySelectorAll("a"), R => { R.target = "_blank" }), e } function DQ(t) { const e = document.createElement("div"); e.className = "opensea", e.setAttribute("data-component-name", "OpenseaToDOM"); const n = document.createElement("a"); n.className = "opensea-title", t.attrs.permalink && n.setAttribute("href", t.attrs.permalink), n.textContent = t.attrs.name; const s = document.createElement("a"); s.className = "opensea-collection", t.attrs.collection_slug && s.setAttribute("href", `https://opensea.io/collection/${t.attrs.collection_slug}`), s.textContent = it(t.attrs.collection, 50); const a = document.createElement("div"); a.className = "opensea-masthead", a.appendChild(n), a.appendChild(s); const o = document.createElement("a"); t.attrs.permalink && o.setAttribute("href", t.attrs.permalink); const r = document.createElement("img"); t.attrs.nft_logo_url && r.setAttribute("src", q(t.attrs.nft_logo_url)), t.attrs.belowTheFold && r.setAttribute("loading", "lazy"), o.appendChild(r); const i = document.createElement("div"); i.className = "opensea-header", i.appendChild(a), i.appendChild(o); const c = document.createElement("a"); t.attrs.permalink && c.setAttribute("href", t.attrs.permalink), c.className = "opensea-media-link"; let l, u; const d = ["gltf", "glb", "webm", "mp4", "m4v", "ogv", "ogg"], f = ["mp3", "wav", "oga"].some(k => { var M; return (M = t.attrs.animation_url) == null ? void 0 : M.endsWith(k) }), h = d.some(k => { var M; return (M = t.attrs.animation_url) == null ? void 0 : M.endsWith(k) }), g = !t.attrs.animation_url, b = t.attrs.animation_url && !f && !h; (g || f || b || t.attrs.youtube_url) && (u = document.createElement("img"), u.className = "opensea-image", t.attrs.image_url && u.setAttribute("src", q(t.attrs.image_url, 600, { crop: "fill" })), t.attrs.belowTheFold && u.setAttribute("loading", "lazy"), u.setAttribute("alt", t.attrs.name), c.appendChild(u)), (f || h) && (l = document.createElement(f ? "audio" : "video"), l.className = "opensea-player", l.setAttribute("controls", !0), l.setAttribute("loop", !0), l.setAttribute("src", t.attrs.animation_url), l.setAttribute("alt", "OpenSea NFT media"), t.attrs.belowTheFold && l.setAttribute("loading", "lazy")), u && c.appendChild(u), l && c.appendChild(l); const v = document.createElement("div"); v.className = "opensea-description", v.textContent = it(t.attrs.description, 200); const w = document.createElement("a"); w.className = "opensea-creator", t.attrs.creator && w.setAttribute("href", `https://opensea.io/${t.attrs.creator}?tab=created`), w.textContent = `Created by ${it(t.attrs.creator,50)}`; const E = document.createElement("a"); E.className = "opensea-cta", t.attrs.permalink && E.setAttribute("href", t.attrs.permalink), E.textContent = "View on OpenSea"; const _ = document.createElement("div"); return _.className = "opensea-footer", t.attrs.description && _.appendChild(v), _.appendChild(w), _.appendChild(E), e.appendChild(i), e.appendChild(c), e.appendChild(_), e.querySelectorAll && Array.prototype.forEach.call(e.querySelectorAll("a"), k => { k.target = "_blank" }), e } const IQ = /^https:\/\/opensea.io\/assets\/.+/, vd = t => { const e = IQ.exec(t); return e && e[0] }, xd = t => vd(t) !== null, Kr = new Set, NQ = wr((t, e, n) => { const s = e.trim(); fd(s).then(a => { a && (Kr.add(s), e === t.target.value && n.classList.add("has-substack-link")) }) }, 250, { maxWait: 1e3 }); function MQ(t, e) { if ("target" in t && t.target && "className" in t.target && t.target.className === "url-input" && "value" in t.target) { const { value: n } = t.target, s = n.trim(); if (Kr.has(s) || pd(s) || Yr(s)) { e.classList.add("has-substack-link"); return } if (xd(s)) { e.classList.add("has-opensea-link"); return } md(s) && NQ(t, n, e), e.classList.remove("has-substack-link"), e.classList.remove("has-opensea-link") } } function OQ(t, { scrollParent: e, publication: n, language: s } = {}) { const { iString: a, iTemplate: o } = I18N.i(s != null ? s : "en"), r = o `Link ${Vl()}K`; return new ad({ class: "mark-menu-item", title: r, icon: HZ, active(i) { return !!(er(i, [i.schema.nodes.image2, i.schema.nodes.image3]) ? da(i) : Qo(i, t)) || cQ(i, t) }, enable() { return !0 }, run(i, c, l) { const u = Qo(i, t); let d, m, f, h; u ? (d = u.pos, m = u, f = Wp(i, u.pos.from, u.pos.to, { allowedMarks: [t] }), h = u.node.textContent) : (d = i.selection, m = bZ(i, t), f = vZ(i, { allowedMarks: [t] }), h = i.doc.textBetween(i.selection.from, i.selection.to)); const g = er(i, [i.schema.nodes.captionedImage, i.schema.nodes.image2, i.schema.nodes.image3, i.schema.nodes.caption].filter(Boolean)), b = g ? da(i) : null; f = f && !g; const x = l.dom.parentNode, v = { className: "create-link-menu", submitText: a("Link"), parent: r, title: a("Create a link"), fields: {}, root: x, scrollParent: e, position: (C, L) => Yp(l, d, C, L), onInput: MQ, language: s }; f && v.fields && (v.fields.text = new Va({ label: a("Enter text…"), className: "text-input", value: h, required: !0 })), v.fields && (v.fields.href = new iQ(m, b, s)), v.onSubmit = C => { const L = i.tr; if (g) Jp(i, L, C.href); else if (i.selection.empty && !u) { const R = i.selection.from, A = R + C.text.length; L.insertText(C.text), L.addMark(R, A, t.create(C)), L.setSelection(Ee.create(L.doc, R, A)) } else C.text && C.text !== h ? (L.insertText(C.text, d.from), L.setSelection(Ee.create(L.doc, d.from, d.from + C.text.length)), L.deleteRange(d.from + C.text.length, d.to + C.text.length), L.addMark(d.from, d.from + C.text.length, t.create(C))) : L.addMark(d.from, d.to, t.create(C)); if (c) return l.dispatch(L), !0 }, v.onClose = () => { l.focus() }; const w = C => N(this, null, function*() { C.preventDefault(); const L = document.querySelector(".create-link-menu .url-input"); if (!L) { console.warn("could not find input for creating link menu selecting for ['.create-link-menu .url-input']"); return } const A = L.value.trim(); let I; Jr(v); const O = Ye.add(l, d.pos, De); try { if (se(ae.EMBED_URL_ATTEMPTED, { url: A, source: "link-menu" }), xd(A)) I = yield bd(A, { customSchema: l.state.schema }); else if (Kr.has(A)) I = yield hd(A); else if (Yr(A)) try { const B = yield ld(A); I = l.state.schema.nodes.digestPostEmbed.create(P(S({}, B), { isEditorNode: !0, nodeId: ka() })) } catch (B) { console.error(B), alert(a("Failed to find post. Please check the link and try again.")) } else I = yield dd(A, { customSchema: l.state.schema, language: n == null ? void 0 : n.language }); if (se(ae.EMBED_URL_SUCCEEDED, { url: A, source: "link-menu" }), I) Ye.replace(l, O, I); else throw Ye.remove(l, O), Error("No embed found") } catch (B) { se(ae.EMBED_URL_FAILED, { url: A, source: "link-menu" }), alert(a("Embed failed. Please check the url and try again.")) } }), E = document.createElement("div"); E.className = "create-link-menu-footer"; const _ = new DocumentFragment; _.append(document.createTextNode(o `There’s a fancier way to share Substack links with your readers:`)); const k = document.createElement("a"); k.innerText = o `Convert your link into an embed`, k.href = "#", k.addEventListener("click", w), _.append(k), E.append(_), v.footer = E; const M = document.createElement("div"); M.className = "opensea-embed-footer"; const y = new DocumentFragment, T = document.createElement("b"); T.textContent = "Tip: ", y.append(T), y.append(document.createTextNode("You can also ")); const D = document.createElement("a"); D.innerText = "embed your OpenSea NFT", D.href = "#", D.addEventListener("click", w), y.append(D), y.append(document.createTextNode(" to give your readers a visual preview.")), M.append(y), v.openseaEmbedFooter = M, ma(v) } }, "link") } const ul = typeof navigator != "undefined" ? /Mac/.test(navigator.platform) : !1, LQ = (t, e) => { const n = ["preformatted_text_block", "code_block", "codeBlock", "latex_block"], { $anchor: s } = t.selection, { parent: a } = s; if (!a || !n.includes(a.type.name)) return !1; if (!a.textContent.length && e) { const { tr: o } = t; return e(o.delete(o.selection.from - 1, o.selection.to + 1)), !0 } return !1 }; function RQ(t) { const e = {}; let n; function s(a, o) { const r = e[a]; r ? e[a] = function(i, c) { return r(i, c) || o(i, c) } : e[a] = o } if (s("Mod-z", jh), s("Shift-Mod-z", Ui), s("Backspace", RZ), s("Backspace", LQ), ul || s("Mod-y", Ui), s("Alt-ArrowUp", dh), s("Alt-ArrowDown", mh), s("Mod-BracketLeft", fh), s("Mod-k", yd(t)), (n = t.marks.strong || t.marks.bold) && (s("Mod-b", St(n)), s("Mod-B", St(n))), (n = t.marks.em || t.marks.italic) && (s("Mod-i", St(n)), s("Mod-I", St(n))), (n = t.marks.strikethrough || t.marks.strike) && (s("Shift-Mod-x", St(n)), s("Shift-Mod-X", St(n))), (n = t.marks.code) && s("Mod-`", St(n)), (n = t.nodes.blockquote) && s("Ctrl->", hh(n)), (n = t.marks.superscript) && s("Mod-.", St(n)), (n = t.marks.subscript) && s("Mod->", St(n)), n = t.nodes.hard_break || t.nodes.hardBreak) { const a = n, o = eo(vh, (r, i) => (i && i(r.tr.replaceSelectionWith(a.create()).scrollIntoView()), !0)); s("Mod-Enter", o), s("Shift-Enter", o), ul && s("Ctrl-Enter", o) } if ((n = t.nodes.list_item || t.nodes.listItem) && (s("Enter", gh(n)), s("Shift-Tab", eo(xh(n), () => !0)), s("Tab", eo(yh(n), () => !0))), n = t.nodes.heading) for (let a = 1; a <= 6; a++) s(`Shift-Ctrl-${a}`, bh(n, { level: a })); return e } const yd = t => (e, n, s) => { var a, o; return n && OQ(t.marks.link, { scrollParent: ".editor-scroll", language: typeof window != "undefined" ? (o = (a = window == null ? void 0 : window._preloads) == null ? void 0 : a.publication) == null ? void 0 : o.language : null }).spec.run(e, n, s), !0 }, Ha = (t, e, n, s, { targetUrl: a } = {}) => { let o = ["td", { class: "audio-details", "data-component-name": "AudioEmbedStatic" }, ["p", { class: "title" }, e], ["p", { class: "subtitle" }, n] ]; s && (o = [...o, ["p", { class: "metadata" }, s]]); const r = ["table", { class: "audio-embed-static", cellspacing: "12", "data-component-name": "AudioEmbedStaticTable" }, ["tr", {}, ["td", { class: "thumbnail-container" }, ["div", { class: "play-container" }, ["img", { class: "play", src: q("/img/thumbnail-play.png", 72), height: 36, width: 36 }] ], ["img", { class: "thumbnail", src: q(t, 160), height: 80, width: 80 }] ], o ] ]; return a ? ["a", { class: "audio-embed-static-outer", href: a, target: "_blank", "data-component-name": "AudioEmbedStaticLink" }, r] : r }, PQ = t => { const { url: e, isEpisode: n } = t.attrs; return ["div", { class: "apple-podcast-container", "data-component-name": "ApplePodcastToDom" }, ["iframe", { class: `apple-podcast ${n?"":"episode-list"}`, "data-attrs": JSON.stringify(t.attrs), src: e, frameborder: "0", allow: "autoplay *; encrypted-media *;", allowfullscreen: "true" }] ] }, BQ = t => { const { imageUrl: e, isEpisode: n, podcastTitle: s, podcastByline: a, duration: o, numEpisodes: r, targetUrl: i } = t.attrs; let c = t.attrs.title, l = s, u = Hl(o / 1e3); return n || (c = s, l = a, u = Nf(r, "episode", { zero_fallback: "No episodes" })), Ha(e, c, l, u, { targetUrl: i }) }, wd = { attrs: { url: { default: "" }, isEpisode: { default: !1 }, imageUrl: { default: "" }, title: { default: "" }, podcastTitle: { default: "" }, podcastByline: { default: "" }, duration: { default: "" }, numEpisodes: { default: "" }, targetUrl: { default: "" }, releaseDate: { default: "" } }, inline: !1, group: "block", draggable: !0, atom: !0, selectable: !0, isolating: !0, defining: !0, parseDom: [{ tag: "iframe.apple-podcast", getAttrs: re }], toDOM: PQ, toDOMStatic: BQ }, zQ = /[ { const e = zQ.exec(t); return e ? { match: e[0], embedLink: e[2], countryCode: e[3], slug: e[4], podcastId: e[5].substr(2), episodeId: e[7] } : { match: !1 } }, qQ = F({ name: "applePodcast", nodeSpec: wd, addCommands() { return { insertApplePodcast: t => ({ commands: e }) => e.insertContent({ type: this.name, attrs: t }) } } }), FQ = (t, { customSchema: e } = {}) => e && !e.nodes.applePodcast ? null : kd(t).match || null, jQ = t => N(void 0, null, function*() { const e = kd(t), { slug: n, podcastId: s, episodeId: a, countryCode: o } = e, i = (yield he.get("/api/v1/apple_podcast").query({ slug: n, podcastId: s, episodeId: a, country: o })).body; return S({ url: UQ(e), isEpisode: !!e.episodeId }, i) }), $Q = (n, ...s) => N(void 0, [n, ...s], function*(t, { customSchema: e } = {}) { return (e ? { schema: e } : yield Z(() => Promise.resolve().then(() => Te), void 0)).schema.nodes.applePodcast.create(yield jQ(t)) }), UQ = ({ countryCode: t, slug: e, podcastId: n, episodeId: s }) => { const a = t || "us", o = s ? `?i=${s}` : "", r = encodeURIComponent(e || ""); return `https://embed.podcasts.apple.com/${a}/podcast/${r}/id${n}${o}` }, VQ = "_container_1ctwc_1", HQ = "_icon_1ctwc_6", Ao = { container: VQ, icon: HQ }, _d = ({}) => { const t = p(X.B4, { translated: !0 }, "This may be a temporary error, please refresh the page to try again."); return p(wt, null, p(Y, { alignItems: "center", justifyContent: "center", className: Ao.container }, p(Eb, { className: Ao.icon }), p(ne, { alignItems: "center", gap: 4 }, p(X.Meta, { translated: !0, color: "pub-accent" }, "Image not found"), p(Ug, { content: t }, p(Cb, { size: 12, className: Ao.icon }))))) }, pl = "image-asset-error", Cd = { attrs: { url: { default: "" } }, group: "block", defining: !0, parseDOM: [{ tag: `div.${pl}`, getAttrs: re }], toDOM: t => { if (typeof window != "undefined") try { t.attrs.isEditor = !0; const e = document.createElement("div"); return e.className = pl, e.setAttribute("data-attrs", JSON.stringify(t.attrs)), Fe(p(_d, { node: S({}, t) }), e), e } catch (e) { return console.error("Error rendering ImageAssetError", e), Oe({ msg: null, node: t, err: e, group: "block" }) } return ["div", { "data-attrs": JSON.stringify(S({}, t.attrs)), "data-component-name": "AssetErrorToDOM" }, [ ["picture"], ["img", { src: Gl, height: Mf, width: Of }] ] ] }, toDOMStatic: t => ["div", { "data-attrs": JSON.stringify(S({}, t.attrs)), "data-component-name": "AssetErrorToDOMStatic" }] }, GQ = F({ name: "assetError", nodeSpec: Cd, addNodeView() { return kt(_d) } }), WQ = ({ node: t }) => p(wt, null, p(wu, { label: t.attrs.label, src: `/api/v1/audio/upload/${t.attrs.mediaUploadId}/src`, duration: t.attrs.duration })), Ed = { attrs: { label: { default: null }, mediaUploadId: { default: null }, duration: { default: null }, isEditorNode: { default: !1 } }, group: "block", draggable: !0, atom: !0, selectable: !0, isolating: !0, defining: !0, parseDOM: [{ tag: "div.native-audio-embed", getAttrs: re }], toDOM: t => { if (typeof window != "undefined" && t.attrs.isEditorNode) try { const e = document.createElement("div"); return e.className = "native-audio-embed", e.setAttribute("data-attrs", JSON.stringify(t.attrs)), Fe(p(wu, { label: t.attrs.label, src: `/api/v1/audio/upload/${t.attrs.mediaUploadId}/src`, duration: t.attrs.duration }), e), e } catch (e) { return console.error("Error rendering AudioEmbedPlayer", e), Oe({ msg: null, node: t, err: e, group: "block" }) } return dl(t) }, toDOMStatic: t => dl(t) }, JQ = F({ name: "audio", nodeSpec: Ed, addNodeView: () => kt(WQ), addCommands() { return { insertAudio: t => ({ commands: e }) => e.insertContent({ type: this.name, attrs: P(S({}, t), { isEditorNode: !0 }) }) } } }), dl = t => ["div", { class: "native-audio-embed", "data-component-name": "AudioPlaceholder", "data-attrs": JSON.stringify(t.attrs) }], YQ = t => ["div", { class: "native-audio-url-embed", "data-attrs": JSON.stringify(t.attrs), "data-component-name": "AudioUrlPlaceholder" }], Ad = { attrs: { label: { default: null }, url: { default: null }, duration: { default: null } }, group: "block", draggable: !0, atom: !0, selectable: !0, isolating: !0, defining: !0, parseDOM: [{ tag: "div.native-audio-url-embed", getAttrs: re }], toDOM: YQ }, KQ = F({ name: "audioUrl", nodeSpec: Ad }), Sd = { attrs: { request_id: { default: null }, url: { default: null }, src: { default: null }, type: { default: null } }, untrackedAttrs: ["src"], inline: !1, group: "block", draggable: !0, atom: !0, selectable: !0, isolating: !0, defining: !0, parseDOM: [{ tag: "a.augmentation-placeholder", getAttrs: re }], toDOM: t => ["a", { class: "augmentation-placeholder image-link", "data-attrs": JSON.stringify(t.attrs), href: "javascript:void(0)", "data-component-name": "AugmentationPlaceholderToDOM" }, ["img", { src: t.attrs.src || Fl }] ] }, XQ = F({ name: "augmentation_placeholder", nodeSpec: Sd, addCommands() { return { insertLoadingPlaceholder: (t, e) => ({ commands: n }) => e ? n.insertContentAt(e, { type: this.name, attrs: t }) : n.insertContent({ type: this.name, attrs: t }) } } }), ZQ = t => ["div", { class: `bandcamp-wrap${t.attrs.is_album?" album":""}`, "data-attrs": JSON.stringify(t.attrs), "data-component-name": "BandcampToDOM" }, ["iframe", { src: t.attrs.embed_url, frameborder: "0", gesture: "media", scrolling: "no", allowfullscreen: "true" }] ], QQ = t => { const { thumbnail_url: e, author: n, title: s, description: a, url: o } = t.attrs; return Ha(e, s, (n || "").toString(), a, { targetUrl: o }) }, Td = { attrs: { url: { default: "" }, title: { default: "" }, description: { default: "" }, thumbnail_url: { default: "" }, author: { default: "" }, embed_url: { default: "" }, is_album: { default: "" } }, inline: !1, group: "block", draggable: !0, atom: !0, selectable: !0, isolating: !0, defining: !0, parseDOM: [{ tag: "div.bandcamp-wrap", getAttrs: re }], toDOM: ZQ, toDOMStatic: QQ }, eee = F({ name: "bandcamp", nodeSpec: Td, addCommands() { return { insertBandcamp: t => ({ commands: e }) => e.insertContent({ type: this.name, attrs: t }) } } }), Dd = /^.*(https?\:\/\/(\S+)?.bandcamp.com\/(...+)\/[^\/]+(\/[^\/]+)?(\?[\#]*)?(\#.*)?).*$/, tee = t => { const e = Dd.exec(t); return e && e[1] }, nee = t => { const e = Dd.exec(t); return !!e && e[3] === "album" }, see = t => N(void 0, null, function*() { const e = nee(t), n = (yield Z(() => import ("./sortBy-53166f8e.js").then(r => r.c), ["assets/sortBy-53166f8e.js", "assets/x-933ea65f.js", "assets/tracking-5779d19a.js", "assets/_sentry-release-injection-file-9254565a.js", "assets/FlexBox-8b7f0d6c.js", "assets/FlexBox-644f665d.css", "assets/HoverCard-92fb7948.js", "assets/useResponsive-4f80f3bd.js", "assets/transition-d7aff1cb.js", "assets/_defineProperty-fcca2d9e.js", "assets/react-laag.esm-23de3db0.js", "assets/HoverCard-6364507e.css", "assets/responsive_img-3c51e57a.js", "assets/responsive_img-51b02764.css", "assets/sortBy-a6711bc6.css"])).default, s = dr(t).theme === "dark" ? "dark" : "light", o = (yield n.get("/api/v1/bandcamp").query({ url: t.trim(), is_album: e, theme: s })).body; return P(S({}, o), { is_album: e }) }), aee = (n, ...s) => N(void 0, [n, ...s], function*(t, { customSchema: e } = {}) { return (e ? { schema: e } : yield Z(() => Promise.resolve().then(() => Te), void 0)).schema.nodes.bandcamp.create(yield see(t)) }), Xr = { content: "block+", group: "block", parseDOM: [{ tag: "blockquote" }, { tag: "p", priority: 100, getAttrs: t => !t.style.marginLeft || t.style.marginLeft.startsWith("0") ? !1 : {} }], toDOM: () => ["blockquote", 0] }, oee = kr.extend({ parseHTML() { return Xr.parseDOM }, addCommands() { return { setBlockquote: () => ({ state: t, commands: e }) => !gt(t, "paragraph") || gt(t, "pullquote") ? !1 : e.wrapIn(this.name), toggleBlockquote: () => ({ state: t, commands: e }) => !gt(t, "paragraph") || gt(t, "pullquote") ? !1 : e.toggleWrap(this.name), unsetBlockquote: () => ({ commands: t }) => t.lift(this.name) } } }), Id = { attrs: { url: { default: null }, text: { default: null }, action: { default: null }, class: { default: null } }, inline: !1, atom: !0, group: "block", draggable: !0, selectable: !0, isolating: !0, defining: !0, parseDOM: [{ tag: "p.button-wrapper[data-attrs]", priority: 100, getAttrs: re }], toDOM: t => Zr(t) }, ree = F({ name: "button", nodeSpec: Id, addCommands() { return { insertSubscribeButton: t => ({ commands: e }) => { const n = { url: ce.CHECKOUT_URL, text: _n(t, { now: !0 }) }; return e.insertContent({ type: this.name, attrs: n }) }, insertCustomButtonEditorV2: t => ({ commands: e }) => e.insertContent({ type: this.name, attrs: t }), insertSubscribeButtonWithPreamble: t => ({ commands: e, editor: n }) => { const { iTemplate: s } = I18N.i({ pub: t }), a = t.payments_state !== "enabled" ? s `Thanks for reading ${t.name}! Subscribe for free to receive new posts and support my work.` : s `${t.name} is a reader-supported publication. To receive new posts and support my work, consider becoming a free or paid subscriber.`, o = { url: ce.CHECKOUT_URL, text: _n(t), language: t.language }; return e.insertContent({ type: "subscribeWidget", attrs: o, content: [n.schema.nodes.ctaCaption.create(null, [n.schema.text(a)]).toJSON()] }) }, insertCaptionedShareButton: t => ({ commands: e, editor: n }) => { const { iString: s, iTemplate: a } = I18N.i({ pub: t }), o = a `Thank you for reading ${t.name}. This post is public so feel free to share it.`, r = { url: ce.SHARE_URL, text: s("Share") }; return e.insertContent({ type: "captionedShareButton", attrs: r, content: [n.state.schema.nodes.ctaCaption.create(null, [n.state.schema.text(o)]).toJSON()] }) }, insertSharePostButton: t => ({ commands: e }) => { const { iString: n } = I18N.i({ pub: t }), s = { url: ce.SHARE_URL, text: n("Share") }; return e.insertContent({ type: this.name, attrs: s }) }, insertSharePubButton: t => ({ commands: e }) => { const { iTemplate: n } = I18N.i({ pub: t }), s = { url: ce.SHARE_PUB_URL, text: n `Share ${t.name}` }; return e.insertContent({ type: this.name, attrs: s }) }, insertCommentsButton: t => ({ commands: e }) => { const { iString: n } = I18N.i({ pub: t }), s = { url: ce.HALF_MAGIC_COMMENTS_URL, text: n("Leave a comment") }; return e.insertContent({ type: this.name, attrs: s }) }, insertGiftButton: t => ({ commands: e }) => { const { iTemplate: n } = I18N.i({ pub: t }), s = { url: `${ce.CHECKOUT_URL}&gift=true`, text: Cn(t, () => n `Give a gift subscription`, a => `Give a gift ${a.subscription}`) }; return e.insertContent({ type: this.name, attrs: s }) }, insertDonateButton: t => ({ commands: e }) => { const { iString: n } = I18N.i({ pub: t }), s = { url: `${ce.CHECKOUT_URL}&donate=true`, text: n("Donate Subscriptions") }; return e.insertContent({ type: this.name, attrs: s }) }, insertSurveyButton: (t, e, n) => ({ commands: s }) => { se(ae.READER_SURVEY_LINKED_IN_POST, { editorVersion: "2", surveyId: e.id }); const a = { url: `${Wl(t,e.id)}`, text: n }; return s.insertContent({ type: this.name, attrs: a }) }, insertGroupSubscriptionButton: ({ publication: t }) => ({ commands: e }) => { const { iTemplate: n } = I18N.i({ pub: t }), s = t.default_group_coupon, a = { url: `${ce.CHECKOUT_URL}group=true${s?`&coupon=${s}`:""}`, text: Cn(t, () => s && t.default_group_coupon_percent_off ? n `Get ${t.default_group_coupon_percent_off.split(".")[0]}% off a group subscription` : n `Get a group subscription`, o => s && t.default_group_coupon_percent_off ? `Get ${t.default_group_coupon_percent_off.split(".")[0]}% off a group ${o.subscription}` : `Get a group ${o.subscription}`) }; return e.insertContent({ type: this.name, attrs: a }) }, insertCoupon: (t, e, n = {}) => ({ commands: s }) => { const a = { url: yt(`${t.base_url}/subscribe`, P(S({ coupon: e.id }, e.group_only && { group: !0 }), { utm_content: n.postId })), text: `Get ${Jl(e)}` }; return s.insertContent({ type: this.name, attrs: a }) }, insertReferralButton: t => ({ commands: e }) => { const { iString: n } = I18N.i({ pub: t }), s = { url: `${ce.LEADERBOARD_URL}&utm_source=${qe.post}`, text: n("Refer a friend") }; return e.insertContent({ type: this.name, attrs: s }) }, insertCaptionedWriterReferralButtonV2: ({ writerReferralCode: t, publication: e, postId: n }) => ({ commands: s, state: a, dispatch: o }) => { if (!Le(a, a.schema.nodes.button)) return !1; const { iString: r, iTemplate: i } = I18N.i({ pub: e }), c = i `Start writing today. Use the button below to create your Substack and connect your publication with ${e.name}`, l = { url: `${Yl(t||"")}?utm_source=${qe.substack}&utm_context=${Kl.post}&utm_content=${n}&utm_campaign=${Ut.writerReferralButton}`, text: r("Start a Substack") }, u = a.schema.nodes.captionedWriterReferralButton.create(l, a.schema.nodes.ctaCaption.create(null, [a.schema.text(c)])); return o ? s.insertContent(u.toJSON()) : !0 } } } }), Zr = t => { const e = document.createElement("span"); e.textContent = t.attrs.text; const n = document.createElement("a"); n.className = "button primary", t.attrs.class && (n.className += ` ${t.attrs.class}`), n.href = t.attrs.url, n.appendChild(e), n.addEventListener("click", a => { /^.*%%.*%%/.test(n.href) && (a.preventDefault(), Lf(n.href)) }); const s = document.createElement("p"); return s.className = "button-wrapper", s.setAttribute("data-attrs", JSON.stringify(t.attrs)), s.setAttribute("data-component-name", "ButtonCreateButton"), s.appendChild(n), s }, Nd = { content: "text*", group: "block", selectable: !0, defining: !0, isolating: !0, parseDOM: [{ tag: "figcaption" }], toDOM: () => ["figcaption", { class: "image-caption" }, 0] }, iee = F({ name: "caption", nodeSpec: Nd }), or = t => ({ content: "ctaCaption", attrs: { url: { default: null }, text: { default: null } }, inline: !1, group: "block", draggable: !0, atom: !1, selectable: !0, isolating: !0, defining: !0, parseDOM: [{ tag: "div.captioned-button-wrap", getAttrs: re }], toDOM: e => { const n = document.createElement("div"); n.className = "captioned-button-wrap", n.setAttribute("data-attrs", JSON.stringify(e.attrs)), n.setAttribute("data-component-name", "CaptionedButtonToDOM"); const s = document.createElement("div"); s.className = "preamble"; const a = Zr({ attrs: S(S({}, e.attrs), t) }); return n.appendChild(s), n.appendChild(a), { dom: n, contentDOM: s } } }), Md = ({ substitutionAttrs: t, name: e }) => F({ name: e, nodeSpec: or(t) }), cee = Md({ name: "captionedShareButton", substitutionAttrs: { url: ce.SHARE_URL } }), lee = Md({ name: "captionedWriterReferralButton", substitutionAttrs: { hasDynamicSubstitutions: !1 } }), Od = { content: "block caption*", atom: !1, selectable: !0, isolating: !1, defining: !0, draggable: !0, group: "block", parseDOM: [{ tag: "figure" }], toDOM: () => ["div", { class: "captioned-image-container" }, ["figure", 0] ], toDOMStatic: () => ["div", { class: "captioned-image-container-static" }, ["figure", 0] ] }, uee = F({ name: "captionedImage", nodeSpec: Od }), Ld = { attrs: { symbol: { default: "" } }, atom: !0, editable: !1, selectable: !0, isolating: !1, defining: !0, draggable: !1, inline: !0, group: "inline", parseDOM: [{ tag: ".cashtag-wrap", getAttrs: t => { try { return JSON.parse(t.getElementsByTagName("a")[0].getAttribute("data-attrs")) } catch (e) { return !1 } } }], toDOM: t => { if (typeof window != "undefined") try { const e = document.createElement("span"); return e.className = "cashtag-wrap", Fe(p(Vh, { symbol: t.attrs.symbol.trim() }), e), e } catch (e) { return console.error("Error rendering Cashtag", e), Oe({ msg: null, node: t, err: e, group: "inline" }) } return ["span", { class: "cashtag-wrap", "data-attrs": JSON.stringify(t.attrs), "data-component-name": "CashtagToDOM" }] }, toDOMStatic: t => ["span", { class: "cashtag-wrap", "data-component-name": "CashtagToDOMStatic", "data-attrs": JSON.stringify(P(S({}, t.attrs), { prependSymbol: !0, isStatic: !0 })) }] }, pee = F({ name: "cashtag", nodeSpec: Ld }); var Rd = {}; const dee = { "application/1d-interleaved-parityfec": { source: "iana" }, "application/3gpdash-qoe-report+xml": { source: "iana", charset: "UTF-8", compressible: !0 }, "application/3gpp-ims+xml": { source: "iana", compressible: !0 }, "application/3gpphal+json": { source: "iana", compressible: !0 }, "application/3gpphalforms+json": { source: "iana", compressible: !0 }, "application/a2l": { source: "iana" }, "application/ace+cbor": { source: "iana" }, "application/activemessage": { source: "iana" }, "application/activity+json": { source: "iana", compressible: !0 }, "application/alto-costmap+json": { source: "iana", compressible: !0 }, "application/alto-costmapfilter+json": { source: "iana", compressible: !0 }, "application/alto-directory+json": { source: "iana", compressible: !0 }, "application/alto-endpointcost+json": { source: "iana", compressible: !0 }, "application/alto-endpointcostparams+json": { source: "iana", compressible: !0 }, "application/alto-endpointprop+json": { source: "iana", compressible: !0 }, "application/alto-endpointpropparams+json": { source: "iana", compressible: !0 }, "application/alto-error+json": { source: "iana", compressible: !0 }, "application/alto-networkmap+json": { source: "iana", compressible: !0 }, "application/alto-networkmapfilter+json": { source: "iana", compressible: !0 }, "application/alto-updatestreamcontrol+json": { source: "iana", compressible: !0 }, "application/alto-updatestreamparams+json": { source: "iana", compressible: !0 }, "application/aml": { source: "iana" }, "application/andrew-inset": { source: "iana", extensions: ["ez"] }, "application/applefile": { source: "iana" }, "application/applixware": { source: "apache", extensions: ["aw"] }, "application/at+jwt": { source: "iana" }, "application/atf": { source: "iana" }, "application/atfx": { source: "iana" }, "application/atom+xml": { source: "iana", compressible: !0, extensions: ["atom"] }, "application/atomcat+xml": { source: "iana", compressible: !0, extensions: ["atomcat"] }, "application/atomdeleted+xml": { source: "iana", compressible: !0, extensions: ["atomdeleted"] }, "application/atomicmail": { source: "iana" }, "application/atomsvc+xml": { source: "iana", compressible: !0, extensions: ["atomsvc"] }, "application/atsc-dwd+xml": { source: "iana", compressible: !0, extensions: ["dwd"] }, "application/atsc-dynamic-event-message": { source: "iana" }, "application/atsc-held+xml": { source: "iana", compressible: !0, extensions: ["held"] }, "application/atsc-rdt+json": { source: "iana", compressible: !0 }, "application/atsc-rsat+xml": { source: "iana", compressible: !0, extensions: ["rsat"] }, "application/atxml": { source: "iana" }, "application/auth-policy+xml": { source: "iana", compressible: !0 }, "application/bacnet-xdd+zip": { source: "iana", compressible: !1 }, "application/batch-smtp": { source: "iana" }, "application/bdoc": { compressible: !1, extensions: ["bdoc"] }, "application/beep+xml": { source: "iana", charset: "UTF-8", compressible: !0 }, "application/calendar+json": { source: "iana", compressible: !0 }, "application/calendar+xml": { source: "iana", compressible: !0, extensions: ["xcs"] }, "application/call-completion": { source: "iana" }, "application/cals-1840": { source: "iana" }, "application/captive+json": { source: "iana", compressible: !0 }, "application/cbor": { source: "iana" }, "application/cbor-seq": { source: "iana" }, "application/cccex": { source: "iana" }, "application/ccmp+xml": { source: "iana", compressible: !0 }, "application/ccxml+xml": { source: "iana", compressible: !0, extensions: ["ccxml"] }, "application/cdfx+xml": { source: "iana", compressible: !0, extensions: ["cdfx"] }, "application/cdmi-capability": { source: "iana", extensions: ["cdmia"] }, "application/cdmi-container": { source: "iana", extensions: ["cdmic"] }, "application/cdmi-domain": { source: "iana", extensions: ["cdmid"] }, "application/cdmi-object": { source: "iana", extensions: ["cdmio"] }, "application/cdmi-queue": { source: "iana", extensions: ["cdmiq"] }, "application/cdni": { source: "iana" }, "application/cea": { source: "iana" }, "application/cea-2018+xml": { source: "iana", compressible: !0 }, "application/cellml+xml": { source: "iana", compressible: !0 }, "application/cfw": { source: "iana" }, "application/city+json": { source: "iana", compressible: !0 }, "application/clr": { source: "iana" }, "application/clue+xml": { source: "iana", compressible: !0 }, "application/clue_info+xml": { source: "iana", compressible: !0 }, "application/cms": { source: "iana" }, "application/cnrp+xml": { source: "iana", compressible: !0 }, "application/coap-group+json": { source: "iana", compressible: !0 }, "application/coap-payload": { source: "iana" }, "application/commonground": { source: "iana" }, "application/conference-info+xml": { source: "iana", compressible: !0 }, "application/cose": { source: "iana" }, "application/cose-key": { source: "iana" }, "application/cose-key-set": { source: "iana" }, "application/cpl+xml": { source: "iana", compressible: !0, extensions: ["cpl"] }, "application/csrattrs": { source: "iana" }, "application/csta+xml": { source: "iana", compressible: !0 }, "application/cstadata+xml": { source: "iana", compressible: !0 }, "application/csvm+json": { source: "iana", compressible: !0 }, "application/cu-seeme": { source: "apache", extensions: ["cu"] }, "application/cwt": { source: "iana" }, "application/cybercash": { source: "iana" }, "application/dart": { compressible: !0 }, "application/dash+xml": { source: "iana", compressible: !0, extensions: ["mpd"] }, "application/dash-patch+xml": { source: "iana", compressible: !0, extensions: ["mpp"] }, "application/dashdelta": { source: "iana" }, "application/davmount+xml": { source: "iana", compressible: !0, extensions: ["davmount"] }, "application/dca-rft": { source: "iana" }, "application/dcd": { source: "iana" }, "application/dec-dx": { source: "iana" }, "application/dialog-info+xml": { source: "iana", compressible: !0 }, "application/dicom": { source: "iana" }, "application/dicom+json": { source: "iana", compressible: !0 }, "application/dicom+xml": { source: "iana", compressible: !0 }, "application/dii": { source: "iana" }, "application/dit": { source: "iana" }, "application/dns": { source: "iana" }, "application/dns+json": { source: "iana", compressible: !0 }, "application/dns-message": { source: "iana" }, "application/docbook+xml": { source: "apache", compressible: !0, extensions: ["dbk"] }, "application/dots+cbor": { source: "iana" }, "application/dskpp+xml": { source: "iana", compressible: !0 }, "application/dssc+der": { source: "iana", extensions: ["dssc"] }, "application/dssc+xml": { source: "iana", compressible: !0, extensions: ["xdssc"] }, "application/dvcs": { source: "iana" }, "application/ecmascript": { source: "iana", compressible: !0, extensions: ["es", "ecma"] }, "application/edi-consent": { source: "iana" }, "application/edi-x12": { source: "iana", compressible: !1 }, "application/edifact": { source: "iana", compressible: !1 }, "application/efi": { source: "iana" }, "application/elm+json": { source: "iana", charset: "UTF-8", compressible: !0 }, "application/elm+xml": { source: "iana", compressible: !0 }, "application/emergencycalldata.cap+xml": { source: "iana", charset: "UTF-8", compressible: !0 }, "application/emergencycalldata.comment+xml": { source: "iana", compressible: !0 }, "application/emergencycalldata.control+xml": { source: "iana", compressible: !0 }, "application/emergencycalldata.deviceinfo+xml": { source: "iana", compressible: !0 }, "application/emergencycalldata.ecall.msd": { source: "iana" }, "application/emergencycalldata.providerinfo+xml": { source: "iana", compressible: !0 }, "application/emergencycalldata.serviceinfo+xml": { source: "iana", compressible: !0 }, "application/emergencycalldata.subscriberinfo+xml": { source: "iana", compressible: !0 }, "application/emergencycalldata.veds+xml": { source: "iana", compressible: !0 }, "application/emma+xml": { source: "iana", compressible: !0, extensions: ["emma"] }, "application/emotionml+xml": { source: "iana", compressible: !0, extensions: ["emotionml"] }, "application/encaprtp": { source: "iana" }, "application/epp+xml": { source: "iana", compressible: !0 }, "application/epub+zip": { source: "iana", compressible: !1, extensions: ["epub"] }, "application/eshop": { source: "iana" }, "application/exi": { source: "iana", extensions: ["exi"] }, "application/expect-ct-report+json": { source: "iana", compressible: !0 }, "application/express": { source: "iana", extensions: ["exp"] }, "application/fastinfoset": { source: "iana" }, "application/fastsoap": { source: "iana" }, "application/fdt+xml": { source: "iana", compressible: !0, extensions: ["fdt"] }, "application/fhir+json": { source: "iana", charset: "UTF-8", compressible: !0 }, "application/fhir+xml": { source: "iana", charset: "UTF-8", compressible: !0 }, "application/fido.trusted-apps+json": { compressible: !0 }, "application/fits": { source: "iana" }, "application/flexfec": { source: "iana" }, "application/font-sfnt": { source: "iana" }, "application/font-tdpfr": { source: "iana", extensions: ["pfr"] }, "application/font-woff": { source: "iana", compressible: !1 }, "application/framework-attributes+xml": { source: "iana", compressible: !0 }, "application/geo+json": { source: "iana", compressible: !0, extensions: ["geojson"] }, "application/geo+json-seq": { source: "iana" }, "application/geopackage+sqlite3": { source: "iana" }, "application/geoxacml+xml": { source: "iana", compressible: !0 }, "application/gltf-buffer": { source: "iana" }, "application/gml+xml": { source: "iana", compressible: !0, extensions: ["gml"] }, "application/gpx+xml": { source: "apache", compressible: !0, extensions: ["gpx"] }, "application/gxf": { source: "apache", extensions: ["gxf"] }, "application/gzip": { source: "iana", compressible: !1, extensions: ["gz"] }, "application/h224": { source: "iana" }, "application/held+xml": { source: "iana", compressible: !0 }, "application/hjson": { extensions: ["hjson"] }, "application/http": { source: "iana" }, "application/hyperstudio": { source: "iana", extensions: ["stk"] }, "application/ibe-key-request+xml": { source: "iana", compressible: !0 }, "application/ibe-pkg-reply+xml": { source: "iana", compressible: !0 }, "application/ibe-pp-data": { source: "iana" }, "application/iges": { source: "iana" }, "application/im-iscomposing+xml": { source: "iana", charset: "UTF-8", compressible: !0 }, "application/index": { source: "iana" }, "application/index.cmd": { source: "iana" }, "application/index.obj": { source: "iana" }, "application/index.response": { source: "iana" }, "application/index.vnd": { source: "iana" }, "application/inkml+xml": { source: "iana", compressible: !0, extensions: ["ink", "inkml"] }, "application/iotp": { source: "iana" }, "application/ipfix": { source: "iana", extensions: ["ipfix"] }, "application/ipp": { source: "iana" }, "application/isup": { source: "iana" }, "application/its+xml": { source: "iana", compressible: !0, extensions: ["its"] }, "application/java-archive": { source: "apache", compressible: !1, extensions: ["jar", "war", "ear"] }, "application/java-serialized-object": { source: "apache", compressible: !1, extensions: ["ser"] }, "application/java-vm": { source: "apache", compressible: !1, extensions: ["class"] }, "application/javascript": { source: "iana", charset: "UTF-8", compressible: !0, extensions: ["js", "mjs"] }, "application/jf2feed+json": { source: "iana", compressible: !0 }, "application/jose": { source: "iana" }, "application/jose+json": { source: "iana", compressible: !0 }, "application/jrd+json": { source: "iana", compressible: !0 }, "application/jscalendar+json": { source: "iana", compressible: !0 }, "application/json": { source: "iana", charset: "UTF-8", compressible: !0, extensions: ["json", "map"] }, "application/json-patch+json": { source: "iana", compressible: !0 }, "application/json-seq": { source: "iana" }, "application/json5": { extensions: ["json5"] }, "application/jsonml+json": { source: "apache", compressible: !0, extensions: ["jsonml"] }, "application/jwk+json": { source: "iana", compressible: !0 }, "application/jwk-set+json": { source: "iana", compressible: !0 }, "application/jwt": { source: "iana" }, "application/kpml-request+xml": { source: "iana", compressible: !0 }, "application/kpml-response+xml": { source: "iana", compressible: !0 }, "application/ld+json": { source: "iana", compressible: !0, extensions: ["jsonld"] }, "application/lgr+xml": { source: "iana", compressible: !0, extensions: ["lgr"] }, "application/link-format": { source: "iana" }, "application/load-control+xml": { source: "iana", compressible: !0 }, "application/lost+xml": { source: "iana", compressible: !0, extensions: ["lostxml"] }, "application/lostsync+xml": { source: "iana", compressible: !0 }, "application/lpf+zip": { source: "iana", compressible: !1 }, "application/lxf": { source: "iana" }, "application/mac-binhex40": { source: "iana", extensions: ["hqx"] }, "application/mac-compactpro": { source: "apache", extensions: ["cpt"] }, "application/macwriteii": { source: "iana" }, "application/mads+xml": { source: "iana", compressible: !0, extensions: ["mads"] }, "application/manifest+json": { source: "iana", charset: "UTF-8", compressible: !0, extensions: ["webmanifest"] }, "application/marc": { source: "iana", extensions: ["mrc"] }, "application/marcxml+xml": { source: "iana", compressible: !0, extensions: ["mrcx"] }, "application/mathematica": { source: "iana", extensions: ["ma", "nb", "mb"] }, "application/mathml+xml": { source: "iana", compressible: !0, extensions: ["mathml"] }, "application/mathml-content+xml": { source: "iana", compressible: !0 }, "application/mathml-presentation+xml": { source: "iana", compressible: !0 }, "application/mbms-associated-procedure-description+xml": { source: "iana", compressible: !0 }, "application/mbms-deregister+xml": { source: "iana", compressible: !0 }, "application/mbms-envelope+xml": { source: "iana", compressible: !0 }, "application/mbms-msk+xml": { source: "iana", compressible: !0 }, "application/mbms-msk-response+xml": { source: "iana", compressible: !0 }, "application/mbms-protection-description+xml": { source: "iana", compressible: !0 }, "application/mbms-reception-report+xml": { source: "iana", compressible: !0 }, "application/mbms-register+xml": { source: "iana", compressible: !0 }, "application/mbms-register-response+xml": { source: "iana", compressible: !0 }, "application/mbms-schedule+xml": { source: "iana", compressible: !0 }, "application/mbms-user-service-description+xml": { source: "iana", compressible: !0 }, "application/mbox": { source: "iana", extensions: ["mbox"] }, "application/media-policy-dataset+xml": { source: "iana", compressible: !0, extensions: ["mpf"] }, "application/media_control+xml": { source: "iana", compressible: !0 }, "application/mediaservercontrol+xml": { source: "iana", compressible: !0, extensions: ["mscml"] }, "application/merge-patch+json": { source: "iana", compressible: !0 }, "application/metalink+xml": { source: "apache", compressible: !0, extensions: ["metalink"] }, "application/metalink4+xml": { source: "iana", compressible: !0, extensions: ["meta4"] }, "application/mets+xml": { source: "iana", compressible: !0, extensions: ["mets"] }, "application/mf4": { source: "iana" }, "application/mikey": { source: "iana" }, "application/mipc": { source: "iana" }, "application/missing-blocks+cbor-seq": { source: "iana" }, "application/mmt-aei+xml": { source: "iana", compressible: !0, extensions: ["maei"] }, "application/mmt-usd+xml": { source: "iana", compressible: !0, extensions: ["musd"] }, "application/mods+xml": { source: "iana", compressible: !0, extensions: ["mods"] }, "application/moss-keys": { source: "iana" }, "application/moss-signature": { source: "iana" }, "application/mosskey-data": { source: "iana" }, "application/mosskey-request": { source: "iana" }, "application/mp21": { source: "iana", extensions: ["m21", "mp21"] }, "application/mp4": { source: "iana", extensions: ["mp4s", "m4p"] }, "application/mpeg4-generic": { source: "iana" }, "application/mpeg4-iod": { source: "iana" }, "application/mpeg4-iod-xmt": { source: "iana" }, "application/mrb-consumer+xml": { source: "iana", compressible: !0 }, "application/mrb-publish+xml": { source: "iana", compressible: !0 }, "application/msc-ivr+xml": { source: "iana", charset: "UTF-8", compressible: !0 }, "application/msc-mixer+xml": { source: "iana", charset: "UTF-8", compressible: !0 }, "application/msword": { source: "iana", compressible: !1, extensions: ["doc", "dot"] }, "application/mud+json": { source: "iana", compressible: !0 }, "application/multipart-core": { source: "iana" }, "application/mxf": { source: "iana", extensions: ["mxf"] }, "application/n-quads": { source: "iana", extensions: ["nq"] }, "application/n-triples": { source: "iana", extensions: ["nt"] }, "application/nasdata": { source: "iana" }, "application/news-checkgroups": { source: "iana", charset: "US-ASCII" }, "application/news-groupinfo": { source: "iana", charset: "US-ASCII" }, "application/news-transmission": { source: "iana" }, "application/nlsml+xml": { source: "iana", compressible: !0 }, "application/node": { source: "iana", extensions: ["cjs"] }, "application/nss": { source: "iana" }, "application/oauth-authz-req+jwt": { source: "iana" }, "application/oblivious-dns-message": { source: "iana" }, "application/ocsp-request": { source: "iana" }, "application/ocsp-response": { source: "iana" }, "application/octet-stream": { source: "iana", compressible: !1, extensions: ["bin", "dms", "lrf", "mar", "so", "dist", "distz", "pkg", "bpk", "dump", "elc", "deploy", "exe", "dll", "deb", "dmg", "iso", "img", "msi", "msp", "msm", "buffer"] }, "application/oda": { source: "iana", extensions: ["oda"] }, "application/odm+xml": { source: "iana", compressible: !0 }, "application/odx": { source: "iana" }, "application/oebps-package+xml": { source: "iana", compressible: !0, extensions: ["opf"] }, "application/ogg": { source: "iana", compressible: !1, extensions: ["ogx"] }, "application/omdoc+xml": { source: "apache", compressible: !0, extensions: ["omdoc"] }, "application/onenote": { source: "apache", extensions: ["onetoc", "onetoc2", "onetmp", "onepkg"] }, "application/opc-nodeset+xml": { source: "iana", compressible: !0 }, "application/oscore": { source: "iana" }, "application/oxps": { source: "iana", extensions: ["oxps"] }, "application/p21": { source: "iana" }, "application/p21+zip": { source: "iana", compressible: !1 }, "application/p2p-overlay+xml": { source: "iana", compressible: !0, extensions: ["relo"] }, "application/parityfec": { source: "iana" }, "application/passport": { source: "iana" }, "application/patch-ops-error+xml": { source: "iana", compressible: !0, extensions: ["xer"] }, "application/pdf": { source: "iana", compressible: !1, extensions: ["pdf"] }, "application/pdx": { source: "iana" }, "application/pem-certificate-chain": { source: "iana" }, "application/pgp-encrypted": { source: "iana", compressible: !1, extensions: ["pgp"] }, "application/pgp-keys": { source: "iana", extensions: ["asc"] }, "application/pgp-signature": { source: "iana", extensions: ["asc", "sig"] }, "application/pics-rules": { source: "apache", extensions: ["prf"] }, "application/pidf+xml": { source: "iana", charset: "UTF-8", compressible: !0 }, "application/pidf-diff+xml": { source: "iana", charset: "UTF-8", compressible: !0 }, "application/pkcs10": { source: "iana", extensions: ["p10"] }, "application/pkcs12": { source: "iana" }, "application/pkcs7-mime": { source: "iana", extensions: ["p7m", "p7c"] }, "application/pkcs7-signature": { source: "iana", extensions: ["p7s"] }, "application/pkcs8": { source: "iana", extensions: ["p8"] }, "application/pkcs8-encrypted": { source: "iana" }, "application/pkix-attr-cert": { source: "iana", extensions: ["ac"] }, "application/pkix-cert": { source: "iana", extensions: ["cer"] }, "application/pkix-crl": { source: "iana", extensions: ["crl"] }, "application/pkix-pkipath": { source: "iana", extensions: ["pkipath"] }, "application/pkixcmp": { source: "iana", extensions: ["pki"] }, "application/pls+xml": { source: "iana", compressible: !0, extensions: ["pls"] }, "application/poc-settings+xml": { source: "iana", charset: "UTF-8", compressible: !0 }, "application/postscript": { source: "iana", compressible: !0, extensions: ["ai", "eps", "ps"] }, "application/ppsp-tracker+json": { source: "iana", compressible: !0 }, "application/problem+json": { source: "iana", compressible: !0 }, "application/problem+xml": { source: "iana", compressible: !0 }, "application/provenance+xml": { source: "iana", compressible: !0, extensions: ["provx"] }, "application/prs.alvestrand.titrax-sheet": { source: "iana" }, "application/prs.cww": { source: "iana", extensions: ["cww"] }, "application/prs.cyn": { source: "iana", charset: "7-BIT" }, "application/prs.hpub+zip": { source: "iana", compressible: !1 }, "application/prs.nprend": { source: "iana" }, "application/prs.plucker": { source: "iana" }, "application/prs.rdf-xml-crypt": { source: "iana" }, "application/prs.xsf+xml": { source: "iana", compressible: !0 }, "application/pskc+xml": { source: "iana", compressible: !0, extensions: ["pskcxml"] }, "application/pvd+json": { source: "iana", compressible: !0 }, "application/qsig": { source: "iana" }, "application/raml+yaml": { compressible: !0, extensions: ["raml"] }, "application/raptorfec": { source: "iana" }, "application/rdap+json": { source: "iana", compressible: !0 }, "application/rdf+xml": { source: "iana", compressible: !0, extensions: ["rdf", "owl"] }, "application/reginfo+xml": { source: "iana", compressible: !0, extensions: ["rif"] }, "application/relax-ng-compact-syntax": { source: "iana", extensions: ["rnc"] }, "application/remote-printing": { source: "iana" }, "application/reputon+json": { source: "iana", compressible: !0 }, "application/resource-lists+xml": { source: "iana", compressible: !0, extensions: ["rl"] }, "application/resource-lists-diff+xml": { source: "iana", compressible: !0, extensions: ["rld"] }, "application/rfc+xml": { source: "iana", compressible: !0 }, "application/riscos": { source: "iana" }, "application/rlmi+xml": { source: "iana", compressible: !0 }, "application/rls-services+xml": { source: "iana", compressible: !0, extensions: ["rs"] }, "application/route-apd+xml": { source: "iana", compressible: !0, extensions: ["rapd"] }, "application/route-s-tsid+xml": { source: "iana", compressible: !0, extensions: ["sls"] }, "application/route-usd+xml": { source: "iana", compressible: !0, extensions: ["rusd"] }, "application/rpki-ghostbusters": { source: "iana", extensions: ["gbr"] }, "application/rpki-manifest": { source: "iana", extensions: ["mft"] }, "application/rpki-publication": { source: "iana" }, "application/rpki-roa": { source: "iana", extensions: ["roa"] }, "application/rpki-updown": { source: "iana" }, "application/rsd+xml": { source: "apache", compressible: !0, extensions: ["rsd"] }, "application/rss+xml": { source: "apache", compressible: !0, extensions: ["rss"] }, "application/rtf": { source: "iana", compressible: !0, extensions: ["rtf"] }, "application/rtploopback": { source: "iana" }, "application/rtx": { source: "iana" }, "application/samlassertion+xml": { source: "iana", compressible: !0 }, "application/samlmetadata+xml": { source: "iana", compressible: !0 }, "application/sarif+json": { source: "iana", compressible: !0 }, "application/sarif-external-properties+json": { source: "iana", compressible: !0 }, "application/sbe": { source: "iana" }, "application/sbml+xml": { source: "iana", compressible: !0, extensions: ["sbml"] }, "application/scaip+xml": { source: "iana", compressible: !0 }, "application/scim+json": { source: "iana", compressible: !0 }, "application/scvp-cv-request": { source: "iana", extensions: ["scq"] }, "application/scvp-cv-response": { source: "iana", extensions: ["scs"] }, "application/scvp-vp-request": { source: "iana", extensions: ["spq"] }, "application/scvp-vp-response": { source: "iana", extensions: ["spp"] }, "application/sdp": { source: "iana", extensions: ["sdp"] }, "application/secevent+jwt": { source: "iana" }, "application/senml+cbor": { source: "iana" }, "application/senml+json": { source: "iana", compressible: !0 }, "application/senml+xml": { source: "iana", compressible: !0, extensions: ["senmlx"] }, "application/senml-etch+cbor": { source: "iana" }, "application/senml-etch+json": { source: "iana", compressible: !0 }, "application/senml-exi": { source: "iana" }, "application/sensml+cbor": { source: "iana" }, "application/sensml+json": { source: "iana", compressible: !0 }, "application/sensml+xml": { source: "iana", compressible: !0, extensions: ["sensmlx"] }, "application/sensml-exi": { source: "iana" }, "application/sep+xml": { source: "iana", compressible: !0 }, "application/sep-exi": { source: "iana" }, "application/session-info": { source: "iana" }, "application/set-payment": { source: "iana" }, "application/set-payment-initiation": { source: "iana", extensions: ["setpay"] }, "application/set-registration": { source: "iana" }, "application/set-registration-initiation": { source: "iana", extensions: ["setreg"] }, "application/sgml": { source: "iana" }, "application/sgml-open-catalog": { source: "iana" }, "application/shf+xml": { source: "iana", compressible: !0, extensions: ["shf"] }, "application/sieve": { source: "iana", extensions: ["siv", "sieve"] }, "application/simple-filter+xml": { source: "iana", compressible: !0 }, "application/simple-message-summary": { source: "iana" }, "application/simplesymbolcontainer": { source: "iana" }, "application/sipc": { source: "iana" }, "application/slate": { source: "iana" }, "application/smil": { source: "iana" }, "application/smil+xml": { source: "iana", compressible: !0, extensions: ["smi", "smil"] }, "application/smpte336m": { source: "iana" }, "application/soap+fastinfoset": { source: "iana" }, "application/soap+xml": { source: "iana", compressible: !0 }, "application/sparql-query": { source: "iana", extensions: ["rq"] }, "application/sparql-results+xml": { source: "iana", compressible: !0, extensions: ["srx"] }, "application/spdx+json": { source: "iana", compressible: !0 }, "application/spirits-event+xml": { source: "iana", compressible: !0 }, "application/sql": { source: "iana" }, "application/srgs": { source: "iana", extensions: ["gram"] }, "application/srgs+xml": { source: "iana", compressible: !0, extensions: ["grxml"] }, "application/sru+xml": { source: "iana", compressible: !0, extensions: ["sru"] }, "application/ssdl+xml": { source: "apache", compressible: !0, extensions: ["ssdl"] }, "application/ssml+xml": { source: "iana", compressible: !0, extensions: ["ssml"] }, "application/stix+json": { source: "iana", compressible: !0 }, "application/swid+xml": { source: "iana", compressible: !0, extensions: ["swidtag"] }, "application/tamp-apex-update": { source: "iana" }, "application/tamp-apex-update-confirm": { source: "iana" }, "application/tamp-community-update": { source: "iana" }, "application/tamp-community-update-confirm": { source: "iana" }, "application/tamp-error": { source: "iana" }, "application/tamp-sequence-adjust": { source: "iana" }, "application/tamp-sequence-adjust-confirm": { source: "iana" }, "application/tamp-status-query": { source: "iana" }, "application/tamp-status-response": { source: "iana" }, "application/tamp-update": { source: "iana" }, "application/tamp-update-confirm": { source: "iana" }, "application/tar": { compressible: !0 }, "application/taxii+json": { source: "iana", compressible: !0 }, "application/td+json": { source: "iana", compressible: !0 }, "application/tei+xml": { source: "iana", compressible: !0, extensions: ["tei", "teicorpus"] }, "application/tetra_isi": { source: "iana" }, "application/thraud+xml": { source: "iana", compressible: !0, extensions: ["tfi"] }, "application/timestamp-query": { source: "iana" }, "application/timestamp-reply": { source: "iana" }, "application/timestamped-data": { source: "iana", extensions: ["tsd"] }, "application/tlsrpt+gzip": { source: "iana" }, "application/tlsrpt+json": { source: "iana", compressible: !0 }, "application/tnauthlist": { source: "iana" }, "application/token-introspection+jwt": { source: "iana" }, "application/toml": { compressible: !0, extensions: ["toml"] }, "application/trickle-ice-sdpfrag": { source: "iana" }, "application/trig": { source: "iana", extensions: ["trig"] }, "application/ttml+xml": { source: "iana", compressible: !0, extensions: ["ttml"] }, "application/tve-trigger": { source: "iana" }, "application/tzif": { source: "iana" }, "application/tzif-leap": { source: "iana" }, "application/ubjson": { compressible: !1, extensions: ["ubj"] }, "application/ulpfec": { source: "iana" }, "application/urc-grpsheet+xml": { source: "iana", compressible: !0 }, "application/urc-ressheet+xml": { source: "iana", compressible: !0, extensions: ["rsheet"] }, "application/urc-targetdesc+xml": { source: "iana", compressible: !0, extensions: ["td"] }, "application/urc-uisocketdesc+xml": { source: "iana", compressible: !0 }, "application/vcard+json": { source: "iana", compressible: !0 }, "application/vcard+xml": { source: "iana", compressible: !0 }, "application/vemmi": { source: "iana" }, "application/vividence.scriptfile": { source: "apache" }, "application/vnd.1000minds.decision-model+xml": { source: "iana", compressible: !0, extensions: ["1km"] }, "application/vnd.3gpp-prose+xml": { source: "iana", compressible: !0 }, "application/vnd.3gpp-prose-pc3ch+xml": { source: "iana", compressible: !0 }, "application/vnd.3gpp-v2x-local-service-information": { source: "iana" }, "application/vnd.3gpp.5gnas": { source: "iana" }, "application/vnd.3gpp.access-transfer-events+xml": { source: "iana", compressible: !0 }, "application/vnd.3gpp.bsf+xml": { source: "iana", compressible: !0 }, "application/vnd.3gpp.gmop+xml": { source: "iana", compressible: !0 }, "application/vnd.3gpp.gtpc": { source: "iana" }, "application/vnd.3gpp.interworking-data": { source: "iana" }, "application/vnd.3gpp.lpp": { source: "iana" }, "application/vnd.3gpp.mc-signalling-ear": { source: "iana" }, "application/vnd.3gpp.mcdata-affiliation-command+xml": { source: "iana", compressible: !0 }, "application/vnd.3gpp.mcdata-info+xml": { source: "iana", compressible: !0 }, "application/vnd.3gpp.mcdata-payload": { source: "iana" }, "application/vnd.3gpp.mcdata-service-config+xml": { source: "iana", compressible: !0 }, "application/vnd.3gpp.mcdata-signalling": { source: "iana" }, "application/vnd.3gpp.mcdata-ue-config+xml": { source: "iana", compressible: !0 }, "application/vnd.3gpp.mcdata-user-profile+xml": { source: "iana", compressible: !0 }, "application/vnd.3gpp.mcptt-affiliation-command+xml": { source: "iana", compressible: !0 }, "application/vnd.3gpp.mcptt-floor-request+xml": { source: "iana", compressible: !0 }, "application/vnd.3gpp.mcptt-info+xml": { source: "iana", compressible: !0 }, "application/vnd.3gpp.mcptt-location-info+xml": { source: "iana", compressible: !0 }, "application/vnd.3gpp.mcptt-mbms-usage-info+xml": { source: "iana", compressible: !0 }, "application/vnd.3gpp.mcptt-service-config+xml": { source: "iana", compressible: !0 }, "application/vnd.3gpp.mcptt-signed+xml": { source: "iana", compressible: !0 }, "application/vnd.3gpp.mcptt-ue-config+xml": { source: "iana", compressible: !0 }, "application/vnd.3gpp.mcptt-ue-init-config+xml": { source: "iana", compressible: !0 }, "application/vnd.3gpp.mcptt-user-profile+xml": { source: "iana", compressible: !0 }, "application/vnd.3gpp.mcvideo-affiliation-command+xml": { source: "iana", compressible: !0 }, "application/vnd.3gpp.mcvideo-affiliation-info+xml": { source: "iana", compressible: !0 }, "application/vnd.3gpp.mcvideo-info+xml": { source: "iana", compressible: !0 }, "application/vnd.3gpp.mcvideo-location-info+xml": { source: "iana", compressible: !0 }, "application/vnd.3gpp.mcvideo-mbms-usage-info+xml": { source: "iana", compressible: !0 }, "application/vnd.3gpp.mcvideo-service-config+xml": { source: "iana", compressible: !0 }, "application/vnd.3gpp.mcvideo-transmission-request+xml": { source: "iana", compressible: !0 }, "application/vnd.3gpp.mcvideo-ue-config+xml": { source: "iana", compressible: !0 }, "application/vnd.3gpp.mcvideo-user-profile+xml": { source: "iana", compressible: !0 }, "application/vnd.3gpp.mid-call+xml": { source: "iana", compressible: !0 }, "application/vnd.3gpp.ngap": { source: "iana" }, "application/vnd.3gpp.pfcp": { source: "iana" }, "application/vnd.3gpp.pic-bw-large": { source: "iana", extensions: ["plb"] }, "application/vnd.3gpp.pic-bw-small": { source: "iana", extensions: ["psb"] }, "application/vnd.3gpp.pic-bw-var": { source: "iana", extensions: ["pvb"] }, "application/vnd.3gpp.s1ap": { source: "iana" }, "application/vnd.3gpp.sms": { source: "iana" }, "application/vnd.3gpp.sms+xml": { source: "iana", compressible: !0 }, "application/vnd.3gpp.srvcc-ext+xml": { source: "iana", compressible: !0 }, "application/vnd.3gpp.srvcc-info+xml": { source: "iana", compressible: !0 }, "application/vnd.3gpp.state-and-event-info+xml": { source: "iana", compressible: !0 }, "application/vnd.3gpp.ussd+xml": { source: "iana", compressible: !0 }, "application/vnd.3gpp2.bcmcsinfo+xml": { source: "iana", compressible: !0 }, "application/vnd.3gpp2.sms": { source: "iana" }, "application/vnd.3gpp2.tcap": { source: "iana", extensions: ["tcap"] }, "application/vnd.3lightssoftware.imagescal": { source: "iana" }, "application/vnd.3m.post-it-notes": { source: "iana", extensions: ["pwn"] }, "application/vnd.accpac.simply.aso": { source: "iana", extensions: ["aso"] }, "application/vnd.accpac.simply.imp": { source: "iana", extensions: ["imp"] }, "application/vnd.acucobol": { source: "iana", extensions: ["acu"] }, "application/vnd.acucorp": { source: "iana", extensions: ["atc", "acutc"] }, "application/vnd.adobe.air-application-installer-package+zip": { source: "apache", compressible: !1, extensions: ["air"] }, "application/vnd.adobe.flash.movie": { source: "iana" }, "application/vnd.adobe.formscentral.fcdt": { source: "iana", extensions: ["fcdt"] }, "application/vnd.adobe.fxp": { source: "iana", extensions: ["fxp", "fxpl"] }, "application/vnd.adobe.partial-upload": { source: "iana" }, "application/vnd.adobe.xdp+xml": { source: "iana", compressible: !0, extensions: ["xdp"] }, "application/vnd.adobe.xfdf": { source: "iana", extensions: ["xfdf"] }, "application/vnd.aether.imp": { source: "iana" }, "application/vnd.afpc.afplinedata": { source: "iana" }, "application/vnd.afpc.afplinedata-pagedef": { source: "iana" }, "application/vnd.afpc.cmoca-cmresource": { source: "iana" }, "application/vnd.afpc.foca-charset": { source: "iana" }, "application/vnd.afpc.foca-codedfont": { source: "iana" }, "application/vnd.afpc.foca-codepage": { source: "iana" }, "application/vnd.afpc.modca": { source: "iana" }, "application/vnd.afpc.modca-cmtable": { source: "iana" }, "application/vnd.afpc.modca-formdef": { source: "iana" }, "application/vnd.afpc.modca-mediummap": { source: "iana" }, "application/vnd.afpc.modca-objectcontainer": { source: "iana" }, "application/vnd.afpc.modca-overlay": { source: "iana" }, "application/vnd.afpc.modca-pagesegment": { source: "iana" }, "application/vnd.age": { source: "iana", extensions: ["age"] }, "application/vnd.ah-barcode": { source: "iana" }, "application/vnd.ahead.space": { source: "iana", extensions: ["ahead"] }, "application/vnd.airzip.filesecure.azf": { source: "iana", extensions: ["azf"] }, "application/vnd.airzip.filesecure.azs": { source: "iana", extensions: ["azs"] }, "application/vnd.amadeus+json": { source: "iana", compressible: !0 }, "application/vnd.amazon.ebook": { source: "apache", extensions: ["azw"] }, "application/vnd.amazon.mobi8-ebook": { source: "iana" }, "application/vnd.americandynamics.acc": { source: "iana", extensions: ["acc"] }, "application/vnd.amiga.ami": { source: "iana", extensions: ["ami"] }, "application/vnd.amundsen.maze+xml": { source: "iana", compressible: !0 }, "application/vnd.android.ota": { source: "iana" }, "application/vnd.android.package-archive": { source: "apache", compressible: !1, extensions: ["apk"] }, "application/vnd.anki": { source: "iana" }, "application/vnd.anser-web-certificate-issue-initiation": { source: "iana", extensions: ["cii"] }, "application/vnd.anser-web-funds-transfer-initiation": { source: "apache", extensions: ["fti"] }, "application/vnd.antix.game-component": { source: "iana", extensions: ["atx"] }, "application/vnd.apache.arrow.file": { source: "iana" }, "application/vnd.apache.arrow.stream": { source: "iana" }, "application/vnd.apache.thrift.binary": { source: "iana" }, "application/vnd.apache.thrift.compact": { source: "iana" }, "application/vnd.apache.thrift.json": { source: "iana" }, "application/vnd.api+json": { source: "iana", compressible: !0 }, "application/vnd.aplextor.warrp+json": { source: "iana", compressible: !0 }, "application/vnd.apothekende.reservation+json": { source: "iana", compressible: !0 }, "application/vnd.apple.installer+xml": { source: "iana", compressible: !0, extensions: ["mpkg"] }, "application/vnd.apple.keynote": { source: "iana", extensions: ["key"] }, "application/vnd.apple.mpegurl": { source: "iana", extensions: ["m3u8"] }, "application/vnd.apple.numbers": { source: "iana", extensions: ["numbers"] }, "application/vnd.apple.pages": { source: "iana", extensions: ["pages"] }, "application/vnd.apple.pkpass": { compressible: !1, extensions: ["pkpass"] }, "application/vnd.arastra.swi": { source: "iana" }, "application/vnd.aristanetworks.swi": { source: "iana", extensions: ["swi"] }, "application/vnd.artisan+json": { source: "iana", compressible: !0 }, "application/vnd.artsquare": { source: "iana" }, "application/vnd.astraea-software.iota": { source: "iana", extensions: ["iota"] }, "application/vnd.audiograph": { source: "iana", extensions: ["aep"] }, "application/vnd.autopackage": { source: "iana" }, "application/vnd.avalon+json": { source: "iana", compressible: !0 }, "application/vnd.avistar+xml": { source: "iana", compressible: !0 }, "application/vnd.balsamiq.bmml+xml": { source: "iana", compressible: !0, extensions: ["bmml"] }, "application/vnd.balsamiq.bmpr": { source: "iana" }, "application/vnd.banana-accounting": { source: "iana" }, "application/vnd.bbf.usp.error": { source: "iana" }, "application/vnd.bbf.usp.msg": { source: "iana" }, "application/vnd.bbf.usp.msg+json": { source: "iana", compressible: !0 }, "application/vnd.bekitzur-stech+json": { source: "iana", compressible: !0 }, "application/vnd.bint.med-content": { source: "iana" }, "application/vnd.biopax.rdf+xml": { source: "iana", compressible: !0 }, "application/vnd.blink-idb-value-wrapper": { source: "iana" }, "application/vnd.blueice.multipass": { source: "iana", extensions: ["mpm"] }, "application/vnd.bluetooth.ep.oob": { source: "iana" }, "application/vnd.bluetooth.le.oob": { source: "iana" }, "application/vnd.bmi": { source: "iana", extensions: ["bmi"] }, "application/vnd.bpf": { source: "iana" }, "application/vnd.bpf3": { source: "iana" }, "application/vnd.businessobjects": { source: "iana", extensions: ["rep"] }, "application/vnd.byu.uapi+json": { source: "iana", compressible: !0 }, "application/vnd.cab-jscript": { source: "iana" }, "application/vnd.canon-cpdl": { source: "iana" }, "application/vnd.canon-lips": { source: "iana" }, "application/vnd.capasystems-pg+json": { source: "iana", compressible: !0 }, "application/vnd.cendio.thinlinc.clientconf": { source: "iana" }, "application/vnd.century-systems.tcp_stream": { source: "iana" }, "application/vnd.chemdraw+xml": { source: "iana", compressible: !0, extensions: ["cdxml"] }, "application/vnd.chess-pgn": { source: "iana" }, "application/vnd.chipnuts.karaoke-mmd": { source: "iana", extensions: ["mmd"] }, "application/vnd.ciedi": { source: "iana" }, "application/vnd.cinderella": { source: "iana", extensions: ["cdy"] }, "application/vnd.cirpack.isdn-ext": { source: "iana" }, "application/vnd.citationstyles.style+xml": { source: "iana", compressible: !0, extensions: ["csl"] }, "application/vnd.claymore": { source: "iana", extensions: ["cla"] }, "application/vnd.cloanto.rp9": { source: "iana", extensions: ["rp9"] }, "application/vnd.clonk.c4group": { source: "iana", extensions: ["c4g", "c4d", "c4f", "c4p", "c4u"] }, "application/vnd.cluetrust.cartomobile-config": { source: "iana", extensions: ["c11amc"] }, "application/vnd.cluetrust.cartomobile-config-pkg": { source: "iana", extensions: ["c11amz"] }, "application/vnd.coffeescript": { source: "iana" }, "application/vnd.collabio.xodocuments.document": { source: "iana" }, "application/vnd.collabio.xodocuments.document-template": { source: "iana" }, "application/vnd.collabio.xodocuments.presentation": { source: "iana" }, "application/vnd.collabio.xodocuments.presentation-template": { source: "iana" }, "application/vnd.collabio.xodocuments.spreadsheet": { source: "iana" }, "application/vnd.collabio.xodocuments.spreadsheet-template": { source: "iana" }, "application/vnd.collection+json": { source: "iana", compressible: !0 }, "application/vnd.collection.doc+json": { source: "iana", compressible: !0 }, "application/vnd.collection.next+json": { source: "iana", compressible: !0 }, "application/vnd.comicbook+zip": { source: "iana", compressible: !1 }, "application/vnd.comicbook-rar": { source: "iana" }, "application/vnd.commerce-battelle": { source: "iana" }, "application/vnd.commonspace": { source: "iana", extensions: ["csp"] }, "application/vnd.contact.cmsg": { source: "iana", extensions: ["cdbcmsg"] }, "application/vnd.coreos.ignition+json": { source: "iana", compressible: !0 }, "application/vnd.cosmocaller": { source: "iana", extensions: ["cmc"] }, "application/vnd.crick.clicker": { source: "iana", extensions: ["clkx"] }, "application/vnd.crick.clicker.keyboard": { source: "iana", extensions: ["clkk"] }, "application/vnd.crick.clicker.palette": { source: "iana", extensions: ["clkp"] }, "application/vnd.crick.clicker.template": { source: "iana", extensions: ["clkt"] }, "application/vnd.crick.clicker.wordbank": { source: "iana", extensions: ["clkw"] }, "application/vnd.criticaltools.wbs+xml": { source: "iana", compressible: !0, extensions: ["wbs"] }, "application/vnd.cryptii.pipe+json": { source: "iana", compressible: !0 }, "application/vnd.crypto-shade-file": { source: "iana" }, "application/vnd.cryptomator.encrypted": { source: "iana" }, "application/vnd.cryptomator.vault": { source: "iana" }, "application/vnd.ctc-posml": { source: "iana", extensions: ["pml"] }, "application/vnd.ctct.ws+xml": { source: "iana", compressible: !0 }, "application/vnd.cups-pdf": { source: "iana" }, "application/vnd.cups-postscript": { source: "iana" }, "application/vnd.cups-ppd": { source: "iana", extensions: ["ppd"] }, "application/vnd.cups-raster": { source: "iana" }, "application/vnd.cups-raw": { source: "iana" }, "application/vnd.curl": { source: "iana" }, "application/vnd.curl.car": { source: "apache", extensions: ["car"] }, "application/vnd.curl.pcurl": { source: "apache", extensions: ["pcurl"] }, "application/vnd.cyan.dean.root+xml": { source: "iana", compressible: !0 }, "application/vnd.cybank": { source: "iana" }, "application/vnd.cyclonedx+json": { source: "iana", compressible: !0 }, "application/vnd.cyclonedx+xml": { source: "iana", compressible: !0 }, "application/vnd.d2l.coursepackage1p0+zip": { source: "iana", compressible: !1 }, "application/vnd.d3m-dataset": { source: "iana" }, "application/vnd.d3m-problem": { source: "iana" }, "application/vnd.dart": { source: "iana", compressible: !0, extensions: ["dart"] }, "application/vnd.data-vision.rdz": { source: "iana", extensions: ["rdz"] }, "application/vnd.datapackage+json": { source: "iana", compressible: !0 }, "application/vnd.dataresource+json": { source: "iana", compressible: !0 }, "application/vnd.dbf": { source: "iana", extensions: ["dbf"] }, "application/vnd.debian.binary-package": { source: "iana" }, "application/vnd.dece.data": { source: "iana", extensions: ["uvf", "uvvf", "uvd", "uvvd"] }, "application/vnd.dece.ttml+xml": { source: "iana", compressible: !0, extensions: ["uvt", "uvvt"] }, "application/vnd.dece.unspecified": { source: "iana", extensions: ["uvx", "uvvx"] }, "application/vnd.dece.zip": { source: "iana", extensions: ["uvz", "uvvz"] }, "application/vnd.denovo.fcselayout-link": { source: "iana", extensions: ["fe_launch"] }, "application/vnd.desmume.movie": { source: "iana" }, "application/vnd.dir-bi.plate-dl-nosuffix": { source: "iana" }, "application/vnd.dm.delegation+xml": { source: "iana", compressible: !0 }, "application/vnd.dna": { source: "iana", extensions: ["dna"] }, "application/vnd.document+json": { source: "iana", compressible: !0 }, "application/vnd.dolby.mlp": { source: "apache", extensions: ["mlp"] }, "application/vnd.dolby.mobile.1": { source: "iana" }, "application/vnd.dolby.mobile.2": { source: "iana" }, "application/vnd.doremir.scorecloud-binary-document": { source: "iana" }, "application/vnd.dpgraph": { source: "iana", extensions: ["dpg"] }, "application/vnd.dreamfactory": { source: "iana", extensions: ["dfac"] }, "application/vnd.drive+json": { source: "iana", compressible: !0 }, "application/vnd.ds-keypoint": { source: "apache", extensions: ["kpxx"] }, "application/vnd.dtg.local": { source: "iana" }, "application/vnd.dtg.local.flash": { source: "iana" }, "application/vnd.dtg.local.html": { source: "iana" }, "application/vnd.dvb.ait": { source: "iana", extensions: ["ait"] }, "application/vnd.dvb.dvbisl+xml": { source: "iana", compressible: !0 }, "application/vnd.dvb.dvbj": { source: "iana" }, "application/vnd.dvb.esgcontainer": { source: "iana" }, "application/vnd.dvb.ipdcdftnotifaccess": { source: "iana" }, "application/vnd.dvb.ipdcesgaccess": { source: "iana" }, "application/vnd.dvb.ipdcesgaccess2": { source: "iana" }, "application/vnd.dvb.ipdcesgpdd": { source: "iana" }, "application/vnd.dvb.ipdcroaming": { source: "iana" }, "application/vnd.dvb.iptv.alfec-base": { source: "iana" }, "application/vnd.dvb.iptv.alfec-enhancement": { source: "iana" }, "application/vnd.dvb.notif-aggregate-root+xml": { source: "iana", compressible: !0 }, "application/vnd.dvb.notif-container+xml": { source: "iana", compressible: !0 }, "application/vnd.dvb.notif-generic+xml": { source: "iana", compressible: !0 }, "application/vnd.dvb.notif-ia-msglist+xml": { source: "iana", compressible: !0 }, "application/vnd.dvb.notif-ia-registration-request+xml": { source: "iana", compressible: !0 }, "application/vnd.dvb.notif-ia-registration-response+xml": { source: "iana", compressible: !0 }, "application/vnd.dvb.notif-init+xml": { source: "iana", compressible: !0 }, "application/vnd.dvb.pfr": { source: "iana" }, "application/vnd.dvb.service": { source: "iana", extensions: ["svc"] }, "application/vnd.dxr": { source: "iana" }, "application/vnd.dynageo": { source: "iana", extensions: ["geo"] }, "application/vnd.dzr": { source: "iana" }, "application/vnd.easykaraoke.cdgdownload": { source: "iana" }, "application/vnd.ecdis-update": { source: "iana" }, "application/vnd.ecip.rlp": { source: "iana" }, "application/vnd.eclipse.ditto+json": { source: "iana", compressible: !0 }, "application/vnd.ecowin.chart": { source: "iana", extensions: ["mag"] }, "application/vnd.ecowin.filerequest": { source: "iana" }, "application/vnd.ecowin.fileupdate": { source: "iana" }, "application/vnd.ecowin.series": { source: "iana" }, "application/vnd.ecowin.seriesrequest": { source: "iana" }, "application/vnd.ecowin.seriesupdate": { source: "iana" }, "application/vnd.efi.img": { source: "iana" }, "application/vnd.efi.iso": { source: "iana" }, "application/vnd.emclient.accessrequest+xml": { source: "iana", compressible: !0 }, "application/vnd.enliven": { source: "iana", extensions: ["nml"] }, "application/vnd.enphase.envoy": { source: "iana" }, "application/vnd.eprints.data+xml": { source: "iana", compressible: !0 }, "application/vnd.epson.esf": { source: "iana", extensions: ["esf"] }, "application/vnd.epson.msf": { source: "iana", extensions: ["msf"] }, "application/vnd.epson.quickanime": { source: "iana", extensions: ["qam"] }, "application/vnd.epson.salt": { source: "iana", extensions: ["slt"] }, "application/vnd.epson.ssf": { source: "iana", extensions: ["ssf"] }, "application/vnd.ericsson.quickcall": { source: "iana" }, "application/vnd.espass-espass+zip": { source: "iana", compressible: !1 }, "application/vnd.eszigno3+xml": { source: "iana", compressible: !0, extensions: ["es3", "et3"] }, "application/vnd.etsi.aoc+xml": { source: "iana", compressible: !0 }, "application/vnd.etsi.asic-e+zip": { source: "iana", compressible: !1 }, "application/vnd.etsi.asic-s+zip": { source: "iana", compressible: !1 }, "application/vnd.etsi.cug+xml": { source: "iana", compressible: !0 }, "application/vnd.etsi.iptvcommand+xml": { source: "iana", compressible: !0 }, "application/vnd.etsi.iptvdiscovery+xml": { source: "iana", compressible: !0 }, "application/vnd.etsi.iptvprofile+xml": { source: "iana", compressible: !0 }, "application/vnd.etsi.iptvsad-bc+xml": { source: "iana", compressible: !0 }, "application/vnd.etsi.iptvsad-cod+xml": { source: "iana", compressible: !0 }, "application/vnd.etsi.iptvsad-npvr+xml": { source: "iana", compressible: !0 }, "application/vnd.etsi.iptvservice+xml": { source: "iana", compressible: !0 }, "application/vnd.etsi.iptvsync+xml": { source: "iana", compressible: !0 }, "application/vnd.etsi.iptvueprofile+xml": { source: "iana", compressible: !0 }, "application/vnd.etsi.mcid+xml": { source: "iana", compressible: !0 }, "application/vnd.etsi.mheg5": { source: "iana" }, "application/vnd.etsi.overload-control-policy-dataset+xml": { source: "iana", compressible: !0 }, "application/vnd.etsi.pstn+xml": { source: "iana", compressible: !0 }, "application/vnd.etsi.sci+xml": { source: "iana", compressible: !0 }, "application/vnd.etsi.simservs+xml": { source: "iana", compressible: !0 }, "application/vnd.etsi.timestamp-token": { source: "iana" }, "application/vnd.etsi.tsl+xml": { source: "iana", compressible: !0 }, "application/vnd.etsi.tsl.der": { source: "iana" }, "application/vnd.eu.kasparian.car+json": { source: "iana", compressible: !0 }, "application/vnd.eudora.data": { source: "iana" }, "application/vnd.evolv.ecig.profile": { source: "iana" }, "application/vnd.evolv.ecig.settings": { source: "iana" }, "application/vnd.evolv.ecig.theme": { source: "iana" }, "application/vnd.exstream-empower+zip": { source: "iana", compressible: !1 }, "application/vnd.exstream-package": { source: "iana" }, "application/vnd.ezpix-album": { source: "iana", extensions: ["ez2"] }, "application/vnd.ezpix-package": { source: "iana", extensions: ["ez3"] }, "application/vnd.f-secure.mobile": { source: "iana" }, "application/vnd.familysearch.gedcom+zip": { source: "iana", compressible: !1 }, "application/vnd.fastcopy-disk-image": { source: "iana" }, "application/vnd.fdf": { source: "iana", extensions: ["fdf"] }, "application/vnd.fdsn.mseed": { source: "iana", extensions: ["mseed"] }, "application/vnd.fdsn.seed": { source: "iana", extensions: ["seed", "dataless"] }, "application/vnd.ffsns": { source: "iana" }, "application/vnd.ficlab.flb+zip": { source: "iana", compressible: !1 }, "application/vnd.filmit.zfc": { source: "iana" }, "application/vnd.fints": { source: "iana" }, "application/vnd.firemonkeys.cloudcell": { source: "iana" }, "application/vnd.flographit": { source: "iana", extensions: ["gph"] }, "application/vnd.fluxtime.clip": { source: "iana", extensions: ["ftc"] }, "application/vnd.font-fontforge-sfd": { source: "iana" }, "application/vnd.framemaker": { source: "iana", extensions: ["fm", "frame", "maker", "book"] }, "application/vnd.frogans.fnc": { source: "iana", extensions: ["fnc"] }, "application/vnd.frogans.ltf": { source: "iana", extensions: ["ltf"] }, "application/vnd.fsc.weblaunch": { source: "iana", extensions: ["fsc"] }, "application/vnd.fujifilm.fb.docuworks": { source: "iana" }, "application/vnd.fujifilm.fb.docuworks.binder": { source: "iana" }, "application/vnd.fujifilm.fb.docuworks.container": { source: "iana" }, "application/vnd.fujifilm.fb.jfi+xml": { source: "iana", compressible: !0 }, "application/vnd.fujitsu.oasys": { source: "iana", extensions: ["oas"] }, "application/vnd.fujitsu.oasys2": { source: "iana", extensions: ["oa2"] }, "application/vnd.fujitsu.oasys3": { source: "iana", extensions: ["oa3"] }, "application/vnd.fujitsu.oasysgp": { source: "iana", extensions: ["fg5"] }, "application/vnd.fujitsu.oasysprs": { source: "iana", extensions: ["bh2"] }, "application/vnd.fujixerox.art-ex": { source: "iana" }, "application/vnd.fujixerox.art4": { source: "iana" }, "application/vnd.fujixerox.ddd": { source: "iana", extensions: ["ddd"] }, "application/vnd.fujixerox.docuworks": { source: "iana", extensions: ["xdw"] }, "application/vnd.fujixerox.docuworks.binder": { source: "iana", extensions: ["xbd"] }, "application/vnd.fujixerox.docuworks.container": { source: "iana" }, "application/vnd.fujixerox.hbpl": { source: "iana" }, "application/vnd.fut-misnet": { source: "iana" }, "application/vnd.futoin+cbor": { source: "iana" }, "application/vnd.futoin+json": { source: "iana", compressible: !0 }, "application/vnd.fuzzysheet": { source: "iana", extensions: ["fzs"] }, "application/vnd.genomatix.tuxedo": { source: "iana", extensions: ["txd"] }, "application/vnd.gentics.grd+json": { source: "iana", compressible: !0 }, "application/vnd.geo+json": { source: "iana", compressible: !0 }, "application/vnd.geocube+xml": { source: "iana", compressible: !0 }, "application/vnd.geogebra.file": { source: "iana", extensions: ["ggb"] }, "application/vnd.geogebra.slides": { source: "iana" }, "application/vnd.geogebra.tool": { source: "iana", extensions: ["ggt"] }, "application/vnd.geometry-explorer": { source: "iana", extensions: ["gex", "gre"] }, "application/vnd.geonext": { source: "iana", extensions: ["gxt"] }, "application/vnd.geoplan": { source: "iana", extensions: ["g2w"] }, "application/vnd.geospace": { source: "iana", extensions: ["g3w"] }, "application/vnd.gerber": { source: "iana" }, "application/vnd.globalplatform.card-content-mgt": { source: "iana" }, "application/vnd.globalplatform.card-content-mgt-response": { source: "iana" }, "application/vnd.gmx": { source: "iana", extensions: ["gmx"] }, "application/vnd.google-apps.document": { compressible: !1, extensions: ["gdoc"] }, "application/vnd.google-apps.presentation": { compressible: !1, extensions: ["gslides"] }, "application/vnd.google-apps.spreadsheet": { compressible: !1, extensions: ["gsheet"] }, "application/vnd.google-earth.kml+xml": { source: "iana", compressible: !0, extensions: ["kml"] }, "application/vnd.google-earth.kmz": { source: "iana", compressible: !1, extensions: ["kmz"] }, "application/vnd.gov.sk.e-form+xml": { source: "iana", compressible: !0 }, "application/vnd.gov.sk.e-form+zip": { source: "iana", compressible: !1 }, "application/vnd.gov.sk.xmldatacontainer+xml": { source: "iana", compressible: !0 }, "application/vnd.grafeq": { source: "iana", extensions: ["gqf", "gqs"] }, "application/vnd.gridmp": { source: "iana" }, "application/vnd.groove-account": { source: "iana", extensions: ["gac"] }, "application/vnd.groove-help": { source: "iana", extensions: ["ghf"] }, "application/vnd.groove-identity-message": { source: "iana", extensions: ["gim"] }, "application/vnd.groove-injector": { source: "iana", extensions: ["grv"] }, "application/vnd.groove-tool-message": { source: "iana", extensions: ["gtm"] }, "application/vnd.groove-tool-template": { source: "iana", extensions: ["tpl"] }, "application/vnd.groove-vcard": { source: "iana", extensions: ["vcg"] }, "application/vnd.hal+json": { source: "iana", compressible: !0 }, "application/vnd.hal+xml": { source: "iana", compressible: !0, extensions: ["hal"] }, "application/vnd.handheld-entertainment+xml": { source: "iana", compressible: !0, extensions: ["zmm"] }, "application/vnd.hbci": { source: "iana", extensions: ["hbci"] }, "application/vnd.hc+json": { source: "iana", compressible: !0 }, "application/vnd.hcl-bireports": { source: "iana" }, "application/vnd.hdt": { source: "iana" }, "application/vnd.heroku+json": { source: "iana", compressible: !0 }, "application/vnd.hhe.lesson-player": { source: "iana", extensions: ["les"] }, "application/vnd.hl7cda+xml": { source: "iana", charset: "UTF-8", compressible: !0 }, "application/vnd.hl7v2+xml": { source: "iana", charset: "UTF-8", compressible: !0 }, "application/vnd.hp-hpgl": { source: "iana", extensions: ["hpgl"] }, "application/vnd.hp-hpid": { source: "iana", extensions: ["hpid"] }, "application/vnd.hp-hps": { source: "iana", extensions: ["hps"] }, "application/vnd.hp-jlyt": { source: "iana", extensions: ["jlt"] }, "application/vnd.hp-pcl": { source: "iana", extensions: ["pcl"] }, "application/vnd.hp-pclxl": { source: "iana", extensions: ["pclxl"] }, "application/vnd.httphone": { source: "iana" }, "application/vnd.hydrostatix.sof-data": { source: "iana", extensions: ["sfd-hdstx"] }, "application/vnd.hyper+json": { source: "iana", compressible: !0 }, "application/vnd.hyper-item+json": { source: "iana", compressible: !0 }, "application/vnd.hyperdrive+json": { source: "iana", compressible: !0 }, "application/vnd.hzn-3d-crossword": { source: "iana" }, "application/vnd.ibm.afplinedata": { source: "iana" }, "application/vnd.ibm.electronic-media": { source: "iana" }, "application/vnd.ibm.minipay": { source: "iana", extensions: ["mpy"] }, "application/vnd.ibm.modcap": { source: "iana", extensions: ["afp", "listafp", "list3820"] }, "application/vnd.ibm.rights-management": { source: "iana", extensions: ["irm"] }, "application/vnd.ibm.secure-container": { source: "iana", extensions: ["sc"] }, "application/vnd.iccprofile": { source: "iana", extensions: ["icc", "icm"] }, "application/vnd.ieee.1905": { source: "iana" }, "application/vnd.igloader": { source: "iana", extensions: ["igl"] }, "application/vnd.imagemeter.folder+zip": { source: "iana", compressible: !1 }, "application/vnd.imagemeter.image+zip": { source: "iana", compressible: !1 }, "application/vnd.immervision-ivp": { source: "iana", extensions: ["ivp"] }, "application/vnd.immervision-ivu": { source: "iana", extensions: ["ivu"] }, "application/vnd.ims.imsccv1p1": { source: "iana" }, "application/vnd.ims.imsccv1p2": { source: "iana" }, "application/vnd.ims.imsccv1p3": { source: "iana" }, "application/vnd.ims.lis.v2.result+json": { source: "iana", compressible: !0 }, "application/vnd.ims.lti.v2.toolconsumerprofile+json": { source: "iana", compressible: !0 }, "application/vnd.ims.lti.v2.toolproxy+json": { source: "iana", compressible: !0 }, "application/vnd.ims.lti.v2.toolproxy.id+json": { source: "iana", compressible: !0 }, "application/vnd.ims.lti.v2.toolsettings+json": { source: "iana", compressible: !0 }, "application/vnd.ims.lti.v2.toolsettings.simple+json": { source: "iana", compressible: !0 }, "application/vnd.informedcontrol.rms+xml": { source: "iana", compressible: !0 }, "application/vnd.informix-visionary": { source: "iana" }, "application/vnd.infotech.project": { source: "iana" }, "application/vnd.infotech.project+xml": { source: "iana", compressible: !0 }, "application/vnd.innopath.wamp.notification": { source: "iana" }, "application/vnd.insors.igm": { source: "iana", extensions: ["igm"] }, "application/vnd.intercon.formnet": { source: "iana", extensions: ["xpw", "xpx"] }, "application/vnd.intergeo": { source: "iana", extensions: ["i2g"] }, "application/vnd.intertrust.digibox": { source: "iana" }, "application/vnd.intertrust.nncp": { source: "iana" }, "application/vnd.intu.qbo": { source: "iana", extensions: ["qbo"] }, "application/vnd.intu.qfx": { source: "iana", extensions: ["qfx"] }, "application/vnd.iptc.g2.catalogitem+xml": { source: "iana", compressible: !0 }, "application/vnd.iptc.g2.conceptitem+xml": { source: "iana", compressible: !0 }, "application/vnd.iptc.g2.knowledgeitem+xml": { source: "iana", compressible: !0 }, "application/vnd.iptc.g2.newsitem+xml": { source: "iana", compressible: !0 }, "application/vnd.iptc.g2.newsmessage+xml": { source: "iana", compressible: !0 }, "application/vnd.iptc.g2.packageitem+xml": { source: "iana", compressible: !0 }, "application/vnd.iptc.g2.planningitem+xml": { source: "iana", compressible: !0 }, "application/vnd.ipunplugged.rcprofile": { source: "iana", extensions: ["rcprofile"] }, "application/vnd.irepository.package+xml": { source: "iana", compressible: !0, extensions: ["irp"] }, "application/vnd.is-xpr": { source: "iana", extensions: ["xpr"] }, "application/vnd.isac.fcs": { source: "iana", extensions: ["fcs"] }, "application/vnd.iso11783-10+zip": { source: "iana", compressible: !1 }, "application/vnd.jam": { source: "iana", extensions: ["jam"] }, "application/vnd.japannet-directory-service": { source: "iana" }, "application/vnd.japannet-jpnstore-wakeup": { source: "iana" }, "application/vnd.japannet-payment-wakeup": { source: "iana" }, "application/vnd.japannet-registration": { source: "iana" }, "application/vnd.japannet-registration-wakeup": { source: "iana" }, "application/vnd.japannet-setstore-wakeup": { source: "iana" }, "application/vnd.japannet-verification": { source: "iana" }, "application/vnd.japannet-verification-wakeup": { source: "iana" }, "application/vnd.jcp.javame.midlet-rms": { source: "iana", extensions: ["rms"] }, "application/vnd.jisp": { source: "iana", extensions: ["jisp"] }, "application/vnd.joost.joda-archive": { source: "iana", extensions: ["joda"] }, "application/vnd.jsk.isdn-ngn": { source: "iana" }, "application/vnd.kahootz": { source: "iana", extensions: ["ktz", "ktr"] }, "application/vnd.kde.karbon": { source: "iana", extensions: ["karbon"] }, "application/vnd.kde.kchart": { source: "iana", extensions: ["chrt"] }, "application/vnd.kde.kformula": { source: "iana", extensions: ["kfo"] }, "application/vnd.kde.kivio": { source: "iana", extensions: ["flw"] }, "application/vnd.kde.kontour": { source: "iana", extensions: ["kon"] }, "application/vnd.kde.kpresenter": { source: "iana", extensions: ["kpr", "kpt"] }, "application/vnd.kde.kspread": { source: "iana", extensions: ["ksp"] }, "application/vnd.kde.kword": { source: "iana", extensions: ["kwd", "kwt"] }, "application/vnd.kenameaapp": { source: "iana", extensions: ["htke"] }, "application/vnd.kidspiration": { source: "iana", extensions: ["kia"] }, "application/vnd.kinar": { source: "iana", extensions: ["kne", "knp"] }, "application/vnd.koan": { source: "iana", extensions: ["skp", "skd", "skt", "skm"] }, "application/vnd.kodak-descriptor": { source: "iana", extensions: ["sse"] }, "application/vnd.las": { source: "iana" }, "application/vnd.las.las+json": { source: "iana", compressible: !0 }, "application/vnd.las.las+xml": { source: "iana", compressible: !0, extensions: ["lasxml"] }, "application/vnd.laszip": { source: "iana" }, "application/vnd.leap+json": { source: "iana", compressible: !0 }, "application/vnd.liberty-request+xml": { source: "iana", compressible: !0 }, "application/vnd.llamagraphics.life-balance.desktop": { source: "iana", extensions: ["lbd"] }, "application/vnd.llamagraphics.life-balance.exchange+xml": { source: "iana", compressible: !0, extensions: ["lbe"] }, "application/vnd.logipipe.circuit+zip": { source: "iana", compressible: !1 }, "application/vnd.loom": { source: "iana" }, "application/vnd.lotus-1-2-3": { source: "iana", extensions: ["123"] }, "application/vnd.lotus-approach": { source: "iana", extensions: ["apr"] }, "application/vnd.lotus-freelance": { source: "iana", extensions: ["pre"] }, "application/vnd.lotus-notes": { source: "iana", extensions: ["nsf"] }, "application/vnd.lotus-organizer": { source: "iana", extensions: ["org"] }, "application/vnd.lotus-screencam": { source: "iana", extensions: ["scm"] }, "application/vnd.lotus-wordpro": { source: "iana", extensions: ["lwp"] }, "application/vnd.macports.portpkg": { source: "iana", extensions: ["portpkg"] }, "application/vnd.mapbox-vector-tile": { source: "iana", extensions: ["mvt"] }, "application/vnd.marlin.drm.actiontoken+xml": { source: "iana", compressible: !0 }, "application/vnd.marlin.drm.conftoken+xml": { source: "iana", compressible: !0 }, "application/vnd.marlin.drm.license+xml": { source: "iana", compressible: !0 }, "application/vnd.marlin.drm.mdcf": { source: "iana" }, "application/vnd.mason+json": { source: "iana", compressible: !0 }, "application/vnd.maxar.archive.3tz+zip": { source: "iana", compressible: !1 }, "application/vnd.maxmind.maxmind-db": { source: "iana" }, "application/vnd.mcd": { source: "iana", extensions: ["mcd"] }, "application/vnd.medcalcdata": { source: "iana", extensions: ["mc1"] }, "application/vnd.mediastation.cdkey": { source: "iana", extensions: ["cdkey"] }, "application/vnd.meridian-slingshot": { source: "iana" }, "application/vnd.mfer": { source: "iana", extensions: ["mwf"] }, "application/vnd.mfmp": { source: "iana", extensions: ["mfm"] }, "application/vnd.micro+json": { source: "iana", compressible: !0 }, "application/vnd.micrografx.flo": { source: "iana", extensions: ["flo"] }, "application/vnd.micrografx.igx": { source: "iana", extensions: ["igx"] }, "application/vnd.microsoft.portable-executable": { source: "iana" }, "application/vnd.microsoft.windows.thumbnail-cache": { source: "iana" }, "application/vnd.miele+json": { source: "iana", compressible: !0 }, "application/vnd.mif": { source: "iana", extensions: ["mif"] }, "application/vnd.minisoft-hp3000-save": { source: "iana" }, "application/vnd.mitsubishi.misty-guard.trustweb": { source: "iana" }, "application/vnd.mobius.daf": { source: "iana", extensions: ["daf"] }, "application/vnd.mobius.dis": { source: "iana", extensions: ["dis"] }, "application/vnd.mobius.mbk": { source: "iana", extensions: ["mbk"] }, "application/vnd.mobius.mqy": { source: "iana", extensions: ["mqy"] }, "application/vnd.mobius.msl": { source: "iana", extensions: ["msl"] }, "application/vnd.mobius.plc": { source: "iana", extensions: ["plc"] }, "application/vnd.mobius.txf": { source: "iana", extensions: ["txf"] }, "application/vnd.mophun.application": { source: "iana", extensions: ["mpn"] }, "application/vnd.mophun.certificate": { source: "iana", extensions: ["mpc"] }, "application/vnd.motorola.flexsuite": { source: "iana" }, "application/vnd.motorola.flexsuite.adsi": { source: "iana" }, "application/vnd.motorola.flexsuite.fis": { source: "iana" }, "application/vnd.motorola.flexsuite.gotap": { source: "iana" }, "application/vnd.motorola.flexsuite.kmr": { source: "iana" }, "application/vnd.motorola.flexsuite.ttc": { source: "iana" }, "application/vnd.motorola.flexsuite.wem": { source: "iana" }, "application/vnd.motorola.iprm": { source: "iana" }, "application/vnd.mozilla.xul+xml": { source: "iana", compressible: !0, extensions: ["xul"] }, "application/vnd.ms-3mfdocument": { source: "iana" }, "application/vnd.ms-artgalry": { source: "iana", extensions: ["cil"] }, "application/vnd.ms-asf": { source: "iana" }, "application/vnd.ms-cab-compressed": { source: "iana", extensions: ["cab"] }, "application/vnd.ms-color.iccprofile": { source: "apache" }, "application/vnd.ms-excel": { source: "iana", compressible: !1, extensions: ["xls", "xlm", "xla", "xlc", "xlt", "xlw"] }, "application/vnd.ms-excel.addin.macroenabled.12": { source: "iana", extensions: ["xlam"] }, "application/vnd.ms-excel.sheet.binary.macroenabled.12": { source: "iana", extensions: ["xlsb"] }, "application/vnd.ms-excel.sheet.macroenabled.12": { source: "iana", extensions: ["xlsm"] }, "application/vnd.ms-excel.template.macroenabled.12": { source: "iana", extensions: ["xltm"] }, "application/vnd.ms-fontobject": { source: "iana", compressible: !0, extensions: ["eot"] }, "application/vnd.ms-htmlhelp": { source: "iana", extensions: ["chm"] }, "application/vnd.ms-ims": { source: "iana", extensions: ["ims"] }, "application/vnd.ms-lrm": { source: "iana", extensions: ["lrm"] }, "application/vnd.ms-office.activex+xml": { source: "iana", compressible: !0 }, "application/vnd.ms-officetheme": { source: "iana", extensions: ["thmx"] }, "application/vnd.ms-opentype": { source: "apache", compressible: !0 }, "application/vnd.ms-outlook": { compressible: !1, extensions: ["msg"] }, "application/vnd.ms-package.obfuscated-opentype": { source: "apache" }, "application/vnd.ms-pki.seccat": { source: "apache", extensions: ["cat"] }, "application/vnd.ms-pki.stl": { source: "apache", extensions: ["stl"] }, "application/vnd.ms-playready.initiator+xml": { source: "iana", compressible: !0 }, "application/vnd.ms-powerpoint": { source: "iana", compressible: !1, extensions: ["ppt", "pps", "pot"] }, "application/vnd.ms-powerpoint.addin.macroenabled.12": { source: "iana", extensions: ["ppam"] }, "application/vnd.ms-powerpoint.presentation.macroenabled.12": { source: "iana", extensions: ["pptm"] }, "application/vnd.ms-powerpoint.slide.macroenabled.12": { source: "iana", extensions: ["sldm"] }, "application/vnd.ms-powerpoint.slideshow.macroenabled.12": { source: "iana", extensions: ["ppsm"] }, "application/vnd.ms-powerpoint.template.macroenabled.12": { source: "iana", extensions: ["potm"] }, "application/vnd.ms-printdevicecapabilities+xml": { source: "iana", compressible: !0 }, "application/vnd.ms-printing.printticket+xml": { source: "apache", compressible: !0 }, "application/vnd.ms-printschematicket+xml": { source: "iana", compressible: !0 }, "application/vnd.ms-project": { source: "iana", extensions: ["mpp", "mpt"] }, "application/vnd.ms-tnef": { source: "iana" }, "application/vnd.ms-windows.devicepairing": { source: "iana" }, "application/vnd.ms-windows.nwprinting.oob": { source: "iana" }, "application/vnd.ms-windows.printerpairing": { source: "iana" }, "application/vnd.ms-windows.wsd.oob": { source: "iana" }, "application/vnd.ms-wmdrm.lic-chlg-req": { source: "iana" }, "application/vnd.ms-wmdrm.lic-resp": { source: "iana" }, "application/vnd.ms-wmdrm.meter-chlg-req": { source: "iana" }, "application/vnd.ms-wmdrm.meter-resp": { source: "iana" }, "application/vnd.ms-word.document.macroenabled.12": { source: "iana", extensions: ["docm"] }, "application/vnd.ms-word.template.macroenabled.12": { source: "iana", extensions: ["dotm"] }, "application/vnd.ms-works": { source: "iana", extensions: ["wps", "wks", "wcm", "wdb"] }, "application/vnd.ms-wpl": { source: "iana", extensions: ["wpl"] }, "application/vnd.ms-xpsdocument": { source: "iana", compressible: !1, extensions: ["xps"] }, "application/vnd.msa-disk-image": { source: "iana" }, "application/vnd.mseq": { source: "iana", extensions: ["mseq"] }, "application/vnd.msign": { source: "iana" }, "application/vnd.multiad.creator": { source: "iana" }, "application/vnd.multiad.creator.cif": { source: "iana" }, "application/vnd.music-niff": { source: "iana" }, "application/vnd.musician": { source: "iana", extensions: ["mus"] }, "application/vnd.muvee.style": { source: "iana", extensions: ["msty"] }, "application/vnd.mynfc": { source: "iana", extensions: ["taglet"] }, "application/vnd.nacamar.ybrid+json": { source: "iana", compressible: !0 }, "application/vnd.ncd.control": { source: "iana" }, "application/vnd.ncd.reference": { source: "iana" }, "application/vnd.nearst.inv+json": { source: "iana", compressible: !0 }, "application/vnd.nebumind.line": { source: "iana" }, "application/vnd.nervana": { source: "iana" }, "application/vnd.netfpx": { source: "iana" }, "application/vnd.neurolanguage.nlu": { source: "iana", extensions: ["nlu"] }, "application/vnd.nimn": { source: "iana" }, "application/vnd.nintendo.nitro.rom": { source: "iana" }, "application/vnd.nintendo.snes.rom": { source: "iana" }, "application/vnd.nitf": { source: "iana", extensions: ["ntf", "nitf"] }, "application/vnd.noblenet-directory": { source: "iana", extensions: ["nnd"] }, "application/vnd.noblenet-sealer": { source: "iana", extensions: ["nns"] }, "application/vnd.noblenet-web": { source: "iana", extensions: ["nnw"] }, "application/vnd.nokia.catalogs": { source: "iana" }, "application/vnd.nokia.conml+wbxml": { source: "iana" }, "application/vnd.nokia.conml+xml": { source: "iana", compressible: !0 }, "application/vnd.nokia.iptv.config+xml": { source: "iana", compressible: !0 }, "application/vnd.nokia.isds-radio-presets": { source: "iana" }, "application/vnd.nokia.landmark+wbxml": { source: "iana" }, "application/vnd.nokia.landmark+xml": { source: "iana", compressible: !0 }, "application/vnd.nokia.landmarkcollection+xml": { source: "iana", compressible: !0 }, "application/vnd.nokia.n-gage.ac+xml": { source: "iana", compressible: !0, extensions: ["ac"] }, "application/vnd.nokia.n-gage.data": { source: "iana", extensions: ["ngdat"] }, "application/vnd.nokia.n-gage.symbian.install": { source: "iana", extensions: ["n-gage"] }, "application/vnd.nokia.ncd": { source: "iana" }, "application/vnd.nokia.pcd+wbxml": { source: "iana" }, "application/vnd.nokia.pcd+xml": { source: "iana", compressible: !0 }, "application/vnd.nokia.radio-preset": { source: "iana", extensions: ["rpst"] }, "application/vnd.nokia.radio-presets": { source: "iana", extensions: ["rpss"] }, "application/vnd.novadigm.edm": { source: "iana", extensions: ["edm"] }, "application/vnd.novadigm.edx": { source: "iana", extensions: ["edx"] }, "application/vnd.novadigm.ext": { source: "iana", extensions: ["ext"] }, "application/vnd.ntt-local.content-share": { source: "iana" }, "application/vnd.ntt-local.file-transfer": { source: "iana" }, "application/vnd.ntt-local.ogw_remote-access": { source: "iana" }, "application/vnd.ntt-local.sip-ta_remote": { source: "iana" }, "application/vnd.ntt-local.sip-ta_tcp_stream": { source: "iana" }, "application/vnd.oasis.opendocument.chart": { source: "iana", extensions: ["odc"] }, "application/vnd.oasis.opendocument.chart-template": { source: "iana", extensions: ["otc"] }, "application/vnd.oasis.opendocument.database": { source: "iana", extensions: ["odb"] }, "application/vnd.oasis.opendocument.formula": { source: "iana", extensions: ["odf"] }, "application/vnd.oasis.opendocument.formula-template": { source: "iana", extensions: ["odft"] }, "application/vnd.oasis.opendocument.graphics": { source: "iana", compressible: !1, extensions: ["odg"] }, "application/vnd.oasis.opendocument.graphics-template": { source: "iana", extensions: ["otg"] }, "application/vnd.oasis.opendocument.image": { source: "iana", extensions: ["odi"] }, "application/vnd.oasis.opendocument.image-template": { source: "iana", extensions: ["oti"] }, "application/vnd.oasis.opendocument.presentation": { source: "iana", compressible: !1, extensions: ["odp"] }, "application/vnd.oasis.opendocument.presentation-template": { source: "iana", extensions: ["otp"] }, "application/vnd.oasis.opendocument.spreadsheet": { source: "iana", compressible: !1, extensions: ["ods"] }, "application/vnd.oasis.opendocument.spreadsheet-template": { source: "iana", extensions: ["ots"] }, "application/vnd.oasis.opendocument.text": { source: "iana", compressible: !1, extensions: ["odt"] }, "application/vnd.oasis.opendocument.text-master": { source: "iana", extensions: ["odm"] }, "application/vnd.oasis.opendocument.text-template": { source: "iana", extensions: ["ott"] }, "application/vnd.oasis.opendocument.text-web": { source: "iana", extensions: ["oth"] }, "application/vnd.obn": { source: "iana" }, "application/vnd.ocf+cbor": { source: "iana" }, "application/vnd.oci.image.manifest.v1+json": { source: "iana", compressible: !0 }, "application/vnd.oftn.l10n+json": { source: "iana", compressible: !0 }, "application/vnd.oipf.contentaccessdownload+xml": { source: "iana", compressible: !0 }, "application/vnd.oipf.contentaccessstreaming+xml": { source: "iana", compressible: !0 }, "application/vnd.oipf.cspg-hexbinary": { source: "iana" }, "application/vnd.oipf.dae.svg+xml": { source: "iana", compressible: !0 }, "application/vnd.oipf.dae.xhtml+xml": { source: "iana", compressible: !0 }, "application/vnd.oipf.mippvcontrolmessage+xml": { source: "iana", compressible: !0 }, "application/vnd.oipf.pae.gem": { source: "iana" }, "application/vnd.oipf.spdiscovery+xml": { source: "iana", compressible: !0 }, "application/vnd.oipf.spdlist+xml": { source: "iana", compressible: !0 }, "application/vnd.oipf.ueprofile+xml": { source: "iana", compressible: !0 }, "application/vnd.oipf.userprofile+xml": { source: "iana", compressible: !0 }, "application/vnd.olpc-sugar": { source: "iana", extensions: ["xo"] }, "application/vnd.oma-scws-config": { source: "iana" }, "application/vnd.oma-scws-http-request": { source: "iana" }, "application/vnd.oma-scws-http-response": { source: "iana" }, "application/vnd.oma.bcast.associated-procedure-parameter+xml": { source: "iana", compressible: !0 }, "application/vnd.oma.bcast.drm-trigger+xml": { source: "iana", compressible: !0 }, "application/vnd.oma.bcast.imd+xml": { source: "iana", compressible: !0 }, "application/vnd.oma.bcast.ltkm": { source: "iana" }, "application/vnd.oma.bcast.notification+xml": { source: "iana", compressible: !0 }, "application/vnd.oma.bcast.provisioningtrigger": { source: "iana" }, "application/vnd.oma.bcast.sgboot": { source: "iana" }, "application/vnd.oma.bcast.sgdd+xml": { source: "iana", compressible: !0 }, "application/vnd.oma.bcast.sgdu": { source: "iana" }, "application/vnd.oma.bcast.simple-symbol-container": { source: "iana" }, "application/vnd.oma.bcast.smartcard-trigger+xml": { source: "iana", compressible: !0 }, "application/vnd.oma.bcast.sprov+xml": { source: "iana", compressible: !0 }, "application/vnd.oma.bcast.stkm": { source: "iana" }, "application/vnd.oma.cab-address-book+xml": { source: "iana", compressible: !0 }, "application/vnd.oma.cab-feature-handler+xml": { source: "iana", compressible: !0 }, "application/vnd.oma.cab-pcc+xml": { source: "iana", compressible: !0 }, "application/vnd.oma.cab-subs-invite+xml": { source: "iana", compressible: !0 }, "application/vnd.oma.cab-user-prefs+xml": { source: "iana", compressible: !0 }, "application/vnd.oma.dcd": { source: "iana" }, "application/vnd.oma.dcdc": { source: "iana" }, "application/vnd.oma.dd2+xml": { source: "iana", compressible: !0, extensions: ["dd2"] }, "application/vnd.oma.drm.risd+xml": { source: "iana", compressible: !0 }, "application/vnd.oma.group-usage-list+xml": { source: "iana", compressible: !0 }, "application/vnd.oma.lwm2m+cbor": { source: "iana" }, "application/vnd.oma.lwm2m+json": { source: "iana", compressible: !0 }, "application/vnd.oma.lwm2m+tlv": { source: "iana" }, "application/vnd.oma.pal+xml": { source: "iana", compressible: !0 }, "application/vnd.oma.poc.detailed-progress-report+xml": { source: "iana", compressible: !0 }, "application/vnd.oma.poc.final-report+xml": { source: "iana", compressible: !0 }, "application/vnd.oma.poc.groups+xml": { source: "iana", compressible: !0 }, "application/vnd.oma.poc.invocation-descriptor+xml": { source: "iana", compressible: !0 }, "application/vnd.oma.poc.optimized-progress-report+xml": { source: "iana", compressible: !0 }, "application/vnd.oma.push": { source: "iana" }, "application/vnd.oma.scidm.messages+xml": { source: "iana", compressible: !0 }, "application/vnd.oma.xcap-directory+xml": { source: "iana", compressible: !0 }, "application/vnd.omads-email+xml": { source: "iana", charset: "UTF-8", compressible: !0 }, "application/vnd.omads-file+xml": { source: "iana", charset: "UTF-8", compressible: !0 }, "application/vnd.omads-folder+xml": { source: "iana", charset: "UTF-8", compressible: !0 }, "application/vnd.omaloc-supl-init": { source: "iana" }, "application/vnd.onepager": { source: "iana" }, "application/vnd.onepagertamp": { source: "iana" }, "application/vnd.onepagertamx": { source: "iana" }, "application/vnd.onepagertat": { source: "iana" }, "application/vnd.onepagertatp": { source: "iana" }, "application/vnd.onepagertatx": { source: "iana" }, "application/vnd.openblox.game+xml": { source: "iana", compressible: !0, extensions: ["obgx"] }, "application/vnd.openblox.game-binary": { source: "iana" }, "application/vnd.openeye.oeb": { source: "iana" }, "application/vnd.openofficeorg.extension": { source: "apache", extensions: ["oxt"] }, "application/vnd.openstreetmap.data+xml": { source: "iana", compressible: !0, extensions: ["osm"] }, "application/vnd.opentimestamps.ots": { source: "iana" }, "application/vnd.openxmlformats-officedocument.custom-properties+xml": { source: "iana", compressible: !0 }, "application/vnd.openxmlformats-officedocument.customxmlproperties+xml": { source: "iana", compressible: !0 }, "application/vnd.openxmlformats-officedocument.drawing+xml": { source: "iana", compressible: !0 }, "application/vnd.openxmlformats-officedocument.drawingml.chart+xml": { source: "iana", compressible: !0 }, "application/vnd.openxmlformats-officedocument.drawingml.chartshapes+xml": { source: "iana", compressible: !0 }, "application/vnd.openxmlformats-officedocument.drawingml.diagramcolors+xml": { source: "iana", compressible: !0 }, "application/vnd.openxmlformats-officedocument.drawingml.diagramdata+xml": { source: "iana", compressible: !0 }, "application/vnd.openxmlformats-officedocument.drawingml.diagramlayout+xml": { source: "iana", compressible: !0 }, "application/vnd.openxmlformats-officedocument.drawingml.diagramstyle+xml": { source: "iana", compressible: !0 }, "application/vnd.openxmlformats-officedocument.extended-properties+xml": { source: "iana", compressible: !0 }, "application/vnd.openxmlformats-officedocument.presentationml.commentauthors+xml": { source: "iana", compressible: !0 }, "application/vnd.openxmlformats-officedocument.presentationml.comments+xml": { source: "iana", compressible: !0 }, "application/vnd.openxmlformats-officedocument.presentationml.handoutmaster+xml": { source: "iana", compressible: !0 }, "application/vnd.openxmlformats-officedocument.presentationml.notesmaster+xml": { source: "iana", compressible: !0 }, "application/vnd.openxmlformats-officedocument.presentationml.notesslide+xml": { source: "iana", compressible: !0 }, "application/vnd.openxmlformats-officedocument.presentationml.presentation": { source: "iana", compressible: !1, extensions: ["pptx"] }, "application/vnd.openxmlformats-officedocument.presentationml.presentation.main+xml": { source: "iana", compressible: !0 }, "application/vnd.openxmlformats-officedocument.presentationml.presprops+xml": { source: "iana", compressible: !0 }, "application/vnd.openxmlformats-officedocument.presentationml.slide": { source: "iana", extensions: ["sldx"] }, "application/vnd.openxmlformats-officedocument.presentationml.slide+xml": { source: "iana", compressible: !0 }, "application/vnd.openxmlformats-officedocument.presentationml.slidelayout+xml": { source: "iana", compressible: !0 }, "application/vnd.openxmlformats-officedocument.presentationml.slidemaster+xml": { source: "iana", compressible: !0 }, "application/vnd.openxmlformats-officedocument.presentationml.slideshow": { source: "iana", extensions: ["ppsx"] }, "application/vnd.openxmlformats-officedocument.presentationml.slideshow.main+xml": { source: "iana", compressible: !0 }, "application/vnd.openxmlformats-officedocument.presentationml.slideupdateinfo+xml": { source: "iana", compressible: !0 }, "application/vnd.openxmlformats-officedocument.presentationml.tablestyles+xml": { source: "iana", compressible: !0 }, "application/vnd.openxmlformats-officedocument.presentationml.tags+xml": { source: "iana", compressible: !0 }, "application/vnd.openxmlformats-officedocument.presentationml.template": { source: "iana", extensions: ["potx"] }, "application/vnd.openxmlformats-officedocument.presentationml.template.main+xml": { source: "iana", compressible: !0 }, "application/vnd.openxmlformats-officedocument.presentationml.viewprops+xml": { source: "iana", compressible: !0 }, "application/vnd.openxmlformats-officedocument.spreadsheetml.calcchain+xml": { source: "iana", compressible: !0 }, "application/vnd.openxmlformats-officedocument.spreadsheetml.chartsheet+xml": { source: "iana", compressible: !0 }, "application/vnd.openxmlformats-officedocument.spreadsheetml.comments+xml": { source: "iana", compressible: !0 }, "application/vnd.openxmlformats-officedocument.spreadsheetml.connections+xml": { source: "iana", compressible: !0 }, "application/vnd.openxmlformats-officedocument.spreadsheetml.dialogsheet+xml": { source: "iana", compressible: !0 }, "application/vnd.openxmlformats-officedocument.spreadsheetml.externallink+xml": { source: "iana", compressible: !0 }, "application/vnd.openxmlformats-officedocument.spreadsheetml.pivotcachedefinition+xml": { source: "iana", compressible: !0 }, "application/vnd.openxmlformats-officedocument.spreadsheetml.pivotcacherecords+xml": { source: "iana", compressible: !0 }, "application/vnd.openxmlformats-officedocument.spreadsheetml.pivottable+xml": { source: "iana", compressible: !0 }, "application/vnd.openxmlformats-officedocument.spreadsheetml.querytable+xml": { source: "iana", compressible: !0 }, "application/vnd.openxmlformats-officedocument.spreadsheetml.revisionheaders+xml": { source: "iana", compressible: !0 }, "application/vnd.openxmlformats-officedocument.spreadsheetml.revisionlog+xml": { source: "iana", compressible: !0 }, "application/vnd.openxmlformats-officedocument.spreadsheetml.sharedstrings+xml": { source: "iana", compressible: !0 }, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet": { source: "iana", compressible: !1, extensions: ["xlsx"] }, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml": { source: "iana", compressible: !0 }, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheetmetadata+xml": { source: "iana", compressible: !0 }, "application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml": { source: "iana", compressible: !0 }, "application/vnd.openxmlformats-officedocument.spreadsheetml.table+xml": { source: "iana", compressible: !0 }, "application/vnd.openxmlformats-officedocument.spreadsheetml.tablesinglecells+xml": { source: "iana", compressible: !0 }, "application/vnd.openxmlformats-officedocument.spreadsheetml.template": { source: "iana", extensions: ["xltx"] }, "application/vnd.openxmlformats-officedocument.spreadsheetml.template.main+xml": { source: "iana", compressible: !0 }, "application/vnd.openxmlformats-officedocument.spreadsheetml.usernames+xml": { source: "iana", compressible: !0 }, "application/vnd.openxmlformats-officedocument.spreadsheetml.volatiledependencies+xml": { source: "iana", compressible: !0 }, "application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml": { source: "iana", compressible: !0 }, "application/vnd.openxmlformats-officedocument.theme+xml": { source: "iana", compressible: !0 }, "application/vnd.openxmlformats-officedocument.themeoverride+xml": { source: "iana", compressible: !0 }, "application/vnd.openxmlformats-officedocument.vmldrawing": { source: "iana" }, "application/vnd.openxmlformats-officedocument.wordprocessingml.comments+xml": { source: "iana", compressible: !0 }, "application/vnd.openxmlformats-officedocument.wordprocessingml.document": { source: "iana", compressible: !1, extensions: ["docx"] }, "application/vnd.openxmlformats-officedocument.wordprocessingml.document.glossary+xml": { source: "iana", compressible: !0 }, "application/vnd.openxmlformats-officedocument.wordprocessingml.document.main+xml": { source: "iana", compressible: !0 }, "application/vnd.openxmlformats-officedocument.wordprocessingml.endnotes+xml": { source: "iana", compressible: !0 }, "application/vnd.openxmlformats-officedocument.wordprocessingml.fonttable+xml": { source: "iana", compressible: !0 }, "application/vnd.openxmlformats-officedocument.wordprocessingml.footer+xml": { source: "iana", compressible: !0 }, "application/vnd.openxmlformats-officedocument.wordprocessingml.footnotes+xml": { source: "iana", compressible: !0 }, "application/vnd.openxmlformats-officedocument.wordprocessingml.numbering+xml": { source: "iana", compressible: !0 }, "application/vnd.openxmlformats-officedocument.wordprocessingml.settings+xml": { source: "iana", compressible: !0 }, "application/vnd.openxmlformats-officedocument.wordprocessingml.styles+xml": { source: "iana", compressible: !0 }, "application/vnd.openxmlformats-officedocument.wordprocessingml.template": { source: "iana", extensions: ["dotx"] }, "application/vnd.openxmlformats-officedocument.wordprocessingml.template.main+xml": { source: "iana", compressible: !0 }, "application/vnd.openxmlformats-officedocument.wordprocessingml.websettings+xml": { source: "iana", compressible: !0 }, "application/vnd.openxmlformats-package.core-properties+xml": { source: "iana", compressible: !0 }, "application/vnd.openxmlformats-package.digital-signature-xmlsignature+xml": { source: "iana", compressible: !0 }, "application/vnd.openxmlformats-package.relationships+xml": { source: "iana", compressible: !0 }, "application/vnd.oracle.resource+json": { source: "iana", compressible: !0 }, "application/vnd.orange.indata": { source: "iana" }, "application/vnd.osa.netdeploy": { source: "iana" }, "application/vnd.osgeo.mapguide.package": { source: "iana", extensions: ["mgp"] }, "application/vnd.osgi.bundle": { source: "iana" }, "application/vnd.osgi.dp": { source: "iana", extensions: ["dp"] }, "application/vnd.osgi.subsystem": { source: "iana", extensions: ["esa"] }, "application/vnd.otps.ct-kip+xml": { source: "iana", compressible: !0 }, "application/vnd.oxli.countgraph": { source: "iana" }, "application/vnd.pagerduty+json": { source: "iana", compressible: !0 }, "application/vnd.palm": { source: "iana", extensions: ["pdb", "pqa", "oprc"] }, "application/vnd.panoply": { source: "iana" }, "application/vnd.paos.xml": { source: "iana" }, "application/vnd.patentdive": { source: "iana" }, "application/vnd.patientecommsdoc": { source: "iana" }, "application/vnd.pawaafile": { source: "iana", extensions: ["paw"] }, "application/vnd.pcos": { source: "iana" }, "application/vnd.pg.format": { source: "iana", extensions: ["str"] }, "application/vnd.pg.osasli": { source: "iana", extensions: ["ei6"] }, "application/vnd.piaccess.application-licence": { source: "iana" }, "application/vnd.picsel": { source: "iana", extensions: ["efif"] }, "application/vnd.pmi.widget": { source: "iana", extensions: ["wg"] }, "application/vnd.poc.group-advertisement+xml": { source: "iana", compressible: !0 }, "application/vnd.pocketlearn": { source: "iana", extensions: ["plf"] }, "application/vnd.powerbuilder6": { source: "iana", extensions: ["pbd"] }, "application/vnd.powerbuilder6-s": { source: "iana" }, "application/vnd.powerbuilder7": { source: "iana" }, "application/vnd.powerbuilder7-s": { source: "iana" }, "application/vnd.powerbuilder75": { source: "iana" }, "application/vnd.powerbuilder75-s": { source: "iana" }, "application/vnd.preminet": { source: "iana" }, "application/vnd.previewsystems.box": { source: "iana", extensions: ["box"] }, "application/vnd.proteus.magazine": { source: "iana", extensions: ["mgz"] }, "application/vnd.psfs": { source: "iana" }, "application/vnd.publishare-delta-tree": { source: "iana", extensions: ["qps"] }, "application/vnd.pvi.ptid1": { source: "iana", extensions: ["ptid"] }, "application/vnd.pwg-multiplexed": { source: "iana" }, "application/vnd.pwg-xhtml-print+xml": { source: "iana", compressible: !0 }, "application/vnd.qualcomm.brew-app-res": { source: "iana" }, "application/vnd.quarantainenet": { source: "iana" }, "application/vnd.quark.quarkxpress": { source: "iana", extensions: ["qxd", "qxt", "qwd", "qwt", "qxl", "qxb"] }, "application/vnd.quobject-quoxdocument": { source: "iana" }, "application/vnd.radisys.moml+xml": { source: "iana", compressible: !0 }, "application/vnd.radisys.msml+xml": { source: "iana", compressible: !0 }, "application/vnd.radisys.msml-audit+xml": { source: "iana", compressible: !0 }, "application/vnd.radisys.msml-audit-conf+xml": { source: "iana", compressible: !0 }, "application/vnd.radisys.msml-audit-conn+xml": { source: "iana", compressible: !0 }, "application/vnd.radisys.msml-audit-dialog+xml": { source: "iana", compressible: !0 }, "application/vnd.radisys.msml-audit-stream+xml": { source: "iana", compressible: !0 }, "application/vnd.radisys.msml-conf+xml": { source: "iana", compressible: !0 }, "application/vnd.radisys.msml-dialog+xml": { source: "iana", compressible: !0 }, "application/vnd.radisys.msml-dialog-base+xml": { source: "iana", compressible: !0 }, "application/vnd.radisys.msml-dialog-fax-detect+xml": { source: "iana", compressible: !0 }, "application/vnd.radisys.msml-dialog-fax-sendrecv+xml": { source: "iana", compressible: !0 }, "application/vnd.radisys.msml-dialog-group+xml": { source: "iana", compressible: !0 }, "application/vnd.radisys.msml-dialog-speech+xml": { source: "iana", compressible: !0 }, "application/vnd.radisys.msml-dialog-transform+xml": { source: "iana", compressible: !0 }, "application/vnd.rainstor.data": { source: "iana" }, "application/vnd.rapid": { source: "iana" }, "application/vnd.rar": { source: "iana", extensions: ["rar"] }, "application/vnd.realvnc.bed": { source: "iana", extensions: ["bed"] }, "application/vnd.recordare.musicxml": { source: "iana", extensions: ["mxl"] }, "application/vnd.recordare.musicxml+xml": { source: "iana", compressible: !0, extensions: ["musicxml"] }, "application/vnd.renlearn.rlprint": { source: "iana" }, "application/vnd.resilient.logic": { source: "iana" }, "application/vnd.restful+json": { source: "iana", compressible: !0 }, "application/vnd.rig.cryptonote": { source: "iana", extensions: ["cryptonote"] }, "application/vnd.rim.cod": { source: "apache", extensions: ["cod"] }, "application/vnd.rn-realmedia": { source: "apache", extensions: ["rm"] }, "application/vnd.rn-realmedia-vbr": { source: "apache", extensions: ["rmvb"] }, "application/vnd.route66.link66+xml": { source: "iana", compressible: !0, extensions: ["link66"] }, "application/vnd.rs-274x": { source: "iana" }, "application/vnd.ruckus.download": { source: "iana" }, "application/vnd.s3sms": { source: "iana" }, "application/vnd.sailingtracker.track": { source: "iana", extensions: ["st"] }, "application/vnd.sar": { source: "iana" }, "application/vnd.sbm.cid": { source: "iana" }, "application/vnd.sbm.mid2": { source: "iana" }, "application/vnd.scribus": { source: "iana" }, "application/vnd.sealed.3df": { source: "iana" }, "application/vnd.sealed.csf": { source: "iana" }, "application/vnd.sealed.doc": { source: "iana" }, "application/vnd.sealed.eml": { source: "iana" }, "application/vnd.sealed.mht": { source: "iana" }, "application/vnd.sealed.net": { source: "iana" }, "application/vnd.sealed.ppt": { source: "iana" }, "application/vnd.sealed.tiff": { source: "iana" }, "application/vnd.sealed.xls": { source: "iana" }, "application/vnd.sealedmedia.softseal.html": { source: "iana" }, "application/vnd.sealedmedia.softseal.pdf": { source: "iana" }, "application/vnd.seemail": { source: "iana", extensions: ["see"] }, "application/vnd.seis+json": { source: "iana", compressible: !0 }, "application/vnd.sema": { source: "iana", extensions: ["sema"] }, "application/vnd.semd": { source: "iana", extensions: ["semd"] }, "application/vnd.semf": { source: "iana", extensions: ["semf"] }, "application/vnd.shade-save-file": { source: "iana" }, "application/vnd.shana.informed.formdata": { source: "iana", extensions: ["ifm"] }, "application/vnd.shana.informed.formtemplate": { source: "iana", extensions: ["itp"] }, "application/vnd.shana.informed.interchange": { source: "iana", extensions: ["iif"] }, "application/vnd.shana.informed.package": { source: "iana", extensions: ["ipk"] }, "application/vnd.shootproof+json": { source: "iana", compressible: !0 }, "application/vnd.shopkick+json": { source: "iana", compressible: !0 }, "application/vnd.shp": { source: "iana" }, "application/vnd.shx": { source: "iana" }, "application/vnd.sigrok.session": { source: "iana" }, "application/vnd.simtech-mindmapper": { source: "iana", extensions: ["twd", "twds"] }, "application/vnd.siren+json": { source: "iana", compressible: !0 }, "application/vnd.smaf": { source: "iana", extensions: ["mmf"] }, "application/vnd.smart.notebook": { source: "iana" }, "application/vnd.smart.teacher": { source: "iana", extensions: ["teacher"] }, "application/vnd.snesdev-page-table": { source: "iana" }, "application/vnd.software602.filler.form+xml": { source: "iana", compressible: !0, extensions: ["fo"] }, "application/vnd.software602.filler.form-xml-zip": { source: "iana" }, "application/vnd.solent.sdkm+xml": { source: "iana", compressible: !0, extensions: ["sdkm", "sdkd"] }, "application/vnd.spotfire.dxp": { source: "iana", extensions: ["dxp"] }, "application/vnd.spotfire.sfs": { source: "iana", extensions: ["sfs"] }, "application/vnd.sqlite3": { source: "iana" }, "application/vnd.sss-cod": { source: "iana" }, "application/vnd.sss-dtf": { source: "iana" }, "application/vnd.sss-ntf": { source: "iana" }, "application/vnd.stardivision.calc": { source: "apache", extensions: ["sdc"] }, "application/vnd.stardivision.draw": { source: "apache", extensions: ["sda"] }, "application/vnd.stardivision.impress": { source: "apache", extensions: ["sdd"] }, "application/vnd.stardivision.math": { source: "apache", extensions: ["smf"] }, "application/vnd.stardivision.writer": { source: "apache", extensions: ["sdw", "vor"] }, "application/vnd.stardivision.writer-global": { source: "apache", extensions: ["sgl"] }, "application/vnd.stepmania.package": { source: "iana", extensions: ["smzip"] }, "application/vnd.stepmania.stepchart": { source: "iana", extensions: ["sm"] }, "application/vnd.street-stream": { source: "iana" }, "application/vnd.sun.wadl+xml": { source: "iana", compressible: !0, extensions: ["wadl"] }, "application/vnd.sun.xml.calc": { source: "apache", extensions: ["sxc"] }, "application/vnd.sun.xml.calc.template": { source: "apache", extensions: ["stc"] }, "application/vnd.sun.xml.draw": { source: "apache", extensions: ["sxd"] }, "application/vnd.sun.xml.draw.template": { source: "apache", extensions: ["std"] }, "application/vnd.sun.xml.impress": { source: "apache", extensions: ["sxi"] }, "application/vnd.sun.xml.impress.template": { source: "apache", extensions: ["sti"] }, "application/vnd.sun.xml.math": { source: "apache", extensions: ["sxm"] }, "application/vnd.sun.xml.writer": { source: "apache", extensions: ["sxw"] }, "application/vnd.sun.xml.writer.global": { source: "apache", extensions: ["sxg"] }, "application/vnd.sun.xml.writer.template": { source: "apache", extensions: ["stw"] }, "application/vnd.sus-calendar": { source: "iana", extensions: ["sus", "susp"] }, "application/vnd.svd": { source: "iana", extensions: ["svd"] }, "application/vnd.swiftview-ics": { source: "iana" }, "application/vnd.sycle+xml": { source: "iana", compressible: !0 }, "application/vnd.syft+json": { source: "iana", compressible: !0 }, "application/vnd.symbian.install": { source: "apache", extensions: ["sis", "sisx"] }, "application/vnd.syncml+xml": { source: "iana", charset: "UTF-8", compressible: !0, extensions: ["xsm"] }, "application/vnd.syncml.dm+wbxml": { source: "iana", charset: "UTF-8", extensions: ["bdm"] }, "application/vnd.syncml.dm+xml": { source: "iana", charset: "UTF-8", compressible: !0, extensions: ["xdm"] }, "application/vnd.syncml.dm.notification": { source: "iana" }, "application/vnd.syncml.dmddf+wbxml": { source: "iana" }, "application/vnd.syncml.dmddf+xml": { source: "iana", charset: "UTF-8", compressible: !0, extensions: ["ddf"] }, "application/vnd.syncml.dmtnds+wbxml": { source: "iana" }, "application/vnd.syncml.dmtnds+xml": { source: "iana", charset: "UTF-8", compressible: !0 }, "application/vnd.syncml.ds.notification": { source: "iana" }, "application/vnd.tableschema+json": { source: "iana", compressible: !0 }, "application/vnd.tao.intent-module-archive": { source: "iana", extensions: ["tao"] }, "application/vnd.tcpdump.pcap": { source: "iana", extensions: ["pcap", "cap", "dmp"] }, "application/vnd.think-cell.ppttc+json": { source: "iana", compressible: !0 }, "application/vnd.tmd.mediaflex.api+xml": { source: "iana", compressible: !0 }, "application/vnd.tml": { source: "iana" }, "application/vnd.tmobile-livetv": { source: "iana", extensions: ["tmo"] }, "application/vnd.tri.onesource": { source: "iana" }, "application/vnd.trid.tpt": { source: "iana", extensions: ["tpt"] }, "application/vnd.triscape.mxs": { source: "iana", extensions: ["mxs"] }, "application/vnd.trueapp": { source: "iana", extensions: ["tra"] }, "application/vnd.truedoc": { source: "iana" }, "application/vnd.ubisoft.webplayer": { source: "iana" }, "application/vnd.ufdl": { source: "iana", extensions: ["ufd", "ufdl"] }, "application/vnd.uiq.theme": { source: "iana", extensions: ["utz"] }, "application/vnd.umajin": { source: "iana", extensions: ["umj"] }, "application/vnd.unity": { source: "iana", extensions: ["unityweb"] }, "application/vnd.uoml+xml": { source: "iana", compressible: !0, extensions: ["uoml"] }, "application/vnd.uplanet.alert": { source: "iana" }, "application/vnd.uplanet.alert-wbxml": { source: "iana" }, "application/vnd.uplanet.bearer-choice": { source: "iana" }, "application/vnd.uplanet.bearer-choice-wbxml": { source: "iana" }, "application/vnd.uplanet.cacheop": { source: "iana" }, "application/vnd.uplanet.cacheop-wbxml": { source: "iana" }, "application/vnd.uplanet.channel": { source: "iana" }, "application/vnd.uplanet.channel-wbxml": { source: "iana" }, "application/vnd.uplanet.list": { source: "iana" }, "application/vnd.uplanet.list-wbxml": { source: "iana" }, "application/vnd.uplanet.listcmd": { source: "iana" }, "application/vnd.uplanet.listcmd-wbxml": { source: "iana" }, "application/vnd.uplanet.signal": { source: "iana" }, "application/vnd.uri-map": { source: "iana" }, "application/vnd.valve.source.material": { source: "iana" }, "application/vnd.vcx": { source: "iana", extensions: ["vcx"] }, "application/vnd.vd-study": { source: "iana" }, "application/vnd.vectorworks": { source: "iana" }, "application/vnd.vel+json": { source: "iana", compressible: !0 }, "application/vnd.verimatrix.vcas": { source: "iana" }, "application/vnd.veritone.aion+json": { source: "iana", compressible: !0 }, "application/vnd.veryant.thin": { source: "iana" }, "application/vnd.ves.encrypted": { source: "iana" }, "application/vnd.vidsoft.vidconference": { source: "iana" }, "application/vnd.visio": { source: "iana", extensions: ["vsd", "vst", "vss", "vsw"] }, "application/vnd.visionary": { source: "iana", extensions: ["vis"] }, "application/vnd.vividence.scriptfile": { source: "iana" }, "application/vnd.vsf": { source: "iana", extensions: ["vsf"] }, "application/vnd.wap.sic": { source: "iana" }, "application/vnd.wap.slc": { source: "iana" }, "application/vnd.wap.wbxml": { source: "iana", charset: "UTF-8", extensions: ["wbxml"] }, "application/vnd.wap.wmlc": { source: "iana", extensions: ["wmlc"] }, "application/vnd.wap.wmlscriptc": { source: "iana", extensions: ["wmlsc"] }, "application/vnd.webturbo": { source: "iana", extensions: ["wtb"] }, "application/vnd.wfa.dpp": { source: "iana" }, "application/vnd.wfa.p2p": { source: "iana" }, "application/vnd.wfa.wsc": { source: "iana" }, "application/vnd.windows.devicepairing": { source: "iana" }, "application/vnd.wmc": { source: "iana" }, "application/vnd.wmf.bootstrap": { source: "iana" }, "application/vnd.wolfram.mathematica": { source: "iana" }, "application/vnd.wolfram.mathematica.package": { source: "iana" }, "application/vnd.wolfram.player": { source: "iana", extensions: ["nbp"] }, "application/vnd.wordperfect": { source: "iana", extensions: ["wpd"] }, "application/vnd.wqd": { source: "iana", extensions: ["wqd"] }, "application/vnd.wrq-hp3000-labelled": { source: "iana" }, "application/vnd.wt.stf": { source: "iana", extensions: ["stf"] }, "application/vnd.wv.csp+wbxml": { source: "iana" }, "application/vnd.wv.csp+xml": { source: "iana", compressible: !0 }, "application/vnd.wv.ssp+xml": { source: "iana", compressible: !0 }, "application/vnd.xacml+json": { source: "iana", compressible: !0 }, "application/vnd.xara": { source: "iana", extensions: ["xar"] }, "application/vnd.xfdl": { source: "iana", extensions: ["xfdl"] }, "application/vnd.xfdl.webform": { source: "iana" }, "application/vnd.xmi+xml": { source: "iana", compressible: !0 }, "application/vnd.xmpie.cpkg": { source: "iana" }, "application/vnd.xmpie.dpkg": { source: "iana" }, "application/vnd.xmpie.plan": { source: "iana" }, "application/vnd.xmpie.ppkg": { source: "iana" }, "application/vnd.xmpie.xlim": { source: "iana" }, "application/vnd.yamaha.hv-dic": { source: "iana", extensions: ["hvd"] }, "application/vnd.yamaha.hv-script": { source: "iana", extensions: ["hvs"] }, "application/vnd.yamaha.hv-voice": { source: "iana", extensions: ["hvp"] }, "application/vnd.yamaha.openscoreformat": { source: "iana", extensions: ["osf"] }, "application/vnd.yamaha.openscoreformat.osfpvg+xml": { source: "iana", compressible: !0, extensions: ["osfpvg"] }, "application/vnd.yamaha.remote-setup": { source: "iana" }, "application/vnd.yamaha.smaf-audio": { source: "iana", extensions: ["saf"] }, "application/vnd.yamaha.smaf-phrase": { source: "iana", extensions: ["spf"] }, "application/vnd.yamaha.through-ngn": { source: "iana" }, "application/vnd.yamaha.tunnel-udpencap": { source: "iana" }, "application/vnd.yaoweme": { source: "iana" }, "application/vnd.yellowriver-custom-menu": { source: "iana", extensions: ["cmp"] }, "application/vnd.youtube.yt": { source: "iana" }, "application/vnd.zul": { source: "iana", extensions: ["zir", "zirz"] }, "application/vnd.zzazz.deck+xml": { source: "iana", compressible: !0, extensions: ["zaz"] }, "application/voicexml+xml": { source: "iana", compressible: !0, extensions: ["vxml"] }, "application/voucher-cms+json": { source: "iana", compressible: !0 }, "application/vq-rtcpxr": { source: "iana" }, "application/wasm": { source: "iana", compressible: !0, extensions: ["wasm"] }, "application/watcherinfo+xml": { source: "iana", compressible: !0, extensions: ["wif"] }, "application/webpush-options+json": { source: "iana", compressible: !0 }, "application/whoispp-query": { source: "iana" }, "application/whoispp-response": { source: "iana" }, "application/widget": { source: "iana", extensions: ["wgt"] }, "application/winhlp": { source: "apache", extensions: ["hlp"] }, "application/wita": { source: "iana" }, "application/wordperfect5.1": { source: "iana" }, "application/wsdl+xml": { source: "iana", compressible: !0, extensions: ["wsdl"] }, "application/wspolicy+xml": { source: "iana", compressible: !0, extensions: ["wspolicy"] }, "application/x-7z-compressed": { source: "apache", compressible: !1, extensions: ["7z"] }, "application/x-abiword": { source: "apache", extensions: ["abw"] }, "application/x-ace-compressed": { source: "apache", extensions: ["ace"] }, "application/x-amf": { source: "apache" }, "application/x-apple-diskimage": { source: "apache", extensions: ["dmg"] }, "application/x-arj": { compressible: !1, extensions: ["arj"] }, "application/x-authorware-bin": { source: "apache", extensions: ["aab", "x32", "u32", "vox"] }, "application/x-authorware-map": { source: "apache", extensions: ["aam"] }, "application/x-authorware-seg": { source: "apache", extensions: ["aas"] }, "application/x-bcpio": { source: "apache", extensions: ["bcpio"] }, "application/x-bdoc": { compressible: !1, extensions: ["bdoc"] }, "application/x-bittorrent": { source: "apache", extensions: ["torrent"] }, "application/x-blorb": { source: "apache", extensions: ["blb", "blorb"] }, "application/x-bzip": { source: "apache", compressible: !1, extensions: ["bz"] }, "application/x-bzip2": { source: "apache", compressible: !1, extensions: ["bz2", "boz"] }, "application/x-cbr": { source: "apache", extensions: ["cbr", "cba", "cbt", "cbz", "cb7"] }, "application/x-cdlink": { source: "apache", extensions: ["vcd"] }, "application/x-cfs-compressed": { source: "apache", extensions: ["cfs"] }, "application/x-chat": { source: "apache", extensions: ["chat"] }, "application/x-chess-pgn": { source: "apache", extensions: ["pgn"] }, "application/x-chrome-extension": { extensions: ["crx"] }, "application/x-cocoa": { source: "nginx", extensions: ["cco"] }, "application/x-compress": { source: "apache" }, "application/x-conference": { source: "apache", extensions: ["nsc"] }, "application/x-cpio": { source: "apache", extensions: ["cpio"] }, "application/x-csh": { source: "apache", extensions: ["csh"] }, "application/x-deb": { compressible: !1 }, "application/x-debian-package": { source: "apache", extensions: ["deb", "udeb"] }, "application/x-dgc-compressed": { source: "apache", extensions: ["dgc"] }, "application/x-director": { source: "apache", extensions: ["dir", "dcr", "dxr", "cst", "cct", "cxt", "w3d", "fgd", "swa"] }, "application/x-doom": { source: "apache", extensions: ["wad"] }, "application/x-dtbncx+xml": { source: "apache", compressible: !0, extensions: ["ncx"] }, "application/x-dtbook+xml": { source: "apache", compressible: !0, extensions: ["dtb"] }, "application/x-dtbresource+xml": { source: "apache", compressible: !0, extensions: ["res"] }, "application/x-dvi": { source: "apache", compressible: !1, extensions: ["dvi"] }, "application/x-envoy": { source: "apache", extensions: ["evy"] }, "application/x-eva": { source: "apache", extensions: ["eva"] }, "application/x-font-bdf": { source: "apache", extensions: ["bdf"] }, "application/x-font-dos": { source: "apache" }, "application/x-font-framemaker": { source: "apache" }, "application/x-font-ghostscript": { source: "apache", extensions: ["gsf"] }, "application/x-font-libgrx": { source: "apache" }, "application/x-font-linux-psf": { source: "apache", extensions: ["psf"] }, "application/x-font-pcf": { source: "apache", extensions: ["pcf"] }, "application/x-font-snf": { source: "apache", extensions: ["snf"] }, "application/x-font-speedo": { source: "apache" }, "application/x-font-sunos-news": { source: "apache" }, "application/x-font-type1": { source: "apache", extensions: ["pfa", "pfb", "pfm", "afm"] }, "application/x-font-vfont": { source: "apache" }, "application/x-freearc": { source: "apache", extensions: ["arc"] }, "application/x-futuresplash": { source: "apache", extensions: ["spl"] }, "application/x-gca-compressed": { source: "apache", extensions: ["gca"] }, "application/x-glulx": { source: "apache", extensions: ["ulx"] }, "application/x-gnumeric": { source: "apache", extensions: ["gnumeric"] }, "application/x-gramps-xml": { source: "apache", extensions: ["gramps"] }, "application/x-gtar": { source: "apache", extensions: ["gtar"] }, "application/x-gzip": { source: "apache" }, "application/x-hdf": { source: "apache", extensions: ["hdf"] }, "application/x-httpd-php": { compressible: !0, extensions: ["php"] }, "application/x-install-instructions": { source: "apache", extensions: ["install"] }, "application/x-iso9660-image": { source: "apache", extensions: ["iso"] }, "application/x-iwork-keynote-sffkey": { extensions: ["key"] }, "application/x-iwork-numbers-sffnumbers": { extensions: ["numbers"] }, "application/x-iwork-pages-sffpages": { extensions: ["pages"] }, "application/x-java-archive-diff": { source: "nginx", extensions: ["jardiff"] }, "application/x-java-jnlp-file": { source: "apache", compressible: !1, extensions: ["jnlp"] }, "application/x-javascript": { compressible: !0 }, "application/x-keepass2": { extensions: ["kdbx"] }, "application/x-latex": { source: "apache", compressible: !1, extensions: ["latex"] }, "application/x-lua-bytecode": { extensions: ["luac"] }, "application/x-lzh-compressed": { source: "apache", extensions: ["lzh", "lha"] }, "application/x-makeself": { source: "nginx", extensions: ["run"] }, "application/x-mie": { source: "apache", extensions: ["mie"] }, "application/x-mobipocket-ebook": { source: "apache", extensions: ["prc", "mobi"] }, "application/x-mpegurl": { compressible: !1 }, "application/x-ms-application": { source: "apache", extensions: ["application"] }, "application/x-ms-shortcut": { source: "apache", extensions: ["lnk"] }, "application/x-ms-wmd": { source: "apache", extensions: ["wmd"] }, "application/x-ms-wmz": { source: "apache", extensions: ["wmz"] }, "application/x-ms-xbap": { source: "apache", extensions: ["xbap"] }, "application/x-msaccess": { source: "apache", extensions: ["mdb"] }, "application/x-msbinder": { source: "apache", extensions: ["obd"] }, "application/x-mscardfile": { source: "apache", extensions: ["crd"] }, "application/x-msclip": { source: "apache", extensions: ["clp"] }, "application/x-msdos-program": { extensions: ["exe"] }, "application/x-msdownload": { source: "apache", extensions: ["exe", "dll", "com", "bat", "msi"] }, "application/x-msmediaview": { source: "apache", extensions: ["mvb", "m13", "m14"] }, "application/x-msmetafile": { source: "apache", extensions: ["wmf", "wmz", "emf", "emz"] }, "application/x-msmoney": { source: "apache", extensions: ["mny"] }, "application/x-mspublisher": { source: "apache", extensions: ["pub"] }, "application/x-msschedule": { source: "apache", extensions: ["scd"] }, "application/x-msterminal": { source: "apache", extensions: ["trm"] }, "application/x-mswrite": { source: "apache", extensions: ["wri"] }, "application/x-netcdf": { source: "apache", extensions: ["nc", "cdf"] }, "application/x-ns-proxy-autoconfig": { compressible: !0, extensions: ["pac"] }, "application/x-nzb": { source: "apache", extensions: ["nzb"] }, "application/x-perl": { source: "nginx", extensions: ["pl", "pm"] }, "application/x-pilot": { source: "nginx", extensions: ["prc", "pdb"] }, "application/x-pkcs12": { source: "apache", compressible: !1, extensions: ["p12", "pfx"] }, "application/x-pkcs7-certificates": { source: "apache", extensions: ["p7b", "spc"] }, "application/x-pkcs7-certreqresp": { source: "apache", extensions: ["p7r"] }, "application/x-pki-message": { source: "iana" }, "application/x-rar-compressed": { source: "apache", compressible: !1, extensions: ["rar"] }, "application/x-redhat-package-manager": { source: "nginx", extensions: ["rpm"] }, "application/x-research-info-systems": { source: "apache", extensions: ["ris"] }, "application/x-sea": { source: "nginx", extensions: ["sea"] }, "application/x-sh": { source: "apache", compressible: !0, extensions: ["sh"] }, "application/x-shar": { source: "apache", extensions: ["shar"] }, "application/x-shockwave-flash": { source: "apache", compressible: !1, extensions: ["swf"] }, "application/x-silverlight-app": { source: "apache", extensions: ["xap"] }, "application/x-sql": { source: "apache", extensions: ["sql"] }, "application/x-stuffit": { source: "apache", compressible: !1, extensions: ["sit"] }, "application/x-stuffitx": { source: "apache", extensions: ["sitx"] }, "application/x-subrip": { source: "apache", extensions: ["srt"] }, "application/x-sv4cpio": { source: "apache", extensions: ["sv4cpio"] }, "application/x-sv4crc": { source: "apache", extensions: ["sv4crc"] }, "application/x-t3vm-image": { source: "apache", extensions: ["t3"] }, "application/x-tads": { source: "apache", extensions: ["gam"] }, "application/x-tar": { source: "apache", compressible: !0, extensions: ["tar"] }, "application/x-tcl": { source: "apache", extensions: ["tcl", "tk"] }, "application/x-tex": { source: "apache", extensions: ["tex"] }, "application/x-tex-tfm": { source: "apache", extensions: ["tfm"] }, "application/x-texinfo": { source: "apache", extensions: ["texinfo", "texi"] }, "application/x-tgif": { source: "apache", extensions: ["obj"] }, "application/x-ustar": { source: "apache", extensions: ["ustar"] }, "application/x-virtualbox-hdd": { compressible: !0, extensions: ["hdd"] }, "application/x-virtualbox-ova": { compressible: !0, extensions: ["ova"] }, "application/x-virtualbox-ovf": { compressible: !0, extensions: ["ovf"] }, "application/x-virtualbox-vbox": { compressible: !0, extensions: ["vbox"] }, "application/x-virtualbox-vbox-extpack": { compressible: !1, extensions: ["vbox-extpack"] }, "application/x-virtualbox-vdi": { compressible: !0, extensions: ["vdi"] }, "application/x-virtualbox-vhd": { compressible: !0, extensions: ["vhd"] }, "application/x-virtualbox-vmdk": { compressible: !0, extensions: ["vmdk"] }, "application/x-wais-source": { source: "apache", extensions: ["src"] }, "application/x-web-app-manifest+json": { compressible: !0, extensions: ["webapp"] }, "application/x-www-form-urlencoded": { source: "iana", compressible: !0 }, "application/x-x509-ca-cert": { source: "iana", extensions: ["der", "crt", "pem"] }, "application/x-x509-ca-ra-cert": { source: "iana" }, "application/x-x509-next-ca-cert": { source: "iana" }, "application/x-xfig": { source: "apache", extensions: ["fig"] }, "application/x-xliff+xml": { source: "apache", compressible: !0, extensions: ["xlf"] }, "application/x-xpinstall": { source: "apache", compressible: !1, extensions: ["xpi"] }, "application/x-xz": { source: "apache", extensions: ["xz"] }, "application/x-zmachine": { source: "apache", extensions: ["z1", "z2", "z3", "z4", "z5", "z6", "z7", "z8"] }, "application/x400-bp": { source: "iana" }, "application/xacml+xml": { source: "iana", compressible: !0 }, "application/xaml+xml": { source: "apache", compressible: !0, extensions: ["xaml"] }, "application/xcap-att+xml": { source: "iana", compressible: !0, extensions: ["xav"] }, "application/xcap-caps+xml": { source: "iana", compressible: !0, extensions: ["xca"] }, "application/xcap-diff+xml": { source: "iana", compressible: !0, extensions: ["xdf"] }, "application/xcap-el+xml": { source: "iana", compressible: !0, extensions: ["xel"] }, "application/xcap-error+xml": { source: "iana", compressible: !0 }, "application/xcap-ns+xml": { source: "iana", compressible: !0, extensions: ["xns"] }, "application/xcon-conference-info+xml": { source: "iana", compressible: !0 }, "application/xcon-conference-info-diff+xml": { source: "iana", compressible: !0 }, "application/xenc+xml": { source: "iana", compressible: !0, extensions: ["xenc"] }, "application/xhtml+xml": { source: "iana", compressible: !0, extensions: ["xhtml", "xht"] }, "application/xhtml-voice+xml": { source: "apache", compressible: !0 }, "application/xliff+xml": { source: "iana", compressible: !0, extensions: ["xlf"] }, "application/xml": { source: "iana", compressible: !0, extensions: ["xml", "xsl", "xsd", "rng"] }, "application/xml-dtd": { source: "iana", compressible: !0, extensions: ["dtd"] }, "application/xml-external-parsed-entity": { source: "iana" }, "application/xml-patch+xml": { source: "iana", compressible: !0 }, "application/xmpp+xml": { source: "iana", compressible: !0 }, "application/xop+xml": { source: "iana", compressible: !0, extensions: ["xop"] }, "application/xproc+xml": { source: "apache", compressible: !0, extensions: ["xpl"] }, "application/xslt+xml": { source: "iana", compressible: !0, extensions: ["xsl", "xslt"] }, "application/xspf+xml": { source: "apache", compressible: !0, extensions: ["xspf"] }, "application/xv+xml": { source: "iana", compressible: !0, extensions: ["mxml", "xhvml", "xvml", "xvm"] }, "application/yang": { source: "iana", extensions: ["yang"] }, "application/yang-data+json": { source: "iana", compressible: !0 }, "application/yang-data+xml": { source: "iana", compressible: !0 }, "application/yang-patch+json": { source: "iana", compressible: !0 }, "application/yang-patch+xml": { source: "iana", compressible: !0 }, "application/yin+xml": { source: "iana", compressible: !0, extensions: ["yin"] }, "application/zip": { source: "iana", compressible: !1, extensions: ["zip"] }, "application/zlib": { source: "iana" }, "application/zstd": { source: "iana" }, "audio/1d-interleaved-parityfec": { source: "iana" }, "audio/32kadpcm": { source: "iana" }, "audio/3gpp": { source: "iana", compressible: !1, extensions: ["3gpp"] }, "audio/3gpp2": { source: "iana" }, "audio/aac": { source: "iana" }, "audio/ac3": { source: "iana" }, "audio/adpcm": { source: "apache", extensions: ["adp"] }, "audio/amr": { source: "iana", extensions: ["amr"] }, "audio/amr-wb": { source: "iana" }, "audio/amr-wb+": { source: "iana" }, "audio/aptx": { source: "iana" }, "audio/asc": { source: "iana" }, "audio/atrac-advanced-lossless": { source: "iana" }, "audio/atrac-x": { source: "iana" }, "audio/atrac3": { source: "iana" }, "audio/basic": { source: "iana", compressible: !1, extensions: ["au", "snd"] }, "audio/bv16": { source: "iana" }, "audio/bv32": { source: "iana" }, "audio/clearmode": { source: "iana" }, "audio/cn": { source: "iana" }, "audio/dat12": { source: "iana" }, "audio/dls": { source: "iana" }, "audio/dsr-es201108": { source: "iana" }, "audio/dsr-es202050": { source: "iana" }, "audio/dsr-es202211": { source: "iana" }, "audio/dsr-es202212": { source: "iana" }, "audio/dv": { source: "iana" }, "audio/dvi4": { source: "iana" }, "audio/eac3": { source: "iana" }, "audio/encaprtp": { source: "iana" }, "audio/evrc": { source: "iana" }, "audio/evrc-qcp": { source: "iana" }, "audio/evrc0": { source: "iana" }, "audio/evrc1": { source: "iana" }, "audio/evrcb": { source: "iana" }, "audio/evrcb0": { source: "iana" }, "audio/evrcb1": { source: "iana" }, "audio/evrcnw": { source: "iana" }, "audio/evrcnw0": { source: "iana" }, "audio/evrcnw1": { source: "iana" }, "audio/evrcwb": { source: "iana" }, "audio/evrcwb0": { source: "iana" }, "audio/evrcwb1": { source: "iana" }, "audio/evs": { source: "iana" }, "audio/flexfec": { source: "iana" }, "audio/fwdred": { source: "iana" }, "audio/g711-0": { source: "iana" }, "audio/g719": { source: "iana" }, "audio/g722": { source: "iana" }, "audio/g7221": { source: "iana" }, "audio/g723": { source: "iana" }, "audio/g726-16": { source: "iana" }, "audio/g726-24": { source: "iana" }, "audio/g726-32": { source: "iana" }, "audio/g726-40": { source: "iana" }, "audio/g728": { source: "iana" }, "audio/g729": { source: "iana" }, "audio/g7291": { source: "iana" }, "audio/g729d": { source: "iana" }, "audio/g729e": { source: "iana" }, "audio/gsm": { source: "iana" }, "audio/gsm-efr": { source: "iana" }, "audio/gsm-hr-08": { source: "iana" }, "audio/ilbc": { source: "iana" }, "audio/ip-mr_v2.5": { source: "iana" }, "audio/isac": { source: "apache" }, "audio/l16": { source: "iana" }, "audio/l20": { source: "iana" }, "audio/l24": { source: "iana", compressible: !1 }, "audio/l8": { source: "iana" }, "audio/lpc": { source: "iana" }, "audio/melp": { source: "iana" }, "audio/melp1200": { source: "iana" }, "audio/melp2400": { source: "iana" }, "audio/melp600": { source: "iana" }, "audio/mhas": { source: "iana" }, "audio/midi": { source: "apache", extensions: ["mid", "midi", "kar", "rmi"] }, "audio/mobile-xmf": { source: "iana", extensions: ["mxmf"] }, "audio/mp3": { compressible: !1, extensions: ["mp3"] }, "audio/mp4": { source: "iana", compressible: !1, extensions: ["m4a", "mp4a"] }, "audio/mp4a-latm": { source: "iana" }, "audio/mpa": { source: "iana" }, "audio/mpa-robust": { source: "iana" }, "audio/mpeg": { source: "iana", compressible: !1, extensions: ["mpga", "mp2", "mp2a", "mp3", "m2a", "m3a"] }, "audio/mpeg4-generic": { source: "iana" }, "audio/musepack": { source: "apache" }, "audio/ogg": { source: "iana", compressible: !1, extensions: ["oga", "ogg", "spx", "opus"] }, "audio/opus": { source: "iana" }, "audio/parityfec": { source: "iana" }, "audio/pcma": { source: "iana" }, "audio/pcma-wb": { source: "iana" }, "audio/pcmu": { source: "iana" }, "audio/pcmu-wb": { source: "iana" }, "audio/prs.sid": { source: "iana" }, "audio/qcelp": { source: "iana" }, "audio/raptorfec": { source: "iana" }, "audio/red": { source: "iana" }, "audio/rtp-enc-aescm128": { source: "iana" }, "audio/rtp-midi": { source: "iana" }, "audio/rtploopback": { source: "iana" }, "audio/rtx": { source: "iana" }, "audio/s3m": { source: "apache", extensions: ["s3m"] }, "audio/scip": { source: "iana" }, "audio/silk": { source: "apache", extensions: ["sil"] }, "audio/smv": { source: "iana" }, "audio/smv-qcp": { source: "iana" }, "audio/smv0": { source: "iana" }, "audio/sofa": { source: "iana" }, "audio/sp-midi": { source: "iana" }, "audio/speex": { source: "iana" }, "audio/t140c": { source: "iana" }, "audio/t38": { source: "iana" }, "audio/telephone-event": { source: "iana" }, "audio/tetra_acelp": { source: "iana" }, "audio/tetra_acelp_bb": { source: "iana" }, "audio/tone": { source: "iana" }, "audio/tsvcis": { source: "iana" }, "audio/uemclip": { source: "iana" }, "audio/ulpfec": { source: "iana" }, "audio/usac": { source: "iana" }, "audio/vdvi": { source: "iana" }, "audio/vmr-wb": { source: "iana" }, "audio/vnd.3gpp.iufp": { source: "iana" }, "audio/vnd.4sb": { source: "iana" }, "audio/vnd.audiokoz": { source: "iana" }, "audio/vnd.celp": { source: "iana" }, "audio/vnd.cisco.nse": { source: "iana" }, "audio/vnd.cmles.radio-events": { source: "iana" }, "audio/vnd.cns.anp1": { source: "iana" }, "audio/vnd.cns.inf1": { source: "iana" }, "audio/vnd.dece.audio": { source: "iana", extensions: ["uva", "uvva"] }, "audio/vnd.digital-winds": { source: "iana", extensions: ["eol"] }, "audio/vnd.dlna.adts": { source: "iana" }, "audio/vnd.dolby.heaac.1": { source: "iana" }, "audio/vnd.dolby.heaac.2": { source: "iana" }, "audio/vnd.dolby.mlp": { source: "iana" }, "audio/vnd.dolby.mps": { source: "iana" }, "audio/vnd.dolby.pl2": { source: "iana" }, "audio/vnd.dolby.pl2x": { source: "iana" }, "audio/vnd.dolby.pl2z": { source: "iana" }, "audio/vnd.dolby.pulse.1": { source: "iana" }, "audio/vnd.dra": { source: "iana", extensions: ["dra"] }, "audio/vnd.dts": { source: "iana", extensions: ["dts"] }, "audio/vnd.dts.hd": { source: "iana", extensions: ["dtshd"] }, "audio/vnd.dts.uhd": { source: "iana" }, "audio/vnd.dvb.file": { source: "iana" }, "audio/vnd.everad.plj": { source: "iana" }, "audio/vnd.hns.audio": { source: "iana" }, "audio/vnd.lucent.voice": { source: "iana", extensions: ["lvp"] }, "audio/vnd.ms-playready.media.pya": { source: "iana", extensions: ["pya"] }, "audio/vnd.nokia.mobile-xmf": { source: "iana" }, "audio/vnd.nortel.vbk": { source: "iana" }, "audio/vnd.nuera.ecelp4800": { source: "iana", extensions: ["ecelp4800"] }, "audio/vnd.nuera.ecelp7470": { source: "iana", extensions: ["ecelp7470"] }, "audio/vnd.nuera.ecelp9600": { source: "iana", extensions: ["ecelp9600"] }, "audio/vnd.octel.sbc": { source: "iana" }, "audio/vnd.presonus.multitrack": { source: "iana" }, "audio/vnd.qcelp": { source: "iana" }, "audio/vnd.rhetorex.32kadpcm": { source: "iana" }, "audio/vnd.rip": { source: "iana", extensions: ["rip"] }, "audio/vnd.rn-realaudio": { compressible: !1 }, "audio/vnd.sealedmedia.softseal.mpeg": { source: "iana" }, "audio/vnd.vmx.cvsd": { source: "iana" }, "audio/vnd.wave": { compressible: !1 }, "audio/vorbis": { source: "iana", compressible: !1 }, "audio/vorbis-config": { source: "iana" }, "audio/wav": { compressible: !1, extensions: ["wav"] }, "audio/wave": { compressible: !1, extensions: ["wav"] }, "audio/webm": { source: "apache", compressible: !1, extensions: ["weba"] }, "audio/x-aac": { source: "apache", compressible: !1, extensions: ["aac"] }, "audio/x-aiff": { source: "apache", extensions: ["aif", "aiff", "aifc"] }, "audio/x-caf": { source: "apache", compressible: !1, extensions: ["caf"] }, "audio/x-flac": { source: "apache", extensions: ["flac"] }, "audio/x-m4a": { source: "nginx", extensions: ["m4a"] }, "audio/x-matroska": { source: "apache", extensions: ["mka"] }, "audio/x-mpegurl": { source: "apache", extensions: ["m3u"] }, "audio/x-ms-wax": { source: "apache", extensions: ["wax"] }, "audio/x-ms-wma": { source: "apache", extensions: ["wma"] }, "audio/x-pn-realaudio": { source: "apache", extensions: ["ram", "ra"] }, "audio/x-pn-realaudio-plugin": { source: "apache", extensions: ["rmp"] }, "audio/x-realaudio": { source: "nginx", extensions: ["ra"] }, "audio/x-tta": { source: "apache" }, "audio/x-wav": { source: "apache", extensions: ["wav"] }, "audio/xm": { source: "apache", extensions: ["xm"] }, "chemical/x-cdx": { source: "apache", extensions: ["cdx"] }, "chemical/x-cif": { source: "apache", extensions: ["cif"] }, "chemical/x-cmdf": { source: "apache", extensions: ["cmdf"] }, "chemical/x-cml": { source: "apache", extensions: ["cml"] }, "chemical/x-csml": { source: "apache", extensions: ["csml"] }, "chemical/x-pdb": { source: "apache" }, "chemical/x-xyz": { source: "apache", extensions: ["xyz"] }, "font/collection": { source: "iana", extensions: ["ttc"] }, "font/otf": { source: "iana", compressible: !0, extensions: ["otf"] }, "font/sfnt": { source: "iana" }, "font/ttf": { source: "iana", compressible: !0, extensions: ["ttf"] }, "font/woff": { source: "iana", extensions: ["woff"] }, "font/woff2": { source: "iana", extensions: ["woff2"] }, "image/aces": { source: "iana", extensions: ["exr"] }, "image/apng": { compressible: !1, extensions: ["apng"] }, "image/avci": { source: "iana", extensions: ["avci"] }, "image/avcs": { source: "iana", extensions: ["avcs"] }, "image/avif": { source: "iana", compressible: !1, extensions: ["avif"] }, "image/bmp": { source: "iana", compressible: !0, extensions: ["bmp"] }, "image/cgm": { source: "iana", extensions: ["cgm"] }, "image/dicom-rle": { source: "iana", extensions: ["drle"] }, "image/emf": { source: "iana", extensions: ["emf"] }, "image/fits": { source: "iana", extensions: ["fits"] }, "image/g3fax": { source: "iana", extensions: ["g3"] }, "image/gif": { source: "iana", compressible: !1, extensions: ["gif"] }, "image/heic": { source: "iana", extensions: ["heic"] }, "image/heic-sequence": { source: "iana", extensions: ["heics"] }, "image/heif": { source: "iana", extensions: ["heif"] }, "image/heif-sequence": { source: "iana", extensions: ["heifs"] }, "image/hej2k": { source: "iana", extensions: ["hej2"] }, "image/hsj2": { source: "iana", extensions: ["hsj2"] }, "image/ief": { source: "iana", extensions: ["ief"] }, "image/jls": { source: "iana", extensions: ["jls"] }, "image/jp2": { source: "iana", compressible: !1, extensions: ["jp2", "jpg2"] }, "image/jpeg": { source: "iana", compressible: !1, extensions: ["jpeg", "jpg", "jpe"] }, "image/jph": { source: "iana", extensions: ["jph"] }, "image/jphc": { source: "iana", extensions: ["jhc"] }, "image/jpm": { source: "iana", compressible: !1, extensions: ["jpm"] }, "image/jpx": { source: "iana", compressible: !1, extensions: ["jpx", "jpf"] }, "image/jxr": { source: "iana", extensions: ["jxr"] }, "image/jxra": { source: "iana", extensions: ["jxra"] }, "image/jxrs": { source: "iana", extensions: ["jxrs"] }, "image/jxs": { source: "iana", extensions: ["jxs"] }, "image/jxsc": { source: "iana", extensions: ["jxsc"] }, "image/jxsi": { source: "iana", extensions: ["jxsi"] }, "image/jxss": { source: "iana", extensions: ["jxss"] }, "image/ktx": { source: "iana", extensions: ["ktx"] }, "image/ktx2": { source: "iana", extensions: ["ktx2"] }, "image/naplps": { source: "iana" }, "image/pjpeg": { compressible: !1 }, "image/png": { source: "iana", compressible: !1, extensions: ["png"] }, "image/prs.btif": { source: "iana", extensions: ["btif"] }, "image/prs.pti": { source: "iana", extensions: ["pti"] }, "image/pwg-raster": { source: "iana" }, "image/sgi": { source: "apache", extensions: ["sgi"] }, "image/svg+xml": { source: "iana", compressible: !0, extensions: ["svg", "svgz"] }, "image/t38": { source: "iana", extensions: ["t38"] }, "image/tiff": { source: "iana", compressible: !1, extensions: ["tif", "tiff"] }, "image/tiff-fx": { source: "iana", extensions: ["tfx"] }, "image/vnd.adobe.photoshop": { source: "iana", compressible: !0, extensions: ["psd"] }, "image/vnd.airzip.accelerator.azv": { source: "iana", extensions: ["azv"] }, "image/vnd.cns.inf2": { source: "iana" }, "image/vnd.dece.graphic": { source: "iana", extensions: ["uvi", "uvvi", "uvg", "uvvg"] }, "image/vnd.djvu": { source: "iana", extensions: ["djvu", "djv"] }, "image/vnd.dvb.subtitle": { source: "iana", extensions: ["sub"] }, "image/vnd.dwg": { source: "iana", extensions: ["dwg"] }, "image/vnd.dxf": { source: "iana", extensions: ["dxf"] }, "image/vnd.fastbidsheet": { source: "iana", extensions: ["fbs"] }, "image/vnd.fpx": { source: "iana", extensions: ["fpx"] }, "image/vnd.fst": { source: "iana", extensions: ["fst"] }, "image/vnd.fujixerox.edmics-mmr": { source: "iana", extensions: ["mmr"] }, "image/vnd.fujixerox.edmics-rlc": { source: "iana", extensions: ["rlc"] }, "image/vnd.globalgraphics.pgb": { source: "iana" }, "image/vnd.microsoft.icon": { source: "iana", compressible: !0, extensions: ["ico"] }, "image/vnd.mix": { source: "iana" }, "image/vnd.mozilla.apng": { source: "iana" }, "image/vnd.ms-dds": { compressible: !0, extensions: ["dds"] }, "image/vnd.ms-modi": { source: "iana", extensions: ["mdi"] }, "image/vnd.ms-photo": { source: "apache", extensions: ["wdp"] }, "image/vnd.net-fpx": { source: "iana", extensions: ["npx"] }, "image/vnd.pco.b16": { source: "iana", extensions: ["b16"] }, "image/vnd.radiance": { source: "iana" }, "image/vnd.sealed.png": { source: "iana" }, "image/vnd.sealedmedia.softseal.gif": { source: "iana" }, "image/vnd.sealedmedia.softseal.jpg": { source: "iana" }, "image/vnd.svf": { source: "iana" }, "image/vnd.tencent.tap": { source: "iana", extensions: ["tap"] }, "image/vnd.valve.source.texture": { source: "iana", extensions: ["vtf"] }, "image/vnd.wap.wbmp": { source: "iana", extensions: ["wbmp"] }, "image/vnd.xiff": { source: "iana", extensions: ["xif"] }, "image/vnd.zbrush.pcx": { source: "iana", extensions: ["pcx"] }, "image/webp": { source: "apache", extensions: ["webp"] }, "image/wmf": { source: "iana", extensions: ["wmf"] }, "image/x-3ds": { source: "apache", extensions: ["3ds"] }, "image/x-cmu-raster": { source: "apache", extensions: ["ras"] }, "image/x-cmx": { source: "apache", extensions: ["cmx"] }, "image/x-freehand": { source: "apache", extensions: ["fh", "fhc", "fh4", "fh5", "fh7"] }, "image/x-icon": { source: "apache", compressible: !0, extensions: ["ico"] }, "image/x-jng": { source: "nginx", extensions: ["jng"] }, "image/x-mrsid-image": { source: "apache", extensions: ["sid"] }, "image/x-ms-bmp": { source: "nginx", compressible: !0, extensions: ["bmp"] }, "image/x-pcx": { source: "apache", extensions: ["pcx"] }, "image/x-pict": { source: "apache", extensions: ["pic", "pct"] }, "image/x-portable-anymap": { source: "apache", extensions: ["pnm"] }, "image/x-portable-bitmap": { source: "apache", extensions: ["pbm"] }, "image/x-portable-graymap": { source: "apache", extensions: ["pgm"] }, "image/x-portable-pixmap": { source: "apache", extensions: ["ppm"] }, "image/x-rgb": { source: "apache", extensions: ["rgb"] }, "image/x-tga": { source: "apache", extensions: ["tga"] }, "image/x-xbitmap": { source: "apache", extensions: ["xbm"] }, "image/x-xcf": { compressible: !1 }, "image/x-xpixmap": { source: "apache", extensions: ["xpm"] }, "image/x-xwindowdump": { source: "apache", extensions: ["xwd"] }, "message/cpim": { source: "iana" }, "message/delivery-status": { source: "iana" }, "message/disposition-notification": { source: "iana", extensions: ["disposition-notification"] }, "message/external-body": { source: "iana" }, "message/feedback-report": { source: "iana" }, "message/global": { source: "iana", extensions: ["u8msg"] }, "message/global-delivery-status": { source: "iana", extensions: ["u8dsn"] }, "message/global-disposition-notification": { source: "iana", extensions: ["u8mdn"] }, "message/global-headers": { source: "iana", extensions: ["u8hdr"] }, "message/http": { source: "iana", compressible: !1 }, "message/imdn+xml": { source: "iana", compressible: !0 }, "message/news": { source: "iana" }, "message/partial": { source: "iana", compressible: !1 }, "message/rfc822": { source: "iana", compressible: !0, extensions: ["eml", "mime"] }, "message/s-http": { source: "iana" }, "message/sip": { source: "iana" }, "message/sipfrag": { source: "iana" }, "message/tracking-status": { source: "iana" }, "message/vnd.si.simp": { source: "iana" }, "message/vnd.wfa.wsc": { source: "iana", extensions: ["wsc"] }, "model/3mf": { source: "iana", extensions: ["3mf"] }, "model/e57": { source: "iana" }, "model/gltf+json": { source: "iana", compressible: !0, extensions: ["gltf"] }, "model/gltf-binary": { source: "iana", compressible: !0, extensions: ["glb"] }, "model/iges": { source: "iana", compressible: !1, extensions: ["igs", "iges"] }, "model/mesh": { source: "iana", compressible: !1, extensions: ["msh", "mesh", "silo"] }, "model/mtl": { source: "iana", extensions: ["mtl"] }, "model/obj": { source: "iana", extensions: ["obj"] }, "model/step": { source: "iana" }, "model/step+xml": { source: "iana", compressible: !0, extensions: ["stpx"] }, "model/step+zip": { source: "iana", compressible: !1, extensions: ["stpz"] }, "model/step-xml+zip": { source: "iana", compressible: !1, extensions: ["stpxz"] }, "model/stl": { source: "iana", extensions: ["stl"] }, "model/vnd.collada+xml": { source: "iana", compressible: !0, extensions: ["dae"] }, "model/vnd.dwf": { source: "iana", extensions: ["dwf"] }, "model/vnd.flatland.3dml": { source: "iana" }, "model/vnd.gdl": { source: "iana", extensions: ["gdl"] }, "model/vnd.gs-gdl": { source: "apache" }, "model/vnd.gs.gdl": { source: "iana" }, "model/vnd.gtw": { source: "iana", extensions: ["gtw"] }, "model/vnd.moml+xml": { source: "iana", compressible: !0 }, "model/vnd.mts": { source: "iana", extensions: ["mts"] }, "model/vnd.opengex": { source: "iana", extensions: ["ogex"] }, "model/vnd.parasolid.transmit.binary": { source: "iana", extensions: ["x_b"] }, "model/vnd.parasolid.transmit.text": { source: "iana", extensions: ["x_t"] }, "model/vnd.pytha.pyox": { source: "iana" }, "model/vnd.rosette.annotated-data-model": { source: "iana" }, "model/vnd.sap.vds": { source: "iana", extensions: ["vds"] }, "model/vnd.usdz+zip": { source: "iana", compressible: !1, extensions: ["usdz"] }, "model/vnd.valve.source.compiled-map": { source: "iana", extensions: ["bsp"] }, "model/vnd.vtu": { source: "iana", extensions: ["vtu"] }, "model/vrml": { source: "iana", compressible: !1, extensions: ["wrl", "vrml"] }, "model/x3d+binary": { source: "apache", compressible: !1, extensions: ["x3db", "x3dbz"] }, "model/x3d+fastinfoset": { source: "iana", extensions: ["x3db"] }, "model/x3d+vrml": { source: "apache", compressible: !1, extensions: ["x3dv", "x3dvz"] }, "model/x3d+xml": { source: "iana", compressible: !0, extensions: ["x3d", "x3dz"] }, "model/x3d-vrml": { source: "iana", extensions: ["x3dv"] }, "multipart/alternative": { source: "iana", compressible: !1 }, "multipart/appledouble": { source: "iana" }, "multipart/byteranges": { source: "iana" }, "multipart/digest": { source: "iana" }, "multipart/encrypted": { source: "iana", compressible: !1 }, "multipart/form-data": { source: "iana", compressible: !1 }, "multipart/header-set": { source: "iana" }, "multipart/mixed": { source: "iana" }, "multipart/multilingual": { source: "iana" }, "multipart/parallel": { source: "iana" }, "multipart/related": { source: "iana", compressible: !1 }, "multipart/report": { source: "iana" }, "multipart/signed": { source: "iana", compressible: !1 }, "multipart/vnd.bint.med-plus": { source: "iana" }, "multipart/voice-message": { source: "iana" }, "multipart/x-mixed-replace": { source: "iana" }, "text/1d-interleaved-parityfec": { source: "iana" }, "text/cache-manifest": { source: "iana", compressible: !0, extensions: ["appcache", "manifest"] }, "text/calendar": { source: "iana", extensions: ["ics", "ifb"] }, "text/calender": { compressible: !0 }, "text/cmd": { compressible: !0 }, "text/coffeescript": { extensions: ["coffee", "litcoffee"] }, "text/cql": { source: "iana" }, "text/cql-expression": { source: "iana" }, "text/cql-identifier": { source: "iana" }, "text/css": { source: "iana", charset: "UTF-8", compressible: !0, extensions: ["css"] }, "text/csv": { source: "iana", compressible: !0, extensions: ["csv"] }, "text/csv-schema": { source: "iana" }, "text/directory": { source: "iana" }, "text/dns": { source: "iana" }, "text/ecmascript": { source: "iana" }, "text/encaprtp": { source: "iana" }, "text/enriched": { source: "iana" }, "text/fhirpath": { source: "iana" }, "text/flexfec": { source: "iana" }, "text/fwdred": { source: "iana" }, "text/gff3": { source: "iana" }, "text/grammar-ref-list": { source: "iana" }, "text/html": { source: "iana", compressible: !0, extensions: ["html", "htm", "shtml"] }, "text/jade": { extensions: ["jade"] }, "text/javascript": { source: "iana", compressible: !0 }, "text/jcr-cnd": { source: "iana" }, "text/jsx": { compressible: !0, extensions: ["jsx"] }, "text/less": { compressible: !0, extensions: ["less"] }, "text/markdown": { source: "iana", compressible: !0, extensions: ["markdown", "md"] }, "text/mathml": { source: "nginx", extensions: ["mml"] }, "text/mdx": { compressible: !0, extensions: ["mdx"] }, "text/mizar": { source: "iana" }, "text/n3": { source: "iana", charset: "UTF-8", compressible: !0, extensions: ["n3"] }, "text/parameters": { source: "iana", charset: "UTF-8" }, "text/parityfec": { source: "iana" }, "text/plain": { source: "iana", compressible: !0, extensions: ["txt", "text", "conf", "def", "list", "log", "in", "ini"] }, "text/provenance-notation": { source: "iana", charset: "UTF-8" }, "text/prs.fallenstein.rst": { source: "iana" }, "text/prs.lines.tag": { source: "iana", extensions: ["dsc"] }, "text/prs.prop.logic": { source: "iana" }, "text/raptorfec": { source: "iana" }, "text/red": { source: "iana" }, "text/rfc822-headers": { source: "iana" }, "text/richtext": { source: "iana", compressible: !0, extensions: ["rtx"] }, "text/rtf": { source: "iana", compressible: !0, extensions: ["rtf"] }, "text/rtp-enc-aescm128": { source: "iana" }, "text/rtploopback": { source: "iana" }, "text/rtx": { source: "iana" }, "text/sgml": { source: "iana", extensions: ["sgml", "sgm"] }, "text/shaclc": { source: "iana" }, "text/shex": { source: "iana", extensions: ["shex"] }, "text/slim": { extensions: ["slim", "slm"] }, "text/spdx": { source: "iana", extensions: ["spdx"] }, "text/strings": { source: "iana" }, "text/stylus": { extensions: ["stylus", "styl"] }, "text/t140": { source: "iana" }, "text/tab-separated-values": { source: "iana", compressible: !0, extensions: ["tsv"] }, "text/troff": { source: "iana", extensions: ["t", "tr", "roff", "man", "me", "ms"] }, "text/turtle": { source: "iana", charset: "UTF-8", extensions: ["ttl"] }, "text/ulpfec": { source: "iana" }, "text/uri-list": { source: "iana", compressible: !0, extensions: ["uri", "uris", "urls"] }, "text/vcard": { source: "iana", compressible: !0, extensions: ["vcard"] }, "text/vnd.a": { source: "iana" }, "text/vnd.abc": { source: "iana" }, "text/vnd.ascii-art": { source: "iana" }, "text/vnd.curl": { source: "iana", extensions: ["curl"] }, "text/vnd.curl.dcurl": { source: "apache", extensions: ["dcurl"] }, "text/vnd.curl.mcurl": { source: "apache", extensions: ["mcurl"] }, "text/vnd.curl.scurl": { source: "apache", extensions: ["scurl"] }, "text/vnd.debian.copyright": { source: "iana", charset: "UTF-8" }, "text/vnd.dmclientscript": { source: "iana" }, "text/vnd.dvb.subtitle": { source: "iana", extensions: ["sub"] }, "text/vnd.esmertec.theme-descriptor": { source: "iana", charset: "UTF-8" }, "text/vnd.familysearch.gedcom": { source: "iana", extensions: ["ged"] }, "text/vnd.ficlab.flt": { source: "iana" }, "text/vnd.fly": { source: "iana", extensions: ["fly"] }, "text/vnd.fmi.flexstor": { source: "iana", extensions: ["flx"] }, "text/vnd.gml": { source: "iana" }, "text/vnd.graphviz": { source: "iana", extensions: ["gv"] }, "text/vnd.hans": { source: "iana" }, "text/vnd.hgl": { source: "iana" }, "text/vnd.in3d.3dml": { source: "iana", extensions: ["3dml"] }, "text/vnd.in3d.spot": { source: "iana", extensions: ["spot"] }, "text/vnd.iptc.newsml": { source: "iana" }, "text/vnd.iptc.nitf": { source: "iana" }, "text/vnd.latex-z": { source: "iana" }, "text/vnd.motorola.reflex": { source: "iana" }, "text/vnd.ms-mediapackage": { source: "iana" }, "text/vnd.net2phone.commcenter.command": { source: "iana" }, "text/vnd.radisys.msml-basic-layout": { source: "iana" }, "text/vnd.senx.warpscript": { source: "iana" }, "text/vnd.si.uricatalogue": { source: "iana" }, "text/vnd.sosi": { source: "iana" }, "text/vnd.sun.j2me.app-descriptor": { source: "iana", charset: "UTF-8", extensions: ["jad"] }, "text/vnd.trolltech.linguist": { source: "iana", charset: "UTF-8" }, "text/vnd.wap.si": { source: "iana" }, "text/vnd.wap.sl": { source: "iana" }, "text/vnd.wap.wml": { source: "iana", extensions: ["wml"] }, "text/vnd.wap.wmlscript": { source: "iana", extensions: ["wmls"] }, "text/vtt": { source: "iana", charset: "UTF-8", compressible: !0, extensions: ["vtt"] }, "text/x-asm": { source: "apache", extensions: ["s", "asm"] }, "text/x-c": { source: "apache", extensions: ["c", "cc", "cxx", "cpp", "h", "hh", "dic"] }, "text/x-component": { source: "nginx", extensions: ["htc"] }, "text/x-fortran": { source: "apache", extensions: ["f", "for", "f77", "f90"] }, "text/x-gwt-rpc": { compressible: !0 }, "text/x-handlebars-template": { extensions: ["hbs"] }, "text/x-java-source": { source: "apache", extensions: ["java"] }, "text/x-jquery-tmpl": { compressible: !0 }, "text/x-lua": { extensions: ["lua"] }, "text/x-markdown": { compressible: !0, extensions: ["mkd"] }, "text/x-nfo": { source: "apache", extensions: ["nfo"] }, "text/x-opml": { source: "apache", extensions: ["opml"] }, "text/x-org": { compressible: !0, extensions: ["org"] }, "text/x-pascal": { source: "apache", extensions: ["p", "pas"] }, "text/x-processing": { compressible: !0, extensions: ["pde"] }, "text/x-sass": { extensions: ["sass"] }, "text/x-scss": { extensions: ["scss"] }, "text/x-setext": { source: "apache", extensions: ["etx"] }, "text/x-sfv": { source: "apache", extensions: ["sfv"] }, "text/x-suse-ymp": { compressible: !0, extensions: ["ymp"] }, "text/x-uuencode": { source: "apache", extensions: ["uu"] }, "text/x-vcalendar": { source: "apache", extensions: ["vcs"] }, "text/x-vcard": { source: "apache", extensions: ["vcf"] }, "text/xml": { source: "iana", compressible: !0, extensions: ["xml"] }, "text/xml-external-parsed-entity": { source: "iana" }, "text/yaml": { compressible: !0, extensions: ["yaml", "yml"] }, "video/1d-interleaved-parityfec": { source: "iana" }, "video/3gpp": { source: "iana", extensions: ["3gp", "3gpp"] }, "video/3gpp-tt": { source: "iana" }, "video/3gpp2": { source: "iana", extensions: ["3g2"] }, "video/av1": { source: "iana" }, "video/bmpeg": { source: "iana" }, "video/bt656": { source: "iana" }, "video/celb": { source: "iana" }, "video/dv": { source: "iana" }, "video/encaprtp": { source: "iana" }, "video/ffv1": { source: "iana" }, "video/flexfec": { source: "iana" }, "video/h261": { source: "iana", extensions: ["h261"] }, "video/h263": { source: "iana", extensions: ["h263"] }, "video/h263-1998": { source: "iana" }, "video/h263-2000": { source: "iana" }, "video/h264": { source: "iana", extensions: ["h264"] }, "video/h264-rcdo": { source: "iana" }, "video/h264-svc": { source: "iana" }, "video/h265": { source: "iana" }, "video/iso.segment": { source: "iana", extensions: ["m4s"] }, "video/jpeg": { source: "iana", extensions: ["jpgv"] }, "video/jpeg2000": { source: "iana" }, "video/jpm": { source: "apache", extensions: ["jpm", "jpgm"] }, "video/jxsv": { source: "iana" }, "video/mj2": { source: "iana", extensions: ["mj2", "mjp2"] }, "video/mp1s": { source: "iana" }, "video/mp2p": { source: "iana" }, "video/mp2t": { source: "iana", extensions: ["ts"] }, "video/mp4": { source: "iana", compressible: !1, extensions: ["mp4", "mp4v", "mpg4"] }, "video/mp4v-es": { source: "iana" }, "video/mpeg": { source: "iana", compressible: !1, extensions: ["mpeg", "mpg", "mpe", "m1v", "m2v"] }, "video/mpeg4-generic": { source: "iana" }, "video/mpv": { source: "iana" }, "video/nv": { source: "iana" }, "video/ogg": { source: "iana", compressible: !1, extensions: ["ogv"] }, "video/parityfec": { source: "iana" }, "video/pointer": { source: "iana" }, "video/quicktime": { source: "iana", compressible: !1, extensions: ["qt", "mov"] }, "video/raptorfec": { source: "iana" }, "video/raw": { source: "iana" }, "video/rtp-enc-aescm128": { source: "iana" }, "video/rtploopback": { source: "iana" }, "video/rtx": { source: "iana" }, "video/scip": { source: "iana" }, "video/smpte291": { source: "iana" }, "video/smpte292m": { source: "iana" }, "video/ulpfec": { source: "iana" }, "video/vc1": { source: "iana" }, "video/vc2": { source: "iana" }, "video/vnd.cctv": { source: "iana" }, "video/vnd.dece.hd": { source: "iana", extensions: ["uvh", "uvvh"] }, "video/vnd.dece.mobile": { source: "iana", extensions: ["uvm", "uvvm"] }, "video/vnd.dece.mp4": { source: "iana" }, "video/vnd.dece.pd": { source: "iana", extensions: ["uvp", "uvvp"] }, "video/vnd.dece.sd": { source: "iana", extensions: ["uvs", "uvvs"] }, "video/vnd.dece.video": { source: "iana", extensions: ["uvv", "uvvv"] }, "video/vnd.directv.mpeg": { source: "iana" }, "video/vnd.directv.mpeg-tts": { source: "iana" }, "video/vnd.dlna.mpeg-tts": { source: "iana" }, "video/vnd.dvb.file": { source: "iana", extensions: ["dvb"] }, "video/vnd.fvt": { source: "iana", extensions: ["fvt"] }, "video/vnd.hns.video": { source: "iana" }, "video/vnd.iptvforum.1dparityfec-1010": { source: "iana" }, "video/vnd.iptvforum.1dparityfec-2005": { source: "iana" }, "video/vnd.iptvforum.2dparityfec-1010": { source: "iana" }, "video/vnd.iptvforum.2dparityfec-2005": { source: "iana" }, "video/vnd.iptvforum.ttsavc": { source: "iana" }, "video/vnd.iptvforum.ttsmpeg2": { source: "iana" }, "video/vnd.motorola.video": { source: "iana" }, "video/vnd.motorola.videop": { source: "iana" }, "video/vnd.mpegurl": { source: "iana", extensions: ["mxu", "m4u"] }, "video/vnd.ms-playready.media.pyv": { source: "iana", extensions: ["pyv"] }, "video/vnd.nokia.interleaved-multimedia": { source: "iana" }, "video/vnd.nokia.mp4vr": { source: "iana" }, "video/vnd.nokia.videovoip": { source: "iana" }, "video/vnd.objectvideo": { source: "iana" }, "video/vnd.radgamettools.bink": { source: "iana" }, "video/vnd.radgamettools.smacker": { source: "iana" }, "video/vnd.sealed.mpeg1": { source: "iana" }, "video/vnd.sealed.mpeg4": { source: "iana" }, "video/vnd.sealed.swf": { source: "iana" }, "video/vnd.sealedmedia.softseal.mov": { source: "iana" }, "video/vnd.uvvu.mp4": { source: "iana", extensions: ["uvu", "uvvu"] }, "video/vnd.vivo": { source: "iana", extensions: ["viv"] }, "video/vnd.youtube.yt": { source: "iana" }, "video/vp8": { source: "iana" }, "video/vp9": { source: "iana" }, "video/webm": { source: "apache", compressible: !1, extensions: ["webm"] }, "video/x-f4v": { source: "apache", extensions: ["f4v"] }, "video/x-fli": { source: "apache", extensions: ["fli"] }, "video/x-flv": { source: "apache", compressible: !1, extensions: ["flv"] }, "video/x-m4v": { source: "apache", extensions: ["m4v"] }, "video/x-matroska": { source: "apache", compressible: !1, extensions: ["mkv", "mk3d", "mks"] }, "video/x-mng": { source: "apache", extensions: ["mng"] }, "video/x-ms-asf": { source: "apache", extensions: ["asf", "asx"] }, "video/x-ms-vob": { source: "apache", extensions: ["vob"] }, "video/x-ms-wm": { source: "apache", extensions: ["wm"] }, "video/x-ms-wmv": { source: "apache", compressible: !1, extensions: ["wmv"] }, "video/x-ms-wmx": { source: "apache", extensions: ["wmx"] }, "video/x-ms-wvx": { source: "apache", extensions: ["wvx"] }, "video/x-msvideo": { source: "apache", extensions: ["avi"] }, "video/x-sgi-movie": { source: "apache", extensions: ["movie"] }, "video/x-smv": { source: "apache", extensions: ["smv"] }, "x-conference/x-cooltalk": { source: "apache", extensions: ["ice"] }, "x-shader/x-fragment": { compressible: !0 }, "x-shader/x-vertex": { compressible: !0 } }; /*! * mime-db * Copyright(c) 2014 Jonathan Ong * Copyright(c) 2015-2022 Douglas Christopher Wilson * MIT Licensed */ var mee = dee; /*! * mime-types * Copyright(c) 2014 Jonathan Ong * Copyright(c) 2015 Douglas Christopher Wilson * MIT Licensed */ (function(t) { var e = mee, n = Uh.extname, s = /^\s*([^;\s]*)(?:;|\s|$)/, a = /^text\//i; t.charset = o, t.charsets = { lookup: o }, t.contentType = r, t.extension = i, t.extensions = Object.create(null), t.lookup = c, t.types = Object.create(null), l(t.extensions, t.types); function o(u) { if (!u || typeof u != "string") return !1; var d = s.exec(u), m = d && e[d[1].toLowerCase()]; return m && m.charset ? m.charset : d && a.test(d[1]) ? "UTF-8" : !1 } function r(u) { if (!u || typeof u != "string") return !1; var d = u.indexOf("/") === -1 ? t.lookup(u) : u; if (!d) return !1; if (d.indexOf("charset") === -1) { var m = t.charset(d); m && (d += "; charset=" + m.toLowerCase()) } return d } function i(u) { if (!u || typeof u != "string") return !1; var d = s.exec(u), m = d && t.extensions[d[1].toLowerCase()]; return !m || !m.length ? !1 : m[0] } function c(u) { if (!u || typeof u != "string") return !1; var d = n("x." + u).toLowerCase().substr(1); return d && t.types[d] || !1 } function l(u, d) { var m = ["nginx", "apache", void 0, "iana"]; Object.keys(e).forEach(function(h) { var g = e[h], b = g.extensions; if (!(!b || !b.length)) { u[h] = b; for (var x = 0; x < b.length; x++) { var v = b[x]; if (d[v]) { var w = m.indexOf(e[d[v]].source), E = m.indexOf(g.source); if (d[v] !== "application/octet-stream" && (w > E || w === E && d[v].substr(0, 12) === "application/")) continue } d[v] = h } } }) } })(Rd); const Pd = lr(Rd), Qr = { "application/x-cbr": [ [82, 97, 114, 33, 26, 7, 0], [82, 97, 114, 33, 26, 7, 1, 0], [127, 69, 76, 70] ], "application/x-cbz": [ [80, 75, 3, 4], [80, 75, 5, 6], [80, 75, 7, 8] ] }, ei = { "application/vnd.amazon.kfx": [ [75, 70, 88, 32] ], "application/vnd.amazon.kpf": [ [80, 75, 3, 4] ], "application/epub+zip": [ [80, 75, 3, 4] ], "application/x-mobipocket-ebook": [ [77, 79, 66, 73] ] }, ti = { "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet": [ [80, 75, 3, 4], [80, 75, 5, 6], [80, 75, 7, 8] ] }, ni = { "application/pdf": [ [37, 80, 68, 70] ] }; function fee() { return [...Object.keys(Qr), ...Object.keys(ei), ...Object.keys(ti), ...Object.keys(ni)] } function hee({ mimeTypesToSignature: t, substackType: e, actionButtonAttr: n }) { return [{ tag: "div.file-embed-wrapper", getAttrs: s => { const a = {}; try { const [o, r, i] = s.children[0].children, [c, l] = o.children, [u, d] = l.children; a.title = u.textContent; const [m, f] = d.textContent.split("∙"); a.filesize = Rf(m); const h = f.split("File")[0].trim().toLowerCase(); if (!!t[h] || e === h) a.filetype = h; else if (e === "file") a.filetype = h; else return !1; return c.classList.contains("file-embed-thumbnail-default") || (a.thumbnail = c.getAttribute("src")), a.description = r.innerText, a[n] = i.getAttribute("href"), a } catch (o) { return !1 } } }] } function So(e) { return N(this, arguments, function*({ file: t }) { const n = yield vee({ file: t }); return gee({ file: t, bytes: n }) ? "comic" : bee({ file: t, bytes: n }) ? "ebook" : ha({ bytes: n, file: t, mimeTypeToSignature: ti }) ? "xlsx" : ha({ bytes: n, file: t, mimeTypeToSignature: ni }) ? "pdf" : null }) } function gee({ file: t, bytes: e }) { const n = t.name.split(".").pop(); return n && ["cbr", "cbz"].indexOf(n.toLowerCase()) >= 0 && (t.assignedType = `application/x-${n}`), ha({ bytes: e, file: t, mimeTypeToSignature: Qr }) } function bee({ file: t, bytes: e }) { const n = t.name.split(".").pop(); return n && ["kpf", "kfx"].indexOf(n.toLowerCase()) >= 0 && (t.assignedType = `application/vnd.amazon.${n}`), ha({ bytes: e, file: t, mimeTypeToSignature: ei }) } function ha({ bytes: t, mimeTypeToSignature: e, file: n }) { const s = n.assignedType || n.type, a = e[s]; return a ? a.some(o => o.every((r, i) => r === t[i])) : !1 } function vee(e) { return N(this, arguments, function*({ file: t }) { return new Uint8Array(yield t.arrayBuffer()) }) } function xee({ filetype: t }) { var e, n, s, a; return t ? ["application/vnd.amazon.kfx", "application/vnd.amazon.kpf", "application/vnd.amazon.ebook"].includes(t) ? "Kindle" : (a = (s = (n = Pd.extension(t) || ((e = t.split("/").pop()) == null ? void 0 : e.split("-").pop())) == null ? void 0 : n.toUpperCase) == null ? void 0 : s.call(n)) != null ? a : "" : "" } function To({ attrs: t }) { var e; return `${mr((e=Number(t.filesize))!=null?e:void 0)} ∙ ${xee({filetype:t.filetype})} file` } const yee = t => new Promise((e, n) => { if (!window.FileReader) { n(new TypeError("File reader API not found")); return } const s = new FileReader; s.onerror = n, s.onload = () => { e(s.result) }, s.readAsDataURL(t) }); class wee { constructor({ fileEmbed: e, node: n, view: s, getPos: a }) { this.fileEmbed = e, this.dom = e.buildNodeView(n, s, a) } update(e) { return e.type.name === this.fileEmbed.substackType } stopEvent(e) { return e.target.className === "file-embed-menu-button" } } class ws { constructor({ substackType: e, actionButtonText: n, actionButtonAttr: s, mimeTypesToSignature: a }) { this.substackType = "file", this.actionButtonText = "Download", this.actionButtonAttr = "raw_href", e && (this.substackType = e), n && (this.actionButtonText = n), s && (this.actionButtonAttr = s), this.mimeTypesToSignature = a } getNodeView({ editor: e, node: n, getPos: s }) { return new wee({ fileEmbed: this, node: n, view: e.view, getPos: s }) } get nodeSpec() { return { definition: this, attrs: { filename: { default: null }, filetype: { default: null }, filesize: { default: null }, href: { default: null }, title: { default: null }, description: { default: null }, thumbnail: { default: null }, fileKey: { default: null }, dirty: { default: !0 }, raw_href: { default: null }, error: { default: null }, empty: { default: !1 } }, substackType: this.substackType, inline: !1, atom: !0, group: "block", selectable: !1, draggable: !0, isolating: !0, defining: !0, parseDOM: hee({ mimeTypesToSignature: this.mimeTypesToSignature, substackType: this.substackType, actionButtonAttr: this.actionButtonAttr }), toDOM: e => { const n = ["div", { class: "file-embed-wrapper", "data-component-name": "FileToDOM" }, ["div", { class: "file-embed-container-reader" }, ["div", { class: "file-embed-container-top" }, ["image", { class: `file-embed-thumbnail${e.attrs.thumbnail?"":"-default"}`, src: e.attrs.thumbnail || q("/img/attachment_icon.svg") }], ["div", { class: "file-embed-details" }, ["div", { class: "file-embed-details-h1" }, e.attrs.title || e.attrs.filename || ""], ["div", { class: "file-embed-details-h2" }, To({ attrs: e.attrs })] ], ["a", { class: "file-embed-button wide", href: e.attrs[this.actionButtonAttr] }, ["span", { class: "file-embed-button-text" }, this.actionButtonText] ] ] ] ]; return e.attrs.description && n[2].push(["div", { class: "file-embed-description" }, e.attrs.description]), n[2].push(["a", { class: "file-embed-button narrow", href: e.attrs[this.actionButtonAttr] }, ["span", { class: "file-embed-button-text" }, this.actionButtonText] ]), n }, toDOMStatic: e => { var i; let n, s, o = ((i = e.attrs) == null ? void 0 : i.title) || ""; return e.attrs.thumbnail && e.attrs.thumbnail.indexOf("attachment_icon.svg") === -1 ? (s = !1, n = q(e.attrs.thumbnail, 100, { aspect: "1.5", crop: "fill", gravity: "auto", height: 150 })) : (s = !0, n = q("/img/attachment_icon.svg", 32, { aspect: "1", crop: "fill", gravity: "auto", height: 32 })), o && o.length > 40 && (o = `${o.substr(0,40)}...`), ["table", { class: "static-file-embed-table", cellspacing: "16", "data-component-name": "FileToDOMStatic" }, ["tr", {}, ["td", { class: `static-file-embed-thumbnail-container ${s?"default":""}` }, ["img", { class: `static-file-embed-thumbnail ${s?"default":""}`, src: n }] ], ["td", { class: `static-file-embed-details ${s?"default":""}` }, ["div", { class: "static-file-embed-details-h1" }, o], ["div", { class: "static-file-embed-details-h2" }, To({ attrs: e.attrs })] ] ], e.attrs.description ? ["tr", {}, ["td", { class: "static-file-embed-description", colspan: "2" }, ["p", { style: "margin: 0;" }, e.attrs.description || ""] ] ] : null, ["tr", {}, ["td", { class: "static-file-embed-button-container", colspan: "2" }, ["table", { class: "static-file-embed-button", cellspacing: "0" }, ["tr", {}, ["td", { align: "center" }, ["a", { href: `${e.attrs[this.actionButtonAttr]}?token=${ce.FILE_DOWNLOAD_TOKEN}`, class: "static-file-embed-anchor" }, this.actionButtonText] ] ] ] ] ] ].filter(c => c) } } } buildNodeView(e, n, s) { var h, g, b, x; const a = document.createElement("div"); a.className = "file-embed-wrapper-editor"; const o = document.createElement("div"); o.className = "file-embed-container", o.dataset.attrs = JSON.stringify(e.attrs), o.appendChild(this.generateContainerTop(e)), o.appendChild(this.generateDescription(e)), o.appendChild(this.generateButton("narrow")); const r = document.createElement("div"); r.className = "file-embed-aligner"; const { button: i, menu: c } = this.generateDropdown(e, n, s); r.appendChild(o), r.appendChild(c), a.appendChild(r); const l = document.createElement("img"); l.src = q("/img/file_drag_default.png"); const u = document.createElement("img"); u.src = q((h = e == null ? void 0 : e.attrs) == null ? void 0 : h.thumbnail, 100, { aspect: "1.5", crop: "fill", gravity: "auto", height: 150 }), a.addEventListener("dragstart", v => { var w; (w = e == null ? void 0 : e.attrs) != null && w.thumbnail ? v.dataTransfer.setDragImage(u, 0, 0) : v.dataTransfer.setDragImage(l, 0, 0) }), ((b = (g = n.state) == null ? void 0 : g.doc) == null ? void 0 : b.nodeAt(n.state.doc.nodeSize - 3)) === e && setTimeout(() => { n.dispatch(n.state.tr.insertText("\r", n.state.doc.nodeSize - 2)) }, 0); const m = document.createElement("div"); m.appendChild(this.generateSpinner()); const f = this.generateErrorCover(n, e); return (x = e.attrs) != null && x.error && (i.className = "file-embed-menu-button hidden", o.className = "file-embed-container covered error", o.appendChild(f)), e.startReplacing = () => { m.className = "file-embed-container cover", o.className = "file-embed-container covered", i.className = "file-embed-menu-button disabled", o.contains(f) && o.removeChild(f), o.appendChild(m) }, e.stopReplacing = v => { v ? (i.className = "file-embed-menu-button hidden", o.className = "file-embed-container covered error", o.appendChild(f)) : (o.className = "file-embed-container", i.className = "file-embed-menu-button"), o.removeChild(m) }, a } getFileAttrs(e) { return { href: e.getAttribute("href"), filename: e.getAttribute("filename"), filetype: e.getAttribute("filetype"), filesize: e.getAttribute("filesize"), title: e.getAttribute("title"), dirty: e.getAttribute("dirty"), description: e.getAttribute("description"), error: e.getAttribute("error") } } generateThumbnail(e) { const n = document.createElement("img"); return n.className = `file-embed-thumbnail${e.attrs.thumbnail?"":"-default"}`, n.setAttribute("src", e.attrs.thumbnail || q("/img/attachment_icon.svg")), e.updateThumbnail = (r, ...i) => N(this, [r, ...i], function*(s, a = 400, o = { aspect: "1.5", crop: "fill", gravity: "auto", width: 400, height: 600 }) { if (e.attrs.dirty = !0, !s) { e.attrs.thumbnail = null, n.onload = () => { n.className = "file-embed-thumbnail-default" }, n.src = q("/img/attachment_icon.svg"); return } const c = yield yee(s), l = yield he.post("/api/v1/image").send({ image: c }), u = q(l.body.url, a, o); return e.attrs.thumbnail = u, n.onload = () => { n.className = "file-embed-thumbnail" }, n.src = u, u }), n } generateDetails(e) { const n = document.createElement("div"); n.className = "file-embed-details"; const s = document.createElement("div"); s.className = "file-embed-details-h1", s.innerText = e.attrs.title || e.attrs.filename; const a = document.createElement("div"); return a.className = "file-embed-details-h2", a.innerText = To({ attrs: e.attrs }), n.appendChild(s), n.appendChild(a), e.updateTitle = o => { e.attrs.title = o, e.attrs.dirty = !0, s.innerText = o }, n } generateButton(e) { const n = document.createElement("button"); n.className = `file-embed-button primary mock ${e}`; const s = document.createElement("span"); return s.className = "file-embed-button-text", s.innerText = this.actionButtonText, n.appendChild(s), n } generateDescription(e) { const n = document.createElement("div"); return n.className = "file-embed-description ", n.innerText = e.attrs.description, e.updateDescription = s => { e.attrs.dirty = !0, e.attrs.description = s ? s.trim() : null, n.innerText = s ? s.trim() : null }, n } generateErrorCover(e, n) { var l, u; const s = document.createElement("div"); s.className = "file-embed-container cover error"; const a = document.createElement("div"); a.className = "file-embed-error-inner"; const o = document.createElement("img"); o.className = "file-embed-error-icon", o.setAttribute("src", Xl("/img/alert-circle.svg")); const r = document.createElement("div"); r.className = "file-embed-error-message", r.innerText = (l = n.attrs.error) == null ? void 0 : l.message; const i = document.createElement("div"); i.className = "file-embed-error-button", i.onclick = this.makeReplaceButtonClickHandler(e, n); const c = document.createElement("span"); return c.className = "file-embed-error-button-text", c.innerText = ((u = n.attrs.error) == null ? void 0 : u.button) || "Try again", i.appendChild(c), a.appendChild(o), a.appendChild(r), a.appendChild(i), s.appendChild(a), s } generateSpinner() { const e = document.createElement("div"); e.className = "embed-loader-container"; const n = document.createElement("div"); n.className = "embed-loader"; const s = document.createElement("div"); return s.innerText = "Replacing...", s.className = "embed-loader-text", e.appendChild(n), e.appendChild(s), e } makeReplaceButtonClickHandler(e, n) { return s => { const a = document.createElement("input"); a.className = "sidebar-item-hidden-file-input", a.type = "file", a.oninput = o => { var i; const r = (i = o.target) == null ? void 0 : i.files[0]; e.dispatchEvent({ type: "file_replace", node: n, file: r }) }, document.body.appendChild(a), a.click(), document.body.removeChild(a) } } generateDropdown(e, n, s) { const a = document.createElement("div"); a.className = "post-editor-file-embed-dropdown-container dropdown-container"; const o = document.createElement("div"); o.className = "dropdown-content"; const r = document.createElement("div"); r.className = "dropdown-list", [{ label: "Edit", icon: "edit", onclick: l => { n.dispatchEvent(new CustomEvent("file_edit", { detail: { node: e } })) } }, { label: "Replace", icon: "swap", onclick: this.makeReplaceButtonClickHandler(n, e) }, { label: "Download", icon: "download", onclick: l => { const u = document.createElement("a"); u.href = e.attrs.raw_href, u.download = e.attrs.filename, document.body.appendChild(u); const d = window.onbeforeunload; window.onbeforeunload = null, u.click(), window.onbeforeunload = d, document.body.removeChild(u) } }, { label: "Delete", icon: "trash", onclick: l => { if (typeof s != "function") return; const u = s(); n.dispatch(n.state.tr.delete(u, u + 1)) } }].map(l => { const u = document.createElement("div"); u.className = "dropdown-list-item", u.onclick = l.onclick; const d = document.createElement("div"); d.className = `dropdown-list-item-icon icon-${l.icon}`; const m = document.createElement("span"); return m.className = "dropdown-list-item-text", m.innerText = l.label, u.appendChild(d), u.appendChild(m), u }).forEach(l => { r.appendChild(l) }), o.appendChild(r); const i = document.createElement("div"); i.className = "file-embed-menu-button"; const c = document.createElement("div"); return c.className = "dropdown-icon", c.appendChild(document.createElement("span")), c.appendChild(document.createElement("span")), c.appendChild(document.createElement("span")), c.appendChild(document.createElement("span")), i.appendChild(c), a.appendChild(i), a.appendChild(o), i.onclick = l => { if (o.className === "dropdown-content open") return; o.className = "dropdown-content open", c.className = "dropdown-icon open", i.className = "file-embed-menu-button open"; const u = () => { o.className = "dropdown-content", c.className = "dropdown-icon", i.className = "file-embed-menu-button", document.removeEventListener("click", u) }; setTimeout(() => { document.addEventListener("click", u) }, 0) }, { button: i, menu: a } } generateContainerTop(e) { const n = document.createElement("div"); return n.className = "file-embed-container-top", n.appendChild(this.generateThumbnail(e)), n.appendChild(this.generateDetails(e)), n.appendChild(this.generateButton("wide")), n } } const kee = new ws({ actionButtonText: null, substackType: null, actionButtonAttr: null, mimeTypesToSignature: {} }), _ee = F({ name: "file", nodeSpec: kee.nodeSpec }), ga = new ws({ actionButtonAttr: "href", substackType: "comic", mimeTypesToSignature: Qr, actionButtonText: "Read now" }), Cee = F({ name: "comic", nodeSpec: ga.nodeSpec }), Bd = { attrs: { url: { default: "" }, commentId: { default: null }, comment: { default: null } }, inline: !1, group: "block", draggable: !0, atom: !0, selectable: !0, isolating: !0, defining: !0, parseDOM: [{ tag: "div.comment", getAttrs: t => { var e; if (t instanceof HTMLElement) try { return JSON.parse((e = t.getAttribute("data-attrs")) != null ? e : "") } catch (n) { return !1 } return !1 } }], toDOM: t => { if (typeof window != "undefined") try { const e = document.createElement("div"); return Object.assign(e, { className: "comment", "data-attrs": JSON.stringify(t.attrs) }), Fe(p(Hh, { commentId: t.attrs.commentId }), e), e } catch (e) { return console.error("Error rendering CommentEmbed", e), Oe({ msg: null, node: t, err: e, group: "block" }) } return ml(t) }, toDOMStatic: t => ml(t) }, Eee = F({ name: "comment", nodeSpec: Bd, addCommands() { return { insertComment: t => ({ commands: e }) => e.insertContent({ type: this.name, attrs: t }) } } }); function ml(t) { return ["div", { class: "comment", "data-attrs": JSON.stringify(t.attrs), "data-component-name": "CommentPlaceholder" }] } function Aee(t, { customSchema: e } = {}) { if (e && !e.nodes.comment) return null; const n = lt(t); return n && Zl(n.pathname) ? t : null } function zd(t) { return N(this, null, function*() { const e = (yield Z(() => import ("./sortBy-53166f8e.js").then(r => r.c), ["assets/sortBy-53166f8e.js", "assets/x-933ea65f.js", "assets/tracking-5779d19a.js", "assets/_sentry-release-injection-file-9254565a.js", "assets/FlexBox-8b7f0d6c.js", "assets/FlexBox-644f665d.css", "assets/HoverCard-92fb7948.js", "assets/useResponsive-4f80f3bd.js", "assets/transition-d7aff1cb.js", "assets/_defineProperty-fcca2d9e.js", "assets/react-laag.esm-23de3db0.js", "assets/HoverCard-6364507e.css", "assets/responsive_img-3c51e57a.js", "assets/responsive_img-51b02764.css", "assets/sortBy-a6711bc6.css"])).default, n = lt(t), s = n && Zl(n.pathname); if (!s) return console.warn("pathname did not match"), null; let a; try { const { body: { item: { comment: { id: r, date: i, edited_at: c, body: l, body_json: u, restacks: d, reaction_count: m, attachments: f, name: h, user_id: g, photo_url: b, user_bestseller_tier: x } } } } = yield e.get(`/api/v1/reader/comment/${s.id}`); a = { comment: { id: r, date: i, edited_at: c, body: l, body_json: u, restacks: d, reaction_count: m, attachments: f, name: h, user_id: g, photo_url: b, user_bestseller_tier: x } } } catch (r) { return console.warn(r), null } const o = Pf(s, { urlParams: { utm_source: qe.commentEmbed } }); return S({ url: o, commentId: s.id }, a) }) } function See(n) { return N(this, arguments, function*(t, { customSchema: e } = {}) { const a = (e ? { schema: e } : yield Z(() => Promise.resolve().then(() => Te), void 0)).schema, o = yield zd(t); return o ? a.nodes.comment.create(o) : null }) } function Tee(t) { return N(this, null, function*() { const e = (yield Z(() => import ("./sortBy-53166f8e.js").then(s => s.c), ["assets/sortBy-53166f8e.js", "assets/x-933ea65f.js", "assets/tracking-5779d19a.js", "assets/_sentry-release-injection-file-9254565a.js", "assets/FlexBox-8b7f0d6c.js", "assets/FlexBox-644f665d.css", "assets/HoverCard-92fb7948.js", "assets/useResponsive-4f80f3bd.js", "assets/transition-d7aff1cb.js", "assets/_defineProperty-fcca2d9e.js", "assets/react-laag.esm-23de3db0.js", "assets/HoverCard-6364507e.css", "assets/responsive_img-3c51e57a.js", "assets/responsive_img-51b02764.css", "assets/sortBy-a6711bc6.css"])).default; let n; try { n = (yield e.get("/api/v1/reader/feed/last-note")).body; const a = Bf(n); return zd(a) } catch (s) { return null } }) } function Dee(n) { return N(this, arguments, function*(t, { customSchema: e } = {}) { const a = (e ? { schema: e } : yield Z(() => Promise.resolve().then(() => Te), void 0)).schema, o = yield Tee(); return o ? a.nodes.comment.create(o) : null }) } const qd = { attrs: { url: { default: "" }, subdomain: { default: null }, pub: { default: null } }, inline: !1, group: "block", draggable: !0, atom: !0, selectable: !0, isolating: !0, defining: !0, parseDOM: [{ tag: "div.community-chat", getAttrs: t => { var e; if (t instanceof HTMLElement) try { return JSON.parse((e = t.getAttribute("data-attrs")) != null ? e : "") } catch (n) { return !1 } return !1 } }], toDOM: t => { if (typeof window != "undefined") try { const e = document.createElement("div"); if (Object.assign(e, { className: "community-chat", "data-attrs": JSON.stringify(t.attrs) }), !t.attrs.pub || !t.attrs.subdomain) { const n = document.createElement("div"); return n.innerText = "Could not load subscriber chat link", e.appendChild(n), e } return Fe(p(Gh, { pub: t.attrs.pub, subdomain: t.attrs.subdomain }), e), e } catch (e) { return console.error("Error rendering CommunityChatEmbed", e), Oe({ msg: null, node: t, err: e, group: "block" }) } return fl(t) }, toDOMStatic: t => fl(t) }, Iee = F({ name: "communityChat", nodeSpec: qd, addCommands() { return { insertCommunityChat: t => ({ commands: e }) => e.insertContent({ type: this.name, attrs: t }), insertCommunityChatEmbed: t => ({ commands: e }) => { const n = { url: fr({ pubKey: t.subdomain, utm_source: qe.chatEmbed }), subdomain: t.subdomain, pub: { id: t.id, name: t.name, author_name: t.author_name, author_photo_url: t.author_photo_url } }; return e.insertContent({ type: this.name, attrs: n }) }, insertVisitThreadButton: t => ({ commands: e }) => e.insertCommunityChatEmbed(t) } } }); function fl(t) { return ["div", { class: "community-chat", "data-attrs": JSON.stringify(t.attrs), "data-component-name": "CommunityChatRenderPlaceholder" }] } const Nee = /^https?:\/\/open\.substack\.com(?:\.localhost:5000)?\/pub\/([^\/]+)\/chat(\?.*)?$/, Mee = /^https?:\/\/([^\.]+)\.substack\.com(?:\.localhost:5000)?\/chat(\?.*)?$/, Oee = /^https?:\/\/substack\.com(?:\.localhost:5000)?\/chat\/(\d+)/; function Lee(t, { customSchema: e } = {}) { if (e && !e.nodes.communityChat) return null; const n = lt(t); return n && n.pathname.match(/^(\/pub\/[^\/]+)?\/chat($|\/)/) ? t : null } function Ree(t) { return N(this, null, function*() { const e = (yield Z(() => import ("./sortBy-53166f8e.js").then(o => o.c), ["assets/sortBy-53166f8e.js", "assets/x-933ea65f.js", "assets/tracking-5779d19a.js", "assets/_sentry-release-injection-file-9254565a.js", "assets/FlexBox-8b7f0d6c.js", "assets/FlexBox-644f665d.css", "assets/HoverCard-92fb7948.js", "assets/useResponsive-4f80f3bd.js", "assets/transition-d7aff1cb.js", "assets/_defineProperty-fcca2d9e.js", "assets/react-laag.esm-23de3db0.js", "assets/HoverCard-6364507e.css", "assets/responsive_img-3c51e57a.js", "assets/responsive_img-51b02764.css", "assets/sortBy-a6711bc6.css"])).default; let n = Bee(t), s = null; try { if (n) { const { body: o } = yield e.get("/api/v1/publication/chat-embed").query({ subdomain: n, url: t }); s = o } else { const o = zee(t); if (o) { const r = yield e.get(`/api/v1/publication/public/${o}`); s = r.body.pub, n = r.body.pub.subdomain } } } catch (o) {} return s ? { url: fr({ pubKey: s.subdomain, utm_source: qe.chatEmbed }), subdomain: n, pub: s } : null }) } function Pee(n) { return N(this, arguments, function*(t, { customSchema: e } = {}) { const a = (e ? { schema: e } : yield Z(() => Promise.resolve().then(() => Te), void 0)).schema, o = yield Ree(t); return o ? a.nodes.communityChat.create(o) : null }) } function Bee(t) { let e = t.match(Nee); return !e && (e = t.match(Mee), !e) ? null : e[1] } function zee(t) { const e = t.match(Oee); return e ? e[1] : null } const qee = ({ node: t }) => { const { attrs: e } = t; return p(wt, null, p(ku, { postId: e.postId })) }, Fd = { attrs: { url: { default: "" }, postId: { default: null }, communityPost: { default: null }, author: { default: null } }, inline: !1, group: "block", draggable: !0, atom: !0, selectable: !0, isolating: !0, defining: !0, parseDOM: [{ tag: "div.community-post", getAttrs: t => { var e; if (t instanceof HTMLElement) try { return JSON.parse((e = t.getAttribute("data-attrs")) != null ? e : "") } catch (n) { return !1 } return !1 } }], toDOM: t => { if (typeof window != "undefined") try { const e = document.createElement("div"); return Object.assign(e, { className: "community-post", "data-attrs": JSON.stringify(t.attrs) }), Fe(p(ku, { postId: t.attrs.postId }), e), e } catch (e) { return console.error("Error rendering CommunityPostEmbed", e), Oe({ msg: null, node: t, err: e, group: "block" }) } return hl(t) }, toDOMStatic: t => hl(t) }, Fee = F({ name: "communityPost", nodeSpec: Fd, addCommands() { return { insertCommunityPost: t => ({ commands: e }) => e.insertContent({ type: this.name, attrs: t }) } }, addNodeView() { return kt(qee) } }); function hl(t) { return ["div", { class: "community-post", "data-attrs": JSON.stringify(t.attrs), "data-component-name": "CommunityPostPlaceholder" }] } const jd = /^\/chat(?:\/\d+)?\/posts?\/([-A-Fa-f0-9]+)$/; function jee(t, { customSchema: e } = {}) { if (e && !e.nodes.communityPost) return null; const n = lt(t); return n && n.pathname.match(jd) ? t : null } function $ee(t) { return N(this, null, function*() { var w, E; const e = (yield Z(() => import ("./sortBy-53166f8e.js").then(_ => _.c), ["assets/sortBy-53166f8e.js", "assets/x-933ea65f.js", "assets/tracking-5779d19a.js", "assets/_sentry-release-injection-file-9254565a.js", "assets/FlexBox-8b7f0d6c.js", "assets/FlexBox-644f665d.css", "assets/HoverCard-92fb7948.js", "assets/useResponsive-4f80f3bd.js", "assets/transition-d7aff1cb.js", "assets/_defineProperty-fcca2d9e.js", "assets/react-laag.esm-23de3db0.js", "assets/HoverCard-6364507e.css", "assets/responsive_img-3c51e57a.js", "assets/responsive_img-51b02764.css", "assets/sortBy-a6711bc6.css"])).default, n = lt(t), s = n && ((w = n.pathname.match(jd)) == null ? void 0 : w[1]); if (!s) return null; let a; try { a = (yield e.get(`/api/v1/community/posts/${s}`)).body } catch (_) { if (_ instanceof Error) { const k = _.response; if (k.status === 402 && ((E = k.body) != null && E.status)) a = k == null ? void 0 : k.body; else return null } else return null } const { user: o, communityPost: { id: r, publication_id: i, body: c, audience: l, type: u, media_assets: d, link_url: m, threadMediaUploads: f }, status: h } = a; let g = { author: o }; const b = f != null && f.length ? f[0].mediaUpload : null; l === "all_subscribers" && (!h || h === "FREE_SUBSCRIPTION_REQUIRED") && (g = P(S({}, g), { communityPost: { id: r, publication_id: i, body: c, audience: l, type: u, media_assets: d, threadMediaUploads: b ? [{ mediaUpload: b }] : [], link_url: m ? yt(m, { utm_source: qe.postEmbed }) : null } })); const x = zf({ postId: s, utm_source: qe.threadEmbed }); return S({ url: x, postId: s }, g) }) } function Uee(n) { return N(this, arguments, function*(t, { customSchema: e } = {}) { const a = (e ? { schema: e } : yield Z(() => Promise.resolve().then(() => Te), void 0)).schema, o = yield $ee(t); return o ? a.nodes.communityPost.create(o) : null }) } const $d = { content: "text*", group: "block", draggable: !1, selectable: !0, isolating: !0, defining: !0, atom: !1, parseDOM: [{ tag: "p.cta-caption" }], toDOM: () => ["p", { class: "cta-caption" }, 0] }, Vee = F({ name: "ctaCaption", nodeSpec: $d }), Ud = { attrs: { url: { default: "" }, thumbnail_url: { default: "" }, height: { default: "" }, title: { default: "" }, description: { default: "" } }, inline: !1, group: "block", draggable: !0, atom: !0, selectable: !0, isolating: !0, defining: !0, parseDom: [{ tag: "div.datawrapper-wrap", getAttrs: re }], toDOM: t => Vd(t), toDOMStatic: t => Xee(t) }, Hee = F({ name: "datawrapper", nodeSpec: Ud, addCommands() { return { insertDatawrapper: t => ({ commands: e }) => e.insertContent({ type: this.name, attrs: t }) } } }), Gee = /^.*https?:\/\/datawrapper\.dwcdn\.net\/.*$/, Wee = /^.*https?:\/\/(www\.)?datawrapper.de\/_\/.*$/, Jee = t => { const e = Gee.exec(t); if (e) return e[0]; const n = Wee.exec(t); return n && n[0] }, Yee = t => N(void 0, null, function*() { return (yield(yield Z(() => import ("./sortBy-53166f8e.js").then(a => a.c), ["assets/sortBy-53166f8e.js", "assets/x-933ea65f.js", "assets/tracking-5779d19a.js", "assets/_sentry-release-injection-file-9254565a.js", "assets/FlexBox-8b7f0d6c.js", "assets/FlexBox-644f665d.css", "assets/HoverCard-92fb7948.js", "assets/useResponsive-4f80f3bd.js", "assets/transition-d7aff1cb.js", "assets/_defineProperty-fcca2d9e.js", "assets/react-laag.esm-23de3db0.js", "assets/HoverCard-6364507e.css", "assets/responsive_img-3c51e57a.js", "assets/responsive_img-51b02764.css", "assets/sortBy-a6711bc6.css"])).default.get("/api/v1/datawrapper-embed").query({ url: t.trim() })).body }), Kee = (n, ...s) => N(void 0, [n, ...s], function*(t, { customSchema: e } = {}) { return (e ? { schema: e } : yield Z(() => Promise.resolve().then(() => Te), void 0)).schema.nodes.datawrapper.create(yield Yee(t)) }), Xee = (t, {} = {}) => { const e = document.createElement("div"); e.className = "datawrapper-wrap static", e.setAttribute("data-component-name", "DatawrapperToDOMStatic"), t.attrs.thumbnail_url; const n = document.createElement("a"); if (n.href = t.attrs.url.replace(/embed\//, ""), n.setAttribute("target", "_blank"), t.attrs.title) { const o = document.createElement("div"); o.className = "datawrapper-title", o.innerHTML = t.attrs.title, e.appendChild(o) } if (t.attrs.description) { const o = document.createElement("div"); o.className = "datawrapper-description", o.innerHTML = t.attrs.description, e.appendChild(o) } const s = document.createElement("div"), a = document.createElement("img"); return a.className = "datawrapper-wrap thumbnail", a.src = q(t.attrs.thumbnail_url, 640), a.style.backgroundImage = `url(${t.attrs.thumbnail_url})`, t.attrs.belowTheFold && a.setAttribute("loading", "lazy"), n.append(a), s.append(n), e.appendChild(s), e }, Vd = t => { const e = document.createElement("div"); e.id = "datawrapper-iframe", e.className = "datawrapper-wrap outer", e.dataset.attrs = JSON.stringify(t.attrs), e.setAttribute("data-component-name", "DatawrapperToDOM"); const n = document.createElement("iframe"); n.id = "iframe-datawrapper", n.className = "datawrapper-iframe", n.src = t.attrs.url, n.width = "730", n.height = t.attrs.height || "455", n.frameBorder = "0", n.scrolling = "no", t.attrs.belowTheFold && n.setAttribute("loading", "lazy"), e.appendChild(n); const s = document.createElement("script"); return s.type = "text/javascript", s.text = Wh, e.appendChild(s), e }; class Zee { constructor(e) { const n = Vd(e), s = n.querySelector(".datawrapper-iframe"), a = document.createElement("div"); a.className = "datawrapper-screen", a.addEventListener("dblclick", () => { a.classList.add("sunken"), s.focus() }), s.addEventListener("blur", () => { a.classList.remove("sunken") }), n.appendChild(a), this.dom = n } } const si = new ws({ actionButtonAttr: null, substackType: "ebook", mimeTypesToSignature: ei, actionButtonText: null }), Qee = F({ name: "ebook", nodeSpec: si.nodeSpec }), ete = ({ label: t, mediaUploadId: e, duration: n }) => (s, a) => (a && a(ie(s, s.schema.nodes.audio.create({ label: t, mediaUploadId: e, duration: n, isEditorNode: !0 }))), !0), tte = Pe.create({ name: "audioInsert", addCommands() { return { insertAudio: ({ label: t, mediaUploadId: e, duration: n }) => ({ state: s, dispatch: a }) => ete({ label: t, mediaUploadId: e, duration: n })(s, a) } } }), nte = t => (e, n) => { const { iString: s } = I18N.i({ pub: t }); if (!Le(e, e.schema.nodes.button)) return !1; const a = { url: `${ce.CHECKOUT_URL}&donate=true`, text: s("Donate Subscriptions") }; return n && n(ie(e, e.schema.nodes.button.create(a))), !0 }, ste = t => (e, n) => { const { iString: s } = I18N.i({ pub: t }); if (!Le(e, e.schema.nodes.button)) return !1; const a = { url: `${ce.LEADERBOARD_URL}&utm_source=${qe.post}`, text: s("Refer a friend") }; return n && n(ie(e, e.schema.nodes.button.create(a))), !0 }, ate = ({ writerReferralCode: t, publication: e, postId: n }) => (s, a) => { const { iString: o, iTemplate: r } = I18N.i({ pub: e }); if (!Le(s, s.schema.nodes.button)) return !1; const i = r `Start writing today. Use the button below to create your Substack and connect your publication with ${e.name}`, c = { url: `${Yl(t||"")}?utm_source=${qe.substack}&utm_context=${Kl.post}&utm_content=${n}&utm_campaign=${Ut.writerReferralButton}`, text: o("Start a Substack") }, l = s.schema.nodes.captionedWriterReferralButton.create(c, s.schema.nodes.ctaCaption.create(null, [s.schema.text(i)])); return a && a(ie(s, l)), !0 }, ote = t => (e, n) => { const { iString: s } = I18N.i({ pub: t }); if (!Le(e, e.schema.nodes.button)) return !1; const a = { url: ce.HALF_MAGIC_COMMENTS_URL, text: s("Leave a comment") }; return n && n(ie(e, e.schema.nodes.button.create(a))), !0 }, rte = (t, e, n) => (s, a) => { if (se(ae.READER_SURVEY_LINKED_IN_POST, { editorVersion: "1", surveyId: e.id }), !Le(s, s.schema.nodes.button)) return !1; const o = { url: `${Wl(t,e.id)}`, text: n }; return a && a(ie(s, s.schema.nodes.button.create(o))), !0 }, ite = t => (e, n) => { const { iString: s } = I18N.i({ pub: t }); if (!Le(e, e.schema.nodes.button)) return !1; const a = { url: ce.SHARE_URL, text: s("Share") }; return n && n(ie(e, e.schema.nodes.button.create(a))), !0 }, cte = t => (e, n) => { const { iTemplate: s } = I18N.i({ pub: t }); if (!Le(e, e.schema.nodes.button)) return !1; const a = { url: ce.SHARE_PUB_URL, text: s `Share ${t.name}` }; return n && n(ie(e, e.schema.nodes.button.create(a))), !0 }, lte = ({ couponPub: t, scrollParent: e, parentClass: n, get_coupons: s, insert_coupon: a, SelectField: o, openPrompt: r, closePrompt: i, getNetworkErrorMessage: c }) => (l, u, d) => { const { iString: m } = I18N.i({ pub: t }); if (!Le(l, l.schema.nodes.button)) return !1; const f = { parentClass: n, root: e ? document.querySelector(`.${e}`) : d.dom.parentNode, scrollParent: e, offsetTop: 10 }, h = Object.assign({ title: m("Loading..."), no_buttons: !0, language: t.language }, f); return r(h), s().then(g => { i(h); const x = g.map(E => { var _; return { label: (_ = E.name) != null ? _ : "", value: E } }).concat([{ label: m("Create new offer"), value: { create_new: !0 } }]), v = { coupon: new o({ label: m("Select offer..."), required: !0, options: x, onChange: E => { if (E && "create_new" in E && E.create_new) { i(w); const _ = window.open(`${rt(t)}/publish/offers/new?popup=true`, "_blank"); _ && _.addEventListener && _.addEventListener("message", ({ data: k }) => { k && k.coupon && a({ coupon: k.coupon, state: l, dispatch: u, schema: l.schema }) }, !1) } } }) }, w = Object.assign({ title: m("Special Offer"), fields: v, language: t == null ? void 0 : t.language, onSubmit: ({ coupon: E }) => { a({ coupon: E, state: l, dispatch: d.dispatch, schema: l.schema }) }, onClose: () => { d.focus() } }, f); r(w) }).catch(g => { i(h), alert(c(g)) }), !1 }, ute = ({ scrollParent: t, parentClass: e, TextField: n, openPrompt: s, publication: a }) => (o, r, i) => { const { iString: c } = I18N.i({ pub: a }); if (!Le(o, o.schema.nodes.button)) return !1; const l = { parentClass: e, title: c("Create a button"), root: t ? document.querySelector(`.${t}`) : i.dom.parentNode, scrollParent: t, offsetTop: 10, language: a == null ? void 0 : a.language, fields: { text: new n({ label: c("Enter text..."), required: !0, clean: u => (u || "").trim(), validate: u => { if (u.length > 40) return c("Too long") } }), href: new n({ label: c("Enter URL..."), required: !0, clean: u => (u || "").trim(), validate: u => { if (!/^%%.*%%$/.test(u)) { try { const d = new URL(u); if (["http:", "https:", "mailto:"].includes(d.protocol)) return } catch (d) { console.error("Failed to parse URL:", d) } return c("Invalid URL") } } }) } }; return l.onSubmit = u => { const d = { url: u.href, text: u.text }; r && i.dispatch(ie(o, o.schema.nodes.button.create(d))) }, l.onClose = () => { i.focus() }, s(l), !0 }, pte = ({ publication: t }) => (e, n) => { const { iTemplate: s } = I18N.i({ pub: t }); if (!Le(e, e.schema.nodes.button)) return !1; const a = t.default_group_coupon, o = { url: `${ce.CHECKOUT_URL}group=true${a?`&coupon=${a}`:""}`, text: Cn(t, () => a && t.default_group_coupon_percent_off ? s `Get ${t.default_group_coupon_percent_off.split(".")[0]}% off a group subscription` : s `Get a group subscription`, r => a && t.default_group_coupon_percent_off ? `Get ${t.default_group_coupon_percent_off.split(".")[0]}% off a group ${r.subscription}` : `Get a group ${r.subscription}`) }; return n && n(ie(e, e.schema.nodes.button.create(o))), !0 }, dte = t => (e, n) => { const { iTemplate: s } = I18N.i({ pub: t }); if (!Le(e, e.schema.nodes.button)) return !1; const a = { url: `${ce.CHECKOUT_URL}&gift=true`, text: Cn(t, () => s `Give a gift subscription`, o => `Give a gift ${o.subscription}`) }; return n && n(ie(e, e.schema.nodes.button.create(a))), !0 }, mte = t => (e, n) => { if (!Le(e, e.schema.nodes.button)) return !1; const s = { url: ce.CHECKOUT_URL, text: _n(t, { now: !0 }), language: t.language }; return n && n(ie(e, e.schema.nodes.button.create(s))), !0 }, fte = t => (e, n) => { const { iTemplate: s } = I18N.i({ pub: t }); if (!Le(e, e.schema.nodes.button)) return !1; const a = t.payments_state !== "enabled" ? s `Thanks for reading ${t.name}! Subscribe for free to receive new posts and support my work.` : s `${t.name} is a reader-supported publication. To receive new posts and support my work, consider becoming a free or paid subscriber.`, o = { url: ce.CHECKOUT_URL, text: _n(t), language: t.language }, r = e.schema.nodes.subscribeWidget.create(o, [e.schema.nodes.ctaCaption.create(null, [e.schema.text(a)])]); return n && n(ie(e, r)), !0 }, hte = t => (e, n) => { const { iString: s, iTemplate: a } = I18N.i({ pub: t }); if (!Le(e, e.schema.nodes.button)) return !1; const o = a `Thank you for reading ${t.name}. This post is public so feel free to share it.`, r = { url: ce.SHARE_URL, text: s("Share") }, i = e.schema.nodes.captionedShareButton.create(r, e.schema.nodes.ctaCaption.create(null, [e.schema.text(o)])); return n && n(ie(e, i)), !0 }, ole = t => (e, n) => { const { tr: s } = e, { iTemplate: a } = I18N.i({ pub: t }); if (!Le(e, e.schema.nodes.button)) return !1; const o = t.payments_state !== "enabled" ? a `Thanks for reading ${t.name}! Subscribe for free to receive new posts and support my work.` : a `${t.name} is a reader-supported publication. To receive new posts and support my work, consider becoming a free or paid subscriber.`, r = { url: ce.CHECKOUT_URL, text: _n(t), language: t.language }; let i = 0, c = null; return e.doc.descendants((l, u) => { var d; return ((d = l.type) == null ? void 0 : d.name) === "paragraph" && (i++, i === 2 && (c = u + l.nodeSize)), !1 }), i >= 5 && c !== null && s.insert(c, e.schema.nodes.subscribeWidget.create(r, [e.schema.nodes.ctaCaption.create(null, [e.schema.text(o)])])), s.insert(s.doc.content.size, e.schema.nodes.subscribeWidget.create(r, [e.schema.nodes.ctaCaption.create(null, [e.schema.text(o)])])), n && n(s), !0 }; function gte(t) { return (e, n) => Le(e, e.schema.nodes.communityChat) ? (n && n(ie(e, e.schema.nodes.communityChat.create({ url: fr({ pubKey: t.subdomain, utm_source: qe.chatEmbed }), subdomain: t.subdomain, pub: { id: t.id, name: t.name, author_name: t.author_name, author_photo_url: t.author_photo_url } }))), !0) : !1 } const bte = Pe.create({ name: "buttonCustom", addCommands() { return { insertSubscribeButton: t => ({ state: e, dispatch: n }) => mte(t)(e, n), insertSubscribeButtonWithPreamble: t => ({ state: e, dispatch: n }) => fte(t)(e, n), insertCaptionedShareButton: t => ({ state: e, dispatch: n }) => hte(t)(e, n), insertSpecialOfferButton: ({ couponPub: t, scrollParent: e, parentClass: n, get_coupons: s, insert_coupon: a, SelectField: o, openPrompt: r, closePrompt: i, getNetworkErrorMessage: c }) => ({ state: l, dispatch: u, view: d }) => lte({ couponPub: t, scrollParent: e, parentClass: n, get_coupons: s, insert_coupon: a, SelectField: o, openPrompt: r, closePrompt: i, getNetworkErrorMessage: c })(l, u, d), insertGroupSubscriptionButton: ({ publication: t }) => ({ state: e, dispatch: n }) => pte({ publication: t })(e, n), insertDonateButton: t => ({ state: e, dispatch: n }) => nte(t)(e, n), insertReferralButton: t => ({ state: e, dispatch: n }) => ste(t)(e, n), insertCaptionedWriterReferralButton: t => ({ state: e, dispatch: n }) => ate({ writerReferralCode: t.writerReferralCode, publication: t.publication, postId: t.postId })(e, n), insertGiftButton: t => ({ state: e, dispatch: n }) => dte(t)(e, n), insertCommentsButton: t => ({ state: e, dispatch: n }) => ote(t)(e, n), insertSurveyButton: (t, e, n) => ({ state: s, dispatch: a }) => rte(t, e, n)(s, a), insertSharePubButton: t => ({ state: e, dispatch: n }) => cte(t)(e, n), insertSharePostButton: t => ({ state: e, dispatch: n }) => ite(t)(e, n), insertCustomButton: ({ scrollParent: t, parentClass: e, TextField: n, openPrompt: s, publication: a }) => ({ state: o, dispatch: r, view: i }) => ute({ scrollParent: t, parentClass: e, TextField: n, openPrompt: s, publication: a })(o, r, i), insertVisitThreadButton: t => ({ state: e, dispatch: n }) => gte(t)(e, n) } } }), vte = t => (e, n) => { const s = rt(t); return n && n(ie(e, e.schema.nodes.install_substack_app.create({ logo_url: t.logo_url || `${s}/img/substack.png`, author_name: t.author_name, publication_subdomain: t.subdomain, publication_name: t.name, language: t.language }))), !0 }, xte = Pe.create({ name: "embedContentCustom", addCommands() { return { insertInstallSubstackAppEmbed: t => ({ state: e, dispatch: n }) => vte(t)(e, n) } } }), Hd = { attrs: { innerHTML: { default: "" }, stylesheet: { default: "" } }, untrackedAttrs: ["innerHTML", "stylesheet"], inline: !1, group: "block", draggable: !0, atom: !0, selectable: !0, isolating: !0, defining: !0, parseDOM: [{ tag: "div.github-gist", getAttrs: re }], toDOMStatic: t => gl(t, !0), toDOM: t => gl(t, !1) }, yte = F({ name: "gitgist", nodeSpec: Hd, addCommands() { return { insertGithubGist: t => ({ commands: e }) => e.insertContent({ type: this.name, attrs: t }) } } }), Gd = /(https?:\/\/gist.github.com\/([^\s]*\/[^\s\.#]*)([\.#][^\s]*)?)/, wte = (t, { customSchema: e } = {}) => { if (e && !e.nodes.gitgist) return null; const n = Gd.exec(t); return n && n[1] }, kte = t => { const e = t.match(Gd); return e && e[2] ? e[2] : null }, _te = t => N(void 0, null, function*() { const e = kte(t); return (yield(yield Z(() => import ("./sortBy-53166f8e.js").then(o => o.c), ["assets/sortBy-53166f8e.js", "assets/x-933ea65f.js", "assets/tracking-5779d19a.js", "assets/_sentry-release-injection-file-9254565a.js", "assets/FlexBox-8b7f0d6c.js", "assets/FlexBox-644f665d.css", "assets/HoverCard-92fb7948.js", "assets/useResponsive-4f80f3bd.js", "assets/transition-d7aff1cb.js", "assets/_defineProperty-fcca2d9e.js", "assets/react-laag.esm-23de3db0.js", "assets/HoverCard-6364507e.css", "assets/responsive_img-3c51e57a.js", "assets/responsive_img-51b02764.css", "assets/sortBy-a6711bc6.css"])).default.get("/api/v1/github/gist").query({ id: e })).body }), Cte = (n, ...s) => N(void 0, [n, ...s], function*(t, { customSchema: e } = {}) { return (e ? { schema: e } : yield Z(() => Promise.resolve().then(() => Te), void 0)).schema.nodes.gitgist.create(yield _te(t)) }); function gl(t, e) { const n = document.createElement("div"); n.classList.add("github-gist"), e ? n.setAttribute("data-component-name", "GitgistToDOMStatic") : (n.dataset.attrs = JSON.stringify(t.attrs), n.setAttribute("data-component-name", "GitgistToDOM")), n.innerHTML = bt(t.attrs.innerHTML, { allowedTags: bt.defaults.allowedTags, allowedAttributes: Object.assign({}, bt.defaults.allowedAttributes, { "*": ["href", "style", "id", "data-*", "itemprop", "class"] }) }); const s = document.createElement("link"); if (s.rel = "stylesheet", s.href = t.attrs.stylesheet, n.prepend(s), e) { n.classList.add("static"); const a = n.getElementsByTagName("td"); for (let o = 0; o < a.length; o++) { const r = a[o]; r.dataset.lineNumber ? (r.innerHTML = r.dataset.lineNumber, r.align = "right") : (r.align = "left", r.innerHTML = `
${r.innerHTML}
`), r.classList.add("content"), r.height = "20px" } } return n } const rr = t => t.attrs.fullscreen ? "full" : t.attrs.imageSize || "normal", Wd = { attrs: { src: { default: "" }, srcNoWatermark: { default: null }, fullscreen: { default: null }, imageSize: { default: null }, height: { default: null }, width: { default: null }, resizeWidth: { default: null }, bytes: { default: null }, alt: { default: null }, title: { default: null }, type: { default: null }, href: { default: null }, belowTheFold: { default: !1 }, topImage: { default: !1 }, internalRedirect: { default: null } }, inline: !1, atom: !0, group: "block", draggable: !0, selectable: !0, isolating: !0, defining: !0, parseDOM: [{ tag: "p", priority: 100, getAttrs: t => { if (t.textContent.trim()) return !1; const [e] = t.getElementsByTagName("img"); return e ? Dn(e) : !1 } }, { tag: "img[src]", getAttrs: t => t.getAttribute("height") && Number(t.getAttribute("height")) <= 1 || t.getAttribute("width") && Number(t.getAttribute("width")) <= 1 ? !1 : Dn(t) }], toDOM: t => { try { const e = wn(t), n = rr(t), s = Ri.map(v => ({ width: v, imageSrc: wn(t, { maxWidth: v }) })), a = Ri.map(v => ({ width: v, imageSrc: wn(t, { maxWidth: v, imageProps: { format: "webp" } }) })); let o, r; if (t.attrs.height && t.attrs.width) switch (o = t.attrs.height, r = t.attrs.width, t.attrs.resizeWidth ? (o = t.attrs.resizeWidth * o / r, r = t.attrs.resizeWidth) : Js(t.attrs) && r < Ds && (o *= Ds / r, r = Ds), n) { case "full": r = Math.min(r, hr); break } const i = 240, c = 4, l = t.attrs.width / t.attrs.height, u = t.attrs.resizeWidth ? t.attrs.resizeWidth / l : t.attrs.height, d = t.attrs.resizeWidth ? t.attrs.resizeWidth / u : l; let m = !(t.attrs.href && t.attrs.href != t.attrs.src); m = m && t.attrs.height > i && u > i, m = m && l < c && d < c; const f = typeof window == "undefined"; let h; t.attrs.href ? h = Ql(t.attrs.href) ? q(t.attrs.href) : t.attrs.href : h = q(t.attrs.src); const g = document.createElement("div"), b = m ? "image-link is-viewable-img image2" : "image-link image2"; return m && f && (g.className = "image-link-expand", ur(p(Ab, { size: 20 }), g)), ["a", { class: b, target: "_blank", href: h, "data-component-name": "Image2ToDOM" }, ["div", { class: `image2-inset${n==="full"?" image2-full-screen":""}` }, ["picture", {}, ["source", { type: "image/webp", srcset: a.map(v => `${v.imageSrc} ${v.width}w`).join(", "), sizes: "100vw" }], ["img", { src: e, width: n === "full" ? void 0 : r, height: n === "full" ? void 0 : o, "data-attrs": JSON.stringify(t.attrs), class: n === "full" ? "sizing-fullscreen" : n === "large" ? "sizing-large" : "sizing-normal", alt: t.attrs.alt || "", title: t.attrs.title || t.attrs.alt, srcset: s.map(v => `${v.imageSrc} ${v.width}w`).join(", "), sizes: "100vw", loading: t.attrs.belowTheFold ? "lazy" : null, fetchpriority: t.attrs.topImage ? "high" : null }] ], g ] ] } catch (e) { return console.error("Error rendering Maximize2", e), Oe({ msg: null, node: t, err: e, group: "block" }) } }, toDOMStatic: t => { const e = rr(t), n = t.attrs.href || t.attrs.internalRedirect || q(t.attrs.src, void 0, { quality: e === "normal" ? "auto:good" : "auto:best" }); if (t.attrs.height && t.attrs.width && e !== "full") { const { width: a, height: o } = t.attrs; let r = a; t.attrs.resizeWidth ? r = t.attrs.resizeWidth : Js(t.attrs) && (r = Math.min(Math.max(a, Ds), Ff)); const i = Math.min(r, Is), c = bl(a, o, i), l = r > Is, u = { "data-attrs": JSON.stringify(t.attrs), alt: t.attrs.alt || "", title: t.attrs.title || t.attrs.alt, width: i, height: c, class: l ? "wide-image" : "", src: q(t.attrs.src, !Js(t.attrs) && l ? r * 2 : r, { lossy: Ws(t.attrs) }) }; return ["table", { class: "image-wrapper", width: "100%", border: "0", cellSpacing: "0", cellPadding: "0", "data-component-name": "Image2ToDOMStatic" }, ["tr", {}, ["td"], ["td", { align: "left", class: "content", width: r }, ["a", { class: "image-link", target: "_blank", href: n }, ["img", u] ] ], ["td"] ] ] } else if (e === "full") { const a = q(t.attrs.src, Is * 2, { lossy: Ws(t.attrs), crop: "limit", aspect: e === "full" ? "1" : void 0 }); return ["a", { class: "image-link", target: "_blank", href: n }, ["img", { src: a, "data-attrs": JSON.stringify(t.attrs), alt: t.attrs.alt || "", title: t.attrs.title || t.attrs.alt, height: t.attrs.height, width: t.attrs.width }] ] } const s = q(t.attrs.src, Is * 2, { lossy: Ws(t.attrs) }); return ["a", { class: "image-link", target: "_blank", href: n }, ["img", { src: s, "data-attrs": JSON.stringify(t.attrs), alt: t.attrs.alt || "", title: t.attrs.title || t.attrs.alt, width: t.attrs.resizeWidth || t.attrs.width, height: t.attrs.resizeWidth ? bl(t.attrs.width, t.attrs.height, t.attrs.resizeWidth) : t.attrs.height }] ] } }, Ete = F({ name: "image2", nodeSpec: Wd }), Dn = (t, e, { bytes: n, internalRedirect: s } = {}) => { const a = t.getAttribute("data-attrs"); if (a) try { return JSON.parse(a) } catch (l) {} let o; t.getAttribute("imageSize") && (o = t.getAttribute("imageSize")); let r, i; const c = t.getAttribute("style"); if (c) { const l = /max-height:\s*(\d+)px/.exec(c); l && (r = Number(l[1])); const u = /max-width:\s*(\d+)px/.exec(c); u && (i = Number(u[1])) } else t.getAttribute("width") && t.getAttribute("height") && (r = Number(t.getAttribute("height")), i = Number(t.getAttribute("width"))); return t.complete && t.naturalHeight && t.naturalWidth && (r = t.naturalHeight, i = t.naturalWidth), { src: qf(t.getAttribute("data-medium-file") || t.getAttribute("src")), type: e, title: t.getAttribute("title"), alt: t.getAttribute("alt"), height: r, width: i, bytes: n, internalRedirect: s, imageSize: o, href: t.getAttribute("href") } }, wn = (t, { maxWidth: e = null, imageProps: n = {} } = {}) => { const s = rr(t); let a = s === "full" ? Bo * 2 : s === "large" ? zo * 2 : hr * 2; return e && (a = Math.min(e, a)), q(t.attrs.src, a, S({ lossy: Ws(t.attrs) }, n)) }, Ate = (t, { customSchema: e } = {}) => { if (e && !e.nodes.image2) return null; const n = /(https?:\/\/(giphy\.com\/gifs|gph.is\/g|media\d*\.giphy\.com\/media)\/[^\s]+)/.exec(t); return n && n[1] }, Ste = t => N(void 0, null, function*() { const e = (yield Z(() => import ("./sortBy-53166f8e.js").then(o => o.c), ["assets/sortBy-53166f8e.js", "assets/x-933ea65f.js", "assets/tracking-5779d19a.js", "assets/_sentry-release-injection-file-9254565a.js", "assets/FlexBox-8b7f0d6c.js", "assets/FlexBox-644f665d.css", "assets/HoverCard-92fb7948.js", "assets/useResponsive-4f80f3bd.js", "assets/transition-d7aff1cb.js", "assets/_defineProperty-fcca2d9e.js", "assets/react-laag.esm-23de3db0.js", "assets/HoverCard-6364507e.css", "assets/responsive_img-3c51e57a.js", "assets/responsive_img-51b02764.css", "assets/sortBy-a6711bc6.css"])).default, n = "image/gif", s = yield e.get("/api/v1/giphy").query({ url: t }), a = yield new Promise(o => Ks(wn({ attrs: { type: n, src: s.body.url } }), o)); return Dn(a, n, { bytes: s.body.bytes }) }), Tte = (n, ...s) => N(void 0, [n, ...s], function*(t, { customSchema: e } = {}) { return (e ? { schema: e } : yield Z(() => Promise.resolve().then(() => Te), void 0)).schema.nodes.image2.create(yield Ste(t)) }); function Ws(t) { return Js(t) && (!t.bytes || t.bytes > 5e6) } function Js(t) { return !!(t.type && t.type === "image/gif" || t.src && t.src.split("?")[0].split("#")[0].endsWith(".gif")) } function bl(t, e, n) { return e * n / t } const Dte = /[@#][\w.]+|\n/g, Jd = { attrs: { instagram_id: { default: "" }, title: { default: "" }, author_name: { default: "" }, thumbnail_url: { default: "" }, timestamp: { default: "" }, belowTheFold: { default: !1 } }, inline: !1, group: "block", draggable: !0, atom: !0, selectable: !0, isolating: !0, defining: !0, parseDOM: [{ tag: "div.instagram", getAttrs: re }], toDOM: t => { const e = document.createElement("div"); e.className = "instagram", e.setAttribute("data-attrs", JSON.stringify(t.attrs)), e.setAttribute("data-component-name", "InstagramToDOM"); const n = document.createElement("div"); n.className = "instagram-top-bar", e.appendChild(n); const s = document.createElement("a"); s.className = "instagram-author-name", s.href = Yd(t.attrs.author_name), s.target = "_blank", s.textContent = t.attrs.author_name, n.appendChild(s); const a = document.createElement("a"); a.className = "instagram-image", a.href = Ote(t.attrs.instagram_id), a.target = "_blank", e.appendChild(a); const o = document.createElement("img"); o.src = q(t.attrs.thumbnail_url, 640), t.attrs.belowTheFold && o.setAttribute("loading", "lazy"), a.appendChild(o); const r = document.createElement("div"); r.className = "instagram-bottom-bar", e.appendChild(r); const i = document.createElement("div"); if (i.className = "instagram-title", Bte(t.attrs.title, i), r.appendChild(i), t.attrs.timestamp) { const c = document.createElement("div"); c.className = "instagram-timestamp", c.textContent = eu(t.attrs.timestamp).format("MMMM D, YYYY"), r.appendChild(c) } return e } }, Ite = F({ name: "instagram", nodeSpec: Jd, addCommands() { return { insertInstagram: t => ({ commands: e }) => e.insertContent({ type: this.name, attrs: t }) } } }), Nte = (t, { customSchema: e } = {}) => e && !e.nodes.instagram ? null : Kd(t)[1], Mte = t => Kd(t)[0], Ote = t => `https://instagram.com/p/${t}`, Yd = t => `https://instagram.com/${t}`, Lte = t => `https://instagram.com/explore/tags/${t.substr(1)}/`, Rte = t => N(void 0, null, function*() { return (yield(yield Z(() => import ("./sortBy-53166f8e.js").then(a => a.c), ["assets/sortBy-53166f8e.js", "assets/x-933ea65f.js", "assets/tracking-5779d19a.js", "assets/_sentry-release-injection-file-9254565a.js", "assets/FlexBox-8b7f0d6c.js", "assets/FlexBox-644f665d.css", "assets/HoverCard-92fb7948.js", "assets/useResponsive-4f80f3bd.js", "assets/transition-d7aff1cb.js", "assets/_defineProperty-fcca2d9e.js", "assets/react-laag.esm-23de3db0.js", "assets/HoverCard-6364507e.css", "assets/responsive_img-3c51e57a.js", "assets/responsive_img-51b02764.css", "assets/sortBy-a6711bc6.css"])).default.get(`/api/v1/instagram/post/${Mte(t)}`)).body }), Pte = (n, ...s) => N(void 0, [n, ...s], function*(t, { customSchema: e } = {}) { return (e ? { schema: e } : yield Z(() => Promise.resolve().then(() => Te), void 0)).schema.nodes.instagram.create(yield Rte(t)) }); function Bte(t, e) { if (!t) return; let n = 0, s, a; for (; s = Dte.exec(t);) switch (n < s.index && e.appendChild(document.createTextNode(t.substring(n, s.index))), n = s.index + s[0].length, s[0][0]) { case ` `: e.appendChild(document.createElement("br")); break; case "@": a = document.createElement("a"), a.href = Yd(s[0].substr(1)), a.target = "_blank", a.textContent = s[0], e.appendChild(a); break; case "#": a = document.createElement("a"), a.href = Lte(s[0]), a.target = "_blank", a.textContent = s[0], e.appendChild(a); break; default: e.appendChild(document.createTextNode(s[0])) } n < t.length && e.appendChild(document.createTextNode(t.substr(n))) } const Kd = t => { const e = /(https?:\/\/(?:www\.)?(?:instagram\.com|instagr\.am)\/(?:p|reel|reels)\/([^\/\b\s\?\#]+)[^\s]*)/.exec(t); return e ? [e[2], e[1]] : [null, null] }, Xd = /https?:\/\/read\.amazon(?:\.co)?\.[a-z]+\/kp\/(?:embed|card)\?asin=([^&#\s\b'"]+)[^\b\s'"]*/i, zte = new RegExp(`]+src="${Xd.source}"[^>]*><\\/iframe>`, "i"), qte = [zte, Xd], Do = 200, Zd = { attrs: { kindleId: { default: "" }, imageUrl: { default: "" } }, inline: !1, group: "block", draggable: !0, atom: !0, selectable: !0, isolating: !0, defining: !0, parseDom: [{ tag: "div.kindle-wrap", getAttrs: re }], toDOM: t => { const e = Vte(t.attrs.kindleId); return ["div", { class: "kindle-wrap", "data-attrs": JSON.stringify(t.attrs), "data-component-name": "KindleToDOM" }, ["iframe", { src: e, frameborder: "0", gesture: "media", allow: "autoplay; fullscreen", allowautoplay: "true", allowfullscreen: "true" }] ] }, toDOMStatic: t => ["table", { class: "kindle-wrapper", width: "100%", border: "0", cellSpacing: "0", cellPadding: "0", "data-component-name": "KindleToDOMStatic" }, ["tr", {}, ["td"], ["td", { align: "left", class: "content", width: Do }, ["a", { class: "image-link", target: "_blank", href: Hte(t.attrs.kindleId) }, ["img", { "data-attrs": JSON.stringify(t.attrs), alt: "", width: `${Do}`, class: "wide-image", src: q(t.attrs.imageUrl, Do * 2) }] ] ], ["td"] ] ] }, Fte = F({ name: "kindle", nodeSpec: Zd, addCommands() { return { insertKindle: t => ({ commands: e }) => e.insertContent({ type: this.name, attrs: t }) } } }), jte = t => { for (const e of qte) { const n = e.exec(t); if (n) return n[0] } return null }, $te = t => N(void 0, null, function*() { return (yield(yield Z(() => import ("./sortBy-53166f8e.js").then(a => a.c), ["assets/sortBy-53166f8e.js", "assets/x-933ea65f.js", "assets/tracking-5779d19a.js", "assets/_sentry-release-injection-file-9254565a.js", "assets/FlexBox-8b7f0d6c.js", "assets/FlexBox-644f665d.css", "assets/HoverCard-92fb7948.js", "assets/useResponsive-4f80f3bd.js", "assets/transition-d7aff1cb.js", "assets/_defineProperty-fcca2d9e.js", "assets/react-laag.esm-23de3db0.js", "assets/HoverCard-6364507e.css", "assets/responsive_img-3c51e57a.js", "assets/responsive_img-51b02764.css", "assets/sortBy-a6711bc6.css"])).default.get("/api/v1/kindle").query({ embedText: t })).body }), Ute = (n, ...s) => N(void 0, [n, ...s], function*(t, { customSchema: e } = {}) { return (e ? { schema: e } : yield Z(() => Promise.resolve().then(() => Te), void 0)).schema.nodes.kindle.create(yield $te(t)) }), Vte = t => yt("https://read.amazon.com/kp/card", { asin: t, preview: "inline", linkCode: "kpe", hideShare: "true" }), Hte = t => `https://www.amazon.com/gp/product/${t}/`, Qd = { attrs: { url: { default: "" }, thumbnail_url: { default: "" } }, inline: !1, group: "block", draggable: !0, atom: !0, selectable: !0, isolating: !0, defining: !0, parseDom: [{ tag: "div.lichess-wrap", getAttrs: re }], toDOM: t => em(t), toDOMStatic: t => Xte(t) }, Gte = F({ name: "lichess", nodeSpec: Qd, addCommands() { return { insertLichess: t => ({ commands: e }) => e.insertContent({ type: this.name, attrs: t }) } } }), Wte = /^.*(https?\:\/\/(\S+)?(?:(.?lichess.org\/.*).*)).*$/, Jte = t => { const e = Wte.exec(t); return e && e[0] }, Yte = t => N(void 0, null, function*() { return (yield(yield Z(() => import ("./sortBy-53166f8e.js").then(a => a.c), ["assets/sortBy-53166f8e.js", "assets/x-933ea65f.js", "assets/tracking-5779d19a.js", "assets/_sentry-release-injection-file-9254565a.js", "assets/FlexBox-8b7f0d6c.js", "assets/FlexBox-644f665d.css", "assets/HoverCard-92fb7948.js", "assets/useResponsive-4f80f3bd.js", "assets/transition-d7aff1cb.js", "assets/_defineProperty-fcca2d9e.js", "assets/react-laag.esm-23de3db0.js", "assets/HoverCard-6364507e.css", "assets/responsive_img-3c51e57a.js", "assets/responsive_img-51b02764.css", "assets/sortBy-a6711bc6.css"])).default.get("/api/v1/lichess-embed").query({ url: t.trim() })).body }), Kte = (n, ...s) => N(void 0, [n, ...s], function*(t, { customSchema: e } = {}) { return (e ? { schema: e } : yield Z(() => Promise.resolve().then(() => Te), void 0)).schema.nodes.lichess.create(yield Yte(t)) }), Xte = (t, {} = {}) => { const e = document.createElement("div"); e.className = "lichess-wrap static", e.setAttribute("data-component-name", "LichessToDOMStatic"), t.attrs.thumbnail_url; const n = document.createElement("a"); n.href = t.attrs.url.replace(/embed\//, ""), n.setAttribute("target", "_blank"); const s = document.createElement("img"); return s.className = "lichess-wrap thumbnail", s.src = q(t.attrs.thumbnail_url, 640), s.style.backgroundImage = `url(${t.attrs.thumbnail_url})`, t.attrs.belowTheFold && s.setAttribute("loading", "lazy"), n.append(s), e.appendChild(n), e }, em = t => { const e = document.createElement("div"); e.id = "lichess-iframe", e.className = "lichess-wrap outer", e.dataset.attrs = JSON.stringify(t.attrs), e.setAttribute("data-component-name", "LichessToDOM"); const n = document.createElement("iframe"); return n.id = "iframe-lichess", n.className = "lichess-iframe", n.src = t.attrs.url, n.width = "560", n.height = "405px", n.frameBorder = "0", t.attrs.belowTheFold && n.setAttribute("loading", "lazy"), e.appendChild(n), e }; class Zte { constructor(e) { const n = em(e), s = n.querySelector(".lichess-iframe"), a = document.createElement("div"); a.className = "lichess-screen", a.addEventListener("dblclick", () => { a.classList.add("sunken"), s.focus() }), s.addEventListener("blur", () => { a.classList.remove("sunken") }), n.appendChild(a), this.dom = n } } const ba = { attrs: { url: { default: "" }, thumbnail_url: { default: "" } }, inline: !1, group: "block", draggable: !0, atom: !0, selectable: !0, isolating: !0, defining: !0, parseDom: [{ tag: "div.prediction-market-wrap", getAttrs: re }], toDOM: t => tm(t), toDOMStatic: t => one(t) }, Qte = F({ name: "prediction_market", nodeSpec: ba, addCommands() { return { insertPredictionMarket: t => ({ commands: e }) => e.insertContent({ type: this.name, attrs: t }) } } }), ene = F({ name: "manifold", nodeSpec: ba }), tne = /^.*(https?\:\/\/(\S+)?(?:(.?manifold.markets|metaculus.com\/questions\/.*\/).*)).*$/, nne = t => { const e = tne.exec(t); return e && e[0] }, sne = t => N(void 0, null, function*() { return (yield(yield Z(() => import ("./sortBy-53166f8e.js").then(a => a.c), ["assets/sortBy-53166f8e.js", "assets/x-933ea65f.js", "assets/tracking-5779d19a.js", "assets/_sentry-release-injection-file-9254565a.js", "assets/FlexBox-8b7f0d6c.js", "assets/FlexBox-644f665d.css", "assets/HoverCard-92fb7948.js", "assets/useResponsive-4f80f3bd.js", "assets/transition-d7aff1cb.js", "assets/_defineProperty-fcca2d9e.js", "assets/react-laag.esm-23de3db0.js", "assets/HoverCard-6364507e.css", "assets/responsive_img-3c51e57a.js", "assets/responsive_img-51b02764.css", "assets/sortBy-a6711bc6.css"])).default.get("/api/v1/prediction-embed").query({ url: t.trim() })).body }), ane = (n, ...s) => N(void 0, [n, ...s], function*(t, { customSchema: e } = {}) { return (e ? { schema: e } : yield Z(() => Promise.resolve().then(() => Te), void 0)).schema.nodes.prediction_market.create(yield sne(t)) }), one = (t, {} = {}) => { const e = document.createElement("div"); e.className = "prediction-market-wrap static", e.setAttribute("data-component-name", "PredictionMarketToDOMStatic"), t.attrs.thumbnail_url; const n = document.createElement("a"); n.href = t.attrs.url.replace(/embed\//, ""), n.setAttribute("target", "_blank"); const s = document.createElement("img"); return s.className = "prediction-market thumbnail", s.src = q(t.attrs.thumbnail_url, 640), s.style.backgroundImage = `url(${t.attrs.thumbnail_url})`, t.attrs.belowTheFold && s.setAttribute("loading", "lazy"), n.append(s), e.appendChild(n), e }, tm = t => { t.attrs.embed_url; const e = document.createElement("div"); e.id = "prediction-market-iframe", e.className = "prediction-market-wrap outer", e.dataset.attrs = JSON.stringify(t.attrs), e.setAttribute("data-component-name", "PredictionMarketToDOM"); const n = document.createElement("iframe"); return n.id = "iframe-prediction-market", n.className = "prediction-market-iframe", n.src = t.attrs.url, n.width = "560", n.height = "405px", n.frameBorder = "0", t.attrs.belowTheFold && n.setAttribute("loading", "lazy"), e.appendChild(n), e }; class rne { constructor(e) { const n = tm(e), s = n.querySelector(".prediction-market-iframe"), a = document.createElement("div"); a.className = "prediction-market-screen", a.addEventListener("dblclick", () => { a.classList.add("sunken"), s.focus() }), s.addEventListener("blur", () => { a.classList.remove("sunken") }), n.appendChild(a), this.dom = n } } const ine = "https://w.soundcloud.com/player/?auto_play=false&buying=false&liking=false&download=false&sharing=false&show_artwork=true&show_comments=false&show_playcount=false&show_user=true&hide_related=true&visual=false&start_track=0", nm = { attrs: { url: { default: "" }, title: { default: "" }, description: { default: "" }, thumbnail_url: { default: "" }, author_name: { default: "" }, author_url: { default: "" }, targetUrl: { default: "" } }, inline: !1, group: "block", draggable: !0, atom: !0, selectable: !0, isolating: !0, defining: !0, parseDOM: [{ tag: "div.soundcloud-wrap", getAttrs: re }], toDOM: t => ["div", { class: "soundcloud-wrap", "data-attrs": JSON.stringify(t.attrs), "data-component-name": "SoundcloudToDOM" }, ["iframe", { src: En(ine, { url: t.attrs.url }), frameborder: "0", gesture: "media", scrolling: "no", allowfullscreen: "true" }] ], toDOMStatic: t => { const { thumbnail_url: e, author_name: n, title: s, targetUrl: a } = t.attrs; return Ha(e, s, n, null, { targetUrl: a }) } }, cne = F({ name: "soundcloud", nodeSpec: nm, addCommands() { return { insertSoundcloud: t => ({ commands: e }) => e.insertContent({ type: this.name, attrs: t }) } } }), lne = (t, { customSchema: e } = {}) => { if (e && !e.nodes.soundcloud) return null; const n = /^.*(https?\:\/\/(www\.)?soundcloud.com\/[^\/]+\/[^\/]+(\/[^\/]+)?(\?[\#]*)?(\#.*)?).*$/.exec(t); return n && n[1] }, une = t => N(void 0, null, function*() { const s = (yield(yield Z(() => import ("./sortBy-53166f8e.js").then(a => a.c), ["assets/sortBy-53166f8e.js", "assets/x-933ea65f.js", "assets/tracking-5779d19a.js", "assets/_sentry-release-injection-file-9254565a.js", "assets/FlexBox-8b7f0d6c.js", "assets/FlexBox-644f665d.css", "assets/HoverCard-92fb7948.js", "assets/useResponsive-4f80f3bd.js", "assets/transition-d7aff1cb.js", "assets/_defineProperty-fcca2d9e.js", "assets/react-laag.esm-23de3db0.js", "assets/HoverCard-6364507e.css", "assets/responsive_img-3c51e57a.js", "assets/responsive_img-51b02764.css", "assets/sortBy-a6711bc6.css"])).default.get("/api/v1/soundcloud").query({ url: t.trim() })).body; return S({ targetUrl: t.trim() }, s) }), pne = (n, ...s) => N(void 0, [n, ...s], function*(t, { customSchema: e } = {}) { return (e ? { schema: e } : yield Z(() => Promise.resolve().then(() => Te), void 0)).schema.nodes.soundcloud.create(yield une(t)) }), sm = { attrs: { image: { default: "" }, title: { default: "" }, subtitle: { default: "" }, description: { default: "" }, url: { default: "" }, belowTheFold: { default: !1 }, noScroll: { default: !1 } }, inline: !1, group: "block", draggable: !0, atom: !0, selectable: !0, isolating: !0, defining: !0, parseDOM: [{ tag: "iframe.spotify-wrap", getAttrs: re }], toDOM: t => { let e = "spotify-wrap"; const n = ai(t.attrs.url).params; return n != null && n.show || n != null && n.episode ? e += " podcast" : n != null && n.playlist ? e += " playlist" : n != null && n.album ? e += " album" : n != null && n.artist && (e += " artist"), ["iframe", { class: e, "data-attrs": JSON.stringify(t.attrs), src: gne(t.attrs.url), frameborder: "0", gesture: "media", allowfullscreen: "true", allow: "encrypted-media", loading: t.attrs.belowTheFold ? "lazy" : null, "data-component-name": "Spotify2ToDOM", scrolling: t.attrs.noScroll ? "no" : null }] }, toDOMStatic: t => { const { image: e, title: n, subtitle: s, description: a, url: o } = t.attrs; return Ha(e, n, s, a, { targetUrl: o }) } }, dne = F({ name: "spotify2", nodeSpec: sm, addCommands() { return { insertSpotify: t => ({ commands: e }) => e.insertContent({ type: this.name, attrs: t }) } } }), mne = (t, { customSchema: e } = {}) => e && !e.nodes.spotify2 ? null : ai(t).url, fne = t => N(void 0, null, function*() { return (yield(yield Z(() => import ("./sortBy-53166f8e.js").then(a => a.c), ["assets/sortBy-53166f8e.js", "assets/x-933ea65f.js", "assets/tracking-5779d19a.js", "assets/_sentry-release-injection-file-9254565a.js", "assets/FlexBox-8b7f0d6c.js", "assets/FlexBox-644f665d.css", "assets/HoverCard-92fb7948.js", "assets/useResponsive-4f80f3bd.js", "assets/transition-d7aff1cb.js", "assets/_defineProperty-fcca2d9e.js", "assets/react-laag.esm-23de3db0.js", "assets/HoverCard-6364507e.css", "assets/responsive_img-3c51e57a.js", "assets/responsive_img-51b02764.css", "assets/sortBy-a6711bc6.css"])).default.get("/api/v1/spotify").query({ url: t })).body }), hne = (n, s) => N(void 0, [n, s], function*(t, { customSchema: e }) { return e.nodes.spotify2.create(yield fne(t)) }), ai = t => { if (t != null && t.includes("anchor.fm")) { const a = /((?:https?:\/\/(?:www\.)?anchor\.fm\/(?:embed\/)?|anchor:)([^"'\s\b?#()]*))/.exec(t); if (a) return { params: { show: "podcast" }, url: a[1], base: a[2], platform: "anchor" } } const e = /((?:https?:\/\/(open|podcasters)\.spotify\.com\/(?:embed\/)?|spotify:)([^"'\s\b?#()]*)(?:[?#][\S]*)?)/.exec(t); if (!e) return { params: null, url: null, base: null, platform: null }; const n = e[3].split(/[/:]/), s = {}; for (let a = 1; a < n.length; a += 2) s[n[a - 1]] = n[a]; return { params: s, url: e[1], base: e[2], platform: "spotify" } }, gne = t => { const { params: e, base: n, platform: s } = ai(t), a = []; if (e) { if (s === "anchor") return `https://anchor.fm/${n}`; if (n === "open") e.user && e.playlist ? a.push("user", e.user, "playlist", e.playlist) : e.playlist ? a.push("playlist", e.playlist) : e.album ? a.push("album", e.album) : e.track ? a.push("track", e.track) : e.artist ? a.push("artist", e.artist) : e.show ? a.push("show", e.show) : e.pod ? a.push("pod", e.pod) : (e.episode || e.episodes) && a.push("episode", e.episode || e.episodes); else for (const [o, r] of Object.entries(e)) r && (a.push(o), a.push(r)); return `https://${n}.spotify.com/${n==="open"?"embed":""}/${a.join("/")}` } }, am = { attrs: { url: { default: "" }, title: { default: "" }, thumbnail_url: { default: "" }, author: { default: "" }, embed_url: { default: "" }, author_url: { default: "" }, belowTheFold: { default: !1 } }, inline: !1, group: "block", draggable: !0, atom: !0, selectable: !0, isolating: !0, defining: !0, parseDom: [{ tag: "div.tiktok-wrap", getAttrs: re }], toDOM: t => rm(t), toDOMStatic: t => om(t) }, bne = F({ name: "tiktok", nodeSpec: am, addCommands() { return { insertTiktok: t => ({ commands: e }) => e.insertContent({ type: this.name, attrs: t }) } } }), vne = /^.*(https?\:\/\/(\S+)?(?:vt.tiktok.com\/|(.?tiktok.com\/.*\/video\/).*)).*$/, xne = t => { const e = vne.exec(t); return e && e[0] }, yne = t => N(void 0, null, function*() { return (yield(yield Z(() => import ("./sortBy-53166f8e.js").then(a => a.c), ["assets/sortBy-53166f8e.js", "assets/x-933ea65f.js", "assets/tracking-5779d19a.js", "assets/_sentry-release-injection-file-9254565a.js", "assets/FlexBox-8b7f0d6c.js", "assets/FlexBox-644f665d.css", "assets/HoverCard-92fb7948.js", "assets/useResponsive-4f80f3bd.js", "assets/transition-d7aff1cb.js", "assets/_defineProperty-fcca2d9e.js", "assets/react-laag.esm-23de3db0.js", "assets/HoverCard-6364507e.css", "assets/responsive_img-3c51e57a.js", "assets/responsive_img-51b02764.css", "assets/sortBy-a6711bc6.css"])).default.get("/api/v1/tiktok").query({ url: t.trim() })).body }), wne = (n, ...s) => N(void 0, [n, ...s], function*(t, { customSchema: e } = {}) { return (e ? { schema: e } : yield Z(() => Promise.resolve().then(() => Te), void 0)).schema.nodes.tiktok.create(yield yne(t)) }), qs = t => `tiktok-${t==null?void 0:t.split("/").slice(-1)[0]}`, om = (t, { useTikTokUrl: e = !1 } = {}) => { var l, u, d, m; const n = document.createElement("div"); n.className = "tiktok-wrap static", n.setAttribute("data-component-name", "TikTokCreateStaticTikTokEmbed"); const s = `${e?t.attrs.url:`${ce.POST_URL}/#tiktok-${(l=t.attrs.embed_url)==null?void 0:l.split("/").slice(-1)[0]}`}`, a = document.createElement("a"); a.href = s, a.setAttribute("target", "_blank"); const o = document.createElement("img"); o.className = "tiktok thumbnail", o.src = q(t.attrs.thumbnail_url, 640), o.style.backgroundImage = `url(${q(t.attrs.thumbnail_url)})`, t.attrs.belowTheFold && o.setAttribute("loading", "lazy"), a.append(o); const r = document.createElement("div"); r.classList.add("content"); const i = document.createElement("a"); i.classList.add("author"), i.href = t.attrs.author_url, i.setAttribute("target", "_blank"), i.appendChild(document.createTextNode(((m = (d = (u = t.attrs.author_url) == null ? void 0 : u.split) == null ? void 0 : d.call(u, "/").slice(-1)) == null ? void 0 : m[0]) || t.attrs.author)); const c = document.createElement("a"); return c.classList.add("title"), c.href = s, c.setAttribute("target", "_blank"), c.appendChild(document.createTextNode(t.attrs.title)), r.appendChild(i), r.appendChild(c), n.appendChild(a), n.appendChild(r), n }, rm = t => { var l; const e = t.attrs.embed_url, n = document.createElement("div"); n.id = qs(e), n.className = "tiktok-wrap outer", n.dataset.attrs = JSON.stringify(t.attrs), n.setAttribute("data-component-name", "TikTokCreateTikTokEmbed"); const s = document.createElement("iframe"); s.id = `iframe-${qs(e)}`, s.className = "tiktok-iframe", s.src = e, s.frameBorder = "0", (l = s.setAttribute) == null || l.call(s, "allow", "autoplay; fullscreen; encrypted-media"), s.allowFullscreen = "true", s.allowautoplay = "true", s.allowfullscreen = "true", s.scrolling = "no", t.attrs.belowTheFold && s.setAttribute("loading", "lazy"), n.appendChild(s); const a = document.createElement("iframe"); a.src = "https://team-hosted-public.s3.amazonaws.com/set-then-check-cookie.html", a.id = `third-party-iframe-${qs(e)}`, a.className = "third-party-cookie-check-iframe", a.style.display = "none", t.attrs.belowTheFold && a.setAttribute("loading", "lazy"), n.append(a); const o = om(t, { useTikTokUrl: !0 }); n.appendChild(o); const r = document.createElement("div"); r.classList.add("fallback-failure"), r.id = `fallback-failure-${qs(e)}`; const i = document.createElement("div"); i.classList.add("error-content"); const c = document.createElement("img"); return c.classList.add("error-icon"), c.src = Xl("/img/alert-circle.svg"), t.attrs.belowTheFold && c.setAttribute("loading", "lazy"), i.appendChild(c), i.appendChild(document.createTextNode("Tiktok failed to load.")), i.appendChild(document.createElement("br")), i.appendChild(document.createElement("br")), i.appendChild(document.createTextNode("Enable 3rd party cookies or use another browser")), r.appendChild(i), n.appendChild(r), n }; class kne { constructor(e) { const n = rm(e), s = n.querySelector(".tiktok-iframe"), a = document.createElement("div"); a.className = "tiktok-screen"; const o = document.createElement("h1"); o.className = "instructions", o.innerText = "Double click to interact", a.appendChild(o), a.addEventListener("dblclick", () => { a.classList.add("sunken"), s.focus() }), s.addEventListener("blur", () => { a.classList.remove("sunken") }), n.appendChild(a), this.dom = n } } const im = { attrs: { url: { default: "" }, full_text: { default: "" }, username: { default: "" }, name: { default: "" }, date: { default: "" }, photos: { default: [] }, quoted_tweet: { default: {} }, retweet_count: { default: 0 }, like_count: { default: 0 }, expanded_url: { default: null }, video_url: { default: null }, belowTheFold: { default: !1 } }, untrackedAttrs: ["full_text", "photos", "quoted_tweet", "expanded_url"], inline: !1, group: "block", draggable: !0, atom: !0, selectable: !0, isolating: !0, defining: !0, parseDOM: [{ tag: "div.tweet", getAttrs: re }], toDOMStatic: t => vl(t, !0), toDOM: t => vl(t, !1) }, _ne = F({ name: "twitter2", nodeSpec: im, addCommands() { return { insertTwitter: t => ({ commands: e }) => e.insertContent({ type: this.name, attrs: t }) } } }), cm = (t, { customSchema: e } = {}) => { if (e && !e.nodes.twitter2) return null; const n = /(https?:\/\/(mobile\.twitter\.com|twitter\.com|t\.co)\/.*\/status\/[^\/\s]*)/.exec(t); return n && n[1] }, Cne = t => N(void 0, null, function*() { return (yield(yield Z(() => import ("./sortBy-53166f8e.js").then(s => s.c), ["assets/sortBy-53166f8e.js", "assets/x-933ea65f.js", "assets/tracking-5779d19a.js", "assets/_sentry-release-injection-file-9254565a.js", "assets/FlexBox-8b7f0d6c.js", "assets/FlexBox-644f665d.css", "assets/HoverCard-92fb7948.js", "assets/useResponsive-4f80f3bd.js", "assets/transition-d7aff1cb.js", "assets/_defineProperty-fcca2d9e.js", "assets/react-laag.esm-23de3db0.js", "assets/HoverCard-6364507e.css", "assets/responsive_img-3c51e57a.js", "assets/responsive_img-51b02764.css", "assets/sortBy-a6711bc6.css"])).default.get("/api/v1/tweet").query({ url: t })).body }), Ene = (n, ...s) => N(void 0, [n, ...s], function*(t, { customSchema: e } = {}) { return (e ? { schema: e } : yield Z(() => Promise.resolve().then(() => Te), void 0)).schema.nodes.twitter2.create(yield Cne(t)) }); function Hn(t, e, { additionalClasses: n = [], belowTheFold: s = !1 } = {}) { const a = document.createElement("div"); a.className = `tweet-photo-wrapper ${n.join(" ")}`; const o = document.createElement("img"); if (o.className = "tweet-photo", o.setAttribute("src", q(t.img_url, 600)), o.setAttribute("alt", t.alt_text || "Image"), s && o.setAttribute("loading", "lazy"), e) a.appendChild(o); else { const r = document.createElement("picture"), i = document.createElement("source"); i.setAttribute("type", "image/webp"), i.setAttribute("srcset", q(t.img_url, 600, { format: "webp" })), r.appendChild(i), r.appendChild(o), a.appendChild(r) } return a } function Ane(t, e, { belowTheFold: n = !1 } = {}) { const s = document.createElement("div"); if (s.className = "tweet-photos-container", t.length === 1) s.appendChild(Hn(t[0], e, { belowTheFold: n })), s.className += " one"; else if (t.length === 2) { s.className += " two"; for (const a of t) { const o = document.createElement("div"); o.className = "tweet-photos-column", o.appendChild(Hn(a, e, { belowTheFold: n })), s.appendChild(o) } } else { const a = [document.createElement("div"), document.createElement("div")]; if (a.forEach(o => { s.appendChild(o), o.className = "tweet-photos-column" }), t.length === 3) { s.className += " three", a[0].appendChild(Hn(t[0], e, { belowTheFold: n })); for (const o of t.slice(1)) a[1].appendChild(Hn(o, e, { additionalClasses: ["half-height-container"], belowTheFold: n })) } else s.className += " four", t.slice(0, 4).forEach((r, i) => { a[i % 2].appendChild(Hn(r, e, { additionalClasses: ["half-height-container"], belowTheFold: n })) }) } return s } const Sne = Ane; function vl(t, e) { var g; const n = document.createElement("div"), s = e ? "Twitter2ToDOMStatic" : "Twitter2ToDOM"; n.setAttribute("data-component-name", s), n.className = `${e?"tweet static":"tweet"}`, e || n.setAttribute("data-attrs", JSON.stringify(t.attrs)); const a = document.createElement("a"), o = document.createElement("a"); a.className = "tweet-link-top", o.className = "tweet-link-bottom", a.setAttribute("href", t.attrs.url), o.setAttribute("href", t.attrs.url); const r = document.createElement("div"); if (r.className = "tweet-text", a.setAttribute("target", "_blank"), o.setAttribute("target", "_blank"), r.innerHTML = bt(t.attrs.full_text, { allowedTags: bt.defaults.allowedTags.concat(["img"]), allowedAttributes: Object.assign({}, bt.defaults.allowedAttributes, { "*": ["href", "style", "id", "data-*", "itemprop", "class", "align", "alt", "center", "bgcolor"] }) }), n.appendChild(a), a.appendChild(r), t.attrs.video_url && !e) { const b = document.createElement("div"); b.className = "tweet-video-wrapper", n.appendChild(b); const x = document.createElement("video"); x.className = "tweet-video", x.setAttribute("controls", "true"), x.setAttribute("src", q(t.attrs.video_url, 600)), x.setAttribute("alt", "Video"), t.attrs.belowTheFold && x.setAttribute("loading", "lazy"), b.appendChild(x) } else if ((g = t == null ? void 0 : t.attrs) != null && g.photos && t.attrs.photos.length > 0) { const b = Sne(t.attrs.photos, e, { belowTheFold: t.attrs.belowTheFold }); a.appendChild(b) } if (t.attrs.quoted_tweet && t.attrs.quoted_tweet.full_text) { const b = document.createElement("div"); b.className = "quote-tweet", b.innerHTML = bt(t.attrs.quoted_tweet.full_text, { allowedTags: [] }); const x = document.createElement("div"); x.className = "quote-tweet-header"; const v = document.createElement("img"); v.className = "quote-tweet-header-avatar", v.src = `${os}/image/twitter_name/w_40/${t.attrs.quoted_tweet.username}.jpg`, v.setAttribute("alt", `Twitter avatar${t.attrs.quoted_tweet.username?` for @${t.attrs.quoted_tweet.username}`:""}`), t.attrs.belowTheFold && v.setAttribute("loading", "lazy"), x.appendChild(v); const w = document.createElement("div"); w.className = "quote-tweet-header-text"; const E = document.createElement("span"); E.className = "quote-tweet-name", E.textContent = `${t.attrs.quoted_tweet.name||""} `, w.appendChild(E); const _ = document.createElement("span"); _.className = "quote-tweet-username", _.textContent = `@${t.attrs.quoted_tweet.username}`, w.appendChild(_), x.appendChild(w), b.insertBefore(x, b.childNodes[0]), a.appendChild(b) } if (t.attrs.expanded_url && t.attrs.expanded_url.title) { const b = document.createElement("a"); if (b.className = "expanded-link", b.setAttribute("href", t.attrs.expanded_url.url), t.attrs.expanded_url.image) { const _ = t.attrs.expanded_url.image.url || t.attrs.expanded_url.image, k = document.createElement("img"); k.setAttribute("src", q(_, 600, { height: 314, crop: "fill" })), k.className = "expanded-link-img", t.attrs.belowTheFold && k.setAttribute("loading", "lazy"), b.appendChild(k) } const x = document.createElement("div"); x.className = "expanded-link-bottom"; const v = document.createElement("span"); v.className = "expanded-link-domain", v.textContent = t.attrs.expanded_url.domain, x.appendChild(v); const w = document.createElement("span"); w.className = "expanded-link-title", w.textContent = it(t.attrs.expanded_url.title, 140), x.appendChild(w); const E = document.createElement("span"); E.className = "expanded-link-description", E.textContent = t.attrs.expanded_url.description ? e ? t.attrs.expanded_url.description.slice(0, 135).concat("...") : t.attrs.expanded_url.description : "", x.appendChild(E), b.appendChild(x), a.appendChild(b) } const i = document.createElement("div"); i.className = "tweet-header", a.insertBefore(i, a.childNodes[0]); const c = document.createElement("img"); c.className = "tweet-header-avatar", c.src = `${os}/image/twitter_name/w_${Cu*2}/${t.attrs.username}.jpg`, c.setAttribute("alt", `Twitter avatar${t.attrs.username?` for @${t.attrs.username}`:""}`), t.attrs.belowTheFold && c.setAttribute("loading", "lazy"), i.appendChild(c); const l = document.createElement("div"); l.className = "tweet-header-text", i.appendChild(l); const u = document.createElement("span"); u.className = "tweet-author-name", u.textContent = `${t.attrs.name||""} `, l.appendChild(u); const d = document.createElement("span"); d.className = "tweet-author-handle", d.textContent = `@${t.attrs.username}`, l.appendChild(d); const m = document.createElement("div"); m.className = "tweet-footer"; const f = "tweet-date", h = document.createElement("span"); if (h.className = f, h.textContent = eu(t.attrs.date).format("h:mm A ∙ MMM D, YYYY"), m.appendChild(h), t.attrs.retweet_count !== 0 && t.attrs.like_count !== 0) { const b = document.createElement("hr"); m.appendChild(b) } if (t.attrs.retweet_count !== 0 && t.attrs.like_count !== 0) { const b = document.createElement("div"); if (b.className = "tweet-ufi", t.attrs.like_count > 0) { const x = document.createElement("span"), v = document.createElement("span"); x.setAttribute("href", `${t.attrs.url}/likes`), x.className = "likes", v.className = "like-count", v.textContent = t.attrs.like_count.toLocaleString(), x.appendChild(v), x.append(t.attrs.like_count > 1 ? "Likes" : "Like"), b.appendChild(x) } if (t.attrs.retweet_count > 0) { const x = document.createElement("span"), v = document.createElement("span"); x.setAttribute("href", `${t.attrs.url}/retweets`), x.className = "retweets", v.className = "rt-count", v.textContent = t.attrs.retweet_count.toLocaleString(), x.appendChild(v), x.append(t.attrs.retweet_count > 1 ? "Retweets" : "Retweet"), b.appendChild(x) } m.appendChild(b) } return o.appendChild(m), n.appendChild(o), a.querySelectorAll && Array.prototype.forEach.call(a.querySelectorAll("a"), b => { b.target = "_blank" }), o.querySelectorAll && Array.prototype.forEach.call(o.querySelectorAll("a"), b => { b.target = "_blank" }), n } const lm = { attrs: { videoId: { default: "" }, videoKey: { default: "" }, belowTheFold: { default: !1 } }, untrackedAttrs: ["videoKey"], inline: !1, group: "block", draggable: !0, atom: !0, selectable: !0, isolating: !0, defining: !0, parseDOM: [{ tag: "div.vimeo-wrap", getAttrs: re }], toDOM: t => { const e = Dne(t.attrs.videoId, t.attrs.videoKey); return ["div", { id: Lne(t.attrs.videoId), class: "vimeo-wrap", "data-attrs": JSON.stringify(t.attrs), "data-component-name": "VimeoToDOM" }, ["div", { class: "vimeo-inner" }, ["iframe", { src: e, frameborder: "0", gesture: "media", allow: "autoplay; fullscreen", allowautoplay: "true", allowfullscreen: "true", loading: t.attrs.belowTheFold ? "lazy" : null }] ] ] }, toDOMStatic: t => ["a", { href: One(t.attrs.videoId, t.attrs.videoKey), target: "_blank", class: "vimeo-wrap", "data-component-name": "VimeoToDOMStatic" }, ["img", { src: um(t.attrs.videoId, { maxWidth: 550 }) }] ] }, Tne = F({ name: "vimeo", nodeSpec: lm, addCommands() { return { insertVimeo: t => ({ commands: e }) => e.insertContent({ type: this.name, attrs: t }) } } }), Dne = (t, e = null) => `https://player.vimeo.com/video/${t}?autoplay=0${e?`&h=${e}`:""}`, Ine = (t, { customSchema: e } = {}) => e && !e.nodes.vimeo ? null : pm(t)[2], Nne = t => { const [e, n] = pm(t); return e ? { videoId: e, videoKey: n } : null }, Mne = (n, s) => N(void 0, [n, s], function*(t, { customSchema: e }) { const a = Nne(t); return a ? e.nodes.vimeo.create(a) : null }), um = (t, { maxWidth: e = 728, playButton: n = !0 } = {}) => `${os}/image/vimeo/w_${e},c_limit,d_video_placeholder.png${n?"/l_youtube_play_qyqt8q,w_170":""}/${t}`, One = (t, e) => `https://vimeo.com/${t}${e?`/${e}`:""}`; function pm(t) { const e = /(https?:\/\/[^\s]*vimeo.com\/(?:channels\/[^/]+\/|video\/)?(\d+)(\/([0-9a-f]+))?[^\s\"\'"]*)/.exec(t); return e ? [e[2], e[4], e[1]] : [null, null, null] } function Lne(t) { return `vimeo-${t}` } const dm = { attrs: { videoId: { default: "" }, startTime: { default: null }, endTime: { default: null } }, inline: !1, group: "block", draggable: !0, atom: !0, selectable: !0, isolating: !0, defining: !0, parseDOM: [{ tag: "div.youtube-wrap", getAttrs: re }, { tag: "iframe", getAttrs: t => { try { const e = t.src && bn(t.src)[0]; return e ? { videoId: e } : !1 } catch (e) { return !1 } } }, { tag: "object", getAttrs: t => { try { const e = t.data && bn(t.data)[0]; if (e) return { videoId: e }; const n = t.querySelectorAll("param"); for (const a of n) { const o = a.value && bn(a.value)[0]; if (o) return { videoId: o } } const s = t.querySelectorAll("embed"); for (const a of s) { const o = a.src && bn(a.src)[0]; if (o) return { videoId: o } } return !1 } catch (e) { return !1 } } }], toDOM: t => { const e = mm(t.attrs.videoId, { start: t.attrs.startTime, end: t.attrs.endTime }); return ["div", { id: fm(t.attrs.videoId), class: "youtube-wrap", "data-attrs": JSON.stringify(t.attrs), "data-component-name": "Youtube2ToDOM" }, ["div", { class: "youtube-inner" }, ["iframe", { src: e, frameborder: "0", loading: "lazy", gesture: "media", allow: "autoplay; fullscreen", allowautoplay: "true", allowfullscreen: "true", width: "728", height: "409" }] ] ] }, toDOMStatic: t => ["a", { href: qne(t.attrs), target: "_blank", class: "youtube-wrap", "data-component-name": "Youtube2ToDOMStatic" }, ["img", { src: va(t.attrs.videoId, { maxWidth: 550 }) }] ] }, Rne = F({ name: "youtube2", nodeSpec: dm, addCommands() { return { insertYoutube: t => ({ commands: e }) => e.insertContent({ type: this.name, attrs: t }) } } }), Pne = (t, { customSchema: e } = {}) => e && !e.nodes.youtube2 ? null : bn(t)[1], Bne = (n, ...s) => N(void 0, [n, ...s], function*(t, { customSchema: e } = {}) { const a = e ? { schema: e } : yield Z(() => Promise.resolve().then(() => Te), void 0); console.log({ schemaModule: a }); const o = a.schema, r = zne(t); return r ? o.nodes.youtube2.create(r) : null }), zne = t => { const e = bn(t)[0]; if (!e) return null; const n = Fne(t); return { videoId: e, startTime: n.start, endTime: n.end } }, va = (t, { maxWidth: e = 728, playButton: n = !0 } = {}) => `${os}/image/youtube/w_${e},c_limit${n?"/l_youtube_play_qyqt8q,w_120":""}/${t}`, qne = t => `https://www.youtube.com/watch?${tu({v:t.videoId,start:t.startTime,end:t.endTime})}`, mm = (t, { start: e, end: n, enableJsApi: s } = {}) => `https://www.youtube-nocookie.com/embed/${t}?${tu({start:e,end:n,rel:0,autoplay:0,showinfo:0,enablejsapi:s?1:0})}`, bn = t => { const e = /(https?\:\/\/(www\.|m\.)?youtube\.com\/(v\/)?watch\?[^\s]+)/.exec(t); if (e) { const s = dr(e[1]).v || null; if (s) return [s, e[1]] } const n = /(https?\:\/\/(?:youtu\.be|www\.youtube\.com\/embed|www\.youtube-nocookie\.com\/embed|www\.youtube\.com\/v|www\.youtube\.com\/shorts)\/([A-z0-9\-_]+)[^\s]*)/.exec(t); return n ? [n[2], n[1]] : [null, null] }; function fm(t) { return `youtube2-${t}` } function Fne(t) { const e = dr(t); return { start: e.start || e.t, end: e.end } } class jne { constructor(e) { const n = mm(e.attrs.videoId, { start: e.attrs.startTime, end: e.attrs.endTime, enableJsApi: !0 }), s = document.createElement("div"); s.id = fm(e.attrs.videoId), s.className = "youtube-wrap", s.dataset.attrs = JSON.stringify(e.attrs); const a = document.createElement("div"); a.className = "youtube-inner", s.appendChild(a); const o = document.createElement("iframe"); o.src = n, o.frameborder = "0", o.gesture = "media", o.allow = "autoplay; fullscreen", o.allowautoplay = "true", o.allowfullscreen = "true", a.appendChild(o); const r = document.createElement("div"); r.className = "youtube-screen"; const i = document.createElement("h1"); i.className = "instructions", i.innerText = "Double click to interact", r.appendChild(i), r.addEventListener("dblclick", () => { r.classList.add("sunken"), o.focus() }), o.addEventListener("blur", () => { r.classList.remove("sunken"), o.contentWindow.postMessage(JSON.stringify({ event: "command", func: "pauseVideo", args: "" }), "*") }), a.appendChild(r), this.dom = s } } const $ne = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAjAAAAEyCAYAAADk0er5AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAooSURBVHgB7d1rbhvXGcfhw6slUYyFBHZiAwnsFcTdQZENpDtpV9A02UCbnTQraHeQ7EAGAsQ2bBiyJVIX3spDwIVhIICRD+L8Z54HoCiL+kKLHP34Ho5Or3zg119//fP26i/9fv/b7fWjAgCwH7/Uy7ZJvn/w4MHT92/ovfvk9PT05M6dO99tP/3b8fFxOTw8LMPhsAAA7MNisdhdzs/Py3q9/uf19fUPjx8/Pqu37QKmxst4PP7P0dHRk7t375Zer1cAAJpgGy+7iJnNZj/f3Nx8UyOmX2+ok5fJZPLk5OREvAAAjbJdQip1wLJdHfrTtln+Xr/We/bs2aNttJzev39fvAAAjVUnMS9evNisVqtv+tsP/5hOp+IFAGi0Ook5Pj6uwfJtfxsuX4/H4wIA0HRHR0c1ZL6t74F54mwjACDBYDCoV4/6BQAgjIABAOIIGAAgjoABAOIIGAAgjoABAOIIGAAgjoABAOIIGAAgjoABAOIIGAAgjoABAOIIGAAgjoABAOIIGAAgjoABAOIIGAAgjoABAOIIGAAgjoABAOIIGAAgjoABAOIIGAAgjoABAOIIGAAgjoABAOIIGAAgjoABAOIIGAAgjoABAOIIGAAgjoABAOIIGAAgjoABAOIIGAAgjoABAOIMC9Ap6/W6XFxclOVyWTabTUk3Ho/LZDIp/b7XY9AlnvHQITVezs7OymKxaEW8VDc3N7v7VO8b0B0CBjpkNpu1JlzeV+9TnSoB3SFgoEPqtKKt6pIY0B0CBmiFNk6WgN8nYACAOAIGAIgjYACAOAIGAIgjYACAOAIGAIgjYACAOAIGAIgjYACAOAIGAIgjYACAOAIGAIgjYACAOAIGAIgjYACAOAIGAIgjYACAOAIGAIgjYACAOAIGAIgjYACAOAIGAIgjYACAOAIGAIgjYACAOAIGAIgjYACAOAIGAIgjYACAOAIGAIgjYACAOAIGAIgjYACAOAIGAIgjYACAOAIGAIgjYACAOAIGAIgjYACAOAIGAIgjYACAOAIGAIgjYACAOAIGAIgjYACAOAIGAIgjYACAOAIGOqTX6xWANhAw0CGDwaC01Xg8LkB3CBjokOl02sopTL1Pk8mkAN0hYKBD+v1+OTk5ac20oobLcDjc3ad634DuGBagU+ov+jqJAUjmJQsAEEfAAABxBAwAEEfAAABxBAwAEEfAAABxBAwAEEfAAABxBAwAEEfAAABxBAwAEEfAAABxBAwAEEfAAABxBAwAEEfAAABxBAwAEEfAAABxBAwAEGdYoKGurq7KmzdvymKxKOv1ugC3o9/vl9FoVI6Pj8tkMinQRAKGxqmx8vLly3J9fV2A21efg/X5Vy8XFxfls88+K8OhXxc0iyUkGqUeOJ8/fy5eoCHqc/HVq1emoDSOgKFR6pLRcrksQHPc3NyU8/PzAk0iYGiMGi4OktBM9blpCkOTCBgao75ZF2imGi+Xl5cFmkLA0Bh1TA00l+VdmkTAAABxBAyN4TRNaLb6t2GgKQQMjXF4eFh6vV4Bmmk8HhdoCgFDY9S//vnJJ58UoHmm06kpKY0iYGiUepA0poZmqeFy9+7dAk0iYGiUOoW5d+9eOTg4KMD+3blzp3zxxRe75yY0iXkgjVNf7d2/f3+3B8t8Pt+dXu0PaMHtebeZY526eDFBUwkYGqvuhFsvAPAhM0EAII6AAQDiCBgAII6AAQDiCBgAII6AAQDiCBgAII6AAQDiCBgAII6AAQDiCBgAII69kOicq6urcnl5aYNIWqFuvHh4eGjTRTpHwNApdXfrGi/QFjXEZ7NZWa1WZTKZFOgKS0h0Rj3Aixfaqk4WF4tFga4QMHTG9fV1gTZbLpcFukLA0Bn1vQLQZpvNpkBXOKLTGYPBoECbjcfjAl0hYOiM0WjkTA1aqz62h0PnZdAdHu10Sj1Lo05inEZNW9Sl0Rov9VRq6BIBQ+fUg71JDEA2S0gAQBwBAwDEETAAQBwBAwDEETAAQBwBAwDEETAAQBwBAwDEETAAQBwBAwDEETAAQBx7IdE5V1dXNnOkNepmjnUjR/t70TUChk6Zz+e7eIG2qCE+m83KarXa7bYOXWEJic6oB3jxQlvVyeJisSjQFQKGzri+vi7QZsvlskBXCBg6o75XANpss9kU6ApHdDpjMBgUaLPxeFygKwQMnTEajZypQWvVx/Zw6LwMusOjnU6pZ2nUSYzTqGmLujRa46WeSg1dImDonHqwN4kByGYJCQCII2AAgDgCBgCII2AAgDgCBgCII2AAgDgCBgCII2AAgDgCBgCII2AAgDgCBgCII2AAgDgCBgCII2AAgDgCBgCII2AAgDgCBgCII2AAgDgCBgCII2AAgDgCBgCII2AAgDgCBgCII2AAgDgCBgCII2AAgDgCBgCII2AAgDgCBgCII2AAgDgCBgCII2AAgDgCBgCII2AAgDgCBgCIMyzsxdXVVTk/Py8AH2s+n+8uNMPR0VF5+PBhGY1GhdsnYPZgsVjsDkL37t0rAB/r5cuXAqZB6s/i9PS0fPXVV+Xg4KBwuywh7UE9CH366acFgGyr1aq8ePGicPsEzB4YNwK0h6nYfggYACCOgAEA4ggYACCOgAEA4ggYACCOgAEA4ggYACCOgAEA4ggYACCOgAEA4ggYACCOgAEA4ggYACCOgAEA4ggYACCOgAEA4ggYACCOgAEA4ggYACCOgAEA4ggYACCOgAEA4ggYACCOgAEA4ggYACCOgAEA4ggYACCOgAEA4ggYACCOgAEA4ggYACCOgAEA4ggYACCOgAEA4ggYACCOgAEA4ggYACCOgAEA4ggYACCOgAEA4ggYACCOgAEA4ggYACCOgAEA4giYPViv1wUA+OMEzB70+/7bAdri6OiocPv8Jt2D6XRaXr9+XQDIVl+QPnz4sHD7hoVbd3BwUAaDQfntt9921yYywMeYz+eFZqjH7Xos//zzz8toNCrcPgGzJ/UBr9oB4I/x0h8AiCNgAIA4AgYAiCNgAIA4AgYAiCNgAIA4AgYAiCNgAIA4AgYAiCNgAIA4AgYAiCNgAIA4AgYAiCNgAIA4AgYAiCNgAIA4AgYAiCNgAIA4AgYAiCNgAIA4AgYAiCNgAIA4AgYAiCNgAIA4AgYAiCNgAIA4AgYAiCNgAIA4AgYAiCNgAIA4AgYAiCNgAIA4AgYAiCNgAIA4AgYAiCNgAIA4NWCerlarAgDQdIvFol790l+v1z/N5/MCANB0/w+Y7Yd/z2azstlsCgBAU9VWOT8/3/T7/R/6X3755X+Xy+W/zs7OCgBAU719+3azncD8+ODBg6e7N/FuA+b7y8vLn9+8eWMSAwA0Sm2T7aBls10x+rk2S/1a792Np6enJ8Ph8LvRaPTX6XTa216XegEA2IdtrJTtgKVcXFxsVqvVjzVeHj9+vFsy6n34zc+ePXu0/abver3e19t/PikAAPvxtJ5stL3+qb7l5f0b/gfSCexetgOUpQAAAABJRU5ErkJggg==", hm = [ [Ate, Tte, De], [vd, bd, De], [cm, Ene, Ns], [Nte, Pte, Ns], [Pne, Bne, De], [Ine, Mne, De], [mne, hne, De], [jee, Uee, De], [Lee, Pee, De], [Aee, See, Ns], [lne, pne, De], [tee, aee, De], [jte, Ute, De], [wte, Cte, De], [pd, dd, De], [md, hd, $ne], [FQ, $Q, De], [Jte, Kte, De], [Jee, Kee, De], [(...t) => { const e = t[0]; return e ? nne(e) : null }, ane, De], [(...t) => { const e = t[0]; return e ? xne(e) : null }, wne, De], [t => t === ce.FIRST_NOTE_EMBED, Dee, Ns] ], gm = (t, e, n) => { if (e.nodes.augmentation_placeholder) for (const [s, , a] of hm) { const o = s(t, S({ customSchema: e }, n)); if (o) { const r = e.nodes.augmentation_placeholder.create({ request_id: jf(), url: o, src: a }); return [o, r] } } return [null, null] }, bm = (t, e, n, s) => N(void 0, null, function*() { const { request_id: a, url: o } = t.attrs; let r, i; try { for (const [c, l] of hm) if (c(t.attrs.url, S({ customSchema: n }, s)) && (se(ae.EMBED_URL_ATTEMPTED, { url: o, source: "paste" }), r = yield l(o, { customSchema: n }), se(ae.EMBED_URL_SUCCEEDED, { url: o, source: "paste" }), r)) break } catch (c) { se(ae.EMBED_URL_FAILED, { url: o, source: "paste" }), console.error("Failed to process augmentation placeholder:", t.attrs, c), 400 <= c.status && c.status < 600 && (i = c) } if (i) { const c = cm(t.attrs.url); if (setTimeout(() => { Io(a, e, n, (l, u, d) => { c && l.replaceRangeWith(u, u + d.nodeSize, n.text(d.attrs.url, [n.marks.link.create({ title: d.attrs.url, href: d.attrs.url })])), l.delete(u, u + d.nodeSize) }) }, 0), !c) throw i } else setTimeout(r ? () => { Io(a, e, n, (c, l, u) => { r && c.setNodeMarkup(l, r.type, r.attrs, u.marks) }) } : () => { Io(a, e, n, (c, l, u) => { c.replaceRangeWith(l, l + u.nodeSize, n.text(u.attrs.url)) }) }, 0) }), Io = (t, e, n, s) => { let a = !1; const o = e.state.tr; return e.state.doc.descendants((r, i) => { r.type === n.nodes.augmentation_placeholder && r.attrs.request_id === t && s(o, i, r) !== !1 && (a = !0) }), a && e.dispatch(o), a }, xl = t => { t.preventDefault() }, Une = (t, e, n) => { const s = t.dom; if (s) { const a = s.querySelector(`[data-attrs*='{"nodeId":"${e}"']`); a && (n ? a.addEventListener("dragstart", xl) : a.removeEventListener("dragstart", xl)) } }, Vne = (t, e) => (n, s, a) => { if (s) { let o, r; if (n.doc.descendants((i, c) => { if (i.attrs.nodeId === t.nodeId) return o = i, r = c, !1 }), o) { const i = n.tr; return i.setNodeMarkup(r, o.type, Object.assign({}, o.attrs, t)), Une(a, t.nodeId, e), s(i), !0 } } return !0 }, Hne = ({ url: t }) => (e, n) => { if (n) { const s = e.tr, a = e.selection.from, o = a + t.length; s.deleteSelection(), s.insertText(t, a), s.addMark(a, o + 1, e.schema.marks.link.create({ text: t, href: t })), s.setSelection(Ee.create(s.doc, a, o + 1)), n(s) } return !0 }, Gne = ({ url: t }) => (e, n, s) => { if (n) { const [, a] = gm(t, e.schema, { forceAllowOwnPub: !0 }); if (!a) return !0; bm(a, s, e.schema, { forceAllowOwnPub: !0 }).catch(r => alert(Ft(r))); const o = e.tr; n(o.replaceSelectionWith(a)) } return !0 }, Wne = () => (t, e) => (e && e(t.tr.deleteSelection()), !0), Jne = Pe.create({ name: "digestPostEmbedExtension", addCommands() { return { updateDigestPostEmbed: (t, e) => ({ state: n, dispatch: s, view: a }) => Vne(t, e)(n, s, a), convertDigestPostEmbedToLink: t => ({ state: e, dispatch: n }) => Hne(t)(e, n), convertDigestPostEmbedToEmbeddedPost: t => ({ state: e, dispatch: n, view: s }) => Gne(t)(e, n, s), deleteDigestPostEmbed: () => ({ state: t, dispatch: e }) => Wne()(t, e) } } }); function Yne(t, e) { const n = {}, s = {}; t.doc.descendants((c, l) => { c.type === e.nodes.footnote ? n[c.attrs.number] = [l, c.nodeSize] : c.type === e.nodes.footnoteAnchor && (s[c.attrs.number] = l) }); const a = new Set(Object.keys(n).map(Number)), o = new Set(Object.keys(s).map(Number)), r = Array.from(a).filter(c => !o.has(c)).sort((c, l) => l - c), i = Array.from(o).filter(c => !a.has(c)).sort((c, l) => l - c); for (const c of r) { const [l, u] = n[c]; t.delete(l, l + u) } for (const c of i) { const l = s[c]; t.delete(l, l + 1) } } function oi(t, e) { let n = 1, s = 1; t.doc.descendants((a, o) => { if (a.type === e.nodes.footnote) { if (a.attrs.number !== n) { const r = e.nodes.footnote.create({ number: n }, a.content); t.replaceWith(o, o + a.nodeSize, r) } n += 1 } else if (a.type === e.nodes.footnoteAnchor) { if (a.attrs.number !== s) { const r = e.nodes.footnoteAnchor.create({ number: s }); t.replaceWith(o, o + a.nodeSize, r) } s += 1 } }) } function Kne(t, e) { const n = []; let s = !1; t.doc.forEach((a, o) => { a.type === e.nodes.footnote && (s = !0), s && a.type !== e.nodes.footnote && n.push([o, a.nodeSize]) }), n.reverse().forEach(([a, o]) => { t.delete(a, a + o) }) } function vm(t, e) { let n = 0; t.doc.nodesBetween(0, t.selection.from, a => { a.type === e.nodes.footnoteAnchor && (n += 1) }); const s = []; return t.doc.forEach((a, o) => { a.type === e.nodes.footnote && s.push(o) }), n < s.length ? s[n] : t.doc.resolve(0).end() } function xm(t) { const { paragraph: e, ordered_list: n, bullet_list: s, blockquote: a, orderedList: o, bulletList: r } = t.schema.nodes; return AZ(t, [e, n, s, a, o, r]) } function Xne(t, e) { if (!xm(t)) return !1; const { schema: n } = t, s = n.nodes.footnote.create({ number: 1 }, n.nodes.paragraph.create()), a = n.nodes.footnoteAnchor.create({ number: 1 }), o = t.tr, r = vm(o, n); o.replaceWith(r, r, s), o.replaceSelectionWith(a), oi(o, n); try { o.setSelection(Ee.create(o.doc, r + 2, r + 2)).scrollIntoView() } catch (i) { return console.error("could not set footnote text selection"), !1 } return e && e(o), !0 } const Zne = Pe.create({ name: "footnoteCustom", addCommands() { return { insertFootnote: () => ({ state: t, dispatch: e }) => Xne(t, e) } } }); function Qne(t, { insertImageFile: e }) { const n = document.createElement("input"); return n.type = "file", n.accept = "image/*,.heic,.heif", n.style.cssText = "display:none;", n.onchange = () => { n.files && n.files.length > 0 && e(n.files[0]), n.value = "" }, n.className = "insert-image-menu-item-input", document.body.appendChild(n), new ad({ title: "Insert image", icon: YZ, active() { return !1 }, enable(s) { return pQ(s, t) }, run() { setTimeout(() => { n.click() }, 0) } }, "image") } const ese = ({ gallery: t }) => (e, n) => (n && n(ie(e, e.schema.nodes.imageGallery.create({ gallery: t, isEditorNode: !0 }))), !0), tse = ({ gallery: t }) => (e, n) => (n && n(SZ(e, e.schema.nodes.imageGallery.create({ gallery: t, isEditorNode: !0 }))), !0), nse = ({ url: t, caption: e, width: n, height: s }) => (a, o) => { if (!o) return !1; const r = a.schema, i = { src: t, imageSize: "normal", height: s != null ? s : 512, width: n != null ? n : 512 }, c = r.nodes.image2.create(i); if (e) { const l = r.nodes.caption.create(null, r.text(e)), u = r.nodes.captionedImage.create({}, [c, l]); o(ie(a, u)) } else o(ie(a, c)); return !0 }, sse = ({ url: t, width: e, height: n }) => (s, a) => { const o = s.schema, r = { alt: "TradingView chart", src: t, height: n, width: e, type: "image/jpg" }, i = o.text("Created with "), c = o.text("TradingView", [o.marks.link.create({ title: "TradingView", href: "https://tradingview.com" })]), l = o.nodes.captionedImage.create(r, [o.nodes.image2.create(r), o.nodes.caption.create(null, [i, c])]); return a && a(ie(s, l)), !0 }, ase = ({ url: t, width: e, height: n, description: s, userName: a, userHref: o }) => (r, i) => { const c = r.schema, l = { alt: s, src: t, height: n, width: e, type: "image/jpg" }, u = c.text("Photo by "), d = c.text(a, [c.marks.link.create({ title: a, href: o })]), m = c.text(" on "), f = c.text("Unsplash", [c.marks.link.create({ title: "Unsplash", href: "https://unsplash.com" })]), h = c.nodes.captionedImage.create(l, [c.nodes.image2.create(l), c.nodes.caption.create(null, [u, d, m, f])]); return i && i(ie(r, h)), !0 }, ose = Pe.create({ name: "imageInsert", addCommands() { return { insertImage: t => ({ state: e, dispatch: n, view: s }) => Qne(e.schema.nodes.image2, { insertImageFile: t }).spec.run(e, n, s), insertUnsplashImage: t => ({ state: e, dispatch: n }) => ase(t)(e, n), insertImageGallery: t => ({ state: e, dispatch: n }) => ese(t)(e, n), updateImageGallery: t => ({ state: e, dispatch: n }) => tse(t)(e, n), insertImageFromUrl: ({ url: t, caption: e, width: n, height: s }) => ({ state: a, dispatch: o }) => nse({ url: t, caption: e, width: n, height: s })(a, o), insertTradingViewImageFromUrl: ({ url: t, width: e, height: n }) => ({ state: s, dispatch: a }) => sse({ url: t, width: e, height: n })(s, a) } } }), rse = n => { var s = n, { stroke: t = "#666666" } = s, e = st(s, ["stroke"]); return p(vr, P(S({ stroke: t }, e), { name: "UploadIcon", svgParams: { width: 20, height: 20, viewBox: "0 0 20 20" } }), p("path", { d: "M17.5 12.5V15.8333C17.5 16.2754 17.3244 16.6993 17.0118 17.0118C16.6993 17.3244 16.2754 17.5 15.8333 17.5H4.16667C3.72464 17.5 3.30072 17.3244 2.98816 17.0118C2.67559 16.6993 2.5 16.2754 2.5 15.8333V12.5", strokeWidth: "1.5", fill: "none", strokeLinecap: "round", strokeLinejoin: "round" }), p("path", { d: "M14.1667 6.66667L10 2.5L5.83337 6.66667", strokeWidth: "1.5", strokeLinecap: "round", fill: "none", strokeLinejoin: "round" }), p("path", { d: "M10 2.5V12.5", strokeWidth: "1.5", strokeLinecap: "round", strokeLinejoin: "round", fill: "none" })) }, ise = "_animation_f1mog_1", cse = "_offscreen_f1mog_6", lse = "_onscreen_f1mog_10", use = "_container_f1mog_14", pse = "_drawer_f1mog_19", qt = { animation: ise, offscreen: cse, onscreen: lse, container: use, drawer: pse }; function dse({ children: t, wrapperId: e }) { let n = document.getElementById(e); return n === null && (n = document.createElement("div"), n.setAttribute("id", e), document.body.appendChild(n)), n ? ya(t, n) : null } const mse = ({ isOpen: t, wrapperId: e = "drawer-portal", children: n, includeTransition: s = !0, className: a, width: o = 400 }) => { const r = J(null); return U(() => { t && r.current && r.current.focus() }, [r, t]), p(dse, { wrapperId: e }, p(s ? fse : be, { isOpen: t }, p(Aa, { width: o, ref: r, borderLeft: "detail", shadow: "xl", className: fe(qt.drawer, a) }, p(Y, { className: fe("drawer-scroll", qt.container), bg: "primary", overflowY: "auto", shadow: "xl" }, n)))) }, fse = ({ children: t, isOpen: e }) => p(Ki.Root, { show: e }, p(Ki.Child, { as: be, enter: qt.animation, enterFrom: qt.offscreen, enterTo: qt.onscreen, leave: qt.animation, leaveFrom: qt.onscreen, leaveTo: qt.offscreen }, t)), hse = "_container_10z2l_1", gse = { container: hse }, bse = ({ title: t, onClose: e }) => t || e ? p(Aa, { paddingX: { mobile: 16, desktop: 24 }, paddingTop: 24 }, p(ne, { alignItems: "center", justifyContent: "space-between" }, t && p(X.H3, { weight: "bold" }, t), e && p(ne, { paddingLeft: 12, alignItems: "center" }, p(ft, { size: 32, "aria-label": "Close", fill: "empty", onClick: e }, p(yr, { "aria-hidden": "true" }))))) : null, ym = ({ width: t = 400, isOpen: e, children: n, title: s, onClose: a, primaryButton: o, secondaryButton: r, wrapperId: i, variant: c = "overlay", className: l, drawerClassName: u }) => p(mse, { className: u, includeTransition: c === "overlay", width: t, isOpen: e, wrapperId: i }, p(Jg, null, p(Y, { className: l, flex: "fill", overflowY: "auto" }, p(bse, { title: s, onClose: a }), p(Aa, { className: gse.container, paddingX: { desktop: 24, mobile: 16 }, paddingTop: s || a ? 24 : 0 }, n)), o && p(ne, { gap: 8, padding: 16, justifyContent: "end", borderY: "detail" }, o, r))), vse = Er((t, e) => { t({ mediaUploadId: e == null ? void 0 : e.id, duration: e == null ? void 0 : e.duration, mediaUpload: e }) }, 1e3, { trailing: !1 }), wm = () => { const { isDrawerOpen: t, setIsDrawerOpen: e, setPreventChange: n } = ug(); return { isVideoEmbedDrawerOpen: t("videoEmbed"), setIsVideoEmbedDrawerOpen: s => e(P(S({}, s), { drawerId: "videoEmbed", variant: "overlay" })), setPreventChange: s => n({ preventChange: s, preventChangeMessage: "Please wait until the video is uploaded before closing the drawer." }) } }, xse = ({ id: t, editorDroppedFile: e, mediaUploadId: n, open: s, pub: a, postId: o, onSave: r, onClose: i, setPostId: c }) => { const [l, u] = z(e != null ? e : null), [d, m] = z(null), [f, h] = z(!1), { iString: g, language: b } = ue(), { setPreventChange: x } = wm(), { mediaUpload: v, loading: w, error: E } = Pg({ mediaUploadId: n }); n && !d && v && m(v), U(() => { u(e) }, [e]); const _ = () => { (f || (d == null ? void 0 : d.state) === "uploaded" || (d == null ? void 0 : d.state) === "transcoded") && !confirm(g("Your video will be discarded, are you sure?")) || (se(ae.VIDEO_MODAL_CANCEL_CLICKED, { has_media_upload: !!d }), k()) }, k = () => { m(null), u(null), i() }, M = (d == null ? void 0 : d.state) !== "transcoded"; return p(ym, { wrapperId: t, title: g("Embed video"), isOpen: s, onClose: _, primaryButton: p(Pt, { disabled: !M, text: g("Video needed") }, p(Ae, { priority: "primary-theme", fill: "filled", onClick: () => { se(ae.VIDEO_MODAL_INSERT_CLICKED), vse(r, d), k() }, disabled: M }, g("Insert"))), secondaryButton: p(Ae, { priority: "secondary", fill: "outline", onClick: _ }, g("Cancel")) }, E && p(X, { color: "error" }, E), w ? p("div", null, g("Loading...")) : p(be, null, p(X.B4, { paddingBottom: 24, translated: !0 }, "Upload or record a video file embedded into the text."), p(Y, { padding: 16, radius: "md", border: "detail" }, p(X.B2, { weight: "semibold", translated: !0, paddingBottom: 16 }, "Create video"), p(Ta, { language: b, initialFile: l, mediaType: "video", pub: a, videoFeature: "embed", postId: o, setPostId: c, onChange: ({ mediaUpload: y }) => { h(!1), m(y), u(null), x(!1) }, onUploadStarted: () => { x(!0), h(!0) }, onUploadCanceled: () => { h(!1), x(!1) }, mediaUpload: d, mediaUploadId: d == null ? void 0 : d.id })))) }, yse = ({ editor: t, pub: e, postId: n, setPostId: s }) => { const { isVideoEmbedDrawerOpen: a, setIsVideoEmbedDrawerOpen: o } = wm(), [r, i] = z(null), [c, l] = z(!1), u = d => { d.preventDefault(), l(!0) }; return U(() => { if (c) { const d = t.view.state.selection.node, { mediaUploadId: m } = d.attrs; i(m), o({ isOpen: !0 }) } }, [c, t.view.state.selection.node]), U(() => (document.addEventListener("editSelectedVideoEmbed", u), () => { document.removeEventListener("editSelectedVideoEmbed", u) }), []), p(be, null, p(vu, { priority: "tertiary", size: "sm", onClick: () => o({ isOpen: !a }) }, p(Tu, { size: 20 })), p(xse, { id: "videoEmbed", editorDroppedFile: null, mediaUploadId: r, open: a, pub: e, postId: n, onClose: () => { o({ isOpen: !1, clearPreventChange: !0 }), l(!1), i(null) }, onSave: ({ mediaUploadId: d, duration: m }) => { t.chain().focus().insertVideo({ mediaUploadId: d, duration: m }).run() }, setPostId: s })) }; let No, km; function wse() { document.getElementById("technical-analysis-chart-demo") && "TradingView" in window && (km = new window.TradingView.widget({ container_id: "technical-analysis-chart-demo", width: "100%", height: "600", symbol: "AAPL", interval: "D", timezone: "exchange", theme: "light", style: "1", toolbar_bg: "#f1f3f6", withdateranges: !0, hide_side_toolbar: !1, allow_symbol_change: !0, save_image: !1, show_popup_button: !0, popup_width: "1000", popup_height: "650", locale: "en" })) } function kse(t) { return new Promise((e, n) => { const s = new Image; s.onload = () => e(s), s.onerror = a => n(a), s.src = t }) } function _se(t) { return N(this, null, function*() { try { const e = yield kse(t); return { height: e.height, width: e.width } } catch (e) { return console.error("Error loading image:", e), { height: null, width: null } } }) } const Cse = () => { const t = J(null); return U(() => (t.current = wse, No || (No = new Promise(e => { const n = document.createElement("script"); n.id = "tradingview-widget-loading-script", n.src = "https://s3.tradingview.com/tv.js", n.type = "text/javascript", n.onload = e, document.head.appendChild(n) })), No.then(() => t.current && t.current()), () => t.current = null), []), p("div", { className: "tradingview-widget-container" }, p("div", { id: "technical-analysis-chart-demo" })) }, Ese = ({ isOpen: t, onClose: e, onInsert: n }) => { const [s, a] = z(!1); return p(ms, { isOpen: t, onClose: e, width: 900 }, p(Sa, { includeClose: !1, title: "Financial Chart" }), p(fs, null, p(Cse, null)), p(ds, { primaryButton: p(Ae, { priority: "primary-theme", disabled: s, onClick: () => { a(!0), km.image(o => N(void 0, null, function*() { const r = Ase(o), i = yield he.post("/api/v1/image").send({ image: r }), { height: c, width: l } = yield _se(i.body.url); n({ url: i.body.url, height: c, width: l }), a(!1), e() })) } }, "Insert"), secondaryButton: p(Ae, { priority: "secondary", onClick: e }, "Cancel") })) }, Ase = t => { const e = t.match(/^https:\/\/\w*\.tradingview\.com\/x\/([^\/]+)/); if (!e || !e[1]) throw new Error("Invalid URL format"); return `https://s3.tradingview.com/snapshots/${e[1].substring(0,1).toLowerCase()}/${e[1]}.png` }; function Sse({ children: t }) { const e = "post-it-portal"; let n = document.getElementById(e); return n === null && (n = document.createElement("div"), n.setAttribute("id", e), n.setAttribute("style", "position: fixed; right: 0px; bottom: 0px; z-index: 1"), document.body.appendChild(n)), n ? ya(t, n) : null } const Tse = ({ isOpen: t, children: e, className: n }) => { const s = J(null); return U(() => { t && s.current.focus() }, [s, t]), t && p(Sse, null, p("div", { className: fe("tw-absolute tw-bottom-0 tw-right-0 tw-mx-4 tw-mb-4 tw-w-[calc(100vw_-_2rem)] tw-rounded-lg tw-border tw-border-solid tw-border-substack-detail tw-bg-substack-bg tw-shadow-lg sm:tw-right-4 sm:tw-mx-0 sm:tw-w-[400px]", n), ref: s }, e)) }, Dse = Sa, Ise = ds, Nse = fs, Mse = "_uploadIcon_1l1f8_1", Ose = "_bodyContainer_1l1f8_6", Lse = "_inputSection_1l1f8_16", Rse = "_fileUpload_1l1f8_20", Pse = "_compact_1l1f8_26", Bse = "_images_1l1f8_54", zse = "_image_1l1f8_54", qse = "_removeImage_1l1f8_67", Fse = "_heicConversion_1l1f8_80", jse = "_removeIcon_1l1f8_89", $se = "_size1_1l1f8_105", Use = "_size2_1l1f8_106", Vse = "_size4_1l1f8_107", ot = { uploadIcon: Mse, bodyContainer: Ose, inputSection: Lse, fileUpload: Rse, compact: Pse, images: Bse, image: zse, removeImage: qse, heicConversion: Fse, removeIcon: jse, size1: $se, size2: Use, size4: Vse }, ss = 9, yl = "image/heic", Hse = ({ image: t, onRemove: e }) => { const { attributes: n, listeners: s, setNodeRef: a, transform: o, transition: r } = Ex({ id: t.id }); return p(xe, S(S({ className: ot.image, alignItems: "center", justifyContent: "center", ref: a, style: { transform: Ht.Transform.toString(o), transition: r } }, n), s), p(xe, { padding: 12, justifyContent: "center", alignItems: "center", className: ot.removeImage, onClick: e }, p(Au, { size: 16, className: ot.removeIcon })), p("img", { src: t.src })) }, Gse = (t, e) => { const { iString: n, iPlural: s } = I18N.i(e), a = ss - t; switch (t) { case 0: return n("Add up to 9 images"); case ss: return ""; default: return s("Add up to 1 more image", "Add up to %1 more images", a) } }, Wse = ({ isOpen: t, onClose: e, onInsertGallery: n, onUpdateGallery: s, editor: a, editingCurrentSelection: o, postId: r }) => { const [i, c] = z([]), [l, u] = z({}), [d, m] = z(new Set), [f, h] = z([]), [g, b] = z([]), [x, v] = z(""), [w, E] = z(""), [_, k] = z(!1), [M, y] = z(!1), [T, D] = z({}), [C, L] = z(new Set), { iString: R, language: A } = ue(), I = Vg(), O = Xb(tc(Mr, { activationConstraint: { delay: 100, tolerance: 10 } }), tc(Ir, { coordinateGetter: Tx })); U(() => { if (o) { const W = a.view.state.selection.node, { gallery: le } = W.attrs, K = le.images.map(H => P(S({}, H), { id: Za() })); c(K.map(H => H.type === yl ? P(S({}, H), { src: q(H.src, 200) }) : H)), m(new Set(K.map(H => H.id))), u(Xi(K, "id")), v(le.caption), E(le.alt) } }, [o]); const B = () => { g.forEach(W => W.abort()), f.forEach(W => W.abort()), h([]), b([]), k(!1), y(!1), j() }, j = () => { ve(), e() }, G = W => { const { active: le, over: K } = W; le.id !== K.id && c(H => { const me = H.findIndex($ => $.id === le.id), V = H.findIndex($ => $.id === K.id); return Lr(H, me, V) }) }, ke = W => N(void 0, null, function*() { if (W.length + i.length > ss) { I.popToast(H => p(Yi, P(S({}, H), { text: R("Image gallery is limited to 9 images") }))); return } const le = [], K = []; for (const H of Array.from(W)) { if (H.type === yl) { K.push(H); continue } const me = yield Xs(H); le.push({ file: H, src: me, id: Za() }) } if (K.length) { y(!0); const H = []; for (const $ of K) { const He = yield Xs($); H.push(he.post("/api/v1/image").send({ image: He, postId: r })) } h(H); const V = (yield Promise.all(H)).map(($, He) => ({ type: $.body.contentType, src: $.body.url, id: Za(), file: K[He] })); L(new Set(V.map($ => $.id))), D(Xi(V, "id")), le.push(...V.map($ => P(S({}, $), { src: q($.src, 200) }))), y(!1) } c(H => [...H, ...le]) }), Re = W => { if (i.length <= 1) c([]); else { const le = i[W]; d.has(le.id) && u(K => Kg(K, [le.id])), c(K => [...K.slice(0, W), ...K.slice(W + 1)]) } }, ve = () => { b([]), c([]), m(new Set), u({}), L(new Set), D({}), v(""), E("") }, _e = we(() => N(void 0, null, function*() { k(!0); try { const W = []; for (const H of i) if (d.has(H.id)) { const me = l[H.id], { type: V, src: $ } = me; W.push(Promise.resolve({ body: { contentType: V, url: $ } })) } else if (C.has(H.id)) { const me = T[H.id], { type: V, src: $ } = me; W.push(Promise.resolve({ body: { contentType: V, url: $ } })) } else { const me = he.post("/api/v1/image").send({ image: H.src, postId: r }); b(V => [...V, me]), W.push(me) } const K = { images: (yield Promise.all(W)).map(H => ({ type: H.body.contentType, src: H.body.url })), caption: x, alt: w }; if (i.length === 1) K.staticGalleryImage = K.images[0]; else { b([]); const H = he.post("/api/v1/image-gallery").send({ gallery: K }); b([H]); const { body: me } = yield H; K.staticGalleryImage = { type: me.contentType, src: me.url } } o ? s(K) : n(K), k(!1), j() } catch (W) { W.code !== "ABORTED" && (k(!1), I.popToast(le => p(Yi, P(S({}, le), { text: R("Failed to upload gallery images") }))), console.error(W)) } }), [i, x, w]); return p(Tse, { isOpen: t }, p(Dse, { isModal: !1, as: "h3", title: R("Image gallery"), description: Gse(i.length, A), includeClose: !0, onClose: j }), p(Nse, null, p(Y, { alignItems: "center", gap: 16, className: ot.bodyContainer }, i.length > 0 && !M && p(xe, { className: fe(ot.images, ot[`size${i.length}`]), wrap: "wrap", gap: 4, alignItems: "start", justifyContent: "start" }, p(Yv, { sensors: O, collisionDetection: ev, onDragEnd: G }, p(vx, { items: i.map(W => W.id), strategy: Rr }, i.map((W, le) => p(Hse, { image: W, key: W.id, onRemove: () => Re(le) }))))), i.length !== ss && p(ne, { justifyContent: "center", style: { width: "100%" }, alignItems: "center" }, M ? p(ne, { alignItems: "center", justifyContent: "center", gap: 12, className: ot.heicConversion }, p(X, { color: "secondary", translated: !0 }, "Converting HEIC images"), p(Sn, null)) : p(Nu, { multiple: !0, onFileSelected: ke, dropCTA: R("Drop image files here"), className: fe(ot.fileUpload, !!i.length && ot.compact), addMode: !!i.length })), !!i.length && p(be, null, p(Y, { justifyContent: "start", className: ot.inputSection, gap: 8 }, p(X.H4, { weight: "bold", translated: !0 }, "Caption"), p(rs, { placeholder: R("Add gallery caption"), value: x, onChange: W => v(W.target.value) })), p(Y, { justifyContent: "start", className: ot.inputSection, gap: 8 }, p(X.H4, { weight: "bold", translated: !0 }, "Alt text"), p(rs, { placeholder: R("Describe images"), value: w, onChange: W => E(W.target.value) }))))), p(Hg, { paddingX: 16, paddingY: 0 }), p(Ise, { primaryButton: p(ne, { alignItems: "center", gap: 8 }, p(Ae, { priority: "primary-theme", onClick: _e, disabled: !i.length || i.length > ss || _ }, R(o ? "Update" : "Insert"))), secondaryButton: p(ne, { justifyContent: _ ? "space-between" : "end", alignItems: "center", flex: "grow" }, _ && p(ne, { gap: 8, alignItems: "center", flex: "grow" }, p(Sn, null), _ && p(X.Meta, { translated: !0 }, "Loading...")), p(Ae, { priority: "secondary", onClick: B }, R("Cancel"))) })) }, Jse = t => p(vr, P(S({}, t), { className: "filled-icon", name: "UnsplashIcon", svgParams: { height: 24, width: 24, fill: "#1C110B" } }), p("path", { d: "M15.3364 10.9703H21V21H3V10.9703H8.66362V15.9748H15.3158V10.9703H15.3364ZM15.3364 3H8.66362V8.02517H15.3158V3H15.3364Z", strokeWidth: 0 })), wl = 4, kl = 15, Yse = 540, _m = "random", Kse = 380, _l = t => t && t.toLowerCase().trim() || _m, Xse = ({ open: t, onAfterClose: e, onSelectStockImage: n }) => { const [s, a] = z(""), [o, r] = z(null), [i, c] = z({}), [l, u] = z(!1), [d, m] = z(!1), [f, h] = z(null), g = J(null), b = J(null), x = J(null), v = J(null), w = J(!1), E = f && f.screen <= Yse ? 2 : 3, _ = f ? Math.floor((f.content - wl * (E - 1)) / E) : 0, { result: k } = ag(() => Z(() => import ("./masonry-ccd45004.js").then(O => O.m), ["assets/masonry-ccd45004.js", "assets/tracking-5779d19a.js", "assets/_sentry-release-injection-file-9254565a.js"]), [], { auto: !0 }), M = k == null ? void 0 : k.default, { iString: y, iTemplate: T } = ue(); U(() => { const O = () => { const B = parseInt(window.getComputedStyle(b.current).getPropertyValue("width"), 10), j = window.innerWidth; h({ content: B, screen: j }) }; return t && (g.current.open(), window.addEventListener("resize", O), setTimeout(() => { O(), b.current.focus() }, 50)), () => { r(null), a(""), window.removeEventListener("resize", O) } }, [t]); const D = we(() => N(void 0, null, function*() { if (!o || !o.hasMore || w.current) return; w.current = !0; const O = _l(s), B = yield he.get("/api/v1/stock-photos").query({ search: O, offset: o.results.length, limit: kl }), j = P(S({}, o), { results: [...o.results, ...B.body.results], hasMore: B.body.hasMore }); r(j), c(G => P(S({}, G), { [O]: j })), w.current = !1 }), [o, s]); U(() => { const O = Er(j => { const { scrollTop: G, clientHeight: ke, scrollHeight: Re } = j.target; G > Re - ke - Kse && D() }, 200, { leading: !1 }), B = x.current; return t && (B == null || B.addEventListener("scroll", O)), () => { B == null || B.removeEventListener("scroll", O) } }, [t, D]), U(() => { var O; !M || !o || !_ || (o.results.length === 0 || l || !t ? ((O = v.current) == null || O.destroy(), v.current = null) : v.current ? (v.current.reloadItems(), v.current.layout()) : setTimeout(() => { v.current = new M(".insert-image-modal-images", { itemSelector: ".insert-image-modal-item", transitionDuration: 0, gutter: wl }) }, 50)) }, [o, l, _, t]); const C = we(O => N(void 0, null, function*() { const B = _l(O); if (i[B]) { u(!1), r(i[B]), x.current.scrollTop = 0; return } try { const j = yield he.get("/api/v1/stock-photos").query({ search: B, offset: 0, limit: kl }), G = { results: j.body.results, hasMore: j.body.hasMore, term: O }; u(!1), r(G), c(ke => P(S({}, ke), { [B]: G })), x.current.scrollTop = 0 } catch (j) { u(!0) } }), [i]), L = we(wr(C, 400), [C]); U(() => { t && !o && C(_m) }, [C, t, o]); const R = O => N(void 0, null, function*() { a(O), yield L(O) }), A = O => N(void 0, null, function*() { m(!0), yield he.post("/api/v1/stock-photos").send({ downloadLocation: O.links.download_location }), n({ url: O.urls.regular, width: O.width, height: O.height, description: O.alt_description, userName: O.user.name, userHref: !!O.user.links.html }), m(!1), g.current.close() }), I = document.querySelector(".editor"); return I ? ya(p("div", { onMouseDown: O => { O.stopPropagation() } }, p(Eu, { ref: g, closePill: !0, className: "insert-media-modal insert-image-modal force-light-theme", onClose: e }, p("h3", { className: "insert-media-modal-header" }, y("Search images")), p("div", { className: "form new-form" }, p("input", { className: "insert-image-modal-search", ref: b, type: "text", "aria-label": y("Search"), placeholder: y("Search..."), value: s, onChange: O => { R(O.target.value) } })), p("div", { className: "insert-image-modal-byline" }, p(Jse, { height: 14 }), " ", y("Powered by Unsplash")), p("div", { className: "insert-image-modal-body", ref: x }, l ? p("div", { className: "insert-image-modal-empty" }, y("There was an error searching photos. Please try again later.")) : o && o.results.length > 0 ? p("div", { className: "insert-image-modal-images" }, o.results.map(O => p("div", { key: O.id, className: "insert-image-modal-item" }, p("img", { src: O.urls.small, alt: O.alt_description, width: _, height: O.height / O.width * _ }), p("div", { className: "insert-image-modal-item-footer" }, p("div", { className: "insert-image-modal-item-text" }, p("div", { className: "insert-image-modal-item-title" }, O.description), p("div", { className: "insert-image-modal-item-name" }, O.user.name)), p(Vs, { className: "btn btn-secondary btn-small btn-translucent-border", disabled: d, onClick: () => { A(O) } }, p("span", null, y("Insert"))))))) : o && o.results.length === 0 ? p("div", { className: "insert-image-modal-empty" }, T `No results for ${`“${o.term}”`}`) : null))), I) : null }, Zse = t => { var s; const { iString: e } = ue(), n = ((s = t.percentComplete) != null ? s : 0) * 100; return p(ne, { gap: 16, flex: "grow" }, p(xe, { radius: "xs", height: 40, width: 40, bg: "secondary", alignItems: "center", justifyContent: "center" }, p(Iu, { size: 24, color: "var(--color-fg-tertiary)" })), p(Y, { flex: "grow", gap: 4 }, p(ne, { justifyContent: "space-between", alignItems: "center" }, p(X.B4, { color: "primary", weight: "semibold" }, e("Upload audio file")), p(ne, { cursor: "pointer", onClick: t.onCancel }, p(yr, { size: 20, color: "var(--color-fg-secondary)" }))), p(ne, { flex: "grow", alignItems: "center", gap: 32 }, p(ne, { flex: "grow", radius: "full", bg: "tertiary", style: { height: "6px" } }, p(ne, { radius: "full", style: { width: `${n}%`, backgroundColor: "var(--color-fg-primary)" } })), p(ne, { width: 32, justifyContent: "end" }, p(X.Digit, { color: "primary" }, n.toFixed(0), "%"))))) }, Qse = ({ accept: t, onUploadClicked: e, onFileSelected: n, onRecord: s, hideRecorder: a = !1, hideReset: o = !0, onResetToDefault: r }) => { const i = J(null), { iString: c } = ue(); return p(ne, { gap: 16 }, p(xe, { radius: "xs", height: 40, width: 40, bg: "secondary", alignItems: "center", justifyContent: "center" }, p(Iu, { size: 24, color: "var(--color-fg-tertiary)" })), p(Y, { gap: 4 }, p(X.B4, { color: "primary", weight: "semibold" }, c("Upload audio file")), p(ne, { gap: 16 }, p(X.B4, { color: "pub-accent", weight: "semibold", decoration: "underline", cursor: "pointer", onClick: () => { i.current && (i.current.click(), e(i.current)) } }, c("Select file")), !a && p(X.B4, { weight: "semibold", decoration: "underline", cursor: "pointer", color: "secondary", onClick: s }, c("Record audio")), !o && p(X.B4, { color: "secondary", weight: "semibold", decoration: "underline", cursor: "pointer", onClick: r }, c("Reset audio to default"))), p("input", { style: { display: "none" }, ref: i, type: "file", accept: t, onChange: l => { l.target != null && n(l.target.files[0]) } }))) }; class eae { constructor({ channels: e = 1, sampleRate: n = 44100, bitRate: s = 192 } = {}) { const { Mp3Encoder: a } = window.lamejs; this.mp3encoder = new a(e, n, s), this.chunks = [] } append(e) { const n = this.mp3encoder.encodeBuffer(tae(e)); if (n.length > 0) return this.chunks.push(n), n } flush() { if (this.chunks.length > 0) { const e = new Blob(this.chunks, { type: "audio/mp3" }); return this.chunks = [], e } } } function tae(t) { const e = t.length, n = new Int16Array(e); for (let s = 0; s < e; s++) n[s] = Math.max(-32768, Math.min(32768, t[s] * (t[s] < 0 ? 32768 : 32767))); return n } class ee { static get STATE() { return { STOPPED: "stopped", STARTING: "starting", STARTED: "started", STOPPING: "stopping" } } static isSupported() { return !(typeof window == "undefined" || !window.navigator || !window.navigator.mediaDevices || !window.navigator.mediaDevices.getUserMedia || !window.AudioContext && !window.webkitAudioContext || !window.Float32Array || !window.Blob || !window.URL || !window.Worker) } constructor(e = {}) { this.bufferSize = 4096, this.sampleRate = 44100, this.state = ee.STATE.STOPPED, Object.assign(this, e) } get duration() { var e; return (e = this.startedAts) != null && e.length ? this.startedAts.reduce((s, a, o) => { if (this.endedAts[o]) { const r = this.endedAts[o] - a; return s + r } return s + (Date.now() - a) }, 0) / 1e3 : null } get volume() { if (this.state !== ee.STATE.STARTED || !this.analyser) return 0; const e = new Uint8Array(this.analyser.frequencyBinCount); return this.analyser.getByteFrequencyData(e), Math.max(...e) / 255 } startMicrophone() { return N(this, null, function*() { if (!ee.isSupported()) return alert("Recording is not supported on this device."), !1; if (this.microphone) try { return yield this.microphone, !0 } catch (e) { return !1 } try { this.microphone = navigator.mediaDevices.getUserMedia({ audio: !0 }), this.microphone = yield this.microphone, this.microphone.getTracks().forEach(e => { e.addEventListener("ended", () => { this.state === ee.STATE.STARTED && this.stop() }) }) } catch (e) { console.error(e), this.microphone = null } return this.microphone ? !0 : (alert("Unable to access the microphone! Please check your browser settings."), !1) }) } stopMicrophone() { return N(this, null, function*() { if (this.microphone) { if (!this.microphone.getTracks) try { yield this.microphone } catch (e) { return } if (this.state === ee.STATE.STARTED) { yield this.stop(); return } this.microphone.getTracks().forEach(e => e.stop()), this.microphone = null } }) } start() { return N(this, arguments, function*({ startAt: e = null } = {}) { if (!ee.isSupported()) throw new Error("Recording is not supported on this device"); if (this.state === ee.STATE.STOPPING) throw new Error("Currently stopping last recording"); if ([ee.STATE.STARTING, ee.STATE.STARTED].includes(this.state)) return; if (clearTimeout(this.startingTimeout), this.state = ee.STATE.STARTING, this.onStarting && this.onStarting(), !(yield this.startMicrophone())) { this.state = ee.STATE.STOPPED, this.onStopped && this.onStopped(); return } const n = window.AudioContext || window.webkitAudioContext; try { if (this.audioContext = new n({ sampleRate: this.sampleRate }), this.mp3encoder = new eae({ sampleRate: this.audioContext.sampleRate }), this.analyser = this.audioContext.createAnalyser(), this.analyser.smoothingTimeConstant = .2, this.analyser.fftSize = 1024, this.audioContext.createJavaScriptNode) this.audioNode = this.audioContext.createJavaScriptNode(this.bufferSize, 1, 1); else if (this.audioContext.createScriptProcessor) this.audioNode = this.audioContext.createScriptProcessor(this.bufferSize, 1, 1); else throw new Error("Unable to construct audio node"); this.audioInput = this.audioContext.createMediaStreamSource(this.microphone), this.audioInput.connect(this.analyser), this.analyser.connect(this.audioNode), this.audioNode.connect(this.audioContext.destination), this.startingTimeout = setTimeout(() => { this.audioNode.addEventListener("audioprocess", s => this.onAudioProcess(s)), this.state = ee.STATE.STARTED, this.startedAts = [Date.now()], this.endedAts = [], this.onStarted && this.onStarted() }, e ? Math.max(Math.max(Date.now(), +e) - Date.now(), 0) : 2e3) } catch (s) { this.state = ee.STATE.STOPPED, this.onStopped && this.onStopped(), console.error("Unable to access the microphone!", s), alert("Unable to setup microphone!") } }) } stop() { return N(this, arguments, function*({ dropRecording: e = !1, stopMicrophone: n = !0 } = {}) { if (!ee.isSupported()) throw new Error("Recording is not supported on this device"); if ([ee.STATE.STOPPING, ee.STATE.STOPPED].includes(this.state)) return; if (this.state === ee.STATE.STARTING) throw new Error("Currently starting new recording"); clearTimeout(this.startingTimeout), this.state = ee.STATE.STOPPING, this.onStopping && this.onStopping(), this.audioInput.disconnect(), this.analyser.disconnect(), this.audioNode.disconnect(), this.audioContext.close(), this.audioContext = null, this.analyser = null, this.audioNode = null, this.audioInput = null, n && (yield this.stopMicrophone()); const s = this.mp3encoder.flush(); this.mp3encoder = null, this.state = ee.STATE.STOPPED, this.endedAts.push(Date.now()), this.onStopped && this.onStopped(e ? null : s) }) } suspend() { return N(this, null, function*() { this.audioContext && (this.endedAts.push(Date.now()), this.audioContext.suspend()) }) } resume() { return N(this, null, function*() { this.audioContext && (this.startedAts.push(Date.now()), this.audioContext.resume()) }) } onAudioProcess(e) { var s; if (this.state !== ee.STATE.STARTED) return; this.mp3encoder.append(e.inputBuffer.getChannelData(0)) && ((s = this.onChunk) == null || s.call(this)) } } const nae = "_outerRing_ok6e9_1", sae = "_innerRing_ok6e9_5", aae = "_accentRing_ok6e9_9", oae = "_accentBackgroundRing_ok6e9_14", rae = "_secondaryRing_ok6e9_18", iae = "_audioRecorderControls_ok6e9_24", cae = "_audioRecorderDuration_ok6e9_29", lae = "_starting_ok6e9_36", uae = "_started_ok6e9_40", pae = "_stopping_ok6e9_41", dae = "_audioRecorderButton_ok6e9_46", mae = "_audioRecorderButtonVolume_ok6e9_73", fae = "_audioRecorderButtonInner_ok6e9_86", Tt = { outerRing: nae, innerRing: sae, accentRing: aae, accentBackgroundRing: oae, secondaryRing: rae, audioRecorderControls: iae, audioRecorderDuration: cae, starting: lae, started: uae, stopping: pae, audioRecorderButton: dae, audioRecorderButtonVolume: mae, audioRecorderButtonInner: fae }; class Cm extends nu { constructor(e, n) { super(e, n), this.onButtonClick = () => { this.recorder.state === ee.STATE.STOPPED ? (se(ae.AUDIO_PRESS_RECORD_CLICKED, { feature: this.props.feature }), this.setState({ countDown: 3 }), setTimeout(() => this.setState({ countDown: 2 }), 700), setTimeout(() => this.setState({ countDown: 1 }), 1400), this.recorder.start({ startAt: Date.now() + 2100 })) : (this.recorder.state === ee.STATE.STARTING || this.recorder.state === ee.STATE.STARTED) && this.recorder.stop() }, this.onCloseClicked = () => { var s, a; if (this.recorder.state === ee.STATE.STARTED) { if (this.recorder.suspend(), !confirm("Your recording will be discarded, are you sure?")) { this.recorder.resume(); return } this.recorder.stop({ dropRecording: !0 }), (a = (s = this.props).onRecorderStopped) == null || a.call(s) } else this.recorder.state === ee.STATE.STARTING ? this.recorder.onStarted = () => this.recorder.stop({ dropRecording: !0 }) : this.recorder.state === ee.STATE.STOPPED && this.recorder.stopMicrophone(); this.props.onCancel && this.props.onCancel() }, this.recorder = new ee({ onStarting: () => this.onRecorderChanged(), onStarted: () => this.onRecorderStarted(), onChunk: () => this.onRecorderChanged(), onStopping: () => this.onRecorderChanged(), onStopped: s => this.onRecorderChanged(s) }), this.state = { countDown: 3, recorderState: this.recorder.state, recorderDuration: this.recorder.duration, recorderVolume: this.recorder.volume } } componentDidMount() { return N(this, null, function*() { var e, n; (yield this.recorder.startMicrophone()) || (n = (e = this.props).onCancel) == null || n.call(e) }) } componentWillUnmount() { this.onCloseClicked() } onRecorderStarted() { var e, n; (n = (e = this.props).onRecorderStarted) == null || n.call(e), this.onRecorderChanged(null) } onRecorderChanged(e) { var n, s; this.setState({ recorderState: this.recorder.state, recorderDuration: this.recorder.duration, recorderVolume: this.recorder.volume }), e && ((s = (n = this.props).onComplete) == null || s.call(n, e)) } render({ iString: e }, { recorderState: n, recorderDuration: s, recorderVolume: a, countDown: o }) { var r; return p(ne, { flex: "grow", gap: 16, alignItems: "center", justifyContent: "space-between" }, n === ee.STATE.STOPPED && p(xe, { alignItems: "center", justifyContent: "center", gap: 16 }, p(xe, { radius: "full", className: fe(Tt.outerRing), height: 30, width: 30, border: "detail", onClick: this.onButtonClick, cursor: "pointer" }, p(xe, { className: fe(Tt.innerRing, Tt.accentRing, Tt.accentBackgroundRing), bg: "accent-red", radius: "full" })), p(X.B3, { color: "primary", weight: "semibold" }, (r = e == null ? void 0 : e("Start recording")) != null ? r : "Start recording")), [ee.STATE.STARTED, ee.STATE.STARTING].includes(n) && p(xe, { alignItems: "center", justifyContent: "center", gap: 16 }, p(xe, { radius: "full", className: fe(Tt.outerRing, Tt.accentRing), height: 30, width: 30, border: "detail", onClick: this.onButtonClick, cursor: "pointer" }, p(xe, { className: fe(Tt.innerRing, Tt.accentRing, Tt.accentBackgroundRing), bg: "accent-red" })), n === ee.STATE.STARTING && p(X.B3, { color: "primary", weight: "semibold" }, o, "..."), n === ee.STATE.STARTED && p(X.B3, { color: "primary", weight: "semibold" }, Hl(s != null ? s : 0))), p(ft, { priority: "secondary", fill: "empty", rounded: !0, onClick: this.onCloseClicked }, p(yr, null))) } } Cm.contextType = Bh; const hae = zh(Cm); class gae extends xg { constructor(e, n) { var s; super(e, n), this.state = { recording: (s = this.props.skipToRecordStep) != null ? s : !1 } } trackUploadClicked() { se(ae.UPLOAD_EPISODE_AUDIO_CLICKED) } render({ onRecorderStarted: e, onRecorderStopped: n, feature: s, mediaUpload: a, transcodeTimeLeft: o, removeUpload: r, hideRecorder: i, hideReset: c }, { preuploading: l, uploading: u, recording: d, percentComplete: m }) { var E, _, k, M; const f = (a == null ? void 0 : a.state) === "uploaded", h = d, g = !h && (u || l), b = !h && !g && !f, { iString: x } = this.i18n, v = (_ = (E = this.props.components) == null ? void 0 : E.AudioDecider) != null ? _ : Qse, w = (M = (k = this.props.components) == null ? void 0 : k.AudioRecorder) != null ? M : hae; return p(ne, { flex: "grow", border: "detail", radius: "sm", alignItems: "center", paddingY: 16, paddingX: 12, gap: 8 }, b && p(v, P(S({}, this.props), { accept: this.accepts, onUploadClicked: this.onUploadClicked, onFileSelected: this.onFileSelected, onRecord: () => this.setState({ recording: !0 }), hideRecorder: i, hideReset: c, onResetToDefault: this.props.onResetToDefault })), h && p(w, { feature: s, onComplete: y => { this.setState({ recording: !1 }), y && this.uploadToS3(y), n == null || n() }, onCancel: () => { this.setState({ recording: !1 }) }, onRecorderStarted: e, onRecorderStopped: n }), g && p(Zse, { percentComplete: m, onCancel: () => { var y, T; confirm(x("Are you sure you want to cancel the upload?")) && (this.cancelUpload(), (T = (y = this.props).onUploadCanceled) == null || T.call(y)) } }), f && p(yg, { onCancel: r })) } } class ri extends wg { constructor(e, n) { super(e, n), this.removeAudio = () => { var s, a; this.props.legacyPodcastUrl ? (a = (s = this.props).onRemoveLegacyUrl) == null || a.call(s) : this.removeUpload() }, this.state = { mediaUploadId: e.mediaUploadId, mediaUpload: e.mediaUpload || null, estimatedTimeLeftAt: null, timeLeft: 0, percentComplete: 1, dismissedAudioErrorModal: !1 } } isPodcast() { return [An.Podcast, An.PodcastPreview].includes(this.props.feature) } render({ onDeleteErroredUpload: e, feature: n, pub: s, initialFile: a, postId: o, setPostId: r, onRecorderStopped: i, onError: c, onRecorderStarted: l, onUploadStarted: u, legacyPodcastUrl: d, onUploadCanceled: m, skipToRecordStep: f, hideRecorder: h, hideReset: g, components: b }, { mediaUpload: x, timeLeft: v, dismissedAudioErrorModal: w }) { var M, y; const E = (M = b == null ? void 0 : b.AuditionPlayer) != null ? M : Dg, _ = (y = b == null ? void 0 : b.AudioUploader) != null ? y : gae, k = _a(x); return d ? p(Gi, { feature: n, pub: s, src: d, render: T => p(E, P(S({}, T), { onRemove: this.removeAudio })) }) : p(be, null, (!x || x.state !== "transcoded" || k) && p(_, { feature: n, initialFile: a, mediaType: "audio", postId: o, onUpload: T => this.onMediaUpload({ mediaUpload: T }), setPostId: r, onRecorderStarted: l, onRecorderStopped: i, onError: c, mediaUpload: x, removeUpload: this.removeUpload, onUploadCanceled: m, onUploadStarted: u, transcodeTimeLeft: v, skipToRecordStep: f, language: this.props.language, hideRecorder: h, hideReset: g, onResetToDefault: this.props.onResetToDefault }), (x == null ? void 0 : x.state) === "transcoded" && p(Gi, { feature: n, pub: s, src: x ? En(`/api/v1/audio/upload/${x.id}/src`) : d, render: T => p(E, P(S({}, T), { onRemove: this.removeAudio })), duration: x == null ? void 0 : x.duration, playbackRate: 1 }), k && p(xr, { isOpen: !w, onDeleteAudio: () => { e ? e({ skipConfirm: !0 }) : this.removeAudio() }, onDismiss: () => { this.setState({ dismissedAudioErrorModal: !0 }) } })) } } const bae = Er((t, e) => { t({ mediaUploadId: e == null ? void 0 : e.id, duration: e == null ? void 0 : e.duration, mediaUpload: e }) }, 1e3, { trailing: !1 }), vae = ({ id: t, droppedFile: e, open: n, pub: s, postId: a, onSave: o, onClose: r, setPostId: i }) => { const [c, l] = z(e != null ? e : null), [u, d] = z(null), [m, f] = z(!1), { iString: h, language: g } = ue(); U(() => { l(e) }, [e]); const b = () => { m && !confirm(h("Your audio will be discarded, are you sure?")) || (se(ae.AUDIO_MODAL_CANCEL_CLICKED, { has_media_upload: !!u }), x()) }, x = () => { d(null), l(null), r() }, v = (u == null ? void 0 : u.state) !== "transcoded"; return p(ym, { wrapperId: t, title: h(An.Embed), isOpen: n, onClose: b, primaryButton: p(Pt, { disabled: !v, text: h("Audio needed") }, p(Ae, { priority: "primary-theme", fill: "filled", onClick: () => { se(ae.AUDIO_MODAL_INSERT_CLICKED), bae(o, u), x() }, disabled: v }, h("Insert"))), secondaryButton: p(Ae, { priority: "secondary", fill: "outline", onClick: b }, h("Cancel")) }, p(X.B4, { paddingBottom: 24 }, h(Jh.Embed)), p(Y, { padding: 16, radius: "md", border: "detail" }, p(X.B2, { weight: "semibold", translated: !0, paddingBottom: 16 }, "Create audio"), p(ri, { initialFile: c, feature: An.Embed, mediaType: "audio", pub: s, postId: a, setPostId: i, onChange: ({ mediaUpload: w }) => { f(!1), d(w), l(null) }, onUploadStarted: () => { f(!0) }, onUploadCanceled: () => { f(!1) }, mediaUpload: u, mediaUploadId: u == null ? void 0 : u.id, onRemoveLegacyUrl: null, language: g }))) }, xae = "_surveyModalDropdown_6u9jk_1", yae = { surveyModalDropdown: xae }, wae = ({ isOpen: t, onInsert: e, onClose: n, pub: s }) => { var b, x; const { iString: a, iTemplate: o } = ue(), [r, i] = z(null), [c, l] = z(a("Start Survey")), { isLoading: u, result: d, refetch: m } = $o({ pathname: "/api/v1/survey", auto: !1 }), { isLoading: f, result: h, refetch: g } = $o({ pathname: "/api/v1/survey", auto: !1, method: "POST", json: { title: (b = d == null ? void 0 : d.surveys) != null && b.length ? o `Reader Survey ${((x=d==null?void 0:d.surveys)==null?void 0:x.length)+1}` : o `Reader Survey` } }); return U(() => { const v = w => { w.data === "surveySavedInPopup" && m() }; return t && !f && h && (window.open($f(s, h.id, { popup: !0 }), "_blank"), window.addEventListener("message", v)), () => { window.removeEventListener("message", v) } }, [t, f, h]), U(() => { t && !d && !u && m() }, [t, d, m, u]), p(ms, { isOpen: t }, p(Y, { paddingY: 40, paddingX: 16, gap: 24 }, u && p(Sn, null), !u && d && p(Y, { gap: 32 }, p(X.H3, null, "Insert a Survey"), p(Y, { gap: 4 }, p(X.B4, { weight: "semibold" }, "Survey to insert"), p(Xg, { placeholder: a("Select a reader survey"), value: r, onChange: v => { if (v === "new") { g(); return } i(v) }, options: d.surveys.map(v => ({ value: v.id, label: v.title })).concat({ value: "new", label: "Create new survey" }), buttonClassName: yae.surveyModalDropdown })), p(Y, { gap: 4 }, p(X.B4, { weight: "semibold" }, "Button text"), p(rs, { value: c, onChange: v => { l(v.target.value) } })), p(ne, { alignItems: "center", justifyContent: "end", gap: 8 }, p(Ae, { priority: "primary-theme", disabled: !r || f, onClick: () => { const v = d.surveys.find(w => w.id === r); e(v, c) } }, "Insert"), p(Ae, { disabled: f, priority: "secondary-theme", outline: "none", onClick: n }, "Cancel"))))) }, kae = (t, e, n) => { se(ae.EDITOR_MENU_ICON_CLICKED, { button: n }), e(t) }; function ii(t, e) { return we(n => { t && (e ? kae(n, t, e) : t(n)) }, [t, e]) } const $e = wa((r, o) => { var i = r, { trackedName: t, testId: e, priority: n = "tertiary", onClick: s } = i, a = st(i, ["trackedName", "testId", "priority", "onClick"]); const c = ii(s, t); return p(vu, P(S({}, a), { size: "sm", "data-testId": e, onClick: c, ref: o, priority: n })) }), ci = wa((r, o) => { var i = r, { trackedName: t, testId: e, priority: n = "tertiary", onClick: s } = i, a = st(i, ["trackedName", "testId", "priority", "onClick"]); const c = ii(s, t); return p(ta, P(S({}, a), { size: "sm", "data-testId": e, onClick: c, ref: o, priority: n })) }), Q = wa((o, a) => { var r = o, { trackedName: t, testId: e, onClick: n } = r, s = st(r, ["trackedName", "testId", "onClick"]); const i = ii(n, t); return p(vn, P(S({}, s), { "data-testId": e, onClick: i, ref: a })) }), Jt = () => p(Y, { height: 32, paddingY: 4, sizing: "border-box" }, p(Gg, null)), _ae = ({ level: t }) => { switch (t) { case 1: return p(bb, { size: 20 }); case 2: return p(vb, { size: 20 }); case 3: return p(xb, { size: 20 }); case 4: return p(yb, { size: 20 }); case 5: return p(wb, { size: 20 }); case 6: return p(kb, { size: 20 }); default: return p(_b, { size: 20 }) } }, Cae = ({ editor: t }) => { const { iString: e, iTemplate: n } = ue(); return p(be, null, p(Q, { onClick: () => t == null ? void 0 : t.chain().focus().setParagraph().run(), rightIcon: (t == null ? void 0 : t.isActive("paragraph")) && p(sa, { size: 20 }), icon: p(Db, { size: 20 }), trackedName: "paragraph" }, e("Normal text")), [1, 2, 3, 4, 5, 6].map(s => p(Q, { onClick: () => t == null ? void 0 : t.chain().focus().toggleHeading({ level: s }).run(), rightIcon: (t == null ? void 0 : t.isActive("heading", { level: s })) && p(sa, { size: 20 }), icon: p(_ae, { level: s }) }, n `Heading ${s}`))) }, Eae = ({ editor: t }) => { const { iString: e } = ue(); return p(Mt, { trigger: p(ci, { trailing: p(Ar, { size: 20 }), testId: "style-picker" }, e("Style")), layerOptions: { triggerOffset: 4, placement: "bottom-start" } }, p(Cae, { editor: t })) }, Aae = ({ editor: t, publication: e, postId: n, get_coupons: s, insert_coupon: a, hideSharePostAndComment: o = !1, writerReferralCode: r, customSpecialOfferCommand: i = null, customCustomButtonCommand: c = null, user: l, setIsSurveyModalOpen: u }) => { var E; const { userSettings: d } = Yg(), { result: m } = $o({ pathname: "/api/v1/meetings/config", initialResult: { meetings: { enabled: !1 } }, auto: Xn("meetings_v1") && (e == null ? void 0 : e.payments_state) === "enabled", deps: [] }), h = (d.messageRequestLevel || "nobody") !== "nobody", { iString: g, iTemplate: b, language: x } = ue(), v = Hf(e), { getSettingFor: w } = qh(); return p(be, null, p(Q, { onClick: () => { t.chain().focus().insertSubscribeButton(e).run() }, trackedName: "button_subscribe", testId: "insert-subscribe-button" }, _n(e, { now: !1, language: x })), p(Q, { onClick: () => t.chain().focus().insertSubscribeButtonWithPreamble(e).run(), trackedName: "button_subscribe_with_preamble" }, g("Subscribe with caption")), !o && p(to, null, p(Q, { onClick: () => t.chain().focus().insertSharePostButton(e).run(), trackedName: "button_share_post" }, g("Share post")), p(Q, { onClick: () => t.chain().focus().insertCaptionedShareButton(e).run(), trackedName: "button_share_with_preamble" }, g("Share post with caption")), p(Q, { onClick: () => t.chain().focus().insertSharePubButton(e).run(), trackedName: "button_share_publication" }, g("Share publication"))), p(to, null, !o && p(Q, { onClick: () => t.chain().focus().insertCommentsButton(e).run(), trackedName: "button_insert_comment" }, g("Leave a comment")), h && l && p(Q, { onClick: () => { t.chain().focus().insertDirectMessage({ user: l }).run() }, trackedName: "button_dm_author" }, g("Send a message")), !!(e != null && e.threads_v2_enabled) && p(Q, { testId: "visit-thread-btn", onClick: () => t.chain().focus().insertVisitThreadButton(e).run(), trackedName: "button_visit_thread" }, g("Join the chat")), p(Q, { testId: "get-app-btn", onClick: () => t.chain().focus().insertInstallSubstackAppEmbed(e).run(), trackedName: "install_substack_app" }, g("Get the app"))), p(to, null, p(Q, { onClick: c || (() => t.chain().focus().insertCustomButton({ scrollParent: "editor", parentClass: "more-dropdown", TextField: Va, openPrompt: ma, publication: e }).run()), trackedName: "button_custom" }, g("Custom...")), p(Ig, { content: g("More...") }, w("reader_referrals_enabled") && p(Q, { onClick: () => t.chain().focus().insertReferralButton(e).run(), trackedName: "button_referral" }, g("Refer a friend")), r && p(Q, { onClick: () => t.chain().focus().insertCaptionedWriterReferralButton({ writerReferralCode: r, publication: e, postId: n }).run(), trackedName: "button_writer_referral" }, g("Refer a writer")), v && p(be, null, p(Q, { onClick: i || (() => { const _ = e; return t.chain().focus().insertSpecialOfferButton({ couponPub: _, scrollParent: "editor", parentClass: "more-dropdown", get_coupons: s, insert_coupon: a, SelectField: rQ, openPrompt: ma, closePrompt: Jr, getNetworkErrorMessage: Ft }).run() }), trackedName: "button_special_offer" }, g("Special offer")), p(Q, { onClick: () => t.chain().focus().insertGiftButton(e).run(), trackedName: "button_gift" }, Cn(e, () => b `Give a gift subscription`, _ => `Give a gift ${_.subscription}`)), p(Q, { onClick: () => { const _ = e; t.chain().focus().insertGroupSubscriptionButton({ publication: _ }).run() }, trackedName: "button_group_subscription" }, Cn(e, () => b `Get a group subscription`, _ => `Get a group ${_.subscription}`))), p(Q, { testId: "survey-prompt-btn", onClick: () => u(!0), trackedName: "survey_button" }, g("Link to survey")), Xn("meetings_v1") && (e == null ? void 0 : e.payments_state) === "enabled" && ((E = m == null ? void 0 : m.meetings) == null ? void 0 : E.enabled) && p(Q, { onClick: () => { var _; return t.chain().focus().insertMeeting({ publication: e, meetingsConfig: m == null ? void 0 : m.meetings, usePublicationName: (_ = Xn("meetings_embed_publication_name")) != null ? _ : !1 }).run() }, trackedName: "button_book_meeting" }, g("Book a meeting"))))) }, Sae = ({ editor: t, setPostPaidForPaywall: e, setPostId: n, isAdhocEmail: s, pub: a, customInsertRuleCommand: o = void 0, canAddPaywall: r = !0, setFinancialChartModalOpen: i, setIsLatexDropdownOpen: c }) => { const { iString: l } = ue(), u = Xn("recipes_enabled"); return p(be, null, p(Q, { disabled: !(t != null && t.can().toggleCodeBlock()), onClick: () => { t.chain().focus().toggleCodeBlock().run() }, icon: p(db, { size: 20 }), trackedName: "code_block" }, l("Code block")), p(Q, { onClick: o || (() => t.chain().focus().setHorizontalRule().run()), icon: p(qg, { size: 20 }), trackedName: "horizontal_rule" }, l("Divider")), p(Q, { onClick: () => { i(!0) }, icon: p(ob, null), trackedName: "financial_chart" }, l("Financial chart")), p(Q, { disabled: !(t != null && t.can().insertFootnote()), onClick: () => { t.chain().focus().insertFootnote().run() }, icon: p(pb, { size: 20 }), trackedName: "footnote" }, l("Footnote")), p(Q, { disabled: !(t != null && t.can().insertLatex({ expression: "" })), onClick: () => t.chain().focus().insertLatex({ expression: "" }).run(), icon: p(Mb, null), trackedName: "latex_block" }, l("LaTeX")), u && p(Q, { disabled: !1, onClick: () => N(void 0, null, function*() { const d = yield n(); if (!d) return; const m = yield he.post("/api/v1/recipe").send({ post_id: d }); t.chain().focus().insertRecipe({ id: m.body.id }).run() }), icon: p(mb, null), trackedName: "recipe", testId: "add-recipe-button" }, l("Recipe")), r && !s && p(Q, { disabled: !(t != null && t.can().addPaywall(e)), onClick: () => t.chain().focus().addPaywall(e).run(), icon: p(fb, { size: 20 }), testId: "add-paywall-button", trackedName: "paywall" }, l("Paywall")), p(Q, { disabled: !(t != null && t.can().toggleNode("preformatted_text_block", "paragraph")), onClick: () => t.chain().focus().toggleNode("preformatted_text_block", "paragraph").run(), icon: p(gb, { size: 20 }), trackedName: "preformatted_text_block" }, l("Poetry")), p(Q, { onClick: () => N(void 0, null, function*() { const d = yield n(); if (!d) return; const m = yield he.post("/api/v1/poll").send({ post_id: d }); t.chain().focus().insertPoll({ id: m.body.id }).run() }), icon: p(zg, { size: 20 }), trackedName: "poll" }, l("Poll"))) }, Tae = ({ editor: t, publication: e, get_coupons: n, insert_coupon: s, hideSharePostAndComment: a = !1, writerReferralCode: o, postId: r, customSpecialOfferCommand: i = null, customCustomButtonCommand: c = null, user: l, setIsSurveyModalOpen: u }) => { const { iString: d } = ue(); return p(Mt, { trigger: p(ci, { trailing: p(Ar, { size: 20 }), testId: "button-picker" }, d("Button")), layerOptions: { triggerOffset: 4, placement: "bottom-start" } }, p(Aae, { user: l, editor: t, publication: e, get_coupons: n, insert_coupon: s, hideSharePostAndComment: a, writerReferralCode: o, postId: r, setIsSurveyModalOpen: u, customSpecialOfferCommand: i, customCustomButtonCommand: c })) }, Dae = ({ editor: t, setPostPaidForPaywall: e, setPostId: n, isAdhocEmail: s, pub: a, customInsertRuleCommand: o = void 0, canAddPaywall: r = !0, setFinancialChartModalOpen: i, setIsLatexDropdownOpen: c }) => { const { iString: l } = ue(); return p(Mt, { trigger: p(ci, { trailing: p(Ar, { size: 20 }), testId: "more-submenu", className: "more-dropdown" }, l("More")), layerOptions: { triggerOffset: 4, placement: "bottom-start" } }, p(Sae, { isAdhocEmail: s, editor: t, pub: a, setPostPaidForPaywall: e, setPostId: n, customInsertRuleCommand: o, canAddPaywall: r, setFinancialChartModalOpen: i, setIsLatexDropdownOpen: c })) }, Iae = ({ editor: t, insertImageFile: e, publication: n, postId: s }) => { const [a, o] = z(!1), [r, i] = z(!1), [c, l] = z(!1), [u, d] = z(!1), { iString: m, iTemplate: f } = ue(), h = g => { g.preventDefault(), d(!0), i(!0) }; return U(() => (document.addEventListener("editSelectedImageGallery", h), () => { document.removeEventListener("editSelectedImageGallery", h) }), []), p(be, null, p(Mt, { trigger: p($e, { title: "Insert image" }, p(Ho, { size: 20 })), layerOptions: { triggerOffset: 4, placement: "bottom-start" } }, p(Q, { onClick: () => t.chain().focus().insertImage(e).run(), icon: p(Fh, null), trackedName: "image_upload" }, m("Add image")), p(Q, { onClick: () => i(!0), icon: p(ng, null), trackedName: "image_gallery" }, m("Add gallery")), p(Q, { onClick: () => { o(!0) }, icon: p(ab, { size: 20 }), testId: "image-unsplash", trackedName: "image_unsplash" }, m("Add stock photo")), p(Q, { onClick: () => { l(!0) }, icon: p(Lb, null), trackedName: "image_generate" }, m("Generate"))), p(Xse, { open: a, onAfterClose: () => { o(!1) }, onSelectStockImage: g => { t.chain().focus().insertUnsplashImage(g).run() } }), p(Wse, { pub: n, postId: s, editor: t, editingCurrentSelection: u, isOpen: r, onInsertGallery: g => { t.chain().focus().insertImageGallery({ gallery: g }).run() }, onUpdateGallery: g => { t.chain().focus().updateImageGallery({ gallery: g }).run() }, onClose: () => { d(!1), i(!1) } }), p(Wg, { open: c, onAfterClose: () => l(!1), onImageSelected: null, insertionPointSelector: ".editor", onUrlSelected: x => N(void 0, [x], function*({ url: g, prompt: b }) { const v = yield he.post("/api/v1/image").send({ image: g, postId: s != null ? s : void 0 }); t.chain().focus().insertImageFromUrl({ url: v.body.url, caption: b || "", width: Uf, height: Vf }).run(), l(!1) }) })) }, Nae = ({ editor: t }) => { const { iString: e } = ue(); return p(Mt, { trigger: p($e, { title: "Insert quote", disabled: !(t != null && t.can().togglePullquote()) && !(t != null && t.can().toggleBlockquote()) }, p(Sb, { size: 20 })), layerOptions: { triggerOffset: 4, placement: "bottom-start" } }, p(Q, { disabled: !(t != null && t.can().toggleBlockquote()), onClick: () => t == null ? void 0 : t.chain().focus().toggleBlockquote().run(), rightIcon: (t == null ? void 0 : t.isActive("blockquote")) && p(sa, { size: 20 }), trackedName: "blockquote" }, e("Block quote")), p(Q, { disabled: !(t != null && t.can().togglePullquote()), onClick: () => { t == null || t.chain().focus().togglePullquote().run() }, rightIcon: (t == null ? void 0 : t.isActive("pullquote")) && p(sa, { size: 20 }), trackedName: "pullquote" }, e("Pull quote"))) }, It = () => { if (window) return window.LatexModalEvent || (window.LatexModalEvent = new EventTarget), window.LatexModalEvent }, Mae = ({ editor: t, isOpen: e, setIsOpen: n }) => { var o; const [s, a] = z(null); return ue(), U(() => { const r = ({ detail: i }) => { a(i.node), n(!0) }; return It().addEventListener("open", r), () => { It().removeEventListener("open", r) } }, [e, s]), U(() => { const r = ({ detail: i }) => { i.node.attrs = P(S({}, i.node.attrs), { persistentExpression: i.persistentExpression }), i.node.attrs.dirty = !0, a(i.node) }; return It().addEventListener("close", r), () => { It().removeEventListener("close", r) } }, [e, s]), p(qae, { isOpen: e, onClose: () => { n(!1) }, node: s, persistentExpression: ((o = s == null ? void 0 : s.attrs) == null ? void 0 : o.persistentExpression) || "" }) }, Oae = ({ editor: t, publication: e, postId: n, setPostId: s, voiceoverEnabled: a, audioEmbedsEnabled: o, showAudioEduTooltip: r, showingDrawerName: i, setShowDrawer: c }) => { const { iString: l } = ue(); return p(be, null, p(Mt, { trigger: p($e, { title: "Insert audio" }, p(gg, { size: 20 })), layerOptions: { triggerOffset: 4, placement: "bottom-start" } }, a && p(Q, { onClick: () => { c("voiceover") }, trackedName: "voiceover", icon: p(Go, { size: 20 }) }, l("Voiceover")), o && p(Q, { trackedName: "audio_embed", onClick: () => { c("audioEmbed") }, icon: p(Ib, { size: 20 }) }, l("Audio embed"))), p(vae, { id: "audioEmbed", open: i === "audioEmbed", pub: e, postId: n, onClose: () => c(null), onSave: ({ mediaUploadId: u, duration: d }) => { t.chain().focus().insertAudio({ mediaUploadId: u, duration: d }).run() }, setPostId: s })) }, Lae = ({ editor: t, publication: e, postId: n, isAdhocEmail: s, insertImageFile: a, get_coupons: o, insert_coupon: r, setPostPaidForPaywall: i, voiceoverEnabled: c, audioEmbedsEnabled: l, showAudioEduTooltip: u, setPostId: d, hideSharePostAndComment: m = !1, showingDrawerName: f, setShowDrawer: h, writerReferralCode: g, canAddPaywall: b, user: x }) => { const { iString: v, iTemplate: w } = ue(), [E, _] = z(!1), [k, M] = z(!1), [y, T] = z(!1); if (!t) return; const D = Vl(), C = (t == null ? void 0 : t.isActive("orderedList")) || (t == null ? void 0 : t.isActive("bulletList")); return p(bu, null, p(xe, { paddingX: 16, justifyContent: "center", bg: "primary", className: fe("tiptap-menu") }, p(xe, { wrap: "wrap", gap: 12, paddingY: 8, alignItems: "center" }, p(xe, { gap: 4 }, p($e, { onClick: () => t.chain().focus().undo().run(), disabled: !t.can().undo(), title: w `Undo ${D}Z`, trackedName: "undo" }, p(Ob, { size: 20 })), p($e, { onClick: () => t.chain().focus().redo().run(), disabled: !t.can().redo(), title: w `Redo ${D}⇧Z`, trackedName: "redo" }, p(Nb, { size: 20 }))), p(Jt, null), p(xe, { gap: 4 }, p(Eae, { editor: t })), p(Jt, null), p(xe, { gap: 4 }, p($e, { priority: t.isActive("bold") ? "secondary" : "tertiary", onClick: () => t.chain().focus().toggleBold().run(), disabled: !t.can().toggleBold(), title: w `Bold ${D}B`, trackedName: "toggle_bold" }, p(Zg, { size: 20 })), p($e, { priority: t.isActive("italic") ? "secondary" : "tertiary", onClick: () => t.chain().focus().toggleItalic().run(), disabled: !t.can().toggleItalic(), title: w `Italic ${D}I`, trackedName: "toggle_italic" }, p(Qg, { size: 20 })), p($e, { onClick: () => t.chain().focus().toggleStrike().run(), disabled: !t.can().toggleStrike(), priority: t.isActive("strike") ? "secondary" : "tertiary", title: w `Strikethrough ${D}⇧X`, trackedName: "toggle_strikethrough" }, p(eb, { size: 20 })), p($e, { priority: t.isActive("code") ? "secondary" : "tertiary", onClick: () => t.chain().focus().toggleCode().run(), disabled: !t.can().toggleCode(), title: v("Code"), trackedName: "toggle_code_mark" }, p(Bg, { size: 20 }))), p(Jt, null), p(xe, { gap: 4 }, p($e, { onClick: () => t.chain().addLink().run(), title: w `Link ${D}K`, trackedName: "link" }, p(Fu, { size: 20 })), p(Iae, { editor: t, insertImageFile: a, publication: e, postId: n }), !s && (c || l) && p(Oae, { editor: t, publication: e, postId: n, setPostId: d, voiceoverEnabled: c, audioEmbedsEnabled: l, showAudioEduTooltip: u, showingDrawerName: f, setShowDrawer: h }), !s && p(yse, { editor: t, pub: e, postId: n != null ? n : null, setPostId: d }), p(Nae, { editor: t })), p(Jt, null), p(xe, { gap: 4 }, p($e, { priority: t != null && t.isActive("bulletList") ? "secondary" : "tertiary", disabled: !(t != null && t.can().toggleBulletList()), onClick: () => t.chain().focus().toggleBulletList().run(), title: v("Bulleted list"), trackedName: "bullet_list" }, p(sb, { size: 20 })), p($e, { priority: t != null && t.isActive("orderedList") ? "secondary" : "tertiary", disabled: !(t != null && t.can().toggleOrderedList()), onClick: () => t.chain().focus().toggleOrderedList().run(), title: v("Numbered list"), trackedName: "ordered_list" }, p(tb, { size: 20 })), C && p(be, null, p(Jt, null), p($e, { disabled: !(t != null && t.can().sinkListItem("listItem")), onClick: () => t.chain().focus().sinkListItem("listItem").run(), title: v("Indent"), trackedName: "indent_list" }, p(Qi, { size: 20 })), p($e, { disabled: !(t != null && t.can().liftListItem("listItem")), onClick: () => t.chain().focus().liftListItem("listItem").run(), title: v("Deindent"), trackedName: "deindent_list" }, p(Qi, { size: 20, style: { transform: "scaleX(-1)" } })))), p(Jt, null), p(xe, { gap: 4 }, p(Tae, { user: x, editor: t, publication: e, get_coupons: o, insert_coupon: r, hideSharePostAndComment: m, writerReferralCode: g, postId: n, setIsSurveyModalOpen: _ })), p(Jt, null), p(xe, { gap: 4 }, p(Dae, { isAdhocEmail: s, canAddPaywall: b, editor: t, setPostPaidForPaywall: i, setPostId: d, pub: e, setFinancialChartModalOpen: M, setIsLatexDropdownOpen: T })))), e && p(wae, { isOpen: E, pub: e, onClose: () => { _(!1) }, onInsert: (L, R) => { t.chain().focus().insertSurveyButton(e, L, R).run(), _(!1) } }), p(Ese, { isOpen: k, onClose: () => { M(!1) }, onInsert: ({ url: L, width: R, height: A }) => { t.chain().focus().insertTradingViewImageFromUrl({ url: L, height: A, width: R }).run() } }), p(Mae, { editor: t, isOpen: y, setIsOpen: T })) }, Rae = t => { try { return Lae(t) } catch (e) { return window.Sentry && window.Sentry.captureException(e), p(be, null) } }, Pae = "_latexWrapper_zecxq_1", Bae = "_latexEdit_zecxq_12", zae = "_emptyStateWrapper_zecxq_41", Mo = { latexWrapper: Pae, latexEdit: Bae, emptyStateWrapper: zae }, qae = ({ isOpen: t, onClose: e, persistentExpression: n, node: s }) => { const [a, o] = z(n), { iString: r } = ue(), [i, c] = z(() => wr(o, 1e3)); return U(() => { o(n) }, [n]), p(ju, null, p(ms, { isOpen: t, onClose: e, "data-test-id": "latex-modal" }, p(fs, null, p(Y, { paddingTop: 8, gap: 24 }, p(Y, { gap: 24 }, p(ne, { justifyContent: "space-between", alignItems: "center" }, p(X.Meta, { translated: !0 }, "LaTeX Editor")), p(rg, { "data-test-id": "latex-input", rows: 4, maxLength: 1e3, value: a, name: "expression", onChange: l => { i(l.target.value) } })), a ? p(Y, { height: 150 }, p($u, { typesettingOptions: { fn: "tex2chtml", options: void 0 }, text: `${a}`, renderMode: "pre", inline: !1, dynamic: !0 })) : p(Y, null, p(Y, { radius: "md", paddingX: 12, paddingY: 20, alignItems: "center" }, p(X.B4, { fontStyle: "italic", translated: !0, color: "secondary", align: "center" }, "Write LaTeX expressions in the above editor and they'll appear here"))))), p(ds, { includeDivider: !1, alignment: "default", primaryButton: p(Ae, { "data-test-id": "latex-save", priority: "primary-theme", onClick: () => { se(ae.LATEX_BLOCK_ADDED, { expression: a }), It().dispatchEvent(new CustomEvent("close", { detail: { persistentExpression: a, node: s } })), e() } }, r("Save")), secondaryButton: p(Ae, { "data-test-id": "latex-cancel", fill: "empty", outline: "none", priority: "secondary", onClick: () => { It().dispatchEvent(new CustomEvent("close", { detail: { persistentExpression: n, node: s } })), a !== n && o(n), e() } }, r("Cancel")) }))) }, Em = ({ node: t, id: e }) => { const [n, s] = z(t.attrs.persistentExpression); return U(() => { s(t.attrs.persistentExpression) }, [t]), U(() => { const a = ({ detail: o }) => { if (o.node.attrs.id === t.attrs.id) { const r = o.persistentExpression; s(r) } }; return It().addEventListener("close", a), () => { It().removeEventListener("close", a) } }, []), p(wt, { "data-drag-handle": "" }, p(ju, null, p("div", { className: "latex-block", id: e }, p(Y, { className: fe(Mo.latexWrapper, t.attrs.persistentExpression || Gf() ? Mo.emptyStateWrapper : null), radius: "md", "data-attrs": JSON.stringify({ persistentExpression: n, id: t.attrs.id }), onClick: () => { n !== t.attrs.persistentExpression && s(t.attrs.persistentExpression), It().dispatchEvent(new CustomEvent("open", { detail: { persistentExpression: t.attrs.persistentExpression, node: t } })) } }, p(ne, { paddingY: 8, paddingX: 16, flex: "grow", justifyContent: "center", alignItems: "center" }, n || t.attrs.persistentExpression ? p(Y, { alignItems: "center", justifyContent: "center" }, p($u, { typesettingOptions: { fn: "tex2chtml", options: void 0 }, text: `${n||t.attrs.persistentExpression}`, renderMode: "pre", inline: !1, dynamic: !0 })) : p(Y, { alignSelf: "center" }, p(X.Meta, { fontStyle: "italic", translated: !0, color: "secondary" }, "Edit & enter LaTeX expressions here")), p(Y, null, p("button", { className: Mo.latexEdit }, p(rb, { width: 20, height: 20 })))))))) }, Am = () => { let t = ""; const e = "ABCDEFGHIJKLMNOPQRSTUVWXYZ", n = e.length; for (let s = 0; s < 10; s++) t += e.charAt(Math.floor(Math.random() * n)); return t }, Sm = { content: "text*", group: "block", code: !0, defining: !0, isolating: !0, attrs: { persistentExpression: { default: "" }, id: { default: "" } }, parseDOM: [{ tag: "pre.text", preserveWhitespace: "full", priority: 60 }, { tag: "div.latexWrapper", getAttrs: re }], toDOM: t => ["div", { class: "latex-rendered", "data-attrs": JSON.stringify(S({}, t.attrs)), "data-component-name": "LatexBlockToDOM" }], toDOMStatic: t => ["div", { class: "latex-rendered", "data-attrs": JSON.stringify(P(S({}, t.attrs), { isEmail: !0 })), "data-component-name": "LatexBlockToDOMStatic" }] }, Fae = F({ name: "latex_block", nodeSpec: Sm, addCommands() { return { insertLatex: t => ({ commands: e }) => e.insertContent({ type: this.name, attrs: t }) } }, addNodeView() { return kt(Em) } }), jae = t => { try { const e = document.createElement("span"); e.className = "latex-rendered"; const n = Am(), s = t == null ? void 0 : t.attrs.persistentExpression; return ur(p(Em, { persistentExpression: s, node: t, id: n }), e), e } catch (e) { return console.error("Error rendering LatexComponent", e), Oe({ msg: null, node: t, err: e, group: "block" }) } }; class $ae { constructor(e) { e.updateExpression = n => { e.attrs = P(S({}, e.attrs), { persistentExpression: n }), e.attrs.dirty = !0 }, this.dom = jae(e) } } const Uae = ({ expression: t }) => (e, n) => { const s = Am(); return n && n(ie(e, e.schema.nodes.latex_block.create({ persistentExpression: t, id: s }))), !0 }, Vae = Pe.create({ name: "latexInsert", addCommands() { return { insertLatex: ({ expression: t }) => ({ state: e, dispatch: n }) => Uae({ expression: t })(e, n) } } }), Hae = ({ publication: t, meetingsConfig: e, usePublicationName: n }) => (s, a) => { let o = su({ id: e.user_id, photo_url: e.user_profile_photo_url }); return n && t.logo_url && (o = q(t.logo_url, 112)), a && a(ie(s, s.schema.nodes.meeting.create({ name: n ? t.name : e.user_name, avatarUrl: o, url: au(t, { addBase: !0, params: { source: "embed" } }), isEditorNode: !0 }))), !0 }, Gae = Pe.create({ name: "meetingInsert", addCommands() { return { insertMeeting: ({ publication: t, meetingsConfig: e, usePublicationName: n }) => ({ state: s, dispatch: a }) => Hae({ publication: t, meetingsConfig: e, usePublicationName: n })(s, a) } } }), Tm = t => !Bn(t.doc.toJSON(), e => e.type === "paywall"), Wae = t => (e, n) => { if (!Tm(e)) return !1; const { schema: s, tr: a } = e, o = s.nodes.paywall.create(); return a.selection.anchor === 1 ? Jae(t)(e, n) : (a.insert(a.selection.anchor, o), n && (n(a), t()), !0) }, Jae = t => (e, n) => { if (!Tm(e)) return !1; const { schema: s, tr: a } = e, o = s.nodes.paywall.create(); let r = 0, i = 0; for (; r < 10 && i < 3;) { const c = e.doc.resolve(r).nodeAfter; if (!c) break; r += c.nodeSize, i++ } return a.insert(r, o), n && (n(a), t()), !0 }, Yae = Pe.create({ name: "paywallCustom", addCommands() { return { addPaywall: t => ({ state: e, dispatch: n }) => Wae(t)(e, n) } } }), Kae = ({ id: t }) => (e, n) => (n && n(ie(e, e.schema.nodes.poll.create({ id: t }))), !0), Xae = Pe.create({ name: "pollInsert", addCommands() { return { insertPoll: ({ id: t }) => ({ state: e, dispatch: n }) => Kae({ id: t })(e, n) } } }), Zae = ({ id: t }) => (e, n) => (n && n(ie(e, e.schema.nodes.recipe.create({ id: t }))), !0), Qae = Pe.create({ name: "recipeInsert", addCommands() { return { insertRecipe: ({ id: t }) => ({ state: e, dispatch: n }) => Zae({ id: t })(e, n) } } }); function Dm(t = {}) { return new _t({ view(e) { return new eoe(e, t) } }) } class eoe { constructor(e, n) { this.editorView = e, this.cursorPos = null, this.element = null, this.timeout = -1, this.width = n.width || 1, this.color = n.color || "black", this.class = n.class, this.handlers = ["dragover", "dragend", "drop", "dragleave"].map(s => { let a = o => { this[s](o) }; return e.dom.addEventListener(s, a), { name: s, handler: a } }) } destroy() { this.handlers.forEach(({ name: e, handler: n }) => this.editorView.dom.removeEventListener(e, n)) } update(e, n) { this.cursorPos != null && n.doc != e.state.doc && (this.cursorPos > e.state.doc.content.size ? this.setCursor(null) : this.updateOverlay()) } setCursor(e) { e != this.cursorPos && (this.cursorPos = e, e == null ? (this.element.parentNode.removeChild(this.element), this.element = null) : this.updateOverlay()) } updateOverlay() { let e = this.editorView.state.doc.resolve(this.cursorPos), n = !e.parent.inlineContent, s; if (n) { let i = e.nodeBefore, c = e.nodeAfter; if (i || c) { let l = this.editorView.nodeDOM(this.cursorPos - (i ? i.nodeSize : 0)); if (l) { let u = l.getBoundingClientRect(), d = i ? u.bottom : u.top; i && c && (d = (d + this.editorView.nodeDOM(this.cursorPos).getBoundingClientRect().top) / 2), s = { left: u.left, right: u.right, top: d - this.width / 2, bottom: d + this.width / 2 } } } } if (!s) { let i = this.editorView.coordsAtPos(this.cursorPos); s = { left: i.left - this.width / 2, right: i.left + this.width / 2, top: i.top, bottom: i.bottom } } let a = this.editorView.dom.offsetParent; this.element || (this.element = a.appendChild(document.createElement("div")), this.class && (this.element.className = this.class), this.element.style.cssText = "position: absolute; z-index: 50; pointer-events: none; background-color: " + this.color), this.element.classList.toggle("prosemirror-dropcursor-block", n), this.element.classList.toggle("prosemirror-dropcursor-inline", !n); let o, r; if (!a || a == document.body && getComputedStyle(a).position == "static") o = -pageXOffset, r = -pageYOffset; else { let i = a.getBoundingClientRect(); o = i.left - a.scrollLeft, r = i.top - a.scrollTop } this.element.style.left = s.left - o + "px", this.element.style.top = s.top - r + "px", this.element.style.width = s.right - s.left + "px", this.element.style.height = s.bottom - s.top + "px" } scheduleRemoval(e) { clearTimeout(this.timeout), this.timeout = setTimeout(() => this.setCursor(null), e) } dragover(e) { if (!this.editorView.editable) return; let n = this.editorView.posAtCoords({ left: e.clientX, top: e.clientY }), s = n && n.inside >= 0 && this.editorView.state.doc.nodeAt(n.inside), a = s && s.type.spec.disableDropCursor, o = typeof a == "function" ? a(this.editorView, n, e) : a; if (n && !o) { let r = n.pos; if (this.editorView.dragging && this.editorView.dragging.slice && (r = wh(this.editorView.state.doc, r, this.editorView.dragging.slice), r == null)) return this.setCursor(null); this.setCursor(r), this.scheduleRemoval(5e3) } } dragend() { this.scheduleRemoval(20) } drop() { this.scheduleRemoval(20) } dragleave(e) { (e.target == this.editorView.dom || !this.editorView.dom.contains(e.relatedTarget)) && this.setCursor(null) } } const toe = Pe.create({ name: "dropCursor", addOptions() { return { color: "currentColor", width: 1, class: void 0 } }, addProseMirrorPlugins() { return [Dm(this.options)] } }); class ye extends ea { constructor(e) { super(e, e) } map(e, n) { let s = e.resolve(n.map(this.head)); return ye.valid(s) ? new ye(s) : ea.near(s) } content() { return Ca.empty } eq(e) { return e instanceof ye && e.head == this.head } toJSON() { return { type: "gapcursor", pos: this.head } } static fromJSON(e, n) { if (typeof n.pos != "number") throw new RangeError("Invalid input for GapCursor.fromJSON"); return new ye(e.resolve(n.pos)) } getBookmark() { return new li(this.anchor) } static valid(e) { let n = e.parent; if (n.isTextblock || !noe(e) || !soe(e)) return !1; let s = n.type.spec.allowGapCursor; if (s != null) return s; let a = n.contentMatchAt(e.index()).defaultType; return a && a.isTextblock } static findGapCursorFrom(e, n, s = !1) { e: for (;;) { if (!s && ye.valid(e)) return e; let a = e.pos, o = null; for (let r = e.depth;; r--) { let i = e.node(r); if (n > 0 ? e.indexAfter(r) < i.childCount : e.index(r) > 0) { o = i.child(n > 0 ? e.indexAfter(r) : e.index(r) - 1); break } else if (r == 0) return null; a += n; let c = e.doc.resolve(a); if (ye.valid(c)) return c } for (;;) { let r = n > 0 ? o.firstChild : o.lastChild; if (!r) { if (o.isAtom && !o.isText && !Je.isSelectable(o)) { e = e.doc.resolve(a + o.nodeSize * n), s = !1; continue e } break } o = r, a += n; let i = e.doc.resolve(a); if (ye.valid(i)) return i } return null } } } ye.prototype.visible = !1; ye.findFrom = ye.findGapCursorFrom; ea.jsonID("gapcursor", ye); class li { constructor(e) { this.pos = e } map(e) { return new li(e.map(this.pos)) } resolve(e) { let n = e.resolve(this.pos); return ye.valid(n) ? new ye(n) : ea.near(n) } } function noe(t) { for (let e = t.depth; e >= 0; e--) { let n = t.index(e), s = t.node(e); if (n == 0) { if (s.type.spec.isolating) return !0; continue } for (let a = s.child(n - 1);; a = a.lastChild) { if (a.childCount == 0 && !a.inlineContent || a.isAtom || a.type.spec.isolating) return !0; if (a.inlineContent) return !1 } } return !0 } function soe(t) { for (let e = t.depth; e >= 0; e--) { let n = t.indexAfter(e), s = t.node(e); if (n == s.childCount) { if (s.type.spec.isolating) return !0; continue } for (let a = s.child(n);; a = a.firstChild) { if (a.childCount == 0 && !a.inlineContent || a.isAtom || a.type.spec.isolating) return !0; if (a.inlineContent) return !1 } } return !0 } function Im() { return new _t({ props: { decorations: ioe, createSelectionBetween(t, e, n) { return e.pos == n.pos && ye.valid(n) ? new ye(n) : null }, handleClick: ooe, handleKeyDown: aoe, handleDOMEvents: { beforeinput: roe } } }) } const aoe = kh({ ArrowLeft: Fs("horiz", -1), ArrowRight: Fs("horiz", 1), ArrowUp: Fs("vert", -1), ArrowDown: Fs("vert", 1) }); function Fs(t, e) { const n = t == "vert" ? e > 0 ? "down" : "up" : e > 0 ? "right" : "left"; return function(s, a, o) { let r = s.selection, i = e > 0 ? r.$to : r.$from, c = r.empty; if (r instanceof Ee) { if (!o.endOfTextblock(n) || i.depth == 0) return !1; c = !1, i = s.doc.resolve(e > 0 ? i.after() : i.before()) } let l = ye.findGapCursorFrom(i, e, c); return l ? (a && a(s.tr.setSelection(new ye(l))), !0) : !1 } } function ooe(t, e, n) { if (!t || !t.editable) return !1; let s = t.state.doc.resolve(e); if (!ye.valid(s)) return !1; let a = t.posAtCoords({ left: n.clientX, top: n.clientY }); return a && a.inside > -1 && Je.isSelectable(t.state.doc.nodeAt(a.inside)) ? !1 : (t.dispatch(t.state.tr.setSelection(new ye(s))), !0) } function roe(t, e) { if (e.inputType != "insertCompositionText" || !(t.state.selection instanceof ye)) return !1; let { $from: n } = t.state.selection, s = n.parent.contentMatchAt(n.index()).findWrapping(t.state.schema.nodes.text); if (!s) return !1; let a = Kt.empty; for (let r = s.length - 1; r >= 0; r--) a = Kt.from(s[r].createAndFill(null, a)); let o = t.state.tr.replace(n.pos, n.pos, new Ca(a, 0, 0)); return o.setSelection(Ee.near(o.doc.resolve(n.pos + 1))), t.dispatch(o), !1 } function ioe(t) { if (!(t.selection instanceof ye)) return null; let e = document.createElement("div"); return e.className = "ProseMirror-gapcursor", du.create(t.doc, [jo.widget(t.selection.head, e, { key: "gapcursor" })]) } const coe = Pe.create({ name: "gapCursor", addProseMirrorPlugins() { return [Im()] }, extendNodeSchema(t) { var e; const n = { name: t.name, options: t.options, storage: t.storage }; return { allowGapCursor: (e = _h(Ch(t, "allowGapCursor", n))) !== null && e !== void 0 ? e : null } } }), loe = Pe.create({ name: "starterKit", addExtensions() { var t, e, n, s, a, o, r, i, c, l, u, d, m, f, h, g, b, x; const v = []; return this.options.blockquote !== !1 && v.push(kr.configure((t = this.options) === null || t === void 0 ? void 0 : t.blockquote)), this.options.bold !== !1 && v.push(Ou.configure((e = this.options) === null || e === void 0 ? void 0 : e.bold)), this.options.bulletList !== !1 && v.push(_r.configure((n = this.options) === null || n === void 0 ? void 0 : n.bulletList)), this.options.code !== !1 && v.push(Lu.configure((s = this.options) === null || s === void 0 ? void 0 : s.code)), this.options.codeBlock !== !1 && v.push(Ru.configure((a = this.options) === null || a === void 0 ? void 0 : a.codeBlock)), this.options.document !== !1 && v.push(mu.configure((o = this.options) === null || o === void 0 ? void 0 : o.document)), this.options.dropcursor !== !1 && v.push(toe.configure((r = this.options) === null || r === void 0 ? void 0 : r.dropcursor)), this.options.gapcursor !== !1 && v.push(coe.configure((i = this.options) === null || i === void 0 ? void 0 : i.gapcursor)), this.options.hardBreak !== !1 && v.push(qu.configure((c = this.options) === null || c === void 0 ? void 0 : c.hardBreak)), this.options.heading !== !1 && v.push(hp.configure((l = this.options) === null || l === void 0 ? void 0 : l.heading)), this.options.history !== !1 && v.push(xu.configure((u = this.options) === null || u === void 0 ? void 0 : u.history)), this.options.horizontalRule !== !1 && v.push(Pr.configure((d = this.options) === null || d === void 0 ? void 0 : d.horizontalRule)), this.options.italic !== !1 && v.push(Pu.configure((m = this.options) === null || m === void 0 ? void 0 : m.italic)), this.options.listItem !== !1 && v.push(Bu.configure((f = this.options) === null || f === void 0 ? void 0 : f.listItem)), this.options.orderedList !== !1 && v.push(Cr.configure((h = this.options) === null || h === void 0 ? void 0 : h.orderedList)), this.options.paragraph !== !1 && v.push(fu.configure((g = this.options) === null || g === void 0 ? void 0 : g.paragraph)), this.options.strike !== !1 && v.push(zu.configure((b = this.options) === null || b === void 0 ? void 0 : b.strike)), this.options.text !== !1 && v.push(hu.configure((x = this.options) === null || x === void 0 ? void 0 : x.text)), v } }), Nm = { attrs: { number: { default: 1 } }, content: "block+", atom: !1, selectable: !1, isolating: !1, defining: !0, draggable: !1, group: "block", parseDOM: [{ tag: ".footnote" }], toDOM: t => { const { number: e } = t.attrs; return ["div", { class: "footnote", "data-component-name": "FootnoteToDOM" }, ["a", { id: `footnote-${e}`, href: `#footnote-anchor-${e}`, class: "footnote-number", contenteditable: !1, target: "_self" }, `${e}`], ["div", { class: "footnote-content" }, 0] ] }, toDOMStatic: t => { const { number: e } = t.attrs; return ["div", { class: "footnote", "data-component-name": "FootnoteToDOMStatic" }, ["span", { class: "footnote-number" }, `${e}`], ["div", { class: "footnote-content" }, 0] ] } }, uoe = F({ name: "footnote", nodeSpec: Nm, addCommands() { return { insertFootnote: () => ({ state: t, editor: e, dispatch: n }) => { if (!xm(t)) return !1; const { schema: s } = e, a = s.nodes.footnote.create({ number: 1 }, s.nodes.paragraph.create()), o = s.nodes.footnoteAnchor.create({ number: 1 }), r = t.tr, i = vm(r, s); if (r.replaceWith(i, i, a), r.replaceSelectionWith(o), oi(r, s), n) { try { r.setSelection(Ee.create(r.doc, i + 2, i + 2)).scrollIntoView() } catch (c) { return console.error("could not set footnote text selection"), !1 } n(r) } return !0 } } } }), Mm = { attrs: { number: { default: 1 } }, atom: !0, selectable: !0, isolating: !1, defining: !0, draggable: !0, inline: !0, group: "inline", parseDOM: [{ tag: ".footnote-anchor" }], toDOM: t => { const { number: e } = t.attrs; return ["a", { class: "footnote-anchor", "data-component-name": "FootnoteAnchorToDOM", id: `footnote-anchor-${e}`, href: `#footnote-${e}`, target: "_self" }, `${e}`] }, toDOMStatic: t => { const { number: e } = t.attrs; return ["span", { class: "footnote-anchor-email", "data-component-name": "FootnoteAnchorToDOMStatic" }, `${Wf(e)}`] } }, poe = F({ name: "footnoteAnchor", nodeSpec: Mm }), Om = { content: "block+", group: "block", toDOM: () => ["div", { "data-component-name": "FragmentNodeToDOM" }, 0] }, doe = F({ name: "fragmentNode", nodeSpec: Om }), moe = Pr.extend({ draggable: !0 }), Oo = 550, Lm = { attrs: { src: { default: "" }, height: { default: null }, width: { default: null }, alt: { default: null }, title: { default: null } }, inline: !0, group: "inline", draggable: !0, toDOM: t => { const e = q(t.attrs.src, Oo * 2); return ["img", { style: t.attrs.height && t.attrs.width ? `max-width:${t.attrs.width}px;max-height:${t.attrs.height}px` : "", src: e, alt: t.attrs.alt, title: t.attrs.title, "data-component-name": "ImageToDOM" }] }, toDOMStatic: t => { if (t.attrs.height && t.attrs.width) { const n = Math.min(t.attrs.width, Oo), s = q(t.attrs.src, n); return ["table", { class: "image-wrapper", width: "100%", border: "0", cellSpacing: "0", cellPadding: "0", "data-component-name": "ImageToDOMStatic" }, ["tr", {}, ["td"], ["td", { class: "content", width: n }], ["td"] ], ["tr", {}, ["td"], ["td", { align: "left", class: "content", width: n }, ["img", { src: s, alt: t.attrs.alt, title: t.attrs.title }] ], ["td"] ] ] } return ["img", { src: q(t.attrs.src, Oo), alt: t.attrs.alt, title: t.attrs.title }] } }, foe = F({ name: "image", nodeSpec: Lm }), Rm = ({ node: t, editor: e }) => p(wt, { className: "image-gallery-embed", "data-drag-handle": "" }, p(Yh, { node: t, editor: e })), kn = "image-gallery-embed", Ys = { attrs: { gallery: { default: {} }, isEditorNode: { default: !1 } }, group: "block", draggable: !0, atom: !0, selectable: !0, isolating: !0, defining: !0, parseDOM: [{ tag: kn, getAttrs: re }], toDOM: t => { if (typeof window != "undefined" && t.attrs.isEditorNode) try { t.attrs.isEditor = !0; const e = document.createElement("div"); return e.className = kn, e.setAttribute("data-attrs", JSON.stringify(t.attrs)), Fe(p(Rm, { node: S({}, t) }), e), e } catch (e) { return console.error("Error rendering ImageGalleryComponent", e), Oe({ msg: null, node: t, err: e, group: "block" }) } return hoe(t) }, toDOMStatic: t => ["div", { class: kn, "data-attrs": JSON.stringify(S({ isEmail: !0 }, t.attrs)) }] }, hoe = t => ["div", { class: kn, "data-attrs": JSON.stringify(t.attrs) }], goe = Qt.create({ name: "imageGallery", group: Ys.group, draggable: !0, addAttributes() { return { gallery: { default: {} }, isEditorNode: { default: !0 } } }, parseHTML() { return [{ tag: kn }] }, renderHTML({ HTMLAttributes: t, node: e }) { return this.options.isStatic && Ys.toDOMStatic ? Ys.toDOMStatic(e) : ["div", S({ class: kn }, en(t))] }, addNodeView() { return kt(Rm) }, addCommands() { return { insertImageGallery: t => ({ commands: e }) => e.insertContent({ type: this.name, attrs: t }), updateImageGallery: t => ({ commands: e }) => e.updateAttributes(this.name, t) } } }), boe = { normal: "large", large: "full", full: "normal" }; let pn; const voe = ({ alt: t, onUpdateAlt: e }) => { const { iString: n } = ue(); return p(Y, { gap: 8, justifyContent: "center", className: Me.mediaControlTextEditor }, p(Y, { gap: 8 }, p(X.B3, { translated: !0, font: "meta", color: "secondary" }, "Alt text"), p(rs, { value: t, onChange: s => e(s.currentTarget.value), placeholder: n("Describe images…") }))) }, xoe = ({ href: t, onSave: e }) => { const [n, s] = z(t || ""), { iString: a } = ue(), o = () => { const r = kg.find(n, "url"); r.length ? e(r[0].href.replace("http:", "https:")) : alert(a("Invalid url")) }; return p(Y, { gap: 8, justifyContent: "center", className: Me.mediaControlTextEditor }, p(Y, { gap: 4 }, p(X.B3, { translated: !0, font: "meta", color: "secondary" }, "URL"), p(rs, { placeholder: "Add image link…", value: n, onChange: r => s(r.currentTarget.value) })), p(ne, { gap: 8 }, t && p(Ae, { priority: "destructive", size: "sm", onClick: () => e(null) }, a("Remove")), p(Ae, { priority: "primary-theme", size: "sm", onClick: o, disabled: t === n || !n.length }, t != null && t.length ? a("Update") : a("Save")))) }, yoe = ({ node: t, updateAttributes: e, editor: n }) => { var M; const [s, a] = z(!1), [o, r] = z(0), [i, c] = z(0), l = J(null), { iString: u } = ue(), d = () => { const y = document.querySelector(".ProseMirror"); y && c(y == null ? void 0 : y.clientWidth), l.current && (l.current.onload = () => { l.current && r(l.current.naturalWidth / l.current.naturalHeight) }) }, m = y => { pn = y }; U(() => { d() }); const [f, h] = z(!1), g = ({ width: y, height: T }) => y < 50 || T < 50, b = y => { y.preventDefault(), setTimeout(() => E(y)) }, x = y => { h(!0), pn = y.clientX, setTimeout(() => { document.addEventListener("pointermove", b), document.addEventListener("pointerup", v) }) }, v = y => { h(!1), pn = -1, document.removeEventListener("pointermove", b), document.removeEventListener("pointerup", v) }, w = (y, T) => { var L, R; if (!l.current) { console.error("Media ref is undefined|null", { resizableImg: l.current }); return } const D = { width: (L = l.current) == null ? void 0 : L.width, height: (R = l.current) == null ? void 0 : R.height }, C = { width: -1, height: -1 }; y === "left" ? C.width = D.width - Math.abs(T) : C.width = D.width + Math.abs(T), C.width > i && (C.width = i), C.height = C.width / o, !g(C) && e(C) }, E = y => { if (pn === -1) return; const { clientX: T } = y, D = pn - T; if (D === 0) return; const C = D > 0 ? "left" : "right"; setTimeout(() => { w(C, Math.abs(D)), pn = T }) }, _ = y => { const T = { size: y, width: "100%" }; y !== "normal" && (T.height = "auto", T.align = "center"), y === "large" && (T.width = zo), y === "full" && (T.width = Bo), e(T) }, k = () => { switch (t.attrs.size) { case "large": return zo; case "full": return typeof window !== void 0 ? window.innerWidth : Bo; default: return t.attrs.width === "100%" ? hr : t.attrs.width } }; return p(wt, { as: "figure", className: fe(Me.mediaNodeView, t.attrs.align && Me[`align-${t.attrs.align}` || ""]), "data-drag-handle": "" }, p(ne, { className: fe(Me.imageContainer, Me[t.attrs.size]) }, p(Y, { gap: 8 }, p(ne, { justifyContent: "center", style: { position: "relative" } }, p(og, { className: Me[t.attrs.size], src: t.attrs.src, alt: t.attrs.alt, title: t.attrs.title, style: { pointerEvents: "none" }, maxWidth: k(), imageRef: l, useRetinaSizing: !0, imageIsFixedWidth: !1 }), t.attrs.size === "normal" && p("div", { className: fe(Me.horizontalResizeHandle), title: u("Resize"), onClick: ({ clientX: y }) => m(y), onPointerDown: x, onPointerUp: v }, p(ft, { fill: "filled", priority: "secondary" }, p(Tb, { height: 18, color: "#2b2e3b" })))), p(ne, { justifyContent: "center", className: fe(Me.inlineCaptionEditor, { [Me.hasCaption]: (M = t.content) == null ? void 0 : M.size }) }, p(Eh, { as: "figcaption", className: Me.caption, contenteditable: !0 }), !t.content.size && p("div", { className: fe(Me.caption, Me.placeholder) }, "Add caption…"))), p(ne, { gap: 4, className: fe(Me.mediaControlButtons) }, p(Pt, { text: u("Toggle standard, large, full-screen"), preferPlacement: "top-center", hoverOptions: { delayEnter: 250, delayLeave: 150 } }, p(ft, { priority: "tertiary", fill: "empty", onClick: () => _(boe[t.attrs.size]) }, p(hb, { height: 18, color: "#2b2e3b" }))), t.attrs.size === "normal" && p(be, null, p(Pt, { text: u("Align left"), preferPlacement: "top-center" }, p(ft, { priority: "tertiary", className: fe(t.attrs.align === "left" && Me.active), fill: "empty", onClick: () => e({ align: "left" }) }, p(Fg, { height: 18, color: "#2b2e3b" }))), p(Pt, { text: u("Align center"), preferPlacement: "top-center", hoverOptions: { delayEnter: 250, delayLeave: 150 } }, p(ft, { priority: "tertiary", className: fe(t.attrs.align === "center" && Me.active), fill: "empty", onClick: () => e({ align: "center" }) }, p(lb, { height: 18, color: "#2b2e3b" }))), p(Pt, { text: u("Align right"), preferPlacement: "top-center", hoverOptions: { delayEnter: 250, delayLeave: 150 } }, p(ft, { priority: "tertiary", className: fe(t.attrs.align === "right" && Me.active), fill: "empty", onClick: () => e({ align: "right" }) }, p(ub, { height: 18, color: "#2b2e3b" })))), p(Pt, { text: u("Add link"), preferPlacement: "top-center", hoverOptions: { delayEnter: 250, delayLeave: 150 } }, p(Zi, { preferPlacement: "bottom-start", content: p(xoe, { href: t.attrs.href, onSave: y => { var T; e({ href: y }), (T = l.current) == null || T.click() } }) }, p(ft, { priority: "tertiary", fill: "empty" }, p(Fu, { height: 18, color: "#2b2e3b" })))), p(Pt, { text: u("Edit alt text"), preferPlacement: "top-center", hoverOptions: { delayEnter: 250, delayLeave: 150 } }, p(Zi, { preferPlacement: "bottom-start", content: p(voe, { alt: t.attrs.alt, onUpdateAlt: y => e({ alt: y }) }) }, p(ft, { priority: "tertiary", fill: "empty" }, p(cb, { height: 18, color: "#2b2e3b" })))))), p(ib, { showModal: s, modalContent: [{ attrs: t.attrs }], onClose: () => a(!1), step: 0 })) }, Pm = () => ({ src: { default: null, keepOnSplit: !1 }, alt: { default: null, keepOnSplit: !1 }, title: { default: null, keepOnSplit: !1 }, href: { default: null, keepOnSplit: !1 }, width: { default: "100%", keepOnSplit: !1 }, height: { default: "auto", keepOnSplit: !1 }, size: { default: "normal", keepOnSplit: !1 }, align: { default: "center", keepOnSplit: !1 } }), Bm = "image3", woe = { name: Bm, group: "block", atom: !1, selectable: !0, content: "inline*", draggable: !0, attrs: Fp({ attrs: Pm() }), parseDOM: [{ tag: "image3", getAttrs: t => { try { if (t instanceof HTMLElement) { const e = t.getAttribute("data-attrs"); if (e) return JSON.parse(e) } } catch (e) { return !1 } return !1 } }], toDOM: t => { var s; const e = !!((s = t.content) != null && s.size), n = { class: "image3", "data-attrs": JSON.stringify(S({}, t.attrs)) }; return e ? ["div", ["div", n, 0]] : ["div", n] }, toDOMStatic: t => { var s; const e = !!((s = t.content) != null && s.size), n = { class: "image3", "data-attrs": JSON.stringify(P(S({}, t.attrs), { isEmail: !0 })) }; return e ? ["div", ["div", n, 0]] : ["div", n] } }, koe = /(?:^|\s)(!\[(.+|:?)]\((\S+)(?:(?:\s+)["'](\S+)["'])?\))$/, _oe = Qt.create({ name: Bm, inline: !1, group: "block", content: "inline*", draggable: !0, selectable: !0, isolating: !0, defining: !0, addOptions() { return { HTMLAttributes: {} } }, addAttributes() { return Pm() }, parseHTML() { return [{ tag: 'img[src]:not([src^="data:"])', getAttrs: t => ({ src: t.getAttribute("src") }) }, { tag: "image3" }, { tag: "p", priority: 100, getAttrs: t => { var n; if ((n = t == null ? void 0 : t.textContent) != null && n.trim()) return !1; const [e] = Array.from(t.getElementsByTagName("img")); return e ? na(Dn(e, null), ["src", "alt", "height", "width"]) : !1 } }] }, renderHTML({ HTMLAttributes: t }) { return ["image3", en(this.options.HTMLAttributes, t), 0] }, addCommands() { return { setImage: t => ({ commands: e }) => { const n = t.title ? [{ type: "text", text: t.title }] : []; try { return e.insertContent({ type: this.name, attrs: t, content: n }) } catch (s) { return !1 } }, setUnsplashImage: ({ url: t, width: e, height: n, description: s, userName: a, userHref: o }) => ({ commands: r, editor: i }) => { const c = { alt: s, src: t, height: n, width: e, type: "image/jpg" }, l = i.schema.text("Photo by "), u = i.schema.text(a, [i.schema.marks.link.create({ title: a, href: o })]), d = i.schema.text(" on "), m = i.schema.text("Unsplash", [i.schema.marks.link.create({ title: "Unsplash", href: "https://unsplash.com" })]); return r.insertContent({ type: this.name, attrs: c, content: Kt.fromArray([l, u, d, m]).toJSON() }) } } }, addNodeView() { return kt(yoe) }, addInputRules() { return [iu({ find: koe, type: this.type, getAttributes: t => { const [, , e, n, s, a, o] = t; return { src: n, type: s, alt: e, title: a, href: o } } })] } }), Cl = t => Jf({ utm_campaign: Ut.appMarketing, utm_content: Yf.authorPostInsert, utm_source: t }), zm = { attrs: { logo_url: { default: null }, publication_name: { default: null }, publication_subdomain: { default: null }, author_name: { default: null }, language: { default: "en" } }, inline: !1, atom: !0, group: "block", draggable: !0, selectable: !0, isolating: !0, defining: !0, parseDOM: [{ tag: "div.install-substack-app-embed" }], toDOM: t => { const { logo_url: e, publication_name: n, publication_subdomain: s, author_name: a, language: o } = t.attrs, { iString: r, iTemplate: i } = I18N.i(o); return ["div", { class: "install-substack-app-embed", "data-component-name": "InstallSubstackAppToDOM" }, ["img", { class: "install-substack-app-embed-img", src: q(e) }], ["div", { class: "install-substack-app-embed-text" }, ["div", { class: "install-substack-app-header" }, a ? i `Get more from ${a} in the Substack app` : i `Read ${n} in the Substack app`], ["div", { class: "install-substack-app-text" }, r("Available for iOS and Android")] ], ["a", { href: Cl(s), target: "_blank", class: "install-substack-app-embed-link" }, ["button", { class: "install-substack-app-embed-btn button primary" }, r("Get the app")] ] ] }, toDOMStatic: t => { const { logo_url: e, publication_name: n, publication_subdomain: s, author_name: a, language: o } = t.attrs, { iString: r, iTemplate: i } = I18N.i(o); return ["div", { class: "install-substack-app-embed", "data-component-name": "InstallSubstackAppToDOMStatic" }, ["table", { class: "install-substack-embed-table" }, ["tr", {}, ["td", { rowspan: 2 }, ["img", { class: "install-substack-app-embed-img", src: q(e), width: 64, height: 64 }] ], ["td", { class: "install-substack-app-header" }, a ? i `Get more from ${a} in the Substack app` : i `Read ${n} in the Substack app`] ], ["tr", {}, ["td", { class: "install-substack-app-text" }, r("Available for iOS and Android")] ], ["tr", {}, ["td", { colspan: 2 }, ["a", { href: Cl(s), target: "_blank", class: "install-substack-app-embed-link" }, ["button", { class: "install-substack-app-embed-btn button primary" }, r("Get the app")] ] ] ] ] ] } }, Coe = F({ name: "install_substack_app", nodeSpec: zm, addCommands() { return { insertInstallSubstackAppEmbed: t => ({ commands: e }) => { const n = rt(t), s = { logo_url: t.logo_url || `${n}/img/substack.png`, publication_name: t.name, language: t.language, author_name: t.author_name, publication_subdomain: t.subdomain }; return e.insertContent({ type: this.name, attrs: s }) } } } }), qm = { attrs: { name: { default: "" }, avatarUrl: { default: "" }, url: { default: "" }, isEditorNode: { default: !1 } }, group: "block", draggable: !0, atom: !0, selectable: !0, isolating: !0, defining: !0, parseDOM: [{ tag: "div.meeting-embed", getAttrs: re }], toDOM: t => { if (typeof window != "undefined" && t.attrs.isEditorNode) try { const e = document.createElement("div"); return e.className = "meeting-embed", e.setAttribute("data-attrs", JSON.stringify(t.attrs)), Fe(p(Kh, { name: t.attrs.name, avatarUrl: t.attrs.avatarUrl, url: t.attrs.url }), e), e } catch (e) { return console.error("Error rendering MeetingEmbed", e), Oe({ msg: null, node: t, err: e, group: "block" }) } return El(t) }, toDOMStatic: t => El(t) }, Eoe = F({ name: "meeting", nodeSpec: qm, addCommands() { return { insertMeeting: t => ({ commands: e, dispatch: n }) => { const { publication: s, meetingsConfig: a, usePublicationName: o } = t; let r = su({ id: a.user_id, photo_url: a.user_profile_photo_url }); return o && s.logo_url && (r = q(s.logo_url, 112)), n ? e.insertContent({ type: "meeting", attrs: { name: o ? s.name : a.user_name, avatarUrl: r, url: au(s, { addBase: !0, params: { source: "embed" } }), isEditorNode: !0 } }) : !0 } } } }), El = t => ["div", { class: "meeting-embed", "data-attrs": JSON.stringify(t.attrs), "data-component-name": "MeetingPlaceholder" }], Fm = { attrs: { name: { default: "" }, id: { default: null }, type: { default: null }, url: { default: null }, photo_url: { default: null }, uuid: { default: null } }, atom: !0, editable: !1, selectable: !0, isolating: !1, defining: !0, draggable: !1, inline: !0, group: "inline", parseDOM: [{ tag: ".mention-wrap", getAttrs: t => { try { return JSON.parse(t.getElementsByTagName("a")[0].getAttribute("data-attrs")) } catch (e) { return !1 } } }], toDOM: t => { var e; if (typeof window != "undefined") try { const n = document.createElement("span"); return n.className = "mention-wrap", n.setAttribute("data-attrs", JSON.stringify(t.attrs)), Fe(p(jg, { name: ((e = t.attrs.name) == null ? void 0 : e.trim()) || "", id: t.attrs.id || null, type: t.attrs.type || null, url: t.attrs.url || null, photo_url: t.attrs.photo_url || null, uuid: t.attrs.uuid || null, isEditorContext: !0 }), n), n } catch (n) { return console.error("Error rendering Mention", n), Oe({ msg: null, node: t, err: n, group: "inline" }) } return ["span", { class: "mention-wrap", "data-attrs": JSON.stringify(t.attrs), "data-component-name": "MentionToDOM" }] }, toDOMStatic: t => ["span", { class: "mention-wrap", "data-attrs": JSON.stringify(P(S({}, t.attrs), { isStatic: !0 })), "data-component-name": "MentionToDOMStatic" }] }, Aoe = F({ name: "substack_mentions", nodeSpec: Fm }), js = "poll-embed", jm = { attrs: { id: { default: null } }, group: "block", draggable: !0, atom: !0, selectable: !0, isolating: !0, defining: !0, parseDOM: [{ tag: js, getAttrs: re }], toDOM: t => { if (typeof window != "undefined") try { const e = document.createElement("div"); return e.setAttribute("data-attrs", JSON.stringify(t.attrs)), e.className = js, Fe(p(Xh, { id: t.attrs.id, isEditor: !0 }), e), e } catch (e) { return console.error("Error rendering Poll", e), Oe({ msg: null, node: t, err: e, group: "block" }) } return ["div", { class: js, "data-attrs": JSON.stringify(t.attrs), "data-component-name": "PollToDOM" }] }, toDOMStatic: t => ["div", { class: js, "data-attrs": JSON.stringify(S({ isEmail: !0 }, t.attrs)), "data-component-name": "PollToDOMStatic" }] }, Soe = F({ name: "poll", nodeSpec: jm, addCommands() { return { insertPoll: t => ({ commands: e }) => e.insertContent({ type: this.name, attrs: t }) } } }), $m = { content: "text*", group: "block", code: !0, defining: !0, isolating: !0, attrs: { params: { default: "" }, language: { default: "en" } }, parseDOM: [{ tag: "pre.text", preserveWhitespace: "full", priority: 60 }], toDOM: () => { var e, n; const { iString: t } = I18N.i(typeof window != "undefined" ? (n = (e = window._preloads) == null ? void 0 : e.pub) == null ? void 0 : n.language : "en"); return ["div", { class: "preformatted-block", "data-component-name": "PreformattedTextBlockToDOM" }, ["label", { class: "hide-text", contenteditable: !1 }, t("Text within this block will maintain its original spacing when published")], ["pre", { class: "text" }, 0] ] }, toDOMStatic: () => ["pre", { class: "text", "data-component-name": "PreformattedTextBlockToDOMStatic" }, 0] }, Toe = F({ name: "preformatted_text_block", nodeSpec: $m }), Um = { attrs: { pub: { default: null }, uuid: { default: null } }, inline: !1, atom: !0, group: "block", draggable: !0, selectable: !0, isolating: !0, defining: !0, parseDOM: [{ tag: "div.install-substack-app-embed.preview-inapp" }], toDOM: t => { const { pub: e, uuid: n } = t.attrs, { iString: s } = I18N.i({ pub: e }), a = typeof e == "object" ? rt(e) : rt({ id: e }), o = e.logo_url || `${a}/img/substack.png`; return ["div", { class: "install-substack-app-embed preview-inapp", "data-component-name": "PreviewInSubstackAppToDOM" }, ["img", { class: "install-substack-app-embed-img", src: q(o) }], ["div", { class: "install-substack-app-embed-text" }, ["div", { class: "install-substack-app-header" }, s("Test in the Substack app")], ["div", { class: "install-substack-app-text" }, s("This section is only visible to you")] ], ["a", { href: Pi(e, n), target: "_blank", class: "install-substack-app-embed-link" }, ["button", { class: "install-substack-app-embed-btn button primary" }, s("Open in app")] ] ] }, toDOMStatic: t => { const { pub: e, uuid: n } = t.attrs, { iString: s } = I18N.i({ pub: e }), a = typeof e == "object" ? rt(e) : rt({ id: e }), o = e.logo_url || `${a}/img/substack.png`; return ["div", { class: "install-substack-app-embed preview-inapp", "data-component-name": "PreviewInSubstackAppToDOMStatic" }, ["table", { class: "install-substack-embed-table" }, ["tr", {}, ["td", { rowspan: 2 }, ["img", { class: "install-substack-app-embed-img", src: q(o), width: 64, height: 64 }] ], ["td", { class: "install-substack-app-header" }, s("Test in the Substack app")] ], ["tr", {}, ["td", { class: "install-substack-app-text" }, s("This section is only visible to you")] ], ["tr", {}, ["td", { colspan: 2 }, ["a", { href: Pi(e, n), target: "_blank", class: "install-substack-app-embed-link" }, ["button", { class: "install-substack-app-embed-btn button primary" }, s("Open in app")] ] ] ] ] ] } }, Doe = F({ name: "preview_in_substack_app", nodeSpec: Um }), Yn = { content: "block+", group: "block", defining: !0, parseDOM: [{ tag: "q" }, { tag: "div.pullquote" }], toDOM: () => ["div", { class: "pullquote" }, 0] }, Vm = Qt.create({ name: "pullquote", defining: !0, content: Yn.content, group: Yn.group, renderHTML(t) { return Yn.toDOM(t.node) }, parseHTML() { return Yn.parseDOM }, addCommands() { return { setPullquote: () => ({ state: t, commands: e }) => !gt(t, "paragraph") || gt(t, "blockquote") ? !1 : e.wrapIn(this.name), togglePullquote: () => ({ state: t, commands: e }) => !gt(t, "paragraph") || gt(t, "blockquote") ? !1 : e.toggleWrap(this.name), unsetPullquote: () => ({ commands: t }) => t.lift(this.name) } } }), Ioe = ({ node: t, editable: e, staticData: n }) => p(wt, null, p(Uu, { node: t, editable: e, staticData: n })), $s = "recipe-embed", Hm = { attrs: { id: { default: null } }, group: "block", draggable: !1, atom: !1, selectable: !1, isolating: !1, defining: !1, parseDOM: [{ tag: $s, getAttrs: re }], toDOM: t => { if (typeof window != "undefined") try { const e = document.createElement("div"); return e.setAttribute("data-attrs", JSON.stringify(t.attrs)), e.setAttribute("data-component-name", "RecipeToDOM"), e.className = $s, Fe(p(Uu, { node: { attrs: { id: t.attrs.id } } }), e), e } catch (e) { return console.error("Error rendering RecipeNode", e), Oe({ msg: null, node: t, err: e, group: "block" }) } return ["div", { class: $s, "data-attrs": JSON.stringify(t.attrs), "data-component-name": "RecipeToDOM" }] }, toDOMStatic: t => ["div", { class: $s, "data-attrs": JSON.stringify(S({ isEmail: !0 }, t.attrs)), "data-component-name": "RecipeToDomStatic" }], renderHTML({ HTMLAttributes: t }) { return ["recipe", en(this.options.HTMLAttributes, t)] }, parseHTML() { return [{ tag: "recipe" }] }, addNodeView() { return kt(Ioe) } }, Noe = F({ name: "recipe", nodeSpec: Hm, addCommands() { return { insertRecipe: t => ({ commands: e }) => e.insertContent({ type: this.name, attrs: t }) } } }), Gm = { attrs: { name: { default: null }, subdomain: { default: "" } }, inline: !1, group: "block", draggable: !0, atom: !0, selectable: !0, isolating: !0, defining: !0, parseDOM: [{ tag: "div.referral-link", getAttrs: re }], toDOM: t => { const e = t.attrs.name || `${t.attrs.subdomain}.substack.com`, n = document.createElement("div"); n.className = "referral-link", n.setAttribute("data-attrs", JSON.stringify(t.attrs)), n.setAttribute("data-component-name", "ReferralLinkToDOM"); const s = document.createElement("h4"); n.appendChild(s); const a = document.createElement("a"); a.textContent = ce.PRINTED_REFERRAL_URL, a.href = `http://${ce.REFERRAL_URL}`, s.appendChild(a), a.addEventListener("click", r => { if (a.href.endsWith("%%")) { r.preventDefault(); const i = window.open("/?referral_code=test&showWelcome=true", "_blank"); i && i.focus && i.focus() } }); const o = document.createElement("a"); return o.className = "button primary", o.textContent = "Share your referral link", o.href = `mailto:?subject=${encodeURIComponent(`Check out ${e}`)}&body=${encodeURIComponent("Subscribe using my link: ")}http://${ce.REFERRAL_URL}`, n.appendChild(o), n } }, Moe = F({ name: "referral_link", nodeSpec: Gm }), Wm = { attrs: { isEditorNode: { default: !1 }, numReferralsRequired: { default: null }, rewardDescription: { default: null }, pub: { default: {} }, tierNumber: { default: null } }, atom: !0, content: "", isolating: !1, defining: !1, group: "block", parseDOM: [{ getAttrs: re, tag: ".referrals-tier-card" }], toDOM: t => { if (typeof window != "undefined") try { const e = document.createElement("div"); return e.className = "referrals-tier-card", e.setAttribute("data-attrs", JSON.stringify(t.attrs)), Fe(p(Zh, { numReferralsRequired: t.attrs.numReferralsRequired, rewardDescription: t.attrs.rewardDescription, pub: Loe(t.attrs.pub), tierNumber: t.attrs.tierNumber }), e), e } catch (e) { return console.error("Error rendering ReferralsTierCardComponent", e), Oe({ msg: null, node: t, err: e, group: "block" }) } return Al(t) }, toDOMStatic: t => Al(t) }, Ooe = F({ name: "referralTier", nodeSpec: Wm }), Al = t => ["div", { class: "referrals-tier-card", "data-attrs": JSON.stringify(t.attrs), "data-component-name": "ReferralsTierCardPlaceholder" }], Loe = t => { const e = S({}, t); return delete e.email_render_elements, e }, Jm = { attrs: { image: { default: "" }, title: { default: "" }, subtitle: { default: "" }, description: { default: "" }, url: { default: "" } }, inline: !0, group: "inline", draggable: !0, atom: !0, selectable: !0, isolating: !0, defining: !0, toDOM: t => ["iframe", { class: "spotify-wrap", "data-attrs": JSON.stringify(t.attrs), src: `https://open.spotify.com/embed?uri=${encodeURIComponent(t.attrs.url)}&view=coverart&theme=white`, frameborder: "0", gesture: "media", allowfullscreen: "true", "data-component-name": "SpotifyToDOM" }], toDOMStatic: t => ["a", { class: "spotify-wrap", href: t.attrs.url, "data-component-name": "SpotifyToDOMStatic" }, ["img", { class: "cover", src: q("/img/spotify_play.png?v=1", 156), style: `background-image:url(${t.attrs.image})` }], ["span", { class: "content" }, ["img", { class: "logo", src: q("/img/spotify_logo.png", 40) }], ["span", { class: "title" }, t.attrs.title], ["span", { class: "subtitle" }, t.attrs.subtitle], ["span", { class: "description" }, t.attrs.description] ] ] }, Roe = F({ name: "spotify", nodeSpec: Jm }), ui = { content: "ctaCaption", attrs: { url: { default: null }, text: { default: null }, language: { default: "en" } }, inline: !1, group: "block", draggable: !0, atom: !1, selectable: !0, isolating: !0, defining: !0, parseDOM: [{ tag: "div.subscription-widget-wrap", getAttrs: re }], toDOM: t => { const { text: e, language: n } = t.attrs, { iString: s } = I18N.i(n); return ["div", { class: "subscription-widget-wrap-editor", "data-attrs": JSON.stringify(t.attrs), "data-component-name": "SubscribeWidgetToDOM" }, ["div", { class: "subscription-widget show-subscribe" }, ["div", { class: "preamble" }, 0], ["form", { class: "subscription-widget-subscribe" }, ["input", { type: "email", class: "email-input", name: "email", placeholder: s("Type your email…"), tabindex: -1 }], ["input", { type: "submit", class: "button primary", value: e }], ["div", { class: "fake-input-wrapper" }, ["div", { class: "fake-input" }], ["div", { class: "fake-button" }] ] ] ] ] }, toDOMStatic: t => ["div", { class: "subscription-widget-wrap", "data-component-name": "SubscribeWidgetToDOMStatic" }, ["div", { class: "subscription-widget show-subscribe" }, ["div", { class: "preamble" }, 0], Zr(t) ] ] }, Poe = F({ name: "subscribeWidget", nodeSpec: ui, addCommands() { return { insertSubscribeWidget: t => ({ commands: e }) => e.insertContent({ type: this.name, attrs: t }) } } }), pi = { content: "block+", group: "block", defining: !1, isolating: !1, attrs: { params: { default: "" } }, parseDOM: [{ tag: "pre.template-comment" }], toDOM: () => ["pre", { class: "template-comment", "data-component-name": "TemplateCommentToDOM" }, ["code", 0] ] }, Boe = F({ name: "templateComment", nodeSpec: pi }), Ym = { attrs: { url: { default: "" }, html: { default: "" }, author: { default: "" }, author_name: { default: "" }, date: { default: "" } }, untrackedAttrs: ["html"], inline: !0, group: "inline", draggable: !0, atom: !0, selectable: !0, isolating: !0, defining: !0, parseDOM: [{ tag: "div.tweet", getAttrs: function(e) { try { const n = JSON.parse(e.getAttribute("data-attrs")); return "url" in n && "html" in n && "author" in n && "author_name" in n && "date" in n ? n : !1 } catch (n) { return !1 } } }], toDOM: t => { const e = document.createElement("div"); e.className = "tweet", e.setAttribute("data-component-name", "TwitterToDOM"), e.setAttribute("data-attrs", JSON.stringify(t.attrs)), e.innerHTML = bt(t.attrs.html, { allowedTags: bt.defaults.allowedTags.concat(["img"]), allowedAttributes: Object.assign({}, bt.defaults.allowedAttributes, { "*": ["href", "style", "id", "data-*", "itemprop", "class", "align", "alt", "center", "bgcolor"] }) }); const n = document.createElement("a"); n.className = "tweet-header", n.href = `https://twitter.com/${t.attrs.author}`, e.insertBefore(n, e.childNodes[0]); const s = document.createElement("img"); s.src = `${os}/image/twitter_name/w_${Cu}/${t.attrs.author}.jpg`, n.appendChild(s); const a = document.createElement("span"); a.className = "tweet-author-name", a.textContent = t.attrs.author_name, n.appendChild(a); const o = document.createElement("span"); o.className = "tweet-author", o.textContent = `@${t.attrs.author}`, n.appendChild(o); const r = document.createElement("a"); return r.className = "tweet-date", r.textContent = t.attrs.date, r.href = t.attrs.url, e.appendChild(r), e.querySelectorAll && Array.prototype.forEach.call(e.querySelectorAll("a"), i => { i.target = "_blank" }), e } }, zoe = F({ name: "twitter", nodeSpec: Ym }), qoe = ({ node: t }) => p(wt, null, p(_u, { mediaUploadId: t.attrs.mediaUploadId, isEditor: !0, post: null, pub: null })), Km = { attrs: { mediaUploadId: { default: null }, duration: { default: null } }, group: "block", draggable: !0, atom: !0, selectable: !0, isolating: !0, defining: !0, toDOM: t => { if (typeof window != "undefined") try { const e = document.createElement("div"); e.className = "native-video-embed", e.setAttribute("data-attrs", JSON.stringify(t.attrs)); const n = { mediaUploadId: t.attrs.mediaUploadId, pub: null, post: null, isEditor: !0 }; return Fe(p(_u, n), e), e } catch (e) { return console.error("Error rendering VideoEmbedPlayer", e), Oe({ msg: null, node: t, err: e, group: "block" }) } return Sl(t) }, toDOMStatic: t => Sl(t) }, Foe = F({ name: "video", nodeSpec: Km, addNodeView() { return kt(qoe) }, addCommands() { return { insertVideo: t => ({ commands: e }) => e.insertContent({ type: this.name, attrs: t }) } } }), Sl = t => ["div", { class: "native-video-embed", "data-component-name": "VideoPlaceholder", "data-attrs": JSON.stringify(t.attrs) }], Xm = { attrs: { videoId: { default: "" } }, inline: !0, group: "inline", draggable: !0, atom: !0, selectable: !0, isolating: !0, defining: !0, toDOM: t => { const e = `https://www.youtube.com/embed/${t.attrs.videoId}`; return ["div", { class: "youtube-wrap", "data-component-name": "YoutubeToDOM", "data-attrs": JSON.stringify(t.attrs) }, ["iframe", { src: e, frameborder: "0", gesture: "media", allowfullscreen: "true" }] ] }, toDOMStatic: t => { const e = `https://www.youtube.com/watch?v=${t.attrs.videoId}`, n = va(t.attrs.videoId, { maxWidth: 550 }); return ["a", { href: e, target: "_blank", class: "youtube-wrap", "data-component-name": "YoutubeToDOMStatic" }, ["img", { src: n }] ] } }, joe = F({ name: "youtube", nodeSpec: Xm }), $oe = ({ isStatic: t, excludeDropCursor: e = !1 }) => { const n = {}; return e && (n.dropcursor = !1), [loe.configure(S({ history: !1, blockquote: !1, bulletList: !1, orderedList: !1, horizontalRule: !1 }, n)), nb, gp, bp, mi, oee, Vm.configure({ isStatic: t }), _r, Cr, goe.configure({ isStatic: t }), _oe, JQ.configure({ isStatic: t }), qQ.configure({ isStatic: t }), Foe.configure({ isStatic: t }), zoe.configure({ isStatic: t }), _ne.configure({ isStatic: t }), joe.configure({ isStatic: t }), Rne.configure({ isStatic: t }), ree.configure({ isStatic: t }), foe.configure({ isStatic: t }), Ete.configure({ isStatic: t }), Poe.configure({ isStatic: t }), Vee.configure({ isStatic: t }), gQ.configure({ isStatic: t }), yQ.configure({ isStatic: t }), kQ.configure({ isStatic: t }), Roe.configure({ isStatic: t }), dne.configure({ isStatic: t }), Noe.configure({ isStatic: t }), pee.configure({ isStatic: t }), _ee.configure({ isStatic: t }), Qee.configure({ isStatic: t }), Cee.configure({ isStatic: t }), Aoe.configure({ isStatic: t }), Ite.configure({ isStatic: t }), Soe.configure({ isStatic: t }), Coe.configure({ isStatic: t }), eee.configure({ isStatic: t }), Tne.configure({ isStatic: t }), bne.configure({ isStatic: t }), CQ.configure({ isStatic: t }), cne.configure({ isStatic: t }), Iee.configure({ isStatic: t }), Eee.configure({ isStatic: t }), Fee.configure({ isStatic: t }), yte.configure({ isStatic: t }), XQ.configure({ isStatic: t }), ene.configure({ isStatic: t }), Qte.configure({ isStatic: t }), Fte.configure({ isStatic: t }), Hee.configure({ isStatic: t }), Gte.configure({ isStatic: t }), uee.configure({ isStatic: t }), iee.configure({ isStatic: t }), cee.configure({ isStatic: t }), lee.configure({ isStatic: t }), Fae.configure({ isStatic: t }), uoe.configure({ isStatic: t }), poe.configure({ isStatic: t }), Toe.configure({ isStatic: t }), Eoe.configure({ isStatic: t }), KQ.configure({ isStatic: t }), Boe.configure({ isStatic: t }), Moe.configure({ isStatic: t }), Ooe.configure({ isStatic: t }), Doe.configure({ isStatic: t }), doe.configure({ isStatic: t }), GQ.configure({ isStatic: t }), moe, hi, fi, NZ.configure({ isStatic: t })] }, Uoe = ({ mediaUploadId: t }) => (e, n) => (n && n(ie(e, e.schema.nodes.video.create({ mediaUploadId: t, isEditorNode: !0 }))), !0), Voe = Pe.create({ name: "videoInsert", addCommands() { return { insertVideo: ({ mediaUploadId: t }) => ({ state: e, dispatch: n }) => Uoe({ mediaUploadId: t })(e, n) } } }), Zm = { attrs: {}, inline: !1, group: "block", atom: !0, selectable: !0, isolating: !1, defining: !1, draggable: !0, parseDOM: [{ tag: ".paywall-jump" }], toDOM: () => ["div", { class: "paywall-jump", "data-component-name": "PaywallToDOM" }] }, Hoe = ` `; class Goe { constructor() { var i, c; const e = typeof window != "undefined" ? (c = (i = window._preloads) == null ? void 0 : i.pub) == null ? void 0 : c.language : "en", { iString: n } = I18N.i(e), s = document.createElement("div"); s.className = "paywall-editor", s.appendChild(document.createElement("hr")); const a = document.createElement("div"); a.className = "paywall-editor-pill"; const o = document.createElement("span"); o.innerText = n("Paid content below this line"); const r = document.createElement("div"); r.className = "paywall-editor-pill-icon-container", r.innerHTML = Hoe, a.appendChild(o), a.appendChild(r), s.appendChild(a), s.appendChild(document.createElement("hr")), this.dom = s } } const Qm = new ws({ actionButtonAttr: "raw_href", substackType: "pdf", mimeTypesToSignature: ni, actionButtonText: "Download" }), Woe = { parseDOM: [{ tag: "del" }, { tag: "s" }], toDOM() { return ["s", 0] } }, Joe = { parseDOM: [{ tag: "sub" }], toDOM() { return ["sub", 0] } }, Yoe = { parseDOM: [{ tag: "sup" }], toDOM() { return ["sup", 0] } }, ef = new ws({ actionButtonAttr: null, substackType: "xlsx", mimeTypesToSignature: ti, actionButtonText: null }), tf = t => { var s, a, o, r; const [e, n] = (((r = (o = (a = (s = t.split("_")) == null ? void 0 : s[1]) == null ? void 0 : a.split(".")) == null ? void 0 : o[0]) == null ? void 0 : r.split("x")) || [0, 0]).map(Number); return { width: e, height: n } }, ps = { type: "doc", content: [{ type: "paragraph" }] }, Tl = { image: t => { var e; return at((e = t.attrs) == null ? void 0 : e.src) }, image2: t => { var e, n, s; return typeof((e = t.attrs) == null ? void 0 : e.width) != "number" && typeof((n = t.attrs) == null ? void 0 : n.height) != "number" || t.attrs.width >= 300 && t.attrs.height >= 300 ? at((s = t.attrs) == null ? void 0 : s.src) : null }, image3: t => { var n, s, a, o; const e = tf((n = t.attrs) == null ? void 0 : n.src); return typeof((s = t.attrs) == null ? void 0 : s.width) != "number" && typeof((a = t.attrs) == null ? void 0 : a.height) != "number" || t.attrs.width >= 300 && t.attrs.height >= 300 || e.width >= 300 && e.height >= 300 ? at((o = t.attrs) == null ? void 0 : o.src) : null }, imageGallery: t => { var e, n, s; return at((s = (n = (e = t.attrs) == null ? void 0 : e.gallery.images) == null ? void 0 : n[0]) == null ? void 0 : s.src) }, spotify: t => { var e; return at((e = t.attrs) == null ? void 0 : e.image) }, spotify2: t => { var e; return at((e = t.attrs) == null ? void 0 : e.image) }, opensea: t => { var e; return at((e = t.attrs) == null ? void 0 : e.image) }, twitter2: t => { var e, n; if ((e = t.attrs) != null && e.photos) { for (const s of t.attrs.photos) if (s.img_url) return at(s.img_url) } return (n = t.attrs) != null && n.expanded_url && t.attrs.expanded_url.image ? t.attrs.expanded_url.image.url ? at(t.attrs.expanded_url.image.url) : at(t.attrs.expanded_url.image) : null }, vimeo: t => { var e; return um((e = t.attrs) == null ? void 0 : e.videoId, { playButton: !1 }) }, youtube: t => { var e; return va((e = t.attrs) == null ? void 0 : e.videoId, { playButton: !1 }) }, youtube2: t => { var e; return va((e = t.attrs) == null ? void 0 : e.videoId, { playButton: !1 }) }, kindle: t => { var e; return q((e = t.attrs) == null ? void 0 : e.imageUrl) }, applePodcast: t => { var e; return q((e = t.attrs) == null ? void 0 : e.imageUrl) }, tiktok: t => { var e; return q((e = t.attrs) == null ? void 0 : e.thumbnail_url) }, prediction_market: t => { var e; return q((e = t.attrs) == null ? void 0 : e.thumbnail_url) }, manifold: t => { var e; return q((e = t.attrs) == null ? void 0 : e.thumbnail_url) }, lichess: t => { var e; return q((e = t.attrs) == null ? void 0 : e.thumbnail_url) }, datawrapper: t => { var e; return q((e = t.attrs) == null ? void 0 : e.thumbnail_url) } }, Ga = { augmentation_placeholder: Sd, youtube2: dm, youtube: Xm, vimeo: lm, install_substack_app: zm, preview_in_substack_app: Um, opensea: gd, twitter2: im, twitter: Ym, communityChat: qd, communityPost: Fd, comment: Bd, spotify2: sm, spotify: Jm, soundcloud: nm, instagram: Jd, image2: Wd, image: Lm, button: Id, comic: ga.nodeSpec, file: ga.nodeSpec, pdf: Qm.nodeSpec, xlsx: ef.nodeSpec, ebook: si.nodeSpec, referral_link: Gm, bandcamp: Td, kindle: Zd, gitgist: Hd, embeddedPost: ud, embeddedPublication: fa, applePodcast: wd, audio: Ed, video: Km, audioUrl: Ad, tiktok: am, poll: jm, imageGallery: Ys, image3: woe, cashtag: Ld, substack_mentions: Fm, prediction_market: ba, manifold: ba, lichess: Qd, datawrapper: Ud, digestPostEmbed: cd, assetError: Cd, directMessage: Qp, recipe: Hm }, Zt = P(S({}, Ga), { blockquote: Xr, fragmentNode: Om, captionedImage: Od, caption: Nd, ctaCaption: $d, footnote: Nm, footnoteAnchor: Mm, latex_block: Sm, paywall: Zm, preformatted_text_block: $m, pullquote: Yn, subscribeWidget: ui, captionedShareButton: or({ url: ce.SHARE_URL }), captionedWriterReferralButton: or({ hasDynamicSubstitutions: !1 }), templateComment: pi, meeting: qm, referralTier: Wm }), Koe = P(S({}, Ga), { subscribeWidget: ui, paywall: Zm, templateComment: pi }), Dl = { strikethrough: Woe, superscript: Yoe, subscript: Joe }, ze = new gr({ nodes: sf(), marks: af() }), di = new gr({ nodes: sf({ isStatic: !0 }), marks: af({ isStatic: !0 }) }), Xoe = Object.keys(Zt), Zoe = Xoe.filter(t => !["blockquote", "pullquote"].includes(t)).map(t => { const e = gZ(t, Zt[t]), n = S(S({}, Zt[t]), e); return t === "youtube2" ? n.addNodeView = () => ({ node: s }) => new jne(s) : t === "tiktok" ? n.addNodeView = () => ({ node: s }) => new kne(s) : t === "lichess" ? n.addNodeView = () => ({ node: s }) => new Zte(s) : t === "datawrapper" ? n.addNodeView = () => ({ node: s }) => new Zee(s) : t === "prediction_market" || t === "manifold" ? n.addNodeView = () => ({ node: s }) => new rne(s) : t === "paywall" ? n.addNodeView = () => s => new Goe : t === "latex_block" ? n.addNodeView = () => ({ node: s }) => new $ae(s) : t === "comic" ? n.addNodeView = () => ({ node: s, editor: a, getPos: o }) => ga.getNodeView({ node: s, editor: a, getPos: o }) : t === "pdf" ? n.addNodeView = () => ({ node: s, editor: a, getPos: o }) => Qm.getNodeView({ node: s, editor: a, getPos: o }) : t === "xlsx" ? n.addNodeView = () => ({ node: s, editor: a, getPos: o }) => ef.getNodeView({ node: s, editor: a, getPos: o }) : t === "ebook" && (n.addNodeView = () => ({ node: s, editor: a, getPos: o }) => si.getNodeView({ node: s, editor: a, getPos: o })), Qt.create(n) }), mi = Ah.extend({ addKeyboardShortcuts() { return { "Mod-k": () => this.editor.commands.addLink() } }, addCommands() { return { addLink: () => ({ state: t, dispatch: e, view: n }) => yd(t.schema)(t, e, n) } } }).configure({ autolink: !1, openOnClick: !1 }), Qoe = kr.extend({ addCommands() { return { toggleBlockquote: () => ({ state: t, commands: e }) => !gt(t, "paragraph") || gt(t, "pullquote") ? !1 : e.toggleWrap(this.name) } }, parseHTML() { return Xr.parseDOM } }), ere = (t, e, n) => N(void 0, null, function*() { const { schema: s } = e, a = s.nodes.cashtag.create({ symbol: t, prependSymbol: !1 }), o = e.tr; return o.replaceSelectionWith(a), n && n(o), !0 }), Il = () => N(void 0, null, function*() { const t = "/api/v1/symbols/all"; return (yield he.get(t)).body.symbols }), fi = gu.configure({ HTMLAttributes: { class: "mention" }, suggestion: { char: "$", allowSpaces: !1, startOfLine: !1, command: () => {}, items: ({ editor: t, query: e }) => [], render: () => ({ onStart: () => { Il() }, onUpdate() {}, onKeyDown(e) { return e.event.key === "Escape" }, onExit(e) { return N(this, null, function*() { const n = e.text.trim(); if (["$", ""].includes(n)) return; const s = yield Il(); if (!/\$[a-z]+$/i.test(n) || n.length > 6 || !s.includes(n.toUpperCase().replace("$", "")) || ["BTC", "ETH", "SOL", "XRP", "BNB", "LUNA"].includes(n.toUpperCase().replace("$", ""))) return; const a = e.editor.state.tr; a.setSelection(Ee.create(a.doc, e.range.from, e.range.to)).deleteSelection(), e.editor.view.dispatch(a), ere(n.toUpperCase(), e.editor.view.state, e.editor.view.dispatch), e.editor.commands.insertContent(" "), e.editor.view.dispatch(e.editor.state.tr) }) } }) } }), tre = gu.extend({ name: "substack_mentions_extension" }), hi = tre.configure({ HTMLAttributes: { class: "substack-mention" }, suggestion: { char: "@", pluginKey: new pu("substack_mentions_extension"), decorationClass: "substack-mention", allowSpaces: !0, startOfLine: !1, command: ({ editor: t, range: e, props: n }) => { var f; if (!n.item) return; const { name: s, id: a, type: o, url: r, photo_url: i } = n.item, c = t.view.state.selection.$to.nodeAfter; ((f = c == null ? void 0 : c.text) == null ? void 0 : f.startsWith(" ")) && (e.to += 1); const { schema: u } = t.state; let d = t.state.tr; d.setSelection(Ee.create(d.doc, e.from, e.to)).deleteSelection(), t.view.dispatch(d), d = t.state.tr; const m = u.nodes.substack_mentions.create({ name: s, id: a, type: o, url: r, photo_url: i, uuid: ka() }); d.insert(e.from, m), t.view.dispatch(d), t.commands.insertContent(" "), t.view.dispatch(t.state.tr), d.setSelection(Ee.near(d.doc.resolve(e.from + 1))) }, items: e => N(void 0, [e], function*({ query: t }) { return t.length < 1 ? [] : yield $g(t) }), render: () => { const t = $t.prototype.stopCallback; let e, n; const s = (a, o = !1) => { var l, u; const r = typeof window != "undefined" ? (u = (l = window._preloads) == null ? void 0 : l.pub) == null ? void 0 : u.language : "en", { iString: i, iTemplate: c } = I18N.i(r); return { items: a.items, query: a.query, isLoading: o, selectItem: d => { !d || d.disabledReason || a.command({ item: d }) }, placeholderText: i("Search for a person or publication"), noResultsText: c `No results for ${a.query}`, minQueryLength: 2, language: r } }; return { onStart: a => { e = new Sh(Th, { props: s(a), editor: a.editor }), n = Dh("body", { getReferenceClientRect: a.clientRect, appendTo: () => document.getElementsByClassName("editor-scroll")[0] || document.body, content: e.element, popperOptions: { strategy: "absolute", modifiers: [{ options: { altAxis: !0 } }] }, showOnCreate: !0, interactive: !0, trigger: "manual", placement: "bottom-start" }), $t.prototype.stopCallback = function(o, r, i) { return i === "esc" ? !0 : t(o, r, i) } }, onBeforeUpdate(a) { n && n[0].show(), e && e.updateProps(s(a, !0)), a.clientRect && n && n[0].setProps({ getReferenceClientRect: a.clientRect }) }, onUpdate(a) { e && e.updateProps(s(a, !1)), n && n[0].setProps({ getReferenceClientRect: a.clientRect }) }, onKeyDown(a) { var o; return a.event.key === "Escape" ? (n && n[0] && n[0].destroy(), n = null, e && e.destroy(), e = null, setTimeout(() => { $t.prototype.stopCallback = t }, 0), !0) : (o = e == null ? void 0 : e.ref) == null ? void 0 : o.onKeyDown(a) }, onExit(a) { $t.prototype.stopCallback = t, n && n[0] && n[0].destroy(), n = null, e && e.destroy(), e = null } } } } }), nre = Pr.extend({ addCommands() { return { insertHorizontalRule: () => ({ state: t, dispatch: e }) => (e && e(ie(t, t.schema.nodes.horizontalRule.create())), !0), setHorizontalRule: () => ({ state: t, dispatch: e }) => (e && e(ie(t, t.schema.nodes.horizontalRule.create())), !0) } } }), sre = Ru.extend({ marks: "_" }), gi = [Qoe, Ou, _r, bte, Lu, sre, xte, mu, Zne, qu, hp, xu, nre, tte, Voe, Vae, Gae, Xae, Qae, ose, Pu, mi, Bu, Cr, fu, Yae, Vm, zu, gp, bp, hu, fi, hi, Jne, ed, ...Zoe], nf = lu(gi); Object.entries(nf.nodes).forEach(([t, e]) => { Zt[t] !== void 0 && (e.spec = S(S({}, Zt[t]), e.spec)) }); function sf({ isStatic: t = !1 } = {}) { let e = Wr.spec.nodes; for (const n of Object.keys(Zt)) { const s = Object.assign({}, Zt[n]); t && s.toDOMStatic && (s.toDOM = s.toDOMStatic), delete s.toDOMStatic, e.get(n) ? e = e.update(n, s) : e = e.addToEnd(n, s) } return e } function af({ isStatic: t = !1 } = {}) { let e = Wr.spec.marks; for (const n of Object.keys(Dl)) { const s = Object.assign({}, Dl[n]); t && s.toDOMStatic && (s.toDOM = s.toDOMStatic), delete s.toDOMStatic, e.get(n) ? e = e.update(n, s) : e = e.addToEnd(n, s) } return e } function Wa(t, { postId: e, pubId: n } = {}) { let s = t; return typeof s == "string" && (s = Be(s, { postId: e, pubId: n })), Vt(s, a => { const o = $p.find(r => r[0] === a.type); return o && (a.type = o[1], a.attrs && o[1] === "orderedList" && (a.attrs.start = a.attrs.order)), a.marks && a.marks.forEach(r => { const i = Up.find(c => c[0] === r.type); i && (r.type = i[1]) }), a }), s } function Ja(t, { postId: e, pubId: n } = {}) { let s = t; return typeof s == "string" && (s = Be(s, { postId: e, pubId: n })), Vt(s, a => { const o = $p.find(r => r[1] === a.type); return o && (a.type = o[0], a.attrs && o[0] === "ordered_list" && (a.attrs.order = a.attrs.start)), a.marks && a.marks.forEach(r => { const i = Up.find(c => c[1] === r.type); i && (r.type = i[0]) }), a }), s } function Be(t, { postId: e, pubId: n } = {}) { t && (t = t.replace("http://substack-post-media", "https://substack-post-media"), t = t.replace("http://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984", "https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984")), t = Dt(t); let s; if (t) try { s = JSON.parse(t) } catch (a) { console.error(`unserializeJson for post [${e}], pubId [${n}], could not parse serialized:`, t, a) } return s != null ? s : void 0 } function nn(t, { customSchema: e, useTiptap: n, mutateJson: s, shouldSetBelowTheFoldAttribute: a = !1, shouldThrowOnInvalid: o, postId: r, pubId: i } = {}) { try { const c = Be(t, { postId: r, pubId: i }) || ps; s && s(c); const l = _s(c); if (!l) throw new Error("could not purgeUnsafeLinks"); let u = l; return a && (u = xi(u)), n ? u = Wa(u, { postId: r, pubId: i }) : u = Ja(u, { postId: r, pubId: i }), (e || ze).nodeFromJSON(u) } catch (c) { if (console.error(`Failed to parse JSON for post [${r}], serialized:`, t, c), o) throw new Error(`Failed to parse JSON: ${c.message}`); return (e || ze).nodeFromJSON(ps) } } function are(c) { return N(this, arguments, function*(t, { customSchema: e, useTiptap: n, mutateJson: s, shouldSetBelowTheFoldAttribute: a = !1, shouldThrowOnInvalid: o, postId: r, pubId: i } = {}) { try { const l = Be(t, { postId: r, pubId: i }) || ps; s && (yield s(l)); const u = _s(l); if (!u) throw new Error("could not purgeUnsafeLinks"); let d = u; return a && (d = xi(d)), n ? d = Wa(d, { postId: r, pubId: i }) : d = Ja(d, { postId: r, pubId: i }), (e || ze).nodeFromJSON(d) } catch (l) { if (console.error(`Failed to parse JSON for post [${r}], serialized:`, t, l), o) throw new Error(`Failed to parse JSON: ${l.message}`); return (e || ze).nodeFromJSON(ps) } }) } function ks(t, { runMigrations: e = !1, postId: n, pubId: s } = {}) { let a = t.toJSON(); return e && (a = kre(a), a = _s(a), a = Ja(a, { postId: n, pubId: s })), JSON.stringify(a) } function ore(t, e) { const n = document.createElement("div"); return n.appendChild(Ea.fromSchema(e ? di : ze).serializeFragment([t], { document })), n } function rre(t) { return Ea.renderSpec(document, t).dom.outerHTML } function ire(t) { Array.from(t.querySelectorAll("img")).forEach(n => { const s = document.createElement("amp-img"); s.setAttribute("layout", "intrinsic"), n.getAttributeNames().forEach(a => { a !== "srcset" && s.setAttribute(a, n.getAttribute(a)) }), n.replaceWith(s) }) } function cre(t) { function e(s, a) { return Qf(it(s, 500, { ellipsis: "" }), { allowUnicode: a }) } Array.from(t.querySelectorAll("h2, h3, h4, h5, h6")).forEach(s => { var a; if (!s.getAttribute("id")) { const o = e(s.textContent || "", !0), r = document.createElement("div"); r.setAttribute("id", o), r.setAttribute("class", "anchor-target"), (a = s.parentNode) == null || a.insertBefore(r, s); const i = document.createElement("a"); for (i.setAttribute("href", `#${o}`); s.firstChild;) i.appendChild(s.firstChild); s.appendChild(i) } }) } function lre(t, e, { isAmp: n, transform: s, useTipTap: a, pubId: o, postId: r } = {}) { if (a) { const u = Be(t, { postId: r, pubId: o }), d = Wa(u, { postId: r, pubId: o }); if (!d) throw new Error("could not serialize json doc"); return DZ({ doc: d, extensions: $oe({ isStatic: e != null ? e : !1 }), customDocument: document }) } const i = nn(t, { shouldSetBelowTheFoldAttribute: !0, postId: r, pubId: o }), c = Ea.fromSchema(e ? di : ze), l = document.createElement("div"); return c.serializeFragment(i.content, { document }, l), s && s(l), n && ire(l), l.innerHTML } function ure(t, e, { postId: n } = {}) { return Gp(nn(t, { postId: n }), e) } function bi(t, { postId: e } = {}) { return fZ(nn(t, { postId: e })) } function pre(t, { postId: e } = {}) { return pZ(nn(t, { postId: e })) } function dre(t, { stripEmptyParagraphs: e, postId: n, pubId: s } = {}) { let a = Ih.fromSchema(ze).parse(new DOMParser().parseFromString(t, "text/html")); return e && (a = Tn(a, o => !(o.type && o.type.name === "paragraph" && !Gp(o)))), a ? ks(a, { postId: n, pubId: s }) : null } function Dt(t) { return t && t[0] !== "{" && t !== "null" ? ks($X.parse(t)) : t } function mre(t) { var e, n; return t.body = (e = Dt(t.body)) != null ? e : null, t.draft_body = (n = Dt(t.draft_body)) != null ? n : null, t } function fre(t) { var e, n, s, a, o; return t.subscribe_content = (e = Dt(t.subscribe_content)) != null ? e : null, t.welcome_email_content = (n = Dt(t.welcome_email_content)) != null ? n : null, t.tos_content = (s = Dt(t.tos_content)) != null ? s : null, t.privacy_content = (a = Dt(t.privacy_content)) != null ? a : null, t.disclosures_content = (o = Dt(t.disclosures_content)) != null ? o : null, t } function hre(t, e, { post: n = null, pubId: s, maxStopAfter: a = null, language: o = "en", excludeMediaPrefix: r = !1 } = {}) { var d; const { iString: i } = I18N.i(o); let c = (n == null ? void 0 : n.type) === "thread" ? 145 : 250; (a || a === 0) && (c = Math.min(a, c)); const l = (n == null ? void 0 : n.type) === "thread"; let u = ""; if (e) u += e; else if (c !== 0) { const m = { paragraph: !0, blockquote: !0, list_item: !0, listItem: !0, heading: !0, code_block: !0, codeBlock: !0, hardbreak: !0, hard_break: !0, hardBreak: !0 }, f = { caption: !0, footnote: !0 }; Vt(typeof t == "string" ? Be(t, { postId: (d = n == null ? void 0 : n.id) != null ? d : null, pubId: s }) : t, h => { var g, b; if (c && u.length >= c || h.type && f[h.type]) return !1; h.type === "text" ? u += h.text : h.type && m[h.type] && u && u[u.length - 1] !== " " ? u += " " : h.type === "substack_mentions" && (u += (b = (g = h.attrs) == null ? void 0 : g.name) != null ? b : "") }) } if (u = u.replace(/\s+/g, " ").trim(), l && c && u.length >= c && (u = it(u, c)), ((n == null ? void 0 : n.type) === "podcast" || (n == null ? void 0 : n.type) === "video") && !r) { const m = Xf(n); u = `${(n==null?void 0:n.type)==="video"||n!=null&&n.videoUpload?i("Watch now"):i("Listen now")} ${m?`(${Zf(m,{minutesCutoff:3*60*60,language:o})}) `:""}| ${u}` } return u } function gre(t, e) { return of(t, e)[0] } function vi(t, { postId: e, pubId: n } = {}) { const s = Be(t, { postId: e, pubId: n }); return s ? Du(br(Vp(s, a => { var o; return !!Tl[(o = a.type) != null ? o : ""] }).map(a => { var r; const o = Tl[(r = a.type) != null ? r : ""](a); return o ? q(o) : null }))) : [] } function bre(t, { postId: e, pubId: n } = {}) { const s = vi(t, { postId: e, pubId: n }); return s.length > 0 ? s[0] : null } function vre(n) { return N(this, arguments, function*({ body: t, postId: e }) { const s = nn(t, { postId: e }), a = []; return Jn(s, o => { var r; switch (o.type.name) { case "image": case "image2": o.attrs.src && a.push(o.attrs.src); break; case "imageGallery": (r = o.attrs.gallery.images) == null || r.map(i => { i.src && a.push(i.src) }); break } }), a }) } function of (t, e) { var o; const n = []; "podcast_episode_image_info" in e && e.podcast_episode_image_info && !e.podcast_episode_image_info.isDefaultArt && n.unshift(e.podcast_episode_image_info.url), n.unshift(...vi(t, { postId: e.id })); const s = "podcastUpload" in e && e.podcastUpload || "draftPodcastUpload" in e && e.draftPodcastUpload || void 0; if ((s == null ? void 0 : s.state) === "transcoded" && ((o = s == null ? void 0 : s.thumbnail_id) != null ? o : 1) > 1) { const r = Zs(s); r && n.unshift(r) } const a = "videoUpload" in e && e.videoUpload || "draftVideoUpload" in e && e.draftVideoUpload || void 0; if ((a == null ? void 0 : a.state) === "transcoded") { const r = Zs(a); r && n.unshift(r) } return "podcast_art_url" in e && e.podcast_art_url && n.unshift(e.podcast_art_url), n } function at(t) { return t ? (t = t.replace(/\/l_twitter_play_button_rvaygk[^\/]+/g, ""), q(t, void 0, { height: 600 })) : null } function rf(t) { Vt(t, e => { var n; return e.type !== "button" ? !1 : ((n = e.attrs) != null && n.url && typeof e.attrs.url == "string" && e.attrs.url.startsWith("%%") && (e.attrs.action = e.attrs.url.replace(/%%/g, "")), !0) }, { nodeTypes: "button" }) } function xre(t, { postId: e } = {}) { let n = t; if (typeof n == "string") { const a = Be(n, { postId: e }); if (a) n = a; else return [] } rf(n); const s = []; return Vt(n, a => { var o, r; if (a.type === "button" && ((o = a.attrs) != null && o.url) && !a.attrs.action) s.push({ text: a.attrs.text, url: a.attrs.url }); else if (a.marks) { for (const i of a.marks) if (i.type === "link" && ((r = i.attrs) != null && r.href)) { s.push({ text: a.text, url: i.attrs.href }); break } } }), s } function yre(t, { postId: e } = {}) { if (!t) return !1; let n = t; if (typeof n == "string") { const a = Be(n, { postId: e }); if (a) n = a; else return !1 } return !!Bn(n, a => a.type === "templateComment") } function wre(t, { postId: e } = {}) { if (!t) return !1; let n = t; if (typeof n == "string") { const a = Be(n, { postId: e }); if (a) n = a; else return !1 } return !!Bn(n, a => { var o, r, i, c, l, u; for (const d of ["href", "src", "url"]) if ((l = (i = (r = (o = a == null ? void 0 : a.attrs) == null ? void 0 : o[d]) == null ? void 0 : r.trim) == null ? void 0 : (c = i.call(r)).toLowerCase) != null && l.call(c).startsWith("javascript:") || (u = a == null ? void 0 : a.marks) != null && u.find(m => { var f, h, g, b, x; return (x = (g = (h = (f = m.attrs) == null ? void 0 : f[d]) == null ? void 0 : h.trim) == null ? void 0 : (b = g.call(h)).toLowerCase) == null ? void 0 : x.call(b).startsWith("javascript:") })) return !0; return !1 }) } function _s(t, { postId: e } = {}) { let n; if (typeof t == "string") { const a = Be(t, { postId: e }); if (a) n = a; else return null } else n = t; return Vo(n) ? Tn(n, o => { var r, i, c, l, u, d; for (const m of ["href", "src", "url"]) if ((u = (c = (i = (r = o == null ? void 0 : o.attrs) == null ? void 0 : r[m]) == null ? void 0 : i.trim) == null ? void 0 : (l = c.call(i)).toLowerCase) != null && u.call(l).startsWith("javascript:") || (d = o == null ? void 0 : o.marks) != null && d.find(f => { var h, g, b, x, v; return (v = (b = (g = (h = f.attrs) == null ? void 0 : h[m]) == null ? void 0 : g.trim) == null ? void 0 : (x = b.call(g)).toLowerCase) == null ? void 0 : v.call(x).startsWith("javascript:") })) return !1; return !0 }) : Tn(n, a => { var o, r, i, c, l, u; for (const d of ["href", "src", "url"]) if ((l = (i = (r = (o = a == null ? void 0 : a.attrs) == null ? void 0 : o[d]) == null ? void 0 : r.trim) == null ? void 0 : (c = i.call(r)).toLowerCase) != null && l.call(c).startsWith("javascript:") || (u = a == null ? void 0 : a.marks) != null && u.find(m => { var f, h, g, b, x; return (x = (g = (h = (f = m.attrs) == null ? void 0 : f[d]) == null ? void 0 : h.trim) == null ? void 0 : (b = g.call(h)).toLowerCase) == null ? void 0 : x.call(b).startsWith("javascript:") })) return !1; return !0 }) } function kre(t, { postId: e } = {}) { const n = typeof t == "string" ? Be(t, { postId: e }) : t; return Vt(n, s => { s.text && (s.text = Kf(s.text)) }, { nodeTypes: ["text"] }), n } function xi(t, e = 8, { postId: n } = {}) { const s = typeof t == "string" ? Be(t, { postId: n }) : t; if (!s) return; let a = !1; return s.type === "doc" && s.content && s.content.map((o, r) => { r > e ? Vt(o, i => { !i.content && i.attrs && (i.attrs.belowTheFold = !0) }) : a || Vt(o, i => { !i.content && (i == null ? void 0 : i.type) == "image2" && i.attrs && (i.attrs.topImage = !0, a = !0) }) }), s } function _re(t, { postId: e } = {}) { try { return JSON.parse(t), bi(t, { postId: e }) } catch (n) { return t } } function Cre(t, { body: e, hasPodcastPreview: n }) { if (!t || !e) return null; let s = e; if (n) { const a = lZ(Be(e, { postId: t.id }), { maxLength: t.post_preview_limit ? t.post_preview_limit : 356 }); s = JSON.stringify(a) } return bi(s, { postId: t.id }) } function Ere(t) { return ks(ze.node("doc", null, t.split(` `).map(e => e.trim()).filter(e => e.length > 0).map(e => { const n = [], s = _g(e); if (s.length > 0) { let a = e; for (;;) { const o = s.map(c => [a.indexOf(c.value), c.value]).sort().find(([c]) => c >= 0); if (!o) break; const [r, i] = o; r > 0 && n.push(ze.text(a.substring(0, r))), n.push(ze.text(i, [ze.marks.link.create({ title: i, href: i, target: "_blank" })])), a = a.substring(r + i.length) } a && n.push(ze.text(a)) } else n.push(ze.text(e)); return ze.node("paragraph", null, n) }))) } function Are(t, { postId: e } = {}) { if (!t) return !1; let n = t; if (typeof t == "string") { const s = Be(t, { postId: e }); if (s) n = s; else return !1 } else n = t; return Zp(n) } const Te = Object.freeze(Object.defineProperty({ __proto__: null, CashTag: fi, EMPTY_DOC: ps, LinkCustom: mi, SubstackMentions: hi, addIdsToHeaders: cre, checkForUnpublishableComments: yre, checkForUnsafeLinks: wre, createStringDoc: Ere, customMediaNodes: Ga, documentToHtml: rre, extractTags: pre, fromHtml: dre, getCoverImage: gre, getCoverImages: of , getDefaultPodcastDescriptionWithoutFeedCTAs: Cre, getDescription: hre, getDimensionsFromImageUrl: tf, getFirstImageFromBody: bre, getImageUrlsFromPostBody: vre, getImagesFromBody: vi, getLinks: xre, getPreviewImageUrl: at, hasExplicitPaywall: Are, migrateMarkdown: Dt, migratePost: mre, migrateProsemirrorToTiptap: Wa, migratePublication: fre, migrateTiptapToProsemirror: Ja, nodeToHtml: ore, normalizeDbPodcastDescriptionToHtmlString: _re, purgeUnsafeLinks: _s, schema: ze, schemaStatic: di, serializeDoc: ks, serializedToPodcastDescription: bi, setBelowTheFoldAttribute: xi, setButtonActions: rf, tipTapNodes: gi, tipTapSchema: nf, toHtml: lre, toText: ure, trackedCustomNodes: Koe, unserializeDoc: nn, unserializeDocAsync: are, unserializeJson: Be }, Symbol.toStringTag, { value: "Module" })), Sre = "_imageEditorContainer_ff78y_1", Tre = "_baseImage_ff78y_6", Dre = "_watermarkContainer_ff78y_10", Lo = { imageEditorContainer: Sre, baseImage: Tre, watermarkContainer: Dre }; function Ire({ pub: t, image: e, onDone: n }) { var A; const s = J(null), a = J(null), o = J(null), r = J(null), [i, c] = z(!1), [l, u] = z(!1), [d, m] = z(!1), [f, h] = z(65), [g, b] = z(0), [x, v] = z(0), [w, E] = z(0), [_, k] = z(0), [M, y] = z(70), [T, D] = z(70); U(() => { if (e && i && l && o.current && a.current) { const I = o.current, O = I.getContext("2d"); I.width = M, I.height = T, O == null || O.drawImage(a.current, 0, 0, I.width, I.height) } }, [T, e, i, l, M]), U(() => { if (i && s.current && w === 0 && _ === 0) { const I = s.current.getBoundingClientRect(); E(I.right - I.left - M), k(I.bottom - I.top - T) } }, [w, i, _, M, T]), U(() => { if (o.current && a.current) { const I = o.current, O = I.getContext("2d"); I.width = M, I.height = T, O == null || O.clearRect(0, 0, 800, 800), O == null || O.drawImage(a.current, 0, 0, I.width, I.height) } }, [M, T]), U(() => { e || u(!1) }, [e]); const { node: C, pos: L, view: R } = e || {}; return t != null && t.logo_url ? p(ms, { width: 550, isOpen: !!C, onClose: n }, p(Sa, { title: "Add a watermark", onClose: n, includeClose: !0 }), p(fs, null, p(Y, { gap: 8 }, p(X.B2, null, "Click and drag to move the watermark"), p(ne, { alignItems: "center", gap: 8 }, p(X.B3, { as: "label", for: "opacity" }, "Opacity:", " "), p("input", { value: f, onChange: I => { I.target && h(Number(I.target.value)) }, type: "range", min: 0, max: 100 })), p(ne, { alignItems: "center", gap: 8 }, p(X.B3, { as: "label", for: "width" }, "Size:", " "), p("input", { value: M, onChange: I => { I.target && y(Number(I.target.value)), I.target && D(Number(I.target.value)) }, type: "range", min: 0, max: 800 })), p("div", { className: Lo.imageEditorContainer, onDragOver: I => { I.preventDefault() }, onDrop: I => { E(I.clientX - g), k(I.clientY - x) } }, p("img", { className: Lo.baseImage, onLoad: () => { c(!0) }, ref: s, src: (A = C == null ? void 0 : C.attrs) == null ? void 0 : A.src }), p("div", { className: Lo.watermarkContainer, style: { top: _, left: w, opacity: f / 100 }, draggable: !0, onDragStart: I => { var B; b(I.clientX - w), v(I.clientY - _), c(!1); const O = I.target && I.target.getBoundingClientRect(); if (O) { const j = I.clientX - O.left, G = I.clientY - O.top; r != null && r.current && ((B = I.dataTransfer) == null || B.setDragImage(r == null ? void 0 : r.current, j, G)) } }, onDragEnd: I => { c(!0) }, ref: r }, p("img", { ref: a, onLoad: () => { u(!0) }, style: { display: "none" }, src: t.logo_url }), p("canvas", { ref: o }))))), p(ds, { primaryButton: p(Ae, { priority: "primary-theme", onClick: () => N(this, null, function*() { var O, B, j; se(ae.SAVE_WATERMARK_CLICKED); const I = (O = s.current) == null ? void 0 : O.getBoundingClientRect(); if (I && s.current) { const G = (I == null ? void 0 : I.right) - I.left, ke = (I == null ? void 0 : I.bottom) - I.top, Re = ((B = s.current) == null ? void 0 : B.naturalWidth) / G, ve = ((j = s.current) == null ? void 0 : j.naturalHeight) / ke; m(!0); try { const _e = yield he.post("/api/v1/image/watermark").send({ image: C == null ? void 0 : C.attrs.src, offsetX: Math.floor(Re * w), offsetY: Math.floor(ve * _), width: Math.floor(Re * M), height: Math.floor(ve * T), opacity: f }); typeof L == "number" && (R == null || R.dispatch(R.state.tr.setNodeMarkup(L, null, P(S({}, C == null ? void 0 : C.attrs), { src: _e.body.url, srcNoWatermark: C == null ? void 0 : C.attrs.src })))), m(!1), n() } catch (_e) { m(!1), alert(Ft(_e)) } } else alert("Something went wrong") }) }, d ? "Saving…" : "Save"), secondaryButton: p(Ae, { priority: "secondary", onClick: n }, "Cancel") })) : null } function Nre({ children: t, isOpen: e, header: n, button: s = "Done", onDone: a }) { return p(be, null, p("div", { className: `post-editor-file-edit-sidebar file-sidebar-blackout ${e?"open":""}` }), p("div", { className: `post-editor-file-edit-sidebar file-sidebar ${e?"open":""}` }, p("div", { className: "file-sidebar-header" }, p("div", { className: "file-sidebar-header-text" }, n), p("div", { className: "file-sidebar-header-button", onClick: a }, s)), t)) } function Mre({ node: t, onDone: e }) { var u, d, m, f, h; const [n, s] = z((u = t == null ? void 0 : t.attrs) == null ? void 0 : u.thumbnail), [a, o] = z((d = t == null ? void 0 : t.attrs) == null ? void 0 : d.description), [r, i] = z(!1), [c, l] = z(null); return U(() => { var g, b; s((g = t == null ? void 0 : t.attrs) == null ? void 0 : g.thumbnail), o((b = t == null ? void 0 : t.attrs) == null ? void 0 : b.description) }, [(m = t == null ? void 0 : t.attrs) == null ? void 0 : m.thumbnail, (f = t == null ? void 0 : t.attrs) == null ? void 0 : f.description]), U(() => { t || (s(null), o(null), l(null)) }, [t]), p(Nre, { isOpen: t, header: "File Settings", onDone: e }, p("div", { className: "file-sidebar-item-text-input" }, p("div", { className: "file-sidebar-item-text-label" }, "Title"), p("input", { className: "file-sidebar-item-text-input-editable", type: "text", placeholder: "Add a title...", value: (h = t == null ? void 0 : t.attrs) == null ? void 0 : h.title, onInput: g => { t.updateTitle(g.target.value) } })), p("div", { className: "file-sidebar-item-text-input" }, p("div", { className: "file-sidebar-item-text-label" }, "Description"), p("textarea", { className: "file-sidebar-item-text-input-editable-multiline", placeholder: "Add a description...", type: "text", value: a, onInput: g => { t.updateDescription(g.target.value) } })), p("div", { className: "file-sidebar-item" }, p("div", { className: "file-sidebar-upload-label" }, p("div", { className: "file-sidebar-item-label" }, "Thumbnail"), p("div", { className: "file-sidebar-item-sublabel" }, "Will be cropped to a 3:2 aspect ratio")), n && !r ? p("div", { className: "file-sidebar-item-button", onClick: () => N(this, null, function*() { yield t.updateThumbnail(null), s(null) }) }, p("div", { className: "file-sidebar-item-button-icon" }, p(sg, null)), "Remove") : p(be, null, p("label", { className: `file-sidebar-item-button${r?" disabled":""}`, for: "file-sidebar-file-input" }, p("div", { className: "file-sidebar-item-button-icon" }, p(rse, null)), "Upload"), p("input", { id: "file-sidebar-file-input", className: "file-sidebar-item-hidden-file-input", type: "file", accept: "image/*", onInput: g => N(this, null, function*() { var v; const b = (v = g.target) == null ? void 0 : v.files[0]; if (b.type.indexOf("svg") > 0) { const w = new Error; w.message = "svg images are not supported for thumbnails, please use another image format.", l(w); return } l(null), i(!0); const x = yield t.updateThumbnail(b, 400, { aspect: 1.5, crop: "fill", gravity: "auto", quality: "auto:best", width: 400, height: 600 }).catch(w => { l(w), i(!1) }); x && s(x) }) }, "upload"))), r ? p("div", { className: "file-sidebar-item-thumbnail-placeholder" }, p(td, null)) : null, n ? p("img", { className: `file-sidebar-item-thumbnail${r?"-loading":""}`, src: n, onLoad: () => { i(!1) }, onError: g => { s(null), l(g), i(!1) } }) : null, c ? p("p", { className: "file-sidebar-error-message" }, c.message ? c.message : "there was an error while attempting to use your file as a thumbnail, please try again.") : null) } function Ore(t) { return t.type.name !== "referralTier" } const Lre = new _t({ filterTransaction: (t, e) => { let n = !0; const s = []; return t.steps.forEach(a => { (a instanceof Nh || a instanceof Mh) && s.push(a) }), s.forEach(a => { const o = Math.max(0, a.from), r = Math.min(a.to, e.doc.content.size); if (o >= e.doc.content.size) return n; o !== r && e.doc.nodesBetween(o, r, i => { Ore(i) || (n = !1) }) }), n } }); class Rre { constructor(e) { var n; this.update = (s, a) => { const o = s.state; if (a && a.doc.eq(o.doc) && a.selection.eq(o.selection)) return; let r; "node" in o.selection && (r = o.selection.node); const { empty: i } = o.selection; if (i || !r || r.type.name !== "embeddedPublication") { this._open && (this.tooltip.style.display = "none", this.removeEventListeners(), this._open = !1); return } this.tooltip.style.display = "block", this.tooltip.classList.toggle("show-subscribe", r.attrs.show_subscribe), this.view = s, this.place(), this._open || this.addEventListeners(), this._open = !0 }, this.place = () => { if (!this.view) return; const s = this.tooltip.offsetParent || document.body, a = tr(this.view.coordsAtPos(this.view.state.selection.from)); this.tooltip.style.top = `${a.top-this.tooltip.clientHeight}px`, this.tooltip.style.left = `${Math.round(s.clientWidth/2)-Math.round(this.tooltip.clientWidth/2)}px` }, this.addEventListeners = () => { window.addEventListener("resize", this.place), this.scrollParent.addEventListener("scroll", this.place) }, this.removeEventListeners = () => { window.removeEventListener("resize", this.place), this.scrollParent.removeEventListener("scroll", this.place) }, this.destroy = () => { this._open = !1, this.tooltip.remove() }, this.onClick = () => N(this, null, function*() { if (!this.view) return; const { tr: s, selection: a } = this.view.state; let o; if ("node" in a && (o = a.node), !o) return; const { show_subscribe: r } = o.attrs; s.setNodeMarkup(a.from, o.type, P(S({}, o.attrs), { show_subscribe: !r })), this.view.dispatch(s) }), this._open = !1, this.tooltip = document.createElement("div"), this.tooltip.className = "embed-publication-tooltip", this.tooltip.style.display = "none", this.tooltip.addEventListener("click", this.onClick), (n = e.dom.parentNode) == null || n.appendChild(this.tooltip), this.scrollParent = this.tooltip.closest(".editor-scroll") || document.getElementsByClassName("editor-scroll")[0], this.update(e, null) } } const Pre = new _t({ view(t) { return new Rre(t) } }); function Bre({ editor: t, filesEnabled: e }, n = new zre) { n.filesEnabled = e, n.setEditor(t); const s = new _t({ props: { handleDOMEvents: { drop(a, o) { return n.drop(a, o) }, file_replace(a, o) { return n.replaceFile(a, o) } } } }); return n.setPlugin(s), s } class zre { constructor() { this.filesEnabled = !1 } setPlugin(e) { this.plugin = e } setEditor(e) { this.editor = e } maybeCreatePost() { return N(this, null, function*() { if (!this.editor || !("maybeCreatePost" in this.editor)) return; yield this.editor.maybeCreatePost() }) } getInsertPos(e) { if (this.editor) return this.editor.getInsertPos(e) } dispatchAlerts(e) { this.editor && this.editor.handleDropFileErrors(e) } get schema() { var e, n; return (n = (e = this.editor) == null ? void 0 : e.editorView) == null ? void 0 : n.state.schema } get view() { return this.editor ? this.editor.editorView : null } get pub() { var e; return (e = this.editor) == null ? void 0 : e.props.pub } get post() { var e, n; return (n = (e = this.editor) == null ? void 0 : e.state) == null ? void 0 : n.post } addNewline(e) { e.dispatch(e.state.tr.insertText("\r", e.state.doc.nodeSize - 2)) } drop(e, n) { return this.shouldHandleDrop(n) ? (this.handleDropEvent(n), !0) : !1 } getFilesToHandle(e) { return N(this, null, function*() { const n = []; for (const s of e)(yield this.shouldHandleFile(s)) && n.push(s); return n }) } getFilesToReject(e) { return N(this, null, function*() { const n = []; for (const s of e)(yield this.shouldHandleFile(s)) || n.push(s); return n }) } shouldHandleDrop(e) { var s, a; const n = ((s = e == null ? void 0 : e.dataTransfer) == null ? void 0 : s.files) || []; return !(!n.length || ((a = n[0].type) == null ? void 0 : a.indexOf("image/")) === 0) } handleDropEvent(e) { return N(this, null, function*() { var s; e.preventDefault(); const n = Array.from(((s = e.dataTransfer) == null ? void 0 : s.files) || []); yield this.handleRejections(n), yield this.maybeCreatePost(), yield this.processFiles(e, n) }) } handleRejections(e) { return N(this, null, function*() { const n = yield this.getFilesToReject(e); n != null && n.length && (se(ae.FILES_REJECTED, { files: n.map(s => Object.assign({}, s)) }), this.dispatchAlerts(n)) }) } handleUploadError(e, n) { return e.error = n, e.error.details = p("p", null, "We were unable to add ", p("b", null, e.name), ". Please try again and if the problem persists, contact us at", " ", p("a", { href: "mailto:support@substack.com", target: "_blank", rel: "noopener" }, "support@substack.com")), this.dispatchAlerts([e]), { filename: e.name, filetype: e.assignedType || e.type, filesize: e.size, title: Ro(e.name), dirty: !0, error: { message: "Unable to upload file", button: "Try again" } } } processFile(e, n = 0) { return N(this, null, function*() { var s, a; if ((s = e.type) != null && s.startsWith("audio/") && this.editor && "openAudioDnDModal" in this.editor) this.editor.openAudioDnDModal(e); else if ((a = e.type) != null && a.startsWith("video/") && this.editor && "openVideoModal" in this.editor) this.editor.openVideoModal(e); else if (this.view) { const o = Ye.addFile(this.view, n, e), r = yield this.uploadFile(e).catch(i => this.handleUploadError(e, i)); if (r) { const i = this.schema; if (!i) { console.warn("no schema found for file upload"); return } const c = yield this.createFileNode({ schema: i, file: e, fileEntry: r }); c && Ye.replace(this.view, o, c) } } }) } processFiles(e, n) { return N(this, null, function*() { const s = yield this.getFilesToHandle(n), a = this.getInsertPos(e); return Promise.all(s.map(o => this.processFile(o, a != null ? a : void 0))) }) } fileSizeOK(e) { return e.size <= Qs ? !0 : (e.error = new Error("File too large"), e.error.details = p("p", null, "We were unable to add ", p("b", null, e.name), " because it is larger than ", mr(Qs), ". Try reducing the file size and adding again."), !1) } shouldHandleFile(e) { return N(this, null, function*() { var n, s; return (n = e.type) != null && n.startsWith("audio/") || (s = e.type) != null && s.startsWith("video/") ? !0 : this.fileSizeOK(e) ? (yield So({ file: e })) ? !0 : (this.addUnsupportedTypeError(e), !1) : !1 }) } canHandleFile(e, n) { return N(this, null, function*() { return ["development", "test"].includes("production") || this.filesEnabled ? !!(yield So({ file: n })) : !1 }) } addUnsupportedTypeError(e) { e.error = new Error("Unsupported file type"), e.error.details = p("p", null, "We were unable to add ", p("b", null, e.name), " because it is a type of file we don't support yet. Try adding a", " ", this.getSupportedTypesString(), " file instead.") } getSupportedTypesString() { const e = fee().map(s => { const a = Pd.extension(s); return a ? a.toUpperCase() : null }); e.push("CBZ"), e.push("KFX"), e.push("KPF"); const n = br(Du(e)); return n.push(`or ${n.pop()}`), n.join(", ") } createFileNode(a) { return N(this, arguments, function*({ file: e, fileEntry: n, schema: s }) { const o = yield So({ file: e }); if (!o) return; const r = s.nodes[o]; if (!r) { console.warn(`no file node found in schema for matching node name [${o}]`); return } return r.create(n) }) } canReplaceFile(s) { return N(this, arguments, function*({ node: e, file: n }) { return this.fileSizeOK(n) ? (yield this.canHandleFile(e, n)) ? !0 : (this.addUnsupportedTypeError(n), !1) : !1 }) } replaceFile(e, n) { return N(this, null, function*() { if (!(yield this.canReplaceFile(n))) { this.dispatchAlerts([n.file]); return } n.node.startReplacing(); const s = yield this.uploadFile(n.file).catch(a => this.handleUploadError(n.file, a)); s.dirty = !0, s.thumbnail = n.node.attrs.thumbnail, s.title = n.node.attrs.title, s.description = n.node.attrs.description, n.node.attrs = s, n.node.stopReplacing(s.error) }) } uploadFile(e) { return N(this, null, function*() { const n = yield this.xhrUpload(e), s = `${rt(this.pub)}/f/${n}`, a = `${rt(this.pub)}/api/v1/file/${n}`; return { filename: e.name, filetype: e.assignedType || e.type, filesize: e.size, title: Ro(e.name), href: s, raw_href: a, fileKey: n, dirty: !0 } }) } xhrUpload(e, n = () => ({})) { return N(this, null, function*() { var a; const s = yield he.post((a = this.post) != null && a.id ? `/api/v1/file/${this.post.id}` : "/api/v1/file/pub-files").send({ filename: e.name, filetype: e.assignedType || e.type, filesize: e.size, title: Ro(e.name) }); return new Promise((o, r) => { const { fileKey: i, url: c, fields: l } = s.body, u = new FormData; Object.keys(l).forEach(m => u.append(m, l[m])), u.append("file", e); const d = new XMLHttpRequest; d.open("POST", c), d.upload.addEventListener("progress", n), d.upload.addEventListener("load", () => { o(i) }), d.addEventListener("error", r), d.send(u) }) }) } } function Ro(t) { return eh(t.split(".")[0].split("_").join(" ").split("-").join(" ")) } function qre({ rootNode: t, node: e }) { let n = null; return t.descendants((s, a) => s === e ? (n = a, !1) : !0), n } const Fre = 48, jre = 1200, $re = 15; class Ure { constructor(e, { scrollParent: n, disableLargeSize: s, pub: a } = {}) { var m, f; this.onMouseDown = h => { !this.resizeButton || h.target !== this.resizeButton || (h.preventDefault(), this.dragging = !0, jl(this.resizeContainer, "resizing"), this.originalPageX = h.pageX) }, this.onMouseMove = h => { !this.dragging || Ue(this.originalPageX) || this.setBoxSize((h.pageX - this.originalPageX) * 2) }, this.onMouseUp = () => { if (!this.dragging || !this.resizeBox || (this.dragging = !1, !this.resizeBox)) return; const h = this.getMaxImageWidth(), g = Math.min(Math.max(parseInt(this.resizeBox.style.width), this.getMinImageWidth()), h), b = g >= h ? null : g; this.resizeBox && (this.resizeBox.style.width = "", this.resizeBox.style.height = "", this.resizeBox.style.marginLeft = ""), pr(this.resizeContainer, "resizing"), this.imageNode && !Ue(this.imageNodePos) && this.imageNode.attrs.resizeWidth !== b && (this.view.dispatch(this.view.state.tr.setNodeMarkup(this.imageNodePos, this.imageNode.type, Object.assign({}, this.imageNode.attrs, { resizeWidth: b }), this.imageNode.marks)), this.update(this.view)) }, this.setSize = (h, g = "normal") => { h.preventDefault(), h.stopPropagation(); const { view: b } = this; if (Ue(this.imageNodePos)) { console.warn("this.imageNodePos isNil, cannot set size"); return } if (!this.imageNode) { console.warn("this.imageNode missing, cannot set size"); return } if (!this.resizeContainer) { console.warn("this.resizeContainer missing, cannot set size"); return } b.dispatch(b.state.tr.setNodeMarkup(this.imageNodePos, null, P(S({}, this.imageNode.attrs), { fullscreen: !1, imageSize: g, resizeWidth: g === "normal" ? Math.min(this.imageNode.attrs.width, this.resizeContainer.getBoundingClientRect().width) : g === "large" ? jre : null }))) }, this.onAltTextClick = h => { h.preventDefault(), h.stopPropagation(); const { view: g } = this; if (Ue(this.imageNode)) { console.warn("this.imageNodePos is missing, cannot edit alt text"); return } const b = { parent: "Edit alt text", position: (x, v) => { v.style.right = "28px", v.style.left = "unset", x.style.top = "36px", x.style.right = "-28px" }, root: this.altTextAnchor, fields: { alt: new Va({ label: "Alt text:", value: this.imageNode.attrs.alt || "", required: !1 }) }, title: "New alt text...", value: this.imageNode.attrs.alt || "", onClose: this.closeActionsList, onSubmit: ({ alt: x }) => { if (x) { if (Ue(this.imageNode)) { console.warn("this.imageNode is missing, cannot edit alt text"); return } if (Ue(this.imageNodePos)) { console.warn("this.imageNodePos is missing, cannot edit alt text"); return } g.dispatch(g.state.tr.setNodeMarkup(this.imageNodePos, null, P(S({}, this.imageNode.attrs), { alt: x }))) } } }; ma(b) }, this.onWatermarkClick = h => { h.preventDefault(), h.stopPropagation(); const { view: g } = this; if (Ue(this.imageNodePos)) { console.warn("this.imageNodePos is missing, cannot add watermark"); return } if (Ue(this.imageNode)) { console.warn("this.imageNode is missing, cannot add watermark"); return } this.imageNode.attrs.srcNoWatermark ? (se(ae.REMOVE_WATERMARK_CLICKED), g.dispatch(g.state.tr.setNodeMarkup(this.imageNodePos, null, P(S({}, this.imageNode.attrs), { src: this.imageNode.attrs.srcNoWatermark, srcNoWatermark: null })))) : (se(ae.ADD_WATERMARK_CLICKED), g.dispatchEvent({ type: "image_watermark", node: this.imageNode, pos: this.imageNodePos, view: g })) }, this.onCaptionImageClick = h => { h.preventDefault(), h.stopPropagation(); const { view: g } = this; if (Ue(this.imageNodePos)) { console.warn("this.imageNodePos is missing, cannot add caption"); return } const b = g.state.tr, x = b.doc.resolve(this.imageNodePos).node(); let v; x.forEach(E => { if (E.type === g.state.schema.nodes.caption) return v = E, !1 }), (!v || v.type !== g.state.schema.nodes.caption) && (v = g.state.schema.nodes.caption.create(null, g.state.schema.text("caption...")), b.insert(this.imageNodePos + 1, v)); const w = b.doc.resolve(this.imageNodePos + 2); b.setSelection(Ee.create(b.doc, w.start(), w.end())), g.dispatch(b), g.focus(), this.closeActionsList() }, this.deleteImage = h => { h.stopPropagation(), this.view.dispatch(this.view.state.tr.deleteSelection()), this.update(this.view) }, this.isSelectableImageNode = h => h && h.type === this.view.state.schema.nodes.image2 && h.attrs.width && h.attrs.height, this.handleDotMenuClick = h => { var g; h.preventDefault(), h.stopPropagation(), (g = this.actionsList) != null && g.classList.contains("open") ? this.closeActionsList() : this.openActionsList() }, this.openActionsList = () => { var h; (h = this.actionsList) == null || h.classList.add("open") }, this.closeActionsList = () => { var h; (h = this.actionsList) == null || h.classList.remove("open") }, this.dragging = !1, this.view = e, this.resizeContainer = document.createElement("div"), this.resizeContainer.className = "image-resize-container", this.resizeBox = document.createElement("div"), this.resizeBox.className = "image-resize-box", this.resizeContainer.appendChild(this.resizeBox), this.resizeButton = document.createElement("div"), this.resizeButton.className = "image-resize-button", this.resizeBox.appendChild(this.resizeButton); const o = document.createElement("div"); o.className = "image-dot-menu-button", this.resizeBox.appendChild(o), this.actionsList = document.createElement("div"), this.actionsList.classList.add("image-actions-list"); const r = document.createElement("div"); r.className = "image-action", r.innerText = "Delete image"; const i = document.createElement("div"); i.className = "image-action", i.innerText = "Edit caption"; const c = document.createElement("div"); c.className = "image-action", c.innerText = "Edit alt text", this.altTextAnchor = document.createElement("div"), this.altTextAnchor.title = "Edit alt text", this.altTextAnchor.className = "image-action-prompt-anchor", c.appendChild(this.altTextAnchor), this.actionsList.appendChild(r), this.actionsList.appendChild(i), this.actionsList.appendChild(c), a != null && a.logo_url && (this.watermarkButton = document.createElement("div"), this.watermarkButton.className = "image-action", this.watermarkButton.innerText = "Add watermark", this.watermarkAnchor = document.createElement("div"), this.watermarkAnchor.title = "Add watermark", this.watermarkAnchor.className = "image-action-prompt-anchor", this.watermarkButton.appendChild(this.watermarkAnchor), this.actionsList.appendChild(this.watermarkButton)); const l = document.createElement("div"); l.className = "image-action set-normal", l.innerText = "Set normal size", this.normalSizeAnchor = document.createElement("div"), this.normalSizeAnchor.title = "Set normal size", this.normalSizeAnchor.className = "image-action-prompt-anchor", l.appendChild(this.normalSizeAnchor), this.actionsList.appendChild(l); let u, d; s || (u = document.createElement("div"), u.className = "image-action set-large", u.innerText = "Set large size", this.largeSizeAnchor = document.createElement("div"), this.largeSizeAnchor.title = "Set large size", this.largeSizeAnchor.className = "image-action-prompt-anchor", u.appendChild(this.largeSizeAnchor), this.actionsList.appendChild(u), d = document.createElement("div"), d.className = "image-action set-full", d.innerText = "Set full width", this.fullbleedAnchor = document.createElement("div"), this.fullbleedAnchor.title = "Set full width", this.fullbleedAnchor.className = "image-action-prompt-anchor", d.appendChild(this.fullbleedAnchor), this.actionsList.appendChild(d)), o.appendChild(this.actionsList), this.dotMenuButton = o, this.scrollParent = n && document.querySelector && document.querySelector(n) || typeof window != "undefined" && window || null, typeof window != "undefined" && (document.addEventListener("click", this.closeActionsList, !1), r.addEventListener("click", this.deleteImage, !1), o.addEventListener("click", this.handleDotMenuClick, !1), i.addEventListener("click", this.onCaptionImageClick, !1), c.addEventListener("click", this.onAltTextClick, !1), (m = this.watermarkButton) == null || m.addEventListener("click", this.onWatermarkClick, !1), l.addEventListener("click", h => this.setSize(h, "normal"), !1), s || (u.addEventListener("click", h => this.setSize(h, "large"), !1), d.addEventListener("click", h => this.setSize(h, "full"), !1)), window.addEventListener("mousedown", this.onMouseDown, !1), window.addEventListener("mousemove", this.onMouseMove, !1), window.addEventListener("mouseup", this.onMouseUp, !1), this._update = () => { this.update(e) }, window.addEventListener("resize", this._update, !1), (f = this.scrollParent) == null || f.addEventListener("scroll", this._update, { passive: !0 }), window.addEventListener("scroll", this._update, { passive: !0 })), this.update(e) } destroy() { var e, n; this.dragging = !1, document.removeEventListener("click", this.closeActionsList, !1), window.removeEventListener("mousedown", this.onMouseDown, !1), window.removeEventListener("mousemove", this.onMouseMove, !1), window.removeEventListener("mouseup", this.onMouseUp, !1), this._update && (window.removeEventListener("resize", this._update, !1), (e = this.scrollParent) == null || e.removeEventListener("scroll", this._update), window.removeEventListener("scroll", this._update), this._update = null), (n = this.resizeContainer) != null && n.parentNode && this.resizeContainer.parentNode.removeChild(this.resizeContainer), this.resizeContainer = null, this.resizeBox = null, this.resizeButton = null, this.actionsList = null, this.altTextAnchor = null } update(e, n) { var o, r, i, c; if (n && n.doc.eq(e.state.doc) && n.selection.eq(e.state.selection) || !e.state.selection) return; let s; const a = e.state.selection; if (a.empty || !(a instanceof Je)) { (o = this.resizeContainer) != null && o.parentNode && this.resizeContainer.parentNode.removeChild(this.resizeContainer); return } if (!["image2", "captionedImage"].includes(a.node.type.name)) { (r = this.resizeContainer) != null && r.parentNode && this.resizeContainer.parentNode.removeChild(this.resizeContainer); return } if (a.node.type.name === "captionedImage" ? a.node.descendants(l => { if (l.type.name === "image2") return s = l, !1 }) : a.node.type.name === "image2" && (s = a.node), s) { const l = qre({ rootNode: e.state.doc, node: s }); l !== null && (this.imageNodePos = l) } if (this.imageNode && this.imageNode !== s && this.onMouseUp(), this.imageNode = s, s && this.imageNodePos) { const l = this.getParentRect(), u = e.coordsAtPos(this.imageNodePos), d = e.coordsAtPos(this.imageNodePos + 1), m = this.getImageSize(); this.resizeContainer && (this.resizeContainer.style.top = `${u.top-l.top}px`, this.resizeContainer.style.left = `${u.left-l.left}px`, this.resizeContainer.style.height = `${d.top-u.top}px`, this.resizeContainer.style.width = `${u.right-u.left}px`, this.resizeContainer.className = fe("image-resize-container", { "sizing-normal": m === "normal", "sizing-large": m === "large", "sizing-full": m === "full" })), this.resizeButton && (this.resizeButton.style.display = ""), this.dotMenuButton.style.top = "", this.dotMenuButton.style.right = "", s.attrs.type === "image/webp" && this.watermarkButton ? this.watermarkButton.style.display = "none" : this.watermarkButton && (this.watermarkButton.style.display = "", this.watermarkButton.innerText = s.attrs.srcNoWatermark ? "Remove watermark" : "Add watermark", this.watermarkAnchor && (this.watermarkAnchor.title = s.attrs.srcNoWatermark ? "Remove watermark" : "Add watermark")), this.resizeContainer && ((i = e.dom.parentNode) == null || i.appendChild(this.resizeContainer)), this.setBoxSize() } else(c = this.resizeContainer) != null && c.parentNode && this.resizeContainer.parentNode.removeChild(this.resizeContainer) } getParentRect() { var e; return (((e = this.resizeContainer) == null ? void 0 : e.offsetParent) || document.body).getBoundingClientRect() } getImageSize() { var e, n; return (e = this.imageNode) != null && e.attrs.fullscreen ? "full" : ((n = this.imageNode) == null ? void 0 : n.attrs.imageSize) || "normal" } getMinImageWidth() { var e, n; return Math.min(...[(e = this.imageNode) == null ? void 0 : e.attrs.resizeWidth, (n = this.imageNode) == null ? void 0 : n.attrs.width, Fre].filter(s => s)) } getMaxImageWidth() { const e = this.getImageSize(), { clientWidth: n } = document.documentElement; return e === "full" ? n : e === "large" || !this.resizeContainer ? n - $re * 2 : this.resizeContainer.getBoundingClientRect().width } setBoxSize(e = 0) { if (!this.imageNode || !this.resizeBox) return; const n = this.imageNode.attrs.width / this.imageNode.attrs.height, s = this.getImageSize(), a = this.getMaxImageWidth(), o = s === "full" ? a : Math.min(this.imageNode.attrs.resizeWidth || this.imageNode.attrs.width, a), r = Math.min(Math.max(o + e, this.getMinImageWidth()), a), i = r / n; this.resizeBox.style.width = `${r}px`, this.resizeBox.style.height = `${i}px`, this.resizeBox.style.marginLeft = `${-r/2}px` } } function Vre(t = {}) { return new _t({ view: e => new Ure(e, t) }) } const Hre = t => { const e = t.nodes.horizontal_rule || t.nodes.horizontalRule; return new Ve(/^\u2014-$/, (n, s, a, o) => n.tr.replaceWith(a, o, e.create())) }, Gre = t => nr(/^(\d+)[.)]\s$/, t.nodes.ordered_list || t.nodes.orderedList, e => t.nodes.orderedList ? { start: Number(e[1]) } : { order: Number(e[1]) }, (e, n) => n.type === t.nodes.orderedList ? n.childCount + n.attrs.start === Number(e[1]) : n.childCount + n.attrs.order === Number(e[1])), Wre = new Ve(/\(c\)$/, "©"), Jre = new Ve(/->$/, "→"), Yre = new Ve(/<-$/, "←"), Kre = new Ve(/>>$/, "»"), Xre = new Ve(/<<$/, "«"); function Zre(t) { return LZ({ rules: [...$Z, BZ, PZ, Wre, Jre, Yre, Kre, Xre, Hre(t), Gre(t), nr(/^\s*>\s$/, t.nodes.blockquote), nr(/^[-*]\s$/, t.nodes.bullet_list || t.nodes.bulletList), ol(/^```$/, t.nodes.code_block || t.nodes.codeBlock), ol(new RegExp("^(#{1,6})\\s$"), t.nodes.heading, e => ({ level: e[1].length }))] }) } class Qre { constructor(e, { scrollParent: n } = {}) { var o; this.tooltip = document.createElement("div"), this.tooltip.className = "link-tooltip", this.head = document.createElement("span"), this.head.className = "head", this.tooltip.appendChild(this.head), this.link = document.createElement("a"), this.link.className = "link", this.link.target = "_blank", this.link.href = "#", this.link.addEventListener("mousedown", r => { Bi() && (r.preventDefault(), r.stopPropagation()), this.openLink() }, !1), this.link.addEventListener("click", r => { Bi() ? (r.preventDefault(), r.stopPropagation()) : this.openLink() }, !1), this.tooltip.appendChild(this.link); const s = document.createElement("span"); s.textContent = " – ", s.className = "separator", this.tooltip.appendChild(s); const a = document.createElement("span"); a.className = "buttons", this.tooltip.appendChild(a), this.change = document.createElement("a"), this.change.textContent = "Change", this.change.className = "change", this.change.href = "#", this.change.addEventListener("mousedown", r => this.onChangeClicked(r), !1), this.change.addEventListener("click", r => this.onChangeClicked(r), !1), a.appendChild(this.change), a.appendChild(document.createTextNode(" | ")), this.remove = document.createElement("a"), this.remove.textContent = "Remove", this.remove.className = "remove", this.remove.href = "#", this.remove.addEventListener("mousedown", r => this.onRemoveClicked(r), !1), this.remove.addEventListener("click", r => this.onRemoveClicked(r), !1), a.appendChild(this.remove), this.view = e, this.view.dom.parentNode || console.warn("EditorView.dom does not have parentNode in link tooltip plugin"), (o = this.view.dom.parentNode) == null || o.appendChild(this.tooltip), this.markType = this.view.state.schema.marks.link, this.scrollParent = n && document.querySelector && document.querySelector(n) || window, typeof window != "undefined" && (this._update = () => this.update(this.view), window.addEventListener("resize", this._update, !1), this.scrollParent.addEventListener("scroll", this._update, !1), this.view.dom.addEventListener("focus", this._update, !1), this.view.dom.addEventListener("blur", this._update, !1)), this.update(e, null) } destroy() { this._update && (window.removeEventListener("resize", this._update, !1), this.scrollParent.removeEventListener("scroll", this._update, !1), this.view.dom.removeEventListener("focus", this._update, !1), this.view.dom.removeEventListener("blur", this._update, !1), this._update = null), this.tooltip.parentNode && this.tooltip.parentNode.removeChild(this.tooltip) } update(e, n) { if (n && n.doc.eq(e.state.doc) && n.selection.eq(e.state.selection)) return; const a = th(this.view.dom, this.tooltip) && this.getActiveLink(); if (!a) { this.tooltip.style.display = "none"; return } if (!a.pos) { console.warn("cannot find pos for link", a); return } this.tooltip.style.display = "block", this.link.textContent = a.href, this.link.href = a.href, Yp(e, a.pos, this.tooltip, this.head) } getActiveLink() { var e; if (er(this.view.state, [this.view.state.schema.nodes.image2, this.view.state.schema.nodes.image3])) { if (da(this.view.state)) return { image: !0, pos: this.view.state.selection, href: da(this.view.state) } } else { const n = Qo(this.view.state, this.markType); if (n) return { image: !1, pos: n.pos, href: (e = n.mark) == null ? void 0 : e.attrs.href } } } openLink() { this.link.href && (this.link.href.endsWith("%%") || window.open(this.link.href, "_blank")) } onChangeClicked(e) { e.preventDefault(), e.stopPropagation(), this.getActiveLink() && mQ(this.view, "Mod-k") } onRemoveClicked(e) { e.preventDefault(), e.stopPropagation(); const n = this.getActiveLink(); if (!n) return; const s = this.view.state.tr; if (n.image) Jp(this.view.state, s, null); else { if (!n.pos) return; s.removeMark(n.pos.from, n.pos.to, this.markType), s.setSelection(Ee.create(s.doc, n.pos.from, n.pos.to)) } this.view.dispatch(s), this.view.focus() } } function eie(t = {}) { return new _t({ view(e) { return new Qre(e, t) } }) } let tie = 0; function nie(t, e) { const n = `atom${++tie}`, s = { toString: () => n }; return typeof t == "function" ? s.read = t : (s.init = t, s.read = function(a) { return a(this) }, s.write = function(a, o, r) { return o(this, typeof r == "function" ? r(a(this)) : r) }), e && (s.write = e), s } const Nl = t => "init" in t, Ml = t => !!t.write, xa = new WeakMap, sie = (t, e) => { xa.set(t, e), t.catch(() => {}).finally(() => xa.delete(t)) }, Ol = (t, e) => { const n = xa.get(t); n && (xa.delete(t), n(e)) }, Ll = (t, e) => { t.status = "fulfilled", t.value = e }, Rl = (t, e) => { t.status = "rejected", t.reason = e }, aie = t => typeof(t == null ? void 0 : t.then) == "function", Gn = (t, e) => !!t && "v" in t && "v" in e && Object.is(t.v, e.v), Pl = (t, e) => !!t && "e" in t && "e" in e && Object.is(t.e, e.e), dn = t => !!t && "v" in t && t.v instanceof Promise, oie = (t, e) => "v" in t && "v" in e && t.v.orig && t.v.orig === e.v.orig, Us = t => { if ("e" in t) throw t.e; return t.v }, rie = () => { const t = new WeakMap, e = new WeakMap, n = new Map; let s, a; const o = y => t.get(y), r = (y, T) => { const D = t.get(y); if (t.set(y, T), n.has(y) || n.set(y, D), dn(D)) { const C = "v" in T ? T.v instanceof Promise ? T.v : Promise.resolve(T.v) : Promise.reject(T.e); D.v !== C && Ol(D.v, C) } }, i = (y, T, D) => { const C = new Map; let L = !1; D.forEach((R, A) => { !R && A === y && (R = T), R && (C.set(A, R), T.d.get(A) !== R && (L = !0)) }), (L || T.d.size !== C.size) && (T.d = C) }, c = (y, T, D) => { const C = o(y), L = { d: (C == null ? void 0 : C.d) || new Map, v: T }; if (D && i(y, L, D), Gn(C, L) && C.d === L.d) return C; if (dn(C) && dn(L) && oie(C, L)) { if (C.d === L.d) return C; L.v = C.v } return r(y, L), L }, l = (y, T, D, C) => { if (aie(T)) { let L; const R = () => { const I = o(y); if (!dn(I) || I.v !== A) return; const O = c(y, A, D); e.has(y) && I.d !== O.d && _(y, O, I.d) }, A = new Promise((I, O) => { let B = !1; T.then(j => { B || (B = !0, Ll(A, j), I(j), R()) }, j => { B || (B = !0, Rl(A, j), O(j), R()) }), L = j => { B || (B = !0, j.then(G => Ll(A, G), G => Rl(A, G)), I(j)) } }); return A.orig = T, A.status = "pending", sie(A, I => { I && L(I), C == null || C() }), c(y, A, D) } return c(y, T, D) }, u = (y, T, D) => { const C = o(y), L = { d: (C == null ? void 0 : C.d) || new Map, e: T }; return D && i(y, L, D), Pl(C, L) && C.d === L.d ? C : (r(y, L), L) }, d = (y, T) => { const D = o(y); if (!T && D && (e.has(y) || Array.from(D.d).every(([B, j]) => { if (B === y) return !0; const G = d(B); return G === j || Gn(G, j) }))) return D; const C = new Map; let L = !0; const R = B => { if (B === y) { const G = o(B); if (G) return C.set(B, G), Us(G); if (Nl(B)) return C.set(B, void 0), B.init; throw new Error("no atom init") } const j = d(B); return C.set(B, j), Us(j) }; let A, I; const O = { get signal() { return A || (A = new AbortController), A.signal }, get setSelf() { return !I && Ml(y) && (I = (...B) => { if (!L) return v(y, ...B) }), I } }; try { const B = y.read(R, O); return l(y, B, C, () => A == null ? void 0 : A.abort()) } catch (B) { return u(y, B, C) } finally { L = !1 } }, m = y => Us(d(y)), f = y => { let T = e.get(y); return T || (T = w(y)), T }, h = (y, T) => !T.l.size && (!T.t.size || T.t.size === 1 && T.t.has(y)), g = y => { const T = e.get(y); T && h(y, T) && E(y) }, b = y => { const T = new Map, D = new WeakMap, C = A => { var I; const O = new Set((I = e.get(A)) == null ? void 0 : I.t); return n.forEach((B, j) => { var G; (G = o(j)) != null && G.d.has(A) && O.add(j) }), O }, L = A => { C(A).forEach(I => { I !== A && (T.set(I, (T.get(I) || new Set).add(A)), D.set(I, (D.get(I) || 0) + 1), L(I)) }) }; L(y); const R = A => { C(A).forEach(I => { var O; if (I !== A) { let B = D.get(I); if (B && D.set(I, --B), !B) { let j = !!((O = T.get(I)) != null && O.size); if (j) { const G = o(I), ke = d(I, !0); j = !Gn(G, ke) } j || T.forEach(G => G.delete(I)) } R(I) } }) }; R(y) }, x = (y, ...T) => { let D = !0; const C = A => Us(d(A)), L = (A, ...I) => { let O; if (A === y) { if (!Nl(A)) throw new Error("atom not writable"); const B = o(A), j = l(A, I[0]); Gn(B, j) || b(A) } else O = x(A, ...I); if (!D) { const B = k() } return O }, R = y.write(C, L, ...T); return D = !1, R }, v = (y, ...T) => { const D = x(y, ...T), C = k(); return D }, w = (y, T, D) => { var C; const L = D || []; (C = o(y)) == null || C.d.forEach((A, I) => { const O = e.get(I); O ? O.t.add(y) : I !== y && w(I, y, L) }), d(y); const R = { t: new Set(T && [T]), l: new Set }; if (e.set(y, R), Ml(y) && y.onMount) { const { onMount: A } = y; L.push(() => { const I = A((...O) => v(y, ...O)); I && (R.u = I) }) } return D || L.forEach(A => A()), R }, E = y => { var T; const D = (T = e.get(y)) == null ? void 0 : T.u; D && D(), e.delete(y); const C = o(y); C && (dn(C) && Ol(C.v), C.d.forEach((L, R) => { if (R !== y) { const A = e.get(R); A && (A.t.delete(y), h(R, A) && E(R)) } })) }, _ = (y, T, D) => { const C = new Set(T.d.keys()); D == null || D.forEach((L, R) => { if (C.has(R)) { C.delete(R); return } const A = e.get(R); A && (A.t.delete(y), h(R, A) && E(R)) }), C.forEach(L => { const R = e.get(L); R ? R.t.add(y) : e.has(y) && w(L, y) }) }, k = () => { let y; for (; n.size;) { const T = Array.from(n); n.clear(), T.forEach(([D, C]) => { const L = o(D); if (L) { const R = e.get(D); R && L.d !== (C == null ? void 0 : C.d) && _(D, L, C == null ? void 0 : C.d), R && !(!dn(C) && (Gn(C, L) || Pl(C, L))) && R.l.forEach(A => A()) } }) } }; return { get: m, set: v, sub: (y, T) => { const D = f(y), C = k(), L = D.l; return L.add(T), () => { L.delete(T), g(y) } } } }; let Po; const iie = () => (Po || (Po = rie()), Po), cie = In(void 0), lie = t => { const e = Nt(cie); return (t == null ? void 0 : t.store) || e || iie() }; ge.use; function uie(t, e) { const n = lie(e); return we((...a) => n.set(t, ...a), [n, t]) } const pie = t => p(vr, P(S({}, t), { name: "RecommendThinIcon", svgParams: { height: 12, width: 12, viewBox: "0 0 12 12", stroke: "none" } }), p("circle", { cx: "6", cy: "6", r: "4", stroke: "none" })), die = "_clickable_1i51m_1", mie = "_bg_secondary_1i51m_5", fie = "_bg_primary_1i51m_13", hie = "_text_secondary_1i51m_26", Wn = { clickable: die, bg_secondary: mie, "bg_secondary-themed": "_bg_secondary-themed_1i51m_9", bg_primary: fie, text_secondary: hie, "text_pub-secondary-text": "_text_pub-secondary-text_1i51m_29" }, cf = u => { var d = u, { icon: t, text: e, textColor: n = "secondary", bgColor: s = "secondary", paddingX: a = 24, paddingY: o = 24, border: r, className: i, onClick: c } = d, l = st(d, ["icon", "text", "textColor", "bgColor", "paddingX", "paddingY", "border", "className", "onClick"]); return p(xe, S({ sizing: "border-box", alignItems: "center", justifyContent: "center", paddingX: a, paddingY: o, radius: "md", border: r, className: fe(i, Wn.placeholder, Wn[`bg_${s}`], Wn[`text_${n}`], { [Wn.clickable]: !!c }), onClick: c }, l), p(Y, { gap: 8, alignItems: "center" }, t, p(X.B4, { color: n, className: Wn.text, weight: "bold" }, e))) }, gie = "_progressBar_3ipsz_1", bie = "_progressBarValue_3ipsz_8", Bl = { progressBar: gie, progressBarValue: bie }, vie = { green: "var(--color-data-green)", "primary-themed": "var(--color-primary-themed)" }, xie = { green: "var(--color-light-bg-tertiary)", "primary-themed": "var(--color-bg-tertiary-themed)" }, yie = ({ color: t = "green", forcePercentage: e, value: n, width: s = 147 }) => { const o = (n < 1 && !e ? n : n / 100) * s; return p("div", { style: { width: `${s}px` } }, p("div", { className: Bl.progressBar, style: { backgroundColor: xie[t] } }), p("div", { className: Bl.progressBarValue, style: { width: `${o}px`, backgroundColor: vie[t] } })) }, wie = ({ mediaUpload: t, active: e, onOpenSettings: n, onRemoveMedia: s, onDownloadMedia: a, onThumbnailUpdated: o }) => { const { iString: r } = ue(), i = t.thumbnail_id > 1 ? Zs(t) : null, [c, l] = z(), [u, d] = z(!i), [m, f] = z(!1), h = J(null), g = () => N(void 0, null, function*() { var E, _; if (!((_ = (E = h == null ? void 0 : h.current) == null ? void 0 : E.files) != null && _.length)) return; const w = h.current.files[0]; f(!0), yield b(w), f(!1) }), b = w => N(void 0, null, function*() { const E = Math.round(new Date().getTime() / 1e3); se(ae.EDITOR_MEDIA_SET_THUMBNAIL_UPLOAD_IMAGE_CLICKED, { media_upload_id: t.id, post_id: t.post_id }); try { const _ = { thumbnail_id: E, custom_thumbnail: !0 }; yield he.put(`/api/v1/video/upload/${t.id}/thumbnail_id`).send(_); const k = yield he.post(`/api/v1/video/upload/${t.id}/thumbnail_upload_url`).query({ fileType: w.type, fileSize: w.size, thumbnail_id: E }), M = k.body.thumbnail_upload_url; yield he.put(M).set("content-type", w.type).send(w), Ks(Zs(k.body.mediaUpload)), o(P(S({}, k.body.mediaUpload), { updated_at: new Date })), d(!1) } catch (_) { console.error(_); return } }), x = () => N(void 0, null, function*() { try { const w = { thumbnail_id: 0, custom_thumbnail: !0 }; yield he.put(`/api/v1/video/upload/${t.id}/thumbnail_id`).send(w), o(P(S({}, t), { thumbnail_id: 0, updated_at: new Date })), d(!0) } catch (w) { console.error(w); return } }), v = () => { d(!0) }; return e ? p("div", { className: hn.verticalMenu }, p(Y, { gap: 8, alignItems: "end" }, (!c || c === "settings") && p(fn, { label: r("Open Settings") }, p(mn, { rounded: !0, onClick: n }, p(Ng, { size: 16 }))), (!c || c === "preview") && p(fn, { label: r("Free preview") }, p(mn, { rounded: !0, onClick: n }, p(Mg, { size: 16 }))), !c && p(fn, { label: r("Download") }, p(mn, { rounded: !0, onClick: () => { se(ae.EDITOR_MEDIA_DOWNLOAD_CLICKED, { media_upload_id: t.id, post_id: t.post_id }), a() } }, p(Mu, { size: 16 }))), (!c || c === "thumbnail") && p(fn, { label: r("Background image") }, p(Mt, { layerOptions: { placement: "bottom-end" }, onClose: () => l(void 0), onOpen: () => l("thumbnail"), trigger: p(mn, { rounded: !0 }, p(Ho, { size: 16 })) }, p(Y, { gap: 8, padding: 8, justifyContent: "center" }, m ? p(ne, { className: hn.loadingPlaceholder, justifyContent: "center", alignItems: "center" }, p(Sn, null)) : u ? p(ne, { className: hn.thumbnailPicture, justifyContent: "center", alignItems: "center", bg: "secondary", radius: "sm" }, p(Ho, { size: 24, color: "gray" })) : p("img", { className: hn.thumbnailPicture, src: i != null ? i : void 0, onError: v }), p(be, null, p(ta, { priority: "secondary", disabled: m }, "Upload image", p("input", { type: "file", accept: "image/*", className: hn.customThumbnailInput, onChange: () => g(), ref: h })), p(ta, { priority: "destructive", disabled: m, onClick: x }, "Remove image"))))), !c && p(fn, { label: r("Remove media") }, p(mn, { rounded: !0, onClick: s }, p(Su, { size: 16 }))))) : null }, kie = ({ onRemoveMedia: t }) => { const { iString: e } = ue(); return p("div", { className: hn.verticalMenu }, p(Y, { gap: 8, alignItems: "end" }, p(fn, { label: e("Remove media") }, p(mn, { rounded: !0, onClick: t }, p(Su, { size: 16 }))))) }, _ie = "_container_qlonu_1", Cie = "_placeholder_qlonu_7", Eie = "_placeholderAudio_qlonu_18", Aie = "_editorPodcast_qlonu_26", Sie = "_editorPodcastPlayerTab_qlonu_30", Tie = "_editorPodcastPlayerTabSelected_qlonu_40", Die = "_hidden_qlonu_50", Iie = "_videoPortal_qlonu_54", Nie = "_filePicker_qlonu_59", Mie = "_videoPlayer_qlonu_65", ht = { container: _ie, placeholder: Cie, placeholderAudio: Eie, editorPodcast: Aie, editorPodcastPlayerTab: Sie, editorPodcastPlayerTabSelected: Tie, hidden: Die, videoPortal: Iie, filePicker: Nie, videoPlayer: Mie }, ir = 600, lf = nie(!1); lf.debugLabel = "videoRecorderOpenAtom"; const Oie = ({ onOpenDrawer: t, mediaUpload: e, audioExtractMediaUpload: n, audioExtractPreviewMediaUpload: s, onChange: a, onAudioExtractChange: o, isDrawerOpen: r, pub: i, postId: c, mediaType: l }) => { const { getConfigFor: u } = ou(), d = !!u("clip_focused_video_upload_flow") && l === "video"; return p(be, null, (e.state === "uploaded" || (n == null ? void 0 : n.state) === "uploaded") && !r && p("div", { className: ht.hidden }, l === "audio" ? p(ri, { initialFile: null, pub: i, feature: An.Podcast, mediaUpload: e, mediaUploadId: e.id, onChange: ({ mediaUpload: m }) => { m && a({ mediaUpload: m }) }, mediaType: "audio", postId: c, setPostId: null }) : p(Ta, { initialFile: null, pub: i, videoFeature: "podcast", mediaUpload: e, mediaUploadId: e.id, audioExtractMediaUpload: n, audioExtractMediaUploadId: n == null ? void 0 : n.id, audioExtractPreviewMediaUpload: s, audioExtractPreviewMediaUploadId: s == null ? void 0 : s.id, onChange: ({ mediaUpload: m }) => { m && a({ mediaUpload: m }) }, onAudioExtractChange: ({ mediaUpload: m }) => { m && o({ mediaUpload: m }) }, mediaType: "video", postId: c, onOpenDrawer: t, setPostId: null })), p(Y, { className: fe(ht.placeholder, { [ht.placeholderAudio]: l === "audio" }), gap: 8, onClick: r ? void 0 : () => { se(ae.PROCESSING_EPISODE_MEDIA_CLICKED, { type: l }), t() } }, d ? p(be, null, p(Qh, { multiply: !0, width: ir, height: 6 }), p(X.H4, { size: 14, color: "pub-secondary-text", weight: "semibold", translated: !0 }, "Processing...")) : p(X.H4, { size: 14, color: "pub-secondary-text", weight: "semibold", translated: !0 }, "Processing..."))) }, Lie = ({ free_podcast_url: t, pub: e, postId: n, postTitle: s, sectionId: a, podcastUpload: o, podcastPreviewUpload: r, podcast_url: i, podcast_duration: c, uploading: l, onOpenDrawer: u, isDrawerOpen: d, onRemovePodcast: m, onRemoveLegacyPodcast: f, onRemoveVideoPodcast: h, onPodcastUploadChanged: g, onPodcastPreviewUploadChanged: b, onSelectFile: x, onVideoPodcastUploadChanged: v, mediaType: w }) => { var me; const { iString: E } = ue(), { getConfigFor: _ } = ou(), k = !!_("clip_focused_video_upload_flow"), { uploadProgress: M, videoUpload: y } = pg(), T = J(null), [D] = z("paid"), [C, L] = z(null), R = D === "free" ? null : i, A = !!R && !o && !(o != null && o.id), I = D === "free" ? r == null ? void 0 : r.id : o == null ? void 0 : o.id, O = o ? En(`/api/v1/audio/upload/${I}/src`) : R, B = uie(lf), j = _a(y), G = !!(o != null && o.id) || !!i, ke = !!(y != null && y.id), Re = !y && (o == null ? void 0 : o.state) === "uploaded", ve = !y && (r == null ? void 0 : r.state) === "uploaded", _e = ke && ((y == null ? void 0 : y.state) === "uploaded" || Re || ve), W = (me = e.sections.find(V => V.id === a)) != null ? me : null, le = (o == null ? void 0 : o.duration) || (r == null ? void 0 : r.duration) || c, { setIsPodcastDrawerOpen: K } = dg(), H = () => { y ? h({ skipConfirm: !1 }) : A ? f() : (m({ skipConfirm: !1 }), K({ isOpen: !1 })) }; return p("div", { className: ht.container }, Re || ve || _e ? p(Oie, { pub: e, postId: n, isDrawerOpen: d, onOpenDrawer: () => u({ mediaType: w }), mediaUpload: _e ? y : Re ? o : r, audioExtractMediaUpload: o, audioExtractPreviewMediaUpload: r, onChange: _e ? v : Re ? g : b, onAudioExtractChange: g, mediaType: w }) : l ? p(Y, { onClick: () => u({ mediaType: w }), className: fe(ht.placeholder, { [ht.placeholderAudio]: w === "audio" }), gap: 8 }, k && w === "video" ? p(be, null, p(yie, { color: "primary-themed", forcePercentage: !0, value: M != null ? M : 0, width: ir }), p(ne, { alignItems: "center", justifyContent: "space-between", style: { width: ir } }, p(X.Meta, { color: "pub-secondary-text", weight: "semibold", translated: !0 }, "Uploading..."), p(X.Meta, { color: "pub-secondary-text", weight: "semibold" }, M ? `${Math.floor(M)}%` : ""))) : p(X.H4, { size: 14, color: "pub-secondary-text", weight: "semibold", translated: !0 }, "Uploading...")) : !G && !ke ? p(Y, { flex: "grow", gap: 8 }, p(Aa, { flex: "grow" }, p(Nu, { className: ht.filePicker, dropCTA: "Drop audio/video file here", pickCTAHandler: V => p(ne, { paddingTop: 24, paddingBottom: 8, gap: 8 }, p(Mt, { trigger: p(Ae, { priority: "secondary", leftIcon: p(pie, { height: 20, fill: "#B6B6B6" }) }, E("Record")) }, ee.isSupported() && p(vn, { onClick: () => { u({ mediaType: "audio", skipToRecordStep: !0 }), se(ae.ADD_EPISODE_MEDIA_CLICKED, { method: "record", type: "audio" }) }, icon: p(Go, null) }, E("Record audio")), Ag.isSupported() && p(vn, { onClick: () => { var $; ($ = T.current) == null || $.open(), se(ae.ADD_EPISODE_MEDIA_CLICKED, { method: "record", type: "video" }) }, icon: p(Tu, null) }, E("Record video"))), p(Ae, { priority: "primary-theme", onClick: V }, E("Select file"))), onFileSelected: V => N(void 0, null, function*() { if (!(V.type.startsWith("audio") || V.type.startsWith("video"))) { L(E("Please upload a valid audio or video file.")); return } const He = V.type.startsWith("video"); x({ file: V, mediaType: He ? "video" : "audio" }), (!k || !He) && u({ mediaType: He ? "video" : "audio" }) }), acceptableTypes: `${Sg}, ${Tg}`, onDrop: V => se(ae.ADD_EPISODE_MEDIA_CLICKED, { method: "drop", type: V.type.startsWith("audio") ? "audio" : "video" }), onPick: V => se(ae.ADD_EPISODE_MEDIA_CLICKED, { method: "pick", type: V.type.startsWith("audio") ? "audio" : "video" }), info: E("For fastest uploading speed, use standard media formats under 20GB. Video files: 1080p/2K or smaller, MP4/H.264/AAC. Audio files: MP3, WAV, AAC.") }))) : !G && !ke ? p(cf, { className: ht.placeholder, onClick: () => { se(ae.ADD_EPISODE_MEDIA_CLICKED, { method: "open-drawer", type: "audio" }), u({ mediaType: "audio" }) }, bgColor: "secondary-themed", textColor: "pub-secondary-text", text: E("Add podcast"), icon: p(Go, { height: 24 }) }) : p(be, null, p("div", { className: fe(ht.editorPodcast) }, y ? p(Ta, { initialFile: null, pub: e, videoFeature: "podcast", mediaUpload: y, mediaUploadId: y.id, audioExtractMediaUpload: o, audioExtractMediaUploadId: o == null ? void 0 : o.id, audioExtractPreviewMediaUpload: r, audioExtractPreviewMediaUploadId: r == null ? void 0 : r.id, onChange: ({ mediaUpload: V }) => { V === null && (h({ skipConfirm: !0 }), K({ isOpen: !1 })), v({ mediaUpload: V }) }, onAudioExtractChange: g, onAudioExtractPreviewChange: ({ mediaUpload: V }) => { V && b({ mediaUpload: V }), V === null && b({ mediaUpload: null }) }, mediaType: "video", postId: n, onOpenDrawer: u, setVideoRecorderOpen: B, setPostId: null }) : p(mg, { audioFileUrl: O != null ? O : "", hasFreePodcastUrlSet: !!t, postTitle: s != null ? s : "", podcastDuration: le != null ? le : 0, pub: e, section: W, podcastUpload: o != null ? o : null, podcastPreviewUpload: r != null ? r : null, editComponent: !y && o ? p(wie, { mediaUpload: o, onOpenSettings: () => u({ mediaType: "audio" }), onRemoveMedia: H, onDownloadMedia: () => { ru(A ? O : O ? En(O, { download: !0 }) : void 0) }, onThumbnailUpdated: V => { g({ mediaUpload: P(S({}, V), { updated_at: new Date }) }) }, active: !0 }) : i ? p(kie, { onRemoveMedia: () => f() }) : null })), j && p(ms, { isOpen: !0, onClose: () => {} }, p(Sa, { includeClose: !1, title: E("Something went wrong...") }), p(fs, null, E("Unfortunately, there was a problem with your podcast file upload. We'll investigate, but in the meantime, please try again, and we apologize for the inconvenience")), p(ds, { includeDivider: !1, alignment: "default", primaryButton: p(Ae, { onClick: () => { h && h({ skipConfirm: !0 }) }, priority: "primary" }, E("Got it")) }))), p(Cg, { className: ht.videoPortal }, p(Eg, { ref: T, onVideoRecorded: V => { var $; ($ = T.current) == null || $.close(), x({ mediaType: "video", file: V }), k || u({ mediaType: "video", file: V }) }, onOpen: () => B(!0), onClose: () => B(!1), videoFeature: "podcast" })), p(bg, { isOpen: !!C, title: E("Unsupported file"), body: C || "", onClose: () => L(null) })) }, Rie = "_container_70nms_1", Pie = "_placeholder_70nms_7", Bie = "_voiceover_70nms_11", zie = "_processing_70nms_15", qie = "_hidden_70nms_19", as = { container: Rie, placeholder: Pie, voiceover: Bie, processing: zie, hidden: qie }, Fie = ({ onOpenDrawer: t, mediaUpload: e, onChange: n, isDrawerOpen: s, pub: a, postId: o }) => { const { iString: r, language: i } = ue(); return p(be, null, e.state === "uploaded" && !s && p("div", { className: as.hidden }, p(ri, { initialFile: null, pub: a, feature: An.Voiceover, mediaUpload: e, mediaUploadId: e.id, onChange: ({ mediaUpload: c }) => n(c), mediaType: "audio", postId: o, language: i, setPostId: null })), p("div", { className: as.processing, onClick: t }, p(cf, { className: as.placeholder, onClick: () => { se(ae.PROCESSING_VOICEOVER_AUDIO_CLICKED), t() }, bgColor: "secondary-themed", textColor: "pub-secondary-text", text: r("Processing voiceover"), icon: p(Sn, null) }))) }, jie = ({ pub: t, voiceoverUpload: e, onOpenDrawer: n, isDrawerOpen: s, onRemoveVoiceover: a, onVoiceoverUploadChanged: o, postId: r }) => { const i = En(`/api/v1/audio/upload/${e==null?void 0:e.id}/src`), c = (e == null ? void 0 : e.state) === "uploaded", l = _a(e), { iString: u, iTemplate: d } = ue(); return p("div", { className: as.container }, c ? p(Fie, { pub: t, postId: r, isDrawerOpen: s, onOpenDrawer: n, mediaUpload: e, onChange: o }) : p(be, null, p("div", { className: as.voiceover }, p(eg, { pub: t, mediaUploadId: e == null ? void 0 : e.id, autoPlay: !1 })), p(Mt, { trigger: p(ft, { "aria-label": u("Podcast player actions"), size: 32, rounded: !1, fill: "outline", priority: "secondary" }, p(Og, { size: 20 })), useMobileBottomSheet: !0, hideOnScroll: !0 }, p(vn, { onClick: n, icon: p(vg, null) }, u("Edit")), p(vn, { onClick: () => { ru(i) }, icon: p(Mu, null) }, u("Download")), p(vn, { onClick: () => a({ skipConfirm: !1 }), icon: p(Au, null) }, u("Delete"))), l && p(xr, { isOpen: !0, onDeleteAudio: () => { a && a({ skipConfirm: !0 }) }, onDismiss: () => {} }))) }; function $ie(t) { const e = n => { n.state.doc.textContent || !_Z(n.state.doc.toJSON()) ? n.dom.removeAttribute("data-placeholder") : n.dom.setAttribute("data-placeholder", t) }; return new _t({ view(n) { return e(n), { update: e } } }) } const Uie = t => ({ tr: e, node: n, pos: s, schema: a }) => { e.setSelection(Je.create(e.doc, s)); const [o] = e.selection.ranges; e.replaceRangeWith(o.$from.pos, o.$to.pos, a.nodes.image2.create(P(S({}, n.attrs), { src: t.src, height: t.height, width: t.width }))) }, Vie = t => ({ tr: e, node: n, pos: s, schema: a }) => { e.setSelection(Je.create(e.doc, s)); const [o] = e.selection.ranges; e.insert(o.$to.pos, a.nodes.assetError.create(P(S({}, n.attrs), { url: t }))), e.delete(o.$from.pos, o.$to.pos) }, zl = 45, ql = 110, Hie = 1e3 * 2, Gie = 10, Wie = 200; function Jie(t) { const e = "https://substack-post-media.s3.amazonaws.com"; return t.startsWith(e) } class rle extends nu { constructor(e, n) { super(e, n), this.handleMouseover = (s, a) => {}, this.onResize = () => { const s = window.innerWidth > 481, a = this.heightOffset || 0; if (this.base && (this.base.style.height = s ? `${window.innerHeight-a}px` : ""), this.shouldFillEditorHeight() && this.editorView && this.editorView.dom) { const o = Math.max(500, window.innerHeight - 395 - (s ? 0 : 18) - a); this.editorView.dom.style.minHeight = `${o}px` } }, this.onUnload = s => { const { iString: a = o => o } = this.props; this.state.unsaved && (s.returnValue = a("You have unsaved changes. Are you sure you want to navigate away from this page?")) }, this.onWindowClick = s => { nh(s.target, a => a.nodeName === "A" && /\bimage-link\b/.test(a.className)) && s.preventDefault() }, this.focusTitle = () => { var s, a; (s = this.editorView) != null && s.hasFocus() && ((a = document.getElementById("post-title")) == null || a.focus()) }, this.makePlugins = ({ schema: s }) => { var l, u, d; const a = this.props.plugins || [], o = []; if (this.readonly) return [...a, ...o]; const { pub: r } = this.props, i = [Zre(s), Fi(RQ(s)), Fi(Ph), Dm({ width: 4, color: ((l = r == null ? void 0 : r.theme) == null ? void 0 : l.background_pop_color) || (r == null ? void 0 : r.theme_var_background_pop) || tg }), Im(), $h(), Ye, Pre, eie({ scrollParent: ".editor-scroll" }), Vre({ scrollParent: ".editor-scroll", disableLargeSize: ((d = (u = this.state.post) == null ? void 0 : u.type) != null ? d : this.props.type) === "thread", pub: r }), Bre({ editor: this, filesEnabled: !0 }), Lre], c = this.getPlaceholderText(); return c && i.push($ie(c)), [...a, ...o, ...i] }, this.cleanUpOrphanCaptions = ({ tr: s, schema: a }) => { s.doc.descendants((o, r, i) => { const c = s.mapping.map(r); if (o.type === a.nodes.captionedImage && o.firstChild && o.firstChild.type !== a.nodes.image2 || o.type === a.nodes.caption && i && i.type !== a.nodes.captionedImage) if (o.type === a.nodes.captionedImage && o.firstChild && o.firstChild.type === a.nodes.blockquote) { const l = s.doc.resolve(c + 2), u = s.doc.resolve(c + 3), d = new Ms(l, u, l.depth), m = ji(d); !Ue(m) && m >= 0 && s.lift(d, m); const f = Je.create(s.doc, c), [h] = f.ranges, g = new Ms(h.$from, h.$to, h.$from.depth), b = Fo(g, a.nodes.blockquote); b && s.wrap(g, b) } else return s.delete(c, c + o.nodeSize), !1; return !0 }) }, this.wrapOrphanImages = ({ tr: s, schema: a }) => { try { s.doc.descendants((o, r, i) => { if (o.type.name === "image2" && (i == null ? void 0 : i.type.name) !== "captionedImage") { const c = Je.create(s.doc, r), [l] = c.ranges, u = new Ms(l.$from, l.$to, l.$from.depth), d = Fo(u, a.nodes.captionedImage); d && s.wrap(u, d) } }) } catch (o) { console.error(o) } }, this.hasMultipleCaptions = ({ schema: s, node: a }) => { let o = 0; return a.forEach(r => { r.type === s.nodes.caption && (o += 1) }), o > 1 }, this.liftStubCaptions = ({ tr: s, schema: a }) => { s.doc.descendants((o, r, i) => { if (o.type === a.nodes.caption && i && (this.hasMultipleCaptions({ schema: a, node: i }) && o === i.lastChild || i.type !== a.nodes.captionedImage)) { const c = s.doc.resolve(r), l = s.doc.resolve(r + o.nodeSize), u = new Ms(c, l, c.depth), d = ji(u); !Ue(d) && d >= 0 && s.lift(u, d) } }), s.doc.descendants((o, r, i) => { o.type === a.nodes.caption && i && i.type !== a.nodes.captionedImage && (s.replaceRangeWith(r, r + o.nodeSize, a.node("paragraph", null, o.content)), s.setSelection(Ee.create(s.doc, r + 1))) }) }, this.closeTab = () => { window.close() }, this.getWriterReferralCode = () => N(this, null, function*() { const s = yield he.put("/api/v1/user/writer_referrals/code"); this.setState({ writerReferralCode: s.body.code }) }), this.setupTiptapEditor = () => N(this, null, function*() { var r, i, c, l, u, d; this.tipTapEditor && (this.tipTapEditor.destroy(), this.tipTapEditor = null), this.editorView && (this.editorView.destroy(), this.editorView = null), this.tipTapEditor = new Oh({ editorProps: this.editorProps(), extensions: gi }), this.editorView = this.tipTapEditor.view; const s = ["mention$"], a = (c = (i = (r = this.tipTapEditor.state) == null ? void 0 : r.config) == null ? void 0 : i.plugins) == null ? void 0 : c.filter(m => s.includes(m.key)), o = (d = (u = (l = this.tipTapEditor.state) == null ? void 0 : l.config) == null ? void 0 : u.plugins) == null ? void 0 : d.filter(m => m.key === "substack_mentions_extension$"); a.push(o[0]), this.editorView.setProps(this.directEditorProps({ schema: this.editorView.state.schema, rolloverPlugins: a })), this.onResize(), this.uploadUnhostedImages(this.editorView, this.editorView.state.doc), this.processAugmentationPlaceholders(this.editorView, this.editorView.state.doc), this.shouldRenderPodcast() || this.shouldRenderVideo() || this.editorView.focus(), this.editorView.dom.addEventListener("mousedown", m => { var g; if (!m.target) return; m.target.classList.contains("ProseMirror") && this.editorView && !this.editorView.hasFocus() && ((g = this.editorView) == null || g.focus()) }), this.tipTapEditor.on("transaction", () => { requestAnimationFrame(() => { requestAnimationFrame(() => { this.isMounted && this.forceUpdate() }) }) }) }), this.directEditorProps = ({ schema: s, rolloverPlugins: a }) => { var i, c; if (!this.state.doc) return console.warn("directEditorProps called before state.doc is set"), {}; const o = [...a, ...this.makePlugins({ schema: s })]; return { state: Lh.create({ doc: nn(this.state.doc.body, { customSchema: s, useTiptap: !0, postId: (c = (i = this.state.post) == null ? void 0 : i.id) != null ? c : null }), plugins: o }), dispatchTransaction: l => { if (this.readonly || !this.editorView) return; const u = this.editorView.state.schema; if (this.liftStubCaptions({ schema: u, tr: l }), this.cleanUpOrphanCaptions({ schema: u, tr: l }), this.wrapOrphanImages({ schema: u, tr: l }), l.selection instanceof Je && l.selection.node.type === u.nodes.image2) { const m = l.doc.resolve(l.selection.from), f = m.parent; if (f && f.type === u.nodes.captionedImage) { const h = m.depth; for (let g = h; g > 0; g--) if (m.node(g).type === u.nodes.captionedImage) { const b = m.before(g); l.setSelection(Je.create(l.doc, b)); break } } } Yne(l, u), oi(l, u), Kne(l, u); const d = this.editorView.state.apply(l); this.editorView.updateState(d), this.onEdit() } } }, this.editorProps = () => { const s = !this.readonly; return { attributes: { class: "mousetrap", "data-testid": "editor", dir: "auto" }, editable() { return s }, handleClickOn: this.handleClickOn, handleDrop: this.handleDrop, handlePaste: this.handlePaste, handleDOMEvents: { paste: (a, o) => o.clipboardData && o.clipboardData.items && o.clipboardData.items.length === 1 && /^image\//i.test(o.clipboardData.items[0].type) ? (this.insertImageFile(o.clipboardData.items[0].getAsFile()), !0) : !1, file_edit: this.fileEditStart, image_watermark: this.imageWatermarkStart, mouseover: this.handleMouseover }, transformPastedText: this.transformPastedText, transformPastedHTML: this.transformPastedHTML } }, this.updateDocumentState = (...a) => N(this, [...a], function*(s = {}) { const o = Object.assign({ doc: this.getDocument() }, s || {}); yield Qa(this, o) }), this.debouncedUpdateDocumentState = fQ(this.updateDocumentState, Wie), this.save = (...o) => N(this, [...o], function*({ alertForErrors: s, saveDocumentOptions: a } = {}) { const { iString: r = c => c } = this.props; let i = null; if (!this.readonly && (clearTimeout(this._autoSaveTimeout), !(this.state.pendingUploads > 0) && !this.state.saving)) { try { const c = { saving: !0, savingError: null }; if (yield this.updateDocumentState(c), !this.state.doc) return console.warn("save called before state.doc is set"), null; i = yield this.saveDocument(this.state.doc, a), this.setState({ saving: !1, savingError: null, unsaved: !1 }) } catch (c) { console.error("Failed to save draft: ", c), this.setState({ saving: !1, savingError: c }), this.onSaveError(c) || s && alert(Ft(c, r("There was a network issue. Try again in a bit"))) } return i } }), this.onCommandSave = () => { if (this.commandSaveEnabled) return this.save(), !1 }, this.canGoBack = () => { const { iString: s = a => a } = this.props; return this.state.unsaved ? window.confirm(s("You have unsaved changes. Are you sure you want to navigate away from this page?")) : null }, this.goBack = (s, { localNavigation: a = !0 } = {}) => { this.canGoBack() !== !1 && (s.preventDefault(), this.props.back ? sh(this.props.back, { event: s, replace: !0, local_navigation: a }) : window.history.back()) }, this.handleClickOn = (s, a, o, r) => { if (o && o.type.name in Ga) return s.dispatch(s.state.tr.setSelection(Je.create(s.state.doc, r))), !0 }, this.transformPastedText = s => s.replace(/\u2028/g, ` `).replace(/\u2029/g, ` `), this.transformPastedHTML = s => { const a = document.createElement("div"); a.innerHTML = s; const o = Array.from(a.querySelectorAll("h1, h2, h3, h4, h5, h6")); for (const u of o) { const d = Array.from(u.querySelectorAll("img")), m = u.nextSibling; for (const f of d) m ? u.parentNode.insertBefore(f, m) : u.parentNode.appendChild(f) } const r = Array.from(a.querySelectorAll("li:first-child")); for (const u of r) u.style.fontWeight === "700" && (u.style.fontWeight = "normal"); const i = Array.from(a.querySelectorAll("b")); for (const u of i) if (u.style.fontWeight === "normal") { const d = document.createElement("span"), m = window.getComputedStyle(u); let f = m.cssText; f === "" && (f = Object.values(m).reduce((h, g) => `${h}${g}:${m.getPropertyValue(g)};`)), d.style.cssText = f, d.innerHTML = u.innerHTML, u.parentNode.insertBefore(d, u), u.parentNode.removeChild(u) } const c = document.createTreeWalker(a, NodeFilter.SHOW_TEXT, null); let l; for (; l = c.nextNode();) l.nodeType === uu.TEXT_NODE && (l.nodeValue = l.nodeValue.replace(new RegExp(String.fromCharCode(160), "g"), " ")); return this.transformPastedText(a.innerHTML) }, this.handlePaste = (s, a, o) => ((() => N(this, null, function*() { o = yield this.replaceDigestPostEmbedUrls(s, o), o = yield this.replacePostIdsInUrls(s, o), o = yield this.cleanBadCaptions({ schema: s.state.schema, slice: o }), o = yield this.unwrapPastedFootnotes({ schema: s.state.schema, slice: o }), o = yield this.cleanBadPastedMarks(s, o), o = yield this.unwrapPastedBlockquotes(s, o, this.tipTapEditor), o = yield this.augmentPastedContent(s, o), this.uploadUnhostedImages(s, o, !0); let i = this.maybeLinkSelectedText(s, o); i || (o.content.childCount === 1 && o.openStart === 0 && o.openEnd === 0 && o.content.firstChild ? i = s.state.tr.replaceSelectionWith(o.content.firstChild) : i = s.state.tr.replaceSelection(o)), s.dispatch(i.scrollIntoView().setMeta("paste", !0)) }))(), !0), this.getActionForImagesInSlice = (s, a = !1) => { const o = {}; return Jn(s, r => { const i = r.type.name === "assetError" ? r.attrs.url : r.attrs.src; i !== Gl && !o[i] && (Ql(i) || ch(i) || Jie(i) ? a && (o[i] = this.getHostedImageAttrs(i)) : o[i] = this.uploadImage(i)) }, { nodeTypes: ["image", "image2", "assetError"] }), o }, this.uploadUnhostedImages = (s, a = null, o = !1) => N(this, null, function*() { const r = a != null ? a : s.state.doc; "post_id" in this.props && (yield this.setPostId()); const i = this.getActionForImagesInSlice(r, o); return Promise.all(Object.keys(i).map(c => i[c].then(l => { this.transformImage(s, c, (u, d, m) => { ["image", "image2"].includes(d.type.name) ? u.setNodeMarkup(m, d.type, Object.assign({}, d.attrs, { src: l.src, height: l.height, width: l.width }), d.marks) : Uie(l)({ tr: u, node: d, pos: m, schema: s.state.schema }) }) }).catch(l => { console.error(`Failed to upload image: with url [${c}]`, l), this.transformImage(s, c, (u, d, m) => { d.type.name !== "assetError" && Vie(c)({ tr: u, node: d, pos: m, schema: s.state.schema }) }) }))) }), this.transformImage = (s, a, o) => { let r = !1; const i = s.state.tr; s.state.doc.descendants((c, l) => { (["image", "image2"].includes(c.type.name) && c.attrs.src === a || c.type.name === "assetError" && c.attrs.url === a) && (r = !0, o(i, c, l)) }), r && s.dispatch(i) }, this.unwrapPastedFootnotes = o => N(this, [o], function*({ schema: s, slice: a }) { return yield Wt(a, r => N(this, null, function*() { return r.type === s.nodes.footnoteAnchor || r.marks.length && r.marks.some(i => { var c, l; return (l = (c = i.attrs) == null ? void 0 : c.href) == null ? void 0 : l.startsWith("#footnote-") }) ? null : r.type === s.nodes.footnote ? s.nodes.fragmentNode.create(null, r.content) : r })) }), this.replacePostIdsInUrls = (s, a) => N(this, null, function*() { var r, i; const o = ((i = (r = this.state) == null ? void 0 : r.post) == null ? void 0 : i.id) || this.props.post_id; return yield Wt(a, (c, l) => N(this, null, function*() { var d; const u = (d = c == null ? void 0 : c.attrs) == null ? void 0 : d.url; try { u && new URL(u).pathname === "/subscribe" && qi(u, "coupon") && qi(u, "utm_content") !== o && Wi({ node: c, attrs: { url: En(u, { utm_content: o }) } }) } catch (m) {} return c })) }), this.replaceDigestPostEmbedUrls = (s, a) => N(this, null, function*() { const { iString: o = r => r } = this.props; return yield Wt(a, r => N(this, null, function*() { var l, u; const i = (l = mt({ fragment: a.content })) == null ? void 0 : l[0], c = (u = mt({ fragment: i.content })) == null ? void 0 : u[0]; if (c != null && c.marks.some(d => d.type.name === "link")) return r; if (c && c.type === s.state.schema.nodes.text) { const d = c.text; if (d && Yr(d)) try { const m = yield ld(d); return s.state.schema.nodes.digestPostEmbed.create(P(S({}, m), { isEditorNode: !0, nodeId: ka() })) } catch (m) { console.error(m), alert(o("Failed to find post. Please check the link and try again.")) } return r } return r })) }), this.cleanBadCaptions = o => N(this, [o], function*({ schema: s, slice: a }) { return yield Wt(a, r => N(this, null, function*() { if (r.type === s.nodes.captionedImage) { const i = mt({ fragment: r.content }); if (!i.length || i[0].type !== s.nodes.image2) return null } return r })) }), this.unwrapPastedBlockquotes = (s, a, o) => N(this, null, function*() { if (!o) return a; const r = 5, i = a.content.toJSON(); if (!((i == null ? void 0 : i[0].type) === "blockquote")) return a; try { const l = o.state.selection.$head.path; if (!(l != null && l.length)) return a; const u = l.filter(f => { var h; return typeof f != "number" && ((h = f.type) == null ? void 0 : h.name) === "blockquote" }); if (!u) return a; let d = u.length; return yield Wt(a, (f, h, g) => { var b; if (f.type.name === "blockquote") { d++; let x, v = f; for (; !x && v;) { const w = mt({ fragment: v.content })[0]; if (((b = w == null ? void 0 : w.type) == null ? void 0 : b.name) === "text") { x = w; break } v = w } if (x && d > r) return x } return f }) } catch (l) { console.error("Failed to convert nested blockquote to paragraph", l) } return a }), this.cleanBadPastedMarks = (s, a) => N(this, null, function*() { const o = s.state.schema; return Jn(a, r => { r.marks && r.marks.length > 0 && (r.type.isBlock && r.content && mt({ fragment: r.content }).length === 0 ? Ji({ node: r, marks: [] }) : ["image2", "twitter2", "youtube2", "spotify2", "horizontal_rule", "horizontalRule"].includes(r.type.name) && Ji({ node: r, marks: [] })) }), a = yield Wt(a, (r, i) => N(this, null, function*() { var c; return (c = r.attrs) != null && c.empty || r.type === o.nodes.paywall || [o.nodes.hard_break, o.nodes.hardBreak].includes(r.type) && i === 0 || [o.nodes.paragraph, o.nodes.heading].includes(r.type) && r.textContent.trim() === "" ? null : r })), a = nl(a, r => r.type === o.nodes.blockquote), s.shiftKey && (a = nl(a, r => r.type === o.nodes.paragraph, r => { for (let i = r.length - 1; i > 0; i--) r.splice(i, 0, o.nodes.paragraph.create({}, [o.nodes.hard_break.create()])); return r })), Jn(a, r => { if (r.marks) { for (const i of r.marks) if (i.type === o.marks.link && i.attrs.href && i.attrs.href.startsWith("/") && !i.attrs.href.startsWith("//")) { const c = `${window.location.protocol}//${window.location.host}${i.attrs.href}`; Wi({ node: i, attrs: { href: c } }) } } }), a }), this.maybeGetSliceUrl = ({ schema: s, slice: a }) => { var l, u; const o = (l = mt({ fragment: a.content })) == null ? void 0 : l[0]; if (!o) return !1; const r = (u = mt({ fragment: o.content })) == null ? void 0 : u[0]; if (!r || r.type !== s.nodes.text) return !1; const i = r.text; return Ue(i) ? !1 : lt(i) }, this.maybeLinkSelectedText = (s, a) => { const o = this.maybeGetSliceUrl({ schema: s.state.schema, slice: a }); if (!o) return; const r = s.state.selection; if (!(r instanceof Ee && r.from !== r.to)) return; const c = s.state.tr; return c.addMark(r.from, r.to, s.state.schema.marks.link.create({ href: o.toString() })), c }, this.augmentPastedContent = (s, a) => N(this, null, function*() { a = yield Wt(a, r => r.type !== s.state.schema.nodes.text ? r : this.augmentPastedText({ schema: s.state.schema, text: r.text }).map(i => { if (typeof i != "string") return i; if (!i) return null; const c = s.state.schema.text(i, r.marks); return hg({ node: c, text: i }), c })), this.processAugmentationPlaceholders(s, a); const o = _s(a); return o || a }), this.augmentPastedText = ({ schema: s, text: a }) => { if (!a) return []; const [o, r] = gm(a, s); if (!o) return [a]; const i = typeof o == "boolean" ? [a] : a.split(o); if (o === a || i.length === 1) return [r]; for (let c = i.length - 1; c >= 0; c -= 1) { let l = i[c]; if (typeof l != "string") continue; c > 0 && (l = l.trimStart()), c < i.length - 1 && (l = l.trimEnd()); const u = this.augmentPastedText({ schema: s, text: l }); c && u.unshift(r), i.splice(c, 1, ...u) } return i }, this.processAugmentationPlaceholders = (s, a) => { Jn(a, o => bm(o, s, s.state.schema).catch(r => alert(Ft(r))), { nodeTypes: ["augmentation_placeholder"] }) }, this.maybeAddNewline = (s, a, o, r) => { var i; ((i = mt({ fragment: o.content })[0]) == null ? void 0 : i.type.name) === "file" && r && setTimeout(() => { s.state.doc.nodeAt(s.state.doc.nodeSize - 3) === mt({ fragment: o.content })[0] && s.dispatch(s.state.tr.insertText("\r", s.state.doc.nodeSize - 2)) }, 0) }, this.handleDrop = (s, a, o, r) => { if (!a.dataTransfer) return !1; if (a.dataTransfer.files && a.dataTransfer.files.length) return this.onDropFile(a), !0; const i = a.dataTransfer.getData("URL"); if (!i) return this.maybeAddNewline(s, a, o, r), !1; const c = this.getInsertPos(a); return c ? (this.insertImage({ schema: s.state.schema, pos: c, image: i }), !0) : (console.warn("could not find insert position for drop event"), !0) }, this.allowDropFile = s => { s.preventDefault() }, this.onDropFile = (s, a) => N(this, null, function*() { var i, c; s.preventDefault(); const o = a || Array.from((c = (i = s.dataTransfer) == null ? void 0 : i.files) != null ? c : []), r = []; yield Promise.all(o.map(l => N(this, null, function*() { if (!this.acceptFile(l)) { r.push(l); return } yield this.dropFile(l, this.getInsertPos(s)).catch(u => { r.push(P(S({}, l), { error: u })) }) }))), r.length > 0 && this.handleDropFileErrors(r) }), this.dropFile = (s, a) => N(this, null, function*() { return s.type.startsWith("image/") ? this.insertImageFile(s, a) : !1 }), this.openPodcastPaywallMenu = () => { const s = document.querySelector(".podcastPaywallMenuButton"); s && this.triggerMouseEvent(s, "click") }, this.openInsertMenu = () => { const s = document.querySelector(".more-dropdown"); s && this.triggerMouseEvent(s, "click") }, this.acceptFile = s => { const { iString: a = o => o } = this.props; return s.size > Qs ? (s.error = new Error(a("File Too Large")), s.error.details = p(X.B3, { translated: !0 }, "We were unable to add ", p("b", null, I18N.p(s.name)), " because it is larger than", " ", I18N.p(mr(Qs)), ". Try reducing the file size and adding again."), !1) : !!s.type.startsWith("image/") }, this.handleDropFileErrors = s => { const a = this.state.errors || [], o = [...s, ...a]; this.setState({ errors: o }) }, this.insertImageFile = (s, a) => N(this, null, function*() { if (!this.editorView) return !1; if (!s) return console.warn("insertImageFile received a null file"), !1; a == null && (a = this.editorView.state.selection.from); const o = yield Xs(s); return this.insertImage({ schema: this.editorView.state.schema, pos: a, image: o, imageType: s.type }), !0 }), this.getInsertPos = s => { if (!this.editorView) return; let a = this.editorView.state.tr.doc.content.size; if (s) { const o = this.editorView.dom.getBoundingClientRect(), r = this.editorView.posAtCoords({ left: Math.max(o.left, Math.min(o.right, s.clientX)), top: Math.max(o.top, Math.min(o.bottom, s.clientY)) }); r && (a = r.pos) } return a }, this.uploadImage = (s, a) => N(this, null, function*() { var l, u; let o, r; try { if (this.setState(m => ({ pendingUploads: m.pendingUploads + 1 })), s.startsWith("blob:")) { const m = yield ah(s); s = yield Xs(m), a = m.type } const d = ((l = this.state.post) == null ? void 0 : l.id) || this.props.post_id; r = yield he.post("/api/v1/image").send({ image: s, postId: d }), o = yield new Promise(m => Ks(wn({ attrs: { type: a != null ? a : null, src: r.body.url } }), m)) } finally { this.setState(d => ({ pendingUploads: d.pendingUploads - 1 })) } const c = Xn("image_deep_link_enabled") ? `${rt(this.props.pub)}/i/${((u=this.state.post)==null?void 0:u.id)||this.props.post_id}?${new URLSearchParams({img:r.body.url})}` : null; return Dn(o, a != null ? a : null, { bytes: r.body.bytes, internalRedirect: c }) }), this.getHostedImageAttrs = s => N(this, null, function*() { const a = yield new Promise(o => Ks(wn({ attrs: { src: s, type: null } }), o)); return Dn(a, null, {}) }), this.insertImage = ({ pos: s, image: a, imageType: o, schema: r }) => { const { iString: i = l => l } = this.props; if (!this.editorView) { console.warn("insertImage called without an editorView"); return } const c = Ye.add(this.editorView, s, a); this.uploadImage(a, o).then(l => { if (!this.editorView) { console.warn("insertImage called without an editorView"); return } const u = r.nodes.captionedImage.create(l, r.nodes.image2.create(l)); Ye.replace(this.editorView, c, u) }).catch(l => { l.status === 413 ? alert(i("Image too Large")) : l.message === "args[0].toLowerCase is not a function" ? alert(i("Failed to process image. If you have the DuckDuckGo browser extension installed, please disable it and try again. If the issues persists, please contact support.")) : alert(Ft(l, "There was a network issue. Try again in a bit")), this.editorView && Ye.remove(this.editorView, c) }) }, this.getCoupons = () => N(this, null, function*() { return this.props.pub ? (yield he.get("/api/v1/coupon").query({ limit: 5 })).body : [] }), this.insertCoupon = ({ coupon: s, schema: a, state: o = null, dispatch: r = null }) => { var d, m, f, h, g, b; const { iTemplate: i = lh } = this.props, c = oh(s), l = ((m = (d = this.state) == null ? void 0 : d.post) == null ? void 0 : m.id) || this.props.post_id; let u; if (c === "EXTRA_SEATS" ? u = yt(`${this.props.pub.base_url}/account`, { coupon: s.id, extra_seats: !0, utm_content: l }) : u = yt(`${this.props.pub.base_url}/subscribe`, P(S({ coupon: s.id }, s.group_only && { group: !0 }), { utm_content: l })), o = (h = o || ((f = this.editorView) == null ? void 0 : f.state)) != null ? h : null, !o) { console.warn("insertCoupon called without editor state"); return } if (r = (b = r || ((g = this.editorView) == null ? void 0 : g.dispatch)) != null ? b : null, !r) { console.warn("insertCoupon called without a dispatch function"); return } r(ie(o, a.nodes.button.create({ url: u, text: i `Get ${Jl(s)||""}` }))) }, this.fileEditStart = (s, a) => { const o = a.detail.node; this.setState({ fileEdit: o }) }, this.fileEditDone = () => { this.setState({ fileEdit: null }), this.onEdit() }, this.imageWatermarkStart = (s, a) => { this.setState({ imageToWatermark: { node: a.node, pos: a.pos, view: a.view } }) }, this.imageWatermarkDone = () => { this.setState({ imageToWatermark: null }), this.onEdit() }, this.setPostPaidForPaywall = () => { if (!this.state.audienceToggle) { console.warn("setPostPaidForPaywall called without an audienceToggle"); return } zi(this.state.audienceToggle) || this.setState({ audienceToggle: "only_paid" }) }, this.setPostId = () => N(this, null, function*() { var r, i; const { iString: s = c => c } = this.props; let a = ((i = (r = this.state) == null ? void 0 : r.post) == null ? void 0 : i.id) || this.props.post_id, o = 0; for (; !a && o < 3;) o++, a = yield this.save({ saveDocumentOptions: { forceSave: !0 } }), a || (yield new Promise(c => setTimeout(c, 200))); return a || (window.alert(s("Something went wrong. Please refresh the page.")), null) }), this.removeVoiceover = ({ skipConfirm: s = !1 } = {}) => { const { iString: a = o => o } = this.props; !s && !confirm(a("This change will permanently remove the voiceover audio. Are you sure?")) || this.setState({ doc: P(S({}, this.state.doc), { voiceover_upload_id: null, voiceoverUpload: null }) }, () => N(this, null, function*() { yield this.save() })) }, this.removeVideoPreview = () => N(this, null, function*() { if (!this.state.doc) return; const { video_upload_id: s } = this.state.doc; if (s) try { const a = yield he.delete(`/api/v1/video/upload/${s}/preview`); this.setState({ doc: P(S({}, this.state.doc), { video_upload_id: this.state.doc.video_upload_id, videoUpload: S(S({}, this.state.doc.videoUpload), a.body) }) }, () => N(this, null, function*() { yield this.save({ saveDocumentOptions: { forceSave: !0 } }) })) } catch (a) { alert(Ft(a)) } }), this.removePodcastPreview = ({ skipConfirm: s } = { skipConfirm: !1 }) => { const { iString: a = i => i } = this.props; if (!this.state.doc) return; const { podcast_preview_upload_id: o, podcastPreviewUpload: r } = this.state.doc; o && (!s && (r != null && r.state) && !["cancelled", "error"].includes(r.state) && !confirm(a("This change will permanently remove the free audio. Are you sure?")) || this.setState({ doc: P(S({}, this.state.doc), { podcast_preview_upload_id: null, podcastPreviewUpload: null }) }, () => N(this, null, function*() { yield this.save({ saveDocumentOptions: { forceSave: !0 } }) }))) }, this.removeLegacyPodcast = () => { const { iString: s = a => a } = this.props; return !confirm(s("This will permanently remove your audio. Are you sure?")) || !this.state.doc ? !1 : (this.setState({ doc: P(S({}, this.state.doc), { podcast_url: null, podcast_duration: null }) }, () => N(this, null, function*() { yield this.save({ saveDocumentOptions: { forceSave: !0 } }) })), !0) }, this.removePodcast = ({ skipConfirm: s = !1 } = {}) => { const { iString: a = i => i } = this.props; if (!this.state.doc) { console.warn("doc not set in removePodcast"); return } const { podcast_preview_upload_id: o } = this.state.doc, r = a(o ? "This change will permanently remove both the free and paid audio from the post. Are you sure?" : "This change will permanently remove your audio. Are you sure?"); !s && !confirm(r) || this.setState({ doc: P(S({}, this.state.doc), { podcastUpload: null, podcast_upload_id: null, podcastPreviewUpload: null, podcast_preview_upload_id: null }) }, () => { this.onEdit({ force: !0 }) }) }, this.removeVideoPodcast = ({ skipConfirm: s = !1 } = {}) => { const { iString: a = r => r } = this.props, o = this.hasVideoPaywall() ? a("This change will permanently remove both the free and paid video from the post. Are you sure?") : a("This change will permanently remove your video. Are you sure?"); !s && !confirm(o) || this.setState({ doc: P(S({}, this.state.doc), { videoUpload: null, video_upload_id: null, podcastUpload: null, podcast_upload_id: null, podcastPreviewUpload: null, podcast_preview_upload_id: null }) }, () => { this.onEdit({ force: !0 }) }) }, this.onPodcastUploadChanged = ({ mediaUpload: s, podcastPreviewUpload: a, removePreview: o }) => { const r = (s == null ? void 0 : s.state) === "error" ? { hideFromFeed: !0 } : {}; this.setState(i => ({ podcastUploading: !1, doc: S(S(S(P(S({}, i.doc), { podcast_upload_id: (s == null ? void 0 : s.id) || null, podcastUpload: s }), o ? { podcast_preview_upload_id: null, podcastPreviewUpload: null } : {}), a ? { podcast_preview_upload_id: a.id, podcastPreviewUpload: a } : {}), r) }), () => { this.onEdit({ force: !0 }) }) }, this.onPodcastPreviewUploadChanged = ({ mediaUpload: s }) => { const a = (s == null ? void 0 : s.state) === "error" ? { hideFromFeed: !0 } : {}; this.setState(o => ({ podcastPreviewUploading: !1, doc: S(P(S({}, o.doc), { podcast_preview_upload_id: (s == null ? void 0 : s.id) || null, podcastPreviewUpload: s }), a) }), () => { this.onEdit({ force: !0 }) }) }, this.onVideoPodcastUploadChanged = ({ mediaUpload: s }) => { this.setState(a => ({ podcastUploading: !1, doc: P(S({}, a.doc), { video_upload_id: (s == null ? void 0 : s.id) || null, videoUpload: s }) }), () => N(this, null, function*() { setTimeout(() => { this.onEdit({ force: !0 }) }, 1e3) })) }, this.onVoiceoverUploadChanged = s => { this.setState(a => ({ doc: P(S({}, this.state.doc), { voiceover_upload_id: (s == null ? void 0 : s.id) || null, voiceoverUpload: s }) }), () => { this.onEdit({ force: !0 }) }) }, this.updateDigestPostEmbed = s => { var i; const r = s.detail, { shouldDisableDrag: a } = r, o = st(r, ["shouldDisableDrag"]); (i = this.tipTapEditor) == null || i.chain().focus().updateDigestPostEmbed(o, a).run() }, this.convertDigestPostEmbedToLink = s => { var a; (a = this.tipTapEditor) == null || a.chain().focus().convertDigestPostEmbedToLink(s.detail).run() }, this.convertDigestPostEmbedToEmbeddedPost = s => { var a; (a = this.tipTapEditor) == null || a.chain().focus().convertDigestPostEmbedToEmbeddedPost(s.detail).run() }, this.deleteDigestPostEmbed = () => { var s; (s = this.tipTapEditor) == null || s.chain().focus().deleteDigestPostEmbed().run() }, this.editorView = null, this.autoSaveEnabled = !0, this.commandSaveEnabled = !0, this.state = { loaded: !1, pendingUploads: 0 }, this.onEdit = this.onEdit.bind(this), this.isMounted = !1 } loadDocument() { throw new Error("loadDocument must be implemented") } saveDocument(e, n) { throw new Error("saveDocument must be implemented") } getClassName() {} getBackButton() {} backButtonClose() { return !1 } getStatusHeader() {} getStatus() {} getStatusClass() {} getPlaceholderText() { return null } shouldFillEditorHeight() { return !0 } renderMetadata() { return null } renderHeaderExtras() { return null } renderFirst() { return null } renderAboveTitle() { return null } renderBelowSubtitle() { return null } renderBelowEditor() { return null } renderButtons() { return null } renderModals() { return null } getPostType() { return null } canSetPaywall() { return !1 } hasVideoPaywall() { var e, n, s, a; return !!((n = (e = this.state.post) == null ? void 0 : e.draftVideoUpload) != null && n.preview_duration) && ((a = (s = this.state.post) == null ? void 0 : s.draftVideoUpload) == null ? void 0 : a.preview_duration) > 0 } hasPaywall() { return this.hasVideoPaywall() || !!(this.editorView && Bn(this.editorView.state.doc.toJSON(), e => e.type === "paywall")) } hasPodcast() { return !!this.state.doc && (!!this.state.doc.podcast_upload_id || !!this.state.doc.podcast_url) } isEmailOnly() { return !1 } hasPodcastPreview() { return !!this.state.doc && !!this.state.doc.podcast_preview_upload_id } removePaywall() { var e; if ((e = this.editorView) != null && e.state) { const { tr: n, schema: s } = this.editorView.state; let a = 0, o = !1; n.doc.descendants((r, i) => r.type === s.nodes.paywall ? (a = i, o = !0, !1) : !0), o && (n.setSelection(Je.create(n.doc, a)).deleteSelection(), this.editorView.dispatch(n)) } } renderBottomBar() { const { iString: e = o => o } = this.props; let n = this.getStatusHeader(), s = this.getStatus() || " ", a = this.getStatusClass() || ""; return this.state.saving ? (s = e("Saving.."), a = "") : this.state.savingError ? (n = Ft(this.state.savingError, e("Network Error")), s = e("Unsaved changes"), a = "alert") : this.state.unsaved ? (s = e("Unsaved changes"), a = "") : this.state.outDated && (n = e("Draft is out of date"), s = e("Looks like this draft has been updated elsewhere. This content has been saved, please open the working copy from draft history.")), p("div", { className: "bottom-bar" }, p("div", { className: "container" }, p("div", { className: `status ${a}` }, n && p("strong", null, n), s), p("div", { className: "button-container" }, this.renderButtons()))) } onSaveError(e, n) {} getDocument() { var e, n, s, a, o, r, i, c, l, u; return !this.editorView || !this.state.doc ? null : { title: this._titleTextarea && this._titleTextarea.value || "", subtitle: this._subtitleTextarea && this._subtitleTextarea.value || "", bylines: this.state.doc.bylines || [], pending_invites: this.state.doc.pending_invites || [], podcast_url: (n = (e = this.state.doc) == null ? void 0 : e.podcast_url) != null ? n : "", podcast_duration: (a = (s = this.state.doc) == null ? void 0 : s.podcast_duration) != null ? a : null, video_upload_id: ((o = this.state.post) == null ? void 0 : o.type) === "video" ? ((r = this._videoEditor) == null ? void 0 : r.getMediaUploadId()) || null : ((i = this.state.doc) == null ? void 0 : i.video_upload_id) || null, videoUpload: (c = this.state.doc) == null ? void 0 : c.videoUpload, podcast_upload_id: this.state.doc.podcast_upload_id, podcastUpload: this.state.doc.podcastUpload, podcast_preview_upload_id: this.state.doc.podcast_preview_upload_id, podcastPreviewUpload: this.state.doc.podcastPreviewUpload, voiceover_upload_id: this.state.doc.voiceover_upload_id, voiceoverUpload: this.state.doc.voiceoverUpload, free_podcast_url: this.state.doc.free_podcast_url, body: ks(this.editorView.state.doc, { runMigrations: !0, postId: (u = (l = this.state.post) == null ? void 0 : l.id) != null ? u : null }) } } componentDidMount() { return N(this, null, function*() { this.isMounted = !0, window.addEventListener("beforeunload", this.onUnload), window.addEventListener("resize", this.onResize), window.addEventListener("click", this.onWindowClick), window.addEventListener("updateDigestPostEmbed", this.updateDigestPostEmbed), window.addEventListener("convertDigestPostEmbedToLink", this.convertDigestPostEmbedToLink), window.addEventListener("convertDigestPostEmbedToEmbeddedPost", this.convertDigestPostEmbedToEmbeddedPost), window.addEventListener("deleteDigestPostEmbed", this.deleteDigestPostEmbed), $t.bind(["esc"], this.focusTitle), $t.bind(["command+s", "ctrl+s"], this.onCommandSave), rh(), this.cleanUpTikTokEnhanceListener = Lg(); try { const e = yield this.loadDocument(); yield Qa(this, { loaded: !0, doc: e, loadedDoc: e }) } catch (e) { console.error("Failed to load document:", e), yield Qa(this, { loadingError: e }); return } this.getWriterReferralCode(), this.setupTiptapEditor(), this.hasPaywall() && this.state.audienceToggle && !zi(this.state.audienceToggle) && this.setState({ audienceToggle: "only_paid" }) }) } componentWillUnmount() { var e; clearTimeout(this._autoSaveTimeout), window.removeEventListener("resize", this.onResize), window.removeEventListener("beforeunload", this.onUnload), window.removeEventListener("click", this.onWindowClick), window.removeEventListener("updateDigestPostEmbed", this.updateDigestPostEmbed), window.removeEventListener("convertDigestPostEmbedToLink", this.convertDigestPostEmbedToLink), window.removeEventListener("convertDigestPostEmbedToEmbeddedPost", this.convertDigestPostEmbedToEmbeddedPost), window.removeEventListener("deleteDigestPostEmbed", this.deleteDigestPostEmbed), (e = this.cleanUpTikTokEnhanceListener) == null || e.call(this), $t.unbind(["esc"], this.focusTitle), $t.unbind(["command+s", "ctrl+s"], this.onCommandSave), ih(), this.isMounted = !1 } componentDidUpdate(e, n) { var o; const s = (n.doc && n.doc.title || "").length, a = (this.state.doc && this.state.doc.title || "").length; (a > zl != s > zl || a > ql != s > ql) && ((o = this._titleTextarea) == null || o.setAutoHeight()) } onEdit({ force: e } = { force: !1 }) { if (this.readonly || !this.isMounted) return; const n = this.state.doc, s = this.debouncedUpdateDocumentState; s().then(() => { const a = this.state.doc; !e && a.title == n.title && a.subtitle == n.subtitle && $i(a.bylines, n.bylines) && $i(a.pending_invites, n.pending_invites) && a.podcast_url == n.podcast_url && a.podcast_duration == n.podcast_duration && a.video_upload_id == n.video_upload_id && a.podcast_upload_id == n.podcast_upload_id && a.podcast_preview_upload_id == n.podcast_preview_upload_id && a.voiceover_upload_id == n.voiceover_upload_id && a.body == n.body && a.free_podcast_url == n.free_podcast_url || (this.setState({ unsaved: !0 }), this.autoSaveEnabled && (e || a.podcast_url != n.podcast_url || a.podcast_duration != n.podcast_duration || a.video_upload_id != n.video_upload_id || a.podcast_upload_id != n.podcast_upload_id || a.podcast_preview_upload_id != n.podcast_preview_upload_id || a.voiceover_upload_id != n.voiceover_upload_id || a.free_podcast_url != n.free_podcast_url ? this.save() : (clearTimeout(this._autoSaveTimeout), this._autoSaveTimeout = setTimeout(() => this.save(), this.props.test ? Gie : Hie)))) }) } triggerMouseEvent(e, n) { if (typeof document != "undefined") { const s = new CustomEvent(n); e.dispatchEvent(s) } } renderHeader() { const { iString: e = n => n } = this.props; return p("div", { className: "header" }, p("div", { className: "container" }, this.backButtonClose() ? p(Vs, { onClick: this.closeTab }, e("Close")) : p(Vs, { onClick: this.goBack }, "← ", this.getBackButton() || e("Back")), this.props.title && p("span", null, p("b", null, this.props.title)), this.renderHeaderExtras())) } renderErrors() { var o, r, i, c; const { iString: e = l => l } = this.props, n = this.state.errors; if (!n || n.length === 0) return null; const s = () => { if (n.pop(), this.setState({ errors: n }), n.length > 0) return !1 }, [a] = n.slice(-1); return p(Eu, { className: "file-upload-error-modal", openByDefault: !0, onBeforeClose: s, noExit: !0 }, p("div", { className: "file-upload-error-modal-inner" }, p("h3", null, (r = (o = a.error) == null ? void 0 : o.message) != null ? r : "Something went wrong"), p("p", null, (c = (i = a.error) == null ? void 0 : i.details) != null ? c : "Please try again"), p("div", { className: "file-upload-error-actions" }, p(Vs, { className: "primary confirm danger", onClick: s }, e("OK"))))) } shouldRenderTitle() { return !!this.props.titlePlaceholder } shouldRenderSubtitle() { return !!this.props.subtitlePlaceholder } shouldRenderPodcast() { return !1 } shouldRenderVideo() { return !1 } shouldRenderVoiceover() { return !1 } renderLoadingError(e) { const { iString: n = s => s } = this.props; return [n("Failed to load draft. "), p("a", { href: "javascript:void(0)", onClick: () => document.location.reload() }, n("Try again"))] } getTitle() { var n; const { iString: e = s => s } = this.props; return p(Vi, { ref: s => this._titleTextarea = s, id: "post-title", className: "page-title mousetrap", placeholder: this.props.titlePlaceholder || e("Enter title…"), maxLength: 200, autoHeight: !0, inline: !0, value: (n = this.state.doc) == null ? void 0 : n.title, onInput: () => this.onEdit() }) } getSubTitle() { var n; const { iString: e = s => s } = this.props; return p(Vi, { ref: s => this._subtitleTextarea = s, className: "subtitle mousetrap", placeholder: this.props.subtitlePlaceholder || e("Enter subtitle…"), maxLength: 200, autoHeight: !0, inline: !0, value: (n = this.state.doc) == null ? void 0 : n.subtitle, onInput: () => this.onEdit() }) } maybeRemoveBadVoiceoverAndInform() { var e; if (_a((e = this.state.doc) == null ? void 0 : e.voiceoverUpload)) { let n = !1; return p(xr, { isOpen: !0, onDeleteAudio: () => { n = !0, this.removeVoiceover() }, onDismiss: () => { n || this.removeVoiceover() } }) } return null } render() { var i, c, l, u, d, m, f, h, g, b, x, v, w, E, _, k, M, y, T; const { pub: e, setIsDrawerOpen: n, setInitialDrawerTab: s, openDrawerId: a } = this.props, o = `editor typography ${this.props.className||""} ${this.getClassName()||""} use-theme-bg`; if (this.state.loadingError) return p("div", { className: o }, this.renderMetadata(), p("div", { className: "editor-scroll" }, this.renderHeader(), p("div", { className: "main-loader" }, this.renderLoadingError(this.state.loadingError)))); if (!this.state.loaded) return p("div", { className: o }, this.renderMetadata(), p("div", { className: "editor-scroll" }, this.renderHeader(), p(xe, { flex: "grow", justifyContent: "center", alignItems: "center", padding: 32 }, p(Sn, null)))); const r = !!(this.state.podcastUploading || this.state.podcastPreviewUploading); return p(fg, { isUploadingMedia: r, podcastUpload: (c = (i = this.state.doc) == null ? void 0 : i.podcastUpload) != null ? c : null, postId: (u = ((l = this.state.post) == null ? void 0 : l.id) || this.props.post_id) != null ? u : null, videoUpload: (m = (d = this.state.doc) == null ? void 0 : d.videoUpload) != null ? m : null }, p("div", { className: o, onDragOver: this.allowDropFile }, this.renderMetadata(), this.renderErrors(), p(Mre, { node: this.state.fileEdit, onDone: this.fileEditDone }), p(Ire, { pub: e, image: this.state.imageToWatermark, onDone: this.imageWatermarkDone }), this.renderHeader(), p(Rae, { isAdhocEmail: this.isEmailOnly() || this.getPostType && ["adhoc_email"].includes((f = this.getPostType()) != null ? f : ""), canAddPaywall: this.canSetPaywall(), editor: this.tipTapEditor, insertImageFile: this.insertImageFile, publication: e, postId: ((h = this.state.post) == null ? void 0 : h.id) || this.props.post_id, get_coupons: this.getCoupons, insert_coupon: this.insertCoupon, setPostPaidForPaywall: this.setPostPaidForPaywall, audioEmbedsEnabled: this.getPostType && ["newsletter", "thread", "podcast", "video", "page"].includes(this.getPostType()), voiceoverEnabled: this.getPostType && this.getPostType() === "newsletter", setPostId: this.getPostType() === null ? null : this.setPostId, showAudioEduTooltip: this.state.showAudioEduTooltip, hideSharePostAndComment: this.state.hideSharePostAndComment, showingDrawerName: a, setShowDrawer: D => { n == null || n({ drawerId: D, isOpen: !0 }) }, writerReferralCode: this.state.writerReferralCode, disabled: this.state.isFrozen, user: (g = this.props) == null ? void 0 : g.user }), p("div", { className: "editor-scroll dragging" }, p("div", { className: fe("post typography container", { disabled: this.state.isFrozen }) }, p(Y, { gap: 24 }, p(Y, { gap: 12 }, this.renderFirst(), this.renderAboveTitle()), this.shouldRenderVideo() && p(Ta, { ref: D => this._videoEditor = D, pub: this.props.pub, mediaType: "video", mediaUploadId: this.state.doc.video_upload_id, mediaUpload: (b = this.state.post) == null ? void 0 : b.draftVideoUpload, postId: ((x = this.state.post) == null ? void 0 : x.id) || this.props.post_id, setPostId: this.setPostId, onChange: () => { this.onEdit({ force: !0 }) }, videoFeature: "hero", initialFile: null }), this.shouldRenderPodcast() && p(Lie, { pub: e, sectionId: (E = (v = this.state.post) == null ? void 0 : v.draft_section_id) != null ? E : (w = this.state.post) == null ? void 0 : w.section_id, postTitle: (M = (_ = this.state.post) == null ? void 0 : _.draft_title) != null ? M : (k = this.state.post) == null ? void 0 : k.title, postId: ((y = this.state.post) == null ? void 0 : y.id) || this.props.post_id, podcastUpload: this.state.doc.podcastUpload, podcastPreviewUpload: this.state.doc.podcastPreviewUpload, free_podcast_url: this.state.doc.free_podcast_url, podcast_url: this.state.doc.podcast_url, podcast_duration: this.state.doc.podcast_duration, uploading: r, isDrawerOpen: a === "podcast", onOpenDrawer: ({ mediaType: D, skipToRecordStep: C, isOpen: L = !0, initialTab: R }) => { R && (s == null || s(R)), n == null || n({ isOpen: L, drawerId: "podcast", variant: "push", onOpenCallback: () => this.setState({ podcastMediaType: D, skipToRecordStep: C }) }) }, onSelectFile: ({ file: D, mediaType: C }) => { this.setState({ droppedPodcastFile: D, podcastMediaType: C }) }, onRemovePodcast: this.removePodcast, onRemovePodcastPreview: this.removePodcastPreview, onRemoveLegacyPodcast: this.removeLegacyPodcast, onRemoveVideoPodcast: this.removeVideoPodcast, onPodcastUploadChanged: this.onPodcastUploadChanged, onPodcastPreviewUploadChanged: this.onPodcastPreviewUploadChanged, onVideoPodcastUploadChanged: this.onVideoPodcastUploadChanged, mediaType: this.state.podcastMediaType }), p(Y, { gap: 8 }, this.shouldRenderTitle() && this.getTitle(), this.shouldRenderSubtitle() && this.getSubTitle()), this.renderBelowSubtitle(), this.maybeRemoveBadVoiceoverAndInform(), this.shouldRenderVoiceover() && p(jie, { pub: e, postId: ((T = this.state.post) == null ? void 0 : T.id) || this.props.post_id, voiceoverUpload: this.state.doc.voiceoverUpload, onRemoveVoiceover: this.removeVoiceover, onOpenDrawer: () => { n == null || n({ isOpen: !0, drawerId: "voiceover" }) }, isDrawerOpen: a === "voiceover", onVoiceoverUploadChanged: this.onVoiceoverUploadChanged }), this.tipTapEditor && p(Rh, { className: "post-editor markup mousetrap", editor: this.tipTapEditor }), this.renderBelowEditor())), this.renderBottomBar()), this.renderModals())) } } export { lb as A, rle as B, Ht as C, Yv as D, Cb as H, Ir as K, mi as L, Go as M, Mr as P, vx as S, xse as V, tc as a, Ex as b, ev as c, sle as d, Lr as e, cx as f, Cre as g, ym as h, ri as i, of as j, hre as k, Tm as l, Jae as m, ole as n, ze as o, _Z as p, _re as q, Rr as r, Tx as s, lre as t, Xb as u, ale as v, vae as w, cf as x, fb as y, yie as z };