detox 20.0.10-prerelease.0 → 20.0.12-prerelease.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (81) hide show
  1. package/Detox-android/com/wix/detox/{20.0.10-prerelease.0/detox-20.0.10-prerelease.0-javadoc.jar → 20.0.12-prerelease.0/detox-20.0.12-prerelease.0-javadoc.jar} +0 -0
  2. package/Detox-android/com/wix/detox/20.0.12-prerelease.0/detox-20.0.12-prerelease.0-javadoc.jar.md5 +1 -0
  3. package/Detox-android/com/wix/detox/20.0.12-prerelease.0/detox-20.0.12-prerelease.0-javadoc.jar.sha1 +1 -0
  4. package/Detox-android/com/wix/detox/20.0.12-prerelease.0/detox-20.0.12-prerelease.0-javadoc.jar.sha256 +1 -0
  5. package/Detox-android/com/wix/detox/20.0.12-prerelease.0/detox-20.0.12-prerelease.0-javadoc.jar.sha512 +1 -0
  6. package/Detox-android/com/wix/detox/{20.0.10-prerelease.0/detox-20.0.10-prerelease.0-sources.jar → 20.0.12-prerelease.0/detox-20.0.12-prerelease.0-sources.jar} +0 -0
  7. package/Detox-android/com/wix/detox/20.0.12-prerelease.0/detox-20.0.12-prerelease.0-sources.jar.md5 +1 -0
  8. package/Detox-android/com/wix/detox/20.0.12-prerelease.0/detox-20.0.12-prerelease.0-sources.jar.sha1 +1 -0
  9. package/Detox-android/com/wix/detox/20.0.12-prerelease.0/detox-20.0.12-prerelease.0-sources.jar.sha256 +1 -0
  10. package/Detox-android/com/wix/detox/20.0.12-prerelease.0/detox-20.0.12-prerelease.0-sources.jar.sha512 +1 -0
  11. package/Detox-android/com/wix/detox/{20.0.10-prerelease.0/detox-20.0.10-prerelease.0.aar → 20.0.12-prerelease.0/detox-20.0.12-prerelease.0.aar} +0 -0
  12. package/Detox-android/com/wix/detox/20.0.12-prerelease.0/detox-20.0.12-prerelease.0.aar.md5 +1 -0
  13. package/Detox-android/com/wix/detox/20.0.12-prerelease.0/detox-20.0.12-prerelease.0.aar.sha1 +1 -0
  14. package/Detox-android/com/wix/detox/20.0.12-prerelease.0/detox-20.0.12-prerelease.0.aar.sha256 +1 -0
  15. package/Detox-android/com/wix/detox/20.0.12-prerelease.0/detox-20.0.12-prerelease.0.aar.sha512 +1 -0
  16. package/Detox-android/com/wix/detox/{20.0.10-prerelease.0/detox-20.0.10-prerelease.0.pom → 20.0.12-prerelease.0/detox-20.0.12-prerelease.0.pom} +1 -1
  17. package/Detox-android/com/wix/detox/20.0.12-prerelease.0/detox-20.0.12-prerelease.0.pom.md5 +1 -0
  18. package/Detox-android/com/wix/detox/20.0.12-prerelease.0/detox-20.0.12-prerelease.0.pom.sha1 +1 -0
  19. package/Detox-android/com/wix/detox/20.0.12-prerelease.0/detox-20.0.12-prerelease.0.pom.sha256 +1 -0
  20. package/Detox-android/com/wix/detox/20.0.12-prerelease.0/detox-20.0.12-prerelease.0.pom.sha512 +1 -0
  21. package/Detox-android/com/wix/detox/maven-metadata.xml +4 -4
  22. package/Detox-android/com/wix/detox/maven-metadata.xml.md5 +1 -1
  23. package/Detox-android/com/wix/detox/maven-metadata.xml.sha1 +1 -1
  24. package/Detox-android/com/wix/detox/maven-metadata.xml.sha256 +1 -1
  25. package/Detox-android/com/wix/detox/maven-metadata.xml.sha512 +1 -1
  26. package/Detox-ios-src.tbz +0 -0
  27. package/Detox-ios.tbz +0 -0
  28. package/README.md +1 -1
  29. package/android/detox/proguard-rules.pro +3 -0
  30. package/android/detox/src/full/java/com/wix/detox/reactnative/idlingresources/IdlingResourceDescription.kt +19 -13
  31. package/android/detox/src/full/java/com/wix/detox/reactnative/idlingresources/NetworkIdlingResource.java +33 -30
  32. package/android/detox/src/testFull/java/com/wix/detox/reactnative/idlingresources/NetworkIdlingResourcesTest.kt +61 -0
  33. package/index.d.ts +25 -2
  34. package/internals.d.ts +36 -14
  35. package/local-cli/cli.js +7 -5
  36. package/local-cli/init.js +2 -1
  37. package/local-cli/reset-lock-file.js +16 -0
  38. package/local-cli/templates/jest.js +3 -1
  39. package/local-cli/test.test.js +58 -14
  40. package/local-cli/testCommand/TestRunnerCommand.js +10 -3
  41. package/package.json +2 -2
  42. package/runners/deprecation.js +2 -2
  43. package/runners/jest/reporters/DetoxReporter.js +22 -2
  44. package/runners/jest/testEnvironment/index.js +83 -82
  45. package/runners/jest/testEnvironment/listeners/DetoxCoreListener.js +9 -24
  46. package/runners/jest/testEnvironment/listeners/DetoxPlatformFilterListener.js +1 -1
  47. package/src/client/actions/formatters/sync-resources/NetworkFormatter.js +1 -1
  48. package/src/configuration/composeAppsConfig.js +4 -0
  49. package/src/configuration/composeRunnerConfig.js +4 -2
  50. package/src/devices/allocation/drivers/android/emulator/AVDValidator.js +4 -4
  51. package/src/devices/allocation/drivers/android/emulator/EmulatorAllocDriver.js +1 -1
  52. package/src/devices/common/drivers/ios/tools/AppleSimUtils.js +25 -1
  53. package/src/devices/lifecycle/GenyGlobalLifecycleHandler.js +2 -2
  54. package/src/devices/runtime/RuntimeDevice.js +10 -0
  55. package/src/errors/DetoxConfigErrorComposer.js +8 -0
  56. package/src/ipc/IPCClient.js +9 -5
  57. package/src/ipc/IPCServer.js +17 -13
  58. package/src/ipc/SessionState.js +2 -4
  59. package/src/realms/DetoxContext.js +2 -2
  60. package/src/realms/DetoxInternalsFacade.js +1 -1
  61. package/src/realms/DetoxPrimaryContext.js +6 -8
  62. package/src/realms/DetoxSecondaryContext.js +2 -2
  63. package/src/symbols.js +2 -2
  64. package/src/utils/Timer.js +55 -38
  65. package/src/utils/errorUtils.js +20 -0
  66. package/Detox-android/com/wix/detox/20.0.10-prerelease.0/detox-20.0.10-prerelease.0-javadoc.jar.md5 +0 -1
  67. package/Detox-android/com/wix/detox/20.0.10-prerelease.0/detox-20.0.10-prerelease.0-javadoc.jar.sha1 +0 -1
  68. package/Detox-android/com/wix/detox/20.0.10-prerelease.0/detox-20.0.10-prerelease.0-javadoc.jar.sha256 +0 -1
  69. package/Detox-android/com/wix/detox/20.0.10-prerelease.0/detox-20.0.10-prerelease.0-javadoc.jar.sha512 +0 -1
  70. package/Detox-android/com/wix/detox/20.0.10-prerelease.0/detox-20.0.10-prerelease.0-sources.jar.md5 +0 -1
  71. package/Detox-android/com/wix/detox/20.0.10-prerelease.0/detox-20.0.10-prerelease.0-sources.jar.sha1 +0 -1
  72. package/Detox-android/com/wix/detox/20.0.10-prerelease.0/detox-20.0.10-prerelease.0-sources.jar.sha256 +0 -1
  73. package/Detox-android/com/wix/detox/20.0.10-prerelease.0/detox-20.0.10-prerelease.0-sources.jar.sha512 +0 -1
  74. package/Detox-android/com/wix/detox/20.0.10-prerelease.0/detox-20.0.10-prerelease.0.aar.md5 +0 -1
  75. package/Detox-android/com/wix/detox/20.0.10-prerelease.0/detox-20.0.10-prerelease.0.aar.sha1 +0 -1
  76. package/Detox-android/com/wix/detox/20.0.10-prerelease.0/detox-20.0.10-prerelease.0.aar.sha256 +0 -1
  77. package/Detox-android/com/wix/detox/20.0.10-prerelease.0/detox-20.0.10-prerelease.0.aar.sha512 +0 -1
  78. package/Detox-android/com/wix/detox/20.0.10-prerelease.0/detox-20.0.10-prerelease.0.pom.md5 +0 -1
  79. package/Detox-android/com/wix/detox/20.0.10-prerelease.0/detox-20.0.10-prerelease.0.pom.sha1 +0 -1
  80. package/Detox-android/com/wix/detox/20.0.10-prerelease.0/detox-20.0.10-prerelease.0.pom.sha256 +0 -1
  81. package/Detox-android/com/wix/detox/20.0.10-prerelease.0/detox-20.0.10-prerelease.0.pom.sha512 +0 -1
