linearly 0.1.0 → 0.2.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/mat4.js CHANGED
@@ -1,1176 +1,1252 @@
1
- import * as Common from './common';
2
- /**
3
- * 4x4 Matrix<br>Format: column-major, when typed out it looks like row-major<br>The matrices are being post multiplied.
4
- */
5
- /**
6
- * The identity matrix of mat4
7
- */
8
- // prettier-ignore
9
- export const identity = Object.freeze([
10
- 1, 0, 0, 0,
11
- 0, 1, 0, 0,
12
- 0, 0, 1, 0,
13
- 0, 0, 0, 1,
14
- ]);
15
- export const zero = Object.freeze([
16
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
17
- ]);
18
- /**
19
- * Transpose the values of a mat4
20
- */
21
- export function transpose(a) {
22
- // prettier-ignore
23
- return [
24
- a[0], a[4], a[8], a[12],
25
- a[1], a[5], a[9], a[13],
26
- a[2], a[6], a[10], a[14],
27
- a[3], a[7], a[11], a[15],
28
- ];
29
- }
30
- /**
31
- * Inverts a mat4
32
- */
33
- export function invert(a) {
34
- // prettier-ignore
35
- const [a00, a01, a02, a03, a10, a11, a12, a13, a20, a21, a22, a23, a30, a31, a32, a33] = a;
36
- const b00 = a00 * a11 - a01 * a10;
37
- const b01 = a00 * a12 - a02 * a10;
38
- const b02 = a00 * a13 - a03 * a10;
39
- const b03 = a01 * a12 - a02 * a11;
40
- const b04 = a01 * a13 - a03 * a11;
41
- const b05 = a02 * a13 - a03 * a12;
42
- const b06 = a20 * a31 - a21 * a30;
43
- const b07 = a20 * a32 - a22 * a30;
44
- const b08 = a20 * a33 - a23 * a30;
45
- const b09 = a21 * a32 - a22 * a31;
46
- const b10 = a21 * a33 - a23 * a31;
47
- const b11 = a22 * a33 - a23 * a32;
48
- // Calculate the determinant
49
- const det = b00 * b11 - b01 * b10 + b02 * b09 + b03 * b08 - b04 * b07 + b05 * b06;
50
- if (!det) {
51
- return null;
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]; } };
52
6
  }
