appium 2.0.0-beta.25 → 2.0.0-beta.28

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 (191) hide show
  1. package/build/lib/appium.d.ts +215 -0
  2. package/build/lib/appium.d.ts.map +1 -0
  3. package/build/lib/appium.js +94 -101
  4. package/build/lib/cli/args.d.ts +20 -0
  5. package/build/lib/cli/args.d.ts.map +1 -0
  6. package/build/lib/cli/args.js +19 -39
  7. package/build/lib/cli/driver-command.d.ts +36 -0
  8. package/build/lib/cli/driver-command.d.ts.map +1 -0
  9. package/build/lib/cli/driver-command.js +10 -13
  10. package/build/lib/cli/extension-command.d.ts +345 -0
  11. package/build/lib/cli/extension-command.d.ts.map +1 -0
  12. package/build/lib/cli/extension-command.js +117 -94
  13. package/build/lib/cli/extension.d.ts +14 -0
  14. package/build/lib/cli/extension.d.ts.map +1 -0
  15. package/build/lib/cli/extension.js +14 -22
  16. package/build/lib/cli/parser.d.ts +79 -0
  17. package/build/lib/cli/parser.d.ts.map +1 -0
  18. package/build/lib/cli/parser.js +9 -19
  19. package/build/lib/cli/plugin-command.d.ts +39 -0
  20. package/build/lib/cli/plugin-command.d.ts.map +1 -0
  21. package/build/lib/cli/plugin-command.js +9 -14
  22. package/build/lib/cli/utils.d.ts +29 -0
  23. package/build/lib/cli/utils.d.ts.map +1 -0
  24. package/build/lib/cli/utils.js +2 -4
  25. package/build/lib/config-file.d.ts +100 -0
  26. package/build/lib/config-file.d.ts.map +1 -0
  27. package/build/lib/config-file.js +2 -4
  28. package/build/lib/config.d.ts +40 -0
  29. package/build/lib/config.d.ts.map +1 -0
  30. package/build/lib/config.js +8 -7
  31. package/build/lib/constants.d.ts +48 -0
  32. package/build/lib/constants.d.ts.map +1 -0
  33. package/build/lib/constants.js +60 -0
  34. package/build/lib/extension/driver-config.d.ts +84 -0
  35. package/build/lib/extension/driver-config.d.ts.map +1 -0
  36. package/build/lib/extension/driver-config.js +190 -0
  37. package/build/lib/extension/extension-config.d.ts +170 -0
  38. package/build/lib/extension/extension-config.d.ts.map +1 -0
  39. package/build/lib/extension/extension-config.js +297 -0
  40. package/build/lib/extension/index.d.ts +39 -0
  41. package/build/lib/extension/index.d.ts.map +1 -0
  42. package/build/lib/extension/index.js +77 -0
  43. package/build/lib/extension/manifest.d.ts +174 -0
  44. package/build/lib/extension/manifest.d.ts.map +1 -0
  45. package/build/lib/extension/manifest.js +246 -0
  46. package/build/lib/extension/package-changed.d.ts +11 -0
  47. package/build/lib/extension/package-changed.d.ts.map +1 -0
  48. package/build/lib/extension/package-changed.js +68 -0
  49. package/build/lib/extension/plugin-config.d.ts +62 -0
  50. package/build/lib/extension/plugin-config.d.ts.map +1 -0
  51. package/build/lib/extension/plugin-config.js +87 -0
  52. package/build/lib/grid-register.d.ts +10 -0
  53. package/build/lib/grid-register.d.ts.map +1 -0
  54. package/build/lib/grid-register.js +2 -4
  55. package/build/lib/logger.d.ts +3 -0
  56. package/build/lib/logger.d.ts.map +1 -0
  57. package/build/lib/logger.js +2 -4
  58. package/build/lib/logsink.d.ts +4 -0
  59. package/build/lib/logsink.d.ts.map +1 -0
  60. package/build/lib/logsink.js +2 -4
  61. package/build/lib/main.d.ts +51 -0
  62. package/build/lib/main.d.ts.map +1 -0
  63. package/build/lib/main.js +40 -68
  64. package/build/lib/schema/arg-spec.d.ts +143 -0
  65. package/build/lib/schema/arg-spec.d.ts.map +1 -0
  66. package/build/lib/schema/arg-spec.js +11 -14
  67. package/build/lib/schema/cli-args.d.ts +19 -0
  68. package/build/lib/schema/cli-args.d.ts.map +1 -0
  69. package/build/lib/schema/cli-args.js +2 -4
  70. package/build/lib/schema/cli-transformers.d.ts +5 -0
  71. package/build/lib/schema/cli-transformers.d.ts.map +1 -0
  72. package/build/lib/schema/cli-transformers.js +2 -4
  73. package/build/lib/schema/index.d.ts +3 -0
  74. package/build/lib/schema/index.d.ts.map +1 -0
  75. package/build/lib/schema/index.js +2 -4
  76. package/build/lib/schema/keywords.d.ts +24 -0
  77. package/build/lib/schema/keywords.d.ts.map +1 -0
  78. package/build/lib/schema/keywords.js +2 -4
  79. package/build/lib/schema/schema.d.ts +259 -0
  80. package/build/lib/schema/schema.d.ts.map +1 -0
  81. package/build/lib/schema/schema.js +57 -39
  82. package/build/lib/utils.d.ts +66 -0
  83. package/build/lib/utils.d.ts.map +1 -0
  84. package/build/lib/utils.js +6 -35
  85. package/build/tsconfig.tsbuildinfo +1 -0
  86. package/lib/appium.js +188 -117
  87. package/lib/cli/args.js +19 -24
  88. package/lib/cli/driver-command.js +19 -8
  89. package/lib/cli/extension-command.js +314 -184
  90. package/lib/cli/extension.js +18 -16
  91. package/lib/cli/parser.js +7 -16
  92. package/lib/cli/plugin-command.js +16 -7
  93. package/lib/cli/utils.js +1 -1
  94. package/lib/config-file.js +6 -7
  95. package/lib/config.js +17 -12
  96. package/lib/constants.js +78 -0
  97. package/lib/extension/driver-config.js +249 -0
  98. package/lib/extension/extension-config.js +458 -0
  99. package/lib/extension/index.js +102 -0
  100. package/lib/extension/manifest.js +486 -0
  101. package/lib/extension/package-changed.js +63 -0
  102. package/lib/extension/plugin-config.js +113 -0
  103. package/lib/grid-register.js +4 -4
  104. package/lib/logsink.js +4 -0
  105. package/lib/main.js +54 -92
  106. package/lib/schema/arg-spec.js +11 -7
  107. package/lib/schema/cli-args.js +1 -1
  108. package/lib/schema/cli-transformers.js +0 -1
  109. package/lib/schema/keywords.js +1 -2
  110. package/lib/schema/schema.js +62 -31
  111. package/lib/utils.js +48 -45
  112. package/package.json +30 -24
  113. package/{postinstall.js → scripts/postinstall.js} +1 -1
  114. package/types/appium-manifest.d.ts +61 -0
  115. package/types/cli.d.ts +134 -0
  116. package/types/extension.d.ts +56 -0
  117. package/types/external-manifest.d.ts +58 -0
  118. package/types/index.d.ts +7 -0
  119. package/bin/ios-webkit-debug-proxy-launcher.js +0 -71
  120. package/build/check-npm-pack-files.js +0 -23
  121. package/build/commands-yml/parse.js +0 -319
  122. package/build/commands-yml/validator.js +0 -130
  123. package/build/index.js +0 -19
  124. package/build/lib/appium-config.schema.json +0 -0
  125. package/build/lib/cli/npm.js +0 -220
  126. package/build/lib/driver-config.js +0 -100
  127. package/build/lib/drivers.js +0 -100
  128. package/build/lib/ext-config-io.js +0 -165
  129. package/build/lib/extension-config.js +0 -320
  130. package/build/lib/plugin-config.js +0 -69
  131. package/build/lib/plugins.js +0 -18
  132. package/build/lib/schema/appium-config-schema.js +0 -253
  133. package/build/postinstall.js +0 -90
  134. package/build/test/cli/cli-e2e-specs.js +0 -221
  135. package/build/test/cli/cli-helpers.js +0 -86
  136. package/build/test/cli/cli-specs.js +0 -71
  137. package/build/test/cli/fixtures/test-driver/package.json +0 -27
  138. package/build/test/cli/schema-args-specs.js +0 -48
  139. package/build/test/cli/schema-e2e-specs.js +0 -47
  140. package/build/test/config-e2e-specs.js +0 -112
  141. package/build/test/config-file-e2e-specs.js +0 -191
  142. package/build/test/config-file-specs.js +0 -281
  143. package/build/test/config-specs.js +0 -258
  144. package/build/test/driver-e2e-specs.js +0 -435
  145. package/build/test/driver-specs.js +0 -386
  146. package/build/test/ext-config-io-specs.js +0 -181
  147. package/build/test/extension-config-specs.js +0 -365
  148. package/build/test/fixtures/allow-feat.txt +0 -5
  149. package/build/test/fixtures/caps.json +0 -3
  150. package/build/test/fixtures/config/allow-insecure.txt +0 -3
  151. package/build/test/fixtures/config/appium.config.bad-nodeconfig.json +0 -5
  152. package/build/test/fixtures/config/appium.config.bad.json +0 -32
  153. package/build/test/fixtures/config/appium.config.ext-good.json +0 -9
  154. package/build/test/fixtures/config/appium.config.ext-unknown-props.json +0 -10
  155. package/build/test/fixtures/config/appium.config.good.js +0 -40
  156. package/build/test/fixtures/config/appium.config.good.json +0 -33
  157. package/build/test/fixtures/config/appium.config.good.yaml +0 -30
  158. package/build/test/fixtures/config/appium.config.invalid.json +0 -31
  159. package/build/test/fixtures/config/appium.config.security-array.json +0 -5
  160. package/build/test/fixtures/config/appium.config.security-delimited.json +0 -5
  161. package/build/test/fixtures/config/appium.config.security-path.json +0 -5
  162. package/build/test/fixtures/config/driver-fake.config.json +0 -8
  163. package/build/test/fixtures/config/nodeconfig.json +0 -3
  164. package/build/test/fixtures/config/plugin-fake.config.json +0 -0
  165. package/build/test/fixtures/default-args.js +0 -35
  166. package/build/test/fixtures/deny-feat.txt +0 -5
  167. package/build/test/fixtures/driver.schema.js +0 -20
  168. package/build/test/fixtures/extensions.yaml +0 -27
  169. package/build/test/fixtures/flattened-schema.js +0 -532
  170. package/build/test/fixtures/plugin.schema.js +0 -20
  171. package/build/test/fixtures/schema-with-extensions.js +0 -28
  172. package/build/test/grid-register-specs.js +0 -74
  173. package/build/test/helpers.js +0 -75
  174. package/build/test/logger-specs.js +0 -76
  175. package/build/test/npm-specs.js +0 -20
  176. package/build/test/parser-specs.js +0 -319
  177. package/build/test/plugin-e2e-specs.js +0 -316
  178. package/build/test/schema/arg-spec-specs.js +0 -70
  179. package/build/test/schema/cli-args-specs.js +0 -408
  180. package/build/test/schema/schema-specs.js +0 -407
  181. package/build/test/utils-specs.js +0 -288
  182. package/lib/cli/npm.js +0 -251
  183. package/lib/driver-config.js +0 -101
  184. package/lib/drivers.js +0 -84
  185. package/lib/ext-config-io.js +0 -287
  186. package/lib/extension-config.js +0 -366
  187. package/lib/plugin-config.js +0 -63
  188. package/lib/plugins.js +0 -13
  189. package/lib/schema/appium-config-schema.js +0 -287
  190. package/types/appium-config.d.ts +0 -197
  191. package/types/types.d.ts +0 -206
