detox 20.24.0 → 20.25.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (67) hide show
  1. package/Detox-android/com/wix/detox/{20.24.0/detox-20.24.0-sources.jar → 20.25.1/detox-20.25.1-sources.jar} +0 -0
  2. package/Detox-android/com/wix/detox/20.25.1/detox-20.25.1-sources.jar.md5 +1 -0
  3. package/Detox-android/com/wix/detox/20.25.1/detox-20.25.1-sources.jar.sha1 +1 -0
  4. package/Detox-android/com/wix/detox/20.25.1/detox-20.25.1-sources.jar.sha256 +1 -0
  5. package/Detox-android/com/wix/detox/20.25.1/detox-20.25.1-sources.jar.sha512 +1 -0
  6. package/Detox-android/com/wix/detox/{20.24.0/detox-20.24.0.pom → 20.25.1/detox-20.25.1.pom} +1 -1
  7. package/Detox-android/com/wix/detox/20.25.1/detox-20.25.1.pom.md5 +1 -0
  8. package/Detox-android/com/wix/detox/20.25.1/detox-20.25.1.pom.sha1 +1 -0
  9. package/Detox-android/com/wix/detox/20.25.1/detox-20.25.1.pom.sha256 +1 -0
  10. package/Detox-android/com/wix/detox/20.25.1/detox-20.25.1.pom.sha512 +1 -0
  11. package/Detox-android/com/wix/detox/maven-metadata.xml +4 -4
  12. package/Detox-android/com/wix/detox/maven-metadata.xml.md5 +1 -1
  13. package/Detox-android/com/wix/detox/maven-metadata.xml.sha1 +1 -1
  14. package/Detox-android/com/wix/detox/maven-metadata.xml.sha256 +1 -1
  15. package/Detox-android/com/wix/detox/maven-metadata.xml.sha512 +1 -1
  16. package/Detox-android/com/wix/detox-legacy/{20.24.0/detox-legacy-20.24.0-sources.jar → 20.25.1/detox-legacy-20.25.1-sources.jar} +0 -0
  17. package/Detox-android/com/wix/detox-legacy/20.25.1/detox-legacy-20.25.1-sources.jar.md5 +1 -0
  18. package/Detox-android/com/wix/detox-legacy/20.25.1/detox-legacy-20.25.1-sources.jar.sha1 +1 -0
  19. package/Detox-android/com/wix/detox-legacy/20.25.1/detox-legacy-20.25.1-sources.jar.sha256 +1 -0
  20. package/Detox-android/com/wix/detox-legacy/20.25.1/detox-legacy-20.25.1-sources.jar.sha512 +1 -0
  21. package/Detox-android/com/wix/detox-legacy/{20.24.0/detox-legacy-20.24.0.pom → 20.25.1/detox-legacy-20.25.1.pom} +1 -1
  22. package/Detox-android/com/wix/detox-legacy/20.25.1/detox-legacy-20.25.1.pom.md5 +1 -0
  23. package/Detox-android/com/wix/detox-legacy/20.25.1/detox-legacy-20.25.1.pom.sha1 +1 -0
  24. package/Detox-android/com/wix/detox-legacy/20.25.1/detox-legacy-20.25.1.pom.sha256 +1 -0
  25. package/Detox-android/com/wix/detox-legacy/20.25.1/detox-legacy-20.25.1.pom.sha512 +1 -0
  26. package/Detox-android/com/wix/detox-legacy/maven-metadata.xml +4 -4
  27. package/Detox-android/com/wix/detox-legacy/maven-metadata.xml.md5 +1 -1
  28. package/Detox-android/com/wix/detox-legacy/maven-metadata.xml.sha1 +1 -1
  29. package/Detox-android/com/wix/detox-legacy/maven-metadata.xml.sha256 +1 -1
  30. package/Detox-android/com/wix/detox-legacy/maven-metadata.xml.sha512 +1 -1
  31. package/Detox-ios-framework.tbz +0 -0
  32. package/Detox-ios-src.tbz +0 -0
  33. package/Detox-ios-xcuitest.tbz +0 -0
  34. package/package.json +2 -2
  35. package/src/devices/allocation/DeviceAllocator.js +7 -0
  36. package/src/devices/allocation/drivers/android/genycloud/GenyAllocDriver.js +9 -1
  37. package/src/devices/allocation/drivers/android/genycloud/exec/GenyCloudExec.js +1 -1
  38. package/src/devices/allocation/drivers/android/genycloud/services/GenyInstanceLifecycleService.js +27 -3
  39. package/src/devices/allocation/factories/android.js +1 -1
  40. package/src/devices/common/drivers/android/exec/ADB.js +6 -2
  41. package/src/realms/DetoxPrimaryContext.js +29 -16
  42. package/Detox-android/com/wix/detox/20.24.0/detox-20.24.0-sources.jar.md5 +0 -1
  43. package/Detox-android/com/wix/detox/20.24.0/detox-20.24.0-sources.jar.sha1 +0 -1
  44. package/Detox-android/com/wix/detox/20.24.0/detox-20.24.0-sources.jar.sha256 +0 -1
  45. package/Detox-android/com/wix/detox/20.24.0/detox-20.24.0-sources.jar.sha512 +0 -1
  46. package/Detox-android/com/wix/detox/20.24.0/detox-20.24.0.pom.md5 +0 -1
  47. package/Detox-android/com/wix/detox/20.24.0/detox-20.24.0.pom.sha1 +0 -1
  48. package/Detox-android/com/wix/detox/20.24.0/detox-20.24.0.pom.sha256 +0 -1
  49. package/Detox-android/com/wix/detox/20.24.0/detox-20.24.0.pom.sha512 +0 -1
  50. package/Detox-android/com/wix/detox-legacy/20.24.0/detox-legacy-20.24.0-sources.jar.md5 +0 -1
  51. package/Detox-android/com/wix/detox-legacy/20.24.0/detox-legacy-20.24.0-sources.jar.sha1 +0 -1
  52. package/Detox-android/com/wix/detox-legacy/20.24.0/detox-legacy-20.24.0-sources.jar.sha256 +0 -1
  53. package/Detox-android/com/wix/detox-legacy/20.24.0/detox-legacy-20.24.0-sources.jar.sha512 +0 -1
  54. package/Detox-android/com/wix/detox-legacy/20.24.0/detox-legacy-20.24.0.pom.md5 +0 -1
  55. package/Detox-android/com/wix/detox-legacy/20.24.0/detox-legacy-20.24.0.pom.sha1 +0 -1
  56. package/Detox-android/com/wix/detox-legacy/20.24.0/detox-legacy-20.24.0.pom.sha256 +0 -1
  57. package/Detox-android/com/wix/detox-legacy/20.24.0/detox-legacy-20.24.0.pom.sha512 +0 -1
  58. /package/Detox-android/com/wix/detox/{20.24.0/detox-20.24.0.aar → 20.25.1/detox-20.25.1.aar} +0 -0
  59. /package/Detox-android/com/wix/detox/{20.24.0/detox-20.24.0.aar.md5 → 20.25.1/detox-20.25.1.aar.md5} +0 -0
  60. /package/Detox-android/com/wix/detox/{20.24.0/detox-20.24.0.aar.sha1 → 20.25.1/detox-20.25.1.aar.sha1} +0 -0
  61. /package/Detox-android/com/wix/detox/{20.24.0/detox-20.24.0.aar.sha256 → 20.25.1/detox-20.25.1.aar.sha256} +0 -0
  62. /package/Detox-android/com/wix/detox/{20.24.0/detox-20.24.0.aar.sha512 → 20.25.1/detox-20.25.1.aar.sha512} +0 -0
  63. /package/Detox-android/com/wix/detox-legacy/{20.24.0/detox-legacy-20.24.0.aar → 20.25.1/detox-legacy-20.25.1.aar} +0 -0
  64. /package/Detox-android/com/wix/detox-legacy/{20.24.0/detox-legacy-20.24.0.aar.md5 → 20.25.1/detox-legacy-20.25.1.aar.md5} +0 -0
  65. /package/Detox-android/com/wix/detox-legacy/{20.24.0/detox-legacy-20.24.0.aar.sha1 → 20.25.1/detox-legacy-20.25.1.aar.sha1} +0 -0
  66. /package/Detox-android/com/wix/detox-legacy/{20.24.0/detox-legacy-20.24.0.aar.sha256 → 20.25.1/detox-legacy-20.25.1.aar.sha256} +0 -0
  67. /package/Detox-android/com/wix/detox-legacy/{20.24.0/detox-legacy-20.24.0.aar.sha512 → 20.25.1/detox-legacy-20.25.1.aar.sha512} +0 -0
