linearly 0.36.0 → 0.37.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.
Files changed (47) hide show
  1. package/lib/esm/mat2.d.ts +1 -1
  2. package/lib/esm/mat2.d.ts.map +1 -1
  3. package/lib/esm/mat2.js +3 -2
  4. package/lib/esm/mat2d.d.ts.map +1 -1
  5. package/lib/esm/mat2d.js +4 -5
  6. package/lib/esm/mat3.d.ts.map +1 -1
  7. package/lib/esm/mat3.js +16 -15
  8. package/lib/esm/mat4.d.ts.map +1 -1
  9. package/lib/esm/mat4.js +18 -17
  10. package/lib/esm/quat.js +3 -3
  11. package/lib/esm/scalar.d.ts +6 -35
  12. package/lib/esm/scalar.d.ts.map +1 -1
  13. package/lib/esm/scalar.js +11 -53
  14. package/package.json +9 -4
  15. package/lib/cjs/common.d.ts +0 -16
  16. package/lib/cjs/common.d.ts.map +0 -1
  17. package/lib/cjs/common.js +0 -70
  18. package/lib/cjs/index.d.ts +0 -10
  19. package/lib/cjs/index.d.ts.map +0 -1
  20. package/lib/cjs/index.js +0 -22
  21. package/lib/cjs/mat2.d.ts +0 -272
  22. package/lib/cjs/mat2.d.ts.map +0 -1
  23. package/lib/cjs/mat2.js +0 -473
  24. package/lib/cjs/mat2d.d.ts +0 -329
  25. package/lib/cjs/mat2d.d.ts.map +0 -1
  26. package/lib/cjs/mat2d.js +0 -641
  27. package/lib/cjs/mat3.d.ts +0 -295
  28. package/lib/cjs/mat3.d.ts.map +0 -1
  29. package/lib/cjs/mat3.js +0 -670
  30. package/lib/cjs/mat4.d.ts +0 -532
  31. package/lib/cjs/mat4.d.ts.map +0 -1
  32. package/lib/cjs/mat4.js +0 -1576
  33. package/lib/cjs/quat.d.ts +0 -334
  34. package/lib/cjs/quat.d.ts.map +0 -1
  35. package/lib/cjs/quat.js +0 -802
  36. package/lib/cjs/scalar.d.ts +0 -501
  37. package/lib/cjs/scalar.d.ts.map +0 -1
  38. package/lib/cjs/scalar.js +0 -728
  39. package/lib/cjs/vec2.d.ts +0 -664
  40. package/lib/cjs/vec2.d.ts.map +0 -1
  41. package/lib/cjs/vec2.js +0 -1247
  42. package/lib/cjs/vec3.d.ts +0 -660
  43. package/lib/cjs/vec3.d.ts.map +0 -1
  44. package/lib/cjs/vec3.js +0 -1329
  45. package/lib/cjs/vec4.d.ts +0 -552
  46. package/lib/cjs/vec4.d.ts.map +0 -1
  47. package/lib/cjs/vec4.js +0 -1200
