textmode.js 0.2.1-beta.4 → 0.2.1-beta.5
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 +2133 -1834
- package/dist/textmode.esm.min.js +1849 -1549
- package/dist/textmode.umd.js +9 -9
- package/dist/textmode.umd.min.js +8 -7
- package/dist/types/assets/shaders-minified/frag/image-to-mrt.d.ts +14 -0
- package/dist/types/assets/shaders-minified/frag/present.d.ts +14 -0
- package/dist/types/assets/shaders-minified/index.d.ts +2 -0
- package/dist/types/index.d.ts +1 -0
- package/dist/types/rendering/index.d.ts +0 -2
- package/dist/types/rendering/webgl/DrawQueue.d.ts +9 -7
- package/dist/types/rendering/webgl/InstanceData.d.ts +15 -15
- package/dist/types/rendering/webgl/RenderPipeline.d.ts +1 -0
- package/dist/types/rendering/webgl/RenderState.d.ts +13 -19
- package/dist/types/rendering/webgl/Renderer.d.ts +13 -2
- package/dist/types/rendering/webgl/Shader.d.ts +3 -4
- package/dist/types/rendering/webgl/ShaderManager.d.ts +12 -11
- package/dist/types/rendering/webgl/geometries/BaseGeometry.d.ts +2 -1
- package/dist/types/rendering/webgl/types/DrawCommand.d.ts +2 -2
- package/dist/types/textmode/Canvas.d.ts +6 -0
- package/dist/types/textmode/TextmodeImage.d.ts +92 -0
- package/dist/types/textmode/Textmodifier.d.ts +17 -2
- package/dist/types/textmode/font/CharacterExtractor.d.ts +14 -14
- package/dist/types/textmode/font/MetricsCalculator.d.ts +1 -21
- package/dist/types/textmode/font/typr/Typr.d.ts +2 -0
- package/dist/types/textmode/font/typr/types.d.ts +6 -0
- package/dist/types/textmode/font/utils/index.d.ts +0 -1
- package/dist/types/textmode/mixins/AnimationMixin.d.ts +6 -0
- package/dist/types/textmode/mixins/FontMixin.d.ts +43 -3
- package/dist/types/textmode/mixins/KeyboardMixin.d.ts +2 -3
- package/dist/types/textmode/mixins/MouseMixin.d.ts +6 -6
- package/dist/types/textmode/mixins/RenderingMixin.d.ts +23 -5
- package/package.json +1 -1
- package/dist/types/rendering/webgl/types/ShaderTypes.d.ts +0 -35
- package/dist/types/textmode/font/utils/CmapParser.d.ts +0 -47
package/dist/textmode.esm.js
CHANGED
|
@@ -1,2184 +1,2474 @@
|
|
|
1
|
-
var
|
|
2
|
-
var
|
|
3
|
-
var
|
|
4
|
-
class
|
|
5
|
-
constructor(
|
|
6
|
-
super(
|
|
7
|
-
}
|
|
8
|
-
static
|
|
9
|
-
return `${
|
|
1
|
+
var ct = Object.defineProperty;
|
|
2
|
+
var lt = (a, t, e) => t in a ? ct(a, t, { enumerable: !0, configurable: !0, writable: !0, value: e }) : a[t] = e;
|
|
3
|
+
var h = (a, t, e) => lt(a, typeof t != "symbol" ? t + "" : t, e);
|
|
4
|
+
class U extends Error {
|
|
5
|
+
constructor(t, e = {}) {
|
|
6
|
+
super(U.i(t, e)), this.name = "TextmodeError";
|
|
7
|
+
}
|
|
8
|
+
static i(t, e) {
|
|
9
|
+
return `${t}${e && Object.keys(e).length > 0 ? `
|
|
10
10
|
|
|
11
|
-
📋 Context:` + Object.entries(
|
|
12
|
-
- ${
|
|
11
|
+
📋 Context:` + Object.entries(e).map(([i, s]) => `
|
|
12
|
+
- ${i}: ${U.o(s)}`).join("") : ""}
|
|
13
13
|
|
|
14
14
|
${"↓".repeat(24)}
|
|
15
15
|
`;
|
|
16
16
|
}
|
|
17
|
-
static
|
|
18
|
-
if (
|
|
19
|
-
if (
|
|
20
|
-
if (typeof
|
|
21
|
-
if (typeof
|
|
22
|
-
if (Array.isArray(
|
|
23
|
-
if (typeof
|
|
24
|
-
const
|
|
25
|
-
return
|
|
17
|
+
static o(t) {
|
|
18
|
+
if (t === null) return "null";
|
|
19
|
+
if (t === void 0) return "undefined";
|
|
20
|
+
if (typeof t == "string") return `"${t}"`;
|
|
21
|
+
if (typeof t == "number" || typeof t == "boolean") return t + "";
|
|
22
|
+
if (Array.isArray(t)) return t.length === 0 ? "[]" : t.length <= 5 ? `[${t.map((e) => U.o(e)).join(", ")}]` : `[${t.slice(0, 3).map((e) => U.o(e)).join(", ")}, ... +${t.length - 3} more]`;
|
|
23
|
+
if (typeof t == "object") {
|
|
24
|
+
const e = Object.keys(t);
|
|
25
|
+
return e.length === 0 ? "{}" : e.length <= 3 ? `{ ${e.map((i) => `${i}: ${U.o(t[i])}`).join(", ")} }` : `{ ${e.slice(0, 2).map((i) => `${i}: ${U.o(t[i])}`).join(", ")}, ... +${e.length - 2} more }`;
|
|
26
26
|
}
|
|
27
|
-
return
|
|
27
|
+
return t + "";
|
|
28
28
|
}
|
|
29
29
|
}
|
|
30
|
-
var
|
|
31
|
-
const
|
|
30
|
+
var ut = ((a) => (a[a.SILENT = 0] = "SILENT", a[a.WARNING = 1] = "WARNING", a[a.ERROR = 2] = "ERROR", a[a.THROW = 3] = "THROW", a))(ut || {});
|
|
31
|
+
const M = class M {
|
|
32
32
|
constructor() {
|
|
33
|
-
|
|
33
|
+
h(this, "u", { globalLevel: 3 });
|
|
34
34
|
}
|
|
35
|
-
static
|
|
36
|
-
return
|
|
35
|
+
static m() {
|
|
36
|
+
return M.l || (M.l = new M()), M.l;
|
|
37
37
|
}
|
|
38
|
-
|
|
39
|
-
const
|
|
40
|
-
switch (this.
|
|
38
|
+
_(t, e) {
|
|
39
|
+
const i = "%c[textmode.js] Oops! (╯°□°)╯︵ Something went wrong in your code.", s = "color: #f44336; font-weight: bold; background: #ffebee; padding: 2px 6px; border-radius: 3px;";
|
|
40
|
+
switch (this.u.globalLevel) {
|
|
41
41
|
case 0:
|
|
42
42
|
return !1;
|
|
43
43
|
case 1:
|
|
44
|
-
return console.group(
|
|
44
|
+
return console.group(i, s), console.warn(U.i(t, e)), console.groupEnd(), !1;
|
|
45
45
|
case 2:
|
|
46
|
-
return console.group(
|
|
46
|
+
return console.group(i, s), console.error(U.i(t, e)), console.groupEnd(), !1;
|
|
47
47
|
default:
|
|
48
|
-
throw new
|
|
48
|
+
throw new U(t, e);
|
|
49
49
|
}
|
|
50
50
|
}
|
|
51
|
-
|
|
52
|
-
return !!
|
|
51
|
+
v(t, e, i) {
|
|
52
|
+
return !!t || (this._(e, i), !1);
|
|
53
53
|
}
|
|
54
|
-
|
|
55
|
-
this.
|
|
54
|
+
A(t) {
|
|
55
|
+
this.u.globalLevel = t;
|
|
56
56
|
}
|
|
57
57
|
};
|
|
58
|
-
|
|
59
|
-
let
|
|
60
|
-
const
|
|
61
|
-
function
|
|
62
|
-
|
|
58
|
+
h(M, "l", null);
|
|
59
|
+
let K = M;
|
|
60
|
+
const N = K.m(), ot = /* @__PURE__ */ new WeakMap();
|
|
61
|
+
function H(a, t) {
|
|
62
|
+
ot.set(a, t);
|
|
63
63
|
}
|
|
64
|
-
function
|
|
65
|
-
return
|
|
64
|
+
function k(a) {
|
|
65
|
+
return ot.get(a);
|
|
66
66
|
}
|
|
67
|
-
class
|
|
67
|
+
class at {
|
|
68
68
|
constructor() {
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
this.
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
const
|
|
88
|
-
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
this.
|
|
92
|
-
}
|
|
93
|
-
BA(A) {
|
|
94
|
-
A.lineWeight = this.$, A.rotationX = this.G, A.rotationY = this.M, A.rotationZ = this.Y, A.character[0] = this.F[0], A.character[1] = this.F[1], A.character[2] = this.F[2], A.charColor[0] = this.R[0], A.charColor[1] = this.R[1], A.charColor[2] = this.R[2], A.charColor[3] = this.R[3], A.bgColor[0] = this.S[0], A.bgColor[1] = this.S[1], A.bgColor[2] = this.S[2], A.bgColor[3] = this.S[3], A.flipHorizontally = this.L, A.flipVertically = this.O, A.invert = this.U, A.charRotation[0] = this.W[0], A.charRotation[1] = this.W[1];
|
|
69
|
+
h(this, "C", 1);
|
|
70
|
+
h(this, "U", 0);
|
|
71
|
+
h(this, "$", 0);
|
|
72
|
+
h(this, "M", 0);
|
|
73
|
+
h(this, "F", [0, 0, 0]);
|
|
74
|
+
h(this, "R", [1, 1, 1, 1]);
|
|
75
|
+
h(this, "P", [0, 0, 0, 1]);
|
|
76
|
+
h(this, "S", !1);
|
|
77
|
+
h(this, "G", !1);
|
|
78
|
+
h(this, "D", !1);
|
|
79
|
+
h(this, "L", [0, 0]);
|
|
80
|
+
h(this, "k", [0, 0, 0, 1]);
|
|
81
|
+
h(this, "O", []);
|
|
82
|
+
}
|
|
83
|
+
H() {
|
|
84
|
+
this.O.push({ I: this.C, N: this.U, X: this.$, W: this.M, L: [...this.L], V: this.S, K: this.G, D: this.D, j: [...this.F], Y: [...this.R], q: [...this.P] });
|
|
85
|
+
}
|
|
86
|
+
Z() {
|
|
87
|
+
const t = this.O.pop();
|
|
88
|
+
t ? (this.C = t.I, this.U = t.N, this.$ = t.X, this.M = t.W, this.L = t.L, this.S = t.V, this.G = t.K, this.D = t.D, this.F = t.j, this.R = t.Y, this.P = t.q) : console.warn("pop() called without matching push()");
|
|
89
|
+
}
|
|
90
|
+
J(t) {
|
|
91
|
+
t.I = this.C, t.N = this.U, t.X = this.$, t.W = this.M, t.j[0] = this.F[0], t.j[1] = this.F[1], t.j[2] = this.F[2], t.Y[0] = this.R[0], t.Y[1] = this.R[1], t.Y[2] = this.R[2], t.Y[3] = this.R[3], t.q[0] = this.P[0], t.q[1] = this.P[1], t.q[2] = this.P[2], t.q[3] = this.P[3], t.V = this.S, t.K = this.G, t.D = this.D, t.L[0] = this.L[0], t.L[1] = this.L[1];
|
|
95
92
|
}
|
|
96
93
|
get lineWeight() {
|
|
97
|
-
return this
|
|
94
|
+
return this.C;
|
|
98
95
|
}
|
|
99
96
|
get canvasBackgroundColor() {
|
|
100
|
-
return this.
|
|
97
|
+
return this.k;
|
|
101
98
|
}
|
|
102
|
-
|
|
103
|
-
this
|
|
99
|
+
tt(t) {
|
|
100
|
+
this.C = Math.abs(t);
|
|
104
101
|
}
|
|
105
|
-
|
|
106
|
-
this.
|
|
102
|
+
et(t) {
|
|
103
|
+
this.U = t;
|
|
107
104
|
}
|
|
108
|
-
|
|
109
|
-
this
|
|
105
|
+
st(t) {
|
|
106
|
+
this.$ = t;
|
|
110
107
|
}
|
|
111
|
-
|
|
112
|
-
this.
|
|
108
|
+
it(t) {
|
|
109
|
+
this.M = t;
|
|
113
110
|
}
|
|
114
|
-
|
|
115
|
-
this.F =
|
|
111
|
+
rt(t) {
|
|
112
|
+
this.F = t;
|
|
116
113
|
}
|
|
117
|
-
|
|
118
|
-
this.R = [
|
|
114
|
+
nt(t, e, i, s = 255) {
|
|
115
|
+
this.R = [t / 255, e / 255, i / 255, s / 255];
|
|
119
116
|
}
|
|
120
|
-
|
|
121
|
-
this.
|
|
117
|
+
ot(t, e, i, s = 255) {
|
|
118
|
+
this.P = [t / 255, e / 255, i / 255, s / 255];
|
|
122
119
|
}
|
|
123
|
-
|
|
124
|
-
this.
|
|
120
|
+
ht(t) {
|
|
121
|
+
this.S = t;
|
|
125
122
|
}
|
|
126
|
-
|
|
127
|
-
this.
|
|
123
|
+
ct(t) {
|
|
124
|
+
this.G = t;
|
|
128
125
|
}
|
|
129
|
-
|
|
130
|
-
this.
|
|
126
|
+
lt(t) {
|
|
127
|
+
this.D = t;
|
|
131
128
|
}
|
|
132
|
-
|
|
133
|
-
const
|
|
134
|
-
this.
|
|
129
|
+
ut(t) {
|
|
130
|
+
const e = 255 * t / 360, i = Math.floor(e) / 255, s = Math.round(e - Math.floor(e));
|
|
131
|
+
this.L = [i, s];
|
|
135
132
|
}
|
|
136
|
-
|
|
137
|
-
this.
|
|
133
|
+
ft(t, e, i, s) {
|
|
134
|
+
this.k = [t / 255, e / 255, i / 255, s / 255];
|
|
138
135
|
}
|
|
139
136
|
}
|
|
140
|
-
class
|
|
141
|
-
constructor(
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
this.
|
|
156
|
-
const
|
|
157
|
-
this.
|
|
158
|
-
}
|
|
159
|
-
|
|
160
|
-
const
|
|
161
|
-
for (let
|
|
162
|
-
const
|
|
163
|
-
|
|
137
|
+
class q {
|
|
138
|
+
constructor(t, e, i = e, s = 1, r = {}, n = null, o = !1) {
|
|
139
|
+
h(this, "dt");
|
|
140
|
+
h(this, "gt");
|
|
141
|
+
h(this, "u");
|
|
142
|
+
h(this, "_t", null);
|
|
143
|
+
h(this, "vt");
|
|
144
|
+
h(this, "yt");
|
|
145
|
+
h(this, "At", []);
|
|
146
|
+
h(this, "wt");
|
|
147
|
+
h(this, "Ct", null);
|
|
148
|
+
h(this, "bt", []);
|
|
149
|
+
h(this, "xt", null);
|
|
150
|
+
h(this, "$t", !1);
|
|
151
|
+
h(this, "Mt", null);
|
|
152
|
+
this.dt = e, this.gt = i, this.u = { filter: "nearest", wrap: "clamp", format: "rgba", type: "unsigned_byte", ...r }, this.vt = t, this.wt = Math.min(Math.max(1, s), 8), this.xt = n, this.$t = !!o, this.Mt = this.$t ? new at() : null;
|
|
153
|
+
const c = t.getParameter(t.MAX_DRAW_BUFFERS), l = t.getParameter(t.MAX_COLOR_ATTACHMENTS);
|
|
154
|
+
this.wt = Math.min(this.wt, c, l), this.yt = t.createFramebuffer(), this.Ft(), this.Rt(), this.bt = Array(this.wt).fill(null);
|
|
155
|
+
}
|
|
156
|
+
Ft() {
|
|
157
|
+
const t = this.vt, e = this.u.filter === "linear" ? t.LINEAR : t.NEAREST, i = this.u.wrap === "repeat" ? t.REPEAT : t.CLAMP_TO_EDGE, s = this.u.type === "float" ? t.FLOAT : t.UNSIGNED_BYTE;
|
|
158
|
+
for (let r = 0; r < this.wt; r++) {
|
|
159
|
+
const n = t.createTexture();
|
|
160
|
+
t.bindTexture(t.TEXTURE_2D, n), t.texParameteri(t.TEXTURE_2D, t.TEXTURE_MIN_FILTER, e), t.texParameteri(t.TEXTURE_2D, t.TEXTURE_MAG_FILTER, e), t.texParameteri(t.TEXTURE_2D, t.TEXTURE_WRAP_S, i), t.texParameteri(t.TEXTURE_2D, t.TEXTURE_WRAP_T, i), t.texImage2D(t.TEXTURE_2D, 0, t.RGBA, this.dt, this.gt, 0, t.RGBA, s, null), this.At.push(n);
|
|
164
161
|
}
|
|
165
|
-
|
|
162
|
+
t.bindTexture(t.TEXTURE_2D, null);
|
|
166
163
|
}
|
|
167
|
-
|
|
168
|
-
const
|
|
169
|
-
if (
|
|
164
|
+
Rt() {
|
|
165
|
+
const t = this.vt;
|
|
166
|
+
if (t.bindFramebuffer(t.FRAMEBUFFER, this.yt), this.wt === 1) t.framebufferTexture2D(t.FRAMEBUFFER, t.COLOR_ATTACHMENT0, t.TEXTURE_2D, this.At[0], 0);
|
|
170
167
|
else {
|
|
171
|
-
const
|
|
172
|
-
for (let s = 0; s < this.
|
|
173
|
-
const
|
|
174
|
-
|
|
168
|
+
const i = [];
|
|
169
|
+
for (let s = 0; s < this.wt; s++) {
|
|
170
|
+
const r = t.COLOR_ATTACHMENT0 + s;
|
|
171
|
+
t.framebufferTexture2D(t.FRAMEBUFFER, r, t.TEXTURE_2D, this.At[s], 0), i.push(r);
|
|
175
172
|
}
|
|
176
|
-
|
|
173
|
+
t.drawBuffers(i);
|
|
177
174
|
}
|
|
178
|
-
const
|
|
179
|
-
|
|
180
|
-
}
|
|
181
|
-
|
|
182
|
-
const
|
|
183
|
-
|
|
184
|
-
}
|
|
185
|
-
resize(
|
|
186
|
-
this.
|
|
187
|
-
const
|
|
188
|
-
for (const
|
|
189
|
-
|
|
190
|
-
}
|
|
191
|
-
|
|
192
|
-
const
|
|
193
|
-
if (
|
|
194
|
-
const s = this.
|
|
195
|
-
|
|
196
|
-
const
|
|
197
|
-
for (let
|
|
198
|
-
const
|
|
199
|
-
|
|
175
|
+
const e = t.checkFramebufferStatus(t.FRAMEBUFFER);
|
|
176
|
+
e !== t.FRAMEBUFFER_COMPLETE && console.error("GLFramebuffer is not complete:", e), t.bindFramebuffer(t.FRAMEBUFFER, null);
|
|
177
|
+
}
|
|
178
|
+
zt(t) {
|
|
179
|
+
const e = this.vt;
|
|
180
|
+
e.bindTexture(e.TEXTURE_2D, this.At[0]), e.pixelStorei(e.UNPACK_FLIP_Y_WEBGL, 1), e.texImage2D(e.TEXTURE_2D, 0, e.RGBA, e.RGBA, e.UNSIGNED_BYTE, t), e.bindTexture(e.TEXTURE_2D, null);
|
|
181
|
+
}
|
|
182
|
+
resize(t, e) {
|
|
183
|
+
this.dt = t, this.gt = e, this._t = null, this.bt = Array(this.wt).fill(null);
|
|
184
|
+
const i = this.vt, s = this.u.type === "float" ? i.FLOAT : i.UNSIGNED_BYTE;
|
|
185
|
+
for (const r of this.At) i.bindTexture(i.TEXTURE_2D, r), i.texImage2D(i.TEXTURE_2D, 0, i.RGBA, this.dt, this.gt, 0, i.RGBA, s, null);
|
|
186
|
+
i.bindTexture(i.TEXTURE_2D, null);
|
|
187
|
+
}
|
|
188
|
+
Pt(t) {
|
|
189
|
+
const e = this.vt, i = this.bt[t];
|
|
190
|
+
if (i) return i;
|
|
191
|
+
const s = this.dt, r = this.gt, n = new Uint8Array(s * r * 4), o = e.getParameter(e.READ_FRAMEBUFFER_BINDING);
|
|
192
|
+
e.bindFramebuffer(e.READ_FRAMEBUFFER, this.yt), e.readBuffer(e.COLOR_ATTACHMENT0 + t), e.readPixels(0, 0, s, r, e.RGBA, e.UNSIGNED_BYTE, n), e.bindFramebuffer(e.READ_FRAMEBUFFER, o);
|
|
193
|
+
const c = 4 * s, l = new Uint8Array(n.length);
|
|
194
|
+
for (let f = 0; f < r; f++) {
|
|
195
|
+
const u = (r - 1 - f) * c, g = f * c;
|
|
196
|
+
l.set(n.subarray(u, u + c), g);
|
|
200
197
|
}
|
|
201
|
-
return this.
|
|
198
|
+
return this.bt[t] = l, l;
|
|
202
199
|
}
|
|
203
200
|
begin() {
|
|
204
|
-
var
|
|
205
|
-
const
|
|
206
|
-
if (this.
|
|
207
|
-
const
|
|
208
|
-
|
|
201
|
+
var e, i, s, r;
|
|
202
|
+
const t = this.vt;
|
|
203
|
+
if (this.xt) {
|
|
204
|
+
const n = ((i = (e = this.xt).Tt) == null ? void 0 : i.call(e)) ?? null;
|
|
205
|
+
n && this.xt.St(n), this.$t && this.Mt && ((r = (s = this.xt).Et) == null || r.call(s, this.Mt));
|
|
209
206
|
}
|
|
210
|
-
this.
|
|
211
|
-
for (let
|
|
212
|
-
|
|
207
|
+
this.Ct = { framebuffer: t.getParameter(t.FRAMEBUFFER_BINDING), viewport: t.getParameter(t.VIEWPORT) }, t.bindFramebuffer(t.FRAMEBUFFER, this.yt), this.bt = Array(this.wt).fill(null);
|
|
208
|
+
for (let n = 0; n < this.wt; n++) t.clearBufferfv(t.COLOR, n, new Float32Array([0, 0, 0, 0]));
|
|
209
|
+
t.viewport(0, 0, this.dt, this.gt), H(t, [0, 0, this.dt, this.gt]);
|
|
213
210
|
}
|
|
214
211
|
end() {
|
|
215
|
-
var
|
|
216
|
-
if (!this.
|
|
217
|
-
const
|
|
218
|
-
if (this.
|
|
219
|
-
const
|
|
220
|
-
|
|
212
|
+
var e, i, s, r;
|
|
213
|
+
if (!this.Ct) return;
|
|
214
|
+
const t = this.vt;
|
|
215
|
+
if (this.xt) {
|
|
216
|
+
const n = ((i = (e = this.xt).Tt) == null ? void 0 : i.call(e)) ?? null;
|
|
217
|
+
n && this.xt.St(n);
|
|
221
218
|
}
|
|
222
|
-
|
|
219
|
+
t.bindFramebuffer(t.FRAMEBUFFER, this.Ct.framebuffer), t.viewport(...this.Ct.viewport), H(t, this.Ct.viewport), this.Ct = null, this.xt && this.$t && this.Mt && ((r = (s = this.xt).Bt) == null || r.call(s));
|
|
223
220
|
}
|
|
224
|
-
|
|
225
|
-
const
|
|
226
|
-
|
|
227
|
-
for (const
|
|
221
|
+
Gt() {
|
|
222
|
+
const t = this.vt;
|
|
223
|
+
t.deleteFramebuffer(this.yt);
|
|
224
|
+
for (const e of this.At) t.deleteTexture(e);
|
|
228
225
|
}
|
|
229
226
|
get width() {
|
|
230
|
-
return this.
|
|
227
|
+
return this.dt;
|
|
231
228
|
}
|
|
232
229
|
get height() {
|
|
233
|
-
return this.
|
|
230
|
+
return this.gt;
|
|
234
231
|
}
|
|
235
232
|
get textures() {
|
|
236
|
-
return [...this.
|
|
233
|
+
return [...this.At];
|
|
237
234
|
}
|
|
238
235
|
}
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
if (s && (this.LA.set(e.name, s), this.OA.set(e.name, { type: e.type, size: e.size }), e.size > 1)) {
|
|
258
|
-
const i = e.name.replace(/\[.*\]$/, "");
|
|
259
|
-
this.LA.has(i) || (this.LA.set(i, s), this.OA.set(i, { type: e.type, size: e.size }));
|
|
236
|
+
class _ {
|
|
237
|
+
constructor(t, e, i) {
|
|
238
|
+
h(this, "vt");
|
|
239
|
+
h(this, "Dt");
|
|
240
|
+
h(this, "Lt", /* @__PURE__ */ new Map());
|
|
241
|
+
h(this, "kt", /* @__PURE__ */ new Map());
|
|
242
|
+
h(this, "Ot", 0);
|
|
243
|
+
this.vt = t, this.Dt = this.Ht(e, i), this.It();
|
|
244
|
+
}
|
|
245
|
+
It() {
|
|
246
|
+
const t = this.vt.getProgramParameter(this.Dt, this.vt.ACTIVE_UNIFORMS);
|
|
247
|
+
for (let e = 0; e < t; e++) {
|
|
248
|
+
const i = this.vt.getActiveUniform(this.Dt, e);
|
|
249
|
+
if (i) {
|
|
250
|
+
const s = this.vt.getUniformLocation(this.Dt, i.name);
|
|
251
|
+
if (s && (this.Lt.set(i.name, s), this.kt.set(i.name, { type: i.type, size: i.size }), i.size > 1)) {
|
|
252
|
+
const r = i.name.replace(/\[.*\]$/, "");
|
|
253
|
+
this.Lt.has(r) || (this.Lt.set(r, s), this.kt.set(r, { type: i.type, size: i.size }));
|
|
260
254
|
}
|
|
261
255
|
}
|
|
262
256
|
}
|
|
263
257
|
}
|
|
264
|
-
|
|
265
|
-
const
|
|
266
|
-
if (this.
|
|
267
|
-
const
|
|
268
|
-
throw Error("Shader program link error: " +
|
|
258
|
+
Ht(t, e) {
|
|
259
|
+
const i = this.Nt(this.vt.VERTEX_SHADER, t), s = this.Nt(this.vt.FRAGMENT_SHADER, e), r = this.vt.createProgram();
|
|
260
|
+
if (this.vt.attachShader(r, i), this.vt.attachShader(r, s), this.vt.linkProgram(r), !this.vt.getProgramParameter(r, this.vt.LINK_STATUS)) {
|
|
261
|
+
const n = this.vt.getProgramInfoLog(r);
|
|
262
|
+
throw Error("Shader program link error: " + n);
|
|
269
263
|
}
|
|
270
|
-
return this.
|
|
264
|
+
return this.vt.deleteShader(i), this.vt.deleteShader(s), r;
|
|
271
265
|
}
|
|
272
|
-
|
|
273
|
-
const
|
|
274
|
-
if (this.
|
|
275
|
-
const s = this.
|
|
276
|
-
throw this.
|
|
266
|
+
Nt(t, e) {
|
|
267
|
+
const i = this.vt.createShader(t);
|
|
268
|
+
if (this.vt.shaderSource(i, e), this.vt.compileShader(i), !this.vt.getShaderParameter(i, this.vt.COMPILE_STATUS)) {
|
|
269
|
+
const s = this.vt.getShaderInfoLog(i);
|
|
270
|
+
throw this.vt.deleteShader(i), Error("Shader compilation error: " + s);
|
|
277
271
|
}
|
|
278
|
-
return
|
|
272
|
+
return i;
|
|
273
|
+
}
|
|
274
|
+
Xt() {
|
|
275
|
+
this.vt.useProgram(this.Dt), this.Wt();
|
|
276
|
+
}
|
|
277
|
+
Wt() {
|
|
278
|
+
this.Ot = 0;
|
|
279
279
|
}
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
}
|
|
283
|
-
|
|
284
|
-
this.
|
|
285
|
-
}
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
}
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
const
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
if (!s) return void console.warn(`No type information found for uniform '${A}'`);
|
|
306
|
-
const { type: i, size: B } = s, r = this.wA;
|
|
307
|
-
if (typeof t == "number") switch (i) {
|
|
308
|
-
case r.INT:
|
|
309
|
-
case r.BOOL:
|
|
310
|
-
r.uniform1i(e, t);
|
|
280
|
+
Vt(t) {
|
|
281
|
+
for (const [e, i] of Object.entries(t)) this.Kt(e, i);
|
|
282
|
+
}
|
|
283
|
+
jt(t) {
|
|
284
|
+
return this.Lt.has(t);
|
|
285
|
+
}
|
|
286
|
+
Yt(t) {
|
|
287
|
+
return this.kt.get(t) || null;
|
|
288
|
+
}
|
|
289
|
+
qt() {
|
|
290
|
+
const t = [];
|
|
291
|
+
for (const [e, i] of this.kt.entries()) t.push({ name: e, ...i });
|
|
292
|
+
return t;
|
|
293
|
+
}
|
|
294
|
+
Kt(t, e) {
|
|
295
|
+
var c;
|
|
296
|
+
const i = this.Lt.get(t);
|
|
297
|
+
if (!i) return;
|
|
298
|
+
const s = this.kt.get(t);
|
|
299
|
+
if (!s) return void console.warn(`No type information found for uniform '${t}'`);
|
|
300
|
+
const { type: r, size: n } = s, o = this.vt;
|
|
301
|
+
if (typeof e == "number") switch (r) {
|
|
302
|
+
case o.INT:
|
|
303
|
+
case o.BOOL:
|
|
304
|
+
o.uniform1i(i, e);
|
|
311
305
|
break;
|
|
312
|
-
case
|
|
313
|
-
|
|
306
|
+
case o.FLOAT:
|
|
307
|
+
o.uniform1f(i, e);
|
|
314
308
|
break;
|
|
315
309
|
default:
|
|
316
|
-
console.warn(`Unexpected uniform type for scalar '${
|
|
310
|
+
console.warn(`Unexpected uniform type for scalar '${t}': ${r}`), o.uniform1f(i, e);
|
|
317
311
|
}
|
|
318
|
-
else if (typeof
|
|
319
|
-
else if (Array.isArray(
|
|
320
|
-
const
|
|
321
|
-
switch (
|
|
322
|
-
case
|
|
323
|
-
|
|
312
|
+
else if (typeof e == "boolean") o.uniform1i(i, e ? 1 : 0);
|
|
313
|
+
else if (Array.isArray(e)) if (Array.isArray(e[0])) {
|
|
314
|
+
const l = e, f = ((c = l[0]) == null ? void 0 : c.length) || 0, u = l.flat();
|
|
315
|
+
switch (r) {
|
|
316
|
+
case o.FLOAT_VEC2:
|
|
317
|
+
f === 2 ? o.uniform2fv(i, u) : console.warn(`Vector length mismatch for '${t}': expected 2, got ${f}`);
|
|
324
318
|
break;
|
|
325
|
-
case
|
|
326
|
-
|
|
319
|
+
case o.FLOAT_VEC3:
|
|
320
|
+
f === 3 ? o.uniform3fv(i, u) : console.warn(`Vector length mismatch for '${t}': expected 3, got ${f}`);
|
|
327
321
|
break;
|
|
328
|
-
case
|
|
329
|
-
|
|
322
|
+
case o.FLOAT_VEC4:
|
|
323
|
+
f === 4 ? o.uniform4fv(i, u) : console.warn(`Vector length mismatch for '${t}': expected 4, got ${f}`);
|
|
330
324
|
break;
|
|
331
325
|
default:
|
|
332
|
-
console.warn(`Unsupported uniform type for vector array '${
|
|
326
|
+
console.warn(`Unsupported uniform type for vector array '${t}': ${r}`);
|
|
333
327
|
}
|
|
334
|
-
} else switch (
|
|
335
|
-
case
|
|
336
|
-
|
|
328
|
+
} else switch (r) {
|
|
329
|
+
case o.FLOAT_VEC2:
|
|
330
|
+
e.length === 2 ? o.uniform2f(i, e[0], e[1]) : console.warn(`Vector length mismatch for '${t}': expected 2, got ${e.length}`);
|
|
337
331
|
break;
|
|
338
|
-
case
|
|
339
|
-
|
|
332
|
+
case o.FLOAT_VEC3:
|
|
333
|
+
e.length === 3 ? o.uniform3f(i, e[0], e[1], e[2]) : console.warn(`Vector length mismatch for '${t}': expected 3, got ${e.length}`);
|
|
340
334
|
break;
|
|
341
|
-
case
|
|
342
|
-
|
|
335
|
+
case o.FLOAT_VEC4:
|
|
336
|
+
e.length === 4 ? o.uniform4f(i, e[0], e[1], e[2], e[3]) : console.warn(`Vector length mismatch for '${t}': expected 4, got ${e.length}`);
|
|
343
337
|
break;
|
|
344
|
-
case
|
|
345
|
-
|
|
338
|
+
case o.INT:
|
|
339
|
+
n > 1 ? o.uniform1iv(i, e) : console.warn(`Array provided for scalar uniform '${t}'`);
|
|
346
340
|
break;
|
|
347
|
-
case
|
|
348
|
-
|
|
341
|
+
case o.FLOAT:
|
|
342
|
+
n > 1 ? o.uniform1fv(i, e) : console.warn(`Array provided for scalar uniform '${t}'`);
|
|
349
343
|
break;
|
|
350
344
|
default:
|
|
351
|
-
console.warn(`Unsupported uniform type for array '${
|
|
345
|
+
console.warn(`Unsupported uniform type for array '${t}': ${r}`);
|
|
352
346
|
}
|
|
353
|
-
else if (
|
|
354
|
-
const
|
|
355
|
-
|
|
356
|
-
} else if (
|
|
357
|
-
const
|
|
358
|
-
|
|
359
|
-
} else console.warn(`Unsupported uniform type for '${
|
|
347
|
+
else if (e instanceof WebGLTexture) {
|
|
348
|
+
const l = this.Zt();
|
|
349
|
+
o.uniform1i(i, l), o.activeTexture(o.TEXTURE0 + l), o.bindTexture(o.TEXTURE_2D, e);
|
|
350
|
+
} else if (e instanceof q) {
|
|
351
|
+
const l = this.Zt();
|
|
352
|
+
o.uniform1i(i, l), o.activeTexture(o.TEXTURE0 + l), o.bindTexture(o.TEXTURE_2D, e.textures[0]);
|
|
353
|
+
} else console.warn(`Unsupported uniform type for '${t}':`, typeof e);
|
|
360
354
|
}
|
|
361
|
-
|
|
362
|
-
return this.
|
|
355
|
+
Zt() {
|
|
356
|
+
return this.Ot++;
|
|
363
357
|
}
|
|
364
|
-
get
|
|
365
|
-
return this.
|
|
358
|
+
get Qt() {
|
|
359
|
+
return this.Dt;
|
|
366
360
|
}
|
|
367
|
-
|
|
368
|
-
this.
|
|
361
|
+
Gt() {
|
|
362
|
+
this.vt.deleteProgram(this.Dt);
|
|
369
363
|
}
|
|
370
364
|
}
|
|
371
|
-
const
|
|
372
|
-
in vec2 a_position;in vec2 a_texCoord;in vec2 a_instancePosition;in vec2 a_instanceSize;in vec3 a_instanceCharacter;in vec4 a_instancePrimaryColor;in vec4 a_instanceSecondaryColor;in vec2 a_instanceRotation;in vec3 a_instanceTransform;in vec3 a_instanceGlobalRotation;in vec2 a_instanceRotationCenter;in vec2 a_instanceBezierCP1;in vec2 a_instanceBezierCP2;in vec2 a_instanceBezierStart;in vec2 a_instanceBezierEnd;in vec2 a_instanceArcAngles;uniform float
|
|
373
|
-
class
|
|
374
|
-
constructor(
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
this
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
365
|
+
const X = `#version 300 es
|
|
366
|
+
in vec2 a_position;in vec2 a_texCoord;in vec2 a_instancePosition;in vec2 a_instanceSize;in vec3 a_instanceCharacter;in vec4 a_instancePrimaryColor;in vec4 a_instanceSecondaryColor;in vec2 a_instanceRotation;in vec3 a_instanceTransform;in vec3 a_instanceGlobalRotation;in vec2 a_instanceRotationCenter;in vec2 a_instanceBezierCP1;in vec2 a_instanceBezierCP2;in vec2 a_instanceBezierStart;in vec2 a_instanceBezierEnd;in vec2 a_instanceArcAngles;uniform float U9;uniform vec2 Uy;out vec2 v_uv;out vec3 v_character;out vec4 v_primaryColor;out vec4 v_secondaryColor;out vec2 v_rotation;out vec3 v_transform;mat3 A(float B){float C=sin(B),D=cos(B);return mat3(1,0,0,0,D,-C,0,C,D);}mat3 E(float B){float C=sin(B),D=cos(B);return mat3(D,0,C,0,1,0,-C,0,D);}mat3 F(float B){float C=sin(B),D=cos(B);return mat3(D,-C,0,C,D,0,0,0,1);}vec2 G(float H,vec2 I,vec2 J,vec2 K,vec2 L){float M=1.-H,N=M*M,O=H*H;return N*M*I+3.*N*H*J+3.*M*O*K+O*H*L;}vec2 P(float H,vec2 I,vec2 J,vec2 K,vec2 L){float M=1.-H,N=M*M,O=H*H;return-3.*N*I+3.*N*J-6.*M*H*J+6.*M*H*K-3.*O*K+3.*O*L;}void main(){v_uv=a_texCoord;v_character=a_instanceCharacter;v_primaryColor=a_instancePrimaryColor;v_secondaryColor=a_instanceSecondaryColor;v_rotation=a_instanceRotation;v_transform=a_instanceTransform;vec2 Q;bool R=length(a_instanceBezierCP1)+length(a_instanceBezierCP2)+length(a_instanceBezierStart)+length(a_instanceBezierEnd)>0.;bool S=a_instanceArcAngles.x!=0.||a_instanceArcAngles.y!=0.;if(R){float H=a_position.x;vec2 T=G(H,a_instanceBezierStart,a_instanceBezierCP1,a_instanceBezierCP2,a_instanceBezierEnd);vec2 U=P(H,a_instanceBezierStart,a_instanceBezierCP1,a_instanceBezierCP2,a_instanceBezierEnd);float V=length(U);U=V>0.?U/V:vec2(1,0);Q=T+vec2(-U.y,U.x)*a_position.y*a_instanceSize.y;}else if(S){float C=a_instanceArcAngles.x,W=a_instanceArcAngles.y;C=mod(C,6.28318530718);if(C<0.)C+=6.28318530718;W=mod(W,6.28318530718);if(W<0.)W+=6.28318530718;float X=C-W;if(X<=0.)X+=6.28318530718;float Y=C-a_position.x*X;vec2 Z=vec2(cos(Y),sin(Y))*a_position.y;Q=Z*a_instanceSize*.5+a_instanceSize*.5+a_instancePosition;}else{Q=a_position*a_instanceSize+a_instancePosition;}vec2 a=(Q/Uy)*2.-1.;a.y=-a.y;if(length(a_instanceGlobalRotation)>0.){vec3 b=vec3(a-a_instanceRotationCenter,0);b.x*=U9;if(a_instanceGlobalRotation.x!=0.)b=A(-a_instanceGlobalRotation.x)*b;if(a_instanceGlobalRotation.y!=0.)b=E(-a_instanceGlobalRotation.y)*b;if(a_instanceGlobalRotation.z!=0.)b=F(-a_instanceGlobalRotation.z)*b;b.x/=U9;a=b.xy+a_instanceRotationCenter;}gl_Position=vec4(a,0,1);}`, ht = "attribute vec2 a_position;attribute vec2 a_texCoord;varying vec2 v_uv;void main(){v_uv=a_texCoord;gl_Position=vec4(a_position,0.,1.);}";
|
|
367
|
+
class ft {
|
|
368
|
+
constructor(t) {
|
|
369
|
+
h(this, "vt");
|
|
370
|
+
h(this, "Jt");
|
|
371
|
+
h(this, "te");
|
|
372
|
+
h(this, "ee");
|
|
373
|
+
h(this, "se");
|
|
374
|
+
this.vt = t, this.te = new _(this.vt, X, `#version 300 es
|
|
375
|
+
precision highp float;in vec2 v_uv;in vec3 v_character;in vec4 v_primaryColor;in vec4 v_secondaryColor;in vec2 v_rotation;in vec3 v_transform;layout(location=0)out vec4 o_character;layout(location=1)out vec4 o_primaryColor;layout(location=2)out vec4 o_secondaryColor;layout(location=3)out vec4 o_rotation;layout(location=4)out vec4 o_transform;void main(){o_character=vec4(v_character,1.);o_primaryColor=v_primaryColor;o_secondaryColor=v_secondaryColor;o_rotation=vec4(v_rotation,0.,1.);o_transform=vec4(v_transform,1.);}`), this.Jt = new _(this.vt, X, `#version 300 es
|
|
376
|
+
precision highp float;in vec2 v_uv;uniform sampler2D Ue;uniform sampler2D Uf;uniform sampler2D Ug;uniform sampler2D Uh;uniform sampler2D Ui;uniform vec2 Uj;layout(location=0)out vec4 o_character;layout(location=1)out vec4 o_primaryColor;layout(location=2)out vec4 o_secondaryColor;layout(location=3)out vec4 o_rotation;layout(location=4)out vec4 o_transform;void main(){vec2 A=vec2(v_uv.x,1.-v_uv.y);vec2 B=A*Uj;vec2 C=(floor(B)+0.5f)/Uj;vec4 D=texture(Ue,C);vec4 E=texture(Uf,C);if(E.a==0.){discard;}vec4 F=texture(Ug,C);vec4 G=texture(Uh,C);vec4 H=texture(Ui,C);o_character=D;o_primaryColor=E;o_secondaryColor=F;o_rotation=G;o_transform=H;}`), this.ee = new _(this.vt, ht, "precision mediump float;uniform sampler2D U0;uniform vec2 U1;uniform sampler2D U3;uniform sampler2D U4;uniform sampler2D U5;uniform sampler2D U2;uniform sampler2D U6;uniform vec2 U7;uniform vec2 U8;mat2 A(float B){float C=sin(B);float D=cos(B);return mat2(D,-C,C,D);}void main(){vec2 E=gl_FragCoord.xy/U8;vec2 F=E*U7;vec2 G=floor(F);vec2 H=(G+0.5)/U7;vec4 I=texture2D(U3,H);vec4 J=texture2D(U4,H);vec4 K=texture2D(U5,H);bool L=K.r>0.5;bool M=K.g>0.5;bool N=K.b>0.5;vec4 O=texture2D(U2,H);int P=int(O.r*255.+0.5)+int(O.g*255.+0.5)*256;int Q=int(mod(float(P),U1.x));int R=P/int(U1.x);float S=(U1.y-1.)-float(R);vec2 T=vec2(float(Q),S)/U1;vec4 U=texture2D(U6,H);float V=U.r*255.+U.g;float W=-(V*360./255.)*0.017453292;vec2 X=fract(F)-0.5;if(M)X.x=-X.x;if(N)X.y=-X.y;X=A(W)*X+0.5;vec2 Y=1./U1;vec2 Z=T+X*Y;vec2 a=T+Y;if(any(lessThan(Z,T))||any(greaterThan(Z,a))){gl_FragColor=L?I:J;return;}vec4 b=texture2D(U0,Z);if(L)b.rgb=1.-b.rgb;gl_FragColor=mix(J,I,b);}"), this.se = new _(this.vt, X, `#version 300 es
|
|
377
|
+
precision highp float;in vec2 v_uv;uniform sampler2D Uk;uniform bool Ul;uniform bool Um;uniform bool Un;uniform vec2 Uo;uniform bool Up;uniform vec3 Uq;uniform bool Ur;uniform vec3 Us;uniform vec4 Ut;uniform int Uu;uniform vec3 Uv[64];layout(location=0)out vec4 o_character;layout(location=1)out vec4 o_primaryColor;layout(location=2)out vec4 o_secondaryColor;layout(location=3)out vec4 o_rotation;layout(location=4)out vec4 o_transform;float A(vec3 B){return dot(B,vec3(0.299,0.587,0.114));}void main(){vec2 C=vec2(v_uv.x,1.-v_uv.y);vec4 D=texture(Uk,C);float E=A(D.rgb);if(Uu>0){float F=float(Uu);float G=clamp(E*(F-1.),0.,F-1.);int H=int(floor(G+0.5));vec3 I=Uv[H];o_character=vec4(I,1.);}else{o_character=vec4(E,0.,0.,1.);}vec3 J=D.rgb;vec3 K=Up?Uq:J;vec3 L=Ur?Us:J;float M=Up?1.:D.a;float N;if(D.a<0.01){K=Ut.rgb;L=Ut.rgb;M=Ut.a;N=Ut.a;}else{N=Ur?1.:D.a;}o_primaryColor=vec4(K,M);o_secondaryColor=vec4(L,N);o_rotation=vec4(Uo.xy,0.,1.);o_transform=vec4(float(Ul),float(Um),float(Un),1.);}`);
|
|
378
|
+
}
|
|
379
|
+
ie() {
|
|
380
|
+
return this.Jt;
|
|
385
381
|
}
|
|
386
|
-
|
|
387
|
-
return this.
|
|
388
|
-
precision highp float;in vec2 v_uv;uniform sampler2D l;uniform sampler2D m;uniform sampler2D n;uniform sampler2D o;uniform sampler2D p;uniform vec2 q;layout(location=0)out vec4 o_character;layout(location=1)out vec4 o_primaryColor;layout(location=2)out vec4 o_secondaryColor;layout(location=3)out vec4 o_rotation;layout(location=4)out vec4 o_transform;void main(){vec2 A=vec2(v_uv.x,1.-v_uv.y);vec2 B=A*q;vec2 C=(floor(B)+0.5f)/q;vec4 D=texture(l,C);vec4 E=texture(m,C);if(E.a==0.){discard;}vec4 F=texture(n,C);vec4 G=texture(o,C);vec4 H=texture(p,C);o_character=D;o_primaryColor=E;o_secondaryColor=F;o_rotation=G;o_transform=H;}`));
|
|
382
|
+
Tt() {
|
|
383
|
+
return this.te;
|
|
389
384
|
}
|
|
390
|
-
|
|
391
|
-
return this.
|
|
392
|
-
precision highp float;in vec2 v_uv;in vec3 v_character;in vec4 v_primaryColor;in vec4 v_secondaryColor;in vec2 v_rotation;in vec3 v_transform;layout(location=0)out vec4 o_character;layout(location=1)out vec4 o_primaryColor;layout(location=2)out vec4 o_secondaryColor;layout(location=3)out vec4 o_rotation;layout(location=4)out vec4 o_transform;void main(){o_character=vec4(v_character,1.);o_primaryColor=v_primaryColor;o_secondaryColor=v_secondaryColor;o_rotation=vec4(v_rotation,0.,1.);o_transform=vec4(v_transform,1.);}`));
|
|
385
|
+
re() {
|
|
386
|
+
return this.ee;
|
|
393
387
|
}
|
|
394
|
-
|
|
395
|
-
return this.
|
|
388
|
+
ne() {
|
|
389
|
+
return this.se;
|
|
396
390
|
}
|
|
397
|
-
|
|
398
|
-
return new
|
|
391
|
+
oe(t) {
|
|
392
|
+
return new _(this.vt, X, t);
|
|
399
393
|
}
|
|
400
|
-
|
|
401
|
-
return new
|
|
394
|
+
ae(t, e) {
|
|
395
|
+
return new _(this.vt, t, e);
|
|
402
396
|
}
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
this.tt.clear();
|
|
397
|
+
Gt() {
|
|
398
|
+
this.Jt.Gt(), this.te.Gt(), this.ee.Gt(), this.se.Gt();
|
|
406
399
|
}
|
|
407
400
|
}
|
|
408
|
-
var
|
|
409
|
-
class
|
|
410
|
-
constructor(
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
this.
|
|
414
|
-
}
|
|
415
|
-
|
|
416
|
-
const
|
|
417
|
-
let
|
|
418
|
-
|
|
419
|
-
let
|
|
420
|
-
if (!
|
|
421
|
-
|
|
422
|
-
const
|
|
423
|
-
|
|
424
|
-
const
|
|
425
|
-
|
|
401
|
+
var E = ((a) => (a.RECTANGLE = "rectangle", a.LINE = "line", a.ELLIPSE = "ellipse", a.ARC = "arc", a.TRIANGLE = "triangle", a.BEZIER_CURVE = "bezier_curve", a.CUSTOM = "custom", a))(E || {});
|
|
402
|
+
class dt {
|
|
403
|
+
constructor(t) {
|
|
404
|
+
h(this, "vt");
|
|
405
|
+
h(this, "he", /* @__PURE__ */ new Map());
|
|
406
|
+
this.vt = t;
|
|
407
|
+
}
|
|
408
|
+
ce(t, e, i, s) {
|
|
409
|
+
const r = this.vt;
|
|
410
|
+
let n = this.he.get(t);
|
|
411
|
+
n || (n = /* @__PURE__ */ new Map(), this.he.set(t, n));
|
|
412
|
+
let o = n.get(e) || null;
|
|
413
|
+
if (!o) {
|
|
414
|
+
o = r.createVertexArray(), n.set(e, o), r.bindVertexArray(o), r.bindBuffer(r.ARRAY_BUFFER, s);
|
|
415
|
+
const c = r.getAttribLocation(t, "a_position");
|
|
416
|
+
c !== -1 && (r.enableVertexAttribArray(c), r.vertexAttribPointer(c, i.ue.le.size, r.FLOAT, !1, i.fe, i.ue.le.offset), r.vertexAttribDivisor(c, 0));
|
|
417
|
+
const l = r.getAttribLocation(t, "a_texCoord");
|
|
418
|
+
l !== -1 && (r.enableVertexAttribArray(l), r.vertexAttribPointer(l, i.ue.de.size, r.FLOAT, !1, i.fe, i.ue.de.offset), r.vertexAttribDivisor(l, 0));
|
|
426
419
|
}
|
|
427
|
-
|
|
420
|
+
r.bindVertexArray(o);
|
|
428
421
|
}
|
|
429
|
-
|
|
430
|
-
this.
|
|
422
|
+
pe() {
|
|
423
|
+
this.vt.bindVertexArray(null);
|
|
431
424
|
}
|
|
432
|
-
|
|
433
|
-
const
|
|
434
|
-
for (const [, t] of this.Et) for (const [, e] of t) e && A.deleteVertexArray(e);
|
|
435
|
-
this.Et.clear();
|
|
425
|
+
Gt() {
|
|
426
|
+
for (const [, t] of this.he) for (const [, e] of t) e && this.vt.deleteVertexArray(e);
|
|
436
427
|
}
|
|
437
428
|
}
|
|
438
|
-
class
|
|
439
|
-
constructor(
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
this.
|
|
446
|
-
}
|
|
447
|
-
|
|
448
|
-
const { shader: s } =
|
|
449
|
-
s.
|
|
450
|
-
const
|
|
451
|
-
if (!
|
|
452
|
-
const
|
|
429
|
+
class gt {
|
|
430
|
+
constructor(t, e) {
|
|
431
|
+
h(this, "me");
|
|
432
|
+
h(this, "vt");
|
|
433
|
+
h(this, "xt");
|
|
434
|
+
h(this, "ge", null);
|
|
435
|
+
h(this, "_e", null);
|
|
436
|
+
this.vt = t, this.me = new dt(t), this.xt = e;
|
|
437
|
+
}
|
|
438
|
+
ve(t, e, i) {
|
|
439
|
+
const { shader: s } = t, r = k(this.vt) || this.vt.getParameter(this.vt.VIEWPORT);
|
|
440
|
+
s.Vt({ U9: r[2] / r[3], Uy: [r[2], r[3]] });
|
|
441
|
+
const n = (l) => {
|
|
442
|
+
if (!l || !l.ye()) return;
|
|
443
|
+
const f = l.unitGeometry, u = l.unitBuffer;
|
|
453
444
|
try {
|
|
454
|
-
this.
|
|
445
|
+
this.me.ce(s.Qt, l.type + "", f, u), l.batch.Ae(s), l.batch.we(f.Ce, f.be);
|
|
455
446
|
} finally {
|
|
456
|
-
|
|
447
|
+
l.batch.xe(s), this.me.pe(), l.$e();
|
|
457
448
|
}
|
|
458
449
|
};
|
|
459
|
-
let
|
|
460
|
-
for (const
|
|
461
|
-
if (
|
|
462
|
-
|
|
450
|
+
let o = null, c = null;
|
|
451
|
+
for (const l of e) {
|
|
452
|
+
if (l.type === E.CUSTOM) {
|
|
453
|
+
c && (n(c), o = null, c = null), this.Me(t, l.params, l.state, i.get(E.RECTANGLE));
|
|
463
454
|
continue;
|
|
464
455
|
}
|
|
465
|
-
|
|
466
|
-
let
|
|
467
|
-
|
|
456
|
+
o !== null && l.type !== o && (n(c), o = null, c = null);
|
|
457
|
+
let f = c;
|
|
458
|
+
f && l.type === o || (f = i.get(l.type) || null, c = f, o = l.type), f && f.Fe(l.params, l.state);
|
|
468
459
|
}
|
|
469
|
-
|
|
470
|
-
}
|
|
471
|
-
|
|
472
|
-
const { x:
|
|
473
|
-
|
|
474
|
-
const
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
t.
|
|
481
|
-
|
|
482
|
-
if (t.VA({ k: o[2] / o[3], t: [o[2], o[3]] }), A.vt(), A.bt({ x: s, y: i, width: B, height: r }, Q), A.ut()) {
|
|
483
|
-
const g = A.unitGeometry, a = A.unitBuffer;
|
|
460
|
+
n(c);
|
|
461
|
+
}
|
|
462
|
+
Me(t, e, i, s) {
|
|
463
|
+
const { x: r, y: n, width: o, height: c, shader: l, uniforms: f } = e, u = this.Re(Math.max(1, Math.floor(o)), Math.max(1, Math.floor(c)));
|
|
464
|
+
u.begin(), this.ze(s, l, f, 0, 0, u.width, u.height, {}), u.end();
|
|
465
|
+
const g = this.Pe(), v = { Ue: u.textures[0], Uf: u.textures[1], Ug: u.textures[2], Uh: u.textures[3], Ui: u.textures[4], Uj: [u.width, u.height] };
|
|
466
|
+
this.ze(s, g, v, Math.floor(r), Math.floor(n), Math.max(1, Math.floor(o)), Math.max(1, Math.floor(c)), i), t.shader.Xt();
|
|
467
|
+
}
|
|
468
|
+
ze(t, e, i, s, r, n, o, c) {
|
|
469
|
+
e.Xt(), e.Vt(i);
|
|
470
|
+
const l = this.vt.getParameter(this.vt.VIEWPORT);
|
|
471
|
+
if (e.Vt({ U9: l[2] / l[3], Uy: [l[2], l[3]] }), t.$e(), t.Fe({ x: s, y: r, width: n, height: o }, c), t.ye()) {
|
|
472
|
+
const f = t.unitGeometry, u = t.unitBuffer;
|
|
484
473
|
try {
|
|
485
|
-
this.
|
|
474
|
+
this.me.ce(e.Qt, t.type + "", f, u), t.batch.Ae(e), t.batch.we(f.Ce, f.be);
|
|
486
475
|
} finally {
|
|
487
|
-
|
|
476
|
+
t.batch.xe(e), this.me.pe(), t.$e();
|
|
488
477
|
}
|
|
489
478
|
}
|
|
490
479
|
}
|
|
491
|
-
|
|
492
|
-
return this.
|
|
480
|
+
Pe() {
|
|
481
|
+
return this.xt.ie();
|
|
493
482
|
}
|
|
494
|
-
|
|
495
|
-
return this.
|
|
483
|
+
Re(t, e) {
|
|
484
|
+
return this.ge && this._e && this._e.w === t && this._e.h === e || (this.ge && this.ge.Gt(), this.ge = new q(this.vt, t, e, 5), this._e = { w: t, h: e }), this.ge;
|
|
485
|
+
}
|
|
486
|
+
Gt() {
|
|
487
|
+
this.me.Gt(), this.ge && this.ge.Gt();
|
|
496
488
|
}
|
|
497
489
|
}
|
|
498
|
-
class
|
|
490
|
+
class pt {
|
|
499
491
|
constructor() {
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
}
|
|
504
|
-
|
|
505
|
-
if (this.
|
|
506
|
-
const
|
|
507
|
-
this.
|
|
492
|
+
h(this, "Te", []);
|
|
493
|
+
h(this, "Se", 1);
|
|
494
|
+
h(this, "Ee", 0);
|
|
495
|
+
}
|
|
496
|
+
Be(t) {
|
|
497
|
+
if (this.Ee >= this.Te.length) {
|
|
498
|
+
const i = { id: this.Se++, type: t, params: {}, state: { I: 1, N: 0, X: 0, W: 0, j: [0, 0, 0], Y: [1, 1, 1, 1], q: [0, 0, 0, 1], V: !1, K: !1, D: !1, L: [0, 0] } };
|
|
499
|
+
this.Te.push(i);
|
|
508
500
|
}
|
|
509
|
-
const
|
|
510
|
-
|
|
511
|
-
case D.RECTANGLE:
|
|
512
|
-
case D.ELLIPSE:
|
|
513
|
-
t.params && "width" in t.params || (t.params = { x: 0, y: 0, width: 0, height: 0 });
|
|
514
|
-
break;
|
|
515
|
-
case D.CUSTOM:
|
|
516
|
-
t.params && "shader" in t.params || (t.params = { x: 0, y: 0, width: 0, height: 0, shader: void 0, uniforms: {} });
|
|
517
|
-
break;
|
|
518
|
-
case D.ARC:
|
|
519
|
-
t.params && "start" in t.params || (t.params = { x: 0, y: 0, width: 0, height: 0, start: 0, stop: 0 });
|
|
520
|
-
break;
|
|
521
|
-
case D.LINE:
|
|
522
|
-
t.params && "x2" in t.params || (t.params = { x1: 0, y1: 0, x2: 0, y2: 0, thickness: void 0 });
|
|
523
|
-
break;
|
|
524
|
-
case D.TRIANGLE:
|
|
525
|
-
t.params && "x3" in t.params || (t.params = { x1: 0, y1: 0, x2: 0, y2: 0, x3: 0, y3: 0 });
|
|
526
|
-
break;
|
|
527
|
-
case D.BEZIER_CURVE:
|
|
528
|
-
t.params && "cp2y" in t.params || (t.params = { x1: 0, y1: 0, cp1x: 0, cp1y: 0, cp2x: 0, cp2y: 0, x2: 0, y2: 0, thickness: void 0 });
|
|
529
|
-
break;
|
|
530
|
-
default:
|
|
531
|
-
t.params || (t.params = {});
|
|
532
|
-
}
|
|
533
|
-
return this.Ft++, t;
|
|
501
|
+
const e = this.Te[this.Ee];
|
|
502
|
+
return e.id = this.Se++, e.type = t, this.Ee++, e;
|
|
534
503
|
}
|
|
535
|
-
|
|
536
|
-
const
|
|
537
|
-
return
|
|
504
|
+
Ge(t, e, i, s, r) {
|
|
505
|
+
const n = this.Be(E.RECTANGLE);
|
|
506
|
+
return n.params.x = t, n.params.y = e, n.params.width = i, n.params.height = s, r.J(n.state), n.id;
|
|
538
507
|
}
|
|
539
|
-
|
|
540
|
-
const
|
|
541
|
-
return
|
|
508
|
+
De(t, e, i, s, r, n, o) {
|
|
509
|
+
const c = this.Be(E.CUSTOM);
|
|
510
|
+
return c.params.x = t, c.params.y = e, c.params.width = i, c.params.height = s, c.params.shader = r, c.params.uniforms = n, o.J(c.state), c.id;
|
|
542
511
|
}
|
|
543
|
-
|
|
544
|
-
const
|
|
545
|
-
return
|
|
512
|
+
Le(t, e, i, s, r, n) {
|
|
513
|
+
const o = this.Be(E.LINE);
|
|
514
|
+
return o.params.x1 = t, o.params.y1 = e, o.params.x2 = i, o.params.y2 = s, o.params.thickness = r, n.J(o.state), o.id;
|
|
546
515
|
}
|
|
547
|
-
|
|
548
|
-
const
|
|
549
|
-
return
|
|
516
|
+
ke(t, e, i, s, r) {
|
|
517
|
+
const n = this.Be(E.ELLIPSE);
|
|
518
|
+
return n.params.x = t, n.params.y = e, n.params.width = i, n.params.height = s, r.J(n.state), n.id;
|
|
550
519
|
}
|
|
551
|
-
|
|
552
|
-
const
|
|
553
|
-
return
|
|
520
|
+
Oe(t, e, i, s, r, n, o) {
|
|
521
|
+
const c = this.Be(E.ARC);
|
|
522
|
+
return c.params.x = t, c.params.y = e, c.params.width = i, c.params.height = s, c.params.start = r, c.params.stop = n, o.J(c.state), c.id;
|
|
554
523
|
}
|
|
555
|
-
|
|
556
|
-
const
|
|
557
|
-
return
|
|
524
|
+
He(t, e, i, s, r, n, o) {
|
|
525
|
+
const c = this.Be(E.TRIANGLE);
|
|
526
|
+
return c.params.x1 = t, c.params.y1 = e, c.params.x2 = i, c.params.y2 = s, c.params.x3 = r, c.params.y3 = n, o.J(c.state), c.id;
|
|
558
527
|
}
|
|
559
|
-
|
|
560
|
-
const
|
|
561
|
-
return
|
|
528
|
+
Ie(t, e, i, s, r, n, o, c, l, f) {
|
|
529
|
+
const u = this.Be(E.BEZIER_CURVE);
|
|
530
|
+
return u.params.x1 = t, u.params.y1 = e, u.params.cp1x = i, u.params.cp1y = s, u.params.cp2x = r, u.params.cp2y = n, u.params.x2 = o, u.params.y2 = c, u.params.thickness = l, f.J(u.state), u.id;
|
|
562
531
|
}
|
|
563
532
|
get length() {
|
|
564
|
-
return this.
|
|
533
|
+
return this.Ee;
|
|
565
534
|
}
|
|
566
535
|
get isEmpty() {
|
|
567
|
-
return this.
|
|
536
|
+
return this.Ee === 0;
|
|
568
537
|
}
|
|
569
|
-
|
|
570
|
-
this.
|
|
538
|
+
Ne() {
|
|
539
|
+
this.Ee = 0;
|
|
571
540
|
}
|
|
572
541
|
[Symbol.iterator]() {
|
|
573
|
-
let
|
|
574
|
-
const
|
|
575
|
-
return { next: () =>
|
|
542
|
+
let t = 0;
|
|
543
|
+
const e = this.Ee, i = this.Te;
|
|
544
|
+
return { next: () => t < e ? { value: i[t++], done: !1 } : { value: void 0, done: !0 } };
|
|
576
545
|
}
|
|
577
546
|
}
|
|
578
|
-
const
|
|
579
|
-
static
|
|
580
|
-
var
|
|
581
|
-
const s =
|
|
582
|
-
let
|
|
583
|
-
return s[
|
|
584
|
-
}
|
|
585
|
-
static
|
|
586
|
-
const
|
|
587
|
-
for (let s = 0; s <
|
|
588
|
-
const
|
|
589
|
-
|
|
547
|
+
const P = class P {
|
|
548
|
+
static Xe(t, e, i = 0) {
|
|
549
|
+
var n, o, c, l, f, u, g, v, m, d;
|
|
550
|
+
const s = e || new Float32Array(P.FLOATS_PER_INSTANCE);
|
|
551
|
+
let r = i;
|
|
552
|
+
return s[r++] = t.le[0], s[r++] = t.le[1], s[r++] = t.Ee[0], s[r++] = t.Ee[1], s[r++] = t.j[0], s[r++] = t.j[1], s[r++] = t.j[2], s[r++] = t.Y[0], s[r++] = t.Y[1], s[r++] = t.Y[2], s[r++] = t.Y[3], s[r++] = t.q[0], s[r++] = t.q[1], s[r++] = t.q[2], s[r++] = t.q[3], s[r++] = t.L[0], s[r++] = t.L[1], s[r++] = t.We[0], s[r++] = t.We[1], s[r++] = t.We[2], s[r++] = t.N, s[r++] = t.X, s[r++] = t.W, s[r++] = t.Ve[0], s[r++] = t.Ve[1], s[r++] = ((n = t.Ke) == null ? void 0 : n[0]) || 0, s[r++] = ((o = t.Ke) == null ? void 0 : o[1]) || 0, s[r++] = ((c = t.je) == null ? void 0 : c[0]) || 0, s[r++] = ((l = t.je) == null ? void 0 : l[1]) || 0, s[r++] = ((f = t.Ye) == null ? void 0 : f[0]) || 0, s[r++] = ((u = t.Ye) == null ? void 0 : u[1]) || 0, s[r++] = ((g = t.qe) == null ? void 0 : g[0]) || 0, s[r++] = ((v = t.qe) == null ? void 0 : v[1]) || 0, s[r++] = ((m = t.Ze) == null ? void 0 : m[0]) || 0, s[r++] = ((d = t.Ze) == null ? void 0 : d[1]) || 0, s;
|
|
553
|
+
}
|
|
554
|
+
static Qe(t) {
|
|
555
|
+
const e = t.length * P.FLOATS_PER_INSTANCE, i = new Float32Array(e);
|
|
556
|
+
for (let s = 0; s < t.length; s++) {
|
|
557
|
+
const r = s * P.FLOATS_PER_INSTANCE;
|
|
558
|
+
P.Xe(t[s], i, r);
|
|
590
559
|
}
|
|
591
|
-
return
|
|
560
|
+
return i;
|
|
592
561
|
}
|
|
593
562
|
};
|
|
594
|
-
|
|
595
|
-
let
|
|
596
|
-
const
|
|
563
|
+
h(P, "BYTES_PER_INSTANCE", 140), h(P, "FLOATS_PER_INSTANCE", 35);
|
|
564
|
+
let D = P;
|
|
565
|
+
const T = class T {
|
|
597
566
|
};
|
|
598
|
-
|
|
599
|
-
let
|
|
600
|
-
class
|
|
601
|
-
constructor(
|
|
602
|
-
|
|
603
|
-
|
|
604
|
-
|
|
605
|
-
|
|
606
|
-
|
|
607
|
-
|
|
608
|
-
|
|
609
|
-
|
|
610
|
-
|
|
611
|
-
this.
|
|
612
|
-
}
|
|
613
|
-
|
|
614
|
-
const
|
|
615
|
-
return this.
|
|
567
|
+
h(T, "STRIDE", D.BYTES_PER_INSTANCE), h(T, "ATTRIBUTES", { a_instancePosition: { location: -1, size: 2, type: WebGL2RenderingContext.FLOAT, normalized: !1, stride: T.STRIDE, offset: 0, divisor: 1 }, a_instanceSize: { location: -1, size: 2, type: WebGL2RenderingContext.FLOAT, normalized: !1, stride: T.STRIDE, offset: 8, divisor: 1 }, a_instanceCharacter: { location: -1, size: 3, type: WebGL2RenderingContext.FLOAT, normalized: !1, stride: T.STRIDE, offset: 16, divisor: 1 }, a_instancePrimaryColor: { location: -1, size: 4, type: WebGL2RenderingContext.FLOAT, normalized: !1, stride: T.STRIDE, offset: 28, divisor: 1 }, a_instanceSecondaryColor: { location: -1, size: 4, type: WebGL2RenderingContext.FLOAT, normalized: !1, stride: T.STRIDE, offset: 44, divisor: 1 }, a_instanceRotation: { location: -1, size: 2, type: WebGL2RenderingContext.FLOAT, normalized: !1, stride: T.STRIDE, offset: 60, divisor: 1 }, a_instanceTransform: { location: -1, size: 3, type: WebGL2RenderingContext.FLOAT, normalized: !1, stride: T.STRIDE, offset: 68, divisor: 1 }, a_instanceGlobalRotation: { location: -1, size: 3, type: WebGL2RenderingContext.FLOAT, normalized: !1, stride: T.STRIDE, offset: 80, divisor: 1 }, a_instanceRotationCenter: { location: -1, size: 2, type: WebGL2RenderingContext.FLOAT, normalized: !1, stride: T.STRIDE, offset: 92, divisor: 1 }, a_instanceArcAngles: { location: -1, size: 2, type: WebGL2RenderingContext.FLOAT, normalized: !1, stride: T.STRIDE, offset: 100, divisor: 1 }, a_instanceBezierCP1: { location: -1, size: 2, type: WebGL2RenderingContext.FLOAT, normalized: !1, stride: T.STRIDE, offset: 108, divisor: 1 }, a_instanceBezierCP2: { location: -1, size: 2, type: WebGL2RenderingContext.FLOAT, normalized: !1, stride: T.STRIDE, offset: 116, divisor: 1 }, a_instanceBezierStart: { location: -1, size: 2, type: WebGL2RenderingContext.FLOAT, normalized: !1, stride: T.STRIDE, offset: 124, divisor: 1 }, a_instanceBezierEnd: { location: -1, size: 2, type: WebGL2RenderingContext.FLOAT, normalized: !1, stride: T.STRIDE, offset: 132, divisor: 1 } });
|
|
568
|
+
let Y = T;
|
|
569
|
+
class mt {
|
|
570
|
+
constructor(t, e = 1e3, i = 1.5) {
|
|
571
|
+
h(this, "vt");
|
|
572
|
+
h(this, "Je", []);
|
|
573
|
+
h(this, "ts");
|
|
574
|
+
h(this, "es");
|
|
575
|
+
h(this, "ss", null);
|
|
576
|
+
h(this, "rs", !0);
|
|
577
|
+
h(this, "ns", 0);
|
|
578
|
+
h(this, "hs", /* @__PURE__ */ new Map());
|
|
579
|
+
h(this, "cs", null);
|
|
580
|
+
this.vt = t, this.ts = e, this.es = i, this.ls();
|
|
581
|
+
}
|
|
582
|
+
Fe(t) {
|
|
583
|
+
const e = this.Je.length;
|
|
584
|
+
return this.Je.push(t), this.rs = !0, e;
|
|
616
585
|
}
|
|
617
586
|
get count() {
|
|
618
|
-
return this.
|
|
587
|
+
return this.Je.length;
|
|
619
588
|
}
|
|
620
589
|
get isEmpty() {
|
|
621
|
-
return this.
|
|
590
|
+
return this.Je.length === 0;
|
|
622
591
|
}
|
|
623
592
|
clear() {
|
|
624
|
-
this.
|
|
625
|
-
}
|
|
626
|
-
|
|
627
|
-
if (
|
|
628
|
-
const
|
|
629
|
-
this.
|
|
630
|
-
}
|
|
631
|
-
|
|
632
|
-
const
|
|
633
|
-
this.
|
|
634
|
-
const
|
|
635
|
-
|
|
636
|
-
}
|
|
637
|
-
|
|
638
|
-
if (!this.
|
|
639
|
-
const
|
|
640
|
-
this.
|
|
641
|
-
const
|
|
642
|
-
|
|
643
|
-
}
|
|
644
|
-
|
|
645
|
-
let
|
|
646
|
-
if (!
|
|
647
|
-
|
|
648
|
-
const
|
|
649
|
-
for (const s in
|
|
650
|
-
const
|
|
651
|
-
|
|
593
|
+
this.Je.length = 0, this.rs = !0;
|
|
594
|
+
}
|
|
595
|
+
us(t) {
|
|
596
|
+
if (t <= this.ts) return;
|
|
597
|
+
const e = Math.ceil(t * this.es);
|
|
598
|
+
this.ts = e, this.ls();
|
|
599
|
+
}
|
|
600
|
+
ls() {
|
|
601
|
+
const t = this.vt;
|
|
602
|
+
this.ss && t.deleteBuffer(this.ss), this.ss = t.createBuffer();
|
|
603
|
+
const e = this.ts * D.BYTES_PER_INSTANCE;
|
|
604
|
+
t.bindBuffer(t.ARRAY_BUFFER, this.ss), t.bufferData(t.ARRAY_BUFFER, e, t.DYNAMIC_DRAW), t.bindBuffer(t.ARRAY_BUFFER, null), this.rs = !0, this.ns = 0;
|
|
605
|
+
}
|
|
606
|
+
fs() {
|
|
607
|
+
if (!this.rs || this.Je.length === 0) return;
|
|
608
|
+
const t = this.vt, e = this.Je.length;
|
|
609
|
+
this.us(e), (!this.cs || this.cs.length < e * D.FLOATS_PER_INSTANCE) && (this.cs = new Float32Array(e * D.FLOATS_PER_INSTANCE));
|
|
610
|
+
const i = D.Qe(this.Je);
|
|
611
|
+
t.bindBuffer(t.ARRAY_BUFFER, this.ss), e <= this.ns ? t.bufferSubData(t.ARRAY_BUFFER, 0, i) : t.bufferData(t.ARRAY_BUFFER, i, t.DYNAMIC_DRAW), t.bindBuffer(t.ARRAY_BUFFER, null), this.rs = !1, this.ns = e;
|
|
612
|
+
}
|
|
613
|
+
ds(t) {
|
|
614
|
+
let e = this.hs.get(t);
|
|
615
|
+
if (!e) {
|
|
616
|
+
e = /* @__PURE__ */ new Map();
|
|
617
|
+
const i = this.vt;
|
|
618
|
+
for (const s in Y.ATTRIBUTES) {
|
|
619
|
+
const r = i.getAttribLocation(t, s);
|
|
620
|
+
r !== -1 && e.set(s, r);
|
|
652
621
|
}
|
|
653
|
-
this.
|
|
622
|
+
this.hs.set(t, e);
|
|
654
623
|
}
|
|
655
|
-
return
|
|
624
|
+
return e;
|
|
656
625
|
}
|
|
657
|
-
|
|
658
|
-
if (!this.
|
|
659
|
-
const
|
|
660
|
-
this.
|
|
661
|
-
const s = this.
|
|
662
|
-
|
|
663
|
-
for (const [
|
|
664
|
-
const
|
|
665
|
-
|
|
626
|
+
Ae(t) {
|
|
627
|
+
if (!this.ss || this.Je.length === 0) return;
|
|
628
|
+
const e = this.vt, i = t.Qt;
|
|
629
|
+
this.fs();
|
|
630
|
+
const s = this.ds(i);
|
|
631
|
+
e.bindBuffer(e.ARRAY_BUFFER, this.ss);
|
|
632
|
+
for (const [r, n] of s) {
|
|
633
|
+
const o = Y.ATTRIBUTES[r];
|
|
634
|
+
o && (e.enableVertexAttribArray(n), e.vertexAttribPointer(n, o.size, o.type, o.normalized, o.stride, o.offset), e.vertexAttribDivisor(n, o.divisor));
|
|
666
635
|
}
|
|
667
636
|
}
|
|
668
|
-
|
|
669
|
-
const
|
|
670
|
-
for (const [, s] of
|
|
637
|
+
xe(t) {
|
|
638
|
+
const e = this.vt, i = this.ds(t.Qt);
|
|
639
|
+
for (const [, s] of i) e.disableVertexAttribArray(s), e.vertexAttribDivisor(s, 0);
|
|
671
640
|
}
|
|
672
|
-
|
|
673
|
-
this.
|
|
641
|
+
we(t, e) {
|
|
642
|
+
this.Je.length !== 0 && this.vt.drawArraysInstanced(t, 0, e, this.Je.length);
|
|
674
643
|
}
|
|
675
|
-
|
|
676
|
-
|
|
677
|
-
this.Nt && (A.deleteBuffer(this.Nt), this.Nt = null), this.Jt.length = 0, this.qt.clear(), this.Ae = null;
|
|
644
|
+
Gt() {
|
|
645
|
+
this.ss && this.vt.deleteBuffer(this.ss);
|
|
678
646
|
}
|
|
679
647
|
}
|
|
680
|
-
class
|
|
681
|
-
constructor(
|
|
682
|
-
|
|
683
|
-
|
|
684
|
-
|
|
685
|
-
|
|
686
|
-
|
|
687
|
-
this.
|
|
688
|
-
const
|
|
689
|
-
if (!
|
|
690
|
-
this.
|
|
648
|
+
class I {
|
|
649
|
+
constructor(t, e, i, s) {
|
|
650
|
+
h(this, "vt");
|
|
651
|
+
h(this, "ps");
|
|
652
|
+
h(this, "gs");
|
|
653
|
+
h(this, "_s");
|
|
654
|
+
h(this, "vs", null);
|
|
655
|
+
this.vt = t, this.ps = e, this.gs = i, this._s = s;
|
|
656
|
+
const r = this.vt.createBuffer();
|
|
657
|
+
if (!r) throw Error("Failed to create unit geometry buffer");
|
|
658
|
+
this.vt.bindBuffer(this.vt.ARRAY_BUFFER, r), this.vt.bufferData(this.vt.ARRAY_BUFFER, this._s.As, this.vt.STATIC_DRAW), this.vt.bindBuffer(this.vt.ARRAY_BUFFER, null), this.vs = r;
|
|
691
659
|
}
|
|
692
660
|
get type() {
|
|
693
|
-
return this.
|
|
661
|
+
return this.gs;
|
|
694
662
|
}
|
|
695
663
|
get unitGeometry() {
|
|
696
|
-
return this.
|
|
664
|
+
return this._s;
|
|
697
665
|
}
|
|
698
666
|
get unitBuffer() {
|
|
699
|
-
return this.
|
|
667
|
+
return this.vs;
|
|
700
668
|
}
|
|
701
669
|
get batch() {
|
|
702
|
-
return this.
|
|
670
|
+
return this.ps;
|
|
703
671
|
}
|
|
704
|
-
|
|
705
|
-
this.
|
|
672
|
+
$e() {
|
|
673
|
+
this.ps.clear();
|
|
706
674
|
}
|
|
707
|
-
|
|
708
|
-
return !this.
|
|
675
|
+
ye() {
|
|
676
|
+
return !this.ps.isEmpty;
|
|
709
677
|
}
|
|
710
|
-
|
|
711
|
-
this.
|
|
678
|
+
Gt() {
|
|
679
|
+
this.ps.Gt(), this.vt.deleteBuffer(this.vs);
|
|
712
680
|
}
|
|
713
|
-
|
|
714
|
-
const
|
|
715
|
-
return {
|
|
681
|
+
ws(t, e, i, s, r) {
|
|
682
|
+
const n = this.Cs(t, e, i, s, r.N || 0, r.X || 0, r.W || 0);
|
|
683
|
+
return { le: [t, e], Ee: [i, s], j: r.j || [0, 0, 0], Y: r.Y || [1, 1, 1, 1], q: r.q || [0, 0, 0, 1], L: r.L || [0, 0], We: [r.D ? 1 : 0, r.V ? 1 : 0, r.K ? 1 : 0], N: n.radiansX, X: n.radiansY, W: n.radiansZ, Ve: [n.centerX, n.centerY] };
|
|
716
684
|
}
|
|
717
|
-
|
|
718
|
-
const
|
|
719
|
-
return { nx:
|
|
685
|
+
bs(t, e) {
|
|
686
|
+
const i = k(this.vt) || [0, 0, this.vt.canvas.width, this.vt.canvas.height];
|
|
687
|
+
return { nx: t / i[2] * 2 - 1, ny: 1 - e / i[3] * 2 };
|
|
720
688
|
}
|
|
721
|
-
|
|
722
|
-
const s = this.
|
|
723
|
-
|
|
689
|
+
$s(t, e, i) {
|
|
690
|
+
const s = this.bs(e, i);
|
|
691
|
+
t.Ve = [s.nx, s.ny];
|
|
724
692
|
}
|
|
725
|
-
|
|
726
|
-
const
|
|
727
|
-
return { centerX: (
|
|
693
|
+
Cs(t, e, i, s, r, n, o) {
|
|
694
|
+
const c = k(this.vt) || [0, 0, this.vt.canvas.width, this.vt.canvas.height], l = c[2], f = c[3];
|
|
695
|
+
return { centerX: (t + i / 2) / l * 2 - 1, centerY: 1 - (e + s / 2) / f * 2, radiansX: -r * Math.PI / 180, radiansY: -n * Math.PI / 180, radiansZ: -o * Math.PI / 180, aspectRatio: l / f };
|
|
728
696
|
}
|
|
729
697
|
}
|
|
730
|
-
const
|
|
731
|
-
class
|
|
732
|
-
constructor(
|
|
733
|
-
super(
|
|
698
|
+
const vt = { As: new Float32Array([0, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1, 1, 1, 1]), be: 6, Ce: WebGL2RenderingContext.TRIANGLES, fe: 16, ue: { le: { size: 2, offset: 0 }, de: { size: 2, offset: 8 } } };
|
|
699
|
+
class At extends I {
|
|
700
|
+
constructor(t, e) {
|
|
701
|
+
super(t, e, E.RECTANGLE, vt);
|
|
734
702
|
}
|
|
735
|
-
|
|
736
|
-
const
|
|
737
|
-
return this.
|
|
703
|
+
Fe(t, e) {
|
|
704
|
+
const i = this.ws(t.x, t.y, t.width, t.height, e);
|
|
705
|
+
return this.ps.Fe(i);
|
|
738
706
|
}
|
|
739
707
|
}
|
|
740
|
-
const
|
|
741
|
-
class
|
|
742
|
-
constructor(
|
|
743
|
-
super(
|
|
708
|
+
const xt = { As: new Float32Array([0, -0.5, 0, 0, 1, -0.5, 1, 0, 0, 0.5, 0, 1, 0, 0.5, 0, 1, 1, -0.5, 1, 0, 1, 0.5, 1, 1]), be: 6, Ce: WebGL2RenderingContext.TRIANGLES, fe: 16, ue: { le: { size: 2, offset: 0 }, de: { size: 2, offset: 8 } } };
|
|
709
|
+
class yt extends I {
|
|
710
|
+
constructor(t, e) {
|
|
711
|
+
super(t, e, E.LINE, xt);
|
|
744
712
|
}
|
|
745
|
-
|
|
746
|
-
const
|
|
747
|
-
return this
|
|
713
|
+
Fe(t, e) {
|
|
714
|
+
const i = t.x2 - t.x1, s = t.y2 - t.y1, r = Math.hypot(i, s), n = t.thickness || e.I || 1, o = t.x1 + i / 2, c = t.y1 + s / 2, l = o - r / 2, f = c, u = this.ws(l, f, r, n, e);
|
|
715
|
+
return this.$s(u, o, c), this.ps.Fe(u);
|
|
748
716
|
}
|
|
749
717
|
}
|
|
750
|
-
const
|
|
751
|
-
const
|
|
752
|
-
for (let
|
|
753
|
-
const s =
|
|
754
|
-
|
|
755
|
-
}
|
|
756
|
-
return new Float32Array(
|
|
757
|
-
}(32),
|
|
758
|
-
class
|
|
759
|
-
constructor(
|
|
760
|
-
super(
|
|
761
|
-
}
|
|
762
|
-
|
|
763
|
-
const
|
|
764
|
-
return this
|
|
718
|
+
const Et = { As: function(a = 32) {
|
|
719
|
+
const t = [], e = 2 * Math.PI / a;
|
|
720
|
+
for (let i = 0; i < a; i++) {
|
|
721
|
+
const s = i * e, r = (i + 1) % a * e, n = Math.cos(s), o = Math.sin(s), c = 0.5 * (n + 1), l = 0.5 * (o + 1), f = Math.cos(r), u = Math.sin(r), g = 0.5 * (f + 1), v = 0.5 * (u + 1);
|
|
722
|
+
t.push(0, 0, 0.5, 0.5, n, o, c, l, f, u, g, v);
|
|
723
|
+
}
|
|
724
|
+
return new Float32Array(t);
|
|
725
|
+
}(32), be: 96, Ce: WebGL2RenderingContext.TRIANGLES, fe: 16, ue: { le: { size: 2, offset: 0 }, de: { size: 2, offset: 8 } } };
|
|
726
|
+
class wt extends I {
|
|
727
|
+
constructor(t, e) {
|
|
728
|
+
super(t, e, E.ELLIPSE, Et);
|
|
729
|
+
}
|
|
730
|
+
Fe(t, e) {
|
|
731
|
+
const i = this.ws(t.x, t.y, t.width, t.height, e);
|
|
732
|
+
return this.$s(i, t.x, t.y), this.ps.Fe(i);
|
|
765
733
|
}
|
|
766
734
|
}
|
|
767
|
-
let
|
|
768
|
-
const
|
|
769
|
-
for (let
|
|
770
|
-
const
|
|
771
|
-
|
|
772
|
-
}
|
|
773
|
-
return new Float32Array(
|
|
774
|
-
}(32),
|
|
775
|
-
class
|
|
776
|
-
constructor(
|
|
777
|
-
super(
|
|
778
|
-
}
|
|
779
|
-
|
|
780
|
-
const
|
|
781
|
-
return this
|
|
735
|
+
let Rt = { As: function(a) {
|
|
736
|
+
const t = [];
|
|
737
|
+
for (let e = 0; e < a; e++) {
|
|
738
|
+
const i = e / a, s = (e + 1) / a;
|
|
739
|
+
t.push(i, 0, i, 0, i, 1, i, 1, s, 1, s, 1);
|
|
740
|
+
}
|
|
741
|
+
return new Float32Array(t);
|
|
742
|
+
}(32), be: 96, Ce: WebGL2RenderingContext.TRIANGLES, fe: 16, ue: { le: { size: 2, offset: 0 }, de: { size: 2, offset: 8 } } };
|
|
743
|
+
class bt extends I {
|
|
744
|
+
constructor(t, e) {
|
|
745
|
+
super(t, e, E.ARC, Rt);
|
|
746
|
+
}
|
|
747
|
+
Fe(t, e) {
|
|
748
|
+
const i = t.x - t.width / 2, s = t.y - t.height / 2, r = t.start * Math.PI / 180, n = t.stop * Math.PI / 180, o = this.ws(i, s, t.width, t.height, e);
|
|
749
|
+
return this.$s(o, t.x, t.y), o.Ke = [r, n], this.ps.Fe(o);
|
|
782
750
|
}
|
|
783
751
|
}
|
|
784
|
-
const
|
|
785
|
-
class
|
|
786
|
-
constructor(
|
|
787
|
-
super(
|
|
752
|
+
const Tt = { As: new Float32Array([0, 0, 0, 0, 1, 0, 1, 0, 0.5, 1, 0.5, 1]), be: 3, Ce: WebGL2RenderingContext.TRIANGLES, fe: 16, ue: { le: { size: 2, offset: 0 }, de: { size: 2, offset: 8 } } };
|
|
753
|
+
class Ct extends I {
|
|
754
|
+
constructor(t, e) {
|
|
755
|
+
super(t, e, E.TRIANGLE, Tt);
|
|
788
756
|
}
|
|
789
|
-
|
|
790
|
-
const
|
|
791
|
-
return this
|
|
757
|
+
Fe(t, e) {
|
|
758
|
+
const i = Math.min(t.x1, t.x2, t.x3), s = Math.max(t.x1, t.x2, t.x3), r = Math.min(t.y1, t.y2, t.y3), n = s - i, o = Math.max(t.y1, t.y2, t.y3) - r, c = this.ws(i, r, n, o, e), l = i + 0.5 * n, f = r + o * (1 / 3);
|
|
759
|
+
return this.$s(c, l, f), this.ps.Fe(c);
|
|
792
760
|
}
|
|
793
761
|
}
|
|
794
|
-
function
|
|
795
|
-
const
|
|
796
|
-
return
|
|
762
|
+
function et(a, t, e, i, s) {
|
|
763
|
+
const r = 1 - a, n = r * r, o = a * a;
|
|
764
|
+
return n * r * t + 3 * n * a * e + 3 * r * o * i + o * a * s;
|
|
797
765
|
}
|
|
798
|
-
const
|
|
799
|
-
const
|
|
800
|
-
for (let
|
|
801
|
-
const
|
|
802
|
-
|
|
803
|
-
}
|
|
804
|
-
return new Float32Array(
|
|
805
|
-
}(16),
|
|
806
|
-
class
|
|
807
|
-
constructor(
|
|
808
|
-
super(
|
|
809
|
-
}
|
|
810
|
-
|
|
811
|
-
const
|
|
812
|
-
return this
|
|
766
|
+
const Ut = { As: function(a = 16) {
|
|
767
|
+
const t = [];
|
|
768
|
+
for (let e = 0; e < a; e++) {
|
|
769
|
+
const i = e / a, s = (e + 1) / a;
|
|
770
|
+
t.push(i, -0.5, i, 0), t.push(s, -0.5, s, 0), t.push(i, 0.5, i, 1), t.push(i, 0.5, i, 1), t.push(s, -0.5, s, 0), t.push(s, 0.5, s, 1);
|
|
771
|
+
}
|
|
772
|
+
return new Float32Array(t);
|
|
773
|
+
}(16), be: 96, Ce: WebGL2RenderingContext.TRIANGLES, fe: 16, ue: { le: { size: 2, offset: 0 }, de: { size: 2, offset: 8 } } };
|
|
774
|
+
class Ft extends I {
|
|
775
|
+
constructor(t, e) {
|
|
776
|
+
super(t, e, E.BEZIER_CURVE, Ut);
|
|
777
|
+
}
|
|
778
|
+
Fe(t, e) {
|
|
779
|
+
const i = e.I || 1, s = et(0.5, t.x1, t.cp1x, t.cp2x, t.x2), r = et(0.5, t.y1, t.cp1y, t.cp2y, t.y2), n = this.ws(0, 0, 1, i, e);
|
|
780
|
+
return this.$s(n, s, r), n.qe = [t.x1, t.y1], n.je = [t.cp1x, t.cp1y], n.Ye = [t.cp2x, t.cp2y], n.Ze = [t.x2, t.y2], this.ps.Fe(n);
|
|
813
781
|
}
|
|
814
782
|
}
|
|
815
|
-
class
|
|
816
|
-
constructor(
|
|
817
|
-
|
|
818
|
-
|
|
819
|
-
|
|
820
|
-
|
|
821
|
-
|
|
822
|
-
|
|
823
|
-
|
|
824
|
-
|
|
825
|
-
|
|
826
|
-
|
|
827
|
-
|
|
828
|
-
this.
|
|
783
|
+
class St {
|
|
784
|
+
constructor(t) {
|
|
785
|
+
h(this, "vt");
|
|
786
|
+
h(this, "Ms", null);
|
|
787
|
+
h(this, "Fs");
|
|
788
|
+
h(this, "Rs", null);
|
|
789
|
+
h(this, "zs", {});
|
|
790
|
+
h(this, "Ps", null);
|
|
791
|
+
h(this, "Ts", /* @__PURE__ */ new Map());
|
|
792
|
+
h(this, "Ss");
|
|
793
|
+
h(this, "Es");
|
|
794
|
+
h(this, "Bs");
|
|
795
|
+
h(this, "O", []);
|
|
796
|
+
this.vt = t, this.Fs = new ft(t), this.Bs = new at(), this.Ss = new gt(t, this), this.Es = new pt(), this.Ps = t.createBuffer(), H(this.vt, [0, 0, this.vt.canvas.width, this.vt.canvas.height]);
|
|
797
|
+
}
|
|
798
|
+
Gs(t) {
|
|
799
|
+
let e = this.Ts.get(t);
|
|
800
|
+
if (e) return e;
|
|
801
|
+
const i = new mt(this.vt);
|
|
802
|
+
return e = (0, { [E.RECTANGLE]: () => new At(this.vt, i), [E.LINE]: () => new yt(this.vt, i), [E.ELLIPSE]: () => new wt(this.vt, i), [E.ARC]: () => new bt(this.vt, i), [E.TRIANGLE]: () => new Ct(this.vt, i), [E.BEZIER_CURVE]: () => new Ft(this.vt, i) }[t])(), this.Ts.set(t, e), e;
|
|
803
|
+
}
|
|
804
|
+
Ds(t) {
|
|
805
|
+
this.Ms !== t && (this.Ms = t, t.Xt());
|
|
829
806
|
}
|
|
830
|
-
|
|
831
|
-
|
|
832
|
-
if (t) return t;
|
|
833
|
-
const e = new rA(this.wA);
|
|
834
|
-
return t = (0, { [D.RECTANGLE]: () => new QA(this.wA, e), [D.LINE]: () => new oA(this.wA, e), [D.ELLIPSE]: () => new aA(this.wA, e), [D.ARC]: () => new cA(this.wA, e), [D.TRIANGLE]: () => new CA(this.wA, e), [D.BEZIER_CURVE]: () => new PA(this.wA, e) }[A])(), this.ue.set(A, t), t;
|
|
807
|
+
ae(t, e) {
|
|
808
|
+
return this.Fs.ae(t, e);
|
|
835
809
|
}
|
|
836
|
-
|
|
837
|
-
|
|
810
|
+
ie() {
|
|
811
|
+
return this.Fs.ie();
|
|
838
812
|
}
|
|
839
|
-
|
|
840
|
-
return this.
|
|
813
|
+
Tt() {
|
|
814
|
+
return this.Fs.Tt();
|
|
841
815
|
}
|
|
842
|
-
|
|
843
|
-
return this.
|
|
816
|
+
re() {
|
|
817
|
+
return this.Fs.re();
|
|
844
818
|
}
|
|
845
|
-
|
|
846
|
-
return this.
|
|
819
|
+
ne() {
|
|
820
|
+
return this.Fs.ne();
|
|
847
821
|
}
|
|
848
|
-
|
|
849
|
-
|
|
822
|
+
Ls(t) {
|
|
823
|
+
this.Rs = t, t && (this.zs = {});
|
|
850
824
|
}
|
|
851
|
-
|
|
852
|
-
this.
|
|
825
|
+
Kt(t, e) {
|
|
826
|
+
this.zs[t] = e;
|
|
853
827
|
}
|
|
854
|
-
|
|
855
|
-
this.
|
|
828
|
+
ks(t) {
|
|
829
|
+
Object.assign(this.zs, t);
|
|
856
830
|
}
|
|
857
|
-
|
|
858
|
-
|
|
831
|
+
oe(t) {
|
|
832
|
+
return this.Fs.oe(t);
|
|
859
833
|
}
|
|
860
|
-
|
|
861
|
-
|
|
834
|
+
Os(t, e, i, s, r) {
|
|
835
|
+
const n = this.ie(), o = { Ue: t.textures[0], Uf: t.textures[1], Ug: t.textures[2], Uh: t.textures[3], Ui: t.textures[4], Uj: [t.width, t.height] };
|
|
836
|
+
this.Es.De(e, i, s, r, n, o, this.Bs);
|
|
862
837
|
}
|
|
863
|
-
|
|
864
|
-
const
|
|
865
|
-
this.
|
|
838
|
+
Hs(t, e, i, s, r) {
|
|
839
|
+
const n = this.ne(), o = t.texture, c = t.flags, l = t.charRotationRG, f = [l[0], l[1]], u = t.colorUniforms ?? { charColorFixed: !1, Y: [1, 1, 1], cellColorFixed: !1, cellColor: [0, 0, 0], backgroundColor: [0, 0, 0, 1] }, g = t.characterListUniforms, v = { Uk: o, Ul: !!c.invert, Um: !!c.flipX, Un: !!c.flipY, Uo: f, Up: !!u.charColorFixed, Uq: u.Y, Ur: !!u.cellColorFixed, Us: u.cellColor, Ut: u.backgroundColor, Uu: g.count, Uv: g.list };
|
|
840
|
+
this.Es.De(e, i, s, r, n, v, this.Bs);
|
|
866
841
|
}
|
|
867
|
-
|
|
868
|
-
var
|
|
869
|
-
const
|
|
870
|
-
|
|
871
|
-
const
|
|
872
|
-
|
|
842
|
+
Is(t, e, i, s) {
|
|
843
|
+
var d;
|
|
844
|
+
const r = this.vt, n = r.canvas.width, o = r.canvas.height, c = t / n * 2 - 1, l = (t + i) / n * 2 - 1, f = 1 - e / o * 2, u = 1 - (e + s) / o * 2, g = new Float32Array([c, u, l, u, c, f, l, u, l, f, c, f]);
|
|
845
|
+
r.bindBuffer(r.ARRAY_BUFFER, this.Ps), r.bufferData(r.ARRAY_BUFFER, g, r.DYNAMIC_DRAW);
|
|
846
|
+
const v = ((d = this.Ms) == null ? void 0 : d.Qt) || r.getParameter(r.CURRENT_PROGRAM), m = v ? r.getAttribLocation(v, "a_position") : -1;
|
|
847
|
+
m !== -1 && (r.enableVertexAttribArray(m), r.vertexAttribPointer(m, 2, r.FLOAT, !1, 8, 0)), r.drawArrays(r.TRIANGLES, 0, 6), m !== -1 && r.disableVertexAttribArray(m);
|
|
873
848
|
}
|
|
874
|
-
|
|
875
|
-
this.
|
|
849
|
+
Ns(t, e, i, s) {
|
|
850
|
+
this.Rs ? (this.Es.De(t, e, i, s, this.Rs, { ...this.zs }, this.Bs), this.Rs = null, this.zs = {}) : this.Es.Ge(t, e, i, s, this.Bs);
|
|
876
851
|
}
|
|
877
|
-
|
|
878
|
-
this.
|
|
852
|
+
Xs(t, e, i, s) {
|
|
853
|
+
this.Es.Le(t, e, i, s, this.Bs.lineWeight, this.Bs);
|
|
879
854
|
}
|
|
880
|
-
|
|
881
|
-
this.
|
|
855
|
+
Ws(t, e, i, s) {
|
|
856
|
+
this.Es.ke(t, e, i, s, this.Bs);
|
|
882
857
|
}
|
|
883
|
-
|
|
884
|
-
this.
|
|
858
|
+
Vs(t, e, i, s, r, n) {
|
|
859
|
+
this.Es.He(t, e, i, s, r, n, this.Bs);
|
|
885
860
|
}
|
|
886
|
-
|
|
887
|
-
const
|
|
888
|
-
this.
|
|
861
|
+
Ks(t, e, i, s, r, n, o, c) {
|
|
862
|
+
const l = this.Bs.lineWeight;
|
|
863
|
+
this.Es.Ie(t, e, i, s, r, n, o, c, l, this.Bs);
|
|
889
864
|
}
|
|
890
|
-
|
|
891
|
-
return new
|
|
865
|
+
js(t, e, i = 1, s = {}) {
|
|
866
|
+
return new q(this.vt, t, e, i, s, this, !0);
|
|
892
867
|
}
|
|
893
|
-
|
|
894
|
-
this.
|
|
868
|
+
Ys(t, e, i, s, r, n) {
|
|
869
|
+
this.Es.Oe(t, e, i, s, r, n, this.Bs);
|
|
895
870
|
}
|
|
896
|
-
|
|
897
|
-
this.state.
|
|
871
|
+
qs(t, e = t, i = t, s = 255) {
|
|
872
|
+
this.state.ft(t, e, i, s), this.Ne(t / 255, e / 255, i / 255, s / 255);
|
|
898
873
|
}
|
|
899
|
-
|
|
900
|
-
this.
|
|
874
|
+
Ne(t = 0, e = 0, i = 0, s = 0) {
|
|
875
|
+
this.vt.clearColor(t, e, i, s), this.vt.clear(this.vt.COLOR_BUFFER_BIT);
|
|
901
876
|
}
|
|
902
|
-
|
|
903
|
-
this.
|
|
877
|
+
Zs() {
|
|
878
|
+
this.vt.viewport(0, 0, this.vt.canvas.width, this.vt.canvas.height), H(this.vt, [0, 0, this.vt.canvas.width, this.vt.canvas.height]);
|
|
904
879
|
}
|
|
905
880
|
get context() {
|
|
906
|
-
return this.
|
|
881
|
+
return this.vt;
|
|
907
882
|
}
|
|
908
883
|
get state() {
|
|
909
|
-
return this.
|
|
884
|
+
return this.Bs;
|
|
910
885
|
}
|
|
911
|
-
|
|
912
|
-
this.
|
|
886
|
+
Et(t) {
|
|
887
|
+
this.O.push(this.Bs), this.Bs = t;
|
|
913
888
|
}
|
|
914
|
-
|
|
915
|
-
const
|
|
916
|
-
|
|
889
|
+
Bt() {
|
|
890
|
+
const t = this.O.pop();
|
|
891
|
+
t && (this.Bs = t);
|
|
917
892
|
}
|
|
918
|
-
|
|
919
|
-
const
|
|
920
|
-
this.
|
|
921
|
-
const
|
|
922
|
-
for (const
|
|
923
|
-
for (const
|
|
924
|
-
this.
|
|
893
|
+
St(t) {
|
|
894
|
+
const e = t, i = k(this.vt) ?? this.vt.getParameter(this.vt.VIEWPORT), s = { shader: e, gl: this.vt, viewport: i };
|
|
895
|
+
this.Ds(e);
|
|
896
|
+
const r = /* @__PURE__ */ new Set();
|
|
897
|
+
for (const n of this.Es) n.type === E.CUSTOM ? r.add(E.RECTANGLE) : r.add(n.type);
|
|
898
|
+
for (const n of r) n !== E.CUSTOM && this.Gs(n);
|
|
899
|
+
this.Ss.ve(s, this.Es, this.Ts), this.Es.Ne();
|
|
925
900
|
}
|
|
926
|
-
|
|
927
|
-
this.
|
|
928
|
-
for (const
|
|
929
|
-
this.
|
|
901
|
+
Gt() {
|
|
902
|
+
this.vt.deleteBuffer(this.Ps), this.Es.Ne();
|
|
903
|
+
for (const t of this.Ts.values()) t.Gt();
|
|
904
|
+
this.Fs.Gt(), this.Ss.Gt();
|
|
930
905
|
}
|
|
931
906
|
}
|
|
932
|
-
const
|
|
933
|
-
const
|
|
934
|
-
for (let s = 0; s <
|
|
935
|
-
return
|
|
936
|
-
}, readUint(
|
|
937
|
-
const
|
|
938
|
-
return
|
|
939
|
-
}, readASCII(
|
|
940
|
-
let
|
|
941
|
-
for (let s = 0; s <
|
|
942
|
-
return
|
|
907
|
+
const w = { readShort: (a, t) => (w.t.uint16[0] = a[t] << 8 | a[t + 1], w.t.int16[0]), readUshort: (a, t) => a[t] << 8 | a[t + 1], readUshorts(a, t, e) {
|
|
908
|
+
const i = [];
|
|
909
|
+
for (let s = 0; s < e; s++) i.push(w.readUshort(a, t + 2 * s));
|
|
910
|
+
return i;
|
|
911
|
+
}, readUint(a, t) {
|
|
912
|
+
const e = w.t.uint8;
|
|
913
|
+
return e[3] = a[t], e[2] = a[t + 1], e[1] = a[t + 2], e[0] = a[t + 3], w.t.uint32[0];
|
|
914
|
+
}, readASCII(a, t, e) {
|
|
915
|
+
let i = "";
|
|
916
|
+
for (let s = 0; s < e; s++) i += String.fromCharCode(a[t + s]);
|
|
917
|
+
return i;
|
|
918
|
+
}, writeUshort(a, t, e) {
|
|
919
|
+
a[t] = e >>> 8 & 255, a[t + 1] = 255 & e;
|
|
920
|
+
}, writeUint(a, t, e) {
|
|
921
|
+
a[t] = e >>> 24 & 255, a[t + 1] = e >>> 16 & 255, a[t + 2] = e >>> 8 & 255, a[t + 3] = 255 & e;
|
|
922
|
+
}, writeASCII(a, t, e) {
|
|
923
|
+
for (let i = 0; i < e.length; i++) a[t + i] = 255 & e.charCodeAt(i);
|
|
943
924
|
}, t: (() => {
|
|
944
|
-
const
|
|
945
|
-
return { uint8: new Uint8Array(
|
|
946
|
-
})() }
|
|
947
|
-
|
|
948
|
-
|
|
949
|
-
|
|
950
|
-
|
|
951
|
-
const
|
|
952
|
-
|
|
953
|
-
|
|
954
|
-
|
|
955
|
-
|
|
956
|
-
|
|
957
|
-
|
|
958
|
-
|
|
959
|
-
|
|
960
|
-
|
|
961
|
-
|
|
962
|
-
|
|
963
|
-
|
|
925
|
+
const a = new ArrayBuffer(8);
|
|
926
|
+
return { uint8: new Uint8Array(a), int16: new Int16Array(a), uint16: new Uint16Array(a), uint32: new Uint32Array(a) };
|
|
927
|
+
})() };
|
|
928
|
+
function W(a) {
|
|
929
|
+
return a + 3 & -4;
|
|
930
|
+
}
|
|
931
|
+
function V(a, t, e) {
|
|
932
|
+
const i = t + e;
|
|
933
|
+
let s = 0;
|
|
934
|
+
const r = w.t;
|
|
935
|
+
for (let n = t; n < i; n += 4) r.uint8[3] = a[n] || 0, r.uint8[2] = a[n + 1] || 0, r.uint8[1] = a[n + 2] || 0, r.uint8[0] = a[n + 3] || 0, s = s + (r.uint32[0] >>> 0) >>> 0;
|
|
936
|
+
return s >>> 0;
|
|
937
|
+
}
|
|
938
|
+
class Bt {
|
|
939
|
+
constructor(t) {
|
|
940
|
+
h(this, "b");
|
|
941
|
+
h(this, "p", 0);
|
|
942
|
+
h(this, "bitbuf", 0);
|
|
943
|
+
h(this, "bitcnt", 0);
|
|
944
|
+
this.b = t;
|
|
945
|
+
}
|
|
946
|
+
readBits(t) {
|
|
947
|
+
for (; this.bitcnt < t; ) {
|
|
948
|
+
const i = this.b[this.p++] || 0;
|
|
949
|
+
this.bitbuf |= i << this.bitcnt, this.bitcnt += 8;
|
|
964
950
|
}
|
|
965
|
-
e
|
|
966
|
-
|
|
967
|
-
return e;
|
|
968
|
-
}, parse4(E, A) {
|
|
969
|
-
const t = u, e = t.readUshort, s = t.readUshorts, i = A, B = e(E, A += 2);
|
|
970
|
-
A += 2;
|
|
971
|
-
const r = e(E, A += 2) >>> 1, Q = { format: 4, searchRange: e(E, A += 2), entrySelector: 0, rangeShift: 0, endCount: [], startCount: [], idDelta: [], idRangeOffset: [], glyphIdArray: [] };
|
|
972
|
-
A += 2, Q.entrySelector = e(E, A), A += 2, Q.rangeShift = e(E, A), A += 2, Q.endCount = s(E, A, r), A += 2 * r, A += 2, Q.startCount = s(E, A, r), A += 2 * r;
|
|
973
|
-
for (let o = 0; o < r; o++) Q.idDelta.push(t.readShort(E, A)), A += 2;
|
|
974
|
-
return Q.idRangeOffset = s(E, A, r), A += 2 * r, Q.glyphIdArray = s(E, A, i + B - A >> 1), Q;
|
|
975
|
-
}, parse12(E, A) {
|
|
976
|
-
const t = u.readUint;
|
|
977
|
-
t(E, A += 4), t(E, A += 4);
|
|
978
|
-
const e = t(E, A += 4);
|
|
979
|
-
A += 4;
|
|
980
|
-
const s = new Uint32Array(3 * e);
|
|
981
|
-
for (let i = 0; i < 3 * e; i += 3) s[i] = t(E, A + (i << 2)), s[i + 1] = t(E, A + (i << 2) + 4), s[i + 2] = t(E, A + (i << 2) + 8);
|
|
982
|
-
return { format: 12, groups: s };
|
|
983
|
-
} }, fA = { parseTab(E, A, t) {
|
|
984
|
-
const e = u;
|
|
985
|
-
A += 18;
|
|
986
|
-
const s = e.readUshort(E, A);
|
|
987
|
-
A += 2, A += 16;
|
|
988
|
-
const i = e.readShort(E, A);
|
|
989
|
-
A += 2;
|
|
990
|
-
const B = e.readShort(E, A);
|
|
991
|
-
A += 2;
|
|
992
|
-
const r = e.readShort(E, A);
|
|
993
|
-
A += 2;
|
|
994
|
-
const Q = e.readShort(E, A);
|
|
995
|
-
return A += 2, A += 6, { unitsPerEm: s, xMin: i, yMin: B, xMax: r, yMax: Q, indexToLocFormat: e.readShort(E, A) };
|
|
996
|
-
} }, IA = { parseTab(E, A, t) {
|
|
997
|
-
const e = u;
|
|
998
|
-
A += 4;
|
|
999
|
-
const s = ["ascender", "descender", "lineGap", "advanceWidthMax", "minLeftSideBearing", "minRightSideBearing", "xMaxExtent", "caretSlopeRise", "caretSlopeRun", "caretOffset", "res0", "res1", "res2", "res3", "metricDataFormat", "numberOfHMetrics"], i = {};
|
|
1000
|
-
for (let B = 0; B < s.length; B++) {
|
|
1001
|
-
const r = s[B], Q = r === "advanceWidthMax" || r === "numberOfHMetrics" ? e.readUshort : e.readShort;
|
|
1002
|
-
i[r] = Q(E, A + 2 * B);
|
|
951
|
+
const e = this.bitbuf & (1 << t) - 1;
|
|
952
|
+
return this.bitbuf >>>= t, this.bitcnt -= t, e;
|
|
1003
953
|
}
|
|
1004
|
-
|
|
1005
|
-
|
|
1006
|
-
|
|
1007
|
-
|
|
1008
|
-
|
|
1009
|
-
|
|
1010
|
-
|
|
1011
|
-
|
|
1012
|
-
|
|
1013
|
-
|
|
1014
|
-
|
|
1015
|
-
const
|
|
1016
|
-
|
|
1017
|
-
|
|
1018
|
-
|
|
1019
|
-
|
|
1020
|
-
|
|
1021
|
-
|
|
1022
|
-
|
|
1023
|
-
|
|
1024
|
-
|
|
1025
|
-
|
|
1026
|
-
|
|
1027
|
-
|
|
1028
|
-
|
|
1029
|
-
|
|
1030
|
-
|
|
1031
|
-
|
|
1032
|
-
|
|
1033
|
-
|
|
1034
|
-
|
|
1035
|
-
|
|
1036
|
-
|
|
1037
|
-
|
|
1038
|
-
|
|
1039
|
-
for (let h = 0; h < o; h++) {
|
|
1040
|
-
const c = e[B];
|
|
1041
|
-
if (B++, r.flags.push(c), 8 & c) {
|
|
1042
|
-
const l = e[B];
|
|
1043
|
-
B++;
|
|
1044
|
-
for (let C = 0; C < l; C++) r.flags.push(c), h++;
|
|
1045
|
-
}
|
|
954
|
+
alignToByte() {
|
|
955
|
+
this.bitbuf = 0, this.bitcnt = 0;
|
|
956
|
+
}
|
|
957
|
+
get offset() {
|
|
958
|
+
return this.p;
|
|
959
|
+
}
|
|
960
|
+
}
|
|
961
|
+
function G(a) {
|
|
962
|
+
let t = 32, e = 0;
|
|
963
|
+
for (const o of a) o && (o < t && (t = o), o > e && (e = o));
|
|
964
|
+
if (e === 0) return { min: 0, max: 0, table: /* @__PURE__ */ new Map() };
|
|
965
|
+
const i = new Uint32Array(e + 1);
|
|
966
|
+
for (const o of a) o && i[o]++;
|
|
967
|
+
const s = new Uint32Array(e + 1);
|
|
968
|
+
let r = 0;
|
|
969
|
+
i[0] = 0;
|
|
970
|
+
for (let o = 1; o <= e; o++) r = r + i[o - 1] << 1, s[o] = r;
|
|
971
|
+
const n = /* @__PURE__ */ new Map();
|
|
972
|
+
for (let o = 0; o < a.length; o++) {
|
|
973
|
+
const c = a[o];
|
|
974
|
+
if (!c) continue;
|
|
975
|
+
const l = s[c]++;
|
|
976
|
+
let f = n.get(c);
|
|
977
|
+
f || (f = [], n.set(c, f)), f[Pt(l, c)] = o;
|
|
978
|
+
}
|
|
979
|
+
return { min: t, max: e, table: n };
|
|
980
|
+
}
|
|
981
|
+
function j(a, t) {
|
|
982
|
+
let e = 0;
|
|
983
|
+
for (let i = 1; i <= t.max; i++) {
|
|
984
|
+
e |= a.readBits(1) << i - 1;
|
|
985
|
+
const s = t.table.get(i);
|
|
986
|
+
if (s && e < s.length) {
|
|
987
|
+
const r = s[e];
|
|
988
|
+
if (r !== void 0) return r;
|
|
1046
989
|
}
|
|
1047
|
-
|
|
1048
|
-
|
|
1049
|
-
|
|
1050
|
-
|
|
990
|
+
}
|
|
991
|
+
throw Error("Invalid Huffman code");
|
|
992
|
+
}
|
|
993
|
+
function Pt(a, t) {
|
|
994
|
+
let e = 0;
|
|
995
|
+
for (let i = 0; i < t; i++) e = e << 1 | 1 & a, a >>>= 1;
|
|
996
|
+
return e >>> 0;
|
|
997
|
+
}
|
|
998
|
+
function Lt(a) {
|
|
999
|
+
if (a.length < 2) throw Error("ZLIB data too short");
|
|
1000
|
+
const t = a[0], e = a[1];
|
|
1001
|
+
if ((15 & t) != 8) throw Error("Unsupported ZLIB compression method");
|
|
1002
|
+
if (((t << 8) + e) % 31 != 0) throw Error("Bad ZLIB header check");
|
|
1003
|
+
let i = 2;
|
|
1004
|
+
32 & e && (i += 4);
|
|
1005
|
+
const s = [];
|
|
1006
|
+
return function(r, n) {
|
|
1007
|
+
const o = [3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31, 35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258], c = [0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 0], l = [1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193, 257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145, 8193, 12289, 16385, 24577], f = [0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13];
|
|
1008
|
+
let u = 0;
|
|
1009
|
+
for (; !u; ) {
|
|
1010
|
+
u = r.readBits(1);
|
|
1011
|
+
const g = r.readBits(2);
|
|
1012
|
+
if (g === 0) {
|
|
1013
|
+
r.alignToByte();
|
|
1014
|
+
const v = r.readBits(16);
|
|
1015
|
+
if ((65535 & (65535 ^ v)) !== r.readBits(16)) throw Error("DEFLATE uncompressed LEN/NLEN mismatch");
|
|
1016
|
+
for (let m = 0; m < v; m++) n.push(r.readBits(8));
|
|
1017
|
+
} else {
|
|
1018
|
+
if (g !== 1 && g !== 2) throw Error("Unsupported DEFLATE type");
|
|
1019
|
+
{
|
|
1020
|
+
let v, m;
|
|
1021
|
+
if (g === 1) {
|
|
1022
|
+
const d = Array(288).fill(0);
|
|
1023
|
+
for (let A = 0; A <= 143; A++) d[A] = 8;
|
|
1024
|
+
for (let A = 144; A <= 255; A++) d[A] = 9;
|
|
1025
|
+
for (let A = 256; A <= 279; A++) d[A] = 7;
|
|
1026
|
+
for (let A = 280; A <= 287; A++) d[A] = 8;
|
|
1027
|
+
v = G(d), m = G(Array(32).fill(5));
|
|
1028
|
+
} else {
|
|
1029
|
+
const d = r.readBits(5) + 257, A = r.readBits(5) + 1, p = r.readBits(4) + 4, y = [16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15], x = Array(19).fill(0);
|
|
1030
|
+
for (let F = 0; F < p; F++) x[y[F]] = r.readBits(3);
|
|
1031
|
+
const C = G(x), R = [];
|
|
1032
|
+
for (; R.length < d + A; ) {
|
|
1033
|
+
const F = j(r, C);
|
|
1034
|
+
if (F <= 15) R.push(F);
|
|
1035
|
+
else if (F === 16) {
|
|
1036
|
+
const O = r.readBits(2) + 3, L = R[R.length - 1] || 0;
|
|
1037
|
+
for (let tt = 0; tt < O; tt++) R.push(L);
|
|
1038
|
+
} else if (F === 17) {
|
|
1039
|
+
const O = r.readBits(3) + 3;
|
|
1040
|
+
for (let L = 0; L < O; L++) R.push(0);
|
|
1041
|
+
} else {
|
|
1042
|
+
if (F !== 18) throw Error("Invalid code length symbol");
|
|
1043
|
+
{
|
|
1044
|
+
const O = r.readBits(7) + 11;
|
|
1045
|
+
for (let L = 0; L < O; L++) R.push(0);
|
|
1046
|
+
}
|
|
1047
|
+
}
|
|
1048
|
+
}
|
|
1049
|
+
const b = R.slice(0, d), S = R.slice(d, d + A);
|
|
1050
|
+
v = G(b), m = G(S);
|
|
1051
|
+
}
|
|
1052
|
+
for (; ; ) {
|
|
1053
|
+
const d = j(r, v);
|
|
1054
|
+
if (d < 256) n.push(d);
|
|
1055
|
+
else {
|
|
1056
|
+
if (d === 256) break;
|
|
1057
|
+
if (d > 256 && d < 286) {
|
|
1058
|
+
const A = d - 257;
|
|
1059
|
+
let p = o[A];
|
|
1060
|
+
const y = c[A];
|
|
1061
|
+
y && (p += r.readBits(y));
|
|
1062
|
+
const x = j(r, m);
|
|
1063
|
+
if (x >= 30) throw Error("Invalid distance symbol");
|
|
1064
|
+
let C = l[x];
|
|
1065
|
+
const R = f[x];
|
|
1066
|
+
R && (C += r.readBits(R));
|
|
1067
|
+
const b = n.length - C;
|
|
1068
|
+
if (b < 0) throw Error("Invalid distance");
|
|
1069
|
+
for (let S = 0; S < p; S++) n.push(n[b + S] || 0);
|
|
1070
|
+
} else if (d === 286 || d === 287) throw Error("Reserved length symbol");
|
|
1071
|
+
}
|
|
1072
|
+
}
|
|
1073
|
+
}
|
|
1074
|
+
}
|
|
1051
1075
|
}
|
|
1052
|
-
|
|
1053
|
-
|
|
1054
|
-
|
|
1055
|
-
|
|
1076
|
+
}(new Bt(a.subarray(i)), s), new Uint8Array(s);
|
|
1077
|
+
}
|
|
1078
|
+
function Mt(a) {
|
|
1079
|
+
const t = w, e = new Uint8Array(a);
|
|
1080
|
+
if (t.readASCII(e, 0, 4) !== "wOFF") throw Error("Invalid WOFF signature");
|
|
1081
|
+
const i = t.readUint(e, 4), s = t.readUshort(e, 12), r = t.readUint(e, 16), n = [];
|
|
1082
|
+
let o = 44;
|
|
1083
|
+
for (let p = 0; p < s; p++) {
|
|
1084
|
+
const y = t.readASCII(e, o, 4), x = t.readUint(e, o + 4), C = t.readUint(e, o + 8), R = t.readUint(e, o + 12), b = t.readUint(e, o + 16);
|
|
1085
|
+
n.push({ tag: y, offset: x, compLength: C, origLength: R, checksum: b }), o += 20;
|
|
1086
|
+
}
|
|
1087
|
+
for (const p of n) {
|
|
1088
|
+
const y = new Uint8Array(e.buffer, p.offset, p.compLength);
|
|
1089
|
+
if (p.compLength === p.origLength) p.data = new Uint8Array(y);
|
|
1090
|
+
else if (p.data = Lt(y), p.data.length !== p.origLength) if (p.data.length < p.origLength) {
|
|
1091
|
+
const x = new Uint8Array(p.origLength);
|
|
1092
|
+
x.set(p.data), p.data = x;
|
|
1093
|
+
} else p.data = p.data.subarray(0, p.origLength);
|
|
1094
|
+
}
|
|
1095
|
+
const c = s;
|
|
1096
|
+
let l = 1, f = 0;
|
|
1097
|
+
for (; l << 1 <= c; ) l <<= 1, f++;
|
|
1098
|
+
const u = 16 * l, g = 16 * c - u;
|
|
1099
|
+
let v = 12 + 16 * c;
|
|
1100
|
+
const m = {};
|
|
1101
|
+
for (const p of n) m[p.tag] = v, v = W(v + p.data.length);
|
|
1102
|
+
const d = new Uint8Array(Math.max(r || 0, v));
|
|
1103
|
+
t.writeUint(d, 0, i), t.writeUshort(d, 4, c), t.writeUshort(d, 6, u), t.writeUshort(d, 8, f), t.writeUshort(d, 10, g);
|
|
1104
|
+
let A = 12;
|
|
1105
|
+
for (const p of n) {
|
|
1106
|
+
t.writeASCII(d, A, p.tag), A += 4;
|
|
1107
|
+
let y = p.data;
|
|
1108
|
+
if (p.tag === "head" && y.length >= 12) {
|
|
1109
|
+
const x = new Uint8Array(y);
|
|
1110
|
+
t.writeUint(x, 8, 0);
|
|
1111
|
+
const C = V(x, 0, W(x.length));
|
|
1112
|
+
t.writeUint(d, A, C), A += 4;
|
|
1113
|
+
} else {
|
|
1114
|
+
const x = V(y, 0, W(y.length));
|
|
1115
|
+
t.writeUint(d, A, x), A += 4;
|
|
1056
1116
|
}
|
|
1057
|
-
|
|
1058
|
-
|
|
1059
|
-
|
|
1060
|
-
|
|
1061
|
-
|
|
1062
|
-
|
|
1063
|
-
|
|
1064
|
-
const
|
|
1065
|
-
|
|
1066
|
-
|
|
1067
|
-
|
|
1068
|
-
|
|
1117
|
+
t.writeUint(d, A, m[p.tag]), A += 4, t.writeUint(d, A, p.data.length), A += 4;
|
|
1118
|
+
}
|
|
1119
|
+
for (const p of n) {
|
|
1120
|
+
const y = m[p.tag];
|
|
1121
|
+
d.set(p.data, y);
|
|
1122
|
+
}
|
|
1123
|
+
if (n.find((p) => p.tag === "head")) {
|
|
1124
|
+
const p = m.head, y = function(x, C) {
|
|
1125
|
+
const R = w, b = C + 8, S = [x[b], x[b + 1], x[b + 2], x[b + 3]];
|
|
1126
|
+
R.writeUint(x, b, 0);
|
|
1127
|
+
const F = 2981146554 - (V(x, 0, W(x.length)) >>> 0) >>> 0;
|
|
1128
|
+
return x[b] = S[0], x[b + 1] = S[1], x[b + 2] = S[2], x[b + 3] = S[3], F >>> 0;
|
|
1129
|
+
}(d, p);
|
|
1130
|
+
t.writeUint(d, p + 8, y);
|
|
1131
|
+
}
|
|
1132
|
+
return d.buffer;
|
|
1133
|
+
}
|
|
1134
|
+
const Dt = { parseTab(a, t, e) {
|
|
1135
|
+
const i = { tables: [], ids: {}, off: t };
|
|
1136
|
+
a = new Uint8Array(a.buffer, t, e), t = 0;
|
|
1137
|
+
const s = w, r = s.readUshort, n = r(a, t += 2);
|
|
1138
|
+
t += 2;
|
|
1139
|
+
const o = [];
|
|
1140
|
+
for (let c = 0; c < n; c++) {
|
|
1141
|
+
const l = r(a, t), f = r(a, t += 2);
|
|
1142
|
+
t += 2;
|
|
1143
|
+
const u = s.readUint(a, t);
|
|
1144
|
+
t += 4;
|
|
1145
|
+
const g = `p${l}e${f}`;
|
|
1146
|
+
let v = o.indexOf(u);
|
|
1147
|
+
if (v === -1) {
|
|
1148
|
+
let m;
|
|
1149
|
+
v = i.tables.length, o.push(u);
|
|
1150
|
+
const d = r(a, u);
|
|
1151
|
+
m = d === 4 ? this.parse4(a, u) : d === 12 ? this.parse12(a, u) : { format: d }, i.tables.push(m);
|
|
1069
1152
|
}
|
|
1153
|
+
i.ids[g] = v;
|
|
1070
1154
|
}
|
|
1071
|
-
return
|
|
1072
|
-
}
|
|
1073
|
-
const e =
|
|
1074
|
-
|
|
1075
|
-
|
|
1076
|
-
|
|
1077
|
-
|
|
1078
|
-
|
|
1079
|
-
|
|
1080
|
-
|
|
1155
|
+
return i;
|
|
1156
|
+
}, parse4(a, t) {
|
|
1157
|
+
const e = w, i = e.readUshort, s = e.readUshorts, r = t, n = i(a, t += 2);
|
|
1158
|
+
t += 2;
|
|
1159
|
+
const o = i(a, t += 2) >>> 1, c = { format: 4, searchRange: i(a, t += 2), entrySelector: 0, rangeShift: 0, endCount: [], startCount: [], idDelta: [], idRangeOffset: [], glyphIdArray: [] };
|
|
1160
|
+
t += 2, c.entrySelector = i(a, t), t += 2, c.rangeShift = i(a, t), t += 2, c.endCount = s(a, t, o), t += 2 * o, t += 2, c.startCount = s(a, t, o), t += 2 * o;
|
|
1161
|
+
for (let l = 0; l < o; l++) c.idDelta.push(e.readShort(a, t)), t += 2;
|
|
1162
|
+
return c.idRangeOffset = s(a, t, o), t += 2 * o, c.glyphIdArray = s(a, t, r + n - t >> 1), c;
|
|
1163
|
+
}, parse12(a, t) {
|
|
1164
|
+
const e = w.readUint;
|
|
1165
|
+
e(a, t += 4), e(a, t += 4);
|
|
1166
|
+
const i = e(a, t += 4);
|
|
1167
|
+
t += 4;
|
|
1168
|
+
const s = new Uint32Array(3 * i);
|
|
1169
|
+
for (let r = 0; r < 3 * i; r += 3) s[r] = e(a, t + (r << 2)), s[r + 1] = e(a, t + (r << 2) + 4), s[r + 2] = e(a, t + (r << 2) + 8);
|
|
1170
|
+
return { format: 12, groups: s };
|
|
1171
|
+
} }, _t = { parseTab(a, t, e) {
|
|
1172
|
+
const i = w;
|
|
1173
|
+
t += 18;
|
|
1174
|
+
const s = i.readUshort(a, t);
|
|
1175
|
+
t += 2, t += 16;
|
|
1176
|
+
const r = i.readShort(a, t);
|
|
1177
|
+
t += 2;
|
|
1178
|
+
const n = i.readShort(a, t);
|
|
1179
|
+
t += 2;
|
|
1180
|
+
const o = i.readShort(a, t);
|
|
1181
|
+
t += 2;
|
|
1182
|
+
const c = i.readShort(a, t);
|
|
1183
|
+
return t += 2, t += 6, { unitsPerEm: s, xMin: r, yMin: n, xMax: o, yMax: c, indexToLocFormat: i.readShort(a, t) };
|
|
1184
|
+
} }, It = { parseTab(a, t, e) {
|
|
1185
|
+
const i = w;
|
|
1186
|
+
t += 4;
|
|
1187
|
+
const s = ["ascender", "descender", "lineGap", "advanceWidthMax", "minLeftSideBearing", "minRightSideBearing", "xMaxExtent", "caretSlopeRise", "caretSlopeRun", "caretOffset", "res0", "res1", "res2", "res3", "metricDataFormat", "numberOfHMetrics"], r = {};
|
|
1188
|
+
for (let n = 0; n < s.length; n++) {
|
|
1189
|
+
const o = s[n], c = o === "advanceWidthMax" || o === "numberOfHMetrics" ? i.readUshort : i.readShort;
|
|
1190
|
+
r[o] = c(a, t + 2 * n);
|
|
1081
1191
|
}
|
|
1082
|
-
return
|
|
1083
|
-
},
|
|
1084
|
-
|
|
1085
|
-
|
|
1086
|
-
|
|
1087
|
-
|
|
1088
|
-
}
|
|
1089
|
-
|
|
1090
|
-
|
|
1091
|
-
|
|
1092
|
-
|
|
1093
|
-
|
|
1094
|
-
|
|
1095
|
-
|
|
1096
|
-
|
|
1097
|
-
|
|
1098
|
-
|
|
1099
|
-
|
|
1100
|
-
|
|
1101
|
-
|
|
1102
|
-
|
|
1103
|
-
|
|
1104
|
-
|
|
1105
|
-
|
|
1106
|
-
|
|
1107
|
-
|
|
1108
|
-
|
|
1109
|
-
|
|
1110
|
-
|
|
1111
|
-
|
|
1112
|
-
|
|
1113
|
-
|
|
1114
|
-
|
|
1115
|
-
|
|
1116
|
-
|
|
1117
|
-
|
|
1118
|
-
|
|
1119
|
-
|
|
1120
|
-
|
|
1121
|
-
|
|
1122
|
-
|
|
1123
|
-
if (s === -1 || A < t.startCount[s]) return 0;
|
|
1124
|
-
if (t.idRangeOffset[s] === 0) return A + t.idDelta[s] & 65535;
|
|
1125
|
-
{
|
|
1126
|
-
const i = t.idRangeOffset[s] / 2 + (A - t.startCount[s]) - (e - s);
|
|
1127
|
-
if (i >= 0 && i < t.glyphIdArray.length) {
|
|
1128
|
-
const B = t.glyphIdArray[i];
|
|
1129
|
-
return B === 0 ? 0 : B + t.idDelta[s] & 65535;
|
|
1192
|
+
return r;
|
|
1193
|
+
} }, Ot = { parseTab(a, t, e, i) {
|
|
1194
|
+
const s = w, r = [], n = [], o = i.maxp.numGlyphs, c = i.hhea.numberOfHMetrics;
|
|
1195
|
+
let l = 0, f = 0, u = 0;
|
|
1196
|
+
for (; u < c; ) l = s.readUshort(a, t + (u << 2)), f = s.readShort(a, t + (u << 2) + 2), r.push(l), n.push(f), u++;
|
|
1197
|
+
for (; u < o; ) r.push(l), n.push(f), u++;
|
|
1198
|
+
return { aWidth: r, lsBearing: n };
|
|
1199
|
+
} }, it = { cmap: Dt, head: _t, hhea: It, maxp: { parseTab(a, t, e) {
|
|
1200
|
+
const i = w;
|
|
1201
|
+
return i.readUint(a, t), t += 4, { numGlyphs: i.readUshort(a, t) };
|
|
1202
|
+
} }, hmtx: Ot, loca: { parseTab(a, t, e, i) {
|
|
1203
|
+
const s = w, r = [], n = i.head.indexToLocFormat, o = i.maxp.numGlyphs + 1;
|
|
1204
|
+
if (n === 0) for (let c = 0; c < o; c++) r.push(s.readUshort(a, t + (c << 1)) << 1);
|
|
1205
|
+
else if (n === 1) for (let c = 0; c < o; c++) r.push(s.readUint(a, t + (c << 2)));
|
|
1206
|
+
return r;
|
|
1207
|
+
} }, glyf: { parseTab(a, t, e, i) {
|
|
1208
|
+
const s = [], r = i.maxp.numGlyphs;
|
|
1209
|
+
for (let n = 0; n < r; n++) s.push(null);
|
|
1210
|
+
return s;
|
|
1211
|
+
}, Qs(a, t) {
|
|
1212
|
+
const e = w, i = a.Js, s = a.loca;
|
|
1213
|
+
if (s[t] === s[t + 1]) return null;
|
|
1214
|
+
const r = B.findTable(i, "glyf", a.ti);
|
|
1215
|
+
if (!r) return null;
|
|
1216
|
+
let n = r[0] + s[t];
|
|
1217
|
+
const o = {};
|
|
1218
|
+
if (o.noc = e.readShort(i, n), n += 2, o.xMin = e.readShort(i, n), n += 2, o.yMin = e.readShort(i, n), n += 2, o.xMax = e.readShort(i, n), n += 2, o.yMax = e.readShort(i, n), n += 2, o.xMin >= o.xMax || o.yMin >= o.yMax) return null;
|
|
1219
|
+
if (o.noc > 0) {
|
|
1220
|
+
o.endPts = [];
|
|
1221
|
+
for (let g = 0; g < o.noc; g++) o.endPts.push(e.readUshort(i, n)), n += 2;
|
|
1222
|
+
const c = e.readUshort(i, n);
|
|
1223
|
+
if (n += 2, i.length - n < c) return null;
|
|
1224
|
+
n += c;
|
|
1225
|
+
const l = o.endPts[o.noc - 1] + 1;
|
|
1226
|
+
o.flags = [];
|
|
1227
|
+
for (let g = 0; g < l; g++) {
|
|
1228
|
+
const v = i[n];
|
|
1229
|
+
if (n++, o.flags.push(v), 8 & v) {
|
|
1230
|
+
const m = i[n];
|
|
1231
|
+
n++;
|
|
1232
|
+
for (let d = 0; d < m; d++) o.flags.push(v), g++;
|
|
1130
1233
|
}
|
|
1131
1234
|
}
|
|
1132
|
-
|
|
1133
|
-
|
|
1134
|
-
|
|
1135
|
-
|
|
1136
|
-
for (let s = 0; s < e; s++) {
|
|
1137
|
-
const i = t.groups[3 * s], B = t.groups[3 * s + 1], r = t.groups[3 * s + 2];
|
|
1138
|
-
if (A >= i && A <= B) return r + (A - i);
|
|
1235
|
+
o.xs = [];
|
|
1236
|
+
for (let g = 0; g < l; g++) {
|
|
1237
|
+
const v = o.flags[g], m = !!(16 & v);
|
|
1238
|
+
2 & v ? (o.xs.push(m ? i[n] : -i[n]), n++) : m ? o.xs.push(0) : (o.xs.push(e.readShort(i, n)), n += 2);
|
|
1139
1239
|
}
|
|
1140
|
-
|
|
1141
|
-
|
|
1142
|
-
|
|
1143
|
-
|
|
1144
|
-
|
|
1145
|
-
|
|
1146
|
-
|
|
1240
|
+
o.ys = [];
|
|
1241
|
+
for (let g = 0; g < l; g++) {
|
|
1242
|
+
const v = o.flags[g], m = !!(32 & v);
|
|
1243
|
+
4 & v ? (o.ys.push(m ? i[n] : -i[n]), n++) : m ? o.ys.push(0) : (o.ys.push(e.readShort(i, n)), n += 2);
|
|
1244
|
+
}
|
|
1245
|
+
let f = 0, u = 0;
|
|
1246
|
+
for (let g = 0; g < l; g++) f += o.xs[g], u += o.ys[g], o.xs[g] = f, o.ys[g] = u;
|
|
1247
|
+
} else o.parts = [], o.endPts = [], o.flags = [], o.xs = [], o.ys = [];
|
|
1248
|
+
return o;
|
|
1249
|
+
} } }, B = { parse(a) {
|
|
1250
|
+
const t = new Uint8Array(a), e = w.readASCII(t, 0, 4);
|
|
1251
|
+
if (e === "wOFF") a = Mt(a);
|
|
1252
|
+
else if (e === "wOF2") throw Error("WOFF2 is not supported in this build (Brotli + WOFF2 transforms required)");
|
|
1253
|
+
return [((i, s, r, n) => {
|
|
1254
|
+
const o = it, c = { Js: i, ei: s, ti: r };
|
|
1255
|
+
for (const l in o) {
|
|
1256
|
+
const f = l, u = B.findTable(i, f, r);
|
|
1257
|
+
if (u) {
|
|
1258
|
+
const [g, v] = u;
|
|
1259
|
+
let m = n[g];
|
|
1260
|
+
m == null && (m = o[f].parseTab(i, g, v, c), n[g] = m), c[f] = m;
|
|
1261
|
+
}
|
|
1262
|
+
}
|
|
1263
|
+
return c;
|
|
1264
|
+
})(new Uint8Array(a), 0, 0, {})];
|
|
1265
|
+
}, findTable(a, t, e) {
|
|
1266
|
+
const i = w, s = i.readUshort(a, e + 4);
|
|
1267
|
+
let r = e + 12;
|
|
1268
|
+
for (let n = 0; n < s; n++) {
|
|
1269
|
+
const o = i.readASCII(a, r, 4);
|
|
1270
|
+
i.readUint(a, r + 4);
|
|
1271
|
+
const c = i.readUint(a, r + 8), l = i.readUint(a, r + 12);
|
|
1272
|
+
if (o === t) return [c, l];
|
|
1273
|
+
r += 16;
|
|
1147
1274
|
}
|
|
1148
|
-
|
|
1149
|
-
|
|
1150
|
-
|
|
1151
|
-
|
|
1275
|
+
return null;
|
|
1276
|
+
}, T: it, B: w };
|
|
1277
|
+
class Gt {
|
|
1278
|
+
si(t) {
|
|
1279
|
+
var i;
|
|
1280
|
+
const e = [];
|
|
1281
|
+
return (i = t.cmap) != null && i.tables ? (t.cmap.tables.forEach((s) => {
|
|
1152
1282
|
if (s.format === 4) {
|
|
1153
|
-
const
|
|
1154
|
-
|
|
1283
|
+
const r = this.ii(s);
|
|
1284
|
+
e.push(...r);
|
|
1155
1285
|
} else if (s.format === 12) {
|
|
1156
|
-
const
|
|
1157
|
-
|
|
1286
|
+
const r = this.ri(s);
|
|
1287
|
+
e.push(...r);
|
|
1158
1288
|
}
|
|
1159
|
-
}), [...new Set(
|
|
1160
|
-
}
|
|
1161
|
-
ss(A, t) {
|
|
1162
|
-
return this.qe.Ze(A, t) > 0;
|
|
1163
|
-
}
|
|
1164
|
-
Bs(A, t) {
|
|
1165
|
-
for (const e of t) if (!this.ss(A, e)) return !1;
|
|
1166
|
-
return !0;
|
|
1167
|
-
}
|
|
1168
|
-
Qs(A, t) {
|
|
1169
|
-
return t.filter((e) => this.ss(A, e));
|
|
1289
|
+
}), [...new Set(e)]) : [];
|
|
1170
1290
|
}
|
|
1171
|
-
|
|
1172
|
-
return
|
|
1291
|
+
ni(t) {
|
|
1292
|
+
return t.filter((e) => this.oi(e));
|
|
1173
1293
|
}
|
|
1174
|
-
|
|
1175
|
-
const
|
|
1176
|
-
if (!(
|
|
1177
|
-
for (let
|
|
1178
|
-
const s =
|
|
1179
|
-
if (s !== 65535 ||
|
|
1180
|
-
for (let
|
|
1181
|
-
if (this.
|
|
1182
|
-
const
|
|
1183
|
-
|
|
1294
|
+
ii(t) {
|
|
1295
|
+
const e = [];
|
|
1296
|
+
if (!(t.startCount && t.endCount && t.idRangeOffset && t.idDelta)) return e;
|
|
1297
|
+
for (let i = 0; i < t.startCount.length; i++) {
|
|
1298
|
+
const s = t.startCount[i], r = t.endCount[i];
|
|
1299
|
+
if (s !== 65535 || r !== 65535) {
|
|
1300
|
+
for (let n = s; n <= r; n++)
|
|
1301
|
+
if (this.ai(t, n, i) > 0) try {
|
|
1302
|
+
const o = String.fromCodePoint(n);
|
|
1303
|
+
e.push(o);
|
|
1184
1304
|
} catch {
|
|
1185
1305
|
}
|
|
1186
1306
|
}
|
|
1187
1307
|
}
|
|
1188
|
-
return
|
|
1308
|
+
return e;
|
|
1189
1309
|
}
|
|
1190
|
-
|
|
1191
|
-
const
|
|
1192
|
-
if (!
|
|
1193
|
-
for (let
|
|
1194
|
-
const s =
|
|
1195
|
-
for (let
|
|
1196
|
-
if (
|
|
1197
|
-
const
|
|
1198
|
-
|
|
1310
|
+
ri(t) {
|
|
1311
|
+
const e = [];
|
|
1312
|
+
if (!t.groups) return e;
|
|
1313
|
+
for (let i = 0; i < t.groups.length; i += 3) {
|
|
1314
|
+
const s = t.groups[i], r = t.groups[i + 1], n = t.groups[i + 2];
|
|
1315
|
+
for (let o = s; o <= r; o++)
|
|
1316
|
+
if (n + (o - s) > 0) try {
|
|
1317
|
+
const c = String.fromCodePoint(o);
|
|
1318
|
+
e.push(c);
|
|
1199
1319
|
} catch {
|
|
1200
1320
|
}
|
|
1201
1321
|
}
|
|
1202
|
-
return
|
|
1322
|
+
return e;
|
|
1203
1323
|
}
|
|
1204
|
-
|
|
1205
|
-
if (
|
|
1324
|
+
ai(t, e, i) {
|
|
1325
|
+
if (t.idRangeOffset[i] === 0) return e + t.idDelta[i] & 65535;
|
|
1206
1326
|
{
|
|
1207
|
-
const s =
|
|
1208
|
-
if (s >= 0 &&
|
|
1209
|
-
const
|
|
1210
|
-
if (
|
|
1327
|
+
const s = t.idRangeOffset[i] / 2 + (e - t.startCount[i]) - (t.startCount.length - i);
|
|
1328
|
+
if (s >= 0 && t.glyphIdArray && s < t.glyphIdArray.length) {
|
|
1329
|
+
const r = t.glyphIdArray[s];
|
|
1330
|
+
if (r !== 0) return r + t.idDelta[i] & 65535;
|
|
1211
1331
|
}
|
|
1212
1332
|
}
|
|
1213
1333
|
return 0;
|
|
1214
1334
|
}
|
|
1215
|
-
|
|
1216
|
-
const
|
|
1217
|
-
return !(
|
|
1335
|
+
oi(t) {
|
|
1336
|
+
const e = t.codePointAt(0) || 0;
|
|
1337
|
+
return !(e >= 0 && e <= 31 && e !== 9 && e !== 10 && e !== 13 || e >= 127 && e <= 159);
|
|
1218
1338
|
}
|
|
1219
1339
|
}
|
|
1220
|
-
class
|
|
1340
|
+
class Z {
|
|
1221
1341
|
constructor() {
|
|
1222
|
-
|
|
1223
|
-
|
|
1224
|
-
|
|
1342
|
+
h(this, "hi", /* @__PURE__ */ new Map());
|
|
1343
|
+
h(this, "ci", /* @__PURE__ */ new Map());
|
|
1344
|
+
}
|
|
1345
|
+
li(t, e) {
|
|
1346
|
+
const i = `${this.ui(t)}_${e}`;
|
|
1347
|
+
if (this.hi.has(i)) return this.hi.get(i);
|
|
1348
|
+
const s = t.cmap;
|
|
1349
|
+
if (!s || !s.tables) return this.hi.set(i, 0), 0;
|
|
1350
|
+
let r = 0;
|
|
1351
|
+
for (const n of s.tables) if (n.format === 4 ? r = this.fi(e, n) : n.format === 12 && (r = this.di(e, n)), r > 0) break;
|
|
1352
|
+
return this.hi.set(i, r), r;
|
|
1353
|
+
}
|
|
1354
|
+
pi(t, e) {
|
|
1355
|
+
const i = e.codePointAt(0);
|
|
1356
|
+
return i === void 0 ? 0 : this.li(t, i);
|
|
1357
|
+
}
|
|
1358
|
+
mi(t, e) {
|
|
1359
|
+
const i = t.hmtx;
|
|
1360
|
+
return i && i.aWidth && i.aWidth.length !== 0 ? e < i.aWidth.length ? i.aWidth[e] : i.aWidth[i.aWidth.length - 1] : 0;
|
|
1361
|
+
}
|
|
1362
|
+
gi(t, e) {
|
|
1363
|
+
const i = e / t.head.unitsPerEm, s = t.hhea.ascender * i, r = t.hhea.descender * i, n = t.hhea.lineGap * i;
|
|
1364
|
+
return { ascender: s, descender: r, lineGap: n, lineHeight: s - r + n, unitsPerEm: t.head.unitsPerEm, scale: i };
|
|
1225
1365
|
}
|
|
1226
|
-
|
|
1227
|
-
|
|
1366
|
+
_i() {
|
|
1367
|
+
this.hi.clear(), this.ci.clear();
|
|
1228
1368
|
}
|
|
1229
|
-
|
|
1230
|
-
return
|
|
1369
|
+
ui(t) {
|
|
1370
|
+
return `${t.ti}_${t.Js.length}`;
|
|
1231
1371
|
}
|
|
1232
|
-
|
|
1233
|
-
|
|
1372
|
+
fi(t, e) {
|
|
1373
|
+
const i = e.endCount.length;
|
|
1374
|
+
let s = -1;
|
|
1375
|
+
for (let r = 0; r < i; r++) if (t <= e.endCount[r]) {
|
|
1376
|
+
s = r;
|
|
1377
|
+
break;
|
|
1378
|
+
}
|
|
1379
|
+
if (s === -1 || t < e.startCount[s]) return 0;
|
|
1380
|
+
if (e.idRangeOffset[s] === 0) return t + e.idDelta[s] & 65535;
|
|
1381
|
+
{
|
|
1382
|
+
const r = e.idRangeOffset[s] / 2 + (t - e.startCount[s]) - (i - s);
|
|
1383
|
+
if (r >= 0 && r < e.glyphIdArray.length) {
|
|
1384
|
+
const n = e.glyphIdArray[r];
|
|
1385
|
+
return n === 0 ? 0 : n + e.idDelta[s] & 65535;
|
|
1386
|
+
}
|
|
1387
|
+
}
|
|
1388
|
+
return 0;
|
|
1234
1389
|
}
|
|
1235
|
-
|
|
1236
|
-
|
|
1390
|
+
di(t, e) {
|
|
1391
|
+
const i = e.groups.length / 3;
|
|
1392
|
+
for (let s = 0; s < i; s++) {
|
|
1393
|
+
const r = e.groups[3 * s], n = e.groups[3 * s + 1], o = e.groups[3 * s + 2];
|
|
1394
|
+
if (t >= r && t <= n) return o + (t - r);
|
|
1395
|
+
}
|
|
1396
|
+
return 0;
|
|
1237
1397
|
}
|
|
1238
1398
|
}
|
|
1239
|
-
class
|
|
1240
|
-
constructor(
|
|
1241
|
-
|
|
1242
|
-
|
|
1243
|
-
|
|
1244
|
-
|
|
1245
|
-
this.
|
|
1246
|
-
}
|
|
1247
|
-
createTextureAtlas(
|
|
1248
|
-
const
|
|
1249
|
-
this.
|
|
1250
|
-
const
|
|
1251
|
-
return
|
|
1252
|
-
}
|
|
1253
|
-
|
|
1254
|
-
this.
|
|
1255
|
-
}
|
|
1256
|
-
|
|
1257
|
-
const
|
|
1258
|
-
for (let
|
|
1259
|
-
const
|
|
1260
|
-
if (!
|
|
1261
|
-
const
|
|
1262
|
-
this.
|
|
1399
|
+
class Nt {
|
|
1400
|
+
constructor(t) {
|
|
1401
|
+
h(this, "yi");
|
|
1402
|
+
h(this, "Ai");
|
|
1403
|
+
h(this, "xt");
|
|
1404
|
+
h(this, "wi");
|
|
1405
|
+
this.xt = t, this.wi = new Z(), this.yi = document.createElement("canvas"), this.Ai = this.yi.getContext("2d", { willReadFrequently: !0, alpha: !1 });
|
|
1406
|
+
}
|
|
1407
|
+
createTextureAtlas(t, e, i, s) {
|
|
1408
|
+
const r = t.length, n = Math.ceil(Math.sqrt(r)), o = Math.ceil(r / n), c = e.width * n, l = e.height * o, f = typeof s == "object" ? s : null;
|
|
1409
|
+
this.Ci(c, l), this.bi(t, e, n, i, f);
|
|
1410
|
+
const u = this.xt.js(c, l, 1, { filter: "nearest" });
|
|
1411
|
+
return u.zt(this.yi), { framebuffer: u, columns: n, rows: o };
|
|
1412
|
+
}
|
|
1413
|
+
Ci(t, e) {
|
|
1414
|
+
this.yi.width = t, this.yi.height = e, this.yi.style.width = t + "px", this.yi.style.height = t + "px", this.Ai.imageSmoothingEnabled = !1, this.yi.style.imageRendering = "pixelated", this.Ai.fillStyle = "black", this.Ai.fillRect(0, 0, t, e), this.Ai.textBaseline = "top", this.Ai.textAlign = "left", this.Ai.fillStyle = "white";
|
|
1415
|
+
}
|
|
1416
|
+
bi(t, e, i, s, r) {
|
|
1417
|
+
const n = s / r.head.unitsPerEm;
|
|
1418
|
+
for (let o = 0; o < t.length; o++) {
|
|
1419
|
+
const c = o % i, l = Math.floor(o / i), f = t[o].character, u = this.xi(r, f);
|
|
1420
|
+
if (!u) continue;
|
|
1421
|
+
const g = f.codePointAt(0) || 0, v = this.wi.li(r, g), m = this.$i(r, v) * n, d = c * e.width, A = l * e.height, p = d + 0.5 * e.width, y = A + 0.5 * e.height, x = Math.round(p - 0.5 * e.width), C = Math.round(y - 0.5 * s), R = x + 0.5 * (e.width - m), b = C + r.hhea.ascender * n;
|
|
1422
|
+
this.Mi(u, R, b, n);
|
|
1263
1423
|
}
|
|
1264
1424
|
}
|
|
1265
|
-
|
|
1266
|
-
const
|
|
1425
|
+
xi(t, e) {
|
|
1426
|
+
const i = e.codePointAt(0) || 0, s = this.wi.li(t, i);
|
|
1267
1427
|
if (s === 0) return null;
|
|
1268
|
-
if (
|
|
1269
|
-
if (
|
|
1270
|
-
const
|
|
1271
|
-
return
|
|
1428
|
+
if (t.glyf && t.glyf[s] !== null) return t.glyf[s];
|
|
1429
|
+
if (B && B.T && B.T.glyf) {
|
|
1430
|
+
const r = B.T.glyf.Qs(t, s);
|
|
1431
|
+
return t.glyf && r && (t.glyf[s] = r), r;
|
|
1272
1432
|
}
|
|
1273
1433
|
return null;
|
|
1274
1434
|
}
|
|
1275
|
-
|
|
1276
|
-
const
|
|
1277
|
-
return
|
|
1278
|
-
}
|
|
1279
|
-
|
|
1280
|
-
if (!
|
|
1281
|
-
const { xs:
|
|
1282
|
-
if (!(
|
|
1283
|
-
this.
|
|
1284
|
-
let
|
|
1285
|
-
for (let
|
|
1286
|
-
const
|
|
1287
|
-
if (!(
|
|
1288
|
-
if (
|
|
1289
|
-
const
|
|
1290
|
-
this.
|
|
1291
|
-
let
|
|
1292
|
-
for (;
|
|
1293
|
-
if (1 &
|
|
1294
|
-
const
|
|
1295
|
-
this.
|
|
1435
|
+
$i(t, e) {
|
|
1436
|
+
const i = t.hmtx;
|
|
1437
|
+
return i && i.aWidth ? e < i.aWidth.length ? i.aWidth[e] : i.aWidth[i.aWidth.length - 1] : 0;
|
|
1438
|
+
}
|
|
1439
|
+
Mi(t, e, i, s) {
|
|
1440
|
+
if (!t || !t.xs || t.noc === 0) return;
|
|
1441
|
+
const { xs: r, ys: n, endPts: o, flags: c } = t;
|
|
1442
|
+
if (!(r && n && o && c)) return;
|
|
1443
|
+
this.Ai.beginPath();
|
|
1444
|
+
let l = 0;
|
|
1445
|
+
for (let f = 0; f < o.length; f++) {
|
|
1446
|
+
const u = o[f];
|
|
1447
|
+
if (!(u < l)) {
|
|
1448
|
+
if (u >= l) {
|
|
1449
|
+
const g = e + r[l] * s, v = i - n[l] * s;
|
|
1450
|
+
this.Ai.moveTo(g, v);
|
|
1451
|
+
let m = l + 1;
|
|
1452
|
+
for (; m <= u; )
|
|
1453
|
+
if (1 & c[m]) {
|
|
1454
|
+
const d = e + r[m] * s, A = i - n[m] * s;
|
|
1455
|
+
this.Ai.lineTo(d, A), m++;
|
|
1296
1456
|
} else {
|
|
1297
|
-
const
|
|
1298
|
-
let
|
|
1299
|
-
if (1 &
|
|
1300
|
-
const
|
|
1301
|
-
this.
|
|
1457
|
+
const d = e + r[m] * s, A = i - n[m] * s;
|
|
1458
|
+
let p = m + 1 > u ? l : m + 1;
|
|
1459
|
+
if (1 & c[p]) {
|
|
1460
|
+
const y = e + r[p] * s, x = i - n[p] * s;
|
|
1461
|
+
this.Ai.quadraticCurveTo(d, A, y, x), m = p + 1;
|
|
1302
1462
|
} else {
|
|
1303
|
-
const
|
|
1304
|
-
this.
|
|
1463
|
+
const y = (d + (e + r[p] * s)) / 2, x = (A + (i - n[p] * s)) / 2;
|
|
1464
|
+
this.Ai.quadraticCurveTo(d, A, y, x), m = p;
|
|
1305
1465
|
}
|
|
1306
1466
|
}
|
|
1307
|
-
this.
|
|
1467
|
+
this.Ai.closePath();
|
|
1308
1468
|
}
|
|
1309
|
-
|
|
1469
|
+
l = u + 1;
|
|
1310
1470
|
}
|
|
1311
1471
|
}
|
|
1312
|
-
this.
|
|
1472
|
+
this.Ai.fill();
|
|
1313
1473
|
}
|
|
1314
1474
|
}
|
|
1315
|
-
class
|
|
1475
|
+
class zt {
|
|
1316
1476
|
constructor() {
|
|
1317
|
-
|
|
1318
|
-
this.
|
|
1477
|
+
h(this, "Fi");
|
|
1478
|
+
this.Fi = new Z();
|
|
1319
1479
|
}
|
|
1320
|
-
|
|
1480
|
+
Ri(t, e, i) {
|
|
1321
1481
|
let s = 0;
|
|
1322
|
-
const
|
|
1323
|
-
for (const
|
|
1324
|
-
const
|
|
1325
|
-
if (
|
|
1326
|
-
const
|
|
1327
|
-
s = Math.max(s,
|
|
1482
|
+
const r = this.Fi.gi(i, e), n = r.lineHeight;
|
|
1483
|
+
for (const o of t) {
|
|
1484
|
+
const c = this.Fi.pi(i, o);
|
|
1485
|
+
if (c === 0) continue;
|
|
1486
|
+
const l = this.Fi.mi(i, c) * r.scale;
|
|
1487
|
+
s = Math.max(s, l);
|
|
1328
1488
|
}
|
|
1329
|
-
return { width: Math.ceil(s), height: Math.ceil(
|
|
1330
|
-
}
|
|
1331
|
-
getCharacterAdvanceWidth(A, t, e) {
|
|
1332
|
-
const s = this.qe.Xe(e, t), i = this.qe.Ze(e, A);
|
|
1333
|
-
return this.qe.Ne(e, i) * s.scale;
|
|
1334
|
-
}
|
|
1335
|
-
getFontMetrics(A, t) {
|
|
1336
|
-
return this.qe.Xe(t, A);
|
|
1489
|
+
return { width: Math.ceil(s), height: Math.ceil(n) };
|
|
1337
1490
|
}
|
|
1338
|
-
|
|
1339
|
-
this.
|
|
1491
|
+
_i() {
|
|
1492
|
+
this.Fi._i();
|
|
1340
1493
|
}
|
|
1341
1494
|
}
|
|
1342
|
-
class
|
|
1495
|
+
class Xt {
|
|
1343
1496
|
constructor() {
|
|
1344
|
-
|
|
1345
|
-
this.
|
|
1346
|
-
}
|
|
1347
|
-
createCharacterObjects(
|
|
1348
|
-
return
|
|
1349
|
-
const
|
|
1350
|
-
let
|
|
1351
|
-
if (
|
|
1352
|
-
const
|
|
1353
|
-
|
|
1497
|
+
h(this, "wi");
|
|
1498
|
+
this.wi = new Z();
|
|
1499
|
+
}
|
|
1500
|
+
createCharacterObjects(t, e) {
|
|
1501
|
+
return t.map((i, s) => {
|
|
1502
|
+
const r = i.codePointAt(0) || 0, n = this.zi(s);
|
|
1503
|
+
let o = 0;
|
|
1504
|
+
if (e.hmtx && e.hmtx.aWidth) {
|
|
1505
|
+
const c = this.wi.li(e, r);
|
|
1506
|
+
c > 0 && e.hmtx.aWidth[c] !== void 0 && (o = e.hmtx.aWidth[c]);
|
|
1354
1507
|
}
|
|
1355
|
-
return { character:
|
|
1508
|
+
return { character: i, unicode: r, color: n, advanceWidth: o };
|
|
1356
1509
|
});
|
|
1357
1510
|
}
|
|
1358
|
-
|
|
1359
|
-
return [
|
|
1511
|
+
zi(t) {
|
|
1512
|
+
return [t % 256 / 255, Math.floor(t / 256) % 256 / 255, Math.floor(t / 65536) % 256 / 255];
|
|
1360
1513
|
}
|
|
1361
|
-
|
|
1362
|
-
if (!
|
|
1363
|
-
const
|
|
1364
|
-
return
|
|
1514
|
+
Pi(t, e) {
|
|
1515
|
+
if (!N.v(typeof t == "string", "Character must be a string.", { method: "getCharacterColor", providedValue: t })) return [0, 0, 0];
|
|
1516
|
+
const i = e.find((s) => s.character === t);
|
|
1517
|
+
return i ? i.color : [0, 0, 0];
|
|
1365
1518
|
}
|
|
1366
|
-
|
|
1367
|
-
return
|
|
1519
|
+
Ti(t, e) {
|
|
1520
|
+
return N.v(typeof t == "string" && t.length > 0, "Characters must be a string with at least one character.", { method: "getCharacterColors", providedValue: t }) ? Array.from(t).map((i) => this.Pi(i, e) || [0, 0, 0]) : [[0, 0, 0]];
|
|
1368
1521
|
}
|
|
1369
1522
|
}
|
|
1370
|
-
class
|
|
1371
|
-
constructor(
|
|
1372
|
-
|
|
1373
|
-
|
|
1374
|
-
|
|
1375
|
-
|
|
1376
|
-
|
|
1377
|
-
|
|
1378
|
-
|
|
1379
|
-
|
|
1380
|
-
|
|
1381
|
-
|
|
1382
|
-
|
|
1383
|
-
|
|
1384
|
-
this.
|
|
1385
|
-
}
|
|
1386
|
-
async
|
|
1387
|
-
let
|
|
1388
|
-
if (
|
|
1389
|
-
const
|
|
1390
|
-
if (!
|
|
1391
|
-
|
|
1523
|
+
class Wt {
|
|
1524
|
+
constructor(t, e = 16) {
|
|
1525
|
+
h(this, "Si");
|
|
1526
|
+
h(this, "Ei", []);
|
|
1527
|
+
h(this, "Bi");
|
|
1528
|
+
h(this, "Gi", 16);
|
|
1529
|
+
h(this, "Di", 0);
|
|
1530
|
+
h(this, "Li", 0);
|
|
1531
|
+
h(this, "ki", { width: 0, height: 0 });
|
|
1532
|
+
h(this, "Oi");
|
|
1533
|
+
h(this, "Hi");
|
|
1534
|
+
h(this, "Ii");
|
|
1535
|
+
h(this, "Ni");
|
|
1536
|
+
h(this, "Xi");
|
|
1537
|
+
this.Gi = e, this.Hi = new Gt(), this.Ii = new Nt(t), this.Ni = new zt(), this.Xi = new Xt();
|
|
1538
|
+
}
|
|
1539
|
+
async Wi(t) {
|
|
1540
|
+
let e;
|
|
1541
|
+
if (t) {
|
|
1542
|
+
const i = await fetch(t);
|
|
1543
|
+
if (!i.ok) throw new U(`Failed to load font file: ${i.status} ${i.statusText}`);
|
|
1544
|
+
e = await i.arrayBuffer();
|
|
1392
1545
|
} else
|
|
1393
|
-
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
|
|
1394
|
-
|
|
1395
|
-
await this.Ls(t), this.ps = m.parse(t)[0], await this.Os();
|
|
1546
|
+
e = await (await fetch("data:font/woff;base64,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")).arrayBuffer();
|
|
1547
|
+
await this.Vi(e), this.Si = B.parse(e)[0], await this.Ki();
|
|
1396
1548
|
}
|
|
1397
|
-
|
|
1398
|
-
if (
|
|
1399
|
-
this.
|
|
1400
|
-
const
|
|
1401
|
-
this.
|
|
1549
|
+
ji(t) {
|
|
1550
|
+
if (t === void 0) return this.Gi;
|
|
1551
|
+
this.Gi = t, this.ki = this.Ni.Ri(this.Ei.map((i) => i.character), this.Gi, this.Si);
|
|
1552
|
+
const e = this.Ii.createTextureAtlas(this.Ei, this.ki, this.Gi, this.Si);
|
|
1553
|
+
this.Bi = e.framebuffer, this.Di = e.columns, this.Li = e.rows;
|
|
1402
1554
|
}
|
|
1403
|
-
async
|
|
1555
|
+
async Yi(t) {
|
|
1404
1556
|
try {
|
|
1405
|
-
const
|
|
1406
|
-
if (!
|
|
1407
|
-
const
|
|
1408
|
-
await this.
|
|
1409
|
-
const s =
|
|
1557
|
+
const e = await fetch(t);
|
|
1558
|
+
if (!e.ok) throw new U(`Failed to load font file: ${e.status} ${e.statusText}`);
|
|
1559
|
+
const i = await e.arrayBuffer();
|
|
1560
|
+
await this.Vi(i);
|
|
1561
|
+
const s = B.parse(i);
|
|
1410
1562
|
if (!s || s.length === 0) throw Error("Failed to parse font file");
|
|
1411
|
-
this.
|
|
1412
|
-
} catch (
|
|
1413
|
-
throw new
|
|
1563
|
+
this.Si = s[0], await this.Ki();
|
|
1564
|
+
} catch (e) {
|
|
1565
|
+
throw new U("Failed to load font: " + (e instanceof Error ? e.message : "Unknown error"), e);
|
|
1414
1566
|
}
|
|
1415
1567
|
}
|
|
1416
|
-
async
|
|
1417
|
-
const
|
|
1418
|
-
this.
|
|
1568
|
+
async Vi(t) {
|
|
1569
|
+
const e = Date.now();
|
|
1570
|
+
this.Oi = new FontFace("CustomFont_" + e, t), await this.Oi.load(), document.fonts.add(this.Oi);
|
|
1419
1571
|
}
|
|
1420
|
-
async
|
|
1421
|
-
const
|
|
1422
|
-
this.
|
|
1423
|
-
const
|
|
1424
|
-
this.
|
|
1572
|
+
async Ki() {
|
|
1573
|
+
const t = this.Hi.si(this.Si), e = this.Hi.ni(t);
|
|
1574
|
+
this.Ei = this.Xi.createCharacterObjects(e, this.Si), this.ki = this.Ni.Ri(e, this.Gi, this.Si);
|
|
1575
|
+
const i = this.Ii.createTextureAtlas(this.Ei, this.ki, this.Gi, this.Si);
|
|
1576
|
+
this.Bi = i.framebuffer, this.Di = i.columns, this.Li = i.rows;
|
|
1425
1577
|
}
|
|
1426
|
-
|
|
1427
|
-
return this.
|
|
1578
|
+
Pi(t) {
|
|
1579
|
+
return this.Xi.Pi(t, this.Ei);
|
|
1428
1580
|
}
|
|
1429
|
-
|
|
1430
|
-
return this.
|
|
1581
|
+
Ti(t) {
|
|
1582
|
+
return this.Xi.Ti(t, this.Ei);
|
|
1431
1583
|
}
|
|
1432
|
-
|
|
1433
|
-
this.
|
|
1584
|
+
Gt() {
|
|
1585
|
+
this.Bi.Gt(), document.fonts.delete(this.Oi);
|
|
1434
1586
|
}
|
|
1435
1587
|
get fontFramebuffer() {
|
|
1436
|
-
return this.
|
|
1588
|
+
return this.Bi;
|
|
1437
1589
|
}
|
|
1438
1590
|
get characters() {
|
|
1439
|
-
return this.
|
|
1591
|
+
return this.Ei;
|
|
1440
1592
|
}
|
|
1441
1593
|
get textureColumns() {
|
|
1442
|
-
return this
|
|
1594
|
+
return this.Di;
|
|
1443
1595
|
}
|
|
1444
1596
|
get textureRows() {
|
|
1445
|
-
return this.
|
|
1597
|
+
return this.Li;
|
|
1446
1598
|
}
|
|
1447
1599
|
get maxGlyphDimensions() {
|
|
1448
|
-
return this.
|
|
1600
|
+
return this.ki;
|
|
1449
1601
|
}
|
|
1450
1602
|
get fontSize() {
|
|
1451
|
-
return this.
|
|
1603
|
+
return this.Gi;
|
|
1452
1604
|
}
|
|
1453
1605
|
get font() {
|
|
1454
|
-
return this.
|
|
1606
|
+
return this.Si;
|
|
1455
1607
|
}
|
|
1456
1608
|
}
|
|
1457
|
-
class
|
|
1458
|
-
constructor(
|
|
1459
|
-
|
|
1460
|
-
|
|
1461
|
-
|
|
1462
|
-
|
|
1463
|
-
|
|
1464
|
-
|
|
1465
|
-
|
|
1466
|
-
|
|
1467
|
-
|
|
1468
|
-
this.
|
|
1469
|
-
}
|
|
1470
|
-
|
|
1471
|
-
this.
|
|
1472
|
-
}
|
|
1473
|
-
|
|
1474
|
-
this.
|
|
1609
|
+
class Ht {
|
|
1610
|
+
constructor(t, e, i) {
|
|
1611
|
+
h(this, "qi");
|
|
1612
|
+
h(this, "Zi");
|
|
1613
|
+
h(this, "dt");
|
|
1614
|
+
h(this, "gt");
|
|
1615
|
+
h(this, "Qi");
|
|
1616
|
+
h(this, "Ji");
|
|
1617
|
+
h(this, "tr");
|
|
1618
|
+
h(this, "er");
|
|
1619
|
+
h(this, "sr");
|
|
1620
|
+
this.tr = t, this.er = e, this.sr = i, this.ir();
|
|
1621
|
+
}
|
|
1622
|
+
ir() {
|
|
1623
|
+
this.qi = Math.floor(this.tr.width / this.er), this.Zi = Math.floor(this.tr.height / this.sr), this.dt = this.qi * this.er, this.gt = this.Zi * this.sr, this.Qi = Math.floor((this.tr.width - this.dt) / 2), this.Ji = Math.floor((this.tr.height - this.gt) / 2);
|
|
1624
|
+
}
|
|
1625
|
+
rr(t, e) {
|
|
1626
|
+
this.er = t, this.sr = e, this.ir();
|
|
1475
1627
|
}
|
|
1476
1628
|
get cellWidth() {
|
|
1477
|
-
return this.
|
|
1629
|
+
return this.er;
|
|
1478
1630
|
}
|
|
1479
1631
|
get cellHeight() {
|
|
1480
|
-
return this.
|
|
1632
|
+
return this.sr;
|
|
1481
1633
|
}
|
|
1482
1634
|
get cols() {
|
|
1483
|
-
return this.
|
|
1635
|
+
return this.qi;
|
|
1484
1636
|
}
|
|
1485
1637
|
get rows() {
|
|
1486
|
-
return this.
|
|
1638
|
+
return this.Zi;
|
|
1487
1639
|
}
|
|
1488
1640
|
get width() {
|
|
1489
|
-
return this.
|
|
1641
|
+
return this.dt;
|
|
1490
1642
|
}
|
|
1491
1643
|
get height() {
|
|
1492
|
-
return this.
|
|
1644
|
+
return this.gt;
|
|
1493
1645
|
}
|
|
1494
1646
|
get offsetX() {
|
|
1495
|
-
return this.
|
|
1647
|
+
return this.Qi;
|
|
1496
1648
|
}
|
|
1497
1649
|
get offsetY() {
|
|
1498
|
-
return this.
|
|
1650
|
+
return this.Ji;
|
|
1499
1651
|
}
|
|
1500
1652
|
}
|
|
1501
|
-
class
|
|
1502
|
-
constructor(
|
|
1503
|
-
|
|
1504
|
-
|
|
1505
|
-
|
|
1506
|
-
|
|
1507
|
-
|
|
1508
|
-
|
|
1509
|
-
|
|
1510
|
-
|
|
1511
|
-
|
|
1512
|
-
|
|
1513
|
-
|
|
1514
|
-
|
|
1515
|
-
|
|
1516
|
-
|
|
1517
|
-
|
|
1518
|
-
|
|
1519
|
-
|
|
1520
|
-
|
|
1521
|
-
|
|
1522
|
-
const A = this.Vs.getContext("webgl") || this.Vs.getContext("webgl2");
|
|
1523
|
-
if (A) {
|
|
1524
|
-
const t = A.getExtension("WEBGL_lose_context");
|
|
1525
|
-
t && t.loseContext();
|
|
1653
|
+
class kt {
|
|
1654
|
+
constructor(t = {}) {
|
|
1655
|
+
h(this, "tr");
|
|
1656
|
+
h(this, "nr", null);
|
|
1657
|
+
h(this, "ar", !1);
|
|
1658
|
+
h(this, "hr");
|
|
1659
|
+
h(this, "cr");
|
|
1660
|
+
this.ar = t.overlay ?? !1, this.ar && t.canvas ? (this.nr = t.canvas, this.tr = this.lr(), this.cr = !0, this.ur()) : t.canvas ? (this.tr = t.canvas, this.cr = !1) : (this.tr = this.dr(t.width, t.height), this.cr = !0), this.tr.style.imageRendering = "pixelated";
|
|
1661
|
+
}
|
|
1662
|
+
dr(t, e) {
|
|
1663
|
+
const i = document.createElement("canvas");
|
|
1664
|
+
return i.className = "textmodeCanvas", i.style.imageRendering = "pixelated", i.width = t || 800, i.height = e || 600, document.body.appendChild(i), i;
|
|
1665
|
+
}
|
|
1666
|
+
lr() {
|
|
1667
|
+
const t = document.createElement("canvas");
|
|
1668
|
+
t.className = "textmodeCanvas", t.style.imageRendering = "pixelated";
|
|
1669
|
+
const e = this.nr.getBoundingClientRect();
|
|
1670
|
+
let i = Math.round(e.width), s = Math.round(e.height);
|
|
1671
|
+
if (this.nr instanceof HTMLVideoElement) {
|
|
1672
|
+
const o = this.nr;
|
|
1673
|
+
(i === 0 || s === 0) && o.videoWidth > 0 && o.videoHeight > 0 && (i = o.videoWidth, s = o.videoHeight);
|
|
1526
1674
|
}
|
|
1527
|
-
|
|
1675
|
+
t.width = i, t.height = s, t.style.position = "absolute", t.style.pointerEvents = "none";
|
|
1676
|
+
const r = window.getComputedStyle(this.nr);
|
|
1677
|
+
let n = parseInt(r.zIndex || "0", 10);
|
|
1678
|
+
return isNaN(n) && (n = 0), t.style.zIndex = "" + (n + 1), t;
|
|
1679
|
+
}
|
|
1680
|
+
ur() {
|
|
1681
|
+
var t;
|
|
1682
|
+
this.pr(), (t = this.nr.parentNode) == null || t.insertBefore(this.tr, this.nr.nextSibling), window.ResizeObserver && (this.hr = new ResizeObserver(() => {
|
|
1683
|
+
this.mr();
|
|
1684
|
+
}), this.hr.observe(this.nr)), window.addEventListener("resize", () => {
|
|
1685
|
+
this.mr();
|
|
1686
|
+
});
|
|
1687
|
+
}
|
|
1688
|
+
pr() {
|
|
1689
|
+
if (!this.nr) return;
|
|
1690
|
+
const t = this.nr.getBoundingClientRect();
|
|
1691
|
+
let e = this.nr.offsetParent;
|
|
1692
|
+
if (e && e !== document.body) {
|
|
1693
|
+
const i = e.getBoundingClientRect();
|
|
1694
|
+
this.tr.style.top = t.top - i.top + "px", this.tr.style.left = t.left - i.left + "px";
|
|
1695
|
+
} else this.tr.style.top = t.top + window.scrollY + "px", this.tr.style.left = t.left + window.scrollX + "px";
|
|
1696
|
+
}
|
|
1697
|
+
mr(t, e) {
|
|
1698
|
+
if (this.ar) {
|
|
1699
|
+
const i = this.nr.getBoundingClientRect();
|
|
1700
|
+
let s = Math.round(i.width), r = Math.round(i.height);
|
|
1701
|
+
if (this.nr instanceof HTMLVideoElement) {
|
|
1702
|
+
const n = this.nr;
|
|
1703
|
+
(s === 0 || r === 0) && n.videoWidth > 0 && n.videoHeight > 0 && (s = n.videoWidth, r = n.videoHeight);
|
|
1704
|
+
}
|
|
1705
|
+
this.tr.width = s, this.tr.height = r, this.pr();
|
|
1706
|
+
} else this.tr.width = t ?? this.tr.width, this.tr.height = e ?? this.tr.height;
|
|
1707
|
+
}
|
|
1708
|
+
gr() {
|
|
1709
|
+
const t = this.tr.getContext("webgl2", { alpha: !0, premultipliedAlpha: !1, preserveDrawingBuffer: !0, antialias: !1, depth: !1, stencil: !1, powerPreference: "high-performance" });
|
|
1710
|
+
if (!t) throw new U("`textmode.js` requires WebGL2 support.");
|
|
1711
|
+
return t;
|
|
1712
|
+
}
|
|
1713
|
+
Gt() {
|
|
1714
|
+
this.hr && this.hr.disconnect();
|
|
1715
|
+
const t = this.tr.getContext("webgl") || this.tr.getContext("webgl2");
|
|
1716
|
+
if (t) {
|
|
1717
|
+
const e = t.getExtension("WEBGL_lose_context");
|
|
1718
|
+
e && e.loseContext();
|
|
1719
|
+
}
|
|
1720
|
+
this.cr && this.tr.parentNode && this.tr.parentNode.removeChild(this.tr);
|
|
1528
1721
|
}
|
|
1529
1722
|
get canvas() {
|
|
1530
|
-
return this.
|
|
1723
|
+
return this.tr;
|
|
1724
|
+
}
|
|
1725
|
+
get targetCanvas() {
|
|
1726
|
+
return this.nr;
|
|
1531
1727
|
}
|
|
1532
1728
|
get width() {
|
|
1533
|
-
return this.
|
|
1729
|
+
return this.tr.width;
|
|
1534
1730
|
}
|
|
1535
1731
|
get height() {
|
|
1536
|
-
return this.
|
|
1732
|
+
return this.tr.height;
|
|
1537
1733
|
}
|
|
1538
1734
|
}
|
|
1539
|
-
class
|
|
1540
|
-
constructor(
|
|
1541
|
-
|
|
1542
|
-
|
|
1543
|
-
|
|
1544
|
-
|
|
1545
|
-
|
|
1546
|
-
|
|
1547
|
-
|
|
1548
|
-
|
|
1549
|
-
|
|
1550
|
-
|
|
1551
|
-
this
|
|
1552
|
-
|
|
1553
|
-
|
|
1554
|
-
|
|
1555
|
-
this
|
|
1556
|
-
|
|
1557
|
-
|
|
1558
|
-
|
|
1559
|
-
|
|
1735
|
+
class z {
|
|
1736
|
+
constructor(t, e, i, s) {
|
|
1737
|
+
h(this, "texture");
|
|
1738
|
+
h(this, "width");
|
|
1739
|
+
h(this, "height");
|
|
1740
|
+
h(this, "vt");
|
|
1741
|
+
h(this, "D", 0);
|
|
1742
|
+
h(this, "V", 0);
|
|
1743
|
+
h(this, "K", 0);
|
|
1744
|
+
h(this, "L", [0, 0]);
|
|
1745
|
+
h(this, "_r", "sampled");
|
|
1746
|
+
h(this, "vr", "fixed");
|
|
1747
|
+
h(this, "Y", [1, 1, 1]);
|
|
1748
|
+
h(this, "q", [0, 0, 0]);
|
|
1749
|
+
h(this, "yr", [0, 0, 0, 1]);
|
|
1750
|
+
h(this, "Ar", [[0.1, 0, 0]]);
|
|
1751
|
+
h(this, "wr");
|
|
1752
|
+
this.vt = t, this.texture = e, this.width = i, this.height = s;
|
|
1753
|
+
}
|
|
1754
|
+
Gt() {
|
|
1755
|
+
this.vt.deleteTexture(this.texture);
|
|
1756
|
+
}
|
|
1757
|
+
Cr(t) {
|
|
1758
|
+
return typeof t == "boolean" ? t ? 1 : 0 : (t == null ? 0 : Number(t)) > 0 ? 1 : 0;
|
|
1759
|
+
}
|
|
1760
|
+
invert(t = !0) {
|
|
1761
|
+
return this.D = this.Cr(t), this;
|
|
1762
|
+
}
|
|
1763
|
+
flipX(t = !0) {
|
|
1764
|
+
return this.V = this.Cr(t), this;
|
|
1765
|
+
}
|
|
1766
|
+
flipY(t = !0) {
|
|
1767
|
+
return this.K = this.Cr(t), this;
|
|
1768
|
+
}
|
|
1769
|
+
charRotation(t) {
|
|
1770
|
+
const e = 255 * t / 360, i = Math.floor(e) / 255, s = Math.round(e - Math.floor(e));
|
|
1771
|
+
return this.L = [i, s], this;
|
|
1772
|
+
}
|
|
1773
|
+
get flags() {
|
|
1774
|
+
return { invert: this.D, flipX: this.V, flipY: this.K };
|
|
1775
|
+
}
|
|
1776
|
+
get charRotationRG() {
|
|
1777
|
+
return this.L;
|
|
1778
|
+
}
|
|
1779
|
+
charColorMode(t) {
|
|
1780
|
+
return this._r = t, this;
|
|
1781
|
+
}
|
|
1782
|
+
cellColorMode(t) {
|
|
1783
|
+
return this.vr = t, this;
|
|
1784
|
+
}
|
|
1785
|
+
charColor(t, e, i) {
|
|
1786
|
+
return this.Y = [(t ?? 0) / 255, (e ?? t ?? 0) / 255, (i ?? t ?? 0) / 255], this;
|
|
1787
|
+
}
|
|
1788
|
+
cellColor(t, e, i) {
|
|
1789
|
+
return this.q = [(t ?? 0) / 255, (e ?? t ?? 0) / 255, (i ?? t ?? 0) / 255], this;
|
|
1790
|
+
}
|
|
1791
|
+
background(t, e, i, s) {
|
|
1792
|
+
return this.yr = [(t ?? 0) / 255, (e ?? t ?? 0) / 255, (i ?? t ?? 0) / 255, (s ?? 255) / 255], this;
|
|
1793
|
+
}
|
|
1794
|
+
charactersFromColors(t) {
|
|
1795
|
+
const e = t.filter((i) => Array.isArray(i)).slice(0, 64);
|
|
1796
|
+
return this.Ar = e, this;
|
|
1797
|
+
}
|
|
1798
|
+
characters(t) {
|
|
1799
|
+
const e = this.wr(t);
|
|
1800
|
+
return this.charactersFromColors(e), this;
|
|
1801
|
+
}
|
|
1802
|
+
get characterListUniforms() {
|
|
1803
|
+
return { count: this.Ar.length, list: this.Ar };
|
|
1804
|
+
}
|
|
1805
|
+
get colorUniforms() {
|
|
1806
|
+
return { charColorFixed: this._r === "fixed", Y: this.Y, cellColorFixed: this.vr === "fixed", cellColor: this.q, backgroundColor: this.yr };
|
|
1807
|
+
}
|
|
1808
|
+
static fromSource(t, e, i) {
|
|
1809
|
+
const s = t.context, r = s.createTexture();
|
|
1810
|
+
s.bindTexture(s.TEXTURE_2D, r), s.pixelStorei(s.UNPACK_FLIP_Y_WEBGL, 1), s.texParameteri(s.TEXTURE_2D, s.TEXTURE_MIN_FILTER, s.NEAREST), s.texParameteri(s.TEXTURE_2D, s.TEXTURE_MAG_FILTER, s.NEAREST), s.texParameteri(s.TEXTURE_2D, s.TEXTURE_WRAP_S, s.CLAMP_TO_EDGE), s.texParameteri(s.TEXTURE_2D, s.TEXTURE_WRAP_T, s.CLAMP_TO_EDGE), s.texImage2D(s.TEXTURE_2D, 0, s.RGBA, s.RGBA, s.UNSIGNED_BYTE, e), s.bindTexture(s.TEXTURE_2D, null);
|
|
1811
|
+
const n = e.naturalWidth ?? e.width ?? e.videoWidth ?? 0, o = e.naturalHeight ?? e.height ?? e.videoHeight ?? 0, c = new z(s, r, n, o);
|
|
1812
|
+
return c.wr = i, c;
|
|
1813
|
+
}
|
|
1814
|
+
}
|
|
1815
|
+
class Yt {
|
|
1816
|
+
constructor(t = 60) {
|
|
1817
|
+
h(this, "br");
|
|
1818
|
+
h(this, "$r");
|
|
1819
|
+
h(this, "Mr", null);
|
|
1820
|
+
h(this, "Fr", 0);
|
|
1821
|
+
h(this, "Rr", !0);
|
|
1822
|
+
h(this, "zr", 0);
|
|
1823
|
+
h(this, "Pr", 0);
|
|
1824
|
+
h(this, "Tr", []);
|
|
1825
|
+
h(this, "Sr", 10);
|
|
1826
|
+
h(this, "Er", 0);
|
|
1827
|
+
this.br = t, this.$r = 1e3 / t;
|
|
1828
|
+
}
|
|
1829
|
+
start(t) {
|
|
1830
|
+
if (!this.Rr) return;
|
|
1831
|
+
this.Fr = performance.now();
|
|
1832
|
+
const e = (i) => {
|
|
1833
|
+
if (!this.Rr) return void (this.Mr = null);
|
|
1834
|
+
const s = i - this.Fr;
|
|
1835
|
+
s >= this.$r && (t(), this.Fr = i - s % this.$r), this.Rr && (this.Mr = requestAnimationFrame(e));
|
|
1560
1836
|
};
|
|
1561
|
-
this.
|
|
1837
|
+
this.Mr = requestAnimationFrame(e);
|
|
1562
1838
|
}
|
|
1563
1839
|
stop() {
|
|
1564
|
-
this.
|
|
1840
|
+
this.Mr && (cancelAnimationFrame(this.Mr), this.Mr = null);
|
|
1565
1841
|
}
|
|
1566
1842
|
pause() {
|
|
1567
|
-
this.
|
|
1843
|
+
this.Rr && (this.Rr = !1, this.stop());
|
|
1568
1844
|
}
|
|
1569
|
-
resume(
|
|
1570
|
-
this.
|
|
1845
|
+
resume(t) {
|
|
1846
|
+
this.Rr || (this.Rr = !0, this.start(t));
|
|
1571
1847
|
}
|
|
1572
|
-
frameRate(
|
|
1573
|
-
if (
|
|
1574
|
-
this.
|
|
1848
|
+
frameRate(t, e) {
|
|
1849
|
+
if (t === void 0) return this.zr;
|
|
1850
|
+
this.br = t, this.$r = 1e3 / t, this.Rr && e && (this.stop(), this.start(e));
|
|
1575
1851
|
}
|
|
1576
1852
|
measureFrameRate() {
|
|
1577
|
-
const
|
|
1578
|
-
if (this.
|
|
1579
|
-
const
|
|
1580
|
-
this.
|
|
1581
|
-
const
|
|
1582
|
-
this.
|
|
1853
|
+
const t = performance.now();
|
|
1854
|
+
if (this.Pr > 0) {
|
|
1855
|
+
const e = t - this.Pr;
|
|
1856
|
+
this.Tr.push(e), this.Tr.length > this.Sr && this.Tr.shift();
|
|
1857
|
+
const i = this.Tr.reduce((s, r) => s + r, 0) / this.Tr.length;
|
|
1858
|
+
this.zr = 1e3 / i;
|
|
1583
1859
|
}
|
|
1584
|
-
this.
|
|
1860
|
+
this.Pr = t;
|
|
1585
1861
|
}
|
|
1586
1862
|
get isLooping() {
|
|
1587
|
-
return this.
|
|
1863
|
+
return this.Rr;
|
|
1588
1864
|
}
|
|
1589
1865
|
get frameRateLimit() {
|
|
1590
|
-
return this.
|
|
1866
|
+
return this.br;
|
|
1591
1867
|
}
|
|
1592
1868
|
get currentFrameRate() {
|
|
1593
|
-
return this.
|
|
1869
|
+
return this.zr;
|
|
1594
1870
|
}
|
|
1595
1871
|
get frameCount() {
|
|
1596
|
-
return this.
|
|
1872
|
+
return this.Er;
|
|
1597
1873
|
}
|
|
1598
|
-
set frameCount(
|
|
1599
|
-
this.
|
|
1874
|
+
set frameCount(t) {
|
|
1875
|
+
this.Er = t;
|
|
1600
1876
|
}
|
|
1601
1877
|
incrementFrame() {
|
|
1602
|
-
this.
|
|
1878
|
+
this.Er++;
|
|
1603
1879
|
}
|
|
1604
1880
|
resetFrameCount() {
|
|
1605
|
-
this.
|
|
1881
|
+
this.Er = 0;
|
|
1606
1882
|
}
|
|
1607
1883
|
}
|
|
1608
|
-
class
|
|
1884
|
+
class Vt {
|
|
1609
1885
|
constructor() {
|
|
1610
|
-
|
|
1611
|
-
|
|
1612
|
-
|
|
1613
|
-
|
|
1614
|
-
|
|
1615
|
-
|
|
1616
|
-
|
|
1617
|
-
|
|
1618
|
-
|
|
1619
|
-
}
|
|
1620
|
-
|
|
1621
|
-
this.
|
|
1622
|
-
this.
|
|
1623
|
-
}, this.
|
|
1624
|
-
this.
|
|
1625
|
-
}, window.addEventListener("keydown", this.
|
|
1626
|
-
}
|
|
1627
|
-
|
|
1628
|
-
this.
|
|
1629
|
-
}
|
|
1630
|
-
|
|
1631
|
-
this.
|
|
1632
|
-
}
|
|
1633
|
-
|
|
1634
|
-
this.
|
|
1635
|
-
}
|
|
1636
|
-
|
|
1637
|
-
const
|
|
1638
|
-
return (
|
|
1639
|
-
}
|
|
1640
|
-
|
|
1641
|
-
return this.
|
|
1642
|
-
}
|
|
1643
|
-
|
|
1644
|
-
return this.
|
|
1645
|
-
}
|
|
1646
|
-
|
|
1647
|
-
const
|
|
1648
|
-
for (const [
|
|
1649
|
-
return
|
|
1886
|
+
h(this, "Br", /* @__PURE__ */ new Map());
|
|
1887
|
+
h(this, "Gr", null);
|
|
1888
|
+
h(this, "Dr", null);
|
|
1889
|
+
h(this, "Lr");
|
|
1890
|
+
h(this, "kr");
|
|
1891
|
+
h(this, "Or", !1);
|
|
1892
|
+
h(this, "Hr");
|
|
1893
|
+
h(this, "Ir");
|
|
1894
|
+
h(this, "Nr", { ArrowUp: "UP_ARROW", ArrowDown: "DOWN_ARROW", ArrowLeft: "LEFT_ARROW", ArrowRight: "RIGHT_ARROW", F1: "F1", F2: "F2", F3: "F3", F4: "F4", F5: "F5", F6: "F6", F7: "F7", F8: "F8", F9: "F9", F10: "F10", F11: "F11", F12: "F12", Enter: "ENTER", Return: "RETURN", Tab: "TAB", Escape: "ESCAPE", Backspace: "BACKSPACE", Delete: "DELETE", Insert: "INSERT", Home: "HOME", End: "END", PageUp: "PAGE_UP", PageDown: "PAGE_DOWN", Shift: "SHIFT", Control: "CONTROL", Alt: "ALT", Meta: "META", " ": "SPACE" });
|
|
1895
|
+
}
|
|
1896
|
+
Xr() {
|
|
1897
|
+
this.Or || (this.Lr = (t) => {
|
|
1898
|
+
this.Wr(t);
|
|
1899
|
+
}, this.kr = (t) => {
|
|
1900
|
+
this.Vr(t);
|
|
1901
|
+
}, window.addEventListener("keydown", this.Lr, { passive: !1 }), window.addEventListener("keyup", this.kr, { passive: !1 }), this.Or = !0);
|
|
1902
|
+
}
|
|
1903
|
+
Kr() {
|
|
1904
|
+
this.Or && (window.removeEventListener("keydown", this.Lr), window.removeEventListener("keyup", this.kr), this.Or = !1, this.Br.clear(), this.Gr = null, this.Dr = null);
|
|
1905
|
+
}
|
|
1906
|
+
jr(t) {
|
|
1907
|
+
this.Hr = t;
|
|
1908
|
+
}
|
|
1909
|
+
Yr(t) {
|
|
1910
|
+
this.Ir = t;
|
|
1911
|
+
}
|
|
1912
|
+
qr(t) {
|
|
1913
|
+
const e = this.Zr(t), i = this.Br.get(t) || this.Br.get(e);
|
|
1914
|
+
return (i == null ? void 0 : i.isPressed) || !1;
|
|
1915
|
+
}
|
|
1916
|
+
Qr() {
|
|
1917
|
+
return this.Gr;
|
|
1918
|
+
}
|
|
1919
|
+
Jr() {
|
|
1920
|
+
return this.Dr;
|
|
1921
|
+
}
|
|
1922
|
+
tn() {
|
|
1923
|
+
const t = [];
|
|
1924
|
+
for (const [e, i] of this.Br) i.isPressed && t.push(e);
|
|
1925
|
+
return t;
|
|
1650
1926
|
}
|
|
1651
|
-
|
|
1652
|
-
return { ctrl: this.
|
|
1927
|
+
en() {
|
|
1928
|
+
return { ctrl: this.qr("Control"), shift: this.qr("Shift"), alt: this.qr("Alt"), meta: this.qr("Meta") };
|
|
1653
1929
|
}
|
|
1654
|
-
|
|
1655
|
-
this.
|
|
1930
|
+
sn() {
|
|
1931
|
+
this.Br.clear(), this.Gr = null, this.Dr = null;
|
|
1656
1932
|
}
|
|
1657
|
-
|
|
1658
|
-
const
|
|
1659
|
-
this.
|
|
1660
|
-
const s = this.
|
|
1661
|
-
if (!s.isPressed && (s.isPressed = !0, s.lastPressTime =
|
|
1662
|
-
const
|
|
1663
|
-
this.
|
|
1933
|
+
Wr(t) {
|
|
1934
|
+
const e = t.key, i = Date.now();
|
|
1935
|
+
this.Br.has(e) || this.Br.set(e, { isPressed: !1, lastPressTime: 0, lastReleaseTime: 0 });
|
|
1936
|
+
const s = this.Br.get(e);
|
|
1937
|
+
if (!s.isPressed && (s.isPressed = !0, s.lastPressTime = i, this.Gr = e, this.Hr)) {
|
|
1938
|
+
const r = { key: e, keyCode: t.keyCode, ctrlKey: t.ctrlKey, shiftKey: t.shiftKey, altKey: t.altKey, metaKey: t.metaKey, isPressed: !0, originalEvent: t };
|
|
1939
|
+
this.Hr(r);
|
|
1664
1940
|
}
|
|
1665
1941
|
}
|
|
1666
|
-
|
|
1667
|
-
const
|
|
1668
|
-
this.
|
|
1669
|
-
const s = this.
|
|
1670
|
-
if (s.isPressed = !1, s.lastReleaseTime =
|
|
1671
|
-
const
|
|
1672
|
-
this.
|
|
1942
|
+
Vr(t) {
|
|
1943
|
+
const e = t.key, i = Date.now();
|
|
1944
|
+
this.Br.has(e) || this.Br.set(e, { isPressed: !1, lastPressTime: 0, lastReleaseTime: 0 });
|
|
1945
|
+
const s = this.Br.get(e);
|
|
1946
|
+
if (s.isPressed = !1, s.lastReleaseTime = i, this.Dr = e, this.Ir) {
|
|
1947
|
+
const r = { key: e, keyCode: t.keyCode, ctrlKey: t.ctrlKey, shiftKey: t.shiftKey, altKey: t.altKey, metaKey: t.metaKey, isPressed: !1, originalEvent: t };
|
|
1948
|
+
this.Ir(r);
|
|
1673
1949
|
}
|
|
1674
1950
|
}
|
|
1675
|
-
|
|
1676
|
-
return this.
|
|
1951
|
+
Zr(t) {
|
|
1952
|
+
return this.Nr[t] || t.toLowerCase();
|
|
1677
1953
|
}
|
|
1678
1954
|
}
|
|
1679
|
-
class
|
|
1680
|
-
constructor(
|
|
1681
|
-
|
|
1682
|
-
|
|
1683
|
-
|
|
1684
|
-
|
|
1685
|
-
|
|
1686
|
-
|
|
1687
|
-
|
|
1688
|
-
|
|
1689
|
-
|
|
1690
|
-
|
|
1691
|
-
|
|
1692
|
-
|
|
1693
|
-
|
|
1694
|
-
|
|
1695
|
-
|
|
1696
|
-
|
|
1697
|
-
|
|
1698
|
-
this.
|
|
1699
|
-
}
|
|
1700
|
-
|
|
1701
|
-
this.
|
|
1702
|
-
}
|
|
1703
|
-
|
|
1704
|
-
if (this.
|
|
1705
|
-
const
|
|
1706
|
-
this.
|
|
1707
|
-
this.
|
|
1708
|
-
}, this.
|
|
1709
|
-
this.
|
|
1710
|
-
}, this.
|
|
1711
|
-
this.
|
|
1712
|
-
}, this.
|
|
1713
|
-
this.
|
|
1714
|
-
}, this.
|
|
1715
|
-
this.
|
|
1716
|
-
}, this.
|
|
1717
|
-
this.
|
|
1718
|
-
},
|
|
1719
|
-
}
|
|
1720
|
-
|
|
1721
|
-
if (!this.
|
|
1722
|
-
const
|
|
1723
|
-
|
|
1724
|
-
}
|
|
1725
|
-
|
|
1726
|
-
if (this.
|
|
1727
|
-
if (this.
|
|
1728
|
-
const
|
|
1729
|
-
this.
|
|
1730
|
-
} else this.
|
|
1955
|
+
class jt {
|
|
1956
|
+
constructor(t) {
|
|
1957
|
+
h(this, "tr");
|
|
1958
|
+
h(this, "rn");
|
|
1959
|
+
h(this, "nn", { x: -1, y: -1 });
|
|
1960
|
+
h(this, "an", { x: -1, y: -1 });
|
|
1961
|
+
h(this, "hn", null);
|
|
1962
|
+
h(this, "cn");
|
|
1963
|
+
h(this, "ln");
|
|
1964
|
+
h(this, "un");
|
|
1965
|
+
h(this, "fn");
|
|
1966
|
+
h(this, "dn");
|
|
1967
|
+
h(this, "pn");
|
|
1968
|
+
h(this, "Or", !1);
|
|
1969
|
+
h(this, "mn");
|
|
1970
|
+
h(this, "gn");
|
|
1971
|
+
h(this, "_n");
|
|
1972
|
+
h(this, "vn");
|
|
1973
|
+
h(this, "yn");
|
|
1974
|
+
this.tr = t;
|
|
1975
|
+
}
|
|
1976
|
+
Wi(t) {
|
|
1977
|
+
this.rn = t, this.An();
|
|
1978
|
+
}
|
|
1979
|
+
Xr() {
|
|
1980
|
+
if (this.Or) return;
|
|
1981
|
+
const t = this.tr.canvas;
|
|
1982
|
+
this.cn = (e) => {
|
|
1983
|
+
this.wn(e), this.Cn(e);
|
|
1984
|
+
}, this.ln = () => {
|
|
1985
|
+
this.an = { ...this.nn }, this.nn.x = -1, this.nn.y = -1, this.hn = null;
|
|
1986
|
+
}, this.un = (e) => {
|
|
1987
|
+
this.wn(e), this.bn(e);
|
|
1988
|
+
}, this.fn = (e) => {
|
|
1989
|
+
this.wn(e), this.xn(e);
|
|
1990
|
+
}, this.dn = (e) => {
|
|
1991
|
+
this.wn(e), this.$n(e);
|
|
1992
|
+
}, this.pn = (e) => {
|
|
1993
|
+
this.wn(e), this.Mn(e);
|
|
1994
|
+
}, t.addEventListener("mousemove", this.cn, { passive: !0 }), t.addEventListener("mouseleave", this.ln, { passive: !0 }), t.addEventListener("mousedown", this.un, { passive: !0 }), t.addEventListener("mouseup", this.fn, { passive: !0 }), t.addEventListener("click", this.dn, { passive: !0 }), t.addEventListener("wheel", this.pn, { passive: !1 }), this.Or = !0;
|
|
1995
|
+
}
|
|
1996
|
+
Kr() {
|
|
1997
|
+
if (!this.Or) return;
|
|
1998
|
+
const t = this.tr.canvas;
|
|
1999
|
+
t.removeEventListener("mousemove", this.cn), t.removeEventListener("mouseleave", this.ln), t.removeEventListener("mousedown", this.un), t.removeEventListener("mouseup", this.fn), t.removeEventListener("click", this.dn), t.removeEventListener("wheel", this.pn), this.Or = !1;
|
|
2000
|
+
}
|
|
2001
|
+
An() {
|
|
2002
|
+
if (this.Or) try {
|
|
2003
|
+
if (this.hn) {
|
|
2004
|
+
const t = new MouseEvent("mousemove", { clientX: this.hn.x, clientY: this.hn.y, bubbles: !1, cancelable: !1 });
|
|
2005
|
+
this.wn(t);
|
|
2006
|
+
} else this.nn.x !== -1 && this.nn.y !== -1 && (this.nn.x >= this.rn.cols || this.nn.y >= this.rn.rows) && (this.nn.x = -1, this.nn.y = -1);
|
|
1731
2007
|
} catch {
|
|
1732
|
-
this.
|
|
2008
|
+
this.nn.x = -1, this.nn.y = -1;
|
|
1733
2009
|
}
|
|
1734
2010
|
}
|
|
1735
|
-
|
|
1736
|
-
this.
|
|
2011
|
+
Fn(t) {
|
|
2012
|
+
this.mn = t;
|
|
1737
2013
|
}
|
|
1738
|
-
|
|
1739
|
-
this.
|
|
2014
|
+
jr(t) {
|
|
2015
|
+
this.gn = t;
|
|
1740
2016
|
}
|
|
1741
|
-
|
|
1742
|
-
this.
|
|
2017
|
+
Yr(t) {
|
|
2018
|
+
this._n = t;
|
|
1743
2019
|
}
|
|
1744
|
-
|
|
1745
|
-
this.
|
|
2020
|
+
Rn(t) {
|
|
2021
|
+
this.vn = t;
|
|
1746
2022
|
}
|
|
1747
|
-
|
|
1748
|
-
this.
|
|
2023
|
+
zn(t) {
|
|
2024
|
+
this.yn = t;
|
|
1749
2025
|
}
|
|
1750
|
-
|
|
1751
|
-
return { x: this.
|
|
2026
|
+
Pn() {
|
|
2027
|
+
return { x: this.nn.x, y: this.nn.y };
|
|
1752
2028
|
}
|
|
1753
|
-
|
|
1754
|
-
if (this.
|
|
1755
|
-
const
|
|
1756
|
-
this.
|
|
2029
|
+
Cn(t) {
|
|
2030
|
+
if (this.vn) {
|
|
2031
|
+
const e = { position: { ...this.nn }, previousPosition: { ...this.an }, originalEvent: t };
|
|
2032
|
+
this.vn(e);
|
|
1757
2033
|
}
|
|
1758
2034
|
}
|
|
1759
|
-
|
|
1760
|
-
if (this.
|
|
1761
|
-
const
|
|
1762
|
-
this.
|
|
2035
|
+
bn(t) {
|
|
2036
|
+
if (this.gn) {
|
|
2037
|
+
const e = { position: { ...this.nn }, previousPosition: { ...this.an }, button: t.button, originalEvent: t };
|
|
2038
|
+
this.gn(e);
|
|
1763
2039
|
}
|
|
1764
2040
|
}
|
|
1765
|
-
|
|
1766
|
-
if (this.
|
|
1767
|
-
const
|
|
1768
|
-
this.
|
|
2041
|
+
xn(t) {
|
|
2042
|
+
if (this._n) {
|
|
2043
|
+
const e = { position: { ...this.nn }, previousPosition: { ...this.an }, button: t.button, originalEvent: t };
|
|
2044
|
+
this._n(e);
|
|
1769
2045
|
}
|
|
1770
2046
|
}
|
|
1771
|
-
|
|
1772
|
-
if (this.
|
|
1773
|
-
const
|
|
1774
|
-
this.
|
|
2047
|
+
$n(t) {
|
|
2048
|
+
if (this.mn) {
|
|
2049
|
+
const e = { position: { ...this.nn }, previousPosition: { ...this.an }, button: t.button, originalEvent: t };
|
|
2050
|
+
this.mn(e);
|
|
1775
2051
|
}
|
|
1776
2052
|
}
|
|
1777
|
-
|
|
1778
|
-
if (this.
|
|
1779
|
-
const
|
|
1780
|
-
this.
|
|
2053
|
+
Mn(t) {
|
|
2054
|
+
if (this.yn) {
|
|
2055
|
+
const e = { position: { ...this.nn }, previousPosition: { ...this.an }, delta: { x: t.deltaX, y: t.deltaY }, originalEvent: t };
|
|
2056
|
+
this.yn(e);
|
|
1781
2057
|
}
|
|
1782
2058
|
}
|
|
1783
|
-
|
|
1784
|
-
const
|
|
1785
|
-
this.
|
|
1786
|
-
const
|
|
1787
|
-
|
|
2059
|
+
wn(t) {
|
|
2060
|
+
const e = this.tr.canvas;
|
|
2061
|
+
this.an = { ...this.nn }, this.hn = { x: t.clientX, y: t.clientY };
|
|
2062
|
+
const i = e.getBoundingClientRect(), s = t.clientX - i.left, r = t.clientY - i.top, n = e.width / i.width, o = r * (e.height / i.height), c = s * n - this.rn.offsetX, l = o - this.rn.offsetY, f = Math.floor(c / this.rn.cellWidth), u = Math.floor(l / this.rn.cellHeight);
|
|
2063
|
+
f >= 0 && f < this.rn.cols && u >= 0 && u < this.rn.rows ? (this.nn.x = f, this.nn.y = u) : (this.nn.x = -1, this.nn.y = -1);
|
|
1788
2064
|
}
|
|
1789
2065
|
}
|
|
1790
|
-
const
|
|
1791
|
-
rotate(
|
|
1792
|
-
this.
|
|
2066
|
+
const Kt = (a) => class extends a {
|
|
2067
|
+
rotate(t = 0, e = 0, i = 0) {
|
|
2068
|
+
this.xt.state.et(t), this.xt.state.st(e), this.xt.state.it(i);
|
|
1793
2069
|
}
|
|
1794
|
-
rotateX(
|
|
1795
|
-
this.
|
|
2070
|
+
rotateX(t) {
|
|
2071
|
+
this.xt.state.et(t);
|
|
1796
2072
|
}
|
|
1797
|
-
rotateY(
|
|
1798
|
-
this.
|
|
2073
|
+
rotateY(t) {
|
|
2074
|
+
this.xt.state.st(t);
|
|
1799
2075
|
}
|
|
1800
|
-
rotateZ(
|
|
1801
|
-
this.
|
|
2076
|
+
rotateZ(t) {
|
|
2077
|
+
this.xt.state.it(t);
|
|
1802
2078
|
}
|
|
1803
2079
|
push() {
|
|
1804
|
-
this.
|
|
2080
|
+
this.xt.state.H();
|
|
1805
2081
|
}
|
|
1806
2082
|
pop() {
|
|
1807
|
-
this.
|
|
2083
|
+
this.xt.state.Z();
|
|
1808
2084
|
}
|
|
1809
|
-
rect(
|
|
1810
|
-
this.
|
|
2085
|
+
rect(t, e, i = 1, s = 1) {
|
|
2086
|
+
this.xt.Ns(t, e, i, s);
|
|
1811
2087
|
}
|
|
1812
|
-
point(
|
|
1813
|
-
this.
|
|
2088
|
+
point(t, e) {
|
|
2089
|
+
this.xt.Ns(t, e, 1, 1);
|
|
1814
2090
|
}
|
|
1815
|
-
line(
|
|
1816
|
-
this.
|
|
2091
|
+
line(t, e, i, s) {
|
|
2092
|
+
this.xt.Xs(t, e, i, s);
|
|
1817
2093
|
}
|
|
1818
|
-
lineWeight(
|
|
1819
|
-
this.
|
|
2094
|
+
lineWeight(t) {
|
|
2095
|
+
this.xt.state.tt(t);
|
|
1820
2096
|
}
|
|
1821
|
-
background(
|
|
1822
|
-
this.
|
|
2097
|
+
background(t, e = t, i = t, s = 255) {
|
|
2098
|
+
this.xt.qs(t, e, i, s);
|
|
1823
2099
|
}
|
|
1824
|
-
char(
|
|
1825
|
-
this.
|
|
2100
|
+
char(t) {
|
|
2101
|
+
this.xt.state.rt(this.Si.Pi(t));
|
|
1826
2102
|
}
|
|
1827
|
-
charColor(
|
|
1828
|
-
this.
|
|
2103
|
+
charColor(t, e, i) {
|
|
2104
|
+
this.xt.state.nt(t, e, i);
|
|
1829
2105
|
}
|
|
1830
|
-
cellColor(
|
|
1831
|
-
this.
|
|
2106
|
+
cellColor(t, e, i) {
|
|
2107
|
+
this.xt.state.ot(t, e, i);
|
|
1832
2108
|
}
|
|
1833
|
-
flipX(
|
|
1834
|
-
this.
|
|
2109
|
+
flipX(t) {
|
|
2110
|
+
this.xt.state.ht(t);
|
|
1835
2111
|
}
|
|
1836
|
-
flipY(
|
|
1837
|
-
this.
|
|
2112
|
+
flipY(t) {
|
|
2113
|
+
this.xt.state.ct(t);
|
|
1838
2114
|
}
|
|
1839
|
-
charRotation(
|
|
1840
|
-
this.
|
|
2115
|
+
charRotation(t) {
|
|
2116
|
+
this.xt.state.ut(t);
|
|
1841
2117
|
}
|
|
1842
|
-
invert(
|
|
1843
|
-
this.
|
|
2118
|
+
invert(t) {
|
|
2119
|
+
this.xt.state.lt(t);
|
|
1844
2120
|
}
|
|
1845
2121
|
clear() {
|
|
1846
|
-
this.
|
|
2122
|
+
this.xt.qs(0, 0, 0, 0);
|
|
2123
|
+
}
|
|
2124
|
+
ellipse(t, e, i, s) {
|
|
2125
|
+
this.xt.Ws(t, e, i / 2, s / 2);
|
|
1847
2126
|
}
|
|
1848
|
-
|
|
1849
|
-
this.
|
|
2127
|
+
triangle(t, e, i, s, r, n) {
|
|
2128
|
+
this.xt.Vs(t, e, i, s, r, n);
|
|
1850
2129
|
}
|
|
1851
|
-
|
|
1852
|
-
this.
|
|
2130
|
+
bezierCurve(t, e, i, s, r, n, o, c) {
|
|
2131
|
+
this.xt.Ks(t, e, i, s, r, n, o, c);
|
|
1853
2132
|
}
|
|
1854
|
-
|
|
1855
|
-
this.
|
|
2133
|
+
arc(t, e, i, s, r, n) {
|
|
2134
|
+
this.xt.Ys(t, e, i, s, r, n);
|
|
1856
2135
|
}
|
|
1857
|
-
|
|
1858
|
-
this.
|
|
2136
|
+
shader(t) {
|
|
2137
|
+
this.xt.Ls(t);
|
|
1859
2138
|
}
|
|
1860
|
-
|
|
1861
|
-
this.
|
|
2139
|
+
setUniform(t, e) {
|
|
2140
|
+
this.xt.Kt(t, e);
|
|
1862
2141
|
}
|
|
1863
|
-
|
|
1864
|
-
this.
|
|
2142
|
+
setUniforms(t) {
|
|
2143
|
+
this.xt.ks(t);
|
|
1865
2144
|
}
|
|
1866
|
-
|
|
1867
|
-
this.
|
|
2145
|
+
createFilterShader(t) {
|
|
2146
|
+
return this.xt.oe(t);
|
|
1868
2147
|
}
|
|
1869
|
-
|
|
1870
|
-
return this.
|
|
2148
|
+
createFramebuffer(t) {
|
|
2149
|
+
return this.xt.js(t.width, t.height, 5, { filter: "nearest", wrap: "clamp", format: "rgba", type: "unsigned_byte" });
|
|
1871
2150
|
}
|
|
1872
|
-
|
|
1873
|
-
|
|
2151
|
+
image(t, e, i, s, r) {
|
|
2152
|
+
if (t.textures) {
|
|
2153
|
+
const n = t;
|
|
2154
|
+
this.xt.Os(n, e, i, s ?? n.width, r ?? n.height);
|
|
2155
|
+
} else {
|
|
2156
|
+
const n = t;
|
|
2157
|
+
this.xt.Hs(n, e, i, s ?? n.width, r ?? n.height);
|
|
2158
|
+
}
|
|
1874
2159
|
}
|
|
1875
|
-
|
|
1876
|
-
|
|
2160
|
+
async loadImage(t) {
|
|
2161
|
+
if (typeof t != "string") return z.fromSource(this.xt, t, (s) => this.Si.Ti(s));
|
|
2162
|
+
const e = t, i = await new Promise((s, r) => {
|
|
2163
|
+
const n = new Image();
|
|
2164
|
+
n.crossOrigin = "anonymous", n.onload = () => s(n), n.onerror = (o) => r(o), n.src = e;
|
|
2165
|
+
});
|
|
2166
|
+
return z.fromSource(this.xt, i, (s) => this.Si.Ti(s));
|
|
1877
2167
|
}
|
|
1878
2168
|
};
|
|
1879
|
-
class
|
|
1880
|
-
|
|
1881
|
-
const
|
|
1882
|
-
return { characterPixels:
|
|
2169
|
+
class $ {
|
|
2170
|
+
Tn(t) {
|
|
2171
|
+
const e = t.Pt(0), i = t.Pt(1), s = t.Pt(2), r = t.Pt(3);
|
|
2172
|
+
return { characterPixels: e, primaryColorPixels: i, secondaryColorPixels: s, transformPixels: t.Pt(4), rotationPixels: r };
|
|
1883
2173
|
}
|
|
1884
|
-
|
|
1885
|
-
return
|
|
2174
|
+
Sn(t, e) {
|
|
2175
|
+
return t[e] + (t[e + 1] << 8);
|
|
1886
2176
|
}
|
|
1887
|
-
|
|
1888
|
-
return { r:
|
|
2177
|
+
En(t, e) {
|
|
2178
|
+
return { r: t[e], g: t[e + 1], b: t[e + 2], a: t[e + 3] };
|
|
1889
2179
|
}
|
|
1890
2180
|
}
|
|
1891
|
-
class
|
|
1892
|
-
|
|
1893
|
-
return new Blob([
|
|
2181
|
+
class J {
|
|
2182
|
+
Bn(t, e) {
|
|
2183
|
+
return new Blob([t], { type: e });
|
|
1894
2184
|
}
|
|
1895
|
-
|
|
2185
|
+
Gn(t, e, i) {
|
|
1896
2186
|
try {
|
|
1897
|
-
const s = this.
|
|
1898
|
-
|
|
2187
|
+
const s = this.Bn(t, i), r = URL.createObjectURL(s), n = document.createElement("a");
|
|
2188
|
+
n.href = r, n.download = e, n.style.display = "none", n.rel = "noopener", document.body.appendChild(n), n.click(), document.body.removeChild(n), URL.revokeObjectURL(r);
|
|
1899
2189
|
} catch (s) {
|
|
1900
|
-
|
|
2190
|
+
console.error("Failed to download file:", s);
|
|
1901
2191
|
}
|
|
1902
2192
|
}
|
|
1903
|
-
|
|
2193
|
+
Dn() {
|
|
1904
2194
|
return (/* @__PURE__ */ new Date()).toISOString().slice(0, 19).replace(/:/g, "-");
|
|
1905
2195
|
}
|
|
1906
|
-
|
|
1907
|
-
const
|
|
1908
|
-
return { date:
|
|
2196
|
+
Ln() {
|
|
2197
|
+
const t = /* @__PURE__ */ new Date();
|
|
2198
|
+
return { date: t.toISOString().split("T")[0], time: t.toTimeString().split(" ")[0].replace(/:/g, "-") };
|
|
1909
2199
|
}
|
|
1910
|
-
|
|
1911
|
-
return
|
|
2200
|
+
kn(t) {
|
|
2201
|
+
return t.replace(/[<>:"/\\|?*]/g, "_").replace(/\s+/g, "_").replace(/_{2,}/g, "_").replace(/^_+|_+$/g, "").substring(0, 255);
|
|
1912
2202
|
}
|
|
1913
|
-
|
|
1914
|
-
return "textmode-export-" + this.
|
|
2203
|
+
On() {
|
|
2204
|
+
return "textmode-export-" + this.Dn();
|
|
1915
2205
|
}
|
|
1916
2206
|
}
|
|
1917
|
-
class
|
|
1918
|
-
|
|
1919
|
-
const s =
|
|
1920
|
-
return { isInverted: s, flipHorizontal:
|
|
2207
|
+
class qt extends $ {
|
|
2208
|
+
Hn(t, e, i) {
|
|
2209
|
+
const s = t[i] === 255, r = t[i + 1] === 255, n = t[i + 2] === 255, o = e[i], c = e[i + 1];
|
|
2210
|
+
return { isInverted: s, flipHorizontal: r, flipVertical: n, rotation: Math.round(360 * (o + c / 255) / 255 * 100) / 100 };
|
|
1921
2211
|
}
|
|
1922
|
-
|
|
1923
|
-
return { x:
|
|
2212
|
+
In(t, e, i) {
|
|
2213
|
+
return { x: t, y: e, cellX: t * i.cellWidth, cellY: e * i.cellHeight };
|
|
1924
2214
|
}
|
|
1925
|
-
|
|
1926
|
-
const
|
|
2215
|
+
Nn(t, e) {
|
|
2216
|
+
const i = [];
|
|
1927
2217
|
let s = 0;
|
|
1928
|
-
for (let
|
|
1929
|
-
const
|
|
1930
|
-
let
|
|
1931
|
-
const
|
|
1932
|
-
if (
|
|
1933
|
-
const
|
|
1934
|
-
|
|
2218
|
+
for (let r = 0; r < e.rows; r++) for (let n = 0; n < e.cols; n++) {
|
|
2219
|
+
const o = 4 * s, c = this.Sn(t.characterPixels, o);
|
|
2220
|
+
let l = this.En(t.primaryColorPixels, o), f = this.En(t.secondaryColorPixels, o);
|
|
2221
|
+
const u = this.Hn(t.transformPixels, t.rotationPixels, o);
|
|
2222
|
+
if (u.isInverted) {
|
|
2223
|
+
const v = l;
|
|
2224
|
+
l = f, f = v;
|
|
1935
2225
|
}
|
|
1936
|
-
const
|
|
1937
|
-
|
|
2226
|
+
const g = this.In(n, r, e);
|
|
2227
|
+
i.push({ charIndex: c, primaryColor: l, secondaryColor: f, transform: u, position: g }), s++;
|
|
1938
2228
|
}
|
|
1939
|
-
return
|
|
2229
|
+
return i;
|
|
1940
2230
|
}
|
|
1941
2231
|
}
|
|
1942
|
-
class
|
|
1943
|
-
|
|
1944
|
-
const
|
|
1945
|
-
for (const s of
|
|
1946
|
-
const
|
|
1947
|
-
for (let
|
|
1948
|
-
if (
|
|
2232
|
+
class Zt {
|
|
2233
|
+
Xn(t, e) {
|
|
2234
|
+
const i = t.cmap;
|
|
2235
|
+
for (const s of i.tables) if (s.format === 4) {
|
|
2236
|
+
const r = s;
|
|
2237
|
+
for (let n = 0; n < r.startCount.length; n++) if (e >= r.startCount[n] && e <= r.endCount[n]) {
|
|
2238
|
+
if (r.idRangeOffset[n] === 0) return e + r.idDelta[n] & 65535;
|
|
1949
2239
|
{
|
|
1950
|
-
const
|
|
1951
|
-
if (
|
|
1952
|
-
const
|
|
1953
|
-
if (
|
|
2240
|
+
const o = r.idRangeOffset[n] / 2 + (e - r.startCount[n]) - (r.startCount.length - n);
|
|
2241
|
+
if (o >= 0 && o < r.glyphIdArray.length) {
|
|
2242
|
+
const c = r.glyphIdArray[o];
|
|
2243
|
+
if (c !== 0) return c + r.idDelta[n] & 65535;
|
|
1954
2244
|
}
|
|
1955
2245
|
}
|
|
1956
2246
|
}
|
|
1957
2247
|
} else if (s.format === 12) {
|
|
1958
|
-
const
|
|
1959
|
-
for (let
|
|
1960
|
-
const
|
|
1961
|
-
if (
|
|
2248
|
+
const r = s;
|
|
2249
|
+
for (let n = 0; n < r.groups.length; n += 3) {
|
|
2250
|
+
const o = r.groups[n], c = r.groups[n + 1], l = r.groups[n + 2];
|
|
2251
|
+
if (e >= o && e <= c) return l + (e - o);
|
|
1962
2252
|
}
|
|
1963
2253
|
}
|
|
1964
2254
|
return 0;
|
|
1965
2255
|
}
|
|
1966
|
-
|
|
1967
|
-
const
|
|
1968
|
-
return { getBoundingBox: () => ({ x1:
|
|
1969
|
-
}
|
|
1970
|
-
|
|
1971
|
-
if (!
|
|
1972
|
-
const { xs:
|
|
1973
|
-
if (!(
|
|
1974
|
-
let
|
|
1975
|
-
for (let
|
|
1976
|
-
const
|
|
1977
|
-
if (!(
|
|
1978
|
-
if (
|
|
1979
|
-
const
|
|
1980
|
-
|
|
1981
|
-
let
|
|
1982
|
-
for (;
|
|
1983
|
-
if (1 &
|
|
1984
|
-
const
|
|
1985
|
-
|
|
2256
|
+
Wn(t, e, i, s, r) {
|
|
2257
|
+
const n = r / t.head.unitsPerEm;
|
|
2258
|
+
return { getBoundingBox: () => ({ x1: i + e.xMin * n, y1: s + -e.yMax * n, x2: i + e.xMax * n, y2: s + -e.yMin * n }), toSVG: () => this.Vn(e, i, s, n) };
|
|
2259
|
+
}
|
|
2260
|
+
Vn(t, e, i, s) {
|
|
2261
|
+
if (!t || !t.xs) return "";
|
|
2262
|
+
const { xs: r, ys: n, endPts: o, flags: c } = t;
|
|
2263
|
+
if (!(r && n && o && c)) return "";
|
|
2264
|
+
let l = "", f = 0;
|
|
2265
|
+
for (let u = 0; u < o.length; u++) {
|
|
2266
|
+
const g = o[u];
|
|
2267
|
+
if (!(g < f)) {
|
|
2268
|
+
if (g >= f) {
|
|
2269
|
+
const v = e + r[f] * s, m = i - n[f] * s;
|
|
2270
|
+
l += `M${v.toFixed(2)},${m.toFixed(2)}`;
|
|
2271
|
+
let d = f + 1;
|
|
2272
|
+
for (; d <= g; )
|
|
2273
|
+
if (1 & c[d]) {
|
|
2274
|
+
const A = e + r[d] * s, p = i - n[d] * s;
|
|
2275
|
+
l += `L${A.toFixed(2)},${p.toFixed(2)}`, d++;
|
|
1986
2276
|
} else {
|
|
1987
|
-
const
|
|
1988
|
-
let
|
|
1989
|
-
if (1 &
|
|
1990
|
-
const
|
|
1991
|
-
|
|
2277
|
+
const A = e + r[d] * s, p = i - n[d] * s;
|
|
2278
|
+
let y = d + 1 > g ? f : d + 1;
|
|
2279
|
+
if (1 & c[y]) {
|
|
2280
|
+
const x = e + r[y] * s, C = i - n[y] * s;
|
|
2281
|
+
l += `Q${A.toFixed(2)},${p.toFixed(2)} ${x.toFixed(2)},${C.toFixed(2)}`, d = y + 1;
|
|
1992
2282
|
} else {
|
|
1993
|
-
const
|
|
1994
|
-
|
|
2283
|
+
const x = (A + (e + r[y] * s)) / 2, C = (p + (i - n[y] * s)) / 2;
|
|
2284
|
+
l += `Q${A.toFixed(2)},${p.toFixed(2)} ${x.toFixed(2)},${C.toFixed(2)}`, d = y;
|
|
1995
2285
|
}
|
|
1996
2286
|
}
|
|
1997
|
-
|
|
2287
|
+
l += "Z";
|
|
1998
2288
|
}
|
|
1999
|
-
|
|
2289
|
+
f = g + 1;
|
|
2000
2290
|
}
|
|
2001
2291
|
}
|
|
2002
|
-
return
|
|
2292
|
+
return l;
|
|
2003
2293
|
}
|
|
2004
|
-
|
|
2005
|
-
const
|
|
2006
|
-
let
|
|
2007
|
-
return
|
|
2294
|
+
Kn(t, e, i, s, r) {
|
|
2295
|
+
const n = t.codePointAt(0) || 0, o = this.Xn(e, n);
|
|
2296
|
+
let c = null;
|
|
2297
|
+
return e.glyf && e.glyf[o] !== null ? c = e.glyf[o] : (c = B.T.glyf.Qs(e, o), e.glyf[o] = c), this.Wn(e, c, i, s, r);
|
|
2008
2298
|
}
|
|
2009
|
-
|
|
2010
|
-
const
|
|
2011
|
-
return this.
|
|
2299
|
+
jn(t, e, i, s, r, n, o, c) {
|
|
2300
|
+
const l = i + (r - c * (o / e.head.unitsPerEm)) / 2, f = s + (n + 0.7 * o) / 2;
|
|
2301
|
+
return this.Kn(t, e, l, f, o).toSVG() || null;
|
|
2012
2302
|
}
|
|
2013
2303
|
}
|
|
2014
|
-
class
|
|
2304
|
+
class $t {
|
|
2015
2305
|
constructor() {
|
|
2016
|
-
|
|
2017
|
-
this.
|
|
2306
|
+
h(this, "Yn");
|
|
2307
|
+
this.Yn = new Zt();
|
|
2018
2308
|
}
|
|
2019
|
-
|
|
2020
|
-
const { width:
|
|
2021
|
-
return `<?xml version="1.0" encoding="UTF-8"?><svg width="${
|
|
2309
|
+
qn(t) {
|
|
2310
|
+
const { width: e, height: i } = t;
|
|
2311
|
+
return `<?xml version="1.0" encoding="UTF-8"?><svg width="${e}" height="${i}" viewBox="0 0 ${e} ${i}" xmlns="http://www.w3.org/2000/svg"><title>textmode.js sketch</title>`;
|
|
2022
2312
|
}
|
|
2023
|
-
|
|
2313
|
+
Zn() {
|
|
2024
2314
|
return "</g></svg>";
|
|
2025
2315
|
}
|
|
2026
|
-
|
|
2027
|
-
if (!
|
|
2028
|
-
const [
|
|
2029
|
-
return `<rect width="${
|
|
2030
|
-
}
|
|
2031
|
-
|
|
2032
|
-
const { transform:
|
|
2033
|
-
if (!
|
|
2034
|
-
const
|
|
2035
|
-
if (
|
|
2036
|
-
const
|
|
2037
|
-
|
|
2316
|
+
Qn(t, e) {
|
|
2317
|
+
if (!e.includeBackgroundRectangles) return "";
|
|
2318
|
+
const [i, s, r, n] = e.backgroundColor;
|
|
2319
|
+
return `<rect width="${t.width}" height="${t.height}" fill="rgba(${i},${s},${r},${n / 255})"/>`;
|
|
2320
|
+
}
|
|
2321
|
+
Jn(t, e) {
|
|
2322
|
+
const { transform: i, position: s } = t;
|
|
2323
|
+
if (!i.flipHorizontal && !i.flipVertical && !i.rotation) return "";
|
|
2324
|
+
const r = s.cellX + e.cellWidth / 2, n = s.cellY + e.cellHeight / 2, o = [];
|
|
2325
|
+
if (i.flipHorizontal || i.flipVertical) {
|
|
2326
|
+
const c = i.flipHorizontal ? -1 : 1, l = i.flipVertical ? -1 : 1;
|
|
2327
|
+
o.push(`translate(${r} ${n})scale(${c} ${l})translate(${-r} ${-n})`);
|
|
2038
2328
|
}
|
|
2039
|
-
return
|
|
2040
|
-
}
|
|
2041
|
-
|
|
2042
|
-
if (!
|
|
2043
|
-
const { position: s } =
|
|
2044
|
-
return
|
|
2045
|
-
}
|
|
2046
|
-
|
|
2047
|
-
const
|
|
2048
|
-
if (!
|
|
2049
|
-
const
|
|
2050
|
-
if (!
|
|
2051
|
-
const { r, g:
|
|
2052
|
-
return s.drawMode === "stroke" ? `<path d="${
|
|
2053
|
-
}
|
|
2054
|
-
|
|
2055
|
-
const
|
|
2056
|
-
|
|
2057
|
-
const
|
|
2058
|
-
if (
|
|
2059
|
-
const
|
|
2060
|
-
|
|
2329
|
+
return i.rotation && o.push(`rotate(${i.rotation} ${r} ${n})`), ` transform="${o.join(" ")}"`;
|
|
2330
|
+
}
|
|
2331
|
+
eo(t, e, i) {
|
|
2332
|
+
if (!i.includeBackgroundRectangles || t.secondaryColor.a === 0) return "";
|
|
2333
|
+
const { position: s } = t, { r, g: n, b: o, a: c } = t.secondaryColor, l = `rgba(${r},${n},${o},${c / 255})`;
|
|
2334
|
+
return i.drawMode === "stroke" ? `<rect x="${s.cellX}" y="${s.cellY}" width="${e.cellWidth}" height="${e.cellHeight}" stroke="${l}" fill="none" stroke-width="${i.strokeWidth}"/>` : `<rect x="${s.cellX}" y="${s.cellY}" width="${e.cellWidth}" height="${e.cellHeight}" fill="${l}"/>`;
|
|
2335
|
+
}
|
|
2336
|
+
Kn(t, e, i, s) {
|
|
2337
|
+
const r = i.characters[t.charIndex];
|
|
2338
|
+
if (!r) return "";
|
|
2339
|
+
const n = this.Yn.jn(r.character, i.font, t.position.cellX, t.position.cellY, e.cellWidth, e.cellHeight, i.fontSize, r.advanceWidth);
|
|
2340
|
+
if (!n) return "";
|
|
2341
|
+
const { r: o, g: c, b: l, a: f } = t.primaryColor, u = `rgba(${o},${c},${l},${f / 255})`;
|
|
2342
|
+
return s.drawMode === "stroke" ? `<path d="${n}" stroke="${u}" stroke-width="${s.strokeWidth}" fill="none"/>` : `<path d="${n}" fill="${u}"/>`;
|
|
2343
|
+
}
|
|
2344
|
+
so(t, e, i, s) {
|
|
2345
|
+
const r = [], n = this.eo(t, e, s);
|
|
2346
|
+
n && r.push(n);
|
|
2347
|
+
const o = this.Kn(t, e, i, s);
|
|
2348
|
+
if (o) {
|
|
2349
|
+
const c = this.Jn(t, e);
|
|
2350
|
+
r.push(c ? `<g${c}>${o}</g>` : o);
|
|
2061
2351
|
}
|
|
2062
|
-
return
|
|
2352
|
+
return r.join("");
|
|
2063
2353
|
}
|
|
2064
|
-
|
|
2065
|
-
const
|
|
2066
|
-
for (const
|
|
2067
|
-
return
|
|
2354
|
+
io(t, e, i, s) {
|
|
2355
|
+
const r = [this.qn(e), this.Qn(e, s), '<g id="ascii-cells">'];
|
|
2356
|
+
for (const n of t) r.push(this.so(n, e, i, s));
|
|
2357
|
+
return r.push(this.Zn()), r.join("");
|
|
2068
2358
|
}
|
|
2069
|
-
|
|
2070
|
-
return
|
|
2359
|
+
ro(t) {
|
|
2360
|
+
return t.replace(/<path[^>]*d=""[^>]*\/>/g, "").replace(/\s+/g, " ").replace(/> </g, "><");
|
|
2071
2361
|
}
|
|
2072
2362
|
}
|
|
2073
|
-
class
|
|
2074
|
-
|
|
2075
|
-
return this.
|
|
2363
|
+
class Jt extends J {
|
|
2364
|
+
no(t) {
|
|
2365
|
+
return this.Bn(t, "image/svg+xml;charset=utf-8");
|
|
2076
2366
|
}
|
|
2077
|
-
|
|
2078
|
-
this.
|
|
2367
|
+
oo(t, e) {
|
|
2368
|
+
this.Gn(t, this.kn(e) + ".svg", "image/svg+xml;charset=utf-8");
|
|
2079
2369
|
}
|
|
2080
|
-
|
|
2081
|
-
this.
|
|
2370
|
+
ao(t, e) {
|
|
2371
|
+
this.oo(t, e || this.On());
|
|
2082
2372
|
}
|
|
2083
2373
|
}
|
|
2084
|
-
class
|
|
2374
|
+
class st {
|
|
2085
2375
|
constructor() {
|
|
2086
|
-
|
|
2087
|
-
|
|
2088
|
-
|
|
2089
|
-
this.
|
|
2376
|
+
h(this, "ho");
|
|
2377
|
+
h(this, "co");
|
|
2378
|
+
h(this, "lo");
|
|
2379
|
+
this.ho = new qt(), this.co = new $t(), this.lo = new Jt();
|
|
2090
2380
|
}
|
|
2091
|
-
|
|
2092
|
-
return { includeBackgroundRectangles:
|
|
2381
|
+
uo(t) {
|
|
2382
|
+
return { includeBackgroundRectangles: t.includeBackgroundRectangles ?? !0, drawMode: t.drawMode ?? "fill", strokeWidth: t.strokeWidth ?? 1, backgroundColor: t.backgroundColor ?? [0, 0, 0, 0], filename: t.filename || this.lo.On() };
|
|
2093
2383
|
}
|
|
2094
|
-
|
|
2095
|
-
const
|
|
2096
|
-
return this.
|
|
2384
|
+
fo(t, e = {}) {
|
|
2385
|
+
const i = this.ho.Nn(this.ho.Tn(t.pipeline), t.grid), s = this.co.io(i, t.grid, t.font, this.uo(e));
|
|
2386
|
+
return this.co.ro(s);
|
|
2097
2387
|
}
|
|
2098
|
-
|
|
2099
|
-
this.
|
|
2388
|
+
ao(t, e = {}) {
|
|
2389
|
+
this.lo.ao(this.fo(t, e), e.filename);
|
|
2100
2390
|
}
|
|
2101
2391
|
}
|
|
2102
|
-
class
|
|
2103
|
-
|
|
2104
|
-
var
|
|
2105
|
-
const
|
|
2106
|
-
let
|
|
2107
|
-
for (let
|
|
2108
|
-
const
|
|
2109
|
-
for (let
|
|
2110
|
-
const
|
|
2111
|
-
|
|
2392
|
+
class Qt extends $ {
|
|
2393
|
+
do(t, e, i, s = " ") {
|
|
2394
|
+
var o;
|
|
2395
|
+
const r = [];
|
|
2396
|
+
let n = 0;
|
|
2397
|
+
for (let c = 0; c < e.rows; c++) {
|
|
2398
|
+
const l = [];
|
|
2399
|
+
for (let f = 0; f < e.cols; f++) {
|
|
2400
|
+
const u = 4 * n, g = this.Sn(t.characterPixels, u), v = ((o = i.characters[g]) == null ? void 0 : o.character) || s;
|
|
2401
|
+
l.push(v), n++;
|
|
2112
2402
|
}
|
|
2113
|
-
|
|
2403
|
+
r.push(l);
|
|
2114
2404
|
}
|
|
2115
|
-
return
|
|
2405
|
+
return r;
|
|
2116
2406
|
}
|
|
2117
2407
|
}
|
|
2118
|
-
class
|
|
2119
|
-
|
|
2120
|
-
const
|
|
2121
|
-
for (const
|
|
2122
|
-
let
|
|
2123
|
-
|
|
2408
|
+
class te {
|
|
2409
|
+
po(t, e) {
|
|
2410
|
+
const i = [];
|
|
2411
|
+
for (const r of t) {
|
|
2412
|
+
let n = r.join("");
|
|
2413
|
+
e.preserveTrailingSpaces || (n = n.replace(/\s+$/, "")), i.push(n);
|
|
2124
2414
|
}
|
|
2125
|
-
const s =
|
|
2415
|
+
const s = e.lineEnding === "crlf" ? `\r
|
|
2126
2416
|
` : `
|
|
2127
2417
|
`;
|
|
2128
|
-
return
|
|
2418
|
+
return i.join(s);
|
|
2129
2419
|
}
|
|
2130
2420
|
}
|
|
2131
|
-
class
|
|
2132
|
-
|
|
2133
|
-
const
|
|
2134
|
-
this.
|
|
2421
|
+
class ee extends J {
|
|
2422
|
+
mo(t, e) {
|
|
2423
|
+
const i = this._o(e);
|
|
2424
|
+
this.Gn(t, i, "text/plain;charset=utf-8");
|
|
2135
2425
|
}
|
|
2136
|
-
|
|
2137
|
-
let
|
|
2138
|
-
return
|
|
2426
|
+
_o(t) {
|
|
2427
|
+
let e = this.kn(t);
|
|
2428
|
+
return e === ".txt" || e.length <= 4 ? this.On() : e;
|
|
2139
2429
|
}
|
|
2140
2430
|
}
|
|
2141
|
-
class
|
|
2431
|
+
class rt {
|
|
2142
2432
|
constructor() {
|
|
2143
|
-
|
|
2144
|
-
|
|
2145
|
-
|
|
2146
|
-
this.
|
|
2433
|
+
h(this, "ho");
|
|
2434
|
+
h(this, "co");
|
|
2435
|
+
h(this, "lo");
|
|
2436
|
+
this.ho = new Qt(), this.co = new te(), this.lo = new ee();
|
|
2147
2437
|
}
|
|
2148
|
-
|
|
2149
|
-
return { preserveTrailingSpaces:
|
|
2438
|
+
uo(t) {
|
|
2439
|
+
return { preserveTrailingSpaces: t.preserveTrailingSpaces ?? !1, lineEnding: t.lineEnding ?? "lf", emptyCharacter: t.emptyCharacter ?? " ", filename: t.filename || this.lo.On() };
|
|
2150
2440
|
}
|
|
2151
|
-
|
|
2152
|
-
const
|
|
2153
|
-
return this.
|
|
2441
|
+
vo(t, e = {}) {
|
|
2442
|
+
const i = this.uo(e), s = this.ho.do(this.ho.Tn(t.pipeline), t.grid, t.font, i.emptyCharacter);
|
|
2443
|
+
return this.co.po(s, i);
|
|
2154
2444
|
}
|
|
2155
|
-
|
|
2156
|
-
this.
|
|
2445
|
+
mo(t, e = {}) {
|
|
2446
|
+
this.lo.mo(this.vo(t, e), e.filename);
|
|
2157
2447
|
}
|
|
2158
2448
|
}
|
|
2159
|
-
class
|
|
2160
|
-
|
|
2161
|
-
const s =
|
|
2162
|
-
if (
|
|
2163
|
-
const
|
|
2164
|
-
return
|
|
2449
|
+
class ie extends $ {
|
|
2450
|
+
yo(t, e = 1, i = "transparent") {
|
|
2451
|
+
const s = t.canvas;
|
|
2452
|
+
if (e === 1 && i === "transparent") return s;
|
|
2453
|
+
const r = document.createElement("canvas"), n = r.getContext("2d"), o = Math.round(s.width * e), c = Math.round(s.height * e);
|
|
2454
|
+
return r.width = o, r.height = c, i !== "transparent" && (n.fillStyle = i, n.fillRect(0, 0, o, c)), n.imageSmoothingEnabled = !1, n.drawImage(s, 0, 0, s.width, s.height, 0, 0, o, c), r;
|
|
2165
2455
|
}
|
|
2166
2456
|
}
|
|
2167
|
-
class
|
|
2168
|
-
|
|
2169
|
-
const
|
|
2170
|
-
return
|
|
2171
|
-
}
|
|
2172
|
-
async
|
|
2173
|
-
return new Promise((
|
|
2174
|
-
const
|
|
2175
|
-
|
|
2457
|
+
class se {
|
|
2458
|
+
Ao(t, e) {
|
|
2459
|
+
const i = this.wo(e.format);
|
|
2460
|
+
return e.format === "png" ? t.toDataURL(i) : t.toDataURL(i, e.quality);
|
|
2461
|
+
}
|
|
2462
|
+
async Co(t, e) {
|
|
2463
|
+
return new Promise((i, s) => {
|
|
2464
|
+
const r = this.wo(e.format), n = (o) => {
|
|
2465
|
+
o ? i(o) : s(Error(`Failed to generate ${e.format.toUpperCase()} blob`));
|
|
2176
2466
|
};
|
|
2177
|
-
|
|
2467
|
+
e.format === "png" ? t.toBlob(n, r) : t.toBlob(n, r, e.quality);
|
|
2178
2468
|
});
|
|
2179
2469
|
}
|
|
2180
|
-
|
|
2181
|
-
switch (
|
|
2470
|
+
wo(t) {
|
|
2471
|
+
switch (t) {
|
|
2182
2472
|
case "png":
|
|
2183
2473
|
return "image/png";
|
|
2184
2474
|
case "jpg":
|
|
@@ -2186,274 +2476,283 @@ class WA {
|
|
|
2186
2476
|
case "webp":
|
|
2187
2477
|
return "image/webp";
|
|
2188
2478
|
default:
|
|
2189
|
-
throw Error("Unsupported image format: " +
|
|
2479
|
+
throw Error("Unsupported image format: " + t);
|
|
2190
2480
|
}
|
|
2191
2481
|
}
|
|
2192
2482
|
}
|
|
2193
|
-
const
|
|
2194
|
-
class
|
|
2195
|
-
|
|
2196
|
-
this.
|
|
2483
|
+
const re = { png: "image/png", jpg: "image/jpeg", webp: "image/webp" }, nt = { png: ".png", jpg: ".jpg", webp: ".webp" };
|
|
2484
|
+
class ne extends J {
|
|
2485
|
+
bo(t, e, i) {
|
|
2486
|
+
this.xo(t, this.kn(e) + nt[i]);
|
|
2197
2487
|
}
|
|
2198
|
-
|
|
2199
|
-
const
|
|
2488
|
+
xo(t, e) {
|
|
2489
|
+
const i = URL.createObjectURL(t);
|
|
2200
2490
|
try {
|
|
2201
2491
|
const s = document.createElement("a");
|
|
2202
|
-
s.href =
|
|
2492
|
+
s.href = i, s.download = e, s.style.display = "none", s.rel = "noopener", document.body.appendChild(s), s.click(), document.body.removeChild(s);
|
|
2203
2493
|
} finally {
|
|
2204
|
-
URL.revokeObjectURL(
|
|
2494
|
+
URL.revokeObjectURL(i);
|
|
2205
2495
|
}
|
|
2206
2496
|
}
|
|
2207
|
-
|
|
2208
|
-
return
|
|
2497
|
+
$o(t) {
|
|
2498
|
+
return t in re && t in nt;
|
|
2209
2499
|
}
|
|
2210
2500
|
}
|
|
2211
|
-
class
|
|
2501
|
+
class oe {
|
|
2212
2502
|
constructor() {
|
|
2213
|
-
|
|
2214
|
-
|
|
2215
|
-
|
|
2216
|
-
this.
|
|
2217
|
-
}
|
|
2218
|
-
|
|
2219
|
-
return { format:
|
|
2220
|
-
}
|
|
2221
|
-
|
|
2222
|
-
if (!this.
|
|
2223
|
-
if (
|
|
2224
|
-
if (
|
|
2225
|
-
|
|
2226
|
-
}
|
|
2227
|
-
async
|
|
2228
|
-
if (
|
|
2229
|
-
const
|
|
2230
|
-
return await this.
|
|
2231
|
-
}
|
|
2232
|
-
async
|
|
2233
|
-
const
|
|
2234
|
-
this.
|
|
2235
|
-
const s = await this.
|
|
2236
|
-
this.
|
|
2503
|
+
h(this, "ho");
|
|
2504
|
+
h(this, "co");
|
|
2505
|
+
h(this, "lo");
|
|
2506
|
+
this.ho = new ie(), this.co = new se(), this.lo = new ne();
|
|
2507
|
+
}
|
|
2508
|
+
uo(t) {
|
|
2509
|
+
return { format: t.format ?? "png", quality: t.quality ?? 1, scale: t.scale ?? 1, backgroundColor: t.backgroundColor ?? "transparent", filename: t.filename || this.lo.On() };
|
|
2510
|
+
}
|
|
2511
|
+
Mo(t) {
|
|
2512
|
+
if (!this.lo.$o(t.format)) throw Error(`Saving '${t.format}' files is not supported`);
|
|
2513
|
+
if (t.quality < 0 || t.quality > 1) throw Error("Image quality must be between 0.0 and 1.0");
|
|
2514
|
+
if (t.scale <= 0) throw Error("Scale factor must be greater than 0");
|
|
2515
|
+
t.format === "jpg" && t.backgroundColor === "transparent" && (t.backgroundColor = "black");
|
|
2516
|
+
}
|
|
2517
|
+
async Co(t, e) {
|
|
2518
|
+
if (e.scale === 1 && e.backgroundColor === "transparent") return await this.co.Co(t.canvas, e);
|
|
2519
|
+
const i = this.ho.yo(t, e.scale, e.backgroundColor);
|
|
2520
|
+
return await this.co.Co(i, e);
|
|
2521
|
+
}
|
|
2522
|
+
async bo(t, e = {}) {
|
|
2523
|
+
const i = this.uo(e);
|
|
2524
|
+
this.Mo(i);
|
|
2525
|
+
const s = await this.Co(t, i);
|
|
2526
|
+
this.lo.bo(s, i.filename, i.format);
|
|
2237
2527
|
}
|
|
2238
2528
|
}
|
|
2239
|
-
const
|
|
2240
|
-
|
|
2241
|
-
this.
|
|
2529
|
+
const ae = (a) => class extends a {
|
|
2530
|
+
Fo() {
|
|
2531
|
+
this.xt.St(this.Ro);
|
|
2242
2532
|
}
|
|
2243
|
-
toString(
|
|
2244
|
-
return this.
|
|
2533
|
+
toString(t = {}) {
|
|
2534
|
+
return this.Fo(), new rt().vo({ pipeline: this.zo, grid: this.rn, font: this.Si }, t);
|
|
2245
2535
|
}
|
|
2246
|
-
saveStrings(
|
|
2247
|
-
this.
|
|
2536
|
+
saveStrings(t = {}) {
|
|
2537
|
+
this.Fo(), new rt().mo({ pipeline: this.zo, grid: this.rn, font: this.Si }, t);
|
|
2248
2538
|
}
|
|
2249
|
-
toSVG(
|
|
2250
|
-
return this.
|
|
2539
|
+
toSVG(t = {}) {
|
|
2540
|
+
return this.Fo(), new st().fo({ pipeline: this.zo, grid: this.rn, font: this.Si }, t);
|
|
2251
2541
|
}
|
|
2252
|
-
saveSVG(
|
|
2253
|
-
this.
|
|
2542
|
+
saveSVG(t = {}) {
|
|
2543
|
+
this.Fo(), new st().ao({ pipeline: this.zo, grid: this.rn, font: this.Si }, t);
|
|
2254
2544
|
}
|
|
2255
|
-
async saveCanvas(
|
|
2256
|
-
await new
|
|
2545
|
+
async saveCanvas(t = {}) {
|
|
2546
|
+
await new oe().bo(this.tr, t);
|
|
2257
2547
|
}
|
|
2258
|
-
},
|
|
2259
|
-
async loadFont(
|
|
2260
|
-
return this.
|
|
2261
|
-
const
|
|
2262
|
-
this.
|
|
2548
|
+
}, he = (a) => class extends a {
|
|
2549
|
+
async loadFont(t) {
|
|
2550
|
+
return this.Si.Yi(t).then(() => {
|
|
2551
|
+
const e = this.Si.maxGlyphDimensions;
|
|
2552
|
+
this.rn.rr(e.width, e.height), this.zo.resize(this.rn.cols, this.rn.rows), this.xt.Zs(), this.Po.An();
|
|
2263
2553
|
});
|
|
2264
2554
|
}
|
|
2265
|
-
fontSize(
|
|
2266
|
-
if (!
|
|
2267
|
-
this.
|
|
2268
|
-
const
|
|
2269
|
-
this.
|
|
2555
|
+
fontSize(t) {
|
|
2556
|
+
if (!N.v(typeof t == "number" && t > 0, "Font size must be a positive number greater than 0.", { method: "fontSize", providedValue: t }) || this.Si.fontSize === t) return;
|
|
2557
|
+
this.Si.ji(t);
|
|
2558
|
+
const e = this.Si.maxGlyphDimensions;
|
|
2559
|
+
this.rn.rr(e.width, e.height), this.zo.resize(this.rn.cols, this.rn.rows), this.xt.Zs(), this.Po.An();
|
|
2270
2560
|
}
|
|
2271
|
-
glyphColor(
|
|
2272
|
-
return this.
|
|
2561
|
+
glyphColor(t) {
|
|
2562
|
+
return this.Si.Pi(t);
|
|
2273
2563
|
}
|
|
2274
|
-
glyphColors(
|
|
2275
|
-
return this.
|
|
2564
|
+
glyphColors(t) {
|
|
2565
|
+
return this.Si.Ti(t);
|
|
2276
2566
|
}
|
|
2277
|
-
},
|
|
2567
|
+
}, ce = (a) => class extends a {
|
|
2278
2568
|
get frameCount() {
|
|
2279
|
-
return this.
|
|
2569
|
+
return this.To.frameCount;
|
|
2280
2570
|
}
|
|
2281
|
-
set frameCount(
|
|
2282
|
-
this.
|
|
2571
|
+
set frameCount(t) {
|
|
2572
|
+
this.To.frameCount = t;
|
|
2283
2573
|
}
|
|
2284
|
-
frameRate(
|
|
2285
|
-
return
|
|
2574
|
+
frameRate(t) {
|
|
2575
|
+
return t === void 0 ? this.To.currentFrameRate : this.To.frameRate(t, () => this.So());
|
|
2286
2576
|
}
|
|
2287
2577
|
noLoop() {
|
|
2288
|
-
this.
|
|
2578
|
+
this.To.pause();
|
|
2289
2579
|
}
|
|
2290
2580
|
loop() {
|
|
2291
|
-
this.
|
|
2581
|
+
this.To.resume(() => this.So());
|
|
2292
2582
|
}
|
|
2293
|
-
redraw(
|
|
2294
|
-
if (
|
|
2583
|
+
redraw(t = 1) {
|
|
2584
|
+
if (N.v(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.So();
|
|
2295
2585
|
}
|
|
2296
2586
|
isLooping() {
|
|
2297
|
-
return this.
|
|
2587
|
+
return this.To.isLooping;
|
|
2298
2588
|
}
|
|
2299
|
-
},
|
|
2300
|
-
constructor(...
|
|
2301
|
-
super(...
|
|
2589
|
+
}, le = (a) => class extends a {
|
|
2590
|
+
constructor(...t) {
|
|
2591
|
+
super(...t);
|
|
2302
2592
|
}
|
|
2303
|
-
mouseClicked(
|
|
2304
|
-
this.
|
|
2593
|
+
mouseClicked(t) {
|
|
2594
|
+
this.Po.Fn(t);
|
|
2305
2595
|
}
|
|
2306
|
-
mousePressed(
|
|
2307
|
-
this.
|
|
2596
|
+
mousePressed(t) {
|
|
2597
|
+
this.Po.jr(t);
|
|
2308
2598
|
}
|
|
2309
|
-
mouseReleased(
|
|
2310
|
-
this.
|
|
2599
|
+
mouseReleased(t) {
|
|
2600
|
+
this.Po.Yr(t);
|
|
2311
2601
|
}
|
|
2312
|
-
mouseMoved(
|
|
2313
|
-
this.
|
|
2602
|
+
mouseMoved(t) {
|
|
2603
|
+
this.Po.Rn(t);
|
|
2314
2604
|
}
|
|
2315
|
-
mouseScrolled(
|
|
2316
|
-
this.
|
|
2605
|
+
mouseScrolled(t) {
|
|
2606
|
+
this.Po.zn(t);
|
|
2317
2607
|
}
|
|
2318
2608
|
get mouse() {
|
|
2319
|
-
return this.
|
|
2609
|
+
return this.Po.Pn();
|
|
2320
2610
|
}
|
|
2321
|
-
},
|
|
2322
|
-
constructor(...
|
|
2323
|
-
super(...
|
|
2611
|
+
}, ue = (a) => class extends a {
|
|
2612
|
+
constructor(...t) {
|
|
2613
|
+
super(...t);
|
|
2324
2614
|
}
|
|
2325
|
-
keyPressed(
|
|
2326
|
-
this.
|
|
2615
|
+
keyPressed(t) {
|
|
2616
|
+
this.Eo.jr(t);
|
|
2327
2617
|
}
|
|
2328
|
-
keyReleased(
|
|
2329
|
-
this.
|
|
2618
|
+
keyReleased(t) {
|
|
2619
|
+
this.Eo.Yr(t);
|
|
2330
2620
|
}
|
|
2331
|
-
isKeyPressed(
|
|
2332
|
-
return this.
|
|
2621
|
+
isKeyPressed(t) {
|
|
2622
|
+
return this.Eo.qr(t);
|
|
2333
2623
|
}
|
|
2334
2624
|
get lastKeyPressed() {
|
|
2335
|
-
return this.
|
|
2625
|
+
return this.Eo.Qr();
|
|
2336
2626
|
}
|
|
2337
2627
|
get lastKeyReleased() {
|
|
2338
|
-
return this.
|
|
2628
|
+
return this.Eo.Jr();
|
|
2339
2629
|
}
|
|
2340
2630
|
get pressedKeys() {
|
|
2341
|
-
return this.
|
|
2631
|
+
return this.Eo.tn();
|
|
2342
2632
|
}
|
|
2343
2633
|
get modifierState() {
|
|
2344
|
-
return this.
|
|
2634
|
+
return this.Eo.en();
|
|
2345
2635
|
}
|
|
2346
2636
|
};
|
|
2347
|
-
class
|
|
2637
|
+
class fe {
|
|
2348
2638
|
constructor() {
|
|
2349
|
-
|
|
2350
|
-
|
|
2351
|
-
|
|
2352
|
-
|
|
2353
|
-
|
|
2354
|
-
|
|
2355
|
-
|
|
2356
|
-
|
|
2357
|
-
|
|
2358
|
-
|
|
2359
|
-
|
|
2360
|
-
|
|
2639
|
+
h(this, "xt");
|
|
2640
|
+
h(this, "Si");
|
|
2641
|
+
h(this, "tr");
|
|
2642
|
+
h(this, "rn");
|
|
2643
|
+
h(this, "To");
|
|
2644
|
+
h(this, "Po");
|
|
2645
|
+
h(this, "Eo");
|
|
2646
|
+
h(this, "Ro");
|
|
2647
|
+
h(this, "zo");
|
|
2648
|
+
h(this, "Bo");
|
|
2649
|
+
h(this, "Go");
|
|
2650
|
+
h(this, "Do");
|
|
2651
|
+
}
|
|
2652
|
+
So() {
|
|
2361
2653
|
}
|
|
2362
2654
|
}
|
|
2363
|
-
class
|
|
2364
|
-
return
|
|
2365
|
-
}(
|
|
2366
|
-
constructor(
|
|
2655
|
+
class de extends function(e, ...i) {
|
|
2656
|
+
return i.reduce((s, r) => r(s), e);
|
|
2657
|
+
}(fe, Kt, ae, he, ce, le, ue) {
|
|
2658
|
+
constructor(e = {}) {
|
|
2367
2659
|
super();
|
|
2368
|
-
|
|
2369
|
-
|
|
2660
|
+
h(this, "Lo", !1);
|
|
2661
|
+
h(this, "ko", () => {
|
|
2370
2662
|
});
|
|
2371
|
-
|
|
2663
|
+
h(this, "Oo", () => {
|
|
2372
2664
|
});
|
|
2373
|
-
|
|
2665
|
+
h(this, "Ho", () => {
|
|
2374
2666
|
});
|
|
2375
|
-
|
|
2376
|
-
|
|
2377
|
-
|
|
2378
|
-
|
|
2379
|
-
|
|
2380
|
-
|
|
2381
|
-
|
|
2382
|
-
|
|
2383
|
-
|
|
2384
|
-
|
|
2385
|
-
|
|
2386
|
-
|
|
2387
|
-
this.
|
|
2667
|
+
h(this, "Io");
|
|
2668
|
+
h(this, "ar", !1);
|
|
2669
|
+
h(this, "No");
|
|
2670
|
+
this.ar = e.overlay ?? !1, this.tr = new kt(e), this.xt = new St(this.tr.gr()), this.Si = new Wt(this.xt, e.fontSize ?? 16), this.To = new Yt(e.frameRate ?? 60), this.Po = new jt(this.tr), this.Eo = new Vt(), this.Ro = this.xt.Tt(), this.Bo = this.xt.re(), this.Xo(e);
|
|
2671
|
+
}
|
|
2672
|
+
async Xo(e) {
|
|
2673
|
+
await this.Si.Wi(e.fontSource);
|
|
2674
|
+
const i = this.Si.maxGlyphDimensions;
|
|
2675
|
+
this.rn = new Ht(this.tr.canvas, i.width, i.height), this.Po.Wi(this.rn), this.zo = this.xt.js(this.rn.cols, this.rn.rows, 5), this.Go = this.xt.js(this.rn.width, this.rn.height, 1), this.ar && (this.No = z.fromSource(this.xt, this.tr.targetCanvas, (s) => this.Si.Ti(s))), this.Do = this.xt.ae(ht, "precision mediump float;uniform sampler2D Ua;uniform vec2 Ub;uniform vec2 Uc;uniform vec2 Ud;void main(){vec2 A=gl_FragCoord.xy-Uc;vec2 B=A*(Ub/Ud);vec2 C=(floor(B)+0.5)/Ub;gl_FragColor=texture2D(Ua,C);}"), this.Wo(), this.ko(), this.To.start(() => this.So());
|
|
2676
|
+
}
|
|
2677
|
+
Wo() {
|
|
2678
|
+
this.Io = () => {
|
|
2679
|
+
this.ar && this.resizeCanvas(this.tr.width, this.tr.height), this.Ho();
|
|
2680
|
+
}, window.addEventListener("resize", this.Io), this.Po.Xr(), this.Eo.Xr(), window.addEventListener("blur", () => {
|
|
2681
|
+
this.Eo.sn();
|
|
2388
2682
|
});
|
|
2389
2683
|
}
|
|
2390
|
-
|
|
2391
|
-
if (this.
|
|
2392
|
-
|
|
2393
|
-
|
|
2394
|
-
|
|
2684
|
+
So() {
|
|
2685
|
+
if (this.To.measureFrameRate(), this.To.incrementFrame(), this.Lo) return;
|
|
2686
|
+
if (this.ar) {
|
|
2687
|
+
const i = this.xt.context;
|
|
2688
|
+
i.bindTexture(i.TEXTURE_2D, this.No.texture), i.pixelStorei(i.UNPACK_FLIP_Y_WEBGL, 1), i.texImage2D(i.TEXTURE_2D, 0, i.RGBA, i.RGBA, i.UNSIGNED_BYTE, this.tr.targetCanvas), i.bindTexture(i.TEXTURE_2D, null), this.zo.begin(), this.xt.Hs(this.No, 0, 0, this.rn.cols, this.rn.rows), this.xt.Ds(this.Ro), this.Oo(), this.xt.St(this.Ro), this.zo.end();
|
|
2689
|
+
} else this.zo.begin(), this.xt.Ds(this.Ro), this.Oo(), this.xt.St(this.Ro), this.zo.end();
|
|
2690
|
+
this.Go.begin(), this.xt.Ds(this.Bo), this.Bo.Vt({ U0: this.Si.fontFramebuffer, U1: [this.Si.textureColumns, this.Si.textureRows], U2: this.zo.textures[0], U3: this.zo.textures[1], U4: this.zo.textures[2], U5: this.zo.textures[4], U6: this.zo.textures[3], U7: [this.rn.cols, this.rn.rows], U8: [this.Go.width, this.Go.height], U9: this.Go.width / this.Go.height }), this.xt.Is(0, 0, this.tr.width, this.tr.height), this.Go.end();
|
|
2691
|
+
const e = this.xt.state.canvasBackgroundColor;
|
|
2692
|
+
this.xt.Ne(e[0], e[1], e[2], e[3]), this.xt.Ds(this.Do), this.Do.Vt({ Ua: this.Go.textures[0], Ub: [this.Go.width, this.Go.height], Uc: [this.rn.offsetX, this.rn.offsetY], Ud: [this.rn.width, this.rn.height] }), this.xt.Is(this.rn.offsetX, this.rn.offsetY, this.rn.width, this.rn.height);
|
|
2395
2693
|
}
|
|
2396
|
-
setup(
|
|
2397
|
-
this.
|
|
2694
|
+
setup(e) {
|
|
2695
|
+
this.ko = e;
|
|
2398
2696
|
}
|
|
2399
|
-
draw(
|
|
2400
|
-
this.
|
|
2697
|
+
draw(e) {
|
|
2698
|
+
this.Oo = e;
|
|
2401
2699
|
}
|
|
2402
|
-
windowResized(
|
|
2403
|
-
this.
|
|
2700
|
+
windowResized(e) {
|
|
2701
|
+
this.Ho = e;
|
|
2404
2702
|
}
|
|
2405
|
-
resizeCanvas(
|
|
2406
|
-
this.
|
|
2703
|
+
resizeCanvas(e, i) {
|
|
2704
|
+
this.tr.mr(e, i), this.rn.ir(), this.zo.resize(this.rn.cols, this.rn.rows), this.Go.resize(this.rn.width, this.rn.height), this.xt.Zs(), this.Po.An(), this.So();
|
|
2407
2705
|
}
|
|
2408
2706
|
destroy() {
|
|
2409
|
-
this.
|
|
2707
|
+
this.Lo || (this.To.stop(), window.removeEventListener("resize", this.Io), this.Po.Kr(), this.Eo.Kr(), this.Si.Gt(), this.xt.Gt(), this.Go.Gt(), this.Do.Gt(), this.No && this.No.Gt(), this.Lo = !0);
|
|
2410
2708
|
}
|
|
2411
2709
|
get grid() {
|
|
2412
|
-
return this.
|
|
2710
|
+
return this.rn;
|
|
2413
2711
|
}
|
|
2414
2712
|
get font() {
|
|
2415
|
-
return this.
|
|
2713
|
+
return this.Si;
|
|
2416
2714
|
}
|
|
2417
2715
|
get width() {
|
|
2418
|
-
return this.
|
|
2716
|
+
return this.tr.width;
|
|
2419
2717
|
}
|
|
2420
2718
|
get height() {
|
|
2421
|
-
return this.
|
|
2719
|
+
return this.tr.height;
|
|
2422
2720
|
}
|
|
2423
2721
|
get canvas() {
|
|
2424
|
-
return this.
|
|
2722
|
+
return this.tr.canvas;
|
|
2425
2723
|
}
|
|
2426
2724
|
get isDisposed() {
|
|
2427
|
-
return this.
|
|
2725
|
+
return this.Lo;
|
|
2428
2726
|
}
|
|
2429
|
-
get
|
|
2430
|
-
return this.
|
|
2727
|
+
get overlay() {
|
|
2728
|
+
return this.No;
|
|
2431
2729
|
}
|
|
2432
2730
|
}
|
|
2433
|
-
class
|
|
2731
|
+
class Q {
|
|
2434
2732
|
constructor() {
|
|
2435
2733
|
}
|
|
2436
|
-
static create(
|
|
2437
|
-
return new
|
|
2734
|
+
static create(t = {}) {
|
|
2735
|
+
return new de(t);
|
|
2438
2736
|
}
|
|
2439
|
-
static setErrorLevel(
|
|
2440
|
-
|
|
2737
|
+
static setErrorLevel(t) {
|
|
2738
|
+
N.A(t);
|
|
2441
2739
|
}
|
|
2442
2740
|
static get version() {
|
|
2443
|
-
return "0.2.1-beta.
|
|
2741
|
+
return "0.2.1-beta.5";
|
|
2444
2742
|
}
|
|
2445
2743
|
}
|
|
2446
|
-
const
|
|
2744
|
+
const pe = Object.freeze(Object.defineProperty({ __proto__: null }, Symbol.toStringTag, { value: "Module" })), me = Q.create, ve = Q.setErrorLevel, Ae = Q.version;
|
|
2447
2745
|
export {
|
|
2448
|
-
|
|
2449
|
-
|
|
2450
|
-
|
|
2451
|
-
|
|
2452
|
-
|
|
2453
|
-
|
|
2454
|
-
|
|
2455
|
-
|
|
2456
|
-
|
|
2457
|
-
|
|
2458
|
-
|
|
2746
|
+
kt as TextmodeCanvas,
|
|
2747
|
+
ut as TextmodeErrorLevel,
|
|
2748
|
+
Wt as TextmodeFont,
|
|
2749
|
+
q as TextmodeFramebuffer,
|
|
2750
|
+
Ht as TextmodeGrid,
|
|
2751
|
+
z as TextmodeImage,
|
|
2752
|
+
de as Textmodifier,
|
|
2753
|
+
me as create,
|
|
2754
|
+
pe as export,
|
|
2755
|
+
ve as setErrorLevel,
|
|
2756
|
+
Q as textmode,
|
|
2757
|
+
Ae as version
|
|
2459
2758
|
};
|