agenticpool 1.0.9 → 1.0.11

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.
@@ -1,12 +1,9 @@
1
1
  "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
2
  Object.defineProperty(exports, "__esModule", { value: true });
6
3
  exports.registerHumansCommands = registerHumansCommands;
7
4
  const api_1 = require("../api");
8
5
  const config_1 = require("../config");
9
- const chalk_1 = __importDefault(require("chalk"));
6
+ const chalk = require('chalk');
10
7
  const DEFAULT_HUMANS_API_URL = 'https://us-central1-agenticpool-humans.cloudfunctions.net/api';
11
8
  function registerHumansCommands(program) {
12
9
  const humans = program.command('humans').description('Human account management commands');
@@ -20,11 +17,11 @@ function registerHumansCommands(program) {
20
17
  const config = await config_1.configManager.getGlobalConfig();
21
18
  const updated = { ...config, humanJwt: options.token, humanUid: options.uid, humanJwtExpiresAt: Date.now() + 3600 * 1000 };
22
19
  await config_1.configManager.saveGlobalConfig(updated);
23
- console.log(chalk_1.default.green('✓ Human credentials saved!'));
24
- console.log(chalk_1.default.gray('UID:'), options.uid);
20
+ console.log(chalk.green('✓ Human credentials saved!'));
21
+ console.log(chalk.gray('UID:'), options.uid);
25
22
  }
26
23
  catch (error) {
27
- console.error(chalk_1.default.red('Error:'), error instanceof Error ? error.message : 'Unknown error');
24
+ console.error(chalk.red('Error:'), error instanceof Error ? error.message : 'Unknown error');
28
25
  }
29
26
  });
30
27
  humans
@@ -37,10 +34,10 @@ function registerHumansCommands(program) {
37
34
  delete config.humanUid;
38
35
  delete config.humanJwtExpiresAt;
39
36
  await config_1.configManager.saveGlobalConfig(config);
40
- console.log(chalk_1.default.green('✓ Human credentials removed.'));
37
+ console.log(chalk.green('✓ Human credentials removed.'));
41
38
  }
42
39
  catch (error) {
43
- console.error(chalk_1.default.red('Error:'), error instanceof Error ? error.message : 'Unknown error');
40
+ console.error(chalk.red('Error:'), error instanceof Error ? error.message : 'Unknown error');
44
41
  }
45
42
  });
46
43
  humans
@@ -53,25 +50,58 @@ function registerHumansCommands(program) {
53
50
  const response = await client.get('/v1/profile');
54
51
  if (response.success && response.data) {
55
52
  const profile = response.data;
56
- console.log(chalk_1.default.cyan.bold(`\n${profile.displayName || 'No display name'}\n`));
57
- console.log(chalk_1.default.gray('UID:'), profile.uid);
53
+ console.log(chalk.cyan.bold(`\n${profile.displayName || 'No display name'}\n`));
54
+ console.log(chalk.gray('UID:'), profile.uid);
58
55
  if (profile.email)
59
- console.log(chalk_1.default.gray('Email:'), profile.email);
56
+ console.log(chalk.gray('Email:'), profile.email);
60
57
  if (profile.phone)
61
- console.log(chalk_1.default.gray('Phone:'), profile.phone);
58
+ console.log(chalk.gray('Phone:'), profile.phone);
62
59
  if (profile.telegram)
63
- console.log(chalk_1.default.gray('Telegram:'), profile.telegram);
60
+ console.log(chalk.gray('Telegram:'), profile.telegram);
64
61
  if (profile.photoUrl)
65
- console.log(chalk_1.default.gray('Photo:'), profile.photoUrl);
62
+ console.log(chalk.gray('Photo:'), profile.photoUrl);
66
63
  if (profile.notes)
67
- console.log(chalk_1.default.gray('Notes:'), profile.notes);
64
+ console.log(chalk.gray('Notes:'), profile.notes);
68
65
  }
69
66
  else {
70
- console.error(chalk_1.default.red('Error:'), response.error?.message || 'Failed to get profile');
67
+ console.error(chalk.red('Error:'), response.error?.message || 'Failed to get profile');
71
68
  }
72
69
  }
73
70
  catch (error) {
74
- console.error(chalk_1.default.red('Error:'), error instanceof Error ? error.message : 'Unknown error');
71
+ console.error(chalk.red('Error:'), error instanceof Error ? error.message : 'Unknown error');
72
+ }
73
+ });
74
+ humans
75
+ .command('push-profiles')
76
+ .description('Push locally stored agent profiles to humans API')
77
+ .action(async () => {
78
+ try {
79
+ const { client, humanUid } = await getHumanAuthenticatedClient();
80
+ const profiles = await config_1.configManager.getAllJSONProfiles();
81
+ const networkIds = Object.keys(profiles);
82
+ if (networkIds.length === 0) {
83
+ console.log(chalk.yellow('No local JSON profiles found. Run "profile build" first.'));
84
+ return;
85
+ }
86
+ console.log(chalk.cyan(`Pushing ${networkIds.length} profile(s) to humans API...\n`));
87
+ const payload = {
88
+ humanUid,
89
+ profiles: networkIds.map(networkId => ({
90
+ networkId,
91
+ ...profiles[networkId]
92
+ }))
93
+ };
94
+ const response = await client.post('/v1/profiles/push', payload);
95
+ if (response.success) {
96
+ console.log(chalk.green(`✓ Pushed ${networkIds.length} profile(s) successfully!`));
97
+ networkIds.forEach(id => console.log(chalk.gray(' -'), id));
98
+ }
99
+ else {
100
+ console.error(chalk.red('Error:'), response.error?.message || 'Failed to push profiles');
101
+ }
102
+ }
103
+ catch (error) {
104
+ console.error(chalk.red('Error:'), error instanceof Error ? error.message : 'Unknown error');
75
105
  }
76
106
  });
77
107
  humans
@@ -102,14 +132,14 @@ function registerHumansCommands(program) {
102
132
  body.notes = options.notes;
103
133
  const response = await client.put('/v1/profile', body);
104
134
  if (response.success) {
105
- console.log(chalk_1.default.green('✓ Profile updated!'));
135
+ console.log(chalk.green('✓ Profile updated!'));
106
136
  }
107
137
  else {
108
- console.error(chalk_1.default.red('Error:'), response.error?.message || 'Failed to update profile');
138
+ console.error(chalk.red('Error:'), response.error?.message || 'Failed to update profile');
109
139
  }
110
140
  }
111
141
  catch (error) {
112
- console.error(chalk_1.default.red('Error:'), error instanceof Error ? error.message : 'Unknown error');
142
+ console.error(chalk.red('Error:'), error instanceof Error ? error.message : 'Unknown error');
113
143
  }
114
144
  });
115
145
  }
@@ -126,4 +156,4 @@ async function getHumanAuthenticatedClient() {
126
156
  client.setAuthToken(config.humanJwt);
127
157
  return { client, humanUid: config.humanUid };
128
158
  }
