velocious 1.0.643 → 1.0.644

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 (48) hide show
  1. package/README.md +10 -1
  2. package/build/src/sync/assets/cache.d.ts +288 -0
  3. package/build/src/sync/assets/cache.d.ts.map +1 -0
  4. package/build/src/sync/assets/cache.js +883 -0
  5. package/build/src/sync/assets/types.d.ts +199 -0
  6. package/build/src/sync/assets/types.d.ts.map +1 -0
  7. package/build/src/sync/assets/types.js +56 -0
  8. package/build/src/testing/test-runner.d.ts +8 -0
  9. package/build/src/testing/test-runner.d.ts.map +1 -1
  10. package/build/src/testing/test-runner.js +49 -548
  11. package/build/src/testing/velocious-attempt-executor.d.ts +69 -0
  12. package/build/src/testing/velocious-attempt-executor.d.ts.map +1 -0
  13. package/build/src/testing/velocious-attempt-executor.js +402 -0
  14. package/build/src/testing/velocious-runner-reporter.d.ts +72 -0
  15. package/build/src/testing/velocious-runner-reporter.d.ts.map +1 -0
  16. package/build/src/testing/velocious-runner-reporter.js +152 -0
  17. package/build/src/testing/velocious-suite-hook-executor.d.ts +37 -0
  18. package/build/src/testing/velocious-suite-hook-executor.d.ts.map +1 -0
  19. package/build/src/testing/velocious-suite-hook-executor.js +66 -0
  20. package/build/src/testing/velocious-test-arguments.d.ts +34 -0
  21. package/build/src/testing/velocious-test-arguments.d.ts.map +1 -0
  22. package/build/src/testing/velocious-test-arguments.js +47 -0
  23. package/build/src/utils/sha256-bytes-hex.d.ts +7 -0
  24. package/build/src/utils/sha256-bytes-hex.d.ts.map +1 -0
  25. package/build/src/utils/sha256-bytes-hex.js +117 -0
  26. package/build/src/utils/sha256-hex.d.ts +2 -4
  27. package/build/src/utils/sha256-hex.d.ts.map +1 -1
  28. package/build/src/utils/sha256-hex.js +6 -120
  29. package/build/sync/assets/cache.js +998 -0
  30. package/build/sync/assets/types.js +62 -0
  31. package/build/testing/test-runner.js +46 -584
  32. package/build/testing/velocious-attempt-executor.js +431 -0
  33. package/build/testing/velocious-runner-reporter.js +166 -0
  34. package/build/testing/velocious-suite-hook-executor.js +71 -0
  35. package/build/testing/velocious-test-arguments.js +55 -0
  36. package/build/tsconfig.tsbuildinfo +1 -1
  37. package/build/utils/sha256-bytes-hex.js +132 -0
  38. package/build/utils/sha256-hex.js +7 -135
  39. package/package.json +1 -1
  40. package/src/sync/assets/cache.js +998 -0
  41. package/src/sync/assets/types.js +62 -0
  42. package/src/testing/test-runner.js +46 -584
  43. package/src/testing/velocious-attempt-executor.js +431 -0
  44. package/src/testing/velocious-runner-reporter.js +166 -0
  45. package/src/testing/velocious-suite-hook-executor.js +71 -0
  46. package/src/testing/velocious-test-arguments.js +55 -0
  47. package/src/utils/sha256-bytes-hex.js +132 -0
  48. package/src/utils/sha256-hex.js +7 -135
@@ -1,126 +1,12 @@
1
+ // @ts-check
2
+ import sha256BytesHex from "./sha256-bytes-hex.js";
1
3
  /**
2
4
  * Computes SHA-256 without importing Node-only crypto modules, keeping this
3
- * module safe for Expo/browser bundles. Implementation is a straightforward
4
- * pure-JavaScript SHA-256 derived from FIPS 180-4, using only 32-bit unsigned
5
- * integer arithmetic.
5
+ * module safe for Expo/browser bundles.
6
6
  * @param {string} message - UTF-8 message.
7
- * @returns {string} - Hex digest.
7
+ * @returns {string} Hex digest.
8
8
  */
