textmode.js 0.1.9-beta.5 → 0.1.9-beta.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/textmode.esm.js +543 -555
- package/dist/textmode.esm.min.js +597 -609
- package/dist/textmode.umd.js +14 -14
- package/dist/textmode.umd.min.js +15 -15
- package/dist/types/textmode/font/utils/FontTableReader.d.ts +2 -7
- package/package.json +1 -1
package/dist/textmode.esm.js
CHANGED
|
@@ -34,12 +34,12 @@ class I extends Error {
|
|
|
34
34
|
}
|
|
35
35
|
}
|
|
36
36
|
var eA = ((E) => (E[E.SILENT = 0] = "SILENT", E[E.WARNING = 1] = "WARNING", E[E.ERROR = 2] = "ERROR", E[E.THROW = 3] = "THROW", E))(eA || {});
|
|
37
|
-
const
|
|
37
|
+
const v = class v {
|
|
38
38
|
constructor() {
|
|
39
39
|
o(this, "h", { globalLevel: 3 });
|
|
40
40
|
}
|
|
41
41
|
static l() {
|
|
42
|
-
return
|
|
42
|
+
return v.o || (v.o = new v()), v.o;
|
|
43
43
|
}
|
|
44
44
|
D(A, t) {
|
|
45
45
|
const e = "%c[textmode.js] Oops! (╯°□°)╯︵ Something went wrong in your code.", s = "color: #f44336; font-weight: bold; background: #ffebee; padding: 2px 6px; border-radius: 3px;";
|
|
@@ -61,13 +61,13 @@ const b = class b {
|
|
|
61
61
|
this.h.globalLevel = A;
|
|
62
62
|
}
|
|
63
63
|
};
|
|
64
|
-
o(
|
|
65
|
-
let
|
|
66
|
-
const u =
|
|
64
|
+
o(v, "o", null);
|
|
65
|
+
let S = v;
|
|
66
|
+
const u = S.l(), X = /* @__PURE__ */ new WeakMap();
|
|
67
67
|
function G(E, A) {
|
|
68
68
|
X.set(E, A);
|
|
69
69
|
}
|
|
70
|
-
function
|
|
70
|
+
function J(E) {
|
|
71
71
|
return X.get(E);
|
|
72
72
|
}
|
|
73
73
|
class K {
|
|
@@ -273,7 +273,7 @@ class Z {
|
|
|
273
273
|
e.disableVertexAttribArray(A), e.disableVertexAttribArray(t);
|
|
274
274
|
}
|
|
275
275
|
sA(A, t) {
|
|
276
|
-
const e = this.P, s =
|
|
276
|
+
const e = this.P, s = J(e) || [0, 0, e.canvas.width, e.canvas.height];
|
|
277
277
|
return { nx: A / s[2] * 2 - 1, ny: 1 - t / s[3] * 2 };
|
|
278
278
|
}
|
|
279
279
|
rA(A, t, e, s) {
|
|
@@ -310,10 +310,10 @@ class rA extends Z {
|
|
|
310
310
|
const g = r / 2, h = this.sA(A - g, t - g), a = this.sA(A + g, t + g);
|
|
311
311
|
this.rA(h.nx, h.ny, a.nx, a.ny);
|
|
312
312
|
} else {
|
|
313
|
-
const g = -B / Q, h = i / Q, a = r / 2,
|
|
314
|
-
this.AA(),
|
|
315
|
-
const q = new Float32Array([y.nx, y.ny, 0, 0,
|
|
316
|
-
|
|
313
|
+
const g = -B / Q, h = i / Q, a = r / 2, D = A + g * a, c = t + h * a, l = A - g * a, d = t - h * a, C = e + g * a, P = s + h * a, p = e - g * a, m = s - h * a, y = this.sA(D, c), b = this.sA(l, d), _ = this.sA(C, P), V = this.sA(p, m), F = this.P;
|
|
314
|
+
this.AA(), F.bindBuffer(F.ARRAY_BUFFER, this.Z);
|
|
315
|
+
const q = new Float32Array([y.nx, y.ny, 0, 0, b.nx, b.ny, 0, 1, _.nx, _.ny, 1, 0, b.nx, b.ny, 0, 1, V.nx, V.ny, 1, 1, _.nx, _.ny, 1, 0]);
|
|
316
|
+
F.bufferData(F.ARRAY_BUFFER, q, F.DYNAMIC_DRAW);
|
|
317
317
|
}
|
|
318
318
|
const n = this.tA();
|
|
319
319
|
this.P.drawArrays(this.P.TRIANGLES, 0, 6), this.eA(n.positionLoc, n.texLoc);
|
|
@@ -400,8 +400,8 @@ in vec2 a_position;in vec2 a_texCoord;out vec2 v_uv;uniform float u_rotation;uni
|
|
|
400
400
|
}
|
|
401
401
|
$A(A, t, e, s) {
|
|
402
402
|
if (this.gA !== null) {
|
|
403
|
-
const { centerX: h, centerY: a, radians:
|
|
404
|
-
return this.FA("u_rotation",
|
|
403
|
+
const { centerX: h, centerY: a, radians: D, aspectRatio: c } = this.YA(A, t, e, s);
|
|
404
|
+
return this.FA("u_rotation", D), this.FA("u_center", [h, a]), this.FA("u_aspectRatio", c), this.nA.BA(A, t, e, s), void (this.gA = null);
|
|
405
405
|
}
|
|
406
406
|
const r = this.oA;
|
|
407
407
|
let i = 0, B = 0, Q = 0, n = 1;
|
|
@@ -410,22 +410,22 @@ in vec2 a_position;in vec2 a_texCoord;out vec2 v_uv;uniform float u_rotation;uni
|
|
|
410
410
|
}
|
|
411
411
|
TA(A, t, e, s) {
|
|
412
412
|
if (this.gA !== null) {
|
|
413
|
-
const l = (A + e) / 2, d = (t + s) / 2,
|
|
414
|
-
this.FA("u_rotation", y), this.FA("u_center", [p, m]), this.FA("u_aspectRatio",
|
|
413
|
+
const l = (A + e) / 2, d = (t + s) / 2, C = Math.abs(e - A) || 1, P = Math.abs(s - t) || 1, { centerX: p, centerY: m, radians: y, aspectRatio: b } = this.YA(l - C / 2, d - P / 2, C, P);
|
|
414
|
+
this.FA("u_rotation", y), this.FA("u_center", [p, m]), this.FA("u_aspectRatio", b);
|
|
415
415
|
const _ = this.DA > 0 ? this.DA : 1;
|
|
416
416
|
return this.aA.QA(A, t, e, s, _), void (this.gA = null);
|
|
417
417
|
}
|
|
418
418
|
if (!this.CA || this.DA <= 0) return;
|
|
419
419
|
const r = this.oA, i = (A + e) / 2, B = (t + s) / 2, Q = Math.abs(e - A) || 1, n = Math.abs(s - t) || 1, g = this.uA !== 0;
|
|
420
|
-
let h = 0, a = 0,
|
|
420
|
+
let h = 0, a = 0, D = 0, c = 1;
|
|
421
421
|
if (g) {
|
|
422
422
|
const l = this.YA(i - Q / 2, B - n / 2, Q, n);
|
|
423
|
-
h = l.centerX, a = l.centerY,
|
|
423
|
+
h = l.centerX, a = l.centerY, D = l.radians, c = l.aspectRatio;
|
|
424
424
|
}
|
|
425
|
-
this.IA(r), this.FA("u_color", this.cA), g && (this.FA("u_rotation",
|
|
425
|
+
this.IA(r), this.FA("u_color", this.cA), g && (this.FA("u_rotation", D), this.FA("u_center", [h, a]), this.FA("u_aspectRatio", c)), this.aA.QA(A, t, e, s, this.DA);
|
|
426
426
|
}
|
|
427
427
|
YA(A, t, e, s) {
|
|
428
|
-
const r =
|
|
428
|
+
const r = J(this.P) || [0, 0, this.P.canvas.width, this.P.canvas.height], i = r[2], B = r[3], Q = i / B;
|
|
429
429
|
return { centerX: (A + e / 2) / i * 2 - 1, centerY: 1 - (t + s / 2) / B * 2, radians: this.uA * Math.PI / 180, aspectRatio: Q };
|
|
430
430
|
}
|
|
431
431
|
SA(A, t, e = {}) {
|
|
@@ -479,14 +479,14 @@ const f = { readShort: (E, A) => (f.t.uint16[0] = E[A] << 8 | E[A + 1], f.t.int1
|
|
|
479
479
|
const h = s.readUint(E, A);
|
|
480
480
|
A += 4;
|
|
481
481
|
const a = `p${n}e${g}`;
|
|
482
|
-
let
|
|
483
|
-
if (
|
|
482
|
+
let D = B.indexOf(h);
|
|
483
|
+
if (D === -1) {
|
|
484
484
|
let c;
|
|
485
|
-
|
|
485
|
+
D = e.tables.length, B.push(h);
|
|
486
486
|
const l = r(E, h);
|
|
487
487
|
c = l === 4 ? this.parse4(E, h) : l === 12 ? this.parse12(E, h) : { format: l }, e.tables.push(c);
|
|
488
488
|
}
|
|
489
|
-
e.ids[a] != null && console.warn("Multiple tables for one platform+encoding: " + a), e.ids[a] =
|
|
489
|
+
e.ids[a] != null && console.warn("Multiple tables for one platform+encoding: " + a), e.ids[a] = D;
|
|
490
490
|
}
|
|
491
491
|
return e;
|
|
492
492
|
}, parse4(E, A) {
|
|
@@ -533,7 +533,7 @@ const f = { readShort: (E, A) => (f.t.uint16[0] = E[A] << 8 | E[A + 1], f.t.int1
|
|
|
533
533
|
for (; h < Q; ) n = s.readUshort(E, A + (h << 2)), g = s.readShort(E, A + (h << 2) + 2), r.push(n), i.push(g), h++;
|
|
534
534
|
for (; h < B; ) r.push(n), i.push(g), h++;
|
|
535
535
|
return { aWidth: r, lsBearing: i };
|
|
536
|
-
} },
|
|
536
|
+
} }, $ = { cmap: BA, head: EA, hhea: oA, maxp: { parseTab(E, A, t) {
|
|
537
537
|
const e = f;
|
|
538
538
|
return e.readUint(E, A), A += 4, { numGlyphs: e.readUshort(E, A) };
|
|
539
539
|
} }, hmtx: QA, loca: { parseTab(E, A, t, e) {
|
|
@@ -564,29 +564,29 @@ const f = { readShort: (E, A) => (f.t.uint16[0] = E[A] << 8 | E[A + 1], f.t.int1
|
|
|
564
564
|
const n = B.endPts[B.noc - 1] + 1;
|
|
565
565
|
B.flags = [];
|
|
566
566
|
for (let a = 0; a < n; a++) {
|
|
567
|
-
const
|
|
568
|
-
if (i++, B.flags.push(
|
|
567
|
+
const D = e[i];
|
|
568
|
+
if (i++, B.flags.push(D), 8 & D) {
|
|
569
569
|
const c = e[i];
|
|
570
570
|
i++;
|
|
571
|
-
for (let l = 0; l < c; l++) B.flags.push(
|
|
571
|
+
for (let l = 0; l < c; l++) B.flags.push(D), a++;
|
|
572
572
|
}
|
|
573
573
|
}
|
|
574
574
|
B.xs = [];
|
|
575
575
|
for (let a = 0; a < n; a++) {
|
|
576
|
-
const
|
|
577
|
-
2 &
|
|
576
|
+
const D = B.flags[a], c = !!(16 & D);
|
|
577
|
+
2 & D ? (B.xs.push(c ? e[i] : -e[i]), i++) : c ? B.xs.push(0) : (B.xs.push(t.readShort(e, i)), i += 2);
|
|
578
578
|
}
|
|
579
579
|
B.ys = [];
|
|
580
580
|
for (let a = 0; a < n; a++) {
|
|
581
|
-
const
|
|
582
|
-
4 &
|
|
581
|
+
const D = B.flags[a], c = !!(32 & D);
|
|
582
|
+
4 & D ? (B.ys.push(c ? e[i] : -e[i]), i++) : c ? B.ys.push(0) : (B.ys.push(t.readShort(e, i)), i += 2);
|
|
583
583
|
}
|
|
584
584
|
let g = 0, h = 0;
|
|
585
585
|
for (let a = 0; a < n; a++) g += B.xs[a], h += B.ys[a], B.xs[a] = g, B.ys[a] = h;
|
|
586
586
|
} else B.parts = [], B.endPts = [], B.flags = [], B.xs = [], B.ys = [];
|
|
587
587
|
return B;
|
|
588
588
|
} } }, w = { parse: (E) => [((A, t, e, s) => {
|
|
589
|
-
const r =
|
|
589
|
+
const r = $, i = { HA: A, LA: t, zA: e };
|
|
590
590
|
for (const B in r) {
|
|
591
591
|
const Q = B, n = w.findTable(A, Q, e);
|
|
592
592
|
if (n) {
|
|
@@ -607,52 +607,40 @@ const f = { readShort: (E, A) => (f.t.uint16[0] = E[A] << 8 | E[A + 1], f.t.int1
|
|
|
607
607
|
r += 16;
|
|
608
608
|
}
|
|
609
609
|
return null;
|
|
610
|
-
}, T:
|
|
610
|
+
}, T: $, B: f };
|
|
611
611
|
class U {
|
|
612
612
|
constructor() {
|
|
613
613
|
o(this, "JA", /* @__PURE__ */ new Map());
|
|
614
614
|
o(this, "KA", /* @__PURE__ */ new Map());
|
|
615
615
|
}
|
|
616
|
-
WA(A) {
|
|
617
|
-
const t = this.jA(A);
|
|
618
|
-
if (this.KA.has(t)) return this.KA.get(t);
|
|
619
|
-
const e = A.cmap;
|
|
620
|
-
if (!e || !e.tables) return this.KA.set(t, null), null;
|
|
621
|
-
const s = ["p3e1", "p3e10", "p0e3", "p0e4"];
|
|
622
|
-
for (const i of s) if (e.ids[i] !== void 0) {
|
|
623
|
-
const B = e.tables[e.ids[i]];
|
|
624
|
-
return this.KA.set(t, B), B;
|
|
625
|
-
}
|
|
626
|
-
const r = e.tables[0] || null;
|
|
627
|
-
return this.KA.set(t, r), r;
|
|
628
|
-
}
|
|
629
|
-
NA(A, t) {
|
|
616
|
+
WA(A, t) {
|
|
630
617
|
const e = `${this.jA(A)}_${t}`;
|
|
631
618
|
if (this.JA.has(e)) return this.JA.get(e);
|
|
632
|
-
const s =
|
|
633
|
-
if (!s) return this.JA.set(e, 0), 0;
|
|
619
|
+
const s = A.cmap;
|
|
620
|
+
if (!s || !s.tables) return this.JA.set(e, 0), 0;
|
|
634
621
|
let r = 0;
|
|
635
|
-
|
|
622
|
+
for (const i of s.tables) if (i.format === 4 ? r = this.NA(t, i) : i.format === 12 && (r = this.ZA(t, i)), r > 0) break;
|
|
623
|
+
return this.JA.set(e, r), r;
|
|
636
624
|
}
|
|
637
|
-
|
|
625
|
+
XA(A, t) {
|
|
638
626
|
const e = t.codePointAt(0);
|
|
639
|
-
return e === void 0 ? 0 : this.
|
|
627
|
+
return e === void 0 ? 0 : this.WA(A, e);
|
|
640
628
|
}
|
|
641
|
-
|
|
629
|
+
qA(A, t) {
|
|
642
630
|
const e = A.hmtx;
|
|
643
631
|
return e && e.aWidth && e.aWidth.length !== 0 ? t < e.aWidth.length ? e.aWidth[t] : e.aWidth[e.aWidth.length - 1] : 0;
|
|
644
632
|
}
|
|
645
|
-
|
|
633
|
+
At(A, t) {
|
|
646
634
|
const e = t / A.head.unitsPerEm, s = A.hhea.ascender * e, r = A.hhea.descender * e, i = A.hhea.lineGap * e;
|
|
647
635
|
return { ascender: s, descender: r, lineGap: i, lineHeight: s - r + i, unitsPerEm: A.head.unitsPerEm, scale: e };
|
|
648
636
|
}
|
|
649
|
-
|
|
637
|
+
tt() {
|
|
650
638
|
this.JA.clear(), this.KA.clear();
|
|
651
639
|
}
|
|
652
640
|
jA(A) {
|
|
653
641
|
return `${A.zA}_${A.HA.length}`;
|
|
654
642
|
}
|
|
655
|
-
|
|
643
|
+
NA(A, t) {
|
|
656
644
|
const e = t.endCount.length;
|
|
657
645
|
let s = -1;
|
|
658
646
|
for (let r = 0; r < e; r++) if (A <= t.endCount[r]) {
|
|
@@ -670,7 +658,7 @@ class U {
|
|
|
670
658
|
}
|
|
671
659
|
return 0;
|
|
672
660
|
}
|
|
673
|
-
|
|
661
|
+
ZA(A, t) {
|
|
674
662
|
const e = t.groups.length / 3;
|
|
675
663
|
for (let s = 0; s < e; s++) {
|
|
676
664
|
const r = t.groups[3 * s], i = t.groups[3 * s + 1], B = t.groups[3 * s + 2];
|
|
@@ -681,43 +669,43 @@ class U {
|
|
|
681
669
|
}
|
|
682
670
|
class nA {
|
|
683
671
|
constructor(A) {
|
|
684
|
-
o(this, "
|
|
685
|
-
this.
|
|
672
|
+
o(this, "et");
|
|
673
|
+
this.et = A;
|
|
686
674
|
}
|
|
687
|
-
|
|
675
|
+
st(A) {
|
|
688
676
|
var e;
|
|
689
677
|
const t = [];
|
|
690
678
|
return (e = A == null ? void 0 : A.cmap) != null && e.tables ? (A.cmap.tables.forEach((s) => {
|
|
691
679
|
if (s.format === 4) {
|
|
692
|
-
const r = this.
|
|
680
|
+
const r = this.rt(s);
|
|
693
681
|
t.push(...r);
|
|
694
682
|
} else if (s.format === 12) {
|
|
695
|
-
const r = this.
|
|
683
|
+
const r = this.Bt(s);
|
|
696
684
|
t.push(...r);
|
|
697
685
|
}
|
|
698
686
|
}), [...new Set(t)]) : [];
|
|
699
687
|
}
|
|
700
|
-
|
|
701
|
-
return this.
|
|
688
|
+
it(A, t) {
|
|
689
|
+
return this.et.XA(A, t) > 0;
|
|
702
690
|
}
|
|
703
|
-
|
|
704
|
-
for (const e of t) if (!this.
|
|
691
|
+
Qt(A, t) {
|
|
692
|
+
for (const e of t) if (!this.it(A, e)) return !1;
|
|
705
693
|
return !0;
|
|
706
694
|
}
|
|
707
|
-
|
|
708
|
-
return t.filter((e) => this.
|
|
695
|
+
Et(A, t) {
|
|
696
|
+
return t.filter((e) => this.it(A, e));
|
|
709
697
|
}
|
|
710
|
-
|
|
711
|
-
return A.filter((t) => this.
|
|
698
|
+
ot(A) {
|
|
699
|
+
return A.filter((t) => this.gt(t));
|
|
712
700
|
}
|
|
713
|
-
|
|
701
|
+
rt(A) {
|
|
714
702
|
const t = [];
|
|
715
703
|
if (!(A.startCount && A.endCount && A.idRangeOffset && A.idDelta)) return t;
|
|
716
704
|
for (let e = 0; e < A.startCount.length; e++) {
|
|
717
705
|
const s = A.startCount[e], r = A.endCount[e];
|
|
718
706
|
if (s !== 65535 || r !== 65535) {
|
|
719
707
|
for (let i = s; i <= r; i++)
|
|
720
|
-
if (this.
|
|
708
|
+
if (this.nt(A, i, e) > 0) try {
|
|
721
709
|
const B = String.fromCodePoint(i);
|
|
722
710
|
t.push(B);
|
|
723
711
|
} catch {
|
|
@@ -726,7 +714,7 @@ class nA {
|
|
|
726
714
|
}
|
|
727
715
|
return t;
|
|
728
716
|
}
|
|
729
|
-
|
|
717
|
+
Bt(A) {
|
|
730
718
|
const t = [];
|
|
731
719
|
if (!A.groups) return t;
|
|
732
720
|
for (let e = 0; e < A.groups.length; e += 3) {
|
|
@@ -740,7 +728,7 @@ class nA {
|
|
|
740
728
|
}
|
|
741
729
|
return t;
|
|
742
730
|
}
|
|
743
|
-
|
|
731
|
+
nt(A, t, e) {
|
|
744
732
|
if (A.idRangeOffset[e] === 0) return t + A.idDelta[e] & 65535;
|
|
745
733
|
{
|
|
746
734
|
const s = A.idRangeOffset[e] / 2 + (t - A.startCount[e]) - (A.startCount.length - e);
|
|
@@ -751,58 +739,58 @@ class nA {
|
|
|
751
739
|
}
|
|
752
740
|
return 0;
|
|
753
741
|
}
|
|
754
|
-
|
|
742
|
+
gt(A) {
|
|
755
743
|
const t = A.codePointAt(0) || 0;
|
|
756
744
|
return !(t >= 0 && t <= 31 && t !== 9 && t !== 10 && t !== 13 || t >= 127 && t <= 159);
|
|
757
745
|
}
|
|
758
746
|
}
|
|
759
747
|
class gA {
|
|
760
748
|
constructor() {
|
|
761
|
-
o(this, "
|
|
749
|
+
o(this, "ht");
|
|
762
750
|
const A = new U();
|
|
763
|
-
this.
|
|
751
|
+
this.ht = new nA(A);
|
|
764
752
|
}
|
|
765
753
|
extractCharacters(A) {
|
|
766
|
-
return this.
|
|
754
|
+
return this.ht.st(A);
|
|
767
755
|
}
|
|
768
756
|
filterProblematicCharacters(A) {
|
|
769
|
-
return this.
|
|
757
|
+
return this.ht.ot(A);
|
|
770
758
|
}
|
|
771
759
|
characterExists(A, t) {
|
|
772
|
-
return this.
|
|
760
|
+
return this.ht.it(A, t);
|
|
773
761
|
}
|
|
774
762
|
allCharactersExist(A, t) {
|
|
775
|
-
return this.
|
|
763
|
+
return this.ht.Qt(A, t);
|
|
776
764
|
}
|
|
777
765
|
}
|
|
778
766
|
class aA {
|
|
779
767
|
constructor(A) {
|
|
768
|
+
o(this, "lt");
|
|
780
769
|
o(this, "ct");
|
|
781
770
|
o(this, "Dt");
|
|
782
771
|
o(this, "Ct");
|
|
783
|
-
|
|
784
|
-
this.Ct = A, this.ut = new U(), this.ct = document.createElement("canvas"), this.Dt = this.ct.getContext("2d", { willReadFrequently: !0, alpha: !1 });
|
|
772
|
+
this.Dt = A, this.Ct = new U(), this.lt = document.createElement("canvas"), this.ct = this.lt.getContext("2d", { willReadFrequently: !0, alpha: !1 });
|
|
785
773
|
}
|
|
786
774
|
createTextureAtlas(A, t, e, s) {
|
|
787
775
|
const r = A.length, i = Math.ceil(Math.sqrt(r)), B = Math.ceil(r / i), Q = t.width * i, n = t.height * B, g = typeof s == "object" ? s : null;
|
|
788
|
-
this.
|
|
789
|
-
const h = this.
|
|
790
|
-
return h.update(this.
|
|
776
|
+
this.ut(Q, n), this.Pt(A, t, i, e, g);
|
|
777
|
+
const h = this.Dt.SA(Q, n, { filter: "nearest" });
|
|
778
|
+
return h.update(this.lt), { framebuffer: h, columns: i, rows: B };
|
|
791
779
|
}
|
|
792
|
-
|
|
793
|
-
this.
|
|
780
|
+
ut(A, t) {
|
|
781
|
+
this.lt.width = A, this.lt.height = t, this.lt.style.width = A + "px", this.lt.style.height = A + "px", this.ct.imageSmoothingEnabled = !1, this.lt.style.imageRendering = "pixelated", this.ct.fillStyle = "black", this.ct.fillRect(0, 0, A, t), this.ct.textBaseline = "top", this.ct.textAlign = "left", this.ct.fillStyle = "white";
|
|
794
782
|
}
|
|
795
|
-
|
|
783
|
+
Pt(A, t, e, s, r) {
|
|
796
784
|
const i = s / r.head.unitsPerEm;
|
|
797
785
|
for (let B = 0; B < A.length; B++) {
|
|
798
|
-
const Q = B % e, n = Math.floor(B / e), g = A[B].character, h = this.
|
|
786
|
+
const Q = B % e, n = Math.floor(B / e), g = A[B].character, h = this.It(r, g);
|
|
799
787
|
if (!h) continue;
|
|
800
|
-
const a = g.codePointAt(0) || 0,
|
|
801
|
-
this.
|
|
788
|
+
const a = g.codePointAt(0) || 0, D = this.Ct.WA(r, a), c = this.wt(r, D) * i, l = Q * t.width, d = n * t.height, C = l + 0.5 * t.width, P = d + 0.5 * t.height, p = Math.round(C - 0.5 * t.width), m = Math.round(P - 0.5 * s), y = p + 0.5 * (t.width - c), b = m + r.hhea.ascender * i;
|
|
789
|
+
this.ft(h, y, b, i);
|
|
802
790
|
}
|
|
803
791
|
}
|
|
804
|
-
|
|
805
|
-
const e = t.codePointAt(0) || 0, s = this.
|
|
792
|
+
It(A, t) {
|
|
793
|
+
const e = t.codePointAt(0) || 0, s = this.Ct.WA(A, e);
|
|
806
794
|
if (s === 0) return null;
|
|
807
795
|
if (A.glyf && A.glyf[s] !== null) return A.glyf[s];
|
|
808
796
|
if (w && w.T && w.T.glyf && w.T.glyf.VA) {
|
|
@@ -811,90 +799,90 @@ class aA {
|
|
|
811
799
|
}
|
|
812
800
|
return null;
|
|
813
801
|
}
|
|
814
|
-
|
|
802
|
+
wt(A, t) {
|
|
815
803
|
const e = A.hmtx;
|
|
816
804
|
return e && e.aWidth ? t < e.aWidth.length ? e.aWidth[t] : e.aWidth[e.aWidth.length - 1] : 0;
|
|
817
805
|
}
|
|
818
|
-
|
|
806
|
+
ft(A, t, e, s) {
|
|
819
807
|
if (!A || !A.xs || A.noc === 0) return;
|
|
820
808
|
const { xs: r, ys: i, endPts: B, flags: Q } = A;
|
|
821
809
|
if (!(r && i && B && Q)) return;
|
|
822
|
-
this.
|
|
810
|
+
this.ct.beginPath();
|
|
823
811
|
let n = 0;
|
|
824
812
|
for (let g = 0; g < B.length; g++) {
|
|
825
813
|
const h = B[g];
|
|
826
814
|
if (!(h < n)) {
|
|
827
815
|
if (h >= n) {
|
|
828
|
-
const a = t + r[n] * s,
|
|
829
|
-
this.
|
|
816
|
+
const a = t + r[n] * s, D = e - i[n] * s;
|
|
817
|
+
this.ct.moveTo(a, D);
|
|
830
818
|
let c = n + 1;
|
|
831
819
|
for (; c <= h; )
|
|
832
820
|
if (1 & Q[c]) {
|
|
833
821
|
const l = t + r[c] * s, d = e - i[c] * s;
|
|
834
|
-
this.
|
|
822
|
+
this.ct.lineTo(l, d), c++;
|
|
835
823
|
} else {
|
|
836
824
|
const l = t + r[c] * s, d = e - i[c] * s;
|
|
837
|
-
let
|
|
838
|
-
if (1 & Q[
|
|
839
|
-
const P = t + r[
|
|
840
|
-
this.
|
|
825
|
+
let C = c + 1 > h ? n : c + 1;
|
|
826
|
+
if (1 & Q[C]) {
|
|
827
|
+
const P = t + r[C] * s, p = e - i[C] * s;
|
|
828
|
+
this.ct.quadraticCurveTo(l, d, P, p), c = C + 1;
|
|
841
829
|
} else {
|
|
842
|
-
const P = (l + (t + r[
|
|
843
|
-
this.
|
|
830
|
+
const P = (l + (t + r[C] * s)) / 2, p = (d + (e - i[C] * s)) / 2;
|
|
831
|
+
this.ct.quadraticCurveTo(l, d, P, p), c = C;
|
|
844
832
|
}
|
|
845
833
|
}
|
|
846
|
-
this.
|
|
834
|
+
this.ct.closePath();
|
|
847
835
|
}
|
|
848
836
|
n = h + 1;
|
|
849
837
|
}
|
|
850
838
|
}
|
|
851
|
-
this.
|
|
839
|
+
this.ct.fill();
|
|
852
840
|
}
|
|
853
841
|
}
|
|
854
842
|
class hA {
|
|
855
843
|
constructor() {
|
|
856
|
-
o(this, "
|
|
857
|
-
this.
|
|
844
|
+
o(this, "et");
|
|
845
|
+
this.et = new U();
|
|
858
846
|
}
|
|
859
847
|
calculateMaxGlyphDimensions(A, t, e) {
|
|
860
848
|
let s = 0;
|
|
861
|
-
const r = this.
|
|
849
|
+
const r = this.et.At(e, t), i = r.lineHeight;
|
|
862
850
|
for (const B of A) {
|
|
863
|
-
const Q = this.
|
|
851
|
+
const Q = this.et.XA(e, B);
|
|
864
852
|
if (Q === 0) continue;
|
|
865
|
-
const n = this.
|
|
853
|
+
const n = this.et.qA(e, Q) * r.scale;
|
|
866
854
|
s = Math.max(s, n);
|
|
867
855
|
}
|
|
868
856
|
return { width: Math.ceil(s), height: Math.ceil(i) };
|
|
869
857
|
}
|
|
870
858
|
getCharacterAdvanceWidth(A, t, e) {
|
|
871
|
-
const s = this.
|
|
872
|
-
return this.
|
|
859
|
+
const s = this.et.At(e, t), r = this.et.XA(e, A);
|
|
860
|
+
return this.et.qA(e, r) * s.scale;
|
|
873
861
|
}
|
|
874
862
|
getFontMetrics(A, t) {
|
|
875
|
-
return this.
|
|
863
|
+
return this.et.At(t, A);
|
|
876
864
|
}
|
|
877
|
-
|
|
878
|
-
this.
|
|
865
|
+
tt() {
|
|
866
|
+
this.et.tt();
|
|
879
867
|
}
|
|
880
868
|
}
|
|
881
869
|
class lA {
|
|
882
870
|
constructor() {
|
|
883
|
-
o(this, "
|
|
884
|
-
this.
|
|
871
|
+
o(this, "Ct");
|
|
872
|
+
this.Ct = new U();
|
|
885
873
|
}
|
|
886
874
|
createCharacterObjects(A, t) {
|
|
887
875
|
return A.map((e, s) => {
|
|
888
|
-
const r = e.codePointAt(0) || 0, i = this.
|
|
876
|
+
const r = e.codePointAt(0) || 0, i = this.dt(s);
|
|
889
877
|
let B = 0;
|
|
890
878
|
if (t.hmtx && t.hmtx.aWidth) {
|
|
891
|
-
const Q = this.
|
|
879
|
+
const Q = this.Ct.WA(t, r);
|
|
892
880
|
Q > 0 && t.hmtx.aWidth[Q] !== void 0 && (B = t.hmtx.aWidth[Q]);
|
|
893
881
|
}
|
|
894
882
|
return { character: e, unicode: r, color: i, advanceWidth: B };
|
|
895
883
|
});
|
|
896
884
|
}
|
|
897
|
-
|
|
885
|
+
dt(A) {
|
|
898
886
|
return [A % 256, Math.floor(A / 256) % 256, Math.floor(A / 65536) % 256];
|
|
899
887
|
}
|
|
900
888
|
getCharacterColor(A, t) {
|
|
@@ -903,27 +891,27 @@ class lA {
|
|
|
903
891
|
return e ? e.color : [0, 0, 0];
|
|
904
892
|
}
|
|
905
893
|
getCharacterColors(A, t) {
|
|
906
|
-
return u.C(typeof A == "string" && A.length > 0, "Characters must be a string with at least one character.", { method: "getCharacterColors", providedValue: A }) ?
|
|
894
|
+
return u.C(typeof A == "string" && A.length > 0, "Characters must be a string with at least one character.", { method: "getCharacterColors", providedValue: A }) ? Array.from(A).map((e) => this.getCharacterColor(e, t) || [0, 0, 0]) : [[0, 0, 0]];
|
|
907
895
|
}
|
|
908
896
|
}
|
|
909
897
|
class cA {
|
|
910
898
|
constructor(A, t = 16) {
|
|
911
|
-
o(this, "
|
|
912
|
-
o(this, "
|
|
913
|
-
o(this, "
|
|
914
|
-
o(this, "
|
|
899
|
+
o(this, "_t");
|
|
900
|
+
o(this, "vt", []);
|
|
901
|
+
o(this, "bt");
|
|
902
|
+
o(this, "xt", 16);
|
|
903
|
+
o(this, "yt", 0);
|
|
915
904
|
o(this, "Mt", 0);
|
|
916
|
-
o(this, "Gt", 0);
|
|
917
|
-
o(this, "Ft"
|
|
918
|
-
o(this, "$t");
|
|
919
|
-
o(this, "Yt"
|
|
905
|
+
o(this, "Gt", { width: 0, height: 0 });
|
|
906
|
+
o(this, "Ft");
|
|
907
|
+
o(this, "$t", "UrsaFont");
|
|
908
|
+
o(this, "Yt");
|
|
920
909
|
o(this, "Tt");
|
|
921
910
|
o(this, "St");
|
|
922
911
|
o(this, "Ot");
|
|
923
|
-
|
|
924
|
-
this.yt = t, this.Tt = new gA(), this.St = new aA(A), this.Ot = new hA(), this.Ut = new lA();
|
|
912
|
+
this.xt = t, this.Yt = new gA(), this.Tt = new aA(A), this.St = new hA(), this.Ot = new lA();
|
|
925
913
|
}
|
|
926
|
-
async
|
|
914
|
+
async Ut(A) {
|
|
927
915
|
let t;
|
|
928
916
|
if (A) {
|
|
929
917
|
const e = await fetch(A);
|
|
@@ -932,121 +920,121 @@ class cA {
|
|
|
932
920
|
} else
|
|
933
921
|
t = await (await fetch(`data:font/truetype;charset=utf-8;base64,AAEAAAAKAIAAAwAgT1MvMs+QEyQAAAEoAAAAYGNtYXAg7yVJAAAFjAAACSBnbHlmuHLTdAAAErQAAGi0aGVhZFvXdUwAAACsAAAANmhoZWELAQUCAAAA5AAAACRobXR4BACDgAAAAYgAAAQEbG9jYQAy54AAAA6sAAAECG1heHABIgCCAAABCAAAACBuYW1lVs/OSgAAe2gAAAOicG9zdABpADQAAH8MAAAAIAABAAAAAQAAzOWHqV8PPPUAAAQAAAAAAHxiGCcAAAAAfGIYJwAAAAAEAAQAAAAACAACAAEAAAAAAAEAAAQAAAAAAAQAAAAAAAcAAAEAAAAAAAAAAAAAAAAAAAEBAAEAAAEBAIAAIAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAgQAAZAABQAEAgACAAAAAAACAAIAAAACAAAzAMwAAAAABAAAAAAAAACAAACLAABw4wAAAAAAAAAAWUFMLgBAACAmawQAAAAAAAQAAAAAAAFRAAAAAAMABAAAAAAgAAAEAAAABAAAAAQAAAAEAAGABAABAAQAAIAEAACABAAAgAQAAIAEAAGABAABAAQAAQAEAACABAABAAQAAIAEAACABAABAAQAAIAEAACABAAAgAQAAIAEAACABAAAgAQAAIAEAACABAAAgAQAAIAEAACABAABAAQAAIAEAAEABAAAgAQAAIAEAACABAAAgAQAAIAEAACABAAAgAQAAIAEAACABAAAgAQAAIAEAACABAAAgAQAAIAEAACABAAAgAQAAIAEAACABAAAgAQAAIAEAACABAAAgAQAAIAEAACABAAAgAQAAIAEAACABAAAgAQAAIAEAACABAABAAQAAIAEAAEABAAAgAQAAIAEAAEABAAAgAQAAIAEAACABAAAgAQAAIAEAAEABAAAgAQAAIAEAAGABAAAgAQAAIAEAAGABAAAgAQAAIAEAACABAAAgAQAAIAEAAEABAAAgAQAAIAEAACABAAAgAQAAIAEAACABAAAgAQAAIAEAACABAABgAQAAQAEAACABAAAAAQAAgAEAACABAAAgAQAAIAEAACABAACAAQAAAAEAAIABAABgAQAAgAEAACABAAAgAQAAAAEAACABAAAAAQAAAAEAAAABAAAAAQAAAAEAAIABAADAAQAAAAEAAAABAAAgAQAAYAEAAAABAAAAAQAAIAEAAAA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AIAAAACA/YAAgAAAAIAAAP8AAoABAAAA/4AAAP+A/4AAgAAAAIAAAP8AA4AAAP8AAAAAgAAAAIAAAP+AAAD/gAAA/4AAAP+AAAD/gAAA/4AAAACAAAAAgAAAAIAAAACAAAAAgAAAAAAAAP+AAAD/gAAAAAAAAP8AAAAAgAAAAAAAAP+AAAD/gAAAAAAAAwCAAIAEAAQAABcAHQAjAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAIAAAAAgAAA/4AAAACAAAAAgAAA/4AAAACAAAD9AAAA/4AAAACAAAD/gAAAAIAAgAAAAIAAAACAAAD/AAAAAQAAAP+AAAAEAAAA/4AAAP8AAAD/gAAAAIAAAP8AAAD/gAAA/4AAAACAAAABAAAAAIAAAAEAAAAAAP+AAAD/gAAAAQD+gP8AAAAAgAAAAIAAAAABAYACgAKABAAAAwAAAQEBAQGAAQAAAP8ABAAAAP6AAAAAAAABAQAAgAMABAAAEwAAAQEBAQEBAQEBAQEBAQEBAQEBAQECAAEAAAD/gAAA/4AAAACAAAAAgAAA/wAAAP+AAAD/gAAAAIAAAACABAAAAP+AAAD/gAAA/oAAAP+AAAD/gAAAAIAAAACAAAABgAAAAIAAAAAAAAEBAACAAwAEAAATAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQAAAACAAAAAgAAA/4AAAP+AAAD/AAAAAIAAAACAAAD/gAAA/4AEAAAA/4AAAP+AAAD+gAAA/4AAAP+AAAAAgAAAAIAAAAGAAAAAgAAAAAAABQCAAYADgAQAAAMABwATABcAGwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAIAAAP+AAYAAgAAA/4D/AAEAAAABAAAA/wAAAP8AAAD/AAAAAQD/gACAAAD/gAGAAIAAAP+ABAAAAP+AAAAAgAAA/4AAAAAAAAD/gAAA/4AAAP+AAAAAgAAAAIAAAP8AAAD/gAAAAIAAAP+AAAAAAAABAQAAgAOAAwAACwAAAQEBAQEBAQEBAQEBAgAAgAAAAQAAAP8AAAD/gAAA/wAAAAEAAwAAAP8AAAD/gAAA/wAAAAEAAAAAgAAAAAAAAQCAAAACAAGAAAcAAAEBAQEBAQEBAQABAAAA/4AAAP8AAAAAgAGAAAD/AAAA/4AAAACAAAAAAAABAIABgAOAAgAAAwAAAQEBAQCAAwAAAP0AAgAAAP+AAAAAAAABAQAAgAIAAYAAAwAAAQEBAQEAAQAAAP8AAYAAAP8AAAAAAAABAIAAgAQAA4AAFwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAwABAAAA/4AAAP+AAAD/gAAA/4AAAP+AAAD/AAAAAIAAAACAAAAAgAAAAIAAAACAA4AAAP+AAAD/gAAA/4AAAP+AAAD/gAAA/4AAAACAAAAAgAAAAIAAAACAAAAAgAAAAAAAAwCAAIADgAQAAAsAEQAXAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAIAAAAAgAAA/4AAAP4AAAD/gAAAAIAAgAAAAIAAAACAAAD/gAAA/4AAAAEAAAAEAAAA/4AAAP2AAAD/gAAAAIAAAAKAAAAAAP8AAAAAgAAAAID/AP+AAAD/AAAAAYAAAAABAIAAgAOABAAADQAAAQEBAQEBAQEBAQEBAQEBgAEAAAABAAAA/QAAAAEAAAD/AAAAAIAAAACABAAAAP0AAAD/gAAAAIAAAAGAAAAAgAAAAIAAAAABAIAAgAOABAAAGwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAgAAAACAAAD/gAAA/4AAAP+AAAABgAAA/QAAAACAAAAAgAAAAIAAAACAAAD/AAAA/wAAAACABAAAAP+AAAD/AAAA/4AAAP+AAAD/gAAA/4AAAACAAAAAgAAAAIAAAACAAAABAAAA/wAAAAEAAAAAAAABAIAAgAOABAAAGwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAgAAAACAAAD/gAAAAIAAAP+AAAD+AAAA/4AAAAEAAAABAAAA/wAAAAEAAAD/AAAA/wAAAACABAAAAP+AAAD/AAAA/4AAAP8AAAD/gAAAAIAAAACAAAD/gAAAAQAAAACAAAABAAAA/4AAAACAAAAAAAABAIAAgAOABAAAEQAAAQEBAQEBAQEBAQEBAQEBAQEBAYABAAAA/4AAAP+AAAABAAAAAQAAAP8AAAD+AAAAAIAAAACABAAAAP+AAAD/gAAA/wAAAAEAAAD9gAAAAQAAAAGAAAAAgAAAAAEAgACAA4AEAAATAAABAQEBAQEBAQEBAQEBAQEBAQEBAQCAAwAAAP4AAAABgAAAAIAAAP+AAAD+AAAA/4AAAAEAAAABAAAA/gAEAAAA/4AAAP8AAAD/gAAA/wAAAP+AAAAAgAAAAIAAAP+AAAABAAAAAAAAAgCAAIADgAQAABMAFwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQACAAAAAIAAAP8AAAD/AAAAAYAAAACAAAD/gAAA/gAAAP+AAAAAgACAAAABAAAABAAAAP+AAAD/gAAAAIAAAP8AAAD/gAAA/wAAAP+AAAAAgAAAAoAAAP6A/wAAAAEAAAEAgACAA4AEAAAPAAABAQEBAQEBAQEBAQEBAQEBAIADAAAA/4AAAP+AAAD/AAAAAIAAAACAAAD+gAAA/4AEAAAA/oAAAP+AAAD+gAAAAYAAAACAAAABAAAA/4AAAAAAAAMAgACAA4AEAAATABcAGwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAgAAAACAAAD/gAAAAIAAAP+AAAD+AAAA/4AAAACAAAD/gAAAAIAAgAAAAQAAAP8AAAABAAAABAAAAP+AAAD/AAAA/4AAAP8AAAD/gAAAAIAAAAEAAAAAgAAAAQAAAAAA/wAAAAEA/oD/AAAAAQAAAAACAIAAgAOABAAACwAPAAABAQEBAQEBAQEBAQEBAQEBAQACAAAAAIAAAP8AAAD+gAAA/4AAAACAAIAAAAEAAAAEAAAA/4AAAP0AAAABAAAAAIAAAAGAAAAAAP6AAAABgAACAQABAAIAA4AAAwAHAAABAQEBAQEBAQEAAQAAAP8AAAABAAAA/wADgAAA/wAAAP+AAAD/AAAAAAIAgACAAgADgAADAAsAAAEBAQEBAQEBAQEBAQEAAQAAAP8AAAABAAAA/4AAAP8AAAAAgAOAAAD/AAAA/4AAAP8AAAD/gAAAAIAAAAABAQAAgAOABAAAGwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQKAAQAAAP+AAAD/gAAA/4AAAACAAAAAgAAAAIAAAP8AAAD/gAAA/4AAAP+AAAAAgAAAAIAAAACABAAAAP+AAAD/gAAA/4AAAP+AAAD/gAAA/4AAAP+AAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAAAACAIABgAOAAwAAAwAHAAABAQEBAQEBAQCAAwAAAP0AAAADAAAA/QADAAAA/4AAAP+AAAD/gAAAAAEAgACAAwAEAAAbAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAIABAAAAAIAAAACAAAAAgAAA/4AAAP+AAAD/gAAA/wAAAACAAAAAgAAAAIAAAP+AAAD/gAAA/4AEAAAA/4AAAP+AAAD/gAAA/4AAAP+AAAD/gAAA/4AAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAAAAAAIAgACAA4AEAAATABcAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAgAAAACAAAD/gAAA/4AAAP8AAAAAgAAAAIAAAP8AAAD/AAAAAIAAgAEAAAD/AAQAAAD/gAAA/4AAAP+AAAD/gAAAAIAAAACAAAAAgAAA/4AAAACAAAD+AAAA/wAAAAACAIAAgAOABAAAEQAVAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQACAAAAAIAAAP6AAAAAgAAA/wAAAAGAAAD+AAAA/4AAAACAAgAAgAAA/4AEAAAA/4AAAP6AAAABAAAAAIAAAP2AAAD/gAAAAIAAAAKAAAD+AAAA/4AAAAAAAAIAgACAA4AEAAAPABMAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAYABAAAAAIAAAACAAAD/AAAA/wAAAP8AAAAAgAAAAIAAAAAAAQAAAAQAAAD/gAAA/4AAAP2AAAABAAAA/wAAAAKAAAAAgAAA/4D/AAAAAQAAAwCAAIADgAQAAAsADwATAAABAQEBAQEBAQEBAQEBAQEBAQEBAQCAAoAAAACAAAD/gAAAAIAAAP+AAAD9gAEAAAABAAAA/wAAAAEAAAAEAAAA/4AAAP8AAAD/gAAA/wAAAP+AAAADAP8AAAABAP6A/wAAAAEAAAAAAQCAAIADgAQAABMAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQACAAAAAIAAAP8AAAD/AAAAAQAAAAEAAAD/gAAA/gAAAP+AAAAAgAQAAAD/gAAA/4AAAACAAAD9gAAAAIAAAP+AAAD/gAAAAIAAAAKAAAAAAAACAIAAgAOABAAACwATAAABAQEBAQEBAQEBAQEBAQEBAQEBAQCAAgAAAACAAAAAgAAA/4AAAP+AAAD+AAEAAAAAgAAAAIAAAP+AAAAEAAAA/4AAAP+AAAD+gAAA/4AAAP+AAAADAP2AAAAAgAAAAYAAAACAAAEAgACAA4AEAAAXAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAIAAAAAgAAA/wAAAP8AAAABAAAA/wAAAAEAAAABAAAA/4AAAP4AAAD/gAAAAIAEAAAA/4AAAP+AAAAAgAAA/wAAAP+AAAD/AAAAAIAAAP+AAAD/gAAAAIAAAAKAAAAAAAABAIAAgAOABAAACQAAAQEBAQEBAQEBAQCAAwAAAP4AAAABAAAA/wAAAP8ABAAAAP+AAAD/AAAA/4AAAP6AAAAAAQCAAIADgAQAABUAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAIAAAAAgAAA/wAAAP8AAAABAAAA/4AAAAGAAAD/gAAA/gAAAP+AAAAAgAQAAAD/gAAA/4AAAACAAAD9gAAAAQAAAACAAAD+gAAA/4AAAACAAAACgAAAAAEAgACAA4AEAAALAAABAQEBAQEBAQEBAQEAgAEAAAABAAAAAQAAAP8AAAD/AAAA/wAEAAAA/gAAAAIAAAD8gAAAAQAAAP8AAAAAAAABAIAAgAOABAAACwAAAQEBAQEBAQEBAQEBAIADAAAA/wAAAAEAAAD9AAAAAQAAAP8ABAAAAP+AAAD9gAAA/4AAAACAAAACgAAAAAAAAQCAAIAEAAQAAA8AAAEBAQEBAQEBAQEBAQEBAQEBAAMAAAD/gAAA/4AAAP4AAAD/gAAAAQAAAAEAAAD+gAQAAAD/gAAA/YAAAP+AAAAAgAAAAQAAAP8AAAACgAAAAAAAAQCAAIADgAQAABsAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAgAEAAAAAgAAAAIAAAAEAAAD/gAAA/4AAAP+AAAAAgAAAAIAAAACAAAD/AAAA/4AAAP+AAAD/AAQAAAD/AAAAAIAAAACAAAD/gAAA/4AAAP+AAAD/gAAA/4AAAP+AAAD/gAAAAIAAAACAAAD/AAAAAAAAAQCAAIADgAQAAAUAAAEBAQEBAQCAAQAAAAIAAAD9AAQAAAD9AAAA/4AAAAABAIAAgAQABAAAEwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEAgAEAAAAAgAAAAIAAAACAAAABAAAA/wAAAP+AAAD/gAAA/4AAAP8ABAAAAP+AAAD/gAAAAIAAAACAAAD8gAAAAgAAAP+AAAAAgAAA/gAAAAAAAAEAgACABAAEAAATAAABAQEBAQEBAQEBAQEBAQEBAQEBAQCAAQAAAACAAAAAgAAAAIAAAAEAAAD/AAAA/4AAAP+AAAD/gAAA/wAEAAAA/4AAAP+AAAD/gAAAAYAAAPyAAAABAAAAAIAAAACAAAD+AAAAAAAAAgCAAIADgAQAAAsADwAAAQEBAQEBAQEBAQEBAQEBAQEAAgAAAACAAAD/gAAA/gAAAP+AAAAAgACAAAABAAAABAAAAP+AAAD9gAAA/4AAAACAAAACgAAAAAD9gAAAAoAAAgCAAIADgAQAAAkADQAAAQEBAQEBAQEBAQEBAQEAgAKAAAAAgAAA/4AAAP6AAAD/AAEAAAABAAAABAAAAP+AAAD+gAAA/4AAAP8AAAADAP6AAAABgAAAAAIAgACABAAEAAAPABcAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAgAAAACAAAAAgAAA/4AAAP+AAAD+AAAA/4AAAACAAIAAAAEAAAD/gAAAAIAAAAQAAAD/gAAA/gAAAP8AAAAAgAAA/4AAAACAAAACgAAAAAD9gAAAAIAAAACAAAABgAACAIAAgAOABAAAEwAXAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAgAKAAAAAgAAA/4AAAP+AAAAAgAAAAIAAAP8AAAD/gAAA/4AAAP8AAQAAAAEAAAAEAAAA/4AAAP8AAAD/gAAA/4AAAP+AAAD/gAAAAIAAAACAAAD/AAAAAwD/AAAAAQAAAQCAAIADgAQAABsAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAIAAAAAgAAA/wAAAP8AAAABgAAAAIAAAP+AAAD+AAAA/4AAAAEAAAABAAAA/oAAAP+AAAAAgAQAAAD/gAAA/4AAAACAAAD/AAAA/4AAAP8AAAD/gAAAAIAAAACAAAD/gAAAAQAAAACAAAABAAAAAAAAAQCAAIADgAQAAAcAAAEBAQEBAQEBAIADAAAA/wAAAP8AAAD/AAQAAAD/gAAA/QAAAAMAAAAAAAABAIAAgAOABAAACwAAAQEBAQEBAQEBAQEBAIABAAAAAQAAAAEAAAD/gAAA/gAAAP+ABAAAAP0AAAADAAAA/QAAAP+AAAAAgAAAAAAAAQCAAIADgAQAAA8AAAEBAQEBAQEBAQEBAQEBAQEAgAEAAAABAAAAAQAAAP+AAAD/gAAA/wAAAP+AAAD/gAQAAAD+AAAAAgAAAP4AAAD/AAAA/4AAAACAAAABAAAAAAAAAQCAAIAEAAQAABMAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAIABAAAAAIAAAACAAAAAgAAAAQAAAP8AAAD/gAAA/4AAAP+AAAD/AAQAAAD+AAAAAIAAAP+AAAACAAAA/IAAAACAAAAAgAAA/4AAAP+AAAAAAAABAIAAgAOABAAAGwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQCAAQAAAAEAAAABAAAA/4AAAP+AAAAAgAAAAIAAAP8AAAD/AAAA/wAAAACAAAAAgAAA/4AAAP+ABAAAAP8AAAABAAAA/wAAAP+AAAD/gAAA/4AAAP8AAAABAAAA/wAAAAEAAAAAgAAAAIAAAACAAAAAAAABAIAAgAOABAAADwAAAQEBAQEBAQEBAQEBAQEBAQCAAQAAAAEAAAABAAAA/4AAAP+AAAD/AAAA/4AAAP+ABAAAAP6AAAABgAAA/oAAAP+AAAD+gAAAAYAAAACAAAAAAAABAIAAgAOABAAAFwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAIADAAAA/4AAAP+AAAD/gAAA/4AAAAIAAAD9AAAAAIAAAACAAAAAgAAAAIAAAP4ABAAAAP8AAAD/gAAA/4AAAP+AAAD/gAAA/4AAAAEAAAAAgAAAAIAAAACAAAAAgAAAAAAAAQEAAIADAAQAAAcAAAEBAQEBAQEBAQACAAAA/wAAAAEAAAD+AAQAAAD/gAAA/YAAAP+AAAAAAAABAIAAgAQAA4AAFwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAIABAAAAAIAAAACAAAAAgAAAAIAAAACAAAD/AAAA/4AAAP+AAAD/gAAA/4AAAP+AA4AAAP+AAAD/gAAA/4AAAP+AAAD/gAAA/4AAAACAAAAAgAAAAIAAAACAAAAAgAAAAAAAAQEAAIADAAQAAAcAAAEBAQEBAQEBAQACAAAA/gAAAAEAAAD/AAQAAAD8gAAAAIAAAAKAAAAAAAABAIACAAQABAAAFwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAgAAgAAAAIAAAACAAAAAgAAA/wAAAP+AAAD/gAAA/4AAAP8AAAAAgAAAAIAAAACABAAAAP+AAAD/gAAA/4AAAP+AAAAAgAAAAIAAAP+AAAD/gAAAAIAAAACAAAAAgAAAAAAAAQCAAIADgAEAAAMAAAEBAQEAgAMAAAD9AAEAAAD/gAAAAAAAAQEAAoACgAQAAAkAAAEBAQEBAQEBAQEBAAEAAAAAgAAA/4AAAP+AAAD/gAQAAAD/gAAA/wAAAACAAAAAgAAAAAEAgACAA4ADAAAPAAABAQEBAQEBAQEBAQEBAQEBAQACgAAA/4AAAP+AAAD/AAAAAQAAAP6AAAD/gAAAAIADAAAA/YAAAACAAAABgAAA/oAAAP+AAAAAgAAAAYAAAAAAAAIAgACAA4AEAAAJAA0AAAEBAQEBAQEBAQEBAQEBAIABAAAAAYAAAACAAAD/gAAA/YABAAAAAQAAAAQAAAD/AAAA/4AAAP6AAAD/gAAAAgD+gAAAAYAAAAABAIAAgAOAAwAAEwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAIAAAAAgAAA/wAAAP8AAAABAAAAAQAAAP+AAAD+AAAA/4AAAACAAwAAAP+AAAD/gAAAAIAAAP6AAAAAgAAA/4AAAP+AAAAAgAAAAYAAAAAAAAIAgACAA4AEAAAJAA0AAAEBAQEBAQEBAQEBAQEBAoABAAAA/YAAAP+AAAAAgAAAAYD/AAAAAQAAAAQAAAD8gAAAAIAAAAGAAAAAgAAA/4D+gAAAAYAAAAACAIAAgAOAAwAADQARAAABAQEBAQEBAQEBAQEBAQEBAQEBAAIAAAAAgAAA/gAAAAGAAAD+AAAA/4AAAACAAIAAAAEAAAADAAAA/4AAAP8AAAD/gAAA/4AAAACAAAABgAAAAAD/gAAAAIAAAAABAQAAgAOAA4AACwAAAQEBAQEBAQEBAQEBAYACAAAA/oAAAAEAAAD/AAAA/wAAAACAA4AAAP+AAAD/AAAA/4AAAP8AAAACgAAAAAAAAgCAAIADgAOAAA8AEwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAIAAAAAgAAA/4AAAP4AAAABgAAA/oAAAP+AAAAAgACAAAABAAAAA4AAAP+AAAD+AAAA/4AAAACAAAAAgAAAAIAAAAEAAAAAAP8AAAABAAABAIAAgAOABAAACwAAAQEBAQEBAQEBAQEBAIABAAAAAYAAAACAAAD/AAAA/wAAAP8ABAAAAP8AAAD/gAAA/gAAAAIAAAD+AAAAAAAAAgGAAIACgAQAAAMABwAAAQEBAQEBAQEBgAEAAAD/AAAAAQAAAP8ABAAAAP+AAAD/gAAA/YAAAAACAIAAgAOABAAAAwAPAAABAQEBAQEBAQEBAQEBAQEBAoABAAAA/wAAAAEAAAD/gAAA/gAAAP+AAAABAAAAAQAEAAAA/4AAAP+AAAD+AAAA/4AAAACAAAABAAAA/wAAAAABAIAAgAOAA4AAEwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEAgAEAAAAAgAAAAQAAAP+AAAAAgAAAAIAAAP8AAAD/gAAA/4AAAP8AA4AAAP8AAAAAgAAA/4AAAP8AAAD/gAAA/4AAAACAAAAAgAAA/wAAAAAAAAEBgACAAwAEAAAHAAABAQEBAQEBAQGAAQAAAACAAAD/AAAA/4AEAAAA/QAAAP+AAAAAgAAAAAAAAQCAAIAEAAMAABMAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAAAAAIAAAAEAAAAAgAAA/wAAAP+AAAD/gAAA/4AAAP8AAAAAgAMAAAD/gAAAAIAAAP+AAAD+AAAAAYAAAP+AAAAAgAAA/oAAAAIAAAAAAAABAIAAgAOAAwAADwAAAQEBAQEBAQEBAQEBAQEBAQCAAQAAAACAAAABAAAAAIAAAP8AAAD/gAAA/4AAAP8AAwAAAP+AAAAAgAAA/4AAAP4AAAABgAAA/4AAAP8AAAAAAAACAIAAgAOAAwAACwAPAAABAQEBAQEBAQEBAQEBAQEBAQACAAAAAIAAAP+AAAD+AAAA/4AAAACAAIAAAAEAAAADAAAA/4AAAP6AAAD/gAAAAIAAAAGAAAAAAP6AAAABgAACAIAAgAOAAwAACQANAAABAQEBAQEBAQEBAQEBAQCAAoAAAACAAAD/gAAA/oAAAP8AAQAAAAEAAAADAAAA/4AAAP+AAAD/gAAA/wAAAAIA/4AAAACAAAAAAgCAAIAEAAMAAA0AEQAAAQEBAQEBAQEBAQEBAQEBAQEBAQACgAAAAIAAAP+AAAD/AAAA/oAAAP+AAAAAgACAAAABAAAAAwAAAP6AAAD/gAAA/4AAAAEAAAAAgAAAAIAAAAAA/4AAAACAAAAAAQEAAIADgAMAAAkAAAEBAQEBAQEBAQEBAAIAAAAAgAAA/wAAAP+AAAD/AAMAAAD/gAAA/wAAAAEAAAD+AAAAAAEAgACABAADAAATAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEAAoAAAP6AAAABgAAAAIAAAP+AAAD9AAAAAgAAAP6AAAD/gAAAAIADAAAA/4AAAP+AAAD/gAAA/4AAAP+AAAAAgAAAAIAAAACAAAAAgAAAAAAAAQCAAIADgAOAABMAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAAAAAQAAAP8AAAAAgAAAAQAAAP+AAAD+gAAA/4AAAP+AAAAAgAOAAAD/gAAA/4AAAP6AAAAAgAAA/4AAAP+AAAAAgAAAAYAAAACAAAAAAAABAIAAgAOAAwAADwAAAQEBAQEBAQEBAQEBAQEBAQCAAQAAAACAAAAAgAAAAQAAAP+AAAD/gAAA/oAAAP+AAwAAAP4AAAAAgAAAAYAAAP2AAAAAgAAA/4AAAACAAAAAAAABAIAAgAOAAwAADwAAAQEBAQEBAQEBAQEBAQEBAQCAAQAAAAEAAAABAAAA/4AAAP+AAAD/AAAA/4AAAP+AAwAAAP6AAAABgAAA/oAAAP+AAAD/gAAAAIAAAACAAAAAAAABAIAAgAQAAwAAEwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEAgAEAAAAAgAAAAIAAAACAAAABAAAA/4AAAP8AAAD/gAAA/wAAAP+AAwAAAP6AAAAAgAAA/4AAAAGAAAD+AAAA/4AAAACAAAD/gAAAAIAAAAAAAAEAgACAA4ADAAAbAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAIABAAAAAQAAAAEAAAD/gAAA/4AAAACAAAAAgAAA/wAAAP8AAAD/AAAAAIAAAACAAAD/gAAA/4ADAAAA/4AAAACAAAD/gAAA/4AAAP+AAAD/gAAA/4AAAACAAAD/gAAAAIAAAACAAAAAgAAAAIAAAAAAAAEAgACAA4ADAAAPAAABAQEBAQEBAQEBAQEBAQEBAIABAAAAAQAAAAEAAAD/gAAA/gAAAAGAAAD+gAAA/4ADAAAA/wAAAAEAAAD+AAAA/4AAAACAAAAAgAAAAIAAAAAAAAEAgACAA4ADAAATAAABAQEBAQEBAQEBAQEBAQEBAQEBAQCAAwAAAP+AAAD/gAAA/4AAAAGAAAD9AAAAAIAAAACAAAAAgAAA/oADAAAA/4AAAP+AAAD/gAAA/4AAAP+AAAAAgAAAAIAAAACAAAAAgAAAAAAAAQCAAIADAAQAABMAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAYABgAAA/wAAAP+AAAAAgAAAAQAAAP6AAAD/gAAA/4AAAACAAAAAgAQAAAD/gAAA/wAAAP+AAAD/AAAA/4AAAACAAAABAAAAAIAAAAEAAAAAAAABAYAAgAKABAAAAwAAAQEBAQGAAQAAAP8ABAAAAPyAAAAAAAABAQAAgAOABAAAEwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAGAAAAAgAAAAIAAAP+AAAD/gAAA/oAAAAEAAAAAgAAA/4AAAP8ABAAAAP+AAAD/AAAA/4AAAP8AAAD/gAAAAIAAAAEAAAAAgAAAAQAAAAAAAAEAgAGAA4ADAAAPAAABAQEBAQEBAQEBAQEBAQEBAQABAAAAAQAAAACAAAD/gAAA/wAAAP8AAAD/gAAAAIADAAAA/4AAAACAAAD/AAAA/4AAAACAAAD/gAAAAQAAAAAAAAEAAAAABAAEAAATAAABAQEBAQEBAQEBAQEBAQEBAQEBAQAAAYAAAAEAAAAAgAAAAIAAAACAAAD/AAAA/4AAAP+AAAD/AAAA/wAEAAAA/4AAAP+AAAD/gAAA/wAAAP6AAAABAAAAAQAAAACAAAAAgAAAAAAAAQIAAAAEAAQAAAMAAAEBAQECAAIAAAD+AAQAAAD8AAAAAAAAAgCAAIADgAQAABcAGwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQGAAYAAAP8AAAABAAAA/4AAAP+AAAABgAAA/QAAAACAAAAAgAAA/wAAAACAAAAAgAGAAIAAAP+ABAAAAP+AAAD/AAAA/4AAAP+AAAD/gAAA/4AAAACAAAAAgAAAAIAAAACAAAABAAAAAAAAAP+AAAAAAQCAAIADgAQAABsAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAgAEAAAABAAAAAQAAAP+AAAAAgAAA/wAAAAEAAAD/AAAA/wAAAP8AAAABAAAA/wAAAACAAAD/gAQAAAD+gAAAAYAAAP8AAAD/gAAA/4AAAP+AAAD/gAAA/4AAAACAAAAAgAAAAIAAAACAAAAAgAAAAAAABACAAIAEAAQAABcAGwAfACMAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAoAAAP4AAAABgAAAAIAAAACAAAD/gAAA/YAAAAIAAAD+gAAA/4AAAP+AAAAAgAEAAAAAgAAAAQAAgAAA/4D9AACAAAD/gAQAAAD/gAAA/4AAAP+AAAD/gAAA/wAAAP+AAAAAgAAAAIAAAACAAAAAgAAAAQAAAP8A/4AAAACAAQAAAP+AAAD+gAAA/4AAAAAEAIAAgAQAA4AAAwAHAAsADwAAAQEBAQEBAQEBAQEBAQEBAQCAAIAAAP+AAQAAgAAA/4ABAACAAAD/gAEAAIAAAP+AA4AAAP0AAAADAAAA/QAAAAMAAAD9AAAAAwAAAP0AAAAAAQIAAAAEAAQAAAkAAAEBAQEBAQEBAQEDgACAAAD+AAAAAIAAAACAAAAAgAQAAAD8AAAAAQAAAAEAAAABAAAAAAgAAAAABAAEAAADAAcACwAPABMAFwAbAB8AAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAABAAAA/wACAAEAAAD/AP8AAQAAAP8AAgABAAAA/wD9AAEAAAD/AAIAAQAAAP8A/wABAAAA/wACAAEAAAD/AAQAAAD/AAAAAQAAAP8AAAAAAAAA/wAAAAEAAAD/AAAAAAAAAP8AAAABAAAA/wAAAAAAAAD/AAAAAQAAAP8AAAAAAQIAAAADAAQAAAMAAAEBAQECAAEAAAD/AAQAAAD8AAAAAAAAAgGAAIACgAQAAAMABwAAAQEBAQEBAQEBgAEAAAD/AAAAAQAAAP8ABAAAAP6AAAD/gAAA/oAAAAABAgAAAAQAAgAAAwAAAQEBAQIAAgAAAP4AAgAAAP4AAAAAAAAEAIAAAAQABAAAAwAHAAsADwAAAQEBAQEBAQEBAQEBAQEBAQCAAIAAAP+AAQAAgAAA/4ABAACAAAD/gAEAAIAAAP+ABAAAAPwAAAAEAAAA/AAAAAQAAAD8AAAABAAAAPwAAAAAAQCAAIADgAOAABMAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAoABAAAA/oAAAP+AAAD/gAAA/4AAAACAAAAAgAAAAIAAAAEAAAD/gAOAAAD+AAAA/wAAAACAAAAAgAAAAIAAAACAAAAAgAAA/wAAAAEAAAAAAAABAAAAAAQABAAACwAAAQEBAQEBAQEBAQEBAAAEAAAA/gAAAP+AAAD/gAAA/4AAAP+ABAAAAPwAAAAAgAAAAIAAAACAAAAAgAAAAAAAAQCAAIAEAAOAABsAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAgACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAD/gAAA/4AAAP+AAAD/gAAA/4AAAP+AAAD/gAOAAAD/gAAAAIAAAP8AAAABAAAA/oAAAAGAAAD9AAAAAIAAAP+AAAABAAAA/wAAAAGAAAD+gAAAAAAAAQAAAAACAAQAAAkAAAEBAQEBAQEBAQEAAACAAAAAgAAAAIAAAACAAAD+AAQAAAD/AAAA/wAAAP8AAAD/AAAAAAEAAAAABAAEAAATAAABAQEBAQEBAQEBAQEBAQEBAQEBAQKAAYAAAP8AAAD/AAAA/4AAAP+AAAD/AAAAAIAAAACAAAAAgAAAAQAEAAAA/wAAAP+AAAD/gAAA/wAAAP8AAAABgAAAAQAAAACAAAAAgAAAAAAAAQAAAAAEAAIAAA8AAAEBAQEBAQEBAQEBAQEBAQEBgAEAAAAAgAAAAIAAAACAAAD8AAAAAIAAAACAAAAAgAIAAAD/gAAA/4AAAP+AAAD/gAAAAIAAAACAAAAAgAAAAAAAAgAAAAAEAAQAAAMABwAAAQEBAQEBAQEAAAIAAAD+AAIAAgAAAP4ABAAAAP4AAAAAAAAA/gAAAAAEAAACAAQABAAAAwAHAAsADwAAAQEBAQEBAQEBAQEBAQEBAQAAAQAAAP8AAgABAAAA/wD/AAEAAAD/AAIAAQAAAP8ABAAAAP8AAAABAAAA/wAAAAAAAAD/AAAAAQAAAP8AAAAABAIAAAAEAAQAAAMABwALAA8AAAEBAQEBAQEBAQEBAQEBAQECAAEAAAD/AAEAAQAAAP8A/wABAAAA/wABAAEAAAD/AAQAAAD/AAAAAAAAAP8AAAAAAAAA/wAAAAAAAAD/AAAAAAEDAAAABAAEAAADAAABAQEBAwABAAAA/wAEAAAA/AAAAAAAAAEAAAAABAAEAAAFAAABAQEBAQEAAAQAAAD9AAAA/wAEAAAA/wAAAP0AAAAAAQAAAAABAAQAAAMAAAEBAQEAAAEAAAD/AAQAAAD8AAAAAAAAAwCAAIADAAOAAAMABwALAAABAQEBAQEBAQEBAQEAgACAAAD/gAEAAIAAAP+AAQAAgAAA/4ADgAAA/QAAAAMAAAD9AAAAAwAAAP0AAAAAAAABAYABgAQABAAACwAAAQEBAQEBAQEBAQEBAYABAAAAAIAAAAEAAAD+gAAA/4AAAP+ABAAAAP8AAAD/gAAA/wAAAACAAAAAgAAAAAAAAQAAAYACgAQAAAsAAAEBAQEBAQEBAQEBAQGAAQAAAP+AAAD/gAAA/oAAAAEAAAAAgAQAAAD+gAAA/4AAAP+AAAABAAAAAIAAAAAAAAEAAAAABAAEAAAJAAABAQEBAQEBAQEBAwABAAAA/AAAAAEAAAABAAAAAQAEAAAA/AAAAAKAAAAAgAAAAIAAAAABAIAAgAMABAAACwAAAQEBAQEBAQEBAQEBAgABAAAA/4AAAP6AAAD/gAAAAIAAAAEABAAAAP0AAAD/gAAAAIAAAAEAAAAAgAAAAAAAAQAAAAAEAAQAAAUAAAEBAQEBAQAAAQAAAAMAAAD8AAQAAAD9AAAA/wAAAAACAIAAgAMAAoAACwAPAAABAQEBAQEBAQEBAQEBAQEBAQABgAAAAIAAAP+AAAD+gAAAAQAAAP8A/4AAgAAA/4ACgAAA/4AAAP8AAAD/gAAAAIAAAAEAAAAAAAAA/wAAAAACAIAAgAMABAAACwAPAAABAQEBAQEBAQEBAQEBAQEBAgABAAAA/4AAAP6AAAABAAAA/wAAAAEA/oAAgAAA/4AEAAAA/QAAAP+AAAAAgAAAAQAAAACAAAD/gAAA/wAAAAABAIAAgAQABAAADQAAAQEBAQEBAQEBAQEBAQECAAIAAAD/AAAA/4AAAP6AAAD/gAAAAIAAAAEABAAAAP+AAAD9gAAA/4AAAACAAAABAAAAAIAAAAACAAAAAAQABAAAAwAHAAABAQEBAQEBAQAABAAAAPwAAQAAAAIAAAAEAAAA/AAAAAMA/gAAAAIAAAEAgACABAAEAAARAAABAQEBAQEBAQEBAQEBAQEBAQECAAIAAAD/AAAAAQAAAP8AAAD/gAAA/oAAAP+AAAAAgAAAAQAEAAAA/4AAAP+AAAD/gAAA/oAAAP+AAAAAgAAAAQAAAACAAAAAAQAAAAACgAKAAAsAAAEBAQEBAQEBAQEBAQAAAYAAAACAAAAAgAAA/wAAAP+AAAD/AAKAAAD/gAAA/4AAAP6AAAABAAAAAIAAAAAAAAEAAAAABAAEAAAFAAABAQEBAQEAAAQAAAD/AAAA/QAEAAAA/AAAAAMAAAAAAQCAAIAEAAQAABUAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQECAAIAAAD/AAAAAQAAAP8AAAABAAAA/wAAAP+AAAD+gAAA/4AAAACAAAABAAQAAAD/gAAA/4AAAP+AAAD/gAAA/4AAAP+AAAD/gAAAAIAAAAEAAAAAgAAAAAEBgAAABAACgAALAAABAQEBAQEBAQEBAQECgAGAAAD/AAAA/4AAAP8AAAAAgAAAAIACgAAA/wAAAP+AAAD/AAAAAYAAAACAAAAAAAABAAAAAAQABAAAEQAAAQEBAQEBAQEBAQEBAQEBAQEBAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAPwABAAAAP+AAAD/gAAA/4AAAP+AAAD/gAAA/4AAAP+AAAD/gAAAAAEAAAAABAABAAADAAABAQEBAAAEAAAA/AABAAAA/wAAAAAAAAEAAAAABAAEAAARAAABAQEBAQEBAQEBAQEBAQEBAQEDgACAAAD8AAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAEAAAA/AAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAAQAAAgAEAAQAAAMAAAEBAQEAAAQAAAD8AAQAAAD+AAAAAAAAAgCAAIACAAOAAAMABwAAAQEBAQEBAQEAgACAAAD/gAEAAIAAAP+AA4AAAP0AAAADAAAA/QAAAAAEAIAAgAQABAAAAwAHAAsADwAAAQEBAQEBAQEBAQEBAQEBAQCAA4AAAPyAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAABAAAAPyAAAADAP+AAAAAgP8A/4AAAACA/wD/gAAAAIAAAQAAAAAEAAQAAAUAAAEBAQEBAQMAAQAAAPwAAAADAAQAAAD8AAAAAQAAAAACAIAAgAQABAAAAwAHAAABAQEBAQEBAQCAA4AAAPyAAYAAAACAAAAEAAAA/IAAAAIA/4AAAACAAAMAgACABAAEAAADAAcACwAAAQEBAQEBAQEBAQEBAIADgAAA/IAAgAAAAIAAAAGAAAAAgAAABAAAAPyAAAADAP+AAAAAgP4A/4AAAACAAAAABAAAAIAEAAQAAAMABwALAA8AAAEBAQEBAQEBAQEBAQEBAQEAAAQAAAD8AAAABAAAAPwAAAAEAAAA/AAAAAQAAAD8AAQAAAD/gAAA/4AAAP+AAAD/gAAA/4AAAP+AAAD/gAAAAAYAgACABAAEAAADAAcACwAPABMAFwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAIADgAAA/IAAgAAAAIAAAAGAAAAAgAAA/oAAAACAAAD+gAAAAIAAAAGAAAAAgAAABAAAAPyAAAADAP+AAAAAgAAA/4AAAACA/wD/gAAAAID/AP+AAAAAgAAA/4AAAACAAAEAgACAAQADgAADAAABAQEBAIAAgAAA/4ADgAAA/QAAAAAAAAUAgACABAAEAAADAAcACwAPABMAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAIADgAAA/IAAgAAAAIAAAAGAAAAAgAAA/YAAAACAAAABgAAAAIAAAAQAAAD8gAAAAwD/gAAAAIAAAP+AAAAAgP4A/4AAAACAAAD/gAAAAIAAAAABAAADAAQABAAAAwAAAQEBAQAABAAAAPwABAAAAP8AAAAAAAAHAIAAgAQABAAAAwAHAAsADwATABcAGwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQCAA4AAAPyAAIAAAACAAAABgAAAAIAAAP2AAAAAgAAAAYAAAACAAAD9gAAAAIAAAAGAAAAAgAAABAAAAPyAAAADAP+AAAAAgAAA/4AAAACA/wD/gAAAAIAAAP+AAAAAgP8A/4AAAACAAAD/gAAAAIAAAAAEAAAAAAQAAgAAAwAHAAsADwAAAQEBAQEBAQEBAQEBAQEBAQAAAQAAAP8AAgABAAAA/wD/AAEAAAD/AAIAAQAAAP8AAgAAAP8AAAABAAAA/wAAAAAAAAD/AAAAAQAAAP8AAAAAAQAAAAAEAAQAAAkAAAEBAQEBAQEBAQEAAAEAAAABAAAAAQAAAAEAAAD8AAQAAAD/gAAA/4AAAP+AAAD9gAAAAAEBAAAAAgAEAAADAAABAQEBAQABAAAA/wAEAAAA/AAAAAAAAAEAAAAABAAEAAALAAABAQEBAQEBAQEBAQECgAGAAAD8AAAAAIAAAACAAAAAgAAAAQAEAAAA/AAAAAGAAAABAAAAAIAAAACAAAAAAAABAAABAAQAAgAAAwAAAQEBAQAABAAAAPwAAgAAAP8AAAAAAAABAAAAAAQABAAACwAAAQEBAQEBAQEBAQEBAgACAAAA/AAAAACAAAAAgAAAAIAAAACABAAAAPwAAAACAAAAAIAAAACAAAAAgAAAAAAAAQAAAAAEAAIAAAkAAAEBAQEBAQEBAQEDAAEAAAD8AAAAAQAAAAEAAAABAAIAAAD+AAAAAIAAAACAAAAAgAAAAAEAAAAABAAEAAALAAABAQEBAQEBAQEBAQEAAAIAAAAAgAAAAIAAAACAAAAAgAAA/AAEAAAA/4AAAP+AAAD/gAAA/4AAAP4AAAAAAAADAAAAAAQABAAAGwAnADMAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAAEAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAD/AAAA/4AAAP+AAAD/gAAA/4AAAP+AAAD/gAIAAYAAAACAAAD/gAAA/4AAAP+AAAD/gP4AAIAAAACAAAAAgAAAAIAAAP6AAAD/gAQAAAD/gAAA/4AAAP+AAAD/gAAA/4AAAP+AAAD/AAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAQAAAP+AAAD+gAAAAIAAAACAAAAAgAAA/oAAAP+AAAD/gAAA/4AAAP+AAAAAgAAAAAAAAQAAAAAEAAIAAAkAAAEBAQEBAQEBAQEAAAEAAAABAAAAAQAAAAEAAAD8AAIAAAD/gAAA/4AAAP+AAAD/gAAAAAEAAAAABAAEAAALAAABAQEBAQEBAQEBAQEAAAGAAAABAAAAAIAAAACAAAAAgAAA/AAEAAAA/4AAAP+AAAD/gAAA/wAAAP6AAAAAAAAEAAAAgAQABAAAAwAHAAsADwAAAQEBAQEBAQEBAQEBAQEBAQCAAYAAAP6AAgABgAAA/oD9gAGAAAD+gAIAAYAAAP6ABAAAAP6AAAABgAAA/oAAAP+AAAD+gAAAAYAAAP6AAAAAAQIAAgAEAAQAAAMAAAEBAQECAAIAAAD+AAQAAAD+AAAAAAAABACAAIAEAAQAAAMABwAjACcAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEAAAD/AAGAAQAAAP8A/gAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAA/4AAAP+AAAD/gAAA/4AAAP+AAAD/gAAA/4ABgACAAAD/gAQAAAD/gAAAAIAAAP+AAAAAAAAA/wAAAP+AAAD/gAAAAIAAAACAAAABAAAA/oAAAP+AAAD/gAAA/4AAAACAAAAAgAAAAIAAAAGAAAD/gAAAAAQAAAAABAAEAAADAAcACwAPAAABAQEBAQEBAQEBAQEBAQEBAAAAgAAA/4ADgACAAAD/gPyAAIAAAP+AA4AAgAAA/4AEAAAA/4AAAACAAAD/gAAA/QAAAP+AAAAAgAAA/4AAAAABAAAAAAIAAgAAAwAAAQEBAQAAAgAAAP4AAgAAAP4AAAAAAAAEAAAAAAIABAAAAwAHAAsADwAAAQEBAQEBAQEBAQEBAQEBAQAAAQAAAP8AAQABAAAA/wD/AAEAAAD/AAEAAQAAAP8ABAAAAP8AAAAAAAAA/wAAAAAAAAD/AAAAAAAAAP8AAAAAAQCAAQADgAOAABMAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAYABAAAA/4AAAAGAAAD+gAAAAIAAAP8AAAD/gAAA/4AAAACAAAAAgAOAAAD/gAAA/4AAAP+AAAD/gAAA/4AAAACAAAAAgAAAAIAAAACAAAAAAAABAQABAAOABAAAEwAAAQEBAQEBAQEBAQEBAQEBAQEBAQECAACAAAAAgAAAAIAAAP+AAAD/gAAA/4AAAP+AAAD/gAAAAIAAAACABAAAAP+AAAD/gAAA/wAAAACAAAD+gAAAAYAAAP+AAAABAAAAAIAAAAAAAAEBAAEABAADgAATAAABAQEBAQEBAQEBAQEBAQEBAQEBAQIAAQAAAACAAAAAgAAA/4AAAP+AAAD/AAAAAIAAAP6AAAABgAAA/4ADgAAA/4AAAP+AAAD/gAAA/4AAAP+AAAAAgAAAAIAAAACAAAAAgAAAAAAAAQEAAIADgAOAABMAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAgAAgAAAAIAAAACAAAD/gAAA/4AAAP+AAAD/gAAA/4AAAACAAAAAgAOAAAD+gAAAAIAAAP8AAAD/gAAA/4AAAACAAAAAgAAAAQAAAP+AAAAAAAABAQAAgAOABAAADwAAAQEBAQEBAQEBAQEBAQEBAQIAAIAAAACAAAAAgAAA/4AAAP6AAAD/gAAAAIAAAACABAAAAP8AAAD/AAAA/wAAAP+AAAAAgAAAAQAAAAEAAAAAAAACAIAAgAOAA4AAAwAJAAABAQEBAQEBAQEBAIADAAAA/QAAgAAAAgAAAP8AAAADgAAA/QAAAAKA/gAAAAEAAAABAAAAAAIAgACABAAEAAAbACcAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQECAACAAAAAgAAAAIAAAACAAAD/gAAA/4AAAP+AAAD/gAAA/4AAAP+AAAD/gAAAAIAAAACAAAAAgAAAAAD/gAAAAIAAAACAAAAAgAAA/4AAAAQAAAD/gAAA/4AAAP+AAAD/gAAA/4AAAP+AAAD/gAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAA/4D/gAAA/4AAAP+AAAAAgAAAAIAAAACAAAEAAAIABAADAAADAAABAQEBAAAEAAAA/AADAAAA/wAAAAAAAAEAAAAABAAEAAALAAABAQEBAQEBAQEBAQEAAAQAAAD/gAAA/4AAAP+AAAD/gAAA/gAEAAAA/gAAAP+AAAD/gAAA/4AAAP+AAAAAAAABAAACAAIABAAAAwAAAQEBAQAAAgAAAP4ABAAAAP4AAAAAAAACAQAAgAOAA4AAFwAbAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAYABgAAAAIAAAP8AAAAAgAAAAIAAAP8AAAD/gAAA/wAAAACAAAAAgAAA/wAAAACAAIAAAACAAAADgAAA/wAAAP+AAAD/gAAA/4AAAP+AAAAAgAAA/4AAAACAAAAAgAAAAIAAAACAAAAAgP+AAAAAgAADAAAAAAQABAAACwAnADMAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAgAGAAAD/gAAA/4AAAP+AAAD/gAAAAIACgAEAAAD/gAAA/4AAAP+AAAD/gAAA/4AAAP+AAAD/AAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgACAAIAAAP+AAAD+gAAAAIAAAACAAAAAgAQAAAD/gAAA/4AAAP+AAAD/gAAAAYAAAACAAAD/AAAA/4AAAP+AAAD/gAAA/4AAAP+AAAD/gAAAAQAAAACAAAAAgAAAAIAAAACAAAAAgAAA/oAAAP6AAAD/gAAAAIAAAACAAAAAgAAAAAAAAgCAAIADgAQAAA8AHwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEAAAABAAAAAIAAAP+AAAD/AAAA/wAAAP+AAAAAgAAAAQAAAAEAAAAAgAAA/4AAAP8AAAD/AAAA/4AAAACABAAAAP+AAAAAgAAA/wAAAP+AAAAAgAAA/4AAAAEAAAD+gAAA/4AAAACAAAD/AAAA/4AAAACAAAD/gAAAAQAAAAABAAAAAAQAA4AACwAAAQEBAQEBAQEBAQEBAQACAAAAAIAAAACAAAD8AAAAAIAAAACAA4AAAP+AAAD/gAAA/YAAAAKAAAAAgAAAAAAAAQAAAAACAAQAAA8AAAEBAQEBAQEBAQEBAQEBAQEAAACAAAAAgAAAAIAAAACAAAD/gAAA/4AAAP+AAAD/gAQAAAD/gAAA/4AAAP+AAAD/AAAA/4AAAP+AAAD/gAAAAAAAAQIAAAAEAAQAAA8AAAEBAQEBAQEBAQEBAQEBAQEDgACAAAD/gAAA/4AAAP+AAAD/gAAAAIAAAACAAAAAgAQAAAD8AAAAAIAAAACAAAAAgAAAAQAAAACAAAAAgAAAAAAAAQCAAIAEAAQAABcAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQIAAIAAAACAAAAAgAAAAIAAAP+AAAD/AAAA/4AAAP8AAAD/gAAAAIAAAACAAAAAgAQAAAD/gAAA/4AAAP+AAAD/gAAA/oAAAAEAAAD/AAAAAYAAAACAAAAAgAAAAIAAAAAAACAAAAAABAAEAAADAAcACwAPABMAFwAbAB8AIwAnACsALwAzADcAOwA/AEMARwBLAE8AUwBXAFsAXwBjAGcAawBvAHMAdwB7AH8AAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAAAgAAA/4ABAACAAAD/gAEAAIAAAP+AAQAAgAAA/4D9gACAAAD/gAEAAIAAAP+AAQAAgAAA/4ABAACAAAD/gPyAAIAAAP+AAQAAgAAA/4ABAACAAAD/gAEAAIAAAP+A/YAAgAAA/4ABAACAAAD/gAEAAIAAAP+AAQAAgAAA/4D8gACAAAD/gAEAAIAAAP+AAQAAgAAA/4ABAACAAAD/gP2AAIAAAP+AAQAAgAAA/4ABAACAAAD/gAEAAIAAAP+A/IAAgAAA/4ABAACAAAD/gAEAAIAAAP+AAQAAgAAA/4D9gACAAAD/gAEAAIAAAP+AAQAAgAAA/4ABAACAAAD/gAQAAAD/gAAAAIAAAP+AAAAAgAAA/4AAAACAAAD/gAAAAAAAAP+AAAAAgAAA/4AAAACAAAD/gAAAAIAAAP+AAAAAAAAA/4AAAACAAAD/gAAAAIAAAP+AAAAAgAAA/4AAAAAAAAD/gAAAAIAAAP+AAAAAgAAA/4AAAACAAAD/gAAAAAAAAP+AAAAAgAAA/4AAAACAAAD/gAAAAIAAAP+AAAAAAAAA/4AAAACAAAD/gAAAAIAAAP+AAAAAgAAA/4AAAAAAAAD/gAAAAIAAAP+AAAAAgAAA/4AAAACAAAD/gAAAAAAAAP+AAAAAgAAA/4AAAACAAAD/gAAAAIAAAP+AAAAAAQAAAAAEAAQAAAsAAAEBAQEBAQEBAQEBAQAABAAAAP6AAAD/AAAA/4AAAP+AAAD/gAQAAAD8AAAAAIAAAACAAAAAgAAAAQAAAAAAAAEAAAAABAAEAAALAAABAQEBAQEBAQEBAQEAAAQAAAD/gAAA/4AAAP+AAAD/AAAA/oAEAAAA/oAAAP8AAAD/gAAA/4AAAP+AAAAAAAABAAABgAKABAAADwAAAQEBAQEBAQEBAQEBAQEBAQAAAQAAAACAAAAAgAAAAIAAAP8AAAD/gAAA/4AAAP+ABAAAAP+AAAD/gAAA/4AAAP8AAAAAgAAAAIAAAACAAAAAAAABAAAAAAKABAAADwAAAQEBAQEBAQEBAQEBAQEBAQAAAQAAAACAAAAAgAAAAIAAAP8AAAD/gAAA/4AAAP+ABAAAAP+AAAD/gAAA/4AAAP2AAAACAAAAAIAAAACAAAAAAAABAYAAAAQAAoAABQAAAQEBAQEBAYACgAAA/oAAAP8AAoAAAP8AAAD+gAAAAAEAAAAABAAEAAAJAAABAQEBAQEBAQEBAAACgAAAAIAAAACAAAAAgAAA/AAEAAAA/wAAAP8AAAD/AAAA/wAAAAACAAAAAAQABAAAGwAfAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQGAAQAAAACAAAAAgAAAAIAAAP+AAAD/gAAA/4AAAP8AAAD/gAAA/4AAAP+AAAAAgAAAAIAAAACAAAAAAAEAAAAEAAAA/4AAAP+AAAD/gAAA/wAAAP+AAAD/gAAA/4AAAACAAAAAgAAAAIAAAAEAAAAAgAAAAIAAAP8A/wAAAAEAAAEBgAGABAAEAAAFAAABAQEBAQEBgAEAAAABgAAA/YAEAAAA/oAAAP8AAAAAAQAAAAACgAKAAA8AAAEBAQEBAQEBAQEBAQEBAQEBgAEAAAD/gAAA/4AAAP+AAAD/AAAAAIAAAACAAAAAgAKAAAD/AAAA/4AAAP+AAAD/gAAAAQAAAACAAAAAgAAAAAAAAQGAAAAEAAQAAA8AAAEBAQEBAQEBAQEBAQEBAQEDAAEAAAD/gAAA/4AAAP+AAAD/AAAAAIAAAACAAAAAgAQAAAD/AAAA/4AAAP+AAAD+AAAAAoAAAACAAAAAgAAAAAAAAQGAAAAEAAKAAA8AAAEBAQEBAQEBAQEBAQEBAQEBgAEAAAAAgAAAAIAAAACAAAD/AAAA/4AAAP+AAAD/gAKAAAD/gAAA/4AAAP+AAAD/AAAAAIAAAACAAAAAgAAAAAAAAQGAAYAEAAQAAA8AAAEBAQEBAQEBAQEBAQEBAQEDAAEAAAD/gAAA/4AAAP+AAAD/AAAAAIAAAACAAAAAgAQAAAD/AAAA/4AAAP+AAAD/gAAAAQAAAACAAAAAgAAAAAAAAQAAAAAEAAQAABsAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAAEAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAD/AAAA/4AAAP+AAAD/gAAA/4AAAP+AAAD/gAQAAAD/gAAA/4AAAP+AAAD/gAAA/4AAAP+AAAD/AAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAAAAAQAAAAAEAAQAAB8AAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAABAAAAAIAAAAEAAAAAgAAAAQAAAP+AAAD/gAAA/4AAAP+AAAD/gAAA/4AAAP8AAAAAgAAAAIAAAP+AAAD/gAQAAAD/gAAA/4AAAACAAAAAgAAA/wAAAP+AAAD/gAAA/4AAAP+AAAD/gAAA/4AAAAEAAAAAgAAAAQAAAACAAAAAAAABAAABgAQABAAADwAAAQEBAQEBAQEBAQEBAQEBAQAAAQAAAACAAAAAgAAAAgAAAP2AAAD/gAAA/4AAAP+ABAAAAP+AAAD/gAAA/4AAAP8AAAAAgAAAAIAAAACAAAAAAAABAAABgAQAAoAAAwAAAQEBAQAABAAAAPwAAoAAAP8AAAAAAAABAYAAAAKABAAAAwAAAQEBAQGAAQAAAP8ABAAAAPwAAAAAAAABAYAAAAQABAAAFwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAwABAAAA/4AAAP+AAAAAgAAAAIAAAP8AAAD/gAAA/4AAAP+AAAAAgAAAAIAAAACABAAAAP8AAAD/gAAA/wAAAP+AAAD/AAAAAIAAAACAAAAAgAAAAQAAAACAAAAAgAAAAAAAAQAAAAAEAAKAAA8AAAEBAQEBAQEBAQEBAQEBAQEAAAKAAAAAgAAAAIAAAACAAAD/AAAA/4AAAP+AAAD+AAKAAAD/gAAA/4AAAP+AAAD/AAAAAIAAAACAAAAAgAAAAAAAAQAAAYAEAAQAAA8AAAEBAQEBAQEBAQEBAQEBAQEDAAEAAAD/gAAA/4AAAP+AAAD9gAAAAgAAAACAAAAAgAQAAAD/AAAA/4AAAP+AAAD/gAAAAQAAAACAAAAAgAAAAAAAAQAAAgAEAAQAAA8AAAEBAQEBAQEBAQEBAQEBAQEAAAQAAAD/gAAA/4AAAP+AAAD/AAAA/4AAAP+AAAD/gAQAAAD/gAAA/4AAAP+AAAD/gAAAAIAAAACAAAAAgAAAAAAAAQAAAYACgAKAAAMAAAEBAQEAAAKAAAD9gAKAAAD/AAAAAAAAAQGAAAACgAKAAAMAAAEBAQEBgAEAAAD/AAKAAAD9gAAAAAAAAQAAAYAEAAQAABcAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQAAAQAAAACAAAABAAAAAIAAAAEAAAD/gAAA/4AAAP+AAAD/AAAA/4AAAP+AAAD/gAQAAAD/gAAA/4AAAACAAAAAgAAA/wAAAP+AAAD/gAAA/4AAAACAAAAAgAAAAIAAAAAAAAEAAAAABAAEAAAJAAABAQEBAQEBAQEBAYACgAAA/AAAAACAAAAAgAAAAIAEAAAA/AAAAAEAAAABAAAAAQAAAAABAAAAAAQABAAAEwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEDAAEAAAD/gAAA/4AAAP+AAAD/AAAA/oAAAAEAAAABAAAAAIAAAACABAAAAP6AAAD/AAAA/4AAAP+AAAD/gAAAAQAAAACAAAAAgAAAAQAAAAAAAAEAAAAABAAEAAATAAABAQEBAQEBAQEBAQEBAQEBAQEBAQAAAQAAAACAAAAAgAAAAQAAAAEAAAD+gAAA/wAAAP+AAAD/gAAA/4AEAAAA/wAAAP8AAAD/gAAA/4AAAP8AAAAAgAAAAIAAAACAAAABAAAAAAAAAQAAAAAEAAQAABsAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEDAAEAAAD/gAAA/4AAAP+AAAD/gAAA/4AAAP+AAAD/AAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAQAAAD/AAAA/4AAAP+AAAD/gAAA/4AAAP+AAAD/gAAAAQAAAACAAAAAgAAAAIAAAACAAAAAgAAAAAAAAQAAAAACgAQAABcAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQAAAQAAAACAAAAAgAAAAIAAAP+AAAD/gAAA/4AAAP8AAAAAgAAAAIAAAP+AAAD/gAQAAAD/gAAA/4AAAP+AAAD/AAAA/4AAAP+AAAD/gAAAAQAAAACAAAABAAAAAIAAAAAAAAEAAAAABAAEAAAfAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQAAAQAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAP8AAAD/gAAA/wAAAP+AAAD/AAAAAIAAAACAAAD/gAAA/4AEAAAA/4AAAP+AAAD/gAAA/4AAAP+AAAD/gAAA/wAAAACAAAAAgAAA/4AAAP+AAAABAAAAAIAAAAEAAAAAgAAAAAAAAQAAAAACgAQAAA8AAAEBAQEBAQEBAQEBAQEBAQEBgAEAAAD/gAAA/4AAAP+AAAD/AAAAAIAAAACAAAAAgAQAAAD9gAAA/4AAAP+AAAD/gAAAAQAAAACAAAAAgAAAAAAAAQGAAAAEAAQAAA8AAAEBAQEBAQEBAQEBAQEBAQEBgAEAAAAAgAAAAIAAAACAAAD/AAAA/4AAAP+AAAD/gAQAAAD+AAAA/4AAAP+AAAD/AAAAAIAAAACAAAAAgAAAAAAAAQAAAAAEAAKAAA8AAAEBAQEBAQEBAQEBAQEBAQEBgAKAAAD+AAAA/4AAAP+AAAD/AAAAAIAAAACAAAAAgAKAAAD/AAAA/4AAAP+AAAD/gAAAAQAAAACAAAAAgAAAAAAAAQGAAYACgAQAAAMAAAEBAQEBgAEAAAD/AAQAAAD9gAAAAAAAAQGAAYAEAAKAAAMAAAEBAQEBgAKAAAD9gAKAAAD/AAAAAAAAAQAAAAAEAAQAAB8AAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAwABAAAA/4AAAP+AAAAAgAAAAIAAAP8AAAD/gAAA/wAAAP+AAAD/AAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAQAAAD/AAAA/4AAAP8AAAD/gAAA/wAAAACAAAAAgAAA/4AAAP+AAAABAAAAAIAAAACAAAAAgAAAAIAAAACAAAAAAAABAAAAAAQABAAAIwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAABAAAAAIAAAAEAAAAAgAAAAQAAAP+AAAD/gAAAAIAAAACAAAD/AAAA/4AAAP8AAAD/gAAA/wAAAACAAAAAgAAA/4AAAP+ABAAAAP+AAAD/gAAAAIAAAACAAAD/AAAA/4AAAP8AAAD/gAAA/wAAAACAAAAAgAAA/4AAAP+AAAABAAAAAIAAAAEAAAAAgAAAAAAAAQGAAYACgAKAAAMAAAEBAQEBgAEAAAD/AAKAAAD/AAAAAAAAAQAAAAAEAAKAABcAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQGAAQAAAACAAAAAgAAAAIAAAP8AAAD/gAAA/wAAAP+AAAD/AAAAAIAAAACAAAAAgAKAAAD/gAAA/4AAAP+AAAD/AAAAAIAAAACAAAD/gAAA/4AAAAEAAAAAgAAAAIAAAAAAAAEAAAGAAoAEAAAFAAABAQEBAQEBgAEAAAD9gAAAAYAEAAAA/YAAAAEAAAAAAQAAAAACgAKAAAUAAAEBAQEBAQAAAoAAAP8AAAD+gAKAAAD9gAAAAYAAAAABAAAAAAQABAAAHwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAAEAAAAAgAAAAQAAAACAAAABAAAA/4AAAP+AAAAAgAAAAIAAAP8AAAD/gAAA/4AAAP+AAAD/gAAA/4AAAP+ABAAAAP+AAAD/gAAAAIAAAACAAAD/AAAA/4AAAP8AAAD/gAAA/wAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAAAAAAEAAAAABAAEAAALAAABAQEBAQEBAQEBAQEBgAEAAAABgAAA/oAAAP8AAAD+gAAAAYAEAAAA/oAAAP8AAAD+gAAAAYAAAAEAAAAAAAABAAAAAAQAAoAABwAAAQEBAQEBAQEAAAQAAAD+gAAA/wAAAP6AAoAAAP8AAAD+gAAAAYAAAAAAAAEBgAAABAAEAAAHAAABAQEBAQEBAQGAAQAAAAGAAAD+gAAA/wAEAAAA/oAAAP8AAAD+gAAAAAAAAQAAAAACgAQAAAcAAAEBAQEBAQEBAYABAAAA/wAAAP6AAAABgAQAAAD8AAAAAYAAAAEAAAAAAAABAAABgAQABAAABwAAAQEBAQEBAQEBgAEAAAABgAAA/AAAAAGABAAAAP6AAAD/AAAAAQAAAAAAAAQBAAEAAwADAAADAAcACwAPAAABAQEBAQEBAQEBAQEBAQEBAYABAAAA/wD/gACAAAD/gAGAAIAAAP+A/wABAAAA/wADAAAA/4AAAAAAAAD/AAAAAQAAAP8AAAAAAAAA/4AAAAACAIAAgAOAA4AACwAPAAABAQEBAQEBAQEBAQEBAQEBAQACAAAAAIAAAP+AAAD+AAAA/4AAAACAAIAAAAEAAAADgAAA/4AAAP4AAAD/gAAAAIAAAAIAAAD/gP8AAAABAAACAAAAAAQABAAAEwAfAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAgAAAACAAAAAgAAA/4AAAP+AAAD+AAAA/4AAAP+AAAAAgAAAAIAAgAAA/4AAAACAAAABAAAAAIAAAP+AAAAEAAAA/4AAAP+AAAD+AAAA/4AAAP+AAAAAgAAAAIAAAAIAAAAAgAAA/4D/gAAA/wAAAP+AAAAAgAAAAQAAAACAABAAAAAABAAEAAADAAcACwAPABMAFwAbAB8AIwAnACsALwAzADcAOwA/AAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAYAAgAAA/4ACAACAAAD/gP2AAIAAAP+AAgAAgAAA/4D9gACAAAD/gAIAAIAAAP+A/YAAgAAA/4ACAACAAAD/gP+AAIAAAP+AAgAAgAAA/4D9gACAAAD/gAIAAIAAAP+A/YAAgAAA/4ACAACAAAD/gP2AAIAAAP+AAgAAgAAA/4AEAAAA/4AAAACAAAD/gAAAAAAAAP+AAAAAgAAA/4AAAAAAAAD/gAAAAIAAAP+AAAAAAAAA/4AAAACAAAD/gAAAAAAAAP+AAAAAgAAA/4AAAAAAAAD/gAAAAIAAAP+AAAAAAAAA/4AAAACAAAD/gAAAAAAAAP+AAAAAgAAA/4AAAAAQAAAAAAQABAAAAwAHAAsADwATABcAGwAfACMAJwArAC8AMwA3ADsAPwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQAAAIAAAP+AAgAAgAAA/4D+gACAAAD/gAIAAIAAAP+A/oAAgAAA/4ACAACAAAD/gP6AAIAAAP+AAgAAgAAA/4D8gACAAAD/gAIAAIAAAP+A/oAAgAAA/4ACAACAAAD/gP6AAIAAAP+AAgAAgAAA/4D+gACAAAD/gAIAAIAAAP+ABAAAAP+AAAAAgAAA/4AAAAAAAAD/gAAAAIAAAP+AAAAAAAAA/4AAAACAAAD/gAAAAAAAAP+AAAAAgAAA/4AAAAAAAAD/gAAAAIAAAP+AAAAAAAAA/4AAAACAAAD/gAAAAAAAAP+AAAAAgAAA/4AAAAAAAAD/gAAAAIAAAP+AAAAAAwCAAIADgAQAABcAGwAfAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQIAAIAAAAEAAAD/AAAAAIAAAP+AAAABAAAA/wAAAP+AAAD/AAAA/4AAAACAAAABAP+AAAAAgAAA/4AAAACAAAAEAAAA/4AAAP+AAAD/gAAA/4AAAP+AAAD/gAAA/4AAAACAAAAAgAAAAYAAAACAAAD/gP+AAAAAgP8A/4AAAACAAAAAAQCAAIADgAOAAA8AAAEBAQEBAQEBAQEBAQEBAQEBAAIAAAAAgAAA/4AAAP+AAAD/AAAA/4AAAP+AAAAAgAOAAAD/gAAA/wAAAP+AAAD/AAAAAQAAAACAAAABAAAAAAAAAgCAAIADgAOAAAMACQAAAQEBAQEBAQEBAQCAAwAAAP0AAYAAAP8AAAACAAAAA4AAAP0AAAACgP8AAAD/AAAAAgAAAAABAIAAgAOAA4AAAwAAAQEBAQCAAwAAAP0AA4AAAP0AAAAAAAACAIAAgAOAA4AAAwALAAABAQEBAQEBAQEBAQEAgAMAAAD9AACAAAACAAAA/4AAAP8AAAADgAAA/QAAAAKA/gAAAAIAAAD/AAAAAQAAAQAAAAAEAAQAABMAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQACAAAAAIAAAACAAAD/gAAA/4AAAP4AAAD/gAAA/4AAAACAAAAAgAQAAAD/gAAA/4AAAP4AAAD/gAAA/4AAAACAAAAAgAAAAgAAAACAAAAAAAABAQABAAMAAwAACwAAAQEBAQEBAQEBAQEBAYABAAAAAIAAAP+AAAD/AAAA/4AAAACAAwAAAP+AAAD/AAAA/4AAAACAAAABAAAAAAAAAQCAAQAEAAQAABsAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQECAACAAAAAgAAAAQAAAP+AAAD/gAAAAIAAAP8AAAD/gAAA/wAAAACAAAD/gAAA/4AAAAEAAAAAgAQAAAD/gAAA/4AAAP+AAAD/gAAA/4AAAP+AAAAAgAAA/4AAAACAAAAAgAAAAIAAAACAAAAAgAAAAAAABgCAAIAEAAQAAAMABwALAA8AEwAXAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAgAOAAAD8gAEAAAAAgAAAAIAAAACAAAD+AAAAAIAAAAGAAAAAgAAA/gAAAAGAAAAEAAAA/IAAAAMA/wAAAAEAAAD/AAAAAQD+gP+AAAAAgAAA/4AAAACA/4D/gAAAAIAABgCAAIAEAAQAAAMABwALAA8AEwAXAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAgAOAAAD8gAEAAAAAgAAAAIAAAACAAAD+gAAAAYAAAP4AAAAAgAAAAYAAAACAAAAEAAAA/IAAAAMA/wAAAAEAAAD/AAAAAQD+gP+AAAAAgP+A/4AAAACAAAD/gAAAAIAABgCAAIAEAAQAABMAFwAbAB8AIwAnAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAgAAgAAAAIAAAAEAAAD/AAAA/4AAAP+AAAD/gAAA/wAAAAEAAAAAgAAAAAAAgAAA/oAAgAAA/4ACAACAAAD/gP4AAIAAAP+AAgAAgAAA/4AEAAAA/wAAAP+AAAD/gAAA/4AAAP8AAAABAAAAAIAAAACAAAAAgAAA/4D/gAAAAIABAAAA/4AAAACAAAD/gAAA/oAAAP+AAAAAgAAA/4AAAAACAQAAgAOABAAAFwAbAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAYABgAAAAIAAAP+AAAD/gAAAAIAAAP+AAAD/gAAA/4AAAACAAAD/gAAAAQAAAP8A/4AAgAAA/4AEAAAA/4AAAP8AAAD/gAAA/4AAAP+AAAD/gAAAAIAAAACAAAAAgAAAAIAAAAEAAAAAAAAA/wAAAAACAIAAgAQABAAAFwAbAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAYACgAAA/4AAAP+AAAD/gAAAAIAAAP+AAAD+gAAAAQAAAP8AAAABAAAAAIAAAP8A/wAAgAAA/4AEAAAA/gAAAAEAAAD/gAAA/4AAAP8AAAD/gAAAAIAAAAEAAAAAgAAAAIAAAACAAAD+gAAA/wAAAAABAIAAgAQABAAAGwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQIAAIAAAACAAAAAgAAAAIAAAP8AAAD/gAAAAIAAAP6AAAAAgAAA/4AAAP8AAAAAgAAAAIAAAACABAAAAP+AAAD/gAAA/4AAAP8AAAAAgAAA/wAAAP+AAAAAgAAAAQAAAP+AAAABAAAAAIAAAACAAAAAAAABAIAAgAQABAAAGwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQGAAYAAAP+AAAAAgAAAAQAAAP8AAAD/gAAAAIAAAP6AAAAAgAAA/4AAAP8AAAABAAAAAIAAAP+ABAAAAP8AAAD/gAAAAIAAAP6AAAAAgAAA/wAAAP+AAAAAgAAAAQAAAP+AAAABgAAA/4AAAACAAAAAAAABAIAAgAQABAAAFwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAAAAAIAAAAEAAAAAgAAA/4AAAP+AAAD/gAAA/4AAAP+AAAD/gAAA/4AAAACABAAAAP+AAAAAgAAA/4AAAP6AAAD/gAAA/4AAAP+AAAAAgAAAAIAAAACAAAABgAAAAAAAAQCAAIAEAAQAABsAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQECAACAAAAAgAAAAIAAAACAAAD/gAAA/4AAAP+AAAD/gAAA/4AAAP+AAAD/gAAAAIAAAACAAAAAgAQAAAD/gAAA/4AAAP+AAAD/gAAA/4AAAP+AAAD/gAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAAAAAQEAAIADgAQAAAsAAAEBAQEBAQEBAQEBAQIAAYAAAP8AAAD/gAAA/wAAAACAAAAAgAQAAAD/AAAA/gAAAP+AAAABAAAAAIAAAAAAAAEAgACABAAEAAATAAABAQEBAQEBAQEBAQEBAQEBAQEBAQGAAoAAAP+AAAD/AAAAAIAAAACAAAD+gAAA/4AAAP8AAAAAgAAAAIAEAAAA/QAAAP+AAAABAAAAAIAAAAEAAAD+AAAA/4AAAAEAAAAAgAAAAAAAAAAYASYAAQAAAAAAAAAIAAAAAQAAAAAAAQAIAAgAAQAAAAAAAgAHABAAAQAAAAAAAwAIABcAAQAAAAAABAAQAB8AAQAAAAAABQALAC8AAQAAAAAABgAIADoAAQAAAAAACQAJAEIAAQAAAAAACgA6AEsAAQAAAAAADQARAIUAAQAAAAAADgAyAJYAAQAAAAAAEwAMAMgAAwABBAkAAAAQANQAAwABBAkAAQAQAOQAAwABBAkAAgAOAPQAAwABBAkAAwAQAQIAAwABBAkABAAgARIAAwABBAkABQAWATIAAwABBAkABgAQAUgAAwABBAkACQASAVgAAwABBAkACgB0AWoAAwABBAkADQAiAd4AAwABBAkADgBkAgAAAwABBAkAEwAYAmQoYykgMjAyMlVyc2FGb250UmVndWxhclVyc2FGb250VXJzYUZvbnQgUmVndWxhclZlcnNpb24gMS4wVXJzYUZvbnRVcnNhRnJhbmtBbiBvcGVuIGxpY2VuY2UgZ2VuZXJhbCBwdXJwb3NlIHRleHRtb2RlIGZvbnQgYnkgVXJzYUZyYW5rQ0MwIDEuMCBVbml2ZXJzYWxodHRwczovL2NyZWF0aXZlY29tbW9ucy5vcmcvcHVibGljZG9tYWluL3plcm8vMS4wL0hlbGxvIFdvcmxkIQAoAGMAKQAgADIAMAAyADIAVQByAHMAYQBGAG8AbgB0AFIAZQBnAHUAbABhAHIAVQByAHMAYQBGAG8AbgB0AFUAcgBzAGEARgBvAG4AdAAgAFIAZQBnAHUAbABhAHIAVgBlAHIAcwBpAG8AbgAgADEALgAwAFUAcgBzAGEARgBvAG4AdABVAHIAcwBhAEYAcgBhAG4AawBBAG4AIABvAHAAZQBuACAAbABpAGMAZQBuAGMAZQAgAGcAZQBuAGUAcgBhAGwAIABwAHUAcgBwAG8AcwBlACAAdABlAHgAdABtAG8AZABlACAAZgBvAG4AdAAgAGIAeQAgAFUAcgBzAGEARgByAGEAbgBrAEMAQwAwACAAMQAuADAAIABVAG4AaQB2AGUAcgBzAGEAbABoAHQAdABwAHMAOgAvAC8AYwByAGUAYQB0AGkAdgBlAGMAbwBtAG0AbwBuAHMALgBvAHIAZwAvAHAAdQBiAGwAaQBjAGQAbwBtAGEAaQBuAC8AegBlAHIAbwAvADEALgAwAC8ASABlAGwAbABvACAAVwBvAHIAbABkACEAAAADAAAAAAAAAGYAMwAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==\r
|
|
934
922
|
`)).arrayBuffer();
|
|
935
|
-
await this.
|
|
923
|
+
await this.kt(t), this._t = w.parse(t)[0], await this.Rt();
|
|
936
924
|
}
|
|
937
|
-
|
|
938
|
-
if (A === void 0) return this.
|
|
939
|
-
this.
|
|
940
|
-
const t = this.
|
|
941
|
-
this.
|
|
925
|
+
Vt(A) {
|
|
926
|
+
if (A === void 0) return this.xt;
|
|
927
|
+
this.xt = A, this.Gt = this.St.calculateMaxGlyphDimensions(this.vt.map((e) => e.character), this.xt, this._t);
|
|
928
|
+
const t = this.Tt.createTextureAtlas(this.vt, this.Gt, this.xt, this._t);
|
|
929
|
+
this.bt = t.framebuffer, this.yt = t.columns, this.Mt = t.rows;
|
|
942
930
|
}
|
|
943
|
-
async
|
|
931
|
+
async Ht(A) {
|
|
944
932
|
try {
|
|
945
933
|
const t = await fetch(A);
|
|
946
934
|
if (!t.ok) throw new I(`Failed to load font file: ${t.status} ${t.statusText}`);
|
|
947
935
|
const e = await t.arrayBuffer();
|
|
948
|
-
await this.
|
|
936
|
+
await this.kt(e);
|
|
949
937
|
const s = w.parse(e);
|
|
950
938
|
if (!s || s.length === 0) throw Error("Failed to parse font file");
|
|
951
|
-
this.
|
|
939
|
+
this._t = s[0], await this.Rt();
|
|
952
940
|
} catch (t) {
|
|
953
941
|
throw new I("Failed to load font: " + (t instanceof Error ? t.message : "Unknown error"), t);
|
|
954
942
|
}
|
|
955
943
|
}
|
|
956
|
-
async
|
|
944
|
+
async kt(A) {
|
|
957
945
|
const t = Date.now();
|
|
958
|
-
this
|
|
946
|
+
this.$t = this.$t === "UrsaFont" ? "UrsaFont" : "CustomFont_" + t, this.Ft = new FontFace(this.$t, A), await this.Ft.load(), document.fonts.add(this.Ft);
|
|
959
947
|
}
|
|
960
|
-
async
|
|
961
|
-
const A = this.
|
|
962
|
-
this.
|
|
963
|
-
const e = this.
|
|
964
|
-
this.
|
|
948
|
+
async Rt() {
|
|
949
|
+
const A = this.Yt.extractCharacters(this._t), t = this.Yt.filterProblematicCharacters(A);
|
|
950
|
+
this.vt = this.Ot.createCharacterObjects(t, this._t), this.Gt = this.St.calculateMaxGlyphDimensions(t, this.xt, this._t);
|
|
951
|
+
const e = this.Tt.createTextureAtlas(this.vt, this.Gt, this.xt, this._t);
|
|
952
|
+
this.bt = e.framebuffer, this.yt = e.columns, this.Mt = e.rows;
|
|
965
953
|
}
|
|
966
954
|
getCharacterColor(A) {
|
|
967
|
-
return this.
|
|
955
|
+
return this.Ot.getCharacterColor(A, this.vt);
|
|
968
956
|
}
|
|
969
957
|
getCharacterColors(A) {
|
|
970
|
-
return this.
|
|
958
|
+
return this.Ot.getCharacterColors(A, this.vt);
|
|
971
959
|
}
|
|
972
960
|
hasAllCharacters(A) {
|
|
973
961
|
if (typeof A != "string" || A.length === 0) return !1;
|
|
974
|
-
const t = new Set(this.
|
|
962
|
+
const t = new Set(this.vt.map((e) => e.character));
|
|
975
963
|
for (const e of A) if (!t.has(e)) return !1;
|
|
976
964
|
return !0;
|
|
977
965
|
}
|
|
978
966
|
S() {
|
|
979
|
-
this.
|
|
967
|
+
this.bt.S(), document.fonts.delete(this.Ft);
|
|
980
968
|
}
|
|
981
969
|
get fontFramebuffer() {
|
|
982
|
-
return this.
|
|
970
|
+
return this.bt;
|
|
983
971
|
}
|
|
984
972
|
get characters() {
|
|
985
|
-
return this.
|
|
973
|
+
return this.vt;
|
|
986
974
|
}
|
|
987
975
|
get textureColumns() {
|
|
988
|
-
return this.
|
|
976
|
+
return this.yt;
|
|
989
977
|
}
|
|
990
978
|
get textureRows() {
|
|
991
|
-
return this.
|
|
979
|
+
return this.Mt;
|
|
992
980
|
}
|
|
993
981
|
get maxGlyphDimensions() {
|
|
994
|
-
return this.
|
|
982
|
+
return this.Gt;
|
|
995
983
|
}
|
|
996
984
|
get fontSize() {
|
|
997
|
-
return this.
|
|
985
|
+
return this.xt;
|
|
998
986
|
}
|
|
999
987
|
get font() {
|
|
1000
|
-
return this.
|
|
988
|
+
return this._t;
|
|
1001
989
|
}
|
|
1002
990
|
}
|
|
1003
|
-
class
|
|
991
|
+
class DA {
|
|
1004
992
|
constructor(A, t, e) {
|
|
993
|
+
o(this, "zt");
|
|
1005
994
|
o(this, "Lt");
|
|
1006
|
-
o(this, "Jt");
|
|
1007
995
|
o(this, "p");
|
|
1008
996
|
o(this, "_");
|
|
997
|
+
o(this, "Jt");
|
|
1009
998
|
o(this, "Kt");
|
|
1010
|
-
o(this, "Wt");
|
|
1011
|
-
o(this, "jt"
|
|
999
|
+
o(this, "Wt", !1);
|
|
1000
|
+
o(this, "jt");
|
|
1012
1001
|
o(this, "Nt");
|
|
1013
1002
|
o(this, "Zt");
|
|
1014
|
-
|
|
1015
|
-
this.Nt = A, this.Zt = t, this.Xt = e, this.xA();
|
|
1003
|
+
this.jt = A, this.Nt = t, this.Zt = e, this.xA();
|
|
1016
1004
|
}
|
|
1017
1005
|
xA() {
|
|
1018
|
-
this.
|
|
1006
|
+
this.Wt || (this.zt = Math.floor(this.jt.width / this.Nt), this.Lt = Math.floor(this.jt.height / this.Zt)), this.Xt();
|
|
1019
1007
|
}
|
|
1020
|
-
|
|
1021
|
-
this.p = this.
|
|
1008
|
+
Xt() {
|
|
1009
|
+
this.p = this.zt * this.Nt, this._ = this.Lt * this.Zt, this.Jt = Math.floor((this.jt.width - this.p) / 2), this.Kt = Math.floor((this.jt.height - this._) / 2);
|
|
1010
|
+
}
|
|
1011
|
+
qt(A, t) {
|
|
1012
|
+
this.Nt = A, this.Zt = t, this.xA();
|
|
1022
1013
|
}
|
|
1023
1014
|
Ae(A, t) {
|
|
1024
|
-
this.
|
|
1015
|
+
this.Wt = !0, this.zt = A, this.Lt = t, this.Xt();
|
|
1025
1016
|
}
|
|
1026
|
-
te(
|
|
1027
|
-
this.
|
|
1017
|
+
te() {
|
|
1018
|
+
this.Wt = !1, this.xA();
|
|
1028
1019
|
}
|
|
1029
1020
|
ee() {
|
|
1030
|
-
this.
|
|
1031
|
-
}
|
|
1032
|
-
se() {
|
|
1033
|
-
this.jt ? this.qt() : this.xA();
|
|
1021
|
+
this.Wt ? this.Xt() : this.xA();
|
|
1034
1022
|
}
|
|
1035
|
-
|
|
1036
|
-
if (A === void 0) return this.
|
|
1037
|
-
this.
|
|
1023
|
+
se(A) {
|
|
1024
|
+
if (A === void 0) return this.Wt;
|
|
1025
|
+
this.Wt = A;
|
|
1038
1026
|
}
|
|
1039
1027
|
get cellWidth() {
|
|
1040
|
-
return this.
|
|
1028
|
+
return this.Nt;
|
|
1041
1029
|
}
|
|
1042
1030
|
get cellHeight() {
|
|
1043
|
-
return this.
|
|
1031
|
+
return this.Zt;
|
|
1044
1032
|
}
|
|
1045
1033
|
get cols() {
|
|
1046
|
-
return this.
|
|
1034
|
+
return this.zt;
|
|
1047
1035
|
}
|
|
1048
1036
|
get rows() {
|
|
1049
|
-
return this.
|
|
1037
|
+
return this.Lt;
|
|
1050
1038
|
}
|
|
1051
1039
|
get width() {
|
|
1052
1040
|
return this.p;
|
|
@@ -1055,109 +1043,109 @@ class CA {
|
|
|
1055
1043
|
return this._;
|
|
1056
1044
|
}
|
|
1057
1045
|
get offsetX() {
|
|
1058
|
-
return this.
|
|
1046
|
+
return this.Jt;
|
|
1059
1047
|
}
|
|
1060
1048
|
get offsetY() {
|
|
1061
|
-
return this.
|
|
1049
|
+
return this.Kt;
|
|
1062
1050
|
}
|
|
1063
1051
|
}
|
|
1064
|
-
class
|
|
1052
|
+
class CA {
|
|
1065
1053
|
constructor(A, t = !1, e = {}) {
|
|
1066
|
-
o(this, "
|
|
1054
|
+
o(this, "jt");
|
|
1055
|
+
o(this, "re");
|
|
1067
1056
|
o(this, "Be");
|
|
1068
1057
|
o(this, "ie");
|
|
1069
|
-
o(this, "Qe");
|
|
1070
1058
|
o(this, "onTransformChange");
|
|
1071
|
-
this.
|
|
1059
|
+
this.re = A, this.Be = t, this.jt = this.Qe(e.width, e.height), t && this.setupTransformObserver();
|
|
1072
1060
|
}
|
|
1073
|
-
|
|
1061
|
+
Qe(A, t) {
|
|
1074
1062
|
var s;
|
|
1075
1063
|
const e = document.createElement("canvas");
|
|
1076
|
-
if (e.className = "textmodeCanvas", e.style.imageRendering = "pixelated", this.
|
|
1064
|
+
if (e.className = "textmodeCanvas", e.style.imageRendering = "pixelated", this.Be) e.width = A || 800, e.height = t || 600, document.body.appendChild(e);
|
|
1077
1065
|
else {
|
|
1078
|
-
const r = this.
|
|
1066
|
+
const r = this.re.getBoundingClientRect();
|
|
1079
1067
|
let i = Math.round(r.width), B = Math.round(r.height);
|
|
1080
|
-
if (this.
|
|
1081
|
-
const g = this.
|
|
1068
|
+
if (this.re instanceof HTMLVideoElement) {
|
|
1069
|
+
const g = this.re;
|
|
1082
1070
|
(i === 0 || B === 0) && g.videoWidth > 0 && g.videoHeight > 0 && (i = g.videoWidth, B = g.videoHeight);
|
|
1083
1071
|
}
|
|
1084
1072
|
e.width = i, e.height = B, e.style.position = "absolute", e.style.pointerEvents = "none";
|
|
1085
|
-
const Q = window.getComputedStyle(this.
|
|
1073
|
+
const Q = window.getComputedStyle(this.re);
|
|
1086
1074
|
let n = parseInt(Q.zIndex || "0", 10);
|
|
1087
|
-
isNaN(n) && (n = 0), e.style.zIndex = "" + (n + 1), this.
|
|
1075
|
+
isNaN(n) && (n = 0), e.style.zIndex = "" + (n + 1), this.Ee(e), (s = this.re.parentNode) == null || s.insertBefore(e, this.re.nextSibling);
|
|
1088
1076
|
}
|
|
1089
1077
|
return e;
|
|
1090
1078
|
}
|
|
1091
|
-
|
|
1092
|
-
const t = this.
|
|
1093
|
-
let e = this.
|
|
1079
|
+
Ee(A) {
|
|
1080
|
+
const t = this.re.getBoundingClientRect();
|
|
1081
|
+
let e = this.re.offsetParent;
|
|
1094
1082
|
if (e && e !== document.body) {
|
|
1095
1083
|
const s = e.getBoundingClientRect();
|
|
1096
1084
|
A.style.top = t.top - s.top + "px", A.style.left = t.left - s.left + "px";
|
|
1097
1085
|
} else A.style.top = t.top + window.scrollY + "px", A.style.left = t.left + window.scrollX + "px";
|
|
1098
1086
|
}
|
|
1099
|
-
|
|
1100
|
-
if (this.
|
|
1087
|
+
ee(A, t) {
|
|
1088
|
+
if (this.Be) this.jt.width = A ?? this.jt.width, this.jt.height = t ?? this.jt.height;
|
|
1101
1089
|
else {
|
|
1102
|
-
const e = this.
|
|
1090
|
+
const e = this.re.getBoundingClientRect();
|
|
1103
1091
|
let s = Math.round(e.width), r = Math.round(e.height);
|
|
1104
|
-
if (this.
|
|
1105
|
-
const i = this.
|
|
1092
|
+
if (this.re instanceof HTMLVideoElement) {
|
|
1093
|
+
const i = this.re;
|
|
1106
1094
|
(s === 0 || r === 0) && i.videoWidth > 0 && i.videoHeight > 0 && (s = i.videoWidth, r = i.videoHeight);
|
|
1107
1095
|
}
|
|
1108
|
-
this.
|
|
1096
|
+
this.jt.width = s, this.jt.height = r, this.Ee(this.jt);
|
|
1109
1097
|
}
|
|
1110
1098
|
}
|
|
1111
|
-
|
|
1112
|
-
const A = { alpha: !1, premultipliedAlpha: !1, preserveDrawingBuffer: !0, antialias: !1, depth: !1, stencil: !1, powerPreference: "high-performance" }, t = this.
|
|
1099
|
+
oe() {
|
|
1100
|
+
const A = { alpha: !1, premultipliedAlpha: !1, preserveDrawingBuffer: !0, antialias: !1, depth: !1, stencil: !1, powerPreference: "high-performance" }, t = this.jt.getContext("webgl2", A) || this.jt.getContext("webgl", A);
|
|
1113
1101
|
if (!t) throw new I("WebGL context could not be created. Ensure your browser supports WebGL.");
|
|
1114
1102
|
return t;
|
|
1115
1103
|
}
|
|
1116
1104
|
setupTransformObserver() {
|
|
1117
|
-
this.
|
|
1105
|
+
this.ie = new ResizeObserver((A) => {
|
|
1118
1106
|
for (const t of A) {
|
|
1119
1107
|
const e = t.contentRect;
|
|
1120
|
-
!this.onTransformChange || Math.round(e.width) === this.
|
|
1108
|
+
!this.onTransformChange || Math.round(e.width) === this.jt.width && Math.round(e.height) === this.jt.height || this.onTransformChange();
|
|
1121
1109
|
}
|
|
1122
|
-
}), this.
|
|
1110
|
+
}), this.ie.observe(this.jt);
|
|
1123
1111
|
}
|
|
1124
1112
|
S() {
|
|
1125
|
-
this.
|
|
1126
|
-
const A = this.
|
|
1113
|
+
this.ie && this.ie.disconnect();
|
|
1114
|
+
const A = this.jt.getContext("webgl") || this.jt.getContext("webgl2");
|
|
1127
1115
|
if (A) {
|
|
1128
1116
|
const t = A.getExtension("WEBGL_lose_context");
|
|
1129
1117
|
t && t.loseContext();
|
|
1130
1118
|
}
|
|
1131
|
-
this.
|
|
1119
|
+
this.jt.parentNode && this.jt.parentNode.removeChild(this.jt);
|
|
1132
1120
|
}
|
|
1133
1121
|
get canvas() {
|
|
1134
|
-
return this.
|
|
1122
|
+
return this.jt;
|
|
1135
1123
|
}
|
|
1136
1124
|
get width() {
|
|
1137
|
-
return this.
|
|
1125
|
+
return this.jt.width;
|
|
1138
1126
|
}
|
|
1139
1127
|
get height() {
|
|
1140
|
-
return this.
|
|
1128
|
+
return this.jt.height;
|
|
1141
1129
|
}
|
|
1142
1130
|
}
|
|
1143
|
-
class
|
|
1131
|
+
class M {
|
|
1144
1132
|
constructor(A, t, e, s = {}) {
|
|
1145
|
-
o(this, "
|
|
1133
|
+
o(this, "Dt");
|
|
1134
|
+
o(this, "ge");
|
|
1146
1135
|
o(this, "ne");
|
|
1147
1136
|
o(this, "ae");
|
|
1148
1137
|
o(this, "he");
|
|
1149
1138
|
o(this, "le");
|
|
1150
1139
|
o(this, "ce");
|
|
1151
1140
|
o(this, "De");
|
|
1152
|
-
o(this, "Ce");
|
|
1153
1141
|
o(this, "h");
|
|
1154
|
-
this.
|
|
1155
|
-
const r = this.
|
|
1156
|
-
this.
|
|
1142
|
+
this.Dt = A, this.ge = t, this.ne = e, this.h = s;
|
|
1143
|
+
const r = this.ne.cols, i = this.ne.rows;
|
|
1144
|
+
this.ae = this.Dt.SA(r, i), this.he = this.Dt.SA(r, i), this.le = this.Dt.SA(r, i), this.ce = this.Dt.SA(r, i), this.De = this.Dt.SA(r, i);
|
|
1157
1145
|
}
|
|
1158
|
-
|
|
1159
|
-
const A = this.
|
|
1160
|
-
this.
|
|
1146
|
+
ee() {
|
|
1147
|
+
const A = this.ne.cols, t = this.ne.rows;
|
|
1148
|
+
this.ae.resize(A, t), this.he.resize(A, t), this.le.resize(A, t), this.ce.resize(A, t), this.De.resize(A, t);
|
|
1161
1149
|
}
|
|
1162
1150
|
enabled(A) {
|
|
1163
1151
|
u.C(typeof A == "boolean" || typeof A == "number" && Number.isInteger(A), "Enabled must be a boolean value or an integer (0 for false, any other number for true).", { method: "enabled", providedValue: A }) && (this.h.enabled = !!A);
|
|
@@ -1169,22 +1157,22 @@ class F {
|
|
|
1169
1157
|
this.enabled(!1);
|
|
1170
1158
|
}
|
|
1171
1159
|
S() {
|
|
1172
|
-
this.
|
|
1160
|
+
this.ae.S(), this.he.S(), this.le.S(), this.ce.S(), this.De.S();
|
|
1173
1161
|
}
|
|
1174
1162
|
get characterFramebuffer() {
|
|
1175
|
-
return this.
|
|
1163
|
+
return this.ae;
|
|
1176
1164
|
}
|
|
1177
1165
|
get primaryColorFramebuffer() {
|
|
1178
|
-
return this.
|
|
1166
|
+
return this.he;
|
|
1179
1167
|
}
|
|
1180
1168
|
get secondaryColorFramebuffer() {
|
|
1181
|
-
return this.
|
|
1169
|
+
return this.le;
|
|
1182
1170
|
}
|
|
1183
1171
|
get rotationFramebuffer() {
|
|
1184
|
-
return this.
|
|
1172
|
+
return this.ce;
|
|
1185
1173
|
}
|
|
1186
1174
|
get transformFramebuffer() {
|
|
1187
|
-
return this.
|
|
1175
|
+
return this.De;
|
|
1188
1176
|
}
|
|
1189
1177
|
get options() {
|
|
1190
1178
|
return this.h;
|
|
@@ -1193,27 +1181,27 @@ class F {
|
|
|
1193
1181
|
class uA {
|
|
1194
1182
|
constructor(A, t) {
|
|
1195
1183
|
o(this, "I");
|
|
1196
|
-
o(this, "
|
|
1197
|
-
o(this, "
|
|
1198
|
-
this.
|
|
1199
|
-
const e = Math.max(this.
|
|
1200
|
-
this.I = this.
|
|
1184
|
+
o(this, "Dt");
|
|
1185
|
+
o(this, "Ce");
|
|
1186
|
+
this.Dt = A, this.Ce = t;
|
|
1187
|
+
const e = Math.max(this.Ce.length, 1);
|
|
1188
|
+
this.I = this.Dt.SA(e, 1), this.ue();
|
|
1201
1189
|
}
|
|
1202
|
-
|
|
1203
|
-
const A = this.
|
|
1190
|
+
ue() {
|
|
1191
|
+
const A = this.Ce.length;
|
|
1204
1192
|
this.I.width !== A && this.I.resize(A, 1);
|
|
1205
1193
|
const t = new Uint8Array(1 * A * 4);
|
|
1206
1194
|
for (let e = 0; e < A; e++) {
|
|
1207
|
-
const s = this.
|
|
1195
|
+
const s = this.Ce[e], r = 4 * e;
|
|
1208
1196
|
t[r] = s[0], t[r + 1] = s[1], t[r + 2] = s[2], t[r + 3] = 255;
|
|
1209
1197
|
}
|
|
1210
1198
|
this.I.updatePixels(t, A, 1);
|
|
1211
1199
|
}
|
|
1212
1200
|
setColors(A) {
|
|
1213
|
-
this.
|
|
1201
|
+
this.Ce = A, this.ue();
|
|
1214
1202
|
}
|
|
1215
1203
|
get colors() {
|
|
1216
|
-
return this.
|
|
1204
|
+
return this.Ce;
|
|
1217
1205
|
}
|
|
1218
1206
|
get framebuffer() {
|
|
1219
1207
|
return this.I;
|
|
@@ -1222,31 +1210,31 @@ class uA {
|
|
|
1222
1210
|
return this.I.texture;
|
|
1223
1211
|
}
|
|
1224
1212
|
}
|
|
1225
|
-
class O extends
|
|
1213
|
+
class O extends M {
|
|
1226
1214
|
constructor(t, e, s, r = {}) {
|
|
1227
1215
|
super(t, e, s, r);
|
|
1228
|
-
o(this, "
|
|
1229
|
-
this.
|
|
1216
|
+
o(this, "Pe");
|
|
1217
|
+
this.Pe = new uA(this.Dt, this.ge.getCharacterColors(" .:-=+*%@#"));
|
|
1230
1218
|
}
|
|
1231
1219
|
characters(t) {
|
|
1232
|
-
u.C(this.
|
|
1220
|
+
u.C(this.ge.hasAllCharacters(t), "One or more characters do not exist in the current font.", { method: "characters", providedValue: t }) && (this.h.characters = t, this.Pe.setColors(this.ge.getCharacterColors(t)));
|
|
1233
1221
|
}
|
|
1234
1222
|
characterColor(t, e, s, r = 255) {
|
|
1235
|
-
const i = this.
|
|
1223
|
+
const i = this.Ie(t, "characterColor", e, s, r);
|
|
1236
1224
|
i && (this.h.characterColor = i);
|
|
1237
1225
|
}
|
|
1238
1226
|
characterColorMode(t) {
|
|
1239
|
-
this.
|
|
1227
|
+
this.we(t, "characterColorMode");
|
|
1240
1228
|
}
|
|
1241
1229
|
cellColor(t, e, s, r = 255) {
|
|
1242
|
-
const i = this.
|
|
1230
|
+
const i = this.Ie(t, "cellColor", e, s, r);
|
|
1243
1231
|
i && (this.h.cellColor = i);
|
|
1244
1232
|
}
|
|
1245
1233
|
cellColorMode(t) {
|
|
1246
|
-
this.
|
|
1234
|
+
this.we(t, "cellColorMode");
|
|
1247
1235
|
}
|
|
1248
1236
|
invert(t) {
|
|
1249
|
-
this.
|
|
1237
|
+
this.fe(t, "invert", "Invert");
|
|
1250
1238
|
}
|
|
1251
1239
|
rotation(t) {
|
|
1252
1240
|
if (!u.C(typeof t == "number", "Rotation angle must be a number.", { method: "rotation", providedValue: t })) return;
|
|
@@ -1255,27 +1243,27 @@ class O extends F {
|
|
|
1255
1243
|
this.h.rotation = [s, r, 0, 1];
|
|
1256
1244
|
}
|
|
1257
1245
|
flipHorizontally(t) {
|
|
1258
|
-
this.
|
|
1246
|
+
this.fe(t, "flipHorizontally", "Flip horizontally");
|
|
1259
1247
|
}
|
|
1260
1248
|
flipVertically(t) {
|
|
1261
|
-
this.
|
|
1249
|
+
this.fe(t, "flipVertically", "Flip vertically");
|
|
1262
1250
|
}
|
|
1263
|
-
|
|
1251
|
+
Ie(t, e, s, r, i = 255) {
|
|
1264
1252
|
let B, Q, n, g;
|
|
1265
1253
|
if (typeof t == "string") {
|
|
1266
|
-
const h = this.
|
|
1254
|
+
const h = this.de(t);
|
|
1267
1255
|
if (!h) return u.C(!1, "Invalid hex color format. Use '#FF0000', '#F00', 'FF0000', or 'F00'.", { method: e, providedValue: t }), null;
|
|
1268
1256
|
[B, Q, n, g] = h;
|
|
1269
1257
|
} else if (B = t, Q = s !== void 0 ? s : t, n = r !== void 0 ? r : t, g = i, !u.C([B, Q, n, g].every((h) => h >= 0 && h <= 255), e.charAt(0).toUpperCase() + e.slice(1) + " color values must be between 0 and 255", { method: e, providedValues: { r: B, g: Q, b: n, a: g } })) return null;
|
|
1270
1258
|
return [B / 255, Q / 255, n / 255, g / 255];
|
|
1271
1259
|
}
|
|
1272
|
-
|
|
1260
|
+
we(t, e) {
|
|
1273
1261
|
u.C(["sampled", "fixed"].includes(t), "Invalid color mode. Must be 'sampled' or 'fixed'.", { method: e, providedValue: t }) && (this.h[e] = t);
|
|
1274
1262
|
}
|
|
1275
|
-
|
|
1263
|
+
fe(t, e, s) {
|
|
1276
1264
|
u.C(typeof t == "boolean" || typeof t == "number" && Number.isInteger(t), s + " must be a boolean value or an integer (0 for false, any other number for true).", { method: e, providedValue: t }) && (this.h[e] = !!t);
|
|
1277
1265
|
}
|
|
1278
|
-
|
|
1266
|
+
de(t) {
|
|
1279
1267
|
return t = t.replace(/^#/, ""), /^[0-9A-Fa-f]{3}$|^[0-9A-Fa-f]{6}$/.test(t) ? (t.length === 3 && (t = t.split("").map((e) => e + e).join("")), [parseInt(t.slice(0, 2), 16), parseInt(t.slice(2, 4), 16), parseInt(t.slice(4, 6), 16), 255]) : null;
|
|
1280
1268
|
}
|
|
1281
1269
|
}
|
|
@@ -1318,243 +1306,243 @@ void main() {\r
|
|
|
1318
1306
|
gl_Position = vec4(pos, 0.0, 1.0);\r
|
|
1319
1307
|
}\r
|
|
1320
1308
|
`, PA = { enabled: !0, characters: " .:-=+*%@#", characterColor: [1, 1, 1, 1], characterColorMode: "sampled", cellColor: [0, 0, 0, 1], cellColorMode: "fixed", invert: !1, rotation: [0, 0, 0, 255], flipHorizontally: !1, flipVertically: !1, brightnessRange: [0, 255] };
|
|
1321
|
-
class
|
|
1309
|
+
class Y extends O {
|
|
1322
1310
|
constructor(t, e, s) {
|
|
1323
1311
|
super(t, e, s, { ...PA });
|
|
1312
|
+
o(this, "me");
|
|
1324
1313
|
o(this, "pe");
|
|
1325
1314
|
o(this, "_e");
|
|
1326
1315
|
o(this, "ve");
|
|
1327
1316
|
o(this, "be");
|
|
1328
1317
|
o(this, "xe");
|
|
1329
|
-
|
|
1330
|
-
this.pe = new x(t.context, T, "precision lowp float;uniform sampler2D u_sketchTexture;uniform vec2 u_gridCellDimensions;uniform vec2 u_brightnessRange;varying vec2 v_uv;void main(){vec2 cellCenter=(floor(v_uv*u_gridCellDimensions)+vec2(0.5))/u_gridCellDimensions;vec4 color=texture2D(u_sketchTexture,cellCenter);float brightness=dot(color.rgb,vec3(0.299,0.587,0.114));float brightnessValue=brightness*255.0;if(brightnessValue>=u_brightnessRange.x&&brightnessValue<=u_brightnessRange.y){gl_FragColor=color;}else{gl_FragColor=vec4(0.0);}}"), this._e = new x(t.context, T, "precision lowp float;uniform sampler2D u_sampleTexture;uniform vec4 u_fillColor;uniform bool u_useFixedColor;varying vec2 v_uv;void main(){vec4 sampleColor=texture2D(u_sampleTexture,v_uv);if(sampleColor.a>0.0){if(u_useFixedColor){gl_FragColor=u_fillColor;}else{gl_FragColor=sampleColor;}}else{gl_FragColor=vec4(0.0);}}"), this.be = new x(t.context, T, "precision lowp float;uniform sampler2D u_sampleTexture;uniform bool u_invert;uniform bool u_flipHorizontally;uniform bool u_flipVertically;varying vec2 v_uv;void main(){vec4 sampleColor=texture2D(u_sampleTexture,v_uv);if(sampleColor.a>0.0){float invertValue=u_invert ? 1.0 : 0.0;float flipHValue=u_flipHorizontally ? 1.0 : 0.0;float flipVValue=u_flipVertically ? 1.0 : 0.0;gl_FragColor=vec4(invertValue,flipHValue,flipVValue,1.0);}else{gl_FragColor=vec4(0.0);}}"), this.xe = new x(t.context, T, "precision lowp float;uniform sampler2D u_sampleTexture;uniform vec4 u_rotationColor;varying vec2 v_uv;void main(){vec4 sampleColor=texture2D(u_sampleTexture,v_uv);if(sampleColor.a>0.0){gl_FragColor=u_rotationColor;}else{gl_FragColor=vec4(0.0);}}"), this.ve = new x(t.context, T, "precision lowp float;uniform sampler2D u_colorSampleFramebuffer;uniform sampler2D u_charPaletteTexture;uniform vec2 u_charPaletteSize;uniform vec2 u_brightnessRange;varying vec2 v_uv;void main(){vec4 color=texture2D(u_colorSampleFramebuffer,v_uv);if(color.a==0.0){gl_FragColor=vec4(0.0);return;}float brightness=dot(color.rgb,vec3(0.299,0.587,0.114))*255.0;vec2 range=u_brightnessRange;if(brightness<range.x||brightness>range.y){gl_FragColor=vec4(0.0);return;}float t=(brightness-range.x)/(range.y-range.x);float idx=clamp(floor(t*u_charPaletteSize.x),0.0,u_charPaletteSize.x-1.0);vec3 charColor=texture2D(u_charPaletteTexture,vec2((idx+0.5)/u_charPaletteSize.x,0.0)).rgb;gl_FragColor=vec4(charColor,1.0);}"), this.ye = this.Ct.SA(this.ae.cols, this.ae.rows);
|
|
1318
|
+
this.me = new x(t.context, T, "precision lowp float;uniform sampler2D u_sketchTexture;uniform vec2 u_gridCellDimensions;uniform vec2 u_brightnessRange;varying vec2 v_uv;void main(){vec2 cellCenter=(floor(v_uv*u_gridCellDimensions)+vec2(0.5))/u_gridCellDimensions;vec4 color=texture2D(u_sketchTexture,cellCenter);float brightness=dot(color.rgb,vec3(0.299,0.587,0.114));float brightnessValue=brightness*255.0;if(brightnessValue>=u_brightnessRange.x&&brightnessValue<=u_brightnessRange.y){gl_FragColor=color;}else{gl_FragColor=vec4(0.0);}}"), this.pe = new x(t.context, T, "precision lowp float;uniform sampler2D u_sampleTexture;uniform vec4 u_fillColor;uniform bool u_useFixedColor;varying vec2 v_uv;void main(){vec4 sampleColor=texture2D(u_sampleTexture,v_uv);if(sampleColor.a>0.0){if(u_useFixedColor){gl_FragColor=u_fillColor;}else{gl_FragColor=sampleColor;}}else{gl_FragColor=vec4(0.0);}}"), this.ve = new x(t.context, T, "precision lowp float;uniform sampler2D u_sampleTexture;uniform bool u_invert;uniform bool u_flipHorizontally;uniform bool u_flipVertically;varying vec2 v_uv;void main(){vec4 sampleColor=texture2D(u_sampleTexture,v_uv);if(sampleColor.a>0.0){float invertValue=u_invert ? 1.0 : 0.0;float flipHValue=u_flipHorizontally ? 1.0 : 0.0;float flipVValue=u_flipVertically ? 1.0 : 0.0;gl_FragColor=vec4(invertValue,flipHValue,flipVValue,1.0);}else{gl_FragColor=vec4(0.0);}}"), this.be = new x(t.context, T, "precision lowp float;uniform sampler2D u_sampleTexture;uniform vec4 u_rotationColor;varying vec2 v_uv;void main(){vec4 sampleColor=texture2D(u_sampleTexture,v_uv);if(sampleColor.a>0.0){gl_FragColor=u_rotationColor;}else{gl_FragColor=vec4(0.0);}}"), this._e = new x(t.context, T, "precision lowp float;uniform sampler2D u_colorSampleFramebuffer;uniform sampler2D u_charPaletteTexture;uniform vec2 u_charPaletteSize;uniform vec2 u_brightnessRange;varying vec2 v_uv;void main(){vec4 color=texture2D(u_colorSampleFramebuffer,v_uv);if(color.a==0.0){gl_FragColor=vec4(0.0);return;}float brightness=dot(color.rgb,vec3(0.299,0.587,0.114))*255.0;vec2 range=u_brightnessRange;if(brightness<range.x||brightness>range.y){gl_FragColor=vec4(0.0);return;}float t=(brightness-range.x)/(range.y-range.x);float idx=clamp(floor(t*u_charPaletteSize.x),0.0,u_charPaletteSize.x-1.0);vec3 charColor=texture2D(u_charPaletteTexture,vec2((idx+0.5)/u_charPaletteSize.x,0.0)).rgb;gl_FragColor=vec4(charColor,1.0);}"), this.xe = this.Dt.SA(this.ne.cols, this.ne.rows);
|
|
1331
1319
|
}
|
|
1332
|
-
|
|
1333
|
-
const e = this.
|
|
1334
|
-
this.
|
|
1320
|
+
ye(t) {
|
|
1321
|
+
const e = this.ne.cols, s = this.ne.rows;
|
|
1322
|
+
this.xe.begin(), this.Dt.UA(), this.Dt.IA(this.me), this.Dt.FA("u_sketchTexture", t), this.Dt.FA("u_gridCellDimensions", [e, s]), this.Dt.FA("u_brightnessRange", this.h.brightnessRange), this.Dt.$A(0, 0, e, s), this.xe.end(), this.he.begin(), this.Dt.UA(), this.Dt.IA(this.pe), this.Dt.FA("u_sampleTexture", this.xe), this.Dt.FA("u_fillColor", this.h.characterColor), this.Dt.FA("u_useFixedColor", this.h.characterColorMode === "fixed"), this.Dt.$A(0, 0, e, s), this.he.end(), this.le.begin(), this.Dt.UA(), this.Dt.IA(this.pe), this.Dt.FA("u_sampleTexture", this.xe), this.Dt.FA("u_fillColor", this.h.cellColor), this.Dt.FA("u_useFixedColor", this.h.cellColorMode === "fixed"), this.Dt.$A(0, 0, e, s), this.le.end(), this.De.begin(), this.Dt.UA(), this.Dt.IA(this.ve), this.Dt.FA("u_sampleTexture", this.xe), this.Dt.FA("u_invert", this.h.invert), this.Dt.FA("u_flipHorizontally", this.h.flipHorizontally), this.Dt.FA("u_flipVertically", this.h.flipVertically), this.Dt.$A(0, 0, e, s), this.De.end(), this.ce.begin(), this.Dt.UA(), this.Dt.IA(this.be), this.Dt.FA("u_sampleTexture", this.xe), this.Dt.FA("u_rotationColor", this.h.rotation), this.Dt.$A(0, 0, e, s), this.ce.end(), this.ae.begin(), this.Dt.UA(), this.Dt.IA(this._e), this.Dt.FA("u_colorSampleFramebuffer", this.xe), this.Dt.FA("u_charPaletteTexture", this.Pe.texture), this.Dt.FA("u_charPaletteSize", [this.Pe.colors.length, 1]), this.Dt.FA("u_brightnessRange", this.h.brightnessRange), this.Dt.$A(0, 0, e, s), this.ae.end();
|
|
1335
1323
|
}
|
|
1336
|
-
|
|
1337
|
-
super.
|
|
1324
|
+
ee() {
|
|
1325
|
+
super.ee(), this.xe.resize(this.ne.cols, this.ne.rows);
|
|
1338
1326
|
}
|
|
1339
1327
|
brightnessRange(t) {
|
|
1340
1328
|
u.C(Array.isArray(t) && t.length === 2 && t.every((e) => typeof e == "number" && e >= 0 && e <= 255), "Brightness range must be an array of two numbers between 0 and 255.", { method: "brightnessRange", providedValue: t }) && (this.h.brightnessRange = t);
|
|
1341
1329
|
}
|
|
1342
1330
|
}
|
|
1343
|
-
const OA = Object.freeze(Object.defineProperty({ __proto__: null, TextmodeBrightnessConverter:
|
|
1331
|
+
const OA = Object.freeze(Object.defineProperty({ __proto__: null, TextmodeBrightnessConverter: Y, TextmodeConverter: M, TextmodeFeatureConverter: O }, Symbol.toStringTag, { value: "Module" }));
|
|
1344
1332
|
class dA {
|
|
1345
1333
|
constructor(A, t, e) {
|
|
1346
|
-
o(this, "
|
|
1347
|
-
o(this, "
|
|
1348
|
-
o(this, "
|
|
1334
|
+
o(this, "Dt");
|
|
1335
|
+
o(this, "_t");
|
|
1336
|
+
o(this, "ne");
|
|
1337
|
+
o(this, "Me");
|
|
1349
1338
|
o(this, "Ge");
|
|
1350
1339
|
o(this, "Fe");
|
|
1351
1340
|
o(this, "$e");
|
|
1352
1341
|
o(this, "Ye");
|
|
1353
|
-
o(this, "
|
|
1342
|
+
o(this, "ae");
|
|
1354
1343
|
o(this, "he");
|
|
1355
1344
|
o(this, "le");
|
|
1356
1345
|
o(this, "ce");
|
|
1357
1346
|
o(this, "De");
|
|
1358
|
-
|
|
1359
|
-
this.Ct = A, this.vt = t, this.ae = e, this.Te = this.Ct.MA(R, "precision mediump float;uniform sampler2D u_characterTexture;uniform vec2 u_charsetDimensions;uniform sampler2D u_primaryColorTexture;uniform sampler2D u_secondaryColorTexture;uniform sampler2D u_transformTexture;uniform sampler2D u_asciiCharacterTexture;uniform sampler2D u_rotationTexture;uniform sampler2D u_captureTexture;uniform vec2 u_captureDimensions;uniform int u_backgroundMode;uniform vec2 u_gridCellDimensions;uniform vec2 u_gridPixelDimensions;mat2 rotate2D(float angle){float s=sin(angle);float c=cos(angle);return mat2(c,-s,s,c);}void main(){vec2 adjustedCoord=gl_FragCoord.xy/u_gridPixelDimensions;vec2 gridCoord=adjustedCoord*u_gridCellDimensions;vec2 cellCoord=floor(gridCoord);vec2 charIndexTexCoord=(cellCoord+0.5)/u_gridCellDimensions;vec4 primaryColor=texture2D(u_primaryColorTexture,charIndexTexCoord);vec4 secondaryColor=texture2D(u_secondaryColorTexture,charIndexTexCoord);vec4 transformColor=texture2D(u_transformTexture,charIndexTexCoord);bool isInverted=transformColor.r>0.5;bool flipHorizontal=transformColor.g>0.5;bool flipVertical=transformColor.b>0.5;vec4 encodedIndexVec=texture2D(u_asciiCharacterTexture,charIndexTexCoord);if(encodedIndexVec.a<0.01){gl_FragColor=(u_backgroundMode==0)? vec4(0.0):texture2D(u_captureTexture,gl_FragCoord.xy/u_captureDimensions);return;}int charIndex=int(encodedIndexVec.r*255.0+0.5)+int(encodedIndexVec.g*255.0+0.5)*256;int charCol=int(mod(float(charIndex),u_charsetDimensions.x));int charRow=charIndex/int(u_charsetDimensions.x);float flippedRow=(u_charsetDimensions.y-1.0)-float(charRow);vec2 charCoord=vec2(float(charCol),flippedRow)/u_charsetDimensions;vec4 rotationColor=texture2D(u_rotationTexture,charIndexTexCoord);float scaledAngle=rotationColor.r*255.0+rotationColor.g;float rotationAngle=(scaledAngle*360.0/255.0)*0.017453292;vec2 fractionalPart=fract(gridCoord)-0.5;if(flipHorizontal)fractionalPart.x=-fractionalPart.x;if(flipVertical)fractionalPart.y=-fractionalPart.y;fractionalPart=rotate2D(rotationAngle)*fractionalPart+0.5;vec2 cellSize=1.0/u_charsetDimensions;vec2 texCoord=charCoord+fractionalPart*cellSize;vec2 cellMax=charCoord+cellSize;if(any(lessThan(texCoord,charCoord))||any(greaterThan(texCoord,cellMax))){gl_FragColor=isInverted ? primaryColor : secondaryColor;return;}vec4 charTexel=texture2D(u_characterTexture,texCoord);if(isInverted)charTexel.rgb=1.0-charTexel.rgb;gl_FragColor=mix(secondaryColor,primaryColor,charTexel);}"), this.Fe = new S(A, t, e), this.$e = new F(A, t, e), this.Ge = [this.Fe, this.$e], this.he = this.Ct.SA(e.cols, e.rows), this.le = this.Ct.SA(e.cols, e.rows), this.ce = this.Ct.SA(e.cols, e.rows), this.De = this.Ct.SA(e.cols, e.rows), this.Ce = this.Ct.SA(e.cols, e.rows), this.Ye = this.Ct.SA(this.ae.width, this.ae.height);
|
|
1347
|
+
this.Dt = A, this._t = t, this.ne = e, this.Ye = this.Dt.MA(R, "precision mediump float;uniform sampler2D u_characterTexture;uniform vec2 u_charsetDimensions;uniform sampler2D u_primaryColorTexture;uniform sampler2D u_secondaryColorTexture;uniform sampler2D u_transformTexture;uniform sampler2D u_asciiCharacterTexture;uniform sampler2D u_rotationTexture;uniform sampler2D u_captureTexture;uniform vec2 u_captureDimensions;uniform int u_backgroundMode;uniform vec2 u_gridCellDimensions;uniform vec2 u_gridPixelDimensions;mat2 rotate2D(float angle){float s=sin(angle);float c=cos(angle);return mat2(c,-s,s,c);}void main(){vec2 adjustedCoord=gl_FragCoord.xy/u_gridPixelDimensions;vec2 gridCoord=adjustedCoord*u_gridCellDimensions;vec2 cellCoord=floor(gridCoord);vec2 charIndexTexCoord=(cellCoord+0.5)/u_gridCellDimensions;vec4 primaryColor=texture2D(u_primaryColorTexture,charIndexTexCoord);vec4 secondaryColor=texture2D(u_secondaryColorTexture,charIndexTexCoord);vec4 transformColor=texture2D(u_transformTexture,charIndexTexCoord);bool isInverted=transformColor.r>0.5;bool flipHorizontal=transformColor.g>0.5;bool flipVertical=transformColor.b>0.5;vec4 encodedIndexVec=texture2D(u_asciiCharacterTexture,charIndexTexCoord);if(encodedIndexVec.a<0.01){gl_FragColor=(u_backgroundMode==0)? vec4(0.0):texture2D(u_captureTexture,gl_FragCoord.xy/u_captureDimensions);return;}int charIndex=int(encodedIndexVec.r*255.0+0.5)+int(encodedIndexVec.g*255.0+0.5)*256;int charCol=int(mod(float(charIndex),u_charsetDimensions.x));int charRow=charIndex/int(u_charsetDimensions.x);float flippedRow=(u_charsetDimensions.y-1.0)-float(charRow);vec2 charCoord=vec2(float(charCol),flippedRow)/u_charsetDimensions;vec4 rotationColor=texture2D(u_rotationTexture,charIndexTexCoord);float scaledAngle=rotationColor.r*255.0+rotationColor.g;float rotationAngle=(scaledAngle*360.0/255.0)*0.017453292;vec2 fractionalPart=fract(gridCoord)-0.5;if(flipHorizontal)fractionalPart.x=-fractionalPart.x;if(flipVertical)fractionalPart.y=-fractionalPart.y;fractionalPart=rotate2D(rotationAngle)*fractionalPart+0.5;vec2 cellSize=1.0/u_charsetDimensions;vec2 texCoord=charCoord+fractionalPart*cellSize;vec2 cellMax=charCoord+cellSize;if(any(lessThan(texCoord,charCoord))||any(greaterThan(texCoord,cellMax))){gl_FragColor=isInverted ? primaryColor : secondaryColor;return;}vec4 charTexel=texture2D(u_characterTexture,texCoord);if(isInverted)charTexel.rgb=1.0-charTexel.rgb;gl_FragColor=mix(secondaryColor,primaryColor,charTexel);}"), this.Ge = new Y(A, t, e), this.Fe = new M(A, t, e), this.Me = [this.Ge, this.Fe], this.ae = this.Dt.SA(e.cols, e.rows), this.he = this.Dt.SA(e.cols, e.rows), this.le = this.Dt.SA(e.cols, e.rows), this.ce = this.Dt.SA(e.cols, e.rows), this.De = this.Dt.SA(e.cols, e.rows), this.$e = this.Dt.SA(this.ne.width, this.ne.height);
|
|
1360
1348
|
}
|
|
1361
|
-
|
|
1362
|
-
for (const e of this.
|
|
1349
|
+
Te(A) {
|
|
1350
|
+
for (const e of this.Me) e.options.enabled && e instanceof O && e.ye(A);
|
|
1363
1351
|
const t = (e, s) => {
|
|
1364
|
-
e.begin(), this.
|
|
1365
|
-
for (const r of this.
|
|
1352
|
+
e.begin(), this.Dt.UA();
|
|
1353
|
+
for (const r of this.Me) r.options.enabled && this.Dt.RA(s(r), 0, 0);
|
|
1366
1354
|
e.end();
|
|
1367
1355
|
};
|
|
1368
|
-
t(this.
|
|
1356
|
+
t(this.ae, (e) => e.characterFramebuffer), t(this.he, (e) => e.primaryColorFramebuffer), t(this.le, (e) => e.secondaryColorFramebuffer), t(this.ce, (e) => e.rotationFramebuffer), t(this.De, (e) => e.transformFramebuffer), this.$e.begin(), this.Dt.UA(), this.Dt.IA(this.Ye), this.Dt.FA("u_characterTexture", this._t.fontFramebuffer), this.Dt.FA("u_charsetDimensions", [this._t.textureColumns, this._t.textureRows]), this.Dt.FA("u_asciiCharacterTexture", this.ae.texture), this.Dt.FA("u_primaryColorTexture", this.he.texture), this.Dt.FA("u_secondaryColorTexture", this.le.texture), this.Dt.FA("u_transformTexture", this.De.texture), this.Dt.FA("u_rotationTexture", this.ce.texture), this.Dt.FA("u_captureTexture", A.texture), this.Dt.FA("u_backgroundMode", !1), this.Dt.FA("u_captureDimensions", [A.width, A.height]), this.Dt.FA("u_gridCellDimensions", [this.ne.cols, this.ne.rows]), this.Dt.FA("u_gridPixelDimensions", [this.ne.width, this.ne.height]), this.Dt.$A(0, 0, this.$e.width, this.$e.height), this.$e.end();
|
|
1369
1357
|
}
|
|
1370
1358
|
add(A) {
|
|
1371
1359
|
if (!u.C(A === "brightness" || A === "custom", 'Converter type must be either "brightness" or "custom".', { method: "add", providedValue: A })) return;
|
|
1372
1360
|
let t;
|
|
1373
|
-
return t = A === "brightness" ? new
|
|
1361
|
+
return t = A === "brightness" ? new Y(this.Dt, this._t, this.ne) : new M(this.Dt, this._t, this.ne), this.Me.push(t), t;
|
|
1374
1362
|
}
|
|
1375
1363
|
remove(A) {
|
|
1376
|
-
if (!u.C(A instanceof
|
|
1377
|
-
const t = this.
|
|
1378
|
-
u.C(t !== -1, "Converter instance not found in pipeline.", { method: "remove", providedValue: A, convertersCount: this.
|
|
1364
|
+
if (!u.C(A instanceof M, "Parameter must be a TextmodeConverter instance.", { method: "remove", providedValue: A })) return;
|
|
1365
|
+
const t = this.Me.indexOf(A);
|
|
1366
|
+
u.C(t !== -1, "Converter instance not found in pipeline.", { method: "remove", providedValue: A, convertersCount: this.Me.length }) && this.Me.splice(t, 1);
|
|
1379
1367
|
}
|
|
1380
1368
|
swap(A, t) {
|
|
1381
1369
|
const e = (B, Q) => {
|
|
1382
|
-
if (typeof B == "number") return u.C(Number.isInteger(B) && B >= 0 && B < this.
|
|
1383
|
-
if (B instanceof
|
|
1384
|
-
const n = this.
|
|
1385
|
-
return u.C(n !== -1, Q + " converter instance not found in pipeline.", { method: "swap", providedValue: B, convertersCount: this.
|
|
1370
|
+
if (typeof B == "number") return u.C(Number.isInteger(B) && B >= 0 && B < this.Me.length, Q + " index must be a valid integer within the converter array bounds.", { method: "swap", providedValue: B, convertersCount: this.Me.length }) ? B : null;
|
|
1371
|
+
if (B instanceof M) {
|
|
1372
|
+
const n = this.Me.indexOf(B);
|
|
1373
|
+
return u.C(n !== -1, Q + " converter instance not found in pipeline.", { method: "swap", providedValue: B, convertersCount: this.Me.length }) ? n : null;
|
|
1386
1374
|
}
|
|
1387
1375
|
return u.C(!1, Q + " parameter must be either an integer index or a TextmodeConverter instance.", { method: "swap", providedValue: B }), null;
|
|
1388
1376
|
}, s = e(A, "First"), r = e(t, "Second");
|
|
1389
1377
|
if (s === null || r === null || !u.C(s !== r, "Cannot swap a converter with itself.", { method: "swap", firstIndex: s, secondIndex: r })) return;
|
|
1390
|
-
const i = this.
|
|
1391
|
-
this.
|
|
1378
|
+
const i = this.Me[s];
|
|
1379
|
+
this.Me[s] = this.Me[r], this.Me[r] = i;
|
|
1392
1380
|
}
|
|
1393
|
-
|
|
1394
|
-
this.
|
|
1395
|
-
const A = this.
|
|
1396
|
-
this.
|
|
1397
|
-
for (const e of this.
|
|
1381
|
+
ee() {
|
|
1382
|
+
this.$e.resize(this.ne.width, this.ne.height);
|
|
1383
|
+
const A = this.ne.cols, t = this.ne.rows;
|
|
1384
|
+
this.ae.resize(A, t), this.he.resize(A, t), this.le.resize(A, t), this.ce.resize(A, t), this.De.resize(A, t);
|
|
1385
|
+
for (const e of this.Me) e.ee();
|
|
1398
1386
|
}
|
|
1399
1387
|
hasEnabledConverters() {
|
|
1400
|
-
return this.
|
|
1388
|
+
return this.Me.some((A) => A.options.enabled);
|
|
1401
1389
|
}
|
|
1402
1390
|
disable() {
|
|
1403
|
-
for (const A of this.
|
|
1391
|
+
for (const A of this.Me) A.disable();
|
|
1404
1392
|
}
|
|
1405
1393
|
enable() {
|
|
1406
|
-
for (const A of this.
|
|
1394
|
+
for (const A of this.Me) A.enable();
|
|
1407
1395
|
}
|
|
1408
1396
|
S() {
|
|
1409
|
-
for (const A of this.
|
|
1410
|
-
this.
|
|
1397
|
+
for (const A of this.Me) A.S();
|
|
1398
|
+
this.ae.S(), this.he.S(), this.le.S(), this.ce.S(), this.De.S(), this.$e.S(), this.Ye.S();
|
|
1411
1399
|
}
|
|
1412
1400
|
get texture() {
|
|
1413
|
-
return this
|
|
1401
|
+
return this.$e;
|
|
1414
1402
|
}
|
|
1415
1403
|
get characterFramebuffer() {
|
|
1416
|
-
return this.
|
|
1404
|
+
return this.ae;
|
|
1417
1405
|
}
|
|
1418
1406
|
get primaryColorFramebuffer() {
|
|
1419
|
-
return this.
|
|
1407
|
+
return this.he;
|
|
1420
1408
|
}
|
|
1421
1409
|
get secondaryColorFramebuffer() {
|
|
1422
|
-
return this.
|
|
1410
|
+
return this.le;
|
|
1423
1411
|
}
|
|
1424
1412
|
get rotationFramebuffer() {
|
|
1425
|
-
return this.
|
|
1413
|
+
return this.ce;
|
|
1426
1414
|
}
|
|
1427
1415
|
get transformFramebuffer() {
|
|
1428
|
-
return this.
|
|
1416
|
+
return this.De;
|
|
1429
1417
|
}
|
|
1430
1418
|
get brightness() {
|
|
1431
|
-
return this.
|
|
1419
|
+
return this.Ge;
|
|
1432
1420
|
}
|
|
1433
1421
|
get custom() {
|
|
1434
|
-
return this
|
|
1422
|
+
return this.Fe;
|
|
1435
1423
|
}
|
|
1436
1424
|
}
|
|
1437
1425
|
const IA = (E) => class extends E {
|
|
1438
1426
|
fill(A, t, e, s) {
|
|
1439
|
-
this.
|
|
1427
|
+
this.Dt.wA(A, t, e, s);
|
|
1440
1428
|
}
|
|
1441
1429
|
stroke(A, t, e, s) {
|
|
1442
|
-
this.
|
|
1430
|
+
this.Dt.fA(A, t, e, s);
|
|
1443
1431
|
}
|
|
1444
1432
|
strokeWeight(A) {
|
|
1445
|
-
this.
|
|
1433
|
+
this.Dt.dA(A);
|
|
1446
1434
|
}
|
|
1447
1435
|
noStroke() {
|
|
1448
|
-
this.
|
|
1436
|
+
this.Dt.mA();
|
|
1449
1437
|
}
|
|
1450
1438
|
noFill() {
|
|
1451
|
-
this.
|
|
1439
|
+
this.Dt.pA();
|
|
1452
1440
|
}
|
|
1453
1441
|
rotate(A) {
|
|
1454
|
-
this.
|
|
1442
|
+
this.Dt._A(A);
|
|
1455
1443
|
}
|
|
1456
1444
|
push() {
|
|
1457
|
-
this.
|
|
1445
|
+
this.Dt.vA();
|
|
1458
1446
|
}
|
|
1459
1447
|
pop() {
|
|
1460
|
-
this.
|
|
1448
|
+
this.Dt.bA();
|
|
1461
1449
|
}
|
|
1462
1450
|
rect(A, t, e = 1, s = 1) {
|
|
1463
|
-
this.
|
|
1451
|
+
this.Dt.$A(A, t, e, s);
|
|
1464
1452
|
}
|
|
1465
1453
|
line(A, t, e, s) {
|
|
1466
|
-
this.
|
|
1454
|
+
this.Dt.TA(A, t, e, s);
|
|
1467
1455
|
}
|
|
1468
1456
|
background(A, t = A, e = A, s = 255) {
|
|
1469
|
-
this.
|
|
1457
|
+
this.Dt.OA(A, t, e, s);
|
|
1470
1458
|
}
|
|
1471
1459
|
createShader(A, t) {
|
|
1472
|
-
return this.
|
|
1460
|
+
return this.Dt.MA(A, t);
|
|
1473
1461
|
}
|
|
1474
1462
|
createFilterShader(A) {
|
|
1475
|
-
return this.
|
|
1463
|
+
return this.Dt.GA(A);
|
|
1476
1464
|
}
|
|
1477
1465
|
shader(A) {
|
|
1478
|
-
this.
|
|
1466
|
+
this.Dt.IA(A);
|
|
1479
1467
|
}
|
|
1480
1468
|
setUniform(A, t) {
|
|
1481
|
-
this.
|
|
1469
|
+
this.Dt.FA(A, t);
|
|
1482
1470
|
}
|
|
1483
1471
|
image(A, t, e, s, r) {
|
|
1484
|
-
this.
|
|
1472
|
+
this.Dt.RA(A, t, e, s, r);
|
|
1485
1473
|
}
|
|
1486
1474
|
clear() {
|
|
1487
|
-
this.
|
|
1475
|
+
this.Dt.UA();
|
|
1488
1476
|
}
|
|
1489
1477
|
createFramebuffer(A, t, e = {}) {
|
|
1490
|
-
return this.
|
|
1478
|
+
return this.Dt.SA(A, t, e);
|
|
1491
1479
|
}
|
|
1492
1480
|
};
|
|
1493
|
-
class
|
|
1494
|
-
|
|
1481
|
+
class k {
|
|
1482
|
+
Se(A) {
|
|
1495
1483
|
const t = A.characterFramebuffer, e = A.primaryColorFramebuffer, s = A.secondaryColorFramebuffer, r = A.transformFramebuffer, i = A.rotationFramebuffer;
|
|
1496
1484
|
return t == null || t.loadPixels(), e == null || e.loadPixels(), s == null || s.loadPixels(), r == null || r.loadPixels(), i == null || i.loadPixels(), { characterPixels: (t == null ? void 0 : t.pixels) || new Uint8Array(0), primaryColorPixels: (e == null ? void 0 : e.pixels) || new Uint8Array(0), secondaryColorPixels: (s == null ? void 0 : s.pixels) || new Uint8Array(0), transformPixels: (r == null ? void 0 : r.pixels) || new Uint8Array(0), rotationPixels: (i == null ? void 0 : i.pixels) || new Uint8Array(0) };
|
|
1497
1485
|
}
|
|
1498
|
-
|
|
1486
|
+
Oe(A, t) {
|
|
1499
1487
|
return A[t] + (A[t + 1] << 8);
|
|
1500
1488
|
}
|
|
1501
|
-
|
|
1489
|
+
Ue(A, t) {
|
|
1502
1490
|
return { r: A[t], g: A[t + 1], b: A[t + 2], a: A[t + 3] };
|
|
1503
1491
|
}
|
|
1504
1492
|
}
|
|
1505
|
-
class
|
|
1506
|
-
|
|
1493
|
+
class L {
|
|
1494
|
+
ke(A, t) {
|
|
1507
1495
|
return new Blob([A], { type: t });
|
|
1508
1496
|
}
|
|
1509
|
-
|
|
1497
|
+
Re(A, t, e) {
|
|
1510
1498
|
try {
|
|
1511
|
-
const s = this.
|
|
1499
|
+
const s = this.ke(A, e), r = URL.createObjectURL(s), i = document.createElement("a");
|
|
1512
1500
|
i.href = r, i.download = t, i.style.display = "none", i.rel = "noopener", document.body.appendChild(i), i.click(), document.body.removeChild(i), URL.revokeObjectURL(r);
|
|
1513
1501
|
} catch (s) {
|
|
1514
1502
|
throw console.error("Failed to download file:", s), Error("File download failed: " + (s instanceof Error ? s.message : "Unknown error"));
|
|
1515
1503
|
}
|
|
1516
1504
|
}
|
|
1517
|
-
|
|
1505
|
+
Ve() {
|
|
1518
1506
|
return (/* @__PURE__ */ new Date()).toISOString().slice(0, 19).replace(/:/g, "-");
|
|
1519
1507
|
}
|
|
1520
|
-
|
|
1508
|
+
He() {
|
|
1521
1509
|
const A = /* @__PURE__ */ new Date();
|
|
1522
1510
|
return { date: A.toISOString().split("T")[0], time: A.toTimeString().split(" ")[0].replace(/:/g, "-") };
|
|
1523
1511
|
}
|
|
1524
|
-
|
|
1512
|
+
ze(A) {
|
|
1525
1513
|
return A.replace(/[<>:"/\\|?*]/g, "_").replace(/\s+/g, "_").replace(/_{2,}/g, "_").replace(/^_+|_+$/g, "").substring(0, 255);
|
|
1526
1514
|
}
|
|
1527
|
-
|
|
1528
|
-
return "'textmode-export'-" + this.
|
|
1515
|
+
Le() {
|
|
1516
|
+
return "'textmode-export'-" + this.Ve();
|
|
1529
1517
|
}
|
|
1530
1518
|
}
|
|
1531
|
-
class fA extends
|
|
1532
|
-
|
|
1519
|
+
class fA extends k {
|
|
1520
|
+
Je(A, t, e) {
|
|
1533
1521
|
const s = A[e] === 255, r = A[e + 1] === 255, i = A[e + 2] === 255, B = t[e], Q = t[e + 1];
|
|
1534
1522
|
return { isInverted: s, flipHorizontal: r, flipVertical: i, rotation: Math.round(360 * (B + Q / 255) / 255 * 100) / 100 };
|
|
1535
1523
|
}
|
|
1536
|
-
|
|
1524
|
+
Ke(A, t, e) {
|
|
1537
1525
|
return { x: A, y: t, cellX: A * e.cellWidth, cellY: t * e.cellHeight };
|
|
1538
1526
|
}
|
|
1539
|
-
|
|
1527
|
+
We(A, t) {
|
|
1540
1528
|
const e = [];
|
|
1541
1529
|
let s = 0;
|
|
1542
1530
|
for (let r = 0; r < t.rows; r++) for (let i = 0; i < t.cols; i++) {
|
|
1543
|
-
const B = 4 * s, Q = this.
|
|
1544
|
-
let n = this.
|
|
1545
|
-
const h = this.
|
|
1531
|
+
const B = 4 * s, Q = this.Oe(A.characterPixels, B);
|
|
1532
|
+
let n = this.Ue(A.primaryColorPixels, B), g = this.Ue(A.secondaryColorPixels, B);
|
|
1533
|
+
const h = this.Je(A.transformPixels, A.rotationPixels, B);
|
|
1546
1534
|
if (h.isInverted) {
|
|
1547
|
-
const
|
|
1548
|
-
n = g, g =
|
|
1535
|
+
const D = n;
|
|
1536
|
+
n = g, g = D;
|
|
1549
1537
|
}
|
|
1550
|
-
const a = this.
|
|
1538
|
+
const a = this.Ke(i, r, t);
|
|
1551
1539
|
e.push({ charIndex: Q, primaryColor: n, secondaryColor: g, transform: h, position: a }), s++;
|
|
1552
1540
|
}
|
|
1553
1541
|
return e;
|
|
1554
1542
|
}
|
|
1555
1543
|
}
|
|
1556
1544
|
class wA {
|
|
1557
|
-
|
|
1545
|
+
je(A, t) {
|
|
1558
1546
|
const e = A.cmap;
|
|
1559
1547
|
for (const s of e.tables) if (s.format === 4) {
|
|
1560
1548
|
for (let r = 0; r < s.startCount.length; r++) if (t >= s.startCount[r] && t <= s.endCount[r]) {
|
|
@@ -1570,11 +1558,11 @@ class wA {
|
|
|
1570
1558
|
}
|
|
1571
1559
|
return 0;
|
|
1572
1560
|
}
|
|
1573
|
-
|
|
1561
|
+
Ne(A, t, e, s, r) {
|
|
1574
1562
|
const i = r / A.head.unitsPerEm;
|
|
1575
|
-
return { getBoundingBox: () => ({ x1: e + t.xMin * i, y1: s + -t.yMax * i, x2: e + t.xMax * i, y2: s + -t.yMin * i }), toSVG: () => this.
|
|
1563
|
+
return { getBoundingBox: () => ({ x1: e + t.xMin * i, y1: s + -t.yMax * i, x2: e + t.xMax * i, y2: s + -t.yMin * i }), toSVG: () => this.Ze(t, e, s, i) };
|
|
1576
1564
|
}
|
|
1577
|
-
|
|
1565
|
+
Ze(A, t, e, s) {
|
|
1578
1566
|
if (!A || !A.xs) return "";
|
|
1579
1567
|
const { xs: r, ys: i, endPts: B, flags: Q } = A;
|
|
1580
1568
|
if (!(r && i && B && Q)) return "";
|
|
@@ -1583,22 +1571,22 @@ class wA {
|
|
|
1583
1571
|
const a = B[h];
|
|
1584
1572
|
if (!(a < g)) {
|
|
1585
1573
|
if (a >= g) {
|
|
1586
|
-
const
|
|
1587
|
-
n += `M${
|
|
1574
|
+
const D = t + r[g] * s, c = e - i[g] * s;
|
|
1575
|
+
n += `M${D.toFixed(2)},${c.toFixed(2)}`;
|
|
1588
1576
|
let l = g + 1;
|
|
1589
1577
|
for (; l <= a; )
|
|
1590
1578
|
if (1 & Q[l]) {
|
|
1591
|
-
const d = t + r[l] * s,
|
|
1592
|
-
n += `L${d.toFixed(2)},${
|
|
1579
|
+
const d = t + r[l] * s, C = e - i[l] * s;
|
|
1580
|
+
n += `L${d.toFixed(2)},${C.toFixed(2)}`, l++;
|
|
1593
1581
|
} else {
|
|
1594
|
-
const d = t + r[l] * s,
|
|
1582
|
+
const d = t + r[l] * s, C = e - i[l] * s;
|
|
1595
1583
|
let P = l + 1 > a ? g : l + 1;
|
|
1596
1584
|
if (1 & Q[P]) {
|
|
1597
1585
|
const p = t + r[P] * s, m = e - i[P] * s;
|
|
1598
|
-
n += `Q${d.toFixed(2)},${
|
|
1586
|
+
n += `Q${d.toFixed(2)},${C.toFixed(2)} ${p.toFixed(2)},${m.toFixed(2)}`, l = P + 1;
|
|
1599
1587
|
} else {
|
|
1600
|
-
const p = (d + (t + r[P] * s)) / 2, m = (
|
|
1601
|
-
n += `Q${d.toFixed(2)},${
|
|
1588
|
+
const p = (d + (t + r[P] * s)) / 2, m = (C + (e - i[P] * s)) / 2;
|
|
1589
|
+
n += `Q${d.toFixed(2)},${C.toFixed(2)} ${p.toFixed(2)},${m.toFixed(2)}`, l = P;
|
|
1602
1590
|
}
|
|
1603
1591
|
}
|
|
1604
1592
|
n += "Z";
|
|
@@ -1608,22 +1596,22 @@ class wA {
|
|
|
1608
1596
|
}
|
|
1609
1597
|
return n;
|
|
1610
1598
|
}
|
|
1611
|
-
|
|
1612
|
-
const i = A.codePointAt(0) || 0, B = this.
|
|
1599
|
+
Xe(A, t, e, s, r) {
|
|
1600
|
+
const i = A.codePointAt(0) || 0, B = this.je(t, i);
|
|
1613
1601
|
let Q = null;
|
|
1614
|
-
return t.glyf && t.glyf[B] !== null ? Q = t.glyf[B] : w && w.T && w.T.glyf && w.T.glyf.VA && (Q = w.T.glyf.VA(t, B), t.glyf && Q && (t.glyf[B] = Q)), this.
|
|
1602
|
+
return t.glyf && t.glyf[B] !== null ? Q = t.glyf[B] : w && w.T && w.T.glyf && w.T.glyf.VA && (Q = w.T.glyf.VA(t, B), t.glyf && Q && (t.glyf[B] = Q)), this.Ne(t, Q, e, s, r);
|
|
1615
1603
|
}
|
|
1616
|
-
|
|
1604
|
+
qe(A, t, e, s, r, i, B, Q) {
|
|
1617
1605
|
const n = e + (r - Q * (B / t.head.unitsPerEm)) / 2, g = s + (i + 0.7 * B) / 2;
|
|
1618
|
-
return this.
|
|
1606
|
+
return this.Xe(A, t, n, g, B).toSVG() || null;
|
|
1619
1607
|
}
|
|
1620
1608
|
}
|
|
1621
1609
|
class pA {
|
|
1622
1610
|
constructor() {
|
|
1623
|
-
o(this, "
|
|
1624
|
-
this.
|
|
1611
|
+
o(this, "As");
|
|
1612
|
+
this.As = new wA();
|
|
1625
1613
|
}
|
|
1626
|
-
|
|
1614
|
+
ts(A) {
|
|
1627
1615
|
return `<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
|
1628
1616
|
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
|
1629
1617
|
<svg width="${A.width}" height="${A.height}" viewBox="0 0 ${A.width} ${A.height}"
|
|
@@ -1631,21 +1619,21 @@ class pA {
|
|
|
1631
1619
|
<title>textmode art generated via textmode.js</title>
|
|
1632
1620
|
<desc>textmode art visualization generated by textmode.js library</desc>`;
|
|
1633
1621
|
}
|
|
1634
|
-
|
|
1622
|
+
es() {
|
|
1635
1623
|
return `
|
|
1636
1624
|
</g>
|
|
1637
1625
|
</svg>`;
|
|
1638
1626
|
}
|
|
1639
|
-
|
|
1627
|
+
ss(A, t) {
|
|
1640
1628
|
if (!t.includeBackgroundRectangles) return "";
|
|
1641
1629
|
const e = t.backgroundColor, s = `rgba(${e[0]},${e[1]},${e[2]},${e[3] / 255})`;
|
|
1642
1630
|
return `
|
|
1643
1631
|
<rect width="${A.width}" height="${A.height}" fill="${s}" />`;
|
|
1644
1632
|
}
|
|
1645
|
-
|
|
1633
|
+
rs(A) {
|
|
1646
1634
|
return `rgba(${A.r},${A.g},${A.b},${A.a / 255})`;
|
|
1647
1635
|
}
|
|
1648
|
-
|
|
1636
|
+
Bs(A, t) {
|
|
1649
1637
|
const { transform: e, position: s } = A, r = s.cellX + t.cellWidth / 2, i = s.cellY + t.cellHeight / 2, B = [];
|
|
1650
1638
|
if (e.flipHorizontal || e.flipVertical) {
|
|
1651
1639
|
const Q = e.flipHorizontal ? -1 : 1, n = e.flipVertical ? -1 : 1;
|
|
@@ -1653,91 +1641,91 @@ class pA {
|
|
|
1653
1641
|
}
|
|
1654
1642
|
return e.rotation && B.push(`rotate(${e.rotation} ${r} ${i})`), B.length ? ` transform="${B.join(" ")}"` : "";
|
|
1655
1643
|
}
|
|
1656
|
-
|
|
1644
|
+
Qs(A, t, e) {
|
|
1657
1645
|
if (!e.includeBackgroundRectangles || A.secondaryColor.a === 0) return "";
|
|
1658
|
-
const { position: s } = A, r = this.
|
|
1646
|
+
const { position: s } = A, r = this.rs(A.secondaryColor);
|
|
1659
1647
|
return e.drawMode === "stroke" ? `
|
|
1660
1648
|
<rect x="${s.cellX}" y="${s.cellY}" width="${t.cellWidth}" height="${t.cellHeight}" stroke="${r}" fill="none" stroke-width="${e.strokeWidth}" />` : `
|
|
1661
1649
|
<rect x="${s.cellX}" y="${s.cellY}" width="${t.cellWidth}" height="${t.cellHeight}" fill="${r}" />`;
|
|
1662
1650
|
}
|
|
1663
|
-
|
|
1651
|
+
Xe(A, t, e, s) {
|
|
1664
1652
|
const r = e.characters[A.charIndex];
|
|
1665
1653
|
if (!r) return "";
|
|
1666
|
-
const i = this.
|
|
1654
|
+
const i = this.As.qe(r.character, e.font, A.position.cellX, A.position.cellY, t.cellWidth, t.cellHeight, e.fontSize, r.advanceWidth);
|
|
1667
1655
|
if (!i) return "";
|
|
1668
|
-
const B = this.
|
|
1656
|
+
const B = this.rs(A.primaryColor);
|
|
1669
1657
|
return s.drawMode === "stroke" ? `
|
|
1670
1658
|
<path id="${`path-${A.charIndex}-${A.position.cellX}-${A.position.cellY}`.replace(/\./g, "-")}" d="${i}" stroke="${B}" stroke-width="${s.strokeWidth}" fill="none" />` : `
|
|
1671
1659
|
<path d="${i}" fill="${B}" />`;
|
|
1672
1660
|
}
|
|
1673
|
-
|
|
1661
|
+
Es(A, t, e, s) {
|
|
1674
1662
|
let r = "";
|
|
1675
|
-
r += this.
|
|
1676
|
-
const i = this.
|
|
1663
|
+
r += this.Qs(A, t, s);
|
|
1664
|
+
const i = this.Bs(A, t), B = this.Xe(A, t, e, s);
|
|
1677
1665
|
return B && (i ? (r += `
|
|
1678
1666
|
<g${i}>`, r += B, r += `
|
|
1679
1667
|
</g>`) : r += B), r;
|
|
1680
1668
|
}
|
|
1681
|
-
|
|
1682
|
-
let r = this.
|
|
1683
|
-
r += this.
|
|
1669
|
+
gs(A, t, e, s) {
|
|
1670
|
+
let r = this.ts(t);
|
|
1671
|
+
r += this.ss(t, s), r += `
|
|
1684
1672
|
<g id="ascii-cells">`;
|
|
1685
|
-
for (const i of A) r += this.
|
|
1686
|
-
return r += this.
|
|
1673
|
+
for (const i of A) r += this.Es(i, t, e, s);
|
|
1674
|
+
return r += this.es(), r;
|
|
1687
1675
|
}
|
|
1688
|
-
|
|
1676
|
+
ns(A) {
|
|
1689
1677
|
return A.replace(/<path[^>]*d=""[^>]*\/>/g, "").replace(/\n\s*\n/g, `
|
|
1690
1678
|
`).replace(/[ \t]+$/gm, "");
|
|
1691
1679
|
}
|
|
1692
1680
|
}
|
|
1693
|
-
class mA extends
|
|
1694
|
-
|
|
1695
|
-
return this.
|
|
1681
|
+
class mA extends L {
|
|
1682
|
+
hs(A) {
|
|
1683
|
+
return this.ke(A, "image/svg+xml;charset=utf-8");
|
|
1696
1684
|
}
|
|
1697
|
-
|
|
1698
|
-
this.
|
|
1685
|
+
ls(A, t) {
|
|
1686
|
+
this.Re(A, this.ze(t) + ".svg", "image/svg+xml;charset=utf-8");
|
|
1699
1687
|
}
|
|
1700
|
-
|
|
1701
|
-
this.
|
|
1688
|
+
cs(A, t) {
|
|
1689
|
+
this.ls(A, t || this.Le());
|
|
1702
1690
|
}
|
|
1703
1691
|
}
|
|
1704
|
-
class
|
|
1692
|
+
class H {
|
|
1705
1693
|
constructor() {
|
|
1694
|
+
o(this, "Ds");
|
|
1706
1695
|
o(this, "Cs");
|
|
1707
1696
|
o(this, "us");
|
|
1708
|
-
|
|
1709
|
-
this.Cs = new fA(), this.us = new pA(), this.Ps = new mA();
|
|
1697
|
+
this.Ds = new fA(), this.Cs = new pA(), this.us = new mA();
|
|
1710
1698
|
}
|
|
1711
|
-
|
|
1699
|
+
Ps(A) {
|
|
1712
1700
|
return { includeBackgroundRectangles: A.includeBackgroundRectangles ?? !0, drawMode: A.drawMode ?? "fill", strokeWidth: A.strokeWidth ?? 1, backgroundColor: A.backgroundColor ?? [0, 0, 0, 0] };
|
|
1713
1701
|
}
|
|
1714
|
-
|
|
1715
|
-
const e = this.
|
|
1716
|
-
return this.
|
|
1702
|
+
Is(A, t = {}) {
|
|
1703
|
+
const e = this.Ps(t), s = this.Ds.Se(A.pipeline), r = this.Ds.We(s, A.grid), i = this.Cs.gs(r, A.grid, A.font, e);
|
|
1704
|
+
return this.Cs.ns(i);
|
|
1717
1705
|
}
|
|
1718
|
-
|
|
1719
|
-
const e = this.
|
|
1720
|
-
this.
|
|
1706
|
+
cs(A, t = {}) {
|
|
1707
|
+
const e = this.Is(A, t), s = t.filename || this.us.Le();
|
|
1708
|
+
this.us.cs(e, s);
|
|
1721
1709
|
}
|
|
1722
1710
|
}
|
|
1723
|
-
class xA extends
|
|
1724
|
-
|
|
1711
|
+
class xA extends k {
|
|
1712
|
+
ws(A, t, e, s = " ") {
|
|
1725
1713
|
var B;
|
|
1726
1714
|
const r = [];
|
|
1727
1715
|
let i = 0;
|
|
1728
1716
|
for (let Q = 0; Q < t.rows; Q++) {
|
|
1729
1717
|
const n = [];
|
|
1730
1718
|
for (let g = 0; g < t.cols; g++) {
|
|
1731
|
-
const h = 4 * i, a = this.
|
|
1732
|
-
n.push(
|
|
1719
|
+
const h = 4 * i, a = this.Oe(A.characterPixels, h), D = ((B = e.characters[a]) == null ? void 0 : B.character) || s;
|
|
1720
|
+
n.push(D), i++;
|
|
1733
1721
|
}
|
|
1734
1722
|
r.push(n);
|
|
1735
1723
|
}
|
|
1736
1724
|
return r;
|
|
1737
1725
|
}
|
|
1738
1726
|
}
|
|
1739
|
-
class
|
|
1740
|
-
|
|
1727
|
+
class bA {
|
|
1728
|
+
fs(A, t) {
|
|
1741
1729
|
const e = [];
|
|
1742
1730
|
for (const r of A) {
|
|
1743
1731
|
let i = r.join("");
|
|
@@ -1749,37 +1737,37 @@ class vA {
|
|
|
1749
1737
|
return e.join(s);
|
|
1750
1738
|
}
|
|
1751
1739
|
}
|
|
1752
|
-
class
|
|
1753
|
-
|
|
1754
|
-
const e = this.
|
|
1755
|
-
this.
|
|
1740
|
+
class vA extends L {
|
|
1741
|
+
ds(A, t) {
|
|
1742
|
+
const e = this.ps(t);
|
|
1743
|
+
this.Re(A, e, "text/plain;charset=utf-8");
|
|
1756
1744
|
}
|
|
1757
|
-
|
|
1758
|
-
let t = this.
|
|
1759
|
-
return t === ".txt" || t.length <= 4 ? this.
|
|
1745
|
+
ps(A) {
|
|
1746
|
+
let t = this.ze(A);
|
|
1747
|
+
return t === ".txt" || t.length <= 4 ? this.Le() : t;
|
|
1760
1748
|
}
|
|
1761
1749
|
}
|
|
1762
|
-
class
|
|
1750
|
+
class W {
|
|
1763
1751
|
constructor() {
|
|
1752
|
+
o(this, "Ds");
|
|
1764
1753
|
o(this, "Cs");
|
|
1765
1754
|
o(this, "us");
|
|
1766
|
-
|
|
1767
|
-
this.Cs = new xA(), this.us = new vA(), this.Ps = new bA();
|
|
1755
|
+
this.Ds = new xA(), this.Cs = new bA(), this.us = new vA();
|
|
1768
1756
|
}
|
|
1769
|
-
|
|
1757
|
+
Ps(A) {
|
|
1770
1758
|
return { preserveTrailingSpaces: A.preserveTrailingSpaces ?? !1, lineEnding: A.lineEnding ?? "lf", emptyCharacter: A.emptyCharacter ?? " " };
|
|
1771
1759
|
}
|
|
1772
|
-
|
|
1773
|
-
const e = this.
|
|
1774
|
-
return this.
|
|
1760
|
+
_s(A, t = {}) {
|
|
1761
|
+
const e = this.Ps(t), s = this.Ds.Se(A.pipeline), r = this.Ds.ws(s, A.grid, A.font, e.emptyCharacter);
|
|
1762
|
+
return this.Cs.fs(r, e);
|
|
1775
1763
|
}
|
|
1776
|
-
|
|
1777
|
-
const e = this.
|
|
1778
|
-
this.
|
|
1764
|
+
ds(A, t = {}) {
|
|
1765
|
+
const e = this._s(A, t), s = t.filename || this.us.Le();
|
|
1766
|
+
this.us.ds(e, s);
|
|
1779
1767
|
}
|
|
1780
1768
|
}
|
|
1781
|
-
class yA extends
|
|
1782
|
-
|
|
1769
|
+
class yA extends k {
|
|
1770
|
+
vs(A, t = 1, e = "transparent") {
|
|
1783
1771
|
const s = A.canvas;
|
|
1784
1772
|
if (t === 1 && e === "transparent") return s;
|
|
1785
1773
|
const r = document.createElement("canvas"), i = r.getContext("2d"), B = Math.round(s.width * t), Q = Math.round(s.height * t);
|
|
@@ -1787,19 +1775,19 @@ class yA extends N {
|
|
|
1787
1775
|
}
|
|
1788
1776
|
}
|
|
1789
1777
|
class _A {
|
|
1790
|
-
|
|
1791
|
-
const e = this.
|
|
1778
|
+
bs(A, t) {
|
|
1779
|
+
const e = this.Ms(t.format);
|
|
1792
1780
|
return t.format === "png" ? A.toDataURL(e) : A.toDataURL(e, t.quality);
|
|
1793
1781
|
}
|
|
1794
|
-
async
|
|
1782
|
+
async Gs(A, t) {
|
|
1795
1783
|
return new Promise((e, s) => {
|
|
1796
|
-
const r = this.
|
|
1784
|
+
const r = this.Ms(t.format), i = (B) => {
|
|
1797
1785
|
B ? e(B) : s(Error(`Failed to generate ${t.format.toUpperCase()} blob`));
|
|
1798
1786
|
};
|
|
1799
1787
|
t.format === "png" ? A.toBlob(i, r) : A.toBlob(i, r, t.quality);
|
|
1800
1788
|
});
|
|
1801
1789
|
}
|
|
1802
|
-
|
|
1790
|
+
Ms(A) {
|
|
1803
1791
|
switch (A) {
|
|
1804
1792
|
case "png":
|
|
1805
1793
|
return "image/png";
|
|
@@ -1812,12 +1800,12 @@ class _A {
|
|
|
1812
1800
|
}
|
|
1813
1801
|
}
|
|
1814
1802
|
}
|
|
1815
|
-
const
|
|
1816
|
-
class
|
|
1817
|
-
|
|
1818
|
-
this
|
|
1803
|
+
const MA = { png: "image/png", jpg: "image/jpeg", webp: "image/webp" }, N = { png: ".png", jpg: ".jpg", webp: ".webp" };
|
|
1804
|
+
class FA extends L {
|
|
1805
|
+
Fs(A, t, e) {
|
|
1806
|
+
this.$s(A, this.ze(t) + N[e]);
|
|
1819
1807
|
}
|
|
1820
|
-
|
|
1808
|
+
$s(A, t) {
|
|
1821
1809
|
const e = URL.createObjectURL(A);
|
|
1822
1810
|
try {
|
|
1823
1811
|
const s = document.createElement("a");
|
|
@@ -1826,226 +1814,226 @@ class MA extends k {
|
|
|
1826
1814
|
URL.revokeObjectURL(e);
|
|
1827
1815
|
}
|
|
1828
1816
|
}
|
|
1829
|
-
|
|
1830
|
-
return A in
|
|
1817
|
+
Ys(A) {
|
|
1818
|
+
return A in MA && A in N;
|
|
1831
1819
|
}
|
|
1832
1820
|
}
|
|
1833
1821
|
class TA {
|
|
1834
1822
|
constructor() {
|
|
1823
|
+
o(this, "Ds");
|
|
1835
1824
|
o(this, "Cs");
|
|
1836
1825
|
o(this, "us");
|
|
1837
|
-
|
|
1838
|
-
this.Cs = new yA(), this.us = new _A(), this.Ps = new MA();
|
|
1826
|
+
this.Ds = new yA(), this.Cs = new _A(), this.us = new FA();
|
|
1839
1827
|
}
|
|
1840
|
-
|
|
1828
|
+
Ps(A) {
|
|
1841
1829
|
return { format: A.format ?? "png", quality: A.quality ?? 1, scale: A.scale ?? 1, backgroundColor: A.backgroundColor ?? "transparent" };
|
|
1842
1830
|
}
|
|
1843
|
-
|
|
1844
|
-
if (console.log("Validating image export options:", A), !this.
|
|
1831
|
+
Ts(A) {
|
|
1832
|
+
if (console.log("Validating image export options:", A), !this.us.Ys(A.format)) throw Error(`Saving '${A.format}' files is not supported`);
|
|
1845
1833
|
if (A.quality < 0 || A.quality > 1) throw Error("Image quality must be between 0.0 and 1.0");
|
|
1846
1834
|
if (A.scale <= 0) throw Error("Scale factor must be greater than 0");
|
|
1847
1835
|
A.scale > 10 && console.warn("Large scale factors may result in very large files and slow performance"), A.format === "jpg" && A.backgroundColor === "transparent" && (A.backgroundColor = "black");
|
|
1848
1836
|
}
|
|
1849
|
-
|
|
1850
|
-
const e = this.
|
|
1851
|
-
if (this.
|
|
1852
|
-
const s = this.
|
|
1853
|
-
return this.
|
|
1837
|
+
Ss(A, t = {}) {
|
|
1838
|
+
const e = this.Ps(t);
|
|
1839
|
+
if (this.Ts(e), e.scale === 1 && e.backgroundColor === "transparent") return this.Cs.bs(A.canvas, e);
|
|
1840
|
+
const s = this.Ds.vs(A, e.scale, e.backgroundColor);
|
|
1841
|
+
return this.Cs.bs(s, e);
|
|
1854
1842
|
}
|
|
1855
|
-
async
|
|
1856
|
-
const e = this.
|
|
1857
|
-
if (this.
|
|
1858
|
-
const s = this.
|
|
1859
|
-
return await this.
|
|
1843
|
+
async Gs(A, t = {}) {
|
|
1844
|
+
const e = this.Ps(t);
|
|
1845
|
+
if (this.Ts(e), e.scale === 1 && e.backgroundColor === "transparent") return await this.Cs.Gs(A.canvas, e);
|
|
1846
|
+
const s = this.Ds.vs(A, e.scale, e.backgroundColor);
|
|
1847
|
+
return await this.Cs.Gs(s, e);
|
|
1860
1848
|
}
|
|
1861
|
-
async
|
|
1862
|
-
const e = await this.
|
|
1863
|
-
this.
|
|
1849
|
+
async Fs(A, t = {}) {
|
|
1850
|
+
const e = await this.Gs(A, t), s = t.format ?? "png", r = t.filename || this.us.Le();
|
|
1851
|
+
this.us.Fs(e, r, s);
|
|
1864
1852
|
}
|
|
1865
1853
|
}
|
|
1866
1854
|
const RA = (E) => class extends E {
|
|
1867
1855
|
toString(A = {}) {
|
|
1868
|
-
return new
|
|
1856
|
+
return new W()._s({ pipeline: this.Os, grid: this.ne, font: this._t }, A);
|
|
1869
1857
|
}
|
|
1870
1858
|
saveStrings(A = {}) {
|
|
1871
|
-
new
|
|
1859
|
+
new W().ds({ pipeline: this.Os, grid: this.ne, font: this._t }, A);
|
|
1872
1860
|
}
|
|
1873
1861
|
toSVG(A = {}) {
|
|
1874
|
-
return new
|
|
1862
|
+
return new H().Is(this, A);
|
|
1875
1863
|
}
|
|
1876
1864
|
saveSVG(A = {}) {
|
|
1877
|
-
new
|
|
1865
|
+
new H().cs(this, A);
|
|
1878
1866
|
}
|
|
1879
1867
|
async saveCanvas(A, t = "png", e = {}) {
|
|
1880
|
-
await new TA()
|
|
1868
|
+
await new TA().Fs(this.jt, { ...e, filename: A, format: t });
|
|
1881
1869
|
}
|
|
1882
1870
|
}, GA = (E) => class extends E {
|
|
1883
1871
|
async loadFont(A) {
|
|
1884
|
-
return this.
|
|
1885
|
-
const t = this.
|
|
1886
|
-
this.
|
|
1872
|
+
return this._t.Ht(A).then(() => {
|
|
1873
|
+
const t = this._t.maxGlyphDimensions;
|
|
1874
|
+
this.ne.qt(t.width, t.height), this.Os.ee();
|
|
1887
1875
|
});
|
|
1888
1876
|
}
|
|
1889
1877
|
fontSize(A) {
|
|
1890
|
-
if (!u.C(typeof A == "number" && A > 0, "Font size must be a positive number greater than 0.", { method: "fontSize", providedValue: A }) || this.
|
|
1891
|
-
this.
|
|
1892
|
-
const t = this.
|
|
1893
|
-
this.
|
|
1878
|
+
if (!u.C(typeof A == "number" && A > 0, "Font size must be a positive number greater than 0.", { method: "fontSize", providedValue: A }) || this._t.fontSize === A) return;
|
|
1879
|
+
this._t.Vt(A);
|
|
1880
|
+
const t = this._t.maxGlyphDimensions;
|
|
1881
|
+
this.ne.qt(t.width, t.height), this.Os.ee(), this.Dt.kA();
|
|
1894
1882
|
}
|
|
1895
1883
|
}, UA = (E) => class extends E {
|
|
1896
1884
|
addConverter(A) {
|
|
1897
|
-
return this.
|
|
1885
|
+
return this.Os.add(A);
|
|
1898
1886
|
}
|
|
1899
1887
|
removeConverter(A) {
|
|
1900
|
-
this.
|
|
1888
|
+
this.Os.remove(A);
|
|
1901
1889
|
}
|
|
1902
1890
|
};
|
|
1903
|
-
class
|
|
1891
|
+
class SA {
|
|
1904
1892
|
constructor() {
|
|
1905
|
-
o(this, "
|
|
1906
|
-
o(this, "
|
|
1907
|
-
o(this, "
|
|
1908
|
-
o(this, "
|
|
1909
|
-
o(this, "
|
|
1893
|
+
o(this, "Dt");
|
|
1894
|
+
o(this, "_t");
|
|
1895
|
+
o(this, "Os");
|
|
1896
|
+
o(this, "jt");
|
|
1897
|
+
o(this, "ne");
|
|
1910
1898
|
}
|
|
1911
1899
|
}
|
|
1912
1900
|
class z extends function(t, ...e) {
|
|
1913
1901
|
return e.reduce((s, r) => r(s), t);
|
|
1914
|
-
}(
|
|
1902
|
+
}(SA, IA, RA, GA, UA) {
|
|
1915
1903
|
constructor(t = null, e = {}) {
|
|
1916
1904
|
super();
|
|
1917
|
-
o(this, "
|
|
1905
|
+
o(this, "re");
|
|
1906
|
+
o(this, "Us");
|
|
1907
|
+
o(this, "ie");
|
|
1918
1908
|
o(this, "ks");
|
|
1919
|
-
o(this, "Qe");
|
|
1920
1909
|
o(this, "Rs");
|
|
1921
|
-
o(this, "Vs");
|
|
1922
|
-
o(this, "Hs",
|
|
1923
|
-
o(this, "zs"
|
|
1924
|
-
o(this, "Ls");
|
|
1925
|
-
o(this, "Js",
|
|
1910
|
+
o(this, "Vs", null);
|
|
1911
|
+
o(this, "Hs", 0);
|
|
1912
|
+
o(this, "zs");
|
|
1913
|
+
o(this, "Ls", !0);
|
|
1914
|
+
o(this, "Js", 0);
|
|
1926
1915
|
o(this, "Ks", 0);
|
|
1927
1916
|
o(this, "Ws", 0);
|
|
1928
|
-
o(this, "js",
|
|
1929
|
-
o(this, "Ns",
|
|
1930
|
-
o(this, "Zs",
|
|
1917
|
+
o(this, "js", []);
|
|
1918
|
+
o(this, "Ns", 10);
|
|
1919
|
+
o(this, "Zs", !1);
|
|
1931
1920
|
o(this, "Xs", !1);
|
|
1932
|
-
o(this, "qs",
|
|
1933
|
-
o(this, "Ar", () => {
|
|
1921
|
+
o(this, "qs", () => {
|
|
1934
1922
|
});
|
|
1935
|
-
o(this, "
|
|
1923
|
+
o(this, "Ar", () => {
|
|
1936
1924
|
});
|
|
1937
|
-
o(this, "
|
|
1938
|
-
this.
|
|
1925
|
+
o(this, "tr");
|
|
1926
|
+
this.re = t, this.Xs = t === null, this.ks = e.renderMode ?? "auto", this.Rs = e.frameRate ?? 60, this.zs = 1e3 / this.Rs;
|
|
1939
1927
|
}
|
|
1940
1928
|
static async create(t = null, e = {}) {
|
|
1941
|
-
const s = new this(t, e), r = s.
|
|
1929
|
+
const s = new this(t, e), r = s.Xs ? e : void 0;
|
|
1942
1930
|
let i, B;
|
|
1943
|
-
s.
|
|
1944
|
-
const Q = s.
|
|
1945
|
-
return s.
|
|
1931
|
+
s.jt = new CA(s.re, s.Xs, r), s.Dt = new iA(s.jt.oe()), s.Xs ? (i = e.width || 800, B = e.height || 600) : (i = s.jt.width || 800, B = s.jt.height || 600), s.Us = s.Dt.SA(i, B), s._t = new cA(s.Dt, e.fontSize ?? 16), await s._t.Ut(e.fontSource);
|
|
1932
|
+
const Q = s._t.maxGlyphDimensions;
|
|
1933
|
+
return s.ne = new DA(s.jt.canvas, Q.width, Q.height), s.Os = new dA(s.Dt, s._t, s.ne), s.er(), s.sr(), s;
|
|
1946
1934
|
}
|
|
1947
|
-
|
|
1948
|
-
this.
|
|
1949
|
-
this.
|
|
1950
|
-
}, window.addEventListener("resize", this.
|
|
1951
|
-
this.
|
|
1952
|
-
}), this.
|
|
1935
|
+
er() {
|
|
1936
|
+
this.tr = () => {
|
|
1937
|
+
this.Xs ? this.Ar() : this.rr();
|
|
1938
|
+
}, window.addEventListener("resize", this.tr), window.ResizeObserver && this.re && !this.Xs && (this.ie = new ResizeObserver(() => {
|
|
1939
|
+
this.rr();
|
|
1940
|
+
}), this.ie.observe(this.re));
|
|
1953
1941
|
}
|
|
1954
1942
|
render() {
|
|
1955
|
-
this.
|
|
1956
|
-
}
|
|
1957
|
-
Br() {
|
|
1958
|
-
this.Nt.se(), this.ks.resize(this.Nt.width, this.Nt.height), this.ae.se(), this.Us.se(), this.Ct.kA(), this.Rs !== "manual" && this.render();
|
|
1943
|
+
this.Br(), this.Ws++, this.Zs ? console.warn("Cannot render: Required resources have been disposed") : (this.Xs ? (this.Us.begin(), this.qs(), this.Us.end()) : this.Us.update(this.re), this.Os.hasEnabledConverters() ? (this.Os.Te(this.Us), this.Dt.OA(0), this.Dt.RA(this.Os.texture, this.ne.offsetX, this.ne.offsetY, this.Os.texture.width, this.Os.texture.height)) : (this.Dt.UA(), this.Dt.RA(this.Us, this.ne.offsetX, this.ne.offsetY, this.Us.width, this.Us.height)));
|
|
1959
1944
|
}
|
|
1960
1945
|
rr() {
|
|
1961
|
-
|
|
1962
|
-
|
|
1946
|
+
this.jt.ee(), this.Us.resize(this.jt.width, this.jt.height), this.ne.ee(), this.Os.ee(), this.Dt.kA(), this.ks !== "manual" && this.render();
|
|
1947
|
+
}
|
|
1948
|
+
sr() {
|
|
1949
|
+
if (this.ks !== "auto" || !this.Ls) return;
|
|
1950
|
+
this.Hs = performance.now();
|
|
1963
1951
|
const t = (e) => {
|
|
1964
|
-
if (!this.
|
|
1965
|
-
const s = e - this.
|
|
1966
|
-
s >= this.
|
|
1952
|
+
if (!this.Ls) return void (this.Vs = null);
|
|
1953
|
+
const s = e - this.Hs;
|
|
1954
|
+
s >= this.zs && (this.render(), this.Hs = e - s % this.zs), this.Ls && (this.Vs = requestAnimationFrame(t));
|
|
1967
1955
|
};
|
|
1968
|
-
this.
|
|
1956
|
+
this.Vs = requestAnimationFrame(t);
|
|
1969
1957
|
}
|
|
1970
|
-
|
|
1958
|
+
Br() {
|
|
1971
1959
|
const t = performance.now();
|
|
1972
|
-
if (this.
|
|
1973
|
-
const e = t - this.
|
|
1974
|
-
this.
|
|
1975
|
-
const s = this.
|
|
1976
|
-
this.
|
|
1960
|
+
if (this.Ks > 0) {
|
|
1961
|
+
const e = t - this.Ks;
|
|
1962
|
+
this.js.push(e), this.js.length > this.Ns && this.js.shift();
|
|
1963
|
+
const s = this.js.reduce((r, i) => r + i, 0) / this.js.length;
|
|
1964
|
+
this.Js = 1e3 / s;
|
|
1977
1965
|
}
|
|
1978
|
-
this.
|
|
1966
|
+
this.Ks = t;
|
|
1979
1967
|
}
|
|
1980
|
-
|
|
1981
|
-
this.
|
|
1968
|
+
ir() {
|
|
1969
|
+
this.Vs && (cancelAnimationFrame(this.Vs), this.Vs = null);
|
|
1982
1970
|
}
|
|
1983
1971
|
renderMode(t) {
|
|
1984
|
-
this.
|
|
1972
|
+
this.ks !== t && (this.ir(), this.ks = t, t === "auto" && this.Ls && this.sr());
|
|
1985
1973
|
}
|
|
1986
1974
|
frameRate(t) {
|
|
1987
|
-
if (t === void 0) return this.
|
|
1988
|
-
this.
|
|
1975
|
+
if (t === void 0) return this.Js;
|
|
1976
|
+
this.Rs = t, this.zs = 1e3 / t, this.ks === "auto" && this.Ls && (this.ir(), this.sr());
|
|
1989
1977
|
}
|
|
1990
1978
|
noLoop() {
|
|
1991
|
-
this.
|
|
1979
|
+
this.Ls && (this.Ls = !1, this.Vs && (cancelAnimationFrame(this.Vs), this.Vs = null));
|
|
1992
1980
|
}
|
|
1993
1981
|
loop() {
|
|
1994
|
-
this.
|
|
1982
|
+
this.Ls || (this.Ls = !0, this.ks === "auto" && this.sr());
|
|
1995
1983
|
}
|
|
1996
1984
|
redraw(t = 1) {
|
|
1997
1985
|
if (u.C(typeof t == "number" && t > 0 && Number.isInteger(t), "Redraw count must be a positive integer.", { method: "redraw", providedValue: t })) for (let e = 0; e < t; e++) this.render();
|
|
1998
1986
|
}
|
|
1999
1987
|
isLooping() {
|
|
2000
|
-
return this.
|
|
1988
|
+
return this.ks === "auto" && this.Ls;
|
|
2001
1989
|
}
|
|
2002
1990
|
draw(t) {
|
|
2003
|
-
this.
|
|
1991
|
+
this.qs = t;
|
|
2004
1992
|
}
|
|
2005
1993
|
windowResized(t) {
|
|
2006
|
-
this.
|
|
1994
|
+
this.Ar = t;
|
|
2007
1995
|
}
|
|
2008
1996
|
resizeCanvas(t, e) {
|
|
2009
|
-
this.
|
|
1997
|
+
this.Xs && (this.jt.ee(t, e), this.Us.resize(this.jt.width, this.jt.height), this.ne.ee(), this.Os.ee(), this.Dt.kA(), this.ks !== "manual" && this.render());
|
|
2010
1998
|
}
|
|
2011
1999
|
destroy() {
|
|
2012
|
-
this.
|
|
2000
|
+
this.Zs || (this.ir(), window.removeEventListener("resize", this.tr), this.ie && this.ie.disconnect(), this.Os.S(), this._t.S(), this.Us.S(), this.Dt.S(), this.Zs = !0);
|
|
2013
2001
|
}
|
|
2014
2002
|
get grid() {
|
|
2015
|
-
return this.
|
|
2003
|
+
return this.ne;
|
|
2016
2004
|
}
|
|
2017
2005
|
get font() {
|
|
2018
|
-
return this.
|
|
2006
|
+
return this._t;
|
|
2019
2007
|
}
|
|
2020
2008
|
get mode() {
|
|
2021
|
-
return this.
|
|
2009
|
+
return this.ks;
|
|
2022
2010
|
}
|
|
2023
2011
|
get pipeline() {
|
|
2024
|
-
return this.
|
|
2012
|
+
return this.Os;
|
|
2025
2013
|
}
|
|
2026
2014
|
get frameCount() {
|
|
2027
|
-
return this.
|
|
2015
|
+
return this.Ws;
|
|
2028
2016
|
}
|
|
2029
2017
|
get renderer() {
|
|
2030
|
-
return this.
|
|
2018
|
+
return this.Dt;
|
|
2031
2019
|
}
|
|
2032
2020
|
set frameCount(t) {
|
|
2033
|
-
this.
|
|
2021
|
+
this.Ws = t;
|
|
2034
2022
|
}
|
|
2035
2023
|
get width() {
|
|
2036
|
-
return this.
|
|
2024
|
+
return this.jt.width;
|
|
2037
2025
|
}
|
|
2038
2026
|
get height() {
|
|
2039
|
-
return this.
|
|
2027
|
+
return this.jt.height;
|
|
2040
2028
|
}
|
|
2041
2029
|
get canvas() {
|
|
2042
|
-
return this.
|
|
2030
|
+
return this.jt;
|
|
2043
2031
|
}
|
|
2044
2032
|
get isDisposed() {
|
|
2045
|
-
return this.
|
|
2033
|
+
return this.Zs;
|
|
2046
2034
|
}
|
|
2047
2035
|
}
|
|
2048
|
-
class
|
|
2036
|
+
class j {
|
|
2049
2037
|
constructor() {
|
|
2050
2038
|
throw new I("Textmode is a static class and cannot be instantiated.");
|
|
2051
2039
|
}
|
|
@@ -2062,23 +2050,23 @@ class L {
|
|
|
2062
2050
|
u.u(A);
|
|
2063
2051
|
}
|
|
2064
2052
|
static get version() {
|
|
2065
|
-
return "0.1.9-beta.
|
|
2053
|
+
return "0.1.9-beta.6";
|
|
2066
2054
|
}
|
|
2067
2055
|
}
|
|
2068
|
-
const
|
|
2056
|
+
const kA = Object.freeze(Object.defineProperty({ __proto__: null }, Symbol.toStringTag, { value: "Module" })), LA = j.create, jA = j.setErrorLevel, VA = j.version;
|
|
2069
2057
|
export {
|
|
2070
|
-
|
|
2058
|
+
CA as TextmodeCanvas,
|
|
2071
2059
|
uA as TextmodeColorPalette,
|
|
2072
2060
|
dA as TextmodeConversionPipeline,
|
|
2073
2061
|
eA as TextmodeErrorLevel,
|
|
2074
2062
|
cA as TextmodeFont,
|
|
2075
|
-
|
|
2063
|
+
DA as TextmodeGrid,
|
|
2076
2064
|
z as Textmodifier,
|
|
2077
2065
|
OA as converters,
|
|
2078
|
-
|
|
2079
|
-
|
|
2080
|
-
|
|
2081
|
-
|
|
2082
|
-
|
|
2083
|
-
|
|
2066
|
+
LA as create,
|
|
2067
|
+
j as default,
|
|
2068
|
+
kA as export,
|
|
2069
|
+
jA as setErrorLevel,
|
|
2070
|
+
j as textmode,
|
|
2071
|
+
VA as version
|
|
2084
2072
|
};
|