@@ -0,0 +1 @@
1
+ ef152eed43d99abecc781d2c5581ed2c
@@ -0,0 +1 @@
1
+ a00c63f1d6864fe3684aabdc4addaf251db4f12d
@@ -0,0 +1 @@
1
+ 9d2842e3781dc8085a80c2029c5d63cac9b382181371e3d715e71248ae81e619
@@ -0,0 +1 @@
1
+ 9f993e109ac46d9ec4132ad900b0eee9e4f5604909c69496ebc364ba1bc32ceb19fca9b5adbfe6a9e61c4c489e6a21e61efd58ec6a0602a4c8dd35c0f1897c72
@@ -3,7 +3,7 @@
3
3
  <modelVersion>4.0.0</modelVersion>
4
4
  <groupId>com.wix</groupId>
5
5
  <artifactId>detox</artifactId>
6
- <version>20.24.0</version>
6
+ <version>20.25.1</version>
7
7
  <packaging>aar</packaging>
8
8
  <name>Detox</name>
9
9
  <description>Gray box end-to-end testing and automation library for mobile apps</description>
@@ -0,0 +1 @@
1
+ 5a378650b3fb1fc751bad1924a05e988
@@ -0,0 +1 @@
1
+ a2d652e833f0d7a91a8f05e2232a4ca964992a66
@@ -0,0 +1 @@
1
+ 97b5030e5db6c3d762c9a24ecc11a6989f4079591ddab23d2b8c67e4ac20bfb7
@@ -0,0 +1 @@
1
+ 37ab0fe6dec997c70fdff5e0f76acf744c487d150a70954bffa0467042c861b2bfe3711d53762c1ea0efce1a6fc8c29b82bfb822435cac2756474fcec24c4d5e
@@ -3,11 +3,11 @@
3
3
  <groupId>com.wix</groupId>