9
9
  export default function sha256Hex(message) {
10
- const bytes = utf8Bytes(message);
11
- const padded = [...bytes];
12
- const bitLength = bytes.length * 8;
13
- const hash = [...SHA256_INITIAL_HASH];
14
- /** @type {number[]} */
15
- const words = new Array(64);
16
- padded.push(0x80);
17
- while (padded.length % 64 !== 56)
18
- padded.push(0);
19
- const highLength = Math.floor(bitLength / 0x100000000);
20
- const lowLength = bitLength >>> 0;
21
- for (const value of [highLength, lowLength]) {
22
- padded.push((value >>> 24) & 0xff, (value >>> 16) & 0xff, (value >>> 8) & 0xff, value & 0xff);
23
- }
24
- for (let offset = 0; offset < padded.length; offset += 64) {
25
- for (let i = 0; i < 16; i++) {
26
- const index = offset + (i * 4);
27
- words[i] = (((padded[index] || 0) << 24) | ((padded[index + 1] || 0) << 16) | ((padded[index + 2] || 0) << 8) | (padded[index + 3] || 0)) >>> 0;
28
- }
29
- for (let i = 16; i < 64; i++) {
30
- const s0 = rotateRight(words[i - 15], 7) ^ rotateRight(words[i - 15], 18) ^ (words[i - 15] >>> 3);
31
- const s1 = rotateRight(words[i - 2], 17) ^ rotateRight(words[i - 2], 19) ^ (words[i - 2] >>> 10);
32
- words[i] = add32(words[i - 16], s0, words[i - 7], s1);
33
- }
34
- let [a, b, c, d, e, f, g, h] = hash;
35
- for (let i = 0; i < 64; i++) {
36
- const s1 = rotateRight(e, 6) ^ rotateRight(e, 11) ^ rotateRight(e, 25);
37
- const ch = (e & f) ^ ((~e) & g);
38
- const temp1 = add32(h, s1, ch, SHA256_K[i], words[i]);
39
- const s0 = rotateRight(a, 2) ^ rotateRight(a, 13) ^ rotateRight(a, 22);
40
- const maj = (a & b) ^ (a & c) ^ (b & c);
41
- const temp2 = add32(s0, maj);
42
- h = g;
43
- g = f;
44
- f = e;
45
- e = add32(d, temp1);
46
- d = c;
47
- c = b;
48
- b = a;
49
- a = add32(temp1, temp2);
50
- }
51
- hash[0] = add32(hash[0], a);
52
- hash[1] = add32(hash[1], b);
53
- hash[2] = add32(hash[2], c);
54
- hash[3] = add32(hash[3], d);
55
- hash[4] = add32(hash[4], e);
56
- hash[5] = add32(hash[5], f);
57
- hash[6] = add32(hash[6], g);
58
- hash[7] = add32(hash[7], h);
59
- }
60
- return hash.map((value) => value.toString(16).padStart(8, "0")).join("");
10
+ return sha256BytesHex(new TextEncoder().encode(message));
61
11
  }