53
- const detinv = 1 / det;
54
- return [
55
- (a11 * b11 - a12 * b10 + a13 * b09) * detinv,
56
- (a02 * b10 - a01 * b11 - a03 * b09) * detinv,
57
- (a31 * b05 - a32 * b04 + a33 * b03) * detinv,
58
- (a22 * b04 - a21 * b05 - a23 * b03) * detinv,
59
- (a12 * b08 - a10 * b11 - a13 * b07) * detinv,
60
- (a00 * b11 - a02 * b08 + a03 * b07) * detinv,
61
- (a32 * b02 - a30 * b05 - a33 * b01) * detinv,
62
- (a20 * b05 - a22 * b02 + a23 * b01) * detinv,
63
- (a10 * b10 - a11 * b08 + a13 * b06) * detinv,
64
- (a01 * b08 - a00 * b10 - a03 * b06) * detinv,
65
- (a30 * b04 - a31 * b02 + a33 * b00) * detinv,
66
- (a21 * b02 - a20 * b04 - a23 * b00) * detinv,
67
- (a11 * b07 - a10 * b09 - a12 * b06) * detinv,
68
- (a00 * b09 - a01 * b07 + a02 * b06) * detinv,
69
- (a31 * b01 - a30 * b03 - a32 * b00) * detinv,
70
- (a20 * b03 - a21 * b01 + a22 * b00) * detinv,
71
- ];
72
- }
73
- /**
74
- * Calculates the adjugate of a mat4
75
- */
76
- export function adjoint(a) {
77
- // prettier-ignore
78
- const [a00, a01, a02, a03, a10, a11, a12, a13, a20, a21, a22, a23, a30, a31, a32, a33] = a;
79
- const b00 = a00 * a11 - a01 * a10;
80
- const b01 = a00 * a12 - a02 * a10;
81
- const b02 = a00 * a13 - a03 * a10;
82
- const b03 = a01 * a12 - a02 * a11;
83
- const b04 = a01 * a13 - a03 * a11;
84
- const b05 = a02 * a13 - a03 * a12;
85
- const b06 = a20 * a31 - a21 * a30;
86
- const b07 = a20 * a32 - a22 * a30;
87
- const b08 = a20 * a33 - a23 * a30;
88
- const b09 = a21 * a32 - a22 * a31;
89
- const b10 = a21 * a33 - a23 * a31;
90
- const b11 = a22 * a33 - a23 * a32;
91
- return [
92
- a11 * b11 - a12 * b10 + a13 * b09,
93
- a02 * b10 - a01 * b11 - a03 * b09,
94
- a31 * b05 - a32 * b04 + a33 * b03,
95
- a22 * b04 - a21 * b05 - a23 * b03,
96
- a12 * b08 - a10 * b11 - a13 * b07,
97
- a00 * b11 - a02 * b08 + a03 * b07,
98
- a32 * b02 - a30 * b05 - a33 * b01,
99
- a20 * b05 - a22 * b02 + a23 * b01,
100
- a10 * b10 - a11 * b08 + a13 * b06,
101
- a01 * b08 - a00 * b10 - a03 * b06,
102
- a30 * b04 - a31 * b02 + a33 * b00,
103
- a21 * b02 - a20 * b04 - a23 * b00,
104
- a11 * b07 - a10 * b09 - a12 * b06,
105
- a00 * b09 - a01 * b07 + a02 * b06,
106
- a31 * b01 - a30 * b03 - a32 * b00,
107
- a20 * b03 - a21 * b01 + a22 * b00,
108
- ];
109
- }
110
- /**
111
- * Calculates the determinant of a mat4
112
- */
113
- export function determinant(a) {
114
- // prettier-ignore
115
- const [a00, a01, a02, a03, a10, a11, a12, a13, a20, a21, a22, a23, a30, a31, a32, a33] = a;
116
- const b0 = a00 * a11 - a01 * a10;
117
- const b1 = a00 * a12 - a02 * a10;
118
- const b2 = a01 * a12 - a02 * a11;
119
- const b3 = a20 * a31 - a21 * a30;
120
- const b4 = a20 * a32 - a22 * a30;
121
- const b5 = a21 * a32 - a22 * a31;
122
- const b6 = a00 * b5 - a01 * b4 + a02 * b3;
123
- const b7 = a10 * b5 - a11 * b4 + a12 * b3;
124
- const b8 = a20 * b2 - a21 * b1 + a22 * b0;
125
- const b9 = a30 * b2 - a31 * b1 + a32 * b0;
126
- // Calculate the determinant
127
- return a13 * b6 - a03 * b7 + a33 * b8 - a23 * b9;
128
- }
129
- /**
130
- * Multiplies two mat4's
131
- */
132
- export function multiply(a, b) {
133
- // prettier-ignore
134
- const [a00, a01, a02, a03, a10, a11, a12, a13, a20, a21, a22, a23, a30, a31, a32, a33] = a;
135
- const out = Array(16);
136
- // Cache only the current line of the second matrix
137
- let [b0, b1, b2, b3] = b;
138
- out[0] = b0 * a00 + b1 * a10 + b2 * a20 + b3 * a30;
139
- out[1] = b0 * a01 + b1 * a11 + b2 * a21 + b3 * a31;
140
- out[2] = b0 * a02 + b1 * a12 + b2 * a22 + b3 * a32;
141
- out[3] = b0 * a03 + b1 * a13 + b2 * a23 + b3 * a33;
142
- b0 = b[4];
143
- b1 = b[5];
144
- b2 = b[6];
145
- b3 = b[7];
146
- out[4] = b0 * a00 + b1 * a10 + b2 * a20 + b3 * a30;
147
- out[5] = b0 * a01 + b1 * a11 + b2 * a21 + b3 * a31;
148
- out[6] = b0 * a02 + b1 * a12 + b2 * a22 + b3 * a32;
149
- out[7] = b0 * a03 + b1 * a13 + b2 * a23 + b3 * a33;
150
- b0 = b[8];
151
- b1 = b[9];
152
- b2 = b[10];
153
- b3 = b[11];
154
- out[8] = b0 * a00 + b1 * a10 + b2 * a20 + b3 * a30;
155
- out[9] = b0 * a01 + b1 * a11 + b2 * a21 + b3 * a31;
156
- out[10] = b0 * a02 + b1 * a12 + b2 * a22 + b3 * a32;
157
- out[11] = b0 * a03 + b1 * a13 + b2 * a23 + b3 * a33;
158
- b0 = b[12];
159
- b1 = b[13];
160
- b2 = b[14];
161
- b3 = b[15];
162
- out[12] = b0 * a00 + b1 * a10 + b2 * a20 + b3 * a30;
163
- out[13] = b0 * a01 + b1 * a11 + b2 * a21 + b3 * a31;
164
- out[14] = b0 * a02 + b1 * a12 + b2 * a22 + b3 * a32;
165
- out[15] = b0 * a03 + b1 * a13 + b2 * a23 + b3 * a33;
166
- return out;
167
- }
168
- /**
169
- * Translate a mat4 by the given vector
170
- *
171
- * @param a the matrix to translate
172
- * @param v vector to translate by
173
- */
174
- export function translate(a, v) {
175
- const [x, y, z] = v;
176
- // prettier-ignore
177
- const [a00, a01, a02, a03, a10, a11, a12, a13, a20, a21, a22, a23] = a;
178
- // prettier-ignore
179
- return [
180
- a00, a01, a02, a03,
181
- a10, a11, a12, a13,
182
- a20, a21, a22, a23,
183
- a00 * x + a10 * y + a20 * z + a[12],
184
- a01 * x + a11 * y + a21 * z + a[13],
185
- a02 * x + a12 * y + a22 * z + a[14],
186
- a03 * x + a13 * y + a23 * z + a[15],
187
- ];
188
- }
189
- /**
190
- * Scales the mat4 by the dimensions in the given vec3 not using vectorization
191
- **/
192
- export function scale(a, v) {
193
- const [x, y, z] = v;
194
- // prettier-ignore
195
- return [
196
- a[0] * x, a[1] * x, a[2] * x, a[3] * x,
197
- a[4] * y, a[5] * y, a[6] * y, a[7] * y,
198
- a[8] * z, a[9] * z, a[10] * z, a[11] * z,
199
- a[12], a[13], a[14], a[15],
200
- ];
201
- }
202
- /**
203
- * Rotates a mat4 by the given angle around the given axis
204
- */
205
- export function rotate(a, rad, axis) {
206
- let [x, y, z] = axis;
207
- const len = Math.sqrt(x * x + y * y + z * z);
208
- if (len < Common.EPSILON) {
209
- return null;
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;
210
28
  }
211
- x /= len;
212
- y /= len;
213
- z /= len;
214
- const s = Math.sin(rad);
215
- const c = Math.cos(rad);
216
- const t = 1 - c;
217
- // prettier-ignore
218
- const [a00, a01, a02, a03, a10, a11, a12, a13, a20, a21, a22, a23] = a;
219
- // Construct the elements of the rotation matrix
220
- const b00 = x * x * t + c;
221
- const b01 = y * x * t + z * s;
222
- const b02 = z * x * t - y * s;
223
- const b10 = x * y * t - z * s;
224
- const b11 = y * y * t + c;
225
- const b12 = z * y * t + x * s;
226
- const b20 = x * z * t + y * s;
227
- const b21 = y * z * t - x * s;
228
- const b22 = z * z * t + c;
229
- // prettier-ignore
230
- return [
231
- a00 * b00 + a10 * b01 + a20 * b02,
232
- a01 * b00 + a11 * b01 + a21 * b02,
233
- a02 * b00 + a12 * b01 + a22 * b02,
234
- a03 * b00 + a13 * b01 + a23 * b02,
235
- a00 * b10 + a10 * b11 + a20 * b12,
236
- a01 * b10 + a11 * b11 + a21 * b12,
237
- a02 * b10 + a12 * b11 + a22 * b12,
238
- a03 * b10 + a13 * b11 + a23 * b12,
239
- a00 * b20 + a10 * b21 + a20 * b22,
240
- a01 * b20 + a11 * b21 + a21 * b22,
241
- a02 * b20 + a12 * b21 + a22 * b22,
242
- a03 * b20 + a13 * b21 + a23 * b22,
243
- a[12], a[13], a[14], a[15],
244
- ];
245
- }
246
- /**
247
- * Rotates a matrix by the given angle around the X axis
248
- */
249
- export function rotateX(a, rad) {
250
- const s = Math.sin(rad);
251
- const c = Math.cos(rad);
252
- const a10 = a[4];
253
- const a11 = a[5];
254
- const a12 = a[6];
255
- const a13 = a[7];
256
- const a20 = a[8];
257
- const a21 = a[9];
258
- const a22 = a[10];
259
- const a23 = a[11];
260
- // prettier-ignore
261
- return [
262
- a[0], a[1], a[2], a[3],
263
- a10 * c + a20 * s, a11 * c + a21 * s, a12 * c + a22 * s, a13 * c + a23 * s,
264
- a20 * c - a10 * s, a21 * c - a11 * s, a22 * c - a12 * s, a23 * c - a13 * s,
265
- a[12], a[13], a[14], a[15],
266
- ];
267
- }
268
- /**
269
- * Rotates a matrix by the given angle around the Y axis
270
- */
271
- export function rotateY(a, rad) {
272
- const s = Math.sin(rad);
273
- const c = Math.cos(rad);
274
- const a00 = a[0];
275
- const a01 = a[1];
276
- const a02 = a[2];
277
- const a03 = a[3];
278
- const a20 = a[8];
279
- const a21 = a[9];
280
- const a22 = a[10];
281
- const a23 = a[11];
282
- // prettier-ignore
283
- return [
284
- a00 * c - a20 * s,
285
- a01 * c - a21 * s,
286
- a02 * c - a22 * s,
287
- a03 * c - a23 * s,
288
- a[4], a[5], a[6], a[7],
289
- a00 * s + a20 * c,
290
- a01 * s + a21 * c,
291
- a02 * s + a22 * c,
292
- a03 * s + a23 * c,
293
- a[12], a[13], a[14], a[15],
294
- ];
295
- }
296
- /**
297
- * Rotates a matrix by the given angle around the Z axis
298
- */
299
- export function rotateZ(a, rad) {
300
- const s = Math.sin(rad);
301
- const c = Math.cos(rad);
302
- const a00 = a[0];
303
- const a01 = a[1];
304
- const a02 = a[2];
305
- const a03 = a[3];
306
- const a10 = a[4];
307
- const a11 = a[5];
308
- const a12 = a[6];
309
- const a13 = a[7];
310
- // prettier-ignore
311
- return [
312
- a00 * c + a10 * s,
313
- a01 * c + a11 * s,
314
- a02 * c + a12 * s,
315
- a03 * c + a13 * s,
316
- a10 * c - a00 * s,
317
- a11 * c - a01 * s,
318
- a12 * c - a02 * s,
319
- a13 * c - a03 * s,
320
- a[8], a[9], a[10], a[11],
321
- a[12], a[13], a[14], a[15],
322
- ];
323
- }
324
- /**
325
- * Creates a matrix from a vector translation
326
- */
327
- export function fromTranslation(v) {
328
- const [x, y, z] = v;
329
- // prettier-ignore
330
- return [
331
- 1, 0, 0, 0,
332
- 0, 1, 0, 0,
333
- 0, 0, 1, 0,
334
- x, y, z, 1,
335
- ];
336
- }
337
- /**
338
- * Creates a matrix from a vector scaling
339
- */
340
- export function fromScaling(v) {
341
- const [x, y, z] = v;
342
- // prettier-ignore
343
- return [
344
- x, 0, 0, 0,
345
- 0, y, 0, 0,
346
- 0, 0, z, 0,
347
- 0, 0, 0, 1
348
- ];
349
- }
350
- /**
351
- * Creates a matrix from a given angle around a given axis
352
- */
353
- export function fromRotation(rad, axis) {
354
- let [x, y, z] = axis;
355
- const len = Math.sqrt(x * x + y * y + z * z);
356
- if (len < Common.EPSILON) {
357
- return null;
29
+ else if (typeof define === "function" && define.amd) {
30
+ define(["require", "exports", "./common"], factory);
358
31
  }
359
- x /= len;
360
- y /= len;
361
- z /= len;
362
- const s = Math.sin(rad);
363
- const c = Math.cos(rad);
364
- const t = 1 - c;
365
- // prettier-ignore
366
- return [
367
- x * x * t + c,
368
- y * x * t + z * s,
369
- z * x * t - y * s,
370
- 0,
371
- x * y * t - z * s,
372
- y * y * t + c,
373
- z * y * t + x * s,
374
- 0,
375
- x * z * t + y * s,
376
- y * z * t - x * s,
377
- z * z * t + c,
378
- 0,
379
- 0, 0, 0, 1,
380
- ];
381
- }
382
- /**
383
- * Creates a matrix from the given angle around the X axis
384
- */
385
- export function fromXRotation(rad) {
386
- const s = Math.sin(rad);
387
- const c = Math.cos(rad);
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.targetTo = exports.lookAt = exports.orthoZO = exports.ortho = exports.orthoNO = exports.perspectiveFromFieldOfView = exports.perspectiveZO = exports.perspective = exports.perspectiveNO = exports.frustum = exports.fromQuat = exports.fromRotationTranslationScaleOrigin = exports.fromRotationTranslationScale = exports.decompose = exports.getRotation = exports.getScaling = exports.getTranslation = exports.fromRotationTranslation = exports.fromZRotation = exports.fromYRotation = exports.fromXRotation = exports.fromRotation = exports.fromScaling = exports.fromTranslation = exports.rotateZ = exports.rotateY = exports.rotateX = exports.rotate = exports.scale = exports.translate = exports.multiply = exports.determinant = exports.adjoint = exports.invert = exports.transpose = exports.zero = exports.identity = void 0;
36
+ const Common = __importStar(require("./common"));
37
+ /**
38
+ * 4x4 Matrix<br>Format: column-major, when typed out it looks like row-major<br>The matrices are being post multiplied.
39
+ */
40
+ /**
41
+ * The identity matrix of mat4
42
+ */
388
43
  // prettier-ignore
389
- return [
44
+ exports.identity = Object.freeze([
390
45
  1, 0, 0, 0,
391
- 0, c, s, 0,
392
- 0, -s, c, 0,
393
- 0, 0, 0, 1
394
- ];
395
- }
396
- /**
397
- * Creates a matrix from the given angle around the Y axis
398
- */
399
- export function fromYRotation(rad) {
400
- const s = Math.sin(rad);
401
- const c = Math.cos(rad);
402
- // prettier-ignore
403
- return [
404
- c, 0, -s, 0,
405
46
  0, 1, 0, 0,
406
- s, 0, c, 0,
407
- 0, 0, 0, 1
408
- ];
409
- }
410
- /**
411
- * Creates a matrix from the given angle around the Z axis
412
- */
413
- export function fromZRotation(rad) {
414
- const s = Math.sin(rad);
415
- const c = Math.cos(rad);
416
- // prettier-ignore
417
- return [
418
- c, s, 0, 0,
419
- -s, c, 0, 0,
420
47
  0, 0, 1, 0,
421
- 0, 0, 0, 1
422
- ];
423
- }
424
- /**
425
- * Creates a matrix from a quaternion rotation and vector translation
426
- */
427
- export function fromRotationTranslation(q, v) {
428
- // Quaternion math
429
- const [x, y, z, w] = q;
430
- const x2 = x + x;
431
- const y2 = y + y;
432
- const z2 = z + z;
433
- const xx = x * x2;
434
- const xy = x * y2;
435
- const xz = x * z2;
436
- const yy = y * y2;
437
- const yz = y * z2;
438
- const zz = z * z2;
439
- const wx = w * x2;
440
- const wy = w * y2;
441
- const wz = w * z2;
442
- return [
443
- 1 - (yy + zz),
444
- xy + wz,
445
- xz - wy,
446
- 0,
447
- xy - wz,
448
- 1 - (xx + zz),
449
- yz + wx,
450
- 0,
451
- xz + wy,
452
- yz - wx,
453
- 1 - (xx + yy),
454
- 0,
455
- v[0],
456
- v[1],
457
- v[2],
458
- 1,
459
- ];
460
- }
461
- /**
462
- * Returns the translation vector component of a transformation
463
- * matrix. If a matrix is built with fromRotationTranslation,
464
- * the returned vector will be the same as the translation vector
465
- * originally supplied.
466
- */
467
- export function getTranslation(mat) {
468
- return [mat[12], mat[13], mat[14]];
469
- }
470
- /**
471
- * Returns the scaling factor component of a transformation
472
- * matrix. If a matrix is built with fromRotationTranslationScale
473
- * with a normalized Quaternion paramter, the returned vector will be
474
- * the same as the scaling vector
475
- * originally supplied.
476
- */
477
- export function getScaling(mat) {
478
- // prettier-ignore
479
- const [m11, m12, m13, , m21, m22, m23, , m31, m32, m33,] = mat;
480
- return [
481
- Math.sqrt(m11 * m11 + m12 * m12 + m13 * m13),
482
- Math.sqrt(m21 * m21 + m22 * m22 + m23 * m23),
483
- Math.sqrt(m31 * m31 + m32 * m32 + m33 * m33),
484
- ];
485
- }
486
- /**
487
- * Returns a quaternion representing the rotational component
488
- * of a transformation matrix. If a matrix is built with
489
- * fromRotationTranslation, the returned quaternion will be the
490
- * same as the quaternion originally supplied.
491
- */
492
- export function getRotation(mat) {
493
- const scaling = getScaling(mat);
494
- const is1 = 1 / scaling[0];
495
- const is2 = 1 / scaling[1];
496
- const is3 = 1 / scaling[2];
497
- const sm11 = mat[0] * is1;
498
- const sm12 = mat[1] * is2;
499
- const sm13 = mat[2] * is3;
500
- const sm21 = mat[4] * is1;
501
- const sm22 = mat[5] * is2;
502
- const sm23 = mat[6] * is3;
503
- const sm31 = mat[8] * is1;
504
- const sm32 = mat[9] * is2;
505
- const sm33 = mat[10] * is3;
506
- const trace = sm11 + sm22 + sm33;
507
- if (trace > 0) {
508
- const S = Math.sqrt(trace + 1) * 2;
509
- return [(sm23 - sm32) / S, (sm31 - sm13) / S, (sm12 - sm21) / S, 0.25 * S];
48
+ 0, 0, 0, 1,
49
+ ]);
50
+ exports.zero = Object.freeze([
51
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
52
+ ]);
53
+ /**
54
+ * Transpose the values of a mat4
55
+ */
56
+ function transpose(a) {
57
+ // prettier-ignore
58
+ return [
59
+ a[0], a[4], a[8], a[12],
60
+ a[1], a[5], a[9], a[13],
61
+ a[2], a[6], a[10], a[14],
62
+ a[3], a[7], a[11], a[15],
63
+ ];
510
64
  }
511
- else if (sm11 > sm22 && sm11 > sm33) {
512
- const S = Math.sqrt(1 + sm11 - sm22 - sm33) * 2;
513
- return [0.25 * S, (sm12 + sm21) / S, (sm31 + sm13) / S, (sm23 - sm32) / S];
65
+ exports.transpose = transpose;
66
+ /**
67
+ * Inverts a mat4
68
+ */
69
+ function invert(a) {
70
+ // prettier-ignore
71
+ const [a00, a01, a02, a03, a10, a11, a12, a13, a20, a21, a22, a23, a30, a31, a32, a33] = a;
72
+ const b00 = a00 * a11 - a01 * a10;
73
+ const b01 = a00 * a12 - a02 * a10;
74
+ const b02 = a00 * a13 - a03 * a10;
75
+ const b03 = a01 * a12 - a02 * a11;
76
+ const b04 = a01 * a13 - a03 * a11;
77
+ const b05 = a02 * a13 - a03 * a12;
78
+ const b06 = a20 * a31 - a21 * a30;
79
+ const b07 = a20 * a32 - a22 * a30;
80
+ const b08 = a20 * a33 - a23 * a30;
81
+ const b09 = a21 * a32 - a22 * a31;
82
+ const b10 = a21 * a33 - a23 * a31;
83
+ const b11 = a22 * a33 - a23 * a32;
84
+ // Calculate the determinant
85
+ const det = b00 * b11 - b01 * b10 + b02 * b09 + b03 * b08 - b04 * b07 + b05 * b06;
86
+ if (!det) {
87
+ return null;
88
+ }
89
+ const detinv = 1 / det;
90
+ return [
91
+ (a11 * b11 - a12 * b10 + a13 * b09) * detinv,
92
+ (a02 * b10 - a01 * b11 - a03 * b09) * detinv,
93
+ (a31 * b05 - a32 * b04 + a33 * b03) * detinv,
94
+ (a22 * b04 - a21 * b05 - a23 * b03) * detinv,
95
+ (a12 * b08 - a10 * b11 - a13 * b07) * detinv,
96
+ (a00 * b11 - a02 * b08 + a03 * b07) * detinv,
97
+ (a32 * b02 - a30 * b05 - a33 * b01) * detinv,
98
+ (a20 * b05 - a22 * b02 + a23 * b01) * detinv,
99
+ (a10 * b10 - a11 * b08 + a13 * b06) * detinv,
100
+ (a01 * b08 - a00 * b10 - a03 * b06) * detinv,
101
+ (a30 * b04 - a31 * b02 + a33 * b00) * detinv,
102
+ (a21 * b02 - a20 * b04 - a23 * b00) * detinv,
103
+ (a11 * b07 - a10 * b09 - a12 * b06) * detinv,
104
+ (a00 * b09 - a01 * b07 + a02 * b06) * detinv,
105
+ (a31 * b01 - a30 * b03 - a32 * b00) * detinv,
106
+ (a20 * b03 - a21 * b01 + a22 * b00) * detinv,
107
+ ];
514
108
  }
515
- else if (sm22 > sm33) {
516
- const S = Math.sqrt(1 + sm22 - sm11 - sm33) * 2;
517
- return [(sm12 + sm21) / S, 0.25 * S, (sm23 + sm32) / S, (sm31 - sm13) / S];
109
+ exports.invert = invert;
110
+ /**
111
+ * Calculates the adjugate of a mat4
112
+ */
113
+ function adjoint(a) {
114
+ // prettier-ignore
115
+ const [a00, a01, a02, a03, a10, a11, a12, a13, a20, a21, a22, a23, a30, a31, a32, a33] = a;
116
+ const b00 = a00 * a11 - a01 * a10;
117
+ const b01 = a00 * a12 - a02 * a10;
118
+ const b02 = a00 * a13 - a03 * a10;
119
+ const b03 = a01 * a12 - a02 * a11;
120
+ const b04 = a01 * a13 - a03 * a11;
121
+ const b05 = a02 * a13 - a03 * a12;
122
+ const b06 = a20 * a31 - a21 * a30;
123
+ const b07 = a20 * a32 - a22 * a30;
124
+ const b08 = a20 * a33 - a23 * a30;
125
+ const b09 = a21 * a32 - a22 * a31;
126
+ const b10 = a21 * a33 - a23 * a31;
127
+ const b11 = a22 * a33 - a23 * a32;
128
+ return [
129
+ a11 * b11 - a12 * b10 + a13 * b09,
130
+ a02 * b10 - a01 * b11 - a03 * b09,
131
+ a31 * b05 - a32 * b04 + a33 * b03,
132
+ a22 * b04 - a21 * b05 - a23 * b03,
133
+ a12 * b08 - a10 * b11 - a13 * b07,
134
+ a00 * b11 - a02 * b08 + a03 * b07,
135
+ a32 * b02 - a30 * b05 - a33 * b01,
136
+ a20 * b05 - a22 * b02 + a23 * b01,
137
+ a10 * b10 - a11 * b08 + a13 * b06,
138
+ a01 * b08 - a00 * b10 - a03 * b06,
139
+ a30 * b04 - a31 * b02 + a33 * b00,
140
+ a21 * b02 - a20 * b04 - a23 * b00,
141
+ a11 * b07 - a10 * b09 - a12 * b06,
142
+ a00 * b09 - a01 * b07 + a02 * b06,
143
+ a31 * b01 - a30 * b03 - a32 * b00,
144
+ a20 * b03 - a21 * b01 + a22 * b00,
145
+ ];
518
146
  }
519
- else {
520
- const S = Math.sqrt(1 + sm33 - sm11 - sm22) * 2;
521
- return [(sm31 + sm13) / S, (sm23 + sm32) / S, 0.25 * S, (sm12 - sm21) / S];
147
+ exports.adjoint = adjoint;
148
+ /**
149
+ * Calculates the determinant of a mat4
150
+ */
151
+ function determinant(a) {
152
+ // prettier-ignore
153
+ const [a00, a01, a02, a03, a10, a11, a12, a13, a20, a21, a22, a23, a30, a31, a32, a33] = a;
154
+ const b0 = a00 * a11 - a01 * a10;
155
+ const b1 = a00 * a12 - a02 * a10;
156
+ const b2 = a01 * a12 - a02 * a11;
157
+ const b3 = a20 * a31 - a21 * a30;
158
+ const b4 = a20 * a32 - a22 * a30;
159
+ const b5 = a21 * a32 - a22 * a31;
160
+ const b6 = a00 * b5 - a01 * b4 + a02 * b3;
161
+ const b7 = a10 * b5 - a11 * b4 + a12 * b3;
162
+ const b8 = a20 * b2 - a21 * b1 + a22 * b0;
163
+ const b9 = a30 * b2 - a31 * b1 + a32 * b0;
164
+ // Calculate the determinant
165
+ return a13 * b6 - a03 * b7 + a33 * b8 - a23 * b9;
522
166
  }
523
- }
524
- /**
525
- * Decomposes a transformation matrix into its rotation, translation
526
- * and scale components. Returns only the rotation component
527
- *
528
- * @param mat Matrix to be decomposed (input)
529
- */
530
- export function decompose(mat) {
531
- const trans = [mat[12], mat[13], mat[14]];
532
- // prettier-ignore
533
- const [m11, m12, m13, , m21, m22, m23, , m31, m32, m33,] = mat;
534
- const scale = [
535
- Math.sqrt(m11 * m11 + m12 * m12 + m13 * m13),
536
- Math.sqrt(m21 * m21 + m22 * m22 + m23 * m23),
537
- Math.sqrt(m31 * m31 + m32 * m32 + m33 * m33),
538
- ];
539
- const is1 = 1 / scale[0];
540
- const is2 = 1 / scale[1];
541
- const is3 = 1 / scale[2];
542
- const sm11 = m11 * is1;
543
- const sm12 = m12 * is2;
544
- const sm13 = m13 * is3;
545
- const sm21 = m21 * is1;
546
- const sm22 = m22 * is2;
547
- const sm23 = m23 * is3;
548
- const sm31 = m31 * is1;
549
- const sm32 = m32 * is2;
550
- const sm33 = m33 * is3;
551
- const trace = sm11 + sm22 + sm33;
552
- let rot;
553
- if (trace > 0) {
554
- const S = Math.sqrt(trace + 1) * 2;
555
- rot = [(sm23 - sm32) / S, (sm31 - sm13) / S, (sm12 - sm21) / S, 0.25 * S];
167
+ exports.determinant = determinant;
168
+ /**
169
+ * Multiplies two mat4's
170
+ */
171
+ function multiply(a, b) {
172
+ // prettier-ignore
173
+ const [a00, a01, a02, a03, a10, a11, a12, a13, a20, a21, a22, a23, a30, a31, a32, a33] = a;
174
+ const out = Array(16);
175
+ // Cache only the current line of the second matrix
176
+ let [b0, b1, b2, b3] = b;
177
+ out[0] = b0 * a00 + b1 * a10 + b2 * a20 + b3 * a30;
178
+ out[1] = b0 * a01 + b1 * a11 + b2 * a21 + b3 * a31;
179
+ out[2] = b0 * a02 + b1 * a12 + b2 * a22 + b3 * a32;
180
+ out[3] = b0 * a03 + b1 * a13 + b2 * a23 + b3 * a33;
181
+ b0 = b[4];
182
+ b1 = b[5];
183
+ b2 = b[6];
184
+ b3 = b[7];
185
+ out[4] = b0 * a00 + b1 * a10 + b2 * a20 + b3 * a30;
186
+ out[5] = b0 * a01 + b1 * a11 + b2 * a21 + b3 * a31;
187
+ out[6] = b0 * a02 + b1 * a12 + b2 * a22 + b3 * a32;
188
+ out[7] = b0 * a03 + b1 * a13 + b2 * a23 + b3 * a33;
189
+ b0 = b[8];
190
+ b1 = b[9];
191
+ b2 = b[10];
192
+ b3 = b[11];
193
+ out[8] = b0 * a00 + b1 * a10 + b2 * a20 + b3 * a30;
194
+ out[9] = b0 * a01 + b1 * a11 + b2 * a21 + b3 * a31;
195
+ out[10] = b0 * a02 + b1 * a12 + b2 * a22 + b3 * a32;
196
+ out[11] = b0 * a03 + b1 * a13 + b2 * a23 + b3 * a33;
197
+ b0 = b[12];
198
+ b1 = b[13];
199
+ b2 = b[14];
200
+ b3 = b[15];
201
+ out[12] = b0 * a00 + b1 * a10 + b2 * a20 + b3 * a30;
202
+ out[13] = b0 * a01 + b1 * a11 + b2 * a21 + b3 * a31;
203
+ out[14] = b0 * a02 + b1 * a12 + b2 * a22 + b3 * a32;
204
+ out[15] = b0 * a03 + b1 * a13 + b2 * a23 + b3 * a33;
205
+ return out;
556
206
  }
557
- else if (sm11 > sm22 && sm11 > sm33) {
558
- const S = Math.sqrt(1 + sm11 - sm22 - sm33) * 2;
559
- rot = [0.25 * S, (sm12 + sm21) / S, (sm31 + sm13) / S, (sm23 - sm32) / S];
207
+ exports.multiply = multiply;
208
+ /**
209
+ * Translate a mat4 by the given vector
210
+ *
211
+ * @param a the matrix to translate
212
+ * @param v vector to translate by
213
+ */
214
+ function translate(a, v) {
215
+ const [x, y, z] = v;
216
+ // prettier-ignore
217
+ const [a00, a01, a02, a03, a10, a11, a12, a13, a20, a21, a22, a23] = a;
218
+ // prettier-ignore
219
+ return [
220
+ a00, a01, a02, a03,
221
+ a10, a11, a12, a13,
222
+ a20, a21, a22, a23,
223
+ a00 * x + a10 * y + a20 * z + a[12],
224
+ a01 * x + a11 * y + a21 * z + a[13],
225
+ a02 * x + a12 * y + a22 * z + a[14],
226
+ a03 * x + a13 * y + a23 * z + a[15],
227
+ ];
560
228
  }
561
- else if (sm22 > sm33) {
562
- const S = Math.sqrt(1 + sm22 - sm11 - sm33) * 2;
563
- rot = [(sm12 + sm21) / S, 0.25 * S, (sm23 + sm32) / S, (sm31 - sm13) / S];
229
+ exports.translate = translate;
230
+ /**
231
+ * Scales the mat4 by the dimensions in the given vec3 not using vectorization
232
+ **/
233
+ function scale(a, v) {
234
+ const [x, y, z] = v;
235
+ // prettier-ignore
236
+ return [
237
+ a[0] * x, a[1] * x, a[2] * x, a[3] * x,
238
+ a[4] * y, a[5] * y, a[6] * y, a[7] * y,
239
+ a[8] * z, a[9] * z, a[10] * z, a[11] * z,
240
+ a[12], a[13], a[14], a[15],
241
+ ];
564
242
  }
565
- else {
566
- const S = Math.sqrt(1 + sm33 - sm11 - sm22) * 2;
567
- rot = [(sm31 + sm13) / S, (sm23 + sm32) / S, 0.25 * S, (sm12 - sm21) / S];
243
+ exports.scale = scale;
244
+ /**
245
+ * Rotates a mat4 by the given angle around the given axis
246
+ */
247
+ function rotate(a, rad, axis) {
248
+ let [x, y, z] = axis;
249
+ const len = Math.sqrt(x * x + y * y + z * z);
250
+ if (len < Common.EPSILON) {
251
+ return null;
252
+ }
253
+ x /= len;
254
+ y /= len;
255
+ z /= len;
256
+ const s = Math.sin(rad);
257
+ const c = Math.cos(rad);
258
+ const t = 1 - c;
259
+ // prettier-ignore
260
+ const [a00, a01, a02, a03, a10, a11, a12, a13, a20, a21, a22, a23] = a;
261
+ // Construct the elements of the rotation matrix
262
+ const b00 = x * x * t + c;
263
+ const b01 = y * x * t + z * s;
264
+ const b02 = z * x * t - y * s;
265
+ const b10 = x * y * t - z * s;
266
+ const b11 = y * y * t + c;
267
+ const b12 = z * y * t + x * s;
268
+ const b20 = x * z * t + y * s;
269
+ const b21 = y * z * t - x * s;
270
+ const b22 = z * z * t + c;
271
+ // prettier-ignore
272
+ return [
273
+ a00 * b00 + a10 * b01 + a20 * b02,
274
+ a01 * b00 + a11 * b01 + a21 * b02,
275
+ a02 * b00 + a12 * b01 + a22 * b02,
276
+ a03 * b00 + a13 * b01 + a23 * b02,
277
+ a00 * b10 + a10 * b11 + a20 * b12,
278
+ a01 * b10 + a11 * b11 + a21 * b12,
279
+ a02 * b10 + a12 * b11 + a22 * b12,
280
+ a03 * b10 + a13 * b11 + a23 * b12,
281
+ a00 * b20 + a10 * b21 + a20 * b22,
282
+ a01 * b20 + a11 * b21 + a21 * b22,
283
+ a02 * b20 + a12 * b21 + a22 * b22,
284
+ a03 * b20 + a13 * b21 + a23 * b22,
285
+ a[12], a[13], a[14], a[15],
286
+ ];
568
287
  }
569
- return {
570
- trans,
571
- rot,
572
- scale,
573
- };
574
- }
575
- /**
576
- * Creates a matrix from a quaternion rotation, vector translation and vector scale
577
- * This is equivalent to (but much faster than):
578
- *
579
- * mat4.identity(dest);
580
- * mat4.translate(dest, vec);
581
- * const quatMat = mat4.create();
582
- * quat4.toMat4(quat, quatMat);
583
- * mat4.multiply(dest, quatMat);
584
- * mat4.scale(dest, scale)
585
- *
586
- * @param rot Rotation quaternion
587
- * @param trans Translation vector
588
- * @param scale Scaling vector
589
- */
590
- export function fromRotationTranslationScale(rot, trans, scale) {
591
- // Quaternion math
592
- const [x, y, z, w] = rot;
593
- const x2 = x + x;
594
- const y2 = y + y;
595
- const z2 = z + z;
596
- const xx = x * x2;
597
- const xy = x * y2;
598
- const xz = x * z2;
599
- const yy = y * y2;
600
- const yz = y * z2;
601
- const zz = z * z2;
602
- const wx = w * x2;
603
- const wy = w * y2;
604
- const wz = w * z2;
605
- const sx = scale[0];
606
- const sy = scale[1];
607
- const sz = scale[2];
608
- return [
609
- (1 - (yy + zz)) * sx,
610
- (xy + wz) * sx,
611
- (xz - wy) * sx,
612
- 0,
613
- (xy - wz) * sy,
614
- (1 - (xx + zz)) * sy,
615
- (yz + wx) * sy,
616
- 0,
617
- (xz + wy) * sz,
618
- (yz - wx) * sz,
619
- (1 - (xx + yy)) * sz,
620
- 0,
621
- trans[0],
622
- trans[1],
623
- trans[2],
624
- 1,
625
- ];
626
- }
627
- /**
628
- * Creates a matrix from a quaternion rotation, vector translation and vector scale, rotating and scaling around the given origin
629
- * This is equivalent to (but much faster than):
630
- *
631
- * mat4.identity(dest);
632
- * mat4.translate(dest, vec);
633
- * mat4.translate(dest, origin);
634
- * const quatMat = mat4.create();
635
- * quat4.toMat4(quat, quatMat);
636
- * mat4.multiply(dest, quatMat);
637
- * mat4.scale(dest, scale)
638
- * mat4.translate(dest, negativeOrigin);
639
- *
640
- * @param rot Rotation quaternion
641
- * @param trans Translation vector
642
- * @param scale Scaling vector
643
- * @param origin The origin vector around which to scale and rotate
644
- */
645
- export function fromRotationTranslationScaleOrigin(rot, trans, scale, origin) {
646
- // Quaternion math
647
- const [x, y, z, w] = rot;
648
- const x2 = x + x;
649
- const y2 = y + y;
650
- const z2 = z + z;
651
- const xx = x * x2;
652
- const xy = x * y2;
653
- const xz = x * z2;
654
- const yy = y * y2;
655
- const yz = y * z2;
656
- const zz = z * z2;
657
- const wx = w * x2;
658
- const wy = w * y2;
659
- const wz = w * z2;
660
- const sx = scale[0];
661
- const sy = scale[1];
662
- const sz = scale[2];
663
- const ox = origin[0];
664
- const oy = origin[1];
665
- const oz = origin[2];
666
- const out0 = (1 - (yy + zz)) * sx;
667
- const out1 = (xy + wz) * sx;
668
- const out2 = (xz - wy) * sx;
669
- const out4 = (xy - wz) * sy;
670
- const out5 = (1 - (xx + zz)) * sy;
671
- const out6 = (yz + wx) * sy;
672
- const out8 = (xz + wy) * sz;
673
- const out9 = (yz - wx) * sz;
674
- const out10 = (1 - (xx + yy)) * sz;
675
- // prettier-ignore
676
- return [
677
- out0, out1, out2, 0,
678
- out4, out5, out6, 0,
679
- out8, out9, out10, 0,
680
- trans[0] + ox - (out0 * ox + out4 * oy + out8 * oz),
681
- trans[1] + oy - (out1 * ox + out5 * oy + out9 * oz),
682
- trans[2] + oz - (out2 * ox + out6 * oy + out10 * oz),
683
- 1,
684
- ];
685
- }
686
- /**
687
- * Calculates a 4x4 matrix from the given quaternion
688
- *
689
- * @param q Quaternion to create matrix from
690
- */
691
- export function fromQuat(q) {
692
- const [x, y, z, w] = q;
693
- const x2 = x + x;
694
- const y2 = y + y;
695
- const z2 = z + z;
696
- const xx = x * x2;
697
- const yx = y * x2;
698
- const yy = y * y2;
699
- const zx = z * x2;
700
- const zy = z * y2;
701
- const zz = z * z2;
702
- const wx = w * x2;
703
- const wy = w * y2;
704
- const wz = w * z2;
705
- // prettier-ignore
706
- return [
707
- 1 - yy - zz,
708
- yx + wz,
709
- zx - wy,
710
- 0,
711
- yx - wz,
712
- 1 - xx - zz,
713
- zy + wx,
714
- 0,
715
- zx + wy,
716
- zy - wx,
717
- 1 - xx - yy,
718
- 0,
719
- 0, 0, 0, 1,
720
- ];
721
- }
722
- /**
723
- * Generates a frustum matrix with the given bounds
724
- *
725
- * @param left Left bound of the frustum
726
- * @param right Right bound of the frustum
727
- * @param bottom Bottom bound of the frustum
728
- * @param top Top bound of the frustum
729
- * @param near Near bound of the frustum
730
- * @param far Far bound of the frustum
731
- */
732
- export function frustum(left, right, bottom, top, near, far) {
733
- const rl = 1 / (right - left);
734
- const tb = 1 / (top - bottom);
735
- const nf = 1 / (near - far);
736
- // prettier-ignore
737
- return [
738
- near * 2 * rl, 0, 0, 0,
739
- 0, near * 2 * tb, 0, 0,
740
- (right + left) * rl, (top + bottom) * tb, (far + near) * nf, -1,
741
- 0, 0, far * near * 2 * nf, 0,
742
- ];
743
- }
744
- /**
745
- * Generates a perspective projection matrix with the given bounds.
746
- * The near/far clip planes correspond to a normalized device coordinate Z range of [-1, 1],
747
- * which matches WebGL/OpenGL's clip volume.
748
- * Passing null/undefined/no value for far will generate infinite projection matrix.
749
- *
750
- * @param fovy Vertical field of view in radians
751
- * @param aspect Aspect ratio. typically viewport width/height
752
- * @param near Near bound of the frustum
753
- * @param far Far bound of the frustum, can be null or Infinity
754
- */
755
- export function perspectiveNO(fovy, aspect, near, far) {
756
- const f = 1 / Math.tan(fovy / 2);
757
- let out10, out14;
758
- if (far !== null && far !== Infinity) {
759
- const nf = 1 / (near - far);
760
- out10 = (far + near) * nf;
761
- out14 = 2 * far * near * nf;
288
+ exports.rotate = rotate;
289
+ /**
290
+ * Rotates a matrix by the given angle around the X axis
291
+ */
292
+ function rotateX(a, rad) {
293
+ const s = Math.sin(rad);
294
+ const c = Math.cos(rad);
295
+ const a10 = a[4];
296
+ const a11 = a[5];
297
+ const a12 = a[6];
298
+ const a13 = a[7];
299
+ const a20 = a[8];
300
+ const a21 = a[9];
301
+ const a22 = a[10];
302
+ const a23 = a[11];
303
+ // prettier-ignore
304
+ return [
305
+ a[0], a[1], a[2], a[3],
306
+ a10 * c + a20 * s, a11 * c + a21 * s, a12 * c + a22 * s, a13 * c + a23 * s,
307
+ a20 * c - a10 * s, a21 * c - a11 * s, a22 * c - a12 * s, a23 * c - a13 * s,
308
+ a[12], a[13], a[14], a[15],
309
+ ];
762
310
  }
763
- else {
764
- out10 = -1;
765
- out14 = -2 * near;
311
+ exports.rotateX = rotateX;
312
+ /**
313
+ * Rotates a matrix by the given angle around the Y axis
314
+ */
315
+ function rotateY(a, rad) {
316
+ const s = Math.sin(rad);
317
+ const c = Math.cos(rad);
318
+ const a00 = a[0];
319
+ const a01 = a[1];
320
+ const a02 = a[2];
321
+ const a03 = a[3];
322
+ const a20 = a[8];
323
+ const a21 = a[9];
324
+ const a22 = a[10];
325
+ const a23 = a[11];
326
+ // prettier-ignore
327
+ return [
328
+ a00 * c - a20 * s,
329
+ a01 * c - a21 * s,
330
+ a02 * c - a22 * s,
331
+ a03 * c - a23 * s,
332
+ a[4], a[5], a[6], a[7],
333
+ a00 * s + a20 * c,
334
+ a01 * s + a21 * c,
335
+ a02 * s + a22 * c,
336
+ a03 * s + a23 * c,
337
+ a[12], a[13], a[14], a[15],
338
+ ];
766
339
  }
767
- // prettier-ignore
768
- return [
769
- f / aspect, 0, 0, 0,
770
- 0, f, 0, 0,
771
- 0, 0, out10, -1,
772
- 0, 0, out14, 0,
773
- ];
774
- }
775
- /**
776
- * Alias for {@link mat4.perspectiveNO}
777
- * @function
778
- */
779
- export const perspective = perspectiveNO;
780
- /**
781
- * Generates a perspective projection matrix suitable for WebGPU with the given bounds.
782
- * The near/far clip planes correspond to a normalized device coordinate Z range of [0, 1],
783
- * which matches WebGPU/Vulkan/DirectX/Metal's clip volume.
784
- * Passing null/undefined/no value for far will generate infinite projection matrix.
785
- *
786
- * @param fovy Vertical field of view in radians
787
- * @param aspect Aspect ratio. typically viewport width/height
788
- * @param near Near bound of the frustum
789
- * @param far Far bound of the frustum, can be null or Infinity
790
- */
791
- export function perspectiveZO(fovy, aspect, near, far) {
792
- const f = 1 / Math.tan(fovy / 2);
793
- let out10, out14;
794
- if (far !== null && far !== Infinity) {
795
- const nf = 1 / (near - far);
796
- out10 = far * nf;
797
- out14 = far * near * nf;
340
+ exports.rotateY = rotateY;
341
+ /**
342
+ * Rotates a matrix by the given angle around the Z axis
343
+ */
344
+ function rotateZ(a, rad) {
345
+ const s = Math.sin(rad);
346
+ const c = Math.cos(rad);
347
+ const a00 = a[0];
348
+ const a01 = a[1];
349
+ const a02 = a[2];
350
+ const a03 = a[3];
351
+ const a10 = a[4];
352
+ const a11 = a[5];
353
+ const a12 = a[6];
354
+ const a13 = a[7];
355
+ // prettier-ignore
356
+ return [
357
+ a00 * c + a10 * s,
358
+ a01 * c + a11 * s,
359
+ a02 * c + a12 * s,
360
+ a03 * c + a13 * s,
361
+ a10 * c - a00 * s,
362
+ a11 * c - a01 * s,
363
+ a12 * c - a02 * s,
364
+ a13 * c - a03 * s,
365
+ a[8], a[9], a[10], a[11],
366
+ a[12], a[13], a[14], a[15],
367
+ ];
798
368
  }
799
- else {
800
- out10 = -1;
801
- out14 = -near;
369
+ exports.rotateZ = rotateZ;
370
+ /**
371
+ * Creates a matrix from a vector translation
372
+ */
373
+ function fromTranslation(v) {
374
+ const [x, y, z] = v;
375
+ // prettier-ignore
376
+ return [
377
+ 1, 0, 0, 0,
378
+ 0, 1, 0, 0,
379
+ 0, 0, 1, 0,
380
+ x, y, z, 1,
381
+ ];
802
382
  }
803
- return [f / aspect, 0, 0, 0, 0, f, 0, 0, 0, 0, out10, -1, 0, 0, out14, 0];
804
- }
805
- /**
806
- * Generates a perspective projection matrix with the given field of view.
807
- * This is primarily useful for generating projection matrices to be used
808
- * with the still experiemental WebVR API.
809
- *
810
- * @param fov Object containing the following values: upDegrees, downDegrees, leftDegrees, rightDegrees
811
- * @param near Near bound of the frustum
812
- * @param far Far bound of the frustum
813
- */
814
- export function perspectiveFromFieldOfView(fov, near, far) {
815
- const upTan = Math.tan((fov.upDegrees * Math.PI) / 180);
816
- const downTan = Math.tan((fov.downDegrees * Math.PI) / 180);
817
- const leftTan = Math.tan((fov.leftDegrees * Math.PI) / 180);
818
- const rightTan = Math.tan((fov.rightDegrees * Math.PI) / 180);
819
- const xScale = 2 / (leftTan + rightTan);
820
- const yScale = 2 / (upTan + downTan);
821
- // prettier-ignore
822
- return [
823
- xScale, 0, 0, 0,
824
- 0, yScale, 0, 0,
825
- -((leftTan - rightTan) * xScale * 0.5),
826
- (upTan - downTan) * yScale * 0.5,
827
- far / (near - far),
828
- -1,
829
- 0,
830
- 0,
831
- (far * near) / (near - far),
832
- 0,
833
- ];
834
- }
835
- /**
836
- * Generates a orthogonal projection matrix with the given bounds.
837
- * The near/far clip planes correspond to a normalized device coordinate Z range of [-1, 1],
838
- * which matches WebGL/OpenGL's clip volume.
839
- *
840
- * @param left Left bound of the frustum
841
- * @param right Right bound of the frustum
842
- * @param bottom Bottom bound of the frustum
843
- * @param top Top bound of the frustum
844
- * @param near Near bound of the frustum
845
- * @param far Far bound of the frustum
846
- */
847
- export function orthoNO(left, right, bottom, top, near, far) {
848
- const lr = 1 / (left - right);
849
- const bt = 1 / (bottom - top);
850
- const nf = 1 / (near - far);
851
- // prettier-ignore
852
- return [
853
- -2 * lr, 0, 0, 0,
854
- 0, -2 * bt, 0, 0,
855
- 0, 0, 2 * nf, 0,
856
- (left + right) * lr,
857
- (top + bottom) * bt,
858
- (far + near) * nf,
859
- 1,
860
- ];
861
- }
862
- /**
863
- * Alias for {@link mat4.orthoNO}
864
- * @function
865
- */
866
- export const ortho = orthoNO;
867
- /**
868
- * Generates a orthogonal projection matrix with the given bounds.
869
- * The near/far clip planes correspond to a normalized device coordinate Z range of [0, 1],
870
- * which matches WebGPU/Vulkan/DirectX/Metal's clip volume.
871
- *
872
- * @param left Left bound of the frustum
873
- * @param right Right bound of the frustum
874
- * @param bottom Bottom bound of the frustum
875
- * @param top Top bound of the frustum
876
- * @param near Near bound of the frustum
877
- * @param far Far bound of the frustum
878
- */
879
- export function orthoZO(left, right, bottom, top, near, far) {
880
- const lr = 1 / (left - right);
881
- const bt = 1 / (bottom - top);
882
- const nf = 1 / (near - far);
883
- // prettier-ignore
884
- return [
885
- -2 * lr, 0, 0, 0,
886
- 0, -2 * bt, 0, 0,
887
- 0, 0, nf, 0,
888
- (left + right) * lr,
889
- (top + bottom) * bt,
890
- near * nf,
891
- 1,
892
- ];
893
- }
894
- /**
895
- * Generates a look-at matrix with the given eye position, focal point, and up axis.
896
- * If you want a matrix that actually makes an object look at another object, you should use targetTo instead.
897
- *
898
- * @param eye Position of the viewer
899
- * @param center Point the viewer is looking at
900
- * @param up vec3 pointing up
901
- */
902
- export function lookAt(eye, center, up) {
903
- let x0, x1, x2, y0, y1, y2, z0, z1, z2, len;
904
- const eyex = eye[0];
905
- const eyey = eye[1];
906
- const eyez = eye[2];
907
- const upx = up[0];
908
- const upy = up[1];
909
- const upz = up[2];
910
- const centerx = center[0];
911
- const centery = center[1];
912
- const centerz = center[2];
913
- if (Math.abs(eyex - centerx) < Common.EPSILON &&
914
- Math.abs(eyey - centery) < Common.EPSILON &&
915
- Math.abs(eyez - centerz) < Common.EPSILON) {
916
- return identity;
383
+ exports.fromTranslation = fromTranslation;
384
+ /**
385
+ * Creates a matrix from a vector scaling
386
+ */
387
+ function fromScaling(v) {
388
+ const [x, y, z] = v;
389
+ // prettier-ignore
390
+ return [
391
+ x, 0, 0, 0,
392
+ 0, y, 0, 0,
393
+ 0, 0, z, 0,
394
+ 0, 0, 0, 1
395
+ ];
917
396
  }
918
- z0 = eyex - centerx;
919
- z1 = eyey - centery;
920
- z2 = eyez - centerz;
921
- len = 1 / Math.sqrt(z0 * z0 + z1 * z1 + z2 * z2);
922
- z0 *= len;
923
- z1 *= len;
924
- z2 *= len;
925
- x0 = upy * z2 - upz * z1;
926
- x1 = upz * z0 - upx * z2;
927
- x2 = upx * z1 - upy * z0;
928
- len = Math.sqrt(x0 * x0 + x1 * x1 + x2 * x2);
929
- if (!len) {
930
- x0 = 0;
931
- x1 = 0;
932
- x2 = 0;
397
+ exports.fromScaling = fromScaling;
398
+ /**
399
+ * Creates a matrix from a given angle around a given axis
400
+ */
401
+ function fromRotation(rad, axis) {
402
+ let [x, y, z] = axis;
403
+ const len = Math.sqrt(x * x + y * y + z * z);
404
+ if (len < Common.EPSILON) {
405
+ return null;
406
+ }
407
+ x /= len;
408
+ y /= len;
409
+ z /= len;
410
+ const s = Math.sin(rad);
411
+ const c = Math.cos(rad);
412
+ const t = 1 - c;
413
+ // prettier-ignore
414
+ return [
415
+ x * x * t + c,
416
+ y * x * t + z * s,
417
+ z * x * t - y * s,
418
+ 0,
419
+ x * y * t - z * s,
420
+ y * y * t + c,
421
+ z * y * t + x * s,
422
+ 0,
423
+ x * z * t + y * s,
424
+ y * z * t - x * s,
425
+ z * z * t + c,
426
+ 0,
427
+ 0, 0, 0, 1,
428
+ ];
933
429
  }
934
- else {
935
- len = 1 / len;
936
- x0 *= len;
937
- x1 *= len;
938
- x2 *= len;
430
+ exports.fromRotation = fromRotation;
431
+ /**
432
+ * Creates a matrix from the given angle around the X axis
433
+ */
434
+ function fromXRotation(rad) {
435
+ const s = Math.sin(rad);
436
+ const c = Math.cos(rad);
437
+ // prettier-ignore
438
+ return [
439
+ 1, 0, 0, 0,
440
+ 0, c, s, 0,
441
+ 0, -s, c, 0,
442
+ 0, 0, 0, 1
443
+ ];
939
444
  }
940
- y0 = z1 * x2 - z2 * x1;
941
- y1 = z2 * x0 - z0 * x2;
942
- y2 = z0 * x1 - z1 * x0;
943
- len = Math.sqrt(y0 * y0 + y1 * y1 + y2 * y2);
944
- if (!len) {
945
- y0 = 0;
946
- y1 = 0;
947
- y2 = 0;
445
+ exports.fromXRotation = fromXRotation;
446
+ /**
447
+ * Creates a matrix from the given angle around the Y axis
448
+ */
449
+ function fromYRotation(rad) {
450
+ const s = Math.sin(rad);
451
+ const c = Math.cos(rad);
452
+ // prettier-ignore
453
+ return [
454
+ c, 0, -s, 0,
455
+ 0, 1, 0, 0,
456
+ s, 0, c, 0,
457
+ 0, 0, 0, 1
458
+ ];
948
459
  }
949
- else {
950
- len = 1 / len;
951
- y0 *= len;
952
- y1 *= len;
953
- y2 *= len;
460
+ exports.fromYRotation = fromYRotation;
461
+ /**
462
+ * Creates a matrix from the given angle around the Z axis
463
+ */
464
+ function fromZRotation(rad) {
465
+ const s = Math.sin(rad);
466
+ const c = Math.cos(rad);
467
+ // prettier-ignore
468
+ return [
469
+ c, s, 0, 0,
470
+ -s, c, 0, 0,
471
+ 0, 0, 1, 0,
472
+ 0, 0, 0, 1
473
+ ];
954
474
  }
955
- // prettier-ignore
956
- return [
957
- x0, y0, z0, 0,
958
- x1, y1, z1, 0,
959
- x2, y2, z2, 0,
960
- -(x0 * eyex + x1 * eyey + x2 * eyez),
961
- -(y0 * eyex + y1 * eyey + y2 * eyez),
962
- -(z0 * eyex + z1 * eyey + z2 * eyez),
963
- 1,
964
- ];
965
- }
966
- /**
967
- * Generates a matrix that makes something look at something else.
968
- *
969
- * @param eye Position of the viewer
970
- * @param center Point the viewer is looking at
971
- * @param up vec3 pointing up
972
- */
973
- export function targetTo(eye, target, up) {
974
- const [eyex, eyey, eyez] = eye;
975
- const [upx, upy, upz] = up;
976
- let z0 = eyex - target[0], z1 = eyey - target[1], z2 = eyez - target[2];
977
- let len = z0 * z0 + z1 * z1 + z2 * z2;
978
- if (len > 0) {
979
- len = 1 / Math.sqrt(len);
475
+ exports.fromZRotation = fromZRotation;
476
+ /**
477
+ * Creates a matrix from a quaternion rotation and vector translation
478
+ */
479
+ function fromRotationTranslation(q, v) {
480
+ // Quaternion math
481
+ const [x, y, z, w] = q;
482
+ const x2 = x + x;
483
+ const y2 = y + y;
484
+ const z2 = z + z;
485
+ const xx = x * x2;
486
+ const xy = x * y2;
487
+ const xz = x * z2;
488
+ const yy = y * y2;
489
+ const yz = y * z2;
490
+ const zz = z * z2;
491
+ const wx = w * x2;
492
+ const wy = w * y2;
493
+ const wz = w * z2;
494
+ return [
495
+ 1 - (yy + zz),
496
+ xy + wz,
497
+ xz - wy,
498
+ 0,
499
+ xy - wz,
500
+ 1 - (xx + zz),
501
+ yz + wx,
502
+ 0,
503
+ xz + wy,
504
+ yz - wx,
505
+ 1 - (xx + yy),
506
+ 0,
507
+ v[0],
508
+ v[1],
509
+ v[2],
510
+ 1,
511
+ ];
512
+ }
513
+ exports.fromRotationTranslation = fromRotationTranslation;
514
+ /**
515
+ * Returns the translation vector component of a transformation
516
+ * matrix. If a matrix is built with fromRotationTranslation,
517
+ * the returned vector will be the same as the translation vector
518
+ * originally supplied.
519
+ */
520
+ function getTranslation(mat) {
521
+ return [mat[12], mat[13], mat[14]];
522
+ }
523
+ exports.getTranslation = getTranslation;
524
+ /**
525
+ * Returns the scaling factor component of a transformation
526
+ * matrix. If a matrix is built with fromRotationTranslationScale
527
+ * with a normalized Quaternion paramter, the returned vector will be
528
+ * the same as the scaling vector
529
+ * originally supplied.
530
+ */
531
+ function getScaling(mat) {
532
+ // prettier-ignore
533
+ const [m11, m12, m13, , m21, m22, m23, , m31, m32, m33,] = mat;
534
+ return [
535
+ Math.sqrt(m11 * m11 + m12 * m12 + m13 * m13),
536
+ Math.sqrt(m21 * m21 + m22 * m22 + m23 * m23),
537
+ Math.sqrt(m31 * m31 + m32 * m32 + m33 * m33),
538
+ ];
539
+ }
540
+ exports.getScaling = getScaling;
541
+ /**
542
+ * Returns a quaternion representing the rotational component
543
+ * of a transformation matrix. If a matrix is built with
544
+ * fromRotationTranslation, the returned quaternion will be the
545
+ * same as the quaternion originally supplied.
546
+ */
547
+ function getRotation(mat) {
548
+ const scaling = getScaling(mat);
549
+ const is1 = 1 / scaling[0];
550
+ const is2 = 1 / scaling[1];
551
+ const is3 = 1 / scaling[2];
552
+ const sm11 = mat[0] * is1;
553
+ const sm12 = mat[1] * is2;
554
+ const sm13 = mat[2] * is3;
555
+ const sm21 = mat[4] * is1;
556
+ const sm22 = mat[5] * is2;
557
+ const sm23 = mat[6] * is3;
558
+ const sm31 = mat[8] * is1;
559
+ const sm32 = mat[9] * is2;
560
+ const sm33 = mat[10] * is3;
561
+ const trace = sm11 + sm22 + sm33;
562
+ if (trace > 0) {
563
+ const S = Math.sqrt(trace + 1) * 2;
564
+ return [(sm23 - sm32) / S, (sm31 - sm13) / S, (sm12 - sm21) / S, 0.25 * S];
565
+ }
566
+ else if (sm11 > sm22 && sm11 > sm33) {
567
+ const S = Math.sqrt(1 + sm11 - sm22 - sm33) * 2;
568
+ return [0.25 * S, (sm12 + sm21) / S, (sm31 + sm13) / S, (sm23 - sm32) / S];
569
+ }
570
+ else if (sm22 > sm33) {
571
+ const S = Math.sqrt(1 + sm22 - sm11 - sm33) * 2;
572
+ return [(sm12 + sm21) / S, 0.25 * S, (sm23 + sm32) / S, (sm31 - sm13) / S];
573
+ }
574
+ else {
575
+ const S = Math.sqrt(1 + sm33 - sm11 - sm22) * 2;
576
+ return [(sm31 + sm13) / S, (sm23 + sm32) / S, 0.25 * S, (sm12 - sm21) / S];
577
+ }
578
+ }
579
+ exports.getRotation = getRotation;
580
+ /**
581
+ * Decomposes a transformation matrix into its rotation, translation
582
+ * and scale components. Returns only the rotation component
583
+ *
584
+ * @param mat Matrix to be decomposed (input)
585
+ */
586
+ function decompose(mat) {
587
+ const trans = [mat[12], mat[13], mat[14]];
588
+ // prettier-ignore
589
+ const [m11, m12, m13, , m21, m22, m23, , m31, m32, m33,] = mat;
590
+ const scale = [
591
+ Math.sqrt(m11 * m11 + m12 * m12 + m13 * m13),
592
+ Math.sqrt(m21 * m21 + m22 * m22 + m23 * m23),
593
+ Math.sqrt(m31 * m31 + m32 * m32 + m33 * m33),
594
+ ];
595
+ const is1 = 1 / scale[0];
596
+ const is2 = 1 / scale[1];
597
+ const is3 = 1 / scale[2];
598
+ const sm11 = m11 * is1;
599
+ const sm12 = m12 * is2;
600
+ const sm13 = m13 * is3;
601
+ const sm21 = m21 * is1;
602
+ const sm22 = m22 * is2;
603
+ const sm23 = m23 * is3;
604
+ const sm31 = m31 * is1;
605
+ const sm32 = m32 * is2;
606
+ const sm33 = m33 * is3;
607
+ const trace = sm11 + sm22 + sm33;
608
+ let rot;
609
+ if (trace > 0) {
610
+ const S = Math.sqrt(trace + 1) * 2;
611
+ rot = [(sm23 - sm32) / S, (sm31 - sm13) / S, (sm12 - sm21) / S, 0.25 * S];
612
+ }
613
+ else if (sm11 > sm22 && sm11 > sm33) {
614
+ const S = Math.sqrt(1 + sm11 - sm22 - sm33) * 2;
615
+ rot = [0.25 * S, (sm12 + sm21) / S, (sm31 + sm13) / S, (sm23 - sm32) / S];
616
+ }
617
+ else if (sm22 > sm33) {
618
+ const S = Math.sqrt(1 + sm22 - sm11 - sm33) * 2;
619
+ rot = [(sm12 + sm21) / S, 0.25 * S, (sm23 + sm32) / S, (sm31 - sm13) / S];
620
+ }
621
+ else {
622
+ const S = Math.sqrt(1 + sm33 - sm11 - sm22) * 2;
623
+ rot = [(sm31 + sm13) / S, (sm23 + sm32) / S, 0.25 * S, (sm12 - sm21) / S];
624
+ }
625
+ return {
626
+ trans,
627
+ rot,
628
+ scale,
629
+ };
630
+ }
631
+ exports.decompose = decompose;
632
+ /**
633
+ * Creates a matrix from a quaternion rotation, vector translation and vector scale
634
+ * This is equivalent to (but much faster than):
635
+ *
636
+ * mat4.identity(dest);
637
+ * mat4.translate(dest, vec);
638
+ * const quatMat = mat4.create();
639
+ * quat4.toMat4(quat, quatMat);
640
+ * mat4.multiply(dest, quatMat);
641
+ * mat4.scale(dest, scale)
642
+ *
643
+ * @param rot Rotation quaternion
644
+ * @param trans Translation vector
645
+ * @param scale Scaling vector
646
+ */
647
+ function fromRotationTranslationScale(rot, trans, scale) {
648
+ // Quaternion math
649
+ const [x, y, z, w] = rot;
650
+ const x2 = x + x;
651
+ const y2 = y + y;
652
+ const z2 = z + z;
653
+ const xx = x * x2;
654
+ const xy = x * y2;
655
+ const xz = x * z2;
656
+ const yy = y * y2;
657
+ const yz = y * z2;
658
+ const zz = z * z2;
659
+ const wx = w * x2;
660
+ const wy = w * y2;
661
+ const wz = w * z2;
662
+ const sx = scale[0];
663
+ const sy = scale[1];
664
+ const sz = scale[2];
665
+ return [
666
+ (1 - (yy + zz)) * sx,
667
+ (xy + wz) * sx,
668
+ (xz - wy) * sx,
669
+ 0,
670
+ (xy - wz) * sy,
671
+ (1 - (xx + zz)) * sy,
672
+ (yz + wx) * sy,
673
+ 0,
674
+ (xz + wy) * sz,
675
+ (yz - wx) * sz,
676
+ (1 - (xx + yy)) * sz,
677
+ 0,
678
+ trans[0],
679
+ trans[1],
680
+ trans[2],
681
+ 1,
682
+ ];
683
+ }
684
+ exports.fromRotationTranslationScale = fromRotationTranslationScale;
685
+ /**
686
+ * Creates a matrix from a quaternion rotation, vector translation and vector scale, rotating and scaling around the given origin
687
+ * This is equivalent to (but much faster than):
688
+ *
689
+ * mat4.identity(dest);
690
+ * mat4.translate(dest, vec);
691
+ * mat4.translate(dest, origin);
692
+ * const quatMat = mat4.create();
693
+ * quat4.toMat4(quat, quatMat);
694
+ * mat4.multiply(dest, quatMat);
695
+ * mat4.scale(dest, scale)
696
+ * mat4.translate(dest, negativeOrigin);
697
+ *
698
+ * @param rot Rotation quaternion
699
+ * @param trans Translation vector
700
+ * @param scale Scaling vector
701
+ * @param origin The origin vector around which to scale and rotate
702
+ */
703
+ function fromRotationTranslationScaleOrigin(rot, trans, scale, origin) {
704
+ // Quaternion math
705
+ const [x, y, z, w] = rot;
706
+ const x2 = x + x;
707
+ const y2 = y + y;
708
+ const z2 = z + z;
709
+ const xx = x * x2;
710
+ const xy = x * y2;
711
+ const xz = x * z2;
712
+ const yy = y * y2;
713
+ const yz = y * z2;
714
+ const zz = z * z2;
715
+ const wx = w * x2;
716
+ const wy = w * y2;
717
+ const wz = w * z2;
718
+ const sx = scale[0];
719
+ const sy = scale[1];
720
+ const sz = scale[2];
721
+ const ox = origin[0];
722
+ const oy = origin[1];
723
+ const oz = origin[2];
724
+ const out0 = (1 - (yy + zz)) * sx;
725
+ const out1 = (xy + wz) * sx;
726
+ const out2 = (xz - wy) * sx;
727
+ const out4 = (xy - wz) * sy;
728
+ const out5 = (1 - (xx + zz)) * sy;
729
+ const out6 = (yz + wx) * sy;
730
+ const out8 = (xz + wy) * sz;
731
+ const out9 = (yz - wx) * sz;
732
+ const out10 = (1 - (xx + yy)) * sz;
733
+ // prettier-ignore
734
+ return [
735
+ out0, out1, out2, 0,
736
+ out4, out5, out6, 0,
737
+ out8, out9, out10, 0,
738
+ trans[0] + ox - (out0 * ox + out4 * oy + out8 * oz),
739
+ trans[1] + oy - (out1 * ox + out5 * oy + out9 * oz),
740
+ trans[2] + oz - (out2 * ox + out6 * oy + out10 * oz),
741
+ 1,
742
+ ];
743
+ }
744
+ exports.fromRotationTranslationScaleOrigin = fromRotationTranslationScaleOrigin;
745
+ /**
746
+ * Calculates a 4x4 matrix from the given quaternion
747
+ *
748
+ * @param q Quaternion to create matrix from
749
+ */
750
+ function fromQuat(q) {
751
+ const [x, y, z, w] = q;
752
+ const x2 = x + x;
753
+ const y2 = y + y;
754
+ const z2 = z + z;
755
+ const xx = x * x2;
756
+ const yx = y * x2;
757
+ const yy = y * y2;
758
+ const zx = z * x2;
759
+ const zy = z * y2;
760
+ const zz = z * z2;
761
+ const wx = w * x2;
762
+ const wy = w * y2;
763
+ const wz = w * z2;
764
+ // prettier-ignore
765
+ return [
766
+ 1 - yy - zz,
767
+ yx + wz,
768
+ zx - wy,
769
+ 0,
770
+ yx - wz,
771
+ 1 - xx - zz,
772
+ zy + wx,
773
+ 0,
774
+ zx + wy,
775
+ zy - wx,
776
+ 1 - xx - yy,
777
+ 0,
778
+ 0, 0, 0, 1,
779
+ ];
780
+ }
781
+ exports.fromQuat = fromQuat;
782
+ /**
783
+ * Generates a frustum matrix with the given bounds
784
+ *
785
+ * @param left Left bound of the frustum
786
+ * @param right Right bound of the frustum
787
+ * @param bottom Bottom bound of the frustum
788
+ * @param top Top bound of the frustum
789
+ * @param near Near bound of the frustum
790
+ * @param far Far bound of the frustum
791
+ */
792
+ function frustum(left, right, bottom, top, near, far) {
793
+ const rl = 1 / (right - left);
794
+ const tb = 1 / (top - bottom);
795
+ const nf = 1 / (near - far);
796
+ // prettier-ignore
797
+ return [
798
+ near * 2 * rl, 0, 0, 0,
799
+ 0, near * 2 * tb, 0, 0,
800
+ (right + left) * rl, (top + bottom) * tb, (far + near) * nf, -1,
801
+ 0, 0, far * near * 2 * nf, 0,
802
+ ];
803
+ }
804
+ exports.frustum = frustum;
805
+ /**
806
+ * Generates a perspective projection matrix with the given bounds.
807
+ * The near/far clip planes correspond to a normalized device coordinate Z range of [-1, 1],
808
+ * which matches WebGL/OpenGL's clip volume.
809
+ * Passing null/undefined/no value for far will generate infinite projection matrix.
810
+ *
811
+ * @param fovy Vertical field of view in radians
812
+ * @param aspect Aspect ratio. typically viewport width/height
813
+ * @param near Near bound of the frustum
814
+ * @param far Far bound of the frustum, can be null or Infinity
815
+ */
816
+ function perspectiveNO(fovy, aspect, near, far) {
817
+ const f = 1 / Math.tan(fovy / 2);
818
+ let out10, out14;
819
+ if (far !== null && far !== Infinity) {
820
+ const nf = 1 / (near - far);
821
+ out10 = (far + near) * nf;
822
+ out14 = 2 * far * near * nf;
823
+ }
824
+ else {
825
+ out10 = -1;
826
+ out14 = -2 * near;
827
+ }
828
+ // prettier-ignore
829
+ return [
830
+ f / aspect, 0, 0, 0,
831
+ 0, f, 0, 0,
832
+ 0, 0, out10, -1,
833
+ 0, 0, out14, 0,
834
+ ];
835
+ }
836
+ exports.perspectiveNO = perspectiveNO;
837
+ /**
838
+ * Alias for {@link mat4.perspectiveNO}
839
+ * @function
840
+ */
841
+ exports.perspective = perspectiveNO;
842
+ /**
843
+ * Generates a perspective projection matrix suitable for WebGPU with the given bounds.
844
+ * The near/far clip planes correspond to a normalized device coordinate Z range of [0, 1],
845
+ * which matches WebGPU/Vulkan/DirectX/Metal's clip volume.
846
+ * Passing null/undefined/no value for far will generate infinite projection matrix.
847
+ *
848
+ * @param fovy Vertical field of view in radians
849
+ * @param aspect Aspect ratio. typically viewport width/height
850
+ * @param near Near bound of the frustum
851
+ * @param far Far bound of the frustum, can be null or Infinity
852
+ */
853
+ function perspectiveZO(fovy, aspect, near, far) {
854
+ const f = 1 / Math.tan(fovy / 2);
855
+ let out10, out14;
856
+ if (far !== null && far !== Infinity) {
857
+ const nf = 1 / (near - far);
858
+ out10 = far * nf;
859
+ out14 = far * near * nf;
860
+ }
861
+ else {
862
+ out10 = -1;
863
+ out14 = -near;
864
+ }
865
+ return [f / aspect, 0, 0, 0, 0, f, 0, 0, 0, 0, out10, -1, 0, 0, out14, 0];
866
+ }
867
+ exports.perspectiveZO = perspectiveZO;
868
+ /**
869
+ * Generates a perspective projection matrix with the given field of view.
870
+ * This is primarily useful for generating projection matrices to be used
871
+ * with the still experiemental WebVR API.
872
+ *
873
+ * @param fov Object containing the following values: upDegrees, downDegrees, leftDegrees, rightDegrees
874
+ * @param near Near bound of the frustum
875
+ * @param far Far bound of the frustum
876
+ */
877
+ function perspectiveFromFieldOfView(fov, near, far) {
878
+ const upTan = Math.tan((fov.upDegrees * Math.PI) / 180);
879
+ const downTan = Math.tan((fov.downDegrees * Math.PI) / 180);
880
+ const leftTan = Math.tan((fov.leftDegrees * Math.PI) / 180);
881
+ const rightTan = Math.tan((fov.rightDegrees * Math.PI) / 180);
882
+ const xScale = 2 / (leftTan + rightTan);
883
+ const yScale = 2 / (upTan + downTan);
884
+ // prettier-ignore
885
+ return [
886
+ xScale, 0, 0, 0,
887
+ 0, yScale, 0, 0,
888
+ -((leftTan - rightTan) * xScale * 0.5),
889
+ (upTan - downTan) * yScale * 0.5,
890
+ far / (near - far),
891
+ -1,
892
+ 0,
893
+ 0,
894
+ (far * near) / (near - far),
895
+ 0,
896
+ ];
897
+ }
898
+ exports.perspectiveFromFieldOfView = perspectiveFromFieldOfView;
899
+ /**
900
+ * Generates a orthogonal projection matrix with the given bounds.
901
+ * The near/far clip planes correspond to a normalized device coordinate Z range of [-1, 1],
902
+ * which matches WebGL/OpenGL's clip volume.
903
+ *
904
+ * @param left Left bound of the frustum
905
+ * @param right Right bound of the frustum
906
+ * @param bottom Bottom bound of the frustum
907
+ * @param top Top bound of the frustum
908
+ * @param near Near bound of the frustum
909
+ * @param far Far bound of the frustum
910
+ */
911
+ function orthoNO(left, right, bottom, top, near, far) {
912
+ const lr = 1 / (left - right);
913
+ const bt = 1 / (bottom - top);
914
+ const nf = 1 / (near - far);
915
+ // prettier-ignore
916
+ return [
917
+ -2 * lr, 0, 0, 0,
918
+ 0, -2 * bt, 0, 0,
919
+ 0, 0, 2 * nf, 0,
920
+ (left + right) * lr,
921
+ (top + bottom) * bt,
922
+ (far + near) * nf,
923
+ 1,
924
+ ];
925
+ }
926
+ exports.orthoNO = orthoNO;
927
+ /**
928
+ * Alias for {@link mat4.orthoNO}
929
+ * @function
930
+ */
931
+ exports.ortho = orthoNO;
932
+ /**
933
+ * Generates a orthogonal projection matrix with the given bounds.
934
+ * The near/far clip planes correspond to a normalized device coordinate Z range of [0, 1],
935
+ * which matches WebGPU/Vulkan/DirectX/Metal's clip volume.
936
+ *
937
+ * @param left Left bound of the frustum
938
+ * @param right Right bound of the frustum
939
+ * @param bottom Bottom bound of the frustum
940
+ * @param top Top bound of the frustum
941
+ * @param near Near bound of the frustum
942
+ * @param far Far bound of the frustum
943
+ */
944
+ function orthoZO(left, right, bottom, top, near, far) {
945
+ const lr = 1 / (left - right);
946
+ const bt = 1 / (bottom - top);
947
+ const nf = 1 / (near - far);
948
+ // prettier-ignore
949
+ return [
950
+ -2 * lr, 0, 0, 0,
951
+ 0, -2 * bt, 0, 0,
952
+ 0, 0, nf, 0,
953
+ (left + right) * lr,
954
+ (top + bottom) * bt,
955
+ near * nf,
956
+ 1,
957
+ ];
958
+ }
959
+ exports.orthoZO = orthoZO;
960
+ /**
961
+ * Generates a look-at matrix with the given eye position, focal point, and up axis.
962
+ * If you want a matrix that actually makes an object look at another object, you should use targetTo instead.
963
+ *
964
+ * @param eye Position of the viewer
965
+ * @param center Point the viewer is looking at
966
+ * @param up vec3 pointing up
967
+ */
968
+ function lookAt(eye, center, up) {
969
+ let x0, x1, x2, y0, y1, y2, z0, z1, z2, len;
970
+ const eyex = eye[0];
971
+ const eyey = eye[1];
972
+ const eyez = eye[2];
973
+ const upx = up[0];
974
+ const upy = up[1];
975
+ const upz = up[2];
976
+ const centerx = center[0];
977
+ const centery = center[1];
978
+ const centerz = center[2];
979
+ if (Math.abs(eyex - centerx) < Common.EPSILON &&
980
+ Math.abs(eyey - centery) < Common.EPSILON &&
981
+ Math.abs(eyez - centerz) < Common.EPSILON) {
982
+ return exports.identity;
983
+ }
984
+ z0 = eyex - centerx;
985
+ z1 = eyey - centery;
986
+ z2 = eyez - centerz;
987
+ len = 1 / Math.sqrt(z0 * z0 + z1 * z1 + z2 * z2);
980
988
  z0 *= len;
981
989
  z1 *= len;
982
990
  z2 *= len;
991
+ x0 = upy * z2 - upz * z1;
992
+ x1 = upz * z0 - upx * z2;
993
+ x2 = upx * z1 - upy * z0;
994
+ len = Math.sqrt(x0 * x0 + x1 * x1 + x2 * x2);
995
+ if (!len) {
996
+ x0 = 0;
997
+ x1 = 0;
998
+ x2 = 0;
999
+ }
1000
+ else {
1001
+ len = 1 / len;
1002
+ x0 *= len;
1003
+ x1 *= len;
1004
+ x2 *= len;
1005
+ }
1006
+ y0 = z1 * x2 - z2 * x1;
1007
+ y1 = z2 * x0 - z0 * x2;
1008
+ y2 = z0 * x1 - z1 * x0;
1009
+ len = Math.sqrt(y0 * y0 + y1 * y1 + y2 * y2);
1010
+ if (!len) {
1011
+ y0 = 0;
1012
+ y1 = 0;
1013
+ y2 = 0;
1014
+ }
1015
+ else {
1016
+ len = 1 / len;
1017
+ y0 *= len;
1018
+ y1 *= len;
1019
+ y2 *= len;
1020
+ }
1021
+ // prettier-ignore
1022
+ return [
1023
+ x0, y0, z0, 0,
1024
+ x1, y1, z1, 0,
1025
+ x2, y2, z2, 0,
1026
+ -(x0 * eyex + x1 * eyey + x2 * eyez),
1027
+ -(y0 * eyex + y1 * eyey + y2 * eyez),
1028
+ -(z0 * eyex + z1 * eyey + z2 * eyez),
1029
+ 1,
1030
+ ];
983
1031
  }
984
- let x0 = upy * z2 - upz * z1, x1 = upz * z0 - upx * z2, x2 = upx * z1 - upy * z0;
985
- len = x0 * x0 + x1 * x1 + x2 * x2;
986
- if (len > 0) {
987
- len = 1 / Math.sqrt(len);
988
- x0 *= len;
989
- x1 *= len;
990
- x2 *= len;
1032
+ exports.lookAt = lookAt;
1033
+ /**
1034
+ * Generates a matrix that makes something look at something else.
1035
+ *
1036
+ * @param eye Position of the viewer
1037
+ * @param center Point the viewer is looking at
1038
+ * @param up vec3 pointing up
1039
+ */
1040
+ function targetTo(eye, target, up) {
1041
+ const [eyex, eyey, eyez] = eye;
1042
+ const [upx, upy, upz] = up;
1043
+ let z0 = eyex - target[0], z1 = eyey - target[1], z2 = eyez - target[2];
1044
+ let len = z0 * z0 + z1 * z1 + z2 * z2;
1045
+ if (len > 0) {
1046
+ len = 1 / Math.sqrt(len);
1047
+ z0 *= len;
1048
+ z1 *= len;
1049
+ z2 *= len;
1050
+ }
1051
+ let x0 = upy * z2 - upz * z1, x1 = upz * z0 - upx * z2, x2 = upx * z1 - upy * z0;
1052
+ len = x0 * x0 + x1 * x1 + x2 * x2;
1053
+ if (len > 0) {
1054
+ len = 1 / Math.sqrt(len);
1055
+ x0 *= len;
1056
+ x1 *= len;
1057
+ x2 *= len;
1058
+ }
1059
+ // prettier-ignore
1060
+ return [
1061
+ x0, x1, x2, 0,
1062
+ z1 * x2 - z2 * x1,
1063
+ z2 * x0 - z0 * x2,
1064
+ z0 * x1 - z1 * x0,
1065
+ 0,
1066
+ z0, z1, z2, 0,
1067
+ eyex, eyey, eyez, 1,
1068
+ ];
991
1069
  }
992
- // prettier-ignore
993
- return [
994
- x0, x1, x2, 0,
995
- z1 * x2 - z2 * x1,
996
- z2 * x0 - z0 * x2,
997
- z0 * x1 - z1 * x0,
998
- 0,
999
- z0, z1, z2, 0,
1000
- eyex, eyey, eyez, 1,
1001
- ];
1002
- }
1003
- /**
1004
- * Returns Frobenius norm of a mat4
1005
- */
1006
- export function frob(a) {
1007
- return Math.sqrt(a[0] * a[0] +
1008
- a[1] * a[1] +
1009
- a[2] * a[2] +
1010
- a[3] * a[3] +
1011
- a[4] * a[4] +
1012
- a[5] * a[5] +
1013
- a[6] * a[6] +
1014
- a[7] * a[7] +
1015
- a[8] * a[8] +
1016
- a[9] * a[9] +
1017
- a[10] * a[10] +
1018
- a[11] * a[11] +
1019
- a[12] * a[12] +
1020
- a[13] * a[13] +
1021
- a[14] * a[14] +
1022
- a[15] * a[15]);
1023
- }
1024
- /**
1025
- * Adds two mat4's
1026
- */
1027
- export function add(a, b) {
1028
- return [
1029
- a[0] + b[0],
1030
- a[1] + b[1],
1031
- a[2] + b[2],
1032
- a[3] + b[3],
1033
- a[4] + b[4],
1034
- a[5] + b[5],
1035
- a[6] + b[6],
1036
- a[7] + b[7],
1037
- a[8] + b[8],
1038
- a[9] + b[9],
1039
- a[10] + b[10],
1040
- a[11] + b[11],
1041
- a[12] + b[12],
1042
- a[13] + b[13],
1043
- a[14] + b[14],
1044
- a[15] + b[15],
1045
- ];
1046
- }
1047
- /**
1048
- * Subtracts matrix b from matrix a
1049
- */
1050
- export function subtract(a, b) {
1051
- return [
1052
- a[0] - b[0],
1053
- a[1] - b[1],
1054
- a[2] - b[2],
1055
- a[3] - b[3],
1056
- a[4] - b[4],
1057
- a[5] - b[5],
1058
- a[6] - b[6],
1059
- a[7] - b[7],
1060
- a[8] - b[8],
1061
- a[9] - b[9],
1062
- a[10] - b[10],
1063
- a[11] - b[11],
1064
- a[12] - b[12],
1065
- a[13] - b[13],
1066
- a[14] - b[14],
1067
- a[15] - b[15],
1068
- ];
1069
- }
1070
- /**
1071
- * Multiply each element of the matrix by a scalar.
1072
- */
1073
- export function multiplyScalar(a, s) {
1074
- return [
1075
- a[0] * s,
1076
- a[1] * s,
1077
- a[2] * s,
1078
- a[3] * s,
1079
- a[4] * s,
1080
- a[5] * s,
1081
- a[6] * s,
1082
- a[7] * s,
1083
- a[8] * s,
1084
- a[9] * s,
1085
- a[10] * s,
1086
- a[11] * s,
1087
- a[12] * s,
1088
- a[13] * s,
1089
- a[14] * s,
1090
- a[15] * s,
1091
- ];
1092
- }
1093
- /**
1094
- * Adds two mat4's after multiplying each element of the second operand by a scalar value.
1095
- */
1096
- export function multiplyScalarAndAdd(a, b, scale) {
1097
- return [
1098
- a[0] + b[0] * scale,
1099
- a[1] + b[1] * scale,
1100
- a[2] + b[2] * scale,
1101
- a[3] + b[3] * scale,
1102
- a[4] + b[4] * scale,
1103
- a[5] + b[5] * scale,
1104
- a[6] + b[6] * scale,
1105
- a[7] + b[7] * scale,
1106
- a[8] + b[8] * scale,
1107
- a[9] + b[9] * scale,
1108
- a[10] + b[10] * scale,
1109
- a[11] + b[11] * scale,
1110
- a[12] + b[12] * scale,
1111
- a[13] + b[13] * scale,
1112
- a[14] + b[14] * scale,
1113
- a[15] + b[15] * scale,
1114
- ];
1115
- }
1116
- /**
1117
- * Returns whether or not the matrices have exactly the same elements in the same position (when compared with ===)
1118
- */
1119
- export function exactEquals(a, b) {
1120
- return (a[0] === b[0] &&
1121
- a[1] === b[1] &&
1122
- a[2] === b[2] &&
1123
- a[3] === b[3] &&
1124
- a[4] === b[4] &&
1125
- a[5] === b[5] &&
1126
- a[6] === b[6] &&
1127
- a[7] === b[7] &&
1128
- a[8] === b[8] &&
1129
- a[9] === b[9] &&
1130
- a[10] === b[10] &&
1131
- a[11] === b[11] &&
1132
- a[12] === b[12] &&
1133
- a[13] === b[13] &&
1134
- a[14] === b[14] &&
1135
- a[15] === b[15]);
1136
- }
1137
- /**
1138
- * Returns whether or not the matrices have approximately the same elements in the same position.
1139
- */
1140
- export function equals(a, b) {
1141
- const [a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, aA, aB, aC, aD, aE, aF] = a;
1142
- const [b0, b1, b2, b3, b4, b5, b6, b7, b8, b9, bA, bB, bC, bD, bE, bF] = b;
1143
- return (Math.abs(a0 - b0) <=
1144
- Common.EPSILON * Math.max(1, Math.abs(a0), Math.abs(b0)) &&
1145
- Math.abs(a1 - b1) <=
1146
- Common.EPSILON * Math.max(1, Math.abs(a1), Math.abs(b1)) &&
1147
- Math.abs(a2 - b2) <=
1148
- Common.EPSILON * Math.max(1, Math.abs(a2), Math.abs(b2)) &&
1149
- Math.abs(a3 - b3) <=
1150
- Common.EPSILON * Math.max(1, Math.abs(a3), Math.abs(b3)) &&
1151
- Math.abs(a4 - b4) <=
1152
- Common.EPSILON * Math.max(1, Math.abs(a4), Math.abs(b4)) &&
1153
- Math.abs(a5 - b5) <=
1154
- Common.EPSILON * Math.max(1, Math.abs(a5), Math.abs(b5)) &&
1155
- Math.abs(a6 - b6) <=
1156
- Common.EPSILON * Math.max(1, Math.abs(a6), Math.abs(b6)) &&
1157
- Math.abs(a7 - b7) <=
1158
- Common.EPSILON * Math.max(1, Math.abs(a7), Math.abs(b7)) &&
1159
- Math.abs(a8 - b8) <=
1160
- Common.EPSILON * Math.max(1, Math.abs(a8), Math.abs(b8)) &&
1161
- Math.abs(a9 - b9) <=
1162
- Common.EPSILON * Math.max(1, Math.abs(a9), Math.abs(b9)) &&
1163
- Math.abs(aA - bA) <=
1164
- Common.EPSILON * Math.max(1, Math.abs(aA), Math.abs(bA)) &&
1165
- Math.abs(aB - bB) <=
1166
- Common.EPSILON * Math.max(1, Math.abs(aB), Math.abs(bB)) &&
1167
- Math.abs(aC - bC) <=
1168
- Common.EPSILON * Math.max(1, Math.abs(aC), Math.abs(bC)) &&
1169
- Math.abs(aD - bD) <=
1170
- Common.EPSILON * Math.max(1, Math.abs(aD), Math.abs(bD)) &&
1171
- Math.abs(aE - bE) <=
1172
- Common.EPSILON * Math.max(1, Math.abs(aE), Math.abs(bE)) &&
1173
- Math.abs(aF - bF) <=
1174
- Common.EPSILON * Math.max(1, Math.abs(aF), Math.abs(bF)));
1175
- }
1176
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF0NC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9tYXQ0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxNQUFNLE1BQU0sVUFBVSxDQUFBO0FBWWxDOztHQUVHO0FBRUg7O0dBRUc7QUFDSCxrQkFBa0I7QUFDbEIsTUFBTSxDQUFDLE1BQU0sUUFBUSxHQUFTLE1BQU0sQ0FBQyxNQUFNLENBQUM7SUFDM0MsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztJQUNWLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7SUFDVixDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0lBQ1YsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztDQUNWLENBQUMsQ0FBQTtBQUVGLE1BQU0sQ0FBQyxNQUFNLElBQUksR0FBUyxNQUFNLENBQUMsTUFBTSxDQUFDO0lBQ3ZDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7Q0FDOUMsQ0FBQyxDQUFBO0FBRUY7O0dBRUc7QUFDSCxNQUFNLFVBQVUsU0FBUyxDQUFDLENBQU87SUFDaEMsa0JBQWtCO0lBQ2xCLE9BQU87UUFDTixDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ3hCLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDeEIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUN4QixDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDO0tBQ3hCLENBQUE7QUFDRixDQUFDO0FBRUQ7O0dBRUc7QUFDSCxNQUFNLFVBQVUsTUFBTSxDQUFDLENBQU87SUFDN0Isa0JBQWtCO0lBQ2xCLE1BQU0sQ0FDTCxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQ2xCLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFDbEIsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUNsQixHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUE7SUFFeEIsTUFBTSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFBO0lBQ2pDLE1BQU0sR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQTtJQUNqQyxNQUFNLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUE7SUFDakMsTUFBTSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFBO0lBQ2pDLE1BQU0sR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQTtJQUNqQyxNQUFNLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUE7SUFDakMsTUFBTSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFBO0lBQ2pDLE1BQU0sR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQTtJQUNqQyxNQUFNLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUE7SUFDakMsTUFBTSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFBO0lBQ2pDLE1BQU0sR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQTtJQUNqQyxNQUFNLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUE7SUFFakMsNEJBQTRCO0lBQzVCLE1BQU0sR0FBRyxHQUNSLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFBO0lBRXRFLElBQUksQ0FBQyxHQUFHLEVBQUU7UUFDVCxPQUFPLElBQUksQ0FBQTtLQUNYO0lBRUQsTUFBTSxNQUFNLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQTtJQUV0QixPQUFPO1FBQ04sQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLE1BQU07UUFDNUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLE1BQU07UUFDNUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLE1BQU07UUFDNUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLE1BQU07UUFDNUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLE1BQU07UUFDNUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLE1BQU07UUFDNUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLE1BQU07UUFDNUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLE1BQU07UUFDNUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLE1BQU07UUFDNUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLE1BQU07UUFDNUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLE1BQU07UUFDNUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLE1BQU07UUFDNUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLE1BQU07UUFDNUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLE1BQU07UUFDNUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLE1BQU07UUFDNUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLE1BQU07S0FDNUMsQ0FBQTtBQUNGLENBQUM7QUFFRDs7R0FFRztBQUNILE1BQU0sVUFBVSxPQUFPLENBQUMsQ0FBTztJQUM5QixrQkFBa0I7SUFDbEIsTUFBTSxDQUNMLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFDbEIsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUNsQixHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQ2xCLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQTtJQUV4QixNQUFNLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUE7SUFDakMsTUFBTSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFBO0lBQ2pDLE1BQU0sR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQTtJQUNqQyxNQUFNLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUE7SUFDakMsTUFBTSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFBO0lBQ2pDLE1BQU0sR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQTtJQUNqQyxNQUFNLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUE7SUFDakMsTUFBTSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFBO0lBQ2pDLE1BQU0sR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQTtJQUNqQyxNQUFNLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUE7SUFDakMsTUFBTSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFBO0lBQ2pDLE1BQU0sR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQTtJQUVqQyxPQUFPO1FBQ04sR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHO1FBQ2pDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRztRQUNqQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUc7UUFDakMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHO1FBQ2pDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRztRQUNqQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUc7UUFDakMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHO1FBQ2pDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRztRQUNqQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUc7UUFDakMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHO1FBQ2pDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRztRQUNqQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUc7UUFDakMsR0FBRyxHQUFH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QTtJQUNsRCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsQ0FBQTtJQUNsRCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsQ0FBQTtJQUNsRCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsQ0FBQTtJQUVsRCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBO0lBQ1QsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQTtJQUNULEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUE7SUFDVCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBO0lBQ1QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLENBQUE7SUFDbEQsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLENBQUE7SUFDbEQsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLENBQUE7SUFDbEQsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLENBQUE7SUFFbEQsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQTtJQUNULEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUE7SUFDVCxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFBO0lBQ1YsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQTtJQUNWLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxDQUFBO0lBQ2xELEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxDQUFBO0lBQ2xELEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxDQUFBO0lBQ25ELEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxDQUFBO0lBRW5ELEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUE7SUFDVixFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFBO0lBQ1YsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQTtJQUNWLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUE7SUFDVixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxH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QU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQTtRQUNsQyxPQUFPLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFBO0tBQzFFO1NBQU0sSUFBSSxJQUFJLEdBQUcsSUFBSSxJQUFJLElBQUksR0FBRyxJQUFJLEVBQUU7UUFDdEMsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxHQUFHLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUE7UUFDL0MsT0FBTyxDQUFDLElBQUksR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQTtLQUMxRTtTQUFNLElBQUksSUFBSSxHQUFHLElBQUksRUFBRTtRQUN2QixNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQTtRQUMvQyxPQUFPLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLElBQUksR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFBO0tBQzFFO1NBQU07UUFDTixNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQTtRQUMvQyxPQUFPLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxJQUFJLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFBO0tBQzFFO0FBQ0YsQ0FBQztBQVFEOzs7OztHQUtHO0FBQ0gsTUFBTSxVQUFVLFNBQVMsQ0FBQyxHQUFTO0lBQ2xDLE1BQU0sS0FBSyxHQUFTLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQTtJQUUvQyxrQkFBa0I7SUFDbEIsTUFBTSxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEFBQUQsRUFDZCxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxBQUFELEVBQ2QsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUcsR0FBRyxHQUFHLENBQUE7SUFFN0IsTUFBTSxLQUFLLEdBQVM7UUFDbkIsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztRQUM1QyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO1FBQzVDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7S0FDNUMsQ0FBQTtJQUVELE1BQU0sR0FBRyxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUE7SUFDeEIsTUFBTSxHQUFHLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQTtJQUN4QixNQUFNLEdBQUcsR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFBO0lBRXhCLE1BQU0sSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUE7SUFDdEIsTUFBTSxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQTtJQUN0QixNQUFNLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFBO0lBQ3RCLE1BQU0sSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUE7SUFDdEIsTUFBTSxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQTtJQUN0QixNQUFNLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFBO0lBQ3RCLE1BQU0sSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUE7SUFDdEIsTUFBTSxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQTtJQUN0QixNQUFNLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFBO0lBRXRCLE1BQU0sS0FBSyxHQUFHLElBQUksR0FBRyxJQUFJLEdBQUcsSUFBSSxDQUFBO0lBRWhDLElBQUksR0FBUyxDQUFBO0lBRWIsSUFBSSxLQUFLLEdBQUcsQ0FBQyxFQUFFO1FBQ2QsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFBO1FBQ2xDLEdBQUcsR0FBRyxDQUFDLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQTtLQUN6RTtTQUFNLElBQUksSUFBSSxHQUFHLElBQUksSUFBSSxJQUFJLEdBQUcsSUFBSSxFQUFFO1FBQ3RDLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElB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LEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFBO0lBQ3hCLEdBQUcsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUE7SUFDNUMsSUFBSSxDQUFDLEdBQUcsRUFBRTtRQUNULEVBQUUsR0FBRyxDQUFDLENBQUE7UUFDTixFQUFFLEdBQUcsQ0FBQyxDQUFBO1FBQ04sRUFBRSxHQUFHLENBQUMsQ0FBQTtLQUNOO1NBQU07UUFDTixHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQTtRQUNiLEVBQUUsSUFBSSxHQUFHLENBQUE7UUFDVCxFQUFFLElBQUksR0FBRyxDQUFBO1FBQ1QsRUFBRSxJQUFJLEdBQUcsQ0FBQTtLQUNUO0lBRUQsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQTtJQUN0QixFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFBO0lBQ3RCLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUE7SUFFdEIsR0FBRyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQTtJQUM1QyxJQUFJLENBQUMsR0FBRyxFQUFFO1FBQ1QsRUFBRSxHQUFHLENBQUMsQ0FBQTtRQUNOLEVBQUUsR0FBRyxDQUFDLENBQUE7UUFDTixFQUFFLEdBQUcsQ0FBQyxDQUFBO0tBQ047U0FBTTtRQUNOLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFBO1FBQ2IsRUFBRSxJQUFJLEdBQUcsQ0FBQTtRQUNULEVBQUUsSUFBSSxHQUFHLENBQUE7UUFDVCxFQUFFLElBQUksR0FBRyxDQUFBO0tBQ1Q7SUFFRCxrQkFBa0I7SUFDbEIsT0FBTztRQUNOLEVBQUUsRUFBRSxFQUFFLEVBQUUs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Q0FBQyxDQUFDLENBQUM7UUFDWCxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNYLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ1gsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDWCxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNYLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ1gsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDWCxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNYLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ1gsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDYixDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUNiLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ2IsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDYixDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUNiLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQ2QsQ0FBQTtBQUNGLENBQUM7QUFFRDs7R0FFRztBQUNILE1BQU0sVUFBVSxHQUFHLENBQUMsQ0FBTyxFQUFFLENBQU87SUFDbkMsT0FBTztRQUNOLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ1gsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDWCxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNYLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ1gsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDWCxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNYLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ1gsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDWCxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNYLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ1gsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDYixDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUNiLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ2IsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDYixDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUNiLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO0tBQ2IsQ0FBQTtBQUNGLENBQUM7QUFFRDs7R0FFRztBQUNILE1BQU0sVUFBVSxRQUFRLENBQUMsQ0FBTyxFQUFFLENBQU87SUFDeEMsT0FBTztRQUNOLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ1gsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDWCxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNYLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ1gsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDWCxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNYLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ1gsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDWCxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNYLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ1gsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDYixDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUNiLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ2IsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDYixDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUNiLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO0tBQ2IsQ0FBQTtBQUNGLENBQUM7QUFFRDs7R0FFRztBQUNILE1BQU0sVUFBVSxjQUFjLENBQUMsQ0FBTyxFQUFFLENBQVM7SUFDaEQsT0FBTztRQUNOLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDO1FBQ1IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUM7UUFDUixDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQztRQUNSLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDO1FBQ1IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUM7UUFDUixDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQztRQUNSLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDO1FBQ1IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUM7UUFDUixDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQztRQUNSLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDO1FBQ1IsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUM7UUFDVCxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQztRQUNULENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDO1FBQ1QsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUM7UUFDVCxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQztRQUNULENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDO0tBQ1QsQ0FBQTtBQUNGLENBQUM7QUFFRDs7R0FFRztBQUNILE1BQU0sVUFBVSxvQkFBb0IsQ0FBQyxDQUFPLEVBQUUsQ0FBTyxFQUFFLEtBQWE7SUFDbkUsT0FBTztRQUNOLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSztRQUNuQixDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUs7UUFDbkIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLO1FBQ25CLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSztRQUNuQixDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUs7UUFDbkIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLO1FBQ25CLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSztRQUNuQixDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUs7UUFDbkIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLO1FBQ25CLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSztRQUNuQixDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUs7UUFDckIsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLO1FBQ3JCLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSztRQUNyQixDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUs7UUFDckIsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLO1FBQ3JCLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSztLQUNyQixDQUFBO0FBQ0YsQ0FBQztBQUVEOztHQUVHO0FBQ0gsTUFBTSxVQUFVLFdBQVcsQ0FBQyxDQUFPLEVBQUUsQ0FBTztJQUMzQyxPQUFPLENBQ04sQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDYixDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNiLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDYixDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNiLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDYixDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNiLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDYixDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUNmLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ2YsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDZixDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUNmLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ2YsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FDZixDQUFBO0FBQ0YsQ0FBQztBQUVEOztHQUVHO0FBQ0gsTUFBTSxVQUFVLE1BQU0sQ0FBQyxDQUFPLEVBQUUsQ0FBTztJQUN0QyxNQUFNLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFBO0lBQzFFLE1BQU0sQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUE7SUFFMUUsT0FBTyxDQUNOLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQztRQUNoQixNQUFNLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN6RCxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUM7WUFDaEIsTUFBTSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDekQsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDO1lBQ2hCLE1BQU0sQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3pELElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQztZQUNoQixNQUFNLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN6RCxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUM7WUFDaEIsTUFBTSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDekQsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDO1lBQ2hCLE1BQU0sQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3pELElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQztZQUNoQixNQUFNLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN6RCxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUM7WUFDaEIsTUFBTSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDekQsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDO1lBQ2hCLE1BQU0sQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3pELElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQztZQUNoQixNQUFNLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN6RCxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUM7WUFDaEIsTUFBTSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDekQsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDO1lBQ2hCLE1BQU0sQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3pELElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQztZQUNoQixNQUFNLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN6RCxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUM7WUFDaEIsTUFBTSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDekQsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDO1lBQ2hCLE1BQU0sQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3pELElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQztZQUNoQixNQUFNLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUN6RCxDQUFBO0FBQ0YsQ0FBQyJ9
1070
+ exports.targetTo = targetTo;
1071
+ /**
1072
+ * Returns Frobenius norm of a mat4
1073
+ */
1074
+ function frob(a) {
1075
+ return Math.sqrt(a[0] * a[0] +
1076
+ a[1] * a[1] +
1077
+ a[2] * a[2] +
1078
+ a[3] * a[3] +
1079
+ a[4] * a[4] +
1080
+ a[5] * a[5] +
1081
+ a[6] * a[6] +
1082
+ a[7] * a[7] +
1083
+ a[8] * a[8] +
1084
+ a[9] * a[9] +
1085
+ a[10] * a[10] +
1086
+ a[11] * a[11] +
1087
+ a[12] * a[12] +
1088
+ a[13] * a[13] +
1089
+ a[14] * a[14] +
1090
+ a[15] * a[15]);
1091
+ }
1092
+ exports.frob = frob;
1093
+ /**
1094
+ * Adds two mat4's
1095
+ */
1096
+ function add(a, b) {
1097
+ return [
1098
+ a[0] + b[0],
1099
+ a[1] + b[1],
1100
+ a[2] + b[2],
1101
+ a[3] + b[3],
1102
+ a[4] + b[4],
1103
+ a[5] + b[5],
1104
+ a[6] + b[6],
1105
+ a[7] + b[7],
1106
+ a[8] + b[8],
1107
+ a[9] + b[9],
1108
+ a[10] + b[10],
1109
+ a[11] + b[11],
1110
+ a[12] + b[12],
1111
+ a[13] + b[13],
1112
+ a[14] + b[14],
1113
+ a[15] + b[15],
1114
+ ];
1115
+ }
1116
+ exports.add = add;
1117
+ /**
1118
+ * Subtracts matrix b from matrix a
1119
+ */
1120
+ function subtract(a, b) {
1121
+ return [
1122
+ a[0] - b[0],
1123
+ a[1] - b[1],
1124
+ a[2] - b[2],
1125
+ a[3] - b[3],
1126
+ a[4] - b[4],
1127
+ a[5] - b[5],
1128
+ a[6] - b[6],
1129
+ a[7] - b[7],
1130
+ a[8] - b[8],
1131
+ a[9] - b[9],
1132
+ a[10] - b[10],
1133
+ a[11] - b[11],
1134
+ a[12] - b[12],
1135
+ a[13] - b[13],
1136
+ a[14] - b[14],
1137
+ a[15] - b[15],
1138
+ ];
1139
+ }
1140
+ exports.subtract = subtract;
1141
+ /**
1142
+ * Multiply each element of the matrix by a scalar.
1143
+ */
1144
+ function multiplyScalar(a, s) {
1145
+ return [
1146
+ a[0] * s,
1147
+ a[1] * s,
1148
+ a[2] * s,
1149
+ a[3] * s,
1150
+ a[4] * s,
1151
+ a[5] * s,
1152
+ a[6] * s,
1153
+ a[7] * s,
1154
+ a[8] * s,
1155
+ a[9] * s,
1156
+ a[10] * s,
1157
+ a[11] * s,
1158
+ a[12] * s,
1159
+ a[13] * s,
1160
+ a[14] * s,
1161
+ a[15] * s,
1162
+ ];
1163
+ }
1164
+ exports.multiplyScalar = multiplyScalar;
1165
+ /**
1166
+ * Adds two mat4's after multiplying each element of the second operand by a scalar value.
1167
+ */
1168
+ function multiplyScalarAndAdd(a, b, scale) {
1169
+ return [
1170
+ a[0] + b[0] * scale,
1171
+ a[1] + b[1] * scale,
1172
+ a[2] + b[2] * scale,
1173
+ a[3] + b[3] * scale,
1174
+ a[4] + b[4] * scale,
1175
+ a[5] + b[5] * scale,
1176
+ a[6] + b[6] * scale,
1177
+ a[7] + b[7] * scale,
1178
+ a[8] + b[8] * scale,
1179
+ a[9] + b[9] * scale,
1180
+ a[10] + b[10] * scale,
1181
+ a[11] + b[11] * scale,
1182
+ a[12] + b[12] * scale,
1183
+ a[13] + b[13] * scale,
1184
+ a[14] + b[14] * scale,
1185
+ a[15] + b[15] * scale,
1186
+ ];
1187
+ }
1188
+ exports.multiplyScalarAndAdd = multiplyScalarAndAdd;
1189
+ /**
1190
+ * Returns whether or not the matrices have exactly the same elements in the same position (when compared with ===)
1191
+ */
1192
+ function exactEquals(a, b) {
1193
+ return (a[0] === b[0] &&
1194
+ a[1] === b[1] &&
1195
+ a[2] === b[2] &&
1196
+ a[3] === b[3] &&
1197
+ a[4] === b[4] &&
1198
+ a[5] === b[5] &&
1199
+ a[6] === b[6] &&
1200
+ a[7] === b[7] &&
1201
+ a[8] === b[8] &&
1202
+ a[9] === b[9] &&
1203
+ a[10] === b[10] &&
1204
+ a[11] === b[11] &&
1205
+ a[12] === b[12] &&
1206
+ a[13] === b[13] &&
1207
+ a[14] === b[14] &&
1208
+ a[15] === b[15]);
1209
+ }
1210
+ exports.exactEquals = exactEquals;
1211
+ /**
1212
+ * Returns whether or not the matrices have approximately the same elements in the same position.
1213
+ */
1214
+ function equals(a, b) {
1215
+ const [a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, aA, aB, aC, aD, aE, aF] = a;
1216
+ const [b0, b1, b2, b3, b4, b5, b6, b7, b8, b9, bA, bB, bC, bD, bE, bF] = b;
1217
+ return (Math.abs(a0 - b0) <=
1218
+ Common.EPSILON * Math.max(1, Math.abs(a0), Math.abs(b0)) &&
1219
+ Math.abs(a1 - b1) <=
1220
+ Common.EPSILON * Math.max(1, Math.abs(a1), Math.abs(b1)) &&
1221
+ Math.abs(a2 - b2) <=
1222
+ Common.EPSILON * Math.max(1, Math.abs(a2), Math.abs(b2)) &&
1223
+ Math.abs(a3 - b3) <=
1224
+ Common.EPSILON * Math.max(1, Math.abs(a3), Math.abs(b3)) &&
1225
+ Math.abs(a4 - b4) <=
1226
+ Common.EPSILON * Math.max(1, Math.abs(a4), Math.abs(b4)) &&
1227
+ Math.abs(a5 - b5) <=
1228
+ Common.EPSILON * Math.max(1, Math.abs(a5), Math.abs(b5)) &&
1229
+ Math.abs(a6 - b6) <=
1230
+ Common.EPSILON * Math.max(1, Math.abs(a6), Math.abs(b6)) &&
1231
+ Math.abs(a7 - b7) <=
1232
+ Common.EPSILON * Math.max(1, Math.abs(a7), Math.abs(b7)) &&
1233
+ Math.abs(a8 - b8) <=
1234
+ Common.EPSILON * Math.max(1, Math.abs(a8), Math.abs(b8)) &&
1235
+ Math.abs(a9 - b9) <=
1236
+ Common.EPSILON * Math.max(1, Math.abs(a9), Math.abs(b9)) &&
1237
+ Math.abs(aA - bA) <=
1238
+ Common.EPSILON * Math.max(1, Math.abs(aA), Math.abs(bA)) &&
1239
+ Math.abs(aB - bB) <=
1240
+ Common.EPSILON * Math.max(1, Math.abs(aB), Math.abs(bB)) &&
1241
+ Math.abs(aC - bC) <=
1242
+ Common.EPSILON * Math.max(1, Math.abs(aC), Math.abs(bC)) &&
1243
+ Math.abs(aD - bD) <=
1244
+ Common.EPSILON * Math.max(1, Math.abs(aD), Math.abs(bD)) &&
1245
+ Math.abs(aE - bE) <=
1246
+ Common.EPSILON * Math.max(1, Math.abs(aE), Math.abs(bE)) &&
1247
+ Math.abs(aF - bF) <=
1248
+ Common.EPSILON * Math.max(1, Math.abs(aF), Math.abs(bF)));
1249
+ }
1250
+ exports.equals = equals;
1251
+ });
1252
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF0NC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9tYXQ0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0lBQUEsaURBQWtDO0lBWWxDOztPQUVHO0lBRUg7O09BRUc7SUFDSCxrQkFBa0I7SUFDTCxRQUFBLFFBQVEsR0FBUyxNQUFNLENBQUMsTUFBTSxDQUFDO1FBQzNDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7UUFDVixDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO1FBQ1YsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztRQUNWLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7S0FDVixDQUFDLENBQUE7SUFFVyxRQUFBLElBQUksR0FBUyxNQUFNLENBQUMsTUFBTSxDQUFDO1FBQ3ZDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7S0FDOUMsQ0FBQyxDQUFBO0lBRUY7O09BRUc7SUFDSCxTQUFnQixTQUFTLENBQUMsQ0FBTztRQUNoQyxrQkFBa0I7UUFDbEIsT0FBTztZQUNOLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDeEIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUN4QixDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ3hCLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUM7U0FDeEIsQ0FBQTtJQUNGLENBQUM7SUFSRCw4QkFRQztJQUVEOztPQUVHO0lBQ0gsU0FBZ0IsTUFBTSxDQUFDLENBQU87UUFDN0Isa0JBQWtCO1FBQ2xCLE1BQU0sQ0FDTCxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQ2xCLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFDbEIsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUNsQixHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUE7UUFFeEIsTUFBTSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFBO1FBQ2pDLE1BQU0sR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQTtRQUNqQyxNQUFNLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUE7UUFDakMsTUFBTSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFBO1FBQ2pDLE1BQU0sR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQTtRQUNqQyxNQUFNLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUE7UUFDakMsTUFBTSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFBO1FBQ2pDLE1BQU0sR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQTtRQUNqQyxNQUFNLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUE7UUFDakMsTUFBTSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFBO1FBQ2pDLE1BQU0sR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQTtRQUNqQyxNQUFNLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUE7UUFFakMsNEJBQTRCO1FBQzVCLE1BQU0sR0FBRyxHQUNSLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFBO1FBRXRFLElBQUksQ0FBQyxHQUFHLEVBQUU7WUFDVCxPQUFPLElBQUksQ0FBQTtTQUNYO1FBRUQsTUFBTSxNQUFNLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQTtRQUV0QixPQUFPO1lBQ04sQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLE1BQU07WUFDNUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLE1BQU07WUFDNUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLE1BQU07WUFDNUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLE1BQU07WUFDNUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLE1BQU07WUFDNUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLE1BQU07WUFDNUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLE1BQU07WUFDNUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLE1BQU07WUFDNUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLE1BQU07WUFDNUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLE1BQU07WUFDNUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLE1BQU07WUFDNUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLE1BQU07WUFDNUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLE1BQU07WUFDNUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLE1BQU07WUFDNUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLE1BQU07WUFDNUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLE1BQU07U0FDNUMsQ0FBQTtJQUNGLENBQUM7SUFqREQsd0JBaURDO0lBRUQ7O09BRUc7SUFDSCxTQUFnQixPQUFPLENBQUMsQ0FBTztRQUM5QixrQkFBa0I7UUFDbEIsTUFBTSxDQUNMLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFDbEIsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUNsQixHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQ2xCLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQTtRQUV4QixNQUFNLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUE7UUFDakMsTUFBTSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFBO1FBQ2pDLE1BQU0sR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQTtRQUNqQyxNQUFNLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUE7UUFDakMsTUFBTSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFBO1FBQ2pDLE1BQU0sR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQTtRQUNqQyxNQUFNLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUE7UUFDakMsTUFBTSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFBO1FBQ2pDLE1BQU0sR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQTtRQUNqQyxNQUFNLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUE7UUFDakMsTUFBTSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFBO1FBQ2pDLE1BQU0sR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQTtRQUVqQyxPQUFPO1lBQ04sR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHO1lBQ2pDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRztZQUNqQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUc7WUFDakMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHO1lBQ2pDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRztZQUNqQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUc7WUFDakMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHO1lBQ2pDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRztZQUNqQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUc7WUFDakMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHO1lBQ2pDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRztZQUNqQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUc7WUFDakMsR0FBRyxH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QUcsRUFBRSxHQUFHLEdBQUcsQ0FBQTtRQUNsRCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsQ0FBQTtRQUNsRCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsQ0FBQTtRQUNsRCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsQ0FBQTtRQUVsRCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBO1FBQ1QsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQTtRQUNULEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUE7UUFDVCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBO1FBQ1QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLENBQUE7UUFDbEQsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLENBQUE7UUFDbEQsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLENBQUE7UUFDbEQsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLENBQUE7UUFFbEQsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQTtRQUNULEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUE7UUFDVCxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFBO1FBQ1YsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQTtRQUNWLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxDQUFBO1FBQ2xELEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxDQUFBO1FBQ2xELEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxDQUFBO1FBQ25ELEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxDQUFBO1FBRW5ELEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUE7UUFDVixFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFBO1FBQ1YsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQTtRQUNWLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUE7UUFDVixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUs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QUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFBO1NBQ3pFO2FBQU0sSUFBSSxJQUFJLEdBQUcsSUFBSSxJQUFJLElBQUksR0FBRyxJQUFJLEVBQUU7WUFDdEMsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxHQUFHLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUE7WUFDL0MsR0FBRyxHQUFHLENBQUMsSUFBSSxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFBO1NBQ3pFO2FBQU0sSUFBSSxJQUFJLEdBQUcsSUFBSSxFQUFFO1lBQ3ZCLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksR0FBRyxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFBO1lBQy9DLEdBQUcsR0FBRyxDQUFDLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxJQUFJLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQTtTQUN6RTthQUFNO1lBQ04sTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxHQUFHLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUE7WUFDL0MsR0FBRyxHQUFHLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxJQUFJLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFB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QUFDLENBQUMsR0FBRyxLQUFLO1lBQ25CLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSztZQUNuQixDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUs7WUFDbkIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLO1lBQ25CLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSztZQUNuQixDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUs7WUFDbkIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLO1lBQ25CLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSztZQUNuQixDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUs7WUFDbkIsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLO1lBQ3JCLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSztZQUNyQixDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUs7WUFDckIsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLO1lBQ3JCLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSztZQUNyQixDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUs7U0FDckIsQ0FBQTtJQUNGLENBQUM7SUFuQkQsb0RBbUJDO0lBRUQ7O09BRUc7SUFDSCxTQUFnQixXQUFXLENBQUMsQ0FBTyxFQUFFLENBQU87UUFDM0MsT0FBTyxDQUNOLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ2IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDYixDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNiLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ2IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDYixDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNiLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ2IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDYixDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNiLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ2IsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDZixDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUNmLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ2YsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDZixDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUNmLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQ2YsQ0FBQTtJQUNGLENBQUM7SUFuQkQsa0NBbUJDO0lBRUQ7O09BRUc7SUFDSCxTQUFnQixNQUFNLENBQUMsQ0FBTyxFQUFFLENBQU87UUFDdEMsTUFBTSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQTtRQUMxRSxNQUFNLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFBO1FBRTFFLE9BQU8sQ0FDTixJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUM7WUFDaEIsTUFBTSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDekQsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDO2dCQUNoQixNQUFNLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUN6RCxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUM7Z0JBQ2hCLE1BQU0sQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ3pELElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQztnQkFDaEIsTUFBTSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDekQsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDO2dCQUNoQixNQUFNLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUN6RCxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUM7Z0JBQ2hCLE1BQU0sQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ3pELElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQztnQkFDaEIsTUFBTSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDekQsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDO2dCQUNoQixNQUFNLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUN6RCxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUM7Z0JBQ2hCLE1BQU0sQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ3pELElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQztnQkFDaEIsTUFBTSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDekQsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDO2dCQUNoQixNQUFNLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUN6RCxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUM7Z0JBQ2hCLE1BQU0sQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ3pELElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQztnQkFDaEIsTUFBTSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDekQsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDO2dCQUNoQixNQUFNLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUN6RCxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUM7Z0JBQ2hCLE1BQU0sQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ3pELElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQztnQkFDaEIsTUFBTSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FDekQsQ0FBQTtJQUNGLENBQUM7SUF0Q0Qsd0JBc0NDIn0=