package/lib/cjs/vec2.js DELETED
@@ -1,1247 +0,0 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __importStar = (this && this.__importStar) || (function () {
19
- var ownKeys = function(o) {
20
- ownKeys = Object.getOwnPropertyNames || function (o) {
21
- var ar = [];
22
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
- return ar;
24
- };
25
- return ownKeys(o);
26
- };
27
- return function (mod) {
28
- if (mod && mod.__esModule) return mod;
29
- var result = {};
30
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
- __setModuleDefault(result, mod);
32
- return result;
33
- };
34
- })();
35
- Object.defineProperty(exports, "__esModule", { value: true });
36
- exports.vec2 = void 0;
37
- const Common = __importStar(require("./common"));
38
- const scalar_1 = require("./scalar");
39
- /**
40
- * Functions for {@link vec2}, a 2D vector.
41
- * @category Modules
42
- */
43
- var vec2;
44
- (function (vec2) {
45
- /**
46
- * Creates a new vector from given elements
47
- * @category Generators
48
- */
49
- function of(x, y = x) {
50
- return [x, y];
51
- }
52
- vec2.of = of;
53
- /**
54
- * Creates a mutable clone of given vec2
55
- * @category Generators
56
- */
57
- function clone(a) {
58
- return [...a];
59
- }
60
- vec2.clone = clone;
61
- /**
62
- * @category Constants
63
- */
64
- vec2.zero = Object.freeze([0, 0]);
65
- /**
66
- * @category Constants
67
- */
68
- vec2.one = Object.freeze([1, 1]);
69
- /**
70
- * A unit vector pointing toward positive X. Same as `[1, 0]`
71
- * @category Constants
72
- */
73
- vec2.unitX = Object.freeze([1, 0]);
74
- /**
75
- * A unit vector pointing toward positive Y. Same as `[0, 1]`
76
- * @category Constants
77
- */
78
- vec2.unitY = Object.freeze([0, 1]);
79
- /**
80
- * Adds the given vectors
81
- */
82
- function add(...vs) {
83
- let x = 0, y = 0;
84
- for (const v of vs) {
85
- if (typeof v === 'number') {
86
- x += v;
87
- y += v;
88
- }
89
- else {
90
- x += v[0];
91
- y += v[1];
92
- }
93
- }
94
- return [x, y];
95
- }
96
- vec2.add = add;
97
- /**
98
- * Subtracts the given vec2's. When the argument is a single vector, it negates it. Otherwise, it subtracts from left to right.
99
- *
100
- * @shorthands
101
- * - {@link sub}
102
- */
103
- function subtract(...vs) {
104
- if (vs.length === 0) {
105
- return vec2.zero;
106
- }
107
- if (vs.length === 1) {
108
- const v = vs[0];
109
- if (typeof v === 'number')
110
- return [-v, -v];
111
- return [-v[0], -v[1]];
112
- }
113
- const [first, ...rest] = vs;
114
- let [x, y] = typeof first === 'number' ? [first, first] : [...first];
115
- for (const v of rest) {
116
- if (typeof v === 'number') {
117
- x -= v;
118
- y -= v;
119
- }
120
- else {
121
- x -= v[0];
122
- y -= v[1];
123
- }
124
- }
125
- return [x, y];
126
- }
127
- vec2.subtract = subtract;
128
- /**
129
- * Alias for {@link vec2.subtract}
130
- * @category Shorthands
131
- */
132
- vec2.sub = subtract;
133
- /**
134
- * Subtracts `a` from `b` component-wise
135
- */
136
- function delta(a, b) {
137
- const ax = typeof a === 'number' ? a : a[0];
138
- const ay = typeof a === 'number' ? a : a[1];
139
- const bx = typeof b === 'number' ? b : b[0];
140
- const by = typeof b === 'number' ? b : b[1];
141
- return [bx - ax, by - ay];
142
- }
143
- vec2.delta = delta;
144
- /**
145
- * Multiplies the given vec2's component-wise
146
- *
147
- * @shorthands
148
- * - {@link mul}
149
- */
150
- function multiply(...vs) {
151
- let x = 1, y = 1;
152
- for (const v of vs) {
153
- if (typeof v === 'number') {
154
- x *= v;
155
- y *= v;
156
- }
157
- else {
158
- x *= v[0];
159
- y *= v[1];
160
- }
161
- }
162
- return [x, y];
163
- }
164
- vec2.multiply = multiply;
165
- /**
166
- * Alias for {@link vec2.multiply}
167
- * @category Shorthands
168
- */
169
- vec2.mul = multiply;
170
- /**
171
- * Divides the given vec2's component-wise
172
- *
173
- * @shorthands
174
- * - {@link div}
175
- */
176
- function divide(...vs) {
177
- if (vs.length === 0) {
178
- return vec2.one;
179
- }
180
- if (vs.length === 1) {
181
- const v = vs[0];
182
- if (typeof v === 'number')
183
- return [1 / v, 1 / v];
184
- return [1 / v[0], 1 / v[1]];
185
- }
186
- const first = vs[0];
187
- let x = typeof first === 'number' ? first : first[0];
188
- let y = typeof first === 'number' ? first : first[1];
189
- for (let i = 1; i < vs.length; i++) {
190
- const v = vs[i];
191
- if (typeof v === 'number') {
192
- x /= v;
193
- y /= v;
194
- }
195
- else {
196
- x /= v[0];
197
- y /= v[1];
198
- }
199
- }
200
- return [x, y];
201
- }
202
- vec2.divide = divide;
203
- /**
204
- * Alias for {@link vec2.divide}
205
- * @category Shorthands
206
- */
207
- vec2.div = divide;
208
- /**
209
- * Returns the component-wise minimum of the given vec2's
210
- */
211
- function min(...vs) {
212
- if (vs.length === 0) {
213
- return [Infinity, Infinity];
214
- }
215
- else if (vs.length === 1) {
216
- const v = vs[0];
217
- return typeof v === 'number' ? [v, v] : v;
218
- }
219
- else if (vs.length > 2) {
220
- const [a, b, ...rest] = vs;
221
- return min(min(a, b), ...rest);
222
- }
223
- let [a, b] = vs;
224
- if (typeof a === 'number')
225
- a = [a, a];
226
- if (typeof b === 'number')
227
- b = [b, b];
228
- return [Math.min(a[0], b[0]), Math.min(a[1], b[1])];
229
- }
230
- vec2.min = min;
231
- /**
232
- * Returns the component-wise maximum of the given vec2's
233
- */
234
- function max(...vs) {
235
- if (vs.length === 0) {
236
- return [-Infinity, -Infinity];
237
- }
238
- else if (vs.length === 1) {
239
- const v = vs[0];
240
- return typeof v === 'number' ? [v, v] : v;
241
- }
242
- else if (vs.length > 2) {
243
- const [a, b, ...rest] = vs;
244
- return max(max(a, b), ...rest);
245
- }
246
- let [a, b] = vs;
247
- if (typeof a === 'number')
248
- a = [a, a];
249
- if (typeof b === 'number')
250
- b = [b, b];
251
- return [Math.max(a[0], b[0]), Math.max(a[1], b[1])];
252
- }
253
- vec2.max = max;
254
- /**
255
- * Constrain a value to lie between two further values
256
- * @see https://thebookofshaders.com/glossary/?search=clamp
257
- * @param v the value to constrain
258
- * @param min the lower end of the range into which to constrain `v`
259
- * @param max the upper end of the range into which to constrain `v`
260
- */
261
- function clamp(v, min, max) {
262
- if (typeof min === 'number')
263
- min = [min, min];
264
- if (typeof max === 'number')
265
- max = [max, max];
266
- return [
267
- Math.min(Math.max(v[0], min[0]), max[0]),
268
- Math.min(Math.max(v[1], min[1]), max[1]),
269
- ];
270
- }
271
- vec2.clamp = clamp;
272
- /**
273
- * Clamps each component to [0, 1]. Equivalent to {@link saturate}.
274
- */
275
- function clamp01(v) {
276
- return clamp(v, 0, 1);
277
- }
278
- vec2.clamp01 = clamp01;
279
- /**
280
- * Clamps each component to [-1, 1]
281
- */
282
- function clamp11(v) {
283
- return clamp(v, -1, 1);
284
- }
285
- vec2.clamp11 = clamp11;
286
- /**
287
- * Returns the absolute value of each component of a vec2
288
- */
289
- function abs(v) {
290
- return [Math.abs(v[0]), Math.abs(v[1])];
291
- }
292
- vec2.abs = abs;
293
- /**
294
- * Symmetric round the components of a vec2
295
- */
296
- function round(a) {
297
- return [Common.round(a[0]), Common.round(a[1])];
298
- }
299
- vec2.round = round;
300
- /**
301
- * Applies Math.ceil to each component of a vec2
302
- */
303
- function ceil(a) {
304
- return [Math.ceil(a[0]), Math.ceil(a[1])];
305
- }
306
- vec2.ceil = ceil;
307
- /**
308
- * Applies Math.floor to each component of a vec2
309
- */
310
- function floor(a) {
311
- return [Math.floor(a[0]), Math.floor(a[1])];
312
- }
313
- vec2.floor = floor;
314
- /**
315
- * Applies Math.sign to each component of a vec2
316
- */
317
- function sign(v) {
318
- return [Math.sign(v[0]), Math.sign(v[1])];
319
- }
320
- vec2.sign = sign;
321
- /**
322
- * Removes the fractional part
323
- * @see https://www.sidefx.com/docs/houdini/vex/functions/trunc.html
324
- */
325
- function trunc(v) {
326
- return [
327
- v[0] < 0 ? Math.ceil(v[0]) : Math.floor(v[0]),
328
- v[1] < 0 ? Math.ceil(v[1]) : Math.floor(v[1]),
329
- ];
330
- }
331
- vec2.trunc = trunc;
332
- /**
333
- * Computes the fractional part of the argument
334
- * @see https://registry.khronos.org/OpenGL-Refpages/gl4/html/fract.xhtml
335
- */
336
- function fract(a) {
337
- return vec2.sub(a, floor(a));
338
- }
339
- vec2.fract = fract;
340
- /**
341
- * Computes the value of one parameter modulo another. This is computed as x - y * floor(x/y). Unlike JavaScript's `%` operator, the sign of result always matches to `b`.
342
- * @see https://thebookofshaders.com/glossary/?search=mod
343
- */
344
- function mod(a, b) {
345
- if (typeof b === 'number')
346
- b = [b, b];
347
- return [
348
- a[0] - b[0] * Math.floor(a[0] / b[0]),
349
- a[1] - b[1] * Math.floor(a[1] / b[1]),
350
- ];
351
- }
352
- vec2.mod = mod;
353
- /**
354
- * Quantize a vec2 to a given step and offset. If the step is 0, the value is returned unchanged.
355
- * @param v The value to quantize
356
- * @param step The step size
357
- * @param offset The offset
358
- * @returns The quantized value
359
- */
360
- function quantize(v, step, offset = vec2.zero) {
361
- if (typeof step === 'number')
362
- step = [step, step];
363
- if (typeof offset === 'number')
364
- offset = [offset, offset];
365
- return [
366
- scalar_1.scalar.quantize(v[0], step[0], offset[0]),
367
- scalar_1.scalar.quantize(v[1], step[1], offset[1]),
368
- ];
369
- }
370
- vec2.quantize = quantize;
371
- /**
372
- * Scales a vec2 by a scalar number
373
- *
374
- * @param a the vector to scale
375
- * @param s amount to scale the vector by
376
- */
377
- function scale(a, s) {
378
- return [a[0] * s, a[1] * s];
379
- }
380
- vec2.scale = scale;
381
- /**
382
- * Returns the average value of the input(s)
383
- * @see https://www.sidefx.com/docs/houdini/vex/functions/avg.html
384
- *
385
- * @shorthands
386
- * - {@link avg}
387
- */
388
- function average(...vs) {
389
- let x = 0, y = 0;
390
- const len = vs.length || 1;
391
- for (const v of vs) {
392
- x += v[0];
393
- y += v[1];
394
- }
395
- return [x / len, y / len];
396
- }
397
- vec2.average = average;
398
- /**
399
- * Alias for {@link vec2.average}
400
- * @category Shorthands
401
- */
402
- vec2.avg = average;
403
- /**
404
- Adds given vec2's after scaling the second operand by a scalar value
405
- */
406
- function scaleAndAdd(a, b, scale) {
407
- return [a[0] + b[0] * scale, a[1] + b[1] * scale];
408
- }
409
- vec2.scaleAndAdd = scaleAndAdd;
410
- /**
411
- * Calculates the euclidian distance between two vec2's
412
- *
413
- * @shorthands
414
- * - {@link dist}
415
- */
416
- function distance(a, b) {
417
- const x = b[0] - a[0], y = b[1] - a[1];
418
- return Math.hypot(x, y);
419
- }
420
- vec2.distance = distance;
421
- /**
422
- * Alias for {@link vec2.distance}
423
- * @category Shorthands
424
- */
425
- vec2.dist = distance;
426
- /**
427
- * Calculates the squared euclidian distance between two vec2's
428
- *
429
- * @shorthands
430
- * - {@link sqrDist}
431
- */
432
- function squaredDistance(a, b) {
433
- const x = b[0] - a[0], y = b[1] - a[1];
434
- return x * x + y * y;
435
- }
436
- vec2.squaredDistance = squaredDistance;
437
- /**
438
- * Alias for {@link vec2.squaredDistance}
439
- * @category Shorthands
440
- */
441
- vec2.sqrDist = squaredDistance;
442
- /**
443
- * Returns the absolute difference between corresponding components of two vec2's
444
- *
445
- * @shorthands
446
- * - {@link diff}
447
- */
448
- function difference(a, b) {
449
- return [Math.abs(b[0] - a[0]), Math.abs(b[1] - a[1])];
450
- }
451
- vec2.difference = difference;
452
- /**
453
- * Alias for {@link vec2.difference}
454
- * @category Shorthands
455
- */
456
- vec2.diff = difference;
457
- /**
458
- * Calculates the length of a vec2
459
- *
460
- * @shorthands
461
- * - {@link len}
462
- */
463
- function length(v) {
464
- return Math.hypot(v[0], v[1]);
465
- }
466
- vec2.length = length;
467
- /**
468
- * Alias for {@link vec2.length}
469
- * @category Shorthands
470
- */
471
- vec2.len = length;
472
- /**
473
- * Calculates the squared length of a vec2
474
- *
475
- * @shorthands
476
- * - {@link sqrLen}
477
- */
478
- function squaredLength(v) {
479
- return v[0] ** 2 + v[1] ** 2;
480
- }
481
- vec2.squaredLength = squaredLength;
482
- /**
483
- * Alias for {@link vec2.squaredLength}
484
- * @category Shorthands
485
- */
486
- vec2.sqrLen = squaredLength;
487
- /**
488
- * Negates the components of a vec2
489
- *
490
- * @shorthands
491
- * - {@link neg}
492
- */
493
- function negate(v) {
494
- return [-v[0], -v[1]];
495
- }
496
- vec2.negate = negate;
497
- /**
498
- * Alias for {@link vec2.negate}
499
- * @category Shorthands
500
- */
501
- vec2.neg = negate;
502
- /**
503
- * Returns the inverse of the components of a vec2
504
- *
505
- * @shorthands
506
- * - {@link inv}
507
- */
508
- function invert(v) {
509
- return [1 / v[0], 1 / v[1]];
510
- }
511
- vec2.invert = invert;
512
- /**
513
- * Alias for {@link vec2.invert}
514
- * @category Shorthands
515
- */
516
- vec2.inv = invert;
517
- /**
518
- * Returns the result of `v` subtracted from {@link vec2.one}.
519
- */
520
- function oneMinus(v) {
521
- return subtract(vec2.one, v);
522
- }
523
- vec2.oneMinus = oneMinus;
524
- /**
525
- * Normalizes a vec2 to unit length. Returns the zero vector if the input has zero length.
526
- */
527
- function normalize(v) {
528
- const isZeroLength = v[0] === 0 && v[1] === 0;
529
- const len = isZeroLength ? 0 : 1 / Math.hypot(v[0], v[1]);
530
- return [v[0] * len, v[1] * len];
531
- }
532
- vec2.normalize = normalize;
533
- /**
534
- * Calculates the dot product of two vec2's
535
- */
536
- function dot(a, b) {
537
- return a[0] * b[0] + a[1] * b[1];
538
- }
539
- vec2.dot = dot;
540
- /**
541
- * Computes the cross product of two vec2's. Returns a vec3 with x and y components set to 0.
542
- */
543
- function cross(a, b) {
544
- const z = a[0] * b[1] - a[1] * b[0];
545
- return [0, 0, z];
546
- }
547
- vec2.cross = cross;
548
- /**
549
- * Reflects incident vector `I` about normal `N`. The normal `N` should be normalized.
550
- * @see https://registry.khronos.org/OpenGL-Refpages/gl4/html/reflect.xhtml
551
- * @param I Incident vector
552
- * @param N Normal vector (should be normalized)
553
- */
554
- function reflect(I, N) {
555
- const d = 2 * dot(N, I);
556
- return [I[0] - d * N[0], I[1] - d * N[1]];
557
- }
558
- vec2.reflect = reflect;
559
- /**
560
- * Computes the refraction vector for incident vector `I`, surface normal `N`, and ratio of indices of refraction `eta`. The normal `N` should be normalized.
561
- * @see https://registry.khronos.org/OpenGL-Refpages/gl4/html/refract.xhtml
562
- * @param I Incident vector
563
- * @param N Normal vector (should be normalized)
564
- * @param eta Ratio of indices of refraction
565
- * @returns The refraction vector, or zero vector for total internal reflection
566
- */
567
- function refract(I, N, eta) {
568
- const d = dot(N, I);
569
- const k = 1 - eta * eta * (1 - d * d);
570
- if (k < 0)
571
- return [0, 0];
572
- const s = eta * d + Math.sqrt(k);
573
- return [eta * I[0] - s * N[0], eta * I[1] - s * N[1]];
574
- }
575
- vec2.refract = refract;
576
- /**
577
- * Orients a normal to point away from a surface as defined by its incident vector. Returns `N` if `dot(Nref, I) < 0`, otherwise returns `-N`.
578
- * @see https://registry.khronos.org/OpenGL-Refpages/gl4/html/faceforward.xhtml
579
- * @param N Normal vector
580
- * @param I Incident vector
581
- * @param Nref Reference normal
582
- */
583
- function faceforward(N, I, Nref) {
584
- return dot(Nref, I) < 0 ? N : [-N[0], -N[1]];
585
- }
586
- vec2.faceforward = faceforward;
587
- /**
588
- * Projects vector `a` onto vector `b`.
589
- * @param a The vector to project
590
- * @param b The vector to project onto
591
- */
592
- function project(a, b) {
593
- const s = dot(a, b) / dot(b, b);
594
- return [b[0] * s, b[1] * s];
595
- }
596
- vec2.project = project;
597
- /**
598
- * Computes the rejection of vector `a` from vector `b` (the component of `a` perpendicular to `b`).
599
- * @param a The vector to reject
600
- * @param b The vector to reject from
601
- */
602
- function reject(a, b) {
603
- const p = project(a, b);
604
- return [a[0] - p[0], a[1] - p[1]];
605
- }
606
- vec2.reject = reject;
607
- /**
608
- * Linearly interpolates between two vec2's. Same as GLSL's built-in `mix` function.
609
- * @see https://registry.khronos.org/OpenGL-Refpages/gl4/html/mix.xhtml
610
- *
611
- * @shorthands
612
- * - {@link mix}
613
- */
614
- function lerp(a, b, t) {
615
- if (typeof t === 'number')
616
- t = [t, t];
617
- return [a[0] + t[0] * (b[0] - a[0]), a[1] + t[1] * (b[1] - a[1])];
618
- }
619
- vec2.lerp = lerp;
620
- /**
621
- * Alias for {@link vec2.lerp}
622
- * @see https://registry.khronos.org/OpenGL-Refpages/gl4/html/mix.xhtml
623
- * @category Shorthands
624
- */
625
- vec2.mix = lerp;
626
- /**
627
- * Returns the amount to mix `min` and `max` to generate the input value `t`. This is the inverse of the `lerp` function. If `min` and `max` are equal, the mixing value is `0.5`.
628
- * @see https://docs.unity3d.com/Packages/com.unity.shadergraph@6.9/manual/Inverse-Lerp-Node.html
629
- * @see https://www.sidefx.com/docs/houdini/vex/functions/invlerp.html
630
- *
631
- * @shorthands
632
- * - {@link invlerp}
633
- */
634
- function inverseLerp(a, b, t) {
635
- return [
636
- a[0] === b[0] ? 0.5 : (t[0] - a[0]) / (b[0] - a[0]),
637
- a[1] === b[1] ? 0.5 : (t[1] - a[1]) / (b[1] - a[1]),
638
- ];
639
- }
640
- vec2.inverseLerp = inverseLerp;
641
- /**
642
- * Alias for {@link vec2.inverseLerp}
643
- * @category Shorthands
644
- */
645
- vec2.invlerp = inverseLerp;
646
- /**
647
- * Performs a spherical linear interpolation between two vec2's
648
- */
649
- function slerp(a, b, t) {
650
- const angle = Math.acos(Math.min(Math.max(dot(a, b), -1), 1));
651
- const sinTotal = Math.sin(angle);
652
- if (sinTotal === 0) {
653
- return lerp(a, b, t);
654
- }
655
- const ratioA = Math.sin((1 - t) * angle) / sinTotal;
656
- const ratioB = Math.sin(t * angle) / sinTotal;
657
- return [ratioA * a[0] + ratioB * b[0], ratioA * a[1] + ratioB * b[1]];
658
- }
659
- vec2.slerp = slerp;
660
- /**
661
- * Performs a hermite interpolation with two control points
662
- *
663
- * @param a the first operand
664
- * @param b the second operand
665
- * @param c the third operand
666
- * @param d the fourth operand
667
- * @param t interpolation amount, in the range [0-1], between the two inputs
668
- */
669
- function hermite(a, b, c, d, t) {
670
- const factorTimes2 = t * t;
671
- const factor1 = factorTimes2 * (2 * t - 3) + 1;
672
- const factor2 = factorTimes2 * (t - 2) + t;
673
- const factor3 = factorTimes2 * (t - 1);
674
- const factor4 = factorTimes2 * (3 - 2 * t);
675
- return [
676
- a[0] * factor1 + b[0] * factor2 + c[0] * factor3 + d[0] * factor4,
677
- a[1] * factor1 + b[1] * factor2 + c[1] * factor3 + d[1] * factor4,
678
- ];
679
- }
680
- vec2.hermite = hermite;
681
- /**
682
- * Performs a bezier interpolation with two control points
683
- */
684
- function bezier(a, b, c, d, t) {
685
- const inverseFactor = 1 - t;
686
- const inverseFactorTimesTwo = inverseFactor * inverseFactor;
687
- const factorTimes2 = t * t;
688
- const factor1 = inverseFactorTimesTwo * inverseFactor;
689
- const factor2 = 3 * t * inverseFactorTimesTwo;
690
- const factor3 = 3 * factorTimes2 * inverseFactor;
691
- const factor4 = factorTimes2 * t;
692
- return [
693
- a[0] * factor1 + b[0] * factor2 + c[0] * factor3 + d[0] * factor4,
694
- a[1] * factor1 + b[1] * factor2 + c[1] * factor3 + d[1] * factor4,
695
- ];
696
- }
697
- vec2.bezier = bezier;
698
- /**
699
- * Takes the value in the range `(omin, omax)` and shifts it to the corresponding value in the new range `(nmin, nmax)`. The function clamps the given value the range `(omin, omax)` before fitting, so the resulting value will be guaranteed to be in the range `(nmin, nmax)`. To avoid clamping use efit instead.
700
- * @see https://www.sidefx.com/docs/houdini/vex/functions/fit.html
701
- * @param value
702
- * @param omin
703
- * @param omax
704
- * @param nmin
705
- * @param nmax
706
- * @returns
707
- */
708
- function fit(value, omin, omax, nmin, nmax) {
709
- return [
710
- scalar_1.scalar.fit(value[0], omin[0], omax[0], nmin[0], nmax[0]),
711
- scalar_1.scalar.fit(value[1], omin[1], omax[1], nmin[1], nmax[1]),
712
- ];
713
- }
714
- vec2.fit = fit;
715
- /**
716
- * Takes the value in the range `(omin, omax)` and shifts it to the corresponding value in the new range `(nmin, nmax)`. Unlike `fit`, this function does not clamp values to the given range. If `omin` and `omax` are the same, the function returns the average of `nmin` and `nmax`.
717
- * @see https://www.sidefx.com/docs/houdini/vex/functions/fit.html
718
- * @param value
719
- * @param omin
720
- * @param omax
721
- * @param nmin
722
- * @param nmax
723
- * @returns
724
- */
725
- function efit(value, omin, omax, nmin, nmax) {
726
- return [
727
- scalar_1.scalar.efit(value[0], omin[0], omax[0], nmin[0], nmax[0]),
728
- scalar_1.scalar.efit(value[1], omin[1], omax[1], nmin[1], nmax[1]),
729
- ];
730
- }
731
- vec2.efit = efit;
732
- /**
733
- * Takes the value in the range `(0, 1)` and shifts it to the corresponding value in the new range `(nmin, nmax)`.
734
- * @see https://www.sidefx.com/docs/houdini/vex/functions/fit01.html
735
- */
736
- function fit01(value, nmin, nmax) {
737
- return [
738
- scalar_1.scalar.fit01(value[0], nmin[0], nmax[0]),
739
- scalar_1.scalar.fit01(value[1], nmin[1], nmax[1]),
740
- ];
741
- }
742
- vec2.fit01 = fit01;
743
- /**
744
- * Takes the value in the range `(-1, 1)` and shifts it to the corresponding value in the new range `(nmin, nmax)`.
745
- * @see https://www.sidefx.com/docs/houdini/vex/functions/fit11.html
746
- */
747
- function fit11(value, nmin, nmax) {
748
- return [
749
- scalar_1.scalar.fit11(value[0], nmin[0], nmax[0]),
750
- scalar_1.scalar.fit11(value[1], nmin[1], nmax[1]),
751
- ];
752
- }
753
- vec2.fit11 = fit11;
754
- /**
755
- * Transforms the vec2 with a mat2
756
- */
757
- function transformMat2(a, m) {
758
- const [x, y] = a;
759
- return [
760
- m[0] * x + m[2] * y, //
761
- m[1] * x + m[3] * y,
762
- ];
763
- }
764
- vec2.transformMat2 = transformMat2;
765
- /**
766
- * Transforms the vec2 with a mat2d
767
- * 3rd vector component is implicitly '1'
768
- */
769
- function transformMat2d(a, m) {
770
- const [x, y] = a;
771
- return [
772
- m[0] * x + m[2] * y + m[4], //
773
- m[1] * x + m[3] * y + m[5],
774
- ];
775
- }
776
- vec2.transformMat2d = transformMat2d;
777
- /**
778
- * Transforms the vec2 with a mat3
779
- * 3rd vector component is implicitly '1'
780
- */
781
- function transformMat3(a, m) {
782
- const [x, y] = a;
783
- return [
784
- m[0] * x + m[3] * y + m[6], //
785
- m[1] * x + m[4] * y + m[7],
786
- ];
787
- }
788
- vec2.transformMat3 = transformMat3;
789
- /**
790
- * Transforms a vec2 with a matrix, automatically choosing the appropriate transformation function based on matrix size
791
- * @param p The vector to transform
792
- * @param m The transformation matrix (mat2, mat2d, or mat3)
793
- * @returns The transformed vector
794
- *
795
- * @shorthands
796
- * - {@link xform}
797
- */
798
- function transform(p, m) {
799
- const matrixArray = m;
800
- switch (matrixArray.length) {
801
- case 4: // mat2
802
- return transformMat2(p, m);
803
- case 6: // mat2d
804
- return transformMat2d(p, m);
805
- case 9: // mat3
806
- return transformMat3(p, m);
807
- default:
808
- throw new Error(`Unsupported matrix size: ${matrixArray.length}`);
809
- }
810
- }
811
- vec2.transform = transform;
812
- /**
813
- * Alias for {@link vec2.transform}
814
- * @category Shorthands
815
- */
816
- vec2.xform = transform;
817
- /**
818
- * Rotate a 2D vector
819
- */
820
- function rotate(a, deg, origin = vec2.zero) {
821
- // Translate point to the origin
822
- const p0 = a[0] - origin[0];
823
- const p1 = a[1] - origin[1];
824
- const s = Math.sin(deg * Common.DEG2RAD);
825
- const c = Math.cos(deg * Common.DEG2RAD);
826
- // Perform rotation and translate to correct position
827
- return [
828
- p0 * c - p1 * s + origin[0], //
829
- p0 * s + p1 * c + origin[1], //
830
- ];
831
- }
832
- vec2.rotate = rotate;
833
- /**
834
- * Rotates a vector by 90 degrees
835
- * @param a the vector to rotate
836
- * @param sweep If true, the rotation is in positive direction. For example, it means clockwise rotation in a Y-down coordinate system.
837
- * @param origin The origin of the rotation
838
- * @returns The rotated vector
839
-
840
- */
841
- function rotate90(a, sweep = true, origin) {
842
- if (!origin) {
843
- return sweep ? [-a[1], a[0]] : [a[1], -a[0]];
844
- }
845
- else {
846
- const [x, y] = subtract(a, origin);
847
- return sweep ? add(origin, [-y, x]) : add(origin, [y, -x]);
848
- }
849
- }
850
- vec2.rotate90 = rotate90;
851
- /**
852
- * Get the angle between two 2D vectors. If the second argument is omitted, it returns a signed angle relative to x axis.
853
- * @param a The first vector
854
- * @param b The second vector
855
- * @returns The angle in degrees. If the angle from a to b is clockwise, the return value is positive. Otherwise, it is negative. The range is (-180, 180].
856
- */
857
- function angle(a, b) {
858
- if (!b)
859
- return Math.atan2(a[1], a[0]) * Common.RAD2DEG;
860
- if (vec2.eq(a, b)) {
861
- // Exactly the same vectors
862
- return 0;
863
- }
864
- const [x1, y1] = a;
865
- const [x2, y2] = b;
866
- // mag is the product of the magnitudes of a and b
867
- const mag = Math.hypot(x1, y1) * Math.hypot(x2, y2);
868
- if (mag === 0) {
869
- // One of the vectors is zero
870
- return 0;
871
- }
872
- const sign = x1 * y2 - y1 * x2 >= 0 ? 1 : -1;
873
- const acos = Math.acos(scalar_1.scalar.clamp(dot(a, b) / mag, -1, 1));
874
- const angle = sign * acos * Common.RAD2DEG;
875
- return angle <= -180 ? angle + 360 : angle;
876
- }
877
- vec2.angle = angle;
878
- /**
879
- * Creates a vector by given direction, length, and origin
880
- * @param deg The direction in degrees
881
- * @param length The length of the vector to create. Default is 1
882
- * @param origin The origin of the vector. Default is [0, 0]
883
- *
884
- * @shorthands
885
- * - {@link dir}
886
- */
887
- function direction(deg, length = 1, origin = vec2.zero) {
888
- return [
889
- Math.cos(deg * Common.DEG2RAD) * length + origin[0],
890
- Math.sin(deg * Common.DEG2RAD) * length + origin[1],
891
- ];
892
- }
893
- vec2.direction = direction;
894
- /**
895
- * Alias for {@link vec2.direction}
896
- * @category Shorthands
897
- */
898
- vec2.dir = direction;
899
- /**
900
- * Apply a step function by comparing two values
901
- * @see https://registry.khronos.org/OpenGL-Refpages/gl4/html/step.xhtml
902
- * @param edge The location of the edge of the step function.
903
- * @param v The value to be used to generate the step function.
904
- * @returns
905
- */
906
- function step(edge, v) {
907
- if (typeof edge === 'number')
908
- edge = [edge, edge];
909
- if (typeof v === 'number')
910
- v = [v, v];
911
- return [v[0] < edge[0] ? 0 : 1, v[1] < edge[1] ? 0 : 1];
912
- }
913
- vec2.step = step;
914
- /**
915
- * Perform Hermite interpolation between two values.
916
- * @see https://registry.khronos.org/OpenGL-Refpages/gl4/html/smoothstep.xhtml
917
- * @param edge0 Lower edge of the Hermite function.
918
- * @param edge1 Upper edge of the Hermite function.
919
- * @param x Source value for interpolation.
920
- * @returns
921
- */
922
- function smoothstep(edge0, edge1, x) {
923
- if (typeof edge0 === 'number')
924
- edge0 = [edge0, edge0];
925
- if (typeof edge1 === 'number')
926
- edge1 = [edge1, edge1];
927
- const t0 = scalar_1.scalar.clamp((x[0] - edge0[0]) / (edge1[0] - edge0[0]), 0, 1);
928
- const t1 = scalar_1.scalar.clamp((x[1] - edge0[1]) / (edge1[1] - edge0[1]), 0, 1);
929
- return [
930
- t0 * t0 * (3 - 2 * t0), //
931
- t1 * t1 * (3 - 2 * t1),
932
- ];
933
- }
934
- vec2.smoothstep = smoothstep;
935
- /**
936
- * Converts the components of a vec2 from radians to degrees
937
- * @param rad The input vec2 in radians
938
- * @returns The degrees equivalent of the input
939
- *
940
- * @shorthands
941
- * - {@link deg}
942
- */
943
- function degrees(rad) {
944
- return [
945
- rad[0] * Common.RAD2DEG, //
946
- rad[1] * Common.RAD2DEG,
947
- ];
948
- }
949
- vec2.degrees = degrees;
950
- /**
951
- * Alias for {@link vec2.degrees}
952
- * @category Shorthands
953
- */
954
- vec2.deg = degrees;
955
- /**
956
- * Converts the components of a vec2 from degrees to radians
957
- * @param deg The input vec2 in degrees
958
- * @returns The radians equivalent of the input
959
- *
960
- * @shorthands
961
- * - {@link rad}
962
- */
963
- function radians(deg) {
964
- return [
965
- deg[0] * Common.DEG2RAD, //
966
- deg[1] * Common.DEG2RAD,
967
- ];
968
- }
969
- vec2.radians = radians;
970
- /**
971
- * Alias for {@link vec2.radians}
972
- * @category Shorthands
973
- */
974
- vec2.rad = radians;
975
- /**
976
- * Returns the sine of a number.
977
- * @param deg An angle in degrees
978
- */
979
- function sin(deg) {
980
- return [
981
- Math.sin(deg[0] * Common.DEG2RAD), //
982
- Math.sin(deg[1] * Common.DEG2RAD),
983
- ];
984
- }
985
- vec2.sin = sin;
986
- /**
987
- * Returns the cosine of a number.
988
- * @param deg An angle in degrees
989
- */
990
- function cos(deg) {
991
- return [
992
- Math.cos(deg[0] * Common.DEG2RAD), //
993
- Math.cos(deg[1] * Common.DEG2RAD),
994
- ];
995
- }
996
- vec2.cos = cos;
997
- /**
998
- * Returns the tangent of a number.
999
- * @param deg An angle in degrees
1000
- */
1001
- function tan(deg) {
1002
- return [
1003
- Math.tan(deg[0] * Common.DEG2RAD), //
1004
- Math.tan(deg[1] * Common.DEG2RAD),
1005
- ];
1006
- }
1007
- vec2.tan = tan;
1008
- /**
1009
- * Returns the arcsine of a number.
1010
- * @param v A numeric expression.
1011
- * @returns The arcsine in degrees
1012
- * */
1013
- function asin(v) {
1014
- return [
1015
- Math.asin(v[0]) * Common.RAD2DEG, //
1016
- Math.asin(v[1]) * Common.RAD2DEG,
1017
- ];
1018
- }
1019
- vec2.asin = asin;
1020
- /**
1021
- * Returns the arc cosine (or inverse cosine) of a number.
1022
- * @param v A numeric expression.
1023
- * @returns The arc cosine in degrees
1024
- * */
1025
- function acos(v) {
1026
- return [
1027
- Math.acos(v[0]) * Common.RAD2DEG, //
1028
- Math.acos(v[1]) * Common.RAD2DEG,
1029
- ];
1030
- }
1031
- vec2.acos = acos;
1032
- /**
1033
- * Returns the arc-tangent of the parameters. If `x` is not provided, `y` is regarded as a value of `y/x`.
1034
- * @param y the values of the y-coordinate
1035
- * @param x the values of the x-coordinate
1036
- * @returns the angle in degrees
1037
- * @see https://thebookofshaders.com/glossary/?search=atan
1038
- * */
1039
- function atan(y, x) {
1040
- if (x === undefined) {
1041
- return [
1042
- Math.atan(y[0]) * Common.RAD2DEG, //
1043
- Math.atan(y[1]) * Common.RAD2DEG,
1044
- ];
1045
- }
1046
- else {
1047
- return [
1048
- Math.atan2(y[0], x[0]) * Common.RAD2DEG, //
1049
- Math.atan2(y[1], x[1]) * Common.RAD2DEG,
1050
- ];
1051
- }
1052
- }
1053
- vec2.atan = atan;
1054
- /**
1055
- * Returns the arc-tangent of the parameters.
1056
- * @param y the values of the y-coordinate
1057
- * @param x the values of the x-coordinate
1058
- * @returns the angle in degrees
1059
- * @see https://thebookofshaders.com/glossary/?search=atan
1060
- * */
1061
- function atan2(y, x) {
1062
- return [
1063
- Math.atan2(y[0], x[0]) * Common.RAD2DEG, //
1064
- Math.atan2(y[1], x[1]) * Common.RAD2DEG,
1065
- ];
1066
- }
1067
- vec2.atan2 = atan2;
1068
- /**
1069
- * Returns the base to the exponent power, component-wise
1070
- */
1071
- function pow(a, b) {
1072
- if (typeof b === 'number')
1073
- b = [b, b];
1074
- return [Math.pow(a[0], b[0]), Math.pow(a[1], b[1])];
1075
- }
1076
- vec2.pow = pow;
1077
- /**
1078
- * Returns e raised to the power of each component
1079
- */
1080
- function exp(v) {
1081
- return [Math.exp(v[0]), Math.exp(v[1])];
1082
- }
1083
- vec2.exp = exp;
1084
- /**
1085
- * Returns the natural logarithm of each component
1086
- */
1087
- function log(v) {
1088
- return [Math.log(v[0]), Math.log(v[1])];
1089
- }
1090
- vec2.log = log;
1091
- /**
1092
- * Returns 2 raised to the power of the parameter
1093
- * @param v the value of the power to which 2 will be raised
1094
- */
1095
- function exp2(v) {
1096
- return [2 ** v[0], 2 ** v[1]];
1097
- }
1098
- vec2.exp2 = exp2;
1099
- /**
1100
- * Returns the base-2 logarithm of each component
1101
- */
1102
- function log2(v) {
1103
- return [Math.log2(v[0]), Math.log2(v[1])];
1104
- }
1105
- vec2.log2 = log2;
1106
- /**
1107
- * Returns the square root of each component
1108
- */
1109
- function sqrt(v) {
1110
- return [Math.sqrt(v[0]), Math.sqrt(v[1])];
1111
- }
1112
- vec2.sqrt = sqrt;
1113
- /**
1114
- * Returns the inverse of the square root of the parameter
1115
- * @param v the value of which to take the inverse of the square root
1116
- * @see https://thebookofshaders.com/glossary/?search=inversesqrt
1117
- *
1118
- * @shorthands
1119
- * - {@link invsqrt}
1120
- */
1121
- function inverseSqrt(v) {
1122
- return [1 / Math.sqrt(v[0]), 1 / Math.sqrt(v[1])];
1123
- }
1124
- vec2.inverseSqrt = inverseSqrt;
1125
- /**
1126
- * Alias for {@link vec2.inverseSqrt}
1127
- * @category Shorthands
1128
- */
1129
- vec2.invsqrt = inverseSqrt;
1130
- /**
1131
- * Returns the hyperbolic sine of each component
1132
- */
1133
- function sinh(v) {
1134
- return [Math.sinh(v[0]), Math.sinh(v[1])];
1135
- }
1136
- vec2.sinh = sinh;
1137
- /**
1138
- * Returns the hyperbolic cosine of each component
1139
- */
1140
- function cosh(v) {
1141
- return [Math.cosh(v[0]), Math.cosh(v[1])];
1142
- }
1143
- vec2.cosh = cosh;
1144
- /**
1145
- * Returns the hyperbolic tangent of each component
1146
- */
1147
- function tanh(v) {
1148
- return [Math.tanh(v[0]), Math.tanh(v[1])];
1149
- }
1150
- vec2.tanh = tanh;
1151
- /**
1152
- * Returns the inverse hyperbolic sine of each component
1153
- */
1154
- function asinh(v) {
1155
- return [Math.asinh(v[0]), Math.asinh(v[1])];
1156
- }
1157
- vec2.asinh = asinh;
1158
- /**
1159
- * Returns the inverse hyperbolic cosine of each component
1160
- */
1161
- function acosh(v) {
1162
- return [Math.acosh(v[0]), Math.acosh(v[1])];
1163
- }
1164
- vec2.acosh = acosh;
1165
- /**
1166
- * Returns the inverse hyperbolic tangent of each component
1167
- */
1168
- function atanh(v) {
1169
- return [Math.atanh(v[0]), Math.atanh(v[1])];
1170
- }
1171
- vec2.atanh = atanh;
1172
- /**
1173
- * Clamps each component to [0, 1]. Equivalent to HLSL's `saturate`.
1174
- */
1175
- function saturate(v) {
1176
- return [
1177
- Math.max(0, Math.min(1, v[0])),
1178
- Math.max(0, Math.min(1, v[1])),
1179
- ];
1180
- }
1181
- vec2.saturate = saturate;
1182
- /**
1183
- * Returns the sum of all components of a vector.
1184
- * Equivalent to GLM's `glm::compAdd`.
1185
- */
1186
- function compAdd(v) {
1187
- return v[0] + v[1];
1188
- }
1189
- vec2.compAdd = compAdd;
1190
- /**
1191
- * Returns the product of all components of a vector.
1192
- * Equivalent to GLM's `glm::compMul`.
1193
- */
1194
- function compMul(v) {
1195
- return v[0] * v[1];
1196
- }
1197
- vec2.compMul = compMul;
1198
- /**
1199
- * Returns whether or not the vectors exactly have the same elements in the same position (when compared with `===`)
1200
- *
1201
- * @shorthands
1202
- * - {@link eq}
1203
- */
1204
- function exactEquals(a, b) {
1205
- return a[0] === b[0] && a[1] === b[1];
1206
- }
1207
- vec2.exactEquals = exactEquals;
1208
- /**
1209
- * Alias for {@link exactEquals}
1210
- * @category Shorthands
1211
- */
1212
- vec2.eq = exactEquals;
1213
- /**
1214
- * Returns whether or not the vectors have approximately the same elements in the same position.
1215
- *
1216
- * @shorthands
1217
- * - {@link approx}
1218
- * - {@link equals}
1219
- */
1220
- function approxEquals(a, b) {
1221
- const [a0, a1] = a;
1222
- const [b0, b1] = b;
1223
- return (Math.abs(a0 - b0) <=
1224
- Common.EPSILON * Math.max(1, Math.abs(a0), Math.abs(b0)) &&
1225
- Math.abs(a1 - b1) <=
1226
- Common.EPSILON * Math.max(1, Math.abs(a1), Math.abs(b1)));
1227
- }
1228
- vec2.approxEquals = approxEquals;
1229
- /**
1230
- * Alias for {@link approxEquals}
1231
- * @category Shorthands
1232
- */
1233
- vec2.approx = approxEquals;
1234
- /**
1235
- * Alias for {@link approxEquals}. This is provided for compatibility with gl-matrix.
1236
- * @category Shorthands
1237
- * @deprecated Use {@link approxEquals} instead
1238
- */
1239
- vec2.equals = approxEquals;
1240
- /**
1241
- * Returns the string representation of a vec2
1242
- * @param v vector to represent as a string
1243
- * @param fractionDigits number of digits to appear after the decimal point
1244
- */
1245
- vec2.toString = Common.vecToString;
1246
- })(vec2 || (exports.vec2 = vec2 = {}));
1247
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVjMi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy92ZWMyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLGlEQUFrQztBQUlsQyxxQ0FBK0I7QUFTL0I7OztHQUdHO0FBQ0gsSUFBaUIsSUFBSSxDQXV2Q3BCO0FBdnZDRCxXQUFpQixJQUFJO0lBT3BCOzs7T0FHRztJQUNILFNBQWdCLEVBQUUsQ0FBQyxDQUFTLEVBQUUsSUFBWSxDQUFDO1FBQzFDLE9BQU8sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUE7SUFDZCxDQUFDO0lBRmUsT0FBRSxLQUVqQixDQUFBO0lBRUQ7OztPQUdHO0lBQ0gsU0FBZ0IsS0FBSyxDQUFDLENBQU87UUFDNUIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUE7SUFDZCxDQUFDO0lBRmUsVUFBSyxRQUVwQixDQUFBO0lBRUQ7O09BRUc7SUFDVSxTQUFJLEdBQVMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFBO0lBRS9DOztPQUVHO0lBQ1UsUUFBRyxHQUFTLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQTtJQUU5Qzs7O09BR0c7SUFDVSxVQUFLLEdBQVMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFBO0lBRWhEOzs7T0FHRztJQUNVLFVBQUssR0FBUyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUE7SUFFaEQ7O09BRUc7SUFDSCxTQUFnQixHQUFHLENBQUMsR0FBRyxFQUFxQjtRQUMzQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQ1IsQ0FBQyxHQUFHLENBQUMsQ0FBQTtRQUVOLEtBQUssTUFBTSxDQUFDLElBQUksRUFB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