summaryrefslogtreecommitdiff
path: root/samples/toolbarconfigurator/lib/codemirror/codemirror.js
blob: ea70793d7ae3900f91a428875a3f1ac8efda1679 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
(function(q) { if ("object" == typeof exports && "object" == typeof module) module.exports = q(); else { if ("function" == typeof define && define.amd) return define([], q); this.CodeMirror = q() } })(function() {
	function q(a, b) {
		if (!(this instanceof q)) return new q(a, b); this.options = b = b ? V(b) : {}; V(qf, b, !1); wc(b); var c = b.value; "string" == typeof c && (c = new P(c, b.mode)); this.doc = c; var d = new q.inputStyles[b.inputStyle](this), d = this.display = new rf(a, c, d); d.wrapper.CodeMirror = this; Ad(this); Bd(this); b.lineWrapping && (this.display.wrapper.className +=
			" CodeMirror-wrap"); b.autofocus && !ab && d.input.focus(); Cd(this); this.state = { keyMaps: [], overlays: [], modeGen: 0, overwrite: !1, delayingBlurEvent: !1, focused: !1, suppressEdits: !1, pasteIncoming: !1, cutIncoming: !1, draggingText: !1, highlight: new bb, keySeq: null, specialChars: null }; var e = this; B && 11 > C && setTimeout(function() { e.display.input.reset(!0) }, 20); sf(this); Dd || (tf(), Dd = !0); Ja(this); this.curOp.forceUpdate = !0; Ed(this, c); b.autofocus && !ab || e.hasFocus() ? setTimeout(cb(xc, this), 20) : db(this); for (var f in Ka) if (Ka.hasOwnProperty(f)) Ka[f](this,
				b[f], Fd); Gd(this); b.finishInit && b.finishInit(this); for (c = 0; c < yc.length; ++c)yc[c](this); La(this); J && b.lineWrapping && "optimizelegibility" == getComputedStyle(d.lineDiv).textRendering && (d.lineDiv.style.textRendering = "auto")
	} function rf(a, b, c) {
		this.input = c; this.scrollbarFiller = t("div", null, "CodeMirror-scrollbar-filler"); this.scrollbarFiller.setAttribute("cm-not-content", "true"); this.gutterFiller = t("div", null, "CodeMirror-gutter-filler"); this.gutterFiller.setAttribute("cm-not-content", "true"); this.lineDiv =
			t("div", null, "CodeMirror-code"); this.selectionDiv = t("div", null, null, "position: relative; z-index: 1"); this.cursorDiv = t("div", null, "CodeMirror-cursors"); this.measure = t("div", null, "CodeMirror-measure"); this.lineMeasure = t("div", null, "CodeMirror-measure"); this.lineSpace = t("div", [this.measure, this.lineMeasure, this.selectionDiv, this.cursorDiv, this.lineDiv], null, "position: relative; outline: none"); this.mover = t("div", [t("div", [this.lineSpace], "CodeMirror-lines")], null, "position: relative"); this.sizer = t("div",
				[this.mover], "CodeMirror-sizer"); this.sizerWidth = null; this.heightForcer = t("div", null, null, "position: absolute; height: " + Hd + "px; width: 1px;"); this.gutters = t("div", null, "CodeMirror-gutters"); this.lineGutter = null; this.scroller = t("div", [this.sizer, this.heightForcer, this.gutters], "CodeMirror-scroll"); this.scroller.setAttribute("tabIndex", "-1"); this.wrapper = t("div", [this.scrollbarFiller, this.gutterFiller, this.scroller], "CodeMirror"); B && 8 > C && (this.gutters.style.zIndex = -1, this.scroller.style.paddingRight =
					0); J || wa && ab || (this.scroller.draggable = !0); a && (a.appendChild ? a.appendChild(this.wrapper) : a(this.wrapper)); this.reportedViewFrom = this.reportedViewTo = this.viewFrom = this.viewTo = b.first; this.view = []; this.externalMeasured = this.renderedView = null; this.lastWrapHeight = this.lastWrapWidth = this.viewOffset = 0; this.updateLineNumbers = null; this.nativeBarWidth = this.barHeight = this.barWidth = 0; this.scrollbarsClipped = !1; this.lineNumWidth = this.lineNumInnerWidth = this.lineNumChars = null; this.alignWidgets = !1; this.maxLine = this.cachedCharWidth =
						this.cachedTextHeight = this.cachedPaddingH = null; this.maxLineLength = 0; this.maxLineChanged = !1; this.wheelDX = this.wheelDY = this.wheelStartX = this.wheelStartY = null; this.shift = !1; this.activeTouch = this.selForContextMenu = null; c.init(this)
	} function zc(a) { a.doc.mode = q.getMode(a.options, a.doc.modeOption); eb(a) } function eb(a) { a.doc.iter(function(a) { a.stateAfter && (a.stateAfter = null); a.styles && (a.styles = null) }); a.doc.frontier = a.doc.first; fb(a, 100); a.state.modeGen++; a.curOp && Q(a) } function Id(a) {
		var b = xa(a.display),
		c = a.options.lineWrapping, d = c && Math.max(5, a.display.scroller.clientWidth / gb(a.display) - 3); return function(e) { if (ya(a.doc, e)) return 0; var f = 0; if (e.widgets) for (var g = 0; g < e.widgets.length; g++)e.widgets[g].height && (f += e.widgets[g].height); return c ? f + (Math.ceil(e.text.length / d) || 1) * b : f + b }
	} function Ac(a) { var b = a.doc, c = Id(a); b.iter(function(a) { var b = c(a); b != a.height && ca(a, b) }) } function Bd(a) {
		a.display.wrapper.className = a.display.wrapper.className.replace(/\s*cm-s-\S+/g, "") + a.options.theme.replace(/(^|\s)\s*/g,
			" cm-s-"); hb(a)
	} function ib(a) { Ad(a); Q(a); setTimeout(function() { Bc(a) }, 20) } function Ad(a) { var b = a.display.gutters, c = a.options.gutters; za(b); for (var d = 0; d < c.length; ++d) { var e = c[d], f = b.appendChild(t("div", null, "CodeMirror-gutter " + e)); "CodeMirror-linenumbers" == e && (a.display.lineGutter = f, f.style.width = (a.display.lineNumWidth || 1) + "px") } b.style.display = d ? "" : "none"; Cc(a) } function Cc(a) { a.display.sizer.style.marginLeft = a.display.gutters.offsetWidth + "px" } function Kb(a) {
		if (0 == a.height) return 0; for (var b = a.text.length,
			c, d = a; c = Aa(d, !0);)c = c.find(0, !0), d = c.from.line, b += c.from.ch - c.to.ch; for (d = a; c = Aa(d, !1);)c = c.find(0, !0), b -= d.text.length - c.from.ch, d = c.to.line, b += d.text.length - c.to.ch; return b
	} function Dc(a) { var b = a.display; a = a.doc; b.maxLine = u(a, a.first); b.maxLineLength = Kb(b.maxLine); b.maxLineChanged = !0; a.iter(function(a) { var d = Kb(a); d > b.maxLineLength && (b.maxLineLength = d, b.maxLine = a) }) } function wc(a) {
		var b = D(a.gutters, "CodeMirror-linenumbers"); -1 == b && a.lineNumbers ? a.gutters = a.gutters.concat(["CodeMirror-linenumbers"]) :
			-1 < b && !a.lineNumbers && (a.gutters = a.gutters.slice(0), a.gutters.splice(b, 1))
	} function jb(a) { var b = a.display, c = b.gutters.offsetWidth, d = Math.round(a.doc.height + Ec(a.display)); return { clientHeight: b.scroller.clientHeight, viewHeight: b.wrapper.clientHeight, scrollWidth: b.scroller.scrollWidth, clientWidth: b.scroller.clientWidth, viewWidth: b.wrapper.clientWidth, barLeft: a.options.fixedGutter ? c : 0, docHeight: d, scrollHeight: d + da(a) + b.barHeight, nativeBarWidth: b.nativeBarWidth, gutterWidth: c } } function Fc(a, b, c) {
		this.cm =
		c; var d = this.vert = t("div", [t("div", null, null, "min-width: 1px")], "CodeMirror-vscrollbar"), e = this.horiz = t("div", [t("div", null, null, "height: 100%; min-height: 1px")], "CodeMirror-hscrollbar"); a(d); a(e); v(d, "scroll", function() { d.clientHeight && b(d.scrollTop, "vertical") }); v(e, "scroll", function() { e.clientWidth && b(e.scrollLeft, "horizontal") }); this.checkedOverlay = !1; B && 8 > C && (this.horiz.style.minHeight = this.vert.style.minWidth = "18px")
	} function Gc() { } function Cd(a) {
		a.display.scrollbars && (a.display.scrollbars.clear(),
			a.display.scrollbars.addClass && kb(a.display.wrapper, a.display.scrollbars.addClass)); a.display.scrollbars = new q.scrollbarModel[a.options.scrollbarStyle](function(b) { a.display.wrapper.insertBefore(b, a.display.scrollbarFiller); v(b, "mousedown", function() { a.state.focused && setTimeout(function() { a.display.input.focus() }, 0) }); b.setAttribute("cm-not-content", "true") }, function(b, c) { "horizontal" == c ? Ma(a, b) : lb(a, b) }, a); a.display.scrollbars.addClass && mb(a.display.wrapper, a.display.scrollbars.addClass)
	} function Na(a,
		b) { b || (b = jb(a)); var c = a.display.barWidth, d = a.display.barHeight; Jd(a, b); for (var e = 0; 4 > e && c != a.display.barWidth || d != a.display.barHeight; e++)c != a.display.barWidth && a.options.lineWrapping && Lb(a), Jd(a, jb(a)), c = a.display.barWidth, d = a.display.barHeight } function Jd(a, b) {
			var c = a.display, d = c.scrollbars.update(b); c.sizer.style.paddingRight = (c.barWidth = d.right) + "px"; c.sizer.style.paddingBottom = (c.barHeight = d.bottom) + "px"; d.right && d.bottom ? (c.scrollbarFiller.style.display = "block", c.scrollbarFiller.style.height =
				d.bottom + "px", c.scrollbarFiller.style.width = d.right + "px") : c.scrollbarFiller.style.display = ""; d.bottom && a.options.coverGutterNextToScrollbar && a.options.fixedGutter ? (c.gutterFiller.style.display = "block", c.gutterFiller.style.height = d.bottom + "px", c.gutterFiller.style.width = b.gutterWidth + "px") : c.gutterFiller.style.display = ""
		} function Hc(a, b, c) {
			var d = c && null != c.top ? Math.max(0, c.top) : a.scroller.scrollTop, d = Math.floor(d - a.lineSpace.offsetTop), e = c && null != c.bottom ? c.bottom : d + a.wrapper.clientHeight, d = Ba(b, d),
			e = Ba(b, e); if (c && c.ensure) { var f = c.ensure.from.line; c = c.ensure.to.line; f < d ? (d = f, e = Ba(b, ea(u(b, f)) + a.wrapper.clientHeight)) : Math.min(c, b.lastLine()) >= e && (d = Ba(b, ea(u(b, c)) - a.wrapper.clientHeight), e = c) } return { from: d, to: Math.max(e, d + 1) }
		} function Bc(a) {
			var b = a.display, c = b.view; if (b.alignWidgets || b.gutters.firstChild && a.options.fixedGutter) {
				for (var d = Ic(b) - b.scroller.scrollLeft + a.doc.scrollLeft, e = b.gutters.offsetWidth, f = d + "px", g = 0; g < c.length; g++)if (!c[g].hidden) {
					a.options.fixedGutter && c[g].gutter && (c[g].gutter.style.left =
						f); var h = c[g].alignable; if (h) for (var k = 0; k < h.length; k++)h[k].style.left = f
				} a.options.fixedGutter && (b.gutters.style.left = d + e + "px")
			}
		} function Gd(a) {
			if (!a.options.lineNumbers) return !1; var b = a.doc, b = Jc(a.options, b.first + b.size - 1), c = a.display; if (b.length != c.lineNumChars) {
				var d = c.measure.appendChild(t("div", [t("div", b)], "CodeMirror-linenumber CodeMirror-gutter-elt")), e = d.firstChild.offsetWidth, d = d.offsetWidth - e; c.lineGutter.style.width = ""; c.lineNumInnerWidth = Math.max(e, c.lineGutter.offsetWidth - d) + 1; c.lineNumWidth =
					c.lineNumInnerWidth + d; c.lineNumChars = c.lineNumInnerWidth ? b.length : -1; c.lineGutter.style.width = c.lineNumWidth + "px"; Cc(a); return !0
			} return !1
		} function Jc(a, b) { return String(a.lineNumberFormatter(b + a.firstLineNumber)) } function Ic(a) { return a.scroller.getBoundingClientRect().left - a.sizer.getBoundingClientRect().left } function Mb(a, b, c) {
			var d = a.display; this.viewport = b; this.visible = Hc(d, a.doc, b); this.editorIsHidden = !d.wrapper.offsetWidth; this.wrapperHeight = d.wrapper.clientHeight; this.wrapperWidth = d.wrapper.clientWidth;
			this.oldDisplayWidth = pa(a); this.force = c; this.dims = Kc(a); this.events = []
		} function Lc(a, b) {
			var c = a.display, d = a.doc; if (b.editorIsHidden) return qa(a), !1; if (!b.force && b.visible.from >= c.viewFrom && b.visible.to <= c.viewTo && (null == c.updateLineNumbers || c.updateLineNumbers >= c.viewTo) && c.renderedView == c.view && 0 == Kd(a)) return !1; Gd(a) && (qa(a), b.dims = Kc(a)); var e = d.first + d.size, f = Math.max(b.visible.from - a.options.viewportMargin, d.first), g = Math.min(e, b.visible.to + a.options.viewportMargin); c.viewFrom < f && 20 > f - c.viewFrom &&
				(f = Math.max(d.first, c.viewFrom)); c.viewTo > g && 20 > c.viewTo - g && (g = Math.min(e, c.viewTo)); ra && (f = Mc(a.doc, f), g = Ld(a.doc, g)); d = f != c.viewFrom || g != c.viewTo || c.lastWrapHeight != b.wrapperHeight || c.lastWrapWidth != b.wrapperWidth; e = a.display; 0 == e.view.length || f >= e.viewTo || g <= e.viewFrom ? (e.view = Nb(a, f, g), e.viewFrom = f) : (e.viewFrom > f ? e.view = Nb(a, f, e.viewFrom).concat(e.view) : e.viewFrom < f && (e.view = e.view.slice(Ca(a, f))), e.viewFrom = f, e.viewTo < g ? e.view = e.view.concat(Nb(a, e.viewTo, g)) : e.viewTo > g && (e.view = e.view.slice(0,
					Ca(a, g)))); e.viewTo = g; c.viewOffset = ea(u(a.doc, c.viewFrom)); a.display.mover.style.top = c.viewOffset + "px"; g = Kd(a); if (!d && 0 == g && !b.force && c.renderedView == c.view && (null == c.updateLineNumbers || c.updateLineNumbers >= c.viewTo)) return !1; f = fa(); 4 < g && (c.lineDiv.style.display = "none"); uf(a, c.updateLineNumbers, b.dims); 4 < g && (c.lineDiv.style.display = ""); c.renderedView = c.view; f && fa() != f && f.offsetHeight && f.focus(); za(c.cursorDiv); za(c.selectionDiv); c.gutters.style.height = 0; d && (c.lastWrapHeight = b.wrapperHeight, c.lastWrapWidth =
						b.wrapperWidth, fb(a, 400)); c.updateLineNumbers = null; return !0
		} function Md(a, b) {
			for (var c = b.viewport, d = !0; ; d = !1) { if (!d || !a.options.lineWrapping || b.oldDisplayWidth == pa(a)) if (c && null != c.top && (c = { top: Math.min(a.doc.height + Ec(a.display) - Nc(a), c.top) }), b.visible = Hc(a.display, a.doc, c), b.visible.from >= a.display.viewFrom && b.visible.to <= a.display.viewTo) break; if (!Lc(a, b)) break; Lb(a); d = jb(a); nb(a); Oc(a, d); Na(a, d) } b.signal(a, "update", a); if (a.display.viewFrom != a.display.reportedViewFrom || a.display.viewTo != a.display.reportedViewTo) b.signal(a,
				"viewportChange", a, a.display.viewFrom, a.display.viewTo), a.display.reportedViewFrom = a.display.viewFrom, a.display.reportedViewTo = a.display.viewTo
		} function Pc(a, b) { var c = new Mb(a, b); if (Lc(a, c)) { Lb(a); Md(a, c); var d = jb(a); nb(a); Oc(a, d); Na(a, d); c.finish() } } function Oc(a, b) { a.display.sizer.style.minHeight = b.docHeight + "px"; var c = b.docHeight + a.display.barHeight; a.display.heightForcer.style.top = c + "px"; a.display.gutters.style.height = Math.max(c + da(a), b.clientHeight) + "px" } function Lb(a) {
			a = a.display; for (var b =
				a.lineDiv.offsetTop, c = 0; c < a.view.length; c++) { var d = a.view[c], e; if (!d.hidden) { if (B && 8 > C) { var f = d.node.offsetTop + d.node.offsetHeight; e = f - b; b = f } else e = d.node.getBoundingClientRect(), e = e.bottom - e.top; f = d.line.height - e; 2 > e && (e = xa(a)); if (.001 < f || -.001 > f) if (ca(d.line, e), Nd(d.line), d.rest) for (e = 0; e < d.rest.length; e++)Nd(d.rest[e]) } }
		} function Nd(a) { if (a.widgets) for (var b = 0; b < a.widgets.length; ++b)a.widgets[b].height = a.widgets[b].node.offsetHeight } function Kc(a) {
			for (var b = a.display, c = {}, d = {}, e = b.gutters.clientLeft,
				f = b.gutters.firstChild, g = 0; f; f = f.nextSibling, ++g)c[a.options.gutters[g]] = f.offsetLeft + f.clientLeft + e, d[a.options.gutters[g]] = f.clientWidth; return { fixedPos: Ic(b), gutterTotalWidth: b.gutters.offsetWidth, gutterLeft: c, gutterWidth: d, wrapperWidth: b.wrapper.clientWidth }
		} function uf(a, b, c) {
			function d(b) { var c = b.nextSibling; J && W && a.display.currentWheelTarget == b ? b.style.display = "none" : b.parentNode.removeChild(b); return c } for (var e = a.display, f = a.options.lineNumbers, g = e.lineDiv, h = g.firstChild, k = e.view, e = e.viewFrom,
				l = 0; l < k.length; l++) { var m = k[l]; if (!m.hidden) if (m.node && m.node.parentNode == g) { for (; h != m.node;)h = d(h); h = f && null != b && b <= e && m.lineNumber; m.changes && (-1 < D(m.changes, "gutter") && (h = !1), Od(a, m, e, c)); h && (za(m.lineNumber), m.lineNumber.appendChild(document.createTextNode(Jc(a.options, e)))); h = m.node.nextSibling } else { var p = vf(a, m, e, c); g.insertBefore(p, h) } e += m.size } for (; h;)h = d(h)
		} function Od(a, b, c, d) {
			for (var e = 0; e < b.changes.length; e++) {
				var f = b.changes[e]; if ("text" == f) {
					var f = b, g = f.text.className, h = Pd(a, f); f.text ==
						f.node && (f.node = h.pre); f.text.parentNode.replaceChild(h.pre, f.text); f.text = h.pre; h.bgClass != f.bgClass || h.textClass != f.textClass ? (f.bgClass = h.bgClass, f.textClass = h.textClass, Qc(f)) : g && (f.text.className = g)
				} else if ("gutter" == f) Qd(a, b, c, d); else if ("class" == f) Qc(b); else if ("widget" == f) { f = a; g = b; h = d; g.alignable && (g.alignable = null); for (var k = g.node.firstChild, l = void 0; k; k = l)l = k.nextSibling, "CodeMirror-linewidget" == k.className && g.node.removeChild(k); Rd(f, g, h) }
			} b.changes = null
		} function Ob(a) {
			a.node == a.text &&
			(a.node = t("div", null, null, "position: relative"), a.text.parentNode && a.text.parentNode.replaceChild(a.node, a.text), a.node.appendChild(a.text), B && 8 > C && (a.node.style.zIndex = 2)); return a.node
		} function Pd(a, b) { var c = a.display.externalMeasured; return c && c.line == b.line ? (a.display.externalMeasured = null, b.measure = c.measure, c.built) : Sd(a, b) } function Qc(a) {
			var b = a.bgClass ? a.bgClass + " " + (a.line.bgClass || "") : a.line.bgClass; b && (b += " CodeMirror-linebackground"); if (a.background) b ? a.background.className = b : (a.background.parentNode.removeChild(a.background),
				a.background = null); else if (b) { var c = Ob(a); a.background = c.insertBefore(t("div", null, b), c.firstChild) } a.line.wrapClass ? Ob(a).className = a.line.wrapClass : a.node != a.text && (a.node.className = ""); a.text.className = (a.textClass ? a.textClass + " " + (a.line.textClass || "") : a.line.textClass) || ""
		} function Qd(a, b, c, d) {
			b.gutter && (b.node.removeChild(b.gutter), b.gutter = null); var e = b.line.gutterMarkers; if (a.options.lineNumbers || e) {
				var f = Ob(b), g = b.gutter = t("div", null, "CodeMirror-gutter-wrapper", "left: " + (a.options.fixedGutter ?
					d.fixedPos : -d.gutterTotalWidth) + "px; width: " + d.gutterTotalWidth + "px"); a.display.input.setUneditable(g); f.insertBefore(g, b.text); b.line.gutterClass && (g.className += " " + b.line.gutterClass); !a.options.lineNumbers || e && e["CodeMirror-linenumbers"] || (b.lineNumber = g.appendChild(t("div", Jc(a.options, c), "CodeMirror-linenumber CodeMirror-gutter-elt", "left: " + d.gutterLeft["CodeMirror-linenumbers"] + "px; width: " + a.display.lineNumInnerWidth + "px"))); if (e) for (b = 0; b < a.options.gutters.length; ++b)c = a.options.gutters[b],
						(f = e.hasOwnProperty(c) && e[c]) && g.appendChild(t("div", [f], "CodeMirror-gutter-elt", "left: " + d.gutterLeft[c] + "px; width: " + d.gutterWidth[c] + "px"))
			}
		} function vf(a, b, c, d) { var e = Pd(a, b); b.text = b.node = e.pre; e.bgClass && (b.bgClass = e.bgClass); e.textClass && (b.textClass = e.textClass); Qc(b); Qd(a, b, c, d); Rd(a, b, d); return b.node } function Rd(a, b, c) { Td(a, b.line, b, c, !0); if (b.rest) for (var d = 0; d < b.rest.length; d++)Td(a, b.rest[d], b, c, !1) } function Td(a, b, c, d, e) {
			if (b.widgets) {
				var f = Ob(c), g = 0; for (b = b.widgets; g < b.length; ++g) {
					var h =
						b[g], k = t("div", [h.node], "CodeMirror-linewidget"); h.handleMouseEvents || k.setAttribute("cm-ignore-events", "true"); var l = h, m = k, p = d; if (l.noHScroll) { (c.alignable || (c.alignable = [])).push(m); var n = p.wrapperWidth; m.style.left = p.fixedPos + "px"; l.coverGutter || (n -= p.gutterTotalWidth, m.style.paddingLeft = p.gutterTotalWidth + "px"); m.style.width = n + "px" } l.coverGutter && (m.style.zIndex = 5, m.style.position = "relative", l.noHScroll || (m.style.marginLeft = -p.gutterTotalWidth + "px")); a.display.input.setUneditable(k); e && h.above ?
							f.insertBefore(k, c.gutter || c.text) : f.appendChild(k); L(h, "redraw")
				}
			}
		} function Rc(a) { return r(a.line, a.ch) } function Pb(a, b) { return 0 > y(a, b) ? b : a } function Qb(a, b) { return 0 > y(a, b) ? a : b } function Ud(a) { a.state.focused || (a.display.input.focus(), xc(a)) } function Rb(a) { return a.options.readOnly || a.doc.cantEdit } function Sc(a, b, c, d, e) {
			var f = a.doc; a.display.shift = !1; d || (d = f.sel); var g = sa(b), h = null; a.state.pasteIncoming && 1 < d.ranges.length && (X && X.join("\n") == b ? h = 0 == d.ranges.length % X.length && ob(X, sa) : g.length == d.ranges.length &&
				(h = ob(g, function(a) { return [a] }))); for (var k = d.ranges.length - 1; 0 <= k; k--) {
					var l = d.ranges[k], m = l.from(), p = l.to(); l.empty() && (c && 0 < c ? m = r(m.line, m.ch - c) : a.state.overwrite && !a.state.pasteIncoming && (p = r(p.line, Math.min(u(f, p.line).text.length, p.ch + A(g).length)))); var n = a.curOp.updateInput, m = { from: m, to: p, text: h ? h[k % h.length] : g, origin: e || (a.state.pasteIncoming ? "paste" : a.state.cutIncoming ? "cut" : "+input") }; Oa(a.doc, m); L(a, "inputRead", a, m); if (b && !a.state.pasteIncoming && a.options.electricChars && a.options.smartIndent &&
						100 > l.head.ch && (!k || d.ranges[k - 1].head.line != l.head.line)) { l = a.getModeAt(l.head); m = ta(m); p = !1; if (l.electricChars) for (var E = 0; E < l.electricChars.length; E++) { if (-1 < b.indexOf(l.electricChars.charAt(E))) { p = pb(a, m.line, "smart"); break } } else l.electricInput && l.electricInput.test(u(f, m.line).text.slice(0, m.ch)) && (p = pb(a, m.line, "smart")); p && L(a, "electricInput", a, m.line) }
				} Pa(a); a.curOp.updateInput = n; a.curOp.typing = !0; a.state.pasteIncoming = a.state.cutIncoming = !1
		} function Vd(a) {
			for (var b = [], c = [], d = 0; d < a.doc.sel.ranges.length; d++) {
				var e =
					a.doc.sel.ranges[d].head.line, e = { anchor: r(e, 0), head: r(e + 1, 0) }; c.push(e); b.push(a.getRange(e.anchor, e.head))
			} return { text: b, ranges: c }
		} function Wd(a) { a.setAttribute("autocorrect", "off"); a.setAttribute("autocapitalize", "off"); a.setAttribute("spellcheck", "false") } function Tc(a) { this.cm = a; this.prevInput = ""; this.pollingFast = !1; this.polling = new bb; this.hasSelection = this.inaccurateSelection = !1; this.composing = null } function Xd() {
			var a = t("textarea", null, null, "position: absolute; padding: 0; width: 1px; height: 1em; outline: none"),
			b = t("div", [a], null, "overflow: hidden; position: relative; width: 3px; height: 0px;"); J ? a.style.width = "1000px" : a.setAttribute("wrap", "off"); Qa && (a.style.border = "1px solid black"); Wd(a); return b
		} function Uc(a) { this.cm = a; this.lastAnchorNode = this.lastAnchorOffset = this.lastFocusNode = this.lastFocusOffset = null; this.polling = new bb; this.gracePeriod = !1 } function Yd(a, b) {
			var c = Vc(a, b.line); if (!c || c.hidden) return null; var d = u(a.doc, b.line), c = Zd(c, d, b.line); (d = Y(d)) && Sb(d, b.ch); d = $d(c.map, b.ch, "left"); d.offset =
				"right" == d.collapse ? d.end : d.start; return d
		} function Ra(a, b) { b && (a.bad = !0); return a } function Tb(a, b, c) { var d; if (b == a.display.lineDiv) { d = a.display.lineDiv.childNodes[c]; if (!d) return Ra(a.clipPos(r(a.display.viewTo - 1)), !0); b = null; c = 0 } else for (d = b; ; d = d.parentNode) { if (!d || d == a.display.lineDiv) return null; if (d.parentNode && d.parentNode == a.display.lineDiv) break } for (var e = 0; e < a.display.view.length; e++) { var f = a.display.view[e]; if (f.node == d) return wf(f, b, c) } } function wf(a, b, c) {
			function d(b, c, d) {
				for (var e = -1; e <
					(l ? l.length : 0); e++)for (var f = 0 > e ? k.map : l[e], g = 0; g < f.length; g += 3) { var h = f[g + 2]; if (h == b || h == c) { c = F(0 > e ? a.line : a.rest[e]); e = f[g] + d; if (0 > d || h != b) e = f[g + (d ? 1 : 0)]; return r(c, e) } }
			} var e = a.text.firstChild, f = !1; if (!b || !Wc(e, b)) return Ra(r(F(a.line), 0), !0); if (b == e && (f = !0, b = e.childNodes[c], c = 0, !b)) return c = a.rest ? A(a.rest) : a.line, Ra(r(F(c), c.text.length), f); var g = 3 == b.nodeType ? b : null, h = b; g || 1 != b.childNodes.length || 3 != b.firstChild.nodeType || (g = b.firstChild, c && (c = g.nodeValue.length)); for (; h.parentNode != e;)h = h.parentNode;
			var k = a.measure, l = k.maps; if (b = d(g, h, c)) return Ra(b, f); e = h.nextSibling; for (g = g ? g.nodeValue.length - c : 0; e; e = e.nextSibling) { if (b = d(e, e.firstChild, 0)) return Ra(r(b.line, b.ch - g), f); g += e.textContent.length } h = h.previousSibling; for (g = c; h; h = h.previousSibling) { if (b = d(h, h.firstChild, -1)) return Ra(r(b.line, b.ch + g), f); g += e.textContent.length }
		} function xf(a, b, c, d, e) {
			function f(a) { return function(b) { return b.id == a } } function g(b) {
				if (1 == b.nodeType) {
					var c = b.getAttribute("cm-text"); if (null != c) "" == c && (c = b.textContent.replace(/\u200b/g,
						"")), h += c; else { var c = b.getAttribute("cm-marker"), p; if (c) b = a.findMarks(r(d, 0), r(e + 1, 0), f(+c)), b.length && (p = b[0].find()) && (h += Da(a.doc, p.from, p.to).join("\n")); else if ("false" != b.getAttribute("contenteditable")) { for (p = 0; p < b.childNodes.length; p++)g(b.childNodes[p]); /^(pre|div|p)$/i.test(b.nodeName) && (k = !0) } }
				} else 3 == b.nodeType && (b = b.nodeValue) && (k && (h += "\n", k = !1), h += b)
			} for (var h = "", k = !1; ;) { g(b); if (b == c) break; b = b.nextSibling } return h
		} function la(a, b) { this.ranges = a; this.primIndex = b } function z(a, b) {
			this.anchor =
			a; this.head = b
		} function Z(a, b) { var c = a[b]; a.sort(function(a, b) { return y(a.from(), b.from()) }); b = D(a, c); for (c = 1; c < a.length; c++) { var d = a[c], e = a[c - 1]; if (0 <= y(e.to(), d.from())) { var f = Qb(e.from(), d.from()), g = Pb(e.to(), d.to()), d = e.empty() ? d.from() == d.head : e.from() == e.head; c <= b && --b; a.splice(--c, 2, new z(d ? g : f, d ? f : g)) } } return new la(a, b) } function ga(a, b) { return new la([new z(a, b || a)], 0) } function w(a, b) {
			if (b.line < a.first) return r(a.first, 0); var c = a.first + a.size - 1; if (b.line > c) return r(c, u(a, c).text.length); var c =
				u(a, b.line).text.length, d = b.ch, c = null == d || d > c ? r(b.line, c) : 0 > d ? r(b.line, 0) : b; return c
		} function qb(a, b) { return b >= a.first && b < a.first + a.size } function rb(a, b, c, d) { return a.cm && a.cm.display.shift || a.extend ? (a = b.anchor, d && (b = 0 > y(c, a), b != 0 > y(d, a) ? (a = c, c = d) : b != 0 > y(c, d) && (c = d)), new z(a, c)) : new z(d || c, c) } function Ub(a, b, c, d) { H(a, new la([rb(a, a.sel.primary(), b, c)], 0), d) } function ae(a, b, c) { for (var d = [], e = 0; e < a.sel.ranges.length; e++)d[e] = rb(a, a.sel.ranges[e], b[e], null); b = Z(d, a.sel.primIndex); H(a, b, c) } function Xc(a,
			b, c, d) { var e = a.sel.ranges.slice(0); e[b] = c; H(a, Z(e, a.sel.primIndex), d) } function yf(a, b) { var c = { ranges: b.ranges, update: function(b) { this.ranges = []; for (var c = 0; c < b.length; c++)this.ranges[c] = new z(w(a, b[c].anchor), w(a, b[c].head)) } }; K(a, "beforeSelectionChange", a, c); a.cm && K(a.cm, "beforeSelectionChange", a.cm, c); return c.ranges != b.ranges ? Z(c.ranges, c.ranges.length - 1) : b } function be(a, b, c) { var d = a.history.done, e = A(d); e && e.ranges ? (d[d.length - 1] = b, Vb(a, b, c)) : H(a, b, c) } function H(a, b, c) {
				Vb(a, b, c); b = a.sel; var d =
					a.cm ? a.cm.curOp.id : NaN, e = a.history, f = c && c.origin, g; if (!(g = d == e.lastSelOp) && (g = f && e.lastSelOrigin == f) && !(g = e.lastModTime == e.lastSelTime && e.lastOrigin == f)) { g = A(e.done); var h = f.charAt(0); g = "*" == h || "+" == h && g.ranges.length == b.ranges.length && g.somethingSelected() == b.somethingSelected() && new Date - a.history.lastSelTime <= (a.cm ? a.cm.options.historyEventDelay : 500) } g ? e.done[e.done.length - 1] = b : Wb(b, e.done); e.lastSelTime = +new Date; e.lastSelOrigin = f; e.lastSelOp = d; c && !1 !== c.clearRedo && ce(e.undone)
			} function Vb(a,
				b, c) { if (S(a, "beforeSelectionChange") || a.cm && S(a.cm, "beforeSelectionChange")) b = yf(a, b); var d = c && c.bias || (0 > y(b.primary().head, a.sel.primary().head) ? -1 : 1); de(a, ee(a, b, d, !0)); c && !1 === c.scroll || !a.cm || Pa(a.cm) } function de(a, b) { b.equals(a.sel) || (a.sel = b, a.cm && (a.cm.curOp.updateInput = a.cm.curOp.selectionChanged = !0, fe(a.cm)), L(a, "cursorActivity", a)) } function ge(a) { de(a, ee(a, a.sel, null, !1), ha) } function ee(a, b, c, d) {
					for (var e, f = 0; f < b.ranges.length; f++) {
						var g = b.ranges[f], h = Xb(a, g.anchor, c, d), k = Xb(a, g.head, c,
							d); if (e || h != g.anchor || k != g.head) e || (e = b.ranges.slice(0, f)), e[f] = new z(h, k)
					} return e ? Z(e, b.primIndex) : b
				} function Xb(a, b, c, d) {
					var e = !1, f = b, g = c || 1; a.cantEdit = !1; a: for (; ;) {
						var h = u(a, f.line); if (h.markedSpans) for (var k = 0; k < h.markedSpans.length; ++k) {
							var l = h.markedSpans[k], m = l.marker; if ((null == l.from || (m.inclusiveLeft ? l.from <= f.ch : l.from < f.ch)) && (null == l.to || (m.inclusiveRight ? l.to >= f.ch : l.to > f.ch))) {
								if (d && (K(m, "beforeCursorEnter"), m.explicitlyCleared)) if (h.markedSpans) { --k; continue } else break; if (m.atomic) {
									k =
									m.find(0 > g ? -1 : 1); if (0 == y(k, f) && (k.ch += g, 0 > k.ch ? k = k.line > a.first ? w(a, r(k.line - 1)) : null : k.ch > h.text.length && (k = k.line < a.first + a.size - 1 ? r(k.line + 1, 0) : null), !k)) { if (e) { if (!d) return Xb(a, b, c, !0); a.cantEdit = !0; return r(a.first, 0) } e = !0; k = b; g = -g } f = k; continue a
								}
							}
						} return f
					}
				} function nb(a) { a.display.input.showSelection(a.display.input.prepareSelection()) } function he(a, b) {
					for (var c = a.doc, d = {}, e = d.cursors = document.createDocumentFragment(), f = d.selection = document.createDocumentFragment(), g = 0; g < c.sel.ranges.length; g++)if (!1 !==
						b || g != c.sel.primIndex) {
							var h = c.sel.ranges[g], k = h.empty(); if (k || a.options.showCursorWhenSelecting) {
								var l = a, m = e, p = ma(l, h.head, "div", null, null, !l.options.singleCursorHeightPerLine), n = m.appendChild(t("div", " ", "CodeMirror-cursor")); n.style.left = p.left + "px"; n.style.top = p.top + "px"; n.style.height = Math.max(0, p.bottom - p.top) * l.options.cursorHeight + "px"; p.other && (l = m.appendChild(t("div", " ", "CodeMirror-cursor CodeMirror-secondarycursor")), l.style.display = "", l.style.left = p.other.left + "px", l.style.top = p.other.top +
									"px", l.style.height = .85 * (p.other.bottom - p.other.top) + "px")
							} k || zf(a, h, f)
					} return d
				} function zf(a, b, c) {
					function d(a, b, c, d) { 0 > b && (b = 0); b = Math.round(b); d = Math.round(d); h.appendChild(t("div", null, "CodeMirror-selected", "position: absolute; left: " + a + "px; top: " + b + "px; width: " + (null == c ? m - a : c) + "px; height: " + (d - b) + "px")) } function e(b, c, e) {
						var f = u(g, b), h = f.text.length, k, p; Af(Y(f), c || 0, null == e ? h : e, function(g, q, t) {
							var u = Yb(a, r(b, g), "div", f, "left"), v, w; g == q ? (v = u, t = w = u.left) : (v = Yb(a, r(b, q - 1), "div", f, "right"),
								"rtl" == t && (t = u, u = v, v = t), t = u.left, w = v.right); null == c && 0 == g && (t = l); 3 < v.top - u.top && (d(t, u.top, null, u.bottom), t = l, u.bottom < v.top && d(t, u.bottom, null, v.top)); null == e && q == h && (w = m); if (!k || u.top < k.top || u.top == k.top && u.left < k.left) k = u; if (!p || v.bottom > p.bottom || v.bottom == p.bottom && v.right > p.right) p = v; t < l + 1 && (t = l); d(t, v.top, w - t, v.bottom)
						}); return { start: k, end: p }
					} var f = a.display, g = a.doc, h = document.createDocumentFragment(), k = ie(a.display), l = k.left, m = Math.max(f.sizerWidth, pa(a) - f.sizer.offsetLeft) - k.right, f = b.from();
					b = b.to(); if (f.line == b.line) e(f.line, f.ch, b.ch); else { var p = u(g, f.line), k = u(g, b.line), k = ia(p) == ia(k), f = e(f.line, f.ch, k ? p.text.length + 1 : null).end; b = e(b.line, k ? 0 : null, b.ch).start; k && (f.top < b.top - 2 ? (d(f.right, f.top, null, f.bottom), d(l, b.top, b.left, b.bottom)) : d(f.right, f.top, b.left - f.right, f.bottom)); f.bottom < b.top && d(l, f.bottom, null, b.top) } c.appendChild(h)
				} function Yc(a) {
					if (a.state.focused) {
						var b = a.display; clearInterval(b.blinker); var c = !0; b.cursorDiv.style.visibility = ""; 0 < a.options.cursorBlinkRate ? b.blinker =
							setInterval(function() { b.cursorDiv.style.visibility = (c = !c) ? "" : "hidden" }, a.options.cursorBlinkRate) : 0 > a.options.cursorBlinkRate && (b.cursorDiv.style.visibility = "hidden")
					}
				} function fb(a, b) { a.doc.mode.startState && a.doc.frontier < a.display.viewTo && a.state.highlight.set(b, cb(Bf, a)) } function Bf(a) {
					var b = a.doc; b.frontier < b.first && (b.frontier = b.first); if (!(b.frontier >= a.display.viewTo)) {
						var c = +new Date + a.options.workTime, d = Sa(b.mode, sb(a, b.frontier)), e = []; b.iter(b.frontier, Math.min(b.first + b.size, a.display.viewTo +
							500), function(f) { if (b.frontier >= a.display.viewFrom) { var g = f.styles, h = je(a, f, d, !0); f.styles = h.styles; var k = f.styleClasses; (h = h.classes) ? f.styleClasses = h : k && (f.styleClasses = null); k = !g || g.length != f.styles.length || k != h && (!k || !h || k.bgClass != h.bgClass || k.textClass != h.textClass); for (h = 0; !k && h < g.length; ++h)k = g[h] != f.styles[h]; k && e.push(b.frontier); f.stateAfter = Sa(b.mode, d) } else Zc(a, f.text, d), f.stateAfter = 0 == b.frontier % 5 ? Sa(b.mode, d) : null; ++b.frontier; if (+new Date > c) return fb(a, a.options.workDelay), !0 });
						e.length && T(a, function() { for (var b = 0; b < e.length; b++)na(a, e[b], "text") })
					}
				} function Cf(a, b, c) { for (var d, e, f = a.doc, g = c ? -1 : b - (a.doc.mode.innerMode ? 1E3 : 100); b > g; --b) { if (b <= f.first) return f.first; var h = u(f, b - 1); if (h.stateAfter && (!c || b <= f.frontier)) return b; h = aa(h.text, null, a.options.tabSize); if (null == e || d > h) e = b - 1, d = h } return e } function sb(a, b, c) {
					var d = a.doc, e = a.display; if (!d.mode.startState) return !0; var f = Cf(a, b, c), g = f > d.first && u(d, f - 1).stateAfter, g = g ? Sa(d.mode, g) : Df(d.mode); d.iter(f, b, function(c) {
						Zc(a,
							c.text, g); c.stateAfter = f == b - 1 || 0 == f % 5 || f >= e.viewFrom && f < e.viewTo ? Sa(d.mode, g) : null; ++f
					}); c && (d.frontier = f); return g
				} function Ec(a) { return a.mover.offsetHeight - a.lineSpace.offsetHeight } function ie(a) { if (a.cachedPaddingH) return a.cachedPaddingH; var b = U(a.measure, t("pre", "x")), b = window.getComputedStyle ? window.getComputedStyle(b) : b.currentStyle, b = { left: parseInt(b.paddingLeft), right: parseInt(b.paddingRight) }; isNaN(b.left) || isNaN(b.right) || (a.cachedPaddingH = b); return b } function da(a) { return Hd - a.display.nativeBarWidth }
	function pa(a) { return a.display.scroller.clientWidth - da(a) - a.display.barWidth } function Nc(a) { return a.display.scroller.clientHeight - da(a) - a.display.barHeight } function Zd(a, b, c) { if (a.line == b) return { map: a.measure.map, cache: a.measure.cache }; for (var d = 0; d < a.rest.length; d++)if (a.rest[d] == b) return { map: a.measure.maps[d], cache: a.measure.caches[d] }; for (d = 0; d < a.rest.length; d++)if (F(a.rest[d]) > c) return { map: a.measure.maps[d], cache: a.measure.caches[d], before: !0 } } function Vc(a, b) {
		if (b >= a.display.viewFrom && b < a.display.viewTo) return a.display.view[Ca(a,
			b)]; var c = a.display.externalMeasured; if (c && b >= c.lineN && b < c.lineN + c.size) return c
	} function Zb(a, b) { var c = F(b), d = Vc(a, c); d && !d.text ? d = null : d && d.changes && Od(a, d, c, Kc(a)); if (!d) { var e; e = ia(b); d = F(e); e = a.display.externalMeasured = new ke(a.doc, e, d); e.lineN = d; d = e.built = Sd(a, e); e.text = d.pre; U(a.display.lineMeasure, d.pre); d = e } c = Zd(d, b, c); return { line: b, view: d, rect: null, map: c.map, cache: c.cache, before: c.before, hasHeights: !1 } } function $c(a, b, c, d, e) {
		b.before && (c = -1); var f = c + (d || ""); if (b.cache.hasOwnProperty(f)) a =
			b.cache[f]; else {
				b.rect || (b.rect = b.view.text.getBoundingClientRect()); if (!b.hasHeights) { var g = b.view, h = b.rect, k = a.options.lineWrapping, l = k && pa(a); if (!g.measure.heights || k && g.measure.width != l) { var m = g.measure.heights = []; if (k) for (g.measure.width = l, g = g.text.firstChild.getClientRects(), k = 0; k < g.length - 1; k++) { var l = g[k], p = g[k + 1]; 2 < Math.abs(l.bottom - p.bottom) && m.push((l.bottom + p.top) / 2 - h.top) } m.push(h.bottom - h.top) } b.hasHeights = !0 } g = d; k = $d(b.map, c, g); d = k.node; h = k.start; l = k.end; c = k.collapse; var n; if (3 == d.nodeType) {
					for (m =
						0; 4 > m; m++) { for (; h && tb(b.line.text.charAt(k.coverStart + h));)--h; for (; k.coverStart + l < k.coverEnd && tb(b.line.text.charAt(k.coverStart + l));)++l; if (B && 9 > C && 0 == h && l == k.coverEnd - k.coverStart) n = d.parentNode.getBoundingClientRect(); else if (B && a.options.lineWrapping) { var E = Ea(d, h, l).getClientRects(); n = E.length ? E["right" == g ? E.length - 1 : 0] : ad } else n = Ea(d, h, l).getBoundingClientRect() || ad; if (n.left || n.right || 0 == h) break; l = h; --h; c = "right" } B && 11 > C && ((E = !window.screen || null == screen.logicalXDPI || screen.logicalXDPI == screen.deviceXDPI) ||
							(null != bd ? E = bd : (m = U(a.display.measure, t("span", "x")), E = m.getBoundingClientRect(), m = Ea(m, 0, 1).getBoundingClientRect(), E = bd = 1 < Math.abs(E.left - m.left)), E = !E), E || (E = screen.logicalXDPI / screen.deviceXDPI, m = screen.logicalYDPI / screen.deviceYDPI, n = { left: n.left * E, right: n.right * E, top: n.top * m, bottom: n.bottom * m }))
				} else 0 < h && (c = g = "right"), n = a.options.lineWrapping && 1 < (E = d.getClientRects()).length ? E["right" == g ? E.length - 1 : 0] : d.getBoundingClientRect(); !(B && 9 > C) || h || n && (n.left || n.right) || (n = (n = d.parentNode.getClientRects()[0]) ?
					{ left: n.left, right: n.left + gb(a.display), top: n.top, bottom: n.bottom } : ad); E = n.top - b.rect.top; d = n.bottom - b.rect.top; h = (E + d) / 2; g = b.view.measure.heights; for (m = 0; m < g.length - 1 && !(h < g[m]); m++); c = { left: ("right" == c ? n.right : n.left) - b.rect.left, right: ("left" == c ? n.left : n.right) - b.rect.left, top: m ? g[m - 1] : 0, bottom: g[m] }; n.left || n.right || (c.bogus = !0); a.options.singleCursorHeightPerLine || (c.rtop = E, c.rbottom = d); a = c; a.bogus || (b.cache[f] = a)
		} return { left: a.left, right: a.right, top: e ? a.rtop : a.top, bottom: e ? a.rbottom : a.bottom }
	}
	function $d(a, b, c) {
		for (var d, e, f, g, h = 0; h < a.length; h += 3) { var k = a[h], l = a[h + 1]; if (b < k) e = 0, f = 1, g = "left"; else if (b < l) e = b - k, f = e + 1; else if (h == a.length - 3 || b == l && a[h + 3] > b) f = l - k, e = f - 1, b >= l && (g = "right"); if (null != e) { d = a[h + 2]; k == l && c == (d.insertLeft ? "left" : "right") && (g = c); if ("left" == c && 0 == e) for (; h && a[h - 2] == a[h - 3] && a[h - 1].insertLeft;)d = a[(h -= 3) + 2], g = "left"; if ("right" == c && e == l - k) for (; h < a.length - 3 && a[h + 3] == a[h + 4] && !a[h + 5].insertLeft;)d = a[(h += 3) + 2], g = "right"; break } } return {
			node: d, start: e, end: f, collapse: g, coverStart: k,
			coverEnd: l
		}
	} function le(a) { if (a.measure && (a.measure.cache = {}, a.measure.heights = null, a.rest)) for (var b = 0; b < a.rest.length; b++)a.measure.caches[b] = {} } function me(a) { a.display.externalMeasure = null; za(a.display.lineMeasure); for (var b = 0; b < a.display.view.length; b++)le(a.display.view[b]) } function hb(a) { me(a); a.display.cachedCharWidth = a.display.cachedTextHeight = a.display.cachedPaddingH = null; a.options.lineWrapping || (a.display.maxLineChanged = !0); a.display.lineNumChars = null } function cd(a, b, c, d) {
		if (b.widgets) for (var e =
			0; e < b.widgets.length; ++e)if (b.widgets[e].above) { var f = ub(b.widgets[e]); c.top += f; c.bottom += f } if ("line" == d) return c; d || (d = "local"); b = ea(b); b = "local" == d ? b + a.display.lineSpace.offsetTop : b - a.display.viewOffset; if ("page" == d || "window" == d) a = a.display.lineSpace.getBoundingClientRect(), b += a.top + ("window" == d ? 0 : window.pageYOffset || (document.documentElement || document.body).scrollTop), d = a.left + ("window" == d ? 0 : window.pageXOffset || (document.documentElement || document.body).scrollLeft), c.left += d, c.right += d; c.top += b;
		c.bottom += b; return c
	} function ne(a, b, c) { if ("div" == c) return b; var d = b.left; b = b.top; "page" == c ? (d -= window.pageXOffset || (document.documentElement || document.body).scrollLeft, b -= window.pageYOffset || (document.documentElement || document.body).scrollTop) : "local" != c && c || (c = a.display.sizer.getBoundingClientRect(), d += c.left, b += c.top); a = a.display.lineSpace.getBoundingClientRect(); return { left: d - a.left, top: b - a.top } } function Yb(a, b, c, d, e) { d || (d = u(a.doc, b.line)); var f = d; b = b.ch; d = $c(a, Zb(a, d), b, e); return cd(a, f, d, c) }
	function ma(a, b, c, d, e, f) { function g(b, g) { var h = $c(a, e, b, g ? "right" : "left", f); g ? h.left = h.right : h.right = h.left; return cd(a, d, h, c) } function h(a, b) { var c = k[b], d = c.level % 2; a == dd(c) && b && c.level < k[b - 1].level ? (c = k[--b], a = ed(c) - (c.level % 2 ? 0 : 1), d = !0) : a == ed(c) && b < k.length - 1 && c.level < k[b + 1].level && (c = k[++b], a = dd(c) - c.level % 2, d = !1); return d && a == c.to && a > c.from ? g(a - 1) : g(a, d) } d = d || u(a.doc, b.line); e || (e = Zb(a, d)); var k = Y(d); b = b.ch; if (!k) return g(b); var l = Sb(k, b), l = h(b, l); null != vb && (l.other = h(b, vb)); return l } function oe(a,
		b) { var c = 0; b = w(a.doc, b); a.options.lineWrapping || (c = gb(a.display) * b.ch); var d = u(a.doc, b.line), e = ea(d) + a.display.lineSpace.offsetTop; return { left: c, right: c, top: e, bottom: e + d.height } } function $b(a, b, c, d) { a = r(a, b); a.xRel = d; c && (a.outside = !0); return a } function fd(a, b, c) {
			var d = a.doc; c += a.display.viewOffset; if (0 > c) return $b(d.first, 0, !0, -1); var e = Ba(d, c), f = d.first + d.size - 1; if (e > f) return $b(d.first + d.size - 1, u(d, f).text.length, !0, 1); 0 > b && (b = 0); for (d = u(d, e); ;)if (e = Ef(a, d, e, b, c), f = (d = Aa(d, !1)) && d.find(0, !0), d &&
				(e.ch > f.from.ch || e.ch == f.from.ch && 0 < e.xRel)) e = F(d = f.to.line); else return e
		} function Ef(a, b, c, d, e) {
			function f(d) { d = ma(a, r(c, d), "line", b, l); h = !0; if (g > d.bottom) return d.left - k; if (g < d.top) return d.left + k; h = !1; return d.left } var g = e - ea(b), h = !1, k = 2 * a.display.wrapper.clientWidth, l = Zb(a, b), m = Y(b), p = b.text.length; e = ac(b); var n = bc(b), E = f(e), q = h, t = f(n), u = h; if (d > t) return $b(c, n, u, 1); for (; ;) {
				if (m ? n == e || n == gd(b, e, 1) : 1 >= n - e) {
					m = d < E || d - E <= t - d ? e : n; for (d -= m == e ? E : t; tb(b.text.charAt(m));)++m; return $b(c, m, m == e ? q : u, -1 >
						d ? -1 : 1 < d ? 1 : 0)
				} var v = Math.ceil(p / 2), w = e + v; if (m) for (var w = e, x = 0; x < v; ++x)w = gd(b, w, 1); x = f(w); if (x > d) { n = w; t = x; if (u = h) t += 1E3; p = v } else e = w, E = x, q = h, p -= v
			}
		} function xa(a) { if (null != a.cachedTextHeight) return a.cachedTextHeight; if (null == Fa) { Fa = t("pre"); for (var b = 0; 49 > b; ++b)Fa.appendChild(document.createTextNode("x")), Fa.appendChild(t("br")); Fa.appendChild(document.createTextNode("x")) } U(a.measure, Fa); b = Fa.offsetHeight / 50; 3 < b && (a.cachedTextHeight = b); za(a.measure); return b || 1 } function gb(a) {
			if (null != a.cachedCharWidth) return a.cachedCharWidth;
			var b = t("span", "xxxxxxxxxx"), c = t("pre", [b]); U(a.measure, c); b = b.getBoundingClientRect(); b = (b.right - b.left) / 10; 2 < b && (a.cachedCharWidth = b); return b || 10
		} function Ja(a) { a.curOp = { cm: a, viewChanged: !1, startHeight: a.doc.height, forceUpdate: !1, updateInput: null, typing: !1, changeObjs: null, cursorActivityHandlers: null, cursorActivityCalled: 0, selectionChanged: !1, updateMaxLine: !1, scrollLeft: null, scrollTop: null, scrollToPos: null, focus: !1, id: ++Ff }; Ta ? Ta.ops.push(a.curOp) : a.curOp.ownsGroup = Ta = { ops: [a.curOp], delayedCallbacks: [] } }
	function La(a) {
		if (a = a.curOp.ownsGroup) try { var b = a.delayedCallbacks, c = 0; do { for (; c < b.length; c++)b[c](); for (var d = 0; d < a.ops.length; d++) { var e = a.ops[d]; if (e.cursorActivityHandlers) for (; e.cursorActivityCalled < e.cursorActivityHandlers.length;)e.cursorActivityHandlers[e.cursorActivityCalled++](e.cm) } } while (c < b.length) } finally {
			Ta = null; for (b = 0; b < a.ops.length; b++)a.ops[b].cm.curOp = null; a = a.ops; for (b = 0; b < a.length; b++) {
				var e = a[b], c = e.cm, f = d = c.display; !f.scrollbarsClipped && f.scroller.offsetWidth && (f.nativeBarWidth =
					f.scroller.offsetWidth - f.scroller.clientWidth, f.heightForcer.style.height = da(c) + "px", f.sizer.style.marginBottom = -f.nativeBarWidth + "px", f.sizer.style.borderRightWidth = da(c) + "px", f.scrollbarsClipped = !0); e.updateMaxLine && Dc(c); e.mustUpdate = e.viewChanged || e.forceUpdate || null != e.scrollTop || e.scrollToPos && (e.scrollToPos.from.line < d.viewFrom || e.scrollToPos.to.line >= d.viewTo) || d.maxLineChanged && c.options.lineWrapping; e.update = e.mustUpdate && new Mb(c, e.mustUpdate && { top: e.scrollTop, ensure: e.scrollToPos }, e.forceUpdate)
			} for (b =
				0; b < a.length; b++)e = a[b], e.updatedDisplay = e.mustUpdate && Lc(e.cm, e.update); for (b = 0; b < a.length; b++)if (e = a[b], c = e.cm, d = c.display, e.updatedDisplay && Lb(c), e.barMeasure = jb(c), d.maxLineChanged && !c.options.lineWrapping && (f = void 0, f = d.maxLine.text.length, f = $c(c, Zb(c, d.maxLine), f, void 0), e.adjustWidthTo = f.left + 3, c.display.sizerWidth = e.adjustWidthTo, e.barMeasure.scrollWidth = Math.max(d.scroller.clientWidth, d.sizer.offsetLeft + e.adjustWidthTo + da(c) + c.display.barWidth), e.maxScrollLeft = Math.max(0, d.sizer.offsetLeft +
					e.adjustWidthTo - pa(c))), e.updatedDisplay || e.selectionChanged) e.preparedSelection = d.input.prepareSelection(); for (b = 0; b < a.length; b++)e = a[b], c = e.cm, null != e.adjustWidthTo && (c.display.sizer.style.minWidth = e.adjustWidthTo + "px", e.maxScrollLeft < c.doc.scrollLeft && Ma(c, Math.min(c.display.scroller.scrollLeft, e.maxScrollLeft), !0), c.display.maxLineChanged = !1), e.preparedSelection && c.display.input.showSelection(e.preparedSelection), e.updatedDisplay && Oc(c, e.barMeasure), (e.updatedDisplay || e.startHeight != c.doc.height) &&
						Na(c, e.barMeasure), e.selectionChanged && Yc(c), c.state.focused && e.updateInput && c.display.input.reset(e.typing), e.focus && e.focus == fa() && Ud(e.cm); for (b = 0; b < a.length; b++) {
							e = a[b]; c = e.cm; d = c.display; f = c.doc; e.updatedDisplay && Md(c, e.update); null == d.wheelStartX || null == e.scrollTop && null == e.scrollLeft && !e.scrollToPos || (d.wheelStartX = d.wheelStartY = null); null == e.scrollTop || d.scroller.scrollTop == e.scrollTop && !e.forceScroll || (f.scrollTop = Math.max(0, Math.min(d.scroller.scrollHeight - d.scroller.clientHeight, e.scrollTop)),
								d.scrollbars.setScrollTop(f.scrollTop), d.scroller.scrollTop = f.scrollTop); null == e.scrollLeft || d.scroller.scrollLeft == e.scrollLeft && !e.forceScroll || (f.scrollLeft = Math.max(0, Math.min(d.scroller.scrollWidth - pa(c), e.scrollLeft)), d.scrollbars.setScrollLeft(f.scrollLeft), d.scroller.scrollLeft = f.scrollLeft, Bc(c)); if (e.scrollToPos) {
									var g = void 0, h = w(f, e.scrollToPos.from), g = w(f, e.scrollToPos.to), k = e.scrollToPos.margin; null == k && (k = 0); for (var l = 0; 5 > l; l++) {
										var m = !1, p = ma(c, h), n = g && g != h ? ma(c, g) : p, n = cc(c, Math.min(p.left,
											n.left), Math.min(p.top, n.top) - k, Math.max(p.left, n.left), Math.max(p.bottom, n.bottom) + k), q = c.doc.scrollTop, r = c.doc.scrollLeft; null != n.scrollTop && (lb(c, n.scrollTop), 1 < Math.abs(c.doc.scrollTop - q) && (m = !0)); null != n.scrollLeft && (Ma(c, n.scrollLeft), 1 < Math.abs(c.doc.scrollLeft - r) && (m = !0)); if (!m) break
									} g = p; e.scrollToPos.isCursor && c.state.focused && (ja(c, "scrollCursorIntoView") || (k = c.display, l = k.sizer.getBoundingClientRect(), h = null, 0 > g.top + l.top ? h = !0 : g.bottom + l.top > (window.innerHeight || document.documentElement.clientHeight) &&
										(h = !1), null == h || Gf || (g = t("div", "​", null, "position: absolute; top: " + (g.top - k.viewOffset - c.display.lineSpace.offsetTop) + "px; height: " + (g.bottom - g.top + da(c) + k.barHeight) + "px; left: " + g.left + "px; width: 2px;"), c.display.lineSpace.appendChild(g), g.scrollIntoView(h), c.display.lineSpace.removeChild(g))))
								} h = e.maybeHiddenMarkers; g = e.maybeUnhiddenMarkers; if (h) for (k = 0; k < h.length; ++k)h[k].lines.length || K(h[k], "hide"); if (g) for (k = 0; k < g.length; ++k)g[k].lines.length && K(g[k], "unhide"); d.wrapper.offsetHeight && (f.scrollTop =
									c.display.scroller.scrollTop); e.changeObjs && K(c, "changes", c, e.changeObjs); e.update && e.update.finish()
						}
		}
	} function T(a, b) { if (a.curOp) return b(); Ja(a); try { return b() } finally { La(a) } } function G(a, b) { return function() { if (a.curOp) return b.apply(a, arguments); Ja(a); try { return b.apply(a, arguments) } finally { La(a) } } } function M(a) { return function() { if (this.curOp) return a.apply(this, arguments); Ja(this); try { return a.apply(this, arguments) } finally { La(this) } } } function N(a) {
		return function() {
			var b = this.cm; if (!b || b.curOp) return a.apply(this,
				arguments); Ja(b); try { return a.apply(this, arguments) } finally { La(b) }
		}
	} function ke(a, b, c) { for (var d = this.line = b, e; d = Aa(d, !1);)d = d.find(1, !0).line, (e || (e = [])).push(d); this.size = (this.rest = e) ? F(A(this.rest)) - c + 1 : 1; this.node = this.text = null; this.hidden = ya(a, b) } function Nb(a, b, c) { var d = [], e; for (e = b; e < c;)b = new ke(a.doc, u(a.doc, e), e), e += b.size, d.push(b); return d } function Q(a, b, c, d) {
		null == b && (b = a.doc.first); null == c && (c = a.doc.first + a.doc.size); d || (d = 0); var e = a.display; d && c < e.viewTo && (null == e.updateLineNumbers ||
			e.updateLineNumbers > b) && (e.updateLineNumbers = b); a.curOp.viewChanged = !0; if (b >= e.viewTo) ra && Mc(a.doc, b) < e.viewTo && qa(a); else if (c <= e.viewFrom) ra && Ld(a.doc, c + d) > e.viewFrom ? qa(a) : (e.viewFrom += d, e.viewTo += d); else if (b <= e.viewFrom && c >= e.viewTo) qa(a); else if (b <= e.viewFrom) { var f = dc(a, c, c + d, 1); f ? (e.view = e.view.slice(f.index), e.viewFrom = f.lineN, e.viewTo += d) : qa(a) } else if (c >= e.viewTo) (f = dc(a, b, b, -1)) ? (e.view = e.view.slice(0, f.index), e.viewTo = f.lineN) : qa(a); else {
				var f = dc(a, b, b, -1), g = dc(a, c, c + d, 1); f && g ? (e.view =
					e.view.slice(0, f.index).concat(Nb(a, f.lineN, g.lineN)).concat(e.view.slice(g.index)), e.viewTo += d) : qa(a)
			} if (a = e.externalMeasured) c < a.lineN ? a.lineN += d : b < a.lineN + a.size && (e.externalMeasured = null)
	} function na(a, b, c) { a.curOp.viewChanged = !0; var d = a.display, e = a.display.externalMeasured; e && b >= e.lineN && b < e.lineN + e.size && (d.externalMeasured = null); b < d.viewFrom || b >= d.viewTo || (a = d.view[Ca(a, b)], null != a.node && (a = a.changes || (a.changes = []), -1 == D(a, c) && a.push(c))) } function qa(a) {
		a.display.viewFrom = a.display.viewTo =
			a.doc.first; a.display.view = []; a.display.viewOffset = 0
	} function Ca(a, b) { if (b >= a.display.viewTo) return null; b -= a.display.viewFrom; if (0 > b) return null; for (var c = a.display.view, d = 0; d < c.length; d++)if (b -= c[d].size, 0 > b) return d } function dc(a, b, c, d) {
		var e = Ca(a, b), f = a.display.view; if (!ra || c == a.doc.first + a.doc.size) return { index: e, lineN: c }; for (var g = 0, h = a.display.viewFrom; g < e; g++)h += f[g].size; if (h != b) { if (0 < d) { if (e == f.length - 1) return null; b = h + f[e].size - b; e++ } else b = h - b; c += b } for (; Mc(a.doc, c) != c;) {
			if (e == (0 > d ? 0 : f.length -
				1)) return null; c += d * f[e - (0 > d ? 1 : 0)].size; e += d
		} return { index: e, lineN: c }
	} function Kd(a) { a = a.display.view; for (var b = 0, c = 0; c < a.length; c++) { var d = a[c]; d.hidden || d.node && !d.changes || ++b } return b } function sf(a) {
		function b() { d.activeTouch && (e = setTimeout(function() { d.activeTouch = null }, 1E3), f = d.activeTouch, f.end = +new Date) } function c(a, b) { if (null == b.left) return !0; var c = b.left - a.left, d = b.top - a.top; return 400 < c * c + d * d } var d = a.display; v(d.scroller, "mousedown", G(a, pe)); B && 11 > C ? v(d.scroller, "dblclick", G(a, function(b) {
			if (!ja(a,
				b)) { var c = Ua(a, b); !c || hd(a, b, "gutterClick", !0, L) || oa(a.display, b) || (O(b), b = a.findWordAt(c), Ub(a.doc, b.anchor, b.head)) }
		})) : v(d.scroller, "dblclick", function(b) { ja(a, b) || O(b) }); id || v(d.scroller, "contextmenu", function(b) { qe(a, b) }); var e, f = { end: 0 }; v(d.scroller, "touchstart", function(a) {
			var b; 1 != a.touches.length ? b = !1 : (b = a.touches[0], b = 1 >= b.radiusX && 1 >= b.radiusY); b || (clearTimeout(e), b = +new Date, d.activeTouch = { start: b, moved: !1, prev: 300 >= b - f.end ? f : null }, 1 == a.touches.length && (d.activeTouch.left = a.touches[0].pageX,
				d.activeTouch.top = a.touches[0].pageY))
		}); v(d.scroller, "touchmove", function() { d.activeTouch && (d.activeTouch.moved = !0) }); v(d.scroller, "touchend", function(e) { var f = d.activeTouch; if (f && !oa(d, e) && null != f.left && !f.moved && 300 > new Date - f.start) { var g = a.coordsChar(d.activeTouch, "page"), f = !f.prev || c(f, f.prev) ? new z(g, g) : !f.prev.prev || c(f, f.prev.prev) ? a.findWordAt(g) : new z(r(g.line, 0), w(a.doc, r(g.line + 1, 0))); a.setSelection(f.anchor, f.head); a.focus(); O(e) } b() }); v(d.scroller, "touchcancel", b); v(d.scroller, "scroll",
			function() { d.scroller.clientHeight && (lb(a, d.scroller.scrollTop), Ma(a, d.scroller.scrollLeft, !0), K(a, "scroll", a)) }); v(d.scroller, "mousewheel", function(b) { re(a, b) }); v(d.scroller, "DOMMouseScroll", function(b) { re(a, b) }); v(d.wrapper, "scroll", function() { d.wrapper.scrollTop = d.wrapper.scrollLeft = 0 }); d.dragFunctions = {
				simple: function(b) { ja(a, b) || jd(b) }, start: function(b) {
					if (B && (!a.state.draggingText || 100 > +new Date - se)) jd(b); else if (!ja(a, b) && !oa(a.display, b) && (b.dataTransfer.setData("Text", a.getSelection()), b.dataTransfer.setDragImage &&
						!te)) { var c = t("img", null, null, "position: fixed; left: 0; top: 0;"); c.src = "data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw\x3d\x3d"; ba && (c.width = c.height = 1, a.display.wrapper.appendChild(c), c._top = c.offsetTop); b.dataTransfer.setDragImage(c, 0, 0); ba && c.parentNode.removeChild(c) }
				}, drop: G(a, Hf)
			}; var g = d.input.getField(); v(g, "keyup", function(b) { ue.call(a, b) }); v(g, "keydown", G(a, ve)); v(g, "keypress", G(a, we)); v(g, "focus", cb(xc, a)); v(g, "blur", cb(db, a))
	} function If(a) {
		var b = a.display;
		if (b.lastWrapHeight != b.wrapper.clientHeight || b.lastWrapWidth != b.wrapper.clientWidth) b.cachedCharWidth = b.cachedTextHeight = b.cachedPaddingH = null, b.scrollbarsClipped = !1, a.setSize()
	} function oa(a, b) { for (var c = b.target || b.srcElement; c != a.wrapper; c = c.parentNode)if (!c || 1 == c.nodeType && "true" == c.getAttribute("cm-ignore-events") || c.parentNode == a.sizer && c != a.mover) return !0 } function Ua(a, b, c, d) {
		var e = a.display; if (!c && "true" == (b.target || b.srcElement).getAttribute("cm-not-content")) return null; var f, g; c = e.lineSpace.getBoundingClientRect();
		try { f = b.clientX - c.left, g = b.clientY - c.top } catch (h) { return null } b = fd(a, f, g); var k; d && 1 == b.xRel && (k = u(a.doc, b.line).text).length == b.ch && (d = aa(k, k.length, a.options.tabSize) - k.length, b = r(b.line, Math.max(0, Math.round((f - ie(a.display).left) / gb(a.display)) - d))); return b
	} function pe(a) {
		var b = this.display; if (!(b.activeTouch && b.input.supportsTouch() || ja(this, a))) if (b.shift = a.shiftKey, oa(b, a)) J || (b.scroller.draggable = !1, setTimeout(function() { b.scroller.draggable = !0 }, 100)); else if (!hd(this, a, "gutterClick", !0,
			L)) { var c = Ua(this, a); window.focus(); switch (xe(a)) { case 1: c ? Jf(this, a, c) : (a.target || a.srcElement) == b.scroller && O(a); break; case 2: J && (this.state.lastMiddleDown = +new Date); c && Ub(this.doc, c); setTimeout(function() { b.input.focus() }, 20); O(a); break; case 3: id ? qe(this, a) : Kf(this) } }
	} function Jf(a, b, c) {
		B ? setTimeout(cb(Ud, a), 0) : a.curOp.focus = fa(); var d = +new Date, e; ec && ec.time > d - 400 && 0 == y(ec.pos, c) ? e = "triple" : fc && fc.time > d - 400 && 0 == y(fc.pos, c) ? (e = "double", ec = { time: d, pos: c }) : (e = "single", fc = { time: d, pos: c }); var d =
			a.doc.sel, f = W ? b.metaKey : b.ctrlKey, g; a.options.dragDrop && Lf && !Rb(a) && "single" == e && -1 < (g = d.contains(c)) && !d.ranges[g].empty() ? Mf(a, b, c, f) : Nf(a, b, c, e, f)
	} function Mf(a, b, c, d) {
		var e = a.display, f = +new Date, g = G(a, function(h) { J && (e.scroller.draggable = !1); a.state.draggingText = !1; ka(document, "mouseup", g); ka(e.scroller, "drop", g); 10 > Math.abs(b.clientX - h.clientX) + Math.abs(b.clientY - h.clientY) && (O(h), !d && +new Date - 200 < f && Ub(a.doc, c), J || B && 9 == C ? setTimeout(function() { document.body.focus(); e.input.focus() }, 20) : e.input.focus()) });
		J && (e.scroller.draggable = !0); a.state.draggingText = g; e.scroller.dragDrop && e.scroller.dragDrop(); v(document, "mouseup", g); v(e.scroller, "drop", g)
	} function Nf(a, b, c, d, e) {
		function f(b) {
			if (0 != y(x, b)) if (x = b, "rect" == d) {
				for (var e = [], f = a.options.tabSize, g = aa(u(l, c.line).text, c.ch, f), h = aa(u(l, b.line).text, b.ch, f), k = Math.min(g, h), g = Math.max(g, h), h = Math.min(c.line, b.line), q = Math.min(a.lastLine(), Math.max(c.line, b.line)); h <= q; h++) {
					var E = u(l, h).text, t = ye(E, k, f); k == g ? e.push(new z(r(h, t), r(h, t))) : E.length > t && e.push(new z(r(h,
						t), r(h, ye(E, g, f))))
				} e.length || e.push(new z(c, c)); H(l, Z(n.ranges.slice(0, p).concat(e), p), { origin: "*mouse", scroll: !1 }); a.scrollIntoView(b)
			} else e = m, f = e.anchor, k = b, "single" != d && (b = "double" == d ? a.findWordAt(b) : new z(r(b.line, 0), w(l, r(b.line + 1, 0))), 0 < y(b.anchor, f) ? (k = b.head, f = Qb(e.from(), b.anchor)) : (k = b.anchor, f = Pb(e.to(), b.head))), e = n.ranges.slice(0), e[p] = new z(w(l, f), k), H(l, Z(e, p), kd)
		} function g(b) {
			var c = ++A, e = Ua(a, b, !0, "rect" == d); if (e) if (0 != y(e, x)) {
				a.curOp.focus = fa(); f(e); var h = Hc(k, l); (e.line >= h.to ||
					e.line < h.from) && setTimeout(G(a, function() { A == c && g(b) }), 150)
			} else { var m = b.clientY < B.top ? -20 : b.clientY > B.bottom ? 20 : 0; m && setTimeout(G(a, function() { A == c && (k.scroller.scrollTop += m, g(b)) }), 50) }
		} function h(a) { A = Infinity; O(a); k.input.focus(); ka(document, "mousemove", F); ka(document, "mouseup", C); l.history.lastSelOrigin = null } var k = a.display, l = a.doc; O(b); var m, p, n = l.sel, q = n.ranges; e && !b.shiftKey ? (p = l.sel.contains(c), m = -1 < p ? q[p] : new z(c, c)) : (m = l.sel.primary(), p = l.sel.primIndex); if (b.altKey) d = "rect", e || (m = new z(c,
			c)), c = Ua(a, b, !0, !0), p = -1; else if ("double" == d) { var t = a.findWordAt(c); m = a.display.shift || l.extend ? rb(l, m, t.anchor, t.head) : t } else "triple" == d ? (t = new z(r(c.line, 0), w(l, r(c.line + 1, 0))), m = a.display.shift || l.extend ? rb(l, m, t.anchor, t.head) : t) : m = rb(l, m, c); e ? -1 == p ? (p = q.length, H(l, Z(q.concat([m]), p), { scroll: !1, origin: "*mouse" })) : 1 < q.length && q[p].empty() && "single" == d && !b.shiftKey ? (H(l, Z(q.slice(0, p).concat(q.slice(p + 1)), 0)), n = l.sel) : Xc(l, p, m, kd) : (p = 0, H(l, new la([m], 0), kd), n = l.sel); var x = c, B = k.wrapper.getBoundingClientRect(),
				A = 0, F = G(a, function(a) { xe(a) ? g(a) : h(a) }), C = G(a, h); v(document, "mousemove", F); v(document, "mouseup", C)
	} function hd(a, b, c, d, e) {
		try { var f = b.clientX, g = b.clientY } catch (h) { return !1 } if (f >= Math.floor(a.display.gutters.getBoundingClientRect().right)) return !1; d && O(b); d = a.display; var k = d.lineDiv.getBoundingClientRect(); if (g > k.bottom || !S(a, c)) return ld(b); g -= k.top - d.viewOffset; for (k = 0; k < a.options.gutters.length; ++k) {
			var l = d.gutters.childNodes[k]; if (l && l.getBoundingClientRect().right >= f) return f = Ba(a.doc, g), e(a,
				c, a, f, a.options.gutters[k], b), ld(b)
		}
	} function Hf(a) {
		var b = this; if (!ja(b, a) && !oa(b.display, a)) {
			O(a); B && (se = +new Date); var c = Ua(b, a, !0), d = a.dataTransfer.files; if (c && !Rb(b)) if (d && d.length && window.FileReader && window.File) { var e = d.length, f = Array(e), g = 0; a = function(a, d) { var h = new FileReader; h.onload = G(b, function() { f[d] = h.result; if (++g == e) { c = w(b.doc, c); var a = { from: c, to: c, text: sa(f.join("\n")), origin: "paste" }; Oa(b.doc, a); be(b.doc, ga(c, ta(a))) } }); h.readAsText(a) }; for (var h = 0; h < e; ++h)a(d[h], h) } else if (b.state.draggingText &&
				-1 < b.doc.sel.contains(c)) b.state.draggingText(a), setTimeout(function() { b.display.input.focus() }, 20); else try { if (f = a.dataTransfer.getData("Text")) { if (b.state.draggingText && (W ? !a.altKey : !a.ctrlKey)) var k = b.listSelections(); Vb(b.doc, ga(c, c)); if (k) for (h = 0; h < k.length; ++h)wb(b.doc, "", k[h].anchor, k[h].head, "drag"); b.replaceSelection(f, "around", "paste"); b.display.input.focus() } } catch (l) { }
		}
	} function lb(a, b) {
		2 > Math.abs(a.doc.scrollTop - b) || (a.doc.scrollTop = b, wa || Pc(a, { top: b }), a.display.scroller.scrollTop != b &&
			(a.display.scroller.scrollTop = b), a.display.scrollbars.setScrollTop(b), wa && Pc(a), fb(a, 100))
	} function Ma(a, b, c) { (c ? b == a.doc.scrollLeft : 2 > Math.abs(a.doc.scrollLeft - b)) || (b = Math.min(b, a.display.scroller.scrollWidth - a.display.scroller.clientWidth), a.doc.scrollLeft = b, Bc(a), a.display.scroller.scrollLeft != b && (a.display.scroller.scrollLeft = b), a.display.scrollbars.setScrollLeft(b)) } function re(a, b) {
		var c = ze(b), d = c.x, c = c.y, e = a.display, f = e.scroller; if (d && f.scrollWidth > f.clientWidth || c && f.scrollHeight > f.clientHeight) {
			if (c &&
				W && J) { var g = b.target, h = e.view; a: for (; g != f; g = g.parentNode)for (var k = 0; k < h.length; k++)if (h[k].node == g) { a.display.currentWheelTarget = g; break a } } !d || wa || ba || null == R ? (c && null != R && (g = c * R, h = a.doc.scrollTop, k = h + e.wrapper.clientHeight, 0 > g ? h = Math.max(0, h + g - 50) : k = Math.min(a.doc.height, k + g + 50), Pc(a, { top: h, bottom: k })), 20 > gc && (null == e.wheelStartX ? (e.wheelStartX = f.scrollLeft, e.wheelStartY = f.scrollTop, e.wheelDX = d, e.wheelDY = c, setTimeout(function() {
					if (null != e.wheelStartX) {
						var a = f.scrollLeft - e.wheelStartX, b = f.scrollTop -
							e.wheelStartY, a = b && e.wheelDY && b / e.wheelDY || a && e.wheelDX && a / e.wheelDX; e.wheelStartX = e.wheelStartY = null; a && (R = (R * gc + a) / (gc + 1), ++gc)
					}
				}, 200)) : (e.wheelDX += d, e.wheelDY += c))) : (c && lb(a, Math.max(0, Math.min(f.scrollTop + c * R, f.scrollHeight - f.clientHeight))), Ma(a, Math.max(0, Math.min(f.scrollLeft + d * R, f.scrollWidth - f.clientWidth))), O(b), e.wheelStartX = null)
		}
	} function hc(a, b, c) {
		if ("string" == typeof b && (b = ic[b], !b)) return !1; a.display.input.ensurePolled(); var d = a.display.shift, e = !1; try {
			Rb(a) && (a.state.suppressEdits =
				!0), c && (a.display.shift = !1), e = b(a) != Ae
		} finally { a.display.shift = d, a.state.suppressEdits = !1 } return e
	} function Of(a, b, c) { for (var d = 0; d < a.state.keyMaps.length; d++) { var e = xb(b, a.state.keyMaps[d], c, a); if (e) return e } return a.options.extraKeys && xb(b, a.options.extraKeys, c, a) || xb(b, a.options.keyMap, c, a) } function jc(a, b, c, d) {
		var e = a.state.keySeq; if (e) { if (Pf(b)) return "handled"; Qf.set(50, function() { a.state.keySeq == e && (a.state.keySeq = null, a.display.input.reset()) }); b = e + " " + b } d = Of(a, b, d); "multi" == d && (a.state.keySeq =
			b); "handled" == d && L(a, "keyHandled", a, b, c); if ("handled" == d || "multi" == d) O(c), Yc(a); return e && !d && /\'$/.test(b) ? (O(c), !0) : !!d
	} function Be(a, b) { var c = Rf(b, !0); return c ? b.shiftKey && !a.state.keySeq ? jc(a, "Shift-" + c, b, function(b) { return hc(a, b, !0) }) || jc(a, c, b, function(b) { if ("string" == typeof b ? /^go[A-Z]/.test(b) : b.motion) return hc(a, b) }) : jc(a, c, b, function(b) { return hc(a, b) }) : !1 } function Sf(a, b, c) { return jc(a, "'" + c + "'", b, function(b) { return hc(a, b, !0) }) } function ve(a) {
		this.curOp.focus = fa(); if (!ja(this, a)) {
			B &&
			11 > C && 27 == a.keyCode && (a.returnValue = !1); var b = a.keyCode; this.display.shift = 16 == b || a.shiftKey; var c = Be(this, a); ba && (md = c ? b : null, !c && 88 == b && !Ce && (W ? a.metaKey : a.ctrlKey) && this.replaceSelection("", null, "cut")); 18 != b || /\bCodeMirror-crosshair\b/.test(this.display.lineDiv.className) || Tf(this)
		}
	} function Tf(a) {
		function b(a) { 18 != a.keyCode && a.altKey || (kb(c, "CodeMirror-crosshair"), ka(document, "keyup", b), ka(document, "mouseover", b)) } var c = a.display.lineDiv; mb(c, "CodeMirror-crosshair"); v(document, "keyup", b); v(document,
			"mouseover", b)
	} function ue(a) { 16 == a.keyCode && (this.doc.sel.shift = !1); ja(this, a) } function we(a) { if (!(oa(this.display, a) || ja(this, a) || a.ctrlKey && !a.altKey || W && a.metaKey)) { var b = a.keyCode, c = a.charCode; if (ba && b == md) md = null, O(a); else if (!ba || a.which && !(10 > a.which) || !Be(this, a)) if (b = String.fromCharCode(null == c ? b : c), !Sf(this, a, b)) this.display.input.onKeyPress(a) } } function Kf(a) { a.state.delayingBlurEvent = !0; setTimeout(function() { a.state.delayingBlurEvent && (a.state.delayingBlurEvent = !1, db(a)) }, 100) } function xc(a) {
		a.state.delayingBlurEvent &&
		(a.state.delayingBlurEvent = !1); "nocursor" != a.options.readOnly && (a.state.focused || (K(a, "focus", a), a.state.focused = !0, mb(a.display.wrapper, "CodeMirror-focused"), a.curOp || a.display.selForContextMenu == a.doc.sel || (a.display.input.reset(), J && setTimeout(function() { a.display.input.reset(!0) }, 20)), a.display.input.receivedFocus()), Yc(a))
	} function db(a) {
		a.state.delayingBlurEvent || (a.state.focused && (K(a, "blur", a), a.state.focused = !1, kb(a.display.wrapper, "CodeMirror-focused")), clearInterval(a.display.blinker),
			setTimeout(function() { a.state.focused || (a.display.shift = !1) }, 150))
	} function qe(a, b) { var c; (c = oa(a.display, b)) || (c = S(a, "gutterContextMenu") ? hd(a, b, "gutterContextMenu", !1, K) : !1); if (!c) a.display.input.onContextMenu(b) } function De(a, b) { if (0 > y(a, b.from)) return a; if (0 >= y(a, b.to)) return ta(b); var c = a.line + b.text.length - (b.to.line - b.from.line) - 1, d = a.ch; a.line == b.to.line && (d += ta(b).ch - b.to.ch); return r(c, d) } function nd(a, b) {
		for (var c = [], d = 0; d < a.sel.ranges.length; d++) {
			var e = a.sel.ranges[d]; c.push(new z(De(e.anchor,
				b), De(e.head, b)))
		} return Z(c, a.sel.primIndex)
	} function Ee(a, b, c) { return a.line == b.line ? r(c.line, a.ch - b.ch + c.ch) : r(c.line + (a.line - b.line), a.ch) } function Fe(a, b, c) { b = { canceled: !1, from: b.from, to: b.to, text: b.text, origin: b.origin, cancel: function() { this.canceled = !0 } }; c && (b.update = function(b, c, f, g) { b && (this.from = w(a, b)); c && (this.to = w(a, c)); f && (this.text = f); void 0 !== g && (this.origin = g) }); K(a, "beforeChange", a, b); a.cm && K(a.cm, "beforeChange", a.cm, b); return b.canceled ? null : { from: b.from, to: b.to, text: b.text, origin: b.origin } }
	function Oa(a, b, c) { if (a.cm) { if (!a.cm.curOp) return G(a.cm, Oa)(a, b, c); if (a.cm.state.suppressEdits) return } if (S(a, "beforeChange") || a.cm && S(a.cm, "beforeChange")) if (b = Fe(a, b, !0), !b) return; if (c = Ge && !c && Uf(a, b.from, b.to)) for (var d = c.length - 1; 0 <= d; --d)He(a, { from: c[d].from, to: c[d].to, text: d ? [""] : b.text }); else He(a, b) } function He(a, b) {
		if (1 != b.text.length || "" != b.text[0] || 0 != y(b.from, b.to)) {
			var c = nd(a, b); Ie(a, b, c, a.cm ? a.cm.curOp.id : NaN); yb(a, b, c, od(a, b)); var d = []; Ga(a, function(a, c) {
				c || -1 != D(d, a.history) || (Je(a.history,
					b), d.push(a.history)); yb(a, b, null, od(a, b))
			})
		}
	} function kc(a, b, c) {
		if (!a.cm || !a.cm.state.suppressEdits) {
			for (var d = a.history, e, f = a.sel, g = "undo" == b ? d.done : d.undone, h = "undo" == b ? d.undone : d.done, k = 0; k < g.length && (e = g[k], c ? !e.ranges || e.equals(a.sel) : e.ranges); k++); if (k != g.length) {
				for (d.lastOrigin = d.lastSelOrigin = null; ;)if (e = g.pop(), e.ranges) { Wb(e, h); if (c && !e.equals(a.sel)) { H(a, e, { clearRedo: !1 }); return } f = e } else break; c = []; Wb(f, h); h.push({ changes: c, generation: d.generation }); d.generation = e.generation || ++d.maxGeneration;
				d = S(a, "beforeChange") || a.cm && S(a.cm, "beforeChange"); for (k = e.changes.length - 1; 0 <= k; --k) { var l = e.changes[k]; l.origin = b; if (d && !Fe(a, l, !1)) { g.length = 0; break } c.push(pd(a, l)); f = k ? nd(a, l) : A(g); yb(a, l, f, Ke(a, l)); !k && a.cm && a.cm.scrollIntoView({ from: l.from, to: ta(l) }); var m = []; Ga(a, function(a, b) { b || -1 != D(m, a.history) || (Je(a.history, l), m.push(a.history)); yb(a, l, null, Ke(a, l)) }) }
			}
		}
	} function Le(a, b) {
		if (0 != b && (a.first += b, a.sel = new la(ob(a.sel.ranges, function(a) {
			return new z(r(a.anchor.line + b, a.anchor.ch), r(a.head.line +
				b, a.head.ch))
		}), a.sel.primIndex), a.cm)) { Q(a.cm, a.first, a.first - b, b); for (var c = a.cm.display, d = c.viewFrom; d < c.viewTo; d++)na(a.cm, d, "gutter") }
	} function yb(a, b, c, d) {
		if (a.cm && !a.cm.curOp) return G(a.cm, yb)(a, b, c, d); if (b.to.line < a.first) Le(a, b.text.length - 1 - (b.to.line - b.from.line)); else if (!(b.from.line > a.lastLine())) {
			if (b.from.line < a.first) { var e = b.text.length - 1 - (a.first - b.from.line); Le(a, e); b = { from: r(a.first, 0), to: r(b.to.line + e, b.to.ch), text: [A(b.text)], origin: b.origin } } e = a.lastLine(); b.to.line > e && (b =
				{ from: b.from, to: r(e, u(a, e).text.length), text: [b.text[0]], origin: b.origin }); b.removed = Da(a, b.from, b.to); c || (c = nd(a, b)); a.cm ? Vf(a.cm, b, d) : qd(a, b, d); Vb(a, c, ha)
		}
	} function Vf(a, b, c) {
		var d = a.doc, e = a.display, f = b.from, g = b.to, h = !1, k = f.line; a.options.lineWrapping || (k = F(ia(u(d, f.line))), d.iter(k, g.line + 1, function(a) { if (a == e.maxLine) return h = !0 })); -1 < d.sel.contains(b.from, b.to) && fe(a); qd(d, b, c, Id(a)); a.options.lineWrapping || (d.iter(k, f.line + b.text.length, function(a) {
			var b = Kb(a); b > e.maxLineLength && (e.maxLine =
				a, e.maxLineLength = b, e.maxLineChanged = !0, h = !1)
		}), h && (a.curOp.updateMaxLine = !0)); d.frontier = Math.min(d.frontier, f.line); fb(a, 400); c = b.text.length - (g.line - f.line) - 1; b.full ? Q(a) : f.line != g.line || 1 != b.text.length || Me(a.doc, b) ? Q(a, f.line, g.line + 1, c) : na(a, f.line, "text"); c = S(a, "changes"); if ((d = S(a, "change")) || c) b = { from: f, to: g, text: b.text, removed: b.removed, origin: b.origin }, d && L(a, "change", a, b), c && (a.curOp.changeObjs || (a.curOp.changeObjs = [])).push(b); a.display.selForContextMenu = null
	} function wb(a, b, c, d, e) {
		d ||
		(d = c); if (0 > y(d, c)) { var f = d; d = c; c = f } "string" == typeof b && (b = sa(b)); Oa(a, { from: c, to: d, text: b, origin: e })
	} function cc(a, b, c, d, e) {
		var f = a.display, g = xa(a.display); 0 > c && (c = 0); var h = a.curOp && null != a.curOp.scrollTop ? a.curOp.scrollTop : f.scroller.scrollTop, k = Nc(a), l = {}; e - c > k && (e = c + k); var m = a.doc.height + Ec(f), p = c < g, g = e > m - g; c < h ? l.scrollTop = p ? 0 : c : e > h + k && (c = Math.min(c, (g ? m : e) - k), c != h && (l.scrollTop = c)); h = a.curOp && null != a.curOp.scrollLeft ? a.curOp.scrollLeft : f.scroller.scrollLeft; a = pa(a) - (a.options.fixedGutter ? f.gutters.offsetWidth :
			0); (f = d - b > a) && (d = b + a); 10 > b ? l.scrollLeft = 0 : b < h ? l.scrollLeft = Math.max(0, b - (f ? 0 : 10)) : d > a + h - 3 && (l.scrollLeft = d + (f ? 0 : 10) - a); return l
	} function lc(a, b, c) { null == b && null == c || mc(a); null != b && (a.curOp.scrollLeft = (null == a.curOp.scrollLeft ? a.doc.scrollLeft : a.curOp.scrollLeft) + b); null != c && (a.curOp.scrollTop = (null == a.curOp.scrollTop ? a.doc.scrollTop : a.curOp.scrollTop) + c) } function Pa(a) {
		mc(a); var b = a.getCursor(), c = b, d = b; a.options.lineWrapping || (c = b.ch ? r(b.line, b.ch - 1) : b, d = r(b.line, b.ch + 1)); a.curOp.scrollToPos = {
			from: c,
			to: d, margin: a.options.cursorScrollMargin, isCursor: !0
		}
	} function mc(a) { var b = a.curOp.scrollToPos; if (b) { a.curOp.scrollToPos = null; var c = oe(a, b.from), d = oe(a, b.to), b = cc(a, Math.min(c.left, d.left), Math.min(c.top, d.top) - b.margin, Math.max(c.right, d.right), Math.max(c.bottom, d.bottom) + b.margin); a.scrollTo(b.scrollLeft, b.scrollTop) } } function pb(a, b, c, d) {
		var e = a.doc, f; null == c && (c = "add"); "smart" == c && (e.mode.indent ? f = sb(a, b) : c = "prev"); var g = a.options.tabSize, h = u(e, b), k = aa(h.text, null, g); h.stateAfter && (h.stateAfter =
			null); var l = h.text.match(/^\s*/)[0], m; if (!d && !/\S/.test(h.text)) m = 0, c = "not"; else if ("smart" == c && (m = e.mode.indent(f, h.text.slice(l.length), h.text), m == Ae || 150 < m)) { if (!d) return; c = "prev" } "prev" == c ? m = b > e.first ? aa(u(e, b - 1).text, null, g) : 0 : "add" == c ? m = k + a.options.indentUnit : "subtract" == c ? m = k - a.options.indentUnit : "number" == typeof c && (m = k + c); m = Math.max(0, m); c = ""; d = 0; if (a.options.indentWithTabs) for (a = Math.floor(m / g); a; --a)d += g, c += "\t"; d < m && (c += Ne(m - d)); if (c != l) return wb(e, c, r(b, 0), r(b, l.length), "+input"), h.stateAfter =
				null, !0; for (a = 0; a < e.sel.ranges.length; a++)if (g = e.sel.ranges[a], g.head.line == b && g.head.ch < l.length) { d = r(b, l.length); Xc(e, a, new z(d, d)); break }
	} function nc(a, b, c, d) { var e = b, f = b; "number" == typeof b ? f = u(a, Math.max(a.first, Math.min(b, a.first + a.size - 1))) : e = F(b); if (null == e) return null; d(f, e) && a.cm && na(a.cm, e, c); return f } function Va(a, b) {
		for (var c = a.doc.sel.ranges, d = [], e = 0; e < c.length; e++) { for (var f = b(c[e]); d.length && 0 >= y(f.from, A(d).to);) { var g = d.pop(); if (0 > y(g.from, f.from)) { f.from = g.from; break } } d.push(f) } T(a,
			function() { for (var b = d.length - 1; 0 <= b; b--)wb(a.doc, "", d[b].from, d[b].to, "+delete"); Pa(a) })
	} function rd(a, b, c, d, e) {
		function f(b) { var d = (e ? gd : Oe)(l, h, c, !0); if (null == d) { if (b = !b) b = g + c, b < a.first || b >= a.first + a.size ? b = m = !1 : (g = b, b = l = u(a, b)); if (b) h = e ? (0 > c ? bc : ac)(l) : 0 > c ? l.text.length : 0; else return m = !1 } else h = d; return !0 } var g = b.line, h = b.ch, k = c, l = u(a, g), m = !0; if ("char" == d) f(); else if ("column" == d) f(!0); else if ("word" == d || "group" == d) {
			var p = null; d = "group" == d; b = a.cm && a.cm.getHelper(b, "wordChars"); for (var n = !0; !(0 >
				c) || f(!n); n = !1) { var q = l.text.charAt(h) || "\n", q = oc(q, b) ? "w" : d && "\n" == q ? "n" : !d || /\s/.test(q) ? null : "p"; !d || n || q || (q = "s"); if (p && p != q) { 0 > c && (c = 1, f()); break } q && (p = q); if (0 < c && !f(!n)) break }
		} k = Xb(a, r(g, h), k, !0); m || (k.hitSide = !0); return k
	} function Pe(a, b, c, d) {
		var e = a.doc, f = b.left, g; "page" == d ? (g = Math.min(a.display.wrapper.clientHeight, window.innerHeight || document.documentElement.clientHeight), g = b.top + c * (g - (0 > c ? 1.5 : .5) * xa(a.display))) : "line" == d && (g = 0 < c ? b.bottom + 3 : b.top - 3); for (; ;) {
			b = fd(a, f, g); if (!b.outside) break;
			if (0 > c ? 0 >= g : g >= e.height) { b.hitSide = !0; break } g += 5 * c
		} return b
	} function x(a, b, c, d) { q.defaults[a] = b; c && (Ka[a] = d ? function(a, b, d) { d != Fd && c(a, b, d) } : c) } function Wf(a) {
		var b = a.split(/-(?!$)/); a = b[b.length - 1]; for (var c, d, e, f, g = 0; g < b.length - 1; g++) { var h = b[g]; if (/^(cmd|meta|m)$/i.test(h)) f = !0; else if (/^a(lt)?$/i.test(h)) c = !0; else if (/^(c|ctrl|control)$/i.test(h)) d = !0; else if (/^s(hift)$/i.test(h)) e = !0; else throw Error("Unrecognized modifier name: " + h); } c && (a = "Alt-" + a); d && (a = "Ctrl-" + a); f && (a = "Cmd-" + a); e && (a = "Shift-" +
			a); return a
	} function pc(a) { return "string" == typeof a ? ua[a] : a } function Wa(a, b, c, d, e) {
		if (d && d.shared) return Xf(a, b, c, d, e); if (a.cm && !a.cm.curOp) return G(a.cm, Wa)(a, b, c, d, e); var f = new Ha(a, e); e = y(b, c); d && V(d, f, !1); if (0 < e || 0 == e && !1 !== f.clearWhenEmpty) return f; f.replacedWith && (f.collapsed = !0, f.widgetNode = t("span", [f.replacedWith], "CodeMirror-widget"), d.handleMouseEvents || f.widgetNode.setAttribute("cm-ignore-events", "true"), d.insertLeft && (f.widgetNode.insertLeft = !0)); if (f.collapsed) {
			if (Qe(a, b.line, b, c, f) ||
				b.line != c.line && Qe(a, c.line, b, c, f)) throw Error("Inserting collapsed marker partially overlapping an existing one"); ra = !0
		} f.addToHistory && Ie(a, { from: b, to: c, origin: "markText" }, a.sel, NaN); var g = b.line, h = a.cm, k; a.iter(g, c.line + 1, function(a) { h && f.collapsed && !h.options.lineWrapping && ia(a) == h.display.maxLine && (k = !0); f.collapsed && g != b.line && ca(a, 0); var d = new qc(f, g == b.line ? b.ch : null, g == c.line ? c.ch : null); a.markedSpans = a.markedSpans ? a.markedSpans.concat([d]) : [d]; d.marker.attachLine(a); ++g }); f.collapsed && a.iter(b.line,
			c.line + 1, function(b) { ya(a, b) && ca(b, 0) }); f.clearOnEnter && v(f, "beforeCursorEnter", function() { f.clear() }); f.readOnly && (Ge = !0, (a.history.done.length || a.history.undone.length) && a.clearHistory()); f.collapsed && (f.id = ++sd, f.atomic = !0); if (h) { k && (h.curOp.updateMaxLine = !0); if (f.collapsed) Q(h, b.line, c.line + 1); else if (f.className || f.title || f.startStyle || f.endStyle || f.css) for (d = b.line; d <= c.line; d++)na(h, d, "text"); f.atomic && ge(h.doc); L(h, "markerAdded", h, f) } return f
	} function Xf(a, b, c, d, e) {
		d = V(d); d.shared = !1; var f =
			[Wa(a, b, c, d, e)], g = f[0], h = d.widgetNode; Ga(a, function(a) { h && (d.widgetNode = h.cloneNode(!0)); f.push(Wa(a, w(a, b), w(a, c), d, e)); for (var l = 0; l < a.linked.length; ++l)if (a.linked[l].isParent) return; g = A(f) }); return new rc(f, g)
	} function Re(a) { return a.findMarks(r(a.first, 0), a.clipPos(r(a.lastLine())), function(a) { return a.parent }) } function Yf(a) {
		for (var b = 0; b < a.length; b++) {
			var c = a[b], d = [c.primary.doc]; Ga(c.primary.doc, function(a) { d.push(a) }); for (var e = 0; e < c.markers.length; e++) {
				var f = c.markers[e]; -1 == D(d, f.doc) &&
					(f.parent = null, c.markers.splice(e--, 1))
			}
		}
	} function qc(a, b, c) { this.marker = a; this.from = b; this.to = c } function zb(a, b) { if (a) for (var c = 0; c < a.length; ++c) { var d = a[c]; if (d.marker == b) return d } } function od(a, b) {
		if (b.full) return null; var c = qb(a, b.from.line) && u(a, b.from.line).markedSpans, d = qb(a, b.to.line) && u(a, b.to.line).markedSpans; if (!c && !d) return null; var e = b.from.ch, f = b.to.ch, g = 0 == y(b.from, b.to); if (c) for (var h = 0, k; h < c.length; ++h) {
			var l = c[h], m = l.marker; if (null == l.from || (m.inclusiveLeft ? l.from <= e : l.from < e) ||
				!(l.from != e || "bookmark" != m.type || g && l.marker.insertLeft)) { var p = null == l.to || (m.inclusiveRight ? l.to >= e : l.to > e); (k || (k = [])).push(new qc(m, l.from, p ? null : l.to)) }
		} c = k; if (d) for (var h = 0, n; h < d.length; ++h)if (k = d[h], l = k.marker, null == k.to || (l.inclusiveRight ? k.to >= f : k.to > f) || k.from == f && "bookmark" == l.type && (!g || k.marker.insertLeft)) m = null == k.from || (l.inclusiveLeft ? k.from <= f : k.from < f), (n || (n = [])).push(new qc(l, m ? null : k.from - f, null == k.to ? null : k.to - f)); d = n; g = 1 == b.text.length; n = A(b.text).length + (g ? e : 0); if (c) for (f =
			0; f < c.length; ++f)if (h = c[f], null == h.to) (k = zb(d, h.marker), k) ? g && (h.to = null == k.to ? null : k.to + n) : h.to = e; if (d) for (f = 0; f < d.length; ++f)h = d[f], null != h.to && (h.to += n), null == h.from ? (k = zb(c, h.marker), k || (h.from = n, g && (c || (c = [])).push(h))) : (h.from += n, g && (c || (c = [])).push(h)); c && (c = Se(c)); d && d != c && (d = Se(d)); e = [c]; if (!g) { var g = b.text.length - 2, q; if (0 < g && c) for (f = 0; f < c.length; ++f)null == c[f].to && (q || (q = [])).push(new qc(c[f].marker, null, null)); for (f = 0; f < g; ++f)e.push(q); e.push(d) } return e
	} function Se(a) {
		for (var b = 0; b < a.length; ++b) {
			var c =
				a[b]; null != c.from && c.from == c.to && !1 !== c.marker.clearWhenEmpty && a.splice(b--, 1)
		} return a.length ? a : null
	} function Ke(a, b) { var c; if (c = b["spans_" + a.id]) { for (var d = 0, e = []; d < b.text.length; ++d)e.push(Zf(c[d])); c = e } else c = null; d = od(a, b); if (!c) return d; if (!d) return c; for (e = 0; e < c.length; ++e) { var f = c[e], g = d[e]; if (f && g) { var h = 0; a: for (; h < g.length; ++h) { for (var k = g[h], l = 0; l < f.length; ++l)if (f[l].marker == k.marker) continue a; f.push(k) } } else g && (c[e] = g) } return c } function Uf(a, b, c) {
		var d = null; a.iter(b.line, c.line + 1, function(a) {
			if (a.markedSpans) for (var b =
				0; b < a.markedSpans.length; ++b) { var c = a.markedSpans[b].marker; !c.readOnly || d && -1 != D(d, c) || (d || (d = [])).push(c) }
		}); if (!d) return null; a = [{ from: b, to: c }]; for (b = 0; b < d.length; ++b) { c = d[b]; for (var e = c.find(0), f = 0; f < a.length; ++f) { var g = a[f]; if (!(0 > y(g.to, e.from) || 0 < y(g.from, e.to))) { var h = [f, 1], k = y(g.from, e.from), l = y(g.to, e.to); (0 > k || !c.inclusiveLeft && !k) && h.push({ from: g.from, to: e.from }); (0 < l || !c.inclusiveRight && !l) && h.push({ from: e.to, to: g.to }); a.splice.apply(a, h); f += h.length - 1 } } } return a
	} function Te(a) {
		var b =
			a.markedSpans; if (b) { for (var c = 0; c < b.length; ++c)b[c].marker.detachLine(a); a.markedSpans = null }
	} function Ue(a, b) { if (b) { for (var c = 0; c < b.length; ++c)b[c].marker.attachLine(a); a.markedSpans = b } } function Ve(a, b) { var c = a.lines.length - b.lines.length; if (0 != c) return c; var c = a.find(), d = b.find(), e = y(c.from, d.from) || (a.inclusiveLeft ? -1 : 0) - (b.inclusiveLeft ? -1 : 0); return e ? -e : (c = y(c.to, d.to) || (a.inclusiveRight ? 1 : 0) - (b.inclusiveRight ? 1 : 0)) ? c : b.id - a.id } function Aa(a, b) {
		var c = ra && a.markedSpans, d; if (c) for (var e, f = 0; f < c.length; ++f)e =
			c[f], e.marker.collapsed && null == (b ? e.from : e.to) && (!d || 0 > Ve(d, e.marker)) && (d = e.marker); return d
	} function Qe(a, b, c, d, e) {
		a = u(a, b); if (a = ra && a.markedSpans) for (b = 0; b < a.length; ++b) {
			var f = a[b]; if (f.marker.collapsed) {
				var g = f.marker.find(0), h = y(g.from, c) || (f.marker.inclusiveLeft ? -1 : 0) - (e.inclusiveLeft ? -1 : 0), k = y(g.to, d) || (f.marker.inclusiveRight ? 1 : 0) - (e.inclusiveRight ? 1 : 0); if (!(0 <= h && 0 >= k || 0 >= h && 0 <= k) && (0 >= h && (0 < y(g.to, c) || f.marker.inclusiveRight && e.inclusiveLeft) || 0 <= h && (0 > y(g.from, d) || f.marker.inclusiveLeft &&
					e.inclusiveRight))) return !0
			}
		}
	} function ia(a) { for (var b; b = Aa(a, !0);)a = b.find(-1, !0).line; return a } function Mc(a, b) { var c = u(a, b), d = ia(c); return c == d ? b : F(d) } function Ld(a, b) { if (b > a.lastLine()) return b; var c = u(a, b), d; if (!ya(a, c)) return b; for (; d = Aa(c, !1);)c = d.find(1, !0).line; return F(c) + 1 } function ya(a, b) { var c = ra && b.markedSpans; if (c) for (var d, e = 0; e < c.length; ++e)if (d = c[e], d.marker.collapsed && (null == d.from || !d.marker.widgetNode && 0 == d.from && d.marker.inclusiveLeft && td(a, b, d))) return !0 } function td(a, b, c) {
		if (null ==
			c.to) return b = c.marker.find(1, !0), td(a, b.line, zb(b.line.markedSpans, c.marker)); if (c.marker.inclusiveRight && c.to == b.text.length) return !0; for (var d, e = 0; e < b.markedSpans.length; ++e)if (d = b.markedSpans[e], d.marker.collapsed && !d.marker.widgetNode && d.from == c.to && (null == d.to || d.to != c.from) && (d.marker.inclusiveLeft || c.marker.inclusiveRight) && td(a, b, d)) return !0
	} function ub(a) {
		if (null != a.height) return a.height; var b = a.doc.cm; if (!b) return 0; if (!Wc(document.body, a.node)) {
			var c = "position: relative;"; a.coverGutter &&
				(c += "margin-left: -" + b.display.gutters.offsetWidth + "px;"); a.noHScroll && (c += "width: " + b.display.wrapper.clientWidth + "px;"); U(b.display.measure, t("div", [a.node], null, c))
		} return a.height = a.node.offsetHeight
	} function $f(a, b, c, d) {
		var e = new sc(a, c, d), f = a.cm; f && e.noHScroll && (f.display.alignWidgets = !0); nc(a, b, "widget", function(b) {
			var c = b.widgets || (b.widgets = []); null == e.insertAt ? c.push(e) : c.splice(Math.min(c.length - 1, Math.max(0, e.insertAt)), 0, e); e.line = b; f && !ya(a, b) && (c = ea(b) < a.scrollTop, ca(b, b.height + ub(e)),
				c && lc(f, null, e.height), f.curOp.forceUpdate = !0); return !0
		}); return e
	} function We(a, b) { if (a) for (; ;) { var c = a.match(/(?:^|\s+)line-(background-)?(\S+)/); if (!c) break; a = a.slice(0, c.index) + a.slice(c.index + c[0].length); var d = c[1] ? "bgClass" : "textClass"; null == b[d] ? b[d] = c[2] : (new RegExp("(?:^|s)" + c[2] + "(?:$|s)")).test(b[d]) || (b[d] += " " + c[2]) } return a } function Xe(a, b) { if (a.blankLine) return a.blankLine(b); if (a.innerMode) { var c = q.innerMode(a, b); if (c.mode.blankLine) return c.mode.blankLine(c.state) } } function ud(a,
		b, c, d) { for (var e = 0; 10 > e; e++) { d && (d[0] = q.innerMode(a, c).mode); var f = a.token(b, c); if (b.pos > b.start) return f } throw Error("Mode " + a.name + " failed to advance stream."); } function Ye(a, b, c, d) { function e(a) { return { start: m.start, end: m.pos, string: m.current(), type: h || null, state: a ? Sa(f.mode, l) : l } } var f = a.doc, g = f.mode, h; b = w(f, b); var k = u(f, b.line), l = sb(a, b.line, c), m = new tc(k.text, a.options.tabSize), p; for (d && (p = []); (d || m.pos < b.ch) && !m.eol();)m.start = m.pos, h = ud(g, m, l), d && p.push(e(!0)); return d ? p : e() } function Ze(a,
			b, c, d, e, f, g) { var h = c.flattenSpans; null == h && (h = a.options.flattenSpans); var k = 0, l = null, m = new tc(b, a.options.tabSize), p, n = a.options.addModeClass && [null]; for ("" == b && We(Xe(c, d), f); !m.eol();) { m.pos > a.options.maxHighlightLength ? (h = !1, g && Zc(a, b, d, m.pos), m.pos = b.length, p = null) : p = We(ud(c, m, d, n), f); if (n) { var q = n[0].name; q && (p = "m-" + (p ? q + " " + p : q)) } if (!h || l != p) { for (; k < m.start;)k = Math.min(m.start, k + 5E4), e(k, l); l = p } m.start = m.pos } for (; k < m.pos;)a = Math.min(m.pos, k + 5E4), e(a, l), k = a } function je(a, b, c, d) {
				var e = [a.state.modeGen],
				f = {}; Ze(a, b.text, a.doc.mode, c, function(a, b) { e.push(a, b) }, f, d); for (c = 0; c < a.state.overlays.length; ++c) { var g = a.state.overlays[c], h = 1, k = 0; Ze(a, b.text, g.mode, !0, function(a, b) { for (var c = h; k < a;) { var d = e[h]; d > a && e.splice(h, 1, a, e[h + 1], d); h += 2; k = Math.min(a, d) } if (b) if (g.opaque) e.splice(c, h - c, a, "cm-overlay " + b), h = c + 2; else for (; c < h; c += 2)d = e[c + 1], e[c + 1] = (d ? d + " " : "") + "cm-overlay " + b }, f) } return { styles: e, classes: f.bgClass || f.textClass ? f : null }
			} function $e(a, b, c) {
				if (!b.styles || b.styles[0] != a.state.modeGen) {
					var d = je(a,
						b, b.stateAfter = sb(a, F(b))); b.styles = d.styles; d.classes ? b.styleClasses = d.classes : b.styleClasses && (b.styleClasses = null); c === a.doc.frontier && a.doc.frontier++
				} return b.styles
			} function Zc(a, b, c, d) { var e = a.doc.mode, f = new tc(b, a.options.tabSize); f.start = f.pos = d || 0; for ("" == b && Xe(e, c); !f.eol() && f.pos <= a.options.maxHighlightLength;)ud(e, f, c), f.start = f.pos } function af(a, b) { if (!a || /^\s*$/.test(a)) return null; var c = b.addModeClass ? ag : bg; return c[a] || (c[a] = a.replace(/\S+/g, "cm-$\x26")) } function Sd(a, b) {
				var c = t("span",
					null, null, J ? "padding-right: .1px" : null), c = { pre: t("pre", [c]), content: c, col: 0, pos: 0, cm: a, splitSpaces: (B || J) && a.getOption("lineWrapping") }; b.measure = {}; for (var d = 0; d <= (b.rest ? b.rest.length : 0); d++) {
						var e = d ? b.rest[d - 1] : b.line, f; c.pos = 0; c.addToken = cg; var g; if (null != vd) g = vd; else { g = U(a.display.measure, document.createTextNode("AخA")); var h = Ea(g, 0, 1).getBoundingClientRect(); g = h && h.left != h.right ? vd = 3 > Ea(g, 1, 2).getBoundingClientRect().right - h.right : !1 } g && (f = Y(e)) && (c.addToken = dg(c.addToken, f)); c.map = []; h = b !=
							a.display.externalMeasured && F(e); a: {
								g = c; var h = $e(a, e, h), k = e.markedSpans, l = e.text, m = 0; if (k) for (var p = l.length, n = 0, q = 1, r = "", u = void 0, v = void 0, w = 0, x = void 0, y = void 0, A = void 0, C = void 0, z = void 0; ;) {
									if (w == n) {
										for (var x = y = A = C = v = "", z = null, w = Infinity, G = [], H = 0; H < k.length; ++H) {
											var I = k[H], D = I.marker; "bookmark" == D.type && I.from == n && D.widgetNode ? G.push(D) : I.from <= n && (null == I.to || I.to > n || D.collapsed && I.to == n && I.from == n) ? (null != I.to && I.to != n && w > I.to && (w = I.to, y = ""), D.className && (x += " " + D.className), D.css && (v = D.css),
												D.startStyle && I.from == n && (A += " " + D.startStyle), D.endStyle && I.to == w && (y += " " + D.endStyle), D.title && !C && (C = D.title), D.collapsed && (!z || 0 > Ve(z.marker, D)) && (z = I)) : I.from > n && w > I.from && (w = I.from)
										} if (z && (z.from || 0) == n) { bf(g, (null == z.to ? p + 1 : z.to) - n, z.marker, null == z.from); if (null == z.to) break a; z.to == n && (z = !1) } if (!z && G.length) for (H = 0; H < G.length; ++H)bf(g, 0, G[H])
									} if (n >= p) break; for (G = Math.min(p, w); ;) {
										if (r) {
											H = n + r.length; z || (I = H > G ? r.slice(0, G - n) : r, g.addToken(g, I, u ? u + x : x, A, n + I.length == w ? y : "", C, v)); if (H >= G) {
												r = r.slice(G -
													n); n = G; break
											} n = H; A = ""
										} r = l.slice(m, m = h[q++]); u = af(h[q++], g.cm.options)
									}
								} else for (var q = 1; q < h.length; q += 2)g.addToken(g, l.slice(m, m = h[q]), af(h[q + 1], g.cm.options))
							} e.styleClasses && (e.styleClasses.bgClass && (c.bgClass = wd(e.styleClasses.bgClass, c.bgClass || "")), e.styleClasses.textClass && (c.textClass = wd(e.styleClasses.textClass, c.textClass || ""))); 0 == c.map.length && c.map.push(0, 0, c.content.appendChild(eg(a.display.measure))); 0 == d ? (b.measure.map = c.map, b.measure.cache = {}) : ((b.measure.maps || (b.measure.maps = [])).push(c.map),
								(b.measure.caches || (b.measure.caches = [])).push({}))
					} J && /\bcm-tab\b/.test(c.content.lastChild.className) && (c.content.className = "cm-tab-wrap-hack"); K(a, "renderLine", a, b.line, c.pre); c.pre.className && (c.textClass = wd(c.pre.className, c.textClass || "")); return c
			} function cg(a, b, c, d, e, f, g) {
				if (b) {
					var h = a.splitSpaces ? b.replace(/ {3,}/g, fg) : b, k = a.cm.state.specialChars, l = !1; if (k.test(b)) for (var m = document.createDocumentFragment(), p = 0; ;) {
						k.lastIndex = p; var n = k.exec(b), q = n ? n.index - p : b.length - p; if (q) {
							var r = document.createTextNode(h.slice(p,
								p + q)); B && 9 > C ? m.appendChild(t("span", [r])) : m.appendChild(r); a.map.push(a.pos, a.pos + q, r); a.col += q; a.pos += q
						} if (!n) break; p += q + 1; "\t" == n[0] ? (r = a.cm.options.tabSize, n = r - a.col % r, r = m.appendChild(t("span", Ne(n), "cm-tab")), r.setAttribute("role", "presentation"), r.setAttribute("cm-text", "\t"), a.col += n) : (r = a.cm.options.specialCharPlaceholder(n[0]), r.setAttribute("cm-text", n[0]), B && 9 > C ? m.appendChild(t("span", [r])) : m.appendChild(r), a.col += 1); a.map.push(a.pos, a.pos + 1, r); a.pos++
					} else {
						a.col += b.length; var m = document.createTextNode(h);
						a.map.push(a.pos, a.pos + b.length, m); B && 9 > C && (l = !0); a.pos += b.length
					} if (c || d || e || l || g) return b = c || "", d && (b += d), e && (b += e), d = t("span", [m], b, g), f && (d.title = f), a.content.appendChild(d); a.content.appendChild(m)
				}
			} function fg(a) { for (var b = " ", c = 0; c < a.length - 2; ++c)b += c % 2 ? " " : " "; return b + " " } function dg(a, b) {
				return function(c, d, e, f, g, h, k) {
					e = e ? e + " cm-force-border" : "cm-force-border"; for (var l = c.pos, m = l + d.length; ;) {
						for (var p = 0; p < b.length; p++) { var n = b[p]; if (n.to > l && n.from <= l) break } if (n.to >= m) return a(c, d, e, f, g,
							h, k); a(c, d.slice(0, n.to - l), e, f, null, h, k); f = null; d = d.slice(n.to - l); l = n.to
					}
				}
			} function bf(a, b, c, d) { var e = !d && c.widgetNode; e && a.map.push(a.pos, a.pos + b, e); !d && a.cm.display.input.needsContentAttribute && (e || (e = a.content.appendChild(document.createElement("span"))), e.setAttribute("cm-marker", c.id)); e && (a.cm.display.input.setUneditable(e), a.content.appendChild(e)); a.pos += b } function Me(a, b) { return 0 == b.from.ch && 0 == b.to.ch && "" == A(b.text) && (!a.cm || a.cm.options.wholeLineUpdateBefore) } function qd(a, b, c, d) {
				function e(a,
					c, e) { a.text = c; a.stateAfter && (a.stateAfter = null); a.styles && (a.styles = null); null != a.order && (a.order = null); Te(a); Ue(a, e); c = d ? d(a) : 1; c != a.height && ca(a, c); L(a, "change", a, b) } function f(a, b) { for (var e = a, f = []; e < b; ++e)f.push(new Ab(k[e], c ? c[e] : null, d)); return f } var g = b.from, h = b.to, k = b.text, l = u(a, g.line), m = u(a, h.line), p = A(k), n = c ? c[k.length - 1] : null, q = h.line - g.line; if (b.full) a.insert(0, f(0, k.length)), a.remove(k.length, a.size - k.length); else if (Me(a, b)) {
						var r = f(0, k.length - 1); e(m, m.text, n); q && a.remove(g.line, q);
						r.length && a.insert(g.line, r)
					} else l == m ? 1 == k.length ? e(l, l.text.slice(0, g.ch) + p + l.text.slice(h.ch), n) : (r = f(1, k.length - 1), r.push(new Ab(p + l.text.slice(h.ch), n, d)), e(l, l.text.slice(0, g.ch) + k[0], c ? c[0] : null), a.insert(g.line + 1, r)) : 1 == k.length ? (e(l, l.text.slice(0, g.ch) + k[0] + m.text.slice(h.ch), c ? c[0] : null), a.remove(g.line + 1, q)) : (e(l, l.text.slice(0, g.ch) + k[0], c ? c[0] : null), e(m, p + m.text.slice(h.ch), n), r = f(1, k.length - 1), 1 < q && a.remove(g.line + 1, q - 1), a.insert(g.line + 1, r)); L(a, "change", a, b)
			} function Bb(a) {
				this.lines =
				a; this.parent = null; for (var b = 0, c = 0; b < a.length; ++b)a[b].parent = this, c += a[b].height; this.height = c
			} function Cb(a) { this.children = a; for (var b = 0, c = 0, d = 0; d < a.length; ++d) { var e = a[d], b = b + e.chunkSize(), c = c + e.height; e.parent = this } this.size = b; this.height = c; this.parent = null } function Ga(a, b, c) { function d(a, f, g) { if (a.linked) for (var h = 0; h < a.linked.length; ++h) { var k = a.linked[h]; if (k.doc != f) { var l = g && k.sharedHist; if (!c || l) b(k.doc, l), d(k.doc, a, l) } } } d(a, null, !0) } function Ed(a, b) {
				if (b.cm) throw Error("This document is already in use.");
				a.doc = b; b.cm = a; Ac(a); zc(a); a.options.lineWrapping || Dc(a); a.options.mode = b.modeOption; Q(a)
			} function u(a, b) { b -= a.first; if (0 > b || b >= a.size) throw Error("There is no line " + (b + a.first) + " in the document."); for (var c = a; !c.lines;)for (var d = 0; ; ++d) { var e = c.children[d], f = e.chunkSize(); if (b < f) { c = e; break } b -= f } return c.lines[b] } function Da(a, b, c) { var d = [], e = b.line; a.iter(b.line, c.line + 1, function(a) { a = a.text; e == c.line && (a = a.slice(0, c.ch)); e == b.line && (a = a.slice(b.ch)); d.push(a); ++e }); return d } function xd(a, b, c) {
				var d =
					[]; a.iter(b, c, function(a) { d.push(a.text) }); return d
			} function ca(a, b) { var c = b - a.height; if (c) for (var d = a; d; d = d.parent)d.height += c } function F(a) { if (null == a.parent) return null; var b = a.parent; a = D(b.lines, a); for (var c = b.parent; c; b = c, c = c.parent)for (var d = 0; c.children[d] != b; ++d)a += c.children[d].chunkSize(); return a + b.first } function Ba(a, b) {
				var c = a.first; a: do { for (var d = 0; d < a.children.length; ++d) { var e = a.children[d], f = e.height; if (b < f) { a = e; continue a } b -= f; c += e.chunkSize() } return c } while (!a.lines); for (d = 0; d <
					a.lines.length; ++d) { e = a.lines[d].height; if (b < e) break; b -= e } return c + d
			} function ea(a) { a = ia(a); for (var b = 0, c = a.parent, d = 0; d < c.lines.length; ++d) { var e = c.lines[d]; if (e == a) break; else b += e.height } for (a = c.parent; a; c = a, a = c.parent)for (d = 0; d < a.children.length && (e = a.children[d], e != c); ++d)b += e.height; return b } function Y(a) { var b = a.order; null == b && (b = a.order = gg(a.text)); return b } function uc(a) {
				this.done = []; this.undone = []; this.undoDepth = Infinity; this.lastModTime = this.lastSelTime = 0; this.lastOrigin = this.lastSelOrigin =
					this.lastOp = this.lastSelOp = null; this.generation = this.maxGeneration = a || 1
			} function pd(a, b) { var c = { from: Rc(b.from), to: ta(b), text: Da(a, b.from, b.to) }; cf(a, c, b.from.line, b.to.line + 1); Ga(a, function(a) { cf(a, c, b.from.line, b.to.line + 1) }, !0); return c } function ce(a) { for (; a.length;)if (A(a).ranges) a.pop(); else break } function Ie(a, b, c, d) {
				var e = a.history; e.undone.length = 0; var f = +new Date, g, h; if (h = e.lastOp == d || e.lastOrigin == b.origin && b.origin && ("+" == b.origin.charAt(0) && a.cm && e.lastModTime > f - a.cm.options.historyEventDelay ||
					"*" == b.origin.charAt(0))) e.lastOp == d ? (ce(e.done), g = A(e.done)) : e.done.length && !A(e.done).ranges ? g = A(e.done) : 1 < e.done.length && !e.done[e.done.length - 2].ranges ? (e.done.pop(), g = A(e.done)) : g = void 0, h = g; if (h) { var k = A(g.changes); 0 == y(b.from, b.to) && 0 == y(b.from, k.to) ? k.to = ta(b) : g.changes.push(pd(a, b)) } else for ((g = A(e.done)) && g.ranges || Wb(a.sel, e.done), g = { changes: [pd(a, b)], generation: e.generation }, e.done.push(g); e.done.length > e.undoDepth;)e.done.shift(), e.done[0].ranges || e.done.shift(); e.done.push(c); e.generation =
						++e.maxGeneration; e.lastModTime = e.lastSelTime = f; e.lastOp = e.lastSelOp = d; e.lastOrigin = e.lastSelOrigin = b.origin; k || K(a, "historyAdded")
			} function Wb(a, b) { var c = A(b); c && c.ranges && c.equals(a) || b.push(a) } function cf(a, b, c, d) { var e = b["spans_" + a.id], f = 0; a.iter(Math.max(a.first, c), Math.min(a.first + a.size, d), function(c) { c.markedSpans && ((e || (e = b["spans_" + a.id] = {}))[f] = c.markedSpans); ++f }) } function Zf(a) {
				if (!a) return null; for (var b = 0, c; b < a.length; ++b)a[b].marker.explicitlyCleared ? c || (c = a.slice(0, b)) : c && c.push(a[b]);
				return c ? c.length ? c : null : a
			} function Xa(a, b, c) { for (var d = 0, e = []; d < a.length; ++d) { var f = a[d]; if (f.ranges) e.push(c ? la.prototype.deepCopy.call(f) : f); else { var f = f.changes, g = []; e.push({ changes: g }); for (var h = 0; h < f.length; ++h) { var k = f[h], l; g.push({ from: k.from, to: k.to, text: k.text }); if (b) for (var m in k) (l = m.match(/^spans_(\d+)$/)) && -1 < D(b, Number(l[1])) && (A(g)[m] = k[m], delete k[m]) } } } return e } function df(a, b, c, d) { c < a.line ? a.line += d : b < a.line && (a.line = b, a.ch = 0) } function ef(a, b, c, d) {
				for (var e = 0; e < a.length; ++e) {
					var f =
						a[e], g = !0; if (f.ranges) { f.copied || (f = a[e] = f.deepCopy(), f.copied = !0); for (var h = 0; h < f.ranges.length; h++)df(f.ranges[h].anchor, b, c, d), df(f.ranges[h].head, b, c, d) } else { for (h = 0; h < f.changes.length; ++h) { var k = f.changes[h]; if (c < k.from.line) k.from = r(k.from.line + d, k.from.ch), k.to = r(k.to.line + d, k.to.ch); else if (b <= k.to.line) { g = !1; break } } g || (a.splice(0, e + 1), e = 0) }
				}
			} function Je(a, b) { var c = b.from.line, d = b.to.line, e = b.text.length - (d - c) - 1; ef(a.done, c, d, e); ef(a.undone, c, d, e) } function ld(a) {
				return null != a.defaultPrevented ?
					a.defaultPrevented : 0 == a.returnValue
			} function xe(a) { var b = a.which; null == b && (a.button & 1 ? b = 1 : a.button & 2 ? b = 3 : a.button & 4 && (b = 2)); W && a.ctrlKey && 1 == b && (b = 3); return b } function L(a, b) { function c(a) { return function() { a.apply(null, e) } } var d = a._handlers && a._handlers[b]; if (d) { var e = Array.prototype.slice.call(arguments, 2), f; Ta ? f = Ta.delayedCallbacks : Db ? f = Db : (f = Db = [], setTimeout(hg, 0)); for (var g = 0; g < d.length; ++g)f.push(c(d[g])) } } function hg() { var a = Db; Db = null; for (var b = 0; b < a.length; ++b)a[b]() } function ja(a, b, c) {
				"string" ==
				typeof b && (b = { type: b, preventDefault: function() { this.defaultPrevented = !0 } }); K(a, c || b.type, a, b); return ld(b) || b.codemirrorIgnore
			} function fe(a) { var b = a._handlers && a._handlers.cursorActivity; if (b) { a = a.curOp.cursorActivityHandlers || (a.curOp.cursorActivityHandlers = []); for (var c = 0; c < b.length; ++c)-1 == D(a, b[c]) && a.push(b[c]) } } function S(a, b) { var c = a._handlers && a._handlers[b]; return c && 0 < c.length } function Ya(a) { a.prototype.on = function(a, c) { v(this, a, c) }; a.prototype.off = function(a, c) { ka(this, a, c) } } function bb() {
				this.id =
				null
			} function ye(a, b, c) { for (var d = 0, e = 0; ;) { var f = a.indexOf("\t", d); -1 == f && (f = a.length); var g = f - d; if (f == a.length || e + g >= b) return d + Math.min(g, b - e); e += f - d; e += c - e % c; d = f + 1; if (e >= b) return d } } function Ne(a) { for (; vc.length <= a;)vc.push(A(vc) + " "); return vc[a] } function A(a) { return a[a.length - 1] } function D(a, b) { for (var c = 0; c < a.length; ++c)if (a[c] == b) return c; return -1 } function ob(a, b) { for (var c = [], d = 0; d < a.length; d++)c[d] = b(a[d], d); return c } function Eb() { } function ff(a, b) {
				var c; Object.create ? c = Object.create(a) :
					(Eb.prototype = a, c = new Eb); b && V(b, c); return c
			} function V(a, b, c) { b || (b = {}); for (var d in a) !a.hasOwnProperty(d) || !1 === c && b.hasOwnProperty(d) || (b[d] = a[d]); return b } function cb(a) { var b = Array.prototype.slice.call(arguments, 1); return function() { return a.apply(null, b) } } function oc(a, b) { return b ? -1 < b.source.indexOf("\\w") && gf(a) ? !0 : b.test(a) : gf(a) } function hf(a) { for (var b in a) if (a.hasOwnProperty(b) && a[b]) return !1; return !0 } function tb(a) { return 768 <= a.charCodeAt(0) && ig.test(a) } function t(a, b, c, d) {
				a = document.createElement(a);
				c && (a.className = c); d && (a.style.cssText = d); if ("string" == typeof b) a.appendChild(document.createTextNode(b)); else if (b) for (c = 0; c < b.length; ++c)a.appendChild(b[c]); return a
			} function za(a) { for (var b = a.childNodes.length; 0 < b; --b)a.removeChild(a.firstChild); return a } function U(a, b) { return za(a).appendChild(b) } function fa() { return document.activeElement } function Fb(a) { return new RegExp("(^|\\s)" + a + "(?:$|\\s)\\s*") } function wd(a, b) {
				for (var c = a.split(" "), d = 0; d < c.length; d++)c[d] && !Fb(c[d]).test(b) && (b += " " + c[d]);
				return b
			} function jf(a) { if (document.body.getElementsByClassName) for (var b = document.body.getElementsByClassName("CodeMirror"), c = 0; c < b.length; c++) { var d = b[c].CodeMirror; d && a(d) } } function tf() { var a; v(window, "resize", function() { null == a && (a = setTimeout(function() { a = null; jf(If) }, 100)) }); v(window, "blur", function() { jf(db) }) } function eg(a) {
				if (null == yd) { var b = t("span", "​"); U(a, t("span", [b, document.createTextNode("x")])); 0 != a.firstChild.offsetHeight && (yd = 1 >= b.offsetWidth && 2 < b.offsetHeight && !(B && 8 > C)) } a = yd ? t("span",
					"​") : t("span", " ", null, "display: inline-block; width: 1px; margin-right: -1px"); a.setAttribute("cm-text", ""); return a
			} function Af(a, b, c, d) { if (!a) return d(b, c, "ltr"); for (var e = !1, f = 0; f < a.length; ++f) { var g = a[f]; if (g.from < c && g.to > b || b == c && g.to == b) d(Math.max(g.from, b), Math.min(g.to, c), 1 == g.level ? "rtl" : "ltr"), e = !0 } e || d(b, c, "ltr") } function dd(a) { return a.level % 2 ? a.to : a.from } function ed(a) { return a.level % 2 ? a.from : a.to } function ac(a) { return (a = Y(a)) ? dd(a[0]) : 0 } function bc(a) { var b = Y(a); return b ? ed(A(b)) : a.text.length }
	function kf(a, b) { var c = u(a.doc, b), d = ia(c); d != c && (b = F(d)); d = (c = Y(d)) ? c[0].level % 2 ? bc(d) : ac(d) : 0; return r(b, d) } function lf(a, b) { var c = kf(a, b.line), d = u(a.doc, c.line), e = Y(d); return e && 0 != e[0].level ? c : (d = Math.max(0, d.text.search(/\S/)), r(c.line, b.line == c.line && b.ch <= d && b.ch ? 0 : d)) } function Sb(a, b) {
		vb = null; for (var c = 0, d; c < a.length; ++c) {
			var e = a[c]; if (e.from < b && e.to > b) return c; if (e.from == b || e.to == b) if (null == d) d = c; else {
				var f; f = e.level; var g = a[d].level, h = a[0].level; f = f == h ? !0 : g == h ? !1 : f < g; if (f) return e.from !=
					e.to && (vb = d), c; e.from != e.to && (vb = c); break
			}
		} return d
	} function zd(a, b, c, d) { if (!d) return b + c; do b += c; while (0 < b && tb(a.text.charAt(b))); return b } function gd(a, b, c, d) { var e = Y(a); if (!e) return Oe(a, b, c, d); var f = Sb(e, b), g = e[f]; for (b = zd(a, b, g.level % 2 ? -c : c, d); ;) { if (b > g.from && b < g.to) return b; if (b == g.from || b == g.to) { if (Sb(e, b) == f) return b; g = e[f + c]; return 0 < c == g.level % 2 ? g.to : g.from } g = e[f += c]; if (!g) return null; b = 0 < c == g.level % 2 ? zd(a, g.to, -1, d) : zd(a, g.from, 1, d) } } function Oe(a, b, c, d) {
		b += c; if (d) for (; 0 < b && tb(a.text.charAt(b));)b +=
			c; return 0 > b || b > a.text.length ? null : b
	} var wa = /gecko\/\d/i.test(navigator.userAgent), mf = /MSIE \d/.test(navigator.userAgent), nf = /Trident\/(?:[7-9]|\d{2,})\..*rv:(\d+)/.exec(navigator.userAgent), B = mf || nf, C = B && (mf ? document.documentMode || 6 : nf[1]), J = /WebKit\//.test(navigator.userAgent), jg = J && /Qt\/\d+\.\d+/.test(navigator.userAgent), kg = /Chrome\//.test(navigator.userAgent), ba = /Opera\//.test(navigator.userAgent), te = /Apple Computer/.test(navigator.vendor), lg = /Mac OS X 1\d\D([8-9]|\d\d)\D/.test(navigator.userAgent),
		Gf = /PhantomJS/.test(navigator.userAgent), Qa = /AppleWebKit/.test(navigator.userAgent) && /Mobile\/\w+/.test(navigator.userAgent), ab = Qa || /Android|webOS|BlackBerry|Opera Mini|Opera Mobi|IEMobile/i.test(navigator.userAgent), W = Qa || /Mac/.test(navigator.platform), mg = /win/i.test(navigator.platform), Ia = ba && navigator.userAgent.match(/Version\/(\d*\.\d*)/); Ia && (Ia = Number(Ia[1])); Ia && 15 <= Ia && (ba = !1, J = !0); var of = W && (jg || ba && (null == Ia || 12.11 > Ia)), id = wa || B && 9 <= C, Ge = !1, ra = !1; Fc.prototype = V({
			update: function(a) {
				var b =
					a.scrollWidth > a.clientWidth + 1, c = a.scrollHeight > a.clientHeight + 1, d = a.nativeBarWidth; c ? (this.vert.style.display = "block", this.vert.style.bottom = b ? d + "px" : "0", this.vert.firstChild.style.height = Math.max(0, a.scrollHeight - a.clientHeight + (a.viewHeight - (b ? d : 0))) + "px") : (this.vert.style.display = "", this.vert.firstChild.style.height = "0"); b ? (this.horiz.style.display = "block", this.horiz.style.right = c ? d + "px" : "0", this.horiz.style.left = a.barLeft + "px", this.horiz.firstChild.style.width = a.scrollWidth - a.clientWidth + (a.viewWidth -
						a.barLeft - (c ? d : 0)) + "px") : (this.horiz.style.display = "", this.horiz.firstChild.style.width = "0"); !this.checkedOverlay && 0 < a.clientHeight && (0 == d && this.overlayHack(), this.checkedOverlay = !0); return { right: c ? d : 0, bottom: b ? d : 0 }
			}, setScrollLeft: function(a) { this.horiz.scrollLeft != a && (this.horiz.scrollLeft = a) }, setScrollTop: function(a) { this.vert.scrollTop != a && (this.vert.scrollTop = a) }, overlayHack: function() {
				this.horiz.style.minHeight = this.vert.style.minWidth = W && !lg ? "12px" : "18px"; var a = this, b = function(b) {
					(b.target ||
						b.srcElement) != a.vert && (b.target || b.srcElement) != a.horiz && G(a.cm, pe)(b)
				}; v(this.vert, "mousedown", b); v(this.horiz, "mousedown", b)
			}, clear: function() { var a = this.horiz.parentNode; a.removeChild(this.horiz); a.removeChild(this.vert) }
		}, Fc.prototype); Gc.prototype = V({ update: function() { return { bottom: 0, right: 0 } }, setScrollLeft: function() { }, setScrollTop: function() { }, clear: function() { } }, Gc.prototype); q.scrollbarModel = { "native": Fc, "null": Gc }; Mb.prototype.signal = function(a, b) { S(a, b) && this.events.push(arguments) }; Mb.prototype.finish =
			function() { for (var a = 0; a < this.events.length; a++)K.apply(null, this.events[a]) }; var r = q.Pos = function(a, b) { if (!(this instanceof r)) return new r(a, b); this.line = a; this.ch = b }, y = q.cmpPos = function(a, b) { return a.line - b.line || a.ch - b.ch }, X = null; Tc.prototype = V({
				init: function(a) {
					function b(a) {
						if (d.somethingSelected()) X = d.getSelections(), c.inaccurateSelection && (c.prevInput = "", c.inaccurateSelection = !1, f.value = X.join("\n"), Za(f)); else if (d.options.lineWiseCopyCut) {
							var b = Vd(d); X = b.text; "cut" == a.type ? d.setSelections(b.ranges,
								null, ha) : (c.prevInput = "", f.value = b.text.join("\n"), Za(f))
						} else return; "cut" == a.type && (d.state.cutIncoming = !0)
					} var c = this, d = this.cm, e = this.wrapper = Xd(), f = this.textarea = e.firstChild; a.wrapper.insertBefore(e, a.wrapper.firstChild); Qa && (f.style.width = "0px"); v(f, "input", function() { B && 9 <= C && c.hasSelection && (c.hasSelection = null); c.poll() }); v(f, "paste", function() {
						if (J && !d.state.fakedLastChar && !(200 > new Date - d.state.lastMiddleDown)) {
							var a = f.selectionStart, b = f.selectionEnd; f.value += "$"; f.selectionEnd = b; f.selectionStart =
								a; d.state.fakedLastChar = !0
						} d.state.pasteIncoming = !0; c.fastPoll()
					}); v(f, "cut", b); v(f, "copy", b); v(a.scroller, "paste", function(b) { oa(a, b) || (d.state.pasteIncoming = !0, c.focus()) }); v(a.lineSpace, "selectstart", function(b) { oa(a, b) || O(b) }); v(f, "compositionstart", function() { var a = d.getCursor("from"); c.composing = { start: a, range: d.markText(a, d.getCursor("to"), { className: "CodeMirror-composing" }) } }); v(f, "compositionend", function() { c.composing && (c.poll(), c.composing.range.clear(), c.composing = null) })
				}, prepareSelection: function() {
					var a =
						this.cm, b = a.display, c = a.doc, d = he(a); if (a.options.moveInputWithCursor) { var a = ma(a, c.sel.primary().head, "div"), c = b.wrapper.getBoundingClientRect(), e = b.lineDiv.getBoundingClientRect(); d.teTop = Math.max(0, Math.min(b.wrapper.clientHeight - 10, a.top + e.top - c.top)); d.teLeft = Math.max(0, Math.min(b.wrapper.clientWidth - 10, a.left + e.left - c.left)) } return d
				}, showSelection: function(a) {
					var b = this.cm.display; U(b.cursorDiv, a.cursors); U(b.selectionDiv, a.selection); null != a.teTop && (this.wrapper.style.top = a.teTop + "px", this.wrapper.style.left =
						a.teLeft + "px")
				}, reset: function(a) { if (!this.contextMenuPending) { var b, c, d = this.cm, e = d.doc; d.somethingSelected() ? (this.prevInput = "", b = e.sel.primary(), c = (b = Ce && (100 < b.to().line - b.from().line || 1E3 < (c = d.getSelection()).length)) ? "-" : c || d.getSelection(), this.textarea.value = c, d.state.focused && Za(this.textarea), B && 9 <= C && (this.hasSelection = c)) : a || (this.prevInput = this.textarea.value = "", B && 9 <= C && (this.hasSelection = null)); this.inaccurateSelection = b } }, getField: function() { return this.textarea }, supportsTouch: function() { return !1 },
				focus: function() { if ("nocursor" != this.cm.options.readOnly && (!ab || fa() != this.textarea)) try { this.textarea.focus() } catch (a) { } }, blur: function() { this.textarea.blur() }, resetPosition: function() { this.wrapper.style.top = this.wrapper.style.left = 0 }, receivedFocus: function() { this.slowPoll() }, slowPoll: function() { var a = this; a.pollingFast || a.polling.set(this.cm.options.pollInterval, function() { a.poll(); a.cm.state.focused && a.slowPoll() }) }, fastPoll: function() {
					function a() {
						c.poll() || b ? (c.pollingFast = !1, c.slowPoll()) : (b =
							!0, c.polling.set(60, a))
					} var b = !1, c = this; c.pollingFast = !0; c.polling.set(20, a)
				}, poll: function() {
					var a = this.cm, b = this.textarea, c = this.prevInput; if (!a.state.focused || ng(b) && !c || Rb(a) || a.options.disableInput || a.state.keySeq) return !1; a.state.pasteIncoming && a.state.fakedLastChar && (b.value = b.value.substring(0, b.value.length - 1), a.state.fakedLastChar = !1); var d = b.value; if (d == c && !a.somethingSelected()) return !1; if (B && 9 <= C && this.hasSelection === d || W && /[\uf700-\uf7ff]/.test(d)) return a.display.input.reset(), !1; if (a.doc.sel ==
						a.display.selForContextMenu) { var e = d.charCodeAt(0); 8203 != e || c || (c = "​"); if (8666 == e) return this.reset(), this.cm.execCommand("undo") } for (var f = 0, e = Math.min(c.length, d.length); f < e && c.charCodeAt(f) == d.charCodeAt(f);)++f; var g = this; T(a, function() { Sc(a, d.slice(f), c.length - f, null, g.composing ? "*compose" : null); 1E3 < d.length || -1 < d.indexOf("\n") ? b.value = g.prevInput = "" : g.prevInput = d; g.composing && (g.composing.range.clear(), g.composing.range = a.markText(g.composing.start, a.getCursor("to"), { className: "CodeMirror-composing" })) });
					return !0
				}, ensurePolled: function() { this.pollingFast && this.poll() && (this.pollingFast = !1) }, onKeyPress: function() { B && 9 <= C && (this.hasSelection = null); this.fastPoll() }, onContextMenu: function(a) {
					function b() { if (null != g.selectionStart) { var a = e.somethingSelected(), b = "​" + (a ? g.value : ""); g.value = "⇚"; g.value = b; d.prevInput = a ? "" : "​"; g.selectionStart = 1; g.selectionEnd = b.length; f.selForContextMenu = e.doc.sel } } function c() {
						d.contextMenuPending = !1; d.wrapper.style.position = "relative"; g.style.cssText = l; B && 9 > C && f.scrollbars.setScrollTop(f.scroller.scrollTop =
							k); if (null != g.selectionStart) { (!B || B && 9 > C) && b(); var a = 0, c = function() { f.selForContextMenu == e.doc.sel && 0 == g.selectionStart && 0 < g.selectionEnd && "​" == d.prevInput ? G(e, ic.selectAll)(e) : 10 > a++ ? f.detectingSelectAll = setTimeout(c, 500) : f.input.reset() }; f.detectingSelectAll = setTimeout(c, 200) }
					} var d = this, e = d.cm, f = e.display, g = d.textarea, h = Ua(e, a), k = f.scroller.scrollTop; if (h && !ba) {
						e.options.resetSelectionOnContextMenu && -1 == e.doc.sel.contains(h) && G(e, H)(e.doc, ga(h), ha); var l = g.style.cssText; d.wrapper.style.position =
							"absolute"; g.style.cssText = "position: fixed; width: 30px; height: 30px; top: " + (a.clientY - 5) + "px; left: " + (a.clientX - 5) + "px; z-index: 1000; background: " + (B ? "rgba(255, 255, 255, .05)" : "transparent") + "; outline: none; border-width: 0; outline: none; overflow: hidden; opacity: .05; filter: alpha(opacity\x3d5);"; if (J) var m = window.scrollY; f.input.focus(); J && window.scrollTo(null, m); f.input.reset(); e.somethingSelected() || (g.value = d.prevInput = " "); d.contextMenuPending = !0; f.selForContextMenu = e.doc.sel; clearTimeout(f.detectingSelectAll);
						B && 9 <= C && b(); if (id) { jd(a); var p = function() { ka(window, "mouseup", p); setTimeout(c, 20) }; v(window, "mouseup", p) } else setTimeout(c, 50)
					}
				}, setUneditable: Eb, needsContentAttribute: !1
			}, Tc.prototype); Uc.prototype = V({
				init: function(a) {
					function b(a) {
						if (d.somethingSelected()) X = d.getSelections(), "cut" == a.type && d.replaceSelection("", null, "cut"); else if (d.options.lineWiseCopyCut) { var b = Vd(d); X = b.text; "cut" == a.type && d.operation(function() { d.setSelections(b.ranges, 0, ha); d.replaceSelection("", null, "cut") }) } else return;
						if (a.clipboardData && !Qa) a.preventDefault(), a.clipboardData.clearData(), a.clipboardData.setData("text/plain", X.join("\n")); else { var c = Xd(); a = c.firstChild; d.display.lineSpace.insertBefore(c, d.display.lineSpace.firstChild); a.value = X.join("\n"); var h = document.activeElement; Za(a); setTimeout(function() { d.display.lineSpace.removeChild(c); h.focus() }, 50) }
					} var c = this, d = c.cm; a = c.div = a.lineDiv; a.contentEditable = "true"; Wd(a); v(a, "paste", function(a) {
						var b = a.clipboardData && a.clipboardData.getData("text/plain");
						b && (a.preventDefault(), d.replaceSelection(b, null, "paste"))
					}); v(a, "compositionstart", function(a) { a = a.data; c.composing = { sel: d.doc.sel, data: a, startData: a }; if (a) { var b = d.doc.sel.primary(), g = d.getLine(b.head.line).indexOf(a, Math.max(0, b.head.ch - a.length)); -1 < g && g <= b.head.ch && (c.composing.sel = ga(r(b.head.line, g), r(b.head.line, g + a.length))) } }); v(a, "compositionupdate", function(a) { c.composing.data = a.data }); v(a, "compositionend", function(a) {
						var b = c.composing; b && (a.data == b.startData || /\u200b/.test(a.data) || (b.data =
							a.data), setTimeout(function() { b.handled || c.applyComposition(b); c.composing == b && (c.composing = null) }, 50))
					}); v(a, "touchstart", function() { c.forceCompositionEnd() }); v(a, "input", function() { c.composing || c.pollContent() || T(c.cm, function() { Q(d) }) }); v(a, "copy", b); v(a, "cut", b)
				}, prepareSelection: function() { var a = he(this.cm, !1); a.focus = this.cm.state.focused; return a }, showSelection: function(a) { a && this.cm.display.view.length && (a.focus && this.showPrimarySelection(), this.showMultipleSelections(a)) }, showPrimarySelection: function() {
					var a =
						window.getSelection(), b = this.cm.doc.sel.primary(), c = Tb(this.cm, a.anchorNode, a.anchorOffset), d = Tb(this.cm, a.focusNode, a.focusOffset); if (!c || c.bad || !d || d.bad || 0 != y(Qb(c, d), b.from()) || 0 != y(Pb(c, d), b.to())) if (c = Yd(this.cm, b.from()), d = Yd(this.cm, b.to()), c || d) {
							var e = this.cm.display.view, b = a.rangeCount && a.getRangeAt(0); c ? d || (d = e[e.length - 1].measure, d = d.maps ? d.maps[d.maps.length - 1] : d.map, d = { node: d[d.length - 1], offset: d[d.length - 2] - d[d.length - 3] }) : c = { node: e[0].measure.map[2], offset: 0 }; try {
								var f = Ea(c.node, c.offset,
									d.offset, d.node)
							} catch (g) { } f && (a.removeAllRanges(), a.addRange(f), b && null == a.anchorNode ? a.addRange(b) : wa && this.startGracePeriod()); this.rememberSelection()
						}
				}, startGracePeriod: function() { var a = this; clearTimeout(this.gracePeriod); this.gracePeriod = setTimeout(function() { a.gracePeriod = !1; a.selectionChanged() && a.cm.operation(function() { a.cm.curOp.selectionChanged = !0 }) }, 20) }, showMultipleSelections: function(a) { U(this.cm.display.cursorDiv, a.cursors); U(this.cm.display.selectionDiv, a.selection) }, rememberSelection: function() {
					var a =
						window.getSelection(); this.lastAnchorNode = a.anchorNode; this.lastAnchorOffset = a.anchorOffset; this.lastFocusNode = a.focusNode; this.lastFocusOffset = a.focusOffset
				}, selectionInEditor: function() { var a = window.getSelection(); if (!a.rangeCount) return !1; a = a.getRangeAt(0).commonAncestorContainer; return Wc(this.div, a) }, focus: function() { "nocursor" != this.cm.options.readOnly && this.div.focus() }, blur: function() { this.div.blur() }, getField: function() { return this.div }, supportsTouch: function() { return !0 }, receivedFocus: function() {
					function a() {
						b.cm.state.focused &&
						(b.pollSelection(), b.polling.set(b.cm.options.pollInterval, a))
					} var b = this; this.selectionInEditor() ? this.pollSelection() : T(this.cm, function() { b.cm.curOp.selectionChanged = !0 }); this.polling.set(this.cm.options.pollInterval, a)
				}, selectionChanged: function() { var a = window.getSelection(); return a.anchorNode != this.lastAnchorNode || a.anchorOffset != this.lastAnchorOffset || a.focusNode != this.lastFocusNode || a.focusOffset != this.lastFocusOffset }, pollSelection: function() {
					if (!this.composing && !this.gracePeriod && this.selectionChanged()) {
						var a =
							window.getSelection(), b = this.cm; this.rememberSelection(); var c = Tb(b, a.anchorNode, a.anchorOffset), d = Tb(b, a.focusNode, a.focusOffset); c && d && T(b, function() { H(b.doc, ga(c, d), ha); if (c.bad || d.bad) b.curOp.selectionChanged = !0 })
					}
				}, pollContent: function() {
					var a = this.cm, b = a.display, c = a.doc.sel.primary(), d = c.from(), c = c.to(); if (d.line < b.viewFrom || c.line > b.viewTo - 1) return !1; var e; d.line == b.viewFrom || 0 == (e = Ca(a, d.line)) ? (d = F(b.view[0].line), e = b.view[0].node) : (d = F(b.view[e].line), e = b.view[e - 1].node.nextSibling); var f =
						Ca(a, c.line); f == b.view.length - 1 ? (c = b.viewTo - 1, b = b.view[f].node) : (c = F(b.view[f + 1].line) - 1, b = b.view[f + 1].node.previousSibling); b = sa(xf(a, e, b, d, c)); for (e = Da(a.doc, r(d, 0), r(c, u(a.doc, c).text.length)); 1 < b.length && 1 < e.length;)if (A(b) == A(e)) b.pop(), e.pop(), c--; else if (b[0] == e[0]) b.shift(), e.shift(), d++; else break; for (var g = 0, f = 0, h = b[0], k = e[0], l = Math.min(h.length, k.length); g < l && h.charCodeAt(g) == k.charCodeAt(g);)++g; h = A(b); k = A(e); for (l = Math.min(h.length - (1 == b.length ? g : 0), k.length - (1 == e.length ? g : 0)); f < l && h.charCodeAt(h.length -
							f - 1) == k.charCodeAt(k.length - f - 1);)++f; b[b.length - 1] = h.slice(0, h.length - f); b[0] = b[0].slice(g); d = r(d, g); c = r(c, e.length ? A(e).length - f : 0); if (1 < b.length || b[0] || y(d, c)) return wb(a.doc, b, d, c, "+input"), !0
				}, ensurePolled: function() { this.forceCompositionEnd() }, reset: function() { this.forceCompositionEnd() }, forceCompositionEnd: function() { this.composing && !this.composing.handled && (this.applyComposition(this.composing), this.composing.handled = !0, this.div.blur(), this.div.focus()) }, applyComposition: function(a) {
					a.data &&
					a.data != a.startData && G(this.cm, Sc)(this.cm, a.data, 0, a.sel)
				}, setUneditable: function(a) { a.setAttribute("contenteditable", "false") }, onKeyPress: function(a) { a.preventDefault(); G(this.cm, Sc)(this.cm, String.fromCharCode(null == a.charCode ? a.keyCode : a.charCode), 0) }, onContextMenu: Eb, resetPosition: Eb, needsContentAttribute: !0
			}, Uc.prototype); q.inputStyles = { textarea: Tc, contenteditable: Uc }; la.prototype = {
				primary: function() { return this.ranges[this.primIndex] }, equals: function(a) {
					if (a == this) return !0; if (a.primIndex !=
						this.primIndex || a.ranges.length != this.ranges.length) return !1; for (var b = 0; b < this.ranges.length; b++) { var c = this.ranges[b], d = a.ranges[b]; if (0 != y(c.anchor, d.anchor) || 0 != y(c.head, d.head)) return !1 } return !0
				}, deepCopy: function() { for (var a = [], b = 0; b < this.ranges.length; b++)a[b] = new z(Rc(this.ranges[b].anchor), Rc(this.ranges[b].head)); return new la(a, this.primIndex) }, somethingSelected: function() { for (var a = 0; a < this.ranges.length; a++)if (!this.ranges[a].empty()) return !0; return !1 }, contains: function(a, b) {
					b || (b = a);
					for (var c = 0; c < this.ranges.length; c++) { var d = this.ranges[c]; if (0 <= y(b, d.from()) && 0 >= y(a, d.to())) return c } return -1
				}
			}; z.prototype = { from: function() { return Qb(this.anchor, this.head) }, to: function() { return Pb(this.anchor, this.head) }, empty: function() { return this.head.line == this.anchor.line && this.head.ch == this.anchor.ch } }; var ad = { left: 0, right: 0, top: 0, bottom: 0 }, Fa, Ta = null, Ff = 0, fc, ec, se = 0, gc = 0, R = null; B ? R = -.53 : wa ? R = 15 : kg ? R = -.7 : te && (R = -1 / 3); var ze = function(a) {
				var b = a.wheelDeltaX, c = a.wheelDeltaY; null == b && a.detail &&
					a.axis == a.HORIZONTAL_AXIS && (b = a.detail); null == c && a.detail && a.axis == a.VERTICAL_AXIS ? c = a.detail : null == c && (c = a.wheelDelta); return { x: b, y: c }
			}; q.wheelEventPixels = function(a) { a = ze(a); a.x *= R; a.y *= R; return a }; var Qf = new bb, md = null, ta = q.changeEnd = function(a) { return a.text ? r(a.from.line + a.text.length - 1, A(a.text).length + (1 == a.text.length ? a.from.ch : 0)) : a.to }; q.prototype = {
				constructor: q, focus: function() { window.focus(); this.display.input.focus() }, setOption: function(a, b) {
					var c = this.options, d = c[a]; if (c[a] != b || "mode" ==
						a) c[a] = b, Ka.hasOwnProperty(a) && G(this, Ka[a])(this, b, d)
				}, getOption: function(a) { return this.options[a] }, getDoc: function() { return this.doc }, addKeyMap: function(a, b) { this.state.keyMaps[b ? "push" : "unshift"](pc(a)) }, removeKeyMap: function(a) { for (var b = this.state.keyMaps, c = 0; c < b.length; ++c)if (b[c] == a || b[c].name == a) return b.splice(c, 1), !0 }, addOverlay: M(function(a, b) {
					var c = a.token ? a : q.getMode(this.options, a); if (c.startState) throw Error("Overlays may not be stateful."); this.state.overlays.push({
						mode: c, modeSpec: a,
						opaque: b && b.opaque
					}); this.state.modeGen++; Q(this)
				}), removeOverlay: M(function(a) { for (var b = this.state.overlays, c = 0; c < b.length; ++c) { var d = b[c].modeSpec; if (d == a || "string" == typeof a && d.name == a) { b.splice(c, 1); this.state.modeGen++; Q(this); break } } }), indentLine: M(function(a, b, c) { "string" != typeof b && "number" != typeof b && (b = null == b ? this.options.smartIndent ? "smart" : "prev" : b ? "add" : "subtract"); qb(this.doc, a) && pb(this, a, b, c) }), indentSelection: M(function(a) {
					for (var b = this.doc.sel.ranges, c = -1, d = 0; d < b.length; d++) {
						var e =
							b[d]; if (e.empty()) e.head.line > c && (pb(this, e.head.line, a, !0), c = e.head.line, d == this.doc.sel.primIndex && Pa(this)); else { for (var f = e.from(), e = e.to(), g = Math.max(c, f.line), c = Math.min(this.lastLine(), e.line - (e.ch ? 0 : 1)) + 1, e = g; e < c; ++e)pb(this, e, a); e = this.doc.sel.ranges; 0 == f.ch && b.length == e.length && 0 < e[d].from().ch && Xc(this.doc, d, new z(f, e[d].to()), ha) }
					}
				}), getTokenAt: function(a, b) { return Ye(this, a, b) }, getLineTokens: function(a, b) { return Ye(this, r(a), b, !0) }, getTokenTypeAt: function(a) {
					a = w(this.doc, a); var b = $e(this,
						u(this.doc, a.line)), c = 0, d = (b.length - 1) / 2; a = a.ch; if (0 == a) b = b[2]; else for (; ;) { var e = c + d >> 1; if ((e ? b[2 * e - 1] : 0) >= a) d = e; else if (b[2 * e + 1] < a) c = e + 1; else { b = b[2 * e + 2]; break } } c = b ? b.indexOf("cm-overlay ") : -1; return 0 > c ? b : 0 == c ? null : b.slice(0, c - 1)
				}, getModeAt: function(a) { var b = this.doc.mode; return b.innerMode ? q.innerMode(b, this.getTokenAt(a).state).mode : b }, getHelper: function(a, b) { return this.getHelpers(a, b)[0] }, getHelpers: function(a, b) {
					var c = []; if (!$a.hasOwnProperty(b)) return c; var d = $a[b], e = this.getModeAt(a); if ("string" ==
						typeof e[b]) d[e[b]] && c.push(d[e[b]]); else if (e[b]) for (var f = 0; f < e[b].length; f++) { var g = d[e[b][f]]; g && c.push(g) } else e.helperType && d[e.helperType] ? c.push(d[e.helperType]) : d[e.name] && c.push(d[e.name]); for (f = 0; f < d._global.length; f++)g = d._global[f], g.pred(e, this) && -1 == D(c, g.val) && c.push(g.val); return c
				}, getStateAfter: function(a, b) { var c = this.doc; a = Math.max(c.first, Math.min(null == a ? c.first + c.size - 1 : a, c.first + c.size - 1)); return sb(this, a + 1, b) }, cursorCoords: function(a, b) {
					var c; c = this.doc.sel.primary(); c =
						null == a ? c.head : "object" == typeof a ? w(this.doc, a) : a ? c.from() : c.to(); return ma(this, c, b || "page")
				}, charCoords: function(a, b) { return Yb(this, w(this.doc, a), b || "page") }, coordsChar: function(a, b) { a = ne(this, a, b || "page"); return fd(this, a.left, a.top) }, lineAtHeight: function(a, b) { a = ne(this, { top: a, left: 0 }, b || "page").top; return Ba(this.doc, a + this.display.viewOffset) }, heightAtLine: function(a, b) {
					var c = !1, d; "number" == typeof a ? (d = this.doc.first + this.doc.size - 1, a < this.doc.first ? a = this.doc.first : a > d && (a = d, c = !0), d = u(this.doc,
						a)) : d = a; return cd(this, d, { top: 0, left: 0 }, b || "page").top + (c ? this.doc.height - ea(d) : 0)
				}, defaultTextHeight: function() { return xa(this.display) }, defaultCharWidth: function() { return gb(this.display) }, setGutterMarker: M(function(a, b, c) { return nc(this.doc, a, "gutter", function(a) { var e = a.gutterMarkers || (a.gutterMarkers = {}); e[b] = c; !c && hf(e) && (a.gutterMarkers = null); return !0 }) }), clearGutter: M(function(a) {
					var b = this, c = b.doc, d = c.first; c.iter(function(c) {
						c.gutterMarkers && c.gutterMarkers[a] && (c.gutterMarkers[a] = null,
							na(b, d, "gutter"), hf(c.gutterMarkers) && (c.gutterMarkers = null)); ++d
					})
				}), lineInfo: function(a) { if ("number" == typeof a) { if (!qb(this.doc, a)) return null; var b = a; a = u(this.doc, a); if (!a) return null } else if (b = F(a), null == b) return null; return { line: b, handle: a, text: a.text, gutterMarkers: a.gutterMarkers, textClass: a.textClass, bgClass: a.bgClass, wrapClass: a.wrapClass, widgets: a.widgets } }, getViewport: function() { return { from: this.display.viewFrom, to: this.display.viewTo } }, addWidget: function(a, b, c, d, e) {
					var f = this.display; a =
						ma(this, w(this.doc, a)); var g = a.bottom, h = a.left; b.style.position = "absolute"; b.setAttribute("cm-ignore-events", "true"); this.display.input.setUneditable(b); f.sizer.appendChild(b); if ("over" == d) g = a.top; else if ("above" == d || "near" == d) { var k = Math.max(f.wrapper.clientHeight, this.doc.height), l = Math.max(f.sizer.clientWidth, f.lineSpace.clientWidth); ("above" == d || a.bottom + b.offsetHeight > k) && a.top > b.offsetHeight ? g = a.top - b.offsetHeight : a.bottom + b.offsetHeight <= k && (g = a.bottom); h + b.offsetWidth > l && (h = l - b.offsetWidth) } b.style.top =
							g + "px"; b.style.left = b.style.right = ""; "right" == e ? (h = f.sizer.clientWidth - b.offsetWidth, b.style.right = "0px") : ("left" == e ? h = 0 : "middle" == e && (h = (f.sizer.clientWidth - b.offsetWidth) / 2), b.style.left = h + "px"); c && (a = cc(this, h, g, h + b.offsetWidth, g + b.offsetHeight), null != a.scrollTop && lb(this, a.scrollTop), null != a.scrollLeft && Ma(this, a.scrollLeft))
				}, triggerOnKeyDown: M(ve), triggerOnKeyPress: M(we), triggerOnKeyUp: ue, execCommand: function(a) { if (ic.hasOwnProperty(a)) return ic[a](this) }, findPosH: function(a, b, c, d) {
					var e = 1;
					0 > b && (e = -1, b = -b); var f = 0; for (a = w(this.doc, a); f < b && (a = rd(this.doc, a, e, c, d), !a.hitSide); ++f); return a
				}, moveH: M(function(a, b) { var c = this; c.extendSelectionsBy(function(d) { return c.display.shift || c.doc.extend || d.empty() ? rd(c.doc, d.head, a, b, c.options.rtlMoveVisually) : 0 > a ? d.from() : d.to() }, Gb) }), deleteH: M(function(a, b) { var c = this.doc; this.doc.sel.somethingSelected() ? c.replaceSelection("", null, "+delete") : Va(this, function(d) { var e = rd(c, d.head, a, b, !1); return 0 > a ? { from: e, to: d.head } : { from: d.head, to: e } }) }), findPosV: function(a,
					b, c, d) { var e = 1; 0 > b && (e = -1, b = -b); var f = 0; for (a = w(this.doc, a); f < b && (a = ma(this, a, "div"), null == d ? d = a.left : a.left = d, a = Pe(this, a, e, c), !a.hitSide); ++f); return a }, moveV: M(function(a, b) {
						var c = this, d = this.doc, e = [], f = !c.display.shift && !d.extend && d.sel.somethingSelected(); d.extendSelectionsBy(function(g) { if (f) return 0 > a ? g.from() : g.to(); var k = ma(c, g.head, "div"); null != g.goalColumn && (k.left = g.goalColumn); e.push(k.left); var l = Pe(c, k, a, b); "page" == b && g == d.sel.primary() && lc(c, null, Yb(c, l, "div").top - k.top); return l },
							Gb); if (e.length) for (var g = 0; g < d.sel.ranges.length; g++)d.sel.ranges[g].goalColumn = e[g]
					}), findWordAt: function(a) { var b = u(this.doc, a.line).text, c = a.ch, d = a.ch; if (b) { var e = this.getHelper(a, "wordChars"); (0 > a.xRel || d == b.length) && c ? --c : ++d; for (var f = b.charAt(c), f = oc(f, e) ? function(a) { return oc(a, e) } : /\s/.test(f) ? function(a) { return /\s/.test(a) } : function(a) { return !/\s/.test(a) && !oc(a) }; 0 < c && f(b.charAt(c - 1));)--c; for (; d < b.length && f(b.charAt(d));)++d } return new z(r(a.line, c), r(a.line, d)) }, toggleOverwrite: function(a) {
						if (null ==
							a || a != this.state.overwrite) (this.state.overwrite = !this.state.overwrite) ? mb(this.display.cursorDiv, "CodeMirror-overwrite") : kb(this.display.cursorDiv, "CodeMirror-overwrite"), K(this, "overwriteToggle", this, this.state.overwrite)
					}, hasFocus: function() { return this.display.input.getField() == fa() }, scrollTo: M(function(a, b) { null == a && null == b || mc(this); null != a && (this.curOp.scrollLeft = a); null != b && (this.curOp.scrollTop = b) }), getScrollInfo: function() {
						var a = this.display.scroller; return {
							left: a.scrollLeft, top: a.scrollTop,
							height: a.scrollHeight - da(this) - this.display.barHeight, width: a.scrollWidth - da(this) - this.display.barWidth, clientHeight: Nc(this), clientWidth: pa(this)
						}
					}, scrollIntoView: M(function(a, b) {
						null == a ? (a = { from: this.doc.sel.primary().head, to: null }, null == b && (b = this.options.cursorScrollMargin)) : "number" == typeof a ? a = { from: r(a, 0), to: null } : null == a.from && (a = { from: a, to: null }); a.to || (a.to = a.from); a.margin = b || 0; if (null != a.from.line) mc(this), this.curOp.scrollToPos = a; else {
							var c = cc(this, Math.min(a.from.left, a.to.left), Math.min(a.from.top,
								a.to.top) - a.margin, Math.max(a.from.right, a.to.right), Math.max(a.from.bottom, a.to.bottom) + a.margin); this.scrollTo(c.scrollLeft, c.scrollTop)
						}
					}), setSize: M(function(a, b) {
						function c(a) { return "number" == typeof a || /^\d+$/.test(String(a)) ? a + "px" : a } var d = this; null != a && (d.display.wrapper.style.width = c(a)); null != b && (d.display.wrapper.style.height = c(b)); d.options.lineWrapping && me(this); var e = d.display.viewFrom; d.doc.iter(e, d.display.viewTo, function(a) {
							if (a.widgets) for (var b = 0; b < a.widgets.length; b++)if (a.widgets[b].noHScroll) {
								na(d,
									e, "widget"); break
							} ++e
						}); d.curOp.forceUpdate = !0; K(d, "refresh", this)
					}), operation: function(a) { return T(this, a) }, refresh: M(function() { var a = this.display.cachedTextHeight; Q(this); this.curOp.forceUpdate = !0; hb(this); this.scrollTo(this.doc.scrollLeft, this.doc.scrollTop); Cc(this); (null == a || .5 < Math.abs(a - xa(this.display))) && Ac(this); K(this, "refresh", this) }), swapDoc: M(function(a) {
						var b = this.doc; b.cm = null; Ed(this, a); hb(this); this.display.input.reset(); this.scrollTo(a.scrollLeft, a.scrollTop); this.curOp.forceScroll =
							!0; L(this, "swapDoc", this, b); return b
					}), getInputField: function() { return this.display.input.getField() }, getWrapperElement: function() { return this.display.wrapper }, getScrollerElement: function() { return this.display.scroller }, getGutterElement: function() { return this.display.gutters }
			}; Ya(q); var qf = q.defaults = {}, Ka = q.optionHandlers = {}, Fd = q.Init = { toString: function() { return "CodeMirror.Init" } }; x("value", "", function(a, b) { a.setValue(b) }, !0); x("mode", null, function(a, b) { a.doc.modeOption = b; zc(a) }, !0); x("indentUnit",
				2, zc, !0); x("indentWithTabs", !1); x("smartIndent", !0); x("tabSize", 4, function(a) { eb(a); hb(a); Q(a) }, !0); x("specialChars", /[\t\u0000-\u0019\u00ad\u200b-\u200f\u2028\u2029\ufeff]/g, function(a, b, c) { a.state.specialChars = new RegExp(b.source + (b.test("\t") ? "" : "|\t"), "g"); c != q.Init && a.refresh() }); x("specialCharPlaceholder", function(a) { var b = t("span", "•", "cm-invalidchar"); b.title = "\\u" + a.charCodeAt(0).toString(16); b.setAttribute("aria-label", b.title); return b }, function(a) { a.refresh() }, !0); x("electricChars", !0);
	x("inputStyle", ab ? "contenteditable" : "textarea", function() { throw Error("inputStyle can not (yet) be changed in a running editor"); }, !0); x("rtlMoveVisually", !mg); x("wholeLineUpdateBefore", !0); x("theme", "default", function(a) { Bd(a); ib(a) }, !0); x("keyMap", "default", function(a, b, c) { b = pc(b); (c = c != q.Init && pc(c)) && c.detach && c.detach(a, b); b.attach && b.attach(a, c || null) }); x("extraKeys", null); x("lineWrapping", !1, function(a) {
		a.options.lineWrapping ? (mb(a.display.wrapper, "CodeMirror-wrap"), a.display.sizer.style.minWidth =
			"", a.display.sizerWidth = null) : (kb(a.display.wrapper, "CodeMirror-wrap"), Dc(a)); Ac(a); Q(a); hb(a); setTimeout(function() { Na(a) }, 100)
	}, !0); x("gutters", [], function(a) { wc(a.options); ib(a) }, !0); x("fixedGutter", !0, function(a, b) { a.display.gutters.style.left = b ? Ic(a.display) + "px" : "0"; a.refresh() }, !0); x("coverGutterNextToScrollbar", !1, function(a) { Na(a) }, !0); x("scrollbarStyle", "native", function(a) { Cd(a); Na(a); a.display.scrollbars.setScrollTop(a.doc.scrollTop); a.display.scrollbars.setScrollLeft(a.doc.scrollLeft) },
		!0); x("lineNumbers", !1, function(a) { wc(a.options); ib(a) }, !0); x("firstLineNumber", 1, ib, !0); x("lineNumberFormatter", function(a) { return a }, ib, !0); x("showCursorWhenSelecting", !1, nb, !0); x("resetSelectionOnContextMenu", !0); x("lineWiseCopyCut", !0); x("readOnly", !1, function(a, b) { "nocursor" == b ? (db(a), a.display.input.blur(), a.display.disabled = !0) : (a.display.disabled = !1, b || a.display.input.reset()) }); x("disableInput", !1, function(a, b) { b || a.display.input.reset() }, !0); x("dragDrop", !0, function(a, b, c) {
			!b != !(c && c != q.Init) &&
			(c = a.display.dragFunctions, b = b ? v : ka, b(a.display.scroller, "dragstart", c.start), b(a.display.scroller, "dragenter", c.simple), b(a.display.scroller, "dragover", c.simple), b(a.display.scroller, "drop", c.drop))
		}); x("cursorBlinkRate", 530); x("cursorScrollMargin", 0); x("cursorHeight", 1, nb, !0); x("singleCursorHeightPerLine", !0, nb, !0); x("workTime", 100); x("workDelay", 100); x("flattenSpans", !0, eb, !0); x("addModeClass", !1, eb, !0); x("pollInterval", 100); x("undoDepth", 200, function(a, b) { a.doc.history.undoDepth = b }); x("historyEventDelay",
			1250); x("viewportMargin", 10, function(a) { a.refresh() }, !0); x("maxHighlightLength", 1E4, eb, !0); x("moveInputWithCursor", !0, function(a, b) { b || a.display.input.resetPosition() }); x("tabindex", null, function(a, b) { a.display.input.getField().tabIndex = b || "" }); x("autofocus", null); var pf = q.modes = {}, Hb = q.mimeModes = {}; q.defineMode = function(a, b) { q.defaults.mode || "null" == a || (q.defaults.mode = a); 2 < arguments.length && (b.dependencies = Array.prototype.slice.call(arguments, 2)); pf[a] = b }; q.defineMIME = function(a, b) { Hb[a] = b }; q.resolveMode =
				function(a) { if ("string" == typeof a && Hb.hasOwnProperty(a)) a = Hb[a]; else if (a && "string" == typeof a.name && Hb.hasOwnProperty(a.name)) { var b = Hb[a.name]; "string" == typeof b && (b = { name: b }); a = ff(b, a); a.name = b.name } else if ("string" == typeof a && /^[\w\-]+\/[\w\-]+\+xml$/.test(a)) return q.resolveMode("application/xml"); return "string" == typeof a ? { name: a } : a || { name: "null" } }; q.getMode = function(a, b) {
					b = q.resolveMode(b); var c = pf[b.name]; if (!c) return q.getMode(a, "text/plain"); c = c(a, b); if (Ib.hasOwnProperty(b.name)) {
						var d = Ib[b.name],
						e; for (e in d) d.hasOwnProperty(e) && (c.hasOwnProperty(e) && (c["_" + e] = c[e]), c[e] = d[e])
					} c.name = b.name; b.helperType && (c.helperType = b.helperType); if (b.modeProps) for (e in b.modeProps) c[e] = b.modeProps[e]; return c
				}; q.defineMode("null", function() { return { token: function(a) { a.skipToEnd() } } }); q.defineMIME("text/plain", "null"); var Ib = q.modeExtensions = {}; q.extendMode = function(a, b) { var c = Ib.hasOwnProperty(a) ? Ib[a] : Ib[a] = {}; V(b, c) }; q.defineExtension = function(a, b) { q.prototype[a] = b }; q.defineDocExtension = function(a, b) {
					P.prototype[a] =
					b
				}; q.defineOption = x; var yc = []; q.defineInitHook = function(a) { yc.push(a) }; var $a = q.helpers = {}; q.registerHelper = function(a, b, c) { $a.hasOwnProperty(a) || ($a[a] = q[a] = { _global: [] }); $a[a][b] = c }; q.registerGlobalHelper = function(a, b, c, d) { q.registerHelper(a, b, d); $a[a]._global.push({ pred: c, val: d }) }; var Sa = q.copyState = function(a, b) { if (!0 === b) return b; if (a.copyState) return a.copyState(b); var c = {}, d; for (d in b) { var e = b[d]; e instanceof Array && (e = e.concat([])); c[d] = e } return c }, Df = q.startState = function(a, b, c) {
					return a.startState ?
						a.startState(b, c) : !0
				}; q.innerMode = function(a, b) { for (; a.innerMode;) { var c = a.innerMode(b); if (!c || c.mode == a) break; b = c.state; a = c.mode } return c || { mode: a, state: b } }; var ic = q.commands = {
					selectAll: function(a) { a.setSelection(r(a.firstLine(), 0), r(a.lastLine()), ha) }, singleSelection: function(a) { a.setSelection(a.getCursor("anchor"), a.getCursor("head"), ha) }, killLine: function(a) {
						Va(a, function(b) {
							if (b.empty()) {
								var c = u(a.doc, b.head.line).text.length; return b.head.ch == c && b.head.line < a.lastLine() ? {
									from: b.head, to: r(b.head.line +
										1, 0)
								} : { from: b.head, to: r(b.head.line, c) }
							} return { from: b.from(), to: b.to() }
						})
					}, deleteLine: function(a) { Va(a, function(b) { return { from: r(b.from().line, 0), to: w(a.doc, r(b.to().line + 1, 0)) } }) }, delLineLeft: function(a) { Va(a, function(a) { return { from: r(a.from().line, 0), to: a.from() } }) }, delWrappedLineLeft: function(a) { Va(a, function(b) { var c = a.charCoords(b.head, "div").top + 5; return { from: a.coordsChar({ left: 0, top: c }, "div"), to: b.from() } }) }, delWrappedLineRight: function(a) {
						Va(a, function(b) {
							var c = a.charCoords(b.head, "div").top +
								5, c = a.coordsChar({ left: a.display.lineDiv.offsetWidth + 100, top: c }, "div"); return { from: b.from(), to: c }
						})
					}, undo: function(a) { a.undo() }, redo: function(a) { a.redo() }, undoSelection: function(a) { a.undoSelection() }, redoSelection: function(a) { a.redoSelection() }, goDocStart: function(a) { a.extendSelection(r(a.firstLine(), 0)) }, goDocEnd: function(a) { a.extendSelection(r(a.lastLine())) }, goLineStart: function(a) { a.extendSelectionsBy(function(b) { return kf(a, b.head.line) }, { origin: "+move", bias: 1 }) }, goLineStartSmart: function(a) {
						a.extendSelectionsBy(function(b) {
							return lf(a,
								b.head)
						}, { origin: "+move", bias: 1 })
					}, goLineEnd: function(a) { a.extendSelectionsBy(function(b) { b = b.head.line; for (var c, d = u(a.doc, b); c = Aa(d, !1);)d = c.find(1, !0).line, b = null; c = (c = Y(d)) ? c[0].level % 2 ? ac(d) : bc(d) : d.text.length; return r(null == b ? F(d) : b, c) }, { origin: "+move", bias: -1 }) }, goLineRight: function(a) { a.extendSelectionsBy(function(b) { b = a.charCoords(b.head, "div").top + 5; return a.coordsChar({ left: a.display.lineDiv.offsetWidth + 100, top: b }, "div") }, Gb) }, goLineLeft: function(a) {
						a.extendSelectionsBy(function(b) {
							b =
							a.charCoords(b.head, "div").top + 5; return a.coordsChar({ left: 0, top: b }, "div")
						}, Gb)
					}, goLineLeftSmart: function(a) { a.extendSelectionsBy(function(b) { var c = a.charCoords(b.head, "div").top + 5, c = a.coordsChar({ left: 0, top: c }, "div"); return c.ch < a.getLine(c.line).search(/\S/) ? lf(a, b.head) : c }, Gb) }, goLineUp: function(a) { a.moveV(-1, "line") }, goLineDown: function(a) { a.moveV(1, "line") }, goPageUp: function(a) { a.moveV(-1, "page") }, goPageDown: function(a) { a.moveV(1, "page") }, goCharLeft: function(a) { a.moveH(-1, "char") }, goCharRight: function(a) {
						a.moveH(1,
							"char")
					}, goColumnLeft: function(a) { a.moveH(-1, "column") }, goColumnRight: function(a) { a.moveH(1, "column") }, goWordLeft: function(a) { a.moveH(-1, "word") }, goGroupRight: function(a) { a.moveH(1, "group") }, goGroupLeft: function(a) { a.moveH(-1, "group") }, goWordRight: function(a) { a.moveH(1, "word") }, delCharBefore: function(a) { a.deleteH(-1, "char") }, delCharAfter: function(a) { a.deleteH(1, "char") }, delWordBefore: function(a) { a.deleteH(-1, "word") }, delWordAfter: function(a) { a.deleteH(1, "word") }, delGroupBefore: function(a) {
						a.deleteH(-1,
							"group")
					}, delGroupAfter: function(a) { a.deleteH(1, "group") }, indentAuto: function(a) { a.indentSelection("smart") }, indentMore: function(a) { a.indentSelection("add") }, indentLess: function(a) { a.indentSelection("subtract") }, insertTab: function(a) { a.replaceSelection("\t") }, insertSoftTab: function(a) { for (var b = [], c = a.listSelections(), d = a.options.tabSize, e = 0; e < c.length; e++) { var f = c[e].from(), f = aa(a.getLine(f.line), f.ch, d); b.push(Array(d - f % d + 1).join(" ")) } a.replaceSelections(b) }, defaultTab: function(a) {
						a.somethingSelected() ?
						a.indentSelection("add") : a.execCommand("insertTab")
					}, transposeChars: function(a) {
						T(a, function() {
							for (var b = a.listSelections(), c = [], d = 0; d < b.length; d++) {
								var e = b[d].head, f = u(a.doc, e.line).text; if (f) if (e.ch == f.length && (e = new r(e.line, e.ch - 1)), 0 < e.ch) e = new r(e.line, e.ch + 1), a.replaceRange(f.charAt(e.ch - 1) + f.charAt(e.ch - 2), r(e.line, e.ch - 2), e, "+transpose"); else if (e.line > a.doc.first) { var g = u(a.doc, e.line - 1).text; g && a.replaceRange(f.charAt(0) + "\n" + g.charAt(g.length - 1), r(e.line - 1, g.length - 1), r(e.line, 1), "+transpose") } c.push(new z(e,
									e))
							} a.setSelections(c)
						})
					}, newlineAndIndent: function(a) { T(a, function() { for (var b = a.listSelections().length, c = 0; c < b; c++) { var d = a.listSelections()[c]; a.replaceRange("\n", d.anchor, d.head, "+input"); a.indentLine(d.from().line + 1, null, !0); Pa(a) } }) }, toggleOverwrite: function(a) { a.toggleOverwrite() }
				}, ua = q.keyMap = {}; ua.basic = {
					Left: "goCharLeft", Right: "goCharRight", Up: "goLineUp", Down: "goLineDown", End: "goLineEnd", Home: "goLineStartSmart", PageUp: "goPageUp", PageDown: "goPageDown", Delete: "delCharAfter", Backspace: "delCharBefore",
					"Shift-Backspace": "delCharBefore", Tab: "defaultTab", "Shift-Tab": "indentAuto", Enter: "newlineAndIndent", Insert: "toggleOverwrite", Esc: "singleSelection"
				}; ua.pcDefault = {
					"Ctrl-A": "selectAll", "Ctrl-D": "deleteLine", "Ctrl-Z": "undo", "Shift-Ctrl-Z": "redo", "Ctrl-Y": "redo", "Ctrl-Home": "goDocStart", "Ctrl-End": "goDocEnd", "Ctrl-Up": "goLineUp", "Ctrl-Down": "goLineDown", "Ctrl-Left": "goGroupLeft", "Ctrl-Right": "goGroupRight", "Alt-Left": "goLineStart", "Alt-Right": "goLineEnd", "Ctrl-Backspace": "delGroupBefore", "Ctrl-Delete": "delGroupAfter",
					"Ctrl-S": "save", "Ctrl-F": "find", "Ctrl-G": "findNext", "Shift-Ctrl-G": "findPrev", "Shift-Ctrl-F": "replace", "Shift-Ctrl-R": "replaceAll", "Ctrl-[": "indentLess", "Ctrl-]": "indentMore", "Ctrl-U": "undoSelection", "Shift-Ctrl-U": "redoSelection", "Alt-U": "redoSelection", fallthrough: "basic"
				}; ua.emacsy = {
					"Ctrl-F": "goCharRight", "Ctrl-B": "goCharLeft", "Ctrl-P": "goLineUp", "Ctrl-N": "goLineDown", "Alt-F": "goWordRight", "Alt-B": "goWordLeft", "Ctrl-A": "goLineStart", "Ctrl-E": "goLineEnd", "Ctrl-V": "goPageDown", "Shift-Ctrl-V": "goPageUp",
					"Ctrl-D": "delCharAfter", "Ctrl-H": "delCharBefore", "Alt-D": "delWordAfter", "Alt-Backspace": "delWordBefore", "Ctrl-K": "killLine", "Ctrl-T": "transposeChars"
				}; ua.macDefault = {
					"Cmd-A": "selectAll", "Cmd-D": "deleteLine", "Cmd-Z": "undo", "Shift-Cmd-Z": "redo", "Cmd-Y": "redo", "Cmd-Home": "goDocStart", "Cmd-Up": "goDocStart", "Cmd-End": "goDocEnd", "Cmd-Down": "goDocEnd", "Alt-Left": "goGroupLeft", "Alt-Right": "goGroupRight", "Cmd-Left": "goLineLeft", "Cmd-Right": "goLineRight", "Alt-Backspace": "delGroupBefore", "Ctrl-Alt-Backspace": "delGroupAfter",
					"Alt-Delete": "delGroupAfter", "Cmd-S": "save", "Cmd-F": "find", "Cmd-G": "findNext", "Shift-Cmd-G": "findPrev", "Cmd-Alt-F": "replace", "Shift-Cmd-Alt-F": "replaceAll", "Cmd-[": "indentLess", "Cmd-]": "indentMore", "Cmd-Backspace": "delWrappedLineLeft", "Cmd-Delete": "delWrappedLineRight", "Cmd-U": "undoSelection", "Shift-Cmd-U": "redoSelection", "Ctrl-Up": "goDocStart", "Ctrl-Down": "goDocEnd", fallthrough: ["basic", "emacsy"]
				}; ua["default"] = W ? ua.macDefault : ua.pcDefault; q.normalizeKeyMap = function(a) {
					var b = {}, c; for (c in a) if (a.hasOwnProperty(c)) {
						var d =
							a[c]; if (!/^(name|fallthrough|(de|at)tach)$/.test(c)) { if ("..." != d) for (var e = ob(c.split(" "), Wf), f = 0; f < e.length; f++) { var g, h; f == e.length - 1 ? (h = c, g = d) : (h = e.slice(0, f + 1).join(" "), g = "..."); var k = b[h]; if (!k) b[h] = g; else if (k != g) throw Error("Inconsistent bindings for " + h); } delete a[c] }
					} for (var l in b) a[l] = b[l]; return a
				}; var xb = q.lookupKey = function(a, b, c, d) {
					b = pc(b); var e = b.call ? b.call(a, d) : b[a]; if (!1 === e) return "nothing"; if ("..." === e) return "multi"; if (null != e && c(e)) return "handled"; if (b.fallthrough) {
						if ("[object Array]" !=
							Object.prototype.toString.call(b.fallthrough)) return xb(a, b.fallthrough, c, d); for (e = 0; e < b.fallthrough.length; e++) { var f = xb(a, b.fallthrough[e], c, d); if (f) return f }
					}
				}, Pf = q.isModifierKey = function(a) { a = "string" == typeof a ? a : va[a.keyCode]; return "Ctrl" == a || "Alt" == a || "Shift" == a || "Mod" == a }, Rf = q.keyName = function(a, b) {
					if (ba && 34 == a.keyCode && a["char"]) return !1; var c = va[a.keyCode], d = c; if (null == d || a.altGraphKey) return !1; a.altKey && "Alt" != c && (d = "Alt-" + d); (of ? a.metaKey : a.ctrlKey) && "Ctrl" != c && (d = "Ctrl-" + d); (of ? a.ctrlKey :
						a.metaKey) && "Cmd" != c && (d = "Cmd-" + d); !b && a.shiftKey && "Shift" != c && (d = "Shift-" + d); return d
				}; q.fromTextArea = function(a, b) {
					function c() { a.value = k.getValue() } b = b ? V(b) : {}; b.value = a.value; !b.tabindex && a.tabIndex && (b.tabindex = a.tabIndex); !b.placeholder && a.placeholder && (b.placeholder = a.placeholder); if (null == b.autofocus) { var d = fa(); b.autofocus = d == a || null != a.getAttribute("autofocus") && d == document.body } if (a.form && (v(a.form, "submit", c), !b.leaveSubmitMethodAlone)) {
						var e = a.form, f = e.submit; try {
							var g = e.submit = function() {
								c();
								e.submit = f; e.submit(); e.submit = g
							}
						} catch (h) { }
					} b.finishInit = function(b) { b.save = c; b.getTextArea = function() { return a }; b.toTextArea = function() { b.toTextArea = isNaN; c(); a.parentNode.removeChild(b.getWrapperElement()); a.style.display = ""; a.form && (ka(a.form, "submit", c), "function" == typeof a.form.submit && (a.form.submit = f)) } }; a.style.display = "none"; var k = q(function(b) { a.parentNode.insertBefore(b, a.nextSibling) }, b); return k
				}; var tc = q.StringStream = function(a, b) {
					this.pos = this.start = 0; this.string = a; this.tabSize = b ||
						8; this.lineStart = this.lastColumnPos = this.lastColumnValue = 0
				}; tc.prototype = {
					eol: function() { return this.pos >= this.string.length }, sol: function() { return this.pos == this.lineStart }, peek: function() { return this.string.charAt(this.pos) || void 0 }, next: function() { if (this.pos < this.string.length) return this.string.charAt(this.pos++) }, eat: function(a) { var b = this.string.charAt(this.pos); if ("string" == typeof a ? b == a : b && (a.test ? a.test(b) : a(b))) return ++this.pos, b }, eatWhile: function(a) {
						for (var b = this.pos; this.eat(a);); return this.pos >
							b
					}, eatSpace: function() { for (var a = this.pos; /[\s\u00a0]/.test(this.string.charAt(this.pos));)++this.pos; return this.pos > a }, skipToEnd: function() { this.pos = this.string.length }, skipTo: function(a) { a = this.string.indexOf(a, this.pos); if (-1 < a) return this.pos = a, !0 }, backUp: function(a) { this.pos -= a }, column: function() {
						this.lastColumnPos < this.start && (this.lastColumnValue = aa(this.string, this.start, this.tabSize, this.lastColumnPos, this.lastColumnValue), this.lastColumnPos = this.start); return this.lastColumnValue - (this.lineStart ?
							aa(this.string, this.lineStart, this.tabSize) : 0)
					}, indentation: function() { return aa(this.string, null, this.tabSize) - (this.lineStart ? aa(this.string, this.lineStart, this.tabSize) : 0) }, match: function(a, b, c) { if ("string" == typeof a) { var d = function(a) { return c ? a.toLowerCase() : a }, e = this.string.substr(this.pos, a.length); if (d(e) == d(a)) return !1 !== b && (this.pos += a.length), !0 } else { if ((a = this.string.slice(this.pos).match(a)) && 0 < a.index) return null; a && !1 !== b && (this.pos += a[0].length); return a } }, current: function() {
						return this.string.slice(this.start,
							this.pos)
					}, hideFirstChars: function(a, b) { this.lineStart += a; try { return b() } finally { this.lineStart -= a } }
				}; var sd = 0, Ha = q.TextMarker = function(a, b) { this.lines = []; this.type = b; this.doc = a; this.id = ++sd }; Ya(Ha); Ha.prototype.clear = function() {
					if (!this.explicitlyCleared) {
						var a = this.doc.cm, b = a && !a.curOp; b && Ja(a); if (S(this, "clear")) { var c = this.find(); c && L(this, "clear", c.from, c.to) } for (var d = c = null, e = 0; e < this.lines.length; ++e) {
							var f = this.lines[e], g = zb(f.markedSpans, this); a && !this.collapsed ? na(a, F(f), "text") : a && (null !=
								g.to && (d = F(f)), null != g.from && (c = F(f))); for (var h = f, k = f.markedSpans, l = g, m = void 0, p = 0; p < k.length; ++p)k[p] != l && (m || (m = [])).push(k[p]); h.markedSpans = m; null == g.from && this.collapsed && !ya(this.doc, f) && a && ca(f, xa(a.display))
						} if (a && this.collapsed && !a.options.lineWrapping) for (e = 0; e < this.lines.length; ++e)f = ia(this.lines[e]), g = Kb(f), g > a.display.maxLineLength && (a.display.maxLine = f, a.display.maxLineLength = g, a.display.maxLineChanged = !0); null != c && a && this.collapsed && Q(a, c, d + 1); this.lines.length = 0; this.explicitlyCleared =
							!0; this.atomic && this.doc.cantEdit && (this.doc.cantEdit = !1, a && ge(a.doc)); a && L(a, "markerCleared", a, this); b && La(a); this.parent && this.parent.clear()
					}
				}; Ha.prototype.find = function(a, b) { null == a && "bookmark" == this.type && (a = 1); for (var c, d, e = 0; e < this.lines.length; ++e) { var f = this.lines[e], g = zb(f.markedSpans, this); if (null != g.from && (c = r(b ? f : F(f), g.from), -1 == a)) return c; if (null != g.to && (d = r(b ? f : F(f), g.to), 1 == a)) return d } return c && { from: c, to: d } }; Ha.prototype.changed = function() {
					var a = this.find(-1, !0), b = this, c = this.doc.cm;
					a && c && T(c, function() { var d = a.line, e = F(a.line); if (e = Vc(c, e)) le(e), c.curOp.selectionChanged = c.curOp.forceUpdate = !0; c.curOp.updateMaxLine = !0; ya(b.doc, d) || null == b.height || (e = b.height, b.height = null, (e = ub(b) - e) && ca(d, d.height + e)) })
				}; Ha.prototype.attachLine = function(a) { if (!this.lines.length && this.doc.cm) { var b = this.doc.cm.curOp; b.maybeHiddenMarkers && -1 != D(b.maybeHiddenMarkers, this) || (b.maybeUnhiddenMarkers || (b.maybeUnhiddenMarkers = [])).push(this) } this.lines.push(a) }; Ha.prototype.detachLine = function(a) {
					this.lines.splice(D(this.lines,
						a), 1); !this.lines.length && this.doc.cm && (a = this.doc.cm.curOp, (a.maybeHiddenMarkers || (a.maybeHiddenMarkers = [])).push(this))
				}; var sd = 0, rc = q.SharedTextMarker = function(a, b) { this.markers = a; this.primary = b; for (var c = 0; c < a.length; ++c)a[c].parent = this }; Ya(rc); rc.prototype.clear = function() { if (!this.explicitlyCleared) { this.explicitlyCleared = !0; for (var a = 0; a < this.markers.length; ++a)this.markers[a].clear(); L(this, "clear") } }; rc.prototype.find = function(a, b) { return this.primary.find(a, b) }; var sc = q.LineWidget = function(a,
					b, c) { if (c) for (var d in c) c.hasOwnProperty(d) && (this[d] = c[d]); this.doc = a; this.node = b }; Ya(sc); sc.prototype.clear = function() { var a = this.doc.cm, b = this.line.widgets, c = this.line, d = F(c); if (null != d && b) { for (var e = 0; e < b.length; ++e)b[e] == this && b.splice(e--, 1); b.length || (c.widgets = null); var f = ub(this); ca(c, Math.max(0, c.height - f)); a && T(a, function() { var b = -f; ea(c) < (a.curOp && a.curOp.scrollTop || a.doc.scrollTop) && lc(a, null, b); na(a, d, "widget") }) } }; sc.prototype.changed = function() {
						var a = this.height, b = this.doc.cm, c = this.line;
						this.height = null; var d = ub(this) - a; d && (ca(c, c.height + d), b && T(b, function() { b.curOp.forceUpdate = !0; ea(c) < (b.curOp && b.curOp.scrollTop || b.doc.scrollTop) && lc(b, null, d) }))
					}; var Ab = q.Line = function(a, b, c) { this.text = a; Ue(this, b); this.height = c ? c(this) : 1 }; Ya(Ab); Ab.prototype.lineNo = function() { return F(this) }; var bg = {}, ag = {}; Bb.prototype = {
						chunkSize: function() { return this.lines.length }, removeInner: function(a, b) {
							for (var c = a, d = a + b; c < d; ++c) {
								var e = this.lines[c]; this.height -= e.height; var f = e; f.parent = null; Te(f); L(e,
									"delete")
							} this.lines.splice(a, b)
						}, collapse: function(a) { a.push.apply(a, this.lines) }, insertInner: function(a, b, c) { this.height += c; this.lines = this.lines.slice(0, a).concat(b).concat(this.lines.slice(a)); for (a = 0; a < b.length; ++a)b[a].parent = this }, iterN: function(a, b, c) { for (b = a + b; a < b; ++a)if (c(this.lines[a])) return !0 }
					}; Cb.prototype = {
						chunkSize: function() { return this.size }, removeInner: function(a, b) {
							this.size -= b; for (var c = 0; c < this.children.length; ++c) {
								var d = this.children[c], e = d.chunkSize(); if (a < e) {
									var f = Math.min(b,
										e - a), g = d.height; d.removeInner(a, f); this.height -= g - d.height; e == f && (this.children.splice(c--, 1), d.parent = null); if (0 == (b -= f)) break; a = 0
								} else a -= e
							} 25 > this.size - b && (1 < this.children.length || !(this.children[0] instanceof Bb)) && (c = [], this.collapse(c), this.children = [new Bb(c)], this.children[0].parent = this)
						}, collapse: function(a) { for (var b = 0; b < this.children.length; ++b)this.children[b].collapse(a) }, insertInner: function(a, b, c) {
							this.size += b.length; this.height += c; for (var d = 0; d < this.children.length; ++d) {
								var e = this.children[d],
								f = e.chunkSize(); if (a <= f) { e.insertInner(a, b, c); if (e.lines && 50 < e.lines.length) { for (; 50 < e.lines.length;)a = e.lines.splice(e.lines.length - 25, 25), a = new Bb(a), e.height -= a.height, this.children.splice(d + 1, 0, a), a.parent = this; this.maybeSpill() } break } a -= f
							}
						}, maybeSpill: function() {
							if (!(10 >= this.children.length)) {
								var a = this; do {
									var b = a.children.splice(a.children.length - 5, 5), b = new Cb(b); if (a.parent) { a.size -= b.size; a.height -= b.height; var c = D(a.parent.children, a); a.parent.children.splice(c + 1, 0, b) } else c = new Cb(a.children),
										c.parent = a, a.children = [c, b], a = c; b.parent = a.parent
								} while (10 < a.children.length); a.parent.maybeSpill()
							}
						}, iterN: function(a, b, c) { for (var d = 0; d < this.children.length; ++d) { var e = this.children[d], f = e.chunkSize(); if (a < f) { f = Math.min(b, f - a); if (e.iterN(a, f, c)) return !0; if (0 == (b -= f)) break; a = 0 } else a -= f } }
					}; var og = 0, P = q.Doc = function(a, b, c) {
						if (!(this instanceof P)) return new P(a, b, c); null == c && (c = 0); Cb.call(this, [new Bb([new Ab("", null)])]); this.first = c; this.scrollTop = this.scrollLeft = 0; this.cantEdit = !1; this.cleanGeneration =
							1; this.frontier = c; c = r(c, 0); this.sel = ga(c); this.history = new uc(null); this.id = ++og; this.modeOption = b; "string" == typeof a && (a = sa(a)); qd(this, { from: c, to: c, text: a }); H(this, ga(c), ha)
					}; P.prototype = ff(Cb.prototype, {
						constructor: P, iter: function(a, b, c) { c ? this.iterN(a - this.first, b - a, c) : this.iterN(this.first, this.first + this.size, a) }, insert: function(a, b) { for (var c = 0, d = 0; d < b.length; ++d)c += b[d].height; this.insertInner(a - this.first, b, c) }, remove: function(a, b) { this.removeInner(a - this.first, b) }, getValue: function(a) {
							var b =
								xd(this, this.first, this.first + this.size); return !1 === a ? b : b.join(a || "\n")
						}, setValue: N(function(a) { var b = r(this.first, 0), c = this.first + this.size - 1; Oa(this, { from: b, to: r(c, u(this, c).text.length), text: sa(a), origin: "setValue", full: !0 }, !0); H(this, ga(b)) }), replaceRange: function(a, b, c, d) { b = w(this, b); c = c ? w(this, c) : b; wb(this, a, b, c, d) }, getRange: function(a, b, c) { a = Da(this, w(this, a), w(this, b)); return !1 === c ? a : a.join(c || "\n") }, getLine: function(a) { return (a = this.getLineHandle(a)) && a.text }, getLineHandle: function(a) {
							if (qb(this,
								a)) return u(this, a)
						}, getLineNumber: function(a) { return F(a) }, getLineHandleVisualStart: function(a) { "number" == typeof a && (a = u(this, a)); return ia(a) }, lineCount: function() { return this.size }, firstLine: function() { return this.first }, lastLine: function() { return this.first + this.size - 1 }, clipPos: function(a) { return w(this, a) }, getCursor: function(a) { var b = this.sel.primary(); return null == a || "head" == a ? b.head : "anchor" == a ? b.anchor : "end" == a || "to" == a || !1 === a ? b.to() : b.from() }, listSelections: function() { return this.sel.ranges },
						somethingSelected: function() { return this.sel.somethingSelected() }, setCursor: N(function(a, b, c) { a = w(this, "number" == typeof a ? r(a, b || 0) : a); H(this, ga(a, null), c) }), setSelection: N(function(a, b, c) { var d = w(this, a); a = w(this, b || a); H(this, ga(d, a), c) }), extendSelection: N(function(a, b, c) { Ub(this, w(this, a), b && w(this, b), c) }), extendSelections: N(function(a, b) { for (var c = [], d = 0; d < a.length; d++)c[d] = w(this, a[d]); ae(this, c) }), extendSelectionsBy: N(function(a, b) { ae(this, ob(this.sel.ranges, a), b) }), setSelections: N(function(a,
							b, c) { if (a.length) { for (var d = 0, e = []; d < a.length; d++)e[d] = new z(w(this, a[d].anchor), w(this, a[d].head)); null == b && (b = Math.min(a.length - 1, this.sel.primIndex)); H(this, Z(e, b), c) } }), addSelection: N(function(a, b, c) { var d = this.sel.ranges.slice(0); d.push(new z(w(this, a), w(this, b || a))); H(this, Z(d, d.length - 1), c) }), getSelection: function(a) { for (var b = this.sel.ranges, c, d = 0; d < b.length; d++) { var e = Da(this, b[d].from(), b[d].to()); c = c ? c.concat(e) : e } return !1 === a ? c : c.join(a || "\n") }, getSelections: function(a) {
								for (var b = [], c =
									this.sel.ranges, d = 0; d < c.length; d++) { var e = Da(this, c[d].from(), c[d].to()); !1 !== a && (e = e.join(a || "\n")); b[d] = e } return b
							}, replaceSelection: function(a, b, c) { for (var d = [], e = 0; e < this.sel.ranges.length; e++)d[e] = a; this.replaceSelections(d, b, c || "+input") }, replaceSelections: N(function(a, b, c) {
								for (var d = [], e = this.sel, f = 0; f < e.ranges.length; f++) { var g = e.ranges[f]; d[f] = { from: g.from(), to: g.to(), text: sa(a[f]), origin: c } } if (f = b && "end" != b) {
									f = []; c = a = r(this.first, 0); for (e = 0; e < d.length; e++) {
										var h = d[e], g = Ee(h.from, a, c), k =
											Ee(ta(h), a, c); a = h.to; c = k; "around" == b ? (h = this.sel.ranges[e], h = 0 > y(h.head, h.anchor), f[e] = new z(h ? k : g, h ? g : k)) : f[e] = new z(g, g)
									} f = new la(f, this.sel.primIndex)
								} b = f; for (f = d.length - 1; 0 <= f; f--)Oa(this, d[f]); b ? be(this, b) : this.cm && Pa(this.cm)
							}), undo: N(function() { kc(this, "undo") }), redo: N(function() { kc(this, "redo") }), undoSelection: N(function() { kc(this, "undo", !0) }), redoSelection: N(function() { kc(this, "redo", !0) }), setExtending: function(a) { this.extend = a }, getExtending: function() { return this.extend }, historySize: function() {
								for (var a =
									this.history, b = 0, c = 0, d = 0; d < a.done.length; d++)a.done[d].ranges || ++b; for (d = 0; d < a.undone.length; d++)a.undone[d].ranges || ++c; return { undo: b, redo: c }
							}, clearHistory: function() { this.history = new uc(this.history.maxGeneration) }, markClean: function() { this.cleanGeneration = this.changeGeneration(!0) }, changeGeneration: function(a) { a && (this.history.lastOp = this.history.lastSelOp = this.history.lastOrigin = null); return this.history.generation }, isClean: function(a) { return this.history.generation == (a || this.cleanGeneration) },
						getHistory: function() { return { done: Xa(this.history.done), undone: Xa(this.history.undone) } }, setHistory: function(a) { var b = this.history = new uc(this.history.maxGeneration); b.done = Xa(a.done.slice(0), null, !0); b.undone = Xa(a.undone.slice(0), null, !0) }, addLineClass: N(function(a, b, c) { return nc(this, a, "gutter" == b ? "gutter" : "class", function(a) { var e = "text" == b ? "textClass" : "background" == b ? "bgClass" : "gutter" == b ? "gutterClass" : "wrapClass"; if (a[e]) { if (Fb(c).test(a[e])) return !1; a[e] += " " + c } else a[e] = c; return !0 }) }), removeLineClass: N(function(a,
							b, c) { return nc(this, a, "gutter" == b ? "gutter" : "class", function(a) { var e = "text" == b ? "textClass" : "background" == b ? "bgClass" : "gutter" == b ? "gutterClass" : "wrapClass", f = a[e]; if (f) if (null == c) a[e] = null; else { var g = f.match(Fb(c)); if (!g) return !1; var h = g.index + g[0].length; a[e] = f.slice(0, g.index) + (g.index && h != f.length ? " " : "") + f.slice(h) || null } else return !1; return !0 }) }), addLineWidget: N(function(a, b, c) { return $f(this, a, b, c) }), removeLineWidget: function(a) { a.clear() }, markText: function(a, b, c) {
								return Wa(this, w(this, a), w(this,
									b), c, "range")
							}, setBookmark: function(a, b) { var c = { replacedWith: b && (null == b.nodeType ? b.widget : b), insertLeft: b && b.insertLeft, clearWhenEmpty: !1, shared: b && b.shared, handleMouseEvents: b && b.handleMouseEvents }; a = w(this, a); return Wa(this, a, a, c, "bookmark") }, findMarksAt: function(a) { a = w(this, a); var b = [], c = u(this, a.line).markedSpans; if (c) for (var d = 0; d < c.length; ++d) { var e = c[d]; (null == e.from || e.from <= a.ch) && (null == e.to || e.to >= a.ch) && b.push(e.marker.parent || e.marker) } return b }, findMarks: function(a, b, c) {
								a = w(this, a);
								b = w(this, b); var d = [], e = a.line; this.iter(a.line, b.line + 1, function(f) { if (f = f.markedSpans) for (var g = 0; g < f.length; g++) { var h = f[g]; e == a.line && a.ch > h.to || null == h.from && e != a.line || e == b.line && h.from > b.ch || c && !c(h.marker) || d.push(h.marker.parent || h.marker) } ++e }); return d
							}, getAllMarks: function() { var a = []; this.iter(function(b) { if (b = b.markedSpans) for (var c = 0; c < b.length; ++c)null != b[c].from && a.push(b[c].marker) }); return a }, posFromIndex: function(a) {
								var b, c = this.first; this.iter(function(d) {
									d = d.text.length + 1; if (d >
										a) return b = a, !0; a -= d; ++c
								}); return w(this, r(c, b))
							}, indexFromPos: function(a) { a = w(this, a); var b = a.ch; if (a.line < this.first || 0 > a.ch) return 0; this.iter(this.first, a.line, function(a) { b += a.text.length + 1 }); return b }, copy: function(a) { var b = new P(xd(this, this.first, this.first + this.size), this.modeOption, this.first); b.scrollTop = this.scrollTop; b.scrollLeft = this.scrollLeft; b.sel = this.sel; b.extend = !1; a && (b.history.undoDepth = this.history.undoDepth, b.setHistory(this.getHistory())); return b }, linkedDoc: function(a) {
								a ||
								(a = {}); var b = this.first, c = this.first + this.size; null != a.from && a.from > b && (b = a.from); null != a.to && a.to < c && (c = a.to); b = new P(xd(this, b, c), a.mode || this.modeOption, b); a.sharedHist && (b.history = this.history); (this.linked || (this.linked = [])).push({ doc: b, sharedHist: a.sharedHist }); b.linked = [{ doc: this, isParent: !0, sharedHist: a.sharedHist }]; a = Re(this); for (c = 0; c < a.length; c++) { var d = a[c], e = d.find(), f = b.clipPos(e.from), e = b.clipPos(e.to); y(f, e) && (f = Wa(b, f, e, d.primary, d.primary.type), d.markers.push(f), f.parent = d) } return b
							},
						unlinkDoc: function(a) { a instanceof q && (a = a.doc); if (this.linked) for (var b = 0; b < this.linked.length; ++b)if (this.linked[b].doc == a) { this.linked.splice(b, 1); a.unlinkDoc(this); Yf(Re(this)); break } if (a.history == this.history) { var c = [a.id]; Ga(a, function(a) { c.push(a.id) }, !0); a.history = new uc(null); a.history.done = Xa(this.history.done, c); a.history.undone = Xa(this.history.undone, c) } }, iterLinkedDocs: function(a) { Ga(this, a) }, getMode: function() { return this.mode }, getEditor: function() { return this.cm }
					}); P.prototype.eachLine =
						P.prototype.iter; var pg = ["iter", "insert", "remove", "copy", "getEditor"], Jb; for (Jb in P.prototype) P.prototype.hasOwnProperty(Jb) && 0 > D(pg, Jb) && (q.prototype[Jb] = function(a) { return function() { return a.apply(this.doc, arguments) } }(P.prototype[Jb])); Ya(P); var O = q.e_preventDefault = function(a) { a.preventDefault ? a.preventDefault() : a.returnValue = !1 }, qg = q.e_stopPropagation = function(a) { a.stopPropagation ? a.stopPropagation() : a.cancelBubble = !0 }, jd = q.e_stop = function(a) { O(a); qg(a) }, v = q.on = function(a, b, c) {
							a.addEventListener ?
							a.addEventListener(b, c, !1) : a.attachEvent ? a.attachEvent("on" + b, c) : (a = a._handlers || (a._handlers = {}), (a[b] || (a[b] = [])).push(c))
						}, ka = q.off = function(a, b, c) { if (a.removeEventListener) a.removeEventListener(b, c, !1); else if (a.detachEvent) a.detachEvent("on" + b, c); else if (a = a._handlers && a._handlers[b]) for (b = 0; b < a.length; ++b)if (a[b] == c) { a.splice(b, 1); break } }, K = q.signal = function(a, b) { var c = a._handlers && a._handlers[b]; if (c) for (var d = Array.prototype.slice.call(arguments, 2), e = 0; e < c.length; ++e)c[e].apply(null, d) }, Db =
								null, Hd = 30, Ae = q.Pass = { toString: function() { return "CodeMirror.Pass" } }, ha = { scroll: !1 }, kd = { origin: "*mouse" }, Gb = { origin: "+move" }; bb.prototype.set = function(a, b) { clearTimeout(this.id); this.id = setTimeout(b, a) }; var aa = q.countColumn = function(a, b, c, d, e) { null == b && (b = a.search(/[^\s\u00a0]/), -1 == b && (b = a.length)); d = d || 0; for (e = e || 0; ;) { var f = a.indexOf("\t", d); if (0 > f || f >= b) return e + (b - d); e += f - d; e += c - e % c; d = f + 1 } }, vc = [""], Za = function(a) { a.select() }; Qa ? Za = function(a) { a.selectionStart = 0; a.selectionEnd = a.value.length } : B &&
									(Za = function(a) { try { a.select() } catch (b) { } }); var rg = /[\u00df\u0587\u0590-\u05f4\u0600-\u06ff\u3040-\u309f\u30a0-\u30ff\u3400-\u4db5\u4e00-\u9fcc\uac00-\ud7af]/, gf = q.isWordChar = function(a) { return /\w/.test(a) || "€" < a && (a.toUpperCase() != a.toLowerCase() || rg.test(a)) }, ig = /[\u0300-\u036f\u0483-\u0489\u0591-\u05bd\u05bf\u05c1\u05c2\u05c4\u05c5\u05c7\u0610-\u061a\u064b-\u065e\u0670\u06d6-\u06dc\u06de-\u06e4\u06e7\u06e8\u06ea-\u06ed\u0711\u0730-\u074a\u07a6-\u07b0\u07eb-\u07f3\u0816-\u0819\u081b-\u0823\u0825-\u0827\u0829-\u082d\u0900-\u0902\u093c\u0941-\u0948\u094d\u0951-\u0955\u0962\u0963\u0981\u09bc\u09be\u09c1-\u09c4\u09cd\u09d7\u09e2\u09e3\u0a01\u0a02\u0a3c\u0a41\u0a42\u0a47\u0a48\u0a4b-\u0a4d\u0a51\u0a70\u0a71\u0a75\u0a81\u0a82\u0abc\u0ac1-\u0ac5\u0ac7\u0ac8\u0acd\u0ae2\u0ae3\u0b01\u0b3c\u0b3e\u0b3f\u0b41-\u0b44\u0b4d\u0b56\u0b57\u0b62\u0b63\u0b82\u0bbe\u0bc0\u0bcd\u0bd7\u0c3e-\u0c40\u0c46-\u0c48\u0c4a-\u0c4d\u0c55\u0c56\u0c62\u0c63\u0cbc\u0cbf\u0cc2\u0cc6\u0ccc\u0ccd\u0cd5\u0cd6\u0ce2\u0ce3\u0d3e\u0d41-\u0d44\u0d4d\u0d57\u0d62\u0d63\u0dca\u0dcf\u0dd2-\u0dd4\u0dd6\u0ddf\u0e31\u0e34-\u0e3a\u0e47-\u0e4e\u0eb1\u0eb4-\u0eb9\u0ebb\u0ebc\u0ec8-\u0ecd\u0f18\u0f19\u0f35\u0f37\u0f39\u0f71-\u0f7e\u0f80-\u0f84\u0f86\u0f87\u0f90-\u0f97\u0f99-\u0fbc\u0fc6\u102d-\u1030\u1032-\u1037\u1039\u103a\u103d\u103e\u1058\u1059\u105e-\u1060\u1071-\u1074\u1082\u1085\u1086\u108d\u109d\u135f\u1712-\u1714\u1732-\u1734\u1752\u1753\u1772\u1773\u17b7-\u17bd\u17c6\u17c9-\u17d3\u17dd\u180b-\u180d\u18a9\u1920-\u1922\u1927\u1928\u1932\u1939-\u193b\u1a17\u1a18\u1a56\u1a58-\u1a5e\u1a60\u1a62\u1a65-\u1a6c\u1a73-\u1a7c\u1a7f\u1b00-\u1b03\u1b34\u1b36-\u1b3a\u1b3c\u1b42\u1b6b-\u1b73\u1b80\u1b81\u1ba2-\u1ba5\u1ba8\u1ba9\u1c2c-\u1c33\u1c36\u1c37\u1cd0-\u1cd2\u1cd4-\u1ce0\u1ce2-\u1ce8\u1ced\u1dc0-\u1de6\u1dfd-\u1dff\u200c\u200d\u20d0-\u20f0\u2cef-\u2cf1\u2de0-\u2dff\u302a-\u302f\u3099\u309a\ua66f-\ua672\ua67c\ua67d\ua6f0\ua6f1\ua802\ua806\ua80b\ua825\ua826\ua8c4\ua8e0-\ua8f1\ua926-\ua92d\ua947-\ua951\ua980-\ua982\ua9b3\ua9b6-\ua9b9\ua9bc\uaa29-\uaa2e\uaa31\uaa32\uaa35\uaa36\uaa43\uaa4c\uaab0\uaab2-\uaab4\uaab7\uaab8\uaabe\uaabf\uaac1\uabe5\uabe8\uabed\udc00-\udfff\ufb1e\ufe00-\ufe0f\ufe20-\ufe26\uff9e\uff9f]/,
										Ea; Ea = document.createRange ? function(a, b, c, d) { var e = document.createRange(); e.setEnd(d || a, c); e.setStart(a, b); return e } : function(a, b, c) { var d = document.body.createTextRange(); try { d.moveToElementText(a.parentNode) } catch (e) { return d } d.collapse(!0); d.moveEnd("character", c); d.moveStart("character", b); return d }; var Wc = q.contains = function(a, b) { 3 == b.nodeType && (b = b.parentNode); if (a.contains) return a.contains(b); do if (11 == b.nodeType && (b = b.host), b == a) return !0; while (b = b.parentNode) }; B && 11 > C && (fa = function() { try { return document.activeElement } catch (a) { return document.body } });
	var kb = q.rmClass = function(a, b) { var c = a.className, d = Fb(b).exec(c); if (d) { var e = c.slice(d.index + d[0].length); a.className = c.slice(0, d.index) + (e ? d[1] + e : "") } }, mb = q.addClass = function(a, b) { var c = a.className; Fb(b).test(c) || (a.className += (c ? " " : "") + b) }, Dd = !1, Lf = function() { if (B && 9 > C) return !1; var a = t("div"); return "draggable" in a || "dragDrop" in a }(), yd, vd, sa = q.splitLines = 3 != "\n\nb".split(/\n/).length ? function(a) {
		for (var b = 0, c = [], d = a.length; b <= d;) {
			var e = a.indexOf("\n", b); -1 == e && (e = a.length); var f = a.slice(b, "\r" ==
				a.charAt(e - 1) ? e - 1 : e), g = f.indexOf("\r"); -1 != g ? (c.push(f.slice(0, g)), b += g + 1) : (c.push(f), b = e + 1)
		} return c
	} : function(a) { return a.split(/\r\n?|\n/) }, ng = window.getSelection ? function(a) { try { return a.selectionStart != a.selectionEnd } catch (b) { return !1 } } : function(a) { try { var b = a.ownerDocument.selection.createRange() } catch (c) { } return b && b.parentElement() == a ? 0 != b.compareEndPoints("StartToEnd", b) : !1 }, Ce = function() { var a = t("div"); if ("oncopy" in a) return !0; a.setAttribute("oncopy", "return;"); return "function" == typeof a.oncopy }(),
		bd = null, va = {
			3: "Enter", 8: "Backspace", 9: "Tab", 13: "Enter", 16: "Shift", 17: "Ctrl", 18: "Alt", 19: "Pause", 20: "CapsLock", 27: "Esc", 32: "Space", 33: "PageUp", 34: "PageDown", 35: "End", 36: "Home", 37: "Left", 38: "Up", 39: "Right", 40: "Down", 44: "PrintScrn", 45: "Insert", 46: "Delete", 59: ";", 61: "\x3d", 91: "Mod", 92: "Mod", 93: "Mod", 107: "\x3d", 109: "-", 127: "Delete", 173: "-", 186: ";", 187: "\x3d", 188: ",", 189: "-", 190: ".", 191: "/", 192: "`", 219: "[", 220: "\\", 221: "]", 222: "'", 63232: "Up", 63233: "Down", 63234: "Left", 63235: "Right", 63272: "Delete", 63273: "Home",
			63275: "End", 63276: "PageUp", 63277: "PageDown", 63302: "Insert"
		}; q.keyNames = va; (function() { for (var a = 0; 10 > a; a++)va[a + 48] = va[a + 96] = String(a); for (a = 65; 90 >= a; a++)va[a] = String.fromCharCode(a); for (a = 1; 12 >= a; a++)va[a + 111] = va[a + 63235] = "F" + a })(); var vb, gg = function() {
			function a(a) {
				return 247 >= a ? "bbbbbbbbbtstwsbbbbbbbbbbbbbbssstwNN%%%NNNNNN,N,N1111111111NNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNbbbbbbsbbbbbbbbbbbbbbbbbbbbbbbbbb,N%%%%NNNNLNNNNN%%11NLNNN1LNNNNNLLLLLLLLLLLLLLLLLLLLLLLNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLN".charAt(a) :
					1424 <= a && 1524 >= a ? "R" : 1536 <= a && 1773 >= a ? "rrrrrrrrrrrr,rNNmmmmmmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmmmmmmmmrrrrrrrnnnnnnnnnn%nnrrrmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmmmmmmmmmmmmmNmmmm".charAt(a - 1536) : 1774 <= a && 2220 >= a ? "r" : 8192 <= a && 8203 >= a ? "w" : 8204 == a ? "b" : "L"
			} function b(a, b, c) { this.level = a; this.from = b; this.to = c } var c = /[\u0590-\u05f4\u0600-\u06ff\u0700-\u08ac]/, d = /[stwN]/, e = /[LRr]/, f = /[Lb1n]/, g = /[1n]/; return function(h) {
				if (!c.test(h)) return !1;
				for (var k = h.length, l = [], m = 0, p; m < k; ++m)l.push(a(h.charCodeAt(m))); for (var m = 0, n = "L"; m < k; ++m)p = l[m], "m" == p ? l[m] = n : n = p; m = 0; for (n = "L"; m < k; ++m)p = l[m], "1" == p && "r" == n ? l[m] = "n" : e.test(p) && (n = p, "r" == p && (l[m] = "R")); m = 1; for (n = l[0]; m < k - 1; ++m)p = l[m], "+" == p && "1" == n && "1" == l[m + 1] ? l[m] = "1" : "," != p || n != l[m + 1] || "1" != n && "n" != n || (l[m] = n), n = p; for (m = 0; m < k; ++m)if (p = l[m], "," == p) l[m] = "N"; else if ("%" == p) { for (n = m + 1; n < k && "%" == l[n]; ++n); var q = m && "!" == l[m - 1] || n < k && "1" == l[n] ? "1" : "N"; for (p = m; p < n; ++p)l[p] = q; m = n - 1 } m = 0; for (n = "L"; m < k; ++m)p =
					l[m], "L" == n && "1" == p ? l[m] = "L" : e.test(p) && (n = p); for (m = 0; m < k; ++m)if (d.test(l[m])) { for (n = m + 1; n < k && d.test(l[n]); ++n); p = "L" == (n < k ? l[n] : "L"); q = "L" == (m ? l[m - 1] : "L") || p ? "L" : "R"; for (p = m; p < n; ++p)l[p] = q; m = n - 1 } for (var n = [], r, m = 0; m < k;)if (f.test(l[m])) { p = m; for (++m; m < k && f.test(l[m]); ++m); n.push(new b(0, p, m)) } else {
						var t = m, q = n.length; for (++m; m < k && "L" != l[m]; ++m); for (p = t; p < m;)if (g.test(l[p])) { t < p && n.splice(q, 0, new b(1, t, p)); t = p; for (++p; p < m && g.test(l[p]); ++p); n.splice(q, 0, new b(2, t, p)); t = p } else ++p; t < m && n.splice(q, 0, new b(1,
							t, m))
					} 1 == n[0].level && (r = h.match(/^\s+/)) && (n[0].from = r[0].length, n.unshift(new b(0, 0, r[0].length))); 1 == A(n).level && (r = h.match(/\s+$/)) && (A(n).to -= r[0].length, n.push(new b(0, k - r[0].length, k))); 2 == n[0].level && n.unshift(new b(1, n[0].to, n[0].to)); n[0].level != A(n).level && n.push(new b(n[0].level, k, k)); return n
			}
		}(); q.version = "5.2.0"; return q
});