129
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHVtYW5zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbW1hbmRzL2h1bWFucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQU9BLHdEQWtHQztBQXhHRCxnQ0FBbUM7QUFDbkMsc0NBQTBDO0FBQzFDLGtEQUEwQjtBQUUxQixNQUFNLHNCQUFzQixHQUFHLCtEQUErRCxDQUFDO0FBRS9GLFNBQWdCLHNCQUFzQixDQUFDLE9BQWdCO0lBQ3JELE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsV0FBVyxDQUFDLG1DQUFtQyxDQUFDLENBQUM7SUFFMUYsTUFBTTtTQUNILE9BQU8sQ0FBQyxPQUFPLENBQUM7U0FDaEIsV0FBVyxDQUFDLG9EQUFvRCxDQUFDO1NBQ2pFLGNBQWMsQ0FBQyx1QkFBdUIsRUFBRSx5Q0FBeUMsQ0FBQztTQUNsRixjQUFjLENBQUMsaUJBQWlCLEVBQUUsZ0JBQWdCLENBQUM7U0FDbkQsTUFBTSxDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsRUFBRTtRQUN4QixJQUFJLENBQUM7WUFDSCxNQUFNLE1BQU0sR0FBRyxNQUFNLHNCQUFhLENBQUMsZUFBZSxFQUFFLENBQUM7WUFDckQsTUFBTSxPQUFPLEdBQUcsRUFBRSxHQUFHLE1BQU0sRUFBRSxRQUFRLEVBQUUsT0FBTyxDQUFDLEtBQUssRUFBRSxRQUFRLEVBQUUsT0FBTyxDQUFDLEdBQUcsRUFBRSxpQkFBaUIsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsSUFBSSxHQUFHLElBQUksRUFBRSxDQUFDO1lBQzNILE1BQU0sc0JBQWEsQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUU5QyxPQUFPLENBQUMsR0FBRyxDQUFDLGVBQUssQ0FBQyxLQUFLLENBQUMsNEJBQTRCLENBQUMsQ0FBQyxDQUFDO1lBQ3ZELE9BQU8sQ0FBQyxHQUFHLENBQUMsZUFBSyxDQUFDLElBQUksQ0FBQyxNQUFN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Q0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQy9GLENBQUM7SUFDSCxDQUFDLENBQUMsQ0FBQztBQUNQLENBQUM7QUFFRCxLQUFLLFVBQVUsMkJBQTJCO0lBQ3hDLE1BQU0sTUFBTSxHQUFHLE1BQU0sc0JBQWEsQ0FBQyxlQUFlLEVBQVMsQ0FBQztJQUU1RCxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUN6QyxNQUFNLElBQUksS0FBSyxDQUFDLHFFQUFxRSxDQUFDLENBQUM7SUFDekYsQ0FBQztJQUVELElBQUksTUFBTSxDQUFDLGlCQUFpQixJQUFJLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxNQUFNLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztRQUN0RSxNQUFNLElBQUksS0FBSyxDQUFDLDhEQUE4RCxDQUFDLENBQUM7SUFDbEYsQ0FBQztJQUVELE1BQU0sWUFBWSxHQUFHLE1BQU0sQ0FBQyxZQUFZLElBQUksc0JBQXNCLENBQUM7SUFDbkUsTUFBTSxNQUFNLEdBQUcsSUFBSSxlQUFTLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDM0MsTUFBTSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7SUFFckMsT0FBTyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDO0FBQy9DLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tYW5kIH0gZnJvbSAnY29tbWFuZGVyJztcbmltcG9ydCB7IEFwaUNsaWVudCB9IGZyb20gJy4uL2FwaSc7XG5pbXBvcnQgeyBjb25maWdNYW5hZ2VyIH0gZnJvbSAnLi4vY29uZmlnJztcbmltcG9ydCBjaGFsayBmcm9tICdjaGFsayc7XG5cbmNvbnN0IERFRkFVTFRfSFVNQU5TX0FQSV9VUkwgPSAnaHR0cHM6Ly91cy1jZW50cmFsMS1hZ2VudGljcG9vbC1odW1hbnMuY2xvdWRmdW5jdGlvbnMubmV0L2FwaSc7XG5cbmV4cG9ydCBmdW5jdGlvbiByZWdpc3Rlckh1bWFuc0NvbW1hbmRzKHByb2dyYW06IENvbW1hbmQpOiB2b2lkIHtcbiAgY29uc3QgaHVtYW5zID0gcHJvZ3JhbS5jb21tYW5kKCdodW1hbnMnKS5kZXNjcmlwdGlvbignSHVtYW4gYWNjb3VudCBtYW5hZ2VtZW50IGNvbW1hbmRzJyk7XG5cbiAgaHVtYW5zXG4gICAgLmNvbW1hbmQoJ2xvZ2luJylcbiAgICAuZGVzY3JpcHRpb24oJ0F1dGhlbnRpY2F0ZSBhcyBhIGh1bWFuIChzdG9yZXMgRmlyZWJhc2UgSUQgdG9rZW4pJylcbiAgICAucmVxdWlyZWRPcHRpb24oJy10LCAtLXRva2VuIDxpZFRva2VuPicsICdGaXJlYmFzZSBJRCB0b2tlbiBmcm9tIGh1bWFucy1hcHAgbG9naW4nKVxuICAgIC5yZXF1aXJlZE9wdGlvbignLXUsIC0tdWlkIDx1aWQ+JywgJ1lvdXIgaHVtYW4gVUlEJylcbiAgICAuYWN0aW9uKGFzeW5jIChvcHRpb25zKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBjb25maWcgPSBhd2FpdCBjb25maWdNYW5hZ2VyLmdldEdsb2JhbENvbmZpZygpO1xuICAgICAgICBjb25zdCB1cGRhdGVkID0geyAuLi5jb25maWcsIGh1bWFuSnd0OiBvcHRpb25zLnRva2VuLCBodW1hblVpZDogb3B0aW9ucy51aWQsIGh1bWFuSnd0RXhwaXJlc0F0OiBEYXRlLm5vdygpICsgMzYwMCAqIDEwMDAgfTtcbiAgICAgICAgYXdhaXQgY29uZmlnTWFuYWdlci5zYXZlR2xvYmFsQ29uZmlnKHVwZGF0ZWQpO1xuXG4gICAgICAgIGNvbnNvbGUubG9nKGNoYWxrLmdyZWVuKCfinJMgSHVtYW4gY3JlZGVudGlhbHMgc2F2ZWQhJykpO1xuICAgICAgICBjb25zb2xlLmxvZyhjaGFsay5ncmF5KCdVSUQ6JyksIG9wdGlvbnMudWlkKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoY2hhbGsucmVkKCdFcnJvcjonKSwgZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiAnVW5rbm93biBlcnJvcicpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gIGh1bWFuc1xuICAgIC5jb21tYW5kKCdsb2dvdXQnKVxuICAgIC5kZXNjcmlwdGlvbignUmVtb3ZlIHN0b3JlZCBodW1hbiBjcmVkZW50aWFscycpXG4gICAgLmFjdGlvbihhc3luYyAoKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBjb25maWcgPSBhd2FpdCBjb25maWdNYW5hZ2VyLmdldEdsb2JhbENvbmZpZygpO1xuICAgICAgICBkZWxldGUgKGNvbmZpZyBhcyBhbnkpLmh1bWFuSnd0O1xuICAgICAgICBkZWxldGUgKGNvbmZpZyBhcyBhbnkpLmh1bWFuVWlkO1xuICAgICAgICBkZWxldGUgKGNvbmZpZyBhcyBhbnkpLmh1bWFuSnd0RXhwaXJlc0F0O1xuICAgICAgICBhd2FpdCBjb25maWdNYW5hZ2VyLnNhdmVHbG9iYWxDb25maWcoY29uZmlnKTtcblxuICAgICAgICBjb25zb2xlLmxvZyhjaGFsay5ncmVlbign4pyTIEh1bWFuIGNyZWRlbnRpYWxzIHJlbW92ZWQuJykpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihjaGFsay5yZWQoJ0Vycm9yOicpLCBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6ICdVbmtub3duIGVycm9yJyk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgaHVtYW5zXG4gICAgLmNvbW1hbmQoJ3Byb2ZpbGUnKVxuICAgIC5jb21tYW5kKCdnZXQnKVxuICAgIC5kZXNjcmlwdGlvbignR2V0IHlvdXIgaHVtYW4gcHJvZmlsZScpXG4gICAgLmFjdGlvbihhc3luYyAoKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCB7IGNsaWVudCB9ID0gYXdhaXQgZ2V0SHVtYW5BdXRoZW50aWNhdGVkQ2xpZW50KCk7XG5cbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBjbGllbnQuZ2V0PGFueT4oJy92MS9wcm9maWxlJyk7XG5cbiAgICAgICAgaWYgKHJlc3BvbnNlLnN1Y2Nlc3MgJiYgcmVzcG9uc2UuZGF0YSkge1xuICAgICAgICAgIGNvbnN0IHByb2ZpbGUgPSByZXNwb25zZS5kYXRhO1xuICAgICAgICAgIGNvbnNvbGUubG9nKGNoYWxrLmN5YW4uYm9sZChgXFxuJHtwcm9maWxlLmRpc3BsYXlOYW1lIHx8ICdObyBkaXNwbGF5IG5hbWUnfVxcbmApKTtcbiAgICAgICAgICBjb25zb2xlLmxvZyhjaGFsay5ncmF5KCdVSUQ6JyksIHByb2ZpbGUudWlkKTtcbiAgICAgICAgICBpZiAocHJvZmlsZS5lbWFpbCkgY29uc29sZS5sb2coY2hhbGsuZ3JheSgnRW1haWw6JyksIHByb2ZpbGUuZW1haWwpO1xuICAgICAgICAgIGlmIChwcm9maWxlLnBob25lKSBjb25zb2xlLmxvZyhjaGFsay5ncmF5KCdQaG9uZTonKSwgcHJvZmlsZS5waG9uZSk7XG4gICAgICAgICAgaWYgKHByb2ZpbGUudGVsZWdyYW0pIGNvbnNvbGUubG9nKGNoYWxrLmdyYXkoJ1RlbGVncmFtOicpLCBwcm9maWxlLnRlbGVncmFtKTtcbiAgICAgICAgICBpZiAocHJvZmlsZS5waG90b1VybCkgY29uc29sZS5sb2coY2hhbGsuZ3JheSgnUGhvdG86JyksIHByb2ZpbGUucGhvdG9VcmwpO1xuICAgICAgICAgIGlmIChwcm9maWxlLm5vdGVzKSBjb25zb2xlLmxvZyhjaGFsay5ncmF5KCdOb3RlczonKSwgcHJvZmlsZS5ub3Rlcyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihjaGFsay5yZWQoJ0Vycm9yOicpLCByZXNwb25zZS5lcnJvcj8ubWVzc2FnZSB8fCAnRmFpbGVkIHRvIGdldCBwcm9maWxlJyk7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoY2hhbGsucmVkKCdFcnJvcjonKSwgZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiAnVW5rbm93biBlcnJvcicpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gIGh1bWFuc1xuICAgIC5jb21tYW5kKCdwcm9maWxlJylcbiAgICAuY29tbWFuZCgndXBkYXRlJylcbiAgICAuZGVzY3JpcHRpb24oJ1VwZGF0ZSB5b3VyIGh1bWFuIHByb2ZpbGUnKVxuICAgIC5vcHRpb24oJy0tZGlzcGxheS1uYW1lIDxuYW1lPicsICdEaXNwbGF5IG5hbWUnKVxuICAgIC5vcHRpb24oJy0tcGhvbmUgPHBob25lPicsICdQaG9uZSBudW1iZXInKVxuICAgIC5vcHRpb24oJy0tZW1haWwgPGVtYWlsPicsICdFbWFpbCBhZGRyZXNzJylcbiAgICAub3B0aW9uKCctLXRlbGVncmFtIDxoYW5kbGU+JywgJ1RlbGVncmFtIGhhbmRsZScpXG4gICAgLm9wdGlvbignLS1waG90by11cmwgPHVybD4nLCAnUGhvdG8gVVJMJylcbiAgICAub3B0aW9uKCctLW5vdGVzIDx0ZXh0PicsICdOb3RlcycpXG4gICAgLmFjdGlvbihhc3luYyAob3B0aW9ucykgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgeyBjbGllbnQgfSA9IGF3YWl0IGdldEh1bWFuQXV0aGVudGljYXRlZENsaWVudCgpO1xuXG4gICAgICAgIGNvbnN0IGJvZHk6IGFueSA9IHt9O1xuICAgICAgICBpZiAob3B0aW9ucy5kaXNwbGF5TmFtZSkgYm9keS5kaXNwbGF5TmFtZSA9IG9wdGlvbnMuZGlzcGxheU5hbWU7XG4gICAgICAgIGlmIChvcHRpb25zLnBob25lKSBib2R5LnBob25lID0gb3B0aW9ucy5waG9uZTtcbiAgICAgICAgaWYgKG9wdGlvbnMuZW1haWwpIGJvZHkuZW1haWwgPSBvcHRpb25zLmVtYWlsO1xuICAgICAgICBpZiAob3B0aW9ucy50ZWxlZ3JhbSkgYm9keS50ZWxlZ3JhbSA9IG9wdGlvbnMudGVsZWdyYW07XG4gICAgICAgIGlmIChvcHRpb25zLnBob3RvVXJsKSBib2R5LnBob3RvVXJsID0gb3B0aW9ucy5waG90b1VybDtcbiAgICAgICAgaWYgKG9wdGlvbnMubm90ZXMpIGJvZHkubm90ZXMgPSBvcHRpb25zLm5vdGVzO1xuXG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgY2xpZW50LnB1dCgnL3YxL3Byb2ZpbGUnLCBib2R5KTtcblxuICAgICAgICBpZiAocmVzcG9uc2Uuc3VjY2Vzcykge1xuICAgICAgICAgIGNvbnNvbGUubG9nKGNoYWxrLmdyZWVuKCfinJMgUHJvZmlsZSB1cGRhdGVkIScpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGNoYWxrLnJlZCgnRXJyb3I6JyksIHJlc3BvbnNlLmVycm9yPy5tZXNzYWdlIHx8ICdGYWlsZWQgdG8gdXBkYXRlIHByb2ZpbGUnKTtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihjaGFsay5yZWQoJ0Vycm9yOicpLCBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6ICdVbmtub3duIGVycm9yJyk7XG4gICAgICB9XG4gICAgfSk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGdldEh1bWFuQXV0aGVudGljYXRlZENsaWVudCgpOiBQcm9taXNlPHsgY2xpZW50OiBBcGlDbGllbnQ7IGh1bWFuVWlkOiBzdHJpbmcgfT4ge1xuICBjb25zdCBjb25maWcgPSBhd2FpdCBjb25maWdNYW5hZ2VyLmdldEdsb2JhbENvbmZpZygpIGFzIGFueTtcblxuICBpZiAoIWNvbmZpZy5odW1hbkp3dCB8fCAhY29uZmlnLmh1bWFuVWlkKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdOb3QgYXV0aGVudGljYXRlZCBhcyBhIGh1bWFuLiBSdW4gXCJhZ2VudGljcG9vbCBodW1hbnMgbG9naW5cIiBmaXJzdC4nKTtcbiAgfVxuXG4gIGlmIChjb25maWcuaHVtYW5Kd3RFeHBpcmVzQXQgJiYgRGF0ZS5ub3coKSA+IGNvbmZpZy5odW1hbkp3dEV4cGlyZXNBdCkge1xuICAgIHRocm93IG5ldyBFcnJvcignSHVtYW4gc2Vzc2lvbiBleHBpcmVkLiBSdW4gXCJhZ2VudGljcG9vbCBodW1hbnMgbG9naW5cIiBhZ2Fpbi4nKTtcbiAgfVxuXG4gIGNvbnN0IGh1bWFuc0FwaVVybCA9IGNvbmZpZy5odW1hbnNBcGlVcmwgfHwgREVGQVVMVF9IVU1BTlNfQVBJX1VSTDtcbiAgY29uc3QgY2xpZW50ID0gbmV3IEFwaUNsaWVudChodW1hbnNBcGlVcmwpO1xuICBjbGllbnQuc2V0QXV0aFRva2VuKGNvbmZpZy5odW1hbkp3dCk7XG5cbiAgcmV0dXJuIHsgY2xpZW50LCBodW1hblVpZDogY29uZmlnLmh1bWFuVWlkIH07XG59XG4iXX0=
159
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHVtYW5zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbW1hbmRzL2h1bWFucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQU9BLHdEQXVJQztBQTdJRCxnQ0FBbUM7QUFDbkMsc0NBQTBDO0FBQzFDLE1BQU0sS0FBSyxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUUvQixNQUFNLHNCQUFzQixHQUFHLCtEQUErRCxDQUFDO0FBRS9GLFNBQWdCLHNCQUFzQixDQUFDLE9BQWdCO0lBQ3JELE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsV0FBVyxDQUFDLG1DQUFtQyxDQUFDLENBQUM7SUFFMUYsTUFBTTtTQUNILE9BQU8sQ0FBQyxPQUFPLENBQUM7U0FDaEIsV0FBVyxDQUFDLG9EQUFvRCxDQUFDO1NBQ2pFLGNBQWMsQ0FBQyx1QkFBdUIsRUFBRSx5Q0FBeUMsQ0FBQztTQUNsRixjQUFjLENBQUMsaUJBQWlCLEVBQUUsZ0JBQWdCLENBQUM7U0FDbkQsTUFBTSxDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsRUFBRTtRQUN4QixJQUFJLENBQUM7WUFDSCxNQUFNLE1BQU0sR0FBRyxNQUFNLHNCQUFhLENBQUMsZUFBZSxFQUFFLENBQUM7WUFDckQsTUFBTSxPQUFPLEdBQUcsRUFBRSxHQUFHLE1BQU0sRUFBRSxRQUFRLEVBQUUsT0FBTyxDQUFDLEtBQUssRUFBRSxRQUFRLEVBQUUsT0FBTyxDQUFDLEdBQUcsRUFBRSxpQkFBaUIsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsSUFBSSxHQUFHLElBQUksRUFBRSxDQUFDO1lBQzNILE1BQU0sc0JBQWEsQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUU5QyxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsNEJBQTRCLENBQUMsQ0FBQyxDQUFDO1lBQ3ZELE9BQU8sQ0FBQyxHQUFH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QUMsWUFBWSxJQUFJLHNCQUFzQixDQUFDO0lBQ25FLE1BQU0sTUFBTSxHQUFHLElBQUksZUFBUyxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQzNDLE1BQU0sQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBRXJDLE9BQU8sRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQztBQUMvQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbWFuZCB9IGZyb20gJ2NvbW1hbmRlcic7XG5pbXBvcnQgeyBBcGlDbGllbnQgfSBmcm9tICcuLi9hcGknO1xuaW1wb3J0IHsgY29uZmlnTWFuYWdlciB9IGZyb20gJy4uL2NvbmZpZyc7XG5jb25zdCBjaGFsayA9IHJlcXVpcmUoJ2NoYWxrJyk7XG5cbmNvbnN0IERFRkFVTFRfSFVNQU5TX0FQSV9VUkwgPSAnaHR0cHM6Ly91cy1jZW50cmFsMS1hZ2VudGljcG9vbC1odW1hbnMuY2xvdWRmdW5jdGlvbnMubmV0L2FwaSc7XG5cbmV4cG9ydCBmdW5jdGlvbiByZWdpc3Rlckh1bWFuc0NvbW1hbmRzKHByb2dyYW06IENvbW1hbmQpOiB2b2lkIHtcbiAgY29uc3QgaHVtYW5zID0gcHJvZ3JhbS5jb21tYW5kKCdodW1hbnMnKS5kZXNjcmlwdGlvbignSHVtYW4gYWNjb3VudCBtYW5hZ2VtZW50IGNvbW1hbmRzJyk7XG5cbiAgaHVtYW5zXG4gICAgLmNvbW1hbmQoJ2xvZ2luJylcbiAgICAuZGVzY3JpcHRpb24oJ0F1dGhlbnRpY2F0ZSBhcyBhIGh1bWFuIChzdG9yZXMgRmlyZWJhc2UgSUQgdG9rZW4pJylcbiAgICAucmVxdWlyZWRPcHRpb24oJy10LCAtLXRva2VuIDxpZFRva2VuPicsICdGaXJlYmFzZSBJRCB0b2tlbiBmcm9tIGh1bWFucy1hcHAgbG9naW4nKVxuICAgIC5yZXF1aXJlZE9wdGlvbignLXUsIC0tdWlkIDx1aWQ+JywgJ1lvdXIgaHVtYW4gVUlEJylcbiAgICAuYWN0aW9uKGFzeW5jIChvcHRpb25zKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBjb25maWcgPSBhd2FpdCBjb25maWdNYW5hZ2VyLmdldEdsb2JhbENvbmZpZygpO1xuICAgICAgICBjb25zdCB1cGRhdGVkID0geyAuLi5jb25maWcsIGh1bWFuSnd0OiBvcHRpb25zLnRva2VuLCBodW1hblVpZDogb3B0aW9ucy51aWQsIGh1bWFuSnd0RXhwaXJlc0F0OiBEYXRlLm5vdygpICsgMzYwMCAqIDEwMDAgfTtcbiAgICAgICAgYXdhaXQgY29uZmlnTWFuYWdlci5zYXZlR2xvYmFsQ29uZmlnKHVwZGF0ZWQpO1xuXG4gICAgICAgIGNvbnNvbGUubG9nKGNoYWxrLmdyZWVuKCfinJMgSHVtYW4gY3JlZGVudGlhbHMgc2F2ZWQhJykpO1xuICAgICAgICBjb25zb2xlLmxvZyhjaGFsay5ncmF5KCdVSUQ6JyksIG9wdGlvbnMudWlkKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoY2hhbGsucmVkKCdFcnJvcjonKSwgZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiAnVW5rbm93biBlcnJvcicpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gIGh1bWFuc1xuICAgIC5jb21tYW5kKCdsb2dvdXQnKVxuICAgIC5kZXNjcmlwdGlvbignUmVtb3ZlIHN0b3JlZCBodW1hbiBjcmVkZW50aWFscycpXG4gICAgLmFjdGlvbihhc3luYyAoKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBjb25maWcgPSBhd2FpdCBjb25maWdNYW5hZ2VyLmdldEdsb2JhbENvbmZpZygpO1xuICAgICAgICBkZWxldGUgKGNvbmZpZyBhcyBhbnkpLmh1bWFuSnd0O1xuICAgICAgICBkZWxldGUgKGNvbmZpZyBhcyBhbnkpLmh1bWFuVWlkO1xuICAgICAgICBkZWxldGUgKGNvbmZpZyBhcyBhbnkpLmh1bWFuSnd0RXhwaXJlc0F0O1xuICAgICAgICBhd2FpdCBjb25maWdNYW5hZ2VyLnNhdmVHbG9iYWxDb25maWcoY29uZmlnKTtcblxuICAgICAgICBjb25zb2xlLmxvZyhjaGFsay5ncmVlbign4pyTIEh1bWFuIGNyZWRlbnRpYWxzIHJlbW92ZWQuJykpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihjaGFsay5yZWQoJ0Vycm9yOicpLCBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6ICdVbmtub3duIGVycm9yJyk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgaHVtYW5zXG4gICAgLmNvbW1hbmQoJ3Byb2ZpbGUnKVxuICAgIC5jb21tYW5kKCdnZXQnKVxuICAgIC5kZXNjcmlwdGlvbignR2V0IHlvdXIgaHVtYW4gcHJvZmlsZScpXG4gICAgLmFjdGlvbihhc3luYyAoKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCB7IGNsaWVudCB9ID0gYXdhaXQgZ2V0SHVtYW5BdXRoZW50aWNhdGVkQ2xpZW50KCk7XG5cbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBjbGllbnQuZ2V0PGFueT4oJy92MS9wcm9maWxlJyk7XG5cbiAgICAgICAgaWYgKHJlc3BvbnNlLnN1Y2Nlc3MgJiYgcmVzcG9uc2UuZGF0YSkge1xuICAgICAgICAgIGNvbnN0IHByb2ZpbGUgPSByZXNwb25zZS5kYXRhO1xuICAgICAgICAgIGNvbnNvbGUubG9nKGNoYWxrLmN5YW4uYm9sZChgXFxuJHtwcm9maWxlLmRpc3BsYXlOYW1lIHx8ICdObyBkaXNwbGF5IG5hbWUnfVxcbmApKTtcbiAgICAgICAgICBjb25zb2xlLmxvZyhjaGFsay5ncmF5KCdVSUQ6JyksIHByb2ZpbGUudWlkKTtcbiAgICAgICAgICBpZiAocHJvZmlsZS5lbWFpbCkgY29uc29sZS5sb2coY2hhbGsuZ3JheSgnRW1haWw6JyksIHByb2ZpbGUuZW1haWwpO1xuICAgICAgICAgIGlmIChwcm9maWxlLnBob25lKSBjb25zb2xlLmxvZyhjaGFsay5ncmF5KCdQaG9uZTonKSwgcHJvZmlsZS5waG9uZSk7XG4gICAgICAgICAgaWYgKHByb2ZpbGUudGVsZWdyYW0pIGNvbnNvbGUubG9nKGNoYWxrLmdyYXkoJ1RlbGVncmFtOicpLCBwcm9maWxlLnRlbGVncmFtKTtcbiAgICAgICAgICBpZiAocHJvZmlsZS5waG90b1VybCkgY29uc29sZS5sb2coY2hhbGsuZ3JheSgnUGhvdG86JyksIHByb2ZpbGUucGhvdG9VcmwpO1xuICAgICAgICAgIGlmIChwcm9maWxlLm5vdGVzKSBjb25zb2xlLmxvZyhjaGFsay5ncmF5KCdOb3RlczonKSwgcHJvZmlsZS5ub3Rlcyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihjaGFsay5yZWQoJ0Vycm9yOicpLCByZXNwb25zZS5lcnJvcj8ubWVzc2FnZSB8fCAnRmFpbGVkIHRvIGdldCBwcm9maWxlJyk7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoY2hhbGsucmVkKCdFcnJvcjonKSwgZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiAnVW5rbm93biBlcnJvcicpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gIGh1bWFuc1xuICAgIC5jb21tYW5kKCdwdXNoLXByb2ZpbGVzJylcbiAgICAuZGVzY3JpcHRpb24oJ1B1c2ggbG9jYWxseSBzdG9yZWQgYWdlbnQgcHJvZmlsZXMgdG8gaHVtYW5zIEFQSScpXG4gICAgLmFjdGlvbihhc3luYyAoKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCB7IGNsaWVudCwgaHVtYW5VaWQgfSA9IGF3YWl0IGdldEh1bWFuQXV0aGVudGljYXRlZENsaWVudCgpO1xuICAgICAgICBjb25zdCBwcm9maWxlcyA9IGF3YWl0IGNvbmZpZ01hbmFnZXIuZ2V0QWxsSlNPTlByb2ZpbGVzKCk7XG4gICAgICAgIGNvbnN0IG5ldHdvcmtJZHMgPSBPYmplY3Qua2V5cyhwcm9maWxlcyk7XG5cbiAgICAgICAgaWYgKG5ldHdvcmtJZHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coY2hhbGsueWVsbG93KCdObyBsb2NhbCBKU09OIHByb2ZpbGVzIGZvdW5kLiBSdW4gXCJwcm9maWxlIGJ1aWxkXCIgZmlyc3QuJykpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnNvbGUubG9nKGNoYWxrLmN5YW4oYFB1c2hpbmcgJHtuZXR3b3JrSWRzLmxlbmd0aH0gcHJvZmlsZShzKSB0byBodW1hbnMgQVBJLi4uXFxuYCkpO1xuXG4gICAgICAgIGNvbnN0IHBheWxvYWQgPSB7XG4gICAgICAgICAgaHVtYW5VaWQsXG4gICAgICAgICAgcHJvZmlsZXM6IG5ldHdvcmtJZHMubWFwKG5ldHdvcmtJZCA9PiAoe1xuICAgICAgICAgICAgbmV0d29ya0lkLFxuICAgICAgICAgICAgLi4ucHJvZmlsZXNbbmV0d29ya0lkXVxuICAgICAgICAgIH0pKVxuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgY2xpZW50LnBvc3QoJy92MS9wcm9maWxlcy9wdXNoJywgcGF5bG9hZCk7XG5cbiAgICAgICAgaWYgKHJlc3BvbnNlLnN1Y2Nlc3MpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhjaGFsay5ncmVlbihg4pyTIFB1c2hlZCAke25ldHdvcmtJZHMubGVuZ3RofSBwcm9maWxlKHMpIHN1Y2Nlc3NmdWxseSFgKSk7XG4gICAgICAgICAgbmV0d29ya0lkcy5mb3JFYWNoKGlkID0+IGNvbnNvbGUubG9nKGNoYWxrLmdyYXkoJyAgLScpLCBpZCkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoY2hhbGsucmVkKCdFcnJvcjonKSwgcmVzcG9uc2UuZXJyb3I/Lm1lc3NhZ2UgfHwgJ0ZhaWxlZCB0byBwdXNoIHByb2ZpbGVzJyk7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoY2hhbGsucmVkKCdFcnJvcjonKSwgZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiAnVW5rbm93biBlcnJvcicpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gIGh1bWFuc1xuICAgIC5jb21tYW5kKCdwcm9maWxlJylcbiAgICAuY29tbWFuZCgndXBkYXRlJylcbiAgICAuZGVzY3JpcHRpb24oJ1VwZGF0ZSB5b3VyIGh1bWFuIHByb2ZpbGUnKVxuICAgIC5vcHRpb24oJy0tZGlzcGxheS1uYW1lIDxuYW1lPicsICdEaXNwbGF5IG5hbWUnKVxuICAgIC5vcHRpb24oJy0tcGhvbmUgPHBob25lPicsICdQaG9uZSBudW1iZXInKVxuICAgIC5vcHRpb24oJy0tZW1haWwgPGVtYWlsPicsICdFbWFpbCBhZGRyZXNzJylcbiAgICAub3B0aW9uKCctLXRlbGVncmFtIDxoYW5kbGU+JywgJ1RlbGVncmFtIGhhbmRsZScpXG4gICAgLm9wdGlvbignLS1waG90by11cmwgPHVybD4nLCAnUGhvdG8gVVJMJylcbiAgICAub3B0aW9uKCctLW5vdGVzIDx0ZXh0PicsICdOb3RlcycpXG4gICAgLmFjdGlvbihhc3luYyAob3B0aW9ucykgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgeyBjbGllbnQgfSA9IGF3YWl0IGdldEh1bWFuQXV0aGVudGljYXRlZENsaWVudCgpO1xuXG4gICAgICAgIGNvbnN0IGJvZHk6IGFueSA9IHt9O1xuICAgICAgICBpZiAob3B0aW9ucy5kaXNwbGF5TmFtZSkgYm9keS5kaXNwbGF5TmFtZSA9IG9wdGlvbnMuZGlzcGxheU5hbWU7XG4gICAgICAgIGlmIChvcHRpb25zLnBob25lKSBib2R5LnBob25lID0gb3B0aW9ucy5waG9uZTtcbiAgICAgICAgaWYgKG9wdGlvbnMuZW1haWwpIGJvZHkuZW1haWwgPSBvcHRpb25zLmVtYWlsO1xuICAgICAgICBpZiAob3B0aW9ucy50ZWxlZ3JhbSkgYm9keS50ZWxlZ3JhbSA9IG9wdGlvbnMudGVsZWdyYW07XG4gICAgICAgIGlmIChvcHRpb25zLnBob3RvVXJsKSBib2R5LnBob3RvVXJsID0gb3B0aW9ucy5waG90b1VybDtcbiAgICAgICAgaWYgKG9wdGlvbnMubm90ZXMpIGJvZHkubm90ZXMgPSBvcHRpb25zLm5vdGVzO1xuXG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgY2xpZW50LnB1dCgnL3YxL3Byb2ZpbGUnLCBib2R5KTtcblxuICAgICAgICBpZiAocmVzcG9uc2Uuc3VjY2Vzcykge1xuICAgICAgICAgIGNvbnNvbGUubG9nKGNoYWxrLmdyZWVuKCfinJMgUHJvZmlsZSB1cGRhdGVkIScpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGNoYWxrLnJlZCgnRXJyb3I6JyksIHJlc3BvbnNlLmVycm9yPy5tZXNzYWdlIHx8ICdGYWlsZWQgdG8gdXBkYXRlIHByb2ZpbGUnKTtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihjaGFsay5yZWQoJ0Vycm9yOicpLCBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6ICdVbmtub3duIGVycm9yJyk7XG4gICAgICB9XG4gICAgfSk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGdldEh1bWFuQXV0aGVudGljYXRlZENsaWVudCgpOiBQcm9taXNlPHsgY2xpZW50OiBBcGlDbGllbnQ7IGh1bWFuVWlkOiBzdHJpbmcgfT4ge1xuICBjb25zdCBjb25maWcgPSBhd2FpdCBjb25maWdNYW5hZ2VyLmdldEdsb2JhbENvbmZpZygpIGFzIGFueTtcblxuICBpZiAoIWNvbmZpZy5odW1hbkp3dCB8fCAhY29uZmlnLmh1bWFuVWlkKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdOb3QgYXV0aGVudGljYXRlZCBhcyBhIGh1bWFuLiBSdW4gXCJhZ2VudGljcG9vbCBodW1hbnMgbG9naW5cIiBmaXJzdC4nKTtcbiAgfVxuXG4gIGlmIChjb25maWcuaHVtYW5Kd3RFeHBpcmVzQXQgJiYgRGF0ZS5ub3coKSA+IGNvbmZpZy5odW1hbkp3dEV4cGlyZXNBdCkge1xuICAgIHRocm93IG5ldyBFcnJvcignSHVtYW4gc2Vzc2lvbiBleHBpcmVkLiBSdW4gXCJhZ2VudGljcG9vbCBodW1hbnMgbG9naW5cIiBhZ2Fpbi4nKTtcbiAgfVxuXG4gIGNvbnN0IGh1bWFuc0FwaVVybCA9IGNvbmZpZy5odW1hbnNBcGlVcmwgfHwgREVGQVVMVF9IVU1BTlNfQVBJX1VSTDtcbiAgY29uc3QgY2xpZW50ID0gbmV3IEFwaUNsaWVudChodW1hbnNBcGlVcmwpO1xuICBjbGllbnQuc2V0QXV0aFRva2VuKGNvbmZpZy5odW1hbkp3dCk7XG5cbiAgcmV0dXJuIHsgY2xpZW50LCBodW1hblVpZDogY29uZmlnLmh1bWFuVWlkIH07XG59XG4iXX0=
@@ -1,13 +1,10 @@
1
1
  "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