62
- const SHA256_INITIAL_HASH = [
63
- 0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a,
64
- 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19
65
- ];
66
- const SHA256_K = [
67
- 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5,
68
- 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,
69
- 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3,
70
- 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,
71
- 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc,
72
- 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,
73
- 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7,
74
- 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,
75
- 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13,
76
- 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,
77
- 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3,
78
- 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,
79
- 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5,
80
- 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,
81
- 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208,
82
- 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2
83
- ];
84
- /**
85
- * Converts a string to UTF-8 bytes.
86
- * @param {string} value - String value.
87
- * @returns {number[]} - UTF-8 bytes.
88
- */
89
- function utf8Bytes(value) {
90
- /** @type {number[]} */
91
- const bytes = [];
92
- for (const character of value) {
93
- const codePoint = /** @type {number} */ (character.codePointAt(0));
94
- if (codePoint <= 0x7f) {
95
- bytes.push(codePoint);
96
- }
97
- else if (codePoint <= 0x7ff) {
98
- bytes.push(0xc0 | (codePoint >>> 6), 0x80 | (codePoint & 0x3f));
99
- }
100
- else if (codePoint <= 0xffff) {
101
- bytes.push(0xe0 | (codePoint >>> 12), 0x80 | ((codePoint >>> 6) & 0x3f), 0x80 | (codePoint & 0x3f));
102
- }
103
- else {
104
- bytes.push(0xf0 | (codePoint >>> 18), 0x80 | ((codePoint >>> 12) & 0x3f), 0x80 | ((codePoint >>> 6) & 0x3f), 0x80 | (codePoint & 0x3f));
105
- }
106
- }
107
- return bytes;
108
- }
109
- /**
110
- * Adds unsigned 32-bit integers.
111
- * @param {...number} values - Values to add.
112
- * @returns {number} - Unsigned 32-bit result.
113
- */
114
- function add32(...values) {
115
- return values.reduce((sum, value) => (sum + value) >>> 0, 0);
116
- }
117
- /**
118
- * Rotates a 32-bit integer right.
119
- * @param {number} value - Value to rotate.
120
- * @param {number} bits - Bit count.
121
- * @returns {number} - Rotated value.
122
- */
123
- function rotateRight(value, bits) {
124
- return (value >>> bits) | (value << (32 - bits));
125
- }
126
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2hhMjU2LWhleC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy91dGlscy9zaGEyNTYtaGV4LmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7O0dBT0c7QUFDSCxNQUFNLENBQUMsT0FBTyxVQUFVLFNBQVMsQ0FBQyxPQUFPO0lBQ3ZDLE1BQU0sS0FBSyxHQUFHLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQTtJQUNoQyxNQUFNLE1BQU0sR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUE7SUFDekIsTUFBTSxTQUFTLEdBQUcsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUE7SUFDbEMsTUFBTSxJQUFJLEdBQUcsQ0FBQyxHQUFHLG1CQUFtQixDQUFDLENBQUE7SUFDckMsdUJBQXVCO0lBQ3ZCLE1BQU0sS0FBSyxHQUFHLElBQUksS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFBO0lBRTNCLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUE7SUFDakIsT0FBTyxNQUFNLENBQUMsTUFBTSxHQUFHLEVBQUUsS0FBSyxFQUFFO1FBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQTtJQUVoRCxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsR0FBRyxXQUFXLENBQUMsQ0FBQTtJQUN0RCxNQUFNLFNBQVMsR0FBRyxTQUFTLEtBQUssQ0FBQyxDQUFBO0lBRWpDLEtBQUssTUFBTSxLQUFLLElBQUksQ0FBQyxVQUFVLEVBQUUsU0FBUyxDQUFDLEVBQUUsQ0FBQztRQUM1QyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxLQUFLLEVBQUUsQ0FBQyxHQUFHLElBQUksRUFBRSxDQUFDLEtBQUssS0FBSyxFQUFFLENBQUMsR0FBRyxJQUFJLEVBQUUsQ0FBQyxLQUFLLEtBQUssQ0FBQyxDQUFDLEdBQUcsSUFBSSxFQUFFLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQTtJQUMvRixDQUFDO0lBRUQsS0FBSyxJQUFJLE1BQU0sR0FBRyxDQUFDLEVBQUUsTUFBTSxHQUFHLE1BQU0sQ0FBQyxNQUFNLEVBQUUsTUFBTSxJQUFJLEVBQUUsRUFBRSxDQUFDO1FBQzFELEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztZQUM1QixNQUFNLEtBQUssR0FBRyxNQUFNLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUE7WUFFOUIsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUE7UUFDakosQ0FBQztRQUVELEtBQUssSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztZQUM3QixNQUFNLEVBQUUsR0FBRyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUE7WUFDakcsTUFBTSxFQUFFLEdBQUcsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEdBQUcsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFBO1lBRWhHLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQTtRQUN2RCxDQUFDO1FBRUQsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUE7UUFFbkMsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQzVCLE1BQU0sRUFBRSxHQUFHLFdBQVcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsV0FBVyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsR0FBRyxXQUFXLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFBO1lBQ3RFLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFBO1lBQy9CLE1BQU0sS0FBSyxHQUFHLEtBQUssQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUE7WUFDckQsTUFBTSxFQUFFLEdBQUcsV0FBVyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxXQUFXLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxHQUFHLFdBQVcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUE7WUFDdEUsTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUE7WUFDdkMsTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQTtZQUU1QixDQUFDLEdBQUcsQ0FBQyxDQUFBO1lBQ0wsQ0FBQyxHQUFHLENBQUMsQ0FBQTtZQUNMLENBQUMsR0FBRyxDQUFDLENBQUE7WUFDTCxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQTtZQUNuQixDQUFDLEdBQUcsQ0FBQyxDQUFBO1lBQ0wsQ0FBQyxHQUFHLENBQUMsQ0FBQTtZQUNMLENBQUMsR0FBRyxDQUFDLENBQUE7WUFDTCxDQUFDLEdBQUcsS0FBSyxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQTtRQUN6QixDQUFDO1FBRUQsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUE7UUFDM0IsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUE7UUFDM0IsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUE7UUFDM0IsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUE7UUFDM0IsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUE7UUFDM0IsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUE7UUFDM0IsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUE7UUFDM0IsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUE7SUFDN0IsQ0FBQztJQUVELE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFBO0FBQzFFLENBQUM7QUFFRCxNQUFNLG1CQUFtQixHQUFHO0lBQzFCLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVU7SUFDOUMsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVTtDQUMvQyxDQUFBO0FBRUQsTUFBTSxRQUFRLEdBQUc7SUFDZixVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVO0lBQzlDLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVU7SUFDOUMsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVTtJQUM5QyxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVO0lBQzlDLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVU7SUFDOUMsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVTtJQUM5QyxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVO0lBQzlDLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVU7SUFDOUMsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVTtJQUM5QyxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVO0lBQzlDLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVU7SUFDOUMsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVTtJQUM5QyxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVO0lBQzlDLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVU7SUFDOUMsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVTtJQUM5QyxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVO0NBQy9DLENBQUE7QUFFRDs7OztHQUlHO0FBQ0gsU0FBUyxTQUFTLENBQUMsS0FBSztJQUN0Qix1QkFBdUI7SUFDdkIsTUFBTSxLQUFLLEdBQUcsRUFBRSxDQUFBO0lBRWhCLEtBQUssTUFBTSxTQUFTLElBQUksS0FBSyxFQUFFLENBQUM7UUFDOUIsTUFBTSxTQUFTLEdBQUcscUJBQXFCLENBQUMsQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUE7UUFFbEUsSUFBSSxTQUFTLElBQUksSUFBSSxFQUFFLENBQUM7WUFDdEIsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQTtRQUN2QixDQUFDO2FBQU0sSUFBSSxTQUFTLElBQUksS0FBSyxFQUFFLENBQUM7WUFDOUIsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxTQUFTLEtBQUssQ0FBQyxDQUFDLEVBQUUsSUFBSSxHQUFHLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUE7UUFDakUsQ0FBQzthQUFNLElBQUksU0FBUyxJQUFJLE1BQU0sRUFBRSxDQUFDO1lBQy9CLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsU0FBUyxLQUFLLEVBQUUsQ0FBQyxFQUFFLElBQUksR0FBRyxDQUFDLENBQUMsU0FBUyxLQUFLLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLElBQUksR0FBRyxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFBO1FBQ3JHLENBQUM7YUFBTSxDQUFDO1lBQ04sS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxTQUFTLEtBQUssRUFBRSxDQUFDLEVBQUUsSUFBSSxHQUFHLENBQUMsQ0FBQyxTQUFTLEtBQUssRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsSUFBSSxHQUFHLENBQUMsQ0FBQyxTQUFTLEtBQUssQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsSUFBSSxHQUFHLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUE7UUFDekksQ0FBQztJQUNILENBQUM7SUFFRCxPQUFPLEtBQUssQ0FBQTtBQUNkLENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsU0FBUyxLQUFLLENBQUMsR0FBRyxNQUFNO0lBQ3RCLE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsR0FBRyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQTtBQUM5RCxDQUFDO0FBRUQ7Ozs7O0dBS0c7QUFDSCxTQUFTLFdBQVcsQ0FBQyxLQUFLLEVBQUUsSUFBSTtJQUM5QixPQUFPLENBQUMsS0FBSyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUE7QUFDbEQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ29tcHV0ZXMgU0hBLTI1NiB3aXRob3V0IGltcG9ydGluZyBOb2RlLW9ubHkgY3J5cHRvIG1vZHVsZXMsIGtlZXBpbmcgdGhpc1xuICogbW9kdWxlIHNhZmUgZm9yIEV4cG8vYnJvd3NlciBidW5kbGVzLiBJbXBsZW1lbnRhdGlvbiBpcyBhIHN0cmFpZ2h0Zm9yd2FyZFxuICogcHVyZS1KYXZhU2NyaXB0IFNIQS0yNTYgZGVyaXZlZCBmcm9tIEZJUFMgMTgwLTQsIHVzaW5nIG9ubHkgMzItYml0IHVuc2lnbmVkXG4gKiBpbnRlZ2VyIGFyaXRobWV0aWMuXG4gKiBAcGFyYW0ge3N0cmluZ30gbWVzc2FnZSAtIFVURi04IG1lc3NhZ2UuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSAtIEhleCBkaWdlc3QuXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHNoYTI1NkhleChtZXNzYWdlKSB7XG4gIGNvbnN0IGJ5dGVzID0gdXRmOEJ5dGVzKG1lc3NhZ2UpXG4gIGNvbnN0IHBhZGRlZCA9IFsuLi5ieXRlc11cbiAgY29uc3QgYml0TGVuZ3RoID0gYnl0ZXMubGVuZ3RoICogOFxuICBjb25zdCBoYXNoID0gWy4uLlNIQTI1Nl9JTklUSUFMX0hBU0hdXG4gIC8qKiBAdHlwZSB7bnVtYmVyW119ICovXG4gIGNvbnN0IHdvcmRzID0gbmV3IEFycmF5KDY0KVxuXG4gIHBhZGRlZC5wdXNoKDB4ODApXG4gIHdoaWxlIChwYWRkZWQubGVuZ3RoICUgNjQgIT09IDU2KSBwYWRkZWQucHVzaCgwKVxuXG4gIGNvbnN0IGhpZ2hMZW5ndGggPSBNYXRoLmZsb29yKGJpdExlbmd0aCAvIDB4MTAwMDAwMDAwKVxuICBjb25zdCBsb3dMZW5ndGggPSBiaXRMZW5ndGggPj4+IDBcblxuICBmb3IgKGNvbnN0IHZhbHVlIG9mIFtoaWdoTGVuZ3RoLCBsb3dMZW5ndGhdKSB7XG4gICAgcGFkZGVkLnB1c2goKHZhbHVlID4+PiAyNCkgJiAweGZmLCAodmFsdWUgPj4+IDE2KSAmIDB4ZmYsICh2YWx1ZSA+Pj4gOCkgJiAweGZmLCB2YWx1ZSAmIDB4ZmYpXG4gIH1cblxuICBmb3IgKGxldCBvZmZzZXQgPSAwOyBvZmZzZXQgPCBwYWRkZWQubGVuZ3RoOyBvZmZzZXQgKz0gNjQpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IDE2OyBpKyspIHtcbiAgICAgIGNvbnN0IGluZGV4ID0gb2Zmc2V0ICsgKGkgKiA0KVxuXG4gICAgICB3b3Jkc1tpXSA9ICgoKHBhZGRlZFtpbmRleF0gfHwgMCkgPDwgMjQpIHwgKChwYWRkZWRbaW5kZXggKyAxXSB8fCAwKSA8PCAxNikgfCAoKHBhZGRlZFtpbmRleCArIDJdIHx8IDApIDw8IDgpIHwgKHBhZGRlZFtpbmRleCArIDNdIHx8IDApKSA+Pj4gMFxuICAgIH1cblxuICAgIGZvciAobGV0IGkgPSAxNjsgaSA8IDY0OyBpKyspIHtcbiAgICAgIGNvbnN0IHMwID0gcm90YXRlUmlnaHQod29yZHNbaSAtIDE1XSwgNykgXiByb3RhdGVSaWdodCh3b3Jkc1tpIC0gMTVdLCAxOCkgXiAod29yZHNbaSAtIDE1XSA+Pj4gMylcbiAgICAgIGNvbnN0IHMxID0gcm90YXRlUmlnaHQod29yZHNbaSAtIDJdLCAxNykgXiByb3RhdGVSaWdodCh3b3Jkc1tpIC0gMl0sIDE5KSBeICh3b3Jkc1tpIC0gMl0gPj4+IDEwKVxuXG4gICAgICB3b3Jkc1tpXSA9IGFkZDMyKHdvcmRzW2kgLSAxNl0sIHMwLCB3b3Jkc1tpIC0gN10sIHMxKVxuICAgIH1cblxuICAgIGxldCBbYSwgYiwgYywgZCwgZSwgZiwgZywgaF0gPSBoYXNoXG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IDY0OyBpKyspIHtcbiAgICAgIGNvbnN0IHMxID0gcm90YXRlUmlnaHQoZSwgNikgXiByb3RhdGVSaWdodChlLCAxMSkgXiByb3RhdGVSaWdodChlLCAyNSlcbiAgICAgIGNvbnN0IGNoID0gKGUgJiBmKSBeICgofmUpICYgZylcbiAgICAgIGNvbnN0IHRlbXAxID0gYWRkMzIoaCwgczEsIGNoLCBTSEEyNTZfS1tpXSwgd29yZHNbaV0pXG4gICAgICBjb25zdCBzMCA9IHJvdGF0ZVJpZ2h0KGEsIDIpIF4gcm90YXRlUmlnaHQoYSwgMTMpIF4gcm90YXRlUmlnaHQoYSwgMjIpXG4gICAgICBjb25zdCBtYWogPSAoYSAmIGIpIF4gKGEgJiBjKSBeIChiICYgYylcbiAgICAgIGNvbnN0IHRlbXAyID0gYWRkMzIoczAsIG1hailcblxuICAgICAgaCA9IGdcbiAgICAgIGcgPSBmXG4gICAgICBmID0gZVxuICAgICAgZSA9IGFkZDMyKGQsIHRlbXAxKVxuICAgICAgZCA9IGNcbiAgICAgIGMgPSBiXG4gICAgICBiID0gYVxuICAgICAgYSA9IGFkZDMyKHRlbXAxLCB0ZW1wMilcbiAgICB9XG5cbiAgICBoYXNoWzBdID0gYWRkMzIoaGFzaFswXSwgYSlcbiAgICBoYXNoWzFdID0gYWRkMzIoaGFzaFsxXSwgYilcbiAgICBoYXNoWzJdID0gYWRkMzIoaGFzaFsyXSwgYylcbiAgICBoYXNoWzNdID0gYWRkMzIoaGFzaFszXSwgZClcbiAgICBoYXNoWzRdID0gYWRkMzIoaGFzaFs0XSwgZSlcbiAgICBoYXNoWzVdID0gYWRkMzIoaGFzaFs1XSwgZilcbiAgICBoYXNoWzZdID0gYWRkMzIoaGFzaFs2XSwgZylcbiAgICBoYXNoWzddID0gYWRkMzIoaGFzaFs3XSwgaClcbiAgfVxuXG4gIHJldHVybiBoYXNoLm1hcCgodmFsdWUpID0+IHZhbHVlLnRvU3RyaW5nKDE2KS5wYWRTdGFydCg4LCBcIjBcIikpLmpvaW4oXCJcIilcbn1cblxuY29uc3QgU0hBMjU2X0lOSVRJQUxfSEFTSCA9IFtcbiAgMHg2YTA5ZTY2NywgMHhiYjY3YWU4NSwgMHgzYzZlZjM3MiwgMHhhNTRmZjUzYSxcbiAgMHg1MTBlNTI3ZiwgMHg5YjA1Njg4YywgMHgxZjgzZDlhYiwgMHg1YmUwY2QxOVxuXVxuXG5jb25zdCBTSEEyNTZfSyA9IFtcbiAgMHg0MjhhMmY5OCwgMHg3MTM3NDQ5MSwgMHhiNWMwZmJjZiwgMHhlOWI1ZGJhNSxcbiAgMHgzOTU2YzI1YiwgMHg1OWYxMTFmMSwgMHg5MjNmODJhNCwgMHhhYjFjNWVkNSxcbiAgMHhkODA3YWE5OCwgMHgxMjgzNWIwMSwgMHgyNDMxODViZSwgMHg1NTBjN2RjMyxcbiAgMHg3MmJlNWQ3NCwgMHg4MGRlYjFmZSwgMHg5YmRjMDZhNywgMHhjMTliZjE3NCxcbiAgMHhlNDliNjljMSwgMHhlZmJlNDc4NiwgMHgwZmMxOWRjNiwgMHgyNDBjYTFjYyxcbiAgMHgyZGU5MmM2ZiwgMHg0YTc0ODRhYSwgMHg1Y2IwYTlkYywgMHg3NmY5ODhkYSxcbiAgMHg5ODNlNTE1MiwgMHhhODMxYzY2ZCwgMHhiMDAzMjdjOCwgMHhiZjU5N2ZjNyxcbiAgMHhjNmUwMGJmMywgMHhkNWE3OTE0NywgMHgwNmNhNjM1MSwgMHgxNDI5Mjk2NyxcbiAgMHgyN2I3MGE4NSwgMHgyZTFiMjEzOCwgMHg0ZDJjNmRmYywgMHg1MzM4MGQxMyxcbiAgMHg2NTBhNzM1NCwgMHg3NjZhMGFiYiwgMHg4MWMyYzkyZSwgMHg5MjcyMmM4NSxcbiAgMHhhMmJmZThhMSwgMHhhODFhNjY0YiwgMHhjMjRiOGI3MCwgMHhjNzZjNTFhMyxcbiAgMHhkMTkyZTgxOSwgMHhkNjk5MDYyNCwgMHhmNDBlMzU4NSwgMHgxMDZhYTA3MCxcbiAgMHgxOWE0YzExNiwgMHgxZTM3NmMwOCwgMHgyNzQ4Nzc0YywgMHgzNGIwYmNiNSxcbiAgMHgzOTFjMGNiMywgMHg0ZWQ4YWE0YSwgMHg1YjljY2E0ZiwgMHg2ODJlNmZmMyxcbiAgMHg3NDhmODJlZSwgMHg3OGE1NjM2ZiwgMHg4NGM4NzgxNCwgMHg4Y2M3MDIwOCxcbiAgMHg5MGJlZmZmYSwgMHhhNDUwNmNlYiwgMHhiZWY5YTNmNywgMHhjNjcxNzhmMlxuXVxuXG4vKipcbiAqIENvbnZlcnRzIGEgc3RyaW5nIHRvIFVURi04IGJ5dGVzLlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlIC0gU3RyaW5nIHZhbHVlLlxuICogQHJldHVybnMge251bWJlcltdfSAtIFVURi04IGJ5dGVzLlxuICovXG5mdW5jdGlvbiB1dGY4Qnl0ZXModmFsdWUpIHtcbiAgLyoqIEB0eXBlIHtudW1iZXJbXX0gKi9cbiAgY29uc3QgYnl0ZXMgPSBbXVxuXG4gIGZvciAoY29uc3QgY2hhcmFjdGVyIG9mIHZhbHVlKSB7XG4gICAgY29uc3QgY29kZVBvaW50ID0gLyoqIEB0eXBlIHtudW1iZXJ9ICovIChjaGFyYWN0ZXIuY29kZVBvaW50QXQoMCkpXG5cbiAgICBpZiAoY29kZVBvaW50IDw9IDB4N2YpIHtcbiAgICAgIGJ5dGVzLnB1c2goY29kZVBvaW50KVxuICAgIH0gZWxzZSBpZiAoY29kZVBvaW50IDw9IDB4N2ZmKSB7XG4gICAgICBieXRlcy5wdXNoKDB4YzAgfCAoY29kZVBvaW50ID4+PiA2KSwgMHg4MCB8IChjb2RlUG9pbnQgJiAweDNmKSlcbiAgICB9IGVsc2UgaWYgKGNvZGVQb2ludCA8PSAweGZmZmYpIHtcbiAgICAgIGJ5dGVzLnB1c2goMHhlMCB8IChjb2RlUG9pbnQgPj4+IDEyKSwgMHg4MCB8ICgoY29kZVBvaW50ID4+PiA2KSAmIDB4M2YpLCAweDgwIHwgKGNvZGVQb2ludCAmIDB4M2YpKVxuICAgIH0gZWxzZSB7XG4gICAgICBieXRlcy5wdXNoKDB4ZjAgfCAoY29kZVBvaW50ID4+PiAxOCksIDB4ODAgfCAoKGNvZGVQb2ludCA+Pj4gMTIpICYgMHgzZiksIDB4ODAgfCAoKGNvZGVQb2ludCA+Pj4gNikgJiAweDNmKSwgMHg4MCB8IChjb2RlUG9pbnQgJiAweDNmKSlcbiAgICB9XG4gIH1cblxuICByZXR1cm4gYnl0ZXNcbn1cblxuLyoqXG4gKiBBZGRzIHVuc2lnbmVkIDMyLWJpdCBpbnRlZ2Vycy5cbiAqIEBwYXJhbSB7Li4ubnVtYmVyfSB2YWx1ZXMgLSBWYWx1ZXMgdG8gYWRkLlxuICogQHJldHVybnMge251bWJlcn0gLSBVbnNpZ25lZCAzMi1iaXQgcmVzdWx0LlxuICovXG5mdW5jdGlvbiBhZGQzMiguLi52YWx1ZXMpIHtcbiAgcmV0dXJuIHZhbHVlcy5yZWR1Y2UoKHN1bSwgdmFsdWUpID0+IChzdW0gKyB2YWx1ZSkgPj4+IDAsIDApXG59XG5cbi8qKlxuICogUm90YXRlcyBhIDMyLWJpdCBpbnRlZ2VyIHJpZ2h0LlxuICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlIC0gVmFsdWUgdG8gcm90YXRlLlxuICogQHBhcmFtIHtudW1iZXJ9IGJpdHMgLSBCaXQgY291bnQuXG4gKiBAcmV0dXJucyB7bnVtYmVyfSAtIFJvdGF0ZWQgdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIHJvdGF0ZVJpZ2h0KHZhbHVlLCBiaXRzKSB7XG4gIHJldHVybiAodmFsdWUgPj4+IGJpdHMpIHwgKHZhbHVlIDw8ICgzMiAtIGJpdHMpKVxufVxuIl19
12
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2hhMjU2LWhleC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy91dGlscy9zaGEyNTYtaGV4LmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVk7QUFFWixPQUFPLGNBQWMsTUFBTSx1QkFBdUIsQ0FBQTtBQUVsRDs7Ozs7R0FLRztBQUNILE1BQU0sQ0FBQyxPQUFPLFVBQVUsU0FBUyxDQUFDLE9BQU87SUFDdkMsT0FBTyxjQUFjLENBQUMsSUFBSSxXQUFXLEVBQUUsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQTtBQUMxRCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQHRzLWNoZWNrXG5cbmltcG9ydCBzaGEyNTZCeXRlc0hleCBmcm9tIFwiLi9zaGEyNTYtYnl0ZXMtaGV4LmpzXCJcblxuLyoqXG4gKiBDb21wdXRlcyBTSEEtMjU2IHdpdGhvdXQgaW1wb3J0aW5nIE5vZGUtb25seSBjcnlwdG8gbW9kdWxlcywga2VlcGluZyB0aGlzXG4gKiBtb2R1bGUgc2FmZSBmb3IgRXhwby9icm93c2VyIGJ1bmRsZXMuXG4gKiBAcGFyYW0ge3N0cmluZ30gbWVzc2FnZSAtIFVURi04IG1lc3NhZ2UuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBIZXggZGlnZXN0LlxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBzaGEyNTZIZXgobWVzc2FnZSkge1xuICByZXR1cm4gc2hhMjU2Qnl0ZXNIZXgobmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKG1lc3NhZ2UpKVxufVxuIl19