emf-converter 4.5.2 → 4.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/browser.js +444 -268
- package/dist/browser.mjs +444 -268
- package/dist/index.js +444 -268
- package/dist/index.mjs +444 -268
- package/package.json +1 -1
package/dist/browser.js
CHANGED
|
@@ -12,8 +12,8 @@ var __require = /* @__PURE__ */ ((x) => typeof require !== "undefined" ? require
|
|
|
12
12
|
if (typeof require !== "undefined") return require.apply(this, arguments);
|
|
13
13
|
throw Error('Dynamic require of "' + x + '" is not supported');
|
|
14
14
|
});
|
|
15
|
-
var __commonJS = (cb,
|
|
16
|
-
return
|
|
15
|
+
var __commonJS = (cb, mod3) => function __require2() {
|
|
16
|
+
return mod3 || (0, cb[__getOwnPropNames(cb)[0]])((mod3 = { exports: {} }).exports, mod3), mod3.exports;
|
|
17
17
|
};
|
|
18
18
|
var __copyProps = (to, from, except, desc) => {
|
|
19
19
|
if (from && typeof from === "object" || typeof from === "function") {
|
|
@@ -23,13 +23,13 @@ var __copyProps = (to, from, except, desc) => {
|
|
|
23
23
|
}
|
|
24
24
|
return to;
|
|
25
25
|
};
|
|
26
|
-
var __toESM = (
|
|
26
|
+
var __toESM = (mod3, isNodeMode, target) => (target = mod3 != null ? __create(__getProtoOf(mod3)) : {}, __copyProps(
|
|
27
27
|
// If the importer is in node compatibility mode or this is not an ESM
|
|
28
28
|
// file that has been converted to a CommonJS file using a Babel-
|
|
29
29
|
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
30
30
|
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
31
|
-
!
|
|
32
|
-
|
|
31
|
+
!mod3 || !mod3.__esModule ? __defProp(target, "default", { value: mod3, enumerable: true }) : target,
|
|
32
|
+
mod3
|
|
33
33
|
));
|
|
34
34
|
|
|
35
35
|
// node_modules/jpeg-js/lib/encoder.js
|
|
@@ -620,10 +620,10 @@ var require_encoder = __commonJS({
|
|
|
620
620
|
0.275899379
|
|
621
621
|
];
|
|
622
622
|
var k = 0;
|
|
623
|
-
for (var
|
|
623
|
+
for (var row2 = 0; row2 < 8; row2++) {
|
|
624
624
|
for (var col = 0; col < 8; col++) {
|
|
625
|
-
fdtbl_Y[k] = 1 / (YTable[ZigZag[k]] * aasf[
|
|
626
|
-
fdtbl_UV[k] = 1 / (UVTable[ZigZag[k]] * aasf[
|
|
625
|
+
fdtbl_Y[k] = 1 / (YTable[ZigZag[k]] * aasf[row2] * aasf[col] * 8);
|
|
626
|
+
fdtbl_UV[k] = 1 / (UVTable[ZigZag[k]] * aasf[row2] * aasf[col] * 8);
|
|
627
627
|
k++;
|
|
628
628
|
}
|
|
629
629
|
}
|
|
@@ -1008,20 +1008,20 @@ var require_encoder = __commonJS({
|
|
|
1008
1008
|
var quadWidth = width * 4;
|
|
1009
1009
|
var x, y = 0;
|
|
1010
1010
|
var r, g, b;
|
|
1011
|
-
var start, p, col,
|
|
1011
|
+
var start, p, col, row2, pos;
|
|
1012
1012
|
while (y < height) {
|
|
1013
1013
|
x = 0;
|
|
1014
1014
|
while (x < quadWidth) {
|
|
1015
1015
|
start = quadWidth * y + x;
|
|
1016
1016
|
p = start;
|
|
1017
1017
|
col = -1;
|
|
1018
|
-
|
|
1018
|
+
row2 = 0;
|
|
1019
1019
|
for (pos = 0; pos < 64; pos++) {
|
|
1020
|
-
|
|
1020
|
+
row2 = pos >> 3;
|
|
1021
1021
|
col = (pos & 7) * 4;
|
|
1022
|
-
p = start +
|
|
1023
|
-
if (y +
|
|
1024
|
-
p -= quadWidth * (y + 1 +
|
|
1022
|
+
p = start + row2 * quadWidth + col;
|
|
1023
|
+
if (y + row2 >= height) {
|
|
1024
|
+
p -= quadWidth * (y + 1 + row2 - height);
|
|
1025
1025
|
}
|
|
1026
1026
|
if (x + col >= quadWidth) {
|
|
1027
1027
|
p -= x + col - quadWidth + 4;
|
|
@@ -1369,10 +1369,10 @@ var require_decoder = __commonJS({
|
|
|
1369
1369
|
successiveACState = 0;
|
|
1370
1370
|
}
|
|
1371
1371
|
}
|
|
1372
|
-
function decodeMcu(component2, decode4, mcu2,
|
|
1372
|
+
function decodeMcu(component2, decode4, mcu2, row2, col) {
|
|
1373
1373
|
var mcuRow = mcu2 / mcusPerLine | 0;
|
|
1374
1374
|
var mcuCol = mcu2 % mcusPerLine;
|
|
1375
|
-
var blockRow = mcuRow * component2.v +
|
|
1375
|
+
var blockRow = mcuRow * component2.v + row2;
|
|
1376
1376
|
var blockCol = mcuCol * component2.h + col;
|
|
1377
1377
|
if (component2.blocks[blockRow] === void 0 && opts.tolerantDecoding)
|
|
1378
1378
|
return;
|
|
@@ -1467,27 +1467,27 @@ var require_decoder = __commonJS({
|
|
|
1467
1467
|
for (i2 = 0; i2 < 64; i2++)
|
|
1468
1468
|
p[i2] = zz[i2] * qt[i2];
|
|
1469
1469
|
for (i2 = 0; i2 < 8; ++i2) {
|
|
1470
|
-
var
|
|
1471
|
-
if (p[1 +
|
|
1472
|
-
t = dctSqrt2 * p[0 +
|
|
1473
|
-
p[0 +
|
|
1474
|
-
p[1 +
|
|
1475
|
-
p[2 +
|
|
1476
|
-
p[3 +
|
|
1477
|
-
p[4 +
|
|
1478
|
-
p[5 +
|
|
1479
|
-
p[6 +
|
|
1480
|
-
p[7 +
|
|
1470
|
+
var row2 = 8 * i2;
|
|
1471
|
+
if (p[1 + row2] == 0 && p[2 + row2] == 0 && p[3 + row2] == 0 && p[4 + row2] == 0 && p[5 + row2] == 0 && p[6 + row2] == 0 && p[7 + row2] == 0) {
|
|
1472
|
+
t = dctSqrt2 * p[0 + row2] + 512 >> 10;
|
|
1473
|
+
p[0 + row2] = t;
|
|
1474
|
+
p[1 + row2] = t;
|
|
1475
|
+
p[2 + row2] = t;
|
|
1476
|
+
p[3 + row2] = t;
|
|
1477
|
+
p[4 + row2] = t;
|
|
1478
|
+
p[5 + row2] = t;
|
|
1479
|
+
p[6 + row2] = t;
|
|
1480
|
+
p[7 + row2] = t;
|
|
1481
1481
|
continue;
|
|
1482
1482
|
}
|
|
1483
|
-
v0 = dctSqrt2 * p[0 +
|
|
1484
|
-
v1 = dctSqrt2 * p[4 +
|
|
1485
|
-
v2 = p[2 +
|
|
1486
|
-
v3 = p[6 +
|
|
1487
|
-
v4 = dctSqrt1d2 * (p[1 +
|
|
1488
|
-
v7 = dctSqrt1d2 * (p[1 +
|
|
1489
|
-
v5 = p[3 +
|
|
1490
|
-
v6 = p[5 +
|
|
1483
|
+
v0 = dctSqrt2 * p[0 + row2] + 128 >> 8;
|
|
1484
|
+
v1 = dctSqrt2 * p[4 + row2] + 128 >> 8;
|
|
1485
|
+
v2 = p[2 + row2];
|
|
1486
|
+
v3 = p[6 + row2];
|
|
1487
|
+
v4 = dctSqrt1d2 * (p[1 + row2] - p[7 + row2]) + 128 >> 8;
|
|
1488
|
+
v7 = dctSqrt1d2 * (p[1 + row2] + p[7 + row2]) + 128 >> 8;
|
|
1489
|
+
v5 = p[3 + row2] << 4;
|
|
1490
|
+
v6 = p[5 + row2] << 4;
|
|
1491
1491
|
t = v0 - v1 + 1 >> 1;
|
|
1492
1492
|
v0 = v0 + v1 + 1 >> 1;
|
|
1493
1493
|
v1 = t;
|
|
@@ -1512,14 +1512,14 @@ var require_decoder = __commonJS({
|
|
|
1512
1512
|
t = v5 * dctSin1 + v6 * dctCos1 + 2048 >> 12;
|
|
1513
1513
|
v5 = v5 * dctCos1 - v6 * dctSin1 + 2048 >> 12;
|
|
1514
1514
|
v6 = t;
|
|
1515
|
-
p[0 +
|
|
1516
|
-
p[7 +
|
|
1517
|
-
p[1 +
|
|
1518
|
-
p[6 +
|
|
1519
|
-
p[2 +
|
|
1520
|
-
p[5 +
|
|
1521
|
-
p[3 +
|
|
1522
|
-
p[4 +
|
|
1515
|
+
p[0 + row2] = v0 + v7;
|
|
1516
|
+
p[7 + row2] = v0 - v7;
|
|
1517
|
+
p[1 + row2] = v1 + v6;
|
|
1518
|
+
p[6 + row2] = v1 - v6;
|
|
1519
|
+
p[2 + row2] = v2 + v5;
|
|
1520
|
+
p[5 + row2] = v2 - v5;
|
|
1521
|
+
p[3 + row2] = v3 + v4;
|
|
1522
|
+
p[4 + row2] = v3 - v4;
|
|
1523
1523
|
}
|
|
1524
1524
|
for (i2 = 0; i2 < 8; ++i2) {
|
|
1525
1525
|
var col = i2;
|
|
@@ -1652,10 +1652,10 @@ var require_decoder = __commonJS({
|
|
|
1652
1652
|
var blocks = [];
|
|
1653
1653
|
requestMemoryAllocation(blocksToAllocate * 256);
|
|
1654
1654
|
for (var i2 = 0; i2 < blocksPerColumnForMcu; i2++) {
|
|
1655
|
-
var
|
|
1655
|
+
var row2 = [];
|
|
1656
1656
|
for (var j2 = 0; j2 < blocksPerLineForMcu; j2++)
|
|
1657
|
-
|
|
1658
|
-
blocks.push(
|
|
1657
|
+
row2.push(new Int32Array(64));
|
|
1658
|
+
blocks.push(row2);
|
|
1659
1659
|
}
|
|
1660
1660
|
component2.blocksPerLine = blocksPerLine;
|
|
1661
1661
|
component2.blocksPerColumn = blocksPerColumn;
|
|
@@ -7664,7 +7664,7 @@ var require_UTIF = __commonJS({
|
|
|
7664
7664
|
514,
|
|
7665
7665
|
513
|
|
7666
7666
|
];
|
|
7667
|
-
var i, c, n, col,
|
|
7667
|
+
var i, c, n, col, row2, sum = 0;
|
|
7668
7668
|
var ljpeg_diff = UTIF3.decode._ljpeg_diff;
|
|
7669
7669
|
huff[0] = 15;
|
|
7670
7670
|
for (n = i = 0; i < 18; i++) {
|
|
@@ -7672,12 +7672,12 @@ var require_UTIF = __commonJS({
|
|
|
7672
7672
|
for (var c = 0; c < lim; c++) huff[++n] = tab[i];
|
|
7673
7673
|
}
|
|
7674
7674
|
for (col = raw_width; col--; )
|
|
7675
|
-
for (
|
|
7676
|
-
if (
|
|
7675
|
+
for (row2 = 0; row2 < height + 1; row2 += 2) {
|
|
7676
|
+
if (row2 == height) row2 = 1;
|
|
7677
7677
|
sum += ljpeg_diff(inp, prm, huff);
|
|
7678
|
-
if (
|
|
7678
|
+
if (row2 < height) {
|
|
7679
7679
|
var clr = sum & 4095;
|
|
7680
|
-
UTIF3.decode._putsF(tgt, (
|
|
7680
|
+
UTIF3.decode._putsF(tgt, (row2 * raw_width + col) * tiff_bps, clr << 16 - tiff_bps);
|
|
7681
7681
|
}
|
|
7682
7682
|
}
|
|
7683
7683
|
return;
|
|
@@ -7692,9 +7692,9 @@ var require_UTIF = __commonJS({
|
|
|
7692
7692
|
return;
|
|
7693
7693
|
}
|
|
7694
7694
|
var pix = new Uint16Array(16);
|
|
7695
|
-
var
|
|
7695
|
+
var row2, col, val, max, min, imax, imin, sh, bit, i, dp;
|
|
7696
7696
|
var data = new Uint8Array(raw_width + 1);
|
|
7697
|
-
for (
|
|
7697
|
+
for (row2 = 0; row2 < height; row2++) {
|
|
7698
7698
|
for (var j = 0; j < raw_width; j++) data[j] = inp[off++];
|
|
7699
7699
|
for (dp = 0, col = 0; col < raw_width - 30; dp += 16) {
|
|
7700
7700
|
max = 2047 & (val = bin.readUint(data, dp));
|
|
@@ -7712,7 +7712,7 @@ var require_UTIF = __commonJS({
|
|
|
7712
7712
|
}
|
|
7713
7713
|
for (i = 0; i < 16; i++, col += 2) {
|
|
7714
7714
|
var clr = pix[i] << 1;
|
|
7715
|
-
UTIF3.decode._putsF(tgt, (
|
|
7715
|
+
UTIF3.decode._putsF(tgt, (row2 * raw_width + col) * tiff_bps, clr << 16 - tiff_bps);
|
|
7716
7716
|
}
|
|
7717
7717
|
col -= col & 1 ? 1 : 31;
|
|
7718
7718
|
}
|
|
@@ -7946,13 +7946,13 @@ var require_UTIF = __commonJS({
|
|
|
7946
7946
|
if (csize > 1) step = Math.floor(max / (csize - 1));
|
|
7947
7947
|
if (ver0 == 68 && ver1 == 32 && step > 0) split = bin.readShort(md, 562);
|
|
7948
7948
|
var i;
|
|
7949
|
-
var
|
|
7949
|
+
var row2, col;
|
|
7950
7950
|
var len, shl, diff;
|
|
7951
7951
|
var hpred = [0, 0];
|
|
7952
7952
|
var huff = make_decoder(nikon_tree[tree]);
|
|
7953
7953
|
var prm = [off, 0, 0, 0];
|
|
7954
|
-
for (
|
|
7955
|
-
if (split &&
|
|
7954
|
+
for (row2 = 0; row2 < height; row2++) {
|
|
7955
|
+
if (split && row2 == split) {
|
|
7956
7956
|
huff = make_decoder(nikon_tree[tree + 1]);
|
|
7957
7957
|
}
|
|
7958
7958
|
for (col = 0; col < raw_width; col++) {
|
|
@@ -7962,10 +7962,10 @@ var require_UTIF = __commonJS({
|
|
|
7962
7962
|
diff = (getbithuff(data, prm, len - shl, 0) << 1) + 1 << shl >>> 1;
|
|
7963
7963
|
if ((diff & 1 << len - 1) == 0)
|
|
7964
7964
|
diff -= (1 << len) - (shl == 0 ? 1 : 0);
|
|
7965
|
-
if (col < 2) hpred[col] = vpred[
|
|
7965
|
+
if (col < 2) hpred[col] = vpred[row2 & 1][col] += diff;
|
|
7966
7966
|
else hpred[col & 1] += diff;
|
|
7967
7967
|
var clr = Math.min(Math.max(hpred[col & 1], 0), (1 << tiff_bps) - 1);
|
|
7968
|
-
var bti = (
|
|
7968
|
+
var bti = (row2 * raw_width + col) * tiff_bps;
|
|
7969
7969
|
UTIF3.decode._putsF(tgt, bti, clr << 16 - tiff_bps);
|
|
7970
7970
|
}
|
|
7971
7971
|
}
|
|
@@ -9531,9 +9531,9 @@ function decodeMonoBits(view, bmiOffset, bitsOffset) {
|
|
|
9531
9531
|
return null;
|
|
9532
9532
|
}
|
|
9533
9533
|
const bits = new Uint8Array(width * height);
|
|
9534
|
-
for (let
|
|
9535
|
-
const y = heightRaw > 0 ? height - 1 -
|
|
9536
|
-
const rowOff = bitsOffset +
|
|
9534
|
+
for (let row2 = 0; row2 < height; row2++) {
|
|
9535
|
+
const y = heightRaw > 0 ? height - 1 - row2 : row2;
|
|
9536
|
+
const rowOff = bitsOffset + row2 * stride;
|
|
9537
9537
|
for (let x = 0; x < width; x++) {
|
|
9538
9538
|
bits[y * width + x] = view.getUint8(rowOff + (x >> 3)) >> 7 - (x & 7) & 1;
|
|
9539
9539
|
}
|
|
@@ -10164,12 +10164,12 @@ function unfilter(raw, offset, stride, rows, bpp) {
|
|
|
10164
10164
|
let prev = -1;
|
|
10165
10165
|
for (let y = 0; y < rows; y++) {
|
|
10166
10166
|
const filter = raw[offset];
|
|
10167
|
-
const
|
|
10167
|
+
const row2 = offset + 1;
|
|
10168
10168
|
for (let i = 0; i < stride; i++) {
|
|
10169
|
-
const a = i >= bpp ? raw[
|
|
10169
|
+
const a = i >= bpp ? raw[row2 + i - bpp] : 0;
|
|
10170
10170
|
const b = prev >= 0 ? raw[prev + i] : 0;
|
|
10171
10171
|
const c = prev >= 0 && i >= bpp ? raw[prev + i - bpp] : 0;
|
|
10172
|
-
let v = raw[
|
|
10172
|
+
let v = raw[row2 + i];
|
|
10173
10173
|
switch (filter) {
|
|
10174
10174
|
case 1:
|
|
10175
10175
|
v += a;
|
|
@@ -10184,10 +10184,10 @@ function unfilter(raw, offset, stride, rows, bpp) {
|
|
|
10184
10184
|
v += paeth(a, b, c);
|
|
10185
10185
|
break;
|
|
10186
10186
|
}
|
|
10187
|
-
raw[
|
|
10187
|
+
raw[row2 + i] = v & 255;
|
|
10188
10188
|
}
|
|
10189
|
-
prev =
|
|
10190
|
-
offset =
|
|
10189
|
+
prev = row2;
|
|
10190
|
+
offset = row2 + stride;
|
|
10191
10191
|
}
|
|
10192
10192
|
return offset;
|
|
10193
10193
|
}
|
|
@@ -10253,41 +10253,41 @@ async function decodePng(bytes) {
|
|
|
10253
10253
|
const maxSample = (1 << depth) - 1;
|
|
10254
10254
|
const keyGray = trns && colorType === 0 && trns.length >= 2 ? trns[0] << 8 | trns[1] : -1;
|
|
10255
10255
|
const keyRgb = trns && colorType === 2 && trns.length >= 6 ? [trns[0] << 8 | trns[1], trns[2] << 8 | trns[3], trns[4] << 8 | trns[5]] : null;
|
|
10256
|
-
const sampleAt = (
|
|
10256
|
+
const sampleAt = (row2, index) => {
|
|
10257
10257
|
if (depth === 8) {
|
|
10258
|
-
return raw[
|
|
10258
|
+
return raw[row2 + index];
|
|
10259
10259
|
}
|
|
10260
10260
|
if (depth === 16) {
|
|
10261
|
-
return raw[
|
|
10261
|
+
return raw[row2 + index * 2] << 8 | raw[row2 + index * 2 + 1];
|
|
10262
10262
|
}
|
|
10263
10263
|
const bit = index * depth;
|
|
10264
|
-
return raw[
|
|
10264
|
+
return raw[row2 + (bit >> 3)] >> 8 - depth - (bit & 7) & maxSample;
|
|
10265
10265
|
};
|
|
10266
10266
|
const to8 = (v) => depth === 16 ? v >> 8 : depth === 8 ? v : Math.round(v * 255 / maxSample);
|
|
10267
|
-
const writeRow = (
|
|
10267
|
+
const writeRow = (row2, count, y, x0, dx) => {
|
|
10268
10268
|
for (let i = 0; i < count; i++) {
|
|
10269
10269
|
const di = (y * width + x0 + i * dx) * 4;
|
|
10270
10270
|
if (colorType === 3) {
|
|
10271
|
-
const idx = sampleAt(
|
|
10271
|
+
const idx = sampleAt(row2, i);
|
|
10272
10272
|
out[di] = palette[idx * 3] ?? 0;
|
|
10273
10273
|
out[di + 1] = palette[idx * 3 + 1] ?? 0;
|
|
10274
10274
|
out[di + 2] = palette[idx * 3 + 2] ?? 0;
|
|
10275
10275
|
out[di + 3] = trns && idx < trns.length ? trns[idx] : 255;
|
|
10276
10276
|
} else if (colorType === 0 || colorType === 4) {
|
|
10277
|
-
const g = sampleAt(
|
|
10277
|
+
const g = sampleAt(row2, i * channels);
|
|
10278
10278
|
const v = to8(g);
|
|
10279
10279
|
out[di] = v;
|
|
10280
10280
|
out[di + 1] = v;
|
|
10281
10281
|
out[di + 2] = v;
|
|
10282
|
-
out[di + 3] = colorType === 4 ? to8(sampleAt(
|
|
10282
|
+
out[di + 3] = colorType === 4 ? to8(sampleAt(row2, i * channels + 1)) : g === keyGray ? 0 : 255;
|
|
10283
10283
|
} else {
|
|
10284
|
-
const r = sampleAt(
|
|
10285
|
-
const g = sampleAt(
|
|
10286
|
-
const b = sampleAt(
|
|
10284
|
+
const r = sampleAt(row2, i * channels);
|
|
10285
|
+
const g = sampleAt(row2, i * channels + 1);
|
|
10286
|
+
const b = sampleAt(row2, i * channels + 2);
|
|
10287
10287
|
out[di] = to8(r);
|
|
10288
10288
|
out[di + 1] = to8(g);
|
|
10289
10289
|
out[di + 2] = to8(b);
|
|
10290
|
-
out[di + 3] = colorType === 6 ? to8(sampleAt(
|
|
10290
|
+
out[di + 3] = colorType === 6 ? to8(sampleAt(row2, i * channels + 3)) : keyRgb && r === keyRgb[0] && g === keyRgb[1] && b === keyRgb[2] ? 0 : 255;
|
|
10291
10291
|
}
|
|
10292
10292
|
}
|
|
10293
10293
|
};
|
|
@@ -10586,13 +10586,13 @@ function idctBlock(coef, offset, quant, out, outOffset, stride, ws) {
|
|
|
10586
10586
|
idct1d(vec, res);
|
|
10587
10587
|
for (let r = 0; r < 8; r++) ws[r * 8 + col] = descale(res[r], CONST_BITS - PASS1_BITS);
|
|
10588
10588
|
}
|
|
10589
|
-
for (let
|
|
10589
|
+
for (let row2 = 0; row2 < 8; row2++) {
|
|
10590
10590
|
let ac = 0;
|
|
10591
10591
|
for (let c = 0; c < 8; c++) {
|
|
10592
|
-
vec[c] = ws[
|
|
10592
|
+
vec[c] = ws[row2 * 8 + c];
|
|
10593
10593
|
if (c) ac |= vec[c];
|
|
10594
10594
|
}
|
|
10595
|
-
const o = outOffset +
|
|
10595
|
+
const o = outOffset + row2 * stride;
|
|
10596
10596
|
if (!ac) {
|
|
10597
10597
|
const x = descale(vec[0], PASS1_BITS + 3) + 128;
|
|
10598
10598
|
const dc = x < 0 ? 0 : x > 255 ? 255 : x;
|
|
@@ -11040,7 +11040,7 @@ function decodeJpegTiff(bytes, page) {
|
|
|
11040
11040
|
const x = block % columns * blockWidth, y = Math.floor(block / columns) * blockHeight;
|
|
11041
11041
|
const copyWidth = Math.min(blockWidth, width - x), copyHeight = Math.min(blockHeight, height - y);
|
|
11042
11042
|
if (decoded.width !== blockWidth || decoded.height < copyHeight || decoded.height > blockHeight) throw new Error("Invalid TIFF JPEG dimensions");
|
|
11043
|
-
for (let
|
|
11043
|
+
for (let row2 = 0; row2 < copyHeight; row2++) result.set(decoded.data.subarray(row2 * decoded.width * 4, (row2 * decoded.width + copyWidth) * 4), ((y + row2) * width + x) * 4);
|
|
11044
11044
|
}
|
|
11045
11045
|
return result;
|
|
11046
11046
|
}
|
|
@@ -11197,11 +11197,11 @@ function filterScanlines(input, width, height) {
|
|
|
11197
11197
|
const up = new Uint8Array(stride);
|
|
11198
11198
|
const pae = new Uint8Array(stride);
|
|
11199
11199
|
for (let y = 0; y < height; y++) {
|
|
11200
|
-
const
|
|
11201
|
-
const prev =
|
|
11200
|
+
const row2 = y * stride;
|
|
11201
|
+
const prev = row2 - stride;
|
|
11202
11202
|
const o = y * (stride + 1);
|
|
11203
11203
|
if (words && y > 0) {
|
|
11204
|
-
const w0 =
|
|
11204
|
+
const w0 = row2 >> 2;
|
|
11205
11205
|
const p0 = prev >> 2;
|
|
11206
11206
|
let same = true;
|
|
11207
11207
|
for (let k = 0; k < width; k++) {
|
|
@@ -11215,7 +11215,7 @@ function filterScanlines(input, width, height) {
|
|
|
11215
11215
|
continue;
|
|
11216
11216
|
}
|
|
11217
11217
|
}
|
|
11218
|
-
const none = data.subarray(
|
|
11218
|
+
const none = data.subarray(row2, row2 + stride);
|
|
11219
11219
|
const noneScore = score(none, stride);
|
|
11220
11220
|
if (noneScore === 0) {
|
|
11221
11221
|
out.set(none, o + 1);
|
|
@@ -11224,18 +11224,18 @@ function filterScanlines(input, width, height) {
|
|
|
11224
11224
|
let subScore = 0;
|
|
11225
11225
|
let upScore = 0;
|
|
11226
11226
|
for (let i = 0; i < 4 && i < stride; i++) {
|
|
11227
|
-
const x = data[
|
|
11227
|
+
const x = data[row2 + i];
|
|
11228
11228
|
sub[i] = x;
|
|
11229
11229
|
subScore += x < 128 ? x : 256 - x;
|
|
11230
11230
|
}
|
|
11231
11231
|
for (let i = 4; i < stride; i++) {
|
|
11232
|
-
const v = data[
|
|
11232
|
+
const v = data[row2 + i] - data[row2 + i - 4] & 255;
|
|
11233
11233
|
sub[i] = v;
|
|
11234
11234
|
subScore += v < 128 ? v : 256 - v;
|
|
11235
11235
|
}
|
|
11236
11236
|
if (y > 0) {
|
|
11237
11237
|
for (let i = 0; i < stride; i++) {
|
|
11238
|
-
const v = data[
|
|
11238
|
+
const v = data[row2 + i] - data[prev + i] & 255;
|
|
11239
11239
|
up[i] = v;
|
|
11240
11240
|
upScore += v < 128 ? v : 256 - v;
|
|
11241
11241
|
}
|
|
@@ -11258,10 +11258,10 @@ function filterScanlines(input, width, height) {
|
|
|
11258
11258
|
}
|
|
11259
11259
|
if (y > 0 && bestScore > stride >> 3) {
|
|
11260
11260
|
for (let i = 0; i < stride; i++) {
|
|
11261
|
-
const a = i >= 4 ? data[
|
|
11261
|
+
const a = i >= 4 ? data[row2 + i - 4] : 0;
|
|
11262
11262
|
const b = data[prev + i];
|
|
11263
11263
|
const c = i >= 4 ? data[prev + i - 4] : 0;
|
|
11264
|
-
pae[i] = data[
|
|
11264
|
+
pae[i] = data[row2 + i] - paeth2(a, b, c) & 255;
|
|
11265
11265
|
}
|
|
11266
11266
|
const paethScore = score(pae, stride);
|
|
11267
11267
|
if (paethScore < bestScore) {
|
|
@@ -12465,19 +12465,19 @@ function accumulateLine(acc, mark, stride, rows, width, x0, y0, x1, y1) {
|
|
|
12465
12465
|
if (top >= bottom) {
|
|
12466
12466
|
return;
|
|
12467
12467
|
}
|
|
12468
|
-
const add = (
|
|
12469
|
-
const i =
|
|
12468
|
+
const add = (row2, cell, v) => {
|
|
12469
|
+
const i = row2 * stride + cell;
|
|
12470
12470
|
acc[i] += v;
|
|
12471
12471
|
if (!mark[i]) {
|
|
12472
12472
|
mark[i] = 1;
|
|
12473
|
-
touched[
|
|
12473
|
+
touched[row2].push(cell);
|
|
12474
12474
|
}
|
|
12475
12475
|
};
|
|
12476
12476
|
const dxdy = (x1 - x0) / (y1 - y0);
|
|
12477
12477
|
let x = Math.min(width, Math.max(0, x0 + (top - y0) * dxdy));
|
|
12478
12478
|
const rowEnd = Math.ceil(bottom);
|
|
12479
|
-
for (let
|
|
12480
|
-
const dy = Math.min(
|
|
12479
|
+
for (let row2 = Math.floor(top); row2 < rowEnd; row2++) {
|
|
12480
|
+
const dy = Math.min(row2 + 1, bottom) - Math.max(row2, top);
|
|
12481
12481
|
let xnext = x + dxdy * dy;
|
|
12482
12482
|
if (xnext < 0) {
|
|
12483
12483
|
xnext = 0;
|
|
@@ -12491,27 +12491,27 @@ function accumulateLine(acc, mark, stride, rows, width, x0, y0, x1, y1) {
|
|
|
12491
12491
|
const hiCeil = Math.ceil(hi);
|
|
12492
12492
|
if (hiCeil <= loFloor + 1) {
|
|
12493
12493
|
const xmf = 0.5 * (x + xnext) - loFloor;
|
|
12494
|
-
add(
|
|
12495
|
-
add(
|
|
12494
|
+
add(row2, loFloor, d - d * xmf);
|
|
12495
|
+
add(row2, loFloor + 1, d * xmf);
|
|
12496
12496
|
} else {
|
|
12497
12497
|
const s = 1 / (hi - lo);
|
|
12498
12498
|
const x0f = lo - loFloor;
|
|
12499
12499
|
const a0 = 0.5 * s * (1 - x0f) * (1 - x0f);
|
|
12500
12500
|
const x1f = hi - hiCeil + 1;
|
|
12501
12501
|
const am = 0.5 * s * x1f * x1f;
|
|
12502
|
-
add(
|
|
12502
|
+
add(row2, loFloor, d * a0);
|
|
12503
12503
|
if (hiCeil === loFloor + 2) {
|
|
12504
|
-
add(
|
|
12504
|
+
add(row2, loFloor + 1, d * (1 - a0 - am));
|
|
12505
12505
|
} else {
|
|
12506
12506
|
const a1 = s * (1.5 - x0f);
|
|
12507
|
-
add(
|
|
12507
|
+
add(row2, loFloor + 1, d * (a1 - a0));
|
|
12508
12508
|
for (let xi = loFloor + 2; xi < hiCeil - 1; xi++) {
|
|
12509
|
-
add(
|
|
12509
|
+
add(row2, xi, d * s);
|
|
12510
12510
|
}
|
|
12511
12511
|
const a2 = a1 + (hiCeil - loFloor - 3) * s;
|
|
12512
|
-
add(
|
|
12512
|
+
add(row2, hiCeil - 1, d * (1 - a2 - am));
|
|
12513
12513
|
}
|
|
12514
|
-
add(
|
|
12514
|
+
add(row2, hiCeil, d * am);
|
|
12515
12515
|
}
|
|
12516
12516
|
x = xnext;
|
|
12517
12517
|
}
|
|
@@ -12641,14 +12641,14 @@ function rasterizeRings(rings, rule, bounds, sink) {
|
|
|
12641
12641
|
}
|
|
12642
12642
|
accumulateLine(acc, mark, stride, rows, width, segs[o], ya, segs[o + 2], yb);
|
|
12643
12643
|
}
|
|
12644
|
-
for (let
|
|
12645
|
-
const cells = touched[
|
|
12644
|
+
for (let row2 = 0; row2 < rows; row2++) {
|
|
12645
|
+
const cells = touched[row2];
|
|
12646
12646
|
if (cells.length === 0) {
|
|
12647
12647
|
continue;
|
|
12648
12648
|
}
|
|
12649
12649
|
cells.sort(byNumber);
|
|
12650
|
-
const base =
|
|
12651
|
-
const y = bandTop +
|
|
12650
|
+
const base = row2 * stride;
|
|
12651
|
+
const y = bandTop + row2;
|
|
12652
12652
|
let sum = 0;
|
|
12653
12653
|
for (let k = 0; k < cells.length; k++) {
|
|
12654
12654
|
const cell = cells[k];
|
|
@@ -13789,8 +13789,8 @@ var SoftwareRasterCanvas = class {
|
|
|
13789
13789
|
readRgba(x, y, w, h) {
|
|
13790
13790
|
const out = new Uint8ClampedArray(Math.max(0, w * h * 4));
|
|
13791
13791
|
const { width, height, data } = this;
|
|
13792
|
-
for (let
|
|
13793
|
-
const sy = y +
|
|
13792
|
+
for (let row2 = 0; row2 < h; row2++) {
|
|
13793
|
+
const sy = y + row2;
|
|
13794
13794
|
if (sy < 0 || sy >= height) {
|
|
13795
13795
|
continue;
|
|
13796
13796
|
}
|
|
@@ -13800,7 +13800,7 @@ var SoftwareRasterCanvas = class {
|
|
|
13800
13800
|
continue;
|
|
13801
13801
|
}
|
|
13802
13802
|
const si = (sy * width + sx) * 4;
|
|
13803
|
-
const di = (
|
|
13803
|
+
const di = (row2 * w + col) * 4;
|
|
13804
13804
|
const a = data[si + 3];
|
|
13805
13805
|
if (a === 255) {
|
|
13806
13806
|
out[di] = data[si];
|
|
@@ -13809,10 +13809,10 @@ var SoftwareRasterCanvas = class {
|
|
|
13809
13809
|
out[di + 3] = 255;
|
|
13810
13810
|
} else if (a !== 0) {
|
|
13811
13811
|
const table = unpremultiplyTable();
|
|
13812
|
-
const
|
|
13813
|
-
out[di] = table[
|
|
13814
|
-
out[di + 1] = table[
|
|
13815
|
-
out[di + 2] = table[
|
|
13812
|
+
const row3 = a << 8;
|
|
13813
|
+
out[di] = table[row3 | data[si]];
|
|
13814
|
+
out[di + 1] = table[row3 | data[si + 1]];
|
|
13815
|
+
out[di + 2] = table[row3 | data[si + 2]];
|
|
13816
13816
|
out[di + 3] = a;
|
|
13817
13817
|
}
|
|
13818
13818
|
}
|
|
@@ -13829,8 +13829,8 @@ var SoftwareRasterCanvas = class {
|
|
|
13829
13829
|
return null;
|
|
13830
13830
|
}
|
|
13831
13831
|
let out = null;
|
|
13832
|
-
for (let
|
|
13833
|
-
const sy = y +
|
|
13832
|
+
for (let row2 = 0; row2 < h; row2++) {
|
|
13833
|
+
const sy = y + row2;
|
|
13834
13834
|
if (sy < 0 || sy >= this.height) {
|
|
13835
13835
|
continue;
|
|
13836
13836
|
}
|
|
@@ -13838,7 +13838,7 @@ var SoftwareRasterCanvas = class {
|
|
|
13838
13838
|
const sx = x + col;
|
|
13839
13839
|
if (sx >= 0 && sx < this.width && u[sy * this.width + sx]) {
|
|
13840
13840
|
out ?? (out = new Uint8Array(w * h));
|
|
13841
|
-
out[
|
|
13841
|
+
out[row2 * w + col] = 1;
|
|
13842
13842
|
}
|
|
13843
13843
|
}
|
|
13844
13844
|
}
|
|
@@ -14536,9 +14536,9 @@ var SoftwareRasterContext = class {
|
|
|
14536
14536
|
return null;
|
|
14537
14537
|
}
|
|
14538
14538
|
const out = new Uint8Array(Math.max(0, w * h));
|
|
14539
|
-
for (let
|
|
14539
|
+
for (let row2 = 0; row2 < h; row2++) {
|
|
14540
14540
|
for (let col = 0; col < w; col++) {
|
|
14541
|
-
out[
|
|
14541
|
+
out[row2 * w + col] = clipAt(clip, x + col, y + row2);
|
|
14542
14542
|
}
|
|
14543
14543
|
}
|
|
14544
14544
|
return out;
|
|
@@ -14549,8 +14549,8 @@ var SoftwareRasterContext = class {
|
|
|
14549
14549
|
}
|
|
14550
14550
|
const polys = this.flattened();
|
|
14551
14551
|
const key = `${y}`;
|
|
14552
|
-
let
|
|
14553
|
-
if (!
|
|
14552
|
+
let row2 = this.rowCache;
|
|
14553
|
+
if (!row2 || row2.key !== key) {
|
|
14554
14554
|
const xs = [];
|
|
14555
14555
|
const dirs = [];
|
|
14556
14556
|
for (const poly of polys) {
|
|
@@ -14580,23 +14580,23 @@ var SoftwareRasterContext = class {
|
|
|
14580
14580
|
for (let k = order.length - 1; k >= 0; k--) {
|
|
14581
14581
|
suffix[k] = suffix[k + 1] + dirs[order[k]];
|
|
14582
14582
|
}
|
|
14583
|
-
|
|
14584
|
-
this.rowCache =
|
|
14583
|
+
row2 = { key, xs: sortedX, suffixWinding: suffix, count: order.length };
|
|
14584
|
+
this.rowCache = row2;
|
|
14585
14585
|
}
|
|
14586
14586
|
let lo = 0;
|
|
14587
|
-
let hi =
|
|
14587
|
+
let hi = row2.count;
|
|
14588
14588
|
while (lo < hi) {
|
|
14589
14589
|
const mid = lo + hi >> 1;
|
|
14590
|
-
if (
|
|
14590
|
+
if (row2.xs[mid] > x) {
|
|
14591
14591
|
hi = mid;
|
|
14592
14592
|
} else {
|
|
14593
14593
|
lo = mid + 1;
|
|
14594
14594
|
}
|
|
14595
14595
|
}
|
|
14596
14596
|
if (fillRule === "evenodd") {
|
|
14597
|
-
return (
|
|
14597
|
+
return (row2.count - lo & 1) === 1;
|
|
14598
14598
|
}
|
|
14599
|
-
return
|
|
14599
|
+
return row2.suffixWinding[lo] !== 0;
|
|
14600
14600
|
}
|
|
14601
14601
|
isPointInStroke(x, y) {
|
|
14602
14602
|
const rings = strokeToRings(this.flattened(), this.state.transform, this.strokeParams(), FLATTEN_TOLERANCE);
|
|
@@ -14803,8 +14803,8 @@ var SoftwareRasterContext = class {
|
|
|
14803
14803
|
const c1 = Math.min(image.width, Math.floor(dirtyX + dirtyW));
|
|
14804
14804
|
const r1 = Math.min(image.height, Math.floor(dirtyY + dirtyH));
|
|
14805
14805
|
const src = image.data;
|
|
14806
|
-
for (let
|
|
14807
|
-
const ty = dy +
|
|
14806
|
+
for (let row2 = r0; row2 < r1; row2++) {
|
|
14807
|
+
const ty = dy + row2;
|
|
14808
14808
|
if (ty < 0 || ty >= height) {
|
|
14809
14809
|
continue;
|
|
14810
14810
|
}
|
|
@@ -14813,7 +14813,7 @@ var SoftwareRasterContext = class {
|
|
|
14813
14813
|
if (tx < 0 || tx >= width) {
|
|
14814
14814
|
continue;
|
|
14815
14815
|
}
|
|
14816
|
-
const si = (
|
|
14816
|
+
const si = (row2 * image.width + col) * 4;
|
|
14817
14817
|
const di = (ty * width + tx) * 4;
|
|
14818
14818
|
const a = src[si + 3];
|
|
14819
14819
|
if (a === 255) {
|
|
@@ -16347,7 +16347,7 @@ function gdipHue(r, g, b) {
|
|
|
16347
16347
|
const q = (256 - t - (t >= 40 ? 1 : 0)) % 256;
|
|
16348
16348
|
return q - Math.floor((q + 42) / 86);
|
|
16349
16349
|
}
|
|
16350
|
-
function applyHueSaturationLightness(src, hue, saturation,
|
|
16350
|
+
function applyHueSaturationLightness(src, hue, saturation, lightness) {
|
|
16351
16351
|
const out = new Uint8ClampedArray(src);
|
|
16352
16352
|
const shift = Math.round(hue * HUE_CIRCLE / 360);
|
|
16353
16353
|
const sMul = 1 + saturation / 100;
|
|
@@ -16357,7 +16357,7 @@ function applyHueSaturationLightness(src, hue, saturation, lightness2) {
|
|
|
16357
16357
|
const b = src[i + 2];
|
|
16358
16358
|
const max = Math.max(r, g, b);
|
|
16359
16359
|
const min = Math.min(r, g, b);
|
|
16360
|
-
const l = clamp(Math.round(((max + min >> 1) * 100 + 255 *
|
|
16360
|
+
const l = clamp(Math.round(((max + min >> 1) * 100 + 255 * lightness) / 100), 0, 255);
|
|
16361
16361
|
if (max === min) {
|
|
16362
16362
|
out[i] = out[i + 1] = out[i + 2] = l;
|
|
16363
16363
|
continue;
|
|
@@ -16464,21 +16464,21 @@ function gdipBlur(src, w, h, radius, vRow = 0, vZeroAbove = false, fullVertical
|
|
|
16464
16464
|
const verticalIndex = taps >= edgeHeight ? (y) => Math.max(0, Math.min(h - 1, y)) : (y) => mirror(y, h);
|
|
16465
16465
|
const out = new Float64Array(w * h * 4);
|
|
16466
16466
|
for (let y = 0; y < h; y++) {
|
|
16467
|
-
const
|
|
16467
|
+
const row2 = y * w * 4;
|
|
16468
16468
|
for (let x = 0; x < w; x++) {
|
|
16469
16469
|
let s0 = 0;
|
|
16470
16470
|
let s1 = 0;
|
|
16471
16471
|
let s2 = 0;
|
|
16472
16472
|
let s3 = 0;
|
|
16473
16473
|
for (let j = -taps; j <= taps; j++) {
|
|
16474
|
-
const p =
|
|
16474
|
+
const p = row2 + horizontalIndex(x + j) * 4;
|
|
16475
16475
|
const kw = k[j + taps];
|
|
16476
16476
|
s0 += kw * src[p];
|
|
16477
16477
|
s1 += kw * src[p + 1];
|
|
16478
16478
|
s2 += kw * src[p + 2];
|
|
16479
16479
|
s3 += kw * src[p + 3];
|
|
16480
16480
|
}
|
|
16481
|
-
const o =
|
|
16481
|
+
const o = row2 + x * 4;
|
|
16482
16482
|
out[o] = Math.round(s0);
|
|
16483
16483
|
out[o + 1] = Math.round(s1);
|
|
16484
16484
|
out[o + 2] = Math.round(s2);
|
|
@@ -16488,10 +16488,10 @@ function gdipBlur(src, w, h, radius, vRow = 0, vZeroAbove = false, fullVertical
|
|
|
16488
16488
|
if (taps > 0 && vRow >= 0 && vRow < h) {
|
|
16489
16489
|
const horizontal = out.slice();
|
|
16490
16490
|
const endRow = fullVertical ? h : Math.min(h, vRow + verticalRows);
|
|
16491
|
-
for (let
|
|
16491
|
+
for (let row2 = vRow; row2 < endRow; row2++) {
|
|
16492
16492
|
const col = new Float64Array(w * 4);
|
|
16493
16493
|
for (let j = -taps; j <= taps; j++) {
|
|
16494
|
-
const yy =
|
|
16494
|
+
const yy = row2 + j;
|
|
16495
16495
|
if (vZeroAbove && yy < vRow) {
|
|
16496
16496
|
continue;
|
|
16497
16497
|
}
|
|
@@ -16500,7 +16500,7 @@ function gdipBlur(src, w, h, radius, vRow = 0, vZeroAbove = false, fullVertical
|
|
|
16500
16500
|
col[i] += k[j + taps] * horizontal[base + i];
|
|
16501
16501
|
}
|
|
16502
16502
|
}
|
|
16503
|
-
out.set(col,
|
|
16503
|
+
out.set(col, row2 * w * 4);
|
|
16504
16504
|
}
|
|
16505
16505
|
}
|
|
16506
16506
|
return out;
|
|
@@ -17104,14 +17104,14 @@ function shapeRowSpans(shape, dom) {
|
|
|
17104
17104
|
let active = [];
|
|
17105
17105
|
let next = 0;
|
|
17106
17106
|
const xs = [];
|
|
17107
|
-
for (let
|
|
17108
|
-
while (next < edges.length && edges[next].row0 ===
|
|
17107
|
+
for (let row2 = dom.y0; row2 < dom.y1; row2++) {
|
|
17108
|
+
while (next < edges.length && edges[next].row0 === row2) {
|
|
17109
17109
|
active.push(edges[next++]);
|
|
17110
17110
|
}
|
|
17111
|
-
active = active.filter((e) => e.row1 >
|
|
17111
|
+
active = active.filter((e) => e.row1 > row2);
|
|
17112
17112
|
xs.length = 0;
|
|
17113
17113
|
for (const e of active) {
|
|
17114
|
-
xs.push({ x: e.x + (
|
|
17114
|
+
xs.push({ x: e.x + (row2 - e.row0) * e.slope, dir: e.dir });
|
|
17115
17115
|
}
|
|
17116
17116
|
xs.sort((a, b) => a.x - b.x);
|
|
17117
17117
|
const spans = [];
|
|
@@ -26401,7 +26401,7 @@ function rasterizeMono(o, dropout, fixedBox) {
|
|
|
26401
26401
|
}
|
|
26402
26402
|
const local = { xs, ys, onCurve: o.onCurve, endPts: o.endPts };
|
|
26403
26403
|
const data = new Uint8Array(width * height);
|
|
26404
|
-
const at = (col,
|
|
26404
|
+
const at = (col, row2) => (height - 1 - row2) * width + col;
|
|
26405
26405
|
const r = new Raster(dropout);
|
|
26406
26406
|
const P = r.precision;
|
|
26407
26407
|
if (r.convert(local, false, 0, (height - 1) * P)) {
|
|
@@ -26472,9 +26472,9 @@ function rasterizeMono(o, dropout, fixedBox) {
|
|
|
26472
26472
|
const e1 = h.ceilPub(x1);
|
|
26473
26473
|
const e2 = h.floorPub(x2);
|
|
26474
26474
|
if (e1 === e2) {
|
|
26475
|
-
const
|
|
26476
|
-
if (
|
|
26477
|
-
data[at(col,
|
|
26475
|
+
const row2 = h.truncPub(e1);
|
|
26476
|
+
if (row2 >= 0 && row2 < height && col >= 0 && col < width) {
|
|
26477
|
+
data[at(col, row2)] = 1;
|
|
26478
26478
|
}
|
|
26479
26479
|
}
|
|
26480
26480
|
}
|
|
@@ -26515,9 +26515,9 @@ function rasterizeMono(o, dropout, fixedBox) {
|
|
|
26515
26515
|
return;
|
|
26516
26516
|
}
|
|
26517
26517
|
}
|
|
26518
|
-
const
|
|
26519
|
-
if (
|
|
26520
|
-
data[at(col,
|
|
26518
|
+
const row2 = h.truncPub(pxl);
|
|
26519
|
+
if (row2 >= 0 && row2 < height && col >= 0 && col < width) {
|
|
26520
|
+
data[at(col, row2)] = 1;
|
|
26521
26521
|
}
|
|
26522
26522
|
}
|
|
26523
26523
|
);
|
|
@@ -26596,10 +26596,10 @@ function rasterizeGray(o) {
|
|
|
26596
26596
|
const height = box.yMax - box.yMin;
|
|
26597
26597
|
const data = new Uint8Array(width * height);
|
|
26598
26598
|
for (let y = 0; y < hi.height; y++) {
|
|
26599
|
-
const
|
|
26599
|
+
const row2 = Math.floor(y / k) * width;
|
|
26600
26600
|
for (let x = 0; x < hi.width; x++) {
|
|
26601
26601
|
if (hi.data[y * hi.width + x]) {
|
|
26602
|
-
data[
|
|
26602
|
+
data[row2 + Math.floor(x / k)]++;
|
|
26603
26603
|
}
|
|
26604
26604
|
}
|
|
26605
26605
|
}
|
|
@@ -27402,9 +27402,9 @@ function rasterizeClearType(o) {
|
|
|
27402
27402
|
const data = new Uint8Array(n * height);
|
|
27403
27403
|
for (let y = 0; y < height; y++) {
|
|
27404
27404
|
sub.fill(0);
|
|
27405
|
-
const
|
|
27405
|
+
const row2 = y * hi.width;
|
|
27406
27406
|
for (let x = 0; x < hi.width; x++) {
|
|
27407
|
-
if (hi.data[
|
|
27407
|
+
if (hi.data[row2 + x]) {
|
|
27408
27408
|
sub[Math.floor(x / S)] += 1;
|
|
27409
27409
|
}
|
|
27410
27410
|
}
|
|
@@ -30873,12 +30873,94 @@ function handleEmfGdiShapeRecord(rCtx, recType, dataOff, recSize) {
|
|
|
30873
30873
|
}
|
|
30874
30874
|
}
|
|
30875
30875
|
|
|
30876
|
+
// src/emf-gdi-illuminant-data.ts
|
|
30877
|
+
var ILLUMINANT_CUBE_DATA = {
|
|
30878
|
+
1: "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",
|
|
30879
|
+
2: "eNrtXQuQXVWV3Rfoc5p0Pp1PJ51Pd7o7nU8nAUwEhwilEAcHEAeMH4oMFD8HNSiDgMIEZfiWDDBYfEcqjCgBiu+IolhAEK1kYNDAwBCF4atUGPwAllTi6ACeqXfv2VXv7jp7r/v6vW7C2Lffu791z7nnvr5r7X32Pu9dorFpbBqb/lyncRSoeAWxKKZdebs844m8REK5flePBHl2ol0YSYFEtHOqUp6IKNMKjk1j09iEJppG9awOgsqBpgpUysTkJMYHBOpMYzwLEzUkLiZoSJx1mNUX+qbArda3pIbtohVkfdOEcUzfxqaRnoiol5jAaZL0mGig2Zo8xNksq3Ag6gblZ5jqQdRlVx+mWXCgmr6Z5Sfb8EjrWxif2vlO0zdNw4hopzCmb2/ntKjEf3kzBFooIXHIfA2Iy8FkvbwMNKBhcdZvywP1aUXjrBfwtwfwdzbZAjYLlO+2YUL6Nj3YAjbNEpd3lL6lRG5M30Z6Wl60Pcnv2nJZMAWC9tDKxuXuWsm4XGoVDkRLNCzOFgdTXmiRLQ9R37RjiOYD/g8C/2bArp71TZuV9U3OqFX6ps3G9G0iuL4JtvxJfRMix/G3pPyxvqWFsUX6tm+Z//JWpX0EKpcrkiivBtq7vFfWEN4D9GMvWx7CnpY8UKDltjxEfVNITKHQN+0YorC7XT0tBf2bJcC/WRxs/2gRuL8Xgvu7mr5px0h9k7NAO5K+pYj09upbpf4pWS5Ss/r2wRT/+QAKdIAGxeUHTJTCSk0b4nI/U10Cvd+Wh/A+Wx5oX1B+H1B+hdW5CRT2tpwTCvQe0L/Zy1SfQHva8hCWA/9mmVZznO0B7u/dgX9TVd+0YxYDfjSrb/PB9TXov+1o+hZmk93BQvp2WD35JQ+IwqFJ/vNRFD5sokSHWO4BBTpYE4+4epAtD3SgVnGcfdCMXhAdYMtDoW9a+UC00pYH1jftGNY3jSL0PtC/2ZdsB2YfYL9X2PIQ9tYij5q+idlewL/ZE8RvlpMtYMvA/Y30bXfA38b0TR74dutboEEbDqtJkr9MlyNMdSA6XJYVq5/QhCGuflzuEh/kR63eAwVaZbsXNX0LmrbUZodqWNz4MIhPHGLLQzgYlD/IlodwIIhPfBD0bw6wq5f6JmdhJbDf+5FN0PdrNVv6xrNAYV/g3+wDPp8VZAvY3oD/b4++8Wyk9Y3ok6R1AIrX8aY6EB1rdR4o0DG2exCOTgsDb9FRdveCjrTdi5q+BcsFOcJ2L8LhFn8p5PpmxTc/DuITHwXxjVWAv4fZ1YdDQXziw6B/c4hWNC4/BO7vg4B/c6Dd/UnqW/3sAODffADEb1YC/2Z/YL/fD/jban2TB64A/Ef6dpLkv7ifPmeqQ6ATTTTQGtB/+IztHtCnTHWhcILZe8j1LVgScLztXoRjQXzyGFseavpmlj8K8PdIEJ9Ynb4zeBmOsKunw215KOlb6piP2/JQ0rfUMauA/T7MloeUvpWO+TDwbw4B/s2HQPz1IODfHIjib63VN3mgpm98IJ1R4r9kWqDTAf+/GCyUwmlW5yEQnWrTmz6fLsY7wslAP04y3QMKn7PzEzV9M3sYa8zeB9Fngh3A+JQtD3SC1TmhUOibxvGa/wbiG8eC+MQxoH9zNIhPHAX6N0fa8qDpG8+EvsmNqG+ahAQKnwD++8eBf/NR4N+sAvb7MLIF7FAQn2xM3+SBgc5jeiosP8dUBwpnBzt+cJadXqAv2+4BnalxO+5YC/TjDNs9CKfb7gF9AZQ/DeQ3Tg1WAILC50F882RbHsJJpvdR+G8Wf08E8Yk12t3D/hvo33wKxCdOAP2bT9ryEI4H/D8W5F+OAf7N0Tb/NX3jGR0J/JvVwH4fAfybwwH/PwH8m39S6M1rF6e6BvwiChcFO35woe0e0FeA/3CBTW863w4v0Lkgv3COFnqIr38A5c+y3Yuob1p5Cmda/KdAa0F88wzT+yj8N0tCvgDiG6eB+MSpoH/zedC/ORn0b04C8YnPgfjEiaB/swbY788A/+ZTwL85AfD/k8C/OR7Y72NB/PUY4N/8s+S/uN+vsshPFK4E/L8c8P+yYCUQKHwV5Bcv1XyDuO8SoB8Xkx2AvCjYCYwLQX7zK4C/FwD+ng/ik+cC/p5jVx/+AcQ3zgLxjS8D/p4Jxl+s1ZgTl2eA/s3pwH5/AfRvTgPxiVMB/z8P/JuTgX9zEvBvPgfsN9C3sAbkT78Z7ADAdRIRx3xd7hB9/WsViFuwThOPeMA1QD++pnEzvq623QO6yiwf6Eo7P0mX2+4B65vmYRT6ppWnQJeC/MYltrzk+mbx/yJgvy8E/P2KLQ90AYhvnA/iE+eC/s05oH9zdrAdmLOA/f4yiE+cCfi/FujjGcC/OR34N18E8cnTgH9zm8b/uHGLRf5AdLOJBroJ+A832uFFWg/4fz3ID3zDTk/QdbZ7EL4e7ADktWB8wzqQ37wG5Ce+BvIbV4P45FUgPnkliE9eDvh7WbAHWHwV8PdSEN+4BNjvi0H/5iKLXaxvGkEpqW+ljQtA/+Z8EJ84F/D/HODfnA3yL2cB/+Z7zH+Fx3fZ6QH6jh0epDsB/79l05vu0DyH+Lod5Bdvs6KHFOgWoB83m9FHoptA+RsBf9eTHYC4HuQnvgHyG9eB+ObXg92BuRbEN9cB/l4D+P810L+5GvRvrgL8vxL4N5eD/s1lwH5/FeRfLwX510tAfOJiwP+LAP8vBP7NAyQTAOV7+f40wmu0wQ4P0r12eCDcA/j/fbN8oLtB+e/Z5p3uAvrxHVD+Tk1YWN9AfvIO2z0It1vByUB0K8hP3AL4e7PtHoSbQHzyRg2Lq+tBfON6wN9vAP5fB/j7dcD/a4H9Xgf6N9fY9pv1TZMHuhr4N1eB/s2VID5xOeD/w2QHAB8iOwDwoJU8IAqbTJRoI9CPH9ndg/BDwP8HQH7xfrt82ADyi/fa7kG4B5T/PtkByLtBfuK7ID9xF8hPfAfkJ+4E8c1vgfjmHYC/t5vZUQq3gvjkLYD/Nwf7CyA3gf7NjSA+uR74N9eb7gHQN+6falWQpm+8IfVNblB4QhBfMvVxOz1Aj9nhwfCoRf5A9IjdPaCfAP7/WIstxtfDIL/4kN09oAeBfmwC4xM2gvzkj2z3gvVNk4Cavpnl7wf83WDLQ7gXxCfvAfHJ74P45N0gPvld0/tg/02rgoS+yWXNf7P5/y3Qv7kD8P92YL9vBfp4C7DfNwP/5ibg3zynOf9x8YzJfwpP2+HB8JQdHqQnAf9/Bvi7BYxPfAKUfxzkBx+z3QN6FJR/xEpOFvpmlv8xyE8+bLsH4SGQn3gQ5Cc2Af5vtPnP+qZVQT8ke4DUA7Z7wP6bdvtHfdOqqOmbHYC4B/D/+8B+3w36N98D9vsuEJ/8DohP3gn4/3Ka/3wAvWSnB8JWjf9x40U7PEi/UCBe+3mw/YfnAf+fA/x/BuQHngblnwL5xSfB+ISfgvJbQH7yCZCffByUfwzw91HA30dAfPMnID/xY2C/Hw52AOIhEN94EMQ3NgH7vRH0b34E7PcPAf8fAPb7ftC/2QDik/cCffwdyQRAmU6/JTsA+JodHqRXgzm8kH5jhwfCr+3wAP0S5AdfNkcfUHgJlN+qfXchvl4E+vELMD7hBTC+6XmQn3wO5CefAeWfBvx9CuQnntS0IW79FOQntoD8xBMgP/E4sN+PgfjkoyA++QjIT/zErl7qm1yGhwH/HwLjLx4E/ZtNID75hsl/Cv8byIwQ/gHw/3/s8CBtt8172AbGF74O+Ps7UP63oPxrIL/3Cij/G1D+15qwxN2/BOVfBvnJl2z3IGy13QN6EeQnfgHyEy+A/MTzID75HIhPPgPiG08D+/0U4P+TID75UxDf2AL4/wQYf/E4sN+PAf4/Cvwb7cdJmTMhCZX4KhF5u5ULaXeLQtI/Af6+qfUc4usNML7oj4C/fwD5gd+D8tvB7x9sA+MTXgflf2e7F6xvWvnwGshvvgL4/xuQn/gVyE/8EsQ3Xwb8fwnwfyuIb74I7PcvQHzyBZCfeB70b54D/H0GkPdpEJ94apj8r9eBHRUn68kZQdOvtD5JTP6cqqYioYxJVLPt/GJ90/hHb4LxCW+A8n8E+ck/gPzk70F+crstL7TNdg/C64C/vwP8/S2IT74G8hOvAPv9G7v6en1LVvFLQL6XQXzyJdC/2Qr4/yLwb97Z/P9/jVv/H/73af6Z8v+VNK0vr40yJLIkIAD7/SeQn3gT5DfesKsv9E1res1/A/HN34P45naQn9gG4pOv2+nLqG9aFTV9s8n7GujfvALik2P8G8PfFv9M8b+kOxVseUvpW0iX11hiYiGA+OSfQHzyTZCfeAPw/4+2e5DUt/rl78f4P4aP4SODW/1nrf8p3am0ZjIWgobJ8opMBIHJw8b+v2P4GP7nilP+hFn+Sy3GkQVTNjW5l2eUzdGgOJufhnhZez6FhEqre5OEylv7SUi8DtKgrHj47iq5R2z8jbKfF8fLkvULyuizckf9KmV0mtwn3l/SsPg+v36T5AZllyRxnhFdKXeJrWvLmJzRDXKPWL09vZvnte83pHbzBt2ngXGxMb2bF/RjsVcu/zON8gr9VxLlNaKfyzJi9eXUTl6lPD+dwnmjFr9QDii23pJkrzTxPyOj9nQ5JiR1SpDKctAt2yS43p8qyLOMaEgWFMtlFpjVfh85CfKLVmrCEV8fMtWDso9p8hC3j0qJCi+IshMscaCM/o40qFicLigvFeBsTRji7ML0bn7TZaTpQ7FyjaYMcfZNRRd49RZNG+L82yn285yI7rHlIf/+mKYOtenfNW2Iy8c0ZYjLpxRd4JUXkvznNaKXLfITZa/JPUIFtqdlgadsWPzno4g0/vNU439mVdOd2fX3a1ichkDrl1lozn8FjJTbX5E3loODNH2Lr4/Ij1+QfbUC8tpxGhgXa8qgXNApmjTE95maMrB/YHoPRJdISRBsv0pThjj7F813iLObyBaIfwX6cLfmOMR/yw9s94AezEz606O2e0A/05C48rwlDkT035o0xNVX07rA67Xxc5prkE9vZo0KQPmYZvk/k0aL/2mhWWGJAxHtb4FUez5PUjp4oo9kdvtXg4//OAtk/msoEZ1CmoNWzNZqaJSEc1P6xjhldJG8tQSZr5DnFDKxLgnyLP/9E6v/kN2m8J+378q0zkMx30C2A7FJ8Rt48YjtHtTGN5PlIjxndx/y79ek6V+svWq6B7n9t7oHw+F/6RDE/04N2rH4n9EOwX958AjznyL/NZBy/ptXcBG4vivs2ytbZ4HMfw0lottMNKv9PpWG5rP7kvrGc8o2pjrNvC8j2ixBsdgiQbF8luwAwlbNMYhrr2jcj6vbrM5Bjf/UoAAIvB0Usvhfgxrlv6xtNPivgQX/M/MjWkWjxH9FhU4x0VbzXx4s+S/RkeI/b1Ka/7xp8T9OGwE/NptoxvzXroD5r11f5L+GFvy3/kXbwPU1yn8JI/532vRvKf9Tp1pmXhfzXwtCaPznPUn+l3asAu2vyn+tGcPkP2/n/Leu4Fyb/nQxNcN/9v8R/7VGMv+1Rkb+a2jBf/MCNwJ6bAbXN0L85800/3mz1fyXIPNfK0NEk+mdzn/T/Of5wVbxP3Wm1vBfY/go81+CZf4nm7Hepsew+F+/eZ9Nj5Hkf1bv/2tXsBVc3ytA37YBfXuzOfrn/LfK7Cj8z+idzv90M9aA+CXi/1oQvzjXdm8k/+XRzfA/315vy1vkv3aLF/y3CHAf0LdNVJX/6UZuAdc3Evyv39wG9K0R/qewdiAZw+F/fYX9oAlDoOmV+K/RP+e/naA8GHxKq0D7m+F/bc8awI9TQPyyUf7Lo1vFf60Zo81/ubkJXN9m2/wPl/+8KeN/8mAZ/5NH0zagb29RVf6nkXYQMJgM5GSU+J9pTVihgRb/eVeL+Z9qR0X+awxX+M87avy3HZjzqBH+y7pk/k/WRVX5r11BwX8NLfhvEuA+oG+A/9lmcH1bQP/+WRDfazX/5SYY/5MhYWgH8cLW8l+erJ7/6YYss80/4j/tD8YnjTD/S+N/hst/i+FrQfxytPivNWNY/OdtxH8q8v9V+Z9qxqjwXwML/pvXtw3oW0X+ayynXWm4/C+qnAkcjdbwXzP/Of8zaiX/xfGrQPtX2+a/Iv81HwXxn2gtiF+cB7zAqvzXmlGN/xr9C/5bCnYX8H83gOtrhv9Zff5faeSzwO62mv/y4Leao//o8l82o57/ShOHy3/euRL4J6PFf43ha2zzX+O/yfC1IL7XEP8lSJRdYZtH5r/WyGb5H8f/tYj/EqSsvv+fPNMWQK0q/Lcu4RWgb9upWf7bAb7h8p8rnQn855bwX7sA/v7PaPFfnqrE/7QMVeK/BiL+F+P/G+G/rKsq/zWGa/znHQX/tSso+G8yvEH+y6Ob4X9p/J/WjGdBt3sr6N+3lP/pRpo9/NHkf6ohQ8BDWWabf1qRUUv5L6trjv8Zx/+0XkjOf6uLcgqI77WS/ykZqsh/rZEK/3kH4n/8frAGNsj/VCM3A/I0y/+t4PpeAf377eD63kLmH8T3h8t/rnUm+P9U5L/WyJz/Gqjxv77IStA/aYT/qVOtts2/xn/epfGfd9EpdvpC8l9WJvgvK0P8z7j/rzG8Ev8tBbsNxC8b47+sC/C/NP7f5L/WyIL/Gprmf2m7Sf6Xvv+rfAd2JPjP1Ur+y/PV8z/ZFMT/ZeD7h++llvJfnqtF/NcsfM5/M0I5WvzXZKga/zWGI/4T3Qbil98F91dV/mvN2Azie1X4bynYVqBvr4Lr2w7il28P/7nWRvifbskQiFAss82/wn8ukuJ/ubqq/Ncaudqmf8F/DdT4z7uI6FSgX2eCz/880H+pyn+tkYj/60H84jbQv2+I/xIkyjaB3nE1/muNHA7/y9ut4r/WjCb5nzXIf3m6avzXGpnz3zT/Lea/PNdI8Z/31fhvJyhHi/8aw6+wzX/Bfw1E/Kf898Ea4b+sqyr/tUYy/zUOV+G/qWBbgb69Cq5vO4jvjSz/s7T950ol/+XZ6vmvNATxf5lN/zT/uUyK/6K+qvzXGrnapn/OfytBuQaMTzwV8ONMcP+cB/ovFfmvNRLxn9aD+OXt4P/TCP9TZ6rIf62RBf81Dg+H/2K7VfwfVvAf8T9L+//1dc4E9qXfpn/Of+srxstptPifbshI8Z/3rQHjk0aL/1ojrwD8WAfil63lv6yrKv+1K2gF/20D/xK1iv/pZowk/7N0/79UZUX+a82o8d/8ytJym/5J/tdXuBL4xwcDfqwC/stqDWT+g/FJJ1KD/Be1nQn4cZ59ednFtvmP/NcYnvPfdGDWg/heq/ivNbIa/7VGFvy3LqFR/sujXwXXV5X/WjOGy38uOhnYn5mAP83xP6Mdhf/aMIPVNv3pODA+6UTQ/tHiv+aGXAHiF4j/N1Bj/JeVfRfYlw22+Wf+axyuwn9TwZ4F/fsm+a/9/t9I859LSv7LCuv5nzxVP2jFEPjG8nKb/in+lypcCfyrg0H7R4j/vLNR/svayvyXYIn/6XZcbJt/jf+8i9aB+MUNwH60iv9aIyvxXwNbzX8JSv5LFPA/4/E/2iU0w/9YcDL4/8wE/eN+0Igh8IMFy236N8h/ebKq/NeuIMv9f8vCHwfGJ50I2j+y/M+4/69Z+Jz/VoiixfyXlZX4nzrTBhDf2wTil4j/W0D84jlqFf/TzdgOru8t2/wPl/9cTvJfVsf8106U899qw2IQf2iU//JsVfmvtRLxf7U5OpnoeLv5jfJfnqvE/1RDzrPNf+S/xnCN/7yLaB0Yn3QD8B9bxX+tkZtAfG8z6N83yn95+Evg/hsu/8Xzf7RGIv6j7/9nnSC+1W3LD/VJWGwtIu0HkIv1d6VBXuPf/00/hYl//1v7HmT9738qn8Mqm/4a/3lvo/yX5xpZ/mdUhf9mhuJaaiX/5alK/E8yfAOI720C8UvE/y0gftkq/mvN2A6u7y3AP8T/dmD/OoF9mgE+v7np6nmLFmrUj9MeSZxXid4jNUGsvE/7Yfa4/Kv058ULOjS5lxdEh2tPporzo82nWxF9Wnv2TZxOTj8Ygyf6ew2L07lWIiiLv/+tMTznv52gvBbcHzeA/svtoP9Slf8awzeB+N5m0L9vlP/y8JfA9VXlv9aMt8D1VeW/1sxJoJ4ZoHyvdnlxe74mDHFjN00b4upepjxktK/5eKaM/lKThrg8xBIHIvqYJg9x40iyH1DzSe3pNnH1s9qTceLsNO3ROnHly8mn8vAKZRekn+7F7+xSCySiq7Unj8WP7Drl+YU83Syfjyjukm+LJ6LJe+heLqvchhszuwOzGcQvfgr8syb5n70K4peV+K+Bw+R/fS2TbPeVpoPr7yFbAAZB/2CJRv24/m7TO8jy+ID1gMaVml5mon+gLD9iuwd0BNkCcYztH2SfVhBePVlThjg7w35+b3a2JQ5E9I/ao4Xj+zL78YLZNQrCq9drzz6Ni1uV5yLy4i7t+cvxtYGUB7TG17+Zj38lelTu48dDxulJSj26mqfa84Hlo2fLt/qvys++ljyg1zNZafk2fFMTxor89+CIiaCaLpBfmgPiF/MUOCvHB7XnH8rfB5A6EJ8frmkE0X529yH2DzQPgbK/1ryDuPwE2R2Io8h+QN3fAv/hs9bTtWv+Qdp/4J30JUsciGrPD7We8JldoglHfF9J9gOIrwXPN79Be/5xXNyhaUNcfC/9WGZeox+QpQ5ED9qPl6f/0PQhvp7SwLj6c+3Z1nH5K/HIbPn87NdTD9Wuf0J3u29v98VffOVvnnYqNtp5Vr903vs2r005rOx0/PbjeB8vGXK1l/PjZaG4iLCblCpUQPnfZA2Lf1O5Tgm7YtZlgd65bgnVg965WXFnGfHOxfeccnt4Vrydd70CFbDrkyi/Iz5PtIffjM8vVcu1MurcQqUorwwp9fK0RIKMxWm3cnPl1LaHaJTElykVt8XFu7WyxQFte2lFi0XbX2hl83mbW6FhEd8nXTHjbl/PuxhjsHi9T5avB12b2y8FFlA+W5lqFOOuzVGJ0+31VM/VYCcnmNzuS0fuzDgv6qvy3u/i6oldko98amPcCYzrdIqSlHivSYw4WakpBa3HaZVGzk4oNUZKiXeTlIJMyinOizOWtWKaqFWKxXRLvZx33V4qYlkOZpdArpZh53o0bYu0nJuqlynrnev3mnwV78GkfDGlnVtgiZtzbpGCMmcXm6hzS6X4CbrvXr4cqQXuXbJNYlqelk3mnNtT0754wHs07YsH7C0r5oJx+V5FN3m2r6i9TRyQSV76ssHfSZC7xNF273cW5OY1PmoXvj0VGreV7n95FJOC39JZkKyUB+XNkHjpFLta5/DedTiJl1VmfBmXLXQTXLJiboabKK9ciMUkUUZIietUdI9ZO0XTtsirLqVePmCGLCqEZqZWNKrBHKl8whXq1aQvkrZPqziyckBqakmhfO7fCO0rMX6h86b/NSSUUcrBkpTTx5yu+TeaMMb5HhoaF8t80jtjQrt3S0EWYrKXJX6uxn/J2bIU7CTvWmHAd3Eaudm+K8TkKlP8cMIkK3XUVtpdWgF4satkrzjTOIm7Mpc6kjjD3o8vd0ukyvgJDCr4RIBPqged9Hu875SFRfnJPtVAbr/3U12yAbzqp0lcaEWXBXrnpwtQekIzpPYJtehW1I1pOUupl//meKXiyMu5SWFkUjrfX/rUpFg4Py8lqgw75xdYoHN+EeOxdtmXW6xpX1SDpVrN8b27twVM2Pd26ejv7DUHnO2708gd7btCTP63aKbXpVyApDPiNHK7wr6niRHn4zR2xzo6LPKwfdfq8M5PtHDn/STnTQXp1PD4nly6ryXu/ZQyKHE/VRYW+DTvNAXJ310+3QB+Ty+xTr59zb9INpDf3RoeGzlTgq4sFbO8bGBZLObI1oluXk8Jl6h3vWVQdhHdXKd5dsVfn+a7xdmA5bx55wc15y1KxcKkV8h/rmbfNXJH/14jN/Nfc96Z//Jjl/ZdYy/bd8U5Z/tumnfvxqVufIbZvis42/ckMdi+azd2PGiijUf/XlOI3L83FWSyRR7v/BSAT02Rh9/e+WneJuD0FLu5fbX+g8lu57sBPtN5U2FmSXkR+GyAz0mCjDvf47UGFIteCYrFXG83oE+CAu8H+jggCws1GHSiAfX/HBfjd5Z9t817Yd81cvNJNHKj7nsuQZrprbfvWgeA7bt2jty+a6Y3n49Pm06eRf9ecc7ZvisKUpt1ajc223eAT7HNc+7fa+TxbN+1Oti+a3hu352pIDMA3p32D3iV7bvWgGjfNdz72Ra5vPdzvEbg4t3rbALPdd5UkD6N3XG1XyscFwOi3yLrmOftBg56u4E72933UvwudVSbHZuzzHv94SnTXG/f0857tO+aQtTmHXb33Y93dgdggt29Z/uunaOw71od3vlOgE9W7itp35Psdr6U30y9p9nm13cBfLrFbufZvms42/c0+533s2zz7Gfb5rnevicb0APwXts8+7nAf+jzNoH7vU3QAZPdefzBVJjBNMjHOGTf2+zuO+fnhtt9L+x7OjrvZPwupQDjLOe8Fr/XTG/JvmvsZfuuKQTH7zTzzPE7rY48fmcqyBSz91sfv0vj07R7M6502f6Dm253390M2/y6boDPtP2DfPyERdDZtv/g5tjm2fXY5tn1Av+gD/gH/c528AeA/zDP2QQe1MC4mA/8g10scgv7LsmdzM9J+552zutTDlb3XebnZGt9Mj/HB7F9184R7bvm4PuYn9MUpDabZHff2b5rClHYdw13HL/TzhHjd5qC1Nt3RSG6AD7dcs4dx+80drN/r11kvX1P1zEb4HOAf9DjbAL3pswzrzpfb9+T5+izzbPvB/7BgG2eS/Y9hQ8C/2E+8A/a7O475+e8lua3nHOfzM8J+w7yd+Ms55vtu3YOV47fpRRgAsjfDTc/x7NOM7rO8TtNAYr8vaUQ05yNd9nddzcd4DPs7nu9fU/iM+3uvZsF/IPZdvc9Hz9pKUQPiL/1Av9gLsD7gP/Q722CzrPNsxsE/sF84B8skKDA21LDc1wqPyfJXb9Hi87b+blo3y3zruXneB7jdxo7fT5+eLj5ObbvVgegE+Tvdoj8nIZz/G6E8nPOa/k5Gb/T6sjjd6aC9AD/oBfgc4H/0Af8h37gHwwAfJ5tnjl+pzWg8O+1c3jnFwD/oE0Z+CaDc1ovod3uvsv8nDyTT+fnGHa5f99ofq48/kYzjWzf7fxdq/JzGj7F7L5zfk7DnZ9md++r5ue07n2z+bncvx+N/JyG94L8XSP5uRTeD/yDARB/m5c2z7zq5jubwAvs+EIc32h9Qk4jt/xCTrKX0G7m71wRv9My+M3m52rjb0H+bgLI3030b1d+rjT+TsPz+J3l4FfNz2k4ys91a+SR9l1pYGvyc1oDve/xrcrPpfF+kL8bAP5Bs/m5+d528BcA/2Gh5R84ZN5lF19KQDFK0AoBjLO77+n8XL19B/m74eTn5PgbK4PfaeKO43eaghT+vUYO8f3DFN7S/JzEi/hdY/k5LX5n5+eSsTEef2c1sGp+TsMr5ec0cuX5OXt8T6vyc1oD59vd97J9l3V4X/v+lK0w1uC6dH6uFPvb1e6+y/ycrMR3mPm7kcrP8UzLz/EKx+9GOj+nKYj3KD833fYPWp2fkzjH7xrJz4n4XcX8XFpBOH6nNTD69xXzcxIfjfwcGN+zwNsO/kLgPywC/oPmnPNKuxmdrx9fnx6AP87uvsv8nGyIzM9J3Nv5ueL3ATTnPM/PgfxdS/JzGu5i/G5Hzc8V4+tblJ9L4z3Af+gF43tanZ+TDUT5uXkg/tZIfi6FLwD+w0IQX1jk7QSizM9JCdjV7r5r+Tk+SH5/TsqIzM/JSqz8XLTvdgeg0fycPGiyNXiO43faMd67qf5tzs85Pyr5OQ2fA/yDHpC/6wX+Q7P5uX7bPA8rP1ffwPnAf1gAzPNC4D8s8raDPwT8h3aQwd9VM71s3zXixEUHyN+Nt7vvrqn8XLTvKD9n4VPM6HoyP1d6TwP4OyM/p+Ecv9tR83OFf28RuGp+TvMfBr09gH8+8B/S+TnG2b5r53B+kbcd/CFTXlwpP5ccf+PsDkCHlb/j8TdaB0DLz5XG39j5u0kgf9cJ8nfN5edy+95Ufq7Lj0p+TsM5fteK/FxyAH+z+bm5wD9oVX5Ow+cB/2HQV83PpRUE5ecWAf9gCIzvWQz8g13N6HwyPyfH35gdgPEgfzfBHn4b43da/i7371uRn9PwZvJzJfuuKcR0gGv5Oca7zeh6zb7b/kPV/JyGo/xcD/p+HRjf06L8nNZAjt+1Ij+XxCvl57QG5PE7O4E4BPyDxQAfB74/32F33yvl5yx8IsjfTQL5u06Qvxut/JyGd4Hv308H8bkZ4Pt1VfNzWoCw2fxcDxjf06r8nIb3A/9hANz/80D+rlp+TvsQvFsAxveg/NwQGN+z2Jaf2u+vmg0cB/J3Hdbguvrfv1J8hAkgf1ctP6fhWn6OV/L4nTX8VsnP8Uqz+Tlf//tXSXwG+H5d1fychqP83GzgX88B368D+TlfLT+nNbAWv29Vfi6NDwL/YT7wDxaA8T3N5ueGgP+wGIzvWQLiC+PQ9+tA/m4CyN81l5/zbrj5uZJ91/Cq+TkNd+Xfv2okP1e27yg/p+Ecv9MUJPfvRzs/J+N3poJUzc9pDRwA/sE8EH8bBON7Rjo/twiM71kM/IMlAF8K/IcOu/vuGs3PydlEb/48jszPpb4fb+KTQf5uit19d1NB/q4LfL+uYn5Ow+PzA7RjvJtpD79tdX5O4qOVn9Nwjt9pH0KM31XMz0l8NPJztnlG+TkRv5OLmn23G7gUxBdQfm48+H7dBJC/m2Q53yOcn6u375pCtCQ/p+Hs32vnaCQ/h37/apj5uTneHsDfaH5O4n3Af+gH/kOr83MSR/m5BWB8TyP5uRQ+BPyHxSB/twSM79kN+Acd/BWg1Jd7XO7fOzk4qDT+RhkXb+bnSvbddPDl71+1OD/Hz99QBs9x/E4jRxG/G638XBKfDeJvrcrPKcNvOX6nNdD1Af+hH/gPw8zPMe4Gwfie4eTn6vFFwH8YAv7DYuA/LAH5u6XAf9gN+Acd9Q9FkFqQ859BCfP4nPofFJYjCfPfv5RwSWI66zEJc/7OJ0XI+/j9ee0RHKnxOVIBpqU7J7xR+v36ZH5OI4adn+P3aOfnJO57gP/QC/yHqvk5TUEGgP+A8nODYHzPcPNzMn6nje9ZBPyHIRB/Q/m5JWB8z1LgH+zm7QBhBz8yhB+YwmoQyT5BwFIMJsrCgu6TnCs996lUOPf/5XnLMjNZq5n792mwPr6vleX4fjxzWma65AWX5S33/yVcj3cna2Y8z9+5tER5tv+ysByfIzMvwv5LSRL5OevHN2v2HfgXzebnBkD8rdH8nGzgfOA/LAD+w0JfNT+XxpvNzy0F43t2A/7B7pr8xEWHfHKYLxN6vMQE2ye2iaeTCS2Y1CYfGskHFH+dovrizXjOfw3N/6ZoNfPzPUsXJWXG+Wla1fGT6rLlzU/XtNGxfyDhMp+7tZojXWdKWEjFLC/hshrMSZVloSjG52pV51Nvqijjvvj+TbrmYupLuY28KOx/0n1Lf79OPmCj/Ps4ye/XpbStPj+XYgXjTo6vr5qfczJ+VzU/J3G271oDo33XzuH87gDv4OeClh5DyqQq+J/E4gETSk8XlVqR9w+0svlsklNOHHnVKZ5b6MsHsD7I0vxmfdDkzU9rU+QtErarOLNUMCZ0jf/pE0d8hnJm/uuWqODzTKUsexWz5HmFzMwW4ifJPkdqo8B7NG3k+L8vfx5Shfpk3eIO7ldqZrIPSFBo0DytbJwP2vLmFyRVl6dcHyx5c4skLPqZQ0p8jXctke6bzN8p7hsvdpP6JiRuD8V5YLyDnwXMTwUWdB/PeD3KoHNuQv0ThUtgsZxYBqVWuEmxdk2EOmVpMU2WIC/ibTtFqzkeMNWSt9rzeRV9Y63o0spG0kzX5C2SYkZZ36QXxfqQkrD8NVOrOVJ2dpszHbQ5SenkV+35V5q8FbNeTd4ib+Zq4hdZ0aeVjWTv19B4Gw9o8uY4/6c4hhz/17SR4//OdtAW2vJW8x80eeP8X8ptZK3wS+QFC3ypJm/Fon03W978/wEy0Krr",
|
|
30880
|
+
3: "eNrtnVuMXNWZ71fZ7XZVLozCbXQSIFLCRTrcRmcwjDQBR5oYIp2AeUgwDwEz0iQ40gQc6YTLA8F+COCHAP3AxZHCxRKQsQTMeARERsARBJC4ShiIFC4jBcwD2HkAO3TV3muto11rfVLtT+v//3ZfbLdzJonT1f2r2rWrev++77/WXrvauQP7n148tHxZWNp8uV/afKo+tHxFtbT59Ghp85VDzgfij3NOqRQVj5q2eJEKRzRzRJ2LXwiIZu4ZdW6Sl16fcLQTwtFOfLEGGxZe8/3/YoVo+rbF9Zaa7Vfs1Tn3pRHf/zFH+584ouNvvjTk+9/imjrnvjzL91842okxRzBxtv/uy7OR7v8Rn3NBjpgN9AASjnYicfTbGXO6/3/zORfgb2Zruv9f0T9W33yFYRfdkTHSA/TIwI9f4eBNiMLBWyQcvYHxKM9f4FGe6umOqml5afHSloSDAyAeXfH9H3NEE6cv4OgRPbzdJC/tonC0E8cM6eEdxxztYeJ0/4+Z5fV9kpd24tjPeX05dpY3qDFHr865eOxspPt/7Gygv4AW11tyzv3trKf7LxztxJij/XfOfbXUv+W2c1E4UEg4wnn7qEZE97WA6Pi7+LXAqpOLX/OIpicWDvZROHoFwtFOxONqeni742peX46r6OEdhaP6KBzVx+OM+nL8iPt5/CjSBn/8kNfHSV7aknBUH0+Y5ft/wizf/xNmaftUXN/XuUleepoThrxBfT35jXYijjna/8TpAfT1WU9/AV8f1rQ+fqOtq8bxmxHwfPx9MzD9Wrz0RgtHhgXhoDzlx6PfYYwnetr+44me15cTa15fTqx5fREOfomZo1+xiydV9PCIJ1U0nsWTRlTPSV6sL8JRfckc7UQ8ecj2v+G8Pp48y+ujcHB4y/bRTghHO5E4os7FU9r9Xe+E4npDzp0y9PQXIBxVkMzRHsYxR9S5eKru3+r46sYRzttH2Ll4WkDypuPzNNTf0+1wGu/vwtERKhzVl/z8aBdjPL3m+eX0mo6P4ukV7Y/C0a9YOPoVh8SRnokj2vAzRry+nDHk9UU4qi9nDHn+ShwdwImz+nKGUV/OnI10/88c0vG9cLQTwtFOjDnb/zOHfHzf5po693fS/0EF+Xu5UbY0nCXDmyKP8axif9ccKSQcOSQcVZAYzgp0eBFWeUTH34RVvL9P8mJ9WVXz+rKq5q9vVc3ry6qazr/EVcb44ewRry9nj9jLc+HsER3/ZY52MXFWX8426svZQ56/zhlGmr+Eo/yVODIwcebnOcNA97/FNW0eP6IT0PEfiv1fvhGO9jBxtv/finrE3roZOnE0Qsgc4YafG5Da6fg+tzx/L79e4Wh4Ec7l/V04EDBzpGfitL6ca9SX8ypeX86reH05r6L5O3FEE2cDoHjeiA2P2lzT8faN+rJ6yOvL6iGvL6uHfHy3esjHdy2uacNHdHwvHDmWOTLQxW/r/q/u+u0hH9+3uKbtxxfr45qo23/bD4uvCUjONo/ArzVGf18TEE5+rQlseNFwNrxw/vyaDS8mebm+nF/TfCMc1ZfE0S4mTuvL+RWvL+cb9eV8o75cwMf3iSOaOK0vF4wirS+TvFRfhKP6IhzVlzFHeibO2mf87pCO71u8lL++y+cP43dHdAI6c/QWjzkdAF3Y6u/apBgubPX3Mi9WBicchYfELwqR9fdwkafjC+Go/ghHFSRzVEGcv8iz4UXDeX25yKgvF9W0P/q1FT0/IxztROKIuhjWVry+rB3x+rJ2xOvL2hGvL2uN+rLWqC9rjfqy1qgvF48Cnb++eEQnqIUjx8KYI5o4Hd9dPKLj+xYv1RfhaP8viXp+tOWCvySw9i8cjRA011g46u8xXBLY+CJxVEESR9vO3DM9Y1hn9Pd1Na8v6/j43q+reX1ZV/P6sq6i+Vs4+v0LRzshHO1E4og2r9+oL+sqmr/DpSM6vheOaoRw5FjiiCZO68ulo0Dri3A0vheO5g8vrTw9vzLmiCZOJ1guj8X2L2+q78KjoxzhMV/vUXjQvFiAhCP/hKMikDhq/y5x9GA35mz+wvn1NT3/KRzthHAkUeZIsRjW8/oS1te0P/or+PheODpEhaNDNHN0iCaOaPP6rhjR8X2ba9rwKtD6IhzVl8zRTiSOaOK0vlxR8fG9cFRf/nnE5w+v1P2/pVn0V6L+PTcO2r9wNMBIHPX3zNn4wl/J5w+FA/+EIz2FowqSORr9Ozfm6MHN8b+h5vVlQ8Xry4aKYeFoF4WjGhHDhoq1fxc2VLS+tHhpfC8cje+Fo/F94kixxNn84YYq0PnDFtd0vH1eX34y4vXlJyNeXxrOzq/8pKrp/l8tb0/RwlhfHVH7F1562OTjI+vv9dWB9nfhqAjUGz0df2SOSkTmCCfOBhD1xprVl0le9EA4KgLCUQXxG2t6/rPhbADhNxr1ZSOfPxSOdkI42onM0S7GsNGoLxuN+rLRqC8bazq+Dz+rAq0viSMDE2f15WeVp37+DPX/3AB/VvETYMLR/OF1AbX/cWGoO3IguXBUAzJHOHOUDhJHs4+Z8/GFcNTfhaMikDkqES5xhBOn9eU6Pn84yUvbEY4kEo4kShzR6Px1Rn25zqgv11d0fC8c7YRwtBOZo12M4XrV/3V9ub6i4/sWL9UX4ai+XG/Ul+uN+nI9qy/RxetRfcmCbtL9vf30tcU3Rf1jzdn5w1BvovOLUTiYfhSOTkFkjvp75ggnTucP6038/IRwNL6oN9P5Q1dtZuP76NLjkWJuzJmA9eaK15fNFa8vm/n8oXCkmN9c8fVbmytaX8JmY/5wM68vwpFiwpFiYXNNF6DFzTUa36cDdHNNL2Bp8dL5CeFofl84OoK2gP6eN19tCaj9c95+PKoBmSOcOJs/rLYEOr6otvD5Q+GoCNRb+Pxh5qiCJI4enDirL67eYowvtvD5Q+Ho9585On6j38LrS8NZffFbavr6Jnlx/kI4Oj+ROXoBiSMaXdhSR1pfttR8fC8c1RfhqL5kjmpE4oi6GLcY9WVLTRfQx5moh/+t/lvNRNT+haP2n3lAswOpf88EhFsc9ffM0Rggc4QzZ+OLGWN8MWOML2aM8cWMUV9mjPHFjFFfZvj5iXrGqC8zRn2ZMerLjFFfZoz6MmPUlxljfDFj1JcZo77MGPVlxqgvM0Z9mTHqywyvL3GG1xfhqEbErRG1//HTV78OlNe/Dqj9Cwfq5/7764CwcDq/WP06IJz4Vj5/KByVCOGoCCSO2n/mCCfO1j+5aisdXwhHDglHONZbjfqylZ+fqLei9U+5vkzyUn0RjuZHhaPxfeJIsRgazs5/bvWRFZCw1fPxvXCwE8LRLgpHu5g4otHFrZ4ucI1bvWf1MW5D/T/112pbRGcHxk9fbYsoHuTHo/6ueNli4WgMIByNARJH8maOcOZ8fLHNGF9s4/4JR5IkjvTMnNWXbcb4Ypsxf7jNOD+xja9/8ttqR9dXbqv5+c9tNa0vLV5aXykczR8KR/XlfqO+3G/Ul/t9YPm7xUv1RTiaP7zfqC/38/oSt7devn6vQrU9ovbflaN4IBxh4bS/j7YHhp1wVCKEoxqQOcKZowFE4qwBVtvp+MJV2+n8oXBUQWK93RhfbDfOT2z39PqtertRX4Sj+iIczR9u9/QC9MxRBXF+e9tP/Sx+O/Iz15ftnn6ARdju6QWuwpGAmSM9Y/y3QC+Qj//G60uLl+YP/zMi98fv68ji/4nWDwnn/V04kFw46sGZI5w5wg3fwdcnjnbot0/19x3G+GKHMb7YEej8YeIIJ07ryw66/mmSl+vLDmN8scOoLzv4+sqGswbvd/D6MsmL4/sdvL4IR7uYOXoBLuzg9SXs4PWlxUv1ZYdRX3YY9eU/Ar9A/knev0ctrt9q4ejhmaP+njk7fzh6ks8vjp40+vuTdH2icIQzRy06c4QzZw1w9CSdPxSODkE32smvv6h28usnE0cVxLl6Z+DrE3by+Qvh6BgUjnZROFLMjzmizjWc1pedRn3ZadSXnby+hMyRgJmjF+DiTl5f4k6j/+/k9SX+Xvf31ssNo9/T/h5Gvw8OxYPm/4bPsYcLR9jF0XORnj9MHOHEaX9/jq9PHD3H1ycKR2MA4ahEZI5w4siwzNkAonrOmD98js5fCEdHaKyf5fUlcYQTp/XlWaO+PMvri3+W1xfhSLHwbIhs/XbDWX0Jz4bA5t8meXH+UDiqL88a9WXMEY3OvRLR8H/cX4ev8P7e4loBeTx6eNO/X+HnF0evoP6fyuPoFTq/6Iav0PGHG74cWfvPHOHMEU6cju9HL9P6IhyVCFe9jD4/Iff3l43xxcvo8xPy/OHLxvji5UDH98LRLtYvxUjnDxNHejr/Eq8vDWf1xb8U+PzhS0Z9ecmoLy/x+hJf4vWl4ay+xJd4fZnkxfXBb8rtooVh+CaLBw1HpSPn9zd5f8+P18eQfM0cTQFmjnDm7Pzh8E0+vzh8k/s3epOP70e7Ih9f7Ip8fLEr8vHFLqO+7Ap8fLHLuL5iV+Dj+128vow5W5+wK/D5w11G/38j8vryRuTzh2/EyNZXhjFHu+hceIPXl/AGry/C0T4IR/sgHNWX+AavL+493f/b/Xn4XkTxQDhyf9yfG47wmL/raH8fvhvp+UPhSPLZdyPDLj8e4cQjmgJMnA0ghu/S8YUbvmuML96JvL68E/n6hHcinz98h9eX6p3I1ye8w1+fcHSEVu8Y9eUdPr7w7/D64v8Y+fj+j/z1CUf7IBwJmDkS0MWGI9r8+2Ok6xPiH3l9EY72Ie4G7ufyNdzN4kHDWTwQjh7u4uzuiOKBcHb+MHGEm/rwoeP9/UOKnXDUwYUjhTJHFSRzpJBzow8jHd+PPqSfz+pGH0Q+vviA6Rld9UHk6xM+QPE89/cPIp2/qD+I6MGal88ffsDrS/0Bmx910f8p0voS/kTbf8Pp+sMW1/ds8+J2hKP6kjmqIM79KdL1Ce7PqL+n+DPcy6YHXJzdy+JB4qhDN+/s7F5H1w8N9zIsHGHnZvfy/p44ws7N7qF4zFkFGe6JvL/viXx8sYd+PJNwVCIyRzhxOr7/xPH1CZ/Qj4921SeRjy8+iXT+InEkYOboBTT99xOj/3/C64v/2PHx/cd0+VAMH/P6Ej/m9SV+zOtLi5cuQPuY15f4l3L/l+HJ7F9YPBCO+rsLs/sZdjFx1GMzR7MDmSPc3Jjd72gDn93P+7tw1KKH+/n4frjP8fnFfY6PL/Y5Pr7YF/n4fh/3r9rHxxeZo2PMVZ/R8jPm7ACtP+P1pf6M6ikc7WL0n9HpRZc4os75T+nwyYVP6fC/xYufr/8pry/hU15f4qe8vrhP6elR5wJyP8Wfyb9OWFof/HnQP2/3b/nrRmj90Gzg/X028POHsx5VjvTlc+94//fs9GLmCCfOxxfeGF/Ujq9fqB0/f1jz+jKqHZ8/rB0fX9S8vlQ1zzd1RfV0dUXbf+ZIwMTZAMJXjo/vK15ffEXbp/MjenrUhRHXM464nnHE60sc0ZcnHO2Di8afzx4afLTEebXEeX2IuV/iPCxxHg8xdwvlzX96pS/5ax/8XL58RW1E3/t/FKl8dfEbUb4rYRf/Z9R08oaL/0u/jNaNGP8xItrciuGfov7h5I0Y/ndEOI3vvh+KNN+K4Yeh5xBujv9/iSUsN53/18iwq/+Pfn3t2/UNgWFX/zIw7OpfBf2jNr8jMNyrfhMUVvyBgB6e+MMBPTw9/2Oh5xh/yuDPR0f5qwZ/E9mU+buO3qH+MPbYHeo9mqvf777o2B3G+amHnHeuLr3pk98Mov5R+7uvRI3b335V//7aOPmPcPKfvf/x7wOiqX7/Y2DYhX8KiI7rR/ieR7T5QQzf94Dm+vFDj2gan/6Ld+gXOOb/6vnv/+eeH183eH78/tLT96/+lafvX32HRzT7j96/9JPqAQ9g+ln1sKcHcPWYZ4e3q54Kjr1/1fOBvn/Vq8HwP/L3793I3r7Gf0TT+7cnIprev30R0V5X/5n+yX+kf/Kf+e2+GijW/uvn0v7rjSn/NW77X/Jb/C8LLv4D/cV/JLj4j/RP/iM65j/1tIFo//WTaf/1kyn/9a60/S/5fYdnh68T/9EBmv1Hh2/yH9HkP62PRf8Fl/1vv3/af/3+vcWPv0n/SxqK/0hS8R8pXO+LVPC6jrQ+1r1I9R77z/iRPF+5rxp+f8Pw+1T+/rb917jJ/4bf3zH8/p7h9/c9erD4jx6c+I9qnv9+avj9c6O/32D095b/mrb9L+2o+I9epPiPJE3+I5r8Z4JXjxl+P2X4/bzh96uG32+x/tLyv1wfxX/wIus9kdbHep+jgtc1G/GX/FffDCLV3x0Z6fun/ddY+a9rSWz7rx/di5P+l/wW/0sPHvv3HdSfst/f4/l97D/z+4ee+u1/xPO77v/6ybT/+sna/muq/C/1918Z+f0OOv4R/9F7MPaf5veHjfz+GM/v9VNGfn+ejx/b/mva9r+Y398LNL/XeX0aErze4yKrj43/dPxf07fP+V6k+rtBRPqP/dP+qztH5b/2O7pvovc3+3sqqq9p/C3+I7/jt1B/yn5/xyP9xX9ExX+W352/zPD7R7y/a//1k/mfG/n9Bs/70y8Nv39l5Pc7jPz+GyO/P2DMbzxs+P2Y4fdTRn9/3ujvrwZeH98K/P17L9IBevIfVcDkP83v+2h7d77m84++F6n+7gvI7yzgkcjv5G/bfy2wa/tf8vtUVF+z32dxv8V/5Hf8jkcPFv/Rg9P79wOe37X/+rm0//q5lP/6uZT/Gjvnb+D5XfxHLVryP3qRaf4PKexcfU/N56cf4Pld+6+fTPuvn0z5r3el7X+pPr4aeH5/y/A7+Y/eAlfvjnQCv97D/S76P3n81fz8hO9RvbX/miv/9caci1/jfk/6X/T71MD9PssjPOk/MtiN+z/z+3tGfv+B4fdlPL9r//WTtf3XtO2/pk2+Ev/Re1DfVNP8Xt9a0/xe31mz8U/jP5/feNA4f/GIMf55zMjvTxn5/fnA5zdeNfJ79h8pnPxHNPlP6+Mew+99ht+14/1lWaT6t/3XXPmv9Vf+lyYK4zcDwy6cRv124SzPsAvf8oiK/0x/Fy408vsPDL8vM/z+kdHff+rp+QvxHzla/8Lw+ybD71trmt/rO2ue3+8x/H7Q8PsRY37jcWP885SR35/n+b1+FfX3/P69ZfT394z+vjvy/r7HyO/7HD/+aj491/K/NBL4AufxqMD0n/S/6Lf4j9YQxNMMv8+i4/PkP3pww9fUTH/tv34u7b/G2n/9XG3/S35fVbP5TVdfU7P2Lv6jwzf7j2jynzXw+k7j/OQ9xvmLB43zk48Yfj9uzF8+zc9P1s8b+f1Vw++3DL/fM/wu+T/Z3/fy9THaf70vyn+9py4si1T/Sf+L/KjA9Bf/EXbxRO539h/h5D/z+1uerk8Ia/jxqf3XGws/MPr7ZUZ+/zH1W/xHjor/SH/xHymc/Gf5/VYjv99p+H2P0d8fNPr7I8b5i8eN+Y2njfmNFwLP768a+f0tI7+/Z/i92/B7Lz+/pvzXu9L2X9Mu/n8xUCz+I7/Ff3QSMfuP1hBk/xFO/lO/zzX8XmP4fSE/Ptv+a+pcuAz1p+y3+I/G51cZfl9j+P2Lmuajxn/a32818vudht/3GH4/aPT3R3h/F//Re1A/HXh+T/6jtyD5z/r7W0Z/1/7r/L6br4/R/utdafuvafMHeKj+Pcn/yG/xHwks/iMcj/MMZ/+R39l/hBu+qqbrC7X/emPaf70x5b/Gbf9L6wsvR/09rx/+sZHfr6qZ/tl/dPgm/6nfNxl+32r09zuN/H6P4feDht+PGH4/HiLt70+j/p7r59h/RJ2rXwt0gX7J/5bf7xn9fbfR3/dGfvzto/r3fE3jkfPLA9Vf/EcCi/8IZ/8RTv4zv0/zDLu4yvD7XKO/rzH8vpD1914Mlxh+X879lv6PBM/5H+mf/Ec0+c/z+02G37caft9pjH/uofmoN+l/Mb8/YuT3xw2/nw48v78QeH5/jZ+f9G8Zfr9n+L2b+93yv5Tf90f6/vma6i/+I/3FfySwc0dzv91xnuLGf+r36TVdX6z91xuL5xp+rzH8voiPz8V/NEfhLzf8/jH3O/mPsHP+mpqev/C/MM5f3GTMb95q+H2nMb9xD81Hk/2/3N8fMfL740Z+b/xn8xsv8PWF/jW+/si/zdcfaf/1rrT919S5sJdfH+T38+uDfM2oc2F5oPpn/5HA2X+Es/8IJ/+536cbfq/ix2fbf017MZxf0/G5+I/89pfUDIv/yNHsP6LZf7Y+4Rp+/kL7rzfmb+YniPxtNe9Pd9U8v9/LG5D4j16k+I8UTv4jmvyn+f0Fw+/X+Poj7b/eFeW/3pW2/6X8vjfy/L6fDn/Ef6S/+I/0d+5Lht9Hc78b/xmOJxl+n274vYr1915s+a8f3KwvPt/I7xcZfl9SMyz+ozmK5D/z+yrD72trfnzeaPh9Mz9B1PZfU9er7zLOT95rnL94yHO/HzH8ftzo708b+f0Fw+/XDL/f5usL/ft8/VHYbeT3vZHn9/00HuX5P0TFf6R/9p8JfDT32x3nKdb+6z1V/mu/Y9t/jV2M53G/xX80CekvMvy+xMjvl9d0/ZG/suL5/WrD72v5Ai/tv36utv+aul59W83z+13G+Yt7jfMXyX90gLr6Uc/9ftzw+2mjv79g5PfX+PrCtv+aOhfej7SBe/l8bZTf9/Lrg3z6fEv0DiX/EW34lKf6N/5TgY/mfrvjmd+96E4y/D7d8Ptsw+/zuN+S/9EkpPR/ZHDyHxnsnF9f0fUJ/sqK9/erDb+vNfr7jUZ+v9nw+zbD77uM8xf3gv4ufo/9Rwdo8p9eX/WEMb/xtOH3C0Z/f83o729H2sC9+I/yu/iP8vteR9cfhf2Onp8M+u1RT2b434tf8vz6v2MMv49Hfufrf05Cfmd/T0f5PX0bzubj83Ce4ff53O/sP8LOrzP8Xm/4faXR3682/L7W8PtG1t97rr7ZyO+3GX7fZawvvLfc3+UHY//Z+OdRvr5Q+6+fyz9jrM98IdIJOP9aZAP03qT/xf4u/qP8vtvR8U/yH9HkP6uPRf8nz79NeX79r/JffxOPoX67eDz1u53/NW72/4ya6S/+I7/Ff4TFf2SwC2srfv3AuoquP/LrDb+vNPy+2sjv1xr5/UY6vznpf7m/32bk97t4fvf38vzuH9L9Xfn9qNHfnzDmN58xzl+8QP124TXD77cNv9/n1w/4jyLP73sdff/Cfu534G9f4z+//vfLht/HGH4fz/2OJ9cMu3hGzbD4j/wW/xHO/iODs/9sffG6iq8/Ws/ze7jS8Ptq2t979bWG3zcaft/M5zfFf+Sov6uY3+UHY/9pfn/I8PtRw+8njP7+TOD9/cUQWQCS/o8cFf+Ro9l/9Ba48FHk/X2v0d/3U/1d5PHIxalA9W/7rxVU/pf8Pt5zv0/mfov/aBJS/Ed+Z/8RduECw++1vL+HdYbf63l/V/7rp+q1/de41+r/pf2U/I8clfE/MtjfxvP72H+W3+818vtDRn5/1PD7CcPvlv8au96k/6WXIf4jR8V/5GjyH9HkP/V7r9Hf9xv9nZdPF1d4qn/L/5Lfxxh+n2D4fTL3W/xHk5DZf+S3C6srfv3ABYbfaw2/1xl+r6f9vdfO/3pPeq3+Xzw+rzXWJ2yqaH73t1T8/MVtRn+/y8jv9xp+P2T090cDPYHe9l9T15v0v5jfxX/wIv3raP1Rb3L+Dymc5v9Zfv+IXx8U/mx8PvZ+o7/z8tn2vzQS+DL3W+b/EBb/kcDiP/Jb/EeTkPEcw+/VFV1fHC4w8vtaw+91ht/rDb+v5Pndb6y439dVNL+L/8hRf0vN/b695n7fzT9gxt9nnL94yBifP8r7e3jCyO/PBJ7fX+TrC8V/9B4k/xFN/tP+/hG/fkD7r59L+6+fK/Llr86t8FR/8R8p6I41/D7B8Ptkw+8zakevHzjH8Ht1RdcXhwuM/r6Wj8+V//qpnL+i4n5vqHh+32j4fZ3h96aKn7+4peb5/XbD77uN+c37jPnN33qe3x81+vsTRn5/Bl0flP1+ka8vTP4j6lx42/D7faO/f2T09z/z6weU/3pX2v6XPiBqnv7LN8B/+Ub8RwKL/wi7eGbFrx84h/sdV1d0fbH2X29M+a/fwZ6/tGL6t/wv+r3B6O8bK6a/+I8Mdn5Tqb/L98l/2t9vN/y+2/D7Ps/ze8t/TV3P/7vnfj9h5PdnjPz+YqDzG+F1vr4w/IGvP9L+6+fS/utd0f7rXWn7r2nzAqn+k/m/LPAR3G/xH+HsPxLYxVMMv8+s+PUD53C/42p+fMYLjPx+seH3pRXDk/6X/d5g9PeNFdM/+48O3+w/W59wi9Hfbzfy+93G+Yv7aH/vtfwv5XfxH/n9hJHfnzHy+4uB5/fX+fUDJf9b+fN9w++PDL//zK8faPlf/AAZqr+L04bfRxh/IexY4y8InVBzv08x/D6z4tcPnGP4vZr7Hb5b8fH5xYbfl1YMi//IYPEfKSr+I+z8dYbfmwy/bzH8vt3o73fz/B7uY/291+r/xf4u/qP8/ju+vjD5jwx2LrwY6PgnvG74/Qd+/YD2Xz+X8l/vSdv/Un7/Cy2f4j96h8R/JLD4j7D4j7BzX+fj88Z/6veZFb9+4BzD729XdHze8r+0vvBi7ne41PD7CiO/bzD83sjXHzX+0/VHm4z8fosx/rndmP+428jv9xl+/xb19+y3+I/y+++M85PPGPn9xUDHP9p//Vzaf/1c8b/49QNt/zV1vcn5v2J+/wu/PijyP8/i3LTh9xGG33/L87v2X+N4iuH3mfz4i/9g+P1tnt8n/S/6fXHFsPiPFHXhCt7fwwbD741Gf7+O+x02GfObtxh+327k97tRfs9+32fk99+i/p79/nejv/+On58M/5efnwwvRjpAD69H2sDDHyJt4PG/+Pri+JGjDVz6P3oLxH8keOR/vqGr/+gvREv/R3fI+R/dwTl3Mjj/pdf/6DsIP7vqsTvE86ri382Wm/H8qvz3u4VfVJX/8LbwSypH/wD45Qb/scGvqtCfH0/8mtb8nr6ji78oc7kRbzL4rTX9A+zxzhKXr64XfiP+FbELDwgv/xX48HBAf8A9Hf+Pad7+Gp/S8//tr/F5NX+gvsZX2ut71F+378U3J8//6430XHxXzg+WNxI/lPUB4F6fyPo/cK/PnEM4/QEDSps/8Nkv/zd9GfP0v758ETzoD1Y61x8MwF0G/cH0mMtdNM18cgtqIw3PuLUF4dPOrRy0H97aQub90j2aG4nrXRxM7t9KvX+TT9DwEpb7TDs3Lbi99XSPlWOu3wB5eOZlLO//NHr+8W/JuRXo9QtvP7/aQMPR7gnvo90bHz8r+mj3mv/23BT67Q4mOdi9QcMRbm703BT63Yy/LHPLS7952cBgzNHW+4P+crccbV14n21AeB8YMuWWFQ/MSY623vw3cbT1QX8F8l9+/w65LcdfHz3/QPxBv0DhA3SEJD/7A3SPMW/5pd+q6bY/egtjXsbC237oe0y3/dC48XdqgDaQ3r+pSdTCmffBBpp/K10+PvUG8q2+S8en3oB86bvm+NIbkC+DzNEGxn4v67MNONcbsA30XG/ANtD8BUq2gTFHGxg0fo8blPqx3Gz8dn22gWW5AaENLJcDvPTgsd/SQMr3Wi4HONjA1GSD0P/6g8GUHOBgA1PSAMAGVjhQGKR/OFBapH9Jfy5W727+l8Ts5H/2u6xuyX/gtxZHnmAg/iODm9e/AvnZ9r98jzFHGxC/kZviN8LJ7+V9tgHtv34rXOovSEDtv95A8h/dQ/uv7yX+ow0Mkv/Mz2USUMEGlkkABRtY1g6gegPJb6RXf4D8ly/Zb7SB/gD5L1+mpIGBDawo+i83kf/ybbG/T943+48SkNHfxX+UQMVvVCGEF1ur7u+G/+V7TPb30gay38XeLBz1Zt3fS/4U/Zdbur/rDWj/u/R3vQHlv94R3d/1BsZ+sw30XI/6qf3XG1iW/UcbaPtf7u9sA+X+LvdA/gtG/V3ugfyXm33U3+Ve0t/RBrL/aAMD7f/Ayvcq4aP+zvyfHFB06++t4571d/0cPN9P9ncj36MS0CnfF+O5+H2I8r3cmm++l1uLm+/1Pcr5fvLmvPK93Oyj/n645HvU3yfzPfA/f1nh0OzAoJ3v9Z2K4/vi/Bibv8r+oykslu/l+adR90b5Xvu90HzP8vfhne/Hfi9j7b9Lvkd+lvv7nPK97u8o3yM7lmi+l5s830t/N/J9O8DqewH/F5Lvtd9gel3398FSzfeoe7fm78AIoJzv5Zb2X385VPmezd91y/fypVu+7w9Q+++Y79EGDlC+l5uHRb5PDQxtYIU1vrf6u+X/3PK9NX+nRwDZfzTDb+V73d8Par4v9nd1AgDle7l1cPO93k453+v5u/nmezR/1zXfs/7eLd+j/t4137P5O5Tv+13m71S+7w/QBsR/tPv9ad3fS+P74gz/fPN9ub8fyHzfRzP8pXzf3tRc832n+bsDle9LNcTK98nv+eZ76e+Lk+9LRWiB+b7xe375Xvq79l+9SJTvW/39kOZ7aWClZ9f+6xgwl3xv9Xc9AqD5fl7zd4b/Vn9fKvlezd8d6nzfY/H8QOT71s0u5+fZBv5/zPeTN6f1Aa7uOa3z/Vz9n+/5+XZ/73p+XleIOeZ7dH6+a74vzd/NLd/rOjfXfK+/TPpfqiHs/Pxi5Xsm+OGe75cnv5FenfI98xPle93f55vvp6WBldt/8r84w1/O99rvheZ7Nn8nfs8137f9Rvlezm92zfddz8+jfN9l/q5bvkf9vWu+Z/N3KN/3u56fVxuY2/n5rvm+1d/7LD8cHvke+bkY+V4d4GoD0wcq3+v+fkDy/djvA5Pvi/1dL89F+R6dn1+sfK/n75CfKN/r/j6XfN++aa2/PVD5nvf3bvkezd91zffs/DzK9/2u5+dVvkeTLCjfy5dpPUGt/k136u9oBc9i53sdRXS+17t6WOX7YhHqcn5+ofkeCF5af4vyPaohSy3f9+d4fn6++V7398XK9/peXfM9Epz633yZ7np+vpwQus7fWfl+vufnxf8+qCFd1t/+leT7bufnQb7vuv52ofle7+fhke+Rnwc334P5O+C/9HcdYNW9VqL+Puk3GgGA9bf6/Dw6Od9x/u5Q5Xvxe4H5fhlqvnM5P9813891/S3K93O5vo7mh4Od7zuen0f5vj/f6+sGc833Vn9frHyP/M9fOvk/z3zfdf5uMfP9XNffytsDSsBByfcons/3+rpDne91f2d+dlt/O998L34vVr7ven2dzvfIzwOV7+XLWLDl6MHJf53vtd8HMt+3+vtc8n2xv+vZufnme31+fq75Xs/foe7dNd8fLtfXzTPfrxwsMN8zPxeS73N/75jv0fxd2X+5eaDz/Urkv3zAxJzyfcnvg5Xv+edndMv3oL+j7t11/e1C8/0Bvb5uaeX7bufnF5rvS9fXLTTfz/f6ugOd78cHMNpAv3gBqfwT/9EM/wHJ93M9P7/Qz8+YQt17Lutv0QaMfN+lvy/q52foDXRaf8v8PMzy/UH6/IyF5vu5nJ9fSL7vp4CLLgAaCzKNLr/j+X7S70OR78XvUr5H629Rvu93vb4O5Pulfn0d2sBC8v3crq9DG1hIvkfn58v5Hp2fL/s/p/W3Szvf6wnq9r+Vc8n3eoaf53vxe1Hy/YKur0MbmM/62675Hs3fLVa+l/m7+eZ76e9t/+d1fn6u+b7Y3+eV7+d3fd3ifn7GIcn3cpPn+9wA2fW/K9H1dZ3yffIbbYDne/F7rvm+NH+30Hw/38/PWGi+73R+nk3vLTDfd1x/izbQ9fo6FM/n9vkZi53vF+v6uoXm+ynm50Lz/Up9gKt79bvM33XL96C/d833qL9Poe59KNff/ne+L+f7pXh93V9bvu+35++sfC8NrLyBfunz463z81IexH9k8GR/75bvF7r+dk75vtjfVYmZa76n19fpDXQ6P9/rL/DzMxaa7+f7+dc63x+sz8841Pm+P7f1t4uT79E50JXFA3yyAS52vtd+T6HefKA+P2O+628Xmu+LMeUA5/ux34uV7xf2+Rnl+jTfz8dbYp+fsbTyfbu/G/l+soHpX7L4jy6/65rvl/L624VeXze/fD85f7dU8v1f6ednHMh8b31+hvR3tPsd8z3aAM/3qr8Xq3jxAG8JsAJdfrdY+f5QfX5G1/4+33wv5+fZx2ct6PPxuq6/HSxSvv/r+nw86e/a//l8fsZC8z3y82Dkex1g1T0WI993Oz/fNd8vdP3tIl9ft6y/wM/PoPlhLvl+QZ+fATbw35+Pt9j5vn2vrvkeCY7yfb9Lfzf8TxNcS/X6umJ/1ycAUL5H5+cPdb4vn59Hgs9p/e1c8/3h8vkZLN93/fyM+Xw+nurvc833ur+DSZau+R79s/J9v7wARf6J/9b5+YVeX7ck8n2phhwu+R58PO4CPz+jtP62W76XL1Pa/7men18S+Z59Pt7ByvflfwvN9/32B8Dp3e8P0stXf/hP/q/pL1MatlYALmv8LkI5PpcjOJC/n4y2nvLpcrBncvwuA4+V43cZevLMewz3p8Z+T26ifY+ppr8XHyv51qFNy/GPNi3HP9o3yb99/bJVf1ypd0z1x5XFHZN8PPYbYfkDzH2E5QKSIpMFpghnv1YgPGhNQBdx6wSzxmqBSQlLA0NY/kAbwjJBjXD7AlGN++0/0KRry2Ag/R2cwEkNsMfw4P8BHFT0qg==",
|
|
30881
|
+
4: "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",
|
|
30882
|
+
5: "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",
|
|
30883
|
+
7: "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",
|
|
30884
|
+
8: "eNrtnQmQJdV1ps+T6l72RU0v9L5W7/tevdBd3fRWNA00mwAzWEiyiB5CxgINQ2CNFjCDBFoJRsY9QoggGISQNATGaMEEgTFmJGONBmFhDcIYa2MIjBYLEQqCO5Ev74l4eeKe/6+li26hev0qMytP3nvzVb/vv+eeezJTZOQ18hp5/b6+jpIkSdqL1NysX0cYs1r0dZgpZ19dUiymL3mLZxp5jbxGXsP9krFtcpVfi7qkE0R3l1XibbaoqeM4z5R/OcYamptylFe4qE9WaVSfPBESCWpwVOgtMiJQI68360tkmnTyb2GVNAVaJU2yFnPABGRMkk6E8iFpbNmkGzIaFW7rk1dY9ckrXP87BqlTUv+pdETWJ8+1Un2yRUv65DlQIvLWhPWpNaJdIy/vJSIL6u+cUmpplXlF/vULKzKnLA96gHQnaJaZCQvINLPXHjPFM+WNSVB9JE1wCuvmiVA+2vqE5KPWJ+8ISTIqYYE5PmH9OsYrmldHeUWNPnkidJjgAV5wxoUNffIEakSfDvZLViv+qewHrPRMebE8IYGQtATJgyRZZEcf5pgFyJj1KXkaISnrk6cAkro9U17NhPIhabpnUn1ChbM+IYGZgKtXffKOSGOJfo0m+jWK6NfxRL+OTXiAd5RXeVJ98nyrTn3yREj1KXmjOHmrYAfqza5PvRl/C7muT5Lyfl1s8Gx5sQ7Lg6x1/A7dXu2hn1crvZJ5YzkunpYS/2MR8T8WEP9jHipc6RPhu5vwPdMTrk598gpLkqlEvyZj+ZAJWD7kRDK+GusZ8sZoLB9plGCBOT5hB+lYqF5Jjk44QH5k8nwr1aeirDX0CTlQbxXsQLWGGJw6RTrZ18b0pCTtss6BwWWHJxx5sc1WaRZbPUv+q/R62pFXm5KnHfVqg2ABWYeLp7XQu0iymvgfK7F8VPqE5KPWJ89DSZIWJzzAWYCrl3lIHLI+oSO6iX7NxPKRpmP5SFOROKg+eScgSSYS/RqPx1cylujXaBx+Un3yjkjHE/06FqpX1icvOKX6lDwREjlH8Xc4Pws5ByJpr91heDvdKaeLPZ4lr07B8iC7kDyoPnnGTn1yNGKrN/jIq140PPH0SVdJ0sbkhVbVf0ICovrkDV9qfUIDnJWocKVPcHTU1ifooSwm46eFRL/mJxygmUP0q5vo10yiX9OJ/zWVjK8mk/HVRDK+Gk/i2+PI+Go0bj69o5N9y7BIuqioDGqXdKFnyIvzBTsIbyfjh3MEOwhnIaMk2esZG/rkKYCkPQkLyO4EAxQNfSodsQPKQ61PSAG2Ev+jl/gfm3D1tT55hZOk9bj61JOw/7HaUxbVJ6hOKeuTd4SkpYTfxVg+Kn2CR8wn46u5xD+ZTfyTmWR8NZ34J1PJ+OpSsQGA5ntf8sShfr8HqoOkdzvega7fKdhBeIdnyYuLsDzIhVge0gUJ+xdvFywg5wgWkLPI+GIviW+cTvyPPcT/2E38jz4S/9gBw6eVPmG+txL/oxdXL5tw9ZU+wSPWY/mo9cmDQ5KsIfyuJPHd5dj9kaW4+axPHuGSFhL9mo+rlyub+FuS0xVIHCTJ+zz48+Zlni1vvjeh0YWkSz3483oflgd5D5aHWp88o+qTZ0wi7yD+xUVl+HVHuhDLg1yAhydynoO2bp8j2EE4i4wv9hL/43Tif+zB1Vf6BP2PPlx92omHL2k7Hr7IVjz909YndMQmPHyRjUS/1mP3p9IneMQaol+riH59WPE3kOsRH7T7DKsf8KQhH3B1wg7CVQk7CP9JcIDhCsEBxvd5wpEXl5Hxw3uxPMilxL/YR/yLS7yhRV68G0YvRN7pKYfo+A47CBcR/+NC4n9cQPyP84j/cS7h+2wyvthL5mdOJ/Mze8j8zG4yfuoj/O4k/G4n8ZGTiX5tSVi/NpH4yI0Wf8PpxzzHIL+vR8FDkXQd9A5EroHhA0kfRoOHtj7h8cMHyPjhaiwPWZ+8haQrsTykK4h/8T7EtyS5jMQv34vDn+3xHUJ0H/E/LiHzK39E/I93Ev/jHcT/uIj4HxcS/+MC4n+ch6uXc0l+yNlkfubMhAc4p5Px0x6iX7tJfKSPxDc/24m/7eolyc2eMuT3ZzxpyO9PQe9A5BM4fCA3CnYQPpZwgPF6Mn64jowfrsHyoPpkj9BfVZ+8hXwA5z/I1YTvq0j88ko8PJH34+EJ1qckchnu/tv6hI64lPgf+4j/cQkOn1b6BPl+F/E/LsbykS4i/seFRL8uIPp1HpmfOZfMz5xN9Ot2i7/h+fPl3VpePgfVIcl+GD0UucXzDvJvn8XzC219Qg7CZwQ7CJ8S6CCoPnnykG7E8tD2n7wjqtX1yJjUf/LolXQt4fvDJH75QQd+3fsBEr+8GstDuor4H1cS/+P9xP+4nPgff0L4fS/xPy4l/O4j/F5C4pt/hLv/Sp/gEReT+Zk/hOqU5B5pAG5plbthdFDkLjQ4kCR3kvjAHSQ+8AUyv/B5wQ7C55A8JFF98kQg3ULGD58l44ebsTzITQnPf34KGSXJJwjfN5L45cfw8CRdT+KX1+HhiVxL5k8/guBXffL6+LY+YQfhauJ/XEX8jysJ3+8n/sflxP/4E+J//DHRr0uJfu0j+vWA5d6Qdn8Rf90Suc/Zr+97k3Ucmgd8xTPk9z04fJDuFuwg3EXGD3cm7CDc4YUe8/p2Mn74PBk/fA7LQ9qP5UH9J28hnyV830ziGzcl7CB8msQvP0Hys25Eg4+sT8hBuJ74H9cJdhCuJf7HR6B3keRDxP/4LwmfwNWeSfWJXP9yJYkPvJ/ENx9xun79xj1M5gcfwuFB+SY2p6+T+MAD2FzrU/LMqa1PCPF7yfjhK2T8cI9nyeu7yfjhLjJ+uBPLg9yB5aHSJ8j3bSR++TkSv9xP4pe34O7f0yddpZuJ/3ET8T8+nfAEySdJ/tbHcfghfYz4H9eT/K7riP9xLfE/PkLimx8i86tPWPwNrd+C0UFJj3um/H4MhwflUWyWR6B3kORhMr/w14IdhG+S8cPXS1zrZkOfyg7C/Ti8kO7D8iD3kvHDV8n44R6S/3A34fsu4l/cSeZH7yDxy9tJfOO2hB2EW0l8YD+JX96Cq6/j417hpj4Vj7iJ+B+fJv7HJ4n/8XGiXzckHIB52ov/5dVTZH7wSej9S/ouNst3YPRQ0hMkPvAtbJbHvdBiXj+Gpx9Vn7wjVJ+87j89TMYPD2F5kG+S/Oivk/HDA2T8cD/h+z7C973Ev/gq7v7Tl0n88m4S37hLsINwJ5k/Zfp0u+AAxW0JByhuJfkR/53w+xfE//gs8T9uJv7H8038LaryXNkx0C151osN5PczZHzwT2T+8PvEf3jK6/vzjidxeqJ8Fw0ekqg+eSKQ9ckTgYY+FdePk/HDY2T88Cjh+xEyfniY5E8/RPh+kIwfvk78iwcI3/eT+CXRp3QvHp5YfbKHVfoEHYQvEf/jiwk7CHcKdhDuIP7H7Tj8kG4j/sdLHv559aLnGOT3Cx77+Zef4PCg/Aiakzwv+AKk50h84FniPzyTsIPwTyT++H1yfcNThO8nyfjhu2T88B0yfniCxAe+nfAFVo+T8cNjhO9HiX/xCLl+4mHCN9OnB2F0UtI3yPzEAyR+eT/xP+4j/se9ePojfZX4H18m+RFfIv7HqxZ/w+IrXmggr34FZweS/EJwAuHLZP7wJRIfeBGb0wsJOwg/Idcv/AgNHlSfPAdBkuqTJw/yLBk/PEPyl35Axg/fx/Jg9cku0pPk+svvEr6/Q8YPnj7p6tuE7/+VhqpP2EHojz4hB+EhEh94kMQvv0H8j68R/+OvsP+R7N1DbFefyrv1nV5H3r8keQ2HB9Nv7R7z+6ueOa9/jS9PrvQJxgd+QfyHlwU7CC952pA3XyR8v5BwgPEnZPzwI+JfPE/8i+ewPKRnsTzIM2T88APC79MJT4A8RfyPJwnf/dEn5CA8QeID38bDk0qfoIPwd8T/+NuET+ARHD5UffKOSOzuQcNlF6MvVoI6kfcMSct7DEuS17H/kF4j+Ye/TdhBeDVhB+GVhB2EX5Hxwy8I3y8Tvl/CxdOLxL94AcuD/BQZdXznEFKtnxeBCvAciW88S/h+hvgfTJ+eJvHLfyTxy+8lHN/4LvE/vkPmT58g/se3if9xsPg/ROze5+/8wnkWq09FkFWfPBF4nYwfXiPjh98S/+JVwvcrWB7kV7i41Sd7RHoZy0N6CRklteNPSAFeIP7HTwnfPybjh+eJf/EciV8+S+KXzwhOsPoBiV8+TeKX/0jmF3/P+T+07d6NH62+iCdCjf9fTwmggLxO/IvXsDy0x3dIAV7F8lDpE3QQ/p3kP/yCjB9eJny/RPyLF0l84AUSv2T69GPif/wrGT/8C/E/RvgbsQ/W7vmPUtYfMa6Q/f55QiJIAV4n+Q+vkfjlbwnfr5LxwyuE338n8YFfEv/j5wk7CC+R+QmmTyPf7xH7m9Xu+beO/ogjNcVCzfiZR6fGxz17Nb7DAtMffULxy1dI9z/y/Rmxj9gPVvz7jdInr/sf4X/EPmL/fbZLy/tXm470LPnfaGe/bkwp79dVa67dYbaX2f1msb64X9fSOtnZr+9Tnf36PsfZr++Lyvt1Sy4p7tdVSy5z9uvqKrvDbH7Y7jM/Hy3t1w1pyaeL+3VD5JbGLnuUyBfsLmke+0Vnv27ea/bY5dc8a149LOX9uvo7Z7+u/8HZrxtPOft16xlnv77+tfGb3RT5f3Z/c7uaXynu199+Y3bbw173DP3UhcPLp65QyfGmXsv/+KbJKkFrerGYrloyD6qDtFZYm1ls8LQhr7d76pDXpyFxkJach+VBLobqIPIf7T6zdYWnDfnnT8u79Uf+zFOG/PNxwQJxM9GHWz1lyIs7y/Khm/IVEagQfyVYIP66hL7+IiJ/6/GfV3/v0Z/X3/O0Ia//r6cMef28owu6+YLHft7+uQXXUPybItqtofKvLzkciYtIxT+seLxnyKWmC5Sv1jzPlLFfVrIp7iKtHvtHNWLQ27LFmus+NTn6sBe7D3KBZ8uovNtSb35/rycMeXVl2bnQzdaHiP/wUcEC8WnHb9CNv/CUIS9uF8eByIsvEf7vK+3UpbTvL+H5Bu3l30B1EPmW5xvk9f/xpCGvf+AJQ974F8L/z1oe/PXr587Xv9Xg39OABv+DEoDDPXaHyn+uZzqqXETmCf4Ay8hn6/FseW9vC59AH5Qnae31bJmz853/XH1fbI1GBvZ5tozV5Woqy4NcLUgdRK71hCH/fNyThrz4b57nkH+51ROG/PM/PG3Ii/9J9OFrcPRQjQ+wf/C4N3TI6/9N/IOn0fig1b5+tiwAyr+nDfn1skAHoPUb/PUcJv6b/T+qeDwpPx3LS5N/25Dy751D5h8JQG8Ln0Af9k9kL9Gn89H5tcTyb+tq8m/rEuXfOwdpXS1YoK7xep/8c0Pxy6k/LbnJfqnNz/4GHVYMqvuD4AHEPSX/QTdFquvvPHVoLx8i/sFjggSgJf8A/YNWdX0VHB/8szcwyBs/RcEDkda/tbAD8IoXGbD+/yAFoF/8exUPln+t0PJvGxoa/9b/L7bTh92TofFf6v9NZftKxv7yL3X/j07wGnTyLbH826oM/7YqUf69c6j5977iIvX9aR33uFr8pdd75iMeLLGlSxF51AJp5OAJESQPVXxQkIvwQ+weVNd3efy3t/5NcIDwFa/nf0P592oeLP9ao+XfNqT8e6dA+JeWx78WGRj/tqFO/h0BGBT/uqvEvzm8v/x7AnCDYAflJsECNRT+pcl/sZ2/FCxQDwo+wUcFn+ATggXqKRE4gP8hHN1L68cI75ZU+X0wQPjrFnTwmvwPVAD6y79X9VD4zzXOI/3bMvLhesjn9vjXIn0kPjFE/r3+X3c6/Ou+gfJv62L8S+tA828PP1D8eycxrPyLx7++pPVDz5h3/BgZxfJvD7b824PfKP69uofEv9Tzf/j7M1T+ewULQB8OTxj+bWWd/JcbuliwAAyUf1vXAeLfEwCHf901UP5tXYx/aR1o/u3hw8W/7hkM/507DhX+vdpPbA2Ffynx32hnGWl/sPxrqT4Sn9xLvh9D4b+O/wuMUF5O/j5D5F9uwOFLj3/dV+K/cfwQ+Uf9f3vXgzh8MVD+bVWMf3mj+ffyf94I/kv1Dwf/nc0sIx+vh3xwxH9l6sPhweHlX1oe/7p3oPzbyjr5LzZ0KPFfamg4+O/cNSD+rXGw/OueA83/QAVgoPzbBoaLf23G8m9bHyr/mv/jtW/5ty01+S+2hPmXlse/7r6c6ONw8l/tvEmwgzJQ/m1lQ+G/2vcgDl8cVP6rXYPiX/ccavzbNir+SZOD5F9bMfzbxpR/74Mz/r3+X+uz/NuW+su/d36e/z9Y/m1DQ+Q/z/8jB2B/C5/f7xr/tq7h4l93/a7xb5sZLv61jWWkf2P895K/SR/Rn4HwX2qJ8b9PsABcTv7+A+G/1NAN+JvTukmwA/BG8e8JwIOCBepRMr96oPj3GD/Q/MP8nzeKf22qzT9uc7D8awvLyPenh3zywfKvxfYS/2e4+Ncyl5PxydXk+3tQ+NcCJf5NZfeQr+/vJ/+661Dmv27uRNLoUPgXvf7H+4jDyn9dbi+Jv51P/vwXk/Pbh9OXDjb/nv+vew8y/9J6ULBAHVj+bV2M/2L+T+P4A8z/QAVgiPy3+3/Y6ND4t/2//YjKv3cSQ+K/XXAvGX8PK//S8vjXMpZ/21KTf9vS0Phv795P8quHmX8ZHP+6r8R/8/gDxL/H+GD4bxx/SPDvtTo8/Dda6yEfvZf8Tfqw+1HmX2u0/Numhsq/SOtyEp84UPx7Z3Gg+be13UP+fv3j3xOAg82/xv+8k/D4132/K/x7zQ4P/52tDSv/5vpfxn/pJC4m/zP7yH/aQPm31V1Dvh794t87wZbIfpy+cKD4905isPzrzgPJf7Gh3xP+vXaHh39trsl/8Rx6yR+F8O/0/1rjweJfCx1k/qvrfwfKv6ltOPmv9g6Uf1vZU+T/91Djf6ACcKD49xoeJv61tQb/pVMYJv61Ssu/bUv5985isPxrqSL/nfVdQ74eN5DzGyz/unuA/Nvahot/3XtQ+S9d/2cr+zWZXz1U+PdaHi7+tbUe8uGHi3+t83wS3+oX/94JYv7bpa4m45Ph5V9a+8n1VXcQfRpW/qU1KP47S7wR/CMH4HeFf6/t4eJfW+shn76X/FEGy7/W2V/+vbNg/L+vdSjw752gN/4fFv6LLb3R/Nvafki+/z8WLABvKv5t68PLf7uxg8W/Vno+iR8NJ/96/z/0DbmGfD9uIOc3WP4b9//qL/+2pf7y752gSOtRcn/IQ5V/3flrkl/xugxNAA4w/7b5YeW/aqyHfPpe8kcZLP9a6flk/Hgx+a8ZEv/S+t3kX8scqvxrieHmX6T1ZuPfnsY0cmpzySkvI+33kI8/nPw37v87JP6982P8m/t/2qZK/Jumhsr/fpy+eED5L7VE+JdHyfUVA+Xf1jZc/Ove4eb/MGI/jvS/4wj/Uwkfc/DZt5Y4Jv1ljTWZ+yxu8u7Mml87pXR3V32JnEHGl+eR8dnF5P9miPx7/b/WOCD+S2dxE/lW7cfpiw7/Wsbyb1s6WPxrkQHyb1ti/IsX/2P8a4nh5l/kWFLvWPL3m0yub+32as87FpWb199kld1h1GBjURV0Q2Sbd+fWvD7VuS+8/nqOODePzb/8B+/29HnPe7z7W+fXZfbm2OZ1lWfKOz5C7n/3ZuHfO4tHyfVVbxT/3lm8JFigBsr/QAWgv/x7rzGk+UnwlFoyi5z8AvHufVy/VkDvQGS95xnk1xbkH1T3B7J7zfpMKA8tucBThrx6J3m+xaVWF8zmFUWbboh8wLv7ft64Dj7fQ+STzrNB9PXnnimf0Bf0ySPO//OX8O0vm/zbQw8K/83qDgj/ngNQ8Y/Tl4bKv0RS6BhS82jS7ERySjPI55uPP1trGcZf1sKnr4ls9qQhb+1E4iD18wM9eahe53pPlsjLi8jza94D1aFV+QeW/sbv/1nwA3g+LPj5PR8tK4PukM+Q5w/u954/1FL/wHv8Yf3+Mnp8YvX8wPKT1/RVPx+obGr/+i3PlNdPtmD3c7D4L9//f7D8ey/LvyD+y68J0q/rA70PWccHvTskiMgS7B7Iak8Y8i8nlQYNuiHS2ib4+Y+net5DXp+FHy8nf+BpQ16+yzPkXZciecjPF3X8h/biT5E46PPDPHUQad3oPTtUny9K9OFWu8Ns3ukpR35/tbRTt0RaXys/fVHf8ohj0/W3PVPe/F7xsZEqGiLP2qdOGj35mWfKf8lfqsn5kr9mTQMUAMb/0aTKE2B0vLo/OD6baeSs55APthi7Bxof8GIIssGJG+jGVqgPev9AbxDRjh/CEcR55bCC/ip/CJ9uK61LPGHIv/yx5znkzSuR89AS+SB5ft9/xfIgn3SeK6o/f06eT3qbZ8mrLwp+vvq9njFvfQM/nrX1N86DnZXWv/fEIb+f8oQjr//Z7jCLn5UMut2S1i9LBl1VG4cdFvO7/S+/2z/VqyvaV7aFevvweiP/FnSpP/Hoahn09853vThet3Whq/a/EE/Q38w/XYwzu9orfYcQJjaOzjvzqlpMsUX0J9QHzCgasjmE0O3Z8mueZ8qvhdaiW131amnwStZHrLBmLZnXq0PwirYXPUVTe9n+2eAZ82qzNmeN+b1V7V2Naqt3e7HdNqjvbN/VVbLmRVfo2u0VzP/22BYb1q5whleyq16dVbSpvavrXDV3layh63yvYH7/gW1TF6Gr/XORmvWIzndX6LoYGbu6wrvK1bZ/qmVLQT2sE+5aASopeKsiqXR3Hlbta8Ohx5hXiPEwxbLTrDIRYzgi23WHLvR9VGgKSr1Se4jHWl0xejHKCo4RkbFWdoyOTGiW0oWqSJjiiU/+mV4spcTG0G2FqVN+QgxzbZ1GKxbaGo2OLLHlmmLRtSIgdQpdq5uGqCQr1D3lckp12GDNRg82RWtpasVWz5a53I6MXSHssi0aqdhtrUYNTgtdnjy1/+0t1qr2Sj+KBdXeda6VJ13lA84vl9Ti4cKyPOmi6yJPnrIMvCVYtBt4H9bVwFc57WS88wB7WIyHh07i7GExHqnf/qYToPZ4dFBrbB6TheKYaOyhqRbHNfmLTWckxLep1QpMruqEbCr5LtW/MdazUWOud7wnP/lzTba2Tj2IIUwriZa+QwizysUU+jA3OAKUuVyghWJTfBTLJVadjFIs99Qpv1Y75UKsuetpmqKVig2eOGX7pqKq6TqofnjyVOuH4+Oofni2ar27pGtKdFs/PGP93ms9JyMVZ3vWTPzbi7KmmIeuCzz/KEvIW5uds+3i6/+6JraNnlz795ICVIsj9PvTwFcPC/HIJr9WAdrjB8t3pwYc29n12kFEjOH4Bv22ihBHOXY9ZrR+vWNJh0Icq/ZiEzGcaPhr/Klq/yLEYP8Gug5xUmdp6+DEEKeUTFpbiGFaKDtAupjp2fJ7Tkmd9F3ph6dOmcjFXsEM7HLbopGKVcio+uEZQ9aPki3WWGyyLpfRka3IPcr6YQZvXZ32XV7JvNztSVdenOYN3vLPXm9gl2E/2xu8qRA0vXfrB5T7dz2s8u9juX/XnyMsmkYBjoJ0x3iMgc8ec1wRPl00+/fSMSeU+daNOKbMrx4VxyF71f8bqz1goo1OmH+TgyNA+QymBitAzcOmW7v5lDODESDz+bubdqsVYU6wAtU8x3mhbNJKF4TyuE3fi8v+kVIdl3m+U/5Z1fDGTPwnxLC2WK2aa/0ojdD0oE3WaDyZrcErWb+2W5sRi104fNS1O3reUQ37aeWiKhHB9O/WEYixTLcu2vG/YLlV+mMMR3po5sOO9tA0/XuZbu3fvSpCHFX65utRMYbRHnz5qLGQ7rp/9/iuqphA+J7k8d3s370mwjRbu6lgRplv3YyzQrm0bswu2tUa4tzgnWDmP1p7s4kFnj3//RdFK0DNf0tsaaMjy6x2GbFYYSJYVkZW2V7H6MhaR9eU2g1mPGjFYJMnXRnZrTa2ZDyZ7WZoZ/2cXcio9DcUoOniH6bVO2P8I8p+7UD7d28IEI+D3nuIb7PfqQbdMZzgwaX9O+a73b97naf274jfid53V/t3BFeIYarHr/bvwaO//mUm4bs7YIGZHaG9ik9CvudH5wPk1cKIBWZxya7WEOLSht02EeLyGAJqYmUofwBtYnUoC5Da1wYkUCGuC55A1b9uCJ5A1e+TQqdAWXMIm4MXWqpJ3+o4TyoFtn9vDN7r+T0Uvousfz+61PV29u/Qe2/PD3pothej4Oi87t/RAH+sQ4bp3z2+44SABwCTCN9TAh4gTAvYgZhB+ueZmN/YHaEDUY3/PXt7MQ/jUfXv8AQXEb6XePzmjWUhQr5XOLVrJasw32ENUocQQ49nz4v1wQpUs4mNwfmA+aBNAQlUiL3l2vXj6fjDaT1U/bvtlRsKcESIMIB/lEd3th8Dvfe6f/fojrl/90bnjf7dqWKMja41pTSOg9571b9jvieWhF83tH/3mtD+3Wui4h91njHEGRELzCzMd9W/ew5GezGX8Dsf8qv9u1e6Pb6H/C5F8FX9O+mfVwYsMKsJ32sJv+sIvxsCdjBOgvyGuJnYtwQsQCcH7wPU78MtvM3wXTzSutUmgH80pDuGYwMe4B8fcAB/VMAB/NHQe6/6d48M7d9R7577dyf2pv074ntyxA7EVIcb3ZhO+J4Z8QCh2+sY8uYcwve8iAcIC2DvH+Iiwu8Sx3vXKpYFfIIrCN+rAh4grAl4gNBD+F1fgkp/bffvmN9NhN/egAVoK+K74j96H7B+e/27/hyFp+fa/Tsa4B9n/0ts/46n58IJeHoujoGj8xjGQb5z/+41UfEfMd+TcHi/yi+EfE8jfM/A4b/cv3tNxDCb8D034AHCfNi7h7iQ8L2Y8LuU2JeT/nkl4Xd1wA7G2oAHCOsCdjA2BHyCJxG+N0XMd2/EDsbWiAcI25A6hBiOLM5ad+bf2G+c7d9LjnVn/44H+KPw9Fzdv5cc67wxNuABwDg8PRfHe4GxXMVEwvdkj4zc/lQ8PZf7d6+JKn4XId/dAQ8Q5uDwQJhH+F4QcABvEeF3Ce6f4zI4+o5VfjPkd1XAArSG8NtD+F1P7BsIvydhPuNmYt8SsQNxMrFvh71/O782lHvuWgGOwdNz8Tg8PVf3714V7fxcL/ZWb4zG03Pt/F3E94kefLmCCXh6LvfvHv3av3tNhDgNh//iDDw9F2bh8H2YTfieGyKcAZyPw/fav3tNxMU4/BeXEr6XE35XBjxAWI3D+9q/e03EnugNEOrF+ogFaCPhd1PEA4Rewu/WiB2IbREPEHYEPADwxu/6PhZPz4Xj8PRclX8TgxN7y/m1XgZPezUGT89V/XuZjFL/botr/+7xXefnQr6n4un3OJ3k/8wkfHcTvufg6bk4j/C9AHrvVf+O+V6Cw/dhGeF7BeF3VcAOxOqI+V5L+F1H7BtweD/3797fKITNODwYthC+Tw7YwdgesADt9Ox5fQwcvbfzb9D0XDzeg1P7dzw9F0eT/NuxeHou9+8OXO34HXYQJkG+6+t7EL/TSH7PDML3LJLfM5vY5+LpuTgfT7/HhWT+cDHheymeftf+3Wuiyr+BfK/C03NxDeG3h/C7HvOb+3evtOb/efYQegm/Wwm/24h9Bw7/1fmDngS059+d6JzJr41OEOBteHpOr5/xhgC5f3eS66r+HU/PxfGE74keGbmCyYTvqYTv6d7cWf43k/DbTfL35uDpuTiP5PcsIHwv8vjNG0vw9HtYiqfvwnKSH7CS8L0ah/9y/+5579q/e6W1f/eaCO38G9TEZhzeD1sIvycHPEDYTvjeGbAD0RcinCHw+nd9H0+urxlFrq8Zjafnwlg8PRdPxHzHCU7eVWf/jvieQvieVk7tsvm1XhNhFuF7Nkqe1fxarwnt370mtH/3Stf5N5DvJTi8n/NrvSY0v9Y7wRBXEb7XEH57SP7eemzX/BuvibCJ2HtJ/s9Wkj+wjeQP7CD5P7sCdjBOweF/PH7X/FpPIqr+HU/PdV4/U7y+ZhyenovjSf79RJJ/P5nk703F03NxOuF7Jpn/78bTc3EOy68n+Xvz8fR7zr/xmtD8Wq+Kdv8OT3A54Xslyc9dTfJ/1hK+15H8vQ2E35MIv5sJv1sIvyeT/IHthN+dmN/YR+y7cX6A9u+eAjSvn3H6dy/2Vm2MhaPzun9HfE8w+Xu2gkl4ei5OIfl70wjfMwjfswjf3SR/bw7hex6ensv5tV4TTn6trrR/9+z2+hlrDXX+DapiFbGvIfm5PYTv9SQ/YCMO72v/7p1g6CX8bg14gLCN5P/sIPzuCniAcArJ/9lN8n/e5l1flx2AE7yra/IBY/D0nL1+xv6L4/H0XJhI+J5M+J6Kp+fs9TO2kjAj4utrZkV8Ae5skt8zl/A93/vmH5DrZ6r4HZyei8sJvytJ/k8/r5/xTjCsI3xvIPyeRPjdTOxbCL8nE/t2kv+zk+T37SL5P6eQ/J9To+dg1ItRCN7O/t05YCxKnm3373B6LuDrZ3L/7jWh/bsHX3V9PMnfm07yc2fi8L29fsZWEufg8J/m13pNsOtnwiKSv7eE8L2M8LuC8LsKh/8Gev2MPcE6v9ZrQvNr2fUz3gfQ/t1rItj8WrvQ/t1rIsTthN+dhN++iAcIu0l+3x5iZ+P3MST/dlzwLsDV/h0PACaS/NtJeHouTiH8TiP5ezMI37MI37NJ/t5cwvd8kr+3kPC9GE/PNa6fKTWxnOT3DPD6GdtEnX/jNaH5tZ5d82s9+Nj1M9q/e6Xt9TPWe6/za6GDsY3k/+yIeICwi+T/nEL4PTXiAcJpsPfX62O9CTzt3z3vPffvXoww3/8OVTERT8/FyYTfqSR/bzrheybJ3+smfM/B0+/t/FrUxAKS37OI8L0k4AHCUK+fWUXy99YQfnsIv+tJ/7yR5deT/J/NhN8thN+TiX074XcnsfeR/J/dJH9gT8AOxuk4/M/G73Esnp6r8m9gBs8EHN6L5PqZOIXwPQ1Pv7PrZ+Iskr83G0+/N/JrSycwn/C9EIfvvetn7PWxXhNxOQ7v1/m1XhOaX+vBZa+fsZ2n9u9e6Yp/wu9Gkp+7ieT/9BJ+t5L8n22E3x2E312E31MIv6eS/IHTvN4/N3EGDv+b/FpLX4jj8PRcGE/4noin53L/7jVRvn6mc5wxneTXz8S3z4ndePp9iNfPaP/uNeFdP9N5fSweICwjfK8g+XurSP7eGpZfT/L31kV2/Qzm9yRi30zy+/p7/Yx3gtvx9Hs7/wY5GH2E391k/nEPyf85nfC9l+QHjdF7C+pdgYz/Pa7zfmV2jBBjPT9v77Gh1sx/iKWbfHdeP2eLlu5/E73rZ6ADMQuH7/t7/YzXRJhP+F5I8nP7df2Md4IxoOtn8vWxeICwiuTvrSF895D8vf5dP+N9/e31M7a09u9e6Xz/K89eXR9L8gN2EH53EX5PIfyeSuynEX7PIPkDZ5L5xTHmZoBWC8ZZq8F9vGfMi4nNeu33J0w2rTZvJqvzd8aqStHOzynLk0rMzKI86eWN7fy75lfKaNBc6N7U18+V/Ab9fWHEArOE8L2M5O8tJ/l7K0n+z2qS/7M24gHCOpK/t4Hk555E8vs2E363oORZza/1PoDNr/Wun/H+Rtq/e000+vdyE3sIv6cTfvcS+1kBDhDCGHMzYKsG4xoPPTAPl4mhun9GV+nOw0rlRGs3WjC5s+oYglWRqbZeIwbTPX3S+18i8arz88oKpPE9r2hWiXnFVlVGQlwQm1Z7n4XFnjxFnZ+3oti8D+1ye06l6+eiR399/xvkQPQQvtcTfjeS/L1NODyo+bVeEza/1tq1f/ea6O/1M14T4RSSn3sqmV88jfB7Bpl/PJPk/5yFw/8V/12NJ4eYpymNU7P+GC0Ybwsa3CdqYUdjJnd5thrJKU7FSuw0r2zU5/fZsk2RmeUVzX+t2QE7SHPtc/uMC7SgJIpqrK+/8cSrjfMSJF6xfX0tdJBWNBu1I7S4OliXrXl/l7XBEaBorq8py1PciOWpnX9nBap5/Yz3zS9eP2MFSPt3j9+wk/DbR/jdTfjdQ/g9nfB7BuH3TBw+DGeT/IEx+jywzocKKdFdIYzrfGyY1YKa/7I1IzfBVmxwn2TbNGIwxSuaX9M88cqvGZ6yZSpmNapulq/ssz310udreeqV7fNtxc0HPVTxgS5PgEJ7ft8pmgVoqVdUr7/1HC/N3yvXq0xW8b/gGev83FKregVWe36vJHsqImGjFnXGb5uL0qbvGLdYqxGobTao1bgbf5V/a0NeTb77gidQml8fvdh7zT/mN55O8n/2En7PIvkB5xD7mPww0M6HhHbyPK7Tqitlvaviv2HvLNx+T7AVG39jUqNiXehDikKYguUpTCta9SeE6aELKtBMe07G2+gu6pNaQ5jTOGErBtXzf72i9WsBMoYQFkHvqR0/6LLPnOp8COgyT9nyaoU39MvcrbKKaTykNQEKUFintcfSAK6d3+MN7ur4ABIvze+xoqjm+v6YtmBDZLZ5ypa1YkeEDlLog6O72M7Ps5HzThU6zcqTeczIGdZnM/yeZUPaZnEuyf8Zo08C1h/D+zg1mscL6xEnqs2WzMRNsDUbGZlkjUYopmB5ClODI0AZu+le0czNzM6TsuoVukK3p2yZutmOTaGcW9Q9/an9A6RAC63VqMFiZ/imTC+F1mr+wJ5RUw9WImM7/89TrxqMtZ56ZWzXkfHbxi7zYDwzztpUdsvUXN0/F0aQtgYc4N5mH6psNGYnHr9V+mBtDdxP9fQp036aJ15ZQ87A4W8b/wv2/r3/Hypt42w="
|
|
30885
|
+
};
|
|
30886
|
+
|
|
30876
30887
|
// src/emf-gdi-color-adjust.ts
|
|
30877
30888
|
var CA_NEGATIVE = 1;
|
|
30878
30889
|
var CA_LOG_FILTER = 2;
|
|
30879
30890
|
var COLOR_ADJUSTMENT_SIZE = 24;
|
|
30891
|
+
var DEFAULT_COLOR_ADJUSTMENT = {
|
|
30892
|
+
flags: 0,
|
|
30893
|
+
illuminant: 0,
|
|
30894
|
+
redGamma: 1e4,
|
|
30895
|
+
greenGamma: 1e4,
|
|
30896
|
+
blueGamma: 1e4,
|
|
30897
|
+
referenceBlack: 0,
|
|
30898
|
+
referenceWhite: 1e4,
|
|
30899
|
+
contrast: 0,
|
|
30900
|
+
brightness: 0,
|
|
30901
|
+
colorfulness: 0,
|
|
30902
|
+
redGreenTint: 0
|
|
30903
|
+
};
|
|
30904
|
+
var illuminantCubes = /* @__PURE__ */ new Map();
|
|
30905
|
+
function illuminantCube(index) {
|
|
30906
|
+
let cube = illuminantCubes.get(index);
|
|
30907
|
+
if (cube === void 0) {
|
|
30908
|
+
const encoded = ILLUMINANT_CUBE_DATA[index];
|
|
30909
|
+
cube = null;
|
|
30910
|
+
if (encoded) {
|
|
30911
|
+
const bytes = Uint8Array.from(atob(encoded), (c) => c.charCodeAt(0));
|
|
30912
|
+
const planes = inflateZlibSync(bytes);
|
|
30913
|
+
cube = new Uint8Array(32768 * 3);
|
|
30914
|
+
for (let c = 0; c < 3; c++) {
|
|
30915
|
+
for (let i = 0; i < 32768; i++) {
|
|
30916
|
+
const prev = i & 31 ? cube[(i - 1) * 3 + c] : 0;
|
|
30917
|
+
cube[i * 3 + c] = prev + planes[c * 32768 + i] & 255;
|
|
30918
|
+
}
|
|
30919
|
+
}
|
|
30920
|
+
}
|
|
30921
|
+
illuminantCubes.set(index, cube);
|
|
30922
|
+
}
|
|
30923
|
+
return cube;
|
|
30924
|
+
}
|
|
30925
|
+
function hasIlluminant(ca) {
|
|
30926
|
+
return illuminantCube(ca.illuminant) !== null;
|
|
30927
|
+
}
|
|
30928
|
+
var PALETTE = Array.from({ length: 32 }, (_, n) => Math.round(n * 255 / 31));
|
|
30929
|
+
function paletteIndex(v) {
|
|
30930
|
+
const x = clamp012(v) * 255;
|
|
30931
|
+
let n = Math.min(30, Math.floor(x * 31 / 255));
|
|
30932
|
+
while (n < 30 && x >= PALETTE[n + 1]) n++;
|
|
30933
|
+
while (n > 0 && x < PALETTE[n]) n--;
|
|
30934
|
+
return n + Math.min(1, Math.max(0, (x - PALETTE[n]) / (PALETTE[n + 1] - PALETTE[n])));
|
|
30935
|
+
}
|
|
30936
|
+
function lookupIlluminant(cube, r, g, b) {
|
|
30937
|
+
const fr = paletteIndex(r);
|
|
30938
|
+
const fg = paletteIndex(g);
|
|
30939
|
+
const fb = paletteIndex(b);
|
|
30940
|
+
const r0 = Math.min(30, Math.floor(fr));
|
|
30941
|
+
const g0 = Math.min(30, Math.floor(fg));
|
|
30942
|
+
const b0 = Math.min(30, Math.floor(fb));
|
|
30943
|
+
const tr = fr - r0;
|
|
30944
|
+
const tg = fg - g0;
|
|
30945
|
+
const tb = fb - b0;
|
|
30946
|
+
const result = [0, 0, 0];
|
|
30947
|
+
for (let c = 0; c < 3; c++) {
|
|
30948
|
+
let acc = 0;
|
|
30949
|
+
for (let corner = 0; corner < 8; corner++) {
|
|
30950
|
+
const dr = corner & 1;
|
|
30951
|
+
const dg = corner >> 1 & 1;
|
|
30952
|
+
const db = corner >> 2 & 1;
|
|
30953
|
+
const weight = (dr ? tr : 1 - tr) * (dg ? tg : 1 - tg) * (db ? tb : 1 - tb);
|
|
30954
|
+
if (weight !== 0) {
|
|
30955
|
+
acc += weight * cube[(((r0 + dr) * 32 + g0 + dg) * 32 + b0 + db) * 3 + c];
|
|
30956
|
+
}
|
|
30957
|
+
}
|
|
30958
|
+
result[c] = acc / 255;
|
|
30959
|
+
}
|
|
30960
|
+
return result;
|
|
30961
|
+
}
|
|
30880
30962
|
function isChannelOnlyColorAdjustment(ca) {
|
|
30881
|
-
return !!ca && (ca
|
|
30963
|
+
return !!ca && !hasIlluminant(ca) && ca.colorfulness === 0 && ca.redGreenTint === 0;
|
|
30882
30964
|
}
|
|
30883
30965
|
function readColorAdjustment(view, off) {
|
|
30884
30966
|
const ca = {
|
|
@@ -30899,19 +30981,19 @@ function readColorAdjustment(view, off) {
|
|
|
30899
30981
|
return valid ? ca : null;
|
|
30900
30982
|
}
|
|
30901
30983
|
function isIdentityColorAdjustment(ca) {
|
|
30902
|
-
return !ca || ca.flags === 0 && ca.redGamma === 1e4 && ca.greenGamma === 1e4 && ca.blueGamma === 1e4 && ca.referenceBlack === 0 && ca.referenceWhite === 1e4 && ca.contrast === 0 && ca.brightness === 0 && ca.colorfulness === 0 && ca.redGreenTint === 0;
|
|
30984
|
+
return !ca || ca.flags === 0 && !hasIlluminant(ca) && ca.redGamma === 1e4 && ca.greenGamma === 1e4 && ca.blueGamma === 1e4 && ca.referenceBlack === 0 && ca.referenceWhite === 1e4 && ca.contrast === 0 && ca.brightness === 0 && ca.colorfulness === 0 && ca.redGreenTint === 0;
|
|
30903
30985
|
}
|
|
30904
|
-
var
|
|
30905
|
-
var
|
|
30906
|
-
var
|
|
30907
|
-
var TINT_RADIANS = -
|
|
30986
|
+
var CONTRAST_RATE = 0.0148885;
|
|
30987
|
+
var BRIGHTNESS_STEP = 0.95625;
|
|
30988
|
+
var COLORFULNESS_SCALE = 1 / 100;
|
|
30989
|
+
var TINT_RADIANS = -Math.PI / 3;
|
|
30908
30990
|
var RGB_TO_XYZ = [
|
|
30909
30991
|
[0.4124, 0.3576, 0.1805],
|
|
30910
30992
|
[0.2126, 0.7152, 0.0722],
|
|
30911
30993
|
[0.0193, 0.1192, 0.9505]
|
|
30912
30994
|
];
|
|
30913
30995
|
var XYZ_TO_RGB = invert3(RGB_TO_XYZ);
|
|
30914
|
-
var WHITE = RGB_TO_XYZ.map((
|
|
30996
|
+
var WHITE = RGB_TO_XYZ.map((row2) => row2[0] + row2[1] + row2[2]);
|
|
30915
30997
|
var WHITE_D = WHITE[0] + 15 * WHITE[1] + 3 * WHITE[2];
|
|
30916
30998
|
var WHITE_U = 4 * WHITE[0] / WHITE_D;
|
|
30917
30999
|
var WHITE_V = 9 * WHITE[1] / WHITE_D;
|
|
@@ -30927,76 +31009,84 @@ function invert3(m) {
|
|
|
30927
31009
|
[C / det, (b * g - a * h) / det, (a * e - b * d) / det]
|
|
30928
31010
|
];
|
|
30929
31011
|
}
|
|
30930
|
-
function lightness(t) {
|
|
30931
|
-
return t > 8856e-6 ? 116 * Math.cbrt(t) - 16 : 903.3 * t;
|
|
30932
|
-
}
|
|
30933
|
-
function fromLightness(l) {
|
|
30934
|
-
return l > 8 ? ((l + 16) / 116) ** 3 : l / 903.3;
|
|
30935
|
-
}
|
|
30936
31012
|
var clamp012 = (v) => v < 0 ? 0 : v > 1 ? 1 : v;
|
|
30937
|
-
|
|
30938
|
-
|
|
30939
|
-
|
|
30940
|
-
|
|
30941
|
-
|
|
30942
|
-
|
|
30943
|
-
|
|
30944
|
-
|
|
30945
|
-
|
|
30946
|
-
|
|
30947
|
-
|
|
30948
|
-
|
|
30949
|
-
|
|
31013
|
+
var clamp255 = (v) => v < 0 ? 0 : v > 255 ? 255 : v;
|
|
31014
|
+
function adjustChroma(r, g, b, scale, angle) {
|
|
31015
|
+
const x = RGB_TO_XYZ[0][0] * r + RGB_TO_XYZ[0][1] * g + RGB_TO_XYZ[0][2] * b;
|
|
31016
|
+
const y = RGB_TO_XYZ[1][0] * r + RGB_TO_XYZ[1][1] * g + RGB_TO_XYZ[1][2] * b;
|
|
31017
|
+
const z = RGB_TO_XYZ[2][0] * r + RGB_TO_XYZ[2][1] * g + RGB_TO_XYZ[2][2] * b;
|
|
31018
|
+
const d = x + 15 * y + 3 * z;
|
|
31019
|
+
if (d <= 1e-9 || y <= 1e-9) {
|
|
31020
|
+
return [r, g, b];
|
|
31021
|
+
}
|
|
31022
|
+
const du = 4 * x / d - WHITE_U;
|
|
31023
|
+
const dv = 9 * y / d - WHITE_V;
|
|
31024
|
+
const cos = Math.cos(angle) * scale;
|
|
31025
|
+
const sin = Math.sin(angle) * scale;
|
|
31026
|
+
const u = WHITE_U + du * cos - dv * sin;
|
|
31027
|
+
const v = Math.max(1e-6, WHITE_V + du * sin + dv * cos);
|
|
31028
|
+
const x2 = y * 9 * u / (4 * v);
|
|
31029
|
+
const z2 = y * (12 - 3 * u - 20 * v) / (4 * v);
|
|
31030
|
+
const out = [
|
|
31031
|
+
XYZ_TO_RGB[0][0] * x2 + XYZ_TO_RGB[0][1] * y + XYZ_TO_RGB[0][2] * z2,
|
|
31032
|
+
XYZ_TO_RGB[1][0] * x2 + XYZ_TO_RGB[1][1] * y + XYZ_TO_RGB[1][2] * z2,
|
|
31033
|
+
XYZ_TO_RGB[2][0] * x2 + XYZ_TO_RGB[2][1] * y + XYZ_TO_RGB[2][2] * z2
|
|
31034
|
+
];
|
|
31035
|
+
const lo = Math.min(0, out[0], out[1], out[2]);
|
|
31036
|
+
const hi = Math.max(255, out[0], out[1], out[2]);
|
|
31037
|
+
if (lo < 0 || hi > 255) {
|
|
31038
|
+
const k = 255 / (hi - lo);
|
|
31039
|
+
return [(out[0] - lo) * k, (out[1] - lo) * k, (out[2] - lo) * k];
|
|
30950
31040
|
}
|
|
30951
|
-
|
|
30952
|
-
|
|
31041
|
+
return out;
|
|
31042
|
+
}
|
|
31043
|
+
function colorAdjustmentMapper(ca) {
|
|
31044
|
+
const illuminant = illuminantCube(ca.illuminant);
|
|
30953
31045
|
const gammas = [ca.redGamma / 1e4, ca.greenGamma / 1e4, ca.blueGamma / 1e4];
|
|
30954
|
-
const
|
|
30955
|
-
const
|
|
30956
|
-
|
|
30957
|
-
|
|
30958
|
-
|
|
30959
|
-
|
|
30960
|
-
}
|
|
30961
|
-
return table;
|
|
30962
|
-
});
|
|
30963
|
-
const chroma = ca.colorfulness < 0 ? 1 + ca.colorfulness / 100 : 1 + COLORFULNESS_GAIN * ca.colorfulness / 100;
|
|
31046
|
+
const black = ca.referenceBlack / 1e4 * 255;
|
|
31047
|
+
const span = Math.max(1e-6, ca.referenceWhite / 1e4 * 255 - black);
|
|
31048
|
+
const gain = Math.exp(CONTRAST_RATE * ca.contrast);
|
|
31049
|
+
const lift = BRIGHTNESS_STEP * ca.brightness;
|
|
31050
|
+
const chroma = ca.colorfulness !== 0 || ca.redGreenTint !== 0;
|
|
31051
|
+
const scale = 1 + COLORFULNESS_SCALE * ca.colorfulness;
|
|
30964
31052
|
const angle = TINT_RADIANS * ca.redGreenTint / 100;
|
|
30965
|
-
const cos = Math.cos(angle) * chroma;
|
|
30966
|
-
const sin = Math.sin(angle) * chroma;
|
|
30967
|
-
const slope = Math.exp(CONTRAST_GAIN * ca.contrast / 100);
|
|
30968
|
-
const offset = 50 - 50 * slope + BRIGHTNESS_GAIN * ca.brightness / 100;
|
|
30969
31053
|
const log = (ca.flags & CA_LOG_FILTER) !== 0;
|
|
30970
|
-
const
|
|
30971
|
-
const
|
|
30972
|
-
v =
|
|
31054
|
+
const negative = (ca.flags & CA_NEGATIVE) !== 0;
|
|
31055
|
+
const curve = (value, channel) => {
|
|
31056
|
+
let v = 255 * (clamp255(value) / 255) ** gammas[channel];
|
|
31057
|
+
v = (v - black) / span * 255;
|
|
31058
|
+
v = v * gain + lift;
|
|
30973
31059
|
if (log) {
|
|
30974
|
-
v = Math.log2(1 + 7 * v) / 3;
|
|
31060
|
+
v = 255 * Math.log2(1 + 7 * clamp255(v) / 255) / 3;
|
|
31061
|
+
}
|
|
31062
|
+
if (negative) {
|
|
31063
|
+
v = 255 - clamp255(v);
|
|
30975
31064
|
}
|
|
30976
|
-
return Math.round(v
|
|
31065
|
+
return Math.round(clamp255(v));
|
|
30977
31066
|
};
|
|
31067
|
+
if (!illuminant && !chroma) {
|
|
31068
|
+
const tables = [0, 1, 2].map((channel) => Uint8Array.from({ length: 256 }, (_, i) => curve(i, channel)));
|
|
31069
|
+
return (rgb2) => tables[0][rgb2 >> 16 & 255] << 16 | tables[1][rgb2 >> 8 & 255] << 8 | tables[2][rgb2 & 255];
|
|
31070
|
+
}
|
|
30978
31071
|
return (rgb2) => {
|
|
30979
|
-
let
|
|
30980
|
-
|
|
30981
|
-
|
|
30982
|
-
|
|
30983
|
-
|
|
30984
|
-
|
|
30985
|
-
|
|
30986
|
-
|
|
30987
|
-
|
|
30988
|
-
|
|
30989
|
-
|
|
30990
|
-
|
|
30991
|
-
|
|
30992
|
-
|
|
30993
|
-
|
|
30994
|
-
|
|
30995
|
-
|
|
30996
|
-
|
|
30997
|
-
}
|
|
30998
|
-
}
|
|
30999
|
-
return out(r, 0) << 16 | out(g, 1) << 8 | out(b, 2);
|
|
31072
|
+
let c = [rgb2 >> 16 & 255, rgb2 >> 8 & 255, rgb2 & 255];
|
|
31073
|
+
if (illuminant) {
|
|
31074
|
+
const mapped = lookupIlluminant(illuminant, c[0] / 255, c[1] / 255, c[2] / 255);
|
|
31075
|
+
c = [mapped[0] * 255, mapped[1] * 255, mapped[2] * 255];
|
|
31076
|
+
}
|
|
31077
|
+
if (chroma) {
|
|
31078
|
+
c = adjustChroma(clamp255(c[0]), clamp255(c[1]), clamp255(c[2]), scale, angle);
|
|
31079
|
+
}
|
|
31080
|
+
return curve(c[0], 0) << 16 | curve(c[1], 1) << 8 | curve(c[2], 2);
|
|
31081
|
+
};
|
|
31082
|
+
}
|
|
31083
|
+
function splitColorAdjustment(ca) {
|
|
31084
|
+
const neutral = DEFAULT_COLOR_ADJUSTMENT;
|
|
31085
|
+
const palette = { ...neutral, illuminant: ca.illuminant, colorfulness: ca.colorfulness, redGreenTint: ca.redGreenTint };
|
|
31086
|
+
const curves = { ...ca, illuminant: 0, colorfulness: 0, redGreenTint: 0 };
|
|
31087
|
+
return {
|
|
31088
|
+
palette: isIdentityColorAdjustment(palette) ? void 0 : palette,
|
|
31089
|
+
curves: isIdentityColorAdjustment(curves) ? void 0 : curves
|
|
31000
31090
|
};
|
|
31001
31091
|
}
|
|
31002
31092
|
function colorAdjustRgb(rgbs, ca) {
|
|
@@ -31041,6 +31131,52 @@ function applyColorAdjustment(pixels, ca) {
|
|
|
31041
31131
|
}
|
|
31042
31132
|
}
|
|
31043
31133
|
|
|
31134
|
+
// src/emf-gdi-halftone-dither.ts
|
|
31135
|
+
var THRESHOLDS = [
|
|
31136
|
+
[238, 110, 198, 70, 229, 102, 204, 76, 236, 108, 195, 69, 228, 100, 205, 78],
|
|
31137
|
+
[46, 174, 7, 134, 39, 166, 12, 140, 45, 171, 5, 132, 36, 164, 15, 142],
|
|
31138
|
+
[209, 83, 249, 122, 218, 90, 239, 112, 208, 80, 247, 120, 215, 88, 242, 114],
|
|
31139
|
+
[18, 146, 59, 185, 26, 154, 49, 176, 16, 144, 56, 184, 25, 152, 50, 178],
|
|
31140
|
+
[226, 98, 202, 74, 233, 107, 192, 64, 224, 96, 200, 73, 232, 104, 194, 66],
|
|
31141
|
+
[35, 162, 11, 138, 42, 170, 1, 128, 32, 160, 8, 136, 40, 168, 2, 130],
|
|
31142
|
+
[219, 91, 243, 115, 211, 83, 253, 125, 221, 93, 245, 117, 212, 85, 250, 123],
|
|
31143
|
+
[28, 154, 52, 178, 19, 147, 61, 188, 29, 157, 53, 181, 22, 149, 59, 187],
|
|
31144
|
+
[235, 107, 195, 67, 226, 100, 205, 77, 236, 109, 197, 69, 229, 101, 202, 76],
|
|
31145
|
+
[43, 171, 4, 131, 35, 163, 14, 141, 45, 173, 5, 133, 38, 164, 11, 139],
|
|
31146
|
+
[207, 79, 246, 119, 215, 87, 240, 113, 209, 81, 249, 121, 216, 90, 239, 111],
|
|
31147
|
+
[15, 143, 56, 183, 23, 151, 49, 177, 18, 145, 57, 185, 25, 153, 47, 175],
|
|
31148
|
+
[222, 95, 198, 71, 231, 103, 193, 66, 225, 97, 201, 73, 232, 105, 191, 63],
|
|
31149
|
+
[32, 159, 8, 135, 39, 167, 1, 129, 33, 161, 9, 137, 42, 169, 1, 127],
|
|
31150
|
+
[222, 94, 246, 118, 214, 86, 252, 124, 219, 92, 243, 116, 212, 84, 253, 126],
|
|
31151
|
+
[30, 158, 54, 181, 22, 150, 60, 188, 28, 156, 52, 180, 21, 147, 62, 190]
|
|
31152
|
+
];
|
|
31153
|
+
var PERIOD_X = 66;
|
|
31154
|
+
var PERIOD_Y = 65;
|
|
31155
|
+
function column(j) {
|
|
31156
|
+
return j < 63 ? j % 16 : j <= 64 ? 14 : 15;
|
|
31157
|
+
}
|
|
31158
|
+
function row(i) {
|
|
31159
|
+
return i < 63 ? i % 16 : i === 63 ? 14 : 15;
|
|
31160
|
+
}
|
|
31161
|
+
var mod2 = (a, m) => (a % m + m) % m;
|
|
31162
|
+
function ditherStartX(destLeft, brushOrgX) {
|
|
31163
|
+
const k = mod2(destLeft - brushOrgX - 2, 65);
|
|
31164
|
+
return k < 63 ? k : k + 1;
|
|
31165
|
+
}
|
|
31166
|
+
function ditherStartY(destTop, brushOrgY) {
|
|
31167
|
+
return mod2(destTop - brushOrgY - 2, PERIOD_Y);
|
|
31168
|
+
}
|
|
31169
|
+
function ditherThreshold(startX, startY, dx, dy) {
|
|
31170
|
+
return THRESHOLDS[row(mod2(startY + dy, PERIOD_Y))][column(mod2(startX + dx, PERIOD_X))];
|
|
31171
|
+
}
|
|
31172
|
+
function paletteLevel(n) {
|
|
31173
|
+
return Math.round(n * 255 / 31);
|
|
31174
|
+
}
|
|
31175
|
+
function ditherQuantize(v, threshold) {
|
|
31176
|
+
const n = Math.floor((31 * v + threshold) / 255);
|
|
31177
|
+
return paletteLevel(n < 0 ? 0 : n > 31 ? 31 : n);
|
|
31178
|
+
}
|
|
31179
|
+
|
|
31044
31180
|
// src/emf-gdi-stretch.ts
|
|
31045
31181
|
var BLACKONWHITE = 1;
|
|
31046
31182
|
var WHITEONBLACK = 2;
|
|
@@ -31175,6 +31311,19 @@ function softTent(d) {
|
|
|
31175
31311
|
softTentCache.set(key, value);
|
|
31176
31312
|
return value;
|
|
31177
31313
|
}
|
|
31314
|
+
function ditherPixels(px, w, h, dither, flipX, flipY, phaseX, phaseY) {
|
|
31315
|
+
for (let y = 0; y < h; y++) {
|
|
31316
|
+
const yy = phaseY ? phaseY[y] : flipY ? h - 1 - y : y;
|
|
31317
|
+
for (let x = 0; x < w; x++) {
|
|
31318
|
+
const xx = phaseX ? phaseX[x] : x;
|
|
31319
|
+
const threshold = ditherThreshold(dither.startX, dither.startY, xx, yy);
|
|
31320
|
+
const o = (y * w + x) * 3;
|
|
31321
|
+
px[o] = ditherQuantize(px[o], threshold);
|
|
31322
|
+
px[o + 1] = ditherQuantize(px[o + 1], threshold);
|
|
31323
|
+
px[o + 2] = ditherQuantize(px[o + 2], threshold);
|
|
31324
|
+
}
|
|
31325
|
+
}
|
|
31326
|
+
}
|
|
31178
31327
|
var SPECKLE_OVERSHOOT = 4;
|
|
31179
31328
|
function halftoneDespeckle(px, w, h) {
|
|
31180
31329
|
const src = px.slice();
|
|
@@ -31234,7 +31383,7 @@ function halftoneSharpen(px, w, h) {
|
|
|
31234
31383
|
}
|
|
31235
31384
|
}
|
|
31236
31385
|
}
|
|
31237
|
-
function stretchHalftone(src, sx, sy, sw, sh, dw, dh, adjust, adjustAfterSampling = false, directDib = false) {
|
|
31386
|
+
function stretchHalftone(src, sx, sy, sw, sh, dw, dh, adjust, adjustAfterSampling = false, directDib = false, dither, curves) {
|
|
31238
31387
|
const W = Math.max(0, Math.round(Math.abs(dw)));
|
|
31239
31388
|
const H = Math.max(0, Math.round(Math.abs(dh)));
|
|
31240
31389
|
const SW = Math.round(Math.abs(sw));
|
|
@@ -31265,12 +31414,18 @@ function stretchHalftone(src, sx, sy, sw, sh, dw, dh, adjust, adjustAfterSamplin
|
|
|
31265
31414
|
const enlarging = W >= SW && H >= SH && (W > SW || H > SH);
|
|
31266
31415
|
const reducing = W < SW && H < SH;
|
|
31267
31416
|
const mixed = W > SW && H < SH || W < SW && H > SH;
|
|
31268
|
-
const
|
|
31269
|
-
const
|
|
31417
|
+
const dithered = !!dither && !!adjust && !adjustAfterSampling;
|
|
31418
|
+
const nearestMixed = mixed && (!adjust || adjustAfterSampling || dithered) && (W < SW && W * 2 > SW || H < SH && H * 2 > SH);
|
|
31419
|
+
const nativeMixed = mixed && (!adjust || adjustAfterSampling || dithered) && Math.min(SW, W) >= 2 && Math.min(SH, H) >= 2 && (W > SW && H * 2 <= SH || H > SH && W * 2 <= SW);
|
|
31270
31420
|
if ((enlarging || nearestMixed) && !directDib) {
|
|
31271
31421
|
halftoneDespeckle(rect, SW, SH);
|
|
31272
31422
|
}
|
|
31273
|
-
|
|
31423
|
+
const reducedEven = W < SW ? SW % 2 === 0 && H % SH === 0 : SH % 2 === 0 && W % SW === 0;
|
|
31424
|
+
const ditherAtSource = dithered && (W >= SW && H >= SH || nativeMixed && reducedEven);
|
|
31425
|
+
if (ditherAtSource) {
|
|
31426
|
+
ditherPixels(rect, SW, SH, dither, false, flipY);
|
|
31427
|
+
}
|
|
31428
|
+
if (adjust && !adjustAfterSampling && (!dithered || ditherAtSource)) {
|
|
31274
31429
|
adjust(rect);
|
|
31275
31430
|
}
|
|
31276
31431
|
const sampleW = nativeMixed ? Math.min(SW, W) : W;
|
|
@@ -31396,7 +31551,22 @@ function stretchHalftone(src, sx, sy, sw, sh, dw, dh, adjust, adjustAfterSamplin
|
|
|
31396
31551
|
}
|
|
31397
31552
|
}
|
|
31398
31553
|
}
|
|
31554
|
+
if (dithered && !ditherAtSource) {
|
|
31555
|
+
const phase = (n, src2, dst, selectSource) => Int32Array.from({ length: n }, (_, i) => dst > src2 ? Math.floor(i * src2 / dst) : selectSource ? Math.max(0, Math.min(src2 - 1, Math.floor(((i + 1) * 2 * src2 - dst) / (2 * dst)))) : i);
|
|
31556
|
+
ditherPixels(
|
|
31557
|
+
out,
|
|
31558
|
+
W,
|
|
31559
|
+
H,
|
|
31560
|
+
dither,
|
|
31561
|
+
false,
|
|
31562
|
+
false,
|
|
31563
|
+
nearestMixed ? phase(W, SW, W, true) : void 0,
|
|
31564
|
+
nearestMixed ? phase(H, SH, H, false) : void 0
|
|
31565
|
+
);
|
|
31566
|
+
adjust(out);
|
|
31567
|
+
}
|
|
31399
31568
|
if (adjust && adjustAfterSampling) adjust(out);
|
|
31569
|
+
if (curves && dithered) curves(out);
|
|
31400
31570
|
for (let i = 0, o = 0; i < W * H; i++, o += 3) {
|
|
31401
31571
|
data[i * 4] = out[o];
|
|
31402
31572
|
data[i * 4 + 1] = out[o + 1];
|
|
@@ -31425,7 +31595,7 @@ function patternOperand(rCtx, brush) {
|
|
|
31425
31595
|
state.brushOrgY
|
|
31426
31596
|
);
|
|
31427
31597
|
}
|
|
31428
|
-
function drawSourceMapped(target, decoded, req, offsetX, offsetY, mode) {
|
|
31598
|
+
function drawSourceMapped(target, decoded, req, offsetX, offsetY, mode, brushOrgX, brushOrgY) {
|
|
31429
31599
|
const dLeft = Math.min(req.dx, req.dx + req.dw) - offsetX;
|
|
31430
31600
|
const dTop = Math.min(req.dy, req.dy + req.dh) - offsetY;
|
|
31431
31601
|
const px = mode === HALFTONE ? stretchHalftone(
|
|
@@ -31438,7 +31608,9 @@ function drawSourceMapped(target, decoded, req, offsetX, offsetY, mode) {
|
|
|
31438
31608
|
req.dh,
|
|
31439
31609
|
decoded.adjust,
|
|
31440
31610
|
decoded.adjustAfterSampling,
|
|
31441
|
-
req.dibOrigin === "bottom-left"
|
|
31611
|
+
req.dibOrigin === "bottom-left",
|
|
31612
|
+
decoded.adjust && !decoded.adjustAfterSampling ? { startX: ditherStartX(Math.min(req.dx, req.dx + req.dw), brushOrgX), startY: ditherStartY(Math.min(req.dy, req.dy + req.dh), brushOrgY) } : void 0,
|
|
31613
|
+
decoded.curves
|
|
31442
31614
|
) : stretchGdi(decoded.pixels, req.sx, req.sy, req.sw, req.sh, req.dw, req.dh, mode);
|
|
31443
31615
|
if (px.width === 0 || px.height === 0) {
|
|
31444
31616
|
return;
|
|
@@ -31468,13 +31640,17 @@ function decodeSource(rCtx, req) {
|
|
|
31468
31640
|
return null;
|
|
31469
31641
|
}
|
|
31470
31642
|
const ca = rCtx.state.colorAdjustment;
|
|
31471
|
-
const
|
|
31643
|
+
const halftone = req.stretch && rCtx.state.stretchBltMode === HALFTONE && ca;
|
|
31644
|
+
const channelOnly = isChannelOnlyColorAdjustment(ca);
|
|
31645
|
+
const split = halftone && !channelOnly ? splitColorAdjustment(ca) : void 0;
|
|
31646
|
+
const adjust = halftone ? ((rgb2) => colorAdjustRgb(rgb2, split?.palette ?? ca)) : void 0;
|
|
31647
|
+
const curves = split?.curves;
|
|
31472
31648
|
let { sy } = req;
|
|
31473
31649
|
if (req.dibOrigin === "bottom-left" && rCtx.view.getInt32(req.source.bmi + 8, true) > 0) {
|
|
31474
31650
|
sy = image.height - sy - req.sh;
|
|
31475
31651
|
}
|
|
31476
31652
|
return {
|
|
31477
|
-
decoded: { pixels: image, adjust, adjustAfterSampling:
|
|
31653
|
+
decoded: { pixels: image, adjust, adjustAfterSampling: channelOnly, curves: curves ? (rgb2) => colorAdjustRgb(rgb2, curves) : void 0 },
|
|
31478
31654
|
req: { ...req, sy }
|
|
31479
31655
|
};
|
|
31480
31656
|
}
|
|
@@ -31547,7 +31723,7 @@ function runTernary(rCtx, req, index, usesP, usesS) {
|
|
|
31547
31723
|
if (!decoded) {
|
|
31548
31724
|
return;
|
|
31549
31725
|
}
|
|
31550
|
-
drawSourceMapped(layer.ctx, decoded.decoded, decoded.req, rect.x, rect.y, rCtx.state.stretchBltMode);
|
|
31726
|
+
drawSourceMapped(layer.ctx, decoded.decoded, decoded.req, rect.x, rect.y, rCtx.state.stretchBltMode, rCtx.state.brushOrgX, rCtx.state.brushOrgY);
|
|
31551
31727
|
src = canvasGetImageData(layer.ctx, 0, 0, rect.w, rect.h);
|
|
31552
31728
|
}
|
|
31553
31729
|
const dst = canvasGetImageData(ctx, rect.x, rect.y, rect.w, rect.h);
|
|
@@ -31726,7 +31902,7 @@ function executeBlit(rCtx, request) {
|
|
|
31726
31902
|
case "copy": {
|
|
31727
31903
|
const decoded = decodeSource(rCtx, req);
|
|
31728
31904
|
if (decoded) {
|
|
31729
|
-
drawSourceMapped(ctx, decoded.decoded, decoded.req, 0, 0, rCtx.state.stretchBltMode);
|
|
31905
|
+
drawSourceMapped(ctx, decoded.decoded, decoded.req, 0, 0, rCtx.state.stretchBltMode, rCtx.state.brushOrgX, rCtx.state.brushOrgY);
|
|
31730
31906
|
}
|
|
31731
31907
|
return;
|
|
31732
31908
|
}
|
|
@@ -31903,9 +32079,9 @@ function readMask(rCtx, offset, offBmi, cbBmi, offBits, cbBits) {
|
|
|
31903
32079
|
return null;
|
|
31904
32080
|
}
|
|
31905
32081
|
const out = new Uint8Array(width * height);
|
|
31906
|
-
for (let
|
|
31907
|
-
const y = heightRaw > 0 ? height - 1 -
|
|
31908
|
-
const rowOff = bits +
|
|
32082
|
+
for (let row2 = 0; row2 < height; row2++) {
|
|
32083
|
+
const y = heightRaw > 0 ? height - 1 - row2 : row2;
|
|
32084
|
+
const rowOff = bits + row2 * stride;
|
|
31909
32085
|
for (let x = 0; x < width; x++) {
|
|
31910
32086
|
out[y * width + x] = view.getUint8(rowOff + (x >> 3)) >> 7 - (x & 7) & 1;
|
|
31911
32087
|
}
|
|
@@ -31965,7 +32141,7 @@ function axisMap(rCtx, xDest, yDest, cxDest, cyDest, sx, sy, sw, sh) {
|
|
|
31965
32141
|
const baseX = Math.min(sx, sx + sw);
|
|
31966
32142
|
const baseY = Math.min(sy, sy + sh);
|
|
31967
32143
|
const col = new Int32Array(x1 - x0);
|
|
31968
|
-
const
|
|
32144
|
+
const row2 = new Int32Array(y1 - y0);
|
|
31969
32145
|
const mirrored = dw < 0 || dh < 0;
|
|
31970
32146
|
const pick = (i, len, n) => mirrored ? Math.min(len - 1, Math.floor(i * len / n)) : gdiNearest(i, len, n);
|
|
31971
32147
|
for (let x = x0; x < x1; x++) {
|
|
@@ -31974,9 +32150,9 @@ function axisMap(rCtx, xDest, yDest, cxDest, cyDest, sx, sy, sw, sh) {
|
|
|
31974
32150
|
}
|
|
31975
32151
|
for (let y = y0; y < y1; y++) {
|
|
31976
32152
|
const k = pick(y - top, ah, H);
|
|
31977
|
-
|
|
32153
|
+
row2[y - y0] = sh < 0 !== dh < 0 ? baseY + ah - 1 - k : baseY + k;
|
|
31978
32154
|
}
|
|
31979
|
-
return { box: { x: x0, y: y0, w: x1 - x0, h: y1 - y0 }, col, row };
|
|
32155
|
+
return { box: { x: x0, y: y0, w: x1 - x0, h: y1 - y0 }, col, row: row2 };
|
|
31980
32156
|
}
|
|
31981
32157
|
function writePixels(rCtx, box, op) {
|
|
31982
32158
|
const { ctx } = rCtx;
|
|
@@ -32065,15 +32241,15 @@ function handleAlphaBlend(rCtx, offset, dataOff, recSize) {
|
|
|
32065
32241
|
if (!map) {
|
|
32066
32242
|
return;
|
|
32067
32243
|
}
|
|
32068
|
-
const { box, col, row } = map;
|
|
32244
|
+
const { box, col, row: row2 } = map;
|
|
32069
32245
|
if (!canReadBack(rCtx.ctx)) {
|
|
32070
32246
|
drawAlphaOverlay(rCtx, map, src, sca, srcAlpha);
|
|
32071
32247
|
return;
|
|
32072
32248
|
}
|
|
32073
|
-
writePixels(rCtx, box, (x, y, d) => alphaBlendPixel(texelAt(src, col[x - box.x],
|
|
32249
|
+
writePixels(rCtx, box, (x, y, d) => alphaBlendPixel(texelAt(src, col[x - box.x], row2[y - box.y]), d, sca, srcAlpha));
|
|
32074
32250
|
}
|
|
32075
32251
|
function drawAlphaOverlay(rCtx, map, src, sca, srcAlpha) {
|
|
32076
|
-
const { box, col, row } = map;
|
|
32252
|
+
const { box, col, row: row2 } = map;
|
|
32077
32253
|
const scratch = acquireScratch(box.w, box.h);
|
|
32078
32254
|
if (!scratch) {
|
|
32079
32255
|
return;
|
|
@@ -32081,7 +32257,7 @@ function drawAlphaOverlay(rCtx, map, src, sca, srcAlpha) {
|
|
|
32081
32257
|
const data = new Uint8ClampedArray(box.w * box.h * 4);
|
|
32082
32258
|
for (let y = 0; y < box.h; y++) {
|
|
32083
32259
|
for (let x = 0; x < box.w; x++) {
|
|
32084
|
-
const s = texelAt(src, col[x],
|
|
32260
|
+
const s = texelAt(src, col[x], row2[y]);
|
|
32085
32261
|
const a = srcAlpha ? (s >>> 24) * sca / 255 : sca;
|
|
32086
32262
|
const i = (y * box.w + x) * 4;
|
|
32087
32263
|
const k = srcAlpha && s >>> 24 > 0 ? 255 / (s >>> 24) : 1;
|
|
@@ -32116,9 +32292,9 @@ function handleTransparentBlt(rCtx, offset, dataOff, recSize) {
|
|
|
32116
32292
|
if (!map) {
|
|
32117
32293
|
return;
|
|
32118
32294
|
}
|
|
32119
|
-
const { box, col, row } = map;
|
|
32295
|
+
const { box, col, row: row2 } = map;
|
|
32120
32296
|
writePixels(rCtx, box, (x, y) => {
|
|
32121
|
-
const s = texelAt(src, col[x - box.x],
|
|
32297
|
+
const s = texelAt(src, col[x - box.x], row2[y - box.y]) & 16777215;
|
|
32122
32298
|
return s === key ? -1 : s;
|
|
32123
32299
|
});
|
|
32124
32300
|
}
|
|
@@ -32149,7 +32325,7 @@ function handleMaskBlt(rCtx, offset, dataOff, recSize) {
|
|
|
32149
32325
|
if (!map) {
|
|
32150
32326
|
return;
|
|
32151
32327
|
}
|
|
32152
|
-
const { box, col, row } = map;
|
|
32328
|
+
const { box, col, row: row2 } = map;
|
|
32153
32329
|
const needsDest = rop3Operands(fore).usesD || mask !== null && rop3Operands(back).usesD;
|
|
32154
32330
|
if (needsDest && !canReadBack(rCtx.ctx)) {
|
|
32155
32331
|
return;
|
|
@@ -32159,7 +32335,7 @@ function handleMaskBlt(rCtx, offset, dataOff, recSize) {
|
|
|
32159
32335
|
const my0 = Math.min(r.sy, r.sy + r.sh);
|
|
32160
32336
|
writePixels(rCtx, box, (x, y, d) => {
|
|
32161
32337
|
const sxp = col[x - box.x];
|
|
32162
|
-
const syp =
|
|
32338
|
+
const syp = row2[y - box.y];
|
|
32163
32339
|
let index = fore;
|
|
32164
32340
|
if (mask) {
|
|
32165
32341
|
const mx = xMask + sxp - mx0;
|
|
@@ -32274,10 +32450,10 @@ function handleSetDibitsToDevice(rCtx, offset, dataOff, recSize) {
|
|
|
32274
32450
|
if (!map) {
|
|
32275
32451
|
return;
|
|
32276
32452
|
}
|
|
32277
|
-
const { box, col, row } = map;
|
|
32453
|
+
const { box, col, row: row2 } = map;
|
|
32278
32454
|
writePixels(rCtx, box, (x, y) => {
|
|
32279
32455
|
const i = col[x - box.x];
|
|
32280
|
-
const j =
|
|
32456
|
+
const j = row2[y - box.y];
|
|
32281
32457
|
const fromBottom = ySrc + cy - 1 - j;
|
|
32282
32458
|
const bandRow = topDown ? fullRows - 1 - fromBottom - startScan : scans - 1 - (fromBottom - startScan);
|
|
32283
32459
|
if (bandRow < 0 || bandRow >= band.height) {
|
|
@@ -32499,8 +32675,8 @@ function decodeAnsiRecord(bytes, charSet) {
|
|
|
32499
32675
|
const byteLengths = [];
|
|
32500
32676
|
for (let i = 0; i < bytes.length; i++) {
|
|
32501
32677
|
const lead = bytes[i];
|
|
32502
|
-
const
|
|
32503
|
-
const code =
|
|
32678
|
+
const row2 = JOHAB_ROWS[lead];
|
|
32679
|
+
const code = row2 && i + 1 < bytes.length ? row2.charCodeAt(bytes[i + 1]) : 65533;
|
|
32504
32680
|
const count = lead < 128 || code === 65533 ? 1 : 2;
|
|
32505
32681
|
codes.push(lead < 128 ? lead : code);
|
|
32506
32682
|
byteLengths.push(count);
|
|
@@ -38155,23 +38331,23 @@ function spansOf(p, rects) {
|
|
|
38155
38331
|
const x0 = Math.round(l * p.kx);
|
|
38156
38332
|
const x1 = Math.round(r * p.kx);
|
|
38157
38333
|
for (let y = Math.round(t * p.ky); y < Math.round(b * p.ky); y++) {
|
|
38158
|
-
let
|
|
38159
|
-
if (!
|
|
38160
|
-
|
|
38161
|
-
rows.set(y,
|
|
38334
|
+
let row2 = rows.get(y);
|
|
38335
|
+
if (!row2) {
|
|
38336
|
+
row2 = [];
|
|
38337
|
+
rows.set(y, row2);
|
|
38162
38338
|
}
|
|
38163
|
-
|
|
38339
|
+
row2.push([x0, x1]);
|
|
38164
38340
|
}
|
|
38165
38341
|
}
|
|
38166
38342
|
for (const y of [...rows.keys()].sort((a, b) => a - b)) {
|
|
38167
|
-
const
|
|
38168
|
-
let [s0, s1] =
|
|
38169
|
-
for (let i = 1; i <
|
|
38170
|
-
if (
|
|
38171
|
-
s1 = Math.max(s1,
|
|
38343
|
+
const row2 = rows.get(y).sort((a, b) => a[0] - b[0]);
|
|
38344
|
+
let [s0, s1] = row2[0];
|
|
38345
|
+
for (let i = 1; i < row2.length; i++) {
|
|
38346
|
+
if (row2[i][0] <= s1) {
|
|
38347
|
+
s1 = Math.max(s1, row2[i][1]);
|
|
38172
38348
|
} else {
|
|
38173
38349
|
spans.add(y, s0, s1);
|
|
38174
|
-
[s0, s1] =
|
|
38350
|
+
[s0, s1] = row2[i];
|
|
38175
38351
|
}
|
|
38176
38352
|
}
|
|
38177
38353
|
spans.add(y, s0, s1);
|
|
@@ -38283,8 +38459,8 @@ function devicePixelSpans(p, x, y) {
|
|
|
38283
38459
|
const x1 = Math.max(x0 + 1, Math.round((x + 1) * p.kx));
|
|
38284
38460
|
const y0 = Math.round(y * p.ky);
|
|
38285
38461
|
const y1 = Math.max(y0 + 1, Math.round((y + 1) * p.ky));
|
|
38286
|
-
for (let
|
|
38287
|
-
spans.add(
|
|
38462
|
+
for (let row2 = y0; row2 < y1; row2++) {
|
|
38463
|
+
spans.add(row2, x0, x1);
|
|
38288
38464
|
}
|
|
38289
38465
|
return spans;
|
|
38290
38466
|
}
|
|
@@ -38344,14 +38520,14 @@ function wmfExtFloodFill(p, x, y, colorRef, type) {
|
|
|
38344
38520
|
if (py + 1 < h) visit(i + w);
|
|
38345
38521
|
}
|
|
38346
38522
|
const spans = new SpanList();
|
|
38347
|
-
for (let
|
|
38523
|
+
for (let row2 = 0; row2 < h; row2++) {
|
|
38348
38524
|
let run = -1;
|
|
38349
38525
|
for (let col = 0; col <= w; col++) {
|
|
38350
|
-
const on = col < w && seen[
|
|
38526
|
+
const on = col < w && seen[row2 * w + col] === 1;
|
|
38351
38527
|
if (on && run < 0) {
|
|
38352
38528
|
run = col;
|
|
38353
38529
|
} else if (!on && run >= 0) {
|
|
38354
|
-
spans.add(
|
|
38530
|
+
spans.add(row2, run, col);
|
|
38355
38531
|
run = -1;
|
|
38356
38532
|
}
|
|
38357
38533
|
}
|