@sekyro/web 0.0.0-stage → 0.1.0-rc.1
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/CHANGELOG.md +7 -0
- package/LICENSE +20 -0
- package/README.md +92 -2
- package/dist/capture-constraints-BujkZcfb.d.cts +21 -0
- package/dist/capture-constraints-BujkZcfb.d.ts +21 -0
- package/dist/capture-session-v3-BJ8ciaWl.d.ts +457 -0
- package/dist/capture-session-v3-CAoWM8iT.d.cts +457 -0
- package/dist/chunk-LOTAJDRE.js +1094 -0
- package/dist/chunk-LOTAJDRE.js.map +1 -0
- package/dist/chunk-MWNFSNMP.js +52 -0
- package/dist/chunk-MWNFSNMP.js.map +1 -0
- package/dist/chunk-NILNKLK6.js +50 -0
- package/dist/chunk-NILNKLK6.js.map +1 -0
- package/dist/chunk-NU4YOLCN.js +796 -0
- package/dist/chunk-NU4YOLCN.js.map +1 -0
- package/dist/chunk-NWF46H7K.js +359 -0
- package/dist/chunk-NWF46H7K.js.map +1 -0
- package/dist/chunk-WY6U7AIK.js +193 -0
- package/dist/chunk-WY6U7AIK.js.map +1 -0
- package/dist/chunk-YVFF4Q4G.js +327 -0
- package/dist/chunk-YVFF4Q4G.js.map +1 -0
- package/dist/client/index.cjs +357 -0
- package/dist/client/index.cjs.map +1 -0
- package/dist/client/index.d.cts +39 -0
- package/dist/client/index.d.ts +39 -0
- package/dist/client/index.js +15 -0
- package/dist/client/index.js.map +1 -0
- package/dist/core/index.cjs +1605 -0
- package/dist/core/index.cjs.map +1 -0
- package/dist/core/index.d.cts +87 -0
- package/dist/core/index.d.ts +87 -0
- package/dist/core/index.js +139 -0
- package/dist/core/index.js.map +1 -0
- package/dist/core/v3/detect-worker.cjs +392 -0
- package/dist/core/v3/detect-worker.cjs.map +1 -0
- package/dist/core/v3/detect-worker.d.cts +1 -0
- package/dist/core/v3/detect-worker.d.ts +1 -0
- package/dist/core/v3/detect-worker.js +13 -0
- package/dist/core/v3/detect-worker.js.map +1 -0
- package/dist/create-verification--ldwakXV.d.cts +341 -0
- package/dist/create-verification-BlAPWeW5.d.ts +341 -0
- package/dist/detect-worker-CKXHlXx9.d.cts +105 -0
- package/dist/detect-worker-CKXHlXx9.d.ts +105 -0
- package/dist/detector-scanic-4C6IEW2K.js +787 -0
- package/dist/detector-scanic-4C6IEW2K.js.map +1 -0
- package/dist/hosted-client-BpvBqu9f.d.cts +408 -0
- package/dist/hosted-client-BpvBqu9f.d.ts +408 -0
- package/dist/index.cjs +2580 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +6 -0
- package/dist/index.d.ts +6 -0
- package/dist/index.js +28 -0
- package/dist/index.js.map +1 -0
- package/dist/internal/index.cjs +4110 -0
- package/dist/internal/index.cjs.map +1 -0
- package/dist/internal/index.d.cts +431 -0
- package/dist/internal/index.d.ts +431 -0
- package/dist/internal/index.js +647 -0
- package/dist/internal/index.js.map +1 -0
- package/dist/popup/index.cjs +76 -0
- package/dist/popup/index.cjs.map +1 -0
- package/dist/popup/index.d.cts +66 -0
- package/dist/popup/index.d.ts +66 -0
- package/dist/popup/index.js +11 -0
- package/dist/popup/index.js.map +1 -0
- package/dist/scanic-ml-stub-S2OZ6HEF.js +10 -0
- package/dist/scanic-ml-stub-S2OZ6HEF.js.map +1 -0
- package/package.json +118 -4
|
@@ -0,0 +1,787 @@
|
|
|
1
|
+
import {
|
|
2
|
+
DOC_DETECT_WIDTH
|
|
3
|
+
} from "./chunk-WY6U7AIK.js";
|
|
4
|
+
import "./chunk-MWNFSNMP.js";
|
|
5
|
+
|
|
6
|
+
// vendor/scanic/scanic.js
|
|
7
|
+
var A;
|
|
8
|
+
var I = 1e3;
|
|
9
|
+
var g = 10;
|
|
10
|
+
function B(A2, B2 = {}) {
|
|
11
|
+
const t2 = B2.width || Math.sqrt(A2.length), i2 = B2.height || A2.length / t2, E2 = void 0 !== B2.mode ? B2.mode : 1, e2 = void 0 !== B2.method ? B2.method : 2, o2 = B2.minArea || I, n2 = t2 + 2, a2 = i2 + 2, s2 = new Int32Array(n2 * a2);
|
|
12
|
+
for (let I2 = 0; I2 < i2; I2++) for (let g2 = 0; g2 < t2; g2++) A2[I2 * t2 + g2] > 0 && (s2[(I2 + 1) * n2 + (g2 + 1)] = 1);
|
|
13
|
+
const c2 = [];
|
|
14
|
+
let r2 = 2;
|
|
15
|
+
for (let I2 = 1; I2 <= i2; I2++) for (let A3 = 1; A3 <= t2; A3++) {
|
|
16
|
+
const B3 = s2[I2 * n2 + A3], t3 = s2[I2 * n2 + (A3 - 1)];
|
|
17
|
+
let i3 = null, o3 = false, h3 = -1;
|
|
18
|
+
if (1 === B3 && 0 === t3 ? (o3 = true, i3 = { x: A3, y: I2 }, h3 = 2) : 0 === B3 && t3 >= 1 && -1 !== t3 && 1 === t3 && (o3 = false, i3 = { x: A3 - 1, y: I2 }, h3 = 6), i3) {
|
|
19
|
+
if (0 === E2 && !o3) {
|
|
20
|
+
s2[i3.y * n2 + i3.x] = -1;
|
|
21
|
+
continue;
|
|
22
|
+
}
|
|
23
|
+
const A4 = r2++, I3 = C(s2, n2, a2, i3, h3, A4);
|
|
24
|
+
if (I3 && I3.length > 0) {
|
|
25
|
+
let B4 = I3;
|
|
26
|
+
2 === e2 && (B4 = Q(I3));
|
|
27
|
+
const C2 = B4.map((A5) => ({ x: A5.x - 1, y: A5.y - 1 }));
|
|
28
|
+
if (C2.length >= (2 === e2 ? 4 : g)) {
|
|
29
|
+
const I4 = { id: A4, points: C2, isOuter: o3 };
|
|
30
|
+
c2.push(I4);
|
|
31
|
+
}
|
|
32
|
+
} else 1 === s2[i3.y * n2 + i3.x] && (s2[i3.y * n2 + i3.x] = A4);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
c2.forEach((A3) => {
|
|
36
|
+
A3.area = (function(A4) {
|
|
37
|
+
let I2 = 0;
|
|
38
|
+
const g2 = A4.length;
|
|
39
|
+
if (g2 < 3) return 0;
|
|
40
|
+
for (let B3 = 0; B3 < g2; B3++) {
|
|
41
|
+
const C2 = (B3 + 1) % g2;
|
|
42
|
+
I2 += A4[B3].x * A4[C2].y, I2 -= A4[C2].x * A4[B3].y;
|
|
43
|
+
}
|
|
44
|
+
return Math.abs(I2) / 2;
|
|
45
|
+
})(A3.points), A3.boundingBox = (function(A4) {
|
|
46
|
+
if (0 === A4.length) return { minX: 0, minY: 0, maxX: 0, maxY: 0 };
|
|
47
|
+
let I2 = A4[0].x, g2 = A4[0].y, B3 = A4[0].x, C2 = A4[0].y;
|
|
48
|
+
for (let Q2 = 1; Q2 < A4.length; Q2++) {
|
|
49
|
+
const t3 = A4[Q2];
|
|
50
|
+
I2 = Math.min(I2, t3.x), g2 = Math.min(g2, t3.y), B3 = Math.max(B3, t3.x), C2 = Math.max(C2, t3.y);
|
|
51
|
+
}
|
|
52
|
+
return { minX: I2, minY: g2, maxX: B3, maxY: C2 };
|
|
53
|
+
})(A3.points);
|
|
54
|
+
});
|
|
55
|
+
const h2 = c2.filter((A3) => A3.area >= o2);
|
|
56
|
+
return h2.sort((A3, I2) => I2.area - A3.area), B2.debug && (B2.debug.labels = s2, B2.debug.rawContours = c2, B2.debug.finalContours = h2), h2;
|
|
57
|
+
}
|
|
58
|
+
function C(A2, I2, g2, B2, C2, Q2) {
|
|
59
|
+
const t2 = [], i2 = /* @__PURE__ */ new Set();
|
|
60
|
+
let E2 = B2.x, e2 = B2.y;
|
|
61
|
+
const o2 = E2, n2 = e2;
|
|
62
|
+
let a2 = -1;
|
|
63
|
+
A2[n2 * I2 + o2] = Q2;
|
|
64
|
+
let s2 = 0;
|
|
65
|
+
const c2 = I2 * g2, r2 = [0, 1, 1, 1, 0, -1, -1, -1], h2 = [-1, -1, 0, 1, 1, 1, 0, -1];
|
|
66
|
+
for (; s2++ < c2; ) {
|
|
67
|
+
let B3;
|
|
68
|
+
if (-1 === a2) {
|
|
69
|
+
let Q3 = false;
|
|
70
|
+
for (let t3 = 0; t3 < 8; t3++) {
|
|
71
|
+
B3 = C2 + t3 & 7;
|
|
72
|
+
const i3 = E2 + r2[B3], o3 = e2 + h2[B3];
|
|
73
|
+
if (i3 >= 0 && i3 < I2 && o3 >= 0 && o3 < g2 && A2[o3 * I2 + i3] > 0) {
|
|
74
|
+
Q3 = true;
|
|
75
|
+
break;
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
if (!Q3) return null;
|
|
79
|
+
} else B3 = a2 + 2 & 7;
|
|
80
|
+
let s3 = -1, c3 = -1;
|
|
81
|
+
for (let C3 = 0; C3 < 8; C3++) {
|
|
82
|
+
const Q3 = B3 + C3 & 7, t3 = E2 + r2[Q3], i3 = e2 + h2[Q3];
|
|
83
|
+
if (t3 >= 0 && t3 < I2 && i3 >= 0 && i3 < g2 && A2[i3 * I2 + t3] > 0) {
|
|
84
|
+
s3 = t3, c3 = i3, a2 = Q3 + 4 & 7;
|
|
85
|
+
break;
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
if (-1 === s3) {
|
|
89
|
+
0 === t2.length && t2.push({ x: E2, y: e2 });
|
|
90
|
+
break;
|
|
91
|
+
}
|
|
92
|
+
const l2 = e2 * I2 + E2;
|
|
93
|
+
if (i2.has(l2)) return t2;
|
|
94
|
+
t2.push({ x: E2, y: e2 }), i2.add(l2);
|
|
95
|
+
const y2 = c3 * I2 + s3;
|
|
96
|
+
if (1 === A2[y2] && (A2[y2] = Q2), E2 = s3, e2 = c3, E2 === o2 && e2 === n2) break;
|
|
97
|
+
}
|
|
98
|
+
return s2 >= c2 ? null : t2;
|
|
99
|
+
}
|
|
100
|
+
function Q(A2) {
|
|
101
|
+
const I2 = A2.length;
|
|
102
|
+
if (I2 <= 2) return A2;
|
|
103
|
+
const g2 = [], B2 = A2[I2 - 1], C2 = A2[0];
|
|
104
|
+
let Q2 = B2, t2 = C2, i2 = A2[1], E2 = t2.x - Q2.x, e2 = t2.y - Q2.y, o2 = i2.x - t2.x, n2 = i2.y - t2.y;
|
|
105
|
+
E2 * n2 !== e2 * o2 && g2.push(t2);
|
|
106
|
+
for (let a2 = 1; a2 < I2 - 1; a2++) Q2 = A2[a2 - 1], t2 = A2[a2], i2 = A2[a2 + 1], E2 = t2.x - Q2.x, e2 = t2.y - Q2.y, o2 = i2.x - t2.x, n2 = i2.y - t2.y, E2 * n2 !== e2 * o2 && g2.push(t2);
|
|
107
|
+
if (Q2 = A2[I2 - 2], t2 = B2, i2 = C2, E2 = t2.x - Q2.x, e2 = t2.y - Q2.y, o2 = i2.x - t2.x, n2 = i2.y - t2.y, E2 * n2 !== e2 * o2 && g2.push(t2), 0 === g2.length) {
|
|
108
|
+
if (1 === I2) return [A2[0]];
|
|
109
|
+
if (2 === I2) return A2;
|
|
110
|
+
let g3 = 0, B3 = 1;
|
|
111
|
+
const Q3 = C2.x, t3 = C2.y;
|
|
112
|
+
for (let C3 = 1; C3 < I2; C3++) {
|
|
113
|
+
const I3 = A2[C3], i3 = I3.x - Q3, E3 = I3.y - t3, e3 = i3 * i3 + E3 * E3;
|
|
114
|
+
e3 > g3 && (g3 = e3, B3 = C3);
|
|
115
|
+
}
|
|
116
|
+
return [C2, A2[B3]];
|
|
117
|
+
}
|
|
118
|
+
return g2;
|
|
119
|
+
}
|
|
120
|
+
function t(A2, I2 = 1) {
|
|
121
|
+
if (A2.length <= 2) return A2;
|
|
122
|
+
let g2 = 0, B2 = 0;
|
|
123
|
+
const C2 = A2[0], Q2 = A2[A2.length - 1];
|
|
124
|
+
for (let t2 = 1; t2 < A2.length - 1; t2++) {
|
|
125
|
+
const I3 = i(A2[t2], C2, Q2);
|
|
126
|
+
I3 > g2 && (g2 = I3, B2 = t2);
|
|
127
|
+
}
|
|
128
|
+
if (g2 > I2) {
|
|
129
|
+
const g3 = t(A2.slice(0, B2 + 1), I2), C3 = t(A2.slice(B2), I2);
|
|
130
|
+
return g3.slice(0, -1).concat(C3);
|
|
131
|
+
}
|
|
132
|
+
return [C2, Q2];
|
|
133
|
+
}
|
|
134
|
+
function i(A2, I2, g2) {
|
|
135
|
+
const B2 = g2.x - I2.x, C2 = g2.y - I2.y, Q2 = B2 * B2 + C2 * C2;
|
|
136
|
+
if (0 === Q2) return Math.sqrt(Math.pow(A2.x - I2.x, 2) + Math.pow(A2.y - I2.y, 2));
|
|
137
|
+
const t2 = ((A2.x - I2.x) * B2 + (A2.y - I2.y) * C2) / Q2;
|
|
138
|
+
let i2, E2;
|
|
139
|
+
t2 < 0 ? (i2 = I2.x, E2 = I2.y) : t2 > 1 ? (i2 = g2.x, E2 = g2.y) : (i2 = I2.x + t2 * B2, E2 = I2.y + t2 * C2);
|
|
140
|
+
const e2 = A2.x - i2, o2 = A2.y - E2;
|
|
141
|
+
return Math.sqrt(e2 * e2 + o2 * o2);
|
|
142
|
+
}
|
|
143
|
+
function E(A2, I2 = 0.02) {
|
|
144
|
+
return t(A2, I2 * (function(A3) {
|
|
145
|
+
let I3 = 0;
|
|
146
|
+
const g2 = A3.length;
|
|
147
|
+
if (g2 < 2) return 0;
|
|
148
|
+
for (let B2 = 0; B2 < g2; B2++) {
|
|
149
|
+
const C2 = (B2 + 1) % g2, Q2 = A3[B2].x - A3[C2].x, t2 = A3[B2].y - A3[C2].y;
|
|
150
|
+
I3 += Math.sqrt(Q2 * Q2 + t2 * t2);
|
|
151
|
+
}
|
|
152
|
+
return I3;
|
|
153
|
+
})(A2));
|
|
154
|
+
}
|
|
155
|
+
function e(A2, I2) {
|
|
156
|
+
return Math.hypot(I2.x - A2.x, I2.y - A2.y);
|
|
157
|
+
}
|
|
158
|
+
function o(A2) {
|
|
159
|
+
let I2 = 0, g2 = 0;
|
|
160
|
+
for (const B2 of A2) I2 += B2.x, g2 += B2.y;
|
|
161
|
+
return { x: I2 / A2.length, y: g2 / A2.length };
|
|
162
|
+
}
|
|
163
|
+
function n(A2, I2 = {}) {
|
|
164
|
+
if (!A2 || !A2.points || A2.points.length < 4) return null;
|
|
165
|
+
const g2 = I2.epsilon || 0.02, B2 = (function(A3, I3) {
|
|
166
|
+
if (!A3 || A3.length < 4) return null;
|
|
167
|
+
const g3 = [I3, 1.3 * I3, 1.6 * I3, 2 * I3], B3 = /* @__PURE__ */ new Set();
|
|
168
|
+
for (const C3 of g3) {
|
|
169
|
+
const I4 = Math.min(0.12, C3), g4 = I4.toFixed(4);
|
|
170
|
+
if (B3.has(g4)) continue;
|
|
171
|
+
B3.add(g4);
|
|
172
|
+
const Q2 = a(E(A3, I4));
|
|
173
|
+
if (Q2 && 4 === Q2.length) return Q2;
|
|
174
|
+
}
|
|
175
|
+
return null;
|
|
176
|
+
})(A2.points, g2);
|
|
177
|
+
let C2;
|
|
178
|
+
return B2 && 4 === B2.length ? C2 = (function(A3) {
|
|
179
|
+
if (4 !== A3.length) return null;
|
|
180
|
+
const I3 = o(A3), g3 = [...A3].sort((A4, g4) => Math.atan2(A4.y - I3.y, A4.x - I3.x) - Math.atan2(g4.y - I3.y, g4.x - I3.x));
|
|
181
|
+
let B3 = 1 / 0, C3 = 0;
|
|
182
|
+
for (let t2 = 0; t2 < 4; t2++) {
|
|
183
|
+
const A4 = g3[t2].x + g3[t2].y;
|
|
184
|
+
A4 < B3 && (B3 = A4, C3 = t2);
|
|
185
|
+
}
|
|
186
|
+
const Q2 = [g3[C3], g3[(C3 + 1) % 4], g3[(C3 + 2) % 4], g3[(C3 + 3) % 4]];
|
|
187
|
+
return { topLeft: Q2[0], topRight: Q2[1], bottomRight: Q2[2], bottomLeft: Q2[3] };
|
|
188
|
+
})(B2) : (C2 = (function(A3) {
|
|
189
|
+
if (!A3 || A3.length < 4) return null;
|
|
190
|
+
const I3 = o(A3);
|
|
191
|
+
let g3 = null, B3 = null, C3 = null, Q2 = null, t2 = 0, i2 = 0, E2 = 0, n2 = 0;
|
|
192
|
+
for (const o2 of A3) {
|
|
193
|
+
const A4 = e(o2, I3);
|
|
194
|
+
o2.x < I3.x && o2.y < I3.y ? A4 > t2 && (g3 = o2, t2 = A4) : o2.x > I3.x && o2.y < I3.y ? A4 > i2 && (B3 = o2, i2 = A4) : o2.x > I3.x && o2.y > I3.y ? A4 > E2 && (C3 = o2, E2 = A4) : o2.x < I3.x && o2.y > I3.y && A4 > n2 && (Q2 = o2, n2 = A4);
|
|
195
|
+
}
|
|
196
|
+
return g3 && B3 && C3 && Q2 ? { topLeft: g3, topRight: B3, bottomRight: C3, bottomLeft: Q2 } : null;
|
|
197
|
+
})(A2.points), C2 && C2.topLeft && C2.topRight && C2.bottomRight && C2.bottomLeft || (C2 = (function(A3) {
|
|
198
|
+
if (!A3 || 0 === A3.length) return null;
|
|
199
|
+
let I3 = A3[0], g3 = A3[0], B3 = A3[0], C3 = A3[0], Q2 = I3.x + I3.y, t2 = g3.x - g3.y, i2 = B3.x + B3.y, E2 = C3.x - C3.y;
|
|
200
|
+
for (let e2 = 1; e2 < A3.length; e2++) {
|
|
201
|
+
const o2 = A3[e2], n2 = o2.x + o2.y, a2 = o2.x - o2.y;
|
|
202
|
+
n2 < Q2 && (Q2 = n2, I3 = o2), n2 > i2 && (i2 = n2, B3 = o2), a2 > t2 && (t2 = a2, g3 = o2), a2 < E2 && (E2 = a2, C3 = o2);
|
|
203
|
+
}
|
|
204
|
+
return { topLeft: I3, topRight: g3, bottomRight: B3, bottomLeft: C3 };
|
|
205
|
+
})(A2.points))), C2 && C2.topLeft && C2.topRight && C2.bottomRight && C2.bottomLeft ? C2 : null;
|
|
206
|
+
}
|
|
207
|
+
function a(A2) {
|
|
208
|
+
if (!A2 || A2.length < 4) return null;
|
|
209
|
+
if (4 === A2.length) return A2;
|
|
210
|
+
if (A2.length > 8) return null;
|
|
211
|
+
let I2 = (function(A3, I3) {
|
|
212
|
+
if (!A3 || 0 === A3.length) return [];
|
|
213
|
+
const g2 = [];
|
|
214
|
+
for (const B2 of A3) (0 === g2.length || e(B2, g2[g2.length - 1]) > I3) && g2.push(B2);
|
|
215
|
+
g2.length > 2 && e(g2[0], g2[g2.length - 1]) <= I3 && g2.pop();
|
|
216
|
+
return g2;
|
|
217
|
+
})(A2, 6);
|
|
218
|
+
return 4 === I2.length ? I2 : (I2.length, null);
|
|
219
|
+
}
|
|
220
|
+
var s = null;
|
|
221
|
+
function c() {
|
|
222
|
+
return null !== s && 0 !== s.byteLength || (s = new Uint8Array(A.memory.buffer)), s;
|
|
223
|
+
}
|
|
224
|
+
var r = 0;
|
|
225
|
+
function h(A2, I2) {
|
|
226
|
+
const g2 = I2(1 * A2.length, 1) >>> 0;
|
|
227
|
+
return c().set(A2, g2 / 1), r = A2.length, g2;
|
|
228
|
+
}
|
|
229
|
+
function l(A2, I2) {
|
|
230
|
+
return A2 >>>= 0, c().subarray(A2 / 1, A2 / 1 + I2);
|
|
231
|
+
}
|
|
232
|
+
var y = null;
|
|
233
|
+
function D() {
|
|
234
|
+
return null !== y && 0 !== y.byteLength || (y = new Float32Array(A.memory.buffer)), y;
|
|
235
|
+
}
|
|
236
|
+
function w(I2, g2, B2, C2, Q2) {
|
|
237
|
+
const t2 = (function(A2, I3) {
|
|
238
|
+
const g3 = I3(4 * A2.length, 4) >>> 0;
|
|
239
|
+
return D().set(A2, g3 / 4), r = A2.length, g3;
|
|
240
|
+
})(I2, A.__wbindgen_malloc), i2 = r, E2 = A.hysteresis_thresholding(t2, i2, g2, B2, C2, Q2);
|
|
241
|
+
var e2 = l(E2[0], E2[1]).slice();
|
|
242
|
+
return A.__wbindgen_free(E2[0], 1 * E2[1], 1), e2;
|
|
243
|
+
}
|
|
244
|
+
var d = null;
|
|
245
|
+
function f(I2, g2) {
|
|
246
|
+
const B2 = g2(2 * I2.length, 2) >>> 0;
|
|
247
|
+
return (null !== d && 0 !== d.byteLength || (d = new Uint16Array(A.memory.buffer)), d).set(I2, B2 / 2), r = I2.length, B2;
|
|
248
|
+
}
|
|
249
|
+
function u(I2, g2, B2, C2, Q2) {
|
|
250
|
+
const t2 = f(I2, A.__wbindgen_malloc), i2 = r, E2 = f(g2, A.__wbindgen_malloc), e2 = r, o2 = A.non_maximum_suppression(t2, i2, E2, e2, B2, C2, Q2);
|
|
251
|
+
var n2, a2, s2 = (n2 = o2[0], a2 = o2[1], n2 >>>= 0, D().subarray(n2 / 4, n2 / 4 + a2)).slice();
|
|
252
|
+
return A.__wbindgen_free(o2[0], 4 * o2[1], 4), s2;
|
|
253
|
+
}
|
|
254
|
+
async function m(I2) {
|
|
255
|
+
if (void 0 !== A) return A;
|
|
256
|
+
if (void 0 !== I2 && Object.getPrototypeOf(I2) === Object.prototype && ({ module_or_path: I2 } = I2), void 0 === I2) throw new Error("scanic: WASM module bytes must be passed to init().");
|
|
257
|
+
const g2 = (function() {
|
|
258
|
+
const I3 = { wbg: {} };
|
|
259
|
+
return I3.wbg.__wbindgen_init_externref_table = function() {
|
|
260
|
+
const I4 = A.__wbindgen_export_0, g3 = I4.grow(4);
|
|
261
|
+
I4.set(0, void 0), I4.set(g3 + 0, void 0), I4.set(g3 + 1, null), I4.set(g3 + 2, true), I4.set(g3 + 3, false);
|
|
262
|
+
}, I3;
|
|
263
|
+
})();
|
|
264
|
+
("string" == typeof I2 || "function" == typeof Request && I2 instanceof Request || "function" == typeof URL && I2 instanceof URL) && (I2 = fetch(I2));
|
|
265
|
+
const { instance: B2, module: C2 } = await (async function(A2, I3) {
|
|
266
|
+
if ("function" == typeof Response && A2 instanceof Response) {
|
|
267
|
+
if ("function" == typeof WebAssembly.instantiateStreaming) try {
|
|
268
|
+
return await WebAssembly.instantiateStreaming(A2, I3);
|
|
269
|
+
} catch (g3) {
|
|
270
|
+
if ("application/wasm" == A2.headers.get("Content-Type")) throw g3;
|
|
271
|
+
}
|
|
272
|
+
const B3 = await A2.arrayBuffer();
|
|
273
|
+
return await WebAssembly.instantiate(B3, I3);
|
|
274
|
+
}
|
|
275
|
+
{
|
|
276
|
+
const g3 = await WebAssembly.instantiate(A2, I3);
|
|
277
|
+
return g3 instanceof WebAssembly.Instance ? { instance: g3, module: A2 } : g3;
|
|
278
|
+
}
|
|
279
|
+
})(await I2, g2);
|
|
280
|
+
return (function(I3, g3) {
|
|
281
|
+
return A = I3.exports, m.__wbindgen_wasm_module = g3, y = null, d = null, s = null, A.__wbindgen_start(), A;
|
|
282
|
+
})(B2, C2);
|
|
283
|
+
}
|
|
284
|
+
var N = null;
|
|
285
|
+
var R = false;
|
|
286
|
+
var p = null;
|
|
287
|
+
function F(A2) {
|
|
288
|
+
if ("function" == typeof atob) {
|
|
289
|
+
const I2 = atob(A2), g2 = new Uint8Array(I2.length);
|
|
290
|
+
for (let A3 = 0; A3 < I2.length; A3++) g2[A3] = I2.charCodeAt(A3);
|
|
291
|
+
return g2;
|
|
292
|
+
}
|
|
293
|
+
return Uint8Array.from(Buffer.from(A2, "base64"));
|
|
294
|
+
}
|
|
295
|
+
async function J() {
|
|
296
|
+
if (!(function() {
|
|
297
|
+
if (null !== p) return p;
|
|
298
|
+
let A2 = false;
|
|
299
|
+
if ("object" == typeof WebAssembly && "function" == typeof WebAssembly.validate) {
|
|
300
|
+
const I2 = new Uint8Array([0, 97, 115, 109, 1, 0, 0, 0, 1, 5, 1, 96, 0, 1, 123, 3, 2, 1, 0, 10, 10, 1, 8, 0, 65, 0, 253, 15, 253, 98, 11]), g2 = new Uint8Array([0, 97, 115, 109, 1, 0, 0, 0, 1, 5, 1, 96, 0, 1, 111, 3, 2, 1, 0, 10, 6, 1, 4, 0, 208, 111, 11]);
|
|
301
|
+
try {
|
|
302
|
+
A2 = WebAssembly.validate(I2) && WebAssembly.validate(g2);
|
|
303
|
+
} catch {
|
|
304
|
+
A2 = false;
|
|
305
|
+
}
|
|
306
|
+
}
|
|
307
|
+
return p = A2, A2;
|
|
308
|
+
})()) throw new Error("scanic: WebAssembly features required by the WASM module (reference-types, SIMD) are unavailable in this engine; using the JavaScript fallback.");
|
|
309
|
+
return await m({ module_or_path: F("AGFzbQEAAAABtQEWYAJ/fwBgAAJ/f2ACf38Bf2ADf39/AX9gAX8AYAN/f38AYAV/f39/fwBgBH9/f38Bf2AGf39/f319An9/YAAAYAF/AX9gB39/f39/f38AYAh/f39/f39/fwBgB39/f39/f30AYAZ/f39/f38AYAR/f39/AGALf39/f319f31/f38Cf39gB39/f39/f38Cf39gBn9/f39/fQJ/f2AFf39/f38Cf39gBH9/f38Cf39gAn9/An9/AicBA3diZx9fX3diaW5kZ2VuX2luaXRfZXh0ZXJucmVmX3RhYmxlAAkDOzoKCwwNBgQDAAIAAAICAAYADgUCBAQEAAUDAA8FEAcEERIICAITABQVBAQAAAAEBQMHAgAAAgICAAAABAkCcAETE28AgAEFAwEAEQYJAX8BQYCAwAALB4QCDQZtZW1vcnkCAARibHVyACESZWRnZV9tYXBfdG9fYmluYXJ5ACgXaHlzdGVyZXNpc190aHJlc2hvbGRpbmcAIh5oeXN0ZXJlc2lzX3RocmVzaG9sZGluZ19iaW5hcnkAIxNjYWxjdWxhdGVfZ3JhZGllbnRzACcGZGlsYXRlACUYY2FubnlfZWRnZV9kZXRlY3Rvcl9mdWxsAB0Xbm9uX21heGltdW1fc3VwcHJlc3Npb24AIBNfX3diaW5kZ2VuX2V4cG9ydF8wAQERX193YmluZGdlbl9tYWxsb2MAJA9fX3diaW5kZ2VuX2ZyZWUALxBfX3diaW5kZ2VuX3N0YXJ0AAAJGAEAQQELEi4XDCoZDTcyGjM4KRMOEDosKwwBAgrGiwI6ySUCCX8BfiMAQRBrIggkAAJAAkACQAJAAkAgAEH1AU8EQCAAQcz/e0sEQEEAIQAMBgsgAEELaiICQXhxIQVBvJvAACgCACIJRQ0EQR8hBkEAIAVrIQMgAEH0//8HTQRAIAVBJiACQQh2ZyIAa3ZBAXEgAEEBdGtBPmohBgsgBkECdEGgmMAAaigCACICRQRAQQAhAAwCCyAFQRkgBkEBdmtBACAGQR9HG3QhBEEAIQADQAJAIAIoAgRBeHEiByAFSQ0AIAcgBWsiByADTw0AIAIhASAHIgMNAEEAIQMgASEADAQLIAIoAhQiByAAIAcgAiAEQR12QQRxaigCECICRxsgACAHGyEAIARBAXQhBCACDQALDAELAkACQAJAAkACQEG4m8AAKAIAIgRBECAAQQtqQfgDcSAAQQtJGyIFQQN2IgB2IgFBA3EEQCABQX9zQQFxIABqIgdBA3QiAUGwmcAAaiIAIAFBuJnAAGooAgAiAigCCCIDRg0BIAMgADYCDCAAIAM2AggMAgsgBUHAm8AAKAIATQ0IIAENAkG8m8AAKAIAIgBFDQggAGhBAnRBoJjAAGooAgAiAigCBEF4cSAFayEDIAIhAQNAAkAgASgCECIADQAgASgCFCIADQAgAigCGCEGAkACQCACIAIoAgwiAEYEQCACQRRBECACKAIUIgAbaigCACIBDQFBACEADAILIAIoAggiASAANgIMIAAgATYCCAwBCyACQRRqIAJBEGogABshBANAIAQhByABIgBBFGogAEEQaiAAKAIUIgEbIQQgAEEUQRAgARtqKAIAIgENAAsgB0EANgIACyAGRQ0GAkAgAigCHEECdEGgmMAAaiIBKAIAIAJHBEAgAiAGKAIQRwRAIAYgADYCFCAADQIMCQsgBiAANgIQIAANAQwICyABIAA2AgAgAEUNBgsgACAGNgIYIAIoAhAiAQRAIAAgATYCECABIAA2AhgLIAIoAhQiAUUNBiAAIAE2AhQgASAANgIYDAYLIAAoAgRBeHEgBWsiASADIAEgA0kiARshAyAAIAIgARshAiAAIQEMAAsAC0G4m8AAIARBfiAHd3E2AgALIAJBCGohACACIAFBA3I2AgQgASACaiIBIAEoAgRBAXI2AgQMBwsCQEECIAB0IgJBACACa3IgASAAdHFoIgdBA3QiAUGwmcAAaiICIAFBuJnAAGooAgAiACgCCCIDRwRAIAMgAjYCDCACIAM2AggMAQtBuJvAACAEQX4gB3dxNgIACyAAIAVBA3I2AgQgACAFaiIGIAEgBWsiB0EBcjYCBCAAIAFqIAc2AgBBwJvAACgCACICBEBByJvAACgCACEBAkBBuJvAACgCACIEQQEgAkEDdnQiA3FFBEBBuJvAACADIARyNgIAIAJBeHFBsJnAAGoiAyEEDAELIAJBeHEiAkGwmcAAaiEEIAJBuJnAAGooAgAhAwsgBCABNgIIIAMgATYCDCABIAQ2AgwgASADNgIICyAAQQhqIQBByJvAACAGNgIAQcCbwAAgBzYCAAwGC0G8m8AAQbybwAAoAgBBfiACKAIcd3E2AgALAkACQCADQRBPBEAgAiAFQQNyNgIEIAIgBWoiByADQQFyNgIEIAMgB2ogAzYCAEHAm8AAKAIAIgFFDQFByJvAACgCACEAAkBBuJvAACgCACIEQQEgAUEDdnQiBnFFBEBBuJvAACAEIAZyNgIAIAFBeHFBsJnAAGoiBCEBDAELIAFBeHEiBEGwmcAAaiEBIARBuJnAAGooAgAhBAsgASAANgIIIAQgADYCDCAAIAE2AgwgACAENgIIDAELIAIgAyAFaiIAQQNyNgIEIAAgAmoiACAAKAIEQQFyNgIEDAELQcibwAAgBzYCAEHAm8AAIAM2AgALIAJBCGoiAEUNAwwECyAAIAFyRQRAQQAhAUECIAZ0IgBBACAAa3IgCXEiAEUNAyAAaEECdEGgmMAAaigCACEACyAARQ0BCwNAIAMgACgCBEF4cSICIAVrIgQgAyADIARLIgQbIAIgBUkiAhshAyABIAAgASAEGyACGyEBIAAoAhAiAgR/IAIFIAAoAhQLIgANAAsLIAFFDQAgBUHAm8AAKAIAIgBNIAMgACAFa09xDQAgASgCGCEGAkACQCABIAEoAgwiAEYEQCABQRRBECABKAIUIgAbaigCACICDQFBACEADAILIAEoAggiAiAANgIMIAAgAjYCCAwBCyABQRRqIAFBEGogABshBANAIAQhByACIgBBFGogAEEQaiAAKAIUIgIbIQQgAEEUQRAgAhtqKAIAIgINAAsgB0EANgIACwJAIAZFDQACQAJAIAEoAhxBAnRBoJjAAGoiAigCACABRwRAIAEgBigCEEcEQCAGIAA2AhQgAA0CDAQLIAYgADYCECAADQEMAwsgAiAANgIAIABFDQELIAAgBjYCGCABKAIQIgIEQCAAIAI2AhAgAiAANgIYCyABKAIUIgJFDQEgACACNgIUIAIgADYCGAwBC0G8m8AAQbybwAAoAgBBfiABKAIcd3E2AgALAkAgA0EQTwRAIAEgBUEDcjYCBCABIAVqIgAgA0EBcjYCBCAAIANqIAM2AgAgA0GAAk8EQCAAIAMQCwwCCwJAQbibwAAoAgAiAkEBIANBA3Z0IgRxRQRAQbibwAAgAiAEcjYCACADQfgBcUGwmcAAaiIDIQIMAQsgA0H4AXEiBEGwmcAAaiECIARBuJnAAGooAgAhAwsgAiAANgIIIAMgADYCDCAAIAI2AgwgACADNgIIDAELIAEgAyAFaiIAQQNyNgIEIAAgAWoiACAAKAIEQQFyNgIECyABQQhqIgANAQsCQAJAAkACQAJAIAVBwJvAACgCACIBSwRAIAVBxJvAACgCACIATwRAIAhBBGohAAJ/IAVBr4AEakGAgHxxIgFBEHYgAUH//wNxQQBHaiIBQAAiBEF/RgRAQQAhAUEADAELIAFBEHQiAkEQayACIARBEHQiAUEAIAJrRhsLIQIgAEEANgIIIAAgAjYCBCAAIAE2AgAgCCgCBCIBRQRAQQAhAAwICyAIKAIMIQdB0JvAACAIKAIIIgRB0JvAACgCAGoiADYCAEHUm8AAIABB1JvAACgCACICIAAgAksbNgIAAkACQEHMm8AAKAIAIgIEQEGgmcAAIQADQCABIAAoAgAiAyAAKAIEIgZqRg0CIAAoAggiAA0ACwwCC0Hcm8AAKAIAIgBBACAAIAFNG0UEQEHcm8AAIAE2AgALQeCbwABB/x82AgBBrJnAACAHNgIAQaSZwAAgBDYCAEGgmcAAIAE2AgBBvJnAAEGwmcAANgIAQcSZwABBuJnAADYCAEG4mcAAQbCZwAA2AgBBzJnAAEHAmcAANgIAQcCZwABBuJnAADYCAEHUmcAAQciZwAA2AgBByJnAAEHAmcAANgIAQdyZwABB0JnAADYCAEHQmcAAQciZwAA2AgBB5JnAAEHYmcAANgIAQdiZwABB0JnAADYCAEHsmcAAQeCZwAA2AgBB4JnAAEHYmcAANgIAQfSZwABB6JnAADYCAEHomcAAQeCZwAA2AgBB/JnAAEHwmcAANgIAQfCZwABB6JnAADYCAEH4mcAAQfCZwAA2AgBBhJrAAEH4mcAANgIAQYCawABB+JnAADYCAEGMmsAAQYCawAA2AgBBiJrAAEGAmsAANgIAQZSawABBiJrAADYCAEGQmsAAQYiawAA2AgBBnJrAAEGQmsAANgIAQZiawABBkJrAADYCAEGkmsAAQZiawAA2AgBBoJrAAEGYmsAANgIAQayawABBoJrAADYCAEGomsAAQaCawAA2AgBBtJrAAEGomsAANgIAQbCawABBqJrAADYCAEG8msAAQbCawAA2AgBBxJrAAEG4msAANgIAQbiawABBsJrAADYCAEHMmsAAQcCawAA2AgBBwJrAAEG4msAANgIAQdSawABByJrAADYCAEHImsAAQcCawAA2AgBB3JrAAEHQmsAANgIAQdCawABByJrAADYCAEHkmsAAQdiawAA2AgBB2JrAAEHQmsAANgIAQeyawABB4JrAADYCAEHgmsAAQdiawAA2AgBB9JrAAEHomsAANgIAQeiawABB4JrAADYCAEH8msAAQfCawAA2AgBB8JrAAEHomsAANgIAQYSbwABB+JrAADYCAEH4msAAQfCawAA2AgBBjJvAAEGAm8AANgIAQYCbwABB+JrAADYCAEGUm8AAQYibwAA2AgBBiJvAAEGAm8AANgIAQZybwABBkJvAADYCAEGQm8AAQYibwAA2AgBBpJvAAEGYm8AANgIAQZibwABBkJvAADYCAEGsm8AAQaCbwAA2AgBBoJvAAEGYm8AANgIAQbSbwABBqJvAADYCAEGom8AAQaCbwAA2AgBBzJvAACABQQ9qQXhxIgBBCGsiAjYCAEGwm8AAQaibwAA2AgBBxJvAACAEQShrIgQgASAAa2pBCGoiADYCACACIABBAXI2AgQgASAEakEoNgIEQdibwABBgICAATYCAAwICyACIANJIAEgAk1yDQAgACgCDCIDQQFxDQAgA0EBdiAHRg0DC0Hcm8AAQdybwAAoAgAiACABIAAgAUkbNgIAIAEgBGohA0GgmcAAIQACQAJAA0AgAyAAKAIAIgZHBEAgACgCCCIADQEMAgsLIAAoAgwiA0EBcQ0AIANBAXYgB0YNAQtBoJnAACEAA0ACQCACIAAoAgAiA08EQCACIAMgACgCBGoiBkkNAQsgACgCCCEADAELC0HMm8AAIAFBD2pBeHEiAEEIayIDNgIAQcSbwAAgBEEoayIJIAEgAGtqQQhqIgA2AgAgAyAAQQFyNgIEIAEgCWpBKDYCBEHYm8AAQYCAgAE2AgAgAiAGQSBrQXhxQQhrIgAgACACQRBqSRsiA0EbNgIEQaCZwAApAgAhCiADQRBqQaiZwAApAgA3AgAgA0EIaiIAIAo3AgBBrJnAACAHNgIAQaSZwAAgBDYCAEGgmcAAIAE2AgBBqJnAACAANgIAIANBHGohAANAIABBBzYCACAAQQRqIgAgBkkNAAsgAiADRg0HIAMgAygCBEF+cTYCBCACIAMgAmsiAEEBcjYCBCADIAA2AgAgAEGAAk8EQCACIAAQCwwICwJAQbibwAAoAgAiAUEBIABBA3Z0IgRxRQRAQbibwAAgASAEcjYCACAAQfgBcUGwmcAAaiIAIQEMAQsgAEH4AXEiAEGwmcAAaiEBIABBuJnAAGooAgAhAAsgASACNgIIIAAgAjYCDCACIAE2AgwgAiAANgIIDAcLIAAgATYCACAAIAAoAgQgBGo2AgQgAUEPakF4cUEIayIEIAVBA3I2AgQgBkEPakF4cUEIayIDIAQgBWoiAGshBSADQcybwAAoAgBGDQMgA0HIm8AAKAIARg0EIAMoAgQiAkEDcUEBRgRAIAMgAkF4cSIBEAogASAFaiEFIAEgA2oiAygCBCECCyADIAJBfnE2AgQgACAFQQFyNgIEIAAgBWogBTYCACAFQYACTwRAIAAgBRALDAYLAkBBuJvAACgCACIBQQEgBUEDdnQiAnFFBEBBuJvAACABIAJyNgIAIAVB+AFxQbCZwABqIgUhAwwBCyAFQfgBcSIBQbCZwABqIQMgAUG4mcAAaigCACEFCyADIAA2AgggBSAANgIMIAAgAzYCDCAAIAU2AggMBQtBxJvAACAAIAVrIgE2AgBBzJvAAEHMm8AAKAIAIgAgBWoiAjYCACACIAFBAXI2AgQgACAFQQNyNgIEIABBCGohAAwGC0HIm8AAKAIAIQACQCABIAVrIgJBD00EQEHIm8AAQQA2AgBBwJvAAEEANgIAIAAgAUEDcjYCBCAAIAFqIgEgASgCBEEBcjYCBAwBC0HAm8AAIAI2AgBByJvAACAAIAVqIgQ2AgAgBCACQQFyNgIEIAAgAWogAjYCACAAIAVBA3I2AgQLIABBCGohAAwFCyAAIAQgBmo2AgRBzJvAAEHMm8AAKAIAIgBBD2pBeHEiAUEIayICNgIAQcSbwABBxJvAACgCACAEaiIEIAAgAWtqQQhqIgE2AgAgAiABQQFyNgIEIAAgBGpBKDYCBEHYm8AAQYCAgAE2AgAMAwtBzJvAACAANgIAQcSbwABBxJvAACgCACAFaiIBNgIAIAAgAUEBcjYCBAwBC0HIm8AAIAA2AgBBwJvAAEHAm8AAKAIAIAVqIgE2AgAgACABQQFyNgIEIAAgAWogATYCAAsgBEEIaiEADAELQQAhAEHEm8AAKAIAIgEgBU0NAEHEm8AAIAEgBWsiATYCAEHMm8AAQcybwAAoAgAiACAFaiICNgIAIAIgAUEBcjYCBCAAIAVBA3I2AgQgAEEIaiEACyAIQRBqJAAgAAuGEgIlfwF7AkACQAJAAkAgAiADbCIOQQBIDQBBASERIA4EQEEBIQcgDkEBEDYiEUUNAQsgBEEBdiESAkACQAJAIANFDQAgAkUNBCACQQFrIQwgBEUEQEEAIQEgESEAA0BBACEIIA4gAiAKbGsiB0EAIAcgDk0bIgcgDCAHIAxJG0EBaiIHQRFPBEAgByAHQQ9xIgdBECAHGyIHayEIIAkgDiAJIA5LGyABaiILIAwgCyAMSRsgB2tBAWohCyAAIQcDQCAH/QwAAAAAAAAAAAAAAAAAAAAA/QsAACAHQRBqIQcgC0EQayILDQALCyAKQQFqIQogCSARaiELA0AgCCAJaiIHIA5PDQQgCCALakEAOgAAIAIgCEEBaiIIRw0ACyABIAJrIQEgAiAJaiEJIAAgAmohACADIApHDQALDAELIAxBAEgNBkEAIBJrIQoDQCACIBRsIRAgFEEBaiEUQQAhDyAKIQ0DQCAPQQFqIA0hByAEIQlBACEIA0AgByAMIAcgDEkbQQAgB0EAThsgEGoiEyABTw0FIAAgE2otAAAiEyAIQf8BcSIIIAggE0kbIQggB0EBaiEHIAlBAWsiCQ0ACyAPIBBqIgcgDk8NAyAHIBFqIAg6AAAgDUEBaiENIg8gAkcNAAsgAyAURw0ACwsgAyASayIAQQAgACADTRshDCACQQR2ISAgBEECSQ0EIAJFBEBBACEgDAULAkACQCADQQFrIgtBAE4EQEEAIBJrIQBBACENA0AgAiANbCEQIA1BAWohDUEAIQoDQCAKQQFqIAAhByAEIQlBACEIA0AgByALIAcgC0kbQQAgB0EAThsgAmwgCmoiDyAOTw0EIA8gEWotAAAiDyAIQf8BcSIIIAggD0kbIQggB0EBaiEHIAlBAWsiCQ0ACyAKIBBqIgcgBk8NBCAFIAdqIAg6AAAiCiACRw0ACyAAQQFqIQAgDSASRw0ACwwHCwwHCyAPIA5BzIzAABAYAAsgByAGQbyMwAAQGAALIAcgDkHcjMAAEBgACyATIAFB7IzAABAYAAsgByAOEC0ACyADIBJrIgBBACAAIANNGyEMCyAMIBJLBEBBACACIBJsIiEgAkFwcSIAaiIZayEaIAUgGWohGyAAQX9zIAIgAEEBciIBIAEgAkkbaiEWIAIgEWohHCAMIBJrISMgBSAhaiEkIBEgAkEBdGohHSARIAJBA2xqIRQgESACQQJ0IiVqIR4gBEEBayIBQXxxISYgAUEDcSEiIAJBEEkhJyAEQQJrQQNJISggGSEXIAAhASASIRMDQCACIBhsIRUCQCAnDQAgBEECTwRAIAUgAiATbGohKSARIBMgEmsgAmxqISpBACEPIBEhDSAcIQkgHSEQIBQhCyAeIQoDQCAqIA9BBHQiK2r9AAAAISxBASEHIChFBEBBACEHQQAhCANAICwgByAJav0AAAD9eSAHIBBq/QAAAP15IAcgC2r9AAAA/XkgByAKav0AAAD9eSEsIAcgJWohByAmIAhBBGoiCEcNAAsgCEEBaiEHCyAiBEAgDSACIAcgGGpsaiEHICIhCANAICwgB/0AAAD9eSEsIAIgB2ohByAIQQFrIggNAAsLICkgK2ogLP0LAAAgDUEQaiENIAlBEGohCSAQQRBqIRAgC0EQaiELIApBEGohCiAgIA9BAWoiD0cNAAsMAQsgAEUNACAFIBIgGGogAmxqIBEgFWogAPwKAAALAkAgACACRg0AAkACQAJAIAQEQCACIBNsIQ0gASELIAAhDwwBCyAAIQggFiAGIBUgGWoiByAGIAdLGyAHayIHIAcgFksbQQFqIgdBEE0NASAHQQ9xIglBECAJGyIKIBYgBiAXIAYgF0sbIBpqIgkgCSAWSxtBf3NqIQkgCCAHIApraiEIIBshBwNAIAf9DAAAAAAAAAAAAAAAAAAAAAD9CwAAIAdBEGohByAJQRBqIgkNAAsMAQsDQCALIBFqIRAgD0EBaiEKQQAhByAEIQlBACEIAkADQCAHIAtqIhUgDk8NASAHIBBqLQAAIhUgCEH/AXEiCCAIIBVJGyEIIAIgB2ohByAJQQFrIgkNAAsgDSAPaiIHIAZPDQMgBSAHaiAIOgAAIAtBAWohCyAKIg8gAk8NBAwBCwsgFSAOQayMwAAQGAALIB8gJGohCSAfICFqIQoDQCAIIApqIgcgBk8NASAIIAlqQQA6AAAgAiAIQQFqIghLDQALDAELIAcgBkGcjMAAEBgACyATQQFqIRMgAiAfaiEfIBogAmshGiACIBdqIRcgAiAbaiEbIAEgAmohASACIBxqIRwgAiAdaiEdIAIgFGohFCACIB5qIR4gGEEBaiIYICNHDQALCwJAAkACQCACRSADIAxNcg0AIARFBEAgAkEBayEKQQAgAiAMbCIQayEEIAUgEGohC0EAIQAgDCEBA0BBACEJIAYgACAMaiACbGsiBUEAIAUgBk0bIgUgCiAFIApJG0EBaiIFQRFPBEAgBUEPcSIHQRAgBxsiByAGIBAgBiAQSxsgBGoiCSAKIAkgCkkbQX9zaiEIIAUgB2shCSALIQcDQCAH/QwAAAAAAAAAAAAAAAAAAAAA/QsAACAHQRBqIQcgCEEQaiIIDQALCyABQQFqIQEgCSALaiEIIAkgEGohByACIAlrIQkDQCAGIAdNDQUgCEEAOgAAIAhBAWohCCAHQQFqIQcgCUEBayIJDQALIAQgAmshBCACIBBqIRAgAiALaiELIABBAWohACABIANHDQALDAELIANBAWsiC0EASA0DIAwgEmshAANAIAIgDGwhDyAMQQFqIQxBACEKA0AgCkEBaiAAIQcgBCEJQQAhCANAIAcgCyAHIAtJG0EAIAdBAE4bIAJsIApqIg0gDk8NBCANIBFqLQAAIg0gCEH/AXEiCCAIIA1JGyEIIAdBAWohByAJQQFrIgkNAAsgCiAPaiIHIAZPDQQgBSAHaiAIOgAAIgogAkcNAAsgAEEBaiEAIAMgDEcNAAsLIA4EQCARIA4QNAsPCyANIA5BjIzAABAYAAsgByAGQfyLwAAQGAALQbCKwABBHEHMisAAEBwAC68QAxh/AnsDfSAFIAZsIgtBAnQhCAJAAkAgC0H/////A0sgCEH8////B0tyDQACQCAIRQRAQQQhDUEEIQ8MAQtBBCEPIAhBBBA2Ig1FDQEgCyEXIAhBBBA2Ig9FDQILIAAgCzYCCCAAIA82AgQgACAXNgIAQQAhCCACQQRPBEAgAkECdiEMIA0hAANAIAACewJAAkACQAJAAkACQAJAAkAgAiAISwRAIAhBAWoiCSACTw0BIAhBAmoiDiACTw0CIAhBA2oiECACTw0DIAQgCE0NBCAEIAlNDQUgBCAOTQ0GIAQgEE0NByABIApqIgkuAQCy/RMgCUECai4BALL9IAEgCUEEai4BALL9IAIgCUEGai4BALL9IAMhICADIApqIgkuAQCy/RMgCUECai4BALL9IAEgCUEEai4BALL9IAIgCUEGai4BALL9IAMhISAHDQggIP3gASAh/eAB/eQBDAkLIAggAkHcjsAAEBgACyAIQQFqIAJB7I7AABAYAAsgCEECaiACQfyOwAAQGAALIAhBA2ogAkGMj8AAEBgACyAIIARBnI/AABAYAAsgCEEBaiAEQayPwAAQGAALIAhBAmogBEG8j8AAEBgACyAIQQNqIARBzI/AABAYAAsgICAg/eYBICEgIf3mAf3kAf3jAQv9CwIAIABBEGohACAKQQhqIQogCEEEaiEIIAxBAWsiDA0ACwsCQCACQXxxIgggAkYNACAIQX9zIgwgAiAIQQFyIgAgACACSRtqIgogCyAIIAggC0kbIg4gCGsiACAAIApLGyIJIAQgCCAEIAhLGyIQIAhrIgogCSAKSRtBAWohCQJAAkACQCAHRQRAIAlBBE0NASAJQQNxIgdBBCAHGyISIAIgCEEBaiIHIAIgB0sbIAxqIgcgACAAIAdLGyIAIAogACAKSRtBf3NqIQwgASACQQJ2IgBBA3QiB2ohCiADIAdqIQcgDSAAQQR0aiEAIAggCSASa2ohCANAIAAgCv0DAQD9+gH94AEgB/0DAQD9+gH94AH95AH9CwIAIApBCGohCiAHQQhqIQcgAEEQaiEAIAxBBGoiDA0ACwwBCyAJQQVPBEAgCUEDcSIHQQQgBxsiEiAIQX9zIAIgCEEBaiIHIAIgB0sbaiIHIAAgACAHSxsiACAKIAAgCkkbQX9zaiEMIAEgAkECdiIAQQN0IgdqIQogAyAHaiEHIA0gAEEEdGohACAIIAkgEmtqIQgDQCAAIAr9AwEA/foBIiAgIP3mASAH/QMBAP36ASIgICD95gH95AH94wH9CwIAIApBCGohCiAHQQhqIQcgAEEQaiEAIAxBBGoiDA0ACwsgASAIQQF0IgBqIQogDSAIQQJ0aiEHIAAgA2ohAANAIAggEEYNAiAIIA5HBEAgByAKLgEAsiIiICKUIAAuAQCyIiIgIpSSkTgCACAKQQJqIQogB0EEaiEHIABBAmohACAIQQFqIgggAkkNAQwFCwsgDiALQcyOwAAQGAALIAEgCEEBdCIAaiEKIA0gCEECdGohByAAIANqIQADQCAIIBBGDQEgCCAORg0CIAcgCi4BALKLIAAuAQCyi5I4AgAgCkECaiEKIAdBBGohByAAQQJqIQAgCEEBaiIIIAJJDQALDAILIBAgBEGsjsAAEBgACyAOIAtBvI7AABAYAAsCQAJAAkACQAJAAkACQAJAAkACQAJAAkAgBkEBayIaQQJJDQAgBUEBayIbQQJJDQAgBUEBaiEcIAVBf3MhHSABQQJqIQ4gA0ECaiEQIAVBAmshHiAPIAVBAnQiGUEEaiIAaiEPIAAgDWohEiAFQQF0IhUhEyAFIRhBAiEMQQEhBgNAIAwhCCAFIAZsIR9BASEJIA8hACASIQYgDiEDIBAhAUEAIQxBAiEHA0AgDCAYaiIRQQFqIhQgC08NAyAHIQogACAGKgIAIiJDAAAAAFwEfSACIBRNDQUgBCAUTQ0GAkAgASAVai4BACIHsosiIyADIBVqLgEAIhSyiyIkQ0GCGkCUXkUEQCAJIB9qIQkgJCAjQ0GCGkCUXkUEQCAUQQBKIAdBAEpxRSAHIBRxQQBOcUUEQCAMIBZqIgdBAmogC08NDSAMIBNqIgcgC08NDiAJIAVrQQFqIQcgCSAbaiEJDAMLIAwgFmoiByALTw0KIAwgE2oiB0ECaiALTw0LIAkgHWohByAJIBxqIQkMAgsgCyARTQ0NIBFBAmogC08NDiAJQQFrIQcgCUEBaiEJDAELIAwgFmoiCUEBaiIHIAtPDQ4gDCATaiIRQQFqIgkgC08NDwsgIkMAAAAAICIgDSAJQQJ0aioCAGAbQwAAAAAgIiANIAdBAnRqKgIAYBsFQwAAAAALOAIAIABBBGohACAGQQRqIQYgA0ECaiEDIAFBAmohASAKQQFqIQcgCiEJIB4gDEEBaiIMRw0ACyAPIBlqIQ8gEiAZaiESIA4gFWohDiAFIBNqIRMgBSAWaiEWIBAgFWohECAFIBhqIRggCCAIIBpJIgBqIQwgCCEGIAANAAsLIBcEQCANIBdBAnQQNAsPCyARQQFqIAtB/IzAABAYAAsgEUEBaiACQYyNwAAQGAALIBFBAWogBEGcjcAAEBgACyAHIAtBrI3AABAYAAsgB0ECaiALQbyNwAAQGAALIAdBAmogC0HMjcAAEBgACyAHIAtB3I3AABAYAAsgESALQeyNwAAQGAALIBFBAmogC0H8jcAAEBgACyAJQQFqIAtBjI7AABAYAAsgEUEBaiALQZyOwAAQGAALIA8gCBAtAAtBBCAIEC0AC/tEBD5/CH4JewR9IwBBMGsiDyQAAkACQAJAAkACQAJAIAMgBGwgAkYEQCAFQQFxRQ0BIAZDAAAAAF8EQCAFQQFrs0MAAAA/lEMAAIC/kkOamZk+lEPNzEw/kiEGCyAFQf////8DSyAFQQJ0IglB/P///wdLcg0CQQQhECAJQQQQNSIeRQ0CIA9BADYCLCAPIB42AiggDyAFNgIkIAlBBBA1IgpFDQUgD0EANgIUIA8gCjYCECAPIAU2AgxBACAFQQF2ayEVQwAAgL8gBiAGIAaSlJUhWUMAAAAAIQZBACEQA0AgDygCDCEWAn1DAAAAACFWQwAAAAAhWCMAQRBrIQcgWSAQIBVqIgogCmyylCJXvCILQR92IQ0CQAJ9IFcCfwJAAkACQAJAIAtB/////wdxIgpB0Ni6lQRPBEAgVyAKQYCAgPwHSw0IGiALQQBIIgtFIApBl+TFlQRLcQ0CIAtFDQEgB0MAAICAIFeVOAIIIAcqAggaIApBtOO/lgRNDQEMBwsgCkGY5MX1A00EQCAKQYCAgMgDTQ0DQQAhCiBXDAYLIApBkquU/ANNDQMLIFdDO6q4P5QgDUECdCoC9JdAkvwADAMLIFdDAAAAf5QMBQsgByBXQwAAAH+SOAIMIAcqAgwaIFdDAACAP5IMBAsgDUUgDWsLIgqyIlZDAHIxv5SSIlcgVkOOvr81lCJYkwshViBXIFYgViBWIFaUIlYgVkMVUjW7lEOPqio+kpSTIlaUQwAAAEAgVpOVIFiTkkMAAIA/kiFWIApFDQACQAJAAkAgCkH/AEwEQCAKQYJ/Tg0DIFZDAACADJQhViAKQZt+TQ0BIApB5gBqIQoMAwsgVkMAAAB/lCFWIApB/gFLDQEgCkH/AGshCgwCCyBWQwAAgAyUIVZBtn0gCiAKQbZ9TRtBzAFqIQoMAQsgVkMAAAB/lCFWQf0CIAogCkH9Ak8bQf4BayEKCyBWIApBF3RBgICA/ANqQYCAgPwHcb6UIVYLIFYLIVYgECAWRgRAIA9BDGoQFAsgDygCECARaiBWOAIAIBFBBGohESAGIFaSIQYgDyAQQQFqIhA2AhQgBSAQRw0ACwJ/IAVFBEBBACERQQAMAQtDAACAPyAGlSEGIA8oAhAhBUEAIRBBACERA0AgBiAFIBBqKgIAlEMAAIBHlEMAAAA/kvwBIQogDygCJCARRgRAIA9BJGoQFAsgDygCKCAQaiAKNgIAIA8gEUEBaiIRNgIsIAkgEEEEaiIQRw0ACyAPKAIoIR4gDygCJAshLSAPKAIMIgUEQCAPKAIQIAVBAnQQNAtBACEHIAJB/////wNLIAJBAnQiCkH8////B0tyDQMCfyAKRQRAQQQhBUEADAELQQQhByAKQQQQNiIFRQ0EIAILIS4CQCACRQRAQQEhEAwBCyACQQEQNiIQRQ0FCyAAIAI2AgggACAQNgIEIAAgAjYCACABIRUgBSEKIAMhACAeIQtBACEJAkACQAJAAkACQAJAAkACQAJAAkACQAJAIBFBA2sOAwEACAALIARFDQogAEEEayIBQQAgACABTxshEiARRQRAIABBAnQhBwNAIAAgDGwiCSAAaiIBIAlJBEAgASEADAcLIAEgAksEQCABIQAMBwsgASACSw0IIAxBAWohDEEAIQkgCiEIIAchAQNAIAj9DAAAAAAAAAAAAAAAAAAAAAD9CwIAIAhBEGohCCABQRBrIQEgCUEEaiIJIBJNDQALIAFFIAAgCU1yRQRAIAhBACAB/AsACyAHIApqIQogBCAMRw0ACwwLCyAAQQFrIhNBAEgNA0EEIBFBAXYiAWshFkEAIAFrIRcDQCAAIBRsIgkgAGoiASAJSQRAIAEhAAwGCyABIAJLBEAgASEADAYLIAEgAksNByAUQQFqIRQgCSAVaiEaIAogCUECdGohGEEAIQggFiEJIBchDQNAIAkhDv0MAAAAAAAAAAAAAAAAAAAAACFNIAshAUEAIQcDQCAHIA1qIgkgEyAJIBNJGyIMQQAgCUEAThsiGyAATw0EIAlBAWoiGSATIBMgGUsbIgxBACAZQQBOGyIcIABPDQQgCUECaiIZIBMgEyAZSxsiDEEAIBlBAE4bIhkgAE8NBCAJQQNqIgkgEyAJIBNJGyIMQQAgCUEAThsiCSAATw0EIBogG2otAAD9ESAaIBxqLQAA/RwBIBkgGmotAAD9HAIgCSAaai0AAP0cAyAB/QkCAP21ASBN/a4BIU0gAUEEaiEBIBEgB0EBaiIHRw0ACyAYIAhBAnRqIE1BCP2tAf0LAgAgDkEEaiEJIA1BBGohDSAIQQRqIgggEk0NAAsgACAISwRAA0AgCEEBakIAIUUgDiEJIBEhByALIQwDQCAJIBMgCSATSRtBACAJQQBOGyINIABPDQYgCUEBaiEJIAw1AgAgDSAaajEAAH4gRXwhRSAMQQRqIQwgB0EBayIHDQALIBggCEECdGogRUIIiD4CACAOQQFqIQ4iCCAARw0ACwsgBCAURw0ACwwKCyAERQ0JAkACQAJAIAAOAgABAgtBAEEAQdSGwAAQGAALIAJFBEBBASEJDAoLIAJFBEBBASEJDAkLQQFBAUHkhsAAEBgACyALKAIIIhP9ESFQIAsoAgQiAf0RIVEgCygCACII/REhUiAAQQVrIgxBACAAIAxPGyEYIABBAWshFCABIAhqIRkgE60iRSABrSJIfCFGQQEgAGshGyAVQQFrIRYgAEECdCEaIApBBGohDCAAQQJrIRwgRf0SIU0gSP0SIU8gCK0iR/0SIU4gAEEGSSEfIAohCyAVIQ0CQAJAA0AgACAObCIIIABqIgkgCEkgAiAJSSIBcg0LIAENCiAKIAhBAnRqIiAgEyAIIBVqIhctAAFsIBkgFy0AACIJbGo2AgBBASEHAkACQAJAAkACQAJAAkAgH0UEQEECIQggDCEBA0AgCEEBayAATw0DIAAgCE0NBCAIQQFqIABPDQUgCEECaiAATw0CIAlB/wFxIR0gASAIIA1qIglBAWstAAAiIf0RIAktAAAiB/0cASAJQQFqLQAAIhL9HAIgCUECai0AACIJ/RwDIFH9tQEgHf0RICH9HAEgB/0cAiAS/RwDIFL9tQH9rgEgB/0RIBL9HAEgCf0cAiAXIBQgCEEDaiIHIAcgFEsbai0AAP0cAyBQ/bUB/a4BQQj9rQH9CwIAIAFBEGohASAIQQRqIQggByAYTQ0ACyAIQQFrIQcLIAcgFE8NBSAHQX9zIAAgB0EBaiIBIAAgAUsbaiIBIBwgB2siCCABIAhJGyIBIAAgB0EBayIIIAAgCEsbIAdrQQFqIgggASAISRsiASAHIAAgACAHSRsiEiAHayIIIAEgCEkbQQFqIgFBBE0NBCAHIBZqIQggCyAHQQJ0aiEJIAcgASABQQNxIgFBBCABG2siAWohBwNAIAkgTyAIQQFq/VwAACJT/YkB/akB/ckB/dUBIE4gCP1cAAAiVP2JAf2pAf3JAf3VAf3OASBNIAhBAmr9XAAAIlX9iQH9qQH9yQH91QH9zgFBCP3NASBPIFMgTf0NAgMAAAAAAAAAAAAAAAAAAP2JAf2pAf3JAf3VASBOIFQgTf0NAgMAAAAAAAAAAAAAAAAAAP2JAf2pAf3JAf3VAf3OASBNIFUgTf0NAgMAAAAAAAAAAAAAAAAAAP2JAf2pAf3JAf3VAf3OAUEI/c0B/Q0AAQIDCAkKCxAREhMYGRob/QsCACAIQQRqIQggCUEQaiEJIAFBBGsiAQ0ACwwECyAIQQJqIABB1IfAABAYAAsgCEEBayAAQaSHwAAQGAALIAggAEG0h8AAEBgACyAIQQFqIABBxIfAABAYAAsgB0EBayEIQQAgEmshHSALIAdBAnRqIQkDQCAAIAhNDQIgCCAdakF/Rg0EIAhBAmogAE8NBSAJIAggDWoiAUEBajEAACBIfiABMQAAIEd+fCABQQJqMQAAIEV+fEIIiD4CACAJQQRqIQkgGyAIQQFqIghqQX9HDQALCyAgIBRBAnRqIEYgFCAXajEAAH4gACAXakECazEAACBHfnxCCIg+AgAgACAWaiEWIAsgGmohCyAMIBpqIQwgACANaiENIA5BAWoiDiAERw0BDA0LCyAIIABB9IbAABAYAAsgEiAAQYSHwAAQGAALIAhBAmogAEGUh8AAEBgACyAMIABBxITAABAYAAsgDSAAQbSEwAAQGAALIAAgAk0NAQsgCSAAIAJBlITAABAbAAsgACACTQ0LIAAhAQsgCSABIAJBpITAABAbAAsgBEUgAEVyDQICQAJAAkAgAEEBayINQQBOBEAgDUEARyIUIABPBEAgACACSwRAQQEhBwwFC0EBIQcgACACTQ0CDAMLQQIgDSANQQJPGyEWIABBAUcEQEEDIA0gDUEDTxshEyAAQQJ0IRogCkEIaiEMA0AgACAIbCIJIABqIgcgCUkgAiAHSSIBcg0FIAENBCAKIAlBAnRqIgEgCSAVaiIOMQAAIkcgCzUCACJGIAs1AgQiSXx+IkogDiAUajEAACJLIAs1AgwiRX58IEcgCzUCCCJIfnwgCzUCECJHIA4gFmoxAAAiTH58QgiIPgIAIAEgSiBIIEt+fCBFIEx+fCBHIA4gE2oxAAB+fEIIiD4CBCAAQQJHBEBBBCEJIAwhAQNAIAlBA2siByANIAcgDUkbIgdBACAJQQJrIhdBAEobIhIgAE8NBSAJQQFrIgcgDSAHIA1JGyIHQQAgF0EBaiIYQQBOGyIZIABPDQUgCSANIAkgDUkbIgdBACAYQQFqIhhBAE4bIhsgAE8NBSABIA4gFyANIA0gF0sbajEAACBIfiAOIBlqMQAAIEV+fCAOIBJqMQAAIEl+fCAOIAlBBGsiByANIAcgDUkbajEAACBGfnwgDiAbajEAACBHfnxCCIg+AgAgCUEBaiEJIAFBBGohASAYQQFrIABHDQALCyAMIBpqIQwgCEEBaiIIIARHDQALDAcLIAIgBEEBayIAIAAgAksbQQFqIgFBBU8EQCALNQIAIAs1AgR8/RIhTSALNQIQ/RIhTyALNQII/RIhTiALNQIM/RIhUCAVIQggCiEAIAEgAUEDcSIBQQQgARtrIgkhAQNAIAAgTSAI/VwAACJR/YkB/akB/ckBIlL91QEgCCAUav1cAAAiU/2JAf2pAf3JASBQ/dUB/c4BIFIgTv3VAf3OASBPIAggFmr9XAAAIlL9iQH9qQH9yQH91QH9zgFBCP3NASBNIFEgTf0NAgMAAAAAAAAAAAAAAAAAAP2JAf2pAf3JASJR/dUBIFMgTf0NAgMAAAAAAAAAAAAAAAAAAP2JAf2pAf3JASBQ/dUB/c4BIFEgTv3VAf3OASBPIFIgTf0NAgMAAAAAAAAAAAAAAAAAAP2JAf2pAf3JAf3VAf3OAUEI/c0B/Q0AAQIDCAkKCxAREhMYGRob/QsCACAIQQRqIQggAEEQaiEAIAFBBGsiAQ0ACwsDQCAJQQFqIQcgAiAJTQ0EIAIgB0kNAyAKIAlBAnRqIAkgFWoiADEAACJFIAs1AgAgCzUCBHx+IAAgFGoxAAAgCzUCDH58IEUgCzUCCH58IAs1AhAgACAWajEAAH58QgiIPgIAIAciCSAERw0ACwwGCyAAIAJLBEAgACEHDAMLIAAgAksEQCAAIQcMAgsMDAsgByAAQYSIwAAQGAALIAkgByACQfSHwAAQGwALIAkgByACQeSHwAAQGwALIAggCSACQcSGwAAQGwALIAggCSACQbSGwAAQGwALIBAhCSACIQcgBCEYIB4hAUEAIQJBACEVAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAIBFBA0cEQCAERQ0SIANBBGsiEEEAIAMgEE8bIRRBACARQQF2ayEIIARBAWshDAwBCyADIAdNBEAgATUCCCFFIAE1AgQhRyABNQIAIUggA0UNAyBHIEh8IUYgByADayIAQQAgACAHTRsiACADQQFrIgEgACABSRtBAWoiAEEETQ0CIANBAnQhBCBF/RIhTSBG/RIhTyAJIQEgACAAQQNxIgBBBCAAG2siAiELIAUhAANAIAEgTSAAIARq/QACACJQ/ckB/dUBIE8gAP0AAgAiUf3JAf3VAf3OAUEY/c0BIk79DP8AAAAAAAAA/wAAAAAAAAD9DP/////////////////////9DAAAAAAAAAAAAAAAAAAAAAAgTv0dAEL/AVQbQn9CACBO/R0BQv8BVBv9HgH9UiBNIFD9ygH91QEgTyBR/coB/dUB/c4BQRj9zQEiTv0M/wAAAAAAAAD/AAAAAAAAAP0M//////////////////////0MAAAAAAAAAAAAAAAAAAAAACBO/R0AQv8BVBtCf0IAIE79HQFC/wFUG/0eAf1S/Q0ACBAYAAAAAAAAAAAAAAAA/VoAAAAgAUEEaiEBIABBEGohACALQQRrIgsNAAsMAgtBACADIAdB1ITAABAbAAsDQAJAAkACQAJAIAMgFWwiDiAVQQFqIhUgA2wiAEsgACAHS3JFBEAgCSAOaiENQQAhAEEAIQQCQANAAkAgACEKAkAgEUUEQP0MAAAAAAAAAAAAAAAAAAAAACJNIU8MAQsgDEEASA0BIAUgBEECdGohFiAIIQAgESELIAEhAv0MAAAAAAAAAAAAAAAAAAAAACJPIU0DQCACNQIA/RIiTiAWIAAgDCAAIAxJG0EAIABBAE4bIANsQQJ0aiIX/QYCCP3VASBN/c4BIU0gTiAX/QYCAP3VASBP/c4BIU8gAEEBaiEAIAJBBGohAiALQQFrIgsNAAsLIAMgBE0NBCAEIA1qQv8BIE/9HQBCGIgiRSBFQv8BWhs8AAAgBEEBciIAIANPDQUgACANakL/ASBP/R0BQhiIIkUgRUL/AVobPAAAIARBAnIiACADTw0GIAAgDWpC/wEgTf0dAEIYiCJFIEVC/wFaGzwAACAEQQNyIgAgA08NAiAAIA1qQv8BIE39HQFCGIgiRSBFQv8BWhs8AAAgCkEBaiEAIBQgBEEEaiIETw0BDAcLCwweCyAAIANBhITAABAYAAsgDiAAIAdBtIPAABAbAAsgBCADQdSDwAAQGAALIAAgA0Hkg8AAEBgACyAAIANB9IPAABAYAAsCQCADIARNDQAgEUUEQCAQIApBAnQiAGsiAkUNASAAIAlqIA5qQQRqQQAgAvwLAAwBCwJAIAxBAE4EQANAIARBAWpBACEAQgAhRSABIQIDQCAAIAhqIg4gDCAMIA5LG0EAIA5BAE4bIANsIARqIg4gB08NAyACNQIAIAUgDkECdGo1AgB+IEV8IUUgAkEEaiECIBEgAEEBaiIARw0ACyAEIA1qQv8BIEVCGIgiRSBFQv8BWhs8AAAiBCADRw0ADAMLAAsMGgsgDiAHQcSDwAAQGAALIAhBAWohCCAVIBhHDQALDBALQQAgA2shEiAFIAJBAnRqIQEgAyAHIAMgB0kbIAJqIQggBSACIANqQQJ0aiELIAMhBCAHIQAgCSEKA0AgACACRg0CIAAgCEYEQCACIBJrIAdBpIbAABAYAAsgAiAKakL/ASALNQIAIEV+IEYgATUCAH58QhiIIkkgSUL/AVobPAAAIABBAWshACALQQRqIQsgEkEBayESIApBAWohCiABQQRqIQEgAiAEQQFrIgRHDQALCyAYQQFrIgBBACAAIBhNGyIvQQJJDQ0CQCADQQRPBEAgRf0SIU0gR/0SIU8gSP0SIU4gBUEQaiIZIANBAnQiJGohHyAZIANBA3RqISAgAyAJaiElQXwgA2shHSADQQVrITAgCSADQQRqIjFqISFBfCADQQF0IjJrISYgAyEbQXwhJ0EEISggMiIcQQRqIjghKSAxIRFBASEqDAELIANFDQ4gA0EDdCERIANBAXQhDSADIAlqIQ4gA0ECdCEQQQAhCiAFIQFBASELA0AgCiANaiICIAMgCmoiBCISSSACIAdLcg0NIAcgCk0NDCAHIBJNDQkgAiAHTw0DIAogDmoiCEL/ASABIgAgEGoiATUCACBHfiAANQIAIEh+fCAAIBFqIgw1AgAgRX58QhiIIkYgRkL/AVobPAAAAkAgA0EBRg0AIApBAWogB08NDCAEQQFqIAdPDQkgAkEBaiAHTw0GIAhBAWpC/wEgAUEEajUCACBHfiAAQQRqNQIAIEh+fCAMQQRqNQIAIEV+fEIYiCJGIEZC/wFaGzwAACADQQJGDQAgCkECaiAHTw0LIARBAmogB08NCCACQQJqIAdPDQUgCEECakL/ASABQQhqNQIAIEd+IABBCGo1AgAgSH58IAxBCGo1AgAgRX58QhiIIkYgRkL/AVobPAAACyADIApqIQogC0EBaiILIC9JDQALDA4LA0AgKiIBQQFqIiogA2wiACABIANsIgJJIAAgB0tyDQ0gAyAzbCIiQQRqITkgIiAyaiE6ICIgOGohOyADICJqITwgIiAxaiE9IAIgCWohIyAFIABBAnRqIT4gBSACQQJ0aiE/IAUgAUEBayADbEECdGohQEEEIQtBACEIICEhDCAZIRAgHyENICAhASAnIRUgKCEXICYhDiApIRMgHSEWIBEhGiAwIRRBACEAAkACQAJAAkACQAJAA0AgCyECIAghQSAUITQgGiE1IBYhQiATITYgDiFDIBchNyAVIUQgASEKIA0hEiAQIQQgDCErIAAgA08NASAAICNqQv8BIE8gPyAAQQJ0Igtq/QACACJQ/ckB/dUBIE4gCyBAav0AAgAiUf3JAf3VAf3OASBNIAsgPmr9AAIAIlL9yQH91QH9zgEiU/0dAEIYiCJGIEZC/wFaGzwAACAAQQFyIgsgA08NAiALICNqQv8BIFP9HQFCGIgiRiBGQv8BWhs8AAAgAEECciILIANPDQMgCyAjakL/ASBPIFD9ygH91QEgTiBR/coB/dUB/c4BIE0gUv3KAf3VAf3OASJQ/R0AQhiIIkYgRkL/AVobPAAAIABBA3IiACADTw0EIAAgI2pC/wEgUP0dAUIYiCJGIEZC/wFaGzwAACAMQQRqIQwgBEEQaiEQIA1BEGohDSABQRBqIQEgFUEEayEVIBdBBGohFyAOQQRrIQ4gE0EEaiETIBZBBGshFiAaQQRqIRogFEEEayEUIAhBAWohCCACIgBBBGoiCyADTQ0ACyAAIANPDQUgMCBBQQJ0IgBrIghBACAAayIBIDxrIAcgACA9aiIMIAcgDEsbakEEayIMIAggDEkbIgggASA6ayAHIAAgO2oiDCAHIAxLG2pBBGsiDCAIIAxJGyIIIAEgImsgByAAIDlqIgAgACAHSRtqQQRrIgAgACAISxtBAWoiAUEETQ0EIAFBA3EiAEEEIAAbIgggNCAHIDUgByA1SxsgQmoiACAAIDRLGyIAIAcgNiAHIDZLGyBDaiIMIAAgDEkbIgAgByA3IAcgN0sbIERqIgwgACAMSRtBf3NqIQAgAiABIAhraiECA0AgKyBPIBL9AAIAIlH9yQH91QEgTiAE/QACACJS/ckB/dUB/c4BIE0gCv0AAgAiU/3JAf3VAf3OAUEY/c0BIlD9DP8AAAAAAAAA/wAAAAAAAAD9DP/////////////////////9DAAAAAAAAAAAAAAAAAAAAAAgUP0dAEL/AVQbQn9CACBQ/R0BQv8BVBv9HgH9UiBPIFH9ygH91QEgTiBS/coB/dUB/c4BIE0gU/3KAf3VAf3OAUEY/c0BIlD9DP8AAAAAAAAA/wAAAAAAAAD9DP/////////////////////9DAAAAAAAAAAAAAAAAAAAAAAgUP0dAEL/AVQbQn9CACBQ/R0BQv8BVBv9HgH9Uv0NAAgQGAAAAAAAAAAAAAAAAP1aAAAAICtBBGohKyAEQRBqIQQgEkEQaiESIApBEGohCiAAQQRqIgANAAsMBAsgACADQdSFwAAQGAALIAsgA0HkhcAAEBgACyALIANB9IXAABAYAAsgACADQYSGwAAQGAALIAUgAiAsakECdGohACAFIAIgG2pBAnRqIQEgBSACIBxqQQJ0aiELA0AgAiAsaiIKIAdPDQ0gAiAbaiISIAdPDQogAiAcaiIKIAdPDQcgAiAlakL/ASABNQIAIEd+IAA1AgAgSH58IAs1AgAgRX58QhiIIkYgRkL/AVobPAAAIABBBGohACABQQRqIQEgC0EEaiELIAJBAWoiAiADRw0ACwsgAyAsaiEsIAMgG2ohGyADIBxqIRwgAyAlaiElIAMgIWohISAZICRqIRkgHyAkaiEfICAgJGohICAnIANrIScgAyAoaiEoICYgA2shJiADIClqISkgHSADayEdIAMgEWohESAzQQFqITMgKiAvSQ0ACwwNCyAHIAdBlIbAABAYAAsgA0EBdCAKaiEKDAILIANBAXQgCmpBAmohCgwBCyADQQF0IApqQQFqIQoLIAogB0HEhcAAEBgACyAEQQJqIRIMAQsgBEEBaiESCyASIAdBtIXAABAYAAsgCkECaiEKDAELIApBAWohCgsgCiAHQaSFwAAQGAALIAMgCmohAiADQQF0IApqIQALIAIgACAHQZSFwAAQGwALIBhBAkkNACAHIAMgGGwiAE8gACAYQQFrIANsIghPcUUEQCAIIAAgB0HkhMAAEBsACyADRQ0AQQAhBCBFIEd8IUUgByAIayIAQQAgACAHTRsiACAHIBhBAmsgA2wiDGsiAUEAIAEgB00bIgEgACABSRsiACADQQFrIgEgACABSRsiAUEBaiIKQQVPBEAgCCAJaiEAIApBA3EiAkEEIAIbIgQgAUF/c2ohCyAFIAhBAnRqIQIgBSAMQQJ0aiEBIAogBGshBCBI/RIhTSBF/RIhTwNAIAAgTyAC/QACACJQ/ckB/dUBIE0gAf0AAgAiUf3JAf3VAf3OAUEY/c0BIk79DP8AAAAAAAAA/wAAAAAAAAD9DP/////////////////////9DAAAAAAAAAAAAAAAAAAAAAAgTv0dAEL/AVQbQn9CACBO/R0BQv8BVBv9HgH9UiBPIFD9ygH91QEgTSBR/coB/dUB/c4BQRj9zQEiTv0M/wAAAAAAAAD/AAAAAAAAAP0M//////////////////////0MAAAAAAAAAAAAAAAAAAAAACBO/R0AQv8BVBtCf0IAIE79HQFC/wFUG/0eAf1S/Q0ACBAYAAAAAAAAAAAAAAAA/VoAAAAgAEEEaiEAIAFBEGohASACQRBqIQIgC0EEaiILDQALCyAFIARBAnQiACAMQQJ0amohASAFIAhBAnQgAGpqIQsgAyAEayEKIAQgDGohAiAEIAhqIQACQAJAA0AgAiAHTw0CIAAgB08NASAAIAlqQv8BIEUgCzUCAH4gATUCACBIfnxCGIgiRyBHQv8BWhs8AAAgAUEEaiEBIAJBAWohAiALQQRqIQsgAEEBaiEAIApBAWsiCg0ACwwCCyAAIAdBhIXAABAYAAsgAiAHQfSEwAAQGAALIC4EQCAFIC5BAnQQNAsgLQRAIB4gLUECdBA0CyAPQTBqJAAPCyAPQQA2AhwgD0EBNgIQIA9BiInAADYCDCAPQgQ3AhQgD0EMakGQicAAECYACyAPQQA2AhwgD0EBNgIQIA9BwIjAADYCDCAPQgQ3AhQgD0EMakHIiMAAECYACyAQIAkQLQALIAcgChAtAAtBASACEC0AC0EEIAkQLQALQYCAwABBHEGkg8AAEBwAC7QFARV/IANBAXQiCyAEbCIIQQF0IQYCQCAIQQBIIAZB/v///wdLcg0AAn8gBkUEQEECIQlBAAwBC0ECIQogBkECEDYiCUUNASAICyEKIAAgCDYCCCAAIAk2AgQgACAKNgIAAkACQAJAAkACQAJAAkACQAJAAkAgBEEBayISQQJJIANBAWtBAklyRQRAIAEgA2ohDSALQQJqIQogASALaiEOIANBAmshEyADQQJ0IhQgCWpBBGohCSADIQYgCyEPQQEhEANAIBBBAWohECAJIQAgCiEEQQAhBwNAIAcgEWoiBSACTw0DIAVBAWogAk8NBCAFQQJqIAJPDQUgBiAHaiIFIAJPDQYgBUECaiACTw0HIAcgD2oiBSACTw0IIAVBAWogAk8NCSAFQQJqIAJPDQogBCAITw0LIAEgB2oiBUEBai0AACEVIAcgDmoiDEEBai0AACEWIAAgDEECai0AACIXIAVBAmotAAAiGCAHIA1qIhlBAmotAAAgGS0AAGtBAXRqIAUtAAAiBSAMLQAAIgxqa2o7AQAgBEEBaiAITw0MIABBAmogDCAFIBhqayAXaiAWIBVrQQF0ajsBACAAQQRqIQAgBEECaiEEIBMgB0EBaiIHRw0ACyADIA1qIQ0gAyARaiERIAMgBmohBiAJIBRqIQkgCiALaiEKIAMgDmohDiABIANqIQEgAyAPaiEPIBAgEkcNAAsLDwsgBSACQdyKwAAQGAALIAVBAWogAkHsisAAEBgACyAFQQJqIAJB/IrAABAYAAsgBSACQYyLwAAQGAALIAVBAmogAkGci8AAEBgACyAFIAJBrIvAABAYAAsgBUEBaiACQbyLwAAQGAALIAVBAmogAkHMi8AAEBgACyAEIAhB3IvAABAYAAsgBEEBaiAIQeyLwAAQGAALIAogBhAtAAuUBgEFfyAAQQhrIgEgAEEEaygCACIDQXhxIgBqIQICQAJAIANBAXENACADQQJxRQ0BIAEoAgAiAyAAaiEAIAEgA2siAUHIm8AAKAIARgRAIAIoAgRBA3FBA0cNAUHAm8AAIAA2AgAgAiACKAIEQX5xNgIEIAEgAEEBcjYCBCACIAA2AgAPCyABIAMQCgsCQAJAAkACQAJAIAIoAgQiA0ECcUUEQCACQcybwAAoAgBGDQIgAkHIm8AAKAIARg0DIAIgA0F4cSICEAogASAAIAJqIgBBAXI2AgQgACABaiAANgIAIAFByJvAACgCAEcNAUHAm8AAIAA2AgAPCyACIANBfnE2AgQgASAAQQFyNgIEIAAgAWogADYCAAsgAEGAAkkNAiABIAAQC0EAIQFB4JvAAEHgm8AAKAIAQQFrIgA2AgAgAA0EQaiZwAAoAgAiAARAA0AgAUEBaiEBIAAoAggiAA0ACwtB4JvAAEH/HyABIAFB/x9NGzYCAA8LQcybwAAgATYCAEHEm8AAQcSbwAAoAgAgAGoiADYCACABIABBAXI2AgRByJvAACgCACABRgRAQcCbwABBADYCAEHIm8AAQQA2AgALIABB2JvAACgCACIDTQ0DQcybwAAoAgAiAkUNA0EAIQBBxJvAACgCACIEQSlJDQJBoJnAACEBA0AgAiABKAIAIgVPBEAgAiAFIAEoAgRqSQ0ECyABKAIIIQEMAAsAC0HIm8AAIAE2AgBBwJvAAEHAm8AAKAIAIABqIgA2AgAgASAAQQFyNgIEIAAgAWogADYCAA8LAkBBuJvAACgCACICQQEgAEEDdnQiA3FFBEBBuJvAACACIANyNgIAIABB+AFxQbCZwABqIgAhAgwBCyAAQfgBcSIAQbCZwABqIQIgAEG4mcAAaigCACEACyACIAE2AgggACABNgIMIAEgAjYCDCABIAA2AggPC0GomcAAKAIAIgEEQANAIABBAWohACABKAIIIgENAAsLQeCbwABB/x8gACAAQf8fTRs2AgAgAyAETw0AQdibwABBfzYCAAsLuAQBCH8jAEEQayIDJAAgAyABNgIEIAMgADYCACADQqCAgIAONwIIAn8CQAJAAkAgAigCECIJBEAgAigCFCIADQEMAgsgAigCDCIARQ0BIAIoAggiASAAQQN0IgBqIQQgAEEIa0EDdkEBaiEGIAIoAgAhAANAAkAgAEEEaigCACIFRQ0AIAMoAgAgACgCACAFIAMoAgQoAgwRAwBFDQBBAQwFC0EBIAEoAgAgAyABQQRqKAIAEQIADQQaIABBCGohACAEIAFBCGoiAUcNAAsMAgsgAEEYbCEKIABBAWtB/////wFxQQFqIQYgAigCCCEEIAIoAgAhAANAAkAgAEEEaigCACIBRQ0AIAMoAgAgACgCACABIAMoAgQoAgwRAwBFDQBBAQwEC0EAIQdBACEIAkACQAJAIAUgCWoiAUEIai8BAEEBaw4CAQIACyABQQpqLwEAIQgMAQsgBCABQQxqKAIAQQN0ai8BBCEICwJAAkACQCABLwEAQQFrDgIBAgALIAFBAmovAQAhBwwBCyAEIAFBBGooAgBBA3RqLwEEIQcLIAMgBzsBDiADIAg7AQwgAyABQRRqKAIANgIIQQEgBCABQRBqKAIAQQN0aiIBKAIAIAMgASgCBBECAA0DGiAAQQhqIQAgBUEYaiIFIApHDQALDAELCwJAIAYgAigCBE8NACADKAIAIAIoAgAgBkEDdGoiACgCACAAKAIEIAMoAgQoAgwRAwBFDQBBAQwBC0EACyADQRBqJAALjwQBAn8gACABaiECAkACQCAAKAIEIgNBAXENACADQQJxRQ0BIAAoAgAiAyABaiEBIAAgA2siAEHIm8AAKAIARgRAIAIoAgRBA3FBA0cNAUHAm8AAIAE2AgAgAiACKAIEQX5xNgIEIAAgAUEBcjYCBCACIAE2AgAMAgsgACADEAoLAkACQAJAIAIoAgQiA0ECcUUEQCACQcybwAAoAgBGDQIgAkHIm8AAKAIARg0DIAIgA0F4cSICEAogACABIAJqIgFBAXI2AgQgACABaiABNgIAIABByJvAACgCAEcNAUHAm8AAIAE2AgAPCyACIANBfnE2AgQgACABQQFyNgIEIAAgAWogATYCAAsgAUGAAk8EQCAAIAEQCw8LAkBBuJvAACgCACICQQEgAUEDdnQiA3FFBEBBuJvAACACIANyNgIAIAFB+AFxQbCZwABqIgEhAgwBCyABQfgBcSIBQbCZwABqIQIgAUG4mcAAaigCACEBCyACIAA2AgggASAANgIMIAAgAjYCDCAAIAE2AggPC0HMm8AAIAA2AgBBxJvAAEHEm8AAKAIAIAFqIgE2AgAgACABQQFyNgIEIABByJvAACgCAEcNAUHAm8AAQQA2AgBByJvAAEEANgIADwtByJvAACAANgIAQcCbwABBwJvAACgCACABaiIBNgIAIAAgAUEBcjYCBCAAIAFqIAE2AgALC+cCAQV/AkAgAUHN/3tBECAAIABBEE0bIgBrTw0AIABBECABQQtqQXhxIAFBC0kbIgRqQQxqEAEiAkUNACACQQhrIQECQCAAQQFrIgMgAnFFBEAgASEADAELIAJBBGsiBSgCACIGQXhxIAIgA2pBACAAa3FBCGsiAiAAQQAgAiABa0EQTRtqIgAgAWsiAmshAyAGQQNxBEAgACADIAAoAgRBAXFyQQJyNgIEIAAgA2oiAyADKAIEQQFyNgIEIAUgAiAFKAIAQQFxckECcjYCACABIAJqIgMgAygCBEEBcjYCBCABIAIQCAwBCyABKAIAIQEgACADNgIEIAAgASACajYCAAsCQCAAKAIEIgFBA3FFDQAgAUF4cSICIARBEGpNDQAgACAEIAFBAXFyQQJyNgIEIAAgBGoiASACIARrIgRBA3I2AgQgACACaiICIAIoAgRBAXI2AgQgASAEEAgLIABBCGohAwsgAwuCAwEEfyAAKAIMIQICQAJAAkAgAUGAAk8EQCAAKAIYIQMCQAJAIAAgAkYEQCAAQRRBECAAKAIUIgIbaigCACIBDQFBACECDAILIAAoAggiASACNgIMIAIgATYCCAwBCyAAQRRqIABBEGogAhshBANAIAQhBSABIgJBFGogAkEQaiACKAIUIgEbIQQgAkEUQRAgARtqKAIAIgENAAsgBUEANgIACyADRQ0CAkAgACgCHEECdEGgmMAAaiIBKAIAIABHBEAgAygCECAARg0BIAMgAjYCFCACDQMMBAsgASACNgIAIAJFDQQMAgsgAyACNgIQIAINAQwCCyAAKAIIIgAgAkcEQCAAIAI2AgwgAiAANgIIDwtBuJvAAEG4m8AAKAIAQX4gAUEDdndxNgIADwsgAiADNgIYIAAoAhAiAQRAIAIgATYCECABIAI2AhgLIAAoAhQiAEUNACACIAA2AhQgACACNgIYDwsPC0G8m8AAQbybwAAoAgBBfiAAKAIcd3E2AgALxAIBBH8gAEIANwIQIAACf0EAIAFBgAJJDQAaQR8gAUH///8HSw0AGiABQSYgAUEIdmciA2t2QQFxIANBAXRrQT5qCyICNgIcIAJBAnRBoJjAAGohBEEBIAJ0IgNBvJvAACgCAHFFBEAgBCAANgIAIAAgBDYCGCAAIAA2AgwgACAANgIIQbybwABBvJvAACgCACADcjYCAA8LAkACQCABIAQoAgAiAygCBEF4cUYEQCADIQIMAQsgAUEZIAJBAXZrQQAgAkEfRxt0IQUDQCADIAVBHXZBBHFqIgQoAhAiAkUNAiAFQQF0IQUgAiEDIAIoAgRBeHEgAUcNAAsLIAIoAggiASAANgIMIAIgADYCCCAAQQA2AhggACACNgIMIAAgATYCCA8LIARBEGogADYCACAAIAM2AhggACAANgIMIAAgADYCCAv7BQIKfwF+IwBBEGsiCCQAQQohAiAAKAIAIgQhAyAEQegHTwRAIAQhAANAIAhBBmogAmoiBkEEayAAIABBkM4AbiIDQZDOAGxrIgdB//8DcUHkAG4iBUEBdC8AqJRAOwAAIAZBAmsgByAFQeQAbGtB//8DcUEBdC8AqJRAOwAAIAJBBGshAiAAQf+s4gRLIAMhAA0ACwsCQCADQQlNBEAgAyEADAELIAJBAmsiAiAIQQZqaiADIANB//8DcUHkAG4iAEHkAGxrQf//A3FBAXQvAKiUQDsAAAtBACAEIAAbRQRAIAJBAWsiAiAIQQZqaiAAQQF0LQCplEA6AAALAn8gCEEGaiACaiEKQQogAmshBkEAIQRBAUErQYCAxAAgASgCCCICQYCAgAFxIgAbIQtBACACQYCAgARxGyEHAkAgAEEVdiAGaiIAIAEvAQwiA0kEQAJAAkAgAkGAgIAIcUUEQCADIABrIQNBACEAAkACQAJAIAJBHXZBA3FBAWsOAwABAAILIAMhAAwBCyADQf7/A3FBAXYhAAsgAkH///8AcSEJIAEoAgQhBSABKAIAIQEDQCAEQf//A3EgAEH//wNxTw0CQQEhAiAEQQFqIQQgASAJIAUoAhARAgBFDQALDAQLIAEgASkCCCIMp0GAgID/eXFBsICAgAJyNgIIQQEhAiABKAIAIgUgASgCBCIJIAsgBxAeDQMgAyAAa0H//wNxIQADQCAEQf//A3EgAE8NAiAEQQFqIQQgBUEwIAkoAhARAgBFDQALDAMLQQEhAiABIAUgCyAHEB4NAiABIAogBiAFKAIMEQMADQJBACEEIAMgAGtB//8DcSEAA0AgBEH//wNxIgMgAEkhAiAAIANNDQMgBEEBaiEEIAEgCSAFKAIQEQIARQ0ACwwCCyAFIAogBiAJKAIMEQMADQEgASAMNwIIQQAMAgtBASECIAEoAgAiACABKAIEIgEgCyAHEB4NACAAIAogBiABKAIMEQMAIQILIAILIAhBEGokAAuIAgEGfyAAKAIIIgQhAgJ/QQEgAUGAAUkNABpBAiABQYAQSQ0AGkEDQQQgAUGAgARJGwsiBiAAKAIAIARrSwR/IAAgBCAGEBIgACgCCAUgAgsgACgCBGohAgJAIAFBgAFPBEAgAUE/cUGAf3IhBSABQQZ2IQMgAUGAEEkEQCACIAU6AAEgAiADQcABcjoAAAwCCyABQQx2IQcgA0E/cUGAf3IhAyABQf//A00EQCACIAU6AAIgAiADOgABIAIgB0HgAXI6AAAMAgsgAiAFOgADIAIgAzoAAiACIAdBP3FBgH9yOgABIAIgAUESdkFwcjoAAAwBCyACIAE6AAALIAAgBCAGajYCCEEAC58CAgN/AX4jAEFAaiICJAAgASgCAEGAgICAeEYEQCABKAIMIQMgAkEkaiIEQQA2AgAgAkKAgICAEDcCHCACQTBqIAMoAgAiA0EIaikCADcDACACQThqIANBEGopAgA3AwAgAiADKQIANwMoIAJBHGpBjJLAACACQShqEAcaIAJBGGogBCgCACIDNgIAIAIgAikCHCIFNwMQIAFBCGogAzYCACABIAU3AgALIAEpAgAhBSABQoCAgIAQNwIAIAJBCGoiAyABQQhqIgEoAgA2AgAgAUEANgIAIAIgBTcDAEEMQQQQNSIBRQRAQQRBDBA5AAsgASACKQMANwIAIAFBCGogAygCADYCACAAQeyTwAA2AgQgACABNgIAIAJBQGskAAuUAgECfyMAQSBrIgUkAEHwm8AAQfCbwAAoAgAiBkEBajYCAAJAAn9BACAGQQBIDQAaQQFB7JvAAC0AAA0AGkHsm8AAQQE6AABB6JvAAEHom8AAKAIAQQFqNgIAQQILQf8BcSIGQQJHBEAgBkEBcUUNASAFQQhqIAAgASgCGBEAAAwBC0H0m8AAKAIAIgZBAEgNAEH0m8AAIAZBAWo2AgBB+JvAACgCAARAIAUgACABKAIUEQAAIAUgBDoAHSAFIAM6ABwgBSACNgIYIAUgBSkDADcCEEH4m8AAKAIAIAVBEGpB/JvAACgCACgCFBEAAAtB9JvAAEH0m8AAKAIAQQFrNgIAQeybwABBADoAACADRQ0AAAsAC8EBAgN/AX4jAEEwayICJAAgASgCAEGAgICAeEYEQCABKAIMIQMgAkEUaiIEQQA2AgAgAkKAgICAEDcCDCACQSBqIAMoAgAiA0EIaikCADcDACACQShqIANBEGopAgA3AwAgAiADKQIANwMYIAJBDGpBjJLAACACQRhqEAcaIAJBCGogBCgCACIDNgIAIAIgAikCDCIFNwMAIAFBCGogAzYCACABIAU3AgALIABB7JPAADYCBCAAIAE2AgAgAkEwaiQAC6gBAgJ/AX5BASEHQQQhBgJAIAQgBWpBAWtBACAEa3GtIAOtfiIIQiCIUEUEQEEAIQMMAQsgCKciA0GAgICAeCAEa0sEQEEAIQMMAQsCQAJAAn8gAQRAIAIgASAFbCAEIAMQMQwBCyADRQRAIAQhBgwCCyADIAQQNQsiBg0AIAAgBDYCBAwBCyAAIAY2AgRBACEHC0EIIQYLIAAgBmogAzYCACAAIAc2AgALhwEBAX8jAEEQayIDJAAgAiABIAJqIgFLBEBBAEEAEC0ACyADQQRqIAAoAgAiAiAAKAIEQQggASACQQF0IgIgASACSxsiASABQQhNGyIBQQFBARARIAMoAgRBAUYEQCADKAIIIAMoAgwQLQALIAMoAgghAiAAIAE2AgAgACACNgIEIANBEGokAAt5AQF/IwBBIGsiAiQAAn8gACgCAEGAgICAeEcEQCABIAAoAgQgACgCCBAwDAELIAJBEGogACgCDCgCACIAQQhqKQIANwMAIAJBGGogAEEQaikCADcDACACIAApAgA3AwggASgCACABKAIEIAJBCGoQBwsgAkEgaiQAC2kBA38jAEEQayIBJAAgAUEEaiAAKAIAIgIgACgCBEEEIAJBAXQiAiACQQRNGyICQQRBBBARIAEoAgRBAUYEQCABKAIIIAEoAgwQLQALIAEoAgghAyAAIAI2AgAgACADNgIEIAFBEGokAAtpAQN/IwBBEGsiASQAIAFBBGogACgCACICIAAoAgRBBCACQQF0IgIgAkEETRsiAkEEQQgQESABKAIEQQFGBEAgASgCCCABKAIMEC0ACyABKAIIIQMgACACNgIAIAAgAzYCBCABQRBqJAALaQEDfyMAQRBrIgEkACABQQRqIAAoAgAiAiAAKAIEQQQgAkEBdCICIAJBBE0bIgJBAkECEBEgASgCBEEBRgRAIAEoAgggASgCDBAtAAsgASgCCCEDIAAgAjYCACAAIAM2AgQgAUEQaiQACxIAIwBBMGsiACQAIABBMGokAAtoAgF/AX4jAEEwayIDJAAgAyABNgIEIAMgADYCACADQQI2AgwgA0Hkl8AANgIIIANCAjcCFCADQoCAgIAwIgQgA62ENwMoIAMgBCADQQRqrYQ3AyAgAyADQSBqNgIQIANBCGogAhAmAAtHAQF/IAAoAgAgACgCCCIDayACSQRAIAAgAyACEBIgACgCCCEDCyACBEAgACgCBCADaiABIAL8CgAACyAAIAIgA2o2AghBAAtEAQJ/IAEoAgQhAiABKAIAIQNBCEEEEDUiAUUEQEEEQQgQOQALIAEgAjYCBCABIAM2AgAgAEHcksAANgIEIAAgATYCAAvGAgACQCAAIAJNBEAgACABTSABIAJLcg0BIwBBMGsiAiQAIAIgATYCBCACIAA2AgAgAkECNgIMIAJB2JbAADYCCCACQgI3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IAAAABwAEAAMAAAAEgAAABcAAAAcABAADAAAABcAAAAZAAAAHAAQAAwAAAAUAAAAGQAAABwAEAAMAAAAUQAAAB4AAAAcABAADAAAAFIAAAAeAAAATGF6eSBpbnN0YW5jZSBoYXMgcHJldmlvdXNseSBiZWVuIHBvaXNvbmVkAAA8CBAAKgAAAEgBEABaAAAACAMAABkAAAByZWVudHJhbnQgaW5pdAAAgAgQAA4AAABIARAAWgAAAHoCAAANAAAAfP2LMlfmV/kC30S/40jnr21dy9YsUOtjeEGmV3Ebi7ltZW1vcnkgYWxsb2NhdGlvbiBvZiAgYnl0ZXMgZmFpbGVkAADICBAAFQAAAN0IEAANAAAALwEQABgAAABkAQAACQAAAAQAAAAMAAAABAAAAAUAAAAGAAAABwAAAAAAAAAIAAAABAAAAAgAAAAJAAAACgAAAAsAAAAMAAAAEAAAAAQAAAANAAAADgAAAA8AAAAQAAAAAAAAAAgAAAAEAAAAEQAAAGFzc2VydGlvbiBmYWlsZWQ6IHBzaXplID49IHNpemUgKyBtaW5fb3ZlcmhlYWQAAAQBEAAqAAAAsQQAAAkAAABhc3NlcnRpb24gZmFpbGVkOiBwc2l6ZSA8PSBzaXplICsgbWF4X292ZXJoZWFkAAAEARAAKgAAALcEAAANAAAABAAAAAwAAAAEAAAAEgAAAGNhcGFjaXR5IG92ZXJmbG93AAAA/AkQABEAAADjABAAIAAAABwAAAAFAAAAMDAwMTAyMDMwNDA1MDYwNzA4MDkxMDExMTIxMzE0MTUxNjE3MTgxOTIwMjEyMjIzMjQyNTI2MjcyODI5MzAzMTMyMzMzNDM1MzYzNzM4Mzk0MDQxNDI0MzQ0NDU0NjQ3NDg0OTUwNTE1MjUzNTQ1NTU2NTc1ODU5NjA2MTYyNjM2NDY1NjY2NzY4Njk3MDcxNzI3Mzc0NzU3Njc3Nzg3OTgwODE4MjgzODQ4NTg2ODc4ODg5OTA5MTkyOTM5NDk1OTY5Nzk4OTlyYW5nZSBlbmQgaW5kZXggIG91dCBvZiByYW5nZSBmb3Igc2xpY2Ugb2YgbGVuZ3RoIAAA8AoQABAAAAAACxAAIgAAAHNsaWNlIGluZGV4IHN0YXJ0cyBhdCAgYnV0IGVuZHMgYXQgADQLEAAWAAAASgsQAA0AAAByYW5nZSBzdGFydCBpbmRleCAAAGgLEAASAAAAAAsQACIAAABhdHRlbXB0IHRvIGRpdmlkZSBieSB6ZXJvAAAAjAsQABkAAABpbmRleCBvdXQgb2YgYm91bmRzOiB0aGUgbGVuIGlzICBidXQgdGhlIGluZGV4IGlzIAAAsAsQACAAAADQCxAAEgAAAAAAAD8AAAC/AEGUmMAACwEBAHwJcHJvZHVjZXJzAghsYW5ndWFnZQEEUnVzdAAMcHJvY2Vzc2VkLWJ5AwVydXN0Yx0xLjkyLjAgKGRlZDVjMDZjZiAyMDI1LTEyLTA4KQZ3YWxydXMGMC4yMy4zDHdhc20tYmluZGdlbhMwLjIuMTAwICgyNDA1ZWMyYjQpAHQPdGFyZ2V0X2ZlYXR1cmVzBysPbXV0YWJsZS1nbG9iYWxzKxNub250cmFwcGluZy1mcHRvaW50KwdzaW1kMTI4KwtidWxrLW1lbW9yeSsIc2lnbi1leHQrD3JlZmVyZW5jZS10eXBlcysKbXVsdGl2YWx1ZQ==") });
|
|
310
|
+
}
|
|
311
|
+
function G() {
|
|
312
|
+
return N || (N = J().catch((A2) => {
|
|
313
|
+
throw N = null, A2;
|
|
314
|
+
})), N;
|
|
315
|
+
}
|
|
316
|
+
function k(A2, I2, g2, B2 = 5, C2 = 0) {
|
|
317
|
+
0 === C2 && (C2 = 0.3 * (0.5 * (B2 - 1) - 1) + 0.8);
|
|
318
|
+
const Q2 = Math.floor(B2 / 2), t2 = (function(A3, I3) {
|
|
319
|
+
const g3 = new Float32Array(A3), B3 = Math.floor(A3 / 2);
|
|
320
|
+
let C3 = 0;
|
|
321
|
+
for (let Q3 = 0; Q3 < A3; Q3++) {
|
|
322
|
+
const A4 = Q3 - B3;
|
|
323
|
+
g3[Q3] = Math.exp(-A4 * A4 / (2 * I3 * I3)), C3 += g3[Q3];
|
|
324
|
+
}
|
|
325
|
+
for (let Q3 = 0; Q3 < A3; Q3++) g3[Q3] /= C3;
|
|
326
|
+
return g3;
|
|
327
|
+
})(B2, C2), i2 = new Uint8ClampedArray(I2 * g2), E2 = new Uint8ClampedArray(I2 * g2);
|
|
328
|
+
for (let e2 = 0; e2 < g2; e2++) {
|
|
329
|
+
const g3 = e2 * I2;
|
|
330
|
+
for (let B3 = 0; B3 < I2; B3++) {
|
|
331
|
+
let C3 = 0;
|
|
332
|
+
for (let i3 = -Q2; i3 <= Q2; i3++) {
|
|
333
|
+
C3 += A2[g3 + Math.min(I2 - 1, Math.max(0, B3 + i3))] * t2[Q2 + i3];
|
|
334
|
+
}
|
|
335
|
+
i2[g3 + B3] = C3;
|
|
336
|
+
}
|
|
337
|
+
}
|
|
338
|
+
for (let e2 = 0; e2 < I2; e2++) for (let A3 = 0; A3 < g2; A3++) {
|
|
339
|
+
let B3 = 0;
|
|
340
|
+
for (let C3 = -Q2; C3 <= Q2; C3++) {
|
|
341
|
+
B3 += i2[Math.min(g2 - 1, Math.max(0, A3 + C3)) * I2 + e2] * t2[Q2 + C3];
|
|
342
|
+
}
|
|
343
|
+
E2[A3 * I2 + e2] = Math.round(B3);
|
|
344
|
+
}
|
|
345
|
+
return E2;
|
|
346
|
+
}
|
|
347
|
+
function S(A2, I2, g2, B2, C2) {
|
|
348
|
+
const Q2 = new Uint8Array(I2 * g2), t2 = [];
|
|
349
|
+
for (let e2 = 1; e2 < g2 - 1; e2++) for (let g3 = 1; g3 < I2 - 1; g3++) {
|
|
350
|
+
const i3 = e2 * I2 + g3, E3 = A2[i3];
|
|
351
|
+
E3 >= C2 ? (Q2[i3] = 2, t2.push({ x: g3, y: e2 })) : Q2[i3] = E3 >= B2 ? 0 : 1;
|
|
352
|
+
}
|
|
353
|
+
for (let e2 = 0; e2 < I2; e2++) Q2[e2] = 1, Q2[(g2 - 1) * I2 + e2] = 1;
|
|
354
|
+
for (let e2 = 1; e2 < g2 - 1; e2++) Q2[e2 * I2] = 1, Q2[e2 * I2 + I2 - 1] = 1;
|
|
355
|
+
const i2 = [-1, 0, 1, -1, 1, -1, 0, 1], E2 = [-1, -1, -1, 0, 0, 1, 1, 1];
|
|
356
|
+
for (; t2.length > 0; ) {
|
|
357
|
+
const { x: A3, y: g3 } = t2.pop();
|
|
358
|
+
for (let B3 = 0; B3 < 8; B3++) {
|
|
359
|
+
const C3 = A3 + i2[B3], e2 = g3 + E2[B3], o2 = e2 * I2 + C3;
|
|
360
|
+
0 === Q2[o2] && (Q2[o2] = 2, t2.push({ x: C3, y: e2 }));
|
|
361
|
+
}
|
|
362
|
+
}
|
|
363
|
+
return Q2;
|
|
364
|
+
}
|
|
365
|
+
async function M(I2, g2 = {}) {
|
|
366
|
+
const B2 = !(!g2.debug || g2.debug._timingsOnly), C2 = [], Q2 = performance.now();
|
|
367
|
+
let t2, i2, E2;
|
|
368
|
+
if (g2.skipGrayscale || false) t2 = g2.width, i2 = g2.height, E2 = I2, B2 && (g2.debug.grayscale = E2);
|
|
369
|
+
else {
|
|
370
|
+
t2 = I2.width, i2 = I2.height;
|
|
371
|
+
let A2 = performance.now();
|
|
372
|
+
E2 = (function(A3) {
|
|
373
|
+
const { width: I3, height: g3, data: B3 } = A3, C3 = new Uint8ClampedArray(I3 * g3);
|
|
374
|
+
for (let Q4 = 0, t3 = 0; Q4 < B3.length; Q4 += 4, t3++) C3[t3] = 54 * B3[Q4] + 183 * B3[Q4 + 1] + 19 * B3[Q4 + 2] >> 8;
|
|
375
|
+
return C3;
|
|
376
|
+
})(I2);
|
|
377
|
+
let Q3 = performance.now();
|
|
378
|
+
C2.push({ step: "Grayscale", ms: (Q3 - A2).toFixed(2) }), B2 && (g2.debug.grayscale = E2);
|
|
379
|
+
}
|
|
380
|
+
let e2 = void 0 !== g2.lowThreshold ? g2.lowThreshold : null, o2 = void 0 !== g2.highThreshold ? g2.highThreshold : null;
|
|
381
|
+
if (null === e2 || null === o2) {
|
|
382
|
+
const A2 = 1024, I3 = new Uint32Array(A2);
|
|
383
|
+
let g3 = 0;
|
|
384
|
+
for (let e3 = 1; e3 < i2 - 1; e3++) for (let B4 = 1; B4 < t2 - 1; B4++) {
|
|
385
|
+
const C4 = e3 * t2 + B4, Q4 = -E2[C4 - t2 - 1] + E2[C4 - t2 + 1] - 2 * E2[C4 - 1] + 2 * E2[C4 + 1] - E2[C4 + t2 - 1] + E2[C4 + t2 + 1], i3 = -E2[C4 - t2 - 1] - 2 * E2[C4 - t2] - E2[C4 - t2 + 1] + E2[C4 + t2 - 1] + 2 * E2[C4 + t2] + E2[C4 + t2 + 1];
|
|
386
|
+
let o3 = Math.abs(Q4) + Math.abs(i3);
|
|
387
|
+
o3 >= A2 && (o3 = A2 - 1), o3 > 0 && (I3[o3]++, g3++);
|
|
388
|
+
}
|
|
389
|
+
const B3 = Math.round(0.7 * g3);
|
|
390
|
+
let C3 = 0, Q3 = 75;
|
|
391
|
+
for (let t3 = 1; t3 < A2; t3++) if (C3 += I3[t3], C3 >= B3) {
|
|
392
|
+
Q3 = t3;
|
|
393
|
+
break;
|
|
394
|
+
}
|
|
395
|
+
null === e2 && (e2 = Math.max(5, Math.round(0.5 * Q3))), null === o2 && (o2 = Math.min(500, Math.round(1.5 * Q3)));
|
|
396
|
+
}
|
|
397
|
+
const n2 = g2.kernelSize || 5, a2 = g2.sigma || 0, s2 = void 0 !== g2.L2gradient && g2.L2gradient, c2 = void 0 === g2.applyDilation || g2.applyDilation, y2 = g2.dilationKernelSize || 5, D2 = void 0 !== g2.useWasmHysteresis && g2.useWasmHysteresis, d2 = void 0 !== g2.useWasmFullCanny && g2.useWasmFullCanny;
|
|
398
|
+
if (e2 >= o2 && ([e2, o2] = [o2, e2]), d2) try {
|
|
399
|
+
await G();
|
|
400
|
+
const I3 = performance.now(), D3 = new Uint8ClampedArray((function(I4, g3, B3, C3, Q3, t3, i3, E3, e3, o3) {
|
|
401
|
+
const n3 = h(I4, A.__wbindgen_malloc), a3 = r, s3 = A.canny_edge_detector_full(n3, a3, g3, B3, C3, Q3, t3, i3, E3, e3, o3);
|
|
402
|
+
var c3 = l(s3[0], s3[1]).slice();
|
|
403
|
+
return A.__wbindgen_free(s3[0], 1 * s3[1], 1), c3;
|
|
404
|
+
})(E2, t2, i2, e2, o2, n2, a2, s2, c2, y2)), w2 = (performance.now() - I3).toFixed(2);
|
|
405
|
+
C2.push({ step: "Edge Processing (WASM)", ms: w2 }), B2 && (g2.debug.finalEdges = D3), g2.debug ? g2.debug.timings = C2 : g2.debug = { timings: C2 };
|
|
406
|
+
const d3 = performance.now();
|
|
407
|
+
return C2.unshift({ step: "Edge Detection Total", ms: (d3 - Q2).toFixed(2) }), D3;
|
|
408
|
+
} catch (Y) {
|
|
409
|
+
if (!R) {
|
|
410
|
+
R = true;
|
|
411
|
+
Y instanceof Error ? Y.message : String(Y);
|
|
412
|
+
}
|
|
413
|
+
}
|
|
414
|
+
let f2, m2, N2, p2, F2, J2;
|
|
415
|
+
f2 = performance.now();
|
|
416
|
+
try {
|
|
417
|
+
await G(), N2 = (function(I3, g3, B3, C3, Q3) {
|
|
418
|
+
const t3 = h(I3, A.__wbindgen_malloc), i3 = r, E3 = A.blur(t3, i3, g3, B3, C3, Q3);
|
|
419
|
+
var e3 = l(E3[0], E3[1]).slice();
|
|
420
|
+
return A.__wbindgen_free(E3[0], 1 * E3[1], 1), e3;
|
|
421
|
+
})(E2, t2, i2, n2, a2);
|
|
422
|
+
} catch {
|
|
423
|
+
N2 = k(E2, t2, i2, n2, a2);
|
|
424
|
+
}
|
|
425
|
+
m2 = performance.now(), C2.push({ step: "Gaussian Blur", ms: (m2 - f2).toFixed(2) }), B2 && (g2.debug.blurred = N2), f2 = performance.now();
|
|
426
|
+
{
|
|
427
|
+
const A2 = (function(A3, I3, g3) {
|
|
428
|
+
const B3 = new Int16Array(I3 * g3), C3 = new Int16Array(I3 * g3);
|
|
429
|
+
for (let Q3 = 1; Q3 < g3 - 1; Q3++) {
|
|
430
|
+
const g4 = Q3 * I3, t3 = (Q3 - 1) * I3, i3 = (Q3 + 1) * I3;
|
|
431
|
+
for (let Q4 = 1; Q4 < I3 - 1; Q4++) {
|
|
432
|
+
const I4 = g4 + Q4, E3 = A3[t3 + Q4 - 1], e3 = A3[t3 + Q4], o3 = A3[t3 + Q4 + 1], n3 = A3[g4 + Q4 - 1], a3 = A3[g4 + Q4 + 1], s3 = A3[i3 + Q4 - 1], c3 = A3[i3 + Q4], r2 = A3[i3 + Q4 + 1], h2 = o3 - E3 + 2 * (a3 - n3) + (r2 - s3), l2 = s3 + 2 * c3 + r2 - (E3 + 2 * e3 + o3);
|
|
433
|
+
B3[I4] = h2, C3[I4] = l2;
|
|
434
|
+
}
|
|
435
|
+
}
|
|
436
|
+
return { dx: B3, dy: C3 };
|
|
437
|
+
})(N2, t2, i2);
|
|
438
|
+
p2 = A2.dx, F2 = A2.dy;
|
|
439
|
+
}
|
|
440
|
+
m2 = performance.now(), C2.push({ step: "Gradients", ms: (m2 - f2).toFixed(2) }), f2 = performance.now();
|
|
441
|
+
try {
|
|
442
|
+
await G(), J2 = await u(p2, F2, t2, i2, s2);
|
|
443
|
+
} catch {
|
|
444
|
+
J2 = (function(A2, I3, g3, B3, C3) {
|
|
445
|
+
const Q3 = new Float32Array(g3 * B3), t3 = new Float32Array(g3 * B3);
|
|
446
|
+
for (let i3 = 0; i3 < A2.length; i3++) {
|
|
447
|
+
const g4 = A2[i3], B4 = I3[i3];
|
|
448
|
+
Q3[i3] = C3 ? Math.sqrt(g4 * g4 + B4 * B4) : Math.abs(g4) + Math.abs(B4);
|
|
449
|
+
}
|
|
450
|
+
for (let i3 = 1; i3 < B3 - 1; i3++) for (let B4 = 1; B4 < g3 - 1; B4++) {
|
|
451
|
+
const C4 = i3 * g3 + B4, E3 = Q3[C4];
|
|
452
|
+
if (0 === E3) {
|
|
453
|
+
t3[C4] = 0;
|
|
454
|
+
continue;
|
|
455
|
+
}
|
|
456
|
+
const e3 = A2[C4], o3 = I3[C4];
|
|
457
|
+
let n3 = 0, a3 = 0;
|
|
458
|
+
const s3 = Math.abs(e3), c3 = Math.abs(o3);
|
|
459
|
+
if (c3 > 2.4142 * s3) n3 = Q3[C4 - g3], a3 = Q3[C4 + g3];
|
|
460
|
+
else if (s3 > 2.4142 * c3) n3 = Q3[C4 - 1], a3 = Q3[C4 + 1];
|
|
461
|
+
else {
|
|
462
|
+
const A3 = (e3 ^ o3) < 0 ? -1 : 1;
|
|
463
|
+
o3 > 0 ? (n3 = Q3[(i3 - 1) * g3 + (B4 - A3)], a3 = Q3[(i3 + 1) * g3 + (B4 + A3)]) : (n3 = Q3[(i3 + 1) * g3 + (B4 - A3)], a3 = Q3[(i3 - 1) * g3 + (B4 + A3)]), e3 > 0 && o3 > 0 || e3 < 0 && o3 < 0 ? (n3 = Q3[(i3 - 1) * g3 + (B4 + 1)], a3 = Q3[(i3 + 1) * g3 + (B4 - 1)]) : (n3 = Q3[(i3 - 1) * g3 + (B4 - 1)], a3 = Q3[(i3 + 1) * g3 + (B4 + 1)]);
|
|
464
|
+
}
|
|
465
|
+
t3[C4] = E3 >= n3 && E3 >= a3 ? E3 : 0;
|
|
466
|
+
}
|
|
467
|
+
return t3;
|
|
468
|
+
})(p2, F2, t2, i2, s2);
|
|
469
|
+
}
|
|
470
|
+
m2 = performance.now(), C2.push({ step: "Non-Max Suppression", ms: (m2 - f2).toFixed(2) }), f2 = performance.now();
|
|
471
|
+
const M2 = s2 ? e2 * e2 : e2, b = s2 ? o2 * o2 : o2;
|
|
472
|
+
let L;
|
|
473
|
+
if (D2) try {
|
|
474
|
+
await G(), L = w(J2, t2, i2, M2, b);
|
|
475
|
+
} catch (q) {
|
|
476
|
+
L = S(J2, t2, i2, M2, b);
|
|
477
|
+
}
|
|
478
|
+
else L = S(J2, t2, i2, M2, b);
|
|
479
|
+
m2 = performance.now(), C2.push({ step: "Hysteresis", ms: (m2 - f2).toFixed(2) }), f2 = performance.now();
|
|
480
|
+
const x = new Uint8ClampedArray(t2 * i2);
|
|
481
|
+
for (let A2 = 0; A2 < L.length; A2++) x[A2] = 2 === L[A2] ? 255 : 0;
|
|
482
|
+
m2 = performance.now(), C2.push({ step: "Binary Image", ms: (m2 - f2).toFixed(2) }), f2 = performance.now();
|
|
483
|
+
let U = x;
|
|
484
|
+
if (c2) try {
|
|
485
|
+
await G(), U = (function(I3, g3, B3, C3) {
|
|
486
|
+
const Q3 = h(I3, A.__wbindgen_malloc), t3 = r, i3 = A.dilate(Q3, t3, g3, B3, C3);
|
|
487
|
+
var E3 = l(i3[0], i3[1]).slice();
|
|
488
|
+
return A.__wbindgen_free(i3[0], 1 * i3[1], 1), E3;
|
|
489
|
+
})(x, t2, i2, y2);
|
|
490
|
+
} catch {
|
|
491
|
+
U = (function(A2, I3, g3, B3 = 5) {
|
|
492
|
+
const C3 = Math.floor(B3 / 2), Q3 = new Uint8ClampedArray(I3 * g3), t3 = new Uint8ClampedArray(I3 * g3);
|
|
493
|
+
for (let i3 = 0; i3 < g3; i3++) {
|
|
494
|
+
const g4 = i3 * I3;
|
|
495
|
+
for (let B4 = 0; B4 < I3; B4++) {
|
|
496
|
+
let t4 = 0;
|
|
497
|
+
for (let Q4 = -C3; Q4 <= C3; Q4++) {
|
|
498
|
+
const C4 = B4 + Q4;
|
|
499
|
+
if (C4 >= 0 && C4 < I3) {
|
|
500
|
+
const I4 = A2[g4 + C4];
|
|
501
|
+
I4 > t4 && (t4 = I4);
|
|
502
|
+
}
|
|
503
|
+
}
|
|
504
|
+
Q3[g4 + B4] = t4;
|
|
505
|
+
}
|
|
506
|
+
}
|
|
507
|
+
for (let i3 = 0; i3 < I3; i3++) for (let A3 = 0; A3 < g3; A3++) {
|
|
508
|
+
let B4 = 0;
|
|
509
|
+
for (let t4 = -C3; t4 <= C3; t4++) {
|
|
510
|
+
const C4 = A3 + t4;
|
|
511
|
+
if (C4 >= 0 && C4 < g3) {
|
|
512
|
+
const A4 = Q3[C4 * I3 + i3];
|
|
513
|
+
A4 > B4 && (B4 = A4);
|
|
514
|
+
}
|
|
515
|
+
}
|
|
516
|
+
t3[A3 * I3 + i3] = B4;
|
|
517
|
+
}
|
|
518
|
+
return t3;
|
|
519
|
+
})(x, t2, i2, y2);
|
|
520
|
+
}
|
|
521
|
+
if (m2 = performance.now(), C2.push({ step: "Dilation", ms: (m2 - f2).toFixed(2) }), B2) {
|
|
522
|
+
g2.debug.dx = p2, g2.debug.dy = F2;
|
|
523
|
+
const A2 = new Float32Array(t2 * i2);
|
|
524
|
+
for (let I3 = 0; I3 < p2.length; I3++) {
|
|
525
|
+
const g3 = p2[I3], B3 = F2[I3];
|
|
526
|
+
A2[I3] = s2 ? Math.sqrt(g3 * g3 + B3 * B3) : Math.abs(g3) + Math.abs(B3);
|
|
527
|
+
}
|
|
528
|
+
g2.debug.magnitude = A2, g2.debug.suppressed = J2, g2.debug.edgeMap = L, g2.debug.cannyEdges = x, g2.debug.finalEdges = U;
|
|
529
|
+
}
|
|
530
|
+
g2.debug ? g2.debug.timings = C2 : g2.debug || (g2.debug = { timings: C2 });
|
|
531
|
+
const H = performance.now();
|
|
532
|
+
return C2.unshift({ step: "Edge Detection Total", ms: (H - Q2).toFixed(2) }), U;
|
|
533
|
+
}
|
|
534
|
+
function Z(A2) {
|
|
535
|
+
return A2 <= 0 ? 0 : A2 >= 1 ? 1 : A2;
|
|
536
|
+
}
|
|
537
|
+
function X(A2, I2) {
|
|
538
|
+
return Math.hypot(A2.x - I2.x, A2.y - I2.y);
|
|
539
|
+
}
|
|
540
|
+
function V(A2) {
|
|
541
|
+
return [X(A2.topLeft, A2.topRight), X(A2.topRight, A2.bottomRight), X(A2.bottomRight, A2.bottomLeft), X(A2.bottomLeft, A2.topLeft)];
|
|
542
|
+
}
|
|
543
|
+
function j(A2) {
|
|
544
|
+
const I2 = (function(A3) {
|
|
545
|
+
const I3 = [A3.topLeft, A3.topRight, A3.bottomRight, A3.bottomLeft], g3 = [];
|
|
546
|
+
for (let B2 = 0; B2 < I3.length; B2++) {
|
|
547
|
+
const A4 = I3[(B2 + I3.length - 1) % I3.length], C2 = I3[B2], Q2 = I3[(B2 + 1) % I3.length], t2 = A4.x - C2.x, i2 = A4.y - C2.y, E2 = Q2.x - C2.x, e2 = Q2.y - C2.y, o2 = t2 * E2 + i2 * e2, n2 = Math.max(1e-6, Math.hypot(t2, i2) * Math.hypot(E2, e2)), a2 = Math.max(-1, Math.min(1, o2 / n2));
|
|
548
|
+
g3.push(180 * Math.acos(a2) / Math.PI);
|
|
549
|
+
}
|
|
550
|
+
return g3;
|
|
551
|
+
})(A2);
|
|
552
|
+
let g2 = 0;
|
|
553
|
+
for (const B2 of I2) {
|
|
554
|
+
g2 += Z(1 - Math.abs(B2 - 90) / 55);
|
|
555
|
+
}
|
|
556
|
+
return g2 / Math.max(1, I2.length);
|
|
557
|
+
}
|
|
558
|
+
function O(A2, I2) {
|
|
559
|
+
const g2 = Number(I2.isValid) - Number(A2.isValid);
|
|
560
|
+
if (0 !== g2) return g2;
|
|
561
|
+
const B2 = I2.confidence - A2.confidence;
|
|
562
|
+
if (!(Math.abs(B2) < 0.015) && 0 !== B2) return B2;
|
|
563
|
+
const C2 = Math.abs((A2.approxCount ?? 99) - 4) - Math.abs((I2.approxCount ?? 99) - 4);
|
|
564
|
+
if (0 !== C2) return C2;
|
|
565
|
+
const Q2 = (I2.rightAngleScore ?? 0) - (A2.rightAngleScore ?? 0);
|
|
566
|
+
if (Math.abs(Q2) > 1e-6) return Q2;
|
|
567
|
+
const t2 = Math.abs(1 - (A2.contourFitRatio ?? 1)) - Math.abs(1 - (I2.contourFitRatio ?? 1));
|
|
568
|
+
return Math.abs(t2) > 1e-6 ? t2 : B2 || I2.score - A2.score || I2.coverageRatio - A2.coverageRatio || I2.area - A2.area;
|
|
569
|
+
}
|
|
570
|
+
function z(A2, I2, g2, B2, C2 = {}) {
|
|
571
|
+
const Q2 = C2.epsilon || 0.02, t2 = E(A2.points, Q2).length, i2 = n(A2, { epsilon: Q2 });
|
|
572
|
+
if (!i2) return { contour: A2, corners: null, score: 0, confidence: 0, isValid: false, area: A2.area || 0, fillRatio: 0, coverageRatio: 0, cornersArea: 0, approxCount: t2, convex: false, edgeSupport: 0, aspectRatio: 1 / 0, minSide: 0, rightAngleScore: 0, oppositeSideConsistency: 0, contourFitRatio: 0, contourFitScore: 0 };
|
|
573
|
+
const e2 = g2 * B2, o2 = A2.area || 0, a2 = A2.boundingBox || { minX: 0, minY: 0, maxX: 0, maxY: 0 }, s2 = o2 / Math.max(1, (a2.maxX - a2.minX + 1) * (a2.maxY - a2.minY + 1)), c2 = (function(A3) {
|
|
574
|
+
if (!A3) return 0;
|
|
575
|
+
const I3 = [A3.topLeft, A3.topRight, A3.bottomRight, A3.bottomLeft];
|
|
576
|
+
let g3 = 0;
|
|
577
|
+
for (let B3 = 0; B3 < I3.length; B3++) {
|
|
578
|
+
const A4 = (B3 + 1) % I3.length;
|
|
579
|
+
g3 += I3[B3].x * I3[A4].y - I3[A4].x * I3[B3].y;
|
|
580
|
+
}
|
|
581
|
+
return Math.abs(g3) / 2;
|
|
582
|
+
})(i2), r2 = c2 / Math.max(1, e2), h2 = V(i2), l2 = Math.min(...h2), y2 = (h2[0] + h2[2]) / 2, D2 = (h2[1] + h2[3]) / 2, w2 = y2 > D2 ? y2 / Math.max(1e-6, D2) : D2 / Math.max(1e-6, y2), d2 = (function(A3) {
|
|
583
|
+
const I3 = [A3.topLeft, A3.topRight, A3.bottomRight, A3.bottomLeft], g3 = [];
|
|
584
|
+
for (let C3 = 0; C3 < I3.length; C3++) {
|
|
585
|
+
const A4 = I3[C3], B4 = I3[(C3 + 1) % I3.length], Q3 = I3[(C3 + 2) % I3.length], t3 = (B4.x - A4.x) * (Q3.y - B4.y) - (B4.y - A4.y) * (Q3.x - B4.x);
|
|
586
|
+
Math.abs(t3) < 1e-6 || g3.push(Math.sign(t3));
|
|
587
|
+
}
|
|
588
|
+
if (g3.length < 3) return false;
|
|
589
|
+
const B3 = g3[0];
|
|
590
|
+
return g3.every((A4) => A4 === B3);
|
|
591
|
+
})(i2), f2 = (function(A3, I3, g3, B3) {
|
|
592
|
+
if (!A3?.points || 0 === A3.points.length) return 0;
|
|
593
|
+
const C3 = Math.max(1, Math.floor(A3.points.length / 240));
|
|
594
|
+
let Q3 = 0, t3 = 0;
|
|
595
|
+
for (let i3 = 0; i3 < A3.points.length; i3 += C3) {
|
|
596
|
+
const C4 = A3.points[i3], E2 = Math.max(0, Math.min(g3 - 1, 0 | C4.x)), e3 = Math.max(0, Math.min(B3 - 1, 0 | C4.y));
|
|
597
|
+
Q3++;
|
|
598
|
+
let o3 = false;
|
|
599
|
+
for (let A4 = -1; A4 <= 1 && !o3; A4++) {
|
|
600
|
+
const C5 = e3 + A4;
|
|
601
|
+
if (!(C5 < 0 || C5 >= B3)) for (let A5 = -1; A5 <= 1; A5++) {
|
|
602
|
+
const B4 = E2 + A5;
|
|
603
|
+
if (!(B4 < 0 || B4 >= g3) && I3[C5 * g3 + B4] > 0) {
|
|
604
|
+
o3 = true;
|
|
605
|
+
break;
|
|
606
|
+
}
|
|
607
|
+
}
|
|
608
|
+
}
|
|
609
|
+
o3 && t3++;
|
|
610
|
+
}
|
|
611
|
+
return 0 === Q3 ? 0 : t3 / Q3;
|
|
612
|
+
})(A2, I2, g2, B2), u2 = j(i2), m2 = (function(A3) {
|
|
613
|
+
const I3 = V(A3);
|
|
614
|
+
return (Math.min(I3[0], I3[2]) / Math.max(1e-6, Math.max(I3[0], I3[2])) + Math.min(I3[1], I3[3]) / Math.max(1e-6, Math.max(I3[1], I3[3]))) / 2;
|
|
615
|
+
})(i2), N2 = o2 / Math.max(1, c2), R2 = Z(1 - Math.abs(N2 - 1) / 0.55), p2 = 4 === t2 ? 1 : 5 === t2 ? 0.9 : 6 === t2 ? 0.7 : t2 <= 8 ? 0.5 : 0.28, F2 = Z(o2 / Math.max(1, 0.4 * e2)), J2 = Z((s2 - 0.08) / 0.72), G2 = Z((r2 - 0.03) / 0.82), k2 = void 0 !== C2.minDocumentSideRatio ? C2.minDocumentSideRatio : 0.06, S2 = void 0 !== C2.minDocumentCoverageRatio ? C2.minDocumentCoverageRatio : 0.04, M2 = void 0 !== C2.maxDocumentAspectRatio ? C2.maxDocumentAspectRatio : 8, b = void 0 !== C2.minDocumentFillRatio ? C2.minDocumentFillRatio : 0.07, L = void 0 !== C2.minContourFitRatio ? C2.minContourFitRatio : 0.11, x = void 0 !== C2.maxContourFitRatio ? C2.maxContourFitRatio : 1.2, U = void 0 !== C2.minRightAngleScore ? C2.minRightAngleScore : 0.42, H = void 0 !== C2.minOppositeSideConsistency ? C2.minOppositeSideConsistency : 0.3, Y = Math.min(g2, B2) * k2, q = (function(A3, I3 = 6) {
|
|
616
|
+
const g3 = [A3?.topLeft, A3?.topRight, A3?.bottomRight, A3?.bottomLeft];
|
|
617
|
+
if (g3.some((A4) => !A4 || !Number.isFinite(A4.x) || !Number.isFinite(A4.y))) return false;
|
|
618
|
+
for (let B3 = 0; B3 < g3.length; B3++) for (let A4 = B3 + 1; A4 < g3.length; A4++) if (X(g3[B3], g3[A4]) < I3) return false;
|
|
619
|
+
return true;
|
|
620
|
+
})(i2) && d2 && l2 >= Y && r2 >= S2 && w2 <= M2 && s2 >= b && N2 >= L && N2 <= x && u2 >= U && m2 >= H, v = 0.22 * F2 + 0.14 * J2 + 0.15 * p2 + 0.08 * (d2 ? 1 : 0) + 0.08 * f2 + 0.13 * G2 + 0.1 * u2 + 0.05 * m2 + 0.05 * R2;
|
|
621
|
+
return { contour: A2, corners: i2, score: v, confidence: q ? v : 0.33 * v, isValid: q, area: o2, fillRatio: s2, coverageRatio: r2, cornersArea: c2, approxCount: t2, convex: d2, edgeSupport: f2, aspectRatio: w2, minSide: l2, rightAngleScore: u2, oppositeSideConsistency: m2, contourFitRatio: N2, contourFitScore: R2 };
|
|
622
|
+
}
|
|
623
|
+
async function _(A2, I2, g2, C2, Q2 = {}) {
|
|
624
|
+
const t2 = Q2.debug ? {} : { _timingsOnly: true }, i2 = [];
|
|
625
|
+
t2 && !t2._timingsOnly && (t2.preprocessing = { scaledDimensions: { width: I2, height: g2 }, scaleFactor: C2, maxProcessingDimension: Q2.maxProcessingDimension || 800 });
|
|
626
|
+
const E2 = (function(A3 = {}) {
|
|
627
|
+
const I3 = A3.dilationKernelSize || 3, g3 = A3.dilationIterations || 1, B2 = void 0 === A3.applyDilation || A3.applyDilation, C3 = [{ name: "default", lowThreshold: A3.lowThreshold, highThreshold: A3.highThreshold, dilationKernelSize: I3, dilationIterations: g3, applyDilation: B2 }];
|
|
628
|
+
if (false === A3.enableDetectionCascade) return C3;
|
|
629
|
+
C3.push({ name: "connect-edges", lowThreshold: A3.lowThreshold, highThreshold: A3.highThreshold, dilationKernelSize: Math.max(I3, 5), dilationIterations: Math.max(g3, 2), applyDilation: true }), C3.push({ name: "no-dilation", lowThreshold: A3.lowThreshold, highThreshold: A3.highThreshold, dilationKernelSize: I3, dilationIterations: g3, applyDilation: false }), void 0 === A3.lowThreshold && void 0 === A3.highThreshold && C3.push({ name: "fixed-mid-thresholds", lowThreshold: 60, highThreshold: 180, dilationKernelSize: I3, dilationIterations: g3, applyDilation: B2 });
|
|
630
|
+
const Q3 = [], t3 = /* @__PURE__ */ new Set();
|
|
631
|
+
for (const i3 of C3) {
|
|
632
|
+
const A4 = [i3.lowThreshold, i3.highThreshold, i3.dilationKernelSize, i3.dilationIterations, i3.applyDilation].join(":");
|
|
633
|
+
t3.has(A4) || (t3.add(A4), Q3.push(i3));
|
|
634
|
+
}
|
|
635
|
+
return Q3;
|
|
636
|
+
})(Q2), e2 = [], o2 = async (t3, E3) => {
|
|
637
|
+
const e3 = t3.name || `pass-${E3 + 1}`, o3 = 0 === E3 ? "" : ` (${e3})`, n3 = Q2.debug ? {} : { _timingsOnly: true }, a3 = await M(A2, { width: I2, height: g2, lowThreshold: t3.lowThreshold, highThreshold: t3.highThreshold, dilationKernelSize: t3.dilationKernelSize, dilationIterations: t3.dilationIterations, applyDilation: t3.applyDilation, debug: n3, skipGrayscale: true, useWasmBlur: true, useWasmHysteresis: Q2.useWasmHysteresis, useWasmFullCanny: Q2.useWasmFullCanny });
|
|
638
|
+
n3.timings && n3.timings.forEach((A3) => {
|
|
639
|
+
"Edge Detection Total" !== A3.step && i2.push({ step: `${A3.step}${o3}`, ms: A3.ms });
|
|
640
|
+
});
|
|
641
|
+
let s3 = performance.now();
|
|
642
|
+
const c3 = B(a3, { minArea: (Q2.minArea || 1e3) / (C2 * C2), width: I2, height: g2 });
|
|
643
|
+
i2.push({ step: `Find Contours${o3}`, ms: (performance.now() - s3).toFixed(2) }), s3 = performance.now();
|
|
644
|
+
const { best: r3, candidates: h3 } = (function(A3, I3, g3, B2, C3 = {}) {
|
|
645
|
+
const Q3 = C3.maxCandidateContours || 12, t4 = A3.slice(0, Q3).map((A4, Q4) => ({ rankByArea: Q4, ...z(A4, I3, g3, B2, C3) })).sort(O);
|
|
646
|
+
return { best: t4[0] || null, candidates: t4 };
|
|
647
|
+
})(c3, a3, I2, g2, Q2);
|
|
648
|
+
return i2.push({ step: `Corner Detection${o3}`, ms: (performance.now() - s3).toFixed(2) }), { name: e3, params: { lowThreshold: t3.lowThreshold, highThreshold: t3.highThreshold, dilationKernelSize: t3.dilationKernelSize, dilationIterations: t3.dilationIterations, applyDilation: t3.applyDilation }, contours: c3, best: r3, candidates: h3 };
|
|
649
|
+
}, n2 = await o2(E2[0], 0);
|
|
650
|
+
if (e2.push(n2), (function(A3, I3 = {}) {
|
|
651
|
+
if (false === I3.enableDetectionCascade) return false;
|
|
652
|
+
if (!A3 || !A3.corners) return true;
|
|
653
|
+
const g3 = void 0 !== I3.minCascadeTriggerConfidence ? I3.minCascadeTriggerConfidence : 0.68;
|
|
654
|
+
return !A3.isValid || A3.confidence < g3 || A3.approxCount > 5 || A3.rightAngleScore < 0.55 || A3.contourFitRatio < 0.14;
|
|
655
|
+
})(n2.best, Q2)) for (let B2 = 1; B2 < E2.length; B2++) e2.push(await o2(E2[B2], B2));
|
|
656
|
+
const a2 = [];
|
|
657
|
+
for (const B2 of e2) for (const A3 of B2.candidates) a2.push({ ...A3, passName: B2.name, passParams: B2.params });
|
|
658
|
+
a2.sort(O);
|
|
659
|
+
const s2 = a2[0] || null, c2 = a2;
|
|
660
|
+
if (!s2 || !s2.corners) return { success: false, message: "No document detected", debug: t2._timingsOnly ? null : t2, timings: i2 };
|
|
661
|
+
t2 && !t2._timingsOnly && (t2.passes = e2.map((A3) => ({ name: A3.name, params: A3.params, contourCount: A3.contours.length, bestCandidate: A3.best ? { score: A3.best.score, confidence: A3.best.confidence, isValid: A3.best.isValid, approxCount: A3.best.approxCount, coverageRatio: A3.best.coverageRatio, fillRatio: A3.best.fillRatio, rightAngleScore: A3.best.rightAngleScore, contourFitRatio: A3.best.contourFitRatio } : null })), t2.candidates = c2.map((A3) => ({ passName: A3.passName, rankByArea: A3.rankByArea, area: A3.area, fillRatio: A3.fillRatio, coverageRatio: A3.coverageRatio, cornersArea: A3.cornersArea, approxCount: A3.approxCount, convex: A3.convex, edgeSupport: A3.edgeSupport, aspectRatio: A3.aspectRatio, minSide: A3.minSide, rightAngleScore: A3.rightAngleScore, oppositeSideConsistency: A3.oppositeSideConsistency, contourFitRatio: A3.contourFitRatio, contourFitScore: A3.contourFitScore, score: A3.score, confidence: A3.confidence, isValid: A3.isValid })), t2.selectedCandidate = c2[0] ? { passName: c2[0].passName, rankByArea: c2[0].rankByArea, area: c2[0].area, fillRatio: c2[0].fillRatio, coverageRatio: c2[0].coverageRatio, approxCount: c2[0].approxCount, edgeSupport: c2[0].edgeSupport, aspectRatio: c2[0].aspectRatio, minSide: c2[0].minSide, rightAngleScore: c2[0].rightAngleScore, oppositeSideConsistency: c2[0].oppositeSideConsistency, contourFitRatio: c2[0].contourFitRatio, score: c2[0].score, confidence: c2[0].confidence, isValid: c2[0].isValid } : null);
|
|
662
|
+
const r2 = s2.corners, h2 = s2.contour;
|
|
663
|
+
let l2 = r2;
|
|
664
|
+
return 1 !== C2 && (l2 = { topLeft: { x: r2.topLeft.x * C2, y: r2.topLeft.y * C2 }, topRight: { x: r2.topRight.x * C2, y: r2.topRight.y * C2 }, bottomRight: { x: r2.bottomRight.x * C2, y: r2.bottomRight.y * C2 }, bottomLeft: { x: r2.bottomLeft.x * C2, y: r2.bottomLeft.y * C2 } }), { success: true, contour: h2, corners: l2, confidence: s2.confidence, debug: t2._timingsOnly ? null : t2, timings: i2 };
|
|
665
|
+
}
|
|
666
|
+
function $(A2, I2, g2) {
|
|
667
|
+
const { topLeft: B2, topRight: C2, bottomRight: Q2, bottomLeft: t2 } = g2, i2 = Math.hypot(Q2.x - t2.x, Q2.y - t2.y), E2 = Math.hypot(C2.x - B2.x, C2.y - B2.y), e2 = Math.round(Math.max(i2, E2)), o2 = Math.hypot(C2.x - Q2.x, C2.y - Q2.y), n2 = Math.hypot(B2.x - t2.x, B2.y - t2.y), a2 = Math.round(Math.max(o2, n2));
|
|
668
|
+
A2.canvas.width = e2, A2.canvas.height = a2, (function(A3, I3, g3, B3, C3) {
|
|
669
|
+
const Q3 = I3 && "number" == typeof I3.width && "number" == typeof I3.height && I3.data, t3 = I3.width || I3.naturalWidth, i3 = I3.height || I3.naturalHeight, E3 = document.createElement("canvas");
|
|
670
|
+
E3.width = t3, E3.height = i3;
|
|
671
|
+
const e3 = E3.getContext("2d", { willReadFrequently: true });
|
|
672
|
+
Q3 ? e3.putImageData(I3, 0, 0) : e3.drawImage(I3, 0, 0, t3, i3);
|
|
673
|
+
const o3 = e3.getImageData(0, 0, t3, i3).data, n3 = (function(A4) {
|
|
674
|
+
const I4 = A4[0][0], g4 = A4[0][1], B4 = A4[0][2], C4 = A4[1][0], Q4 = A4[1][1], t4 = A4[1][2], i4 = A4[2][0], E4 = A4[2][1], e4 = A4[2][2], o4 = Q4 * e4 - t4 * E4, n4 = -(C4 * e4 - t4 * i4), a4 = C4 * E4 - Q4 * i4, s3 = -(g4 * e4 - B4 * E4), c3 = I4 * e4 - B4 * i4, r3 = -(I4 * E4 - g4 * i4), h3 = g4 * t4 - B4 * Q4, l3 = -(I4 * t4 - B4 * C4), y3 = I4 * Q4 - g4 * C4, D3 = I4 * o4 + g4 * n4 + B4 * a4;
|
|
675
|
+
if (0 === D3) throw new Error("Singular matrix");
|
|
676
|
+
return [[o4 / D3, s3 / D3, h3 / D3], [n4 / D3, c3 / D3, l3 / D3], [a4 / D3, r3 / D3, y3 / D3]];
|
|
677
|
+
})(g3), a3 = n3[0][0], s2 = n3[0][1], c2 = n3[0][2], r2 = n3[1][0], h2 = n3[1][1], l2 = n3[1][2], y2 = n3[2][0], D2 = n3[2][1], w2 = n3[2][2], d2 = A3.createImageData(B3, C3), f2 = d2.data, u2 = t3 - 1, m2 = i3 - 1;
|
|
678
|
+
for (let N2 = 0; N2 < C3; N2++) {
|
|
679
|
+
const A4 = s2 * N2 + c2, I4 = h2 * N2 + l2, g4 = D2 * N2 + w2;
|
|
680
|
+
for (let C4 = 0; C4 < B3; C4++) {
|
|
681
|
+
const Q4 = 1 / (y2 * C4 + g4), i4 = (a3 * C4 + A4) * Q4, E4 = (r2 * C4 + I4) * Q4, e4 = i4 < 0 ? 0 : i4 > u2 ? u2 : i4, n4 = E4 < 0 ? 0 : E4 > m2 ? m2 : E4, s3 = 0 | e4, c3 = 0 | n4, h3 = s3 < u2 ? s3 + 1 : s3, l3 = c3 < m2 ? c3 + 1 : c3, D3 = e4 - s3, w3 = n4 - c3, d3 = 1 - D3, R2 = 1 - w3, p2 = d3 * R2, F2 = D3 * R2, J2 = d3 * w3, G2 = D3 * w3, k2 = c3 * t3 + s3 << 2, S2 = c3 * t3 + h3 << 2, M2 = l3 * t3 + s3 << 2, b = l3 * t3 + h3 << 2, L = N2 * B3 + C4 << 2;
|
|
682
|
+
f2[L] = o3[k2] * p2 + o3[S2] * F2 + o3[M2] * J2 + o3[b] * G2 + 0.5 | 0, f2[L + 1] = o3[k2 + 1] * p2 + o3[S2 + 1] * F2 + o3[M2 + 1] * J2 + o3[b + 1] * G2 + 0.5 | 0, f2[L + 2] = o3[k2 + 2] * p2 + o3[S2 + 2] * F2 + o3[M2 + 2] * J2 + o3[b + 2] * G2 + 0.5 | 0, f2[L + 3] = 255;
|
|
683
|
+
}
|
|
684
|
+
}
|
|
685
|
+
A3.putImageData(d2, 0, 0);
|
|
686
|
+
})(A2, I2, (function(A3, I3) {
|
|
687
|
+
const g3 = (function(A4, I4) {
|
|
688
|
+
const g4 = A4.length, B3 = A4[0].length, C3 = A4.map((A5) => A5.slice()), Q3 = I4.slice();
|
|
689
|
+
for (let i3 = 0; i3 < B3; i3++) {
|
|
690
|
+
let A5 = i3;
|
|
691
|
+
for (let I5 = i3 + 1; I5 < g4; I5++) Math.abs(C3[I5][i3]) > Math.abs(C3[A5][i3]) && (A5 = I5);
|
|
692
|
+
[C3[i3], C3[A5]] = [C3[A5], C3[i3]], [Q3[i3], Q3[A5]] = [Q3[A5], Q3[i3]];
|
|
693
|
+
for (let I5 = i3 + 1; I5 < g4; I5++) {
|
|
694
|
+
const A6 = C3[I5][i3] / C3[i3][i3];
|
|
695
|
+
for (let g5 = i3; g5 < B3; g5++) C3[I5][g5] -= A6 * C3[i3][g5];
|
|
696
|
+
Q3[I5] -= A6 * Q3[i3];
|
|
697
|
+
}
|
|
698
|
+
}
|
|
699
|
+
const t3 = new Array(B3);
|
|
700
|
+
for (let i3 = B3 - 1; i3 >= 0; i3--) {
|
|
701
|
+
let A5 = Q3[i3];
|
|
702
|
+
for (let I5 = i3 + 1; I5 < B3; I5++) A5 -= C3[i3][I5] * t3[I5];
|
|
703
|
+
t3[i3] = A5 / C3[i3][i3];
|
|
704
|
+
}
|
|
705
|
+
return t3;
|
|
706
|
+
})((function(A4) {
|
|
707
|
+
const g4 = [];
|
|
708
|
+
for (let B3 = 0; B3 < 4; B3++) {
|
|
709
|
+
const [C3, Q3] = A4[B3];
|
|
710
|
+
g4.push([C3, Q3, 1, 0, 0, 0, -C3 * I3[B3][0], -Q3 * I3[B3][0]]), g4.push([0, 0, 0, C3, Q3, 1, -C3 * I3[B3][1], -Q3 * I3[B3][1]]);
|
|
711
|
+
}
|
|
712
|
+
return g4;
|
|
713
|
+
})(A3), [I3[0][0], I3[0][1], I3[1][0], I3[1][1], I3[2][0], I3[2][1], I3[3][0], I3[3][1]]);
|
|
714
|
+
return [[g3[0], g3[1], g3[2]], [g3[3], g3[4], g3[5]], [g3[6], g3[7], 1]];
|
|
715
|
+
})([[B2.x, B2.y], [C2.x, C2.y], [Q2.x, Q2.y], [t2.x, t2.y]], [[0, 0], [e2 - 1, 0], [e2 - 1, a2 - 1], [0, a2 - 1]]), e2, a2);
|
|
716
|
+
}
|
|
717
|
+
async function IA(A2, I2 = {}) {
|
|
718
|
+
const g2 = [], B2 = performance.now(), C2 = I2.mode || "detect", Q2 = I2.output || "canvas", t2 = I2.maxProcessingDimension || 800;
|
|
719
|
+
let i2, E2, e2, o2;
|
|
720
|
+
if ("ml" === (I2.detector || "classical")) {
|
|
721
|
+
E2 = performance.now();
|
|
722
|
+
const { detectDocumentMl: B3 } = await import("./scanic-ml-stub-S2OZ6HEF.js");
|
|
723
|
+
i2 = await B3(A2, I2.ml || {}), g2.push({ step: "ML Detection Total", ms: (performance.now() - E2).toFixed(2) }), i2.timings && i2.timings.forEach((A3) => g2.push(A3));
|
|
724
|
+
} else {
|
|
725
|
+
E2 = performance.now();
|
|
726
|
+
const { grayscaleData: B3, scaleFactor: C3, scaledDimensions: Q3 } = await (async function(A3, I3 = 800) {
|
|
727
|
+
let g3, B4;
|
|
728
|
+
const C4 = A3 && "number" == typeof A3.width && "number" == typeof A3.height && A3.data;
|
|
729
|
+
if (C4) g3 = A3.width, B4 = A3.height;
|
|
730
|
+
else {
|
|
731
|
+
if (!A3) throw new Error("No image provided");
|
|
732
|
+
g3 = A3.width || A3.naturalWidth, B4 = A3.height || A3.naturalHeight;
|
|
733
|
+
}
|
|
734
|
+
const Q4 = Math.max(g3, B4);
|
|
735
|
+
let t3, i3, E3;
|
|
736
|
+
if (Q4 <= I3) t3 = g3, i3 = B4, E3 = 1;
|
|
737
|
+
else {
|
|
738
|
+
const A4 = I3 / Q4;
|
|
739
|
+
t3 = Math.round(g3 * A4), i3 = Math.round(B4 * A4), E3 = 1 / A4;
|
|
740
|
+
}
|
|
741
|
+
const e3 = "undefined" != typeof OffscreenCanvas, o3 = e3 ? new OffscreenCanvas(t3, i3) : document.createElement("canvas");
|
|
742
|
+
e3 || (o3.width = t3, o3.height = i3);
|
|
743
|
+
const n3 = o3.getContext("2d", { willReadFrequently: true });
|
|
744
|
+
if (n3.imageSmoothingEnabled = true, n3.imageSmoothingQuality = "medium", C4) {
|
|
745
|
+
const I4 = e3 ? new OffscreenCanvas(g3, B4) : document.createElement("canvas");
|
|
746
|
+
e3 || (I4.width = g3, I4.height = B4), I4.getContext("2d").putImageData(A3, 0, 0), n3.drawImage(I4, 0, 0, g3, B4, 0, 0, t3, i3);
|
|
747
|
+
} else n3.drawImage(A3, 0, 0, g3, B4, 0, 0, t3, i3);
|
|
748
|
+
const a2 = n3.getImageData(0, 0, t3, i3), s2 = a2.data, c2 = new Uint8ClampedArray(t3 * i3);
|
|
749
|
+
for (let r2 = 0, h2 = 0; r2 < s2.length; r2 += 4, h2++) {
|
|
750
|
+
const A4 = 54 * s2[r2] + 183 * s2[r2 + 1] + 19 * s2[r2 + 2] >> 8;
|
|
751
|
+
c2[h2] = A4, s2[r2] = s2[r2 + 1] = s2[r2 + 2] = A4;
|
|
752
|
+
}
|
|
753
|
+
return { grayscaleData: c2, imageData: a2, scaleFactor: E3, originalDimensions: { width: g3, height: B4 }, scaledDimensions: { width: t3, height: i3 } };
|
|
754
|
+
})(A2, t2);
|
|
755
|
+
g2.push({ step: "Image Prep + Scale + Gray", ms: (performance.now() - E2).toFixed(2) }), i2 = await _(B3, Q3.width, Q3.height, C3, I2), i2.timings && i2.timings.forEach((A3) => g2.push(A3));
|
|
756
|
+
}
|
|
757
|
+
if (!i2.success) {
|
|
758
|
+
const A3 = performance.now();
|
|
759
|
+
return g2.unshift({ step: "Total", ms: (A3 - B2).toFixed(2) }), { output: null, corners: null, contour: null, confidence: i2.confidence || null, score: i2.score ?? null, debug: i2.debug, success: false, message: i2.message || "No document detected", timings: g2 };
|
|
760
|
+
}
|
|
761
|
+
"detect" === C2 ? o2 = null : "extract" === C2 && (E2 = performance.now(), e2 = document.createElement("canvas"), $(e2.getContext("2d"), A2, i2.corners), g2.push({ step: "Perspective Transform", ms: (performance.now() - E2).toFixed(2) })), "detect" !== C2 && e2 && (E2 = performance.now(), o2 = "canvas" === Q2 ? e2 : "imagedata" === Q2 ? e2.getContext("2d").getImageData(0, 0, e2.width, e2.height) : "dataurl" === Q2 ? e2.toDataURL() : e2, g2.push({ step: "Output Conversion", ms: (performance.now() - E2).toFixed(2) }));
|
|
762
|
+
const n2 = performance.now();
|
|
763
|
+
return g2.unshift({ step: "Total", ms: (n2 - B2).toFixed(2) }), { output: o2, corners: i2.corners, contour: i2.contour ?? null, confidence: i2.confidence || null, score: i2.score ?? null, debug: i2.debug, success: true, message: "Document detected", timings: g2 };
|
|
764
|
+
}
|
|
765
|
+
|
|
766
|
+
// src/core/doc/detector-scanic.ts
|
|
767
|
+
var SCANIC_VERSION = "1.5.0";
|
|
768
|
+
var DOC_DETECT_MIN_CONFIDENCE = 0.35;
|
|
769
|
+
async function detectQuad(image) {
|
|
770
|
+
const result = await IA(image, {
|
|
771
|
+
mode: "detect",
|
|
772
|
+
detector: "classical",
|
|
773
|
+
maxProcessingDimension: DOC_DETECT_WIDTH
|
|
774
|
+
});
|
|
775
|
+
if (!result.success || result.corners === null) return null;
|
|
776
|
+
if (typeof result.confidence === "number" && result.confidence < DOC_DETECT_MIN_CONFIDENCE) {
|
|
777
|
+
return null;
|
|
778
|
+
}
|
|
779
|
+
return result.corners;
|
|
780
|
+
}
|
|
781
|
+
export {
|
|
782
|
+
DOC_DETECT_MIN_CONFIDENCE,
|
|
783
|
+
DOC_DETECT_WIDTH,
|
|
784
|
+
SCANIC_VERSION,
|
|
785
|
+
detectQuad
|
|
786
|
+
};
|
|
787
|
+
//# sourceMappingURL=detector-scanic-4C6IEW2K.js.map
|