textmode.js 0.1.8-beta.1 → 0.1.8-beta.3

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.
Files changed (30) hide show
  1. package/dist/textmode.esm.js +1144 -953
  2. package/dist/textmode.esm.min.js +1108 -917
  3. package/dist/textmode.umd.js +19 -19
  4. package/dist/textmode.umd.min.js +17 -17
  5. package/dist/types/Textmode.d.ts +21 -31
  6. package/dist/types/export/image/types.d.ts +1 -1
  7. package/dist/types/export/svg/SVGPathGenerator.d.ts +1 -1
  8. package/dist/types/index.d.ts +2 -1
  9. package/dist/types/textmode/Canvas.d.ts +3 -3
  10. package/dist/types/textmode/ConversionPipeline.d.ts +7 -2
  11. package/dist/types/textmode/Textmodifier.d.ts +29 -20
  12. package/dist/types/textmode/converters/Converter.d.ts +4 -4
  13. package/dist/types/textmode/converters/FeatureConverter.d.ts +3 -3
  14. package/dist/types/textmode/font/CharacterColorMapper.d.ts +4 -9
  15. package/dist/types/textmode/font/CharacterExtractor.d.ts +15 -25
  16. package/dist/types/textmode/font/MetricsCalculator.d.ts +34 -9
  17. package/dist/types/textmode/font/TextmodeFont.d.ts +3 -2
  18. package/dist/types/textmode/font/TextureAtlas.d.ts +29 -13
  19. package/dist/types/textmode/font/index.d.ts +3 -1
  20. package/dist/types/textmode/font/types.d.ts +2 -136
  21. package/dist/types/textmode/font/typr/Typr.d.ts +18 -0
  22. package/dist/types/textmode/font/typr/types.d.ts +254 -0
  23. package/dist/types/textmode/font/utils/CmapParser.d.ts +47 -0
  24. package/dist/types/textmode/font/utils/FontConstants.d.ts +60 -0
  25. package/dist/types/textmode/font/utils/FontTableReader.d.ts +56 -0
  26. package/dist/types/textmode/font/utils/index.d.ts +9 -0
  27. package/dist/types/textmode/mixins/ConversionMixin.d.ts +3 -4
  28. package/dist/types/textmode/mixins/ExportMixin.d.ts +2 -14
  29. package/dist/types/textmode/mixins/RenderingMixin.d.ts +1 -0
  30. package/package.json +1 -1