4
4
  <artifactId>detox</artifactId>
5
5
  <versioning>
6
- <latest>20.24.0</latest>
7
- <release>20.24.0</release>
6
+ <latest>20.25.1</latest>
7
+ <release>20.25.1</release>
8
8
  <versions>
9
- <version>20.24.0</version>
9
+ <version>20.25.1</version>
10
10
  </versions>
11
- <lastUpdated>20240712095248</lastUpdated>
11
+ <lastUpdated>20240716121904</lastUpdated>
12
12
  </versioning>
13
13
  </metadata>
@@ -1 +1 @@
1
- cbe838e81e9b2489895384dbf73d9855
1
+ 275ff0123e1dbaa1aed3a7e91e9ae762
@@ -1 +1 @@
1
- 248526814045318fcaeda09d11dcff993503e58c
1
+ f986a8170fefe76b9f4efd0b755aaccde8b51bdd
@@ -1 +1 @@
1
- 674cb578d4b1ab1e1f0f3af2f9e6b7d237e9417840a73f4a55181cc61aa55a75
1
+ 779e3063806e639cd380893e02fe5a902fbdad0f12d6eb06b09819f07a863272
@@ -1 +1 @@
1
- bf96117e1935d3a9c81337a743672b5ef93cc5c786026f5b2bca4118ab69c5c3b4a55600019581dc75f5b533e0fc310963e457df556d8b5108f2628aa246fbd8
1
+ 8c0fae16887da6da5fa405a62587e05612fa0b27a8d4e047419dfeb0bf3889b83c4c367941056b92b309b327c3f9aa28f1b26cc882ce6dda96ec2564a0836089
@@ -0,0 +1 @@
1
+ 5faf79ea736df2cf512a937df79bec2a
@@ -0,0 +1 @@
1
+ 834508470595778511d3f3b564de2d31413e57ff
@@ -0,0 +1 @@
1
+ 3d5e951f611b30a5d85d3535db3152824f019c4cd99972ff304b76d0c46b1038
@@ -0,0 +1 @@
1
+ ff7bf763835d49aa17a6ba58b738cf47e5577038c10de0e6af0c629be076970895540b02ee8ba9d431c277f28aa1458c617d95b9df0adb0a32d0fa3afb67972c
@@ -3,7 +3,7 @@
3
3
  <modelVersion>4.0.0</modelVersion>
