linearly 0.1.0 → 0.3.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/lib/mat2d.js CHANGED
@@ -1,239 +1,301 @@
1
- import * as Common from './common';
2
- /**
3
- * 2x3 Matrix
4
- * @module mat2d
5
- * @description
6
- * A mat2d contains six elements defined as:
7
- * <pre>
8
- * [a, b,
9
- * c, d,
10
- * tx, ty]
11
- * </pre>
12
- * This is a short form for the 3x3 matrix:
13
- * <pre>
14
- * [a, b, 0,
15
- * c, d, 0,
16
- * tx, ty, 1]
17
- * </pre>
18
- * The last column is ignored so the array is shorter and operations are faster.
19
- */
20
- /**
21
- * The identity matrix of mat2d
22
- */
23
- // prettier-ignore
24
- export const identity = Object.freeze([
25
- 1, 0,
26
- 0, 1,
27
- 0, 0
28
- ]);
29
- export const zero = Object.freeze([0, 0, 0, 0, 0, 0]);
30
- /**
31
- * Inverts a mat2d
32
- */
33
- export function invert(a) {
34
- const [aa, ab, ac, ad, atx, aty] = a;
35
- const det = aa * ad - ab * ac;
36
- if (!det) {
37
- return null;
38
- }
39
- const detinv = 1 / det;
40
- // prettier-ignore
41
- return [
42
- ad * detinv, -ab * detinv,
43
- -ac * detinv, aa * detinv,
44
- (ac * aty - ad * atx) * detinv,
45
- (ab * atx - aa * aty) * detinv,
46
- ];
47
- }
48
- /**
49
- * Calculates the determinant of a mat2d
50
- */
51
- export function determinant(a) {
52
- return a[0] * a[3] - a[1] * a[2];
53
- }
54
- /**
55
- * Multiplies two mat2d's
56
- */
57
- export function multiply(a, b) {
58
- const [a0, a1, a2, a3, a4, a5] = a;
59
- const [b0, b1, b2, b3, b4, b5] = b;
60
- // prettier-ignore
61
- return [
62
- a0 * b0 + a2 * b1, a1 * b0 + a3 * b1,
63
- a0 * b2 + a2 * b3, a1 * b2 + a3 * b3,
64
- a0 * b4 + a2 * b5 + a4,
65
- a1 * b4 + a3 * b5 + a5,
66
- ];
67
- }
68
- /**
69
- * Rotates a mat2d by the given angle
70
- */
71
- export function rotate(a, rad) {
72
- const [a0, a1, a2, a3, tx, ty] = a;
73
- const s = Math.sin(rad);
74
- const c = Math.cos(rad);
75
- // prettier-ignore
76
- return [
77
- a0 * c + a2 * s, a1 * c + a3 * s,
78
- a0 * -s + a2 * c, a1 * -s + a3 * c,
79
- tx, ty
80
- ];
81
- }
82
- /**
83
- * Scales the mat2d by the dimensions in the given vec2
84
- **/
85
- export function scale(a, v) {
86
- const [a0, a1, a2, a3, tx, ty] = a;
87
- const [sx, sy] = v;
88
- // prettier-ignore
89
- return [
90
- a0 * sx, a1 * sx,
91
- a2 * sy, a3 * sy,
92
- tx, ty
93
- ];
94
- }
95
- /**
96
- * Translates the mat2d by the dimensions in the given vec2
97
- **/
98
- export function translate(m, v) {
99
- const [a, b, c, d, tx, ty] = m;
100
- const [x, y] = v;
101
- // prettier-ignore
102
- return [
103
- a, b,
104
- c, d,
105
- a * x + c * y + tx,
106
- b * x + d * y + ty
107
- ];
108
- }
109
- /**
110
- * Creates a matrix from a given angle
111
- * This is equivalent to (but much faster than):
112
- */
113
- export function fromRotation(rad) {
114
- const s = Math.sin(rad);
115
- const c = Math.cos(rad);
116
- // prettier-ignore
117
- return [
118
- c, s,
119
- -s, c,
120
- 0, 0,
121
- ];
122
- }
123
- /**
124
- * Creates a matrix from a vector scaling
125
- */
126
- export function fromScaling(v) {
127
- const [x, y] = v;
1
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
2
+ if (k2 === undefined) k2 = k;
3
+ var desc = Object.getOwnPropertyDescriptor(m, k);
4
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
5
+ desc = { enumerable: true, get: function() { return m[k]; } };
6
+ }
7
+ Object.defineProperty(o, k2, desc);
8
+ }) : (function(o, m, k, k2) {
9
+ if (k2 === undefined) k2 = k;
10
+ o[k2] = m[k];
11
+ }));
12
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
13
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
14
+ }) : function(o, v) {
15
+ o["default"] = v;
16
+ });
17
+ var __importStar = (this && this.__importStar) || function (mod) {
18
+ if (mod && mod.__esModule) return mod;
19
+ var result = {};
20
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
21
+ __setModuleDefault(result, mod);
22
+ return result;
23
+ };
24
+ (function (factory) {
25
+ if (typeof module === "object" && typeof module.exports === "object") {
26
+ var v = factory(require, exports);
27
+ if (v !== undefined) module.exports = v;
28
+ }
29
+ else if (typeof define === "function" && define.amd) {
30
+ define(["require", "exports", "./common"], factory);
31
+ }
32
+ })(function (require, exports) {
33
+ "use strict";
34
+ Object.defineProperty(exports, "__esModule", { value: true });
35
+ exports.equals = exports.exactEquals = exports.multiplyScalarAndAdd = exports.multiplyScalar = exports.subtract = exports.add = exports.frob = exports.fromSkew = exports.fromTranslation = exports.fromScaling = exports.fromRotation = exports.skew = exports.translate = exports.scale = exports.rotate = exports.multiply = exports.determinant = exports.invert = exports.zero = exports.identity = exports.of = void 0;
36
+ const Common = __importStar(require("./common"));
128
37
  // prettier-ignore
129
- return [
130
- x, 0,
131
- 0, y,
132
- 0, 0,
133
- ];
134
- }
135
- /**
136
- * Creates a matrix from a vector translation
137
- */
138
- export function fromTranslation(v) {
139
- const [x, y] = v;
38
+ function of(a, b, c, d, tx, ty) {
39
+ return [a, b, c, d, tx, ty];
40
+ }
41
+ exports.of = of;
42
+ /**
43
+ * The identity matrix of mat2d
44
+ */
140
45
  // prettier-ignore
141
- return [
46
+ exports.identity = Object.freeze([
142
47
  1, 0,
143
48
  0, 1,
144
- x, y,
145
- ];
146
- }
147
- /**
148
- * Returns Frobenius norm of a mat2d
149
- */
150
- export function frob(a) {
151
- // prettier-ignore
152
- return Math.sqrt(a[0] ** 2 +
153
- a[1] ** 2 +
154
- a[2] ** 2 +
155
- a[3] ** 2 +
156
- a[4] ** 2 +
157
- a[5] ** 2 + 1);
158
- }
159
- /**
160
- * Adds two mat2d's
161
- */
162
- export function add(a, b) {
163
- return [
164
- a[0] + b[0],
165
- a[1] + b[1],
166
- a[2] + b[2],
167
- a[3] + b[3],
168
- a[4] + b[4],
169
- a[5] + b[5],
170
- ];
171
- }
172
- /**
173
- * Subtracts matrix b from matrix a
174
- */
175
- export function subtract(a, b) {
176
- return [
177
- a[0] - b[0],
178
- a[1] - b[1],
179
- a[2] - b[2],
180
- a[3] - b[3],
181
- a[4] - b[4],
182
- a[5] - b[5],
183
- ];
184
- }
185
- /**
186
- * Multiply each element of the matrix by a scalar.
187
- */
188
- export function multiplyScalar(a, s) {
189
- // prettier-ignore
190
- return [
191
- a[0] * s, a[1] * s,
192
- a[2] * s, a[3] * s,
193
- a[4] * s, a[5] * s,
194
- ];
195
- }
196
- /**
197
- * Adds two mat2d's after multiplying each element of the second operand by a scalar value.
198
- */
199
- export function multiplyScalarAndAdd(a, b, scale) {
200
- return [
201
- a[0] + b[0] * scale,
202
- a[1] + b[1] * scale,
203
- a[2] + b[2] * scale,
204
- a[3] + b[3] * scale,
205
- a[4] + b[4] * scale,
206
- a[5] + b[5] * scale,
207
- ];
208
- }
209
- /**
210
- * Returns whether or not the matrices have exactly the same elements in the same position (when compared with ===)
211
- */
212
- export function exactEquals(a, b) {
213
- return (a[0] === b[0] &&
214
- a[1] === b[1] &&
215
- a[2] === b[2] &&
216
- a[3] === b[3] &&
217
- a[4] === b[4] &&
218
- a[5] === b[5]);
219
- }
220
- /**
221
- * Returns whether or not the matrices have approximately the same elements in the same position.
222
- */
223
- export function equals(a, b) {
224
- const [a0, a1, a2, a3, a4, a5] = a;
225
- const [b0, b1, b2, b3, b4, b5] = b;
226
- return (Math.abs(a0 - b0) <=
227
- Common.EPSILON * Math.max(1, Math.abs(a0), Math.abs(b0)) &&
228
- Math.abs(a1 - b1) <=
229
- Common.EPSILON * Math.max(1, Math.abs(a1), Math.abs(b1)) &&
230
- Math.abs(a2 - b2) <=
231
- Common.EPSILON * Math.max(1, Math.abs(a2), Math.abs(b2)) &&
232
- Math.abs(a3 - b3) <=
233
- Common.EPSILON * Math.max(1, Math.abs(a3), Math.abs(b3)) &&
234
- Math.abs(a4 - b4) <=
235
- Common.EPSILON * Math.max(1, Math.abs(a4), Math.abs(b4)) &&
236
- Math.abs(a5 - b5) <=
237
- Common.EPSILON * Math.max(1, Math.abs(a5), Math.abs(b5)));
238
- }
239
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF0MmQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvbWF0MmQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLE1BQU0sTUFBTSxVQUFVLENBQUE7QUFLbEM7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBaUJHO0FBRUg7O0dBRUc7QUFDSCxrQkFBa0I7QUFDbEIsTUFBTSxDQUFDLE1BQU0sUUFBUSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUM7SUFDckMsQ0FBQyxFQUFFLENBQUM7SUFDSixDQUFDLEVBQUUsQ0FBQztJQUNKLENBQUMsRUFBRSxDQUFDO0NBQ0osQ0FBQyxDQUFBO0FBRUYsTUFBTSxDQUFDLE1BQU0sSUFBSSxHQUFVLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUE7QUFFNUQ7O0dBRUc7QUFDSCxNQUFNLFVBQVUsTUFBTSxDQUFDLENBQVE7SUFDOUIsTUFBTSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFBO0lBRXBDLE1BQU0sR0FBRyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQTtJQUU3QixJQUFJLENBQUMsR0FBRyxFQUFFO1FBQ1QsT0FBTyxJQUFJLENBQUE7S0FDWDtJQUVELE1BQU0sTUFBTSxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUE7SUFFdEIsa0JBQWtCO0lBQ2xCLE9BQU87UUFDSixFQUFFLEdBQUcsTUFBTSxFQUFFLENBQUMsRUFBRSxHQUFHLE1BQU07UUFDMUIsQ0FBQyxFQUFFLEdBQUcsTUFBTSxFQUFHLEVBQUUsR0FBRyxNQUFNO1FBRTFCLENBQUMsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxDQUFDLEdBQUcsTUFBTTtR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
49
+ 0, 0
50
+ ]);
51
+ exports.zero = Object.freeze([0, 0, 0, 0, 0, 0]);
52
+ /**
53
+ * Inverts a mat2d
54
+ */
55
+ function invert(a) {
56
+ const [aa, ab, ac, ad, atx, aty] = a;
57
+ const det = aa * ad - ab * ac;
58
+ if (!det) {
59
+ return null;
60
+ }
61
+ const detinv = 1 / det;
62
+ // prettier-ignore
63
+ return [
64
+ ad * detinv, -ab * detinv,
65
+ -ac * detinv, aa * detinv,
66
+ (ac * aty - ad * atx) * detinv,
67
+ (ab * atx - aa * aty) * detinv,
68
+ ];
69
+ }
70
+ exports.invert = invert;
71
+ /**
72
+ * Calculates the determinant of a mat2d
73
+ */
74
+ function determinant(a) {
75
+ return a[0] * a[3] - a[1] * a[2];
76
+ }
77
+ exports.determinant = determinant;
78
+ /**
79
+ * Multiplies two mat2d's
80
+ */
81
+ function multiply(a, b) {
82
+ const [a0, a1, a2, a3, a4, a5] = a;
83
+ const [b0, b1, b2, b3, b4, b5] = b;
84
+ // prettier-ignore
85
+ return [
86
+ a0 * b0 + a2 * b1, a1 * b0 + a3 * b1,
87
+ a0 * b2 + a2 * b3, a1 * b2 + a3 * b3,
88
+ a0 * b4 + a2 * b5 + a4,
89
+ a1 * b4 + a3 * b5 + a5,
90
+ ];
91
+ }
92
+ exports.multiply = multiply;
93
+ /**
94
+ * Rotates a mat2d by the given angle
95
+ */
96
+ function rotate(a, rad) {
97
+ const [a0, a1, a2, a3, tx, ty] = a;
98
+ const s = Math.sin(rad);
99
+ const c = Math.cos(rad);
100
+ // prettier-ignore
101
+ return [
102
+ a0 * c + a2 * s, a1 * c + a3 * s,
103
+ a0 * -s + a2 * c, a1 * -s + a3 * c,
104
+ tx, ty
105
+ ];
106
+ }
107
+ exports.rotate = rotate;
108
+ /**
109
+ * Scales the mat2d by the dimensions in the given vec2
110
+ **/
111
+ function scale(a, v) {
112
+ const [a0, a1, a2, a3, tx, ty] = a;
113
+ const [sx, sy] = v;
114
+ // prettier-ignore
115
+ return [
116
+ a0 * sx, a1 * sx,
117
+ a2 * sy, a3 * sy,
118
+ tx, ty
119
+ ];
120
+ }
121
+ exports.scale = scale;
122
+ /**
123
+ * Translates the mat2d by the dimensions in the given vec2
124
+ **/
125
+ function translate(m, v) {
126
+ const [a, b, c, d, tx, ty] = m;
127
+ const [x, y] = v;
128
+ // prettier-ignore
129
+ return [
130
+ a, b,
131
+ c, d,
132
+ a * x + c * y + tx,
133
+ b * x + d * y + ty
134
+ ];
135
+ }
136
+ exports.translate = translate;
137
+ /**
138
+ * Apply skew to the mat2d by the given angles
139
+ * https://developer.mozilla.org/en-US/docs/Web/CSS/transform-function/skew
140
+ */
141
+ function skew(m, ax, ay) {
142
+ return multiply(m, fromSkew(ax, ay));
143
+ }
144
+ exports.skew = skew;
145
+ /**
146
+ * Creates a matrix from a given angle
147
+ * This is equivalent to (but much faster than):
148
+ */
149
+ function fromRotation(rad) {
150
+ const s = Math.sin(rad);
151
+ const c = Math.cos(rad);
152
+ // prettier-ignore
153
+ return [
154
+ c, s,
155
+ -s, c,
156
+ 0, 0,
157
+ ];
158
+ }
159
+ exports.fromRotation = fromRotation;
160
+ /**
161
+ * Creates a matrix from a vector scaling
162
+ */
163
+ function fromScaling(v) {
164
+ const [x, y] = v;
165
+ // prettier-ignore
166
+ return [
167
+ x, 0,
168
+ 0, y,
169
+ 0, 0,
170
+ ];
171
+ }
172
+ exports.fromScaling = fromScaling;
173
+ /**
174
+ * Creates a matrix from a vector translation
175
+ */
176
+ function fromTranslation(v) {
177
+ const [x, y] = v;
178
+ // prettier-ignore
179
+ return [
180
+ 1, 0,
181
+ 0, 1,
182
+ x, y,
183
+ ];
184
+ }
185
+ exports.fromTranslation = fromTranslation;
186
+ /**
187
+ * Creates a matrix from a vector skew
188
+ * https://developer.mozilla.org/en-US/docs/Web/CSS/transform-function/skew
189
+ */
190
+ function fromSkew(ax, ay) {
191
+ const x = Math.tan(ax);
192
+ const y = Math.tan(ay);
193
+ // prettier-ignore
194
+ return [
195
+ 1, y,
196
+ x, 1,
197
+ 0, 0,
198
+ ];
199
+ }
200
+ exports.fromSkew = fromSkew;
201
+ /**
202
+ * Returns Frobenius norm of a mat2d
203
+ */
204
+ function frob(a) {
205
+ // prettier-ignore
206
+ return Math.sqrt(a[0] ** 2 +
207
+ a[1] ** 2 +
208
+ a[2] ** 2 +
209
+ a[3] ** 2 +
210
+ a[4] ** 2 +
211
+ a[5] ** 2 + 1);
212
+ }
213
+ exports.frob = frob;
214
+ /**
215
+ * Adds two mat2d's
216
+ */
217
+ function add(a, b) {
218
+ return [
219
+ a[0] + b[0],
220
+ a[1] + b[1],
221
+ a[2] + b[2],
222
+ a[3] + b[3],
223
+ a[4] + b[4],
224
+ a[5] + b[5],
225
+ ];
226
+ }
227
+ exports.add = add;
228
+ /**
229
+ * Subtracts matrix b from matrix a
230
+ */
231
+ function subtract(a, b) {
232
+ return [
233
+ a[0] - b[0],
234
+ a[1] - b[1],
235
+ a[2] - b[2],
236
+ a[3] - b[3],
237
+ a[4] - b[4],
238
+ a[5] - b[5],
239
+ ];
240
+ }
241
+ exports.subtract = subtract;
242
+ /**
243
+ * Multiply each element of the matrix by a scalar.
244
+ */
245
+ function multiplyScalar(a, s) {
246
+ // prettier-ignore
247
+ return [
248
+ a[0] * s, a[1] * s,
249
+ a[2] * s, a[3] * s,
250
+ a[4] * s, a[5] * s,
251
+ ];
252
+ }
253
+ exports.multiplyScalar = multiplyScalar;
254
+ /**
255
+ * Adds two mat2d's after multiplying each element of the second operand by a scalar value.
256
+ */
257
+ function multiplyScalarAndAdd(a, b, scale) {
258
+ return [
259
+ a[0] + b[0] * scale,
260
+ a[1] + b[1] * scale,
261
+ a[2] + b[2] * scale,
262
+ a[3] + b[3] * scale,
263
+ a[4] + b[4] * scale,
264
+ a[5] + b[5] * scale,
265
+ ];
266
+ }
267
+ exports.multiplyScalarAndAdd = multiplyScalarAndAdd;
268
+ /**
269
+ * Returns whether or not the matrices have exactly the same elements in the same position (when compared with ===)
270
+ */
271
+ function exactEquals(a, b) {
272
+ return (a[0] === b[0] &&
273
+ a[1] === b[1] &&
274
+ a[2] === b[2] &&
275
+ a[3] === b[3] &&
276
+ a[4] === b[4] &&
277
+ a[5] === b[5]);
278
+ }
279
+ exports.exactEquals = exactEquals;
280
+ /**
281
+ * Returns whether or not the matrices have approximately the same elements in the same position.
282
+ */
283
+ function equals(a, b) {
284
+ const [a0, a1, a2, a3, a4, a5] = a;
285
+ const [b0, b1, b2, b3, b4, b5] = b;
286
+ return (Math.abs(a0 - b0) <=
287
+ Common.EPSILON * Math.max(1, Math.abs(a0), Math.abs(b0)) &&
288
+ Math.abs(a1 - b1) <=
289
+ Common.EPSILON * Math.max(1, Math.abs(a1), Math.abs(b1)) &&
290
+ Math.abs(a2 - b2) <=
291
+ Common.EPSILON * Math.max(1, Math.abs(a2), Math.abs(b2)) &&
292
+ Math.abs(a3 - b3) <=
293
+ Common.EPSILON * Math.max(1, Math.abs(a3), Math.abs(b3)) &&
294
+ Math.abs(a4 - b4) <=
295
+ Common.EPSILON * Math.max(1, Math.abs(a4), Math.abs(b4)) &&
296
+ Math.abs(a5 - b5) <=
297
+ Common.EPSILON * Math.max(1, Math.abs(a5), Math.abs(b5)));
298
+ }
299
+ exports.equals = equals;
300
+ });
301
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF0MmQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvbWF0MmQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7SUFBQSxpREFBa0M7SUF3QmxDLGtCQUFrQjtJQUNsQixTQUFnQixFQUFFLENBQ2pCLENBQVMsRUFBRyxDQUFTLEVBQ3JCLENBQVMsRUFBRyxDQUFTLEVBQ3JCLEVBQVUsRUFBRSxFQUFVO1FBRXRCLE9BQU8sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFBO0lBQzVCLENBQUM7SUFORCxnQkFNQztJQUVEOztPQUVHO0lBQ0gsa0JBQWtCO0lBQ0wsUUFBQSxRQUFRLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQztRQUNyQyxDQUFDLEVBQUUsQ0FBQztRQUNKLENBQUMsRUFBRSxDQUFDO1FBQ0osQ0FBQyxFQUFFLENBQUM7S0FDSixDQUFDLENBQUE7SUFFVyxRQUFBLElBQUksR0FBVSxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFBO0lBRTVEOztPQUVHO0lBQ0gsU0FBZ0IsTUFBTSxDQUFDLENBQVE7UUFDOUIsTUFBTSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFBO1FBRXBDLE1BQU0sR0FBRyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQTtRQUU3QixJQUFJLENBQUMsR0FBRyxFQUFFO1lBQ1QsT0FBTyxJQUFJLENBQUE7U0FDWDtRQUVELE1BQU0sTUFBTSxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUE7UUFFdEIsa0JBQWtCO1FBQ2xCLE9B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