@@ -1,6 +1,6 @@
1
- var Z = Object.defineProperty;
2
- var q = (E, A, t) => A in E ? Z(E, A, { enumerable: !0, configurable: !0, writable: !0, value: t }) : E[A] = t;
3
- var Q = (E, A, t) => q(E, typeof A != "symbol" ? A + "" : A, t);
1
+ var AA = Object.defineProperty;
2
+ var tA = (E, A, t) => A in E ? AA(E, A, { enumerable: !0, configurable: !0, writable: !0, value: t }) : E[A] = t;
3
+ var Q = (E, A, t) => tA(E, typeof A != "symbol" ? A + "" : A, t);
4
4
  class I extends Error {
5
5
  constructor(A, t = {}) {
6
6
  super(I.A(A, t)), this.name = "TextmodeError";
@@ -11,9 +11,9 @@ class I extends Error {
11
11
  e += `
12
12
 
13
13
  📋 Context:`;
14
- for (const [r, B] of Object.entries(t))
14
+ for (const [s, r] of Object.entries(t))
15
15
  e += `
16
- - ${r}: ${I.i(B)}`;
16
+ - ${s}: ${I.i(r)}`;
17
17
  }
18
18
  return e += `
19
19
 
@@ -33,45 +33,45 @@ class I extends Error {
33
33
  return A + "";
34
34
  }
35
35
  }
36
- var AA = ((E) => (E[E.SILENT = 0] = "SILENT", E[E.WARNING = 1] = "WARNING", E[E.ERROR = 2] = "ERROR", E[E.THROW = 3] = "THROW", E))(AA || {});
37
- const x = class x {
36
+ var eA = ((E) => (E[E.SILENT = 0] = "SILENT", E[E.WARNING = 1] = "WARNING", E[E.ERROR = 2] = "ERROR", E[E.THROW = 3] = "THROW", E))(eA || {});
37
+ const v = class v {
38
38
  constructor() {
39
39
  Q(this, "h", { globalLevel: 3 });
40
40
  }
41
- static D() {
42
- return x.o || (x.o = new x()), x.o;
41
+ static l() {
42
+ return v.o || (v.o = new v()), v.o;
43
43
  }
44
- l(A, t) {
45
- const e = "%c[textmode.js] Oops! (╯°□°)╯︵ Something went wrong in your code.", r = "color: #f44336; font-weight: bold; background: #ffebee; padding: 2px 6px; border-radius: 3px;";
44
+ D(A, t) {
45
+ const e = "%c[textmode.js] Oops! (╯°□°)╯︵ Something went wrong in your code.", s = "color: #f44336; font-weight: bold; background: #ffebee; padding: 2px 6px; border-radius: 3px;";
46
46
  switch (this.h.globalLevel) {
47
47
  case 0:
48
48
  return !1;
49
49
  case 1:
50
- return console.group(e, r), console.warn(I.A(A, t)), console.groupEnd(), !1;
50
+ return console.group(e, s), console.warn(I.A(A, t)), console.groupEnd(), !1;
51
51
  case 2:
52
- return console.group(e, r), console.error(I.A(A, t)), console.groupEnd(), !1;
52
+ return console.group(e, s), console.error(I.A(A, t)), console.groupEnd(), !1;
53
53
  default:
54
54
  throw new I(A, t);
55
55
  }
56
56
  }
57
57
  C(A, t, e) {
58
- return !!A || (this.l(t, e), !1);
58
+ return !!A || (this.D(t, e), !1);
59
59
  }
60
60
  u(A) {
61
61
  this.h.globalLevel = A;
62
62
  }
63
63
  };
64
- Q(x, "o", null);
65
- let U = x;
66
- const P = U.D(), N = /* @__PURE__ */ new WeakMap();
64
+ Q(v, "o", null);
65
+ let Y = v;
66
+ const u = Y.l(), X = /* @__PURE__ */ new WeakMap();
67
67
  function F(E, A) {
68
- N.set(E, A);
68
+ X.set(E, A);
69
69
  }
70
- function V(E) {
71
- return N.get(E);
70
+ function J(E) {
71
+ return X.get(E);
72
72
  }
73
73
  class K {
74
- constructor(A, t, e = t, r = {}) {
74
+ constructor(A, t, e = t, s = {}) {
75
75
  Q(this, "P");
76
76
  Q(this, "I");
77
77
  Q(this, "m");
@@ -80,9 +80,9 @@ class K {
80
80
  Q(this, "h");
81
81
  Q(this, "v", null);
82
82
  Q(this, "M", null);
83
- this.P = A, this.p = t, this._ = e, this.h = { filter: "nearest", wrap: "clamp", format: "rgba", type: "unsigned_byte", ...r }, this.m = this.G(), this.I = A.createFramebuffer(), this.F();
83
+ this.P = A, this.p = t, this._ = e, this.h = { filter: "nearest", wrap: "clamp", format: "rgba", type: "unsigned_byte", ...s }, this.m = this.G(), this.I = A.createFramebuffer(), this.F();
84
84
  }
85
- Y(A) {
85
+ $(A) {
86
86
  const { P: t } = this, e = t.getParameter(t.FRAMEBUFFER_BINDING);
87
87
  t.bindFramebuffer(t.FRAMEBUFFER, this.I);
88
88
  try {
@@ -94,10 +94,10 @@ class K {
94
94
  G() {
95
95
  const { P: A } = this, t = A.createTexture();
96
96
  A.bindTexture(A.TEXTURE_2D, t);
97
- const e = this.h.filter === "linear" ? A.LINEAR : A.NEAREST, r = this.h.wrap === "repeat" ? A.REPEAT : A.CLAMP_TO_EDGE;
98
- return A.texParameteri(A.TEXTURE_2D, A.TEXTURE_MIN_FILTER, e), A.texParameteri(A.TEXTURE_2D, A.TEXTURE_MAG_FILTER, e), A.texParameteri(A.TEXTURE_2D, A.TEXTURE_WRAP_S, r), A.texParameteri(A.TEXTURE_2D, A.TEXTURE_WRAP_T, r), this.$(), t;
97
+ const e = this.h.filter === "linear" ? A.LINEAR : A.NEAREST, s = this.h.wrap === "repeat" ? A.REPEAT : A.CLAMP_TO_EDGE;
98
+ return A.texParameteri(A.TEXTURE_2D, A.TEXTURE_MIN_FILTER, e), A.texParameteri(A.TEXTURE_2D, A.TEXTURE_MAG_FILTER, e), A.texParameteri(A.TEXTURE_2D, A.TEXTURE_WRAP_S, s), A.texParameteri(A.TEXTURE_2D, A.TEXTURE_WRAP_T, s), this.Y(), t;
99
99
  }
100
- $() {
100
+ Y() {
101
101
  const { P: A } = this, t = this.h.type === "float" ? A.FLOAT : A.UNSIGNED_BYTE;
102
102
  A.texImage2D(A.TEXTURE_2D, 0, A.RGBA, this.p, this._, 0, A.RGBA, t, null);
103
103
  }
@@ -110,12 +110,12 @@ class K {
110
110
  t.bindTexture(t.TEXTURE_2D, this.m), t.pixelStorei(t.UNPACK_FLIP_Y_WEBGL, 1), t.texImage2D(t.TEXTURE_2D, 0, t.RGBA, t.RGBA, t.UNSIGNED_BYTE, A), t.bindTexture(t.TEXTURE_2D, null);
111
111
  }
112
112
  updatePixels(A, t, e) {
113
- const { P: r } = this;
114
- r.bindTexture(r.TEXTURE_2D, this.m), r.texImage2D(r.TEXTURE_2D, 0, r.RGBA, t, e, 0, r.RGBA, r.UNSIGNED_BYTE, A), r.bindTexture(r.TEXTURE_2D, null);
113
+ const { P: s } = this;
114
+ s.bindTexture(s.TEXTURE_2D, this.m), s.texImage2D(s.TEXTURE_2D, 0, s.RGBA, t, e, 0, s.RGBA, s.UNSIGNED_BYTE, A), s.bindTexture(s.TEXTURE_2D, null);
115
115
  }
116
116
  resize(A, t) {
117
117
  const { P: e } = this;
118
- this.p = A, this._ = t, this.M = null, e.bindTexture(e.TEXTURE_2D, this.m), this.$(), e.bindTexture(e.TEXTURE_2D, null);
118
+ this.p = A, this._ = t, this.M = null, e.bindTexture(e.TEXTURE_2D, this.m), this.Y(), e.bindTexture(e.TEXTURE_2D, null);
119
119
  }
120
120
  begin() {
121
121
  const { P: A } = this;
@@ -128,25 +128,25 @@ class K {
128
128
  }
129
129
  loadPixels() {
130
130
  const { P: A } = this;
131
- this.M || (this.M = new Uint8Array(this.p * this._ * 4)), this.Y(() => {
131
+ this.M || (this.M = new Uint8Array(this.p * this._ * 4)), this.$(() => {
132
132
  A.readPixels(0, 0, this.p, this._, A.RGBA, A.UNSIGNED_BYTE, this.M);
133
133
  });
134
134
  }
135
- get(A, t, e, r) {
136
- const { P: B } = this;
135
+ get(A, t, e, s) {
136
+ const { P: r } = this;
137
137
  if (A === void 0 && t === void 0) {
138
- const s = new Uint8Array(this.p * this._ * 4);
139
- return this.Y(() => (B.readPixels(0, 0, this.p, this._, B.RGBA, B.UNSIGNED_BYTE, s), s));
138
+ const i = new Uint8Array(this.p * this._ * 4);
139
+ return this.$(() => (r.readPixels(0, 0, this.p, this._, r.RGBA, r.UNSIGNED_BYTE, i), i));
140
140
  }
141
- if (e === void 0 && r === void 0) {
141
+ if (e === void 0 && s === void 0) {
142
142
  (A < 0 || t < 0 || A >= this.p || t >= this._) && (console.warn("The x and y values passed to Framebuffer.get are outside of its range and will be clamped."), A = Math.max(0, Math.min(A, this.p - 1)), t = Math.max(0, Math.min(t, this._ - 1)));
143
- const s = new Uint8Array(4);
144
- return this.Y(() => (B.readPixels(A, t, 1, 1, B.RGBA, B.UNSIGNED_BYTE, s), [s[0], s[1], s[2], s[3]]));
143
+ const i = new Uint8Array(4);
144
+ return this.$(() => (r.readPixels(A, t, 1, 1, r.RGBA, r.UNSIGNED_BYTE, i), [i[0], i[1], i[2], i[3]]));
145
145
  }
146
146
  {
147
- A = Math.max(0, Math.min(A, this.p - 1)), t = Math.max(0, Math.min(t, this._ - 1)), e = Math.max(1, Math.min(e, this.p - A)), r = Math.max(1, Math.min(r, this._ - t));
148
- const s = new Uint8Array(e * r * 4);
149
- return this.Y(() => (B.readPixels(A, t, e, r, B.RGBA, B.UNSIGNED_BYTE, s), s));
147
+ A = Math.max(0, Math.min(A, this.p - 1)), t = Math.max(0, Math.min(t, this._ - 1)), e = Math.max(1, Math.min(e, this.p - A)), s = Math.max(1, Math.min(s, this._ - t));
148
+ const i = new Uint8Array(e * s * 4);
149
+ return this.$(() => (r.readPixels(A, t, e, s, r.RGBA, r.UNSIGNED_BYTE, i), i));
150
150
  }
151
151
  }
152
152
  S() {
@@ -168,7 +168,7 @@ class K {
168
168
  return this.M;
169
169
  }
170
170
  }
171
- class w {
171
+ class x {
172
172
  constructor(A, t, e) {
173
173
  Q(this, "P");
174
174
  Q(this, "O");
@@ -176,31 +176,31 @@ class w {
176
176
  Q(this, "k", /* @__PURE__ */ new Map());
177
177
  Q(this, "V", 0);
178
178
  Q(this, "R");
179
- this.P = A, this.O = this.H(t, e), this.R = A.getParameter(A.MAX_TEXTURE_IMAGE_UNITS), this.J();
179
+ this.P = A, this.O = this.H(t, e), this.R = A.getParameter(A.MAX_TEXTURE_IMAGE_UNITS), this.L();
180
180
  }
181
- J() {
181
+ L() {
182
182
  const A = this.P.getProgramParameter(this.O, this.P.ACTIVE_UNIFORMS);
183
183
  for (let t = 0; t < A; t++) {
184
184
  const e = this.P.getActiveUniform(this.O, t);
185
185
  if (e) {
186
- const r = this.P.getUniformLocation(this.O, e.name);
187
- r && (this.U.set(e.name, r), this.k.set(e.name, e.type));
186
+ const s = this.P.getUniformLocation(this.O, e.name);
187
+ s && (this.U.set(e.name, s), this.k.set(e.name, e.type));
188
188
  }
189
189
  }
190
190
  }
191
191
  H(A, t) {
192
- const e = this.L(this.P.VERTEX_SHADER, A), r = this.L(this.P.FRAGMENT_SHADER, t), B = this.P.createProgram();
193
- if (this.P.attachShader(B, e), this.P.attachShader(B, r), this.P.linkProgram(B), !this.P.getProgramParameter(B, this.P.LINK_STATUS)) {
194
- const s = this.P.getProgramInfoLog(B);
195
- throw Error("Shader program link error: " + s);
192
+ const e = this.J(this.P.VERTEX_SHADER, A), s = this.J(this.P.FRAGMENT_SHADER, t), r = this.P.createProgram();
193
+ if (this.P.attachShader(r, e), this.P.attachShader(r, s), this.P.linkProgram(r), !this.P.getProgramParameter(r, this.P.LINK_STATUS)) {
194
+ const i = this.P.getProgramInfoLog(r);
195
+ throw Error("Shader program link error: " + i);
196
196
  }
197
- return this.P.deleteShader(e), this.P.deleteShader(r), B;
197
+ return this.P.deleteShader(e), this.P.deleteShader(s), r;
198
198
  }
199
- L(A, t) {
199
+ J(A, t) {
200
200
  const e = this.P.createShader(A);
201
201
  if (this.P.shaderSource(e, t), this.P.compileShader(e), !this.P.getShaderParameter(e, this.P.COMPILE_STATUS)) {
202
- const r = this.P.getShaderInfoLog(e);
203
- throw this.P.deleteShader(e), Error("Shader compilation error: " + r);
202
+ const s = this.P.getShaderInfoLog(e);
203
+ throw this.P.deleteShader(e), Error("Shader compilation error: " + s);
204
204
  }
205
205
  return e;
206
206
  }
@@ -226,14 +226,14 @@ class w {
226
226
  console.warn(`Unsupported array length ${t.length} for uniform '${A}'`);
227
227
  }
228
228
  else if (t instanceof WebGLTexture) {
229
- const r = this.Z();
230
- this.P.uniform1i(e, r), this.P.activeTexture(this.P.TEXTURE0 + r), this.P.bindTexture(this.P.TEXTURE_2D, t);
229
+ const s = this.N();
230
+ this.P.uniform1i(e, s), this.P.activeTexture(this.P.TEXTURE0 + s), this.P.bindTexture(this.P.TEXTURE_2D, t);
231
231
  } else if (t instanceof K) {
232
- const r = this.Z();
233
- this.P.uniform1i(e, r), this.P.activeTexture(this.P.TEXTURE0 + r), this.P.bindTexture(this.P.TEXTURE_2D, t.texture);
232
+ const s = this.N();
233
+ this.P.uniform1i(e, s), this.P.activeTexture(this.P.TEXTURE0 + s), this.P.bindTexture(this.P.TEXTURE_2D, t.texture);
234
234
  } else console.warn(`Unsupported uniform type for '${A}':`, typeof t);
235
235
  }
236
- Z() {
236
+ N() {
237
237
  return this.V >= this.R && console.warn(`Exceeded maximum texture units (${this.R}). Texture may not render correctly.`), this.V++;
238
238
  }
239
239
  j(A) {
@@ -250,18 +250,18 @@ class w {
250
250
  this.V = 0;
251
251
  }
252
252
  }
253
- class X {
253
+ class Z {
254
254
  constructor(A) {
255
255
  Q(this, "P");
256
- Q(this, "N", null);
256
+ Q(this, "Z", null);
257
257
  Q(this, "X", 16);
258
258
  Q(this, "q", /* @__PURE__ */ new Map());
259
259
  this.P = A;
260
260
  }
261
261
  AA() {
262
- if (this.N) return;
262
+ if (this.Z) return;
263
263
  const A = this.P;
264
- this.N = A.createBuffer(), A.bindBuffer(A.ARRAY_BUFFER, this.N);
264
+ this.Z = A.createBuffer(), A.bindBuffer(A.ARRAY_BUFFER, this.Z);
265
265
  }
266
266
  tA() {
267
267
  const A = this.P, t = A.getParameter(A.CURRENT_PROGRAM);
@@ -272,55 +272,55 @@ class X {
272
272
  const e = this.P;
273
273
  e.disableVertexAttribArray(A), e.disableVertexAttribArray(t);
274
274
  }
275
- BA(A, t) {
276
- const e = this.P, r = V(e) || [0, 0, e.canvas.width, e.canvas.height];
277
- return { nx: A / r[2] * 2 - 1, ny: 1 - t / r[3] * 2 };
275
+ sA(A, t) {
276
+ const e = this.P, s = J(e) || [0, 0, e.canvas.width, e.canvas.height];
277
+ return { nx: A / s[2] * 2 - 1, ny: 1 - t / s[3] * 2 };
278
278
  }
279
- QA(A, t, e, r) {
280
- const B = this.P;
281
- this.AA(), B.bindBuffer(B.ARRAY_BUFFER, this.N);
282
- const s = new Float32Array([A, r, 0, 0, e, r, 1, 0, A, t, 0, 1, A, t, 0, 1, e, r, 1, 0, e, t, 1, 1]);
283
- B.bufferData(B.ARRAY_BUFFER, s, B.DYNAMIC_DRAW);
279
+ rA(A, t, e, s) {
280
+ const r = this.P;
281
+ this.AA(), r.bindBuffer(r.ARRAY_BUFFER, this.Z);
282
+ const i = new Float32Array([A, s, 0, 0, e, s, 1, 0, A, t, 0, 1, A, t, 0, 1, e, s, 1, 0, e, t, 1, 1]);
283
+ r.bufferData(r.ARRAY_BUFFER, i, r.DYNAMIC_DRAW);
284
284
  }
285
285
  S() {
286
- this.N && this.P.deleteBuffer(this.N);
286
+ this.Z && this.P.deleteBuffer(this.Z);
287
287
  }
288
288
  }
289
- class tA extends X {
289
+ class sA extends Z {
290
290
  constructor(A) {
291
291
  super(A);
292
292
  }
293
- sA(A, t, e, r) {
294
- const B = this.BA(A, t), s = this.BA(A + e, t + r);
295
- this.QA(B.nx, B.ny, s.nx, s.ny);
296
- const i = this.tA();
297
- this.P.drawArrays(this.P.TRIANGLES, 0, 6), this.eA(i.positionLoc, i.texLoc);
293
+ BA(A, t, e, s) {
294
+ const r = this.sA(A, t), i = this.sA(A + e, t + s);
295
+ this.rA(r.nx, r.ny, i.nx, i.ny);
296
+ const B = this.tA();
297
+ this.P.drawArrays(this.P.TRIANGLES, 0, 6), this.eA(B.positionLoc, B.texLoc);
298
298
  }
299
- rA(A, t, e, r, B) {
300
- this.sA(A, t, e, B), this.sA(A + e - B, t, B, r), this.sA(A, t + r - B, e, B), this.sA(A, t, B, r);
299
+ iA(A, t, e, s, r) {
300
+ this.BA(A, t, e, r), this.BA(A + e - r, t, r, s), this.BA(A, t + s - r, e, r), this.BA(A, t, r, s);
301
301
  }
302
302
  }
303
- class eA extends X {
303
+ class rA extends Z {
304
304
  constructor(A) {
305
305
  super(A);
306
306
  }
307
- iA(A, t, e, r, B) {
308
- const s = e - A, i = r - t, o = Math.hypot(s, i);
307
+ QA(A, t, e, s, r) {
308
+ const i = e - A, B = s - t, o = Math.hypot(i, B);
309
309
  if (o === 0) {
310
- const n = B / 2, a = this.BA(A - n, t - n), h = this.BA(A + n, t + n);
311
- this.QA(a.nx, a.ny, h.nx, h.ny);
310
+ const g = r / 2, a = this.sA(A - g, t - g), h = this.sA(A + g, t + g);
311
+ this.rA(a.nx, a.ny, h.nx, h.ny);
312
312
  } else {
313
- const n = -i / o, a = s / o, h = B / 2, C = A + n * h, D = t + a * h, c = A - n * h, u = t - a * h, f = e + n * h, d = r + a * h, m = e - n * h, p = r - a * h, M = this.BA(C, D), b = this.BA(c, u), v = this.BA(f, d), z = this.BA(m, p), y = this.P;
314
- this.AA(), y.bindBuffer(y.ARRAY_BUFFER, this.N);
315
- const j = new Float32Array([M.nx, M.ny, 0, 0, b.nx, b.ny, 0, 1, v.nx, v.ny, 1, 0, b.nx, b.ny, 0, 1, z.nx, z.ny, 1, 1, v.nx, v.ny, 1, 0]);
316
- y.bufferData(y.ARRAY_BUFFER, j, y.DYNAMIC_DRAW);
313
+ const g = -B / o, a = i / o, h = r / 2, D = A + g * h, c = t + a * h, l = A - g * h, d = t - a * h, C = e + g * h, P = s + a * h, p = e - g * h, m = s - a * h, y = this.sA(D, c), b = this.sA(l, d), _ = this.sA(C, P), V = this.sA(p, m), G = this.P;
314
+ this.AA(), G.bindBuffer(G.ARRAY_BUFFER, this.Z);
315
+ const q = new Float32Array([y.nx, y.ny, 0, 0, b.nx, b.ny, 0, 1, _.nx, _.ny, 1, 0, b.nx, b.ny, 0, 1, V.nx, V.ny, 1, 1, _.nx, _.ny, 1, 0]);
316
+ G.bufferData(G.ARRAY_BUFFER, q, G.DYNAMIC_DRAW);
317
317
  }
318
- const g = this.tA();
319
- this.P.drawArrays(this.P.TRIANGLES, 0, 6), this.eA(g.positionLoc, g.texLoc);
318
+ const n = this.tA();
319
+ this.P.drawArrays(this.P.TRIANGLES, 0, 6), this.eA(n.positionLoc, n.texLoc);
320
320
  }
321
321
  }
322
322
  var R = "attribute vec2 a_position;attribute vec2 a_texCoord;varying vec2 v_uv;uniform float u_rotation;uniform vec2 u_center;uniform float u_aspectRatio;mat2 rotate2D(float angle){float s=sin(angle);float c=cos(angle);return mat2(c,-s,s,c);}void main(){v_uv=a_texCoord;vec2 pos=a_position;pos-=u_center;pos.x*=u_aspectRatio;pos=rotate2D(-u_rotation)*pos;pos.x/=u_aspectRatio;pos+=u_center;gl_Position=vec4(pos,0.0,1.0);}";
323
- class rA {
323
+ class iA {
324
324
  constructor(A) {
325
325
  Q(this, "P");
326
326
  Q(this, "EA");
@@ -329,107 +329,107 @@ class rA {
329
329
  Q(this, "nA");
330
330
  Q(this, "aA");
331
331
  Q(this, "hA", [1, 1, 1, 1]);
332
- Q(this, "DA", !0);
333
- Q(this, "lA", [0, 0, 0, 1]);
334
- Q(this, "CA", 1);
335
- Q(this, "cA", !0);
332
+ Q(this, "lA", !0);
333
+ Q(this, "cA", [0, 0, 0, 1]);
334
+ Q(this, "DA", 1);
335
+ Q(this, "CA", !0);
336
336
  Q(this, "uA", 0);
337
337
  Q(this, "PA", []);
338
- this.P = A, this.EA = new w(this.P, R, "precision lowp float;uniform sampler2D u_texture;varying vec2 v_uv;void main(){gl_FragColor=texture2D(u_texture,v_uv);}"), this.gA = new w(this.P, R, "precision lowp float;uniform vec4 u_color;void main(){gl_FragColor=u_color;}"), this.nA = new tA(this.P), this.aA = new eA(this.P), this.P.enable(this.P.BLEND), this.P.blendEquation(this.P.FUNC_ADD), this.P.blendFunc(this.P.ONE, this.P.ONE_MINUS_SRC_ALPHA), F(this.P, [0, 0, this.P.canvas.width, this.P.canvas.height]);
338
+ this.P = A, this.EA = new x(this.P, R, "precision lowp float;uniform sampler2D u_texture;varying vec2 v_uv;void main(){gl_FragColor=texture2D(u_texture,v_uv);}"), this.gA = new x(this.P, R, "precision lowp float;uniform vec4 u_color;void main(){gl_FragColor=u_color;}"), this.nA = new sA(this.P), this.aA = new rA(this.P), this.P.enable(this.P.BLEND), this.P.blendEquation(this.P.FUNC_ADD), this.P.blendFunc(this.P.ONE, this.P.ONE_MINUS_SRC_ALPHA), F(this.P, [0, 0, this.P.canvas.width, this.P.canvas.height]);
339
339
  }
340
340
  IA(A) {
341
341
  this.oA !== A && (this.oA = A, A.K());
342
342
  }
343
- wA(A, t, e, r) {
344
- if (this.DA = !0, t === void 0 && e === void 0 && r === void 0) {
345
- const B = A / 255;
346
- this.hA = [B, B, B, 1];
347
- } else if (e !== void 0 && r === void 0) this.hA = [A / 255, t / 255, e / 255, 1];
343
+ wA(A, t, e, s) {
344
+ if (this.lA = !0, t === void 0 && e === void 0 && s === void 0) {
345
+ const r = A / 255;
346
+ this.hA = [r, r, r, 1];
347
+ } else if (e !== void 0 && s === void 0) this.hA = [A / 255, t / 255, e / 255, 1];
348
348
  else {
349
- if (e === void 0 || r === void 0) throw Error("Invalid fill parameters. Use fill(gray), fill(r,g,b), or fill(r,g,b,a)");
350
- this.hA = [A / 255, t / 255, e / 255, r / 255];
349
+ if (e === void 0 || s === void 0) throw Error("Invalid fill parameters. Use fill(gray), fill(r,g,b), or fill(r,g,b,a)");
350
+ this.hA = [A / 255, t / 255, e / 255, s / 255];
351
351
  }
352
352
  }
353
- fA(A, t, e, r) {
354
- if (this.cA = !0, t === void 0 && e === void 0 && r === void 0) {
355
- const B = A / 255;
356
- this.lA = [B, B, B, 1];
357
- } else if (e !== void 0 && r === void 0) this.lA = [A / 255, t / 255, e / 255, 1];
353
+ fA(A, t, e, s) {
354
+ if (this.CA = !0, t === void 0 && e === void 0 && s === void 0) {
355
+ const r = A / 255;
356
+ this.cA = [r, r, r, 1];
357
+ } else if (e !== void 0 && s === void 0) this.cA = [A / 255, t / 255, e / 255, 1];
358
358
  else {
359
- if (e === void 0 || r === void 0) throw Error("Invalid stroke parameters. Use stroke(gray), stroke(r,g,b), or stroke(r,g,b,a)");
360
- this.lA = [A / 255, t / 255, e / 255, r / 255];
359
+ if (e === void 0 || s === void 0) throw Error("Invalid stroke parameters. Use stroke(gray), stroke(r,g,b), or stroke(r,g,b,a)");
360
+ this.cA = [A / 255, t / 255, e / 255, s / 255];
361
361
  }
362
362
  }
363
363
  dA(A) {
364
364
  if (A < 0) throw Error("Stroke weight must be non-negative");
365
- this.CA = A;
365
+ this.DA = A;
366
366
  }
367
367
  mA() {
368
- this.cA = !1;
368
+ this.CA = !1;
369
369
  }
370
370
  pA() {
371
- this.DA = !1;
371
+ this.lA = !1;
372
372
  }
373
373
  _A(A) {
374
374
  this.uA = A;
375
375
  }
376
376
  vA() {
377
- this.PA.push({ fillColor: [...this.hA], fillMode: this.DA, strokeColor: [...this.lA], strokeWeight: this.CA, strokeMode: this.cA, rotation: this.uA });
377
+ this.PA.push({ fillColor: [...this.hA], fillMode: this.lA, strokeColor: [...this.cA], strokeWeight: this.DA, strokeMode: this.CA, rotation: this.uA });
378
378
  }
379
379
  bA() {
380
380
  const A = this.PA.pop();
381
- A ? (this.hA = A.fillColor, this.DA = A.fillMode, this.lA = A.strokeColor, this.CA = A.strokeWeight, this.cA = A.strokeMode, this.uA = A.rotation) : console.warn("pop() called without matching push()");
381
+ A ? (this.hA = A.fillColor, this.lA = A.fillMode, this.cA = A.strokeColor, this.DA = A.strokeWeight, this.CA = A.strokeMode, this.uA = A.rotation) : console.warn("pop() called without matching push()");
382
382
  }
383
383
  xA() {
384
384
  this.oA = null, this.PA = [], this.uA = 0;
385
385
  }
386
386
  yA(A, t) {
387
- return new w(this.P, A, t);
387
+ return new x(this.P, A, t);
388
388
  }
389
389
  MA(A) {
390
- return new w(this.P, R, A);
390
+ return new x(this.P, R, A);
391
391
  }
392
392
  GA(A, t) {
393
393
  this.oA.setUniform(A, t);
394
394
  }
395
- FA(A, t, e, r) {
395
+ FA(A, t, e, s) {
396
396
  if (this.oA !== null) {
397
- const { centerX: a, centerY: h, radians: C, aspectRatio: D } = this.YA(A, t, e, r);
398
- return this.GA("u_rotation", C), this.GA("u_center", [a, h]), this.GA("u_aspectRatio", D), this.nA.sA(A, t, e, r), void (this.oA = null);
397
+ const { centerX: a, centerY: h, radians: D, aspectRatio: c } = this.$A(A, t, e, s);
398
+ return this.GA("u_rotation", D), this.GA("u_center", [a, h]), this.GA("u_aspectRatio", c), this.nA.BA(A, t, e, s), void (this.oA = null);
399
399
  }
400
- const B = this.gA;
401
- let s = 0, i = 0, o = 0, g = 1;
402
- const n = this.YA(A, t, e, r);
403
- s = n.centerX, i = n.centerY, o = n.radians, g = n.aspectRatio, this.DA && (this.IA(B), this.GA("u_color", this.hA), this.GA("u_rotation", o), this.GA("u_center", [s, i]), this.GA("u_aspectRatio", g), this.nA.sA(A, t, e, r)), this.cA && this.CA > 0 && (this.IA(B), this.GA("u_color", this.lA), this.GA("u_rotation", o), this.GA("u_center", [s, i]), this.GA("u_aspectRatio", g), this.nA.rA(A, t, e, r, this.CA)), this.oA = null;
400
+ const r = this.gA;
401
+ let i = 0, B = 0, o = 0, n = 1;
402
+ const g = this.$A(A, t, e, s);
403
+ i = g.centerX, B = g.centerY, o = g.radians, n = g.aspectRatio, this.lA && (this.IA(r), this.GA("u_color", this.hA), this.GA("u_rotation", o), this.GA("u_center", [i, B]), this.GA("u_aspectRatio", n), this.nA.BA(A, t, e, s)), this.CA && this.DA > 0 && (this.IA(r), this.GA("u_color", this.cA), this.GA("u_rotation", o), this.GA("u_center", [i, B]), this.GA("u_aspectRatio", n), this.nA.iA(A, t, e, s, this.DA)), this.oA = null;
404
404
  }
405
- $A(A, t, e, r) {
405
+ YA(A, t, e, s) {
406
406
  if (this.oA !== null) {
407
- const c = (A + e) / 2, u = (t + r) / 2, f = Math.abs(e - A) || 1, d = Math.abs(r - t) || 1, { centerX: m, centerY: p, radians: M, aspectRatio: b } = this.YA(c - f / 2, u - d / 2, f, d);
408
- this.GA("u_rotation", M), this.GA("u_center", [m, p]), this.GA("u_aspectRatio", b);
409
- const v = this.CA > 0 ? this.CA : 1;
410
- return this.aA.iA(A, t, e, r, v), void (this.oA = null);
407
+ const l = (A + e) / 2, d = (t + s) / 2, C = Math.abs(e - A) || 1, P = Math.abs(s - t) || 1, { centerX: p, centerY: m, radians: y, aspectRatio: b } = this.$A(l - C / 2, d - P / 2, C, P);
408
+ this.GA("u_rotation", y), this.GA("u_center", [p, m]), this.GA("u_aspectRatio", b);
409
+ const _ = this.DA > 0 ? this.DA : 1;
410
+ return this.aA.QA(A, t, e, s, _), void (this.oA = null);
411
411
  }
412
- if (!this.cA || this.CA <= 0) return;
413
- const B = this.gA, s = (A + e) / 2, i = (t + r) / 2, o = Math.abs(e - A) || 1, g = Math.abs(r - t) || 1, n = this.uA !== 0;
414
- let a = 0, h = 0, C = 0, D = 1;
415
- if (n) {
416
- const c = this.YA(s - o / 2, i - g / 2, o, g);
417
- a = c.centerX, h = c.centerY, C = c.radians, D = c.aspectRatio;
412
+ if (!this.CA || this.DA <= 0) return;
413
+ const r = this.gA, i = (A + e) / 2, B = (t + s) / 2, o = Math.abs(e - A) || 1, n = Math.abs(s - t) || 1, g = this.uA !== 0;
414
+ let a = 0, h = 0, D = 0, c = 1;
415
+ if (g) {
416
+ const l = this.$A(i - o / 2, B - n / 2, o, n);
417
+ a = l.centerX, h = l.centerY, D = l.radians, c = l.aspectRatio;
418
418
  }
419
- this.IA(B), this.GA("u_color", this.lA), n && (this.GA("u_rotation", C), this.GA("u_center", [a, h]), this.GA("u_aspectRatio", D)), this.aA.iA(A, t, e, r, this.CA);
419
+ this.IA(r), this.GA("u_color", this.cA), g && (this.GA("u_rotation", D), this.GA("u_center", [a, h]), this.GA("u_aspectRatio", c)), this.aA.QA(A, t, e, s, this.DA);
420
420
  }
421
- YA(A, t, e, r) {
422
- const B = V(this.P) || [0, 0, this.P.canvas.width, this.P.canvas.height], s = B[2], i = B[3], o = s / i;
423
- return { centerX: (A + e / 2) / s * 2 - 1, centerY: 1 - (t + r / 2) / i * 2, radians: this.uA * Math.PI / 180, aspectRatio: o };
421
+ $A(A, t, e, s) {
422
+ const r = J(this.P) || [0, 0, this.P.canvas.width, this.P.canvas.height], i = r[2], B = r[3], o = i / B;
423
+ return { centerX: (A + e / 2) / i * 2 - 1, centerY: 1 - (t + s / 2) / B * 2, radians: this.uA * Math.PI / 180, aspectRatio: o };
424
424
  }
425
425
  TA(A, t, e = {}) {
426
426
  return new K(this.P, A, t, e);
427
427
  }
428
- SA(A, t = A, e = A, r = 255) {
429
- this.OA(A / 255, t / 255, e / 255, r / 255);
428
+ SA(A, t = A, e = A, s = 255) {
429
+ this.OA(A / 255, t / 255, e / 255, s / 255);
430
430
  }
431
- OA(A = 0, t = 0, e = 0, r = 0) {
432
- this.P.clearColor(A, t, e, r), this.P.clear(this.P.COLOR_BUFFER_BIT);
431
+ OA(A = 0, t = 0, e = 0, s = 0) {
432
+ this.P.clearColor(A, t, e, s), this.P.clear(this.P.COLOR_BUFFER_BIT);
433
433
  }
434
434
  UA() {
435
435
  this.P.viewport(0, 0, this.P.canvas.width, this.P.canvas.height), F(this.P, [0, 0, this.P.canvas.width, this.P.canvas.height]);
@@ -440,312 +440,484 @@ class rA {
440
440
  S() {
441
441
  this.EA.S(), this.gA.S(), this.nA.S(), this.aA.S();
442
442
  }
443
- kA(A, t, e, r, B) {
444
- const s = this.P, i = r ?? A.width, o = B ?? A.height;
443
+ kA(A, t, e, s, r) {
444
+ const i = this.P, B = s ?? A.width, o = r ?? A.height;
445
445
  this.IA(this.EA), this.GA("u_texture", A.texture);
446
- const g = this.YA(t, e, i, o);
447
- this.GA("u_rotation", g.radians), this.GA("u_center", [g.centerX, g.centerY]), this.GA("u_aspectRatio", g.aspectRatio), this.nA.sA(t, e, i, o), s.bindTexture(s.TEXTURE_2D, null), this.oA = null;
446
+ const n = this.$A(t, e, B, o);
447
+ this.GA("u_rotation", n.radians), this.GA("u_center", [n.centerX, n.centerY]), this.GA("u_aspectRatio", n.aspectRatio), this.nA.BA(t, e, B, o), i.bindTexture(i.TEXTURE_2D, null), this.oA = null;
448
448
  }
449
449
  }
450
- var _, l = {};
451
- l.parse = function(E) {
452
- var A = function(t, e, r, B) {
453
- var s = l.T, i = { cmap: s.cmap, head: s.head, hhea: s.hhea, maxp: s.maxp, hmtx: s.hmtx, loca: s.loca, glyf: s.glyf }, o = { _data: t, _index: e, _offset: r };
454
- for (var g in i) {
455
- var n = l.findTable(t, g, r);
456
- if (n) {
457
- var a = n[0], h = B[a];
458
- h == null && (h = i[g].parseTab(t, a, n[1], o)), o[g] = B[a] = h;
459
- }
460
- }
461
- return o;
462
- }(new Uint8Array(E), 0, 0, {});
463
- return [A];
464
- }, l.findTable = function(E, A, t) {
465
- for (var e = l.B, r = e.readUshort(E, t + 4), B = t + 12, s = 0; s < r; s++) {
466
- var i = e.readASCII(E, B, 4);
467
- e.readUint(E, B + 4);
468
- var o = e.readUint(E, B + 8), g = e.readUint(E, B + 12);
469
- if (i == A) return [o, g];
470
- B += 16;
471
- }
472
- return null;
473
- }, l.T = {}, l.B = { readShort: function(E, A) {
474
- return l.B.t.uint16[0] = E[A] << 8 | E[A + 1], l.B.t.int16[0];
475
- }, readUshort: function(E, A) {
476
- return E[A] << 8 | E[A + 1];
477
- }, readUshorts: function(E, A, t) {
478
- for (var e = [], r = 0; r < t; r++) e.push(l.B.readUshort(E, A + 2 * r));
450
+ const f = { readShort: (E, A) => (f.t.uint16[0] = E[A] << 8 | E[A + 1], f.t.int16[0]), readUshort: (E, A) => E[A] << 8 | E[A + 1], readUshorts(E, A, t) {
451
+ const e = [];
452
+ for (let s = 0; s < t; s++) e.push(f.readUshort(E, A + 2 * s));
479
453
  return e;
480
- }, readUint: function(E, A) {
481
- var t = l.B.t.uint8;
482
- return t[3] = E[A], t[2] = E[A + 1], t[1] = E[A + 2], t[0] = E[A + 3], l.B.t.uint32[0];
483
- }, readASCII: function(E, A, t) {
484
- for (var e = "", r = 0; r < t; r++) e += String.fromCharCode(E[A + r]);
454
+ }, readUint(E, A) {
455
+ const t = f.t.uint8;
456
+ return t[3] = E[A], t[2] = E[A + 1], t[1] = E[A + 2], t[0] = E[A + 3], f.t.uint32[0];
457
+ }, readASCII(E, A, t) {
458
+ let e = "";
459
+ for (let s = 0; s < t; s++) e += String.fromCharCode(E[A + s]);
485
460
  return e;
486
- }, t: (_ = new ArrayBuffer(8), { uint8: new Uint8Array(_), int16: new Int16Array(_), uint16: new Uint16Array(_), uint32: new Uint32Array(_) }) }, l.T.cmap = { parseTab: function(E, A, t) {
487
- var e = { tables: [], ids: {}, off: A };
461
+ }, t: (() => {
462
+ const E = new ArrayBuffer(8);
463
+ return { uint8: new Uint8Array(E), int16: new Int16Array(E), uint16: new Uint16Array(E), uint32: new Uint32Array(E) };
464
+ })() }, BA = { parseTab(E, A, t) {
465
+ const e = { tables: [], ids: {}, off: A };
488
466
  E = new Uint8Array(E.buffer, A, t), A = 0;
489
- var r = l.B, B = r.readUshort, s = l.T.cmap;
490
- B(E, A);
491
- var i = B(E, A += 2);
467
+ const s = f, r = s.readUshort, i = r(E, A += 2);
492
468
  A += 2;
493
- for (var o = [], g = 0; g < i; g++) {
494
- var n = B(E, A), a = B(E, A += 2);
469
+ const B = [];
470
+ for (let o = 0; o < i; o++) {
471
+ const n = r(E, A), g = r(E, A += 2);
495
472
  A += 2;
496
- var h = r.readUint(E, A);
473
+ const a = s.readUint(E, A);
497
474
  A += 4;
498
- var C = "p" + n + "e" + a, D = o.indexOf(h);
499
- if (D == -1) {
500
- D = e.tables.length;
501
- var c = {};
502
- o.push(h);
503
- var u = c.format = B(E, h);
504
- u == 4 ? c = s.parse4(E, h, c) : u == 12 && (c = s.parse12(E, h, c)), e.tables.push(c);
475
+ const h = `p${n}e${g}`;
476
+ let D = B.indexOf(a);
477
+ if (D === -1) {
478
+ let c;
479
+ D = e.tables.length, B.push(a);
480
+ const l = r(E, a);
481
+ c = l === 4 ? this.parse4(E, a) : l === 12 ? this.parse12(E, a) : { format: l }, e.tables.push(c);
505
482
  }
506
- e.ids[C] != null && console.log("multiple tables for one platform+encoding: " + C), e.ids[C] = D;
483
+ e.ids[h] != null && console.warn("Multiple tables for one platform+encoding: " + h), e.ids[h] = D;
507
484
  }
508
485
  return e;
509
- }, parse4: function(E, A, t) {
510
- var e = l.B, r = e.readUshort, B = e.readUshorts, s = A, i = r(E, A += 2);
511
- r(E, A += 2);
512
- var o = r(E, A += 2);
486
+ }, parse4(E, A) {
487
+ const t = f, e = t.readUshort, s = t.readUshorts, r = A, i = e(E, A += 2);
513
488
  A += 2;
514
- var g = o >>> 1;
515
- t.searchRange = r(E, A), A += 2, t.entrySelector = r(E, A), A += 2, t.rangeShift = r(E, A), A += 2, t.endCount = B(E, A, g), A += 2 * g, A += 2, t.startCount = B(E, A, g), A += 2 * g, t.idDelta = [];
516
- for (var n = 0; n < g; n++) t.idDelta.push(e.readShort(E, A)), A += 2;
517
- return t.idRangeOffset = B(E, A, g), A += 2 * g, t.glyphIdArray = B(E, A, s + i - A >> 1), t;
518
- }, parse12: function(E, A, t) {
519
- var e = l.B.readUint;
520
- e(E, A += 4), e(E, A += 4);
521
- var r = 3 * e(E, A += 4);
489
+ const B = e(E, A += 2) >>> 1, o = { format: 4, searchRange: e(E, A += 2), entrySelector: 0, rangeShift: 0, endCount: [], startCount: [], idDelta: [], idRangeOffset: [], glyphIdArray: [] };
490
+ A += 2, o.entrySelector = e(E, A), A += 2, o.rangeShift = e(E, A), A += 2, o.endCount = s(E, A, B), A += 2 * B, A += 2, o.startCount = s(E, A, B), A += 2 * B;
491
+ for (let n = 0; n < B; n++) o.idDelta.push(t.readShort(E, A)), A += 2;
492
+ return o.idRangeOffset = s(E, A, B), A += 2 * B, o.glyphIdArray = s(E, A, r + i - A >> 1), o;
493
+ }, parse12(E, A) {
494
+ const t = f.readUint;
495
+ t(E, A += 4), t(E, A += 4);
496
+ const e = t(E, A += 4);
522
497
  A += 4;
523
- for (var B = t.groups = new Uint32Array(r), s = 0; s < r; s += 3) B[s] = e(E, A + (s << 2)), B[s + 1] = e(E, A + (s << 2) + 4), B[s + 2] = e(E, A + (s << 2) + 8);
524
- return t;
525
- } }, l.T.head = { parseTab: function(E, A, t) {
526
- var e = l.B, r = {};
527
- return A += 18, r.unitsPerEm = e.readUshort(E, A), A += 2, A += 16, r.xMin = e.readShort(E, A), A += 2, r.yMin = e.readShort(E, A), A += 2, r.xMax = e.readShort(E, A), A += 2, r.yMax = e.readShort(E, A), A += 2, A += 6, r.indexToLocFormat = e.readShort(E, A), r;
528
- } }, l.T.hhea = { parseTab: function(E, A, t) {
529
- var e = l.B, r = {};
498
+ const s = new Uint32Array(3 * e);
499
+ for (let r = 0; r < 3 * e; r += 3) s[r] = t(E, A + (r << 2)), s[r + 1] = t(E, A + (r << 2) + 4), s[r + 2] = t(E, A + (r << 2) + 8);
500
+ return { format: 12, groups: s };
501
+ } }, EA = { parseTab(E, A, t) {
502
+ const e = f;
503
+ A += 18;
504
+ const s = e.readUshort(E, A);
505
+ A += 2, A += 16;
506
+ const r = e.readShort(E, A);
507
+ A += 2;
508
+ const i = e.readShort(E, A);
509
+ A += 2;
510
+ const B = e.readShort(E, A);
511
+ A += 2;
512
+ const o = e.readShort(E, A);
513
+ return A += 2, A += 6, { unitsPerEm: s, xMin: r, yMin: i, xMax: B, yMax: o, indexToLocFormat: e.readShort(E, A) };
514
+ } }, QA = { parseTab(E, A, t) {
515
+ const e = f;
530
516
  A += 4;
531
- for (var B = ["ascender", "descender", "lineGap", "advanceWidthMax", "minLeftSideBearing", "minRightSideBearing", "xMaxExtent", "caretSlopeRise", "caretSlopeRun", "caretOffset", "res0", "res1", "res2", "res3", "metricDataFormat", "numberOfHMetrics"], s = 0; s < B.length; s++) {
532
- var i = B[s], o = i == "advanceWidthMax" || i == "numberOfHMetrics" ? e.readUshort : e.readShort;
533
- r[i] = o(E, A + 2 * s);
517
+ const s = ["ascender", "descender", "lineGap", "advanceWidthMax", "minLeftSideBearing", "minRightSideBearing", "xMaxExtent", "caretSlopeRise", "caretSlopeRun", "caretOffset", "res0", "res1", "res2", "res3", "metricDataFormat", "numberOfHMetrics"], r = {};
518
+ for (let i = 0; i < s.length; i++) {
519
+ const B = s[i], o = B === "advanceWidthMax" || B === "numberOfHMetrics" ? e.readUshort : e.readShort;
520
+ r[B] = o(E, A + 2 * i);
534
521
  }
535
522
  return r;
536
- } }, l.T.hmtx = { parseTab: function(E, A, t, e) {
537
- for (var r = l.B, B = [], s = [], i = e.maxp.numGlyphs, o = e.hhea.numberOfHMetrics, g = 0, n = 0, a = 0; a < o; ) g = r.readUshort(E, A + (a << 2)), n = r.readShort(E, A + (a << 2) + 2), B.push(g), s.push(n), a++;
538
- for (; a < i; ) B.push(g), s.push(n), a++;
539
- return { aWidth: B, lsBearing: s };
540
- } }, l.T.maxp = { parseTab: function(E, A, t) {
541
- var e = l.B, r = e.readUshort, B = {};
542
- return e.readUint(E, A), A += 4, B.numGlyphs = r(E, A), A += 2, B;
543
- } }, l.T.loca = { parseTab: function(E, A, t, e) {
544
- var r = l.B, B = [], s = e.head.indexToLocFormat, i = e.maxp.numGlyphs + 1;
545
- if (s == 0) for (var o = 0; o < i; o++) B.push(r.readUshort(E, A + (o << 1)) << 1);
546
- if (s == 1) for (o = 0; o < i; o++) B.push(r.readUint(E, A + (o << 2)));
547
- return B;
548
- } }, l.T.glyf = { parseTab: function(E, A, t, e) {
549
- for (var r = [], B = e.maxp.numGlyphs, s = 0; s < B; s++) r.push(null);
523
+ } }, oA = { parseTab(E, A, t, e) {
524
+ if (!e) throw Error("Font object required for hmtx parsing");
525
+ const s = f, r = [], i = [], B = e.maxp.numGlyphs, o = e.hhea.numberOfHMetrics;
526
+ let n = 0, g = 0, a = 0;
527
+ for (; a < o; ) n = s.readUshort(E, A + (a << 2)), g = s.readShort(E, A + (a << 2) + 2), r.push(n), i.push(g), a++;
528
+ for (; a < B; ) r.push(n), i.push(g), a++;
529
+ return { aWidth: r, lsBearing: i };
530
+ } }, H = { cmap: BA, head: EA, hhea: QA, maxp: { parseTab(E, A, t) {
531
+ const e = f;
532
+ return e.readUint(E, A), A += 4, { numGlyphs: e.readUshort(E, A) };
533
+ } }, hmtx: oA, loca: { parseTab(E, A, t, e) {
534
+ if (!e) throw Error("Font object required for loca parsing");
535
+ const s = f, r = [], i = e.head.indexToLocFormat, B = e.maxp.numGlyphs + 1;
536
+ if (i === 0) for (let o = 0; o < B; o++) r.push(s.readUshort(E, A + (o << 1)) << 1);
537
+ else if (i === 1) for (let o = 0; o < B; o++) r.push(s.readUint(E, A + (o << 2)));
550
538
  return r;
551
- }, VA: function(E, A) {
552
- var t = l.B, e = E._data, r = E.loca;
553
- if (r[A] == r[A + 1]) return null;
554
- var B = l.findTable(e, "glyf", E._offset)[0] + r[A], s = {};
555
- if (s.noc = t.readShort(e, B), B += 2, s.xMin = t.readShort(e, B), B += 2, s.yMin = t.readShort(e, B), B += 2, s.xMax = t.readShort(e, B), B += 2, s.yMax = t.readShort(e, B), B += 2, s.xMin >= s.xMax || s.yMin >= s.yMax) return null;
556
- if (s.noc > 0) {
557
- s.endPts = [];
558
- for (var i = 0; i < s.noc; i++) s.endPts.push(t.readUshort(e, B)), B += 2;
559
- var o = t.readUshort(e, B);
560
- if (B += 2, e.length - B < o) return null;
561
- B += o;
562
- var g = s.endPts[s.noc - 1] + 1;
563
- for (s.flags = [], i = 0; i < g; i++) {
564
- var n = e[B];
565
- if (B++, s.flags.push(n), 8 & n) {
566
- var a = e[B];
567
- B++;
568
- for (var h = 0; h < a; h++) s.flags.push(n), i++;
539
+ } }, glyf: { parseTab(E, A, t, e) {
540
+ if (!e) throw Error("Font object required for glyf parsing");
541
+ const s = [], r = e.maxp.numGlyphs;
542
+ for (let i = 0; i < r; i++) s.push(null);
543
+ return s;
544
+ }, VA(E, A) {
545
+ const t = f, e = E.RA, s = E.loca;
546
+ if (s[A] === s[A + 1]) return null;
547
+ const r = w.findTable(e, "glyf", E.HA);
548
+ if (!r) return null;
549
+ let i = r[0] + s[A];
550
+ const B = {};
551
+ if (B.noc = t.readShort(e, i), i += 2, B.xMin = t.readShort(e, i), i += 2, B.yMin = t.readShort(e, i), i += 2, B.xMax = t.readShort(e, i), i += 2, B.yMax = t.readShort(e, i), i += 2, B.xMin >= B.xMax || B.yMin >= B.yMax) return null;
552
+ if (B.noc > 0) {
553
+ B.endPts = [];
554
+ for (let h = 0; h < B.noc; h++) B.endPts.push(t.readUshort(e, i)), i += 2;
555
+ const o = t.readUshort(e, i);
556
+ if (i += 2, e.length - i < o) return null;
557
+ i += o;
558
+ const n = B.endPts[B.noc - 1] + 1;
559
+ B.flags = [];
560
+ for (let h = 0; h < n; h++) {
561
+ const D = e[i];
562
+ if (i++, B.flags.push(D), 8 & D) {
563
+ const c = e[i];
564
+ i++;
565
+ for (let l = 0; l < c; l++) B.flags.push(D), h++;
569
566
  }
570
567
  }
571
- for (s.xs = [], i = 0; i < g; i++) {
572
- var C = !!(2 & s.flags[i]), D = !!(16 & s.flags[i]);
573
- C ? (s.xs.push(D ? e[B] : -e[B]), B++) : D ? s.xs.push(0) : (s.xs.push(t.readShort(e, B)), B += 2);
568
+ B.xs = [];
569
+ for (let h = 0; h < n; h++) {
570
+ const D = B.flags[h], c = !!(16 & D);
571
+ 2 & D ? (B.xs.push(c ? e[i] : -e[i]), i++) : c ? B.xs.push(0) : (B.xs.push(t.readShort(e, i)), i += 2);
574
572
  }
575
- for (s.ys = [], i = 0; i < g; i++)
576
- C = !!(4 & s.flags[i]), D = !!(32 & s.flags[i]), C ? (s.ys.push(D ? e[B] : -e[B]), B++) : D ? s.ys.push(0) : (s.ys.push(t.readShort(e, B)), B += 2);
577
- var c = 0, u = 0;
578
- for (i = 0; i < g; i++) c += s.xs[i], u += s.ys[i], s.xs[i] = c, s.ys[i] = u;
579
- } else s.parts = [];
580
- return s;
581
- } }, typeof module < "u" && module.exports ? module.exports = l : typeof window < "u" && (window.Typr = l);
582
- class BA {
583
- extractCharacters(A) {
573
+ B.ys = [];
574
+ for (let h = 0; h < n; h++) {
575
+ const D = B.flags[h], c = !!(32 & D);
576
+ 4 & D ? (B.ys.push(c ? e[i] : -e[i]), i++) : c ? B.ys.push(0) : (B.ys.push(t.readShort(e, i)), i += 2);
577
+ }
578
+ let g = 0, a = 0;
579
+ for (let h = 0; h < n; h++) g += B.xs[h], a += B.ys[h], B.xs[h] = g, B.ys[h] = a;
580
+ } else B.parts = [], B.endPts = [], B.flags = [], B.xs = [], B.ys = [];
581
+ return B;
582
+ } } }, w = { parse: (E) => [((A, t, e, s) => {
583
+ const r = H, i = { RA: A, zA: t, HA: e };
584
+ for (const B in r) {
585
+ const o = B, n = w.findTable(A, o, e);
586
+ if (n) {
587
+ const [g, a] = n;
588
+ let h = s[g];
589
+ h == null && (h = r[o].parseTab(A, g, a, i), s[g] = h), i[o] = h;
590
+ }
591
+ }
592
+ return i;
593
+ })(new Uint8Array(E), 0, 0, {})], findTable(E, A, t) {
594
+ const e = f, s = e.readUshort(E, t + 4);
595
+ let r = t + 12;
596
+ for (let i = 0; i < s; i++) {
597
+ const B = e.readASCII(E, r, 4);
598
+ e.readUint(E, r + 4);
599
+ const o = e.readUint(E, r + 8), n = e.readUint(E, r + 12);
600
+ if (B === A) return [o, n];
601
+ r += 16;
602
+ }
603
+ return null;
604
+ }, T: H, B: f };
605
+ class U {
606
+ constructor() {
607
+ Q(this, "LA", /* @__PURE__ */ new Map());
608
+ Q(this, "JA", /* @__PURE__ */ new Map());
609
+ }
610
+ KA(A) {
611
+ const t = this.WA(A);
612
+ if (this.JA.has(t)) return this.JA.get(t);
613
+ const e = A.cmap;
614
+ if (!e || !e.tables) return this.JA.set(t, null), null;
615
+ const s = ["p3e1", "p3e10", "p0e3", "p0e4"];
616
+ for (const i of s) if (e.ids[i] !== void 0) {
617
+ const B = e.tables[e.ids[i]];
618
+ return this.JA.set(t, B), B;
619
+ }
620
+ const r = e.tables[0] || null;
621
+ return this.JA.set(t, r), r;
622
+ }
623
+ jA(A, t) {
624
+ const e = `${this.WA(A)}_${t}`;
625
+ if (this.LA.has(e)) return this.LA.get(e);
626
+ const s = this.KA(A);
627
+ if (!s) return this.LA.set(e, 0), 0;
628
+ let r = 0;
629
+ return s.format === 4 ? r = this.NA(t, s) : s.format === 12 && (r = this.ZA(t, s)), this.LA.set(e, r), r;
630
+ }
631
+ XA(A, t) {
632
+ const e = t.codePointAt(0);
633
+ return e === void 0 ? 0 : this.jA(A, e);
634
+ }
635
+ qA(A, t) {
636
+ const e = A.hmtx;
637
+ return e && e.aWidth && e.aWidth.length !== 0 ? t < e.aWidth.length ? e.aWidth[t] : e.aWidth[e.aWidth.length - 1] : 0;
638
+ }
639
+ At(A, t) {
640
+ const e = t / A.head.unitsPerEm, s = A.hhea.ascender * e, r = A.hhea.descender * e, i = A.hhea.lineGap * e;
641
+ return { ascender: s, descender: r, lineGap: i, lineHeight: s - r + i, unitsPerEm: A.head.unitsPerEm, scale: e };
642
+ }
643
+ tt() {
644
+ this.LA.clear(), this.JA.clear();
645
+ }
646
+ WA(A) {
647
+ return `${A.HA}_${A.RA.length}`;
648
+ }
649
+ NA(A, t) {
650
+ const e = t.endCount.length;
651
+ let s = -1;
652
+ for (let r = 0; r < e; r++) if (A <= t.endCount[r]) {
653
+ s = r;
654
+ break;
655
+ }
656
+ if (s === -1 || A < t.startCount[s]) return 0;
657
+ if (t.idRangeOffset[s] === 0) return A + t.idDelta[s] & 65535;
658
+ {
659
+ const r = t.idRangeOffset[s] / 2 + (A - t.startCount[s]) - (e - s);
660
+ if (r >= 0 && r < t.glyphIdArray.length) {
661
+ const i = t.glyphIdArray[r];
662
+ return i === 0 ? 0 : i + t.idDelta[s] & 65535;
663
+ }
664
+ }
665
+ return 0;
666
+ }
667
+ ZA(A, t) {
668
+ const e = t.groups.length / 3;
669
+ for (let s = 0; s < e; s++) {
670
+ const r = t.groups[3 * s], i = t.groups[3 * s + 1], B = t.groups[3 * s + 2];
671
+ if (A >= r && A <= i) return B + (A - r);
672
+ }
673
+ return 0;
674
+ }
675
+ }
676
+ class nA {
677
+ constructor(A) {
678
+ Q(this, "et");
679
+ this.et = A;
680
+ }
681
+ st(A) {
584
682
  var e;
585
683
  const t = [];
586
- return (e = A == null ? void 0 : A.cmap) != null && e.tables ? (A.cmap.tables.forEach((r) => {
587
- if (r.format === 4) {
588
- const B = this.RA(r);
589
- t.push(...B);
590
- } else if (r.format === 12) {
591
- const B = this.HA(r);
592
- t.push(...B);
684
+ return (e = A == null ? void 0 : A.cmap) != null && e.tables ? (A.cmap.tables.forEach((s) => {
685
+ if (s.format === 4) {
686
+ const r = this.rt(s);
687
+ t.push(...r);
688
+ } else if (s.format === 12) {
689
+ const r = this.Bt(s);
690
+ t.push(...r);
593
691
  }
594
692
  }), [...new Set(t)]) : [];
595
693
  }
596
- RA(A) {
694
+ it(A, t) {
695
+ return this.et.XA(A, t) > 0;
696
+ }
697
+ Qt(A, t) {
698
+ for (const e of t) if (!this.it(A, e)) return !1;
699
+ return !0;
700
+ }
701
+ Et(A, t) {
702
+ return t.filter((e) => this.it(A, e));
703
+ }
704
+ gt(A) {
705
+ return A.filter((t) => this.ot(t));
706
+ }
707
+ rt(A) {
597
708
  const t = [];
598
709
  if (!(A.startCount && A.endCount && A.idRangeOffset && A.idDelta)) return t;
599
710
  for (let e = 0; e < A.startCount.length; e++) {
600
- const r = A.startCount[e], B = A.endCount[e];
601
- if (r !== 65535 || B !== 65535) {
602
- for (let s = r; s <= B; s++)
603
- if (this.zA(A, s, e) > 0) {
604
- const i = String.fromCodePoint(s);
605
- t.push(i);
711
+ const s = A.startCount[e], r = A.endCount[e];
712
+ if (s !== 65535 || r !== 65535) {
713
+ for (let i = s; i <= r; i++)
714
+ if (this.nt(A, i, e) > 0) try {
715
+ const B = String.fromCodePoint(i);
716
+ t.push(B);
717
+ } catch {
606
718
  }
607
719
  }
608
720
  }
609
721
  return t;
610
722
  }
611
- HA(A) {
723
+ Bt(A) {
612
724
  const t = [];
613
725
  if (!A.groups) return t;
614
726
  for (let e = 0; e < A.groups.length; e += 3) {
615
- const r = A.groups[e], B = A.groups[e + 1], s = A.groups[e + 2];
616
- for (let i = r; i <= B; i++)
617
- if (s + (i - r) > 0) {
618
- const o = String.fromCodePoint(i);
727
+ const s = A.groups[e], r = A.groups[e + 1], i = A.groups[e + 2];
728
+ for (let B = s; B <= r; B++)
729
+ if (i + (B - s) > 0) try {
730
+ const o = String.fromCodePoint(B);
619
731
  t.push(o);
732
+ } catch {
620
733
  }
621
734
  }
622
735
  return t;
623
736
  }
624
- zA(A, t, e) {
737
+ nt(A, t, e) {
625
738
  if (A.idRangeOffset[e] === 0) return t + A.idDelta[e] & 65535;
626
739
  {
627
- const r = A.idRangeOffset[e] / 2 + (t - A.startCount[e]) - (A.startCount.length - e);
628
- if (r >= 0 && A.glyphIdArray && r < A.glyphIdArray.length) {
629
- const B = A.glyphIdArray[r];
630
- if (B !== 0) return B + A.idDelta[e] & 65535;
740
+ const s = A.idRangeOffset[e] / 2 + (t - A.startCount[e]) - (A.startCount.length - e);
741
+ if (s >= 0 && A.glyphIdArray && s < A.glyphIdArray.length) {
742
+ const r = A.glyphIdArray[s];
743
+ if (r !== 0) return r + A.idDelta[e] & 65535;
631
744
  }
632
745
  }
633
746
  return 0;
634
747
  }
635
- filterProblematicCharacters(A) {
636
- return A.filter((t) => this.JA(t));
637
- }
638
- JA(A) {
748
+ ot(A) {
639
749
  const t = A.codePointAt(0) || 0;
640
750
  return !(t >= 0 && t <= 31 && t !== 9 && t !== 10 && t !== 13 || t >= 127 && t <= 159);
641
751
  }
642
752
  }
643
- class sA {
753
+ class gA {
754
+ constructor() {
755
+ Q(this, "ht");
756
+ const A = new U();
757
+ this.ht = new nA(A);
758
+ }
759
+ extractCharacters(A) {
760
+ return this.ht.st(A);
761
+ }
762
+ filterProblematicCharacters(A) {
763
+ return this.ht.gt(A);
764
+ }
765
+ characterExists(A, t) {
766
+ return this.ht.it(A, t);
767
+ }
768
+ allCharactersExist(A, t) {
769
+ return this.ht.Qt(A, t);
770
+ }
771
+ }
772
+ class hA {
644
773
  constructor(A) {
645
- Q(this, "LA");
646
- Q(this, "KA");
647
- Q(this, "WA");
648
- this.WA = A, this.LA = document.createElement("canvas"), this.KA = this.LA.getContext("2d", { willReadFrequently: !0, alpha: !1 });
774
+ Q(this, "lt");
775
+ Q(this, "ct");
776
+ Q(this, "Dt");
777
+ Q(this, "Ct");
778
+ this.Dt = A, this.Ct = new U(), this.lt = document.createElement("canvas"), this.ct = this.lt.getContext("2d", { willReadFrequently: !0, alpha: !1 });
649
779
  }
650
- createTextureAtlas(A, t, e, r) {
651
- const B = A.length, s = Math.ceil(Math.sqrt(B)), i = Math.ceil(B / s), o = t.width * s, g = t.height * i;
652
- this.jA(o, g, e, r), this.ZA(A, t, s, e), this.NA();
653
- const n = this.WA.TA(o, g, { filter: "nearest" });
654
- return n.update(this.LA), { framebuffer: n, columns: s, rows: i };
780
+ createTextureAtlas(A, t, e, s) {
781
+ const r = A.length, i = Math.ceil(Math.sqrt(r)), B = Math.ceil(r / i), o = t.width * i, n = t.height * B, g = typeof s == "object" ? s : null;
782
+ this.ut(o, n), this.Pt(A, t, i, e, g);
783
+ const a = this.Dt.TA(o, n, { filter: "nearest" });
784
+ return a.update(this.lt), { framebuffer: a, columns: i, rows: B };
655
785
  }
656
- jA(A, t, e, r) {
657
- this.LA.width = A, this.LA.height = t, this.LA.style.width = A + "px", this.LA.style.height = A + "px", this.KA.imageSmoothingEnabled = !1, this.LA.style.imageRendering = "pixelated", this.KA.fillStyle = "black", this.KA.fillRect(0, 0, A, t), this.KA.font = `${e}px ${r}`, this.KA.textBaseline = "top", this.KA.textAlign = "left", this.KA.fillStyle = "white";
786
+ ut(A, t) {
787
+ this.lt.width = A, this.lt.height = t, this.lt.style.width = A + "px", this.lt.style.height = A + "px", this.ct.imageSmoothingEnabled = !1, this.lt.style.imageRendering = "pixelated", this.ct.fillStyle = "black", this.ct.fillRect(0, 0, A, t), this.ct.textBaseline = "top", this.ct.textAlign = "left", this.ct.fillStyle = "white";
658
788
  }
659
- ZA(A, t, e, r) {
789
+ Pt(A, t, e, s, r) {
790
+ const i = s / r.head.unitsPerEm;
660
791
  for (let B = 0; B < A.length; B++) {
661
- const s = B % e, i = Math.floor(B / e), o = s * t.width + 0.5 * t.width, g = i * t.height + 0.5 * t.height, n = Math.round(o - 0.5 * t.width), a = Math.round(g - 0.5 * r);
662
- this.KA.fillText(A[B].character, n, a);
792
+ const o = B % e, n = Math.floor(B / e), g = A[B].character, a = this.It(r, g);
793
+ if (!a) continue;
794
+ const h = g.codePointAt(0) || 0, D = this.Ct.jA(r, h), c = this.wt(r, D) * i, l = o * t.width, d = n * t.height, C = l + 0.5 * t.width, P = d + 0.5 * t.height, p = Math.round(C - 0.5 * t.width), m = Math.round(P - 0.5 * s), y = p + 0.5 * (t.width - c), b = m + r.hhea.ascender * i;
795
+ this.ft(a, y, b, i);
663
796
  }
664
797
  }
665
- NA(A = 128) {
666
- const t = this.KA.getImageData(0, 0, this.LA.width, this.LA.height), e = t.data;
667
- for (let r = 0; r < e.length; r += 4) {
668
- const B = 0.299 * e[r] + 0.587 * e[r + 1] + 0.114 * e[r + 2] > A + 32 ? 255 : 0;
669
- e[r] = B, e[r + 1] = B, e[r + 2] = B;
798
+ It(A, t) {
799
+ const e = t.codePointAt(0) || 0, s = this.Ct.jA(A, e);
800
+ if (s === 0) return null;
801
+ if (A.glyf && A.glyf[s] !== null) return A.glyf[s];
802
+ if (w && w.T && w.T.glyf && w.T.glyf.VA) {
803
+ const r = w.T.glyf.VA(A, s);
804
+ return A.glyf && r && (A.glyf[s] = r), r;
670
805
  }
671
- this.KA.putImageData(t, 0, 0);
806
+ return null;
807
+ }
808
+ wt(A, t) {
809
+ const e = A.hmtx;
810
+ return e && e.aWidth ? t < e.aWidth.length ? e.aWidth[t] : e.aWidth[e.aWidth.length - 1] : 0;
811
+ }
812
+ ft(A, t, e, s) {
813
+ if (!A || !A.xs || A.noc === 0) return;
814
+ const { xs: r, ys: i, endPts: B, flags: o } = A;
815
+ if (!(r && i && B && o)) return;
816
+ this.ct.beginPath();
817
+ let n = 0;
818
+ for (let g = 0; g < B.length; g++) {
819
+ const a = B[g];
820
+ if (!(a < n)) {
821
+ if (a >= n) {
822
+ const h = t + r[n] * s, D = e - i[n] * s;
823
+ this.ct.moveTo(h, D);
824
+ let c = n + 1;
825
+ for (; c <= a; )
826
+ if (1 & o[c]) {
827
+ const l = t + r[c] * s, d = e - i[c] * s;
828
+ this.ct.lineTo(l, d), c++;
829
+ } else {
830
+ const l = t + r[c] * s, d = e - i[c] * s;
831
+ let C = c + 1 > a ? n : c + 1;
832
+ if (1 & o[C]) {
833
+ const P = t + r[C] * s, p = e - i[C] * s;
834
+ this.ct.quadraticCurveTo(l, d, P, p), c = C + 1;
835
+ } else {
836
+ const P = (l + (t + r[C] * s)) / 2, p = (d + (e - i[C] * s)) / 2;
837
+ this.ct.quadraticCurveTo(l, d, P, p), c = C;
838
+ }
839
+ }
840
+ this.ct.closePath();
841
+ }
842
+ n = a + 1;
843
+ }
844
+ }
845
+ this.ct.fill();
672
846
  }
673
847
  }
674
- class iA {
848
+ class aA {
675
849
  constructor() {
676
- Q(this, "XA");
677
- Q(this, "qA");
678
- this.XA = document.createElement("canvas"), this.qA = this.XA.getContext("2d");
850
+ Q(this, "et");
851
+ this.et = new U();
679
852
  }
680
853
  calculateMaxGlyphDimensions(A, t, e) {
681
- this.qA.font = `${t}px ${e}`;
682
- let r = 0, B = 0;
683
- for (const s of A) {
684
- const i = this.qA.measureText(s);
685
- r = Math.max(r, i.width), B = Math.max(B, i.actualBoundingBoxAscent + i.actualBoundingBoxDescent);
854
+ let s = 0;
855
+ const r = this.et.At(e, t), i = r.lineHeight;
856
+ for (const B of A) {
857
+ const o = this.et.XA(e, B);
858
+ if (o === 0) continue;
859
+ const n = this.et.qA(e, o) * r.scale;
860
+ s = Math.max(s, n);
686
861
  }
687
- return { width: r, height: B };
862
+ return { width: Math.ceil(s), height: Math.ceil(i) };
863
+ }
864
+ getCharacterAdvanceWidth(A, t, e) {
865
+ const s = this.et.At(e, t), r = this.et.XA(e, A);
866
+ return this.et.qA(e, r) * s.scale;
867
+ }
868
+ getFontMetrics(A, t) {
869
+ return this.et.At(t, A);
870
+ }
871
+ tt() {
872
+ this.et.tt();
688
873
  }
689
874
  }
690
- class EA {
875
+ class lA {
876
+ constructor() {
877
+ Q(this, "Ct");
878
+ this.Ct = new U();
879
+ }
691
880
  createCharacterObjects(A, t) {
692
- return A.map((e, r) => {
693
- const B = e.codePointAt(0) || 0, s = this.At(r);
694
- let i = 0;
881
+ return A.map((e, s) => {
882
+ const r = e.codePointAt(0) || 0, i = this.dt(s);
883
+ let B = 0;
695
884
  if (t.hmtx && t.hmtx.aWidth) {
696
- const o = this.tt(t, B);
697
- o > 0 && t.hmtx.aWidth[o] !== void 0 && (i = t.hmtx.aWidth[o]);
885
+ const o = this.Ct.jA(t, r);
886
+ o > 0 && t.hmtx.aWidth[o] !== void 0 && (B = t.hmtx.aWidth[o]);
698
887
  }
699
- return { character: e, unicode: B, color: s, advanceWidth: i };
888
+ return { character: e, unicode: r, color: i, advanceWidth: B };
700
889
  });
701
890
  }
702
- tt(A, t) {
703
- const e = A.cmap;
704
- if (!e || !e.tables) return 0;
705
- for (const r of e.tables) if (r.format === 4) {
706
- for (let B = 0; B < r.startCount.length; B++) if (t >= r.startCount[B] && t <= r.endCount[B]) {
707
- if (r.idRangeOffset[B] === 0) return t + r.idDelta[B] & 65535;
708
- {
709
- const s = r.idRangeOffset[B] / 2 + (t - r.startCount[B]) - (r.startCount.length - B);
710
- if (s >= 0 && s < r.glyphIdArray.length) {
711
- const i = r.glyphIdArray[s];
712
- if (i !== 0) return i + r.idDelta[B] & 65535;
713
- }
714
- }
715
- }
716
- }
717
- return 0;
718
- }
719
- At(A) {
891
+ dt(A) {
720
892
  return [A % 256, Math.floor(A / 256) % 256, Math.floor(A / 65536) % 256];
721
893
  }
722
894
  getCharacterColor(A, t) {
723
- if (!P.C(typeof A == "string", "Character must be a string.", { method: "getCharacterColor", providedValue: A })) return [0, 0, 0];
724
- const e = t.find((r) => r.character === A);
895
+ if (!u.C(typeof A == "string", "Character must be a string.", { method: "getCharacterColor", providedValue: A })) return [0, 0, 0];
896
+ const e = t.find((s) => s.character === A);
725
897
  return e ? e.color : [0, 0, 0];
726
898
  }
727
899
  getCharacterColors(A, t) {
728
- return P.C(typeof A == "string" && A.length > 0, "Characters must be a string with at least one character.", { method: "getCharacterColors", providedValue: A }) ? A.split("").map((e) => this.getCharacterColor(e, t) || [0, 0, 0]) : [[0, 0, 0]];
900
+ return u.C(typeof A == "string" && A.length > 0, "Characters must be a string with at least one character.", { method: "getCharacterColors", providedValue: A }) ? A.split("").map((e) => this.getCharacterColor(e, t) || [0, 0, 0]) : [[0, 0, 0]];
729
901
  }
730
902
  }
731
- class QA {
903
+ class cA {
732
904
  constructor(A, t = 16) {
733
- Q(this, "et");
734
- Q(this, "Bt", []);
735
- Q(this, "Qt");
736
- Q(this, "st", 16);
737
- Q(this, "rt", 0);
738
- Q(this, "it", 0);
739
- Q(this, "Et", { width: 0, height: 0 });
740
- Q(this, "gt");
741
- Q(this, "ot", "UrsaFont");
742
- Q(this, "nt");
743
- Q(this, "ht");
744
- Q(this, "Dt");
745
- Q(this, "lt");
746
- this.st = t, this.nt = new BA(), this.ht = new sA(A), this.Dt = new iA(), this.lt = new EA();
905
+ Q(this, "_t");
906
+ Q(this, "vt", []);
907
+ Q(this, "bt");
908
+ Q(this, "xt", 16);
909
+ Q(this, "yt", 0);
910
+ Q(this, "Mt", 0);
911
+ Q(this, "Gt", { width: 0, height: 0 });
912
+ Q(this, "Ft");
913
+ Q(this, "$t", "UrsaFont");
914
+ Q(this, "Yt");
915
+ Q(this, "Tt");
916
+ Q(this, "St");
917
+ Q(this, "Ot");
918
+ this.xt = t, this.Yt = new gA(), this.Tt = new hA(A), this.St = new aA(), this.Ot = new lA();
747
919
  }
748
- async Ct(A) {
920
+ async Ut(A) {
749
921
  let t;
750
922
  if (A) {
751
923
  const e = await fetch(A);
@@ -754,121 +926,121 @@ class QA {
754
926
  } else
755
927
  t = await (await fetch(`data:font/truetype;charset=utf-8;base64,AAEAAAAKAIAAAwAgT1MvMs+QEyQAAAEoAAAAYGNtYXAg7yVJAAAFjAAACSBnbHlmuHLTdAAAErQAAGi0aGVhZFvXdUwAAACsAAAANmhoZWELAQUCAAAA5AAAACRobXR4BACDgAAAAYgAAAQEbG9jYQAy54AAAA6sAAAECG1heHABIgCCAAABCAAAACBuYW1lVs/OSgAAe2gAAAOicG9zdABpADQAAH8MAAAAIAABAAAAAQAAzOWHqV8PPPUAAAQAAAAAAHxiGCcAAAAAfGIYJwAAAAAEAAQAAAAACAACAAEAAAAAAAEAAAQAAAAAAAQAAAAAAAcAAAEAAAAAAAAAAAAAAAAAAAEBAAEAAAEBAIAAIAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAgQAAZAABQAEAgACAAAAAAACAAIAAAACAAAzAMwAAAAABAAAAAAAAACAAACLAABw4wAAAAAAAAAAWUFMLgBAACAmawQAAAAAAAQAAAAAAAFRAAAAAAMABAAAAAAgAAAEAAAABAAAAAQAAAAEAAGABAABAAQAAIAEAACABAAAgAQAAIAEAAGABAABAAQAAQAEAACABAABAAQAAIAEAACABAABAAQAAIAEAACABAAAgAQAAIAEAACABAAAgAQAAIAEAACABAAAgAQAAIAEAACABAABAAQAAIAEAAEABAAAgAQAAIAEAACABAAAgAQAAIAEAACABAAAgAQAAIAEAACABAAAgAQAAIAEAACABAAAgAQAAIAEAACABAAAgAQAAIAEAACABAAAgAQAAIAEAACABAAAgAQAAIAEAACABAAAgAQAAIAEAACABAAAgAQAAIAEAACABAABAAQAAIAEAAEABAAAgAQAAIAEAAEABAAAgAQAAIAEAACABAAAgAQAAIAEAAEABAAAgAQAAIAEAAGABAAAgAQAAIAEAAGABAAAgAQAAIAEAACABAAAgAQAAIAEAAEABAAAgAQAAIAEAACABAAAgAQAAIAEAACABAAAgAQAAIAEAACABAABgAQAAQAEAACABAAAAAQAAgAEAACABAAAgAQAAIAEAACABAACAAQAAAAEAAIABAABgAQAAgAEAACABAAAgAQAAAAEAACABAAAAAQAAAAEAAAABAAAAAQAAAAEAAIABAADAAQAAAAEAAAABAAAgAQAAYAEAAAABAAAAAQAAIAEAAAABAAAgAQAAIAEAACABAAAAAQAAIAEAAAABAAAAAQAAIAEAAGABAAAAAQAAAAEAAAABAAAAAQAAIAEAACABAAAAAQAAIAEAACABAAAAAQAAIAEAACABAAAgAQAAAAEAACABAAAAAQAAAAEAAEABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAACAAQAAIAEAAAABAAAAAQAAAAEAACABAABAAQAAQAEAAEABAABAAQAAIAEAACABAAAAAQAAAAEAAAABAABAAQAAAAEAACABAAAAAQAAAAEAAIABAAAgAQAAAAEAAAABAAAAAQAAAAEAAAABAABgAQAAAAEAAAABAABgAQAAAAEAAGABAABgAQAAYAEAAAABAAAAAQAAAAEAAAABAABgAQAAYAEAAAABAAAAAQAAAAEAAAABAABgAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAABgAQAAAAEAAGABAABgAQAAAAEAAAABAABgAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAYAEAAAABAAAAAQAAQAEAACABAAAAAQAAAAEAAAABAAAgAQAAIAEAACABAAAgAQAAIAEAAAABAABAAQAAIAEAACABAAAgAQAAIAEAAEABAAAgAQAAIAEAACABAAAgAQAAIAEAAEABAAAgAAAAAIAAAADAAAAFAADAAEAAASaAAQEhgAAAJ4AgAAGAB4AfgCjAKUApwCsALIAtwC9AL8AxwDJANEA1gDcAOIA7wD0APcA/AD/AZIDkwOYA6MDpgOpA7EDtQPAA8QDxiAiIDwgfyCnIZUhqCIaIh8iKSJIImEiZSMCIxAjISUAJQIlDCUQJRQlGCUcJSQlLCU0JTwlbCWAJYQliCWMJZMloSWsJbIluiW8JcQlyyXZJjwmQCZCJmAmYyZmJmv//wAAACAAoQClAKcAqgCwALUAugC/AMQAyQDRANYA3ADfAOQA8QD2APkA/wGSA5MDmAOjA6YDqQOxA7QDwAPDA8YgIiA8IH8gpyGQIagiGSIeIikiSCJhImQjAiMQIyAlACUCJQwlECUUJRglHCUkJSwlNCU8JVAlgCWEJYgljCWQJaAlrCWyJbolvCXEJcsl2CY6JkAmQiZgJmMmZSZq////4v/A/7//vv+8/7n/t/+1/7T/sP+v/6j/pP+f/53/nP+b/5r/mf+X/wX9Bf0B/Pf89fzz/Oz86vzg/N783eCC4GngJ+AA3xjfBt6W3pPeit5s3lTeUt223andmtu827vbstuv26zbqdum25/bmNuR24rbd9tk22HbXttb21jbTNtC2z3bNts12y7bKNsc2rzaudq42pvamdqY2pUAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQEhgAAAJ4AgAAGAB4AfgCjAKUApwCsALIAtwC9AL8AxwDJANEA1gDcAOIA7wD0APcA/AD/AZIDkwOYA6MDpgOpA7EDtQPAA8QDxiAiIDwgfyCnIZUhqCIaIh8iKSJIImEiZSMCIxAjISUAJQIlDCUQJRQlGCUcJSQlLCU0JTwlbCWAJYQliCWMJZMloSWsJbIluiW8JcQlyyXZJjwmQCZCJmAmYyZmJmv//wAAACAAoQClAKcAqgCwALUAugC/AMQAyQDRANYA3ADfAOQA8QD2APkA/wGSA5MDmAOjA6YDqQOxA7QDwAPDA8YgIiA8IH8gpyGQIagiGSIeIikiSCJhImQjAiMQIyAlACUCJQwlECUUJRglHCUkJSwlNCU8JVAlgCWEJYgljCWQJaAlrCWyJbolvCXEJcsl2CY6JkAmQiZgJmMmZSZq////4v/A/7//vv+8/7n/t/+1/7T/sP+v/6j/pP+f/53/nP+b/5r/mf+X/wX9Bf0B/Pf89fzz/Oz86vzg/N783eCC4GngJ+AA3xjfBt6W3pPeit5s3lTeUt223andmtu827vbstuv26zbqdum25/bmNuR24rbd9tk22HbXttb21jbTNtC2z3bNts12y7bKNsc2rzaudq42pvamdqY2pUAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAAABwAAABIAAAAegAAALwAAADuAAAA9wAAARQAAAExAAABWgAAAW0AAAF7AAABhAAAAY0AAAGvAAAB0gAAAecAAAIOAAACNQAAAk8AAAJsAAACjgAAAqYAAALOAAAC5gAAAvQAAAMHAAADLgAAAzwAAANjAAADhQAAA6UAAAPCAAAD4AAAA/0AAAQaAAAEPAAABEwAAARrAAAEfgAABJEAAASpAAAE0AAABNsAAAT4AAAFFQAABS0AAAVDAAAFZQAABYcAAAWuAAAFvAAABc8AAAXnAAAGBAAABisAAAZDAAAGZQAABnMAAAaVAAAGowAABsUAAAbOAAAG3gAABvYAAAcMAAAHKQAABz8AAAdaAAAHbQAAB4oAAAedAAAHqwAAB8MAAAfgAAAH7gAACAsAAAgjAAAIOwAACFEAAAhsAAAIfAAACJkAAAi2AAAIzgAACOYAAAkDAAAJKgAACUIAAAlfAAAJfAAACYUAAAmiAAAJugAACdcAAAngAAAKBwAACi4AAApgAAAKeQAACokAAAq4AAAKwQAACs8AAArYAAAK8QAACw4AAAshAAALSAAAC1gAAAt1AAALjQAAC5sAAAu0AAALzQAAC9YAAAvhAAAL6gAAC/4AAAwRAAAMJAAADDQAAAxHAAAMUgAADGoAAAyCAAAMlwAADKUAAAy/AAAM0gAADN0AAAz8AAANDwAADSkAAA0yAAANTAAADVUAAA1jAAANfAAADYcAAA2VAAANqQAADcIAAA3mAAAN7wAADg4AAA4XAAAOQQAADloAAA5qAAAOcwAADoYAAA6PAAAOogAADrIAAA7FAAAPCwAADxsAAA8uAAAPRwAAD1AAAA+HAAAPoAAAD6kAAA/CAAAP3wAAD/wAABAZAAAQNgAAEE4AABBfAAAQlQAAEJ4AABCxAAAQugAAEOEAABEnAAARUwAAEWYAABF+AAARlgAAEbgAABJrAAASfgAAEpEAABKpAAASwQAAEswAABLcAAATCAAAExMAABMrAAATQwAAE1sAABNzAAATmgAAE8YAABPeAAAT5wAAE/AAABQSAAAUKgAAFEIAABRaAAAUYwAAFGwAABSOAAAUngAAFLsAABTYAAAU/wAAFSEAABVNAAAVZQAAFX0AABWVAAAVngAAFacAABXTAAAWBAAAFg0AABYvAAAWOgAAFkUAABZxAAAWhAAAFpIAABagAAAWrgAAFrwAABbVAAAW7QAAFxkAABd0AAAXzwAAF/wAABgUAAAYJQAAGC4AABhBAAAYXgAAGHEAABiYAAAYvAAAGOAAABkYAAAZPwAAGWYAABmNAAAZtAAAGdYAABn9AAAaEAAAGi0AAIBgACAAoAEAAADAAcAAAEBAQEBAQEBAYABAAAA/wAAAAEAAAD/AAQAAAD+AAAA/4AAAP8AAAAAAgEAAoADgAQAAAMABwAAAQEBAQEBAQEBAAEAAAD/AAGAAQAAAP8ABAAAAP6AAAABgAAA/oAAAAACAIAAgAQAA4AAGwAfAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQAAAACAAAABAAAAAIAAAP+AAAAAgAAA/4AAAP8AAAD/gAAA/wAAAP+AAAAAgAAA/4AAAACAAQAAAACAAAADgAAA/4AAAACAAAD/gAAA/4AAAP8AAAD/gAAA/4AAAACAAAD/gAAAAIAAAACAAAABAAAAAIAAAP+A/wAAAAEAAAMAgACABAAEAAAbAB8AIwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAgAAgAAAAQAAAP8AAAABAAAAAIAAAP+AAAD/AAAA/4AAAP8AAAABAAAA/wAAAP+AAAAAgAAAAQD/gAAAAIAAAACAAAAAgAAABAAAAP+AAAD/gAAA/4AAAP+AAAD/gAAA/4AAAP+AAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAD/gP+AAAAAgP8A/4AAAACAAAAABQCAAIAEAAOAAAUAHQAjACkALwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAAAA/4AAAP+AAgABAAAA/4AAAP+AAAD/gAAA/4AAAP+AAAD/AAAAAIAAAACAAAAAgAAAAIAAAACA/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
756
928
  `)).arrayBuffer();
757
- await this.ct(t), this.et = l.parse(t)[0], await this.ut();
929
+ await this.kt(t), this._t = w.parse(t)[0], await this.Vt();
758
930
  }
759
- Pt(A) {
760
- if (A === void 0) return this.st;
761
- this.st = A, this.Et = this.Dt.calculateMaxGlyphDimensions(this.Bt.map((e) => e.character), this.st, this.ot);
762
- const t = this.ht.createTextureAtlas(this.Bt, this.Et, this.st, this.ot);
763
- this.Qt = t.framebuffer, this.rt = t.columns, this.it = t.rows;
931
+ Rt(A) {
932
+ if (A === void 0) return this.xt;
933
+ this.xt = A, this.Gt = this.St.calculateMaxGlyphDimensions(this.vt.map((e) => e.character), this.xt, this._t);
934
+ const t = this.Tt.createTextureAtlas(this.vt, this.Gt, this.xt, this._t);
935
+ this.bt = t.framebuffer, this.yt = t.columns, this.Mt = t.rows;
764
936
  }
765
- async It(A) {
937
+ async Ht(A) {
766
938
  try {
767
939
  const t = await fetch(A);
768
940
  if (!t.ok) throw new I(`Failed to load font file: ${t.status} ${t.statusText}`);
769
941
  const e = await t.arrayBuffer();
770
- await this.ct(e);
771
- const r = l.parse(e);
772
- if (!r || r.length === 0) throw Error("Failed to parse font file");
773
- this.et = r[0], await this.ut();
942
+ await this.kt(e);
943
+ const s = w.parse(e);
944
+ if (!s || s.length === 0) throw Error("Failed to parse font file");
945
+ this._t = s[0], await this.Vt();
774
946
  } catch (t) {
775
947
  throw new I("Failed to load font: " + (t instanceof Error ? t.message : "Unknown error"), t);
776
948
  }
777
949
  }
778
- async ct(A) {
950
+ async kt(A) {
779
951
  const t = Date.now();
780
- this.ot = this.ot === "UrsaFont" ? "UrsaFont" : "CustomFont_" + t, this.gt = new FontFace(this.ot, A), await this.gt.load(), document.fonts.add(this.gt);
952
+ this.$t = this.$t === "UrsaFont" ? "UrsaFont" : "CustomFont_" + t, this.Ft = new FontFace(this.$t, A), await this.Ft.load(), document.fonts.add(this.Ft);
781
953
  }
782
- async ut() {
783
- const A = this.nt.extractCharacters(this.et), t = this.nt.filterProblematicCharacters(A);
784
- this.Bt = this.lt.createCharacterObjects(t, this.et), this.Et = this.Dt.calculateMaxGlyphDimensions(t, this.st, this.ot);
785
- const e = this.ht.createTextureAtlas(this.Bt, this.Et, this.st, this.ot);
786
- this.Qt = e.framebuffer, this.rt = e.columns, this.it = e.rows;
954
+ async Vt() {
955
+ const A = this.Yt.extractCharacters(this._t), t = this.Yt.filterProblematicCharacters(A);
956
+ this.vt = this.Ot.createCharacterObjects(t, this._t), this.Gt = this.St.calculateMaxGlyphDimensions(t, this.xt, this._t);
957
+ const e = this.Tt.createTextureAtlas(this.vt, this.Gt, this.xt, this._t);
958
+ this.bt = e.framebuffer, this.yt = e.columns, this.Mt = e.rows;
787
959
  }
788
960
  getCharacterColor(A) {
789
- return this.lt.getCharacterColor(A, this.Bt);
961
+ return this.Ot.getCharacterColor(A, this.vt);
790
962
  }
791
963
  getCharacterColors(A) {
792
- return this.lt.getCharacterColors(A, this.Bt);
964
+ return this.Ot.getCharacterColors(A, this.vt);
793
965
  }
794
966
  hasAllCharacters(A) {
795
967
  if (typeof A != "string" || A.length === 0) return !1;
796
- const t = new Set(this.Bt.map((e) => e.character));
968
+ const t = new Set(this.vt.map((e) => e.character));
797
969
  for (const e of A) if (!t.has(e)) return !1;
798
970
  return !0;
799
971
  }
800
972
  S() {
801
- this.Qt.S(), document.fonts.delete(this.gt);
973
+ this.bt.S(), document.fonts.delete(this.Ft);
802
974
  }
803
975
  get fontFramebuffer() {
804
- return this.Qt;
976
+ return this.bt;
805
977
  }
806
978
  get characters() {
807
- return this.Bt;
979
+ return this.vt;
808
980
  }
809
981
  get textureColumns() {
810
- return this.rt;
982
+ return this.yt;
811
983
  }
812
984
  get textureRows() {
813
- return this.it;
985
+ return this.Mt;
814
986
  }
815
987
  get maxGlyphDimensions() {
816
- return this.Et;
988
+ return this.Gt;
817
989
  }
818
990
  get fontSize() {
819
- return this.st;
991
+ return this.xt;
820
992
  }
821
993
  get font() {
822
- return this.et;
994
+ return this._t;
823
995
  }
824
996
  }
825
- class oA {
997
+ class DA {
826
998
  constructor(A, t, e) {
827
- Q(this, "wt");
828
- Q(this, "ft");
999
+ Q(this, "zt");
1000
+ Q(this, "Lt");
829
1001
  Q(this, "p");
830
1002
  Q(this, "_");
831
- Q(this, "dt");
832
- Q(this, "_t");
833
- Q(this, "vt", !1);
834
- Q(this, "bt");
835
- Q(this, "xt");
836
- Q(this, "yt");
837
- this.bt = A, this.xt = t, this.yt = e, this.xA();
1003
+ Q(this, "Jt");
1004
+ Q(this, "Kt");
1005
+ Q(this, "Wt", !1);
1006
+ Q(this, "jt");
1007
+ Q(this, "Nt");
1008
+ Q(this, "Zt");
1009
+ this.jt = A, this.Nt = t, this.Zt = e, this.xA();
838
1010
  }
839
1011
  xA() {
840
- this.vt || (this.wt = Math.floor(this.bt.width / this.xt), this.ft = Math.floor(this.bt.height / this.yt)), this.Mt();
1012
+ this.Wt || (this.zt = Math.floor(this.jt.width / this.Nt), this.Lt = Math.floor(this.jt.height / this.Zt)), this.Xt();
841
1013
  }
842
- Mt() {
843
- this.p = this.wt * this.xt, this._ = this.ft * this.yt, this.dt = Math.floor((this.bt.width - this.p) / 2), this._t = Math.floor((this.bt.height - this._) / 2);
1014
+ Xt() {
1015
+ this.p = this.zt * this.Nt, this._ = this.Lt * this.Zt, this.Jt = Math.floor((this.jt.width - this.p) / 2), this.Kt = Math.floor((this.jt.height - this._) / 2);
844
1016
  }
845
- Gt(A, t) {
846
- this.xt = A, this.yt = t, this.xA();
1017
+ qt(A, t) {
1018
+ this.Nt = A, this.Zt = t, this.xA();
847
1019
  }
848
- Ft(A, t) {
849
- this.vt = !0, this.wt = A, this.ft = t, this.Mt();
1020
+ Ae(A, t) {
1021
+ this.Wt = !0, this.zt = A, this.Lt = t, this.Xt();
850
1022
  }
851
- Yt() {
852
- this.vt = !1, this.xA();
1023
+ te() {
1024
+ this.Wt = !1, this.xA();
853
1025
  }
854
- $t() {
855
- this.vt ? this.Mt() : this.xA();
1026
+ ee() {
1027
+ this.Wt ? this.Xt() : this.xA();
856
1028
  }
857
- Tt(A) {
858
- if (A === void 0) return this.vt;
859
- this.vt = A;
1029
+ se(A) {
1030
+ if (A === void 0) return this.Wt;
1031
+ this.Wt = A;
860
1032
  }
861
1033
  get cellWidth() {
862
- return this.xt;
1034
+ return this.Nt;
863
1035
  }
864
1036
  get cellHeight() {
865
- return this.yt;
1037
+ return this.Zt;
866
1038
  }
867
1039
  get cols() {
868
- return this.wt;
1040
+ return this.zt;
869
1041
  }
870
1042
  get rows() {
871
- return this.ft;
1043
+ return this.Lt;
872
1044
  }
873
1045
  get width() {
874
1046
  return this.p;
@@ -877,112 +1049,112 @@ class oA {
877
1049
  return this._;
878
1050
  }
879
1051
  get offsetX() {
880
- return this.dt;
1052
+ return this.Jt;
881
1053
  }
882
1054
  get offsetY() {
883
- return this._t;
1055
+ return this.Kt;
884
1056
  }
885
1057
  }
886
- class gA {
1058
+ class CA {
887
1059
  constructor(A, t = !1, e = {}) {
888
- Q(this, "bt");
889
- Q(this, "St");
890
- Q(this, "Ot");
891
- Q(this, "Ut");
1060
+ Q(this, "jt");
1061
+ Q(this, "re");
1062
+ Q(this, "Be");
1063
+ Q(this, "ie");
892
1064
  Q(this, "onTransformChange");
893
- this.St = A, this.Ot = t, this.bt = this.kt(e.width, e.height), t && this.setupTransformObserver();
1065
+ this.re = A, this.Be = t, this.jt = this.Qe(e.width, e.height), t && this.setupTransformObserver();
894
1066
  }
895
- kt(A, t) {
896
- var r;
1067
+ Qe(A, t) {
1068
+ var s;
897
1069
  const e = document.createElement("canvas");
898
- if (e.className = "textmodeCanvas", e.style.imageRendering = "pixelated", this.Ot) e.width = A || 800, e.height = t || 600, document.body.appendChild(e);
1070
+ if (e.className = "textmodeCanvas", e.style.imageRendering = "pixelated", this.Be) e.width = A || 800, e.height = t || 600, document.body.appendChild(e);
899
1071
  else {
900
- const B = this.St.getBoundingClientRect();
901
- let s = Math.round(B.width), i = Math.round(B.height);
902
- if (this.St instanceof HTMLVideoElement) {
903
- const n = this.St;
904
- (s === 0 || i === 0) && n.videoWidth > 0 && n.videoHeight > 0 && (s = n.videoWidth, i = n.videoHeight);
1072
+ const r = this.re.getBoundingClientRect();
1073
+ let i = Math.round(r.width), B = Math.round(r.height);
1074
+ if (this.re instanceof HTMLVideoElement) {
1075
+ const g = this.re;
1076
+ (i === 0 || B === 0) && g.videoWidth > 0 && g.videoHeight > 0 && (i = g.videoWidth, B = g.videoHeight);
905
1077
  }
906
- e.width = s, e.height = i, e.style.position = "absolute", e.style.pointerEvents = "none";
907
- const o = window.getComputedStyle(this.St);
908
- let g = parseInt(o.zIndex || "0", 10);
909
- isNaN(g) && (g = 0), e.style.zIndex = "" + (g + 1), this.Vt(e), (r = this.St.parentNode) == null || r.insertBefore(e, this.St.nextSibling);
1078
+ e.width = i, e.height = B, e.style.position = "absolute", e.style.pointerEvents = "none";
1079
+ const o = window.getComputedStyle(this.re);
1080
+ let n = parseInt(o.zIndex || "0", 10);
1081
+ isNaN(n) && (n = 0), e.style.zIndex = "" + (n + 1), this.Ee(e), (s = this.re.parentNode) == null || s.insertBefore(e, this.re.nextSibling);
910
1082
  }
911
1083
  return e;
912
1084
  }
913
- Vt(A) {
914
- const t = this.St.getBoundingClientRect();
915
- let e = this.St.offsetParent;
1085
+ Ee(A) {
1086
+ const t = this.re.getBoundingClientRect();
1087
+ let e = this.re.offsetParent;
916
1088
  if (e && e !== document.body) {
917
- const r = e.getBoundingClientRect();
918
- A.style.top = t.top - r.top + "px", A.style.left = t.left - r.left + "px";
1089
+ const s = e.getBoundingClientRect();
1090
+ A.style.top = t.top - s.top + "px", A.style.left = t.left - s.left + "px";
919
1091
  } else A.style.top = t.top + window.scrollY + "px", A.style.left = t.left + window.scrollX + "px";
920
1092
  }
921
- $t(A, t) {
922
- if (this.Ot) this.bt.width = A ?? this.bt.width, this.bt.height = t ?? this.bt.height;
1093
+ ee(A, t) {
1094
+ if (this.Be) this.jt.width = A ?? this.jt.width, this.jt.height = t ?? this.jt.height;
923
1095
  else {
924
- const e = this.St.getBoundingClientRect();
925
- let r = Math.round(e.width), B = Math.round(e.height);
926
- if (this.St instanceof HTMLVideoElement) {
927
- const s = this.St;
928
- (r === 0 || B === 0) && s.videoWidth > 0 && s.videoHeight > 0 && (r = s.videoWidth, B = s.videoHeight);
1096
+ const e = this.re.getBoundingClientRect();
1097
+ let s = Math.round(e.width), r = Math.round(e.height);
1098
+ if (this.re instanceof HTMLVideoElement) {
1099
+ const i = this.re;
1100
+ (s === 0 || r === 0) && i.videoWidth > 0 && i.videoHeight > 0 && (s = i.videoWidth, r = i.videoHeight);
929
1101
  }
930
- this.bt.width = r, this.bt.height = B, this.Vt(this.bt);
1102
+ this.jt.width = s, this.jt.height = r, this.Ee(this.jt);
931
1103
  }
932
1104
  }
933
- Rt() {
934
- const A = { alpha: !1, premultipliedAlpha: !1, preserveDrawingBuffer: !0, antialias: !1, depth: !1, stencil: !1, powerPreference: "high-performance" }, t = this.bt.getContext("webgl2", A) || this.bt.getContext("webgl", A);
1105
+ ge() {
1106
+ const A = { alpha: !1, premultipliedAlpha: !1, preserveDrawingBuffer: !0, antialias: !1, depth: !1, stencil: !1, powerPreference: "high-performance" }, t = this.jt.getContext("webgl2", A) || this.jt.getContext("webgl", A);
935
1107
  if (!t) throw new I("WebGL context could not be created. Ensure your browser supports WebGL.");
936
1108
  return t;
937
1109
  }
938
1110
  setupTransformObserver() {
939
- this.Ut = new ResizeObserver((A) => {
1111
+ this.ie = new ResizeObserver((A) => {
940
1112
  for (const t of A) {
941
1113
  const e = t.contentRect;
942
- !this.onTransformChange || Math.round(e.width) === this.bt.width && Math.round(e.height) === this.bt.height || this.onTransformChange();
1114
+ !this.onTransformChange || Math.round(e.width) === this.jt.width && Math.round(e.height) === this.jt.height || this.onTransformChange();
943
1115
  }
944
- }), this.Ut.observe(this.bt);
1116
+ }), this.ie.observe(this.jt);
945
1117
  }
946
1118
  S() {
947
- this.Ut && this.Ut.disconnect();
948
- const A = this.bt.getContext("webgl") || this.bt.getContext("webgl2");
1119
+ this.ie && this.ie.disconnect();
1120
+ const A = this.jt.getContext("webgl") || this.jt.getContext("webgl2");
949
1121
  if (A) {
950
1122
  const t = A.getExtension("WEBGL_lose_context");
951
1123
  t && t.loseContext();
952
1124
  }
953
- this.bt.parentNode && this.bt.parentNode.removeChild(this.bt);
1125
+ this.jt.parentNode && this.jt.parentNode.removeChild(this.jt);
954
1126
  }
955
1127
  get canvas() {
956
- return this.bt;
1128
+ return this.jt;
957
1129
  }
958
1130
  get width() {
959
- return this.bt.width;
1131
+ return this.jt.width;
960
1132
  }
961
1133
  get height() {
962
- return this.bt.height;
1134
+ return this.jt.height;
963
1135
  }
964
1136
  }
965
- class T {
966
- constructor(A, t, e, r = {}) {
967
- Q(this, "WA");
968
- Q(this, "Ht");
969
- Q(this, "zt");
970
- Q(this, "Jt");
971
- Q(this, "Lt");
972
- Q(this, "Kt");
973
- Q(this, "Wt");
974
- Q(this, "jt");
1137
+ class M {
1138
+ constructor(A, t, e, s = {}) {
1139
+ Q(this, "Dt");
1140
+ Q(this, "oe");
1141
+ Q(this, "ne");
1142
+ Q(this, "ae");
1143
+ Q(this, "he");
1144
+ Q(this, "le");
1145
+ Q(this, "ce");
1146
+ Q(this, "De");
975
1147
  Q(this, "h");
976
- this.WA = A, this.Ht = t, this.zt = e, this.h = r;
977
- const B = this.zt.cols, s = this.zt.rows;
978
- this.Jt = this.WA.TA(B, s), this.Lt = this.WA.TA(B, s), this.Kt = this.WA.TA(B, s), this.Wt = this.WA.TA(B, s), this.jt = this.WA.TA(B, s);
1148
+ this.Dt = A, this.oe = t, this.ne = e, this.h = s;
1149
+ const r = this.ne.cols, i = this.ne.rows;
1150
+ this.ae = this.Dt.TA(r, i), this.he = this.Dt.TA(r, i), this.le = this.Dt.TA(r, i), this.ce = this.Dt.TA(r, i), this.De = this.Dt.TA(r, i);
979
1151
  }
980
- $t() {
981
- const A = this.zt.cols, t = this.zt.rows;
982
- this.Jt.resize(A, t), this.Lt.resize(A, t), this.Kt.resize(A, t), this.Wt.resize(A, t), this.jt.resize(A, t);
1152
+ ee() {
1153
+ const A = this.ne.cols, t = this.ne.rows;
1154
+ this.ae.resize(A, t), this.he.resize(A, t), this.le.resize(A, t), this.ce.resize(A, t), this.De.resize(A, t);
983
1155
  }
984
1156
  enabled(A) {
985
- this.h.enabled = A;
1157
+ u.C(typeof A == "boolean" || typeof A == "number" && Number.isInteger(A), "Enabled must be a boolean value or an integer (0 for false, any other number for true).", { method: "enabled", providedValue: A }) && (this.h.enabled = !!A);
986
1158
  }
987
1159
  enable() {
988
1160
  this.enabled(!0);
@@ -991,51 +1163,51 @@ class T {
991
1163
  this.enabled(!1);
992
1164
  }
993
1165
  S() {
994
- this.Jt.S(), this.Lt.S(), this.Kt.S(), this.Wt.S(), this.jt.S();
1166
+ this.ae.S(), this.he.S(), this.le.S(), this.ce.S(), this.De.S();
995
1167
  }
996
1168
  get characterFramebuffer() {
997
- return this.Jt;
1169
+ return this.ae;
998
1170
  }
999
1171
  get primaryColorFramebuffer() {
1000
- return this.Lt;
1172
+ return this.he;
1001
1173
  }
1002
1174
  get secondaryColorFramebuffer() {
1003
- return this.Kt;
1175
+ return this.le;
1004
1176
  }
1005
1177
  get rotationFramebuffer() {
1006
- return this.Wt;
1178
+ return this.ce;
1007
1179
  }
1008
1180
  get transformFramebuffer() {
1009
- return this.jt;
1181
+ return this.De;
1010
1182
  }
1011
1183
  get options() {
1012
1184
  return this.h;
1013
1185
  }
1014
1186
  }
1015
- class nA {
1187
+ class uA {
1016
1188
  constructor(A, t) {
1017
1189
  Q(this, "I");
1018
- Q(this, "WA");
1019
- Q(this, "Zt");
1020
- this.WA = A, this.Zt = t;
1021
- const e = Math.max(this.Zt.length, 1);
1022
- this.I = this.WA.TA(e, 1), this.Nt();
1190
+ Q(this, "Dt");
1191
+ Q(this, "Ce");
1192
+ this.Dt = A, this.Ce = t;
1193
+ const e = Math.max(this.Ce.length, 1);
1194
+ this.I = this.Dt.TA(e, 1), this.ue();
1023
1195
  }
1024
- Nt() {
1025
- const A = this.Zt.length;
1196
+ ue() {
1197
+ const A = this.Ce.length;
1026
1198
  this.I.width !== A && this.I.resize(A, 1);
1027
1199
  const t = new Uint8Array(1 * A * 4);
1028
1200
  for (let e = 0; e < A; e++) {
1029
- const r = this.Zt[e], B = 4 * e;
1030
- t[B] = r[0], t[B + 1] = r[1], t[B + 2] = r[2], t[B + 3] = 255;
1201
+ const s = this.Ce[e], r = 4 * e;
1202
+ t[r] = s[0], t[r + 1] = s[1], t[r + 2] = s[2], t[r + 3] = 255;
1031
1203
  }
1032
1204
  this.I.updatePixels(t, A, 1);
1033
1205
  }
1034
1206
  setColors(A) {
1035
- this.Zt = A, this.Nt();
1207
+ this.Ce = A, this.ue();
1036
1208
  }
1037
1209
  get colors() {
1038
- return this.Zt;
1210
+ return this.Ce;
1039
1211
  }
1040
1212
  get framebuffer() {
1041
1213
  return this.I;
@@ -1044,64 +1216,64 @@ class nA {
1044
1216
  return this.I.texture;
1045
1217
  }
1046
1218
  }
1047
- class S extends T {
1048
- constructor(t, e, r, B = {}) {
1049
- super(t, e, r, B);
1050
- Q(this, "Xt");
1051
- this.Xt = new nA(this.WA, this.Ht.getCharacterColors(" .:-=+*%@#"));
1219
+ class O extends M {
1220
+ constructor(t, e, s, r = {}) {
1221
+ super(t, e, s, r);
1222
+ Q(this, "Pe");
1223
+ this.Pe = new uA(this.Dt, this.oe.getCharacterColors(" .:-=+*%@#"));
1052
1224
  }
1053
1225
  characters(t) {
1054
- P.C(this.Ht.hasAllCharacters(t), "One or more characters do not exist in the current font.", { method: "characters", providedValue: t }) && (this.h.characters = t, this.Xt.setColors(this.Ht.getCharacterColors(t)));
1226
+ u.C(this.oe.hasAllCharacters(t), "One or more characters do not exist in the current font.", { method: "characters", providedValue: t }) && (this.h.characters = t, this.Pe.setColors(this.oe.getCharacterColors(t)));
1055
1227
  }
1056
- characterColor(t, e, r, B = 255) {
1057
- const s = this.qt(t, "characterColor", e, r, B);
1058
- s && (this.h.characterColor = s);
1228
+ characterColor(t, e, s, r = 255) {
1229
+ const i = this.Ie(t, "characterColor", e, s, r);
1230
+ i && (this.h.characterColor = i);
1059
1231
  }
1060
1232
  characterColorMode(t) {
1061
- this.Ae(t, "characterColorMode");
1233
+ this.we(t, "characterColorMode");
1062
1234
  }
1063
- cellColor(t, e, r, B = 255) {
1064
- const s = this.qt(t, "cellColor", e, r, B);
1065
- s && (this.h.cellColor = s);
1235
+ cellColor(t, e, s, r = 255) {
1236
+ const i = this.Ie(t, "cellColor", e, s, r);
1237
+ i && (this.h.cellColor = i);
1066
1238
  }
1067
1239
  cellColorMode(t) {
1068
- this.Ae(t, "cellColorMode");
1240
+ this.we(t, "cellColorMode");
1069
1241
  }
1070
1242
  invert(t) {
1071
- this.te(t, "invert", "Invert");
1243
+ this.fe(t, "invert", "Invert");
1072
1244
  }
1073
1245
  rotation(t) {
1074
- if (!P.C(typeof t == "number", "Rotation angle must be a number.", { method: "rotation", providedValue: t })) return;
1246
+ if (!u.C(typeof t == "number", "Rotation angle must be a number.", { method: "rotation", providedValue: t })) return;
1075
1247
  (t %= 360) < 0 && (t += 360);
1076
- const e = 255 * t / 360, r = Math.floor(e) / 255, B = Math.round(e - r);
1077
- this.h.rotation = [r, B, 0, 1];
1248
+ const e = 255 * t / 360, s = Math.floor(e) / 255, r = Math.round(e - s);
1249
+ this.h.rotation = [s, r, 0, 1];
1078
1250
  }
1079
1251
  flipHorizontally(t) {
1080
- this.te(t, "flipHorizontally", "Flip horizontally");
1252
+ this.fe(t, "flipHorizontally", "Flip horizontally");
1081
1253
  }
1082
1254
  flipVertically(t) {
1083
- this.te(t, "flipVertically", "Flip vertically");
1255
+ this.fe(t, "flipVertically", "Flip vertically");
1084
1256
  }
1085
- qt(t, e, r, B, s = 255) {
1086
- let i, o, g, n;
1257
+ Ie(t, e, s, r, i = 255) {
1258
+ let B, o, n, g;
1087
1259
  if (typeof t == "string") {
1088
- const a = this.ee(t);
1089
- if (!a) return P.C(!1, "Invalid hex color format. Use '#FF0000', '#F00', 'FF0000', or 'F00'.", { method: e, providedValue: t }), null;
1090
- [i, o, g, n] = a;
1091
- } else if (i = t, o = r !== void 0 ? r : t, g = B !== void 0 ? B : t, n = s, !P.C([i, o, g, n].every((a) => a >= 0 && a <= 255), e.charAt(0).toUpperCase() + e.slice(1) + " color values must be between 0 and 255", { method: e, providedValues: { r: i, g: o, b: g, a: n } })) return null;
1092
- return [i / 255, o / 255, g / 255, n / 255];
1260
+ const a = this.de(t);
1261
+ if (!a) return u.C(!1, "Invalid hex color format. Use '#FF0000', '#F00', 'FF0000', or 'F00'.", { method: e, providedValue: t }), null;
1262
+ [B, o, n, g] = a;
1263
+ } else if (B = t, o = s !== void 0 ? s : t, n = r !== void 0 ? r : t, g = i, !u.C([B, o, n, g].every((a) => a >= 0 && a <= 255), e.charAt(0).toUpperCase() + e.slice(1) + " color values must be between 0 and 255", { method: e, providedValues: { r: B, g: o, b: n, a: g } })) return null;
1264
+ return [B / 255, o / 255, n / 255, g / 255];
1093
1265
  }
1094
- Ae(t, e) {
1095
- P.C(["sampled", "fixed"].includes(t), "Invalid color mode. Must be 'sampled' or 'fixed'.", { method: e, providedValue: t }) && (this.h[e] = t);
1266
+ we(t, e) {
1267
+ u.C(["sampled", "fixed"].includes(t), "Invalid color mode. Must be 'sampled' or 'fixed'.", { method: e, providedValue: t }) && (this.h[e] = t);
1096
1268
  }
1097
- te(t, e, r) {
1098
- P.C(typeof t == "boolean" || typeof t == "number" && Number.isInteger(t), r + " must be a boolean value or an integer (0 for false, any other number for true).", { method: e, providedValue: t }) && (this.h[e] = !!t);
1269
+ fe(t, e, s) {
1270
+ u.C(typeof t == "boolean" || typeof t == "number" && Number.isInteger(t), s + " must be a boolean value or an integer (0 for false, any other number for true).", { method: e, providedValue: t }) && (this.h[e] = !!t);
1099
1271
  }
1100
- ee(t) {
1272
+ de(t) {
1101
1273
  return t = t.replace(/^#/, ""), /^[0-9A-Fa-f]{3}$|^[0-9A-Fa-f]{6}$/.test(t) ? (t.length === 3 && (t = t.split("").map((e) => e + e).join("")), [parseInt(t.slice(0, 2), 16), parseInt(t.slice(2, 4), 16), parseInt(t.slice(4, 6), 16), 255]) : null;
1102
1274
  }
1103
1275
  }
1104
- const G = `attribute vec2 a_position;\r
1276
+ const T = `attribute vec2 a_position;\r
1105
1277
  attribute vec2 a_texCoord;\r
1106
1278
  varying vec2 v_uv;\r
1107
1279
  \r
@@ -1139,291 +1311,304 @@ void main() {\r
1139
1311
  \r
1140
1312
  gl_Position = vec4(pos, 0.0, 1.0);\r
1141
1313
  }\r
1142
- `, aA = { enabled: !0, characters: " .:-=+*%@#", characterColor: [1, 1, 1, 1], characterColorMode: "sampled", cellColor: [0, 0, 0, 1], cellColorMode: "fixed", invert: !1, rotation: [0, 0, 0, 255], flipHorizontally: !1, flipVertically: !1, brightnessRange: [0, 255] };
1143
- class W extends S {
1144
- constructor(t, e, r) {
1145
- super(t, e, r, { ...aA });
1146
- Q(this, "Be");
1147
- Q(this, "Qe");
1148
- Q(this, "se");
1149
- Q(this, "re");
1150
- Q(this, "ie");
1151
- Q(this, "Ee");
1152
- this.Be = new w(t.context, G, "precision lowp float;uniform sampler2D u_sketchTexture;uniform vec2 u_gridCellDimensions;uniform vec2 u_brightnessRange;varying vec2 v_uv;void main(){vec2 cellCenter=(floor(v_uv*u_gridCellDimensions)+vec2(0.5))/u_gridCellDimensions;vec4 color=texture2D(u_sketchTexture,cellCenter);float brightness=dot(color.rgb,vec3(0.299,0.587,0.114));float brightnessValue=brightness*255.0;if(brightnessValue>=u_brightnessRange.x&&brightnessValue<=u_brightnessRange.y){gl_FragColor=color;}else{gl_FragColor=vec4(0.0);}}"), this.Qe = new w(t.context, G, "precision lowp float;uniform sampler2D u_sampleTexture;uniform vec4 u_fillColor;uniform bool u_useFixedColor;varying vec2 v_uv;void main(){vec4 sampleColor=texture2D(u_sampleTexture,v_uv);if(sampleColor.a>0.0){if(u_useFixedColor){gl_FragColor=u_fillColor;}else{gl_FragColor=sampleColor;}}else{gl_FragColor=vec4(0.0);}}"), this.re = new w(t.context, G, "precision lowp float;uniform sampler2D u_sampleTexture;uniform bool u_invert;uniform bool u_flipHorizontally;uniform bool u_flipVertically;varying vec2 v_uv;void main(){vec4 sampleColor=texture2D(u_sampleTexture,v_uv);if(sampleColor.a>0.0){float invertValue=u_invert ? 1.0 : 0.0;float flipHValue=u_flipHorizontally ? 1.0 : 0.0;float flipVValue=u_flipVertically ? 1.0 : 0.0;gl_FragColor=vec4(invertValue,flipHValue,flipVValue,1.0);}else{gl_FragColor=vec4(0.0);}}"), this.ie = new w(t.context, G, "precision lowp float;uniform sampler2D u_sampleTexture;uniform vec4 u_rotationColor;varying vec2 v_uv;void main(){vec4 sampleColor=texture2D(u_sampleTexture,v_uv);if(sampleColor.a>0.0){gl_FragColor=u_rotationColor;}else{gl_FragColor=vec4(0.0);}}"), this.se = new w(t.context, G, "precision lowp float;uniform sampler2D u_colorSampleFramebuffer;uniform sampler2D u_charPaletteTexture;uniform vec2 u_charPaletteSize;uniform vec2 u_brightnessRange;varying vec2 v_uv;void main(){vec4 color=texture2D(u_colorSampleFramebuffer,v_uv);if(color.a==0.0){gl_FragColor=vec4(0.0);return;}float brightness=dot(color.rgb,vec3(0.299,0.587,0.114))*255.0;vec2 range=u_brightnessRange;if(brightness<range.x||brightness>range.y){gl_FragColor=vec4(0.0);return;}float t=(brightness-range.x)/(range.y-range.x);float idx=clamp(floor(t*u_charPaletteSize.x),0.0,u_charPaletteSize.x-1.0);vec3 charColor=texture2D(u_charPaletteTexture,vec2((idx+0.5)/u_charPaletteSize.x,0.0)).rgb;gl_FragColor=vec4(charColor,1.0);}"), this.Ee = this.WA.TA(this.zt.cols, this.zt.rows);
1153
- }
1154
- ge(t) {
1155
- const e = this.zt.cols, r = this.zt.rows;
1156
- this.Ee.begin(), this.WA.OA(), this.WA.IA(this.Be), this.WA.GA("u_sketchTexture", t), this.WA.GA("u_gridCellDimensions", [e, r]), this.WA.GA("u_brightnessRange", this.h.brightnessRange), this.WA.FA(0, 0, e, r), this.Ee.end(), this.Lt.begin(), this.WA.OA(), this.WA.IA(this.Qe), this.WA.GA("u_sampleTexture", this.Ee), this.WA.GA("u_fillColor", this.h.characterColor), this.WA.GA("u_useFixedColor", this.h.characterColorMode === "fixed"), this.WA.FA(0, 0, e, r), this.Lt.end(), this.Kt.begin(), this.WA.OA(), this.WA.IA(this.Qe), this.WA.GA("u_sampleTexture", this.Ee), this.WA.GA("u_fillColor", this.h.cellColor), this.WA.GA("u_useFixedColor", this.h.cellColorMode === "fixed"), this.WA.FA(0, 0, e, r), this.Kt.end(), this.jt.begin(), this.WA.OA(), this.WA.IA(this.re), this.WA.GA("u_sampleTexture", this.Ee), this.WA.GA("u_invert", this.h.invert), this.WA.GA("u_flipHorizontally", this.h.flipHorizontally), this.WA.GA("u_flipVertically", this.h.flipVertically), this.WA.FA(0, 0, e, r), this.jt.end(), this.Wt.begin(), this.WA.OA(), this.WA.IA(this.ie), this.WA.GA("u_sampleTexture", this.Ee), this.WA.GA("u_rotationColor", this.h.rotation), this.WA.FA(0, 0, e, r), this.Wt.end(), this.Jt.begin(), this.WA.OA(), this.WA.IA(this.se), this.WA.GA("u_colorSampleFramebuffer", this.Ee), this.WA.GA("u_charPaletteTexture", this.Xt.texture), this.WA.GA("u_charPaletteSize", [this.Xt.colors.length, 1]), this.WA.GA("u_brightnessRange", this.h.brightnessRange), this.WA.FA(0, 0, e, r), this.Jt.end();
1157
- }
1158
- $t() {
1159
- super.$t(), this.Ee.resize(this.zt.cols, this.zt.rows);
1314
+ `, PA = { enabled: !0, characters: " .:-=+*%@#", characterColor: [1, 1, 1, 1], characterColorMode: "sampled", cellColor: [0, 0, 0, 1], cellColorMode: "fixed", invert: !1, rotation: [0, 0, 0, 255], flipHorizontally: !1, flipVertically: !1, brightnessRange: [0, 255] };
1315
+ class S extends O {
1316
+ constructor(t, e, s) {
1317
+ super(t, e, s, { ...PA });
1318
+ Q(this, "me");
1319
+ Q(this, "pe");
1320
+ Q(this, "_e");
1321
+ Q(this, "ve");
1322
+ Q(this, "be");
1323
+ Q(this, "xe");
1324
+ this.me = new x(t.context, T, "precision lowp float;uniform sampler2D u_sketchTexture;uniform vec2 u_gridCellDimensions;uniform vec2 u_brightnessRange;varying vec2 v_uv;void main(){vec2 cellCenter=(floor(v_uv*u_gridCellDimensions)+vec2(0.5))/u_gridCellDimensions;vec4 color=texture2D(u_sketchTexture,cellCenter);float brightness=dot(color.rgb,vec3(0.299,0.587,0.114));float brightnessValue=brightness*255.0;if(brightnessValue>=u_brightnessRange.x&&brightnessValue<=u_brightnessRange.y){gl_FragColor=color;}else{gl_FragColor=vec4(0.0);}}"), this.pe = new x(t.context, T, "precision lowp float;uniform sampler2D u_sampleTexture;uniform vec4 u_fillColor;uniform bool u_useFixedColor;varying vec2 v_uv;void main(){vec4 sampleColor=texture2D(u_sampleTexture,v_uv);if(sampleColor.a>0.0){if(u_useFixedColor){gl_FragColor=u_fillColor;}else{gl_FragColor=sampleColor;}}else{gl_FragColor=vec4(0.0);}}"), this.ve = new x(t.context, T, "precision lowp float;uniform sampler2D u_sampleTexture;uniform bool u_invert;uniform bool u_flipHorizontally;uniform bool u_flipVertically;varying vec2 v_uv;void main(){vec4 sampleColor=texture2D(u_sampleTexture,v_uv);if(sampleColor.a>0.0){float invertValue=u_invert ? 1.0 : 0.0;float flipHValue=u_flipHorizontally ? 1.0 : 0.0;float flipVValue=u_flipVertically ? 1.0 : 0.0;gl_FragColor=vec4(invertValue,flipHValue,flipVValue,1.0);}else{gl_FragColor=vec4(0.0);}}"), this.be = new x(t.context, T, "precision lowp float;uniform sampler2D u_sampleTexture;uniform vec4 u_rotationColor;varying vec2 v_uv;void main(){vec4 sampleColor=texture2D(u_sampleTexture,v_uv);if(sampleColor.a>0.0){gl_FragColor=u_rotationColor;}else{gl_FragColor=vec4(0.0);}}"), this._e = new x(t.context, T, "precision lowp float;uniform sampler2D u_colorSampleFramebuffer;uniform sampler2D u_charPaletteTexture;uniform vec2 u_charPaletteSize;uniform vec2 u_brightnessRange;varying vec2 v_uv;void main(){vec4 color=texture2D(u_colorSampleFramebuffer,v_uv);if(color.a==0.0){gl_FragColor=vec4(0.0);return;}float brightness=dot(color.rgb,vec3(0.299,0.587,0.114))*255.0;vec2 range=u_brightnessRange;if(brightness<range.x||brightness>range.y){gl_FragColor=vec4(0.0);return;}float t=(brightness-range.x)/(range.y-range.x);float idx=clamp(floor(t*u_charPaletteSize.x),0.0,u_charPaletteSize.x-1.0);vec3 charColor=texture2D(u_charPaletteTexture,vec2((idx+0.5)/u_charPaletteSize.x,0.0)).rgb;gl_FragColor=vec4(charColor,1.0);}"), this.xe = this.Dt.TA(this.ne.cols, this.ne.rows);
1325
+ }
1326
+ ye(t) {
1327
+ const e = this.ne.cols, s = this.ne.rows;
1328
+ this.xe.begin(), this.Dt.OA(), this.Dt.IA(this.me), this.Dt.GA("u_sketchTexture", t), this.Dt.GA("u_gridCellDimensions", [e, s]), this.Dt.GA("u_brightnessRange", this.h.brightnessRange), this.Dt.FA(0, 0, e, s), this.xe.end(), this.he.begin(), this.Dt.OA(), this.Dt.IA(this.pe), this.Dt.GA("u_sampleTexture", this.xe), this.Dt.GA("u_fillColor", this.h.characterColor), this.Dt.GA("u_useFixedColor", this.h.characterColorMode === "fixed"), this.Dt.FA(0, 0, e, s), this.he.end(), this.le.begin(), this.Dt.OA(), this.Dt.IA(this.pe), this.Dt.GA("u_sampleTexture", this.xe), this.Dt.GA("u_fillColor", this.h.cellColor), this.Dt.GA("u_useFixedColor", this.h.cellColorMode === "fixed"), this.Dt.FA(0, 0, e, s), this.le.end(), this.De.begin(), this.Dt.OA(), this.Dt.IA(this.ve), this.Dt.GA("u_sampleTexture", this.xe), this.Dt.GA("u_invert", this.h.invert), this.Dt.GA("u_flipHorizontally", this.h.flipHorizontally), this.Dt.GA("u_flipVertically", this.h.flipVertically), this.Dt.FA(0, 0, e, s), this.De.end(), this.ce.begin(), this.Dt.OA(), this.Dt.IA(this.be), this.Dt.GA("u_sampleTexture", this.xe), this.Dt.GA("u_rotationColor", this.h.rotation), this.Dt.FA(0, 0, e, s), this.ce.end(), this.ae.begin(), this.Dt.OA(), this.Dt.IA(this._e), this.Dt.GA("u_colorSampleFramebuffer", this.xe), this.Dt.GA("u_charPaletteTexture", this.Pe.texture), this.Dt.GA("u_charPaletteSize", [this.Pe.colors.length, 1]), this.Dt.GA("u_brightnessRange", this.h.brightnessRange), this.Dt.FA(0, 0, e, s), this.ae.end();
1329
+ }
1330
+ ee() {
1331
+ super.ee(), this.xe.resize(this.ne.cols, this.ne.rows);
1160
1332
  }
1161
1333
  brightnessRange(t) {
1162
- P.C(Array.isArray(t) && t.length === 2 && t.every((e) => typeof e == "number" && e >= 0 && e <= 255), "Brightness range must be an array of two numbers between 0 and 255.", { method: "brightnessRange", providedValue: t }) && (this.h.brightnessRange = t);
1334
+ u.C(Array.isArray(t) && t.length === 2 && t.every((e) => typeof e == "number" && e >= 0 && e <= 255), "Brightness range must be an array of two numbers between 0 and 255.", { method: "brightnessRange", providedValue: t }) && (this.h.brightnessRange = t);
1163
1335
  }
1164
1336
  }
1165
- const TA = Object.freeze(Object.defineProperty({ __proto__: null, TextmodeBrightnessConverter: W, TextmodeConverter: T, TextmodeFeatureConverter: S }, Symbol.toStringTag, { value: "Module" }));
1166
- class hA {
1337
+ const OA = Object.freeze(Object.defineProperty({ __proto__: null, TextmodeBrightnessConverter: S, TextmodeConverter: M, TextmodeFeatureConverter: O }, Symbol.toStringTag, { value: "Module" }));
1338
+ class dA {
1167
1339
  constructor(A, t, e) {
1168
- Q(this, "WA");
1169
- Q(this, "et");
1170
- Q(this, "zt");
1171
- Q(this, "oe");
1340
+ Q(this, "Dt");
1341
+ Q(this, "_t");
1172
1342
  Q(this, "ne");
1343
+ Q(this, "Me");
1344
+ Q(this, "Ge");
1345
+ Q(this, "Fe");
1346
+ Q(this, "$e");
1347
+ Q(this, "Ye");
1173
1348
  Q(this, "ae");
1174
1349
  Q(this, "he");
1350
+ Q(this, "le");
1351
+ Q(this, "ce");
1175
1352
  Q(this, "De");
1176
- Q(this, "Jt");
1177
- Q(this, "Lt");
1178
- Q(this, "Kt");
1179
- Q(this, "Wt");
1180
- Q(this, "jt");
1181
- this.WA = A, this.et = t, this.zt = e, this.De = this.WA.yA(R, "precision mediump float;uniform sampler2D u_characterTexture;uniform vec2 u_charsetDimensions;uniform sampler2D u_primaryColorTexture;uniform sampler2D u_secondaryColorTexture;uniform sampler2D u_transformTexture;uniform sampler2D u_asciiCharacterTexture;uniform sampler2D u_rotationTexture;uniform sampler2D u_captureTexture;uniform vec2 u_captureDimensions;uniform int u_backgroundMode;uniform vec2 u_gridCellDimensions;uniform vec2 u_gridPixelDimensions;mat2 rotate2D(float angle){float s=sin(angle);float c=cos(angle);return mat2(c,-s,s,c);}void main(){vec2 adjustedCoord=gl_FragCoord.xy/u_gridPixelDimensions;vec2 gridCoord=adjustedCoord*u_gridCellDimensions;vec2 cellCoord=floor(gridCoord);vec2 charIndexTexCoord=(cellCoord+0.5)/u_gridCellDimensions;vec4 primaryColor=texture2D(u_primaryColorTexture,charIndexTexCoord);vec4 secondaryColor=texture2D(u_secondaryColorTexture,charIndexTexCoord);vec4 transformColor=texture2D(u_transformTexture,charIndexTexCoord);bool isInverted=transformColor.r>0.5;bool flipHorizontal=transformColor.g>0.5;bool flipVertical=transformColor.b>0.5;vec4 encodedIndexVec=texture2D(u_asciiCharacterTexture,charIndexTexCoord);if(encodedIndexVec.a<0.01){gl_FragColor=(u_backgroundMode==0)? vec4(0.0):texture2D(u_captureTexture,gl_FragCoord.xy/u_captureDimensions);return;}int charIndex=int(encodedIndexVec.r*255.0+0.5)+int(encodedIndexVec.g*255.0+0.5)*256;int charCol=int(mod(float(charIndex),u_charsetDimensions.x));int charRow=charIndex/int(u_charsetDimensions.x);float flippedRow=(u_charsetDimensions.y-1.0)-float(charRow);vec2 charCoord=vec2(float(charCol),flippedRow)/u_charsetDimensions;vec4 rotationColor=texture2D(u_rotationTexture,charIndexTexCoord);float scaledAngle=rotationColor.r*255.0+rotationColor.g;float rotationAngle=(scaledAngle*360.0/255.0)*0.017453292;vec2 fractionalPart=fract(gridCoord)-0.5;if(flipHorizontal)fractionalPart.x=-fractionalPart.x;if(flipVertical)fractionalPart.y=-fractionalPart.y;fractionalPart=rotate2D(rotationAngle)*fractionalPart+0.5;vec2 cellSize=1.0/u_charsetDimensions;vec2 texCoord=charCoord+fractionalPart*cellSize;vec2 cellMax=charCoord+cellSize;if(any(lessThan(texCoord,charCoord))||any(greaterThan(texCoord,cellMax))){gl_FragColor=isInverted ? primaryColor : secondaryColor;return;}vec4 charTexel=texture2D(u_characterTexture,texCoord);if(isInverted)charTexel.rgb=1.0-charTexel.rgb;gl_FragColor=mix(secondaryColor,primaryColor,charTexel);}"), this.ne = new W(A, t, e), this.ae = new T(A, t, e), this.oe = [this.ne, this.ae], this.Jt = this.WA.TA(e.cols, e.rows), this.Lt = this.WA.TA(e.cols, e.rows), this.Kt = this.WA.TA(e.cols, e.rows), this.Wt = this.WA.TA(e.cols, e.rows), this.jt = this.WA.TA(e.cols, e.rows), this.he = this.WA.TA(this.zt.width, this.zt.height);
1353
+ this.Dt = A, this._t = t, this.ne = e, this.Ye = this.Dt.yA(R, "precision mediump float;uniform sampler2D u_characterTexture;uniform vec2 u_charsetDimensions;uniform sampler2D u_primaryColorTexture;uniform sampler2D u_secondaryColorTexture;uniform sampler2D u_transformTexture;uniform sampler2D u_asciiCharacterTexture;uniform sampler2D u_rotationTexture;uniform sampler2D u_captureTexture;uniform vec2 u_captureDimensions;uniform int u_backgroundMode;uniform vec2 u_gridCellDimensions;uniform vec2 u_gridPixelDimensions;mat2 rotate2D(float angle){float s=sin(angle);float c=cos(angle);return mat2(c,-s,s,c);}void main(){vec2 adjustedCoord=gl_FragCoord.xy/u_gridPixelDimensions;vec2 gridCoord=adjustedCoord*u_gridCellDimensions;vec2 cellCoord=floor(gridCoord);vec2 charIndexTexCoord=(cellCoord+0.5)/u_gridCellDimensions;vec4 primaryColor=texture2D(u_primaryColorTexture,charIndexTexCoord);vec4 secondaryColor=texture2D(u_secondaryColorTexture,charIndexTexCoord);vec4 transformColor=texture2D(u_transformTexture,charIndexTexCoord);bool isInverted=transformColor.r>0.5;bool flipHorizontal=transformColor.g>0.5;bool flipVertical=transformColor.b>0.5;vec4 encodedIndexVec=texture2D(u_asciiCharacterTexture,charIndexTexCoord);if(encodedIndexVec.a<0.01){gl_FragColor=(u_backgroundMode==0)? vec4(0.0):texture2D(u_captureTexture,gl_FragCoord.xy/u_captureDimensions);return;}int charIndex=int(encodedIndexVec.r*255.0+0.5)+int(encodedIndexVec.g*255.0+0.5)*256;int charCol=int(mod(float(charIndex),u_charsetDimensions.x));int charRow=charIndex/int(u_charsetDimensions.x);float flippedRow=(u_charsetDimensions.y-1.0)-float(charRow);vec2 charCoord=vec2(float(charCol),flippedRow)/u_charsetDimensions;vec4 rotationColor=texture2D(u_rotationTexture,charIndexTexCoord);float scaledAngle=rotationColor.r*255.0+rotationColor.g;float rotationAngle=(scaledAngle*360.0/255.0)*0.017453292;vec2 fractionalPart=fract(gridCoord)-0.5;if(flipHorizontal)fractionalPart.x=-fractionalPart.x;if(flipVertical)fractionalPart.y=-fractionalPart.y;fractionalPart=rotate2D(rotationAngle)*fractionalPart+0.5;vec2 cellSize=1.0/u_charsetDimensions;vec2 texCoord=charCoord+fractionalPart*cellSize;vec2 cellMax=charCoord+cellSize;if(any(lessThan(texCoord,charCoord))||any(greaterThan(texCoord,cellMax))){gl_FragColor=isInverted ? primaryColor : secondaryColor;return;}vec4 charTexel=texture2D(u_characterTexture,texCoord);if(isInverted)charTexel.rgb=1.0-charTexel.rgb;gl_FragColor=mix(secondaryColor,primaryColor,charTexel);}"), this.Ge = new S(A, t, e), this.Fe = new M(A, t, e), this.Me = [this.Ge, this.Fe], this.ae = this.Dt.TA(e.cols, e.rows), this.he = this.Dt.TA(e.cols, e.rows), this.le = this.Dt.TA(e.cols, e.rows), this.ce = this.Dt.TA(e.cols, e.rows), this.De = this.Dt.TA(e.cols, e.rows), this.$e = this.Dt.TA(this.ne.width, this.ne.height);
1182
1354
  }
1183
- le(A) {
1184
- for (const e of this.oe) e.options.enabled && e instanceof S && e.ge(A);
1185
- const t = (e, r) => {
1186
- e.begin(), this.WA.OA();
1187
- for (const B of this.oe) B.options.enabled && this.WA.kA(r(B), 0, 0);
1355
+ Te(A) {
1356
+ for (const e of this.Me) e.options.enabled && e instanceof O && e.ye(A);
1357
+ const t = (e, s) => {
1358
+ e.begin(), this.Dt.OA();
1359
+ for (const r of this.Me) r.options.enabled && this.Dt.kA(s(r), 0, 0);
1188
1360
  e.end();
1189
1361
  };
1190
- t(this.Jt, (e) => e.characterFramebuffer), t(this.Lt, (e) => e.primaryColorFramebuffer), t(this.Kt, (e) => e.secondaryColorFramebuffer), t(this.Wt, (e) => e.rotationFramebuffer), t(this.jt, (e) => e.transformFramebuffer), this.he.begin(), this.WA.OA(), this.WA.IA(this.De), this.WA.GA("u_characterTexture", this.et.fontFramebuffer), this.WA.GA("u_charsetDimensions", [this.et.textureColumns, this.et.textureRows]), this.WA.GA("u_asciiCharacterTexture", this.Jt.texture), this.WA.GA("u_primaryColorTexture", this.Lt.texture), this.WA.GA("u_secondaryColorTexture", this.Kt.texture), this.WA.GA("u_transformTexture", this.jt.texture), this.WA.GA("u_rotationTexture", this.Wt.texture), this.WA.GA("u_captureTexture", A.texture), this.WA.GA("u_backgroundMode", !1), this.WA.GA("u_captureDimensions", [A.width, A.height]), this.WA.GA("u_gridCellDimensions", [this.zt.cols, this.zt.rows]), this.WA.GA("u_gridPixelDimensions", [this.zt.width, this.zt.height]), this.WA.FA(0, 0, this.he.width, this.he.height), this.he.end();
1362
+ t(this.ae, (e) => e.characterFramebuffer), t(this.he, (e) => e.primaryColorFramebuffer), t(this.le, (e) => e.secondaryColorFramebuffer), t(this.ce, (e) => e.rotationFramebuffer), t(this.De, (e) => e.transformFramebuffer), this.$e.begin(), this.Dt.OA(), this.Dt.IA(this.Ye), this.Dt.GA("u_characterTexture", this._t.fontFramebuffer), this.Dt.GA("u_charsetDimensions", [this._t.textureColumns, this._t.textureRows]), this.Dt.GA("u_asciiCharacterTexture", this.ae.texture), this.Dt.GA("u_primaryColorTexture", this.he.texture), this.Dt.GA("u_secondaryColorTexture", this.le.texture), this.Dt.GA("u_transformTexture", this.De.texture), this.Dt.GA("u_rotationTexture", this.ce.texture), this.Dt.GA("u_captureTexture", A.texture), this.Dt.GA("u_backgroundMode", !1), this.Dt.GA("u_captureDimensions", [A.width, A.height]), this.Dt.GA("u_gridCellDimensions", [this.ne.cols, this.ne.rows]), this.Dt.GA("u_gridPixelDimensions", [this.ne.width, this.ne.height]), this.Dt.FA(0, 0, this.$e.width, this.$e.height), this.$e.end();
1191
1363
  }
1192
1364
  add(A) {
1193
- if (!P.C(A === "brightness" || A === "custom", 'Converter type must be either "brightness" or "custom".', { method: "add", providedValue: A })) return;
1365
+ if (!u.C(A === "brightness" || A === "custom", 'Converter type must be either "brightness" or "custom".', { method: "add", providedValue: A })) return;
1194
1366
  let t;
1195
- return t = A === "brightness" ? new W(this.WA, this.et, this.zt) : new T(this.WA, this.et, this.zt), this.oe.push(t), t;
1367
+ return t = A === "brightness" ? new S(this.Dt, this._t, this.ne) : new M(this.Dt, this._t, this.ne), this.Me.push(t), t;
1196
1368
  }
1197
1369
  remove(A) {
1198
- if (!P.C(A instanceof T, "Parameter must be a TextmodeConverter instance.", { method: "remove", providedValue: A })) return;
1199
- const t = this.oe.indexOf(A);
1200
- P.C(t !== -1, "Converter instance not found in pipeline.", { method: "remove", providedValue: A, convertersCount: this.oe.length }) && this.oe.splice(t, 1);
1201
- }
1202
- $t() {
1203
- this.he.resize(this.zt.width, this.zt.height);
1204
- const A = this.zt.cols, t = this.zt.rows;
1205
- this.Jt.resize(A, t), this.Lt.resize(A, t), this.Kt.resize(A, t), this.Wt.resize(A, t), this.jt.resize(A, t);
1206
- for (const e of this.oe) e.$t();
1370
+ if (!u.C(A instanceof M, "Parameter must be a TextmodeConverter instance.", { method: "remove", providedValue: A })) return;
1371
+ const t = this.Me.indexOf(A);
1372
+ u.C(t !== -1, "Converter instance not found in pipeline.", { method: "remove", providedValue: A, convertersCount: this.Me.length }) && this.Me.splice(t, 1);
1373
+ }
1374
+ swap(A, t) {
1375
+ const e = (B, o) => {
1376
+ if (typeof B == "number") return u.C(Number.isInteger(B) && B >= 0 && B < this.Me.length, o + " index must be a valid integer within the converter array bounds.", { method: "swap", providedValue: B, convertersCount: this.Me.length }) ? B : null;
1377
+ if (B instanceof M) {
1378
+ const n = this.Me.indexOf(B);
1379
+ return u.C(n !== -1, o + " converter instance not found in pipeline.", { method: "swap", providedValue: B, convertersCount: this.Me.length }) ? n : null;
1380
+ }
1381
+ return u.C(!1, o + " parameter must be either an integer index or a TextmodeConverter instance.", { method: "swap", providedValue: B }), null;
1382
+ }, s = e(A, "First"), r = e(t, "Second");
1383
+ if (s === null || r === null || !u.C(s !== r, "Cannot swap a converter with itself.", { method: "swap", firstIndex: s, secondIndex: r })) return;
1384
+ const i = this.Me[s];
1385
+ this.Me[s] = this.Me[r], this.Me[r] = i;
1386
+ }
1387
+ ee() {
1388
+ this.$e.resize(this.ne.width, this.ne.height);
1389
+ const A = this.ne.cols, t = this.ne.rows;
1390
+ this.ae.resize(A, t), this.he.resize(A, t), this.le.resize(A, t), this.ce.resize(A, t), this.De.resize(A, t);
1391
+ for (const e of this.Me) e.ee();
1207
1392
  }
1208
1393
  hasEnabledConverters() {
1209
- return this.oe.some((A) => A.options.enabled);
1394
+ return this.Me.some((A) => A.options.enabled);
1210
1395
  }
1211
1396
  disable() {
1212
- for (const A of this.oe) A.disable();
1397
+ for (const A of this.Me) A.disable();
1213
1398
  }
1214
1399
  enable() {
1215
- for (const A of this.oe) A.enable();
1400
+ for (const A of this.Me) A.enable();
1216
1401
  }
1217
1402
  S() {
1218
- for (const A of this.oe) A.S();
1219
- this.Jt.S(), this.Lt.S(), this.Kt.S(), this.Wt.S(), this.jt.S(), this.he.S(), this.De.S();
1403
+ for (const A of this.Me) A.S();
1404
+ this.ae.S(), this.he.S(), this.le.S(), this.ce.S(), this.De.S(), this.$e.S(), this.Ye.S();
1220
1405
  }
1221
1406
  get texture() {
1222
- return this.he;
1407
+ return this.$e;
1223
1408
  }
1224
1409
  get characterFramebuffer() {
1225
- return this.Jt;
1410
+ return this.ae;
1226
1411
  }
1227
1412
  get primaryColorFramebuffer() {
1228
- return this.Lt;
1413
+ return this.he;
1229
1414
  }
1230
1415
  get secondaryColorFramebuffer() {
1231
- return this.Kt;
1416
+ return this.le;
1232
1417
  }
1233
1418
  get rotationFramebuffer() {
1234
- return this.Wt;
1419
+ return this.ce;
1235
1420
  }
1236
1421
  get transformFramebuffer() {
1237
- return this.jt;
1422
+ return this.De;
1238
1423
  }
1239
1424
  get brightness() {
1240
- return this.ne;
1425
+ return this.Ge;
1241
1426
  }
1242
1427
  get custom() {
1243
- return this.ae;
1428
+ return this.Fe;
1244
1429
  }
1245
1430
  }
1246
- const lA = (E) => class extends E {
1247
- fill(A, t, e, r) {
1248
- this.WA.wA(A, t, e, r);
1431
+ const IA = (E) => class extends E {
1432
+ fill(A, t, e, s) {
1433
+ this.Dt.wA(A, t, e, s);
1249
1434
  }
1250
- stroke(A, t, e, r) {
1251
- this.WA.fA(A, t, e, r);
1435
+ stroke(A, t, e, s) {
1436
+ this.Dt.fA(A, t, e, s);
1252
1437
  }
1253
1438
  strokeWeight(A) {
1254
- this.WA.dA(A);
1439
+ this.Dt.dA(A);
1255
1440
  }
1256
1441
  noStroke() {
1257
- this.WA.mA();
1442
+ this.Dt.mA();
1258
1443
  }
1259
1444
  noFill() {
1260
- this.WA.pA();
1445
+ this.Dt.pA();
1261
1446
  }
1262
1447
  rotate(A) {
1263
- this.WA._A(A);
1448
+ this.Dt._A(A);
1264
1449
  }
1265
1450
  push() {
1266
- this.WA.vA();
1451
+ this.Dt.vA();
1267
1452
  }
1268
1453
  pop() {
1269
- this.WA.bA();
1454
+ this.Dt.bA();
1270
1455
  }
1271
- rect(A, t, e = 1, r = 1) {
1272
- this.WA.FA(A, t, e, r);
1456
+ rect(A, t, e = 1, s = 1) {
1457
+ this.Dt.FA(A, t, e, s);
1273
1458
  }
1274
- line(A, t, e, r) {
1275
- this.WA.$A(A, t, e, r);
1459
+ line(A, t, e, s) {
1460
+ this.Dt.YA(A, t, e, s);
1276
1461
  }
1277
- background(A, t = A, e = A, r = 255) {
1278
- this.WA.SA(A, t, e, r);
1462
+ background(A, t = A, e = A, s = 255) {
1463
+ this.Dt.SA(A, t, e, s);
1279
1464
  }
1280
1465
  createShader(A, t) {
1281
- return this.WA.yA(A, t);
1466
+ return this.Dt.yA(A, t);
1282
1467
  }
1283
1468
  createFilterShader(A) {
1284
- return this.WA.MA(A);
1469
+ return this.Dt.MA(A);
1285
1470
  }
1286
1471
  shader(A) {
1287
- this.WA.IA(A);
1472
+ this.Dt.IA(A);
1288
1473
  }
1289
1474
  setUniform(A, t) {
1290
- this.WA.GA(A, t);
1475
+ this.Dt.GA(A, t);
1291
1476
  }
1292
1477
  };
1293
- class Y {
1294
- Ce(A) {
1295
- const t = A.characterFramebuffer, e = A.primaryColorFramebuffer, r = A.secondaryColorFramebuffer, B = A.transformFramebuffer, s = A.rotationFramebuffer;
1296
- return t == null || t.loadPixels(), e == null || e.loadPixels(), r == null || r.loadPixels(), B == null || B.loadPixels(), s == null || s.loadPixels(), { characterPixels: (t == null ? void 0 : t.pixels) || new Uint8Array(0), primaryColorPixels: (e == null ? void 0 : e.pixels) || new Uint8Array(0), secondaryColorPixels: (r == null ? void 0 : r.pixels) || new Uint8Array(0), transformPixels: (B == null ? void 0 : B.pixels) || new Uint8Array(0), rotationPixels: (s == null ? void 0 : s.pixels) || new Uint8Array(0) };
1478
+ class L {
1479
+ Se(A) {
1480
+ const t = A.characterFramebuffer, e = A.primaryColorFramebuffer, s = A.secondaryColorFramebuffer, r = A.transformFramebuffer, i = A.rotationFramebuffer;
1481
+ return t == null || t.loadPixels(), e == null || e.loadPixels(), s == null || s.loadPixels(), r == null || r.loadPixels(), i == null || i.loadPixels(), { characterPixels: (t == null ? void 0 : t.pixels) || new Uint8Array(0), primaryColorPixels: (e == null ? void 0 : e.pixels) || new Uint8Array(0), secondaryColorPixels: (s == null ? void 0 : s.pixels) || new Uint8Array(0), transformPixels: (r == null ? void 0 : r.pixels) || new Uint8Array(0), rotationPixels: (i == null ? void 0 : i.pixels) || new Uint8Array(0) };
1297
1482
  }
1298
- ce(A, t) {
1483
+ Oe(A, t) {
1299
1484
  return A[t] + (A[t + 1] << 8);
1300
1485
  }
1301
- ue(A, t) {
1486
+ Ue(A, t) {
1302
1487
  return { r: A[t], g: A[t + 1], b: A[t + 2], a: A[t + 3] };
1303
1488
  }
1304
1489
  }
1305
- class O {
1306
- Pe(A, t) {
1490
+ class k {
1491
+ ke(A, t) {
1307
1492
  return new Blob([A], { type: t });
1308
1493
  }
1309
- Ie(A, t, e) {
1494
+ Ve(A, t, e) {
1310
1495
  try {
1311
- const r = this.Pe(A, e), B = URL.createObjectURL(r), s = document.createElement("a");
1312
- s.href = B, s.download = t, s.style.display = "none", s.rel = "noopener", document.body.appendChild(s), s.click(), document.body.removeChild(s), URL.revokeObjectURL(B);
1313
- } catch (r) {
1314
- throw console.error("Failed to download file:", r), Error("File download failed: " + (r instanceof Error ? r.message : "Unknown error"));
1496
+ const s = this.ke(A, e), r = URL.createObjectURL(s), i = document.createElement("a");
1497
+ i.href = r, i.download = t, i.style.display = "none", i.rel = "noopener", document.body.appendChild(i), i.click(), document.body.removeChild(i), URL.revokeObjectURL(r);
1498
+ } catch (s) {
1499
+ throw console.error("Failed to download file:", s), Error("File download failed: " + (s instanceof Error ? s.message : "Unknown error"));
1315
1500
  }
1316
1501
  }
1317
- we() {
1502
+ Re() {
1318
1503
  return (/* @__PURE__ */ new Date()).toISOString().slice(0, 19).replace(/:/g, "-");
1319
1504
  }
1320
- fe() {
1505
+ He() {
1321
1506
  const A = /* @__PURE__ */ new Date();
1322
1507
  return { date: A.toISOString().split("T")[0], time: A.toTimeString().split(" ")[0].replace(/:/g, "-") };
1323
1508
  }
1324
- de(A) {
1509
+ ze(A) {
1325
1510
  return A.replace(/[<>:"/\\|?*]/g, "_").replace(/\s+/g, "_").replace(/_{2,}/g, "_").replace(/^_+|_+$/g, "").substring(0, 255);
1326
1511
  }
1327
- me() {
1328
- return "'textmode-export'-" + this.we();
1512
+ Le() {
1513
+ return "'textmode-export'-" + this.Re();
1329
1514
  }
1330
1515
  }
1331
- class cA extends Y {
1332
- pe(A, t, e) {
1333
- const r = A[e] === 255, B = A[e + 1] === 255, s = A[e + 2] === 255, i = t[e], o = t[e + 1];
1334
- return { isInverted: r, flipHorizontal: B, flipVertical: s, rotation: Math.round(360 * (i + o / 255) / 255 * 100) / 100 };
1516
+ class fA extends L {
1517
+ Je(A, t, e) {
1518
+ const s = A[e] === 255, r = A[e + 1] === 255, i = A[e + 2] === 255, B = t[e], o = t[e + 1];
1519
+ return { isInverted: s, flipHorizontal: r, flipVertical: i, rotation: Math.round(360 * (B + o / 255) / 255 * 100) / 100 };
1335
1520
  }
1336
- _e(A, t, e) {
1521
+ Ke(A, t, e) {
1337
1522
  return { x: A, y: t, cellX: A * e.cellWidth, cellY: t * e.cellHeight };
1338
1523
  }
1339
- ve(A, t) {
1524
+ We(A, t) {
1340
1525
  const e = [];
1341
- let r = 0;
1342
- for (let B = 0; B < t.rows; B++) for (let s = 0; s < t.cols; s++) {
1343
- const i = 4 * r, o = this.ce(A.characterPixels, i);
1344
- let g = this.ue(A.primaryColorPixels, i), n = this.ue(A.secondaryColorPixels, i);
1345
- const a = this.pe(A.transformPixels, A.rotationPixels, i);
1526
+ let s = 0;
1527
+ for (let r = 0; r < t.rows; r++) for (let i = 0; i < t.cols; i++) {
1528
+ const B = 4 * s, o = this.Oe(A.characterPixels, B);
1529
+ let n = this.Ue(A.primaryColorPixels, B), g = this.Ue(A.secondaryColorPixels, B);
1530
+ const a = this.Je(A.transformPixels, A.rotationPixels, B);
1346
1531
  if (a.isInverted) {
1347
- const C = g;
1348
- g = n, n = C;
1532
+ const D = n;
1533
+ n = g, g = D;
1349
1534
  }
1350
- const h = this._e(s, B, t);
1351
- e.push({ charIndex: o, primaryColor: g, secondaryColor: n, transform: a, position: h }), r++;
1535
+ const h = this.Ke(i, r, t);
1536
+ e.push({ charIndex: o, primaryColor: n, secondaryColor: g, transform: a, position: h }), s++;
1352
1537
  }
1353
1538
  return e;
1354
1539
  }
1355
1540
  }
1356
- class CA {
1357
- tt(A, t) {
1541
+ class wA {
1542
+ je(A, t) {
1358
1543
  const e = A.cmap;
1359
- for (const r of e.tables) if (r.format === 4) {
1360
- for (let B = 0; B < r.startCount.length; B++) if (t >= r.startCount[B] && t <= r.endCount[B]) {
1361
- if (r.idRangeOffset[B] === 0) return t + r.idDelta[B] & 65535;
1544
+ for (const s of e.tables) if (s.format === 4) {
1545
+ for (let r = 0; r < s.startCount.length; r++) if (t >= s.startCount[r] && t <= s.endCount[r]) {
1546
+ if (s.idRangeOffset[r] === 0) return t + s.idDelta[r] & 65535;
1362
1547
  {
1363
- const s = r.idRangeOffset[B] / 2 + (t - r.startCount[B]) - (r.startCount.length - B);
1364
- if (s >= 0 && s < r.glyphIdArray.length) {
1365
- const i = r.glyphIdArray[s];
1366
- if (i !== 0) return i + r.idDelta[B] & 65535;
1548
+ const i = s.idRangeOffset[r] / 2 + (t - s.startCount[r]) - (s.startCount.length - r);
1549
+ if (i >= 0 && i < s.glyphIdArray.length) {
1550
+ const B = s.glyphIdArray[i];
1551
+ if (B !== 0) return B + s.idDelta[r] & 65535;
1367
1552
  }
1368
1553
  }
1369
1554
  }
1370
1555
  }
1371
1556
  return 0;
1372
1557
  }
1373
- be(A, t, e, r, B) {
1374
- const s = B / A.head.unitsPerEm;
1375
- return { getBoundingBox: () => ({ x1: e + t.xMin * s, y1: r + -t.yMax * s, x2: e + t.xMax * s, y2: r + -t.yMin * s }), toSVG: () => this.xe(t, e, r, s) };
1558
+ Ne(A, t, e, s, r) {
1559
+ const i = r / A.head.unitsPerEm;
1560
+ return { getBoundingBox: () => ({ x1: e + t.xMin * i, y1: s + -t.yMax * i, x2: e + t.xMax * i, y2: s + -t.yMin * i }), toSVG: () => this.Ze(t, e, s, i) };
1376
1561
  }
1377
- xe(A, t, e, r) {
1562
+ Ze(A, t, e, s) {
1378
1563
  if (!A || !A.xs) return "";
1379
- const { xs: B, ys: s, endPts: i, flags: o } = A;
1380
- if (!(B && s && i && o)) return "";
1381
- let g = "", n = 0;
1382
- for (let a = 0; a < i.length; a++) {
1383
- const h = i[a];
1384
- if (!(h < n)) {
1385
- if (h >= n) {
1386
- const C = t + B[n] * r, D = e - s[n] * r;
1387
- g += `M${C.toFixed(2)},${D.toFixed(2)}`;
1388
- let c = n + 1;
1389
- for (; c <= h; )
1390
- if (1 & o[c]) {
1391
- const u = t + B[c] * r, f = e - s[c] * r;
1392
- g += `L${u.toFixed(2)},${f.toFixed(2)}`, c++;
1564
+ const { xs: r, ys: i, endPts: B, flags: o } = A;
1565
+ if (!(r && i && B && o)) return "";
1566
+ let n = "", g = 0;
1567
+ for (let a = 0; a < B.length; a++) {
1568
+ const h = B[a];
1569
+ if (!(h < g)) {
1570
+ if (h >= g) {
1571
+ const D = t + r[g] * s, c = e - i[g] * s;
1572
+ n += `M${D.toFixed(2)},${c.toFixed(2)}`;
1573
+ let l = g + 1;
1574
+ for (; l <= h; )
1575
+ if (1 & o[l]) {
1576
+ const d = t + r[l] * s, C = e - i[l] * s;
1577
+ n += `L${d.toFixed(2)},${C.toFixed(2)}`, l++;
1393
1578
  } else {
1394
- const u = t + B[c] * r, f = e - s[c] * r;
1395
- let d = c + 1 > h ? n : c + 1;
1396
- if (1 & o[d]) {
1397
- const m = t + B[d] * r, p = e - s[d] * r;
1398
- g += `Q${u.toFixed(2)},${f.toFixed(2)} ${m.toFixed(2)},${p.toFixed(2)}`, c = d + 1;
1579
+ const d = t + r[l] * s, C = e - i[l] * s;
1580
+ let P = l + 1 > h ? g : l + 1;
1581
+ if (1 & o[P]) {
1582
+ const p = t + r[P] * s, m = e - i[P] * s;
1583
+ n += `Q${d.toFixed(2)},${C.toFixed(2)} ${p.toFixed(2)},${m.toFixed(2)}`, l = P + 1;
1399
1584
  } else {
1400
- const m = (u + (t + B[d] * r)) / 2, p = (f + (e - s[d] * r)) / 2;
1401
- g += `Q${u.toFixed(2)},${f.toFixed(2)} ${m.toFixed(2)},${p.toFixed(2)}`, c = d;
1585
+ const p = (d + (t + r[P] * s)) / 2, m = (C + (e - i[P] * s)) / 2;
1586
+ n += `Q${d.toFixed(2)},${C.toFixed(2)} ${p.toFixed(2)},${m.toFixed(2)}`, l = P;
1402
1587
  }
1403
1588
  }
1404
- g += "Z";
1589
+ n += "Z";
1405
1590
  }
1406
- n = h + 1;
1591
+ g = h + 1;
1407
1592
  }
1408
1593
  }
1409
- return g;
1594
+ return n;
1410
1595
  }
1411
- ye(A, t, e, r, B) {
1412
- const s = A.codePointAt(0) || 0, i = this.tt(t, s);
1596
+ Xe(A, t, e, s, r) {
1597
+ const i = A.codePointAt(0) || 0, B = this.je(t, i);
1413
1598
  let o = null;
1414
- return t.glyf && t.glyf[i] !== null ? o = t.glyf[i] : l && l.T && l.T.glyf && l.T.glyf.VA && (o = l.T.glyf.VA(t, i), t.glyf && o && (t.glyf[i] = o)), this.be(t, o, e, r, B);
1599
+ return t.glyf && t.glyf[B] !== null ? o = t.glyf[B] : w && w.T && w.T.glyf && w.T.glyf.VA && (o = w.T.glyf.VA(t, B), t.glyf && o && (t.glyf[B] = o)), this.Ne(t, o, e, s, r);
1415
1600
  }
1416
- Me(A, t, e, r, B, s, i, o) {
1417
- const g = e + (B - o * (i / t.head.unitsPerEm)) / 2, n = r + (s + 0.7 * i) / 2;
1418
- return this.ye(A, t, g, n, i).toSVG() || null;
1601
+ qe(A, t, e, s, r, i, B, o) {
1602
+ const n = e + (r - o * (B / t.head.unitsPerEm)) / 2, g = s + (i + 0.7 * B) / 2;
1603
+ return this.Xe(A, t, n, g, B).toSVG() || null;
1419
1604
  }
1420
1605
  }
1421
- class DA {
1606
+ class pA {
1422
1607
  constructor() {
1423
- Q(this, "Ge");
1424
- this.Ge = new CA();
1608
+ Q(this, "As");
1609
+ this.As = new wA();
1425
1610
  }
1426
- Fe(A) {
1611
+ ts(A) {
1427
1612
  return `<?xml version="1.0" encoding="UTF-8" standalone="no"?>
1428
1613
  <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
1429
1614
  <svg width="${A.width}" height="${A.height}" viewBox="0 0 ${A.width} ${A.height}"
@@ -1431,175 +1616,175 @@ class DA {
1431
1616
  <title>textmode art generated via textmode.js</title>
1432
1617
  <desc>textmode art visualization generated by textmode.js library</desc>`;
1433
1618
  }
1434
- Ye() {
1619
+ es() {
1435
1620
  return `
1436
1621
  </g>
1437
1622
  </svg>`;
1438
1623
  }
1439
- $e(A, t) {
1624
+ ss(A, t) {
1440
1625
  if (!t.includeBackgroundRectangles) return "";
1441
- const e = t.backgroundColor, r = `rgba(${e[0]},${e[1]},${e[2]},${e[3] / 255})`;
1626
+ const e = t.backgroundColor, s = `rgba(${e[0]},${e[1]},${e[2]},${e[3] / 255})`;
1442
1627
  return `
1443
- <rect width="${A.width}" height="${A.height}" fill="${r}" />`;
1628
+ <rect width="${A.width}" height="${A.height}" fill="${s}" />`;
1444
1629
  }
1445
- Te(A) {
1630
+ rs(A) {
1446
1631
  return `rgba(${A.r},${A.g},${A.b},${A.a / 255})`;
1447
1632
  }
1448
- Se(A, t) {
1449
- const { transform: e, position: r } = A, B = r.cellX + t.cellWidth / 2, s = r.cellY + t.cellHeight / 2, i = [];
1633
+ Bs(A, t) {
1634
+ const { transform: e, position: s } = A, r = s.cellX + t.cellWidth / 2, i = s.cellY + t.cellHeight / 2, B = [];
1450
1635
  if (e.flipHorizontal || e.flipVertical) {
1451
- const o = e.flipHorizontal ? -1 : 1, g = e.flipVertical ? -1 : 1;
1452
- i.push(`translate(${B} ${s})`), i.push(`scale(${o} ${g})`), i.push(`translate(${-B} ${-s})`);
1636
+ const o = e.flipHorizontal ? -1 : 1, n = e.flipVertical ? -1 : 1;
1637
+ B.push(`translate(${r} ${i})`), B.push(`scale(${o} ${n})`), B.push(`translate(${-r} ${-i})`);
1453
1638
  }
1454
- return e.rotation && i.push(`rotate(${e.rotation} ${B} ${s})`), i.length ? ` transform="${i.join(" ")}"` : "";
1639
+ return e.rotation && B.push(`rotate(${e.rotation} ${r} ${i})`), B.length ? ` transform="${B.join(" ")}"` : "";
1455
1640
  }
1456
- Oe(A, t, e) {
1641
+ Qs(A, t, e) {
1457
1642
  if (!e.includeBackgroundRectangles || A.secondaryColor.a === 0) return "";
1458
- const { position: r } = A, B = this.Te(A.secondaryColor);
1643
+ const { position: s } = A, r = this.rs(A.secondaryColor);
1459
1644
  return e.drawMode === "stroke" ? `
1460
- <rect x="${r.cellX}" y="${r.cellY}" width="${t.cellWidth}" height="${t.cellHeight}" stroke="${B}" fill="none" stroke-width="${e.strokeWidth}" />` : `
1461
- <rect x="${r.cellX}" y="${r.cellY}" width="${t.cellWidth}" height="${t.cellHeight}" fill="${B}" />`;
1462
- }
1463
- ye(A, t, e, r) {
1464
- const B = e.characters[A.charIndex];
1465
- if (!B) return "";
1466
- const s = this.Ge.Me(B.character, e.font, A.position.cellX, A.position.cellY, t.cellWidth, t.cellHeight, e.fontSize, B.advanceWidth);
1467
- if (!s) return "";
1468
- const i = this.Te(A.primaryColor);
1469
- return r.drawMode === "stroke" ? `
1470
- <path id="${`path-${A.charIndex}-${A.position.cellX}-${A.position.cellY}`.replace(/\./g, "-")}" d="${s}" stroke="${i}" stroke-width="${r.strokeWidth}" fill="none" />` : `
1471
- <path d="${s}" fill="${i}" />`;
1472
- }
1473
- Ue(A, t, e, r) {
1474
- let B = "";
1475
- B += this.Oe(A, t, r);
1476
- const s = this.Se(A, t), i = this.ye(A, t, e, r);
1477
- return i && (s ? (B += `
1478
- <g${s}>`, B += i, B += `
1479
- </g>`) : B += i), B;
1480
- }
1481
- ke(A, t, e, r) {
1482
- let B = this.Fe(t);
1483
- B += this.$e(t, r), B += `
1645
+ <rect x="${s.cellX}" y="${s.cellY}" width="${t.cellWidth}" height="${t.cellHeight}" stroke="${r}" fill="none" stroke-width="${e.strokeWidth}" />` : `
1646
+ <rect x="${s.cellX}" y="${s.cellY}" width="${t.cellWidth}" height="${t.cellHeight}" fill="${r}" />`;
1647
+ }
1648
+ Xe(A, t, e, s) {
1649
+ const r = e.characters[A.charIndex];
1650
+ if (!r) return "";
1651
+ const i = this.As.qe(r.character, e.font, A.position.cellX, A.position.cellY, t.cellWidth, t.cellHeight, e.fontSize, r.advanceWidth);
1652
+ if (!i) return "";
1653
+ const B = this.rs(A.primaryColor);
1654
+ return s.drawMode === "stroke" ? `
1655
+ <path id="${`path-${A.charIndex}-${A.position.cellX}-${A.position.cellY}`.replace(/\./g, "-")}" d="${i}" stroke="${B}" stroke-width="${s.strokeWidth}" fill="none" />` : `
1656
+ <path d="${i}" fill="${B}" />`;
1657
+ }
1658
+ Es(A, t, e, s) {
1659
+ let r = "";
1660
+ r += this.Qs(A, t, s);
1661
+ const i = this.Bs(A, t), B = this.Xe(A, t, e, s);
1662
+ return B && (i ? (r += `
1663
+ <g${i}>`, r += B, r += `
1664
+ </g>`) : r += B), r;
1665
+ }
1666
+ gs(A, t, e, s) {
1667
+ let r = this.ts(t);
1668
+ r += this.ss(t, s), r += `
1484
1669
  <g id="ascii-cells">`;
1485
- for (const s of A) B += this.Ue(s, t, e, r);
1486
- return B += this.Ye(), B;
1670
+ for (const i of A) r += this.Es(i, t, e, s);
1671
+ return r += this.es(), r;
1487
1672
  }
1488
- Ve(A) {
1673
+ ns(A) {
1489
1674
  return A.replace(/<path[^>]*d=""[^>]*\/>/g, "").replace(/\n\s*\n/g, `
1490
1675
  `).replace(/[ \t]+$/gm, "");
1491
1676
  }
1492
1677
  }
1493
- class uA extends O {
1494
- Re(A) {
1495
- return this.Pe(A, "image/svg+xml;charset=utf-8");
1678
+ class mA extends k {
1679
+ hs(A) {
1680
+ return this.ke(A, "image/svg+xml;charset=utf-8");
1496
1681
  }
1497
- He(A, t) {
1498
- this.Ie(A, this.de(t) + ".svg", "image/svg+xml;charset=utf-8");
1682
+ ls(A, t) {
1683
+ this.Ve(A, this.ze(t) + ".svg", "image/svg+xml;charset=utf-8");
1499
1684
  }
1500
- ze(A, t) {
1501
- this.He(A, t || this.me());
1685
+ cs(A, t) {
1686
+ this.ls(A, t || this.Le());
1502
1687
  }
1503
1688
  }
1504
- class k {
1689
+ class $ {
1505
1690
  constructor() {
1506
- Q(this, "Je");
1507
- Q(this, "Le");
1508
- Q(this, "Ke");
1509
- this.Je = new cA(), this.Le = new DA(), this.Ke = new uA();
1691
+ Q(this, "Ds");
1692
+ Q(this, "Cs");
1693
+ Q(this, "us");
1694
+ this.Ds = new fA(), this.Cs = new pA(), this.us = new mA();
1510
1695
  }
1511
- We(A) {
1696
+ Ps(A) {
1512
1697
  return { includeBackgroundRectangles: A.includeBackgroundRectangles ?? !0, drawMode: A.drawMode ?? "fill", strokeWidth: A.strokeWidth ?? 1, backgroundColor: A.backgroundColor ?? [0, 0, 0, 0] };
1513
1698
  }
1514
- je(A, t = {}) {
1515
- const e = this.We(t), r = this.Je.Ce(A.pipeline), B = this.Je.ve(r, A.grid), s = this.Le.ke(B, A.grid, A.font, e);
1516
- return this.Le.Ve(s);
1699
+ Is(A, t = {}) {
1700
+ const e = this.Ps(t), s = this.Ds.Se(A.pipeline), r = this.Ds.We(s, A.grid), i = this.Cs.gs(r, A.grid, A.font, e);
1701
+ return this.Cs.ns(i);
1517
1702
  }
1518
- ze(A, t = {}) {
1519
- const e = this.je(A, t), r = t.filename || this.Ke.me();
1520
- this.Ke.ze(e, r);
1703
+ cs(A, t = {}) {
1704
+ const e = this.Is(A, t), s = t.filename || this.us.Le();
1705
+ this.us.cs(e, s);
1521
1706
  }
1522
1707
  }
1523
- class PA extends Y {
1524
- Ze(A, t, e, r = " ") {
1525
- var i;
1526
- const B = [];
1527
- let s = 0;
1708
+ class xA extends L {
1709
+ ws(A, t, e, s = " ") {
1710
+ var B;
1711
+ const r = [];
1712
+ let i = 0;
1528
1713
  for (let o = 0; o < t.rows; o++) {
1529
- const g = [];
1530
- for (let n = 0; n < t.cols; n++) {
1531
- const a = 4 * s, h = this.ce(A.characterPixels, a), C = ((i = e.characters[h]) == null ? void 0 : i.character) || r;
1532
- g.push(C), s++;
1714
+ const n = [];
1715
+ for (let g = 0; g < t.cols; g++) {
1716
+ const a = 4 * i, h = this.Oe(A.characterPixels, a), D = ((B = e.characters[h]) == null ? void 0 : B.character) || s;
1717
+ n.push(D), i++;
1533
1718
  }
1534
- B.push(g);
1719
+ r.push(n);
1535
1720
  }
1536
- return B;
1721
+ return r;
1537
1722
  }
1538
1723
  }
1539
- class IA {
1540
- Ne(A, t) {
1724
+ class bA {
1725
+ fs(A, t) {
1541
1726
  const e = [];
1542
- for (const B of A) {
1543
- let s = B.join("");
1544
- t.preserveTrailingSpaces || (s = s.replace(/\s+$/, "")), e.push(s);
1727
+ for (const r of A) {
1728
+ let i = r.join("");
1729
+ t.preserveTrailingSpaces || (i = i.replace(/\s+$/, "")), e.push(i);
1545
1730
  }
1546
- const r = t.lineEnding === "crlf" ? `\r
1731
+ const s = t.lineEnding === "crlf" ? `\r
1547
1732
  ` : `
1548
1733
  `;
1549
- return e.join(r);
1734
+ return e.join(s);
1550
1735
  }
1551
1736
  }
1552
- class dA extends O {
1553
- Xe(A, t) {
1554
- const e = this.qe(t);
1555
- this.Ie(A, e, "text/plain;charset=utf-8");
1737
+ class vA extends k {
1738
+ ds(A, t) {
1739
+ const e = this.ps(t);
1740
+ this.Ve(A, e, "text/plain;charset=utf-8");
1556
1741
  }
1557
- qe(A) {
1558
- let t = this.de(A);
1559
- return t === ".txt" || t.length <= 4 ? this.me() : t;
1742
+ ps(A) {
1743
+ let t = this.ze(A);
1744
+ return t === ".txt" || t.length <= 4 ? this.Le() : t;
1560
1745
  }
1561
1746
  }
1562
- class H {
1747
+ class N {
1563
1748
  constructor() {
1564
- Q(this, "Je");
1565
- Q(this, "Le");
1566
- Q(this, "Ke");
1567
- this.Je = new PA(), this.Le = new IA(), this.Ke = new dA();
1749
+ Q(this, "Ds");
1750
+ Q(this, "Cs");
1751
+ Q(this, "us");
1752
+ this.Ds = new xA(), this.Cs = new bA(), this.us = new vA();
1568
1753
  }
1569
- We(A) {
1754
+ Ps(A) {
1570
1755
  return { preserveTrailingSpaces: A.preserveTrailingSpaces ?? !1, lineEnding: A.lineEnding ?? "lf", emptyCharacter: A.emptyCharacter ?? " " };
1571
1756
  }
1572
- AB(A, t = {}) {
1573
- const e = this.We(t), r = this.Je.Ce(A.pipeline), B = this.Je.Ze(r, A.grid, A.font, e.emptyCharacter);
1574
- return this.Le.Ne(B, e);
1757
+ _s(A, t = {}) {
1758
+ const e = this.Ps(t), s = this.Ds.Se(A.pipeline), r = this.Ds.ws(s, A.grid, A.font, e.emptyCharacter);
1759
+ return this.Cs.fs(r, e);
1575
1760
  }
1576
- Xe(A, t = {}) {
1577
- const e = this.AB(A, t), r = t.filename || this.Ke.me();
1578
- this.Ke.Xe(e, r);
1761
+ ds(A, t = {}) {
1762
+ const e = this._s(A, t), s = t.filename || this.us.Le();
1763
+ this.us.ds(e, s);
1579
1764
  }
1580
1765
  }
1581
- class fA extends Y {
1582
- tB(A, t = 1, e = "transparent") {
1583
- const r = A.canvas;
1584
- if (t === 1 && e === "transparent") return r;
1585
- const B = document.createElement("canvas"), s = B.getContext("2d"), i = Math.round(r.width * t), o = Math.round(r.height * t);
1586
- return B.width = i, B.height = o, e !== "transparent" && (s.fillStyle = e, s.fillRect(0, 0, i, o)), s.imageSmoothingEnabled = !1, s.drawImage(r, 0, 0, r.width, r.height, 0, 0, i, o), B;
1766
+ class yA extends L {
1767
+ vs(A, t = 1, e = "transparent") {
1768
+ const s = A.canvas;
1769
+ if (t === 1 && e === "transparent") return s;
1770
+ const r = document.createElement("canvas"), i = r.getContext("2d"), B = Math.round(s.width * t), o = Math.round(s.height * t);
1771
+ return r.width = B, r.height = o, e !== "transparent" && (i.fillStyle = e, i.fillRect(0, 0, B, o)), i.imageSmoothingEnabled = !1, i.drawImage(s, 0, 0, s.width, s.height, 0, 0, B, o), r;
1587
1772
  }
1588
1773
  }
1589
- class wA {
1590
- eB(A, t) {
1591
- const e = this.BB(t.format);
1774
+ class _A {
1775
+ bs(A, t) {
1776
+ const e = this.Ms(t.format);
1592
1777
  return t.format === "png" ? A.toDataURL(e) : A.toDataURL(e, t.quality);
1593
1778
  }
1594
- async QB(A, t) {
1595
- return new Promise((e, r) => {
1596
- const B = this.BB(t.format), s = (i) => {
1597
- i ? e(i) : r(Error(`Failed to generate ${t.format.toUpperCase()} blob`));
1779
+ async Gs(A, t) {
1780
+ return new Promise((e, s) => {
1781
+ const r = this.Ms(t.format), i = (B) => {
1782
+ B ? e(B) : s(Error(`Failed to generate ${t.format.toUpperCase()} blob`));
1598
1783
  };
1599
- t.format === "png" ? A.toBlob(s, B) : A.toBlob(s, B, t.quality);
1784
+ t.format === "png" ? A.toBlob(i, r) : A.toBlob(i, r, t.quality);
1600
1785
  });
1601
1786
  }
1602
- BB(A) {
1787
+ Ms(A) {
1603
1788
  switch (A) {
1604
1789
  case "png":
1605
1790
  return "image/png";
@@ -1612,263 +1797,269 @@ class wA {
1612
1797
  }
1613
1798
  }
1614
1799
  }
1615
- const mA = { png: "image/png", jpg: "image/jpeg", webp: "image/webp" }, $ = { png: ".png", jpg: ".jpg", webp: ".webp" };
1616
- class pA extends O {
1617
- sB(A, t, e) {
1618
- this.rB(A, this.de(t) + $[e]);
1800
+ const MA = { png: "image/png", jpg: "image/jpeg", webp: "image/webp" }, W = { png: ".png", jpg: ".jpg", webp: ".webp" };
1801
+ class GA extends k {
1802
+ Fs(A, t, e) {
1803
+ this.$s(A, this.ze(t) + W[e]);
1619
1804
  }
1620
- rB(A, t) {
1805
+ $s(A, t) {
1621
1806
  const e = URL.createObjectURL(A);
1622
1807
  try {
1623
- const r = document.createElement("a");
1624
- r.href = e, r.download = t, r.style.display = "none", r.rel = "noopener", document.body.appendChild(r), r.click(), document.body.removeChild(r);
1808
+ const s = document.createElement("a");
1809
+ s.href = e, s.download = t, s.style.display = "none", s.rel = "noopener", document.body.appendChild(s), s.click(), document.body.removeChild(s);
1625
1810
  } finally {
1626
1811
  URL.revokeObjectURL(e);
1627
1812
  }
1628
1813
  }
1629
- iB(A) {
1630
- return A in mA && A in $;
1814
+ Ys(A) {
1815
+ return A in MA && A in W;
1631
1816
  }
1632
1817
  }
1633
- class xA {
1818
+ class TA {
1634
1819
  constructor() {
1635
- Q(this, "Je");
1636
- Q(this, "Le");
1637
- Q(this, "Ke");
1638
- this.Je = new fA(), this.Le = new wA(), this.Ke = new pA();
1820
+ Q(this, "Ds");
1821
+ Q(this, "Cs");
1822
+ Q(this, "us");
1823
+ this.Ds = new yA(), this.Cs = new _A(), this.us = new GA();
1639
1824
  }
1640
- We(A) {
1825
+ Ps(A) {
1641
1826
  return { format: A.format ?? "png", quality: A.quality ?? 1, scale: A.scale ?? 1, backgroundColor: A.backgroundColor ?? "transparent" };
1642
1827
  }
1643
- EB(A) {
1644
- if (console.log("Validating image export options:", A), !this.Ke.iB(A.format)) throw Error(`Saving '${A.format}' files is not supported`);
1828
+ Ts(A) {
1829
+ if (console.log("Validating image export options:", A), !this.us.Ys(A.format)) throw Error(`Saving '${A.format}' files is not supported`);
1645
1830
  if (A.quality < 0 || A.quality > 1) throw Error("Image quality must be between 0.0 and 1.0");
1646
1831
  if (A.scale <= 0) throw Error("Scale factor must be greater than 0");
1647
1832
  A.scale > 10 && console.warn("Large scale factors may result in very large files and slow performance"), A.format === "jpg" && A.backgroundColor === "transparent" && (A.backgroundColor = "black");
1648
1833
  }
1649
- gB(A, t = {}) {
1650
- const e = this.We(t);
1651
- if (this.EB(e), e.scale === 1 && e.backgroundColor === "transparent") return this.Le.eB(A.canvas, e);
1652
- const r = this.Je.tB(A, e.scale, e.backgroundColor);
1653
- return this.Le.eB(r, e);
1834
+ Ss(A, t = {}) {
1835
+ const e = this.Ps(t);
1836
+ if (this.Ts(e), e.scale === 1 && e.backgroundColor === "transparent") return this.Cs.bs(A.canvas, e);
1837
+ const s = this.Ds.vs(A, e.scale, e.backgroundColor);
1838
+ return this.Cs.bs(s, e);
1654
1839
  }
1655
- async QB(A, t = {}) {
1656
- const e = this.We(t);
1657
- if (this.EB(e), e.scale === 1 && e.backgroundColor === "transparent") return await this.Le.QB(A.canvas, e);
1658
- const r = this.Je.tB(A, e.scale, e.backgroundColor);
1659
- return await this.Le.QB(r, e);
1840
+ async Gs(A, t = {}) {
1841
+ const e = this.Ps(t);
1842
+ if (this.Ts(e), e.scale === 1 && e.backgroundColor === "transparent") return await this.Cs.Gs(A.canvas, e);
1843
+ const s = this.Ds.vs(A, e.scale, e.backgroundColor);
1844
+ return await this.Cs.Gs(s, e);
1660
1845
  }
1661
- async sB(A, t = {}) {
1662
- const e = await this.QB(A, t), r = t.format ?? "png", B = t.filename || this.Ke.me();
1663
- this.Ke.sB(e, B, r);
1846
+ async Fs(A, t = {}) {
1847
+ const e = await this.Gs(A, t), s = t.format ?? "png", r = t.filename || this.us.Le();
1848
+ this.us.Fs(e, r, s);
1664
1849
  }
1665
1850
  }
1666
- const bA = (E) => class extends E {
1851
+ const RA = (E) => class extends E {
1667
1852
  toString(A = {}) {
1668
- return new H().AB({ pipeline: this.oB, grid: this.zt, font: this.et }, A);
1853
+ return new N()._s({ pipeline: this.Os, grid: this.ne, font: this._t }, A);
1669
1854
  }
1670
1855
  saveStrings(A = {}) {
1671
- new H().Xe({ pipeline: this.oB, grid: this.zt, font: this.et }, A);
1856
+ new N().ds({ pipeline: this.Os, grid: this.ne, font: this._t }, A);
1672
1857
  }
1673
1858
  toSVG(A = {}) {
1674
- return new k().je(this, A);
1859
+ return new $().Is(this, A);
1675
1860
  }
1676
1861
  saveSVG(A = {}) {
1677
- new k().ze(this, A);
1862
+ new $().cs(this, A);
1678
1863
  }
1679
1864
  async saveCanvas(A, t = "png", e = {}) {
1680
- await new xA().sB(this.bt, { ...e, filename: A, format: t });
1865
+ await new TA().Fs(this.jt, { ...e, filename: A, format: t });
1681
1866
  }
1682
- }, vA = (E) => class extends E {
1867
+ }, FA = (E) => class extends E {
1683
1868
  async loadFont(A) {
1684
- return this.et.It(A).then(() => {
1685
- const t = this.et.maxGlyphDimensions;
1686
- this.zt.Gt(t.width, t.height), this.oB.$t();
1869
+ return this._t.Ht(A).then(() => {
1870
+ const t = this._t.maxGlyphDimensions;
1871
+ this.ne.qt(t.width, t.height), this.Os.ee();
1687
1872
  });
1688
1873
  }
1689
1874
  fontSize(A) {
1690
- if (!P.C(typeof A == "number" && A > 0, "Font size must be a positive number greater than 0.", { method: "fontSize", providedValue: A }) || this.et.fontSize === A) return;
1691
- this.et.Pt(A);
1692
- const t = this.et.maxGlyphDimensions;
1693
- this.zt.Gt(t.width, t.height), this.oB.$t(), this.WA.UA();
1875
+ if (!u.C(typeof A == "number" && A > 0, "Font size must be a positive number greater than 0.", { method: "fontSize", providedValue: A }) || this._t.fontSize === A) return;
1876
+ this._t.Rt(A);
1877
+ const t = this._t.maxGlyphDimensions;
1878
+ this.ne.qt(t.width, t.height), this.Os.ee(), this.Dt.UA();
1694
1879
  }
1695
- }, yA = (E) => class extends E {
1880
+ }, UA = (E) => class extends E {
1696
1881
  addConverter(A) {
1697
- return this.oB.add(A);
1882
+ return this.Os.add(A);
1698
1883
  }
1699
1884
  removeConverter(A) {
1700
- this.oB.remove(A);
1885
+ this.Os.remove(A);
1701
1886
  }
1702
1887
  };
1703
- class _A {
1888
+ class YA {
1704
1889
  constructor() {
1705
- Q(this, "WA");
1706
- Q(this, "et");
1707
- Q(this, "oB");
1708
- Q(this, "bt");
1709
- Q(this, "zt");
1890
+ Q(this, "Dt");
1891
+ Q(this, "_t");
1892
+ Q(this, "Os");
1893
+ Q(this, "jt");
1894
+ Q(this, "ne");
1710
1895
  }
1711
1896
  }
1712
- class J extends function(t, ...e) {
1713
- return e.reduce((r, B) => B(r), t);
1714
- }(_A, lA, bA, vA, yA) {
1897
+ class z extends function(t, ...e) {
1898
+ return e.reduce((s, r) => r(s), t);
1899
+ }(YA, IA, RA, FA, UA) {
1715
1900
  constructor(t = null, e = {}) {
1716
1901
  super();
1717
- Q(this, "St");
1718
- Q(this, "nB");
1719
- Q(this, "Ut");
1720
- Q(this, "aB");
1721
- Q(this, "hB");
1722
- Q(this, "DB", null);
1723
- Q(this, "lB", 0);
1724
- Q(this, "CB");
1725
- Q(this, "cB", !0);
1726
- Q(this, "uB", 0);
1727
- Q(this, "PB", 0);
1728
- Q(this, "IB", 0);
1729
- Q(this, "wB", []);
1730
- Q(this, "fB", 10);
1731
- Q(this, "dB", !1);
1732
- Q(this, "mB", !1);
1733
- Q(this, "pB", () => {
1902
+ Q(this, "re");
1903
+ Q(this, "Us");
1904
+ Q(this, "ie");
1905
+ Q(this, "ks");
1906
+ Q(this, "Vs");
1907
+ Q(this, "Rs", null);
1908
+ Q(this, "Hs", 0);
1909
+ Q(this, "zs");
1910
+ Q(this, "Ls", !0);
1911
+ Q(this, "Js", 0);
1912
+ Q(this, "Ks", 0);
1913
+ Q(this, "Ws", 0);
1914
+ Q(this, "js", []);
1915
+ Q(this, "Ns", 10);
1916
+ Q(this, "Zs", !1);
1917
+ Q(this, "Xs", !1);
1918
+ Q(this, "qs", () => {
1734
1919
  });
1735
- Q(this, "_B", () => {
1920
+ Q(this, "Ar", () => {
1736
1921
  });
1737
- Q(this, "vB");
1738
- this.St = t, this.mB = t === null, this.aB = e.renderMode ?? "auto", this.hB = e.frameRate ?? 60, this.CB = 1e3 / this.hB;
1922
+ Q(this, "tr");
1923
+ this.re = t, this.Xs = t === null, this.ks = e.renderMode ?? "auto", this.Vs = e.frameRate ?? 60, this.zs = 1e3 / this.Vs;
1739
1924
  }
1740
1925
  static async create(t = null, e = {}) {
1741
- const r = new this(t, e), B = r.mB ? e : void 0;
1742
- let s, i;
1743
- r.bt = new gA(r.captureSource, r.mB, B), r.WA = new rA(r.bt.Rt()), r.mB ? (s = e.width || 800, i = e.height || 600) : (s = r.bt.width || 800, i = r.bt.height || 600), r.nB = r.WA.TA(s, i), r.et = new QA(r.WA, e.fontSize ?? 16), await r.et.Ct(e.fontSource);
1744
- const o = r.et.maxGlyphDimensions;
1745
- return r.zt = new oA(r.bt.canvas, o.width, o.height), r.oB = new hA(r.WA, r.et, r.zt), r.bB(), r.xB(), r;
1746
- }
1747
- bB() {
1748
- this.vB = () => {
1749
- this.mB ? this._B() : this.yB();
1750
- }, window.addEventListener("resize", this.vB), window.ResizeObserver && this.St && !this.mB && (this.Ut = new ResizeObserver(() => {
1751
- this.yB();
1752
- }), this.Ut.observe(this.St));
1926
+ const s = new this(t, e), r = s.Xs ? e : void 0;
1927
+ let i, B;
1928
+ s.jt = new CA(s.re, s.Xs, r), s.Dt = new iA(s.jt.ge()), s.Xs ? (i = e.width || 800, B = e.height || 600) : (i = s.jt.width || 800, B = s.jt.height || 600), s.Us = s.Dt.TA(i, B), s._t = new cA(s.Dt, e.fontSize ?? 16), await s._t.Ut(e.fontSource);
1929
+ const o = s._t.maxGlyphDimensions;
1930
+ return s.ne = new DA(s.jt.canvas, o.width, o.height), s.Os = new dA(s.Dt, s._t, s.ne), s.er(), s.sr(), s;
1931
+ }
1932
+ er() {
1933
+ this.tr = () => {
1934
+ this.Xs ? this.Ar() : this.rr();
1935
+ }, window.addEventListener("resize", this.tr), window.ResizeObserver && this.re && !this.Xs && (this.ie = new ResizeObserver(() => {
1936
+ this.rr();
1937
+ }), this.ie.observe(this.re));
1753
1938
  }
1754
1939
  render() {
1755
- this.MB(), this.IB++, this.dB ? console.warn("Cannot render: Required resources have been disposed") : (this.mB ? (this.nB.begin(), this.pB(), this.nB.end()) : this.nB.update(this.St), this.oB.hasEnabledConverters() ? (this.oB.le(this.nB), this.WA.SA(0), this.WA.kA(this.oB.texture, this.zt.offsetX, this.zt.offsetY, this.oB.texture.width, this.oB.texture.height)) : (this.WA.OA(), this.WA.kA(this.nB, this.zt.offsetX, this.zt.offsetY, this.nB.width, this.nB.height)));
1940
+ this.Br(), this.Ws++, this.Zs ? console.warn("Cannot render: Required resources have been disposed") : (this.Xs ? (this.Us.begin(), this.qs(), this.Us.end()) : this.Us.update(this.re), this.Os.hasEnabledConverters() ? (this.Os.Te(this.Us), this.Dt.SA(0), this.Dt.kA(this.Os.texture, this.ne.offsetX, this.ne.offsetY, this.Os.texture.width, this.Os.texture.height)) : (this.Dt.OA(), this.Dt.kA(this.Us, this.ne.offsetX, this.ne.offsetY, this.Us.width, this.Us.height)));
1756
1941
  }
1757
- yB() {
1758
- this.bt.$t(), this.nB.resize(this.bt.width, this.bt.height), this.zt.$t(), this.oB.$t(), this.WA.UA(), this.aB !== "manual" && this.render();
1942
+ rr() {
1943
+ this.jt.ee(), this.Us.resize(this.jt.width, this.jt.height), this.ne.ee(), this.Os.ee(), this.Dt.UA(), this.ks !== "manual" && this.render();
1759
1944
  }
1760
- xB() {
1761
- if (this.aB !== "auto" || !this.cB) return;
1762
- this.lB = performance.now();
1945
+ sr() {
1946
+ if (this.ks !== "auto" || !this.Ls) return;
1947
+ this.Hs = performance.now();
1763
1948
  const t = (e) => {
1764
- if (!this.cB) return void (this.DB = null);
1765
- const r = e - this.lB;
1766
- r >= this.CB && (this.render(), this.lB = e - r % this.CB), this.cB && (this.DB = requestAnimationFrame(t));
1949
+ if (!this.Ls) return void (this.Rs = null);
1950
+ const s = e - this.Hs;
1951
+ s >= this.zs && (this.render(), this.Hs = e - s % this.zs), this.Ls && (this.Rs = requestAnimationFrame(t));
1767
1952
  };
1768
- this.DB = requestAnimationFrame(t);
1953
+ this.Rs = requestAnimationFrame(t);
1769
1954
  }
1770
- MB() {
1955
+ Br() {
1771
1956
  const t = performance.now();
1772
- if (this.PB > 0) {
1773
- const e = t - this.PB;
1774
- this.wB.push(e), this.wB.length > this.fB && this.wB.shift();
1775
- const r = this.wB.reduce((B, s) => B + s, 0) / this.wB.length;
1776
- this.uB = 1e3 / r;
1957
+ if (this.Ks > 0) {
1958
+ const e = t - this.Ks;
1959
+ this.js.push(e), this.js.length > this.Ns && this.js.shift();
1960
+ const s = this.js.reduce((r, i) => r + i, 0) / this.js.length;
1961
+ this.Js = 1e3 / s;
1777
1962
  }
1778
- this.PB = t;
1963
+ this.Ks = t;
1779
1964
  }
1780
- GB() {
1781
- this.DB && (cancelAnimationFrame(this.DB), this.DB = null);
1965
+ ir() {
1966
+ this.Rs && (cancelAnimationFrame(this.Rs), this.Rs = null);
1782
1967
  }
1783
1968
  renderMode(t) {
1784
- this.aB !== t && (this.GB(), this.aB = t, t === "auto" && this.cB && this.xB());
1969
+ this.ks !== t && (this.ir(), this.ks = t, t === "auto" && this.Ls && this.sr());
1785
1970
  }
1786
1971
  frameRate(t) {
1787
- if (t === void 0) return this.uB;
1788
- this.hB = t, this.CB = 1e3 / t, this.aB === "auto" && this.cB && (this.GB(), this.xB());
1972
+ if (t === void 0) return this.Js;
1973
+ this.Vs = t, this.zs = 1e3 / t, this.ks === "auto" && this.Ls && (this.ir(), this.sr());
1789
1974
  }
1790
1975
  noLoop() {
1791
- this.cB && (this.cB = !1, this.DB && (cancelAnimationFrame(this.DB), this.DB = null));
1976
+ this.Ls && (this.Ls = !1, this.Rs && (cancelAnimationFrame(this.Rs), this.Rs = null));
1792
1977
  }
1793
1978
  loop() {
1794
- this.cB || (this.cB = !0, this.aB === "auto" && this.xB());
1979
+ this.Ls || (this.Ls = !0, this.ks === "auto" && this.sr());
1795
1980
  }
1796
1981
  redraw(t = 1) {
1797
- if (P.C(typeof t == "number" && t > 0 && Number.isInteger(t), "Redraw count must be a positive integer.", { method: "redraw", providedValue: t })) for (let e = 0; e < t; e++) this.render();
1982
+ if (u.C(typeof t == "number" && t > 0 && Number.isInteger(t), "Redraw count must be a positive integer.", { method: "redraw", providedValue: t })) for (let e = 0; e < t; e++) this.render();
1798
1983
  }
1799
1984
  isLooping() {
1800
- return this.aB === "auto" && this.cB;
1985
+ return this.ks === "auto" && this.Ls;
1801
1986
  }
1802
1987
  draw(t) {
1803
- this.pB = t;
1988
+ this.qs = t;
1804
1989
  }
1805
1990
  windowResized(t) {
1806
- this._B = t;
1991
+ this.Ar = t;
1807
1992
  }
1808
1993
  resizeCanvas(t, e) {
1809
- this.bt.$t(t, e), this.nB.resize(this.bt.width, this.bt.height), this.zt.$t(), this.oB.$t(), this.WA.UA(), this.aB !== "manual" && this.render();
1994
+ this.Xs && (this.jt.ee(t, e), this.Us.resize(this.jt.width, this.jt.height), this.ne.ee(), this.Os.ee(), this.Dt.UA(), this.ks !== "manual" && this.render());
1810
1995
  }
1811
1996
  destroy() {
1812
- this.dB || (this.GB(), window.removeEventListener("resize", this.vB), this.Ut && this.Ut.disconnect(), this.oB.S(), this.et.S(), this.nB.S(), this.WA.S(), this.dB = !0);
1997
+ this.Zs || (this.ir(), window.removeEventListener("resize", this.tr), this.ie && this.ie.disconnect(), this.Os.S(), this._t.S(), this.Us.S(), this.Dt.S(), this.Zs = !0);
1813
1998
  }
1814
1999
  get grid() {
1815
- return this.zt;
2000
+ return this.ne;
1816
2001
  }
1817
2002
  get font() {
1818
- return this.et;
2003
+ return this._t;
1819
2004
  }
1820
2005
  get mode() {
1821
- return this.aB;
2006
+ return this.ks;
1822
2007
  }
1823
2008
  get pipeline() {
1824
- return this.oB;
2009
+ return this.Os;
1825
2010
  }
1826
2011
  get frameCount() {
1827
- return this.IB;
2012
+ return this.Ws;
1828
2013
  }
1829
2014
  set frameCount(t) {
1830
- this.IB = t;
2015
+ this.Ws = t;
1831
2016
  }
1832
2017
  get width() {
1833
- return this.bt.width;
2018
+ return this.jt.width;
1834
2019
  }
1835
2020
  get height() {
1836
- return this.bt.height;
2021
+ return this.jt.height;
1837
2022
  }
1838
2023
  get canvas() {
1839
- return this.bt;
2024
+ return this.jt;
1840
2025
  }
1841
2026
  get isDisposed() {
1842
- return this.dB;
2027
+ return this.Zs;
1843
2028
  }
1844
2029
  }
1845
- class L {
2030
+ class j {
2031
+ constructor() {
2032
+ throw new I("Textmode is a static class and cannot be instantiated.");
2033
+ }
1846
2034
  static async create(A, t = {}) {
1847
- if (A instanceof HTMLCanvasElement || A instanceof HTMLVideoElement) return J.create(A, t);
2035
+ if (!(A == null || A instanceof HTMLCanvasElement || A instanceof HTMLVideoElement || typeof A == "object")) throw new I("First parameter must be HTMLCanvasElement, HTMLVideoElement, or options object.");
2036
+ if (typeof t != "object") throw new I("Second parameter must be an options object.");
2037
+ if (A instanceof HTMLCanvasElement || A instanceof HTMLVideoElement) return z.create(A, t);
1848
2038
  {
1849
2039
  const e = A || {};
1850
- return J.create(null, e);
2040
+ return z.create(null, e);
1851
2041
  }
1852
2042
  }
1853
2043
  static setErrorLevel(A) {
1854
- P.u(A);
2044
+ u.u(A);
1855
2045
  }
1856
2046
  static get version() {
1857
- return "0.1.7";
2047
+ return "0.1.8-beta.3";
1858
2048
  }
1859
2049
  }
1860
- const MA = Object.freeze(Object.defineProperty({ __proto__: null }, Symbol.toStringTag, { value: "Module" })), RA = L.create, FA = L.setErrorLevel, UA = L.version;
2050
+ const LA = Object.freeze(Object.defineProperty({ __proto__: null }, Symbol.toStringTag, { value: "Module" })), kA = j.create, jA = j.setErrorLevel, VA = j.version;
1861
2051
  export {
1862
- gA as TextmodeCanvas,
1863
- hA as TextmodeConversionPipeline,
1864
- AA as TextmodeErrorLevel,
1865
- QA as TextmodeFont,
1866
- oA as TextmodeGrid,
1867
- J as Textmodifier,
1868
- TA as converters,
1869
- RA as create,
1870
- MA as export,
1871
- FA as setErrorLevel,
1872
- L as textmode,
1873
- UA as version
2052
+ CA as TextmodeCanvas,
2053
+ dA as TextmodeConversionPipeline,
2054
+ eA as TextmodeErrorLevel,
2055
+ cA as TextmodeFont,
2056
+ DA as TextmodeGrid,
2057
+ z as Textmodifier,
2058
+ OA as converters,
2059
+ kA as create,
2060
+ j as default,
2061
+ LA as export,
2062
+ jA as setErrorLevel,
2063
+ j as textmode,
2064
+ VA as version
1874
2065
  };