4
4
  <groupId>com.wix</groupId>
5
5
  <artifactId>detox-legacy</artifactId>
6
- <version>20.24.0</version>
6
+ <version>20.25.1</version>
7
7
  <packaging>aar</packaging>
8
8
  <name>Detox</name>
9
9
  <description>Gray box end-to-end testing and automation library for mobile apps</description>
@@ -0,0 +1 @@
1
+ 275a026938b603bc63c62aa9105660ab
@@ -0,0 +1 @@
1
+ 38f52f7d5a0616f1ea0c7fd7831197ebda6b4df9
@@ -0,0 +1 @@
1
+ 92ee50857ac9fb128bd30d6079ed09ef71e53526fe45581baec69d72bc05c5a4
@@ -0,0 +1 @@
1
+ e6ca3c09f9026d4e0c54b71f8b1c78506fc6a2005c3f41e6df65b4f8f36fb4bea770cca153c887f140ce338200397777168a55e52bd51c4894dbe11677d422b6
@@ -3,11 +3,11 @@
3
3
  <groupId>com.wix</groupId>
4
4
  <artifactId>detox-legacy</artifactId>
5
5
  <versioning>
6
- <latest>20.24.0</latest>
7
- <release>20.24.0</release>
6
+ <latest>20.25.1</latest>
7
+ <release>20.25.1</release>
8
8
  <versions>
9
- <version>20.24.0</version>
9
+ <version>20.25.1</version>
10
10
  </versions>
11
- <lastUpdated>20240712095305</lastUpdated>
11
+ <lastUpdated>20240716121940</lastUpdated>
12
12
  </versioning>
13
13
  </metadata>
@@ -1 +1 @@
1
- ebd10c4caa0af7ac57ef360ffe5e7c41
1
+ 39a5211574c6847cfa8ba0c843d19419
@@ -1 +1 @@
1
- 82e96d3f328e2794534a91f0b921dd1c51413e8e
1
+ 03853c1e7b6181d8a82d09756d5ffeb0894d2883
@@ -1 +1 @@
1
- 1d2093dc2d529e5844dd5117be23864ddfc8101c2d5b5a935b48ce56cf434cb2
1
+ 3c07d8c65169a75189c32e72f195d09399c059a0a42a5d42e0a54e06a9c1af8e
@@ -1 +1 @@
1
- 515cd3e14cf792392678590d01108ca641e8ae53db46446f4fa7bbbebc9a680b8efd5568b7b5306ce4ed46e12e36c3fd9fe5d8c05e412a25cfbd5b5fd17a963d
1
+ 01a09bb5c4de685f4a81bb7b11d211230808546068b486ca51e3889dfb74ad278c18f7a330c6b1898d73a8b993d91884e36336fcb84054e1a923b93f6578613f
Binary file
package/Detox-ios-src.tbz CHANGED
Binary file
Binary file
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "detox",
3
3
  "description": "E2E tests and automation for mobile",