2
  Object.defineProperty(exports, "__esModule", { value: true });
6
3
  exports.registerIdentityCommands = registerIdentityCommands;
7
4
  const api_1 = require("../api");
8
5
  const config_1 = require("../config");
9
6
  const datamodel_1 = require("../datamodel");
10
- const chalk_1 = __importDefault(require("chalk"));
7
+ const chalk = require('chalk');
11
8
  const DEFAULT_HUMANS_API_URL = 'https://us-central1-agenticpool-humans.cloudfunctions.net/api';
12
9
  function registerIdentityCommands(program) {
13
10
  const identities = program.command('identities').description('Identity management commands');
@@ -37,18 +34,18 @@ function registerIdentityCommands(program) {
37
34
  }
38
35
  else {
39
36
  const identity = response.data;
40
- console.log(chalk_1.default.green('✓ Identity registered!'));
41
- console.log(chalk_1.default.gray('ID:'), identity.id);
42
- console.log(chalk_1.default.gray('Network:'), options.network);
43
- console.log(chalk_1.default.gray('Public Token:'), options.publicToken);
37
+ console.log(chalk.green('✓ Identity registered!'));
38
+ console.log(chalk.gray('ID:'), identity.id);
39
+ console.log(chalk.gray('Network:'), options.network);
40
+ console.log(chalk.gray('Public Token:'), options.publicToken);
44
41
  }
45
42
  }
46
43
  else {
47
- console.error(chalk_1.default.red('Error:'), response.error?.message || 'Failed to register identity');
44
+ console.error(chalk.red('Error:'), response.error?.message || 'Failed to register identity');
48
45
  }
49
46
  }
50
47
  catch (error) {
51
- console.error(chalk_1.default.red('Error:'), error instanceof Error ? error.message : 'Unknown error');
48
+ console.error(chalk.red('Error:'), error instanceof Error ? error.message : 'Unknown error');
52
49
  }
53
50
  });
54
51
  identities
@@ -69,28 +66,28 @@ function registerIdentityCommands(program) {
69
66
  }
70
67
  else {
71
68
  if (response.data.length === 0) {
72
- console.log(chalk_1.default.yellow('No identities registered.'));
69
+ console.log(chalk.yellow('No identities registered.'));
73
70
  return;
74
71
  }
75
- console.log(chalk_1.default.green.bold(`\nYour Identities (${response.data.length}):\n`));
72
+ console.log(chalk.green.bold(`\nYour Identities (${response.data.length}):\n`));
76
73
  response.data.forEach((identity) => {
77
- console.log(chalk_1.default.cyan.bold(identity.networkId));
78
- console.log(chalk_1.default.gray(' ID:'), identity.id);
79
- console.log(chalk_1.default.gray(' Public Token:'), identity.publicToken);
80
- console.log(chalk_1.default.gray(' Description:'), identity.agentDescription || '(none)');
74
+ console.log(chalk.cyan.bold(identity.networkId));
75
+ console.log(chalk.gray(' ID:'), identity.id);
76
+ console.log(chalk.gray(' Public Token:'), identity.publicToken);
77
+ console.log(chalk.gray(' Description:'), identity.agentDescription || '(none)');
81
78
  if (identity.addedAt) {
82
- console.log(chalk_1.default.gray(' Added:'), formatTimestamp(identity.addedAt));
79
+ console.log(chalk.gray(' Added:'), formatTimestamp(identity.addedAt));
83
80
  }
84
81
  console.log();
85
82
  });
86
83
  }
87
84
  }
88
85
  else {
89
- console.error(chalk_1.default.red('Error:'), response.error?.message || 'Failed to list identities');
86
+ console.error(chalk.red('Error:'), response.error?.message || 'Failed to list identities');
90
87
  }
91
88
  }
92
89
  catch (error) {
93
- console.error(chalk_1.default.red('Error:'), error instanceof Error ? error.message : 'Unknown error');
90
+ console.error(chalk.red('Error:'), error instanceof Error ? error.message : 'Unknown error');
94
91
  }
95
92
  });
96
93
  identities
@@ -102,15 +99,15 @@ function registerIdentityCommands(program) {
102
99
  const { client } = await getHumanAuthenticatedClient();
103
100
  const response = await client.delete(`/v1/identities/${options.id}`);
104
101
  if (response.success) {
105
- console.log(chalk_1.default.green('✓ Identity removed!'));
106
- console.log(chalk_1.default.gray('ID:'), options.id);
102
+ console.log(chalk.green('✓ Identity removed!'));
103
+ console.log(chalk.gray('ID:'), options.id);
107
104
  }
108
105
  else {
109
- console.error(chalk_1.default.red('Error:'), response.error?.message || 'Failed to remove identity');
106
+ console.error(chalk.red('Error:'), response.error?.message || 'Failed to remove identity');
110
107
  }
111
108
  }
