textmode.js 0.1.2 → 0.1.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 (29) hide show
  1. package/README.md +39 -9
  2. package/dist/textmode.esm.js +1181 -742
  3. package/dist/textmode.esm.min.js +1287 -848
  4. package/dist/textmode.umd.js +14 -14
  5. package/dist/textmode.umd.min.js +14 -14
  6. package/dist/types/export/base/FileHandler.d.ts +1 -15
  7. package/dist/types/export/image/ImageDataExtractor.d.ts +3 -2
  8. package/dist/types/export/image/ImageExporter.d.ts +7 -6
  9. package/dist/types/export/image/ImageFileHandler.d.ts +0 -6
  10. package/dist/types/export/image/index.d.ts +1 -1
  11. package/dist/types/export/image/types.d.ts +2 -4
  12. package/dist/types/export/svg/SVGFileHandler.d.ts +0 -18
  13. package/dist/types/export/txt/TXTFileHandler.d.ts +0 -5
  14. package/dist/types/index.d.ts +1 -0
  15. package/dist/types/rendering/index.d.ts +4 -0
  16. package/dist/types/rendering/webgl/Framebuffer.d.ts +1 -1
  17. package/dist/types/rendering/webgl/Renderer.d.ts +63 -21
  18. package/dist/types/rendering/webgl/Shader.d.ts +12 -0
  19. package/dist/types/rendering/webgl/geometries/Line.d.ts +31 -0
  20. package/dist/types/rendering/webgl/geometries/Rectangle.d.ts +8 -14
  21. package/dist/types/rendering/webgl/shapes/LineShape.d.ts +20 -0
  22. package/dist/types/rendering/webgl/shapes/RectangleShape.d.ts +20 -0
  23. package/dist/types/rendering/webgl/shapes/Shape.d.ts +21 -0
  24. package/dist/types/textmode/ConversionPipeline.d.ts +9 -10
  25. package/dist/types/textmode/Textmodifier.d.ts +267 -3
  26. package/dist/types/textmode/font/TextmodeFont.d.ts +1 -1
  27. package/package.json +1 -1
  28. package/dist/types/rendering/webgl/primitives/SolidRectangle.d.ts +0 -1
  29. package/dist/types/textmode/font/typr/Typr.min.d.ts +0 -19
@@ -1,12 +1,12 @@
1
- var $ = Object.defineProperty;
2
- var N = (n, A, e) => A in n ? $(n, A, { enumerable: !0, configurable: !0, writable: !0, value: e }) : n[A] = e;
3
- var o = (n, A, e) => N(n, typeof A != "symbol" ? A + "" : A, e);
4
- class D extends Error {
1
+ var iA = Object.defineProperty;
2
+ var sA = (n, A, e) => A in n ? iA(n, A, { enumerable: !0, configurable: !0, writable: !0, value: e }) : n[A] = e;
3
+ var a = (n, A, e) => sA(n, typeof A != "symbol" ? A + "" : A, e);
4
+ class P extends Error {
5
5
  constructor(e, t, r = {}) {
6
- const i = D.createFormattedMessage(e, r);
6
+ const i = P.createFormattedMessage(e, r);
7
7
  super(i);
8
- o(this, "originalError");
9
- o(this, "context");
8
+ a(this, "originalError");
9
+ a(this, "context");
10
10
  this.name = "TextmodeError", this.originalError = t, this.context = r;
11
11
  }
12
12
  /**
@@ -18,10 +18,10 @@ class D extends Error {
18
18
  r += `
19
19
 
20
20
  📋 Context:`;
21
- for (const [i, a] of Object.entries(t)) {
22
- const s = D.formatValue(a);
21
+ for (const [i, s] of Object.entries(t)) {
22
+ const o = P.formatValue(s);
23
23
  r += `
24
- - ${i}: ${s}`;
24
+ - ${i}: ${o}`;
25
25
  }
26
26
  }
27
27
  return r += `
@@ -38,24 +38,24 @@ class D extends Error {
38
38
  if (typeof e == "string") return `"${e}"`;
39
39
  if (typeof e == "number" || typeof e == "boolean") return String(e);
40
40
  if (Array.isArray(e))
41
- return e.length === 0 ? "[]" : e.length <= 5 ? `[${e.map((t) => D.formatValue(t)).join(", ")}]` : `[${e.slice(0, 3).map((t) => D.formatValue(t)).join(", ")}, ... +${e.length - 3} more]`;
41
+ return e.length === 0 ? "[]" : e.length <= 5 ? `[${e.map((t) => P.formatValue(t)).join(", ")}]` : `[${e.slice(0, 3).map((t) => P.formatValue(t)).join(", ")}, ... +${e.length - 3} more]`;
42
42
  if (typeof e == "object") {
43
43
  const t = Object.keys(e);
44
- return t.length === 0 ? "{}" : t.length <= 3 ? `{ ${t.map((a) => `${a}: ${D.formatValue(e[a])}`).join(", ")} }` : `{ ${t.slice(0, 2).map((i) => `${i}: ${D.formatValue(e[i])}`).join(", ")}, ... +${t.length - 2} more }`;
44
+ return t.length === 0 ? "{}" : t.length <= 3 ? `{ ${t.map((s) => `${s}: ${P.formatValue(e[s])}`).join(", ")} }` : `{ ${t.slice(0, 2).map((i) => `${i}: ${P.formatValue(e[i])}`).join(", ")}, ... +${t.length - 2} more }`;
45
45
  }
46
46
  return String(e);
47
47
  }
48
48
  }
49
- var X = /* @__PURE__ */ ((n) => (n[n.SILENT = 0] = "SILENT", n[n.WARNING = 1] = "WARNING", n[n.ERROR = 2] = "ERROR", n[n.THROW = 3] = "THROW", n))(X || {});
50
- const x = class x {
49
+ var oA = /* @__PURE__ */ ((n) => (n[n.SILENT = 0] = "SILENT", n[n.WARNING = 1] = "WARNING", n[n.ERROR = 2] = "ERROR", n[n.THROW = 3] = "THROW", n))(oA || {});
50
+ const v = class v {
51
51
  constructor() {
52
- o(this, "_options", {
52
+ a(this, "_options", {
53
53
  globalLevel: 3
54
54
  /* THROW */
55
55
  });
56
56
  }
57
57
  static getInstance() {
58
- return x._instance || (x._instance = new x()), x._instance;
58
+ return v._instance || (v._instance = new v()), v._instance;
59
59
  }
60
60
  /**
61
61
  * Handle an error based on the configured settings
@@ -71,15 +71,15 @@ const x = class x {
71
71
  return console.group(
72
72
  `%c${r} Oops! (╯°□°)╯︵ Something went wrong in your code.`,
73
73
  "color: #f44336; font-weight: bold; background: #ffebee; padding: 2px 6px; border-radius: 3px;"
74
- ), console.warn(D.createFormattedMessage(A, e)), console.groupEnd(), !1;
74
+ ), console.warn(P.createFormattedMessage(A, e)), console.groupEnd(), !1;
75
75
  case 2:
76
76
  return console.group(
77
77
  `%c${r} Oops! (╯°□°)╯︵ Something went wrong in your code.`,
78
78
  "color: #f44336; font-weight: bold; background: #ffebee; padding: 2px 6px; border-radius: 3px;"
79
- ), console.error(D.createFormattedMessage(A, e)), console.groupEnd(), !1;
79
+ ), console.error(P.createFormattedMessage(A, e)), console.groupEnd(), !1;
80
80
  case 3:
81
81
  default:
82
- const i = new D(A, t, e);
82
+ const i = new P(A, t, e);
83
83
  throw console.group(
84
84
  `%c${r} Oops! (╯°□°)╯︵ Something went wrong in your code.`,
85
85
  "color: #d32f2f; font-weight: bold; background: #ffcdd2; padding: 2px 6px; border-radius: 3px;"
@@ -103,19 +103,19 @@ const x = class x {
103
103
  this._options.globalLevel = A;
104
104
  }
105
105
  };
106
- o(x, "_instance", null);
107
- let G = x;
108
- const u = G.getInstance();
109
- class W {
106
+ a(v, "_instance", null);
107
+ let V = v;
108
+ const C = V.getInstance();
109
+ class aA {
110
110
  constructor(A, e, t = e, r = {}) {
111
- o(this, "gl");
112
- o(this, "_framebuffer");
113
- o(this, "_texture");
114
- o(this, "_width");
115
- o(this, "_height");
116
- o(this, "options");
117
- o(this, "previousState", null);
118
- o(this, "_pixels", null);
111
+ a(this, "gl");
112
+ a(this, "_framebuffer");
113
+ a(this, "_texture");
114
+ a(this, "_width");
115
+ a(this, "_height");
116
+ a(this, "options");
117
+ a(this, "previousState", null);
118
+ a(this, "_pixels", null);
119
119
  this.gl = A, this._width = e, this._height = t, this.options = {
120
120
  filter: "nearest",
121
121
  wrap: "clamp",
@@ -156,7 +156,8 @@ class W {
156
156
  * Resize the framebuffer
157
157
  */
158
158
  resize(A, e) {
159
- this._width = A, this._height = e, this.gl.bindTexture(this.gl.TEXTURE_2D, this._texture), this.updateTextureSize(), this.gl.bindTexture(this.gl.TEXTURE_2D, null);
159
+ const { gl: t } = this;
160
+ this._width = A, this._height = e, t.bindTexture(t.TEXTURE_2D, this._texture), this.updateTextureSize(), t.bindTexture(t.TEXTURE_2D, null);
160
161
  }
161
162
  /**
162
163
  * Begin rendering to this framebuffer
@@ -188,19 +189,18 @@ class W {
188
189
  get(A, e, t, r) {
189
190
  const { gl: i } = this;
190
191
  if (A === void 0 && e === void 0) {
191
- const a = new Uint8Array(this._width * this._height * 4), s = i.getParameter(i.FRAMEBUFFER_BINDING);
192
- return i.bindFramebuffer(i.FRAMEBUFFER, this._framebuffer), i.readPixels(0, 0, this._width, this._height, i.RGBA, i.UNSIGNED_BYTE, a), i.bindFramebuffer(i.FRAMEBUFFER, s), a;
192
+ const s = new Uint8Array(this._width * this._height * 4), o = i.getParameter(i.FRAMEBUFFER_BINDING);
193
+ return i.bindFramebuffer(i.FRAMEBUFFER, this._framebuffer), i.readPixels(0, 0, this._width, this._height, i.RGBA, i.UNSIGNED_BYTE, s), i.bindFramebuffer(i.FRAMEBUFFER, o), s;
193
194
  } else if (t === void 0 && r === void 0) {
194
195
  (A < 0 || e < 0 || A >= this._width || e >= this._height) && (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._width - 1)), e = Math.max(0, Math.min(e, this._height - 1)));
195
- const a = new Uint8Array(4), s = i.getParameter(i.FRAMEBUFFER_BINDING);
196
- return i.bindFramebuffer(i.FRAMEBUFFER, this._framebuffer), i.readPixels(A, e, 1, 1, i.RGBA, i.UNSIGNED_BYTE, a), i.bindFramebuffer(i.FRAMEBUFFER, s), [a[0], a[1], a[2], a[3]];
196
+ const s = new Uint8Array(4), o = i.getParameter(i.FRAMEBUFFER_BINDING);
197
+ return i.bindFramebuffer(i.FRAMEBUFFER, this._framebuffer), i.readPixels(A, e, 1, 1, i.RGBA, i.UNSIGNED_BYTE, s), i.bindFramebuffer(i.FRAMEBUFFER, o), [s[0], s[1], s[2], s[3]];
197
198
  } else {
198
199
  A = Math.max(0, Math.min(A, this._width - 1)), e = Math.max(0, Math.min(e, this._height - 1)), t = Math.max(1, Math.min(t, this._width - A)), r = Math.max(1, Math.min(r, this._height - e));
199
- const a = new Uint8Array(t * r * 4), s = i.getParameter(i.FRAMEBUFFER_BINDING);
200
- return i.bindFramebuffer(i.FRAMEBUFFER, this._framebuffer), i.readPixels(A, e, t, r, i.RGBA, i.UNSIGNED_BYTE, a), i.bindFramebuffer(i.FRAMEBUFFER, s), a;
200
+ const s = new Uint8Array(t * r * 4), o = i.getParameter(i.FRAMEBUFFER_BINDING);
201
+ return i.bindFramebuffer(i.FRAMEBUFFER, this._framebuffer), i.readPixels(A, e, t, r, i.RGBA, i.UNSIGNED_BYTE, s), i.bindFramebuffer(i.FRAMEBUFFER, o), s;
201
202
  }
202
203
  }
203
- // Getters
204
204
  get framebuffer() {
205
205
  return this._framebuffer;
206
206
  }
@@ -217,33 +217,39 @@ class W {
217
217
  return this._pixels;
218
218
  }
219
219
  }
220
- class O {
221
- constructor(A, e, t, r, i, a = {}) {
220
+ class K {
221
+ constructor(A, e, t) {
222
+ a(this, "gl");
223
+ a(this, "x");
224
+ a(this, "y");
225
+ this.gl = A, this.x = e, this.y = t;
226
+ }
227
+ }
228
+ class y {
229
+ constructor(A, e, t, r, i) {
222
230
  /** The WebGL rendering context */
223
- o(this, "gl");
224
- /** The vertex buffer containing position and optional texture coordinates */
225
- o(this, "vertexBuffer");
231
+ a(this, "gl");
232
+ /** The vertex buffer containing position and texture coordinates */
233
+ a(this, "vertexBuffer");
226
234
  /** The number of vertices in this geometry (always 6 for two triangles) */
227
- o(this, "vertexCount", 6);
228
- /** The rendering mode: textured or solid color */
229
- o(this, "renderMode");
230
- /** Bytes per vertex: 8 for position-only, 16 for position+texture */
231
- o(this, "bytesPerVertex");
232
- this.gl = A;
233
- const s = a.textured ?? !0;
234
- this.renderMode = s ? "textured" : "solid", this.bytesPerVertex = s ? 16 : 8;
235
- const B = A.getParameter(A.VIEWPORT), g = B[2], E = B[3], l = A.getParameter(A.FRAMEBUFFER_BINDING) !== null, h = e / g * 2 - 1, d = (e + r) / g * 2 - 1;
236
- let C, c;
237
- l ? (C = t / E * 2 - 1, c = (t + i) / E * 2 - 1) : (C = 1 - t / E * 2, c = 1 - (t + i) / E * 2);
238
- const f = this.generateVertices(h, C, d, c, s);
235
+ a(this, "vertexCount", 6);
236
+ /** Bytes per vertex: depends on position format (vec2 vs vec3) */
237
+ a(this, "bytesPerVertex");
238
+ this.gl = A, this.bytesPerVertex = 16;
239
+ const s = A.getParameter(A.VIEWPORT), o = s[2], g = s[3], B = A.getParameter(A.FRAMEBUFFER_BINDING) !== null, E = e / o * 2 - 1, Q = (e + r) / o * 2 - 1;
240
+ let l, c;
241
+ B ? (l = t / g * 2 - 1, c = (t + i) / g * 2 - 1) : (l = 1 - t / g * 2, c = 1 - (t + i) / g * 2);
242
+ let d, u, D, m;
243
+ d = E, D = Q, u = l, m = c;
244
+ const f = this.generateVertices(d, u, D, m);
239
245
  this.vertexBuffer = A.createBuffer(), A.bindBuffer(A.ARRAY_BUFFER, this.vertexBuffer), A.bufferData(A.ARRAY_BUFFER, f, A.STATIC_DRAW);
240
246
  }
241
247
  /**
242
- * Generate vertex data for the rectangle
248
+ * Generate vertex data for the rectangle with texture coordinates
243
249
  * @private
244
250
  */
245
- generateVertices(A, e, t, r, i) {
246
- return i ? new Float32Array([
251
+ generateVertices(A, e, t, r) {
252
+ return new Float32Array([
247
253
  A,
248
254
  r,
249
255
  0,
@@ -274,50 +280,197 @@ class O {
274
280
  1,
275
281
  0
276
282
  // top-right
277
- ]) : new Float32Array([
283
+ ]);
284
+ }
285
+ /**
286
+ * Render the rectangle using position and texture coordinate attributes
287
+ */
288
+ render() {
289
+ this.gl.bindBuffer(this.gl.ARRAY_BUFFER, this.vertexBuffer);
290
+ const A = this.gl.getParameter(this.gl.CURRENT_PROGRAM);
291
+ let e = this.gl.getAttribLocation(A, "a_position"), t = this.gl.getAttribLocation(A, "a_texCoord");
292
+ this.gl.enableVertexAttribArray(e), this.gl.vertexAttribPointer(e, 2, this.gl.FLOAT, !1, this.bytesPerVertex, 0), this.gl.enableVertexAttribArray(t), this.gl.vertexAttribPointer(t, 2, this.gl.FLOAT, !1, this.bytesPerVertex, 8), this.gl.drawArrays(this.gl.TRIANGLES, 0, this.vertexCount), this.gl.disableVertexAttribArray(e), this.gl.disableVertexAttribArray(t);
293
+ }
294
+ }
295
+ class nA extends K {
296
+ constructor(e, t, r, i, s) {
297
+ super(e, t, r);
298
+ a(this, "width");
299
+ a(this, "height");
300
+ this.width = i, this.height = s;
301
+ }
302
+ /**
303
+ * Render the filled rectangle using the existing Rectangle geometry.
304
+ */
305
+ renderFill() {
306
+ new y(this.gl, this.x, this.y, this.width, this.height).render();
307
+ }
308
+ /**
309
+ * Render the stroke rectangle as four separate Rectangle instances for each edge.
310
+ * This approach ensures clean corners with proper overlap and leverages existing geometry.
311
+ * @param weight The stroke thickness in pixels
312
+ */
313
+ renderStroke(e) {
314
+ if (e <= 0) return;
315
+ const t = new y(this.gl, this.x, this.y, this.width, e), r = new y(this.gl, this.x + this.width - e, this.y, e, this.height), i = new y(this.gl, this.x, this.y + this.height - e, this.width, e), s = new y(this.gl, this.x, this.y, e, this.height);
316
+ t.render(), r.render(), i.render(), s.render();
317
+ }
318
+ }
319
+ class gA {
320
+ constructor(A, e, t, r, i, s) {
321
+ /** The WebGL rendering context */
322
+ a(this, "gl");
323
+ /** The vertex buffer containing position and texture coordinates */
324
+ a(this, "vertexBuffer");
325
+ /** The number of vertices in this geometry (always 6 for two triangles) */
326
+ a(this, "vertexCount", 6);
327
+ /** Bytes per vertex: vec2+vec2 = 16 bytes */
328
+ a(this, "bytesPerVertex");
329
+ this.gl = A, this.bytesPerVertex = 16;
330
+ const o = A.getParameter(A.VIEWPORT), g = o[2], B = o[3], E = A.getParameter(A.FRAMEBUFFER_BINDING) !== null, Q = r - e, l = i - t, c = Math.sqrt(Q * Q + l * l);
331
+ if (c === 0) {
332
+ const rA = this.generateVertices(0, 0, 0, 0);
333
+ this.vertexBuffer = A.createBuffer(), A.bindBuffer(A.ARRAY_BUFFER, this.vertexBuffer), A.bufferData(A.ARRAY_BUFFER, rA, A.STATIC_DRAW);
334
+ return;
335
+ }
336
+ const d = Q / c, D = -(l / c), m = d, f = s / 2, I = e + D * f, F = t + m * f, x = e - D * f, w = t - m * f, M = r + D * f, T = i + m * f, j = r - D * f, N = i - m * f, Z = I / g * 2 - 1, q = x / g * 2 - 1, AA = M / g * 2 - 1, eA = j / g * 2 - 1;
337
+ let G, R, U, Y;
338
+ E ? (G = F / B * 2 - 1, R = w / B * 2 - 1, U = T / B * 2 - 1, Y = N / B * 2 - 1) : (G = 1 - F / B * 2, R = 1 - w / B * 2, U = 1 - T / B * 2, Y = 1 - N / B * 2);
339
+ const tA = this.generateLineVertices(
340
+ Z,
341
+ G,
342
+ q,
343
+ R,
344
+ AA,
345
+ U,
346
+ eA,
347
+ Y
348
+ );
349
+ this.vertexBuffer = A.createBuffer(), A.bindBuffer(A.ARRAY_BUFFER, this.vertexBuffer), A.bufferData(A.ARRAY_BUFFER, tA, A.STATIC_DRAW);
350
+ }
351
+ /**
352
+ * Generate vertex data for a rectangle representing the line with texture coordinates
353
+ * @private
354
+ */
355
+ generateVertices(A, e, t, r) {
356
+ return new Float32Array([
278
357
  A,
279
358
  r,
359
+ 0,
360
+ 1,
280
361
  // bottom-left
281
362
  t,
282
363
  r,
364
+ 1,
365
+ 1,
283
366
  // bottom-right
284
367
  A,
285
368
  e,
369
+ 0,
370
+ 0,
286
371
  // top-left
287
372
  A,
288
373
  e,
374
+ 0,
375
+ 0,
289
376
  // top-left
290
377
  t,
291
378
  r,
379
+ 1,
380
+ 1,
292
381
  // bottom-right
293
382
  t,
294
- e
383
+ e,
384
+ 1,
385
+ 0
295
386
  // top-right
296
387
  ]);
297
388
  }
298
389
  /**
299
- * Render the rectangle using the appropriate vertex attributes
390
+ * Generate vertex data for the line rectangle with texture coordinates
391
+ * Uses the four corners calculated based on line direction and thickness
392
+ * @private
393
+ */
394
+ generateLineVertices(A, e, t, r, i, s, o, g) {
395
+ return new Float32Array([
396
+ A,
397
+ e,
398
+ 0,
399
+ 0,
400
+ // corner1 (start + perpendicular)
401
+ t,
402
+ r,
403
+ 0,
404
+ 1,
405
+ // corner2 (start - perpendicular)
406
+ i,
407
+ s,
408
+ 1,
409
+ 0,
410
+ // corner3 (end + perpendicular)
411
+ t,
412
+ r,
413
+ 0,
414
+ 1,
415
+ // corner2 (start - perpendicular)
416
+ o,
417
+ g,
418
+ 1,
419
+ 1,
420
+ // corner4 (end - perpendicular)
421
+ i,
422
+ s,
423
+ 1,
424
+ 0
425
+ // corner3 (end + perpendicular)
426
+ ]);
427
+ }
428
+ /**
429
+ * Render the line using position and texture coordinate attributes
300
430
  */
301
431
  render() {
302
432
  this.gl.bindBuffer(this.gl.ARRAY_BUFFER, this.vertexBuffer);
303
- const A = 0, e = 1;
304
- this.gl.enableVertexAttribArray(A), this.gl.vertexAttribPointer(A, 2, this.gl.FLOAT, !1, this.bytesPerVertex, 0), this.renderMode === "textured" && (this.gl.enableVertexAttribArray(e), this.gl.vertexAttribPointer(e, 2, this.gl.FLOAT, !1, this.bytesPerVertex, 8)), this.gl.drawArrays(this.gl.TRIANGLES, 0, this.vertexCount), this.gl.disableVertexAttribArray(A), this.renderMode === "textured" && this.gl.disableVertexAttribArray(e);
433
+ const A = this.gl.getParameter(this.gl.CURRENT_PROGRAM);
434
+ let e = this.gl.getAttribLocation(A, "a_position"), t = this.gl.getAttribLocation(A, "a_texCoord");
435
+ this.gl.enableVertexAttribArray(e), this.gl.vertexAttribPointer(e, 2, this.gl.FLOAT, !1, this.bytesPerVertex, 0), this.gl.enableVertexAttribArray(t), this.gl.vertexAttribPointer(t, 2, this.gl.FLOAT, !1, this.bytesPerVertex, 8), this.gl.drawArrays(this.gl.TRIANGLES, 0, this.vertexCount), this.gl.disableVertexAttribArray(e), this.gl.disableVertexAttribArray(t);
436
+ }
437
+ }
438
+ class BA extends K {
439
+ constructor(e, t, r, i, s) {
440
+ super(e, t, r);
441
+ a(this, "x2");
442
+ a(this, "y2");
443
+ this.x2 = i, this.y2 = s;
444
+ }
445
+ /**
446
+ * Lines don't support fill rendering - this method does nothing.
447
+ * Lines are rendered only with stroke properties.
448
+ */
449
+ renderFill() {
450
+ }
451
+ /**
452
+ * Render the line with the specified stroke weight.
453
+ * @param weight The stroke thickness in pixels
454
+ */
455
+ renderStroke(e) {
456
+ if (e <= 0) return;
457
+ new gA(this.gl, this.x, this.y, this.x2, this.y2, e).render();
305
458
  }
306
459
  }
307
- class w {
460
+ class p {
308
461
  constructor(A, e, t) {
309
- o(this, "gl");
310
- o(this, "program");
311
- o(this, "uniformLocations", /* @__PURE__ */ new Map());
312
- o(this, "attributeLocations", /* @__PURE__ */ new Map());
313
- o(this, "textureUnitCounter", 0);
462
+ a(this, "gl");
463
+ a(this, "program");
464
+ a(this, "uniformLocations", /* @__PURE__ */ new Map());
465
+ a(this, "attributeLocations", /* @__PURE__ */ new Map());
466
+ a(this, "textureUnitCounter", 0);
314
467
  this.gl = A, this.program = this.createProgram(e, t), this.cacheLocations();
315
468
  }
316
469
  createProgram(A, e) {
317
470
  const t = this.createShader(this.gl.VERTEX_SHADER, A), r = this.createShader(this.gl.FRAGMENT_SHADER, e), i = this.gl.createProgram();
318
471
  if (this.gl.attachShader(i, t), this.gl.attachShader(i, r), this.gl.linkProgram(i), !this.gl.getProgramParameter(i, this.gl.LINK_STATUS)) {
319
- const a = this.gl.getProgramInfoLog(i);
320
- throw new Error(`Shader program link error: ${a}`);
472
+ const s = this.gl.getProgramInfoLog(i);
473
+ throw new Error(`Shader program link error: ${s}`);
321
474
  }
322
475
  return this.gl.deleteShader(t), this.gl.deleteShader(r), i;
323
476
  }
@@ -358,10 +511,8 @@ class w {
358
511
  */
359
512
  setUniform(A, e) {
360
513
  const t = this.uniformLocations.get(A);
361
- if (!t) {
362
- console.warn(`Uniform '${A}' not found in shader`);
514
+ if (!t)
363
515
  return;
364
- }
365
516
  const r = this.getUniformInfo(A);
366
517
  if (typeof e == "number")
367
518
  r && r.type === this.gl.INT ? this.gl.uniform1i(t, Math.floor(e)) : this.gl.uniform1f(t, e);
@@ -369,7 +520,7 @@ class w {
369
520
  this.gl.uniform1i(t, e ? 1 : 0);
370
521
  else if (Array.isArray(e))
371
522
  if (r && (r.type === this.gl.INT_VEC2 || r.type === this.gl.INT_VEC3 || r.type === this.gl.INT_VEC4)) {
372
- const i = e.map((a) => Math.floor(a));
523
+ const i = e.map((s) => Math.floor(s));
373
524
  switch (i.length) {
374
525
  case 2:
375
526
  this.gl.uniform2iv(t, i);
@@ -421,6 +572,24 @@ class w {
421
572
  getNextTextureUnit() {
422
573
  return this.textureUnitCounter++;
423
574
  }
575
+ /**
576
+ * Check if this shader has a specific uniform
577
+ */
578
+ hasUniform(A) {
579
+ return this.uniformLocations.has(A);
580
+ }
581
+ /**
582
+ * Check if this shader has a specific attribute
583
+ */
584
+ hasAttribute(A) {
585
+ return this.attributeLocations.has(A);
586
+ }
587
+ /**
588
+ * Get the WebGL program
589
+ */
590
+ get glProgram() {
591
+ return this.program;
592
+ }
424
593
  /**
425
594
  * Reset texture unit counter (useful when starting a new frame)
426
595
  */
@@ -428,31 +597,39 @@ class w {
428
597
  this.textureUnitCounter = 0;
429
598
  }
430
599
  }
431
- var p = "attribute vec2 a_position;attribute vec2 a_texCoord;varying vec2 v_uv;void main(){v_uv=a_texCoord;gl_Position=vec4(a_position,0.0,1.0);}", J = "precision lowp float;uniform sampler2D u_texture;varying vec2 v_uv;void main(){gl_FragColor=texture2D(u_texture,v_uv);}", K = "precision lowp float;uniform vec4 u_color;void main(){gl_FragColor=u_color;}";
432
- class j {
600
+ var _ = "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);}", EA = "precision lowp float;uniform sampler2D u_texture;varying vec2 v_uv;void main(){gl_FragColor=texture2D(u_texture,v_uv);}", QA = "precision lowp float;uniform vec4 u_color;void main(){gl_FragColor=u_color;}";
601
+ class lA {
433
602
  constructor(A) {
434
- o(this, "gl");
435
- o(this, "imageShader");
436
- o(this, "solidColorShader");
437
- o(this, "currentShader", null);
438
- o(this, "currentBlendMode", "normal");
439
- // Fill state management
440
- o(this, "currentFillColor", [1, 1, 1, 1]);
441
- o(this, "fillMode", !1);
442
- this.gl = A, this.imageShader = new w(this.gl, p, J), this.solidColorShader = new w(this.gl, p, K), this.gl.enable(this.gl.BLEND), this.gl.blendEquation(this.gl.FUNC_ADD), this.gl.blendFunc(this.gl.SRC_ALPHA, this.gl.ONE_MINUS_SRC_ALPHA);
443
- }
444
- /**
445
- * Set the current shader (p5.js-like API)
603
+ a(this, "gl");
604
+ a(this, "imageShader");
605
+ a(this, "solidColorShader");
606
+ a(this, "currentShader", null);
607
+ // Fill state management - default: white fill enabled
608
+ a(this, "currentFillColor", [1, 1, 1, 1]);
609
+ a(this, "fillMode", !0);
610
+ // Stroke state management - default: black stroke enabled, weight 1
611
+ a(this, "currentStrokeColor", [0, 0, 0, 1]);
612
+ a(this, "currentStrokeWeight", 1);
613
+ a(this, "strokeMode", !0);
614
+ // Transformation state management
615
+ a(this, "currentRotation", 0);
616
+ // in degrees
617
+ // State stack for push/pop functionality
618
+ a(this, "stateStack", []);
619
+ this.gl = A, this.imageShader = new p(this.gl, _, EA), this.solidColorShader = new p(this.gl, _, QA), this.gl.enable(this.gl.BLEND), this.gl.blendEquation(this.gl.FUNC_ADD), this.gl.blendFunc(this.gl.ONE, this.gl.ONE_MINUS_SRC_ALPHA);
620
+ }
621
+ /**
622
+ * Set the current shader
446
623
  */
447
624
  shader(A) {
448
625
  this.currentShader = A, A.use();
449
626
  }
450
627
  /**
451
628
  * Sets the fill color for subsequent rendering operations
452
- * @param r Red component (0-255)
453
- * @param g Green component (0-255, optional)
454
- * @param b Blue component (0-255, optional)
455
- * @param a Alpha component (0-255, optional)
629
+ * @param r Red component *(0-255)*
630
+ * @param g Green component *(0-255, optional)*
631
+ * @param b Blue component *(0-255, optional)*
632
+ * @param a Alpha component *(0-255, optional)*
456
633
  */
457
634
  fill(A, e, t, r) {
458
635
  if (this.fillMode = !0, e === void 0 && t === void 0 && r === void 0) {
@@ -466,42 +643,146 @@ class j {
466
643
  throw new Error("Invalid fill parameters. Use fill(gray), fill(r,g,b), or fill(r,g,b,a)");
467
644
  }
468
645
  /**
469
- * Reset fill mode - called automatically after each frame
646
+ * Sets the stroke color for subsequent rendering operations
647
+ * @param r Red component *(0-255)*
648
+ * @param g Green component *(0-255, optional)*
649
+ * @param b Blue component *(0-255, optional)*
650
+ * @param a Alpha component *(0-255, optional)*
470
651
  */
471
- reset() {
652
+ stroke(A, e, t, r) {
653
+ if (this.strokeMode = !0, e === void 0 && t === void 0 && r === void 0) {
654
+ const i = A / 255;
655
+ this.currentStrokeColor = [i, i, i, 1];
656
+ } else if (t !== void 0 && r === void 0)
657
+ this.currentStrokeColor = [A / 255, e / 255, t / 255, 1];
658
+ else if (t !== void 0 && r !== void 0)
659
+ this.currentStrokeColor = [A / 255, e / 255, t / 255, r / 255];
660
+ else
661
+ throw new Error("Invalid stroke parameters. Use stroke(gray), stroke(r,g,b), or stroke(r,g,b,a)");
662
+ }
663
+ /**
664
+ * Sets the stroke weight (thickness) for subsequent stroke operations
665
+ * @param weight The stroke thickness in pixels
666
+ */
667
+ strokeWeight(A) {
668
+ if (A < 0)
669
+ throw new Error("Stroke weight must be non-negative");
670
+ this.currentStrokeWeight = A;
671
+ }
672
+ /**
673
+ * Disables stroke rendering for subsequent operations
674
+ */
675
+ noStroke() {
676
+ this.strokeMode = !1;
677
+ }
678
+ /**
679
+ * Disables fill rendering for subsequent operations
680
+ */
681
+ noFill() {
472
682
  this.fillMode = !1;
473
683
  }
684
+ /**
685
+ * Sets the rotation angle for subsequent rendering operations
686
+ * @param degrees The rotation angle in degrees
687
+ */
688
+ rotate(A) {
689
+ this.currentRotation = A;
690
+ }
691
+ /**
692
+ * Save the current rendering state (fill, stroke, etc.) to the state stack
693
+ */
694
+ push() {
695
+ this.stateStack.push({
696
+ fillColor: [...this.currentFillColor],
697
+ fillMode: this.fillMode,
698
+ strokeColor: [...this.currentStrokeColor],
699
+ strokeWeight: this.currentStrokeWeight,
700
+ strokeMode: this.strokeMode,
701
+ rotation: this.currentRotation
702
+ });
703
+ }
704
+ /**
705
+ * Restore the most recently saved rendering state from the state stack
706
+ */
707
+ pop() {
708
+ const A = this.stateStack.pop();
709
+ A ? (this.currentFillColor = A.fillColor, this.fillMode = A.fillMode, this.currentStrokeColor = A.strokeColor, this.currentStrokeWeight = A.strokeWeight, this.strokeMode = A.strokeMode, this.currentRotation = A.rotation) : console.warn("pop() called without matching push()");
710
+ }
711
+ /**
712
+ * Reset frame-specific state - called automatically after each frame.
713
+ * Note: This does not reset fill/stroke state as that should persist
714
+ * across frames and be managed by push/pop or explicit calls.
715
+ */
716
+ reset() {
717
+ this.currentShader = null, this.stateStack = [], this.currentRotation = 0, this.fillMode = !0, this.strokeMode = !0, this.currentFillColor = [1, 1, 1, 1], this.currentStrokeColor = [0, 0, 0, 1], this.currentStrokeWeight = 1;
718
+ }
474
719
  createShader(A, e) {
475
- return new w(this.gl, A, e);
720
+ return new p(this.gl, A, e);
476
721
  }
477
722
  /**
478
- * Set a uniform value for the current shader (p5.js-like API)
723
+ * Set a uniform value for the current shader
479
724
  */
480
725
  setUniform(A, e) {
481
726
  this.currentShader.setUniform(A, e);
482
727
  }
483
728
  /**
484
- * Draw a rectangle with the current shader or fill color (p5.js-like API)
729
+ * Draw a rectangle with the current fill and/or stroke settings
485
730
  */
486
731
  rect(A, e, t, r) {
487
- if (this.fillMode && this.currentShader === null) {
488
- const i = this.currentBlendMode;
489
- this.setBlendMode(
490
- "premultiplied"
491
- /* PREMULTIPLIED */
492
- ), this.shader(this.solidColorShader), this.setUniform("u_color", this.currentFillColor), new O(this.gl, A, e, t, r, { textured: !1 }).render(), this.setBlendMode(i);
493
- } else
494
- new O(this.gl, A, e, t, r, { textured: !0 }).render();
495
- this.currentShader = null;
732
+ const i = new nA(this.gl, A, e, t, r);
733
+ if (this.currentShader !== null) {
734
+ if (this.currentRotation !== 0) {
735
+ const { centerX: Q, centerY: l, radians: c, aspectRatio: d } = this.calculateRotationParams(A, e, t, r);
736
+ this.setUniform("u_rotation", c), this.setUniform("u_center", [Q, l]), this.setUniform("u_aspectRatio", d);
737
+ } else
738
+ this.setUniform("u_rotation", 0), this.setUniform("u_center", [0, 0]), this.setUniform("u_aspectRatio", 1);
739
+ i.renderFill(), this.currentShader = null;
740
+ return;
741
+ }
742
+ const s = this.solidColorShader, { centerX: o, centerY: g, radians: B, aspectRatio: E } = this.calculateRotationParams(A, e, t, r);
743
+ this.fillMode && (this.shader(s), this.setUniform("u_color", this.currentFillColor), this.setUniform("u_rotation", B), this.setUniform("u_center", [o, g]), this.setUniform("u_aspectRatio", E), i.renderFill()), this.strokeMode && (this.shader(s), this.setUniform("u_color", this.currentStrokeColor), this.setUniform("u_rotation", B), this.setUniform("u_center", [o, g]), this.setUniform("u_aspectRatio", E), i.renderStroke(this.currentStrokeWeight)), this.currentShader = null;
744
+ }
745
+ /**
746
+ * Draw a line from (x1, y1) to (x2, y2) with the current stroke settings.
747
+ * Lines only support stroke rendering - fill properties are ignored.
748
+ * @param x1 X-coordinate of the line start point
749
+ * @param y1 Y-coordinate of the line start point
750
+ * @param x2 X-coordinate of the line end point
751
+ * @param y2 Y-coordinate of the line end point
752
+ */
753
+ line(A, e, t, r) {
754
+ if (!this.strokeMode) return;
755
+ const i = new BA(this.gl, A, e, t, r);
756
+ if (this.currentShader !== null) {
757
+ if (this.currentRotation !== 0) {
758
+ const u = (A + t) / 2, D = (e + r) / 2, m = Math.abs(t - A), f = Math.abs(r - e), { centerX: I, centerY: F, radians: x, aspectRatio: w } = this.calculateRotationParams(u - m / 2, D - f / 2, m, f);
759
+ this.setUniform("u_rotation", x), this.setUniform("u_center", [I, F]), this.setUniform("u_aspectRatio", w);
760
+ } else
761
+ this.setUniform("u_rotation", 0), this.setUniform("u_center", [0, 0]), this.setUniform("u_aspectRatio", 1);
762
+ i.renderStroke(this.currentStrokeWeight), this.currentShader = null;
763
+ return;
764
+ }
765
+ const s = this.solidColorShader, o = (A + t) / 2, g = (e + r) / 2, B = Math.abs(t - A), E = Math.abs(r - e), { centerX: Q, centerY: l, radians: c, aspectRatio: d } = this.calculateRotationParams(o - B / 2, g - E / 2, B, E);
766
+ this.shader(s), this.setUniform("u_color", this.currentStrokeColor), this.setUniform("u_rotation", c), this.setUniform("u_center", [Q, l]), this.setUniform("u_aspectRatio", d), i.renderStroke(this.currentStrokeWeight), this.currentShader = null;
767
+ }
768
+ /**
769
+ * Calculate rotation parameters for built-in shaders (NDC coordinates)
770
+ */
771
+ calculateRotationParams(A, e, t, r) {
772
+ const i = this.gl.getParameter(this.gl.VIEWPORT), s = i[2], o = i[3], g = s / o, B = this.gl.getParameter(this.gl.FRAMEBUFFER_BINDING) !== null, E = A + t / 2, Q = e + r / 2, l = E / s * 2 - 1;
773
+ let c;
774
+ B ? c = Q / o * 2 - 1 : c = 1 - Q / o * 2;
775
+ const d = this.currentRotation * Math.PI / 180;
776
+ return { centerX: l, centerY: c, radians: d, aspectRatio: g };
496
777
  }
497
778
  /**
498
779
  * Create a new framebuffer
499
780
  */
500
781
  createFramebuffer(A, e, t = {}) {
501
- return new W(this.gl, A, e, t);
782
+ return new aA(this.gl, A, e, t);
502
783
  }
503
784
  /**
504
- * Fill the current framebuffer with a solid color (p5.js-like API)
785
+ * Fill the current framebuffer with a solid color
505
786
  */
506
787
  background(A, e = A, t = A, r = 255) {
507
788
  this.clear(A / 255, e / 255, t / 255, r / 255);
@@ -524,193 +805,146 @@ class j {
524
805
  get context() {
525
806
  return this.gl;
526
807
  }
527
- /**
528
- * Set the blend mode for different rendering contexts
529
- */
530
- setBlendMode(A) {
531
- if (this.currentBlendMode !== A)
532
- switch (this.currentBlendMode = A, A) {
533
- case "normal":
534
- this.gl.blendFunc(this.gl.SRC_ALPHA, this.gl.ONE_MINUS_SRC_ALPHA);
535
- break;
536
- case "premultiplied":
537
- this.gl.blendFunc(this.gl.ONE, this.gl.ONE_MINUS_SRC_ALPHA);
538
- break;
539
- }
540
- }
541
808
  /**
542
809
  * Render a framebuffer at a specific position with optional scaling
543
810
  */
544
811
  image(A, e, t, r, i) {
545
- const a = this.currentBlendMode;
546
- this.setBlendMode(
547
- "premultiplied"
548
- /* PREMULTIPLIED */
549
- ), this.shader(this.imageShader), this.setUniform("u_texture", A.texture), this.rect(e, t, r ?? A.width, i ?? A.height), this.setBlendMode(a);
812
+ this.shader(this.imageShader), this.setUniform("u_texture", A.texture);
813
+ const { centerX: s, centerY: o, radians: g, aspectRatio: B } = this.calculateRotationParams(
814
+ e,
815
+ t,
816
+ r ?? A.width,
817
+ i ?? A.height
818
+ );
819
+ this.setUniform("u_rotation", g), this.setUniform("u_center", [s, o]), this.setUniform("u_aspectRatio", B), this.rect(e, t, r ?? A.width, i ?? A.height);
550
820
  }
551
821
  }
552
- var Q = {};
553
- Q.parse = function(n) {
554
- var A = Q.B, e = function(h, d, C, c) {
555
- var f = Q.T, I = {
556
- cmap: f.cmap,
557
- head: f.head,
558
- hhea: f.hhea,
559
- maxp: f.maxp,
560
- hmtx: f.hmtx,
561
- loca: f.loca,
562
- glyf: f.glyf
563
- }, P = { _data: h, _index: d, _offset: C };
564
- for (var m in I) {
565
- var F = Q.findTable(h, m, C);
566
- if (F) {
567
- var _ = F[0], v = c[_];
568
- v == null && (v = I[m].parseTab(h, _, F[1], P)), P[m] = c[_] = v;
822
+ var h = {};
823
+ h.parse = function(n) {
824
+ var A = function(i, s, o, g) {
825
+ var B = h.T, E = {
826
+ cmap: B.cmap,
827
+ head: B.head,
828
+ hhea: B.hhea,
829
+ maxp: B.maxp,
830
+ hmtx: B.hmtx,
831
+ loca: B.loca,
832
+ glyf: B.glyf
833
+ }, Q = { _data: i, _index: s, _offset: o };
834
+ for (var l in E) {
835
+ var c = h.findTable(i, l, o);
836
+ if (c) {
837
+ var d = c[0], u = g[d];
838
+ u == null && (u = E[l].parseTab(i, d, c[1], Q)), Q[l] = g[d] = u;
569
839
  }
570
840
  }
571
- return P;
572
- }, t = new Uint8Array(n), r = {}, i = A.readASCII(t, 0, 4);
573
- if (i == "ttcf") {
574
- var a = 4;
575
- A.readUshort(t, a), a += 2, A.readUshort(t, a), a += 2;
576
- var s = A.readUint(t, a);
577
- a += 4;
578
- for (var B = [], g = 0; g < s; g++) {
579
- var E = A.readUint(t, a);
580
- a += 4, B.push(e(t, g, E, r));
581
- }
582
- return B;
583
- }
584
- var l = e(t, 0, 0, r);
585
- return [l];
841
+ return Q;
842
+ }, e = new Uint8Array(n), t = {}, r = A(e, 0, 0, t);
843
+ return [r];
586
844
  };
587
- Q.findTable = function(n, A, e) {
588
- for (var t = Q.B, r = t.readUshort(n, e + 4), i = e + 12, a = 0; a < r; a++) {
589
- var s = t.readASCII(n, i, 4);
845
+ h.findTable = function(n, A, e) {
846
+ for (var t = h.B, r = t.readUshort(n, e + 4), i = e + 12, s = 0; s < r; s++) {
847
+ var o = t.readASCII(n, i, 4);
590
848
  t.readUint(n, i + 4);
591
- var B = t.readUint(n, i + 8), g = t.readUint(n, i + 12);
592
- if (s == A) return [B, g];
849
+ var g = t.readUint(n, i + 8), B = t.readUint(n, i + 12);
850
+ if (o == A) return [g, B];
593
851
  i += 16;
594
852
  }
595
853
  return null;
596
854
  };
597
- Q.T = {};
598
- Q.B = {
599
- readFixed: function(n, A) {
600
- return (n[A] << 8 | n[A + 1]) + (n[A + 2] << 8 | n[A + 3]) / (256 * 256 + 4);
601
- },
602
- readF2dot14: function(n, A) {
603
- var e = Q.B.readShort(n, A);
604
- return e / 16384;
605
- },
606
- readInt: function(n, A) {
607
- var e = Q.B.t.uint8;
608
- return e[0] = n[A + 3], e[1] = n[A + 2], e[2] = n[A + 1], e[3] = n[A], Q.B.t.int32[0];
609
- },
610
- readInt8: function(n, A) {
611
- var e = Q.B.t.uint8;
612
- return e[0] = n[A], Q.B.t.int8[0];
613
- },
855
+ h.T = {};
856
+ h.B = {
614
857
  readShort: function(n, A) {
615
- var e = Q.B.t.uint16;
616
- return e[0] = n[A] << 8 | n[A + 1], Q.B.t.int16[0];
858
+ var e = h.B.t.uint16;
859
+ return e[0] = n[A] << 8 | n[A + 1], h.B.t.int16[0];
617
860
  },
618
861
  readUshort: function(n, A) {
619
862
  return n[A] << 8 | n[A + 1];
620
863
  },
621
864
  readUshorts: function(n, A, e) {
622
865
  for (var t = [], r = 0; r < e; r++)
623
- t.push(Q.B.readUshort(n, A + r * 2));
866
+ t.push(h.B.readUshort(n, A + r * 2));
624
867
  return t;
625
868
  },
626
869
  readUint: function(n, A) {
627
- var e = Q.B.t.uint8;
628
- return e[3] = n[A], e[2] = n[A + 1], e[1] = n[A + 2], e[0] = n[A + 3], Q.B.t.uint32[0];
629
- },
630
- readUint64: function(n, A) {
631
- return Q.B.readUint(n, A) * 4294967296 + Q.B.readUint(n, A + 4);
870
+ var e = h.B.t.uint8;
871
+ return e[3] = n[A], e[2] = n[A + 1], e[1] = n[A + 2], e[0] = n[A + 3], h.B.t.uint32[0];
632
872
  },
633
873
  readASCII: function(n, A, e) {
634
874
  for (var t = "", r = 0; r < e; r++) t += String.fromCharCode(n[A + r]);
635
875
  return t;
636
876
  },
637
- readBytes: function(n, A, e) {
638
- for (var t = [], r = 0; r < e; r++) t.push(n[A + r]);
639
- return t;
640
- },
877
+ // Simplified typed array buffer - only what's needed
641
878
  t: function() {
642
879
  var n = new ArrayBuffer(8);
643
880
  return {
644
- buff: n,
645
- int8: new Int8Array(n),
646
881
  uint8: new Uint8Array(n),
647
882
  int16: new Int16Array(n),
648
883
  uint16: new Uint16Array(n),
649
- int32: new Int32Array(n),
650
884
  uint32: new Uint32Array(n)
651
885
  };
652
886
  }()
653
887
  };
654
- Q.T.cmap = {
888
+ h.T.cmap = {
655
889
  parseTab: function(n, A, e) {
656
890
  var t = { tables: [], ids: {}, off: A };
657
891
  n = new Uint8Array(n.buffer, A, e), A = 0;
658
- var r = Q.B, i = r.readUshort, a = Q.T.cmap;
892
+ var r = h.B, i = r.readUshort, s = h.T.cmap;
659
893
  i(n, A), A += 2;
660
- var s = i(n, A);
894
+ var o = i(n, A);
661
895
  A += 2;
662
- for (var B = [], g = 0; g < s; g++) {
896
+ for (var g = [], B = 0; B < o; B++) {
663
897
  var E = i(n, A);
664
898
  A += 2;
665
- var l = i(n, A);
899
+ var Q = i(n, A);
666
900
  A += 2;
667
- var h = r.readUint(n, A);
901
+ var l = r.readUint(n, A);
668
902
  A += 4;
669
- var d = "p" + E + "e" + l, C = B.indexOf(h);
670
- if (C == -1) {
671
- C = t.tables.length;
672
- var c = {};
673
- B.push(h);
674
- var f = c.format = i(n, h);
675
- f == 4 ? c = a.parse4(n, h, c) : f == 12 && (c = a.parse12(n, h, c)), t.tables.push(c);
903
+ var c = "p" + E + "e" + Q, d = g.indexOf(l);
904
+ if (d == -1) {
905
+ d = t.tables.length;
906
+ var u = {};
907
+ g.push(l);
908
+ var D = u.format = i(n, l);
909
+ D == 4 ? u = s.parse4(n, l, u) : D == 12 && (u = s.parse12(n, l, u)), t.tables.push(u);
676
910
  }
677
- t.ids[d] != null && console.log("multiple tables for one platform+encoding: " + d), t.ids[d] = C;
911
+ t.ids[c] != null && console.log("multiple tables for one platform+encoding: " + c), t.ids[c] = d;
678
912
  }
679
913
  return t;
680
914
  },
681
915
  parse4: function(n, A, e) {
682
- var t = Q.B, r = t.readUshort, i = t.readUshorts, a = A;
916
+ var t = h.B, r = t.readUshort, i = t.readUshorts, s = A;
683
917
  A += 2;
684
- var s = r(n, A);
918
+ var o = r(n, A);
685
919
  A += 2, r(n, A), A += 2;
686
- var B = r(n, A);
920
+ var g = r(n, A);
687
921
  A += 2;
688
- var g = B >>> 1;
689
- e.searchRange = r(n, A), A += 2, e.entrySelector = r(n, A), A += 2, e.rangeShift = r(n, A), A += 2, e.endCount = i(n, A, g), A += g * 2, A += 2, e.startCount = i(n, A, g), A += g * 2, e.idDelta = [];
690
- for (var E = 0; E < g; E++)
922
+ var B = g >>> 1;
923
+ e.searchRange = r(n, A), A += 2, e.entrySelector = r(n, A), A += 2, e.rangeShift = r(n, A), A += 2, e.endCount = i(n, A, B), A += B * 2, A += 2, e.startCount = i(n, A, B), A += B * 2, e.idDelta = [];
924
+ for (var E = 0; E < B; E++)
691
925
  e.idDelta.push(t.readShort(n, A)), A += 2;
692
- return e.idRangeOffset = i(n, A, g), A += g * 2, e.glyphIdArray = i(n, A, a + s - A >> 1), e;
926
+ return e.idRangeOffset = i(n, A, B), A += B * 2, e.glyphIdArray = i(n, A, s + o - A >> 1), e;
693
927
  },
694
928
  parse12: function(n, A, e) {
695
- var t = Q.B, r = t.readUint;
929
+ var t = h.B, r = t.readUint;
696
930
  A += 4, r(n, A), A += 4, r(n, A), A += 4;
697
931
  var i = r(n, A) * 3;
698
932
  A += 4;
699
- for (var a = e.groups = new Uint32Array(i), s = 0; s < i; s += 3)
700
- a[s] = r(n, A + (s << 2)), a[s + 1] = r(n, A + (s << 2) + 4), a[s + 2] = r(n, A + (s << 2) + 8);
933
+ for (var s = e.groups = new Uint32Array(i), o = 0; o < i; o += 3)
934
+ s[o] = r(n, A + (o << 2)), s[o + 1] = r(n, A + (o << 2) + 4), s[o + 2] = r(n, A + (o << 2) + 8);
701
935
  return e;
702
936
  }
703
937
  };
704
- Q.T.head = {
938
+ h.T.head = {
705
939
  parseTab: function(n, A, e) {
706
- var t = Q.B, r = {};
707
- return t.readFixed(n, A), A += 4, r.fontRevision = t.readFixed(n, A), A += 4, t.readUint(n, A), A += 4, t.readUint(n, A), A += 4, r.flags = t.readUshort(n, A), A += 2, r.unitsPerEm = t.readUshort(n, A), A += 2, r.created = t.readUint64(n, A), A += 8, r.modified = t.readUint64(n, A), A += 8, r.xMin = t.readShort(n, A), A += 2, r.yMin = t.readShort(n, A), A += 2, r.xMax = t.readShort(n, A), A += 2, r.yMax = t.readShort(n, A), A += 2, r.macStyle = t.readUshort(n, A), A += 2, r.lowestRecPPEM = t.readUshort(n, A), A += 2, r.fontDirectionHint = t.readShort(n, A), A += 2, r.indexToLocFormat = t.readShort(n, A), A += 2, r.glyphDataFormat = t.readShort(n, A), A += 2, r;
940
+ var t = h.B, r = {};
941
+ return A += 18, r.unitsPerEm = t.readUshort(n, A), A += 2, A += 16, r.xMin = t.readShort(n, A), A += 2, r.yMin = t.readShort(n, A), A += 2, r.xMax = t.readShort(n, A), A += 2, r.yMax = t.readShort(n, A), A += 2, A += 6, r.indexToLocFormat = t.readShort(n, A), r;
708
942
  }
709
943
  };
710
- Q.T.hhea = {
944
+ h.T.hhea = {
711
945
  parseTab: function(n, A, e) {
712
- var t = Q.B, r = {};
713
- t.readFixed(n, A), A += 4;
946
+ var t = h.B, r = {};
947
+ A += 4;
714
948
  for (var i = [
715
949
  "ascender",
716
950
  "descender",
@@ -728,85 +962,85 @@ Q.T.hhea = {
728
962
  "res3",
729
963
  "metricDataFormat",
730
964
  "numberOfHMetrics"
731
- ], a = 0; a < i.length; a++) {
732
- var s = i[a], B = s == "advanceWidthMax" || s == "numberOfHMetrics" ? t.readUshort : t.readShort;
733
- r[s] = B(n, A + a * 2);
965
+ ], s = 0; s < i.length; s++) {
966
+ var o = i[s], g = o == "advanceWidthMax" || o == "numberOfHMetrics" ? t.readUshort : t.readShort;
967
+ r[o] = g(n, A + s * 2);
734
968
  }
735
969
  return r;
736
970
  }
737
971
  };
738
- Q.T.hmtx = {
972
+ h.T.hmtx = {
739
973
  parseTab: function(n, A, e, t) {
740
- for (var r = Q.B, i = [], a = [], s = t.maxp.numGlyphs, B = t.hhea.numberOfHMetrics, g = 0, E = 0, l = 0; l < B; )
741
- g = r.readUshort(n, A + (l << 2)), E = r.readShort(n, A + (l << 2) + 2), i.push(g), a.push(E), l++;
742
- for (; l < s; )
743
- i.push(g), a.push(E), l++;
744
- return { aWidth: i, lsBearing: a };
974
+ for (var r = h.B, i = [], s = [], o = t.maxp.numGlyphs, g = t.hhea.numberOfHMetrics, B = 0, E = 0, Q = 0; Q < g; )
975
+ B = r.readUshort(n, A + (Q << 2)), E = r.readShort(n, A + (Q << 2) + 2), i.push(B), s.push(E), Q++;
976
+ for (; Q < o; )
977
+ i.push(B), s.push(E), Q++;
978
+ return { aWidth: i, lsBearing: s };
745
979
  }
746
980
  };
747
- Q.T.maxp = {
981
+ h.T.maxp = {
748
982
  parseTab: function(n, A, e) {
749
- var t = Q.B, r = t.readUshort, i = {};
983
+ var t = h.B, r = t.readUshort, i = {};
750
984
  return t.readUint(n, A), A += 4, i.numGlyphs = r(n, A), A += 2, i;
751
985
  }
752
986
  };
753
- Q.T.loca = {
987
+ h.T.loca = {
754
988
  parseTab: function(n, A, e, t) {
755
- var r = Q.B, i = [], a = t.head.indexToLocFormat, s = t.maxp.numGlyphs + 1;
756
- if (a == 0) for (var B = 0; B < s; B++) i.push(r.readUshort(n, A + (B << 1)) << 1);
757
- if (a == 1) for (var B = 0; B < s; B++) i.push(r.readUint(n, A + (B << 2)));
989
+ var r = h.B, i = [], s = t.head.indexToLocFormat, o = t.maxp.numGlyphs + 1;
990
+ if (s == 0) for (var g = 0; g < o; g++) i.push(r.readUshort(n, A + (g << 1)) << 1);
991
+ if (s == 1) for (var g = 0; g < o; g++) i.push(r.readUint(n, A + (g << 2)));
758
992
  return i;
759
993
  }
760
994
  };
761
- Q.T.glyf = {
995
+ h.T.glyf = {
762
996
  parseTab: function(n, A, e, t) {
763
- for (var r = [], i = t.maxp.numGlyphs, a = 0; a < i; a++) r.push(null);
997
+ for (var r = [], i = t.maxp.numGlyphs, s = 0; s < i; s++) r.push(null);
764
998
  return r;
765
999
  },
766
1000
  _parseGlyf: function(n, A) {
767
- var e = Q.B, t = n._data, r = n.loca;
1001
+ var e = h.B, t = n._data, r = n.loca;
768
1002
  if (r[A] == r[A + 1]) return null;
769
- var i = Q.findTable(t, "glyf", n._offset)[0] + r[A], a = {};
770
- if (a.noc = e.readShort(t, i), i += 2, a.xMin = e.readShort(t, i), i += 2, a.yMin = e.readShort(t, i), i += 2, a.xMax = e.readShort(t, i), i += 2, a.yMax = e.readShort(t, i), i += 2, a.xMin >= a.xMax || a.yMin >= a.yMax) return null;
771
- if (a.noc > 0) {
772
- a.endPts = [];
773
- for (var s = 0; s < a.noc; s++)
774
- a.endPts.push(e.readUshort(t, i)), i += 2;
775
- var B = e.readUshort(t, i);
776
- if (i += 2, t.length - i < B) return null;
777
- a.instructions = e.readBytes(t, i, B), i += B;
778
- var g = a.endPts[a.noc - 1] + 1;
779
- a.flags = [];
780
- for (var s = 0; s < g; s++) {
1003
+ var i = h.findTable(t, "glyf", n._offset)[0] + r[A], s = {};
1004
+ if (s.noc = e.readShort(t, i), i += 2, s.xMin = e.readShort(t, i), i += 2, s.yMin = e.readShort(t, i), i += 2, s.xMax = e.readShort(t, i), i += 2, s.yMax = e.readShort(t, i), i += 2, s.xMin >= s.xMax || s.yMin >= s.yMax) return null;
1005
+ if (s.noc > 0) {
1006
+ s.endPts = [];
1007
+ for (var o = 0; o < s.noc; o++)
1008
+ s.endPts.push(e.readUshort(t, i)), i += 2;
1009
+ var g = e.readUshort(t, i);
1010
+ if (i += 2, t.length - i < g) return null;
1011
+ i += g;
1012
+ var B = s.endPts[s.noc - 1] + 1;
1013
+ s.flags = [];
1014
+ for (var o = 0; o < B; o++) {
781
1015
  var E = t[i];
782
- if (i++, a.flags.push(E), E & 8) {
783
- var l = t[i];
1016
+ if (i++, s.flags.push(E), E & 8) {
1017
+ var Q = t[i];
784
1018
  i++;
785
- for (var h = 0; h < l; h++)
786
- a.flags.push(E), s++;
1019
+ for (var l = 0; l < Q; l++)
1020
+ s.flags.push(E), o++;
787
1021
  }
788
1022
  }
789
- a.xs = [];
790
- for (var s = 0; s < g; s++) {
791
- var d = (a.flags[s] & 2) != 0, C = (a.flags[s] & 16) != 0;
792
- d ? (a.xs.push(C ? t[i] : -t[i]), i++) : C ? a.xs.push(0) : (a.xs.push(e.readShort(t, i)), i += 2);
1023
+ s.xs = [];
1024
+ for (var o = 0; o < B; o++) {
1025
+ var c = (s.flags[o] & 2) != 0, d = (s.flags[o] & 16) != 0;
1026
+ c ? (s.xs.push(d ? t[i] : -t[i]), i++) : d ? s.xs.push(0) : (s.xs.push(e.readShort(t, i)), i += 2);
793
1027
  }
794
- a.ys = [];
795
- for (var s = 0; s < g; s++) {
796
- var d = (a.flags[s] & 4) != 0, C = (a.flags[s] & 32) != 0;
797
- d ? (a.ys.push(C ? t[i] : -t[i]), i++) : C ? a.ys.push(0) : (a.ys.push(e.readShort(t, i)), i += 2);
1028
+ s.ys = [];
1029
+ for (var o = 0; o < B; o++) {
1030
+ var c = (s.flags[o] & 4) != 0, d = (s.flags[o] & 32) != 0;
1031
+ c ? (s.ys.push(d ? t[i] : -t[i]), i++) : d ? s.ys.push(0) : (s.ys.push(e.readShort(t, i)), i += 2);
798
1032
  }
799
- for (var c = 0, f = 0, s = 0; s < g; s++)
800
- c += a.xs[s], f += a.ys[s], a.xs[s] = c, a.ys[s] = f;
1033
+ for (var u = 0, D = 0, o = 0; o < B; o++)
1034
+ u += s.xs[o], D += s.ys[o], s.xs[o] = u, s.ys[o] = D;
801
1035
  } else
802
- a.parts = [];
803
- return a;
1036
+ s.parts = [];
1037
+ return s;
804
1038
  }
805
1039
  };
806
- typeof module < "u" && module.exports ? module.exports = Q : typeof window < "u" && (window.Typr = Q);
807
- const Z = `data:font/truetype;charset=utf-8;base64,AAEAAAAKAIAAAwAgT1MvMs+QEyQAAAEoAAAAYGNtYXAg7yVJAAAFjAAACSBnbHlmuHLTdAAAErQAAGi0aGVhZFvXdUwAAACsAAAANmhoZWELAQUCAAAA5AAAACRobXR4BACDgAAAAYgAAAQEbG9jYQAy54AAAA6sAAAECG1heHABIgCCAAABCAAAACBuYW1lVs/OSgAAe2gAAAOicG9zdABpADQAAH8MAAAAIAABAAAAAQAAzOWHqV8PPPUAAAQAAAAAAHxiGCcAAAAAfGIYJwAAAAAEAAQAAAAACAACAAEAAAAAAAEAAAQAAAAAAAQAAAAAAAcAAAEAAAAAAAAAAAAAAAAAAAEBAAEAAAEBAIAAIAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAgQAAZAABQAEAgACAAAAAAACAAIAAAACAAAzAMwAAAAABAAAAAAAAACAAACLAABw4wAAAAAAAAAAWUFMLgBAACAmawQAAAAAAAQAAAAAAAFRAAAAAAMABAAAAAAgAAAEAAAABAAAAAQAAAAEAAGABAABAAQAAIAEAACABAAAgAQAAIAEAAGABAABAAQAAQAEAACABAABAAQAAIAEAACABAABAAQAAIAEAACABAAAgAQAAIAEAACABAAAgAQAAIAEAACABAAAgAQAAIAEAACABAABAAQAAIAEAAEABAAAgAQAAIAEAACABAAAgAQAAIAEAACABAAAgAQAAIAEAACABAAAgAQAAIAEAACABAAAgAQAAIAEAACABAAAgAQAAIAEAACABAAAgAQAAIAEAACABAAAgAQAAIAEAACABAAAgAQAAIAEAACABAAAgAQAAIAEAACABAABAAQAAIAEAAEABAAAgAQAAIAEAAEABAAAgAQAAIAEAACABAAAgAQAAIAEAAEABAAAgAQAAIAEAAGABAAAgAQAAIAEAAGABAAAgAQAAIAEAACABAAAgAQAAIAEAAEABAAAgAQAAIAEAACABAAAgAQAAIAEAACABAAAgAQAAIAEAACABAABgAQAAQAEAACABAAAAAQAAgAEAACABAAAgAQAAIAEAACABAACAAQAAAAEAAIABAABgAQAAgAEAACABAAAgAQAAAAEAACABAAAAAQAAAAEAAAABAAAAAQAAAAEAAIABAADAAQAAAAEAAAABAAAgAQAAYAEAAAABAAAAAQAAIAEAAAA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AIAAAACA/YAAgAAAAIAAAP8AAoABAAAA/4AAAP+A/4AAgAAAAIAAAP8AA4AAAP8AAAAAgAAAAIAAAP+AAAD/gAAA/4AAAP+AAAD/gAAA/4AAAACAAAAAgAAAAIAAAACAAAAAgAAAAAAAAP+AAAD/gAAAAAAAAP8AAAAAgAAAAAAAAP+AAAD/gAAAAAAAAwCAAIAEAAQAABcAHQAjAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAIAAAAAgAAA/4AAAACAAAAAgAAA/4AAAACAAAD9AAAA/4AAAACAAAD/gAAAAIAAgAAAAIAAAACAAAD/AAAAAQAAAP+AAAAEAAAA/4AAAP8AAAD/gAAAAIAAAP8AAAD/gAAA/4AAAACAAAABAAAAAIAAAAEAAAAAAP+AAAD/gAAAAQD+gP8AAAAAgAAAAIAAAAABAYACgAKABAAAAwAAAQEBAQGAAQAAAP8ABAAAAP6AAAAAAAABAQAAgAMABAAAEwAAAQEBAQEBAQEBAQEBAQEBAQEBAQECAAEAAAD/gAAA/4AAAACAAAAAgAAA/wAAAP+AAAD/gAAAAIAAAACABAAAAP+AAAD/gAAA/oAAAP+AAAD/gAAAAIAAAACAAAABgAAAAIAAAAAAAAEBAACAAwAEAAATAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQAAAACAAAAAgAAA/4AAAP+AAAD/AAAAAIAAAACAAAD/gAAA/4AEAAAA/4AAAP+AAAD+gAAA/4AAAP+AAAAAgAAAAIAAAAGAAAAAgAAAAAAABQCAAYADgAQAAAMABwATABcAGwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAIAAAP+AAYAAgAAA/4D/AAEAAAABAAAA/wAAAP8AAAD/AAAAAQD/gACAAAD/gAGAAIAAAP+ABAAAAP+AAAAAgAAA/4AAAAAAAAD/gAAA/4AAAP+AAAAAgAAAAIAAAP8AAAD/gAAAAIAAAP+AAAAAAAABAQAAgAOAAwAACwAAAQEBAQEBAQEBAQEBAgAAgAAAAQAAAP8AAAD/gAAA/wAAAAEAAwAAAP8AAAD/gAAA/wAAAAEAAAAAgAAAAAAAAQCAAAACAAGAAAcAAAEBAQEBAQEBAQABAAAA/4AAAP8AAAAAgAGAAAD/AAAA/4AAAACAAAAAAAABAIABgAOAAgAAAwAAAQEBAQCAAwAAAP0AAgAAAP+AAAAAAAABAQAAgAIAAYAAAwAAAQEBAQEAAQAAAP8AAYAAAP8AAAAAAAABAIAAgAQAA4AAFwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAwABAAAA/4AAAP+AAAD/gAAA/4AAAP+AAAD/AAAAAIAAAACAAAAAgAAAAIAAAACAA4AAAP+AAAD/gAAA/4AAAP+AAAD/gAAA/4AAAACAAAAAgAAAAIAAAACAAAAAgAAAAAAAAwCAAIADgAQAAAsAEQAXAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAIAAAAAgAAA/4AAAP4AAAD/gAAAAIAAgAAAAIAAAACAAAD/gAAA/4AAAAEAAAAEAAAA/4AAAP2AAAD/gAAAAIAAAAKAAAAAAP8AAAAAgAAAAID/AP+AAAD/AAAAAYAAAAABAIAAgAOABAAADQAAAQEBAQEBAQEBAQEBAQEBgAEAAAABAAAA/QAAAAEAAAD/AAAAAIAAAACABAAAAP0AAAD/gAAAAIAAAAGAAAAAgAAAAIAAAAABAIAAgAOABAAAGwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAgAAAACAAAD/gAAA/4AAAP+AAAABgAAA/QAAAACAAAAAgAAAAIAAAACAAAD/AAAA/wAAAACABAAAAP+AAAD/AAAA/4AAAP+AAAD/gAAA/4AAAACAAAAAgAAAAIAAAACAAAABAAAA/wAAAAEAAAAAAAABAIAAgAOABAAAGwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAgAAAACAAAD/gAAAAIAAAP+AAAD+AAAA/4AAAAEAAAABAAAA/wAAAAEAAAD/AAAA/wAAAACABAAAAP+AAAD/AAAA/4AAAP8AAAD/gAAAAIAAAACAAAD/gAAAAQAAAACAAAABAAAA/4AAAACAAAAAAAABAIAAgAOABAAAEQAAAQEBAQEBAQEBAQEBAQEBAQEBAYABAAAA/4AAAP+AAAABAAAAAQAAAP8AAAD+AAAAAIAAAACABAAAAP+AAAD/gAAA/wAAAAEAAAD9gAAAAQAAAAGAAAAAgAAAAAEAgACAA4AEAAATAAABAQEBAQEBAQEBAQEBAQEBAQEBAQCAAwAAAP4AAAABgAAAAIAAAP+AAAD+AAAA/4AAAAEAAAABAAAA/gAEAAAA/4AAAP8AAAD/gAAA/wAAAP+AAAAAgAAAAIAAAP+AAAABAAAAAAAAAgCAAIADgAQAABMAFwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQACAAAAAIAAAP8AAAD/AAAAAYAAAACAAAD/gAAA/gAAAP+AAAAAgACAAAABAAAABAAAAP+AAAD/gAAAAIAAAP8AAAD/gAAA/wAAAP+AAAAAgAAAAoAAAP6A/wAAAAEAAAEAgACAA4AEAAAPAAABAQEBAQEBAQEBAQEBAQEBAIADAAAA/4AAAP+AAAD/AAAAAIAAAACAAAD+gAAA/4AEAAAA/oAAAP+AAAD+gAAAAYAAAACAAAABAAAA/4AAAAAAAAMAgACAA4AEAAATABcAGwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAgAAAACAAAD/gAAAAIAAAP+AAAD+AAAA/4AAAACAAAD/gAAAAIAAgAAAAQAAAP8AAAABAAAABAAAAP+AAAD/AAAA/4AAAP8AAAD/gAAAAIAAAAEAAAAAgAAAAQAAAAAA/wAAAAEA/oD/AAAAAQAAAAACAIAAgAOABAAACwAPAAABAQEBAQEBAQEBAQEBAQEBAQACAAAAAIAAAP8AAAD+gAAA/4AAAACAAIAAAAEAAAAEAAAA/4AAAP0AAAABAAAAAIAAAAGAAAAAAP6AAAABgAACAQABAAIAA4AAAwAHAAABAQEBAQEBAQEAAQAAAP8AAAABAAAA/wADgAAA/wAAAP+AAAD/AAAAAAIAgACAAgADgAADAAsAAAEBAQEBAQEBAQEBAQEAAQAAAP8AAAABAAAA/4AAAP8AAAAAgAOAAAD/AAAA/4AAAP8AAAD/gAAAAIAAAAABAQAAgAOABAAAGwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQKAAQAAAP+AAAD/gAAA/4AAAACAAAAAgAAAAIAAAP8AAAD/gAAA/4AAAP+AAAAAgAAAAIAAAACABAAAAP+AAAD/gAAA/4AAAP+AAAD/gAAA/4AAAP+AAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAAAACAIABgAOAAwAAAwAHAAABAQEBAQEBAQCAAwAAAP0AAAADAAAA/QADAAAA/4AAAP+AAAD/gAAAAAEAgACAAwAEAAAbAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAIABAAAAAIAAAACAAAAAgAAA/4AAAP+AAAD/gAAA/wAAAACAAAAAgAAAAIAAAP+AAAD/gAAA/4AEAAAA/4AAAP+AAAD/gAAA/4AAAP+AAAD/gAAA/4AAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAAAAAAIAgACAA4AEAAATABcAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAgAAAACAAAD/gAAA/4AAAP8AAAAAgAAAAIAAAP8AAAD/AAAAAIAAgAEAAAD/AAQAAAD/gAAA/4AAAP+AAAD/gAAAAIAAAACAAAAAgAAA/4AAAACAAAD+AAAA/wAAAAACAIAAgAOABAAAEQAVAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQACAAAAAIAAAP6AAAAAgAAA/wAAAAGAAAD+AAAA/4AAAACAAgAAgAAA/4AEAAAA/4AAAP6AAAABAAAAAIAAAP2AAAD/gAAAAIAAAAKAAAD+AAAA/4AAAAAAAAIAgACAA4AEAAAPABMAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAYABAAAAAIAAAACAAAD/AAAA/wAAAP8AAAAAgAAAAIAAAAAAAQAAAAQAAAD/gAAA/4AAAP2AAAABAAAA/wAAAAKAAAAAgAAA/4D/AAAAAQAAAwCAAIADgAQAAAsADwATAAABAQEBAQEBAQEBAQEBAQEBAQEBAQCAAoAAAACAAAD/gAAAAIAAAP+AAAD9gAEAAAABAAAA/wAAAAEAAAAEAAAA/4AAAP8AAAD/gAAA/wAAAP+AAAADAP8AAAABAP6A/wAAAAEAAAAAAQCAAIADgAQAABMAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQACAAAAAIAAAP8AAAD/AAAAAQAAAAEAAAD/gAAA/gAAAP+AAAAAgAQAAAD/gAAA/4AAAACAAAD9gAAAAIAAAP+AAAD/gAAAAIAAAAKAAAAAAAACAIAAgAOABAAACwATAAABAQEBAQEBAQEBAQEBAQEBAQEBAQCAAgAAAACAAAAAgAAA/4AAAP+AAAD+AAEAAAAAgAAAAIAAAP+AAAAEAAAA/4AAAP+AAAD+gAAA/4AAAP+AAAADAP2AAAAAgAAAAYAAAACAAAEAgACAA4AEAAAXAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAIAAAAAgAAA/wAAAP8AAAABAAAA/wAAAAEAAAABAAAA/4AAAP4AAAD/gAAAAIAEAAAA/4AAAP+AAAAAgAAA/wAAAP+AAAD/AAAAAIAAAP+AAAD/gAAAAIAAAAKAAAAAAAABAIAAgAOABAAACQAAAQEBAQEBAQEBAQCAAwAAAP4AAAABAAAA/wAAAP8ABAAAAP+AAAD/AAAA/4AAAP6AAAAAAQCAAIADgAQAABUAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAIAAAAAgAAA/wAAAP8AAAABAAAA/4AAAAGAAAD/gAAA/gAAAP+AAAAAgAQAAAD/gAAA/4AAAACAAAD9gAAAAQAAAACAAAD+gAAA/4AAAACAAAACgAAAAAEAgACAA4AEAAALAAABAQEBAQEBAQEBAQEAgAEAAAABAAAAAQAAAP8AAAD/AAAA/wAEAAAA/gAAAAIAAAD8gAAAAQAAAP8AAAAAAAABAIAAgAOABAAACwAAAQEBAQEBAQEBAQEBAIADAAAA/wAAAAEAAAD9AAAAAQAAAP8ABAAAAP+AAAD9gAAA/4AAAACAAAACgAAAAAAAAQCAAIAEAAQAAA8AAAEBAQEBAQEBAQEBAQEBAQEBAAMAAAD/gAAA/4AAAP4AAAD/gAAAAQAAAAEAAAD+gAQAAAD/gAAA/YAAAP+AAAAAgAAAAQAAAP8AAAACgAAAAAAAAQCAAIADgAQAABsAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAgAEAAAAAgAAAAIAAAAEAAAD/gAAA/4AAAP+AAAAAgAAAAIAAAACAAAD/AAAA/4AAAP+AAAD/AAQAAAD/AAAAAIAAAACAAAD/gAAA/4AAAP+AAAD/gAAA/4AAAP+AAAD/gAAAAIAAAACAAAD/AAAAAAAAAQCAAIADgAQAAAUAAAEBAQEBAQCAAQAAAAIAAAD9AAQAAAD9AAAA/4AAAAABAIAAgAQABAAAEwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEAgAEAAAAAgAAAAIAAAACAAAABAAAA/wAAAP+AAAD/gAAA/4AAAP8ABAAAAP+AAAD/gAAAAIAAAACAAAD8gAAAAgAAAP+AAAAAgAAA/gAAAAAAAAEAgACABAAEAAATAAABAQEBAQEBAQEBAQEBAQEBAQEBAQCAAQAAAACAAAAAgAAAAIAAAAEAAAD/AAAA/4AAAP+AAAD/gAAA/wAEAAAA/4AAAP+AAAD/gAAAAYAAAPyAAAABAAAAAIAAAACAAAD+AAAAAAAAAgCAAIADgAQAAAsADwAAAQEBAQEBAQEBAQEBAQEBAQEAAgAAAACAAAD/gAAA/gAAAP+AAAAAgACAAAABAAAABAAAAP+AAAD9gAAA/4AAAACAAAACgAAAAAD9gAAAAoAAAgCAAIADgAQAAAkADQAAAQEBAQEBAQEBAQEBAQEAgAKAAAAAgAAA/4AAAP6AAAD/AAEAAAABAAAABAAAAP+AAAD+gAAA/4AAAP8AAAADAP6AAAABgAAAAAIAgACABAAEAAAPABcAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAgAAAACAAAAAgAAA/4AAAP+AAAD+AAAA/4AAAACAAIAAAAEAAAD/gAAAAIAAAAQAAAD/gAAA/gAAAP8AAAAAgAAA/4AAAACAAAACgAAAAAD9gAAAAIAAAACAAAABgAACAIAAgAOABAAAEwAXAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAgAKAAAAAgAAA/4AAAP+AAAAAgAAAAIAAAP8AAAD/gAAA/4AAAP8AAQAAAAEAAAAEAAAA/4AAAP8AAAD/gAAA/4AAAP+AAAD/gAAAAIAAAACAAAD/AAAAAwD/AAAAAQAAAQCAAIADgAQAABsAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAIAAAAAgAAA/wAAAP8AAAABgAAAAIAAAP+AAAD+AAAA/4AAAAEAAAABAAAA/oAAAP+AAAAAgAQAAAD/gAAA/4AAAACAAAD/AAAA/4AAAP8AAAD/gAAAAIAAAACAAAD/gAAAAQAAAACAAAABAAAAAAAAAQCAAIADgAQAAAcAAAEBAQEBAQEBAIADAAAA/wAAAP8AAAD/AAQAAAD/gAAA/QAAAAMAAAAAAAABAIAAgAOABAAACwAAAQEBAQEBAQEBAQEBAIABAAAAAQAAAAEAAAD/gAAA/gAAAP+ABAAAAP0AAAADAAAA/QAAAP+AAAAAgAAAAAAAAQCAAIADgAQAAA8AAAEBAQEBAQEBAQEBAQEBAQEAgAEAAAABAAAAAQAAAP+AAAD/gAAA/wAAAP+AAAD/gAQAAAD+AAAAAgAAAP4AAAD/AAAA/4AAAACAAAABAAAAAAAAAQCAAIAEAAQAABMAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAIABAAAAAIAAAACAAAAAgAAAAQAAAP8AAAD/gAAA/4AAAP+AAAD/AAQAAAD+AAAAAIAAAP+AAAACAAAA/IAAAACAAAAAgAAA/4AAAP+AAAAAAAABAIAAgAOABAAAGwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQCAAQAAAAEAAAABAAAA/4AAAP+AAAAAgAAAAIAAAP8AAAD/AAAA/wAAAACAAAAAgAAA/4AAAP+ABAAAAP8AAAABAAAA/wAAAP+AAAD/gAAA/4AAAP8AAAABAAAA/wAAAAEAAAAAgAAAAIAAAACAAAAAAAABAIAAgAOABAAADwAAAQEBAQEBAQEBAQEBAQEBAQCAAQAAAAEAAAABAAAA/4AAAP+AAAD/AAAA/4AAAP+ABAAAAP6AAAABgAAA/oAAAP+AAAD+gAAAAYAAAACAAAAAAAABAIAAgAOABAAAFwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAIADAAAA/4AAAP+AAAD/gAAA/4AAAAIAAAD9AAAAAIAAAACAAAAAgAAAAIAAAP4ABAAAAP8AAAD/gAAA/4AAAP+AAAD/gAAA/4AAAAEAAAAAgAAAAIAAAACAAAAAgAAAAAAAAQEAAIADAAQAAAcAAAEBAQEBAQEBAQACAAAA/wAAAAEAAAD+AAQAAAD/gAAA/YAAAP+AAAAAAAABAIAAgAQAA4AAFwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAIABAAAAAIAAAACAAAAAgAAAAIAAAACAAAD/AAAA/4AAAP+AAAD/gAAA/4AAAP+AA4AAAP+AAAD/gAAA/4AAAP+AAAD/gAAA/4AAAACAAAAAgAAAAIAAAACAAAAAgAAAAAAAAQEAAIADAAQAAAcAAAEBAQEBAQEBAQACAAAA/gAAAAEAAAD/AAQAAAD8gAAAAIAAAAKAAAAAAAABAIACAAQABAAAFwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAgAAgAAAAIAAAACAAAAAgAAA/wAAAP+AAAD/gAAA/4AAAP8AAAAAgAAAAIAAAACABAAAAP+AAAD/gAAA/4AAAP+AAAAAgAAAAIAAAP+AAAD/gAAAAIAAAACAAAAAgAAAAAAAAQCAAIADgAEAAAMAAAEBAQEAgAMAAAD9AAEAAAD/gAAAAAAAAQEAAoACgAQAAAkAAAEBAQEBAQEBAQEBAAEAAAAAgAAA/4AAAP+AAAD/gAQAAAD/gAAA/wAAAACAAAAAgAAAAAEAgACAA4ADAAAPAAABAQEBAQEBAQEBAQEBAQEBAQACgAAA/4AAAP+AAAD/AAAAAQAAAP6AAAD/gAAAAIADAAAA/YAAAACAAAABgAAA/oAAAP+AAAAAgAAAAYAAAAAAAAIAgACAA4AEAAAJAA0AAAEBAQEBAQEBAQEBAQEBAIABAAAAAYAAAACAAAD/gAAA/YABAAAAAQAAAAQAAAD/AAAA/4AAAP6AAAD/gAAAAgD+gAAAAYAAAAABAIAAgAOAAwAAEwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAIAAAAAgAAA/wAAAP8AAAABAAAAAQAAAP+AAAD+AAAA/4AAAACAAwAAAP+AAAD/gAAAAIAAAP6AAAAAgAAA/4AAAP+AAAAAgAAAAYAAAAAAAAIAgACAA4AEAAAJAA0AAAEBAQEBAQEBAQEBAQEBAoABAAAA/YAAAP+AAAAAgAAAAYD/AAAAAQAAAAQAAAD8gAAAAIAAAAGAAAAAgAAA/4D+gAAAAYAAAAACAIAAgAOAAwAADQARAAABAQEBAQEBAQEBAQEBAQEBAQEBAAIAAAAAgAAA/gAAAAGAAAD+AAAA/4AAAACAAIAAAAEAAAADAAAA/4AAAP8AAAD/gAAA/4AAAACAAAABgAAAAAD/gAAAAIAAAAABAQAAgAOAA4AACwAAAQEBAQEBAQEBAQEBAYACAAAA/oAAAAEAAAD/AAAA/wAAAACAA4AAAP+AAAD/AAAA/4AAAP8AAAACgAAAAAAAAgCAAIADgAOAAA8AEwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAIAAAAAgAAA/4AAAP4AAAABgAAA/oAAAP+AAAAAgACAAAABAAAAA4AAAP+AAAD+AAAA/4AAAACAAAAAgAAAAIAAAAEAAAAAAP8AAAABAAABAIAAgAOABAAACwAAAQEBAQEBAQEBAQEBAIABAAAAAYAAAACAAAD/AAAA/wAAAP8ABAAAAP8AAAD/gAAA/gAAAAIAAAD+AAAAAAAAAgGAAIACgAQAAAMABwAAAQEBAQEBAQEBgAEAAAD/AAAAAQAAAP8ABAAAAP+AAAD/gAAA/YAAAAACAIAAgAOABAAAAwAPAAABAQEBAQEBAQEBAQEBAQEBAoABAAAA/wAAAAEAAAD/gAAA/gAAAP+AAAABAAAAAQAEAAAA/4AAAP+AAAD+AAAA/4AAAACAAAABAAAA/wAAAAABAIAAgAOAA4AAEwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEAgAEAAAAAgAAAAQAAAP+AAAAAgAAAAIAAAP8AAAD/gAAA/4AAAP8AA4AAAP8AAAAAgAAA/4AAAP8AAAD/gAAA/4AAAACAAAAAgAAA/wAAAAAAAAEBgACAAwAEAAAHAAABAQEBAQEBAQGAAQAAAACAAAD/AAAA/4AEAAAA/QAAAP+AAAAAgAAAAAAAAQCAAIAEAAMAABMAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAAAAAIAAAAEAAAAAgAAA/wAAAP+AAAD/gAAA/4AAAP8AAAAAgAMAAAD/gAAAAIAAAP+AAAD+AAAAAYAAAP+AAAAAgAAA/oAAAAIAAAAAAAABAIAAgAOAAwAADwAAAQEBAQEBAQEBAQEBAQEBAQCAAQAAAACAAAABAAAAAIAAAP8AAAD/gAAA/4AAAP8AAwAAAP+AAAAAgAAA/4AAAP4AAAABgAAA/4AAAP8AAAAAAAACAIAAgAOAAwAACwAPAAABAQEBAQEBAQEBAQEBAQEBAQACAAAAAIAAAP+AAAD+AAAA/4AAAACAAIAAAAEAAAADAAAA/4AAAP6AAAD/gAAAAIAAAAGAAAAAAP6AAAABgAACAIAAgAOAAwAACQANAAABAQEBAQEBAQEBAQEBAQCAAoAAAACAAAD/gAAA/oAAAP8AAQAAAAEAAAADAAAA/4AAAP+AAAD/gAAA/wAAAAIA/4AAAACAAAAAAgCAAIAEAAMAAA0AEQAAAQEBAQEBAQEBAQEBAQEBAQEBAQACgAAAAIAAAP+AAAD/AAAA/oAAAP+AAAAAgACAAAABAAAAAwAAAP6AAAD/gAAA/4AAAAEAAAAAgAAAAIAAAAAA/4AAAACAAAAAAQEAAIADgAMAAAkAAAEBAQEBAQEBAQEBAAIAAAAAgAAA/wAAAP+AAAD/AAMAAAD/gAAA/wAAAAEAAAD+AAAAAAEAgACABAADAAATAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEAAoAAAP6AAAABgAAAAIAAAP+AAAD9AAAAAgAAAP6AAAD/gAAAAIADAAAA/4AAAP+AAAD/gAAA/4AAAP+AAAAAgAAAAIAAAACAAAAAgAAAAAAAAQCAAIADgAOAABMAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAAAAAQAAAP8AAAAAgAAAAQAAAP+AAAD+gAAA/4AAAP+AAAAAgAOAAAD/gAAA/4AAAP6AAAAAgAAA/4AAAP+AAAAAgAAAAYAAAACAAAAAAAABAIAAgAOAAwAADwAAAQEBAQEBAQEBAQEBAQEBAQCAAQAAAACAAAAAgAAAAQAAAP+AAAD/gAAA/oAAAP+AAwAAAP4AAAAAgAAAAYAAAP2AAAAAgAAA/4AAAACAAAAAAAABAIAAgAOAAwAADwAAAQEBAQEBAQEBAQEBAQEBAQCAAQAAAAEAAAABAAAA/4AAAP+AAAD/AAAA/4AAAP+AAwAAAP6AAAABgAAA/oAAAP+AAAD/gAAAAIAAAACAAAAAAAABAIAAgAQAAwAAEwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEAgAEAAAAAgAAAAIAAAACAAAABAAAA/4AAAP8AAAD/gAAA/wAAAP+AAwAAAP6AAAAAgAAA/4AAAAGAAAD+AAAA/4AAAACAAAD/gAAAAIAAAAAAAAEAgACAA4ADAAAbAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAIABAAAAAQAAAAEAAAD/gAAA/4AAAACAAAAAgAAA/wAAAP8AAAD/AAAAAIAAAACAAAD/gAAA/4ADAAAA/4AAAACAAAD/gAAA/4AAAP+AAAD/gAAA/4AAAACAAAD/gAAAAIAAAACAAAAAgAAAAIAAAAAAAAEAgACAA4ADAAAPAAABAQEBAQEBAQEBAQEBAQEBAIABAAAAAQAAAAEAAAD/gAAA/gAAAAGAAAD+gAAA/4ADAAAA/wAAAAEAAAD+AAAA/4AAAACAAAAAgAAAAIAAAAAAAAEAgACAA4ADAAATAAABAQEBAQEBAQEBAQEBAQEBAQEBAQCAAwAAAP+AAAD/gAAA/4AAAAGAAAD9AAAAAIAAAACAAAAAgAAA/oADAAAA/4AAAP+AAAD/gAAA/4AAAP+AAAAAgAAAAIAAAACAAAAAgAAAAAAAAQCAAIADAAQAABMAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAYABgAAA/wAAAP+AAAAAgAAAAQAAAP6AAAD/gAAA/4AAAACAAAAAgAQAAAD/gAAA/wAAAP+AAAD/AAAA/4AAAACAAAABAAAAAIAAAAEAAAAAAAABAYAAgAKABAAAAwAAAQEBAQGAAQAAAP8ABAAAAPyAAAAAAAABAQAAgAOABAAAEwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAGAAAAAgAAAAIAAAP+AAAD/gAAA/oAAAAEAAAAAgAAA/4AAAP8ABAAAAP+AAAD/AAAA/4AAAP8AAAD/gAAAAIAAAAEAAAAAgAAAAQAAAAAAAAEAgAGAA4ADAAAPAAABAQEBAQEBAQEBAQEBAQEBAQABAAAAAQAAAACAAAD/gAAA/wAAAP8AAAD/gAAAAIADAAAA/4AAAACAAAD/AAAA/4AAAACAAAD/gAAAAQAAAAAAAAEAAAAABAAEAAATAAABAQEBAQEBAQEBAQEBAQEBAQEBAQAAAYAAAAEAAAAAgAAAAIAAAACAAAD/AAAA/4AAAP+AAAD/AAAA/wAEAAAA/4AAAP+AAAD/gAAA/wAAAP6AAAABAAAAAQAAAACAAAAAgAAAAAAAAQIAAAAEAAQAAAMAAAEBAQECAAIAAAD+AAQAAAD8AAAAAAAAAgCAAIADgAQAABcAGwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQGAAYAAAP8AAAABAAAA/4AAAP+AAAABgAAA/QAAAACAAAAAgAAA/wAAAACAAAAAgAGAAIAAAP+ABAAAAP+AAAD/AAAA/4AAAP+AAAD/gAAA/4AAAACAAAAAgAAAAIAAAACAAAABAAAAAAAAAP+AAAAAAQCAAIADgAQAABsAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAgAEAAAABAAAAAQAAAP+AAAAAgAAA/wAAAAEAAAD/AAAA/wAAAP8AAAABAAAA/wAAAACAAAD/gAQAAAD+gAAAAYAAAP8AAAD/gAAA/4AAAP+AAAD/gAAA/4AAAACAAAAAgAAAAIAAAACAAAAAgAAAAAAABACAAIAEAAQAABcAGwAfACMAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAoAAAP4AAAABgAAAAIAAAACAAAD/gAAA/YAAAAIAAAD+gAAA/4AAAP+AAAAAgAEAAAAAgAAAAQAAgAAA/4D9AACAAAD/gAQAAAD/gAAA/4AAAP+AAAD/gAAA/wAAAP+AAAAAgAAAAIAAAACAAAAAgAAAAQAAAP8A/4AAAACAAQAAAP+AAAD+gAAA/4AAAAAEAIAAgAQAA4AAAwAHAAsADwAAAQEBAQEBAQEBAQEBAQEBAQCAAIAAAP+AAQAAgAAA/4ABAACAAAD/gAEAAIAAAP+AA4AAAP0AAAADAAAA/QAAAAMAAAD9AAAAAwAAAP0AAAAAAQIAAAAEAAQAAAkAAAEBAQEBAQEBAQEDgACAAAD+AAAAAIAAAACAAAAAgAQAAAD8AAAAAQAAAAEAAAABAAAAAAgAAAAABAAEAAADAAcACwAPABMAFwAbAB8AAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAABAAAA/wACAAEAAAD/AP8AAQAAAP8AAgABAAAA/wD9AAEAAAD/AAIAAQAAAP8A/wABAAAA/wACAAEAAAD/AAQAAAD/AAAAAQAAAP8AAAAAAAAA/wAAAAEAAAD/AAAAAAAAAP8AAAABAAAA/wAAAAAAAAD/AAAAAQAAAP8AAAAAAQIAAAADAAQAAAMAAAEBAQECAAEAAAD/AAQAAAD8AAAAAAAAAgGAAIACgAQAAAMABwAAAQEBAQEBAQEBgAEAAAD/AAAAAQAAAP8ABAAAAP6AAAD/gAAA/oAAAAABAgAAAAQAAgAAAwAAAQEBAQIAAgAAAP4AAgAAAP4AAAAAAAAEAIAAAAQABAAAAwAHAAsADwAAAQEBAQEBAQEBAQEBAQEBAQCAAIAAAP+AAQAAgAAA/4ABAACAAAD/gAEAAIAAAP+ABAAAAPwAAAAEAAAA/AAAAAQAAAD8AAAABAAAAPwAAAAAAQCAAIADgAOAABMAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAoABAAAA/oAAAP+AAAD/gAAA/4AAAACAAAAAgAAAAIAAAAEAAAD/gAOAAAD+AAAA/wAAAACAAAAAgAAAAIAAAACAAAAAgAAA/wAAAAEAAAAAAAABAAAAAAQABAAACwAAAQEBAQEBAQEBAQEBAAAEAAAA/gAAAP+AAAD/gAAA/4AAAP+ABAAAAPwAAAAAgAAAAIAAAACAAAAAgAAAAAAAAQCAAIAEAAOAABsAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAgACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAD/gAAA/4AAAP+AAAD/gAAA/4AAAP+AAAD/gAOAAAD/gAAAAIAAAP8AAAABAAAA/oAAAAGAAAD9AAAAAIAAAP+AAAABAAAA/wAAAAGAAAD+gAAAAAAAAQAAAAACAAQAAAkAAAEBAQEBAQEBAQEAAACAAAAAgAAAAIAAAACAAAD+AAQAAAD/AAAA/wAAAP8AAAD/AAAAAAEAAAAABAAEAAATAAABAQEBAQEBAQEBAQEBAQEBAQEBAQKAAYAAAP8AAAD/AAAA/4AAAP+AAAD/AAAAAIAAAACAAAAAgAAAAQAEAAAA/wAAAP+AAAD/gAAA/wAAAP8AAAABgAAAAQAAAACAAAAAgAAAAAAAAQAAAAAEAAIAAA8AAAEBAQEBAQEBAQEBAQEBAQEBgAEAAAAAgAAAAIAAAACAAAD8AAAAAIAAAACAAAAAgAIAAAD/gAAA/4AAAP+AAAD/gAAAAIAAAACAAAAAgAAAAAAAAgAAAAAEAAQAAAMABwAAAQEBAQEBAQEAAAIAAAD+AAIAAgAAAP4ABAAAAP4AAAAAAAAA/gAAAAAEAAACAAQABAAAAwAHAAsADwAAAQEBAQEBAQEBAQEBAQEBAQAAAQAAAP8AAgABAAAA/wD/AAEAAAD/AAIAAQAAAP8ABAAAAP8AAAABAAAA/wAAAAAAAAD/AAAAAQAAAP8AAAAABAIAAAAEAAQAAAMABwALAA8AAAEBAQEBAQEBAQEBAQEBAQECAAEAAAD/AAEAAQAAAP8A/wABAAAA/wABAAEAAAD/AAQAAAD/AAAAAAAAAP8AAAAAAAAA/wAAAAAAAAD/AAAAAAEDAAAABAAEAAADAAABAQEBAwABAAAA/wAEAAAA/AAAAAAAAAEAAAAABAAEAAAFAAABAQEBAQEAAAQAAAD9AAAA/wAEAAAA/wAAAP0AAAAAAQAAAAABAAQAAAMAAAEBAQEAAAEAAAD/AAQAAAD8AAAAAAAAAwCAAIADAAOAAAMABwALAAABAQEBAQEBAQEBAQEAgACAAAD/gAEAAIAAAP+AAQAAgAAA/4ADgAAA/QAAAAMAAAD9AAAAAwAAAP0AAAAAAAABAYABgAQABAAACwAAAQEBAQEBAQEBAQEBAYABAAAAAIAAAAEAAAD+gAAA/4AAAP+ABAAAAP8AAAD/gAAA/wAAAACAAAAAgAAAAAAAAQAAAYACgAQAAAsAAAEBAQEBAQEBAQEBAQGAAQAAAP+AAAD/gAAA/oAAAAEAAAAAgAQAAAD+gAAA/4AAAP+AAAABAAAAAIAAAAAAAAEAAAAABAAEAAAJAAABAQEBAQEBAQEBAwABAAAA/AAAAAEAAAABAAAAAQAEAAAA/AAAAAKAAAAAgAAAAIAAAAABAIAAgAMABAAACwAAAQEBAQEBAQEBAQEBAgABAAAA/4AAAP6AAAD/gAAAAIAAAAEABAAAAP0AAAD/gAAAAIAAAAEAAAAAgAAAAAAAAQAAAAAEAAQAAAUAAAEBAQEBAQAAAQAAAAMAAAD8AAQAAAD9AAAA/wAAAAACAIAAgAMAAoAACwAPAAABAQEBAQEBAQEBAQEBAQEBAQABgAAAAIAAAP+AAAD+gAAAAQAAAP8A/4AAgAAA/4ACgAAA/4AAAP8AAAD/gAAAAIAAAAEAAAAAAAAA/wAAAAACAIAAgAMABAAACwAPAAABAQEBAQEBAQEBAQEBAQEBAgABAAAA/4AAAP6AAAABAAAA/wAAAAEA/oAAgAAA/4AEAAAA/QAAAP+AAAAAgAAAAQAAAACAAAD/gAAA/wAAAAABAIAAgAQABAAADQAAAQEBAQEBAQEBAQEBAQECAAIAAAD/AAAA/4AAAP6AAAD/gAAAAIAAAAEABAAAAP+AAAD9gAAA/4AAAACAAAABAAAAAIAAAAACAAAAAAQABAAAAwAHAAABAQEBAQEBAQAABAAAAPwAAQAAAAIAAAAEAAAA/AAAAAMA/gAAAAIAAAEAgACABAAEAAARAAABAQEBAQEBAQEBAQEBAQEBAQECAAIAAAD/AAAAAQAAAP8AAAD/gAAA/oAAAP+AAAAAgAAAAQAEAAAA/4AAAP+AAAD/gAAA/oAAAP+AAAAAgAAAAQAAAACAAAAAAQAAAAACgAKAAAsAAAEBAQEBAQEBAQEBAQAAAYAAAACAAAAAgAAA/wAAAP+AAAD/AAKAAAD/gAAA/4AAAP6AAAABAAAAAIAAAAAAAAEAAAAABAAEAAAFAAABAQEBAQEAAAQAAAD/AAAA/QAEAAAA/AAAAAMAAAAAAQCAAIAEAAQAABUAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQECAAIAAAD/AAAAAQAAAP8AAAABAAAA/wAAAP+AAAD+gAAA/4AAAACAAAABAAQAAAD/gAAA/4AAAP+AAAD/gAAA/4AAAP+AAAD/gAAAAIAAAAEAAAAAgAAAAAEBgAAABAACgAALAAABAQEBAQEBAQEBAQECgAGAAAD/AAAA/4AAAP8AAAAAgAAAAIACgAAA/wAAAP+AAAD/AAAAAYAAAACAAAAAAAABAAAAAAQABAAAEQAAAQEBAQEBAQEBAQEBAQEBAQEBAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAPwABAAAAP+AAAD/gAAA/4AAAP+AAAD/gAAA/4AAAP+AAAD/gAAAAAEAAAAABAABAAADAAABAQEBAAAEAAAA/AABAAAA/wAAAAAAAAEAAAAABAAEAAARAAABAQEBAQEBAQEBAQEBAQEBAQEDgACAAAD8AAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAEAAAA/AAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAAQAAAgAEAAQAAAMAAAEBAQEAAAQAAAD8AAQAAAD+AAAAAAAAAgCAAIACAAOAAAMABwAAAQEBAQEBAQEAgACAAAD/gAEAAIAAAP+AA4AAAP0AAAADAAAA/QAAAAAEAIAAgAQABAAAAwAHAAsADwAAAQEBAQEBAQEBAQEBAQEBAQCAA4AAAPyAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAABAAAAPyAAAADAP+AAAAAgP8A/4AAAACA/wD/gAAAAIAAAQAAAAAEAAQAAAUAAAEBAQEBAQMAAQAAAPwAAAADAAQAAAD8AAAAAQAAAAACAIAAgAQABAAAAwAHAAABAQEBAQEBAQCAA4AAAPyAAYAAAACAAAAEAAAA/IAAAAIA/4AAAACAAAMAgACABAAEAAADAAcACwAAAQEBAQEBAQEBAQEBAIADgAAA/IAAgAAAAIAAAAGAAAAAgAAABAAAAPyAAAADAP+AAAAAgP4A/4AAAACAAAAABAAAAIAEAAQAAAMABwALAA8AAAEBAQEBAQEBAQEBAQEBAQEAAAQAAAD8AAAABAAAAPwAAAAEAAAA/AAAAAQAAAD8AAQAAAD/gAAA/4AAAP+AAAD/gAAA/4AAAP+AAAD/gAAAAAYAgACABAAEAAADAAcACwAPABMAFwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAIADgAAA/IAAgAAAAIAAAAGAAAAAgAAA/oAAAACAAAD+gAAAAIAAAAGAAAAAgAAABAAAAPyAAAADAP+AAAAAgAAA/4AAAACA/wD/gAAAAID/AP+AAAAAgAAA/4AAAACAAAEAgACAAQADgAADAAABAQEBAIAAgAAA/4ADgAAA/QAAAAAAAAUAgACABAAEAAADAAcACwAPABMAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAIADgAAA/IAAgAAAAIAAAAGAAAAAgAAA/YAAAACAAAABgAAAAIAAAAQAAAD8gAAAAwD/gAAAAIAAAP+AAAAAgP4A/4AAAACAAAD/gAAAAIAAAAABAAADAAQABAAAAwAAAQEBAQAABAAAAPwABAAAAP8AAAAAAAAHAIAAgAQABAAAAwAHAAsADwATABcAGwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQCAA4AAAPyAAIAAAACAAAABgAAAAIAAAP2AAAAAgAAAAYAAAACAAAD9gAAAAIAAAAGAAAAAgAAABAAAAPyAAAADAP+AAAAAgAAA/4AAAACA/wD/gAAAAIAAAP+AAAAAgP8A/4AAAACAAAD/gAAAAIAAAAAEAAAAAAQAAgAAAwAHAAsADwAAAQEBAQEBAQEBAQEBAQEBAQAAAQAAAP8AAgABAAAA/wD/AAEAAAD/AAIAAQAAAP8AAgAAAP8AAAABAAAA/wAAAAAAAAD/AAAAAQAAAP8AAAAAAQAAAAAEAAQAAAkAAAEBAQEBAQEBAQEAAAEAAAABAAAAAQAAAAEAAAD8AAQAAAD/gAAA/4AAAP+AAAD9gAAAAAEBAAAAAgAEAAADAAABAQEBAQABAAAA/wAEAAAA/AAAAAAAAAEAAAAABAAEAAALAAABAQEBAQEBAQEBAQECgAGAAAD8AAAAAIAAAACAAAAAgAAAAQAEAAAA/AAAAAGAAAABAAAAAIAAAACAAAAAAAABAAABAAQAAgAAAwAAAQEBAQAABAAAAPwAAgAAAP8AAAAAAAABAAAAAAQABAAACwAAAQEBAQEBAQEBAQEBAgACAAAA/AAAAACAAAAAgAAAAIAAAACABAAAAPwAAAACAAAAAIAAAACAAAAAgAAAAAAAAQAAAAAEAAIAAAkAAAEBAQEBAQEBAQEDAAEAAAD8AAAAAQAAAAEAAAABAAIAAAD+AAAAAIAAAACAAAAAgAAAAAEAAAAABAAEAAALAAABAQEBAQEBAQEBAQEAAAIAAAAAgAAAAIAAAACAAAAAgAAA/AAEAAAA/4AAAP+AAAD/gAAA/4AAAP4AAAAAAAADAAAAAAQABAAAGwAnADMAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAAEAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAD/AAAA/4AAAP+AAAD/gAAA/4AAAP+AAAD/gAIAAYAAAACAAAD/gAAA/4AAAP+AAAD/gP4AAIAAAACAAAAAgAAAAIAAAP6AAAD/gAQAAAD/gAAA/4AAAP+AAAD/gAAA/4AAAP+AAAD/AAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAQAAAP+AAAD+gAAAAIAAAACAAAAAgAAA/oAAAP+AAAD/gAAA/4AAAP+AAAAAgAAAAAAAAQAAAAAEAAIAAAkAAAEBAQEBAQEBAQEAAAEAAAABAAAAAQAAAAEAAAD8AAIAAAD/gAAA/4AAAP+AAAD/gAAAAAEAAAAABAAEAAALAAABAQEBAQEBAQEBAQEAAAGAAAABAAAAAIAAAACAAAAAgAAA/AAEAAAA/4AAAP+AAAD/gAAA/wAAAP6AAAAAAAAEAAAAgAQABAAAAwAHAAsADwAAAQEBAQEBAQEBAQEBAQEBAQCAAYAAAP6AAgABgAAA/oD9gAGAAAD+gAIAAYAAAP6ABAAAAP6AAAABgAAA/oAAAP+AAAD+gAAAAYAAAP6AAAAAAQIAAgAEAAQAAAMAAAEBAQECAAIAAAD+AAQAAAD+AAAAAAAABACAAIAEAAQAAAMABwAjACcAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEAAAD/AAGAAQAAAP8A/gAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAA/4AAAP+AAAD/gAAA/4AAAP+AAAD/gAAA/4ABgACAAAD/gAQAAAD/gAAAAIAAAP+AAAAAAAAA/wAAAP+AAAD/gAAAAIAAAACAAAABAAAA/oAAAP+AAAD/gAAA/4AAAACAAAAAgAAAAIAAAAGAAAD/gAAAAAQAAAAABAAEAAADAAcACwAPAAABAQEBAQEBAQEBAQEBAQEBAAAAgAAA/4ADgACAAAD/gPyAAIAAAP+AA4AAgAAA/4AEAAAA/4AAAACAAAD/gAAA/QAAAP+AAAAAgAAA/4AAAAABAAAAAAIAAgAAAwAAAQEBAQAAAgAAAP4AAgAAAP4AAAAAAAAEAAAAAAIABAAAAwAHAAsADwAAAQEBAQEBAQEBAQEBAQEBAQAAAQAAAP8AAQABAAAA/wD/AAEAAAD/AAEAAQAAAP8ABAAAAP8AAAAAAAAA/wAAAAAAAAD/AAAAAAAAAP8AAAAAAQCAAQADgAOAABMAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAYABAAAA/4AAAAGAAAD+gAAAAIAAAP8AAAD/gAAA/4AAAACAAAAAgAOAAAD/gAAA/4AAAP+AAAD/gAAA/4AAAACAAAAAgAAAAIAAAACAAAAAAAABAQABAAOABAAAEwAAAQEBAQEBAQEBAQEBAQEBAQEBAQECAACAAAAAgAAAAIAAAP+AAAD/gAAA/4AAAP+AAAD/gAAAAIAAAACABAAAAP+AAAD/gAAA/wAAAACAAAD+gAAAAYAAAP+AAAABAAAAAIAAAAAAAAEBAAEABAADgAATAAABAQEBAQEBAQEBAQEBAQEBAQEBAQIAAQAAAACAAAAAgAAA/4AAAP+AAAD/AAAAAIAAAP6AAAABgAAA/4ADgAAA/4AAAP+AAAD/gAAA/4AAAP+AAAAAgAAAAIAAAACAAAAAgAAAAAAAAQEAAIADgAOAABMAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAgAAgAAAAIAAAACAAAD/gAAA/4AAAP+AAAD/gAAA/4AAAACAAAAAgAOAAAD+gAAAAIAAAP8AAAD/gAAA/4AAAACAAAAAgAAAAQAAAP+AAAAAAAABAQAAgAOABAAADwAAAQEBAQEBAQEBAQEBAQEBAQIAAIAAAACAAAAAgAAA/4AAAP6AAAD/gAAAAIAAAACABAAAAP8AAAD/AAAA/wAAAP+AAAAAgAAAAQAAAAEAAAAAAAACAIAAgAOAA4AAAwAJAAABAQEBAQEBAQEBAIADAAAA/QAAgAAAAgAAAP8AAAADgAAA/QAAAAKA/gAAAAEAAAABAAAAAAIAgACABAAEAAAbACcAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQECAACAAAAAgAAAAIAAAACAAAD/gAAA/4AAAP+AAAD/gAAA/4AAAP+AAAD/gAAAAIAAAACAAAAAgAAAAAD/gAAAAIAAAACAAAAAgAAA/4AAAAQAAAD/gAAA/4AAAP+AAAD/gAAA/4AAAP+AAAD/gAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAA/4D/gAAA/4AAAP+AAAAAgAAAAIAAAACAAAEAAAIABAADAAADAAABAQEBAAAEAAAA/AADAAAA/wAAAAAAAAEAAAAABAAEAAALAAABAQEBAQEBAQEBAQEAAAQAAAD/gAAA/4AAAP+AAAD/gAAA/gAEAAAA/gAAAP+AAAD/gAAA/4AAAP+AAAAAAAABAAACAAIABAAAAwAAAQEBAQAAAgAAAP4ABAAAAP4AAAAAAAACAQAAgAOAA4AAFwAbAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAYABgAAAAIAAAP8AAAAAgAAAAIAAAP8AAAD/gAAA/wAAAACAAAAAgAAA/wAAAACAAIAAAACAAAADgAAA/wAAAP+AAAD/gAAA/4AAAP+AAAAAgAAA/4AAAACAAAAAgAAAAIAAAACAAAAAgP+AAAAAgAADAAAAAAQABAAACwAnADMAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAgAGAAAD/gAAA/4AAAP+AAAD/gAAAAIACgAEAAAD/gAAA/4AAAP+AAAD/gAAA/4AAAP+AAAD/AAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgACAAIAAAP+AAAD+gAAAAIAAAACAAAAAgAQAAAD/gAAA/4AAAP+AAAD/gAAAAYAAAACAAAD/AAAA/4AAAP+AAAD/gAAA/4AAAP+AAAD/gAAAAQAAAACAAAAAgAAAAIAAAACAAAAAgAAA/oAAAP6AAAD/gAAAAIAAAACAAAAAgAAAAAAAAgCAAIADgAQAAA8AHwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEAAAABAAAAAIAAAP+AAAD/AAAA/wAAAP+AAAAAgAAAAQAAAAEAAAAAgAAA/4AAAP8AAAD/AAAA/4AAAACABAAAAP+AAAAAgAAA/wAAAP+AAAAAgAAA/4AAAAEAAAD+gAAA/4AAAACAAAD/AAAA/4AAAACAAAD/gAAAAQAAAAABAAAAAAQAA4AACwAAAQEBAQEBAQEBAQEBAQACAAAAAIAAAACAAAD8AAAAAIAAAACAA4AAAP+AAAD/gAAA/YAAAAKAAAAAgAAAAAAAAQAAAAACAAQAAA8AAAEBAQEBAQEBAQEBAQEBAQEAAACAAAAAgAAAAIAAAACAAAD/gAAA/4AAAP+AAAD/gAQAAAD/gAAA/4AAAP+AAAD/AAAA/4AAAP+AAAD/gAAAAAAAAQIAAAAEAAQAAA8AAAEBAQEBAQEBAQEBAQEBAQEDgACAAAD/gAAA/4AAAP+AAAD/gAAAAIAAAACAAAAAgAQAAAD8AAAAAIAAAACAAAAAgAAAAQAAAACAAAAAgAAAAAAAAQCAAIAEAAQAABcAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQIAAIAAAACAAAAAgAAAAIAAAP+AAAD/AAAA/4AAAP8AAAD/gAAAAIAAAACAAAAAgAQAAAD/gAAA/4AAAP+AAAD/gAAA/oAAAAEAAAD/AAAAAYAAAACAAAAAgAAAAIAAAAAAACAAAAAABAAEAAADAAcACwAPABMAFwAbAB8AIwAnACsALwAzADcAOwA/AEMARwBLAE8AUwBXAFsAXwBjAGcAawBvAHMAdwB7AH8AAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAAAgAAA/4ABAACAAAD/gAEAAIAAAP+AAQAAgAAA/4D9gACAAAD/gAEAAIAAAP+AAQAAgAAA/4ABAACAAAD/gPyAAIAAAP+AAQAAgAAA/4ABAACAAAD/gAEAAIAAAP+A/YAAgAAA/4ABAACAAAD/gAEAAIAAAP+AAQAAgAAA/4D8gACAAAD/gAEAAIAAAP+AAQAAgAAA/4ABAACAAAD/gP2AAIAAAP+AAQAAgAAA/4ABAACAAAD/gAEAAIAAAP+A/IAAgAAA/4ABAACAAAD/gAEAAIAAAP+AAQAAgAAA/4D9gACAAAD/gAEAAIAAAP+AAQAAgAAA/4ABAACAAAD/gAQAAAD/gAAAAIAAAP+AAAAAgAAA/4AAAACAAAD/gAAAAAAAAP+AAAAAgAAA/4AAAACAAAD/gAAAAIAAAP+AAAAAAAAA/4AAAACAAAD/gAAAAIAAAP+AAAAAgAAA/4AAAAAAAAD/gAAAAIAAAP+AAAAAgAAA/4AAAACAAAD/gAAAAAAAAP+AAAAAgAAA/4AAAACAAAD/gAAAAIAAAP+AAAAAAAAA/4AAAACAAAD/gAAAAIAAAP+AAAAAgAAA/4AAAAAAAAD/gAAAAIAAAP+AAAAAgAAA/4AAAACAAAD/gAAAAAAAAP+AAAAAgAAA/4AAAACAAAD/gAAAAIAAAP+AAAAAAQAAAAAEAAQAAAsAAAEBAQEBAQEBAQEBAQAABAAAAP6AAAD/AAAA/4AAAP+AAAD/gAQAAAD8AAAAAIAAAACAAAAAgAAAAQAAAAAAAAEAAAAABAAEAAALAAABAQEBAQEBAQEBAQEAAAQAAAD/gAAA/4AAAP+AAAD/AAAA/oAEAAAA/oAAAP8AAAD/gAAA/4AAAP+AAAAAAAABAAABgAKABAAADwAAAQEBAQEBAQEBAQEBAQEBAQAAAQAAAACAAAAAgAAAAIAAAP8AAAD/gAAA/4AAAP+ABAAAAP+AAAD/gAAA/4AAAP8AAAAAgAAAAIAAAACAAAAAAAABAAAAAAKABAAADwAAAQEBAQEBAQEBAQEBAQEBAQAAAQAAAACAAAAAgAAAAIAAAP8AAAD/gAAA/4AAAP+ABAAAAP+AAAD/gAAA/4AAAP2AAAACAAAAAIAAAACAAAAAAAABAYAAAAQAAoAABQAAAQEBAQEBAYACgAAA/oAAAP8AAoAAAP8AAAD+gAAAAAEAAAAABAAEAAAJAAABAQEBAQEBAQEBAAACgAAAAIAAAACAAAAAgAAA/AAEAAAA/wAAAP8AAAD/AAAA/wAAAAACAAAAAAQABAAAGwAfAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQGAAQAAAACAAAAAgAAAAIAAAP+AAAD/gAAA/4AAAP8AAAD/gAAA/4AAAP+AAAAAgAAAAIAAAACAAAAAAAEAAAAEAAAA/4AAAP+AAAD/gAAA/wAAAP+AAAD/gAAA/4AAAACAAAAAgAAAAIAAAAEAAAAAgAAAAIAAAP8A/wAAAAEAAAEBgAGABAAEAAAFAAABAQEBAQEBgAEAAAABgAAA/YAEAAAA/oAAAP8AAAAAAQAAAAACgAKAAA8AAAEBAQEBAQEBAQEBAQEBAQEBgAEAAAD/gAAA/4AAAP+AAAD/AAAAAIAAAACAAAAAgAKAAAD/AAAA/4AAAP+AAAD/gAAAAQAAAACAAAAAgAAAAAAAAQGAAAAEAAQAAA8AAAEBAQEBAQEBAQEBAQEBAQEDAAEAAAD/gAAA/4AAAP+AAAD/AAAAAIAAAACAAAAAgAQAAAD/AAAA/4AAAP+AAAD+AAAAAoAAAACAAAAAgAAAAAAAAQGAAAAEAAKAAA8AAAEBAQEBAQEBAQEBAQEBAQEBgAEAAAAAgAAAAIAAAACAAAD/AAAA/4AAAP+AAAD/gAKAAAD/gAAA/4AAAP+AAAD/AAAAAIAAAACAAAAAgAAAAAAAAQGAAYAEAAQAAA8AAAEBAQEBAQEBAQEBAQEBAQEDAAEAAAD/gAAA/4AAAP+AAAD/AAAAAIAAAACAAAAAgAQAAAD/AAAA/4AAAP+AAAD/gAAAAQAAAACAAAAAgAAAAAAAAQAAAAAEAAQAABsAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAAEAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAD/AAAA/4AAAP+AAAD/gAAA/4AAAP+AAAD/gAQAAAD/gAAA/4AAAP+AAAD/gAAA/4AAAP+AAAD/AAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAAAAAQAAAAAEAAQAAB8AAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAABAAAAAIAAAAEAAAAAgAAAAQAAAP+AAAD/gAAA/4AAAP+AAAD/gAAA/4AAAP8AAAAAgAAAAIAAAP+AAAD/gAQAAAD/gAAA/4AAAACAAAAAgAAA/wAAAP+AAAD/gAAA/4AAAP+AAAD/gAAA/4AAAAEAAAAAgAAAAQAAAACAAAAAAAABAAABgAQABAAADwAAAQEBAQEBAQEBAQEBAQEBAQAAAQAAAACAAAAAgAAAAgAAAP2AAAD/gAAA/4AAAP+ABAAAAP+AAAD/gAAA/4AAAP8AAAAAgAAAAIAAAACAAAAAAAABAAABgAQAAoAAAwAAAQEBAQAABAAAAPwAAoAAAP8AAAAAAAABAYAAAAKABAAAAwAAAQEBAQGAAQAAAP8ABAAAAPwAAAAAAAABAYAAAAQABAAAFwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAwABAAAA/4AAAP+AAAAAgAAAAIAAAP8AAAD/gAAA/4AAAP+AAAAAgAAAAIAAAACABAAAAP8AAAD/gAAA/wAAAP+AAAD/AAAAAIAAAACAAAAAgAAAAQAAAACAAAAAgAAAAAAAAQAAAAAEAAKAAA8AAAEBAQEBAQEBAQEBAQEBAQEAAAKAAAAAgAAAAIAAAACAAAD/AAAA/4AAAP+AAAD+AAKAAAD/gAAA/4AAAP+AAAD/AAAAAIAAAACAAAAAgAAAAAAAAQAAAYAEAAQAAA8AAAEBAQEBAQEBAQEBAQEBAQEDAAEAAAD/gAAA/4AAAP+AAAD9gAAAAgAAAACAAAAAgAQAAAD/AAAA/4AAAP+AAAD/gAAAAQAAAACAAAAAgAAAAAAAAQAAAgAEAAQAAA8AAAEBAQEBAQEBAQEBAQEBAQEAAAQAAAD/gAAA/4AAAP+AAAD/AAAA/4AAAP+AAAD/gAQAAAD/gAAA/4AAAP+AAAD/gAAAAIAAAACAAAAAgAAAAAAAAQAAAYACgAKAAAMAAAEBAQEAAAKAAAD9gAKAAAD/AAAAAAAAAQGAAAACgAKAAAMAAAEBAQEBgAEAAAD/AAKAAAD9gAAAAAAAAQAAAYAEAAQAABcAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQAAAQAAAACAAAABAAAAAIAAAAEAAAD/gAAA/4AAAP+AAAD/AAAA/4AAAP+AAAD/gAQAAAD/gAAA/4AAAACAAAAAgAAA/wAAAP+AAAD/gAAA/4AAAACAAAAAgAAAAIAAAAAAAAEAAAAABAAEAAAJAAABAQEBAQEBAQEBAYACgAAA/AAAAACAAAAAgAAAAIAEAAAA/AAAAAEAAAABAAAAAQAAAAABAAAAAAQABAAAEwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEDAAEAAAD/gAAA/4AAAP+AAAD/AAAA/oAAAAEAAAABAAAAAIAAAACABAAAAP6AAAD/AAAA/4AAAP+AAAD/gAAAAQAAAACAAAAAgAAAAQAAAAAAAAEAAAAABAAEAAATAAABAQEBAQEBAQEBAQEBAQEBAQEBAQAAAQAAAACAAAAAgAAAAQAAAAEAAAD+gAAA/wAAAP+AAAD/gAAA/4AEAAAA/wAAAP8AAAD/gAAA/4AAAP8AAAAAgAAAAIAAAACAAAABAAAAAAAAAQAAAAAEAAQAABsAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEDAAEAAAD/gAAA/4AAAP+AAAD/gAAA/4AAAP+AAAD/AAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAQAAAD/AAAA/4AAAP+AAAD/gAAA/4AAAP+AAAD/gAAAAQAAAACAAAAAgAAAAIAAAACAAAAAgAAAAAAAAQAAAAACgAQAABcAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQAAAQAAAACAAAAAgAAAAIAAAP+AAAD/gAAA/4AAAP8AAAAAgAAAAIAAAP+AAAD/gAQAAAD/gAAA/4AAAP+AAAD/AAAA/4AAAP+AAAD/gAAAAQAAAACAAAABAAAAAIAAAAAAAAEAAAAABAAEAAAfAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQAAAQAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAP8AAAD/gAAA/wAAAP+AAAD/AAAAAIAAAACAAAD/gAAA/4AEAAAA/4AAAP+AAAD/gAAA/4AAAP+AAAD/gAAA/wAAAACAAAAAgAAA/4AAAP+AAAABAAAAAIAAAAEAAAAAgAAAAAAAAQAAAAACgAQAAA8AAAEBAQEBAQEBAQEBAQEBAQEBgAEAAAD/gAAA/4AAAP+AAAD/AAAAAIAAAACAAAAAgAQAAAD9gAAA/4AAAP+AAAD/gAAAAQAAAACAAAAAgAAAAAAAAQGAAAAEAAQAAA8AAAEBAQEBAQEBAQEBAQEBAQEBgAEAAAAAgAAAAIAAAACAAAD/AAAA/4AAAP+AAAD/gAQAAAD+AAAA/4AAAP+AAAD/AAAAAIAAAACAAAAAgAAAAAAAAQAAAAAEAAKAAA8AAAEBAQEBAQEBAQEBAQEBAQEBgAKAAAD+AAAA/4AAAP+AAAD/AAAAAIAAAACAAAAAgAKAAAD/AAAA/4AAAP+AAAD/gAAAAQAAAACAAAAAgAAAAAAAAQGAAYACgAQAAAMAAAEBAQEBgAEAAAD/AAQAAAD9gAAAAAAAAQGAAYAEAAKAAAMAAAEBAQEBgAKAAAD9gAKAAAD/AAAAAAAAAQAAAAAEAAQAAB8AAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAwABAAAA/4AAAP+AAAAAgAAAAIAAAP8AAAD/gAAA/wAAAP+AAAD/AAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAQAAAD/AAAA/4AAAP8AAAD/gAAA/wAAAACAAAAAgAAA/4AAAP+AAAABAAAAAIAAAACAAAAAgAAAAIAAAACAAAAAAAABAAAAAAQABAAAIwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAABAAAAAIAAAAEAAAAAgAAAAQAAAP+AAAD/gAAAAIAAAACAAAD/AAAA/4AAAP8AAAD/gAAA/wAAAACAAAAAgAAA/4AAAP+ABAAAAP+AAAD/gAAAAIAAAACAAAD/AAAA/4AAAP8AAAD/gAAA/wAAAACAAAAAgAAA/4AAAP+AAAABAAAAAIAAAAEAAAAAgAAAAAAAAQGAAYACgAKAAAMAAAEBAQEBgAEAAAD/AAKAAAD/AAAAAAAAAQAAAAAEAAKAABcAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQGAAQAAAACAAAAAgAAAAIAAAP8AAAD/gAAA/wAAAP+AAAD/AAAAAIAAAACAAAAAgAKAAAD/gAAA/4AAAP+AAAD/AAAAAIAAAACAAAD/gAAA/4AAAAEAAAAAgAAAAIAAAAAAAAEAAAGAAoAEAAAFAAABAQEBAQEBgAEAAAD9gAAAAYAEAAAA/YAAAAEAAAAAAQAAAAACgAKAAAUAAAEBAQEBAQAAAoAAAP8AAAD+gAKAAAD9gAAAAYAAAAABAAAAAAQABAAAHwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAAEAAAAAgAAAAQAAAACAAAABAAAA/4AAAP+AAAAAgAAAAIAAAP8AAAD/gAAA/4AAAP+AAAD/gAAA/4AAAP+ABAAAAP+AAAD/gAAAAIAAAACAAAD/AAAA/4AAAP8AAAD/gAAA/wAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAAAAAAEAAAAABAAEAAALAAABAQEBAQEBAQEBAQEBgAEAAAABgAAA/oAAAP8AAAD+gAAAAYAEAAAA/oAAAP8AAAD+gAAAAYAAAAEAAAAAAAABAAAAAAQAAoAABwAAAQEBAQEBAQEAAAQAAAD+gAAA/wAAAP6AAoAAAP8AAAD+gAAAAYAAAAAAAAEBgAAABAAEAAAHAAABAQEBAQEBAQGAAQAAAAGAAAD+gAAA/wAEAAAA/oAAAP8AAAD+gAAAAAAAAQAAAAACgAQAAAcAAAEBAQEBAQEBAYABAAAA/wAAAP6AAAABgAQAAAD8AAAAAYAAAAEAAAAAAAABAAABgAQABAAABwAAAQEBAQEBAQEBgAEAAAABgAAA/AAAAAGABAAAAP6AAAD/AAAAAQAAAAAAAAQBAAEAAwADAAADAAcACwAPAAABAQEBAQEBAQEBAQEBAQEBAYABAAAA/wD/gACAAAD/gAGAAIAAAP+A/wABAAAA/wADAAAA/4AAAAAAAAD/AAAAAQAAAP8AAAAAAAAA/4AAAAACAIAAgAOAA4AACwAPAAABAQEBAQEBAQEBAQEBAQEBAQACAAAAAIAAAP+AAAD+AAAA/4AAAACAAIAAAAEAAAADgAAA/4AAAP4AAAD/gAAAAIAAAAIAAAD/gP8AAAABAAACAAAAAAQABAAAEwAfAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAgAAAACAAAAAgAAA/4AAAP+AAAD+AAAA/4AAAP+AAAAAgAAAAIAAgAAA/4AAAACAAAABAAAAAIAAAP+AAAAEAAAA/4AAAP+AAAD+AAAA/4AAAP+AAAAAgAAAAIAAAAIAAAAAgAAA/4D/gAAA/wAAAP+AAAAAgAAAAQAAAACAABAAAAAABAAEAAADAAcACwAPABMAFwAbAB8AIwAnACsALwAzADcAOwA/AAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAYAAgAAA/4ACAACAAAD/gP2AAIAAAP+AAgAAgAAA/4D9gACAAAD/gAIAAIAAAP+A/YAAgAAA/4ACAACAAAD/gP+AAIAAAP+AAgAAgAAA/4D9gACAAAD/gAIAAIAAAP+A/YAAgAAA/4ACAACAAAD/gP2AAIAAAP+AAgAAgAAA/4AEAAAA/4AAAACAAAD/gAAAAAAAAP+AAAAAgAAA/4AAAAAAAAD/gAAAAIAAAP+AAAAAAAAA/4AAAACAAAD/gAAAAAAAAP+AAAAAgAAA/4AAAAAAAAD/gAAAAIAAAP+AAAAAAAAA/4AAAACAAAD/gAAAAAAAAP+AAAAAgAAA/4AAAAAQAAAAAAQABAAAAwAHAAsADwATABcAGwAfACMAJwArAC8AMwA3ADsAPwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQAAAIAAAP+AAgAAgAAA/4D+gACAAAD/gAIAAIAAAP+A/oAAgAAA/4ACAACAAAD/gP6AAIAAAP+AAgAAgAAA/4D8gACAAAD/gAIAAIAAAP+A/oAAgAAA/4ACAACAAAD/gP6AAIAAAP+AAgAAgAAA/4D+gACAAAD/gAIAAIAAAP+ABAAAAP+AAAAAgAAA/4AAAAAAAAD/gAAAAIAAAP+AAAAAAAAA/4AAAACAAAD/gAAAAAAAAP+AAAAAgAAA/4AAAAAAAAD/gAAAAIAAAP+AAAAAAAAA/4AAAACAAAD/gAAAAAAAAP+AAAAAgAAA/4AAAAAAAAD/gAAAAIAAAP+AAAAAAwCAAIADgAQAABcAGwAfAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQIAAIAAAAEAAAD/AAAAAIAAAP+AAAABAAAA/wAAAP+AAAD/AAAA/4AAAACAAAABAP+AAAAAgAAA/4AAAACAAAAEAAAA/4AAAP+AAAD/gAAA/4AAAP+AAAD/gAAA/4AAAACAAAAAgAAAAYAAAACAAAD/gP+AAAAAgP8A/4AAAACAAAAAAQCAAIADgAOAAA8AAAEBAQEBAQEBAQEBAQEBAQEBAAIAAAAAgAAA/4AAAP+AAAD/AAAA/4AAAP+AAAAAgAOAAAD/gAAA/wAAAP+AAAD/AAAAAQAAAACAAAABAAAAAAAAAgCAAIADgAOAAAMACQAAAQEBAQEBAQEBAQCAAwAAAP0AAYAAAP8AAAACAAAAA4AAAP0AAAACgP8AAAD/AAAAAgAAAAABAIAAgAOAA4AAAwAAAQEBAQCAAwAAAP0AA4AAAP0AAAAAAAACAIAAgAOAA4AAAwALAAABAQEBAQEBAQEBAQEAgAMAAAD9AACAAAACAAAA/4AAAP8AAAADgAAA/QAAAAKA/gAAAAIAAAD/AAAAAQAAAQAAAAAEAAQAABMAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQACAAAAAIAAAACAAAD/gAAA/4AAAP4AAAD/gAAA/4AAAACAAAAAgAQAAAD/gAAA/4AAAP4AAAD/gAAA/4AAAACAAAAAgAAAAgAAAACAAAAAAAABAQABAAMAAwAACwAAAQEBAQEBAQEBAQEBAYABAAAAAIAAAP+AAAD/AAAA/4AAAACAAwAAAP+AAAD/AAAA/4AAAACAAAABAAAAAAAAAQCAAQAEAAQAABsAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQECAACAAAAAgAAAAQAAAP+AAAD/gAAAAIAAAP8AAAD/gAAA/wAAAACAAAD/gAAA/4AAAAEAAAAAgAQAAAD/gAAA/4AAAP+AAAD/gAAA/4AAAP+AAAAAgAAA/4AAAACAAAAAgAAAAIAAAACAAAAAgAAAAAAABgCAAIAEAAQAAAMABwALAA8AEwAXAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAgAOAAAD8gAEAAAAAgAAAAIAAAACAAAD+AAAAAIAAAAGAAAAAgAAA/gAAAAGAAAAEAAAA/IAAAAMA/wAAAAEAAAD/AAAAAQD+gP+AAAAAgAAA/4AAAACA/4D/gAAAAIAABgCAAIAEAAQAAAMABwALAA8AEwAXAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAgAOAAAD8gAEAAAAAgAAAAIAAAACAAAD+gAAAAYAAAP4AAAAAgAAAAYAAAACAAAAEAAAA/IAAAAMA/wAAAAEAAAD/AAAAAQD+gP+AAAAAgP+A/4AAAACAAAD/gAAAAIAABgCAAIAEAAQAABMAFwAbAB8AIwAnAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAgAAgAAAAIAAAAEAAAD/AAAA/4AAAP+AAAD/gAAA/wAAAAEAAAAAgAAAAAAAgAAA/oAAgAAA/4ACAACAAAD/gP4AAIAAAP+AAgAAgAAA/4AEAAAA/wAAAP+AAAD/gAAA/4AAAP8AAAABAAAAAIAAAACAAAAAgAAA/4D/gAAAAIABAAAA/4AAAACAAAD/gAAA/oAAAP+AAAAAgAAA/4AAAAACAQAAgAOABAAAFwAbAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAYABgAAAAIAAAP+AAAD/gAAAAIAAAP+AAAD/gAAA/4AAAACAAAD/gAAAAQAAAP8A/4AAgAAA/4AEAAAA/4AAAP8AAAD/gAAA/4AAAP+AAAD/gAAAAIAAAACAAAAAgAAAAIAAAAEAAAAAAAAA/wAAAAACAIAAgAQABAAAFwAbAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAYACgAAA/4AAAP+AAAD/gAAAAIAAAP+AAAD+gAAAAQAAAP8AAAABAAAAAIAAAP8A/wAAgAAA/4AEAAAA/gAAAAEAAAD/gAAA/4AAAP8AAAD/gAAAAIAAAAEAAAAAgAAAAIAAAACAAAD+gAAA/wAAAAABAIAAgAQABAAAGwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQIAAIAAAACAAAAAgAAAAIAAAP8AAAD/gAAAAIAAAP6AAAAAgAAA/4AAAP8AAAAAgAAAAIAAAACABAAAAP+AAAD/gAAA/4AAAP8AAAAAgAAA/wAAAP+AAAAAgAAAAQAAAP+AAAABAAAAAIAAAACAAAAAAAABAIAAgAQABAAAGwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQGAAYAAAP+AAAAAgAAAAQAAAP8AAAD/gAAAAIAAAP6AAAAAgAAA/4AAAP8AAAABAAAAAIAAAP+ABAAAAP8AAAD/gAAAAIAAAP6AAAAAgAAA/wAAAP+AAAAAgAAAAQAAAP+AAAABgAAA/4AAAACAAAAAAAABAIAAgAQABAAAFwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAAAAAIAAAAEAAAAAgAAA/4AAAP+AAAD/gAAA/4AAAP+AAAD/gAAA/4AAAACABAAAAP+AAAAAgAAA/4AAAP6AAAD/gAAA/4AAAP+AAAAAgAAAAIAAAACAAAABgAAAAAAAAQCAAIAEAAQAABsAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQECAACAAAAAgAAAAIAAAACAAAD/gAAA/4AAAP+AAAD/gAAA/4AAAP+AAAD/gAAAAIAAAACAAAAAgAQAAAD/gAAA/4AAAP+AAAD/gAAA/4AAAP+AAAD/gAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAAAAAQEAAIADgAQAAAsAAAEBAQEBAQEBAQEBAQIAAYAAAP8AAAD/gAAA/wAAAACAAAAAgAQAAAD/AAAA/gAAAP+AAAABAAAAAIAAAAAAAAEAgACABAAEAAATAAABAQEBAQEBAQEBAQEBAQEBAQEBAQGAAoAAAP+AAAD/AAAAAIAAAACAAAD+gAAA/4AAAP8AAAAAgAAAAIAEAAAA/QAAAP+AAAABAAAAAIAAAAEAAAD+AAAA/4AAAAEAAAAAgAAAAAAAAAAYASYAAQAAAAAAAAAIAAAAAQAAAAAAAQAIAAgAAQAAAAAAAgAHABAAAQAAAAAAAwAIABcAAQAAAAAABAAQAB8AAQAAAAAABQALAC8AAQAAAAAABgAIADoAAQAAAAAACQAJAEIAAQAAAAAACgA6AEsAAQAAAAAADQARAIUAAQAAAAAADgAyAJYAAQAAAAAAEwAMAMgAAwABBAkAAAAQANQAAwABBAkAAQAQAOQAAwABBAkAAgAOAPQAAwABBAkAAwAQAQIAAwABBAkABAAgARIAAwABBAkABQAWATIAAwABBAkABgAQAUgAAwABBAkACQASAVgAAwABBAkACgB0AWoAAwABBAkADQAiAd4AAwABBAkADgBkAgAAAwABBAkAEwAYAmQoYykgMjAyMlVyc2FGb250UmVndWxhclVyc2FGb250VXJzYUZvbnQgUmVndWxhclZlcnNpb24gMS4wVXJzYUZvbnRVcnNhRnJhbmtBbiBvcGVuIGxpY2VuY2UgZ2VuZXJhbCBwdXJwb3NlIHRleHRtb2RlIGZvbnQgYnkgVXJzYUZyYW5rQ0MwIDEuMCBVbml2ZXJzYWxodHRwczovL2NyZWF0aXZlY29tbW9ucy5vcmcvcHVibGljZG9tYWluL3plcm8vMS4wL0hlbGxvIFdvcmxkIQAoAGMAKQAgADIAMAAyADIAVQByAHMAYQBGAG8AbgB0AFIAZQBnAHUAbABhAHIAVQByAHMAYQBGAG8AbgB0AFUAcgBzAGEARgBvAG4AdAAgAFIAZQBnAHUAbABhAHIAVgBlAHIAcwBpAG8AbgAgADEALgAwAFUAcgBzAGEARgBvAG4AdABVAHIAcwBhAEYAcgBhAG4AawBBAG4AIABvAHAAZQBuACAAbABpAGMAZQBuAGMAZQAgAGcAZQBuAGUAcgBhAGwAIABwAHUAcgBwAG8AcwBlACAAdABlAHgAdABtAG8AZABlACAAZgBvAG4AdAAgAGIAeQAgAFUAcgBzAGEARgByAGEAbgBrAEMAQwAwACAAMQAuADAAIABVAG4AaQB2AGUAcgBzAGEAbABoAHQAdABwAHMAOgAvAC8AYwByAGUAYQB0AGkAdgBlAGMAbwBtAG0AbwBuAHMALgBvAHIAZwAvAHAAdQBiAGwAaQBjAGQAbwBtAGEAaQBuAC8AegBlAHIAbwAvADEALgAwAC8ASABlAGwAbABvACAAVwBvAHIAbABkACEAAAADAAAAAAAAAGYAMwAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==\r
1040
+ typeof module < "u" && module.exports ? module.exports = h : typeof window < "u" && (window.Typr = h);
1041
+ const hA = `data:font/truetype;charset=utf-8;base64,AAEAAAAKAIAAAwAgT1MvMs+QEyQAAAEoAAAAYGNtYXAg7yVJAAAFjAAACSBnbHlmuHLTdAAAErQAAGi0aGVhZFvXdUwAAACsAAAANmhoZWELAQUCAAAA5AAAACRobXR4BACDgAAAAYgAAAQEbG9jYQAy54AAAA6sAAAECG1heHABIgCCAAABCAAAACBuYW1lVs/OSgAAe2gAAAOicG9zdABpADQAAH8MAAAAIAABAAAAAQAAzOWHqV8PPPUAAAQAAAAAAHxiGCcAAAAAfGIYJwAAAAAEAAQAAAAACAACAAEAAAAAAAEAAAQAAAAAAAQAAAAAAAcAAAEAAAAAAAAAAAAAAAAAAAEBAAEAAAEBAIAAIAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAgQAAZAABQAEAgACAAAAAAACAAIAAAACAAAzAMwAAAAABAAAAAAAAACAAACLAABw4wAAAAAAAAAAWUFMLgBAACAmawQAAAAAAAQAAAAAAAFRAAAAAAMABAAAAAAgAAAEAAAABAAAAAQAAAAEAAGABAABAAQAAIAEAACABAAAgAQAAIAEAAGABAABAAQAAQAEAACABAABAAQAAIAEAACABAABAAQAAIAEAACABAAAgAQAAIAEAACABAAAgAQAAIAEAACABAAAgAQAAIAEAACABAABAAQAAIAEAAEABAAAgAQAAIAEAACABAAAgAQAAIAEAACABAAAgAQAAIAEAACABAAAgAQAAIAEAACABAAAgAQAAIAEAACABAAAgAQAAIAEAACABAAAgAQAAIAEAACABAAAgAQAAIAEAACABAAAgAQAAIAEAACABAAAgAQAAIAEAACABAABAAQAAIAEAAEABAAAgAQAAIAEAAEABAAAgAQAAIAEAACABAAAgAQAAIAEAAEABAAAgAQAAIAEAAGABAAAgAQAAIAEAAGABAAAgAQAAIAEAACABAAAgAQAAIAEAAEABAAAgAQAAIAEAACABAAAgAQAAIAEAACABAAAgAQAAIAEAACABAABgAQAAQAEAACABAAAAAQAAgAEAACABAAAgAQAAIAEAACABAACAAQAAAAEAAIABAABgAQAAgAEAACABAAAgAQAAAAEAACABAAAAAQAAAAEAAAABAAAAAQAAAAEAAIABAADAAQAAAAEAAAABAAAgAQAAYAEAAAABAAAAAQAAIAEAAAA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AIAAAACA/YAAgAAAAIAAAP8AAoABAAAA/4AAAP+A/4AAgAAAAIAAAP8AA4AAAP8AAAAAgAAAAIAAAP+AAAD/gAAA/4AAAP+AAAD/gAAA/4AAAACAAAAAgAAAAIAAAACAAAAAgAAAAAAAAP+AAAD/gAAAAAAAAP8AAAAAgAAAAAAAAP+AAAD/gAAAAAAAAwCAAIAEAAQAABcAHQAjAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAIAAAAAgAAA/4AAAACAAAAAgAAA/4AAAACAAAD9AAAA/4AAAACAAAD/gAAAAIAAgAAAAIAAAACAAAD/AAAAAQAAAP+AAAAEAAAA/4AAAP8AAAD/gAAAAIAAAP8AAAD/gAAA/4AAAACAAAABAAAAAIAAAAEAAAAAAP+AAAD/gAAAAQD+gP8AAAAAgAAAAIAAAAABAYACgAKABAAAAwAAAQEBAQGAAQAAAP8ABAAAAP6AAAAAAAABAQAAgAMABAAAEwAAAQEBAQEBAQEBAQEBAQEBAQEBAQECAAEAAAD/gAAA/4AAAACAAAAAgAAA/wAAAP+AAAD/gAAAAIAAAACABAAAAP+AAAD/gAAA/oAAAP+AAAD/gAAAAIAAAACAAAABgAAAAIAAAAAAAAEBAACAAwAEAAATAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQAAAACAAAAAgAAA/4AAAP+AAAD/AAAAAIAAAACAAAD/gAAA/4AEAAAA/4AAAP+AAAD+gAAA/4AAAP+AAAAAgAAAAIAAAAGAAAAAgAAAAAAABQCAAYADgAQAAAMABwATABcAGwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAIAAAP+AAYAAgAAA/4D/AAEAAAABAAAA/wAAAP8AAAD/AAAAAQD/gACAAAD/gAGAAIAAAP+ABAAAAP+AAAAAgAAA/4AAAAAAAAD/gAAA/4AAAP+AAAAAgAAAAIAAAP8AAAD/gAAAAIAAAP+AAAAAAAABAQAAgAOAAwAACwAAAQEBAQEBAQEBAQEBAgAAgAAAAQAAAP8AAAD/gAAA/wAAAAEAAwAAAP8AAAD/gAAA/wAAAAEAAAAAgAAAAAAAAQCAAAACAAGAAAcAAAEBAQEBAQEBAQABAAAA/4AAAP8AAAAAgAGAAAD/AAAA/4AAAACAAAAAAAABAIABgAOAAgAAAwAAAQEBAQCAAwAAAP0AAgAAAP+AAAAAAAABAQAAgAIAAYAAAwAAAQEBAQEAAQAAAP8AAYAAAP8AAAAAAAABAIAAgAQAA4AAFwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAwABAAAA/4AAAP+AAAD/gAAA/4AAAP+AAAD/AAAAAIAAAACAAAAAgAAAAIAAAACAA4AAAP+AAAD/gAAA/4AAAP+AAAD/gAAA/4AAAACAAAAAgAAAAIAAAACAAAAAgAAAAAAAAwCAAIADgAQAAAsAEQAXAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAIAAAAAgAAA/4AAAP4AAAD/gAAAAIAAgAAAAIAAAACAAAD/gAAA/4AAAAEAAAAEAAAA/4AAAP2AAAD/gAAAAIAAAAKAAAAAAP8AAAAAgAAAAID/AP+AAAD/AAAAAYAAAAABAIAAgAOABAAADQAAAQEBAQEBAQEBAQEBAQEBgAEAAAABAAAA/QAAAAEAAAD/AAAAAIAAAACABAAAAP0AAAD/gAAAAIAAAAGAAAAAgAAAAIAAAAABAIAAgAOABAAAGwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAgAAAACAAAD/gAAA/4AAAP+AAAABgAAA/QAAAACAAAAAgAAAAIAAAACAAAD/AAAA/wAAAACABAAAAP+AAAD/AAAA/4AAAP+AAAD/gAAA/4AAAACAAAAAgAAAAIAAAACAAAABAAAA/wAAAAEAAAAAAAABAIAAgAOABAAAGwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAgAAAACAAAD/gAAAAIAAAP+AAAD+AAAA/4AAAAEAAAABAAAA/wAAAAEAAAD/AAAA/wAAAACABAAAAP+AAAD/AAAA/4AAAP8AAAD/gAAAAIAAAACAAAD/gAAAAQAAAACAAAABAAAA/4AAAACAAAAAAAABAIAAgAOABAAAEQAAAQEBAQEBAQEBAQEBAQEBAQEBAYABAAAA/4AAAP+AAAABAAAAAQAAAP8AAAD+AAAAAIAAAACABAAAAP+AAAD/gAAA/wAAAAEAAAD9gAAAAQAAAAGAAAAAgAAAAAEAgACAA4AEAAATAAABAQEBAQEBAQEBAQEBAQEBAQEBAQCAAwAAAP4AAAABgAAAAIAAAP+AAAD+AAAA/4AAAAEAAAABAAAA/gAEAAAA/4AAAP8AAAD/gAAA/wAAAP+AAAAAgAAAAIAAAP+AAAABAAAAAAAAAgCAAIADgAQAABMAFwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQACAAAAAIAAAP8AAAD/AAAAAYAAAACAAAD/gAAA/gAAAP+AAAAAgACAAAABAAAABAAAAP+AAAD/gAAAAIAAAP8AAAD/gAAA/wAAAP+AAAAAgAAAAoAAAP6A/wAAAAEAAAEAgACAA4AEAAAPAAABAQEBAQEBAQEBAQEBAQEBAIADAAAA/4AAAP+AAAD/AAAAAIAAAACAAAD+gAAA/4AEAAAA/oAAAP+AAAD+gAAAAYAAAACAAAABAAAA/4AAAAAAAAMAgACAA4AEAAATABcAGwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAgAAAACAAAD/gAAAAIAAAP+AAAD+AAAA/4AAAACAAAD/gAAAAIAAgAAAAQAAAP8AAAABAAAABAAAAP+AAAD/AAAA/4AAAP8AAAD/gAAAAIAAAAEAAAAAgAAAAQAAAAAA/wAAAAEA/oD/AAAAAQAAAAACAIAAgAOABAAACwAPAAABAQEBAQEBAQEBAQEBAQEBAQACAAAAAIAAAP8AAAD+gAAA/4AAAACAAIAAAAEAAAAEAAAA/4AAAP0AAAABAAAAAIAAAAGAAAAAAP6AAAABgAACAQABAAIAA4AAAwAHAAABAQEBAQEBAQEAAQAAAP8AAAABAAAA/wADgAAA/wAAAP+AAAD/AAAAAAIAgACAAgADgAADAAsAAAEBAQEBAQEBAQEBAQEAAQAAAP8AAAABAAAA/4AAAP8AAAAAgAOAAAD/AAAA/4AAAP8AAAD/gAAAAIAAAAABAQAAgAOABAAAGwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQKAAQAAAP+AAAD/gAAA/4AAAACAAAAAgAAAAIAAAP8AAAD/gAAA/4AAAP+AAAAAgAAAAIAAAACABAAAAP+AAAD/gAAA/4AAAP+AAAD/gAAA/4AAAP+AAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAAAACAIABgAOAAwAAAwAHAAABAQEBAQEBAQCAAwAAAP0AAAADAAAA/QADAAAA/4AAAP+AAAD/gAAAAAEAgACAAwAEAAAbAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAIABAAAAAIAAAACAAAAAgAAA/4AAAP+AAAD/gAAA/wAAAACAAAAAgAAAAIAAAP+AAAD/gAAA/4AEAAAA/4AAAP+AAAD/gAAA/4AAAP+AAAD/gAAA/4AAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAAAAAAIAgACAA4AEAAATABcAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAgAAAACAAAD/gAAA/4AAAP8AAAAAgAAAAIAAAP8AAAD/AAAAAIAAgAEAAAD/AAQAAAD/gAAA/4AAAP+AAAD/gAAAAIAAAACAAAAAgAAA/4AAAACAAAD+AAAA/wAAAAACAIAAgAOABAAAEQAVAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQACAAAAAIAAAP6AAAAAgAAA/wAAAAGAAAD+AAAA/4AAAACAAgAAgAAA/4AEAAAA/4AAAP6AAAABAAAAAIAAAP2AAAD/gAAAAIAAAAKAAAD+AAAA/4AAAAAAAAIAgACAA4AEAAAPABMAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAYABAAAAAIAAAACAAAD/AAAA/wAAAP8AAAAAgAAAAIAAAAAAAQAAAAQAAAD/gAAA/4AAAP2AAAABAAAA/wAAAAKAAAAAgAAA/4D/AAAAAQAAAwCAAIADgAQAAAsADwATAAABAQEBAQEBAQEBAQEBAQEBAQEBAQCAAoAAAACAAAD/gAAAAIAAAP+AAAD9gAEAAAABAAAA/wAAAAEAAAAEAAAA/4AAAP8AAAD/gAAA/wAAAP+AAAADAP8AAAABAP6A/wAAAAEAAAAAAQCAAIADgAQAABMAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQACAAAAAIAAAP8AAAD/AAAAAQAAAAEAAAD/gAAA/gAAAP+AAAAAgAQAAAD/gAAA/4AAAACAAAD9gAAAAIAAAP+AAAD/gAAAAIAAAAKAAAAAAAACAIAAgAOABAAACwATAAABAQEBAQEBAQEBAQEBAQEBAQEBAQCAAgAAAACAAAAAgAAA/4AAAP+AAAD+AAEAAAAAgAAAAIAAAP+AAAAEAAAA/4AAAP+AAAD+gAAA/4AAAP+AAAADAP2AAAAAgAAAAYAAAACAAAEAgACAA4AEAAAXAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAIAAAAAgAAA/wAAAP8AAAABAAAA/wAAAAEAAAABAAAA/4AAAP4AAAD/gAAAAIAEAAAA/4AAAP+AAAAAgAAA/wAAAP+AAAD/AAAAAIAAAP+AAAD/gAAAAIAAAAKAAAAAAAABAIAAgAOABAAACQAAAQEBAQEBAQEBAQCAAwAAAP4AAAABAAAA/wAAAP8ABAAAAP+AAAD/AAAA/4AAAP6AAAAAAQCAAIADgAQAABUAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAIAAAAAgAAA/wAAAP8AAAABAAAA/4AAAAGAAAD/gAAA/gAAAP+AAAAAgAQAAAD/gAAA/4AAAACAAAD9gAAAAQAAAACAAAD+gAAA/4AAAACAAAACgAAAAAEAgACAA4AEAAALAAABAQEBAQEBAQEBAQEAgAEAAAABAAAAAQAAAP8AAAD/AAAA/wAEAAAA/gAAAAIAAAD8gAAAAQAAAP8AAAAAAAABAIAAgAOABAAACwAAAQEBAQEBAQEBAQEBAIADAAAA/wAAAAEAAAD9AAAAAQAAAP8ABAAAAP+AAAD9gAAA/4AAAACAAAACgAAAAAAAAQCAAIAEAAQAAA8AAAEBAQEBAQEBAQEBAQEBAQEBAAMAAAD/gAAA/4AAAP4AAAD/gAAAAQAAAAEAAAD+gAQAAAD/gAAA/YAAAP+AAAAAgAAAAQAAAP8AAAACgAAAAAAAAQCAAIADgAQAABsAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAgAEAAAAAgAAAAIAAAAEAAAD/gAAA/4AAAP+AAAAAgAAAAIAAAACAAAD/AAAA/4AAAP+AAAD/AAQAAAD/AAAAAIAAAACAAAD/gAAA/4AAAP+AAAD/gAAA/4AAAP+AAAD/gAAAAIAAAACAAAD/AAAAAAAAAQCAAIADgAQAAAUAAAEBAQEBAQCAAQAAAAIAAAD9AAQAAAD9AAAA/4AAAAABAIAAgAQABAAAEwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEAgAEAAAAAgAAAAIAAAACAAAABAAAA/wAAAP+AAAD/gAAA/4AAAP8ABAAAAP+AAAD/gAAAAIAAAACAAAD8gAAAAgAAAP+AAAAAgAAA/gAAAAAAAAEAgACABAAEAAATAAABAQEBAQEBAQEBAQEBAQEBAQEBAQCAAQAAAACAAAAAgAAAAIAAAAEAAAD/AAAA/4AAAP+AAAD/gAAA/wAEAAAA/4AAAP+AAAD/gAAAAYAAAPyAAAABAAAAAIAAAACAAAD+AAAAAAAAAgCAAIADgAQAAAsADwAAAQEBAQEBAQEBAQEBAQEBAQEAAgAAAACAAAD/gAAA/gAAAP+AAAAAgACAAAABAAAABAAAAP+AAAD9gAAA/4AAAACAAAACgAAAAAD9gAAAAoAAAgCAAIADgAQAAAkADQAAAQEBAQEBAQEBAQEBAQEAgAKAAAAAgAAA/4AAAP6AAAD/AAEAAAABAAAABAAAAP+AAAD+gAAA/4AAAP8AAAADAP6AAAABgAAAAAIAgACABAAEAAAPABcAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAgAAAACAAAAAgAAA/4AAAP+AAAD+AAAA/4AAAACAAIAAAAEAAAD/gAAAAIAAAAQAAAD/gAAA/gAAAP8AAAAAgAAA/4AAAACAAAACgAAAAAD9gAAAAIAAAACAAAABgAACAIAAgAOABAAAEwAXAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAgAKAAAAAgAAA/4AAAP+AAAAAgAAAAIAAAP8AAAD/gAAA/4AAAP8AAQAAAAEAAAAEAAAA/4AAAP8AAAD/gAAA/4AAAP+AAAD/gAAAAIAAAACAAAD/AAAAAwD/AAAAAQAAAQCAAIADgAQAABsAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAIAAAAAgAAA/wAAAP8AAAABgAAAAIAAAP+AAAD+AAAA/4AAAAEAAAABAAAA/oAAAP+AAAAAgAQAAAD/gAAA/4AAAACAAAD/AAAA/4AAAP8AAAD/gAAAAIAAAACAAAD/gAAAAQAAAACAAAABAAAAAAAAAQCAAIADgAQAAAcAAAEBAQEBAQEBAIADAAAA/wAAAP8AAAD/AAQAAAD/gAAA/QAAAAMAAAAAAAABAIAAgAOABAAACwAAAQEBAQEBAQEBAQEBAIABAAAAAQAAAAEAAAD/gAAA/gAAAP+ABAAAAP0AAAADAAAA/QAAAP+AAAAAgAAAAAAAAQCAAIADgAQAAA8AAAEBAQEBAQEBAQEBAQEBAQEAgAEAAAABAAAAAQAAAP+AAAD/gAAA/wAAAP+AAAD/gAQAAAD+AAAAAgAAAP4AAAD/AAAA/4AAAACAAAABAAAAAAAAAQCAAIAEAAQAABMAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAIABAAAAAIAAAACAAAAAgAAAAQAAAP8AAAD/gAAA/4AAAP+AAAD/AAQAAAD+AAAAAIAAAP+AAAACAAAA/IAAAACAAAAAgAAA/4AAAP+AAAAAAAABAIAAgAOABAAAGwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQCAAQAAAAEAAAABAAAA/4AAAP+AAAAAgAAAAIAAAP8AAAD/AAAA/wAAAACAAAAAgAAA/4AAAP+ABAAAAP8AAAABAAAA/wAAAP+AAAD/gAAA/4AAAP8AAAABAAAA/wAAAAEAAAAAgAAAAIAAAACAAAAAAAABAIAAgAOABAAADwAAAQEBAQEBAQEBAQEBAQEBAQCAAQAAAAEAAAABAAAA/4AAAP+AAAD/AAAA/4AAAP+ABAAAAP6AAAABgAAA/oAAAP+AAAD+gAAAAYAAAACAAAAAAAABAIAAgAOABAAAFwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAIADAAAA/4AAAP+AAAD/gAAA/4AAAAIAAAD9AAAAAIAAAACAAAAAgAAAAIAAAP4ABAAAAP8AAAD/gAAA/4AAAP+AAAD/gAAA/4AAAAEAAAAAgAAAAIAAAACAAAAAgAAAAAAAAQEAAIADAAQAAAcAAAEBAQEBAQEBAQACAAAA/wAAAAEAAAD+AAQAAAD/gAAA/YAAAP+AAAAAAAABAIAAgAQAA4AAFwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAIABAAAAAIAAAACAAAAAgAAAAIAAAACAAAD/AAAA/4AAAP+AAAD/gAAA/4AAAP+AA4AAAP+AAAD/gAAA/4AAAP+AAAD/gAAA/4AAAACAAAAAgAAAAIAAAACAAAAAgAAAAAAAAQEAAIADAAQAAAcAAAEBAQEBAQEBAQACAAAA/gAAAAEAAAD/AAQAAAD8gAAAAIAAAAKAAAAAAAABAIACAAQABAAAFwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAgAAgAAAAIAAAACAAAAAgAAA/wAAAP+AAAD/gAAA/4AAAP8AAAAAgAAAAIAAAACABAAAAP+AAAD/gAAA/4AAAP+AAAAAgAAAAIAAAP+AAAD/gAAAAIAAAACAAAAAgAAAAAAAAQCAAIADgAEAAAMAAAEBAQEAgAMAAAD9AAEAAAD/gAAAAAAAAQEAAoACgAQAAAkAAAEBAQEBAQEBAQEBAAEAAAAAgAAA/4AAAP+AAAD/gAQAAAD/gAAA/wAAAACAAAAAgAAAAAEAgACAA4ADAAAPAAABAQEBAQEBAQEBAQEBAQEBAQACgAAA/4AAAP+AAAD/AAAAAQAAAP6AAAD/gAAAAIADAAAA/YAAAACAAAABgAAA/oAAAP+AAAAAgAAAAYAAAAAAAAIAgACAA4AEAAAJAA0AAAEBAQEBAQEBAQEBAQEBAIABAAAAAYAAAACAAAD/gAAA/YABAAAAAQAAAAQAAAD/AAAA/4AAAP6AAAD/gAAAAgD+gAAAAYAAAAABAIAAgAOAAwAAEwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAIAAAAAgAAA/wAAAP8AAAABAAAAAQAAAP+AAAD+AAAA/4AAAACAAwAAAP+AAAD/gAAAAIAAAP6AAAAAgAAA/4AAAP+AAAAAgAAAAYAAAAAAAAIAgACAA4AEAAAJAA0AAAEBAQEBAQEBAQEBAQEBAoABAAAA/YAAAP+AAAAAgAAAAYD/AAAAAQAAAAQAAAD8gAAAAIAAAAGAAAAAgAAA/4D+gAAAAYAAAAACAIAAgAOAAwAADQARAAABAQEBAQEBAQEBAQEBAQEBAQEBAAIAAAAAgAAA/gAAAAGAAAD+AAAA/4AAAACAAIAAAAEAAAADAAAA/4AAAP8AAAD/gAAA/4AAAACAAAABgAAAAAD/gAAAAIAAAAABAQAAgAOAA4AACwAAAQEBAQEBAQEBAQEBAYACAAAA/oAAAAEAAAD/AAAA/wAAAACAA4AAAP+AAAD/AAAA/4AAAP8AAAACgAAAAAAAAgCAAIADgAOAAA8AEwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAIAAAAAgAAA/4AAAP4AAAABgAAA/oAAAP+AAAAAgACAAAABAAAAA4AAAP+AAAD+AAAA/4AAAACAAAAAgAAAAIAAAAEAAAAAAP8AAAABAAABAIAAgAOABAAACwAAAQEBAQEBAQEBAQEBAIABAAAAAYAAAACAAAD/AAAA/wAAAP8ABAAAAP8AAAD/gAAA/gAAAAIAAAD+AAAAAAAAAgGAAIACgAQAAAMABwAAAQEBAQEBAQEBgAEAAAD/AAAAAQAAAP8ABAAAAP+AAAD/gAAA/YAAAAACAIAAgAOABAAAAwAPAAABAQEBAQEBAQEBAQEBAQEBAoABAAAA/wAAAAEAAAD/gAAA/gAAAP+AAAABAAAAAQAEAAAA/4AAAP+AAAD+AAAA/4AAAACAAAABAAAA/wAAAAABAIAAgAOAA4AAEwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEAgAEAAAAAgAAAAQAAAP+AAAAAgAAAAIAAAP8AAAD/gAAA/4AAAP8AA4AAAP8AAAAAgAAA/4AAAP8AAAD/gAAA/4AAAACAAAAAgAAA/wAAAAAAAAEBgACAAwAEAAAHAAABAQEBAQEBAQGAAQAAAACAAAD/AAAA/4AEAAAA/QAAAP+AAAAAgAAAAAAAAQCAAIAEAAMAABMAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAAAAAIAAAAEAAAAAgAAA/wAAAP+AAAD/gAAA/4AAAP8AAAAAgAMAAAD/gAAAAIAAAP+AAAD+AAAAAYAAAP+AAAAAgAAA/oAAAAIAAAAAAAABAIAAgAOAAwAADwAAAQEBAQEBAQEBAQEBAQEBAQCAAQAAAACAAAABAAAAAIAAAP8AAAD/gAAA/4AAAP8AAwAAAP+AAAAAgAAA/4AAAP4AAAABgAAA/4AAAP8AAAAAAAACAIAAgAOAAwAACwAPAAABAQEBAQEBAQEBAQEBAQEBAQACAAAAAIAAAP+AAAD+AAAA/4AAAACAAIAAAAEAAAADAAAA/4AAAP6AAAD/gAAAAIAAAAGAAAAAAP6AAAABgAACAIAAgAOAAwAACQANAAABAQEBAQEBAQEBAQEBAQCAAoAAAACAAAD/gAAA/oAAAP8AAQAAAAEAAAADAAAA/4AAAP+AAAD/gAAA/wAAAAIA/4AAAACAAAAAAgCAAIAEAAMAAA0AEQAAAQEBAQEBAQEBAQEBAQEBAQEBAQACgAAAAIAAAP+AAAD/AAAA/oAAAP+AAAAAgACAAAABAAAAAwAAAP6AAAD/gAAA/4AAAAEAAAAAgAAAAIAAAAAA/4AAAACAAAAAAQEAAIADgAMAAAkAAAEBAQEBAQEBAQEBAAIAAAAAgAAA/wAAAP+AAAD/AAMAAAD/gAAA/wAAAAEAAAD+AAAAAAEAgACABAADAAATAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEAAoAAAP6AAAABgAAAAIAAAP+AAAD9AAAAAgAAAP6AAAD/gAAAAIADAAAA/4AAAP+AAAD/gAAA/4AAAP+AAAAAgAAAAIAAAACAAAAAgAAAAAAAAQCAAIADgAOAABMAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAAAAAQAAAP8AAAAAgAAAAQAAAP+AAAD+gAAA/4AAAP+AAAAAgAOAAAD/gAAA/4AAAP6AAAAAgAAA/4AAAP+AAAAAgAAAAYAAAACAAAAAAAABAIAAgAOAAwAADwAAAQEBAQEBAQEBAQEBAQEBAQCAAQAAAACAAAAAgAAAAQAAAP+AAAD/gAAA/oAAAP+AAwAAAP4AAAAAgAAAAYAAAP2AAAAAgAAA/4AAAACAAAAAAAABAIAAgAOAAwAADwAAAQEBAQEBAQEBAQEBAQEBAQCAAQAAAAEAAAABAAAA/4AAAP+AAAD/AAAA/4AAAP+AAwAAAP6AAAABgAAA/oAAAP+AAAD/gAAAAIAAAACAAAAAAAABAIAAgAQAAwAAEwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEAgAEAAAAAgAAAAIAAAACAAAABAAAA/4AAAP8AAAD/gAAA/wAAAP+AAwAAAP6AAAAAgAAA/4AAAAGAAAD+AAAA/4AAAACAAAD/gAAAAIAAAAAAAAEAgACAA4ADAAAbAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAIABAAAAAQAAAAEAAAD/gAAA/4AAAACAAAAAgAAA/wAAAP8AAAD/AAAAAIAAAACAAAD/gAAA/4ADAAAA/4AAAACAAAD/gAAA/4AAAP+AAAD/gAAA/4AAAACAAAD/gAAAAIAAAACAAAAAgAAAAIAAAAAAAAEAgACAA4ADAAAPAAABAQEBAQEBAQEBAQEBAQEBAIABAAAAAQAAAAEAAAD/gAAA/gAAAAGAAAD+gAAA/4ADAAAA/wAAAAEAAAD+AAAA/4AAAACAAAAAgAAAAIAAAAAAAAEAgACAA4ADAAATAAABAQEBAQEBAQEBAQEBAQEBAQEBAQCAAwAAAP+AAAD/gAAA/4AAAAGAAAD9AAAAAIAAAACAAAAAgAAA/oADAAAA/4AAAP+AAAD/gAAA/4AAAP+AAAAAgAAAAIAAAACAAAAAgAAAAAAAAQCAAIADAAQAABMAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAYABgAAA/wAAAP+AAAAAgAAAAQAAAP6AAAD/gAAA/4AAAACAAAAAgAQAAAD/gAAA/wAAAP+AAAD/AAAA/4AAAACAAAABAAAAAIAAAAEAAAAAAAABAYAAgAKABAAAAwAAAQEBAQGAAQAAAP8ABAAAAPyAAAAAAAABAQAAgAOABAAAEwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAGAAAAAgAAAAIAAAP+AAAD/gAAA/oAAAAEAAAAAgAAA/4AAAP8ABAAAAP+AAAD/AAAA/4AAAP8AAAD/gAAAAIAAAAEAAAAAgAAAAQAAAAAAAAEAgAGAA4ADAAAPAAABAQEBAQEBAQEBAQEBAQEBAQABAAAAAQAAAACAAAD/gAAA/wAAAP8AAAD/gAAAAIADAAAA/4AAAACAAAD/AAAA/4AAAACAAAD/gAAAAQAAAAAAAAEAAAAABAAEAAATAAABAQEBAQEBAQEBAQEBAQEBAQEBAQAAAYAAAAEAAAAAgAAAAIAAAACAAAD/AAAA/4AAAP+AAAD/AAAA/wAEAAAA/4AAAP+AAAD/gAAA/wAAAP6AAAABAAAAAQAAAACAAAAAgAAAAAAAAQIAAAAEAAQAAAMAAAEBAQECAAIAAAD+AAQAAAD8AAAAAAAAAgCAAIADgAQAABcAGwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQGAAYAAAP8AAAABAAAA/4AAAP+AAAABgAAA/QAAAACAAAAAgAAA/wAAAACAAAAAgAGAAIAAAP+ABAAAAP+AAAD/AAAA/4AAAP+AAAD/gAAA/4AAAACAAAAAgAAAAIAAAACAAAABAAAAAAAAAP+AAAAAAQCAAIADgAQAABsAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAgAEAAAABAAAAAQAAAP+AAAAAgAAA/wAAAAEAAAD/AAAA/wAAAP8AAAABAAAA/wAAAACAAAD/gAQAAAD+gAAAAYAAAP8AAAD/gAAA/4AAAP+AAAD/gAAA/4AAAACAAAAAgAAAAIAAAACAAAAAgAAAAAAABACAAIAEAAQAABcAGwAfACMAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAoAAAP4AAAABgAAAAIAAAACAAAD/gAAA/YAAAAIAAAD+gAAA/4AAAP+AAAAAgAEAAAAAgAAAAQAAgAAA/4D9AACAAAD/gAQAAAD/gAAA/4AAAP+AAAD/gAAA/wAAAP+AAAAAgAAAAIAAAACAAAAAgAAAAQAAAP8A/4AAAACAAQAAAP+AAAD+gAAA/4AAAAAEAIAAgAQAA4AAAwAHAAsADwAAAQEBAQEBAQEBAQEBAQEBAQCAAIAAAP+AAQAAgAAA/4ABAACAAAD/gAEAAIAAAP+AA4AAAP0AAAADAAAA/QAAAAMAAAD9AAAAAwAAAP0AAAAAAQIAAAAEAAQAAAkAAAEBAQEBAQEBAQEDgACAAAD+AAAAAIAAAACAAAAAgAQAAAD8AAAAAQAAAAEAAAABAAAAAAgAAAAABAAEAAADAAcACwAPABMAFwAbAB8AAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAABAAAA/wACAAEAAAD/AP8AAQAAAP8AAgABAAAA/wD9AAEAAAD/AAIAAQAAAP8A/wABAAAA/wACAAEAAAD/AAQAAAD/AAAAAQAAAP8AAAAAAAAA/wAAAAEAAAD/AAAAAAAAAP8AAAABAAAA/wAAAAAAAAD/AAAAAQAAAP8AAAAAAQIAAAADAAQAAAMAAAEBAQECAAEAAAD/AAQAAAD8AAAAAAAAAgGAAIACgAQAAAMABwAAAQEBAQEBAQEBgAEAAAD/AAAAAQAAAP8ABAAAAP6AAAD/gAAA/oAAAAABAgAAAAQAAgAAAwAAAQEBAQIAAgAAAP4AAgAAAP4AAAAAAAAEAIAAAAQABAAAAwAHAAsADwAAAQEBAQEBAQEBAQEBAQEBAQCAAIAAAP+AAQAAgAAA/4ABAACAAAD/gAEAAIAAAP+ABAAAAPwAAAAEAAAA/AAAAAQAAAD8AAAABAAAAPwAAAAAAQCAAIADgAOAABMAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAoABAAAA/oAAAP+AAAD/gAAA/4AAAACAAAAAgAAAAIAAAAEAAAD/gAOAAAD+AAAA/wAAAACAAAAAgAAAAIAAAACAAAAAgAAA/wAAAAEAAAAAAAABAAAAAAQABAAACwAAAQEBAQEBAQEBAQEBAAAEAAAA/gAAAP+AAAD/gAAA/4AAAP+ABAAAAPwAAAAAgAAAAIAAAACAAAAAgAAAAAAAAQCAAIAEAAOAABsAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAgACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAD/gAAA/4AAAP+AAAD/gAAA/4AAAP+AAAD/gAOAAAD/gAAAAIAAAP8AAAABAAAA/oAAAAGAAAD9AAAAAIAAAP+AAAABAAAA/wAAAAGAAAD+gAAAAAAAAQAAAAACAAQAAAkAAAEBAQEBAQEBAQEAAACAAAAAgAAAAIAAAACAAAD+AAQAAAD/AAAA/wAAAP8AAAD/AAAAAAEAAAAABAAEAAATAAABAQEBAQEBAQEBAQEBAQEBAQEBAQKAAYAAAP8AAAD/AAAA/4AAAP+AAAD/AAAAAIAAAACAAAAAgAAAAQAEAAAA/wAAAP+AAAD/gAAA/wAAAP8AAAABgAAAAQAAAACAAAAAgAAAAAAAAQAAAAAEAAIAAA8AAAEBAQEBAQEBAQEBAQEBAQEBgAEAAAAAgAAAAIAAAACAAAD8AAAAAIAAAACAAAAAgAIAAAD/gAAA/4AAAP+AAAD/gAAAAIAAAACAAAAAgAAAAAAAAgAAAAAEAAQAAAMABwAAAQEBAQEBAQEAAAIAAAD+AAIAAgAAAP4ABAAAAP4AAAAAAAAA/gAAAAAEAAACAAQABAAAAwAHAAsADwAAAQEBAQEBAQEBAQEBAQEBAQAAAQAAAP8AAgABAAAA/wD/AAEAAAD/AAIAAQAAAP8ABAAAAP8AAAABAAAA/wAAAAAAAAD/AAAAAQAAAP8AAAAABAIAAAAEAAQAAAMABwALAA8AAAEBAQEBAQEBAQEBAQEBAQECAAEAAAD/AAEAAQAAAP8A/wABAAAA/wABAAEAAAD/AAQAAAD/AAAAAAAAAP8AAAAAAAAA/wAAAAAAAAD/AAAAAAEDAAAABAAEAAADAAABAQEBAwABAAAA/wAEAAAA/AAAAAAAAAEAAAAABAAEAAAFAAABAQEBAQEAAAQAAAD9AAAA/wAEAAAA/wAAAP0AAAAAAQAAAAABAAQAAAMAAAEBAQEAAAEAAAD/AAQAAAD8AAAAAAAAAwCAAIADAAOAAAMABwALAAABAQEBAQEBAQEBAQEAgACAAAD/gAEAAIAAAP+AAQAAgAAA/4ADgAAA/QAAAAMAAAD9AAAAAwAAAP0AAAAAAAABAYABgAQABAAACwAAAQEBAQEBAQEBAQEBAYABAAAAAIAAAAEAAAD+gAAA/4AAAP+ABAAAAP8AAAD/gAAA/wAAAACAAAAAgAAAAAAAAQAAAYACgAQAAAsAAAEBAQEBAQEBAQEBAQGAAQAAAP+AAAD/gAAA/oAAAAEAAAAAgAQAAAD+gAAA/4AAAP+AAAABAAAAAIAAAAAAAAEAAAAABAAEAAAJAAABAQEBAQEBAQEBAwABAAAA/AAAAAEAAAABAAAAAQAEAAAA/AAAAAKAAAAAgAAAAIAAAAABAIAAgAMABAAACwAAAQEBAQEBAQEBAQEBAgABAAAA/4AAAP6AAAD/gAAAAIAAAAEABAAAAP0AAAD/gAAAAIAAAAEAAAAAgAAAAAAAAQAAAAAEAAQAAAUAAAEBAQEBAQAAAQAAAAMAAAD8AAQAAAD9AAAA/wAAAAACAIAAgAMAAoAACwAPAAABAQEBAQEBAQEBAQEBAQEBAQABgAAAAIAAAP+AAAD+gAAAAQAAAP8A/4AAgAAA/4ACgAAA/4AAAP8AAAD/gAAAAIAAAAEAAAAAAAAA/wAAAAACAIAAgAMABAAACwAPAAABAQEBAQEBAQEBAQEBAQEBAgABAAAA/4AAAP6AAAABAAAA/wAAAAEA/oAAgAAA/4AEAAAA/QAAAP+AAAAAgAAAAQAAAACAAAD/gAAA/wAAAAABAIAAgAQABAAADQAAAQEBAQEBAQEBAQEBAQECAAIAAAD/AAAA/4AAAP6AAAD/gAAAAIAAAAEABAAAAP+AAAD9gAAA/4AAAACAAAABAAAAAIAAAAACAAAAAAQABAAAAwAHAAABAQEBAQEBAQAABAAAAPwAAQAAAAIAAAAEAAAA/AAAAAMA/gAAAAIAAAEAgACABAAEAAARAAABAQEBAQEBAQEBAQEBAQEBAQECAAIAAAD/AAAAAQAAAP8AAAD/gAAA/oAAAP+AAAAAgAAAAQAEAAAA/4AAAP+AAAD/gAAA/oAAAP+AAAAAgAAAAQAAAACAAAAAAQAAAAACgAKAAAsAAAEBAQEBAQEBAQEBAQAAAYAAAACAAAAAgAAA/wAAAP+AAAD/AAKAAAD/gAAA/4AAAP6AAAABAAAAAIAAAAAAAAEAAAAABAAEAAAFAAABAQEBAQEAAAQAAAD/AAAA/QAEAAAA/AAAAAMAAAAAAQCAAIAEAAQAABUAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQECAAIAAAD/AAAAAQAAAP8AAAABAAAA/wAAAP+AAAD+gAAA/4AAAACAAAABAAQAAAD/gAAA/4AAAP+AAAD/gAAA/4AAAP+AAAD/gAAAAIAAAAEAAAAAgAAAAAEBgAAABAACgAALAAABAQEBAQEBAQEBAQECgAGAAAD/AAAA/4AAAP8AAAAAgAAAAIACgAAA/wAAAP+AAAD/AAAAAYAAAACAAAAAAAABAAAAAAQABAAAEQAAAQEBAQEBAQEBAQEBAQEBAQEBAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAPwABAAAAP+AAAD/gAAA/4AAAP+AAAD/gAAA/4AAAP+AAAD/gAAAAAEAAAAABAABAAADAAABAQEBAAAEAAAA/AABAAAA/wAAAAAAAAEAAAAABAAEAAARAAABAQEBAQEBAQEBAQEBAQEBAQEDgACAAAD8AAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAEAAAA/AAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAAQAAAgAEAAQAAAMAAAEBAQEAAAQAAAD8AAQAAAD+AAAAAAAAAgCAAIACAAOAAAMABwAAAQEBAQEBAQEAgACAAAD/gAEAAIAAAP+AA4AAAP0AAAADAAAA/QAAAAAEAIAAgAQABAAAAwAHAAsADwAAAQEBAQEBAQEBAQEBAQEBAQCAA4AAAPyAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAABAAAAPyAAAADAP+AAAAAgP8A/4AAAACA/wD/gAAAAIAAAQAAAAAEAAQAAAUAAAEBAQEBAQMAAQAAAPwAAAADAAQAAAD8AAAAAQAAAAACAIAAgAQABAAAAwAHAAABAQEBAQEBAQCAA4AAAPyAAYAAAACAAAAEAAAA/IAAAAIA/4AAAACAAAMAgACABAAEAAADAAcACwAAAQEBAQEBAQEBAQEBAIADgAAA/IAAgAAAAIAAAAGAAAAAgAAABAAAAPyAAAADAP+AAAAAgP4A/4AAAACAAAAABAAAAIAEAAQAAAMABwALAA8AAAEBAQEBAQEBAQEBAQEBAQEAAAQAAAD8AAAABAAAAPwAAAAEAAAA/AAAAAQAAAD8AAQAAAD/gAAA/4AAAP+AAAD/gAAA/4AAAP+AAAD/gAAAAAYAgACABAAEAAADAAcACwAPABMAFwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAIADgAAA/IAAgAAAAIAAAAGAAAAAgAAA/oAAAACAAAD+gAAAAIAAAAGAAAAAgAAABAAAAPyAAAADAP+AAAAAgAAA/4AAAACA/wD/gAAAAID/AP+AAAAAgAAA/4AAAACAAAEAgACAAQADgAADAAABAQEBAIAAgAAA/4ADgAAA/QAAAAAAAAUAgACABAAEAAADAAcACwAPABMAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAIADgAAA/IAAgAAAAIAAAAGAAAAAgAAA/YAAAACAAAABgAAAAIAAAAQAAAD8gAAAAwD/gAAAAIAAAP+AAAAAgP4A/4AAAACAAAD/gAAAAIAAAAABAAADAAQABAAAAwAAAQEBAQAABAAAAPwABAAAAP8AAAAAAAAHAIAAgAQABAAAAwAHAAsADwATABcAGwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQCAA4AAAPyAAIAAAACAAAABgAAAAIAAAP2AAAAAgAAAAYAAAACAAAD9gAAAAIAAAAGAAAAAgAAABAAAAPyAAAADAP+AAAAAgAAA/4AAAACA/wD/gAAAAIAAAP+AAAAAgP8A/4AAAACAAAD/gAAAAIAAAAAEAAAAAAQAAgAAAwAHAAsADwAAAQEBAQEBAQEBAQEBAQEBAQAAAQAAAP8AAgABAAAA/wD/AAEAAAD/AAIAAQAAAP8AAgAAAP8AAAABAAAA/wAAAAAAAAD/AAAAAQAAAP8AAAAAAQAAAAAEAAQAAAkAAAEBAQEBAQEBAQEAAAEAAAABAAAAAQAAAAEAAAD8AAQAAAD/gAAA/4AAAP+AAAD9gAAAAAEBAAAAAgAEAAADAAABAQEBAQABAAAA/wAEAAAA/AAAAAAAAAEAAAAABAAEAAALAAABAQEBAQEBAQEBAQECgAGAAAD8AAAAAIAAAACAAAAAgAAAAQAEAAAA/AAAAAGAAAABAAAAAIAAAACAAAAAAAABAAABAAQAAgAAAwAAAQEBAQAABAAAAPwAAgAAAP8AAAAAAAABAAAAAAQABAAACwAAAQEBAQEBAQEBAQEBAgACAAAA/AAAAACAAAAAgAAAAIAAAACABAAAAPwAAAACAAAAAIAAAACAAAAAgAAAAAAAAQAAAAAEAAIAAAkAAAEBAQEBAQEBAQEDAAEAAAD8AAAAAQAAAAEAAAABAAIAAAD+AAAAAIAAAACAAAAAgAAAAAEAAAAABAAEAAALAAABAQEBAQEBAQEBAQEAAAIAAAAAgAAAAIAAAACAAAAAgAAA/AAEAAAA/4AAAP+AAAD/gAAA/4AAAP4AAAAAAAADAAAAAAQABAAAGwAnADMAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAAEAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAD/AAAA/4AAAP+AAAD/gAAA/4AAAP+AAAD/gAIAAYAAAACAAAD/gAAA/4AAAP+AAAD/gP4AAIAAAACAAAAAgAAAAIAAAP6AAAD/gAQAAAD/gAAA/4AAAP+AAAD/gAAA/4AAAP+AAAD/AAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAQAAAP+AAAD+gAAAAIAAAACAAAAAgAAA/oAAAP+AAAD/gAAA/4AAAP+AAAAAgAAAAAAAAQAAAAAEAAIAAAkAAAEBAQEBAQEBAQEAAAEAAAABAAAAAQAAAAEAAAD8AAIAAAD/gAAA/4AAAP+AAAD/gAAAAAEAAAAABAAEAAALAAABAQEBAQEBAQEBAQEAAAGAAAABAAAAAIAAAACAAAAAgAAA/AAEAAAA/4AAAP+AAAD/gAAA/wAAAP6AAAAAAAAEAAAAgAQABAAAAwAHAAsADwAAAQEBAQEBAQEBAQEBAQEBAQCAAYAAAP6AAgABgAAA/oD9gAGAAAD+gAIAAYAAAP6ABAAAAP6AAAABgAAA/oAAAP+AAAD+gAAAAYAAAP6AAAAAAQIAAgAEAAQAAAMAAAEBAQECAAIAAAD+AAQAAAD+AAAAAAAABACAAIAEAAQAAAMABwAjACcAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEAAAD/AAGAAQAAAP8A/gAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAA/4AAAP+AAAD/gAAA/4AAAP+AAAD/gAAA/4ABgACAAAD/gAQAAAD/gAAAAIAAAP+AAAAAAAAA/wAAAP+AAAD/gAAAAIAAAACAAAABAAAA/oAAAP+AAAD/gAAA/4AAAACAAAAAgAAAAIAAAAGAAAD/gAAAAAQAAAAABAAEAAADAAcACwAPAAABAQEBAQEBAQEBAQEBAQEBAAAAgAAA/4ADgACAAAD/gPyAAIAAAP+AA4AAgAAA/4AEAAAA/4AAAACAAAD/gAAA/QAAAP+AAAAAgAAA/4AAAAABAAAAAAIAAgAAAwAAAQEBAQAAAgAAAP4AAgAAAP4AAAAAAAAEAAAAAAIABAAAAwAHAAsADwAAAQEBAQEBAQEBAQEBAQEBAQAAAQAAAP8AAQABAAAA/wD/AAEAAAD/AAEAAQAAAP8ABAAAAP8AAAAAAAAA/wAAAAAAAAD/AAAAAAAAAP8AAAAAAQCAAQADgAOAABMAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAYABAAAA/4AAAAGAAAD+gAAAAIAAAP8AAAD/gAAA/4AAAACAAAAAgAOAAAD/gAAA/4AAAP+AAAD/gAAA/4AAAACAAAAAgAAAAIAAAACAAAAAAAABAQABAAOABAAAEwAAAQEBAQEBAQEBAQEBAQEBAQEBAQECAACAAAAAgAAAAIAAAP+AAAD/gAAA/4AAAP+AAAD/gAAAAIAAAACABAAAAP+AAAD/gAAA/wAAAACAAAD+gAAAAYAAAP+AAAABAAAAAIAAAAAAAAEBAAEABAADgAATAAABAQEBAQEBAQEBAQEBAQEBAQEBAQIAAQAAAACAAAAAgAAA/4AAAP+AAAD/AAAAAIAAAP6AAAABgAAA/4ADgAAA/4AAAP+AAAD/gAAA/4AAAP+AAAAAgAAAAIAAAACAAAAAgAAAAAAAAQEAAIADgAOAABMAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAgAAgAAAAIAAAACAAAD/gAAA/4AAAP+AAAD/gAAA/4AAAACAAAAAgAOAAAD+gAAAAIAAAP8AAAD/gAAA/4AAAACAAAAAgAAAAQAAAP+AAAAAAAABAQAAgAOABAAADwAAAQEBAQEBAQEBAQEBAQEBAQIAAIAAAACAAAAAgAAA/4AAAP6AAAD/gAAAAIAAAACABAAAAP8AAAD/AAAA/wAAAP+AAAAAgAAAAQAAAAEAAAAAAAACAIAAgAOAA4AAAwAJAAABAQEBAQEBAQEBAIADAAAA/QAAgAAAAgAAAP8AAAADgAAA/QAAAAKA/gAAAAEAAAABAAAAAAIAgACABAAEAAAbACcAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQECAACAAAAAgAAAAIAAAACAAAD/gAAA/4AAAP+AAAD/gAAA/4AAAP+AAAD/gAAAAIAAAACAAAAAgAAAAAD/gAAAAIAAAACAAAAAgAAA/4AAAAQAAAD/gAAA/4AAAP+AAAD/gAAA/4AAAP+AAAD/gAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAA/4D/gAAA/4AAAP+AAAAAgAAAAIAAAACAAAEAAAIABAADAAADAAABAQEBAAAEAAAA/AADAAAA/wAAAAAAAAEAAAAABAAEAAALAAABAQEBAQEBAQEBAQEAAAQAAAD/gAAA/4AAAP+AAAD/gAAA/gAEAAAA/gAAAP+AAAD/gAAA/4AAAP+AAAAAAAABAAACAAIABAAAAwAAAQEBAQAAAgAAAP4ABAAAAP4AAAAAAAACAQAAgAOAA4AAFwAbAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAYABgAAAAIAAAP8AAAAAgAAAAIAAAP8AAAD/gAAA/wAAAACAAAAAgAAA/wAAAACAAIAAAACAAAADgAAA/wAAAP+AAAD/gAAA/4AAAP+AAAAAgAAA/4AAAACAAAAAgAAAAIAAAACAAAAAgP+AAAAAgAADAAAAAAQABAAACwAnADMAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAgAGAAAD/gAAA/4AAAP+AAAD/gAAAAIACgAEAAAD/gAAA/4AAAP+AAAD/gAAA/4AAAP+AAAD/AAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgACAAIAAAP+AAAD+gAAAAIAAAACAAAAAgAQAAAD/gAAA/4AAAP+AAAD/gAAAAYAAAACAAAD/AAAA/4AAAP+AAAD/gAAA/4AAAP+AAAD/gAAAAQAAAACAAAAAgAAAAIAAAACAAAAAgAAA/oAAAP6AAAD/gAAAAIAAAACAAAAAgAAAAAAAAgCAAIADgAQAAA8AHwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEAAAABAAAAAIAAAP+AAAD/AAAA/wAAAP+AAAAAgAAAAQAAAAEAAAAAgAAA/4AAAP8AAAD/AAAA/4AAAACABAAAAP+AAAAAgAAA/wAAAP+AAAAAgAAA/4AAAAEAAAD+gAAA/4AAAACAAAD/AAAA/4AAAACAAAD/gAAAAQAAAAABAAAAAAQAA4AACwAAAQEBAQEBAQEBAQEBAQACAAAAAIAAAACAAAD8AAAAAIAAAACAA4AAAP+AAAD/gAAA/YAAAAKAAAAAgAAAAAAAAQAAAAACAAQAAA8AAAEBAQEBAQEBAQEBAQEBAQEAAACAAAAAgAAAAIAAAACAAAD/gAAA/4AAAP+AAAD/gAQAAAD/gAAA/4AAAP+AAAD/AAAA/4AAAP+AAAD/gAAAAAAAAQIAAAAEAAQAAA8AAAEBAQEBAQEBAQEBAQEBAQEDgACAAAD/gAAA/4AAAP+AAAD/gAAAAIAAAACAAAAAgAQAAAD8AAAAAIAAAACAAAAAgAAAAQAAAACAAAAAgAAAAAAAAQCAAIAEAAQAABcAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQIAAIAAAACAAAAAgAAAAIAAAP+AAAD/AAAA/4AAAP8AAAD/gAAAAIAAAACAAAAAgAQAAAD/gAAA/4AAAP+AAAD/gAAA/oAAAAEAAAD/AAAAAYAAAACAAAAAgAAAAIAAAAAAACAAAAAABAAEAAADAAcACwAPABMAFwAbAB8AIwAnACsALwAzADcAOwA/AEMARwBLAE8AUwBXAFsAXwBjAGcAawBvAHMAdwB7AH8AAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAAAgAAA/4ABAACAAAD/gAEAAIAAAP+AAQAAgAAA/4D9gACAAAD/gAEAAIAAAP+AAQAAgAAA/4ABAACAAAD/gPyAAIAAAP+AAQAAgAAA/4ABAACAAAD/gAEAAIAAAP+A/YAAgAAA/4ABAACAAAD/gAEAAIAAAP+AAQAAgAAA/4D8gACAAAD/gAEAAIAAAP+AAQAAgAAA/4ABAACAAAD/gP2AAIAAAP+AAQAAgAAA/4ABAACAAAD/gAEAAIAAAP+A/IAAgAAA/4ABAACAAAD/gAEAAIAAAP+AAQAAgAAA/4D9gACAAAD/gAEAAIAAAP+AAQAAgAAA/4ABAACAAAD/gAQAAAD/gAAAAIAAAP+AAAAAgAAA/4AAAACAAAD/gAAAAAAAAP+AAAAAgAAA/4AAAACAAAD/gAAAAIAAAP+AAAAAAAAA/4AAAACAAAD/gAAAAIAAAP+AAAAAgAAA/4AAAAAAAAD/gAAAAIAAAP+AAAAAgAAA/4AAAACAAAD/gAAAAAAAAP+AAAAAgAAA/4AAAACAAAD/gAAAAIAAAP+AAAAAAAAA/4AAAACAAAD/gAAAAIAAAP+AAAAAgAAA/4AAAAAAAAD/gAAAAIAAAP+AAAAAgAAA/4AAAACAAAD/gAAAAAAAAP+AAAAAgAAA/4AAAACAAAD/gAAAAIAAAP+AAAAAAQAAAAAEAAQAAAsAAAEBAQEBAQEBAQEBAQAABAAAAP6AAAD/AAAA/4AAAP+AAAD/gAQAAAD8AAAAAIAAAACAAAAAgAAAAQAAAAAAAAEAAAAABAAEAAALAAABAQEBAQEBAQEBAQEAAAQAAAD/gAAA/4AAAP+AAAD/AAAA/oAEAAAA/oAAAP8AAAD/gAAA/4AAAP+AAAAAAAABAAABgAKABAAADwAAAQEBAQEBAQEBAQEBAQEBAQAAAQAAAACAAAAAgAAAAIAAAP8AAAD/gAAA/4AAAP+ABAAAAP+AAAD/gAAA/4AAAP8AAAAAgAAAAIAAAACAAAAAAAABAAAAAAKABAAADwAAAQEBAQEBAQEBAQEBAQEBAQAAAQAAAACAAAAAgAAAAIAAAP8AAAD/gAAA/4AAAP+ABAAAAP+AAAD/gAAA/4AAAP2AAAACAAAAAIAAAACAAAAAAAABAYAAAAQAAoAABQAAAQEBAQEBAYACgAAA/oAAAP8AAoAAAP8AAAD+gAAAAAEAAAAABAAEAAAJAAABAQEBAQEBAQEBAAACgAAAAIAAAACAAAAAgAAA/AAEAAAA/wAAAP8AAAD/AAAA/wAAAAACAAAAAAQABAAAGwAfAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQGAAQAAAACAAAAAgAAAAIAAAP+AAAD/gAAA/4AAAP8AAAD/gAAA/4AAAP+AAAAAgAAAAIAAAACAAAAAAAEAAAAEAAAA/4AAAP+AAAD/gAAA/wAAAP+AAAD/gAAA/4AAAACAAAAAgAAAAIAAAAEAAAAAgAAAAIAAAP8A/wAAAAEAAAEBgAGABAAEAAAFAAABAQEBAQEBgAEAAAABgAAA/YAEAAAA/oAAAP8AAAAAAQAAAAACgAKAAA8AAAEBAQEBAQEBAQEBAQEBAQEBgAEAAAD/gAAA/4AAAP+AAAD/AAAAAIAAAACAAAAAgAKAAAD/AAAA/4AAAP+AAAD/gAAAAQAAAACAAAAAgAAAAAAAAQGAAAAEAAQAAA8AAAEBAQEBAQEBAQEBAQEBAQEDAAEAAAD/gAAA/4AAAP+AAAD/AAAAAIAAAACAAAAAgAQAAAD/AAAA/4AAAP+AAAD+AAAAAoAAAACAAAAAgAAAAAAAAQGAAAAEAAKAAA8AAAEBAQEBAQEBAQEBAQEBAQEBgAEAAAAAgAAAAIAAAACAAAD/AAAA/4AAAP+AAAD/gAKAAAD/gAAA/4AAAP+AAAD/AAAAAIAAAACAAAAAgAAAAAAAAQGAAYAEAAQAAA8AAAEBAQEBAQEBAQEBAQEBAQEDAAEAAAD/gAAA/4AAAP+AAAD/AAAAAIAAAACAAAAAgAQAAAD/AAAA/4AAAP+AAAD/gAAAAQAAAACAAAAAgAAAAAAAAQAAAAAEAAQAABsAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAAEAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAD/AAAA/4AAAP+AAAD/gAAA/4AAAP+AAAD/gAQAAAD/gAAA/4AAAP+AAAD/gAAA/4AAAP+AAAD/AAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAAAAAQAAAAAEAAQAAB8AAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAABAAAAAIAAAAEAAAAAgAAAAQAAAP+AAAD/gAAA/4AAAP+AAAD/gAAA/4AAAP8AAAAAgAAAAIAAAP+AAAD/gAQAAAD/gAAA/4AAAACAAAAAgAAA/wAAAP+AAAD/gAAA/4AAAP+AAAD/gAAA/4AAAAEAAAAAgAAAAQAAAACAAAAAAAABAAABgAQABAAADwAAAQEBAQEBAQEBAQEBAQEBAQAAAQAAAACAAAAAgAAAAgAAAP2AAAD/gAAA/4AAAP+ABAAAAP+AAAD/gAAA/4AAAP8AAAAAgAAAAIAAAACAAAAAAAABAAABgAQAAoAAAwAAAQEBAQAABAAAAPwAAoAAAP8AAAAAAAABAYAAAAKABAAAAwAAAQEBAQGAAQAAAP8ABAAAAPwAAAAAAAABAYAAAAQABAAAFwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAwABAAAA/4AAAP+AAAAAgAAAAIAAAP8AAAD/gAAA/4AAAP+AAAAAgAAAAIAAAACABAAAAP8AAAD/gAAA/wAAAP+AAAD/AAAAAIAAAACAAAAAgAAAAQAAAACAAAAAgAAAAAAAAQAAAAAEAAKAAA8AAAEBAQEBAQEBAQEBAQEBAQEAAAKAAAAAgAAAAIAAAACAAAD/AAAA/4AAAP+AAAD+AAKAAAD/gAAA/4AAAP+AAAD/AAAAAIAAAACAAAAAgAAAAAAAAQAAAYAEAAQAAA8AAAEBAQEBAQEBAQEBAQEBAQEDAAEAAAD/gAAA/4AAAP+AAAD9gAAAAgAAAACAAAAAgAQAAAD/AAAA/4AAAP+AAAD/gAAAAQAAAACAAAAAgAAAAAAAAQAAAgAEAAQAAA8AAAEBAQEBAQEBAQEBAQEBAQEAAAQAAAD/gAAA/4AAAP+AAAD/AAAA/4AAAP+AAAD/gAQAAAD/gAAA/4AAAP+AAAD/gAAAAIAAAACAAAAAgAAAAAAAAQAAAYACgAKAAAMAAAEBAQEAAAKAAAD9gAKAAAD/AAAAAAAAAQGAAAACgAKAAAMAAAEBAQEBgAEAAAD/AAKAAAD9gAAAAAAAAQAAAYAEAAQAABcAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQAAAQAAAACAAAABAAAAAIAAAAEAAAD/gAAA/4AAAP+AAAD/AAAA/4AAAP+AAAD/gAQAAAD/gAAA/4AAAACAAAAAgAAA/wAAAP+AAAD/gAAA/4AAAACAAAAAgAAAAIAAAAAAAAEAAAAABAAEAAAJAAABAQEBAQEBAQEBAYACgAAA/AAAAACAAAAAgAAAAIAEAAAA/AAAAAEAAAABAAAAAQAAAAABAAAAAAQABAAAEwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEDAAEAAAD/gAAA/4AAAP+AAAD/AAAA/oAAAAEAAAABAAAAAIAAAACABAAAAP6AAAD/AAAA/4AAAP+AAAD/gAAAAQAAAACAAAAAgAAAAQAAAAAAAAEAAAAABAAEAAATAAABAQEBAQEBAQEBAQEBAQEBAQEBAQAAAQAAAACAAAAAgAAAAQAAAAEAAAD+gAAA/wAAAP+AAAD/gAAA/4AEAAAA/wAAAP8AAAD/gAAA/4AAAP8AAAAAgAAAAIAAAACAAAABAAAAAAAAAQAAAAAEAAQAABsAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEDAAEAAAD/gAAA/4AAAP+AAAD/gAAA/4AAAP+AAAD/AAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAQAAAD/AAAA/4AAAP+AAAD/gAAA/4AAAP+AAAD/gAAAAQAAAACAAAAAgAAAAIAAAACAAAAAgAAAAAAAAQAAAAACgAQAABcAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQAAAQAAAACAAAAAgAAAAIAAAP+AAAD/gAAA/4AAAP8AAAAAgAAAAIAAAP+AAAD/gAQAAAD/gAAA/4AAAP+AAAD/AAAA/4AAAP+AAAD/gAAAAQAAAACAAAABAAAAAIAAAAAAAAEAAAAABAAEAAAfAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQAAAQAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAP8AAAD/gAAA/wAAAP+AAAD/AAAAAIAAAACAAAD/gAAA/4AEAAAA/4AAAP+AAAD/gAAA/4AAAP+AAAD/gAAA/wAAAACAAAAAgAAA/4AAAP+AAAABAAAAAIAAAAEAAAAAgAAAAAAAAQAAAAACgAQAAA8AAAEBAQEBAQEBAQEBAQEBAQEBgAEAAAD/gAAA/4AAAP+AAAD/AAAAAIAAAACAAAAAgAQAAAD9gAAA/4AAAP+AAAD/gAAAAQAAAACAAAAAgAAAAAAAAQGAAAAEAAQAAA8AAAEBAQEBAQEBAQEBAQEBAQEBgAEAAAAAgAAAAIAAAACAAAD/AAAA/4AAAP+AAAD/gAQAAAD+AAAA/4AAAP+AAAD/AAAAAIAAAACAAAAAgAAAAAAAAQAAAAAEAAKAAA8AAAEBAQEBAQEBAQEBAQEBAQEBgAKAAAD+AAAA/4AAAP+AAAD/AAAAAIAAAACAAAAAgAKAAAD/AAAA/4AAAP+AAAD/gAAAAQAAAACAAAAAgAAAAAAAAQGAAYACgAQAAAMAAAEBAQEBgAEAAAD/AAQAAAD9gAAAAAAAAQGAAYAEAAKAAAMAAAEBAQEBgAKAAAD9gAKAAAD/AAAAAAAAAQAAAAAEAAQAAB8AAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAwABAAAA/4AAAP+AAAAAgAAAAIAAAP8AAAD/gAAA/wAAAP+AAAD/AAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAQAAAD/AAAA/4AAAP8AAAD/gAAA/wAAAACAAAAAgAAA/4AAAP+AAAABAAAAAIAAAACAAAAAgAAAAIAAAACAAAAAAAABAAAAAAQABAAAIwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAABAAAAAIAAAAEAAAAAgAAAAQAAAP+AAAD/gAAAAIAAAACAAAD/AAAA/4AAAP8AAAD/gAAA/wAAAACAAAAAgAAA/4AAAP+ABAAAAP+AAAD/gAAAAIAAAACAAAD/AAAA/4AAAP8AAAD/gAAA/wAAAACAAAAAgAAA/4AAAP+AAAABAAAAAIAAAAEAAAAAgAAAAAAAAQGAAYACgAKAAAMAAAEBAQEBgAEAAAD/AAKAAAD/AAAAAAAAAQAAAAAEAAKAABcAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQGAAQAAAACAAAAAgAAAAIAAAP8AAAD/gAAA/wAAAP+AAAD/AAAAAIAAAACAAAAAgAKAAAD/gAAA/4AAAP+AAAD/AAAAAIAAAACAAAD/gAAA/4AAAAEAAAAAgAAAAIAAAAAAAAEAAAGAAoAEAAAFAAABAQEBAQEBgAEAAAD9gAAAAYAEAAAA/YAAAAEAAAAAAQAAAAACgAKAAAUAAAEBAQEBAQAAAoAAAP8AAAD+gAKAAAD9gAAAAYAAAAABAAAAAAQABAAAHwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAAEAAAAAgAAAAQAAAACAAAABAAAA/4AAAP+AAAAAgAAAAIAAAP8AAAD/gAAA/4AAAP+AAAD/gAAA/4AAAP+ABAAAAP+AAAD/gAAAAIAAAACAAAD/AAAA/4AAAP8AAAD/gAAA/wAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAAAAAAEAAAAABAAEAAALAAABAQEBAQEBAQEBAQEBgAEAAAABgAAA/oAAAP8AAAD+gAAAAYAEAAAA/oAAAP8AAAD+gAAAAYAAAAEAAAAAAAABAAAAAAQAAoAABwAAAQEBAQEBAQEAAAQAAAD+gAAA/wAAAP6AAoAAAP8AAAD+gAAAAYAAAAAAAAEBgAAABAAEAAAHAAABAQEBAQEBAQGAAQAAAAGAAAD+gAAA/wAEAAAA/oAAAP8AAAD+gAAAAAAAAQAAAAACgAQAAAcAAAEBAQEBAQEBAYABAAAA/wAAAP6AAAABgAQAAAD8AAAAAYAAAAEAAAAAAAABAAABgAQABAAABwAAAQEBAQEBAQEBgAEAAAABgAAA/AAAAAGABAAAAP6AAAD/AAAAAQAAAAAAAAQBAAEAAwADAAADAAcACwAPAAABAQEBAQEBAQEBAQEBAQEBAYABAAAA/wD/gACAAAD/gAGAAIAAAP+A/wABAAAA/wADAAAA/4AAAAAAAAD/AAAAAQAAAP8AAAAAAAAA/4AAAAACAIAAgAOAA4AACwAPAAABAQEBAQEBAQEBAQEBAQEBAQACAAAAAIAAAP+AAAD+AAAA/4AAAACAAIAAAAEAAAADgAAA/4AAAP4AAAD/gAAAAIAAAAIAAAD/gP8AAAABAAACAAAAAAQABAAAEwAfAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAgAAAACAAAAAgAAA/4AAAP+AAAD+AAAA/4AAAP+AAAAAgAAAAIAAgAAA/4AAAACAAAABAAAAAIAAAP+AAAAEAAAA/4AAAP+AAAD+AAAA/4AAAP+AAAAAgAAAAIAAAAIAAAAAgAAA/4D/gAAA/wAAAP+AAAAAgAAAAQAAAACAABAAAAAABAAEAAADAAcACwAPABMAFwAbAB8AIwAnACsALwAzADcAOwA/AAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAYAAgAAA/4ACAACAAAD/gP2AAIAAAP+AAgAAgAAA/4D9gACAAAD/gAIAAIAAAP+A/YAAgAAA/4ACAACAAAD/gP+AAIAAAP+AAgAAgAAA/4D9gACAAAD/gAIAAIAAAP+A/YAAgAAA/4ACAACAAAD/gP2AAIAAAP+AAgAAgAAA/4AEAAAA/4AAAACAAAD/gAAAAAAAAP+AAAAAgAAA/4AAAAAAAAD/gAAAAIAAAP+AAAAAAAAA/4AAAACAAAD/gAAAAAAAAP+AAAAAgAAA/4AAAAAAAAD/gAAAAIAAAP+AAAAAAAAA/4AAAACAAAD/gAAAAAAAAP+AAAAAgAAA/4AAAAAQAAAAAAQABAAAAwAHAAsADwATABcAGwAfACMAJwArAC8AMwA3ADsAPwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQAAAIAAAP+AAgAAgAAA/4D+gACAAAD/gAIAAIAAAP+A/oAAgAAA/4ACAACAAAD/gP6AAIAAAP+AAgAAgAAA/4D8gACAAAD/gAIAAIAAAP+A/oAAgAAA/4ACAACAAAD/gP6AAIAAAP+AAgAAgAAA/4D+gACAAAD/gAIAAIAAAP+ABAAAAP+AAAAAgAAA/4AAAAAAAAD/gAAAAIAAAP+AAAAAAAAA/4AAAACAAAD/gAAAAAAAAP+AAAAAgAAA/4AAAAAAAAD/gAAAAIAAAP+AAAAAAAAA/4AAAACAAAD/gAAAAAAAAP+AAAAAgAAA/4AAAAAAAAD/gAAAAIAAAP+AAAAAAwCAAIADgAQAABcAGwAfAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQIAAIAAAAEAAAD/AAAAAIAAAP+AAAABAAAA/wAAAP+AAAD/AAAA/4AAAACAAAABAP+AAAAAgAAA/4AAAACAAAAEAAAA/4AAAP+AAAD/gAAA/4AAAP+AAAD/gAAA/4AAAACAAAAAgAAAAYAAAACAAAD/gP+AAAAAgP8A/4AAAACAAAAAAQCAAIADgAOAAA8AAAEBAQEBAQEBAQEBAQEBAQEBAAIAAAAAgAAA/4AAAP+AAAD/AAAA/4AAAP+AAAAAgAOAAAD/gAAA/wAAAP+AAAD/AAAAAQAAAACAAAABAAAAAAAAAgCAAIADgAOAAAMACQAAAQEBAQEBAQEBAQCAAwAAAP0AAYAAAP8AAAACAAAAA4AAAP0AAAACgP8AAAD/AAAAAgAAAAABAIAAgAOAA4AAAwAAAQEBAQCAAwAAAP0AA4AAAP0AAAAAAAACAIAAgAOAA4AAAwALAAABAQEBAQEBAQEBAQEAgAMAAAD9AACAAAACAAAA/4AAAP8AAAADgAAA/QAAAAKA/gAAAAIAAAD/AAAAAQAAAQAAAAAEAAQAABMAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQACAAAAAIAAAACAAAD/gAAA/4AAAP4AAAD/gAAA/4AAAACAAAAAgAQAAAD/gAAA/4AAAP4AAAD/gAAA/4AAAACAAAAAgAAAAgAAAACAAAAAAAABAQABAAMAAwAACwAAAQEBAQEBAQEBAQEBAYABAAAAAIAAAP+AAAD/AAAA/4AAAACAAwAAAP+AAAD/AAAA/4AAAACAAAABAAAAAAAAAQCAAQAEAAQAABsAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQECAACAAAAAgAAAAQAAAP+AAAD/gAAAAIAAAP8AAAD/gAAA/wAAAACAAAD/gAAA/4AAAAEAAAAAgAQAAAD/gAAA/4AAAP+AAAD/gAAA/4AAAP+AAAAAgAAA/4AAAACAAAAAgAAAAIAAAACAAAAAgAAAAAAABgCAAIAEAAQAAAMABwALAA8AEwAXAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAgAOAAAD8gAEAAAAAgAAAAIAAAACAAAD+AAAAAIAAAAGAAAAAgAAA/gAAAAGAAAAEAAAA/IAAAAMA/wAAAAEAAAD/AAAAAQD+gP+AAAAAgAAA/4AAAACA/4D/gAAAAIAABgCAAIAEAAQAAAMABwALAA8AEwAXAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAgAOAAAD8gAEAAAAAgAAAAIAAAACAAAD+gAAAAYAAAP4AAAAAgAAAAYAAAACAAAAEAAAA/IAAAAMA/wAAAAEAAAD/AAAAAQD+gP+AAAAAgP+A/4AAAACAAAD/gAAAAIAABgCAAIAEAAQAABMAFwAbAB8AIwAnAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAgAAgAAAAIAAAAEAAAD/AAAA/4AAAP+AAAD/gAAA/wAAAAEAAAAAgAAAAAAAgAAA/oAAgAAA/4ACAACAAAD/gP4AAIAAAP+AAgAAgAAA/4AEAAAA/wAAAP+AAAD/gAAA/4AAAP8AAAABAAAAAIAAAACAAAAAgAAA/4D/gAAAAIABAAAA/4AAAACAAAD/gAAA/oAAAP+AAAAAgAAA/4AAAAACAQAAgAOABAAAFwAbAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAYABgAAAAIAAAP+AAAD/gAAAAIAAAP+AAAD/gAAA/4AAAACAAAD/gAAAAQAAAP8A/4AAgAAA/4AEAAAA/4AAAP8AAAD/gAAA/4AAAP+AAAD/gAAAAIAAAACAAAAAgAAAAIAAAAEAAAAAAAAA/wAAAAACAIAAgAQABAAAFwAbAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAYACgAAA/4AAAP+AAAD/gAAAAIAAAP+AAAD+gAAAAQAAAP8AAAABAAAAAIAAAP8A/wAAgAAA/4AEAAAA/gAAAAEAAAD/gAAA/4AAAP8AAAD/gAAAAIAAAAEAAAAAgAAAAIAAAACAAAD+gAAA/wAAAAABAIAAgAQABAAAGwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQIAAIAAAACAAAAAgAAAAIAAAP8AAAD/gAAAAIAAAP6AAAAAgAAA/4AAAP8AAAAAgAAAAIAAAACABAAAAP+AAAD/gAAA/4AAAP8AAAAAgAAA/wAAAP+AAAAAgAAAAQAAAP+AAAABAAAAAIAAAACAAAAAAAABAIAAgAQABAAAGwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQGAAYAAAP+AAAAAgAAAAQAAAP8AAAD/gAAAAIAAAP6AAAAAgAAA/4AAAP8AAAABAAAAAIAAAP+ABAAAAP8AAAD/gAAAAIAAAP6AAAAAgAAA/wAAAP+AAAAAgAAAAQAAAP+AAAABgAAA/4AAAACAAAAAAAABAIAAgAQABAAAFwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAAAAAIAAAAEAAAAAgAAA/4AAAP+AAAD/gAAA/4AAAP+AAAD/gAAA/4AAAACABAAAAP+AAAAAgAAA/4AAAP6AAAD/gAAA/4AAAP+AAAAAgAAAAIAAAACAAAABgAAAAAAAAQCAAIAEAAQAABsAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQECAACAAAAAgAAAAIAAAACAAAD/gAAA/4AAAP+AAAD/gAAA/4AAAP+AAAD/gAAAAIAAAACAAAAAgAQAAAD/gAAA/4AAAP+AAAD/gAAA/4AAAP+AAAD/gAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAAAAAQEAAIADgAQAAAsAAAEBAQEBAQEBAQEBAQIAAYAAAP8AAAD/gAAA/wAAAACAAAAAgAQAAAD/AAAA/gAAAP+AAAABAAAAAIAAAAAAAAEAgACABAAEAAATAAABAQEBAQEBAQEBAQEBAQEBAQEBAQGAAoAAAP+AAAD/AAAAAIAAAACAAAD+gAAA/4AAAP8AAAAAgAAAAIAEAAAA/QAAAP+AAAABAAAAAIAAAAEAAAD+AAAA/4AAAAEAAAAAgAAAAAAAAAAYASYAAQAAAAAAAAAIAAAAAQAAAAAAAQAIAAgAAQAAAAAAAgAHABAAAQAAAAAAAwAIABcAAQAAAAAABAAQAB8AAQAAAAAABQALAC8AAQAAAAAABgAIADoAAQAAAAAACQAJAEIAAQAAAAAACgA6AEsAAQAAAAAADQARAIUAAQAAAAAADgAyAJYAAQAAAAAAEwAMAMgAAwABBAkAAAAQANQAAwABBAkAAQAQAOQAAwABBAkAAgAOAPQAAwABBAkAAwAQAQIAAwABBAkABAAgARIAAwABBAkABQAWATIAAwABBAkABgAQAUgAAwABBAkACQASAVgAAwABBAkACgB0AWoAAwABBAkADQAiAd4AAwABBAkADgBkAgAAAwABBAkAEwAYAmQoYykgMjAyMlVyc2FGb250UmVndWxhclVyc2FGb250VXJzYUZvbnQgUmVndWxhclZlcnNpb24gMS4wVXJzYUZvbnRVcnNhRnJhbmtBbiBvcGVuIGxpY2VuY2UgZ2VuZXJhbCBwdXJwb3NlIHRleHRtb2RlIGZvbnQgYnkgVXJzYUZyYW5rQ0MwIDEuMCBVbml2ZXJzYWxodHRwczovL2NyZWF0aXZlY29tbW9ucy5vcmcvcHVibGljZG9tYWluL3plcm8vMS4wL0hlbGxvIFdvcmxkIQAoAGMAKQAgADIAMAAyADIAVQByAHMAYQBGAG8AbgB0AFIAZQBnAHUAbABhAHIAVQByAHMAYQBGAG8AbgB0AFUAcgBzAGEARgBvAG4AdAAgAFIAZQBnAHUAbABhAHIAVgBlAHIAcwBpAG8AbgAgADEALgAwAFUAcgBzAGEARgBvAG4AdABVAHIAcwBhAEYAcgBhAG4AawBBAG4AIABvAHAAZQBuACAAbABpAGMAZQBuAGMAZQAgAGcAZQBuAGUAcgBhAGwAIABwAHUAcgBwAG8AcwBlACAAdABlAHgAdABtAG8AZABlACAAZgBvAG4AdAAgAGIAeQAgAFUAcgBzAGEARgByAGEAbgBrAEMAQwAwACAAMQAuADAAIABVAG4AaQB2AGUAcgBzAGEAbABoAHQAdABwAHMAOgAvAC8AYwByAGUAYQB0AGkAdgBlAGMAbwBtAG0AbwBuAHMALgBvAHIAZwAvAHAAdQBiAGwAaQBjAGQAbwBtAGEAaQBuAC8AegBlAHIAbwAvADEALgAwAC8ASABlAGwAbABvACAAVwBvAHIAbABkACEAAAADAAAAAAAAAGYAMwAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==\r
808
1042
  `;
809
- class q {
1043
+ class cA {
810
1044
  /**
811
1045
  * Extracts all available characters from a font's cmap tables.
812
1046
  * @param font The parsed font object from Typr
@@ -837,10 +1071,10 @@ class q {
837
1071
  for (let t = 0; t < A.startCount.length; t++) {
838
1072
  const r = A.startCount[t], i = A.endCount[t];
839
1073
  if (!(r === 65535 && i === 65535)) {
840
- for (let a = r; a <= i; a++)
841
- if (this._calculateGlyphIndexFormat4(A, a, t) > 0) {
842
- const B = String.fromCodePoint(a);
843
- e.push(B);
1074
+ for (let s = r; s <= i; s++)
1075
+ if (this._calculateGlyphIndexFormat4(A, s, t) > 0) {
1076
+ const g = String.fromCodePoint(s);
1077
+ e.push(g);
844
1078
  }
845
1079
  }
846
1080
  }
@@ -856,11 +1090,11 @@ class q {
856
1090
  if (!A.groups)
857
1091
  return e;
858
1092
  for (let t = 0; t < A.groups.length; t += 3) {
859
- const r = A.groups[t], i = A.groups[t + 1], a = A.groups[t + 2];
860
- for (let s = r; s <= i; s++)
861
- if (a + (s - r) > 0) {
862
- const g = String.fromCodePoint(s);
863
- e.push(g);
1093
+ const r = A.groups[t], i = A.groups[t + 1], s = A.groups[t + 2];
1094
+ for (let o = r; o <= i; o++)
1095
+ if (s + (o - r) > 0) {
1096
+ const B = String.fromCodePoint(o);
1097
+ e.push(B);
864
1098
  }
865
1099
  }
866
1100
  return e;
@@ -903,15 +1137,15 @@ class q {
903
1137
  return !(e >= 0 && e <= 31 && e !== 9 && e !== 10 && e !== 13 || e >= 127 && e <= 159);
904
1138
  }
905
1139
  }
906
- class AA {
1140
+ class uA {
907
1141
  /**
908
1142
  * Creates a new TextureAtlasCreation instance.
909
1143
  * @param renderer The WebGL renderer instance
910
1144
  */
911
1145
  constructor(A) {
912
- o(this, "_textureCanvas");
913
- o(this, "_textureContext");
914
- o(this, "_renderer");
1146
+ a(this, "_textureCanvas");
1147
+ a(this, "_textureContext");
1148
+ a(this, "_renderer");
915
1149
  this._renderer = A, this._textureCanvas = document.createElement("canvas"), this._textureContext = this._textureCanvas.getContext("2d", { willReadFrequently: !0, alpha: !1 });
916
1150
  }
917
1151
  /**
@@ -923,13 +1157,13 @@ class AA {
923
1157
  * @returns Object containing framebuffer, columns, and rows
924
1158
  */
925
1159
  createTextureAtlas(A, e, t, r) {
926
- const i = A.length, a = Math.ceil(Math.sqrt(i)), s = Math.ceil(i / a), B = e.width * a, g = e.height * s;
927
- this._setupCanvas(B, g, t, r), this._renderCharactersToCanvas(A, e, a, t), this._applyBlackWhiteThreshold();
928
- const E = this._renderer.createFramebuffer(B, g, { filter: "nearest" });
1160
+ const i = A.length, s = Math.ceil(Math.sqrt(i)), o = Math.ceil(i / s), g = e.width * s, B = e.height * o;
1161
+ this._setupCanvas(g, B, t, r), this._renderCharactersToCanvas(A, e, s, t), this._applyBlackWhiteThreshold();
1162
+ const E = this._renderer.createFramebuffer(g, B, { filter: "nearest" });
929
1163
  return E.update(this._textureCanvas), {
930
1164
  framebuffer: E,
931
- columns: a,
932
- rows: s
1165
+ columns: s,
1166
+ rows: o
933
1167
  };
934
1168
  }
935
1169
  /**
@@ -953,8 +1187,8 @@ class AA {
953
1187
  */
954
1188
  _renderCharactersToCanvas(A, e, t, r) {
955
1189
  for (let i = 0; i < A.length; i++) {
956
- const a = i % t, s = Math.floor(i / t), B = a * e.width + e.width * 0.5, g = s * e.height + e.height * 0.5, E = Math.round(B - e.width * 0.5), l = Math.round(g - r * 0.5);
957
- this._textureContext.fillText(A[i].character, E, l);
1190
+ const s = i % t, o = Math.floor(i / t), g = s * e.width + e.width * 0.5, B = o * e.height + e.height * 0.5, E = Math.round(g - e.width * 0.5), Q = Math.round(B - r * 0.5);
1191
+ this._textureContext.fillText(A[i].character, E, Q);
958
1192
  }
959
1193
  }
960
1194
  /**
@@ -966,19 +1200,19 @@ class AA {
966
1200
  _applyBlackWhiteThreshold(A = 128) {
967
1201
  const e = this._textureContext.getImageData(0, 0, this._textureCanvas.width, this._textureCanvas.height), t = e.data;
968
1202
  for (let r = 0; r < t.length; r += 4) {
969
- const i = 0.299 * t[r] + 0.587 * t[r + 1] + 0.114 * t[r + 2], a = A + 32, s = i > a ? 255 : 0;
970
- t[r] = s, t[r + 1] = s, t[r + 2] = s;
1203
+ const i = 0.299 * t[r] + 0.587 * t[r + 1] + 0.114 * t[r + 2], s = A + 32, o = i > s ? 255 : 0;
1204
+ t[r] = o, t[r + 1] = o, t[r + 2] = o;
971
1205
  }
972
1206
  this._textureContext.putImageData(e, 0, 0);
973
1207
  }
974
1208
  }
975
- class eA {
1209
+ class dA {
976
1210
  /**
977
1211
  * Creates a new MetricsCalculation instance.
978
1212
  */
979
1213
  constructor() {
980
- o(this, "_tempCanvas");
981
- o(this, "_tempContext");
1214
+ a(this, "_tempCanvas");
1215
+ a(this, "_tempContext");
982
1216
  this._tempCanvas = document.createElement("canvas"), this._tempContext = this._tempCanvas.getContext("2d");
983
1217
  }
984
1218
  /**
@@ -992,9 +1226,9 @@ class eA {
992
1226
  calculateMaxGlyphDimensions(A, e, t) {
993
1227
  this._tempContext.font = `${e}px ${t}`;
994
1228
  let r = 0, i = 0;
995
- for (const a of A) {
996
- const s = this._tempContext.measureText(a), B = s.width, g = s.actualBoundingBoxAscent + s.actualBoundingBoxDescent;
997
- B > 0 && (r = Math.max(r, B), i = Math.max(i, g));
1229
+ for (const s of A) {
1230
+ const o = this._tempContext.measureText(s), g = o.width, B = o.actualBoundingBoxAscent + o.actualBoundingBoxDescent;
1231
+ g > 0 && (r = Math.max(r, g), i = Math.max(i, B));
998
1232
  }
999
1233
  return {
1000
1234
  width: Math.ceil(r),
@@ -1002,7 +1236,7 @@ class eA {
1002
1236
  };
1003
1237
  }
1004
1238
  }
1005
- class tA {
1239
+ class CA {
1006
1240
  /**
1007
1241
  * Creates TextmodeCharacter objects with unique color assignments.
1008
1242
  * @param characters Array of character strings
@@ -1011,17 +1245,17 @@ class tA {
1011
1245
  */
1012
1246
  createCharacterObjects(A, e) {
1013
1247
  return A.map((t, r) => {
1014
- const i = t.codePointAt(0) || 0, a = this._generateCharacterColor(r);
1015
- let s = 0;
1248
+ const i = t.codePointAt(0) || 0, s = this._generateCharacterColor(r);
1249
+ let o = 0;
1016
1250
  if (e.hmtx && e.hmtx.aWidth) {
1017
- const B = this._getGlyphIndex(e, i);
1018
- B > 0 && e.hmtx.aWidth[B] !== void 0 && (s = e.hmtx.aWidth[B]);
1251
+ const g = this._getGlyphIndex(e, i);
1252
+ g > 0 && e.hmtx.aWidth[g] !== void 0 && (o = e.hmtx.aWidth[g]);
1019
1253
  }
1020
1254
  return {
1021
1255
  character: t,
1022
1256
  unicode: i,
1023
- color: a,
1024
- advanceWidth: s
1257
+ color: s,
1258
+ advanceWidth: o
1025
1259
  };
1026
1260
  });
1027
1261
  }
@@ -1042,11 +1276,11 @@ class tA {
1042
1276
  if (r.idRangeOffset[i] === 0)
1043
1277
  return e + r.idDelta[i] & 65535;
1044
1278
  {
1045
- const a = r.idRangeOffset[i] / 2 + (e - r.startCount[i]) - (r.startCount.length - i);
1046
- if (a >= 0 && a < r.glyphIdArray.length) {
1047
- const s = r.glyphIdArray[a];
1048
- if (s !== 0)
1049
- return s + r.idDelta[i] & 65535;
1279
+ const s = r.idRangeOffset[i] / 2 + (e - r.startCount[i]) - (r.startCount.length - i);
1280
+ if (s >= 0 && s < r.glyphIdArray.length) {
1281
+ const o = r.glyphIdArray[s];
1282
+ if (o !== 0)
1283
+ return o + r.idDelta[i] & 65535;
1050
1284
  }
1051
1285
  }
1052
1286
  }
@@ -1069,7 +1303,7 @@ class tA {
1069
1303
  * @returns RGB color as a tuple [r, g, b], or [0, 0, 0] if not found
1070
1304
  */
1071
1305
  getCharacterColor(A, e) {
1072
- if (!u.validate(
1306
+ if (!C.validate(
1073
1307
  typeof A == "string" && A.length === 1,
1074
1308
  "Character must be a single character string.",
1075
1309
  { method: "getCharacterColor", providedValue: A }
@@ -1085,14 +1319,14 @@ class tA {
1085
1319
  * @returns Array of RGB colors for each character
1086
1320
  */
1087
1321
  getCharacterColors(A, e) {
1088
- return u.validate(
1322
+ return C.validate(
1089
1323
  typeof A == "string" && A.length > 0,
1090
1324
  "Characters must be a string with at least one character.",
1091
1325
  { method: "getCharacterColors", providedValue: A }
1092
1326
  ) ? A.split("").map((t) => this.getCharacterColor(t, e) || [0, 0, 0]) : [[0, 0, 0]];
1093
1327
  }
1094
1328
  }
1095
- class rA {
1329
+ class fA {
1096
1330
  /**
1097
1331
  * Creates a new TextmodeFont instance.
1098
1332
  * @param renderer Renderer instance for texture creation
@@ -1100,21 +1334,21 @@ class rA {
1100
1334
  * @ignore
1101
1335
  */
1102
1336
  constructor(A, e = 16) {
1103
- o(this, "_font");
1104
- o(this, "_characters", []);
1105
- o(this, "_fontFramebuffer");
1106
- o(this, "_fontSize", 16);
1107
- o(this, "_textureColumns", 0);
1108
- o(this, "_textureRows", 0);
1109
- o(this, "_maxGlyphDimensions", { width: 0, height: 0 });
1110
- o(this, "_fontFace");
1111
- o(this, "_fontFamilyName", "UrsaFont");
1337
+ a(this, "_font");
1338
+ a(this, "_characters", []);
1339
+ a(this, "_fontFramebuffer");
1340
+ a(this, "_fontSize", 16);
1341
+ a(this, "_textureColumns", 0);
1342
+ a(this, "_textureRows", 0);
1343
+ a(this, "_maxGlyphDimensions", { width: 0, height: 0 });
1344
+ a(this, "_fontFace");
1345
+ a(this, "_fontFamilyName", "UrsaFont");
1112
1346
  // Component classes
1113
- o(this, "_characterExtractor");
1114
- o(this, "_textureAtlas");
1115
- o(this, "_metricsCalculator");
1116
- o(this, "_characterColorMapper");
1117
- this._fontSize = e, this._characterExtractor = new q(), this._textureAtlas = new AA(A), this._metricsCalculator = new eA(), this._characterColorMapper = new tA();
1347
+ a(this, "_characterExtractor");
1348
+ a(this, "_textureAtlas");
1349
+ a(this, "_metricsCalculator");
1350
+ a(this, "_characterColorMapper");
1351
+ this._fontSize = e, this._characterExtractor = new cA(), this._textureAtlas = new uA(A), this._metricsCalculator = new dA(), this._characterColorMapper = new CA();
1118
1352
  }
1119
1353
  /**
1120
1354
  * Initializes the font manager by loading the font and creating the texture atlas.
@@ -1127,11 +1361,11 @@ class rA {
1127
1361
  if (A) {
1128
1362
  const t = await fetch(A);
1129
1363
  if (!t.ok)
1130
- throw new D(`Failed to load font file: ${t.status} ${t.statusText}`);
1364
+ throw new P(`Failed to load font file: ${t.status} ${t.statusText}`);
1131
1365
  e = await t.arrayBuffer();
1132
1366
  } else
1133
- e = await (await fetch(Z)).arrayBuffer();
1134
- await this._loadFontFace(e), this._font = Q.parse(e)[0], await this._initializeFont();
1367
+ e = await (await fetch(hA)).arrayBuffer();
1368
+ await this._loadFontFace(e), this._font = h.parse(e)[0], await this._initializeFont();
1135
1369
  }
1136
1370
  /**
1137
1371
  * Sets the font size for rendering.
@@ -1163,15 +1397,15 @@ class rA {
1163
1397
  try {
1164
1398
  const e = await fetch(A);
1165
1399
  if (!e.ok)
1166
- throw new D(`Failed to load font file: ${e.status} ${e.statusText}`);
1400
+ throw new P(`Failed to load font file: ${e.status} ${e.statusText}`);
1167
1401
  const t = await e.arrayBuffer();
1168
1402
  await this._loadFontFace(t);
1169
- const r = Q.parse(t);
1403
+ const r = h.parse(t);
1170
1404
  if (!r || r.length === 0)
1171
1405
  throw new Error("Failed to parse font file");
1172
1406
  this._font = r[0], await this._initializeFont();
1173
1407
  } catch (e) {
1174
- throw new D(`Failed to load font: ${e instanceof Error ? e.message : "Unknown error"}`, e);
1408
+ throw new P(`Failed to load font: ${e instanceof Error ? e.message : "Unknown error"}`, e);
1175
1409
  }
1176
1410
  }
1177
1411
  /**
@@ -1261,7 +1495,7 @@ class rA {
1261
1495
  return this._font;
1262
1496
  }
1263
1497
  }
1264
- class iA {
1498
+ class DA {
1265
1499
  /**
1266
1500
  * Create a new grid instance.
1267
1501
  * @param canvas The canvas element used to determine the grid dimensions.
@@ -1271,25 +1505,25 @@ class iA {
1271
1505
  */
1272
1506
  constructor(A, e, t) {
1273
1507
  /** The number of columns in the grid. */
1274
- o(this, "_cols");
1508
+ a(this, "_cols");
1275
1509
  /** The number of rows in the grid. */
1276
- o(this, "_rows");
1510
+ a(this, "_rows");
1277
1511
  /** The total width of the grid in pixels. */
1278
- o(this, "_width");
1512
+ a(this, "_width");
1279
1513
  /** The total height of the grid in pixels. */
1280
- o(this, "_height");
1514
+ a(this, "_height");
1281
1515
  /** The offset to the outer canvas on the x-axis when centering the grid. */
1282
- o(this, "_offsetX");
1516
+ a(this, "_offsetX");
1283
1517
  /** The offset to the outer canvas on the y-axis when centering the grid. */
1284
- o(this, "_offsetY");
1518
+ a(this, "_offsetY");
1285
1519
  /** Whether the grid dimensions are fixed, or responsive based on the canvas dimensions. */
1286
- o(this, "_fixedDimensions", !1);
1520
+ a(this, "_fixedDimensions", !1);
1287
1521
  /** The canvas element used to determine the grid dimensions. */
1288
- o(this, "_canvas");
1522
+ a(this, "_canvas");
1289
1523
  /** The width of each cell in the grid. */
1290
- o(this, "_cellWidth");
1524
+ a(this, "_cellWidth");
1291
1525
  /** The height of each cell in the grid. */
1292
- o(this, "_cellHeight");
1526
+ a(this, "_cellHeight");
1293
1527
  this._canvas = A, this._cellWidth = e, this._cellHeight = t, this.reset();
1294
1528
  }
1295
1529
  /**
@@ -1300,7 +1534,7 @@ class iA {
1300
1534
  if (!this._fixedDimensions) {
1301
1535
  const A = this._canvas.getBoundingClientRect();
1302
1536
  let e = Math.round(A.width), t = Math.round(A.height);
1303
- (e === 0 || t === 0) && (e = this._canvas.width, t = this._canvas.height), [this._cols, this._rows] = [Math.floor(e / this._cellWidth), Math.floor(t / this._cellHeight)];
1537
+ [this._cols, this._rows] = [Math.floor(e / this._cellWidth), Math.floor(t / this._cellHeight)];
1304
1538
  }
1305
1539
  this._resizeGrid();
1306
1540
  }
@@ -1310,7 +1544,7 @@ class iA {
1310
1544
  _resizeGrid() {
1311
1545
  const A = this._canvas.getBoundingClientRect();
1312
1546
  let e = Math.round(A.width), t = Math.round(A.height);
1313
- (e === 0 || t === 0) && (e = this._canvas.width, t = this._canvas.height), this._width = this._cols * this._cellWidth, this._height = this._rows * this._cellHeight, this._offsetX = Math.floor((e - this._width) / 2), this._offsetY = Math.floor((t - this._height) / 2);
1547
+ this._width = this._cols * this._cellWidth, this._height = this._rows * this._cellHeight, this._offsetX = Math.floor((e - this._width) / 2), this._offsetY = Math.floor((t - this._height) / 2);
1314
1548
  }
1315
1549
  /**
1316
1550
  * Re-assign the grid cell dimensions and `reset()` the grid.
@@ -1391,11 +1625,11 @@ class iA {
1391
1625
  return this._offsetY;
1392
1626
  }
1393
1627
  }
1394
- class aA {
1628
+ class mA {
1395
1629
  constructor(A, e = !1, t = {}) {
1396
- o(this, "_canvas");
1397
- o(this, "captureSource");
1398
- o(this, "_isStandalone");
1630
+ a(this, "_canvas");
1631
+ a(this, "captureSource");
1632
+ a(this, "_isStandalone");
1399
1633
  this.captureSource = A, this._isStandalone = e, this._canvas = this.createCanvas(t.width, t.height);
1400
1634
  }
1401
1635
  createCanvas(A, e) {
@@ -1405,15 +1639,15 @@ class aA {
1405
1639
  t.width = A || 800, t.height = e || 600, t.style.width = A + "px", t.style.height = e + "px", document.body.appendChild(t);
1406
1640
  else {
1407
1641
  const i = this.captureSource.getBoundingClientRect();
1408
- let a = Math.round(i.width), s = Math.round(i.height);
1642
+ let s = Math.round(i.width), o = Math.round(i.height);
1409
1643
  if (this.captureSource instanceof HTMLVideoElement) {
1410
1644
  const E = this.captureSource;
1411
- (a === 0 || s === 0) && E.videoWidth > 0 && E.videoHeight > 0 && (a = E.videoWidth, s = E.videoHeight);
1645
+ (s === 0 || o === 0) && E.videoWidth > 0 && E.videoHeight > 0 && (s = E.videoWidth, o = E.videoHeight);
1412
1646
  }
1413
- t.width = a, t.height = s, t.style.width = a + "px", t.style.height = s + "px", t.style.position = "absolute", t.style.pointerEvents = "none";
1414
- const B = window.getComputedStyle(this.captureSource);
1415
- let g = parseInt(B.zIndex || "0", 10);
1416
- isNaN(g) && (g = 0), t.style.zIndex = (g + 1).toString(), this.positionOverlayCanvas(t), (r = this.captureSource.parentNode) == null || r.insertBefore(t, this.captureSource.nextSibling);
1647
+ t.width = s, t.height = o, t.style.width = s + "px", t.style.height = o + "px", t.style.position = "absolute", t.style.pointerEvents = "none";
1648
+ const g = window.getComputedStyle(this.captureSource);
1649
+ let B = parseInt(g.zIndex || "0", 10);
1650
+ isNaN(B) && (B = 0), t.style.zIndex = (B + 1).toString(), this.positionOverlayCanvas(t), (r = this.captureSource.parentNode) == null || r.insertBefore(t, this.captureSource.nextSibling);
1417
1651
  }
1418
1652
  return t;
1419
1653
  }
@@ -1433,8 +1667,8 @@ class aA {
1433
1667
  const t = this.captureSource.getBoundingClientRect();
1434
1668
  let r = Math.round(t.width), i = Math.round(t.height);
1435
1669
  if (this.captureSource instanceof HTMLVideoElement) {
1436
- const a = this.captureSource;
1437
- (r === 0 || i === 0) && a.videoWidth > 0 && a.videoHeight > 0 && (r = a.videoWidth, i = a.videoHeight);
1670
+ const s = this.captureSource;
1671
+ (r === 0 || i === 0) && s.videoWidth > 0 && s.videoHeight > 0 && (r = s.videoWidth, i = s.videoHeight);
1438
1672
  }
1439
1673
  this._canvas.width = r, this._canvas.height = i, this._canvas.style.width = r + "px", this._canvas.style.height = i + "px", this.positionOverlayCanvas(this._canvas);
1440
1674
  }
@@ -1444,7 +1678,7 @@ class aA {
1444
1678
  */
1445
1679
  getWebGLContext() {
1446
1680
  const A = {
1447
- alpha: !0,
1681
+ alpha: !1,
1448
1682
  premultipliedAlpha: !1,
1449
1683
  preserveDrawingBuffer: !0,
1450
1684
  antialias: !1,
@@ -1453,10 +1687,9 @@ class aA {
1453
1687
  powerPreference: "high-performance"
1454
1688
  }, e = this._canvas.getContext("webgl2", A) || this._canvas.getContext("webgl", A);
1455
1689
  if (!e)
1456
- throw new D("WebGL context could not be created. Ensure your browser supports WebGL.");
1690
+ throw new P("WebGL context could not be created. Ensure your browser supports WebGL.");
1457
1691
  return e;
1458
1692
  }
1459
- // Getters
1460
1693
  get canvas() {
1461
1694
  return this._canvas;
1462
1695
  }
@@ -1477,15 +1710,15 @@ class b {
1477
1710
  * @ignore
1478
1711
  */
1479
1712
  constructor(A, e, t, r = {}) {
1480
- o(this, "renderer");
1481
- o(this, "fontManager");
1482
- o(this, "grid");
1483
- o(this, "_characterFramebuffer");
1484
- o(this, "_primaryColorFramebuffer");
1485
- o(this, "_secondaryColorFramebuffer");
1486
- o(this, "_rotationFramebuffer");
1487
- o(this, "_transformFramebuffer");
1488
- o(this, "_options");
1713
+ a(this, "renderer");
1714
+ a(this, "fontManager");
1715
+ a(this, "grid");
1716
+ a(this, "_characterFramebuffer");
1717
+ a(this, "_primaryColorFramebuffer");
1718
+ a(this, "_secondaryColorFramebuffer");
1719
+ a(this, "_rotationFramebuffer");
1720
+ a(this, "_transformFramebuffer");
1721
+ a(this, "_options");
1489
1722
  this.renderer = A, this.fontManager = e, this.grid = t, this._options = r, this._characterFramebuffer = this.renderer.createFramebuffer(this.grid.cols, this.grid.rows), this._primaryColorFramebuffer = this.renderer.createFramebuffer(this.grid.cols, this.grid.rows), this._secondaryColorFramebuffer = this.renderer.createFramebuffer(this.grid.cols, this.grid.rows), this._rotationFramebuffer = this.renderer.createFramebuffer(this.grid.cols, this.grid.rows), this._transformFramebuffer = this.renderer.createFramebuffer(this.grid.cols, this.grid.rows);
1490
1723
  }
1491
1724
  /**
@@ -1539,7 +1772,7 @@ class b {
1539
1772
  return this._options;
1540
1773
  }
1541
1774
  }
1542
- class nA {
1775
+ class PA {
1543
1776
  /**
1544
1777
  * Create a new color palette instance.
1545
1778
  * @param renderer The renderer instance.
@@ -1547,9 +1780,9 @@ class nA {
1547
1780
  */
1548
1781
  constructor(A, e) {
1549
1782
  /** The framebuffer used to store the color palette. */
1550
- o(this, "_framebuffer");
1551
- o(this, "_renderer");
1552
- o(this, "_colors");
1783
+ a(this, "_framebuffer");
1784
+ a(this, "_renderer");
1785
+ a(this, "_colors");
1553
1786
  this._renderer = A, this._colors = e;
1554
1787
  const t = Math.max(this._colors.length, 1);
1555
1788
  this._framebuffer = this._renderer.createFramebuffer(t, 1), this._updateFramebuffer();
@@ -1563,8 +1796,8 @@ class nA {
1563
1796
  this._framebuffer.width !== A && this._framebuffer.resize(A, e);
1564
1797
  const t = new Uint8Array(A * e * 4);
1565
1798
  for (let r = 0; r < A; r++) {
1566
- const i = r < this._colors.length ? this._colors[r] : [0, 0, 0], a = r * 4;
1567
- t[a] = i[0], t[a + 1] = i[1], t[a + 2] = i[2], t[a + 3] = 255;
1799
+ const i = r < this._colors.length ? this._colors[r] : [0, 0, 0], s = r * 4;
1800
+ t[s] = i[0], t[s + 1] = i[1], t[s + 2] = i[2], t[s + 3] = 255;
1568
1801
  }
1569
1802
  this._framebuffer.updatePixels(t, A, e);
1570
1803
  }
@@ -1594,18 +1827,18 @@ class nA {
1594
1827
  return this._framebuffer.texture;
1595
1828
  }
1596
1829
  }
1597
- class S extends b {
1830
+ class z extends b {
1598
1831
  constructor(e, t, r, i = {}) {
1599
1832
  super(e, t, r, i);
1600
- o(this, "palette");
1601
- this.palette = new nA(this.renderer, this.fontManager.getCharacterColors(" .:-=+*%@#"));
1833
+ a(this, "palette");
1834
+ this.palette = new PA(this.renderer, this.fontManager.getCharacterColors(" .:-=+*%@#"));
1602
1835
  }
1603
1836
  /**
1604
1837
  * Sets the characters used for mapping.
1605
1838
  * @param characters The characters to use for mapping, usually ordered from darkest to brightest.
1606
1839
  */
1607
1840
  characters(e) {
1608
- u.validate(
1841
+ C.validate(
1609
1842
  this.fontManager.hasAllCharacters(e),
1610
1843
  "One or more characters do not exist in the current font.",
1611
1844
  { method: "characters", providedValue: e }
@@ -1620,8 +1853,8 @@ class S extends b {
1620
1853
  * @param a Alpha component (0-255).
1621
1854
  */
1622
1855
  characterColor(e, t = e, r = e, i = 255) {
1623
- u.validate(
1624
- [e, t, r, i].every((a) => a >= 0 && a <= 255),
1856
+ C.validate(
1857
+ [e, t, r, i].every((s) => s >= 0 && s <= 255),
1625
1858
  "Character color values must be between 0 and 255",
1626
1859
  { method: "characterColor", providedValues: { r: e, g: t, b: r, a: i } }
1627
1860
  ) && (this._options.characterColor = [e, t, r, i]);
@@ -1633,7 +1866,7 @@ class S extends b {
1633
1866
  * @param mode The color mode to use for characters.
1634
1867
  */
1635
1868
  characterColorMode(e) {
1636
- u.validate(
1869
+ C.validate(
1637
1870
  ["sampled", "fixed"].includes(e),
1638
1871
  "Invalid character color mode. Must be 'sampled' or 'fixed'.",
1639
1872
  { method: "characterColorMode", providedValue: e }
@@ -1648,8 +1881,8 @@ class S extends b {
1648
1881
  * @param a Alpha component (0-255).
1649
1882
  */
1650
1883
  cellColor(e, t = e, r = e, i = 255) {
1651
- u.validate(
1652
- [e, t, r, i].every((a) => a >= 0 && a <= 255),
1884
+ C.validate(
1885
+ [e, t, r, i].every((s) => s >= 0 && s <= 255),
1653
1886
  "Cell color values must be between 0 and 255",
1654
1887
  { method: "cellColor", providedValues: { r: e, g: t, b: r, a: i } }
1655
1888
  ) && (this._options.cellColor = [e, t, r, i]);
@@ -1661,7 +1894,7 @@ class S extends b {
1661
1894
  * @param mode The color mode to use for background cells.
1662
1895
  */
1663
1896
  cellColorMode(e) {
1664
- u.validate(
1897
+ C.validate(
1665
1898
  ["sampled", "fixed"].includes(e),
1666
1899
  "Invalid cell color mode. Must be 'sampled' or 'fixed'.",
1667
1900
  { method: "cellColorMode", providedValue: e }
@@ -1672,7 +1905,7 @@ class S extends b {
1672
1905
  * @param invert If `true`, the character color becomes the cell color and vice versa.
1673
1906
  */
1674
1907
  invert(e) {
1675
- u.validate(
1908
+ C.validate(
1676
1909
  typeof e == "boolean" || typeof e == "number" && Number.isInteger(e),
1677
1910
  "Invert must be a boolean value or an integer (0 for false, any other number for true).",
1678
1911
  { method: "invert", providedValue: e }
@@ -1683,7 +1916,7 @@ class S extends b {
1683
1916
  * @param angle The rotation angle in degrees.
1684
1917
  */
1685
1918
  rotation(e) {
1686
- if (!u.validate(
1919
+ if (!C.validate(
1687
1920
  typeof e == "number",
1688
1921
  "Rotation angle must be a number.",
1689
1922
  { method: "rotation", providedValue: e }
@@ -1698,7 +1931,7 @@ class S extends b {
1698
1931
  * @param flip If `true`, characters are flipped horizontally. If `false`, no flip is applied.
1699
1932
  */
1700
1933
  flipHorizontally(e) {
1701
- u.validate(
1934
+ C.validate(
1702
1935
  typeof e == "boolean" || typeof e == "number" && Number.isInteger(e),
1703
1936
  "Flip horizontally must be a boolean value or an integer (0 for false, any other number for true).",
1704
1937
  { method: "flipHorizontally", providedValue: e }
@@ -1709,15 +1942,15 @@ class S extends b {
1709
1942
  * @param flip If `true`, characters are flipped vertically. If `false`, no flip is applied.
1710
1943
  */
1711
1944
  flipVertically(e) {
1712
- u.validate(
1945
+ C.validate(
1713
1946
  typeof e == "boolean" || typeof e == "number" && Number.isInteger(e),
1714
1947
  "Flip vertically must be a boolean value or an integer (0 for false, any other number for true).",
1715
1948
  { method: "flipVertically", providedValue: e }
1716
1949
  ) && (this._options.flipVertically = !!e);
1717
1950
  }
1718
1951
  }
1719
- var sA = "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);}}", oA = "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);}}", BA = "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);}}", gA = "precision lowp float;uniform sampler2D u_sampleTexture;uniform vec4 u_rotation;varying vec2 v_uv;void main(){vec4 sampleColor=texture2D(u_sampleTexture,v_uv);if(sampleColor.a>0.0){gl_FragColor=u_rotation;}else{gl_FragColor=vec4(0.0);}}", EA = "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);}";
1720
- const QA = {
1952
+ var IA = "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);}}", wA = "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);}}", pA = "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);}}", _A = "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);}}", xA = "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);}";
1953
+ const vA = {
1721
1954
  /** Enable/disable the renderer */
1722
1955
  enabled: !0,
1723
1956
  /** Characters used for brightness mapping (from darkest to brightest) */
@@ -1741,7 +1974,7 @@ const QA = {
1741
1974
  /** Range of brightness values to map to ASCII characters */
1742
1975
  brightnessRange: [0, 255]
1743
1976
  };
1744
- class M extends S {
1977
+ class O extends z {
1745
1978
  /**
1746
1979
  * Creates a new TextmodeBrightnessConverter instance.
1747
1980
  * @param renderer Renderer instance for texture creation
@@ -1750,17 +1983,17 @@ class M extends S {
1750
1983
  * @ignore
1751
1984
  */
1752
1985
  constructor(e, t, r) {
1753
- super(e, t, r, { ...QA });
1754
- o(this, "sampleShader");
1755
- o(this, "colorFillShader");
1756
- o(this, "charMappingShader");
1757
- o(this, "transformFillShader");
1758
- o(this, "rotationFillShader");
1759
- o(this, "sampleFramebuffer");
1760
- this.sampleShader = new w(e.context, p, sA), this.colorFillShader = new w(e.context, p, oA), this.transformFillShader = new w(e.context, p, BA), this.rotationFillShader = new w(e.context, p, gA), this.charMappingShader = new w(e.context, p, EA), this.sampleFramebuffer = this.renderer.createFramebuffer(this.grid.cols, this.grid.rows);
1986
+ super(e, t, r, { ...vA });
1987
+ a(this, "sampleShader");
1988
+ a(this, "colorFillShader");
1989
+ a(this, "charMappingShader");
1990
+ a(this, "transformFillShader");
1991
+ a(this, "rotationFillShader");
1992
+ a(this, "sampleFramebuffer");
1993
+ this.sampleShader = new p(e.context, _, IA), this.colorFillShader = new p(e.context, _, wA), this.transformFillShader = new p(e.context, _, pA), this.rotationFillShader = new p(e.context, _, _A), this.charMappingShader = new p(e.context, _, xA), this.sampleFramebuffer = this.renderer.createFramebuffer(this.grid.cols, this.grid.rows);
1761
1994
  }
1762
1995
  convert(e) {
1763
- this.sampleFramebuffer.begin(), this.renderer.clear(), this.renderer.shader(this.sampleShader), this.renderer.setUniform("u_sketchTexture", e), this.renderer.setUniform("u_gridCellDimensions", [this.grid.cols, this.grid.rows]), this.renderer.setUniform("u_brightnessRange", this._options.brightnessRange), this.renderer.rect(0, 0, this.grid.cols, this.grid.rows), this.sampleFramebuffer.end(), this._primaryColorFramebuffer.begin(), this.renderer.clear(), this.renderer.shader(this.colorFillShader), this.renderer.setUniform("u_sampleTexture", this.sampleFramebuffer.texture), this.renderer.setUniform("u_fillColor", this._options.characterColor), this.renderer.setUniform("u_useFixedColor", this._options.characterColorMode === "fixed"), this.renderer.rect(0, 0, this.grid.cols, this.grid.rows), this._primaryColorFramebuffer.end(), this._secondaryColorFramebuffer.begin(), this.renderer.clear(), this.renderer.shader(this.colorFillShader), this.renderer.setUniform("u_sampleTexture", this.sampleFramebuffer.texture), this.renderer.setUniform("u_fillColor", this._options.cellColor), this.renderer.setUniform("u_useFixedColor", this._options.cellColorMode === "fixed"), this.renderer.rect(0, 0, this.grid.cols, this.grid.rows), this._secondaryColorFramebuffer.end(), this._transformFramebuffer.begin(), this.renderer.clear(), this.renderer.shader(this.transformFillShader), this.renderer.setUniform("u_sampleTexture", this.sampleFramebuffer.texture), this.renderer.setUniform("u_invert", this._options.invert), this.renderer.setUniform("u_flipHorizontally", this._options.flipHorizontally), this.renderer.setUniform("u_flipVertically", this._options.flipVertically), this.renderer.rect(0, 0, this.grid.cols, this.grid.rows), this._transformFramebuffer.end(), this._rotationFramebuffer.begin(), this.renderer.clear(), this.renderer.shader(this.rotationFillShader), this.renderer.setUniform("u_sampleTexture", this.sampleFramebuffer.texture), this.renderer.setUniform("u_rotation", this._options.rotation), this.renderer.rect(0, 0, this.grid.cols, this.grid.rows), this._rotationFramebuffer.end(), this._characterFramebuffer.begin(), this.renderer.clear(0, 0, 0, 0), this.renderer.shader(this.charMappingShader), this.renderer.setUniform("u_colorSampleFramebuffer", this.sampleFramebuffer.texture), this.renderer.setUniform("u_charPaletteTexture", this.palette.texture), this.renderer.setUniform("u_charPaletteSize", [this.palette.colors.length, 1]), this.renderer.setUniform("u_brightnessRange", this._options.brightnessRange), this.renderer.rect(0, 0, this.grid.cols, this.grid.rows), this._characterFramebuffer.end();
1996
+ this.sampleFramebuffer.begin(), this.renderer.clear(), this.renderer.shader(this.sampleShader), this.renderer.setUniform("u_sketchTexture", e), this.renderer.setUniform("u_gridCellDimensions", [this.grid.cols, this.grid.rows]), this.renderer.setUniform("u_brightnessRange", this._options.brightnessRange), this.renderer.rect(0, 0, this.grid.cols, this.grid.rows), this.sampleFramebuffer.end(), this._primaryColorFramebuffer.begin(), this.renderer.clear(), this.renderer.shader(this.colorFillShader), this.renderer.setUniform("u_sampleTexture", this.sampleFramebuffer.texture), this.renderer.setUniform("u_fillColor", this._options.characterColor), this.renderer.setUniform("u_useFixedColor", this._options.characterColorMode === "fixed"), this.renderer.rect(0, 0, this.grid.cols, this.grid.rows), this._primaryColorFramebuffer.end(), this._secondaryColorFramebuffer.begin(), this.renderer.clear(), this.renderer.shader(this.colorFillShader), this.renderer.setUniform("u_sampleTexture", this.sampleFramebuffer.texture), this.renderer.setUniform("u_fillColor", this._options.cellColor), this.renderer.setUniform("u_useFixedColor", this._options.cellColorMode === "fixed"), this.renderer.rect(0, 0, this.grid.cols, this.grid.rows), this._secondaryColorFramebuffer.end(), this._transformFramebuffer.begin(), this.renderer.clear(), this.renderer.shader(this.transformFillShader), this.renderer.setUniform("u_sampleTexture", this.sampleFramebuffer.texture), this.renderer.setUniform("u_invert", this._options.invert), this.renderer.setUniform("u_flipHorizontally", this._options.flipHorizontally), this.renderer.setUniform("u_flipVertically", this._options.flipVertically), this.renderer.rect(0, 0, this.grid.cols, this.grid.rows), this._transformFramebuffer.end(), this._rotationFramebuffer.begin(), this.renderer.clear(), this.renderer.shader(this.rotationFillShader), this.renderer.setUniform("u_sampleTexture", this.sampleFramebuffer.texture), this.renderer.setUniform("u_rotationColor", this._options.rotation), this.renderer.rect(0, 0, this.grid.cols, this.grid.rows), this._rotationFramebuffer.end(), this._characterFramebuffer.begin(), this.renderer.clear(0, 0, 0, 0), this.renderer.shader(this.charMappingShader), this.renderer.setUniform("u_colorSampleFramebuffer", this.sampleFramebuffer.texture), this.renderer.setUniform("u_charPaletteTexture", this.palette.texture), this.renderer.setUniform("u_charPaletteSize", [this.palette.colors.length, 1]), this.renderer.setUniform("u_brightnessRange", this._options.brightnessRange), this.renderer.rect(0, 0, this.grid.cols, this.grid.rows), this._characterFramebuffer.end();
1764
1997
  }
1765
1998
  resize() {
1766
1999
  super.resize(), this.sampleFramebuffer.resize(this.grid.cols, this.grid.rows);
@@ -1773,21 +2006,21 @@ class M extends S {
1773
2006
  * @param range Array of two numbers `[min, max]`, where `min` is darkest and `max` is brightest.
1774
2007
  */
1775
2008
  brightnessRange(e) {
1776
- u.validate(
2009
+ C.validate(
1777
2010
  Array.isArray(e) && e.length === 2 && e.every((t) => typeof t == "number" && t >= 0 && t <= 255),
1778
2011
  "Brightness range must be an array of two numbers between 0 and 255.",
1779
2012
  { method: "brightnessRange", providedValue: e }
1780
2013
  ) && (this._options.brightnessRange = e);
1781
2014
  }
1782
2015
  }
1783
- const vA = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
2016
+ const HA = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
1784
2017
  __proto__: null,
1785
- TextmodeBrightnessConverter: M,
2018
+ TextmodeBrightnessConverter: O,
1786
2019
  TextmodeConverter: b,
1787
- TextmodeFeatureConverter: S
2020
+ TextmodeFeatureConverter: z
1788
2021
  }, Symbol.toStringTag, { value: "Module" }));
1789
- var lA = "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);vec2 charCoord=vec2(charCol,charRow)/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);}";
1790
- class hA {
2022
+ var bA = "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);vec2 charCoord=vec2(charCol,charRow)/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);}";
2023
+ class FA {
1791
2024
  /**
1792
2025
  * Creates an instance of TextmodeConversionPipeline.
1793
2026
  * @param renderer The renderer to use for the pipeline.
@@ -1796,19 +2029,19 @@ class hA {
1796
2029
  * @ignore
1797
2030
  */
1798
2031
  constructor(A, e, t) {
1799
- o(this, "renderer");
1800
- o(this, "font");
1801
- o(this, "grid");
1802
- o(this, "converters");
1803
- o(this, "_resultFramebuffer");
1804
- o(this, "_asciiShader");
1805
- o(this, "_characterFramebuffer");
1806
- o(this, "_primaryColorFramebuffer");
1807
- o(this, "_secondaryColorFramebuffer");
1808
- o(this, "_rotationFramebuffer");
1809
- o(this, "_transformFramebuffer");
1810
- this.renderer = A, this.font = e, this.grid = t, this._asciiShader = this.renderer.createShader(p, lA), this.converters = [
1811
- { name: "brightness", converter: new M(A, e, t) },
2032
+ a(this, "renderer");
2033
+ a(this, "font");
2034
+ a(this, "grid");
2035
+ a(this, "converters");
2036
+ a(this, "_resultFramebuffer");
2037
+ a(this, "_asciiShader");
2038
+ a(this, "_characterFramebuffer");
2039
+ a(this, "_primaryColorFramebuffer");
2040
+ a(this, "_secondaryColorFramebuffer");
2041
+ a(this, "_rotationFramebuffer");
2042
+ a(this, "_transformFramebuffer");
2043
+ this.renderer = A, this.font = e, this.grid = t, this._asciiShader = this.renderer.createShader(_, bA), this.converters = [
2044
+ { name: "brightness", converter: new O(A, e, t) },
1812
2045
  { name: "custom", converter: new b(A, e, t) }
1813
2046
  ], this._characterFramebuffer = this.renderer.createFramebuffer(t.cols, t.rows), this._primaryColorFramebuffer = this.renderer.createFramebuffer(t.cols, t.rows), this._secondaryColorFramebuffer = this.renderer.createFramebuffer(t.cols, t.rows), this._rotationFramebuffer = this.renderer.createFramebuffer(t.cols, t.rows), this._transformFramebuffer = this.renderer.createFramebuffer(t.cols, t.rows), this._resultFramebuffer = this.renderer.createFramebuffer(this.grid.width, this.grid.height);
1814
2047
  }
@@ -1820,13 +2053,13 @@ class hA {
1820
2053
  render(A) {
1821
2054
  for (const t of this.converters) {
1822
2055
  const r = t.converter;
1823
- r.options.enabled && r instanceof S && r.convert(A);
2056
+ r.options.enabled && r instanceof z && r.convert(A);
1824
2057
  }
1825
2058
  const e = (t, r) => {
1826
2059
  t.begin(), this.renderer.clear();
1827
2060
  for (const i of this.converters) {
1828
- const a = i.converter;
1829
- a.options.enabled && this.renderer.image(r(a), 0, 0);
2061
+ const s = i.converter;
2062
+ s.options.enabled && this.renderer.image(r(s), 0, 0);
1830
2063
  }
1831
2064
  t.end();
1832
2065
  };
@@ -1838,14 +2071,14 @@ class hA {
1838
2071
  * @returns The requested `TextmodeConverter` instance.
1839
2072
  */
1840
2073
  get(A) {
1841
- if (!u.validate(
2074
+ if (!C.validate(
1842
2075
  typeof A == "string" && A.length > 0,
1843
2076
  "Converter name must be a non-empty string.",
1844
2077
  { method: "converter", providedValue: A }
1845
2078
  ))
1846
2079
  return;
1847
2080
  const e = this.converters.find((r) => r.name === A), t = e == null ? void 0 : e.converter;
1848
- if (u.validate(
2081
+ if (C.validate(
1849
2082
  t instanceof b,
1850
2083
  `Converter "${A}" is not a valid TextmodeConverter.`,
1851
2084
  { method: "converter", providedValue: A, converterInstance: t }
@@ -1859,47 +2092,46 @@ class hA {
1859
2092
  * @returns The newly created {@link TextmodeConverter} instance or `void` if the addition failed.
1860
2093
  */
1861
2094
  add(A, e) {
1862
- if (!u.validate(
2095
+ if (!C.validate(
1863
2096
  typeof A == "string" && A.length > 0,
1864
2097
  "Converter name must be a non-empty string.",
1865
2098
  { method: "add", providedValue: A }
1866
- ) || !u.validate(
2099
+ ) || !C.validate(
1867
2100
  e === "brightness" || e === "custom",
1868
2101
  `Converter type must be either "brightness" or "custom". Provided: ${e}`,
1869
2102
  { method: "add", providedValue: e }
1870
2103
  ))
1871
2104
  return;
1872
2105
  let t;
1873
- return e === "brightness" ? t = new M(this.renderer, this.font, this.grid) : t = new b(this.renderer, this.font, this.grid), this.converters.push({ name: A, converter: t }), t;
2106
+ return e === "brightness" ? t = new O(this.renderer, this.font, this.grid) : t = new b(this.renderer, this.font, this.grid), this.converters.push({ name: A, converter: t }), t;
1874
2107
  }
1875
2108
  /**
1876
- * Removes a converter from the pipeline by name or instance.
1877
- * @param nameOrInstance The unique name of the converter or the converter instance to remove.
1878
- * @returns `true` if the converter was successfully removed, `false` otherwise.
1879
- */
2109
+ * Removes a converter from the pipeline by name or instance.
2110
+ * @param nameOrInstance The unique name of the converter or the converter instance to remove.
2111
+ */
1880
2112
  remove(A) {
1881
- if (!u.validate(
2113
+ if (!C.validate(
1882
2114
  typeof A == "string" || A instanceof b,
1883
2115
  "Parameter must be either a string (converter name) or a TextmodeConverter instance.",
1884
2116
  { method: "remove", providedValue: A }
1885
2117
  ))
1886
- return !1;
2118
+ return;
1887
2119
  let e = -1;
1888
2120
  if (typeof A == "string") {
1889
- if (!u.validate(
2121
+ if (!C.validate(
1890
2122
  A.length > 0,
1891
2123
  "Converter name must be a non-empty string.",
1892
2124
  { method: "remove", providedValue: A }
1893
2125
  ))
1894
- return !1;
2126
+ return;
1895
2127
  e = this.converters.findIndex((t) => t.name === A);
1896
2128
  } else
1897
2129
  e = this.converters.findIndex((t) => t.converter === A);
1898
- return u.validate(
2130
+ C.validate(
1899
2131
  e !== -1,
1900
2132
  typeof A == "string" ? `Converter with name "${A}" not found in pipeline.` : "Converter instance not found in pipeline.",
1901
2133
  { method: "remove", providedValue: A, convertersCount: this.converters.length }
1902
- ) ? (this.converters.splice(e, 1), !0) : !1;
2134
+ ) && this.converters.splice(e, 1);
1903
2135
  }
1904
2136
  /**
1905
2137
  * Returns the framebuffer containing the textmode conversion result.
@@ -1937,41 +2169,41 @@ class hA {
1937
2169
  for (const A of this.converters)
1938
2170
  A.converter.enable();
1939
2171
  }
1940
- /** Returns the character framebuffer containing the combined result of all converters. @ignore */
2172
+ /** Returns the character framebuffer containing the combined result of all converters. */
1941
2173
  get characterFramebuffer() {
1942
2174
  return this._characterFramebuffer;
1943
2175
  }
1944
- /** Returns the primary color framebuffer containing the combined result of all converters. @ignore */
2176
+ /** Returns the primary color framebuffer containing the combined result of all converters. */
1945
2177
  get primaryColorFramebuffer() {
1946
2178
  return this._primaryColorFramebuffer;
1947
2179
  }
1948
- /** Returns the secondary color framebuffer containing the combined result of all converters. @ignore */
2180
+ /** Returns the secondary color framebuffer containing the combined result of all converters. */
1949
2181
  get secondaryColorFramebuffer() {
1950
2182
  return this._secondaryColorFramebuffer;
1951
2183
  }
1952
- /** Returns the rotation framebuffer containing the combined result of all converters. @ignore */
2184
+ /** Returns the rotation framebuffer containing the combined result of all converters. */
1953
2185
  get rotationFramebuffer() {
1954
2186
  return this._rotationFramebuffer;
1955
2187
  }
1956
- /** Returns the transform framebuffer containing the combined result of all converters. @ignore */
2188
+ /** Returns the transform framebuffer containing the combined result of all converters. */
1957
2189
  get transformFramebuffer() {
1958
2190
  return this._transformFramebuffer;
1959
2191
  }
1960
2192
  }
1961
- class U {
2193
+ class H {
1962
2194
  /**
1963
2195
  * Extracts pixel data from all framebuffers needed for export
1964
2196
  * @param pipeline The conversion pipeline containing framebuffers
1965
2197
  * @returns Object containing all pixel data arrays
1966
2198
  */
1967
2199
  extractFramebufferData(A) {
1968
- const e = A.get("brightness"), t = e == null ? void 0 : e.characterFramebuffer, r = e == null ? void 0 : e.primaryColorFramebuffer, i = e == null ? void 0 : e.secondaryColorFramebuffer, a = e == null ? void 0 : e.transformFramebuffer, s = e == null ? void 0 : e.rotationFramebuffer;
1969
- return t == null || t.loadPixels(), r == null || r.loadPixels(), i == null || i.loadPixels(), a == null || a.loadPixels(), s == null || s.loadPixels(), {
2200
+ const e = A.get("brightness"), t = e == null ? void 0 : e.characterFramebuffer, r = e == null ? void 0 : e.primaryColorFramebuffer, i = e == null ? void 0 : e.secondaryColorFramebuffer, s = e == null ? void 0 : e.transformFramebuffer, o = e == null ? void 0 : e.rotationFramebuffer;
2201
+ return t == null || t.loadPixels(), r == null || r.loadPixels(), i == null || i.loadPixels(), s == null || s.loadPixels(), o == null || o.loadPixels(), {
1970
2202
  characterPixels: (t == null ? void 0 : t.pixels) || new Uint8Array(0),
1971
2203
  primaryColorPixels: (r == null ? void 0 : r.pixels) || new Uint8Array(0),
1972
2204
  secondaryColorPixels: (i == null ? void 0 : i.pixels) || new Uint8Array(0),
1973
- transformPixels: (a == null ? void 0 : a.pixels) || new Uint8Array(0),
1974
- rotationPixels: (s == null ? void 0 : s.pixels) || new Uint8Array(0)
2205
+ transformPixels: (s == null ? void 0 : s.pixels) || new Uint8Array(0),
2206
+ rotationPixels: (o == null ? void 0 : o.pixels) || new Uint8Array(0)
1975
2207
  };
1976
2208
  }
1977
2209
  /**
@@ -2000,7 +2232,7 @@ class U {
2000
2232
  };
2001
2233
  }
2002
2234
  }
2003
- class R {
2235
+ class L {
2004
2236
  /**
2005
2237
  * Creates a downloadable blob from content
2006
2238
  * @param content The content to include in the blob
@@ -2010,16 +2242,6 @@ class R {
2010
2242
  createBlob(A, e) {
2011
2243
  return new Blob([A], { type: e });
2012
2244
  }
2013
- /**
2014
- * Creates a data URL from content
2015
- * @param content The content to convert
2016
- * @param mimeType The MIME type for the blob
2017
- * @returns Data URL string
2018
- */
2019
- createDataURL(A, e) {
2020
- const t = this.createBlob(A, e);
2021
- return URL.createObjectURL(t);
2022
- }
2023
2245
  /**
2024
2246
  * Downloads content as a file
2025
2247
  * @param content The content to download
@@ -2028,8 +2250,8 @@ class R {
2028
2250
  */
2029
2251
  downloadFile(A, e, t) {
2030
2252
  try {
2031
- const r = this.createBlob(A, t), i = URL.createObjectURL(r), a = document.createElement("a");
2032
- a.href = i, a.download = e, a.style.display = "none", a.rel = "noopener", document.body.appendChild(a), a.click(), document.body.removeChild(a), URL.revokeObjectURL(i);
2253
+ const r = this.createBlob(A, t), i = URL.createObjectURL(r), s = document.createElement("a");
2254
+ s.href = i, s.download = e, s.style.display = "none", s.rel = "noopener", document.body.appendChild(s), s.click(), document.body.removeChild(s), URL.revokeObjectURL(i);
2033
2255
  } catch (r) {
2034
2256
  throw console.error("Failed to download file:", r), new Error(`File download failed: ${r instanceof Error ? r.message : "Unknown error"}`);
2035
2257
  }
@@ -2057,27 +2279,17 @@ class R {
2057
2279
  sanitizeFilename(A) {
2058
2280
  return A.replace(/[<>:"/\\|?*]/g, "_").replace(/\s+/g, "_").replace(/_{2,}/g, "_").replace(/^_+|_+$/g, "").substring(0, 255);
2059
2281
  }
2060
- /**
2061
- * Ensures filename has the correct extension
2062
- * @param filename The filename to check
2063
- * @param expectedExtension The expected file extension (with dot)
2064
- * @returns Filename with correct extension
2065
- */
2066
- ensureFileExtension(A, e) {
2067
- return A.toLowerCase().endsWith(e.toLowerCase()) ? A : A + e;
2068
- }
2069
2282
  /**
2070
2283
  * Generates a default filename with prefix and timestamp
2071
2284
  * @param prefix The prefix for the filename
2072
2285
  * @param extension The file extension (with dot)
2073
2286
  * @returns Generated filename
2074
2287
  */
2075
- generateDefaultFilename(A, e) {
2076
- const t = this.generateTimestamp();
2077
- return `${A}-${t}${e}`;
2288
+ generateDefaultFilename() {
2289
+ return `'textmode-export'-${this.generateTimestamp()}`;
2078
2290
  }
2079
2291
  }
2080
- class cA extends U {
2292
+ class yA extends H {
2081
2293
  /**
2082
2294
  * Extracts transform data from transform pixels
2083
2295
  * @param transformPixels Transform framebuffer pixels
@@ -2086,12 +2298,12 @@ class cA extends U {
2086
2298
  * @returns Transform data object
2087
2299
  */
2088
2300
  extractTransformData(A, e, t) {
2089
- const r = A[t], i = A[t + 1], a = A[t + 2], s = r === 255, B = i === 255, g = a === 255, E = e[t], l = e[t + 1], h = E + l / 255, d = Math.round(h * 360 / 255 * 100) / 100;
2301
+ const r = A[t], i = A[t + 1], s = A[t + 2], o = r === 255, g = i === 255, B = s === 255, E = e[t], Q = e[t + 1], l = E + Q / 255, c = Math.round(l * 360 / 255 * 100) / 100;
2090
2302
  return {
2091
- isInverted: s,
2092
- flipHorizontal: B,
2093
- flipVertical: g,
2094
- rotation: d
2303
+ isInverted: o,
2304
+ flipHorizontal: g,
2305
+ flipVertical: B,
2306
+ rotation: c
2095
2307
  };
2096
2308
  }
2097
2309
  /**
@@ -2120,34 +2332,34 @@ class cA extends U {
2120
2332
  const t = [];
2121
2333
  let r = 0;
2122
2334
  for (let i = 0; i < e.rows; i++)
2123
- for (let a = 0; a < e.cols; a++) {
2124
- const s = r * 4, B = this.getCharacterIndex(
2335
+ for (let s = 0; s < e.cols; s++) {
2336
+ const o = r * 4, g = this.getCharacterIndex(
2125
2337
  A.characterPixels,
2126
- s
2338
+ o
2127
2339
  );
2128
- let g = this.pixelsToRGBA(A.primaryColorPixels, s), E = this.pixelsToRGBA(A.secondaryColorPixels, s);
2129
- const l = this.extractTransformData(
2340
+ let B = this.pixelsToRGBA(A.primaryColorPixels, o), E = this.pixelsToRGBA(A.secondaryColorPixels, o);
2341
+ const Q = this.extractTransformData(
2130
2342
  A.transformPixels,
2131
2343
  A.rotationPixels,
2132
- s
2344
+ o
2133
2345
  );
2134
- if (l.isInverted) {
2135
- const d = g;
2136
- g = E, E = d;
2346
+ if (Q.isInverted) {
2347
+ const c = B;
2348
+ B = E, E = c;
2137
2349
  }
2138
- const h = this.calculateCellPosition(a, i, e);
2350
+ const l = this.calculateCellPosition(s, i, e);
2139
2351
  t.push({
2140
- charIndex: B,
2141
- primaryColor: g,
2352
+ charIndex: g,
2353
+ primaryColor: B,
2142
2354
  secondaryColor: E,
2143
- transform: l,
2144
- position: h
2355
+ transform: Q,
2356
+ position: l
2145
2357
  }), r++;
2146
2358
  }
2147
2359
  return t;
2148
2360
  }
2149
2361
  }
2150
- class uA {
2362
+ class TA {
2151
2363
  /**
2152
2364
  * Gets the glyph index for a given Unicode code point in a Typr.js font
2153
2365
  * @param fontData The Typr.js font data
@@ -2164,11 +2376,11 @@ class uA {
2164
2376
  if (r.idRangeOffset[i] === 0)
2165
2377
  return e + r.idDelta[i] & 65535;
2166
2378
  {
2167
- const a = r.idRangeOffset[i] / 2 + (e - r.startCount[i]) - (r.startCount.length - i);
2168
- if (a >= 0 && a < r.glyphIdArray.length) {
2169
- const s = r.glyphIdArray[a];
2170
- if (s !== 0)
2171
- return s + r.idDelta[i] & 65535;
2379
+ const s = r.idRangeOffset[i] / 2 + (e - r.startCount[i]) - (r.startCount.length - i);
2380
+ if (s >= 0 && s < r.glyphIdArray.length) {
2381
+ const o = r.glyphIdArray[s];
2382
+ if (o !== 0)
2383
+ return o + r.idDelta[i] & 65535;
2172
2384
  }
2173
2385
  }
2174
2386
  }
@@ -2197,15 +2409,15 @@ class uA {
2197
2409
  createGlyphPath(A, e, t, r, i) {
2198
2410
  if (!e || !e.xs || e.xs.length === 0)
2199
2411
  return this.createEmptyPath();
2200
- const a = i / A.head.unitsPerEm;
2412
+ const s = i / A.head.unitsPerEm;
2201
2413
  return {
2202
2414
  getBoundingBox: () => ({
2203
- x1: t + e.xMin * a,
2204
- y1: r + -e.yMax * a,
2205
- x2: t + e.xMax * a,
2206
- y2: r + -e.yMin * a
2415
+ x1: t + e.xMin * s,
2416
+ y1: r + -e.yMax * s,
2417
+ x2: t + e.xMax * s,
2418
+ y2: r + -e.yMin * s
2207
2419
  }),
2208
- toSVG: () => this.glyphToSVGPath(e, t, r, a)
2420
+ toSVG: () => this.glyphToSVGPath(e, t, r, s)
2209
2421
  };
2210
2422
  }
2211
2423
  /**
@@ -2218,37 +2430,37 @@ class uA {
2218
2430
  */
2219
2431
  glyphToSVGPath(A, e, t, r) {
2220
2432
  if (!A || !A.xs) return "";
2221
- const { xs: i, ys: a, endPts: s, flags: B } = A;
2222
- if (!i || !a || !s || !B) return "";
2223
- let g = "", E = 0;
2224
- for (let l = 0; l < s.length; l++) {
2225
- const h = s[l];
2226
- if (!(h < E)) {
2227
- if (h >= E) {
2228
- const d = e + i[E] * r, C = t - a[E] * r;
2229
- g += `M${d.toFixed(2)},${C.toFixed(2)}`;
2230
- let c = E + 1;
2231
- for (; c <= h; )
2232
- if ((B[c] & 1) !== 0) {
2233
- const I = e + i[c] * r, P = t - a[c] * r;
2234
- g += `L${I.toFixed(2)},${P.toFixed(2)}`, c++;
2433
+ const { xs: i, ys: s, endPts: o, flags: g } = A;
2434
+ if (!i || !s || !o || !g) return "";
2435
+ let B = "", E = 0;
2436
+ for (let Q = 0; Q < o.length; Q++) {
2437
+ const l = o[Q];
2438
+ if (!(l < E)) {
2439
+ if (l >= E) {
2440
+ const c = e + i[E] * r, d = t - s[E] * r;
2441
+ B += `M${c.toFixed(2)},${d.toFixed(2)}`;
2442
+ let u = E + 1;
2443
+ for (; u <= l; )
2444
+ if ((g[u] & 1) !== 0) {
2445
+ const m = e + i[u] * r, f = t - s[u] * r;
2446
+ B += `L${m.toFixed(2)},${f.toFixed(2)}`, u++;
2235
2447
  } else {
2236
- const I = e + i[c] * r, P = t - a[c] * r;
2237
- let m = c + 1 > h ? E : c + 1;
2238
- if ((B[m] & 1) !== 0) {
2239
- const _ = e + i[m] * r, v = t - a[m] * r;
2240
- g += `Q${I.toFixed(2)},${P.toFixed(2)} ${_.toFixed(2)},${v.toFixed(2)}`, c = m + 1;
2448
+ const m = e + i[u] * r, f = t - s[u] * r;
2449
+ let I = u + 1 > l ? E : u + 1;
2450
+ if ((g[I] & 1) !== 0) {
2451
+ const x = e + i[I] * r, w = t - s[I] * r;
2452
+ B += `Q${m.toFixed(2)},${f.toFixed(2)} ${x.toFixed(2)},${w.toFixed(2)}`, u = I + 1;
2241
2453
  } else {
2242
- const _ = e + i[m] * r, v = t - a[m] * r, k = (I + _) / 2, L = (P + v) / 2;
2243
- g += `Q${I.toFixed(2)},${P.toFixed(2)} ${k.toFixed(2)},${L.toFixed(2)}`, c = m;
2454
+ const x = e + i[I] * r, w = t - s[I] * r, M = (m + x) / 2, T = (f + w) / 2;
2455
+ B += `Q${m.toFixed(2)},${f.toFixed(2)} ${M.toFixed(2)},${T.toFixed(2)}`, u = I;
2244
2456
  }
2245
2457
  }
2246
- g += "Z";
2458
+ B += "Z";
2247
2459
  }
2248
- E = h + 1;
2460
+ E = l + 1;
2249
2461
  }
2250
2462
  }
2251
- return g;
2463
+ return B;
2252
2464
  }
2253
2465
  /**
2254
2466
  * Generates an SVG path for a character glyph
@@ -2261,18 +2473,18 @@ class uA {
2261
2473
  */
2262
2474
  generateCharacterPath(A, e, t, r, i) {
2263
2475
  try {
2264
- const a = A.codePointAt(0) || 0, s = this.getGlyphIndex(e, a);
2265
- if (s === 0)
2476
+ const s = A.codePointAt(0) || 0, o = this.getGlyphIndex(e, s);
2477
+ if (o === 0)
2266
2478
  return this.createEmptyPath();
2267
- let B = null;
2479
+ let g = null;
2268
2480
  try {
2269
- e.glyf && e.glyf[s] !== null ? B = e.glyf[s] : Q && Q.T && Q.T.glyf && Q.T.glyf._parseGlyf && (B = Q.T.glyf._parseGlyf(e, s), e.glyf && B && (e.glyf[s] = B));
2270
- } catch (g) {
2271
- console.warn(`Failed to parse glyph ${s}:`, g);
2481
+ e.glyf && e.glyf[o] !== null ? g = e.glyf[o] : h && h.T && h.T.glyf && h.T.glyf._parseGlyf && (g = h.T.glyf._parseGlyf(e, o), e.glyf && g && (e.glyf[o] = g));
2482
+ } catch (B) {
2483
+ console.warn(`Failed to parse glyph ${o}:`, B);
2272
2484
  }
2273
- return B ? this.createGlyphPath(e, B, t, r, i) : this.createEmptyPath();
2274
- } catch (a) {
2275
- return console.warn(`Failed to generate path for character "${A}":`, a), this.createEmptyPath();
2485
+ return g ? this.createGlyphPath(e, g, t, r, i) : this.createEmptyPath();
2486
+ } catch (s) {
2487
+ return console.warn(`Failed to generate path for character "${A}":`, s), this.createEmptyPath();
2276
2488
  }
2277
2489
  }
2278
2490
  /**
@@ -2287,19 +2499,19 @@ class uA {
2287
2499
  * @param advanceWidth Character advance width
2288
2500
  * @returns SVG path data string or null if generation fails
2289
2501
  */
2290
- generatePositionedCharacterPath(A, e, t, r, i, a, s, B) {
2502
+ generatePositionedCharacterPath(A, e, t, r, i, s, o, g) {
2291
2503
  try {
2292
- const g = s / e.head.unitsPerEm, E = B * g, l = t + (i - E) / 2, h = r + (a + s * 0.7) / 2;
2293
- return this.generateCharacterPath(A, e, l, h, s).toSVG() || null;
2294
- } catch (g) {
2295
- return console.warn(`Failed to generate positioned character path for "${A}":`, g), null;
2504
+ const B = o / e.head.unitsPerEm, E = g * B, Q = t + (i - E) / 2, l = r + (s + o * 0.7) / 2;
2505
+ return this.generateCharacterPath(A, e, Q, l, o).toSVG() || null;
2506
+ } catch (B) {
2507
+ return console.warn(`Failed to generate positioned character path for "${A}":`, B), null;
2296
2508
  }
2297
2509
  }
2298
2510
  }
2299
- class dA {
2511
+ class SA {
2300
2512
  constructor() {
2301
- o(this, "pathGenerator");
2302
- this.pathGenerator = new uA();
2513
+ a(this, "pathGenerator");
2514
+ this.pathGenerator = new TA();
2303
2515
  }
2304
2516
  /**
2305
2517
  * Generates the SVG header with metadata
@@ -2351,12 +2563,12 @@ class dA {
2351
2563
  * @returns Transform attribute string or empty string
2352
2564
  */
2353
2565
  generateTransformAttribute(A, e) {
2354
- const { transform: t, position: r } = A, i = r.cellX + e.cellWidth / 2, a = r.cellY + e.cellHeight / 2, s = [];
2566
+ const { transform: t, position: r } = A, i = r.cellX + e.cellWidth / 2, s = r.cellY + e.cellHeight / 2, o = [];
2355
2567
  if (t.flipHorizontal || t.flipVertical) {
2356
- const B = t.flipHorizontal ? -1 : 1, g = t.flipVertical ? -1 : 1;
2357
- s.push(`translate(${i} ${a})`), s.push(`scale(${B} ${g})`), s.push(`translate(${-i} ${-a})`);
2568
+ const g = t.flipHorizontal ? -1 : 1, B = t.flipVertical ? -1 : 1;
2569
+ o.push(`translate(${i} ${s})`), o.push(`scale(${g} ${B})`), o.push(`translate(${-i} ${-s})`);
2358
2570
  }
2359
- return t.rotation && s.push(`rotate(${t.rotation} ${i} ${a})`), s.length ? ` transform="${s.join(" ")}"` : "";
2571
+ return t.rotation && o.push(`rotate(${t.rotation} ${i} ${s})`), o.length ? ` transform="${o.join(" ")}"` : "";
2360
2572
  }
2361
2573
  /**
2362
2574
  * Generates background rectangle for a cell
@@ -2385,7 +2597,7 @@ class dA {
2385
2597
  const i = t.characters[A.charIndex];
2386
2598
  if (!i)
2387
2599
  return "";
2388
- const a = this.pathGenerator.generatePositionedCharacterPath(
2600
+ const s = this.pathGenerator.generatePositionedCharacterPath(
2389
2601
  i.character,
2390
2602
  t.font,
2391
2603
  A.position.cellX,
@@ -2395,12 +2607,12 @@ class dA {
2395
2607
  t.fontSize,
2396
2608
  i.advanceWidth
2397
2609
  );
2398
- if (!a)
2610
+ if (!s)
2399
2611
  return "";
2400
- const s = this.rgbaToColorString(A.primaryColor);
2612
+ const o = this.rgbaToColorString(A.primaryColor);
2401
2613
  return r.drawMode === "stroke" ? `
2402
- <path id="${`path-${A.charIndex}-${A.position.cellX}-${A.position.cellY}`.replace(/\./g, "-")}" d="${a}" stroke="${s}" stroke-width="${r.strokeWidth}" fill="none" />` : `
2403
- <path d="${a}" fill="${s}" />`;
2614
+ <path id="${`path-${A.charIndex}-${A.position.cellX}-${A.position.cellY}`.replace(/\./g, "-")}" d="${s}" stroke="${o}" stroke-width="${r.strokeWidth}" fill="none" />` : `
2615
+ <path d="${s}" fill="${o}" />`;
2404
2616
  }
2405
2617
  /**
2406
2618
  * Generates complete SVG content for a single cell
@@ -2413,10 +2625,10 @@ class dA {
2413
2625
  generateCellContent(A, e, t, r) {
2414
2626
  let i = "";
2415
2627
  i += this.generateCellBackground(A, e, r);
2416
- const a = this.generateTransformAttribute(A, e), s = this.generateCharacterPath(A, e, t, r);
2417
- return s && (a ? (i += `
2418
- <g${a}>`, i += s, i += `
2419
- </g>`) : i += s), i;
2628
+ const s = this.generateTransformAttribute(A, e), o = this.generateCharacterPath(A, e, t, r);
2629
+ return o && (s ? (i += `
2630
+ <g${s}>`, i += o, i += `
2631
+ </g>`) : i += o), i;
2420
2632
  }
2421
2633
  /**
2422
2634
  * Generates the complete SVG content from cell data
@@ -2430,8 +2642,8 @@ class dA {
2430
2642
  let i = this.generateSVGHeader(e);
2431
2643
  i += this.generateBackground(e, r), i += `
2432
2644
  <g id="ascii-cells">`;
2433
- for (const a of A)
2434
- i += this.generateCellContent(a, e, t, r);
2645
+ for (const s of A)
2646
+ i += this.generateCellContent(s, e, t, r);
2435
2647
  return i += this.generateSVGFooter(), i;
2436
2648
  }
2437
2649
  /**
@@ -2444,24 +2656,7 @@ class dA {
2444
2656
  `).replace(/[ \t]+$/gm, "");
2445
2657
  }
2446
2658
  }
2447
- class CA extends R {
2448
- /**
2449
- * Generates a default filename for SVG export
2450
- * @param prefix Optional prefix for the filename
2451
- * @returns Generated filename without extension
2452
- */
2453
- generateDefaultFilename(A = "textmode_output") {
2454
- const { date: e, time: t } = this.generateDateTimeString();
2455
- return `${A}_${e}_${t}`;
2456
- }
2457
- /**
2458
- * Validates filename for safety and compatibility
2459
- * @param filename The filename to validate
2460
- * @returns Sanitized filename
2461
- */
2462
- sanitizeFilename(A) {
2463
- return super.sanitizeFilename(A);
2464
- }
2659
+ class MA extends L {
2465
2660
  /**
2466
2661
  * Creates a downloadable blob from SVG content
2467
2662
  * @param svgContent The SVG content string
@@ -2470,14 +2665,6 @@ class CA extends R {
2470
2665
  createSVGBlob(A) {
2471
2666
  return this.createBlob(A, "image/svg+xml;charset=utf-8");
2472
2667
  }
2473
- /**
2474
- * Creates a data URL from SVG content
2475
- * @param svgContent The SVG content string
2476
- * @returns Data URL string
2477
- */
2478
- createDataURL(A) {
2479
- return super.createDataURL(A, "image/svg+xml;charset=utf-8");
2480
- }
2481
2668
  /**
2482
2669
  * Downloads SVG content as a file
2483
2670
  * @param svgContent The SVG content to download
@@ -2485,8 +2672,7 @@ class CA extends R {
2485
2672
  */
2486
2673
  downloadSVG(A, e) {
2487
2674
  try {
2488
- const t = this.sanitizeFilename(e), r = this.ensureFileExtension(t, ".svg");
2489
- this.downloadFile(A, r, "image/svg+xml;charset=utf-8");
2675
+ this.downloadFile(A, this.sanitizeFilename(e) + ".svg", "image/svg+xml;charset=utf-8");
2490
2676
  } catch (t) {
2491
2677
  throw console.error("Failed to download SVG file:", t), new Error(`SVG download failed: ${t instanceof Error ? t.message : "Unknown error"}`);
2492
2678
  }
@@ -2497,16 +2683,15 @@ class CA extends R {
2497
2683
  * @param filename Optional filename (will generate if not provided)
2498
2684
  */
2499
2685
  saveSVG(A, e) {
2500
- const t = e || this.generateDefaultFilename();
2501
- this.downloadSVG(A, t);
2686
+ this.downloadSVG(A, e || this.generateDefaultFilename());
2502
2687
  }
2503
2688
  }
2504
- class V {
2689
+ class W {
2505
2690
  constructor() {
2506
- o(this, "dataExtractor");
2507
- o(this, "contentGenerator");
2508
- o(this, "fileHandler");
2509
- this.dataExtractor = new cA(), this.contentGenerator = new dA(), this.fileHandler = new CA();
2691
+ a(this, "dataExtractor");
2692
+ a(this, "contentGenerator");
2693
+ a(this, "fileHandler");
2694
+ this.dataExtractor = new yA(), this.contentGenerator = new SA(), this.fileHandler = new MA();
2510
2695
  }
2511
2696
  /**
2512
2697
  * Applies default values to SVG export options
@@ -2531,13 +2716,13 @@ class V {
2531
2716
  const t = this.applyDefaultOptions(e), r = this.dataExtractor.extractFramebufferData(A.pipeline), i = this.dataExtractor.extractSVGCellData(
2532
2717
  r,
2533
2718
  A.grid
2534
- ), a = this.contentGenerator.generateSVGContent(
2719
+ ), s = this.contentGenerator.generateSVGContent(
2535
2720
  i,
2536
2721
  A.grid,
2537
2722
  A.font,
2538
2723
  t
2539
2724
  );
2540
- return this.contentGenerator.optimizeSVGContent(a);
2725
+ return this.contentGenerator.optimizeSVGContent(s);
2541
2726
  }
2542
2727
  /**
2543
2728
  * Exports SVG content to a downloadable file
@@ -2553,7 +2738,7 @@ class V {
2553
2738
  }
2554
2739
  }
2555
2740
  }
2556
- class fA extends U {
2741
+ class GA extends H {
2557
2742
  /**
2558
2743
  * Extracts character data for TXT generation
2559
2744
  * @param framebufferData Framebuffer pixel data
@@ -2563,24 +2748,24 @@ class fA extends U {
2563
2748
  * @returns 2D array of characters (rows x columns)
2564
2749
  */
2565
2750
  extractCharacterGrid(A, e, t, r = " ") {
2566
- var s;
2751
+ var o;
2567
2752
  const i = [];
2568
- let a = 0;
2569
- for (let B = 0; B < e.rows; B++) {
2570
- const g = [];
2753
+ let s = 0;
2754
+ for (let g = 0; g < e.rows; g++) {
2755
+ const B = [];
2571
2756
  for (let E = 0; E < e.cols; E++) {
2572
- const l = a * 4, h = this.getCharacterIndex(
2757
+ const Q = s * 4, l = this.getCharacterIndex(
2573
2758
  A.characterPixels,
2574
- l
2575
- ), d = ((s = t.characters[h]) == null ? void 0 : s.character) || r;
2576
- g.push(d), a++;
2759
+ Q
2760
+ ), c = ((o = t.characters[l]) == null ? void 0 : o.character) || r;
2761
+ B.push(c), s++;
2577
2762
  }
2578
- i.push(g);
2763
+ i.push(B);
2579
2764
  }
2580
2765
  return i;
2581
2766
  }
2582
2767
  }
2583
- class DA {
2768
+ class RA {
2584
2769
  /**
2585
2770
  * Generates TXT content from a 2D character array
2586
2771
  * @param characterGrid 2D array of characters (rows x columns)
@@ -2590,8 +2775,8 @@ class DA {
2590
2775
  generateTXTContent(A, e) {
2591
2776
  const t = [];
2592
2777
  for (const i of A) {
2593
- let a = i.join("");
2594
- e.preserveTrailingSpaces || (a = a.replace(/\s+$/, "")), t.push(a);
2778
+ let s = i.join("");
2779
+ e.preserveTrailingSpaces || (s = s.replace(/\s+$/, "")), t.push(s);
2595
2780
  }
2596
2781
  const r = e.lineEnding === "crlf" ? `\r
2597
2782
  ` : `
@@ -2599,7 +2784,7 @@ class DA {
2599
2784
  return t.join(r);
2600
2785
  }
2601
2786
  }
2602
- class mA extends R {
2787
+ class UA extends L {
2603
2788
  /**
2604
2789
  * Saves TXT content as a downloadable file
2605
2790
  * @param content The TXT content to save
@@ -2613,13 +2798,6 @@ class mA extends R {
2613
2798
  throw console.error("Failed to save TXT file:", t), new Error(`TXT file save failed: ${t instanceof Error ? t.message : "Unknown error"}`);
2614
2799
  }
2615
2800
  }
2616
- /**
2617
- * Generates a default filename for TXT export
2618
- * @returns Default filename with timestamp
2619
- */
2620
- generateDefaultFilename() {
2621
- return super.generateDefaultFilename("textmode-export", ".txt");
2622
- }
2623
2801
  /**
2624
2802
  * Ensures filename has proper extension and is valid
2625
2803
  * @param filename The filename to validate and fix
@@ -2627,15 +2805,15 @@ class mA extends R {
2627
2805
  */
2628
2806
  ensureValidFilename(A) {
2629
2807
  let e = this.sanitizeFilename(A);
2630
- return e = this.ensureFileExtension(e, ".txt"), e === ".txt" || e.length <= 4 ? this.generateDefaultFilename() : e;
2808
+ return e === ".txt" || e.length <= 4 ? this.generateDefaultFilename() : e;
2631
2809
  }
2632
2810
  }
2633
- class H {
2811
+ class $ {
2634
2812
  constructor() {
2635
- o(this, "dataExtractor");
2636
- o(this, "contentGenerator");
2637
- o(this, "fileHandler");
2638
- this.dataExtractor = new fA(), this.contentGenerator = new DA(), this.fileHandler = new mA();
2813
+ a(this, "dataExtractor");
2814
+ a(this, "contentGenerator");
2815
+ a(this, "fileHandler");
2816
+ this.dataExtractor = new GA(), this.contentGenerator = new RA(), this.fileHandler = new UA();
2639
2817
  }
2640
2818
  /**
2641
2819
  * Applies default values to TXT export options
@@ -2681,10 +2859,10 @@ class H {
2681
2859
  }
2682
2860
  }
2683
2861
  }
2684
- class PA extends U {
2862
+ class YA extends H {
2685
2863
  /**
2686
2864
  * Captures the current state of the textmode canvas as image data
2687
- * @param textmodeCanvas The TextmodeCanvas instance to capture from
2865
+ * @param canvas The canvas data containing the rendered textmode graphics
2688
2866
  * @param scale Scale factor for the output image
2689
2867
  * @param backgroundColor Background color for formats that don't support transparency
2690
2868
  * @returns Canvas element containing the captured image data
@@ -2693,11 +2871,8 @@ class PA extends U {
2693
2871
  const r = A.canvas;
2694
2872
  if (e === 1 && t === "transparent")
2695
2873
  return r;
2696
- const i = document.createElement("canvas"), a = i.getContext("2d");
2697
- if (!a)
2698
- throw new Error("Failed to get 2D rendering context for image capture");
2699
- const s = Math.round(r.width * e), B = Math.round(r.height * e);
2700
- return i.width = s, i.height = B, t !== "transparent" && (a.fillStyle = t, a.fillRect(0, 0, s, B)), a.imageSmoothingEnabled = !1, a.drawImage(
2874
+ const i = document.createElement("canvas"), s = i.getContext("2d"), o = Math.round(r.width * e), g = Math.round(r.height * e);
2875
+ return i.width = o, i.height = g, t !== "transparent" && (s.fillStyle = t, s.fillRect(0, 0, o, g)), s.imageSmoothingEnabled = !1, s.drawImage(
2701
2876
  r,
2702
2877
  0,
2703
2878
  0,
@@ -2705,12 +2880,12 @@ class PA extends U {
2705
2880
  r.height,
2706
2881
  0,
2707
2882
  0,
2708
- s,
2709
- B
2883
+ o,
2884
+ g
2710
2885
  ), i;
2711
2886
  }
2712
2887
  }
2713
- class IA {
2888
+ class kA {
2714
2889
  /**
2715
2890
  * Generates image data from canvas
2716
2891
  * @param canvas The canvas containing the image data
@@ -2729,10 +2904,10 @@ class IA {
2729
2904
  */
2730
2905
  async generateImageBlob(A, e) {
2731
2906
  return new Promise((t, r) => {
2732
- const i = this.getMimeType(e.format), a = (s) => {
2733
- s ? t(s) : r(new Error(`Failed to generate ${e.format.toUpperCase()} blob`));
2907
+ const i = this.getMimeType(e.format), s = (o) => {
2908
+ o ? t(o) : r(new Error(`Failed to generate ${e.format.toUpperCase()} blob`));
2734
2909
  };
2735
- e.format === "png" ? A.toBlob(a, i) : A.toBlob(a, i, e.quality);
2910
+ e.format === "png" ? A.toBlob(s, i) : A.toBlob(s, i, e.quality);
2736
2911
  });
2737
2912
  }
2738
2913
  /**
@@ -2753,16 +2928,16 @@ class IA {
2753
2928
  }
2754
2929
  }
2755
2930
  }
2756
- const z = {
2931
+ const J = {
2757
2932
  png: "image/png",
2758
2933
  jpg: "image/jpeg",
2759
2934
  webp: "image/webp"
2760
- }, y = {
2935
+ }, k = {
2761
2936
  png: ".png",
2762
2937
  jpg: ".jpg",
2763
2938
  webp: ".webp"
2764
2939
  };
2765
- class wA extends R {
2940
+ class VA extends L {
2766
2941
  /**
2767
2942
  * Saves image content as a downloadable file
2768
2943
  * @param content The image content (data URL or blob)
@@ -2771,8 +2946,8 @@ class wA extends R {
2771
2946
  */
2772
2947
  saveImage(A, e, t) {
2773
2948
  try {
2774
- const r = this.sanitizeFilename(e), i = y[t], a = this.ensureFileExtension(r, i);
2775
- typeof A == "string" ? this.saveImageFromDataURL(A, a) : this.saveImageFromBlob(A, a);
2949
+ const r = k[t];
2950
+ typeof A == "string" ? this.saveImageFromDataURL(A, this.sanitizeFilename(e) + r) : this.saveImageFromBlob(A, this.sanitizeFilename(e) + r);
2776
2951
  } catch (r) {
2777
2952
  throw console.error(`Failed to save ${t.toUpperCase()} image:`, r), new Error(`Image save failed: ${r instanceof Error ? r.message : "Unknown error"}`);
2778
2953
  }
@@ -2800,22 +2975,13 @@ class wA extends R {
2800
2975
  URL.revokeObjectURL(t);
2801
2976
  }
2802
2977
  }
2803
- /**
2804
- * Generates a default filename for image export
2805
- * @param format The image format for the file extension
2806
- * @returns Generated filename with timestamp
2807
- */
2808
- generateDefaultImageFilename(A = "png") {
2809
- const e = y[A];
2810
- return super.generateDefaultFilename("textmode-export", e);
2811
- }
2812
2978
  /**
2813
2979
  * Validates if the browser supports saving files in the specified format
2814
2980
  * @param format The image format to validate
2815
2981
  * @returns True if the format is supported for saving
2816
2982
  */
2817
2983
  validateSaveSupport(A) {
2818
- return A in z && A in y;
2984
+ return A in J && A in k;
2819
2985
  }
2820
2986
  /**
2821
2987
  * Gets the MIME type for the specified image format
@@ -2823,7 +2989,7 @@ class wA extends R {
2823
2989
  * @returns The MIME type string
2824
2990
  */
2825
2991
  getMimeType(A) {
2826
- return z[A];
2992
+ return J[A];
2827
2993
  }
2828
2994
  /**
2829
2995
  * Gets the file extension for the specified image format
@@ -2831,15 +2997,15 @@ class wA extends R {
2831
2997
  * @returns The file extension (including the dot)
2832
2998
  */
2833
2999
  getFileExtension(A) {
2834
- return y[A];
3000
+ return k[A];
2835
3001
  }
2836
3002
  }
2837
- class pA {
3003
+ class OA {
2838
3004
  constructor() {
2839
- o(this, "dataExtractor");
2840
- o(this, "contentGenerator");
2841
- o(this, "fileHandler");
2842
- this.dataExtractor = new PA(), this.contentGenerator = new IA(), this.fileHandler = new wA();
3005
+ a(this, "dataExtractor");
3006
+ a(this, "contentGenerator");
3007
+ a(this, "fileHandler");
3008
+ this.dataExtractor = new YA(), this.contentGenerator = new kA(), this.fileHandler = new VA();
2843
3009
  }
2844
3010
  /**
2845
3011
  * Applies default values to image export options
@@ -2870,18 +3036,16 @@ class pA {
2870
3036
  }
2871
3037
  /**
2872
3038
  * Generates image data from textmode rendering without saving to file
2873
- * @param textmodifier The textmodifier instance containing the canvas
3039
+ * @param canvas The canvas data containing the rendered textmode graphics
2874
3040
  * @param options Export options (excluding filename)
2875
3041
  * @returns Data URL string containing the image data
2876
3042
  */
2877
3043
  generateImage(A, e = {}) {
2878
3044
  const t = this.applyDefaultOptions(e);
2879
- if (this.validateOptions(t), t.scale === 1 && t.backgroundColor === "transparent") {
2880
- const a = A.textmodeCanvas.canvas;
2881
- return this.contentGenerator.generateImageData(a, t);
2882
- }
3045
+ if (this.validateOptions(t), t.scale === 1 && t.backgroundColor === "transparent")
3046
+ return this.contentGenerator.generateImageData(A.canvas, t);
2883
3047
  const r = this.dataExtractor.captureCanvasData(
2884
- A.textmodeCanvas,
3048
+ A,
2885
3049
  t.scale,
2886
3050
  t.backgroundColor
2887
3051
  );
@@ -2892,18 +3056,16 @@ class pA {
2892
3056
  }
2893
3057
  /**
2894
3058
  * Generates image blob from textmode rendering without saving to file
2895
- * @param textmodifier The textmodifier instance containing the canvas
3059
+ * @param canvasData The canvas data containing the rendered textmode graphics
2896
3060
  * @param options Export options (excluding filename)
2897
3061
  * @returns Promise that resolves to a Blob containing the image data
2898
3062
  */
2899
3063
  async generateImageBlob(A, e = {}) {
2900
3064
  const t = this.applyDefaultOptions(e);
2901
- if (this.validateOptions(t), t.scale === 1 && t.backgroundColor === "transparent") {
2902
- const a = A.textmodeCanvas.canvas;
2903
- return await this.contentGenerator.generateImageBlob(a, t);
2904
- }
3065
+ if (this.validateOptions(t), t.scale === 1 && t.backgroundColor === "transparent")
3066
+ return await this.contentGenerator.generateImageBlob(A.canvas, t);
2905
3067
  const r = this.dataExtractor.captureCanvasData(
2906
- A.textmodeCanvas,
3068
+ A,
2907
3069
  t.scale,
2908
3070
  t.backgroundColor
2909
3071
  );
@@ -2914,48 +3076,48 @@ class pA {
2914
3076
  }
2915
3077
  /**
2916
3078
  * Exports image to a downloadable file
2917
- * @param textmodifier The textmodifier instance containing the canvas
3079
+ * @param canvas The canvas data containing the rendered textmode graphics
2918
3080
  * @param options Export options including filename
2919
3081
  */
2920
3082
  async saveImage(A, e = {}) {
2921
3083
  try {
2922
- const t = await this.generateImageBlob(A, e), r = e.format ?? "png", i = e.filename || this.fileHandler.generateDefaultImageFilename(r);
3084
+ const t = await this.generateImageBlob(A, e), r = e.format ?? "png", i = e.filename || this.fileHandler.generateDefaultFilename();
2923
3085
  this.fileHandler.saveImage(t, i, r);
2924
3086
  } catch (t) {
2925
3087
  throw console.error("Failed to save image:", t), new Error(`Image save failed: ${t instanceof Error ? t.message : "Unknown error"}`);
2926
3088
  }
2927
3089
  }
2928
3090
  }
2929
- class T {
3091
+ class S {
2930
3092
  constructor(A = null, e = {}) {
2931
3093
  /** The element to capture content from (optional for standalone mode) */
2932
- o(this, "captureSource");
3094
+ a(this, "captureSource");
2933
3095
  /** Our WebGL overlay canvas manager */
2934
- o(this, "textmodeCanvas");
3096
+ a(this, "textmodeCanvas");
2935
3097
  /** Core WebGL renderer */
2936
- o(this, "_renderer");
2937
- o(this, "_canvasFramebuffer");
2938
- o(this, "_font");
2939
- o(this, "_grid");
2940
- o(this, "resizeObserver");
3098
+ a(this, "_renderer");
3099
+ a(this, "_canvasFramebuffer");
3100
+ a(this, "_font");
3101
+ a(this, "_grid");
3102
+ a(this, "resizeObserver");
2941
3103
  // Auto-rendering properties
2942
- o(this, "_mode");
2943
- o(this, "_frameRateLimit");
2944
- o(this, "animationFrameId", null);
2945
- o(this, "lastFrameTime", 0);
2946
- o(this, "frameInterval");
2947
- o(this, "_frameRate", 0);
2948
- o(this, "lastRenderTime", 0);
2949
- o(this, "_frameCount", 0);
3104
+ a(this, "_mode");
3105
+ a(this, "_frameRateLimit");
3106
+ a(this, "animationFrameId", null);
3107
+ a(this, "lastFrameTime", 0);
3108
+ a(this, "frameInterval");
3109
+ a(this, "_frameRate", 0);
3110
+ a(this, "lastRenderTime", 0);
3111
+ a(this, "_frameCount", 0);
2950
3112
  // Frame rate measurement smoothing
2951
- o(this, "frameTimeHistory", []);
2952
- o(this, "frameTimeHistorySize", 10);
2953
- o(this, "_pipeline");
3113
+ a(this, "frameTimeHistory", []);
3114
+ a(this, "frameTimeHistorySize", 10);
3115
+ a(this, "_pipeline");
2954
3116
  // Standalone canvas properties
2955
- o(this, "_standalone", !1);
2956
- o(this, "_drawCallback", () => {
3117
+ a(this, "_standalone", !1);
3118
+ a(this, "_drawCallback", () => {
2957
3119
  });
2958
- o(this, "_resizedCallback", () => {
3120
+ a(this, "_resizedCallback", () => {
2959
3121
  });
2960
3122
  this.captureSource = A, this._standalone = A === null, this._mode = e.renderMode ?? "auto", this._frameRateLimit = e.frameRate ?? 60, this.frameInterval = 1e3 / this._frameRateLimit;
2961
3123
  }
@@ -2966,12 +3128,12 @@ class T {
2966
3128
  * @ignore
2967
3129
  */
2968
3130
  static async create(A = null, e = {}) {
2969
- const t = new T(A, e), r = t._standalone ? e : void 0;
2970
- t.textmodeCanvas = new aA(t.captureSource, t._standalone, r), t._renderer = new j(t.textmodeCanvas.getWebGLContext());
2971
- let i, a;
2972
- t._standalone ? (i = e.width || 800, a = e.height || 600) : (i = t.textmodeCanvas.width || 800, a = t.textmodeCanvas.height || 600), t._canvasFramebuffer = t._renderer.createFramebuffer(i, a), t._font = new rA(t._renderer, e.fontSize ?? 16), await t._font.initialize(e.fontSource);
2973
- const s = t._font.maxGlyphDimensions;
2974
- return t._grid = new iA(t.textmodeCanvas.canvas, s.width, s.height), t._pipeline = new hA(t._renderer, t._font, t._grid), t.setupEventListeners(), t.startAutoRendering(), t;
3131
+ const t = new S(A, e), r = t._standalone ? e : void 0;
3132
+ t.textmodeCanvas = new mA(t.captureSource, t._standalone, r), t._renderer = new lA(t.textmodeCanvas.getWebGLContext());
3133
+ let i, s;
3134
+ t._standalone ? (i = e.width || 800, s = e.height || 600) : (i = t.textmodeCanvas.width || 800, s = t.textmodeCanvas.height || 600), t._canvasFramebuffer = t._renderer.createFramebuffer(i, s), t._font = new fA(t._renderer, e.fontSize ?? 16), await t._font.initialize(e.fontSource);
3135
+ const o = t._font.maxGlyphDimensions;
3136
+ return t._grid = new DA(t.textmodeCanvas.canvas, o.width, o.height), t._pipeline = new FA(t._renderer, t._font, t._grid), t.setupEventListeners(), t.startAutoRendering(), t;
2975
3137
  }
2976
3138
  setupEventListeners() {
2977
3139
  window.addEventListener("resize", () => {
@@ -3019,7 +3181,7 @@ class T {
3019
3181
  * ```
3020
3182
  */
3021
3183
  toString(A = {}) {
3022
- return new H().generateTXT(this, A);
3184
+ return new $().generateTXT(this, A);
3023
3185
  }
3024
3186
  /**
3025
3187
  * Export the current textmode rendering to a TXT file.
@@ -3044,7 +3206,7 @@ class T {
3044
3206
  * ```
3045
3207
  */
3046
3208
  saveStrings(A = {}) {
3047
- new H().saveTXT(this, A);
3209
+ new $().saveTXT(this, A);
3048
3210
  }
3049
3211
  /**
3050
3212
  * Generate the current textmode rendering as an SVG string.
@@ -3073,7 +3235,7 @@ class T {
3073
3235
  * ```
3074
3236
  */
3075
3237
  toSVG(A = {}) {
3076
- return new V().generateSVG(this, A);
3238
+ return new W().generateSVG(this, A);
3077
3239
  }
3078
3240
  /**
3079
3241
  * Export the current textmode rendering to an SVG file.
@@ -3097,7 +3259,7 @@ class T {
3097
3259
  * ```
3098
3260
  */
3099
3261
  saveSVG(A = {}) {
3100
- new V().saveSVG(this, A);
3262
+ new W().saveSVG(this, A);
3101
3263
  }
3102
3264
  /**
3103
3265
  * Export the current textmode rendering to an image file.
@@ -3127,8 +3289,8 @@ class T {
3127
3289
  * });
3128
3290
  * ```
3129
3291
  */
3130
- async saveCanvas(A, e, t = {}) {
3131
- await new pA().saveImage(this, {
3292
+ async saveCanvas(A, e = "png", t = {}) {
3293
+ await new OA().saveImage(this.textmodeCanvas, {
3132
3294
  ...t,
3133
3295
  filename: A,
3134
3296
  format: e
@@ -3198,7 +3360,7 @@ class T {
3198
3360
  * ```
3199
3361
  */
3200
3362
  render() {
3201
- this.measureFrameRate(), this._frameCount++, this._standalone ? (this._canvasFramebuffer.begin(), this._drawCallback(), this._canvasFramebuffer.end()) : this._canvasFramebuffer.update(this.captureSource), this._pipeline.render(this._canvasFramebuffer), this._pipeline.hasEnabledConverters() ? (this._renderer.background(0), this._renderer.image(this._pipeline.texture, this._grid.offsetX, this._grid.offsetY, this._pipeline.texture.width, this._pipeline.texture.height)) : (this._renderer.clear(), this._renderer.image(this._canvasFramebuffer, this._grid.offsetX, this._grid.offsetY, this._canvasFramebuffer.width, this._canvasFramebuffer.height)), this._renderer.reset();
3363
+ this.measureFrameRate(), this._frameCount++, this._standalone || this._canvasFramebuffer.update(this.captureSource), this._canvasFramebuffer.begin(), this._drawCallback(), this._renderer.reset(), this._canvasFramebuffer.end(), this._pipeline.render(this._canvasFramebuffer), this._pipeline.hasEnabledConverters() ? (this._renderer.background(0), this._renderer.image(this._pipeline.texture, this._grid.offsetX, this._grid.offsetY, this._pipeline.texture.width, this._pipeline.texture.height)) : (this._renderer.clear(), this._renderer.image(this._canvasFramebuffer, this._grid.offsetX, this._grid.offsetY, this._canvasFramebuffer.width, this._canvasFramebuffer.height));
3202
3364
  }
3203
3365
  resize() {
3204
3366
  this.textmodeCanvas.resize(), this._canvasFramebuffer.resize(this.textmodeCanvas.width, this.textmodeCanvas.height), this._grid.resize(), this._pipeline.resize(), this._renderer.resetViewport(), this._mode !== "manual" && this.render();
@@ -3260,11 +3422,7 @@ class T {
3260
3422
  * ```
3261
3423
  */
3262
3424
  renderMode(A) {
3263
- if (this._mode !== A) {
3264
- if (A === void 0)
3265
- return this._mode;
3266
- this.stopAutoRendering(), this._mode = A, A === "auto" && this.startAutoRendering();
3267
- }
3425
+ this._mode !== A && (this.stopAutoRendering(), this._mode = A, A === "auto" && this.startAutoRendering());
3268
3426
  }
3269
3427
  /**
3270
3428
  * Set the maximum frame rate for auto rendering. If called without arguments, returns the current measured frame rate.
@@ -3304,7 +3462,7 @@ class T {
3304
3462
  * ```
3305
3463
  */
3306
3464
  fontSize(A) {
3307
- u.validate(
3465
+ C.validate(
3308
3466
  typeof A == "number" && A > 0,
3309
3467
  "Font size must be a positive number greater than 0.",
3310
3468
  { method: "fontSize", providedValue: A }
@@ -3437,6 +3595,240 @@ class T {
3437
3595
  fill(A, e, t, r) {
3438
3596
  this._renderer.fill(A, e, t, r);
3439
3597
  }
3598
+ /**
3599
+ * Sets the stroke color for subsequent rendering operations
3600
+ * @param r Red component (0-255)
3601
+ * @param g Green component (0-255, optional)
3602
+ * @param b Blue component (0-255, optional)
3603
+ * @param a Alpha component (0-255, optional)
3604
+ *
3605
+ * @example
3606
+ * ```javascript
3607
+ * const t = await textmode.create({
3608
+ * width: 800,
3609
+ * height: 600,
3610
+ * })
3611
+ *
3612
+ * t.draw(() => {
3613
+ * // Set the background color to black
3614
+ * t.background(0);
3615
+ *
3616
+ * // Set stroke color to red and stroke weight to 4 pixels
3617
+ * t.stroke(255, 0, 0);
3618
+ * t.strokeWeight(4);
3619
+ *
3620
+ * // Draw a rectangle with red stroke
3621
+ * t.rect(100, 100, 200, 150);
3622
+ *
3623
+ * // Rectangle with both fill and stroke
3624
+ * t.fill(0, 255, 0);
3625
+ * t.stroke(0, 0, 255);
3626
+ * t.strokeWeight(2);
3627
+ * t.rect(350, 100, 200, 150);
3628
+ * });
3629
+ * ```
3630
+ */
3631
+ stroke(A, e, t, r) {
3632
+ this._renderer.stroke(A, e, t, r);
3633
+ }
3634
+ /**
3635
+ * Sets the stroke weight (thickness) for subsequent stroke operations
3636
+ * @param weight The stroke thickness in pixels
3637
+ *
3638
+ * @example
3639
+ * ```javascript
3640
+ * const t = await textmode.create({
3641
+ * width: 800,
3642
+ * height: 600,
3643
+ * })
3644
+ *
3645
+ * t.draw(() => {
3646
+ * t.background(0);
3647
+ *
3648
+ * // Thin stroke
3649
+ * t.stroke(255);
3650
+ * t.strokeWeight(1);
3651
+ * t.rect(50, 50, 100, 100);
3652
+ *
3653
+ * // Thick stroke
3654
+ * t.strokeWeight(8);
3655
+ * t.rect(200, 50, 100, 100);
3656
+ * });
3657
+ * ```
3658
+ */
3659
+ strokeWeight(A) {
3660
+ this._renderer.strokeWeight(A);
3661
+ }
3662
+ /**
3663
+ * Disables stroke rendering for subsequent operations
3664
+ *
3665
+ * @example
3666
+ * ```javascript
3667
+ * const t = await textmode.create({
3668
+ * width: 800,
3669
+ * height: 600,
3670
+ * })
3671
+ *
3672
+ * t.draw(() => {
3673
+ * t.background(0);
3674
+ *
3675
+ * // Rectangle with stroke
3676
+ * t.fill(255, 0, 0);
3677
+ * t.stroke(0, 255, 0);
3678
+ * t.strokeWeight(4);
3679
+ * t.rect(100, 100, 150, 100);
3680
+ *
3681
+ * // Rectangle without stroke (fill only)
3682
+ * t.noStroke();
3683
+ * t.rect(300, 100, 150, 100);
3684
+ * });
3685
+ * ```
3686
+ */
3687
+ noStroke() {
3688
+ this._renderer.noStroke();
3689
+ }
3690
+ /**
3691
+ * Disables fill rendering for subsequent operations
3692
+ *
3693
+ * @example
3694
+ * ```javascript
3695
+ * const t = await textmode.create({
3696
+ * width: 800,
3697
+ * height: 600,
3698
+ * })
3699
+ *
3700
+ * t.draw(() => {
3701
+ * t.background(0);
3702
+ *
3703
+ * // Rectangle with fill
3704
+ * t.fill(255, 0, 0);
3705
+ * t.stroke(0, 255, 0);
3706
+ * t.strokeWeight(4);
3707
+ * t.rect(100, 100, 150, 100);
3708
+ *
3709
+ * // Rectangle without fill (stroke only)
3710
+ * t.noFill();
3711
+ * t.rect(300, 100, 150, 100);
3712
+ * });
3713
+ * ```
3714
+ */
3715
+ noFill() {
3716
+ this._renderer.noFill();
3717
+ }
3718
+ /**
3719
+ * Sets the rotation angle for subsequent rendering operations
3720
+ * @param degrees The rotation angle in degrees
3721
+ *
3722
+ * @example
3723
+ * ```javascript
3724
+ * const t = await textmode.create({
3725
+ * width: 800,
3726
+ * height: 600,
3727
+ * })
3728
+ *
3729
+ * t.draw(() => {
3730
+ * t.background(0);
3731
+ *
3732
+ * // Normal rectangle
3733
+ * t.fill(255, 0, 0);
3734
+ * t.rect(100, 100, 150, 100);
3735
+ *
3736
+ * // Rotated rectangle
3737
+ * t.push(); // Save current state
3738
+ * t.rotate(45); // Rotate 45 degrees
3739
+ * t.fill(0, 255, 0);
3740
+ * t.rect(300, 100, 150, 100);
3741
+ * t.pop(); // Restore state (no rotation)
3742
+ *
3743
+ * // Back to normal (no rotation)
3744
+ * t.fill(0, 0, 255);
3745
+ * t.rect(500, 100, 150, 100);
3746
+ * });
3747
+ * ```
3748
+ */
3749
+ rotate(A) {
3750
+ this._renderer.rotate(A);
3751
+ }
3752
+ /**
3753
+ * Save the current rendering state (fill, stroke, etc.) to the state stack.
3754
+ * Use with {@link pop} to isolate style changes within a block.
3755
+ *
3756
+ * @example
3757
+ * ```javascript
3758
+ * const t = await textmode.create({
3759
+ * width: 800,
3760
+ * height: 600,
3761
+ * })
3762
+ *
3763
+ * t.draw(() => {
3764
+ * t.background(0);
3765
+ *
3766
+ * // Set initial styles
3767
+ * t.fill(255, 0, 0); // Red fill
3768
+ * t.stroke(0, 255, 0); // Green stroke
3769
+ * t.strokeWeight(4); // Thick stroke
3770
+ *
3771
+ * t.push(); // Save current state
3772
+ *
3773
+ * // Change styles temporarily
3774
+ * t.fill(0, 0, 255); // Blue fill
3775
+ * t.stroke(255, 255, 0); // Yellow stroke
3776
+ * t.strokeWeight(2); // Thin stroke
3777
+ * t.rect(100, 100, 150, 100);
3778
+ *
3779
+ * t.pop(); // Restore previous state
3780
+ *
3781
+ * // Back to red fill, green stroke, thick stroke
3782
+ * t.rect(300, 100, 150, 100);
3783
+ * });
3784
+ * ```
3785
+ */
3786
+ push() {
3787
+ this._renderer.push();
3788
+ }
3789
+ /**
3790
+ * Restore the most recently saved rendering state from the state stack.
3791
+ * Use with {@link push} to isolate style changes within a block.
3792
+ *
3793
+ * @example
3794
+ * ```javascript
3795
+ * const t = await textmode.create({
3796
+ * width: 800,
3797
+ * height: 600,
3798
+ * })
3799
+ *
3800
+ * t.draw(() => {
3801
+ * t.background(0);
3802
+ *
3803
+ * // Default styles
3804
+ * t.fill(255); // White fill
3805
+ * t.stroke(0); // Black stroke
3806
+ * t.strokeWeight(1); // Thin stroke
3807
+ *
3808
+ * t.push(); // Save current state
3809
+ *
3810
+ * // Temporary style changes
3811
+ * t.fill(255, 0, 0); // Red fill
3812
+ * t.strokeWeight(8); // Thick stroke
3813
+ * t.rect(50, 50, 100, 100);
3814
+ *
3815
+ * t.push(); // Save red style state
3816
+ *
3817
+ * t.fill(0, 255, 0); // Green fill
3818
+ * t.noStroke(); // No stroke
3819
+ * t.rect(200, 50, 100, 100);
3820
+ *
3821
+ * t.pop(); // Back to red fill, thick stroke
3822
+ * t.rect(350, 50, 100, 100);
3823
+ *
3824
+ * t.pop(); // Back to white fill, black stroke, thin stroke
3825
+ * t.rect(500, 50, 100, 100);
3826
+ * });
3827
+ * ```
3828
+ */
3829
+ pop() {
3830
+ this._renderer.pop();
3831
+ }
3440
3832
  /**
3441
3833
  * Draw a rectangle with the current shader or fill color.
3442
3834
  * @param x X-coordinate of the rectangle
@@ -3475,6 +3867,52 @@ class T {
3475
3867
  rect(A, e, t = 1, r = 1) {
3476
3868
  this._renderer.rect(A, e, t, r);
3477
3869
  }
3870
+ /**
3871
+ * Draw a line from point (x1, y1) to point (x2, y2) with the current stroke settings.
3872
+ * Lines respect stroke color, stroke weight, and rotation, but ignore fill properties.
3873
+ * @param x1 X-coordinate of the line start point
3874
+ * @param y1 Y-coordinate of the line start point
3875
+ * @param x2 X-coordinate of the line end point
3876
+ * @param y2 Y-coordinate of the line end point
3877
+ *
3878
+ * @example
3879
+ * ```javascript
3880
+ * const t = await textmode.create({
3881
+ * width: 800,
3882
+ * height: 600,
3883
+ * })
3884
+ *
3885
+ * t.draw(() => {
3886
+ * // Set the background color to black
3887
+ * t.background(0);
3888
+ *
3889
+ * // Draw a simple line
3890
+ * t.stroke(255, 0, 0); // Red stroke
3891
+ * t.strokeWeight(2); // 2px thick
3892
+ * t.line(100, 100, 300, 200);
3893
+ *
3894
+ * // Draw an animated rotating line
3895
+ * t.push();
3896
+ * t.stroke(0, 255, 0); // Green stroke
3897
+ * t.strokeWeight(4); // 4px thick
3898
+ * t.rotate(t.frameCount * 2); // Rotate based on frame count
3899
+ * t.line(400, 300, 600, 300);
3900
+ * t.pop();
3901
+ *
3902
+ * // Draw a thick yellow line
3903
+ * t.stroke(255, 255, 0); // Yellow stroke
3904
+ * t.strokeWeight(8); // 8px thick
3905
+ * t.line(200, 400, 400, 500);
3906
+ *
3907
+ * // Line with no stroke won't be visible
3908
+ * t.noStroke();
3909
+ * t.line(500, 100, 700, 200); // This won't render
3910
+ * });
3911
+ * ```
3912
+ */
3913
+ line(A, e, t, r) {
3914
+ this._renderer.line(A, e, t, r);
3915
+ }
3478
3916
  /**
3479
3917
  * Set the background color for the canvas.
3480
3918
  * @param r Red component (0-255)
@@ -3566,7 +4004,7 @@ class T {
3566
4004
  return this.textmodeCanvas.height;
3567
4005
  }
3568
4006
  }
3569
- class Y {
4007
+ class X {
3570
4008
  /**
3571
4009
  * Create a {@link Textmodifier} instance for textmode rendering.
3572
4010
  *
@@ -3614,10 +4052,10 @@ class Y {
3614
4052
  */
3615
4053
  static async create(A, e = {}) {
3616
4054
  if (A instanceof HTMLCanvasElement || A instanceof HTMLVideoElement)
3617
- return T.create(A, e);
4055
+ return S.create(A, e);
3618
4056
  {
3619
4057
  const t = A || {};
3620
- return T.create(null, t);
4058
+ return S.create(null, t);
3621
4059
  }
3622
4060
  }
3623
4061
  /**
@@ -3631,7 +4069,7 @@ class Y {
3631
4069
  * ```
3632
4070
  */
3633
4071
  static setErrorLevel(A) {
3634
- u.setGlobalLevel(A);
4072
+ C.setGlobalLevel(A);
3635
4073
  }
3636
4074
  /**
3637
4075
  * Returns the current version of the `textmode.js` library.
@@ -3642,26 +4080,27 @@ class Y {
3642
4080
  * ```
3643
4081
  */
3644
4082
  static get version() {
3645
- return "0.1.2-beta.1";
4083
+ return "0.1.2";
3646
4084
  }
3647
4085
  constructor() {
3648
4086
  throw new Error("Textmode is a static class and cannot be instantiated.");
3649
4087
  }
3650
4088
  }
3651
- const xA = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
4089
+ const LA = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
3652
4090
  __proto__: null
3653
- }, Symbol.toStringTag, { value: "Module" })), bA = Y.create, FA = Y.setErrorLevel, yA = Y.version;
4091
+ }, Symbol.toStringTag, { value: "Module" })), XA = X.create, NA = X.setErrorLevel, WA = X.version;
3654
4092
  export {
3655
- aA as TextmodeCanvas,
3656
- hA as TextmodeConversionPipeline,
3657
- X as TextmodeErrorLevel,
3658
- rA as TextmodeFont,
3659
- iA as TextmodeGrid,
3660
- T as Textmodifier,
3661
- vA as converters,
3662
- bA as create,
3663
- xA as export,
3664
- FA as setErrorLevel,
3665
- Y as textmode,
3666
- yA as version
4093
+ mA as TextmodeCanvas,
4094
+ FA as TextmodeConversionPipeline,
4095
+ oA as TextmodeErrorLevel,
4096
+ fA as TextmodeFont,
4097
+ DA as TextmodeGrid,
4098
+ S as Textmodifier,
4099
+ HA as converters,
4100
+ XA as create,
4101
+ X as default,
4102
+ LA as export,
4103
+ NA as setErrorLevel,
4104
+ X as textmode,
4105
+ WA as version
3667
4106
  };