4
- "version": "20.24.0",
4
+ "version": "20.25.1",
5
5
  "bin": {
6
6
  "detox": "local-cli/cli.js"
7
7
  },
@@ -115,5 +115,5 @@
115
115
  "browserslist": [
116
116
  "node 14"
117
117
  ],
118
- "gitHead": "4a442cee82115ef4eeb5dd618e8ab4d0281f4b2a"
118
+ "gitHead": "f25468f5b0cf6e2895fb6b51b96ffc14263f2084"
119
119
  }
@@ -4,6 +4,8 @@
4
4
  * @typedef {import('../common/drivers/DeviceCookie').DeviceCookie} DeviceCookie
5
5
  */
6
6
 
7
+ const _ = require('lodash');
8
+
7
9
  const log = require('../../utils/logger').child({ cat: 'device,device-allocation' });
8
10
  const traceMethods = require('../../utils/traceMethods');
9
11
 
@@ -16,6 +18,11 @@ class DeviceAllocator {
16
18
  this._counter = 0;
17
19
  this._ids = new Map();
18
20
  traceMethods(log, this, ['init', 'cleanup', 'emergencyCleanup']);
21
+
22
+ // Init and cleanup should be called once for each allocation driver type
23
+ this.init = _.once(this.init.bind(this));
24
+ this.cleanup = _.once(this.cleanup.bind(this));
25
+ this.emergencyCleanup = _.once(this.emergencyCleanup.bind(this));
19
26
  }
20
27
 
21
28
  /**
@@ -10,6 +10,7 @@ const log = require('../../../../../utils/logger').child({ cat: 'device' });
10
10
  const GenyRegistry = require('./GenyRegistry');
11
11
 
12
12
  const events = {
13
+ GENYCLOUD_INIT: { event: 'GENYCLOUD_INIT' },
13
14
  GENYCLOUD_TEARDOWN: { event: 'GENYCLOUD_TEARDOWN' },
14
15
  };
15
16
 
@@ -40,12 +41,19 @@ class GenyAllocDriver {
40
41
  this._instanceCounter = 0;
41
42
  }
42
43
 
44
+ async init() {
45
+ try {
46
+ await this._adb.startDaemon();
47
+ } catch (error) {
48
+ log.warn({ ...events.GENYCLOUD_INIT, error }, 'ADB server start failed; error ignored');
49
+ }
50
+ }
51
+
43
52
  /**
44
53
  * @param deviceConfig { Object }
45
54
  * @return {Promise<GenycloudEmulatorCookie>}
46
55
  */