@@ -1,6 +1,7 @@
1
1
  const { IPC } = require('node-ipc');
2
2
 
3
3
  const { DetoxInternalError } = require('../errors');
4
+ const { serializeObjectWithError } = require('../utils/errorUtils');
4
5
 
5
6
  class IPCClient {
6
7
  constructor({ id, logger, state }) {
@@ -47,15 +48,18 @@ class IPCClient {
47
48
  }
48
49
 
49
50
  async registerWorker(workerId) {
50
- await this._emit('registerWorker', { workerId });
51
+ const sessionState = await this._emit('registerWorker', { workerId });
52
+ this._state.patch(sessionState);
51
53
  }
52
54
 
53
55
  /**
54
- * @param {string[]} testFilePaths
55
- * @param {Boolean} permanent
56
+ * @param {DetoxInternals.DetoxTestFileReport[]} testResults
56
57
  */
57
- async reportFailedTests(testFilePaths, permanent) {
58
- await this._emit('failedTests', { testFilePaths, permanent });
58
+ async reportTestResults(testResults) {
59
+ const sessionState = await this._emit('reportTestResults', {
60
+ testResults: testResults.map(r => serializeObjectWithError(r, 'testExecError')),
61
+ });
62
+ this._state.patch(sessionState);
59
63
  }
60
64
 
61
65
  async _connectToServer() {
@@ -1,5 +1,8 @@
1
+ const { uniqBy } = require('lodash');
1
2
  const { IPC } = require('node-ipc');
2
3
 
4
+ const { serializeObjectWithError } = require('../utils/errorUtils');
5
+
3
6
  class IPCServer {
4
7
  /**
5
8
  * @param {object} options
@@ -27,12 +30,12 @@ class IPCServer {
27
30
  this._ipc.config.appspace = 'detox.';
28
31
  this._ipc.config.logger = (msg) => this._logger.trace(msg);
29
32
 
30
- await new Promise((resolve) => {
33
+ await new Promise((resolve) => {
31
34
  // TODO: handle reject
32
35
  this._ipc.serve(() => resolve());
33
36
  this._ipc.server.on('registerContext', this.onRegisterContext.bind(this));
34
37
  this._ipc.server.on('registerWorker', this.onRegisterWorker.bind(this));
35
- this._ipc.server.on('failedTests', this.onFailedTests.bind(this));
38
+ this._ipc.server.on('reportTestResults', this.onReportTestResults.bind(this));
36
39
  this._ipc.server.start();
37
40
  });
38
41
  }
@@ -53,8 +56,7 @@ class IPCServer {
53
56
  this._sessionState.contexts.push(id);
54
57
 
55
58
  this._ipc.server.emit(socket, 'registerContextDone', {
56
- failedTestFiles: this._sessionState.failedTestFiles,
57
- testFilesToRetry: this._sessionState.testFilesToRetry,
59
+ testResults: this._sessionState.testResults,
58
60
  testSessionIndex: this._sessionState.testSessionIndex,
59
61
  });
60
62
  }
@@ -73,20 +75,22 @@ class IPCServer {
73
75
  }
74
76
  }
75
77
 
76
- onFailedTests({ testFilePaths, permanent }, socket = null) {
77
- if (permanent) {
78
- this._sessionState.failedTestFiles.push(...testFilePaths);
79
- } else {
80
- this._sessionState.testFilesToRetry.push(...testFilePaths);
81
- }
78
+ onReportTestResults({ testResults }, socket = null) {
79
+ const merged = uniqBy([
80
+ ...testResults.map(r => serializeObjectWithError(r, 'testExecError')),
81
+ ...this._sessionState.testResults
82
+ ], 'testFilePath');
83
+
84
+ this._sessionState.testResults.splice(0, Infinity, ...merged);
82
85
 
83
86
  if (socket) {
84
- this._ipc.server.emit(socket, 'failedTestsDone', {});
87
+ this._ipc.server.emit(socket, 'reportTestResultsDone', {
88
+ testResults: this._sessionState.testResults,
89
+ });
85
90
  }
86
91
 
87
92
  this._ipc.server.broadcast('sessionStateUpdate', {
88
- failedTestFiles: this._sessionState.failedTestFiles,
89
- testFilesToRetry: this._sessionState.testFilesToRetry,
93
+ testResults: this._sessionState.testResults,
90
94
  });
91
95
  }
92
96
  }
@@ -9,8 +9,7 @@ class SessionState {
9
9
  detoxConfigSnapshotPath = '',
10
10
  detoxConfig = null,
11
11
  detoxIPCServer = '',
12
- failedTestFiles = [],
13
- testFilesToRetry = [],
12
+ testResults = [],
14
13
  testSessionIndex = 0,
15
14
  workersCount = 0
16
15
  }) {
@@ -19,8 +18,7 @@ class SessionState {
19
18
  this.detoxConfigSnapshotPath = detoxConfigSnapshotPath;
20
19
  this.detoxConfig = detoxConfig;
21
20
  this.detoxIPCServer = detoxIPCServer;
22
- this.failedTestFiles = failedTestFiles;
23
- this.testFilesToRetry = testFilesToRetry;
21
+ this.testResults = testResults;
24
22
  this.testSessionIndex = testSessionIndex;
25
23
  this.workersCount = workersCount;
26
24
  }
@@ -36,7 +36,7 @@ class DetoxContext {
36
36
  };
37
37
 
38
38
  this[symbols.getStatus] = this[symbols.getStatus].bind(this);
39
- this[symbols.reportFailedTests] = this[symbols.reportFailedTests].bind(this);
39
+ this[symbols.reportTestResults] = this[symbols.reportTestResults].bind(this);
40
40
  this[symbols.resolveConfig] = this[symbols.resolveConfig].bind(this);
41
41
  this[symbols.installWorker] = this[symbols.installWorker].bind(this);
42
42
  this[symbols.uninstallWorker] = this[symbols.uninstallWorker].bind(this);
@@ -103,7 +103,7 @@ class DetoxContext {
103
103
  },
104
104
  });
105
105
  /** @abstract */
106
- [symbols.reportFailedTests](_testFilePaths, _permanent) {}
106
+ [symbols.reportTestResults](_testResults) {}
107
107
  /**
108
108
  * @abstract
109
109
  * @param {Partial<DetoxInternals.DetoxInitOptions>} _opts
@@ -26,7 +26,7 @@ class DetoxInternalsFacade {
26
26
  this.onTestFnStart = context[symbols.onTestFnStart];
27
27
  this.onTestFnSuccess = context[symbols.onTestFnSuccess];
28
28
  this.onTestStart = context[symbols.onTestStart];
29
- this.reportFailedTests = context[symbols.reportFailedTests];
29
+ this.reportTestResults = context[symbols.reportTestResults];
30
30
  this.resolveConfig = context[symbols.resolveConfig];
31
31
  this.session = context[symbols.session];
32
32
  this.tracing = context[symbols.tracing];
@@ -46,9 +46,9 @@ class DetoxPrimaryContext extends DetoxContext {
46
46
  }
47
47
 
48
48
  //#region Internal members
49
- async [symbols.reportFailedTests](testFilePaths, permanent = false) {
49
+ async [symbols.reportTestResults](testResults) {
50
50
  if (this[_ipcServer]) {
51
- this[_ipcServer].onFailedTests({ testFilePaths, permanent });
51
+ this[_ipcServer].onReportTestResults({ testResults });
52
52
  }
53
53
  }
54
54
 
@@ -236,15 +236,14 @@ class DetoxPrimaryContext extends DetoxContext {
236
236
  const { rootDir } = this[symbols.config].artifacts;
237
237
 
238
238
  await fs.mkdirp(rootDir);
239
- const [out1Stream, out2Stream, out3Stream] = ['detox.log.jsonl', 'detox.log', 'detox.trace.json']
239
+ const [out1Stream, out2Stream] = ['detox.log', 'detox.trace.json']
240
240
  .map((filename) => fs.createWriteStream(path.join(rootDir, filename)));
241
241
 
242
242
  const mergedStream = streamUtils.uniteSessionLogs(sessionId);
243
243
 
244
244
  await Promise.all([
245
- pipe(mergedStream, streamUtils.writeJSONL(), out1Stream),
246
- pipe(mergedStream, streamUtils.debugStream(this[symbols.logger].config.options), out2Stream),
247
- pipe(mergedStream, streamUtils.chromeTraceStream(), streamUtils.writeJSON(), out3Stream),
245
+ pipe(mergedStream, streamUtils.debugStream(this[symbols.logger].config.options), out1Stream),
246
+ pipe(mergedStream, streamUtils.chromeTraceStream(), streamUtils.writeJSON(), out2Stream),
248
247
  ]);
249
248
  }
250
249
 
@@ -286,8 +285,7 @@ class DetoxPrimaryContext extends DetoxContext {
286
285
  return true;
287
286
  }
288
287
 
289
- const { failedTestFiles, testFilesToRetry } = this[$sessionState];
290
- return failedTestFiles.length + testFilesToRetry.length > 0;
288
+ return this[$sessionState].testResults.some(r => !r.success);
291
289
  }
292
290
 
293
291
  async[_resetLockFile]() {
@@ -29,9 +29,9 @@ class DetoxSecondaryContext extends DetoxContext {
29
29
  }
30
30
 
31
31
  //#region Internal members
32
- async [symbols.reportFailedTests](testFilePaths, permanent = false) {
32
+ async [symbols.reportTestResults](testResults) {
33
33
  if (this[_ipcClient]) {
34
- await this[_ipcClient].reportFailedTests(testFilePaths, permanent);
34
+ await this[_ipcClient].reportTestResults(testResults);
35
35
  } else {
36
36
  throw new DetoxInternalError('Detected an attempt to report failed tests using a non-initialized context.');
37
37
  }
package/src/symbols.js CHANGED
@@ -18,7 +18,7 @@
18
18
  * readonly onTestFnStart: unique symbol;
19
19
  * readonly onTestFnSuccess: unique symbol;
20
20
  * readonly onTestStart: unique symbol;
21
- * readonly reportFailedTests: unique symbol;
21
+ * readonly reportTestResults: unique symbol;
22
22
  * readonly resolveConfig: unique symbol;
23
23
  * readonly session: unique symbol;
24
24
  * readonly tracing: unique symbol;
@@ -43,7 +43,7 @@ module.exports = {
43
43
  //#endregion
44
44
 
45
45
  //#region IPC
46
- reportFailedTests: Symbol('reportFailedTests'),
46
+ reportTestResults: Symbol('reportTestResults'),
47
47
  //#endregion
48
48
 
49
49
  //#region Main
@@ -1,65 +1,82 @@
1
- // @ts-nocheck
2
- const DetoxRuntimeError = require('../errors/DetoxRuntimeError');
1
+ const { DetoxRuntimeError, DetoxInternalError } = require('../errors');
3
2
 
4
3
  const Deferred = require('./Deferred');
5
4
 
6
5
  class Timer {
6
+ constructor() {
7
+ /** @private */
8
+ this._eta = NaN;
9
+ /** @private */
10
+ this._timeout = NaN;
11
+ /** @type {NodeJS.Timer | null} */
12
+ this._timeoutHandle = null;
13
+ /** @type {Deferred | null} */
14
+ this._timeoutDeferred = null;
15
+ }
16
+
17
+ clear() {
18
+ if (this._timeoutHandle) {
19
+ clearTimeout(this._timeoutHandle);
20
+ this._timeoutHandle = null;
21
+ }
22
+
23
+ this._eta = NaN;
24
+ this._timeout = NaN;
25
+ this._timeoutDeferred = null;
26
+ }
27
+
28
+ get expired() {
29
+ return this._timeoutDeferred ? this._timeoutDeferred.isResolved() : false;
30
+ }
31
+
7
32
  /**
8
- * @param {string} description - gives more context for thrown errors
9
33
  * @param {number} timeout - maximal allowed duration in milliseconds
10
34
  */
11
- constructor({ description, timeout }) {
12
- /** @private */
35
+ schedule(timeout) {
36
+ this.clear();
37
+
38
+ this._eta = Date.now() + timeout;
13
39
  this._timeout = timeout;
14
- /** @public */
15
- this.description = description;
40
+ this._timeoutDeferred = new Deferred();
41
+ this._timeoutHandle = setTimeout(() => {
42
+ this._timeoutDeferred.resolve();
43
+ }, this._timeout);
16
44
 
17
- this._schedule();
45
+ return this;
18
46
  }
19
47
 
20
- _schedule() {
21
- this._createdAt = Date.now();
22
- this._timeoutDeferred = new Deferred();
48
+ extend(ms) {
49
+ if (this.expired) {
50
+ return this.schedule(ms);
51
+ }
52
+
53
+ clearTimeout(this._timeoutHandle);
54
+ this._eta += ms;
55
+ this._timeout += ms;
23
56
  this._timeoutHandle = setTimeout(() => {
24
57
  this._timeoutDeferred.resolve();
25
- }, this._timeout);
58
+ }, this._eta - Date.now());
26
59
  }
27
60
 
28
- async run(action) {
61
+ async run(description, action) {
62
+ if (!this._timeoutDeferred) {
63
+ throw new DetoxInternalError('Cannot run a timer action from an uninitialized timer');
64
+ }
65
+
29
66
  const error = new DetoxRuntimeError({
30
- message: `Exceeded timeout of ${this._timeout}ms while ${this.description}`,
67
+ message: `Exceeded timeout of ${this._timeout}ms while ${description}`,
31
68
  noStack: true,
32
69
  });
33
70
 
71
+ if (this.expired) {
72
+ throw error;
73
+ }
74
+
34
75
  return Promise.race([
35
76
  this._timeoutDeferred.promise.then(() => { throw error; }),
36
77
  Promise.resolve().then(action),
37
78
  ]);
38
79
  }
39
-
40
- dispose() {
41
- clearTimeout(this._timeoutHandle);
42
- }
43
-
44
- reset(extraDelayMs) {
45
- this._timeout = extraDelayMs;
46
-
47
- if (this._timeoutDeferred.status !== Deferred.PENDING) {
48
- this._schedule();
49
- } else {
50
- clearTimeout(this._timeoutHandle);
51
- this._timeoutHandle = setTimeout(() => this._timeoutDeferred.resolve(), extraDelayMs);
52
- }
53
- }
54
-
55
- static async run({ description, timeout, fn }) {
56
- const timer = new Timer({ description, timeout });
57
- try {
58
- await timer.run(fn);
59
- } finally {
60
- timer.dispose();
61
- }
62
- }
63
80
  }
64
81
 
65
82
  module.exports = Timer;
@@ -1,4 +1,6 @@
1
1
  const { isError } = require('lodash');
2
+ const { deserializeError, serializeError } = require('serialize-error');
3
+
2
4
  const CLEAN_AT = /\n\s*at [\s\S]*/m;
3
5
 
4
6
  function filterErrorStack(error, predicate) {
@@ -38,9 +40,27 @@ function asError(error) {
38
40
  return isError(error) ? error : new Error(error);
39
41
  }
40
42
 
43
+ function serializeObjectWithError(obj, errorKey) {
44
+ if (obj[errorKey]) {
45
+ return { ...obj, [errorKey]: serializeError(obj[errorKey]) };
46
+ }
47
+
48
+ return obj;
49
+ }
50
+
51
+ function deserializeObjectWithError(obj, errorKey) {
52
+ if (typeof obj[errorKey] === 'object' && !(obj[errorKey] instanceof Error)) {
53
+ return { ...obj, [errorKey]: deserializeError(obj[errorKey]) };
54
+ }
55
+
56
+ return obj;
57
+ }
58
+
41
59
  module.exports = {
42
60
  asError,
43
61
  replaceErrorStack,
44
62
  filterErrorStack,
45
63
  createErrorWithUserStack,
64
+ serializeObjectWithError,
65
+ deserializeObjectWithError,
46
66
  };
@@ -1 +0,0 @@
1
- 6f4375b8d626c5e56010bb9079d2def1daf66206
@@ -1 +0,0 @@
1
- 5f2296afd84c0b9887d0f69d5ce484c193e2337f457156755dd5dbd1b18e1f2e
@@ -1 +0,0 @@
1
- 9d30f9d43a3483289b0d34cd1c7f052328167aaf404558cb174f3134561d5cfda3440439af1c58239447ab8b18f6386ac3e3e06acde12db9753993d45fadb254
@@ -1 +0,0 @@
1
- b39c10ee0d40e56d89210314cf5ddaf2d2aa96bb
@@ -1 +0,0 @@
1
- 83099d2c42349ecefa7540645d893fd1f57545a3d4a4176e64b6ea775cd1e624
@@ -1 +0,0 @@
1
- ef17949935df0db02792f2b6c75ed22010258c48da606b417bd69e5ad41e9951810739c19f607f77ca245059573399e76310ac70fb5cfbcb1784be605fefb0d8
@@ -1 +0,0 @@
1
- 7a46662622c24f8677074374fd81b604
@@ -1 +0,0 @@
1
- 43bfd8fb25e7b0c24e0d1ed4b250f138b8f21537
@@ -1 +0,0 @@
1
- 0df8f8ebf03215da2f15fe8e6a093b65dd808d6870b69eabbb4ae8f680b18bdc
@@ -1 +0,0 @@
1
- e0721afc0568f85c754e4741cc58a885a77c8f6f485b9eda322290d906eae9707473016ca97ea6cef6583c9f98e82622dd13343d0fa5a7f9d77daf62f97791df
@@ -1 +0,0 @@
1
- 332c4d3da54dd80f67e23eda984e156b
@@ -1 +0,0 @@
1
- c67b0ded2e25005ab37a36e40f69f2c7ddac7afc
@@ -1 +0,0 @@
1
- f888b95186a4212d022b0288320cf4408d343bc0070522d91ebad8254f4fc20b
@@ -1 +0,0 @@
1
- 67a61376843dba1e684c928d6cab78c2682f7b20424cd75d06f67aae3a9a782ac3f9ca1208c68f5568067698fe7e909c236723a0a7ca11f67033d09292b55fe6