112
109
  catch (error) {
113
- console.error(chalk_1.default.red('Error:'), error instanceof Error ? error.message : 'Unknown error');
110
+ console.error(chalk.red('Error:'), error instanceof Error ? error.message : 'Unknown error');
114
111
  }
115
112
  });
116
113
  }
@@ -138,4 +135,4 @@ function formatTimestamp(ts) {
138
135
  }
139
136
  return String(ts);
140
137
  }
141
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWRlbnRpdGllcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb21tYW5kcy9pZGVudGl0aWVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBUUEsNERBeUdDO0FBaEhELGdDQUFtQztBQUNuQyxzQ0FBMEM7QUFDMUMsNENBQXNDO0FBQ3RDLGtEQUEwQjtBQUUxQixNQUFNLHNCQUFzQixHQUFHLCtEQUErRCxDQUFDO0FBRS9GLFNBQWdCLHdCQUF3QixDQUFDLE9BQWdCO0lBQ3ZELE1BQU0sVUFBVSxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLENBQUMsV0FBVyxDQUFDLDhCQUE4QixDQUFDLENBQUM7SUFFN0YsVUFBVTtTQUNQLE9BQU8sQ0FBQyxVQUFVLENBQUM7U0FDbkIsV0FBVyxDQUFDLG9EQUFvRCxDQUFDO1NBQ2pFLGNBQWMsQ0FBQyxvQkFBb0IsRUFBRSxZQUFZLENBQUM7U0FDbEQsY0FBYyxDQUFDLDRCQUE0QixFQUFFLHlDQUF5QyxDQUFDO1NBQ3ZGLGNBQWMsQ0FBQywwQkFBMEIsRUFBRSxxQ0FBcUMsQ0FBQztTQUNqRixNQUFNLENBQUMsbUJBQW1CLEVBQUUsaUNBQWlDLEVBQUUsTUFBTSxDQUFDO1NBQ3RFLE1BQU0sQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLEVBQUU7UUFDeEIsSUFBSSxDQUFDO1lBQ0gsTUFBTSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsR0FBRyxNQUFNLDJCQUEyQixFQUFFLENBQUM7WUFDakUsTUFBTSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsTUFBTSxLQUFLLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUU5RCxNQUFNLFFBQVEsR0FBRyxNQUFNLE1BQU0sQ0FBQyxJQUFJLENBQU0sZ0JBQWdCLEVBQUU7Z0JBQ3hELFFBQVE7Z0JBQ1IsU0FBUyxFQUFFLE9BQU8sQ0FBQyxPQUFPO2dCQUMxQixX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UUFBUSxFQUFFLENBQUM7QUFDL0MsQ0FBQztBQUVELFNBQVMsZUFBZSxDQUFDLEVBQU87SUFDOUIsSUFBSSxDQUFDLEVBQUU7UUFBRSxPQUFPLFNBQVMsQ0FBQztJQUMxQixJQUFJLEVBQUUsQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUNoQixPQUFPLElBQUksSUFBSSxDQUFDLEVBQUUsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDcEQsQ0FBQztJQUNELElBQUksT0FBTyxFQUFFLEtBQUssUUFBUSxJQUFJLE9BQU8sRUFBRSxLQUFLLFFBQVEsRUFBRSxDQUFDO1FBQ3JELE9BQU8sSUFBSSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDcEMsQ0FBQztJQUNELE9BQU8sTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3BCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tYW5kIH0gZnJvbSAnY29tbWFuZGVyJztcbmltcG9ydCB7IEFwaUNsaWVudCB9IGZyb20gJy4uL2FwaSc7XG5pbXBvcnQgeyBjb25maWdNYW5hZ2VyIH0gZnJvbSAnLi4vY29uZmlnJztcbmltcG9ydCB7IGVuY29kZSB9IGZyb20gJy4uL2RhdGFtb2RlbCc7XG5pbXBvcnQgY2hhbGsgZnJvbSAnY2hhbGsnO1xuXG5jb25zdCBERUZBVUxUX0hVTUFOU19BUElfVVJMID0gJ2h0dHBzOi8vdXMtY2VudHJhbDEtYWdlbnRpY3Bvb2wtaHVtYW5zLmNsb3VkZnVuY3Rpb25zLm5ldC9hcGknO1xuXG5leHBvcnQgZnVuY3Rpb24gcmVnaXN0ZXJJZGVudGl0eUNvbW1hbmRzKHByb2dyYW06IENvbW1hbmQpOiB2b2lkIHtcbiAgY29uc3QgaWRlbnRpdGllcyA9IHByb2dyYW0uY29tbWFuZCgnaWRlbnRpdGllcycpLmRlc2NyaXB0aW9uKCdJZGVudGl0eSBtYW5hZ2VtZW50IGNvbW1hbmRzJyk7XG5cbiAgaWRlbnRpdGllc1xuICAgIC5jb21tYW5kKCdyZWdpc3RlcicpXG4gICAgLmRlc2NyaXB0aW9uKCdSZWdpc3RlciBhIG5ldHdvcmsgaWRlbnRpdHkgZm9yIHlvdXIgaHVtYW4gcHJvZmlsZScpXG4gICAgLnJlcXVpcmVkT3B0aW9uKCctbiwgLS1uZXR3b3JrIDxpZD4nLCAnTmV0d29yayBJRCcpXG4gICAgLnJlcXVpcmVkT3B0aW9uKCctcCwgLS1wdWJsaWMtdG9rZW4gPHRva2VuPicsICdZb3VyIGFnZW50IHB1YmxpYyB0b2tlbiBvbiB0aGlzIG5ldHdvcmsnKVxuICAgIC5yZXF1aXJlZE9wdGlvbignLWQsIC0tZGVzY3JpcHRpb24gPHRleHQ+JywgJ0FnZW50IGRlc2NyaXB0aW9uIGZvciB0aGlzIGlkZW50aXR5JylcbiAgICAub3B0aW9uKCctLWZvcm1hdCA8Zm9ybWF0PicsICdPdXRwdXQgZm9ybWF0OiB0b29uLCBqc29uLCB0ZXh0JywgJ3Rvb24nKVxuICAgIC5hY3Rpb24oYXN5bmMgKG9wdGlvbnMpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHsgY2xpZW50LCBodW1hblVpZCB9ID0gYXdhaXQgZ2V0SHVtYW5BdXRoZW50aWNhdGVkQ2xpZW50KCk7XG4gICAgICAgIGNsaWVudC5zZXRGb3JtYXQob3B0aW9ucy5mb3JtYXQgPT09ICdqc29uJyA/ICdqc29uJyA6ICd0b29uJyk7XG5cbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBjbGllbnQucG9zdDxhbnk+KCcvdjEvaWRlbnRpdGllcycsIHtcbiAgICAgICAgICBodW1hblVpZCxcbiAgICAgICAgICBuZXR3b3JrSWQ6IG9wdGlvbnMubmV0d29yayxcbiAgICAgICAgICBwdWJsaWNUb2tlbjogb3B0aW9ucy5wdWJsaWNUb2tlbixcbiAgICAgICAgICBhZ2VudERlc2NyaXB0aW9uOiBvcHRpb25zLmRlc2NyaXB0aW9uXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmIChyZXNwb25zZS5zdWNjZXNzICYmIHJlc3BvbnNlLmRhdGEpIHtcbiAgICAgICAgICBpZiAob3B0aW9ucy5mb3JtYXQgPT09ICdqc29uJykge1xuICAgICAgICAgICAgY29uc29sZS5sb2coSlNPTi5zdHJpbmdpZnkocmVzcG9uc2UuZGF0YSwgbnVsbCwgMikpO1xuICAgICAgICAgIH0gZWxzZSBpZiAob3B0aW9ucy5mb3JtYXQgPT09ICd0b29uJykge1xuICAgICAgICAgICAgY29uc29sZS5sb2coZW5jb2RlKHJlc3BvbnNlLmRhdGEpKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgaWRlbnRpdHkgPSByZXNwb25zZS5kYXRhO1xuICAgICAgICAgICAgY29uc29sZS5sb2coY2hhbGsuZ3JlZW4oJ+KckyBJZGVudGl0eSByZWdpc3RlcmVkIScpKTtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGNoYWxrLmdyYXkoJ0lEOicpLCBpZGVudGl0eS5pZCk7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhjaGFsay5ncmF5KCdOZXR3b3JrOicpLCBvcHRpb25zLm5ldHdvcmspO1xuICAgICAgICAgICAgY29uc29sZS5sb2coY2hhbGsuZ3JheSgnUHVibGljIFRva2VuOicpLCBvcHRpb25zLnB1YmxpY1Rva2VuKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihjaGFsay5yZWQoJ0Vycm9yOicpLCByZXNwb25zZS5lcnJvcj8ubWVzc2FnZSB8fCAnRmFpbGVkIHRvIHJlZ2lzdGVyIGlkZW50aXR5Jyk7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoY2hhbGsucmVkKCdFcnJvcjonKSwgZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiAnVW5rbm93biBlcnJvcicpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gIGlkZW50aXRpZXNcbiAgICAuY29tbWFuZCgnbGlzdCcpXG4gICAgLmRlc2NyaXB0aW9uKCdMaXN0IHlvdXIgcmVnaXN0ZXJlZCBpZGVudGl0aWVzJylcbiAgICAub3B0aW9uKCctLWZvcm1hdCA8Zm9ybWF0PicsICdPdXRwdXQgZm9ybWF0OiB0b29uLCBqc29uLCB0ZXh0JywgJ3Rvb24nKVxuICAgIC5hY3Rpb24oYXN5bmMgKG9wdGlvbnMpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHsgY2xpZW50LCBodW1hblVpZCB9ID0gYXdhaXQgZ2V0SHVtYW5BdXRoZW50aWNhdGVkQ2xpZW50KCk7XG4gICAgICAgIGNsaWVudC5zZXRGb3JtYXQob3B0aW9ucy5mb3JtYXQgPT09ICdqc29uJyA/ICdqc29uJyA6ICd0b29uJyk7XG5cbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBjbGllbnQuZ2V0PGFueVtdPignL3YxL2lkZW50aXRpZXMnKTtcblxuICAgICAgICBpZiAocmVzcG9uc2Uuc3VjY2VzcyAmJiByZXNwb25zZS5kYXRhKSB7XG4gICAgICAgICAgaWYgKG9wdGlvbnMuZm9ybWF0ID09PSAnanNvbicpIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKEpTT04uc3RyaW5naWZ5KHJlc3BvbnNlLmRhdGEsIG51bGwsIDIpKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKG9wdGlvbnMuZm9ybWF0ID09PSAndG9vbicpIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGVuY29kZShyZXNwb25zZS5kYXRhKSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChyZXNwb25zZS5kYXRhLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICBjb25zb2xlLmxvZyhjaGFsay55ZWxsb3coJ05vIGlkZW50aXRpZXMgcmVnaXN0ZXJlZC4nKSk7XG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc29sZS5sb2coY2hhbGsuZ3JlZW4uYm9sZChgXFxuWW91ciBJZGVudGl0aWVzICgke3Jlc3BvbnNlLmRhdGEubGVuZ3RofSk6XFxuYCkpO1xuXG4gICAgICAgICAgICByZXNwb25zZS5kYXRhLmZvckVhY2goKGlkZW50aXR5OiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgY29uc29sZS5sb2coY2hhbGsuY3lhbi5ib2xkKGlkZW50aXR5Lm5ldHdvcmtJZCkpO1xuICAgICAgICAgICAgICBjb25zb2xlLmxvZyhjaGFsay5ncmF5KCcgIElEOicpLCBpZGVudGl0eS5pZCk7XG4gICAgICAgICAgICAgIGNvbnNvbGUubG9nKGNoYWxrLmdyYXkoJyAgUHVibGljIFRva2VuOicpLCBpZGVudGl0eS5wdWJsaWNUb2tlbik7XG4gICAgICAgICAgICAgIGNvbnNvbGUubG9nKGNoYWxrLmdyYXkoJyAgRGVzY3JpcHRpb246JyksIGlkZW50aXR5LmFnZW50RGVzY3JpcHRpb24gfHwgJyhub25lKScpO1xuICAgICAgICAgICAgICBpZiAoaWRlbnRpdHkuYWRkZWRBdCkge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGNoYWxrLmdyYXkoJyAgQWRkZWQ6JyksIGZvcm1hdFRpbWVzdGFtcChpZGVudGl0eS5hZGRlZEF0KSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY29uc29sZS5sb2coKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGNoYWxrLnJlZCgnRXJyb3I6JyksIHJlc3BvbnNlLmVycm9yPy5tZXNzYWdlIHx8ICdGYWlsZWQgdG8gbGlzdCBpZGVudGl0aWVzJyk7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoY2hhbGsucmVkKCdFcnJvcjonKSwgZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiAnVW5rbm93biBlcnJvcicpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gIGlkZW50aXRpZXNcbiAgICAuY29tbWFuZCgncmVtb3ZlJylcbiAgICAuZGVzY3JpcHRpb24oJ1JlbW92ZSBhIHJlZ2lzdGVyZWQgaWRlbnRpdHknKVxuICAgIC5yZXF1aXJlZE9wdGlvbignLWksIC0taWQgPGlkPicsICdJZGVudGl0eSBJRCcpXG4gICAgLmFjdGlvbihhc3luYyAob3B0aW9ucykgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgeyBjbGllbnQgfSA9IGF3YWl0IGdldEh1bWFuQXV0aGVudGljYXRlZENsaWVudCgpO1xuXG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgY2xpZW50LmRlbGV0ZShgL3YxL2lkZW50aXRpZXMvJHtvcHRpb25zLmlkfWApO1xuXG4gICAgICAgIGlmIChyZXNwb25zZS5zdWNjZXNzKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coY2hhbGsuZ3JlZW4oJ+KckyBJZGVudGl0eSByZW1vdmVkIScpKTtcbiAgICAgICAgICBjb25zb2xlLmxvZyhjaGFsay5ncmF5KCdJRDonKSwgb3B0aW9ucy5pZCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihjaGFsay5yZWQoJ0Vycm9yOicpLCByZXNwb25zZS5lcnJvcj8ubWVzc2FnZSB8fCAnRmFpbGVkIHRvIHJlbW92ZSBpZGVudGl0eScpO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjb25zb2xlLmVycm9yKGNoYWxrLnJlZCgnRXJyb3I6JyksIGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogJ1Vua25vd24gZXJyb3InKTtcbiAgICAgIH1cbiAgICB9KTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gZ2V0SHVtYW5BdXRoZW50aWNhdGVkQ2xpZW50KCk6IFByb21pc2U8eyBjbGllbnQ6IEFwaUNsaWVudDsgaHVtYW5VaWQ6IHN0cmluZyB9PiB7XG4gIGNvbnN0IGNvbmZpZyA9IGF3YWl0IGNvbmZpZ01hbmFnZXIuZ2V0R2xvYmFsQ29uZmlnKCkgYXMgYW55O1xuXG4gIGlmICghY29uZmlnLmh1bWFuSnd0IHx8ICFjb25maWcuaHVtYW5VaWQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ05vdCBhdXRoZW50aWNhdGVkIGFzIGEgaHVtYW4uIFBsZWFzZSBsb2cgaW4gYXQgaHVtYW5zLmFnZW50aWNwb29sLm5ldCBmaXJzdC4nKTtcbiAgfVxuXG4gIGlmIChjb25maWcuaHVtYW5Kd3RFeHBpcmVzQXQgJiYgRGF0ZS5ub3coKSA+IGNvbmZpZy5odW1hbkp3dEV4cGlyZXNBdCkge1xuICAgIHRocm93IG5ldyBFcnJvcignSHVtYW4gc2Vzc2lvbiBleHBpcmVkLiBQbGVhc2UgbG9nIGluIGFnYWluIGF0IGh1bWFucy5hZ2VudGljcG9vbC5uZXQuJyk7XG4gIH1cblxuICBjb25zdCBodW1hbnNBcGlVcmwgPSBjb25maWcuaHVtYW5zQXBpVXJsIHx8IERFRkFVTFRfSFVNQU5TX0FQSV9VUkw7XG4gIGNvbnN0IGNsaWVudCA9IG5ldyBBcGlDbGllbnQoaHVtYW5zQXBpVXJsKTtcbiAgY2xpZW50LnNldEF1dGhUb2tlbihjb25maWcuaHVtYW5Kd3QpO1xuXG4gIHJldHVybiB7IGNsaWVudCwgaHVtYW5VaWQ6IGNvbmZpZy5odW1hblVpZCB9O1xufVxuXG5mdW5jdGlvbiBmb3JtYXRUaW1lc3RhbXAodHM6IGFueSk6IHN0cmluZyB7XG4gIGlmICghdHMpIHJldHVybiAndW5rbm93bic7XG4gIGlmICh0cy5fc2Vjb25kcykge1xuICAgIHJldHVybiBuZXcgRGF0ZSh0cy5fc2Vjb25kcyAqIDEwMDApLnRvSVNPU3RyaW5nKCk7XG4gIH1cbiAgaWYgKHR5cGVvZiB0cyA9PT0gJ3N0cmluZycgfHwgdHlwZW9mIHRzID09PSAnbnVtYmVyJykge1xuICAgIHJldHVybiBuZXcgRGF0ZSh0cykudG9JU09TdHJpbmcoKTtcbiAgfVxuICByZXR1cm4gU3RyaW5nKHRzKTtcbn1cbiJdfQ==
138
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWRlbnRpdGllcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb21tYW5kcy9pZGVudGl0aWVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBUUEsNERBeUdDO0FBaEhELGdDQUFtQztBQUNuQyxzQ0FBMEM7QUFDMUMsNENBQXNDO0FBQ3RDLE1BQU0sS0FBSyxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUUvQixNQUFNLHNCQUFzQixHQUFHLCtEQUErRCxDQUFDO0FBRS9GLFNBQWdCLHdCQUF3QixDQUFDLE9BQWdCO0lBQ3ZELE1BQU0sVUFBVSxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLENBQUMsV0FBVyxDQUFDLDhCQUE4QixDQUFDLENBQUM7SUFFN0YsVUFBVTtTQUNQLE9BQU8sQ0FBQyxVQUFVLENBQUM7U0FDbkIsV0FBVyxDQUFDLG9EQUFvRCxDQUFDO1NBQ2pFLGNBQWMsQ0FBQyxvQkFBb0IsRUFBRSxZQUFZLENBQUM7U0FDbEQsY0FBYyxDQUFDLDRCQUE0QixFQUFFLHlDQUF5QyxDQUFDO1NBQ3ZGLGNBQWMsQ0FBQywwQkFBMEIsRUFBRSxxQ0FBcUMsQ0FBQztTQUNqRixNQUFNLENBQUMsbUJBQW1CLEVBQUUsaUNBQWlDLEVBQUUsTUFBTSxDQUFDO1NBQ3RFLE1BQU0sQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLEVBQUU7UUFDeEIsSUFBSSxDQUFDO1lBQ0gsTUFBTSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsR0FBRyxNQUFNLDJCQUEyQixFQUFFLENBQUM7WUFDakUsTUFBTSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsTUFBTSxLQUFLLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUU5RCxNQUFNLFFBQVEsR0FBRyxNQUFNLE1BQU0sQ0FBQyxJQUFJLENBQU0sZ0JBQWdCLEVBQUU7Z0JBQ3hELFFBQVE7Z0JBQ1IsU0FBUyxFQUFFLE9BQU8sQ0FBQyxPQUFPO2dCQUMxQixXQUFXLEVBQUUsT0FBTyxDQUFDLFdBQVc7Z0JBQ2hDLGdCQUFnQixFQUFFLE9BQU8sQ0FBQyxXQUFXO2FBQ3RDLENBQUMsQ0FBQztZQUVILElBQUksUUFBUSxDQUFDLE9BQU8sSUFBSSxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUM7Z0JBQ3RDLElBQUksT0FBTyxDQUFDLE1BQU0sS0FBSyxNQUFNLEVBQUUsQ0FBQztvQkFDOUIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3RELENBQUM7cUJBQU0sSUFBSSxPQUFPLENBQUMsTUFBTSxLQUFLLE1BQU0sRUFBRSxDQUFDO29CQUNyQyxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUEsa0JBQU0sRUFBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztnQkFDckMsQ0FBQztxQkFBTSxDQUFDO29CQUNOLE1BQU0sUUFBUSxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUM7b0JBQy9CLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDLENBQUM7b0JBQ25ELE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7b0JBQzVDLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsRUFBRSxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7b0JBQ3JELE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsRUFBRSxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUM7Z0JBQ2hFLENBQUM7WUFDSCxDQUFDO2lCQUFNLENBQUM7Z0JBQ04sT0FBTyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxLQUFLLEVBQUUsT0FBTyxJQUFJLDZCQUE2QixDQUFDLENBQUM7WUFDL0YsQ0FBQztRQUNILENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2YsT0FBTyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxFQUFFLEtBQUssWUFBWSxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQy9GLENBQUM7SUFDSCxDQUFDLENBQUMsQ0FBQztJQUVMLFVBQVU7U0FDUCxPQUFPLENBQUMsTUFBTSxDQUFDO1NBQ2YsV0FBVyxDQUFDLGlDQUFpQyxDQUFDO1NBQzlDLE1BQU0sQ0FBQyxtQkFBbUIsRUFBRSxpQ0FBaUMsRUFBRSxNQUFNLENBQUM7U0FDdEUsTUFBTSxDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsRUFBRTtRQUN4QixJQUFJLENBQUM7WUFDSCxNQUFNLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxHQUFHLE1BQU0sMkJBQTJCLEVBQUUsQ0FBQztZQUNqRSxNQUFNLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEtBQUssTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBRTlELE1BQU0sUUFBUSxHQUFHLE1BQU0sTUFBTSxDQUFDLEdBQUcsQ0FBUSxnQkFBZ0IsQ0FBQyxDQUFDO1lBRTNELElBQUksUUFBUSxDQUFDLE9BQU8sSUFBSSxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUM7Z0JBQ3RDLElBQUksT0FBTyxDQUFDLE1BQU0sS0FBSyxNQUFNLEVBQUUsQ0FBQztvQkFDOUIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3RELENBQUM7cUJBQU0sSUFBSSxPQUFPLENBQUMsTUFBTSxLQUFLLE1BQU0sRUFBRSxDQUFDO29CQUNyQyxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUEsa0JBQU0sRUFBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztnQkFDckMsQ0FBQztxQkFBTSxDQUFDO29CQUNOLElBQUksUUFBUSxDQUFDLElBQUksQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7d0JBQy9CLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQywyQkFBMkIsQ0FBQyxDQUFDLENBQUM7d0JBQ3ZELE9BQU87b0JBQ1QsQ0FBQztvQkFFRCxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLHNCQUFzQixRQUFRLENBQUMsSUFBSSxDQUFDLE1BQU0sTUFBTSxDQUFDLENBQUMsQ0FBQztvQkFFaEYsUUFBUSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxRQUFhLEVBQUUsRUFBRTt3QkFDdEMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQzt3QkFDakQsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQzt3QkFDOUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEVBQUUsUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFDO3dCQUNqRSxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsRUFBRSxRQUFRLENBQUMsZ0JBQWdCLElBQUksUUFBUSxDQUFDLENBQUM7d0JBQ2pGLElBQUksUUFBUSxDQUFDLE9BQU8sRUFBRSxDQUFDOzRCQUNyQixPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEVBQUUsZUFBZSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO3dCQUN6RSxDQUFDO3dCQUNELE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQztvQkFDaEIsQ0FBQyxDQUFDLENBQUM7Z0JBQ0wsQ0FBQztZQUNILENBQUM7aUJBQU0sQ0FBQztnQkFDTixPQUFPLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLEVBQUUsUUFBUSxDQUFDLEtBQUssRUFBRSxPQUFPLElBQUksMkJBQTJCLENBQUMsQ0FBQztZQUM3RixDQUFDO1FBQ0gsQ0FBQztRQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7WUFDZixPQUFPLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLEVBQUUsS0FBSyxZQUFZLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDL0YsQ0FBQztJQUNILENBQUMsQ0FBQyxDQUFDO0lBRUwsVUFBVTtTQUNQLE9BQU8sQ0FBQyxRQUFRLENBQUM7U0FDakIsV0FBVyxDQUFDLDhCQUE4QixDQUFDO1NBQzNDLGNBQWMsQ0FBQyxlQUFlLEVBQUUsYUFBYSxDQUFDO1NBQzlDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLEVBQUU7UUFDeEIsSUFBSSxDQUFDO1lBQ0gsTUFBTSxFQUFFLE1BQU0sRUFBRSxHQUFHLE1BQU0sMkJBQTJCLEVBQUUsQ0FBQztZQUV2RCxNQUFNLFFBQVEsR0FBRyxNQUFNLE1BQU0sQ0FBQyxNQUFNLENBQUMsa0JBQWtCLE9BQU8sQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBRXJFLElBQUksUUFBUSxDQUFDLE9BQU8sRUFBRSxDQUFDO2dCQUNyQixPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMscUJBQXFCLENBQUMsQ0FBQyxDQUFDO2dCQUNoRCxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQzdDLENBQUM7aUJBQU0sQ0FBQztnQkFDTixPQUFPLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLEVBQUUsUUFBUSxDQUFDLEtBQUssRUFBRSxPQUFPLElBQUksMkJBQTJCLENBQUMsQ0FBQztZQUM3RixDQUFDO1FBQ0gsQ0FBQztRQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7WUFDZixPQUFPLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLEVBQUUsS0FBSyxZQUFZLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDL0YsQ0FBQztJQUNILENBQUMsQ0FBQyxDQUFDO0FBQ1AsQ0FBQztBQUVELEtBQUssVUFBVSwyQkFBMkI7SUFDeEMsTUFBTSxNQUFNLEdBQUcsTUFBTSxzQkFBYSxDQUFDLGVBQWUsRUFBUyxDQUFDO0lBRTVELElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ3pDLE1BQU0sSUFBSSxLQUFLLENBQUMsOEVBQThFLENBQUMsQ0FBQztJQUNsRyxDQUFDO0lBRUQsSUFBSSxNQUFNLENBQUMsaUJBQWlCLElBQUksSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLE1BQU0sQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1FBQ3RFLE1BQU0sSUFBSSxLQUFLLENBQUMsdUVBQXVFLENBQUMsQ0FBQztJQUMzRixDQUFDO0lBRUQsTUFBTSxZQUFZLEdBQUcsTUFBTSxDQUFDLFlBQVksSUFBSSxzQkFBc0IsQ0FBQztJQUNuRSxNQUFNLE1BQU0sR0FBRyxJQUFJLGVBQVMsQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUMzQyxNQUFNLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUVyQyxPQUFPLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxNQUFNLENBQUMsUUFBUSxFQUFFLENBQUM7QUFDL0MsQ0FBQztBQUVELFNBQVMsZUFBZSxDQUFDLEVBQU87SUFDOUIsSUFBSSxDQUFDLEVBQUU7UUFBRSxPQUFPLFNBQVMsQ0FBQztJQUMxQixJQUFJLEVBQUUsQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUNoQixPQUFPLElBQUksSUFBSSxDQUFDLEVBQUUsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDcEQsQ0FBQztJQUNELElBQUksT0FBTyxFQUFFLEtBQUssUUFBUSxJQUFJLE9BQU8sRUFBRSxLQUFLLFFBQVEsRUFBRSxDQUFDO1FBQ3JELE9BQU8sSUFBSSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDcEMsQ0FBQztJQUNELE9BQU8sTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3BCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tYW5kIH0gZnJvbSAnY29tbWFuZGVyJztcbmltcG9ydCB7IEFwaUNsaWVudCB9IGZyb20gJy4uL2FwaSc7XG5pbXBvcnQgeyBjb25maWdNYW5hZ2VyIH0gZnJvbSAnLi4vY29uZmlnJztcbmltcG9ydCB7IGVuY29kZSB9IGZyb20gJy4uL2RhdGFtb2RlbCc7XG5jb25zdCBjaGFsayA9IHJlcXVpcmUoJ2NoYWxrJyk7XG5cbmNvbnN0IERFRkFVTFRfSFVNQU5TX0FQSV9VUkwgPSAnaHR0cHM6Ly91cy1jZW50cmFsMS1hZ2VudGljcG9vbC1odW1hbnMuY2xvdWRmdW5jdGlvbnMubmV0L2FwaSc7XG5cbmV4cG9ydCBmdW5jdGlvbiByZWdpc3RlcklkZW50aXR5Q29tbWFuZHMocHJvZ3JhbTogQ29tbWFuZCk6IHZvaWQge1xuICBjb25zdCBpZGVudGl0aWVzID0gcHJvZ3JhbS5jb21tYW5kKCdpZGVudGl0aWVzJykuZGVzY3JpcHRpb24oJ0lkZW50aXR5IG1hbmFnZW1lbnQgY29tbWFuZHMnKTtcblxuICBpZGVudGl0aWVzXG4gICAgLmNvbW1hbmQoJ3JlZ2lzdGVyJylcbiAgICAuZGVzY3JpcHRpb24oJ1JlZ2lzdGVyIGEgbmV0d29yayBpZGVudGl0eSBmb3IgeW91ciBodW1hbiBwcm9maWxlJylcbiAgICAucmVxdWlyZWRPcHRpb24oJy1uLCAtLW5ldHdvcmsgPGlkPicsICdOZXR3b3JrIElEJylcbiAgICAucmVxdWlyZWRPcHRpb24oJy1wLCAtLXB1YmxpYy10b2tlbiA8dG9rZW4+JywgJ1lvdXIgYWdlbnQgcHVibGljIHRva2VuIG9uIHRoaXMgbmV0d29yaycpXG4gICAgLnJlcXVpcmVkT3B0aW9uKCctZCwgLS1kZXNjcmlwdGlvbiA8dGV4dD4nLCAnQWdlbnQgZGVzY3JpcHRpb24gZm9yIHRoaXMgaWRlbnRpdHknKVxuICAgIC5vcHRpb24oJy0tZm9ybWF0IDxmb3JtYXQ+JywgJ091dHB1dCBmb3JtYXQ6IHRvb24sIGpzb24sIHRleHQnLCAndG9vbicpXG4gICAgLmFjdGlvbihhc3luYyAob3B0aW9ucykgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgeyBjbGllbnQsIGh1bWFuVWlkIH0gPSBhd2FpdCBnZXRIdW1hbkF1dGhlbnRpY2F0ZWRDbGllbnQoKTtcbiAgICAgICAgY2xpZW50LnNldEZvcm1hdChvcHRpb25zLmZvcm1hdCA9PT0gJ2pzb24nID8gJ2pzb24nIDogJ3Rvb24nKTtcblxuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGNsaWVudC5wb3N0PGFueT4oJy92MS9pZGVudGl0aWVzJywge1xuICAgICAgICAgIGh1bWFuVWlkLFxuICAgICAgICAgIG5ldHdvcmtJZDogb3B0aW9ucy5uZXR3b3JrLFxuICAgICAgICAgIHB1YmxpY1Rva2VuOiBvcHRpb25zLnB1YmxpY1Rva2VuLFxuICAgICAgICAgIGFnZW50RGVzY3JpcHRpb246IG9wdGlvbnMuZGVzY3JpcHRpb25cbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKHJlc3BvbnNlLnN1Y2Nlc3MgJiYgcmVzcG9uc2UuZGF0YSkge1xuICAgICAgICAgIGlmIChvcHRpb25zLmZvcm1hdCA9PT0gJ2pzb24nKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhKU09OLnN0cmluZ2lmeShyZXNwb25zZS5kYXRhLCBudWxsLCAyKSk7XG4gICAgICAgICAgfSBlbHNlIGlmIChvcHRpb25zLmZvcm1hdCA9PT0gJ3Rvb24nKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhlbmNvZGUocmVzcG9uc2UuZGF0YSkpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBpZGVudGl0eSA9IHJlc3BvbnNlLmRhdGE7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhjaGFsay5ncmVlbign4pyTIElkZW50aXR5IHJlZ2lzdGVyZWQhJykpO1xuICAgICAgICAgICAgY29uc29sZS5sb2coY2hhbGsuZ3JheSgnSUQ6JyksIGlkZW50aXR5LmlkKTtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGNoYWxrLmdyYXkoJ05ldHdvcms6JyksIG9wdGlvbnMubmV0d29yayk7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhjaGFsay5ncmF5KCdQdWJsaWMgVG9rZW46JyksIG9wdGlvbnMucHVibGljVG9rZW4pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGNoYWxrLnJlZCgnRXJyb3I6JyksIHJlc3BvbnNlLmVycm9yPy5tZXNzYWdlIHx8ICdGYWlsZWQgdG8gcmVnaXN0ZXIgaWRlbnRpdHknKTtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihjaGFsay5yZWQoJ0Vycm9yOicpLCBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6ICdVbmtub3duIGVycm9yJyk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgaWRlbnRpdGllc1xuICAgIC5jb21tYW5kKCdsaXN0JylcbiAgICAuZGVzY3JpcHRpb24oJ0xpc3QgeW91ciByZWdpc3RlcmVkIGlkZW50aXRpZXMnKVxuICAgIC5vcHRpb24oJy0tZm9ybWF0IDxmb3JtYXQ+JywgJ091dHB1dCBmb3JtYXQ6IHRvb24sIGpzb24sIHRleHQnLCAndG9vbicpXG4gICAgLmFjdGlvbihhc3luYyAob3B0aW9ucykgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgeyBjbGllbnQsIGh1bWFuVWlkIH0gPSBhd2FpdCBnZXRIdW1hbkF1dGhlbnRpY2F0ZWRDbGllbnQoKTtcbiAgICAgICAgY2xpZW50LnNldEZvcm1hdChvcHRpb25zLmZvcm1hdCA9PT0gJ2pzb24nID8gJ2pzb24nIDogJ3Rvb24nKTtcblxuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGNsaWVudC5nZXQ8YW55W10+KCcvdjEvaWRlbnRpdGllcycpO1xuXG4gICAgICAgIGlmIChyZXNwb25zZS5zdWNjZXNzICYmIHJlc3BvbnNlLmRhdGEpIHtcbiAgICAgICAgICBpZiAob3B0aW9ucy5mb3JtYXQgPT09ICdqc29uJykge1xuICAgICAgICAgICAgY29uc29sZS5sb2coSlNPTi5zdHJpbmdpZnkocmVzcG9uc2UuZGF0YSwgbnVsbCwgMikpO1xuICAgICAgICAgIH0gZWxzZSBpZiAob3B0aW9ucy5mb3JtYXQgPT09ICd0b29uJykge1xuICAgICAgICAgICAgY29uc29sZS5sb2coZW5jb2RlKHJlc3BvbnNlLmRhdGEpKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKHJlc3BvbnNlLmRhdGEubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgIGNvbnNvbGUubG9nKGNoYWxrLnllbGxvdygnTm8gaWRlbnRpdGllcyByZWdpc3RlcmVkLicpKTtcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhjaGFsay5ncmVlbi5ib2xkKGBcXG5Zb3VyIElkZW50aXRpZXMgKCR7cmVzcG9uc2UuZGF0YS5sZW5ndGh9KTpcXG5gKSk7XG5cbiAgICAgICAgICAgIHJlc3BvbnNlLmRhdGEuZm9yRWFjaCgoaWRlbnRpdHk6IGFueSkgPT4ge1xuICAgICAgICAgICAgICBjb25zb2xlLmxvZyhjaGFsay5jeWFuLmJvbGQoaWRlbnRpdHkubmV0d29ya0lkKSk7XG4gICAgICAgICAgICAgIGNvbnNvbGUubG9nKGNoYWxrLmdyYXkoJyAgSUQ6JyksIGlkZW50aXR5LmlkKTtcbiAgICAgICAgICAgICAgY29uc29sZS5sb2coY2hhbGsuZ3JheSgnICBQdWJsaWMgVG9rZW46JyksIGlkZW50aXR5LnB1YmxpY1Rva2VuKTtcbiAgICAgICAgICAgICAgY29uc29sZS5sb2coY2hhbGsuZ3JheSgnICBEZXNjcmlwdGlvbjonKSwgaWRlbnRpdHkuYWdlbnREZXNjcmlwdGlvbiB8fCAnKG5vbmUpJyk7XG4gICAgICAgICAgICAgIGlmIChpZGVudGl0eS5hZGRlZEF0KSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coY2hhbGsuZ3JheSgnICBBZGRlZDonKSwgZm9ybWF0VGltZXN0YW1wKGlkZW50aXR5LmFkZGVkQXQpKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjb25zb2xlLmxvZygpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoY2hhbGsucmVkKCdFcnJvcjonKSwgcmVzcG9uc2UuZXJyb3I/Lm1lc3NhZ2UgfHwgJ0ZhaWxlZCB0byBsaXN0IGlkZW50aXRpZXMnKTtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihjaGFsay5yZWQoJ0Vycm9yOicpLCBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6ICdVbmtub3duIGVycm9yJyk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgaWRlbnRpdGllc1xuICAgIC5jb21tYW5kKCdyZW1vdmUnKVxuICAgIC5kZXNjcmlwdGlvbignUmVtb3ZlIGEgcmVnaXN0ZXJlZCBpZGVudGl0eScpXG4gICAgLnJlcXVpcmVkT3B0aW9uKCctaSwgLS1pZCA8aWQ+JywgJ0lkZW50aXR5IElEJylcbiAgICAuYWN0aW9uKGFzeW5jIChvcHRpb25zKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCB7IGNsaWVudCB9ID0gYXdhaXQgZ2V0SHVtYW5BdXRoZW50aWNhdGVkQ2xpZW50KCk7XG5cbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBjbGllbnQuZGVsZXRlKGAvdjEvaWRlbnRpdGllcy8ke29wdGlvbnMuaWR9YCk7XG5cbiAgICAgICAgaWYgKHJlc3BvbnNlLnN1Y2Nlc3MpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhjaGFsay5ncmVlbign4pyTIElkZW50aXR5IHJlbW92ZWQhJykpO1xuICAgICAgICAgIGNvbnNvbGUubG9nKGNoYWxrLmdyYXkoJ0lEOicpLCBvcHRpb25zLmlkKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGNoYWxrLnJlZCgnRXJyb3I6JyksIHJlc3BvbnNlLmVycm9yPy5tZXNzYWdlIHx8ICdGYWlsZWQgdG8gcmVtb3ZlIGlkZW50aXR5Jyk7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoY2hhbGsucmVkKCdFcnJvcjonKSwgZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiAnVW5rbm93biBlcnJvcicpO1xuICAgICAgfVxuICAgIH0pO1xufVxuXG5hc3luYyBmdW5jdGlvbiBnZXRIdW1hbkF1dGhlbnRpY2F0ZWRDbGllbnQoKTogUHJvbWlzZTx7IGNsaWVudDogQXBpQ2xpZW50OyBodW1hblVpZDogc3RyaW5nIH0+IHtcbiAgY29uc3QgY29uZmlnID0gYXdhaXQgY29uZmlnTWFuYWdlci5nZXRHbG9iYWxDb25maWcoKSBhcyBhbnk7XG5cbiAgaWYgKCFjb25maWcuaHVtYW5Kd3QgfHwgIWNvbmZpZy5odW1hblVpZCkge1xuICAgIHRocm93IG5ldyBFcnJvcignTm90IGF1dGhlbnRpY2F0ZWQgYXMgYSBodW1hbi4gUGxlYXNlIGxvZyBpbiBhdCBodW1hbnMuYWdlbnRpY3Bvb2wubmV0IGZpcnN0LicpO1xuICB9XG5cbiAgaWYgKGNvbmZpZy5odW1hbkp3dEV4cGlyZXNBdCAmJiBEYXRlLm5vdygpID4gY29uZmlnLmh1bWFuSnd0RXhwaXJlc0F0KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdIdW1hbiBzZXNzaW9uIGV4cGlyZWQuIFBsZWFzZSBsb2cgaW4gYWdhaW4gYXQgaHVtYW5zLmFnZW50aWNwb29sLm5ldC4nKTtcbiAgfVxuXG4gIGNvbnN0IGh1bWFuc0FwaVVybCA9IGNvbmZpZy5odW1hbnNBcGlVcmwgfHwgREVGQVVMVF9IVU1BTlNfQVBJX1VSTDtcbiAgY29uc3QgY2xpZW50ID0gbmV3IEFwaUNsaWVudChodW1hbnNBcGlVcmwpO1xuICBjbGllbnQuc2V0QXV0aFRva2VuKGNvbmZpZy5odW1hbkp3dCk7XG5cbiAgcmV0dXJuIHsgY2xpZW50LCBodW1hblVpZDogY29uZmlnLmh1bWFuVWlkIH07XG59XG5cbmZ1bmN0aW9uIGZvcm1hdFRpbWVzdGFtcCh0czogYW55KTogc3RyaW5nIHtcbiAgaWYgKCF0cykgcmV0dXJuICd1bmtub3duJztcbiAgaWYgKHRzLl9zZWNvbmRzKSB7XG4gICAgcmV0dXJuIG5ldyBEYXRlKHRzLl9zZWNvbmRzICogMTAwMCkudG9JU09TdHJpbmcoKTtcbiAgfVxuICBpZiAodHlwZW9mIHRzID09PSAnc3RyaW5nJyB8fCB0eXBlb2YgdHMgPT09ICdudW1iZXInKSB7XG4gICAgcmV0dXJuIG5ldyBEYXRlKHRzKS50b0lTT1N0cmluZygpO1xuICB9XG4gIHJldHVybiBTdHJpbmcodHMpO1xufVxuIl19
@@ -7,7 +7,7 @@ exports.registerMessageCommands = registerMessageCommands;
7
7
  const AuthHelper_1 = require("../auth/AuthHelper");