@@ -1,221 +0,0 @@
1
- "use strict";
2
-
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
-
5
- require("source-map-support/register");
6
-
7
- var _path = _interopRequireDefault(require("path"));
8
-
9
- var _support = require("@appium/support");
10
-
11
- var _drivers = require("../../lib/drivers");
12
-
13
- var _helpers = require("../helpers");
14
-
15
- var _cliHelpers = require("./cli-helpers");
16
-
17
- describe('CLI', function () {
18
- let appiumHome;
19
- let run;
20
- before(async function () {
21
- appiumHome = await _support.tempDir.openDir();
22
- const runner = (0, _cliHelpers.runAppium)(appiumHome);
23
-
24
- run = async (extCommand, args = [], raw = false, ext = 'driver') => await runner([ext, extCommand, ...args], {
25
- raw
26
- });
27
- });
28
- after(async function () {
29
- await _support.fs.rimraf(appiumHome);
30
- });
31
-
32
- async function clear() {
33
- await _support.fs.rimraf(appiumHome);
34
- await (0, _support.mkdirp)(appiumHome);
35
- }
36
-
37
- describe('Driver CLI', function () {
38
- const localFakeDriverPath = _path.default.join(_helpers.PROJECT_ROOT, 'packages', 'fake-driver');
39
-
40
- describe('list', function () {
41
- it('should list available drivers', async function () {
42
- const stdout = await run('list');
43
-
44
- for (const d of Object.keys(_drivers.KNOWN_DRIVERS)) {
45
- stdout.should.match(new RegExp(`${d}.+[not installed]`));
46
- }
47
- });
48
- it('should list available drivers in json format', async function () {
49
- const driverData = JSON.parse(await run('list', ['--json']));
50
-
51
- for (const d of Object.keys(_drivers.KNOWN_DRIVERS)) {
52
- driverData[d].should.eql({
53
- installed: false,
54
- pkgName: _drivers.KNOWN_DRIVERS[d]
55
- });
56
- }
57
- });
58
- it('should allow filtering by installed drivers', async function () {
59
- const out = await run('list', ['--installed', '--json']);
60
- JSON.parse(out).should.eql({});
61
- });
62
- it('should show updates for installed drivers with --updates', async function () {
63
- const penultimateFakeDriverVersionAsOfRightNow = '3.0.4';
64
- await clear();
65
- await run('install', [`@appium/fake-driver@${penultimateFakeDriverVersionAsOfRightNow}`, '--source', 'npm', '--json']);
66
- const {
67
- fake
68
- } = JSON.parse(await run('list', ['--updates', '--json']));
69
- _support.util.compareVersions(fake.updateVersion, '>', penultimateFakeDriverVersionAsOfRightNow).should.be.true;
70
- const stdout = await run('list', ['--updates']);
71
- stdout.should.match(new RegExp(`fake.+[${fake.updateVersion} available]`));
72
- });
73
- });
74
- describe('install', function () {
75
- it('should install a driver from the list of known drivers', async function () {
76
- await clear();
77
- const ret = JSON.parse(await run('install', ['uiautomator2', '--json']));
78
- ret.uiautomator2.pkgName.should.eql('appium-uiautomator2-driver');
79
- ret.uiautomator2.installType.should.eql('npm');
80
- ret.uiautomator2.installSpec.should.eql('uiautomator2');
81
- const list = JSON.parse(await run('list', ['--installed', '--json']));
82
- delete list.uiautomator2.installed;
83
- list.should.eql(ret);
84
- });
85
- it('should install a driver from npm', async function () {
86
- await clear();
87
- const ret = JSON.parse(await run('install', ['@appium/fake-driver', '--source', 'npm', '--json']));
88
- ret.fake.pkgName.should.eql('@appium/fake-driver');
89
- ret.fake.installType.should.eql('npm');
90
- ret.fake.installSpec.should.eql('@appium/fake-driver');
91
- const list = JSON.parse(await run('list', ['--installed', '--json']));
92
- delete list.fake.installed;
93
- list.should.eql(ret);
94
- });
95
- it('should install a driver from npm with a specific version/tag', async function () {
96
- const currentFakeDriverVersionAsOfRightNow = '3.0.5';
97
- await clear();
98
- const installSpec = `@appium/fake-driver@${currentFakeDriverVersionAsOfRightNow}`;
99
- const ret = JSON.parse(await run('install', [installSpec, '--source', 'npm', '--json']));
100
- ret.fake.pkgName.should.eql('@appium/fake-driver');
101
- ret.fake.installType.should.eql('npm');
102
- ret.fake.installSpec.should.eql(installSpec);
103
- const list = JSON.parse(await run('list', ['--installed', '--json']));
104
- delete list.fake.installed;
105
- list.should.eql(ret);
106
- });
107
- it('should install a driver from github', async function () {
108
- await clear();
109
- const ret = JSON.parse(await run('install', ['appium/appium-fake-driver', '--source', 'github', '--package', 'appium-fake-driver', '--json']));
110
- ret.fake.pkgName.should.eql('appium-fake-driver');
111
- ret.fake.installType.should.eql('github');
112
- ret.fake.installSpec.should.eql('appium/appium-fake-driver');
113
- const list = JSON.parse(await run('list', ['--installed', '--json']));
114
- delete list.fake.installed;
115
- list.should.eql(ret);
116
- });
117
- it('should install a driver from a local git repo', async function () {
118
- await clear();
119
- const ret = JSON.parse(await run('install', [localFakeDriverPath, '--source', 'git', '--package', '@appium/fake-driver', '--json']));
120
- ret.fake.pkgName.should.eql('@appium/fake-driver');
121
- ret.fake.installType.should.eql('git');
122
- ret.fake.installSpec.should.eql(localFakeDriverPath);
123
- const list = JSON.parse(await run('list', ['--installed', '--json']));
124
- delete list.fake.installed;
125
- list.should.eql(ret);
126
- });
127
- it('should install a driver from a remote git repo', async function () {
128
- await clear();
129
- const ret = JSON.parse(await run('install', ['git+https://github.com/appium/appium-fake-driver.git', '--source', 'git', '--package', 'appium-fake-driver', '--json']));
130
- ret.fake.pkgName.should.eql('appium-fake-driver');
131
- ret.fake.installType.should.eql('git');
132
- ret.fake.installSpec.should.eql('git+https://github.com/appium/appium-fake-driver');
133
- const list = JSON.parse(await run('list', ['--installed', '--json']));
134
- delete list.fake.installed;
135
- list.should.eql(ret);
136
- });
137
- it('should install a driver from a local npm module', async function () {
138
- await clear();
139
- const ret = JSON.parse(await run('install', [localFakeDriverPath, '--source', 'local', '--json']));
140
- ret.fake.pkgName.should.eql('@appium/fake-driver');
141
- ret.fake.installType.should.eql('local');
142
- ret.fake.installSpec.should.eql(localFakeDriverPath);
143
- const list = JSON.parse(await run('list', ['--installed', '--json']));
144
- delete list.fake.installed;
145
- list.should.eql(ret);
146
- });
147
- });
148
- describe('uninstall', function () {
149
- it('should uninstall a driver based on its driver name', async function () {
150
- await clear();
151
- const ret = JSON.parse(await run('install', ['@appium/fake-driver', '--source', 'npm', '--json']));
152
-
153
- const installPath = _path.default.resolve(appiumHome, ret.fake.installPath);
154
-
155
- await _support.fs.exists(installPath).should.eventually.be.true;
156
- let list = JSON.parse(await run('list', ['--installed', '--json']));
157
- list.fake.installed.should.be.true;
158
- const uninstall = JSON.parse(await run('uninstall', ['fake', '--json']));
159
- uninstall.should.not.have.key('fake');
160
- await _support.fs.exists(installPath).should.eventually.be.false;
161
- });
162
- });
163
- describe('run', function () {
164
- before(async function () {
165
- await clear();
166
- await run('install', [localFakeDriverPath, '--source', 'local', '--json']);
167
- });
168
- it('should run a valid driver, valid script, and result in success', async function () {
169
- const driverName = 'fake';
170
- const scriptName = 'fake-success';
171
- const out = JSON.parse(await run('run', [driverName, scriptName, '--json']));
172
- out.should.not.include.key('error');
173
- });
174
- it('should run a valid driver, valid error prone script, and return error in json', async function () {
175
- const driverName = 'fake';
176
- const out = JSON.parse(await run('run', [driverName, 'fake-error', '--json']));
177
- out.should.include.key('error');
178
- });
179
- it('should take a valid driver, invalid script, and throw an error', async function () {
180
- const driverName = 'fake';
181
- await chai.expect(run('run', [driverName, 'foo', '--json'])).to.eventually.be.rejectedWith(Error);
182
- });
183
- it('should take an invalid driver, invalid script, and throw an error', async function () {
184
- const driverName = 'foo';
185
- await chai.expect(run('run', [driverName, 'bar', '--json'])).to.eventually.be.rejectedWith(Error);
186
- });
187
- });
188
- });
189
- describe('Plugin CLI', function () {
190
- const fakePluginDir = _path.default.dirname(require.resolve('@appium/fake-plugin/package.json'));
191
-
192
- const ext = 'plugin';
193
- describe('run', function () {
194
- before(async function () {
195
- await clear();
196
- await run('install', [fakePluginDir, '--source', 'local', '--json'], false, ext);
197
- });
198
- it('should run a valid plugin, valid script, and result in success', async function () {
199
- const pluginName = 'fake';
200
- const scriptName = 'fake-success';
201
- const out = JSON.parse(await run('run', [pluginName, scriptName, '--json'], false, ext));
202
- out.should.not.include.key('error');
203
- });
204
- it('should run a valid plugin, valid error prone script, and return error in json', async function () {
205
- const pluginName = 'fake';
206
- const out = JSON.parse(await run('run', [pluginName, 'fake-error', '--json'], false, ext));
207
- out.should.include.key('error');
208
- });
209
- it('should take a valid plugin, invalid script, and throw an error', async function () {
210
- const pluginName = 'fake';
211
- await chai.expect(run('run', [pluginName, 'foo', '--json'], false, ext)).to.eventually.be.rejectedWith(Error);
212
- });
213
- it('should take an invalid plugin, invalid script, and throw an error', async function () {
214
- await chai.expect(run('run', ['foo', 'bar', '--json'], false, ext)).to.eventually.be.rejectedWith(Error);
215
- });
216
- });
217
- });
218
- });require('source-map-support').install();
219
-
220
-
221
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInRlc3QvY2xpL2NsaS1lMmUtc3BlY3MuanMiXSwibmFtZXMiOlsiZGVzY3JpYmUiLCJhcHBpdW1Ib21lIiwicnVuIiwiYmVmb3JlIiwidGVtcERpciIsIm9wZW5EaXIiLCJydW5uZXIiLCJleHRDb21tYW5kIiwiYXJncyIsInJhdyIsImV4dCIsImFmdGVyIiwiZnMiLCJyaW1yYWYiLCJjbGVhciIsImxvY2FsRmFrZURyaXZlclBhdGgiLCJwYXRoIiwiam9pbiIsIlBST0pFQ1RfUk9PVCIsIml0Iiwic3Rkb3V0IiwiZCIsIk9iamVjdCIsImtleXMiLCJLTk9XTl9EUklWRVJTIiwic2hvdWxkIiwibWF0Y2giLCJSZWdFeHAiLCJkcml2ZXJEYXRhIiwiSlNPTiIsInBhcnNlIiwiZXFsIiwiaW5zdGFsbGVkIiwicGtnTmFtZSIsIm91dCIsInBlbnVsdGltYXRlRmFrZURyaXZlclZlcnNpb25Bc09mUmlnaHROb3ciLCJmYWtlIiwidXRpbCIsImNvbXBhcmVWZXJzaW9ucyIsInVwZGF0ZVZlcnNpb24iLCJiZSIsInRydWUiLCJyZXQiLCJ1aWF1dG9tYXRvcjIiLCJpbnN0YWxsVHlwZSIsImluc3RhbGxTcGVjIiwibGlzdCIsImN1cnJlbnRGYWtlRHJpdmVyVmVyc2lvbkFzT2ZSaWdodE5vdyIsImluc3RhbGxQYXRoIiwicmVzb2x2ZSIsImV4aXN0cyIsImV2ZW50dWFsbHkiLCJ1bmluc3RhbGwiLCJub3QiLCJoYXZlIiwia2V5IiwiZmFsc2UiLCJkcml2ZXJOYW1lIiwic2NyaXB0TmFtZSIsImluY2x1ZGUiLCJjaGFpIiwiZXhwZWN0IiwidG8iLCJyZWplY3RlZFdpdGgiLCJFcnJvciIsImZha2VQbHVnaW5EaXIiLCJkaXJuYW1lIiwicmVxdWlyZSIsInBsdWdpbk5hbWUiXSwibWFwcGluZ3MiOiI7Ozs7OztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUVBQSxRQUFRLENBQUMsS0FBRCxFQUFRLFlBQVk7QUFJMUIsTUFBSUMsVUFBSjtBQUtBLE1BQUlDLEdBQUo7QUFFQUMsRUFBQUEsTUFBTSxDQUFDLGtCQUFrQjtBQUN2QkYsSUFBQUEsVUFBVSxHQUFHLE1BQU1HLGlCQUFRQyxPQUFSLEVBQW5CO0FBQ0EsVUFBTUMsTUFBTSxHQUFHLDJCQUFVTCxVQUFWLENBQWY7O0FBQ0FDLElBQUFBLEdBQUcsR0FBRyxPQUFPSyxVQUFQLEVBQW1CQyxJQUFJLEdBQUcsRUFBMUIsRUFBOEJDLEdBQUcsR0FBRyxLQUFwQyxFQUEyQ0MsR0FBRyxHQUFHLFFBQWpELEtBQThELE1BQU1KLE1BQU0sQ0FBQyxDQUFDSSxHQUFELEVBQU1ILFVBQU4sRUFBa0IsR0FBR0MsSUFBckIsQ0FBRCxFQUE2QjtBQUFDQyxNQUFBQTtBQUFELEtBQTdCLENBQWhGO0FBQ0QsR0FKSyxDQUFOO0FBTUFFLEVBQUFBLEtBQUssQ0FBQyxrQkFBa0I7QUFDdEIsVUFBTUMsWUFBR0MsTUFBSCxDQUFVWixVQUFWLENBQU47QUFDRCxHQUZJLENBQUw7O0FBSUEsaUJBQWVhLEtBQWYsR0FBd0I7QUFDdEIsVUFBTUYsWUFBR0MsTUFBSCxDQUFVWixVQUFWLENBQU47QUFDQSxVQUFNLHFCQUFPQSxVQUFQLENBQU47QUFDRDs7QUFFREQsRUFBQUEsUUFBUSxDQUFDLFlBQUQsRUFBZSxZQUFZO0FBQ2pDLFVBQU1lLG1CQUFtQixHQUFHQyxjQUFLQyxJQUFMLENBQVVDLHFCQUFWLEVBQXdCLFVBQXhCLEVBQW9DLGFBQXBDLENBQTVCOztBQUNBbEIsSUFBQUEsUUFBUSxDQUFDLE1BQUQsRUFBUyxZQUFZO0FBQzNCbUIsTUFBQUEsRUFBRSxDQUFDLCtCQUFELEVBQWtDLGtCQUFrQjtBQUNwRCxjQUFNQyxNQUFNLEdBQUcsTUFBTWxCLEdBQUcsQ0FBQyxNQUFELENBQXhCOztBQUNBLGFBQUssTUFBTW1CLENBQVgsSUFBZ0JDLE1BQU0sQ0FBQ0MsSUFBUCxDQUFZQyxzQkFBWixDQUFoQixFQUE0QztBQUMxQ0osVUFBQUEsTUFBTSxDQUFDSyxNQUFQLENBQWNDLEtBQWQsQ0FBb0IsSUFBSUMsTUFBSixDQUFZLEdBQUVOLENBQUUsbUJBQWhCLENBQXBCO0FBQ0Q7QUFDRixPQUxDLENBQUY7QUFNQUYsTUFBQUEsRUFBRSxDQUFDLDhDQUFELEVBQWlELGtCQUFrQjtBQUNuRSxjQUFNUyxVQUFVLEdBQUdDLElBQUksQ0FBQ0MsS0FBTCxDQUFXLE1BQU01QixHQUFHLENBQUMsTUFBRCxFQUFTLENBQUMsUUFBRCxDQUFULENBQXBCLENBQW5COztBQUNBLGFBQUssTUFBTW1CLENBQVgsSUFBZ0JDLE1BQU0sQ0FBQ0MsSUFBUCxDQUFZQyxzQkFBWixDQUFoQixFQUE0QztBQUMxQ0ksVUFBQUEsVUFBVSxDQUFDUCxDQUFELENBQVYsQ0FBY0ksTUFBZCxDQUFxQk0sR0FBckIsQ0FBeUI7QUFBQ0MsWUFBQUEsU0FBUyxFQUFFLEtBQVo7QUFBbUJDLFlBQUFBLE9BQU8sRUFBRVQsdUJBQWNILENBQWQ7QUFBNUIsV0FBekI7QUFDRDtBQUNGLE9BTEMsQ0FBRjtBQU1BRixNQUFBQSxFQUFFLENBQUMsNkNBQUQsRUFBZ0Qsa0JBQWtCO0FBQ2xFLGNBQU1lLEdBQUcsR0FBRyxNQUFNaEMsR0FBRyxDQUFDLE1BQUQsRUFBUyxDQUFDLGFBQUQsRUFBZ0IsUUFBaEIsQ0FBVCxDQUFyQjtBQUNBMkIsUUFBQUEsSUFBSSxDQUFDQyxLQUFMLENBQVdJLEdBQVgsRUFBZ0JULE1BQWhCLENBQXVCTSxHQUF2QixDQUEyQixFQUEzQjtBQUNELE9BSEMsQ0FBRjtBQUlBWixNQUFBQSxFQUFFLENBQUMsMERBQUQsRUFBNkQsa0JBQWtCO0FBQy9FLGNBQU1nQix3Q0FBd0MsR0FBRyxPQUFqRDtBQUNBLGNBQU1yQixLQUFLLEVBQVg7QUFDQSxjQUFNWixHQUFHLENBQUMsU0FBRCxFQUFZLENBQUUsdUJBQXNCaUMsd0NBQXlDLEVBQWpFLEVBQW9FLFVBQXBFLEVBQWdGLEtBQWhGLEVBQXVGLFFBQXZGLENBQVosQ0FBVDtBQUNBLGNBQU07QUFBQ0MsVUFBQUE7QUFBRCxZQUFTUCxJQUFJLENBQUNDLEtBQUwsQ0FBVyxNQUFNNUIsR0FBRyxDQUFDLE1BQUQsRUFBUyxDQUFDLFdBQUQsRUFBYyxRQUFkLENBQVQsQ0FBcEIsQ0FBZjtBQUNBbUMsc0JBQUtDLGVBQUwsQ0FBcUJGLElBQUksQ0FBQ0csYUFBMUIsRUFBeUMsR0FBekMsRUFBOENKLHdDQUE5QyxFQUF3RlYsTUFBeEYsQ0FBK0ZlLEVBQS9GLENBQWtHQyxJQUFsRztBQUNBLGNBQU1yQixNQUFNLEdBQUcsTUFBTWxCLEdBQUcsQ0FBQyxNQUFELEVBQVMsQ0FBQyxXQUFELENBQVQsQ0FBeEI7QUFDQWtCLFFBQUFBLE1BQU0sQ0FBQ0ssTUFBUCxDQUFjQyxLQUFkLENBQW9CLElBQUlDLE1BQUosQ0FBWSxVQUFTUyxJQUFJLENBQUNHLGFBQWMsYUFBeEMsQ0FBcEI7QUFDRCxPQVJDLENBQUY7QUFTRCxLQTFCTyxDQUFSO0FBNEJBdkMsSUFBQUEsUUFBUSxDQUFDLFNBQUQsRUFBWSxZQUFZO0FBQzlCbUIsTUFBQUEsRUFBRSxDQUFDLHdEQUFELEVBQTJELGtCQUFrQjtBQUM3RSxjQUFNTCxLQUFLLEVBQVg7QUFDQSxjQUFNNEIsR0FBRyxHQUFHYixJQUFJLENBQUNDLEtBQUwsQ0FBVyxNQUFNNUIsR0FBRyxDQUFDLFNBQUQsRUFBWSxDQUFDLGNBQUQsRUFBaUIsUUFBakIsQ0FBWixDQUFwQixDQUFaO0FBQ0F3QyxRQUFBQSxHQUFHLENBQUNDLFlBQUosQ0FBaUJWLE9BQWpCLENBQXlCUixNQUF6QixDQUFnQ00sR0FBaEMsQ0FBb0MsNEJBQXBDO0FBQ0FXLFFBQUFBLEdBQUcsQ0FBQ0MsWUFBSixDQUFpQkMsV0FBakIsQ0FBNkJuQixNQUE3QixDQUFvQ00sR0FBcEMsQ0FBd0MsS0FBeEM7QUFDQVcsUUFBQUEsR0FBRyxDQUFDQyxZQUFKLENBQWlCRSxXQUFqQixDQUE2QnBCLE1BQTdCLENBQW9DTSxHQUFwQyxDQUF3QyxjQUF4QztBQUNBLGNBQU1lLElBQUksR0FBR2pCLElBQUksQ0FBQ0MsS0FBTCxDQUFXLE1BQU01QixHQUFHLENBQUMsTUFBRCxFQUFTLENBQUMsYUFBRCxFQUFnQixRQUFoQixDQUFULENBQXBCLENBQWI7QUFDQSxlQUFPNEMsSUFBSSxDQUFDSCxZQUFMLENBQWtCWCxTQUF6QjtBQUNBYyxRQUFBQSxJQUFJLENBQUNyQixNQUFMLENBQVlNLEdBQVosQ0FBZ0JXLEdBQWhCO0FBQ0QsT0FUQyxDQUFGO0FBVUF2QixNQUFBQSxFQUFFLENBQUMsa0NBQUQsRUFBcUMsa0JBQWtCO0FBQ3ZELGNBQU1MLEtBQUssRUFBWDtBQUNBLGNBQU00QixHQUFHLEdBQUdiLElBQUksQ0FBQ0MsS0FBTCxDQUFXLE1BQU01QixHQUFHLENBQUMsU0FBRCxFQUFZLENBQUMscUJBQUQsRUFBd0IsVUFBeEIsRUFBb0MsS0FBcEMsRUFBMkMsUUFBM0MsQ0FBWixDQUFwQixDQUFaO0FBQ0F3QyxRQUFBQSxHQUFHLENBQUNOLElBQUosQ0FBU0gsT0FBVCxDQUFpQlIsTUFBakIsQ0FBd0JNLEdBQXhCLENBQTRCLHFCQUE1QjtBQUNBVyxRQUFBQSxHQUFHLENBQUNOLElBQUosQ0FBU1EsV0FBVCxDQUFxQm5CLE1BQXJCLENBQTRCTSxHQUE1QixDQUFnQyxLQUFoQztBQUNBVyxRQUFBQSxHQUFHLENBQUNOLElBQUosQ0FBU1MsV0FBVCxDQUFxQnBCLE1BQXJCLENBQTRCTSxHQUE1QixDQUFnQyxxQkFBaEM7QUFDQSxjQUFNZSxJQUFJLEdBQUdqQixJQUFJLENBQUNDLEtBQUwsQ0FBVyxNQUFNNUIsR0FBRyxDQUFDLE1BQUQsRUFBUyxDQUFDLGFBQUQsRUFBZ0IsUUFBaEIsQ0FBVCxDQUFwQixDQUFiO0FBQ0EsZUFBTzRDLElBQUksQ0FBQ1YsSUFBTCxDQUFVSixTQUFqQjtBQUNBYyxRQUFBQSxJQUFJLENBQUNyQixNQUFMLENBQVlNLEdBQVosQ0FBZ0JXLEdBQWhCO0FBQ0QsT0FUQyxDQUFGO0FBVUF2QixNQUFBQSxFQUFFLENBQUMsOERBQUQsRUFBaUUsa0JBQWtCO0FBQ25GLGNBQU00QixvQ0FBb0MsR0FBRyxPQUE3QztBQUNBLGNBQU1qQyxLQUFLLEVBQVg7QUFDQSxjQUFNK0IsV0FBVyxHQUFJLHVCQUFzQkUsb0NBQXFDLEVBQWhGO0FBQ0EsY0FBTUwsR0FBRyxHQUFHYixJQUFJLENBQUNDLEtBQUwsQ0FBVyxNQUFNNUIsR0FBRyxDQUFDLFNBQUQsRUFBWSxDQUFDMkMsV0FBRCxFQUFjLFVBQWQsRUFBMEIsS0FBMUIsRUFBaUMsUUFBakMsQ0FBWixDQUFwQixDQUFaO0FBQ0FILFFBQUFBLEdBQUcsQ0FBQ04sSUFBSixDQUFTSCxPQUFULENBQWlCUixNQUFqQixDQUF3Qk0sR0FBeEIsQ0FBNEIscUJBQTVCO0FBQ0FXLFFBQUFBLEdBQUcsQ0FBQ04sSUFBSixDQUFTUSxXQUFULENBQXFCbkIsTUFBckIsQ0FBNEJNLEdBQTVCLENBQWdDLEtBQWhDO0FBQ0FXLFFBQUFBLEdBQUcsQ0FBQ04sSUFBSixDQUFTUyxXQUFULENBQXFCcEIsTUFBckIsQ0FBNEJNLEdBQTVCLENBQWdDYyxXQUFoQztBQUNBLGNBQU1DLElBQUksR0FBR2pCLElBQUksQ0FBQ0MsS0FBTCxDQUFXLE1BQU01QixHQUFHLENBQUMsTUFBRCxFQUFTLENBQUMsYUFBRCxFQUFnQixRQUFoQixDQUFULENBQXBCLENBQWI7QUFDQSxlQUFPNEMsSUFBSSxDQUFDVixJQUFMLENBQVVKLFNBQWpCO0FBQ0FjLFFBQUFBLElBQUksQ0FBQ3JCLE1BQUwsQ0FBWU0sR0FBWixDQUFnQlcsR0FBaEI7QUFDRCxPQVhDLENBQUY7QUFZQXZCLE1BQUFBLEVBQUUsQ0FBQyxxQ0FBRCxFQUF3QyxrQkFBa0I7QUFDMUQsY0FBTUwsS0FBSyxFQUFYO0FBQ0EsY0FBTTRCLEdBQUcsR0FBR2IsSUFBSSxDQUFDQyxLQUFMLENBQVcsTUFBTTVCLEdBQUcsQ0FBQyxTQUFELEVBQVksQ0FBQywyQkFBRCxFQUE4QixVQUE5QixFQUMxQyxRQUQwQyxFQUNoQyxXQURnQyxFQUNuQixvQkFEbUIsRUFDRyxRQURILENBQVosQ0FBcEIsQ0FBWjtBQUVBd0MsUUFBQUEsR0FBRyxDQUFDTixJQUFKLENBQVNILE9BQVQsQ0FBaUJSLE1BQWpCLENBQXdCTSxHQUF4QixDQUE0QixvQkFBNUI7QUFDQVcsUUFBQUEsR0FBRyxDQUFDTixJQUFKLENBQVNRLFdBQVQsQ0FBcUJuQixNQUFyQixDQUE0Qk0sR0FBNUIsQ0FBZ0MsUUFBaEM7QUFDQVcsUUFBQUEsR0FBRyxDQUFDTixJQUFKLENBQVNTLFdBQVQsQ0FBcUJwQixNQUFyQixDQUE0Qk0sR0FBNUIsQ0FBZ0MsMkJBQWhDO0FBQ0EsY0FBTWUsSUFBSSxHQUFHakIsSUFBSSxDQUFDQyxLQUFMLENBQVcsTUFBTTVCLEdBQUcsQ0FBQyxNQUFELEVBQVMsQ0FBQyxhQUFELEVBQWdCLFFBQWhCLENBQVQsQ0FBcEIsQ0FBYjtBQUNBLGVBQU80QyxJQUFJLENBQUNWLElBQUwsQ0FBVUosU0FBakI7QUFDQWMsUUFBQUEsSUFBSSxDQUFDckIsTUFBTCxDQUFZTSxHQUFaLENBQWdCVyxHQUFoQjtBQUNELE9BVkMsQ0FBRjtBQVdBdkIsTUFBQUEsRUFBRSxDQUFDLCtDQUFELEVBQWtELGtCQUFrQjtBQUNwRSxjQUFNTCxLQUFLLEVBQVg7QUFDQSxjQUFNNEIsR0FBRyxHQUFHYixJQUFJLENBQUNDLEtBQUwsQ0FBVyxNQUFNNUIsR0FBRyxDQUFDLFNBQUQsRUFBWSxDQUFDYSxtQkFBRCxFQUMxQyxVQUQwQyxFQUM5QixLQUQ4QixFQUN2QixXQUR1QixFQUNWLHFCQURVLEVBQ2EsUUFEYixDQUFaLENBQXBCLENBQVo7QUFFQTJCLFFBQUFBLEdBQUcsQ0FBQ04sSUFBSixDQUFTSCxPQUFULENBQWlCUixNQUFqQixDQUF3Qk0sR0FBeEIsQ0FBNEIscUJBQTVCO0FBQ0FXLFFBQUFBLEdBQUcsQ0FBQ04sSUFBSixDQUFTUSxXQUFULENBQXFCbkIsTUFBckIsQ0FBNEJNLEdBQTVCLENBQWdDLEtBQWhDO0FBQ0FXLFFBQUFBLEdBQUcsQ0FBQ04sSUFBSixDQUFTUyxXQUFULENBQXFCcEIsTUFBckIsQ0FBNEJNLEdBQTVCLENBQWdDaEIsbUJBQWhDO0FBQ0EsY0FBTStCLElBQUksR0FBR2pCLElBQUksQ0FBQ0MsS0FBTCxDQUFXLE1BQU01QixHQUFHLENBQUMsTUFBRCxFQUFTLENBQUMsYUFBRCxFQUFnQixRQUFoQixDQUFULENBQXBCLENBQWI7QUFDQSxlQUFPNEMsSUFBSSxDQUFDVixJQUFMLENBQVVKLFNBQWpCO0FBQ0FjLFFBQUFBLElBQUksQ0FBQ3JCLE1BQUwsQ0FBWU0sR0FBWixDQUFnQlcsR0FBaEI7QUFDRCxPQVZDLENBQUY7QUFXQXZCLE1BQUFBLEVBQUUsQ0FBQyxnREFBRCxFQUFtRCxrQkFBa0I7QUFDckUsY0FBTUwsS0FBSyxFQUFYO0FBQ0EsY0FBTTRCLEdBQUcsR0FBR2IsSUFBSSxDQUFDQyxLQUFMLENBQVcsTUFBTTVCLEdBQUcsQ0FBQyxTQUFELEVBQVksQ0FBQyxzREFBRCxFQUMxQyxVQUQwQyxFQUM5QixLQUQ4QixFQUN2QixXQUR1QixFQUNWLG9CQURVLEVBQ1ksUUFEWixDQUFaLENBQXBCLENBQVo7QUFFQXdDLFFBQUFBLEdBQUcsQ0FBQ04sSUFBSixDQUFTSCxPQUFULENBQWlCUixNQUFqQixDQUF3Qk0sR0FBeEIsQ0FBNEIsb0JBQTVCO0FBQ0FXLFFBQUFBLEdBQUcsQ0FBQ04sSUFBSixDQUFTUSxXQUFULENBQXFCbkIsTUFBckIsQ0FBNEJNLEdBQTVCLENBQWdDLEtBQWhDO0FBQ0FXLFFBQUFBLEdBQUcsQ0FBQ04sSUFBSixDQUFTUyxXQUFULENBQXFCcEIsTUFBckIsQ0FBNEJNLEdBQTVCLENBQWdDLGtEQUFoQztBQUNBLGNBQU1lLElBQUksR0FBR2pCLElBQUksQ0FBQ0MsS0FBTCxDQUFXLE1BQU01QixHQUFHLENBQUMsTUFBRCxFQUFTLENBQUMsYUFBRCxFQUFnQixRQUFoQixDQUFULENBQXBCLENBQWI7QUFDQSxlQUFPNEMsSUFBSSxDQUFDVixJQUFMLENBQVVKLFNBQWpCO0FBQ0FjLFFBQUFBLElBQUksQ0FBQ3JCLE1BQUwsQ0FBWU0sR0FBWixDQUFnQlcsR0FBaEI7QUFDRCxPQVZDLENBQUY7QUFXQXZCLE1BQUFBLEVBQUUsQ0FBQyxpREFBRCxFQUFvRCxrQkFBa0I7QUFDdEUsY0FBTUwsS0FBSyxFQUFYO0FBR0EsY0FBTTRCLEdBQUcsR0FBR2IsSUFBSSxDQUFDQyxLQUFMLENBQVcsTUFBTTVCLEdBQUcsQ0FBQyxTQUFELEVBQVksQ0FBQ2EsbUJBQUQsRUFBc0IsVUFBdEIsRUFBa0MsT0FBbEMsRUFBMkMsUUFBM0MsQ0FBWixDQUFwQixDQUFaO0FBQ0EyQixRQUFBQSxHQUFHLENBQUNOLElBQUosQ0FBU0gsT0FBVCxDQUFpQlIsTUFBakIsQ0FBd0JNLEdBQXhCLENBQTRCLHFCQUE1QjtBQUNBVyxRQUFBQSxHQUFHLENBQUNOLElBQUosQ0FBU1EsV0FBVCxDQUFxQm5CLE1BQXJCLENBQTRCTSxHQUE1QixDQUFnQyxPQUFoQztBQUNBVyxRQUFBQSxHQUFHLENBQUNOLElBQUosQ0FBU1MsV0FBVCxDQUFxQnBCLE1BQXJCLENBQTRCTSxHQUE1QixDQUFnQ2hCLG1CQUFoQztBQUNBLGNBQU0rQixJQUFJLEdBQUdqQixJQUFJLENBQUNDLEtBQUwsQ0FBVyxNQUFNNUIsR0FBRyxDQUFDLE1BQUQsRUFBUyxDQUFDLGFBQUQsRUFBZ0IsUUFBaEIsQ0FBVCxDQUFwQixDQUFiO0FBQ0EsZUFBTzRDLElBQUksQ0FBQ1YsSUFBTCxDQUFVSixTQUFqQjtBQUNBYyxRQUFBQSxJQUFJLENBQUNyQixNQUFMLENBQVlNLEdBQVosQ0FBZ0JXLEdBQWhCO0FBQ0QsT0FYQyxDQUFGO0FBWUQsS0E5RU8sQ0FBUjtBQWdGQTFDLElBQUFBLFFBQVEsQ0FBQyxXQUFELEVBQWMsWUFBWTtBQUNoQ21CLE1BQUFBLEVBQUUsQ0FBQyxvREFBRCxFQUF1RCxrQkFBa0I7QUFDekUsY0FBTUwsS0FBSyxFQUFYO0FBQ0EsY0FBTTRCLEdBQUcsR0FBR2IsSUFBSSxDQUFDQyxLQUFMLENBQVcsTUFBTTVCLEdBQUcsQ0FBQyxTQUFELEVBQVksQ0FBQyxxQkFBRCxFQUF3QixVQUF4QixFQUFvQyxLQUFwQyxFQUEyQyxRQUEzQyxDQUFaLENBQXBCLENBQVo7O0FBQ0EsY0FBTThDLFdBQVcsR0FBR2hDLGNBQUtpQyxPQUFMLENBQWFoRCxVQUFiLEVBQXlCeUMsR0FBRyxDQUFDTixJQUFKLENBQVNZLFdBQWxDLENBQXBCOztBQUNBLGNBQU1wQyxZQUFHc0MsTUFBSCxDQUFVRixXQUFWLEVBQXVCdkIsTUFBdkIsQ0FBOEIwQixVQUE5QixDQUF5Q1gsRUFBekMsQ0FBNENDLElBQWxEO0FBQ0EsWUFBSUssSUFBSSxHQUFHakIsSUFBSSxDQUFDQyxLQUFMLENBQVcsTUFBTTVCLEdBQUcsQ0FBQyxNQUFELEVBQVMsQ0FBQyxhQUFELEVBQWdCLFFBQWhCLENBQVQsQ0FBcEIsQ0FBWDtBQUNBNEMsUUFBQUEsSUFBSSxDQUFDVixJQUFMLENBQVVKLFNBQVYsQ0FBb0JQLE1BQXBCLENBQTJCZSxFQUEzQixDQUE4QkMsSUFBOUI7QUFDQSxjQUFNVyxTQUFTLEdBQUd2QixJQUFJLENBQUNDLEtBQUwsQ0FBVyxNQUFNNUIsR0FBRyxDQUFDLFdBQUQsRUFBYyxDQUFDLE1BQUQsRUFBUyxRQUFULENBQWQsQ0FBcEIsQ0FBbEI7QUFDQWtELFFBQUFBLFNBQVMsQ0FBQzNCLE1BQVYsQ0FBaUI0QixHQUFqQixDQUFxQkMsSUFBckIsQ0FBMEJDLEdBQTFCLENBQThCLE1BQTlCO0FBQ0EsY0FBTTNDLFlBQUdzQyxNQUFILENBQVVGLFdBQVYsRUFBdUJ2QixNQUF2QixDQUE4QjBCLFVBQTlCLENBQXlDWCxFQUF6QyxDQUE0Q2dCLEtBQWxEO0FBQ0QsT0FWQyxDQUFGO0FBV0QsS0FaTyxDQUFSO0FBY0F4RCxJQUFBQSxRQUFRLENBQUMsS0FBRCxFQUFRLFlBQVk7QUFDMUJHLE1BQUFBLE1BQU0sQ0FBQyxrQkFBa0I7QUFDdkIsY0FBTVcsS0FBSyxFQUFYO0FBQ0EsY0FBTVosR0FBRyxDQUFDLFNBQUQsRUFBWSxDQUFDYSxtQkFBRCxFQUFzQixVQUF0QixFQUFrQyxPQUFsQyxFQUEyQyxRQUEzQyxDQUFaLENBQVQ7QUFDRCxPQUhLLENBQU47QUFJQUksTUFBQUEsRUFBRSxDQUFDLGdFQUFELEVBQW1FLGtCQUFrQjtBQUNyRixjQUFNc0MsVUFBVSxHQUFHLE1BQW5CO0FBQ0EsY0FBTUMsVUFBVSxHQUFHLGNBQW5CO0FBQ0EsY0FBTXhCLEdBQUcsR0FBR0wsSUFBSSxDQUFDQyxLQUFMLENBQVcsTUFBTTVCLEdBQUcsQ0FBQyxLQUFELEVBQVEsQ0FBQ3VELFVBQUQsRUFBYUMsVUFBYixFQUF5QixRQUF6QixDQUFSLENBQXBCLENBQVo7QUFDQXhCLFFBQUFBLEdBQUcsQ0FBQ1QsTUFBSixDQUFXNEIsR0FBWCxDQUFlTSxPQUFmLENBQXVCSixHQUF2QixDQUEyQixPQUEzQjtBQUNELE9BTEMsQ0FBRjtBQU1BcEMsTUFBQUEsRUFBRSxDQUFDLCtFQUFELEVBQWtGLGtCQUFrQjtBQUNwRyxjQUFNc0MsVUFBVSxHQUFHLE1BQW5CO0FBQ0EsY0FBTXZCLEdBQUcsR0FBR0wsSUFBSSxDQUFDQyxLQUFMLENBQVcsTUFBTTVCLEdBQUcsQ0FBQyxLQUFELEVBQVEsQ0FBQ3VELFVBQUQsRUFBYSxZQUFiLEVBQTJCLFFBQTNCLENBQVIsQ0FBcEIsQ0FBWjtBQUNBdkIsUUFBQUEsR0FBRyxDQUFDVCxNQUFKLENBQVdrQyxPQUFYLENBQW1CSixHQUFuQixDQUF1QixPQUF2QjtBQUNELE9BSkMsQ0FBRjtBQUtBcEMsTUFBQUEsRUFBRSxDQUFDLGdFQUFELEVBQW1FLGtCQUFrQjtBQUNyRixjQUFNc0MsVUFBVSxHQUFHLE1BQW5CO0FBQ0EsY0FBTUcsSUFBSSxDQUFDQyxNQUFMLENBQVkzRCxHQUFHLENBQUMsS0FBRCxFQUFRLENBQUN1RCxVQUFELEVBQWEsS0FBYixFQUFvQixRQUFwQixDQUFSLENBQWYsRUFBdURLLEVBQXZELENBQTBEWCxVQUExRCxDQUFxRVgsRUFBckUsQ0FBd0V1QixZQUF4RSxDQUFxRkMsS0FBckYsQ0FBTjtBQUNELE9BSEMsQ0FBRjtBQUlBN0MsTUFBQUEsRUFBRSxDQUFDLG1FQUFELEVBQXNFLGtCQUFrQjtBQUN4RixjQUFNc0MsVUFBVSxHQUFHLEtBQW5CO0FBQ0EsY0FBTUcsSUFBSSxDQUFDQyxNQUFMLENBQVkzRCxHQUFHLENBQUMsS0FBRCxFQUFRLENBQUN1RCxVQUFELEVBQWEsS0FBYixFQUFvQixRQUFwQixDQUFSLENBQWYsRUFBdURLLEVBQXZELENBQTBEWCxVQUExRCxDQUFxRVgsRUFBckUsQ0FBd0V1QixZQUF4RSxDQUFxRkMsS0FBckYsQ0FBTjtBQUNELE9BSEMsQ0FBRjtBQUlELEtBeEJPLENBQVI7QUF5QkQsR0FySk8sQ0FBUjtBQXVKQWhFLEVBQUFBLFFBQVEsQ0FBQyxZQUFELEVBQWUsWUFBWTtBQUNqQyxVQUFNaUUsYUFBYSxHQUFHakQsY0FBS2tELE9BQUwsQ0FBYUMsT0FBTyxDQUFDbEIsT0FBUixDQUFnQixrQ0FBaEIsQ0FBYixDQUF0Qjs7QUFDQSxVQUFNdkMsR0FBRyxHQUFHLFFBQVo7QUFDQVYsSUFBQUEsUUFBUSxDQUFDLEtBQUQsRUFBUSxZQUFZO0FBQzFCRyxNQUFBQSxNQUFNLENBQUMsa0JBQWtCO0FBQ3ZCLGNBQU1XLEtBQUssRUFBWDtBQUNBLGNBQU1aLEdBQUcsQ0FBQyxTQUFELEVBQVksQ0FBQytELGFBQUQsRUFBZ0IsVUFBaEIsRUFBNEIsT0FBNUIsRUFBcUMsUUFBckMsQ0FBWixFQUE0RCxLQUE1RCxFQUFtRXZELEdBQW5FLENBQVQ7QUFDRCxPQUhLLENBQU47QUFJQVMsTUFBQUEsRUFBRSxDQUFDLGdFQUFELEVBQW1FLGtCQUFrQjtBQUNyRixjQUFNaUQsVUFBVSxHQUFHLE1BQW5CO0FBQ0EsY0FBTVYsVUFBVSxHQUFHLGNBQW5CO0FBQ0EsY0FBTXhCLEdBQUcsR0FBR0wsSUFBSSxDQUFDQyxLQUFMLENBQVcsTUFBTTVCLEdBQUcsQ0FBQyxLQUFELEVBQVEsQ0FBQ2tFLFVBQUQsRUFBYVYsVUFBYixFQUF5QixRQUF6QixDQUFSLEVBQTRDLEtBQTVDLEVBQW1EaEQsR0FBbkQsQ0FBcEIsQ0FBWjtBQUNBd0IsUUFBQUEsR0FBRyxDQUFDVCxNQUFKLENBQVc0QixHQUFYLENBQWVNLE9BQWYsQ0FBdUJKLEdBQXZCLENBQTJCLE9BQTNCO0FBQ0QsT0FMQyxDQUFGO0FBTUFwQyxNQUFBQSxFQUFFLENBQUMsK0VBQUQsRUFBa0Ysa0JBQWtCO0FBQ3BHLGNBQU1pRCxVQUFVLEdBQUcsTUFBbkI7QUFDQSxjQUFNbEMsR0FBRyxHQUFHTCxJQUFJLENBQUNDLEtBQUwsQ0FBVyxNQUFNNUIsR0FBRyxDQUFDLEtBQUQsRUFBUSxDQUFDa0UsVUFBRCxFQUFhLFlBQWIsRUFBMkIsUUFBM0IsQ0FBUixFQUE4QyxLQUE5QyxFQUFxRDFELEdBQXJELENBQXBCLENBQVo7QUFDQXdCLFFBQUFBLEdBQUcsQ0FBQ1QsTUFBSixDQUFXa0MsT0FBWCxDQUFtQkosR0FBbkIsQ0FBdUIsT0FBdkI7QUFDRCxPQUpDLENBQUY7QUFLQXBDLE1BQUFBLEVBQUUsQ0FBQyxnRUFBRCxFQUFtRSxrQkFBa0I7QUFDckYsY0FBTWlELFVBQVUsR0FBRyxNQUFuQjtBQUNBLGNBQU1SLElBQUksQ0FBQ0MsTUFBTCxDQUFZM0QsR0FBRyxDQUFDLEtBQUQsRUFBUSxDQUFDa0UsVUFBRCxFQUFhLEtBQWIsRUFBb0IsUUFBcEIsQ0FBUixFQUF1QyxLQUF2QyxFQUE4QzFELEdBQTlDLENBQWYsRUFBbUVvRCxFQUFuRSxDQUFzRVgsVUFBdEUsQ0FBaUZYLEVBQWpGLENBQW9GdUIsWUFBcEYsQ0FBaUdDLEtBQWpHLENBQU47QUFDRCxPQUhDLENBQUY7QUFJQTdDLE1BQUFBLEVBQUUsQ0FBQyxtRUFBRCxFQUFzRSxrQkFBa0I7QUFDeEYsY0FBTXlDLElBQUksQ0FBQ0MsTUFBTCxDQUFZM0QsR0FBRyxDQUFDLEtBQUQsRUFBUSxDQUFDLEtBQUQsRUFBUSxLQUFSLEVBQWUsUUFBZixDQUFSLEVBQWtDLEtBQWxDLEVBQXlDUSxHQUF6QyxDQUFmLEVBQThEb0QsRUFBOUQsQ0FBaUVYLFVBQWpFLENBQTRFWCxFQUE1RSxDQUErRXVCLFlBQS9FLENBQTRGQyxLQUE1RixDQUFOO0FBQ0QsT0FGQyxDQUFGO0FBR0QsS0F2Qk8sQ0FBUjtBQXdCRCxHQTNCTyxDQUFSO0FBNEJELENBN01PLENBQVIiLCJzb3VyY2VzQ29udGVudCI6WyJcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IHsgdGVtcERpciwgZnMsIG1rZGlycCwgdXRpbCB9IGZyb20gJ0BhcHBpdW0vc3VwcG9ydCc7XG5pbXBvcnQgeyBLTk9XTl9EUklWRVJTIH0gZnJvbSAnLi4vLi4vbGliL2RyaXZlcnMnO1xuaW1wb3J0IHsgUFJPSkVDVF9ST09UIH0gZnJvbSAnLi4vaGVscGVycyc7XG5pbXBvcnQgeyBydW5BcHBpdW0gfSBmcm9tICcuL2NsaS1oZWxwZXJzJztcblxuZGVzY3JpYmUoJ0NMSScsIGZ1bmN0aW9uICgpIHtcbiAgLyoqXG4gICAqIEB0eXBlIHtzdHJpbmd9XG4gICAqL1xuICBsZXQgYXBwaXVtSG9tZTtcblxuICAvKipcbiAgICogQHR5cGUgeyhleHRDb21tYW5kOiBzdHJpbmcsIGFyZ3M/OiBzdHJpbmdbXSwgcmF3PzogYm9vbGVhbiwgZXh0PzogRXh0ZW5zaW9uVHlwZSkgPT4gUHJvbWlzZTxzdHJpbmd8aW1wb3J0KCcuL2NsaS1oZWxwZXJzJykuVGVlblByb2Nlc3NFeGVjUmVzdWx0Pn1cbiAgICovXG4gIGxldCBydW47XG5cbiAgYmVmb3JlKGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBhcHBpdW1Ib21lID0gYXdhaXQgdGVtcERpci5vcGVuRGlyKCk7XG4gICAgY29uc3QgcnVubmVyID0gcnVuQXBwaXVtKGFwcGl1bUhvbWUpO1xuICAgIHJ1biA9IGFzeW5jIChleHRDb21tYW5kLCBhcmdzID0gW10sIHJhdyA9IGZhbHNlLCBleHQgPSAnZHJpdmVyJykgPT4gYXdhaXQgcnVubmVyKFtleHQsIGV4dENvbW1hbmQsIC4uLmFyZ3NdLCB7cmF3fSk7XG4gIH0pO1xuXG4gIGFmdGVyKGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBhd2FpdCBmcy5yaW1yYWYoYXBwaXVtSG9tZSk7XG4gIH0pO1xuXG4gIGFzeW5jIGZ1bmN0aW9uIGNsZWFyICgpIHtcbiAgICBhd2FpdCBmcy5yaW1yYWYoYXBwaXVtSG9tZSk7XG4gICAgYXdhaXQgbWtkaXJwKGFwcGl1bUhvbWUpO1xuICB9XG5cbiAgZGVzY3JpYmUoJ0RyaXZlciBDTEknLCBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgbG9jYWxGYWtlRHJpdmVyUGF0aCA9IHBhdGguam9pbihQUk9KRUNUX1JPT1QsICdwYWNrYWdlcycsICdmYWtlLWRyaXZlcicpO1xuICAgIGRlc2NyaWJlKCdsaXN0JywgZnVuY3Rpb24gKCkge1xuICAgICAgaXQoJ3Nob3VsZCBsaXN0IGF2YWlsYWJsZSBkcml2ZXJzJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCBzdGRvdXQgPSBhd2FpdCBydW4oJ2xpc3QnKTtcbiAgICAgICAgZm9yIChjb25zdCBkIG9mIE9iamVjdC5rZXlzKEtOT1dOX0RSSVZFUlMpKSB7XG4gICAgICAgICAgc3Rkb3V0LnNob3VsZC5tYXRjaChuZXcgUmVnRXhwKGAke2R9Litbbm90IGluc3RhbGxlZF1gKSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgaXQoJ3Nob3VsZCBsaXN0IGF2YWlsYWJsZSBkcml2ZXJzIGluIGpzb24gZm9ybWF0JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCBkcml2ZXJEYXRhID0gSlNPTi5wYXJzZShhd2FpdCBydW4oJ2xpc3QnLCBbJy0tanNvbiddKSk7XG4gICAgICAgIGZvciAoY29uc3QgZCBvZiBPYmplY3Qua2V5cyhLTk9XTl9EUklWRVJTKSkge1xuICAgICAgICAgIGRyaXZlckRhdGFbZF0uc2hvdWxkLmVxbCh7aW5zdGFsbGVkOiBmYWxzZSwgcGtnTmFtZTogS05PV05fRFJJVkVSU1tkXX0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGl0KCdzaG91bGQgYWxsb3cgZmlsdGVyaW5nIGJ5IGluc3RhbGxlZCBkcml2ZXJzJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCBvdXQgPSBhd2FpdCBydW4oJ2xpc3QnLCBbJy0taW5zdGFsbGVkJywgJy0tanNvbiddKTtcbiAgICAgICAgSlNPTi5wYXJzZShvdXQpLnNob3VsZC5lcWwoe30pO1xuICAgICAgfSk7XG4gICAgICBpdCgnc2hvdWxkIHNob3cgdXBkYXRlcyBmb3IgaW5zdGFsbGVkIGRyaXZlcnMgd2l0aCAtLXVwZGF0ZXMnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IHBlbnVsdGltYXRlRmFrZURyaXZlclZlcnNpb25Bc09mUmlnaHROb3cgPSAnMy4wLjQnO1xuICAgICAgICBhd2FpdCBjbGVhcigpO1xuICAgICAgICBhd2FpdCBydW4oJ2luc3RhbGwnLCBbYEBhcHBpdW0vZmFrZS1kcml2ZXJAJHtwZW51bHRpbWF0ZUZha2VEcml2ZXJWZXJzaW9uQXNPZlJpZ2h0Tm93fWAsICctLXNvdXJjZScsICducG0nLCAnLS1qc29uJ10pO1xuICAgICAgICBjb25zdCB7ZmFrZX0gPSBKU09OLnBhcnNlKGF3YWl0IHJ1bignbGlzdCcsIFsnLS11cGRhdGVzJywgJy0tanNvbiddKSk7XG4gICAgICAgIHV0aWwuY29tcGFyZVZlcnNpb25zKGZha2UudXBkYXRlVmVyc2lvbiwgJz4nLCBwZW51bHRpbWF0ZUZha2VEcml2ZXJWZXJzaW9uQXNPZlJpZ2h0Tm93KS5zaG91bGQuYmUudHJ1ZTtcbiAgICAgICAgY29uc3Qgc3Rkb3V0ID0gYXdhaXQgcnVuKCdsaXN0JywgWyctLXVwZGF0ZXMnXSk7XG4gICAgICAgIHN0ZG91dC5zaG91bGQubWF0Y2gobmV3IFJlZ0V4cChgZmFrZS4rWyR7ZmFrZS51cGRhdGVWZXJzaW9ufSBhdmFpbGFibGVdYCkpO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnaW5zdGFsbCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGl0KCdzaG91bGQgaW5zdGFsbCBhIGRyaXZlciBmcm9tIHRoZSBsaXN0IG9mIGtub3duIGRyaXZlcnMnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGF3YWl0IGNsZWFyKCk7XG4gICAgICAgIGNvbnN0IHJldCA9IEpTT04ucGFyc2UoYXdhaXQgcnVuKCdpbnN0YWxsJywgWyd1aWF1dG9tYXRvcjInLCAnLS1qc29uJ10pKTtcbiAgICAgICAgcmV0LnVpYXV0b21hdG9yMi5wa2dOYW1lLnNob3VsZC5lcWwoJ2FwcGl1bS11aWF1dG9tYXRvcjItZHJpdmVyJyk7XG4gICAgICAgIHJldC51aWF1dG9tYXRvcjIuaW5zdGFsbFR5cGUuc2hvdWxkLmVxbCgnbnBtJyk7XG4gICAgICAgIHJldC51aWF1dG9tYXRvcjIuaW5zdGFsbFNwZWMuc2hvdWxkLmVxbCgndWlhdXRvbWF0b3IyJyk7XG4gICAgICAgIGNvbnN0IGxpc3QgPSBKU09OLnBhcnNlKGF3YWl0IHJ1bignbGlzdCcsIFsnLS1pbnN0YWxsZWQnLCAnLS1qc29uJ10pKTtcbiAgICAgICAgZGVsZXRlIGxpc3QudWlhdXRvbWF0b3IyLmluc3RhbGxlZDtcbiAgICAgICAgbGlzdC5zaG91bGQuZXFsKHJldCk7XG4gICAgICB9KTtcbiAgICAgIGl0KCdzaG91bGQgaW5zdGFsbCBhIGRyaXZlciBmcm9tIG5wbScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgYXdhaXQgY2xlYXIoKTtcbiAgICAgICAgY29uc3QgcmV0ID0gSlNPTi5wYXJzZShhd2FpdCBydW4oJ2luc3RhbGwnLCBbJ0BhcHBpdW0vZmFrZS1kcml2ZXInLCAnLS1zb3VyY2UnLCAnbnBtJywgJy0tanNvbiddKSk7XG4gICAgICAgIHJldC5mYWtlLnBrZ05hbWUuc2hvdWxkLmVxbCgnQGFwcGl1bS9mYWtlLWRyaXZlcicpO1xuICAgICAgICByZXQuZmFrZS5pbnN0YWxsVHlwZS5zaG91bGQuZXFsKCducG0nKTtcbiAgICAgICAgcmV0LmZha2UuaW5zdGFsbFNwZWMuc2hvdWxkLmVxbCgnQGFwcGl1bS9mYWtlLWRyaXZlcicpO1xuICAgICAgICBjb25zdCBsaXN0ID0gSlNPTi5wYXJzZShhd2FpdCBydW4oJ2xpc3QnLCBbJy0taW5zdGFsbGVkJywgJy0tanNvbiddKSk7XG4gICAgICAgIGRlbGV0ZSBsaXN0LmZha2UuaW5zdGFsbGVkO1xuICAgICAgICBsaXN0LnNob3VsZC5lcWwocmV0KTtcbiAgICAgIH0pO1xuICAgICAgaXQoJ3Nob3VsZCBpbnN0YWxsIGEgZHJpdmVyIGZyb20gbnBtIHdpdGggYSBzcGVjaWZpYyB2ZXJzaW9uL3RhZycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgY3VycmVudEZha2VEcml2ZXJWZXJzaW9uQXNPZlJpZ2h0Tm93ID0gJzMuMC41JztcbiAgICAgICAgYXdhaXQgY2xlYXIoKTtcbiAgICAgICAgY29uc3QgaW5zdGFsbFNwZWMgPSBgQGFwcGl1bS9mYWtlLWRyaXZlckAke2N1cnJlbnRGYWtlRHJpdmVyVmVyc2lvbkFzT2ZSaWdodE5vd31gO1xuICAgICAgICBjb25zdCByZXQgPSBKU09OLnBhcnNlKGF3YWl0IHJ1bignaW5zdGFsbCcsIFtpbnN0YWxsU3BlYywgJy0tc291cmNlJywgJ25wbScsICctLWpzb24nXSkpO1xuICAgICAgICByZXQuZmFrZS5wa2dOYW1lLnNob3VsZC5lcWwoJ0BhcHBpdW0vZmFrZS1kcml2ZXInKTtcbiAgICAgICAgcmV0LmZha2UuaW5zdGFsbFR5cGUuc2hvdWxkLmVxbCgnbnBtJyk7XG4gICAgICAgIHJldC5mYWtlLmluc3RhbGxTcGVjLnNob3VsZC5lcWwoaW5zdGFsbFNwZWMpO1xuICAgICAgICBjb25zdCBsaXN0ID0gSlNPTi5wYXJzZShhd2FpdCBydW4oJ2xpc3QnLCBbJy0taW5zdGFsbGVkJywgJy0tanNvbiddKSk7XG4gICAgICAgIGRlbGV0ZSBsaXN0LmZha2UuaW5zdGFsbGVkO1xuICAgICAgICBsaXN0LnNob3VsZC5lcWwocmV0KTtcbiAgICAgIH0pO1xuICAgICAgaXQoJ3Nob3VsZCBpbnN0YWxsIGEgZHJpdmVyIGZyb20gZ2l0aHViJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBhd2FpdCBjbGVhcigpO1xuICAgICAgICBjb25zdCByZXQgPSBKU09OLnBhcnNlKGF3YWl0IHJ1bignaW5zdGFsbCcsIFsnYXBwaXVtL2FwcGl1bS1mYWtlLWRyaXZlcicsICctLXNvdXJjZScsXG4gICAgICAgICAgJ2dpdGh1YicsICctLXBhY2thZ2UnLCAnYXBwaXVtLWZha2UtZHJpdmVyJywgJy0tanNvbiddKSk7XG4gICAgICAgIHJldC5mYWtlLnBrZ05hbWUuc2hvdWxkLmVxbCgnYXBwaXVtLWZha2UtZHJpdmVyJyk7XG4gICAgICAgIHJldC5mYWtlLmluc3RhbGxUeXBlLnNob3VsZC5lcWwoJ2dpdGh1YicpO1xuICAgICAgICByZXQuZmFrZS5pbnN0YWxsU3BlYy5zaG91bGQuZXFsKCdhcHBpdW0vYXBwaXVtLWZha2UtZHJpdmVyJyk7XG4gICAgICAgIGNvbnN0IGxpc3QgPSBKU09OLnBhcnNlKGF3YWl0IHJ1bignbGlzdCcsIFsnLS1pbnN0YWxsZWQnLCAnLS1qc29uJ10pKTtcbiAgICAgICAgZGVsZXRlIGxpc3QuZmFrZS5pbnN0YWxsZWQ7XG4gICAgICAgIGxpc3Quc2hvdWxkLmVxbChyZXQpO1xuICAgICAgfSk7XG4gICAgICBpdCgnc2hvdWxkIGluc3RhbGwgYSBkcml2ZXIgZnJvbSBhIGxvY2FsIGdpdCByZXBvJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBhd2FpdCBjbGVhcigpO1xuICAgICAgICBjb25zdCByZXQgPSBKU09OLnBhcnNlKGF3YWl0IHJ1bignaW5zdGFsbCcsIFtsb2NhbEZha2VEcml2ZXJQYXRoLFxuICAgICAgICAgICctLXNvdXJjZScsICdnaXQnLCAnLS1wYWNrYWdlJywgJ0BhcHBpdW0vZmFrZS1kcml2ZXInLCAnLS1qc29uJ10pKTtcbiAgICAgICAgcmV0LmZha2UucGtnTmFtZS5zaG91bGQuZXFsKCdAYXBwaXVtL2Zha2UtZHJpdmVyJyk7XG4gICAgICAgIHJldC5mYWtlLmluc3RhbGxUeXBlLnNob3VsZC5lcWwoJ2dpdCcpO1xuICAgICAgICByZXQuZmFrZS5pbnN0YWxsU3BlYy5zaG91bGQuZXFsKGxvY2FsRmFrZURyaXZlclBhdGgpO1xuICAgICAgICBjb25zdCBsaXN0ID0gSlNPTi5wYXJzZShhd2FpdCBydW4oJ2xpc3QnLCBbJy0taW5zdGFsbGVkJywgJy0tanNvbiddKSk7XG4gICAgICAgIGRlbGV0ZSBsaXN0LmZha2UuaW5zdGFsbGVkO1xuICAgICAgICBsaXN0LnNob3VsZC5lcWwocmV0KTtcbiAgICAgIH0pO1xuICAgICAgaXQoJ3Nob3VsZCBpbnN0YWxsIGEgZHJpdmVyIGZyb20gYSByZW1vdGUgZ2l0IHJlcG8nLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGF3YWl0IGNsZWFyKCk7XG4gICAgICAgIGNvbnN0IHJldCA9IEpTT04ucGFyc2UoYXdhaXQgcnVuKCdpbnN0YWxsJywgWydnaXQraHR0cHM6Ly9naXRodWIuY29tL2FwcGl1bS9hcHBpdW0tZmFrZS1kcml2ZXIuZ2l0JyxcbiAgICAgICAgICAnLS1zb3VyY2UnLCAnZ2l0JywgJy0tcGFja2FnZScsICdhcHBpdW0tZmFrZS1kcml2ZXInLCAnLS1qc29uJ10pKTtcbiAgICAgICAgcmV0LmZha2UucGtnTmFtZS5zaG91bGQuZXFsKCdhcHBpdW0tZmFrZS1kcml2ZXInKTtcbiAgICAgICAgcmV0LmZha2UuaW5zdGFsbFR5cGUuc2hvdWxkLmVxbCgnZ2l0Jyk7XG4gICAgICAgIHJldC5mYWtlLmluc3RhbGxTcGVjLnNob3VsZC5lcWwoJ2dpdCtodHRwczovL2dpdGh1Yi5jb20vYXBwaXVtL2FwcGl1bS1mYWtlLWRyaXZlcicpO1xuICAgICAgICBjb25zdCBsaXN0ID0gSlNPTi5wYXJzZShhd2FpdCBydW4oJ2xpc3QnLCBbJy0taW5zdGFsbGVkJywgJy0tanNvbiddKSk7XG4gICAgICAgIGRlbGV0ZSBsaXN0LmZha2UuaW5zdGFsbGVkO1xuICAgICAgICBsaXN0LnNob3VsZC5lcWwocmV0KTtcbiAgICAgIH0pO1xuICAgICAgaXQoJ3Nob3VsZCBpbnN0YWxsIGEgZHJpdmVyIGZyb20gYSBsb2NhbCBucG0gbW9kdWxlJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBhd2FpdCBjbGVhcigpO1xuICAgICAgICAvLyB0YWtlIGFkdmFudGFnZSBvZiB0aGUgZmFjdCB0aGF0IHdlIGtub3cgd2UgaGF2ZSBmYWtlIGRyaXZlciBpbnN0YWxsZWQgYXMgYSBkZXBlbmRlbmN5IGluXG4gICAgICAgIC8vIHRoaXMgbW9kdWxlLCBzbyB3ZSBrbm93IGl0cyBsb2NhbCBwYXRoIG9uIGRpc2tcbiAgICAgICAgY29uc3QgcmV0ID0gSlNPTi5wYXJzZShhd2FpdCBydW4oJ2luc3RhbGwnLCBbbG9jYWxGYWtlRHJpdmVyUGF0aCwgJy0tc291cmNlJywgJ2xvY2FsJywgJy0tanNvbiddKSk7XG4gICAgICAgIHJldC5mYWtlLnBrZ05hbWUuc2hvdWxkLmVxbCgnQGFwcGl1bS9mYWtlLWRyaXZlcicpO1xuICAgICAgICByZXQuZmFrZS5pbnN0YWxsVHlwZS5zaG91bGQuZXFsKCdsb2NhbCcpO1xuICAgICAgICByZXQuZmFrZS5pbnN0YWxsU3BlYy5zaG91bGQuZXFsKGxvY2FsRmFrZURyaXZlclBhdGgpO1xuICAgICAgICBjb25zdCBsaXN0ID0gSlNPTi5wYXJzZShhd2FpdCBydW4oJ2xpc3QnLCBbJy0taW5zdGFsbGVkJywgJy0tanNvbiddKSk7XG4gICAgICAgIGRlbGV0ZSBsaXN0LmZha2UuaW5zdGFsbGVkO1xuICAgICAgICBsaXN0LnNob3VsZC5lcWwocmV0KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ3VuaW5zdGFsbCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGl0KCdzaG91bGQgdW5pbnN0YWxsIGEgZHJpdmVyIGJhc2VkIG9uIGl0cyBkcml2ZXIgbmFtZScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgYXdhaXQgY2xlYXIoKTtcbiAgICAgICAgY29uc3QgcmV0ID0gSlNPTi5wYXJzZShhd2FpdCBydW4oJ2luc3RhbGwnLCBbJ0BhcHBpdW0vZmFrZS1kcml2ZXInLCAnLS1zb3VyY2UnLCAnbnBtJywgJy0tanNvbiddKSk7XG4gICAgICAgIGNvbnN0IGluc3RhbGxQYXRoID0gcGF0aC5yZXNvbHZlKGFwcGl1bUhvbWUsIHJldC5mYWtlLmluc3RhbGxQYXRoKTtcbiAgICAgICAgYXdhaXQgZnMuZXhpc3RzKGluc3RhbGxQYXRoKS5zaG91bGQuZXZlbnR1YWxseS5iZS50cnVlO1xuICAgICAgICBsZXQgbGlzdCA9IEpTT04ucGFyc2UoYXdhaXQgcnVuKCdsaXN0JywgWyctLWluc3RhbGxlZCcsICctLWpzb24nXSkpO1xuICAgICAgICBsaXN0LmZha2UuaW5zdGFsbGVkLnNob3VsZC5iZS50cnVlO1xuICAgICAgICBjb25zdCB1bmluc3RhbGwgPSBKU09OLnBhcnNlKGF3YWl0IHJ1bigndW5pbnN0YWxsJywgWydmYWtlJywgJy0tanNvbiddKSk7XG4gICAgICAgIHVuaW5zdGFsbC5zaG91bGQubm90LmhhdmUua2V5KCdmYWtlJyk7XG4gICAgICAgIGF3YWl0IGZzLmV4aXN0cyhpbnN0YWxsUGF0aCkuc2hvdWxkLmV2ZW50dWFsbHkuYmUuZmFsc2U7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdydW4nLCBmdW5jdGlvbiAoKSB7XG4gICAgICBiZWZvcmUoYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBhd2FpdCBjbGVhcigpO1xuICAgICAgICBhd2FpdCBydW4oJ2luc3RhbGwnLCBbbG9jYWxGYWtlRHJpdmVyUGF0aCwgJy0tc291cmNlJywgJ2xvY2FsJywgJy0tanNvbiddKTtcbiAgICAgIH0pO1xuICAgICAgaXQoJ3Nob3VsZCBydW4gYSB2YWxpZCBkcml2ZXIsIHZhbGlkIHNjcmlwdCwgYW5kIHJlc3VsdCBpbiBzdWNjZXNzJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCBkcml2ZXJOYW1lID0gJ2Zha2UnO1xuICAgICAgICBjb25zdCBzY3JpcHROYW1lID0gJ2Zha2Utc3VjY2Vzcyc7XG4gICAgICAgIGNvbnN0IG91dCA9IEpTT04ucGFyc2UoYXdhaXQgcnVuKCdydW4nLCBbZHJpdmVyTmFtZSwgc2NyaXB0TmFtZSwgJy0tanNvbiddKSk7XG4gICAgICAgIG91dC5zaG91bGQubm90LmluY2x1ZGUua2V5KCdlcnJvcicpO1xuICAgICAgfSk7XG4gICAgICBpdCgnc2hvdWxkIHJ1biBhIHZhbGlkIGRyaXZlciwgdmFsaWQgZXJyb3IgcHJvbmUgc2NyaXB0LCBhbmQgcmV0dXJuIGVycm9yIGluIGpzb24nLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IGRyaXZlck5hbWUgPSAnZmFrZSc7XG4gICAgICAgIGNvbnN0IG91dCA9IEpTT04ucGFyc2UoYXdhaXQgcnVuKCdydW4nLCBbZHJpdmVyTmFtZSwgJ2Zha2UtZXJyb3InLCAnLS1qc29uJ10pKTtcbiAgICAgICAgb3V0LnNob3VsZC5pbmNsdWRlLmtleSgnZXJyb3InKTtcbiAgICAgIH0pO1xuICAgICAgaXQoJ3Nob3VsZCB0YWtlIGEgdmFsaWQgZHJpdmVyLCBpbnZhbGlkIHNjcmlwdCwgYW5kIHRocm93IGFuIGVycm9yJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCBkcml2ZXJOYW1lID0gJ2Zha2UnO1xuICAgICAgICBhd2FpdCBjaGFpLmV4cGVjdChydW4oJ3J1bicsIFtkcml2ZXJOYW1lLCAnZm9vJywgJy0tanNvbiddKSkudG8uZXZlbnR1YWxseS5iZS5yZWplY3RlZFdpdGgoRXJyb3IpO1xuICAgICAgfSk7XG4gICAgICBpdCgnc2hvdWxkIHRha2UgYW4gaW52YWxpZCBkcml2ZXIsIGludmFsaWQgc2NyaXB0LCBhbmQgdGhyb3cgYW4gZXJyb3InLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IGRyaXZlck5hbWUgPSAnZm9vJztcbiAgICAgICAgYXdhaXQgY2hhaS5leHBlY3QocnVuKCdydW4nLCBbZHJpdmVyTmFtZSwgJ2JhcicsICctLWpzb24nXSkpLnRvLmV2ZW50dWFsbHkuYmUucmVqZWN0ZWRXaXRoKEVycm9yKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnUGx1Z2luIENMSScsIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBmYWtlUGx1Z2luRGlyID0gcGF0aC5kaXJuYW1lKHJlcXVpcmUucmVzb2x2ZSgnQGFwcGl1bS9mYWtlLXBsdWdpbi9wYWNrYWdlLmpzb24nKSk7XG4gICAgY29uc3QgZXh0ID0gJ3BsdWdpbic7XG4gICAgZGVzY3JpYmUoJ3J1bicsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGJlZm9yZShhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGF3YWl0IGNsZWFyKCk7XG4gICAgICAgIGF3YWl0IHJ1bignaW5zdGFsbCcsIFtmYWtlUGx1Z2luRGlyLCAnLS1zb3VyY2UnLCAnbG9jYWwnLCAnLS1qc29uJ10sIGZhbHNlLCBleHQpO1xuICAgICAgfSk7XG4gICAgICBpdCgnc2hvdWxkIHJ1biBhIHZhbGlkIHBsdWdpbiwgdmFsaWQgc2NyaXB0LCBhbmQgcmVzdWx0IGluIHN1Y2Nlc3MnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IHBsdWdpbk5hbWUgPSAnZmFrZSc7XG4gICAgICAgIGNvbnN0IHNjcmlwdE5hbWUgPSAnZmFrZS1zdWNjZXNzJztcbiAgICAgICAgY29uc3Qgb3V0ID0gSlNPTi5wYXJzZShhd2FpdCBydW4oJ3J1bicsIFtwbHVnaW5OYW1lLCBzY3JpcHROYW1lLCAnLS1qc29uJ10sIGZhbHNlLCBleHQpKTtcbiAgICAgICAgb3V0LnNob3VsZC5ub3QuaW5jbHVkZS5rZXkoJ2Vycm9yJyk7XG4gICAgICB9KTtcbiAgICAgIGl0KCdzaG91bGQgcnVuIGEgdmFsaWQgcGx1Z2luLCB2YWxpZCBlcnJvciBwcm9uZSBzY3JpcHQsIGFuZCByZXR1cm4gZXJyb3IgaW4ganNvbicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY29uc3QgcGx1Z2luTmFtZSA9ICdmYWtlJztcbiAgICAgICAgY29uc3Qgb3V0ID0gSlNPTi5wYXJzZShhd2FpdCBydW4oJ3J1bicsIFtwbHVnaW5OYW1lLCAnZmFrZS1lcnJvcicsICctLWpzb24nXSwgZmFsc2UsIGV4dCkpO1xuICAgICAgICBvdXQuc2hvdWxkLmluY2x1ZGUua2V5KCdlcnJvcicpO1xuICAgICAgfSk7XG4gICAgICBpdCgnc2hvdWxkIHRha2UgYSB2YWxpZCBwbHVnaW4sIGludmFsaWQgc2NyaXB0LCBhbmQgdGhyb3cgYW4gZXJyb3InLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IHBsdWdpbk5hbWUgPSAnZmFrZSc7XG4gICAgICAgIGF3YWl0IGNoYWkuZXhwZWN0KHJ1bigncnVuJywgW3BsdWdpbk5hbWUsICdmb28nLCAnLS1qc29uJ10sIGZhbHNlLCBleHQpKS50by5ldmVudHVhbGx5LmJlLnJlamVjdGVkV2l0aChFcnJvcik7XG4gICAgICB9KTtcbiAgICAgIGl0KCdzaG91bGQgdGFrZSBhbiBpbnZhbGlkIHBsdWdpbiwgaW52YWxpZCBzY3JpcHQsIGFuZCB0aHJvdyBhbiBlcnJvcicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgYXdhaXQgY2hhaS5leHBlY3QocnVuKCdydW4nLCBbJ2ZvbycsICdiYXInLCAnLS1qc29uJ10sIGZhbHNlLCBleHQpKS50by5ldmVudHVhbGx5LmJlLnJlamVjdGVkV2l0aChFcnJvcik7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSk7XG59KTtcblxuXG4vKipcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJy4uLy4uL2xpYi9leHQtY29uZmlnLWlvJykuRXh0ZW5zaW9uVHlwZX0gRXh0ZW5zaW9uVHlwZVxuICovXG4iXSwiZmlsZSI6InRlc3QvY2xpL2NsaS1lMmUtc3BlY3MuanMiLCJzb3VyY2VSb290IjoiLi4vLi4vLi4ifQ==
@@ -1,86 +0,0 @@
1
- "use strict";
2
-
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
-
5
- Object.defineProperty(exports, "__esModule", {
6
- value: true
7
- });
8
- exports.runAppiumRaw = exports.runAppiumJson = exports.runAppium = exports.installLocalExtension = exports.EXECUTABLE = void 0;
9
-
10
- require("source-map-support/register");
11
-
12
- var _lodash = _interopRequireDefault(require("lodash"));
13
-
14
- var _teen_process = require("teen_process");
15
-
16
- var _helpers = require("../helpers");
17
-
18
- var _path = _interopRequireDefault(require("path"));
19
-
20
- const EXECUTABLE = _path.default.join(_helpers.PROJECT_ROOT, 'packages', 'appium', 'build', 'lib', 'main.js');
21
-
22
- exports.EXECUTABLE = EXECUTABLE;
23
-
24
- async function run(appiumHome, args) {
25
- const env = {
26
- APPIUM_HOME: appiumHome,
27
- PATH: process.env.PATH
28
- };
29
-
30
- try {
31
- return await (0, _teen_process.exec)(process.execPath, [EXECUTABLE, ...args], {
32
- cwd: _helpers.PROJECT_ROOT,
33
- env
34
- });
35
- } catch (err) {
36
- const {
37
- stdout,
38
- stderr
39
- } = err;
40
- const runErr = Object.assign(err, {
41
- originalMessage: err.message,
42
- message: `${stdout.trim()}\n\n${stderr.trim()}`,
43
- command: `${process.execPath} ${EXECUTABLE} ${args.join(' ')}`,
44
- env,
45
- cwd: _helpers.PROJECT_ROOT
46
- });
47
- throw runErr;
48
- }
49
- }
50
-
51
- const runAppium = _lodash.default.curry(async (appiumHome, args) => {
52
- const {
53
- stdout
54
- } = await run(appiumHome, args);
55
- return stdout;
56
- });
57
-
58
- exports.runAppium = runAppium;
59
-
60
- const runAppiumRaw = _lodash.default.curry(async (appiumHome, args) => await run(appiumHome, args));
61
-
62
- exports.runAppiumRaw = runAppiumRaw;
63
-
64
- const runAppiumJson = _lodash.default.curry(async (appiumHome, args) => {
65
- if (!args.includes('--json')) {
66
- args.push('--json');
67
- }
68
-
69
- const result = await runAppium(appiumHome, args);
70
-
71
- try {
72
- return JSON.parse(result);
73
- } catch (err) {
74
- err.message = `Error parsing JSON. Contents of STDOUT: ${result}`;
75
- throw err;
76
- }
77
- });
78
-
79
- exports.runAppiumJson = runAppiumJson;
80
-
81
- const installLocalExtension = _lodash.default.curry(async (appiumHome, type, pathToExtension) => await runAppiumJson(appiumHome, [type, 'install', '--source', 'local', pathToExtension]));
82
-
83
- exports.installLocalExtension = installLocalExtension;require('source-map-support').install();
84
-
85
-
86
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInRlc3QvY2xpL2NsaS1oZWxwZXJzLmpzIl0sIm5hbWVzIjpbIkVYRUNVVEFCTEUiLCJwYXRoIiwiam9pbiIsIlBST0pFQ1RfUk9PVCIsInJ1biIsImFwcGl1bUhvbWUiLCJhcmdzIiwiZW52IiwiQVBQSVVNX0hPTUUiLCJQQVRIIiwicHJvY2VzcyIsImV4ZWNQYXRoIiwiY3dkIiwiZXJyIiwic3Rkb3V0Iiwic3RkZXJyIiwicnVuRXJyIiwiT2JqZWN0IiwiYXNzaWduIiwib3JpZ2luYWxNZXNzYWdlIiwibWVzc2FnZSIsInRyaW0iLCJjb21tYW5kIiwicnVuQXBwaXVtIiwiXyIsImN1cnJ5IiwicnVuQXBwaXVtUmF3IiwicnVuQXBwaXVtSnNvbiIsImluY2x1ZGVzIiwicHVzaCIsInJlc3VsdCIsIkpTT04iLCJwYXJzZSIsImluc3RhbGxMb2NhbEV4dGVuc2lvbiIsInR5cGUiLCJwYXRoVG9FeHRlbnNpb24iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBRUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBS08sTUFBTUEsVUFBVSxHQUFHQyxjQUFLQyxJQUFMLENBQ3hCQyxxQkFEd0IsRUFFeEIsVUFGd0IsRUFHeEIsUUFId0IsRUFJeEIsT0FKd0IsRUFLeEIsS0FMd0IsRUFNeEIsU0FOd0IsQ0FBbkI7Ozs7QUFpQlAsZUFBZUMsR0FBZixDQUFvQkMsVUFBcEIsRUFBZ0NDLElBQWhDLEVBQXNDO0FBQ3BDLFFBQU1DLEdBQUcsR0FBRztBQUNWQyxJQUFBQSxXQUFXLEVBQUVILFVBREg7QUFFVkksSUFBQUEsSUFBSSxFQUFFQyxPQUFPLENBQUNILEdBQVIsQ0FBWUU7QUFGUixHQUFaOztBQUlBLE1BQUk7QUFJRixXQUFPLE1BQU0sd0JBQUtDLE9BQU8sQ0FBQ0MsUUFBYixFQUF1QixDQUFDWCxVQUFELEVBQWEsR0FBR00sSUFBaEIsQ0FBdkIsRUFBOEM7QUFDekRNLE1BQUFBLEdBQUcsRUFBRVQscUJBRG9EO0FBRXpESSxNQUFBQTtBQUZ5RCxLQUE5QyxDQUFiO0FBSUQsR0FSRCxDQVFFLE9BQU9NLEdBQVAsRUFBWTtBQUNaLFVBQU07QUFBQ0MsTUFBQUEsTUFBRDtBQUFTQyxNQUFBQTtBQUFULFFBQXVERixHQUE3RDtBQUlBLFVBQU1HLE1BQU0sR0FBR0MsTUFBTSxDQUFDQyxNQUFQLENBQ2JMLEdBRGEsRUFFYjtBQUNFTSxNQUFBQSxlQUFlLEVBQUVOLEdBQUcsQ0FBQ08sT0FEdkI7QUFFRUEsTUFBQUEsT0FBTyxFQUFHLEdBQUVOLE1BQU0sQ0FBQ08sSUFBUCxFQUFjLE9BQU1OLE1BQU0sQ0FBQ00sSUFBUCxFQUFjLEVBRmhEO0FBR0VDLE1BQUFBLE9BQU8sRUFBRyxHQUFFWixPQUFPLENBQUNDLFFBQVMsSUFBR1gsVUFBVyxJQUFHTSxJQUFJLENBQUNKLElBQUwsQ0FBVSxHQUFWLENBQWUsRUFIL0Q7QUFJRUssTUFBQUEsR0FKRjtBQUtFSyxNQUFBQSxHQUFHLEVBQUVUO0FBTFAsS0FGYSxDQUFmO0FBU0EsVUFBTWEsTUFBTjtBQUNEO0FBQ0Y7O0FBT00sTUFBTU8sU0FBUyxHQUFHQyxnQkFBRUMsS0FBRixDQU12QixPQUFPcEIsVUFBUCxFQUFtQkMsSUFBbkIsS0FBNEI7QUFDMUIsUUFBTTtBQUFDUSxJQUFBQTtBQUFELE1BQVcsTUFBTVYsR0FBRyxDQUFDQyxVQUFELEVBQWFDLElBQWIsQ0FBMUI7QUFDQSxTQUFPUSxNQUFQO0FBQ0QsQ0FUc0IsQ0FBbEI7Ozs7QUFnQkEsTUFBTVksWUFBWSxHQUFHRixnQkFBRUMsS0FBRixDQU0xQixPQUFPcEIsVUFBUCxFQUFtQkMsSUFBbkIsS0FBNEIsTUFBTUYsR0FBRyxDQUFDQyxVQUFELEVBQWFDLElBQWIsQ0FOWCxDQUFyQjs7OztBQWFBLE1BQU1xQixhQUFhLEdBQUdILGdCQUFFQyxLQUFGLENBTTNCLE9BQU9wQixVQUFQLEVBQW1CQyxJQUFuQixLQUE0QjtBQUMxQixNQUFJLENBQUNBLElBQUksQ0FBQ3NCLFFBQUwsQ0FBYyxRQUFkLENBQUwsRUFBOEI7QUFDNUJ0QixJQUFBQSxJQUFJLENBQUN1QixJQUFMLENBQVUsUUFBVjtBQUNEOztBQUNELFFBQU1DLE1BQU0sR0FBRyxNQUFNUCxTQUFTLENBQUNsQixVQUFELEVBQWFDLElBQWIsQ0FBOUI7O0FBQ0EsTUFBSTtBQUNGLFdBQU95QixJQUFJLENBQUNDLEtBQUwsQ0FBV0YsTUFBWCxDQUFQO0FBQ0QsR0FGRCxDQUVFLE9BQU9qQixHQUFQLEVBQVk7QUFDWkEsSUFBQUEsR0FBRyxDQUFDTyxPQUFKLEdBQWUsMkNBQTBDVSxNQUFPLEVBQWhFO0FBQ0EsVUFBTWpCLEdBQU47QUFDRDtBQUNGLENBakIwQixDQUF0Qjs7OztBQXVCQSxNQUFNb0IscUJBQXFCLEdBQUdULGdCQUFFQyxLQUFGLENBT25DLE9BQU9wQixVQUFQLEVBQW1CNkIsSUFBbkIsRUFBeUJDLGVBQXpCLEtBQ0UsTUFBTVIsYUFBYSxDQUFDdEIsVUFBRCxFQUFhLENBQzlCNkIsSUFEOEIsRUFFOUIsU0FGOEIsRUFHOUIsVUFIOEIsRUFJOUIsT0FKOEIsRUFLOUJDLGVBTDhCLENBQWIsQ0FSYyxDQUE5QiIsInNvdXJjZXNDb250ZW50IjpbIi8vIEB0cy1jaGVja1xuXG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHtleGVjfSBmcm9tICd0ZWVuX3Byb2Nlc3MnO1xuaW1wb3J0IHtQUk9KRUNUX1JPT1R9IGZyb20gJy4uL2hlbHBlcnMnO1xuaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XG5cbi8qKlxuICogUGF0aCB0byB0aGUgYGFwcGl1bWAgZXhlY3V0YWJsZS4gU29ydCBvZi5cbiAqL1xuZXhwb3J0IGNvbnN0IEVYRUNVVEFCTEUgPSBwYXRoLmpvaW4oXG4gIFBST0pFQ1RfUk9PVCxcbiAgJ3BhY2thZ2VzJyxcbiAgJ2FwcGl1bScsXG4gICdidWlsZCcsXG4gICdsaWInLFxuICAnbWFpbi5qcycsXG4pO1xuXG4vKipcbiAqIFJ1bnMgdGhlIGBhcHBpdW1gIGV4ZWN1dGFibGUgd2l0aCB0aGUgZ2l2ZW4gYXJncy5cbiAqXG4gKiBJZiB0aGUgcHJvY2VzcyBleGl0cyB3aXRoIGEgbm9uemVybyBjb2RlLCB0aGUgZXJyb3Igd2lsbCBiZSBhXG4gKiBAcGFyYW0ge3N0cmluZ30gYXBwaXVtSG9tZSAtIFBhdGggdG8gYEFQUElVTV9IT01FYFxuICogQHBhcmFtIHtzdHJpbmdbXX0gYXJncyAtIEFyZ3MsIGluY2x1ZGluZyBjb21tYW5kc1xuICogQHJldHVybnMge1Byb21pc2U8VGVlblByb2Nlc3NFeGVjUmVzdWx0Pn1cbiAqL1xuYXN5bmMgZnVuY3Rpb24gcnVuIChhcHBpdW1Ib21lLCBhcmdzKSB7XG4gIGNvbnN0IGVudiA9IHtcbiAgICBBUFBJVU1fSE9NRTogYXBwaXVtSG9tZSxcbiAgICBQQVRIOiBwcm9jZXNzLmVudi5QQVRILFxuICB9O1xuICB0cnkge1xuICAgIC8qKlxuICAgICAqIEB0eXBlIHtUZWVuUHJvY2Vzc0V4ZWNSZXN1bHR9XG4gICAgICovXG4gICAgcmV0dXJuIGF3YWl0IGV4ZWMocHJvY2Vzcy5leGVjUGF0aCwgW0VYRUNVVEFCTEUsIC4uLmFyZ3NdLCB7XG4gICAgICBjd2Q6IFBST0pFQ1RfUk9PVCxcbiAgICAgIGVudixcbiAgICB9KTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgY29uc3Qge3N0ZG91dCwgc3RkZXJyfSA9IC8qKiBAdHlwZSB7VGVlblByb2Nlc3NFeGVjRXJyb3J9ICovKGVycik7XG4gICAgLyoqXG4gICAgICogQHR5cGUge0FwcGl1bVJ1bkVycm9yfVxuICAgICAqL1xuICAgIGNvbnN0IHJ1bkVyciA9IE9iamVjdC5hc3NpZ24oXG4gICAgICBlcnIsXG4gICAgICB7XG4gICAgICAgIG9yaWdpbmFsTWVzc2FnZTogZXJyLm1lc3NhZ2UsXG4gICAgICAgIG1lc3NhZ2U6IGAke3N0ZG91dC50cmltKCl9XFxuXFxuJHtzdGRlcnIudHJpbSgpfWAsXG4gICAgICAgIGNvbW1hbmQ6IGAke3Byb2Nlc3MuZXhlY1BhdGh9ICR7RVhFQ1VUQUJMRX0gJHthcmdzLmpvaW4oJyAnKX1gLFxuICAgICAgICBlbnYsXG4gICAgICAgIGN3ZDogUFJPSkVDVF9ST09ULFxuICAgICAgfSk7XG4gICAgdGhyb3cgcnVuRXJyO1xuICB9XG59XG5cbi8qKlxuICogUnVucyB0aGUgYGFwcGl1bWAgZXhlY3V0YWJsZSB3aXRoIHRoZSBnaXZlbiBhcmdzIGFuZCByZXR1cm5zIGNvbnRlbnRzIG9mIGBTVERPVVRgLlxuICpcbiAqIERvIG5vdCB1c2UgdGhpcyB3aGVuIHRlc3RpbmcgZXJyb3Igb3V0cHV0LCBhcyBpdCB3aWxsIGxpa2VseSBiZSBpbiBgU1RERVJSYC4gVXNlIHtAbGluayBydW5BcHBpdW1SYXd9IGluc3RlYWQuXG4gKi9cbmV4cG9ydCBjb25zdCBydW5BcHBpdW0gPSBfLmN1cnJ5KFxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd9IGFwcGl1bUhvbWUgLSBQYXRoIHRvIGBBUFBJVU1fSE9NRWBcbiAgICogQHBhcmFtIHtzdHJpbmdbXX0gYXJncyAtIEFyZ3MsIGluY2x1ZGluZyBjb21tYW5kc1xuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxzdHJpbmc+fSBDb250ZW50cyBvZiBgYFNURE9VVGBgXG4gICAqL1xuICBhc3luYyAoYXBwaXVtSG9tZSwgYXJncykgPT4ge1xuICAgIGNvbnN0IHtzdGRvdXR9ID0gYXdhaXQgcnVuKGFwcGl1bUhvbWUsIGFyZ3MpO1xuICAgIHJldHVybiBzdGRvdXQ7XG4gIH0sXG4pO1xuXG4vKipcbiAqIFJ1bnMgdGhlIGBhcHBpdW1gIGV4ZWN1dGFibGUgd2l0aCB0aGUgZ2l2ZW4gYXJncyBhbmQgcmV0dXJucyB0aGUgZW50aXJlXG4gKiB7QGxpbmsgVGVlblByb2Nlc3NFeGVjUmVzdWx0fSBvYmplY3QuXG4gKi9cbmV4cG9ydCBjb25zdCBydW5BcHBpdW1SYXcgPSBfLmN1cnJ5KFxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd9IGFwcGl1bUhvbWUgLSBQYXRoIHRvIGBBUFBJVU1fSE9NRWBcbiAgICogQHBhcmFtIHtzdHJpbmdbXX0gYXJncyAtIEFyZ3MsIGluY2x1ZGluZyBjb21tYW5kc1xuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxUZWVuUHJvY2Vzc0V4ZWNSZXN1bHQ+fSBSYXcgcmVzdWx0IG9mIGBleGVjYFxuICAgKi9cbiAgYXN5bmMgKGFwcGl1bUhvbWUsIGFyZ3MpID0+IGF3YWl0IHJ1bihhcHBpdW1Ib21lLCBhcmdzKSxcbik7XG5cbi8qKlxuICogUnVucyB0aGUgYGFwcGl1bWAgZXhlY3V0YWJsZSB3aXRoIHRoZSBnaXZlbiBhcmdzIGluIEpTT04gbW9kZS5cbiAqIFdpbGwgcmVqZWN0IHdpdGggdGhlIGNvbnRlbnRzIG9mIGBTVERPVVRgICh3aGljaCB3ZXJlIHRvIGJlIHBhc3JlZCkgaWYgcGFyc2luZyBpbnRvIEpTT04gZmFpbHMuXG4gKi9cbmV4cG9ydCBjb25zdCBydW5BcHBpdW1Kc29uID0gXy5jdXJyeShcbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBhcHBpdW1Ib21lIC0gUGF0aCB0byBgQVBQSVVNX0hPTUVgXG4gICAqIEBwYXJhbSB7c3RyaW5nW119IGFyZ3MgLSBBcmdzLCBpbmNsdWRpbmcgY29tbWFuZHNcbiAgICogQHJldHVybnMge1Byb21pc2U8VGVlblByb2Nlc3NFeGVjUmVzdWx0Pn0gUmF3IHJlc3VsdCBvZiBgZXhlY2BcbiAgICovXG4gIGFzeW5jIChhcHBpdW1Ib21lLCBhcmdzKSA9PiB7XG4gICAgaWYgKCFhcmdzLmluY2x1ZGVzKCctLWpzb24nKSkge1xuICAgICAgYXJncy5wdXNoKCctLWpzb24nKTtcbiAgICB9XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcnVuQXBwaXVtKGFwcGl1bUhvbWUsIGFyZ3MpO1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gSlNPTi5wYXJzZShyZXN1bHQpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgZXJyLm1lc3NhZ2UgPSBgRXJyb3IgcGFyc2luZyBKU09OLiBDb250ZW50cyBvZiBTVERPVVQ6ICR7cmVzdWx0fWA7XG4gICAgICB0aHJvdyBlcnI7XG4gICAgfVxuICB9LFxuKTtcblxuLyoqXG4gKiBHaXZlbiBhIHBhdGggdG8gYSBsb2NhbCBleHRlbnNpb24sIGluc3RhbGwgaXQgaW50byBgQVBQSVVNX0hPTUVgIHZpYSBDTEkuXG4gKi9cbmV4cG9ydCBjb25zdCBpbnN0YWxsTG9jYWxFeHRlbnNpb24gPSBfLmN1cnJ5KFxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd9IGFwcGl1bUhvbWVcbiAgICogQHBhcmFtIHtpbXBvcnQoJy4uLy4uL2xpYi9leHQtY29uZmlnLWlvJykuRXh0ZW5zaW9uVHlwZX0gdHlwZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gcGF0aFRvRXh0ZW5zaW9uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPG9iamVjdD59XG4gICAqL1xuICBhc3luYyAoYXBwaXVtSG9tZSwgdHlwZSwgcGF0aFRvRXh0ZW5zaW9uKSA9PlxuICAgIGF3YWl0IHJ1bkFwcGl1bUpzb24oYXBwaXVtSG9tZSwgW1xuICAgICAgdHlwZSxcbiAgICAgICdpbnN0YWxsJyxcbiAgICAgICctLXNvdXJjZScsXG4gICAgICAnbG9jYWwnLFxuICAgICAgcGF0aFRvRXh0ZW5zaW9uLFxuICAgIF0pLFxuKTtcblxuLyoqXG4gKiBPcHRpb25zIGZvciB7QGxpbmsgcnVuQXBwaXVtfS5cbiAqIEBwcml2YXRlXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBSdW5BcHBpdW1PcHRpb25zXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IFtyYXddIC0gV2hldGhlciB0byByZXR1cm4gdGhlIHJhdyBvdXRwdXQgZnJvbSBgdGVlbl9wcm9jZXNzYFxuICovXG5cblxuLyoqXG4gKiBFcnJvciB0aHJvd24gYnkgYWxsIG9mIHRoZSBmdW5jdGlvbnMgaW4gdGhpcyBmaWxlIHdoaWNoIGV4ZWN1dGUgYGFwcGl1bWAuXG4gKiBAdHlwZWRlZiB7RXJyb3IgJiBBcHBpdW1SdW5FcnJvclByb3BzICYgaW1wb3J0KCcuLi8uLi9saWIvY2xpL25wbScpLlRlZW5Qcm9jZXNzRXhlY0Vycm9yUHJvcHN9IEFwcGl1bVJ1bkVycm9yXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCcuLi8uLi9saWIvY2xpL25wbScpLlRlZW5Qcm9jZXNzRXhlY1Jlc3VsdH0gVGVlblByb2Nlc3NFeGVjUmVzdWx0XG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7aW1wb3J0KCcuLi8uLi9saWIvY2xpL25wbScpLlRlZW5Qcm9jZXNzRXhlY0Vycm9yfSBUZWVuUHJvY2Vzc0V4ZWNFcnJvclxuICovXG5cbi8qKlxuICogV3JhcHMgdGhlIGVycm9yIHJldHVybmVkIGJ5IHtAbGluayBleGVjfS5cbiAqIEB0eXBlZGVmIHtPYmplY3R9IEFwcGl1bVJ1bkVycm9yUHJvcHNcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBvcmlnaW5hbE1lc3NhZ2UgLSBPcmlnaW5hbCBlcnJvciBtZXNzYWdlXG4gKiBAcHJvcGVydHkge3N0cmluZ30gY29tbWFuZCAtIENvbW1hbmQgdGhhdCB3YXMgcnVuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gZW52IC0gRW52aXJvbm1lbnQgdmFyaWFibGVzXG4gKiBAcHJvcGVydHkge3N0cmluZ30gY3dkIC0gQ3VycmVudCB3b3JraW5nIGRpcmVjdG9yeVxuICovXG4iXSwiZmlsZSI6InRlc3QvY2xpL2NsaS1oZWxwZXJzLmpzIiwic291cmNlUm9vdCI6Ii4uLy4uLy4uIn0=
@@ -1,71 +0,0 @@
1
- "use strict";
2
-
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
-
5
- require("source-map-support/register");
6
-
7
- var _extensionConfig = require("../../lib/extension-config");
8
-
9
- var _driverConfig = _interopRequireDefault(require("../../lib/driver-config"));
10
-
11
- var _driverCommand = _interopRequireDefault(require("../../lib/cli/driver-command"));
12
-
13
- var _sinon = _interopRequireDefault(require("sinon"));
14
-
15
- describe('DriverCommand', function () {
16
- const config = new _driverConfig.default(_extensionConfig.DEFAULT_APPIUM_HOME);
17
- const driver = 'fake';
18
- const pkgName = '@appium/fake-driver';
19
- config.installedExtensions = {
20
- [driver]: {
21
- version: '1.0.0',
22
- pkgName
23
- }
24
- };
25
- const dc = new _driverCommand.default({
26
- config,
27
- json: true
28
- });
29
- describe('#checkForExtensionUpdate', function () {
30
- let npmMock;
31
- beforeEach(function () {
32
- npmMock = _sinon.default.mock(dc.npm);
33
- });
34
-
35
- function setupDriverUpdate(curVersion, latestVersion, latestSafeVersion) {
36
- npmMock.expects('getLatestVersion').once().withExactArgs(pkgName).returns(latestVersion);
37
- npmMock.expects('getLatestSafeUpgradeVersion').once().withExactArgs(pkgName, curVersion).returns(latestSafeVersion);
38
- }
39
-
40
- it('should not return an unsafe update if it is same as safe update', async function () {
41
- setupDriverUpdate('1.0.0', '1.1.0', '1.1.0');
42
- await dc.checkForExtensionUpdate('fake').should.eventually.eql({
43
- current: '1.0.0',
44
- safeUpdate: '1.1.0',
45
- unsafeUpdate: null
46
- });
47
- npmMock.verify();
48
- });
49
- it('should not return a safe update if there is not one', async function () {
50
- setupDriverUpdate('1.0.0', '2.0.0', null);
51
- await dc.checkForExtensionUpdate('fake').should.eventually.eql({
52
- current: '1.0.0',
53
- safeUpdate: null,
54
- unsafeUpdate: '2.0.0'
55
- });
56
- npmMock.verify();
57
- });
58
- it('should return both safe and unsafe update', async function () {
59
- setupDriverUpdate('1.0.0', '2.0.0', '1.5.3');
60
- await dc.checkForExtensionUpdate('fake').should.eventually.eql({
61
- current: '1.0.0',
62
- safeUpdate: '1.5.3',
63
- unsafeUpdate: '2.0.0'
64
- });
65
- npmMock.verify();
66
- });
67
- });
68
- });require('source-map-support').install();
69
-
70
-
71
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInRlc3QvY2xpL2NsaS1zcGVjcy5qcyJdLCJuYW1lcyI6WyJkZXNjcmliZSIsImNvbmZpZyIsIkRyaXZlckNvbmZpZyIsIkRFRkFVTFRfQVBQSVVNX0hPTUUiLCJkcml2ZXIiLCJwa2dOYW1lIiwiaW5zdGFsbGVkRXh0ZW5zaW9ucyIsInZlcnNpb24iLCJkYyIsIkRyaXZlckNvbW1hbmQiLCJqc29uIiwibnBtTW9jayIsImJlZm9yZUVhY2giLCJzaW5vbiIsIm1vY2siLCJucG0iLCJzZXR1cERyaXZlclVwZGF0ZSIsImN1clZlcnNpb24iLCJsYXRlc3RWZXJzaW9uIiwibGF0ZXN0U2FmZVZlcnNpb24iLCJleHBlY3RzIiwib25jZSIsIndpdGhFeGFjdEFyZ3MiLCJyZXR1cm5zIiwiaXQiLCJjaGVja0ZvckV4dGVuc2lvblVwZGF0ZSIsInNob3VsZCIsImV2ZW50dWFsbHkiLCJlcWwiLCJjdXJyZW50Iiwic2FmZVVwZGF0ZSIsInVuc2FmZVVwZGF0ZSIsInZlcmlmeSJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBRUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBR0FBLFFBQVEsQ0FBQyxlQUFELEVBQWtCLFlBQVk7QUFDcEMsUUFBTUMsTUFBTSxHQUFHLElBQUlDLHFCQUFKLENBQWlCQyxvQ0FBakIsQ0FBZjtBQUNBLFFBQU1DLE1BQU0sR0FBRyxNQUFmO0FBQ0EsUUFBTUMsT0FBTyxHQUFHLHFCQUFoQjtBQUNBSixFQUFBQSxNQUFNLENBQUNLLG1CQUFQLEdBQTZCO0FBQUMsS0FBQ0YsTUFBRCxHQUFVO0FBQUNHLE1BQUFBLE9BQU8sRUFBRSxPQUFWO0FBQW1CRixNQUFBQTtBQUFuQjtBQUFYLEdBQTdCO0FBQ0EsUUFBTUcsRUFBRSxHQUFHLElBQUlDLHNCQUFKLENBQWtCO0FBQUNSLElBQUFBLE1BQUQ7QUFBU1MsSUFBQUEsSUFBSSxFQUFFO0FBQWYsR0FBbEIsQ0FBWDtBQUVBVixFQUFBQSxRQUFRLENBQUMsMEJBQUQsRUFBNkIsWUFBWTtBQUMvQyxRQUFJVyxPQUFKO0FBRUFDLElBQUFBLFVBQVUsQ0FBQyxZQUFZO0FBQ3JCRCxNQUFBQSxPQUFPLEdBQUdFLGVBQU1DLElBQU4sQ0FBV04sRUFBRSxDQUFDTyxHQUFkLENBQVY7QUFDRCxLQUZTLENBQVY7O0FBSUEsYUFBU0MsaUJBQVQsQ0FBNEJDLFVBQTVCLEVBQXdDQyxhQUF4QyxFQUF1REMsaUJBQXZELEVBQTBFO0FBQ3hFUixNQUFBQSxPQUFPLENBQUNTLE9BQVIsQ0FBZ0Isa0JBQWhCLEVBQ0dDLElBREgsR0FFR0MsYUFGSCxDQUVpQmpCLE9BRmpCLEVBR0drQixPQUhILENBR1dMLGFBSFg7QUFJQVAsTUFBQUEsT0FBTyxDQUFDUyxPQUFSLENBQWdCLDZCQUFoQixFQUNHQyxJQURILEdBRUdDLGFBRkgsQ0FFaUJqQixPQUZqQixFQUUwQlksVUFGMUIsRUFHR00sT0FISCxDQUdXSixpQkFIWDtBQUlEOztBQUVESyxJQUFBQSxFQUFFLENBQUMsaUVBQUQsRUFBb0Usa0JBQWtCO0FBQ3RGUixNQUFBQSxpQkFBaUIsQ0FBQyxPQUFELEVBQVUsT0FBVixFQUFtQixPQUFuQixDQUFqQjtBQUNBLFlBQU1SLEVBQUUsQ0FBQ2lCLHVCQUFILENBQTJCLE1BQTNCLEVBQW1DQyxNQUFuQyxDQUEwQ0MsVUFBMUMsQ0FBcURDLEdBQXJELENBQXlEO0FBQzdEQyxRQUFBQSxPQUFPLEVBQUUsT0FEb0Q7QUFFN0RDLFFBQUFBLFVBQVUsRUFBRSxPQUZpRDtBQUc3REMsUUFBQUEsWUFBWSxFQUFFO0FBSCtDLE9BQXpELENBQU47QUFLQXBCLE1BQUFBLE9BQU8sQ0FBQ3FCLE1BQVI7QUFDRCxLQVJDLENBQUY7QUFVQVIsSUFBQUEsRUFBRSxDQUFDLHFEQUFELEVBQXdELGtCQUFrQjtBQUMxRVIsTUFBQUEsaUJBQWlCLENBQUMsT0FBRCxFQUFVLE9BQVYsRUFBbUIsSUFBbkIsQ0FBakI7QUFDQSxZQUFNUixFQUFFLENBQUNpQix1QkFBSCxDQUEyQixNQUEzQixFQUFtQ0MsTUFBbkMsQ0FBMENDLFVBQTFDLENBQXFEQyxHQUFyRCxDQUF5RDtBQUM3REMsUUFBQUEsT0FBTyxFQUFFLE9BRG9EO0FBRTdEQyxRQUFBQSxVQUFVLEVBQUUsSUFGaUQ7QUFHN0RDLFFBQUFBLFlBQVksRUFBRTtBQUgrQyxPQUF6RCxDQUFOO0FBS0FwQixNQUFBQSxPQUFPLENBQUNxQixNQUFSO0FBQ0QsS0FSQyxDQUFGO0FBVUFSLElBQUFBLEVBQUUsQ0FBQywyQ0FBRCxFQUE4QyxrQkFBa0I7QUFDaEVSLE1BQUFBLGlCQUFpQixDQUFDLE9BQUQsRUFBVSxPQUFWLEVBQW1CLE9BQW5CLENBQWpCO0FBQ0EsWUFBTVIsRUFBRSxDQUFDaUIsdUJBQUgsQ0FBMkIsTUFBM0IsRUFBbUNDLE1BQW5DLENBQTBDQyxVQUExQyxDQUFxREMsR0FBckQsQ0FBeUQ7QUFDN0RDLFFBQUFBLE9BQU8sRUFBRSxPQURvRDtBQUU3REMsUUFBQUEsVUFBVSxFQUFFLE9BRmlEO0FBRzdEQyxRQUFBQSxZQUFZLEVBQUU7QUFIK0MsT0FBekQsQ0FBTjtBQUtBcEIsTUFBQUEsT0FBTyxDQUFDcUIsTUFBUjtBQUNELEtBUkMsQ0FBRjtBQVNELEdBL0NPLENBQVI7QUFnREQsQ0F2RE8sQ0FBUiIsInNvdXJjZXNDb250ZW50IjpbIi8vIHRyYW5zcGlsZTptb2NoYVxuXG5pbXBvcnQgeyBERUZBVUxUX0FQUElVTV9IT01FIH0gZnJvbSAnLi4vLi4vbGliL2V4dGVuc2lvbi1jb25maWcnO1xuaW1wb3J0IERyaXZlckNvbmZpZyBmcm9tICcuLi8uLi9saWIvZHJpdmVyLWNvbmZpZyc7XG5pbXBvcnQgRHJpdmVyQ29tbWFuZCBmcm9tICcuLi8uLi9saWIvY2xpL2RyaXZlci1jb21tYW5kJztcbmltcG9ydCBzaW5vbiBmcm9tICdzaW5vbic7XG5cblxuZGVzY3JpYmUoJ0RyaXZlckNvbW1hbmQnLCBmdW5jdGlvbiAoKSB7XG4gIGNvbnN0IGNvbmZpZyA9IG5ldyBEcml2ZXJDb25maWcoREVGQVVMVF9BUFBJVU1fSE9NRSk7XG4gIGNvbnN0IGRyaXZlciA9ICdmYWtlJztcbiAgY29uc3QgcGtnTmFtZSA9ICdAYXBwaXVtL2Zha2UtZHJpdmVyJztcbiAgY29uZmlnLmluc3RhbGxlZEV4dGVuc2lvbnMgPSB7W2RyaXZlcl06IHt2ZXJzaW9uOiAnMS4wLjAnLCBwa2dOYW1lfX07XG4gIGNvbnN0IGRjID0gbmV3IERyaXZlckNvbW1hbmQoe2NvbmZpZywganNvbjogdHJ1ZX0pO1xuXG4gIGRlc2NyaWJlKCcjY2hlY2tGb3JFeHRlbnNpb25VcGRhdGUnLCBmdW5jdGlvbiAoKSB7XG4gICAgbGV0IG5wbU1vY2s7XG5cbiAgICBiZWZvcmVFYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIG5wbU1vY2sgPSBzaW5vbi5tb2NrKGRjLm5wbSk7XG4gICAgfSk7XG5cbiAgICBmdW5jdGlvbiBzZXR1cERyaXZlclVwZGF0ZSAoY3VyVmVyc2lvbiwgbGF0ZXN0VmVyc2lvbiwgbGF0ZXN0U2FmZVZlcnNpb24pIHtcbiAgICAgIG5wbU1vY2suZXhwZWN0cygnZ2V0TGF0ZXN0VmVyc2lvbicpXG4gICAgICAgIC5vbmNlKClcbiAgICAgICAgLndpdGhFeGFjdEFyZ3MocGtnTmFtZSlcbiAgICAgICAgLnJldHVybnMobGF0ZXN0VmVyc2lvbik7XG4gICAgICBucG1Nb2NrLmV4cGVjdHMoJ2dldExhdGVzdFNhZmVVcGdyYWRlVmVyc2lvbicpXG4gICAgICAgIC5vbmNlKClcbiAgICAgICAgLndpdGhFeGFjdEFyZ3MocGtnTmFtZSwgY3VyVmVyc2lvbilcbiAgICAgICAgLnJldHVybnMobGF0ZXN0U2FmZVZlcnNpb24pO1xuICAgIH1cblxuICAgIGl0KCdzaG91bGQgbm90IHJldHVybiBhbiB1bnNhZmUgdXBkYXRlIGlmIGl0IGlzIHNhbWUgYXMgc2FmZSB1cGRhdGUnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBzZXR1cERyaXZlclVwZGF0ZSgnMS4wLjAnLCAnMS4xLjAnLCAnMS4xLjAnKTtcbiAgICAgIGF3YWl0IGRjLmNoZWNrRm9yRXh0ZW5zaW9uVXBkYXRlKCdmYWtlJykuc2hvdWxkLmV2ZW50dWFsbHkuZXFsKHtcbiAgICAgICAgY3VycmVudDogJzEuMC4wJyxcbiAgICAgICAgc2FmZVVwZGF0ZTogJzEuMS4wJyxcbiAgICAgICAgdW5zYWZlVXBkYXRlOiBudWxsLFxuICAgICAgfSk7XG4gICAgICBucG1Nb2NrLnZlcmlmeSgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBub3QgcmV0dXJuIGEgc2FmZSB1cGRhdGUgaWYgdGhlcmUgaXMgbm90IG9uZScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIHNldHVwRHJpdmVyVXBkYXRlKCcxLjAuMCcsICcyLjAuMCcsIG51bGwpO1xuICAgICAgYXdhaXQgZGMuY2hlY2tGb3JFeHRlbnNpb25VcGRhdGUoJ2Zha2UnKS5zaG91bGQuZXZlbnR1YWxseS5lcWwoe1xuICAgICAgICBjdXJyZW50OiAnMS4wLjAnLFxuICAgICAgICBzYWZlVXBkYXRlOiBudWxsLFxuICAgICAgICB1bnNhZmVVcGRhdGU6ICcyLjAuMCcsXG4gICAgICB9KTtcbiAgICAgIG5wbU1vY2sudmVyaWZ5KCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJldHVybiBib3RoIHNhZmUgYW5kIHVuc2FmZSB1cGRhdGUnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBzZXR1cERyaXZlclVwZGF0ZSgnMS4wLjAnLCAnMi4wLjAnLCAnMS41LjMnKTtcbiAgICAgIGF3YWl0IGRjLmNoZWNrRm9yRXh0ZW5zaW9uVXBkYXRlKCdmYWtlJykuc2hvdWxkLmV2ZW50dWFsbHkuZXFsKHtcbiAgICAgICAgY3VycmVudDogJzEuMC4wJyxcbiAgICAgICAgc2FmZVVwZGF0ZTogJzEuNS4zJyxcbiAgICAgICAgdW5zYWZlVXBkYXRlOiAnMi4wLjAnLFxuICAgICAgfSk7XG4gICAgICBucG1Nb2NrLnZlcmlmeSgpO1xuICAgIH0pO1xuICB9KTtcbn0pO1xuIl0sImZpbGUiOiJ0ZXN0L2NsaS9jbGktc3BlY3MuanMiLCJzb3VyY2VSb290IjoiLi4vLi4vLi4ifQ==
@@ -1,27 +0,0 @@
1
- {
2
- "name": "test-driver",
3
- "version": "1.0",
4
- "private": true,
5
- "appium": {
6
- "driverName": "test",
7
- "automationName": "Test",
8
- "platformNames": [
9
- "Test"
10
- ],
11
- "mainClass": "TestDriver",
12
- "schema": {
13
- "type": "object",
14
- "properties": {
15
- "mcmonkey-mcbean": {
16
- "type": "string",
17
- "appiumCliIgnored": true
18
- },
19
- "oliver-boliver": {
20
- "type": "number",
21
- "appiumDeprecated": true,
22
- "description": "funkytelechy"
23
- }
24
- }
25
- }
26
- }
27
- }
@@ -1,48 +0,0 @@
1
- "use strict";
2
-
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
-
5
- require("source-map-support/register");
6
-
7
- var _helpers = require("../helpers");
8
-
9
- var _sinon = _interopRequireDefault(require("sinon"));
10
-
11
- var _schema = require("../../lib/schema/schema");
12
-
13
- const expect = chai.expect;
14
- describe('cli/schema-args', function () {
15
- let schemaArgs;
16
- let sandbox;
17
- beforeEach(function () {
18
- sandbox = _sinon.default.createSandbox();
19
- schemaArgs = _helpers.rewiremock.proxy(() => require('../../lib/schema/cli-args'));
20
- });
21
- afterEach(function () {
22
- sandbox.restore();
23
- });
24
- describe('toParserArgs()', function () {
25
- describe('when called with no parameters', function () {
26
- beforeEach(_schema.finalizeSchema);
27
- afterEach(_schema.resetSchema);
28
- it('should return a Map', function () {
29
- expect(schemaArgs.toParserArgs()).to.be.an.instanceof(Map).and.have.property('size').that.is.above(0);
30
- });
31
- it('should generate metavars in SCREAMING_SNAKE_CASE', function () {
32
- const argDefs = schemaArgs.toParserArgs();
33
- const argDefsWithMetavar = [...argDefs].filter(arg => arg[1].metavar);
34
- expect(argDefsWithMetavar).not.to.be.empty;
35
- expect(argDefsWithMetavar.every(arg => /[A-Z_]+/.test(arg[1].metavar))).to.be.true;
36
- });
37
- });
38
- describe('when schema has not yet been compiled', function () {
39
- it('should throw', function () {
40
- (0, _schema.resetSchema)();
41
- expect(() => schemaArgs.toParserArgs()).to.throw(_schema.SchemaFinalizationError);
42
- });
43
- });
44
- });
45
- });require('source-map-support').install();
46
-
47
-
48
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInRlc3QvY2xpL3NjaGVtYS1hcmdzLXNwZWNzLmpzIl0sIm5hbWVzIjpbImV4cGVjdCIsImNoYWkiLCJkZXNjcmliZSIsInNjaGVtYUFyZ3MiLCJzYW5kYm94IiwiYmVmb3JlRWFjaCIsInNpbm9uIiwiY3JlYXRlU2FuZGJveCIsInJld2lyZW1vY2siLCJwcm94eSIsInJlcXVpcmUiLCJhZnRlckVhY2giLCJyZXN0b3JlIiwiZmluYWxpemVTY2hlbWEiLCJyZXNldFNjaGVtYSIsIml0IiwidG9QYXJzZXJBcmdzIiwidG8iLCJiZSIsImFuIiwiaW5zdGFuY2VvZiIsIk1hcCIsImFuZCIsImhhdmUiLCJwcm9wZXJ0eSIsInRoYXQiLCJpcyIsImFib3ZlIiwiYXJnRGVmcyIsImFyZ0RlZnNXaXRoTWV0YXZhciIsImZpbHRlciIsImFyZyIsIm1ldGF2YXIiLCJub3QiLCJlbXB0eSIsImV2ZXJ5IiwidGVzdCIsInRydWUiLCJ0aHJvdyIsIlNjaGVtYUZpbmFsaXphdGlvbkVycm9yIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFFQSxNQUFNQSxNQUFNLEdBQUdDLElBQUksQ0FBQ0QsTUFBcEI7QUFFQUUsUUFBUSxDQUFDLGlCQUFELEVBQW9CLFlBQVk7QUFFdEMsTUFBSUMsVUFBSjtBQUtBLE1BQUlDLE9BQUo7QUFFQUMsRUFBQUEsVUFBVSxDQUFDLFlBQVk7QUFDckJELElBQUFBLE9BQU8sR0FBR0UsZUFBTUMsYUFBTixFQUFWO0FBQ0FKLElBQUFBLFVBQVUsR0FBR0ssb0JBQVdDLEtBQVgsQ0FBaUIsTUFBTUMsT0FBTyxDQUFDLDJCQUFELENBQTlCLENBQWI7QUFDRCxHQUhTLENBQVY7QUFLQUMsRUFBQUEsU0FBUyxDQUFDLFlBQVk7QUFDcEJQLElBQUFBLE9BQU8sQ0FBQ1EsT0FBUjtBQUNELEdBRlEsQ0FBVDtBQUlBVixFQUFBQSxRQUFRLENBQUMsZ0JBQUQsRUFBbUIsWUFBWTtBQUNyQ0EsSUFBQUEsUUFBUSxDQUFDLGdDQUFELEVBQW1DLFlBQVk7QUFDckRHLE1BQUFBLFVBQVUsQ0FBQ1Esc0JBQUQsQ0FBVjtBQUVBRixNQUFBQSxTQUFTLENBQUNHLG1CQUFELENBQVQ7QUFFQUMsTUFBQUEsRUFBRSxDQUFDLHFCQUFELEVBQXdCLFlBQVk7QUFDcENmLFFBQUFBLE1BQU0sQ0FBQ0csVUFBVSxDQUFDYSxZQUFYLEVBQUQsQ0FBTixDQUFrQ0MsRUFBbEMsQ0FBcUNDLEVBQXJDLENBQXdDQyxFQUF4QyxDQUEyQ0MsVUFBM0MsQ0FBc0RDLEdBQXRELEVBQTJEQyxHQUEzRCxDQUErREMsSUFBL0QsQ0FBb0VDLFFBQXBFLENBQTZFLE1BQTdFLEVBQXFGQyxJQUFyRixDQUEwRkMsRUFBMUYsQ0FBNkZDLEtBQTdGLENBQW1HLENBQW5HO0FBQ0QsT0FGQyxDQUFGO0FBSUFaLE1BQUFBLEVBQUUsQ0FBQyxrREFBRCxFQUFxRCxZQUFZO0FBQ2pFLGNBQU1hLE9BQU8sR0FBR3pCLFVBQVUsQ0FBQ2EsWUFBWCxFQUFoQjtBQUNBLGNBQU1hLGtCQUFrQixHQUFHLENBQUMsR0FBR0QsT0FBSixFQUFhRSxNQUFiLENBQXFCQyxHQUFELElBQVNBLEdBQUcsQ0FBQyxDQUFELENBQUgsQ0FBT0MsT0FBcEMsQ0FBM0I7QUFDQWhDLFFBQUFBLE1BQU0sQ0FBQzZCLGtCQUFELENBQU4sQ0FBMkJJLEdBQTNCLENBQStCaEIsRUFBL0IsQ0FBa0NDLEVBQWxDLENBQXFDZ0IsS0FBckM7QUFFQWxDLFFBQUFBLE1BQU0sQ0FDSjZCLGtCQUFrQixDQUFDTSxLQUFuQixDQUEwQkosR0FBRCxJQUFTLFVBQVVLLElBQVYsQ0FBZUwsR0FBRyxDQUFDLENBQUQsQ0FBSCxDQUFPQyxPQUF0QixDQUFsQyxDQURJLENBQU4sQ0FFRWYsRUFGRixDQUVLQyxFQUZMLENBRVFtQixJQUZSO0FBR0QsT0FSQyxDQUFGO0FBU0QsS0FsQk8sQ0FBUjtBQW9CQW5DLElBQUFBLFFBQVEsQ0FBQyx1Q0FBRCxFQUEwQyxZQUFZO0FBQzVEYSxNQUFBQSxFQUFFLENBQUMsY0FBRCxFQUFpQixZQUFZO0FBQzdCO0FBQ0FmLFFBQUFBLE1BQU0sQ0FBQyxNQUFNRyxVQUFVLENBQUNhLFlBQVgsRUFBUCxDQUFOLENBQXdDQyxFQUF4QyxDQUEyQ3FCLEtBQTNDLENBQ0VDLCtCQURGO0FBR0QsT0FMQyxDQUFGO0FBTUQsS0FQTyxDQUFSO0FBUUQsR0E3Qk8sQ0FBUjtBQThCRCxDQWhETyxDQUFSIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtyZXdpcmVtb2NrfSBmcm9tICcuLi9oZWxwZXJzJztcbmltcG9ydCBzaW5vbiBmcm9tICdzaW5vbic7XG5pbXBvcnQge2ZpbmFsaXplU2NoZW1hLCByZXNldFNjaGVtYSwgU2NoZW1hRmluYWxpemF0aW9uRXJyb3J9IGZyb20gJy4uLy4uL2xpYi9zY2hlbWEvc2NoZW1hJztcblxuY29uc3QgZXhwZWN0ID0gY2hhaS5leHBlY3Q7XG5cbmRlc2NyaWJlKCdjbGkvc2NoZW1hLWFyZ3MnLCBmdW5jdGlvbiAoKSB7XG4gIC8qKiBAdHlwZSB7aW1wb3J0KCcuLi8uLi9saWIvc2NoZW1hL2NsaS1hcmdzJyl9ICovXG4gIGxldCBzY2hlbWFBcmdzO1xuXG4gIC8qKlxuICAgKiBAdHlwZSB7aW1wb3J0KCdzaW5vbicpLlNpbm9uU2FuZGJveH1cbiAgICovXG4gIGxldCBzYW5kYm94O1xuXG4gIGJlZm9yZUVhY2goZnVuY3Rpb24gKCkge1xuICAgIHNhbmRib3ggPSBzaW5vbi5jcmVhdGVTYW5kYm94KCk7XG4gICAgc2NoZW1hQXJncyA9IHJld2lyZW1vY2sucHJveHkoKCkgPT4gcmVxdWlyZSgnLi4vLi4vbGliL3NjaGVtYS9jbGktYXJncycpKTtcbiAgfSk7XG5cbiAgYWZ0ZXJFYWNoKGZ1bmN0aW9uICgpIHtcbiAgICBzYW5kYm94LnJlc3RvcmUoKTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ3RvUGFyc2VyQXJncygpJywgZnVuY3Rpb24gKCkge1xuICAgIGRlc2NyaWJlKCd3aGVuIGNhbGxlZCB3aXRoIG5vIHBhcmFtZXRlcnMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBiZWZvcmVFYWNoKGZpbmFsaXplU2NoZW1hKTtcblxuICAgICAgYWZ0ZXJFYWNoKHJlc2V0U2NoZW1hKTtcblxuICAgICAgaXQoJ3Nob3VsZCByZXR1cm4gYSBNYXAnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGV4cGVjdChzY2hlbWFBcmdzLnRvUGFyc2VyQXJncygpKS50by5iZS5hbi5pbnN0YW5jZW9mKE1hcCkuYW5kLmhhdmUucHJvcGVydHkoJ3NpemUnKS50aGF0LmlzLmFib3ZlKDApO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgZ2VuZXJhdGUgbWV0YXZhcnMgaW4gU0NSRUFNSU5HX1NOQUtFX0NBU0UnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IGFyZ0RlZnMgPSBzY2hlbWFBcmdzLnRvUGFyc2VyQXJncygpO1xuICAgICAgICBjb25zdCBhcmdEZWZzV2l0aE1ldGF2YXIgPSBbLi4uYXJnRGVmc10uZmlsdGVyKChhcmcpID0+IGFyZ1sxXS5tZXRhdmFyKTtcbiAgICAgICAgZXhwZWN0KGFyZ0RlZnNXaXRoTWV0YXZhcikubm90LnRvLmJlLmVtcHR5O1xuICAgICAgICAvLyBpcyB0aGVyZSBhIG1vcmUgaWRpb21hdGljIHdheSB0byBkbyB0aGlzP1xuICAgICAgICBleHBlY3QoXG4gICAgICAgICAgYXJnRGVmc1dpdGhNZXRhdmFyLmV2ZXJ5KChhcmcpID0+IC9bQS1aX10rLy50ZXN0KGFyZ1sxXS5tZXRhdmFyKSksXG4gICAgICAgICkudG8uYmUudHJ1ZTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ3doZW4gc2NoZW1hIGhhcyBub3QgeWV0IGJlZW4gY29tcGlsZWQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBpdCgnc2hvdWxkIHRocm93JywgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXNldFNjaGVtYSgpO1xuICAgICAgICBleHBlY3QoKCkgPT4gc2NoZW1hQXJncy50b1BhcnNlckFyZ3MoKSkudG8udGhyb3coXG4gICAgICAgICAgU2NoZW1hRmluYWxpemF0aW9uRXJyb3JcbiAgICAgICAgKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9KTtcbn0pO1xuIl0sImZpbGUiOiJ0ZXN0L2NsaS9zY2hlbWEtYXJncy1zcGVjcy5qcyIsInNvdXJjZVJvb3QiOiIuLi8uLi8uLiJ9
@@ -1,47 +0,0 @@
1
- "use strict";
2
-
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
-
5
- require("source-map-support/register");
6
-
7
- var _path = _interopRequireDefault(require("path"));
8
-
9
- var _support = require("@appium/support");
10
-
11
- var _cliHelpers = require("./cli-helpers");
12
-
13
- const {
14
- expect
15
- } = chai;
16
- describe('CLI behavior controlled by schema', function () {
17
- let appiumHome;
18
- before(async function () {
19
- appiumHome = await _support.tempDir.openDir();
20
- });
21
- after(async function () {
22
- await _support.fs.rimraf(appiumHome);
23
- });
24
- describe('keyword', function () {
25
- let help;
26
- before(async function () {
27
- await (0, _cliHelpers.installLocalExtension)(appiumHome, 'driver', _path.default.join(__dirname, 'fixtures', 'test-driver'));
28
- help = await (0, _cliHelpers.runAppium)(appiumHome, ['server', '--help']);
29
- });
30
- describe('appiumCliIgnored', function () {
31
- it('should still support arguments without this keyword', function () {
32
- expect(help).to.match(/oliver-boliver/);
33
- });
34
- it('should cause the argument to be suppressed', function () {
35
- expect(help).not.to.match(/mcmonkey-mcbean/);
36
- });
37
- });
38
- describe('appiumDeprecated', function () {
39
- it('should mark the argument as deprecated', function () {
40
- expect(help).to.match(/\[DEPRECATED\] funkytelechy/);
41
- });
42
- });
43
- });
44
- });require('source-map-support').install();
45
-
46
-
47
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInRlc3QvY2xpL3NjaGVtYS1lMmUtc3BlY3MuanMiXSwibmFtZXMiOlsiZXhwZWN0IiwiY2hhaSIsImRlc2NyaWJlIiwiYXBwaXVtSG9tZSIsImJlZm9yZSIsInRlbXBEaXIiLCJvcGVuRGlyIiwiYWZ0ZXIiLCJmcyIsInJpbXJhZiIsImhlbHAiLCJwYXRoIiwiam9pbiIsIl9fZGlybmFtZSIsIml0IiwidG8iLCJtYXRjaCIsIm5vdCJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBRUEsTUFBTTtBQUFDQSxFQUFBQTtBQUFELElBQVdDLElBQWpCO0FBRUFDLFFBQVEsQ0FBQyxtQ0FBRCxFQUFzQyxZQUFZO0FBSXhELE1BQUlDLFVBQUo7QUFFQUMsRUFBQUEsTUFBTSxDQUFDLGtCQUFrQjtBQUN2QkQsSUFBQUEsVUFBVSxHQUFHLE1BQU1FLGlCQUFRQyxPQUFSLEVBQW5CO0FBQ0QsR0FGSyxDQUFOO0FBSUFDLEVBQUFBLEtBQUssQ0FBQyxrQkFBa0I7QUFDdEIsVUFBTUMsWUFBR0MsTUFBSCxDQUFVTixVQUFWLENBQU47QUFDRCxHQUZJLENBQUw7QUFJQUQsRUFBQUEsUUFBUSxDQUFDLFNBQUQsRUFBWSxZQUFZO0FBSTlCLFFBQUlRLElBQUo7QUFFQU4sSUFBQUEsTUFBTSxDQUFDLGtCQUFrQjtBQUN2QixZQUFNLHVDQUNKRCxVQURJLEVBRUosUUFGSSxFQUdKUSxjQUFLQyxJQUFMLENBQVVDLFNBQVYsRUFBcUIsVUFBckIsRUFBaUMsYUFBakMsQ0FISSxDQUFOO0FBS0FILE1BQUFBLElBQUksR0FBRyxNQUFNLDJCQUFVUCxVQUFWLEVBQXNCLENBQUMsUUFBRCxFQUFXLFFBQVgsQ0FBdEIsQ0FBYjtBQUNELEtBUEssQ0FBTjtBQVNBRCxJQUFBQSxRQUFRLENBQUMsa0JBQUQsRUFBcUIsWUFBWTtBQUN2Q1ksTUFBQUEsRUFBRSxDQUFDLHFEQUFELEVBQXdELFlBQVk7QUFDcEVkLFFBQUFBLE1BQU0sQ0FBQ1UsSUFBRCxDQUFOLENBQWFLLEVBQWIsQ0FBZ0JDLEtBQWhCLENBQXNCLGdCQUF0QjtBQUNELE9BRkMsQ0FBRjtBQUlBRixNQUFBQSxFQUFFLENBQUMsNENBQUQsRUFBK0MsWUFBWTtBQUMzRGQsUUFBQUEsTUFBTSxDQUFDVSxJQUFELENBQU4sQ0FBYU8sR0FBYixDQUFpQkYsRUFBakIsQ0FBb0JDLEtBQXBCLENBQTBCLGlCQUExQjtBQUNELE9BRkMsQ0FBRjtBQUdELEtBUk8sQ0FBUjtBQVVBZCxJQUFBQSxRQUFRLENBQUMsa0JBQUQsRUFBcUIsWUFBWTtBQUN2Q1ksTUFBQUEsRUFBRSxDQUFDLHdDQUFELEVBQTJDLFlBQVk7QUFDdkRkLFFBQUFBLE1BQU0sQ0FBQ1UsSUFBRCxDQUFOLENBQWFLLEVBQWIsQ0FBZ0JDLEtBQWhCLENBQXNCLDZCQUF0QjtBQUNELE9BRkMsQ0FBRjtBQUdELEtBSk8sQ0FBUjtBQUtELEdBOUJPLENBQVI7QUErQkQsQ0E3Q08sQ0FBUiIsInNvdXJjZXNDb250ZW50IjpbIi8vIEB0cy1jaGVja1xuaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQge2ZzLCB0ZW1wRGlyfSBmcm9tICdAYXBwaXVtL3N1cHBvcnQnO1xuaW1wb3J0IHtpbnN0YWxsTG9jYWxFeHRlbnNpb24sIHJ1bkFwcGl1bX0gZnJvbSAnLi9jbGktaGVscGVycyc7XG5cbmNvbnN0IHtleHBlY3R9ID0gY2hhaTtcblxuZGVzY3JpYmUoJ0NMSSBiZWhhdmlvciBjb250cm9sbGVkIGJ5IHNjaGVtYScsIGZ1bmN0aW9uICgpIHtcbiAgLyoqXG4gICAqIEB0eXBlIHtzdHJpbmd9XG4gICAqL1xuICBsZXQgYXBwaXVtSG9tZTtcblxuICBiZWZvcmUoYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIGFwcGl1bUhvbWUgPSBhd2FpdCB0ZW1wRGlyLm9wZW5EaXIoKTtcbiAgfSk7XG5cbiAgYWZ0ZXIoYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIGF3YWl0IGZzLnJpbXJhZihhcHBpdW1Ib21lKTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2tleXdvcmQnLCBmdW5jdGlvbiAoKSB7XG4gICAgLyoqXG4gICAgICogQHR5cGUge3N0cmluZ31cbiAgICAgKi9cbiAgICBsZXQgaGVscDtcblxuICAgIGJlZm9yZShhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBhd2FpdCBpbnN0YWxsTG9jYWxFeHRlbnNpb24oXG4gICAgICAgIGFwcGl1bUhvbWUsXG4gICAgICAgICdkcml2ZXInLFxuICAgICAgICBwYXRoLmpvaW4oX19kaXJuYW1lLCAnZml4dHVyZXMnLCAndGVzdC1kcml2ZXInKSxcbiAgICAgICk7XG4gICAgICBoZWxwID0gYXdhaXQgcnVuQXBwaXVtKGFwcGl1bUhvbWUsIFsnc2VydmVyJywgJy0taGVscCddKTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdhcHBpdW1DbGlJZ25vcmVkJywgZnVuY3Rpb24gKCkge1xuICAgICAgaXQoJ3Nob3VsZCBzdGlsbCBzdXBwb3J0IGFyZ3VtZW50cyB3aXRob3V0IHRoaXMga2V5d29yZCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgZXhwZWN0KGhlbHApLnRvLm1hdGNoKC9vbGl2ZXItYm9saXZlci8pO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdzaG91bGQgY2F1c2UgdGhlIGFyZ3VtZW50IHRvIGJlIHN1cHByZXNzZWQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGV4cGVjdChoZWxwKS5ub3QudG8ubWF0Y2goL21jbW9ua2V5LW1jYmVhbi8pO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnYXBwaXVtRGVwcmVjYXRlZCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGl0KCdzaG91bGQgbWFyayB0aGUgYXJndW1lbnQgYXMgZGVwcmVjYXRlZCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgZXhwZWN0KGhlbHApLnRvLm1hdGNoKC9cXFtERVBSRUNBVEVEXFxdIGZ1bmt5dGVsZWNoeS8pO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xufSk7XG4iXSwiZmlsZSI6InRlc3QvY2xpL3NjaGVtYS1lMmUtc3BlY3MuanMiLCJzb3VyY2VSb290IjoiLi4vLi4vLi4ifQ==