47
56
  async allocate(deviceConfig) {
48
- await new Promise((resolve) => setTimeout(resolve, 10000));
49
57
  const deviceQuery = deviceConfig.device;
50
58
  const recipe = await this._recipeQuerying.getRecipeFromQuery(deviceQuery);
51
59
  this._assertRecipe(deviceQuery, recipe);
@@ -28,7 +28,7 @@ class GenyCloudExec {
28
28
  }
29
29
 
30
30
  adbConnect(instanceUUID) {
31
- return this._exec(`instances adbconnect ${instanceUUID}`);
31
+ return this._exec(`instances adbconnect ${instanceUUID}`, { retries: 0 });
32
32
  }
33
33
 
34
34
  stopInstance(instanceUUID) {
@@ -1,8 +1,16 @@
1
+ const log = require('../../../../../../utils/logger').child({ cat: 'device' });
2
+ const retry = require('../../../../../../utils/retry');
3
+
1
4
  const Instance = require('./dto/GenyInstance');
2
5
 
3
6
  class GenyInstanceLifecycleService {
4
- constructor(genyCloudExec) {
7
+ /**
8
+ * @param { import('../exec/GenyCloudExec') } genyCloudExec
9
+ * @param { import('../../../../../common/drivers/android/exec/ADB') } adb
10
+ */
11
+ constructor(genyCloudExec, adb) {
5
12
  this._genyCloudExec = genyCloudExec;
13
+ this._adb = adb;
6
14
  }
7
15
 
8
16
  async createInstance(recipeUUID, instanceName) {
@@ -10,8 +18,24 @@ class GenyInstanceLifecycleService {
10
18
  return new Instance(result.instance);
11
19
  }
12
20
 
13
- async adbConnectInstance(instanceUUID) {
14
- const result = (await this._genyCloudExec.adbConnect(instanceUUID));
21
+ async adbConnectInstance(instanceUUID){
22
+ const doAdbConnect = async () =>
23
+ this._genyCloudExec.adbConnect(instanceUUID);
24
+ const beforeEachRetry = async () => {
25
+ try {
26
+ const { stdout } = await this._adb.devices({ retries: 0, verbosity: 'low' });
27
+ log.warn('adb-connect command failed, current ADB devices list:\n', stdout);
28
+ } catch (e) {
29
+ log.warn('adb-connect command failed; couldn\'t get the list of current devices (see error)', e);
30
+ }
31
+ return true;
32
+ };
33
+ const options = {
34
+ conditionFn: beforeEachRetry,
35
+ retries: 2,
36
+ };
37
+
38
+ const result = await retry(options, doAdbConnect);
15
39
  return new Instance(result.instance);
16
40
  }
17
41
 
@@ -66,7 +66,7 @@ class Genycloud extends DeviceAllocatorFactory {
66
66
  const recipeService = new RecipesService(exec);
67
67
 
68
68
  const InstanceLifecycleService = require('../drivers/android/genycloud/services/GenyInstanceLifecycleService');
69
- const instanceLifecycleService = new InstanceLifecycleService(exec);
69
+ const instanceLifecycleService = new InstanceLifecycleService(exec, adb);
70
70
 
71
71
  const RecipeQuerying = require('../drivers/android/genycloud/GenyRecipeQuerying');
72
72
  const recipeQuerying = new RecipeQuerying(recipeService);
@@ -16,8 +16,12 @@ class ADB {
16
16
  this.adbBin = getAdbPath();
17
17
  }
18
18
 
19
- async devices() {
20
- const { stdout } = await this.adbCmd('', 'devices', { verbosity: 'high' });
19
+ async startDaemon() {
20
+ await this.adbCmd('', 'start-server', { retries: 0, verbosity: 'high' });
21
+ }
22
+
23
+ async devices(options) {
24
+ const { stdout } = await this.adbCmd('', 'devices', { verbosity: 'high', ...options });
21
25
  /** @type {DeviceHandle[]} */
22
26
  const devices = _.chain(stdout)
23
27
  .trim()
@@ -26,6 +26,7 @@ const _logFinalError = Symbol('logFinalError');
26
26
  const _cookieAllocators = Symbol('cookieAllocators');
27
27
  const _deviceAllocators = Symbol('deviceAllocators');
28
28
  const _createDeviceAllocator = Symbol('createDeviceAllocator');
29
+ const _createDeviceAllocatorInstance = Symbol('createDeviceAllocatorInstance');
29
30
  //#endregion
30
31
 
31
32
  class DetoxPrimaryContext extends DetoxContext {
@@ -272,29 +273,41 @@ class DetoxPrimaryContext extends DetoxContext {
272
273
  /** @param {Detox.DetoxDeviceConfig} deviceConfig */
273
274
  [_createDeviceAllocator] = async (deviceConfig) => {
274
275
  const deviceType = deviceConfig.type;
276
+ const deviceAllocator = this[_createDeviceAllocatorInstance](deviceConfig);
277
+
278
+ try {
279
+ await deviceAllocator.init();
280
+ } catch (e) {
281
+ try {
282
+ delete this[_deviceAllocators][deviceType];
283
+ await deviceAllocator.cleanup();
284
+ } catch (e2) {
285
+ this[symbols.logger].error({ cat: 'device', err: e2 }, `Failed to cleanup the device allocation driver for ${deviceType} after a failed initialization`);
286
+ }
287
+
288
+ throw e;
289
+ }
290
+
291
+ return this[_deviceAllocators][deviceType];
292
+ };
293
+
294
+ /**
295
+ * @param {Detox.DetoxDeviceConfig} deviceConfig
296
+ * @returns { DeviceAllocator }
297
+ */
298
+ [_createDeviceAllocatorInstance] = (deviceConfig) => {
299
+ const deviceType = deviceConfig.type;
300
+
275
301
  if (!this[_deviceAllocators][deviceType]) {
276
302
  const environmentFactory = require('../environmentFactory');
277
303
  const { deviceAllocatorFactory } = environmentFactory.createFactories(deviceConfig);
278
304
  const { detoxConfig } = this[$sessionState];
279
- const deviceAllocator = deviceAllocatorFactory.createDeviceAllocator({
305
+
306
+ this[_deviceAllocators][deviceType] = deviceAllocatorFactory.createDeviceAllocator({
280
307
  detoxConfig,
281
- detoxSession: this[$sessionState],
308
+ detoxSession: this[$sessionState]
282
309
  });
283
-
284
- try {
285
- await deviceAllocator.init();
286
- this[_deviceAllocators][deviceType] = deviceAllocator;
287
- } catch (e) {
288
- try {
289
- await deviceAllocator.cleanup();
290
- } catch (e2) {
291
- this[symbols.logger].error({ cat: 'device', err: e2 }, `Failed to cleanup the device allocation driver for ${deviceType} after a failed initialization`);
292
- }
293
-
294
- throw e;
295
- }
296
310
  }
297
-
298
311
  return this[_deviceAllocators][deviceType];
299
312
  };
300
313
 
@@ -1 +0,0 @@
1
- 619b3e428e498fda0870620ce2d3c5c4
@@ -1 +0,0 @@
1
- 017905bcc89ab25f26a51c0d724680d83416b2e7
@@ -1 +0,0 @@
1
- d88cd6cd15872d9f04c77c23c1c2fd4474787eb0f25333f08452c2fb4de8c74b
@@ -1 +0,0 @@
1
- 2757b909c56c219bdb8fcb4b629523bcad05556234bf89ae5953b21e62c3a9676f45ad36ed3eb4b8a875a891406664c55a7102ff8933a8c4dcb8eecf3f2723a1
@@ -1 +0,0 @@
1
- d6caeb72643d8530ef1b332e98566350
@@ -1 +0,0 @@
1
- 13c3cb0d37f92bcd283ef5344897c975396b93d0
@@ -1 +0,0 @@
1
- 348ea5305bc6ebd7658d9966eee32c073f268adf33e802a12469c2dad0c136bf
@@ -1 +0,0 @@
1
- cf5032396a95a97fd964672c188382d46fd16195e5708a6b21f85322a678595d8923f7dac31479f05e1121af4fcef0734c22ceabdf22afd54db9213ccb70a9dc
@@ -1 +0,0 @@
1
- 9e833c26f83f840d110b10f49e930040
@@ -1 +0,0 @@
1
- 47fa17817e76b9388404db2f8af6adf908faa1cb
@@ -1 +0,0 @@
1
- 4ad337ac65a1942992b394b1bacdbec38f2415032903af63d6dfbe7bf8539233
@@ -1 +0,0 @@
1
- 5d9ddd3356f022e5a7a341caddb73a9a2deb69f36886824bda7e7f48f104ad94f7950924101dbd6248a7afd4cb03a8da2ae5a9a4b2f1cf498cae53f306a68ccf
@@ -1 +0,0 @@
1
- c0fb34a4b4869fb29fe7c29e071a8905
@@ -1 +0,0 @@
1
- 01fb530a4a232d4ddd2428bc594a69de25963637
@@ -1 +0,0 @@
1
- 6cb3e5c70e00b6dc5f102587810da45a304a2b61dc843161b00a9022cdae27de
@@ -1 +0,0 @@
1
- d6a1b08152dc9a8c0f5defe3251ed611cd3fd2648702b54d12e53f00d3a8a1315897466eb02e31350379002eb74e8bbdd91539a91b18c5bfffa4a5fa8db78719