1!function(c) {
2    var s = c.config.menuSettings, r = {}, t = MathJax.Ajax.config.path;
3    t.a11y || (t.a11y = c.config.root + "/extensions/a11y");
4    var l = MathJax.Extension["auto-collapse"] = {
5        version: "1.6.0",
6        config: c.CombineConfig("auto-collapse", {
7            disabled: !1
8        }),
9        dependents: [],
10        Enable: function(t, e) {
11            s.autocollapse = !0, e && (r.autocollapse = !0), this.config.disabled = !1, MathJax.Extension.collapsible.Enable(!1, e),
12            t && c.Queue([ "Reprocess", c ], [ "CollapseWideMath", this ]);
13        },
14        Disable: function(t, e) {
15            s.autocollapse = !1, e && (r.autocollapse = !1), this.config.disabled = !0;
16            for (var n = this.dependents.length - 1; 0 <= n; n--) {
17                var o = this.dependents[n];
18                o.Disable && o.Disable(!1, e);
19            }
20            t && c.Queue([ "Rerender", c ]);
21        },
22        Dependent: function(t) {
23            this.dependents.push(t);
24        },
25        Startup: function() {
26            var t = MathJax.Extension.collapsible;
27            t && t.Dependent(this), c.postInputHooks.Add([ "Filter", l ], 150), c.Queue(function() {
28                return l.CollapseWideMath();
29            }), window.addEventListener ? window.addEventListener("resize", l.resizeHandler, !1) : window.attachEvent ? window.attachEvent("onresize", l.resizeHandler) : window.onresize = l.resizeHandler;
30        },
31        Filter: function(t, e, n) {
32            t.enriched && !this.config.disabled && ("block" === t.root.Get("display") || n.parentNode.childNodes.length <= 3) && (t.root.SRE = {
33                action: this.Actions(t.root)
34            });
35        },
36        Actions: function(t) {
37            var e = [];
38            return this.getActions(t, 0, e), this.sortActions(e);
39        },
40        getActions: function(t, e, n) {
41            if (!t.isToken && t.data) {
42                e++;
43                for (var o, i = 0, a = t.data.length; i < a; i++) {
44                    t.data[i] && ((o = t.data[i]).collapsible ? (n[e] || (n[e] = []), n[e].push(o),
45                    this.getActions(o.data[1], e, n)) : this.getActions(o, e, n));
46                }
47            }
48        },
49        sortActions: function(t) {
50            for (var e = [], n = 0, o = t.length; n < o; n++) t[n] && (e = e.concat(t[n].sort(this.sortActionsBy)));
51            return e;
52        },
53        sortActionsBy: function(t, e) {
54            return (t = t.data[1].complexity) < (e = e.data[1].complexity) ? -1 : e < t ? 1 : 0;
55        },
56        CollapseWideMath: function(t) {
57            if (!this.config.disabled) {
58                this.GetContainerWidths(t);
59                var e = c.getAllJax(t), n = {
60                    collapse: [],
61                    jax: e,
62                    m: e.length,
63                    i: 0,
64                    changed: !1
65                };
66                return this.collapseState(n);
67            }
68        },
69        collapseState: function(t) {
70            for (var e = t.collapse; t.i < t.m; ) {
71                var n = t.jax[t.i], o = n.root.SRE;
72                if (t.changed = !1, o && o.action.length && (o.cwidth < o.m || o.cwidth > o.M)) {
73                    var i = this.getActionWidths(n, t);
74                    if (i) return i;
75                    this.collapseActions(o, t), t.changed && e.push(n.SourceElement());
76                }
77                t.i++;
78            }
79            if (0 !== e.length) return 1 === e.length && (e = e[0]), c.Rerender(e);
80        },
81        collapseActions: function(t, e) {
82            for (var n = t.width, o = n, i = 1e6, a = t.action.length - 1; 0 <= a; a--) {
83                var s = t.action[a], r = s.selection;
84                n > t.cwidth ? (s.selection = 1, o = s.SREwidth, i = n) : s.selection = 2, n = s.SREwidth,
85                t.DOMupdate ? document.getElementById(s.id).setAttribute("selection", s.selection) : s.selection !== r && (e.changed = !0);
86            }
87            t.m = o, t.M = i;
88        },
89        getActionWidths: function(t, e) {
90            if (!t.root.SRE.actionWidths) {
91                MathJax.OutputJax[t.outputJax].getMetrics(t);
92                try {
93                    this.computeActionWidths(t);
94                } catch (t) {
95                    if (!t.restart) throw t;
96                    return MathJax.Callback.After([ "collapseState", this, e ], t.restart);
97                }
98                e.changed = !0;
99            }
100            return null;
101        },
102        computeActionWidths: function(t) {
103            var e, n = t.root.SRE, o = n.action, i = {};
104            for (n.width = t.sreGetRootWidth(i), e = o.length - 1; 0 <= e; e--) o[e].selection = 2;
105            for (e = o.length - 1; 0 <= e; e--) {
106                var a = o[e];
107                null == a.SREwidth && (a.selection = 1, a.SREwidth = t.sreGetActionWidth(i, a));
108            }
109            n.actionWidths = !0;
110        },
111        GetContainerWidths: function(t) {
112            for (var e, n, o, i = c.getAllJax(t), a = MathJax.HTML.Element("span", {
113                style: {
114                    display: "block"
115                }
116            }), s = [], r = 0, l = i.length; r < l; r++) o = (n = i[r]).root, SRE = o.SRE, SRE && SRE.action.length && (null == SRE.width && (n.sreGetMetrics(),
117            SRE.m = SRE.width, SRE.M = 1e6), (e = n.SourceElement()).previousSibling.style.display = "none",
118            e.parentNode.insertBefore(a.cloneNode(!1), e), s.push([ n, e ]));
119            for (r = 0, l = s.length; r < l; r++) n = s[r][0], (e = s[r][1]).previousSibling.offsetWidth && (n.root.SRE.cwidth = e.previousSibling.offsetWidth * n.root.SRE.em);
120            for (r = 0, l = s.length; r < l; r++) n = s[r][0], (e = s[r][1]).parentNode.removeChild(e.previousSibling),
121            e.previousSibling.style.display = "";
122        },
123        timer: null,
124        running: !1,
125        retry: !1,
126        saved_delay: 0,
127        resizeHandler: function(t) {
128            l.config.disabled || (l.running ? l.retry = !0 : (l.timer && clearTimeout(l.timer),
129            l.timer = setTimeout(l.resizeAction, 100)));
130        },
131        resizeAction: function() {
132            l.timer = null, l.running = !0, c.Queue(function() {
133                l.saved_delay = c.processSectionDelay, c.processSectionDelay = 0;
134            }, [ "CollapseWideMath", l ], [ "resizeCheck", l ]);
135        },
136        resizeCheck: function() {
137            l.running = !1, c.processSectionDelay = l.saved_delay, l.retry && (l.retry = !1,
138            setTimeout(l.resizeHandler, 0));
139        }
140    };
141    c.Register.StartupHook("End Extensions", function() {
142        null == s.autocollapse ? s.autocollapse = !l.config.disabled : l.config.disabled = !s.autocollapse,
143        c.Register.StartupHook("MathMenu Ready", function() {
144            r = MathJax.Menu.cookie;
145            var t, e = MathJax.Menu.ITEM, n = MathJax.Menu.menu, o = e.CHECKBOX([ "AutoCollapse", "Auto Collapse" ], "autocollapse", {
146                action: function(t) {
147                    l[s.autocollapse ? "Enable" : "Disable"](!0, !0), MathJax.Menu.saveCookie();
148                }
149            }), i = (n.FindId("Accessibility") || {}).submenu;
150            i ? null !== (t = i.IndexOfId("AutoCollapse")) ? i.items[t] = o : (t = i.IndexOfId("CollapsibleMath"),
151            i.items.splice(t + 1, 0, o)) : (t = n.IndexOfId("CollapsibleMath"), n.items.splice(t + 1, 0, o));
152            function a() {
153                l[s.autocollapse ? "Enable" : "Disable"]();
154            }
155            MathJax.Extension.collapse ? a() : MathJax.Hub.Register.StartupHook("Auto Collapse Ready", a);
156        }, 25);
157    }, 25);
158}(MathJax.Hub), MathJax.ElementJax.Augment({
159    sreGetMetrics: function() {
160        MathJax.OutputJax[this.outputJax].sreGetMetrics(this, this.root.SRE);
161    },
162    sreGetRootWidth: function(t) {
163        return MathJax.OutputJax[this.outputJax].sreGetRootWidth(this, t);
164    },
165    sreGetActionWidth: function(t, e) {
166        return MathJax.OutputJax[this.outputJax].sreGetActionWidth(this, t, e);
167    }
168}), MathJax.OutputJax.Augment({
169    getMetrics: function() {},
170    sreGetMetrics: function(t, e) {
171        e.cwidth = 1e6, e.width = 0, e.em = 12;
172    },
173    sreGetRootWidth: function(t, e) {
174        return 0;
175    },
176    sreGetActionWidth: function(t, e, n) {
177        return 0;
178    }
179}), MathJax.Hub.Register.StartupHook("HTML-CSS Jax Ready", function() {
180    MathJax.OutputJax["HTML-CSS"].Augment({
181        sreGetMetrics: function(t, e) {
182            e.width = t.root.data[0].HTMLspanElement().parentNode.bbox.w, e.em = 1 / t.HTMLCSS.em / t.HTMLCSS.scale;
183        },
184        sreGetRootWidth: function(t, e) {
185            var n = t.root.data[0].HTMLspanElement();
186            return e.box = n.parentNode, e.box.bbox.w;
187        },
188        sreGetActionWidth: function(t, e, n) {
189            return t.root.data[0].toHTML(e.box).bbox.w;
190        }
191    });
192}), MathJax.Hub.Register.StartupHook("SVG Jax Ready", function() {
193    MathJax.OutputJax.SVG.Augment({
194        getMetrics: function(t) {
195            this.em = MathJax.ElementJax.mml.mbase.prototype.em = t.SVG.em, this.ex = t.SVG.ex,
196            this.linebreakWidth = t.SVG.lineWidth, this.cwidth = t.SVG.cwidth;
197        },
198        sreGetMetrics: function(t, e) {
199            e.width = t.root.SVGdata.w / 1e3, e.em = 1 / t.SVG.em;
200        },
201        sreGetRootWidth: function(t, e) {
202            return e.span = document.getElementById(t.inputID + "-Frame"), t.root.SVGdata.w / 1e3;
203        },
204        sreGetActionWidth: function(t, e, n) {
205            this.mathDiv = e.span, e.span.appendChild(this.textSVG);
206            try {
207                t.root.data[0].toSVG();
208            } catch (t) {
209                var o = t;
210            }
211            if (e.span.removeChild(this.textSVG), o) throw o;
212            return t.root.data[0].SVGdata.w / 1e3;
213        }
214    });
215}), MathJax.Hub.Register.StartupHook("CommonHTML Jax Ready", function() {
216    MathJax.OutputJax.CommonHTML.Augment({
217        sreGetMetrics: function(t, e) {
218            e.width = t.root.CHTML.w, e.em = 1 / t.CHTML.em / t.CHTML.scale;
219        },
220        sreGetRootWidth: function(t, e) {
221            return e.span = document.getElementById(t.inputID + "-Frame").firstChild, e.tmp = document.createElement("span"),
222            e.tmp.className = e.span.className, t.root.CHTML.w / t.CHTML.scale;
223        },
224        sreGetActionWidth: function(t, e, n) {
225            e.span.parentNode.replaceChild(e.tmp, e.span), MathJax.OutputJax.CommonHTML.CHTMLnode = e.tmp;
226            try {
227                t.root.data[0].toCommonHTML(e.tmp);
228            } catch (t) {
229                var o = t;
230            }
231            if (e.tmp.parentNode.replaceChild(e.span, e.tmp), o) throw o;
232            return t.root.data[0].CHTML.w / t.CHTML.scale;
233        }
234    });
235}), MathJax.Hub.Register.StartupHook("NativeMML Jax Ready", function() {
236    MathJax.OutputJax.NativeMML.Augment({
237        sreGetMetrics: function(t, e) {
238            var n = document.getElementById(t.inputID + "-Frame");
239            e.width = n.offsetWidth, e.em = 1, e.DOMupdate = !0;
240        },
241        sreGetRootWidth: function(t, e) {
242            return e.span = document.getElementById(t.inputID + "-Frame").firstChild, e.span.offsetWidth;
243        },
244        sreGetActionWidth: function(t, e, n) {
245            return document.getElementById(n.id).setAttribute("selection", 1), e.span.offsetWidth;
246        }
247    });
248}), MathJax.Ajax.Require("[a11y]/collapsible.js"), MathJax.Hub.Register.StartupHook("Collapsible Ready", function() {
249    MathJax.Extension["auto-collapse"].Startup(), MathJax.Hub.Startup.signal.Post("Auto Collapse Ready"),
250    MathJax.Ajax.loadComplete("[a11y]/auto-collapse.js");
251});