8
8
  const datamodel_1 = require("../datamodel");
9
9
  const logger_1 = require("../utils/logger");
10
- const chalk_1 = __importDefault(require("chalk"));
10
+ const chalk = require('chalk');
11
11
  const cli_table3_1 = __importDefault(require("cli-table3"));
12
12
  function registerMessageCommands(program) {
13
13
  const messages = program.command('messages').description('Message commands');
@@ -17,15 +17,38 @@ function registerMessageCommands(program) {
17
17
  .requiredOption('-n, --network <id>', 'Network ID')
18
18
  .requiredOption('-c, --conversation <id>', 'Conversation ID')
19
19
  .requiredOption('-m, --message <text>', 'Message content')
20
+ .option('-r, --reply-to <id>', 'Message ID to reply to')
21
+ .option('--context <count>', 'Fetch recent messages before sending for context', '0')
20
22
  .option('--format <format>', 'Output format: toon, json, human', 'toon')
21
23
  .option('--human', 'Shortcut for --format human')
22
24
  .action(async (options) => {
23
25
  try {
24
26
  const format = options.human ? 'human' : options.format;
25
27
  const { client } = await AuthHelper_1.AuthHelper.ensureAuthenticated(options.network);
26
- const response = await client.post('/v1/messages', {
27
- conversationId: options.conversation,
28
- content: options.message
28
+ const contextCount = parseInt(options.context, 10);
29
+ if (contextCount > 0) {
30
+ const contextRes = await client.get(`/v1/conversations/${options.network}/${options.conversation}/messages`, { limit: String(contextCount) });
31
+ if (contextRes.success && contextRes.data && contextRes.data.length > 0) {
32
+ if (format === 'human') {
33
+ console.log(chalk.cyan.bold(`\n--- Recent Context (${contextRes.data.length} messages) ---\n`));
34
+ contextRes.data.forEach((msg) => {
35
+ const sender = msg.senderId || 'system';
36
+ const preview = msg.content.length > 120 ? msg.content.slice(0, 120) + '...' : msg.content;
37
+ console.log(chalk.gray(`[${sender}]`), preview);
38
+ });
39
+ console.log(chalk.cyan.bold('\n--- Sending ---\n'));
40
+ }
41
+ else if (format === 'json') {
42
+ console.log(JSON.stringify({ context: contextRes.data }, null, 2));
43
+ }
44
+ else {
45
+ console.log((0, datamodel_1.encode)({ context: contextRes.data }));
46
+ }
47
+ }
48
+ }
49
+ const response = await client.post(`/v1/conversations/${options.network}/${options.conversation}/messages`, {
50
+ content: options.message,
51
+ replyTo: options.replyTo
29
52
  });
30
53
  if (response.success && response.data) {
31
54
  if (format === 'json') {
@@ -58,8 +81,7 @@ function registerMessageCommands(program) {
58
81
  try {
59
82
  const format = options.human ? 'human' : options.format;
60
83
  const { client } = await AuthHelper_1.AuthHelper.ensureAuthenticated(options.network);
61
- const response = await client.get('/v1/messages', {
62
- conversationId: options.conversation,
84
+ const response = await client.get(`/v1/conversations/${options.network}/${options.conversation}/messages`, {
63
85
  limit: options.limit
64
86
  });
65
87
  if (response.success && response.data) {
@@ -72,13 +94,26 @@ function registerMessageCommands(program) {
72
94
  return;
73
95
  }
74
96
  const table = new cli_table3_1.default({
75
- head: [chalk_1.default.cyan('From'), chalk_1.default.cyan('Message'), chalk_1.default.cyan('Time')],
76
- colWidths: [20, 50, 25],
97
+ head: [chalk.cyan('ID'), chalk.cyan('From'), chalk.cyan('Reply To'), chalk.cyan('Message'), chalk.cyan('Time')],
98
+ colWidths: [20, 20, 20, 40, 25],
77
99
  wordWrap: true
78
100
  });
79
101
  response.data.forEach(msg => {
80
- const date = msg.createdAt?._seconds ? new Date(msg.createdAt._seconds * 1000) : new Date(msg.createdAt);
81
- table.push([msg.senderToken, msg.content, date.toLocaleString()]);
102
+ let dateStr = 'Invalid Date';
103
+ if (msg.createdAt) {
104
+ if (msg.createdAt._seconds) {
105
+ dateStr = new Date(msg.createdAt._seconds * 1000).toLocaleString();
106
+ }
107
+ else if (typeof msg.createdAt === 'string') {
108
+ if (msg.createdAt.startsWith('_seconds:')) {
109
+ dateStr = new Date(parseInt(msg.createdAt.split(':')[1]) * 1000).toLocaleString();
110
+ }
111
+ else {
112
+ dateStr = new Date(msg.createdAt).toLocaleString();
113
+ }
114
+ }
115
+ }
116
+ table.push([msg.id, msg.senderId || 'system', msg.replyTo || '-', msg.content, dateStr]);
82
117
  });
83
118
  console.log(table.toString());
84
119
  }
@@ -94,5 +129,26 @@ function registerMessageCommands(program) {
94
129
  logger_1.logger.error('Error:', error instanceof Error ? error.message : 'Unknown error');
95
130
  }
96
131
  });
132
+ messages
133
+ .command('delete')
134
+ .description('Delete a message (only if you are the sender)')
135
+ .requiredOption('-n, --network <id>', 'Network ID')
136
+ .requiredOption('-c, --conversation <id>', 'Conversation ID')
137
+ .requiredOption('-m, --message <id>', 'Message ID')
138
+ .action(async (options) => {
139
+ try {
140
+ const { client } = await AuthHelper_1.AuthHelper.ensureAuthenticated(options.network);
141
+ const response = await client.delete(`/v1/conversations/${options.network}/${options.conversation}/messages/${options.message}`);
142
+ if (response.success) {
143
+ logger_1.logger.success('✓ Message deleted!');
144
+ }
145
+ else {
146
+ logger_1.logger.error('Error:', response.error?.message || 'Failed to delete message');
147
+ }
148
+ }
149
+ catch (error) {
150
+ logger_1.logger.error('Error:', error instanceof Error ? error.message : 'Unknown error');
151
+ }
152
+ });
97
153
  }
98
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVzc2FnZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29tbWFuZHMvbWVzc2FnZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFTQSwwREFtRkM7QUF6RkQsbURBQWdEO0FBQ2hELDRDQUFzQztBQUN0Qyw0Q0FBeUM7QUFDekMsa0RBQTBCO0FBQzFCLDREQUErQjtBQUUvQixTQUFnQix1QkFBdUIsQ0FBQyxPQUFnQjtJQUN0RCxNQUFNLFFBQVEsR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO0lBRTdFLFFBQVE7U0FDTCxPQUFPLENBQUMsTUFBTSxDQUFDO1NBQ2YsV0FBVyxDQUFDLGtDQUFrQyxDQUFDO1NBQy9DLGNBQWMsQ0FBQyxvQkFBb0IsRUFBRSxZQUFZLENBQUM7U0FDbEQsY0FBYyxDQUFDLHlCQUF5QixFQUFFLGlCQUFpQixDQUFDO1NBQzVELGNBQWMsQ0FBQyxzQkFBc0IsRUFBRSxpQkFBaUIsQ0FBQztTQUN6RCxNQUFNLENBQUMsbUJBQW1CLEVBQUUsa0NBQWtDLEVBQUUsTUFBTSxDQUFDO1NBQ3ZFLE1BQU0sQ0FBQyxTQUFTLEVBQUUsNkJBQTZCLENBQUM7U0FDaEQsTUFBTSxDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsRUFBRTtRQUN4QixJQUFJLENBQUM7WUFDSCxNQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUM7WUFDeEQsTUFBTSxFQUFFLE1BQU0sRUFBRSxHQUFHLE1BQU0sdUJBQVUsQ0FBQyxtQkFBbUIsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7WUFFekUsTUFBTSxRQUFRLEdBQUcsTUFBTSxNQUFNLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRTtnQkFDakQsY0FBYyxFQUFFLE9BQU8sQ0FBQyxZQUFZ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QUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDbkYsQ0FBQztJQUNILENBQUMsQ0FBQyxDQUFDO0FBQ1AsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1hbmQgfSBmcm9tICdjb21tYW5kZXInO1xuaW1wb3J0IHsgQXBpQ2xpZW50IH0gZnJvbSAnLi4vYXBpJztcbmltcG9ydCB7IGNvbmZpZ01hbmFnZXIgfSBmcm9tICcuLi9jb25maWcnO1xuaW1wb3J0IHsgQXV0aEhlbHBlciB9IGZyb20gJy4uL2F1dGgvQXV0aEhlbHBlcic7XG5pbXBvcnQgeyBlbmNvZGUgfSBmcm9tICcuLi9kYXRhbW9kZWwnO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSAnLi4vdXRpbHMvbG9nZ2VyJztcbmltcG9ydCBjaGFsayBmcm9tICdjaGFsayc7XG5pbXBvcnQgVGFibGUgZnJvbSAnY2xpLXRhYmxlMyc7XG5cbmV4cG9ydCBmdW5jdGlvbiByZWdpc3Rlck1lc3NhZ2VDb21tYW5kcyhwcm9ncmFtOiBDb21tYW5kKTogdm9pZCB7XG4gIGNvbnN0IG1lc3NhZ2VzID0gcHJvZ3JhbS5jb21tYW5kKCdtZXNzYWdlcycpLmRlc2NyaXB0aW9uKCdNZXNzYWdlIGNvbW1hbmRzJyk7XG5cbiAgbWVzc2FnZXNcbiAgICAuY29tbWFuZCgnc2VuZCcpXG4gICAgLmRlc2NyaXB0aW9uKCdTZW5kIGEgbWVzc2FnZSB0byBhIGNvbnZlcnNhdGlvbicpXG4gICAgLnJlcXVpcmVkT3B0aW9uKCctbiwgLS1uZXR3b3JrIDxpZD4nLCAnTmV0d29yayBJRCcpXG4gICAgLnJlcXVpcmVkT3B0aW9uKCctYywgLS1jb252ZXJzYXRpb24gPGlkPicsICdDb252ZXJzYXRpb24gSUQnKVxuICAgIC5yZXF1aXJlZE9wdGlvbignLW0sIC0tbWVzc2FnZSA8dGV4dD4nLCAnTWVzc2FnZSBjb250ZW50JylcbiAgICAub3B0aW9uKCctLWZvcm1hdCA8Zm9ybWF0PicsICdPdXRwdXQgZm9ybWF0OiB0b29uLCBqc29uLCBodW1hbicsICd0b29uJylcbiAgICAub3B0aW9uKCctLWh1bWFuJywgJ1Nob3J0Y3V0IGZvciAtLWZvcm1hdCBodW1hbicpXG4gICAgLmFjdGlvbihhc3luYyAob3B0aW9ucykgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgZm9ybWF0ID0gb3B0aW9ucy5odW1hbiA/ICdodW1hbicgOiBvcHRpb25zLmZvcm1hdDtcbiAgICAgICAgY29uc3QgeyBjbGllbnQgfSA9IGF3YWl0IEF1dGhIZWxwZXIuZW5zdXJlQXV0aGVudGljYXRlZChvcHRpb25zLm5ldHdvcmspO1xuXG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgY2xpZW50LnBvc3QoJy92MS9tZXNzYWdlcycsIHtcbiAgICAgICAgICBjb252ZXJzYXRpb25JZDogb3B0aW9ucy5jb252ZXJzYXRpb24sXG4gICAgICAgICAgY29udGVudDogb3B0aW9ucy5tZXNzYWdlXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmIChyZXNwb25zZS5zdWNjZXNzICYmIHJlc3BvbnNlLmRhdGEpIHtcbiAgICAgICAgICBpZiAoZm9ybWF0ID09PSAnanNvbicpIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKEpTT04uc3RyaW5naWZ5KHJlc3BvbnNlLmRhdGEsIG51bGwsIDIpKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGZvcm1hdCA9PT0gJ2h1bWFuJykge1xuICAgICAgICAgICAgbG9nZ2VyLnN1Y2Nlc3MoJ+KckyBNZXNzYWdlIHNlbnQhJyk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGVuY29kZShyZXNwb25zZS5kYXRhKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGxvZ2dlci5lcnJvcignRXJyb3I6JywgcmVzcG9uc2UuZXJyb3I/Lm1lc3NhZ2UgfHwgJ0ZhaWxlZCB0byBzZW5kIG1lc3NhZ2UnKTtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgbG9nZ2VyLmVycm9yKCdFcnJvcjonLCBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6ICdVbmtub3duIGVycm9yJyk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgbWVzc2FnZXNcbiAgICAuY29tbWFuZCgnbGlzdCcpXG4gICAgLmRlc2NyaXB0aW9uKCdMaXN0IG1lc3NhZ2VzIGluIGEgY29udmVyc2F0aW9uJylcbiAgICAucmVxdWlyZWRPcHRpb24oJy1uLCAtLW5ldHdvcmsgPGlkPicsICdOZXR3b3JrIElEJylcbiAgICAucmVxdWlyZWRPcHRpb24oJy1jLCAtLWNvbnZlcnNhdGlvbiA8aWQ+JywgJ0NvbnZlcnNhdGlvbiBJRCcpXG4gICAgLm9wdGlvbignLWwsIC0tbGltaXQgPG51bWJlcj4nLCAnTnVtYmVyIG9mIG1lc3NhZ2VzIHRvIHJldHJpZXZlJywgJzUwJylcbiAgICAub3B0aW9uKCctLWZvcm1hdCA8Zm9ybWF0PicsICdPdXRwdXQgZm9ybWF0OiB0b29uLCBqc29uLCBodW1hbicsICd0b29uJylcbiAgICAub3B0aW9uKCctLWh1bWFuJywgJ1Nob3J0Y3V0IGZvciAtLWZvcm1hdCBodW1hbicpXG4gICAgLmFjdGlvbihhc3luYyAob3B0aW9ucykgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgZm9ybWF0ID0gb3B0aW9ucy5odW1hbiA/ICdodW1hbicgOiBvcHRpb25zLmZvcm1hdDtcbiAgICAgICAgY29uc3QgeyBjbGllbnQgfSA9IGF3YWl0IEF1dGhIZWxwZXIuZW5zdXJlQXV0aGVudGljYXRlZChvcHRpb25zLm5ldHdvcmspO1xuXG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgY2xpZW50LmdldDxhbnlbXT4oJy92MS9tZXNzYWdlcycsIHtcbiAgICAgICAgICBjb252ZXJzYXRpb25JZDogb3B0aW9ucy5jb252ZXJzYXRpb24sXG4gICAgICAgICAgbGltaXQ6IG9wdGlvbnMubGltaXRcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKHJlc3BvbnNlLnN1Y2Nlc3MgJiYgcmVzcG9uc2UuZGF0YSkge1xuICAgICAgICAgIGlmIChmb3JtYXQgPT09ICdqc29uJykge1xuICAgICAgICAgICAgY29uc29sZS5sb2coSlNPTi5zdHJpbmdpZnkocmVzcG9uc2UuZGF0YSwgbnVsbCwgMikpO1xuICAgICAgICAgIH0gZWxzZSBpZiAoZm9ybWF0ID09PSAnaHVtYW4nKSB7XG4gICAgICAgICAgICBpZiAocmVzcG9uc2UuZGF0YS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgbG9nZ2VyLndhcm4oJ05vIG1lc3NhZ2VzIGZvdW5kLicpO1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCB0YWJsZSA9IG5ldyBUYWJsZSh7XG4gICAgICAgICAgICAgIGhlYWQ6IFtjaGFsay5jeWFuKCdGcm9tJyksIGNoYWxrLmN5YW4oJ01lc3NhZ2UnKSwgY2hhbGsuY3lhbignVGltZScpXSxcbiAgICAgICAgICAgICAgY29sV2lkdGhzOiBbMjAsIDUwLCAyNV0sXG4gICAgICAgICAgICAgIHdvcmRXcmFwOiB0cnVlXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJlc3BvbnNlLmRhdGEuZm9yRWFjaChtc2cgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBkYXRlID0gbXNnLmNyZWF0ZWRBdD8uX3NlY29uZHMgPyBuZXcgRGF0ZShtc2cuY3JlYXRlZEF0Ll9zZWNvbmRzICogMTAwMCkgOiBuZXcgRGF0ZShtc2cuY3JlYXRlZEF0KTtcbiAgICAgICAgICAgICAgdGFibGUucHVzaChbbXNnLnNlbmRlclRva2VuLCBtc2cuY29udGVudCwgZGF0ZS50b0xvY2FsZVN0cmluZygpXSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKHRhYmxlLnRvU3RyaW5nKCkpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhlbmNvZGUocmVzcG9uc2UuZGF0YSkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBsb2dnZXIuZXJyb3IoJ0Vycm9yOicsIHJlc3BvbnNlLmVycm9yPy5tZXNzYWdlIHx8ICdGYWlsZWQgdG8gbGlzdCBtZXNzYWdlcycpO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBsb2dnZXIuZXJyb3IoJ0Vycm9yOicsIGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogJ1Vua25vd24gZXJyb3InKTtcbiAgICAgIH1cbiAgICB9KTtcbn1cbiJdfQ==
154
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVzc2FnZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29tbWFuZHMvbWVzc2FnZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFTQSwwREE2SUM7QUFuSkQsbURBQWdEO0FBQ2hELDRDQUFzQztBQUN0Qyw0Q0FBeUM7QUFDekMsTUFBTSxLQUFLLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQy9CLDREQUErQjtBQUUvQixTQUFnQix1QkFBdUIsQ0FBQyxPQUFnQjtJQUN0RCxNQUFNLFFBQVEsR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO0lBRTdFLFFBQVE7U0FDTCxPQUFPLENBQUMsTUFBTSxDQUFDO1NBQ2YsV0FBVyxDQUFDLGtDQUFrQyxDQUFDO1NBQy9DLGNBQWMsQ0FBQyxvQkFBb0IsRUFBRSxZQUFZLENBQUM7U0FDbEQsY0FBYyxDQUFDLHlCQUF5QixFQUFFLGlCQUFpQixDQUFDO1NBQzVELGNBQWMsQ0FBQyxzQkFBc0IsRUFBRSxpQkFBaUIsQ0FBQztTQUN6RCxNQUFNLENBQUMscUJBQXFCLEVBQUUsd0JBQXdCLENBQUM7U0FDdkQsTUFBTSxDQUFDLG1CQUFtQixFQUFFLGtEQUFrRCxFQUFFLEdBQUcsQ0FBQztTQUNwRixNQUFNLENBQUMsbUJBQW1CLEVBQUUsa0NBQWtDLEVBQUUsTUFBTSxDQUFDO1NBQ3ZFLE1BQU0sQ0FBQyxTQUFTLEVBQUUsNkJBQTZCLENBQUM7U0FDaEQsTUFBTSxDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsRUFBRTtRQUN4QixJQUFJLENBQUM7WUFDSCxNQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUM7WUFDeEQsTUFBTSxFQUFFLE1BQU0sRUFBRSxHQUFHLE1BQU0sdUJBQVUsQ0FBQyxt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RSxPQUFPLElBQUksMEJBQTBCLENBQUMsQ0FBQztZQUNoRixDQUFDO1FBQ0gsQ0FBQztRQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7WUFDZixlQUFNLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxLQUFLLFlBQVksS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUNuRixDQUFDO0lBQ0gsQ0FBQyxDQUFDLENBQUM7QUFDUCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbWFuZCB9IGZyb20gJ2NvbW1hbmRlcic7XG5pbXBvcnQgeyBBcGlDbGllbnQgfSBmcm9tICcuLi9hcGknO1xuaW1wb3J0IHsgY29uZmlnTWFuYWdlciB9IGZyb20gJy4uL2NvbmZpZyc7XG5pbXBvcnQgeyBBdXRoSGVscGVyIH0gZnJvbSAnLi4vYXV0aC9BdXRoSGVscGVyJztcbmltcG9ydCB7IGVuY29kZSB9IGZyb20gJy4uL2RhdGFtb2RlbCc7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tICcuLi91dGlscy9sb2dnZXInO1xuY29uc3QgY2hhbGsgPSByZXF1aXJlKCdjaGFsaycpO1xuaW1wb3J0IFRhYmxlIGZyb20gJ2NsaS10YWJsZTMnO1xuXG5leHBvcnQgZnVuY3Rpb24gcmVnaXN0ZXJNZXNzYWdlQ29tbWFuZHMocHJvZ3JhbTogQ29tbWFuZCk6IHZvaWQge1xuICBjb25zdCBtZXNzYWdlcyA9IHByb2dyYW0uY29tbWFuZCgnbWVzc2FnZXMnKS5kZXNjcmlwdGlvbignTWVzc2FnZSBjb21tYW5kcycpO1xuXG4gIG1lc3NhZ2VzXG4gICAgLmNvbW1hbmQoJ3NlbmQnKVxuICAgIC5kZXNjcmlwdGlvbignU2VuZCBhIG1lc3NhZ2UgdG8gYSBjb252ZXJzYXRpb24nKVxuICAgIC5yZXF1aXJlZE9wdGlvbignLW4sIC0tbmV0d29yayA8aWQ+JywgJ05ldHdvcmsgSUQnKVxuICAgIC5yZXF1aXJlZE9wdGlvbignLWMsIC0tY29udmVyc2F0aW9uIDxpZD4nLCAnQ29udmVyc2F0aW9uIElEJylcbiAgICAucmVxdWlyZWRPcHRpb24oJy1tLCAtLW1lc3NhZ2UgPHRleHQ+JywgJ01lc3NhZ2UgY29udGVudCcpXG4gICAgLm9wdGlvbignLXIsIC0tcmVwbHktdG8gPGlkPicsICdNZXNzYWdlIElEIHRvIHJlcGx5IHRvJylcbiAgICAub3B0aW9uKCctLWNvbnRleHQgPGNvdW50PicsICdGZXRjaCByZWNlbnQgbWVzc2FnZXMgYmVmb3JlIHNlbmRpbmcgZm9yIGNvbnRleHQnLCAnMCcpXG4gICAgLm9wdGlvbignLS1mb3JtYXQgPGZvcm1hdD4nLCAnT3V0cHV0IGZvcm1hdDogdG9vbiwganNvbiwgaHVtYW4nLCAndG9vbicpXG4gICAgLm9wdGlvbignLS1odW1hbicsICdTaG9ydGN1dCBmb3IgLS1mb3JtYXQgaHVtYW4nKVxuICAgIC5hY3Rpb24oYXN5bmMgKG9wdGlvbnMpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGZvcm1hdCA9IG9wdGlvbnMuaHVtYW4gPyAnaHVtYW4nIDogb3B0aW9ucy5mb3JtYXQ7XG4gICAgICAgIGNvbnN0IHsgY2xpZW50IH0gPSBhd2FpdCBBdXRoSGVscGVyLmVuc3VyZUF1dGhlbnRpY2F0ZWQob3B0aW9ucy5uZXR3b3JrKTtcblxuICAgICAgICBjb25zdCBjb250ZXh0Q291bnQgPSBwYXJzZUludChvcHRpb25zLmNvbnRleHQsIDEwKTtcbiAgICAgICAgaWYgKGNvbnRleHRDb3VudCA+IDApIHtcbiAgICAgICAgICBjb25zdCBjb250ZXh0UmVzID0gYXdhaXQgY2xpZW50LmdldDxhbnlbXT4oXG4gICAgICAgICAgICBgL3YxL2NvbnZlcnNhdGlvbnMvJHtvcHRpb25zLm5ldHdvcmt9LyR7b3B0aW9ucy5jb252ZXJzYXRpb259L21lc3NhZ2VzYCxcbiAgICAgICAgICAgIHsgbGltaXQ6IFN0cmluZyhjb250ZXh0Q291bnQpIH1cbiAgICAgICAgICApO1xuXG4gICAgICAgICAgaWYgKGNvbnRleHRSZXMuc3VjY2VzcyAmJiBjb250ZXh0UmVzLmRhdGEgJiYgY29udGV4dFJlcy5kYXRhLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGlmIChmb3JtYXQgPT09ICdodW1hbicpIHtcbiAgICAgICAgICAgICAgY29uc29sZS5sb2coY2hhbGsuY3lhbi5ib2xkKGBcXG4tLS0gUmVjZW50IENvbnRleHQgKCR7Y29udGV4dFJlcy5kYXRhLmxlbmd0aH0gbWVzc2FnZXMpIC0tLVxcbmApKTtcbiAgICAgICAgICAgICAgY29udGV4dFJlcy5kYXRhLmZvckVhY2goKG1zZzogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc2VuZGVyID0gbXNnLnNlbmRlcklkIHx8ICdzeXN0ZW0nO1xuICAgICAgICAgICAgICAgIGNvbnN0IHByZXZpZXcgPSBtc2cuY29udGVudC5sZW5ndGggPiAxMjAgPyBtc2cuY29udGVudC5zbGljZSgwLCAxMjApICsgJy4uLicgOiBtc2cuY29udGVudDtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhjaGFsay5ncmF5KGBbJHtzZW5kZXJ9XWApLCBwcmV2aWV3KTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIGNvbnNvbGUubG9nKGNoYWxrLmN5YW4uYm9sZCgnXFxuLS0tIFNlbmRpbmcgLS0tXFxuJykpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChmb3JtYXQgPT09ICdqc29uJykge1xuICAgICAgICAgICAgICBjb25zb2xlLmxvZyhKU09OLnN0cmluZ2lmeSh7IGNvbnRleHQ6IGNvbnRleHRSZXMuZGF0YSB9LCBudWxsLCAyKSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBjb25zb2xlLmxvZyhlbmNvZGUoeyBjb250ZXh0OiBjb250ZXh0UmVzLmRhdGEgfSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgY2xpZW50LnBvc3QoYC92MS9jb252ZXJzYXRpb25zLyR7b3B0aW9ucy5uZXR3b3JrfS8ke29wdGlvbnMuY29udmVyc2F0aW9ufS9tZXNzYWdlc2AsIHtcbiAgICAgICAgICBjb250ZW50OiBvcHRpb25zLm1lc3NhZ2UsXG4gICAgICAgICAgcmVwbHlUbzogb3B0aW9ucy5yZXBseVRvXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmIChyZXNwb25zZS5zdWNjZXNzICYmIHJlc3BvbnNlLmRhdGEpIHtcbiAgICAgICAgICBpZiAoZm9ybWF0ID09PSAnanNvbicpIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKEpTT04uc3RyaW5naWZ5KHJlc3BvbnNlLmRhdGEsIG51bGwsIDIpKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGZvcm1hdCA9PT0gJ2h1bWFuJykge1xuICAgICAgICAgICAgbG9nZ2VyLnN1Y2Nlc3MoJ+KckyBNZXNzYWdlIHNlbnQhJyk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGVuY29kZShyZXNwb25zZS5kYXRhKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGxvZ2dlci5lcnJvcignRXJyb3I6JywgcmVzcG9uc2UuZXJyb3I/Lm1lc3NhZ2UgfHwgJ0ZhaWxlZCB0byBzZW5kIG1lc3NhZ2UnKTtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgbG9nZ2VyLmVycm9yKCdFcnJvcjonLCBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6ICdVbmtub3duIGVycm9yJyk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgbWVzc2FnZXNcbiAgICAuY29tbWFuZCgnbGlzdCcpXG4gICAgLmRlc2NyaXB0aW9uKCdMaXN0IG1lc3NhZ2VzIGluIGEgY29udmVyc2F0aW9uJylcbiAgICAucmVxdWlyZWRPcHRpb24oJy1uLCAtLW5ldHdvcmsgPGlkPicsICdOZXR3b3JrIElEJylcbiAgICAucmVxdWlyZWRPcHRpb24oJy1jLCAtLWNvbnZlcnNhdGlvbiA8aWQ+JywgJ0NvbnZlcnNhdGlvbiBJRCcpXG4gICAgLm9wdGlvbignLWwsIC0tbGltaXQgPG51bWJlcj4nLCAnTnVtYmVyIG9mIG1lc3NhZ2VzIHRvIHJldHJpZXZlJywgJzUwJylcbiAgICAub3B0aW9uKCctLWZvcm1hdCA8Zm9ybWF0PicsICdPdXRwdXQgZm9ybWF0OiB0b29uLCBqc29uLCBodW1hbicsICd0b29uJylcbiAgICAub3B0aW9uKCctLWh1bWFuJywgJ1Nob3J0Y3V0IGZvciAtLWZvcm1hdCBodW1hbicpXG4gICAgLmFjdGlvbihhc3luYyAob3B0aW9ucykgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgZm9ybWF0ID0gb3B0aW9ucy5odW1hbiA/ICdodW1hbicgOiBvcHRpb25zLmZvcm1hdDtcbiAgICAgICAgY29uc3QgeyBjbGllbnQgfSA9IGF3YWl0IEF1dGhIZWxwZXIuZW5zdXJlQXV0aGVudGljYXRlZChvcHRpb25zLm5ldHdvcmspO1xuXG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgY2xpZW50LmdldDxhbnlbXT4oYC92MS9jb252ZXJzYXRpb25zLyR7b3B0aW9ucy5uZXR3b3JrfS8ke29wdGlvbnMuY29udmVyc2F0aW9ufS9tZXNzYWdlc2AsIHtcbiAgICAgICAgICBsaW1pdDogb3B0aW9ucy5saW1pdFxuICAgICAgICB9KTtcblxuICAgICAgICBpZiAocmVzcG9uc2Uuc3VjY2VzcyAmJiByZXNwb25zZS5kYXRhKSB7XG4gICAgICAgICAgaWYgKGZvcm1hdCA9PT0gJ2pzb24nKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhKU09OLnN0cmluZ2lmeShyZXNwb25zZS5kYXRhLCBudWxsLCAyKSk7XG4gICAgICAgICAgfSBlbHNlIGlmIChmb3JtYXQgPT09ICdodW1hbicpIHtcbiAgICAgICAgICAgIGlmIChyZXNwb25zZS5kYXRhLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICBsb2dnZXIud2FybignTm8gbWVzc2FnZXMgZm91bmQuJyk7XG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHRhYmxlID0gbmV3IFRhYmxlKHtcbiAgICAgICAgICAgICAgaGVhZDogW2NoYWxrLmN5YW4oJ0lEJyksIGNoYWxrLmN5YW4oJ0Zyb20nKSwgY2hhbGsuY3lhbignUmVwbHkgVG8nKSwgY2hhbGsuY3lhbignTWVzc2FnZScpLCBjaGFsay5jeWFuKCdUaW1lJyldLFxuICAgICAgICAgICAgICBjb2xXaWR0aHM6IFsyMCwgMjAsIDIwLCA0MCwgMjVdLFxuICAgICAgICAgICAgICB3b3JkV3JhcDogdHJ1ZVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXNwb25zZS5kYXRhLmZvckVhY2gobXNnID0+IHtcbiAgICAgICAgICAgICAgbGV0IGRhdGVTdHIgPSAnSW52YWxpZCBEYXRlJztcbiAgICAgICAgICAgICAgaWYgKG1zZy5jcmVhdGVkQXQpIHtcbiAgICAgICAgICAgICAgICBpZiAobXNnLmNyZWF0ZWRBdC5fc2Vjb25kcykge1xuICAgICAgICAgICAgICAgICAgZGF0ZVN0ciA9IG5ldyBEYXRlKG1zZy5jcmVhdGVkQXQuX3NlY29uZHMgKiAxMDAwKS50b0xvY2FsZVN0cmluZygpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIG1zZy5jcmVhdGVkQXQgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgICBpZiAobXNnLmNyZWF0ZWRBdC5zdGFydHNXaXRoKCdfc2Vjb25kczonKSkge1xuICAgICAgICAgICAgICAgICAgICBkYXRlU3RyID0gbmV3IERhdGUocGFyc2VJbnQobXNnLmNyZWF0ZWRBdC5zcGxpdCgnOicpWzFdKSAqIDEwMDApLnRvTG9jYWxlU3RyaW5nKCk7XG4gICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBkYXRlU3RyID0gbmV3IERhdGUobXNnLmNyZWF0ZWRBdCkudG9Mb2NhbGVTdHJpbmcoKTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgdGFibGUucHVzaChbbXNnLmlkLCBtc2cuc2VuZGVySWQgfHwgJ3N5c3RlbScsIG1zZy5yZXBseVRvIHx8ICctJywgbXNnLmNvbnRlbnQsIGRhdGVTdHJdKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgY29uc29sZS5sb2codGFibGUudG9TdHJpbmcoKSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGVuY29kZShyZXNwb25zZS5kYXRhKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGxvZ2dlci5lcnJvcignRXJyb3I6JywgcmVzcG9uc2UuZXJyb3I/Lm1lc3NhZ2UgfHwgJ0ZhaWxlZCB0byBsaXN0IG1lc3NhZ2VzJyk7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGxvZ2dlci5lcnJvcignRXJyb3I6JywgZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiAnVW5rbm93biBlcnJvcicpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gIG1lc3NhZ2VzXG4gICAgLmNvbW1hbmQoJ2RlbGV0ZScpXG4gICAgLmRlc2NyaXB0aW9uKCdEZWxldGUgYSBtZXNzYWdlIChvbmx5IGlmIHlvdSBhcmUgdGhlIHNlbmRlciknKVxuICAgIC5yZXF1aXJlZE9wdGlvbignLW4sIC0tbmV0d29yayA8aWQ+JywgJ05ldHdvcmsgSUQnKVxuICAgIC5yZXF1aXJlZE9wdGlvbignLWMsIC0tY29udmVyc2F0aW9uIDxpZD4nLCAnQ29udmVyc2F0aW9uIElEJylcbiAgICAucmVxdWlyZWRPcHRpb24oJy1tLCAtLW1lc3NhZ2UgPGlkPicsICdNZXNzYWdlIElEJylcbiAgICAuYWN0aW9uKGFzeW5jIChvcHRpb25zKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCB7IGNsaWVudCB9ID0gYXdhaXQgQXV0aEhlbHBlci5lbnN1cmVBdXRoZW50aWNhdGVkKG9wdGlvbnMubmV0d29yayk7XG5cbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBjbGllbnQuZGVsZXRlKGAvdjEvY29udmVyc2F0aW9ucy8ke29wdGlvbnMubmV0d29ya30vJHtvcHRpb25zLmNvbnZlcnNhdGlvbn0vbWVzc2FnZXMvJHtvcHRpb25zLm1lc3NhZ2V9YCk7XG5cbiAgICAgICAgaWYgKHJlc3BvbnNlLnN1Y2Nlc3MpIHtcbiAgICAgICAgICBsb2dnZXIuc3VjY2Vzcygn4pyTIE1lc3NhZ2UgZGVsZXRlZCEnKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBsb2dnZXIuZXJyb3IoJ0Vycm9yOicsIHJlc3BvbnNlLmVycm9yPy5tZXNzYWdlIHx8ICdGYWlsZWQgdG8gZGVsZXRlIG1lc3NhZ2UnKTtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgbG9nZ2VyLmVycm9yKCdFcnJvcjonLCBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6ICdVbmtub3duIGVycm9yJyk7XG4gICAgICB9XG4gICAgfSk7XG59XG4iXX0=