| Línea -... |
Línea 1... |
| - |
|
1 |
// These are filled with ranges (rangeFrom[i] up to but not including
|
| - |
|
2 |
// rangeTo[i]) of code points that count as extending characters.
|
| - |
|
3 |
let rangeFrom = [], rangeTo = []
|
| - |
|
4 |
|
| - |
|
5 |
;(() => {
|
| - |
|
6 |
// Compressed representation of the Grapheme_Cluster_Break=Extend
|
| - |
|
7 |
// information from
|
| - |
|
8 |
// http://www.unicode.org/Public/16.0.0/ucd/auxiliary/GraphemeBreakProperty.txt.
|
| - |
|
9 |
// Each pair of elements represents a range, as an offet from the
|
| - |
|
10 |
// previous range and a length. Numbers are in base-36, with the empty
|
| - |
|
11 |
// string being a shorthand for 1.
|
| - |
|
12 |
let numbers = "lc,34,7n,7,7b,19,,,,2,,2,,,20,b,1c,l,g,,2t,7,2,6,2,2,,4,z,,u,r,2j,b,1m,9,9,,o,4,,9,,3,,5,17,3,3b,f,,w,1j,,,,4,8,4,,3,7,a,2,t,,1m,,,,2,4,8,,9,,a,2,q,,2,2,1l,,4,2,4,2,2,3,3,,u,2,3,,b,2,1l,,4,5,,2,4,,k,2,m,6,,,1m,,,2,,4,8,,7,3,a,2,u,,1n,,,,c,,9,,14,,3,,1l,3,5,3,,4,7,2,b,2,t,,1m,,2,,2,,3,,5,2,7,2,b,2,s,2,1l,2,,,2,4,8,,9,,a,2,t,,20,,4,,2,3,,,8,,29,,2,7,c,8,2q,,2,9,b,6,22,2,r,,,,,,1j,e,,5,,2,5,b,,10,9,,2u,4,,6,,2,2,2,p,2,4,3,g,4,d,,2,2,6,,f,,jj,3,qa,3,t,3,t,2,u,2,1s,2,,7,8,,2,b,9,,19,3,3b,2,y,,3a,3,4,2,9,,6,3,63,2,2,,1m,,,7,,,,,2,8,6,a,2,,1c,h,1r,4,1c,7,,,5,,14,9,c,2,w,4,2,2,,3,1k,,,2,3,,,3,1m,8,2,2,48,3,,d,,7,4,,6,,3,2,5i,1m,,5,ek,,5f,x,2da,3,3x,,2o,w,fe,6,2x,2,n9w,4,,a,w,2,28,2,7k,,3,,4,,p,2,5,,47,2,q,i,d,,12,8,p,b,1a,3,1c,,2,4,2,2,13,,1v,6,2,2,2,2,c,,8,,1b,,1f,,,3,2,2,5,2,,,16,2,8,,6m,,2,,4,,fn4,,kh,g,g,g,a6,2,gt,,6a,,45,5,1ae,3,,2,5,4,14,3,4,,4l,2,fx,4,ar,2,49,b,4w,,1i,f,1k,3,1d,4,2,2,1x,3,10,5,,8,1q,,c,2,1g,9,a,4,2,,2n,3,2,,,2,6,,4g,,3,8,l,2,1l,2,,,,,m,,e,7,3,5,5f,8,2,3,,,n,,29,,2,6,,,2,,,2,,2,6j,,2,4,6,2,,2,r,2,2d,8,2,,,2,2y,,,,2,6,,,2t,3,2,4,,5,77,9,,2,6t,,a,2,,,4,,40,4,2,2,4,,w,a,14,6,2,4,8,,9,6,2,3,1a,d,,2,ba,7,,6,,,2a,m,2,7,,2,,2,3e,6,3,,,2,,7,,,20,2,3,,,,9n,2,f0b,5,1n,7,t4,,1r,4,29,,f5k,2,43q,,,3,4,5,8,8,2,7,u,4,44,3,1iz,1j,4,1e,8,,e,,m,5,,f,11s,7,,h,2,7,,2,,5,79,7,c5,4,15s,7,31,7,240,5,gx7k,2o,3k,6o".split(",").map(s => s ? parseInt(s, 36) : 1);
|
| - |
|
13 |
for (let i = 0, n = 0; i < numbers.length; i++)
|
| - |
|
14 |
(i % 2 ? rangeTo : rangeFrom).push(n = n + numbers[i]);
|
| - |
|
15 |
})();
|
| - |
|
16 |
|
| - |
|
17 |
function isExtendingChar(code) {
|
| - |
|
18 |
if (code < 768) return false
|
| - |
|
19 |
for (let from = 0, to = rangeFrom.length;;) {
|
| - |
|
20 |
let mid = (from + to) >> 1;
|
| - |
|
21 |
if (code < rangeFrom[mid]) to = mid;
|
| - |
|
22 |
else if (code >= rangeTo[mid]) from = mid + 1;
|
| - |
|
23 |
else return true
|
| - |
|
24 |
if (from == to) return false
|
| - |
|
25 |
}
|
| - |
|
26 |
}
|
| - |
|
27 |
|
| - |
|
28 |
function isRegionalIndicator(code) {
|
| - |
|
29 |
return code >= 0x1F1E6 && code <= 0x1F1FF
|
| - |
|
30 |
}
|
| - |
|
31 |
|
| - |
|
32 |
const ZWJ = 0x200d;
|
| - |
|
33 |
|
| - |
|
34 |
function findClusterBreak$1(str, pos, forward = true, includeExtending = true) {
|
| - |
|
35 |
return (forward ? nextClusterBreak : prevClusterBreak)(str, pos, includeExtending)
|
| - |
|
36 |
}
|
| - |
|
37 |
|
| - |
|
38 |
function nextClusterBreak(str, pos, includeExtending) {
|
| - |
|
39 |
if (pos == str.length) return pos
|
| - |
|
40 |
// If pos is in the middle of a surrogate pair, move to its start
|
| - |
|
41 |
if (pos && surrogateLow$1(str.charCodeAt(pos)) && surrogateHigh$1(str.charCodeAt(pos - 1))) pos--;
|
| - |
|
42 |
let prev = codePointAt$1(str, pos);
|
| - |
|
43 |
pos += codePointSize$1(prev);
|
| - |
|
44 |
while (pos < str.length) {
|
| - |
|
45 |
let next = codePointAt$1(str, pos);
|
| - |
|
46 |
if (prev == ZWJ || next == ZWJ || includeExtending && isExtendingChar(next)) {
|
| - |
|
47 |
pos += codePointSize$1(next);
|
| - |
|
48 |
prev = next;
|
| - |
|
49 |
} else if (isRegionalIndicator(next)) {
|
| - |
|
50 |
let countBefore = 0, i = pos - 2;
|
| - |
|
51 |
while (i >= 0 && isRegionalIndicator(codePointAt$1(str, i))) { countBefore++; i -= 2; }
|
| - |
|
52 |
if (countBefore % 2 == 0) break
|
| - |
|
53 |
else pos += 2;
|
| - |
|
54 |
} else {
|
| - |
|
55 |
break
|
| - |
|
56 |
}
|
| - |
|
57 |
}
|
| - |
|
58 |
return pos
|
| - |
|
59 |
}
|
| - |
|
60 |
|
| - |
|
61 |
function prevClusterBreak(str, pos, includeExtending) {
|
| - |
|
62 |
while (pos > 0) {
|
| - |
|
63 |
let found = nextClusterBreak(str, pos - 2, includeExtending);
|
| - |
|
64 |
if (found < pos) return found
|
| - |
|
65 |
pos--;
|
| - |
|
66 |
}
|
| - |
|
67 |
return 0
|
| - |
|
68 |
}
|
| - |
|
69 |
|
| - |
|
70 |
function codePointAt$1(str, pos) {
|
| - |
|
71 |
let code0 = str.charCodeAt(pos);
|
| - |
|
72 |
if (!surrogateHigh$1(code0) || pos + 1 == str.length) return code0
|
| - |
|
73 |
let code1 = str.charCodeAt(pos + 1);
|
| - |
|
74 |
if (!surrogateLow$1(code1)) return code0
|
| - |
|
75 |
return ((code0 - 0xd800) << 10) + (code1 - 0xdc00) + 0x10000
|
| - |
|
76 |
}
|
| - |
|
77 |
|
| - |
|
78 |
function surrogateLow$1(ch) { return ch >= 0xDC00 && ch < 0xE000 }
|
| - |
|
79 |
function surrogateHigh$1(ch) { return ch >= 0xD800 && ch < 0xDC00 }
|
| - |
|
80 |
function codePointSize$1(code) { return code < 0x10000 ? 1 : 2 }
|
| - |
|
81 |
|
| 1 |
/**
|
82 |
/**
|
| 2 |
The data structure for documents. @nonabstract
|
83 |
The data structure for documents. @nonabstract
|
| 3 |
*/
|
84 |
*/
|
| 4 |
class Text {
|
85 |
class Text {
|
| 5 |
/**
|
86 |
/**
|
| Línea 558... |
Línea 639... |
| 558 |
function clip(text, from, to) {
|
639 |
function clip(text, from, to) {
|
| 559 |
from = Math.max(0, Math.min(text.length, from));
|
640 |
from = Math.max(0, Math.min(text.length, from));
|
| 560 |
return [from, Math.max(from, Math.min(text.length, to))];
|
641 |
return [from, Math.max(from, Math.min(text.length, to))];
|
| 561 |
}
|
642 |
}
|
| Línea 562... |
Línea -... |
| 562 |
|
- |
|
| 563 |
// Compressed representation of the Grapheme_Cluster_Break=Extend
|
- |
|
| 564 |
// information from
|
- |
|
| 565 |
// http://www.unicode.org/Public/13.0.0/ucd/auxiliary/GraphemeBreakProperty.txt.
|
- |
|
| 566 |
// Each pair of elements represents a range, as an offet from the
|
- |
|
| 567 |
// previous range and a length. Numbers are in base-36, with the empty
|
- |
|
| 568 |
// string being a shorthand for 1.
|
- |
|
| 569 |
let extend = /*@__PURE__*/"lc,34,7n,7,7b,19,,,,2,,2,,,20,b,1c,l,g,,2t,7,2,6,2,2,,4,z,,u,r,2j,b,1m,9,9,,o,4,,9,,3,,5,17,3,3b,f,,w,1j,,,,4,8,4,,3,7,a,2,t,,1m,,,,2,4,8,,9,,a,2,q,,2,2,1l,,4,2,4,2,2,3,3,,u,2,3,,b,2,1l,,4,5,,2,4,,k,2,m,6,,,1m,,,2,,4,8,,7,3,a,2,u,,1n,,,,c,,9,,14,,3,,1l,3,5,3,,4,7,2,b,2,t,,1m,,2,,2,,3,,5,2,7,2,b,2,s,2,1l,2,,,2,4,8,,9,,a,2,t,,20,,4,,2,3,,,8,,29,,2,7,c,8,2q,,2,9,b,6,22,2,r,,,,,,1j,e,,5,,2,5,b,,10,9,,2u,4,,6,,2,2,2,p,2,4,3,g,4,d,,2,2,6,,f,,jj,3,qa,3,t,3,t,2,u,2,1s,2,,7,8,,2,b,9,,19,3,3b,2,y,,3a,3,4,2,9,,6,3,63,2,2,,1m,,,7,,,,,2,8,6,a,2,,1c,h,1r,4,1c,7,,,5,,14,9,c,2,w,4,2,2,,3,1k,,,2,3,,,3,1m,8,2,2,48,3,,d,,7,4,,6,,3,2,5i,1m,,5,ek,,5f,x,2da,3,3x,,2o,w,fe,6,2x,2,n9w,4,,a,w,2,28,2,7k,,3,,4,,p,2,5,,47,2,q,i,d,,12,8,p,b,1a,3,1c,,2,4,2,2,13,,1v,6,2,2,2,2,c,,8,,1b,,1f,,,3,2,2,5,2,,,16,2,8,,6m,,2,,4,,fn4,,kh,g,g,g,a6,2,gt,,6a,,45,5,1ae,3,,2,5,4,14,3,4,,4l,2,fx,4,ar,2,49,b,4w,,1i,f,1k,3,1d,4,2,2,1x,3,10,5,,8,1q,,c,2,1g,9,a,4,2,,2n,3,2,,,2,6,,4g,,3,8,l,2,1l,2,,,,,m,,e,7,3,5,5f,8,2,3,,,n,,29,,2,6,,,2,,,2,,2,6j,,2,4,6,2,,2,r,2,2d,8,2,,,2,2y,,,,2,6,,,2t,3,2,4,,5,77,9,,2,6t,,a,2,,,4,,40,4,2,2,4,,w,a,14,6,2,4,8,,9,6,2,3,1a,d,,2,ba,7,,6,,,2a,m,2,7,,2,,2,3e,6,3,,,2,,7,,,20,2,3,,,,9n,2,f0b,5,1n,7,t4,,1r,4,29,,f5k,2,43q,,,3,4,5,8,8,2,7,u,4,44,3,1iz,1j,4,1e,8,,e,,m,5,,f,11s,7,,h,2,7,,2,,5,79,7,c5,4,15s,7,31,7,240,5,gx7k,2o,3k,6o".split(",").map(s => s ? parseInt(s, 36) : 1);
|
- |
|
| 570 |
// Convert offsets into absolute values
|
- |
|
| 571 |
for (let i = 1; i < extend.length; i++)
|
- |
|
| 572 |
extend[i] += extend[i - 1];
|
- |
|
| 573 |
function isExtendingChar(code) {
|
- |
|
| 574 |
for (let i = 1; i < extend.length; i += 2)
|
- |
|
| 575 |
if (extend[i] > code)
|
- |
|
| 576 |
return extend[i - 1] <= code;
|
- |
|
| 577 |
return false;
|
- |
|
| 578 |
}
|
- |
|
| 579 |
function isRegionalIndicator(code) {
|
- |
|
| 580 |
return code >= 0x1F1E6 && code <= 0x1F1FF;
|
- |
|
| 581 |
}
|
- |
|
| 582 |
const ZWJ = 0x200d;
|
643 |
|
| 583 |
/**
|
644 |
/**
|
| 584 |
Returns a next grapheme cluster break _after_ (not equal to)
|
645 |
Returns a next grapheme cluster break _after_ (not equal to)
|
| 585 |
`pos`, if `forward` is true, or before otherwise. Returns `pos`
|
646 |
`pos`, if `forward` is true, or before otherwise. Returns `pos`
|
| 586 |
itself if no further cluster break is available in the string.
|
647 |
itself if no further cluster break is available in the string.
|
| 587 |
Moves across surrogate pairs, extending characters (when
|
648 |
Moves across surrogate pairs, extending characters (when
|
| 588 |
`includeExtending` is true), characters joined with zero-width
|
649 |
`includeExtending` is true), characters joined with zero-width
|
| 589 |
joiners, and flag emoji.
|
650 |
joiners, and flag emoji.
|
| 590 |
*/
|
651 |
*/
|
| 591 |
function findClusterBreak(str, pos, forward = true, includeExtending = true) {
|
- |
|
| 592 |
return (forward ? nextClusterBreak : prevClusterBreak)(str, pos, includeExtending);
|
- |
|
| 593 |
}
|
- |
|
| 594 |
function nextClusterBreak(str, pos, includeExtending) {
|
- |
|
| 595 |
if (pos == str.length)
|
- |
|
| 596 |
return pos;
|
- |
|
| 597 |
// If pos is in the middle of a surrogate pair, move to its start
|
- |
|
| 598 |
if (pos && surrogateLow(str.charCodeAt(pos)) && surrogateHigh(str.charCodeAt(pos - 1)))
|
- |
|
| 599 |
pos--;
|
- |
|
| 600 |
let prev = codePointAt(str, pos);
|
- |
|
| 601 |
pos += codePointSize(prev);
|
- |
|
| 602 |
while (pos < str.length) {
|
- |
|
| 603 |
let next = codePointAt(str, pos);
|
- |
|
| 604 |
if (prev == ZWJ || next == ZWJ || includeExtending && isExtendingChar(next)) {
|
- |
|
| 605 |
pos += codePointSize(next);
|
- |
|
| 606 |
prev = next;
|
- |
|
| 607 |
}
|
- |
|
| 608 |
else if (isRegionalIndicator(next)) {
|
- |
|
| 609 |
let countBefore = 0, i = pos - 2;
|
- |
|
| 610 |
while (i >= 0 && isRegionalIndicator(codePointAt(str, i))) {
|
- |
|
| 611 |
countBefore++;
|
- |
|
| 612 |
i -= 2;
|
- |
|
| 613 |
}
|
- |
|
| 614 |
if (countBefore % 2 == 0)
|
- |
|
| 615 |
break;
|
- |
|
| 616 |
else
|
- |
|
| 617 |
pos += 2;
|
- |
|
| 618 |
}
|
- |
|
| 619 |
else {
|
- |
|
| 620 |
break;
|
- |
|
| 621 |
}
|
- |
|
| 622 |
}
|
- |
|
| 623 |
return pos;
|
- |
|
| 624 |
}
|
- |
|
| 625 |
function prevClusterBreak(str, pos, includeExtending) {
|
- |
|
| 626 |
while (pos > 0) {
|
652 |
function findClusterBreak(str, pos, forward = true, includeExtending = true) {
|
| 627 |
let found = nextClusterBreak(str, pos - 2, includeExtending);
|
- |
|
| 628 |
if (found < pos)
|
- |
|
| 629 |
return found;
|
- |
|
| 630 |
pos--;
|
- |
|
| 631 |
}
|
- |
|
| 632 |
return 0;
|
653 |
return findClusterBreak$1(str, pos, forward, includeExtending);
|
| 633 |
}
|
654 |
}
|
| 634 |
function surrogateLow(ch) { return ch >= 0xDC00 && ch < 0xE000; }
|
655 |
function surrogateLow(ch) { return ch >= 0xDC00 && ch < 0xE000; }
|
| 635 |
function surrogateHigh(ch) { return ch >= 0xD800 && ch < 0xDC00; }
|
656 |
function surrogateHigh(ch) { return ch >= 0xD800 && ch < 0xDC00; }
|
| 636 |
/**
|
657 |
/**
|
| Línea 657... |
Línea 678... |
| 657 |
return String.fromCharCode(code);
|
678 |
return String.fromCharCode(code);
|
| 658 |
code -= 0x10000;
|
679 |
code -= 0x10000;
|
| 659 |
return String.fromCharCode((code >> 10) + 0xd800, (code & 1023) + 0xdc00);
|
680 |
return String.fromCharCode((code >> 10) + 0xd800, (code & 1023) + 0xdc00);
|
| 660 |
}
|
681 |
}
|
| 661 |
/**
|
682 |
/**
|
| 662 |
The amount of positions a character takes up a JavaScript string.
|
683 |
The amount of positions a character takes up in a JavaScript string.
|
| 663 |
*/
|
684 |
*/
|
| 664 |
function codePointSize(code) { return code < 0x10000 ? 1 : 2; }
|
685 |
function codePointSize(code) { return code < 0x10000 ? 1 : 2; }
|
| Línea 665... |
Línea 686... |
| 665 |
|
686 |
|
| 666 |
const DefaultSplit = /\r\n?|\n/;
|
687 |
const DefaultSplit = /\r\n?|\n/;
|
| Línea 786... |
Línea 807... |
| 786 |
composeDesc(other) { return this.empty ? other : other.empty ? this : composeSets(this, other); }
|
807 |
composeDesc(other) { return this.empty ? other : other.empty ? this : composeSets(this, other); }
|
| 787 |
/**
|
808 |
/**
|
| 788 |
Map this description, which should start with the same document
|
809 |
Map this description, which should start with the same document
|
| 789 |
as `other`, over another set of changes, so that it can be
|
810 |
as `other`, over another set of changes, so that it can be
|
| 790 |
applied after it. When `before` is true, map as if the changes
|
811 |
applied after it. When `before` is true, map as if the changes
|
| 791 |
in `other` happened before the ones in `this`.
|
812 |
in `this` happened before the ones in `other`.
|
| 792 |
*/
|
813 |
*/
|
| 793 |
mapDesc(other, before = false) { return other.empty ? this : mapSet(this, other, before); }
|
814 |
mapDesc(other, before = false) { return other.empty ? this : mapSet(this, other, before); }
|
| 794 |
mapPos(pos, assoc = -1, mode = MapMode.Simple) {
|
815 |
mapPos(pos, assoc = -1, mode = MapMode.Simple) {
|
| 795 |
let posA = 0, posB = 0;
|
816 |
let posA = 0, posB = 0;
|
| 796 |
for (let i = 0; i < this.sections.length;) {
|
817 |
for (let i = 0; i < this.sections.length;) {
|
| Línea 1089... |
Línea 1110... |
| 1089 |
if (len == 0 && ins <= 0)
|
1110 |
if (len == 0 && ins <= 0)
|
| 1090 |
return;
|
1111 |
return;
|
| 1091 |
let last = sections.length - 2;
|
1112 |
let last = sections.length - 2;
|
| 1092 |
if (last >= 0 && ins <= 0 && ins == sections[last + 1])
|
1113 |
if (last >= 0 && ins <= 0 && ins == sections[last + 1])
|
| 1093 |
sections[last] += len;
|
1114 |
sections[last] += len;
|
| 1094 |
else if (len == 0 && sections[last] == 0)
|
1115 |
else if (last >= 0 && len == 0 && sections[last] == 0)
|
| 1095 |
sections[last + 1] += ins;
|
1116 |
sections[last + 1] += ins;
|
| 1096 |
else if (forceJoin) {
|
1117 |
else if (forceJoin) {
|
| 1097 |
sections[last] += len;
|
1118 |
sections[last] += len;
|
| 1098 |
sections[last + 1] += ins;
|
1119 |
sections[last + 1] += ins;
|
| 1099 |
}
|
1120 |
}
|
| Línea 1147... |
Línea 1168... |
| 1147 |
// Iterate over both sets in parallel. inserted tracks, for changes
|
1168 |
// Iterate over both sets in parallel. inserted tracks, for changes
|
| 1148 |
// in A that have to be processed piece-by-piece, whether their
|
1169 |
// in A that have to be processed piece-by-piece, whether their
|
| 1149 |
// content has been inserted already, and refers to the section
|
1170 |
// content has been inserted already, and refers to the section
|
| 1150 |
// index.
|
1171 |
// index.
|
| 1151 |
for (let inserted = -1;;) {
|
1172 |
for (let inserted = -1;;) {
|
| - |
|
1173 |
if (a.done && b.len || b.done && a.len) {
|
| - |
|
1174 |
throw new Error("Mismatched change set lengths");
|
| - |
|
1175 |
}
|
| 1152 |
if (a.ins == -1 && b.ins == -1) {
|
1176 |
else if (a.ins == -1 && b.ins == -1) {
|
| 1153 |
// Move across ranges skipped by both sets.
|
1177 |
// Move across ranges skipped by both sets.
|
| 1154 |
let len = Math.min(a.len, b.len);
|
1178 |
let len = Math.min(a.len, b.len);
|
| 1155 |
addSection(sections, len, -1);
|
1179 |
addSection(sections, len, -1);
|
| 1156 |
a.forward(len);
|
1180 |
a.forward(len);
|
| 1157 |
b.forward(len);
|
1181 |
b.forward(len);
|
| Línea 1827... |
Línea 1851... |
| 1827 |
return 0;
|
1851 |
return 0;
|
| 1828 |
state.values[idx] = value;
|
1852 |
state.values[idx] = value;
|
| 1829 |
return 1 /* SlotStatus.Changed */;
|
1853 |
return 1 /* SlotStatus.Changed */;
|
| 1830 |
},
|
1854 |
},
|
| 1831 |
reconfigure: (state, oldState) => {
|
1855 |
reconfigure: (state, oldState) => {
|
| - |
|
1856 |
let init = state.facet(initField), oldInit = oldState.facet(initField), reInit;
|
| - |
|
1857 |
if ((reInit = init.find(i => i.field == this)) && reInit != oldInit.find(i => i.field == this)) {
|
| - |
|
1858 |
state.values[idx] = reInit.create(state);
|
| - |
|
1859 |
return 1 /* SlotStatus.Changed */;
|
| - |
|
1860 |
}
|
| 1832 |
if (oldState.config.address[this.id] != null) {
|
1861 |
if (oldState.config.address[this.id] != null) {
|
| 1833 |
state.values[idx] = oldState.field(this);
|
1862 |
state.values[idx] = oldState.field(this);
|
| 1834 |
return 0;
|
1863 |
return 0;
|
| 1835 |
}
|
1864 |
}
|
| 1836 |
state.values[idx] = this.create(state);
|
1865 |
state.values[idx] = this.create(state);
|
| Línea 3119... |
Línea 3148... |
| 3119 |
else
|
3148 |
else
|
| 3120 |
lo = mid + 1;
|
3149 |
lo = mid + 1;
|
| 3121 |
}
|
3150 |
}
|
| 3122 |
}
|
3151 |
}
|
| 3123 |
between(offset, from, to, f) {
|
3152 |
between(offset, from, to, f) {
|
| 3124 |
for (let i = this.findIndex(from, -1000000000 /* C.Far */, true), e = this.findIndex(to, 1000000000 /* C.Far */, false, i); i < e; i++)
|
3153 |
for (let i = this.findIndex(from, -1e9 /* C.Far */, true), e = this.findIndex(to, 1000000000 /* C.Far */, false, i); i < e; i++)
|
| 3125 |
if (f(this.from[i] + offset, this.to[i] + offset, this.value[i]) === false)
|
3154 |
if (f(this.from[i] + offset, this.to[i] + offset, this.value[i]) === false)
|
| 3126 |
return false;
|
3155 |
return false;
|
| 3127 |
}
|
3156 |
}
|
| 3128 |
map(offset, changes) {
|
3157 |
map(offset, changes) {
|
| 3129 |
let value = [], from = [], to = [], newPos = -1, maxPoint = -1;
|
3158 |
let value = [], from = [], to = [], newPos = -1, maxPoint = -1;
|
| Línea 3474... |
Línea 3503... |
| 3474 |
constructor() {
|
3503 |
constructor() {
|
| 3475 |
this.chunks = [];
|
3504 |
this.chunks = [];
|
| 3476 |
this.chunkPos = [];
|
3505 |
this.chunkPos = [];
|
| 3477 |
this.chunkStart = -1;
|
3506 |
this.chunkStart = -1;
|
| 3478 |
this.last = null;
|
3507 |
this.last = null;
|
| 3479 |
this.lastFrom = -1000000000 /* C.Far */;
|
3508 |
this.lastFrom = -1e9 /* C.Far */;
|
| 3480 |
this.lastTo = -1000000000 /* C.Far */;
|
3509 |
this.lastTo = -1e9 /* C.Far */;
|
| 3481 |
this.from = [];
|
3510 |
this.from = [];
|
| 3482 |
this.to = [];
|
3511 |
this.to = [];
|
| 3483 |
this.value = [];
|
3512 |
this.value = [];
|
| 3484 |
this.maxPoint = -1;
|
3513 |
this.maxPoint = -1;
|
| 3485 |
this.setMaxPoint = -1;
|
3514 |
this.setMaxPoint = -1;
|
| Línea 3574... |
Línea 3603... |
| 3574 |
this.minPoint = minPoint;
|
3603 |
this.minPoint = minPoint;
|
| 3575 |
this.rank = rank;
|
3604 |
this.rank = rank;
|
| 3576 |
}
|
3605 |
}
|
| 3577 |
get startSide() { return this.value ? this.value.startSide : 0; }
|
3606 |
get startSide() { return this.value ? this.value.startSide : 0; }
|
| 3578 |
get endSide() { return this.value ? this.value.endSide : 0; }
|
3607 |
get endSide() { return this.value ? this.value.endSide : 0; }
|
| 3579 |
goto(pos, side = -1000000000 /* C.Far */) {
|
3608 |
goto(pos, side = -1e9 /* C.Far */) {
|
| 3580 |
this.chunkIndex = this.rangeIndex = 0;
|
3609 |
this.chunkIndex = this.rangeIndex = 0;
|
| 3581 |
this.gotoInner(pos, side, false);
|
3610 |
this.gotoInner(pos, side, false);
|
| 3582 |
return this;
|
3611 |
return this;
|
| 3583 |
}
|
3612 |
}
|
| 3584 |
gotoInner(pos, side, forward) {
|
3613 |
gotoInner(pos, side, forward) {
|
| Línea 3657... |
Línea 3686... |
| 3657 |
}
|
3686 |
}
|
| 3658 |
}
|
3687 |
}
|
| 3659 |
return heap.length == 1 ? heap[0] : new HeapCursor(heap);
|
3688 |
return heap.length == 1 ? heap[0] : new HeapCursor(heap);
|
| 3660 |
}
|
3689 |
}
|
| 3661 |
get startSide() { return this.value ? this.value.startSide : 0; }
|
3690 |
get startSide() { return this.value ? this.value.startSide : 0; }
|
| 3662 |
goto(pos, side = -1000000000 /* C.Far */) {
|
3691 |
goto(pos, side = -1e9 /* C.Far */) {
|
| 3663 |
for (let cur of this.heap)
|
3692 |
for (let cur of this.heap)
|
| 3664 |
cur.goto(pos, side);
|
3693 |
cur.goto(pos, side);
|
| 3665 |
for (let i = this.heap.length >> 1; i >= 0; i--)
|
3694 |
for (let i = this.heap.length >> 1; i >= 0; i--)
|
| 3666 |
heapBubble(this.heap, i);
|
3695 |
heapBubble(this.heap, i);
|
| 3667 |
this.next();
|
3696 |
this.next();
|
| Línea 3719... |
Línea 3748... |
| 3719 |
this.minActive = -1;
|
3748 |
this.minActive = -1;
|
| 3720 |
// A currently active point range, if any
|
3749 |
// A currently active point range, if any
|
| 3721 |
this.point = null;
|
3750 |
this.point = null;
|
| 3722 |
this.pointFrom = 0;
|
3751 |
this.pointFrom = 0;
|
| 3723 |
this.pointRank = 0;
|
3752 |
this.pointRank = 0;
|
| 3724 |
this.to = -1000000000 /* C.Far */;
|
3753 |
this.to = -1e9 /* C.Far */;
|
| 3725 |
this.endSide = 0;
|
3754 |
this.endSide = 0;
|
| 3726 |
// The amount of open active ranges at the start of the iterator.
|
3755 |
// The amount of open active ranges at the start of the iterator.
|
| 3727 |
// Not including points.
|
3756 |
// Not including points.
|
| 3728 |
this.openStart = -1;
|
3757 |
this.openStart = -1;
|
| 3729 |
this.cursor = HeapCursor.from(sets, skip, minPoint);
|
3758 |
this.cursor = HeapCursor.from(sets, skip, minPoint);
|
| 3730 |
}
|
3759 |
}
|
| 3731 |
goto(pos, side = -1000000000 /* C.Far */) {
|
3760 |
goto(pos, side = -1e9 /* C.Far */) {
|
| 3732 |
this.cursor.goto(pos, side);
|
3761 |
this.cursor.goto(pos, side);
|
| 3733 |
this.active.length = this.activeTo.length = this.activeRank.length = 0;
|
3762 |
this.active.length = this.activeTo.length = this.activeRank.length = 0;
|
| 3734 |
this.minActive = -1;
|
3763 |
this.minActive = -1;
|
| 3735 |
this.to = pos;
|
3764 |
this.to = pos;
|
| 3736 |
this.endSide = side;
|
3765 |
this.endSide = side;
|
| Línea 3839... |
Línea 3868... |
| 3839 |
a.goto(startA);
|
3868 |
a.goto(startA);
|
| 3840 |
b.goto(startB);
|
3869 |
b.goto(startB);
|
| 3841 |
let endB = startB + length;
|
3870 |
let endB = startB + length;
|
| 3842 |
let pos = startB, dPos = startB - startA;
|
3871 |
let pos = startB, dPos = startB - startA;
|
| 3843 |
for (;;) {
|
3872 |
for (;;) {
|
| 3844 |
let diff = (a.to + dPos) - b.to || a.endSide - b.endSide;
|
3873 |
let dEnd = (a.to + dPos) - b.to, diff = dEnd || a.endSide - b.endSide;
|
| 3845 |
let end = diff < 0 ? a.to + dPos : b.to, clipEnd = Math.min(end, endB);
|
3874 |
let end = diff < 0 ? a.to + dPos : b.to, clipEnd = Math.min(end, endB);
|
| 3846 |
if (a.point || b.point) {
|
3875 |
if (a.point || b.point) {
|
| 3847 |
if (!(a.point && b.point && (a.point == b.point || a.point.eq(b.point)) &&
|
3876 |
if (!(a.point && b.point && (a.point == b.point || a.point.eq(b.point)) &&
|
| 3848 |
sameValues(a.activeForPoint(a.to), b.activeForPoint(b.to))))
|
3877 |
sameValues(a.activeForPoint(a.to), b.activeForPoint(b.to))))
|
| 3849 |
comparator.comparePoint(pos, clipEnd, a.point, b.point);
|
3878 |
comparator.comparePoint(pos, clipEnd, a.point, b.point);
|
| Línea 3852... |
Línea 3881... |
| 3852 |
if (clipEnd > pos && !sameValues(a.active, b.active))
|
3881 |
if (clipEnd > pos && !sameValues(a.active, b.active))
|
| 3853 |
comparator.compareRange(pos, clipEnd, a.active, b.active);
|
3882 |
comparator.compareRange(pos, clipEnd, a.active, b.active);
|
| 3854 |
}
|
3883 |
}
|
| 3855 |
if (end > endB)
|
3884 |
if (end > endB)
|
| 3856 |
break;
|
3885 |
break;
|
| - |
|
3886 |
if ((dEnd || a.openEnd != b.openEnd) && comparator.boundChange)
|
| - |
|
3887 |
comparator.boundChange(end);
|
| 3857 |
pos = end;
|
3888 |
pos = end;
|
| 3858 |
if (diff <= 0)
|
3889 |
if (diff <= 0)
|
| 3859 |
a.next();
|
3890 |
a.next();
|
| 3860 |
if (diff >= 0)
|
3891 |
if (diff >= 0)
|
| 3861 |
b.next();
|
3892 |
b.next();
|
| Línea 3893... |
Línea 3924... |
| 3893 |
Count the column position at the given offset into the string,
|
3924 |
Count the column position at the given offset into the string,
|
| 3894 |
taking extending characters and tab size into account.
|
3925 |
taking extending characters and tab size into account.
|
| 3895 |
*/
|
3926 |
*/
|
| 3896 |
function countColumn(string, tabSize, to = string.length) {
|
3927 |
function countColumn(string, tabSize, to = string.length) {
|
| 3897 |
let n = 0;
|
3928 |
let n = 0;
|
| 3898 |
for (let i = 0; i < to;) {
|
3929 |
for (let i = 0; i < to && i < string.length;) {
|
| 3899 |
if (string.charCodeAt(i) == 9) {
|
3930 |
if (string.charCodeAt(i) == 9) {
|
| 3900 |
n += tabSize - (n % tabSize);
|
3931 |
n += tabSize - (n % tabSize);
|
| 3901 |
i++;
|
3932 |
i++;
|
| 3902 |
}
|
3933 |
}
|
| 3903 |
else {
|
3934 |
else {
|
| Línea 4233... |
Línea 4264... |
| 4233 |
return target.getSelection();
|
4264 |
return target.getSelection();
|
| 4234 |
}
|
4265 |
}
|
| 4235 |
function contains(dom, node) {
|
4266 |
function contains(dom, node) {
|
| 4236 |
return node ? dom == node || dom.contains(node.nodeType != 1 ? node.parentNode : node) : false;
|
4267 |
return node ? dom == node || dom.contains(node.nodeType != 1 ? node.parentNode : node) : false;
|
| 4237 |
}
|
4268 |
}
|
| 4238 |
function deepActiveElement(doc) {
|
- |
|
| 4239 |
let elt = doc.activeElement;
|
- |
|
| 4240 |
while (elt && elt.shadowRoot)
|
- |
|
| 4241 |
elt = elt.shadowRoot.activeElement;
|
- |
|
| 4242 |
return elt;
|
- |
|
| 4243 |
}
|
- |
|
| 4244 |
function hasSelection(dom, selection) {
|
4269 |
function hasSelection(dom, selection) {
|
| 4245 |
if (!selection.anchorNode)
|
4270 |
if (!selection.anchorNode)
|
| 4246 |
return false;
|
4271 |
return false;
|
| 4247 |
try {
|
4272 |
try {
|
| 4248 |
// Firefox will raise 'permission denied' errors when accessing
|
4273 |
// Firefox will raise 'permission denied' errors when accessing
|
| Línea 4352... |
Línea 4377... |
| 4352 |
top: rect.top, bottom: rect.top + cur.clientHeight * scaleY };
|
4377 |
top: rect.top, bottom: rect.top + cur.clientHeight * scaleY };
|
| 4353 |
}
|
4378 |
}
|
| 4354 |
let moveX = 0, moveY = 0;
|
4379 |
let moveX = 0, moveY = 0;
|
| 4355 |
if (y == "nearest") {
|
4380 |
if (y == "nearest") {
|
| 4356 |
if (rect.top < bounding.top) {
|
4381 |
if (rect.top < bounding.top) {
|
| 4357 |
moveY = -(bounding.top - rect.top + yMargin);
|
4382 |
moveY = rect.top - (bounding.top + yMargin);
|
| 4358 |
if (side > 0 && rect.bottom > bounding.bottom + moveY)
|
4383 |
if (side > 0 && rect.bottom > bounding.bottom + moveY)
|
| 4359 |
moveY = rect.bottom - bounding.bottom + moveY + yMargin;
|
4384 |
moveY = rect.bottom - bounding.bottom + yMargin;
|
| 4360 |
}
|
4385 |
}
|
| 4361 |
else if (rect.bottom > bounding.bottom) {
|
4386 |
else if (rect.bottom > bounding.bottom) {
|
| 4362 |
moveY = rect.bottom - bounding.bottom + yMargin;
|
4387 |
moveY = rect.bottom - bounding.bottom + yMargin;
|
| 4363 |
if (side < 0 && (rect.top - moveY) < bounding.top)
|
4388 |
if (side < 0 && (rect.top - moveY) < bounding.top)
|
| 4364 |
moveY = -(bounding.top + moveY - rect.top + yMargin);
|
4389 |
moveY = rect.top - (bounding.top + yMargin);
|
| 4365 |
}
|
4390 |
}
|
| 4366 |
}
|
4391 |
}
|
| 4367 |
else {
|
4392 |
else {
|
| 4368 |
let rectHeight = rect.bottom - rect.top, boundingHeight = bounding.bottom - bounding.top;
|
4393 |
let rectHeight = rect.bottom - rect.top, boundingHeight = bounding.bottom - bounding.top;
|
| 4369 |
let targetTop = y == "center" && rectHeight <= boundingHeight ? rect.top + rectHeight / 2 - boundingHeight / 2 :
|
4394 |
let targetTop = y == "center" && rectHeight <= boundingHeight ? rect.top + rectHeight / 2 - boundingHeight / 2 :
|
| Línea 4371... |
Línea 4396... |
| 4371 |
rect.bottom - boundingHeight + yMargin;
|
4396 |
rect.bottom - boundingHeight + yMargin;
|
| 4372 |
moveY = targetTop - bounding.top;
|
4397 |
moveY = targetTop - bounding.top;
|
| 4373 |
}
|
4398 |
}
|
| 4374 |
if (x == "nearest") {
|
4399 |
if (x == "nearest") {
|
| 4375 |
if (rect.left < bounding.left) {
|
4400 |
if (rect.left < bounding.left) {
|
| 4376 |
moveX = -(bounding.left - rect.left + xMargin);
|
4401 |
moveX = rect.left - (bounding.left + xMargin);
|
| 4377 |
if (side > 0 && rect.right > bounding.right + moveX)
|
4402 |
if (side > 0 && rect.right > bounding.right + moveX)
|
| 4378 |
moveX = rect.right - bounding.right + moveX + xMargin;
|
4403 |
moveX = rect.right - bounding.right + xMargin;
|
| 4379 |
}
|
4404 |
}
|
| 4380 |
else if (rect.right > bounding.right) {
|
4405 |
else if (rect.right > bounding.right) {
|
| 4381 |
moveX = rect.right - bounding.right + xMargin;
|
4406 |
moveX = rect.right - bounding.right + xMargin;
|
| 4382 |
if (side < 0 && rect.left < bounding.left + moveX)
|
4407 |
if (side < 0 && rect.left < bounding.left + moveX)
|
| 4383 |
moveX = -(bounding.left + moveX - rect.left + xMargin);
|
4408 |
moveX = rect.left - (bounding.left + xMargin);
|
| 4384 |
}
|
4409 |
}
|
| 4385 |
}
|
4410 |
}
|
| 4386 |
else {
|
4411 |
else {
|
| 4387 |
let targetLeft = x == "center" ? rect.left + (rect.right - rect.left) / 2 - (bounding.right - bounding.left) / 2 :
|
4412 |
let targetLeft = x == "center" ? rect.left + (rect.right - rect.left) / 2 - (bounding.right - bounding.left) / 2 :
|
| 4388 |
(x == "start") == ltr ? rect.left - xMargin :
|
4413 |
(x == "start") == ltr ? rect.left - xMargin :
|
| Línea 4413... |
Línea 4438... |
| 4413 |
y = "nearest";
|
4438 |
y = "nearest";
|
| 4414 |
}
|
4439 |
}
|
| 4415 |
}
|
4440 |
}
|
| 4416 |
if (top)
|
4441 |
if (top)
|
| 4417 |
break;
|
4442 |
break;
|
| - |
|
4443 |
if (rect.top < bounding.top || rect.bottom > bounding.bottom ||
|
| - |
|
4444 |
rect.left < bounding.left || rect.right > bounding.right)
|
| - |
|
4445 |
rect = { left: Math.max(rect.left, bounding.left), right: Math.min(rect.right, bounding.right),
|
| - |
|
4446 |
top: Math.max(rect.top, bounding.top), bottom: Math.min(rect.bottom, bounding.bottom) };
|
| 4418 |
cur = cur.assignedSlot || cur.parentNode;
|
4447 |
cur = cur.assignedSlot || cur.parentNode;
|
| 4419 |
}
|
4448 |
}
|
| 4420 |
else if (cur.nodeType == 11) { // A shadow root
|
4449 |
else if (cur.nodeType == 11) { // A shadow root
|
| 4421 |
cur = cur.host;
|
4450 |
cur = cur.host;
|
| 4422 |
}
|
4451 |
}
|
| 4423 |
else {
|
4452 |
else {
|
| 4424 |
break;
|
4453 |
break;
|
| 4425 |
}
|
4454 |
}
|
| 4426 |
}
|
4455 |
}
|
| 4427 |
}
|
4456 |
}
|
| 4428 |
function scrollableParent(dom) {
|
4457 |
function scrollableParents(dom) {
|
| 4429 |
let doc = dom.ownerDocument;
|
4458 |
let doc = dom.ownerDocument, x, y;
|
| 4430 |
for (let cur = dom.parentNode; cur;) {
|
4459 |
for (let cur = dom.parentNode; cur;) {
|
| 4431 |
if (cur == doc.body) {
|
4460 |
if (cur == doc.body || (x && y)) {
|
| 4432 |
break;
|
4461 |
break;
|
| 4433 |
}
|
4462 |
}
|
| 4434 |
else if (cur.nodeType == 1) {
|
4463 |
else if (cur.nodeType == 1) {
|
| - |
|
4464 |
if (!y && cur.scrollHeight > cur.clientHeight)
|
| - |
|
4465 |
y = cur;
|
| 4435 |
if (cur.scrollHeight > cur.clientHeight || cur.scrollWidth > cur.clientWidth)
|
4466 |
if (!x && cur.scrollWidth > cur.clientWidth)
|
| 4436 |
return cur;
|
4467 |
x = cur;
|
| 4437 |
cur = cur.assignedSlot || cur.parentNode;
|
4468 |
cur = cur.assignedSlot || cur.parentNode;
|
| 4438 |
}
|
4469 |
}
|
| 4439 |
else if (cur.nodeType == 11) {
|
4470 |
else if (cur.nodeType == 11) {
|
| 4440 |
cur = cur.host;
|
4471 |
cur = cur.host;
|
| 4441 |
}
|
4472 |
}
|
| 4442 |
else {
|
4473 |
else {
|
| 4443 |
break;
|
4474 |
break;
|
| 4444 |
}
|
4475 |
}
|
| 4445 |
}
|
4476 |
}
|
| 4446 |
return null;
|
4477 |
return { x, y };
|
| 4447 |
}
|
4478 |
}
|
| 4448 |
class DOMSelectionState {
|
4479 |
class DOMSelectionState {
|
| 4449 |
constructor() {
|
4480 |
constructor() {
|
| 4450 |
this.anchorNode = null;
|
4481 |
this.anchorNode = null;
|
| 4451 |
this.anchorOffset = 0;
|
4482 |
this.anchorOffset = 0;
|
| Línea 4646... |
Línea 4677... |
| 4646 |
let contentView = ContentView.get(next);
|
4677 |
let contentView = ContentView.get(next);
|
| 4647 |
if (!contentView || !contentView.parent && contentView.canReuseDOM(child))
|
4678 |
if (!contentView || !contentView.parent && contentView.canReuseDOM(child))
|
| 4648 |
child.reuseDOM(next);
|
4679 |
child.reuseDOM(next);
|
| 4649 |
}
|
4680 |
}
|
| 4650 |
child.sync(view, track);
|
4681 |
child.sync(view, track);
|
| 4651 |
child.flags &= ~7 /* ViewFlag.Dirty */;
|
4682 |
child.flags &= -8 /* ViewFlag.Dirty */;
|
| 4652 |
}
|
4683 |
}
|
| 4653 |
next = prev ? prev.nextSibling : parent.firstChild;
|
4684 |
next = prev ? prev.nextSibling : parent.firstChild;
|
| 4654 |
if (track && !track.written && track.node == parent && next != child.dom)
|
4685 |
if (track && !track.written && track.node == parent && next != child.dom)
|
| 4655 |
track.written = true;
|
4686 |
track.written = true;
|
| 4656 |
if (child.dom.parentNode == parent) {
|
4687 |
if (child.dom.parentNode == parent) {
|
| Línea 4670... |
Línea 4701... |
| 4670 |
}
|
4701 |
}
|
| 4671 |
else if (this.flags & 1 /* ViewFlag.ChildDirty */) {
|
4702 |
else if (this.flags & 1 /* ViewFlag.ChildDirty */) {
|
| 4672 |
for (let child of this.children)
|
4703 |
for (let child of this.children)
|
| 4673 |
if (child.flags & 7 /* ViewFlag.Dirty */) {
|
4704 |
if (child.flags & 7 /* ViewFlag.Dirty */) {
|
| 4674 |
child.sync(view, track);
|
4705 |
child.sync(view, track);
|
| 4675 |
child.flags &= ~7 /* ViewFlag.Dirty */;
|
4706 |
child.flags &= -8 /* ViewFlag.Dirty */;
|
| 4676 |
}
|
4707 |
}
|
| 4677 |
}
|
4708 |
}
|
| 4678 |
}
|
4709 |
}
|
| 4679 |
reuseDOM(_dom) { }
|
4710 |
reuseDOM(_dom) { }
|
| 4680 |
localPosFromDOM(node, offset) {
|
4711 |
localPosFromDOM(node, offset) {
|
| Línea 4778... |
Línea 4809... |
| 4778 |
for (let i = from; i < to; i++) {
|
4809 |
for (let i = from; i < to; i++) {
|
| 4779 |
let child = this.children[i];
|
4810 |
let child = this.children[i];
|
| 4780 |
if (child.parent == this && children.indexOf(child) < 0)
|
4811 |
if (child.parent == this && children.indexOf(child) < 0)
|
| 4781 |
child.destroy();
|
4812 |
child.destroy();
|
| 4782 |
}
|
4813 |
}
|
| - |
|
4814 |
if (children.length < 250)
|
| 4783 |
this.children.splice(from, to - from, ...children);
|
4815 |
this.children.splice(from, to - from, ...children);
|
| - |
|
4816 |
else
|
| - |
|
4817 |
this.children = [].concat(this.children.slice(0, from), children, this.children.slice(to));
|
| 4784 |
for (let i = 0; i < children.length; i++)
|
4818 |
for (let i = 0; i < children.length; i++)
|
| 4785 |
children[i].setParent(this);
|
4819 |
children[i].setParent(this);
|
| 4786 |
}
|
4820 |
}
|
| 4787 |
ignoreMutation(_rec) { return false; }
|
4821 |
ignoreMutation(_rec) { return false; }
|
| 4788 |
ignoreEvent(_event) { return false; }
|
4822 |
ignoreEvent(_event) { return false; }
|
| Línea 4958... |
Línea 4992... |
| 4958 |
chrome_version: chrome ? +chrome[1] : 0,
|
4992 |
chrome_version: chrome ? +chrome[1] : 0,
|
| 4959 |
ios,
|
4993 |
ios,
|
| 4960 |
android: /*@__PURE__*//Android\b/.test(nav.userAgent),
|
4994 |
android: /*@__PURE__*//Android\b/.test(nav.userAgent),
|
| 4961 |
webkit,
|
4995 |
webkit,
|
| 4962 |
safari,
|
4996 |
safari,
|
| 4963 |
webkit_version: webkit ? +(/*@__PURE__*//\bAppleWebKit\/(\d+)/.exec(navigator.userAgent) || [0, 0])[1] : 0,
|
4997 |
webkit_version: webkit ? +(/*@__PURE__*//\bAppleWebKit\/(\d+)/.exec(nav.userAgent) || [0, 0])[1] : 0,
|
| 4964 |
tabSize: doc.documentElement.style.tabSize != null ? "tab-size" : "-moz-tab-size"
|
4998 |
tabSize: doc.documentElement.style.tabSize != null ? "tab-size" : "-moz-tab-size"
|
| 4965 |
};
|
4999 |
};
|
| Línea 4966... |
Línea 5000... |
| 4966 |
|
5000 |
|
| 4967 |
const MaxJoinLen = 256;
|
5001 |
const MaxJoinLen = 256;
|
| Línea 5320... |
Línea 5354... |
| 5320 |
else
|
5354 |
else
|
| 5321 |
target[name] = source[name];
|
5355 |
target[name] = source[name];
|
| 5322 |
}
|
5356 |
}
|
| 5323 |
return target;
|
5357 |
return target;
|
| 5324 |
}
|
5358 |
}
|
| 5325 |
const noAttrs = /*@__PURE__*/Object.create(null);
|
5359 |
const noAttrs$1 = /*@__PURE__*/Object.create(null);
|
| 5326 |
function attrsEq(a, b, ignore) {
|
5360 |
function attrsEq(a, b, ignore) {
|
| 5327 |
if (a == b)
|
5361 |
if (a == b)
|
| 5328 |
return true;
|
5362 |
return true;
|
| 5329 |
if (!a)
|
5363 |
if (!a)
|
| 5330 |
a = noAttrs;
|
5364 |
a = noAttrs$1;
|
| 5331 |
if (!b)
|
5365 |
if (!b)
|
| 5332 |
b = noAttrs;
|
5366 |
b = noAttrs$1;
|
| 5333 |
let keysA = Object.keys(a), keysB = Object.keys(b);
|
5367 |
let keysA = Object.keys(a), keysB = Object.keys(b);
|
| 5334 |
if (keysA.length - (ignore && keysA.indexOf(ignore) > -1 ? 1 : 0) !=
|
5368 |
if (keysA.length - (ignore && keysA.indexOf(ignore) > -1 ? 1 : 0) !=
|
| 5335 |
keysB.length - (ignore && keysB.indexOf(ignore) > -1 ? 1 : 0))
|
5369 |
keysB.length - (ignore && keysB.indexOf(ignore) > -1 ? 1 : 0))
|
| 5336 |
return false;
|
5370 |
return false;
|
| 5337 |
for (let key of keysA) {
|
5371 |
for (let key of keysA) {
|
| Línea 5369... |
Línea 5403... |
| 5369 |
attrs[attr.name] = attr.value;
|
5403 |
attrs[attr.name] = attr.value;
|
| 5370 |
}
|
5404 |
}
|
| 5371 |
return attrs;
|
5405 |
return attrs;
|
| 5372 |
}
|
5406 |
}
|
| Línea 5373... |
Línea -... |
| 5373 |
|
- |
|
| 5374 |
class LineView extends ContentView {
|
- |
|
| 5375 |
constructor() {
|
- |
|
| 5376 |
super(...arguments);
|
- |
|
| 5377 |
this.children = [];
|
- |
|
| 5378 |
this.length = 0;
|
- |
|
| 5379 |
this.prevAttrs = undefined;
|
- |
|
| 5380 |
this.attrs = null;
|
- |
|
| 5381 |
this.breakAfter = 0;
|
- |
|
| 5382 |
}
|
- |
|
| 5383 |
// Consumes source
|
- |
|
| 5384 |
merge(from, to, source, hasStart, openStart, openEnd) {
|
- |
|
| 5385 |
if (source) {
|
- |
|
| 5386 |
if (!(source instanceof LineView))
|
- |
|
| 5387 |
return false;
|
- |
|
| 5388 |
if (!this.dom)
|
- |
|
| 5389 |
source.transferDOM(this); // Reuse source.dom when appropriate
|
- |
|
| 5390 |
}
|
- |
|
| 5391 |
if (hasStart)
|
- |
|
| 5392 |
this.setDeco(source ? source.attrs : null);
|
- |
|
| 5393 |
mergeChildrenInto(this, from, to, source ? source.children.slice() : [], openStart, openEnd);
|
- |
|
| 5394 |
return true;
|
- |
|
| 5395 |
}
|
- |
|
| 5396 |
split(at) {
|
- |
|
| 5397 |
let end = new LineView;
|
- |
|
| 5398 |
end.breakAfter = this.breakAfter;
|
- |
|
| 5399 |
if (this.length == 0)
|
- |
|
| 5400 |
return end;
|
- |
|
| 5401 |
let { i, off } = this.childPos(at);
|
- |
|
| 5402 |
if (off) {
|
- |
|
| 5403 |
end.append(this.children[i].split(off), 0);
|
- |
|
| 5404 |
this.children[i].merge(off, this.children[i].length, null, false, 0, 0);
|
- |
|
| 5405 |
i++;
|
- |
|
| 5406 |
}
|
- |
|
| 5407 |
for (let j = i; j < this.children.length; j++)
|
- |
|
| 5408 |
end.append(this.children[j], 0);
|
- |
|
| 5409 |
while (i > 0 && this.children[i - 1].length == 0)
|
- |
|
| 5410 |
this.children[--i].destroy();
|
- |
|
| 5411 |
this.children.length = i;
|
- |
|
| 5412 |
this.markDirty();
|
- |
|
| 5413 |
this.length = at;
|
- |
|
| 5414 |
return end;
|
- |
|
| 5415 |
}
|
- |
|
| 5416 |
transferDOM(other) {
|
- |
|
| 5417 |
if (!this.dom)
|
- |
|
| 5418 |
return;
|
- |
|
| 5419 |
this.markDirty();
|
- |
|
| 5420 |
other.setDOM(this.dom);
|
- |
|
| 5421 |
other.prevAttrs = this.prevAttrs === undefined ? this.attrs : this.prevAttrs;
|
- |
|
| 5422 |
this.prevAttrs = undefined;
|
- |
|
| 5423 |
this.dom = null;
|
- |
|
| 5424 |
}
|
- |
|
| 5425 |
setDeco(attrs) {
|
- |
|
| 5426 |
if (!attrsEq(this.attrs, attrs)) {
|
- |
|
| 5427 |
if (this.dom) {
|
- |
|
| 5428 |
this.prevAttrs = this.attrs;
|
- |
|
| 5429 |
this.markDirty();
|
- |
|
| 5430 |
}
|
- |
|
| 5431 |
this.attrs = attrs;
|
- |
|
| 5432 |
}
|
- |
|
| 5433 |
}
|
- |
|
| 5434 |
append(child, openStart) {
|
- |
|
| 5435 |
joinInlineInto(this, child, openStart);
|
- |
|
| 5436 |
}
|
- |
|
| 5437 |
// Only called when building a line view in ContentBuilder
|
- |
|
| 5438 |
addLineDeco(deco) {
|
- |
|
| 5439 |
let attrs = deco.spec.attributes, cls = deco.spec.class;
|
- |
|
| 5440 |
if (attrs)
|
- |
|
| 5441 |
this.attrs = combineAttrs(attrs, this.attrs || {});
|
- |
|
| 5442 |
if (cls)
|
- |
|
| 5443 |
this.attrs = combineAttrs({ class: cls }, this.attrs || {});
|
- |
|
| 5444 |
}
|
- |
|
| 5445 |
domAtPos(pos) {
|
- |
|
| 5446 |
return inlineDOMAtPos(this, pos);
|
- |
|
| 5447 |
}
|
- |
|
| 5448 |
reuseDOM(node) {
|
- |
|
| 5449 |
if (node.nodeName == "DIV") {
|
- |
|
| 5450 |
this.setDOM(node);
|
- |
|
| 5451 |
this.flags |= 4 /* ViewFlag.AttrsDirty */ | 2 /* ViewFlag.NodeDirty */;
|
- |
|
| 5452 |
}
|
- |
|
| 5453 |
}
|
- |
|
| 5454 |
sync(view, track) {
|
- |
|
| 5455 |
var _a;
|
- |
|
| 5456 |
if (!this.dom) {
|
- |
|
| 5457 |
this.setDOM(document.createElement("div"));
|
- |
|
| 5458 |
this.dom.className = "cm-line";
|
- |
|
| 5459 |
this.prevAttrs = this.attrs ? null : undefined;
|
- |
|
| 5460 |
}
|
- |
|
| 5461 |
else if (this.flags & 4 /* ViewFlag.AttrsDirty */) {
|
- |
|
| 5462 |
clearAttributes(this.dom);
|
- |
|
| 5463 |
this.dom.className = "cm-line";
|
- |
|
| 5464 |
this.prevAttrs = this.attrs ? null : undefined;
|
- |
|
| 5465 |
}
|
- |
|
| 5466 |
if (this.prevAttrs !== undefined) {
|
- |
|
| 5467 |
updateAttrs(this.dom, this.prevAttrs, this.attrs);
|
- |
|
| 5468 |
this.dom.classList.add("cm-line");
|
- |
|
| 5469 |
this.prevAttrs = undefined;
|
- |
|
| 5470 |
}
|
- |
|
| 5471 |
super.sync(view, track);
|
- |
|
| 5472 |
let last = this.dom.lastChild;
|
- |
|
| 5473 |
while (last && ContentView.get(last) instanceof MarkView)
|
- |
|
| 5474 |
last = last.lastChild;
|
- |
|
| 5475 |
if (!last || !this.length ||
|
- |
|
| 5476 |
last.nodeName != "BR" && ((_a = ContentView.get(last)) === null || _a === void 0 ? void 0 : _a.isEditable) == false &&
|
- |
|
| 5477 |
(!browser.ios || !this.children.some(ch => ch instanceof TextView))) {
|
- |
|
| 5478 |
let hack = document.createElement("BR");
|
- |
|
| 5479 |
hack.cmIgnore = true;
|
- |
|
| 5480 |
this.dom.appendChild(hack);
|
- |
|
| 5481 |
}
|
- |
|
| 5482 |
}
|
- |
|
| 5483 |
measureTextSize() {
|
- |
|
| 5484 |
if (this.children.length == 0 || this.length > 20)
|
- |
|
| 5485 |
return null;
|
- |
|
| 5486 |
let totalWidth = 0, textHeight;
|
- |
|
| 5487 |
for (let child of this.children) {
|
- |
|
| 5488 |
if (!(child instanceof TextView) || /[^ -~]/.test(child.text))
|
- |
|
| 5489 |
return null;
|
- |
|
| 5490 |
let rects = clientRectsFor(child.dom);
|
- |
|
| 5491 |
if (rects.length != 1)
|
- |
|
| 5492 |
return null;
|
- |
|
| 5493 |
totalWidth += rects[0].width;
|
- |
|
| 5494 |
textHeight = rects[0].height;
|
- |
|
| 5495 |
}
|
- |
|
| 5496 |
return !totalWidth ? null : {
|
- |
|
| 5497 |
lineHeight: this.dom.getBoundingClientRect().height,
|
- |
|
| 5498 |
charWidth: totalWidth / this.length,
|
- |
|
| 5499 |
textHeight
|
- |
|
| 5500 |
};
|
- |
|
| 5501 |
}
|
- |
|
| 5502 |
coordsAt(pos, side) {
|
- |
|
| 5503 |
let rect = coordsInChildren(this, pos, side);
|
- |
|
| 5504 |
// Correct rectangle height for empty lines when the returned
|
- |
|
| 5505 |
// height is larger than the text height.
|
- |
|
| 5506 |
if (!this.children.length && rect && this.parent) {
|
- |
|
| 5507 |
let { heightOracle } = this.parent.view.viewState, height = rect.bottom - rect.top;
|
- |
|
| 5508 |
if (Math.abs(height - heightOracle.lineHeight) < 2 && heightOracle.textHeight < height) {
|
- |
|
| 5509 |
let dist = (height - heightOracle.textHeight) / 2;
|
- |
|
| 5510 |
return { top: rect.top + dist, bottom: rect.bottom - dist, left: rect.left, right: rect.left };
|
- |
|
| 5511 |
}
|
- |
|
| 5512 |
}
|
- |
|
| 5513 |
return rect;
|
- |
|
| 5514 |
}
|
- |
|
| 5515 |
become(_other) { return false; }
|
- |
|
| 5516 |
covers() { return true; }
|
- |
|
| 5517 |
static find(docView, pos) {
|
- |
|
| 5518 |
for (let i = 0, off = 0; i < docView.children.length; i++) {
|
- |
|
| 5519 |
let block = docView.children[i], end = off + block.length;
|
- |
|
| 5520 |
if (end >= pos) {
|
- |
|
| 5521 |
if (block instanceof LineView)
|
- |
|
| 5522 |
return block;
|
- |
|
| 5523 |
if (end > pos)
|
- |
|
| 5524 |
break;
|
- |
|
| 5525 |
}
|
- |
|
| 5526 |
off = end + block.breakAfter;
|
- |
|
| 5527 |
}
|
- |
|
| 5528 |
return null;
|
- |
|
| 5529 |
}
|
- |
|
| 5530 |
}
|
- |
|
| 5531 |
class BlockWidgetView extends ContentView {
|
- |
|
| 5532 |
constructor(widget, length, deco) {
|
- |
|
| 5533 |
super();
|
- |
|
| 5534 |
this.widget = widget;
|
- |
|
| 5535 |
this.length = length;
|
- |
|
| 5536 |
this.deco = deco;
|
- |
|
| 5537 |
this.breakAfter = 0;
|
- |
|
| 5538 |
this.prevWidget = null;
|
- |
|
| 5539 |
}
|
- |
|
| 5540 |
merge(from, to, source, _takeDeco, openStart, openEnd) {
|
- |
|
| 5541 |
if (source && (!(source instanceof BlockWidgetView) || !this.widget.compare(source.widget) ||
|
- |
|
| 5542 |
from > 0 && openStart <= 0 || to < this.length && openEnd <= 0))
|
- |
|
| 5543 |
return false;
|
- |
|
| 5544 |
this.length = from + (source ? source.length : 0) + (this.length - to);
|
- |
|
| 5545 |
return true;
|
- |
|
| 5546 |
}
|
- |
|
| 5547 |
domAtPos(pos) {
|
- |
|
| 5548 |
return pos == 0 ? DOMPos.before(this.dom) : DOMPos.after(this.dom, pos == this.length);
|
- |
|
| 5549 |
}
|
- |
|
| 5550 |
split(at) {
|
- |
|
| 5551 |
let len = this.length - at;
|
- |
|
| 5552 |
this.length = at;
|
- |
|
| 5553 |
let end = new BlockWidgetView(this.widget, len, this.deco);
|
- |
|
| 5554 |
end.breakAfter = this.breakAfter;
|
- |
|
| 5555 |
return end;
|
- |
|
| 5556 |
}
|
- |
|
| 5557 |
get children() { return noChildren; }
|
- |
|
| 5558 |
sync(view) {
|
- |
|
| 5559 |
if (!this.dom || !this.widget.updateDOM(this.dom, view)) {
|
- |
|
| 5560 |
if (this.dom && this.prevWidget)
|
- |
|
| 5561 |
this.prevWidget.destroy(this.dom);
|
- |
|
| 5562 |
this.prevWidget = null;
|
- |
|
| 5563 |
this.setDOM(this.widget.toDOM(view));
|
- |
|
| 5564 |
if (!this.widget.editable)
|
- |
|
| 5565 |
this.dom.contentEditable = "false";
|
- |
|
| 5566 |
}
|
- |
|
| 5567 |
}
|
- |
|
| 5568 |
get overrideDOMText() {
|
- |
|
| 5569 |
return this.parent ? this.parent.view.state.doc.slice(this.posAtStart, this.posAtEnd) : Text.empty;
|
- |
|
| 5570 |
}
|
- |
|
| 5571 |
domBoundsAround() { return null; }
|
- |
|
| 5572 |
become(other) {
|
- |
|
| 5573 |
if (other instanceof BlockWidgetView &&
|
- |
|
| 5574 |
other.widget.constructor == this.widget.constructor) {
|
- |
|
| 5575 |
if (!other.widget.compare(this.widget))
|
- |
|
| 5576 |
this.markDirty(true);
|
- |
|
| 5577 |
if (this.dom && !this.prevWidget)
|
- |
|
| 5578 |
this.prevWidget = this.widget;
|
- |
|
| 5579 |
this.widget = other.widget;
|
- |
|
| 5580 |
this.length = other.length;
|
- |
|
| 5581 |
this.deco = other.deco;
|
- |
|
| 5582 |
this.breakAfter = other.breakAfter;
|
- |
|
| 5583 |
return true;
|
- |
|
| 5584 |
}
|
- |
|
| 5585 |
return false;
|
- |
|
| 5586 |
}
|
- |
|
| 5587 |
ignoreMutation() { return true; }
|
- |
|
| 5588 |
ignoreEvent(event) { return this.widget.ignoreEvent(event); }
|
- |
|
| 5589 |
get isEditable() { return false; }
|
- |
|
| 5590 |
get isWidget() { return true; }
|
- |
|
| 5591 |
coordsAt(pos, side) {
|
- |
|
| 5592 |
return this.widget.coordsAt(this.dom, pos, side);
|
- |
|
| 5593 |
}
|
- |
|
| 5594 |
destroy() {
|
- |
|
| 5595 |
super.destroy();
|
- |
|
| 5596 |
if (this.dom)
|
- |
|
| 5597 |
this.widget.destroy(this.dom);
|
- |
|
| 5598 |
}
|
- |
|
| 5599 |
covers(side) {
|
- |
|
| 5600 |
let { startSide, endSide } = this.deco;
|
- |
|
| 5601 |
return startSide == endSide ? false : side < 0 ? startSide < 0 : endSide > 0;
|
- |
|
| 5602 |
}
|
- |
|
| 5603 |
}
|
- |
|
| 5604 |
|
5407 |
|
| 5605 |
/**
|
5408 |
/**
|
| 5606 |
Widgets added to the content are described by subclasses of this
|
5409 |
Widgets added to the content are described by subclasses of this
|
| 5607 |
class. Using a description object like that makes it possible to
|
5410 |
class. Using a description object like that makes it possible to
|
| 5608 |
delay creating of the DOM structure for a widget until it is
|
5411 |
delay creating of the DOM structure for a widget until it is
|
| Línea 5748... |
Línea 5551... |
| 5748 |
/**
|
5551 |
/**
|
| 5749 |
Create a widget decoration, which displays a DOM element at the
|
5552 |
Create a widget decoration, which displays a DOM element at the
|
| 5750 |
given position.
|
5553 |
given position.
|
| 5751 |
*/
|
5554 |
*/
|
| 5752 |
static widget(spec) {
|
5555 |
static widget(spec) {
|
| 5753 |
let side = Math.max(-10000, Math.min(10000, spec.side || 0)), block = !!spec.block;
|
5556 |
let side = Math.max(-1e4, Math.min(10000, spec.side || 0)), block = !!spec.block;
|
| 5754 |
side += (block && !spec.inlineOrder)
|
5557 |
side += (block && !spec.inlineOrder)
|
| 5755 |
? (side > 0 ? 300000000 /* Side.BlockAfter */ : -400000000 /* Side.BlockBefore */)
|
5558 |
? (side > 0 ? 300000000 /* Side.BlockAfter */ : -4e8 /* Side.BlockBefore */)
|
| 5756 |
: (side > 0 ? 100000000 /* Side.InlineAfter */ : -100000000 /* Side.InlineBefore */);
|
5559 |
: (side > 0 ? 100000000 /* Side.InlineAfter */ : -1e8 /* Side.InlineBefore */);
|
| 5757 |
return new PointDecoration(spec, side, side, block, spec.widget || null, false);
|
5560 |
return new PointDecoration(spec, side, side, block, spec.widget || null, false);
|
| 5758 |
}
|
5561 |
}
|
| 5759 |
/**
|
5562 |
/**
|
| 5760 |
Create a replace decoration which replaces the given range with
|
5563 |
Create a replace decoration which replaces the given range with
|
| 5761 |
a widget, or simply hides it.
|
5564 |
a widget, or simply hides it.
|
| 5762 |
*/
|
5565 |
*/
|
| 5763 |
static replace(spec) {
|
5566 |
static replace(spec) {
|
| 5764 |
let block = !!spec.block, startSide, endSide;
|
5567 |
let block = !!spec.block, startSide, endSide;
|
| 5765 |
if (spec.isBlockGap) {
|
5568 |
if (spec.isBlockGap) {
|
| 5766 |
startSide = -500000000 /* Side.GapStart */;
|
5569 |
startSide = -5e8 /* Side.GapStart */;
|
| 5767 |
endSide = 400000000 /* Side.GapEnd */;
|
5570 |
endSide = 400000000 /* Side.GapEnd */;
|
| 5768 |
}
|
5571 |
}
|
| 5769 |
else {
|
5572 |
else {
|
| 5770 |
let { start, end } = getInclusive(spec, block);
|
5573 |
let { start, end } = getInclusive(spec, block);
|
| 5771 |
startSide = (start ? (block ? -300000000 /* Side.BlockIncStart */ : -1 /* Side.InlineIncStart */) : 500000000 /* Side.NonIncStart */) - 1;
|
5574 |
startSide = (start ? (block ? -3e8 /* Side.BlockIncStart */ : -1 /* Side.InlineIncStart */) : 500000000 /* Side.NonIncStart */) - 1;
|
| 5772 |
endSide = (end ? (block ? 200000000 /* Side.BlockIncEnd */ : 1 /* Side.InlineIncEnd */) : -600000000 /* Side.NonIncEnd */) + 1;
|
5575 |
endSide = (end ? (block ? 200000000 /* Side.BlockIncEnd */ : 1 /* Side.InlineIncEnd */) : -6e8 /* Side.NonIncEnd */) + 1;
|
| 5773 |
}
|
5576 |
}
|
| 5774 |
return new PointDecoration(spec, startSide, endSide, block, spec.widget || null, true);
|
5577 |
return new PointDecoration(spec, startSide, endSide, block, spec.widget || null, true);
|
| 5775 |
}
|
5578 |
}
|
| 5776 |
/**
|
5579 |
/**
|
| 5777 |
Create a line decoration, which can add DOM attributes to the
|
5580 |
Create a line decoration, which can add DOM attributes to the
|
| Línea 5798... |
Línea 5601... |
| 5798 |
*/
|
5601 |
*/
|
| 5799 |
Decoration.none = RangeSet.empty;
|
5602 |
Decoration.none = RangeSet.empty;
|
| 5800 |
class MarkDecoration extends Decoration {
|
5603 |
class MarkDecoration extends Decoration {
|
| 5801 |
constructor(spec) {
|
5604 |
constructor(spec) {
|
| 5802 |
let { start, end } = getInclusive(spec);
|
5605 |
let { start, end } = getInclusive(spec);
|
| 5803 |
super(start ? -1 /* Side.InlineIncStart */ : 500000000 /* Side.NonIncStart */, end ? 1 /* Side.InlineIncEnd */ : -600000000 /* Side.NonIncEnd */, null, spec);
|
5606 |
super(start ? -1 /* Side.InlineIncStart */ : 500000000 /* Side.NonIncStart */, end ? 1 /* Side.InlineIncEnd */ : -6e8 /* Side.NonIncEnd */, null, spec);
|
| 5804 |
this.tagName = spec.tagName || "span";
|
5607 |
this.tagName = spec.tagName || "span";
|
| 5805 |
this.class = spec.class || "";
|
5608 |
this.class = spec.class || "";
|
| 5806 |
this.attrs = spec.attributes || null;
|
5609 |
this.attrs = spec.attributes || null;
|
| 5807 |
}
|
5610 |
}
|
| 5808 |
eq(other) {
|
5611 |
eq(other) {
|
| Línea 5820... |
Línea 5623... |
| 5820 |
}
|
5623 |
}
|
| 5821 |
}
|
5624 |
}
|
| 5822 |
MarkDecoration.prototype.point = false;
|
5625 |
MarkDecoration.prototype.point = false;
|
| 5823 |
class LineDecoration extends Decoration {
|
5626 |
class LineDecoration extends Decoration {
|
| 5824 |
constructor(spec) {
|
5627 |
constructor(spec) {
|
| 5825 |
super(-200000000 /* Side.Line */, -200000000 /* Side.Line */, null, spec);
|
5628 |
super(-2e8 /* Side.Line */, -2e8 /* Side.Line */, null, spec);
|
| 5826 |
}
|
5629 |
}
|
| 5827 |
eq(other) {
|
5630 |
eq(other) {
|
| 5828 |
return other instanceof LineDecoration &&
|
5631 |
return other instanceof LineDecoration &&
|
| 5829 |
this.spec.class == other.spec.class &&
|
5632 |
this.spec.class == other.spec.class &&
|
| 5830 |
attrsEq(this.spec.attributes, other.spec.attributes);
|
5633 |
attrsEq(this.spec.attributes, other.spec.attributes);
|
| Línea 5884... |
Línea 5687... |
| 5884 |
ranges[last] = Math.max(ranges[last], to);
|
5687 |
ranges[last] = Math.max(ranges[last], to);
|
| 5885 |
else
|
5688 |
else
|
| 5886 |
ranges.push(from, to);
|
5689 |
ranges.push(from, to);
|
| 5887 |
}
|
5690 |
}
|
| Línea -... |
Línea 5691... |
| - |
|
5691 |
|
| - |
|
5692 |
class LineView extends ContentView {
|
| - |
|
5693 |
constructor() {
|
| - |
|
5694 |
super(...arguments);
|
| - |
|
5695 |
this.children = [];
|
| - |
|
5696 |
this.length = 0;
|
| - |
|
5697 |
this.prevAttrs = undefined;
|
| - |
|
5698 |
this.attrs = null;
|
| - |
|
5699 |
this.breakAfter = 0;
|
| - |
|
5700 |
}
|
| - |
|
5701 |
// Consumes source
|
| - |
|
5702 |
merge(from, to, source, hasStart, openStart, openEnd) {
|
| - |
|
5703 |
if (source) {
|
| - |
|
5704 |
if (!(source instanceof LineView))
|
| - |
|
5705 |
return false;
|
| - |
|
5706 |
if (!this.dom)
|
| - |
|
5707 |
source.transferDOM(this); // Reuse source.dom when appropriate
|
| - |
|
5708 |
}
|
| - |
|
5709 |
if (hasStart)
|
| - |
|
5710 |
this.setDeco(source ? source.attrs : null);
|
| - |
|
5711 |
mergeChildrenInto(this, from, to, source ? source.children.slice() : [], openStart, openEnd);
|
| - |
|
5712 |
return true;
|
| - |
|
5713 |
}
|
| - |
|
5714 |
split(at) {
|
| - |
|
5715 |
let end = new LineView;
|
| - |
|
5716 |
end.breakAfter = this.breakAfter;
|
| - |
|
5717 |
if (this.length == 0)
|
| - |
|
5718 |
return end;
|
| - |
|
5719 |
let { i, off } = this.childPos(at);
|
| - |
|
5720 |
if (off) {
|
| - |
|
5721 |
end.append(this.children[i].split(off), 0);
|
| - |
|
5722 |
this.children[i].merge(off, this.children[i].length, null, false, 0, 0);
|
| - |
|
5723 |
i++;
|
| - |
|
5724 |
}
|
| - |
|
5725 |
for (let j = i; j < this.children.length; j++)
|
| - |
|
5726 |
end.append(this.children[j], 0);
|
| - |
|
5727 |
while (i > 0 && this.children[i - 1].length == 0)
|
| - |
|
5728 |
this.children[--i].destroy();
|
| - |
|
5729 |
this.children.length = i;
|
| - |
|
5730 |
this.markDirty();
|
| - |
|
5731 |
this.length = at;
|
| - |
|
5732 |
return end;
|
| - |
|
5733 |
}
|
| - |
|
5734 |
transferDOM(other) {
|
| - |
|
5735 |
if (!this.dom)
|
| - |
|
5736 |
return;
|
| - |
|
5737 |
this.markDirty();
|
| - |
|
5738 |
other.setDOM(this.dom);
|
| - |
|
5739 |
other.prevAttrs = this.prevAttrs === undefined ? this.attrs : this.prevAttrs;
|
| - |
|
5740 |
this.prevAttrs = undefined;
|
| - |
|
5741 |
this.dom = null;
|
| - |
|
5742 |
}
|
| - |
|
5743 |
setDeco(attrs) {
|
| - |
|
5744 |
if (!attrsEq(this.attrs, attrs)) {
|
| - |
|
5745 |
if (this.dom) {
|
| - |
|
5746 |
this.prevAttrs = this.attrs;
|
| - |
|
5747 |
this.markDirty();
|
| - |
|
5748 |
}
|
| - |
|
5749 |
this.attrs = attrs;
|
| - |
|
5750 |
}
|
| - |
|
5751 |
}
|
| - |
|
5752 |
append(child, openStart) {
|
| - |
|
5753 |
joinInlineInto(this, child, openStart);
|
| - |
|
5754 |
}
|
| - |
|
5755 |
// Only called when building a line view in ContentBuilder
|
| - |
|
5756 |
addLineDeco(deco) {
|
| - |
|
5757 |
let attrs = deco.spec.attributes, cls = deco.spec.class;
|
| - |
|
5758 |
if (attrs)
|
| - |
|
5759 |
this.attrs = combineAttrs(attrs, this.attrs || {});
|
| - |
|
5760 |
if (cls)
|
| - |
|
5761 |
this.attrs = combineAttrs({ class: cls }, this.attrs || {});
|
| - |
|
5762 |
}
|
| - |
|
5763 |
domAtPos(pos) {
|
| - |
|
5764 |
return inlineDOMAtPos(this, pos);
|
| - |
|
5765 |
}
|
| - |
|
5766 |
reuseDOM(node) {
|
| - |
|
5767 |
if (node.nodeName == "DIV") {
|
| - |
|
5768 |
this.setDOM(node);
|
| - |
|
5769 |
this.flags |= 4 /* ViewFlag.AttrsDirty */ | 2 /* ViewFlag.NodeDirty */;
|
| - |
|
5770 |
}
|
| - |
|
5771 |
}
|
| - |
|
5772 |
sync(view, track) {
|
| - |
|
5773 |
var _a;
|
| - |
|
5774 |
if (!this.dom) {
|
| - |
|
5775 |
this.setDOM(document.createElement("div"));
|
| - |
|
5776 |
this.dom.className = "cm-line";
|
| - |
|
5777 |
this.prevAttrs = this.attrs ? null : undefined;
|
| - |
|
5778 |
}
|
| - |
|
5779 |
else if (this.flags & 4 /* ViewFlag.AttrsDirty */) {
|
| - |
|
5780 |
clearAttributes(this.dom);
|
| - |
|
5781 |
this.dom.className = "cm-line";
|
| - |
|
5782 |
this.prevAttrs = this.attrs ? null : undefined;
|
| - |
|
5783 |
}
|
| - |
|
5784 |
if (this.prevAttrs !== undefined) {
|
| - |
|
5785 |
updateAttrs(this.dom, this.prevAttrs, this.attrs);
|
| - |
|
5786 |
this.dom.classList.add("cm-line");
|
| - |
|
5787 |
this.prevAttrs = undefined;
|
| - |
|
5788 |
}
|
| - |
|
5789 |
super.sync(view, track);
|
| - |
|
5790 |
let last = this.dom.lastChild;
|
| - |
|
5791 |
while (last && ContentView.get(last) instanceof MarkView)
|
| - |
|
5792 |
last = last.lastChild;
|
| - |
|
5793 |
if (!last || !this.length ||
|
| - |
|
5794 |
last.nodeName != "BR" && ((_a = ContentView.get(last)) === null || _a === void 0 ? void 0 : _a.isEditable) == false &&
|
| - |
|
5795 |
(!browser.ios || !this.children.some(ch => ch instanceof TextView))) {
|
| - |
|
5796 |
let hack = document.createElement("BR");
|
| - |
|
5797 |
hack.cmIgnore = true;
|
| - |
|
5798 |
this.dom.appendChild(hack);
|
| - |
|
5799 |
}
|
| - |
|
5800 |
}
|
| - |
|
5801 |
measureTextSize() {
|
| - |
|
5802 |
if (this.children.length == 0 || this.length > 20)
|
| - |
|
5803 |
return null;
|
| - |
|
5804 |
let totalWidth = 0, textHeight;
|
| - |
|
5805 |
for (let child of this.children) {
|
| - |
|
5806 |
if (!(child instanceof TextView) || /[^ -~]/.test(child.text))
|
| - |
|
5807 |
return null;
|
| - |
|
5808 |
let rects = clientRectsFor(child.dom);
|
| - |
|
5809 |
if (rects.length != 1)
|
| - |
|
5810 |
return null;
|
| - |
|
5811 |
totalWidth += rects[0].width;
|
| - |
|
5812 |
textHeight = rects[0].height;
|
| - |
|
5813 |
}
|
| - |
|
5814 |
return !totalWidth ? null : {
|
| - |
|
5815 |
lineHeight: this.dom.getBoundingClientRect().height,
|
| - |
|
5816 |
charWidth: totalWidth / this.length,
|
| - |
|
5817 |
textHeight
|
| - |
|
5818 |
};
|
| - |
|
5819 |
}
|
| - |
|
5820 |
coordsAt(pos, side) {
|
| - |
|
5821 |
let rect = coordsInChildren(this, pos, side);
|
| - |
|
5822 |
// Correct rectangle height for empty lines when the returned
|
| - |
|
5823 |
// height is larger than the text height.
|
| - |
|
5824 |
if (!this.children.length && rect && this.parent) {
|
| - |
|
5825 |
let { heightOracle } = this.parent.view.viewState, height = rect.bottom - rect.top;
|
| - |
|
5826 |
if (Math.abs(height - heightOracle.lineHeight) < 2 && heightOracle.textHeight < height) {
|
| - |
|
5827 |
let dist = (height - heightOracle.textHeight) / 2;
|
| - |
|
5828 |
return { top: rect.top + dist, bottom: rect.bottom - dist, left: rect.left, right: rect.left };
|
| - |
|
5829 |
}
|
| - |
|
5830 |
}
|
| - |
|
5831 |
return rect;
|
| - |
|
5832 |
}
|
| - |
|
5833 |
become(other) {
|
| - |
|
5834 |
return other instanceof LineView && this.children.length == 0 && other.children.length == 0 &&
|
| - |
|
5835 |
attrsEq(this.attrs, other.attrs) && this.breakAfter == other.breakAfter;
|
| - |
|
5836 |
}
|
| - |
|
5837 |
covers() { return true; }
|
| - |
|
5838 |
static find(docView, pos) {
|
| - |
|
5839 |
for (let i = 0, off = 0; i < docView.children.length; i++) {
|
| - |
|
5840 |
let block = docView.children[i], end = off + block.length;
|
| - |
|
5841 |
if (end >= pos) {
|
| - |
|
5842 |
if (block instanceof LineView)
|
| - |
|
5843 |
return block;
|
| - |
|
5844 |
if (end > pos)
|
| - |
|
5845 |
break;
|
| - |
|
5846 |
}
|
| - |
|
5847 |
off = end + block.breakAfter;
|
| - |
|
5848 |
}
|
| - |
|
5849 |
return null;
|
| - |
|
5850 |
}
|
| - |
|
5851 |
}
|
| - |
|
5852 |
class BlockWidgetView extends ContentView {
|
| - |
|
5853 |
constructor(widget, length, deco) {
|
| - |
|
5854 |
super();
|
| - |
|
5855 |
this.widget = widget;
|
| - |
|
5856 |
this.length = length;
|
| - |
|
5857 |
this.deco = deco;
|
| - |
|
5858 |
this.breakAfter = 0;
|
| - |
|
5859 |
this.prevWidget = null;
|
| - |
|
5860 |
}
|
| - |
|
5861 |
merge(from, to, source, _takeDeco, openStart, openEnd) {
|
| - |
|
5862 |
if (source && (!(source instanceof BlockWidgetView) || !this.widget.compare(source.widget) ||
|
| - |
|
5863 |
from > 0 && openStart <= 0 || to < this.length && openEnd <= 0))
|
| - |
|
5864 |
return false;
|
| - |
|
5865 |
this.length = from + (source ? source.length : 0) + (this.length - to);
|
| - |
|
5866 |
return true;
|
| - |
|
5867 |
}
|
| - |
|
5868 |
domAtPos(pos) {
|
| - |
|
5869 |
return pos == 0 ? DOMPos.before(this.dom) : DOMPos.after(this.dom, pos == this.length);
|
| - |
|
5870 |
}
|
| - |
|
5871 |
split(at) {
|
| - |
|
5872 |
let len = this.length - at;
|
| - |
|
5873 |
this.length = at;
|
| - |
|
5874 |
let end = new BlockWidgetView(this.widget, len, this.deco);
|
| - |
|
5875 |
end.breakAfter = this.breakAfter;
|
| - |
|
5876 |
return end;
|
| - |
|
5877 |
}
|
| - |
|
5878 |
get children() { return noChildren; }
|
| - |
|
5879 |
sync(view) {
|
| - |
|
5880 |
if (!this.dom || !this.widget.updateDOM(this.dom, view)) {
|
| - |
|
5881 |
if (this.dom && this.prevWidget)
|
| - |
|
5882 |
this.prevWidget.destroy(this.dom);
|
| - |
|
5883 |
this.prevWidget = null;
|
| - |
|
5884 |
this.setDOM(this.widget.toDOM(view));
|
| - |
|
5885 |
if (!this.widget.editable)
|
| - |
|
5886 |
this.dom.contentEditable = "false";
|
| - |
|
5887 |
}
|
| - |
|
5888 |
}
|
| - |
|
5889 |
get overrideDOMText() {
|
| - |
|
5890 |
return this.parent ? this.parent.view.state.doc.slice(this.posAtStart, this.posAtEnd) : Text.empty;
|
| - |
|
5891 |
}
|
| - |
|
5892 |
domBoundsAround() { return null; }
|
| - |
|
5893 |
become(other) {
|
| - |
|
5894 |
if (other instanceof BlockWidgetView &&
|
| - |
|
5895 |
other.widget.constructor == this.widget.constructor) {
|
| - |
|
5896 |
if (!other.widget.compare(this.widget))
|
| - |
|
5897 |
this.markDirty(true);
|
| - |
|
5898 |
if (this.dom && !this.prevWidget)
|
| - |
|
5899 |
this.prevWidget = this.widget;
|
| - |
|
5900 |
this.widget = other.widget;
|
| - |
|
5901 |
this.length = other.length;
|
| - |
|
5902 |
this.deco = other.deco;
|
| - |
|
5903 |
this.breakAfter = other.breakAfter;
|
| - |
|
5904 |
return true;
|
| - |
|
5905 |
}
|
| - |
|
5906 |
return false;
|
| - |
|
5907 |
}
|
| - |
|
5908 |
ignoreMutation() { return true; }
|
| - |
|
5909 |
ignoreEvent(event) { return this.widget.ignoreEvent(event); }
|
| - |
|
5910 |
get isEditable() { return false; }
|
| - |
|
5911 |
get isWidget() { return true; }
|
| - |
|
5912 |
coordsAt(pos, side) {
|
| - |
|
5913 |
let custom = this.widget.coordsAt(this.dom, pos, side);
|
| - |
|
5914 |
if (custom)
|
| - |
|
5915 |
return custom;
|
| - |
|
5916 |
if (this.widget instanceof BlockGapWidget)
|
| - |
|
5917 |
return null;
|
| - |
|
5918 |
return flattenRect(this.dom.getBoundingClientRect(), this.length ? pos == 0 : side <= 0);
|
| - |
|
5919 |
}
|
| - |
|
5920 |
destroy() {
|
| - |
|
5921 |
super.destroy();
|
| - |
|
5922 |
if (this.dom)
|
| - |
|
5923 |
this.widget.destroy(this.dom);
|
| - |
|
5924 |
}
|
| - |
|
5925 |
covers(side) {
|
| - |
|
5926 |
let { startSide, endSide } = this.deco;
|
| - |
|
5927 |
return startSide == endSide ? false : side < 0 ? startSide < 0 : endSide > 0;
|
| - |
|
5928 |
}
|
| - |
|
5929 |
}
|
| - |
|
5930 |
class BlockGapWidget extends WidgetType {
|
| - |
|
5931 |
constructor(height) {
|
| - |
|
5932 |
super();
|
| - |
|
5933 |
this.height = height;
|
| - |
|
5934 |
}
|
| - |
|
5935 |
toDOM() {
|
| - |
|
5936 |
let elt = document.createElement("div");
|
| - |
|
5937 |
elt.className = "cm-gap";
|
| - |
|
5938 |
this.updateDOM(elt);
|
| - |
|
5939 |
return elt;
|
| - |
|
5940 |
}
|
| - |
|
5941 |
eq(other) { return other.height == this.height; }
|
| - |
|
5942 |
updateDOM(elt) {
|
| - |
|
5943 |
elt.style.height = this.height + "px";
|
| - |
|
5944 |
return true;
|
| - |
|
5945 |
}
|
| - |
|
5946 |
get editable() { return true; }
|
| - |
|
5947 |
get estimatedHeight() { return this.height; }
|
| - |
|
5948 |
ignoreEvent() { return false; }
|
| - |
|
5949 |
}
|
| 5888 |
|
5950 |
|
| 5889 |
class ContentBuilder {
|
5951 |
class ContentBuilder {
|
| 5890 |
constructor(doc, pos, end, disallowBlockEffectsFor) {
|
5952 |
constructor(doc, pos, end, disallowBlockEffectsFor) {
|
| 5891 |
this.doc = doc;
|
5953 |
this.doc = doc;
|
| 5892 |
this.pos = pos;
|
5954 |
this.pos = pos;
|
| Línea 6546... |
Línea 6608... |
| 6546 |
const mouseSelectionStyle = /*@__PURE__*/Facet.define();
|
6608 |
const mouseSelectionStyle = /*@__PURE__*/Facet.define();
|
| 6547 |
const exceptionSink = /*@__PURE__*/Facet.define();
|
6609 |
const exceptionSink = /*@__PURE__*/Facet.define();
|
| 6548 |
const updateListener = /*@__PURE__*/Facet.define();
|
6610 |
const updateListener = /*@__PURE__*/Facet.define();
|
| 6549 |
const inputHandler$1 = /*@__PURE__*/Facet.define();
|
6611 |
const inputHandler$1 = /*@__PURE__*/Facet.define();
|
| 6550 |
const focusChangeEffect = /*@__PURE__*/Facet.define();
|
6612 |
const focusChangeEffect = /*@__PURE__*/Facet.define();
|
| - |
|
6613 |
const clipboardInputFilter = /*@__PURE__*/Facet.define();
|
| - |
|
6614 |
const clipboardOutputFilter = /*@__PURE__*/Facet.define();
|
| 6551 |
const perLineTextDirection = /*@__PURE__*/Facet.define({
|
6615 |
const perLineTextDirection = /*@__PURE__*/Facet.define({
|
| 6552 |
combine: values => values.some(x => x)
|
6616 |
combine: values => values.some(x => x)
|
| 6553 |
});
|
6617 |
});
|
| 6554 |
const nativeSelectionHidden = /*@__PURE__*/Facet.define({
|
6618 |
const nativeSelectionHidden = /*@__PURE__*/Facet.define({
|
| 6555 |
combine: values => values.some(x => x)
|
6619 |
combine: values => values.some(x => x)
|
| Línea 6579... |
Línea 6643... |
| 6579 |
return this.range.to <= state.doc.length ? this :
|
6643 |
return this.range.to <= state.doc.length ? this :
|
| 6580 |
new ScrollTarget(EditorSelection.cursor(state.doc.length), this.y, this.x, this.yMargin, this.xMargin, this.isSnapshot);
|
6644 |
new ScrollTarget(EditorSelection.cursor(state.doc.length), this.y, this.x, this.yMargin, this.xMargin, this.isSnapshot);
|
| 6581 |
}
|
6645 |
}
|
| 6582 |
}
|
6646 |
}
|
| 6583 |
const scrollIntoView$1 = /*@__PURE__*/StateEffect.define({ map: (t, ch) => t.map(ch) });
|
6647 |
const scrollIntoView$1 = /*@__PURE__*/StateEffect.define({ map: (t, ch) => t.map(ch) });
|
| - |
|
6648 |
const setEditContextFormatting = /*@__PURE__*/StateEffect.define();
|
| 6584 |
/**
|
6649 |
/**
|
| 6585 |
Log or report an unhandled exception in client code. Should
|
6650 |
Log or report an unhandled exception in client code. Should
|
| 6586 |
probably only be used by extension code that allows client code to
|
6651 |
probably only be used by extension code that allows client code to
|
| 6587 |
provide functions, and calls those functions in a context where an
|
6652 |
provide functions, and calls those functions in a context where an
|
| 6588 |
exception can't be propagated to calling code in a reasonable way
|
6653 |
exception can't be propagated to calling code in a reasonable way
|
| Línea 6872... |
Línea 6937... |
| 6872 |
*/
|
6937 |
*/
|
| 6873 |
get viewportChanged() {
|
6938 |
get viewportChanged() {
|
| 6874 |
return (this.flags & 4 /* UpdateFlag.Viewport */) > 0;
|
6939 |
return (this.flags & 4 /* UpdateFlag.Viewport */) > 0;
|
| 6875 |
}
|
6940 |
}
|
| 6876 |
/**
|
6941 |
/**
|
| - |
|
6942 |
Returns true when
|
| - |
|
6943 |
[`viewportChanged`](https://codemirror.net/6/docs/ref/#view.ViewUpdate.viewportChanged) is true
|
| - |
|
6944 |
and the viewport change is not just the result of mapping it in
|
| - |
|
6945 |
response to document changes.
|
| - |
|
6946 |
*/
|
| - |
|
6947 |
get viewportMoved() {
|
| - |
|
6948 |
return (this.flags & 8 /* UpdateFlag.ViewportMoved */) > 0;
|
| - |
|
6949 |
}
|
| - |
|
6950 |
/**
|
| 6877 |
Indicates whether the height of a block element in the editor
|
6951 |
Indicates whether the height of a block element in the editor
|
| 6878 |
changed in this update.
|
6952 |
changed in this update.
|
| 6879 |
*/
|
6953 |
*/
|
| 6880 |
get heightChanged() {
|
6954 |
get heightChanged() {
|
| 6881 |
return (this.flags & 2 /* UpdateFlag.Height */) > 0;
|
6955 |
return (this.flags & 2 /* UpdateFlag.Height */) > 0;
|
| Línea 6883... |
Línea 6957... |
| 6883 |
/**
|
6957 |
/**
|
| 6884 |
Returns true when the document was modified or the size of the
|
6958 |
Returns true when the document was modified or the size of the
|
| 6885 |
editor, or elements within the editor, changed.
|
6959 |
editor, or elements within the editor, changed.
|
| 6886 |
*/
|
6960 |
*/
|
| 6887 |
get geometryChanged() {
|
6961 |
get geometryChanged() {
|
| 6888 |
return this.docChanged || (this.flags & (8 /* UpdateFlag.Geometry */ | 2 /* UpdateFlag.Height */)) > 0;
|
6962 |
return this.docChanged || (this.flags & (16 /* UpdateFlag.Geometry */ | 2 /* UpdateFlag.Height */)) > 0;
|
| 6889 |
}
|
6963 |
}
|
| 6890 |
/**
|
6964 |
/**
|
| 6891 |
True when this update indicates a focus change.
|
6965 |
True when this update indicates a focus change.
|
| 6892 |
*/
|
6966 |
*/
|
| 6893 |
get focusChanged() {
|
6967 |
get focusChanged() {
|
| Línea 6915... |
Línea 6989... |
| 6915 |
get length() { return this.view.state.doc.length; }
|
6989 |
get length() { return this.view.state.doc.length; }
|
| 6916 |
constructor(view) {
|
6990 |
constructor(view) {
|
| 6917 |
super();
|
6991 |
super();
|
| 6918 |
this.view = view;
|
6992 |
this.view = view;
|
| 6919 |
this.decorations = [];
|
6993 |
this.decorations = [];
|
| 6920 |
this.dynamicDecorationMap = [];
|
6994 |
this.dynamicDecorationMap = [false];
|
| 6921 |
this.domChanged = null;
|
6995 |
this.domChanged = null;
|
| 6922 |
this.hasComposition = null;
|
6996 |
this.hasComposition = null;
|
| 6923 |
this.markedForComposition = new Set;
|
6997 |
this.markedForComposition = new Set;
|
| - |
|
6998 |
this.editContextFormatting = Decoration.none;
|
| 6924 |
this.lastCompositionAfterCursor = false;
|
6999 |
this.lastCompositionAfterCursor = false;
|
| 6925 |
// Track a minimum width for the editor. When measuring sizes in
|
7000 |
// Track a minimum width for the editor. When measuring sizes in
|
| 6926 |
// measureVisibleLineHeights, this is updated to point at the width
|
7001 |
// measureVisibleLineHeights, this is updated to point at the width
|
| 6927 |
// of a given element and its extent in the document. When a change
|
7002 |
// of a given element and its extent in the document. When a change
|
| 6928 |
// happens in that range, these are reset. That way, once we've seen
|
7003 |
// happens in that range, these are reset. That way, once we've seen
|
| Línea 6957... |
Línea 7032... |
| 6957 |
else {
|
7032 |
else {
|
| 6958 |
this.minWidthFrom = update.changes.mapPos(this.minWidthFrom, 1);
|
7033 |
this.minWidthFrom = update.changes.mapPos(this.minWidthFrom, 1);
|
| 6959 |
this.minWidthTo = update.changes.mapPos(this.minWidthTo, 1);
|
7034 |
this.minWidthTo = update.changes.mapPos(this.minWidthTo, 1);
|
| 6960 |
}
|
7035 |
}
|
| 6961 |
}
|
7036 |
}
|
| - |
|
7037 |
this.updateEditContextFormatting(update);
|
| 6962 |
let readCompositionAt = -1;
|
7038 |
let readCompositionAt = -1;
|
| 6963 |
if (this.view.inputState.composing >= 0) {
|
7039 |
if (this.view.inputState.composing >= 0 && !this.view.observer.editContext) {
|
| 6964 |
if ((_a = this.domChanged) === null || _a === void 0 ? void 0 : _a.newSel)
|
7040 |
if ((_a = this.domChanged) === null || _a === void 0 ? void 0 : _a.newSel)
|
| 6965 |
readCompositionAt = this.domChanged.newSel.head;
|
7041 |
readCompositionAt = this.domChanged.newSel.head;
|
| 6966 |
else if (!touchesComposition(update.changes, this.hasComposition) && !update.selectionSet)
|
7042 |
else if (!touchesComposition(update.changes, this.hasComposition) && !update.selectionSet)
|
| 6967 |
readCompositionAt = update.state.selection.main.head;
|
7043 |
readCompositionAt = update.state.selection.main.head;
|
| 6968 |
}
|
7044 |
}
|
| Línea 7013... |
Línea 7089... |
| 7013 |
// around the selection, get confused and report a different
|
7089 |
// around the selection, get confused and report a different
|
| 7014 |
// selection from the one it displays (issue #218). This tries
|
7090 |
// selection from the one it displays (issue #218). This tries
|
| 7015 |
// to detect that situation.
|
7091 |
// to detect that situation.
|
| 7016 |
let track = browser.chrome || browser.ios ? { node: observer.selectionRange.focusNode, written: false } : undefined;
|
7092 |
let track = browser.chrome || browser.ios ? { node: observer.selectionRange.focusNode, written: false } : undefined;
|
| 7017 |
this.sync(this.view, track);
|
7093 |
this.sync(this.view, track);
|
| 7018 |
this.flags &= ~7 /* ViewFlag.Dirty */;
|
7094 |
this.flags &= -8 /* ViewFlag.Dirty */;
|
| 7019 |
if (track && (track.written || observer.selectionRange.focusNode != track.node))
|
7095 |
if (track && (track.written || observer.selectionRange.focusNode != track.node))
|
| 7020 |
this.forceSelection = true;
|
7096 |
this.forceSelection = true;
|
| 7021 |
this.dom.style.height = "";
|
7097 |
this.dom.style.height = "";
|
| 7022 |
});
|
7098 |
});
|
| 7023 |
this.markedForComposition.forEach(cView => cView.flags &= ~8 /* ViewFlag.Composition */);
|
7099 |
this.markedForComposition.forEach(cView => cView.flags &= -9 /* ViewFlag.Composition */);
|
| 7024 |
let gaps = [];
|
7100 |
let gaps = [];
|
| 7025 |
if (this.view.viewport.from || this.view.viewport.to < this.view.state.doc.length)
|
7101 |
if (this.view.viewport.from || this.view.viewport.to < this.view.state.doc.length)
|
| 7026 |
for (let child of this.children)
|
7102 |
for (let child of this.children)
|
| 7027 |
if (child instanceof BlockWidgetView && child.widget instanceof BlockGapWidget)
|
7103 |
if (child instanceof BlockWidgetView && child.widget instanceof BlockGapWidget)
|
| 7028 |
gaps.push(child.dom);
|
7104 |
gaps.push(child.dom);
|
| Línea 7066... |
Línea 7142... |
| 7066 |
replaceRange(this, fromI, fromOff, toI, toOff, content, breakAtStart, openStart, openEnd);
|
7142 |
replaceRange(this, fromI, fromOff, toI, toOff, content, breakAtStart, openStart, openEnd);
|
| 7067 |
}
|
7143 |
}
|
| 7068 |
if (composition)
|
7144 |
if (composition)
|
| 7069 |
this.fixCompositionDOM(composition);
|
7145 |
this.fixCompositionDOM(composition);
|
| 7070 |
}
|
7146 |
}
|
| - |
|
7147 |
updateEditContextFormatting(update) {
|
| - |
|
7148 |
this.editContextFormatting = this.editContextFormatting.map(update.changes);
|
| - |
|
7149 |
for (let tr of update.transactions)
|
| - |
|
7150 |
for (let effect of tr.effects)
|
| - |
|
7151 |
if (effect.is(setEditContextFormatting)) {
|
| - |
|
7152 |
this.editContextFormatting = effect.value;
|
| - |
|
7153 |
}
|
| - |
|
7154 |
}
|
| 7071 |
compositionView(composition) {
|
7155 |
compositionView(composition) {
|
| 7072 |
let cur = new TextView(composition.text.nodeValue);
|
7156 |
let cur = new TextView(composition.text.nodeValue);
|
| 7073 |
cur.flags |= 8 /* ViewFlag.Composition */;
|
7157 |
cur.flags |= 8 /* ViewFlag.Composition */;
|
| 7074 |
for (let { deco } of composition.marks)
|
7158 |
for (let { deco } of composition.marks)
|
| 7075 |
cur = new MarkView(deco, [cur], cur.length);
|
7159 |
cur = new MarkView(deco, [cur], cur.length);
|
| Línea 7098... |
Línea 7182... |
| 7098 |
// Sync the DOM selection to this.state.selection
|
7182 |
// Sync the DOM selection to this.state.selection
|
| 7099 |
updateSelection(mustRead = false, fromPointer = false) {
|
7183 |
updateSelection(mustRead = false, fromPointer = false) {
|
| 7100 |
if (mustRead || !this.view.observer.selectionRange.focusNode)
|
7184 |
if (mustRead || !this.view.observer.selectionRange.focusNode)
|
| 7101 |
this.view.observer.readSelectionRange();
|
7185 |
this.view.observer.readSelectionRange();
|
| 7102 |
let activeElt = this.view.root.activeElement, focused = activeElt == this.dom;
|
7186 |
let activeElt = this.view.root.activeElement, focused = activeElt == this.dom;
|
| 7103 |
let selectionNotFocus = !focused &&
|
7187 |
let selectionNotFocus = !focused && !(this.view.state.facet(editable) || this.dom.tabIndex > -1) &&
|
| 7104 |
hasSelection(this.dom, this.view.observer.selectionRange) && !(activeElt && this.dom.contains(activeElt));
|
7188 |
hasSelection(this.dom, this.view.observer.selectionRange) && !(activeElt && this.dom.contains(activeElt));
|
| 7105 |
if (!(focused || fromPointer || selectionNotFocus))
|
7189 |
if (!(focused || fromPointer || selectionNotFocus))
|
| 7106 |
return;
|
7190 |
return;
|
| 7107 |
let force = this.forceSelection;
|
7191 |
let force = this.forceSelection;
|
| 7108 |
this.forceSelection = false;
|
7192 |
this.forceSelection = false;
|
| Línea 7271... |
Línea 7355... |
| 7271 |
if (start <= pos && (start < pos || child.covers(-1)) && (end > pos || child.covers(1)) &&
|
7355 |
if (start <= pos && (start < pos || child.covers(-1)) && (end > pos || child.covers(1)) &&
|
| 7272 |
(!best || child instanceof LineView && !(best instanceof LineView && side >= 0))) {
|
7356 |
(!best || child instanceof LineView && !(best instanceof LineView && side >= 0))) {
|
| 7273 |
best = child;
|
7357 |
best = child;
|
| 7274 |
bestPos = start;
|
7358 |
bestPos = start;
|
| 7275 |
}
|
7359 |
}
|
| - |
|
7360 |
else if (best && start == pos && end == pos && child instanceof BlockWidgetView && Math.abs(side) < 2) {
|
| - |
|
7361 |
if (child.deco.startSide < 0)
|
| - |
|
7362 |
break;
|
| - |
|
7363 |
else if (i)
|
| - |
|
7364 |
best = null;
|
| - |
|
7365 |
}
|
| 7276 |
off = start;
|
7366 |
off = start;
|
| 7277 |
}
|
7367 |
}
|
| 7278 |
return best ? best.coordsAt(pos - bestPos, side) : null;
|
7368 |
return best ? best.coordsAt(pos - bestPos, side) : null;
|
| 7279 |
}
|
7369 |
}
|
| 7280 |
coordsForChar(pos) {
|
7370 |
coordsForChar(pos) {
|
| Línea 7391... |
Línea 7481... |
| 7391 |
pos = next.to + 1;
|
7481 |
pos = next.to + 1;
|
| 7392 |
}
|
7482 |
}
|
| 7393 |
return Decoration.set(deco);
|
7483 |
return Decoration.set(deco);
|
| 7394 |
}
|
7484 |
}
|
| 7395 |
updateDeco() {
|
7485 |
updateDeco() {
|
| 7396 |
let i = 0;
|
7486 |
let i = 1;
|
| 7397 |
let allDeco = this.view.state.facet(decorations).map(d => {
|
7487 |
let allDeco = this.view.state.facet(decorations).map(d => {
|
| 7398 |
let dynamic = this.dynamicDecorationMap[i++] = typeof d == "function";
|
7488 |
let dynamic = this.dynamicDecorationMap[i++] = typeof d == "function";
|
| 7399 |
return dynamic ? d(this.view) : d;
|
7489 |
return dynamic ? d(this.view) : d;
|
| 7400 |
});
|
7490 |
});
|
| 7401 |
let dynamicOuter = false, outerDeco = this.view.state.facet(outerDecorations).map((d, i) => {
|
7491 |
let dynamicOuter = false, outerDeco = this.view.state.facet(outerDecorations).map((d, i) => {
|
| Línea 7407... |
Línea 7497... |
| 7407 |
if (outerDeco.length) {
|
7497 |
if (outerDeco.length) {
|
| 7408 |
this.dynamicDecorationMap[i++] = dynamicOuter;
|
7498 |
this.dynamicDecorationMap[i++] = dynamicOuter;
|
| 7409 |
allDeco.push(RangeSet.join(outerDeco));
|
7499 |
allDeco.push(RangeSet.join(outerDeco));
|
| 7410 |
}
|
7500 |
}
|
| 7411 |
this.decorations = [
|
7501 |
this.decorations = [
|
| - |
|
7502 |
this.editContextFormatting,
|
| 7412 |
...allDeco,
|
7503 |
...allDeco,
|
| 7413 |
this.computeBlockGapDeco(),
|
7504 |
this.computeBlockGapDeco(),
|
| 7414 |
this.view.viewState.lineGapDeco
|
7505 |
this.view.viewState.lineGapDeco
|
| 7415 |
];
|
7506 |
];
|
| 7416 |
while (i < this.decorations.length)
|
7507 |
while (i < this.decorations.length)
|
| Línea 7452... |
Línea 7543... |
| 7452 |
function betweenUneditable(pos) {
|
7543 |
function betweenUneditable(pos) {
|
| 7453 |
return pos.node.nodeType == 1 && pos.node.firstChild &&
|
7544 |
return pos.node.nodeType == 1 && pos.node.firstChild &&
|
| 7454 |
(pos.offset == 0 || pos.node.childNodes[pos.offset - 1].contentEditable == "false") &&
|
7545 |
(pos.offset == 0 || pos.node.childNodes[pos.offset - 1].contentEditable == "false") &&
|
| 7455 |
(pos.offset == pos.node.childNodes.length || pos.node.childNodes[pos.offset].contentEditable == "false");
|
7546 |
(pos.offset == pos.node.childNodes.length || pos.node.childNodes[pos.offset].contentEditable == "false");
|
| 7456 |
}
|
7547 |
}
|
| 7457 |
class BlockGapWidget extends WidgetType {
|
- |
|
| 7458 |
constructor(height) {
|
- |
|
| 7459 |
super();
|
- |
|
| 7460 |
this.height = height;
|
- |
|
| 7461 |
}
|
- |
|
| 7462 |
toDOM() {
|
- |
|
| 7463 |
let elt = document.createElement("div");
|
- |
|
| 7464 |
elt.className = "cm-gap";
|
- |
|
| 7465 |
this.updateDOM(elt);
|
- |
|
| 7466 |
return elt;
|
- |
|
| 7467 |
}
|
- |
|
| 7468 |
eq(other) { return other.height == this.height; }
|
- |
|
| 7469 |
updateDOM(elt) {
|
- |
|
| 7470 |
elt.style.height = this.height + "px";
|
- |
|
| 7471 |
return true;
|
- |
|
| 7472 |
}
|
- |
|
| 7473 |
get editable() { return true; }
|
- |
|
| 7474 |
get estimatedHeight() { return this.height; }
|
- |
|
| 7475 |
ignoreEvent() { return false; }
|
- |
|
| 7476 |
}
|
- |
|
| 7477 |
function findCompositionNode(view, headPos) {
|
7548 |
function findCompositionNode(view, headPos) {
|
| 7478 |
let sel = view.observer.selectionRange;
|
7549 |
let sel = view.observer.selectionRange;
|
| 7479 |
if (!sel.focusNode)
|
7550 |
if (!sel.focusNode)
|
| 7480 |
return null;
|
7551 |
return null;
|
| 7481 |
let textBefore = textNodeBefore(sel.focusNode, sel.focusOffset);
|
7552 |
let textBefore = textNodeBefore(sel.focusNode, sel.focusOffset);
|
| Línea 7537... |
Línea 7608... |
| 7537 |
constructor() {
|
7608 |
constructor() {
|
| 7538 |
this.changes = [];
|
7609 |
this.changes = [];
|
| 7539 |
}
|
7610 |
}
|
| 7540 |
compareRange(from, to) { addRange(from, to, this.changes); }
|
7611 |
compareRange(from, to) { addRange(from, to, this.changes); }
|
| 7541 |
comparePoint(from, to) { addRange(from, to, this.changes); }
|
7612 |
comparePoint(from, to) { addRange(from, to, this.changes); }
|
| - |
|
7613 |
boundChange(pos) { addRange(pos, pos, this.changes); }
|
| 7542 |
};
|
7614 |
};
|
| 7543 |
function findChangedDeco(a, b, diff) {
|
7615 |
function findChangedDeco(a, b, diff) {
|
| 7544 |
let comp = new DecorationComparator$1;
|
7616 |
let comp = new DecorationComparator$1;
|
| 7545 |
RangeSet.compare(a, b, diff, comp);
|
7617 |
RangeSet.compare(a, b, diff, comp);
|
| 7546 |
return comp.changes;
|
7618 |
return comp.changes;
|
| Línea 7762... |
Línea 7834... |
| 7762 |
browser.safari && isSuspiciousSafariCaretResult(node, offset, x) ||
|
7834 |
browser.safari && isSuspiciousSafariCaretResult(node, offset, x) ||
|
| 7763 |
browser.chrome && isSuspiciousChromeCaretResult(node, offset, x))
|
7835 |
browser.chrome && isSuspiciousChromeCaretResult(node, offset, x))
|
| 7764 |
node = undefined;
|
7836 |
node = undefined;
|
| 7765 |
}
|
7837 |
}
|
| 7766 |
}
|
7838 |
}
|
| - |
|
7839 |
// Chrome will return offsets into <input> elements without child
|
| - |
|
7840 |
// nodes, which will lead to a null deref below, so clip the
|
| - |
|
7841 |
// offset to the node size.
|
| - |
|
7842 |
if (node)
|
| - |
|
7843 |
offset = Math.min(maxOffset(node), offset);
|
| 7767 |
}
|
7844 |
}
|
| 7768 |
// No luck, do our own (potentially expensive) search
|
7845 |
// No luck, do our own (potentially expensive) search
|
| 7769 |
if (!node || !view.docView.dom.contains(node)) {
|
7846 |
if (!node || !view.docView.dom.contains(node)) {
|
| 7770 |
let line = LineView.find(view.docView, lineStart);
|
7847 |
let line = LineView.find(view.docView, lineStart);
|
| 7771 |
if (!line)
|
7848 |
if (!line)
|
| Línea 7929... |
Línea 8006... |
| 7929 |
function skipAtoms(view, oldPos, pos) {
|
8006 |
function skipAtoms(view, oldPos, pos) {
|
| 7930 |
let newPos = skipAtomicRanges(view.state.facet(atomicRanges).map(f => f(view)), pos.from, oldPos.head > pos.from ? -1 : 1);
|
8007 |
let newPos = skipAtomicRanges(view.state.facet(atomicRanges).map(f => f(view)), pos.from, oldPos.head > pos.from ? -1 : 1);
|
| 7931 |
return newPos == pos.from ? pos : EditorSelection.cursor(newPos, newPos < pos.from ? 1 : -1);
|
8008 |
return newPos == pos.from ? pos : EditorSelection.cursor(newPos, newPos < pos.from ? 1 : -1);
|
| 7932 |
}
|
8009 |
}
|
| Línea -... |
Línea 8010... |
| - |
|
8010 |
|
| - |
|
8011 |
const LineBreakPlaceholder = "\uffff";
|
| - |
|
8012 |
class DOMReader {
|
| - |
|
8013 |
constructor(points, state) {
|
| - |
|
8014 |
this.points = points;
|
| - |
|
8015 |
this.text = "";
|
| - |
|
8016 |
this.lineSeparator = state.facet(EditorState.lineSeparator);
|
| - |
|
8017 |
}
|
| - |
|
8018 |
append(text) {
|
| - |
|
8019 |
this.text += text;
|
| - |
|
8020 |
}
|
| - |
|
8021 |
lineBreak() {
|
| - |
|
8022 |
this.text += LineBreakPlaceholder;
|
| - |
|
8023 |
}
|
| - |
|
8024 |
readRange(start, end) {
|
| - |
|
8025 |
if (!start)
|
| - |
|
8026 |
return this;
|
| - |
|
8027 |
let parent = start.parentNode;
|
| - |
|
8028 |
for (let cur = start;;) {
|
| - |
|
8029 |
this.findPointBefore(parent, cur);
|
| - |
|
8030 |
let oldLen = this.text.length;
|
| - |
|
8031 |
this.readNode(cur);
|
| - |
|
8032 |
let next = cur.nextSibling;
|
| - |
|
8033 |
if (next == end)
|
| - |
|
8034 |
break;
|
| - |
|
8035 |
let view = ContentView.get(cur), nextView = ContentView.get(next);
|
| - |
|
8036 |
if (view && nextView ? view.breakAfter :
|
| - |
|
8037 |
(view ? view.breakAfter : isBlockElement(cur)) ||
|
| - |
|
8038 |
(isBlockElement(next) && (cur.nodeName != "BR" || cur.cmIgnore) && this.text.length > oldLen))
|
| - |
|
8039 |
this.lineBreak();
|
| - |
|
8040 |
cur = next;
|
| - |
|
8041 |
}
|
| - |
|
8042 |
this.findPointBefore(parent, end);
|
| - |
|
8043 |
return this;
|
| - |
|
8044 |
}
|
| - |
|
8045 |
readTextNode(node) {
|
| - |
|
8046 |
let text = node.nodeValue;
|
| - |
|
8047 |
for (let point of this.points)
|
| - |
|
8048 |
if (point.node == node)
|
| - |
|
8049 |
point.pos = this.text.length + Math.min(point.offset, text.length);
|
| - |
|
8050 |
for (let off = 0, re = this.lineSeparator ? null : /\r\n?|\n/g;;) {
|
| - |
|
8051 |
let nextBreak = -1, breakSize = 1, m;
|
| - |
|
8052 |
if (this.lineSeparator) {
|
| - |
|
8053 |
nextBreak = text.indexOf(this.lineSeparator, off);
|
| - |
|
8054 |
breakSize = this.lineSeparator.length;
|
| - |
|
8055 |
}
|
| - |
|
8056 |
else if (m = re.exec(text)) {
|
| - |
|
8057 |
nextBreak = m.index;
|
| - |
|
8058 |
breakSize = m[0].length;
|
| - |
|
8059 |
}
|
| - |
|
8060 |
this.append(text.slice(off, nextBreak < 0 ? text.length : nextBreak));
|
| - |
|
8061 |
if (nextBreak < 0)
|
| - |
|
8062 |
break;
|
| - |
|
8063 |
this.lineBreak();
|
| - |
|
8064 |
if (breakSize > 1)
|
| - |
|
8065 |
for (let point of this.points)
|
| - |
|
8066 |
if (point.node == node && point.pos > this.text.length)
|
| - |
|
8067 |
point.pos -= breakSize - 1;
|
| - |
|
8068 |
off = nextBreak + breakSize;
|
| - |
|
8069 |
}
|
| - |
|
8070 |
}
|
| - |
|
8071 |
readNode(node) {
|
| - |
|
8072 |
if (node.cmIgnore)
|
| - |
|
8073 |
return;
|
| - |
|
8074 |
let view = ContentView.get(node);
|
| - |
|
8075 |
let fromView = view && view.overrideDOMText;
|
| - |
|
8076 |
if (fromView != null) {
|
| - |
|
8077 |
this.findPointInside(node, fromView.length);
|
| - |
|
8078 |
for (let i = fromView.iter(); !i.next().done;) {
|
| - |
|
8079 |
if (i.lineBreak)
|
| - |
|
8080 |
this.lineBreak();
|
| - |
|
8081 |
else
|
| - |
|
8082 |
this.append(i.value);
|
| - |
|
8083 |
}
|
| - |
|
8084 |
}
|
| - |
|
8085 |
else if (node.nodeType == 3) {
|
| - |
|
8086 |
this.readTextNode(node);
|
| - |
|
8087 |
}
|
| - |
|
8088 |
else if (node.nodeName == "BR") {
|
| - |
|
8089 |
if (node.nextSibling)
|
| - |
|
8090 |
this.lineBreak();
|
| - |
|
8091 |
}
|
| - |
|
8092 |
else if (node.nodeType == 1) {
|
| - |
|
8093 |
this.readRange(node.firstChild, null);
|
| - |
|
8094 |
}
|
| - |
|
8095 |
}
|
| - |
|
8096 |
findPointBefore(node, next) {
|
| - |
|
8097 |
for (let point of this.points)
|
| - |
|
8098 |
if (point.node == node && node.childNodes[point.offset] == next)
|
| - |
|
8099 |
point.pos = this.text.length;
|
| - |
|
8100 |
}
|
| - |
|
8101 |
findPointInside(node, length) {
|
| - |
|
8102 |
for (let point of this.points)
|
| - |
|
8103 |
if (node.nodeType == 3 ? point.node == node : node.contains(point.node))
|
| - |
|
8104 |
point.pos = this.text.length + (isAtEnd(node, point.node, point.offset) ? length : 0);
|
| - |
|
8105 |
}
|
| - |
|
8106 |
}
|
| - |
|
8107 |
function isAtEnd(parent, node, offset) {
|
| - |
|
8108 |
for (;;) {
|
| - |
|
8109 |
if (!node || offset < maxOffset(node))
|
| - |
|
8110 |
return false;
|
| - |
|
8111 |
if (node == parent)
|
| - |
|
8112 |
return true;
|
| - |
|
8113 |
offset = domIndex(node) + 1;
|
| - |
|
8114 |
node = node.parentNode;
|
| - |
|
8115 |
}
|
| - |
|
8116 |
}
|
| - |
|
8117 |
class DOMPoint {
|
| - |
|
8118 |
constructor(node, offset) {
|
| - |
|
8119 |
this.node = node;
|
| - |
|
8120 |
this.offset = offset;
|
| - |
|
8121 |
this.pos = -1;
|
| - |
|
8122 |
}
|
| - |
|
8123 |
}
|
| - |
|
8124 |
|
| - |
|
8125 |
class DOMChange {
|
| - |
|
8126 |
constructor(view, start, end, typeOver) {
|
| - |
|
8127 |
this.typeOver = typeOver;
|
| - |
|
8128 |
this.bounds = null;
|
| - |
|
8129 |
this.text = "";
|
| - |
|
8130 |
this.domChanged = start > -1;
|
| - |
|
8131 |
let { impreciseHead: iHead, impreciseAnchor: iAnchor } = view.docView;
|
| - |
|
8132 |
if (view.state.readOnly && start > -1) {
|
| - |
|
8133 |
// Ignore changes when the editor is read-only
|
| - |
|
8134 |
this.newSel = null;
|
| - |
|
8135 |
}
|
| - |
|
8136 |
else if (start > -1 && (this.bounds = view.docView.domBoundsAround(start, end, 0))) {
|
| - |
|
8137 |
let selPoints = iHead || iAnchor ? [] : selectionPoints(view);
|
| - |
|
8138 |
let reader = new DOMReader(selPoints, view.state);
|
| - |
|
8139 |
reader.readRange(this.bounds.startDOM, this.bounds.endDOM);
|
| - |
|
8140 |
this.text = reader.text;
|
| - |
|
8141 |
this.newSel = selectionFromPoints(selPoints, this.bounds.from);
|
| - |
|
8142 |
}
|
| - |
|
8143 |
else {
|
| - |
|
8144 |
let domSel = view.observer.selectionRange;
|
| - |
|
8145 |
let head = iHead && iHead.node == domSel.focusNode && iHead.offset == domSel.focusOffset ||
|
| - |
|
8146 |
!contains(view.contentDOM, domSel.focusNode)
|
| - |
|
8147 |
? view.state.selection.main.head
|
| - |
|
8148 |
: view.docView.posFromDOM(domSel.focusNode, domSel.focusOffset);
|
| - |
|
8149 |
let anchor = iAnchor && iAnchor.node == domSel.anchorNode && iAnchor.offset == domSel.anchorOffset ||
|
| - |
|
8150 |
!contains(view.contentDOM, domSel.anchorNode)
|
| - |
|
8151 |
? view.state.selection.main.anchor
|
| - |
|
8152 |
: view.docView.posFromDOM(domSel.anchorNode, domSel.anchorOffset);
|
| - |
|
8153 |
// iOS will refuse to select the block gaps when doing
|
| - |
|
8154 |
// select-all.
|
| - |
|
8155 |
// Chrome will put the selection *inside* them, confusing
|
| - |
|
8156 |
// posFromDOM
|
| - |
|
8157 |
let vp = view.viewport;
|
| - |
|
8158 |
if ((browser.ios || browser.chrome) && view.state.selection.main.empty && head != anchor &&
|
| - |
|
8159 |
(vp.from > 0 || vp.to < view.state.doc.length)) {
|
| - |
|
8160 |
let from = Math.min(head, anchor), to = Math.max(head, anchor);
|
| - |
|
8161 |
let offFrom = vp.from - from, offTo = vp.to - to;
|
| - |
|
8162 |
if ((offFrom == 0 || offFrom == 1 || from == 0) && (offTo == 0 || offTo == -1 || to == view.state.doc.length)) {
|
| - |
|
8163 |
head = 0;
|
| - |
|
8164 |
anchor = view.state.doc.length;
|
| - |
|
8165 |
}
|
| - |
|
8166 |
}
|
| - |
|
8167 |
this.newSel = EditorSelection.single(anchor, head);
|
| - |
|
8168 |
}
|
| - |
|
8169 |
}
|
| - |
|
8170 |
}
|
| - |
|
8171 |
function applyDOMChange(view, domChange) {
|
| - |
|
8172 |
let change;
|
| - |
|
8173 |
let { newSel } = domChange, sel = view.state.selection.main;
|
| - |
|
8174 |
let lastKey = view.inputState.lastKeyTime > Date.now() - 100 ? view.inputState.lastKeyCode : -1;
|
| - |
|
8175 |
if (domChange.bounds) {
|
| - |
|
8176 |
let { from, to } = domChange.bounds;
|
| - |
|
8177 |
let preferredPos = sel.from, preferredSide = null;
|
| - |
|
8178 |
// Prefer anchoring to end when Backspace is pressed (or, on
|
| - |
|
8179 |
// Android, when something was deleted)
|
| - |
|
8180 |
if (lastKey === 8 || browser.android && domChange.text.length < to - from) {
|
| - |
|
8181 |
preferredPos = sel.to;
|
| - |
|
8182 |
preferredSide = "end";
|
| - |
|
8183 |
}
|
| - |
|
8184 |
let diff = findDiff(view.state.doc.sliceString(from, to, LineBreakPlaceholder), domChange.text, preferredPos - from, preferredSide);
|
| - |
|
8185 |
if (diff) {
|
| - |
|
8186 |
// Chrome inserts two newlines when pressing shift-enter at the
|
| - |
|
8187 |
// end of a line. DomChange drops one of those.
|
| - |
|
8188 |
if (browser.chrome && lastKey == 13 &&
|
| - |
|
8189 |
diff.toB == diff.from + 2 && domChange.text.slice(diff.from, diff.toB) == LineBreakPlaceholder + LineBreakPlaceholder)
|
| - |
|
8190 |
diff.toB--;
|
| - |
|
8191 |
change = { from: from + diff.from, to: from + diff.toA,
|
| - |
|
8192 |
insert: Text.of(domChange.text.slice(diff.from, diff.toB).split(LineBreakPlaceholder)) };
|
| - |
|
8193 |
}
|
| - |
|
8194 |
}
|
| - |
|
8195 |
else if (newSel && (!view.hasFocus && view.state.facet(editable) || newSel.main.eq(sel))) {
|
| - |
|
8196 |
newSel = null;
|
| - |
|
8197 |
}
|
| - |
|
8198 |
if (!change && !newSel)
|
| - |
|
8199 |
return false;
|
| - |
|
8200 |
if (!change && domChange.typeOver && !sel.empty && newSel && newSel.main.empty) {
|
| - |
|
8201 |
// Heuristic to notice typing over a selected character
|
| - |
|
8202 |
change = { from: sel.from, to: sel.to, insert: view.state.doc.slice(sel.from, sel.to) };
|
| - |
|
8203 |
}
|
| - |
|
8204 |
else if ((browser.mac || browser.android) && change && change.from == change.to && change.from == sel.head - 1 &&
|
| - |
|
8205 |
/^\. ?$/.test(change.insert.toString()) && view.contentDOM.getAttribute("autocorrect") == "off") {
|
| - |
|
8206 |
// Detect insert-period-on-double-space Mac and Android behavior,
|
| - |
|
8207 |
// and transform it into a regular space insert.
|
| - |
|
8208 |
if (newSel && change.insert.length == 2)
|
| - |
|
8209 |
newSel = EditorSelection.single(newSel.main.anchor - 1, newSel.main.head - 1);
|
| - |
|
8210 |
change = { from: change.from, to: change.to, insert: Text.of([change.insert.toString().replace(".", " ")]) };
|
| - |
|
8211 |
}
|
| - |
|
8212 |
else if (change && change.from >= sel.from && change.to <= sel.to &&
|
| - |
|
8213 |
(change.from != sel.from || change.to != sel.to) &&
|
| - |
|
8214 |
(sel.to - sel.from) - (change.to - change.from) <= 4) {
|
| - |
|
8215 |
// If the change is inside the selection and covers most of it,
|
| - |
|
8216 |
// assume it is a selection replace (with identical characters at
|
| - |
|
8217 |
// the start/end not included in the diff)
|
| - |
|
8218 |
change = {
|
| - |
|
8219 |
from: sel.from, to: sel.to,
|
| - |
|
8220 |
insert: view.state.doc.slice(sel.from, change.from).append(change.insert).append(view.state.doc.slice(change.to, sel.to))
|
| - |
|
8221 |
};
|
| - |
|
8222 |
}
|
| - |
|
8223 |
else if (browser.chrome && change && change.from == change.to && change.from == sel.head &&
|
| - |
|
8224 |
change.insert.toString() == "\n " && view.lineWrapping) {
|
| - |
|
8225 |
// In Chrome, if you insert a space at the start of a wrapped
|
| - |
|
8226 |
// line, it will actually insert a newline and a space, causing a
|
| - |
|
8227 |
// bogus new line to be created in CodeMirror (#968)
|
| - |
|
8228 |
if (newSel)
|
| - |
|
8229 |
newSel = EditorSelection.single(newSel.main.anchor - 1, newSel.main.head - 1);
|
| - |
|
8230 |
change = { from: sel.from, to: sel.to, insert: Text.of([" "]) };
|
| - |
|
8231 |
}
|
| - |
|
8232 |
if (change) {
|
| - |
|
8233 |
return applyDOMChangeInner(view, change, newSel, lastKey);
|
| - |
|
8234 |
}
|
| - |
|
8235 |
else if (newSel && !newSel.main.eq(sel)) {
|
| - |
|
8236 |
let scrollIntoView = false, userEvent = "select";
|
| - |
|
8237 |
if (view.inputState.lastSelectionTime > Date.now() - 50) {
|
| - |
|
8238 |
if (view.inputState.lastSelectionOrigin == "select")
|
| - |
|
8239 |
scrollIntoView = true;
|
| - |
|
8240 |
userEvent = view.inputState.lastSelectionOrigin;
|
| - |
|
8241 |
}
|
| - |
|
8242 |
view.dispatch({ selection: newSel, scrollIntoView, userEvent });
|
| - |
|
8243 |
return true;
|
| - |
|
8244 |
}
|
| - |
|
8245 |
else {
|
| - |
|
8246 |
return false;
|
| - |
|
8247 |
}
|
| - |
|
8248 |
}
|
| - |
|
8249 |
function applyDOMChangeInner(view, change, newSel, lastKey = -1) {
|
| - |
|
8250 |
if (browser.ios && view.inputState.flushIOSKey(change))
|
| - |
|
8251 |
return true;
|
| - |
|
8252 |
let sel = view.state.selection.main;
|
| - |
|
8253 |
// Android browsers don't fire reasonable key events for enter,
|
| 7933 |
|
8254 |
// backspace, or delete. So this detects changes that look like
|
| - |
|
8255 |
// they're caused by those keys, and reinterprets them as key
|
| - |
|
8256 |
// events. (Some of these keys are also handled by beforeinput
|
| - |
|
8257 |
// events and the pendingAndroidKey mechanism, but that's not
|
| - |
|
8258 |
// reliable in all situations.)
|
| - |
|
8259 |
if (browser.android &&
|
| - |
|
8260 |
((change.to == sel.to &&
|
| - |
|
8261 |
// GBoard will sometimes remove a space it just inserted
|
| - |
|
8262 |
// after a completion when you press enter
|
| - |
|
8263 |
(change.from == sel.from || change.from == sel.from - 1 && view.state.sliceDoc(change.from, sel.from) == " ") &&
|
| - |
|
8264 |
change.insert.length == 1 && change.insert.lines == 2 &&
|
| - |
|
8265 |
dispatchKey(view.contentDOM, "Enter", 13)) ||
|
| - |
|
8266 |
((change.from == sel.from - 1 && change.to == sel.to && change.insert.length == 0 ||
|
| - |
|
8267 |
lastKey == 8 && change.insert.length < change.to - change.from && change.to > sel.head) &&
|
| - |
|
8268 |
dispatchKey(view.contentDOM, "Backspace", 8)) ||
|
| - |
|
8269 |
(change.from == sel.from && change.to == sel.to + 1 && change.insert.length == 0 &&
|
| - |
|
8270 |
dispatchKey(view.contentDOM, "Delete", 46))))
|
| - |
|
8271 |
return true;
|
| - |
|
8272 |
let text = change.insert.toString();
|
| - |
|
8273 |
if (view.inputState.composing >= 0)
|
| - |
|
8274 |
view.inputState.composing++;
|
| - |
|
8275 |
let defaultTr;
|
| - |
|
8276 |
let defaultInsert = () => defaultTr || (defaultTr = applyDefaultInsert(view, change, newSel));
|
| - |
|
8277 |
if (!view.state.facet(inputHandler$1).some(h => h(view, change.from, change.to, text, defaultInsert)))
|
| - |
|
8278 |
view.dispatch(defaultInsert());
|
| - |
|
8279 |
return true;
|
| - |
|
8280 |
}
|
| - |
|
8281 |
function applyDefaultInsert(view, change, newSel) {
|
| - |
|
8282 |
let tr, startState = view.state, sel = startState.selection.main;
|
| - |
|
8283 |
if (change.from >= sel.from && change.to <= sel.to && change.to - change.from >= (sel.to - sel.from) / 3 &&
|
| - |
|
8284 |
(!newSel || newSel.main.empty && newSel.main.from == change.from + change.insert.length) &&
|
| - |
|
8285 |
view.inputState.composing < 0) {
|
| - |
|
8286 |
let before = sel.from < change.from ? startState.sliceDoc(sel.from, change.from) : "";
|
| - |
|
8287 |
let after = sel.to > change.to ? startState.sliceDoc(change.to, sel.to) : "";
|
| - |
|
8288 |
tr = startState.replaceSelection(view.state.toText(before + change.insert.sliceString(0, undefined, view.state.lineBreak) + after));
|
| - |
|
8289 |
}
|
| - |
|
8290 |
else {
|
| - |
|
8291 |
let changes = startState.changes(change);
|
| - |
|
8292 |
let mainSel = newSel && newSel.main.to <= changes.newLength ? newSel.main : undefined;
|
| - |
|
8293 |
// Try to apply a composition change to all cursors
|
| - |
|
8294 |
if (startState.selection.ranges.length > 1 && view.inputState.composing >= 0 &&
|
| - |
|
8295 |
change.to <= sel.to && change.to >= sel.to - 10) {
|
| - |
|
8296 |
let replaced = view.state.sliceDoc(change.from, change.to);
|
| - |
|
8297 |
let compositionRange, composition = newSel && findCompositionNode(view, newSel.main.head);
|
| - |
|
8298 |
if (composition) {
|
| - |
|
8299 |
let dLen = change.insert.length - (change.to - change.from);
|
| - |
|
8300 |
compositionRange = { from: composition.from, to: composition.to - dLen };
|
| - |
|
8301 |
}
|
| - |
|
8302 |
else {
|
| - |
|
8303 |
compositionRange = view.state.doc.lineAt(sel.head);
|
| - |
|
8304 |
}
|
| - |
|
8305 |
let offset = sel.to - change.to, size = sel.to - sel.from;
|
| - |
|
8306 |
tr = startState.changeByRange(range => {
|
| - |
|
8307 |
if (range.from == sel.from && range.to == sel.to)
|
| - |
|
8308 |
return { changes, range: mainSel || range.map(changes) };
|
| - |
|
8309 |
let to = range.to - offset, from = to - replaced.length;
|
| - |
|
8310 |
if (range.to - range.from != size || view.state.sliceDoc(from, to) != replaced ||
|
| - |
|
8311 |
// Unfortunately, there's no way to make multiple
|
| - |
|
8312 |
// changes in the same node work without aborting
|
| - |
|
8313 |
// composition, so cursors in the composition range are
|
| - |
|
8314 |
// ignored.
|
| - |
|
8315 |
range.to >= compositionRange.from && range.from <= compositionRange.to)
|
| - |
|
8316 |
return { range };
|
| - |
|
8317 |
let rangeChanges = startState.changes({ from, to, insert: change.insert }), selOff = range.to - sel.to;
|
| - |
|
8318 |
return {
|
| - |
|
8319 |
changes: rangeChanges,
|
| - |
|
8320 |
range: !mainSel ? range.map(rangeChanges) :
|
| - |
|
8321 |
EditorSelection.range(Math.max(0, mainSel.anchor + selOff), Math.max(0, mainSel.head + selOff))
|
| - |
|
8322 |
};
|
| - |
|
8323 |
});
|
| - |
|
8324 |
}
|
| - |
|
8325 |
else {
|
| - |
|
8326 |
tr = {
|
| - |
|
8327 |
changes,
|
| - |
|
8328 |
selection: mainSel && startState.selection.replaceRange(mainSel)
|
| - |
|
8329 |
};
|
| - |
|
8330 |
}
|
| - |
|
8331 |
}
|
| - |
|
8332 |
let userEvent = "input.type";
|
| - |
|
8333 |
if (view.composing ||
|
| - |
|
8334 |
view.inputState.compositionPendingChange && view.inputState.compositionEndedAt > Date.now() - 50) {
|
| - |
|
8335 |
view.inputState.compositionPendingChange = false;
|
| - |
|
8336 |
userEvent += ".compose";
|
| - |
|
8337 |
if (view.inputState.compositionFirstChange) {
|
| - |
|
8338 |
userEvent += ".start";
|
| - |
|
8339 |
view.inputState.compositionFirstChange = false;
|
| - |
|
8340 |
}
|
| - |
|
8341 |
}
|
| - |
|
8342 |
return startState.update(tr, { userEvent, scrollIntoView: true });
|
| - |
|
8343 |
}
|
| - |
|
8344 |
function findDiff(a, b, preferredPos, preferredSide) {
|
| - |
|
8345 |
let minLen = Math.min(a.length, b.length);
|
| - |
|
8346 |
let from = 0;
|
| - |
|
8347 |
while (from < minLen && a.charCodeAt(from) == b.charCodeAt(from))
|
| - |
|
8348 |
from++;
|
| - |
|
8349 |
if (from == minLen && a.length == b.length)
|
| - |
|
8350 |
return null;
|
| - |
|
8351 |
let toA = a.length, toB = b.length;
|
| - |
|
8352 |
while (toA > 0 && toB > 0 && a.charCodeAt(toA - 1) == b.charCodeAt(toB - 1)) {
|
| - |
|
8353 |
toA--;
|
| - |
|
8354 |
toB--;
|
| - |
|
8355 |
}
|
| - |
|
8356 |
if (preferredSide == "end") {
|
| - |
|
8357 |
let adjust = Math.max(0, from - Math.min(toA, toB));
|
| - |
|
8358 |
preferredPos -= toA + adjust - from;
|
| - |
|
8359 |
}
|
| - |
|
8360 |
if (toA < from && a.length < b.length) {
|
| - |
|
8361 |
let move = preferredPos <= from && preferredPos >= toA ? from - preferredPos : 0;
|
| - |
|
8362 |
from -= move;
|
| - |
|
8363 |
toB = from + (toB - toA);
|
| - |
|
8364 |
toA = from;
|
| - |
|
8365 |
}
|
| - |
|
8366 |
else if (toB < from) {
|
| - |
|
8367 |
let move = preferredPos <= from && preferredPos >= toB ? from - preferredPos : 0;
|
| - |
|
8368 |
from -= move;
|
| - |
|
8369 |
toA = from + (toA - toB);
|
| - |
|
8370 |
toB = from;
|
| - |
|
8371 |
}
|
| - |
|
8372 |
return { from, toA, toB };
|
| - |
|
8373 |
}
|
| - |
|
8374 |
function selectionPoints(view) {
|
| - |
|
8375 |
let result = [];
|
| - |
|
8376 |
if (view.root.activeElement != view.contentDOM)
|
| - |
|
8377 |
return result;
|
| - |
|
8378 |
let { anchorNode, anchorOffset, focusNode, focusOffset } = view.observer.selectionRange;
|
| - |
|
8379 |
if (anchorNode) {
|
| - |
|
8380 |
result.push(new DOMPoint(anchorNode, anchorOffset));
|
| - |
|
8381 |
if (focusNode != anchorNode || focusOffset != anchorOffset)
|
| - |
|
8382 |
result.push(new DOMPoint(focusNode, focusOffset));
|
| - |
|
8383 |
}
|
| - |
|
8384 |
return result;
|
| - |
|
8385 |
}
|
| - |
|
8386 |
function selectionFromPoints(points, base) {
|
| - |
|
8387 |
if (points.length == 0)
|
| - |
|
8388 |
return null;
|
| - |
|
8389 |
let anchor = points[0].pos, head = points.length == 2 ? points[1].pos : anchor;
|
| - |
|
8390 |
return anchor > -1 && head > -1 ? EditorSelection.single(anchor + base, head + base) : null;
|
| - |
|
8391 |
}
|
| 7934 |
// This will also be where dragging info and such goes
|
8392 |
|
| 7935 |
class InputState {
|
8393 |
class InputState {
|
| 7936 |
setSelectionOrigin(origin) {
|
8394 |
setSelectionOrigin(origin) {
|
| 7937 |
this.lastSelectionOrigin = origin;
|
8395 |
this.lastSelectionOrigin = origin;
|
| 7938 |
this.lastSelectionTime = Date.now();
|
8396 |
this.lastSelectionTime = Date.now();
|
| Línea 7947... |
Línea 8405... |
| 7947 |
this.lastScrollLeft = 0;
|
8405 |
this.lastScrollLeft = 0;
|
| 7948 |
// On iOS, some keys need to have their default behavior happen
|
8406 |
// On iOS, some keys need to have their default behavior happen
|
| 7949 |
// (after which we retroactively handle them and reset the DOM) to
|
8407 |
// (after which we retroactively handle them and reset the DOM) to
|
| 7950 |
// avoid messing up the virtual keyboard state.
|
8408 |
// avoid messing up the virtual keyboard state.
|
| 7951 |
this.pendingIOSKey = undefined;
|
8409 |
this.pendingIOSKey = undefined;
|
| - |
|
8410 |
/**
|
| - |
|
8411 |
When enabled (>-1), tab presses are not given to key handlers,
|
| - |
|
8412 |
leaving the browser's default behavior. If >0, the mode expires
|
| - |
|
8413 |
at that timestamp, and any other keypress clears it.
|
| - |
|
8414 |
Esc enables temporary tab focus mode for two seconds when not
|
| - |
|
8415 |
otherwise handled.
|
| - |
|
8416 |
*/
|
| - |
|
8417 |
this.tabFocusMode = -1;
|
| 7952 |
this.lastSelectionOrigin = null;
|
8418 |
this.lastSelectionOrigin = null;
|
| 7953 |
this.lastSelectionTime = 0;
|
8419 |
this.lastSelectionTime = 0;
|
| 7954 |
this.lastEscPress = 0;
|
- |
|
| 7955 |
this.lastContextMenu = 0;
|
8420 |
this.lastContextMenu = 0;
|
| 7956 |
this.scrollHandlers = [];
|
8421 |
this.scrollHandlers = [];
|
| 7957 |
this.handlers = Object.create(null);
|
8422 |
this.handlers = Object.create(null);
|
| 7958 |
// -1 means not in a composition. Otherwise, this counts the number
|
8423 |
// -1 means not in a composition. Otherwise, this counts the number
|
| 7959 |
// of changes made during the composition. The count is used to
|
8424 |
// of changes made during the composition. The count is used to
|
| Línea 7990... |
Línea 8455... |
| 7990 |
handleEvent(event) {
|
8455 |
handleEvent(event) {
|
| 7991 |
if (!eventBelongsToEditor(this.view, event) || this.ignoreDuringComposition(event))
|
8456 |
if (!eventBelongsToEditor(this.view, event) || this.ignoreDuringComposition(event))
|
| 7992 |
return;
|
8457 |
return;
|
| 7993 |
if (event.type == "keydown" && this.keydown(event))
|
8458 |
if (event.type == "keydown" && this.keydown(event))
|
| 7994 |
return;
|
8459 |
return;
|
| - |
|
8460 |
if (this.view.updateState != 0 /* UpdateState.Idle */)
|
| - |
|
8461 |
Promise.resolve().then(() => this.runHandlers(event.type, event));
|
| - |
|
8462 |
else
|
| 7995 |
this.runHandlers(event.type, event);
|
8463 |
this.runHandlers(event.type, event);
|
| 7996 |
}
|
8464 |
}
|
| 7997 |
runHandlers(type, event) {
|
8465 |
runHandlers(type, event) {
|
| 7998 |
let handlers = this.handlers[type];
|
8466 |
let handlers = this.handlers[type];
|
| 7999 |
if (handlers) {
|
8467 |
if (handlers) {
|
| 8000 |
for (let observer of handlers.observers)
|
8468 |
for (let observer of handlers.observers)
|
| Línea 8029... |
Línea 8497... |
| 8029 |
}
|
8497 |
}
|
| 8030 |
keydown(event) {
|
8498 |
keydown(event) {
|
| 8031 |
// Must always run, even if a custom handler handled the event
|
8499 |
// Must always run, even if a custom handler handled the event
|
| 8032 |
this.lastKeyCode = event.keyCode;
|
8500 |
this.lastKeyCode = event.keyCode;
|
| 8033 |
this.lastKeyTime = Date.now();
|
8501 |
this.lastKeyTime = Date.now();
|
| 8034 |
if (event.keyCode == 9 && Date.now() < this.lastEscPress + 2000)
|
8502 |
if (event.keyCode == 9 && this.tabFocusMode > -1 && (!this.tabFocusMode || Date.now() <= this.tabFocusMode))
|
| 8035 |
return true;
|
8503 |
return true;
|
| 8036 |
if (event.keyCode != 27 && modifierCodes.indexOf(event.keyCode) < 0)
|
8504 |
if (this.tabFocusMode > 0 && event.keyCode != 27 && modifierCodes.indexOf(event.keyCode) < 0)
|
| 8037 |
this.view.inputState.lastEscPress = 0;
|
8505 |
this.tabFocusMode = -1;
|
| 8038 |
// Chrome for Android usually doesn't fire proper key events, but
|
8506 |
// Chrome for Android usually doesn't fire proper key events, but
|
| 8039 |
// occasionally does, usually surrounded by a bunch of complicated
|
8507 |
// occasionally does, usually surrounded by a bunch of complicated
|
| 8040 |
// composition changes. When an enter or backspace key event is
|
8508 |
// composition changes. When an enter or backspace key event is
|
| 8041 |
// seen, hold off on handling DOM events for a bit, and then
|
8509 |
// seen, hold off on handling DOM events for a bit, and then
|
| 8042 |
// dispatch it.
|
8510 |
// dispatch it.
|
| Línea 8093... |
Línea 8561... |
| 8093 |
if (this.mouseSelection)
|
8561 |
if (this.mouseSelection)
|
| 8094 |
this.mouseSelection.destroy();
|
8562 |
this.mouseSelection.destroy();
|
| 8095 |
this.mouseSelection = mouseSelection;
|
8563 |
this.mouseSelection = mouseSelection;
|
| 8096 |
}
|
8564 |
}
|
| 8097 |
update(update) {
|
8565 |
update(update) {
|
| - |
|
8566 |
this.view.observer.update(update);
|
| 8098 |
if (this.mouseSelection)
|
8567 |
if (this.mouseSelection)
|
| 8099 |
this.mouseSelection.update(update);
|
8568 |
this.mouseSelection.update(update);
|
| 8100 |
if (this.draggedContent && update.docChanged)
|
8569 |
if (this.draggedContent && update.docChanged)
|
| 8101 |
this.draggedContent = this.draggedContent.map(update.changes);
|
8570 |
this.draggedContent = this.draggedContent.map(update.changes);
|
| 8102 |
if (update.transactions.length)
|
8571 |
if (update.transactions.length)
|
| Línea 8166... |
Línea 8635... |
| 8166 |
this.style = style;
|
8635 |
this.style = style;
|
| 8167 |
this.mustSelect = mustSelect;
|
8636 |
this.mustSelect = mustSelect;
|
| 8168 |
this.scrollSpeed = { x: 0, y: 0 };
|
8637 |
this.scrollSpeed = { x: 0, y: 0 };
|
| 8169 |
this.scrolling = -1;
|
8638 |
this.scrolling = -1;
|
| 8170 |
this.lastEvent = startEvent;
|
8639 |
this.lastEvent = startEvent;
|
| 8171 |
this.scrollParent = scrollableParent(view.contentDOM);
|
8640 |
this.scrollParents = scrollableParents(view.contentDOM);
|
| 8172 |
this.atoms = view.state.facet(atomicRanges).map(f => f(view));
|
8641 |
this.atoms = view.state.facet(atomicRanges).map(f => f(view));
|
| 8173 |
let doc = view.contentDOM.ownerDocument;
|
8642 |
let doc = view.contentDOM.ownerDocument;
|
| 8174 |
doc.addEventListener("mousemove", this.move = this.move.bind(this));
|
8643 |
doc.addEventListener("mousemove", this.move = this.move.bind(this));
|
| 8175 |
doc.addEventListener("mouseup", this.up = this.up.bind(this));
|
8644 |
doc.addEventListener("mouseup", this.up = this.up.bind(this));
|
| 8176 |
this.extend = startEvent.shiftKey;
|
8645 |
this.extend = startEvent.shiftKey;
|
| Línea 8182... |
Línea 8651... |
| 8182 |
// effect of starting the selection
|
8651 |
// effect of starting the selection
|
| 8183 |
if (this.dragging === false)
|
8652 |
if (this.dragging === false)
|
| 8184 |
this.select(event);
|
8653 |
this.select(event);
|
| 8185 |
}
|
8654 |
}
|
| 8186 |
move(event) {
|
8655 |
move(event) {
|
| 8187 |
var _a;
|
- |
|
| 8188 |
if (event.buttons == 0)
|
8656 |
if (event.buttons == 0)
|
| 8189 |
return this.destroy();
|
8657 |
return this.destroy();
|
| 8190 |
if (this.dragging || this.dragging == null && dist(this.startEvent, event) < 10)
|
8658 |
if (this.dragging || this.dragging == null && dist(this.startEvent, event) < 10)
|
| 8191 |
return;
|
8659 |
return;
|
| 8192 |
this.select(this.lastEvent = event);
|
8660 |
this.select(this.lastEvent = event);
|
| 8193 |
let sx = 0, sy = 0;
|
8661 |
let sx = 0, sy = 0;
|
| - |
|
8662 |
let left = 0, top = 0, right = this.view.win.innerWidth, bottom = this.view.win.innerHeight;
|
| - |
|
8663 |
if (this.scrollParents.x)
|
| 8194 |
let rect = ((_a = this.scrollParent) === null || _a === void 0 ? void 0 : _a.getBoundingClientRect())
|
8664 |
({ left, right } = this.scrollParents.x.getBoundingClientRect());
|
| - |
|
8665 |
if (this.scrollParents.y)
|
| 8195 |
|| { left: 0, top: 0, right: this.view.win.innerWidth, bottom: this.view.win.innerHeight };
|
8666 |
({ top, bottom } = this.scrollParents.y.getBoundingClientRect());
|
| 8196 |
let margins = getScrollMargins(this.view);
|
8667 |
let margins = getScrollMargins(this.view);
|
| 8197 |
if (event.clientX - margins.left <= rect.left + dragScrollMargin)
|
8668 |
if (event.clientX - margins.left <= left + dragScrollMargin)
|
| 8198 |
sx = -dragScrollSpeed(rect.left - event.clientX);
|
8669 |
sx = -dragScrollSpeed(left - event.clientX);
|
| 8199 |
else if (event.clientX + margins.right >= rect.right - dragScrollMargin)
|
8670 |
else if (event.clientX + margins.right >= right - dragScrollMargin)
|
| 8200 |
sx = dragScrollSpeed(event.clientX - rect.right);
|
8671 |
sx = dragScrollSpeed(event.clientX - right);
|
| 8201 |
if (event.clientY - margins.top <= rect.top + dragScrollMargin)
|
8672 |
if (event.clientY - margins.top <= top + dragScrollMargin)
|
| 8202 |
sy = -dragScrollSpeed(rect.top - event.clientY);
|
8673 |
sy = -dragScrollSpeed(top - event.clientY);
|
| 8203 |
else if (event.clientY + margins.bottom >= rect.bottom - dragScrollMargin)
|
8674 |
else if (event.clientY + margins.bottom >= bottom - dragScrollMargin)
|
| 8204 |
sy = dragScrollSpeed(event.clientY - rect.bottom);
|
8675 |
sy = dragScrollSpeed(event.clientY - bottom);
|
| 8205 |
this.setScrollSpeed(sx, sy);
|
8676 |
this.setScrollSpeed(sx, sy);
|
| 8206 |
}
|
8677 |
}
|
| 8207 |
up(event) {
|
8678 |
up(event) {
|
| 8208 |
if (this.dragging == null)
|
8679 |
if (this.dragging == null)
|
| 8209 |
this.select(this.lastEvent);
|
8680 |
this.select(this.lastEvent);
|
| Línea 8228... |
Línea 8699... |
| 8228 |
clearInterval(this.scrolling);
|
8699 |
clearInterval(this.scrolling);
|
| 8229 |
this.scrolling = -1;
|
8700 |
this.scrolling = -1;
|
| 8230 |
}
|
8701 |
}
|
| 8231 |
}
|
8702 |
}
|
| 8232 |
scroll() {
|
8703 |
scroll() {
|
| - |
|
8704 |
let { x, y } = this.scrollSpeed;
|
| 8233 |
if (this.scrollParent) {
|
8705 |
if (x && this.scrollParents.x) {
|
| 8234 |
this.scrollParent.scrollLeft += this.scrollSpeed.x;
|
8706 |
this.scrollParents.x.scrollLeft += x;
|
| 8235 |
this.scrollParent.scrollTop += this.scrollSpeed.y;
|
8707 |
x = 0;
|
| 8236 |
}
|
8708 |
}
|
| 8237 |
else {
|
8709 |
if (y && this.scrollParents.y) {
|
| 8238 |
this.view.win.scrollBy(this.scrollSpeed.x, this.scrollSpeed.y);
|
8710 |
this.scrollParents.y.scrollTop += y;
|
| - |
|
8711 |
y = 0;
|
| 8239 |
}
|
8712 |
}
|
| - |
|
8713 |
if (x || y)
|
| - |
|
8714 |
this.view.win.scrollBy(x, y);
|
| 8240 |
if (this.dragging === false)
|
8715 |
if (this.dragging === false)
|
| 8241 |
this.select(this.lastEvent);
|
8716 |
this.select(this.lastEvent);
|
| 8242 |
}
|
8717 |
}
|
| 8243 |
skipAtoms(sel) {
|
8718 |
skipAtoms(sel) {
|
| 8244 |
let ranges = null;
|
8719 |
let ranges = null;
|
| Línea 8271... |
Línea 8746... |
| 8271 |
userEvent: "select.pointer"
|
8746 |
userEvent: "select.pointer"
|
| 8272 |
});
|
8747 |
});
|
| 8273 |
this.mustSelect = false;
|
8748 |
this.mustSelect = false;
|
| 8274 |
}
|
8749 |
}
|
| 8275 |
update(update) {
|
8750 |
update(update) {
|
| - |
|
8751 |
if (update.transactions.some(tr => tr.isUserEvent("input.type")))
|
| - |
|
8752 |
this.destroy();
|
| 8276 |
if (this.style.update(update))
|
8753 |
else if (this.style.update(update))
|
| 8277 |
setTimeout(() => this.select(this.lastEvent), 20);
|
8754 |
setTimeout(() => this.select(this.lastEvent), 20);
|
| 8278 |
}
|
8755 |
}
|
| 8279 |
}
|
8756 |
}
|
| 8280 |
function addsSelectionRange(view, event) {
|
8757 |
function addsSelectionRange(view, event) {
|
| 8281 |
let facet = view.state.facet(clickAddsSelectionRange);
|
8758 |
let facet = view.state.facet(clickAddsSelectionRange);
|
| Línea 8331... |
Línea 8808... |
| 8331 |
view.focus();
|
8808 |
view.focus();
|
| 8332 |
target.remove();
|
8809 |
target.remove();
|
| 8333 |
doPaste(view, target.value);
|
8810 |
doPaste(view, target.value);
|
| 8334 |
}, 50);
|
8811 |
}, 50);
|
| 8335 |
}
|
8812 |
}
|
| - |
|
8813 |
function textFilter(state, facet, text) {
|
| - |
|
8814 |
for (let filter of state.facet(facet))
|
| - |
|
8815 |
text = filter(text, state);
|
| - |
|
8816 |
return text;
|
| - |
|
8817 |
}
|
| 8336 |
function doPaste(view, input) {
|
8818 |
function doPaste(view, input) {
|
| - |
|
8819 |
input = textFilter(view.state, clipboardInputFilter, input);
|
| 8337 |
let { state } = view, changes, i = 1, text = state.toText(input);
|
8820 |
let { state } = view, changes, i = 1, text = state.toText(input);
|
| 8338 |
let byLine = text.lines == state.selection.ranges.length;
|
8821 |
let byLine = text.lines == state.selection.ranges.length;
|
| 8339 |
let linewise = lastLinewiseCopy != null && state.selection.ranges.every(r => r.empty) && lastLinewiseCopy == text.toString();
|
8822 |
let linewise = lastLinewiseCopy != null && state.selection.ranges.every(r => r.empty) && lastLinewiseCopy == text.toString();
|
| 8340 |
if (linewise) {
|
8823 |
if (linewise) {
|
| 8341 |
let lastLine = -1;
|
8824 |
let lastLine = -1;
|
| Línea 8368... |
Línea 8851... |
| 8368 |
view.inputState.lastScrollTop = view.scrollDOM.scrollTop;
|
8851 |
view.inputState.lastScrollTop = view.scrollDOM.scrollTop;
|
| 8369 |
view.inputState.lastScrollLeft = view.scrollDOM.scrollLeft;
|
8852 |
view.inputState.lastScrollLeft = view.scrollDOM.scrollLeft;
|
| 8370 |
};
|
8853 |
};
|
| 8371 |
handlers.keydown = (view, event) => {
|
8854 |
handlers.keydown = (view, event) => {
|
| 8372 |
view.inputState.setSelectionOrigin("select");
|
8855 |
view.inputState.setSelectionOrigin("select");
|
| 8373 |
if (event.keyCode == 27)
|
8856 |
if (event.keyCode == 27 && view.inputState.tabFocusMode != 0)
|
| 8374 |
view.inputState.lastEscPress = Date.now();
|
8857 |
view.inputState.tabFocusMode = Date.now() + 2000;
|
| 8375 |
return false;
|
8858 |
return false;
|
| 8376 |
};
|
8859 |
};
|
| 8377 |
observers.touchstart = (view, e) => {
|
8860 |
observers.touchstart = (view, e) => {
|
| 8378 |
view.inputState.lastTouchTime = Date.now();
|
8861 |
view.inputState.lastTouchTime = Date.now();
|
| 8379 |
view.inputState.setSelectionOrigin("select.pointer");
|
8862 |
view.inputState.setSelectionOrigin("select.pointer");
|
| Línea 8395... |
Línea 8878... |
| 8395 |
style = basicMouseSelection(view, event);
|
8878 |
style = basicMouseSelection(view, event);
|
| 8396 |
if (style) {
|
8879 |
if (style) {
|
| 8397 |
let mustFocus = !view.hasFocus;
|
8880 |
let mustFocus = !view.hasFocus;
|
| 8398 |
view.inputState.startMouseSelection(new MouseSelection(view, event, style, mustFocus));
|
8881 |
view.inputState.startMouseSelection(new MouseSelection(view, event, style, mustFocus));
|
| 8399 |
if (mustFocus)
|
8882 |
if (mustFocus)
|
| - |
|
8883 |
view.observer.ignore(() => {
|
| 8400 |
view.observer.ignore(() => focusPreventScroll(view.contentDOM));
|
8884 |
focusPreventScroll(view.contentDOM);
|
| - |
|
8885 |
let active = view.root.activeElement;
|
| - |
|
8886 |
if (active && !active.contains(view.contentDOM))
|
| - |
|
8887 |
active.blur();
|
| - |
|
8888 |
});
|
| 8401 |
let mouseSel = view.inputState.mouseSelection;
|
8889 |
let mouseSel = view.inputState.mouseSelection;
|
| 8402 |
if (mouseSel) {
|
8890 |
if (mouseSel) {
|
| 8403 |
mouseSel.start(event);
|
8891 |
mouseSel.start(event);
|
| 8404 |
return mouseSel.dragging === false;
|
8892 |
return mouseSel.dragging === false;
|
| 8405 |
}
|
8893 |
}
|
| Línea 8419... |
Línea 8907... |
| 8419 |
if (to < view.state.doc.length && to == line.to)
|
8907 |
if (to < view.state.doc.length && to == line.to)
|
| 8420 |
to++;
|
8908 |
to++;
|
| 8421 |
return EditorSelection.range(from, to);
|
8909 |
return EditorSelection.range(from, to);
|
| 8422 |
}
|
8910 |
}
|
| 8423 |
}
|
8911 |
}
|
| 8424 |
let insideY = (y, rect) => y >= rect.top && y <= rect.bottom;
|
- |
|
| 8425 |
let inside = (x, y, rect) => insideY(y, rect) && x >= rect.left && x <= rect.right;
|
8912 |
let inside = (x, y, rect) => y >= rect.top && y <= rect.bottom && x >= rect.left && x <= rect.right;
|
| 8426 |
// Try to determine, for the given coordinates, associated with the
|
8913 |
// Try to determine, for the given coordinates, associated with the
|
| 8427 |
// given position, whether they are related to the element before or
|
8914 |
// given position, whether they are related to the element before or
|
| 8428 |
// the element after the position.
|
8915 |
// the element after the position.
|
| 8429 |
function findPositionSide(view, pos, x, y) {
|
8916 |
function findPositionSide(view, pos, x, y) {
|
| 8430 |
let line = LineView.find(view.docView, pos);
|
8917 |
let line = LineView.find(view.docView, pos);
|
| Línea 8442... |
Línea 8929... |
| 8442 |
return -1;
|
8929 |
return -1;
|
| 8443 |
let after = line.coordsAt(off, 1);
|
8930 |
let after = line.coordsAt(off, 1);
|
| 8444 |
if (after && inside(x, y, after))
|
8931 |
if (after && inside(x, y, after))
|
| 8445 |
return 1;
|
8932 |
return 1;
|
| 8446 |
// This is probably a line wrap point. Pick before if the point is
|
8933 |
// This is probably a line wrap point. Pick before if the point is
|
| 8447 |
// beside it.
|
8934 |
// above its bottom.
|
| 8448 |
return before && insideY(y, before) ? -1 : 1;
|
8935 |
return before && before.bottom >= y ? -1 : 1;
|
| 8449 |
}
|
8936 |
}
|
| 8450 |
function queryPos(view, event) {
|
8937 |
function queryPos(view, event) {
|
| 8451 |
let pos = view.posAtCoords({ x: event.clientX, y: event.clientY }, false);
|
8938 |
let pos = view.posAtCoords({ x: event.clientX, y: event.clientY }, false);
|
| 8452 |
return { pos, bias: findPositionSide(view, pos, event.clientX, event.clientY) };
|
8939 |
return { pos, bias: findPositionSide(view, pos, event.clientX, event.clientY) };
|
| 8453 |
}
|
8940 |
}
|
| Línea 8512... |
Línea 8999... |
| 8512 |
let { inputState } = view;
|
8999 |
let { inputState } = view;
|
| 8513 |
if (inputState.mouseSelection)
|
9000 |
if (inputState.mouseSelection)
|
| 8514 |
inputState.mouseSelection.dragging = true;
|
9001 |
inputState.mouseSelection.dragging = true;
|
| 8515 |
inputState.draggedContent = range;
|
9002 |
inputState.draggedContent = range;
|
| 8516 |
if (event.dataTransfer) {
|
9003 |
if (event.dataTransfer) {
|
| 8517 |
event.dataTransfer.setData("Text", view.state.sliceDoc(range.from, range.to));
|
9004 |
event.dataTransfer.setData("Text", textFilter(view.state, clipboardOutputFilter, view.state.sliceDoc(range.from, range.to)));
|
| 8518 |
event.dataTransfer.effectAllowed = "copyMove";
|
9005 |
event.dataTransfer.effectAllowed = "copyMove";
|
| 8519 |
}
|
9006 |
}
|
| 8520 |
return false;
|
9007 |
return false;
|
| 8521 |
};
|
9008 |
};
|
| 8522 |
handlers.dragend = view => {
|
9009 |
handlers.dragend = view => {
|
| 8523 |
view.inputState.draggedContent = null;
|
9010 |
view.inputState.draggedContent = null;
|
| 8524 |
return false;
|
9011 |
return false;
|
| 8525 |
};
|
9012 |
};
|
| 8526 |
function dropText(view, event, text, direct) {
|
9013 |
function dropText(view, event, text, direct) {
|
| - |
|
9014 |
text = textFilter(view.state, clipboardInputFilter, text);
|
| 8527 |
if (!text)
|
9015 |
if (!text)
|
| 8528 |
return;
|
9016 |
return;
|
| 8529 |
let dropPos = view.posAtCoords({ x: event.clientX, y: event.clientY }, false);
|
9017 |
let dropPos = view.posAtCoords({ x: event.clientX, y: event.clientY }, false);
|
| 8530 |
let { draggedContent } = view.inputState;
|
9018 |
let { draggedContent } = view.inputState;
|
| 8531 |
let del = direct && draggedContent && dragMovesSelection(view, event)
|
9019 |
let del = direct && draggedContent && dragMovesSelection(view, event)
|
| Línea 8622... |
Línea 9110... |
| 8622 |
}
|
9110 |
}
|
| 8623 |
upto = line.number;
|
9111 |
upto = line.number;
|
| 8624 |
}
|
9112 |
}
|
| 8625 |
linewise = true;
|
9113 |
linewise = true;
|
| 8626 |
}
|
9114 |
}
|
| 8627 |
return { text: content.join(state.lineBreak), ranges, linewise };
|
9115 |
return { text: textFilter(state, clipboardOutputFilter, content.join(state.lineBreak)), ranges, linewise };
|
| 8628 |
}
|
9116 |
}
|
| 8629 |
let lastLinewiseCopy = null;
|
9117 |
let lastLinewiseCopy = null;
|
| 8630 |
handlers.copy = handlers.cut = (view, event) => {
|
9118 |
handlers.copy = handlers.cut = (view, event) => {
|
| 8631 |
let { text, ranges, linewise } = copiedRange(view.state);
|
9119 |
let { text, ranges, linewise } = copiedRange(view.state);
|
| 8632 |
if (!text && !linewise)
|
9120 |
if (!text && !linewise)
|
| Línea 8683... |
Línea 9171... |
| 8683 |
observers.blur = view => {
|
9171 |
observers.blur = view => {
|
| 8684 |
view.observer.clearSelectionRange();
|
9172 |
view.observer.clearSelectionRange();
|
| 8685 |
updateForFocusChange(view);
|
9173 |
updateForFocusChange(view);
|
| 8686 |
};
|
9174 |
};
|
| 8687 |
observers.compositionstart = observers.compositionupdate = view => {
|
9175 |
observers.compositionstart = observers.compositionupdate = view => {
|
| - |
|
9176 |
if (view.observer.editContext)
|
| - |
|
9177 |
return; // Composition handled by edit context
|
| 8688 |
if (view.inputState.compositionFirstChange == null)
|
9178 |
if (view.inputState.compositionFirstChange == null)
|
| 8689 |
view.inputState.compositionFirstChange = true;
|
9179 |
view.inputState.compositionFirstChange = true;
|
| 8690 |
if (view.inputState.composing < 0) {
|
9180 |
if (view.inputState.composing < 0) {
|
| 8691 |
// FIXME possibly set a timeout to clear it again on Android
|
9181 |
// FIXME possibly set a timeout to clear it again on Android
|
| 8692 |
view.inputState.composing = 0;
|
9182 |
view.inputState.composing = 0;
|
| 8693 |
}
|
9183 |
}
|
| 8694 |
};
|
9184 |
};
|
| 8695 |
observers.compositionend = view => {
|
9185 |
observers.compositionend = view => {
|
| - |
|
9186 |
if (view.observer.editContext)
|
| - |
|
9187 |
return; // Composition handled by edit context
|
| 8696 |
view.inputState.composing = -1;
|
9188 |
view.inputState.composing = -1;
|
| 8697 |
view.inputState.compositionEndedAt = Date.now();
|
9189 |
view.inputState.compositionEndedAt = Date.now();
|
| 8698 |
view.inputState.compositionPendingKey = true;
|
9190 |
view.inputState.compositionPendingKey = true;
|
| 8699 |
view.inputState.compositionPendingChange = view.observer.pendingRecords().length > 0;
|
9191 |
view.inputState.compositionPendingChange = view.observer.pendingRecords().length > 0;
|
| 8700 |
view.inputState.compositionFirstChange = null;
|
9192 |
view.inputState.compositionFirstChange = null;
|
| Línea 8718... |
Línea 9210... |
| 8718 |
};
|
9210 |
};
|
| 8719 |
observers.contextmenu = view => {
|
9211 |
observers.contextmenu = view => {
|
| 8720 |
view.inputState.lastContextMenu = Date.now();
|
9212 |
view.inputState.lastContextMenu = Date.now();
|
| 8721 |
};
|
9213 |
};
|
| 8722 |
handlers.beforeinput = (view, event) => {
|
9214 |
handlers.beforeinput = (view, event) => {
|
| 8723 |
var _a;
|
9215 |
var _a, _b;
|
| - |
|
9216 |
// In EditContext mode, we must handle insertReplacementText events
|
| - |
|
9217 |
// directly, to make spell checking corrections work
|
| - |
|
9218 |
if (event.inputType == "insertReplacementText" && view.observer.editContext) {
|
| - |
|
9219 |
let text = (_a = event.dataTransfer) === null || _a === void 0 ? void 0 : _a.getData("text/plain"), ranges = event.getTargetRanges();
|
| - |
|
9220 |
if (text && ranges.length) {
|
| - |
|
9221 |
let r = ranges[0];
|
| - |
|
9222 |
let from = view.posAtDOM(r.startContainer, r.startOffset), to = view.posAtDOM(r.endContainer, r.endOffset);
|
| - |
|
9223 |
applyDOMChangeInner(view, { from, to, insert: view.state.toText(text) }, null);
|
| - |
|
9224 |
return true;
|
| - |
|
9225 |
}
|
| - |
|
9226 |
}
|
| 8724 |
// Because Chrome Android doesn't fire useful key events, use
|
9227 |
// Because Chrome Android doesn't fire useful key events, use
|
| 8725 |
// beforeinput to detect backspace (and possibly enter and delete,
|
9228 |
// beforeinput to detect backspace (and possibly enter and delete,
|
| 8726 |
// but those usually don't even seem to fire beforeinput events at
|
9229 |
// but those usually don't even seem to fire beforeinput events at
|
| 8727 |
// the moment) and fake a key event for it.
|
9230 |
// the moment) and fake a key event for it.
|
| 8728 |
//
|
9231 |
//
|
| Línea 8730... |
Línea 9233... |
| 8730 |
// seems to do nothing at all on Chrome).
|
9233 |
// seems to do nothing at all on Chrome).
|
| 8731 |
let pending;
|
9234 |
let pending;
|
| 8732 |
if (browser.chrome && browser.android && (pending = PendingKeys.find(key => key.inputType == event.inputType))) {
|
9235 |
if (browser.chrome && browser.android && (pending = PendingKeys.find(key => key.inputType == event.inputType))) {
|
| 8733 |
view.observer.delayAndroidKey(pending.key, pending.keyCode);
|
9236 |
view.observer.delayAndroidKey(pending.key, pending.keyCode);
|
| 8734 |
if (pending.key == "Backspace" || pending.key == "Delete") {
|
9237 |
if (pending.key == "Backspace" || pending.key == "Delete") {
|
| 8735 |
let startViewHeight = ((_a = window.visualViewport) === null || _a === void 0 ? void 0 : _a.height) || 0;
|
9238 |
let startViewHeight = ((_b = window.visualViewport) === null || _b === void 0 ? void 0 : _b.height) || 0;
|
| 8736 |
setTimeout(() => {
|
9239 |
setTimeout(() => {
|
| 8737 |
var _a;
|
9240 |
var _a;
|
| 8738 |
// Backspacing near uneditable nodes on Chrome Android sometimes
|
9241 |
// Backspacing near uneditable nodes on Chrome Android sometimes
|
| 8739 |
// closes the virtual keyboard. This tries to crudely detect
|
9242 |
// closes the virtual keyboard. This tries to crudely detect
|
| 8740 |
// that and refocus to get it back.
|
9243 |
// that and refocus to get it back.
|
| Línea 8769... |
Línea 9272... |
| 8769 |
doc.addEventListener("cut", () => { });
|
9272 |
doc.addEventListener("cut", () => { });
|
| 8770 |
}
|
9273 |
}
|
| 8771 |
}
|
9274 |
}
|
| Línea 8772... |
Línea 9275... |
| 8772 |
|
9275 |
|
| - |
|
9276 |
const wrappingWhiteSpace = ["pre-wrap", "normal", "pre-line", "break-spaces"];
|
| - |
|
9277 |
// Used to track, during updateHeight, if any actual heights changed
|
| - |
|
9278 |
let heightChangeFlag = false;
|
| 8773 |
const wrappingWhiteSpace = ["pre-wrap", "normal", "pre-line", "break-spaces"];
|
9279 |
function clearHeightChangeFlag() { heightChangeFlag = false; }
|
| 8774 |
class HeightOracle {
|
9280 |
class HeightOracle {
|
| 8775 |
constructor(lineWrapping) {
|
9281 |
constructor(lineWrapping) {
|
| 8776 |
this.lineWrapping = lineWrapping;
|
9282 |
this.lineWrapping = lineWrapping;
|
| 8777 |
this.doc = Text.empty;
|
9283 |
this.doc = Text.empty;
|
| 8778 |
this.heightSamples = {};
|
9284 |
this.heightSamples = {};
|
| 8779 |
this.lineHeight = 14; // The height of an entire line (line-height)
|
9285 |
this.lineHeight = 14; // The height of an entire line (line-height)
|
| 8780 |
this.charWidth = 7;
|
9286 |
this.charWidth = 7;
|
| 8781 |
this.textHeight = 14; // The height of the actual font (font-size)
|
9287 |
this.textHeight = 14; // The height of the actual font (font-size)
|
| 8782 |
this.lineLength = 30;
|
- |
|
| 8783 |
// Used to track, during updateHeight, if any actual heights changed
|
- |
|
| 8784 |
this.heightChanged = false;
|
9288 |
this.lineLength = 30;
|
| 8785 |
}
|
9289 |
}
|
| 8786 |
heightForGap(from, to) {
|
9290 |
heightForGap(from, to) {
|
| 8787 |
let lines = this.doc.lineAt(to).number - this.doc.lineAt(from).number + 1;
|
9291 |
let lines = this.doc.lineAt(to).number - this.doc.lineAt(from).number + 1;
|
| 8788 |
if (this.lineWrapping)
|
9292 |
if (this.lineWrapping)
|
| Línea 8936... |
Línea 9440... |
| 8936 |
this.length = length;
|
9440 |
this.length = length;
|
| 8937 |
this.height = height;
|
9441 |
this.height = height;
|
| 8938 |
this.flags = flags;
|
9442 |
this.flags = flags;
|
| 8939 |
}
|
9443 |
}
|
| 8940 |
get outdated() { return (this.flags & 2 /* Flag.Outdated */) > 0; }
|
9444 |
get outdated() { return (this.flags & 2 /* Flag.Outdated */) > 0; }
|
| 8941 |
set outdated(value) { this.flags = (value ? 2 /* Flag.Outdated */ : 0) | (this.flags & ~2 /* Flag.Outdated */); }
|
9445 |
set outdated(value) { this.flags = (value ? 2 /* Flag.Outdated */ : 0) | (this.flags & -3 /* Flag.Outdated */); }
|
| 8942 |
setHeight(oracle, height) {
|
9446 |
setHeight(height) {
|
| 8943 |
if (this.height != height) {
|
9447 |
if (this.height != height) {
|
| 8944 |
if (Math.abs(this.height - height) > Epsilon)
|
9448 |
if (Math.abs(this.height - height) > Epsilon)
|
| 8945 |
oracle.heightChanged = true;
|
9449 |
heightChangeFlag = true;
|
| 8946 |
this.height = height;
|
9450 |
this.height = height;
|
| 8947 |
}
|
9451 |
}
|
| 8948 |
}
|
9452 |
}
|
| 8949 |
// Base case is to replace a leaf node, which simply builds a tree
|
9453 |
// Base case is to replace a leaf node, which simply builds a tree
|
| 8950 |
// from the new nodes and returns that (HeightMapBranch and
|
9454 |
// from the new nodes and returns that (HeightMapBranch and
|
| Línea 8971... |
Línea 9475... |
| 8971 |
start = me.lineAt(fromA, QueryType$1.ByPosNoHeight, oracle, 0, 0);
|
9475 |
start = me.lineAt(fromA, QueryType$1.ByPosNoHeight, oracle, 0, 0);
|
| 8972 |
}
|
9476 |
}
|
| 8973 |
fromB += start.from - fromA;
|
9477 |
fromB += start.from - fromA;
|
| 8974 |
fromA = start.from;
|
9478 |
fromA = start.from;
|
| 8975 |
let nodes = NodeBuilder.build(oracle.setDoc(doc), decorations, fromB, toB);
|
9479 |
let nodes = NodeBuilder.build(oracle.setDoc(doc), decorations, fromB, toB);
|
| 8976 |
me = me.replace(fromA, toA, nodes);
|
9480 |
me = replace(me, me.replace(fromA, toA, nodes));
|
| 8977 |
}
|
9481 |
}
|
| 8978 |
return me.updateHeight(oracle, 0);
|
9482 |
return me.updateHeight(oracle, 0);
|
| 8979 |
}
|
9483 |
}
|
| 8980 |
static empty() { return new HeightMapText(0, 0); }
|
9484 |
static empty() { return new HeightMapText(0, 0); }
|
| 8981 |
// nodes uses null values to indicate the position of line breaks.
|
9485 |
// nodes uses null values to indicate the position of line breaks.
|
| Línea 9031... |
Línea 9535... |
| 9031 |
j++;
|
9535 |
j++;
|
| 9032 |
}
|
9536 |
}
|
| 9033 |
return new HeightMapBranch(HeightMap.of(nodes.slice(0, i)), brk, HeightMap.of(nodes.slice(j)));
|
9537 |
return new HeightMapBranch(HeightMap.of(nodes.slice(0, i)), brk, HeightMap.of(nodes.slice(j)));
|
| 9034 |
}
|
9538 |
}
|
| 9035 |
}
|
9539 |
}
|
| - |
|
9540 |
function replace(old, val) {
|
| - |
|
9541 |
if (old == val)
|
| - |
|
9542 |
return old;
|
| - |
|
9543 |
if (old.constructor != val.constructor)
|
| - |
|
9544 |
heightChangeFlag = true;
|
| - |
|
9545 |
return val;
|
| - |
|
9546 |
}
|
| 9036 |
HeightMap.prototype.size = 1;
|
9547 |
HeightMap.prototype.size = 1;
|
| 9037 |
class HeightMapBlock extends HeightMap {
|
9548 |
class HeightMapBlock extends HeightMap {
|
| 9038 |
constructor(length, height, deco) {
|
9549 |
constructor(length, height, deco) {
|
| 9039 |
super(length, height);
|
9550 |
super(length, height);
|
| 9040 |
this.deco = deco;
|
9551 |
this.deco = deco;
|
| Línea 9049... |
Línea 9560... |
| 9049 |
if (from <= offset + this.length && to >= offset)
|
9560 |
if (from <= offset + this.length && to >= offset)
|
| 9050 |
f(this.blockAt(0, oracle, top, offset));
|
9561 |
f(this.blockAt(0, oracle, top, offset));
|
| 9051 |
}
|
9562 |
}
|
| 9052 |
updateHeight(oracle, offset = 0, _force = false, measured) {
|
9563 |
updateHeight(oracle, offset = 0, _force = false, measured) {
|
| 9053 |
if (measured && measured.from <= offset && measured.more)
|
9564 |
if (measured && measured.from <= offset && measured.more)
|
| 9054 |
this.setHeight(oracle, measured.heights[measured.index++]);
|
9565 |
this.setHeight(measured.heights[measured.index++]);
|
| 9055 |
this.outdated = false;
|
9566 |
this.outdated = false;
|
| 9056 |
return this;
|
9567 |
return this;
|
| 9057 |
}
|
9568 |
}
|
| 9058 |
toString() { return `block(${this.length})`; }
|
9569 |
toString() { return `block(${this.length})`; }
|
| 9059 |
}
|
9570 |
}
|
| Línea 9083... |
Línea 9594... |
| 9083 |
return HeightMap.of(nodes);
|
9594 |
return HeightMap.of(nodes);
|
| 9084 |
}
|
9595 |
}
|
| 9085 |
}
|
9596 |
}
|
| 9086 |
updateHeight(oracle, offset = 0, force = false, measured) {
|
9597 |
updateHeight(oracle, offset = 0, force = false, measured) {
|
| 9087 |
if (measured && measured.from <= offset && measured.more)
|
9598 |
if (measured && measured.from <= offset && measured.more)
|
| 9088 |
this.setHeight(oracle, measured.heights[measured.index++]);
|
9599 |
this.setHeight(measured.heights[measured.index++]);
|
| 9089 |
else if (force || this.outdated)
|
9600 |
else if (force || this.outdated)
|
| 9090 |
this.setHeight(oracle, Math.max(this.widgetHeight, oracle.heightForLine(this.length - this.collapsed)) +
|
9601 |
this.setHeight(Math.max(this.widgetHeight, oracle.heightForLine(this.length - this.collapsed)) +
|
| 9091 |
this.breaks * oracle.lineHeight);
|
9602 |
this.breaks * oracle.lineHeight);
|
| 9092 |
this.outdated = false;
|
9603 |
this.outdated = false;
|
| 9093 |
return this;
|
9604 |
return this;
|
| 9094 |
}
|
9605 |
}
|
| 9095 |
toString() {
|
9606 |
toString() {
|
| Línea 9208... |
Línea 9719... |
| 9208 |
if (pos <= end)
|
9719 |
if (pos <= end)
|
| 9209 |
nodes.push(null, new HeightMapGap(end - pos).updateHeight(oracle, pos));
|
9720 |
nodes.push(null, new HeightMapGap(end - pos).updateHeight(oracle, pos));
|
| 9210 |
let result = HeightMap.of(nodes);
|
9721 |
let result = HeightMap.of(nodes);
|
| 9211 |
if (singleHeight < 0 || Math.abs(result.height - this.height) >= Epsilon ||
|
9722 |
if (singleHeight < 0 || Math.abs(result.height - this.height) >= Epsilon ||
|
| 9212 |
Math.abs(singleHeight - this.heightMetrics(oracle, offset).perLine) >= Epsilon)
|
9723 |
Math.abs(singleHeight - this.heightMetrics(oracle, offset).perLine) >= Epsilon)
|
| 9213 |
oracle.heightChanged = true;
|
9724 |
heightChangeFlag = true;
|
| 9214 |
return result;
|
9725 |
return replace(this, result);
|
| 9215 |
}
|
9726 |
}
|
| 9216 |
else if (force || this.outdated) {
|
9727 |
else if (force || this.outdated) {
|
| 9217 |
this.setHeight(oracle, oracle.heightForGap(offset, offset + this.length));
|
9728 |
this.setHeight(oracle.heightForGap(offset, offset + this.length));
|
| 9218 |
this.outdated = false;
|
9729 |
this.outdated = false;
|
| 9219 |
}
|
9730 |
}
|
| 9220 |
return this;
|
9731 |
return this;
|
| 9221 |
}
|
9732 |
}
|
| 9222 |
toString() { return `gap(${this.length})`; }
|
9733 |
toString() { return `gap(${this.length})`; }
|
| Línea 9310... |
Línea 9821... |
| 9310 |
result.push(this.right);
|
9821 |
result.push(this.right);
|
| 9311 |
}
|
9822 |
}
|
| 9312 |
balanced(left, right) {
|
9823 |
balanced(left, right) {
|
| 9313 |
if (left.size > 2 * right.size || right.size > 2 * left.size)
|
9824 |
if (left.size > 2 * right.size || right.size > 2 * left.size)
|
| 9314 |
return HeightMap.of(this.break ? [left, null, right] : [left, right]);
|
9825 |
return HeightMap.of(this.break ? [left, null, right] : [left, right]);
|
| 9315 |
this.left = left;
|
9826 |
this.left = replace(this.left, left);
|
| 9316 |
this.right = right;
|
9827 |
this.right = replace(this.right, right);
|
| 9317 |
this.height = left.height + right.height;
|
9828 |
this.setHeight(left.height + right.height);
|
| 9318 |
this.outdated = left.outdated || right.outdated;
|
9829 |
this.outdated = left.outdated || right.outdated;
|
| 9319 |
this.size = left.size + right.size;
|
9830 |
this.size = left.size + right.size;
|
| 9320 |
this.length = left.length + this.break + right.length;
|
9831 |
this.length = left.length + this.break + right.length;
|
| 9321 |
return this;
|
9832 |
return this;
|
| 9322 |
}
|
9833 |
}
|
| Línea 9497... |
Línea 10008... |
| 9497 |
style.overflow != "visible") {
|
10008 |
style.overflow != "visible") {
|
| 9498 |
let parentRect = elt.getBoundingClientRect();
|
10009 |
let parentRect = elt.getBoundingClientRect();
|
| 9499 |
left = Math.max(left, parentRect.left);
|
10010 |
left = Math.max(left, parentRect.left);
|
| 9500 |
right = Math.min(right, parentRect.right);
|
10011 |
right = Math.min(right, parentRect.right);
|
| 9501 |
top = Math.max(top, parentRect.top);
|
10012 |
top = Math.max(top, parentRect.top);
|
| 9502 |
bottom = parent == dom.parentNode ? parentRect.bottom : Math.min(bottom, parentRect.bottom);
|
10013 |
bottom = Math.min(parent == dom.parentNode ? win.innerHeight : bottom, parentRect.bottom);
|
| 9503 |
}
|
10014 |
}
|
| 9504 |
parent = style.position == "absolute" || style.position == "fixed" ? elt.offsetParent : elt.parentNode;
|
10015 |
parent = style.position == "absolute" || style.position == "fixed" ? elt.offsetParent : elt.parentNode;
|
| 9505 |
}
|
10016 |
}
|
| 9506 |
else if (parent.nodeType == 11) { // Shadow root
|
10017 |
else if (parent.nodeType == 11) { // Shadow root
|
| 9507 |
parent = parent.host;
|
10018 |
parent = parent.host;
|
| Línea 9511... |
Línea 10022... |
| 9511 |
}
|
10022 |
}
|
| 9512 |
}
|
10023 |
}
|
| 9513 |
return { left: left - rect.left, right: Math.max(left, right) - rect.left,
|
10024 |
return { left: left - rect.left, right: Math.max(left, right) - rect.left,
|
| 9514 |
top: top - (rect.top + paddingTop), bottom: Math.max(top, bottom) - (rect.top + paddingTop) };
|
10025 |
top: top - (rect.top + paddingTop), bottom: Math.max(top, bottom) - (rect.top + paddingTop) };
|
| 9515 |
}
|
10026 |
}
|
| - |
|
10027 |
function inWindow(elt) {
|
| - |
|
10028 |
let rect = elt.getBoundingClientRect(), win = elt.ownerDocument.defaultView || window;
|
| - |
|
10029 |
return rect.left < win.innerWidth && rect.right > 0 &&
|
| - |
|
10030 |
rect.top < win.innerHeight && rect.bottom > 0;
|
| - |
|
10031 |
}
|
| 9516 |
function fullPixelRange(dom, paddingTop) {
|
10032 |
function fullPixelRange(dom, paddingTop) {
|
| 9517 |
let rect = dom.getBoundingClientRect();
|
10033 |
let rect = dom.getBoundingClientRect();
|
| 9518 |
return { left: 0, right: rect.right - rect.left,
|
10034 |
return { left: 0, right: rect.right - rect.left,
|
| 9519 |
top: paddingTop, bottom: rect.bottom - (rect.top + paddingTop) };
|
10035 |
top: paddingTop, bottom: rect.bottom - (rect.top + paddingTop) };
|
| 9520 |
}
|
10036 |
}
|
| 9521 |
// Line gaps are placeholder widgets used to hide pieces of overlong
|
10037 |
// Line gaps are placeholder widgets used to hide pieces of overlong
|
| 9522 |
// lines within the viewport, as a kludge to keep the editor
|
10038 |
// lines within the viewport, as a kludge to keep the editor
|
| 9523 |
// responsive when a ridiculously long line is loaded into it.
|
10039 |
// responsive when a ridiculously long line is loaded into it.
|
| 9524 |
class LineGap {
|
10040 |
class LineGap {
|
| 9525 |
constructor(from, to, size) {
|
10041 |
constructor(from, to, size, displaySize) {
|
| 9526 |
this.from = from;
|
10042 |
this.from = from;
|
| 9527 |
this.to = to;
|
10043 |
this.to = to;
|
| 9528 |
this.size = size;
|
10044 |
this.size = size;
|
| - |
|
10045 |
this.displaySize = displaySize;
|
| 9529 |
}
|
10046 |
}
|
| 9530 |
static same(a, b) {
|
10047 |
static same(a, b) {
|
| 9531 |
if (a.length != b.length)
|
10048 |
if (a.length != b.length)
|
| 9532 |
return false;
|
10049 |
return false;
|
| 9533 |
for (let i = 0; i < a.length; i++) {
|
10050 |
for (let i = 0; i < a.length; i++) {
|
| Línea 9537... |
Línea 10054... |
| 9537 |
}
|
10054 |
}
|
| 9538 |
return true;
|
10055 |
return true;
|
| 9539 |
}
|
10056 |
}
|
| 9540 |
draw(viewState, wrapping) {
|
10057 |
draw(viewState, wrapping) {
|
| 9541 |
return Decoration.replace({
|
10058 |
return Decoration.replace({
|
| 9542 |
widget: new LineGapWidget(this.size * (wrapping ? viewState.scaleY : viewState.scaleX), wrapping)
|
10059 |
widget: new LineGapWidget(this.displaySize * (wrapping ? viewState.scaleY : viewState.scaleX), wrapping)
|
| 9543 |
}).range(this.from, this.to);
|
10060 |
}).range(this.from, this.to);
|
| 9544 |
}
|
10061 |
}
|
| 9545 |
}
|
10062 |
}
|
| 9546 |
class LineGapWidget extends WidgetType {
|
10063 |
class LineGapWidget extends WidgetType {
|
| 9547 |
constructor(size, vertical) {
|
10064 |
constructor(size, vertical) {
|
| Línea 9575... |
Línea 10092... |
| 9575 |
this.contentDOMWidth = 0; // contentDOM.getBoundingClientRect().width
|
10092 |
this.contentDOMWidth = 0; // contentDOM.getBoundingClientRect().width
|
| 9576 |
this.contentDOMHeight = 0; // contentDOM.getBoundingClientRect().height
|
10093 |
this.contentDOMHeight = 0; // contentDOM.getBoundingClientRect().height
|
| 9577 |
this.editorHeight = 0; // scrollDOM.clientHeight, unscaled
|
10094 |
this.editorHeight = 0; // scrollDOM.clientHeight, unscaled
|
| 9578 |
this.editorWidth = 0; // scrollDOM.clientWidth, unscaled
|
10095 |
this.editorWidth = 0; // scrollDOM.clientWidth, unscaled
|
| 9579 |
this.scrollTop = 0; // Last seen scrollDOM.scrollTop, scaled
|
10096 |
this.scrollTop = 0; // Last seen scrollDOM.scrollTop, scaled
|
| 9580 |
this.scrolledToBottom = true;
|
10097 |
this.scrolledToBottom = false;
|
| 9581 |
// The CSS-transformation scale of the editor (transformed size /
|
10098 |
// The CSS-transformation scale of the editor (transformed size /
|
| 9582 |
// concrete size)
|
10099 |
// concrete size)
|
| 9583 |
this.scaleX = 1;
|
10100 |
this.scaleX = 1;
|
| 9584 |
this.scaleY = 1;
|
10101 |
this.scaleY = 1;
|
| 9585 |
// The vertical position (document-relative) to which to anchor the
|
10102 |
// The vertical position (document-relative) to which to anchor the
|
| Línea 9609... |
Línea 10126... |
| 9609 |
this.mustEnforceCursorAssoc = false;
|
10126 |
this.mustEnforceCursorAssoc = false;
|
| 9610 |
let guessWrapping = state.facet(contentAttributes).some(v => typeof v != "function" && v.class == "cm-lineWrapping");
|
10127 |
let guessWrapping = state.facet(contentAttributes).some(v => typeof v != "function" && v.class == "cm-lineWrapping");
|
| 9611 |
this.heightOracle = new HeightOracle(guessWrapping);
|
10128 |
this.heightOracle = new HeightOracle(guessWrapping);
|
| 9612 |
this.stateDeco = state.facet(decorations).filter(d => typeof d != "function");
|
10129 |
this.stateDeco = state.facet(decorations).filter(d => typeof d != "function");
|
| 9613 |
this.heightMap = HeightMap.empty().applyChanges(this.stateDeco, Text.empty, this.heightOracle.setDoc(state.doc), [new ChangedRange(0, 0, 0, state.doc.length)]);
|
10130 |
this.heightMap = HeightMap.empty().applyChanges(this.stateDeco, Text.empty, this.heightOracle.setDoc(state.doc), [new ChangedRange(0, 0, 0, state.doc.length)]);
|
| - |
|
10131 |
for (let i = 0; i < 2; i++) {
|
| 9614 |
this.viewport = this.getViewport(0, null);
|
10132 |
this.viewport = this.getViewport(0, null);
|
| - |
|
10133 |
if (!this.updateForViewport())
|
| - |
|
10134 |
break;
|
| - |
|
10135 |
}
|
| 9615 |
this.updateViewportLines();
|
10136 |
this.updateViewportLines();
|
| 9616 |
this.updateForViewport();
|
- |
|
| 9617 |
this.lineGaps = this.ensureLineGaps([]);
|
10137 |
this.lineGaps = this.ensureLineGaps([]);
|
| 9618 |
this.lineGapDeco = Decoration.set(this.lineGaps.map(gap => gap.draw(this, false)));
|
10138 |
this.lineGapDeco = Decoration.set(this.lineGaps.map(gap => gap.draw(this, false)));
|
| 9619 |
this.computeVisibleRanges();
|
10139 |
this.computeVisibleRanges();
|
| 9620 |
}
|
10140 |
}
|
| 9621 |
updateForViewport() {
|
10141 |
updateForViewport() {
|
| Línea 9626... |
Línea 10146... |
| 9626 |
let { from, to } = this.lineBlockAt(pos);
|
10146 |
let { from, to } = this.lineBlockAt(pos);
|
| 9627 |
viewports.push(new Viewport(from, to));
|
10147 |
viewports.push(new Viewport(from, to));
|
| 9628 |
}
|
10148 |
}
|
| 9629 |
}
|
10149 |
}
|
| 9630 |
this.viewports = viewports.sort((a, b) => a.from - b.from);
|
10150 |
this.viewports = viewports.sort((a, b) => a.from - b.from);
|
| - |
|
10151 |
return this.updateScaler();
|
| - |
|
10152 |
}
|
| - |
|
10153 |
updateScaler() {
|
| - |
|
10154 |
let scaler = this.scaler;
|
| 9631 |
this.scaler = this.heightMap.height <= 7000000 /* VP.MaxDOMHeight */ ? IdScaler :
|
10155 |
this.scaler = this.heightMap.height <= 7000000 /* VP.MaxDOMHeight */ ? IdScaler :
|
| 9632 |
new BigScaler(this.heightOracle, this.heightMap, this.viewports);
|
10156 |
new BigScaler(this.heightOracle, this.heightMap, this.viewports);
|
| - |
|
10157 |
return scaler.eq(this.scaler) ? 0 : 2 /* UpdateFlag.Height */;
|
| 9633 |
}
|
10158 |
}
|
| 9634 |
updateViewportLines() {
|
10159 |
updateViewportLines() {
|
| 9635 |
this.viewportLines = [];
|
10160 |
this.viewportLines = [];
|
| 9636 |
this.heightMap.forEachLine(this.viewport.from, this.viewport.to, this.heightOracle.setDoc(this.state.doc), 0, 0, block => {
|
10161 |
this.heightMap.forEachLine(this.viewport.from, this.viewport.to, this.heightOracle.setDoc(this.state.doc), 0, 0, block => {
|
| 9637 |
this.viewportLines.push(this.scaler.scale == 1 ? block : scaleBlock(block, this.scaler));
|
10162 |
this.viewportLines.push(scaleBlock(block, this.scaler));
|
| 9638 |
});
|
10163 |
});
|
| 9639 |
}
|
10164 |
}
|
| 9640 |
update(update, scrollTarget = null) {
|
10165 |
update(update, scrollTarget = null) {
|
| 9641 |
this.state = update.state;
|
10166 |
this.state = update.state;
|
| 9642 |
let prevDeco = this.stateDeco;
|
10167 |
let prevDeco = this.stateDeco;
|
| 9643 |
this.stateDeco = this.state.facet(decorations).filter(d => typeof d != "function");
|
10168 |
this.stateDeco = this.state.facet(decorations).filter(d => typeof d != "function");
|
| 9644 |
let contentChanges = update.changedRanges;
|
10169 |
let contentChanges = update.changedRanges;
|
| 9645 |
let heightChanges = ChangedRange.extendWithRanges(contentChanges, heightRelevantDecoChanges(prevDeco, this.stateDeco, update ? update.changes : ChangeSet.empty(this.state.doc.length)));
|
10170 |
let heightChanges = ChangedRange.extendWithRanges(contentChanges, heightRelevantDecoChanges(prevDeco, this.stateDeco, update ? update.changes : ChangeSet.empty(this.state.doc.length)));
|
| 9646 |
let prevHeight = this.heightMap.height;
|
10171 |
let prevHeight = this.heightMap.height;
|
| 9647 |
let scrollAnchor = this.scrolledToBottom ? null : this.scrollAnchorAt(this.scrollTop);
|
10172 |
let scrollAnchor = this.scrolledToBottom ? null : this.scrollAnchorAt(this.scrollTop);
|
| - |
|
10173 |
clearHeightChangeFlag();
|
| 9648 |
this.heightMap = this.heightMap.applyChanges(this.stateDeco, update.startState.doc, this.heightOracle.setDoc(this.state.doc), heightChanges);
|
10174 |
this.heightMap = this.heightMap.applyChanges(this.stateDeco, update.startState.doc, this.heightOracle.setDoc(this.state.doc), heightChanges);
|
| 9649 |
if (this.heightMap.height != prevHeight)
|
10175 |
if (this.heightMap.height != prevHeight || heightChangeFlag)
|
| 9650 |
update.flags |= 2 /* UpdateFlag.Height */;
|
10176 |
update.flags |= 2 /* UpdateFlag.Height */;
|
| 9651 |
if (scrollAnchor) {
|
10177 |
if (scrollAnchor) {
|
| 9652 |
this.scrollAnchorPos = update.changes.mapPos(scrollAnchor.from, -1);
|
10178 |
this.scrollAnchorPos = update.changes.mapPos(scrollAnchor.from, -1);
|
| 9653 |
this.scrollAnchorHeight = scrollAnchor.top;
|
10179 |
this.scrollAnchorHeight = scrollAnchor.top;
|
| 9654 |
}
|
10180 |
}
|
| Línea 9658... |
Línea 10184... |
| 9658 |
}
|
10184 |
}
|
| 9659 |
let viewport = heightChanges.length ? this.mapViewport(this.viewport, update.changes) : this.viewport;
|
10185 |
let viewport = heightChanges.length ? this.mapViewport(this.viewport, update.changes) : this.viewport;
|
| 9660 |
if (scrollTarget && (scrollTarget.range.head < viewport.from || scrollTarget.range.head > viewport.to) ||
|
10186 |
if (scrollTarget && (scrollTarget.range.head < viewport.from || scrollTarget.range.head > viewport.to) ||
|
| 9661 |
!this.viewportIsAppropriate(viewport))
|
10187 |
!this.viewportIsAppropriate(viewport))
|
| 9662 |
viewport = this.getViewport(0, scrollTarget);
|
10188 |
viewport = this.getViewport(0, scrollTarget);
|
| 9663 |
let updateLines = !update.changes.empty || (update.flags & 2 /* UpdateFlag.Height */) ||
|
- |
|
| 9664 |
viewport.from != this.viewport.from || viewport.to != this.viewport.to;
|
10189 |
let viewportChange = viewport.from != this.viewport.from || viewport.to != this.viewport.to;
|
| 9665 |
this.viewport = viewport;
|
10190 |
this.viewport = viewport;
|
| 9666 |
this.updateForViewport();
|
10191 |
update.flags |= this.updateForViewport();
|
| 9667 |
if (updateLines)
|
10192 |
if (viewportChange || !update.changes.empty || (update.flags & 2 /* UpdateFlag.Height */))
|
| 9668 |
this.updateViewportLines();
|
10193 |
this.updateViewportLines();
|
| 9669 |
if (this.lineGaps.length || this.viewport.to - this.viewport.from > (2000 /* LG.Margin */ << 1))
|
10194 |
if (this.lineGaps.length || this.viewport.to - this.viewport.from > (2000 /* LG.Margin */ << 1))
|
| 9670 |
this.updateLineGaps(this.ensureLineGaps(this.mapLineGaps(this.lineGaps, update.changes)));
|
10195 |
this.updateLineGaps(this.ensureLineGaps(this.mapLineGaps(this.lineGaps, update.changes)));
|
| 9671 |
update.flags |= this.computeVisibleRanges();
|
10196 |
update.flags |= this.computeVisibleRanges(update.changes);
|
| 9672 |
if (scrollTarget)
|
10197 |
if (scrollTarget)
|
| 9673 |
this.scrollTarget = scrollTarget;
|
10198 |
this.scrollTarget = scrollTarget;
|
| 9674 |
if (!this.mustEnforceCursorAssoc && update.selectionSet && update.view.lineWrapping &&
|
10199 |
if (!this.mustEnforceCursorAssoc && update.selectionSet && update.view.lineWrapping &&
|
| 9675 |
update.state.selection.main.empty && update.state.selection.main.assoc &&
|
10200 |
update.state.selection.main.empty && update.state.selection.main.assoc &&
|
| 9676 |
!update.state.facet(nativeSelectionHidden))
|
10201 |
!update.state.facet(nativeSelectionHidden))
|
| Línea 9691... |
Línea 10216... |
| 9691 |
let { scaleX, scaleY } = getScale(dom, domRect);
|
10216 |
let { scaleX, scaleY } = getScale(dom, domRect);
|
| 9692 |
if (scaleX > .005 && Math.abs(this.scaleX - scaleX) > .005 ||
|
10217 |
if (scaleX > .005 && Math.abs(this.scaleX - scaleX) > .005 ||
|
| 9693 |
scaleY > .005 && Math.abs(this.scaleY - scaleY) > .005) {
|
10218 |
scaleY > .005 && Math.abs(this.scaleY - scaleY) > .005) {
|
| 9694 |
this.scaleX = scaleX;
|
10219 |
this.scaleX = scaleX;
|
| 9695 |
this.scaleY = scaleY;
|
10220 |
this.scaleY = scaleY;
|
| 9696 |
result |= 8 /* UpdateFlag.Geometry */;
|
10221 |
result |= 16 /* UpdateFlag.Geometry */;
|
| 9697 |
refresh = measureContent = true;
|
10222 |
refresh = measureContent = true;
|
| 9698 |
}
|
10223 |
}
|
| 9699 |
}
|
10224 |
}
|
| 9700 |
// Vertical padding
|
10225 |
// Vertical padding
|
| 9701 |
let paddingTop = (parseInt(style.paddingTop) || 0) * this.scaleY;
|
10226 |
let paddingTop = (parseInt(style.paddingTop) || 0) * this.scaleY;
|
| 9702 |
let paddingBottom = (parseInt(style.paddingBottom) || 0) * this.scaleY;
|
10227 |
let paddingBottom = (parseInt(style.paddingBottom) || 0) * this.scaleY;
|
| 9703 |
if (this.paddingTop != paddingTop || this.paddingBottom != paddingBottom) {
|
10228 |
if (this.paddingTop != paddingTop || this.paddingBottom != paddingBottom) {
|
| 9704 |
this.paddingTop = paddingTop;
|
10229 |
this.paddingTop = paddingTop;
|
| 9705 |
this.paddingBottom = paddingBottom;
|
10230 |
this.paddingBottom = paddingBottom;
|
| 9706 |
result |= 8 /* UpdateFlag.Geometry */ | 2 /* UpdateFlag.Height */;
|
10231 |
result |= 16 /* UpdateFlag.Geometry */ | 2 /* UpdateFlag.Height */;
|
| 9707 |
}
|
10232 |
}
|
| 9708 |
if (this.editorWidth != view.scrollDOM.clientWidth) {
|
10233 |
if (this.editorWidth != view.scrollDOM.clientWidth) {
|
| 9709 |
if (oracle.lineWrapping)
|
10234 |
if (oracle.lineWrapping)
|
| 9710 |
measureContent = true;
|
10235 |
measureContent = true;
|
| 9711 |
this.editorWidth = view.scrollDOM.clientWidth;
|
10236 |
this.editorWidth = view.scrollDOM.clientWidth;
|
| 9712 |
result |= 8 /* UpdateFlag.Geometry */;
|
10237 |
result |= 16 /* UpdateFlag.Geometry */;
|
| 9713 |
}
|
10238 |
}
|
| 9714 |
let scrollTop = view.scrollDOM.scrollTop * this.scaleY;
|
10239 |
let scrollTop = view.scrollDOM.scrollTop * this.scaleY;
|
| 9715 |
if (this.scrollTop != scrollTop) {
|
10240 |
if (this.scrollTop != scrollTop) {
|
| 9716 |
this.scrollAnchorHeight = -1;
|
10241 |
this.scrollAnchorHeight = -1;
|
| 9717 |
this.scrollTop = scrollTop;
|
10242 |
this.scrollTop = scrollTop;
|
| Línea 9725... |
Línea 10250... |
| 9725 |
if (inView != this.inView) {
|
10250 |
if (inView != this.inView) {
|
| 9726 |
this.inView = inView;
|
10251 |
this.inView = inView;
|
| 9727 |
if (inView)
|
10252 |
if (inView)
|
| 9728 |
measureContent = true;
|
10253 |
measureContent = true;
|
| 9729 |
}
|
10254 |
}
|
| 9730 |
if (!this.inView && !this.scrollTarget)
|
10255 |
if (!this.inView && !this.scrollTarget && !inWindow(view.dom))
|
| 9731 |
return 0;
|
10256 |
return 0;
|
| 9732 |
let contentWidth = domRect.width;
|
10257 |
let contentWidth = domRect.width;
|
| 9733 |
if (this.contentDOMWidth != contentWidth || this.editorHeight != view.scrollDOM.clientHeight) {
|
10258 |
if (this.contentDOMWidth != contentWidth || this.editorHeight != view.scrollDOM.clientHeight) {
|
| 9734 |
this.contentDOMWidth = domRect.width;
|
10259 |
this.contentDOMWidth = domRect.width;
|
| 9735 |
this.editorHeight = view.scrollDOM.clientHeight;
|
10260 |
this.editorHeight = view.scrollDOM.clientHeight;
|
| 9736 |
result |= 8 /* UpdateFlag.Geometry */;
|
10261 |
result |= 16 /* UpdateFlag.Geometry */;
|
| 9737 |
}
|
10262 |
}
|
| 9738 |
if (measureContent) {
|
10263 |
if (measureContent) {
|
| 9739 |
let lineHeights = view.docView.measureVisibleLineHeights(this.viewport);
|
10264 |
let lineHeights = view.docView.measureVisibleLineHeights(this.viewport);
|
| 9740 |
if (oracle.mustRefreshForHeights(lineHeights))
|
10265 |
if (oracle.mustRefreshForHeights(lineHeights))
|
| 9741 |
refresh = true;
|
10266 |
refresh = true;
|
| 9742 |
if (refresh || oracle.lineWrapping && Math.abs(contentWidth - this.contentDOMWidth) > oracle.charWidth) {
|
10267 |
if (refresh || oracle.lineWrapping && Math.abs(contentWidth - this.contentDOMWidth) > oracle.charWidth) {
|
| 9743 |
let { lineHeight, charWidth, textHeight } = view.docView.measureTextSize();
|
10268 |
let { lineHeight, charWidth, textHeight } = view.docView.measureTextSize();
|
| 9744 |
refresh = lineHeight > 0 && oracle.refresh(whiteSpace, lineHeight, charWidth, textHeight, contentWidth / charWidth, lineHeights);
|
10269 |
refresh = lineHeight > 0 && oracle.refresh(whiteSpace, lineHeight, charWidth, textHeight, contentWidth / charWidth, lineHeights);
|
| 9745 |
if (refresh) {
|
10270 |
if (refresh) {
|
| 9746 |
view.docView.minWidth = 0;
|
10271 |
view.docView.minWidth = 0;
|
| 9747 |
result |= 8 /* UpdateFlag.Geometry */;
|
10272 |
result |= 16 /* UpdateFlag.Geometry */;
|
| 9748 |
}
|
10273 |
}
|
| 9749 |
}
|
10274 |
}
|
| 9750 |
if (dTop > 0 && dBottom > 0)
|
10275 |
if (dTop > 0 && dBottom > 0)
|
| 9751 |
bias = Math.max(dTop, dBottom);
|
10276 |
bias = Math.max(dTop, dBottom);
|
| 9752 |
else if (dTop < 0 && dBottom < 0)
|
10277 |
else if (dTop < 0 && dBottom < 0)
|
| 9753 |
bias = Math.min(dTop, dBottom);
|
10278 |
bias = Math.min(dTop, dBottom);
|
| 9754 |
oracle.heightChanged = false;
|
10279 |
clearHeightChangeFlag();
|
| 9755 |
for (let vp of this.viewports) {
|
10280 |
for (let vp of this.viewports) {
|
| 9756 |
let heights = vp.from == this.viewport.from ? lineHeights : view.docView.measureVisibleLineHeights(vp);
|
10281 |
let heights = vp.from == this.viewport.from ? lineHeights : view.docView.measureVisibleLineHeights(vp);
|
| 9757 |
this.heightMap = (refresh ? HeightMap.empty().applyChanges(this.stateDeco, Text.empty, this.heightOracle, [new ChangedRange(0, 0, 0, view.state.doc.length)]) : this.heightMap).updateHeight(oracle, 0, refresh, new MeasuredHeights(vp.from, heights));
|
10282 |
this.heightMap = (refresh ? HeightMap.empty().applyChanges(this.stateDeco, Text.empty, this.heightOracle, [new ChangedRange(0, 0, 0, view.state.doc.length)]) : this.heightMap).updateHeight(oracle, 0, refresh, new MeasuredHeights(vp.from, heights));
|
| 9758 |
}
|
10283 |
}
|
| 9759 |
if (oracle.heightChanged)
|
10284 |
if (heightChangeFlag)
|
| 9760 |
result |= 2 /* UpdateFlag.Height */;
|
10285 |
result |= 2 /* UpdateFlag.Height */;
|
| 9761 |
}
|
10286 |
}
|
| 9762 |
let viewportChange = !this.viewportIsAppropriate(this.viewport, bias) ||
|
10287 |
let viewportChange = !this.viewportIsAppropriate(this.viewport, bias) ||
|
| 9763 |
this.scrollTarget && (this.scrollTarget.range.head < this.viewport.from ||
|
10288 |
this.scrollTarget && (this.scrollTarget.range.head < this.viewport.from ||
|
| 9764 |
this.scrollTarget.range.head > this.viewport.to);
|
10289 |
this.scrollTarget.range.head > this.viewport.to);
|
| 9765 |
if (viewportChange)
|
10290 |
if (viewportChange) {
|
| - |
|
10291 |
if (result & 2 /* UpdateFlag.Height */)
|
| - |
|
10292 |
result |= this.updateScaler();
|
| 9766 |
this.viewport = this.getViewport(bias, this.scrollTarget);
|
10293 |
this.viewport = this.getViewport(bias, this.scrollTarget);
|
| 9767 |
this.updateForViewport();
|
10294 |
result |= this.updateForViewport();
|
| - |
|
10295 |
}
|
| 9768 |
if ((result & 2 /* UpdateFlag.Height */) || viewportChange)
|
10296 |
if ((result & 2 /* UpdateFlag.Height */) || viewportChange)
|
| 9769 |
this.updateViewportLines();
|
10297 |
this.updateViewportLines();
|
| 9770 |
if (this.lineGaps.length || this.viewport.to - this.viewport.from > (2000 /* LG.Margin */ << 1))
|
10298 |
if (this.lineGaps.length || this.viewport.to - this.viewport.from > (2000 /* LG.Margin */ << 1))
|
| 9771 |
this.updateLineGaps(this.ensureLineGaps(refresh ? [] : this.lineGaps, view));
|
10299 |
this.updateLineGaps(this.ensureLineGaps(refresh ? [] : this.lineGaps, view));
|
| 9772 |
result |= this.computeVisibleRanges();
|
10300 |
result |= this.computeVisibleRanges();
|
| Línea 9828... |
Línea 10356... |
| 9828 |
if (!gaps.length || changes.empty)
|
10356 |
if (!gaps.length || changes.empty)
|
| 9829 |
return gaps;
|
10357 |
return gaps;
|
| 9830 |
let mapped = [];
|
10358 |
let mapped = [];
|
| 9831 |
for (let gap of gaps)
|
10359 |
for (let gap of gaps)
|
| 9832 |
if (!changes.touchesRange(gap.from, gap.to))
|
10360 |
if (!changes.touchesRange(gap.from, gap.to))
|
| 9833 |
mapped.push(new LineGap(changes.mapPos(gap.from), changes.mapPos(gap.to), gap.size));
|
10361 |
mapped.push(new LineGap(changes.mapPos(gap.from), changes.mapPos(gap.to), gap.size, gap.displaySize));
|
| 9834 |
return mapped;
|
10362 |
return mapped;
|
| 9835 |
}
|
10363 |
}
|
| 9836 |
// Computes positions in the viewport where the start or end of a
|
10364 |
// Computes positions in the viewport where the start or end of a
|
| 9837 |
// line should be hidden, trying to reuse existing line gaps when
|
10365 |
// line should be hidden, trying to reuse existing line gaps when
|
| 9838 |
// appropriate to avoid unneccesary redraws.
|
10366 |
// appropriate to avoid unneccesary redraws.
|
| Línea 9869... |
Línea 10397... |
| 9869 |
mayMeasure.visibleRanges.some(r => r.from <= to && r.to >= to)) {
|
10397 |
mayMeasure.visibleRanges.some(r => r.from <= to && r.to >= to)) {
|
| 9870 |
let lineStart = mayMeasure.moveToLineBoundary(EditorSelection.cursor(to), false, true).head;
|
10398 |
let lineStart = mayMeasure.moveToLineBoundary(EditorSelection.cursor(to), false, true).head;
|
| 9871 |
if (lineStart > from)
|
10399 |
if (lineStart > from)
|
| 9872 |
to = lineStart;
|
10400 |
to = lineStart;
|
| 9873 |
}
|
10401 |
}
|
| 9874 |
gap = new LineGap(from, to, this.gapSize(line, from, to, structure));
|
10402 |
let size = this.gapSize(line, from, to, structure);
|
| - |
|
10403 |
let displaySize = wrapping || size < 2000000 /* VP.MaxHorizGap */ ? size : 2000000 /* VP.MaxHorizGap */;
|
| - |
|
10404 |
gap = new LineGap(from, to, size, displaySize);
|
| 9875 |
}
|
10405 |
}
|
| 9876 |
gaps.push(gap);
|
10406 |
gaps.push(gap);
|
| 9877 |
};
|
10407 |
};
|
| 9878 |
for (let line of this.viewportLines) {
|
10408 |
let checkLine = (line) => {
|
| 9879 |
if (line.length < doubleMargin)
|
10409 |
if (line.length < doubleMargin || line.type != BlockType.Text)
|
| 9880 |
continue;
|
10410 |
return;
|
| 9881 |
let structure = lineStructure(line.from, line.to, this.stateDeco);
|
10411 |
let structure = lineStructure(line.from, line.to, this.stateDeco);
|
| 9882 |
if (structure.total < doubleMargin)
|
10412 |
if (structure.total < doubleMargin)
|
| 9883 |
continue;
|
10413 |
return;
|
| 9884 |
let target = this.scrollTarget ? this.scrollTarget.range.head : null;
|
10414 |
let target = this.scrollTarget ? this.scrollTarget.range.head : null;
|
| 9885 |
let viewFrom, viewTo;
|
10415 |
let viewFrom, viewTo;
|
| 9886 |
if (wrapping) {
|
10416 |
if (wrapping) {
|
| 9887 |
let marginHeight = (margin / this.heightOracle.lineLength) * this.heightOracle.lineHeight;
|
10417 |
let marginHeight = (margin / this.heightOracle.lineLength) * this.heightOracle.lineHeight;
|
| 9888 |
let top, bot;
|
10418 |
let top, bot;
|
| Línea 9900... |
Línea 10430... |
| 9900 |
viewTo = findPosition(structure, bot);
|
10430 |
viewTo = findPosition(structure, bot);
|
| 9901 |
}
|
10431 |
}
|
| 9902 |
else {
|
10432 |
else {
|
| 9903 |
let totalWidth = structure.total * this.heightOracle.charWidth;
|
10433 |
let totalWidth = structure.total * this.heightOracle.charWidth;
|
| 9904 |
let marginWidth = margin * this.heightOracle.charWidth;
|
10434 |
let marginWidth = margin * this.heightOracle.charWidth;
|
| - |
|
10435 |
let horizOffset = 0;
|
| - |
|
10436 |
if (totalWidth > 2000000 /* VP.MaxHorizGap */)
|
| - |
|
10437 |
for (let old of current) {
|
| - |
|
10438 |
if (old.from >= line.from && old.from < line.to && old.size != old.displaySize &&
|
| - |
|
10439 |
old.from * this.heightOracle.charWidth + horizOffset < this.pixelViewport.left)
|
| - |
|
10440 |
horizOffset = old.size - old.displaySize;
|
| - |
|
10441 |
}
|
| - |
|
10442 |
let pxLeft = this.pixelViewport.left + horizOffset, pxRight = this.pixelViewport.right + horizOffset;
|
| 9905 |
let left, right;
|
10443 |
let left, right;
|
| 9906 |
if (target != null) {
|
10444 |
if (target != null) {
|
| 9907 |
let targetFrac = findFraction(structure, target);
|
10445 |
let targetFrac = findFraction(structure, target);
|
| 9908 |
let spaceFrac = ((this.pixelViewport.right - this.pixelViewport.left) / 2 + marginWidth) / totalWidth;
|
10446 |
let spaceFrac = ((pxRight - pxLeft) / 2 + marginWidth) / totalWidth;
|
| 9909 |
left = targetFrac - spaceFrac;
|
10447 |
left = targetFrac - spaceFrac;
|
| 9910 |
right = targetFrac + spaceFrac;
|
10448 |
right = targetFrac + spaceFrac;
|
| 9911 |
}
|
10449 |
}
|
| 9912 |
else {
|
10450 |
else {
|
| 9913 |
left = (this.pixelViewport.left - marginWidth) / totalWidth;
|
10451 |
left = (pxLeft - marginWidth) / totalWidth;
|
| 9914 |
right = (this.pixelViewport.right + marginWidth) / totalWidth;
|
10452 |
right = (pxRight + marginWidth) / totalWidth;
|
| 9915 |
}
|
10453 |
}
|
| 9916 |
viewFrom = findPosition(structure, left);
|
10454 |
viewFrom = findPosition(structure, left);
|
| 9917 |
viewTo = findPosition(structure, right);
|
10455 |
viewTo = findPosition(structure, right);
|
| 9918 |
}
|
10456 |
}
|
| 9919 |
if (viewFrom > line.from)
|
10457 |
if (viewFrom > line.from)
|
| 9920 |
addGap(line.from, viewFrom, line, structure);
|
10458 |
addGap(line.from, viewFrom, line, structure);
|
| 9921 |
if (viewTo < line.to)
|
10459 |
if (viewTo < line.to)
|
| 9922 |
addGap(viewTo, line.to, line, structure);
|
10460 |
addGap(viewTo, line.to, line, structure);
|
| - |
|
10461 |
};
|
| - |
|
10462 |
for (let line of this.viewportLines) {
|
| - |
|
10463 |
if (Array.isArray(line.type))
|
| - |
|
10464 |
line.type.forEach(checkLine);
|
| - |
|
10465 |
else
|
| - |
|
10466 |
checkLine(line);
|
| 9923 |
}
|
10467 |
}
|
| 9924 |
return gaps;
|
10468 |
return gaps;
|
| 9925 |
}
|
10469 |
}
|
| 9926 |
gapSize(line, from, to, structure) {
|
10470 |
gapSize(line, from, to, structure) {
|
| 9927 |
let fraction = findFraction(structure, to) - findFraction(structure, from);
|
10471 |
let fraction = findFraction(structure, to) - findFraction(structure, from);
|
| Línea 9936... |
Línea 10480... |
| 9936 |
if (!LineGap.same(gaps, this.lineGaps)) {
|
10480 |
if (!LineGap.same(gaps, this.lineGaps)) {
|
| 9937 |
this.lineGaps = gaps;
|
10481 |
this.lineGaps = gaps;
|
| 9938 |
this.lineGapDeco = Decoration.set(gaps.map(gap => gap.draw(this, this.heightOracle.lineWrapping)));
|
10482 |
this.lineGapDeco = Decoration.set(gaps.map(gap => gap.draw(this, this.heightOracle.lineWrapping)));
|
| 9939 |
}
|
10483 |
}
|
| 9940 |
}
|
10484 |
}
|
| 9941 |
computeVisibleRanges() {
|
10485 |
computeVisibleRanges(changes) {
|
| 9942 |
let deco = this.stateDeco;
|
10486 |
let deco = this.stateDeco;
|
| 9943 |
if (this.lineGaps.length)
|
10487 |
if (this.lineGaps.length)
|
| 9944 |
deco = deco.concat(this.lineGapDeco);
|
10488 |
deco = deco.concat(this.lineGapDeco);
|
| 9945 |
let ranges = [];
|
10489 |
let ranges = [];
|
| 9946 |
RangeSet.spans(deco, this.viewport.from, this.viewport.to, {
|
10490 |
RangeSet.spans(deco, this.viewport.from, this.viewport.to, {
|
| 9947 |
span(from, to) { ranges.push({ from, to }); },
|
10491 |
span(from, to) { ranges.push({ from, to }); },
|
| 9948 |
point() { }
|
10492 |
point() { }
|
| 9949 |
}, 20);
|
10493 |
}, 20);
|
| - |
|
10494 |
let changed = 0;
|
| 9950 |
let changed = ranges.length != this.visibleRanges.length ||
|
10495 |
if (ranges.length != this.visibleRanges.length) {
|
| - |
|
10496 |
changed = 8 /* UpdateFlag.ViewportMoved */ | 4 /* UpdateFlag.Viewport */;
|
| - |
|
10497 |
}
|
| - |
|
10498 |
else {
|
| - |
|
10499 |
for (let i = 0; i < ranges.length && !(changed & 8 /* UpdateFlag.ViewportMoved */); i++) {
|
| - |
|
10500 |
let old = this.visibleRanges[i], nw = ranges[i];
|
| - |
|
10501 |
if (old.from != nw.from || old.to != nw.to) {
|
| - |
|
10502 |
changed |= 4 /* UpdateFlag.Viewport */;
|
| 9951 |
this.visibleRanges.some((r, i) => r.from != ranges[i].from || r.to != ranges[i].to);
|
10503 |
if (!(changes && changes.mapPos(old.from, -1) == nw.from && changes.mapPos(old.to, 1) == nw.to))
|
| - |
|
10504 |
changed |= 8 /* UpdateFlag.ViewportMoved */;
|
| - |
|
10505 |
}
|
| - |
|
10506 |
}
|
| - |
|
10507 |
}
|
| 9952 |
this.visibleRanges = ranges;
|
10508 |
this.visibleRanges = ranges;
|
| 9953 |
return changed ? 4 /* UpdateFlag.Viewport */ : 0;
|
10509 |
return changed;
|
| 9954 |
}
|
10510 |
}
|
| 9955 |
lineBlockAt(pos) {
|
10511 |
lineBlockAt(pos) {
|
| - |
|
10512 |
return (pos >= this.viewport.from && pos <= this.viewport.to &&
|
| 9956 |
return (pos >= this.viewport.from && pos <= this.viewport.to && this.viewportLines.find(b => b.from <= pos && b.to >= pos)) ||
|
10513 |
this.viewportLines.find(b => b.from <= pos && b.to >= pos)) ||
|
| 9957 |
scaleBlock(this.heightMap.lineAt(pos, QueryType$1.ByPos, this.heightOracle, 0, 0), this.scaler);
|
10514 |
scaleBlock(this.heightMap.lineAt(pos, QueryType$1.ByPos, this.heightOracle, 0, 0), this.scaler);
|
| 9958 |
}
|
10515 |
}
|
| 9959 |
lineBlockAtHeight(height) {
|
10516 |
lineBlockAtHeight(height) {
|
| - |
|
10517 |
return (height >= this.viewportLines[0].top && height <= this.viewportLines[this.viewportLines.length - 1].bottom &&
|
| - |
|
10518 |
this.viewportLines.find(l => l.top <= height && l.bottom >= height)) ||
|
| 9960 |
return scaleBlock(this.heightMap.lineAt(this.scaler.fromDOM(height), QueryType$1.ByHeight, this.heightOracle, 0, 0), this.scaler);
|
10519 |
scaleBlock(this.heightMap.lineAt(this.scaler.fromDOM(height), QueryType$1.ByHeight, this.heightOracle, 0, 0), this.scaler);
|
| 9961 |
}
|
10520 |
}
|
| 9962 |
scrollAnchorAt(scrollTop) {
|
10521 |
scrollAnchorAt(scrollTop) {
|
| 9963 |
let block = this.lineBlockAtHeight(scrollTop + 8);
|
10522 |
let block = this.lineBlockAtHeight(scrollTop + 8);
|
| 9964 |
return block.from >= this.viewport.from || this.viewportLines[0].top - scrollTop > 200 ? block : this.viewportLines[0];
|
10523 |
return block.from >= this.viewport.from || this.viewportLines[0].top - scrollTop > 200 ? block : this.viewportLines[0];
|
| 9965 |
}
|
10524 |
}
|
| Línea 10030... |
Línea 10589... |
| 10030 |
// Don't scale when the document height is within the range of what
|
10589 |
// Don't scale when the document height is within the range of what
|
| 10031 |
// the DOM can handle.
|
10590 |
// the DOM can handle.
|
| 10032 |
const IdScaler = {
|
10591 |
const IdScaler = {
|
| 10033 |
toDOM(n) { return n; },
|
10592 |
toDOM(n) { return n; },
|
| 10034 |
fromDOM(n) { return n; },
|
10593 |
fromDOM(n) { return n; },
|
| 10035 |
scale: 1
|
10594 |
scale: 1,
|
| - |
|
10595 |
eq(other) { return other == this; }
|
| 10036 |
};
|
10596 |
};
|
| 10037 |
// When the height is too big (> VP.MaxDOMHeight), scale down the
|
10597 |
// When the height is too big (> VP.MaxDOMHeight), scale down the
|
| 10038 |
// regions outside the viewports so that the total height is
|
10598 |
// regions outside the viewports so that the total height is
|
| 10039 |
// VP.MaxDOMHeight.
|
10599 |
// VP.MaxDOMHeight.
|
| 10040 |
class BigScaler {
|
10600 |
class BigScaler {
|
| Línea 10073... |
Línea 10633... |
| 10073 |
return vp.top + (n - vp.domTop);
|
10633 |
return vp.top + (n - vp.domTop);
|
| 10074 |
base = vp.bottom;
|
10634 |
base = vp.bottom;
|
| 10075 |
domBase = vp.domBottom;
|
10635 |
domBase = vp.domBottom;
|
| 10076 |
}
|
10636 |
}
|
| 10077 |
}
|
10637 |
}
|
| - |
|
10638 |
eq(other) {
|
| - |
|
10639 |
if (!(other instanceof BigScaler))
|
| - |
|
10640 |
return false;
|
| - |
|
10641 |
return this.scale == other.scale && this.viewports.length == other.viewports.length &&
|
| - |
|
10642 |
this.viewports.every((vp, i) => vp.from == other.viewports[i].from && vp.to == other.viewports[i].to);
|
| - |
|
10643 |
}
|
| 10078 |
}
|
10644 |
}
|
| 10079 |
function scaleBlock(block, scaler) {
|
10645 |
function scaleBlock(block, scaler) {
|
| 10080 |
if (scaler.scale == 1)
|
10646 |
if (scaler.scale == 1)
|
| 10081 |
return block;
|
10647 |
return block;
|
| 10082 |
let bTop = scaler.toDOM(block.top), bBottom = scaler.toDOM(block.bottom);
|
10648 |
let bTop = scaler.toDOM(block.top), bBottom = scaler.toDOM(block.bottom);
|
| Línea 10124... |
Línea 10690... |
| 10124 |
fontFamily: "monospace",
|
10690 |
fontFamily: "monospace",
|
| 10125 |
lineHeight: 1.4,
|
10691 |
lineHeight: 1.4,
|
| 10126 |
height: "100%",
|
10692 |
height: "100%",
|
| 10127 |
overflowX: "auto",
|
10693 |
overflowX: "auto",
|
| 10128 |
position: "relative",
|
10694 |
position: "relative",
|
| 10129 |
zIndex: 0
|
10695 |
zIndex: 0,
|
| - |
|
10696 |
overflowAnchor: "none",
|
| 10130 |
},
|
10697 |
},
|
| 10131 |
".cm-content": {
|
10698 |
".cm-content": {
|
| 10132 |
margin: 0,
|
10699 |
margin: 0,
|
| 10133 |
flexGrow: 2,
|
10700 |
flexGrow: 2,
|
| 10134 |
flexShrink: 0,
|
10701 |
flexShrink: 0,
|
| Línea 10195... |
Línea 10762... |
| 10195 |
},
|
10762 |
},
|
| 10196 |
".cm-cursor": {
|
10763 |
".cm-cursor": {
|
| 10197 |
display: "none"
|
10764 |
display: "none"
|
| 10198 |
},
|
10765 |
},
|
| 10199 |
"&dark .cm-cursor": {
|
10766 |
"&dark .cm-cursor": {
|
| 10200 |
borderLeftColor: "#444"
|
10767 |
borderLeftColor: "#ddd"
|
| 10201 |
},
|
10768 |
},
|
| 10202 |
".cm-dropCursor": {
|
10769 |
".cm-dropCursor": {
|
| 10203 |
position: "absolute"
|
10770 |
position: "absolute"
|
| 10204 |
},
|
10771 |
},
|
| 10205 |
"&.cm-focused > .cm-scroller > .cm-cursorLayer .cm-cursor": {
|
10772 |
"&.cm-focused > .cm-scroller > .cm-cursorLayer .cm-cursor": {
|
| Línea 10261... |
Línea 10828... |
| 10261 |
},
|
10828 |
},
|
| 10262 |
".cm-panels": {
|
10829 |
".cm-panels": {
|
| 10263 |
boxSizing: "border-box",
|
10830 |
boxSizing: "border-box",
|
| 10264 |
position: "sticky",
|
10831 |
position: "sticky",
|
| 10265 |
left: 0,
|
10832 |
left: 0,
|
| 10266 |
right: 0
|
10833 |
right: 0,
|
| - |
|
10834 |
zIndex: 300
|
| 10267 |
},
|
10835 |
},
|
| 10268 |
"&light .cm-panels": {
|
10836 |
"&light .cm-panels": {
|
| 10269 |
backgroundColor: "#f5f5f5",
|
10837 |
backgroundColor: "#f5f5f5",
|
| 10270 |
color: "black"
|
10838 |
color: "black"
|
| 10271 |
},
|
10839 |
},
|
| Línea 10293... |
Línea 10861... |
| 10293 |
".cm-placeholder": {
|
10861 |
".cm-placeholder": {
|
| 10294 |
color: "#888",
|
10862 |
color: "#888",
|
| 10295 |
display: "inline-block",
|
10863 |
display: "inline-block",
|
| 10296 |
verticalAlign: "top",
|
10864 |
verticalAlign: "top",
|
| 10297 |
},
|
10865 |
},
|
| 10298 |
".cm-highlightSpace:before": {
|
10866 |
".cm-highlightSpace": {
|
| 10299 |
content: "attr(data-display)",
|
10867 |
backgroundImage: "radial-gradient(circle at 50% 55%, #aaa 20%, transparent 5%)",
|
| 10300 |
position: "absolute",
|
10868 |
backgroundPosition: "center",
|
| 10301 |
pointerEvents: "none",
|
- |
|
| 10302 |
color: "#888"
|
- |
|
| 10303 |
},
|
10869 |
},
|
| 10304 |
".cm-highlightTab": {
|
10870 |
".cm-highlightTab": {
|
| 10305 |
backgroundImage: `url('data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" width="200" height="20"><path stroke="%23888" stroke-width="1" fill="none" d="M1 10H196L190 5M190 15L196 10M197 4L197 16"/></svg>')`,
|
10871 |
backgroundImage: `url('data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" width="200" height="20"><path stroke="%23888" stroke-width="1" fill="none" d="M1 10H196L190 5M190 15L196 10M197 4L197 16"/></svg>')`,
|
| 10306 |
backgroundSize: "auto 100%",
|
10872 |
backgroundSize: "auto 100%",
|
| 10307 |
backgroundPosition: "right 90%",
|
10873 |
backgroundPosition: "right 90%",
|
| Línea 10345... |
Línea 10911... |
| 10345 |
border: "1px solid #555",
|
10911 |
border: "1px solid #555",
|
| 10346 |
backgroundColor: "inherit"
|
10912 |
backgroundColor: "inherit"
|
| 10347 |
}
|
10913 |
}
|
| 10348 |
}, lightDarkIDs);
|
10914 |
}, lightDarkIDs);
|
| Línea 10349... |
Línea -... |
| 10349 |
|
- |
|
| 10350 |
const LineBreakPlaceholder = "\uffff";
|
- |
|
| 10351 |
class DOMReader {
|
- |
|
| 10352 |
constructor(points, state) {
|
- |
|
| 10353 |
this.points = points;
|
- |
|
| 10354 |
this.text = "";
|
- |
|
| 10355 |
this.lineSeparator = state.facet(EditorState.lineSeparator);
|
- |
|
| 10356 |
}
|
- |
|
| 10357 |
append(text) {
|
- |
|
| 10358 |
this.text += text;
|
- |
|
| 10359 |
}
|
- |
|
| 10360 |
lineBreak() {
|
- |
|
| 10361 |
this.text += LineBreakPlaceholder;
|
- |
|
| 10362 |
}
|
- |
|
| 10363 |
readRange(start, end) {
|
- |
|
| 10364 |
if (!start)
|
- |
|
| 10365 |
return this;
|
- |
|
| 10366 |
let parent = start.parentNode;
|
- |
|
| 10367 |
for (let cur = start;;) {
|
- |
|
| 10368 |
this.findPointBefore(parent, cur);
|
- |
|
| 10369 |
let oldLen = this.text.length;
|
- |
|
| 10370 |
this.readNode(cur);
|
- |
|
| 10371 |
let next = cur.nextSibling;
|
- |
|
| 10372 |
if (next == end)
|
- |
|
| 10373 |
break;
|
- |
|
| 10374 |
let view = ContentView.get(cur), nextView = ContentView.get(next);
|
- |
|
| 10375 |
if (view && nextView ? view.breakAfter :
|
- |
|
| 10376 |
(view ? view.breakAfter : isBlockElement(cur)) ||
|
- |
|
| 10377 |
(isBlockElement(next) && (cur.nodeName != "BR" || cur.cmIgnore) && this.text.length > oldLen))
|
- |
|
| 10378 |
this.lineBreak();
|
- |
|
| 10379 |
cur = next;
|
- |
|
| 10380 |
}
|
- |
|
| 10381 |
this.findPointBefore(parent, end);
|
- |
|
| 10382 |
return this;
|
- |
|
| 10383 |
}
|
- |
|
| 10384 |
readTextNode(node) {
|
- |
|
| 10385 |
let text = node.nodeValue;
|
- |
|
| 10386 |
for (let point of this.points)
|
- |
|
| 10387 |
if (point.node == node)
|
- |
|
| 10388 |
point.pos = this.text.length + Math.min(point.offset, text.length);
|
- |
|
| 10389 |
for (let off = 0, re = this.lineSeparator ? null : /\r\n?|\n/g;;) {
|
- |
|
| 10390 |
let nextBreak = -1, breakSize = 1, m;
|
- |
|
| 10391 |
if (this.lineSeparator) {
|
- |
|
| 10392 |
nextBreak = text.indexOf(this.lineSeparator, off);
|
- |
|
| 10393 |
breakSize = this.lineSeparator.length;
|
- |
|
| 10394 |
}
|
- |
|
| 10395 |
else if (m = re.exec(text)) {
|
- |
|
| 10396 |
nextBreak = m.index;
|
- |
|
| 10397 |
breakSize = m[0].length;
|
- |
|
| 10398 |
}
|
- |
|
| 10399 |
this.append(text.slice(off, nextBreak < 0 ? text.length : nextBreak));
|
- |
|
| 10400 |
if (nextBreak < 0)
|
- |
|
| 10401 |
break;
|
- |
|
| 10402 |
this.lineBreak();
|
- |
|
| 10403 |
if (breakSize > 1)
|
- |
|
| 10404 |
for (let point of this.points)
|
- |
|
| 10405 |
if (point.node == node && point.pos > this.text.length)
|
- |
|
| 10406 |
point.pos -= breakSize - 1;
|
- |
|
| 10407 |
off = nextBreak + breakSize;
|
- |
|
| 10408 |
}
|
- |
|
| 10409 |
}
|
- |
|
| 10410 |
readNode(node) {
|
- |
|
| 10411 |
if (node.cmIgnore)
|
- |
|
| 10412 |
return;
|
- |
|
| 10413 |
let view = ContentView.get(node);
|
- |
|
| 10414 |
let fromView = view && view.overrideDOMText;
|
- |
|
| 10415 |
if (fromView != null) {
|
- |
|
| 10416 |
this.findPointInside(node, fromView.length);
|
- |
|
| 10417 |
for (let i = fromView.iter(); !i.next().done;) {
|
- |
|
| 10418 |
if (i.lineBreak)
|
- |
|
| 10419 |
this.lineBreak();
|
- |
|
| 10420 |
else
|
- |
|
| 10421 |
this.append(i.value);
|
- |
|
| 10422 |
}
|
- |
|
| 10423 |
}
|
- |
|
| 10424 |
else if (node.nodeType == 3) {
|
- |
|
| 10425 |
this.readTextNode(node);
|
- |
|
| 10426 |
}
|
- |
|
| 10427 |
else if (node.nodeName == "BR") {
|
- |
|
| 10428 |
if (node.nextSibling)
|
- |
|
| 10429 |
this.lineBreak();
|
- |
|
| 10430 |
}
|
- |
|
| 10431 |
else if (node.nodeType == 1) {
|
- |
|
| 10432 |
this.readRange(node.firstChild, null);
|
- |
|
| 10433 |
}
|
- |
|
| 10434 |
}
|
- |
|
| 10435 |
findPointBefore(node, next) {
|
- |
|
| 10436 |
for (let point of this.points)
|
- |
|
| 10437 |
if (point.node == node && node.childNodes[point.offset] == next)
|
- |
|
| 10438 |
point.pos = this.text.length;
|
- |
|
| 10439 |
}
|
- |
|
| 10440 |
findPointInside(node, length) {
|
- |
|
| 10441 |
for (let point of this.points)
|
- |
|
| 10442 |
if (node.nodeType == 3 ? point.node == node : node.contains(point.node))
|
- |
|
| 10443 |
point.pos = this.text.length + (isAtEnd(node, point.node, point.offset) ? length : 0);
|
- |
|
| 10444 |
}
|
- |
|
| 10445 |
}
|
- |
|
| 10446 |
function isAtEnd(parent, node, offset) {
|
- |
|
| 10447 |
for (;;) {
|
- |
|
| 10448 |
if (!node || offset < maxOffset(node))
|
- |
|
| 10449 |
return false;
|
- |
|
| 10450 |
if (node == parent)
|
- |
|
| 10451 |
return true;
|
- |
|
| 10452 |
offset = domIndex(node) + 1;
|
- |
|
| 10453 |
node = node.parentNode;
|
- |
|
| 10454 |
}
|
- |
|
| 10455 |
}
|
- |
|
| 10456 |
class DOMPoint {
|
- |
|
| 10457 |
constructor(node, offset) {
|
- |
|
| 10458 |
this.node = node;
|
- |
|
| 10459 |
this.offset = offset;
|
- |
|
| 10460 |
this.pos = -1;
|
- |
|
| 10461 |
}
|
- |
|
| 10462 |
}
|
- |
|
| 10463 |
|
- |
|
| 10464 |
class DOMChange {
|
- |
|
| 10465 |
constructor(view, start, end, typeOver) {
|
- |
|
| 10466 |
this.typeOver = typeOver;
|
- |
|
| 10467 |
this.bounds = null;
|
- |
|
| 10468 |
this.text = "";
|
- |
|
| 10469 |
let { impreciseHead: iHead, impreciseAnchor: iAnchor } = view.docView;
|
- |
|
| 10470 |
if (view.state.readOnly && start > -1) {
|
- |
|
| 10471 |
// Ignore changes when the editor is read-only
|
- |
|
| 10472 |
this.newSel = null;
|
- |
|
| 10473 |
}
|
- |
|
| 10474 |
else if (start > -1 && (this.bounds = view.docView.domBoundsAround(start, end, 0))) {
|
- |
|
| 10475 |
let selPoints = iHead || iAnchor ? [] : selectionPoints(view);
|
- |
|
| 10476 |
let reader = new DOMReader(selPoints, view.state);
|
- |
|
| 10477 |
reader.readRange(this.bounds.startDOM, this.bounds.endDOM);
|
- |
|
| 10478 |
this.text = reader.text;
|
- |
|
| 10479 |
this.newSel = selectionFromPoints(selPoints, this.bounds.from);
|
- |
|
| 10480 |
}
|
- |
|
| 10481 |
else {
|
- |
|
| 10482 |
let domSel = view.observer.selectionRange;
|
- |
|
| 10483 |
let head = iHead && iHead.node == domSel.focusNode && iHead.offset == domSel.focusOffset ||
|
- |
|
| 10484 |
!contains(view.contentDOM, domSel.focusNode)
|
- |
|
| 10485 |
? view.state.selection.main.head
|
- |
|
| 10486 |
: view.docView.posFromDOM(domSel.focusNode, domSel.focusOffset);
|
- |
|
| 10487 |
let anchor = iAnchor && iAnchor.node == domSel.anchorNode && iAnchor.offset == domSel.anchorOffset ||
|
- |
|
| 10488 |
!contains(view.contentDOM, domSel.anchorNode)
|
- |
|
| 10489 |
? view.state.selection.main.anchor
|
- |
|
| 10490 |
: view.docView.posFromDOM(domSel.anchorNode, domSel.anchorOffset);
|
- |
|
| 10491 |
// iOS will refuse to select the block gaps when doing
|
- |
|
| 10492 |
// select-all.
|
- |
|
| 10493 |
// Chrome will put the selection *inside* them, confusing
|
- |
|
| 10494 |
// posFromDOM
|
- |
|
| 10495 |
let vp = view.viewport;
|
- |
|
| 10496 |
if ((browser.ios || browser.chrome) && view.state.selection.main.empty && head != anchor &&
|
- |
|
| 10497 |
(vp.from > 0 || vp.to < view.state.doc.length)) {
|
- |
|
| 10498 |
let from = Math.min(head, anchor), to = Math.max(head, anchor);
|
- |
|
| 10499 |
let offFrom = vp.from - from, offTo = vp.to - to;
|
- |
|
| 10500 |
if ((offFrom == 0 || offFrom == 1 || from == 0) && (offTo == 0 || offTo == -1 || to == view.state.doc.length)) {
|
- |
|
| 10501 |
head = 0;
|
- |
|
| 10502 |
anchor = view.state.doc.length;
|
- |
|
| 10503 |
}
|
- |
|
| 10504 |
}
|
- |
|
| 10505 |
this.newSel = EditorSelection.single(anchor, head);
|
- |
|
| 10506 |
}
|
- |
|
| 10507 |
}
|
- |
|
| 10508 |
}
|
- |
|
| 10509 |
function applyDOMChange(view, domChange) {
|
- |
|
| 10510 |
let change;
|
- |
|
| 10511 |
let { newSel } = domChange, sel = view.state.selection.main;
|
- |
|
| 10512 |
let lastKey = view.inputState.lastKeyTime > Date.now() - 100 ? view.inputState.lastKeyCode : -1;
|
- |
|
| 10513 |
if (domChange.bounds) {
|
- |
|
| 10514 |
let { from, to } = domChange.bounds;
|
- |
|
| 10515 |
let preferredPos = sel.from, preferredSide = null;
|
- |
|
| 10516 |
// Prefer anchoring to end when Backspace is pressed (or, on
|
- |
|
| 10517 |
// Android, when something was deleted)
|
- |
|
| 10518 |
if (lastKey === 8 || browser.android && domChange.text.length < to - from) {
|
- |
|
| 10519 |
preferredPos = sel.to;
|
- |
|
| 10520 |
preferredSide = "end";
|
- |
|
| 10521 |
}
|
- |
|
| 10522 |
let diff = findDiff(view.state.doc.sliceString(from, to, LineBreakPlaceholder), domChange.text, preferredPos - from, preferredSide);
|
- |
|
| 10523 |
if (diff) {
|
- |
|
| 10524 |
// Chrome inserts two newlines when pressing shift-enter at the
|
- |
|
| 10525 |
// end of a line. DomChange drops one of those.
|
- |
|
| 10526 |
if (browser.chrome && lastKey == 13 &&
|
- |
|
| 10527 |
diff.toB == diff.from + 2 && domChange.text.slice(diff.from, diff.toB) == LineBreakPlaceholder + LineBreakPlaceholder)
|
- |
|
| 10528 |
diff.toB--;
|
- |
|
| 10529 |
change = { from: from + diff.from, to: from + diff.toA,
|
- |
|
| 10530 |
insert: Text.of(domChange.text.slice(diff.from, diff.toB).split(LineBreakPlaceholder)) };
|
- |
|
| 10531 |
}
|
- |
|
| 10532 |
}
|
- |
|
| 10533 |
else if (newSel && (!view.hasFocus && view.state.facet(editable) || newSel.main.eq(sel))) {
|
- |
|
| 10534 |
newSel = null;
|
- |
|
| 10535 |
}
|
- |
|
| 10536 |
if (!change && !newSel)
|
- |
|
| 10537 |
return false;
|
- |
|
| 10538 |
if (!change && domChange.typeOver && !sel.empty && newSel && newSel.main.empty) {
|
- |
|
| 10539 |
// Heuristic to notice typing over a selected character
|
- |
|
| 10540 |
change = { from: sel.from, to: sel.to, insert: view.state.doc.slice(sel.from, sel.to) };
|
- |
|
| 10541 |
}
|
- |
|
| 10542 |
else if (change && change.from >= sel.from && change.to <= sel.to &&
|
- |
|
| 10543 |
(change.from != sel.from || change.to != sel.to) &&
|
- |
|
| 10544 |
(sel.to - sel.from) - (change.to - change.from) <= 4) {
|
- |
|
| 10545 |
// If the change is inside the selection and covers most of it,
|
- |
|
| 10546 |
// assume it is a selection replace (with identical characters at
|
- |
|
| 10547 |
// the start/end not included in the diff)
|
- |
|
| 10548 |
change = {
|
- |
|
| 10549 |
from: sel.from, to: sel.to,
|
- |
|
| 10550 |
insert: view.state.doc.slice(sel.from, change.from).append(change.insert).append(view.state.doc.slice(change.to, sel.to))
|
- |
|
| 10551 |
};
|
- |
|
| 10552 |
}
|
- |
|
| 10553 |
else if ((browser.mac || browser.android) && change && change.from == change.to && change.from == sel.head - 1 &&
|
- |
|
| 10554 |
/^\. ?$/.test(change.insert.toString()) && view.contentDOM.getAttribute("autocorrect") == "off") {
|
- |
|
| 10555 |
// Detect insert-period-on-double-space Mac and Android behavior,
|
- |
|
| 10556 |
// and transform it into a regular space insert.
|
- |
|
| 10557 |
if (newSel && change.insert.length == 2)
|
- |
|
| 10558 |
newSel = EditorSelection.single(newSel.main.anchor - 1, newSel.main.head - 1);
|
- |
|
| 10559 |
change = { from: sel.from, to: sel.to, insert: Text.of([" "]) };
|
- |
|
| 10560 |
}
|
- |
|
| 10561 |
else if (browser.chrome && change && change.from == change.to && change.from == sel.head &&
|
- |
|
| 10562 |
change.insert.toString() == "\n " && view.lineWrapping) {
|
- |
|
| 10563 |
// In Chrome, if you insert a space at the start of a wrapped
|
- |
|
| 10564 |
// line, it will actually insert a newline and a space, causing a
|
- |
|
| 10565 |
// bogus new line to be created in CodeMirror (#968)
|
- |
|
| 10566 |
if (newSel)
|
- |
|
| 10567 |
newSel = EditorSelection.single(newSel.main.anchor - 1, newSel.main.head - 1);
|
- |
|
| 10568 |
change = { from: sel.from, to: sel.to, insert: Text.of([" "]) };
|
- |
|
| 10569 |
}
|
- |
|
| 10570 |
if (change) {
|
- |
|
| 10571 |
if (browser.ios && view.inputState.flushIOSKey(change))
|
- |
|
| 10572 |
return true;
|
- |
|
| 10573 |
// Android browsers don't fire reasonable key events for enter,
|
- |
|
| 10574 |
// backspace, or delete. So this detects changes that look like
|
- |
|
| 10575 |
// they're caused by those keys, and reinterprets them as key
|
- |
|
| 10576 |
// events. (Some of these keys are also handled by beforeinput
|
- |
|
| 10577 |
// events and the pendingAndroidKey mechanism, but that's not
|
- |
|
| 10578 |
// reliable in all situations.)
|
- |
|
| 10579 |
if (browser.android &&
|
- |
|
| 10580 |
((change.to == sel.to &&
|
- |
|
| 10581 |
// GBoard will sometimes remove a space it just inserted
|
- |
|
| 10582 |
// after a completion when you press enter
|
- |
|
| 10583 |
(change.from == sel.from || change.from == sel.from - 1 && view.state.sliceDoc(change.from, sel.from) == " ") &&
|
- |
|
| 10584 |
change.insert.length == 1 && change.insert.lines == 2 &&
|
- |
|
| 10585 |
dispatchKey(view.contentDOM, "Enter", 13)) ||
|
- |
|
| 10586 |
((change.from == sel.from - 1 && change.to == sel.to && change.insert.length == 0 ||
|
- |
|
| 10587 |
lastKey == 8 && change.insert.length < change.to - change.from && change.to > sel.head) &&
|
- |
|
| 10588 |
dispatchKey(view.contentDOM, "Backspace", 8)) ||
|
- |
|
| 10589 |
(change.from == sel.from && change.to == sel.to + 1 && change.insert.length == 0 &&
|
- |
|
| 10590 |
dispatchKey(view.contentDOM, "Delete", 46))))
|
- |
|
| 10591 |
return true;
|
- |
|
| 10592 |
let text = change.insert.toString();
|
- |
|
| 10593 |
if (view.inputState.composing >= 0)
|
- |
|
| 10594 |
view.inputState.composing++;
|
- |
|
| 10595 |
let defaultTr;
|
- |
|
| 10596 |
let defaultInsert = () => defaultTr || (defaultTr = applyDefaultInsert(view, change, newSel));
|
- |
|
| 10597 |
if (!view.state.facet(inputHandler$1).some(h => h(view, change.from, change.to, text, defaultInsert)))
|
- |
|
| 10598 |
view.dispatch(defaultInsert());
|
- |
|
| 10599 |
return true;
|
- |
|
| 10600 |
}
|
- |
|
| 10601 |
else if (newSel && !newSel.main.eq(sel)) {
|
- |
|
| 10602 |
let scrollIntoView = false, userEvent = "select";
|
- |
|
| 10603 |
if (view.inputState.lastSelectionTime > Date.now() - 50) {
|
- |
|
| 10604 |
if (view.inputState.lastSelectionOrigin == "select")
|
- |
|
| 10605 |
scrollIntoView = true;
|
- |
|
| 10606 |
userEvent = view.inputState.lastSelectionOrigin;
|
- |
|
| 10607 |
}
|
- |
|
| 10608 |
view.dispatch({ selection: newSel, scrollIntoView, userEvent });
|
- |
|
| 10609 |
return true;
|
- |
|
| 10610 |
}
|
- |
|
| 10611 |
else {
|
- |
|
| 10612 |
return false;
|
- |
|
| 10613 |
}
|
- |
|
| 10614 |
}
|
- |
|
| 10615 |
function applyDefaultInsert(view, change, newSel) {
|
- |
|
| 10616 |
let tr, startState = view.state, sel = startState.selection.main;
|
- |
|
| 10617 |
if (change.from >= sel.from && change.to <= sel.to && change.to - change.from >= (sel.to - sel.from) / 3 &&
|
- |
|
| 10618 |
(!newSel || newSel.main.empty && newSel.main.from == change.from + change.insert.length) &&
|
- |
|
| 10619 |
view.inputState.composing < 0) {
|
- |
|
| 10620 |
let before = sel.from < change.from ? startState.sliceDoc(sel.from, change.from) : "";
|
- |
|
| 10621 |
let after = sel.to > change.to ? startState.sliceDoc(change.to, sel.to) : "";
|
- |
|
| 10622 |
tr = startState.replaceSelection(view.state.toText(before + change.insert.sliceString(0, undefined, view.state.lineBreak) + after));
|
- |
|
| 10623 |
}
|
- |
|
| 10624 |
else {
|
- |
|
| 10625 |
let changes = startState.changes(change);
|
- |
|
| 10626 |
let mainSel = newSel && newSel.main.to <= changes.newLength ? newSel.main : undefined;
|
- |
|
| 10627 |
// Try to apply a composition change to all cursors
|
- |
|
| 10628 |
if (startState.selection.ranges.length > 1 && view.inputState.composing >= 0 &&
|
- |
|
| 10629 |
change.to <= sel.to && change.to >= sel.to - 10) {
|
- |
|
| 10630 |
let replaced = view.state.sliceDoc(change.from, change.to);
|
- |
|
| 10631 |
let compositionRange, composition = newSel && findCompositionNode(view, newSel.main.head);
|
- |
|
| 10632 |
if (composition) {
|
- |
|
| 10633 |
let dLen = change.insert.length - (change.to - change.from);
|
- |
|
| 10634 |
compositionRange = { from: composition.from, to: composition.to - dLen };
|
- |
|
| 10635 |
}
|
- |
|
| 10636 |
else {
|
- |
|
| 10637 |
compositionRange = view.state.doc.lineAt(sel.head);
|
- |
|
| 10638 |
}
|
- |
|
| 10639 |
let offset = sel.to - change.to, size = sel.to - sel.from;
|
- |
|
| 10640 |
tr = startState.changeByRange(range => {
|
- |
|
| 10641 |
if (range.from == sel.from && range.to == sel.to)
|
- |
|
| 10642 |
return { changes, range: mainSel || range.map(changes) };
|
- |
|
| 10643 |
let to = range.to - offset, from = to - replaced.length;
|
- |
|
| 10644 |
if (range.to - range.from != size || view.state.sliceDoc(from, to) != replaced ||
|
- |
|
| 10645 |
// Unfortunately, there's no way to make multiple
|
- |
|
| 10646 |
// changes in the same node work without aborting
|
- |
|
| 10647 |
// composition, so cursors in the composition range are
|
- |
|
| 10648 |
// ignored.
|
- |
|
| 10649 |
range.to >= compositionRange.from && range.from <= compositionRange.to)
|
- |
|
| 10650 |
return { range };
|
- |
|
| 10651 |
let rangeChanges = startState.changes({ from, to, insert: change.insert }), selOff = range.to - sel.to;
|
- |
|
| 10652 |
return {
|
- |
|
| 10653 |
changes: rangeChanges,
|
- |
|
| 10654 |
range: !mainSel ? range.map(rangeChanges) :
|
- |
|
| 10655 |
EditorSelection.range(Math.max(0, mainSel.anchor + selOff), Math.max(0, mainSel.head + selOff))
|
- |
|
| 10656 |
};
|
- |
|
| 10657 |
});
|
- |
|
| 10658 |
}
|
- |
|
| 10659 |
else {
|
- |
|
| 10660 |
tr = {
|
- |
|
| 10661 |
changes,
|
- |
|
| 10662 |
selection: mainSel && startState.selection.replaceRange(mainSel)
|
- |
|
| 10663 |
};
|
- |
|
| 10664 |
}
|
- |
|
| 10665 |
}
|
- |
|
| 10666 |
let userEvent = "input.type";
|
- |
|
| 10667 |
if (view.composing ||
|
- |
|
| 10668 |
view.inputState.compositionPendingChange && view.inputState.compositionEndedAt > Date.now() - 50) {
|
- |
|
| 10669 |
view.inputState.compositionPendingChange = false;
|
- |
|
| 10670 |
userEvent += ".compose";
|
- |
|
| 10671 |
if (view.inputState.compositionFirstChange) {
|
- |
|
| 10672 |
userEvent += ".start";
|
- |
|
| 10673 |
view.inputState.compositionFirstChange = false;
|
- |
|
| 10674 |
}
|
- |
|
| 10675 |
}
|
- |
|
| 10676 |
return startState.update(tr, { userEvent, scrollIntoView: true });
|
- |
|
| 10677 |
}
|
- |
|
| 10678 |
function findDiff(a, b, preferredPos, preferredSide) {
|
- |
|
| 10679 |
let minLen = Math.min(a.length, b.length);
|
- |
|
| 10680 |
let from = 0;
|
- |
|
| 10681 |
while (from < minLen && a.charCodeAt(from) == b.charCodeAt(from))
|
- |
|
| 10682 |
from++;
|
- |
|
| 10683 |
if (from == minLen && a.length == b.length)
|
- |
|
| 10684 |
return null;
|
- |
|
| 10685 |
let toA = a.length, toB = b.length;
|
- |
|
| 10686 |
while (toA > 0 && toB > 0 && a.charCodeAt(toA - 1) == b.charCodeAt(toB - 1)) {
|
- |
|
| 10687 |
toA--;
|
- |
|
| 10688 |
toB--;
|
- |
|
| 10689 |
}
|
- |
|
| 10690 |
if (preferredSide == "end") {
|
- |
|
| 10691 |
let adjust = Math.max(0, from - Math.min(toA, toB));
|
- |
|
| 10692 |
preferredPos -= toA + adjust - from;
|
- |
|
| 10693 |
}
|
- |
|
| 10694 |
if (toA < from && a.length < b.length) {
|
- |
|
| 10695 |
let move = preferredPos <= from && preferredPos >= toA ? from - preferredPos : 0;
|
- |
|
| 10696 |
from -= move;
|
- |
|
| 10697 |
toB = from + (toB - toA);
|
- |
|
| 10698 |
toA = from;
|
- |
|
| 10699 |
}
|
- |
|
| 10700 |
else if (toB < from) {
|
- |
|
| 10701 |
let move = preferredPos <= from && preferredPos >= toB ? from - preferredPos : 0;
|
- |
|
| 10702 |
from -= move;
|
- |
|
| 10703 |
toA = from + (toA - toB);
|
- |
|
| 10704 |
toB = from;
|
- |
|
| 10705 |
}
|
- |
|
| 10706 |
return { from, toA, toB };
|
- |
|
| 10707 |
}
|
- |
|
| 10708 |
function selectionPoints(view) {
|
- |
|
| 10709 |
let result = [];
|
- |
|
| 10710 |
if (view.root.activeElement != view.contentDOM)
|
- |
|
| 10711 |
return result;
|
- |
|
| 10712 |
let { anchorNode, anchorOffset, focusNode, focusOffset } = view.observer.selectionRange;
|
- |
|
| 10713 |
if (anchorNode) {
|
- |
|
| 10714 |
result.push(new DOMPoint(anchorNode, anchorOffset));
|
- |
|
| 10715 |
if (focusNode != anchorNode || focusOffset != anchorOffset)
|
- |
|
| 10716 |
result.push(new DOMPoint(focusNode, focusOffset));
|
- |
|
| 10717 |
}
|
- |
|
| 10718 |
return result;
|
- |
|
| 10719 |
}
|
- |
|
| 10720 |
function selectionFromPoints(points, base) {
|
- |
|
| 10721 |
if (points.length == 0)
|
- |
|
| 10722 |
return null;
|
- |
|
| 10723 |
let anchor = points[0].pos, head = points.length == 2 ? points[1].pos : anchor;
|
- |
|
| 10724 |
return anchor > -1 && head > -1 ? EditorSelection.single(anchor + base, head + base) : null;
|
- |
|
| 10725 |
}
|
- |
|
| 10726 |
|
10915 |
|
| 10727 |
const observeOptions = {
|
10916 |
const observeOptions = {
|
| 10728 |
childList: true,
|
10917 |
childList: true,
|
| 10729 |
characterData: true,
|
10918 |
characterData: true,
|
| 10730 |
subtree: true,
|
10919 |
subtree: true,
|
| Línea 10736... |
Línea 10925... |
| 10736 |
const useCharData = browser.ie && browser.ie_version <= 11;
|
10925 |
const useCharData = browser.ie && browser.ie_version <= 11;
|
| 10737 |
class DOMObserver {
|
10926 |
class DOMObserver {
|
| 10738 |
constructor(view) {
|
10927 |
constructor(view) {
|
| 10739 |
this.view = view;
|
10928 |
this.view = view;
|
| 10740 |
this.active = false;
|
10929 |
this.active = false;
|
| - |
|
10930 |
this.editContext = null;
|
| 10741 |
// The known selection. Kept in our own object, as opposed to just
|
10931 |
// The known selection. Kept in our own object, as opposed to just
|
| 10742 |
// directly accessing the selection because:
|
10932 |
// directly accessing the selection because:
|
| 10743 |
// - Safari doesn't report the right selection in shadow DOM
|
10933 |
// - Safari doesn't report the right selection in shadow DOM
|
| 10744 |
// - Reading from the selection forces a DOM layout
|
10934 |
// - Reading from the selection forces a DOM layout
|
| 10745 |
// - This way, we can ignore selectionchange events if we have
|
10935 |
// - This way, we can ignore selectionchange events if we have
|
| Línea 10780... |
Línea 10970... |
| 10780 |
m.type == "characterData" && m.oldValue.length > m.target.nodeValue.length))
|
10970 |
m.type == "characterData" && m.oldValue.length > m.target.nodeValue.length))
|
| 10781 |
this.flushSoon();
|
10971 |
this.flushSoon();
|
| 10782 |
else
|
10972 |
else
|
| 10783 |
this.flush();
|
10973 |
this.flush();
|
| 10784 |
});
|
10974 |
});
|
| - |
|
10975 |
if (window.EditContext && view.constructor.EDIT_CONTEXT !== false &&
|
| - |
|
10976 |
// Chrome <126 doesn't support inverted selections in edit context (#1392)
|
| - |
|
10977 |
!(browser.chrome && browser.chrome_version < 126)) {
|
| - |
|
10978 |
this.editContext = new EditContextManager(view);
|
| - |
|
10979 |
if (view.state.facet(editable))
|
| - |
|
10980 |
view.contentDOM.editContext = this.editContext.editContext;
|
| - |
|
10981 |
}
|
| 10785 |
if (useCharData)
|
10982 |
if (useCharData)
|
| 10786 |
this.onCharData = (event) => {
|
10983 |
this.onCharData = (event) => {
|
| 10787 |
this.queue.push({ target: event.target,
|
10984 |
this.queue.push({ target: event.target,
|
| 10788 |
type: "characterData",
|
10985 |
type: "characterData",
|
| 10789 |
oldValue: event.prevValue });
|
10986 |
oldValue: event.prevValue });
|
| Línea 10830... |
Línea 11027... |
| 10830 |
this.view.measure();
|
11027 |
this.view.measure();
|
| 10831 |
}
|
11028 |
}
|
| 10832 |
onScroll(e) {
|
11029 |
onScroll(e) {
|
| 10833 |
if (this.intersecting)
|
11030 |
if (this.intersecting)
|
| 10834 |
this.flush(false);
|
11031 |
this.flush(false);
|
| - |
|
11032 |
if (this.editContext)
|
| - |
|
11033 |
this.view.requestMeasure(this.editContext.measureReq);
|
| 10835 |
this.onScrollChanged(e);
|
11034 |
this.onScrollChanged(e);
|
| 10836 |
}
|
11035 |
}
|
| 10837 |
onResize() {
|
11036 |
onResize() {
|
| 10838 |
if (this.resizeTimeout < 0)
|
11037 |
if (this.resizeTimeout < 0)
|
| 10839 |
this.resizeTimeout = setTimeout(() => {
|
11038 |
this.resizeTimeout = setTimeout(() => {
|
| 10840 |
this.resizeTimeout = -1;
|
11039 |
this.resizeTimeout = -1;
|
| 10841 |
this.view.requestMeasure();
|
11040 |
this.view.requestMeasure();
|
| 10842 |
}, 50);
|
11041 |
}, 50);
|
| 10843 |
}
|
11042 |
}
|
| 10844 |
onPrint(event) {
|
11043 |
onPrint(event) {
|
| 10845 |
if (event.type == "change" && !event.matches)
|
11044 |
if ((event.type == "change" || !event.type) && !event.matches)
|
| 10846 |
return;
|
11045 |
return;
|
| 10847 |
this.view.viewState.printing = true;
|
11046 |
this.view.viewState.printing = true;
|
| 10848 |
this.view.measure();
|
11047 |
this.view.measure();
|
| 10849 |
setTimeout(() => {
|
11048 |
setTimeout(() => {
|
| 10850 |
this.view.viewState.printing = false;
|
11049 |
this.view.viewState.printing = false;
|
| Línea 10862... |
Línea 11061... |
| 10862 |
onSelectionChange(event) {
|
11061 |
onSelectionChange(event) {
|
| 10863 |
let wasChanged = this.selectionChanged;
|
11062 |
let wasChanged = this.selectionChanged;
|
| 10864 |
if (!this.readSelectionRange() || this.delayedAndroidKey)
|
11063 |
if (!this.readSelectionRange() || this.delayedAndroidKey)
|
| 10865 |
return;
|
11064 |
return;
|
| 10866 |
let { view } = this, sel = this.selectionRange;
|
11065 |
let { view } = this, sel = this.selectionRange;
|
| 10867 |
if (view.state.facet(editable) ? view.root.activeElement != this.dom : !hasSelection(view.dom, sel))
|
11066 |
if (view.state.facet(editable) ? view.root.activeElement != this.dom : !hasSelection(this.dom, sel))
|
| 10868 |
return;
|
11067 |
return;
|
| 10869 |
let context = sel.anchorNode && view.docView.nearest(sel.anchorNode);
|
11068 |
let context = sel.anchorNode && view.docView.nearest(sel.anchorNode);
|
| 10870 |
if (context && context.ignoreEvent(event)) {
|
11069 |
if (context && context.ignoreEvent(event)) {
|
| 10871 |
if (!wasChanged)
|
11070 |
if (!wasChanged)
|
| 10872 |
this.selectionChanged = false;
|
11071 |
this.selectionChanged = false;
|
| Línea 10890... |
Línea 11089... |
| 10890 |
// https://github.com/codemirror/dev/issues/414
|
11089 |
// https://github.com/codemirror/dev/issues/414
|
| 10891 |
let selection = getSelection(view.root);
|
11090 |
let selection = getSelection(view.root);
|
| 10892 |
if (!selection)
|
11091 |
if (!selection)
|
| 10893 |
return false;
|
11092 |
return false;
|
| 10894 |
let range = browser.safari && view.root.nodeType == 11 &&
|
11093 |
let range = browser.safari && view.root.nodeType == 11 &&
|
| 10895 |
deepActiveElement(this.dom.ownerDocument) == this.dom &&
|
11094 |
view.root.activeElement == this.dom &&
|
| 10896 |
safariSelectionRangeHack(this.view, selection) || selection;
|
11095 |
safariSelectionRangeHack(this.view, selection) || selection;
|
| 10897 |
if (!range || this.selectionRange.eq(range))
|
11096 |
if (!range || this.selectionRange.eq(range))
|
| 10898 |
return false;
|
11097 |
return false;
|
| 10899 |
let local = hasSelection(this.dom, range);
|
11098 |
let local = hasSelection(this.dom, range);
|
| 10900 |
// Detect the situation where the browser has, on focus, moved the
|
11099 |
// Detect the situation where the browser has, on focus, moved the
|
| Línea 11088... |
Línea 11287... |
| 11088 |
this.view.requestMeasure();
|
11287 |
this.view.requestMeasure();
|
| 11089 |
return false;
|
11288 |
return false;
|
| 11090 |
}
|
11289 |
}
|
| 11091 |
let startState = this.view.state;
|
11290 |
let startState = this.view.state;
|
| 11092 |
let handled = applyDOMChange(this.view, domChange);
|
11291 |
let handled = applyDOMChange(this.view, domChange);
|
| 11093 |
// The view wasn't updated
|
11292 |
// The view wasn't updated but DOM/selection changes were seen. Reset the view.
|
| 11094 |
if (this.view.state == startState)
|
11293 |
if (this.view.state == startState &&
|
| - |
|
11294 |
(domChange.domChanged || domChange.newSel && !domChange.newSel.main.eq(this.view.state.selection.main)))
|
| 11095 |
this.view.update([]);
|
11295 |
this.view.update([]);
|
| 11096 |
return handled;
|
11296 |
return handled;
|
| 11097 |
}
|
11297 |
}
|
| 11098 |
readMutation(rec) {
|
11298 |
readMutation(rec) {
|
| 11099 |
let cView = this.view.docView.nearest(rec.target);
|
11299 |
let cView = this.view.docView.nearest(rec.target);
|
| Línea 11122... |
Línea 11322... |
| 11122 |
this.addWindowListeners(this.win);
|
11322 |
this.addWindowListeners(this.win);
|
| 11123 |
}
|
11323 |
}
|
| 11124 |
}
|
11324 |
}
|
| 11125 |
addWindowListeners(win) {
|
11325 |
addWindowListeners(win) {
|
| 11126 |
win.addEventListener("resize", this.onResize);
|
11326 |
win.addEventListener("resize", this.onResize);
|
| 11127 |
if (this.printQuery)
|
11327 |
if (this.printQuery) {
|
| - |
|
11328 |
if (this.printQuery.addEventListener)
|
| 11128 |
this.printQuery.addEventListener("change", this.onPrint);
|
11329 |
this.printQuery.addEventListener("change", this.onPrint);
|
| - |
|
11330 |
else
|
| - |
|
11331 |
this.printQuery.addListener(this.onPrint);
|
| - |
|
11332 |
}
|
| 11129 |
else
|
11333 |
else
|
| 11130 |
win.addEventListener("beforeprint", this.onPrint);
|
11334 |
win.addEventListener("beforeprint", this.onPrint);
|
| 11131 |
win.addEventListener("scroll", this.onScroll);
|
11335 |
win.addEventListener("scroll", this.onScroll);
|
| 11132 |
win.document.addEventListener("selectionchange", this.onSelectionChange);
|
11336 |
win.document.addEventListener("selectionchange", this.onSelectionChange);
|
| 11133 |
}
|
11337 |
}
|
| 11134 |
removeWindowListeners(win) {
|
11338 |
removeWindowListeners(win) {
|
| 11135 |
win.removeEventListener("scroll", this.onScroll);
|
11339 |
win.removeEventListener("scroll", this.onScroll);
|
| 11136 |
win.removeEventListener("resize", this.onResize);
|
11340 |
win.removeEventListener("resize", this.onResize);
|
| 11137 |
if (this.printQuery)
|
11341 |
if (this.printQuery) {
|
| - |
|
11342 |
if (this.printQuery.removeEventListener)
|
| 11138 |
this.printQuery.removeEventListener("change", this.onPrint);
|
11343 |
this.printQuery.removeEventListener("change", this.onPrint);
|
| - |
|
11344 |
else
|
| - |
|
11345 |
this.printQuery.removeListener(this.onPrint);
|
| - |
|
11346 |
}
|
| 11139 |
else
|
11347 |
else
|
| 11140 |
win.removeEventListener("beforeprint", this.onPrint);
|
11348 |
win.removeEventListener("beforeprint", this.onPrint);
|
| 11141 |
win.document.removeEventListener("selectionchange", this.onSelectionChange);
|
11349 |
win.document.removeEventListener("selectionchange", this.onSelectionChange);
|
| 11142 |
}
|
11350 |
}
|
| - |
|
11351 |
update(update) {
|
| - |
|
11352 |
if (this.editContext) {
|
| - |
|
11353 |
this.editContext.update(update);
|
| - |
|
11354 |
if (update.startState.facet(editable) != update.state.facet(editable))
|
| - |
|
11355 |
update.view.contentDOM.editContext = update.state.facet(editable) ? this.editContext.editContext : null;
|
| - |
|
11356 |
}
|
| - |
|
11357 |
}
|
| 11143 |
destroy() {
|
11358 |
destroy() {
|
| 11144 |
var _a, _b, _c;
|
11359 |
var _a, _b, _c;
|
| 11145 |
this.stop();
|
11360 |
this.stop();
|
| 11146 |
(_a = this.intersection) === null || _a === void 0 ? void 0 : _a.disconnect();
|
11361 |
(_a = this.intersection) === null || _a === void 0 ? void 0 : _a.disconnect();
|
| 11147 |
(_b = this.gapIntersection) === null || _b === void 0 ? void 0 : _b.disconnect();
|
11362 |
(_b = this.gapIntersection) === null || _b === void 0 ? void 0 : _b.disconnect();
|
| Línea 11151... |
Línea 11366... |
| 11151 |
this.removeWindowListeners(this.win);
|
11366 |
this.removeWindowListeners(this.win);
|
| 11152 |
clearTimeout(this.parentCheck);
|
11367 |
clearTimeout(this.parentCheck);
|
| 11153 |
clearTimeout(this.resizeTimeout);
|
11368 |
clearTimeout(this.resizeTimeout);
|
| 11154 |
this.win.cancelAnimationFrame(this.delayedFlush);
|
11369 |
this.win.cancelAnimationFrame(this.delayedFlush);
|
| 11155 |
this.win.cancelAnimationFrame(this.flushingAndroidKey);
|
11370 |
this.win.cancelAnimationFrame(this.flushingAndroidKey);
|
| - |
|
11371 |
if (this.editContext) {
|
| - |
|
11372 |
this.view.contentDOM.editContext = null;
|
| - |
|
11373 |
this.editContext.destroy();
|
| - |
|
11374 |
}
|
| 11156 |
}
|
11375 |
}
|
| 11157 |
}
|
11376 |
}
|
| 11158 |
function findChild(cView, dom, dir) {
|
11377 |
function findChild(cView, dom, dir) {
|
| 11159 |
while (dom) {
|
11378 |
while (dom) {
|
| 11160 |
let curView = ContentView.get(dom);
|
11379 |
let curView = ContentView.get(dom);
|
| Línea 11197... |
Línea 11416... |
| 11197 |
view.contentDOM.addEventListener("beforeinput", read, true);
|
11416 |
view.contentDOM.addEventListener("beforeinput", read, true);
|
| 11198 |
view.dom.ownerDocument.execCommand("indent");
|
11417 |
view.dom.ownerDocument.execCommand("indent");
|
| 11199 |
view.contentDOM.removeEventListener("beforeinput", read, true);
|
11418 |
view.contentDOM.removeEventListener("beforeinput", read, true);
|
| 11200 |
return found ? buildSelectionRangeFromRange(view, found) : null;
|
11419 |
return found ? buildSelectionRangeFromRange(view, found) : null;
|
| 11201 |
}
|
11420 |
}
|
| - |
|
11421 |
class EditContextManager {
|
| - |
|
11422 |
constructor(view) {
|
| - |
|
11423 |
// The document window for which the text in the context is
|
| - |
|
11424 |
// maintained. For large documents, this may be smaller than the
|
| - |
|
11425 |
// editor document. This window always includes the selection head.
|
| - |
|
11426 |
this.from = 0;
|
| - |
|
11427 |
this.to = 0;
|
| - |
|
11428 |
// When applying a transaction, this is used to compare the change
|
| - |
|
11429 |
// made to the context content to the change in the transaction in
|
| - |
|
11430 |
// order to make the minimal changes to the context (since touching
|
| - |
|
11431 |
// that sometimes breaks series of multiple edits made for a single
|
| - |
|
11432 |
// user action on some Android keyboards)
|
| - |
|
11433 |
this.pendingContextChange = null;
|
| - |
|
11434 |
this.handlers = Object.create(null);
|
| - |
|
11435 |
// Kludge to work around the fact that EditContext does not respond
|
| - |
|
11436 |
// well to having its content updated during a composition (see #1472)
|
| - |
|
11437 |
this.composing = null;
|
| - |
|
11438 |
this.resetRange(view.state);
|
| - |
|
11439 |
let context = this.editContext = new window.EditContext({
|
| - |
|
11440 |
text: view.state.doc.sliceString(this.from, this.to),
|
| - |
|
11441 |
selectionStart: this.toContextPos(Math.max(this.from, Math.min(this.to, view.state.selection.main.anchor))),
|
| - |
|
11442 |
selectionEnd: this.toContextPos(view.state.selection.main.head)
|
| - |
|
11443 |
});
|
| - |
|
11444 |
this.handlers.textupdate = e => {
|
| - |
|
11445 |
let main = view.state.selection.main, { anchor, head } = main;
|
| - |
|
11446 |
let from = this.toEditorPos(e.updateRangeStart), to = this.toEditorPos(e.updateRangeEnd);
|
| - |
|
11447 |
if (view.inputState.composing >= 0 && !this.composing)
|
| - |
|
11448 |
this.composing = { contextBase: e.updateRangeStart, editorBase: from, drifted: false };
|
| - |
|
11449 |
let change = { from, to, insert: Text.of(e.text.split("\n")) };
|
| - |
|
11450 |
// If the window doesn't include the anchor, assume changes
|
| - |
|
11451 |
// adjacent to a side go up to the anchor.
|
| - |
|
11452 |
if (change.from == this.from && anchor < this.from)
|
| - |
|
11453 |
change.from = anchor;
|
| - |
|
11454 |
else if (change.to == this.to && anchor > this.to)
|
| - |
|
11455 |
change.to = anchor;
|
| - |
|
11456 |
// Edit contexts sometimes fire empty changes
|
| - |
|
11457 |
if (change.from == change.to && !change.insert.length) {
|
| - |
|
11458 |
let newSel = EditorSelection.single(this.toEditorPos(e.selectionStart), this.toEditorPos(e.selectionEnd));
|
| - |
|
11459 |
if (!newSel.main.eq(main))
|
| - |
|
11460 |
view.dispatch({ selection: newSel, userEvent: "select" });
|
| - |
|
11461 |
return;
|
| - |
|
11462 |
}
|
| - |
|
11463 |
if ((browser.mac || browser.android) && change.from == head - 1 &&
|
| - |
|
11464 |
/^\. ?$/.test(e.text) && view.contentDOM.getAttribute("autocorrect") == "off")
|
| - |
|
11465 |
change = { from, to, insert: Text.of([e.text.replace(".", " ")]) };
|
| - |
|
11466 |
this.pendingContextChange = change;
|
| - |
|
11467 |
if (!view.state.readOnly) {
|
| - |
|
11468 |
let newLen = this.to - this.from + (change.to - change.from + change.insert.length);
|
| - |
|
11469 |
applyDOMChangeInner(view, change, EditorSelection.single(this.toEditorPos(e.selectionStart, newLen), this.toEditorPos(e.selectionEnd, newLen)));
|
| - |
|
11470 |
}
|
| - |
|
11471 |
// If the transaction didn't flush our change, revert it so
|
| - |
|
11472 |
// that the context is in sync with the editor state again.
|
| - |
|
11473 |
if (this.pendingContextChange) {
|
| - |
|
11474 |
this.revertPending(view.state);
|
| - |
|
11475 |
this.setSelection(view.state);
|
| - |
|
11476 |
}
|
| - |
|
11477 |
};
|
| - |
|
11478 |
this.handlers.characterboundsupdate = e => {
|
| - |
|
11479 |
let rects = [], prev = null;
|
| - |
|
11480 |
for (let i = this.toEditorPos(e.rangeStart), end = this.toEditorPos(e.rangeEnd); i < end; i++) {
|
| - |
|
11481 |
let rect = view.coordsForChar(i);
|
| - |
|
11482 |
prev = (rect && new DOMRect(rect.left, rect.top, rect.right - rect.left, rect.bottom - rect.top))
|
| - |
|
11483 |
|| prev || new DOMRect;
|
| - |
|
11484 |
rects.push(prev);
|
| - |
|
11485 |
}
|
| - |
|
11486 |
context.updateCharacterBounds(e.rangeStart, rects);
|
| - |
|
11487 |
};
|
| - |
|
11488 |
this.handlers.textformatupdate = e => {
|
| - |
|
11489 |
let deco = [];
|
| - |
|
11490 |
for (let format of e.getTextFormats()) {
|
| - |
|
11491 |
let lineStyle = format.underlineStyle, thickness = format.underlineThickness;
|
| - |
|
11492 |
if (lineStyle != "None" && thickness != "None") {
|
| - |
|
11493 |
let from = this.toEditorPos(format.rangeStart), to = this.toEditorPos(format.rangeEnd);
|
| - |
|
11494 |
if (from < to) {
|
| - |
|
11495 |
let style = `text-decoration: underline ${lineStyle == "Dashed" ? "dashed " : lineStyle == "Squiggle" ? "wavy " : ""}${thickness == "Thin" ? 1 : 2}px`;
|
| - |
|
11496 |
deco.push(Decoration.mark({ attributes: { style } }).range(from, to));
|
| - |
|
11497 |
}
|
| - |
|
11498 |
}
|
| - |
|
11499 |
}
|
| - |
|
11500 |
view.dispatch({ effects: setEditContextFormatting.of(Decoration.set(deco)) });
|
| - |
|
11501 |
};
|
| - |
|
11502 |
this.handlers.compositionstart = () => {
|
| - |
|
11503 |
if (view.inputState.composing < 0) {
|
| - |
|
11504 |
view.inputState.composing = 0;
|
| - |
|
11505 |
view.inputState.compositionFirstChange = true;
|
| - |
|
11506 |
}
|
| - |
|
11507 |
};
|
| - |
|
11508 |
this.handlers.compositionend = () => {
|
| - |
|
11509 |
view.inputState.composing = -1;
|
| - |
|
11510 |
view.inputState.compositionFirstChange = null;
|
| - |
|
11511 |
if (this.composing) {
|
| - |
|
11512 |
let { drifted } = this.composing;
|
| - |
|
11513 |
this.composing = null;
|
| - |
|
11514 |
if (drifted)
|
| - |
|
11515 |
this.reset(view.state);
|
| - |
|
11516 |
}
|
| - |
|
11517 |
};
|
| - |
|
11518 |
for (let event in this.handlers)
|
| - |
|
11519 |
context.addEventListener(event, this.handlers[event]);
|
| - |
|
11520 |
this.measureReq = { read: view => {
|
| - |
|
11521 |
this.editContext.updateControlBounds(view.contentDOM.getBoundingClientRect());
|
| - |
|
11522 |
let sel = getSelection(view.root);
|
| - |
|
11523 |
if (sel && sel.rangeCount)
|
| - |
|
11524 |
this.editContext.updateSelectionBounds(sel.getRangeAt(0).getBoundingClientRect());
|
| - |
|
11525 |
} };
|
| - |
|
11526 |
}
|
| - |
|
11527 |
applyEdits(update) {
|
| - |
|
11528 |
let off = 0, abort = false, pending = this.pendingContextChange;
|
| - |
|
11529 |
update.changes.iterChanges((fromA, toA, _fromB, _toB, insert) => {
|
| - |
|
11530 |
if (abort)
|
| - |
|
11531 |
return;
|
| - |
|
11532 |
let dLen = insert.length - (toA - fromA);
|
| - |
|
11533 |
if (pending && toA >= pending.to) {
|
| - |
|
11534 |
if (pending.from == fromA && pending.to == toA && pending.insert.eq(insert)) {
|
| - |
|
11535 |
pending = this.pendingContextChange = null; // Match
|
| - |
|
11536 |
off += dLen;
|
| - |
|
11537 |
this.to += dLen;
|
| - |
|
11538 |
return;
|
| - |
|
11539 |
}
|
| - |
|
11540 |
else { // Mismatch, revert
|
| - |
|
11541 |
pending = null;
|
| - |
|
11542 |
this.revertPending(update.state);
|
| - |
|
11543 |
}
|
| - |
|
11544 |
}
|
| - |
|
11545 |
fromA += off;
|
| - |
|
11546 |
toA += off;
|
| - |
|
11547 |
if (toA <= this.from) { // Before the window
|
| - |
|
11548 |
this.from += dLen;
|
| - |
|
11549 |
this.to += dLen;
|
| - |
|
11550 |
}
|
| - |
|
11551 |
else if (fromA < this.to) { // Overlaps with window
|
| - |
|
11552 |
if (fromA < this.from || toA > this.to || (this.to - this.from) + insert.length > 30000 /* CxVp.MaxSize */) {
|
| - |
|
11553 |
abort = true;
|
| - |
|
11554 |
return;
|
| - |
|
11555 |
}
|
| - |
|
11556 |
this.editContext.updateText(this.toContextPos(fromA), this.toContextPos(toA), insert.toString());
|
| - |
|
11557 |
this.to += dLen;
|
| - |
|
11558 |
}
|
| - |
|
11559 |
off += dLen;
|
| - |
|
11560 |
});
|
| - |
|
11561 |
if (pending && !abort)
|
| - |
|
11562 |
this.revertPending(update.state);
|
| - |
|
11563 |
return !abort;
|
| - |
|
11564 |
}
|
| - |
|
11565 |
update(update) {
|
| - |
|
11566 |
let reverted = this.pendingContextChange, startSel = update.startState.selection.main;
|
| - |
|
11567 |
if (this.composing &&
|
| - |
|
11568 |
(this.composing.drifted ||
|
| - |
|
11569 |
(!update.changes.touchesRange(startSel.from, startSel.to) &&
|
| - |
|
11570 |
update.transactions.some(tr => !tr.isUserEvent("input.type") && tr.changes.touchesRange(this.from, this.to))))) {
|
| - |
|
11571 |
this.composing.drifted = true;
|
| - |
|
11572 |
this.composing.editorBase = update.changes.mapPos(this.composing.editorBase);
|
| - |
|
11573 |
}
|
| - |
|
11574 |
else if (!this.applyEdits(update) || !this.rangeIsValid(update.state)) {
|
| - |
|
11575 |
this.pendingContextChange = null;
|
| - |
|
11576 |
this.reset(update.state);
|
| - |
|
11577 |
}
|
| - |
|
11578 |
else if (update.docChanged || update.selectionSet || reverted) {
|
| - |
|
11579 |
this.setSelection(update.state);
|
| - |
|
11580 |
}
|
| - |
|
11581 |
if (update.geometryChanged || update.docChanged || update.selectionSet)
|
| - |
|
11582 |
update.view.requestMeasure(this.measureReq);
|
| - |
|
11583 |
}
|
| - |
|
11584 |
resetRange(state) {
|
| - |
|
11585 |
let { head } = state.selection.main;
|
| - |
|
11586 |
this.from = Math.max(0, head - 10000 /* CxVp.Margin */);
|
| - |
|
11587 |
this.to = Math.min(state.doc.length, head + 10000 /* CxVp.Margin */);
|
| - |
|
11588 |
}
|
| - |
|
11589 |
reset(state) {
|
| - |
|
11590 |
this.resetRange(state);
|
| - |
|
11591 |
this.editContext.updateText(0, this.editContext.text.length, state.doc.sliceString(this.from, this.to));
|
| - |
|
11592 |
this.setSelection(state);
|
| - |
|
11593 |
}
|
| - |
|
11594 |
revertPending(state) {
|
| - |
|
11595 |
let pending = this.pendingContextChange;
|
| - |
|
11596 |
this.pendingContextChange = null;
|
| - |
|
11597 |
this.editContext.updateText(this.toContextPos(pending.from), this.toContextPos(pending.from + pending.insert.length), state.doc.sliceString(pending.from, pending.to));
|
| - |
|
11598 |
}
|
| - |
|
11599 |
setSelection(state) {
|
| - |
|
11600 |
let { main } = state.selection;
|
| - |
|
11601 |
let start = this.toContextPos(Math.max(this.from, Math.min(this.to, main.anchor)));
|
| - |
|
11602 |
let end = this.toContextPos(main.head);
|
| - |
|
11603 |
if (this.editContext.selectionStart != start || this.editContext.selectionEnd != end)
|
| - |
|
11604 |
this.editContext.updateSelection(start, end);
|
| - |
|
11605 |
}
|
| - |
|
11606 |
rangeIsValid(state) {
|
| - |
|
11607 |
let { head } = state.selection.main;
|
| - |
|
11608 |
return !(this.from > 0 && head - this.from < 500 /* CxVp.MinMargin */ ||
|
| - |
|
11609 |
this.to < state.doc.length && this.to - head < 500 /* CxVp.MinMargin */ ||
|
| - |
|
11610 |
this.to - this.from > 10000 /* CxVp.Margin */ * 3);
|
| - |
|
11611 |
}
|
| - |
|
11612 |
toEditorPos(contextPos, clipLen = this.to - this.from) {
|
| - |
|
11613 |
contextPos = Math.min(contextPos, clipLen);
|
| - |
|
11614 |
let c = this.composing;
|
| - |
|
11615 |
return c && c.drifted ? c.editorBase + (contextPos - c.contextBase) : contextPos + this.from;
|
| - |
|
11616 |
}
|
| - |
|
11617 |
toContextPos(editorPos) {
|
| - |
|
11618 |
let c = this.composing;
|
| - |
|
11619 |
return c && c.drifted ? c.contextBase + (editorPos - c.editorBase) : editorPos - this.from;
|
| - |
|
11620 |
}
|
| - |
|
11621 |
destroy() {
|
| - |
|
11622 |
for (let event in this.handlers)
|
| - |
|
11623 |
this.editContext.removeEventListener(event, this.handlers[event]);
|
| - |
|
11624 |
}
|
| - |
|
11625 |
}
|
| Línea 11202... |
Línea 11626... |
| 11202 |
|
11626 |
|
| 11203 |
// The editor's update state machine looks something like this:
|
11627 |
// The editor's update state machine looks something like this:
|
| 11204 |
//
|
11628 |
//
|
| 11205 |
// Idle → Updating ⇆ Idle (unchecked) → Measuring → Idle
|
11629 |
// Idle → Updating ⇆ Idle (unchecked) → Measuring → Idle
|
| Línea 11271... |
Línea 11695... |
| 11271 |
Construct a new view. You'll want to either provide a `parent`
|
11695 |
Construct a new view. You'll want to either provide a `parent`
|
| 11272 |
option, or put `view.dom` into your document after creating a
|
11696 |
option, or put `view.dom` into your document after creating a
|
| 11273 |
view, so that the user can see the editor.
|
11697 |
view, so that the user can see the editor.
|
| 11274 |
*/
|
11698 |
*/
|
| 11275 |
constructor(config = {}) {
|
11699 |
constructor(config = {}) {
|
| - |
|
11700 |
var _a;
|
| 11276 |
this.plugins = [];
|
11701 |
this.plugins = [];
|
| 11277 |
this.pluginMap = new Map;
|
11702 |
this.pluginMap = new Map;
|
| 11278 |
this.editorAttrs = {};
|
11703 |
this.editorAttrs = {};
|
| 11279 |
this.contentAttrs = {};
|
11704 |
this.contentAttrs = {};
|
| 11280 |
this.bidiCache = [];
|
11705 |
this.bidiCache = [];
|
| Línea 11322... |
Línea 11747... |
| 11322 |
this.docView = new DocView(this);
|
11747 |
this.docView = new DocView(this);
|
| 11323 |
this.mountStyles();
|
11748 |
this.mountStyles();
|
| 11324 |
this.updateAttrs();
|
11749 |
this.updateAttrs();
|
| 11325 |
this.updateState = 0 /* UpdateState.Idle */;
|
11750 |
this.updateState = 0 /* UpdateState.Idle */;
|
| 11326 |
this.requestMeasure();
|
11751 |
this.requestMeasure();
|
| - |
|
11752 |
if ((_a = document.fonts) === null || _a === void 0 ? void 0 : _a.ready)
|
| - |
|
11753 |
document.fonts.ready.then(() => this.requestMeasure());
|
| 11327 |
}
|
11754 |
}
|
| 11328 |
dispatch(...input) {
|
11755 |
dispatch(...input) {
|
| 11329 |
let trs = input.length == 1 && input[0] instanceof Transaction ? input
|
11756 |
let trs = input.length == 1 && input[0] instanceof Transaction ? input
|
| 11330 |
: input.length == 1 && Array.isArray(input[0]) ? input[0]
|
11757 |
: input.length == 1 && Array.isArray(input[0]) ? input[0]
|
| 11331 |
: [this.state.update(...input)];
|
11758 |
: [this.state.update(...input)];
|
| Línea 11654... |
Línea 12081... |
| 11654 |
});
|
12081 |
});
|
| 11655 |
let contentAttrs = {
|
12082 |
let contentAttrs = {
|
| 11656 |
spellcheck: "false",
|
12083 |
spellcheck: "false",
|
| 11657 |
autocorrect: "off",
|
12084 |
autocorrect: "off",
|
| 11658 |
autocapitalize: "off",
|
12085 |
autocapitalize: "off",
|
| - |
|
12086 |
writingsuggestions: "false",
|
| 11659 |
translate: "no",
|
12087 |
translate: "no",
|
| 11660 |
contenteditable: !this.state.facet(editable) ? "false" : "true",
|
12088 |
contenteditable: !this.state.facet(editable) ? "false" : "true",
|
| 11661 |
class: "cm-content",
|
12089 |
class: "cm-content",
|
| 11662 |
style: `${browser.tabSize}: ${this.state.tabSize}`,
|
12090 |
style: `${browser.tabSize}: ${this.state.tabSize}`,
|
| 11663 |
role: "textbox",
|
12091 |
role: "textbox",
|
| Línea 11787... |
Línea 12215... |
| 11787 |
return this.viewState.viewportLines;
|
12215 |
return this.viewState.viewportLines;
|
| 11788 |
}
|
12216 |
}
|
| 11789 |
/**
|
12217 |
/**
|
| 11790 |
Find the line block around the given document position. A line
|
12218 |
Find the line block around the given document position. A line
|
| 11791 |
block is a range delimited on both sides by either a
|
12219 |
block is a range delimited on both sides by either a
|
| 11792 |
non-[hidden](https://codemirror.net/6/docs/ref/#view.Decoration^replace) line breaks, or the
|
12220 |
non-[hidden](https://codemirror.net/6/docs/ref/#view.Decoration^replace) line break, or the
|
| 11793 |
start/end of the document. It will usually just hold a line of
|
12221 |
start/end of the document. It will usually just hold a line of
|
| 11794 |
text, but may be broken into multiple textblocks by block
|
12222 |
text, but may be broken into multiple textblocks by block
|
| 11795 |
widgets.
|
12223 |
widgets.
|
| 11796 |
*/
|
12224 |
*/
|
| 11797 |
lineBlockAt(pos) {
|
12225 |
lineBlockAt(pos) {
|
| Línea 12019... |
Línea 12447... |
| 12019 |
document, unregistering event handlers, and notifying
|
12447 |
document, unregistering event handlers, and notifying
|
| 12020 |
plugins. The view instance can no longer be used after
|
12448 |
plugins. The view instance can no longer be used after
|
| 12021 |
calling this.
|
12449 |
calling this.
|
| 12022 |
*/
|
12450 |
*/
|
| 12023 |
destroy() {
|
12451 |
destroy() {
|
| - |
|
12452 |
if (this.root.activeElement == this.contentDOM)
|
| - |
|
12453 |
this.contentDOM.blur();
|
| 12024 |
for (let plugin of this.plugins)
|
12454 |
for (let plugin of this.plugins)
|
| 12025 |
plugin.destroy(this);
|
12455 |
plugin.destroy(this);
|
| 12026 |
this.plugins = [];
|
12456 |
this.plugins = [];
|
| 12027 |
this.inputState.destroy();
|
12457 |
this.inputState.destroy();
|
| 12028 |
this.docView.destroy();
|
12458 |
this.docView.destroy();
|
| Línea 12056... |
Línea 12486... |
| 12056 |
let { scrollTop, scrollLeft } = this.scrollDOM;
|
12486 |
let { scrollTop, scrollLeft } = this.scrollDOM;
|
| 12057 |
let ref = this.viewState.scrollAnchorAt(scrollTop);
|
12487 |
let ref = this.viewState.scrollAnchorAt(scrollTop);
|
| 12058 |
return scrollIntoView$1.of(new ScrollTarget(EditorSelection.cursor(ref.from), "start", "start", ref.top - scrollTop, scrollLeft, true));
|
12488 |
return scrollIntoView$1.of(new ScrollTarget(EditorSelection.cursor(ref.from), "start", "start", ref.top - scrollTop, scrollLeft, true));
|
| 12059 |
}
|
12489 |
}
|
| 12060 |
/**
|
12490 |
/**
|
| - |
|
12491 |
Enable or disable tab-focus mode, which disables key bindings
|
| - |
|
12492 |
for Tab and Shift-Tab, letting the browser's default
|
| - |
|
12493 |
focus-changing behavior go through instead. This is useful to
|
| - |
|
12494 |
prevent trapping keyboard users in your editor.
|
| - |
|
12495 |
|
| - |
|
12496 |
Without argument, this toggles the mode. With a boolean, it
|
| - |
|
12497 |
enables (true) or disables it (false). Given a number, it
|
| - |
|
12498 |
temporarily enables the mode until that number of milliseconds
|
| - |
|
12499 |
have passed or another non-Tab key is pressed.
|
| - |
|
12500 |
*/
|
| - |
|
12501 |
setTabFocusMode(to) {
|
| - |
|
12502 |
if (to == null)
|
| - |
|
12503 |
this.inputState.tabFocusMode = this.inputState.tabFocusMode < 0 ? 0 : -1;
|
| - |
|
12504 |
else if (typeof to == "boolean")
|
| - |
|
12505 |
this.inputState.tabFocusMode = to ? 0 : -1;
|
| - |
|
12506 |
else if (this.inputState.tabFocusMode != 0)
|
| - |
|
12507 |
this.inputState.tabFocusMode = Date.now() + to;
|
| - |
|
12508 |
}
|
| - |
|
12509 |
/**
|
| 12061 |
Returns an extension that can be used to add DOM event handlers.
|
12510 |
Returns an extension that can be used to add DOM event handlers.
|
| 12062 |
The value should be an object mapping event names to handler
|
12511 |
The value should be an object mapping event names to handler
|
| 12063 |
functions. For any given event, such functions are ordered by
|
12512 |
functions. For any given event, such functions are ordered by
|
| 12064 |
extension precedence, and the first handler to return true will
|
12513 |
extension precedence, and the first handler to return true will
|
| 12065 |
be assumed to have handled that event, and no other handlers or
|
12514 |
be assumed to have handled that event, and no other handlers or
|
| Línea 12148... |
Línea 12597... |
| 12148 |
that would be applied for this input. This can be useful when
|
12597 |
that would be applied for this input. This can be useful when
|
| 12149 |
dispatching the custom behavior as a separate transaction.
|
12598 |
dispatching the custom behavior as a separate transaction.
|
| 12150 |
*/
|
12599 |
*/
|
| 12151 |
EditorView.inputHandler = inputHandler$1;
|
12600 |
EditorView.inputHandler = inputHandler$1;
|
| 12152 |
/**
|
12601 |
/**
|
| - |
|
12602 |
Functions provided in this facet will be used to transform text
|
| - |
|
12603 |
pasted or dropped into the editor.
|
| - |
|
12604 |
*/
|
| - |
|
12605 |
EditorView.clipboardInputFilter = clipboardInputFilter;
|
| - |
|
12606 |
/**
|
| - |
|
12607 |
Transform text copied or dragged from the editor.
|
| - |
|
12608 |
*/
|
| - |
|
12609 |
EditorView.clipboardOutputFilter = clipboardOutputFilter;
|
| - |
|
12610 |
/**
|
| 12153 |
Scroll handlers can override how things are scrolled into view.
|
12611 |
Scroll handlers can override how things are scrolled into view.
|
| 12154 |
If they return `true`, no further handling happens for the
|
12612 |
If they return `true`, no further handling happens for the
|
| 12155 |
scrolling. If they return false, the default scroll behavior is
|
12613 |
scrolling. If they return false, the default scroll behavior is
|
| 12156 |
applied. Scroll handlers should never initiate editor updates.
|
12614 |
applied. Scroll handlers should never initiate editor updates.
|
| 12157 |
*/
|
12615 |
*/
|
| Línea 12467... |
Línea 12925... |
| 12467 |
if (b.any)
|
12925 |
if (b.any)
|
| 12468 |
for (let scope of scopes) {
|
12926 |
for (let scope of scopes) {
|
| 12469 |
let scopeObj = bound[scope] || (bound[scope] = Object.create(null));
|
12927 |
let scopeObj = bound[scope] || (bound[scope] = Object.create(null));
|
| 12470 |
if (!scopeObj._any)
|
12928 |
if (!scopeObj._any)
|
| 12471 |
scopeObj._any = { preventDefault: false, stopPropagation: false, run: [] };
|
12929 |
scopeObj._any = { preventDefault: false, stopPropagation: false, run: [] };
|
| - |
|
12930 |
let { any } = b;
|
| 12472 |
for (let key in scopeObj)
|
12931 |
for (let key in scopeObj)
|
| 12473 |
scopeObj[key].run.push(b.any);
|
12932 |
scopeObj[key].run.push(view => any(view, currentKeyEvent));
|
| 12474 |
}
|
12933 |
}
|
| 12475 |
let name = b[platform] || b.key;
|
12934 |
let name = b[platform] || b.key;
|
| 12476 |
if (!name)
|
12935 |
if (!name)
|
| 12477 |
continue;
|
12936 |
continue;
|
| 12478 |
for (let scope of scopes) {
|
12937 |
for (let scope of scopes) {
|
| Línea 12481... |
Línea 12940... |
| 12481 |
add(scope, "Shift-" + name, b.shift, b.preventDefault, b.stopPropagation);
|
12940 |
add(scope, "Shift-" + name, b.shift, b.preventDefault, b.stopPropagation);
|
| 12482 |
}
|
12941 |
}
|
| 12483 |
}
|
12942 |
}
|
| 12484 |
return bound;
|
12943 |
return bound;
|
| 12485 |
}
|
12944 |
}
|
| - |
|
12945 |
let currentKeyEvent = null;
|
| 12486 |
function runHandlers(map, event, view, scope) {
|
12946 |
function runHandlers(map, event, view, scope) {
|
| - |
|
12947 |
currentKeyEvent = event;
|
| 12487 |
let name = keyName(event);
|
12948 |
let name = keyName(event);
|
| 12488 |
let charCode = codePointAt(name, 0), isChar = codePointSize(charCode) == name.length && name != " ";
|
12949 |
let charCode = codePointAt(name, 0), isChar = codePointSize(charCode) == name.length && name != " ";
|
| 12489 |
let prefix = "", handled = false, prevented = false, stopPropagation = false;
|
12950 |
let prefix = "", handled = false, prevented = false, stopPropagation = false;
|
| 12490 |
if (storedPrefix && storedPrefix.view == view && storedPrefix.scope == scope) {
|
12951 |
if (storedPrefix && storedPrefix.view == view && storedPrefix.scope == scope) {
|
| 12491 |
prefix = storedPrefix.prefix + " ";
|
12952 |
prefix = storedPrefix.prefix + " ";
|
| Línea 12498... |
Línea 12959... |
| 12498 |
let runFor = (binding) => {
|
12959 |
let runFor = (binding) => {
|
| 12499 |
if (binding) {
|
12960 |
if (binding) {
|
| 12500 |
for (let cmd of binding.run)
|
12961 |
for (let cmd of binding.run)
|
| 12501 |
if (!ran.has(cmd)) {
|
12962 |
if (!ran.has(cmd)) {
|
| 12502 |
ran.add(cmd);
|
12963 |
ran.add(cmd);
|
| 12503 |
if (cmd(view, event)) {
|
12964 |
if (cmd(view)) {
|
| 12504 |
if (binding.stopPropagation)
|
12965 |
if (binding.stopPropagation)
|
| 12505 |
stopPropagation = true;
|
12966 |
stopPropagation = true;
|
| 12506 |
return true;
|
12967 |
return true;
|
| 12507 |
}
|
12968 |
}
|
| 12508 |
}
|
12969 |
}
|
| Línea 12540... |
Línea 13001... |
| 12540 |
}
|
13001 |
}
|
| 12541 |
if (prevented)
|
13002 |
if (prevented)
|
| 12542 |
handled = true;
|
13003 |
handled = true;
|
| 12543 |
if (handled && stopPropagation)
|
13004 |
if (handled && stopPropagation)
|
| 12544 |
event.stopPropagation();
|
13005 |
event.stopPropagation();
|
| - |
|
13006 |
currentKeyEvent = null;
|
| 12545 |
return handled;
|
13007 |
return handled;
|
| 12546 |
}
|
13008 |
}
|
| Línea 12547... |
Línea 13009... |
| 12547 |
|
13009 |
|
| 12548 |
/**
|
13010 |
/**
|
| Línea 12623... |
Línea 13085... |
| 12623 |
function getBase(view) {
|
13085 |
function getBase(view) {
|
| 12624 |
let rect = view.scrollDOM.getBoundingClientRect();
|
13086 |
let rect = view.scrollDOM.getBoundingClientRect();
|
| 12625 |
let left = view.textDirection == Direction.LTR ? rect.left : rect.right - view.scrollDOM.clientWidth * view.scaleX;
|
13087 |
let left = view.textDirection == Direction.LTR ? rect.left : rect.right - view.scrollDOM.clientWidth * view.scaleX;
|
| 12626 |
return { left: left - view.scrollDOM.scrollLeft * view.scaleX, top: rect.top - view.scrollDOM.scrollTop * view.scaleY };
|
13088 |
return { left: left - view.scrollDOM.scrollLeft * view.scaleX, top: rect.top - view.scrollDOM.scrollTop * view.scaleY };
|
| 12627 |
}
|
13089 |
}
|
| 12628 |
function wrappedLine(view, pos, inside) {
|
13090 |
function wrappedLine(view, pos, side, inside) {
|
| 12629 |
let range = EditorSelection.cursor(pos);
|
13091 |
let coords = view.coordsAtPos(pos, side * 2);
|
| - |
|
13092 |
if (!coords)
|
| - |
|
13093 |
return inside;
|
| 12630 |
return { from: Math.max(inside.from, view.moveToLineBoundary(range, false, true).from),
|
13094 |
let editorRect = view.dom.getBoundingClientRect();
|
| - |
|
13095 |
let y = (coords.top + coords.bottom) / 2;
|
| 12631 |
to: Math.min(inside.to, view.moveToLineBoundary(range, true, true).from),
|
13096 |
let left = view.posAtCoords({ x: editorRect.left + 1, y });
|
| - |
|
13097 |
let right = view.posAtCoords({ x: editorRect.right - 1, y });
|
| - |
|
13098 |
if (left == null || right == null)
|
| 12632 |
type: BlockType.Text };
|
13099 |
return inside;
|
| - |
|
13100 |
return { from: Math.max(inside.from, Math.min(left, right)), to: Math.min(inside.to, Math.max(left, right)) };
|
| 12633 |
}
|
13101 |
}
|
| 12634 |
function rectanglesForRange(view, className, range) {
|
13102 |
function rectanglesForRange(view, className, range) {
|
| 12635 |
if (range.to <= view.viewport.from || range.from >= view.viewport.to)
|
13103 |
if (range.to <= view.viewport.from || range.from >= view.viewport.to)
|
| 12636 |
return [];
|
13104 |
return [];
|
| 12637 |
let from = Math.max(range.from, view.viewport.from), to = Math.min(range.to, view.viewport.to);
|
13105 |
let from = Math.max(range.from, view.viewport.from), to = Math.min(range.to, view.viewport.to);
|
| Línea 12643... |
Línea 13111... |
| 12643 |
let rightSide = contentRect.right - (lineStyle ? parseInt(lineStyle.paddingRight) : 0);
|
13111 |
let rightSide = contentRect.right - (lineStyle ? parseInt(lineStyle.paddingRight) : 0);
|
| 12644 |
let startBlock = blockAt(view, from), endBlock = blockAt(view, to);
|
13112 |
let startBlock = blockAt(view, from), endBlock = blockAt(view, to);
|
| 12645 |
let visualStart = startBlock.type == BlockType.Text ? startBlock : null;
|
13113 |
let visualStart = startBlock.type == BlockType.Text ? startBlock : null;
|
| 12646 |
let visualEnd = endBlock.type == BlockType.Text ? endBlock : null;
|
13114 |
let visualEnd = endBlock.type == BlockType.Text ? endBlock : null;
|
| 12647 |
if (visualStart && (view.lineWrapping || startBlock.widgetLineBreaks))
|
13115 |
if (visualStart && (view.lineWrapping || startBlock.widgetLineBreaks))
|
| 12648 |
visualStart = wrappedLine(view, from, visualStart);
|
13116 |
visualStart = wrappedLine(view, from, 1, visualStart);
|
| 12649 |
if (visualEnd && (view.lineWrapping || endBlock.widgetLineBreaks))
|
13117 |
if (visualEnd && (view.lineWrapping || endBlock.widgetLineBreaks))
|
| 12650 |
visualEnd = wrappedLine(view, to, visualEnd);
|
13118 |
visualEnd = wrappedLine(view, to, -1, visualEnd);
|
| 12651 |
if (visualStart && visualEnd && visualStart.from == visualEnd.from) {
|
13119 |
if (visualStart && visualEnd && visualStart.from == visualEnd.from && visualStart.to == visualEnd.to) {
|
| 12652 |
return pieces(drawForLine(range.from, range.to, visualStart));
|
13120 |
return pieces(drawForLine(range.from, range.to, visualStart));
|
| 12653 |
}
|
13121 |
}
|
| 12654 |
else {
|
13122 |
else {
|
| 12655 |
let top = visualStart ? drawForLine(range.from, null, visualStart) : drawForWidget(startBlock, false);
|
13123 |
let top = visualStart ? drawForLine(range.from, null, visualStart) : drawForWidget(startBlock, false);
|
| 12656 |
let bottom = visualEnd ? drawForLine(null, range.to, visualEnd) : drawForWidget(endBlock, true);
|
13124 |
let bottom = visualEnd ? drawForLine(null, range.to, visualEnd) : drawForWidget(endBlock, true);
|
| Línea 12661... |
Línea 13129... |
| 12661 |
else if (top.bottom < bottom.top && view.elementAtHeight((top.bottom + bottom.top) / 2).type == BlockType.Text)
|
13129 |
else if (top.bottom < bottom.top && view.elementAtHeight((top.bottom + bottom.top) / 2).type == BlockType.Text)
|
| 12662 |
top.bottom = bottom.top = (top.bottom + bottom.top) / 2;
|
13130 |
top.bottom = bottom.top = (top.bottom + bottom.top) / 2;
|
| 12663 |
return pieces(top).concat(between).concat(pieces(bottom));
|
13131 |
return pieces(top).concat(between).concat(pieces(bottom));
|
| 12664 |
}
|
13132 |
}
|
| 12665 |
function piece(left, top, right, bottom) {
|
13133 |
function piece(left, top, right, bottom) {
|
| 12666 |
return new RectangleMarker(className, left - base.left, top - base.top - 0.01 /* C.Epsilon */, right - left, bottom - top + 0.01 /* C.Epsilon */);
|
13134 |
return new RectangleMarker(className, left - base.left, top - base.top, right - left, bottom - top);
|
| 12667 |
}
|
13135 |
}
|
| 12668 |
function pieces({ top, bottom, horizontal }) {
|
13136 |
function pieces({ top, bottom, horizontal }) {
|
| 12669 |
let pieces = [];
|
13137 |
let pieces = [];
|
| 12670 |
for (let i = 0; i < horizontal.length; i += 2)
|
13138 |
for (let i = 0; i < horizontal.length; i += 2)
|
| 12671 |
pieces.push(piece(horizontal[i], top, horizontal[i + 1], bottom));
|
13139 |
pieces.push(piece(horizontal[i], top, horizontal[i + 1], bottom));
|
| Línea 12806... |
Línea 13274... |
| 12806 |
ViewPlugin.define(v => new LayerView(v, config)),
|
13274 |
ViewPlugin.define(v => new LayerView(v, config)),
|
| 12807 |
layerOrder.of(config)
|
13275 |
layerOrder.of(config)
|
| 12808 |
];
|
13276 |
];
|
| 12809 |
}
|
13277 |
}
|
| Línea 12810... |
Línea 13278... |
| 12810 |
|
13278 |
|
| 12811 |
const CanHidePrimary = !browser.ios; // FIXME test IE
|
13279 |
const CanHidePrimary = !(browser.ios && browser.webkit && browser.webkit_version < 534);
|
| 12812 |
const selectionConfig = /*@__PURE__*/Facet.define({
|
13280 |
const selectionConfig = /*@__PURE__*/Facet.define({
|
| 12813 |
combine(configs) {
|
13281 |
combine(configs) {
|
| 12814 |
return combineConfig(configs, {
|
13282 |
return combineConfig(configs, {
|
| 12815 |
cursorBlinkRate: 1200,
|
13283 |
cursorBlinkRate: 1200,
|
| Línea 12893... |
Línea 13361... |
| 12893 |
},
|
13361 |
},
|
| 12894 |
class: "cm-selectionLayer"
|
13362 |
class: "cm-selectionLayer"
|
| 12895 |
});
|
13363 |
});
|
| 12896 |
const themeSpec = {
|
13364 |
const themeSpec = {
|
| 12897 |
".cm-line": {
|
13365 |
".cm-line": {
|
| 12898 |
"& ::selection": { backgroundColor: "transparent !important" },
|
13366 |
"& ::selection, &::selection": { backgroundColor: "transparent !important" },
|
| - |
|
13367 |
},
|
| - |
|
13368 |
".cm-content": {
|
| - |
|
13369 |
"& :focus": {
|
| - |
|
13370 |
caretColor: "initial !important",
|
| - |
|
13371 |
"&::selection, & ::selection": {
|
| 12899 |
"&::selection": { backgroundColor: "transparent !important" }
|
13372 |
backgroundColor: "Highlight !important"
|
| - |
|
13373 |
}
|
| - |
|
13374 |
}
|
| 12900 |
}
|
13375 |
}
|
| 12901 |
};
|
13376 |
};
|
| 12902 |
if (CanHidePrimary) {
|
13377 |
if (CanHidePrimary)
|
| 12903 |
themeSpec[".cm-line"].caretColor = "transparent !important";
|
13378 |
themeSpec[".cm-line"].caretColor = themeSpec[".cm-content"].caretColor = "transparent !important";
|
| 12904 |
themeSpec[".cm-content"] = { caretColor: "transparent !important" };
|
- |
|
| 12905 |
}
|
- |
|
| 12906 |
const hideNativeSelection = /*@__PURE__*/Prec.highest(/*@__PURE__*/EditorView.theme(themeSpec));
|
13379 |
const hideNativeSelection = /*@__PURE__*/Prec.highest(/*@__PURE__*/EditorView.theme(themeSpec));
|
| Línea 12907... |
Línea 13380... |
| 12907 |
|
13380 |
|
| 12908 |
const setDropCursorPos = /*@__PURE__*/StateEffect.define({
|
13381 |
const setDropCursorPos = /*@__PURE__*/StateEffect.define({
|
| 12909 |
map(pos, mapping) { return pos == null ? null : mapping.mapPos(pos); }
|
13382 |
map(pos, mapping) { return pos == null ? null : mapping.mapPos(pos); }
|
| Línea 13075... |
Línea 13548... |
| 13075 |
*/
|
13548 |
*/
|
| 13076 |
updateDeco(update, deco) {
|
13549 |
updateDeco(update, deco) {
|
| 13077 |
let changeFrom = 1e9, changeTo = -1;
|
13550 |
let changeFrom = 1e9, changeTo = -1;
|
| 13078 |
if (update.docChanged)
|
13551 |
if (update.docChanged)
|
| 13079 |
update.changes.iterChanges((_f, _t, from, to) => {
|
13552 |
update.changes.iterChanges((_f, _t, from, to) => {
|
| 13080 |
if (to > update.view.viewport.from && from < update.view.viewport.to) {
|
13553 |
if (to >= update.view.viewport.from && from <= update.view.viewport.to) {
|
| 13081 |
changeFrom = Math.min(from, changeFrom);
|
13554 |
changeFrom = Math.min(from, changeFrom);
|
| 13082 |
changeTo = Math.max(to, changeTo);
|
13555 |
changeTo = Math.max(to, changeTo);
|
| 13083 |
}
|
13556 |
}
|
| 13084 |
});
|
13557 |
});
|
| 13085 |
if (update.viewportChanged || changeTo - changeFrom > 1000)
|
13558 |
if (update.viewportMoved || changeTo - changeFrom > 1000)
|
| 13086 |
return this.createDeco(update.view);
|
13559 |
return this.createDeco(update.view);
|
| 13087 |
if (changeTo > -1)
|
13560 |
if (changeTo > -1)
|
| 13088 |
return this.updateRange(update.view, deco.map(update.changes), changeFrom, changeTo);
|
13561 |
return this.updateRange(update.view, deco.map(update.changes), changeFrom, changeTo);
|
| 13089 |
return deco;
|
13562 |
return deco;
|
| 13090 |
}
|
13563 |
}
|
| Línea 13379... |
Línea 13852... |
| 13379 |
down. When such a selection occurs, the text within the rectangle
|
13852 |
down. When such a selection occurs, the text within the rectangle
|
| 13380 |
that was dragged over will be selected, as one selection
|
13853 |
that was dragged over will be selected, as one selection
|
| 13381 |
[range](https://codemirror.net/6/docs/ref/#state.SelectionRange) per line.
|
13854 |
[range](https://codemirror.net/6/docs/ref/#state.SelectionRange) per line.
|
| 13382 |
*/
|
13855 |
*/
|
| 13383 |
function rectangularSelection(options) {
|
13856 |
function rectangularSelection(options) {
|
| 13384 |
let filter = (options === null || options === void 0 ? void 0 : options.eventFilter) || (e => e.altKey && e.button == 0);
|
13857 |
let filter = (e => e.altKey && e.button == 0);
|
| 13385 |
return EditorView.mouseSelectionStyle.of((view, event) => filter(event) ? rectangleSelectionStyle(view, event) : null);
|
13858 |
return EditorView.mouseSelectionStyle.of((view, event) => filter(event) ? rectangleSelectionStyle(view, event) : null);
|
| 13386 |
}
|
13859 |
}
|
| 13387 |
const keys = {
|
13860 |
const keys = {
|
| 13388 |
Alt: [18, e => !!e.altKey],
|
13861 |
Alt: [18, e => !!e.altKey],
|
| 13389 |
Control: [17, e => !!e.ctrlKey],
|
13862 |
Control: [17, e => !!e.ctrlKey],
|
| Línea 13489... |
Línea 13962... |
| 13489 |
this.tooltipViews = tooltipViews;
|
13962 |
this.tooltipViews = tooltipViews;
|
| 13490 |
return true;
|
13963 |
return true;
|
| 13491 |
}
|
13964 |
}
|
| 13492 |
}
|
13965 |
}
|
| 13493 |
function windowSpace(view) {
|
13966 |
function windowSpace(view) {
|
| 13494 |
let { win } = view;
|
13967 |
let docElt = view.dom.ownerDocument.documentElement;
|
| 13495 |
return { top: 0, left: 0, bottom: win.innerHeight, right: win.innerWidth };
|
13968 |
return { top: 0, left: 0, bottom: docElt.clientHeight, right: docElt.clientWidth };
|
| 13496 |
}
|
13969 |
}
|
| 13497 |
const tooltipConfig = /*@__PURE__*/Facet.define({
|
13970 |
const tooltipConfig = /*@__PURE__*/Facet.define({
|
| 13498 |
combine: values => {
|
13971 |
combine: values => {
|
| 13499 |
var _a, _b, _c;
|
13972 |
var _a, _b, _c;
|
| 13500 |
return ({
|
13973 |
return ({
|
| Línea 13594... |
Línea 14067... |
| 13594 |
let before = prev ? prev.dom : null;
|
14067 |
let before = prev ? prev.dom : null;
|
| 13595 |
tooltipView.dom.classList.add("cm-tooltip");
|
14068 |
tooltipView.dom.classList.add("cm-tooltip");
|
| 13596 |
if (tooltip.arrow && !tooltipView.dom.querySelector(".cm-tooltip > .cm-tooltip-arrow")) {
|
14069 |
if (tooltip.arrow && !tooltipView.dom.querySelector(".cm-tooltip > .cm-tooltip-arrow")) {
|
| 13597 |
let arrow = document.createElement("div");
|
14070 |
let arrow = document.createElement("div");
|
| 13598 |
arrow.className = "cm-tooltip-arrow";
|
14071 |
arrow.className = "cm-tooltip-arrow";
|
| 13599 |
tooltipView.dom.insertBefore(arrow, before);
|
14072 |
tooltipView.dom.appendChild(arrow);
|
| 13600 |
}
|
14073 |
}
|
| 13601 |
tooltipView.dom.style.position = this.position;
|
14074 |
tooltipView.dom.style.position = this.position;
|
| 13602 |
tooltipView.dom.style.top = Outside;
|
14075 |
tooltipView.dom.style.top = Outside;
|
| 13603 |
tooltipView.dom.style.left = "0px";
|
14076 |
tooltipView.dom.style.left = "0px";
|
| 13604 |
this.container.insertBefore(tooltipView.dom, before);
|
14077 |
this.container.insertBefore(tooltipView.dom, before);
|
| Línea 13620... |
Línea 14093... |
| 13620 |
(_b = this.resizeObserver) === null || _b === void 0 ? void 0 : _b.disconnect();
|
14093 |
(_b = this.resizeObserver) === null || _b === void 0 ? void 0 : _b.disconnect();
|
| 13621 |
(_c = this.intersectionObserver) === null || _c === void 0 ? void 0 : _c.disconnect();
|
14094 |
(_c = this.intersectionObserver) === null || _c === void 0 ? void 0 : _c.disconnect();
|
| 13622 |
clearTimeout(this.measureTimeout);
|
14095 |
clearTimeout(this.measureTimeout);
|
| 13623 |
}
|
14096 |
}
|
| 13624 |
readMeasure() {
|
14097 |
readMeasure() {
|
| 13625 |
let editor = this.view.dom.getBoundingClientRect();
|
- |
|
| 13626 |
let scaleX = 1, scaleY = 1, makeAbsolute = false;
|
14098 |
let scaleX = 1, scaleY = 1, makeAbsolute = false;
|
| 13627 |
if (this.position == "fixed" && this.manager.tooltipViews.length) {
|
14099 |
if (this.position == "fixed" && this.manager.tooltipViews.length) {
|
| 13628 |
let { dom } = this.manager.tooltipViews[0];
|
14100 |
let { dom } = this.manager.tooltipViews[0];
|
| 13629 |
if (browser.gecko) {
|
14101 |
if (browser.gecko) {
|
| 13630 |
// Firefox sets the element's `offsetParent` to the
|
14102 |
// Firefox sets the element's `offsetParent` to the
|
| Línea 13649... |
Línea 14121... |
| 13649 |
}
|
14121 |
}
|
| 13650 |
else {
|
14122 |
else {
|
| 13651 |
({ scaleX, scaleY } = this.view.viewState);
|
14123 |
({ scaleX, scaleY } = this.view.viewState);
|
| 13652 |
}
|
14124 |
}
|
| 13653 |
}
|
14125 |
}
|
| - |
|
14126 |
let visible = this.view.scrollDOM.getBoundingClientRect(), margins = getScrollMargins(this.view);
|
| 13654 |
return {
|
14127 |
return {
|
| - |
|
14128 |
visible: {
|
| - |
|
14129 |
left: visible.left + margins.left, top: visible.top + margins.top,
|
| - |
|
14130 |
right: visible.right - margins.right, bottom: visible.bottom - margins.bottom
|
| 13655 |
editor,
|
14131 |
},
|
| 13656 |
parent: this.parent ? this.container.getBoundingClientRect() : editor,
|
14132 |
parent: this.parent ? this.container.getBoundingClientRect() : this.view.dom.getBoundingClientRect(),
|
| 13657 |
pos: this.manager.tooltips.map((t, i) => {
|
14133 |
pos: this.manager.tooltips.map((t, i) => {
|
| 13658 |
let tv = this.manager.tooltipViews[i];
|
14134 |
let tv = this.manager.tooltipViews[i];
|
| 13659 |
return tv.getCoords ? tv.getCoords(t.pos) : this.view.coordsAtPos(t.pos);
|
14135 |
return tv.getCoords ? tv.getCoords(t.pos) : this.view.coordsAtPos(t.pos);
|
| 13660 |
}),
|
14136 |
}),
|
| 13661 |
size: this.manager.tooltipViews.map(({ dom }) => dom.getBoundingClientRect()),
|
14137 |
size: this.manager.tooltipViews.map(({ dom }) => dom.getBoundingClientRect()),
|
| Línea 13669... |
Línea 14145... |
| 13669 |
this.madeAbsolute = true;
|
14145 |
this.madeAbsolute = true;
|
| 13670 |
this.position = "absolute";
|
14146 |
this.position = "absolute";
|
| 13671 |
for (let t of this.manager.tooltipViews)
|
14147 |
for (let t of this.manager.tooltipViews)
|
| 13672 |
t.dom.style.position = "absolute";
|
14148 |
t.dom.style.position = "absolute";
|
| 13673 |
}
|
14149 |
}
|
| 13674 |
let { editor, space, scaleX, scaleY } = measured;
|
14150 |
let { visible, space, scaleX, scaleY } = measured;
|
| 13675 |
let others = [];
|
14151 |
let others = [];
|
| 13676 |
for (let i = 0; i < this.manager.tooltips.length; i++) {
|
14152 |
for (let i = 0; i < this.manager.tooltips.length; i++) {
|
| 13677 |
let tooltip = this.manager.tooltips[i], tView = this.manager.tooltipViews[i], { dom } = tView;
|
14153 |
let tooltip = this.manager.tooltips[i], tView = this.manager.tooltipViews[i], { dom } = tView;
|
| 13678 |
let pos = measured.pos[i], size = measured.size[i];
|
14154 |
let pos = measured.pos[i], size = measured.size[i];
|
| 13679 |
// Hide tooltips that are outside of the editor.
|
14155 |
// Hide tooltips that are outside of the editor.
|
| 13680 |
if (!pos || pos.bottom <= Math.max(editor.top, space.top) ||
|
14156 |
if (!pos || tooltip.clip !== false && (pos.bottom <= Math.max(visible.top, space.top) ||
|
| 13681 |
pos.top >= Math.min(editor.bottom, space.bottom) ||
|
14157 |
pos.top >= Math.min(visible.bottom, space.bottom) ||
|
| 13682 |
pos.right < Math.max(editor.left, space.left) - .1 ||
|
14158 |
pos.right < Math.max(visible.left, space.left) - .1 ||
|
| 13683 |
pos.left > Math.min(editor.right, space.right) + .1) {
|
14159 |
pos.left > Math.min(visible.right, space.right) + .1)) {
|
| 13684 |
dom.style.top = Outside;
|
14160 |
dom.style.top = Outside;
|
| 13685 |
continue;
|
14161 |
continue;
|
| 13686 |
}
|
14162 |
}
|
| 13687 |
let arrow = tooltip.arrow ? tView.dom.querySelector(".cm-tooltip-arrow") : null;
|
14163 |
let arrow = tooltip.arrow ? tView.dom.querySelector(".cm-tooltip-arrow") : null;
|
| 13688 |
let arrowHeight = arrow ? 7 /* Arrow.Size */ : 0;
|
14164 |
let arrowHeight = arrow ? 7 /* Arrow.Size */ : 0;
|
| 13689 |
let width = size.right - size.left, height = (_a = knownHeight.get(tView)) !== null && _a !== void 0 ? _a : size.bottom - size.top;
|
14165 |
let width = size.right - size.left, height = (_a = knownHeight.get(tView)) !== null && _a !== void 0 ? _a : size.bottom - size.top;
|
| 13690 |
let offset = tView.offset || noOffset, ltr = this.view.textDirection == Direction.LTR;
|
14166 |
let offset = tView.offset || noOffset, ltr = this.view.textDirection == Direction.LTR;
|
| - |
|
14167 |
let left = size.width > space.right - space.left
|
| 13691 |
let left = size.width > space.right - space.left ? (ltr ? space.left : space.right - size.width)
|
14168 |
? (ltr ? space.left : space.right - size.width)
|
| 13692 |
: ltr ? Math.min(pos.left - (arrow ? 14 /* Arrow.Offset */ : 0) + offset.x, space.right - width)
|
14169 |
: ltr ? Math.max(space.left, Math.min(pos.left - (arrow ? 14 /* Arrow.Offset */ : 0) + offset.x, space.right - width))
|
| 13693 |
: Math.max(space.left, pos.left - width + (arrow ? 14 /* Arrow.Offset */ : 0) - offset.x);
|
14170 |
: Math.min(Math.max(space.left, pos.left - width + (arrow ? 14 /* Arrow.Offset */ : 0) - offset.x), space.right - width);
|
| 13694 |
let above = this.above[i];
|
14171 |
let above = this.above[i];
|
| 13695 |
if (!tooltip.strictSide && (above
|
14172 |
if (!tooltip.strictSide && (above
|
| 13696 |
? pos.top - (size.bottom - size.top) - offset.y < space.top
|
14173 |
? pos.top - height - arrowHeight - offset.y < space.top
|
| 13697 |
: pos.bottom + (size.bottom - size.top) + offset.y > space.bottom) &&
|
14174 |
: pos.bottom + height + arrowHeight + offset.y > space.bottom) &&
|
| 13698 |
above == (space.bottom - pos.bottom > pos.top - space.top))
|
14175 |
above == (space.bottom - pos.bottom > pos.top - space.top))
|
| 13699 |
above = this.above[i] = !above;
|
14176 |
above = this.above[i] = !above;
|
| 13700 |
let spaceVert = (above ? pos.top - space.top : space.bottom - pos.bottom) - arrowHeight;
|
14177 |
let spaceVert = (above ? pos.top - space.top : space.bottom - pos.bottom) - arrowHeight;
|
| 13701 |
if (spaceVert < height && tView.resize !== false) {
|
14178 |
if (spaceVert < height && tView.resize !== false) {
|
| 13702 |
if (spaceVert < this.view.defaultLineHeight) {
|
14179 |
if (spaceVert < this.view.defaultLineHeight) {
|
| Línea 13715... |
Línea 14192... |
| 13715 |
for (let r of others)
|
14192 |
for (let r of others)
|
| 13716 |
if (r.left < right && r.right > left && r.top < top + height && r.bottom > top)
|
14193 |
if (r.left < right && r.right > left && r.top < top + height && r.bottom > top)
|
| 13717 |
top = above ? r.top - height - 2 - arrowHeight : r.bottom + arrowHeight + 2;
|
14194 |
top = above ? r.top - height - 2 - arrowHeight : r.bottom + arrowHeight + 2;
|
| 13718 |
if (this.position == "absolute") {
|
14195 |
if (this.position == "absolute") {
|
| 13719 |
dom.style.top = (top - measured.parent.top) / scaleY + "px";
|
14196 |
dom.style.top = (top - measured.parent.top) / scaleY + "px";
|
| 13720 |
dom.style.left = (left - measured.parent.left) / scaleX + "px";
|
14197 |
setLeftStyle(dom, (left - measured.parent.left) / scaleX);
|
| 13721 |
}
|
14198 |
}
|
| 13722 |
else {
|
14199 |
else {
|
| 13723 |
dom.style.top = top / scaleY + "px";
|
14200 |
dom.style.top = top / scaleY + "px";
|
| 13724 |
dom.style.left = left / scaleX + "px";
|
14201 |
setLeftStyle(dom, left / scaleX);
|
| 13725 |
}
|
14202 |
}
|
| 13726 |
if (arrow) {
|
14203 |
if (arrow) {
|
| 13727 |
let arrowLeft = pos.left + (ltr ? offset.x : -offset.x) - (left + 14 /* Arrow.Offset */ - 7 /* Arrow.Size */);
|
14204 |
let arrowLeft = pos.left + (ltr ? offset.x : -offset.x) - (left + 14 /* Arrow.Offset */ - 7 /* Arrow.Size */);
|
| 13728 |
arrow.style.left = arrowLeft / scaleX + "px";
|
14205 |
arrow.style.left = arrowLeft / scaleX + "px";
|
| 13729 |
}
|
14206 |
}
|
| Línea 13750... |
Línea 14227... |
| 13750 |
}, {
|
14227 |
}, {
|
| 13751 |
eventObservers: {
|
14228 |
eventObservers: {
|
| 13752 |
scroll() { this.maybeMeasure(); }
|
14229 |
scroll() { this.maybeMeasure(); }
|
| 13753 |
}
|
14230 |
}
|
| 13754 |
});
|
14231 |
});
|
| - |
|
14232 |
function setLeftStyle(elt, value) {
|
| - |
|
14233 |
let current = parseInt(elt.style.left, 10);
|
| - |
|
14234 |
if (isNaN(current) || Math.abs(value - current) > 1)
|
| - |
|
14235 |
elt.style.left = value + "px";
|
| - |
|
14236 |
}
|
| 13755 |
const baseTheme$4 = /*@__PURE__*/EditorView.baseTheme({
|
14237 |
const baseTheme$4 = /*@__PURE__*/EditorView.baseTheme({
|
| 13756 |
".cm-tooltip": {
|
14238 |
".cm-tooltip": {
|
| 13757 |
zIndex: 100,
|
14239 |
zIndex: 500,
|
| 13758 |
boxSizing: "border-box"
|
14240 |
boxSizing: "border-box"
|
| 13759 |
},
|
14241 |
},
|
| 13760 |
"&light .cm-tooltip": {
|
14242 |
"&light .cm-tooltip": {
|
| 13761 |
border: "1px solid #bbb",
|
14243 |
border: "1px solid #bbb",
|
| 13762 |
backgroundColor: "#f5f5f5"
|
14244 |
backgroundColor: "#f5f5f5"
|
| Línea 14016... |
Línea 14498... |
| 14016 |
this.view.dom.removeEventListener("mousemove", this.mousemove);
|
14498 |
this.view.dom.removeEventListener("mousemove", this.mousemove);
|
| 14017 |
}
|
14499 |
}
|
| 14018 |
}
|
14500 |
}
|
| 14019 |
const tooltipMargin = 4;
|
14501 |
const tooltipMargin = 4;
|
| 14020 |
function isInTooltip(tooltip, event) {
|
14502 |
function isInTooltip(tooltip, event) {
|
| - |
|
14503 |
let { left, right, top, bottom } = tooltip.getBoundingClientRect(), arrow;
|
| - |
|
14504 |
if (arrow = tooltip.querySelector(".cm-tooltip-arrow")) {
|
| 14021 |
let rect = tooltip.getBoundingClientRect();
|
14505 |
let arrowRect = arrow.getBoundingClientRect();
|
| - |
|
14506 |
top = Math.min(arrowRect.top, top);
|
| - |
|
14507 |
bottom = Math.max(arrowRect.bottom, bottom);
|
| - |
|
14508 |
}
|
| 14022 |
return event.clientX >= rect.left - tooltipMargin && event.clientX <= rect.right + tooltipMargin &&
|
14509 |
return event.clientX >= left - tooltipMargin && event.clientX <= right + tooltipMargin &&
|
| 14023 |
event.clientY >= rect.top - tooltipMargin && event.clientY <= rect.bottom + tooltipMargin;
|
14510 |
event.clientY >= top - tooltipMargin && event.clientY <= bottom + tooltipMargin;
|
| 14024 |
}
|
14511 |
}
|
| 14025 |
function isOverRange(view, from, to, x, y, margin) {
|
14512 |
function isOverRange(view, from, to, x, y, margin) {
|
| 14026 |
let rect = view.scrollDOM.getBoundingClientRect();
|
14513 |
let rect = view.scrollDOM.getBoundingClientRect();
|
| 14027 |
let docBottom = view.documentTop + view.documentPadding.top + view.contentHeight;
|
14514 |
let docBottom = view.documentTop + view.documentPadding.top + view.contentHeight;
|
| 14028 |
if (rect.left > x || rect.right < x || rect.top > y || Math.min(rect.bottom, docBottom) < y)
|
14515 |
if (rect.left > x || rect.right < x || rect.top > y || Math.min(rect.bottom, docBottom) < y)
|
| Línea 14040... |
Línea 14527... |
| 14040 |
pointer is before the position, 1 if after the position.
|
14527 |
pointer is before the position, 1 if after the position.
|
| Línea 14041... |
Línea 14528... |
| 14041 |
|
14528 |
|
| 14042 |
Note that all hover tooltips are hosted within a single tooltip
|
14529 |
Note that all hover tooltips are hosted within a single tooltip
|
| 14043 |
container element. This allows multiple tooltips over the same
|
14530 |
container element. This allows multiple tooltips over the same
|
| - |
|
14531 |
range to be "merged" together without overlapping.
|
| - |
|
14532 |
|
| - |
|
14533 |
The return value is a valid [editor extension](https://codemirror.net/6/docs/ref/#state.Extension)
|
| - |
|
14534 |
but also provides an `active` property holding a state field that
|
| - |
|
14535 |
can be used to read the currently active tooltips produced by this
|
| 14044 |
range to be "merged" together without overlapping.
|
14536 |
extension.
|
| 14045 |
*/
|
14537 |
*/
|
| 14046 |
function hoverTooltip(source, options = {}) {
|
14538 |
function hoverTooltip(source, options = {}) {
|
| 14047 |
let setHover = StateEffect.define();
|
14539 |
let setHover = StateEffect.define();
|
| 14048 |
let hoverState = StateField.define({
|
14540 |
let hoverState = StateField.define({
|
| Línea 14076... |
Línea 14568... |
| 14076 |
}
|
14568 |
}
|
| 14077 |
return value;
|
14569 |
return value;
|
| 14078 |
},
|
14570 |
},
|
| 14079 |
provide: f => showHoverTooltip.from(f)
|
14571 |
provide: f => showHoverTooltip.from(f)
|
| 14080 |
});
|
14572 |
});
|
| 14081 |
return [
|
14573 |
return {
|
| - |
|
14574 |
active: hoverState,
|
| - |
|
14575 |
extension: [
|
| 14082 |
hoverState,
|
14576 |
hoverState,
|
| 14083 |
ViewPlugin.define(view => new HoverPlugin(view, source, hoverState, setHover, options.hoverTime || 300 /* Hover.Time */)),
|
14577 |
ViewPlugin.define(view => new HoverPlugin(view, source, hoverState, setHover, options.hoverTime || 300 /* Hover.Time */)),
|
| 14084 |
showHoverTooltipHost
|
14578 |
showHoverTooltipHost
|
| - |
|
14579 |
]
|
| 14085 |
];
|
14580 |
};
|
| 14086 |
}
|
14581 |
}
|
| 14087 |
/**
|
14582 |
/**
|
| 14088 |
Get the active tooltip view for a given tooltip, if available.
|
14583 |
Get the active tooltip view for a given tooltip, if available.
|
| 14089 |
*/
|
14584 |
*/
|
| 14090 |
function getTooltip(view, tooltip) {
|
14585 |
function getTooltip(view, tooltip) {
|
| Línea 14298... |
Línea 14793... |
| 14298 |
[`elementclass`](https://codemirror.net/6/docs/ref/#view.GutterMarker.elementClass), not a
|
14793 |
[`elementclass`](https://codemirror.net/6/docs/ref/#view.GutterMarker.elementClass), not a
|
| 14299 |
[`toDOM`](https://codemirror.net/6/docs/ref/#view.GutterMarker.toDOM) (or the marker will appear
|
14794 |
[`toDOM`](https://codemirror.net/6/docs/ref/#view.GutterMarker.toDOM) (or the marker will appear
|
| 14300 |
in all gutters for the line).
|
14795 |
in all gutters for the line).
|
| 14301 |
*/
|
14796 |
*/
|
| 14302 |
const gutterLineClass = /*@__PURE__*/Facet.define();
|
14797 |
const gutterLineClass = /*@__PURE__*/Facet.define();
|
| - |
|
14798 |
/**
|
| - |
|
14799 |
Facet used to add a class to all gutter elements next to a widget.
|
| - |
|
14800 |
Should not provide widgets with a `toDOM` method.
|
| - |
|
14801 |
*/
|
| - |
|
14802 |
const gutterWidgetClass = /*@__PURE__*/Facet.define();
|
| 14303 |
const defaults$1 = {
|
14803 |
const defaults$1 = {
|
| 14304 |
class: "",
|
14804 |
class: "",
|
| 14305 |
renderEmptyElements: false,
|
14805 |
renderEmptyElements: false,
|
| 14306 |
elementStyle: "",
|
14806 |
elementStyle: "",
|
| 14307 |
markers: () => RangeSet.empty,
|
14807 |
markers: () => RangeSet.empty,
|
| Línea 14335... |
Línea 14835... |
| 14335 |
*/
|
14835 |
*/
|
| 14336 |
function gutters(config) {
|
14836 |
function gutters(config) {
|
| 14337 |
let result = [
|
14837 |
let result = [
|
| 14338 |
gutterView,
|
14838 |
gutterView,
|
| 14339 |
];
|
14839 |
];
|
| 14340 |
if (config && config.fixed === false)
|
- |
|
| 14341 |
result.push(unfixGutters.of(true));
|
- |
|
| 14342 |
return result;
|
14840 |
return result;
|
| 14343 |
}
|
14841 |
}
|
| 14344 |
const gutterView = /*@__PURE__*/ViewPlugin.fromClass(class {
|
14842 |
const gutterView = /*@__PURE__*/ViewPlugin.fromClass(class {
|
| 14345 |
constructor(view) {
|
14843 |
constructor(view) {
|
| 14346 |
this.view = view;
|
14844 |
this.view = view;
|
| Línea 14508... |
Línea 15006... |
| 14508 |
if (localMarkers.length == 0 && !gutter.config.renderEmptyElements)
|
15006 |
if (localMarkers.length == 0 && !gutter.config.renderEmptyElements)
|
| 14509 |
return;
|
15007 |
return;
|
| 14510 |
this.addElement(view, line, localMarkers);
|
15008 |
this.addElement(view, line, localMarkers);
|
| 14511 |
}
|
15009 |
}
|
| 14512 |
widget(view, block) {
|
15010 |
widget(view, block) {
|
| 14513 |
let marker = this.gutter.config.widgetMarker(view, block.widget, block);
|
15011 |
let marker = this.gutter.config.widgetMarker(view, block.widget, block), markers = marker ? [marker] : null;
|
| - |
|
15012 |
for (let cls of view.state.facet(gutterWidgetClass)) {
|
| - |
|
15013 |
let marker = cls(view, block.widget, block);
|
| - |
|
15014 |
if (marker)
|
| - |
|
15015 |
(markers || (markers = [])).push(marker);
|
| - |
|
15016 |
}
|
| 14514 |
if (marker)
|
15017 |
if (markers)
|
| 14515 |
this.addElement(view, block, [marker]);
|
15018 |
this.addElement(view, block, markers);
|
| 14516 |
}
|
15019 |
}
|
| 14517 |
finish() {
|
15020 |
finish() {
|
| 14518 |
let gutter = this.gutter;
|
15021 |
let gutter = this.gutter;
|
| 14519 |
while (gutter.elements.length > this.i) {
|
15022 |
while (gutter.elements.length > this.i) {
|
| 14520 |
let last = gutter.elements.pop();
|
15023 |
let last = gutter.elements.pop();
|
| Línea 14646... |
Línea 15149... |
| 14646 |
}
|
15149 |
}
|
| 14647 |
/**
|
15150 |
/**
|
| 14648 |
Facet used to provide markers to the line number gutter.
|
15151 |
Facet used to provide markers to the line number gutter.
|
| 14649 |
*/
|
15152 |
*/
|
| 14650 |
const lineNumberMarkers = /*@__PURE__*/Facet.define();
|
15153 |
const lineNumberMarkers = /*@__PURE__*/Facet.define();
|
| - |
|
15154 |
/**
|
| - |
|
15155 |
Facet used to create markers in the line number gutter next to widgets.
|
| - |
|
15156 |
*/
|
| - |
|
15157 |
const lineNumberWidgetMarker = /*@__PURE__*/Facet.define();
|
| 14651 |
const lineNumberConfig = /*@__PURE__*/Facet.define({
|
15158 |
const lineNumberConfig = /*@__PURE__*/Facet.define({
|
| 14652 |
combine(values) {
|
15159 |
combine(values) {
|
| 14653 |
return combineConfig(values, { formatNumber: String, domEventHandlers: {} }, {
|
15160 |
return combineConfig(values, { formatNumber: String, domEventHandlers: {} }, {
|
| 14654 |
domEventHandlers(a, b) {
|
15161 |
domEventHandlers(a, b) {
|
| 14655 |
let result = Object.assign({}, a);
|
15162 |
let result = Object.assign({}, a);
|
| Línea 14680... |
Línea 15187... |
| 14680 |
lineMarker(view, line, others) {
|
15187 |
lineMarker(view, line, others) {
|
| 14681 |
if (others.some(m => m.toDOM))
|
15188 |
if (others.some(m => m.toDOM))
|
| 14682 |
return null;
|
15189 |
return null;
|
| 14683 |
return new NumberMarker(formatNumber(view, view.state.doc.lineAt(line.from).number));
|
15190 |
return new NumberMarker(formatNumber(view, view.state.doc.lineAt(line.from).number));
|
| 14684 |
},
|
15191 |
},
|
| 14685 |
widgetMarker: () => null,
|
15192 |
widgetMarker: (view, widget, block) => {
|
| - |
|
15193 |
for (let m of view.state.facet(lineNumberWidgetMarker)) {
|
| - |
|
15194 |
let result = m(view, widget, block);
|
| - |
|
15195 |
if (result)
|
| - |
|
15196 |
return result;
|
| - |
|
15197 |
}
|
| - |
|
15198 |
return null;
|
| - |
|
15199 |
},
|
| 14686 |
lineMarkerChange: update => update.startState.facet(lineNumberConfig) != update.state.facet(lineNumberConfig),
|
15200 |
lineMarkerChange: update => update.startState.facet(lineNumberConfig) != update.state.facet(lineNumberConfig),
|
| 14687 |
initialSpacer(view) {
|
15201 |
initialSpacer(view) {
|
| 14688 |
return new NumberMarker(formatNumber(view, maxLineNumber(view.state.doc.lines)));
|
15202 |
return new NumberMarker(formatNumber(view, maxLineNumber(view.state.doc.lines)));
|
| 14689 |
},
|
15203 |
},
|
| 14690 |
updateSpacer(spacer, update) {
|
15204 |
updateSpacer(spacer, update) {
|
| Línea 15425... |
Línea 15939... |
| 15425 |
}
|
15939 |
}
|
| 15426 |
resolveInner(pos, side = 0) {
|
15940 |
resolveInner(pos, side = 0) {
|
| 15427 |
return resolveNode(this, pos, side, true);
|
15941 |
return resolveNode(this, pos, side, true);
|
| 15428 |
}
|
15942 |
}
|
| 15429 |
matchContext(context) {
|
15943 |
matchContext(context) {
|
| 15430 |
return matchNodeContext(this, context);
|
15944 |
return matchNodeContext(this.parent, context);
|
| 15431 |
}
|
15945 |
}
|
| 15432 |
enterUnfinishedNodesBefore(pos) {
|
15946 |
enterUnfinishedNodesBefore(pos) {
|
| 15433 |
let scan = this.childBefore(pos), node = this;
|
15947 |
let scan = this.childBefore(pos), node = this;
|
| 15434 |
while (scan) {
|
15948 |
while (scan) {
|
| 15435 |
let last = scan.lastChild;
|
15949 |
let last = scan.lastChild;
|
| Línea 15550... |
Línea 16064... |
| 15550 |
if (!cur.nextSibling())
|
16064 |
if (!cur.nextSibling())
|
| 15551 |
return after == null ? result : [];
|
16065 |
return after == null ? result : [];
|
| 15552 |
}
|
16066 |
}
|
| 15553 |
}
|
16067 |
}
|
| 15554 |
function matchNodeContext(node, context, i = context.length - 1) {
|
16068 |
function matchNodeContext(node, context, i = context.length - 1) {
|
| 15555 |
for (let p = node.parent; i >= 0; p = p.parent) {
|
16069 |
for (let p = node; i >= 0; p = p.parent) {
|
| 15556 |
if (!p)
|
16070 |
if (!p)
|
| 15557 |
return false;
|
16071 |
return false;
|
| 15558 |
if (!p.type.isAnonymous) {
|
16072 |
if (!p.type.isAnonymous) {
|
| 15559 |
if (context[i] && context[i] != p.name)
|
16073 |
if (context[i] && context[i] != p.name)
|
| 15560 |
return false;
|
16074 |
return false;
|
| Línea 15886... |
Línea 16400... |
| 15886 |
current node is empty or `enter` is false, its next sibling or
|
16400 |
current node is empty or `enter` is false, its next sibling or
|
| 15887 |
the next sibling of the first parent node that has one.
|
16401 |
the next sibling of the first parent node that has one.
|
| 15888 |
*/
|
16402 |
*/
|
| 15889 |
next(enter = true) { return this.move(1, enter); }
|
16403 |
next(enter = true) { return this.move(1, enter); }
|
| 15890 |
/**
|
16404 |
/**
|
| 15891 |
Move to the next node in a last-to-first pre-order traveral. A
|
16405 |
Move to the next node in a last-to-first pre-order traversal. A
|
| 15892 |
node is followed by its last child or, if it has none, its
|
16406 |
node is followed by its last child or, if it has none, its
|
| 15893 |
previous sibling or the previous sibling of the first parent
|
16407 |
previous sibling or the previous sibling of the first parent
|
| 15894 |
node that has one.
|
16408 |
node that has one.
|
| 15895 |
*/
|
16409 |
*/
|
| 15896 |
prev(enter = true) { return this.move(-1, enter); }
|
16410 |
prev(enter = true) { return this.move(-1, enter); }
|
| Línea 15962... |
Línea 16476... |
| 15962 |
}
|
16476 |
}
|
| 15963 |
for (;;) {
|
16477 |
for (;;) {
|
| 15964 |
if (mustLeave && leave)
|
16478 |
if (mustLeave && leave)
|
| 15965 |
leave(this);
|
16479 |
leave(this);
|
| 15966 |
mustLeave = this.type.isAnonymous;
|
16480 |
mustLeave = this.type.isAnonymous;
|
| 15967 |
if (this.nextSibling())
|
- |
|
| 15968 |
break;
|
- |
|
| 15969 |
if (!depth)
|
16481 |
if (!depth)
|
| 15970 |
return;
|
16482 |
return;
|
| - |
|
16483 |
if (this.nextSibling())
|
| - |
|
16484 |
break;
|
| 15971 |
this.parent();
|
16485 |
this.parent();
|
| 15972 |
depth--;
|
16486 |
depth--;
|
| 15973 |
mustLeave = true;
|
16487 |
mustLeave = true;
|
| 15974 |
}
|
16488 |
}
|
| 15975 |
}
|
16489 |
}
|
| Línea 15979... |
Línea 16493... |
| 15979 |
of direct parent node names. Empty strings in the context array
|
16493 |
of direct parent node names. Empty strings in the context array
|
| 15980 |
are treated as wildcards.
|
16494 |
are treated as wildcards.
|
| 15981 |
*/
|
16495 |
*/
|
| 15982 |
matchContext(context) {
|
16496 |
matchContext(context) {
|
| 15983 |
if (!this.buffer)
|
16497 |
if (!this.buffer)
|
| 15984 |
return matchNodeContext(this.node, context);
|
16498 |
return matchNodeContext(this.node.parent, context);
|
| 15985 |
let { buffer } = this.buffer, { types } = buffer.set;
|
16499 |
let { buffer } = this.buffer, { types } = buffer.set;
|
| 15986 |
for (let i = context.length - 1, d = this.stack.length - 1; i >= 0; d--) {
|
16500 |
for (let i = context.length - 1, d = this.stack.length - 1; i >= 0; d--) {
|
| 15987 |
if (d < 0)
|
16501 |
if (d < 0)
|
| 15988 |
return matchNodeContext(this.node, context, i);
|
16502 |
return matchNodeContext(this._tree, context, i);
|
| 15989 |
let type = types[buffer.buffer[this.stack[d]]];
|
16503 |
let type = types[buffer.buffer[this.stack[d]]];
|
| 15990 |
if (!type.isAnonymous) {
|
16504 |
if (!type.isAnonymous) {
|
| 15991 |
if (context[i] && context[i] != type.name)
|
16505 |
if (context[i] && context[i] != type.name)
|
| 15992 |
return false;
|
16506 |
return false;
|
| 15993 |
i--;
|
16507 |
i--;
|
| Línea 16005... |
Línea 16519... |
| 16005 |
let cursor = Array.isArray(buffer) ? new FlatBufferCursor(buffer, buffer.length) : buffer;
|
16519 |
let cursor = Array.isArray(buffer) ? new FlatBufferCursor(buffer, buffer.length) : buffer;
|
| 16006 |
let types = nodeSet.types;
|
16520 |
let types = nodeSet.types;
|
| 16007 |
let contextHash = 0, lookAhead = 0;
|
16521 |
let contextHash = 0, lookAhead = 0;
|
| 16008 |
function takeNode(parentStart, minPos, children, positions, inRepeat, depth) {
|
16522 |
function takeNode(parentStart, minPos, children, positions, inRepeat, depth) {
|
| 16009 |
let { id, start, end, size } = cursor;
|
16523 |
let { id, start, end, size } = cursor;
|
| 16010 |
let lookAheadAtStart = lookAhead;
|
16524 |
let lookAheadAtStart = lookAhead, contextAtStart = contextHash;
|
| 16011 |
while (size < 0) {
|
16525 |
while (size < 0) {
|
| 16012 |
cursor.next();
|
16526 |
cursor.next();
|
| 16013 |
if (size == -1 /* SpecialRecord.Reuse */) {
|
16527 |
if (size == -1 /* SpecialRecord.Reuse */) {
|
| 16014 |
let node = reused[id];
|
16528 |
let node = reused[id];
|
| 16015 |
children.push(node);
|
16529 |
children.push(node);
|
| Línea 16046... |
Línea 16560... |
| 16046 |
let localInRepeat = id >= minRepeatType ? id : -1;
|
16560 |
let localInRepeat = id >= minRepeatType ? id : -1;
|
| 16047 |
let lastGroup = 0, lastEnd = end;
|
16561 |
let lastGroup = 0, lastEnd = end;
|
| 16048 |
while (cursor.pos > endPos) {
|
16562 |
while (cursor.pos > endPos) {
|
| 16049 |
if (localInRepeat >= 0 && cursor.id == localInRepeat && cursor.size >= 0) {
|
16563 |
if (localInRepeat >= 0 && cursor.id == localInRepeat && cursor.size >= 0) {
|
| 16050 |
if (cursor.end <= lastEnd - maxBufferLength) {
|
16564 |
if (cursor.end <= lastEnd - maxBufferLength) {
|
| 16051 |
makeRepeatLeaf(localChildren, localPositions, start, lastGroup, cursor.end, lastEnd, localInRepeat, lookAheadAtStart);
|
16565 |
makeRepeatLeaf(localChildren, localPositions, start, lastGroup, cursor.end, lastEnd, localInRepeat, lookAheadAtStart, contextAtStart);
|
| 16052 |
lastGroup = localChildren.length;
|
16566 |
lastGroup = localChildren.length;
|
| 16053 |
lastEnd = cursor.end;
|
16567 |
lastEnd = cursor.end;
|
| 16054 |
}
|
16568 |
}
|
| 16055 |
cursor.next();
|
16569 |
cursor.next();
|
| 16056 |
}
|
16570 |
}
|
| Línea 16060... |
Línea 16574... |
| 16060 |
else {
|
16574 |
else {
|
| 16061 |
takeNode(start, endPos, localChildren, localPositions, localInRepeat, depth + 1);
|
16575 |
takeNode(start, endPos, localChildren, localPositions, localInRepeat, depth + 1);
|
| 16062 |
}
|
16576 |
}
|
| 16063 |
}
|
16577 |
}
|
| 16064 |
if (localInRepeat >= 0 && lastGroup > 0 && lastGroup < localChildren.length)
|
16578 |
if (localInRepeat >= 0 && lastGroup > 0 && lastGroup < localChildren.length)
|
| 16065 |
makeRepeatLeaf(localChildren, localPositions, start, lastGroup, start, lastEnd, localInRepeat, lookAheadAtStart);
|
16579 |
makeRepeatLeaf(localChildren, localPositions, start, lastGroup, start, lastEnd, localInRepeat, lookAheadAtStart, contextAtStart);
|
| 16066 |
localChildren.reverse();
|
16580 |
localChildren.reverse();
|
| 16067 |
localPositions.reverse();
|
16581 |
localPositions.reverse();
|
| 16068 |
if (localInRepeat > -1 && lastGroup > 0) {
|
16582 |
if (localInRepeat > -1 && lastGroup > 0) {
|
| 16069 |
let make = makeBalanced(type);
|
16583 |
let make = makeBalanced(type, contextAtStart);
|
| 16070 |
node = balanceRange(type, localChildren, localPositions, 0, localChildren.length, 0, end - start, make, make);
|
16584 |
node = balanceRange(type, localChildren, localPositions, 0, localChildren.length, 0, end - start, make, make);
|
| 16071 |
}
|
16585 |
}
|
| 16072 |
else {
|
16586 |
else {
|
| 16073 |
node = makeTree(type, localChildren, localPositions, end - start, lookAheadAtStart - end);
|
16587 |
node = makeTree(type, localChildren, localPositions, end - start, lookAheadAtStart - end, contextAtStart);
|
| 16074 |
}
|
16588 |
}
|
| 16075 |
}
|
16589 |
}
|
| 16076 |
children.push(node);
|
16590 |
children.push(node);
|
| 16077 |
positions.push(startPos);
|
16591 |
positions.push(startPos);
|
| 16078 |
}
|
16592 |
}
|
| Línea 16106... |
Línea 16620... |
| 16106 |
}
|
16620 |
}
|
| 16107 |
children.push(new TreeBuffer(buffer, nodes[2] - start, nodeSet));
|
16621 |
children.push(new TreeBuffer(buffer, nodes[2] - start, nodeSet));
|
| 16108 |
positions.push(start - parentStart);
|
16622 |
positions.push(start - parentStart);
|
| 16109 |
}
|
16623 |
}
|
| 16110 |
}
|
16624 |
}
|
| 16111 |
function makeBalanced(type) {
|
16625 |
function makeBalanced(type, contextHash) {
|
| 16112 |
return (children, positions, length) => {
|
16626 |
return (children, positions, length) => {
|
| 16113 |
let lookAhead = 0, lastI = children.length - 1, last, lookAheadProp;
|
16627 |
let lookAhead = 0, lastI = children.length - 1, last, lookAheadProp;
|
| 16114 |
if (lastI >= 0 && (last = children[lastI]) instanceof Tree) {
|
16628 |
if (lastI >= 0 && (last = children[lastI]) instanceof Tree) {
|
| 16115 |
if (!lastI && last.type == type && last.length == length)
|
16629 |
if (!lastI && last.type == type && last.length == length)
|
| 16116 |
return last;
|
16630 |
return last;
|
| 16117 |
if (lookAheadProp = last.prop(NodeProp.lookAhead))
|
16631 |
if (lookAheadProp = last.prop(NodeProp.lookAhead))
|
| 16118 |
lookAhead = positions[lastI] + last.length + lookAheadProp;
|
16632 |
lookAhead = positions[lastI] + last.length + lookAheadProp;
|
| 16119 |
}
|
16633 |
}
|
| 16120 |
return makeTree(type, children, positions, length, lookAhead);
|
16634 |
return makeTree(type, children, positions, length, lookAhead, contextHash);
|
| 16121 |
};
|
16635 |
};
|
| 16122 |
}
|
16636 |
}
|
| 16123 |
function makeRepeatLeaf(children, positions, base, i, from, to, type, lookAhead) {
|
16637 |
function makeRepeatLeaf(children, positions, base, i, from, to, type, lookAhead, contextHash) {
|
| 16124 |
let localChildren = [], localPositions = [];
|
16638 |
let localChildren = [], localPositions = [];
|
| 16125 |
while (children.length > i) {
|
16639 |
while (children.length > i) {
|
| 16126 |
localChildren.push(children.pop());
|
16640 |
localChildren.push(children.pop());
|
| 16127 |
localPositions.push(positions.pop() + base - from);
|
16641 |
localPositions.push(positions.pop() + base - from);
|
| 16128 |
}
|
16642 |
}
|
| 16129 |
children.push(makeTree(nodeSet.types[type], localChildren, localPositions, to - from, lookAhead - to));
|
16643 |
children.push(makeTree(nodeSet.types[type], localChildren, localPositions, to - from, lookAhead - to, contextHash));
|
| 16130 |
positions.push(from - base);
|
16644 |
positions.push(from - base);
|
| 16131 |
}
|
16645 |
}
|
| 16132 |
function makeTree(type, children, positions, length, lookAhead = 0, props) {
|
16646 |
function makeTree(type, children, positions, length, lookAhead, contextHash, props) {
|
| 16133 |
if (contextHash) {
|
16647 |
if (contextHash) {
|
| 16134 |
let pair = [NodeProp.contextHash, contextHash];
|
16648 |
let pair = [NodeProp.contextHash, contextHash];
|
| 16135 |
props = props ? [pair].concat(props) : [pair];
|
16649 |
props = props ? [pair].concat(props) : [pair];
|
| 16136 |
}
|
16650 |
}
|
| 16137 |
if (lookAhead > 25) {
|
16651 |
if (lookAhead > 25) {
|
| Línea 16634... |
Línea 17148... |
| 16634 |
}
|
17148 |
}
|
| 16635 |
}
|
17149 |
}
|
| 16636 |
else if (overlay && (range = overlay.predicate(cursor))) {
|
17150 |
else if (overlay && (range = overlay.predicate(cursor))) {
|
| 16637 |
if (range === true)
|
17151 |
if (range === true)
|
| 16638 |
range = new Range(cursor.from, cursor.to);
|
17152 |
range = new Range(cursor.from, cursor.to);
|
| 16639 |
if (range.from < range.to)
|
17153 |
if (range.from < range.to) {
|
| - |
|
17154 |
let last = overlay.ranges.length - 1;
|
| - |
|
17155 |
if (last >= 0 && overlay.ranges[last].to == range.from)
|
| - |
|
17156 |
overlay.ranges[last] = { from: overlay.ranges[last].from, to: range.to };
|
| - |
|
17157 |
else
|
| 16640 |
overlay.ranges.push(range);
|
17158 |
overlay.ranges.push(range);
|
| - |
|
17159 |
}
|
| 16641 |
}
|
17160 |
}
|
| 16642 |
if (enter && cursor.firstChild()) {
|
17161 |
if (enter && cursor.firstChild()) {
|
| 16643 |
if (overlay)
|
17162 |
if (overlay)
|
| 16644 |
overlay.depth++;
|
17163 |
overlay.depth++;
|
| 16645 |
if (covered)
|
17164 |
if (covered)
|
| Línea 16921... |
Línea 17440... |
| 16921 |
/**
|
17440 |
/**
|
| 16922 |
@internal
|
17441 |
@internal
|
| 16923 |
*/
|
17442 |
*/
|
| 16924 |
constructor(
|
17443 |
constructor(
|
| 16925 |
/**
|
17444 |
/**
|
| - |
|
17445 |
The optional name of the base tag @internal
|
| - |
|
17446 |
*/
|
| - |
|
17447 |
name,
|
| - |
|
17448 |
/**
|
| 16926 |
The set of this tag and all its parent tags, starting with
|
17449 |
The set of this tag and all its parent tags, starting with
|
| 16927 |
this one itself and sorted in order of decreasing specificity.
|
17450 |
this one itself and sorted in order of decreasing specificity.
|
| 16928 |
*/
|
17451 |
*/
|
| 16929 |
set,
|
17452 |
set,
|
| 16930 |
/**
|
17453 |
/**
|
| Línea 16934... |
Línea 17457... |
| 16934 |
base,
|
17457 |
base,
|
| 16935 |
/**
|
17458 |
/**
|
| 16936 |
The modifiers applied to this.base @internal
|
17459 |
The modifiers applied to this.base @internal
|
| 16937 |
*/
|
17460 |
*/
|
| 16938 |
modified) {
|
17461 |
modified) {
|
| - |
|
17462 |
this.name = name;
|
| 16939 |
this.set = set;
|
17463 |
this.set = set;
|
| 16940 |
this.base = base;
|
17464 |
this.base = base;
|
| 16941 |
this.modified = modified;
|
17465 |
this.modified = modified;
|
| 16942 |
/**
|
17466 |
/**
|
| 16943 |
@internal
|
17467 |
@internal
|
| 16944 |
*/
|
17468 |
*/
|
| 16945 |
this.id = nextTagID++;
|
17469 |
this.id = nextTagID++;
|
| 16946 |
}
|
17470 |
}
|
| 16947 |
/**
|
17471 |
toString() {
|
| 16948 |
Define a new tag. If `parent` is given, the tag is treated as a
|
17472 |
let { name } = this;
|
| 16949 |
sub-tag of that parent, and
|
17473 |
for (let mod of this.modified)
|
| 16950 |
[highlighters](#highlight.tagHighlighter) that don't mention
|
17474 |
if (mod.name)
|
| 16951 |
this tag will try to fall back to the parent tag (or grandparent
|
17475 |
name = `${mod.name}(${name})`;
|
| 16952 |
tag, etc).
|
17476 |
return name;
|
| 16953 |
*/
|
17477 |
}
|
| 16954 |
static define(parent) {
|
17478 |
static define(nameOrParent, parent) {
|
| - |
|
17479 |
let name = typeof nameOrParent == "string" ? nameOrParent : "?";
|
| - |
|
17480 |
if (nameOrParent instanceof Tag)
|
| - |
|
17481 |
parent = nameOrParent;
|
| 16955 |
if (parent === null || parent === void 0 ? void 0 : parent.base)
|
17482 |
if (parent === null || parent === void 0 ? void 0 : parent.base)
|
| 16956 |
throw new Error("Can not derive from a modified tag");
|
17483 |
throw new Error("Can not derive from a modified tag");
|
| 16957 |
let tag = new Tag([], null, []);
|
17484 |
let tag = new Tag(name, [], null, []);
|
| 16958 |
tag.set.push(tag);
|
17485 |
tag.set.push(tag);
|
| 16959 |
if (parent)
|
17486 |
if (parent)
|
| 16960 |
for (let t of parent.set)
|
17487 |
for (let t of parent.set)
|
| 16961 |
tag.set.push(t);
|
17488 |
tag.set.push(t);
|
| 16962 |
return tag;
|
17489 |
return tag;
|
| Línea 16971... |
Línea 17498... |
| 16971 |
When multiple modifiers are applied to a given base tag, each
|
17498 |
When multiple modifiers are applied to a given base tag, each
|
| 16972 |
smaller set of modifiers is registered as a parent, so that for
|
17499 |
smaller set of modifiers is registered as a parent, so that for
|
| 16973 |
example `m1(m2(m3(t1)))` is a subtype of `m1(m2(t1))`,
|
17500 |
example `m1(m2(m3(t1)))` is a subtype of `m1(m2(t1))`,
|
| 16974 |
`m1(m3(t1)`, and so on.
|
17501 |
`m1(m3(t1)`, and so on.
|
| 16975 |
*/
|
17502 |
*/
|
| 16976 |
static defineModifier() {
|
17503 |
static defineModifier(name) {
|
| 16977 |
let mod = new Modifier;
|
17504 |
let mod = new Modifier(name);
|
| 16978 |
return (tag) => {
|
17505 |
return (tag) => {
|
| 16979 |
if (tag.modified.indexOf(mod) > -1)
|
17506 |
if (tag.modified.indexOf(mod) > -1)
|
| 16980 |
return tag;
|
17507 |
return tag;
|
| 16981 |
return Modifier.get(tag.base || tag, tag.modified.concat(mod).sort((a, b) => a.id - b.id));
|
17508 |
return Modifier.get(tag.base || tag, tag.modified.concat(mod).sort((a, b) => a.id - b.id));
|
| 16982 |
};
|
17509 |
};
|
| 16983 |
}
|
17510 |
}
|
| 16984 |
}
|
17511 |
}
|
| 16985 |
let nextModifierID = 0;
|
17512 |
let nextModifierID = 0;
|
| 16986 |
class Modifier {
|
17513 |
class Modifier {
|
| 16987 |
constructor() {
|
17514 |
constructor(name) {
|
| - |
|
17515 |
this.name = name;
|
| 16988 |
this.instances = [];
|
17516 |
this.instances = [];
|
| 16989 |
this.id = nextModifierID++;
|
17517 |
this.id = nextModifierID++;
|
| 16990 |
}
|
17518 |
}
|
| 16991 |
static get(base, mods) {
|
17519 |
static get(base, mods) {
|
| 16992 |
if (!mods.length)
|
17520 |
if (!mods.length)
|
| 16993 |
return base;
|
17521 |
return base;
|
| 16994 |
let exists = mods[0].instances.find(t => t.base == base && sameArray(mods, t.modified));
|
17522 |
let exists = mods[0].instances.find(t => t.base == base && sameArray(mods, t.modified));
|
| 16995 |
if (exists)
|
17523 |
if (exists)
|
| 16996 |
return exists;
|
17524 |
return exists;
|
| 16997 |
let set = [], tag = new Tag(set, base, mods);
|
17525 |
let set = [], tag = new Tag(base.name, set, base, mods);
|
| 16998 |
for (let m of mods)
|
17526 |
for (let m of mods)
|
| 16999 |
m.instances.push(tag);
|
17527 |
m.instances.push(tag);
|
| 17000 |
let configs = powerSet(mods);
|
17528 |
let configs = powerSet(mods);
|
| 17001 |
for (let parent of base.set)
|
17529 |
for (let parent of base.set)
|
| 17002 |
if (!parent.modified.length)
|
17530 |
if (!parent.modified.length)
|
| Línea 17564... |
Línea 18092... |
| 17564 |
/**
|
18092 |
/**
|
| 17565 |
A level 6 [heading](#highlight.tags.heading).
|
18093 |
A level 6 [heading](#highlight.tags.heading).
|
| 17566 |
*/
|
18094 |
*/
|
| 17567 |
heading6: t(heading),
|
18095 |
heading6: t(heading),
|
| 17568 |
/**
|
18096 |
/**
|
| 17569 |
A prose separator (such as a horizontal rule).
|
18097 |
A prose [content](#highlight.tags.content) separator (such as a horizontal rule).
|
| 17570 |
*/
|
18098 |
*/
|
| 17571 |
contentSeparator: t(content),
|
18099 |
contentSeparator: t(content),
|
| 17572 |
/**
|
18100 |
/**
|
| 17573 |
[Content](#highlight.tags.content) that represents a list.
|
18101 |
[Content](#highlight.tags.content) that represents a list.
|
| 17574 |
*/
|
18102 |
*/
|
| Línea 17637... |
Línea 18165... |
| 17637 |
/**
|
18165 |
/**
|
| 17638 |
[Modifier](#highlight.Tag^defineModifier) that indicates that a
|
18166 |
[Modifier](#highlight.Tag^defineModifier) that indicates that a
|
| 17639 |
given element is being defined. Expected to be used with the
|
18167 |
given element is being defined. Expected to be used with the
|
| 17640 |
various [name](#highlight.tags.name) tags.
|
18168 |
various [name](#highlight.tags.name) tags.
|
| 17641 |
*/
|
18169 |
*/
|
| 17642 |
definition: Tag.defineModifier(),
|
18170 |
definition: Tag.defineModifier("definition"),
|
| 17643 |
/**
|
18171 |
/**
|
| 17644 |
[Modifier](#highlight.Tag^defineModifier) that indicates that
|
18172 |
[Modifier](#highlight.Tag^defineModifier) that indicates that
|
| 17645 |
something is constant. Mostly expected to be used with
|
18173 |
something is constant. Mostly expected to be used with
|
| 17646 |
[variable names](#highlight.tags.variableName).
|
18174 |
[variable names](#highlight.tags.variableName).
|
| 17647 |
*/
|
18175 |
*/
|
| 17648 |
constant: Tag.defineModifier(),
|
18176 |
constant: Tag.defineModifier("constant"),
|
| 17649 |
/**
|
18177 |
/**
|
| 17650 |
[Modifier](#highlight.Tag^defineModifier) used to indicate that
|
18178 |
[Modifier](#highlight.Tag^defineModifier) used to indicate that
|
| 17651 |
a [variable](#highlight.tags.variableName) or [property
|
18179 |
a [variable](#highlight.tags.variableName) or [property
|
| 17652 |
name](#highlight.tags.propertyName) is being called or defined
|
18180 |
name](#highlight.tags.propertyName) is being called or defined
|
| 17653 |
as a function.
|
18181 |
as a function.
|
| 17654 |
*/
|
18182 |
*/
|
| 17655 |
function: Tag.defineModifier(),
|
18183 |
function: Tag.defineModifier("function"),
|
| 17656 |
/**
|
18184 |
/**
|
| 17657 |
[Modifier](#highlight.Tag^defineModifier) that can be applied to
|
18185 |
[Modifier](#highlight.Tag^defineModifier) that can be applied to
|
| 17658 |
[names](#highlight.tags.name) to indicate that they belong to
|
18186 |
[names](#highlight.tags.name) to indicate that they belong to
|
| 17659 |
the language's standard environment.
|
18187 |
the language's standard environment.
|
| 17660 |
*/
|
18188 |
*/
|
| 17661 |
standard: Tag.defineModifier(),
|
18189 |
standard: Tag.defineModifier("standard"),
|
| 17662 |
/**
|
18190 |
/**
|
| 17663 |
[Modifier](#highlight.Tag^defineModifier) that indicates a given
|
18191 |
[Modifier](#highlight.Tag^defineModifier) that indicates a given
|
| 17664 |
[names](#highlight.tags.name) is local to some scope.
|
18192 |
[names](#highlight.tags.name) is local to some scope.
|
| 17665 |
*/
|
18193 |
*/
|
| 17666 |
local: Tag.defineModifier(),
|
18194 |
local: Tag.defineModifier("local"),
|
| 17667 |
/**
|
18195 |
/**
|
| 17668 |
A generic variant [modifier](#highlight.Tag^defineModifier) that
|
18196 |
A generic variant [modifier](#highlight.Tag^defineModifier) that
|
| 17669 |
can be used to tag language-specific alternative variants of
|
18197 |
can be used to tag language-specific alternative variants of
|
| 17670 |
some common tag. It is recommended for themes to define special
|
18198 |
some common tag. It is recommended for themes to define special
|
| 17671 |
forms of at least the [string](#highlight.tags.string) and
|
18199 |
forms of at least the [string](#highlight.tags.string) and
|
| 17672 |
[variable name](#highlight.tags.variableName) tags, since those
|
18200 |
[variable name](#highlight.tags.variableName) tags, since those
|
| 17673 |
come up a lot.
|
18201 |
come up a lot.
|
| 17674 |
*/
|
18202 |
*/
|
| 17675 |
special: Tag.defineModifier()
|
18203 |
special: Tag.defineModifier("special")
|
| 17676 |
};
|
18204 |
};
|
| - |
|
18205 |
for (let name in tags$1) {
|
| - |
|
18206 |
let val = tags$1[name];
|
| - |
|
18207 |
if (val instanceof Tag)
|
| - |
|
18208 |
val.name = name;
|
| - |
|
18209 |
}
|
| 17677 |
/**
|
18210 |
/**
|
| 17678 |
This is a highlighter that adds stable, predictable classes to
|
18211 |
This is a highlighter that adds stable, predictable classes to
|
| 17679 |
tokens, for styling with external CSS.
|
18212 |
tokens, for styling with external CSS.
|
| Línea 17680... |
Línea 18213... |
| 17680 |
|
18213 |
|
| Línea 18568... |
Línea 19101... |
| 18568 |
*/
|
19101 |
*/
|
| 18569 |
const indentNodeProp = /*@__PURE__*/new NodeProp();
|
19102 |
const indentNodeProp = /*@__PURE__*/new NodeProp();
|
| 18570 |
// Compute the indentation for a given position from the syntax tree.
|
19103 |
// Compute the indentation for a given position from the syntax tree.
|
| 18571 |
function syntaxIndentation(cx, ast, pos) {
|
19104 |
function syntaxIndentation(cx, ast, pos) {
|
| 18572 |
let stack = ast.resolveStack(pos);
|
19105 |
let stack = ast.resolveStack(pos);
|
| 18573 |
let inner = stack.node.enterUnfinishedNodesBefore(pos);
|
19106 |
let inner = ast.resolveInner(pos, -1).resolve(pos, 0).enterUnfinishedNodesBefore(pos);
|
| 18574 |
if (inner != stack.node) {
|
19107 |
if (inner != stack.node) {
|
| 18575 |
let add = [];
|
19108 |
let add = [];
|
| 18576 |
for (let cur = inner; cur != stack.node; cur = cur.parent)
|
19109 |
for (let cur = inner; cur && !(cur.from == stack.node.from && cur.type == stack.node.type); cur = cur.parent)
|
| 18577 |
add.push(cur);
|
19110 |
add.push(cur);
|
| 18578 |
for (let i = add.length - 1; i >= 0; i--)
|
19111 |
for (let i = add.length - 1; i >= 0; i--)
|
| 18579 |
stack = { node: add[i], next: stack };
|
19112 |
stack = { node: add[i], next: stack };
|
| 18580 |
}
|
19113 |
}
|
| 18581 |
return indentFor(stack, cx, pos);
|
19114 |
return indentFor(stack, cx, pos);
|
| Línea 18694... |
Línea 19227... |
| 18694 |
let lineEnd = sim == null || sim <= openLine.from ? openLine.to : Math.min(openLine.to, sim);
|
19227 |
let lineEnd = sim == null || sim <= openLine.from ? openLine.to : Math.min(openLine.to, sim);
|
| 18695 |
for (let pos = openToken.to;;) {
|
19228 |
for (let pos = openToken.to;;) {
|
| 18696 |
let next = tree.childAfter(pos);
|
19229 |
let next = tree.childAfter(pos);
|
| 18697 |
if (!next || next == last)
|
19230 |
if (!next || next == last)
|
| 18698 |
return null;
|
19231 |
return null;
|
| 18699 |
if (!next.type.isSkipped)
|
19232 |
if (!next.type.isSkipped) {
|
| - |
|
19233 |
if (next.from >= lineEnd)
|
| - |
|
19234 |
return null;
|
| - |
|
19235 |
let space = /^ */.exec(openLine.text.slice(openToken.to - openLine.from))[0].length;
|
| 18700 |
return next.from < lineEnd ? openToken : null;
|
19236 |
return { from: openToken.from, to: openToken.to + space };
|
| - |
|
19237 |
}
|
| 18701 |
pos = next.to;
|
19238 |
pos = next.to;
|
| 18702 |
}
|
19239 |
}
|
| 18703 |
}
|
19240 |
}
|
| 18704 |
/**
|
19241 |
/**
|
| 18705 |
An indentation strategy for delimited (usually bracketed) nodes.
|
19242 |
An indentation strategy for delimited (usually bracketed) nodes.
|
| Línea 19043... |
Línea 19580... |
| 19043 |
/**
|
19580 |
/**
|
| 19044 |
Create an extension that configures code folding.
|
19581 |
Create an extension that configures code folding.
|
| 19045 |
*/
|
19582 |
*/
|
| 19046 |
function codeFolding(config) {
|
19583 |
function codeFolding(config) {
|
| 19047 |
let result = [foldState, baseTheme$1$2];
|
19584 |
let result = [foldState, baseTheme$1$2];
|
| 19048 |
if (config)
|
- |
|
| 19049 |
result.push(foldConfig.of(config));
|
- |
|
| 19050 |
return result;
|
19585 |
return result;
|
| 19051 |
}
|
19586 |
}
|
| 19052 |
function widgetToDOM(view, prepared) {
|
19587 |
function widgetToDOM(view, prepared) {
|
| 19053 |
let { state } = view, conf = state.facet(foldConfig);
|
19588 |
let { state } = view, conf = state.facet(foldConfig);
|
| 19054 |
let onclick = (event) => {
|
19589 |
let onclick = (event) => {
|
| Línea 19567... |
Línea 20102... |
| 19567 |
typeArray.push(type);
|
20102 |
typeArray.push(type);
|
| 19568 |
return type.id;
|
20103 |
return type.id;
|
| 19569 |
}
|
20104 |
}
|
| 19570 |
({
|
20105 |
({
|
| 19571 |
rtl: /*@__PURE__*/Decoration.mark({ class: "cm-iso", inclusive: true, attributes: { dir: "rtl" }, bidiIsolate: Direction.RTL }),
|
20106 |
rtl: /*@__PURE__*/Decoration.mark({ class: "cm-iso", inclusive: true, attributes: { dir: "rtl" }, bidiIsolate: Direction.RTL }),
|
| 19572 |
ltr: /*@__PURE__*/Decoration.mark({ class: "cm-iso", inclusive: true, attributes: { dir: "ltr" }, bidiIsolate: Direction.LTR }),
|
20107 |
ltr: /*@__PURE__*/Decoration.mark({ class: "cm-iso", inclusive: true, attributes: { dir: "ltr" }, bidiIsolate: Direction.LTR })});
|
| 19573 |
auto: /*@__PURE__*/Decoration.mark({ class: "cm-iso", inclusive: true, attributes: { dir: "auto" }, bidiIsolate: null })
|
- |
|
| 19574 |
});
|
- |
|
| Línea 19575... |
Línea 20108... |
| 19575 |
|
20108 |
|
| 19576 |
/**
|
20109 |
/**
|
| 19577 |
Comment or uncomment the current selection. Will use line comments
|
20110 |
Comment or uncomment the current selection. Will use line comments
|
| 19578 |
if available, otherwise falling back to block comments.
|
20111 |
if available, otherwise falling back to block comments.
|
| Línea 19652... |
Línea 20185... |
| 19652 |
function selectedLineRanges(state) {
|
20185 |
function selectedLineRanges(state) {
|
| 19653 |
let ranges = [];
|
20186 |
let ranges = [];
|
| 19654 |
for (let r of state.selection.ranges) {
|
20187 |
for (let r of state.selection.ranges) {
|
| 19655 |
let fromLine = state.doc.lineAt(r.from);
|
20188 |
let fromLine = state.doc.lineAt(r.from);
|
| 19656 |
let toLine = r.to <= fromLine.to ? fromLine : state.doc.lineAt(r.to);
|
20189 |
let toLine = r.to <= fromLine.to ? fromLine : state.doc.lineAt(r.to);
|
| - |
|
20190 |
if (toLine.from > fromLine.from && toLine.from == r.to)
|
| - |
|
20191 |
toLine = r.to == fromLine.to + 1 ? fromLine : state.doc.lineAt(r.to - 1);
|
| 19657 |
let last = ranges.length - 1;
|
20192 |
let last = ranges.length - 1;
|
| 19658 |
if (last >= 0 && ranges[last].to > fromLine.from)
|
20193 |
if (last >= 0 && ranges[last].to > fromLine.from)
|
| 19659 |
ranges[last].to = toLine.to;
|
20194 |
ranges[last].to = toLine.to;
|
| 19660 |
else
|
20195 |
else
|
| 19661 |
ranges.push({ from: fromLine.from + /^\s*/.exec(fromLine.text)[0].length, to: toLine.to });
|
20196 |
ranges.push({ from: fromLine.from + /^\s*/.exec(fromLine.text)[0].length, to: toLine.to });
|
| Línea 20011... |
Línea 20546... |
| 20011 |
((!lastEvent.selectionsAfter.length &&
|
20546 |
((!lastEvent.selectionsAfter.length &&
|
| 20012 |
time - this.prevTime < config.newGroupDelay &&
|
20547 |
time - this.prevTime < config.newGroupDelay &&
|
| 20013 |
config.joinToEvent(tr, isAdjacent(lastEvent.changes, event.changes))) ||
|
20548 |
config.joinToEvent(tr, isAdjacent(lastEvent.changes, event.changes))) ||
|
| 20014 |
// For compose (but not compose.start) events, always join with previous event
|
20549 |
// For compose (but not compose.start) events, always join with previous event
|
| 20015 |
userEvent == "input.type.compose")) {
|
20550 |
userEvent == "input.type.compose")) {
|
| 20016 |
done = updateBranch(done, done.length - 1, config.minDepth, new HistEvent(event.changes.compose(lastEvent.changes), conc(event.effects, lastEvent.effects), lastEvent.mapped, lastEvent.startSelection, none$1));
|
20551 |
done = updateBranch(done, done.length - 1, config.minDepth, new HistEvent(event.changes.compose(lastEvent.changes), conc(StateEffect.mapEffects(event.effects, lastEvent.changes), lastEvent.effects), lastEvent.mapped, lastEvent.startSelection, none$1));
|
| 20017 |
}
|
20552 |
}
|
| 20018 |
else {
|
20553 |
else {
|
| 20019 |
done = updateBranch(done, done.length, config.minDepth, event);
|
20554 |
done = updateBranch(done, done.length, config.minDepth, event);
|
| 20020 |
}
|
20555 |
}
|
| 20021 |
return new HistoryState(done, none$1, time, userEvent);
|
20556 |
return new HistoryState(done, none$1, time, userEvent);
|
| Línea 20268... |
Línea 20803... |
| 20268 |
|| (range.head < state.doc.length && matchBrackets(state, range.head + 1, -1));
|
20803 |
|| (range.head < state.doc.length && matchBrackets(state, range.head + 1, -1));
|
| 20269 |
if (!matching || !matching.end)
|
20804 |
if (!matching || !matching.end)
|
| 20270 |
return range;
|
20805 |
return range;
|
| 20271 |
found = true;
|
20806 |
found = true;
|
| 20272 |
let head = matching.start.from == range.head ? matching.end.to : matching.end.from;
|
20807 |
let head = matching.start.from == range.head ? matching.end.to : matching.end.from;
|
| 20273 |
return extend ? EditorSelection.range(range.anchor, head) : EditorSelection.cursor(head);
|
20808 |
return EditorSelection.cursor(head);
|
| 20274 |
});
|
20809 |
});
|
| 20275 |
if (!found)
|
20810 |
if (!found)
|
| 20276 |
return false;
|
20811 |
return false;
|
| 20277 |
dispatch(setSel(state, selection));
|
20812 |
dispatch(setSel(state, selection));
|
| 20278 |
return true;
|
20813 |
return true;
|
| 20279 |
}
|
20814 |
}
|
| 20280 |
/**
|
20815 |
/**
|
| 20281 |
Move the selection to the bracket matching the one it is currently
|
20816 |
Move the selection to the bracket matching the one it is currently
|
| 20282 |
on, if any.
|
20817 |
on, if any.
|
| 20283 |
*/
|
20818 |
*/
|
| 20284 |
const cursorMatchingBracket = ({ state, dispatch }) => toMatchingBracket(state, dispatch, false);
|
20819 |
const cursorMatchingBracket = ({ state, dispatch }) => toMatchingBracket(state, dispatch);
|
| 20285 |
function extendSel(view, how) {
|
20820 |
function extendSel(target, how) {
|
| 20286 |
let selection = updateSel(view.state.selection, range => {
|
20821 |
let selection = updateSel(target.state.selection, range => {
|
| 20287 |
let head = how(range);
|
20822 |
let head = how(range);
|
| 20288 |
return EditorSelection.range(range.anchor, head.head, head.goalColumn, head.bidiLevel || undefined);
|
20823 |
return EditorSelection.range(range.anchor, head.head, head.goalColumn, head.bidiLevel || undefined);
|
| 20289 |
});
|
20824 |
});
|
| 20290 |
if (selection.eq(view.state.selection))
|
20825 |
if (selection.eq(target.state.selection))
|
| 20291 |
return false;
|
20826 |
return false;
|
| 20292 |
view.dispatch(setSel(view.state, selection));
|
20827 |
target.dispatch(setSel(target.state, selection));
|
| 20293 |
return true;
|
20828 |
return true;
|
| 20294 |
}
|
20829 |
}
|
| 20295 |
function selectByChar(view, forward) {
|
20830 |
function selectByChar(view, forward) {
|
| 20296 |
return extendSel(view, range => view.moveByChar(range, forward));
|
20831 |
return extendSel(view, range => view.moveByChar(range, forward));
|
| 20297 |
}
|
20832 |
}
|
| Línea 20419... |
Línea 20954... |
| 20419 |
[provider](https://codemirror.net/6/docs/ref/#language.language) you use builds up a full
|
20954 |
[provider](https://codemirror.net/6/docs/ref/#language.language) you use builds up a full
|
| 20420 |
syntax tree.
|
20955 |
syntax tree.
|
| 20421 |
*/
|
20956 |
*/
|
| 20422 |
const selectParentSyntax = ({ state, dispatch }) => {
|
20957 |
const selectParentSyntax = ({ state, dispatch }) => {
|
| 20423 |
let selection = updateSel(state.selection, range => {
|
20958 |
let selection = updateSel(state.selection, range => {
|
| - |
|
20959 |
let tree = syntaxTree(state), stack = tree.resolveStack(range.from, 1);
|
| 20424 |
var _a;
|
20960 |
if (range.empty) {
|
| 20425 |
let stack = syntaxTree(state).resolveStack(range.from, 1);
|
20961 |
let stackBefore = tree.resolveStack(range.from, -1);
|
| - |
|
20962 |
if (stackBefore.node.from >= stack.node.from && stackBefore.node.to <= stack.node.to)
|
| - |
|
20963 |
stack = stackBefore;
|
| - |
|
20964 |
}
|
| 20426 |
for (let cur = stack; cur; cur = cur.next) {
|
20965 |
for (let cur = stack; cur; cur = cur.next) {
|
| 20427 |
let { node } = cur;
|
20966 |
let { node } = cur;
|
| 20428 |
if (((node.from < range.from && node.to >= range.to) ||
|
20967 |
if (((node.from < range.from && node.to >= range.to) ||
|
| 20429 |
(node.to > range.to && node.from <= range.from)) &&
|
20968 |
(node.to > range.to && node.from <= range.from)) &&
|
| 20430 |
((_a = node.parent) === null || _a === void 0 ? void 0 : _a.parent))
|
20969 |
cur.next)
|
| 20431 |
return EditorSelection.range(node.to, node.from);
|
20970 |
return EditorSelection.range(node.to, node.from);
|
| 20432 |
}
|
20971 |
}
|
| 20433 |
return range;
|
20972 |
return range;
|
| 20434 |
});
|
20973 |
});
|
| - |
|
20974 |
if (selection.eq(state.selection))
|
| - |
|
20975 |
return false;
|
| 20435 |
dispatch(setSel(state, selection));
|
20976 |
dispatch(setSel(state, selection));
|
| 20436 |
return true;
|
20977 |
return true;
|
| 20437 |
};
|
20978 |
};
|
| 20438 |
/**
|
20979 |
/**
|
| 20439 |
Simplify the current selection. When multiple ranges are selected,
|
20980 |
Simplify the current selection. When multiple ranges are selected,
|
| Línea 20492... |
Línea 21033... |
| 20492 |
if (from < pos && to > pos)
|
21033 |
if (from < pos && to > pos)
|
| 20493 |
pos = forward ? to : from;
|
21034 |
pos = forward ? to : from;
|
| 20494 |
});
|
21035 |
});
|
| 20495 |
return pos;
|
21036 |
return pos;
|
| 20496 |
}
|
21037 |
}
|
| 20497 |
const deleteByChar = (target, forward) => deleteBy(target, range => {
|
21038 |
const deleteByChar = (target, forward, byIndentUnit) => deleteBy(target, range => {
|
| 20498 |
let pos = range.from, { state } = target, line = state.doc.lineAt(pos), before, targetPos;
|
21039 |
let pos = range.from, { state } = target, line = state.doc.lineAt(pos), before, targetPos;
|
| 20499 |
if (!forward && pos > line.from && pos < line.from + 200 &&
|
21040 |
if (byIndentUnit && !forward && pos > line.from && pos < line.from + 200 &&
|
| 20500 |
!/[^ \t]/.test(before = line.text.slice(0, pos - line.from))) {
|
21041 |
!/[^ \t]/.test(before = line.text.slice(0, pos - line.from))) {
|
| 20501 |
if (before[before.length - 1] == "\t")
|
21042 |
if (before[before.length - 1] == "\t")
|
| 20502 |
return pos - 1;
|
21043 |
return pos - 1;
|
| 20503 |
let col = countColumn(before, state.tabSize), drop = col % getIndentUnit(state) || getIndentUnit(state);
|
21044 |
let col = countColumn(before, state.tabSize), drop = col % getIndentUnit(state) || getIndentUnit(state);
|
| 20504 |
for (let i = 0; i < drop && before[before.length - 1 - i] == " "; i++)
|
21045 |
for (let i = 0; i < drop && before[before.length - 1 - i] == " "; i++)
|
| Línea 20513... |
Línea 21054... |
| 20513 |
targetPos = findClusterBreak(line.text, targetPos - line.from, false, false) + line.from;
|
21054 |
targetPos = findClusterBreak(line.text, targetPos - line.from, false, false) + line.from;
|
| 20514 |
}
|
21055 |
}
|
| 20515 |
return targetPos;
|
21056 |
return targetPos;
|
| 20516 |
});
|
21057 |
});
|
| 20517 |
/**
|
21058 |
/**
|
| 20518 |
Delete the selection, or, for cursor selections, the character
|
21059 |
Delete the selection, or, for cursor selections, the character or
|
| 20519 |
before the cursor.
|
21060 |
indentation unit before the cursor.
|
| 20520 |
*/
|
21061 |
*/
|
| 20521 |
const deleteCharBackward = view => deleteByChar(view, false);
|
21062 |
const deleteCharBackward = view => deleteByChar(view, false, true);
|
| 20522 |
/**
|
21063 |
/**
|
| 20523 |
Delete the selection or the character after the cursor.
|
21064 |
Delete the selection or the character after the cursor.
|
| 20524 |
*/
|
21065 |
*/
|
| 20525 |
const deleteCharForward = view => deleteByChar(view, true);
|
21066 |
const deleteCharForward = view => deleteByChar(view, true, false);
|
| 20526 |
const deleteByGroup = (target, forward) => deleteBy(target, range => {
|
21067 |
const deleteByGroup = (target, forward) => deleteBy(target, range => {
|
| 20527 |
let pos = range.head, { state } = target, line = state.doc.lineAt(pos);
|
21068 |
let pos = range.head, { state } = target, line = state.doc.lineAt(pos);
|
| 20528 |
let categorize = state.charCategorizer(pos);
|
21069 |
let categorize = state.charCategorizer(pos);
|
| 20529 |
for (let cat = null;;) {
|
21070 |
for (let cat = null;;) {
|
| 20530 |
if (pos == (forward ? line.to : line.from)) {
|
21071 |
if (pos == (forward ? line.to : line.from)) {
|
| Línea 20700... |
Línea 21241... |
| 20700 |
from--;
|
21241 |
from--;
|
| 20701 |
else if (to < state.doc.length)
|
21242 |
else if (to < state.doc.length)
|
| 20702 |
to++;
|
21243 |
to++;
|
| 20703 |
return { from, to };
|
21244 |
return { from, to };
|
| 20704 |
}));
|
21245 |
}));
|
| 20705 |
let selection = updateSel(state.selection, range => view.moveVertically(range, true)).map(changes);
|
21246 |
let selection = updateSel(state.selection, range => {
|
| - |
|
21247 |
let dist = undefined;
|
| - |
|
21248 |
if (view.lineWrapping) {
|
| - |
|
21249 |
let block = view.lineBlockAt(range.head), pos = view.coordsAtPos(range.head, range.assoc || 1);
|
| - |
|
21250 |
if (pos)
|
| - |
|
21251 |
dist = (block.bottom + view.documentTop) - pos.bottom + view.defaultLineHeight / 2;
|
| - |
|
21252 |
}
|
| - |
|
21253 |
return view.moveVertically(range, true, dist);
|
| - |
|
21254 |
}).map(changes);
|
| 20706 |
view.dispatch({ changes, selection, scrollIntoView: true, userEvent: "delete.line" });
|
21255 |
view.dispatch({ changes, selection, scrollIntoView: true, userEvent: "delete.line" });
|
| 20707 |
return true;
|
21256 |
return true;
|
| 20708 |
};
|
21257 |
};
|
| 20709 |
function isBetweenBrackets(state, pos) {
|
21258 |
function isBetweenBrackets(state, pos) {
|
| 20710 |
if (/\(\)|\[\]|\{\}/.test(state.sliceDoc(pos - 1, pos + 1)))
|
21259 |
if (/\(\)|\[\]|\{\}/.test(state.sliceDoc(pos - 1, pos + 1)))
|
| Línea 20836... |
Línea 21385... |
| 20836 |
changes.push({ from: line.from + keep, to: line.from + space.length, insert: insert.slice(keep) });
|
21385 |
changes.push({ from: line.from + keep, to: line.from + space.length, insert: insert.slice(keep) });
|
| 20837 |
}), { userEvent: "delete.dedent" }));
|
21386 |
}), { userEvent: "delete.dedent" }));
|
| 20838 |
return true;
|
21387 |
return true;
|
| 20839 |
};
|
21388 |
};
|
| 20840 |
/**
|
21389 |
/**
|
| - |
|
21390 |
Enables or disables
|
| - |
|
21391 |
[tab-focus mode](https://codemirror.net/6/docs/ref/#view.EditorView.setTabFocusMode). While on, this
|
| - |
|
21392 |
prevents the editor's key bindings from capturing Tab or
|
| - |
|
21393 |
Shift-Tab, making it possible for the user to move focus out of
|
| - |
|
21394 |
the editor with the keyboard.
|
| - |
|
21395 |
*/
|
| - |
|
21396 |
const toggleTabFocusMode = view => {
|
| - |
|
21397 |
view.setTabFocusMode();
|
| - |
|
21398 |
return true;
|
| - |
|
21399 |
};
|
| - |
|
21400 |
/**
|
| 20841 |
Array of key bindings containing the Emacs-style bindings that are
|
21401 |
Array of key bindings containing the Emacs-style bindings that are
|
| 20842 |
available on macOS by default.
|
21402 |
available on macOS by default.
|
| Línea 20843... |
Línea 21403... |
| 20843 |
|
21403 |
|
| 20844 |
- Ctrl-b: [`cursorCharLeft`](https://codemirror.net/6/docs/ref/#commands.cursorCharLeft) ([`selectCharLeft`](https://codemirror.net/6/docs/ref/#commands.selectCharLeft) with Shift)
|
21404 |
- Ctrl-b: [`cursorCharLeft`](https://codemirror.net/6/docs/ref/#commands.cursorCharLeft) ([`selectCharLeft`](https://codemirror.net/6/docs/ref/#commands.selectCharLeft) with Shift)
|
| Línea 20893... |
Línea 21453... |
| 20893 |
- PageDown: [`cursorPageDown`](https://codemirror.net/6/docs/ref/#commands.cursorPageDown) ([`selectPageDown`](https://codemirror.net/6/docs/ref/#commands.selectPageDown) with Shift)
|
21453 |
- PageDown: [`cursorPageDown`](https://codemirror.net/6/docs/ref/#commands.cursorPageDown) ([`selectPageDown`](https://codemirror.net/6/docs/ref/#commands.selectPageDown) with Shift)
|
| 20894 |
- Home: [`cursorLineBoundaryBackward`](https://codemirror.net/6/docs/ref/#commands.cursorLineBoundaryBackward) ([`selectLineBoundaryBackward`](https://codemirror.net/6/docs/ref/#commands.selectLineBoundaryBackward) with Shift)
|
21454 |
- Home: [`cursorLineBoundaryBackward`](https://codemirror.net/6/docs/ref/#commands.cursorLineBoundaryBackward) ([`selectLineBoundaryBackward`](https://codemirror.net/6/docs/ref/#commands.selectLineBoundaryBackward) with Shift)
|
| 20895 |
- End: [`cursorLineBoundaryForward`](https://codemirror.net/6/docs/ref/#commands.cursorLineBoundaryForward) ([`selectLineBoundaryForward`](https://codemirror.net/6/docs/ref/#commands.selectLineBoundaryForward) with Shift)
|
21455 |
- End: [`cursorLineBoundaryForward`](https://codemirror.net/6/docs/ref/#commands.cursorLineBoundaryForward) ([`selectLineBoundaryForward`](https://codemirror.net/6/docs/ref/#commands.selectLineBoundaryForward) with Shift)
|
| 20896 |
- Ctrl-Home (Cmd-Home on macOS): [`cursorDocStart`](https://codemirror.net/6/docs/ref/#commands.cursorDocStart) ([`selectDocStart`](https://codemirror.net/6/docs/ref/#commands.selectDocStart) with Shift)
|
21456 |
- Ctrl-Home (Cmd-Home on macOS): [`cursorDocStart`](https://codemirror.net/6/docs/ref/#commands.cursorDocStart) ([`selectDocStart`](https://codemirror.net/6/docs/ref/#commands.selectDocStart) with Shift)
|
| 20897 |
- Ctrl-End (Cmd-Home on macOS): [`cursorDocEnd`](https://codemirror.net/6/docs/ref/#commands.cursorDocEnd) ([`selectDocEnd`](https://codemirror.net/6/docs/ref/#commands.selectDocEnd) with Shift)
|
21457 |
- Ctrl-End (Cmd-Home on macOS): [`cursorDocEnd`](https://codemirror.net/6/docs/ref/#commands.cursorDocEnd) ([`selectDocEnd`](https://codemirror.net/6/docs/ref/#commands.selectDocEnd) with Shift)
|
| 20898 |
- Enter: [`insertNewlineAndIndent`](https://codemirror.net/6/docs/ref/#commands.insertNewlineAndIndent)
|
21458 |
- Enter and Shift-Enter: [`insertNewlineAndIndent`](https://codemirror.net/6/docs/ref/#commands.insertNewlineAndIndent)
|
| 20899 |
- Ctrl-a (Cmd-a on macOS): [`selectAll`](https://codemirror.net/6/docs/ref/#commands.selectAll)
|
21459 |
- Ctrl-a (Cmd-a on macOS): [`selectAll`](https://codemirror.net/6/docs/ref/#commands.selectAll)
|
| 20900 |
- Backspace: [`deleteCharBackward`](https://codemirror.net/6/docs/ref/#commands.deleteCharBackward)
|
21460 |
- Backspace: [`deleteCharBackward`](https://codemirror.net/6/docs/ref/#commands.deleteCharBackward)
|
| 20901 |
- Delete: [`deleteCharForward`](https://codemirror.net/6/docs/ref/#commands.deleteCharForward)
|
21461 |
- Delete: [`deleteCharForward`](https://codemirror.net/6/docs/ref/#commands.deleteCharForward)
|
| 20902 |
- Ctrl-Backspace (Alt-Backspace on macOS): [`deleteGroupBackward`](https://codemirror.net/6/docs/ref/#commands.deleteGroupBackward)
|
21462 |
- Ctrl-Backspace (Alt-Backspace on macOS): [`deleteGroupBackward`](https://codemirror.net/6/docs/ref/#commands.deleteGroupBackward)
|
| 20903 |
- Ctrl-Delete (Alt-Delete on macOS): [`deleteGroupForward`](https://codemirror.net/6/docs/ref/#commands.deleteGroupForward)
|
21463 |
- Ctrl-Delete (Alt-Delete on macOS): [`deleteGroupForward`](https://codemirror.net/6/docs/ref/#commands.deleteGroupForward)
|
| Línea 20921... |
Línea 21481... |
| 20921 |
{ key: "PageDown", run: cursorPageDown, shift: selectPageDown },
|
21481 |
{ key: "PageDown", run: cursorPageDown, shift: selectPageDown },
|
| 20922 |
{ key: "Home", run: cursorLineBoundaryBackward, shift: selectLineBoundaryBackward, preventDefault: true },
|
21482 |
{ key: "Home", run: cursorLineBoundaryBackward, shift: selectLineBoundaryBackward, preventDefault: true },
|
| 20923 |
{ key: "Mod-Home", run: cursorDocStart, shift: selectDocStart },
|
21483 |
{ key: "Mod-Home", run: cursorDocStart, shift: selectDocStart },
|
| 20924 |
{ key: "End", run: cursorLineBoundaryForward, shift: selectLineBoundaryForward, preventDefault: true },
|
21484 |
{ key: "End", run: cursorLineBoundaryForward, shift: selectLineBoundaryForward, preventDefault: true },
|
| 20925 |
{ key: "Mod-End", run: cursorDocEnd, shift: selectDocEnd },
|
21485 |
{ key: "Mod-End", run: cursorDocEnd, shift: selectDocEnd },
|
| 20926 |
{ key: "Enter", run: insertNewlineAndIndent },
|
21486 |
{ key: "Enter", run: insertNewlineAndIndent, shift: insertNewlineAndIndent },
|
| 20927 |
{ key: "Mod-a", run: selectAll },
|
21487 |
{ key: "Mod-a", run: selectAll },
|
| 20928 |
{ key: "Backspace", run: deleteCharBackward, shift: deleteCharBackward },
|
21488 |
{ key: "Backspace", run: deleteCharBackward, shift: deleteCharBackward },
|
| 20929 |
{ key: "Delete", run: deleteCharForward },
|
21489 |
{ key: "Delete", run: deleteCharForward },
|
| 20930 |
{ key: "Mod-Backspace", mac: "Alt-Backspace", run: deleteGroupBackward },
|
21490 |
{ key: "Mod-Backspace", mac: "Alt-Backspace", run: deleteGroupBackward },
|
| 20931 |
{ key: "Mod-Delete", mac: "Alt-Delete", run: deleteGroupForward },
|
21491 |
{ key: "Mod-Delete", mac: "Alt-Delete", run: deleteGroupForward },
|
| Línea 20951... |
Línea 21511... |
| 20951 |
- Ctrl-Alt-\\ (Cmd-Alt-\\ on macOS): [`indentSelection`](https://codemirror.net/6/docs/ref/#commands.indentSelection)
|
21511 |
- Ctrl-Alt-\\ (Cmd-Alt-\\ on macOS): [`indentSelection`](https://codemirror.net/6/docs/ref/#commands.indentSelection)
|
| 20952 |
- Shift-Ctrl-k (Shift-Cmd-k on macOS): [`deleteLine`](https://codemirror.net/6/docs/ref/#commands.deleteLine)
|
21512 |
- Shift-Ctrl-k (Shift-Cmd-k on macOS): [`deleteLine`](https://codemirror.net/6/docs/ref/#commands.deleteLine)
|
| 20953 |
- Shift-Ctrl-\\ (Shift-Cmd-\\ on macOS): [`cursorMatchingBracket`](https://codemirror.net/6/docs/ref/#commands.cursorMatchingBracket)
|
21513 |
- Shift-Ctrl-\\ (Shift-Cmd-\\ on macOS): [`cursorMatchingBracket`](https://codemirror.net/6/docs/ref/#commands.cursorMatchingBracket)
|
| 20954 |
- Ctrl-/ (Cmd-/ on macOS): [`toggleComment`](https://codemirror.net/6/docs/ref/#commands.toggleComment).
|
21514 |
- Ctrl-/ (Cmd-/ on macOS): [`toggleComment`](https://codemirror.net/6/docs/ref/#commands.toggleComment).
|
| 20955 |
- Shift-Alt-a: [`toggleBlockComment`](https://codemirror.net/6/docs/ref/#commands.toggleBlockComment).
|
21515 |
- Shift-Alt-a: [`toggleBlockComment`](https://codemirror.net/6/docs/ref/#commands.toggleBlockComment).
|
| - |
|
21516 |
- Ctrl-m (Alt-Shift-m on macOS): [`toggleTabFocusMode`](https://codemirror.net/6/docs/ref/#commands.toggleTabFocusMode).
|
| 20956 |
*/
|
21517 |
*/
|
| 20957 |
const defaultKeymap = /*@__PURE__*/[
|
21518 |
const defaultKeymap = /*@__PURE__*/[
|
| 20958 |
{ key: "Alt-ArrowLeft", mac: "Ctrl-ArrowLeft", run: cursorSyntaxLeft, shift: selectSyntaxLeft },
|
21519 |
{ key: "Alt-ArrowLeft", mac: "Ctrl-ArrowLeft", run: cursorSyntaxLeft, shift: selectSyntaxLeft },
|
| 20959 |
{ key: "Alt-ArrowRight", mac: "Ctrl-ArrowRight", run: cursorSyntaxRight, shift: selectSyntaxRight },
|
21520 |
{ key: "Alt-ArrowRight", mac: "Ctrl-ArrowRight", run: cursorSyntaxRight, shift: selectSyntaxRight },
|
| 20960 |
{ key: "Alt-ArrowUp", run: moveLineUp },
|
21521 |
{ key: "Alt-ArrowUp", run: moveLineUp },
|
| Línea 20969... |
Línea 21530... |
| 20969 |
{ key: "Mod-]", run: indentMore },
|
21530 |
{ key: "Mod-]", run: indentMore },
|
| 20970 |
{ key: "Mod-Alt-\\", run: indentSelection },
|
21531 |
{ key: "Mod-Alt-\\", run: indentSelection },
|
| 20971 |
{ key: "Shift-Mod-k", run: deleteLine },
|
21532 |
{ key: "Shift-Mod-k", run: deleteLine },
|
| 20972 |
{ key: "Shift-Mod-\\", run: cursorMatchingBracket },
|
21533 |
{ key: "Shift-Mod-\\", run: cursorMatchingBracket },
|
| 20973 |
{ key: "Mod-/", run: toggleComment },
|
21534 |
{ key: "Mod-/", run: toggleComment },
|
| 20974 |
{ key: "Alt-A", run: toggleBlockComment }
|
21535 |
{ key: "Alt-A", run: toggleBlockComment },
|
| - |
|
21536 |
{ key: "Ctrl-m", mac: "Shift-Alt-m", run: toggleTabFocusMode },
|
| 20975 |
].concat(standardKeymap);
|
21537 |
].concat(standardKeymap);
|
| Línea 20976... |
Línea 21538... |
| 20976 |
|
21538 |
|
| 20977 |
function crelt() {
|
21539 |
function crelt() {
|
| 20978 |
var elt = arguments[0];
|
21540 |
var elt = arguments[0];
|
| Línea 21077... |
Línea 21639... |
| 21077 |
return this;
|
21639 |
return this;
|
| 21078 |
}
|
21640 |
}
|
| 21079 |
let str = fromCodePoint(next), start = this.bufferStart + this.bufferPos;
|
21641 |
let str = fromCodePoint(next), start = this.bufferStart + this.bufferPos;
|
| 21080 |
this.bufferPos += codePointSize(next);
|
21642 |
this.bufferPos += codePointSize(next);
|
| 21081 |
let norm = this.normalize(str);
|
21643 |
let norm = this.normalize(str);
|
| - |
|
21644 |
if (norm.length)
|
| 21082 |
for (let i = 0, pos = start;; i++) {
|
21645 |
for (let i = 0, pos = start;; i++) {
|
| 21083 |
let code = norm.charCodeAt(i);
|
21646 |
let code = norm.charCodeAt(i);
|
| 21084 |
let match = this.match(code, pos, this.bufferPos + this.bufferStart);
|
21647 |
let match = this.match(code, pos, this.bufferPos + this.bufferStart);
|
| 21085 |
if (i == norm.length - 1) {
|
21648 |
if (i == norm.length - 1) {
|
| 21086 |
if (match) {
|
21649 |
if (match) {
|
| 21087 |
this.value = match;
|
21650 |
this.value = match;
|
| 21088 |
return this;
|
21651 |
return this;
|
| - |
|
21652 |
}
|
| - |
|
21653 |
break;
|
| 21089 |
}
|
21654 |
}
|
| - |
|
21655 |
if (pos == start && i < str.length && str.charCodeAt(i) == code)
|
| 21090 |
break;
|
21656 |
pos++;
|
| 21091 |
}
|
21657 |
}
|
| 21092 |
if (pos == start && i < str.length && str.charCodeAt(i) == code)
|
- |
|
| 21093 |
pos++;
|
- |
|
| 21094 |
}
|
- |
|
| 21095 |
}
|
21658 |
}
|
| 21096 |
}
|
21659 |
}
|
| 21097 |
match(code, pos, end) {
|
21660 |
match(code, pos, end) {
|
| 21098 |
let match = null;
|
21661 |
let match = null;
|
| 21099 |
for (let i = 0; i < this.matches.length; i += 2) {
|
21662 |
for (let i = 0; i < this.matches.length; i += 2) {
|
| Línea 21323... |
Línea 21886... |
| 21323 |
},
|
21886 |
},
|
| 21324 |
onsubmit: (event) => {
|
21887 |
onsubmit: (event) => {
|
| 21325 |
event.preventDefault();
|
21888 |
event.preventDefault();
|
| 21326 |
go();
|
21889 |
go();
|
| 21327 |
}
|
21890 |
}
|
| 21328 |
}, crelt("label", view.state.phrase("Go to line"), ": ", input), " ", crelt("button", { class: "cm-button", type: "submit" }, view.state.phrase("go")));
|
21891 |
}, crelt("label", view.state.phrase("Go to line"), ": ", input), " ", crelt("button", { class: "cm-button", type: "submit" }, view.state.phrase("go")), crelt("button", {
|
| - |
|
21892 |
name: "close",
|
| - |
|
21893 |
onclick: () => {
|
| - |
|
21894 |
view.dispatch({ effects: dialogEffect.of(false) });
|
| - |
|
21895 |
view.focus();
|
| - |
|
21896 |
},
|
| - |
|
21897 |
"aria-label": view.state.phrase("close"),
|
| - |
|
21898 |
type: "button"
|
| - |
|
21899 |
}, ["×"]));
|
| 21329 |
function go() {
|
21900 |
function go() {
|
| 21330 |
let match = /^([+-])?(\d+)?(:\d+)?(%)?$/.exec(input.value);
|
21901 |
let match = /^([+-])?(\d+)?(:\d+)?(%)?$/.exec(input.value);
|
| 21331 |
if (!match)
|
21902 |
if (!match)
|
| 21332 |
return;
|
21903 |
return;
|
| 21333 |
let { state } = view, startLine = state.doc.lineAt(state.selection.main.head);
|
21904 |
let { state } = view, startLine = state.doc.lineAt(state.selection.main.head);
|
| Línea 21387... |
Línea 21958... |
| 21387 |
return true;
|
21958 |
return true;
|
| 21388 |
};
|
21959 |
};
|
| 21389 |
const baseTheme$1$1 = /*@__PURE__*/EditorView.baseTheme({
|
21960 |
const baseTheme$1$1 = /*@__PURE__*/EditorView.baseTheme({
|
| 21390 |
".cm-panel.cm-gotoLine": {
|
21961 |
".cm-panel.cm-gotoLine": {
|
| 21391 |
padding: "2px 6px 4px",
|
21962 |
padding: "2px 6px 4px",
|
| - |
|
21963 |
position: "relative",
|
| 21392 |
"& label": { fontSize: "80%" }
|
21964 |
"& label": { fontSize: "80%" },
|
| - |
|
21965 |
"& [name=close]": {
|
| - |
|
21966 |
position: "absolute",
|
| - |
|
21967 |
top: "0", bottom: "0",
|
| - |
|
21968 |
right: "4px",
|
| - |
|
21969 |
backgroundColor: "inherit",
|
| - |
|
21970 |
border: "none",
|
| - |
|
21971 |
font: "inherit",
|
| - |
|
21972 |
padding: "0"
|
| - |
|
21973 |
}
|
| 21393 |
}
|
21974 |
}
|
| 21394 |
});
|
21975 |
});
|
| Línea 21395... |
Línea 21976... |
| 21395 |
|
21976 |
|
| 21396 |
const defaultHighlightOptions = {
|
21977 |
const defaultHighlightOptions = {
|
| Línea 21414... |
Línea 21995... |
| 21414 |
`highlightWordAroundCursor` is enabled, the word at the cursor
|
21995 |
`highlightWordAroundCursor` is enabled, the word at the cursor
|
| 21415 |
itself will be highlighted with `"cm-selectionMatch-main"`.
|
21996 |
itself will be highlighted with `"cm-selectionMatch-main"`.
|
| 21416 |
*/
|
21997 |
*/
|
| 21417 |
function highlightSelectionMatches(options) {
|
21998 |
function highlightSelectionMatches(options) {
|
| 21418 |
let ext = [defaultTheme, matchHighlighter];
|
21999 |
let ext = [defaultTheme, matchHighlighter];
|
| 21419 |
if (options)
|
- |
|
| 21420 |
ext.push(highlightConfig.of(options));
|
- |
|
| 21421 |
return ext;
|
22000 |
return ext;
|
| 21422 |
}
|
22001 |
}
|
| 21423 |
const matchDeco = /*@__PURE__*/Decoration.mark({ class: "cm-selectionMatch" });
|
22002 |
const matchDeco = /*@__PURE__*/Decoration.mark({ class: "cm-selectionMatch" });
|
| 21424 |
const mainMatchDeco = /*@__PURE__*/Decoration.mark({ class: "cm-selectionMatch cm-selectionMatch-main" });
|
22003 |
const mainMatchDeco = /*@__PURE__*/Decoration.mark({ class: "cm-selectionMatch cm-selectionMatch-main" });
|
| 21425 |
// Whether the characters directly outside the given positions are non-word characters
|
22004 |
// Whether the characters directly outside the given positions are non-word characters
|
| Línea 21637... |
Línea 22216... |
| 21637 |
constructor(spec) {
|
22216 |
constructor(spec) {
|
| 21638 |
super(spec);
|
22217 |
super(spec);
|
| 21639 |
}
|
22218 |
}
|
| 21640 |
nextMatch(state, curFrom, curTo) {
|
22219 |
nextMatch(state, curFrom, curTo) {
|
| 21641 |
let cursor = stringCursor(this.spec, state, curTo, state.doc.length).nextOverlapping();
|
22220 |
let cursor = stringCursor(this.spec, state, curTo, state.doc.length).nextOverlapping();
|
| 21642 |
if (cursor.done)
|
22221 |
if (cursor.done) {
|
| - |
|
22222 |
let end = Math.min(state.doc.length, curFrom + this.spec.unquoted.length);
|
| 21643 |
cursor = stringCursor(this.spec, state, 0, curFrom).nextOverlapping();
|
22223 |
cursor = stringCursor(this.spec, state, 0, end).nextOverlapping();
|
| - |
|
22224 |
}
|
| 21644 |
return cursor.done ? null : cursor.value;
|
22225 |
return cursor.done || cursor.value.from == curFrom && cursor.value.to == curTo ? null : cursor.value;
|
| 21645 |
}
|
22226 |
}
|
| 21646 |
// Searching in reverse is, rather than implementing an inverted search
|
22227 |
// Searching in reverse is, rather than implementing an inverted search
|
| 21647 |
// cursor, done by scanning chunk after chunk forward.
|
22228 |
// cursor, done by scanning chunk after chunk forward.
|
| 21648 |
prevMatchInRange(state, from, to) {
|
22229 |
prevMatchInRange(state, from, to) {
|
| 21649 |
for (let pos = to;;) {
|
22230 |
for (let pos = to;;) {
|
| Línea 21657... |
Línea 22238... |
| 21657 |
return null;
|
22238 |
return null;
|
| 21658 |
pos -= 10000 /* FindPrev.ChunkSize */;
|
22239 |
pos -= 10000 /* FindPrev.ChunkSize */;
|
| 21659 |
}
|
22240 |
}
|
| 21660 |
}
|
22241 |
}
|
| 21661 |
prevMatch(state, curFrom, curTo) {
|
22242 |
prevMatch(state, curFrom, curTo) {
|
| 21662 |
return this.prevMatchInRange(state, 0, curFrom) ||
|
22243 |
let found = this.prevMatchInRange(state, 0, curFrom);
|
| - |
|
22244 |
if (!found)
|
| 21663 |
this.prevMatchInRange(state, curTo, state.doc.length);
|
22245 |
found = this.prevMatchInRange(state, Math.max(0, curTo - this.spec.unquoted.length), state.doc.length);
|
| - |
|
22246 |
return found && (found.from != curFrom || found.to != curTo) ? found : null;
|
| 21664 |
}
|
22247 |
}
|
| 21665 |
getReplacement(_result) { return this.spec.unquote(this.spec.replace); }
|
22248 |
getReplacement(_result) { return this.spec.unquote(this.spec.replace); }
|
| 21666 |
matchAll(state, limit) {
|
22249 |
matchAll(state, limit) {
|
| 21667 |
let cursor = stringCursor(this.spec, state, 0, state.doc.length), ranges = [];
|
22250 |
let cursor = stringCursor(this.spec, state, 0, state.doc.length), ranges = [];
|
| 21668 |
while (!cursor.next().done) {
|
22251 |
while (!cursor.next().done) {
|
| Línea 21719... |
Línea 22302... |
| 21719 |
prevMatch(state, curFrom, curTo) {
|
22302 |
prevMatch(state, curFrom, curTo) {
|
| 21720 |
return this.prevMatchInRange(state, 0, curFrom) ||
|
22303 |
return this.prevMatchInRange(state, 0, curFrom) ||
|
| 21721 |
this.prevMatchInRange(state, curTo, state.doc.length);
|
22304 |
this.prevMatchInRange(state, curTo, state.doc.length);
|
| 21722 |
}
|
22305 |
}
|
| 21723 |
getReplacement(result) {
|
22306 |
getReplacement(result) {
|
| 21724 |
return this.spec.unquote(this.spec.replace).replace(/\$([$&\d+])/g, (m, i) => i == "$" ? "$"
|
22307 |
return this.spec.unquote(this.spec.replace).replace(/\$([$&]|\d+)/g, (m, i) => {
|
| - |
|
22308 |
if (i == "&")
|
| 21725 |
: i == "&" ? result.match[0]
|
22309 |
return result.match[0];
|
| - |
|
22310 |
if (i == "$")
|
| - |
|
22311 |
return "$";
|
| - |
|
22312 |
for (let l = i.length; l > 0; l--) {
|
| - |
|
22313 |
let n = +i.slice(0, l);
|
| 21726 |
: i != "0" && +i < result.match.length ? result.match[i]
|
22314 |
if (n > 0 && n < result.match.length)
|
| - |
|
22315 |
return result.match[n] + i.slice(l);
|
| - |
|
22316 |
}
|
| 21727 |
: m);
|
22317 |
return m;
|
| - |
|
22318 |
});
|
| 21728 |
}
|
22319 |
}
|
| 21729 |
matchAll(state, limit) {
|
22320 |
matchAll(state, limit) {
|
| 21730 |
let cursor = regexpCursor(this.spec, state, 0, state.doc.length), ranges = [];
|
22321 |
let cursor = regexpCursor(this.spec, state, 0, state.doc.length), ranges = [];
|
| 21731 |
while (!cursor.next().done) {
|
22322 |
while (!cursor.next().done) {
|
| 21732 |
if (ranges.length >= limit)
|
22323 |
if (ranges.length >= limit)
|
| Línea 21888... |
Línea 22479... |
| 21888 |
*/
|
22479 |
*/
|
| 21889 |
const replaceNext = /*@__PURE__*/searchCommand((view, { query }) => {
|
22480 |
const replaceNext = /*@__PURE__*/searchCommand((view, { query }) => {
|
| 21890 |
let { state } = view, { from, to } = state.selection.main;
|
22481 |
let { state } = view, { from, to } = state.selection.main;
|
| 21891 |
if (state.readOnly)
|
22482 |
if (state.readOnly)
|
| 21892 |
return false;
|
22483 |
return false;
|
| 21893 |
let next = query.nextMatch(state, from, from);
|
22484 |
let match = query.nextMatch(state, from, from);
|
| 21894 |
if (!next)
|
22485 |
if (!match)
|
| 21895 |
return false;
|
22486 |
return false;
|
| - |
|
22487 |
let next = match;
|
| 21896 |
let changes = [], selection, replacement;
|
22488 |
let changes = [], selection, replacement;
|
| 21897 |
let effects = [];
|
22489 |
let effects = [];
|
| 21898 |
if (next.from == from && next.to == to) {
|
22490 |
if (next.from == from && next.to == to) {
|
| 21899 |
replacement = state.toText(query.getReplacement(next));
|
22491 |
replacement = state.toText(query.getReplacement(next));
|
| 21900 |
changes.push({ from: next.from, to: next.to, insert: replacement });
|
22492 |
changes.push({ from: next.from, to: next.to, insert: replacement });
|
| 21901 |
next = query.nextMatch(state, next.from, next.to);
|
22493 |
next = query.nextMatch(state, next.from, next.to);
|
| 21902 |
effects.push(EditorView.announce.of(state.phrase("replaced match on line $", state.doc.lineAt(from).number) + "."));
|
22494 |
effects.push(EditorView.announce.of(state.phrase("replaced match on line $", state.doc.lineAt(from).number) + "."));
|
| 21903 |
}
|
22495 |
}
|
| 21904 |
if (next) {
|
22496 |
if (next) {
|
| 21905 |
let off = changes.length == 0 || changes[0].from >= next.to ? 0 : next.to - next.from - replacement.length;
|
22497 |
let off = changes.length == 0 || changes[0].from >= match.to ? 0 : match.to - match.from - replacement.length;
|
| 21906 |
selection = EditorSelection.single(next.from - off, next.to - off);
|
22498 |
selection = EditorSelection.single(next.from - off, next.to - off);
|
| 21907 |
effects.push(announceMatch(view, next));
|
22499 |
effects.push(announceMatch(view, next));
|
| 21908 |
effects.push(state.facet(searchConfigFacet).scrollToMatch(selection.main, view));
|
22500 |
effects.push(state.facet(searchConfigFacet).scrollToMatch(selection.main, view));
|
| 21909 |
}
|
22501 |
}
|
| 21910 |
view.dispatch({
|
22502 |
view.dispatch({
|
| Línea 22215... |
Línea 22807... |
| 22215 |
Indicates whether completion was activated explicitly, or
|
22807 |
Indicates whether completion was activated explicitly, or
|
| 22216 |
implicitly by typing. The usual way to respond to this is to
|
22808 |
implicitly by typing. The usual way to respond to this is to
|
| 22217 |
only return completions when either there is part of a
|
22809 |
only return completions when either there is part of a
|
| 22218 |
completable entity before the cursor, or `explicit` is true.
|
22810 |
completable entity before the cursor, or `explicit` is true.
|
| 22219 |
*/
|
22811 |
*/
|
| 22220 |
explicit) {
|
22812 |
explicit,
|
| - |
|
22813 |
/**
|
| - |
|
22814 |
The editor view. May be undefined if the context was created
|
| - |
|
22815 |
in a situation where there is no such view available, such as
|
| - |
|
22816 |
in synchronous updates via
|
| - |
|
22817 |
[`CompletionResult.update`](https://codemirror.net/6/docs/ref/#autocomplete.CompletionResult.update)
|
| - |
|
22818 |
or when called by test code.
|
| - |
|
22819 |
*/
|
| - |
|
22820 |
view) {
|
| 22221 |
this.state = state;
|
22821 |
this.state = state;
|
| 22222 |
this.pos = pos;
|
22822 |
this.pos = pos;
|
| 22223 |
this.explicit = explicit;
|
22823 |
this.explicit = explicit;
|
| - |
|
22824 |
this.view = view;
|
| 22224 |
/**
|
22825 |
/**
|
| 22225 |
@internal
|
22826 |
@internal
|
| 22226 |
*/
|
22827 |
*/
|
| 22227 |
this.abortListeners = [];
|
22828 |
this.abortListeners = [];
|
| - |
|
22829 |
/**
|
| - |
|
22830 |
@internal
|
| - |
|
22831 |
*/
|
| - |
|
22832 |
this.abortOnDocChange = false;
|
| 22228 |
}
|
22833 |
}
|
| 22229 |
/**
|
22834 |
/**
|
| 22230 |
Get the extent, content, and (if there is a token) type of the
|
22835 |
Get the extent, content, and (if there is a token) type of the
|
| 22231 |
token before `this.pos`.
|
22836 |
token before `this.pos`.
|
| 22232 |
*/
|
22837 |
*/
|
| Línea 22256... |
Línea 22861... |
| 22256 |
get aborted() { return this.abortListeners == null; }
|
22861 |
get aborted() { return this.abortListeners == null; }
|
| 22257 |
/**
|
22862 |
/**
|
| 22258 |
Allows you to register abort handlers, which will be called when
|
22863 |
Allows you to register abort handlers, which will be called when
|
| 22259 |
the query is
|
22864 |
the query is
|
| 22260 |
[aborted](https://codemirror.net/6/docs/ref/#autocomplete.CompletionContext.aborted).
|
22865 |
[aborted](https://codemirror.net/6/docs/ref/#autocomplete.CompletionContext.aborted).
|
| - |
|
22866 |
|
| - |
|
22867 |
By default, running queries will not be aborted for regular
|
| - |
|
22868 |
typing or backspacing, on the assumption that they are likely to
|
| - |
|
22869 |
return a result with a
|
| - |
|
22870 |
[`validFor`](https://codemirror.net/6/docs/ref/#autocomplete.CompletionResult.validFor) field that
|
| - |
|
22871 |
allows the result to be used after all. Passing `onDocChange:
|
| - |
|
22872 |
true` will cause this query to be aborted for any document
|
| - |
|
22873 |
change.
|
| 22261 |
*/
|
22874 |
*/
|
| 22262 |
addEventListener(type, listener) {
|
22875 |
addEventListener(type, listener, options) {
|
| 22263 |
if (type == "abort" && this.abortListeners)
|
22876 |
if (type == "abort" && this.abortListeners) {
|
| 22264 |
this.abortListeners.push(listener);
|
22877 |
this.abortListeners.push(listener);
|
| - |
|
22878 |
if (options && options.onDocChange)
|
| - |
|
22879 |
this.abortOnDocChange = true;
|
| - |
|
22880 |
}
|
| 22265 |
}
|
22881 |
}
|
| 22266 |
}
|
22882 |
}
|
| 22267 |
function toSet(chars) {
|
22883 |
function toSet(chars) {
|
| 22268 |
let flat = Object.keys(chars).join("");
|
22884 |
let flat = Object.keys(chars).join("");
|
| 22269 |
let words = /\w/.test(flat);
|
22885 |
let words = /\w/.test(flat);
|
| Línea 22341... |
Línea 22957... |
| 22341 |
let { main } = state.selection, fromOff = from - main.from, toOff = to - main.from;
|
22957 |
let { main } = state.selection, fromOff = from - main.from, toOff = to - main.from;
|
| 22342 |
return Object.assign(Object.assign({}, state.changeByRange(range => {
|
22958 |
return Object.assign(Object.assign({}, state.changeByRange(range => {
|
| 22343 |
if (range != main && from != to &&
|
22959 |
if (range != main && from != to &&
|
| 22344 |
state.sliceDoc(range.from + fromOff, range.from + toOff) != state.sliceDoc(from, to))
|
22960 |
state.sliceDoc(range.from + fromOff, range.from + toOff) != state.sliceDoc(from, to))
|
| 22345 |
return { range };
|
22961 |
return { range };
|
| - |
|
22962 |
let lines = state.toText(text);
|
| 22346 |
return {
|
22963 |
return {
|
| 22347 |
changes: { from: range.from + fromOff, to: to == main.from ? range.to : range.from + toOff, insert: text },
|
22964 |
changes: { from: range.from + fromOff, to: to == main.from ? range.to : range.from + toOff, insert: lines },
|
| 22348 |
range: EditorSelection.cursor(range.from + fromOff + text.length)
|
22965 |
range: EditorSelection.cursor(range.from + fromOff + lines.length)
|
| 22349 |
};
|
22966 |
};
|
| 22350 |
})), { scrollIntoView: true, userEvent: "input.complete" });
|
22967 |
})), { scrollIntoView: true, userEvent: "input.complete" });
|
| 22351 |
}
|
22968 |
}
|
| 22352 |
const SourceCache = /*@__PURE__*/new WeakMap();
|
22969 |
const SourceCache = /*@__PURE__*/new WeakMap();
|
| 22353 |
function asSource(source) {
|
22970 |
function asSource(source) {
|
| Línea 22520... |
Línea 23137... |
| 22520 |
|
23137 |
|
| 22521 |
const completionConfig = /*@__PURE__*/Facet.define({
|
23138 |
const completionConfig = /*@__PURE__*/Facet.define({
|
| 22522 |
combine(configs) {
|
23139 |
combine(configs) {
|
| 22523 |
return combineConfig(configs, {
|
23140 |
return combineConfig(configs, {
|
| - |
|
23141 |
activateOnTyping: true,
|
| 22524 |
activateOnTyping: true,
|
23142 |
activateOnCompletion: () => false,
|
| 22525 |
activateOnTypingDelay: 100,
|
23143 |
activateOnTypingDelay: 100,
|
| 22526 |
selectOnOpen: true,
|
23144 |
selectOnOpen: true,
|
| 22527 |
override: null,
|
23145 |
override: null,
|
| 22528 |
closeOnBlur: true,
|
23146 |
closeOnBlur: true,
|
| Línea 22798... |
Línea 23416... |
| 22798 |
let listRect = this.dom.getBoundingClientRect();
|
23416 |
let listRect = this.dom.getBoundingClientRect();
|
| 22799 |
let infoRect = this.info.getBoundingClientRect();
|
23417 |
let infoRect = this.info.getBoundingClientRect();
|
| 22800 |
let selRect = sel.getBoundingClientRect();
|
23418 |
let selRect = sel.getBoundingClientRect();
|
| 22801 |
let space = this.space;
|
23419 |
let space = this.space;
|
| 22802 |
if (!space) {
|
23420 |
if (!space) {
|
| 22803 |
let win = this.dom.ownerDocument.defaultView || window;
|
23421 |
let docElt = this.dom.ownerDocument.documentElement;
|
| 22804 |
space = { left: 0, top: 0, right: win.innerWidth, bottom: win.innerHeight };
|
23422 |
space = { left: 0, top: 0, right: docElt.clientWidth, bottom: docElt.clientHeight };
|
| 22805 |
}
|
23423 |
}
|
| 22806 |
if (selRect.top > Math.min(space.bottom, listRect.bottom) - 10 ||
|
23424 |
if (selRect.top > Math.min(space.bottom, listRect.bottom) - 10 ||
|
| 22807 |
selRect.bottom < Math.max(space.top, listRect.top) + 10)
|
23425 |
selRect.bottom < Math.max(space.top, listRect.top) + 10)
|
| 22808 |
return null;
|
23426 |
return null;
|
| 22809 |
return this.view.state.facet(completionConfig).positionInfo(this.view, listRect, selRect, infoRect, space, this.dom);
|
23427 |
return this.view.state.facet(completionConfig).positionInfo(this.view, listRect, selRect, infoRect, space, this.dom);
|
| Línea 22824... |
Línea 23442... |
| 22824 |
const ul = document.createElement("ul");
|
23442 |
const ul = document.createElement("ul");
|
| 22825 |
ul.id = id;
|
23443 |
ul.id = id;
|
| 22826 |
ul.setAttribute("role", "listbox");
|
23444 |
ul.setAttribute("role", "listbox");
|
| 22827 |
ul.setAttribute("aria-expanded", "true");
|
23445 |
ul.setAttribute("aria-expanded", "true");
|
| 22828 |
ul.setAttribute("aria-label", this.view.state.phrase("Completions"));
|
23446 |
ul.setAttribute("aria-label", this.view.state.phrase("Completions"));
|
| - |
|
23447 |
ul.addEventListener("mousedown", e => {
|
| - |
|
23448 |
// Prevent focus change when clicking the scrollbar
|
| - |
|
23449 |
if (e.target == ul)
|
| - |
|
23450 |
e.preventDefault();
|
| - |
|
23451 |
});
|
| 22829 |
let curSection = null;
|
23452 |
let curSection = null;
|
| 22830 |
for (let i = range.from; i < range.to; i++) {
|
23453 |
for (let i = range.from; i < range.to; i++) {
|
| 22831 |
let { completion, match } = options[i], { section } = completion;
|
23454 |
let { completion, match } = options[i], { section } = completion;
|
| 22832 |
if (section) {
|
23455 |
if (section) {
|
| 22833 |
let name = typeof section == "string" ? section : section.name;
|
23456 |
let name = typeof section == "string" ? section : section.name;
|
| Línea 22962... |
Línea 23585... |
| 22962 |
}
|
23585 |
}
|
| 22963 |
setSelected(selected, id) {
|
23586 |
setSelected(selected, id) {
|
| 22964 |
return selected == this.selected || selected >= this.options.length ? this
|
23587 |
return selected == this.selected || selected >= this.options.length ? this
|
| 22965 |
: new CompletionDialog(this.options, makeAttrs(id, selected), this.tooltip, this.timestamp, selected, this.disabled);
|
23588 |
: new CompletionDialog(this.options, makeAttrs(id, selected), this.tooltip, this.timestamp, selected, this.disabled);
|
| 22966 |
}
|
23589 |
}
|
| 22967 |
static build(active, state, id, prev, conf) {
|
23590 |
static build(active, state, id, prev, conf, didSetActive) {
|
| - |
|
23591 |
if (prev && !didSetActive && active.some(s => s.isPending))
|
| - |
|
23592 |
return prev.setDisabled();
|
| 22968 |
let options = sortOptions(active, state);
|
23593 |
let options = sortOptions(active, state);
|
| 22969 |
if (!options.length) {
|
23594 |
if (!options.length)
|
| 22970 |
return prev && active.some(a => a.state == 1 /* State.Pending */) ?
|
23595 |
return prev && active.some(a => a.isPending) ? prev.setDisabled() : null;
|
| 22971 |
new CompletionDialog(prev.options, prev.attrs, prev.tooltip, prev.timestamp, prev.selected, true) : null;
|
- |
|
| 22972 |
}
|
- |
|
| 22973 |
let selected = state.facet(completionConfig).selectOnOpen ? 0 : -1;
|
23596 |
let selected = state.facet(completionConfig).selectOnOpen ? 0 : -1;
|
| 22974 |
if (prev && prev.selected != selected && prev.selected != -1) {
|
23597 |
if (prev && prev.selected != selected && prev.selected != -1) {
|
| 22975 |
let selectedValue = prev.options[prev.selected].completion;
|
23598 |
let selectedValue = prev.options[prev.selected].completion;
|
| 22976 |
for (let i = 0; i < options.length; i++)
|
23599 |
for (let i = 0; i < options.length; i++)
|
| 22977 |
if (options[i].completion == selectedValue) {
|
23600 |
if (options[i].completion == selectedValue) {
|
| Línea 22986... |
Línea 23609... |
| 22986 |
}, prev ? prev.timestamp : Date.now(), selected, false);
|
23609 |
}, prev ? prev.timestamp : Date.now(), selected, false);
|
| 22987 |
}
|
23610 |
}
|
| 22988 |
map(changes) {
|
23611 |
map(changes) {
|
| 22989 |
return new CompletionDialog(this.options, this.attrs, Object.assign(Object.assign({}, this.tooltip), { pos: changes.mapPos(this.tooltip.pos) }), this.timestamp, this.selected, this.disabled);
|
23612 |
return new CompletionDialog(this.options, this.attrs, Object.assign(Object.assign({}, this.tooltip), { pos: changes.mapPos(this.tooltip.pos) }), this.timestamp, this.selected, this.disabled);
|
| 22990 |
}
|
23613 |
}
|
| - |
|
23614 |
setDisabled() {
|
| - |
|
23615 |
return new CompletionDialog(this.options, this.attrs, this.tooltip, this.timestamp, this.selected, true);
|
| - |
|
23616 |
}
|
| 22991 |
}
|
23617 |
}
|
| 22992 |
class CompletionState {
|
23618 |
class CompletionState {
|
| 22993 |
constructor(active, id, open) {
|
23619 |
constructor(active, id, open) {
|
| 22994 |
this.active = active;
|
23620 |
this.active = active;
|
| 22995 |
this.id = id;
|
23621 |
this.id = id;
|
| Línea 23007... |
Línea 23633... |
| 23007 |
new ActiveSource(source, this.active.some(a => a.state != 0 /* State.Inactive */) ? 1 /* State.Pending */ : 0 /* State.Inactive */);
|
23633 |
new ActiveSource(source, this.active.some(a => a.state != 0 /* State.Inactive */) ? 1 /* State.Pending */ : 0 /* State.Inactive */);
|
| 23008 |
return value.update(tr, conf);
|
23634 |
return value.update(tr, conf);
|
| 23009 |
});
|
23635 |
});
|
| 23010 |
if (active.length == this.active.length && active.every((a, i) => a == this.active[i]))
|
23636 |
if (active.length == this.active.length && active.every((a, i) => a == this.active[i]))
|
| 23011 |
active = this.active;
|
23637 |
active = this.active;
|
| 23012 |
let open = this.open;
|
23638 |
let open = this.open, didSet = tr.effects.some(e => e.is(setActiveEffect));
|
| 23013 |
if (open && tr.docChanged)
|
23639 |
if (open && tr.docChanged)
|
| 23014 |
open = open.map(tr.changes);
|
23640 |
open = open.map(tr.changes);
|
| 23015 |
if (tr.selection || active.some(a => a.hasResult() && tr.changes.touchesRange(a.from, a.to)) ||
|
23641 |
if (tr.selection || active.some(a => a.hasResult() && tr.changes.touchesRange(a.from, a.to)) ||
|
| 23016 |
!sameResults(active, this.active))
|
23642 |
!sameResults(active, this.active) || didSet)
|
| 23017 |
open = CompletionDialog.build(active, state, this.id, open, conf);
|
23643 |
open = CompletionDialog.build(active, state, this.id, open, conf, didSet);
|
| 23018 |
else if (open && open.disabled && !active.some(a => a.state == 1 /* State.Pending */))
|
23644 |
else if (open && open.disabled && !active.some(a => a.isPending))
|
| 23019 |
open = null;
|
23645 |
open = null;
|
| 23020 |
if (!open && active.every(a => a.state != 1 /* State.Pending */) && active.some(a => a.hasResult()))
|
23646 |
if (!open && active.every(a => !a.isPending) && active.some(a => a.hasResult()))
|
| 23021 |
active = active.map(a => a.hasResult() ? new ActiveSource(a.source, 0 /* State.Inactive */) : a);
|
23647 |
active = active.map(a => a.hasResult() ? new ActiveSource(a.source, 0 /* State.Inactive */) : a);
|
| 23022 |
for (let effect of tr.effects)
|
23648 |
for (let effect of tr.effects)
|
| 23023 |
if (effect.is(setSelectedEffect))
|
23649 |
if (effect.is(setSelectedEffect))
|
| 23024 |
open = open && open.setSelected(effect.value, this.id);
|
23650 |
open = open && open.setSelected(effect.value, this.id);
|
| 23025 |
return active == this.active && open == this.open ? this : new CompletionState(active, this.id, open);
|
23651 |
return active == this.active && open == this.open ? this : new CompletionState(active, this.id, open);
|
| 23026 |
}
|
23652 |
}
|
| 23027 |
get tooltip() { return this.open ? this.open.tooltip : null; }
|
23653 |
get tooltip() { return this.open ? this.open.tooltip : null; }
|
| 23028 |
get attrs() { return this.open ? this.open.attrs : baseAttrs; }
|
23654 |
get attrs() { return this.open ? this.open.attrs : this.active.length ? baseAttrs : noAttrs; }
|
| 23029 |
}
|
23655 |
}
|
| 23030 |
function sameResults(a, b) {
|
23656 |
function sameResults(a, b) {
|
| 23031 |
if (a == b)
|
23657 |
if (a == b)
|
| 23032 |
return true;
|
23658 |
return true;
|
| 23033 |
for (let iA = 0, iB = 0;;) {
|
23659 |
for (let iA = 0, iB = 0;;) {
|
| 23034 |
while (iA < a.length && !a[iA].hasResult)
|
23660 |
while (iA < a.length && !a[iA].hasResult())
|
| 23035 |
iA++;
|
23661 |
iA++;
|
| 23036 |
while (iB < b.length && !b[iB].hasResult)
|
23662 |
while (iB < b.length && !b[iB].hasResult())
|
| 23037 |
iB++;
|
23663 |
iB++;
|
| 23038 |
let endA = iA == a.length, endB = iB == b.length;
|
23664 |
let endA = iA == a.length, endB = iB == b.length;
|
| 23039 |
if (endA || endB)
|
23665 |
if (endA || endB)
|
| 23040 |
return endA == endB;
|
23666 |
return endA == endB;
|
| 23041 |
if (a[iA++].result != b[iB++].result)
|
23667 |
if (a[iA++].result != b[iB++].result)
|
| Línea 23043... |
Línea 23669... |
| 23043 |
}
|
23669 |
}
|
| 23044 |
}
|
23670 |
}
|
| 23045 |
const baseAttrs = {
|
23671 |
const baseAttrs = {
|
| 23046 |
"aria-autocomplete": "list"
|
23672 |
"aria-autocomplete": "list"
|
| 23047 |
};
|
23673 |
};
|
| - |
|
23674 |
const noAttrs = {};
|
| 23048 |
function makeAttrs(id, selected) {
|
23675 |
function makeAttrs(id, selected) {
|
| 23049 |
let result = {
|
23676 |
let result = {
|
| 23050 |
"aria-autocomplete": "list",
|
23677 |
"aria-autocomplete": "list",
|
| 23051 |
"aria-haspopup": "listbox",
|
23678 |
"aria-haspopup": "listbox",
|
| 23052 |
"aria-controls": id
|
23679 |
"aria-controls": id
|
| Línea 23054... |
Línea 23681... |
| 23054 |
if (selected > -1)
|
23681 |
if (selected > -1)
|
| 23055 |
result["aria-activedescendant"] = id + "-" + selected;
|
23682 |
result["aria-activedescendant"] = id + "-" + selected;
|
| 23056 |
return result;
|
23683 |
return result;
|
| 23057 |
}
|
23684 |
}
|
| 23058 |
const none = [];
|
23685 |
const none = [];
|
| 23059 |
function getUserEvent(tr) {
|
23686 |
function getUpdateType(tr, conf) {
|
| - |
|
23687 |
if (tr.isUserEvent("input.complete")) {
|
| - |
|
23688 |
let completion = tr.annotation(pickedCompletion);
|
| - |
|
23689 |
if (completion && conf.activateOnCompletion(completion))
|
| - |
|
23690 |
return 4 /* UpdateType.Activate */ | 8 /* UpdateType.Reset */;
|
| - |
|
23691 |
}
|
| - |
|
23692 |
let typing = tr.isUserEvent("input.type");
|
| - |
|
23693 |
return typing && conf.activateOnTyping ? 4 /* UpdateType.Activate */ | 1 /* UpdateType.Typing */
|
| - |
|
23694 |
: typing ? 1 /* UpdateType.Typing */
|
| 23060 |
return tr.isUserEvent("input.type") ? "input" : tr.isUserEvent("delete.backward") ? "delete" : null;
|
23695 |
: tr.isUserEvent("delete.backward") ? 2 /* UpdateType.Backspacing */
|
| - |
|
23696 |
: tr.selection ? 8 /* UpdateType.Reset */
|
| - |
|
23697 |
: tr.docChanged ? 16 /* UpdateType.ResetIfTouching */ : 0 /* UpdateType.None */;
|
| 23061 |
}
|
23698 |
}
|
| 23062 |
class ActiveSource {
|
23699 |
class ActiveSource {
|
| 23063 |
constructor(source, state, explicitPos = -1) {
|
23700 |
constructor(source, state, explicit = false) {
|
| 23064 |
this.source = source;
|
23701 |
this.source = source;
|
| 23065 |
this.state = state;
|
23702 |
this.state = state;
|
| 23066 |
this.explicitPos = explicitPos;
|
23703 |
this.explicit = explicit;
|
| 23067 |
}
|
23704 |
}
|
| 23068 |
hasResult() { return false; }
|
23705 |
hasResult() { return false; }
|
| - |
|
23706 |
get isPending() { return this.state == 1 /* State.Pending */; }
|
| 23069 |
update(tr, conf) {
|
23707 |
update(tr, conf) {
|
| 23070 |
let event = getUserEvent(tr), value = this;
|
23708 |
let type = getUpdateType(tr, conf), value = this;
|
| 23071 |
if (event)
|
- |
|
| 23072 |
value = value.handleUserEvent(tr, event, conf);
|
- |
|
| 23073 |
else if (tr.docChanged)
|
- |
|
| 23074 |
value = value.handleChange(tr);
|
- |
|
| 23075 |
else if (tr.selection && value.state != 0 /* State.Inactive */)
|
23709 |
if ((type & 8 /* UpdateType.Reset */) || (type & 16 /* UpdateType.ResetIfTouching */) && this.touches(tr))
|
| 23076 |
value = new ActiveSource(value.source, 0 /* State.Inactive */);
|
23710 |
value = new ActiveSource(value.source, 0 /* State.Inactive */);
|
| - |
|
23711 |
if ((type & 4 /* UpdateType.Activate */) && value.state == 0 /* State.Inactive */)
|
| - |
|
23712 |
value = new ActiveSource(this.source, 1 /* State.Pending */);
|
| - |
|
23713 |
value = value.updateFor(tr, type);
|
| 23077 |
for (let effect of tr.effects) {
|
23714 |
for (let effect of tr.effects) {
|
| 23078 |
if (effect.is(startCompletionEffect))
|
23715 |
if (effect.is(startCompletionEffect))
|
| 23079 |
value = new ActiveSource(value.source, 1 /* State.Pending */, effect.value ? cur(tr.state) : -1);
|
23716 |
value = new ActiveSource(value.source, 1 /* State.Pending */, effect.value);
|
| 23080 |
else if (effect.is(closeCompletionEffect))
|
23717 |
else if (effect.is(closeCompletionEffect))
|
| 23081 |
value = new ActiveSource(value.source, 0 /* State.Inactive */);
|
23718 |
value = new ActiveSource(value.source, 0 /* State.Inactive */);
|
| 23082 |
else if (effect.is(setActiveEffect))
|
23719 |
else if (effect.is(setActiveEffect))
|
| 23083 |
for (let active of effect.value)
|
23720 |
for (let active of effect.value)
|
| 23084 |
if (active.source == value.source)
|
23721 |
if (active.source == value.source)
|
| 23085 |
value = active;
|
23722 |
value = active;
|
| 23086 |
}
|
23723 |
}
|
| 23087 |
return value;
|
23724 |
return value;
|
| 23088 |
}
|
23725 |
}
|
| 23089 |
handleUserEvent(tr, type, conf) {
|
23726 |
updateFor(tr, type) { return this.map(tr.changes); }
|
| 23090 |
return type == "delete" || !conf.activateOnTyping ? this.map(tr.changes) : new ActiveSource(this.source, 1 /* State.Pending */);
|
- |
|
| 23091 |
}
|
- |
|
| 23092 |
handleChange(tr) {
|
23727 |
map(changes) { return this; }
|
| 23093 |
return tr.changes.touchesRange(cur(tr.startState)) ? new ActiveSource(this.source, 0 /* State.Inactive */) : this.map(tr.changes);
|
- |
|
| 23094 |
}
|
- |
|
| 23095 |
map(changes) {
|
23728 |
touches(tr) {
|
| 23096 |
return changes.empty || this.explicitPos < 0 ? this : new ActiveSource(this.source, this.state, changes.mapPos(this.explicitPos));
|
23729 |
return tr.changes.touchesRange(cur(tr.state));
|
| 23097 |
}
|
23730 |
}
|
| 23098 |
}
|
23731 |
}
|
| 23099 |
class ActiveResult extends ActiveSource {
|
23732 |
class ActiveResult extends ActiveSource {
|
| 23100 |
constructor(source, explicitPos, result, from, to) {
|
23733 |
constructor(source, explicit, limit, result, from, to) {
|
| 23101 |
super(source, 2 /* State.Result */, explicitPos);
|
23734 |
super(source, 3 /* State.Result */, explicit);
|
| - |
|
23735 |
this.limit = limit;
|
| 23102 |
this.result = result;
|
23736 |
this.result = result;
|
| 23103 |
this.from = from;
|
23737 |
this.from = from;
|
| 23104 |
this.to = to;
|
23738 |
this.to = to;
|
| 23105 |
}
|
23739 |
}
|
| 23106 |
hasResult() { return true; }
|
23740 |
hasResult() { return true; }
|
| 23107 |
handleUserEvent(tr, type, conf) {
|
23741 |
updateFor(tr, type) {
|
| 23108 |
var _a;
|
23742 |
var _a;
|
| - |
|
23743 |
if (!(type & 3 /* UpdateType.SimpleInteraction */))
|
| - |
|
23744 |
return this.map(tr.changes);
|
| 23109 |
let result = this.result;
|
23745 |
let result = this.result;
|
| 23110 |
if (result.map && !tr.changes.empty)
|
23746 |
if (result.map && !tr.changes.empty)
|
| 23111 |
result = result.map(result, tr.changes);
|
23747 |
result = result.map(result, tr.changes);
|
| 23112 |
let from = tr.changes.mapPos(this.from), to = tr.changes.mapPos(this.to, 1);
|
23748 |
let from = tr.changes.mapPos(this.from), to = tr.changes.mapPos(this.to, 1);
|
| 23113 |
let pos = cur(tr.state);
|
23749 |
let pos = cur(tr.state);
|
| 23114 |
if ((this.explicitPos < 0 ? pos <= from : pos < this.from) ||
|
- |
|
| 23115 |
pos > to || !result ||
|
23750 |
if (pos > to || !result ||
|
| 23116 |
type == "delete" && cur(tr.startState) == this.from)
|
23751 |
(type & 2 /* UpdateType.Backspacing */) && (cur(tr.startState) == this.from || pos < this.limit))
|
| 23117 |
return new ActiveSource(this.source, type == "input" && conf.activateOnTyping ? 1 /* State.Pending */ : 0 /* State.Inactive */);
|
23752 |
return new ActiveSource(this.source, type & 4 /* UpdateType.Activate */ ? 1 /* State.Pending */ : 0 /* State.Inactive */);
|
| 23118 |
let explicitPos = this.explicitPos < 0 ? -1 : tr.changes.mapPos(this.explicitPos);
|
23753 |
let limit = tr.changes.mapPos(this.limit);
|
| 23119 |
if (checkValid(result.validFor, tr.state, from, to))
|
23754 |
if (checkValid(result.validFor, tr.state, from, to))
|
| 23120 |
return new ActiveResult(this.source, explicitPos, result, from, to);
|
23755 |
return new ActiveResult(this.source, this.explicit, limit, result, from, to);
|
| 23121 |
if (result.update &&
|
23756 |
if (result.update &&
|
| 23122 |
(result = result.update(result, from, to, new CompletionContext(tr.state, pos, explicitPos >= 0))))
|
23757 |
(result = result.update(result, from, to, new CompletionContext(tr.state, pos, false))))
|
| 23123 |
return new ActiveResult(this.source, explicitPos, result, result.from, (_a = result.to) !== null && _a !== void 0 ? _a : cur(tr.state));
|
23758 |
return new ActiveResult(this.source, this.explicit, limit, result, result.from, (_a = result.to) !== null && _a !== void 0 ? _a : cur(tr.state));
|
| 23124 |
return new ActiveSource(this.source, 1 /* State.Pending */, explicitPos);
|
23759 |
return new ActiveSource(this.source, 1 /* State.Pending */, this.explicit);
|
| 23125 |
}
|
- |
|
| 23126 |
handleChange(tr) {
|
- |
|
| 23127 |
return tr.changes.touchesRange(this.from, this.to) ? new ActiveSource(this.source, 0 /* State.Inactive */) : this.map(tr.changes);
|
- |
|
| 23128 |
}
|
23760 |
}
|
| 23129 |
map(mapping) {
|
23761 |
map(mapping) {
|
| 23130 |
if (mapping.empty)
|
23762 |
if (mapping.empty)
|
| 23131 |
return this;
|
23763 |
return this;
|
| 23132 |
let result = this.result.map ? this.result.map(this.result, mapping) : this.result;
|
23764 |
let result = this.result.map ? this.result.map(this.result, mapping) : this.result;
|
| 23133 |
if (!result)
|
23765 |
if (!result)
|
| 23134 |
return new ActiveSource(this.source, 0 /* State.Inactive */);
|
23766 |
return new ActiveSource(this.source, 0 /* State.Inactive */);
|
| 23135 |
return new ActiveResult(this.source, this.explicitPos < 0 ? -1 : mapping.mapPos(this.explicitPos), this.result, mapping.mapPos(this.from), mapping.mapPos(this.to, 1));
|
23767 |
return new ActiveResult(this.source, this.explicit, mapping.mapPos(this.limit), this.result, mapping.mapPos(this.from), mapping.mapPos(this.to, 1));
|
| - |
|
23768 |
}
|
| - |
|
23769 |
touches(tr) {
|
| - |
|
23770 |
return tr.changes.touchesRange(this.from, this.to);
|
| 23136 |
}
|
23771 |
}
|
| 23137 |
}
|
23772 |
}
|
| 23138 |
function checkValid(validFor, state, from, to) {
|
23773 |
function checkValid(validFor, state, from, to) {
|
| 23139 |
if (!validFor)
|
23774 |
if (!validFor)
|
| 23140 |
return false;
|
23775 |
return false;
|
| Línea 23239... |
Línea 23874... |
| 23239 |
this.running = [];
|
23874 |
this.running = [];
|
| 23240 |
this.debounceAccept = -1;
|
23875 |
this.debounceAccept = -1;
|
| 23241 |
this.pendingStart = false;
|
23876 |
this.pendingStart = false;
|
| 23242 |
this.composing = 0 /* CompositionState.None */;
|
23877 |
this.composing = 0 /* CompositionState.None */;
|
| 23243 |
for (let active of view.state.field(completionState).active)
|
23878 |
for (let active of view.state.field(completionState).active)
|
| 23244 |
if (active.state == 1 /* State.Pending */)
|
23879 |
if (active.isPending)
|
| 23245 |
this.startQuery(active);
|
23880 |
this.startQuery(active);
|
| 23246 |
}
|
23881 |
}
|
| 23247 |
update(update) {
|
23882 |
update(update) {
|
| 23248 |
let cState = update.state.field(completionState);
|
23883 |
let cState = update.state.field(completionState);
|
| - |
|
23884 |
let conf = update.state.facet(completionConfig);
|
| 23249 |
if (!update.selectionSet && !update.docChanged && update.startState.field(completionState) == cState)
|
23885 |
if (!update.selectionSet && !update.docChanged && update.startState.field(completionState) == cState)
|
| 23250 |
return;
|
23886 |
return;
|
| 23251 |
let doesReset = update.transactions.some(tr => {
|
23887 |
let doesReset = update.transactions.some(tr => {
|
| - |
|
23888 |
let type = getUpdateType(tr, conf);
|
| 23252 |
return (tr.selection || tr.docChanged) && !getUserEvent(tr);
|
23889 |
return (type & 8 /* UpdateType.Reset */) || (tr.selection || tr.docChanged) && !(type & 3 /* UpdateType.SimpleInteraction */);
|
| 23253 |
});
|
23890 |
});
|
| 23254 |
for (let i = 0; i < this.running.length; i++) {
|
23891 |
for (let i = 0; i < this.running.length; i++) {
|
| 23255 |
let query = this.running[i];
|
23892 |
let query = this.running[i];
|
| 23256 |
if (doesReset ||
|
23893 |
if (doesReset ||
|
| - |
|
23894 |
query.context.abortOnDocChange && update.docChanged ||
|
| 23257 |
query.updates.length + update.transactions.length > MaxUpdateCount && Date.now() - query.time > MinAbortTime) {
|
23895 |
query.updates.length + update.transactions.length > MaxUpdateCount && Date.now() - query.time > MinAbortTime) {
|
| 23258 |
for (let handler of query.context.abortListeners) {
|
23896 |
for (let handler of query.context.abortListeners) {
|
| 23259 |
try {
|
23897 |
try {
|
| 23260 |
handler();
|
23898 |
handler();
|
| 23261 |
}
|
23899 |
}
|
| Línea 23272... |
Línea 23910... |
| 23272 |
}
|
23910 |
}
|
| 23273 |
if (this.debounceUpdate > -1)
|
23911 |
if (this.debounceUpdate > -1)
|
| 23274 |
clearTimeout(this.debounceUpdate);
|
23912 |
clearTimeout(this.debounceUpdate);
|
| 23275 |
if (update.transactions.some(tr => tr.effects.some(e => e.is(startCompletionEffect))))
|
23913 |
if (update.transactions.some(tr => tr.effects.some(e => e.is(startCompletionEffect))))
|
| 23276 |
this.pendingStart = true;
|
23914 |
this.pendingStart = true;
|
| 23277 |
let delay = this.pendingStart ? 50 : update.state.facet(completionConfig).activateOnTypingDelay;
|
23915 |
let delay = this.pendingStart ? 50 : conf.activateOnTypingDelay;
|
| 23278 |
this.debounceUpdate = cState.active.some(a => a.state == 1 /* State.Pending */ && !this.running.some(q => q.active.source == a.source))
|
23916 |
this.debounceUpdate = cState.active.some(a => a.isPending && !this.running.some(q => q.active.source == a.source))
|
| 23279 |
? setTimeout(() => this.startUpdate(), delay) : -1;
|
23917 |
? setTimeout(() => this.startUpdate(), delay) : -1;
|
| 23280 |
if (this.composing != 0 /* CompositionState.None */)
|
23918 |
if (this.composing != 0 /* CompositionState.None */)
|
| 23281 |
for (let tr of update.transactions) {
|
23919 |
for (let tr of update.transactions) {
|
| 23282 |
if (getUserEvent(tr) == "input")
|
23920 |
if (tr.isUserEvent("input.type"))
|
| 23283 |
this.composing = 2 /* CompositionState.Changed */;
|
23921 |
this.composing = 2 /* CompositionState.Changed */;
|
| 23284 |
else if (this.composing == 2 /* CompositionState.Changed */ && tr.selection)
|
23922 |
else if (this.composing == 2 /* CompositionState.Changed */ && tr.selection)
|
| 23285 |
this.composing = 3 /* CompositionState.ChangedAndMoved */;
|
23923 |
this.composing = 3 /* CompositionState.ChangedAndMoved */;
|
| 23286 |
}
|
23924 |
}
|
| 23287 |
}
|
23925 |
}
|
| 23288 |
startUpdate() {
|
23926 |
startUpdate() {
|
| 23289 |
this.debounceUpdate = -1;
|
23927 |
this.debounceUpdate = -1;
|
| 23290 |
this.pendingStart = false;
|
23928 |
this.pendingStart = false;
|
| 23291 |
let { state } = this.view, cState = state.field(completionState);
|
23929 |
let { state } = this.view, cState = state.field(completionState);
|
| 23292 |
for (let active of cState.active) {
|
23930 |
for (let active of cState.active) {
|
| 23293 |
if (active.state == 1 /* State.Pending */ && !this.running.some(r => r.active.source == active.source))
|
23931 |
if (active.isPending && !this.running.some(r => r.active.source == active.source))
|
| 23294 |
this.startQuery(active);
|
23932 |
this.startQuery(active);
|
| 23295 |
}
|
23933 |
}
|
| - |
|
23934 |
if (this.running.length && cState.open && cState.open.disabled)
|
| - |
|
23935 |
this.debounceAccept = setTimeout(() => this.accept(), this.view.state.facet(completionConfig).updateSyncTime);
|
| 23296 |
}
|
23936 |
}
|
| 23297 |
startQuery(active) {
|
23937 |
startQuery(active) {
|
| 23298 |
let { state } = this.view, pos = cur(state);
|
23938 |
let { state } = this.view, pos = cur(state);
|
| 23299 |
let context = new CompletionContext(state, pos, active.explicitPos == pos);
|
23939 |
let context = new CompletionContext(state, pos, active.explicit, this.view);
|
| 23300 |
let pending = new RunningQuery(active, context);
|
23940 |
let pending = new RunningQuery(active, context);
|
| 23301 |
this.running.push(pending);
|
23941 |
this.running.push(pending);
|
| 23302 |
Promise.resolve(active.source(context)).then(result => {
|
23942 |
Promise.resolve(active.source(context)).then(result => {
|
| 23303 |
if (!pending.context.aborted) {
|
23943 |
if (!pending.context.aborted) {
|
| 23304 |
pending.done = result || null;
|
23944 |
pending.done = result || null;
|
| Línea 23321... |
Línea 23961... |
| 23321 |
var _a;
|
23961 |
var _a;
|
| 23322 |
if (this.debounceAccept > -1)
|
23962 |
if (this.debounceAccept > -1)
|
| 23323 |
clearTimeout(this.debounceAccept);
|
23963 |
clearTimeout(this.debounceAccept);
|
| 23324 |
this.debounceAccept = -1;
|
23964 |
this.debounceAccept = -1;
|
| 23325 |
let updated = [];
|
23965 |
let updated = [];
|
| 23326 |
let conf = this.view.state.facet(completionConfig);
|
23966 |
let conf = this.view.state.facet(completionConfig), cState = this.view.state.field(completionState);
|
| 23327 |
for (let i = 0; i < this.running.length; i++) {
|
23967 |
for (let i = 0; i < this.running.length; i++) {
|
| 23328 |
let query = this.running[i];
|
23968 |
let query = this.running[i];
|
| 23329 |
if (query.done === undefined)
|
23969 |
if (query.done === undefined)
|
| 23330 |
continue;
|
23970 |
continue;
|
| 23331 |
this.running.splice(i--, 1);
|
23971 |
this.running.splice(i--, 1);
|
| 23332 |
if (query.done) {
|
23972 |
if (query.done) {
|
| - |
|
23973 |
let pos = cur(query.updates.length ? query.updates[0].startState : this.view.state);
|
| - |
|
23974 |
let limit = Math.min(pos, query.done.from + (query.active.explicit ? 0 : 1));
|
| 23333 |
let active = new ActiveResult(query.active.source, query.active.explicitPos, query.done, query.done.from, (_a = query.done.to) !== null && _a !== void 0 ? _a : cur(query.updates.length ? query.updates[0].startState : this.view.state));
|
23975 |
let active = new ActiveResult(query.active.source, query.active.explicit, limit, query.done, query.done.from, (_a = query.done.to) !== null && _a !== void 0 ? _a : pos);
|
| 23334 |
// Replay the transactions that happened since the start of
|
23976 |
// Replay the transactions that happened since the start of
|
| 23335 |
// the request and see if that preserves the result
|
23977 |
// the request and see if that preserves the result
|
| 23336 |
for (let tr of query.updates)
|
23978 |
for (let tr of query.updates)
|
| 23337 |
active = active.update(tr, conf);
|
23979 |
active = active.update(tr, conf);
|
| 23338 |
if (active.hasResult()) {
|
23980 |
if (active.hasResult()) {
|
| 23339 |
updated.push(active);
|
23981 |
updated.push(active);
|
| 23340 |
continue;
|
23982 |
continue;
|
| 23341 |
}
|
23983 |
}
|
| 23342 |
}
|
23984 |
}
|
| 23343 |
let current = this.view.state.field(completionState).active.find(a => a.source == query.active.source);
|
23985 |
let current = cState.active.find(a => a.source == query.active.source);
|
| 23344 |
if (current && current.state == 1 /* State.Pending */) {
|
23986 |
if (current && current.isPending) {
|
| 23345 |
if (query.done == null) {
|
23987 |
if (query.done == null) {
|
| 23346 |
// Explicitly failed. Should clear the pending status if it
|
23988 |
// Explicitly failed. Should clear the pending status if it
|
| 23347 |
// hasn't been re-set in the meantime.
|
23989 |
// hasn't been re-set in the meantime.
|
| 23348 |
let active = new ActiveSource(query.active.source, 0 /* State.Inactive */);
|
23990 |
let active = new ActiveSource(query.active.source, 0 /* State.Inactive */);
|
| 23349 |
for (let tr of query.updates)
|
23991 |
for (let tr of query.updates)
|
| 23350 |
active = active.update(tr, conf);
|
23992 |
active = active.update(tr, conf);
|
| 23351 |
if (active.state != 1 /* State.Pending */)
|
23993 |
if (!active.isPending)
|
| 23352 |
updated.push(active);
|
23994 |
updated.push(active);
|
| 23353 |
}
|
23995 |
}
|
| 23354 |
else {
|
23996 |
else {
|
| 23355 |
// Cleared by subsequent transactions. Restart.
|
23997 |
// Cleared by subsequent transactions. Restart.
|
| 23356 |
this.startQuery(current);
|
23998 |
this.startQuery(current);
|
| 23357 |
}
|
23999 |
}
|
| 23358 |
}
|
24000 |
}
|
| 23359 |
}
|
24001 |
}
|
| 23360 |
if (updated.length)
|
24002 |
if (updated.length || cState.open && cState.open.disabled)
|
| 23361 |
this.view.dispatch({ effects: setActiveEffect.of(updated) });
|
24003 |
this.view.dispatch({ effects: setActiveEffect.of(updated) });
|
| 23362 |
}
|
24004 |
}
|
| 23363 |
}, {
|
24005 |
}, {
|
| 23364 |
eventHandlers: {
|
24006 |
eventHandlers: {
|
| 23365 |
blur(event) {
|
24007 |
blur(event) {
|
| Línea 23453... |
Línea 24095... |
| 23453 |
".cm-tooltip.cm-completionInfo": {
|
24095 |
".cm-tooltip.cm-completionInfo": {
|
| 23454 |
position: "absolute",
|
24096 |
position: "absolute",
|
| 23455 |
padding: "3px 9px",
|
24097 |
padding: "3px 9px",
|
| 23456 |
width: "max-content",
|
24098 |
width: "max-content",
|
| 23457 |
maxWidth: `${400 /* Info.Width */}px`,
|
24099 |
maxWidth: `${400 /* Info.Width */}px`,
|
| 23458 |
boxSizing: "border-box"
|
24100 |
boxSizing: "border-box",
|
| - |
|
24101 |
whiteSpace: "pre-line"
|
| 23459 |
},
|
24102 |
},
|
| 23460 |
".cm-completionInfo.cm-completionInfo-left": { right: "100%" },
|
24103 |
".cm-completionInfo.cm-completionInfo-left": { right: "100%" },
|
| 23461 |
".cm-completionInfo.cm-completionInfo-right": { left: "100%" },
|
24104 |
".cm-completionInfo.cm-completionInfo-right": { left: "100%" },
|
| 23462 |
".cm-completionInfo.cm-completionInfo-left-narrow": { right: `${30 /* Info.Margin */}px` },
|
24105 |
".cm-completionInfo.cm-completionInfo-left-narrow": { right: `${30 /* Info.Margin */}px` },
|
| 23463 |
".cm-completionInfo.cm-completionInfo-right-narrow": { left: `${30 /* Info.Margin */}px` },
|
24106 |
".cm-completionInfo.cm-completionInfo-right-narrow": { left: `${30 /* Info.Margin */}px` },
|
| Línea 23566... |
Línea 24209... |
| 23566 |
}
|
24209 |
}
|
| 23567 |
static parse(template) {
|
24210 |
static parse(template) {
|
| 23568 |
let fields = [];
|
24211 |
let fields = [];
|
| 23569 |
let lines = [], positions = [], m;
|
24212 |
let lines = [], positions = [], m;
|
| 23570 |
for (let line of template.split(/\r\n?|\n/)) {
|
24213 |
for (let line of template.split(/\r\n?|\n/)) {
|
| 23571 |
while (m = /[#$]\{(?:(\d+)(?::([^}]*))?|([^}]*))\}/.exec(line)) {
|
24214 |
while (m = /[#$]\{(?:(\d+)(?::([^}]*))?|((?:\\[{}]|[^}])*))\}/.exec(line)) {
|
| 23572 |
let seq = m[1] ? +m[1] : null, name = m[2] || m[3] || "", found = -1;
|
24215 |
let seq = m[1] ? +m[1] : null, rawName = m[2] || m[3] || "", found = -1;
|
| - |
|
24216 |
let name = rawName.replace(/\\[{}]/g, m => m[1]);
|
| 23573 |
for (let i = 0; i < fields.length; i++) {
|
24217 |
for (let i = 0; i < fields.length; i++) {
|
| 23574 |
if (seq != null ? fields[i].seq == seq : name ? fields[i].name == name : false)
|
24218 |
if (seq != null ? fields[i].seq == seq : name ? fields[i].name == name : false)
|
| 23575 |
found = i;
|
24219 |
found = i;
|
| 23576 |
}
|
24220 |
}
|
| 23577 |
if (found < 0) {
|
24221 |
if (found < 0) {
|
| Línea 23583... |
Línea 24227... |
| 23583 |
for (let pos of positions)
|
24227 |
for (let pos of positions)
|
| 23584 |
if (pos.field >= found)
|
24228 |
if (pos.field >= found)
|
| 23585 |
pos.field++;
|
24229 |
pos.field++;
|
| 23586 |
}
|
24230 |
}
|
| 23587 |
positions.push(new FieldPos(found, lines.length, m.index, m.index + name.length));
|
24231 |
positions.push(new FieldPos(found, lines.length, m.index, m.index + name.length));
|
| 23588 |
line = line.slice(0, m.index) + name + line.slice(m.index + m[0].length);
|
24232 |
line = line.slice(0, m.index) + rawName + line.slice(m.index + m[0].length);
|
| 23589 |
}
|
24233 |
}
|
| 23590 |
for (let esc; esc = /\\([{}])/.exec(line);) {
|
24234 |
line = line.replace(/\\([{}])/g, (_, brace, index) => {
|
| 23591 |
line = line.slice(0, esc.index) + esc[1] + line.slice(esc.index + esc[0].length);
|
- |
|
| 23592 |
for (let pos of positions)
|
24235 |
for (let pos of positions)
|
| 23593 |
if (pos.line == lines.length && pos.from > esc.index) {
|
24236 |
if (pos.line == lines.length && pos.from > index) {
|
| 23594 |
pos.from--;
|
24237 |
pos.from--;
|
| 23595 |
pos.to--;
|
24238 |
pos.to--;
|
| 23596 |
}
|
24239 |
}
|
| - |
|
24240 |
return brace;
|
| 23597 |
}
|
24241 |
});
|
| 23598 |
lines.push(line);
|
24242 |
lines.push(line);
|
| 23599 |
}
|
24243 |
}
|
| 23600 |
return new Snippet(lines, positions);
|
24244 |
return new Snippet(lines, positions);
|
| 23601 |
}
|
24245 |
}
|
| 23602 |
}
|
24246 |
}
|
| Línea 23685... |
Línea 24329... |
| 23685 |
*/
|
24329 |
*/
|
| 23686 |
function snippet(template) {
|
24330 |
function snippet(template) {
|
| 23687 |
let snippet = Snippet.parse(template);
|
24331 |
let snippet = Snippet.parse(template);
|
| 23688 |
return (editor, completion, from, to) => {
|
24332 |
return (editor, completion, from, to) => {
|
| 23689 |
let { text, ranges } = snippet.instantiate(editor.state, from);
|
24333 |
let { text, ranges } = snippet.instantiate(editor.state, from);
|
| - |
|
24334 |
let { main } = editor.state.selection;
|
| 23690 |
let spec = {
|
24335 |
let spec = {
|
| 23691 |
changes: { from, to, insert: Text.of(text) },
|
24336 |
changes: { from, to: to == main.from ? main.to : to, insert: Text.of(text) },
|
| 23692 |
scrollIntoView: true,
|
24337 |
scrollIntoView: true,
|
| 23693 |
annotations: completion ? [pickedCompletion.of(completion), Transaction.userEvent.of("input.complete")] : undefined
|
24338 |
annotations: completion ? [pickedCompletion.of(completion), Transaction.userEvent.of("input.complete")] : undefined
|
| 23694 |
};
|
24339 |
};
|
| 23695 |
if (ranges.length)
|
24340 |
if (ranges.length)
|
| 23696 |
spec.selection = fieldSelection(ranges, 0);
|
24341 |
spec.selection = fieldSelection(ranges, 0);
|
| Línea 23813... |
Línea 24458... |
| 23813 |
that bracket.
|
24458 |
that bracket.
|
| 23814 |
*/
|
24459 |
*/
|
| 23815 |
function closeBrackets() {
|
24460 |
function closeBrackets() {
|
| 23816 |
return [inputHandler, bracketState];
|
24461 |
return [inputHandler, bracketState];
|
| 23817 |
}
|
24462 |
}
|
| 23818 |
const definedClosing = "()[]{}<>";
|
24463 |
const definedClosing = "()[]{}<>«»»«[]{}";
|
| 23819 |
function closing(ch) {
|
24464 |
function closing(ch) {
|
| 23820 |
for (let i = 0; i < definedClosing.length; i += 2)
|
24465 |
for (let i = 0; i < definedClosing.length; i += 2)
|
| 23821 |
if (definedClosing.charCodeAt(i) == ch)
|
24466 |
if (definedClosing.charCodeAt(i) == ch)
|
| 23822 |
return definedClosing.charAt(i + 1);
|
24467 |
return definedClosing.charAt(i + 1);
|
| 23823 |
return fromCodePoint(ch < 128 ? ch : ch + 1);
|
24468 |
return fromCodePoint(ch < 128 ? ch : ch + 1);
|
| Línea 24035... |
Línea 24680... |
| 24035 |
];
|
24680 |
];
|
| 24036 |
}
|
24681 |
}
|
| 24037 |
/**
|
24682 |
/**
|
| 24038 |
Basic keybindings for autocompletion.
|
24683 |
Basic keybindings for autocompletion.
|
| Línea 24039... |
Línea 24684... |
| 24039 |
|
24684 |
|
| 24040 |
- Ctrl-Space: [`startCompletion`](https://codemirror.net/6/docs/ref/#autocomplete.startCompletion)
|
24685 |
- Ctrl-Space (and Alt-\` on macOS): [`startCompletion`](https://codemirror.net/6/docs/ref/#autocomplete.startCompletion)
|
| 24041 |
- Escape: [`closeCompletion`](https://codemirror.net/6/docs/ref/#autocomplete.closeCompletion)
|
24686 |
- Escape: [`closeCompletion`](https://codemirror.net/6/docs/ref/#autocomplete.closeCompletion)
|
| 24042 |
- ArrowDown: [`moveCompletionSelection`](https://codemirror.net/6/docs/ref/#autocomplete.moveCompletionSelection)`(true)`
|
24687 |
- ArrowDown: [`moveCompletionSelection`](https://codemirror.net/6/docs/ref/#autocomplete.moveCompletionSelection)`(true)`
|
| 24043 |
- ArrowUp: [`moveCompletionSelection`](https://codemirror.net/6/docs/ref/#autocomplete.moveCompletionSelection)`(false)`
|
24688 |
- ArrowUp: [`moveCompletionSelection`](https://codemirror.net/6/docs/ref/#autocomplete.moveCompletionSelection)`(false)`
|
| 24044 |
- PageDown: [`moveCompletionSelection`](https://codemirror.net/6/docs/ref/#autocomplete.moveCompletionSelection)`(true, "page")`
|
24689 |
- PageDown: [`moveCompletionSelection`](https://codemirror.net/6/docs/ref/#autocomplete.moveCompletionSelection)`(true, "page")`
|
| 24045 |
- PageDown: [`moveCompletionSelection`](https://codemirror.net/6/docs/ref/#autocomplete.moveCompletionSelection)`(true, "page")`
|
24690 |
- PageDown: [`moveCompletionSelection`](https://codemirror.net/6/docs/ref/#autocomplete.moveCompletionSelection)`(true, "page")`
|
| 24046 |
- Enter: [`acceptCompletion`](https://codemirror.net/6/docs/ref/#autocomplete.acceptCompletion)
|
24691 |
- Enter: [`acceptCompletion`](https://codemirror.net/6/docs/ref/#autocomplete.acceptCompletion)
|
| 24047 |
*/
|
24692 |
*/
|
| 24048 |
const completionKeymap = [
|
24693 |
const completionKeymap = [
|
| - |
|
24694 |
{ key: "Ctrl-Space", run: startCompletion },
|
| 24049 |
{ key: "Ctrl-Space", run: startCompletion },
|
24695 |
{ mac: "Alt-`", run: startCompletion },
|
| 24050 |
{ key: "Escape", run: closeCompletion },
|
24696 |
{ key: "Escape", run: closeCompletion },
|
| 24051 |
{ key: "ArrowDown", run: /*@__PURE__*/moveCompletionSelection(true) },
|
24697 |
{ key: "ArrowDown", run: /*@__PURE__*/moveCompletionSelection(true) },
|
| 24052 |
{ key: "ArrowUp", run: /*@__PURE__*/moveCompletionSelection(false) },
|
24698 |
{ key: "ArrowUp", run: /*@__PURE__*/moveCompletionSelection(false) },
|
| 24053 |
{ key: "PageDown", run: /*@__PURE__*/moveCompletionSelection(true, "page") },
|
24699 |
{ key: "PageDown", run: /*@__PURE__*/moveCompletionSelection(true, "page") },
|
| Línea 24073... |
Línea 24719... |
| 24073 |
// Filter the list of diagnostics for which to create markers
|
24719 |
// Filter the list of diagnostics for which to create markers
|
| 24074 |
let markedDiagnostics = diagnostics;
|
24720 |
let markedDiagnostics = diagnostics;
|
| 24075 |
let diagnosticFilter = state.facet(lintConfig).markerFilter;
|
24721 |
let diagnosticFilter = state.facet(lintConfig).markerFilter;
|
| 24076 |
if (diagnosticFilter)
|
24722 |
if (diagnosticFilter)
|
| 24077 |
markedDiagnostics = diagnosticFilter(markedDiagnostics, state);
|
24723 |
markedDiagnostics = diagnosticFilter(markedDiagnostics, state);
|
| - |
|
24724 |
let sorted = diagnostics.slice().sort((a, b) => a.from - b.from || a.to - b.to);
|
| 24078 |
let ranges = Decoration.set(markedDiagnostics.map((d) => {
|
24725 |
let deco = new RangeSetBuilder(), active = [], pos = 0;
|
| - |
|
24726 |
for (let i = 0;;) {
|
| - |
|
24727 |
let next = i == sorted.length ? null : sorted[i];
|
| - |
|
24728 |
if (!next && !active.length)
|
| - |
|
24729 |
break;
|
| - |
|
24730 |
let from, to;
|
| - |
|
24731 |
if (active.length) {
|
| - |
|
24732 |
from = pos;
|
| - |
|
24733 |
to = active.reduce((p, d) => Math.min(p, d.to), next && next.from > from ? next.from : 1e8);
|
| - |
|
24734 |
}
|
| - |
|
24735 |
else {
|
| - |
|
24736 |
from = next.from;
|
| - |
|
24737 |
to = next.to;
|
| - |
|
24738 |
active.push(next);
|
| - |
|
24739 |
i++;
|
| - |
|
24740 |
}
|
| - |
|
24741 |
while (i < sorted.length) {
|
| - |
|
24742 |
let next = sorted[i];
|
| 24079 |
// For zero-length ranges or ranges covering only a line break, create a widget
|
24743 |
if (next.from == from && (next.to > next.from || next.to == from)) {
|
| - |
|
24744 |
active.push(next);
|
| - |
|
24745 |
i++;
|
| - |
|
24746 |
to = Math.min(next.to, to);
|
| - |
|
24747 |
}
|
| - |
|
24748 |
else {
|
| - |
|
24749 |
to = Math.min(next.from, to);
|
| - |
|
24750 |
break;
|
| - |
|
24751 |
}
|
| - |
|
24752 |
}
|
| - |
|
24753 |
let sev = maxSeverity(active);
|
| 24080 |
return d.from == d.to || (d.from == d.to - 1 && state.doc.lineAt(d.from).to == d.from)
|
24754 |
if (active.some(d => d.from == d.to || (d.from == d.to - 1 && state.doc.lineAt(d.from).to == d.from))) {
|
| 24081 |
? Decoration.widget({
|
24755 |
deco.add(from, from, Decoration.widget({
|
| 24082 |
widget: new DiagnosticWidget(d),
|
24756 |
widget: new DiagnosticWidget(sev),
|
| 24083 |
diagnostic: d
|
24757 |
diagnostics: active.slice()
|
| 24084 |
}).range(d.from)
|
24758 |
}));
|
| - |
|
24759 |
}
|
| - |
|
24760 |
else {
|
| - |
|
24761 |
let markClass = active.reduce((c, d) => d.markClass ? c + " " + d.markClass : c, "");
|
| 24085 |
: Decoration.mark({
|
24762 |
deco.add(from, to, Decoration.mark({
|
| 24086 |
attributes: { class: "cm-lintRange cm-lintRange-" + d.severity + (d.markClass ? " " + d.markClass : "") },
|
24763 |
class: "cm-lintRange cm-lintRange-" + sev + markClass,
|
| 24087 |
diagnostic: d,
|
24764 |
diagnostics: active.slice(),
|
| - |
|
24765 |
inclusiveEnd: active.some(a => a.to > to)
|
| - |
|
24766 |
}));
|
| - |
|
24767 |
}
|
| - |
|
24768 |
pos = to;
|
| - |
|
24769 |
for (let i = 0; i < active.length; i++)
|
| 24088 |
inclusive: true
|
24770 |
if (active[i].to <= pos)
|
| 24089 |
}).range(d.from, d.to);
|
24771 |
active.splice(i--, 1);
|
| 24090 |
}), true);
|
24772 |
}
|
| - |
|
24773 |
let set = deco.finish();
|
| 24091 |
return new LintState(ranges, panel, findDiagnostic(ranges));
|
24774 |
return new LintState(set, panel, findDiagnostic(set));
|
| 24092 |
}
|
24775 |
}
|
| 24093 |
}
|
24776 |
}
|
| 24094 |
function findDiagnostic(diagnostics, diagnostic = null, after = 0) {
|
24777 |
function findDiagnostic(diagnostics, diagnostic = null, after = 0) {
|
| 24095 |
let found = null;
|
24778 |
let found = null;
|
| 24096 |
diagnostics.between(after, 1e9, (from, to, { spec }) => {
|
24779 |
diagnostics.between(after, 1e9, (from, to, { spec }) => {
|
| 24097 |
if (diagnostic && spec.diagnostic != diagnostic)
|
24780 |
if (diagnostic && spec.diagnostics.indexOf(diagnostic) < 0)
|
| 24098 |
return;
|
24781 |
return;
|
| - |
|
24782 |
if (!found)
|
| 24099 |
found = new SelectedDiagnostic(from, to, spec.diagnostic);
|
24783 |
found = new SelectedDiagnostic(from, to, diagnostic || spec.diagnostics[0]);
|
| - |
|
24784 |
else if (spec.diagnostics.indexOf(found.diagnostic) < 0)
|
| 24100 |
return false;
|
24785 |
return false;
|
| - |
|
24786 |
else
|
| - |
|
24787 |
found = new SelectedDiagnostic(found.from, to, found.diagnostic);
|
| 24101 |
});
|
24788 |
});
|
| 24102 |
return found;
|
24789 |
return found;
|
| 24103 |
}
|
24790 |
}
|
| 24104 |
function hideTooltip(tr, tooltip) {
|
24791 |
function hideTooltip(tr, tooltip) {
|
| - |
|
24792 |
let from = tooltip.pos, to = tooltip.end || from;
|
| - |
|
24793 |
let result = tr.state.facet(lintConfig).hideOn(tr, from, to);
|
| - |
|
24794 |
if (result != null)
|
| - |
|
24795 |
return result;
|
| 24105 |
let line = tr.startState.doc.lineAt(tooltip.pos);
|
24796 |
let line = tr.startState.doc.lineAt(tooltip.pos);
|
| 24106 |
return !!(tr.effects.some(e => e.is(setDiagnosticsEffect)) || tr.changes.touchesRange(line.from, line.to));
|
24797 |
return !!(tr.effects.some(e => e.is(setDiagnosticsEffect)) || tr.changes.touchesRange(line.from, Math.max(line.to, to)));
|
| 24107 |
}
|
24798 |
}
|
| 24108 |
function maybeEnableLint(state, effects) {
|
24799 |
function maybeEnableLint(state, effects) {
|
| 24109 |
return state.field(lintState, false) ? effects : effects.concat(StateEffect.appendConfig.of(lintExtensions));
|
24800 |
return state.field(lintState, false) ? effects : effects.concat(StateEffect.appendConfig.of(lintExtensions));
|
| 24110 |
}
|
24801 |
}
|
| 24111 |
/**
|
24802 |
/**
|
| Línea 24118... |
Línea 24809... |
| 24118 |
const lintState = /*@__PURE__*/StateField.define({
|
24809 |
const lintState = /*@__PURE__*/StateField.define({
|
| 24119 |
create() {
|
24810 |
create() {
|
| 24120 |
return new LintState(Decoration.none, null, null);
|
24811 |
return new LintState(Decoration.none, null, null);
|
| 24121 |
},
|
24812 |
},
|
| 24122 |
update(value, tr) {
|
24813 |
update(value, tr) {
|
| 24123 |
if (tr.docChanged) {
|
24814 |
if (tr.docChanged && value.diagnostics.size) {
|
| 24124 |
let mapped = value.diagnostics.map(tr.changes), selected = null;
|
24815 |
let mapped = value.diagnostics.map(tr.changes), selected = null, panel = value.panel;
|
| 24125 |
if (value.selected) {
|
24816 |
if (value.selected) {
|
| 24126 |
let selPos = tr.changes.mapPos(value.selected.from, 1);
|
24817 |
let selPos = tr.changes.mapPos(value.selected.from, 1);
|
| 24127 |
selected = findDiagnostic(mapped, value.selected.diagnostic, selPos) || findDiagnostic(mapped, null, selPos);
|
24818 |
selected = findDiagnostic(mapped, value.selected.diagnostic, selPos) || findDiagnostic(mapped, null, selPos);
|
| 24128 |
}
|
24819 |
}
|
| - |
|
24820 |
if (!mapped.size && panel && tr.state.facet(lintConfig).autoPanel)
|
| - |
|
24821 |
panel = null;
|
| 24129 |
value = new LintState(mapped, value.panel, selected);
|
24822 |
value = new LintState(mapped, panel, selected);
|
| 24130 |
}
|
24823 |
}
|
| 24131 |
for (let effect of tr.effects) {
|
24824 |
for (let effect of tr.effects) {
|
| 24132 |
if (effect.is(setDiagnosticsEffect)) {
|
24825 |
if (effect.is(setDiagnosticsEffect)) {
|
| - |
|
24826 |
let panel = !tr.state.facet(lintConfig).autoPanel ? value.panel : effect.value.length ? LintPanel.open : null;
|
| 24133 |
value = LintState.init(effect.value, value.panel, tr.state);
|
24827 |
value = LintState.init(effect.value, panel, tr.state);
|
| 24134 |
}
|
24828 |
}
|
| 24135 |
else if (effect.is(togglePanel)) {
|
24829 |
else if (effect.is(togglePanel)) {
|
| 24136 |
value = new LintState(value.diagnostics, effect.value ? LintPanel.open : null, value.selected);
|
24830 |
value = new LintState(value.diagnostics, effect.value ? LintPanel.open : null, value.selected);
|
| 24137 |
}
|
24831 |
}
|
| 24138 |
else if (effect.is(movePanelSelection)) {
|
24832 |
else if (effect.is(movePanelSelection)) {
|
| Línea 24142... |
Línea 24836... |
| 24142 |
return value;
|
24836 |
return value;
|
| 24143 |
},
|
24837 |
},
|
| 24144 |
provide: f => [showPanel.from(f, val => val.panel),
|
24838 |
provide: f => [showPanel.from(f, val => val.panel),
|
| 24145 |
EditorView.decorations.from(f, s => s.diagnostics)]
|
24839 |
EditorView.decorations.from(f, s => s.diagnostics)]
|
| 24146 |
});
|
24840 |
});
|
| 24147 |
const activeMark = /*@__PURE__*/Decoration.mark({ class: "cm-lintRange cm-lintRange-active", inclusive: true });
|
24841 |
const activeMark = /*@__PURE__*/Decoration.mark({ class: "cm-lintRange cm-lintRange-active" });
|
| 24148 |
function lintTooltip(view, pos, side) {
|
24842 |
function lintTooltip(view, pos, side) {
|
| 24149 |
let { diagnostics } = view.state.field(lintState);
|
24843 |
let { diagnostics } = view.state.field(lintState);
|
| 24150 |
let found = [], stackStart = 2e8, stackEnd = 0;
|
24844 |
let found, start = -1, end = -1;
|
| 24151 |
diagnostics.between(pos - (side < 0 ? 1 : 0), pos + (side > 0 ? 1 : 0), (from, to, { spec }) => {
|
24845 |
diagnostics.between(pos - (side < 0 ? 1 : 0), pos + (side > 0 ? 1 : 0), (from, to, { spec }) => {
|
| 24152 |
if (pos >= from && pos <= to &&
|
24846 |
if (pos >= from && pos <= to &&
|
| 24153 |
(from == to || ((pos > from || side > 0) && (pos < to || side < 0)))) {
|
24847 |
(from == to || ((pos > from || side > 0) && (pos < to || side < 0)))) {
|
| 24154 |
found.push(spec.diagnostic);
|
24848 |
found = spec.diagnostics;
|
| 24155 |
stackStart = Math.min(from, stackStart);
|
24849 |
start = from;
|
| 24156 |
stackEnd = Math.max(to, stackEnd);
|
24850 |
end = to;
|
| - |
|
24851 |
return false;
|
| 24157 |
}
|
24852 |
}
|
| 24158 |
});
|
24853 |
});
|
| 24159 |
let diagnosticFilter = view.state.facet(lintConfig).tooltipFilter;
|
24854 |
let diagnosticFilter = view.state.facet(lintConfig).tooltipFilter;
|
| 24160 |
if (diagnosticFilter)
|
24855 |
if (found && diagnosticFilter)
|
| 24161 |
found = diagnosticFilter(found, view.state);
|
24856 |
found = diagnosticFilter(found, view.state);
|
| 24162 |
if (!found.length)
|
24857 |
if (!found)
|
| 24163 |
return null;
|
24858 |
return null;
|
| 24164 |
return {
|
24859 |
return {
|
| 24165 |
pos: stackStart,
|
24860 |
pos: start,
|
| 24166 |
end: stackEnd,
|
24861 |
end: end,
|
| 24167 |
above: view.state.doc.lineAt(stackStart).to < stackEnd,
|
24862 |
above: view.state.doc.lineAt(start).to < end,
|
| 24168 |
create() {
|
24863 |
create() {
|
| 24169 |
return { dom: diagnosticsTooltip(view, found) };
|
24864 |
return { dom: diagnosticsTooltip(view, found) };
|
| 24170 |
}
|
24865 |
}
|
| 24171 |
};
|
24866 |
};
|
| 24172 |
}
|
24867 |
}
|
| Línea 24225... |
Línea 24920... |
| 24225 |
combine(input) {
|
24920 |
combine(input) {
|
| 24226 |
return Object.assign({ sources: input.map(i => i.source).filter(x => x != null) }, combineConfig(input.map(i => i.config), {
|
24921 |
return Object.assign({ sources: input.map(i => i.source).filter(x => x != null) }, combineConfig(input.map(i => i.config), {
|
| 24227 |
delay: 750,
|
24922 |
delay: 750,
|
| 24228 |
markerFilter: null,
|
24923 |
markerFilter: null,
|
| 24229 |
tooltipFilter: null,
|
24924 |
tooltipFilter: null,
|
| 24230 |
needsRefresh: null
|
24925 |
needsRefresh: null,
|
| - |
|
24926 |
hideOn: () => null,
|
| 24231 |
}, {
|
24927 |
}, {
|
| 24232 |
needsRefresh: (a, b) => !a ? b : !b ? a : u => a(u) || b(u)
|
24928 |
needsRefresh: (a, b) => !a ? b : !b ? a : u => a(u) || b(u)
|
| 24233 |
}));
|
24929 |
}));
|
| 24234 |
}
|
24930 |
}
|
| 24235 |
});
|
24931 |
});
|
| Línea 24249... |
Línea 24945... |
| 24249 |
return assigned;
|
24945 |
return assigned;
|
| 24250 |
}
|
24946 |
}
|
| 24251 |
function renderDiagnostic(view, diagnostic, inPanel) {
|
24947 |
function renderDiagnostic(view, diagnostic, inPanel) {
|
| 24252 |
var _a;
|
24948 |
var _a;
|
| 24253 |
let keys = inPanel ? assignKeys(diagnostic.actions) : [];
|
24949 |
let keys = inPanel ? assignKeys(diagnostic.actions) : [];
|
| 24254 |
return crelt("li", { class: "cm-diagnostic cm-diagnostic-" + diagnostic.severity }, crelt("span", { class: "cm-diagnosticText" }, diagnostic.renderMessage ? diagnostic.renderMessage() : diagnostic.message), (_a = diagnostic.actions) === null || _a === void 0 ? void 0 : _a.map((action, i) => {
|
24950 |
return crelt("li", { class: "cm-diagnostic cm-diagnostic-" + diagnostic.severity }, crelt("span", { class: "cm-diagnosticText" }, diagnostic.renderMessage ? diagnostic.renderMessage(view) : diagnostic.message), (_a = diagnostic.actions) === null || _a === void 0 ? void 0 : _a.map((action, i) => {
|
| 24255 |
let fired = false, click = (e) => {
|
24951 |
let fired = false, click = (e) => {
|
| 24256 |
e.preventDefault();
|
24952 |
e.preventDefault();
|
| 24257 |
if (fired)
|
24953 |
if (fired)
|
| 24258 |
return;
|
24954 |
return;
|
| 24259 |
fired = true;
|
24955 |
fired = true;
|
| Línea 24273... |
Línea 24969... |
| 24273 |
"aria-label": ` Action: ${name}${keyIndex < 0 ? "" : ` (access key "${keys[i]})"`}.`
|
24969 |
"aria-label": ` Action: ${name}${keyIndex < 0 ? "" : ` (access key "${keys[i]})"`}.`
|
| 24274 |
}, nameElt);
|
24970 |
}, nameElt);
|
| 24275 |
}), diagnostic.source && crelt("div", { class: "cm-diagnosticSource" }, diagnostic.source));
|
24971 |
}), diagnostic.source && crelt("div", { class: "cm-diagnosticSource" }, diagnostic.source));
|
| 24276 |
}
|
24972 |
}
|
| 24277 |
class DiagnosticWidget extends WidgetType {
|
24973 |
class DiagnosticWidget extends WidgetType {
|
| 24278 |
constructor(diagnostic) {
|
24974 |
constructor(sev) {
|
| 24279 |
super();
|
24975 |
super();
|
| 24280 |
this.diagnostic = diagnostic;
|
24976 |
this.sev = sev;
|
| 24281 |
}
|
24977 |
}
|
| 24282 |
eq(other) { return other.diagnostic == this.diagnostic; }
|
24978 |
eq(other) { return other.sev == this.sev; }
|
| 24283 |
toDOM() {
|
24979 |
toDOM() {
|
| 24284 |
return crelt("span", { class: "cm-lintPoint cm-lintPoint-" + this.diagnostic.severity });
|
24980 |
return crelt("span", { class: "cm-lintPoint cm-lintPoint-" + this.sev });
|
| 24285 |
}
|
24981 |
}
|
| 24286 |
}
|
24982 |
}
|
| 24287 |
class PanelItem {
|
24983 |
class PanelItem {
|
| 24288 |
constructor(view, diagnostic) {
|
24984 |
constructor(view, diagnostic) {
|
| 24289 |
this.diagnostic = diagnostic;
|
24985 |
this.diagnostic = diagnostic;
|
| Línea 24362... |
Línea 25058... |
| 24362 |
return -1;
|
25058 |
return -1;
|
| 24363 |
}
|
25059 |
}
|
| 24364 |
update() {
|
25060 |
update() {
|
| 24365 |
let { diagnostics, selected } = this.view.state.field(lintState);
|
25061 |
let { diagnostics, selected } = this.view.state.field(lintState);
|
| 24366 |
let i = 0, needsSync = false, newSelectedItem = null;
|
25062 |
let i = 0, needsSync = false, newSelectedItem = null;
|
| - |
|
25063 |
let seen = new Set();
|
| 24367 |
diagnostics.between(0, this.view.state.doc.length, (_start, _end, { spec }) => {
|
25064 |
diagnostics.between(0, this.view.state.doc.length, (_start, _end, { spec }) => {
|
| 24368 |
let found = -1, item;
|
- |
|
| 24369 |
for (let j = i; j < this.items.length; j++)
|
25065 |
for (let diagnostic of spec.diagnostics) {
|
| 24370 |
if (this.items[j].diagnostic == spec.diagnostic) {
|
25066 |
if (seen.has(diagnostic))
|
| 24371 |
found = j;
|
25067 |
continue;
|
| 24372 |
break;
|
25068 |
seen.add(diagnostic);
|
| 24373 |
}
|
- |
|
| 24374 |
if (found < 0) {
|
25069 |
let found = -1, item;
|
| 24375 |
item = new PanelItem(this.view, spec.diagnostic);
|
25070 |
for (let j = i; j < this.items.length; j++)
|
| 24376 |
this.items.splice(i, 0, item);
|
25071 |
if (this.items[j].diagnostic == diagnostic) {
|
| 24377 |
needsSync = true;
|
25072 |
found = j;
|
| 24378 |
}
|
25073 |
break;
|
| 24379 |
else {
|
25074 |
}
|
| 24380 |
item = this.items[found];
|
25075 |
if (found < 0) {
|
| 24381 |
if (found > i) {
|
25076 |
item = new PanelItem(this.view, diagnostic);
|
| 24382 |
this.items.splice(i, found - i);
|
25077 |
this.items.splice(i, 0, item);
|
| 24383 |
needsSync = true;
|
25078 |
needsSync = true;
|
| 24384 |
}
|
25079 |
}
|
| 24385 |
}
|
25080 |
else {
|
| 24386 |
if (selected && item.diagnostic == selected.diagnostic) {
|
25081 |
item = this.items[found];
|
| 24387 |
if (!item.dom.hasAttribute("aria-selected")) {
|
25082 |
if (found > i) {
|
| 24388 |
item.dom.setAttribute("aria-selected", "true");
|
25083 |
this.items.splice(i, found - i);
|
| 24389 |
newSelectedItem = item;
|
25084 |
needsSync = true;
|
| - |
|
25085 |
}
|
| 24390 |
}
|
25086 |
}
|
| - |
|
25087 |
if (selected && item.diagnostic == selected.diagnostic) {
|
| - |
|
25088 |
if (!item.dom.hasAttribute("aria-selected")) {
|
| - |
|
25089 |
item.dom.setAttribute("aria-selected", "true");
|
| - |
|
25090 |
newSelectedItem = item;
|
| - |
|
25091 |
}
|
| - |
|
25092 |
}
|
| - |
|
25093 |
else if (item.dom.hasAttribute("aria-selected")) {
|
| - |
|
25094 |
item.dom.removeAttribute("aria-selected");
|
| - |
|
25095 |
}
|
| - |
|
25096 |
i++;
|
| 24391 |
}
|
25097 |
}
|
| 24392 |
else if (item.dom.hasAttribute("aria-selected")) {
|
- |
|
| 24393 |
item.dom.removeAttribute("aria-selected");
|
- |
|
| 24394 |
}
|
- |
|
| 24395 |
i++;
|
- |
|
| 24396 |
});
|
25098 |
});
|
| 24397 |
while (i < this.items.length && !(this.items.length == 1 && this.items[0].diagnostic.from < 0)) {
|
25099 |
while (i < this.items.length && !(this.items.length == 1 && this.items[0].diagnostic.from < 0)) {
|
| 24398 |
needsSync = true;
|
25100 |
needsSync = true;
|
| 24399 |
this.items.pop();
|
25101 |
this.items.pop();
|
| 24400 |
}
|
25102 |
}
|
| Línea 24556... |
Línea 25258... |
| 24556 |
padding: 0,
|
25258 |
padding: 0,
|
| 24557 |
margin: 0
|
25259 |
margin: 0
|
| 24558 |
}
|
25260 |
}
|
| 24559 |
}
|
25261 |
}
|
| 24560 |
});
|
25262 |
});
|
| - |
|
25263 |
function severityWeight(sev) {
|
| - |
|
25264 |
return sev == "error" ? 4 : sev == "warning" ? 3 : sev == "info" ? 2 : 1;
|
| - |
|
25265 |
}
|
| - |
|
25266 |
function maxSeverity(diagnostics) {
|
| - |
|
25267 |
let sev = "hint", weight = 1;
|
| - |
|
25268 |
for (let d of diagnostics) {
|
| - |
|
25269 |
let w = severityWeight(d.severity);
|
| - |
|
25270 |
if (w > weight) {
|
| - |
|
25271 |
weight = w;
|
| - |
|
25272 |
sev = d.severity;
|
| - |
|
25273 |
}
|
| - |
|
25274 |
}
|
| - |
|
25275 |
return sev;
|
| - |
|
25276 |
}
|
| 24561 |
const lintExtensions = [
|
25277 |
const lintExtensions = [
|
| 24562 |
lintState,
|
25278 |
lintState,
|
| 24563 |
/*@__PURE__*/EditorView.decorations.compute([lintState], state => {
|
25279 |
/*@__PURE__*/EditorView.decorations.compute([lintState], state => {
|
| 24564 |
let { selected, panel } = state.field(lintState);
|
25280 |
let { selected, panel } = state.field(lintState);
|
| 24565 |
return !selected || !panel || selected.from == selected.to ? Decoration.none : Decoration.set([
|
25281 |
return !selected || !panel || selected.from == selected.to ? Decoration.none : Decoration.set([
|
| Línea 24760... |
Línea 25476... |
| 24760 |
*/
|
25476 |
*/
|
| 24761 |
reduce(action) {
|
25477 |
reduce(action) {
|
| 24762 |
var _a;
|
25478 |
var _a;
|
| 24763 |
let depth = action >> 19 /* Action.ReduceDepthShift */, type = action & 65535 /* Action.ValueMask */;
|
25479 |
let depth = action >> 19 /* Action.ReduceDepthShift */, type = action & 65535 /* Action.ValueMask */;
|
| 24764 |
let { parser } = this.p;
|
25480 |
let { parser } = this.p;
|
| - |
|
25481 |
let lookaheadRecord = this.reducePos < this.pos - 25 /* Lookahead.Margin */;
|
| - |
|
25482 |
if (lookaheadRecord)
|
| - |
|
25483 |
this.setLookAhead(this.pos);
|
| 24765 |
let dPrec = parser.dynamicPrecedence(type);
|
25484 |
let dPrec = parser.dynamicPrecedence(type);
|
| 24766 |
if (dPrec)
|
25485 |
if (dPrec)
|
| 24767 |
this.score += dPrec;
|
25486 |
this.score += dPrec;
|
| 24768 |
if (depth == 0) {
|
25487 |
if (depth == 0) {
|
| 24769 |
this.pushState(parser.getGoto(this.state, type, true), this.reducePos);
|
25488 |
this.pushState(parser.getGoto(this.state, type, true), this.reducePos);
|
| 24770 |
// Zero-depth reductions are a special case—they add stuff to
|
25489 |
// Zero-depth reductions are a special case—they add stuff to
|
| 24771 |
// the stack without popping anything off.
|
25490 |
// the stack without popping anything off.
|
| 24772 |
if (type < parser.minRepeatTerm)
|
25491 |
if (type < parser.minRepeatTerm)
|
| 24773 |
this.storeNode(type, this.reducePos, this.reducePos, 4, true);
|
25492 |
this.storeNode(type, this.reducePos, this.reducePos, lookaheadRecord ? 8 : 4, true);
|
| 24774 |
this.reduceContext(type, this.reducePos);
|
25493 |
this.reduceContext(type, this.reducePos);
|
| 24775 |
return;
|
25494 |
return;
|
| 24776 |
}
|
25495 |
}
|
| 24777 |
// Find the base index into `this.stack`, content after which will
|
25496 |
// Find the base index into `this.stack`, content after which will
|
| 24778 |
// be dropped. Note that with `StayFlag` reductions we need to
|
25497 |
// be dropped. Note that with `StayFlag` reductions we need to
|
| Línea 24814... |
Línea 25533... |
| 24814 |
}
|
25533 |
}
|
| 24815 |
// Shift a value into the buffer
|
25534 |
// Shift a value into the buffer
|
| 24816 |
/**
|
25535 |
/**
|
| 24817 |
@internal
|
25536 |
@internal
|
| 24818 |
*/
|
25537 |
*/
|
| 24819 |
storeNode(term, start, end, size = 4, isReduce = false) {
|
25538 |
storeNode(term, start, end, size = 4, mustSink = false) {
|
| 24820 |
if (term == 0 /* Term.Err */ &&
|
25539 |
if (term == 0 /* Term.Err */ &&
|
| 24821 |
(!this.stack.length || this.stack[this.stack.length - 1] < this.buffer.length + this.bufferBase)) {
|
25540 |
(!this.stack.length || this.stack[this.stack.length - 1] < this.buffer.length + this.bufferBase)) {
|
| 24822 |
// Try to omit/merge adjacent error nodes
|
25541 |
// Try to omit/merge adjacent error nodes
|
| 24823 |
let cur = this, top = this.buffer.length;
|
25542 |
let cur = this, top = this.buffer.length;
|
| 24824 |
if (top == 0 && cur.parent) {
|
25543 |
if (top == 0 && cur.parent) {
|
| Línea 24832... |
Línea 25551... |
| 24832 |
cur.buffer[top - 2] = end;
|
25551 |
cur.buffer[top - 2] = end;
|
| 24833 |
return;
|
25552 |
return;
|
| 24834 |
}
|
25553 |
}
|
| 24835 |
}
|
25554 |
}
|
| 24836 |
}
|
25555 |
}
|
| 24837 |
if (!isReduce || this.pos == end) { // Simple case, just append
|
25556 |
if (!mustSink || this.pos == end) { // Simple case, just append
|
| 24838 |
this.buffer.push(term, start, end, size);
|
25557 |
this.buffer.push(term, start, end, size);
|
| 24839 |
}
|
25558 |
}
|
| 24840 |
else { // There may be skipped nodes that have to be moved forward
|
25559 |
else { // There may be skipped nodes that have to be moved forward
|
| 24841 |
let index = this.buffer.length;
|
25560 |
let index = this.buffer.length;
|
| 24842 |
if (index > 0 && this.buffer[index - 4] != 0 /* Term.Err */)
|
25561 |
if (index > 0 && this.buffer[index - 4] != 0 /* Term.Err */) {
|
| 24843 |
while (index > 0 && this.buffer[index - 2] > end) {
|
- |
|
| 24844 |
// Move this record forward
|
25562 |
let mustMove = false;
|
| 24845 |
this.buffer[index] = this.buffer[index - 4];
|
- |
|
| 24846 |
this.buffer[index + 1] = this.buffer[index - 3];
|
- |
|
| 24847 |
this.buffer[index + 2] = this.buffer[index - 2];
|
25563 |
for (let scan = index; scan > 0 && this.buffer[scan - 2] > end; scan -= 4) {
|
| 24848 |
this.buffer[index + 3] = this.buffer[index - 1];
|
25564 |
if (this.buffer[scan - 1] >= 0) {
|
| 24849 |
index -= 4;
|
25565 |
mustMove = true;
|
| 24850 |
if (size > 4)
|
25566 |
break;
|
| 24851 |
size -= 4;
|
25567 |
}
|
| 24852 |
}
|
25568 |
}
|
| - |
|
25569 |
if (mustMove)
|
| - |
|
25570 |
while (index > 0 && this.buffer[index - 2] > end) {
|
| - |
|
25571 |
// Move this record forward
|
| - |
|
25572 |
this.buffer[index] = this.buffer[index - 4];
|
| - |
|
25573 |
this.buffer[index + 1] = this.buffer[index - 3];
|
| - |
|
25574 |
this.buffer[index + 2] = this.buffer[index - 2];
|
| - |
|
25575 |
this.buffer[index + 3] = this.buffer[index - 1];
|
| - |
|
25576 |
index -= 4;
|
| - |
|
25577 |
if (size > 4)
|
| - |
|
25578 |
size -= 4;
|
| - |
|
25579 |
}
|
| - |
|
25580 |
}
|
| 24853 |
this.buffer[index] = term;
|
25581 |
this.buffer[index] = term;
|
| 24854 |
this.buffer[index + 1] = start;
|
25582 |
this.buffer[index + 1] = start;
|
| 24855 |
this.buffer[index + 2] = end;
|
25583 |
this.buffer[index + 2] = end;
|
| 24856 |
this.buffer[index + 3] = size;
|
25584 |
this.buffer[index + 3] = size;
|
| 24857 |
}
|
25585 |
}
|
| Línea 25669... |
Línea 26397... |
| 25669 |
cursor.moveTo(pos);
|
26397 |
cursor.moveTo(pos);
|
| 25670 |
for (;;) {
|
26398 |
for (;;) {
|
| 25671 |
if (!(side < 0 ? cursor.childBefore(pos) : cursor.childAfter(pos)))
|
26399 |
if (!(side < 0 ? cursor.childBefore(pos) : cursor.childAfter(pos)))
|
| 25672 |
for (;;) {
|
26400 |
for (;;) {
|
| 25673 |
if ((side < 0 ? cursor.to < pos : cursor.from > pos) && !cursor.type.isError)
|
26401 |
if ((side < 0 ? cursor.to < pos : cursor.from > pos) && !cursor.type.isError)
|
| 25674 |
return side < 0 ? Math.max(0, Math.min(cursor.to - 1, pos - 25 /* Safety.Margin */))
|
26402 |
return side < 0 ? Math.max(0, Math.min(cursor.to - 1, pos - 25 /* Lookahead.Margin */))
|
| 25675 |
: Math.min(tree.length, Math.max(cursor.from + 1, pos + 25 /* Safety.Margin */));
|
26403 |
: Math.min(tree.length, Math.max(cursor.from + 1, pos + 25 /* Lookahead.Margin */));
|
| 25676 |
if (side < 0 ? cursor.prevSibling() : cursor.nextSibling())
|
26404 |
if (side < 0 ? cursor.prevSibling() : cursor.nextSibling())
|
| 25677 |
break;
|
26405 |
break;
|
| 25678 |
if (!cursor.parent())
|
26406 |
if (!cursor.parent())
|
| 25679 |
return side < 0 ? 0 : tree.length;
|
26407 |
return side < 0 ? 0 : tree.length;
|
| 25680 |
}
|
26408 |
}
|
| Línea 25788... |
Línea 26516... |
| 25788 |
if (tokenizer.contextual || token.start != stack.pos || token.mask != mask || token.context != context) {
|
26516 |
if (tokenizer.contextual || token.start != stack.pos || token.mask != mask || token.context != context) {
|
| 25789 |
this.updateCachedToken(token, tokenizer, stack);
|
26517 |
this.updateCachedToken(token, tokenizer, stack);
|
| 25790 |
token.mask = mask;
|
26518 |
token.mask = mask;
|
| 25791 |
token.context = context;
|
26519 |
token.context = context;
|
| 25792 |
}
|
26520 |
}
|
| 25793 |
if (token.lookAhead > token.end + 25 /* Safety.Margin */)
|
26521 |
if (token.lookAhead > token.end + 25 /* Lookahead.Margin */)
|
| 25794 |
lookAhead = Math.max(token.lookAhead, lookAhead);
|
26522 |
lookAhead = Math.max(token.lookAhead, lookAhead);
|
| 25795 |
if (token.value != 0 /* Term.Err */) {
|
26523 |
if (token.value != 0 /* Term.Err */) {
|
| 25796 |
let startIndex = actionIndex;
|
26524 |
let startIndex = actionIndex;
|
| 25797 |
if (token.extended > -1)
|
26525 |
if (token.extended > -1)
|
| 25798 |
actionIndex = this.addActions(stack, token.extended, token.end, actionIndex);
|
26526 |
actionIndex = this.addActions(stack, token.extended, token.end, actionIndex);
|
| Línea 26598... |
Línea 27326... |
| 26598 |
name += String.fromCharCode(next);
|
27326 |
name += String.fromCharCode(next);
|
| 26599 |
next = input.peek(++offset);
|
27327 |
next = input.peek(++offset);
|
| 26600 |
}
|
27328 |
}
|
| 26601 |
// Undefined to signal there's a <? or <!, null for just missing
|
27329 |
// Undefined to signal there's a <? or <!, null for just missing
|
| 26602 |
cachedInput$1 = input; cachedPos$1 = pos;
|
27330 |
cachedInput$1 = input; cachedPos$1 = pos;
|
| 26603 |
return cachedName$1 = name ? name.toLowerCase() : next == question || next == bang ? undefined : null
|
27331 |
return cachedName$1 = name ? name.toLowerCase() : next == question$1 || next == bang ? undefined : null
|
| 26604 |
}
|
27332 |
}
|
| Línea 26605... |
Línea 27333... |
| 26605 |
|
27333 |
|
| Línea 26606... |
Línea 27334... |
| 26606 |
const lessThan = 60, greaterThan = 62, slash$1 = 47, question = 63, bang = 33, dash$1 = 45;
|
27334 |
const lessThan = 60, greaterThan = 62, slash$1 = 47, question$1 = 63, bang = 33, dash$1 = 45;
|
| 26607 |
|
27335 |
|
| 26608 |
function ElementContext$1(name, parent) {
|
27336 |
function ElementContext$1(name, parent) {
|
| 26609 |
this.name = name;
|
- |
|
| 26610 |
this.parent = parent;
|
- |
|
| 26611 |
this.hash = parent ? parent.hash : 0;
|
27337 |
this.name = name;
|
| Línea 26612... |
Línea 27338... |
| 26612 |
for (let i = 0; i < name.length; i++) this.hash += (this.hash << 4) + name.charCodeAt(i) + (name.charCodeAt(i) << 8);
|
27338 |
this.parent = parent;
|
| Línea 26613... |
Línea 27339... |
| 26613 |
}
|
27339 |
}
|
| Línea 26625... |
Línea 27351... |
| 26625 |
reuse(context, node, stack, input) {
|
27351 |
reuse(context, node, stack, input) {
|
| 26626 |
let type = node.type.id;
|
27352 |
let type = node.type.id;
|
| 26627 |
return type == StartTag$1 || type == OpenTag$1
|
27353 |
return type == StartTag$1 || type == OpenTag$1
|
| 26628 |
? new ElementContext$1(tagNameAfter$1(input, 1) || "", context) : context
|
27354 |
? new ElementContext$1(tagNameAfter$1(input, 1) || "", context) : context
|
| 26629 |
},
|
27355 |
},
|
| 26630 |
hash(context) { return context ? context.hash : 0 },
|
- |
|
| 26631 |
strict: false
|
27356 |
strict: false
|
| 26632 |
});
|
27357 |
});
|
| Línea 26633... |
Línea 27358... |
| 26633 |
|
27358 |
|
| 26634 |
const tagStart = new ExternalTokenizer((input, stack) => {
|
27359 |
const tagStart = new ExternalTokenizer((input, stack) => {
|
| Línea 26828... |
Línea 27553... |
| 26828 |
if (id == TextareaText) return maybeNest(node, input, textarea)
|
27553 |
if (id == TextareaText) return maybeNest(node, input, textarea)
|
| Línea 26829... |
Línea 27554... |
| 26829 |
|
27554 |
|
| 26830 |
if (id == Element$2 && other.length) {
|
27555 |
if (id == Element$2 && other.length) {
|
| 26831 |
let n = node.node, open = n.firstChild, tagName = open && findTagName(open, input), attrs;
|
27556 |
let n = node.node, open = n.firstChild, tagName = open && findTagName(open, input), attrs;
|
| 26832 |
if (tagName) for (let tag of other) {
|
27557 |
if (tagName) for (let tag of other) {
|
| 26833 |
if (tag.tag == tagName && (!tag.attrs || tag.attrs(attrs || (attrs = getAttrs(n, input))))) {
|
27558 |
if (tag.tag == tagName && (!tag.attrs || tag.attrs(attrs || (attrs = getAttrs(open, input))))) {
|
| 26834 |
let close = n.lastChild;
|
27559 |
let close = n.lastChild;
|
| 26835 |
let to = close.type.id == CloseTag ? close.from : n.to;
|
27560 |
let to = close.type.id == CloseTag ? close.from : n.to;
|
| 26836 |
if (to > open.to)
|
27561 |
if (to > open.to)
|
| 26837 |
return {parser: tag.parser, overlay: [{from: open.to, to}]}
|
27562 |
return {parser: tag.parser, overlay: [{from: open.to, to}]}
|
| Línea 26859... |
Línea 27584... |
| 26859 |
return null
|
27584 |
return null
|
| 26860 |
})
|
27585 |
})
|
| 26861 |
}
|
27586 |
}
|
| Línea 26862... |
Línea 27587... |
| 26862 |
|
27587 |
|
| 26863 |
// This file was generated by lezer-generator. You probably shouldn't edit it.
|
27588 |
// This file was generated by lezer-generator. You probably shouldn't edit it.
|
| 26864 |
const descendantOp = 99,
|
27589 |
const descendantOp = 100,
|
| 26865 |
Unit = 1,
|
27590 |
Unit = 1,
|
| 26866 |
callee = 100,
|
27591 |
callee = 101,
|
| 26867 |
identifier$2 = 101,
|
27592 |
identifier$2 = 102,
|
| Línea 26868... |
Línea 27593... |
| 26868 |
VariableName = 2;
|
27593 |
VariableName = 2;
|
| 26869 |
|
27594 |
|
| Línea 26870... |
Línea 27595... |
| 26870 |
/* Hand-written tokenizers for CSS tokens that can't be
|
27595 |
/* Hand-written tokenizers for CSS tokens that can't be
|
| 26871 |
expressed by Lezer's built-in tokenizer. */
|
27596 |
expressed by Lezer's built-in tokenizer. */
|
| 26872 |
|
27597 |
|
| 26873 |
const space$1 = [9, 10, 11, 12, 13, 32, 133, 160, 5760, 8192, 8193, 8194, 8195, 8196, 8197,
|
27598 |
const space$1 = [9, 10, 11, 12, 13, 32, 133, 160, 5760, 8192, 8193, 8194, 8195, 8196, 8197,
|
| Línea 26874... |
Línea 27599... |
| 26874 |
8198, 8199, 8200, 8201, 8202, 8232, 8233, 8239, 8287, 12288];
|
27599 |
8198, 8199, 8200, 8201, 8202, 8232, 8233, 8239, 8287, 12288];
|
| Línea 26875... |
Línea 27600... |
| 26875 |
const colon = 58, parenL = 40, underscore = 95, bracketL = 91, dash = 45, period = 46,
|
27600 |
const colon = 58, parenL = 40, underscore = 95, bracketL$1 = 91, dash = 45, period = 46,
|
| Línea 26900... |
Línea 27625... |
| 26900 |
|
27625 |
|
| 26901 |
const descendant = new ExternalTokenizer(input => {
|
27626 |
const descendant = new ExternalTokenizer(input => {
|
| 26902 |
if (space$1.includes(input.peek(-1))) {
|
27627 |
if (space$1.includes(input.peek(-1))) {
|
| 26903 |
let {next} = input;
|
27628 |
let {next} = input;
|
| 26904 |
if (isAlpha(next) || next == underscore || next == hash || next == period ||
|
27629 |
if (isAlpha(next) || next == underscore || next == hash || next == period ||
|
| 26905 |
next == bracketL || next == colon && isAlpha(input.peek(1)) ||
|
27630 |
next == bracketL$1 || next == colon && isAlpha(input.peek(1)) ||
|
| 26906 |
next == dash || next == ampersand)
|
27631 |
next == dash || next == ampersand)
|
| 26907 |
input.acceptToken(descendantOp);
|
27632 |
input.acceptToken(descendantOp);
|
| 26908 |
}
|
27633 |
}
|
| Línea 26953... |
Línea 27678... |
| 26953 |
"[ ]": tags$1.squareBracket,
|
27678 |
"[ ]": tags$1.squareBracket,
|
| 26954 |
"{ }": tags$1.brace
|
27679 |
"{ }": tags$1.brace
|
| 26955 |
});
|
27680 |
});
|
| Línea 26956... |
Línea 27681... |
| 26956 |
|
27681 |
|
| 26957 |
// This file was generated by lezer-generator. You probably shouldn't edit it.
|
27682 |
// This file was generated by lezer-generator. You probably shouldn't edit it.
|
| 26958 |
const spec_callee = {__proto__:null,lang:32, "nth-child":32, "nth-last-child":32, "nth-of-type":32, "nth-last-of-type":32, dir:32, "host-context":32, url:60, "url-prefix":60, domain:60, regexp:60, selector:138};
|
27683 |
const spec_callee = {__proto__:null,lang:34, "nth-child":34, "nth-last-child":34, "nth-of-type":34, "nth-last-of-type":34, dir:34, "host-context":34, url:62, "url-prefix":62, domain:62, regexp:62, selector:140};
|
| 26959 |
const spec_AtKeyword = {__proto__:null,"@import":118, "@media":142, "@charset":146, "@namespace":150, "@keyframes":156, "@supports":168};
|
27684 |
const spec_AtKeyword = {__proto__:null,"@import":120, "@media":144, "@charset":148, "@namespace":152, "@keyframes":158, "@supports":170};
|
| 26960 |
const spec_identifier$1 = {__proto__:null,not:132, only:132};
|
27685 |
const spec_identifier$1 = {__proto__:null,not:134, only:134};
|
| 26961 |
const parser$2 = LRParser.deserialize({
|
27686 |
const parser$2 = LRParser.deserialize({
|
| 26962 |
version: 14,
|
27687 |
version: 14,
|
| 26963 |
states: ":^QYQ[OOO#_Q[OOP#fOWOOOOQP'#Cd'#CdOOQP'#Cc'#CcO#kQ[O'#CfO$_QXO'#CaO$fQ[O'#ChO$qQ[O'#DTO$vQ[O'#DWOOQP'#Em'#EmO${QdO'#DgO%jQ[O'#DtO${QdO'#DvO%{Q[O'#DxO&WQ[O'#D{O&`Q[O'#ERO&nQ[O'#ETOOQS'#El'#ElOOQS'#EW'#EWQYQ[OOO&uQXO'#CdO'jQWO'#DcO'oQWO'#EsO'zQ[O'#EsQOQWOOP(UO#tO'#C_POOO)C@[)C@[OOQP'#Cg'#CgOOQP,59Q,59QO#kQ[O,59QO(aQ[O'#E[O({QWO,58{O)TQ[O,59SO$qQ[O,59oO$vQ[O,59rO(aQ[O,59uO(aQ[O,59wO(aQ[O,59xO)`Q[O'#DbOOQS,58{,58{OOQP'#Ck'#CkOOQO'#DR'#DROOQP,59S,59SO)gQWO,59SO)lQWO,59SOOQP'#DV'#DVOOQP,59o,59oOOQO'#DX'#DXO)qQ`O,59rOOQS'#Cp'#CpO${QdO'#CqO)yQvO'#CsO+ZQtO,5:ROOQO'#Cx'#CxO)lQWO'#CwO+oQWO'#CyO+tQ[O'#DOOOQS'#Ep'#EpOOQO'#Dj'#DjO+|Q[O'#DqO,[QWO'#EtO&`Q[O'#DoO,jQWO'#DrOOQO'#Eu'#EuO)OQWO,5:`O,oQpO,5:bOOQS'#Dz'#DzO,wQWO,5:dO,|Q[O,5:dOOQO'#D}'#D}O-UQWO,5:gO-ZQWO,5:mO-cQWO,5:oOOQS-E8U-E8UO${QdO,59}O-kQ[O'#E^O-xQWO,5;_O-xQWO,5;_POOO'#EV'#EVP.TO#tO,58yPOOO,58y,58yOOQP1G.l1G.lO.zQXO,5:vOOQO-E8Y-E8YOOQS1G.g1G.gOOQP1G.n1G.nO)gQWO1G.nO)lQWO1G.nOOQP1G/Z1G/ZO/XQ`O1G/^O/rQXO1G/aO0YQXO1G/cO0pQXO1G/dO1WQWO,59|O1]Q[O'#DSO1dQdO'#CoOOQP1G/^1G/^O${QdO1G/^O1kQpO,59]OOQS,59_,59_O${QdO,59aO1sQWO1G/mOOQS,59c,59cO1xQ!bO,59eOOQS'#DP'#DPOOQS'#EY'#EYO2QQ[O,59jOOQS,59j,59jO2YQWO'#DjO2eQWO,5:VO2jQWO,5:]O&`Q[O,5:XO&`Q[O'#E_O2rQWO,5;`O2}QWO,5:ZO(aQ[O,5:^OOQS1G/z1G/zOOQS1G/|1G/|OOQS1G0O1G0OO3`QWO1G0OO3eQdO'#EOOOQS1G0R1G0ROOQS1G0X1G0XOOQS1G0Z1G0ZO3pQtO1G/iOOQO,5:x,5:xO4WQ[O,5:xOOQO-E8[-E8[O4eQWO1G0yPOOO-E8T-E8TPOOO1G.e1G.eOOQP7+$Y7+$YOOQP7+$x7+$xO${QdO7+$xOOQS1G/h1G/hO4pQXO'#ErO4wQWO,59nO4|QtO'#EXO5tQdO'#EoO6OQWO,59ZO6TQpO7+$xOOQS1G.w1G.wOOQS1G.{1G.{OOQS7+%X7+%XO6]QWO1G/POOQS-E8W-E8WOOQS1G/U1G/UO${QdO1G/qOOQO1G/w1G/wOOQO1G/s1G/sO6bQWO,5:yOOQO-E8]-E8]O6pQXO1G/xOOQS7+%j7+%jO6wQYO'#CsOOQO'#EQ'#EQO7SQ`O'#EPOOQO'#EP'#EPO7_QWO'#E`O7gQdO,5:jOOQS,5:j,5:jO7rQtO'#E]O${QdO'#E]O8sQdO7+%TOOQO7+%T7+%TOOQO1G0d1G0dO9WQpO<<HdO9`QWO,5;^OOQP1G/Y1G/YOOQS-E8V-E8VO${QdO'#EZO9hQWO,5;ZOOQT1G.u1G.uOOQP<<Hd<<HdOOQS7+$k7+$kO9pQdO7+%]OOQO7+%d7+%dOOQO,5:k,5:kO3hQdO'#EaO7_QWO,5:zOOQS,5:z,5:zOOQS-E8^-E8^OOQS1G0U1G0UO9wQtO,5:wOOQS-E8Z-E8ZOOQO<<Ho<<HoOOQPAN>OAN>OO:xQdO,5:uOOQO-E8X-E8XOOQO<<Hw<<HwOOQO,5:{,5:{OOQO-E8_-E8_OOQS1G0f1G0f",
|
27688 |
states: ":jQYQ[OOO#_Q[OOP#fOWOOOOQP'#Cd'#CdOOQP'#Cc'#CcO#kQ[O'#CfO$_QXO'#CaO$fQ[O'#CiO$qQ[O'#DUO$vQ[O'#DXOOQP'#En'#EnO${QdO'#DhO%jQ[O'#DuO${QdO'#DwO%{Q[O'#DyO&WQ[O'#D|O&`Q[O'#ESO&nQ[O'#EUOOQS'#Em'#EmOOQS'#EX'#EXQYQ[OOO&uQXO'#CdO'jQWO'#DdO'oQWO'#EsO'zQ[O'#EsQOQWOOP(UO#tO'#C_POOO)C@])C@]OOQP'#Ch'#ChOOQP,59Q,59QO#kQ[O,59QO(aQ[O'#E]O({QWO,58{O)TQ[O,59TO$qQ[O,59pO$vQ[O,59sO(aQ[O,59vO(aQ[O,59xO(aQ[O,59yO)`Q[O'#DcOOQS,58{,58{OOQP'#Cl'#ClOOQO'#DS'#DSOOQP,59T,59TO)gQWO,59TO)lQWO,59TOOQP'#DW'#DWOOQP,59p,59pOOQO'#DY'#DYO)qQ`O,59sOOQS'#Cq'#CqO${QdO'#CrO)yQvO'#CtO+ZQtO,5:SOOQO'#Cy'#CyO)lQWO'#CxO+oQWO'#CzO+tQ[O'#DPOOQS'#Ep'#EpOOQO'#Dk'#DkO+|Q[O'#DrO,[QWO'#EtO&`Q[O'#DpO,jQWO'#DsOOQO'#Eu'#EuO)OQWO,5:aO,oQpO,5:cOOQS'#D{'#D{O,wQWO,5:eO,|Q[O,5:eOOQO'#EO'#EOO-UQWO,5:hO-ZQWO,5:nO-cQWO,5:pOOQS-E8V-E8VO-kQdO,5:OO-{Q[O'#E_O.YQWO,5;_O.YQWO,5;_POOO'#EW'#EWP.eO#tO,58yPOOO,58y,58yOOQP1G.l1G.lO/[QXO,5:wOOQO-E8Z-E8ZOOQS1G.g1G.gOOQP1G.o1G.oO)gQWO1G.oO)lQWO1G.oOOQP1G/[1G/[O/iQ`O1G/_O0SQXO1G/bO0jQXO1G/dO1QQXO1G/eO1hQWO,59}O1mQ[O'#DTO1tQdO'#CpOOQP1G/_1G/_O${QdO1G/_O1{QpO,59^OOQS,59`,59`O${QdO,59bO2TQWO1G/nOOQS,59d,59dO2YQ!bO,59fOOQS'#DQ'#DQOOQS'#EZ'#EZO2eQ[O,59kOOQS,59k,59kO2mQWO'#DkO2xQWO,5:WO2}QWO,5:^O&`Q[O,5:YO&`Q[O'#E`O3VQWO,5;`O3bQWO,5:[O(aQ[O,5:_OOQS1G/{1G/{OOQS1G/}1G/}OOQS1G0P1G0PO3sQWO1G0PO3xQdO'#EPOOQS1G0S1G0SOOQS1G0Y1G0YOOQS1G0[1G0[O4TQtO1G/jOOQO1G/j1G/jOOQO,5:y,5:yO4kQ[O,5:yOOQO-E8]-E8]O4xQWO1G0yPOOO-E8U-E8UPOOO1G.e1G.eOOQP7+$Z7+$ZOOQP7+$y7+$yO${QdO7+$yOOQS1G/i1G/iO5TQXO'#ErO5[QWO,59oO5aQtO'#EYO6XQdO'#EoO6cQWO,59[O6hQpO7+$yOOQS1G.x1G.xOOQS1G.|1G.|OOQS7+%Y7+%YOOQS1G/Q1G/QO6pQWO1G/QOOQS-E8X-E8XOOQS1G/V1G/VO${QdO1G/rOOQO1G/x1G/xOOQO1G/t1G/tO6uQWO,5:zOOQO-E8^-E8^O7TQXO1G/yOOQS7+%k7+%kO7[QYO'#CtOOQO'#ER'#ERO7gQ`O'#EQOOQO'#EQ'#EQO7rQWO'#EaO7zQdO,5:kOOQS,5:k,5:kO8VQtO'#E^O${QdO'#E^O9WQdO7+%UOOQO7+%U7+%UOOQO1G0e1G0eO9kQpO<<HeO9sQWO,5;^OOQP1G/Z1G/ZOOQS-E8W-E8WO${QdO'#E[O9{QWO,5;ZOOQT1G.v1G.vOOQP<<He<<HeOOQS7+$l7+$lO:TQdO7+%^OOQO7+%e7+%eOOQO,5:l,5:lO3{QdO'#EbO7rQWO,5:{OOQS,5:{,5:{OOQS-E8_-E8_OOQS1G0V1G0VO:[QtO,5:xOOQS-E8[-E8[OOQO<<Hp<<HpOOQPAN>PAN>PO;]QdO,5:vOOQO-E8Y-E8YOOQO<<Hx<<HxOOQO,5:|,5:|OOQO-E8`-E8`OOQS1G0g1G0g",
|
| 26964 |
stateData: ";[~O#ZOS#[QQ~OUYOXYO]VO^VOqXOxWO![aO!]ZO!i[O!k]O!m^O!p_O!v`O#XRO#bTO~OQfOUYOXYO]VO^VOqXOxWO![aO!]ZO!i[O!k]O!m^O!p_O!v`O#XeO#bTO~O#U#gP~P!ZO#[jO~O#XlO~O]qO^qOqsOtoOxrO!OtO!RvO#VuO#bnO~O!TwO~P#pO`}O#WzO#XyO~O#X!OO~O#X!QO~OQ![Ob!TOf![Oh![On!YOq!ZO#W!WO#X!SO#e!UO~Ob!^O!d!`O!g!aO#X!]O!T#hP~Oh!fOn!YO#X!eO~Oh!hO#X!hO~Ob!^O!d!`O!g!aO#X!]O~O!Y#hP~P%jO]WX]!WX^WXqWXtWXxWX!OWX!RWX!TWX#VWX#bWX~O]!mO~O!Y!nO#U#gX!S#gX~O#U#gX!S#gX~P!ZO#]!qO#^!qO#_!sO~OUYOXYO]VO^VOqXOxWO#XRO#bTO~OtoO!TwO~O`!zO#WzO#XyO~O!S#gP~P!ZOb#RO~Ob#SO~Op#TO|#UO~OP#WObgXjgX!YgX!dgX!ggX#XgXagXQgXfgXhgXngXqgXtgX!XgX#UgX#WgX#egXpgX!SgX~Ob!^Oj#XO!d!`O!g!aO#X!]O!Y#hP~Ob#[O~Op#`O#X#]O~Ob!^O!d!`O!g!aO#X#aO~Ot#eO!b#dO!T#hX!Y#hX~Ob#hO~Oj#XO!Y#jO~O!Y#kO~Oh#lOn!YO~O!T#mO~O!TwO!b#dO~O!TwO!Y#pO~O!Y#QX#U#QX!S#QX~P!ZO!Y!nO#U#ga!S#ga~O#]!qO#^!qO#_#wO~O]qO^qOqsOxrO!OtO!RvO#VuO#bnO~Ot#Oa!T#Oaa#Oa~P.`Op#yO|#zO~O]qO^qOqsOxrO#bnO~Ot}i!O}i!R}i!T}i#V}ia}i~P/aOt!Pi!O!Pi!R!Pi!T!Pi#V!Pia!Pi~P/aOt!Qi!O!Qi!R!Qi!T!Qi#V!Qia!Qi~P/aO!S#{O~Oa#fP~P(aOa#cP~P${Oa$SOj#XO~O!Y$UO~Oh$VOo$VO~Op$XO#X#]O~O]!`Xa!^X!b!^X~O]$YO~Oa$ZO!b#dO~Ot#eO!T#ha!Y#ha~O!b#dOt!ca!T!ca!Y!caa!ca~O!Y$`O~O!S$gO#X$bO#e$aO~Oj#XOt$iO!X$kO!Y!Vi#U!Vi!S!Vi~P${O!Y#Qa#U#Qa!S#Qa~P!ZO!Y!nO#U#gi!S#gi~Oa#fX~P#pOa$oO~Oj#XOQ!{Xa!{Xb!{Xf!{Xh!{Xn!{Xq!{Xt!{X#W!{X#X!{X#e!{X~Ot$qOa#cX~P${Oa$sO~Oj#XOp$tO~Oa$uO~O!b#dOt#Ra!T#Ra!Y#Ra~Oa$wO~P.`OP#WOtgX!TgX~O#e$aOt!sX!T!sX~Ot$yO!TwO~O!S$}O#X$bO#e$aO~Oj#XOQ#PXb#PXf#PXh#PXn#PXq#PXt#PX!X#PX!Y#PX#U#PX#W#PX#X#PX#e#PX!S#PX~Ot$iO!X%QO!Y!Vq#U!Vq!S!Vq~P${Oj#XOp%RO~OtoOa#fa~Ot$qOa#ca~Oa%UO~P${Oj#XOQ#Pab#Paf#Pah#Pan#Paq#Pat#Pa!X#Pa!Y#Pa#U#Pa#W#Pa#X#Pa#e#Pa!S#Pa~Oa!}at!}a~P${O#Zo#[#ej!R#e~",
|
27689 |
stateData: ";o~O#[OS#]QQ~OUYOXYOZTO^VO_VOrXOyWO!]aO!^ZO!j[O!l]O!n^O!q_O!w`O#YRO~OQfOUYOXYOZTO^VO_VOrXOyWO!]aO!^ZO!j[O!l]O!n^O!q_O!w`O#YeO~O#V#gP~P!ZO#]jO~O#YlO~OZnO^qO_qOrsOuoOyrO!PtO!SvO#WuO~O!UwO~P#pOa}O#XzO#YyO~O#Y!OO~O#Y!QO~OQ![Oc!TOg![Oi![Oo!YOr!ZO#X!WO#Y!SO#e!UO~Oc!^O!e!`O!h!aO#Y!]O!U#hP~Oi!fOo!YO#Y!eO~Oi!hO#Y!hO~Oc!^O!e!`O!h!aO#Y!]O~O!Z#hP~P%jOZWX^WX^!XX_WXrWXuWXyWX!PWX!SWX!UWX#WWX~O^!mO~O!Z!nO#V#gX!T#gX~O#V#gX!T#gX~P!ZO#^!qO#_!qO#`!sO~OUYOXYOZTO^VO_VOrXOyWO#YRO~OuoO!UwO~Oa!zO#XzO#YyO~O!T#gP~P!ZOc#RO~Oc#SO~Oq#TO}#UO~OP#WOchXkhX!ZhX!ehX!hhX#YhXbhXQhXghXihXohXrhXuhX!YhX#VhX#XhX#ehXqhX!ThX~Oc!^Ok#XO!e!`O!h!aO#Y!]O!Z#hP~Oc#[O~Oq#`O#Y#]O~Oc!^O!e!`O!h!aO#Y#aO~Ou#eO!c#dO!U#hX!Z#hX~Oc#hO~Ok#XO!Z#jO~O!Z#kO~Oi#lOo!YO~O!U#mO~O!UwO!c#dO~O!UwO!Z#pO~O!Y#rO!Z!Wa#V!Wa!T!Wa~P${O!Z#RX#V#RX!T#RX~P!ZO!Z!nO#V#ga!T#ga~O#^!qO#_!qO#`#xO~OZnO^qO_qOrsOyrO!PtO!SvO#WuO~Ou#Pa!U#Pab#Pa~P.pOq#zO}#{O~OZnO^qO_qOrsOyrO~Ou!Oi!P!Oi!S!Oi!U!Oi#W!Oib!Oi~P/qOu!Qi!P!Qi!S!Qi!U!Qi#W!Qib!Qi~P/qOu!Ri!P!Ri!S!Ri!U!Ri#W!Rib!Ri~P/qO!T#|O~Ob#fP~P(aOb#cP~P${Ob$TOk#XO~O!Z$VO~Ob$WOi$XOp$XO~Oq$ZO#Y#]O~O^!aXb!_X!c!_X~O^$[O~Ob$]O!c#dO~Ou#eO!U#ha!Z#ha~O!c#dOu!da!U!da!Z!dab!da~O!Z$bO~O!T$iO#Y$dO#e$cO~Ok#XOu$kO!Y$mO!Z!Wi#V!Wi!T!Wi~P${O!Z#Ra#V#Ra!T#Ra~P!ZO!Z!nO#V#gi!T#gi~Ob#fX~P#pOb$qO~Ok#XOQ!|Xb!|Xc!|Xg!|Xi!|Xo!|Xr!|Xu!|X#X!|X#Y!|X#e!|X~Ou$sOb#cX~P${Ob$uO~Ok#XOq$vO~Ob$wO~O!c#dOu#Sa!U#Sa!Z#Sa~Ob$yO~P.pOP#WOuhX!UhX~O#e$cOu!tX!U!tX~Ou${O!UwO~O!T%PO#Y$dO#e$cO~Ok#XOQ#QXc#QXg#QXi#QXo#QXr#QXu#QX!Y#QX!Z#QX#V#QX#X#QX#Y#QX#e#QX!T#QX~Ou$kO!Y%SO!Z!Wq#V!Wq!T!Wq~P${Ok#XOq%TO~OuoOb#fa~Ou$sOb#ca~Ob%WO~P${Ok#XOQ#Qac#Qag#Qai#Qao#Qar#Qau#Qa!Y#Qa!Z#Qa#V#Qa#X#Qa#Y#Qa#e#Qa!T#Qa~Ob#Oau#Oa~P${O#[p#]#ek!S#e~",
|
| 26965 |
goto: "-g#jPPP#kP#nP#w$WP#w$g#wPP$mPPP$s$|$|P%`P$|P$|%z&^PPPP$|&vP&z'Q#wP'W#w'^P#wP#w#wPPP'd'y(WPP#nPP(_(_(i(_P(_P(_(_P#nP#nP#nP(l#nP(o(r(u(|#nP#nP)R)X)h)v)|*S*^*d*n*t*zPPPPPPPPPP+Q+ZP+v+yP,o,r,x-RRkQ_bOPdhw!n#skYOPdhotuvw!n#R#h#skSOPdhotuvw!n#R#h#sQmTR!tnQ{VR!xqQ!x}Q#Z!XR#x!zq![Z]!T!m#S#U#X#q#z$P$Y$i$j$q$v%Sp![Z]!T!m#S#U#X#q#z$P$Y$i$j$q$v%SU$d#m$f$yR$x$cq!XZ]!T!m#S#U#X#q#z$P$Y$i$j$q$v%Sp![Z]!T!m#S#U#X#q#z$P$Y$i$j$q$v%SQ!f^R#l!gT#^!Z#_Q|VR!yqQ!x|R#x!yQ!PWR!{rQ!RXR!|sQxUQ!wpQ#i!cQ#o!jQ#p!kQ${$eR%X$zSgPwQ!phQ#r!nR$l#sZfPhw!n#sa!b[`a!V!^!`#d#eR#b!^R!g^R!i_R#n!iS$e#m$fR%V$yV$c#m$f$yQ!rjR#v!rQdOShPwU!ldh#sR#s!nQ$P#SU$p$P$v%SQ$v$YR%S$qQ#_!ZR$W#_Q$r$PR%T$rQpUS!vp$nR$n#|Q$j#qR%P$jQ!ogS#t!o#uR#u!pQ#f!_R$^#fQ$f#mR$|$fQ$z$eR%W$z_cOPdhw!n#s^UOPdhw!n#sQ!uoQ!}tQ#OuQ#PvQ#|#RR$_#hR$Q#SQ!VZQ!d]Q#V!TQ#q!m[$O#S$P$Y$q$v%SQ$R#UQ$T#XS$h#q$jQ$m#zR%O$iR#}#RQiPR#QwQ!c[Q!kaR#Y!VU!_[a!VQ!j`Q#c!^Q#g!`Q$[#dR$]#e",
|
27690 |
goto: "-g#jPPP#kP#nP#w$WP#wP$g#wPP$mPPP$s$|$|P%`P$|P$|%z&^PPPP$|&vP&z'Q#wP'W#w'^P#wP#w#wPPP'd'y(WPP#nPP(_(_(i(_P(_P(_(_P#nP#nP#nP(l#nP(o(r(u(|#nP#nP)R)X)h)v)|*S*^*d*n*t*zPPPPPPPPPP+Q+Z+v+yP,o,r,x-RRkQ_bOPdhw!n#tkYOPdhotuvw!n#R#h#tkSOPdhotuvw!n#R#h#tQmTR!tnQ{VR!xqQ!x}Q#Z!XR#y!zq![Z]!T!m#S#U#X#q#{$Q$[$k$l$s$x%Up![Z]!T!m#S#U#X#q#{$Q$[$k$l$s$x%UU$f#m$h${R$z$eq!XZ]!T!m#S#U#X#q#{$Q$[$k$l$s$x%Up![Z]!T!m#S#U#X#q#{$Q$[$k$l$s$x%UQ!f^R#l!gT#^!Z#_Q|VR!yqQ!x|R#y!yQ!PWR!{rQ!RXR!|sQxUQ!wpQ#i!cQ#o!jQ#p!kQ$}$gR%Z$|SgPwQ!phQ#s!nR$n#tZfPhw!n#ta!b[`a!V!^!`#d#eR#b!^R!g^R!i_R#n!iS$g#m$hR%X${V$e#m$h${Q!rjR#w!rQdOShPwU!ldh#tR#t!nQ$Q#SU$r$Q$x%UQ$x$[R%U$sQ#_!ZR$Y#_Q$t$QR%V$tQpUS!vp$pR$p#}Q$l#qR%R$lQ!ogS#u!o#vR#v!pQ#f!_R$`#fQ$h#mR%O$hQ$|$gR%Y$|_cOPdhw!n#t^UOPdhw!n#tQ!uoQ!}tQ#OuQ#PvQ#}#RR$a#hR$R#SQ!VZQ!d]Q#V!TQ#q!m[$P#S$Q$[$s$x%UQ$S#UQ$U#XS$j#q$lQ$o#{R%Q$kR$O#RQiPR#QwQ!c[Q!kaR#Y!VU!_[a!VQ!j`Q#c!^Q#g!`Q$^#dR$_#e",
|
| 26966 |
nodeNames: "⚠ Unit VariableName Comment StyleSheet RuleSet UniversalSelector TagSelector TagName NestingSelector ClassSelector ClassName PseudoClassSelector : :: PseudoClassName PseudoClassName ) ( ArgList ValueName ParenthesizedValue ColorLiteral NumberLiteral StringLiteral BinaryExpression BinOp CallExpression Callee CallLiteral CallTag ParenthesizedContent ] [ LineNames LineName , PseudoClassName ArgList IdSelector # IdName AttributeSelector AttributeName MatchOp ChildSelector ChildOp DescendantSelector SiblingSelector SiblingOp } { Block Declaration PropertyName Important ; ImportStatement AtKeyword import KeywordQuery FeatureQuery FeatureName BinaryQuery LogicOp UnaryQuery UnaryQueryOp ParenthesizedQuery SelectorQuery selector MediaStatement media CharsetStatement charset NamespaceStatement namespace NamespaceName KeyframesStatement keyframes KeyframeName KeyframeList KeyframeSelector KeyframeRangeName SupportsStatement supports AtRule Styles",
|
27691 |
nodeNames: "⚠ Unit VariableName Comment StyleSheet RuleSet UniversalSelector TagSelector TagName NestingSelector ClassSelector . ClassName PseudoClassSelector : :: PseudoClassName PseudoClassName ) ( ArgList ValueName ParenthesizedValue ColorLiteral NumberLiteral StringLiteral BinaryExpression BinOp CallExpression Callee CallLiteral CallTag ParenthesizedContent ] [ LineNames LineName , PseudoClassName ArgList IdSelector # IdName AttributeSelector AttributeName MatchOp ChildSelector ChildOp DescendantSelector SiblingSelector SiblingOp } { Block Declaration PropertyName Important ; ImportStatement AtKeyword import KeywordQuery FeatureQuery FeatureName BinaryQuery LogicOp UnaryQuery UnaryQueryOp ParenthesizedQuery SelectorQuery selector MediaStatement media CharsetStatement charset NamespaceStatement namespace NamespaceName KeyframesStatement keyframes KeyframeName KeyframeList KeyframeSelector KeyframeRangeName SupportsStatement supports AtRule Styles",
|
| 26967 |
maxTerm: 117,
|
27692 |
maxTerm: 117,
|
| 26968 |
nodeProps: [
|
27693 |
nodeProps: [
|
| 26969 |
["isolate", -2,3,24,""],
|
27694 |
["isolate", -2,3,25,""],
|
| 26970 |
["openedBy", 17,"(",32,"[",50,"{"],
|
27695 |
["openedBy", 18,"(",33,"[",51,"{"],
|
| 26971 |
["closedBy", 18,")",33,"]",51,"}"]
|
27696 |
["closedBy", 19,")",34,"]",52,"}"]
|
| 26972 |
],
|
27697 |
],
|
| 26973 |
propSources: [cssHighlighting],
|
27698 |
propSources: [cssHighlighting],
|
| 26974 |
skippedNodes: [0,3,87],
|
27699 |
skippedNodes: [0,3,88],
|
| 26975 |
repeatNodeCount: 11,
|
27700 |
repeatNodeCount: 11,
|
| 26976 |
tokenData: "J^~R!^OX$}X^%u^p$}pq%uqr)Xrs.Rst/utu6duv$}vw7^wx7oxy9^yz9oz{9t{|:_|}?Q}!O?c!O!P@Q!P!Q@i!Q![Ab![!]B]!]!^CX!^!_$}!_!`Cj!`!aC{!a!b$}!b!cDw!c!}$}!}#OFa#O#P$}#P#QFr#Q#R6d#R#T$}#T#UGT#U#c$}#c#dHf#d#o$}#o#pH{#p#q6d#q#rI^#r#sIo#s#y$}#y#z%u#z$f$}$f$g%u$g#BY$}#BY#BZ%u#BZ$IS$}$IS$I_%u$I_$I|$}$I|$JO%u$JO$JT$}$JT$JU%u$JU$KV$}$KV$KW%u$KW&FU$}&FU&FV%u&FV;'S$};'S;=`JW<%lO$}`%QSOy%^z;'S%^;'S;=`%o<%lO%^`%cSo`Oy%^z;'S%^;'S;=`%o<%lO%^`%rP;=`<%l%^~%zh#Z~OX%^X^'f^p%^pq'fqy%^z#y%^#y#z'f#z$f%^$f$g'f$g#BY%^#BY#BZ'f#BZ$IS%^$IS$I_'f$I_$I|%^$I|$JO'f$JO$JT%^$JT$JU'f$JU$KV%^$KV$KW'f$KW&FU%^&FU&FV'f&FV;'S%^;'S;=`%o<%lO%^~'mh#Z~o`OX%^X^'f^p%^pq'fqy%^z#y%^#y#z'f#z$f%^$f$g'f$g#BY%^#BY#BZ'f#BZ$IS%^$IS$I_'f$I_$I|%^$I|$JO'f$JO$JT%^$JT$JU'f$JU$KV%^$KV$KW'f$KW&FU%^&FU&FV'f&FV;'S%^;'S;=`%o<%lO%^l)[UOy%^z#]%^#]#^)n#^;'S%^;'S;=`%o<%lO%^l)sUo`Oy%^z#a%^#a#b*V#b;'S%^;'S;=`%o<%lO%^l*[Uo`Oy%^z#d%^#d#e*n#e;'S%^;'S;=`%o<%lO%^l*sUo`Oy%^z#c%^#c#d+V#d;'S%^;'S;=`%o<%lO%^l+[Uo`Oy%^z#f%^#f#g+n#g;'S%^;'S;=`%o<%lO%^l+sUo`Oy%^z#h%^#h#i,V#i;'S%^;'S;=`%o<%lO%^l,[Uo`Oy%^z#T%^#T#U,n#U;'S%^;'S;=`%o<%lO%^l,sUo`Oy%^z#b%^#b#c-V#c;'S%^;'S;=`%o<%lO%^l-[Uo`Oy%^z#h%^#h#i-n#i;'S%^;'S;=`%o<%lO%^l-uS!X[o`Oy%^z;'S%^;'S;=`%o<%lO%^~.UWOY.RZr.Rrs.ns#O.R#O#P.s#P;'S.R;'S;=`/o<%lO.R~.sOh~~.vRO;'S.R;'S;=`/P;=`O.R~/SXOY.RZr.Rrs.ns#O.R#O#P.s#P;'S.R;'S;=`/o;=`<%l.R<%lO.R~/rP;=`<%l.Rn/zYxQOy%^z!Q%^!Q![0j![!c%^!c!i0j!i#T%^#T#Z0j#Z;'S%^;'S;=`%o<%lO%^l0oYo`Oy%^z!Q%^!Q![1_![!c%^!c!i1_!i#T%^#T#Z1_#Z;'S%^;'S;=`%o<%lO%^l1dYo`Oy%^z!Q%^!Q![2S![!c%^!c!i2S!i#T%^#T#Z2S#Z;'S%^;'S;=`%o<%lO%^l2ZYf[o`Oy%^z!Q%^!Q![2y![!c%^!c!i2y!i#T%^#T#Z2y#Z;'S%^;'S;=`%o<%lO%^l3QYf[o`Oy%^z!Q%^!Q![3p![!c%^!c!i3p!i#T%^#T#Z3p#Z;'S%^;'S;=`%o<%lO%^l3uYo`Oy%^z!Q%^!Q![4e![!c%^!c!i4e!i#T%^#T#Z4e#Z;'S%^;'S;=`%o<%lO%^l4lYf[o`Oy%^z!Q%^!Q![5[![!c%^!c!i5[!i#T%^#T#Z5[#Z;'S%^;'S;=`%o<%lO%^l5aYo`Oy%^z!Q%^!Q![6P![!c%^!c!i6P!i#T%^#T#Z6P#Z;'S%^;'S;=`%o<%lO%^l6WSf[o`Oy%^z;'S%^;'S;=`%o<%lO%^d6gUOy%^z!_%^!_!`6y!`;'S%^;'S;=`%o<%lO%^d7QS|So`Oy%^z;'S%^;'S;=`%o<%lO%^b7cSXQOy%^z;'S%^;'S;=`%o<%lO%^~7rWOY7oZw7owx.nx#O7o#O#P8[#P;'S7o;'S;=`9W<%lO7o~8_RO;'S7o;'S;=`8h;=`O7o~8kXOY7oZw7owx.nx#O7o#O#P8[#P;'S7o;'S;=`9W;=`<%l7o<%lO7o~9ZP;=`<%l7on9cSb^Oy%^z;'S%^;'S;=`%o<%lO%^~9tOa~n9{UUQjWOy%^z!_%^!_!`6y!`;'S%^;'S;=`%o<%lO%^n:fWjW!RQOy%^z!O%^!O!P;O!P!Q%^!Q![>T![;'S%^;'S;=`%o<%lO%^l;TUo`Oy%^z!Q%^!Q![;g![;'S%^;'S;=`%o<%lO%^l;nYo`#e[Oy%^z!Q%^!Q![;g![!g%^!g!h<^!h#X%^#X#Y<^#Y;'S%^;'S;=`%o<%lO%^l<cYo`Oy%^z{%^{|=R|}%^}!O=R!O!Q%^!Q![=j![;'S%^;'S;=`%o<%lO%^l=WUo`Oy%^z!Q%^!Q![=j![;'S%^;'S;=`%o<%lO%^l=qUo`#e[Oy%^z!Q%^!Q![=j![;'S%^;'S;=`%o<%lO%^l>[[o`#e[Oy%^z!O%^!O!P;g!P!Q%^!Q![>T![!g%^!g!h<^!h#X%^#X#Y<^#Y;'S%^;'S;=`%o<%lO%^n?VSt^Oy%^z;'S%^;'S;=`%o<%lO%^l?hWjWOy%^z!O%^!O!P;O!P!Q%^!Q![>T![;'S%^;'S;=`%o<%lO%^n@VU#bQOy%^z!Q%^!Q![;g![;'S%^;'S;=`%o<%lO%^~@nTjWOy%^z{@}{;'S%^;'S;=`%o<%lO%^~AUSo`#[~Oy%^z;'S%^;'S;=`%o<%lO%^lAg[#e[Oy%^z!O%^!O!P;g!P!Q%^!Q![>T![!g%^!g!h<^!h#X%^#X#Y<^#Y;'S%^;'S;=`%o<%lO%^bBbU]QOy%^z![%^![!]Bt!];'S%^;'S;=`%o<%lO%^bB{S^Qo`Oy%^z;'S%^;'S;=`%o<%lO%^nC^S!Y^Oy%^z;'S%^;'S;=`%o<%lO%^dCoS|SOy%^z;'S%^;'S;=`%o<%lO%^bDQU!OQOy%^z!`%^!`!aDd!a;'S%^;'S;=`%o<%lO%^bDkS!OQo`Oy%^z;'S%^;'S;=`%o<%lO%^bDzWOy%^z!c%^!c!}Ed!}#T%^#T#oEd#o;'S%^;'S;=`%o<%lO%^bEk[![Qo`Oy%^z}%^}!OEd!O!Q%^!Q![Ed![!c%^!c!}Ed!}#T%^#T#oEd#o;'S%^;'S;=`%o<%lO%^nFfSq^Oy%^z;'S%^;'S;=`%o<%lO%^nFwSp^Oy%^z;'S%^;'S;=`%o<%lO%^bGWUOy%^z#b%^#b#cGj#c;'S%^;'S;=`%o<%lO%^bGoUo`Oy%^z#W%^#W#XHR#X;'S%^;'S;=`%o<%lO%^bHYS!bQo`Oy%^z;'S%^;'S;=`%o<%lO%^bHiUOy%^z#f%^#f#gHR#g;'S%^;'S;=`%o<%lO%^fIQS!TUOy%^z;'S%^;'S;=`%o<%lO%^nIcS!S^Oy%^z;'S%^;'S;=`%o<%lO%^fItU!RQOy%^z!_%^!_!`6y!`;'S%^;'S;=`%o<%lO%^`JZP;=`<%l$}",
|
27701 |
tokenData: "J^~R!^OX$}X^%u^p$}pq%uqr)Xrs.Rst/utu6duv$}vw7^wx7oxy9^yz9oz{9t{|:_|}?Q}!O?c!O!P@Q!P!Q@i!Q![Ab![!]B]!]!^CX!^!_$}!_!`Cj!`!aC{!a!b$}!b!cDw!c!}$}!}#OFa#O#P$}#P#QFr#Q#R6d#R#T$}#T#UGT#U#c$}#c#dHf#d#o$}#o#pH{#p#q6d#q#rI^#r#sIo#s#y$}#y#z%u#z$f$}$f$g%u$g#BY$}#BY#BZ%u#BZ$IS$}$IS$I_%u$I_$I|$}$I|$JO%u$JO$JT$}$JT$JU%u$JU$KV$}$KV$KW%u$KW&FU$}&FU&FV%u&FV;'S$};'S;=`JW<%lO$}`%QSOy%^z;'S%^;'S;=`%o<%lO%^`%cSp`Oy%^z;'S%^;'S;=`%o<%lO%^`%rP;=`<%l%^~%zh#[~OX%^X^'f^p%^pq'fqy%^z#y%^#y#z'f#z$f%^$f$g'f$g#BY%^#BY#BZ'f#BZ$IS%^$IS$I_'f$I_$I|%^$I|$JO'f$JO$JT%^$JT$JU'f$JU$KV%^$KV$KW'f$KW&FU%^&FU&FV'f&FV;'S%^;'S;=`%o<%lO%^~'mh#[~p`OX%^X^'f^p%^pq'fqy%^z#y%^#y#z'f#z$f%^$f$g'f$g#BY%^#BY#BZ'f#BZ$IS%^$IS$I_'f$I_$I|%^$I|$JO'f$JO$JT%^$JT$JU'f$JU$KV%^$KV$KW'f$KW&FU%^&FU&FV'f&FV;'S%^;'S;=`%o<%lO%^l)[UOy%^z#]%^#]#^)n#^;'S%^;'S;=`%o<%lO%^l)sUp`Oy%^z#a%^#a#b*V#b;'S%^;'S;=`%o<%lO%^l*[Up`Oy%^z#d%^#d#e*n#e;'S%^;'S;=`%o<%lO%^l*sUp`Oy%^z#c%^#c#d+V#d;'S%^;'S;=`%o<%lO%^l+[Up`Oy%^z#f%^#f#g+n#g;'S%^;'S;=`%o<%lO%^l+sUp`Oy%^z#h%^#h#i,V#i;'S%^;'S;=`%o<%lO%^l,[Up`Oy%^z#T%^#T#U,n#U;'S%^;'S;=`%o<%lO%^l,sUp`Oy%^z#b%^#b#c-V#c;'S%^;'S;=`%o<%lO%^l-[Up`Oy%^z#h%^#h#i-n#i;'S%^;'S;=`%o<%lO%^l-uS!Y[p`Oy%^z;'S%^;'S;=`%o<%lO%^~.UWOY.RZr.Rrs.ns#O.R#O#P.s#P;'S.R;'S;=`/o<%lO.R~.sOi~~.vRO;'S.R;'S;=`/P;=`O.R~/SXOY.RZr.Rrs.ns#O.R#O#P.s#P;'S.R;'S;=`/o;=`<%l.R<%lO.R~/rP;=`<%l.Rn/zYyQOy%^z!Q%^!Q![0j![!c%^!c!i0j!i#T%^#T#Z0j#Z;'S%^;'S;=`%o<%lO%^l0oYp`Oy%^z!Q%^!Q![1_![!c%^!c!i1_!i#T%^#T#Z1_#Z;'S%^;'S;=`%o<%lO%^l1dYp`Oy%^z!Q%^!Q![2S![!c%^!c!i2S!i#T%^#T#Z2S#Z;'S%^;'S;=`%o<%lO%^l2ZYg[p`Oy%^z!Q%^!Q![2y![!c%^!c!i2y!i#T%^#T#Z2y#Z;'S%^;'S;=`%o<%lO%^l3QYg[p`Oy%^z!Q%^!Q![3p![!c%^!c!i3p!i#T%^#T#Z3p#Z;'S%^;'S;=`%o<%lO%^l3uYp`Oy%^z!Q%^!Q![4e![!c%^!c!i4e!i#T%^#T#Z4e#Z;'S%^;'S;=`%o<%lO%^l4lYg[p`Oy%^z!Q%^!Q![5[![!c%^!c!i5[!i#T%^#T#Z5[#Z;'S%^;'S;=`%o<%lO%^l5aYp`Oy%^z!Q%^!Q![6P![!c%^!c!i6P!i#T%^#T#Z6P#Z;'S%^;'S;=`%o<%lO%^l6WSg[p`Oy%^z;'S%^;'S;=`%o<%lO%^d6gUOy%^z!_%^!_!`6y!`;'S%^;'S;=`%o<%lO%^d7QS}Sp`Oy%^z;'S%^;'S;=`%o<%lO%^b7cSXQOy%^z;'S%^;'S;=`%o<%lO%^~7rWOY7oZw7owx.nx#O7o#O#P8[#P;'S7o;'S;=`9W<%lO7o~8_RO;'S7o;'S;=`8h;=`O7o~8kXOY7oZw7owx.nx#O7o#O#P8[#P;'S7o;'S;=`9W;=`<%l7o<%lO7o~9ZP;=`<%l7on9cSc^Oy%^z;'S%^;'S;=`%o<%lO%^~9tOb~n9{UUQkWOy%^z!_%^!_!`6y!`;'S%^;'S;=`%o<%lO%^n:fWkW!SQOy%^z!O%^!O!P;O!P!Q%^!Q![>T![;'S%^;'S;=`%o<%lO%^l;TUp`Oy%^z!Q%^!Q![;g![;'S%^;'S;=`%o<%lO%^l;nYp`#e[Oy%^z!Q%^!Q![;g![!g%^!g!h<^!h#X%^#X#Y<^#Y;'S%^;'S;=`%o<%lO%^l<cYp`Oy%^z{%^{|=R|}%^}!O=R!O!Q%^!Q![=j![;'S%^;'S;=`%o<%lO%^l=WUp`Oy%^z!Q%^!Q![=j![;'S%^;'S;=`%o<%lO%^l=qUp`#e[Oy%^z!Q%^!Q![=j![;'S%^;'S;=`%o<%lO%^l>[[p`#e[Oy%^z!O%^!O!P;g!P!Q%^!Q![>T![!g%^!g!h<^!h#X%^#X#Y<^#Y;'S%^;'S;=`%o<%lO%^n?VSu^Oy%^z;'S%^;'S;=`%o<%lO%^l?hWkWOy%^z!O%^!O!P;O!P!Q%^!Q![>T![;'S%^;'S;=`%o<%lO%^n@VUZQOy%^z!Q%^!Q![;g![;'S%^;'S;=`%o<%lO%^~@nTkWOy%^z{@}{;'S%^;'S;=`%o<%lO%^~AUSp`#]~Oy%^z;'S%^;'S;=`%o<%lO%^lAg[#e[Oy%^z!O%^!O!P;g!P!Q%^!Q![>T![!g%^!g!h<^!h#X%^#X#Y<^#Y;'S%^;'S;=`%o<%lO%^bBbU^QOy%^z![%^![!]Bt!];'S%^;'S;=`%o<%lO%^bB{S_Qp`Oy%^z;'S%^;'S;=`%o<%lO%^nC^S!Z^Oy%^z;'S%^;'S;=`%o<%lO%^dCoS}SOy%^z;'S%^;'S;=`%o<%lO%^bDQU!PQOy%^z!`%^!`!aDd!a;'S%^;'S;=`%o<%lO%^bDkS!PQp`Oy%^z;'S%^;'S;=`%o<%lO%^bDzWOy%^z!c%^!c!}Ed!}#T%^#T#oEd#o;'S%^;'S;=`%o<%lO%^bEk[!]Qp`Oy%^z}%^}!OEd!O!Q%^!Q![Ed![!c%^!c!}Ed!}#T%^#T#oEd#o;'S%^;'S;=`%o<%lO%^nFfSr^Oy%^z;'S%^;'S;=`%o<%lO%^nFwSq^Oy%^z;'S%^;'S;=`%o<%lO%^bGWUOy%^z#b%^#b#cGj#c;'S%^;'S;=`%o<%lO%^bGoUp`Oy%^z#W%^#W#XHR#X;'S%^;'S;=`%o<%lO%^bHYS!cQp`Oy%^z;'S%^;'S;=`%o<%lO%^bHiUOy%^z#f%^#f#gHR#g;'S%^;'S;=`%o<%lO%^fIQS!UUOy%^z;'S%^;'S;=`%o<%lO%^nIcS!T^Oy%^z;'S%^;'S;=`%o<%lO%^fItU!SQOy%^z!_%^!_!`6y!`;'S%^;'S;=`%o<%lO%^`JZP;=`<%l$}",
|
| 26977 |
tokenizers: [descendant, unitToken, identifiers, 1, 2, 3, 4, new LocalTokenGroup("m~RRYZ[z{a~~g~aO#^~~dP!P!Qg~lO#_~~", 28, 105)],
|
27702 |
tokenizers: [descendant, unitToken, identifiers, 1, 2, 3, 4, new LocalTokenGroup("m~RRYZ[z{a~~g~aO#_~~dP!P!Qg~lO#`~~", 28, 106)],
|
| 26978 |
topRules: {"StyleSheet":[0,4],"Styles":[1,86]},
|
27703 |
topRules: {"StyleSheet":[0,4],"Styles":[1,87]},
|
| 26979 |
specialized: [{term: 100, get: (value) => spec_callee[value] || -1},{term: 58, get: (value) => spec_AtKeyword[value] || -1},{term: 101, get: (value) => spec_identifier$1[value] || -1}],
|
27704 |
specialized: [{term: 101, get: (value) => spec_callee[value] || -1},{term: 59, get: (value) => spec_AtKeyword[value] || -1},{term: 102, get: (value) => spec_identifier$1[value] || -1}],
|
| 26980 |
tokenPrec: 1200
|
27705 |
tokenPrec: 1219
|
| Línea 26981... |
Línea 27706... |
| 26981 |
});
|
27706 |
});
|
| 26982 |
|
27707 |
|
| 26983 |
let _properties = null;
|
27708 |
let _properties = null;
|
| Línea 26993... |
Línea 27718... |
| 26993 |
names.push(prop);
|
27718 |
names.push(prop);
|
| 26994 |
seen.add(prop);
|
27719 |
seen.add(prop);
|
| 26995 |
}
|
27720 |
}
|
| 26996 |
}
|
27721 |
}
|
| 26997 |
}
|
27722 |
}
|
| 26998 |
_properties = names.sort().map(name => ({ type: "property", label: name }));
|
27723 |
_properties = names.sort().map(name => ({ type: "property", label: name, apply: name + ": " }));
|
| 26999 |
}
|
27724 |
}
|
| 27000 |
return _properties || [];
|
27725 |
return _properties || [];
|
| 27001 |
}
|
27726 |
}
|
| 27002 |
const pseudoClasses = /*@__PURE__*/[
|
27727 |
const pseudoClasses = /*@__PURE__*/[
|
| 27003 |
"active", "after", "any-link", "autofill", "backdrop", "before",
|
27728 |
"active", "after", "any-link", "autofill", "backdrop", "before",
|
| Línea 27104... |
Línea 27829... |
| 27104 |
"form", "header", "hgroup", "h1", "h2", "h3", "h4", "h5", "h6", "hr", "html", "i", "iframe",
|
27829 |
"form", "header", "hgroup", "h1", "h2", "h3", "h4", "h5", "h6", "hr", "html", "i", "iframe",
|
| 27105 |
"img", "input", "ins", "kbd", "label", "legend", "li", "main", "meter", "nav", "ol", "output",
|
27830 |
"img", "input", "ins", "kbd", "label", "legend", "li", "main", "meter", "nav", "ol", "output",
|
| 27106 |
"p", "pre", "ruby", "section", "select", "small", "source", "span", "strong", "sub", "summary",
|
27831 |
"p", "pre", "ruby", "section", "select", "small", "source", "span", "strong", "sub", "summary",
|
| 27107 |
"sup", "table", "tbody", "td", "template", "textarea", "tfoot", "th", "thead", "tr", "u", "ul"
|
27832 |
"sup", "table", "tbody", "td", "template", "textarea", "tfoot", "th", "thead", "tr", "u", "ul"
|
| 27108 |
].map(name => ({ type: "type", label: name }));
|
27833 |
].map(name => ({ type: "type", label: name }));
|
| - |
|
27834 |
const atRules = /*@__PURE__*/[
|
| - |
|
27835 |
"@charset", "@color-profile", "@container", "@counter-style", "@font-face", "@font-feature-values",
|
| - |
|
27836 |
"@font-palette-values", "@import", "@keyframes", "@layer", "@media", "@namespace", "@page",
|
| - |
|
27837 |
"@position-try", "@property", "@scope", "@starting-style", "@supports", "@view-transition"
|
| - |
|
27838 |
].map(label => ({ type: "keyword", label }));
|
| 27109 |
const identifier$1 = /^(\w[\w-]*|-\w[\w-]*|)$/, variable = /^-(-[\w-]*)?$/;
|
27839 |
const identifier$1 = /^(\w[\w-]*|-\w[\w-]*|)$/, variable = /^-(-[\w-]*)?$/;
|
| 27110 |
function isVarArg(node, doc) {
|
27840 |
function isVarArg(node, doc) {
|
| 27111 |
var _a;
|
27841 |
var _a;
|
| 27112 |
if (node.name == "(" || node.type.isError)
|
27842 |
if (node.name == "(" || node.type.isError)
|
| 27113 |
node = node.parent || node;
|
27843 |
node = node.parent || node;
|
| Línea 27184... |
Línea 27914... |
| 27184 |
for (let { parent } = node; parent; parent = parent.parent)
|
27914 |
for (let { parent } = node; parent; parent = parent.parent)
|
| 27185 |
if (parent.name == "Block")
|
27915 |
if (parent.name == "Block")
|
| 27186 |
return { from: node.from, options: properties(), validFor: identifier$1 };
|
27916 |
return { from: node.from, options: properties(), validFor: identifier$1 };
|
| 27187 |
return { from: node.from, options: tags, validFor: identifier$1 };
|
27917 |
return { from: node.from, options: tags, validFor: identifier$1 };
|
| 27188 |
}
|
27918 |
}
|
| - |
|
27919 |
if (node.name == "AtKeyword")
|
| - |
|
27920 |
return { from: node.from, options: atRules, validFor: identifier$1 };
|
| 27189 |
if (!context.explicit)
|
27921 |
if (!context.explicit)
|
| 27190 |
return null;
|
27922 |
return null;
|
| 27191 |
let above = node.resolve(pos), before = above.childBefore(pos);
|
27923 |
let above = node.resolve(pos), before = above.childBefore(pos);
|
| 27192 |
if (before && before.name == ":" && above.name == "PseudoClassSelector")
|
27924 |
if (before && before.name == ":" && above.name == "PseudoClassSelector")
|
| 27193 |
return { from: pos, options: pseudoClasses, validFor: identifier$1 };
|
27925 |
return { from: pos, options: pseudoClasses, validFor: identifier$1 };
|
| Línea 27231... |
Línea 27963... |
| 27231 |
function css() {
|
27963 |
function css() {
|
| 27232 |
return new LanguageSupport(cssLanguage, cssLanguage.data.of({ autocomplete: cssCompletionSource }));
|
27964 |
return new LanguageSupport(cssLanguage, cssLanguage.data.of({ autocomplete: cssCompletionSource }));
|
| 27233 |
}
|
27965 |
}
|
| Línea 27234... |
Línea 27966... |
| 27234 |
|
27966 |
|
| 27235 |
// This file was generated by lezer-generator. You probably shouldn't edit it.
|
27967 |
// This file was generated by lezer-generator. You probably shouldn't edit it.
|
| - |
|
27968 |
const noSemi = 314,
|
| 27236 |
const noSemi = 309,
|
27969 |
noSemiType = 315,
|
| 27237 |
incdec = 1,
|
27970 |
incdec = 1,
|
| - |
|
27971 |
incdecPrefix = 2,
|
| 27238 |
incdecPrefix = 2,
|
27972 |
questionDot = 3,
|
| 27239 |
JSXStartTag = 3,
|
27973 |
JSXStartTag = 4,
|
| 27240 |
insertSemi = 310,
|
27974 |
insertSemi = 316,
|
| 27241 |
spaces = 312,
|
27975 |
spaces = 318,
|
| 27242 |
newline = 313,
|
27976 |
newline = 319,
|
| 27243 |
LineComment = 4,
|
27977 |
LineComment = 5,
|
| 27244 |
BlockComment = 5,
|
27978 |
BlockComment = 6,
|
| Línea 27245... |
Línea 27979... |
| 27245 |
Dialect_jsx = 0;
|
27979 |
Dialect_jsx = 0;
|
| 27246 |
|
27980 |
|
| Línea 27247... |
Línea 27981... |
| 27247 |
/* Hand-written tokenizers for JavaScript tokens that can't be
|
27981 |
/* Hand-written tokenizers for JavaScript tokens that can't be
|
| 27248 |
expressed by lezer's built-in tokenizer. */
|
27982 |
expressed by lezer's built-in tokenizer. */
|
| Línea 27249... |
Línea 27983... |
| 27249 |
|
27983 |
|
| - |
|
27984 |
const space = [9, 10, 11, 12, 13, 32, 133, 160, 5760, 8192, 8193, 8194, 8195, 8196, 8197, 8198, 8199, 8200,
|
| Línea 27250... |
Línea 27985... |
| 27250 |
const space = [9, 10, 11, 12, 13, 32, 133, 160, 5760, 8192, 8193, 8194, 8195, 8196, 8197, 8198, 8199, 8200,
|
27985 |
8201, 8202, 8232, 8233, 8239, 8287, 12288];
|
| 27251 |
8201, 8202, 8232, 8233, 8239, 8287, 12288];
|
27986 |
|
| 27252 |
|
27987 |
const braceR = 125, semicolon = 59, slash = 47, star = 42, plus = 43, minus = 45, lt = 60, comma = 44,
|
| 27253 |
const braceR = 125, semicolon = 59, slash = 47, star = 42, plus = 43, minus = 45, lt = 60, comma = 44;
|
27988 |
question = 63, dot = 46, bracketL = 91;
|
| Línea 27272... |
Línea 28007... |
| 27272 |
if (next == slash && ((after = input.peek(1)) == slash || after == star)) return
|
28007 |
if (next == slash && ((after = input.peek(1)) == slash || after == star)) return
|
| 27273 |
if (next != braceR && next != semicolon && next != -1 && !stack.context)
|
28008 |
if (next != braceR && next != semicolon && next != -1 && !stack.context)
|
| 27274 |
input.acceptToken(noSemi);
|
28009 |
input.acceptToken(noSemi);
|
| 27275 |
}, {contextual: true});
|
28010 |
}, {contextual: true});
|
| Línea -... |
Línea 28011... |
| - |
|
28011 |
|
| - |
|
28012 |
const noSemicolonType = new ExternalTokenizer((input, stack) => {
|
| - |
|
28013 |
if (input.next == bracketL && !stack.context) input.acceptToken(noSemiType);
|
| - |
|
28014 |
}, {contextual: true});
|
| 27276 |
|
28015 |
|
| 27277 |
const incdecToken = new ExternalTokenizer((input, stack) => {
|
28016 |
const operatorToken = new ExternalTokenizer((input, stack) => {
|
| 27278 |
let {next} = input;
|
28017 |
let {next} = input;
|
| 27279 |
if (next == plus || next == minus) {
|
28018 |
if (next == plus || next == minus) {
|
| 27280 |
input.advance();
|
28019 |
input.advance();
|
| 27281 |
if (next == input.next) {
|
28020 |
if (next == input.next) {
|
| 27282 |
input.advance();
|
28021 |
input.advance();
|
| 27283 |
let mayPostfix = !stack.context && stack.canShift(incdec);
|
28022 |
let mayPostfix = !stack.context && stack.canShift(incdec);
|
| 27284 |
input.acceptToken(mayPostfix ? incdec : incdecPrefix);
|
28023 |
input.acceptToken(mayPostfix ? incdec : incdecPrefix);
|
| - |
|
28024 |
}
|
| - |
|
28025 |
} else if (next == question && input.peek(1) == dot) {
|
| - |
|
28026 |
input.advance(); input.advance();
|
| - |
|
28027 |
if (input.next < 48 || input.next > 57) // No digit after
|
| 27285 |
}
|
28028 |
input.acceptToken(questionDot);
|
| 27286 |
}
|
28029 |
}
|
| Línea 27287... |
Línea 28030... |
| 27287 |
}, {contextual: true});
|
28030 |
}, {contextual: true});
|
| 27288 |
|
28031 |
|
| Línea 27338... |
Línea 28081... |
| 27338 |
PropertyName: tags$1.propertyName,
|
28081 |
PropertyName: tags$1.propertyName,
|
| 27339 |
PrivatePropertyName: tags$1.special(tags$1.propertyName),
|
28082 |
PrivatePropertyName: tags$1.special(tags$1.propertyName),
|
| 27340 |
"CallExpression/MemberExpression/PropertyName": tags$1.function(tags$1.propertyName),
|
28083 |
"CallExpression/MemberExpression/PropertyName": tags$1.function(tags$1.propertyName),
|
| 27341 |
"FunctionDeclaration/VariableDefinition": tags$1.function(tags$1.definition(tags$1.variableName)),
|
28084 |
"FunctionDeclaration/VariableDefinition": tags$1.function(tags$1.definition(tags$1.variableName)),
|
| 27342 |
"ClassDeclaration/VariableDefinition": tags$1.definition(tags$1.className),
|
28085 |
"ClassDeclaration/VariableDefinition": tags$1.definition(tags$1.className),
|
| - |
|
28086 |
"NewExpression/VariableName": tags$1.className,
|
| 27343 |
PropertyDefinition: tags$1.definition(tags$1.propertyName),
|
28087 |
PropertyDefinition: tags$1.definition(tags$1.propertyName),
|
| 27344 |
PrivatePropertyDefinition: tags$1.definition(tags$1.special(tags$1.propertyName)),
|
28088 |
PrivatePropertyDefinition: tags$1.definition(tags$1.special(tags$1.propertyName)),
|
| 27345 |
UpdateOp: tags$1.updateOperator,
|
28089 |
UpdateOp: tags$1.updateOperator,
|
| 27346 |
"LineComment Hashbang": tags$1.lineComment,
|
28090 |
"LineComment Hashbang": tags$1.lineComment,
|
| 27347 |
BlockComment: tags$1.blockComment,
|
28091 |
BlockComment: tags$1.blockComment,
|
| Línea 27366... |
Línea 28110... |
| 27366 |
|
28110 |
|
| 27367 |
TypeName: tags$1.typeName,
|
28111 |
TypeName: tags$1.typeName,
|
| 27368 |
TypeDefinition: tags$1.definition(tags$1.typeName),
|
28112 |
TypeDefinition: tags$1.definition(tags$1.typeName),
|
| 27369 |
"type enum interface implements namespace module declare": tags$1.definitionKeyword,
|
28113 |
"type enum interface implements namespace module declare": tags$1.definitionKeyword,
|
| 27370 |
"abstract global Privacy readonly override": tags$1.modifier,
|
28114 |
"abstract global Privacy readonly override": tags$1.modifier,
|
| Línea 27371... |
Línea 28115... |
| 27371 |
"is keyof unique infer": tags$1.operatorKeyword,
|
28115 |
"is keyof unique infer asserts": tags$1.operatorKeyword,
|
| 27372 |
|
28116 |
|
| 27373 |
JSXAttributeValue: tags$1.attributeValue,
|
28117 |
JSXAttributeValue: tags$1.attributeValue,
|
| 27374 |
JSXText: tags$1.content,
|
28118 |
JSXText: tags$1.content,
|
| 27375 |
"JSXStartTag JSXStartCloseTag JSXSelfCloseEndTag JSXEndTag": tags$1.angleBracket,
|
28119 |
"JSXStartTag JSXStartCloseTag JSXSelfCloseEndTag JSXEndTag": tags$1.angleBracket,
|
| 27376 |
"JSXIdentifier JSXNameSpacedName": tags$1.tagName,
|
28120 |
"JSXIdentifier JSXNameSpacedName": tags$1.tagName,
|
| 27377 |
"JSXAttribute/JSXIdentifier JSXAttribute/JSXNameSpacedName": tags$1.attributeName,
|
28121 |
"JSXAttribute/JSXIdentifier JSXAttribute/JSXNameSpacedName": tags$1.attributeName,
|
| Línea 27378... |
Línea 28122... |
| 27378 |
"JSXBuiltin/JSXIdentifier": tags$1.standard(tags$1.tagName)
|
28122 |
"JSXBuiltin/JSXIdentifier": tags$1.standard(tags$1.tagName)
|
| 27379 |
});
|
28123 |
});
|
| 27380 |
|
28124 |
|
| 27381 |
// This file was generated by lezer-generator. You probably shouldn't edit it.
|
28125 |
// This file was generated by lezer-generator. You probably shouldn't edit it.
|
| 27382 |
const spec_identifier = {__proto__:null,export:18, as:23, from:31, default:34, async:39, function:40, extends:52, this:56, true:64, false:64, null:76, void:80, typeof:84, super:102, new:136, delete:152, yield:161, await:165, class:170, public:227, private:227, protected:227, readonly:229, instanceof:248, satisfies:251, in:252, const:254, import:286, keyof:339, unique:343, infer:349, is:385, abstract:405, implements:407, type:409, let:412, var:414, using:417, interface:423, enum:427, namespace:433, module:435, declare:439, global:443, for:462, of:471, while:474, with:478, do:482, if:486, else:488, switch:492, case:498, try:504, catch:508, finally:512, return:516, throw:520, break:524, continue:528, debugger:532};
|
28126 |
const spec_identifier = {__proto__:null,export:20, as:25, from:33, default:36, async:41, function:42, const:52, extends:56, this:60, true:68, false:68, null:80, void:84, typeof:88, super:104, new:138, delete:150, yield:159, await:163, class:168, public:231, private:231, protected:231, readonly:233, instanceof:252, satisfies:255, in:256, import:290, keyof:347, unique:351, infer:357, asserts:393, is:395, abstract:415, implements:417, type:419, let:422, var:424, using:427, interface:433, enum:437, namespace:443, module:445, declare:449, global:453, for:472, of:481, while:484, with:488, do:492, if:496, else:498, switch:502, case:508, try:514, catch:518, finally:522, return:526, throw:530, break:534, continue:538, debugger:542};
|
| 27383 |
const spec_word = {__proto__:null,async:123, get:125, set:127, declare:187, public:189, private:189, protected:189, static:191, abstract:193, override:195, readonly:201, accessor:203, new:389};
|
28127 |
const spec_word = {__proto__:null,async:125, get:127, set:129, declare:191, public:193, private:193, protected:193, static:195, abstract:197, override:199, readonly:205, accessor:207, new:399};
|
| 27384 |
const spec_LessThan = {__proto__:null,"<":143};
|
28128 |
const spec_LessThan = {__proto__:null,"<":189};
|
| 27385 |
const parser$1 = LRParser.deserialize({
|
28129 |
const parser$1 = LRParser.deserialize({
|
| 27386 |
version: 14,
|
28130 |
version: 14,
|
| 27387 |
states: "$=WO%TQ^OOO%[Q^OOO'_Q`OOP(lOWOOO*zQ08SO'#ChO+RO!bO'#CiO+aO#tO'#CiO+oO?MpO'#D^O.QQ^O'#DdO.bQ^O'#DoO%[Q^O'#DyO0fQ^O'#EROOQ07b'#EZ'#EZO1PQWO'#EWOOQO'#El'#ElOOQO'#Ie'#IeO1XQWO'#GmO1dQWO'#EkO1iQWO'#EkO3kQ08SO'#JiO6[Q08SO'#JjO6xQWO'#FZO6}Q&jO'#FqOOQ07b'#Fc'#FcO7YO,YO'#FcO7hQ7[O'#FxO9UQWO'#FwOOQ07b'#Jj'#JjOOQ07`'#Ji'#JiO9ZQWO'#GqOOQU'#KV'#KVO9fQWO'#IRO9kQ07hO'#ISOOQU'#JW'#JWOOQU'#IW'#IWQ`Q^OOO`Q^OOO%[Q^O'#DqO9sQ^O'#D}O9zQ^O'#EPO9aQWO'#GmO:RQ7[O'#CnO:aQWO'#EjO:lQWO'#EuO:qQ7[O'#FbO;`QWO'#GmOOQO'#KW'#KWO;eQWO'#KWO;sQWO'#GuO;sQWO'#GvO;sQWO'#GxO9aQWO'#G{O<jQWO'#HOO>RQWO'#CdO>cQWO'#H[O>kQWO'#HbO>kQWO'#HdO`Q^O'#HfO>kQWO'#HhO>kQWO'#HkO>pQWO'#HqO>uQ07iO'#HwO%[Q^O'#HyO?QQ07iO'#H{O?]Q07iO'#H}O9kQ07hO'#IPO?hQ08SO'#ChO@jQ`O'#DiQOQWOOO%[Q^O'#EPOAQQWO'#ESO:RQ7[O'#EjOA]QWO'#EjOAhQpO'#FbOOQU'#Cf'#CfOOQ07`'#Dn'#DnOOQ07`'#Jm'#JmO%[Q^O'#JmOOQO'#Jq'#JqOOQO'#Ib'#IbOBhQ`O'#EcOOQ07`'#Eb'#EbOOQ07`'#Jt'#JtOCdQ07pO'#EcOCnQ`O'#EVOOQO'#Jp'#JpODSQ`O'#JqOEaQ`O'#EVOCnQ`O'#EcPEnO!0LbO'#CaPOOO)CDu)CDuOOOO'#IX'#IXOEyO!bO,59TOOQ07b,59T,59TOOOO'#IY'#IYOFXO#tO,59TO%[Q^O'#D`OOOO'#I['#I[OFgO?MpO,59xOOQ07b,59x,59xOFuQ^O'#I]OGYQWO'#JkOI[QrO'#JkO+}Q^O'#JkOIcQWO,5:OOIyQWO'#ElOJWQWO'#JzOJcQWO'#JyOJcQWO'#JyOJkQWO,5;YOJpQWO'#JxOOQ07f,5:Z,5:ZOJwQ^O,5:ZOLxQ08SO,5:eOMiQWO,5:mONSQ07hO'#JwONZQWO'#JvO9ZQWO'#JvONoQWO'#JvONwQWO,5;XON|QWO'#JvO!#UQrO'#JjOOQ07b'#Ch'#ChO%[Q^O'#ERO!#tQpO,5:rOOQO'#Jr'#JrOOQO-E<c-E<cO9aQWO,5=XO!$[QWO,5=XO!$aQ^O,5;VO!&dQ7[O'#EgO!'}QWO,5;VO!)mQ7[O'#DsO!)tQ^O'#DxO!*OQ`O,5;`O!*WQ`O,5;`O%[Q^O,5;`OOQU'#FR'#FROOQU'#FT'#FTO%[Q^O,5;aO%[Q^O,5;aO%[Q^O,5;aO%[Q^O,5;aO%[Q^O,5;aO%[Q^O,5;aO%[Q^O,5;aO%[Q^O,5;aO%[Q^O,5;aO%[Q^O,5;aO%[Q^O,5;aOOQU'#FX'#FXO!*fQ^O,5;rOOQ07b,5;w,5;wOOQ07b,5;x,5;xO!,iQWO,5;xOOQ07b,5;y,5;yO%[Q^O'#IiO!,qQ07hO,5<eO!&dQ7[O,5;aO!-`Q7[O,5;aO%[Q^O,5;uO!-gQ&jO'#FgO!.dQ&jO'#KOO!.OQ&jO'#KOO!.kQ&jO'#KOOOQO'#KO'#KOO!/PQ&jO,5<POOOS,5<],5<]O!/bQ^O'#FsOOOS'#Ih'#IhO7YO,YO,5;}O!/iQ&jO'#FuOOQ07b,5;},5;}O!0YQMhO'#CuOOQ07b'#Cy'#CyO!0mQWO'#CyO!0rO?MpO'#C}O!1`Q7[O,5<bO!1gQWO,5<dO!3SQ!LQO'#GSO!3aQWO'#GTO!3fQWO'#GTO!5UQ!LQO'#GXO!6QQ`O'#G]OOQO'#Gh'#GhO!(SQ7[O'#GgOOQO'#Gj'#GjO!(SQ7[O'#GiO!6sQMhO'#JdOOQ07b'#Jd'#JdO!6}QWO'#JcO!7]QWO'#JbO!7eQWO'#CtOOQ07b'#Cw'#CwOOQ07b'#DR'#DROOQ07b'#DT'#DTO1SQWO'#DVO!(SQ7[O'#FzO!(SQ7[O'#F|O!7mQWO'#GOO!7rQWO'#GPO!3fQWO'#GVO!(SQ7[O'#G[O!7wQWO'#EmO!8fQWO,5<cOOQ07`'#Cq'#CqO!8nQWO'#EnO!9hQ`O'#EoOOQ07`'#Jx'#JxO!9oQ07hO'#KXO9kQ07hO,5=]O`Q^O,5>mOOQU'#J`'#J`OOQU,5>n,5>nOOQU-E<U-E<UO!;qQ08SO,5:]O!>_Q08SO,5:iO%[Q^O,5:iO!@xQ08SO,5:kOOQO,5@r,5@rO!AiQ7[O,5=XO!AwQ07hO'#JaO9UQWO'#JaO!BYQ07hO,59YO!BeQ`O,59YO!BmQ7[O,59YO:RQ7[O,59YO!BxQWO,5;VO!CQQWO'#HZO!CfQWO'#K[O%[Q^O,5;zO!9cQ`O,5;|O!CnQWO,5=tO!CsQWO,5=tO!CxQWO,5=tO9kQ07hO,5=tO;sQWO,5=dOOQO'#Cu'#CuO!DWQ`O,5=aO!D`Q7[O,5=bO!DkQWO,5=dO!DpQpO,5=gO!DxQWO'#KWO>pQWO'#HQO9aQWO'#HSO!D}QWO'#HSO:RQ7[O'#HUO!ESQWO'#HUOOQU,5=j,5=jO!EXQWO'#HVO!EjQWO'#CnO!EoQWO,59OO!EyQWO,59OO!HOQ^O,59OOOQU,59O,59OO!H`Q07hO,59OO%[Q^O,59OO!JkQ^O'#H^OOQU'#H_'#H_OOQU'#H`'#H`O`Q^O,5=vO!KRQWO,5=vO`Q^O,5=|O`Q^O,5>OO!KWQWO,5>QO`Q^O,5>SO!K]QWO,5>VO!KbQ^O,5>]OOQU,5>c,5>cO%[Q^O,5>cO9kQ07hO,5>eOOQU,5>g,5>gO# lQWO,5>gOOQU,5>i,5>iO# lQWO,5>iOOQU,5>k,5>kO#!YQ`O'#D[O%[Q^O'#JmO#!dQ`O'#JmO##RQ`O'#DjO##dQ`O'#DjO#%uQ^O'#DjO#%|QWO'#JlO#&UQWO,5:TO#&ZQWO'#EpO#&iQWO'#J{O#&qQWO,5;ZO#&vQ`O'#DjO#'TQ`O'#EUOOQ07b,5:n,5:nO%[Q^O,5:nO#'[QWO,5:nO>pQWO,5;UO!BeQ`O,5;UO!BmQ7[O,5;UO:RQ7[O,5;UO#'dQWO,5@XO#'iQ$ISO,5:rOOQO-E<`-E<`O#(oQ07pO,5:}OCnQ`O,5:qO#(yQ`O,5:qOCnQ`O,5:}O!BYQ07hO,5:qOOQ07`'#Ef'#EfOOQO,5:},5:}O%[Q^O,5:}O#)WQ07hO,5:}O#)cQ07hO,5:}O!BeQ`O,5:qOOQO,5;T,5;TO#)qQ07hO,5:}POOO'#IV'#IVP#*VO!0LbO,58{POOO,58{,58{OOOO-E<V-E<VOOQ07b1G.o1G.oOOOO-E<W-E<WO#*bQpO,59zOOOO-E<Y-E<YOOQ07b1G/d1G/dO#*gQrO,5>wO+}Q^O,5>wOOQO,5>},5>}O#*qQ^O'#I]OOQO-E<Z-E<ZO#+OQWO,5@VO#+WQrO,5@VO#+_QWO,5@eOOQ07b1G/j1G/jO%[Q^O,5@fO#+gQWO'#IcOOQO-E<a-E<aO#+_QWO,5@eOOQ07`1G0t1G0tOOQ07f1G/u1G/uOOQ07f1G0X1G0XO%[Q^O,5@cO#+{Q07hO,5@cO#,^Q07hO,5@cO#,eQWO,5@bO9ZQWO,5@bO#,mQWO,5@bO#,{QWO'#IfO#,eQWO,5@bOOQ07`1G0s1G0sO!*OQ`O,5:tO!*ZQ`O,5:tOOQO,5:v,5:vO#-mQWO,5:vO#-uQ7[O1G2sO9aQWO1G2sOOQ07b1G0q1G0qO#.TQ08SO1G0qO#/YQ08QO,5;ROOQ07b'#GR'#GRO#/vQ08SO'#JdO!$aQ^O1G0qO#2OQ7[O'#JnO#2YQWO,5:_O#2_QrO'#JoO%[Q^O'#JoO#2iQWO,5:dOOQ07b'#D['#D[OOQ07b1G0z1G0zO%[Q^O1G0zOOQ07b1G1d1G1dO#2nQWO1G0zO#5VQ08SO1G0{O#5^Q08SO1G0{O#7wQ08SO1G0{O#8OQ08SO1G0{O#:YQ08SO1G0{O#:pQ08SO1G0{O#=jQ08SO1G0{O#=qQ08SO1G0{O#@UQ08SO1G0{O#@cQ08SO1G0{O#BaQ08SO1G0{O#EaQ(CYO'#ChO#G_Q(CYO1G1^O#GfQ(CYO'#JjO!,lQWO1G1dO#GvQ08SO,5?TOOQ07`-E<g-E<gO#HjQ08SO1G0{OOQ07b1G0{1G0{O#JuQ08SO1G1aO#KiQ&jO,5<TO#KqQ&jO,5<UO#KyQ&jO'#FlO#LbQWO'#FkOOQO'#KP'#KPOOQO'#Ig'#IgO#LgQ&jO1G1kOOQ07b1G1k1G1kOOOS1G1v1G1vO#LxQ(CYO'#JiO#MSQWO,5<_O!*fQ^O,5<_OOOS-E<f-E<fOOQ07b1G1i1G1iO#MXQ`O'#KOOOQ07b,5<a,5<aO#MaQ`O,5<aOOQ07b,59e,59eO!&dQ7[O'#DPOOOO'#IZ'#IZO#MfO?MpO,59iOOQ07b,59i,59iO%[Q^O1G1|O!7rQWO'#IkO#MqQ7[O,5<uOOQ07b,5<r,5<rO!(SQ7[O'#InO#NaQ7[O,5=RO!(SQ7[O'#IpO$ SQ7[O,5=TO!&dQ7[O,5=VOOQO1G2O1G2OO$ ^QpO'#CqO$ qQ!LQO'#EnO$!pQ`O'#G]O$#^QpO,5<nO$#eQWO'#KSO9ZQWO'#KSO$#sQWO,5<pO!(SQ7[O,5<oO$#xQWO'#GUO$$ZQWO,5<oO$$`QpO'#GRO$$mQpO'#KTO$$wQWO'#KTO!&dQ7[O'#KTO$$|QWO,5<sO$%RQ`O'#G^O!5{Q`O'#G^O$%dQWO'#G`O$%iQWO'#GbO!3fQWO'#GeO$%nQ07hO'#ImO$%yQ`O,5<wOOQ07f,5<w,5<wO$&QQ`O'#G^O$&`Q`O'#G_O$&hQ`O'#G_O$&mQ7[O,5=RO$&}Q7[O,5=TOOQ07b,5=W,5=WO!(SQ7[O,5?}O!(SQ7[O,5?}O$'_QWO'#IrO$'jQWO,5?|O$'rQWO,59`O$(cQ7[O,59qOOQ07b,59q,59qO$)UQ7[O,5<fO$)wQ7[O,5<hO@bQWO,5<jOOQ07b,5<k,5<kO$*RQWO,5<qO$*WQ7[O,5<vO$*hQWO'#JvO!$aQ^O1G1}O$*mQWO1G1}O9ZQWO'#JyO9ZQWO'#EpO%[Q^O'#EpO9ZQWO'#ItO$*rQ07hO,5@sOOQU1G2w1G2wOOQU1G4X1G4XOOQ07b1G/w1G/wO!,iQWO1G/wO$,wQ08SO1G0TOOQU1G2s1G2sO!&dQ7[O1G2sO%[Q^O1G2sO#-xQWO1G2sO$.{Q7[O'#EgOOQ07`,5?{,5?{O$/VQ07hO,5?{OOQU1G.t1G.tO!BYQ07hO1G.tO!BeQ`O1G.tO!BmQ7[O1G.tO$/hQWO1G0qO$/mQWO'#ChO$/xQWO'#K]O$0QQWO,5=uO$0VQWO'#K]O$0[QWO'#K]O$0jQWO'#IzO$0xQWO,5@vO$1QQrO1G1fOOQ07b1G1h1G1hO9aQWO1G3`O@bQWO1G3`O$1XQWO1G3`O$1^QWO1G3`OOQU1G3`1G3`O!DkQWO1G3OO!&dQ7[O1G2{O$1cQWO1G2{OOQU1G2|1G2|O!&dQ7[O1G2|O$1hQWO1G2|O$1pQ`O'#GzOOQU1G3O1G3OO!5{Q`O'#IvO!DpQpO1G3ROOQU1G3R1G3ROOQU,5=l,5=lO$1xQ7[O,5=nO9aQWO,5=nO$%iQWO,5=pO9UQWO,5=pO!BeQ`O,5=pO!BmQ7[O,5=pO:RQ7[O,5=pO$2WQWO'#KZO$2cQWO,5=qOOQU1G.j1G.jO$2hQ07hO1G.jO@bQWO1G.jO$2sQWO1G.jO9kQ07hO1G.jO$4xQrO,5@xO$5YQWO,5@xO9ZQWO,5@xO$5eQ^O,5=xO$5lQWO,5=xOOQU1G3b1G3bO`Q^O1G3bOOQU1G3h1G3hOOQU1G3j1G3jO>kQWO1G3lO$5qQ^O1G3nO$9uQ^O'#HmOOQU1G3q1G3qO$:SQWO'#HsO>pQWO'#HuOOQU1G3w1G3wO$:[Q^O1G3wO9kQ07hO1G3}OOQU1G4P1G4POOQ07`'#GY'#GYO9kQ07hO1G4RO9kQ07hO1G4TO$>cQWO,5@XO!*fQ^O,5;[O9ZQWO,5;[O>pQWO,5:UO!*fQ^O,5:UO!BeQ`O,5:UO$>hQ(CYO,5:UOOQO,5;[,5;[O$>rQ`O'#I^O$?YQWO,5@WOOQ07b1G/o1G/oO$?bQ`O'#IdO$?lQWO,5@gOOQ07`1G0u1G0uO##dQ`O,5:UOOQO'#Ia'#IaO$?tQ`O,5:pOOQ07f,5:p,5:pO#'_QWO1G0YOOQ07b1G0Y1G0YO%[Q^O1G0YOOQ07b1G0p1G0pO>pQWO1G0pO!BeQ`O1G0pO!BmQ7[O1G0pOOQ07`1G5s1G5sO!BYQ07hO1G0]OOQO1G0i1G0iO%[Q^O1G0iO$?{Q07hO1G0iO$@WQ07hO1G0iO!BeQ`O1G0]OCnQ`O1G0]O$@fQ07hO1G0iOOQO1G0]1G0]O$@zQ08SO1G0iPOOO-E<T-E<TPOOO1G.g1G.gOOOO1G/f1G/fO$AUQpO,5<eO$A^QrO1G4cOOQO1G4i1G4iO%[Q^O,5>wO$AhQWO1G5qO$ApQWO1G6PO$AxQrO1G6QO9ZQWO,5>}O$BSQ08SO1G5}O%[Q^O1G5}O$BdQ07hO1G5}O$BuQWO1G5|O$BuQWO1G5|O9ZQWO1G5|O$B}QWO,5?QO9ZQWO,5?QOOQO,5?Q,5?QO$CcQWO,5?QO$*hQWO,5?QOOQO-E<d-E<dOOQO1G0`1G0`OOQO1G0b1G0bO!,lQWO1G0bOOQU7+(_7+(_O!&dQ7[O7+(_O%[Q^O7+(_O$CqQWO7+(_O$C|Q7[O7+(_O$D[Q08SO,5=RO$FgQ08SO,5=TO$HrQ08SO,5=RO$KTQ08SO,5=TO$MfQ08SO,59qO% nQ08SO,5<fO%#yQ08SO,5<hO%&UQ08SO,5<vOOQ07b7+&]7+&]O%(gQ08SO7+&]O%)ZQ7[O'#I_O%)eQWO,5@YOOQ07b1G/y1G/yO%)mQ^O'#I`O%)zQWO,5@ZO%*SQrO,5@ZOOQ07b1G0O1G0OO%*^QWO7+&fOOQ07b7+&f7+&fO%*cQ(CYO,5:eO%[Q^O7+&xO%*mQ(CYO,5:]O%*zQ(CYO,5:iO%+UQ(CYO,5:kOOQ07b7+'O7+'OOOQO1G1o1G1oOOQO1G1p1G1pO%+`QtO,5<WO!*fQ^O,5<VOOQO-E<e-E<eOOQ07b7+'V7+'VOOOS7+'b7+'bOOOS1G1y1G1yO%+kQWO1G1yOOQ07b1G1{1G1{O%+pQpO,59kOOOO-E<X-E<XOOQ07b1G/T1G/TO%+wQ08SO7+'hOOQ07b,5?V,5?VO%,kQpO,5?VOOQ07b1G2a1G2aP!&dQ7[O'#IkPOQ07b-E<i-E<iO%-ZQ7[O,5?YOOQ07b-E<l-E<lO%-|Q7[O,5?[OOQ07b-E<n-E<nO%.WQpO1G2qO%._QpO'#CqO%.uQ7[O'#JyO%.|Q^O'#EpOOQ07b1G2Y1G2YO%/WQWO'#IjO%/lQWO,5@nO%/lQWO,5@nO%/tQWO,5@nO%0PQWO,5@nOOQO1G2[1G2[O%0_Q7[O1G2ZO!(SQ7[O1G2ZO%0oQ!LQO'#IlO%0|QWO,5@oO!&dQ7[O,5@oO%1UQpO,5@oOOQ07b1G2_1G2_OOQ07`,5<x,5<xOOQ07`,5<y,5<yO$*hQWO,5<yOC_QWO,5<yO!BeQ`O,5<xOOQO'#Ga'#GaO%1`QWO,5<zOOQ07`,5<|,5<|O$*hQWO,5=POOQO,5?X,5?XOOQO-E<k-E<kOOQ07f1G2c1G2cO!5{Q`O,5<xO%1hQWO,5<yO$%dQWO,5<zO!5{Q`O,5<yO!(SQ7[O'#InO%2[Q7[O1G2mO!(SQ7[O'#IpO%2}Q7[O1G2oO%3XQ7[O1G5iO%3cQ7[O1G5iOOQO,5?^,5?^OOQO-E<p-E<pOOQO1G.z1G.zO!9cQ`O,59sO%[Q^O,59sO%3pQWO1G2UO!(SQ7[O1G2]O%3uQ08SO7+'iOOQ07b7+'i7+'iO!$aQ^O7+'iO%4iQWO,5;[OOQ07`,5?`,5?`OOQ07`-E<r-E<rOOQ07b7+%c7+%cO%4nQpO'#KUO#'_QWO7+(_O%4xQrO7+(_O$CtQWO7+(_O%5PQ08QO'#ChO%5dQ08QO,5<}O%6UQWO,5<}OOQ07`1G5g1G5gOOQU7+$`7+$`O!BYQ07hO7+$`O!BeQ`O7+$`O!$aQ^O7+&]O%6ZQWO'#IyO%6rQWO,5@wOOQO1G3a1G3aO9aQWO,5@wO%6rQWO,5@wO%6zQWO,5@wOOQO,5?f,5?fOOQO-E<x-E<xOOQ07b7+'Q7+'QO%7PQWO7+(zO9kQ07hO7+(zO9aQWO7+(zO@bQWO7+(zOOQU7+(j7+(jO%7UQ08QO7+(gO!&dQ7[O7+(gO%7`QpO7+(hOOQU7+(h7+(hO!&dQ7[O7+(hO%7gQWO'#KYO%7rQWO,5=fOOQO,5?b,5?bOOQO-E<t-E<tOOQU7+(m7+(mO%9RQ`O'#HTOOQU1G3Y1G3YO!&dQ7[O1G3YO%[Q^O1G3YO%9YQWO1G3YO%9eQ7[O1G3YO9kQ07hO1G3[O$%iQWO1G3[O9UQWO1G3[O!BeQ`O1G3[O!BmQ7[O1G3[O%9sQWO'#IxO%:XQWO,5@uO%:aQ`O,5@uOOQ07`1G3]1G3]OOQU7+$U7+$UO@bQWO7+$UO9kQ07hO7+$UO%:lQWO7+$UO%[Q^O1G6dO%[Q^O1G6eO%:qQ07hO1G6dO%:{Q^O1G3dO%;SQWO1G3dO%;XQ^O1G3dOOQU7+(|7+(|O9kQ07hO7+)WO`Q^O7+)YOOQU'#K`'#K`OOQU'#I{'#I{O%;`Q^O,5>XOOQU,5>X,5>XO%[Q^O'#HnO%;mQWO'#HpOOQU,5>_,5>_O9ZQWO,5>_OOQU,5>a,5>aOOQU7+)c7+)cOOQU7+)i7+)iOOQU7+)m7+)mOOQU7+)o7+)oO%;rQ`O1G5sO%<WQ(CYO1G0vO%<bQWO1G0vOOQO1G/p1G/pO%<mQ(CYO1G/pO>pQWO1G/pO!*fQ^O'#DjOOQO,5>x,5>xOOQO-E<[-E<[OOQO,5?O,5?OOOQO-E<b-E<bO!BeQ`O1G/pOOQO-E<_-E<_OOQ07f1G0[1G0[OOQ07b7+%t7+%tO#'_QWO7+%tOOQ07b7+&[7+&[O>pQWO7+&[O!BeQ`O7+&[OOQO7+%w7+%wO$@zQ08SO7+&TOOQO7+&T7+&TO%[Q^O7+&TO%<wQ07hO7+&TO!BYQ07hO7+%wO!BeQ`O7+%wO%=SQ07hO7+&TO%=bQ08SO7++iO%[Q^O7++iO%=rQWO7++hO%=rQWO7++hOOQO1G4l1G4lO9ZQWO1G4lO%=zQWO1G4lOOQO7+%|7+%|O#'_QWO<<KyO%4xQrO<<KyO%>YQWO<<KyOOQU<<Ky<<KyO!&dQ7[O<<KyO%[Q^O<<KyO%>bQWO<<KyO%>mQ08SO,5?YO%@xQ08SO,5?[O%CTQ08SO1G2ZO%EfQ08SO1G2mO%GqQ08SO1G2oO%I|Q7[O,5>yOOQO-E<]-E<]O%JWQrO,5>zO%[Q^O,5>zOOQO-E<^-E<^O%JbQWO1G5uOOQ07b<<JQ<<JQO%JjQ(CYO1G0qO%LtQ(CYO1G0{O%L{Q(CYO1G0{O& PQ(CYO1G0{O& WQ(CYO1G0{O&!{Q(CYO1G0{O&#cQ(CYO1G0{O&%vQ(CYO1G0{O&%}Q(CYO1G0{O&'{Q(CYO1G0{O&(YQ(CYO1G0{O&*WQ(CYO1G0{O&*kQ08SO<<JdO&+pQ(CYO1G0{O&-fQ(CYO'#JdO&/iQ(CYO1G1aO&/vQ(CYO1G0TO!*fQ^O'#FnOOQO'#KQ'#KQOOQO1G1r1G1rO&0QQWO1G1qO&0VQ(CYO,5?TOOOS7+'e7+'eOOOO1G/V1G/VOOQ07b1G4q1G4qO!(SQ7[O7+(]O&2gQrO'#ChO&2qQWO,5?UO9ZQWO,5?UOOQO-E<h-E<hO&3PQWO1G6YO&3PQWO1G6YO&3XQWO1G6YO&3dQ7[O7+'uO&3tQpO,5?WO&4OQWO,5?WO!&dQ7[O,5?WOOQO-E<j-E<jO&4TQpO1G6ZO&4_QWO1G6ZOOQ07`1G2e1G2eO$*hQWO1G2eOOQ07`1G2d1G2dO&4gQWO1G2fO!&dQ7[O1G2fOOQ07`1G2k1G2kO!BeQ`O1G2dOC_QWO1G2eO&4lQWO1G2fO&4tQWO1G2eO&5hQ7[O,5?YOOQ07b-E<m-E<mO&6ZQ7[O,5?[OOQ07b-E<o-E<oO!(SQ7[O7++TOOQ07b1G/_1G/_O&6eQWO1G/_OOQ07b7+'p7+'pO&6jQ7[O7+'wO&6zQ08SO<<KTOOQ07b<<KT<<KTO&7nQWO1G0vO!&dQ7[O'#IsO&7sQWO,5@pO!&dQ7[O1G2iOOQU<<Gz<<GzO!BYQ07hO<<GzO&7{Q08SO<<IwOOQ07b<<Iw<<IwOOQO,5?e,5?eO&8oQWO,5?eO&8tQWO,5?eOOQO-E<w-E<wO&9SQWO1G6cO&9SQWO1G6cO9aQWO1G6cO@bQWO<<LfOOQU<<Lf<<LfO&9[QWO<<LfO9kQ07hO<<LfOOQU<<LR<<LRO%7UQ08QO<<LROOQU<<LS<<LSO%7`QpO<<LSO&9aQ`O'#IuO&9lQWO,5@tO!*fQ^O,5@tOOQU1G3Q1G3QO%.|Q^O'#JmOOQO'#Iw'#IwO9kQ07hO'#IwO&9tQ`O,5=oOOQU,5=o,5=oO&9{Q`O'#EcO&:aQWO7+(tO&:fQWO7+(tOOQU7+(t7+(tO!&dQ7[O7+(tO%[Q^O7+(tO&:nQWO7+(tOOQU7+(v7+(vO9kQ07hO7+(vO$%iQWO7+(vO9UQWO7+(vO!BeQ`O7+(vO&:yQWO,5?dOOQO-E<v-E<vOOQO'#HW'#HWO&;UQWO1G6aO9kQ07hO<<GpOOQU<<Gp<<GpO@bQWO<<GpO&;^QWO7+,OO&;cQWO7+,PO%[Q^O7+,OO%[Q^O7+,POOQU7+)O7+)OO&;hQWO7+)OO&;mQ^O7+)OO&;tQWO7+)OOOQU<<Lr<<LrOOQU<<Lt<<LtOOQU-E<y-E<yOOQU1G3s1G3sO&;yQWO,5>YOOQU,5>[,5>[O&<OQWO1G3yO9ZQWO7+&bO!*fQ^O7+&bOOQO7+%[7+%[O&<TQ(CYO1G6QO>pQWO7+%[OOQ07b<<I`<<I`OOQ07b<<Iv<<IvO>pQWO<<IvOOQO<<Io<<IoO$@zQ08SO<<IoO%[Q^O<<IoOOQO<<Ic<<IcO!BYQ07hO<<IcO&<_Q07hO<<IoO&<jQ08SO<= TO&<zQWO<= SOOQO7+*W7+*WO9ZQWO7+*WOOQUANAeANAeO&=SQWOANAeO!&dQ7[OANAeO#'_QWOANAeO%4xQrOANAeO%[Q^OANAeO&=[Q08SO7+'uO&?mQ08SO,5?YO&AxQ08SO,5?[O&DTQ08SO7+'wO&FfQrO1G4fO&FpQ(CYO7+&]O&HtQ(CYO,5=RO&J{Q(CYO,5=TO&K]Q(CYO,5=RO&KmQ(CYO,5=TO&K}Q(CYO,59qO&NQQ(CYO,5<fO'!TQ(CYO,5<hO'$WQ(CYO,5<vO'%|Q(CYO7+'hO'&ZQ(CYO7+'iO'&hQWO,5<YOOQO7+']7+']O'&mQ7[O<<KwOOQO1G4p1G4pO'&tQWO1G4pO''PQWO1G4pO''_QWO7++tO''_QWO7++tO!&dQ7[O1G4rO''gQpO1G4rO''qQWO7++uOOQ07`7+(P7+(PO$*hQWO7+(QO''yQpO7+(QOOQ07`7+(O7+(OO$*hQWO7+(PO'(QQWO7+(QO!&dQ7[O7+(QOC_QWO7+(PO'(VQ7[O<<NoOOQ07b7+$y7+$yO'(aQpO,5?_OOQO-E<q-E<qO'(kQ08QO7+(TOOQUAN=fAN=fO9aQWO1G5POOQO1G5P1G5PO'({QWO1G5PO')QQWO7++}O')QQWO7++}O9kQ07hOANBQO@bQWOANBQOOQUANBQANBQOOQUANAmANAmOOQUANAnANAnO')YQWO,5?aOOQO-E<s-E<sO')eQ(CYO1G6`OOQO,5?c,5?cOOQO-E<u-E<uOOQU1G3Z1G3ZO%.|Q^O,5<zOOQU<<L`<<L`O!&dQ7[O<<L`O&:aQWO<<L`O')oQWO<<L`O%[Q^O<<L`OOQU<<Lb<<LbO9kQ07hO<<LbO$%iQWO<<LbO9UQWO<<LbO')wQ`O1G5OO'*SQWO7++{OOQUAN=[AN=[O9kQ07hOAN=[OOQU<= j<= jOOQU<= k<= kO'*[QWO<= jO'*aQWO<= kOOQU<<Lj<<LjO'*fQWO<<LjO'*kQ^O<<LjOOQU1G3t1G3tO>pQWO7+)eO'*rQWO<<I|O'*}Q(CYO<<I|OOQO<<Hv<<HvOOQ07bAN?bAN?bOOQOAN?ZAN?ZO$@zQ08SOAN?ZOOQOAN>}AN>}O%[Q^OAN?ZOOQO<<Mr<<MrOOQUG27PG27PO!&dQ7[OG27PO#'_QWOG27PO'+XQWOG27PO%4xQrOG27PO'+aQ(CYO<<JdO'+nQ(CYO1G2ZO'-dQ(CYO,5?YO'/gQ(CYO,5?[O'1jQ(CYO1G2mO'3mQ(CYO1G2oO'5pQ(CYO<<KTO'5}Q(CYO<<IwOOQO1G1t1G1tO!(SQ7[OANAcOOQO7+*[7+*[O'6[QWO7+*[O'6gQWO<= `O'6oQpO7+*^OOQ07`<<Kl<<KlO$*hQWO<<KlOOQ07`<<Kk<<KkO'6yQpO<<KlO$*hQWO<<KkOOQO7+*k7+*kO9aQWO7+*kO'7QQWO<= iOOQUG27lG27lO9kQ07hOG27lO!*fQ^O1G4{O'7YQWO7++zO&:aQWOANAzOOQUANAzANAzO!&dQ7[OANAzO'7bQWOANAzOOQUANA|ANA|O9kQ07hOANA|O$%iQWOANA|OOQO'#HX'#HXOOQO7+*j7+*jOOQUG22vG22vOOQUANEUANEUOOQUANEVANEVOOQUANBUANBUO'7jQWOANBUOOQU<<MP<<MPO!*fQ^OAN?hOOQOG24uG24uO$@zQ08SOG24uO#'_QWOLD,kOOQULD,kLD,kO!&dQ7[OLD,kO'7oQWOLD,kO'7wQ(CYO7+'uO'9mQ(CYO,5?YO';pQ(CYO,5?[O'=sQ(CYO7+'wO'?iQ7[OG26}OOQO<<Mv<<MvOOQ07`ANAWANAWO$*hQWOANAWOOQ07`ANAVANAVOOQO<<NV<<NVOOQULD-WLD-WO'?yQ(CYO7+*gOOQUG27fG27fO&:aQWOG27fO!&dQ7[OG27fOOQUG27hG27hO9kQ07hOG27hOOQUG27pG27pO'@TQ(CYOG25SOOQOLD*aLD*aOOQU!$(!V!$(!VO#'_QWO!$(!VO!&dQ7[O!$(!VO'@_Q08SOG26}OOQ07`G26rG26rOOQULD-QLD-QO&:aQWOLD-QOOQULD-SLD-SOOQU!)9Eq!)9EqO#'_QWO!)9EqOOQU!$(!l!$(!lOOQU!.K;]!.K;]O'BpQ(CYOG26}O!*fQ^O'#DyO1PQWO'#EWO'DfQrO'#JiO!*fQ^O'#DqO'DmQ^O'#D}O'DtQrO'#ChO'G[QrO'#ChO!*fQ^O'#EPO'GlQ^O,5;VO!*fQ^O,5;aO!*fQ^O,5;aO!*fQ^O,5;aO!*fQ^O,5;aO!*fQ^O,5;aO!*fQ^O,5;aO!*fQ^O,5;aO!*fQ^O,5;aO!*fQ^O,5;aO!*fQ^O,5;aO!*fQ^O,5;aO!*fQ^O'#IiO'IoQWO,5<eO'IwQ7[O,5;aO'KbQ7[O,5;aO!*fQ^O,5;uO!&dQ7[O'#GgO'IwQ7[O'#GgO!&dQ7[O'#GiO'IwQ7[O'#GiO1SQWO'#DVO1SQWO'#DVO!&dQ7[O'#FzO'IwQ7[O'#FzO!&dQ7[O'#F|O'IwQ7[O'#F|O!&dQ7[O'#G[O'IwQ7[O'#G[O!*fQ^O,5:iO'KiQ`O'#D[O!*fQ^O,5@fO'GlQ^O1G0qO'KsQ(CYO'#ChO!*fQ^O1G1|O!&dQ7[O'#InO'IwQ7[O'#InO!&dQ7[O'#IpO'IwQ7[O'#IpO'K}QpO'#CqO!&dQ7[O,5<oO'IwQ7[O,5<oO'GlQ^O1G1}O!*fQ^O7+&xO!&dQ7[O1G2ZO'IwQ7[O1G2ZO!&dQ7[O'#InO'IwQ7[O'#InO!&dQ7[O'#IpO'IwQ7[O'#IpO!&dQ7[O1G2]O'IwQ7[O1G2]O'GlQ^O7+'iO'GlQ^O7+&]O!&dQ7[OANAcO'IwQ7[OANAcO'LbQWO'#EkO'LgQWO'#EkO'LoQWO'#FZO'LtQWO'#EuO'LyQWO'#JzO'MUQWO'#JxO'MaQWO,5;VO'MfQ7[O,5<bO'MmQWO'#GTO'MrQWO'#GTO'MwQWO,5<cO'NPQWO,5;VO'NXQ(CYO1G1^O'N`QWO,5<oO'NeQWO,5<oO'NjQWO,5<qO'NoQWO,5<qO'NtQWO1G1}O'NyQWO1G0qO( OQ7[O<<KwO( VQ7[O<<KwO7hQ7[O'#FxO9UQWO'#FwOA]QWO'#EjO!*fQ^O,5;rO!3fQWO'#GTO!3fQWO'#GTO!3fQWO'#GVO!3fQWO'#GVO!(SQ7[O7+(]O!(SQ7[O7+(]O%.WQpO1G2qO%.WQpO1G2qO!&dQ7[O,5=VO!&dQ7[O,5=V",
|
28131 |
states: "$EOQ%TQlOOO%[QlOOO'_QpOOP(lO`OOO*zQ!0MxO'#CiO+RO#tO'#CjO+aO&jO'#CjO+oO#@ItO'#D_O.QQlO'#DeO.bQlO'#DpO%[QlO'#DxO0fQlO'#EQOOQ!0Lf'#EY'#EYO1PQ`O'#EVOOQO'#En'#EnOOQO'#Ij'#IjO1XQ`O'#GrO1dQ`O'#EmO1iQ`O'#EmO3hQ!0MxO'#JpO6[Q!0MxO'#JqO6uQ`O'#F[O6zQ,UO'#FsOOQ!0Lf'#Fe'#FeO7VO7dO'#FeO7eQMhO'#F{O9UQ`O'#FzOOQ!0Lf'#Jq'#JqOOQ!0Lb'#Jp'#JpO9ZQ`O'#GvOOQ['#K]'#K]O9fQ`O'#IWO9kQ!0LrO'#IXOOQ['#J^'#J^OOQ['#I]'#I]Q`QlOOQ`QlOOO9sQ!L^O'#DtO9zQlO'#D|O:RQlO'#EOO9aQ`O'#GrO:YQMhO'#CoO:hQ`O'#ElO:sQ`O'#EwO:xQMhO'#FdO;gQ`O'#GrOOQO'#K^'#K^O;lQ`O'#K^O;zQ`O'#GzO;zQ`O'#G{O;zQ`O'#G}O9aQ`O'#HQO<qQ`O'#HTO>YQ`O'#CeO>jQ`O'#HaO>rQ`O'#HgO>rQ`O'#HiO`QlO'#HkO>rQ`O'#HmO>rQ`O'#HpO>wQ`O'#HvO>|Q!0LsO'#H|O%[QlO'#IOO?XQ!0LsO'#IQO?dQ!0LsO'#ISO9kQ!0LrO'#IUO?oQ!0MxO'#CiO@qQpO'#DjQOQ`OOO%[QlO'#EOOAXQ`O'#ERO:YQMhO'#ElOAdQ`O'#ElOAoQ!bO'#FdOOQ['#Cg'#CgOOQ!0Lb'#Do'#DoOOQ!0Lb'#Jt'#JtO%[QlO'#JtOOQO'#Jw'#JwOOQO'#If'#IfOBoQpO'#EeOOQ!0Lb'#Ed'#EdOOQ!0Lb'#J{'#J{OCkQ!0MSO'#EeOCuQpO'#EUOOQO'#Jv'#JvODZQpO'#JwOEhQpO'#EUOCuQpO'#EePEuO&2DjO'#CbPOOO)CD{)CD{OOOO'#I^'#I^OFQO#tO,59UOOQ!0Lh,59U,59UOOOO'#I_'#I_OF`O&jO,59UOFnQ!L^O'#DaOOOO'#Ia'#IaOFuO#@ItO,59yOOQ!0Lf,59y,59yOGTQlO'#IbOGhQ`O'#JrOIgQ!fO'#JrO+}QlO'#JrOInQ`O,5:POJUQ`O'#EnOJcQ`O'#KROJnQ`O'#KQOJnQ`O'#KQOJvQ`O,5;[OJ{Q`O'#KPOOQ!0Ln,5:[,5:[OKSQlO,5:[OMQQ!0MxO,5:dOMqQ`O,5:lON[Q!0LrO'#KOONcQ`O'#J}O9ZQ`O'#J}ONwQ`O'#J}O! PQ`O,5;ZO! UQ`O'#J}O!#ZQ!fO'#JqOOQ!0Lh'#Ci'#CiO%[QlO'#EQO!#yQ!fO,5:qOOQS'#Jx'#JxOOQO-E<h-E<hO9aQ`O,5=^O!$aQ`O,5=^O!$fQlO,5;XO!&iQMhO'#EiO!(SQ`O,5;XO!(XQlO'#DwO!(cQpO,5;bO!(kQpO,5;bO%[QlO,5;bOOQ['#FS'#FSOOQ['#FU'#FUO%[QlO,5;cO%[QlO,5;cO%[QlO,5;cO%[QlO,5;cO%[QlO,5;cO%[QlO,5;cO%[QlO,5;cO%[QlO,5;cO%[QlO,5;cO%[QlO,5;cOOQ['#FY'#FYO!(yQlO,5;sOOQ!0Lf,5;x,5;xOOQ!0Lf,5;y,5;yOOQ!0Lf,5;{,5;{O%[QlO'#InO!*|Q!0LrO,5<hO%[QlO,5;cO!&iQMhO,5;cO!+kQMhO,5;cO!-]QMhO'#E[O%[QlO,5;vOOQ!0Lf,5;z,5;zO!-dQ,UO'#FiO!.aQ,UO'#KVO!-{Q,UO'#KVO!.hQ,UO'#KVOOQO'#KV'#KVO!.|Q,UO,5<ROOOW,5<_,5<_O!/_QlO'#FuOOOW'#Im'#ImO7VO7dO,5<PO!/fQ,UO'#FwOOQ!0Lf,5<P,5<PO!0VQ$IUO'#CwOOQ!0Lh'#C{'#C{O!0jO#@ItO'#DPO!1WQMjO,5<dO!1_Q`O,5<gO!2zQ(CWO'#GWO!3XQ`O'#GXO!3^Q`O'#GXO!4|Q(CWO'#G]O!6RQpO'#GaOOQO'#Gm'#GmO!+rQMhO'#GlOOQO'#Go'#GoO!+rQMhO'#GnO!6tQ$IUO'#JjOOQ!0Lh'#Jj'#JjO!7OQ`O'#JiO!7^Q`O'#JhO!7fQ`O'#CuOOQ!0Lh'#Cy'#CyO!7qQ`O'#C{OOQ!0Lh'#DT'#DTOOQ!0Lh'#DV'#DVO1SQ`O'#DXO!+rQMhO'#GOO!+rQMhO'#GQO!7vQ`O'#GSO!7{Q`O'#GTO!3^Q`O'#GZO!+rQMhO'#G`O;zQ`O'#JiO!8QQ`O'#EoO!8oQ`O,5<fOOQ!0Lb'#Cr'#CrO!8wQ`O'#EpO!9qQpO'#EqOOQ!0Lb'#KP'#KPO!9xQ!0LrO'#K_O9kQ!0LrO,5=bO`QlO,5>rOOQ['#Jf'#JfOOQ[,5>s,5>sOOQ[-E<Z-E<ZO!;wQ!0MxO,5:`O!9lQpO,5:^O!>bQ!0MxO,5:hO%[QlO,5:hO!@xQ!0MxO,5:jOOQO,5@x,5@xO!AiQMhO,5=^O!AwQ!0LrO'#JgO9UQ`O'#JgO!BYQ!0LrO,59ZO!BeQpO,59ZO!BmQMhO,59ZO:YQMhO,59ZO!BxQ`O,5;XO!CQQ`O'#H`O!CfQ`O'#KbO%[QlO,5;|O!9lQpO,5<OO!CnQ`O,5=yO!CsQ`O,5=yO!CxQ`O,5=yO9kQ!0LrO,5=yO;zQ`O,5=iOOQO'#Cw'#CwO!DWQpO,5=fO!D`QMhO,5=gO!DkQ`O,5=iO!DpQ!bO,5=lO!DxQ`O'#K^O>wQ`O'#HVO9aQ`O'#HXO!D}Q`O'#HXO:YQMhO'#HZO!ESQ`O'#HZOOQ[,5=o,5=oO!EXQ`O'#H[O!EjQ`O'#CoO!EoQ`O,59PO!EyQ`O,59PO!HOQlO,59POOQ[,59P,59PO!H`Q!0LrO,59PO%[QlO,59PO!JkQlO'#HcOOQ['#Hd'#HdOOQ['#He'#HeO`QlO,5={O!KRQ`O,5={O`QlO,5>RO`QlO,5>TO!KWQ`O,5>VO`QlO,5>XO!K]Q`O,5>[O!KbQlO,5>bOOQ[,5>h,5>hO%[QlO,5>hO9kQ!0LrO,5>jOOQ[,5>l,5>lO# lQ`O,5>lOOQ[,5>n,5>nO# lQ`O,5>nOOQ[,5>p,5>pO#!YQpO'#D]O%[QlO'#JtO#!{QpO'#JtO##VQpO'#DkO##hQpO'#DkO#%yQlO'#DkO#&QQ`O'#JsO#&YQ`O,5:UO#&_Q`O'#ErO#&mQ`O'#KSO#&uQ`O,5;]O#&zQpO'#DkO#'XQpO'#ETOOQ!0Lf,5:m,5:mO%[QlO,5:mO#'`Q`O,5:mO>wQ`O,5;WO!BeQpO,5;WO!BmQMhO,5;WO:YQMhO,5;WO#'hQ`O,5@`O#'mQ07dO,5:qOOQO-E<d-E<dO#(sQ!0MSO,5;POCuQpO,5:pO#(}QpO,5:pOCuQpO,5;PO!BYQ!0LrO,5:pOOQ!0Lb'#Eh'#EhOOQO,5;P,5;PO%[QlO,5;PO#)[Q!0LrO,5;PO#)gQ!0LrO,5;PO!BeQpO,5:pOOQO,5;V,5;VO#)uQ!0LrO,5;PPOOO'#I['#I[P#*ZO&2DjO,58|POOO,58|,58|OOOO-E<[-E<[OOQ!0Lh1G.p1G.pOOOO-E<]-E<]OOOO,59{,59{O#*fQ!bO,59{OOOO-E<_-E<_OOQ!0Lf1G/e1G/eO#*kQ!fO,5>|O+}QlO,5>|OOQO,5?S,5?SO#*uQlO'#IbOOQO-E<`-E<`O#+SQ`O,5@^O#+[Q!fO,5@^O#+cQ`O,5@lOOQ!0Lf1G/k1G/kO%[QlO,5@mO#+kQ`O'#IhOOQO-E<f-E<fO#+cQ`O,5@lOOQ!0Lb1G0v1G0vOOQ!0Ln1G/v1G/vOOQ!0Ln1G0W1G0WO%[QlO,5@jO#,PQ!0LrO,5@jO#,bQ!0LrO,5@jO#,iQ`O,5@iO9ZQ`O,5@iO#,qQ`O,5@iO#-PQ`O'#IkO#,iQ`O,5@iOOQ!0Lb1G0u1G0uO!(cQpO,5:sO!(nQpO,5:sOOQS,5:u,5:uO#-qQdO,5:uO#-yQMhO1G2xO9aQ`O1G2xOOQ!0Lf1G0s1G0sO#.XQ!0MxO1G0sO#/^Q!0MvO,5;TOOQ!0Lh'#GV'#GVO#/zQ!0MzO'#JjO!$fQlO1G0sO#2VQ!fO'#JuO%[QlO'#JuO#2aQ`O,5:cOOQ!0Lh'#D]'#D]OOQ!0Lf1G0|1G0|O%[QlO1G0|OOQ!0Lf1G1e1G1eO#2fQ`O1G0|O#4zQ!0MxO1G0}O#5RQ!0MxO1G0}O#7iQ!0MxO1G0}O#7pQ!0MxO1G0}O#:WQ!0MxO1G0}O#<nQ!0MxO1G0}O#<uQ!0MxO1G0}O#<|Q!0MxO1G0}O#?dQ!0MxO1G0}O#?kQ!0MxO1G0}O#AxQ?MtO'#CiO#CsQ?MtO1G1_O#CzQ?MtO'#JqO#D_Q!0MxO,5?YOOQ!0Lb-E<l-E<lO#FlQ!0MxO1G0}O#GiQ!0MzO1G0}OOQ!0Lf1G0}1G0}O#HlQMjO'#JzO#HvQ`O,5:vO#H{Q!0MxO1G1bO#IoQ,UO,5<VO#IwQ,UO,5<WO#JPQ,UO'#FnO#JhQ`O'#FmOOQO'#KW'#KWOOQO'#Il'#IlO#JmQ,UO1G1mOOQ!0Lf1G1m1G1mOOOW1G1x1G1xO#KOQ?MtO'#JpO#KYQ`O,5<aO!(yQlO,5<aOOOW-E<k-E<kOOQ!0Lf1G1k1G1kO#K_QpO'#KVOOQ!0Lf,5<c,5<cO#KgQpO,5<cO#KlQMhO'#DROOOO'#I`'#I`O#KsO#@ItO,59kOOQ!0Lh,59k,59kO%[QlO1G2OO!7{Q`O'#IpO#LOQ`O,5<yOOQ!0Lh,5<v,5<vO!+rQMhO'#IsO#LlQMjO,5=WO!+rQMhO'#IuO#M_QMjO,5=YO!&iQMhO,5=[OOQO1G2R1G2RO#MiQ!dO'#CrO#M|Q(CWO'#EpO$ RQpO'#GaO$ iQ!dO,5<rO$ pQ`O'#KYO9ZQ`O'#KYO$!OQ`O,5<tO!+rQMhO,5<sO$!TQ`O'#GYO$!fQ`O,5<sO$!kQ!dO'#GVO$!xQ!dO'#KZO$#SQ`O'#KZO!&iQMhO'#KZO$#XQ`O,5<wO$#^QlO'#JtO$#hQpO'#GbO##hQpO'#GbO$#yQ`O'#GfO!3^Q`O'#GjO$$OQ!0LrO'#IrO$$ZQpO,5<{OOQ!0Lp,5<{,5<{O$$bQpO'#GbO$$oQpO'#GcO$%QQpO'#GcO$%VQMjO,5=WO$%gQMjO,5=YOOQ!0Lh,5=],5=]O!+rQMhO,5@TO!+rQMhO,5@TO$%wQ`O'#IwO$&VQ`O,5@SO$&_Q`O,59aOOQ!0Lh,59g,59gO$'UQ$IYO,59sOOQ!0Lh'#Jn'#JnO$'wQMjO,5<jO$(jQMjO,5<lO@iQ`O,5<nOOQ!0Lh,5<o,5<oO$(tQ`O,5<uO$(yQMjO,5<zO$)ZQ`O,5@TO$)iQ`O'#J}O!$fQlO1G2QO$)nQ`O1G2QO9ZQ`O'#KQO9ZQ`O'#ErO%[QlO'#ErO9ZQ`O'#IyO$)sQ!0LrO,5@yOOQ[1G2|1G2|OOQ[1G4^1G4^OOQ!0Lf1G/z1G/zOOQ!0Lf1G/x1G/xO$+uQ!0MxO1G0SOOQ[1G2x1G2xO!&iQMhO1G2xO%[QlO1G2xO#-|Q`O1G2xO$-yQMhO'#EiOOQ!0Lb,5@R,5@RO$.WQ!0LrO,5@ROOQ[1G.u1G.uO!BYQ!0LrO1G.uO!BeQpO1G.uO!BmQMhO1G.uO$.iQ`O1G0sO$.nQ`O'#CiO$.yQ`O'#KcO$/RQ`O,5=zO$/WQ`O'#KcO$/]Q`O'#KcO$/kQ`O'#JPO$/yQ`O,5@|O$0RQ!fO1G1hOOQ!0Lf1G1j1G1jO9aQ`O1G3eO@iQ`O1G3eO$0YQ`O1G3eO$0_Q`O1G3eOOQ[1G3e1G3eO!DkQ`O1G3TO!&iQMhO1G3QO$0dQ`O1G3QOOQ[1G3R1G3RO!&iQMhO1G3RO$0iQ`O1G3RO$0qQpO'#HPOOQ[1G3T1G3TO!5|QpO'#I{O!DpQ!bO1G3WOOQ[1G3W1G3WOOQ[,5=q,5=qO$0yQMhO,5=sO9aQ`O,5=sO$#yQ`O,5=uO9UQ`O,5=uO!BeQpO,5=uO!BmQMhO,5=uO:YQMhO,5=uO$1XQ`O'#KaO$1dQ`O,5=vOOQ[1G.k1G.kO$1iQ!0LrO1G.kO@iQ`O1G.kO$1tQ`O1G.kO9kQ!0LrO1G.kO$3|Q!fO,5AOO$4ZQ`O,5AOO9ZQ`O,5AOO$4fQlO,5=}O$4mQ`O,5=}OOQ[1G3g1G3gO`QlO1G3gOOQ[1G3m1G3mOOQ[1G3o1G3oO>rQ`O1G3qO$4rQlO1G3sO$8vQlO'#HrOOQ[1G3v1G3vO$9TQ`O'#HxO>wQ`O'#HzOOQ[1G3|1G3|O$9]QlO1G3|O9kQ!0LrO1G4SOOQ[1G4U1G4UOOQ!0Lb'#G^'#G^O9kQ!0LrO1G4WO9kQ!0LrO1G4YO$=dQ`O,5@`O!(yQlO,5;^O9ZQ`O,5;^O>wQ`O,5:VO!(yQlO,5:VO!BeQpO,5:VO$=iQ?MtO,5:VOOQO,5;^,5;^O$=sQpO'#IcO$>ZQ`O,5@_OOQ!0Lf1G/p1G/pO$>cQpO'#IiO$>mQ`O,5@nOOQ!0Lb1G0w1G0wO##hQpO,5:VOOQO'#Ie'#IeO$>uQpO,5:oOOQ!0Ln,5:o,5:oO#'cQ`O1G0XOOQ!0Lf1G0X1G0XO%[QlO1G0XOOQ!0Lf1G0r1G0rO>wQ`O1G0rO!BeQpO1G0rO!BmQMhO1G0rOOQ!0Lb1G5z1G5zO!BYQ!0LrO1G0[OOQO1G0k1G0kO%[QlO1G0kO$>|Q!0LrO1G0kO$?XQ!0LrO1G0kO!BeQpO1G0[OCuQpO1G0[O$?gQ!0LrO1G0kOOQO1G0[1G0[O$?{Q!0MxO1G0kPOOO-E<Y-E<YPOOO1G.h1G.hOOOO1G/g1G/gO$@VQ!bO,5<hO$@_Q!fO1G4hOOQO1G4n1G4nO%[QlO,5>|O$@iQ`O1G5xO$@qQ`O1G6WO$@yQ!fO1G6XO9ZQ`O,5?SO$ATQ!0MxO1G6UO%[QlO1G6UO$AeQ!0LrO1G6UO$AvQ`O1G6TO$AvQ`O1G6TO9ZQ`O1G6TO$BOQ`O,5?VO9ZQ`O,5?VOOQO,5?V,5?VO$BdQ`O,5?VO$)iQ`O,5?VOOQO-E<i-E<iOOQS1G0_1G0_OOQS1G0a1G0aO#-tQ`O1G0aOOQ[7+(d7+(dO!&iQMhO7+(dO%[QlO7+(dO$BrQ`O7+(dO$B}QMhO7+(dO$C]Q!0MzO,5=WO$EhQ!0MzO,5=YO$GsQ!0MzO,5=WO$JUQ!0MzO,5=YO$LgQ!0MzO,59sO$NlQ!0MzO,5<jO%!wQ!0MzO,5<lO%%SQ!0MzO,5<zOOQ!0Lf7+&_7+&_O%'eQ!0MxO7+&_O%(XQlO'#IdO%(fQ`O,5@aO%(nQ!fO,5@aOOQ!0Lf1G/}1G/}O%(xQ`O7+&hOOQ!0Lf7+&h7+&hO%(}Q?MtO,5:dO%[QlO7+&yO%)XQ?MtO,5:`O%)fQ?MtO,5:hO%)pQ?MtO,5:jO%)zQMhO'#IgO%*UQ`O,5@fOOQ!0Lh1G0b1G0bOOQO1G1q1G1qOOQO1G1r1G1rO%*^Q!jO,5<YO!(yQlO,5<XOOQO-E<j-E<jOOQ!0Lf7+'X7+'XOOOW7+'d7+'dOOOW1G1{1G1{O%*iQ`O1G1{OOQ!0Lf1G1}1G1}OOOO,59m,59mO%*nQ!dO,59mOOOO-E<^-E<^OOQ!0Lh1G/V1G/VO%*uQ!0MxO7+'jOOQ!0Lh,5?[,5?[O%+iQMhO1G2eP%+pQ`O'#IpPOQ!0Lh-E<n-E<nO%,^QMjO,5?_OOQ!0Lh-E<q-E<qO%-PQMjO,5?aOOQ!0Lh-E<s-E<sO%-ZQ!dO1G2vO%-bQ!dO'#CrO%-xQMhO'#KQO$#^QlO'#JtOOQ!0Lh1G2^1G2^O%.PQ`O'#IoO%.eQ`O,5@tO%.eQ`O,5@tO%.mQ`O,5@tO%.xQ`O,5@tOOQO1G2`1G2`O%/WQMjO1G2_O!+rQMhO1G2_O%/hQ(CWO'#IqO%/uQ`O,5@uO!&iQMhO,5@uO%/}Q!dO,5@uOOQ!0Lh1G2c1G2cO%2_Q!fO'#CiO%2iQ`O,5=OOOQ!0Lb,5<|,5<|O%2qQpO,5<|OOQ!0Lb,5<},5<}OCfQ`O,5<|O%2|QpO,5<|OOQ!0Lb,5=Q,5=QO$)iQ`O,5=UOOQO,5?^,5?^OOQO-E<p-E<pOOQ!0Lp1G2g1G2gO##hQpO,5<|O$#^QlO,5=OO%3[Q`O,5<}O%3gQpO,5<}O!+rQMhO'#IsO%4aQMjO1G2rO!+rQMhO'#IuO%5SQMjO1G2tO%5^QMjO1G5oO%5hQMjO1G5oOOQO,5?c,5?cOOQO-E<u-E<uOOQO1G.{1G.{O!9lQpO,59uO%[QlO,59uOOQ!0Lh,5<i,5<iO%5uQ`O1G2YO!+rQMhO1G2aO!+rQMhO1G5oO!+rQMhO1G5oO%5zQ!0MxO7+'lOOQ!0Lf7+'l7+'lO!$fQlO7+'lO%6nQ`O,5;^OOQ!0Lb,5?e,5?eOOQ!0Lb-E<w-E<wO%6sQ!dO'#K[O#'cQ`O7+(dO4UQ!fO7+(dO$BuQ`O7+(dO%6}Q!0MvO'#CiO%7nQ!0LrO,5=RO%8PQ!0MvO,5=RO%8dQ`O,5=ROOQ!0Lb1G5m1G5mOOQ[7+$a7+$aO!BYQ!0LrO7+$aO!BeQpO7+$aO!$fQlO7+&_O%8lQ`O'#JOO%9TQ`O,5@}OOQO1G3f1G3fO9aQ`O,5@}O%9TQ`O,5@}O%9]Q`O,5@}OOQO,5?k,5?kOOQO-E<}-E<}OOQ!0Lf7+'S7+'SO%9bQ`O7+)PO9kQ!0LrO7+)PO9aQ`O7+)PO@iQ`O7+)POOQ[7+(o7+(oO%9gQ!0MvO7+(lO!&iQMhO7+(lO!DfQ`O7+(mOOQ[7+(m7+(mO!&iQMhO7+(mO%9qQ`O'#K`O%9|Q`O,5=kOOQO,5?g,5?gOOQO-E<y-E<yOOQ[7+(r7+(rO%;`QpO'#HYOOQ[1G3_1G3_O!&iQMhO1G3_O%[QlO1G3_O%;gQ`O1G3_O%;rQMhO1G3_O9kQ!0LrO1G3aO$#yQ`O1G3aO9UQ`O1G3aO!BeQpO1G3aO!BmQMhO1G3aO%<QQ`O'#I}O%<fQ`O,5@{O%<nQpO,5@{OOQ!0Lb1G3b1G3bOOQ[7+$V7+$VO@iQ`O7+$VO9kQ!0LrO7+$VO%<yQ`O7+$VO%[QlO1G6jO%[QlO1G6kO%=OQ!0LrO1G6jO%=YQlO1G3iO%=aQ`O1G3iO%=fQlO1G3iOOQ[7+)R7+)RO9kQ!0LrO7+)]O`QlO7+)_OOQ['#Kf'#KfOOQ['#JQ'#JQO%=mQlO,5>^OOQ[,5>^,5>^O%[QlO'#HsO%=zQ`O'#HuOOQ[,5>d,5>dO9ZQ`O,5>dOOQ[,5>f,5>fOOQ[7+)h7+)hOOQ[7+)n7+)nOOQ[7+)r7+)rOOQ[7+)t7+)tO%>PQpO1G5zO%>kQ?MtO1G0xO%>uQ`O1G0xOOQO1G/q1G/qO%?QQ?MtO1G/qO>wQ`O1G/qO!(yQlO'#DkOOQO,5>},5>}OOQO-E<a-E<aOOQO,5?T,5?TOOQO-E<g-E<gO!BeQpO1G/qOOQO-E<c-E<cOOQ!0Ln1G0Z1G0ZOOQ!0Lf7+%s7+%sO#'cQ`O7+%sOOQ!0Lf7+&^7+&^O>wQ`O7+&^O!BeQpO7+&^OOQO7+%v7+%vO$?{Q!0MxO7+&VOOQO7+&V7+&VO%[QlO7+&VO%?[Q!0LrO7+&VO!BYQ!0LrO7+%vO!BeQpO7+%vO%?gQ!0LrO7+&VO%?uQ!0MxO7++pO%[QlO7++pO%@VQ`O7++oO%@VQ`O7++oOOQO1G4q1G4qO9ZQ`O1G4qO%@_Q`O1G4qOOQS7+%{7+%{O#'cQ`O<<LOO4UQ!fO<<LOO%@mQ`O<<LOOOQ[<<LO<<LOO!&iQMhO<<LOO%[QlO<<LOO%@uQ`O<<LOO%AQQ!0MzO,5?_O%C]Q!0MzO,5?aO%EhQ!0MzO1G2_O%GyQ!0MzO1G2rO%JUQ!0MzO1G2tO%LaQ!fO,5?OO%[QlO,5?OOOQO-E<b-E<bO%LkQ`O1G5{OOQ!0Lf<<JS<<JSO%LsQ?MtO1G0sO%NzQ?MtO1G0}O& RQ?MtO1G0}O&#SQ?MtO1G0}O&#ZQ?MtO1G0}O&%[Q?MtO1G0}O&']Q?MtO1G0}O&'dQ?MtO1G0}O&'kQ?MtO1G0}O&)lQ?MtO1G0}O&)sQ?MtO1G0}O&)zQ!0MxO<<JeO&+rQ?MtO1G0}O&,oQ?MvO1G0}O&-rQ?MvO'#JjO&/xQ?MtO1G1bO&0VQ?MtO1G0SO&0aQMjO,5?ROOQO-E<e-E<eO!(yQlO'#FpOOQO'#KX'#KXOOQO1G1t1G1tO&0kQ`O1G1sO&0pQ?MtO,5?YOOOW7+'g7+'gOOOO1G/X1G/XO&0zQ!dO1G4vOOQ!0Lh7+(P7+(PP!&iQMhO,5?[O!+rQMhO7+(bO&1RQ`O,5?ZO9ZQ`O,5?ZOOQO-E<m-E<mO&1aQ`O1G6`O&1aQ`O1G6`O&1iQ`O1G6`O&1tQMjO7+'yO&2UQ!dO,5?]O&2`Q`O,5?]O!&iQMhO,5?]OOQO-E<o-E<oO&2eQ!dO1G6aO&2oQ`O1G6aO&2wQ`O1G2jO!&iQMhO1G2jOOQ!0Lb1G2h1G2hOOQ!0Lb1G2i1G2iO%2qQpO1G2hO!BeQpO1G2hOCfQ`O1G2hOOQ!0Lb1G2p1G2pO&2|QpO1G2hO&3[Q`O1G2jO$)iQ`O1G2iOCfQ`O1G2iO$#^QlO1G2jO&3dQ`O1G2iO&4WQMjO,5?_OOQ!0Lh-E<r-E<rO&4yQMjO,5?aOOQ!0Lh-E<t-E<tO!+rQMhO7++ZOOQ!0Lh1G/a1G/aO&5TQ`O1G/aOOQ!0Lh7+'t7+'tO&5YQMjO7+'{O&5jQMjO7++ZO&5tQMjO7++ZO&6RQ!0MxO<<KWOOQ!0Lf<<KW<<KWO&6uQ`O1G0xO!&iQMhO'#IxO&6zQ`O,5@vO&8|Q!fO<<LOO!&iQMhO1G2mO&9TQ!0LrO1G2mOOQ[<<G{<<G{O!BYQ!0LrO<<G{O&9fQ!0MxO<<IyOOQ!0Lf<<Iy<<IyOOQO,5?j,5?jO&:YQ`O,5?jO&:_Q`O,5?jOOQO-E<|-E<|O&:mQ`O1G6iO&:mQ`O1G6iO9aQ`O1G6iO@iQ`O<<LkOOQ[<<Lk<<LkO&:uQ`O<<LkO9kQ!0LrO<<LkOOQ[<<LW<<LWO%9gQ!0MvO<<LWOOQ[<<LX<<LXO!DfQ`O<<LXO&:zQpO'#IzO&;VQ`O,5@zO!(yQlO,5@zOOQ[1G3V1G3VOOQO'#I|'#I|O9kQ!0LrO'#I|O&;_QpO,5=tOOQ[,5=t,5=tO&;fQpO'#EeO&;mQpO'#GdO&;rQ`O7+(yO&;wQ`O7+(yOOQ[7+(y7+(yO!&iQMhO7+(yO%[QlO7+(yO&<PQ`O7+(yOOQ[7+({7+({O9kQ!0LrO7+({O$#yQ`O7+({O9UQ`O7+({O!BeQpO7+({O&<[Q`O,5?iOOQO-E<{-E<{OOQO'#H]'#H]O&<gQ`O1G6gO9kQ!0LrO<<GqOOQ[<<Gq<<GqO@iQ`O<<GqO&<oQ`O7+,UO&<tQ`O7+,VO%[QlO7+,UO%[QlO7+,VOOQ[7+)T7+)TO&<yQ`O7+)TO&=OQlO7+)TO&=VQ`O7+)TOOQ[<<Lw<<LwOOQ[<<Ly<<LyOOQ[-E=O-E=OOOQ[1G3x1G3xO&=[Q`O,5>_OOQ[,5>a,5>aO&=aQ`O1G4OO9ZQ`O7+&dO!(yQlO7+&dOOQO7+%]7+%]O&=fQ?MtO1G6XO>wQ`O7+%]OOQ!0Lf<<I_<<I_OOQ!0Lf<<Ix<<IxO>wQ`O<<IxOOQO<<Iq<<IqO$?{Q!0MxO<<IqO%[QlO<<IqOOQO<<Ib<<IbO!BYQ!0LrO<<IbO&=pQ!0LrO<<IqO&={Q!0MxO<= [O&>]Q`O<= ZOOQO7+*]7+*]O9ZQ`O7+*]OOQ[ANAjANAjO&>eQ!fOANAjO!&iQMhOANAjO#'cQ`OANAjO4UQ!fOANAjO&>lQ`OANAjO%[QlOANAjO&>tQ!0MzO7+'yO&AVQ!0MzO,5?_O&CbQ!0MzO,5?aO&EmQ!0MzO7+'{O&HOQ!fO1G4jO&HYQ?MtO7+&_O&J^Q?MvO,5=WO&LeQ?MvO,5=YO&LuQ?MvO,5=WO&MVQ?MvO,5=YO&MgQ?MvO,59sO' mQ?MvO,5<jO'#pQ?MvO,5<lO'&UQ?MvO,5<zO''zQ?MtO7+'jO'(XQ?MtO7+'lO'(fQ`O,5<[OOQO7+'_7+'_OOQ!0Lh7+*b7+*bO'(kQMjO<<K|OOQO1G4u1G4uO'(rQ`O1G4uO'(}Q`O1G4uO')]Q`O7++zO')]Q`O7++zO!&iQMhO1G4wO')eQ!dO1G4wO')oQ`O7++{O')wQ`O7+(UO'*SQ!dO7+(UOOQ!0Lb7+(S7+(SOOQ!0Lb7+(T7+(TO!BeQpO7+(SOCfQ`O7+(SO'*^Q`O7+(UO!&iQMhO7+(UO$)iQ`O7+(TO'*cQ`O7+(UOCfQ`O7+(TO'*kQMjO<<NuOOQ!0Lh7+${7+${O!+rQMhO<<NuO'*uQ!dO,5?dOOQO-E<v-E<vO'+PQ!0MvO7+(XO!&iQMhO7+(XOOQ[AN=gAN=gO9aQ`O1G5UOOQO1G5U1G5UO'+aQ`O1G5UO'+fQ`O7+,TO'+fQ`O7+,TO9kQ!0LrOANBVO@iQ`OANBVOOQ[ANBVANBVOOQ[ANArANArOOQ[ANAsANAsO'+nQ`O,5?fOOQO-E<x-E<xO'+yQ?MtO1G6fOOQO,5?h,5?hOOQO-E<z-E<zOOQ[1G3`1G3`O',TQ`O,5=OOOQ[<<Le<<LeO!&iQMhO<<LeO&;rQ`O<<LeO',YQ`O<<LeO%[QlO<<LeOOQ[<<Lg<<LgO9kQ!0LrO<<LgO$#yQ`O<<LgO9UQ`O<<LgO',bQpO1G5TO',mQ`O7+,ROOQ[AN=]AN=]O9kQ!0LrOAN=]OOQ[<= p<= pOOQ[<= q<= qO',uQ`O<= pO',zQ`O<= qOOQ[<<Lo<<LoO'-PQ`O<<LoO'-UQlO<<LoOOQ[1G3y1G3yO>wQ`O7+)jO'-]Q`O<<JOO'-hQ?MtO<<JOOOQO<<Hw<<HwOOQ!0LfAN?dAN?dOOQOAN?]AN?]O$?{Q!0MxOAN?]OOQOAN>|AN>|O%[QlOAN?]OOQO<<Mw<<MwOOQ[G27UG27UO!&iQMhOG27UO#'cQ`OG27UO'-rQ!fOG27UO4UQ!fOG27UO'-yQ`OG27UO'.RQ?MtO<<JeO'.`Q?MvO1G2_O'0UQ?MvO,5?_O'2XQ?MvO,5?aO'4[Q?MvO1G2rO'6_Q?MvO1G2tO'8bQ?MtO<<KWO'8oQ?MtO<<IyOOQO1G1v1G1vO!+rQMhOANAhOOQO7+*a7+*aO'8|Q`O7+*aO'9XQ`O<= fO'9aQ!dO7+*cOOQ!0Lb<<Kp<<KpO$)iQ`O<<KpOCfQ`O<<KpO'9kQ`O<<KpO!&iQMhO<<KpOOQ!0Lb<<Kn<<KnO!BeQpO<<KnO'9vQ!dO<<KpOOQ!0Lb<<Ko<<KoO':QQ`O<<KpO!&iQMhO<<KpO$)iQ`O<<KoO':VQMjOANDaO':aQ!0MvO<<KsOOQO7+*p7+*pO9aQ`O7+*pO':qQ`O<= oOOQ[G27qG27qO9kQ!0LrOG27qO!(yQlO1G5QO':yQ`O7+,QO';RQ`O1G2jO&;rQ`OANBPOOQ[ANBPANBPO!&iQMhOANBPO';WQ`OANBPOOQ[ANBRANBRO9kQ!0LrOANBRO$#yQ`OANBROOQO'#H^'#H^OOQO7+*o7+*oOOQ[G22wG22wOOQ[ANE[ANE[OOQ[ANE]ANE]OOQ[ANBZANBZO';`Q`OANBZOOQ[<<MU<<MUO!(yQlOAN?jOOQOG24wG24wO$?{Q!0MxOG24wO#'cQ`OLD,pOOQ[LD,pLD,pO!&iQMhOLD,pO';eQ!fOLD,pO';lQ?MvO7+'yO'=bQ?MvO,5?_O'?eQ?MvO,5?aO'AhQ?MvO7+'{O'C^QMjOG27SOOQO<<M{<<M{OOQ!0LbANA[ANA[O$)iQ`OANA[OCfQ`OANA[O'CnQ!dOANA[OOQ!0LbANAYANAYO'CuQ`OANA[O!&iQMhOANA[O'DQQ!dOANA[OOQ!0LbANAZANAZOOQO<<N[<<N[OOQ[LD-]LD-]O'D[Q?MtO7+*lOOQO'#Ge'#GeOOQ[G27kG27kO&;rQ`OG27kO!&iQMhOG27kOOQ[G27mG27mO9kQ!0LrOG27mOOQ[G27uG27uO'DfQ?MtOG25UOOQOLD*cLD*cOOQ[!$(![!$(![O#'cQ`O!$(![O!&iQMhO!$(![O'DpQ!0MzOG27SOOQ!0LbG26vG26vO$)iQ`OG26vO'GRQ`OG26vOCfQ`OG26vO'G^Q!dOG26vO!&iQMhOG26vOOQ[LD-VLD-VO&;rQ`OLD-VOOQ[LD-XLD-XOOQ[!)9Ev!)9EvO#'cQ`O!)9EvOOQ!0LbLD,bLD,bO$)iQ`OLD,bOCfQ`OLD,bO'GeQ`OLD,bO'GpQ!dOLD,bOOQ[!$(!q!$(!qOOQ[!.K;b!.K;bO'GwQ?MvOG27SOOQ!0Lb!$( |!$( |O$)iQ`O!$( |OCfQ`O!$( |O'ImQ`O!$( |OOQ!0Lb!)9Eh!)9EhO$)iQ`O!)9EhOCfQ`O!)9EhOOQ!0Lb!.K;S!.K;SO$)iQ`O!.K;SOOQ!0Lb!4/0n!4/0nO!(yQlO'#DxO1PQ`O'#EVO'IxQ!fO'#JpO'JPQ!L^O'#DtO'JWQlO'#D|O'J_Q!fO'#CiO'LuQ!fO'#CiO!(yQlO'#EOO'MVQlO,5;XO!(yQlO,5;cO!(yQlO,5;cO!(yQlO,5;cO!(yQlO,5;cO!(yQlO,5;cO!(yQlO,5;cO!(yQlO,5;cO!(yQlO,5;cO!(yQlO,5;cO!(yQlO,5;cO!(yQlO'#InO( YQ`O,5<hO!(yQlO,5;cO( bQMhO,5;cO(!{QMhO,5;cO!(yQlO,5;vO!&iQMhO'#GlO( bQMhO'#GlO!&iQMhO'#GnO( bQMhO'#GnO1SQ`O'#DXO1SQ`O'#DXO!&iQMhO'#GOO( bQMhO'#GOO!&iQMhO'#GQO( bQMhO'#GQO!&iQMhO'#G`O( bQMhO'#G`O!(yQlO,5:hO(#SQpO'#D]O(#^QpO'#JtO!(yQlO,5@mO'MVQlO1G0sO(#hQ?MtO'#CiO!(yQlO1G2OO!&iQMhO'#IsO( bQMhO'#IsO!&iQMhO'#IuO( bQMhO'#IuO(#rQ!dO'#CrO!&iQMhO,5<sO( bQMhO,5<sO'MVQlO1G2QO!(yQlO7+&yO!&iQMhO1G2_O( bQMhO1G2_O!&iQMhO'#IsO( bQMhO'#IsO!&iQMhO'#IuO( bQMhO'#IuO!&iQMhO1G2aO( bQMhO1G2aO'MVQlO7+'lO'MVQlO7+&_O!&iQMhOANAhO( bQMhOANAhO($VQ`O'#EmO($[Q`O'#EmO($dQ`O'#F[O($iQ`O'#EwO($nQ`O'#KRO($yQ`O'#KPO(%UQ`O,5;XO(%ZQMjO,5<dO(%bQ`O'#GXO(%gQ`O'#GXO(%lQ`O,5<fO(%tQ`O,5;XO(%|Q?MtO1G1_O(&TQ`O,5<sO(&YQ`O,5<sO(&_Q`O,5<uO(&dQ`O,5<uO(&iQ`O1G2QO(&nQ`O1G0sO(&sQMjO<<K|O(&zQMjO<<K|O7eQMhO'#F{O9UQ`O'#FzOAdQ`O'#ElO!(yQlO,5;sO!3^Q`O'#GXO!3^Q`O'#GXO!3^Q`O'#GZO!3^Q`O'#GZO!+rQMhO7+(bO!+rQMhO7+(bO%-ZQ!dO1G2vO%-ZQ!dO1G2vO!&iQMhO,5=[O!&iQMhO,5=[",
|
| 27388 |
stateData: "(!Z~O'tOS'uOSSOS'vRQ~OPYOQYORfOX!VO`qOczOdyOlkOnYOokOpkOvkOxYOzYO!PWO!TkO!UkO![XO!fuO!kZO!nYO!oYO!pYO!rvO!twO!wxO!{]O#s!PO$T|O%b}O%d!QO%f!OO%g!OO%h!OO%k!RO%m!SO%p!TO%q!TO%s!UO&P!WO&V!XO&X!YO&Z!ZO&]![O&`!]O&f!^O&l!_O&n!`O&p!aO&r!bO&t!cO'{SO'}TO(QUO(XVO(g[O(uiO~OVtO~P`OPYOQYORfOc!jOd!iOlkOnYOokOpkOvkOxYOzYO!PWO!TkO!UkO![!eO!fuO!kZO!nYO!oYO!pYO!rvO!t!gO!w!hO$T!kO'{!dO'}TO(QUO(XVO(g[O(uiO~O`!wOo!nO!P!oO!_!yO!`!vO!a!vO!{:jO#P!pO#Q!pO#R!xO#S!pO#T!pO#W!zO#X!zO'|!lO'}TO(QUO([!mO(g!sO~O'v!{O~OP[XZ[X`[Xn[X|[X}[X!P[X!Y[X!h[X!i[X!k[X!o[X#[[X#geX#j[X#k[X#l[X#m[X#n[X#o[X#p[X#q[X#r[X#t[X#v[X#x[X#y[X$O[X'r[X(X[X(i[X(p[X(q[X~O!d$|X~P(qO^!}O'}#PO(O!}O(P#PO~O^#QO(P#PO(Q#PO(R#QO~Ot#SO!R#TO(Y#TO(Z#VO~OPYOQYORfOc!jOd!iOlkOnYOokOpkOvkOxYOzYO!PWO!TkO!UkO![!eO!fuO!kZO!nYO!oYO!pYO!rvO!t!gO!w!hO$T!kO'{:nO'}TO(QUO(XVO(g[O(uiO~O!X#ZO!Y#WO!V(_P!V(mP~P+}O!Z#cO~P`OPYOQYORfOc!jOd!iOnYOokOpkOvkOxYOzYO!PWO!TkO!UkO![!eO!fuO!kZO!nYO!oYO!pYO!rvO!t!gO!w!hO$T!kO'}TO(QUO(XVO(g[O(uiO~Ol#mO!X#iO!{]O#e#lO#f#iO'{:oO!j(jP~P.iO!k#oO'{#nO~O!w#sO!{]O%b#tO~O#g#uO~O!d#vO#g#uO~OP$^OZ$eOn$RO|#zO}#{O!P#|O!Y$bO!h$TO!i#xO!k#yO!o$^O#j$PO#k$QO#l$QO#m$QO#n$SO#o$TO#p$TO#q$dO#r$TO#t$UO#v$WO#x$YO#y$ZO(XVO(i$[O(p#}O(q$OO~O`(]X'r(]X'p(]X!j(]X!V(]X![(]X%c(]X!d(]X~P1qO#[$fO$O$fOP(^XZ(^Xn(^X|(^X}(^X!P(^X!Y(^X!h(^X!k(^X!o(^X#j(^X#k(^X#l(^X#m(^X#n(^X#o(^X#p(^X#q(^X#r(^X#t(^X#v(^X#x(^X#y(^X(X(^X(i(^X(p(^X(q(^X![(^X%c(^X~O`(^X!i(^X'r(^X'p(^X!V(^X!j(^Xr(^X!d(^X~P4XO#[$fO~O$Y$hO$[$gO$c$mO~ORfO![$nO$f$oO$h$qO~Og%WOl%XOn$uOo$tOp$tOv%YOx%ZOz%[O!P$|O![$}O!f%aO!k$yO#f%bO$T%_O$o%]O$q%^O$t%`O'{$sO'}TO(QUO(X$vO(p%OO(q%QOf(UP~O!k%cO~O!P%fO![%gO'{%eO~O!d%kO~O`%lO'r%lO~O'|!lO~P%[O%h%sO~P%[Og%WO!k%cO'{%eO'|!lO~Od%zO!k%cO'{%eO~O#r$TO~O|&PO![%|O!k&OO%d&SO'{%eO'|!lO'}TO(QUO_)OP~O!w#sO~O%m&UO!P(zX![(zX'{(zX~O'{&VO~O!t&[O#s!PO%d!QO%f!OO%g!OO%h!OO%k!RO%m!SO%p!TO%q!TO~Oc&aOd&`O!w&^O%b&_O%u&]O~P;xOc&dOdyO![&cO!t&[O!wxO!{]O#s!PO%b}O%f!OO%g!OO%h!OO%k!RO%m!SO%p!TO%q!TO%s!UO~Oa&gO#[&jO%d&eO'|!lO~P<}O!k&kO!t&oO~O!k#oO~O![XO~O`%lO'q&wO'r%lO~O`%lO'q&zO'r%lO~O`%lO'q&|O'r%lO~O'p[X!V[Xr[X!j[X&T[X![[X%c[X!d[X~P(qO!_'ZO!`'SO!a'SO'|!lO'}TO(QUO~Oo'QO!P'PO!X'TO(['OO!Z(`P!Z(oP~P@UOj'^O!['[O'{%eO~Od'cO!k%cO'{%eO~O|&PO!k&OO~Oo!nO!P!oO!{:jO#P!pO#Q!pO#S!pO#T!pO'|!lO'}TO(QUO([!mO(g!sO~O!_'iO!`'hO!a'hO#R!pO#W'jO#X'jO~PApO`%lOg%WO!d#vO!k%cO'r%lO(i'lO~O!o'pO#['nO~PCOOo!nO!P!oO'}TO(QUO([!mO(g!sO~O![XOo(eX!P(eX!_(eX!`(eX!a(eX!{(eX#P(eX#Q(eX#R(eX#S(eX#T(eX#W(eX#X(eX'|(eX'}(eX(Q(eX([(eX(g(eX~O!`'hO!a'hO'|!lO~PCnO'w'tO'x'tO'y'vO~O^!}O'}'xO(O!}O(P'xO~O^#QO(P'xO(Q'xO(R#QO~Ot#SO!R#TO(Y#TO(Z'|O~O!X(OO!V'PX!V'VX!Y'PX!Y'VX~P+}O!Y(QO!V(_X~OP$^OZ$eOn$RO|#zO}#{O!P#|O!Y(QO!h$TO!i#xO!k#yO!o$^O#j$PO#k$QO#l$QO#m$QO#n$SO#o$TO#p$TO#q$dO#r$TO#t$UO#v$WO#x$YO#y$ZO(XVO(i$[O(p#}O(q$OO~O!V(_X~PGbO!V(VO~O!V(lX!Y(lX!d(lX!j(lX(i(lX~O#[(lX#g#`X!Z(lX~PIhO#[(WO!V(nX!Y(nX~O!Y(XO!V(mX~O!V([O~O#[$fO~PIhO!Z(]O~P`O|#zO}#{O!P#|O!i#xO!k#yO(XVOP!maZ!man!ma!Y!ma!h!ma!o!ma#j!ma#k!ma#l!ma#m!ma#n!ma#o!ma#p!ma#q!ma#r!ma#t!ma#v!ma#x!ma#y!ma(i!ma(p!ma(q!ma~O`!ma'r!ma'p!ma!V!ma!j!mar!ma![!ma%c!ma!d!ma~PKOO!j(^O~O!d#vO#[(_O(i'lO!Y(kX`(kX'r(kX~O!j(kX~PMnO!P%fO![%gO!{]O#e(dO#f(cO'{%eO~O!Y(eO!j(jX~O!j(gO~O!P%fO![%gO#f(cO'{%eO~OP(^XZ(^Xn(^X|(^X}(^X!P(^X!Y(^X!h(^X!i(^X!k(^X!o(^X#j(^X#k(^X#l(^X#m(^X#n(^X#o(^X#p(^X#q(^X#r(^X#t(^X#v(^X#x(^X#y(^X(X(^X(i(^X(p(^X(q(^X~O!d#vO!j(^X~P! [O|(hO}(iO!i#xO!k#yO!{!za!P!za~O!w!za%b!za![!za#e!za#f!za'{!za~P!#`O!w(mO~OPYOQYORfOc!jOd!iOlkOnYOokOpkOvkOxYOzYO!PWO!TkO!UkO![XO!fuO!kZO!nYO!oYO!pYO!rvO!t!gO!w!hO$T!kO'{!dO'}TO(QUO(XVO(g[O(uiO~Og%WOl%XOn$uOo$tOp$tOv%YOx%ZOz;WO!P$|O![$}O!f<hO!k$yO#f;^O$T%_O$o;YO$q;[O$t%`O'{(qO'}TO(QUO(X$vO(p%OO(q%QO~O#g(sO~Og%WOl%XOn$uOo$tOp$tOv%YOx%ZOz%[O!P$|O![$}O!f%aO!k$yO#f%bO$T%_O$o%]O$q%^O$t%`O'{(qO'}TO(QUO(X$vO(p%OO(q%QO~Of(bP~P!(SO!X(wO!j(cP~P%[O([(yO(g[O~O!P({O!k#yO([(yO(g[O~OP:iOQ:iORfOc<dOd!iOlkOn:iOokOpkOvkOx:iOz:iO!PWO!TkO!UkO![!eO!f:lO!kZO!n:iO!o:iO!p:iO!r:mO!t:pO!w!hO$T!kO'{)ZO'}TO(QUO(XVO(g[O(u<bO~O})^O!k#yO~O!Y$bO`$ma'r$ma'p$ma!j$ma!V$ma![$ma%c$ma!d$ma~O#s)bO~P!&dO|)eO!d)dO![$ZX$W$ZX$Y$ZX$[$ZX$c$ZX~O!d)dO![(rX$W(rX$Y(rX$[(rX$c(rX~O|)eO~P!.OO|)eO![(rX$W(rX$Y(rX$[(rX$c(rX~O![)gO$W)kO$Y)fO$[)fO$c)lO~O!X)oO~P!*fO$Y$hO$[$gO$c)sO~Oj$uX|$uX!P$uX!i$uX(p$uX(q$uX~OfiXf$uXjiX!YiX#[iX~P!/tOo)uO~Ot)vO(Y)wO(Z)yO~Oj*SO|){O!P)|O(p%OO(q%QO~Of)zO~P!0}Of*TO~Og%WOl%XOn$uOo$tOp$tOv%YOx%ZOz;WO!P*VO![*WO!f<hO!k$yO#f;^O$T%_O$o;YO$q;[O$t%`O'}TO(QUO(X$vO(p%OO(q%QO~O!X*ZO'{*UO!j(vP~P!1lO#g*]O~O!k*^O~Og%WOl%XOn$uOo$tOp$tOv%YOx%ZOz;WO!P$|O![$}O!f<hO!k$yO#f;^O$T%_O$o;YO$q;[O$t%`O'{*`O'}TO(QUO(X$vO(p%OO(q%QO~O!X*cO!V(wP~P!3kOn*oO!P*gO!_*mO!`*fO!a*fO!k*^O#W*nO%Y*iO'|!lO([!mO~O!Z*lO~P!5`O!i#xOj(WX|(WX!P(WX(p(WX(q(WX!Y(WX#[(WX~Of(WX#|(WX~P!6XOj*tO#[*sOf(VX!Y(VX~O!Y*uOf(UX~O'{&VOf(UP~O!k*|O~O'{(qO~Ol+QO!P%fO!X#iO![%gO!{]O#e#lO#f#iO'{%eO!j(jP~O!d#vO#g+RO~O!P%fO!X+TO!Y(XO![%gO'{%eO!V(mP~Oo'WO!P+VO!X+UO'}TO(QUO([(yO~O!Z(oP~P!9SO!Y+WO`({X'r({X~OP$^OZ$eOn$RO|#zO}#{O!P#|O!h$TO!i#xO!k#yO!o$^O#j$PO#k$QO#l$QO#m$QO#n$SO#o$TO#p$TO#q$dO#r$TO#t$UO#v$WO#x$YO#y$ZO(XVO(i$[O(p#}O(q$OO~O`!ea!Y!ea'r!ea'p!ea!V!ea!j!ear!ea![!ea%c!ea!d!ea~P!9zO|#zO}#{O!P#|O!i#xO!k#yO(XVOP!qaZ!qan!qa!Y!qa!h!qa!o!qa#j!qa#k!qa#l!qa#m!qa#n!qa#o!qa#p!qa#q!qa#r!qa#t!qa#v!qa#x!qa#y!qa(i!qa(p!qa(q!qa~O`!qa'r!qa'p!qa!V!qa!j!qar!qa![!qa%c!qa!d!qa~P!<eO|#zO}#{O!P#|O!i#xO!k#yO(XVOP!saZ!san!sa!Y!sa!h!sa!o!sa#j!sa#k!sa#l!sa#m!sa#n!sa#o!sa#p!sa#q!sa#r!sa#t!sa#v!sa#x!sa#y!sa(i!sa(p!sa(q!sa~O`!sa'r!sa'p!sa!V!sa!j!sar!sa![!sa%c!sa!d!sa~P!?OOg%WOj+aO!['[O%c+`O~O!d+cO`(TX![(TX'r(TX!Y(TX~O`%lO![XO'r%lO~Og%WO!k%cO~Og%WO!k%cO'{%eO~O!d#vO#g(sO~Oa+nO%d+oO'{+kO'}TO(QUO!Z)PP~O!Y+pO_)OX~OZ+tO~O_+uO~O![%|O'{%eO'|!lO_)OP~Og%WO#[+zO~Og%WOj+}O![$}O~O![,PO~O|,RO![XO~O%h%sO~O!w,WO~Od,]O~Oa,^O'{#nO'}TO(QUO!Z(}P~Od%zO~O%d!QO'{&VO~P<}OZ,cO_,bO~OPYOQYORfOczOdyOlkOnYOokOpkOvkOxYOzYO!PWO!TkO!UkO!fuO!kZO!nYO!oYO!pYO!rvO!wxO!{]O%b}O'}TO(QUO(XVO(g[O(uiO~O![!eO!t!gO$T!kO'{!dO~P!FRO_,bO`%lO'r%lO~OPYOQYORfOc!jOd!iOlkOnYOokOpkOvkOxYOzYO!PWO!TkO!UkO![!eO!fuO!kZO!nYO!oYO!pYO!rvO!w!hO$T!kO'{!dO'}TO(QUO(XVO(g[O(uiO~O`,hO!twO#s!OO%f!OO%g!OO%h!OO~P!HkO!k&kO~O&V,nO~O![,pO~O&h,rO&j,sOP&eaQ&eaR&eaX&ea`&eac&ead&eal&ean&eao&eap&eav&eax&eaz&ea!P&ea!T&ea!U&ea![&ea!f&ea!k&ea!n&ea!o&ea!p&ea!r&ea!t&ea!w&ea!{&ea#s&ea$T&ea%b&ea%d&ea%f&ea%g&ea%h&ea%k&ea%m&ea%p&ea%q&ea%s&ea&P&ea&V&ea&X&ea&Z&ea&]&ea&`&ea&f&ea&l&ea&n&ea&p&ea&r&ea&t&ea'p&ea'{&ea'}&ea(Q&ea(X&ea(g&ea(u&ea!Z&ea&^&eaa&ea&c&ea~O'{,xO~Og!bX!Y!OX!Z!OX!d!OX!d!bX!k!bX#[!OX~O!Y!bX!Z!bX~P# qO!d,}O#[,|Og(aX!Y#dX!Y(aX!Z#dX!Z(aX!d(aX!k(aX~Og%WO!d-PO!k%cO!Y!^X!Z!^X~Oo!nO!P!oO'}TO(QUO([!mO~OP:iOQ:iORfOc<dOd!iOlkOn:iOokOpkOvkOx:iOz:iO!PWO!TkO!UkO![!eO!f:lO!kZO!n:iO!o:iO!p:iO!r:mO!t:pO!w!hO$T!kO'}TO(QUO(XVO(g[O(u<bO~O'{;dO~P##uO!Y-TO!Z(`X~O!Z-VO~O!d,}O#[,|O!Y#dX!Z#dX~O!Y-WO!Z(oX~O!Z-YO~O!`-ZO!a-ZO'|!lO~P##dO!Z-^O~P'_Oj-aO!['[O~O!V-fO~Oo!za!_!za!`!za!a!za#P!za#Q!za#R!za#S!za#T!za#W!za#X!za'|!za'}!za(Q!za([!za(g!za~P!#`O!o-kO#[-iO~PCOO!`-mO!a-mO'|!lO~PCnO`%lO#[-iO'r%lO~O`%lO!d#vO#[-iO'r%lO~O`%lO!d#vO!o-kO#[-iO'r%lO(i'lO~O'w'tO'x'tO'y-rO~Or-sO~O!V'Pa!Y'Pa~P!9zO!X-wO!V'PX!Y'PX~P%[O!Y(QO!V(_a~O!V(_a~PGbO!Y(XO!V(ma~O!P%fO!X-{O![%gO'{%eO!V'VX!Y'VX~O#[-}O!Y(ka!j(ka`(ka'r(ka~O!d#vO~P#+{O!Y(eO!j(ja~O!P%fO![%gO#f.RO'{%eO~Ol.WO!P%fO!X.TO![%gO!{]O#e.VO#f.TO'{%eO!Y'YX!j'YX~O}.[O!k#yO~Og%WOj._O!['[O%c.^O~O`#_i!Y#_i'r#_i'p#_i!V#_i!j#_ir#_i![#_i%c#_i!d#_i~P!9zOj<nO|){O!P)|O(p%OO(q%QO~O#g#Za`#Za#[#Za'r#Za!Y#Za!j#Za![#Za!V#Za~P#.wO#g(WXP(WXZ(WX`(WXn(WX}(WX!h(WX!k(WX!o(WX#j(WX#k(WX#l(WX#m(WX#n(WX#o(WX#p(WX#q(WX#r(WX#t(WX#v(WX#x(WX#y(WX'r(WX(X(WX(i(WX!j(WX!V(WX'p(WXr(WX![(WX%c(WX!d(WX~P!6XO!Y.lOf(bX~P!0}Of.nO~O!Y.oO!j(cX~P!9zO!j.rO~O!V.tO~OP$^O|#zO}#{O!P#|O!i#xO!k#yO!o$^O(XVOZ#ii`#iin#ii!Y#ii!h#ii#k#ii#l#ii#m#ii#n#ii#o#ii#p#ii#q#ii#r#ii#t#ii#v#ii#x#ii#y#ii'r#ii(i#ii(p#ii(q#ii'p#ii!V#ii!j#iir#ii![#ii%c#ii!d#ii~O#j#ii~P#2sO#j$PO~P#2sOP$^O|#zO}#{O!P#|O!i#xO!k#yO!o$^O#j$PO#k$QO#l$QO#m$QO(XVOZ#ii`#ii!Y#ii!h#ii#n#ii#o#ii#p#ii#q#ii#r#ii#t#ii#v#ii#x#ii#y#ii'r#ii(i#ii(p#ii(q#ii'p#ii!V#ii!j#iir#ii![#ii%c#ii!d#ii~On#ii~P#5eOn$RO~P#5eOP$^On$RO|#zO}#{O!P#|O!i#xO!k#yO!o$^O#j$PO#k$QO#l$QO#m$QO#n$SO(XVO`#ii!Y#ii#t#ii#v#ii#x#ii#y#ii'r#ii(i#ii(p#ii(q#ii'p#ii!V#ii!j#iir#ii![#ii%c#ii!d#ii~OZ#ii!h#ii#o#ii#p#ii#q#ii#r#ii~P#8VOZ$eO!h$TO#o$TO#p$TO#q$dO#r$TO~P#8VOP$^OZ$eOn$RO|#zO}#{O!P#|O!h$TO!i#xO!k#yO!o$^O#j$PO#k$QO#l$QO#m$QO#n$SO#o$TO#p$TO#q$dO#r$TO#t$UO(XVO(q$OO`#ii!Y#ii#x#ii#y#ii'r#ii(i#ii(p#ii'p#ii!V#ii!j#iir#ii![#ii%c#ii!d#ii~O#v$WO~P#;WO#v#ii~P#;WOP$^OZ$eOn$RO|#zO}#{O!P#|O!h$TO!i#xO!k#yO!o$^O#j$PO#k$QO#l$QO#m$QO#n$SO#o$TO#p$TO#q$dO#r$TO#t$UO(XVO`#ii!Y#ii#x#ii#y#ii'r#ii(i#ii'p#ii!V#ii!j#iir#ii![#ii%c#ii!d#ii~O#v#ii(p#ii(q#ii~P#=xO#v$WO(p#}O(q$OO~P#=xOP$^OZ$eOn$RO|#zO}#{O!P#|O!h$TO!i#xO!k#yO!o$^O#j$PO#k$QO#l$QO#m$QO#n$SO#o$TO#p$TO#q$dO#r$TO#t$UO#v$WO#x$YO(XVO(p#}O(q$OO~O`#ii!Y#ii#y#ii'r#ii(i#ii'p#ii!V#ii!j#iir#ii![#ii%c#ii!d#ii~P#@pOP[XZ[Xn[X|[X}[X!P[X!h[X!i[X!k[X!o[X#[[X#geX#j[X#k[X#l[X#m[X#n[X#o[X#p[X#q[X#r[X#t[X#v[X#x[X#y[X$O[X(X[X(i[X(p[X(q[X!Y[X!Z[X~O#|[X~P#CZOP$^OZ;QOn:tO|#zO}#{O!P#|O!h:vO!i#xO!k#yO!o$^O#j:rO#k:sO#l:sO#m:sO#n:uO#o:vO#p:vO#q;PO#r:vO#t:wO#v:yO#x:{O#y:|O(XVO(i$[O(p#}O(q$OO~O#|.vO~P#EhO#[;RO$O;RO#|(^X!Z(^X~P! [O`']a!Y']a'r']a'p']a!j']a!V']ar']a![']a%c']a!d']a~P!9zOP#iiZ#ii`#iin#ii}#ii!Y#ii!h#ii!i#ii!k#ii!o#ii#j#ii#k#ii#l#ii#m#ii#n#ii#o#ii#p#ii#q#ii#r#ii#t#ii#v#ii#x#ii#y#ii'r#ii(X#ii(i#ii'p#ii!V#ii!j#iir#ii![#ii%c#ii!d#ii~P#.wO`#}i!Y#}i'r#}i'p#}i!V#}i!j#}ir#}i![#}i%c#}i!d#}i~P!9zO$Y.{O$[.{O~O$Y.|O$[.|O~O!d)dO#[.}O![$`X$W$`X$Y$`X$[$`X$c$`X~O!X/OO~O![)gO$W/QO$Y)fO$[)fO$c/RO~O!Y:}O!Z(]X~P#EhO!Z/SO~O!d)dO$c(rX~O$c/UO~Ot)vO(Y)wO(Z/XO~O!V/]O~P!&dO(p%OOj%Za|%Za!P%Za(q%Za!Y%Za#[%Za~Of%Za#|%Za~P#MxO(q%QOj%]a|%]a!P%]a(p%]a!Y%]a#[%]a~Of%]a#|%]a~P#NkO!YeX!deX!jeX!j$uX(ieX~P!/tO!X/fO!Y(XO'{/eO!V(mP!V(wP~P!1lOn*oO!_*mO!`*fO!a*fO!k*^O#W*nO%Y*iO'|!lO~Oo'WO!P/gO!X+UO!Z*lO'}TO(QUO([;aO!Z(oP~P$!UO!j/hO~P#.wO!Y/iO!d#vO(i'lO!j(vX~O!j/nO~O!P%fO!X*ZO![%gO'{%eO!j(vP~O#g/pO~O!V$uX!Y$uX!d$|X~P!/tO!Y/qO!V(wX~P#.wO!d/sO~O!V/uO~Og%WOn/yO!d#vO!k%cO(i'lO~O'{/{O~O!d+cO~O`%lO!Y0PO'r%lO~O!Z0RO~P!5`O!`0SO!a0SO'|!lO([!mO~O!P0UO([!mO~O#W0VO~Of%Za!Y%Za#[%Za#|%Za~P!0}Of%]a!Y%]a#[%]a#|%]a~P!0}O'{&VOf'fX!Y'fX~O!Y*uOf(Ua~Of0`O~O|0aO}0aO!P0bOjya(pya(qya!Yya#[ya~Ofya#|ya~P$'wO|){O!P)|Oj$na(p$na(q$na!Y$na#[$na~Of$na#|$na~P$(mO|){O!P)|Oj$pa(p$pa(q$pa!Y$pa#[$pa~Of$pa#|$pa~P$)`O#g0dO~Of%Oa!Y%Oa#[%Oa#|%Oa~P!0}O!d#vO~O#g0gO~O!Y+WO`({a'r({a~O|#zO}#{O!P#|O!i#xO!k#yO(XVOP!qiZ!qin!qi!Y!qi!h!qi!o!qi#j!qi#k!qi#l!qi#m!qi#n!qi#o!qi#p!qi#q!qi#r!qi#t!qi#v!qi#x!qi#y!qi(i!qi(p!qi(q!qi~O`!qi'r!qi'p!qi!V!qi!j!qir!qi![!qi%c!qi!d!qi~P$*}Og%WOn$uOo$tOp$tOv%YOx%ZOz;WO!P$|O![$}O!f<hO!k$yO#f;^O$T%_O$o;YO$q;[O$t%`O'}TO(QUO(X$vO(p%OO(q%QO~Ol0qO'{0pO~P$-hO!d+cO`(Ta![(Ta'r(Ta!Y(Ta~O#g0wO~OZ[X!YeX!ZeX~O!Y0xO!Z)PX~O!Z0zO~OZ0{O~Oa0}O'{+kO'}TO(QUO~O![%|O'{%eO_'nX!Y'nX~O!Y+pO_)Oa~O!j1QO~P!9zOZ1TO~O_1UO~O#[1XO~Oj1[O![$}O~O([(yO!Z(|P~Og%WOj1eO![1bO%c1dO~OZ1oO!Y1mO!Z(}X~O!Z1pO~O_1rO`%lO'r%lO~O'{#nO'}TO(QUO~O#[$fO$O$fOP(^XZ(^Xn(^X|(^X}(^X!P(^X!Y(^X!h(^X!k(^X!o(^X#j(^X#k(^X#l(^X#m(^X#n(^X#o(^X#p(^X#q(^X#t(^X#v(^X#x(^X#y(^X(X(^X(i(^X(p(^X(q(^X~O#r1uO&T1vO`(^X!i(^X~P$3OO#[$fO#r1uO&T1vO~O`1xO~P%[O`1zO~O&^1}OP&[iQ&[iR&[iX&[i`&[ic&[id&[il&[in&[io&[ip&[iv&[ix&[iz&[i!P&[i!T&[i!U&[i![&[i!f&[i!k&[i!n&[i!o&[i!p&[i!r&[i!t&[i!w&[i!{&[i#s&[i$T&[i%b&[i%d&[i%f&[i%g&[i%h&[i%k&[i%m&[i%p&[i%q&[i%s&[i&P&[i&V&[i&X&[i&Z&[i&]&[i&`&[i&f&[i&l&[i&n&[i&p&[i&r&[i&t&[i'p&[i'{&[i'}&[i(Q&[i(X&[i(g&[i(u&[i!Z&[ia&[i&c&[i~Oa2TO!Z2RO&c2SO~P`O![XO!k2VO~O&j,sOP&eiQ&eiR&eiX&ei`&eic&eid&eil&ein&eio&eip&eiv&eix&eiz&ei!P&ei!T&ei!U&ei![&ei!f&ei!k&ei!n&ei!o&ei!p&ei!r&ei!t&ei!w&ei!{&ei#s&ei$T&ei%b&ei%d&ei%f&ei%g&ei%h&ei%k&ei%m&ei%p&ei%q&ei%s&ei&P&ei&V&ei&X&ei&Z&ei&]&ei&`&ei&f&ei&l&ei&n&ei&p&ei&r&ei&t&ei'p&ei'{&ei'}&ei(Q&ei(X&ei(g&ei(u&ei!Z&ei&^&eia&ei&c&ei~O!V2]O~O!Y!^a!Z!^a~P#EhOo!nO!P!oO!X2cO([!mO!Y'QX!Z'QX~P@UO!Y-TO!Z(`a~O!Y'WX!Z'WX~P!9SO!Y-WO!Z(oa~O!Z2jO~P'_O`%lO#[2sO'r%lO~O`%lO!d#vO#[2sO'r%lO~O`%lO!d#vO!o2wO#[2sO'r%lO(i'lO~O`%lO'r%lO~P!9zO!Y$bOr$ma~O!V'Pi!Y'Pi~P!9zO!Y(QO!V(_i~O!Y(XO!V(mi~O!V(ni!Y(ni~P!9zO!Y(ki!j(ki`(ki'r(ki~P!9zO#[2yO!Y(ki!j(ki`(ki'r(ki~O!Y(eO!j(ji~O!P%fO![%gO!{]O#e3OO#f2}O'{%eO~O!P%fO![%gO#f2}O'{%eO~Oj3VO!['[O%c3UO~Og%WOj3VO!['[O%c3UO~O#g%ZaP%ZaZ%Za`%Zan%Za}%Za!h%Za!i%Za!k%Za!o%Za#j%Za#k%Za#l%Za#m%Za#n%Za#o%Za#p%Za#q%Za#r%Za#t%Za#v%Za#x%Za#y%Za'r%Za(X%Za(i%Za!j%Za!V%Za'p%Zar%Za![%Za%c%Za!d%Za~P#MxO#g%]aP%]aZ%]a`%]an%]a}%]a!h%]a!i%]a!k%]a!o%]a#j%]a#k%]a#l%]a#m%]a#n%]a#o%]a#p%]a#q%]a#r%]a#t%]a#v%]a#x%]a#y%]a'r%]a(X%]a(i%]a!j%]a!V%]a'p%]ar%]a![%]a%c%]a!d%]a~P#NkO#g%ZaP%ZaZ%Za`%Zan%Za}%Za!Y%Za!h%Za!i%Za!k%Za!o%Za#j%Za#k%Za#l%Za#m%Za#n%Za#o%Za#p%Za#q%Za#r%Za#t%Za#v%Za#x%Za#y%Za'r%Za(X%Za(i%Za!j%Za!V%Za'p%Za#[%Zar%Za![%Za%c%Za!d%Za~P#.wO#g%]aP%]aZ%]a`%]an%]a}%]a!Y%]a!h%]a!i%]a!k%]a!o%]a#j%]a#k%]a#l%]a#m%]a#n%]a#o%]a#p%]a#q%]a#r%]a#t%]a#v%]a#x%]a#y%]a'r%]a(X%]a(i%]a!j%]a!V%]a'p%]a#[%]ar%]a![%]a%c%]a!d%]a~P#.wO#gyaPyaZya`yanya!hya!iya!kya!oya#jya#kya#lya#mya#nya#oya#pya#qya#rya#tya#vya#xya#yya'rya(Xya(iya!jya!Vya'pyarya![ya%cya!dya~P$'wO#g$naP$naZ$na`$nan$na}$na!h$na!i$na!k$na!o$na#j$na#k$na#l$na#m$na#n$na#o$na#p$na#q$na#r$na#t$na#v$na#x$na#y$na'r$na(X$na(i$na!j$na!V$na'p$nar$na![$na%c$na!d$na~P$(mO#g$paP$paZ$pa`$pan$pa}$pa!h$pa!i$pa!k$pa!o$pa#j$pa#k$pa#l$pa#m$pa#n$pa#o$pa#p$pa#q$pa#r$pa#t$pa#v$pa#x$pa#y$pa'r$pa(X$pa(i$pa!j$pa!V$pa'p$par$pa![$pa%c$pa!d$pa~P$)`O#g%OaP%OaZ%Oa`%Oan%Oa}%Oa!Y%Oa!h%Oa!i%Oa!k%Oa!o%Oa#j%Oa#k%Oa#l%Oa#m%Oa#n%Oa#o%Oa#p%Oa#q%Oa#r%Oa#t%Oa#v%Oa#x%Oa#y%Oa'r%Oa(X%Oa(i%Oa!j%Oa!V%Oa'p%Oa#[%Oar%Oa![%Oa%c%Oa!d%Oa~P#.wO`#_q!Y#_q'r#_q'p#_q!V#_q!j#_qr#_q![#_q%c#_q!d#_q~P!9zOf'RX!Y'RX~P!(SO!Y.lOf(ba~O!X3aO!Y'SX!j'SX~P%[O!Y.oO!j(ca~O!Y.oO!j(ca~P!9zO!V3dO~O#|!ma!Z!ma~PKOO#|!ea!Y!ea!Z!ea~P#EhO#|!qa!Z!qa~P!<eO#|!sa!Z!sa~P!?OORfO![3vO$a3wO~O!Z3{O~Or3|O~P#.wO`$jq!Y$jq'r$jq'p$jq!V$jq!j$jqr$jq![$jq%c$jq!d$jq~P!9zO!V3}O~P#.wO|){O!P)|O(q%QOj'ba(p'ba!Y'ba#['ba~Of'ba#|'ba~P%,rO|){O!P)|Oj'da(p'da(q'da!Y'da#['da~Of'da#|'da~P%-eO(i$[O~P#.wO!VeX!V$uX!YeX!Y$uX!d$|X#[eX~P!/tO'{;jO~P!1lOlkO'{4PO~P.iO!P%fO!X4RO![%gO'{%eO!Y'^X!j'^X~O!Y/iO!j(va~O!Y/iO!d#vO!j(va~O!Y/iO!d#vO(i'lO!j(va~Of$wi!Y$wi#[$wi#|$wi~P!0}O!X4ZO!V'`X!Y'`X~P!3kO!Y/qO!V(wa~O!Y/qO!V(wa~P#.wO!d#vO#r4cO~On4fO!d#vO(i'lO~O(p%OOj%Zi|%Zi!P%Zi(q%Zi!Y%Zi#[%Zi~Of%Zi#|%Zi~P%1sO(q%QOj%]i|%]i!P%]i(p%]i!Y%]i#[%]i~Of%]i#|%]i~P%2fOf(Vi!Y(Vi~P!0}O#[4mOf(Vi!Y(Vi~P!0}O!j4pO~O`$kq!Y$kq'r$kq'p$kq!V$kq!j$kqr$kq![$kq%c$kq!d$kq~P!9zO!V4tO~O!Y4uO![(xX~P#.wO!i#xO~P4XO`$uX![$uX%W[X'r$uX!Y$uX~P!/tO%W4wO`kXjkX|kX!PkX![kX'rkX(pkX(qkX!YkX~O%W4wO~Oa4}O%d5OO'{+kO'}TO(QUO!Y'mX!Z'mX~O!Y0xO!Z)Pa~OZ5SO~O_5TO~O`%lO'r%lO~P#.wO![$}O~P#.wO!Y5]O#[5_O!Z(|X~O!Z5`O~Oo!nO!P5aO!_!yO!`!vO!a!vO!{:jO#P!pO#Q!pO#R!pO#S!pO#T!pO#W5fO#X!zO'|!lO'}TO(QUO([!mO(g!sO~O!Z5eO~P%7wOj5kO![1bO%c5jO~Og%WOj5kO![1bO%c5jO~Oa5rO'{#nO'}TO(QUO!Y'lX!Z'lX~O!Y1mO!Z(}a~O'}TO(QUO([5tO~O_5xO~O#r5{O&T5|O~PMnO!j5}O~P%[O`6PO~O`6PO~P%[Oa2TO!Z6UO&c2SO~P`O!d6WO~O!d6YOg(ai!Y(ai!Z(ai!d(ai!k(ai~O!Y#di!Z#di~P#EhO#[6ZO!Y#di!Z#di~O!Y!^i!Z!^i~P#EhO`%lO#[6dO'r%lO~O`%lO!d#vO#[6dO'r%lO~O!Y(kq!j(kq`(kq'r(kq~P!9zO!Y(eO!j(jq~O!P%fO![%gO#f6kO'{%eO~O!['[O%c6nO~Oj6qO!['[O%c6nO~O#g'baP'baZ'ba`'ban'ba}'ba!h'ba!i'ba!k'ba!o'ba#j'ba#k'ba#l'ba#m'ba#n'ba#o'ba#p'ba#q'ba#r'ba#t'ba#v'ba#x'ba#y'ba'r'ba(X'ba(i'ba!j'ba!V'ba'p'bar'ba!['ba%c'ba!d'ba~P%,rO#g'daP'daZ'da`'dan'da}'da!h'da!i'da!k'da!o'da#j'da#k'da#l'da#m'da#n'da#o'da#p'da#q'da#r'da#t'da#v'da#x'da#y'da'r'da(X'da(i'da!j'da!V'da'p'dar'da!['da%c'da!d'da~P%-eO#g$wiP$wiZ$wi`$win$wi}$wi!Y$wi!h$wi!i$wi!k$wi!o$wi#j$wi#k$wi#l$wi#m$wi#n$wi#o$wi#p$wi#q$wi#r$wi#t$wi#v$wi#x$wi#y$wi'r$wi(X$wi(i$wi!j$wi!V$wi'p$wi#[$wir$wi![$wi%c$wi!d$wi~P#.wO#g%ZiP%ZiZ%Zi`%Zin%Zi}%Zi!h%Zi!i%Zi!k%Zi!o%Zi#j%Zi#k%Zi#l%Zi#m%Zi#n%Zi#o%Zi#p%Zi#q%Zi#r%Zi#t%Zi#v%Zi#x%Zi#y%Zi'r%Zi(X%Zi(i%Zi!j%Zi!V%Zi'p%Zir%Zi![%Zi%c%Zi!d%Zi~P%1sO#g%]iP%]iZ%]i`%]in%]i}%]i!h%]i!i%]i!k%]i!o%]i#j%]i#k%]i#l%]i#m%]i#n%]i#o%]i#p%]i#q%]i#r%]i#t%]i#v%]i#x%]i#y%]i'r%]i(X%]i(i%]i!j%]i!V%]i'p%]ir%]i![%]i%c%]i!d%]i~P%2fOf'Ra!Y'Ra~P!0}O!Y'Sa!j'Sa~P!9zO!Y.oO!j(ci~O#|#_i!Y#_i!Z#_i~P#EhOP$^O|#zO}#{O!P#|O!i#xO!k#yO!o$^O(XVOZ#iin#ii!h#ii#k#ii#l#ii#m#ii#n#ii#o#ii#p#ii#q#ii#r#ii#t#ii#v#ii#x#ii#y#ii#|#ii(i#ii(p#ii(q#ii!Y#ii!Z#ii~O#j#ii~P%JwO#j:rO~P%JwOP$^O|#zO}#{O!P#|O!i#xO!k#yO!o$^O#j:rO#k:sO#l:sO#m:sO(XVOZ#ii!h#ii#n#ii#o#ii#p#ii#q#ii#r#ii#t#ii#v#ii#x#ii#y#ii#|#ii(i#ii(p#ii(q#ii!Y#ii!Z#ii~On#ii~P%MSOn:tO~P%MSOP$^On:tO|#zO}#{O!P#|O!i#xO!k#yO!o$^O#j:rO#k:sO#l:sO#m:sO#n:uO(XVO#t#ii#v#ii#x#ii#y#ii#|#ii(i#ii(p#ii(q#ii!Y#ii!Z#ii~OZ#ii!h#ii#o#ii#p#ii#q#ii#r#ii~P& _OZ;QO!h:vO#o:vO#p:vO#q;PO#r:vO~P& _OP$^OZ;QOn:tO|#zO}#{O!P#|O!h:vO!i#xO!k#yO!o$^O#j:rO#k:sO#l:sO#m:sO#n:uO#o:vO#p:vO#q;PO#r:vO#t:wO(XVO(q$OO#x#ii#y#ii#|#ii(i#ii(p#ii!Y#ii!Z#ii~O#v:yO~P&#yO#v#ii~P&#yOP$^OZ;QOn:tO|#zO}#{O!P#|O!h:vO!i#xO!k#yO!o$^O#j:rO#k:sO#l:sO#m:sO#n:uO#o:vO#p:vO#q;PO#r:vO#t:wO(XVO#x#ii#y#ii#|#ii(i#ii!Y#ii!Z#ii~O#v#ii(p#ii(q#ii~P&&UO#v:yO(p#}O(q$OO~P&&UOP$^OZ;QOn:tO|#zO}#{O!P#|O!h:vO!i#xO!k#yO!o$^O#j:rO#k:sO#l:sO#m:sO#n:uO#o:vO#p:vO#q;PO#r:vO#t:wO#v:yO#x:{O(XVO(p#}O(q$OO~O#y#ii#|#ii(i#ii!Y#ii!Z#ii~P&(gO`#zy!Y#zy'r#zy'p#zy!V#zy!j#zyr#zy![#zy%c#zy!d#zy~P!9zOj<oO|){O!P)|O(p%OO(q%QO~OP#iiZ#iin#ii}#ii!h#ii!i#ii!k#ii!o#ii#j#ii#k#ii#l#ii#m#ii#n#ii#o#ii#p#ii#q#ii#r#ii#t#ii#v#ii#x#ii#y#ii#|#ii(X#ii(i#ii!Y#ii!Z#ii~P&+_O!i#xOP(WXZ(WXj(WXn(WX|(WX}(WX!P(WX!h(WX!k(WX!o(WX#j(WX#k(WX#l(WX#m(WX#n(WX#o(WX#p(WX#q(WX#r(WX#t(WX#v(WX#x(WX#y(WX#|(WX(X(WX(i(WX(p(WX(q(WX!Y(WX!Z(WX~O#|#}i!Y#}i!Z#}i~P#EhO#|!qi!Z!qi~P$*}O!Z7TO~O!Y']a!Z']a~P#EhOP[XZ[Xn[X|[X}[X!P[X!V[X!Y[X!h[X!i[X!k[X!o[X#[[X#geX#j[X#k[X#l[X#m[X#n[X#o[X#p[X#q[X#r[X#t[X#v[X#x[X#y[X$O[X(X[X(i[X(p[X(q[X~O!d%TX#r%TX~P&0aO!d#vO(i'lO!Y'^a!j'^a~O!Y/iO!j(vi~O!Y/iO!d#vO!j(vi~Of$wq!Y$wq#[$wq#|$wq~P!0}O!V'`a!Y'`a~P#.wO!d7[O~O!Y/qO!V(wi~P#.wO!Y/qO!V(wi~O!V7`O~O!d#vO#r7eO~On7fO!d#vO(i'lO~O|){O!P)|O(q%QOj'ca(p'ca!Y'ca#['ca~Of'ca#|'ca~P&5PO|){O!P)|Oj'ea(p'ea(q'ea!Y'ea#['ea~Of'ea#|'ea~P&5rO!V7hO~Of$yq!Y$yq#[$yq#|$yq~P!0}O`$ky!Y$ky'r$ky'p$ky!V$ky!j$kyr$ky![$ky%c$ky!d$ky~P!9zO!d6YO~O!Y4uO![(xa~O`#_y!Y#_y'r#_y'p#_y!V#_y!j#_yr#_y![#_y%c#_y!d#_y~P!9zOZ7mO~Oa7oO'{+kO'}TO(QUO~O!Y0xO!Z)Pi~O_7sO~O([(yO!Y'iX!Z'iX~O!Y5]O!Z(|a~O!Z7|O~P%7wOo!nO!P7}O'}TO(QUO([!mO(g!sO~O![1bO~O![1bO%c8PO~Oj8SO![1bO%c8PO~OZ8XO!Y'la!Z'la~O!Y1mO!Z(}i~O!j8]O~O!j8^O~O!j8aO~O!j8aO~P%[O`8cO~O!d8dO~O!j8eO~O!Y(ni!Z(ni~P#EhO`%lO#[8mO'r%lO~O!Y(ky!j(ky`(ky'r(ky~P!9zO!Y(eO!j(jy~O!['[O%c8pO~O#g$wqP$wqZ$wq`$wqn$wq}$wq!Y$wq!h$wq!i$wq!k$wq!o$wq#j$wq#k$wq#l$wq#m$wq#n$wq#o$wq#p$wq#q$wq#r$wq#t$wq#v$wq#x$wq#y$wq'r$wq(X$wq(i$wq!j$wq!V$wq'p$wq#[$wqr$wq![$wq%c$wq!d$wq~P#.wO#g'caP'caZ'ca`'can'ca}'ca!h'ca!i'ca!k'ca!o'ca#j'ca#k'ca#l'ca#m'ca#n'ca#o'ca#p'ca#q'ca#r'ca#t'ca#v'ca#x'ca#y'ca'r'ca(X'ca(i'ca!j'ca!V'ca'p'car'ca!['ca%c'ca!d'ca~P&5PO#g'eaP'eaZ'ea`'ean'ea}'ea!h'ea!i'ea!k'ea!o'ea#j'ea#k'ea#l'ea#m'ea#n'ea#o'ea#p'ea#q'ea#r'ea#t'ea#v'ea#x'ea#y'ea'r'ea(X'ea(i'ea!j'ea!V'ea'p'ear'ea!['ea%c'ea!d'ea~P&5rO#g$yqP$yqZ$yq`$yqn$yq}$yq!Y$yq!h$yq!i$yq!k$yq!o$yq#j$yq#k$yq#l$yq#m$yq#n$yq#o$yq#p$yq#q$yq#r$yq#t$yq#v$yq#x$yq#y$yq'r$yq(X$yq(i$yq!j$yq!V$yq'p$yq#[$yqr$yq![$yq%c$yq!d$yq~P#.wO!Y'Si!j'Si~P!9zO#|#_q!Y#_q!Z#_q~P#EhO(p%OOP%ZaZ%Zan%Za}%Za!h%Za!i%Za!k%Za!o%Za#j%Za#k%Za#l%Za#m%Za#n%Za#o%Za#p%Za#q%Za#r%Za#t%Za#v%Za#x%Za#y%Za#|%Za(X%Za(i%Za!Y%Za!Z%Za~Oj%Za|%Za!P%Za(q%Za~P&F}O(q%QOP%]aZ%]an%]a}%]a!h%]a!i%]a!k%]a!o%]a#j%]a#k%]a#l%]a#m%]a#n%]a#o%]a#p%]a#q%]a#r%]a#t%]a#v%]a#x%]a#y%]a#|%]a(X%]a(i%]a!Y%]a!Z%]a~Oj%]a|%]a!P%]a(p%]a~P&IUOj<oO|){O!P)|O(q%QO~P&F}Oj<oO|){O!P)|O(p%OO~P&IUO|0aO}0aO!P0bOPyaZyajyanya!hya!iya!kya!oya#jya#kya#lya#mya#nya#oya#pya#qya#rya#tya#vya#xya#yya#|ya(Xya(iya(pya(qya!Yya!Zya~O|){O!P)|OP$naZ$naj$nan$na}$na!h$na!i$na!k$na!o$na#j$na#k$na#l$na#m$na#n$na#o$na#p$na#q$na#r$na#t$na#v$na#x$na#y$na#|$na(X$na(i$na(p$na(q$na!Y$na!Z$na~O|){O!P)|OP$paZ$paj$pan$pa}$pa!h$pa!i$pa!k$pa!o$pa#j$pa#k$pa#l$pa#m$pa#n$pa#o$pa#p$pa#q$pa#r$pa#t$pa#v$pa#x$pa#y$pa#|$pa(X$pa(i$pa(p$pa(q$pa!Y$pa!Z$pa~OP%OaZ%Oan%Oa}%Oa!h%Oa!i%Oa!k%Oa!o%Oa#j%Oa#k%Oa#l%Oa#m%Oa#n%Oa#o%Oa#p%Oa#q%Oa#r%Oa#t%Oa#v%Oa#x%Oa#y%Oa#|%Oa(X%Oa(i%Oa!Y%Oa!Z%Oa~P&+_O#|$jq!Y$jq!Z$jq~P#EhO#|$kq!Y$kq!Z$kq~P#EhO!Z8|O~O#|8}O~P!0}O!d#vO!Y'^i!j'^i~O!d#vO(i'lO!Y'^i!j'^i~O!Y/iO!j(vq~O!V'`i!Y'`i~P#.wO!Y/qO!V(wq~O!V9TO~P#.wO!V9TO~Of(Vy!Y(Vy~P!0}O!Y'ga!['ga~P#.wO`%Vq![%Vq'r%Vq!Y%Vq~P#.wOZ9YO~O!Y0xO!Z)Pq~O#[9^O!Y'ia!Z'ia~O!Y5]O!Z(|i~P#EhO![1bO%c9bO~O'}TO(QUO([9gO~O!Y1mO!Z(}q~O!j9jO~O!j9kO~O!j9lO~O!j9lO~P%[O#[9oO!Y#dy!Z#dy~O!Y#dy!Z#dy~P#EhO!['[O%c9tO~O#|#zy!Y#zy!Z#zy~P#EhOP$wiZ$win$wi}$wi!h$wi!i$wi!k$wi!o$wi#j$wi#k$wi#l$wi#m$wi#n$wi#o$wi#p$wi#q$wi#r$wi#t$wi#v$wi#x$wi#y$wi#|$wi(X$wi(i$wi!Y$wi!Z$wi~P&+_O|){O!P)|O(q%QOP'baZ'baj'ban'ba}'ba!h'ba!i'ba!k'ba!o'ba#j'ba#k'ba#l'ba#m'ba#n'ba#o'ba#p'ba#q'ba#r'ba#t'ba#v'ba#x'ba#y'ba#|'ba(X'ba(i'ba(p'ba!Y'ba!Z'ba~O|){O!P)|OP'daZ'daj'dan'da}'da!h'da!i'da!k'da!o'da#j'da#k'da#l'da#m'da#n'da#o'da#p'da#q'da#r'da#t'da#v'da#x'da#y'da#|'da(X'da(i'da(p'da(q'da!Y'da!Z'da~O(p%OOP%ZiZ%Zij%Zin%Zi|%Zi}%Zi!P%Zi!h%Zi!i%Zi!k%Zi!o%Zi#j%Zi#k%Zi#l%Zi#m%Zi#n%Zi#o%Zi#p%Zi#q%Zi#r%Zi#t%Zi#v%Zi#x%Zi#y%Zi#|%Zi(X%Zi(i%Zi(q%Zi!Y%Zi!Z%Zi~O(q%QOP%]iZ%]ij%]in%]i|%]i}%]i!P%]i!h%]i!i%]i!k%]i!o%]i#j%]i#k%]i#l%]i#m%]i#n%]i#o%]i#p%]i#q%]i#r%]i#t%]i#v%]i#x%]i#y%]i#|%]i(X%]i(i%]i(p%]i!Y%]i!Z%]i~O#|$ky!Y$ky!Z$ky~P#EhO#|#_y!Y#_y!Z#_y~P#EhO!d#vO!Y'^q!j'^q~O!Y/iO!j(vy~O!V'`q!Y'`q~P#.wO!V9}O~P#.wO!Y0xO!Z)Py~O!Y5]O!Z(|q~O![1bO%c:UO~O!j:XO~O!['[O%c:^O~OP$wqZ$wqn$wq}$wq!h$wq!i$wq!k$wq!o$wq#j$wq#k$wq#l$wq#m$wq#n$wq#o$wq#p$wq#q$wq#r$wq#t$wq#v$wq#x$wq#y$wq#|$wq(X$wq(i$wq!Y$wq!Z$wq~P&+_O|){O!P)|O(q%QOP'caZ'caj'can'ca}'ca!h'ca!i'ca!k'ca!o'ca#j'ca#k'ca#l'ca#m'ca#n'ca#o'ca#p'ca#q'ca#r'ca#t'ca#v'ca#x'ca#y'ca#|'ca(X'ca(i'ca(p'ca!Y'ca!Z'ca~O|){O!P)|OP'eaZ'eaj'ean'ea}'ea!h'ea!i'ea!k'ea!o'ea#j'ea#k'ea#l'ea#m'ea#n'ea#o'ea#p'ea#q'ea#r'ea#t'ea#v'ea#x'ea#y'ea#|'ea(X'ea(i'ea(p'ea(q'ea!Y'ea!Z'ea~OP$yqZ$yqn$yq}$yq!h$yq!i$yq!k$yq!o$yq#j$yq#k$yq#l$yq#m$yq#n$yq#o$yq#p$yq#q$yq#r$yq#t$yq#v$yq#x$yq#y$yq#|$yq(X$yq(i$yq!Y$yq!Z$yq~P&+_Of%_!Z!Y%_!Z#[%_!Z#|%_!Z~P!0}O!Y'iq!Z'iq~P#EhO!Y#d!Z!Z#d!Z~P#EhO#g%_!ZP%_!ZZ%_!Z`%_!Zn%_!Z}%_!Z!Y%_!Z!h%_!Z!i%_!Z!k%_!Z!o%_!Z#j%_!Z#k%_!Z#l%_!Z#m%_!Z#n%_!Z#o%_!Z#p%_!Z#q%_!Z#r%_!Z#t%_!Z#v%_!Z#x%_!Z#y%_!Z'r%_!Z(X%_!Z(i%_!Z!j%_!Z!V%_!Z'p%_!Z#[%_!Zr%_!Z![%_!Z%c%_!Z!d%_!Z~P#.wOP%_!ZZ%_!Zn%_!Z}%_!Z!h%_!Z!i%_!Z!k%_!Z!o%_!Z#j%_!Z#k%_!Z#l%_!Z#m%_!Z#n%_!Z#o%_!Z#p%_!Z#q%_!Z#r%_!Z#t%_!Z#v%_!Z#x%_!Z#y%_!Z#|%_!Z(X%_!Z(i%_!Z!Y%_!Z!Z%_!Z~P&+_Or(]X~P1qO'|!lO~P!*fO!VeX!YeX#[eX~P&0aOP[XZ[Xn[X|[X}[X!P[X!Y[X!YeX!h[X!i[X!k[X!o[X#[[X#[eX#geX#j[X#k[X#l[X#m[X#n[X#o[X#p[X#q[X#r[X#t[X#v[X#x[X#y[X$O[X(X[X(i[X(p[X(q[X~O!deX!j[X!jeX(ieX~P'EROP:iOQ:iORfOc<dOd!iOlkOn:iOokOpkOvkOx:iOz:iO!PWO!TkO!UkO![XO!f:lO!kZO!n:iO!o:iO!p:iO!r:mO!t:pO!w!hO$T!kO'{)ZO'}TO(QUO(XVO(g[O(u<bO~O!Y:}O!Z$ma~Og%WOl%XOn$uOo$tOp$tOv%YOx%ZOz;XO!P$|O![$}O!f<iO!k$yO#f;_O$T%_O$o;ZO$q;]O$t%`O'{(qO'}TO(QUO(X$vO(p%OO(q%QO~O#s)bO~P'IwOn!bX(i!bX~P# qO!Z[X!ZeX~P'ERO!VeX!V$uX!YeX!Y$uX#[eX~P!/tO#g:qO~O!d#vO#g:qO~O#[;RO~O#r:vO~O#[;bO!Y(nX!Z(nX~O#[;RO!Y(lX!Z(lX~O#g;cO~Of;eO~P!0}O#g;kO~O#g;lO~O!d#vO#g;mO~O!d#vO#g;cO~O#|;nO~P#EhO#g;oO~O#g;pO~O#g;uO~O#g;vO~O#g;wO~O#g;xO~O#|;yO~P!0}O#|;zO~P!0}O!i#P#Q#S#T#W#e#f#q(u$o$q$t%W%b%c%d%k%m%p%q%s%u~'vS#k!U't'|#lo#j#mn|'u$Y'u'{$[([~",
|
28132 |
stateData: "((P~O'zOS'{OSTOS'|RQ~OPYOQYOSfOY!VOaqOdzOeyOj!POnkOpYOqkOrkOxkOzYO|YO!QWO!UkO!VkO!]XO!guO!jZO!mYO!nYO!oYO!qvO!swO!vxO!z]O$V|O$miO%g}O%i!QO%k!OO%l!OO%m!OO%p!RO%r!SO%u!TO%v!TO%x!UO&U!WO&[!XO&^!YO&`!ZO&b![O&e!]O&k!^O&q!_O&s!`O&u!aO&w!bO&y!cO(RSO(TTO(WUO(_VO(m[O~OWtO~P`OPYOQYOSfOd!jOe!iOnkOpYOqkOrkOxkOzYO|YO!QWO!UkO!VkO!]!eO!guO!jZO!mYO!nYO!oYO!qvO!s!gO!v!hO$V!kO$miO(R!dO(TTO(WUO(_VO(m[O~Oa!wOq!nO!Q!oO!`!yO!a!vO!b!vO!z;wO#R!pO#S!pO#T!xO#U!pO#V!pO#Y!zO#Z!zO(S!lO(TTO(WUO(c!mO(m!sO~O'|!{O~OP]XR]X[]Xa]Xp]X!O]X!Q]X!Z]X!j]X!n]X#P]X#Q]X#^]X#ifX#l]X#m]X#n]X#o]X#p]X#q]X#r]X#s]X#t]X#u]X#w]X#y]X#z]X$P]X'x]X(_]X(p]X(w]X(x]X~O!e%QX~P(qO_!}O(T#PO(U!}O(V#PO~O_#QO(V#PO(W#PO(X#QO~Ov#SO!S#TO(`#TO(a#VO~OPYOQYOSfOd!jOe!iOnkOpYOqkOrkOxkOzYO|YO!QWO!UkO!VkO!]!eO!guO!jZO!mYO!nYO!oYO!qvO!s!gO!v!hO$V!kO$miO(R;{O(TTO(WUO(_VO(m[O~O!Y#ZO!Z#WO!W(fP!W(tP~P+}O![#cO~P`OPYOQYOSfOd!jOe!iOpYOqkOrkOxkOzYO|YO!QWO!UkO!VkO!]!eO!guO!jZO!mYO!nYO!oYO!qvO!s!gO!v!hO$V!kO$miO(TTO(WUO(_VO(m[O~On#mO!Y#iO!z]O#g#lO#h#iO(R;|O!i(qP~P.iO!j#oO(R#nO~O!v#sO!z]O%g#tO~O#i#uO~O!e#vO#i#uO~OP$[OR#zO[$cOp$aO!O#yO!Q#{O!Z$_O!j#xO!n$[O#P$RO#l$OO#m$PO#n$PO#o$PO#p$QO#q$RO#r$RO#s$bO#t$RO#u$SO#w$UO#y$WO#z$XO(_VO(p$YO(w#|O(x#}O~Oa(dX'x(dX'u(dX!i(dX!W(dX!](dX%h(dX!e(dX~P1qO#Q$dO#^$eO$P$eOP(eXR(eX[(eXp(eX!O(eX!Q(eX!Z(eX!j(eX!n(eX#P(eX#l(eX#m(eX#n(eX#o(eX#p(eX#q(eX#r(eX#s(eX#t(eX#u(eX#w(eX#y(eX#z(eX(_(eX(p(eX(w(eX(x(eX!](eX%h(eX~Oa(eX'x(eX'u(eX!W(eX!i(eXt(eX!e(eX~P4UO#^$eO~O$[$hO$^$gO$e$mO~OSfO!]$nO$h$oO$j$qO~Oh%VOj%cOn%WOp%XOq$tOr$tOx%YOz%ZO|%[O!Q${O!]$|O!g%aO!j$xO#h%bO$V%_O$s%]O$u%^O$x%`O(R$sO(TTO(WUO(_$uO(w$}O(x%POg([P~O!j%dO~O!Q%gO!]%hO(R%fO~O!e%lO~Oa%mO'x%mO~O!O%qO~P%[O(S!lO~P%[O%m%uO~P%[Oh%VO!j%dO(R%fO(S!lO~Oe%|O!j%dO(R%fO~O#t$RO~O!O&RO!]&OO!j&QO%i&UO(R%fO(S!lO(TTO(WUO`)UP~O!v#sO~O%r&WO!Q)QX!])QX(R)QX~O(R&XO~Oj!PO!s&^O%i!QO%k!OO%l!OO%m!OO%p!RO%r!SO%u!TO%v!TO~Od&cOe&bO!v&`O%g&aO%z&_O~P<POd&fOeyOj!PO!]&eO!s&^O!vxO!z]O%g}O%k!OO%l!OO%m!OO%p!RO%r!SO%u!TO%v!TO%x!UO~Ob&iO#^&lO%i&gO(S!lO~P=UO!j&mO!s&qO~O!j#oO~O!]XO~Oa%mO'v&yO'x%mO~Oa%mO'v&|O'x%mO~Oa%mO'v'OO'x%mO~O'u]X!W]Xt]X!i]X&Y]X!]]X%h]X!e]X~P(qO!`']O!a'UO!b'UO(S!lO(TTO(WUO~Oq'SO!Q'RO!Y'VO(c'QO![(gP![(vP~P@]Ol'`O!]'^O(R%fO~Oe'eO!j%dO(R%fO~O!O&RO!j&QO~Oq!nO!Q!oO!z;wO#R!pO#S!pO#U!pO#V!pO(S!lO(TTO(WUO(c!mO(m!sO~O!`'kO!a'jO!b'jO#T!pO#Y'lO#Z'lO~PAwOa%mOh%VO!e#vO!j%dO'x%mO(p'nO~O!n'rO#^'pO~PCVOq!nO!Q!oO(TTO(WUO(c!mO(m!sO~O!]XOq(kX!Q(kX!`(kX!a(kX!b(kX!z(kX#R(kX#S(kX#T(kX#U(kX#V(kX#Y(kX#Z(kX(S(kX(T(kX(W(kX(c(kX(m(kX~O!a'jO!b'jO(S!lO~PCuO'}'vO(O'vO(P'xO~O_!}O(T'zO(U!}O(V'zO~O_#QO(V'zO(W'zO(X#QO~Ot'|O~P%[Ov#SO!S#TO(`#TO(a(PO~O!Y(RO!W'UX!W'[X!Z'UX!Z'[X~P+}O!Z(TO!W(fX~OP$[OR#zO[$cOp$aO!O#yO!Q#{O!Z(TO!j#xO!n$[O#P$RO#l$OO#m$PO#n$PO#o$PO#p$QO#q$RO#r$RO#s$bO#t$RO#u$SO#w$UO#y$WO#z$XO(_VO(p$YO(w#|O(x#}O~O!W(fX~PGpO!W(YO~O!W(sX!Z(sX!e(sX!i(sX(p(sX~O#^(sX#i#bX![(sX~PIsO#^(ZO!W(uX!Z(uX~O!Z([O!W(tX~O!W(_O~O#^$eO~PIsO![(`O~P`OR#zO!O#yO!Q#{O!j#xO(_VOP!la[!lap!la!Z!la!n!la#P!la#l!la#m!la#n!la#o!la#p!la#q!la#r!la#s!la#t!la#u!la#w!la#y!la#z!la(p!la(w!la(x!la~Oa!la'x!la'u!la!W!la!i!lat!la!]!la%h!la!e!la~PKZO!i(aO~O!e#vO#^(bO(p'nO!Z(rXa(rX'x(rX~O!i(rX~PMvO!Q%gO!]%hO!z]O#g(gO#h(fO(R%fO~O!Z(hO!i(qX~O!i(jO~O!Q%gO!]%hO#h(fO(R%fO~OP(eXR(eX[(eXp(eX!O(eX!Q(eX!Z(eX!j(eX!n(eX#P(eX#l(eX#m(eX#n(eX#o(eX#p(eX#q(eX#r(eX#s(eX#t(eX#u(eX#w(eX#y(eX#z(eX(_(eX(p(eX(w(eX(x(eX~O!e#vO!i(eX~P! dOR(lO!O(kO!j#xO#Q$dO!z!ya!Q!ya~O!v!ya%g!ya!]!ya#g!ya#h!ya(R!ya~P!#eO!v(pO~OPYOQYOSfOd!jOe!iOnkOpYOqkOrkOxkOzYO|YO!QWO!UkO!VkO!]XO!guO!jZO!mYO!nYO!oYO!qvO!s!gO!v!hO$V!kO$miO(R!dO(TTO(WUO(_VO(m[O~Oh%VOn%WOp%XOq$tOr$tOx%YOz%ZO|<eO!Q${O!]$|O!g=vO!j$xO#h<kO$V%_O$s<gO$u<iO$x%`O(R(tO(TTO(WUO(_$uO(w$}O(x%PO~O#i(vO~O!Y(xO!i(iP~P%[O(c(zO(m[O~O!Q(|O!j#xO(c(zO(m[O~OP;vOQ;vOSfOd=rOe!iOnkOp;vOqkOrkOxkOz;vO|;vO!QWO!UkO!VkO!]!eO!g;yO!jZO!m;vO!n;vO!o;vO!q;zO!s;}O!v!hO$V!kO$m=pO(R)ZO(TTO(WUO(_VO(m[O~O!Z$_Oa$pa'x$pa'u$pa!i$pa!W$pa!]$pa%h$pa!e$pa~Oj)bO~P!&iOh%VOn%WOp%XOq$tOr$tOx%YOz%ZO|%[O!Q${O!]$|O!g%aO!j$xO#h%bO$V%_O$s%]O$u%^O$x%`O(R(tO(TTO(WUO(_$uO(w$}O(x%PO~Og(nP~P!+rO!O)gO!e)fO!]$]X$Y$]X$[$]X$^$]X$e$]X~O!e)fO!](yX$Y(yX$[(yX$^(yX$e(yX~O!O)gO~P!-{O!O)gO!](yX$Y(yX$[(yX$^(yX$e(yX~O!])iO$Y)mO$[)hO$^)hO$e)nO~O!Y)qO~P!(yO$[$hO$^$gO$e)uO~Ol$yX!O$yX#Q$yX'w$yX(w$yX(x$yX~OgkXg$yXlkX!ZkX#^kX~P!/qOv)wO(`)xO(a)zO~Ol*TO!O)|O'w)}O(w$}O(x%PO~Og){O~P!0uOg*UO~Oh%VOn%WOp%XOq$tOr$tOx%YOz%ZO|<eO!Q*WO!]*XO!g=vO!j$xO#h<kO$V%_O$s<gO$u<iO$x%`O(TTO(WUO(_$uO(w$}O(x%PO~O!Y*[O(R*VO!i(|P~P!1dO#i*^O~O!j*_O~Oh%VOn%WOp%XOq$tOr$tOx%YOz%ZO|<eO!Q${O!]$|O!g=vO!j$xO#h<kO$V%_O$s<gO$u<iO$x%`O(R*aO(TTO(WUO(_$uO(w$}O(x%PO~O!Y*dO!W(}P~P!3cOp*pOq!nO!Q*fO!`*nO!a*hO!b*hO!j*_O#Y*oO%_*jO(S!lO(TTO(WUO(c!mO~O![*mO~P!5WO#Q$dOl(^X!O(^X'w(^X(w(^X(x(^X!Z(^X#^(^X~Og(^X#}(^X~P!6YOl*uO#^*tOg(]X!Z(]X~O!Z*vOg([X~Oj%cO(R&XOg([P~Oq*yO~O!j+OO~O(R(tO~On+TO!Q%gO!Y#iO!]%hO!z]O#g#lO#h#iO(R%fO!i(qP~O!e#vO#i+UO~O!Q%gO!Y+WO!Z([O!]%hO(R%fO!W(tP~Oq'YO!Q+YO!Y+XO(TTO(WUO(c(zO~O![(vP~P!9]O!Z+ZOa)RX'x)RX~OP$[OR#zO[$cOp$aO!O#yO!Q#{O!j#xO!n$[O#P$RO#l$OO#m$PO#n$PO#o$PO#p$QO#q$RO#r$RO#s$bO#t$RO#u$SO#w$UO#y$WO#z$XO(_VO(p$YO(w#|O(x#}O~Oa!ha!Z!ha'x!ha'u!ha!W!ha!i!hat!ha!]!ha%h!ha!e!ha~P!:TOR#zO!O#yO!Q#{O!j#xO(_VOP!pa[!pap!pa!Z!pa!n!pa#P!pa#l!pa#m!pa#n!pa#o!pa#p!pa#q!pa#r!pa#s!pa#t!pa#u!pa#w!pa#y!pa#z!pa(p!pa(w!pa(x!pa~Oa!pa'x!pa'u!pa!W!pa!i!pat!pa!]!pa%h!pa!e!pa~P!<kOR#zO!O#yO!Q#{O!j#xO(_VOP!ra[!rap!ra!Z!ra!n!ra#P!ra#l!ra#m!ra#n!ra#o!ra#p!ra#q!ra#r!ra#s!ra#t!ra#u!ra#w!ra#y!ra#z!ra(p!ra(w!ra(x!ra~Oa!ra'x!ra'u!ra!W!ra!i!rat!ra!]!ra%h!ra!e!ra~P!?ROh%VOl+dO!]'^O%h+cO~O!e+fOa(ZX!](ZX'x(ZX!Z(ZX~Oa%mO!]XO'x%mO~Oh%VO!j%dO~Oh%VO!j%dO(R%fO~O!e#vO#i(vO~Ob+qO%i+rO(R+nO(TTO(WUO![)VP~O!Z+sO`)UX~O[+wO~O`+xO~O!]&OO(R%fO(S!lO`)UP~Oh%VO#^+}O~Oh%VOl,QO!]$|O~O!],SO~O!O,UO!]XO~O%m%uO~O!v,ZO~Oe,`O~Ob,aO(R#nO(TTO(WUO![)TP~Oe%|O~O%i!QO(R&XO~P=UO[,fO`,eO~OPYOQYOSfOdzOeyOnkOpYOqkOrkOxkOzYO|YO!QWO!UkO!VkO!guO!jZO!mYO!nYO!oYO!qvO!vxO!z]O$miO%g}O(TTO(WUO(_VO(m[O~O!]!eO!s!gO$V!kO(R!dO~P!FRO`,eOa%mO'x%mO~OPYOQYOSfOd!jOe!iOnkOpYOqkOrkOxkOzYO|YO!QWO!UkO!VkO!]!eO!guO!jZO!mYO!nYO!oYO!qvO!v!hO$V!kO$miO(R!dO(TTO(WUO(_VO(m[O~Oa,kOj!OO!swO%k!OO%l!OO%m!OO~P!HkO!j&mO~O&[,qO~O!],sO~O&m,uO&o,vOP&jaQ&jaS&jaY&jaa&jad&jae&jaj&jan&jap&jaq&jar&jax&jaz&ja|&ja!Q&ja!U&ja!V&ja!]&ja!g&ja!j&ja!m&ja!n&ja!o&ja!q&ja!s&ja!v&ja!z&ja$V&ja$m&ja%g&ja%i&ja%k&ja%l&ja%m&ja%p&ja%r&ja%u&ja%v&ja%x&ja&U&ja&[&ja&^&ja&`&ja&b&ja&e&ja&k&ja&q&ja&s&ja&u&ja&w&ja&y&ja'u&ja(R&ja(T&ja(W&ja(_&ja(m&ja![&ja&c&jab&ja&h&ja~O(R,{O~Oh!cX!Z!PX![!PX!e!PX!e!cX!j!cX#^!PX~O!Z!cX![!cX~P# qO!e-QO#^-POh(hX!Z#fX![#fX!e(hX!j(hX~O!Z(hX![(hX~P#!dOh%VO!e-SO!j%dO!Z!_X![!_X~Oq!nO!Q!oO(TTO(WUO(c!mO~OP;vOQ;vOSfOd=rOe!iOnkOp;vOqkOrkOxkOz;vO|;vO!QWO!UkO!VkO!]!eO!g;yO!jZO!m;vO!n;vO!o;vO!q;zO!s;}O!v!hO$V!kO$m=pO(TTO(WUO(_VO(m[O~O(R<rO~P##yO!Z-WO![(gX~O![-YO~O!e-QO#^-PO!Z#fX![#fX~O!Z-ZO![(vX~O![-]O~O!a-^O!b-^O(S!lO~P##hO![-aO~P'_Ol-dO!]'^O~O!W-iO~Oq!ya!`!ya!a!ya!b!ya#R!ya#S!ya#T!ya#U!ya#V!ya#Y!ya#Z!ya(S!ya(T!ya(W!ya(c!ya(m!ya~P!#eO!n-nO#^-lO~PCVO!a-pO!b-pO(S!lO~PCuOa%mO#^-lO'x%mO~Oa%mO!e#vO#^-lO'x%mO~Oa%mO!e#vO!n-nO#^-lO'x%mO(p'nO~O'}'vO(O'vO(P-uO~Ot-vO~O!W'Ua!Z'Ua~P!:TO!Y-zO!W'UX!Z'UX~P%[O!Z(TO!W(fa~O!W(fa~PGpO!Z([O!W(ta~O!Q%gO!Y.OO!]%hO(R%fO!W'[X!Z'[X~O#^.QO!Z(ra!i(raa(ra'x(ra~O!e#vO~P#,PO!Z(hO!i(qa~O!Q%gO!]%hO#h.UO(R%fO~On.ZO!Q%gO!Y.WO!]%hO!z]O#g.YO#h.WO(R%fO!Z'_X!i'_X~OR._O!j#xO~Oh%VOl.bO!]'^O%h.aO~Oa#ai!Z#ai'x#ai'u#ai!W#ai!i#ait#ai!]#ai%h#ai!e#ai~P!:TOl=|O!O)|O'w)}O(w$}O(x%PO~O#i#]aa#]a#^#]a'x#]a!Z#]a!i#]a!]#]a!W#]a~P#.{O#i(^XP(^XR(^X[(^Xa(^Xp(^X!Q(^X!j(^X!n(^X#P(^X#l(^X#m(^X#n(^X#o(^X#p(^X#q(^X#r(^X#s(^X#t(^X#u(^X#w(^X#y(^X#z(^X'x(^X(_(^X(p(^X!i(^X!W(^X'u(^Xt(^X!](^X%h(^X!e(^X~P!6YO!Z.oO!i(iX~P!:TO!i.rO~O!W.tO~OP$[OR#zO!O#yO!Q#{O!j#xO!n$[O(_VO[#kia#kip#ki!Z#ki#P#ki#m#ki#n#ki#o#ki#p#ki#q#ki#r#ki#s#ki#t#ki#u#ki#w#ki#y#ki#z#ki'x#ki(p#ki(w#ki(x#ki'u#ki!W#ki!i#kit#ki!]#ki%h#ki!e#ki~O#l#ki~P#2kO#l$OO~P#2kOP$[OR#zOp$aO!O#yO!Q#{O!j#xO!n$[O#l$OO#m$PO#n$PO#o$PO(_VO[#kia#ki!Z#ki#P#ki#q#ki#r#ki#s#ki#t#ki#u#ki#w#ki#y#ki#z#ki'x#ki(p#ki(w#ki(x#ki'u#ki!W#ki!i#kit#ki!]#ki%h#ki!e#ki~O#p#ki~P#5YO#p$QO~P#5YOP$[OR#zO[$cOp$aO!O#yO!Q#{O!j#xO!n$[O#P$RO#l$OO#m$PO#n$PO#o$PO#p$QO#q$RO#r$RO#s$bO#t$RO(_VOa#ki!Z#ki#w#ki#y#ki#z#ki'x#ki(p#ki(w#ki(x#ki'u#ki!W#ki!i#kit#ki!]#ki%h#ki!e#ki~O#u#ki~P#7wOP$[OR#zO[$cOp$aO!O#yO!Q#{O!j#xO!n$[O#P$RO#l$OO#m$PO#n$PO#o$PO#p$QO#q$RO#r$RO#s$bO#t$RO#u$SO(_VO(x#}Oa#ki!Z#ki#y#ki#z#ki'x#ki(p#ki(w#ki'u#ki!W#ki!i#kit#ki!]#ki%h#ki!e#ki~O#w$UO~P#:_O#w#ki~P#:_O#u$SO~P#7wOP$[OR#zO[$cOp$aO!O#yO!Q#{O!j#xO!n$[O#P$RO#l$OO#m$PO#n$PO#o$PO#p$QO#q$RO#r$RO#s$bO#t$RO#u$SO#w$UO(_VO(w#|O(x#}Oa#ki!Z#ki#z#ki'x#ki(p#ki'u#ki!W#ki!i#kit#ki!]#ki%h#ki!e#ki~O#y#ki~P#=TO#y$WO~P#=TOP]XR]X[]Xp]X!O]X!Q]X!j]X!n]X#P]X#Q]X#^]X#ifX#l]X#m]X#n]X#o]X#p]X#q]X#r]X#s]X#t]X#u]X#w]X#y]X#z]X$P]X(_]X(p]X(w]X(x]X!Z]X![]X~O#}]X~P#?rOP$[OR#zO[<_Op<]O!O#yO!Q#{O!j#xO!n$[O#P<SO#l<PO#m<QO#n<QO#o<QO#p<RO#q<SO#r<SO#s<^O#t<SO#u<TO#w<VO#y<XO#z<YO(_VO(p$YO(w#|O(x#}O~O#}.vO~P#BPO#Q$dO#^<`O$P<`O#}(eX![(eX~P! dOa'ba!Z'ba'x'ba'u'ba!i'ba!W'bat'ba!]'ba%h'ba!e'ba~P!:TO[#kia#kip#ki!Z#ki#P#ki#p#ki#q#ki#r#ki#s#ki#t#ki#u#ki#w#ki#y#ki#z#ki'x#ki(p#ki'u#ki!W#ki!i#kit#ki!]#ki%h#ki!e#ki~OP$[OR#zO!O#yO!Q#{O!j#xO!n$[O#l$OO#m$PO#n$PO#o$PO(_VO(w#ki(x#ki~P#EROl=|O!O)|O'w)}O(w$}O(x%POP#kiR#ki!Q#ki!j#ki!n#ki#l#ki#m#ki#n#ki#o#ki(_#ki~P#ERO!Z.zOg(nX~P!0uOg.|O~Oa$Oi!Z$Oi'x$Oi'u$Oi!W$Oi!i$Oit$Oi!]$Oi%h$Oi!e$Oi~P!:TO$[.}O$^.}O~O$[/OO$^/OO~O!e)fO#^/PO!]$bX$Y$bX$[$bX$^$bX$e$bX~O!Y/QO~O!])iO$Y/SO$[)hO$^)hO$e/TO~O!Z<ZO![(dX~P#BPO![/UO~O!e)fO$e(yX~O$e/WO~Ot/XO~P!&iOv)wO(`)xO(a/[O~O!Q/_O~O(w$}Ol%`a!O%`a'w%`a(x%`a!Z%`a#^%`a~Og%`a#}%`a~P#LTO(x%POl%ba!O%ba'w%ba(w%ba!Z%ba#^%ba~Og%ba#}%ba~P#LvO!ZfX!efX!ifX!i$yX(pfX~P!/qO!Y/hO!Z([O(R/gO!W(tP!W(}P~P!1dOp*pO!`*nO!a*hO!b*hO!j*_O#Y*oO%_*jO(S!lO(TTO(WUO~Oq<oO!Q/iO!Y+XO![*mO(c<nO![(vP~P#NaO!i/jO~P#.{O!Z/kO!e#vO(p'nO!i(|X~O!i/pO~O!Q%gO!Y*[O!]%hO(R%fO!i(|P~O#i/rO~O!W$yX!Z$yX!e%QX~P!/qO!Z/sO!W(}X~P#.{O!e/uO~O!W/wO~OnkO(R/xO~P.iOh%VOp/}O!e#vO!j%dO(p'nO~O!e+fO~Oa%mO!Z0RO'x%mO~O![0TO~P!5WO!a0UO!b0UO(S!lO~P##hOq!nO!Q0VO(TTO(WUO(c!mO~O#Y0XO~Og%`a!Z%`a#^%`a#}%`a~P!0uOg%ba!Z%ba#^%ba#}%ba~P!0uOj%cO(R&XOg'kX!Z'kX~O!Z*vOg([a~Og0bO~OR0cO!O0cO!Q0dO#Q$dOl{a'w{a(w{a(x{a!Z{a#^{a~Og{a#}{a~P$&dO!O)|O'w)}Ol$ra(w$ra(x$ra!Z$ra#^$ra~Og$ra#}$ra~P$'`O!O)|O'w)}Ol$ta(w$ta(x$ta!Z$ta#^$ta~Og$ta#}$ta~P$(RO#i0gO~Og%Sa!Z%Sa#^%Sa#}%Sa~P!0uOl0iO#^0hOg(]a!Z(]a~O!e#vO~O#i0lO~O!Z+ZOa)Ra'x)Ra~OR#zO!O#yO!Q#{O!j#xO(_VOP!pi[!pip!pi!Z!pi!n!pi#P!pi#l!pi#m!pi#n!pi#o!pi#p!pi#q!pi#r!pi#s!pi#t!pi#u!pi#w!pi#y!pi#z!pi(p!pi(w!pi(x!pi~Oa!pi'x!pi'u!pi!W!pi!i!pit!pi!]!pi%h!pi!e!pi~P$*OOh%VOp%XOq$tOr$tOx%YOz%ZO|<eO!Q${O!]$|O!g=vO!j$xO#h<kO$V%_O$s<gO$u<iO$x%`O(TTO(WUO(_$uO(w$}O(x%PO~On0vO%[0wO(R0tO~P$,fO!e+fOa(Za!](Za'x(Za!Z(Za~O#i0|O~O[]X!ZfX![fX~O!Z0}O![)VX~O![1PO~O[1QO~Ob1SO(R+nO(TTO(WUO~O!]&OO(R%fO`'sX!Z'sX~O!Z+sO`)Ua~O!i1VO~P!:TO[1YO~O`1ZO~O#^1^O~Ol1aO!]$|O~O(c(zO![)SP~Oh%VOl1jO!]1gO%h1iO~O[1tO!Z1rO![)TX~O![1uO~O`1wOa%mO'x%mO~O(R#nO(TTO(WUO~O#Q$dO#^$eO$P$eOP(eXR(eX[(eXp(eX!O(eX!Q(eX!Z(eX!j(eX!n(eX#P(eX#l(eX#m(eX#n(eX#o(eX#p(eX#q(eX#r(eX#s(eX#u(eX#w(eX#y(eX#z(eX(_(eX(p(eX(w(eX(x(eX~O#t1zO&Y1{Oa(eX~P$2PO#^$eO#t1zO&Y1{O~Oa1}O~P%[Oa2PO~O&c2SOP&aiQ&aiS&aiY&aia&aid&aie&aij&ain&aip&aiq&air&aix&aiz&ai|&ai!Q&ai!U&ai!V&ai!]&ai!g&ai!j&ai!m&ai!n&ai!o&ai!q&ai!s&ai!v&ai!z&ai$V&ai$m&ai%g&ai%i&ai%k&ai%l&ai%m&ai%p&ai%r&ai%u&ai%v&ai%x&ai&U&ai&[&ai&^&ai&`&ai&b&ai&e&ai&k&ai&q&ai&s&ai&u&ai&w&ai&y&ai'u&ai(R&ai(T&ai(W&ai(_&ai(m&ai![&aib&ai&h&ai~Ob2YO![2WO&h2XO~P`O!]XO!j2[O~O&o,vOP&jiQ&jiS&jiY&jia&jid&jie&jij&jin&jip&jiq&jir&jix&jiz&ji|&ji!Q&ji!U&ji!V&ji!]&ji!g&ji!j&ji!m&ji!n&ji!o&ji!q&ji!s&ji!v&ji!z&ji$V&ji$m&ji%g&ji%i&ji%k&ji%l&ji%m&ji%p&ji%r&ji%u&ji%v&ji%x&ji&U&ji&[&ji&^&ji&`&ji&b&ji&e&ji&k&ji&q&ji&s&ji&u&ji&w&ji&y&ji'u&ji(R&ji(T&ji(W&ji(_&ji(m&ji![&ji&c&jib&ji&h&ji~O!W2bO~O!Z!_a![!_a~P#BPOq!nO!Q!oO!Y2hO(c!mO!Z'VX!['VX~P@]O!Z-WO![(ga~O!Z']X![']X~P!9]O!Z-ZO![(va~O![2oO~P'_Oa%mO#^2xO'x%mO~Oa%mO!e#vO#^2xO'x%mO~Oa%mO!e#vO!n2|O#^2xO'x%mO(p'nO~Oa%mO'x%mO~P!:TO!Z$_Ot$pa~O!W'Ui!Z'Ui~P!:TO!Z(TO!W(fi~O!Z([O!W(ti~O!W(ui!Z(ui~P!:TO!Z(ri!i(ria(ri'x(ri~P!:TO#^3OO!Z(ri!i(ria(ri'x(ri~O!Z(hO!i(qi~O!Q%gO!]%hO!z]O#g3TO#h3SO(R%fO~O!Q%gO!]%hO#h3SO(R%fO~Ol3[O!]'^O%h3ZO~Oh%VOl3[O!]'^O%h3ZO~O#i%`aP%`aR%`a[%`aa%`ap%`a!Q%`a!j%`a!n%`a#P%`a#l%`a#m%`a#n%`a#o%`a#p%`a#q%`a#r%`a#s%`a#t%`a#u%`a#w%`a#y%`a#z%`a'x%`a(_%`a(p%`a!i%`a!W%`a'u%`at%`a!]%`a%h%`a!e%`a~P#LTO#i%baP%baR%ba[%baa%bap%ba!Q%ba!j%ba!n%ba#P%ba#l%ba#m%ba#n%ba#o%ba#p%ba#q%ba#r%ba#s%ba#t%ba#u%ba#w%ba#y%ba#z%ba'x%ba(_%ba(p%ba!i%ba!W%ba'u%bat%ba!]%ba%h%ba!e%ba~P#LvO#i%`aP%`aR%`a[%`aa%`ap%`a!Q%`a!Z%`a!j%`a!n%`a#P%`a#l%`a#m%`a#n%`a#o%`a#p%`a#q%`a#r%`a#s%`a#t%`a#u%`a#w%`a#y%`a#z%`a'x%`a(_%`a(p%`a!i%`a!W%`a'u%`a#^%`at%`a!]%`a%h%`a!e%`a~P#.{O#i%baP%baR%ba[%baa%bap%ba!Q%ba!Z%ba!j%ba!n%ba#P%ba#l%ba#m%ba#n%ba#o%ba#p%ba#q%ba#r%ba#s%ba#t%ba#u%ba#w%ba#y%ba#z%ba'x%ba(_%ba(p%ba!i%ba!W%ba'u%ba#^%bat%ba!]%ba%h%ba!e%ba~P#.{O#i{aP{a[{aa{ap{a!j{a!n{a#P{a#l{a#m{a#n{a#o{a#p{a#q{a#r{a#s{a#t{a#u{a#w{a#y{a#z{a'x{a(_{a(p{a!i{a!W{a'u{at{a!]{a%h{a!e{a~P$&dO#i$raP$raR$ra[$raa$rap$ra!Q$ra!j$ra!n$ra#P$ra#l$ra#m$ra#n$ra#o$ra#p$ra#q$ra#r$ra#s$ra#t$ra#u$ra#w$ra#y$ra#z$ra'x$ra(_$ra(p$ra!i$ra!W$ra'u$rat$ra!]$ra%h$ra!e$ra~P$'`O#i$taP$taR$ta[$taa$tap$ta!Q$ta!j$ta!n$ta#P$ta#l$ta#m$ta#n$ta#o$ta#p$ta#q$ta#r$ta#s$ta#t$ta#u$ta#w$ta#y$ta#z$ta'x$ta(_$ta(p$ta!i$ta!W$ta'u$tat$ta!]$ta%h$ta!e$ta~P$(RO#i%SaP%SaR%Sa[%Saa%Sap%Sa!Q%Sa!Z%Sa!j%Sa!n%Sa#P%Sa#l%Sa#m%Sa#n%Sa#o%Sa#p%Sa#q%Sa#r%Sa#s%Sa#t%Sa#u%Sa#w%Sa#y%Sa#z%Sa'x%Sa(_%Sa(p%Sa!i%Sa!W%Sa'u%Sa#^%Sat%Sa!]%Sa%h%Sa!e%Sa~P#.{Oa#aq!Z#aq'x#aq'u#aq!W#aq!i#aqt#aq!]#aq%h#aq!e#aq~P!:TO!Y3dO!Z'WX!i'WX~P%[O!Z.oO!i(ia~O!Z.oO!i(ia~P!:TO!W3gO~O#}!la![!la~PKZO#}!ha!Z!ha![!ha~P#BPO#}!pa![!pa~P!<kO#}!ra![!ra~P!?ROg'ZX!Z'ZX~P!+rO!Z.zOg(na~OSfO!]3{O$c3|O~O![4QO~Ot4RO~P#.{Oa$lq!Z$lq'x$lq'u$lq!W$lq!i$lqt$lq!]$lq%h$lq!e$lq~P!:TO!W4TO~P!&iO!Q4UO~O!O)|O'w)}O(x%POl'ga(w'ga!Z'ga#^'ga~Og'ga#}'ga~P%+uO!O)|O'w)}Ol'ia(w'ia(x'ia!Z'ia#^'ia~Og'ia#}'ia~P%,hO(p$YO~P#.{O!WfX!W$yX!ZfX!Z$yX!e%QX#^fX~P!/qO(R<xO~P!1dO!Q%gO!Y4XO!]%hO(R%fO!Z'cX!i'cX~O!Z/kO!i(|a~O!Z/kO!e#vO!i(|a~O!Z/kO!e#vO(p'nO!i(|a~Og${i!Z${i#^${i#}${i~P!0uO!Y4aO!W'eX!Z'eX~P!3cO!Z/sO!W(}a~O!Z/sO!W(}a~P#.{OP]XR]X[]Xp]X!O]X!Q]X!W]X!Z]X!j]X!n]X#P]X#Q]X#^]X#ifX#l]X#m]X#n]X#o]X#p]X#q]X#r]X#s]X#t]X#u]X#w]X#y]X#z]X$P]X(_]X(p]X(w]X(x]X~O!e%XX#t%XX~P%0XO!e#vO#t4fO~Oh%VO!e#vO!j%dO~Oh%VOp4kO!j%dO(p'nO~Op4pO!e#vO(p'nO~Oq!nO!Q4qO(TTO(WUO(c!mO~O(w$}Ol%`i!O%`i'w%`i(x%`i!Z%`i#^%`i~Og%`i#}%`i~P%3xO(x%POl%bi!O%bi'w%bi(w%bi!Z%bi#^%bi~Og%bi#}%bi~P%4kOg(]i!Z(]i~P!0uO#^4wOg(]i!Z(]i~P!0uO!i4zO~Oa$nq!Z$nq'x$nq'u$nq!W$nq!i$nqt$nq!]$nq%h$nq!e$nq~P!:TO!W5QO~O!Z5RO!])OX~P#.{Oa]Xa$yX!]]X!]$yX%]]X'x]X'x$yX!Z]X!Z$yX~P!/qO%]5UOa%Za!]%Za'x%Za!Z%Za~OlmX!OmX'wmX(wmX(xmX~P%7nOn5VO(R#nO~Ob5]O%i5^O(R+nO(TTO(WUO!Z'rX!['rX~O!Z0}O![)Va~O[5bO~O`5cO~Oa%mO'x%mO~P#.{O!Z5kO#^5mO![)SX~O![5nO~Op5tOq!nO!Q*fO!`!yO!a!vO!b!vO!z;wO#R!pO#S!pO#T!pO#U!pO#V!pO#Y5sO#Z!zO(S!lO(TTO(WUO(c!mO(m!sO~O![5rO~P%:ROl5yO!]1gO%h5xO~Oh%VOl5yO!]1gO%h5xO~Ob6QO(R#nO(TTO(WUO!Z'qX!['qX~O!Z1rO![)Ta~O(TTO(WUO(c6SO~O`6WO~O#t6ZO&Y6[O~PMvO!i6]O~P%[Oa6_O~Oa6_O~P%[Ob2YO![6dO&h2XO~P`O!e6fO~O!e6hOh(hi!Z(hi![(hi!e(hi!j(hip(hi(p(hi~O!Z#fi![#fi~P#BPO#^6iO!Z#fi![#fi~O!Z!_i![!_i~P#BPOa%mO#^6rO'x%mO~Oa%mO!e#vO#^6rO'x%mO~O!Z(rq!i(rqa(rq'x(rq~P!:TO!Z(hO!i(qq~O!Q%gO!]%hO#h6yO(R%fO~O!]'^O%h6|O~Ol7QO!]'^O%h6|O~O#i'gaP'gaR'ga['gaa'gap'ga!Q'ga!j'ga!n'ga#P'ga#l'ga#m'ga#n'ga#o'ga#p'ga#q'ga#r'ga#s'ga#t'ga#u'ga#w'ga#y'ga#z'ga'x'ga(_'ga(p'ga!i'ga!W'ga'u'gat'ga!]'ga%h'ga!e'ga~P%+uO#i'iaP'iaR'ia['iaa'iap'ia!Q'ia!j'ia!n'ia#P'ia#l'ia#m'ia#n'ia#o'ia#p'ia#q'ia#r'ia#s'ia#t'ia#u'ia#w'ia#y'ia#z'ia'x'ia(_'ia(p'ia!i'ia!W'ia'u'iat'ia!]'ia%h'ia!e'ia~P%,hO#i${iP${iR${i[${ia${ip${i!Q${i!Z${i!j${i!n${i#P${i#l${i#m${i#n${i#o${i#p${i#q${i#r${i#s${i#t${i#u${i#w${i#y${i#z${i'x${i(_${i(p${i!i${i!W${i'u${i#^${it${i!]${i%h${i!e${i~P#.{O#i%`iP%`iR%`i[%`ia%`ip%`i!Q%`i!j%`i!n%`i#P%`i#l%`i#m%`i#n%`i#o%`i#p%`i#q%`i#r%`i#s%`i#t%`i#u%`i#w%`i#y%`i#z%`i'x%`i(_%`i(p%`i!i%`i!W%`i'u%`it%`i!]%`i%h%`i!e%`i~P%3xO#i%biP%biR%bi[%bia%bip%bi!Q%bi!j%bi!n%bi#P%bi#l%bi#m%bi#n%bi#o%bi#p%bi#q%bi#r%bi#s%bi#t%bi#u%bi#w%bi#y%bi#z%bi'x%bi(_%bi(p%bi!i%bi!W%bi'u%bit%bi!]%bi%h%bi!e%bi~P%4kO!Z'Wa!i'Wa~P!:TO!Z.oO!i(ii~O#}#ai!Z#ai![#ai~P#BPOP$[OR#zO!O#yO!Q#{O!j#xO!n$[O(_VO[#kip#ki#P#ki#m#ki#n#ki#o#ki#p#ki#q#ki#r#ki#s#ki#t#ki#u#ki#w#ki#y#ki#z#ki#}#ki(p#ki(w#ki(x#ki!Z#ki![#ki~O#l#ki~P%MQO#l<PO~P%MQOP$[OR#zOp<]O!O#yO!Q#{O!j#xO!n$[O#l<PO#m<QO#n<QO#o<QO(_VO[#ki#P#ki#q#ki#r#ki#s#ki#t#ki#u#ki#w#ki#y#ki#z#ki#}#ki(p#ki(w#ki(x#ki!Z#ki![#ki~O#p#ki~P& YO#p<RO~P& YOP$[OR#zO[<_Op<]O!O#yO!Q#{O!j#xO!n$[O#P<SO#l<PO#m<QO#n<QO#o<QO#p<RO#q<SO#r<SO#s<^O#t<SO(_VO#w#ki#y#ki#z#ki#}#ki(p#ki(w#ki(x#ki!Z#ki![#ki~O#u#ki~P&#bOP$[OR#zO[<_Op<]O!O#yO!Q#{O!j#xO!n$[O#P<SO#l<PO#m<QO#n<QO#o<QO#p<RO#q<SO#r<SO#s<^O#t<SO#u<TO(_VO(x#}O#y#ki#z#ki#}#ki(p#ki(w#ki!Z#ki![#ki~O#w<VO~P&%cO#w#ki~P&%cO#u<TO~P&#bOP$[OR#zO[<_Op<]O!O#yO!Q#{O!j#xO!n$[O#P<SO#l<PO#m<QO#n<QO#o<QO#p<RO#q<SO#r<SO#s<^O#t<SO#u<TO#w<VO(_VO(w#|O(x#}O#z#ki#}#ki(p#ki!Z#ki![#ki~O#y#ki~P&'rO#y<XO~P&'rOa#{y!Z#{y'x#{y'u#{y!W#{y!i#{yt#{y!]#{y%h#{y!e#{y~P!:TO[#kip#ki#P#ki#p#ki#q#ki#r#ki#s#ki#t#ki#u#ki#w#ki#y#ki#z#ki#}#ki(p#ki!Z#ki![#ki~OP$[OR#zO!O#yO!Q#{O!j#xO!n$[O#l<PO#m<QO#n<QO#o<QO(_VO(w#ki(x#ki~P&*nOl=}O!O)|O'w)}O(w$}O(x%POP#kiR#ki!Q#ki!j#ki!n#ki#l#ki#m#ki#n#ki#o#ki(_#ki~P&*nO#Q$dOP(^XR(^X[(^Xl(^Xp(^X!O(^X!Q(^X!j(^X!n(^X#P(^X#l(^X#m(^X#n(^X#o(^X#p(^X#q(^X#r(^X#s(^X#t(^X#u(^X#w(^X#y(^X#z(^X#}(^X'w(^X(_(^X(p(^X(w(^X(x(^X!Z(^X![(^X~O#}$Oi!Z$Oi![$Oi~P#BPO#}!pi![!pi~P$*OOg'Za!Z'Za~P!0uO![7dO~O!Z'ba!['ba~P#BPO!W7eO~P#.{O!e#vO(p'nO!Z'ca!i'ca~O!Z/kO!i(|i~O!Z/kO!e#vO!i(|i~Og${q!Z${q#^${q#}${q~P!0uO!W'ea!Z'ea~P#.{O!e7lO~O!Z/sO!W(}i~P#.{O!Z/sO!W(}i~O!W7oO~Oh%VOp7tO!j%dO(p'nO~O!e#vO#t7vO~Op7yO!e#vO(p'nO~O!O)|O'w)}O(x%POl'ha(w'ha!Z'ha#^'ha~Og'ha#}'ha~P&3oO!O)|O'w)}Ol'ja(w'ja(x'ja!Z'ja#^'ja~Og'ja#}'ja~P&4bO!W7{O~Og$}q!Z$}q#^$}q#}$}q~P!0uOg(]q!Z(]q~P!0uO#^7|Og(]q!Z(]q~P!0uOa$ny!Z$ny'x$ny'u$ny!W$ny!i$nyt$ny!]$ny%h$ny!e$ny~P!:TO!e6hO~O!Z5RO!])Oa~O!]'^OP$SaR$Sa[$Sap$Sa!O$Sa!Q$Sa!Z$Sa!j$Sa!n$Sa#P$Sa#l$Sa#m$Sa#n$Sa#o$Sa#p$Sa#q$Sa#r$Sa#s$Sa#t$Sa#u$Sa#w$Sa#y$Sa#z$Sa(_$Sa(p$Sa(w$Sa(x$Sa~O%h6|O~P&7SO%]8QOa%Zi!]%Zi'x%Zi!Z%Zi~Oa#ay!Z#ay'x#ay'u#ay!W#ay!i#ayt#ay!]#ay%h#ay!e#ay~P!:TO[8SO~Ob8UO(R+nO(TTO(WUO~O!Z0}O![)Vi~O`8YO~O(c(zO!Z'nX!['nX~O!Z5kO![)Sa~O![8cO~P%:RO(m!sO~P$$oO#Y8dO~O!]1gO~O!]1gO%h8fO~Ol8iO!]1gO%h8fO~O[8nO!Z'qa!['qa~O!Z1rO![)Ti~O!i8rO~O!i8sO~O!i8vO~O!i8vO~P%[Oa8xO~O!e8yO~O!i8zO~O!Z(ui![(ui~P#BPOa%mO#^9SO'x%mO~O!Z(ry!i(rya(ry'x(ry~P!:TO!Z(hO!i(qy~O%h9VO~P&7SO!]'^O%h9VO~O#i${qP${qR${q[${qa${qp${q!Q${q!Z${q!j${q!n${q#P${q#l${q#m${q#n${q#o${q#p${q#q${q#r${q#s${q#t${q#u${q#w${q#y${q#z${q'x${q(_${q(p${q!i${q!W${q'u${q#^${qt${q!]${q%h${q!e${q~P#.{O#i'haP'haR'ha['haa'hap'ha!Q'ha!j'ha!n'ha#P'ha#l'ha#m'ha#n'ha#o'ha#p'ha#q'ha#r'ha#s'ha#t'ha#u'ha#w'ha#y'ha#z'ha'x'ha(_'ha(p'ha!i'ha!W'ha'u'hat'ha!]'ha%h'ha!e'ha~P&3oO#i'jaP'jaR'ja['jaa'jap'ja!Q'ja!j'ja!n'ja#P'ja#l'ja#m'ja#n'ja#o'ja#p'ja#q'ja#r'ja#s'ja#t'ja#u'ja#w'ja#y'ja#z'ja'x'ja(_'ja(p'ja!i'ja!W'ja'u'jat'ja!]'ja%h'ja!e'ja~P&4bO#i$}qP$}qR$}q[$}qa$}qp$}q!Q$}q!Z$}q!j$}q!n$}q#P$}q#l$}q#m$}q#n$}q#o$}q#p$}q#q$}q#r$}q#s$}q#t$}q#u$}q#w$}q#y$}q#z$}q'x$}q(_$}q(p$}q!i$}q!W$}q'u$}q#^$}qt$}q!]$}q%h$}q!e$}q~P#.{O!Z'Wi!i'Wi~P!:TO#}#aq!Z#aq![#aq~P#BPO(w$}OP%`aR%`a[%`ap%`a!Q%`a!j%`a!n%`a#P%`a#l%`a#m%`a#n%`a#o%`a#p%`a#q%`a#r%`a#s%`a#t%`a#u%`a#w%`a#y%`a#z%`a#}%`a(_%`a(p%`a!Z%`a![%`a~Ol%`a!O%`a'w%`a(x%`a~P&HgO(x%POP%baR%ba[%bap%ba!Q%ba!j%ba!n%ba#P%ba#l%ba#m%ba#n%ba#o%ba#p%ba#q%ba#r%ba#s%ba#t%ba#u%ba#w%ba#y%ba#z%ba#}%ba(_%ba(p%ba!Z%ba![%ba~Ol%ba!O%ba'w%ba(w%ba~P&JnOl=}O!O)|O'w)}O(x%PO~P&HgOl=}O!O)|O'w)}O(w$}O~P&JnOR0cO!O0cO!Q0dO#Q$dOP{a[{al{ap{a!j{a!n{a#P{a#l{a#m{a#n{a#o{a#p{a#q{a#r{a#s{a#t{a#u{a#w{a#y{a#z{a#}{a'w{a(_{a(p{a(w{a(x{a!Z{a![{a~O!O)|O'w)}OP$raR$ra[$ral$rap$ra!Q$ra!j$ra!n$ra#P$ra#l$ra#m$ra#n$ra#o$ra#p$ra#q$ra#r$ra#s$ra#t$ra#u$ra#w$ra#y$ra#z$ra#}$ra(_$ra(p$ra(w$ra(x$ra!Z$ra![$ra~O!O)|O'w)}OP$taR$ta[$tal$tap$ta!Q$ta!j$ta!n$ta#P$ta#l$ta#m$ta#n$ta#o$ta#p$ta#q$ta#r$ta#s$ta#t$ta#u$ta#w$ta#y$ta#z$ta#}$ta(_$ta(p$ta(w$ta(x$ta!Z$ta![$ta~Ol=}O!O)|O'w)}O(w$}O(x%PO~OP%SaR%Sa[%Sap%Sa!Q%Sa!j%Sa!n%Sa#P%Sa#l%Sa#m%Sa#n%Sa#o%Sa#p%Sa#q%Sa#r%Sa#s%Sa#t%Sa#u%Sa#w%Sa#y%Sa#z%Sa#}%Sa(_%Sa(p%Sa!Z%Sa![%Sa~P'%sO#}$lq!Z$lq![$lq~P#BPO#}$nq!Z$nq![$nq~P#BPO![9dO~O#}9eO~P!0uO!e#vO!Z'ci!i'ci~O!e#vO(p'nO!Z'ci!i'ci~O!Z/kO!i(|q~O!W'ei!Z'ei~P#.{O!Z/sO!W(}q~Op9lO!e#vO(p'nO~O[9nO!W9mO~P#.{O!W9mO~O!e#vO#t9tO~Og(]y!Z(]y~P!0uO!Z'la!]'la~P#.{Oa%Zq!]%Zq'x%Zq!Z%Zq~P#.{O[9yO~O!Z0}O![)Vq~O#^9}O!Z'na!['na~O!Z5kO![)Si~P#BPO!Q:PO~O!]1gO%h:SO~O(TTO(WUO(c:XO~O!Z1rO![)Tq~O!i:[O~O!i:]O~O!i:^O~O!i:^O~P%[O#^:aO!Z#fy![#fy~O!Z#fy![#fy~P#BPO%h:fO~P&7SO!]'^O%h:fO~O#}#{y!Z#{y![#{y~P#BPOP${iR${i[${ip${i!Q${i!j${i!n${i#P${i#l${i#m${i#n${i#o${i#p${i#q${i#r${i#s${i#t${i#u${i#w${i#y${i#z${i#}${i(_${i(p${i!Z${i![${i~P'%sO!O)|O'w)}O(x%POP'gaR'ga['gal'gap'ga!Q'ga!j'ga!n'ga#P'ga#l'ga#m'ga#n'ga#o'ga#p'ga#q'ga#r'ga#s'ga#t'ga#u'ga#w'ga#y'ga#z'ga#}'ga(_'ga(p'ga(w'ga!Z'ga!['ga~O!O)|O'w)}OP'iaR'ia['ial'iap'ia!Q'ia!j'ia!n'ia#P'ia#l'ia#m'ia#n'ia#o'ia#p'ia#q'ia#r'ia#s'ia#t'ia#u'ia#w'ia#y'ia#z'ia#}'ia(_'ia(p'ia(w'ia(x'ia!Z'ia!['ia~O(w$}OP%`iR%`i[%`il%`ip%`i!O%`i!Q%`i!j%`i!n%`i#P%`i#l%`i#m%`i#n%`i#o%`i#p%`i#q%`i#r%`i#s%`i#t%`i#u%`i#w%`i#y%`i#z%`i#}%`i'w%`i(_%`i(p%`i(x%`i!Z%`i![%`i~O(x%POP%biR%bi[%bil%bip%bi!O%bi!Q%bi!j%bi!n%bi#P%bi#l%bi#m%bi#n%bi#o%bi#p%bi#q%bi#r%bi#s%bi#t%bi#u%bi#w%bi#y%bi#z%bi#}%bi'w%bi(_%bi(p%bi(w%bi!Z%bi![%bi~O#}$ny!Z$ny![$ny~P#BPO#}#ay!Z#ay![#ay~P#BPO!e#vO!Z'cq!i'cq~O!Z/kO!i(|y~O!W'eq!Z'eq~P#.{Op:pO!e#vO(p'nO~O[:tO!W:sO~P#.{O!W:sO~Og(]!R!Z(]!R~P!0uOa%Zy!]%Zy'x%Zy!Z%Zy~P#.{O!Z0}O![)Vy~O!Z5kO![)Sq~O(R:zO~O!]1gO%h:}O~O!i;QO~O%h;VO~P&7SOP${qR${q[${qp${q!Q${q!j${q!n${q#P${q#l${q#m${q#n${q#o${q#p${q#q${q#r${q#s${q#t${q#u${q#w${q#y${q#z${q#}${q(_${q(p${q!Z${q![${q~P'%sO!O)|O'w)}O(x%POP'haR'ha['hal'hap'ha!Q'ha!j'ha!n'ha#P'ha#l'ha#m'ha#n'ha#o'ha#p'ha#q'ha#r'ha#s'ha#t'ha#u'ha#w'ha#y'ha#z'ha#}'ha(_'ha(p'ha(w'ha!Z'ha!['ha~O!O)|O'w)}OP'jaR'ja['jal'jap'ja!Q'ja!j'ja!n'ja#P'ja#l'ja#m'ja#n'ja#o'ja#p'ja#q'ja#r'ja#s'ja#t'ja#u'ja#w'ja#y'ja#z'ja#}'ja(_'ja(p'ja(w'ja(x'ja!Z'ja!['ja~OP$}qR$}q[$}qp$}q!Q$}q!j$}q!n$}q#P$}q#l$}q#m$}q#n$}q#o$}q#p$}q#q$}q#r$}q#s$}q#t$}q#u$}q#w$}q#y$}q#z$}q#}$}q(_$}q(p$}q!Z$}q![$}q~P'%sOg%d!Z!Z%d!Z#^%d!Z#}%d!Z~P!0uO!W;ZO~P#.{Op;[O!e#vO(p'nO~O[;^O!W;ZO~P#.{O!Z'nq!['nq~P#BPO!Z#f!Z![#f!Z~P#BPO#i%d!ZP%d!ZR%d!Z[%d!Za%d!Zp%d!Z!Q%d!Z!Z%d!Z!j%d!Z!n%d!Z#P%d!Z#l%d!Z#m%d!Z#n%d!Z#o%d!Z#p%d!Z#q%d!Z#r%d!Z#s%d!Z#t%d!Z#u%d!Z#w%d!Z#y%d!Z#z%d!Z'x%d!Z(_%d!Z(p%d!Z!i%d!Z!W%d!Z'u%d!Z#^%d!Zt%d!Z!]%d!Z%h%d!Z!e%d!Z~P#.{Op;fO!e#vO(p'nO~O!W;gO~P#.{Op;nO!e#vO(p'nO~O!W;oO~P#.{OP%d!ZR%d!Z[%d!Zp%d!Z!Q%d!Z!j%d!Z!n%d!Z#P%d!Z#l%d!Z#m%d!Z#n%d!Z#o%d!Z#p%d!Z#q%d!Z#r%d!Z#s%d!Z#t%d!Z#u%d!Z#w%d!Z#y%d!Z#z%d!Z#}%d!Z(_%d!Z(p%d!Z!Z%d!Z![%d!Z~P'%sOp;rO!e#vO(p'nO~Ot(dX~P1qO!O%qO~P!(yO(S!lO~P!(yO!WfX!ZfX#^fX~P%0XOP]XR]X[]Xp]X!O]X!Q]X!Z]X!ZfX!j]X!n]X#P]X#Q]X#^]X#^fX#ifX#l]X#m]X#n]X#o]X#p]X#q]X#r]X#s]X#t]X#u]X#w]X#y]X#z]X$P]X(_]X(p]X(w]X(x]X~O!efX!i]X!ifX(pfX~P'JlOP;vOQ;vOSfOd=rOe!iOnkOp;vOqkOrkOxkOz;vO|;vO!QWO!UkO!VkO!]XO!g;yO!jZO!m;vO!n;vO!o;vO!q;zO!s;}O!v!hO$V!kO$m=pO(R)ZO(TTO(WUO(_VO(m[O~O!Z<ZO![$pa~Oh%VOn%WOp%XOq$tOr$tOx%YOz%ZO|<fO!Q${O!]$|O!g=wO!j$xO#h<lO$V%_O$s<hO$u<jO$x%`O(R(tO(TTO(WUO(_$uO(w$}O(x%PO~Oj)bO~P( bOp!cX(p!cX~P# qOp(hX(p(hX~P#!dO![]X![fX~P'JlO!WfX!W$yX!ZfX!Z$yX#^fX~P!/qO#i<OO~O!e#vO#i<OO~O#^<`O~O#t<SO~O#^<pO!Z(uX![(uX~O#^<`O!Z(sX![(sX~O#i<qO~Og<sO~P!0uO#i<yO~O#i<zO~O!e#vO#i<{O~O!e#vO#i<qO~O#}<|O~P#BPO#i<}O~O#i=OO~O#i=TO~O#i=UO~O#i=VO~O#i=WO~O#}=XO~P!0uO#}=YO~P!0uO#Q#R#S#U#V#Y#g#h#s$m$s$u$x%[%]%g%h%i%p%r%u%v%x%z~'|T#m!V'z(S#nq#l#op!O'{$['{(R$^(c~",
|
| 27389 |
goto: "$4`)TPPPPP)UPP)XP)jP*z/PPPPP5wPP6_PP<U?kP@OP@OPPP@OPBOP@OP@OP@OPBSPPBXPBsPGlPPPGpPPPPGpJrPPPJxKtPGpPNSPPPP!!bGpPPPGpPGpP!$pGpP!(V!)X!)bP!*U!*Y!*UPPPPP!-f!)XPP!-v!.pP!1dGpGp!1i!4t!9[!9[!=YPPP!=bGpPPPPPPPPPPP!@pP!A}PPGp!C`PGpPGpGpGpGpPGp!DrP!G{P!KQP!KU!K`!Kd!KdP!GxP!Kh!KhP!NmP!NqGpGp!Nw##{@OP@OP@O@OP#%X@O@O#'c@O#*R@O#,V@O@O#,u#/R#/R#/W#/a#/R#/jP#/RP@O#0S@O#3s@O@O5wPPP#7jPPP#8T#8TP#8TP#8k#8TPP#8qP#8hP#8h#9U#8h#9p#9v5t)X#9y)XP#:Q#:Q#:QP)XP)XP)XP)XPP)XP#:W#:ZP#:Z)XP#:_P#:bP)XP)XP)XP)XP)XP)X)XPP#:h#:n#:y#;P#;V#;]#;c#;q#;w#;}#<X#<_#<i#<y#=P#=q#>T#>Z#>a#>o#?U#@s#AR#AY#Bn#B|#Dh#Dv#D|#ES#EY#Ed#Ej#Ep#Ez#F^#FdPPPPPPPPPP#FjPPPPPPP#G_#Jf#Ku#K|#LUPPPP$#[$&S$,l$,o$,r$-_$-b$-e$-l$-tP$-zP$.h$.l$/d$0r$0w$1_PP$1d$1j$1nP$1q$1u$1y$2o$3W$3o$3s$3v$3y$4P$4S$4W$4[R!|RoqOXst!Z#d%k&n&p&q&s,k,p1}2QY!vQ'[-]1b5dQ%qvQ%yyQ&Q|Q&f!VS'S!e-TQ'b!iS'h!r!yU*f$}*W*kQ+i%zQ+v&SQ,[&`Q-Z'ZQ-e'cQ-m'iQ0S*mQ1l,]R;`:m%QdOPWXYZstuvw!Z!`!g!o#S#W#Z#d#o#u#y#|$P$Q$R$S$T$U$V$W$X$Y$Z$b$f%k%q&O&g&j&n&p&q&s&w'P'^'n(O(Q(W(_(s(w({)z+R+V,h,k,p-a-i-w-}.o.v/g0b0g0w1e1u1v1x1z1}2Q2S2s2y3a5a5k5{5|6P6d7}8S8c8mS#q]:j!r)]$]$n'T)o,|-P/O2c3v5_6Z9^9o:i:l:m:p:q:r:s:t:u:v:w:x:y:z:{:|:};R;`;b;c;e;m;n;w;x<eQ*x%[Q+n%|Q,^&cQ,e&kQ.f;WQ0n+aQ0r+cQ0}+oQ1t,cQ3R._Q4}0xQ5r1mQ6p3VQ6|;XQ7o5OR8s6q'OkOPWXYZstuvw!Z!`!g!o#S#W#Z#d#o#u#y#|$P$Q$R$S$T$U$V$W$X$Y$Z$]$b$f$n%k%q&O&g&j&k&n&p&q&s&w'P'T'^'n(O(Q(W(_(s(w({)o)z+R+V+a,h,k,p,|-P-a-i-w-}._.o.v/O/g0b0g0w1e1u1v1x1z1}2Q2S2c2s2y3V3a3v5_5a5k5{5|6P6Z6d6q7}8S8c8m9^9o:i:l:m:p:q:r:s:t:u:v:w:x:y:z:{:|:};R;`;b;c;e;m;n;w;x<et!nQ!r!v!y!z'S'Z'['h'i'j-T-Z-]-m1b5d5f$z$ti#v#x$d$e$y$|%P%R%]%^%b)v)|*O*Q*S*V*]*c*s*t+`+c+z+}.^.l/^/f/p/q/s0W0Y0d1X1[1d3U4O4Z4c4m4u4w5j6n7[7e8P8p8}9b9t:U:^;P;Q;S;T;U;V;Y;Z;[;];^;_;f;g;h;i;k;l;o;p;q;r;s;t;u;v;y;z<b<j<k<n<oQ&T|Q'Q!eU'W%g*W-WQ+n%|Q,^&cQ0c*|Q0}+oQ1S+uQ1s,bQ1t,cQ4}0xQ5W1UQ5r1mQ5u1oQ5v1rQ7o5OQ7r5TQ8[5xQ9]7sR9h8XrnOXst!V!Z#d%k&e&n&p&q&s,k,p1}2QR,`&g&x^OPXYstuvwz!Z!`!g!j!o#S#d#o#u#y#|$P$Q$R$S$T$U$V$W$X$Y$Z$]$b$f$n%k%q&O&g&j&k&n&p&q&s&w'P'^'n(Q(W(_(s(w({)o)z+R+V+a,h,k,p,|-P-a-i-w-}._.o.v/O/g0b0g0w1e1u1v1x1z1}2Q2S2c2s2y3V3a3v5_5a5k5{5|6P6Z6d6q7}8S8c8m9^9o:i:l:m:p:q:r:s:t:u:v:w:x:y:z:{:|:};R;`;b;c;e;m;n;w;x<d<e[#]WZ#W#Z'T(O!b%hm#h#i#l$y%c%f(X(c(d(e*V*Z*^+T+U+W,g,}-{.R.S.T.V/f/i2V2}3O4R6Y6kQ%txQ%xyS%}|&SQ&Z!TQ'_!hQ'a!iQ(l#sS+h%y%zQ+l%|Q,V&^Q,Z&`S-d'b'cQ.a(mQ0v+iQ0|+oQ1O+pQ1R+tQ1g,WS1k,[,]Q2o-eQ4|0xQ5Q0{Q5V1TQ5q1lQ7n5OQ7q5SQ9X7mR:P9Y!O${i#x%P%R%]%^%b*O*Q*]*s*t.l/p0W0Y0d4O4m8}<b<j<k!S%vy!i!u%x%y%z'R'a'b'c'g'q*e+h+i-Q-d-e-l/z0v2h2o2v4eQ+b%tQ+{&WQ,O&XQ,Y&`Q.`(lQ1f,VU1j,Z,[,]Q3W.aQ5l1gS5p1k1lQ8W5q#[<f#v$d$e$y$|)v)|*S*V*c+`+c+z+}.^/^/f/q/s1X1[1d3U4Z4c4u4w5j6n7[7e8P8p9b9t:U:^;S;U;Y;[;^;f;h;k;o;q;s;u;y<n<oo<g;P;Q;T;V;Z;];_;g;i;l;p;r;t;v;zW%Ui%W*u<bS&W!Q&eQ&X!RQ&Y!SR+y&U${%Ti#v#x$d$e$y$|%P%R%]%^%b)v)|*O*Q*S*V*]*c*s*t+`+c+z+}.^.l/^/f/p/q/s0W0Y0d1X1[1d3U4O4Z4c4m4u4w5j6n7[7e8P8p8}9b9t:U:^;P;Q;S;T;U;V;Y;Z;[;];^;_;f;g;h;i;k;l;o;p;q;r;s;t;u;v;y;z<b<j<k<n<oT)w$v)xV*y%[;W;XW'W!e%g*W-WS(z#z#{Q+s&PS.Y(h(iQ1],PQ4n0aR7w5]'OkOPWXYZstuvw!Z!`!g!o#S#W#Z#d#o#u#y#|$P$Q$R$S$T$U$V$W$X$Y$Z$]$b$f$n%k%q&O&g&j&k&n&p&q&s&w'P'T'^'n(O(Q(W(_(s(w({)o)z+R+V+a,h,k,p,|-P-a-i-w-}._.o.v/O/g0b0g0w1e1u1v1x1z1}2Q2S2c2s2y3V3a3v5_5a5k5{5|6P6Z6d6q7}8S8c8m9^9o:i:l:m:p:q:r:s:t:u:v:w:x:y:z:{:|:};R;`;b;c;e;m;n;w;x<e$i$ac#Y#e%o%p%r'}(T(o(v)O)P)Q)R)S)T)U)V)W)X)Y)[)_)c)m+^+r-R-p-u-z-|.k.q.u.w.x.y/Y0e2^2a2q2x3`3e3f3g3h3i3j3k3l3m3n3o3p3q3t3u3z4r4z6]6c6h6v6w7Q7R7y8g8k8t8z8{9q:R:Y:k<XT#TV#U'PkOPWXYZstuvw!Z!`!g!o#S#W#Z#d#o#u#y#|$P$Q$R$S$T$U$V$W$X$Y$Z$]$b$f$n%k%q&O&g&j&k&n&p&q&s&w'P'T'^'n(O(Q(W(_(s(w({)o)z+R+V+a,h,k,p,|-P-a-i-w-}._.o.v/O/g0b0g0w1e1u1v1x1z1}2Q2S2c2s2y3V3a3v5_5a5k5{5|6P6Z6d6q7}8S8c8m9^9o:i:l:m:p:q:r:s:t:u:v:w:x:y:z:{:|:};R;`;b;c;e;m;n;w;x<eQ'U!eR2d-Tv!nQ!e!r!v!y!z'S'Z'['h'i'j-T-Z-]-m1b5d5fU*e$}*W*kS/z*f*mQ0T*nQ1_,RQ4e0SR4h0VnqOXst!Z#d%k&n&p&q&s,k,p1}2QQ&u!^Q'r!xS(n#u:qQ+f%wQ,T&ZQ,U&]Q-b'`Q-o'kS.j(s;cS0f+R;mQ0t+gQ1a,SQ2U,rQ2W,sQ2`-OQ2m-cQ2p-gS4s0g;wQ4x0uS4{0w;xQ6[2bQ6`2nQ6e2uQ7l4yQ8h6^Q8i6aQ8l6fR9n8e$d$`c#Y#e%p%r'}(T(o(v)O)P)Q)R)S)T)U)V)W)X)Y)[)_)c)m+^+r-R-p-u-z-|.k.q.u.x.y/Y0e2^2a2q2x3`3e3f3g3h3i3j3k3l3m3n3o3p3q3t3u3z4r4z6]6c6h6v6w7Q7R7y8g8k8t8z8{9q:R:Y:k<XS(k#p'eU*r%S(r3sS+]%o.wQ3S0nQ6m3RQ8r6pR9u8s$d$_c#Y#e%p%r'}(T(o(v)O)P)Q)R)S)T)U)V)W)X)Y)[)_)c)m+^+r-R-p-u-z-|.k.q.u.x.y/Y0e2^2a2q2x3`3e3f3g3h3i3j3k3l3m3n3o3p3q3t3u3z4r4z6]6c6h6v6w7Q7R7y8g8k8t8z8{9q:R:Y:k<XS(j#p'eS(|#{$`S+[%o.wS.Z(i(kQ.z)^Q0k+]R3P.['OkOPWXYZstuvw!Z!`!g!o#S#W#Z#d#o#u#y#|$P$Q$R$S$T$U$V$W$X$Y$Z$]$b$f$n%k%q&O&g&j&k&n&p&q&s&w'P'T'^'n(O(Q(W(_(s(w({)o)z+R+V+a,h,k,p,|-P-a-i-w-}._.o.v/O/g0b0g0w1e1u1v1x1z1}2Q2S2c2s2y3V3a3v5_5a5k5{5|6P6Z6d6q7}8S8c8m9^9o:i:l:m:p:q:r:s:t:u:v:w:x:y:z:{:|:};R;`;b;c;e;m;n;w;x<eS#q]:jQ&p!XQ&q!YQ&s![Q&t!]R1|,nQ']!hQ+_%tQ-`'_S.](l+bQ2k-_W3T.`.a0m0oQ6_2lU6l3Q3S3WS8o6m6oS9s8q8rS:[9r9uQ:d:]R:g:eU!wQ'[-]T5b1b5d!Q_OXZ`st!V!Z#d#h%c%k&e&g&n&p&q&s(e,k,p.S1}2Q]!pQ!r'[-]1b5dT#q]:j%[{OPWXYZstuvw!Z!`!g!o#S#W#Z#d#o#u#y#|$P$Q$R$S$T$U$V$W$X$Y$Z$b$f%k%q&O&g&j&k&n&p&q&s&w'P'^'n(O(Q(W(_(s(w({)z+R+V+a,h,k,p-a-i-w-}._.o.v/g0b0g0w1e1u1v1x1z1}2Q2S2s2y3V3a5a5k5{5|6P6d6q7}8S8c8mS(z#z#{S.Y(h(i!s<O$]$n'T)o,|-P/O2c3v5_6Z9^9o:i:l:m:p:q:r:s:t:u:v:w:x:y:z:{:|:};R;`;b;c;e;m;n;w;x<em!tQ!r!v!y!z'['h'i'j-]-m1b5d5fQ'p!uS(a#g1wS-k'g'sQ/l*YQ/x*eQ2w-nQ4V/mS4`/y0TQ7W4QS7c4f4hQ9P7XR9W7fQ#wbQ'o!uS(`#g1wS(b#m+QQ+S%dQ+d%uQ+j%{U-j'g'p'sQ.O(aQ/k*YQ/w*eQ/}*hQ0s+eQ1h,XS2t-k-nQ2|.WS4U/l/mS4_/x0TQ4b/|Q4d0OQ5n1iQ6g2wQ7V4QQ7Z4VS7_4`4hQ7d4gQ8U5oS9O7W7XQ9S7`Q9U7cQ9e8VQ9{9PQ9|9TQ:O9WQ:W9fQ:`9}Q<R;|Q<^<VR<_<WV!wQ'[-]%[aOPWXYZstuvw!Z!`!g!o#S#W#Z#d#o#u#y#|$P$Q$R$S$T$U$V$W$X$Y$Z$b$f%k%q&O&g&j&k&n&p&q&s&w'P'^'n(O(Q(W(_(s(w({)z+R+V+a,h,k,p-a-i-w-}._.o.v/g0b0g0w1e1u1v1x1z1}2Q2S2s2y3V3a5a5k5{5|6P6d6q7}8S8c8mS#wz!j!r;{$]$n'T)o,|-P/O2c3v5_6Z9^9o:i:l:m:p:q:r:s:t:u:v:w:x:y:z:{:|:};R;`;b;c;e;m;n;w;x<eR<R<d%[bOPWXYZstuvw!Z!`!g!o#S#W#Z#d#o#u#y#|$P$Q$R$S$T$U$V$W$X$Y$Z$b$f%k%q&O&g&j&k&n&p&q&s&w'P'^'n(O(Q(W(_(s(w({)z+R+V+a,h,k,p-a-i-w-}._.o.v/g0b0g0w1e1u1v1x1z1}2Q2S2s2y3V3a5a5k5{5|6P6d6q7}8S8c8mQ%dj!S%uy!i!u%x%y%z'R'a'b'c'g'q*e+h+i-Q-d-e-l/z0v2h2o2v4eS%{z!jQ+e%vQ,X&`W1i,Y,Z,[,]U5o1j1k1lS8V5p5qQ9f8W!r;|$]$n'T)o,|-P/O2c3v5_6Z9^9o:i:l:m:p:q:r:s:t:u:v:w:x:y:z:{:|:};R;`;b;c;e;m;n;w;x<eQ<V<cR<W<d%OeOPXYstuvw!Z!`!g!o#S#d#o#u#y#|$P$Q$R$S$T$U$V$W$X$Y$Z$b$f%k%q&O&g&j&n&p&q&s&w'P'^'n(Q(W(_(s(w({)z+R+V+a,h,k,p-a-i-w-}._.o.v/g0b0g0w1e1u1v1x1z1}2Q2S2s2y3V3a5a5k5{5|6P6d6q7}8S8c8mY#bWZ#W#Z(O!b%hm#h#i#l$y%c%f(X(c(d(e*V*Z*^+T+U+W,g,}-{.R.S.T.V/f/i2V2}3O4R6Y6kQ,f&k!p;}$]$n)o,|-P/O2c3v5_6Z9^9o:i:l:m:p:q:r:s:t:u:v:w:x:y:z:{:|:};R;`;b;c;e;m;n;w;x<eR<Q'TU'X!e%g*WR2f-W%QdOPWXYZstuvw!Z!`!g!o#S#W#Z#d#o#u#y#|$P$Q$R$S$T$U$V$W$X$Y$Z$b$f%k%q&O&g&j&n&p&q&s&w'P'^'n(O(Q(W(_(s(w({)z+R+V,h,k,p-a-i-w-}.o.v/g0b0g0w1e1u1v1x1z1}2Q2S2s2y3a5a5k5{5|6P6d7}8S8c8m!r)]$]$n'T)o,|-P/O2c3v5_6Z9^9o:i:l:m:p:q:r:s:t:u:v:w:x:y:z:{:|:};R;`;b;c;e;m;n;w;x<eQ,e&kQ0n+aQ3R._Q6p3VR8s6q!b$Vc#Y%o'}(T(o(v)X)Y)_)c+r-p-u-z-|.k.q/Y0e2q2x3`3q4r4z6c6h6v8k9q:k!P:x)[)m-R.w2^2a3e3o3p3t3z6]6w7Q7R7y8g8t8z8{:R:Y<X!f$Xc#Y%o'}(T(o(v)U)V)X)Y)_)c+r-p-u-z-|.k.q/Y0e2q2x3`3q4r4z6c6h6v8k9q:k!T:z)[)m-R.w2^2a3e3l3m3o3p3t3z6]6w7Q7R7y8g8t8z8{:R:Y<X!^$]c#Y%o'}(T(o(v)_)c+r-p-u-z-|.k.q/Y0e2q2x3`3q4r4z6c6h6v8k9q:kQ4O/dz<e)[)m-R.w2^2a3e3t3z6]6w7Q7R7y8g8t8z8{:R:Y<XQ<j<lR<k<m'OkOPWXYZstuvw!Z!`!g!o#S#W#Z#d#o#u#y#|$P$Q$R$S$T$U$V$W$X$Y$Z$]$b$f$n%k%q&O&g&j&k&n&p&q&s&w'P'T'^'n(O(Q(W(_(s(w({)o)z+R+V+a,h,k,p,|-P-a-i-w-}._.o.v/O/g0b0g0w1e1u1v1x1z1}2Q2S2c2s2y3V3a3v5_5a5k5{5|6P6Z6d6q7}8S8c8m9^9o:i:l:m:p:q:r:s:t:u:v:w:x:y:z:{:|:};R;`;b;c;e;m;n;w;x<eS$oh$pR3w.}'VgOPWXYZhstuvw!Z!`!g!o#S#W#Z#d#o#u#y#|$P$Q$R$S$T$U$V$W$X$Y$Z$]$b$f$n$p%k%q&O&g&j&k&n&p&q&s&w'P'T'^'n(O(Q(W(_(s(w({)o)z+R+V+a,h,k,p,|-P-a-i-w-}._.o.v.}/O/g0b0g0w1e1u1v1x1z1}2Q2S2c2s2y3V3a3v5_5a5k5{5|6P6Z6d6q7}8S8c8m9^9o:i:l:m:p:q:r:s:t:u:v:w:x:y:z:{:|:};R;`;b;c;e;m;n;w;x<eT$kf$qQ$ifS)f$l)jR)r$qT$jf$qT)h$l)j'VhOPWXYZhstuvw!Z!`!g!o#S#W#Z#d#o#u#y#|$P$Q$R$S$T$U$V$W$X$Y$Z$]$b$f$n$p%k%q&O&g&j&k&n&p&q&s&w'P'T'^'n(O(Q(W(_(s(w({)o)z+R+V+a,h,k,p,|-P-a-i-w-}._.o.v.}/O/g0b0g0w1e1u1v1x1z1}2Q2S2c2s2y3V3a3v5_5a5k5{5|6P6Z6d6q7}8S8c8m9^9o:i:l:m:p:q:r:s:t:u:v:w:x:y:z:{:|:};R;`;b;c;e;m;n;w;x<eT$oh$pQ$rhR)q$p%[jOPWXYZstuvw!Z!`!g!o#S#W#Z#d#o#u#y#|$P$Q$R$S$T$U$V$W$X$Y$Z$b$f%k%q&O&g&j&k&n&p&q&s&w'P'^'n(O(Q(W(_(s(w({)z+R+V+a,h,k,p-a-i-w-}._.o.v/g0b0g0w1e1u1v1x1z1}2Q2S2s2y3V3a5a5k5{5|6P6d6q7}8S8c8m!s<c$]$n'T)o,|-P/O2c3v5_6Z9^9o:i:l:m:p:q:r:s:t:u:v:w:x:y:z:{:|:};R;`;b;c;e;m;n;w;x<e#elOPXZst!Z!`!o#S#d#o#|$n%k&g&j&k&n&p&q&s&w'P'^({)o+V+a,h,k,p-a._/O/g0b1e1u1v1x1z1}2Q2S3V3v5a5k5{5|6P6q7}8S8c!O%Si#x%P%R%]%^%b*O*Q*]*s*t.l/p0W0Y0d4O4m8}<b<j<k#[(r#v$d$e$y$|)v)|*S*V*c+`+c+z+}.^/^/f/q/s1X1[1d3U4Z4c4u4w5j6n7[7e8P8p9b9t:U:^;S;U;Y;[;^;f;h;k;o;q;s;u;y<n<oQ*}%`Q/Z){o3s;P;Q;T;V;Z;];_;g;i;l;p;r;t;v;z!O$zi#x%P%R%]%^%b*O*Q*]*s*t.l/p0W0Y0d4O4m8}<b<j<kQ*_${U*h$}*W*kQ+O%aQ0O*i#[<T#v$d$e$y$|)v)|*S*V*c+`+c+z+}.^/^/f/q/s1X1[1d3U4Z4c4u4w5j6n7[7e8P8p9b9t:U:^;S;U;Y;[;^;f;h;k;o;q;s;u;y<n<on<U;P;Q;T;V;Z;];_;g;i;l;p;r;t;v;zQ<Y<fQ<Z<gQ<[<hR<]<i!O%Si#x%P%R%]%^%b*O*Q*]*s*t.l/p0W0Y0d4O4m8}<b<j<k#[(r#v$d$e$y$|)v)|*S*V*c+`+c+z+}.^/^/f/q/s1X1[1d3U4Z4c4u4w5j6n7[7e8P8p9b9t:U:^;S;U;Y;[;^;f;h;k;o;q;s;u;y<n<oo3s;P;Q;T;V;Z;];_;g;i;l;p;r;t;v;znoOXst!Z#d%k&n&p&q&s,k,p1}2QS*b$|*VQ,y&zQ,z&|R4Y/q$z%Ti#v#x$d$e$y$|%P%R%]%^%b)v)|*O*Q*S*V*]*c*s*t+`+c+z+}.^.l/^/f/p/q/s0W0Y0d1X1[1d3U4O4Z4c4m4u4w5j6n7[7e8P8p8}9b9t:U:^;P;Q;S;T;U;V;Y;Z;[;];^;_;f;g;h;i;k;l;o;p;q;r;s;t;u;v;y;z<b<j<k<n<oQ+|&XQ1Z,OQ5Z1YR7v5[V*j$}*W*kU*j$}*W*kT5c1b5dU/|*g/g5aT4g0U7}Q+d%uQ/}*hQ0s+eQ1h,XQ5n1iQ8U5oQ9e8VR:W9f!O%Pi#x%P%R%]%^%b*O*Q*]*s*t.l/p0W0Y0d4O4m8}<b<j<kr*O$w(t*P*q+P/o0[0]3^4W4q7U7g9z<S<`<aS0W*p0X#[;S#v$d$e$y$|)v)|*S*V*c+`+c+z+}.^/^/f/q/s1X1[1d3U4Z4c4u4w5j6n7[7e8P8p9b9t:U:^;S;U;Y;[;^;f;h;k;o;q;s;u;y<n<on;T;P;Q;T;V;Z;];_;g;i;l;p;r;t;v;z!^;f(p)a*X*a.b.e.i/V/[/d/t0l1W1Y3Z4X4]5Y5[6r6u7]7a7i7k9R9V:_<l<m`;g3r6x6{7P8u9v9y:hS;q.d3[T;r6z8x!O%Ri#x%P%R%]%^%b*O*Q*]*s*t.l/p0W0Y0d4O4m8}<b<j<kv*Q$w(t*R*p+P/`/o0[0]3^4W4i4q7U7g9z<S<`<aS0Y*q0Z#[;U#v$d$e$y$|)v)|*S*V*c+`+c+z+}.^/^/f/q/s1X1[1d3U4Z4c4u4w5j6n7[7e8P8p9b9t:U:^;S;U;Y;[;^;f;h;k;o;q;s;u;y<n<on;V;P;Q;T;V;Z;];_;g;i;l;p;r;t;v;z!b;h(p)a*X*a.c.d.i/V/[/d/t0l1W1Y3X3Z4X4]5Y5[6r6s6u7]7a7i7k9R9V:_<l<md;i3r6y6z7P8u8v9v9w9y:hS;s.e3]T;t6{8yrnOXst!V!Z#d%k&e&n&p&q&s,k,p1}2QQ&b!UR,h&krnOXst!V!Z#d%k&e&n&p&q&s,k,p1}2QR&b!UQ,Q&YR1V+ysnOXst!V!Z#d%k&e&n&p&q&s,k,p1}2QQ1c,VS5i1f1gU8O5g5h5lS9a8Q8RS:S9`9cQ:a:TR:f:bQ&i!VR,a&eR5u1oS%}|&SR1O+pQ&n!WR,k&oR,q&tT2O,p2QR,u&uQ,t&uR2X,uQ'u!{R-q'uSsOtQ#dXT%ns#dQ#OTR'w#OQ#RUR'y#RQ)x$vR/W)xQ#UVR'{#UQ#XWU(R#X(S-xQ(S#YR-x(TQ-U'UR2e-UQ.m(tR3_.mQ.p(vS3b.p3cR3c.qQ-]'[R2i-]Y!rQ'[-]1b5dR'f!rU#_W%f*VU(Y#_(Z-yQ(Z#`R-y(UQ-X'XR2g-Xt`OXst!V!Z#d%k&e&g&n&p&q&s,k,p1}2QS#hZ%cU#r`#h.SR.S(eQ(f#jQ.P(bW.X(f.P2z6iQ2z.QR6i2{Q)j$lR/P)jQ$phR)p$pQ$ccU)`$c-t;OQ-t:kR;O)mQ/j*YW4S/j4T7Y9QU4T/k/l/mS7Y4U4VR9Q7Z$X)}$w(p(t)a*X*a*p*q*z*{+P.d.e.g.h.i/V/[/`/b/d/o/t0[0]0l1W1Y3X3Y3Z3^3r4W4X4]4i4k4q5Y5[6r6s6t6u6z6{6}7O7P7U7]7a7g7i7k8u8v8w9R9V9v9w9x9y9z:_:h<S<`<a<l<mQ/r*aU4[/r4^7^Q4^/tR7^4]S*k$}*WR0Q*kr*P$w(t*p*q+P/o0[0]3^4W4q7U7g9z<S<`<a!^.b(p)a*X*a.d.e.i/V/[/d/t0l1W1Y3Z4X4]5Y5[6r6u7]7a7i7k9R9V:_<l<mU/a*P.b6xa6x3r6z6{7P8u9v9y:hQ0X*pQ3[.dU4j0X3[8xR8x6zv*R$w(t*p*q+P/`/o0[0]3^4W4i4q7U7g9z<S<`<a!b.c(p)a*X*a.d.e.i/V/[/d/t0l1W1Y3X3Z4X4]5Y5[6r6s6u7]7a7i7k9R9V:_<l<mU/c*R.c6ye6y3r6z6{7P8u8v9v9w9y:hQ0Z*qQ3].eU4l0Z3]8yR8y6{Q*v%VR0_*vQ4v0lR7j4vQ+X%iR0j+XQ5^1]S7x5^9_R9_7yQ,S&ZR1`,SQ5d1bR7{5dQ1n,^S5s1n8YR8Y5uQ0y+lW5P0y5R7p9ZQ5R0|Q7p5QR9Z7qQ+q%}R1P+qQ2Q,pR6T2QYrOXst#dQ&r!ZQ+Z%kQ,j&nQ,l&pQ,m&qQ,o&sQ1{,kS2O,p2QR6S1}Q%mpQ&v!_Q&y!aQ&{!bQ&}!cQ'm!uQ+Y%jQ+f%wQ+x&TQ,`&iQ,w&xW-h'g'o'p'sQ-o'kQ0P*jQ0t+gS1q,a,dQ2Y,vQ2Z,yQ2[,zQ2p-gW2r-j-k-n-pQ4x0uQ5U1SQ5X1WQ5m1hQ5w1sQ6R1|U6b2q2t2wQ6e2uQ7l4yQ7t5WQ7u5YQ7z5cQ8T5nQ8Z5vS8j6c6gQ8l6fQ9[7rQ9d8UQ9i8[Q9p8kQ:Q9]Q:V9eQ:Z9qR:c:WQ%wyQ'`!iQ'k!uU+g%x%y%zQ-O'RU-c'a'b'cS-g'g'qQ/v*eS0u+h+iQ2b-QS2n-d-eQ2u-lQ4a/zQ4y0vQ6^2hQ6a2oQ6f2vR7b4eS$xi<bR*w%WU%Vi%W<bR0^*uQ$wiS(p#v+cQ(t#xS)a$d$eQ*X$yS*a$|*VQ*p%PQ*q%RQ*z%]Q*{%^Q+P%bQ.d;SQ.e;UQ.g;YQ.h;[Q.i;^Q/V)vS/[)|/^Q/`*OQ/b*QQ/d*SQ/o*]S/t*c/fQ0[*sQ0]*th0l+`.^1d3U5j6n8P8p9b9t:U:^Q1W+zQ1Y+}Q3X;fQ3Y;hQ3Z;kQ3^.lS3r;P;QQ4W/pQ4X/qQ4]/sQ4i0WQ4k0YQ4q0dQ5Y1XQ5[1[Q6r;oQ6s;qQ6t;sQ6u;uQ6z;TQ6{;VQ6};ZQ7O;]Q7P;_Q7U4OQ7]4ZQ7a4cQ7g4mQ7i4uQ7k4wQ8u;lQ8v;gQ8w;iQ9R7[Q9V7eQ9v;pQ9w;rQ9x;tQ9y;vQ9z8}Q:_;yQ:h;zQ<S<bQ<`<jQ<a<kQ<l<nR<m<onpOXst!Z#d%k&n&p&q&s,k,p1}2QQ!fPS#fZ#oQ&x!`U'd!o5a7}Q'z#SQ(}#|Q)n$nS,d&g&jQ,i&kQ,v&wQ,{'PQ-_'^Q.s({Q/T)oS0h+V/gQ0o+aQ1y,hQ2l-aQ3S._Q3y/OQ4o0bQ5h1eQ5y1uQ5z1vQ6O1xQ6Q1zQ6V2SQ6m3VQ7S3vQ8R5kQ8_5{Q8`5|Q8b6PQ8r6qQ9c8SR9m8c#YcOPXZst!Z!`!o#d#o#|%k&g&j&k&n&p&q&s&w'P'^({+V+a,h,k,p-a._/g0b1e1u1v1x1z1}2Q2S3V5a5k5{5|6P6q7}8S8cQ#YWQ#eYQ%ouQ%pvS%rw!gS'}#W(QQ(T#ZQ(o#uQ(v#yQ)O$PQ)P$QQ)Q$RQ)R$SQ)S$TQ)T$UQ)U$VQ)V$WQ)W$XQ)X$YQ)Y$ZQ)[$]Q)_$bQ)c$fW)m$n)o/O3vQ+^%qQ+r&OS-R'T2cQ-p'nS-u(O-wQ-z(WQ-|(_Q.k(sQ.q(wQ.u:iQ.w:lQ.x:mQ.y:pQ/Y)zQ0e+RQ2^,|Q2a-PQ2q-iQ2x-}Q3`.oQ3e:qQ3f:rQ3g:sQ3h:tQ3i:uQ3j:vQ3k:wQ3l:xQ3m:yQ3n:zQ3o:{Q3p:|Q3q.vQ3t;RQ3u;`Q3z:}Q4r0gQ4z0wQ6];bQ6c2sQ6h2yQ6v3aQ6w;cQ7Q;eQ7R;mQ7y5_Q8g6ZQ8k6dQ8t;nQ8z;wQ8{;xQ9q8mQ:R9^Q:Y9oQ:k#SR<X<eR#[WR'V!el!tQ!r!v!y!z'['h'i'j-]-m1b5d5fS'R!e-TS-Q'S'ZR2h-ZR(u#xR(x#yQ!fQT-['[-]]!qQ!r'[-]1b5dQ#p]R'e:jY!uQ'[-]1b5dQ'g!rS'q!v!yS's!z5fS-l'h'iQ-n'jR2v-mT#kZ%cS#jZ%cS%im,gU(b#h#i#lS.Q(c(dQ.U(eQ0i+WQ2{.RU2|.S.T.VS6j2}3OR8n6kd#^W#W#Z%f(O(X*V+T-{/fr#gZm#h#i#l%c(c(d(e+W.R.S.T.V2}3O6kS*Y$y*^Q/m*ZQ1w,gQ2_,}Q4Q/iQ6X2VQ7X4RQ8f6YT<P'T+UV#aW%f*VU#`W%f*VS(P#W(XU(U#Z+T/fS-S'T+UT-v(O-{V'Y!e%g*WQ$lfR)t$qT)i$l)jR3x.}T*[$y*^T*d$|*VQ0m+`Q3Q.^Q5g1dQ6o3UQ8Q5jQ8q6nQ9`8PQ9r8pQ:T9bQ:]9tQ:b:UR:e:^nqOXst!Z#d%k&n&p&q&s,k,p1}2QQ&h!VR,`&etmOXst!U!V!Z#d%k&e&n&p&q&s,k,p1}2QR,g&kT%jm,gR1^,PR,_&cQ&R|R+w&SR+m%|T&l!W&oT&m!W&oT2P,p2Q",
|
28133 |
goto: "$8f)ZPPPPPP)[PP)_P)pP+Q/VPPPP6aPP6wPP<oP@cP@yP@yPPP@yPCRP@yP@yP@yPCVPC[PCyPHsPPPHwPPPPHwKzPPPLQLrPHwPHwPP! QHwPPPHwPHwP!#XHwP!&o!'t!'}P!(q!(u!(q!,SPPPPPPP!,s!'tPP!-T!.uP!2RHwHw!2W!5d!:Q!:Q!>PPPP!>XHwPPPPPPPPPP!AhP!BuPPHw!DWPHwPHwHwHwHwHwPHw!EjP!HtP!KzP!LO!LY!L^!L^P!HqP!Lb!LbP# hP# lHwPHw# r#$wCV@yP@yP@y@yP#&U@y@y#(h@y#+`@y#-l@y@y#.[#0p#0p#0u#1O#0p#1ZPP#0pP@y#1s@y#5r@y@y6aPPP#9wPPP#:b#:bP#:bP#:x#:bPP#;OP#:uP#:u#;c#:u#;}#<T#<W)_#<Z)_P#<b#<b#<bP)_P)_P)_P)_PP)_P#<h#<kP#<k)_P#<oP#<rP)_P)_P)_P)_P)_P)_)_PP#<x#=O#=Z#=a#=g#=m#=s#>R#>X#>c#>i#>s#>y#?Z#?a#@R#@e#@k#@q#AP#Af#CZ#Ci#Cp#E[#Ej#G[#Gj#Gp#Gv#G|#HW#H^#Hd#Hn#IQ#IWPPPPPPPPPPP#I^PPPPPPP#JR#MY#Nr#Ny$ RPPP$&mP$&v$)o$0Y$0]$0`$1_$1b$1i$1qP$1w$1zP$2h$2l$3d$4r$4w$5_PP$5d$5j$5n$5q$5u$5y$6u$7^$7u$7y$7|$8P$8V$8Y$8^$8bR!|RoqOXst!Z#d%l&p&r&s&u,n,s2S2VY!vQ'^-`1g5qQ%svQ%{yQ&S|Q&h!VS'U!e-WQ'd!iS'j!r!yU*h$|*X*lQ+l%|Q+y&UQ,_&bQ-^']Q-h'eQ-p'kQ0U*nQ1q,`R<m;z%SdOPWXYZstuvw!Z!`!g!o#S#W#Z#d#o#u#x#{$O$P$Q$R$S$T$U$V$W$X$_$a$e%l%s&Q&i&l&p&r&s&u&y'R'`'p(R(T(Z(b(v(x(|){*f+U+Y,k,n,s-d-l-z.Q.o.v/i0V0d0l0|1j1z1{1}2P2S2V2X2x3O3d4q5y6Z6[6_6r8i8x9SS#q];w!r)]$Z$n'V)q-P-S/Q2h3{5m6i9}:a;v;y;z;}<O<P<Q<R<S<T<U<V<W<X<Y<Z<]<`<m<p<q<s<{<|=V=W=sU*{%[<e<fQ+q&OQ,a&eQ,h&mQ0r+dQ0u+fQ1S+rQ1y,fQ3W.bQ5V0wQ5]0}Q6Q1rQ7O3[Q8U5^R9Y7Q'QkOPWXYZstuvw!Z!`!g!o#S#W#Z#d#o#u#x#{$O$P$Q$R$S$T$U$V$W$X$Z$_$a$e$n%l%s&Q&i&l&m&p&r&s&u&y'R'V'`'p(R(T(Z(b(v(x(|)q){*f+U+Y+d,k,n,s-P-S-d-l-z.Q.b.o.v/Q/i0V0d0l0|1j1z1{1}2P2S2V2X2h2x3O3[3d3{4q5m5y6Z6[6_6i6r7Q8i8x9S9}:a;v;y;z;}<O<P<Q<R<S<T<U<V<W<X<Y<Z<]<`<m<p<q<s<{<|=V=W=s!S!nQ!r!v!y!z$|'U']'^'j'k'l*h*l*n*o-W-^-`-p0U0X1g5q5s%[$ti#v$b$c$d$x${%O%Q%]%^%b)w*P*R*T*W*^*d*t*u+c+f+},Q.a.z/_/h/r/s/u0Y0[0g0h0i1^1a1i3Z4U4V4a4f4w5R5U5x6|7l7v7|8Q8f9V9e9n9t:S:f:t:};V;^<^<_<a<b<c<d<g<h<i<j<k<l<t<u<v<w<y<z<}=O=P=Q=R=S=T=U=X=Y=p=x=y=|=}Q&V|Q'S!eS'Y%h-ZQ+q&OQ,a&eQ0f+OQ1S+rQ1X+xQ1x,eQ1y,fQ5]0}Q5f1ZQ6Q1rQ6T1tQ6U1wQ8U5^Q8X5cQ8q6WQ9|8YQ:Y8nR<o*XrnOXst!V!Z#d%l&g&p&r&s&u,n,s2S2VR,c&i&z^OPXYstuvwz!Z!`!g!j!o#S#d#o#u#x#{$O$P$Q$R$S$T$U$V$W$X$Z$_$a$e$n%l%s&Q&i&l&m&p&r&s&u&y'R'`'p(T(Z(b(v(x(|)q){*f+U+Y+d,k,n,s-P-S-d-l-z.Q.b.o.v/Q/i0V0d0l0|1j1z1{1}2P2S2V2X2h2x3O3[3d3{4q5m5y6Z6[6_6i6r7Q8i8x9S9}:a;v;y;z;}<O<P<Q<R<S<T<U<V<W<X<Y<Z<]<`<m<p<q<s<{<|=V=W=r=s[#]WZ#W#Z'V(R!b%im#h#i#l$x%d%g([(f(g(h*W*[*_+W+X+Z,j-Q.O.U.V.W.Y/h/k2[3S3T4X6h6yQ%vxQ%zyS&P|&UQ&]!TQ'a!hQ'c!iQ(o#sS+k%{%|Q+o&OQ,Y&`Q,^&bS-g'd'eQ.d(pQ0{+lQ1R+rQ1T+sQ1W+wQ1l,ZS1p,_,`Q2t-hQ5[0}Q5`1QQ5e1YQ6P1qQ8T5^Q8W5bQ9x8SR:w9y!U$zi$d%O%Q%]%^%b*P*R*^*t*u.z/r0Y0[0g0h0i4V4w7|9e=p=x=y!^%xy!i!u%z%{%|'T'c'd'e'i's*g+k+l-T-g-h-o/{0O0{2m2t2{4i4j4m7s9pQ+e%vQ,O&YQ,R&ZQ,]&bQ.c(oQ1k,YU1o,^,_,`Q3].dQ5z1lS6O1p1qQ8m6P#f=t#v$b$c$x${)w*T*W*d+c+f+},Q.a/_/h/s/u1^1a1i3Z4U4a4f5R5U5x6|7l7v8Q8f9V9n9t:S:f:t:};V;^<a<c<g<i<k<t<v<y<}=P=R=T=X=|=}o=u<^<_<b<d<h<j<l<u<w<z=O=Q=S=U=YW%Ti%V*v=pS&Y!Q&gQ&Z!RQ&[!SQ+S%cR+|&W%]%Si#v$b$c$d$x${%O%Q%]%^%b)w*P*R*T*W*^*d*t*u+c+f+},Q.a.z/_/h/r/s/u0Y0[0g0h0i1^1a1i3Z4U4V4a4f4w5R5U5x6|7l7v7|8Q8f9V9e9n9t:S:f:t:};V;^<^<_<a<b<c<d<g<h<i<j<k<l<t<u<v<w<y<z<}=O=P=Q=R=S=T=U=X=Y=p=x=y=|=}T)x$u)yV*{%[<e<fW'Y!e%h*X-ZS({#y#zQ+`%qQ+v&RS.](k(lQ1b,SQ4x0cR8^5k'QkOPWXYZstuvw!Z!`!g!o#S#W#Z#d#o#u#x#{$O$P$Q$R$S$T$U$V$W$X$Z$_$a$e$n%l%s&Q&i&l&m&p&r&s&u&y'R'V'`'p(R(T(Z(b(v(x(|)q){*f+U+Y+d,k,n,s-P-S-d-l-z.Q.b.o.v/Q/i0V0d0l0|1j1z1{1}2P2S2V2X2h2x3O3[3d3{4q5m5y6Z6[6_6i6r7Q8i8x9S9}:a;v;y;z;}<O<P<Q<R<S<T<U<V<W<X<Y<Z<]<`<m<p<q<s<{<|=V=W=s$i$^c#Y#e%p%r%t(Q(W(r(w)P)Q)R)S)T)U)V)W)X)Y)[)^)`)e)o+a+u-U-s-x-}.P.n.q.u.w.x.y/]0j2c2f2v2}3c3h3i3j3k3l3m3n3o3p3q3r3s3t3w3x4P5O5Y6k6q6v7V7W7a7b8`8|9Q9[9b9c:c:y;R;x=gT#TV#U'RkOPWXYZstuvw!Z!`!g!o#S#W#Z#d#o#u#x#{$O$P$Q$R$S$T$U$V$W$X$Z$_$a$e$n%l%s&Q&i&l&m&p&r&s&u&y'R'V'`'p(R(T(Z(b(v(x(|)q){*f+U+Y+d,k,n,s-P-S-d-l-z.Q.b.o.v/Q/i0V0d0l0|1j1z1{1}2P2S2V2X2h2x3O3[3d3{4q5m5y6Z6[6_6i6r7Q8i8x9S9}:a;v;y;z;}<O<P<Q<R<S<T<U<V<W<X<Y<Z<]<`<m<p<q<s<{<|=V=W=sQ'W!eR2i-W!W!nQ!e!r!v!y!z$|'U']'^'j'k'l*X*h*l*n*o-W-^-`-p0U0X1g5q5sR1d,UnqOXst!Z#d%l&p&r&s&u,n,s2S2VQ&w!^Q't!xS(q#u<OQ+i%yQ,W&]Q,X&_Q-e'bQ-r'mS.m(v<qS0k+U<{Q0y+jQ1f,VQ2Z,uQ2],vQ2e-RQ2r-fQ2u-jS5P0l=VQ5W0zS5Z0|=WQ6j2gQ6n2sQ6s2zQ8R5XQ8}6lQ9O6oQ9R6tR:`8z$d$]c#Y#e%r%t(Q(W(r(w)P)Q)R)S)T)U)V)W)X)Y)[)^)`)e)o+a+u-U-s-x-}.P.n.q.u.x.y/]0j2c2f2v2}3c3h3i3j3k3l3m3n3o3p3q3r3s3t3w3x4P5O5Y6k6q6v7V7W7a7b8`8|9Q9[9b9c:c:y;R;x=gS(m#p'gQ(}#zS+_%p.wS.^(l(nR3U._'QkOPWXYZstuvw!Z!`!g!o#S#W#Z#d#o#u#x#{$O$P$Q$R$S$T$U$V$W$X$Z$_$a$e$n%l%s&Q&i&l&m&p&r&s&u&y'R'V'`'p(R(T(Z(b(v(x(|)q){*f+U+Y+d,k,n,s-P-S-d-l-z.Q.b.o.v/Q/i0V0d0l0|1j1z1{1}2P2S2V2X2h2x3O3[3d3{4q5m5y6Z6[6_6i6r7Q8i8x9S9}:a;v;y;z;}<O<P<Q<R<S<T<U<V<W<X<Y<Z<]<`<m<p<q<s<{<|=V=W=sS#q];wQ&r!XQ&s!YQ&u![Q&v!]R2R,qQ'_!hQ+b%vQ-c'aS.`(o+eQ2p-bW3Y.c.d0q0sQ6m2qW6z3V3X3]5TU9U6{6}7PU:e9W9X9ZS;T:d:gQ;b;UR;j;cU!wQ'^-`T5o1g5q!Q_OXZ`st!V!Z#d#h%d%l&g&i&p&r&s&u(h,n,s.V2S2V]!pQ!r'^-`1g5qT#q];w%^{OPWXYZstuvw!Z!`!g!o#S#W#Z#d#o#u#x#{$O$P$Q$R$S$T$U$V$W$X$_$a$e%l%s&Q&i&l&m&p&r&s&u&y'R'`'p(R(T(Z(b(v(x(|){*f+U+Y+d,k,n,s-d-l-z.Q.b.o.v/i0V0d0l0|1j1z1{1}2P2S2V2X2x3O3[3d4q5y6Z6[6_6r7Q8i8x9SS({#y#zS.](k(l!s=^$Z$n'V)q-P-S/Q2h3{5m6i9}:a;v;y;z;}<O<P<Q<R<S<T<U<V<W<X<Y<Z<]<`<m<p<q<s<{<|=V=W=sU$fd)],hS(n#p'gU*s%R(u3vU0e*z.i7]Q5T0rQ6{3WQ9X7OR:g9Ym!tQ!r!v!y!z'^'j'k'l-`-p1g5q5sQ'r!uS(d#g1|S-n'i'uQ/n*ZQ/{*gQ2|-qQ4]/oQ4i/}Q4j0OQ4o0WQ7h4WS7s4k4mS7w4p4rQ9g7iQ9k7oQ9p7tQ9u7yS:o9l9mS;Y:p:sS;e;Z;[S;m;f;gS;q;n;oR;t;rQ#wbQ'q!uS(c#g1|S(e#m+TQ+V%eQ+g%wQ+m%}U-m'i'r'uQ.R(dQ/m*ZQ/|*gQ0P*iQ0x+hQ1m,[S2y-n-qQ3R.ZS4[/n/oQ4e/yS4h/{0WQ4l0QQ5|1nQ6u2|Q7g4WQ7k4]U7r4i4o4rQ7u4nQ8k5}S9f7h7iQ9j7oQ9r7wQ9s7xQ:V8lQ:m9gS:n9k9mQ:v9uQ;P:WS;X:o:sS;d;Y;ZS;l;e;gS;p;m;oQ;s;qQ;u;tQ=a=[Q=l=eR=m=fV!wQ'^-`%^aOPWXYZstuvw!Z!`!g!o#S#W#Z#d#o#u#x#{$O$P$Q$R$S$T$U$V$W$X$_$a$e%l%s&Q&i&l&m&p&r&s&u&y'R'`'p(R(T(Z(b(v(x(|){*f+U+Y+d,k,n,s-d-l-z.Q.b.o.v/i0V0d0l0|1j1z1{1}2P2S2V2X2x3O3[3d4q5y6Z6[6_6r7Q8i8x9SS#wz!j!r=Z$Z$n'V)q-P-S/Q2h3{5m6i9}:a;v;y;z;}<O<P<Q<R<S<T<U<V<W<X<Y<Z<]<`<m<p<q<s<{<|=V=W=sR=a=r%^bOPWXYZstuvw!Z!`!g!o#S#W#Z#d#o#u#x#{$O$P$Q$R$S$T$U$V$W$X$_$a$e%l%s&Q&i&l&m&p&r&s&u&y'R'`'p(R(T(Z(b(v(x(|){*f+U+Y+d,k,n,s-d-l-z.Q.b.o.v/i0V0d0l0|1j1z1{1}2P2S2V2X2x3O3[3d4q5y6Z6[6_6r7Q8i8x9SQ%ej!^%wy!i!u%z%{%|'T'c'd'e'i's*g+k+l-T-g-h-o/{0O0{2m2t2{4i4j4m7s9pS%}z!jQ+h%xQ,[&bW1n,],^,_,`U5}1o1p1qS8l6O6PQ:W8m!r=[$Z$n'V)q-P-S/Q2h3{5m6i9}:a;v;y;z;}<O<P<Q<R<S<T<U<V<W<X<Y<Z<]<`<m<p<q<s<{<|=V=W=sQ=e=qR=f=r%QeOPXYstuvw!Z!`!g!o#S#d#o#u#x#{$O$P$Q$R$S$T$U$V$W$X$_$a$e%l%s&Q&i&l&p&r&s&u&y'R'`'p(T(Z(b(v(x(|){*f+U+Y+d,k,n,s-d-l-z.Q.b.o.v/i0V0d0l0|1j1z1{1}2P2S2V2X2x3O3[3d4q5y6Z6[6_6r7Q8i8x9SY#bWZ#W#Z(R!b%im#h#i#l$x%d%g([(f(g(h*W*[*_+W+X+Z,j-Q.O.U.V.W.Y/h/k2[3S3T4X6h6yQ,i&m!p=]$Z$n)q-P-S/Q2h3{5m6i9}:a;v;y;z;}<O<P<Q<R<S<T<U<V<W<X<Y<Z<]<`<m<p<q<s<{<|=V=W=sR=`'VU'Z!e%h*XR2k-Z%SdOPWXYZstuvw!Z!`!g!o#S#W#Z#d#o#u#x#{$O$P$Q$R$S$T$U$V$W$X$_$a$e%l%s&Q&i&l&p&r&s&u&y'R'`'p(R(T(Z(b(v(x(|){*f+U+Y,k,n,s-d-l-z.Q.o.v/i0V0d0l0|1j1z1{1}2P2S2V2X2x3O3d4q5y6Z6[6_6r8i8x9S!r)]$Z$n'V)q-P-S/Q2h3{5m6i9}:a;v;y;z;}<O<P<Q<R<S<T<U<V<W<X<Y<Z<]<`<m<p<q<s<{<|=V=W=sQ,h&mQ0r+dQ3W.bQ7O3[R9Y7Q!b$Tc#Y%p(Q(W(r(w)X)Y)^)e+u-s-x-}.P.n.q/]0j2v2}3c3s5O5Y6q6v7V9Q:c;x!P<U)[)o-U.w2c2f3h3q3r3w4P6k7W7a7b8`8|9[9b9c:y;R=g!f$Vc#Y%p(Q(W(r(w)U)V)X)Y)^)e+u-s-x-}.P.n.q/]0j2v2}3c3s5O5Y6q6v7V9Q:c;x!T<W)[)o-U.w2c2f3h3n3o3q3r3w4P6k7W7a7b8`8|9[9b9c:y;R=g!^$Zc#Y%p(Q(W(r(w)^)e+u-s-x-}.P.n.q/]0j2v2}3c3s5O5Y6q6v7V9Q:c;xQ4V/fz=s)[)o-U.w2c2f3h3w4P6k7W7a7b8`8|9[9b9c:y;R=gQ=x=zR=y={'QkOPWXYZstuvw!Z!`!g!o#S#W#Z#d#o#u#x#{$O$P$Q$R$S$T$U$V$W$X$Z$_$a$e$n%l%s&Q&i&l&m&p&r&s&u&y'R'V'`'p(R(T(Z(b(v(x(|)q){*f+U+Y+d,k,n,s-P-S-d-l-z.Q.b.o.v/Q/i0V0d0l0|1j1z1{1}2P2S2V2X2h2x3O3[3d3{4q5m5y6Z6[6_6i6r7Q8i8x9S9}:a;v;y;z;}<O<P<Q<R<S<T<U<V<W<X<Y<Z<]<`<m<p<q<s<{<|=V=W=sS$oh$pR3|/P'XgOPWXYZhstuvw!Z!`!g!o#S#W#Z#d#o#u#x#{$O$P$Q$R$S$T$U$V$W$X$Z$_$a$e$n$p%l%s&Q&i&l&m&p&r&s&u&y'R'V'`'p(R(T(Z(b(v(x(|)q){*f+U+Y+d,k,n,s-P-S-d-l-z.Q.b.o.v/P/Q/i0V0d0l0|1j1z1{1}2P2S2V2X2h2x3O3[3d3{4q5m5y6Z6[6_6i6r7Q8i8x9S9}:a;v;y;z;}<O<P<Q<R<S<T<U<V<W<X<Y<Z<]<`<m<p<q<s<{<|=V=W=sT$kf$qQ$ifS)h$l)lR)t$qT$jf$qT)j$l)l'XhOPWXYZhstuvw!Z!`!g!o#S#W#Z#d#o#u#x#{$O$P$Q$R$S$T$U$V$W$X$Z$_$a$e$n$p%l%s&Q&i&l&m&p&r&s&u&y'R'V'`'p(R(T(Z(b(v(x(|)q){*f+U+Y+d,k,n,s-P-S-d-l-z.Q.b.o.v/P/Q/i0V0d0l0|1j1z1{1}2P2S2V2X2h2x3O3[3d3{4q5m5y6Z6[6_6i6r7Q8i8x9S9}:a;v;y;z;}<O<P<Q<R<S<T<U<V<W<X<Y<Z<]<`<m<p<q<s<{<|=V=W=sT$oh$pQ$rhR)s$p%^jOPWXYZstuvw!Z!`!g!o#S#W#Z#d#o#u#x#{$O$P$Q$R$S$T$U$V$W$X$_$a$e%l%s&Q&i&l&m&p&r&s&u&y'R'`'p(R(T(Z(b(v(x(|){*f+U+Y+d,k,n,s-d-l-z.Q.b.o.v/i0V0d0l0|1j1z1{1}2P2S2V2X2x3O3[3d4q5y6Z6[6_6r7Q8i8x9S!s=q$Z$n'V)q-P-S/Q2h3{5m6i9}:a;v;y;z;}<O<P<Q<R<S<T<U<V<W<X<Y<Z<]<`<m<p<q<s<{<|=V=W=s#glOPXZst!Z!`!o#S#d#o#{$n%l&i&l&m&p&r&s&u&y'R'`(|)q*f+Y+d,k,n,s-d.b/Q/i0V0d1j1z1{1}2P2S2V2X3[3{4q5y6Z6[6_7Q8i8x!U%Ri$d%O%Q%]%^%b*P*R*^*t*u.z/r0Y0[0g0h0i4V4w7|9e=p=x=y#f(u#v$b$c$x${)w*T*W*d+c+f+},Q.a/_/h/s/u1^1a1i3Z4U4a4f5R5U5x6|7l7v8Q8f9V9n9t:S:f:t:};V;^<a<c<g<i<k<t<v<y<}=P=R=T=X=|=}Q+P%`Q/^)|o3v<^<_<b<d<h<j<l<u<w<z=O=Q=S=U=Y!U$yi$d%O%Q%]%^%b*P*R*^*t*u.z/r0Y0[0g0h0i4V4w7|9e=p=x=yQ*`$zU*i$|*X*lQ+Q%aQ0Q*j#f=c#v$b$c$x${)w*T*W*d+c+f+},Q.a/_/h/s/u1^1a1i3Z4U4a4f5R5U5x6|7l7v8Q8f9V9n9t:S:f:t:};V;^<a<c<g<i<k<t<v<y<}=P=R=T=X=|=}n=d<^<_<b<d<h<j<l<u<w<z=O=Q=S=U=YQ=h=tQ=i=uQ=j=vR=k=w!U%Ri$d%O%Q%]%^%b*P*R*^*t*u.z/r0Y0[0g0h0i4V4w7|9e=p=x=y#f(u#v$b$c$x${)w*T*W*d+c+f+},Q.a/_/h/s/u1^1a1i3Z4U4a4f5R5U5x6|7l7v8Q8f9V9n9t:S:f:t:};V;^<a<c<g<i<k<t<v<y<}=P=R=T=X=|=}o3v<^<_<b<d<h<j<l<u<w<z=O=Q=S=U=YnoOXst!Z#d%l&p&r&s&u,n,s2S2VS*c${*WQ,|&|Q,}'OR4`/s%[%Si#v$b$c$d$x${%O%Q%]%^%b)w*P*R*T*W*^*d*t*u+c+f+},Q.a.z/_/h/r/s/u0Y0[0g0h0i1^1a1i3Z4U4V4a4f4w5R5U5x6|7l7v7|8Q8f9V9e9n9t:S:f:t:};V;^<^<_<a<b<c<d<g<h<i<j<k<l<t<u<v<w<y<z<}=O=P=Q=R=S=T=U=X=Y=p=x=y=|=}Q,P&ZQ1`,RQ5i1_R8]5jV*k$|*X*lU*k$|*X*lT5p1g5qS/y*f/iQ4n0VT7x4q:PQ+g%wQ0P*iQ0x+hQ1m,[Q5|1nQ8k5}Q:V8lR;P:W!U%Oi$d%O%Q%]%^%b*P*R*^*t*u.z/r0Y0[0g0h0i4V4w7|9e=p=x=yx*P$v)c*Q*r+R/q0^0_3y4^4{4|4}7f7z9v:l=b=n=oS0Y*q0Z#f<a#v$b$c$x${)w*T*W*d+c+f+},Q.a/_/h/s/u1^1a1i3Z4U4a4f5R5U5x6|7l7v8Q8f9V9n9t:S:f:t:};V;^<a<c<g<i<k<t<v<y<}=P=R=T=X=|=}n<b<^<_<b<d<h<j<l<u<w<z=O=Q=S=U=Y!d<t(s)a*Y*b.e.h.l/Y/f/v0p1]3`4S4_4c5h7R7U7m7p7}8P9i9q9w:q:u;W;];h=z={`<u3u7X7[7`9]:h:k;kS=P.g3aT=Q7Z9`!U%Qi$d%O%Q%]%^%b*P*R*^*t*u.z/r0Y0[0g0h0i4V4w7|9e=p=x=y|*R$v)c*S*q+R/b/q0^0_3y4^4s4{4|4}7f7z9v:l=b=n=oS0[*r0]#f<c#v$b$c$x${)w*T*W*d+c+f+},Q.a/_/h/s/u1^1a1i3Z4U4a4f5R5U5x6|7l7v8Q8f9V9n9t:S:f:t:};V;^<a<c<g<i<k<t<v<y<}=P=R=T=X=|=}n<d<^<_<b<d<h<j<l<u<w<z=O=Q=S=U=Y!h<v(s)a*Y*b.f.g.l/Y/f/v0p1]3^3`4S4_4c5h7R7S7U7m7p7}8P9i9q9w:q:u;W;];h=z={d<w3u7Y7Z7`9]9^:h:i:k;kS=R.h3bT=S7[9arnOXst!V!Z#d%l&g&p&r&s&u,n,s2S2VQ&d!UR,k&mrnOXst!V!Z#d%l&g&p&r&s&u,n,s2S2VR&d!UQ,T&[R1[+|snOXst!V!Z#d%l&g&p&r&s&u,n,s2S2VQ1h,YS5w1k1lU8e5u5v5zS:R8g8hS:{:Q:TQ;_:|R;i;`Q&k!VR,d&gR6T1tR:Y8nS&P|&UR1T+sQ&p!WR,n&qR,t&vT2T,s2VR,x&wQ,w&wR2^,xQ'w!{R-t'wSsOtQ#dXT%os#dQ#OTR'y#OQ#RUR'{#RQ)y$uR/Z)yQ#UVR(O#UQ#XWU(U#X(V-{Q(V#YR-{(WQ-X'WR2j-XQ.p(wS3e.p3fR3f.qQ-`'^R2n-`Y!rQ'^-`1g5qR'h!rQ.{)cR3z.{U#_W%g*WU(]#_(^-|Q(^#`R-|(XQ-['ZR2l-[t`OXst!V!Z#d%l&g&i&p&r&s&u,n,s2S2VS#hZ%dU#r`#h.VR.V(hQ(i#jQ.S(eW.[(i.S3P6wQ3P.TR6w3QQ)l$lR/R)lQ$phR)r$pQ$`cU)_$`-w<[Q-w;xR<[)oQ/l*ZW4Y/l4Z7j9hU4Z/m/n/oS7j4[4]R9h7k$e*O$v(s)a)c*Y*b*q*r*|*}+R.g.h.j.k.l/Y/b/d/f/q/v0^0_0p1]3^3_3`3u3y4S4^4_4c4s4u4{4|4}5h7R7S7T7U7Z7[7^7_7`7f7m7p7z7}8P9]9^9_9i9q9v9w:h:i:j:k:l:q:u;W;];h;k=b=n=o=z={Q/t*bU4b/t4d7nQ4d/vR7n4cS*l$|*XR0S*lx*Q$v)c*q*r+R/q0^0_3y4^4{4|4}7f7z9v:l=b=n=o!d.e(s)a*Y*b.g.h.l/Y/f/v0p1]3`4S4_4c5h7R7U7m7p7}8P9i9q9w:q:u;W;];h=z={U/c*Q.e7Xa7X3u7Z7[7`9]:h:k;kQ0Z*qQ3a.gU4t0Z3a9`R9`7Z|*S$v)c*q*r+R/b/q0^0_3y4^4s4{4|4}7f7z9v:l=b=n=o!h.f(s)a*Y*b.g.h.l/Y/f/v0p1]3^3`4S4_4c5h7R7S7U7m7p7}8P9i9q9w:q:u;W;];h=z={U/e*S.f7Ye7Y3u7Z7[7`9]9^:h:i:k;kQ0]*rQ3b.hU4v0]3b9aR9a7[Q*w%UR0a*wQ5S0pR8O5SQ+[%jR0o+[Q5l1bS8_5l:OR:O8`Q,V&]R1e,VQ5q1gR8b5qQ1s,aS6R1s8oR8o6TQ1O+oW5_1O5a8V9zQ5a1RQ8V5`R9z8WQ+t&PR1U+tQ2V,sR6c2VYrOXst#dQ&t!ZQ+^%lQ,m&pQ,o&rQ,p&sQ,r&uQ2Q,nS2T,s2VR6b2SQ%npQ&x!_Q&{!aQ&}!bQ'P!cQ'o!uQ+]%kQ+i%yQ+{&VQ,c&kQ,z&zW-k'i'q'r'uQ-r'mQ0R*kQ0y+jS1v,d,gQ2_,yQ2`,|Q2a,}Q2u-jW2w-m-n-q-sQ5W0zQ5d1XQ5g1]Q5{1mQ6V1xQ6a2RU6p2v2y2|Q6s2zQ8R5XQ8Z5fQ8[5hQ8a5pQ8j5|Q8p6US9P6q6uQ9R6tQ9{8XQ:U8kQ:Z8qQ:b9QQ:x9|Q;O:VQ;S:cR;a;PQ%yyQ'b!iQ'm!uU+j%z%{%|Q-R'TU-f'c'd'eS-j'i'sQ/z*gS0z+k+lQ2g-TS2s-g-hQ2z-oS4g/{0OQ5X0{Q6l2mQ6o2tQ6t2{U7q4i4j4mQ9o7sR:r9pS$wi=pR*x%VU%Ui%V=pR0`*vQ$viS(s#v+fS)a$b$cQ)c$dQ*Y$xS*b${*WQ*q%OQ*r%QQ*|%]Q*}%^Q+R%bQ.g<aQ.h<cQ.j<gQ.k<iQ.l<kQ/Y)wQ/b*PQ/d*RQ/f*TQ/q*^S/v*d/hQ0^*tQ0_*ul0p+c,Q.a1a1i3Z5x6|8f9V:S:f:};VQ1]+}Q3^<tQ3_<vQ3`<yS3u<^<_Q3y.zS4S/_4UQ4^/rQ4_/sQ4c/uQ4s0YQ4u0[Q4{0gQ4|0hQ4}0iQ5h1^Q7R<}Q7S=PQ7T=RQ7U=TQ7Z<bQ7[<dQ7^<hQ7_<jQ7`<lQ7f4VQ7m4aQ7p4fQ7z4wQ7}5RQ8P5UQ9]<zQ9^<uQ9_<wQ9i7lQ9q7vQ9v7|Q9w8QQ:h=OQ:i=QQ:j=SQ:k=UQ:l9eQ:q9nQ:u9tQ;W=XQ;]:tQ;h;^Q;k=YQ=b=pQ=n=xQ=o=yQ=z=|R={=}Q*z%[Q.i<eR7]<fnpOXst!Z#d%l&p&r&s&u,n,s2S2VQ!fPS#fZ#oQ&z!`W'f!o*f0V4qQ'}#SQ)O#{Q)p$nS,g&i&lQ,l&mQ,y&yS-O'R/iQ-b'`Q.s(|Q/V)qQ0m+YQ0s+dQ2O,kQ2q-dQ3X.bQ4O/QQ4y0dQ5v1jQ6X1zQ6Y1{Q6^1}Q6`2PQ6e2XQ7P3[Q7c3{Q8h5yQ8t6ZQ8u6[Q8w6_Q9Z7QQ:T8iR:_8x#[cOPXZst!Z!`!o#d#o#{%l&i&l&m&p&r&s&u&y'R'`(|*f+Y+d,k,n,s-d.b/i0V0d1j1z1{1}2P2S2V2X3[4q5y6Z6[6_7Q8i8xQ#YWQ#eYQ%puQ%rvS%tw!gS(Q#W(TQ(W#ZQ(r#uQ(w#xQ)P$OQ)Q$PQ)R$QQ)S$RQ)T$SQ)U$TQ)V$UQ)W$VQ)X$WQ)Y$XQ)[$ZQ)^$_Q)`$aQ)e$eW)o$n)q/Q3{Q+a%sQ+u&QS-U'V2hQ-s'pS-x(R-zQ-}(ZQ.P(bQ.n(vQ.q(xQ.u;vQ.w;yQ.x;zQ.y;}Q/]){Q0j+UQ2c-PQ2f-SQ2v-lQ2}.QQ3c.oQ3h<OQ3i<PQ3j<QQ3k<RQ3l<SQ3m<TQ3n<UQ3o<VQ3p<WQ3q<XQ3r<YQ3s.vQ3t<]Q3w<`Q3x<mQ4P<ZQ5O0lQ5Y0|Q6k<pQ6q2xQ6v3OQ7V3dQ7W<qQ7a<sQ7b<{Q8`5mQ8|6iQ9Q6rQ9[<|Q9b=VQ9c=WQ:c9SQ:y9}Q;R:aQ;x#SR=g=sR#[WR'X!el!tQ!r!v!y!z'^'j'k'l-`-p1g5q5sS'T!e-WU*g$|*X*lS-T'U']S0O*h*nQ0W*oQ2m-^Q4m0UR4r0XR(y#xQ!fQT-_'^-`]!qQ!r'^-`1g5qQ#p]R'g;wR)d$dY!uQ'^-`1g5qQ'i!rS's!v!yS'u!z5sS-o'j'kQ-q'lR2{-pT#kZ%dS#jZ%dS%jm,jU(e#h#i#lS.T(f(gQ.X(hQ0n+ZQ3Q.UU3R.V.W.YS6x3S3TR9T6yd#^W#W#Z%g(R([*W+W.O/hr#gZm#h#i#l%d(f(g(h+Z.U.V.W.Y3S3T6yS*Z$x*_Q/o*[Q1|,jQ2d-QQ4W/kQ6g2[Q7i4XQ8{6hT=_'V+XV#aW%g*WU#`W%g*WS(S#W([U(X#Z+W/hS-V'V+XT-y(R.OV'[!e%h*XQ$lfR)v$qT)k$l)lR3}/PT*]$x*_T*e${*WQ0q+cQ1_,QQ3V.aQ5j1aQ5u1iQ6}3ZQ8g5xQ9W6|Q:Q8fQ:d9VQ:|:SQ;U:fQ;`:}R;c;VnqOXst!Z#d%l&p&r&s&u,n,s2S2VQ&j!VR,c>mOXst!U!V!Z#d%l&g&p&r&s&u,n,s2S2VR,j&mT%km,jR1c,SR,b&eQ&T|R+z&UR+p&OT&n!W&qT&o!W&qT2U,s2V",
|
| 27390 |
nodeNames: "⚠ ArithOp ArithOp JSXStartTag LineComment BlockComment Script Hashbang ExportDeclaration export Star as VariableName String Escape from ; default FunctionDeclaration async function VariableDefinition > < TypeParamList TypeDefinition extends ThisType this LiteralType ArithOp Number BooleanLiteral TemplateType InterpolationEnd Interpolation InterpolationStart NullType null VoidType void TypeofType typeof MemberExpression . ?. PropertyName [ TemplateString Escape Interpolation super RegExp ] ArrayExpression Spread , } { ObjectExpression Property async get set PropertyDefinition Block : NewExpression new TypeArgList CompareOp < ) ( ArgList UnaryExpression delete LogicOp BitOp YieldExpression yield AwaitExpression await ParenthesizedExpression ClassExpression class ClassBody MethodDeclaration Decorator @ MemberExpression PrivatePropertyName CallExpression declare Privacy static abstract override PrivatePropertyDefinition PropertyDeclaration readonly accessor Optional TypeAnnotation Equals StaticBlock FunctionExpression ArrowFunction ParamList ParamList ArrayPattern ObjectPattern PatternProperty Privacy readonly Arrow MemberExpression BinaryExpression ArithOp ArithOp ArithOp ArithOp BitOp CompareOp instanceof satisfies in const CompareOp BitOp BitOp BitOp LogicOp LogicOp ConditionalExpression LogicOp LogicOp AssignmentExpression UpdateOp PostfixExpression CallExpression TaggedTemplateExpression DynamicImport import ImportMeta JSXElement JSXSelfCloseEndTag JSXSelfClosingTag JSXIdentifier JSXBuiltin JSXIdentifier JSXNamespacedName JSXMemberExpression JSXSpreadAttribute JSXAttribute JSXAttributeValue JSXEscape JSXEndTag JSXOpenTag JSXFragmentTag JSXText JSXEscape JSXStartCloseTag JSXCloseTag PrefixCast ArrowFunction TypeParamList SequenceExpression KeyofType keyof UniqueType unique ImportType InferredType infer TypeName ParenthesizedType FunctionSignature ParamList NewSignature IndexedType TupleType Label ArrayType ReadonlyType ObjectType MethodType PropertyType IndexSignature PropertyDefinition CallSignature TypePredicate is NewSignature new UnionType LogicOp IntersectionType LogicOp ConditionalType ParameterizedType ClassDeclaration abstract implements type VariableDeclaration let var using TypeAliasDeclaration InterfaceDeclaration interface EnumDeclaration enum EnumBody NamespaceDeclaration namespace module AmbientDeclaration declare GlobalDeclaration global ClassDeclaration ClassBody AmbientFunctionDeclaration ExportGroup VariableName VariableName ImportDeclaration ImportGroup ForStatement for ForSpec ForInSpec ForOfSpec of WhileStatement while WithStatement with DoStatement do IfStatement if else SwitchStatement switch SwitchBody CaseLabel case DefaultLabel TryStatement try CatchClause catch FinallyClause finally ReturnStatement return ThrowStatement throw BreakStatement break ContinueStatement continue DebuggerStatement debugger LabeledStatement ExpressionStatement SingleExpression SingleClassItem",
|
28134 |
nodeNames: "⚠ ArithOp ArithOp ?. JSXStartTag LineComment BlockComment Script Hashbang ExportDeclaration export Star as VariableName String Escape from ; default FunctionDeclaration async function VariableDefinition > < TypeParamList const TypeDefinition extends ThisType this LiteralType ArithOp Number BooleanLiteral TemplateType InterpolationEnd Interpolation InterpolationStart NullType null VoidType void TypeofType typeof MemberExpression . PropertyName [ TemplateString Escape Interpolation super RegExp ] ArrayExpression Spread , } { ObjectExpression Property async get set PropertyDefinition Block : NewTarget new NewExpression ) ( ArgList UnaryExpression delete LogicOp BitOp YieldExpression yield AwaitExpression await ParenthesizedExpression ClassExpression class ClassBody MethodDeclaration Decorator @ MemberExpression PrivatePropertyName CallExpression TypeArgList CompareOp < declare Privacy static abstract override PrivatePropertyDefinition PropertyDeclaration readonly accessor Optional TypeAnnotation Equals StaticBlock FunctionExpression ArrowFunction ParamList ParamList ArrayPattern ObjectPattern PatternProperty Privacy readonly Arrow MemberExpression BinaryExpression ArithOp ArithOp ArithOp ArithOp BitOp CompareOp instanceof satisfies in CompareOp BitOp BitOp BitOp LogicOp LogicOp ConditionalExpression LogicOp LogicOp AssignmentExpression UpdateOp PostfixExpression CallExpression InstantiationExpression TaggedTemplateExpression DynamicImport import ImportMeta JSXElement JSXSelfCloseEndTag JSXSelfClosingTag JSXIdentifier JSXBuiltin JSXIdentifier JSXNamespacedName JSXMemberExpression JSXSpreadAttribute JSXAttribute JSXAttributeValue JSXEscape JSXEndTag JSXOpenTag JSXFragmentTag JSXText JSXEscape JSXStartCloseTag JSXCloseTag PrefixCast < ArrowFunction TypeParamList SequenceExpression InstantiationExpression KeyofType keyof UniqueType unique ImportType InferredType infer TypeName ParenthesizedType FunctionSignature ParamList NewSignature IndexedType TupleType Label ArrayType ReadonlyType ObjectType MethodType PropertyType IndexSignature PropertyDefinition CallSignature TypePredicate asserts is NewSignature new UnionType LogicOp IntersectionType LogicOp ConditionalType ParameterizedType ClassDeclaration abstract implements type VariableDeclaration let var using TypeAliasDeclaration InterfaceDeclaration interface EnumDeclaration enum EnumBody NamespaceDeclaration namespace module AmbientDeclaration declare GlobalDeclaration global ClassDeclaration ClassBody AmbientFunctionDeclaration ExportGroup VariableName VariableName ImportDeclaration ImportGroup ForStatement for ForSpec ForInSpec ForOfSpec of WhileStatement while WithStatement with DoStatement do IfStatement if else SwitchStatement switch SwitchBody CaseLabel case DefaultLabel TryStatement try CatchClause catch FinallyClause finally ReturnStatement return ThrowStatement throw BreakStatement break ContinueStatement continue DebuggerStatement debugger LabeledStatement ExpressionStatement SingleExpression SingleClassItem",
|
| 27391 |
maxTerm: 372,
|
28135 |
maxTerm: 378,
|
| 27392 |
context: trackNewline,
|
28136 |
context: trackNewline,
|
| 27393 |
nodeProps: [
|
28137 |
nodeProps: [
|
| 27394 |
["isolate", -8,4,5,13,33,35,48,50,52,""],
|
28138 |
["isolate", -8,5,6,14,35,37,49,51,53,""],
|
| 27395 |
["group", -26,8,16,18,65,201,205,209,210,212,215,218,228,230,236,238,240,242,245,251,257,259,261,263,265,267,268,"Statement",-32,12,13,28,31,32,38,48,51,52,54,59,67,75,79,81,83,84,106,107,116,117,134,137,139,140,141,142,144,145,164,165,167,"Expression",-23,27,29,33,37,39,41,168,170,172,173,175,176,177,179,180,181,183,184,185,195,197,199,200,"Type",-3,87,99,105,"ClassItem"],
|
28139 |
["group", -26,9,17,19,66,206,210,214,215,217,220,223,233,235,241,243,245,247,250,256,262,264,266,268,270,272,273,"Statement",-34,13,14,30,33,34,40,49,52,53,55,60,68,70,74,78,80,82,83,108,109,118,119,135,138,140,141,142,143,144,146,147,166,168,170,"Expression",-23,29,31,35,39,41,43,172,174,176,177,179,180,181,183,184,185,187,188,189,200,202,204,205,"Type",-3,86,101,107,"ClassItem"],
|
| 27396 |
["openedBy", 22,"<",34,"InterpolationStart",53,"[",57,"{",72,"(",157,"JSXStartCloseTag"],
|
28140 |
["openedBy", 23,"<",36,"InterpolationStart",54,"[",58,"{",71,"(",159,"JSXStartCloseTag"],
|
| 27397 |
["closedBy", 23,">",36,"InterpolationEnd",47,"]",58,"}",73,")",162,"JSXEndTag"]
|
28141 |
["closedBy", -2,24,167,">",38,"InterpolationEnd",48,"]",59,"}",72,")",164,"JSXEndTag"]
|
| 27398 |
],
|
28142 |
],
|
| 27399 |
propSources: [jsHighlight],
|
28143 |
propSources: [jsHighlight],
|
| 27400 |
skippedNodes: [0,4,5,271],
|
28144 |
skippedNodes: [0,5,6,276],
|
| 27401 |
repeatNodeCount: 37,
|
28145 |
repeatNodeCount: 37,
|
| 27402 |
tokenData: "$HR(CSR!bOX%ZXY+gYZ-yZ[+g[]%Z]^.c^p%Zpq+gqr/mrs3cst:_tuEruvJSvwLkwx! Yxy!'iyz!(sz{!)}{|!,q|}!.O}!O!,q!O!P!/Y!P!Q!9j!Q!R#:O!R![#<_![!]#I_!]!^#Jk!^!_#Ku!_!`$![!`!a$$v!a!b$*T!b!c$.S!c!}Er!}#O$/^#O#P$0h#P#Q$6P#Q#R$7Z#R#SEr#S#T$8h#T#o$9r#o#p$>S#p#q$>x#q#r$@Y#r#s$Af#s$f%Z$f$g+g$g#BYEr#BY#BZ$Bp#BZ$ISEr$IS$I_$Bp$I_$I|Er$I|$I}$E{$I}$JO$E{$JO$JTEr$JT$JU$Bp$JU$KVEr$KV$KW$Bp$KW&FUEr&FU&FV$Bp&FV;'SEr;'S;=`I|<%l?HTEr?HT?HU$Bp?HUOEr(n%d_$f&j(Op(R!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z&j&hT$f&jO!^&c!_#o&c#p;'S&c;'S;=`&w<%lO&c&j&zP;=`<%l&c'|'U]$f&j(R!bOY&}YZ&cZw&}wx&cx!^&}!^!_'}!_#O&}#O#P&c#P#o&}#o#p'}#p;'S&};'S;=`(l<%lO&}!b(SU(R!bOY'}Zw'}x#O'}#P;'S'};'S;=`(f<%lO'}!b(iP;=`<%l'}'|(oP;=`<%l&}'[(y]$f&j(OpOY(rYZ&cZr(rrs&cs!^(r!^!_)r!_#O(r#O#P&c#P#o(r#o#p)r#p;'S(r;'S;=`*a<%lO(rp)wU(OpOY)rZr)rs#O)r#P;'S)r;'S;=`*Z<%lO)rp*^P;=`<%l)r'[*dP;=`<%l(r#S*nX(Op(R!bOY*gZr*grs'}sw*gwx)rx#O*g#P;'S*g;'S;=`+Z<%lO*g#S+^P;=`<%l*g(n+dP;=`<%l%Z(CS+rq$f&j(Op(R!b't(;dOX%ZXY+gYZ&cZ[+g[p%Zpq+gqr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p$f%Z$f$g+g$g#BY%Z#BY#BZ+g#BZ$IS%Z$IS$I_+g$I_$JT%Z$JT$JU+g$JU$KV%Z$KV$KW+g$KW&FU%Z&FU&FV+g&FV;'S%Z;'S;=`+a<%l?HT%Z?HT?HU+g?HUO%Z(CS.ST(P#S$f&j'u(;dO!^&c!_#o&c#p;'S&c;'S;=`&w<%lO&c(CS.n_$f&j(Op(R!b'u(;dOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z%#`/x`$f&j!o$Ip(Op(R!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_!`0z!`#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z%#S1V`#t$Id$f&j(Op(R!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_!`2X!`#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z%#S2d_#t$Id$f&j(Op(R!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z$/|3l_'}$(n$f&j(R!bOY4kYZ5qZr4krs7nsw4kwx5qx!^4k!^!_8p!_#O4k#O#P5q#P#o4k#o#p8p#p;'S4k;'S;=`:X<%lO4k(^4r_$f&j(R!bOY4kYZ5qZr4krs7nsw4kwx5qx!^4k!^!_8p!_#O4k#O#P5q#P#o4k#o#p8p#p;'S4k;'S;=`:X<%lO4k&z5vX$f&jOr5qrs6cs!^5q!^!_6y!_#o5q#o#p6y#p;'S5q;'S;=`7h<%lO5q&z6jT$a`$f&jO!^&c!_#o&c#p;'S&c;'S;=`&w<%lO&c`6|TOr6yrs7]s;'S6y;'S;=`7b<%lO6y`7bO$a``7eP;=`<%l6y&z7kP;=`<%l5q(^7w]$a`$f&j(R!bOY&}YZ&cZw&}wx&cx!^&}!^!_'}!_#O&}#O#P&c#P#o&}#o#p'}#p;'S&};'S;=`(l<%lO&}!r8uZ(R!bOY8pYZ6yZr8prs9hsw8pwx6yx#O8p#O#P6y#P;'S8p;'S;=`:R<%lO8p!r9oU$a`(R!bOY'}Zw'}x#O'}#P;'S'};'S;=`(f<%lO'}!r:UP;=`<%l8p(^:[P;=`<%l4k#%|:hh$f&j(Op(R!bOY%ZYZ&cZq%Zqr<Srs&}st%ZtuCruw%Zwx(rx!^%Z!^!_*g!_!c%Z!c!}Cr!}#O%Z#O#P&c#P#R%Z#R#SCr#S#T%Z#T#oCr#o#p*g#p$g%Z$g;'SCr;'S;=`El<%lOCr(r<__VS$f&j(Op(R!bOY<SYZ&cZr<Srs=^sw<Swx@nx!^<S!^!_Bm!_#O<S#O#P>`#P#o<S#o#pBm#p;'S<S;'S;=`Cl<%lO<S(Q=g]VS$f&j(R!bOY=^YZ&cZw=^wx>`x!^=^!^!_?q!_#O=^#O#P>`#P#o=^#o#p?q#p;'S=^;'S;=`@h<%lO=^&n>gXVS$f&jOY>`YZ&cZ!^>`!^!_?S!_#o>`#o#p?S#p;'S>`;'S;=`?k<%lO>`S?XSVSOY?SZ;'S?S;'S;=`?e<%lO?SS?hP;=`<%l?S&n?nP;=`<%l>`!f?xWVS(R!bOY?qZw?qwx?Sx#O?q#O#P?S#P;'S?q;'S;=`@b<%lO?q!f@eP;=`<%l?q(Q@kP;=`<%l=^'`@w]VS$f&j(OpOY@nYZ&cZr@nrs>`s!^@n!^!_Ap!_#O@n#O#P>`#P#o@n#o#pAp#p;'S@n;'S;=`Bg<%lO@ntAwWVS(OpOYApZrAprs?Ss#OAp#O#P?S#P;'SAp;'S;=`Ba<%lOAptBdP;=`<%lAp'`BjP;=`<%l@n#WBvYVS(Op(R!bOYBmZrBmrs?qswBmwxApx#OBm#O#P?S#P;'SBm;'S;=`Cf<%lOBm#WCiP;=`<%lBm(rCoP;=`<%l<S#%|C}i$f&j(g!L^(Op(R!bOY%ZYZ&cZr%Zrs&}st%ZtuCruw%Zwx(rx!Q%Z!Q![Cr![!^%Z!^!_*g!_!c%Z!c!}Cr!}#O%Z#O#P&c#P#R%Z#R#SCr#S#T%Z#T#oCr#o#p*g#p$g%Z$g;'SCr;'S;=`El<%lOCr#%|EoP;=`<%lCr(CSFRk$f&j(Op(R!b$Y#t'{&;d([!LYOY%ZYZ&cZr%Zrs&}st%ZtuEruw%Zwx(rx}%Z}!OGv!O!Q%Z!Q![Er![!^%Z!^!_*g!_!c%Z!c!}Er!}#O%Z#O#P&c#P#R%Z#R#SEr#S#T%Z#T#oEr#o#p*g#p$g%Z$g;'SEr;'S;=`I|<%lOEr+dHRk$f&j(Op(R!b$Y#tOY%ZYZ&cZr%Zrs&}st%ZtuGvuw%Zwx(rx}%Z}!OGv!O!Q%Z!Q![Gv![!^%Z!^!_*g!_!c%Z!c!}Gv!}#O%Z#O#P&c#P#R%Z#R#SGv#S#T%Z#T#oGv#o#p*g#p$g%Z$g;'SGv;'S;=`Iv<%lOGv+dIyP;=`<%lGv(CSJPP;=`<%lEr%#SJ_`$f&j(Op(R!b#l$IdOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_!`Ka!`#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z%#SKl_$f&j$O$Id(Op(R!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z&COLva(q&;`$f&j(Op(R!bOY%ZYZ&cZr%Zrs&}sv%ZvwM{wx(rx!^%Z!^!_*g!_!`Ka!`#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z%#SNW`$f&j#x$Id(Op(R!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_!`Ka!`#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z$/|! c_(Q$)`$f&j(OpOY!!bYZ!#hZr!!brs!#hsw!!bwx!$xx!^!!b!^!_!%z!_#O!!b#O#P!#h#P#o!!b#o#p!%z#p;'S!!b;'S;=`!'c<%lO!!b'l!!i_$f&j(OpOY!!bYZ!#hZr!!brs!#hsw!!bwx!$xx!^!!b!^!_!%z!_#O!!b#O#P!#h#P#o!!b#o#p!%z#p;'S!!b;'S;=`!'c<%lO!!b&z!#mX$f&jOw!#hwx6cx!^!#h!^!_!$Y!_#o!#h#o#p!$Y#p;'S!#h;'S;=`!$r<%lO!#h`!$]TOw!$Ywx7]x;'S!$Y;'S;=`!$l<%lO!$Y`!$oP;=`<%l!$Y&z!$uP;=`<%l!#h'l!%R]$a`$f&j(OpOY(rYZ&cZr(rrs&cs!^(r!^!_)r!_#O(r#O#P&c#P#o(r#o#p)r#p;'S(r;'S;=`*a<%lO(r!Q!&PZ(OpOY!%zYZ!$YZr!%zrs!$Ysw!%zwx!&rx#O!%z#O#P!$Y#P;'S!%z;'S;=`!']<%lO!%z!Q!&yU$a`(OpOY)rZr)rs#O)r#P;'S)r;'S;=`*Z<%lO)r!Q!'`P;=`<%l!%z'l!'fP;=`<%l!!b(*Q!'t_!k(!b$f&j(Op(R!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z!'l!)O_!jM|$f&j(Op(R!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z'+h!*[b$f&j(Op(R!b'|#)d#m$IdOY%ZYZ&cZr%Zrs&}sw%Zwx(rxz%Zz{!+d{!^%Z!^!_*g!_!`Ka!`#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z%#S!+o`$f&j(Op(R!b#j$IdOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_!`Ka!`#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z&-O!,|`$f&j(Op(R!bn&%`OY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_!`Ka!`#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z&C[!.Z_!Y&;l$f&j(Op(R!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z(CS!/ec$f&j(Op(R!b|'<nOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!O%Z!O!P!0p!P!Q%Z!Q![!3Y![!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z!'d!0ya$f&j(Op(R!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!O%Z!O!P!2O!P!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z!'d!2Z_!XMt$f&j(Op(R!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z$/l!3eg$f&j(Op(R!bo$'|OY%ZYZ&cZr%Zrs&}sw%Zwx(rx!Q%Z!Q![!3Y![!^%Z!^!_*g!_!g%Z!g!h!4|!h#O%Z#O#P&c#P#R%Z#R#S!3Y#S#X%Z#X#Y!4|#Y#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z$/l!5Vg$f&j(Op(R!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx{%Z{|!6n|}%Z}!O!6n!O!Q%Z!Q![!8S![!^%Z!^!_*g!_#O%Z#O#P&c#P#R%Z#R#S!8S#S#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z$/l!6wc$f&j(Op(R!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!Q%Z!Q![!8S![!^%Z!^!_*g!_#O%Z#O#P&c#P#R%Z#R#S!8S#S#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z$/l!8_c$f&j(Op(R!bo$'|OY%ZYZ&cZr%Zrs&}sw%Zwx(rx!Q%Z!Q![!8S![!^%Z!^!_*g!_#O%Z#O#P&c#P#R%Z#R#S!8S#S#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z(CS!9uf$f&j(Op(R!b#k$IdOY!;ZYZ&cZr!;Zrs!<nsw!;Zwx!Lcxz!;Zz{#-}{!P!;Z!P!Q#/d!Q!^!;Z!^!_#(i!_!`#7S!`!a#8i!a!}!;Z!}#O#,f#O#P!Dy#P#o!;Z#o#p#(i#p;'S!;Z;'S;=`#-w<%lO!;Z(r!;fb$f&j(Op(R!b!USOY!;ZYZ&cZr!;Zrs!<nsw!;Zwx!Lcx!P!;Z!P!Q#&`!Q!^!;Z!^!_#(i!_!}!;Z!}#O#,f#O#P!Dy#P#o!;Z#o#p#(i#p;'S!;Z;'S;=`#-w<%lO!;Z(Q!<w`$f&j(R!b!USOY!<nYZ&cZw!<nwx!=yx!P!<n!P!Q!Eq!Q!^!<n!^!_!Gr!_!}!<n!}#O!KS#O#P!Dy#P#o!<n#o#p!Gr#p;'S!<n;'S;=`!L]<%lO!<n&n!>Q^$f&j!USOY!=yYZ&cZ!P!=y!P!Q!>|!Q!^!=y!^!_!@c!_!}!=y!}#O!CW#O#P!Dy#P#o!=y#o#p!@c#p;'S!=y;'S;=`!Ek<%lO!=y&n!?Td$f&j!USO!^&c!_#W&c#W#X!>|#X#Z&c#Z#[!>|#[#]&c#]#^!>|#^#a&c#a#b!>|#b#g&c#g#h!>|#h#i&c#i#j!>|#j#k!>|#k#m&c#m#n!>|#n#o&c#p;'S&c;'S;=`&w<%lO&cS!@hX!USOY!@cZ!P!@c!P!Q!AT!Q!}!@c!}#O!Ar#O#P!Bq#P;'S!@c;'S;=`!CQ<%lO!@cS!AYW!US#W#X!AT#Z#[!AT#]#^!AT#a#b!AT#g#h!AT#i#j!AT#j#k!AT#m#n!ATS!AuVOY!ArZ#O!Ar#O#P!B[#P#Q!@c#Q;'S!Ar;'S;=`!Bk<%lO!ArS!B_SOY!ArZ;'S!Ar;'S;=`!Bk<%lO!ArS!BnP;=`<%l!ArS!BtSOY!@cZ;'S!@c;'S;=`!CQ<%lO!@cS!CTP;=`<%l!@c&n!C][$f&jOY!CWYZ&cZ!^!CW!^!_!Ar!_#O!CW#O#P!DR#P#Q!=y#Q#o!CW#o#p!Ar#p;'S!CW;'S;=`!Ds<%lO!CW&n!DWX$f&jOY!CWYZ&cZ!^!CW!^!_!Ar!_#o!CW#o#p!Ar#p;'S!CW;'S;=`!Ds<%lO!CW&n!DvP;=`<%l!CW&n!EOX$f&jOY!=yYZ&cZ!^!=y!^!_!@c!_#o!=y#o#p!@c#p;'S!=y;'S;=`!Ek<%lO!=y&n!EnP;=`<%l!=y(Q!Ezl$f&j(R!b!USOY&}YZ&cZw&}wx&cx!^&}!^!_'}!_#O&}#O#P&c#P#W&}#W#X!Eq#X#Z&}#Z#[!Eq#[#]&}#]#^!Eq#^#a&}#a#b!Eq#b#g&}#g#h!Eq#h#i&}#i#j!Eq#j#k!Eq#k#m&}#m#n!Eq#n#o&}#o#p'}#p;'S&};'S;=`(l<%lO&}!f!GyZ(R!b!USOY!GrZw!Grwx!@cx!P!Gr!P!Q!Hl!Q!}!Gr!}#O!JU#O#P!Bq#P;'S!Gr;'S;=`!J|<%lO!Gr!f!Hse(R!b!USOY'}Zw'}x#O'}#P#W'}#W#X!Hl#X#Z'}#Z#[!Hl#[#]'}#]#^!Hl#^#a'}#a#b!Hl#b#g'}#g#h!Hl#h#i'}#i#j!Hl#j#k!Hl#k#m'}#m#n!Hl#n;'S'};'S;=`(f<%lO'}!f!JZX(R!bOY!JUZw!JUwx!Arx#O!JU#O#P!B[#P#Q!Gr#Q;'S!JU;'S;=`!Jv<%lO!JU!f!JyP;=`<%l!JU!f!KPP;=`<%l!Gr(Q!KZ^$f&j(R!bOY!KSYZ&cZw!KSwx!CWx!^!KS!^!_!JU!_#O!KS#O#P!DR#P#Q!<n#Q#o!KS#o#p!JU#p;'S!KS;'S;=`!LV<%lO!KS(Q!LYP;=`<%l!KS(Q!L`P;=`<%l!<n'`!Ll`$f&j(Op!USOY!LcYZ&cZr!Lcrs!=ys!P!Lc!P!Q!Mn!Q!^!Lc!^!_# o!_!}!Lc!}#O#%P#O#P!Dy#P#o!Lc#o#p# o#p;'S!Lc;'S;=`#&Y<%lO!Lc'`!Mwl$f&j(Op!USOY(rYZ&cZr(rrs&cs!^(r!^!_)r!_#O(r#O#P&c#P#W(r#W#X!Mn#X#Z(r#Z#[!Mn#[#](r#]#^!Mn#^#a(r#a#b!Mn#b#g(r#g#h!Mn#h#i(r#i#j!Mn#j#k!Mn#k#m(r#m#n!Mn#n#o(r#o#p)r#p;'S(r;'S;=`*a<%lO(rt# vZ(Op!USOY# oZr# ors!@cs!P# o!P!Q#!i!Q!}# o!}#O#$R#O#P!Bq#P;'S# o;'S;=`#$y<%lO# ot#!pe(Op!USOY)rZr)rs#O)r#P#W)r#W#X#!i#X#Z)r#Z#[#!i#[#])r#]#^#!i#^#a)r#a#b#!i#b#g)r#g#h#!i#h#i)r#i#j#!i#j#k#!i#k#m)r#m#n#!i#n;'S)r;'S;=`*Z<%lO)rt#$WX(OpOY#$RZr#$Rrs!Ars#O#$R#O#P!B[#P#Q# o#Q;'S#$R;'S;=`#$s<%lO#$Rt#$vP;=`<%l#$Rt#$|P;=`<%l# o'`#%W^$f&j(OpOY#%PYZ&cZr#%Prs!CWs!^#%P!^!_#$R!_#O#%P#O#P!DR#P#Q!Lc#Q#o#%P#o#p#$R#p;'S#%P;'S;=`#&S<%lO#%P'`#&VP;=`<%l#%P'`#&]P;=`<%l!Lc(r#&kn$f&j(Op(R!b!USOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#W%Z#W#X#&`#X#Z%Z#Z#[#&`#[#]%Z#]#^#&`#^#a%Z#a#b#&`#b#g%Z#g#h#&`#h#i%Z#i#j#&`#j#k#&`#k#m%Z#m#n#&`#n#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z#W#(r](Op(R!b!USOY#(iZr#(irs!Grsw#(iwx# ox!P#(i!P!Q#)k!Q!}#(i!}#O#+`#O#P!Bq#P;'S#(i;'S;=`#,`<%lO#(i#W#)th(Op(R!b!USOY*gZr*grs'}sw*gwx)rx#O*g#P#W*g#W#X#)k#X#Z*g#Z#[#)k#[#]*g#]#^#)k#^#a*g#a#b#)k#b#g*g#g#h#)k#h#i*g#i#j#)k#j#k#)k#k#m*g#m#n#)k#n;'S*g;'S;=`+Z<%lO*g#W#+gZ(Op(R!bOY#+`Zr#+`rs!JUsw#+`wx#$Rx#O#+`#O#P!B[#P#Q#(i#Q;'S#+`;'S;=`#,Y<%lO#+`#W#,]P;=`<%l#+`#W#,cP;=`<%l#(i(r#,o`$f&j(Op(R!bOY#,fYZ&cZr#,frs!KSsw#,fwx#%Px!^#,f!^!_#+`!_#O#,f#O#P!DR#P#Q!;Z#Q#o#,f#o#p#+`#p;'S#,f;'S;=`#-q<%lO#,f(r#-tP;=`<%l#,f(r#-zP;=`<%l!;Z(CS#.[b$f&j(Op(R!b'v(;d!USOY!;ZYZ&cZr!;Zrs!<nsw!;Zwx!Lcx!P!;Z!P!Q#&`!Q!^!;Z!^!_#(i!_!}!;Z!}#O#,f#O#P!Dy#P#o!;Z#o#p#(i#p;'S!;Z;'S;=`#-w<%lO!;Z(CS#/o_$f&j(Op(R!bS(;dOY#/dYZ&cZr#/drs#0nsw#/dwx#4Ox!^#/d!^!_#5}!_#O#/d#O#P#1p#P#o#/d#o#p#5}#p;'S#/d;'S;=`#6|<%lO#/d(Bb#0w]$f&j(R!bS(;dOY#0nYZ&cZw#0nwx#1px!^#0n!^!_#3R!_#O#0n#O#P#1p#P#o#0n#o#p#3R#p;'S#0n;'S;=`#3x<%lO#0n(AO#1wX$f&jS(;dOY#1pYZ&cZ!^#1p!^!_#2d!_#o#1p#o#p#2d#p;'S#1p;'S;=`#2{<%lO#1p(;d#2iSS(;dOY#2dZ;'S#2d;'S;=`#2u<%lO#2d(;d#2xP;=`<%l#2d(AO#3OP;=`<%l#1p(<v#3YW(R!bS(;dOY#3RZw#3Rwx#2dx#O#3R#O#P#2d#P;'S#3R;'S;=`#3r<%lO#3R(<v#3uP;=`<%l#3R(Bb#3{P;=`<%l#0n(Ap#4X]$f&j(OpS(;dOY#4OYZ&cZr#4Ors#1ps!^#4O!^!_#5Q!_#O#4O#O#P#1p#P#o#4O#o#p#5Q#p;'S#4O;'S;=`#5w<%lO#4O(<U#5XW(OpS(;dOY#5QZr#5Qrs#2ds#O#5Q#O#P#2d#P;'S#5Q;'S;=`#5q<%lO#5Q(<U#5tP;=`<%l#5Q(Ap#5zP;=`<%l#4O(=h#6WY(Op(R!bS(;dOY#5}Zr#5}rs#3Rsw#5}wx#5Qx#O#5}#O#P#2d#P;'S#5};'S;=`#6v<%lO#5}(=h#6yP;=`<%l#5}(CS#7PP;=`<%l#/d%#W#7ab$f&j$O$Id(Op(R!b!USOY!;ZYZ&cZr!;Zrs!<nsw!;Zwx!Lcx!P!;Z!P!Q#&`!Q!^!;Z!^!_#(i!_!}!;Z!}#O#,f#O#P!Dy#P#o!;Z#o#p#(i#p;'S!;Z;'S;=`#-w<%lO!;Z+h#8vb$W#t$f&j(Op(R!b!USOY!;ZYZ&cZr!;Zrs!<nsw!;Zwx!Lcx!P!;Z!P!Q#&`!Q!^!;Z!^!_#(i!_!}!;Z!}#O#,f#O#P!Dy#P#o!;Z#o#p#(i#p;'S!;Z;'S;=`#-w<%lO!;Z$/l#:Zp$f&j(Op(R!bo$'|OY%ZYZ&cZr%Zrs&}sw%Zwx(rx!O%Z!O!P!3Y!P!Q%Z!Q![#<_![!^%Z!^!_*g!_!g%Z!g!h!4|!h#O%Z#O#P&c#P#R%Z#R#S#<_#S#U%Z#U#V#?i#V#X%Z#X#Y!4|#Y#b%Z#b#c#>_#c#d#Bq#d#l%Z#l#m#Es#m#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z$/l#<jk$f&j(Op(R!bo$'|OY%ZYZ&cZr%Zrs&}sw%Zwx(rx!O%Z!O!P!3Y!P!Q%Z!Q![#<_![!^%Z!^!_*g!_!g%Z!g!h!4|!h#O%Z#O#P&c#P#R%Z#R#S#<_#S#X%Z#X#Y!4|#Y#b%Z#b#c#>_#c#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z$/l#>j_$f&j(Op(R!bo$'|OY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z$/l#?rd$f&j(Op(R!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!Q%Z!Q!R#AQ!R!S#AQ!S!^%Z!^!_*g!_#O%Z#O#P&c#P#R%Z#R#S#AQ#S#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z$/l#A]f$f&j(Op(R!bo$'|OY%ZYZ&cZr%Zrs&}sw%Zwx(rx!Q%Z!Q!R#AQ!R!S#AQ!S!^%Z!^!_*g!_#O%Z#O#P&c#P#R%Z#R#S#AQ#S#b%Z#b#c#>_#c#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z$/l#Bzc$f&j(Op(R!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!Q%Z!Q!Y#DV!Y!^%Z!^!_*g!_#O%Z#O#P&c#P#R%Z#R#S#DV#S#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z$/l#Dbe$f&j(Op(R!bo$'|OY%ZYZ&cZr%Zrs&}sw%Zwx(rx!Q%Z!Q!Y#DV!Y!^%Z!^!_*g!_#O%Z#O#P&c#P#R%Z#R#S#DV#S#b%Z#b#c#>_#c#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z$/l#E|g$f&j(Op(R!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!Q%Z!Q![#Ge![!^%Z!^!_*g!_!c%Z!c!i#Ge!i#O%Z#O#P&c#P#R%Z#R#S#Ge#S#T%Z#T#Z#Ge#Z#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z$/l#Gpi$f&j(Op(R!bo$'|OY%ZYZ&cZr%Zrs&}sw%Zwx(rx!Q%Z!Q![#Ge![!^%Z!^!_*g!_!c%Z!c!i#Ge!i#O%Z#O#P&c#P#R%Z#R#S#Ge#S#T%Z#T#Z#Ge#Z#b%Z#b#c#>_#c#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z%Gh#Il_!d$b$f&j#|%<f(Op(R!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z)[#Jv_`l$f&j(Op(R!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z(@^#LS^g!*v!h'.r(Op(R!b(uSOY*gZr*grs'}sw*gwx)rx!P*g!P!Q#MO!Q!^*g!^!_#Mt!_!`$ f!`#O*g#P;'S*g;'S;=`+Z<%lO*g(n#MXX$h&j(Op(R!bOY*gZr*grs'}sw*gwx)rx#O*g#P;'S*g;'S;=`+Z<%lO*g$Kh#M}Z#n$Id(Op(R!bOY*gZr*grs'}sw*gwx)rx!_*g!_!`#Np!`#O*g#P;'S*g;'S;=`+Z<%lO*g$Kh#NyX$O$Id(Op(R!bOY*gZr*grs'}sw*gwx)rx#O*g#P;'S*g;'S;=`+Z<%lO*g$Kh$ oX#o$Id(Op(R!bOY*gZr*grs'}sw*gwx)rx#O*g#P;'S*g;'S;=`+Z<%lO*g%Gh$!ga#[%?x$f&j(Op(R!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_!`0z!`!a$#l!a#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z%#W$#w_#g$Ih$f&j(Op(R!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z%Gh$%VafBf#o$Id$c#|$f&j(Op(R!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_!`$&[!`!a$'f!a#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z%#S$&g_#o$Id$f&j(Op(R!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z%#S$'qa#n$Id$f&j(Op(R!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_!`Ka!`!a$(v!a#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z%#S$)R`#n$Id$f&j(Op(R!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_!`Ka!`#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z'+h$*`c(i$Ip$f&j(Op(R!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!O%Z!O!P$+k!P!^%Z!^!_*g!_!a%Z!a!b$,u!b#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z'+`$+v_}'#p$f&j(Op(R!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z%#S$-Q`$f&j#y$Id(Op(R!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_!`Ka!`#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z#&^$.__!{!Ln$f&j(Op(R!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z(@^$/i_!P(8n$f&j(Op(R!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z(n$0mZ$f&jO!^$1`!^!_$1v!_#i$1`#i#j$1{#j#l$1`#l#m$3n#m#o$1`#o#p$1v#p;'S$1`;'S;=`$5y<%lO$1`(n$1gT^#S$f&jO!^&c!_#o&c#p;'S&c;'S;=`&w<%lO&c#S$1{O^#S(n$2Q[$f&jO!Q&c!Q![$2v![!^&c!_!c&c!c!i$2v!i#T&c#T#Z$2v#Z#o&c#o#p$5^#p;'S&c;'S;=`&w<%lO&c(n$2{Z$f&jO!Q&c!Q![$3n![!^&c!_!c&c!c!i$3n!i#T&c#T#Z$3n#Z#o&c#p;'S&c;'S;=`&w<%lO&c(n$3sZ$f&jO!Q&c!Q![$4f![!^&c!_!c&c!c!i$4f!i#T&c#T#Z$4f#Z#o&c#p;'S&c;'S;=`&w<%lO&c(n$4kZ$f&jO!Q&c!Q![$1`![!^&c!_!c&c!c!i$1`!i#T&c#T#Z$1`#Z#o&c#p;'S&c;'S;=`&w<%lO&c#S$5aR!Q![$5j!c!i$5j#T#Z$5j#S$5mS!Q![$5j!c!i$5j#T#Z$5j#q#r$1v(n$5|P;=`<%l$1`!2r$6[_!V!+S$f&j(Op(R!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z%#S$7f`#v$Id$f&j(Op(R!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_!`Ka!`#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z&,v$8s_$f&j(Op(R!b(X&%WOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z(CS$:Rk$f&j(Op(R!b'{&;d$[#t([!LYOY%ZYZ&cZr%Zrs&}st%Ztu$9ruw%Zwx(rx}%Z}!O$;v!O!Q%Z!Q![$9r![!^%Z!^!_*g!_!c%Z!c!}$9r!}#O%Z#O#P&c#P#R%Z#R#S$9r#S#T%Z#T#o$9r#o#p*g#p$g%Z$g;'S$9r;'S;=`$=|<%lO$9r+d$<Rk$f&j(Op(R!b$[#tOY%ZYZ&cZr%Zrs&}st%Ztu$;vuw%Zwx(rx}%Z}!O$;v!O!Q%Z!Q![$;v![!^%Z!^!_*g!_!c%Z!c!}$;v!}#O%Z#O#P&c#P#R%Z#R#S$;v#S#T%Z#T#o$;v#o#p*g#p$g%Z$g;'S$;v;'S;=`$=v<%lO$;v+d$=yP;=`<%l$;v(CS$>PP;=`<%l$9r!5p$>]X![!3l(Op(R!bOY*gZr*grs'}sw*gwx)rx#O*g#P;'S*g;'S;=`+Z<%lO*g&CO$?Ta(p&;`$f&j(Op(R!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_!`Ka!`#O%Z#O#P&c#P#o%Z#o#p*g#p#q$,u#q;'S%Z;'S;=`+a<%lO%Z%#`$@g_!Z$I`r`$f&j(Op(R!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z(r$Aq_!pS$f&j(Op(R!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z(CS$CR|$f&j(Op(R!b't(;d$Y#t'{&;d([!LYOX%ZXY+gYZ&cZ[+g[p%Zpq+gqr%Zrs&}st%ZtuEruw%Zwx(rx}%Z}!OGv!O!Q%Z!Q![Er![!^%Z!^!_*g!_!c%Z!c!}Er!}#O%Z#O#P&c#P#R%Z#R#SEr#S#T%Z#T#oEr#o#p*g#p$f%Z$f$g+g$g#BYEr#BY#BZ$Bp#BZ$ISEr$IS$I_$Bp$I_$JTEr$JT$JU$Bp$JU$KVEr$KV$KW$Bp$KW&FUEr&FU&FV$Bp&FV;'SEr;'S;=`I|<%l?HTEr?HT?HU$Bp?HUOEr(CS$F^k$f&j(Op(R!b'u(;d$Y#t'{&;d([!LYOY%ZYZ&cZr%Zrs&}st%ZtuEruw%Zwx(rx}%Z}!OGv!O!Q%Z!Q![Er![!^%Z!^!_*g!_!c%Z!c!}Er!}#O%Z#O#P&c#P#R%Z#R#SEr#S#T%Z#T#oEr#o#p*g#p$g%Z$g;'SEr;'S;=`I|<%lOEr",
|
28146 |
tokenData: "$Fq07[R!bOX%ZXY+gYZ-yZ[+g[]%Z]^.c^p%Zpq+gqr/mrs3cst:_tuEruvJSvwLkwx! Yxy!'iyz!(sz{!)}{|!,q|}!.O}!O!,q!O!P!/Y!P!Q!9j!Q!R#:O!R![#<_![!]#I_!]!^#Jk!^!_#Ku!_!`$![!`!a$$v!a!b$*T!b!c$,r!c!}Er!}#O$-|#O#P$/W#P#Q$4o#Q#R$5y#R#SEr#S#T$7W#T#o$8b#o#p$<r#p#q$=h#q#r$>x#r#s$@U#s$f%Z$f$g+g$g#BYEr#BY#BZ$A`#BZ$ISEr$IS$I_$A`$I_$I|Er$I|$I}$Dk$I}$JO$Dk$JO$JTEr$JT$JU$A`$JU$KVEr$KV$KW$A`$KW&FUEr&FU&FV$A`&FV;'SEr;'S;=`I|<%l?HTEr?HT?HU$A`?HUOEr(n%d_$h&j(Up(X!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z&j&hT$h&jO!^&c!_#o&c#p;'S&c;'S;=`&w<%lO&c&j&zP;=`<%l&c'|'U]$h&j(X!bOY&}YZ&cZw&}wx&cx!^&}!^!_'}!_#O&}#O#P&c#P#o&}#o#p'}#p;'S&};'S;=`(l<%lO&}!b(SU(X!bOY'}Zw'}x#O'}#P;'S'};'S;=`(f<%lO'}!b(iP;=`<%l'}'|(oP;=`<%l&}'[(y]$h&j(UpOY(rYZ&cZr(rrs&cs!^(r!^!_)r!_#O(r#O#P&c#P#o(r#o#p)r#p;'S(r;'S;=`*a<%lO(rp)wU(UpOY)rZr)rs#O)r#P;'S)r;'S;=`*Z<%lO)rp*^P;=`<%l)r'[*dP;=`<%l(r#S*nX(Up(X!bOY*gZr*grs'}sw*gwx)rx#O*g#P;'S*g;'S;=`+Z<%lO*g#S+^P;=`<%l*g(n+dP;=`<%l%Z07[+rq$h&j(Up(X!b'z0/lOX%ZXY+gYZ&cZ[+g[p%Zpq+gqr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p$f%Z$f$g+g$g#BY%Z#BY#BZ+g#BZ$IS%Z$IS$I_+g$I_$JT%Z$JT$JU+g$JU$KV%Z$KV$KW+g$KW&FU%Z&FU&FV+g&FV;'S%Z;'S;=`+a<%l?HT%Z?HT?HU+g?HUO%Z07[.ST(V#S$h&j'{0/lO!^&c!_#o&c#p;'S&c;'S;=`&w<%lO&c07[.n_$h&j(Up(X!b'{0/lOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z)3p/x`$h&j!n),Q(Up(X!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_!`0z!`#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z(KW1V`#u(Ch$h&j(Up(X!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_!`2X!`#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z(KW2d_#u(Ch$h&j(Up(X!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z'At3l_(T':f$h&j(X!bOY4kYZ5qZr4krs7nsw4kwx5qx!^4k!^!_8p!_#O4k#O#P5q#P#o4k#o#p8p#p;'S4k;'S;=`:X<%lO4k(^4r_$h&j(X!bOY4kYZ5qZr4krs7nsw4kwx5qx!^4k!^!_8p!_#O4k#O#P5q#P#o4k#o#p8p#p;'S4k;'S;=`:X<%lO4k&z5vX$h&jOr5qrs6cs!^5q!^!_6y!_#o5q#o#p6y#p;'S5q;'S;=`7h<%lO5q&z6jT$c`$h&jO!^&c!_#o&c#p;'S&c;'S;=`&w<%lO&c`6|TOr6yrs7]s;'S6y;'S;=`7b<%lO6y`7bO$c``7eP;=`<%l6y&z7kP;=`<%l5q(^7w]$c`$h&j(X!bOY&}YZ&cZw&}wx&cx!^&}!^!_'}!_#O&}#O#P&c#P#o&}#o#p'}#p;'S&};'S;=`(l<%lO&}!r8uZ(X!bOY8pYZ6yZr8prs9hsw8pwx6yx#O8p#O#P6y#P;'S8p;'S;=`:R<%lO8p!r9oU$c`(X!bOY'}Zw'}x#O'}#P;'S'};'S;=`(f<%lO'}!r:UP;=`<%l8p(^:[P;=`<%l4k%9[:hh$h&j(Up(X!bOY%ZYZ&cZq%Zqr<Srs&}st%ZtuCruw%Zwx(rx!^%Z!^!_*g!_!c%Z!c!}Cr!}#O%Z#O#P&c#P#R%Z#R#SCr#S#T%Z#T#oCr#o#p*g#p$g%Z$g;'SCr;'S;=`El<%lOCr(r<__WS$h&j(Up(X!bOY<SYZ&cZr<Srs=^sw<Swx@nx!^<S!^!_Bm!_#O<S#O#P>`#P#o<S#o#pBm#p;'S<S;'S;=`Cl<%lO<S(Q=g]WS$h&j(X!bOY=^YZ&cZw=^wx>`x!^=^!^!_?q!_#O=^#O#P>`#P#o=^#o#p?q#p;'S=^;'S;=`@h<%lO=^&n>gXWS$h&jOY>`YZ&cZ!^>`!^!_?S!_#o>`#o#p?S#p;'S>`;'S;=`?k<%lO>`S?XSWSOY?SZ;'S?S;'S;=`?e<%lO?SS?hP;=`<%l?S&n?nP;=`<%l>`!f?xWWS(X!bOY?qZw?qwx?Sx#O?q#O#P?S#P;'S?q;'S;=`@b<%lO?q!f@eP;=`<%l?q(Q@kP;=`<%l=^'`@w]WS$h&j(UpOY@nYZ&cZr@nrs>`s!^@n!^!_Ap!_#O@n#O#P>`#P#o@n#o#pAp#p;'S@n;'S;=`Bg<%lO@ntAwWWS(UpOYApZrAprs?Ss#OAp#O#P?S#P;'SAp;'S;=`Ba<%lOAptBdP;=`<%lAp'`BjP;=`<%l@n#WBvYWS(Up(X!bOYBmZrBmrs?qswBmwxApx#OBm#O#P?S#P;'SBm;'S;=`Cf<%lOBm#WCiP;=`<%lBm(rCoP;=`<%l<S%9[C}i$h&j(m%1l(Up(X!bOY%ZYZ&cZr%Zrs&}st%ZtuCruw%Zwx(rx!Q%Z!Q![Cr![!^%Z!^!_*g!_!c%Z!c!}Cr!}#O%Z#O#P&c#P#R%Z#R#SCr#S#T%Z#T#oCr#o#p*g#p$g%Z$g;'SCr;'S;=`El<%lOCr%9[EoP;=`<%lCr07[FRk$h&j(Up(X!b$[#t(R,2j(c$I[OY%ZYZ&cZr%Zrs&}st%ZtuEruw%Zwx(rx}%Z}!OGv!O!Q%Z!Q![Er![!^%Z!^!_*g!_!c%Z!c!}Er!}#O%Z#O#P&c#P#R%Z#R#SEr#S#T%Z#T#oEr#o#p*g#p$g%Z$g;'SEr;'S;=`I|<%lOEr+dHRk$h&j(Up(X!b$[#tOY%ZYZ&cZr%Zrs&}st%ZtuGvuw%Zwx(rx}%Z}!OGv!O!Q%Z!Q![Gv![!^%Z!^!_*g!_!c%Z!c!}Gv!}#O%Z#O#P&c#P#R%Z#R#SGv#S#T%Z#T#oGv#o#p*g#p$g%Z$g;'SGv;'S;=`Iv<%lOGv+dIyP;=`<%lGv07[JPP;=`<%lEr(KWJ_`$h&j(Up(X!b#n(ChOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_!`Ka!`#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z(KWKl_$h&j$P(Ch(Up(X!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z,#xLva(x+JY$h&j(Up(X!bOY%ZYZ&cZr%Zrs&}sv%ZvwM{wx(rx!^%Z!^!_*g!_!`Ka!`#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z(KWNW`$h&j#y(Ch(Up(X!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_!`Ka!`#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z'At! c_(W';W$h&j(UpOY!!bYZ!#hZr!!brs!#hsw!!bwx!$xx!^!!b!^!_!%z!_#O!!b#O#P!#h#P#o!!b#o#p!%z#p;'S!!b;'S;=`!'c<%lO!!b'l!!i_$h&j(UpOY!!bYZ!#hZr!!brs!#hsw!!bwx!$xx!^!!b!^!_!%z!_#O!!b#O#P!#h#P#o!!b#o#p!%z#p;'S!!b;'S;=`!'c<%lO!!b&z!#mX$h&jOw!#hwx6cx!^!#h!^!_!$Y!_#o!#h#o#p!$Y#p;'S!#h;'S;=`!$r<%lO!#h`!$]TOw!$Ywx7]x;'S!$Y;'S;=`!$l<%lO!$Y`!$oP;=`<%l!$Y&z!$uP;=`<%l!#h'l!%R]$c`$h&j(UpOY(rYZ&cZr(rrs&cs!^(r!^!_)r!_#O(r#O#P&c#P#o(r#o#p)r#p;'S(r;'S;=`*a<%lO(r!Q!&PZ(UpOY!%zYZ!$YZr!%zrs!$Ysw!%zwx!&rx#O!%z#O#P!$Y#P;'S!%z;'S;=`!']<%lO!%z!Q!&yU$c`(UpOY)rZr)rs#O)r#P;'S)r;'S;=`*Z<%lO)r!Q!'`P;=`<%l!%z'l!'fP;=`<%l!!b/5|!'t_!j/.^$h&j(Up(X!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z#&U!)O_!i!Lf$h&j(Up(X!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z-!n!*[b$h&j(Up(X!b(S%&f#o(ChOY%ZYZ&cZr%Zrs&}sw%Zwx(rxz%Zz{!+d{!^%Z!^!_*g!_!`Ka!`#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z(KW!+o`$h&j(Up(X!b#l(ChOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_!`Ka!`#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z+;x!,|`$h&j(Up(X!bp+4YOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_!`Ka!`#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z,$U!.Z_!Z+Jf$h&j(Up(X!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z07[!/ec$h&j(Up(X!b!O.2^OY%ZYZ&cZr%Zrs&}sw%Zwx(rx!O%Z!O!P!0p!P!Q%Z!Q![!3Y![!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z#%|!0ya$h&j(Up(X!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!O%Z!O!P!2O!P!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z#%|!2Z_!Y!L^$h&j(Up(X!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z'Ad!3eg$h&j(Up(X!bq'9tOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!Q%Z!Q![!3Y![!^%Z!^!_*g!_!g%Z!g!h!4|!h#O%Z#O#P&c#P#R%Z#R#S!3Y#S#X%Z#X#Y!4|#Y#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z'Ad!5Vg$h&j(Up(X!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx{%Z{|!6n|}%Z}!O!6n!O!Q%Z!Q![!8S![!^%Z!^!_*g!_#O%Z#O#P&c#P#R%Z#R#S!8S#S#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z'Ad!6wc$h&j(Up(X!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!Q%Z!Q![!8S![!^%Z!^!_*g!_#O%Z#O#P&c#P#R%Z#R#S!8S#S#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z'Ad!8_c$h&j(Up(X!bq'9tOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!Q%Z!Q![!8S![!^%Z!^!_*g!_#O%Z#O#P&c#P#R%Z#R#S!8S#S#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z07[!9uf$h&j(Up(X!b#m(ChOY!;ZYZ&cZr!;Zrs!<nsw!;Zwx!Lcxz!;Zz{#-}{!P!;Z!P!Q#/d!Q!^!;Z!^!_#(i!_!`#7S!`!a#8i!a!}!;Z!}#O#,f#O#P!Dy#P#o!;Z#o#p#(i#p;'S!;Z;'S;=`#-w<%lO!;Z?O!;fb$h&j(Up(X!b!V7`OY!;ZYZ&cZr!;Zrs!<nsw!;Zwx!Lcx!P!;Z!P!Q#&`!Q!^!;Z!^!_#(i!_!}!;Z!}#O#,f#O#P!Dy#P#o!;Z#o#p#(i#p;'S!;Z;'S;=`#-w<%lO!;Z>^!<w`$h&j(X!b!V7`OY!<nYZ&cZw!<nwx!=yx!P!<n!P!Q!Eq!Q!^!<n!^!_!Gr!_!}!<n!}#O!KS#O#P!Dy#P#o!<n#o#p!Gr#p;'S!<n;'S;=`!L]<%lO!<n<z!>Q^$h&j!V7`OY!=yYZ&cZ!P!=y!P!Q!>|!Q!^!=y!^!_!@c!_!}!=y!}#O!CW#O#P!Dy#P#o!=y#o#p!@c#p;'S!=y;'S;=`!Ek<%lO!=y<z!?Td$h&j!V7`O!^&c!_#W&c#W#X!>|#X#Z&c#Z#[!>|#[#]&c#]#^!>|#^#a&c#a#b!>|#b#g&c#g#h!>|#h#i&c#i#j!>|#j#k!>|#k#m&c#m#n!>|#n#o&c#p;'S&c;'S;=`&w<%lO&c7`!@hX!V7`OY!@cZ!P!@c!P!Q!AT!Q!}!@c!}#O!Ar#O#P!Bq#P;'S!@c;'S;=`!CQ<%lO!@c7`!AYW!V7`#W#X!AT#Z#[!AT#]#^!AT#a#b!AT#g#h!AT#i#j!AT#j#k!AT#m#n!AT7`!AuVOY!ArZ#O!Ar#O#P!B[#P#Q!@c#Q;'S!Ar;'S;=`!Bk<%lO!Ar7`!B_SOY!ArZ;'S!Ar;'S;=`!Bk<%lO!Ar7`!BnP;=`<%l!Ar7`!BtSOY!@cZ;'S!@c;'S;=`!CQ<%lO!@c7`!CTP;=`<%l!@c<z!C][$h&jOY!CWYZ&cZ!^!CW!^!_!Ar!_#O!CW#O#P!DR#P#Q!=y#Q#o!CW#o#p!Ar#p;'S!CW;'S;=`!Ds<%lO!CW<z!DWX$h&jOY!CWYZ&cZ!^!CW!^!_!Ar!_#o!CW#o#p!Ar#p;'S!CW;'S;=`!Ds<%lO!CW<z!DvP;=`<%l!CW<z!EOX$h&jOY!=yYZ&cZ!^!=y!^!_!@c!_#o!=y#o#p!@c#p;'S!=y;'S;=`!Ek<%lO!=y<z!EnP;=`<%l!=y>^!Ezl$h&j(X!b!V7`OY&}YZ&cZw&}wx&cx!^&}!^!_'}!_#O&}#O#P&c#P#W&}#W#X!Eq#X#Z&}#Z#[!Eq#[#]&}#]#^!Eq#^#a&}#a#b!Eq#b#g&}#g#h!Eq#h#i&}#i#j!Eq#j#k!Eq#k#m&}#m#n!Eq#n#o&}#o#p'}#p;'S&};'S;=`(l<%lO&}8r!GyZ(X!b!V7`OY!GrZw!Grwx!@cx!P!Gr!P!Q!Hl!Q!}!Gr!}#O!JU#O#P!Bq#P;'S!Gr;'S;=`!J|<%lO!Gr8r!Hse(X!b!V7`OY'}Zw'}x#O'}#P#W'}#W#X!Hl#X#Z'}#Z#[!Hl#[#]'}#]#^!Hl#^#a'}#a#b!Hl#b#g'}#g#h!Hl#h#i'}#i#j!Hl#j#k!Hl#k#m'}#m#n!Hl#n;'S'};'S;=`(f<%lO'}8r!JZX(X!bOY!JUZw!JUwx!Arx#O!JU#O#P!B[#P#Q!Gr#Q;'S!JU;'S;=`!Jv<%lO!JU8r!JyP;=`<%l!JU8r!KPP;=`<%l!Gr>^!KZ^$h&j(X!bOY!KSYZ&cZw!KSwx!CWx!^!KS!^!_!JU!_#O!KS#O#P!DR#P#Q!<n#Q#o!KS#o#p!JU#p;'S!KS;'S;=`!LV<%lO!KS>^!LYP;=`<%l!KS>^!L`P;=`<%l!<n=l!Ll`$h&j(Up!V7`OY!LcYZ&cZr!Lcrs!=ys!P!Lc!P!Q!Mn!Q!^!Lc!^!_# o!_!}!Lc!}#O#%P#O#P!Dy#P#o!Lc#o#p# o#p;'S!Lc;'S;=`#&Y<%lO!Lc=l!Mwl$h&j(Up!V7`OY(rYZ&cZr(rrs&cs!^(r!^!_)r!_#O(r#O#P&c#P#W(r#W#X!Mn#X#Z(r#Z#[!Mn#[#](r#]#^!Mn#^#a(r#a#b!Mn#b#g(r#g#h!Mn#h#i(r#i#j!Mn#j#k!Mn#k#m(r#m#n!Mn#n#o(r#o#p)r#p;'S(r;'S;=`*a<%lO(r8Q# vZ(Up!V7`OY# oZr# ors!@cs!P# o!P!Q#!i!Q!}# o!}#O#$R#O#P!Bq#P;'S# o;'S;=`#$y<%lO# o8Q#!pe(Up!V7`OY)rZr)rs#O)r#P#W)r#W#X#!i#X#Z)r#Z#[#!i#[#])r#]#^#!i#^#a)r#a#b#!i#b#g)r#g#h#!i#h#i)r#i#j#!i#j#k#!i#k#m)r#m#n#!i#n;'S)r;'S;=`*Z<%lO)r8Q#$WX(UpOY#$RZr#$Rrs!Ars#O#$R#O#P!B[#P#Q# o#Q;'S#$R;'S;=`#$s<%lO#$R8Q#$vP;=`<%l#$R8Q#$|P;=`<%l# o=l#%W^$h&j(UpOY#%PYZ&cZr#%Prs!CWs!^#%P!^!_#$R!_#O#%P#O#P!DR#P#Q!Lc#Q#o#%P#o#p#$R#p;'S#%P;'S;=`#&S<%lO#%P=l#&VP;=`<%l#%P=l#&]P;=`<%l!Lc?O#&kn$h&j(Up(X!b!V7`OY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#W%Z#W#X#&`#X#Z%Z#Z#[#&`#[#]%Z#]#^#&`#^#a%Z#a#b#&`#b#g%Z#g#h#&`#h#i%Z#i#j#&`#j#k#&`#k#m%Z#m#n#&`#n#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z9d#(r](Up(X!b!V7`OY#(iZr#(irs!Grsw#(iwx# ox!P#(i!P!Q#)k!Q!}#(i!}#O#+`#O#P!Bq#P;'S#(i;'S;=`#,`<%lO#(i9d#)th(Up(X!b!V7`OY*gZr*grs'}sw*gwx)rx#O*g#P#W*g#W#X#)k#X#Z*g#Z#[#)k#[#]*g#]#^#)k#^#a*g#a#b#)k#b#g*g#g#h#)k#h#i*g#i#j#)k#j#k#)k#k#m*g#m#n#)k#n;'S*g;'S;=`+Z<%lO*g9d#+gZ(Up(X!bOY#+`Zr#+`rs!JUsw#+`wx#$Rx#O#+`#O#P!B[#P#Q#(i#Q;'S#+`;'S;=`#,Y<%lO#+`9d#,]P;=`<%l#+`9d#,cP;=`<%l#(i?O#,o`$h&j(Up(X!bOY#,fYZ&cZr#,frs!KSsw#,fwx#%Px!^#,f!^!_#+`!_#O#,f#O#P!DR#P#Q!;Z#Q#o#,f#o#p#+`#p;'S#,f;'S;=`#-q<%lO#,f?O#-tP;=`<%l#,f?O#-zP;=`<%l!;Z07[#.[b$h&j(Up(X!b'|0/l!V7`OY!;ZYZ&cZr!;Zrs!<nsw!;Zwx!Lcx!P!;Z!P!Q#&`!Q!^!;Z!^!_#(i!_!}!;Z!}#O#,f#O#P!Dy#P#o!;Z#o#p#(i#p;'S!;Z;'S;=`#-w<%lO!;Z07[#/o_$h&j(Up(X!bT0/lOY#/dYZ&cZr#/drs#0nsw#/dwx#4Ox!^#/d!^!_#5}!_#O#/d#O#P#1p#P#o#/d#o#p#5}#p;'S#/d;'S;=`#6|<%lO#/d06j#0w]$h&j(X!bT0/lOY#0nYZ&cZw#0nwx#1px!^#0n!^!_#3R!_#O#0n#O#P#1p#P#o#0n#o#p#3R#p;'S#0n;'S;=`#3x<%lO#0n05W#1wX$h&jT0/lOY#1pYZ&cZ!^#1p!^!_#2d!_#o#1p#o#p#2d#p;'S#1p;'S;=`#2{<%lO#1p0/l#2iST0/lOY#2dZ;'S#2d;'S;=`#2u<%lO#2d0/l#2xP;=`<%l#2d05W#3OP;=`<%l#1p01O#3YW(X!bT0/lOY#3RZw#3Rwx#2dx#O#3R#O#P#2d#P;'S#3R;'S;=`#3r<%lO#3R01O#3uP;=`<%l#3R06j#3{P;=`<%l#0n05x#4X]$h&j(UpT0/lOY#4OYZ&cZr#4Ors#1ps!^#4O!^!_#5Q!_#O#4O#O#P#1p#P#o#4O#o#p#5Q#p;'S#4O;'S;=`#5w<%lO#4O00^#5XW(UpT0/lOY#5QZr#5Qrs#2ds#O#5Q#O#P#2d#P;'S#5Q;'S;=`#5q<%lO#5Q00^#5tP;=`<%l#5Q05x#5zP;=`<%l#4O01p#6WY(Up(X!bT0/lOY#5}Zr#5}rs#3Rsw#5}wx#5Qx#O#5}#O#P#2d#P;'S#5};'S;=`#6v<%lO#5}01p#6yP;=`<%l#5}07[#7PP;=`<%l#/d)3h#7ab$h&j$P(Ch(Up(X!b!V7`OY!;ZYZ&cZr!;Zrs!<nsw!;Zwx!Lcx!P!;Z!P!Q#&`!Q!^!;Z!^!_#(i!_!}!;Z!}#O#,f#O#P!Dy#P#o!;Z#o#p#(i#p;'S!;Z;'S;=`#-w<%lO!;ZAt#8vb$Y#t$h&j(Up(X!b!V7`OY!;ZYZ&cZr!;Zrs!<nsw!;Zwx!Lcx!P!;Z!P!Q#&`!Q!^!;Z!^!_#(i!_!}!;Z!}#O#,f#O#P!Dy#P#o!;Z#o#p#(i#p;'S!;Z;'S;=`#-w<%lO!;Z'Ad#:Zp$h&j(Up(X!bq'9tOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!O%Z!O!P!3Y!P!Q%Z!Q![#<_![!^%Z!^!_*g!_!g%Z!g!h!4|!h#O%Z#O#P&c#P#R%Z#R#S#<_#S#U%Z#U#V#?i#V#X%Z#X#Y!4|#Y#b%Z#b#c#>_#c#d#Bq#d#l%Z#l#m#Es#m#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z'Ad#<jk$h&j(Up(X!bq'9tOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!O%Z!O!P!3Y!P!Q%Z!Q![#<_![!^%Z!^!_*g!_!g%Z!g!h!4|!h#O%Z#O#P&c#P#R%Z#R#S#<_#S#X%Z#X#Y!4|#Y#b%Z#b#c#>_#c#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z'Ad#>j_$h&j(Up(X!bq'9tOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z'Ad#?rd$h&j(Up(X!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!Q%Z!Q!R#AQ!R!S#AQ!S!^%Z!^!_*g!_#O%Z#O#P&c#P#R%Z#R#S#AQ#S#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z'Ad#A]f$h&j(Up(X!bq'9tOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!Q%Z!Q!R#AQ!R!S#AQ!S!^%Z!^!_*g!_#O%Z#O#P&c#P#R%Z#R#S#AQ#S#b%Z#b#c#>_#c#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z'Ad#Bzc$h&j(Up(X!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!Q%Z!Q!Y#DV!Y!^%Z!^!_*g!_#O%Z#O#P&c#P#R%Z#R#S#DV#S#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z'Ad#Dbe$h&j(Up(X!bq'9tOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!Q%Z!Q!Y#DV!Y!^%Z!^!_*g!_#O%Z#O#P&c#P#R%Z#R#S#DV#S#b%Z#b#c#>_#c#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z'Ad#E|g$h&j(Up(X!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!Q%Z!Q![#Ge![!^%Z!^!_*g!_!c%Z!c!i#Ge!i#O%Z#O#P&c#P#R%Z#R#S#Ge#S#T%Z#T#Z#Ge#Z#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z'Ad#Gpi$h&j(Up(X!bq'9tOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!Q%Z!Q![#Ge![!^%Z!^!_*g!_!c%Z!c!i#Ge!i#O%Z#O#P&c#P#R%Z#R#S#Ge#S#T%Z#T#Z#Ge#Z#b%Z#b#c#>_#c#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z*)x#Il_!e$b$h&j#})Lv(Up(X!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z)[#Jv_al$h&j(Up(X!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z04f#LS^h#)`#P-<U(Up(X!b$m7`OY*gZr*grs'}sw*gwx)rx!P*g!P!Q#MO!Q!^*g!^!_#Mt!_!`$ f!`#O*g#P;'S*g;'S;=`+Z<%lO*g(n#MXX$j&j(Up(X!bOY*gZr*grs'}sw*gwx)rx#O*g#P;'S*g;'S;=`+Z<%lO*g(El#M}Z#p(Ch(Up(X!bOY*gZr*grs'}sw*gwx)rx!_*g!_!`#Np!`#O*g#P;'S*g;'S;=`+Z<%lO*g(El#NyX$P(Ch(Up(X!bOY*gZr*grs'}sw*gwx)rx#O*g#P;'S*g;'S;=`+Z<%lO*g(El$ oX#q(Ch(Up(X!bOY*gZr*grs'}sw*gwx)rx#O*g#P;'S*g;'S;=`+Z<%lO*g*)x$!ga#^*!Y$h&j(Up(X!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_!`0z!`!a$#l!a#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z(K[$#w_#i(Cl$h&j(Up(X!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z*)x$%Vag!*r#q(Ch$e#|$h&j(Up(X!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_!`$&[!`!a$'f!a#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z(KW$&g_#q(Ch$h&j(Up(X!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z(KW$'qa#p(Ch$h&j(Up(X!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_!`Ka!`!a$(v!a#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z(KW$)R`#p(Ch$h&j(Up(X!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_!`Ka!`#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z(Kd$*`a(p(Ct$h&j(Up(X!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_!a%Z!a!b$+e!b#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z(KW$+p`$h&j#z(Ch(Up(X!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_!`Ka!`#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z%#`$,}_!z$Ip$h&j(Up(X!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z04f$.X_!Q0,v$h&j(Up(X!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z(n$/]Z$h&jO!^$0O!^!_$0f!_#i$0O#i#j$0k#j#l$0O#l#m$2^#m#o$0O#o#p$0f#p;'S$0O;'S;=`$4i<%lO$0O(n$0VT_#S$h&jO!^&c!_#o&c#p;'S&c;'S;=`&w<%lO&c#S$0kO_#S(n$0p[$h&jO!Q&c!Q![$1f![!^&c!_!c&c!c!i$1f!i#T&c#T#Z$1f#Z#o&c#o#p$3|#p;'S&c;'S;=`&w<%lO&c(n$1kZ$h&jO!Q&c!Q![$2^![!^&c!_!c&c!c!i$2^!i#T&c#T#Z$2^#Z#o&c#p;'S&c;'S;=`&w<%lO&c(n$2cZ$h&jO!Q&c!Q![$3U![!^&c!_!c&c!c!i$3U!i#T&c#T#Z$3U#Z#o&c#p;'S&c;'S;=`&w<%lO&c(n$3ZZ$h&jO!Q&c!Q![$0O![!^&c!_!c&c!c!i$0O!i#T&c#T#Z$0O#Z#o&c#p;'S&c;'S;=`&w<%lO&c#S$4PR!Q![$4Y!c!i$4Y#T#Z$4Y#S$4]S!Q![$4Y!c!i$4Y#T#Z$4Y#q#r$0f(n$4lP;=`<%l$0O#1[$4z_!W#)l$h&j(Up(X!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z(KW$6U`#w(Ch$h&j(Up(X!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_!`Ka!`#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z+;p$7c_$h&j(Up(X!b(_+4QOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z07[$8qk$h&j(Up(X!b(R,2j$^#t(c$I[OY%ZYZ&cZr%Zrs&}st%Ztu$8buw%Zwx(rx}%Z}!O$:f!O!Q%Z!Q![$8b![!^%Z!^!_*g!_!c%Z!c!}$8b!}#O%Z#O#P&c#P#R%Z#R#S$8b#S#T%Z#T#o$8b#o#p*g#p$g%Z$g;'S$8b;'S;=`$<l<%lO$8b+d$:qk$h&j(Up(X!b$^#tOY%ZYZ&cZr%Zrs&}st%Ztu$:fuw%Zwx(rx}%Z}!O$:f!O!Q%Z!Q![$:f![!^%Z!^!_*g!_!c%Z!c!}$:f!}#O%Z#O#P&c#P#R%Z#R#S$:f#S#T%Z#T#o$:f#o#p*g#p$g%Z$g;'S$:f;'S;=`$<f<%lO$:f+d$<iP;=`<%l$:f07[$<oP;=`<%l$8b#Jf$<{X!]#Hb(Up(X!bOY*gZr*grs'}sw*gwx)rx#O*g#P;'S*g;'S;=`+Z<%lO*g,#x$=sa(w+JY$h&j(Up(X!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_!`Ka!`#O%Z#O#P&c#P#o%Z#o#p*g#p#q$+e#q;'S%Z;'S;=`+a<%lO%Z)>v$?V_![(CdtBr$h&j(Up(X!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z?O$@a_!o7`$h&j(Up(X!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z07[$Aq|$h&j(Up(X!b'z0/l$[#t(R,2j(c$I[OX%ZXY+gYZ&cZ[+g[p%Zpq+gqr%Zrs&}st%ZtuEruw%Zwx(rx}%Z}!OGv!O!Q%Z!Q![Er![!^%Z!^!_*g!_!c%Z!c!}Er!}#O%Z#O#P&c#P#R%Z#R#SEr#S#T%Z#T#oEr#o#p*g#p$f%Z$f$g+g$g#BYEr#BY#BZ$A`#BZ$ISEr$IS$I_$A`$I_$JTEr$JT$JU$A`$JU$KVEr$KV$KW$A`$KW&FUEr&FU&FV$A`&FV;'SEr;'S;=`I|<%l?HTEr?HT?HU$A`?HUOEr07[$D|k$h&j(Up(X!b'{0/l$[#t(R,2j(c$I[OY%ZYZ&cZr%Zrs&}st%ZtuEruw%Zwx(rx}%Z}!OGv!O!Q%Z!Q![Er![!^%Z!^!_*g!_!c%Z!c!}Er!}#O%Z#O#P&c#P#R%Z#R#SEr#S#T%Z#T#oEr#o#p*g#p$g%Z$g;'SEr;'S;=`I|<%lOEr",
|
| 27403 |
tokenizers: [noSemicolon, incdecToken, jsx, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, insertSemicolon, new LocalTokenGroup("$S~RRtu[#O#Pg#S#T#|~_P#o#pb~gOt~~jVO#i!P#i#j!U#j#l!P#l#m!q#m;'S!P;'S;=`#v<%lO!P~!UO!R~~!XS!Q![!e!c!i!e#T#Z!e#o#p#Z~!hR!Q![!q!c!i!q#T#Z!q~!tR!Q![!}!c!i!}#T#Z!}~#QR!Q![!P!c!i!P#T#Z!P~#^R!Q![#g!c!i#g#T#Z#g~#jS!Q![#g!c!i#g#T#Z#g#q#r!P~#yP;=`<%l!P~$RO(Z~~", 141, 332), new LocalTokenGroup("j~RQYZXz{^~^O'x~~aP!P!Qd~iO'y~~", 25, 315)],
|
28147 |
tokenizers: [noSemicolon, noSemicolonType, operatorToken, jsx, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, insertSemicolon, new LocalTokenGroup("$S~RRtu[#O#Pg#S#T#|~_P#o#pb~gOv~~jVO#i!P#i#j!U#j#l!P#l#m!q#m;'S!P;'S;=`#v<%lO!P~!UO!S~~!XS!Q![!e!c!i!e#T#Z!e#o#p#Z~!hR!Q![!q!c!i!q#T#Z!q~!tR!Q![!}!c!i!}#T#Z!}~#QR!Q![!P!c!i!P#T#Z!P~#^R!Q![#g!c!i#g#T#Z#g~#jS!Q![#g!c!i#g#T#Z#g#q#r!P~#yP;=`<%l!P~$RO(a~~", 141, 338), new LocalTokenGroup("j~RQYZXz{^~^O(O~~aP!P!Qd~iO(P~~", 25, 321)],
|
| 27404 |
topRules: {"Script":[0,6],"SingleExpression":[1,269],"SingleClassItem":[2,270]},
|
28148 |
topRules: {"Script":[0,7],"SingleExpression":[1,274],"SingleClassItem":[2,275]},
|
| 27405 |
dialects: {jsx: 0, ts: 14826},
|
28149 |
dialects: {jsx: 0, ts: 15091},
|
| 27406 |
dynamicPrecedences: {"69":1,"79":1,"81":1,"165":1,"193":1},
|
28150 |
dynamicPrecedences: {"78":1,"80":1,"92":1,"168":1,"198":1},
|
| Línea 27407... |
Línea 28151... |
| 27407 |
specialized: [{term: 319, get: (value) => spec_identifier[value] || -1},{term: 334, get: (value) => spec_word[value] || -1},{term: 70, get: (value) => spec_LessThan[value] || -1}],
|
28151 |
specialized: [{term: 325, get: (value) => spec_identifier[value] || -1},{term: 341, get: (value) => spec_word[value] || -1},{term: 93, get: (value) => spec_LessThan[value] || -1}],
|
| 27408 |
tokenPrec: 14850
|
28152 |
tokenPrec: 15116
|
| 27409 |
});
|
28153 |
});
|
| Línea 27551... |
Línea 28295... |
| 27551 |
"TemplateString", "String", "RegExp",
|
28295 |
"TemplateString", "String", "RegExp",
|
| 27552 |
"LineComment", "BlockComment",
|
28296 |
"LineComment", "BlockComment",
|
| 27553 |
"VariableDefinition", "TypeDefinition", "Label",
|
28297 |
"VariableDefinition", "TypeDefinition", "Label",
|
| 27554 |
"PropertyDefinition", "PropertyName",
|
28298 |
"PropertyDefinition", "PropertyName",
|
| 27555 |
"PrivatePropertyDefinition", "PrivatePropertyName",
|
28299 |
"PrivatePropertyDefinition", "PrivatePropertyName",
|
| - |
|
28300 |
"JSXText", "JSXAttributeValue", "JSXOpenTag", "JSXCloseTag", "JSXSelfClosingTag",
|
| 27556 |
".", "?."
|
28301 |
".", "?."
|
| 27557 |
];
|
28302 |
];
|
| 27558 |
/**
|
28303 |
/**
|
| 27559 |
Completion source that looks up locally defined names in
|
28304 |
Completion source that looks up locally defined names in
|
| 27560 |
JavaScript code.
|
28305 |
JavaScript code.
|
| Línea 28344... |
Línea 29089... |
| 28344 |
return false;
|
29089 |
return false;
|
| 28345 |
let base = insertTransaction(), { state } = base;
|
29090 |
let base = insertTransaction(), { state } = base;
|
| 28346 |
let closeTags = state.changeByRange(range => {
|
29091 |
let closeTags = state.changeByRange(range => {
|
| 28347 |
var _a, _b, _c;
|
29092 |
var _a, _b, _c;
|
| 28348 |
let didType = state.doc.sliceString(range.from - 1, range.to) == text;
|
29093 |
let didType = state.doc.sliceString(range.from - 1, range.to) == text;
|
| 28349 |
let { head } = range, around = syntaxTree(state).resolveInner(head - 1, -1), name;
|
29094 |
let { head } = range, after = syntaxTree(state).resolveInner(head, -1), name;
|
| 28350 |
if (around.name == "TagName" || around.name == "StartTag")
|
29095 |
if (didType && text == ">" && after.name == "EndTag") {
|
| 28351 |
around = around.parent;
|
29096 |
let tag = after.parent;
|
| 28352 |
if (didType && text == ">" && around.name == "OpenTag") {
|
- |
|
| 28353 |
if (((_b = (_a = around.parent) === null || _a === void 0 ? void 0 : _a.lastChild) === null || _b === void 0 ? void 0 : _b.name) != "CloseTag" &&
|
29097 |
if (((_b = (_a = tag.parent) === null || _a === void 0 ? void 0 : _a.lastChild) === null || _b === void 0 ? void 0 : _b.name) != "CloseTag" &&
|
| 28354 |
(name = elementName$2(state.doc, around.parent, head)) &&
|
29098 |
(name = elementName$2(state.doc, tag.parent, head)) &&
|
| 28355 |
!selfClosers.has(name)) {
|
29099 |
!selfClosers.has(name)) {
|
| 28356 |
let to = head + (state.doc.sliceString(head, head + 1) === ">" ? 1 : 0);
|
29100 |
let to = head + (state.doc.sliceString(head, head + 1) === ">" ? 1 : 0);
|
| 28357 |
let insert = `</${name}>`;
|
29101 |
let insert = `</${name}>`;
|
| 28358 |
return { range, changes: { from: head, to, insert } };
|
29102 |
return { range, changes: { from: head, to, insert } };
|
| 28359 |
}
|
29103 |
}
|
| 28360 |
}
|
29104 |
}
|
| 28361 |
else if (didType && text == "/" && around.name == "IncompleteCloseTag") {
|
29105 |
else if (didType && text == "/" && after.name == "IncompleteCloseTag") {
|
| 28362 |
let base = around.parent;
|
29106 |
let tag = after.parent;
|
| 28363 |
if (around.from == head - 2 && ((_c = base.lastChild) === null || _c === void 0 ? void 0 : _c.name) != "CloseTag" &&
|
29107 |
if (after.from == head - 2 && ((_c = tag.lastChild) === null || _c === void 0 ? void 0 : _c.name) != "CloseTag" &&
|
| 28364 |
(name = elementName$2(state.doc, base, head)) && !selfClosers.has(name)) {
|
29108 |
(name = elementName$2(state.doc, tag, head)) && !selfClosers.has(name)) {
|
| 28365 |
let to = head + (state.doc.sliceString(head, head + 1) === ">" ? 1 : 0);
|
29109 |
let to = head + (state.doc.sliceString(head, head + 1) === ">" ? 1 : 0);
|
| 28366 |
let insert = `${name}>`;
|
29110 |
let insert = `${name}>`;
|
| 28367 |
return {
|
29111 |
return {
|
| 28368 |
range: EditorSelection.cursor(head + insert.length, -1),
|
29112 |
range: EditorSelection.cursor(head + insert.length, -1),
|
| 28369 |
changes: { from: head, to, insert }
|
29113 |
changes: { from: head, to, insert }
|
| Línea 28388... |
Línea 29132... |
| 28388 |
const StartTag = 1,
|
29132 |
const StartTag = 1,
|
| 28389 |
StartCloseTag = 2,
|
29133 |
StartCloseTag = 2,
|
| 28390 |
MissingCloseTag = 3,
|
29134 |
MissingCloseTag = 3,
|
| 28391 |
mismatchedStartCloseTag = 4,
|
29135 |
mismatchedStartCloseTag = 4,
|
| 28392 |
incompleteStartCloseTag = 5,
|
29136 |
incompleteStartCloseTag = 5,
|
| 28393 |
commentContent$1 = 35,
|
29137 |
commentContent$1 = 36,
|
| 28394 |
piContent$1 = 36,
|
29138 |
piContent$1 = 37,
|
| 28395 |
cdataContent$1 = 37,
|
29139 |
cdataContent$1 = 38,
|
| 28396 |
Element$1 = 11,
|
29140 |
Element$1 = 11,
|
| 28397 |
OpenTag = 13;
|
29141 |
OpenTag = 13;
|
| Línea 28398... |
Línea 29142... |
| 28398 |
|
29142 |
|
| Línea 28423... |
Línea 29167... |
| 28423 |
}
|
29167 |
}
|
| Línea 28424... |
Línea 29168... |
| 28424 |
|
29168 |
|
| 28425 |
function ElementContext(name, parent) {
|
29169 |
function ElementContext(name, parent) {
|
| 28426 |
this.name = name;
|
29170 |
this.name = name;
|
| 28427 |
this.parent = parent;
|
- |
|
| 28428 |
this.hash = parent ? parent.hash : 0;
|
- |
|
| 28429 |
for (let i = 0; i < name.length; i++) this.hash += (this.hash << 4) + name.charCodeAt(i) + (name.charCodeAt(i) << 8);
|
29171 |
this.parent = parent;
|
| Línea 28430... |
Línea 29172... |
| 28430 |
}
|
29172 |
}
|
| 28431 |
|
29173 |
|
| 28432 |
const elementContext = new ContextTracker({
|
29174 |
const elementContext = new ContextTracker({
|
| Línea 28440... |
Línea 29182... |
| 28440 |
reuse(context, node, _stack, input) {
|
29182 |
reuse(context, node, _stack, input) {
|
| 28441 |
let type = node.type.id;
|
29183 |
let type = node.type.id;
|
| 28442 |
return type == StartTag || type == OpenTag
|
29184 |
return type == StartTag || type == OpenTag
|
| 28443 |
? new ElementContext(tagNameAfter(input, 1) || "", context) : context
|
29185 |
? new ElementContext(tagNameAfter(input, 1) || "", context) : context
|
| 28444 |
},
|
29186 |
},
|
| 28445 |
hash(context) { return context ? context.hash : 0 },
|
- |
|
| 28446 |
strict: false
|
29187 |
strict: false
|
| 28447 |
});
|
29188 |
});
|
| Línea 28448... |
Línea 29189... |
| 28448 |
|
29189 |
|
| 28449 |
const startTag = new ExternalTokenizer((input, stack) => {
|
29190 |
const startTag = new ExternalTokenizer((input, stack) => {
|
| Línea 28496... |
Línea 29237... |
| 28496 |
});
|
29237 |
});
|
| Línea 28497... |
Línea 29238... |
| 28497 |
|
29238 |
|
| 28498 |
// This file was generated by lezer-generator. You probably shouldn't edit it.
|
29239 |
// This file was generated by lezer-generator. You probably shouldn't edit it.
|
| 28499 |
const parser = LRParser.deserialize({
|
29240 |
const parser = LRParser.deserialize({
|
| 28500 |
version: 14,
|
29241 |
version: 14,
|
| 28501 |
states: ",SOQOaOOOrOxO'#CfOzOpO'#CiO!tOaO'#CgOOOP'#Cg'#CgO!{OrO'#CrO#TOtO'#CsO#]OpO'#CtOOOP'#DS'#DSOOOP'#Cv'#CvQQOaOOOOOW'#Cw'#CwO#eOxO,59QOOOP,59Q,59QOOOO'#Cx'#CxO#mOpO,59TO#uO!bO,59TOOOP'#C{'#C{O$TOaO,59RO$[OpO'#CoOOOP,59R,59ROOOQ'#C|'#C|O$dOrO,59^OOOP,59^,59^OOOS'#C}'#C}O$lOtO,59_OOOP,59_,59_O$tOpO,59`O$|OpO,59`OOOP-E6t-E6tOOOW-E6u-E6uOOOP1G.l1G.lOOOO-E6v-E6vO%UO!bO1G.oO%UO!bO1G.oO%dOpO'#CkO%lO!bO'#CyO%zO!bO1G.oOOOP1G.o1G.oOOOP1G.w1G.wOOOP-E6y-E6yOOOP1G.m1G.mO&VOpO,59ZO&_OpO,59ZOOOQ-E6z-E6zOOOP1G.x1G.xOOOS-E6{-E6{OOOP1G.y1G.yO&gOpO1G.zO&gOpO1G.zOOOP1G.z1G.zO&oO!bO7+$ZO&}O!bO7+$ZOOOP7+$Z7+$ZOOOP7+$c7+$cO'YOpO,59VO'bOpO,59VO'jO!bO,59eOOOO-E6w-E6wO'xOpO1G.uO'xOpO1G.uOOOP1G.u1G.uO(QOpO7+$fOOOP7+$f7+$fO(YO!bO<<GuOOOP<<Gu<<GuOOOP<<G}<<G}O'bOpO1G.qO'bOpO1G.qO(eO#tO'#CnOOOO1G.q1G.qO(sOpO7+$aOOOP7+$a7+$aOOOP<<HQ<<HQOOOPAN=aAN=aOOOPAN=iAN=iO'bOpO7+$]OOOO7+$]7+$]OOOO'#Cz'#CzO({O#tO,59YOOOO,59Y,59YOOOP<<G{<<G{OOOO<<Gw<<GwOOOO-E6x-E6xOOOO1G.t1G.t",
|
29242 |
states: ",lOQOaOOOrOxO'#CfOzOpO'#CiO!tOaO'#CgOOOP'#Cg'#CgO!{OrO'#CrO#TOtO'#CsO#]OpO'#CtOOOP'#DT'#DTOOOP'#Cv'#CvQQOaOOOOOW'#Cw'#CwO#eOxO,59QOOOP,59Q,59QOOOO'#Cx'#CxO#mOpO,59TO#uO!bO,59TOOOP'#C|'#C|O$TOaO,59RO$[OpO'#CoOOOP,59R,59ROOOQ'#C}'#C}O$dOrO,59^OOOP,59^,59^OOOS'#DO'#DOO$lOtO,59_OOOP,59_,59_O$tOpO,59`O$|OpO,59`OOOP-E6t-E6tOOOW-E6u-E6uOOOP1G.l1G.lOOOO-E6v-E6vO%UO!bO1G.oO%UO!bO1G.oO%dOpO'#CkO%lO!bO'#CyO%zO!bO1G.oOOOP1G.o1G.oOOOP1G.w1G.wOOOP-E6z-E6zOOOP1G.m1G.mO&VOpO,59ZO&_OpO,59ZOOOQ-E6{-E6{OOOP1G.x1G.xOOOS-E6|-E6|OOOP1G.y1G.yO&gOpO1G.zO&gOpO1G.zOOOP1G.z1G.zO&oO!bO7+$ZO&}O!bO7+$ZOOOP7+$Z7+$ZOOOP7+$c7+$cO'YOpO,59VO'bOpO,59VO'mO!bO,59eOOOO-E6w-E6wO'{OpO1G.uO'{OpO1G.uOOOP1G.u1G.uO(TOpO7+$fOOOP7+$f7+$fO(]O!bO<<GuOOOP<<Gu<<GuOOOP<<G}<<G}O'bOpO1G.qO'bOpO1G.qO(hO#tO'#CnO(vO&jO'#CnOOOO1G.q1G.qO)UOpO7+$aOOOP7+$a7+$aOOOP<<HQ<<HQOOOPAN=aAN=aOOOPAN=iAN=iO'bOpO7+$]OOOO7+$]7+$]OOOO'#Cz'#CzO)^O#tO,59YOOOO,59Y,59YOOOO'#C{'#C{O)lO&jO,59YOOOP<<G{<<G{OOOO<<Gw<<GwOOOO-E6x-E6xOOOO1G.t1G.tOOOO-E6y-E6y",
|
| 28502 |
stateData: ")Z~OPQOSVOTWOVWOWWOXWOiXOxPO}TO!PUO~OuZOw]O~O^`Oy^O~OPQOQcOSVOTWOVWOWWOXWOxPO}TO!PUO~ORdO~P!SOseO|gO~OthO!OjO~O^lOy^O~OuZOwoO~O^qOy^O~O[vO`sOdwOy^O~ORyO~P!SO^{Oy^O~OseO|}O~OthO!O!PO~O^!QOy^O~O[!SOy^O~O[!VO`sOd!WOy^O~Oa!YOy^O~Oy^O[mX`mXdmX~O[!VO`sOd!WO~O^!]Oy^O~O[!_Oy^O~O[!aOy^O~O[!cO`sOd!dOy^O~O[!cO`sOd!dO~Oa!eOy^O~Oy^Oz!gO~Oy^O[ma`madma~O[!jOy^O~O[!kOy^O~O[!lO`sOd!mO~OW!pOX!pOz!rO{!pO~O[!sOy^O~OW!pOX!pOz!vO{!pO~O",
|
29243 |
stateData: ")z~OPQOSVOTWOVWOWWOXWOiXOyPO!QTO!SUO~OvZOx]O~O^`Oz^O~OPQOQcOSVOTWOVWOWWOXWOyPO!QTO!SUO~ORdO~P!SOteO!PgO~OuhO!RjO~O^lOz^O~OvZOxoO~O^qOz^O~O[vO`sOdwOz^O~ORyO~P!SO^{Oz^O~OteO!P}O~OuhO!R!PO~O^!QOz^O~O[!SOz^O~O[!VO`sOd!WOz^O~Oa!YOz^O~Oz^O[mX`mXdmX~O[!VO`sOd!WO~O^!]Oz^O~O[!_Oz^O~O[!aOz^O~O[!cO`sOd!dOz^O~O[!cO`sOd!dO~Oa!eOz^O~Oz^O{!gO}!hO~Oz^O[ma`madma~O[!kOz^O~O[!lOz^O~O[!mO`sOd!nO~OW!qOX!qO{!sO|!qO~OW!tOX!tO}!sO!O!tO~O[!vOz^O~OW!qOX!qO{!yO|!qO~OW!tOX!tO}!yO!O!tO~O",
|
| 28503 |
goto: "%[wPPPPPPPPPPxxP!OP!UPP!_!iP!oxxxP!u!{#R$Z$j$p$v$|PPPP%SXWORYbXRORYb_t`qru!T!U!bQ!h!YS!o!e!fR!t!nQdRRybXSORYbQYORmYQ[PRn[Q_QQkVjp_krz!R!T!X!Z!^!`!f!i!nQr`QzcQ!RlQ!TqQ!XsQ!ZtQ!^{Q!`!QQ!f!YQ!i!]R!n!eQu`S!UqrU![u!U!bR!b!TQ!q!gR!u!qQbRRxbQfTR|fQiUR!OiSXOYTaRb",
|
29244 |
goto: "%cxPPPPPPPPPPyyP!PP!VPP!`!jP!pyyyP!v!|#S$[$k$q$w$}%TPPPP%ZXWORYbXRORYb_t`qru!T!U!bQ!i!YS!p!e!fR!w!oQdRRybXSORYbQYORmYQ[PRn[Q_QQkVjp_krz!R!T!X!Z!^!`!f!j!oQr`QzcQ!RlQ!TqQ!XsQ!ZtQ!^{Q!`!QQ!f!YQ!j!]R!o!eQu`S!UqrU![u!U!bR!b!TQ!r!gR!x!rQ!u!hR!z!uQbRRxbQfTR|fQiUR!OiSXOYTaRb",
|
| 28504 |
nodeNames: "⚠ StartTag StartCloseTag MissingCloseTag StartCloseTag StartCloseTag Document Text EntityReference CharacterReference Cdata Element EndTag OpenTag TagName Attribute AttributeName Is AttributeValue CloseTag SelfCloseEndTag SelfClosingTag Comment ProcessingInst MismatchedCloseTag DoctypeDecl",
|
29245 |
nodeNames: "⚠ StartTag StartCloseTag MissingCloseTag StartCloseTag StartCloseTag Document Text EntityReference CharacterReference Cdata Element EndTag OpenTag TagName Attribute AttributeName Is AttributeValue CloseTag SelfCloseEndTag SelfClosingTag Comment ProcessingInst MismatchedCloseTag DoctypeDecl",
|
| 28505 |
maxTerm: 47,
|
29246 |
maxTerm: 50,
|
| 28506 |
context: elementContext,
|
29247 |
context: elementContext,
|
| 28507 |
nodeProps: [
|
29248 |
nodeProps: [
|
| 28508 |
["closedBy", 1,"SelfCloseEndTag EndTag",13,"CloseTag MissingCloseTag"],
|
29249 |
["closedBy", 1,"SelfCloseEndTag EndTag",13,"CloseTag MissingCloseTag"],
|
| 28509 |
["openedBy", 12,"StartTag StartCloseTag",19,"OpenTag",20,"StartTag"],
|
29250 |
["openedBy", 12,"StartTag StartCloseTag",19,"OpenTag",20,"StartTag"],
|
| 28510 |
["isolate", -6,13,18,19,21,22,24,""]
|
29251 |
["isolate", -6,13,18,19,21,22,24,""]
|
| 28511 |
],
|
29252 |
],
|
| 28512 |
propSources: [xmlHighlighting],
|
29253 |
propSources: [xmlHighlighting],
|
| 28513 |
skippedNodes: [0],
|
29254 |
skippedNodes: [0],
|
| 28514 |
repeatNodeCount: 8,
|
29255 |
repeatNodeCount: 9,
|
| 28515 |
tokenData: "Jy~R!XOX$nXY&kYZ&kZ]$n]^&k^p$npq&kqr$nrs'ssv$nvw(Zw}$n}!O,^!O!P$n!P!Q.m!Q![$n![!]0V!]!^$n!^!_3h!_!`El!`!aF_!a!bGQ!b!c$n!c!}0V!}#P$n#P#QHj#Q#R$n#R#S0V#S#T$n#T#o0V#o%W$n%W%o0V%o%p$n%p&a0V&a&b$n&b1p0V1p4U$n4U4d0V4d4e$n4e$IS0V$IS$I`$n$I`$Ib0V$Ib$Kh$n$Kh%#t0V%#t&/x$n&/x&Et0V&Et&FV$n&FV;'S0V;'S;:j3b;:j;=`&e<%l?&r$n?&r?Ah0V?Ah?BY$n?BY?Mn0V?MnO$nX$uWVP{WOr$nrs%_sv$nw!^$n!^!_%y!_;'S$n;'S;=`&e<%lO$nP%dTVPOv%_w!^%_!_;'S%_;'S;=`%s<%lO%_P%vP;=`<%l%_W&OT{WOr%ysv%yw;'S%y;'S;=`&_<%lO%yW&bP;=`<%l%yX&hP;=`<%l$n_&t_VP{WyUOX$nXY&kYZ&kZ]$n]^&k^p$npq&kqr$nrs%_sv$nw!^$n!^!_%y!_;'S$n;'S;=`&e<%lO$nZ'zTzYVPOv%_w!^%_!_;'S%_;'S;=`%s<%lO%_~(^ast)c![!]*g!c!}*g#R#S*g#T#o*g%W%o*g%p&a*g&b1p*g4U4d*g4e$IS*g$I`$Ib*g$Kh%#t*g&/x&Et*g&FV;'S*g;'S;:j,W?&r?Ah*g?BY?Mn*g~)fQ!Q![)l#l#m)z~)oQ!Q![)l!]!^)u~)zOX~~)}R!Q![*W!c!i*W#T#Z*W~*ZS!Q![*W!]!^)u!c!i*W#T#Z*W~*jg}!O*g!O!P*g!Q![*g![!]*g!]!^,R!c!}*g#R#S*g#T#o*g$}%O*g%W%o*g%p&a*g&b1p*g1p4U*g4U4d*g4e$IS*g$I`$Ib*g$Je$Jg*g$Kh%#t*g&/x&Et*g&FV;'S*g;'S;:j,W?&r?Ah*g?BY?Mn*g~,WOW~~,ZP;=`<%l*gZ,eYVP{WOr$nrs%_sv$nw}$n}!O-T!O!^$n!^!_%y!_;'S$n;'S;=`&e<%lO$nZ-[YVP{WOr$nrs%_sv$nw!^$n!^!_%y!_!`$n!`!a-z!a;'S$n;'S;=`&e<%lO$nZ.TW|QVP{WOr$nrs%_sv$nw!^$n!^!_%y!_;'S$n;'S;=`&e<%lO$n].tYVP{WOr$nrs%_sv$nw!^$n!^!_%y!_!`$n!`!a/d!a;'S$n;'S;=`&e<%lO$n]/mWdSVP{WOr$nrs%_sv$nw!^$n!^!_%y!_;'S$n;'S;=`&e<%lO$n_0b!O`S^QVP{WOr$nrs%_sv$nw}$n}!O0V!O!P0V!P!Q$n!Q![0V![!]0V!]!^$n!^!_%y!_!c$n!c!}0V!}#R$n#R#S0V#S#T$n#T#o0V#o$}$n$}%O0V%O%W$n%W%o0V%o%p$n%p&a0V&a&b$n&b1p0V1p4U0V4U4d0V4d4e$n4e$IS0V$IS$I`$n$I`$Ib0V$Ib$Je$n$Je$Jg0V$Jg$Kh$n$Kh%#t0V%#t&/x$n&/x&Et0V&Et&FV$n&FV;'S0V;'S;:j3b;:j;=`&e<%l?&r$n?&r?Ah0V?Ah?BY$n?BY?Mn0V?MnO$n_3eP;=`<%l0VX3mW{WOq%yqr4Vsv%yw!a%y!a!bEU!b;'S%y;'S;=`&_<%lO%yX4[]{WOr%ysv%yw}%y}!O5T!O!f%y!f!g6V!g!}%y!}#O;f#O#W%y#W#XAr#X;'S%y;'S;=`&_<%lO%yX5YV{WOr%ysv%yw}%y}!O5o!O;'S%y;'S;=`&_<%lO%yX5vT}P{WOr%ysv%yw;'S%y;'S;=`&_<%lO%yX6[V{WOr%ysv%yw!q%y!q!r6q!r;'S%y;'S;=`&_<%lO%yX6vV{WOr%ysv%yw!e%y!e!f7]!f;'S%y;'S;=`&_<%lO%yX7bV{WOr%ysv%yw!v%y!v!w7w!w;'S%y;'S;=`&_<%lO%yX7|V{WOr%ysv%yw!{%y!{!|8c!|;'S%y;'S;=`&_<%lO%yX8hV{WOr%ysv%yw!r%y!r!s8}!s;'S%y;'S;=`&_<%lO%yX9SV{WOr%ysv%yw!g%y!g!h9i!h;'S%y;'S;=`&_<%lO%yX9nX{WOr9irs:Zsv9ivw:Zw!`9i!`!a:x!a;'S9i;'S;=`;`<%lO9iP:^TO!`:Z!`!a:m!a;'S:Z;'S;=`:r<%lO:ZP:rOiPP:uP;=`<%l:ZX;PTiP{WOr%ysv%yw;'S%y;'S;=`&_<%lO%yX;cP;=`<%l9iX;kX{WOr%ysv%yw!e%y!e!f<W!f#V%y#V#W?f#W;'S%y;'S;=`&_<%lO%yX<]V{WOr%ysv%yw!f%y!f!g<r!g;'S%y;'S;=`&_<%lO%yX<wV{WOr%ysv%yw!c%y!c!d=^!d;'S%y;'S;=`&_<%lO%yX=cV{WOr%ysv%yw!v%y!v!w=x!w;'S%y;'S;=`&_<%lO%yX=}V{WOr%ysv%yw!c%y!c!d>d!d;'S%y;'S;=`&_<%lO%yX>iV{WOr%ysv%yw!}%y!}#O?O#O;'S%y;'S;=`&_<%lO%yX?VT{WxPOr%ysv%yw;'S%y;'S;=`&_<%lO%yX?kV{WOr%ysv%yw#W%y#W#X@Q#X;'S%y;'S;=`&_<%lO%yX@VV{WOr%ysv%yw#T%y#T#U@l#U;'S%y;'S;=`&_<%lO%yX@qV{WOr%ysv%yw#h%y#h#iAW#i;'S%y;'S;=`&_<%lO%yXA]V{WOr%ysv%yw#T%y#T#U>d#U;'S%y;'S;=`&_<%lO%yXAwV{WOr%ysv%yw#c%y#c#dB^#d;'S%y;'S;=`&_<%lO%yXBcV{WOr%ysv%yw#V%y#V#WBx#W;'S%y;'S;=`&_<%lO%yXB}V{WOr%ysv%yw#h%y#h#iCd#i;'S%y;'S;=`&_<%lO%yXCiV{WOr%ysv%yw#m%y#m#nDO#n;'S%y;'S;=`&_<%lO%yXDTV{WOr%ysv%yw#d%y#d#eDj#e;'S%y;'S;=`&_<%lO%yXDoV{WOr%ysv%yw#X%y#X#Y9i#Y;'S%y;'S;=`&_<%lO%yXE]T!PP{WOr%ysv%yw;'S%y;'S;=`&_<%lO%yZEuWaQVP{WOr$nrs%_sv$nw!^$n!^!_%y!_;'S$n;'S;=`&e<%lO$n_FhW[UVP{WOr$nrs%_sv$nw!^$n!^!_%y!_;'S$n;'S;=`&e<%lO$nZGXYVP{WOr$nrs%_sv$nw!^$n!^!_%y!_!`$n!`!aGw!a;'S$n;'S;=`&e<%lO$nZHQW!OQVP{WOr$nrs%_sv$nw!^$n!^!_%y!_;'S$n;'S;=`&e<%lO$nZHqYVP{WOr$nrs%_sv$nw!^$n!^!_%y!_#P$n#P#QIa#Q;'S$n;'S;=`&e<%lO$nZIhYVP{WOr$nrs%_sv$nw!^$n!^!_%y!_!`$n!`!aJW!a;'S$n;'S;=`&e<%lO$nZJaWwQVP{WOr$nrs%_sv$nw!^$n!^!_%y!_;'S$n;'S;=`&e<%lO$n",
|
29256 |
tokenData: "!)v~R!YOX$qXY)iYZ)iZ]$q]^)i^p$qpq)iqr$qrs*vsv$qvw+fwx/ix}$q}!O0[!O!P$q!P!Q2z!Q![$q![!]4n!]!^$q!^!_8U!_!`!#t!`!a!$l!a!b!%d!b!c$q!c!}4n!}#P$q#P#Q!'W#Q#R$q#R#S4n#S#T$q#T#o4n#o%W$q%W%o4n%o%p$q%p&a4n&a&b$q&b1p4n1p4U$q4U4d4n4d4e$q4e$IS4n$IS$I`$q$I`$Ib4n$Ib$Kh$q$Kh%#t4n%#t&/x$q&/x&Et4n&Et&FV$q&FV;'S4n;'S;:j8O;:j;=`)c<%l?&r$q?&r?Ah4n?Ah?BY$q?BY?Mn4n?MnO$qi$zXVP|W!O`Or$qrs%gsv$qwx'^x!^$q!^!_(o!_;'S$q;'S;=`)c<%lO$qa%nVVP!O`Ov%gwx&Tx!^%g!^!_&o!_;'S%g;'S;=`'W<%lO%gP&YTVPOv&Tw!^&T!_;'S&T;'S;=`&i<%lO&TP&lP;=`<%l&T`&tS!O`Ov&ox;'S&o;'S;=`'Q<%lO&o`'TP;=`<%l&oa'ZP;=`<%l%gX'eWVP|WOr'^rs&Tsv'^w!^'^!^!_'}!_;'S'^;'S;=`(i<%lO'^W(ST|WOr'}sv'}w;'S'};'S;=`(c<%lO'}W(fP;=`<%l'}X(lP;=`<%l'^h(vV|W!O`Or(ors&osv(owx'}x;'S(o;'S;=`)]<%lO(oh)`P;=`<%l(oi)fP;=`<%l$qo)t`VP|W!O`zUOX$qXY)iYZ)iZ]$q]^)i^p$qpq)iqr$qrs%gsv$qwx'^x!^$q!^!_(o!_;'S$q;'S;=`)c<%lO$qk+PV{YVP!O`Ov%gwx&Tx!^%g!^!_&o!_;'S%g;'S;=`'W<%lO%g~+iast,n![!]-r!c!}-r#R#S-r#T#o-r%W%o-r%p&a-r&b1p-r4U4d-r4e$IS-r$I`$Ib-r$Kh%#t-r&/x&Et-r&FV;'S-r;'S;:j/c?&r?Ah-r?BY?Mn-r~,qQ!Q![,w#l#m-V~,zQ!Q![,w!]!^-Q~-VOX~~-YR!Q![-c!c!i-c#T#Z-c~-fS!Q![-c!]!^-Q!c!i-c#T#Z-c~-ug}!O-r!O!P-r!Q![-r![!]-r!]!^/^!c!}-r#R#S-r#T#o-r$}%O-r%W%o-r%p&a-r&b1p-r1p4U-r4U4d-r4e$IS-r$I`$Ib-r$Je$Jg-r$Kh%#t-r&/x&Et-r&FV;'S-r;'S;:j/c?&r?Ah-r?BY?Mn-r~/cOW~~/fP;=`<%l-rk/rW}bVP|WOr'^rs&Tsv'^w!^'^!^!_'}!_;'S'^;'S;=`(i<%lO'^k0eZVP|W!O`Or$qrs%gsv$qwx'^x}$q}!O1W!O!^$q!^!_(o!_;'S$q;'S;=`)c<%lO$qk1aZVP|W!O`Or$qrs%gsv$qwx'^x!^$q!^!_(o!_!`$q!`!a2S!a;'S$q;'S;=`)c<%lO$qk2_X!PQVP|W!O`Or$qrs%gsv$qwx'^x!^$q!^!_(o!_;'S$q;'S;=`)c<%lO$qm3TZVP|W!O`Or$qrs%gsv$qwx'^x!^$q!^!_(o!_!`$q!`!a3v!a;'S$q;'S;=`)c<%lO$qm4RXdSVP|W!O`Or$qrs%gsv$qwx'^x!^$q!^!_(o!_;'S$q;'S;=`)c<%lO$qo4{!P`S^QVP|W!O`Or$qrs%gsv$qwx'^x}$q}!O4n!O!P4n!P!Q$q!Q![4n![!]4n!]!^$q!^!_(o!_!c$q!c!}4n!}#R$q#R#S4n#S#T$q#T#o4n#o$}$q$}%O4n%O%W$q%W%o4n%o%p$q%p&a4n&a&b$q&b1p4n1p4U4n4U4d4n4d4e$q4e$IS4n$IS$I`$q$I`$Ib4n$Ib$Je$q$Je$Jg4n$Jg$Kh$q$Kh%#t4n%#t&/x$q&/x&Et4n&Et&FV$q&FV;'S4n;'S;:j8O;:j;=`)c<%l?&r$q?&r?Ah4n?Ah?BY$q?BY?Mn4n?MnO$qo8RP;=`<%l4ni8]Y|W!O`Oq(oqr8{rs&osv(owx'}x!a(o!a!b!#U!b;'S(o;'S;=`)]<%lO(oi9S_|W!O`Or(ors&osv(owx'}x}(o}!O:R!O!f(o!f!g;e!g!}(o!}#ODh#O#W(o#W#XLp#X;'S(o;'S;=`)]<%lO(oi:YX|W!O`Or(ors&osv(owx'}x}(o}!O:u!O;'S(o;'S;=`)]<%lO(oi;OV!QP|W!O`Or(ors&osv(owx'}x;'S(o;'S;=`)]<%lO(oi;lX|W!O`Or(ors&osv(owx'}x!q(o!q!r<X!r;'S(o;'S;=`)]<%lO(oi<`X|W!O`Or(ors&osv(owx'}x!e(o!e!f<{!f;'S(o;'S;=`)]<%lO(oi=SX|W!O`Or(ors&osv(owx'}x!v(o!v!w=o!w;'S(o;'S;=`)]<%lO(oi=vX|W!O`Or(ors&osv(owx'}x!{(o!{!|>c!|;'S(o;'S;=`)]<%lO(oi>jX|W!O`Or(ors&osv(owx'}x!r(o!r!s?V!s;'S(o;'S;=`)]<%lO(oi?^X|W!O`Or(ors&osv(owx'}x!g(o!g!h?y!h;'S(o;'S;=`)]<%lO(oi@QY|W!O`Or?yrs@psv?yvwA[wxBdx!`?y!`!aCr!a;'S?y;'S;=`Db<%lO?ya@uV!O`Ov@pvxA[x!`@p!`!aAy!a;'S@p;'S;=`B^<%lO@pPA_TO!`A[!`!aAn!a;'SA[;'S;=`As<%lOA[PAsOiPPAvP;=`<%lA[aBQSiP!O`Ov&ox;'S&o;'S;=`'Q<%lO&oaBaP;=`<%l@pXBiX|WOrBdrsA[svBdvwA[w!`Bd!`!aCU!a;'SBd;'S;=`Cl<%lOBdXC]TiP|WOr'}sv'}w;'S'};'S;=`(c<%lO'}XCoP;=`<%lBdiC{ViP|W!O`Or(ors&osv(owx'}x;'S(o;'S;=`)]<%lO(oiDeP;=`<%l?yiDoZ|W!O`Or(ors&osv(owx'}x!e(o!e!fEb!f#V(o#V#WIr#W;'S(o;'S;=`)]<%lO(oiEiX|W!O`Or(ors&osv(owx'}x!f(o!f!gFU!g;'S(o;'S;=`)]<%lO(oiF]X|W!O`Or(ors&osv(owx'}x!c(o!c!dFx!d;'S(o;'S;=`)]<%lO(oiGPX|W!O`Or(ors&osv(owx'}x!v(o!v!wGl!w;'S(o;'S;=`)]<%lO(oiGsX|W!O`Or(ors&osv(owx'}x!c(o!c!dH`!d;'S(o;'S;=`)]<%lO(oiHgX|W!O`Or(ors&osv(owx'}x!}(o!}#OIS#O;'S(o;'S;=`)]<%lO(oiI]V|W!O`yPOr(ors&osv(owx'}x;'S(o;'S;=`)]<%lO(oiIyX|W!O`Or(ors&osv(owx'}x#W(o#W#XJf#X;'S(o;'S;=`)]<%lO(oiJmX|W!O`Or(ors&osv(owx'}x#T(o#T#UKY#U;'S(o;'S;=`)]<%lO(oiKaX|W!O`Or(ors&osv(owx'}x#h(o#h#iK|#i;'S(o;'S;=`)]<%lO(oiLTX|W!O`Or(ors&osv(owx'}x#T(o#T#UH`#U;'S(o;'S;=`)]<%lO(oiLwX|W!O`Or(ors&osv(owx'}x#c(o#c#dMd#d;'S(o;'S;=`)]<%lO(oiMkX|W!O`Or(ors&osv(owx'}x#V(o#V#WNW#W;'S(o;'S;=`)]<%lO(oiN_X|W!O`Or(ors&osv(owx'}x#h(o#h#iNz#i;'S(o;'S;=`)]<%lO(oi! RX|W!O`Or(ors&osv(owx'}x#m(o#m#n! n#n;'S(o;'S;=`)]<%lO(oi! uX|W!O`Or(ors&osv(owx'}x#d(o#d#e!!b#e;'S(o;'S;=`)]<%lO(oi!!iX|W!O`Or(ors&osv(owx'}x#X(o#X#Y?y#Y;'S(o;'S;=`)]<%lO(oi!#_V!SP|W!O`Or(ors&osv(owx'}x;'S(o;'S;=`)]<%lO(ok!$PXaQVP|W!O`Or$qrs%gsv$qwx'^x!^$q!^!_(o!_;'S$q;'S;=`)c<%lO$qo!$wX[UVP|W!O`Or$qrs%gsv$qwx'^x!^$q!^!_(o!_;'S$q;'S;=`)c<%lO$qk!%mZVP|W!O`Or$qrs%gsv$qwx'^x!^$q!^!_(o!_!`$q!`!a!&`!a;'S$q;'S;=`)c<%lO$qk!&kX!RQVP|W!O`Or$qrs%gsv$qwx'^x!^$q!^!_(o!_;'S$q;'S;=`)c<%lO$qk!'aZVP|W!O`Or$qrs%gsv$qwx'^x!^$q!^!_(o!_#P$q#P#Q!(S#Q;'S$q;'S;=`)c<%lO$qk!(]ZVP|W!O`Or$qrs%gsv$qwx'^x!^$q!^!_(o!_!`$q!`!a!)O!a;'S$q;'S;=`)c<%lO$qk!)ZXxQVP|W!O`Or$qrs%gsv$qwx'^x!^$q!^!_(o!_;'S$q;'S;=`)c<%lO$q",
|
| 28516 |
tokenizers: [startTag, commentContent, piContent, cdataContent, 0, 1, 2, 3],
|
29257 |
tokenizers: [startTag, commentContent, piContent, cdataContent, 0, 1, 2, 3, 4],
|
| 28517 |
topRules: {"Document":[0,6]},
|
29258 |
topRules: {"Document":[0,6]},
|
| 28518 |
tokenPrec: 0
|
29259 |
tokenPrec: 0
|
| Línea 28519... |
Línea 29260... |
| 28519 |
});
|
29260 |
});
|