@wppconnect/server 2.0.0 → 2.1.0

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 (38) hide show
  1. package/CHANGELOG.md +4 -0
  2. package/dist/config/upload.js +1 -1
  3. package/dist/config.js +8 -2
  4. package/dist/controller/catalogController.js +296 -29
  5. package/dist/controller/deviceController.js +875 -30
  6. package/dist/controller/encryptController.js +14 -2
  7. package/dist/controller/groupController.js +343 -9
  8. package/dist/controller/labelsController.js +68 -1
  9. package/dist/controller/messageController.js +289 -40
  10. package/dist/controller/miscController.js +221 -0
  11. package/dist/controller/orderController.js +27 -3
  12. package/dist/controller/sessionController.js +236 -9
  13. package/dist/controller/statusController.js +53 -5
  14. package/dist/index.js +8 -8
  15. package/dist/mapper/index.js +2 -2
  16. package/dist/middleware/auth.js +16 -15
  17. package/dist/middleware/healthCheck.js +15 -1
  18. package/dist/middleware/statusConnection.js +2 -1
  19. package/dist/routes/index.js +741 -710
  20. package/dist/swagger-backup.json +21463 -0
  21. package/dist/swagger.js +100 -0
  22. package/dist/swagger.json +4957 -20348
  23. package/dist/types/express/index.d.js +2 -0
  24. package/dist/util/chatWootClient.js +49 -45
  25. package/dist/util/createSessionUtil.js +55 -45
  26. package/dist/util/db/mongodb/db.js +7 -7
  27. package/dist/util/functions.js +31 -23
  28. package/dist/util/getAllTokens.js +1 -1
  29. package/dist/util/logger.js +22 -22
  30. package/dist/util/manageSession.js +130 -0
  31. package/dist/util/sessionUtil.js +5 -3
  32. package/dist/util/tokenStore/FileTokenStore/FileTokenStore.js +7 -7
  33. package/dist/util/tokenStore/mongodbTokenStory.js +2 -3
  34. package/dist/util/tokenStore/redisTokenStory.js +25 -25
  35. package/docker-compose.yml +7 -7
  36. package/package.json +40 -33
  37. package/wppconnect_tokens/wppconnect.json +0 -0
  38. package/dist/types/Request.js +0 -2
@@ -0,0 +1,2 @@
1
+ "use strict";Object.defineProperty(exports, "__esModule", { value: true });
2
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3R5cGVzL2V4cHJlc3MvaW5kZXguZC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBXaGF0c2FwcCB9IGZyb20gJ0B3cHBjb25uZWN0LXRlYW0vd3BwY29ubmVjdCc7XG5pbXBvcnQgeyBTb2NrZXQgfSBmcm9tICdzb2NrZXQuaW8nO1xuaW1wb3J0IHsgTG9nZ2VyIH0gZnJvbSAnd2luc3Rvbic7XG5cbmltcG9ydCB7IFNlcnZlck9wdGlvbnMgfSBmcm9tICcuLi9TZXJ2ZXJPcHRpb25zJztcblxuLy8gdG8gbWFrZSB0aGUgZmlsZSBhIG1vZHVsZSBhbmQgYXZvaWQgdGhlIFR5cGVTY3JpcHQgZXJyb3JcbmV4cG9ydCB7fTtcblxuZGVjbGFyZSBnbG9iYWwge1xuICBuYW1lc3BhY2UgRXhwcmVzcyB7XG4gICAgZXhwb3J0IGludGVyZmFjZSBSZXF1ZXN0IHtcbiAgICAgIGNsaWVudDogV2hhdHNhcHAgJiB7IHVybGNvZGU6IHN0cmluZzsgc3RhdHVzOiBzdHJpbmcgfTtcbiAgICAgIGxvZ2dlcjogTG9nZ2VyO1xuICAgICAgc2Vzc2lvbjogc3RyaW5nO1xuICAgICAgdG9rZW4/OiBzdHJpbmc7XG4gICAgICBpbzogU29ja2V0O1xuICAgICAgc2VydmVyT3B0aW9uczogU2VydmVyT3B0aW9ucztcbiAgICB9XG4gIH1cbn1cbiJdLCJtYXBwaW5ncyI6IiJ9
@@ -55,25 +55,29 @@ var _sessionUtil = require("./sessionUtil"); /*
55
55
  //assina o evento do qrcode
56
56
  _sessionUtil.eventEmitter.on(`qrcode-${session}`, (qrCode, urlCode, client) => {
57
57
  setTimeout(async () => {
58
- this.sendMessage(client, {
59
- sender: this.sender,
60
- chatId: this.mobile_number + '@c.us',
61
- type: 'image',
62
- timestamp: 'qrcode',
63
- mimetype: 'image/png',
64
- caption: 'leia o qrCode',
65
- qrCode: qrCode.replace('data:image/png;base64,', '')
66
- });
58
+ if (config?.chatwoot?.sendQrCode !== false) {
59
+ this.sendMessage(client, {
60
+ sender: this.sender,
61
+ chatId: this.mobile_number + '@c.us',
62
+ type: 'image',
63
+ timestamp: 'qrcode',
64
+ mimetype: 'image/png',
65
+ caption: 'leia o qrCode',
66
+ qrCode: qrCode.replace('data:image/png;base64,', '')
67
+ });
68
+ }
67
69
  }, 1000);
68
70
  });
69
71
 
70
72
  //assiona o evento do status
71
73
  _sessionUtil.eventEmitter.on(`status-${session}`, (client, status) => {
72
- this.sendMessage(client, {
73
- sender: this.sender,
74
- chatId: this.mobile_number + '@c.us',
75
- body: `wppconnect status: ${status} `
76
- });
74
+ if (config?.chatwoot?.sendStatus !== false) {
75
+ this.sendMessage(client, {
76
+ sender: this.sender,
77
+ chatId: this.mobile_number + '@c.us',
78
+ body: `wppconnect status: ${status} `
79
+ });
80
+ }
77
81
  });
78
82
 
79
83
  //assina o evento de mensagem
@@ -86,9 +90,9 @@ var _sessionUtil = require("./sessionUtil"); /*
86
90
  if (message.isGroupMsg || message.chatId.indexOf('@broadcast') > 0) return;
87
91
  const contact = await this.createContact(message);
88
92
  const conversation = await this.createConversation(
89
- contact,
90
- message.chatId.split('@')[0]);
91
-
93
+ contact,
94
+ message.chatId.split('@')[0]
95
+ );
92
96
 
93
97
  try {
94
98
  if (
@@ -125,22 +129,22 @@ var _sessionUtil = require("./sessionUtil"); /*
125
129
  data.append('private', 'false');
126
130
 
127
131
  const configPost = Object.assign(
128
- {},
129
- {
130
- baseURL: this.config.baseURL,
131
- headers: {
132
- 'Content-Type': 'application/json;charset=utf-8',
133
- api_access_token: this.config.token
132
+ {},
133
+ {
134
+ baseURL: this.config.baseURL,
135
+ headers: {
136
+ 'Content-Type': 'application/json;charset=utf-8',
137
+ api_access_token: this.config.token
138
+ }
134
139
  }
135
- });
136
-
140
+ );
137
141
  configPost.headers = { ...configPost.headers, ...data.getHeaders() };
138
142
 
139
143
  const result = await _axios.default.post(
140
- `api/v1/accounts/${this.account_id}/conversations/${conversation.id}/messages`,
141
- data,
142
- configPost);
143
-
144
+ `api/v1/accounts/${this.account_id}/conversations/${conversation.id}/messages`,
145
+ data,
146
+ configPost
147
+ );
144
148
 
145
149
  return result;
146
150
  } else {
@@ -149,9 +153,9 @@ var _sessionUtil = require("./sessionUtil"); /*
149
153
  message_type: 'incoming'
150
154
  };
151
155
  const { data } = await this.api.post(
152
- `api/v1/accounts/${this.account_id}/conversations/${conversation.id}/messages`,
153
- body);
154
-
156
+ `api/v1/accounts/${this.account_id}/conversations/${conversation.id}/messages`,
157
+ body
158
+ );
155
159
  return data;
156
160
  }
157
161
  } catch (e) {
@@ -162,8 +166,8 @@ var _sessionUtil = require("./sessionUtil"); /*
162
166
  async findContact(query) {
163
167
  try {
164
168
  const { data } = await this.api.get(
165
- `api/v1/accounts/${this.account_id}/contacts/search/?q=${query}`);
166
-
169
+ `api/v1/accounts/${this.account_id}/contacts/search/?q=${query}`
170
+ );
167
171
  return data;
168
172
  } catch (e) {
169
173
  console.log(e);
@@ -188,9 +192,9 @@ var _sessionUtil = require("./sessionUtil"); /*
188
192
 
189
193
  try {
190
194
  const data = await this.api.post(
191
- `api/v1/accounts/${this.account_id}/contacts`,
192
- body);
193
-
195
+ `api/v1/accounts/${this.account_id}/contacts`,
196
+ body
197
+ );
194
198
  return data.data.payload.contact;
195
199
  } catch (e) {
196
200
  console.log(e);
@@ -201,11 +205,11 @@ var _sessionUtil = require("./sessionUtil"); /*
201
205
  async findConversation(contact) {
202
206
  try {
203
207
  const { data } = await this.api.get(
204
- `api/v1/accounts/${this.account_id}/conversations?inbox_id=${this.inbox_id}&status=all`);
205
-
208
+ `api/v1/accounts/${this.account_id}/conversations?inbox_id=${this.inbox_id}&status=all`
209
+ );
206
210
  return data.data.payload.find(
207
- (e) => e.meta.sender.id == contact.id && e.status != 'resolved');
208
-
211
+ (e) => e.meta.sender.id == contact.id && e.status != 'resolved'
212
+ );
209
213
  } catch (e) {
210
214
  console.log(e);
211
215
  return null;
@@ -225,9 +229,9 @@ var _sessionUtil = require("./sessionUtil"); /*
225
229
 
226
230
  try {
227
231
  const { data } = await this.api.post(
228
- `api/v1/accounts/${this.account_id}/conversations`,
229
- body);
230
-
232
+ `api/v1/accounts/${this.account_id}/conversations`,
233
+ body
234
+ );
231
235
  return data;
232
236
  } catch (e) {
233
237
  console.log(e);
@@ -235,4 +239,4 @@ var _sessionUtil = require("./sessionUtil"); /*
235
239
  }
236
240
  }
237
241
  }exports.default = chatWootClient;
238
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfYXhpb3MiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsIl9idWZmZXJUb1N0cmVhbSIsIl9mb3JtRGF0YSIsIl9taW1lVHlwZXMiLCJfc2Vzc2lvblV0aWwiLCJjaGF0V29vdENsaWVudCIsImNvbnN0cnVjdG9yIiwiY29uZmlnIiwic2Vzc2lvbiIsIm1vYmlsZV9uYW1lIiwibW9iaWxlX251bWJlciIsInNlbmRlciIsInB1c2huYW1lIiwiaWQiLCJhY2NvdW50X2lkIiwiaW5ib3hfaWQiLCJhcGkiLCJheGlvcyIsImNyZWF0ZSIsImJhc2VVUkwiLCJoZWFkZXJzIiwiYXBpX2FjY2Vzc190b2tlbiIsInRva2VuIiwiZXZlbnRFbWl0dGVyIiwib24iLCJxckNvZGUiLCJ1cmxDb2RlIiwiY2xpZW50Iiwic2V0VGltZW91dCIsInNlbmRNZXNzYWdlIiwiY2hhdElkIiwidHlwZSIsInRpbWVzdGFtcCIsIm1pbWV0eXBlIiwiY2FwdGlvbiIsInJlcGxhY2UiLCJzdGF0dXMiLCJib2R5IiwibWVzc2FnZSIsImlzR3JvdXBNc2ciLCJpbmRleE9mIiwiY29udGFjdCIsImNyZWF0ZUNvbnRhY3QiLCJjb252ZXJzYXRpb24iLCJjcmVhdGVDb252ZXJzYXRpb24iLCJzcGxpdCIsImV4dGVuc2lvbiIsIm1pbWUiLCJmaWxlbmFtZSIsImI2NCIsImJ1ZmZlciIsImRlY3J5cHRGaWxlIiwidG9TdHJpbmciLCJtZWRpYURhdGEiLCJCdWZmZXIiLCJmcm9tIiwiZGF0YSIsIkZvcm1EYXRhIiwiYXBwZW5kIiwidG9TdHJlYW0iLCJjb250ZW50VHlwZSIsImNvbmZpZ1Bvc3QiLCJPYmplY3QiLCJhc3NpZ24iLCJnZXRIZWFkZXJzIiwicmVzdWx0IiwicG9zdCIsImNvbnRlbnQiLCJtZXNzYWdlX3R5cGUiLCJlIiwiZmluZENvbnRhY3QiLCJxdWVyeSIsImdldCIsImNvbnNvbGUiLCJsb2ciLCJuYW1lIiwiaXNNeUNvbnRhY3QiLCJmb3JtYXR0ZWROYW1lIiwicGhvbmVfbnVtYmVyIiwidXNlciIsIm1ldGEiLCJjb3VudCIsInBheWxvYWQiLCJmaW5kQ29udmVyc2F0aW9uIiwiZmluZCIsInNvdXJjZV9pZCIsImNvbnRhY3RfaWQiLCJleHBvcnRzIiwiZGVmYXVsdCJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsL2NoYXRXb290Q2xpZW50LnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBDb3B5cmlnaHQgMjAyMSBXUFBDb25uZWN0IFRlYW1cbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbmltcG9ydCBheGlvcyBmcm9tICdheGlvcyc7XG5pbXBvcnQgdG9TdHJlYW0gZnJvbSAnYnVmZmVyLXRvLXN0cmVhbSc7XG5pbXBvcnQgeyBkZWZhdWx0IGFzIEZvcm1EYXRhIH0gZnJvbSAnZm9ybS1kYXRhJztcbmltcG9ydCBtaW1lIGZyb20gJ21pbWUtdHlwZXMnO1xuXG5pbXBvcnQgeyBldmVudEVtaXR0ZXIgfSBmcm9tICcuL3Nlc3Npb25VdGlsJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgY2hhdFdvb3RDbGllbnQge1xuICBkZWNsYXJlIGNvbmZpZzogYW55O1xuICBkZWNsYXJlIHNlc3Npb246IGFueTtcbiAgZGVjbGFyZSBtb2JpbGVfbmFtZTogYW55O1xuICBkZWNsYXJlIG1vYmlsZV9udW1iZXI6IGFueTtcbiAgZGVjbGFyZSBzZW5kZXI6IGFueTtcbiAgZGVjbGFyZSBhY2NvdW50X2lkOiBhbnk7XG4gIGRlY2xhcmUgaW5ib3hfaWQ6IGFueTtcbiAgZGVjbGFyZSBhcGk6IGFueTtcblxuICBjb25zdHJ1Y3Rvcihjb25maWc6IGFueSwgc2Vzc2lvbjogc3RyaW5nKSB7XG4gICAgdGhpcy5jb25maWcgPSBjb25maWc7XG4gICAgdGhpcy5tb2JpbGVfbmFtZSA9IHRoaXMuY29uZmlnLm1vYmlsZV9uYW1lXG4gICAgICA/IHRoaXMuY29uZmlnLm1vYmlsZV9uYW1lXG4gICAgICA6IGBXUFBDb25uZWN0YDtcbiAgICB0aGlzLm1vYmlsZV9udW1iZXIgPSB0aGlzLmNvbmZpZy5tb2JpbGVfbnVtYmVyXG4gICAgICA/IHRoaXMuY29uZmlnLm1vYmlsZV9udW1iZXJcbiAgICAgIDogJzU1MTE5OTk5OTk5OTknO1xuICAgIHRoaXMuc2VuZGVyID0ge1xuICAgICAgcHVzaG5hbWU6IHRoaXMubW9iaWxlX25hbWUsXG4gICAgICBpZDogdGhpcy5tb2JpbGVfbnVtYmVyLFxuICAgIH07XG4gICAgdGhpcy5hY2NvdW50X2lkID0gdGhpcy5jb25maWcuYWNjb3VudF9pZDtcbiAgICB0aGlzLmluYm94X2lkID0gdGhpcy5jb25maWcuaW5ib3hfaWQ7XG4gICAgdGhpcy5hcGkgPSBheGlvcy5jcmVhdGUoe1xuICAgICAgYmFzZVVSTDogdGhpcy5jb25maWcuYmFzZVVSTCxcbiAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ9dXRmLTgnLFxuICAgICAgICBhcGlfYWNjZXNzX3Rva2VuOiB0aGlzLmNvbmZpZy50b2tlbixcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICAvL2Fzc2luYSBvIGV2ZW50byBkbyBxcmNvZGVcbiAgICBldmVudEVtaXR0ZXIub24oYHFyY29kZS0ke3Nlc3Npb259YCwgKHFyQ29kZSwgdXJsQ29kZSwgY2xpZW50KSA9PiB7XG4gICAgICBzZXRUaW1lb3V0KGFzeW5jICgpID0+IHtcbiAgICAgICAgdGhpcy5zZW5kTWVzc2FnZShjbGllbnQsIHtcbiAgICAgICAgICBzZW5kZXI6IHRoaXMuc2VuZGVyLFxuICAgICAgICAgIGNoYXRJZDogdGhpcy5tb2JpbGVfbnVtYmVyICsgJ0BjLnVzJyxcbiAgICAgICAgICB0eXBlOiAnaW1hZ2UnLFxuICAgICAgICAgIHRpbWVzdGFtcDogJ3FyY29kZScsXG4gICAgICAgICAgbWltZXR5cGU6ICdpbWFnZS9wbmcnLFxuICAgICAgICAgIGNhcHRpb246ICdsZWlhIG8gcXJDb2RlJyxcbiAgICAgICAgICBxckNvZGU6IHFyQ29kZS5yZXBsYWNlKCdkYXRhOmltYWdlL3BuZztiYXNlNjQsJywgJycpLFxuICAgICAgICB9KTtcbiAgICAgIH0sIDEwMDApO1xuICAgIH0pO1xuXG4gICAgLy9hc3Npb25hIG8gZXZlbnRvIGRvIHN0YXR1c1xuICAgIGV2ZW50RW1pdHRlci5vbihgc3RhdHVzLSR7c2Vzc2lvbn1gLCAoY2xpZW50LCBzdGF0dXMpID0+IHtcbiAgICAgIHRoaXMuc2VuZE1lc3NhZ2UoY2xpZW50LCB7XG4gICAgICAgIHNlbmRlcjogdGhpcy5zZW5kZXIsXG4gICAgICAgIGNoYXRJZDogdGhpcy5tb2JpbGVfbnVtYmVyICsgJ0BjLnVzJyxcbiAgICAgICAgYm9keTogYHdwcGNvbm5lY3Qgc3RhdHVzOiAke3N0YXR1c30gYCxcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgLy9hc3NpbmEgbyBldmVudG8gZGUgbWVuc2FnZW1cbiAgICBldmVudEVtaXR0ZXIub24oYG1lbnNhZ2VtLSR7c2Vzc2lvbn1gLCAoY2xpZW50LCBtZXNzYWdlKSA9PiB7XG4gICAgICB0aGlzLnNlbmRNZXNzYWdlKGNsaWVudCwgbWVzc2FnZSk7XG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBzZW5kTWVzc2FnZShjbGllbnQ6IGFueSwgbWVzc2FnZTogYW55KSB7XG4gICAgaWYgKG1lc3NhZ2UuaXNHcm91cE1zZyB8fCBtZXNzYWdlLmNoYXRJZC5pbmRleE9mKCdAYnJvYWRjYXN0JykgPiAwKSByZXR1cm47XG4gICAgY29uc3QgY29udGFjdCA9IGF3YWl0IHRoaXMuY3JlYXRlQ29udGFjdChtZXNzYWdlKTtcbiAgICBjb25zdCBjb252ZXJzYXRpb24gPSBhd2FpdCB0aGlzLmNyZWF0ZUNvbnZlcnNhdGlvbihcbiAgICAgIGNvbnRhY3QsXG4gICAgICBtZXNzYWdlLmNoYXRJZC5zcGxpdCgnQCcpWzBdXG4gICAgKTtcblxuICAgIHRyeSB7XG4gICAgICBpZiAoXG4gICAgICAgIG1lc3NhZ2UudHlwZSA9PSAnaW1hZ2UnIHx8XG4gICAgICAgIG1lc3NhZ2UudHlwZSA9PSAndmlkZW8nIHx8XG4gICAgICAgIG1lc3NhZ2UudHlwZSA9PSAnaW4nIHx8XG4gICAgICAgIG1lc3NhZ2UudHlwZSA9PSAnZG9jdW1lbnQnIHx8XG4gICAgICAgIG1lc3NhZ2UudHlwZSA9PSAncHR0JyB8fFxuICAgICAgICBtZXNzYWdlLnR5cGUgPT0gJ2F1ZGlvJyB8fFxuICAgICAgICBtZXNzYWdlLnR5cGUgPT0gJ3N0aWNrZXInXG4gICAgICApIHtcbiAgICAgICAgaWYgKG1lc3NhZ2UubWltZXR5cGUgPT0gJ2ltYWdlL3dlYnAnKSBtZXNzYWdlLm1pbWV0eXBlID0gJ2ltYWdlL2pwZWcnO1xuICAgICAgICBjb25zdCBleHRlbnNpb24gPSBtaW1lLmV4dGVuc2lvbihtZXNzYWdlLm1pbWV0eXBlKTtcbiAgICAgICAgY29uc3QgZmlsZW5hbWUgPSBgJHttZXNzYWdlLnRpbWVzdGFtcH0uJHtleHRlbnNpb259YDtcbiAgICAgICAgbGV0IGI2NDtcblxuICAgICAgICBpZiAobWVzc2FnZS5xckNvZGUpIGI2NCA9IG1lc3NhZ2UucXJDb2RlO1xuICAgICAgICBlbHNlIHtcbiAgICAgICAgICBjb25zdCBidWZmZXIgPSBhd2FpdCBjbGllbnQuZGVjcnlwdEZpbGUobWVzc2FnZSk7XG4gICAgICAgICAgYjY0ID0gYXdhaXQgYnVmZmVyLnRvU3RyaW5nKCdiYXNlNjQnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG1lZGlhRGF0YSA9IEJ1ZmZlci5mcm9tKGI2NCwgJ2Jhc2U2NCcpO1xuXG4gICAgICAgIGNvbnN0IGRhdGEgPSBuZXcgRm9ybURhdGEoKTtcbiAgICAgICAgaWYgKG1lc3NhZ2UuY2FwdGlvbikge1xuICAgICAgICAgIGRhdGEuYXBwZW5kKCdjb250ZW50JywgbWVzc2FnZS5jYXB0aW9uKTtcbiAgICAgICAgfVxuICAgICAgICBkYXRhLmFwcGVuZCgnYXR0YWNobWVudHNbXScsIHRvU3RyZWFtKG1lZGlhRGF0YSksIHtcbiAgICAgICAgICBmaWxlbmFtZTogZmlsZW5hbWUsXG4gICAgICAgICAgY29udGVudFR5cGU6IG1lc3NhZ2UubWltZXR5cGUsXG4gICAgICAgIH0pO1xuICAgICAgICBkYXRhLmFwcGVuZCgnbWVzc2FnZV90eXBlJywgJ2luY29taW5nJyk7XG4gICAgICAgIGRhdGEuYXBwZW5kKCdwcml2YXRlJywgJ2ZhbHNlJyk7XG5cbiAgICAgICAgY29uc3QgY29uZmlnUG9zdCA9IE9iamVjdC5hc3NpZ24oXG4gICAgICAgICAge30sXG4gICAgICAgICAge1xuICAgICAgICAgICAgYmFzZVVSTDogdGhpcy5jb25maWcuYmFzZVVSTCxcbiAgICAgICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ9dXRmLTgnLFxuICAgICAgICAgICAgICBhcGlfYWNjZXNzX3Rva2VuOiB0aGlzLmNvbmZpZy50b2tlbixcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfVxuICAgICAgICApO1xuICAgICAgICBjb25maWdQb3N0LmhlYWRlcnMgPSB7IC4uLmNvbmZpZ1Bvc3QuaGVhZGVycywgLi4uZGF0YS5nZXRIZWFkZXJzKCkgfTtcblxuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBheGlvcy5wb3N0KFxuICAgICAgICAgIGBhcGkvdjEvYWNjb3VudHMvJHt0aGlzLmFjY291bnRfaWR9L2NvbnZlcnNhdGlvbnMvJHtjb252ZXJzYXRpb24uaWR9L21lc3NhZ2VzYCxcbiAgICAgICAgICBkYXRhLFxuICAgICAgICAgIGNvbmZpZ1Bvc3RcbiAgICAgICAgKTtcblxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgYm9keSA9IHtcbiAgICAgICAgICBjb250ZW50OiBtZXNzYWdlLmJvZHksXG4gICAgICAgICAgbWVzc2FnZV90eXBlOiAnaW5jb21pbmcnLFxuICAgICAgICB9O1xuICAgICAgICBjb25zdCB7IGRhdGEgfSA9IGF3YWl0IHRoaXMuYXBpLnBvc3QoXG4gICAgICAgICAgYGFwaS92MS9hY2NvdW50cy8ke3RoaXMuYWNjb3VudF9pZH0vY29udmVyc2F0aW9ucy8ke2NvbnZlcnNhdGlvbi5pZH0vbWVzc2FnZXNgLFxuICAgICAgICAgIGJvZHlcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZmluZENvbnRhY3QocXVlcnk6IHN0cmluZykge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCB7IGRhdGEgfSA9IGF3YWl0IHRoaXMuYXBpLmdldChcbiAgICAgICAgYGFwaS92MS9hY2NvdW50cy8ke3RoaXMuYWNjb3VudF9pZH0vY29udGFjdHMvc2VhcmNoLz9xPSR7cXVlcnl9YFxuICAgICAgKTtcbiAgICAgIHJldHVybiBkYXRhO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGNvbnNvbGUubG9nKGUpO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgY3JlYXRlQ29udGFjdChtZXNzYWdlOiBhbnkpIHtcbiAgICBjb25zdCBib2R5ID0ge1xuICAgICAgaW5ib3hfaWQ6IHRoaXMuaW5ib3hfaWQsXG4gICAgICBuYW1lOiBtZXNzYWdlLnNlbmRlci5pc015Q29udGFjdFxuICAgICAgICA/IG1lc3NhZ2Uuc2VuZGVyLmZvcm1hdHRlZE5hbWVcbiAgICAgICAgOiBtZXNzYWdlLnNlbmRlci5wdXNobmFtZSB8fCBtZXNzYWdlLnNlbmRlci5mb3JtYXR0ZWROYW1lLFxuICAgICAgcGhvbmVfbnVtYmVyOlxuICAgICAgICB0eXBlb2YgbWVzc2FnZS5zZW5kZXIuaWQgPT0gJ29iamVjdCdcbiAgICAgICAgICA/IG1lc3NhZ2Uuc2VuZGVyLmlkLnVzZXJcbiAgICAgICAgICA6IG1lc3NhZ2Uuc2VuZGVyLmlkLnNwbGl0KCdAJylbMF0sXG4gICAgfTtcbiAgICBib2R5LnBob25lX251bWJlciA9IGArJHtib2R5LnBob25lX251bWJlcn1gO1xuICAgIGNvbnN0IGNvbnRhY3QgPSBhd2FpdCB0aGlzLmZpbmRDb250YWN0KGJvZHkucGhvbmVfbnVtYmVyLnJlcGxhY2UoJysnLCAnJykpO1xuICAgIGlmIChjb250YWN0ICYmIGNvbnRhY3QubWV0YS5jb3VudCA+IDApIHJldHVybiBjb250YWN0LnBheWxvYWRbMF07XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IHRoaXMuYXBpLnBvc3QoXG4gICAgICAgIGBhcGkvdjEvYWNjb3VudHMvJHt0aGlzLmFjY291bnRfaWR9L2NvbnRhY3RzYCxcbiAgICAgICAgYm9keVxuICAgICAgKTtcbiAgICAgIHJldHVybiBkYXRhLmRhdGEucGF5bG9hZC5jb250YWN0O1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGNvbnNvbGUubG9nKGUpO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZmluZENvbnZlcnNhdGlvbihjb250YWN0OiBhbnkpIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgeyBkYXRhIH0gPSBhd2FpdCB0aGlzLmFwaS5nZXQoXG4gICAgICAgIGBhcGkvdjEvYWNjb3VudHMvJHt0aGlzLmFjY291bnRfaWR9L2NvbnZlcnNhdGlvbnM/aW5ib3hfaWQ9JHt0aGlzLmluYm94X2lkfSZzdGF0dXM9YWxsYFxuICAgICAgKTtcbiAgICAgIHJldHVybiBkYXRhLmRhdGEucGF5bG9hZC5maW5kKFxuICAgICAgICAoZTogYW55KSA9PiBlLm1ldGEuc2VuZGVyLmlkID09IGNvbnRhY3QuaWQgJiYgZS5zdGF0dXMgIT0gJ3Jlc29sdmVkJ1xuICAgICAgKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBjb25zb2xlLmxvZyhlKTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGNyZWF0ZUNvbnZlcnNhdGlvbihjb250YWN0OiBhbnksIHNvdXJjZV9pZDogYW55KSB7XG4gICAgY29uc3QgY29udmVyc2F0aW9uID0gYXdhaXQgdGhpcy5maW5kQ29udmVyc2F0aW9uKGNvbnRhY3QpO1xuICAgIGlmIChjb252ZXJzYXRpb24pIHJldHVybiBjb252ZXJzYXRpb247XG5cbiAgICBjb25zdCBib2R5ID0ge1xuICAgICAgc291cmNlX2lkOiBzb3VyY2VfaWQsXG4gICAgICBpbmJveF9pZDogdGhpcy5pbmJveF9pZCxcbiAgICAgIGNvbnRhY3RfaWQ6IGNvbnRhY3QuaWQsXG4gICAgICBzdGF0dXM6ICdvcGVuJyxcbiAgICB9O1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHsgZGF0YSB9ID0gYXdhaXQgdGhpcy5hcGkucG9zdChcbiAgICAgICAgYGFwaS92MS9hY2NvdW50cy8ke3RoaXMuYWNjb3VudF9pZH0vY29udmVyc2F0aW9uc2AsXG4gICAgICAgIGJvZHlcbiAgICAgICk7XG4gICAgICByZXR1cm4gZGF0YTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBjb25zb2xlLmxvZyhlKTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7QUFlQSxJQUFBQSxNQUFBLEdBQUFDLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBQyxlQUFBLEdBQUFGLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBRSxTQUFBLEdBQUFILHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBRyxVQUFBLEdBQUFKLHNCQUFBLENBQUFDLE9BQUE7O0FBRUEsSUFBQUksWUFBQSxHQUFBSixPQUFBLGtCQUE2QyxDQXBCN0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBUWUsTUFBTUssY0FBYyxDQUFDLENBVWxDQyxXQUFXQSxDQUFDQyxNQUFXLEVBQUVDLE9BQWUsRUFBRSxDQUN4QyxJQUFJLENBQUNELE1BQU0sR0FBR0EsTUFBTSxDQUNwQixJQUFJLENBQUNFLFdBQVcsR0FBRyxJQUFJLENBQUNGLE1BQU0sQ0FBQ0UsV0FBVztJQUN0QyxJQUFJLENBQUNGLE1BQU0sQ0FBQ0UsV0FBVztJQUN0QixZQUFXO0lBQ2hCLElBQUksQ0FBQ0MsYUFBYSxHQUFHLElBQUksQ0FBQ0gsTUFBTSxDQUFDRyxhQUFhO0lBQzFDLElBQUksQ0FBQ0gsTUFBTSxDQUFDRyxhQUFhO0lBQ3pCLGVBQWU7SUFDbkIsSUFBSSxDQUFDQyxNQUFNLEdBQUc7TUFDWkMsUUFBUSxFQUFFLElBQUksQ0FBQ0gsV0FBVztNQUMxQkksRUFBRSxFQUFFLElBQUksQ0FBQ0g7SUFDWCxDQUFDO0lBQ0QsSUFBSSxDQUFDSSxVQUFVLEdBQUcsSUFBSSxDQUFDUCxNQUFNLENBQUNPLFVBQVU7SUFDeEMsSUFBSSxDQUFDQyxR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
242
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfYXhpb3MiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsIl9idWZmZXJUb1N0cmVhbSIsIl9mb3JtRGF0YSIsIl9taW1lVHlwZXMiLCJfc2Vzc2lvblV0aWwiLCJjaGF0V29vdENsaWVudCIsImNvbnN0cnVjdG9yIiwiY29uZmlnIiwic2Vzc2lvbiIsIm1vYmlsZV9uYW1lIiwibW9iaWxlX251bWJlciIsInNlbmRlciIsInB1c2huYW1lIiwiaWQiLCJhY2NvdW50X2lkIiwiaW5ib3hfaWQiLCJhcGkiLCJheGlvcyIsImNyZWF0ZSIsImJhc2VVUkwiLCJoZWFkZXJzIiwiYXBpX2FjY2Vzc190b2tlbiIsInRva2VuIiwiZXZlbnRFbWl0dGVyIiwib24iLCJxckNvZGUiLCJ1cmxDb2RlIiwiY2xpZW50Iiwic2V0VGltZW91dCIsImNoYXR3b290Iiwic2VuZFFyQ29kZSIsInNlbmRNZXNzYWdlIiwiY2hhdElkIiwidHlwZSIsInRpbWVzdGFtcCIsIm1pbWV0eXBlIiwiY2FwdGlvbiIsInJlcGxhY2UiLCJzdGF0dXMiLCJzZW5kU3RhdHVzIiwiYm9keSIsIm1lc3NhZ2UiLCJpc0dyb3VwTXNnIiwiaW5kZXhPZiIsImNvbnRhY3QiLCJjcmVhdGVDb250YWN0IiwiY29udmVyc2F0aW9uIiwiY3JlYXRlQ29udmVyc2F0aW9uIiwic3BsaXQiLCJleHRlbnNpb24iLCJtaW1lIiwiZmlsZW5hbWUiLCJiNjQiLCJidWZmZXIiLCJkZWNyeXB0RmlsZSIsInRvU3RyaW5nIiwibWVkaWFEYXRhIiwiQnVmZmVyIiwiZnJvbSIsImRhdGEiLCJGb3JtRGF0YSIsImFwcGVuZCIsInRvU3RyZWFtIiwiY29udGVudFR5cGUiLCJjb25maWdQb3N0IiwiT2JqZWN0IiwiYXNzaWduIiwiZ2V0SGVhZGVycyIsInJlc3VsdCIsInBvc3QiLCJjb250ZW50IiwibWVzc2FnZV90eXBlIiwiZSIsImZpbmRDb250YWN0IiwicXVlcnkiLCJnZXQiLCJjb25zb2xlIiwibG9nIiwibmFtZSIsImlzTXlDb250YWN0IiwiZm9ybWF0dGVkTmFtZSIsInBob25lX251bWJlciIsInVzZXIiLCJtZXRhIiwiY291bnQiLCJwYXlsb2FkIiwiZmluZENvbnZlcnNhdGlvbiIsImZpbmQiLCJzb3VyY2VfaWQiLCJjb250YWN0X2lkIiwiZXhwb3J0cyIsImRlZmF1bHQiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbC9jaGF0V29vdENsaWVudC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogQ29weXJpZ2h0IDIwMjEgV1BQQ29ubmVjdCBUZWFtXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5pbXBvcnQgYXhpb3MgZnJvbSAnYXhpb3MnO1xuaW1wb3J0IHRvU3RyZWFtIGZyb20gJ2J1ZmZlci10by1zdHJlYW0nO1xuaW1wb3J0IHsgZGVmYXVsdCBhcyBGb3JtRGF0YSB9IGZyb20gJ2Zvcm0tZGF0YSc7XG5pbXBvcnQgbWltZSBmcm9tICdtaW1lLXR5cGVzJztcblxuaW1wb3J0IHsgZXZlbnRFbWl0dGVyIH0gZnJvbSAnLi9zZXNzaW9uVXRpbCc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIGNoYXRXb290Q2xpZW50IHtcbiAgZGVjbGFyZSBjb25maWc6IGFueTtcbiAgZGVjbGFyZSBzZXNzaW9uOiBhbnk7XG4gIGRlY2xhcmUgbW9iaWxlX25hbWU6IGFueTtcbiAgZGVjbGFyZSBtb2JpbGVfbnVtYmVyOiBhbnk7XG4gIGRlY2xhcmUgc2VuZGVyOiBhbnk7XG4gIGRlY2xhcmUgYWNjb3VudF9pZDogYW55O1xuICBkZWNsYXJlIGluYm94X2lkOiBhbnk7XG4gIGRlY2xhcmUgYXBpOiBhbnk7XG5cbiAgY29uc3RydWN0b3IoY29uZmlnOiBhbnksIHNlc3Npb246IHN0cmluZykge1xuICAgIHRoaXMuY29uZmlnID0gY29uZmlnO1xuICAgIHRoaXMubW9iaWxlX25hbWUgPSB0aGlzLmNvbmZpZy5tb2JpbGVfbmFtZVxuICAgICAgPyB0aGlzLmNvbmZpZy5tb2JpbGVfbmFtZVxuICAgICAgOiBgV1BQQ29ubmVjdGA7XG4gICAgdGhpcy5tb2JpbGVfbnVtYmVyID0gdGhpcy5jb25maWcubW9iaWxlX251bWJlclxuICAgICAgPyB0aGlzLmNvbmZpZy5tb2JpbGVfbnVtYmVyXG4gICAgICA6ICc1NTExOTk5OTk5OTk5JztcbiAgICB0aGlzLnNlbmRlciA9IHtcbiAgICAgIHB1c2huYW1lOiB0aGlzLm1vYmlsZV9uYW1lLFxuICAgICAgaWQ6IHRoaXMubW9iaWxlX251bWJlcixcbiAgICB9O1xuICAgIHRoaXMuYWNjb3VudF9pZCA9IHRoaXMuY29uZmlnLmFjY291bnRfaWQ7XG4gICAgdGhpcy5pbmJveF9pZCA9IHRoaXMuY29uZmlnLmluYm94X2lkO1xuICAgIHRoaXMuYXBpID0gYXhpb3MuY3JlYXRlKHtcbiAgICAgIGJhc2VVUkw6IHRoaXMuY29uZmlnLmJhc2VVUkwsXG4gICAgICBoZWFkZXJzOiB7XG4gICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbjtjaGFyc2V0PXV0Zi04JyxcbiAgICAgICAgYXBpX2FjY2Vzc190b2tlbjogdGhpcy5jb25maWcudG9rZW4sXG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgLy9hc3NpbmEgbyBldmVudG8gZG8gcXJjb2RlXG4gICAgZXZlbnRFbWl0dGVyLm9uKGBxcmNvZGUtJHtzZXNzaW9ufWAsIChxckNvZGUsIHVybENvZGUsIGNsaWVudCkgPT4ge1xuICAgICAgc2V0VGltZW91dChhc3luYyAoKSA9PiB7XG4gICAgICAgIGlmIChjb25maWc/LmNoYXR3b290Py5zZW5kUXJDb2RlICE9PSBmYWxzZSkge1xuICAgICAgICAgIHRoaXMuc2VuZE1lc3NhZ2UoY2xpZW50LCB7XG4gICAgICAgICAgICBzZW5kZXI6IHRoaXMuc2VuZGVyLFxuICAgICAgICAgICAgY2hhdElkOiB0aGlzLm1vYmlsZV9udW1iZXIgKyAnQGMudXMnLFxuICAgICAgICAgICAgdHlwZTogJ2ltYWdlJyxcbiAgICAgICAgICAgIHRpbWVzdGFtcDogJ3FyY29kZScsXG4gICAgICAgICAgICBtaW1ldHlwZTogJ2ltYWdlL3BuZycsXG4gICAgICAgICAgICBjYXB0aW9uOiAnbGVpYSBvIHFyQ29kZScsXG4gICAgICAgICAgICBxckNvZGU6IHFyQ29kZS5yZXBsYWNlKCdkYXRhOmltYWdlL3BuZztiYXNlNjQsJywgJycpLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9LCAxMDAwKTtcbiAgICB9KTtcblxuICAgIC8vYXNzaW9uYSBvIGV2ZW50byBkbyBzdGF0dXNcbiAgICBldmVudEVtaXR0ZXIub24oYHN0YXR1cy0ke3Nlc3Npb259YCwgKGNsaWVudCwgc3RhdHVzKSA9PiB7XG4gICAgICBpZiAoY29uZmlnPy5jaGF0d29vdD8uc2VuZFN0YXR1cyAhPT0gZmFsc2UpIHtcbiAgICAgICAgdGhpcy5zZW5kTWVzc2FnZShjbGllbnQsIHtcbiAgICAgICAgICBzZW5kZXI6IHRoaXMuc2VuZGVyLFxuICAgICAgICAgIGNoYXRJZDogdGhpcy5tb2JpbGVfbnVtYmVyICsgJ0BjLnVzJyxcbiAgICAgICAgICBib2R5OiBgd3BwY29ubmVjdCBzdGF0dXM6ICR7c3RhdHVzfSBgLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIC8vYXNzaW5hIG8gZXZlbnRvIGRlIG1lbnNhZ2VtXG4gICAgZXZlbnRFbWl0dGVyLm9uKGBtZW5zYWdlbS0ke3Nlc3Npb259YCwgKGNsaWVudCwgbWVzc2FnZSkgPT4ge1xuICAgICAgdGhpcy5zZW5kTWVzc2FnZShjbGllbnQsIG1lc3NhZ2UpO1xuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgc2VuZE1lc3NhZ2UoY2xpZW50OiBhbnksIG1lc3NhZ2U6IGFueSkge1xuICAgIGlmIChtZXNzYWdlLmlzR3JvdXBNc2cgfHwgbWVzc2FnZS5jaGF0SWQuaW5kZXhPZignQGJyb2FkY2FzdCcpID4gMCkgcmV0dXJuO1xuICAgIGNvbnN0IGNvbnRhY3QgPSBhd2FpdCB0aGlzLmNyZWF0ZUNvbnRhY3QobWVzc2FnZSk7XG4gICAgY29uc3QgY29udmVyc2F0aW9uID0gYXdhaXQgdGhpcy5jcmVhdGVDb252ZXJzYXRpb24oXG4gICAgICBjb250YWN0LFxuICAgICAgbWVzc2FnZS5jaGF0SWQuc3BsaXQoJ0AnKVswXVxuICAgICk7XG5cbiAgICB0cnkge1xuICAgICAgaWYgKFxuICAgICAgICBtZXNzYWdlLnR5cGUgPT0gJ2ltYWdlJyB8fFxuICAgICAgICBtZXNzYWdlLnR5cGUgPT0gJ3ZpZGVvJyB8fFxuICAgICAgICBtZXNzYWdlLnR5cGUgPT0gJ2luJyB8fFxuICAgICAgICBtZXNzYWdlLnR5cGUgPT0gJ2RvY3VtZW50JyB8fFxuICAgICAgICBtZXNzYWdlLnR5cGUgPT0gJ3B0dCcgfHxcbiAgICAgICAgbWVzc2FnZS50eXBlID09ICdhdWRpbycgfHxcbiAgICAgICAgbWVzc2FnZS50eXBlID09ICdzdGlja2VyJ1xuICAgICAgKSB7XG4gICAgICAgIGlmIChtZXNzYWdlLm1pbWV0eXBlID09ICdpbWFnZS93ZWJwJykgbWVzc2FnZS5taW1ldHlwZSA9ICdpbWFnZS9qcGVnJztcbiAgICAgICAgY29uc3QgZXh0ZW5zaW9uID0gbWltZS5leHRlbnNpb24obWVzc2FnZS5taW1ldHlwZSk7XG4gICAgICAgIGNvbnN0IGZpbGVuYW1lID0gYCR7bWVzc2FnZS50aW1lc3RhbXB9LiR7ZXh0ZW5zaW9ufWA7XG4gICAgICAgIGxldCBiNjQ7XG5cbiAgICAgICAgaWYgKG1lc3NhZ2UucXJDb2RlKSBiNjQgPSBtZXNzYWdlLnFyQ29kZTtcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgY29uc3QgYnVmZmVyID0gYXdhaXQgY2xpZW50LmRlY3J5cHRGaWxlKG1lc3NhZ2UpO1xuICAgICAgICAgIGI2NCA9IGF3YWl0IGJ1ZmZlci50b1N0cmluZygnYmFzZTY0Jyk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBtZWRpYURhdGEgPSBCdWZmZXIuZnJvbShiNjQsICdiYXNlNjQnKTtcblxuICAgICAgICBjb25zdCBkYXRhID0gbmV3IEZvcm1EYXRhKCk7XG4gICAgICAgIGlmIChtZXNzYWdlLmNhcHRpb24pIHtcbiAgICAgICAgICBkYXRhLmFwcGVuZCgnY29udGVudCcsIG1lc3NhZ2UuY2FwdGlvbik7XG4gICAgICAgIH1cbiAgICAgICAgZGF0YS5hcHBlbmQoJ2F0dGFjaG1lbnRzW10nLCB0b1N0cmVhbShtZWRpYURhdGEpLCB7XG4gICAgICAgICAgZmlsZW5hbWU6IGZpbGVuYW1lLFxuICAgICAgICAgIGNvbnRlbnRUeXBlOiBtZXNzYWdlLm1pbWV0eXBlLFxuICAgICAgICB9KTtcbiAgICAgICAgZGF0YS5hcHBlbmQoJ21lc3NhZ2VfdHlwZScsICdpbmNvbWluZycpO1xuICAgICAgICBkYXRhLmFwcGVuZCgncHJpdmF0ZScsICdmYWxzZScpO1xuXG4gICAgICAgIGNvbnN0IGNvbmZpZ1Bvc3QgPSBPYmplY3QuYXNzaWduKFxuICAgICAgICAgIHt9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGJhc2VVUkw6IHRoaXMuY29uZmlnLmJhc2VVUkwsXG4gICAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbjtjaGFyc2V0PXV0Zi04JyxcbiAgICAgICAgICAgICAgYXBpX2FjY2Vzc190b2tlbjogdGhpcy5jb25maWcudG9rZW4sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICAgICAgY29uZmlnUG9zdC5oZWFkZXJzID0geyAuLi5jb25maWdQb3N0LmhlYWRlcnMsIC4uLmRhdGEuZ2V0SGVhZGVycygpIH07XG5cbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgYXhpb3MucG9zdChcbiAgICAgICAgICBgYXBpL3YxL2FjY291bnRzLyR7dGhpcy5hY2NvdW50X2lkfS9jb252ZXJzYXRpb25zLyR7Y29udmVyc2F0aW9uLmlkfS9tZXNzYWdlc2AsXG4gICAgICAgICAgZGF0YSxcbiAgICAgICAgICBjb25maWdQb3N0XG4gICAgICAgICk7XG5cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGJvZHkgPSB7XG4gICAgICAgICAgY29udGVudDogbWVzc2FnZS5ib2R5LFxuICAgICAgICAgIG1lc3NhZ2VfdHlwZTogJ2luY29taW5nJyxcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgeyBkYXRhIH0gPSBhd2FpdCB0aGlzLmFwaS5wb3N0KFxuICAgICAgICAgIGBhcGkvdjEvYWNjb3VudHMvJHt0aGlzLmFjY291bnRfaWR9L2NvbnZlcnNhdGlvbnMvJHtjb252ZXJzYXRpb24uaWR9L21lc3NhZ2VzYCxcbiAgICAgICAgICBib2R5XG4gICAgICAgICk7XG4gICAgICAgIHJldHVybiBkYXRhO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGZpbmRDb250YWN0KHF1ZXJ5OiBzdHJpbmcpIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgeyBkYXRhIH0gPSBhd2FpdCB0aGlzLmFwaS5nZXQoXG4gICAgICAgIGBhcGkvdjEvYWNjb3VudHMvJHt0aGlzLmFjY291bnRfaWR9L2NvbnRhY3RzL3NlYXJjaC8/cT0ke3F1ZXJ5fWBcbiAgICAgICk7XG4gICAgICByZXR1cm4gZGF0YTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBjb25zb2xlLmxvZyhlKTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGNyZWF0ZUNvbnRhY3QobWVzc2FnZTogYW55KSB7XG4gICAgY29uc3QgYm9keSA9IHtcbiAgICAgIGluYm94X2lkOiB0aGlzLmluYm94X2lkLFxuICAgICAgbmFtZTogbWVzc2FnZS5zZW5kZXIuaXNNeUNvbnRhY3RcbiAgICAgICAgPyBtZXNzYWdlLnNlbmRlci5mb3JtYXR0ZWROYW1lXG4gICAgICAgIDogbWVzc2FnZS5zZW5kZXIucHVzaG5hbWUgfHwgbWVzc2FnZS5zZW5kZXIuZm9ybWF0dGVkTmFtZSxcbiAgICAgIHBob25lX251bWJlcjpcbiAgICAgICAgdHlwZW9mIG1lc3NhZ2Uuc2VuZGVyLmlkID09ICdvYmplY3QnXG4gICAgICAgICAgPyBtZXNzYWdlLnNlbmRlci5pZC51c2VyXG4gICAgICAgICAgOiBtZXNzYWdlLnNlbmRlci5pZC5zcGxpdCgnQCcpWzBdLFxuICAgIH07XG4gICAgYm9keS5waG9uZV9udW1iZXIgPSBgKyR7Ym9keS5waG9uZV9udW1iZXJ9YDtcbiAgICBjb25zdCBjb250YWN0ID0gYXdhaXQgdGhpcy5maW5kQ29udGFjdChib2R5LnBob25lX251bWJlci5yZXBsYWNlKCcrJywgJycpKTtcbiAgICBpZiAoY29udGFjdCAmJiBjb250YWN0Lm1ldGEuY291bnQgPiAwKSByZXR1cm4gY29udGFjdC5wYXlsb2FkWzBdO1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCB0aGlzLmFwaS5wb3N0KFxuICAgICAgICBgYXBpL3YxL2FjY291bnRzLyR7dGhpcy5hY2NvdW50X2lkfS9jb250YWN0c2AsXG4gICAgICAgIGJvZHlcbiAgICAgICk7XG4gICAgICByZXR1cm4gZGF0YS5kYXRhLnBheWxvYWQuY29udGFjdDtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBjb25zb2xlLmxvZyhlKTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGZpbmRDb252ZXJzYXRpb24oY29udGFjdDogYW55KSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHsgZGF0YSB9ID0gYXdhaXQgdGhpcy5hcGkuZ2V0KFxuICAgICAgICBgYXBpL3YxL2FjY291bnRzLyR7dGhpcy5hY2NvdW50X2lkfS9jb252ZXJzYXRpb25zP2luYm94X2lkPSR7dGhpcy5pbmJveF9pZH0mc3RhdHVzPWFsbGBcbiAgICAgICk7XG4gICAgICByZXR1cm4gZGF0YS5kYXRhLnBheWxvYWQuZmluZChcbiAgICAgICAgKGU6IGFueSkgPT4gZS5tZXRhLnNlbmRlci5pZCA9PSBjb250YWN0LmlkICYmIGUuc3RhdHVzICE9ICdyZXNvbHZlZCdcbiAgICAgICk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgY29uc29sZS5sb2coZSk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cblxuICBhc3luYyBjcmVhdGVDb252ZXJzYXRpb24oY29udGFjdDogYW55LCBzb3VyY2VfaWQ6IGFueSkge1xuICAgIGNvbnN0IGNvbnZlcnNhdGlvbiA9IGF3YWl0IHRoaXMuZmluZENvbnZlcnNhdGlvbihjb250YWN0KTtcbiAgICBpZiAoY29udmVyc2F0aW9uKSByZXR1cm4gY29udmVyc2F0aW9uO1xuXG4gICAgY29uc3QgYm9keSA9IHtcbiAgICAgIHNvdXJjZV9pZDogc291cmNlX2lkLFxuICAgICAgaW5ib3hfaWQ6IHRoaXMuaW5ib3hfaWQsXG4gICAgICBjb250YWN0X2lkOiBjb250YWN0LmlkLFxuICAgICAgc3RhdHVzOiAnb3BlbicsXG4gICAgfTtcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCB7IGRhdGEgfSA9IGF3YWl0IHRoaXMuYXBpLnBvc3QoXG4gICAgICAgIGBhcGkvdjEvYWNjb3VudHMvJHt0aGlzLmFjY291bnRfaWR9L2NvbnZlcnNhdGlvbnNgLFxuICAgICAgICBib2R5XG4gICAgICApO1xuICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgY29uc29sZS5sb2coZSk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7O0FBZUEsSUFBQUEsTUFBQSxHQUFBQyxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUMsZUFBQSxHQUFBRixzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUUsU0FBQSxHQUFBSCxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUcsVUFBQSxHQUFBSixzQkFBQSxDQUFBQyxPQUFBOztBQUVBLElBQUFJLFlBQUEsR0FBQUosT0FBQSxrQkFBNkMsQ0FwQjdDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQVFlLE1BQU1LLGNBQWMsQ0FBQyxDQVVsQ0MsV0FBV0EsQ0FBQ0MsTUFBVyxFQUFFQyxPQUFlLEVBQUUsQ0FDeEMsSUFBSSxDQUFDRCxNQUFNLEdBQUdBLE1BQU0sQ0FDcEIsSUFBSSxDQUFDRSxXQUFXLEdBQUcsSUFBSSxDQUFDRixNQUFNLENBQUNFLFdBQVc7SUFDdEMsSUFBSSxDQUFDRixNQUFNLENBQUNFLFdBQVc7SUFDdEIsWUFBVztJQUNoQixJQUFJLENBQUNDLGFBQWEsR0FBRyxJQUFJLENBQUNILE1BQU0sQ0FBQ0csYUFBYTtJQUMxQyxJQUFJLENBQUNILE1B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
@@ -15,8 +15,8 @@
15
15
 
16
16
  var _wppconnect = require("@wppconnect-team/wppconnect");
17
17
 
18
- var _sessionController = require("../controller/sessionController");
19
18
 
19
+ var _sessionController = require("../controller/sessionController");
20
20
 
21
21
  var _chatWootClient = _interopRequireDefault(require("./chatWootClient"));
22
22
  var _functions = require("./functions");
@@ -62,51 +62,51 @@ var _factory = _interopRequireDefault(require("./tokenStore/factory")); /*
62
62
  }
63
63
 
64
64
  const wppClient = await (0, _wppconnect.create)(
65
- Object.assign(
66
- {},
67
- { tokenStore: myTokenStore },
68
- req.serverOptions.createOptions,
69
- {
70
- session: session,
71
- deviceName: req.serverOptions.deviceName,
72
- poweredBy: req.serverOptions.poweredBy || 'WPPConnect-Server',
73
- catchQR: (
74
- base64Qr,
75
- asciiQR,
76
- attempt,
77
- urlCode) =>
78
- {
79
- this.exportQR(req, base64Qr, urlCode, client, res);
80
- },
81
- onLoadingScreen: (percent, message) => {
82
- req.logger.info(`[${session}] ${percent}% - ${message}`);
83
- },
84
- statusFind: (statusFind) => {
85
- try {
86
- _sessionUtil.eventEmitter.emit(
87
- `status-${client.session}`,
88
- client,
89
- statusFind);
90
-
91
- if (
92
- statusFind === 'autocloseCalled' ||
93
- statusFind === 'desconnectedMobile')
65
+ Object.assign(
66
+ {},
67
+ { tokenStore: myTokenStore },
68
+ req.serverOptions.createOptions,
69
+ {
70
+ session: session,
71
+ deviceName: req.serverOptions.deviceName,
72
+ poweredBy: req.serverOptions.poweredBy || 'WPPConnect-Server',
73
+ catchQR: (
74
+ base64Qr,
75
+ asciiQR,
76
+ attempt,
77
+ urlCode) =>
94
78
  {
95
- client.status = 'CLOSED';
96
- client.qrcode = null;
97
- client.close();
98
- clientsArray[session] = undefined;
79
+ this.exportQR(req, base64Qr, urlCode, client, res);
80
+ },
81
+ onLoadingScreen: (percent, message) => {
82
+ req.logger.info(`[${session}] ${percent}% - ${message}`);
83
+ },
84
+ statusFind: (statusFind) => {
85
+ try {
86
+ _sessionUtil.eventEmitter.emit(
87
+ `status-${client.session}`,
88
+ client,
89
+ statusFind
90
+ );
91
+ if (
92
+ statusFind === 'autocloseCalled' ||
93
+ statusFind === 'desconnectedMobile')
94
+ {
95
+ client.status = 'CLOSED';
96
+ client.qrcode = null;
97
+ client.close();
98
+ clientsArray[session] = undefined;
99
+ }
100
+ (0, _functions.callWebHook)(client, req, 'status-find', {
101
+ status: statusFind,
102
+ session: client.session
103
+ });
104
+ req.logger.info(statusFind + '\n\n');
105
+ } catch (error) {}
99
106
  }
100
- (0, _functions.callWebHook)(client, req, 'status-find', {
101
- status: statusFind,
102
- session: client.session
103
- });
104
- req.logger.info(statusFind + '\n\n');
105
- } catch (error) {}
106
- }
107
- }));
108
-
109
-
107
+ }
108
+ )
109
+ );
110
110
 
111
111
  client = clientsArray[session] = Object.assign(wppClient, client);
112
112
  await this.start(req, client);
@@ -126,6 +126,9 @@ var _factory = _interopRequireDefault(require("./tokenStore/factory")); /*
126
126
  if (req.serverOptions.webhook.onPollResponse) {
127
127
  await this.onPollResponse(client, req);
128
128
  }
129
+ if (req.serverOptions.webhook.onLabelUpdated) {
130
+ await this.onLabelUpdated(client, req);
131
+ }
129
132
  } catch (e) {
130
133
  req.logger.error(e);
131
134
  }
@@ -270,6 +273,13 @@ var _factory = _interopRequireDefault(require("./tokenStore/factory")); /*
270
273
  (0, _functions.callWebHook)(client, req, 'onpollresponse', response);
271
274
  });
272
275
  }
276
+ async onLabelUpdated(client, req) {
277
+ await client.isConnected();
278
+ await client.onUpdateLabel(async (response) => {
279
+ req.io.emit('onupdatelabel', response);
280
+ (0, _functions.callWebHook)(client, req, 'onupdatelabel', response);
281
+ });
282
+ }
273
283
 
274
284
  encodeFunction(data, webhook) {
275
285
  data.webhook = webhook;
@@ -294,4 +304,4 @@ var _factory = _interopRequireDefault(require("./tokenStore/factory")); /*
294
304
  return client;
295
305
  }
296
306
  }exports.default = CreateSessionUtil;
297
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfd3BwY29ubmVjdCIsInJlcXVpcmUiLCJfc2Vzc2lvbkNvbnRyb2xsZXIiLCJfY2hhdFdvb3RDbGllbnQiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwiX2Z1bmN0aW9ucyIsIl9zZXNzaW9uVXRpbCIsIl9mYWN0b3J5IiwiQ3JlYXRlU2Vzc2lvblV0aWwiLCJzdGFydENoYXRXb290Q2xpZW50IiwiY2xpZW50IiwiY29uZmlnIiwiY2hhdFdvb3QiLCJjaGF0V29vdENsaWVudCIsInNlc3Npb24iLCJjcmVhdGVTZXNzaW9uVXRpbCIsInJlcSIsImNsaWVudHNBcnJheSIsInJlcyIsImdldENsaWVudCIsInN0YXR1cyIsImJvZHkiLCJ0b2tlblN0b3JlIiwiRmFjdG9yeSIsIm15VG9rZW5TdG9yZSIsImNyZWF0ZVRva2VuU3RvcnkiLCJ0b2tlbkRhdGEiLCJnZXRUb2tlbiIsInNldFRva2VuIiwic2VydmVyT3B0aW9ucyIsImN1c3RvbVVzZXJEYXRhRGlyIiwiY3JlYXRlT3B0aW9ucyIsInB1cHBldGVlck9wdGlvbnMiLCJ1c2VyRGF0YURpciIsIndwcENsaWVudCIsImNyZWF0ZSIsIk9iamVjdCIsImFzc2lnbiIsImRldmljZU5hbWUiLCJwb3dlcmVkQnkiLCJjYXRjaFFSIiwiYmFzZTY0UXIiLCJhc2NpaVFSIiwiYXR0ZW1wdCIsInVybENvZGUiLCJleHBvcnRRUiIsIm9uTG9hZGluZ1NjcmVlbiIsInBlcmNlbnQiLCJtZXNzYWdlIiwibG9nZ2VyIiwiaW5mbyIsInN0YXR1c0ZpbmQiLCJldmVudEVtaXR0ZXIiLCJlbWl0IiwicXJjb2RlIiwiY2xvc2UiLCJ1bmRlZmluZWQiLCJjYWxsV2ViSG9vayIsImVycm9yIiwic3RhcnQiLCJ3ZWJob29rIiwib25QYXJ0aWNpcGFudHNDaGFuZ2VkIiwib25SZWFjdGlvbk1lc3NhZ2UiLCJvblJldm9rZWRNZXNzYWdlIiwib25Qb2xsUmVzcG9uc2UiLCJlIiwib3BlbmRhdGEiLCJxckNvZGUiLCJ1cmxjb2RlIiwicmVwbGFjZSIsImltYWdlQnVmZmVyIiwiQnVmZmVyIiwiZnJvbSIsImlvIiwiZGF0YSIsInRvU3RyaW5nIiwiX2hlYWRlclNlbnQiLCJqc29uIiwiaXNDb25uZWN0ZWQiLCJzdGFydEhlbHBlciIsImNoZWNrU3RhdGVTZXNzaW9uIiwibGlzdGVuTWVzc2FnZXMiLCJsaXN0ZW5BY2tzIiwib25QcmVzZW5jZUNoYW5nZWQiLCJvblN0YXRlQ2hhbmdlIiwic3RhdGUiLCJjb25mbGl0cyIsIlNvY2tldFN0YXRlIiwiQ09ORkxJQ1QiLCJpbmNsdWRlcyIsInVzZUhlcmUiLCJvbk1lc3NhZ2UiLCJ0eXBlIiwib25MaXZlTG9jYXRpb24iLCJzZW5kZXIiLCJpZCIsImxvY2F0aW9uIiwib25BbnlNZXNzYWdlIiwiZG93bmxvYWQiLCJyZXNwb25zZSIsIm9uSW5jb21pbmdDYWxsIiwiY2FsbCIsIm9uQWNrIiwiYWNrIiwicHJlc2VuY2VDaGFuZ2VkRXZlbnQiLCJyZWFjdGlvbiIsImVuY29kZUZ1bmN0aW9uIiwiSlNPTiIsInN0cmluZ2lmeSIsImRlY29kZUZ1bmN0aW9uIiwidGV4dCIsIm9iamVjdCIsInBhcnNlIiwiZXhwb3J0cyIsImRlZmF1bHQiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbC9jcmVhdGVTZXNzaW9uVXRpbC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogQ29weXJpZ2h0IDIwMjEgV1BQQ29ubmVjdCBUZWFtXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5pbXBvcnQgeyBjcmVhdGUsIFNvY2tldFN0YXRlIH0gZnJvbSAnQHdwcGNvbm5lY3QtdGVhbS93cHBjb25uZWN0JztcblxuaW1wb3J0IHsgZG93bmxvYWQgfSBmcm9tICcuLi9jb250cm9sbGVyL3Nlc3Npb25Db250cm9sbGVyJztcbmltcG9ydCB7IFJlcXVlc3QgfSBmcm9tICcuLi90eXBlcy9SZXF1ZXN0JztcbmltcG9ydCB7IFdoYXRzQXBwU2VydmVyIH0gZnJvbSAnLi4vdHlwZXMvV2hhdHNBcHBTZXJ2ZXInO1xuaW1wb3J0IGNoYXRXb290Q2xpZW50IGZyb20gJy4vY2hhdFdvb3RDbGllbnQnO1xuaW1wb3J0IHsgY2FsbFdlYkhvb2ssIHN0YXJ0SGVscGVyIH0gZnJvbSAnLi9mdW5jdGlvbnMnO1xuaW1wb3J0IHsgY2xpZW50c0FycmF5LCBldmVudEVtaXR0ZXIgfSBmcm9tICcuL3Nlc3Npb25VdGlsJztcbmltcG9ydCBGYWN0b3J5IGZyb20gJy4vdG9rZW5TdG9yZS9mYWN0b3J5JztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ3JlYXRlU2Vzc2lvblV0aWwge1xuICBzdGFydENoYXRXb290Q2xpZW50KGNsaWVudDogYW55KSB7XG4gICAgaWYgKGNsaWVudC5jb25maWcuY2hhdFdvb3QgJiYgIWNsaWVudC5fY2hhdFdvb3RDbGllbnQpXG4gICAgICBjbGllbnQuX2NoYXRXb290Q2xpZW50ID0gbmV3IGNoYXRXb290Q2xpZW50KFxuICAgICAgICBjbGllbnQuY29uZmlnLmNoYXRXb290LFxuICAgICAgICBjbGllbnQuc2Vzc2lvblxuICAgICAgKTtcbiAgICByZXR1cm4gY2xpZW50Ll9jaGF0V29vdENsaWVudDtcbiAgfVxuXG4gIGFzeW5jIGNyZWF0ZVNlc3Npb25VdGlsKFxuICAgIHJlcTogYW55LFxuICAgIGNsaWVudHNBcnJheTogYW55LFxuICAgIHNlc3Npb246IHN0cmluZyxcbiAgICByZXM/OiBhbnlcbiAgKSB7XG4gICAgdHJ5IHtcbiAgICAgIGxldCBjbGllbnQgPSB0aGlzLmdldENsaWVudChzZXNzaW9uKSBhcyBhbnk7XG4gICAgICBpZiAoY2xpZW50LnN0YXR1cyAhPSBudWxsICYmIGNsaWVudC5zdGF0dXMgIT09ICdDTE9TRUQnKSByZXR1cm47XG4gICAgICBjbGllbnQuc3RhdHVzID0gJ0lOSVRJQUxJWklORyc7XG4gICAgICBjbGllbnQuY29uZmlnID0gcmVxLmJvZHk7XG5cbiAgICAgIGNvbnN0IHRva2VuU3RvcmUgPSBuZXcgRmFjdG9yeSgpO1xuICAgICAgY29uc3QgbXlUb2tlblN0b3JlID0gdG9rZW5TdG9yZS5jcmVhdGVUb2tlblN0b3J5KGNsaWVudCk7XG4gICAgICBjb25zdCB0b2tlbkRhdGEgPSBhd2FpdCBteVRva2VuU3RvcmUuZ2V0VG9rZW4oc2Vzc2lvbik7XG5cbiAgICAgIGlmICghdG9rZW5EYXRhKSB7XG4gICAgICAgIG15VG9rZW5TdG9yZS5zZXRUb2tlbihzZXNzaW9uLCB7fSk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuc3RhcnRDaGF0V29vdENsaWVudChjbGllbnQpO1xuXG4gICAgICBpZiAocmVxLnNlcnZlck9wdGlvbnMuY3VzdG9tVXNlckRhdGFEaXIpIHtcbiAgICAgICAgcmVxLnNlcnZlck9wdGlvbnMuY3JlYXRlT3B0aW9ucy5wdXBwZXRlZXJPcHRpb25zID0ge1xuICAgICAgICAgIHVzZXJEYXRhRGlyOiByZXEuc2VydmVyT3B0aW9ucy5jdXN0b21Vc2VyRGF0YURpciArIHNlc3Npb24sXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHdwcENsaWVudCA9IGF3YWl0IGNyZWF0ZShcbiAgICAgICAgT2JqZWN0LmFzc2lnbihcbiAgICAgICAgICB7fSxcbiAgICAgICAgICB7IHRva2VuU3RvcmU6IG15VG9rZW5TdG9yZSB9LFxuICAgICAgICAgIHJlcS5zZXJ2ZXJPcHRpb25zLmNyZWF0ZU9wdGlvbnMsXG4gICAgICAgICAge1xuICAgICAgICAgICAgc2Vzc2lvbjogc2Vzc2lvbixcbiAgICAgICAgICAgIGRldmljZU5hbWU6IHJlcS5zZXJ2ZXJPcHRpb25zLmRldmljZU5hbWUsXG4gICAgICAgICAgICBwb3dlcmVkQnk6IHJlcS5zZXJ2ZXJPcHRpb25zLnBvd2VyZWRCeSB8fCAnV1BQQ29ubmVjdC1TZXJ2ZXInLFxuICAgICAgICAgICAgY2F0Y2hRUjogKFxuICAgICAgICAgICAgICBiYXNlNjRRcjogYW55LFxuICAgICAgICAgICAgICBhc2NpaVFSOiBhbnksXG4gICAgICAgICAgICAgIGF0dGVtcHQ6IGFueSxcbiAgICAgICAgICAgICAgdXJsQ29kZTogc3RyaW5nXG4gICAgICAgICAgICApID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5leHBvcnRRUihyZXEsIGJhc2U2NFFyLCB1cmxDb2RlLCBjbGllbnQsIHJlcyk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgb25Mb2FkaW5nU2NyZWVuOiAocGVyY2VudDogc3RyaW5nLCBtZXNzYWdlOiBzdHJpbmcpID0+IHtcbiAgICAgICAgICAgICAgcmVxLmxvZ2dlci5pbmZvKGBbJHtzZXNzaW9ufV0gJHtwZXJjZW50fSUgLSAke21lc3NhZ2V9YCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc3RhdHVzRmluZDogKHN0YXR1c0ZpbmQ6IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGV2ZW50RW1pdHRlci5lbWl0KFxuICAgICAgICAgICAgICAgICAgYHN0YXR1cy0ke2NsaWVudC5zZXNzaW9ufWAsXG4gICAgICAgICAgICAgICAgICBjbGllbnQsXG4gICAgICAgICAgICAgICAgICBzdGF0dXNGaW5kXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICBzdGF0dXNGaW5kID09PSAnYXV0b2Nsb3NlQ2FsbGVkJyB8fFxuICAgICAgICAgICAgICAgICAgc3RhdHVzRmluZCA9PT0gJ2Rlc2Nvbm5lY3RlZE1vYmlsZSdcbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgIGNsaWVudC5zdGF0dXMgPSAnQ0xPU0VEJztcbiAgICAgICAgICAgICAgICAgIGNsaWVudC5xcmNvZGUgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgY2xpZW50LmNsb3NlKCk7XG4gICAgICAgICAgICAgICAgICBjbGllbnRzQXJyYXlbc2Vzc2lvbl0gPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhbGxXZWJIb29rKGNsaWVudCwgcmVxLCAnc3RhdHVzLWZpbmQnLCB7XG4gICAgICAgICAgICAgICAgICBzdGF0dXM6IHN0YXR1c0ZpbmQsXG4gICAgICAgICAgICAgICAgICBzZXNzaW9uOiBjbGllbnQuc2Vzc2lvbixcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICByZXEubG9nZ2VyLmluZm8oc3RhdHVzRmluZCArICdcXG5cXG4nKTtcbiAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHt9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH1cbiAgICAgICAgKVxuICAgICAgKTtcblxuICAgICAgY2xpZW50ID0gY2xpZW50c0FycmF5W3Nlc3Npb25dID0gT2JqZWN0LmFzc2lnbih3cHBDbGllbnQsIGNsaWVudCk7XG4gICAgICBhd2FpdCB0aGlzLnN0YXJ0KHJlcSwgY2xpZW50KTtcblxuICAgICAgaWYgKHJlcS5zZXJ2ZXJPcHRpb25zLndlYmhvb2sub25QYXJ0aWNpcGFudHNDaGFuZ2VkKSB7XG4gICAgICAgIGF3YWl0IHRoaXMub25QYXJ0aWNpcGFudHNDaGFuZ2VkKHJlcSwgY2xpZW50KTtcbiAgICAgIH1cblxuICAgICAgaWYgKHJlcS5zZXJ2ZXJPcHRpb25zLndlYmhvb2sub25SZWFjdGlvbk1lc3NhZ2UpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5vblJlYWN0aW9uTWVzc2FnZShjbGllbnQsIHJlcSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChyZXEuc2VydmVyT3B0aW9ucy53ZWJob29rLm9uUmV2b2tlZE1lc3NhZ2UpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5vblJldm9rZWRNZXNzYWdlKGNsaWVudCwgcmVxKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHJlcS5zZXJ2ZXJPcHRpb25zLndlYmhvb2sub25Qb2xsUmVzcG9uc2UpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5vblBvbGxSZXNwb25zZShjbGllbnQsIHJlcSk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmVxLmxvZ2dlci5lcnJvcihlKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBvcGVuZGF0YShyZXE6IFJlcXVlc3QsIHNlc3Npb246IHN0cmluZywgcmVzPzogYW55KSB7XG4gICAgYXdhaXQgdGhpcy5jcmVhdGVTZXNzaW9uVXRpbChyZXEsIGNsaWVudHNBcnJheSwgc2Vzc2lvbiwgcmVzKTtcbiAgfVxuXG4gIGV4cG9ydFFSKFxuICAgIHJlcTogYW55LFxuICAgIHFyQ29kZTogYW55LFxuICAgIHVybENvZGU6IGFueSxcbiAgICBjbGllbnQ6IFdoYXRzQXBwU2VydmVyLFxuICAgIHJlcz86IGFueVxuICApIHtcbiAgICBldmVudEVtaXR0ZXIuZW1pdChgcXJjb2RlLSR7Y2xpZW50LnNlc3Npb259YCwgcXJDb2RlLCB1cmxDb2RlLCBjbGllbnQpO1xuICAgIE9iamVjdC5hc3NpZ24oY2xpZW50LCB7XG4gICAgICBzdGF0dXM6ICdRUkNPREUnLFxuICAgICAgcXJjb2RlOiBxckNvZGUsXG4gICAgICB1cmxjb2RlOiB1cmxDb2RlLFxuICAgIH0pO1xuXG4gICAgcXJDb2RlID0gcXJDb2RlLnJlcGxhY2UoJ2RhdGE6aW1hZ2UvcG5nO2Jhc2U2NCwnLCAnJyk7XG4gICAgY29uc3QgaW1hZ2VCdWZmZXIgPSBCdWZmZXIuZnJvbShxckNvZGUsICdiYXNlNjQnKTtcblxuICAgIHJlcS5pby5lbWl0KCdxckNvZGUnLCB7XG4gICAgICBkYXRhOiAnZGF0YTppbWFnZS9wbmc7YmFzZTY0LCcgKyBpbWFnZUJ1ZmZlci50b1N0cmluZygnYmFzZTY0JyksXG4gICAgICBzZXNzaW9uOiBjbGllbnQuc2Vzc2lvbixcbiAgICB9KTtcblxuICAgIGNhbGxXZWJIb29rKGNsaWVudCwgcmVxLCAncXJjb2RlJywgeyBxcmNvZGU6IHFyQ29kZSwgdXJsY29kZTogdXJsQ29kZSB9KTtcbiAgICBpZiAocmVzICYmICFyZXMuX2hlYWRlclNlbnQpXG4gICAgICByZXNcbiAgICAgICAgLnN0YXR1cygyMDApXG4gICAgICAgIC5qc29uKHsgc3RhdHVzOiAncXJjb2RlJywgcXJjb2RlOiBxckNvZGUsIHVybGNvZGU6IHVybENvZGUgfSk7XG4gIH1cblxuICBhc3luYyBvblBhcnRpY2lwYW50c0NoYW5nZWQocmVxOiBhbnksIGNsaWVudDogYW55KSB7XG4gICAgYXdhaXQgY2xpZW50LmlzQ29ubmVjdGVkKCk7XG4gICAgYXdhaXQgY2xpZW50Lm9uUGFydGljaXBhbnRzQ2hhbmdlZCgobWVzc2FnZTogYW55KSA9PiB7XG4gICAgICBjYWxsV2ViSG9vayhjbGllbnQsIHJlcSwgJ29ucGFydGljaXBhbnRzY2hhbmdlZCcsIG1lc3NhZ2UpO1xuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgc3RhcnQocmVxOiBSZXF1ZXN0LCBjbGllbnQ6IFdoYXRzQXBwU2VydmVyKSB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGNsaWVudC5pc0Nvbm5lY3RlZCgpO1xuICAgICAgT2JqZWN0LmFzc2lnbihjbGllbnQsIHsgc3RhdHVzOiAnQ09OTkVDVEVEJywgcXJjb2RlOiBudWxsIH0pO1xuXG4gICAgICByZXEubG9nZ2VyLmluZm8oYFN0YXJ0ZWQgU2Vzc2lvbjogJHtjbGllbnQuc2Vzc2lvbn1gKTtcbiAgICAgIC8vY2FsbFdlYkhvb2soY2xpZW50LCByZXEsICdzZXNzaW9uLWxvZ2dlZCcsIHsgc3RhdHVzOiAnQ09OTkVDVEVEJ30pO1xuICAgICAgcmVxLmlvLmVtaXQoJ3Nlc3Npb24tbG9nZ2VkJywgeyBzdGF0dXM6IHRydWUsIHNlc3Npb246IGNsaWVudC5zZXNzaW9uIH0pO1xuICAgICAgc3RhcnRIZWxwZXIoY2xpZW50LCByZXEpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICByZXEubG9nZ2VyLmVycm9yKGVycm9yKTtcbiAgICAgIHJlcS5pby5lbWl0KCdzZXNzaW9uLWVycm9yJywgY2xpZW50LnNlc3Npb24pO1xuICAgIH1cblxuICAgIGF3YWl0IHRoaXMuY2hlY2tTdGF0ZVNlc3Npb24oY2xpZW50LCByZXEpO1xuICAgIGF3YWl0IHRoaXMubGlzdGVuTWVzc2FnZXMoY2xpZW50LCByZXEpO1xuXG4gICAgaWYgKHJlcS5zZXJ2ZXJPcHRpb25zLndlYmhvb2subGlzdGVuQWNrcykge1xuICAgICAgYXdhaXQgdGhpcy5saXN0ZW5BY2tzKGNsaWVudCwgcmVxKTtcbiAgICB9XG5cbiAgICBpZiAocmVxLnNlcnZlck9wdGlvbnMud2ViaG9vay5vblByZXNlbmNlQ2hhbmdlZCkge1xuICAgICAgYXdhaXQgdGhpcy5vblByZXNlbmNlQ2hhbmdlZChjbGllbnQsIHJlcSk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgY2hlY2tTdGF0ZVNlc3Npb24oY2xpZW50OiBXaGF0c0FwcFNlcnZlciwgcmVxOiBSZXF1ZXN0KSB7XG4gICAgYXdhaXQgY2xpZW50Lm9uU3RhdGVDaGFuZ2UoKHN0YXRlKSA9PiB7XG4gICAgICByZXEubG9nZ2VyLmluZm8oYFN0YXRlIENoYW5nZSAke3N0YXRlfTogJHtjbGllbnQuc2Vzc2lvbn1gKTtcbiAgICAgIGNvbnN0IGNvbmZsaXRzID0gW1NvY2tldFN0YXRlLkNPTkZMSUNUXTtcblxuICAgICAgaWYgKGNvbmZsaXRzLmluY2x1ZGVzKHN0YXRlKSkge1xuICAgICAgICBjbGllbnQudXNlSGVyZSgpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgbGlzdGVuTWVzc2FnZXMoY2xpZW50OiBXaGF0c0FwcFNlcnZlciwgcmVxOiBSZXF1ZXN0KSB7XG4gICAgYXdhaXQgY2xpZW50Lm9uTWVzc2FnZShhc3luYyAobWVzc2FnZTogYW55KSA9PiB7XG4gICAgICBldmVudEVtaXR0ZXIuZW1pdChgbWVuc2FnZW0tJHtjbGllbnQuc2Vzc2lvbn1gLCBjbGllbnQsIG1lc3NhZ2UpO1xuICAgICAgY2FsbFdlYkhvb2soY2xpZW50LCByZXEsICdvbm1lc3NhZ2UnLCBtZXNzYWdlKTtcbiAgICAgIGlmIChtZXNzYWdlLnR5cGUgPT09ICdsb2NhdGlvbicpXG4gICAgICAgIGNsaWVudC5vbkxpdmVMb2NhdGlvbihtZXNzYWdlLnNlbmRlci5pZCwgKGxvY2F0aW9uKSA9PiB7XG4gICAgICAgICAgY2FsbFdlYkhvb2soY2xpZW50LCByZXEsICdsb2NhdGlvbicsIGxvY2F0aW9uKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBhd2FpdCBjbGllbnQub25BbnlNZXNzYWdlKChtZXNzYWdlOiBhbnkpID0+IHtcbiAgICAgIG1lc3NhZ2Uuc2Vzc2lvbiA9IGNsaWVudC5zZXNzaW9uO1xuXG4gICAgICBpZiAobWVzc2FnZS50eXBlID09PSAnc3RpY2tlcicpIHtcbiAgICAgICAgZG93bmxvYWQobWVzc2FnZSwgY2xpZW50LCByZXEubG9nZ2VyKTtcbiAgICAgIH1cblxuICAgICAgcmVxLmlvLmVtaXQoJ3JlY2VpdmVkLW1lc3NhZ2UnLCB7IHJlc3BvbnNlOiBtZXNzYWdlIH0pO1xuICAgIH0pO1xuXG4gICAgYXdhaXQgY2xpZW50Lm9uSW5jb21pbmdDYWxsKGFzeW5jIChjYWxsKSA9PiB7XG4gICAgICByZXEuaW8uZW1pdCgnaW5jb21pbmdjYWxsJywgY2FsbCk7XG4gICAgICBjYWxsV2ViSG9vayhjbGllbnQsIHJlcSwgJ2luY29taW5nY2FsbCcsIGNhbGwpO1xuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgbGlzdGVuQWNrcyhjbGllbnQ6IFdoYXRzQXBwU2VydmVyLCByZXE6IFJlcXVlc3QpIHtcbiAgICBhd2FpdCBjbGllbnQub25BY2soYXN5bmMgKGFjaykgPT4ge1xuICAgICAgcmVxLmlvLmVtaXQoJ29uYWNrJywgYWNrKTtcbiAgICAgIGNhbGxXZWJIb29rKGNsaWVudCwgcmVxLCAnb25hY2snLCBhY2spO1xuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgb25QcmVzZW5jZUNoYW5nZWQoY2xpZW50OiBXaGF0c0FwcFNlcnZlciwgcmVxOiBSZXF1ZXN0KSB7XG4gICAgYXdhaXQgY2xpZW50Lm9uUHJlc2VuY2VDaGFuZ2VkKGFzeW5jIChwcmVzZW5jZUNoYW5nZWRFdmVudCkgPT4ge1xuICAgICAgcmVxLmlvLmVtaXQoJ29ucHJlc2VuY2VjaGFuZ2VkJywgcHJlc2VuY2VDaGFuZ2VkRXZlbnQpO1xuICAgICAgY2FsbFdlYkhvb2soY2xpZW50LCByZXEsICdvbnByZXNlbmNlY2hhbmdlZCcsIHByZXNlbmNlQ2hhbmdlZEV2ZW50KTtcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIG9uUmVhY3Rpb25NZXNzYWdlKGNsaWVudDogV2hhdHNBcHBTZXJ2ZXIsIHJlcTogUmVxdWVzdCkge1xuICAgIGF3YWl0IGNsaWVudC5pc0Nvbm5lY3RlZCgpO1xuICAgIGF3YWl0IGNsaWVudC5vblJlYWN0aW9uTWVzc2FnZShhc3luYyAocmVhY3Rpb246IGFueSkgPT4ge1xuICAgICAgcmVxLmlvLmVtaXQoJ29ucmVhY3Rpb25tZXNzYWdlJywgcmVhY3Rpb24pO1xuICAgICAgY2FsbFdlYkhvb2soY2xpZW50LCByZXEsICdvbnJlYWN0aW9ubWVzc2FnZScsIHJlYWN0aW9uKTtcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIG9uUmV2b2tlZE1lc3NhZ2UoY2xpZW50OiBXaGF0c0FwcFNlcnZlciwgcmVxOiBSZXF1ZXN0KSB7XG4gICAgYXdhaXQgY2xpZW50LmlzQ29ubmVjdGVkKCk7XG4gICAgYXdhaXQgY2xpZW50Lm9uUmV2b2tlZE1lc3NhZ2UoYXN5bmMgKHJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgIHJlcS5pby5lbWl0KCdvbnJldm9rZWRtZXNzYWdlJywgcmVzcG9uc2UpO1xuICAgICAgY2FsbFdlYkhvb2soY2xpZW50LCByZXEsICdvbnJldm9rZWRtZXNzYWdlJywgcmVzcG9uc2UpO1xuICAgIH0pO1xuICB9XG4gIGFzeW5jIG9uUG9sbFJlc3BvbnNlKGNsaWVudDogV2hhdHNBcHBTZXJ2ZXIsIHJlcTogUmVxdWVzdCkge1xuICAgIGF3YWl0IGNsaWVudC5pc0Nvbm5lY3RlZCgpO1xuICAgIGF3YWl0IGNsaWVudC5vblBvbGxSZXNwb25zZShhc3luYyAocmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgcmVxLmlvLmVtaXQoJ29ucG9sbHJlc3BvbnNlJywgcmVzcG9uc2UpO1xuICAgICAgY2FsbFdlYkhvb2soY2xpZW50LCByZXEsICdvbnBvbGxyZXNwb25zZScsIHJlc3BvbnNlKTtcbiAgICB9KTtcbiAgfVxuXG4gIGVuY29kZUZ1bmN0aW9uKGRhdGE6IGFueSwgd2ViaG9vazogYW55KSB7XG4gICAgZGF0YS53ZWJob29rID0gd2ViaG9vaztcbiAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoZGF0YSk7XG4gIH1cblxuICBkZWNvZGVGdW5jdGlvbih0ZXh0OiBhbnksIGNsaWVudDogYW55KSB7XG4gICAgY29uc3Qgb2JqZWN0ID0gSlNPTi5wYXJzZSh0ZXh0KTtcbiAgICBpZiAob2JqZWN0LndlYmhvb2sgJiYgIWNsaWVudC53ZWJob29rKSBjbGllbnQud2ViaG9vayA9IG9iamVjdC53ZWJob29rO1xuICAgIGRlbGV0ZSBvYmplY3Qud2ViaG9vaztcbiAgICByZXR1cm4gb2JqZWN0O1xuICB9XG5cbiAgZ2V0Q2xpZW50KHNlc3Npb246IGFueSkge1xuICAgIGxldCBjbGllbnQgPSBjbGllbnRzQXJyYXlbc2Vzc2lvbl0gYXMgYW55O1xuXG4gICAgaWYgKCFjbGllbnQpXG4gICAgICBjbGllbnQgPSAoY2xpZW50c0FycmF5IGFzIGFueSlbc2Vzc2lvbl0gPSB7XG4gICAgICAgIHN0YXR1czogbnVsbCxcbiAgICAgICAgc2Vzc2lvbjogc2Vzc2lvbixcbiAgICAgIH07XG4gICAgcmV0dXJuIGNsaWVudDtcbiAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7QUFlQSxJQUFBQSxXQUFBLEdBQUFDLE9BQUE7O0FBRUEsSUFBQUMsa0JBQUEsR0FBQUQsT0FBQTs7O0FBR0EsSUFBQUUsZUFBQSxHQUFBQyxzQkFBQSxDQUFBSCxPQUFBO0FBQ0EsSUFBQUksVUFBQSxHQUFBSixPQUFBO0FBQ0EsSUFBQUssWUFBQSxHQUFBTCxPQUFBO0FBQ0EsSUFBQU0sUUFBQSxHQUFBSCxzQkFBQSxDQUFBSCxPQUFBLDBCQUEyQyxDQXZCM0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBV2UsTUFBTU8saUJBQWlCLENBQUMsQ0FDckNDLG1CQUFtQkEsQ0FBQ0MsTUFBVyxFQUFFLENBQy9CLElBQUlBLE1BQU0sQ0FBQ0MsTUFBTSxDQUFDQyxRQUFRLElBQUksQ0FBQ0YsTUFBTSxDQUFDUCxlQUFlLEVBQ25ETyxNQUFNLENBQUNQLGVBQWUsR0FBRyxJQUFJVSx1QkFBYyxDQUN6Q0gsTUFBTSxDQUFDQyxNQUFNLENBQUNDLFFBQVEsRUFDdEJGLE1BQU0sQ0FBQ0ksT0FBTyxDQUNmLENBQ0gsT0FBT0osTUFBTSxDQUFDUCxlQUFlLENBQy9CLENBRUEsTUFBTVksaUJBQWlCQSxDQUNyQkMsR0FBUSxFQUNSQyxZQUFpQjtFQUNqQkgsT0FBZTtFQUNmSSxHQUFTO0VBQ1Q7SUFDQSxJQUFJO01BQ0YsSUFBSVIsTUFBTSxHQUFHLElBQUksQ0FBQ1MsU0FBUyxDQUFDTCxPQUFPLENBQVE7TUFDM0MsSUFBSUosTUFBTSxDQUFDVSxNQUFNLElBQUksSUFBSSxJQUFJVixNQUFNLENBQUNVLE1BQU0sS0FBSyxRQUFRLEVBQUU7TUFDekRWLE1BQU0sQ0FBQ1UsTUFBTSxHQUFHLGNBQWM7TUFDOUJWLE1BQU0sQ0FBQ0MsTUFBTSxHQUFHSyxHQUFHLENBQUNLLElBQUk7O01BRXhCLE1BQU1DLFVBQVUsR0FBRyxJQUFJQyxnQkFBTyxFQUFFO01BQ2hDLE1BQU1DLFlBQVksR0FBR0YsVUFBVSxDQUFDRyxnQkFBZ0IsQ0FBQ2YsTUFBTSxDQUFDO01BQ3hELE1BQU1nQixTQUFTLEdBQUcsTUFBTUYsWUFBWSxDQUFDRyxRQUFRLENBQUNiLE9BQU8sQ0FBQzs7TUFFdEQsSUFBSSxDQUFDWSxTQUFTLEVBQUU7UUFDZEYsWUFBWSxDQUFDSSxRQUFRLENBQUNkLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQztNQUNwQzs7TUFFQSxJQUFJLENBQUNMLG1CQUFtQixDQUFDQyxNQUFNLENBQUM7O01BRWhDLElBQUlNLEdBQUcsQ0FBQ2EsYUFBYSxDQUFDQyxpQkFBaUIsRUFBRTtRQUN2Q2QsR0FBRyxDQUFDYSxhQUFhLENBQUNFLGFBQWEsQ0FBQ0MsZ0JBQWdCLEdBQUc7VUFDakRDLFdBQVcsRUFBRWpCLEdBQUcsQ0FBQ2EsYUFBYSxDQUFDQyxpQkFBaUIsR0FBR2hCO1FBQ3JELENBQUM7TUFDSDs7TUFFQSxNQUFNb0IsU0FBUyxHQUFHLE1BQU0sSUFBQUMsa0JBQU07TUFDNUJDLE1BQU0sQ0FBQ0MsTUFBTTtNQUNYLENBQUMsQ0FBQztNQUNGLEVBQUVmLFVBQVUsRUFBRUUsWUFBWSxDQUFDLENBQUM7TUFDNUJSLEdBQUcsQ0FBQ2EsYUFBYSxDQUFDRSxhQUFhO01BQy9CO1FBQ0VqQixPQUFPLEVBQUVBLE9BQU87UUFDaEJ3QixVQUFVLEVBQUV0QixHQUFHLENBQUNhLGFBQWEsQ0FBQ1MsVUFBVTtRQUN4Q0MsU0FBUyxFQUFFdkIsR0FBRyxDQUFDYSxhQUFhLENBQUNVLFNBQVMsSUFBSSxtQkFBbUI7UUFDN0RDLE9BQU8sRUFBRUE7UUFDUEMsUUFBYTtRQUNiQyxPQUFZO1FBQ1pDLE9BQVk7UUFDWkMsT0FBZTtRQUNaO1VBQ0gsSUFBSSxDQUFDQyxRQUFRLENBQUM3QixHQUFHLEVBQUV5QixRQUFRLEVBQUVHLE9BQU8sRUFBRWxDLE1BQU0sRUFBRVEsR0FBRyxDQUFDO1FBQ3BELENBQUM7UUFDRDRCLGVBQWUsRUFBRUEsQ0FBQ0MsT0FBZSxFQUFFQyxPQUFlLEtBQUs7VUFDckRoQyxHQUFHLENBQUNpQyxNQUFNLENBQUNDLElBQUksQ0FBRSxJQUFHcEMsT0FBUSxLQUFJaUMsT0FBUSxPQUFNQyxPQUFRLEVBQUMsQ0FBQztRQUMxRCxDQUFDO1FBQ0RHLFVBQVUsRUFBRUEsQ0FBQ0EsVUFBa0IsS0FBSztVQUNsQyxJQUFJO1lBQ0ZDLHlCQUFZLENBQUNDLElBQUk7WUFDZCxVQUFTM0MsTUFBTSxDQUFDSSxPQUFRLEVBQUM7WUFDMUJKLE1BQU07WUFDTnlDLFVBQVUsQ0FDWDs7WUFDRDtZQUNFQSxVQUFVLEtBQUssaUJBQWlCO1lBQ2hDQSxVQUFVLEtBQUssb0JBQW9CO1lBQ25DO2NBQ0F6QyxNQUFNLENBQUNVLE1BQU0sR0FBRyxRQUFRO2NBQ3hCVixNQUFNLENBQUM0QyxNQUFNLEdBQUcsSUFBSTtjQUNwQjVDLE1BQU0sQ0FBQzZDLEtBQUssRUFBRTtjQUNkdEMsWUFBWSxDQUFDSCxPQUFPLENBQUMsR0FBRzBDLFNBQVM7WUFDbkM7WUFDQSxJQUFBQyxzQkFBVyxFQUFDL0MsTUFBTSxFQUFFTSxHQUFHLEVBQUUsYUFBYSxFQUFFO2NBQ3RDSSxNQUFNLEVBQUUrQixVQUFVO2NBQ2xCckMsT0FBTyxFQUFFSixNQUFNLENBQUNJO1lBQ2xCLENBQUMsQ0FBQztZQUNGRSxHQUFHLENBQUNpQyxNQUFNLENBQUNDLElBQUksQ0FBQ0MsVUFBVSxHQUFHLE1BQU0sQ0FBQztVQUN0QyxDQUFDLENBQUMsT0FBT08sS0FBSyxFQUFFLENBQUM7UUFDbkI7TUFDRixDQUFDLENBQ0YsQ0FDRjs7OztNQUVEaEQsTUFBTSxHQUFHTyxZQUFZLENBQUNILE9BQU8sQ0FBQyxHQUFHc0IsTUFBTSxDQUFDQyxNQUFNLENBQUNILFNBQVMsRUFBRXhCLE1BQU0sQ0FBQztNQUNqRSxNQUFNLElBQUksQ0FBQ2lELEtBQUssQ0FBQzNDLEdBQUcsRUFBRU4sTUFBTSxDQUFDOztNQUU3QixJQUFJTSxHQUFHLENBQUNhLGFBQWEsQ0FBQytCLE9BQU8sQ0FBQ0MscUJBQXFCLEVBQUU7UUFDbkQsTUFBTSxJQUFJLENBQUNBLHFCQUFxQixDQUFDN0MsR0FBRyxFQUFFTixNQUFNLENBQUM7TUFDL0M7O01BRUEsSUFBSU0sR0FBRyxDQUFDYSxhQUFhLENBQUMrQixPQUFPLENBQUNFLGlCQUFpQixFQUFFO1FBQy9DLE1BQU0sSUFBSSxDQUFDQSxpQkFBaUIsQ0FBQ3BELE1BQU0sRUFBRU0sR0FBRyxDQUFDO01BQzNDOztNQUVBLElBQUlBLEdBQUcsQ0FBQ2EsYUFBYSxDQUFDK0IsT0FBTyxDQUFDRyxnQkFBZ0IsRUFBRTtRQUM5QyxNQUFNLElBQUksQ0FBQ0EsZ0JBQWdCLENBQUNyRCxNQUFNLEVBQUVNLEdBQUcsQ0FBQztNQUMxQzs7TUFFQSxJQUFJQSxHQUFHLENBQUNhLGFBQWEsQ0FBQytCLE9BQU8sQ0FBQ0ksY0FBYyxFQUFFO1FBQzVDLE1BQU0sSUFBSSxDQUFDQSxjQUFjLENBQUN0RCxNQUFNLEVBQUVNLEdBQUcsQ0FBQztNQUN4QztJQUNGLENBQUMsQ0FBQyxPQUFPaUQsQ0FBQyxFQUFFO01BQ1ZqRCxHQUFHLENBQUNpQyxNQUFNLENBQUNTLEtBQUssQ0FBQ08sQ0FBQyxDQUFDO0lBQ3JCO0VBQ0Y7O0VBRUEsTUFBTUMsUUFBUUEsQ0FBQ2xELEdBQVksRUFBRUYsT0FBZSxFQUFFSSxHQUFTLEVBQUU7SUFDdkQsTUFBTSxJQUFJLENBQUNILGlCQUFpQixDQUFDQyxHQUFHLEVBQUVDLHlCQUFZLEVBQUVILE9BQU8sRUFBRUksR0FBRyxDQUFDO0VBQy9EOztFQUVBMkIsUUFBUUE7RUFDTjdCLEdBQVE7RUFDUm1ELE1BQVc7RUFDWHZCLE9BQVk7RUFDWmxDLE1BQXNCO0VBQ3RCUSxHQUFTO0VBQ1Q7SUFDQWtDLHlCQUFZLENBQUNDLElBQUksQ0FBRSxVQUFTM0MsTUFBTSxDQUFDSSxPQUFRLEVBQUMsRUFBRXFELE1BQU0sRUFBRXZCLE9BQU8sRUFBRWxDLE1BQU0sQ0FBQztJQUN0RTBCLE1BQU0sQ0FBQ0MsTUFBTSxDQUFDM0IsTUFBTSxFQUFFO01BQ3BCVSxNQUFNLEVBQUUsUUFBUTtNQUNoQmtDLE1BQU0sRUFBRWEsTUFBTTtNQUNkQyxPQUFPLEVBQUV4QjtJQUNYLENBQUMsQ0FBQzs7SUFFRnVCLE1BQU0sR0FBR0EsTUFBTSxDQUFDRSxPQUFPLENBQUMsd0JBQXdCLEVBQUUsRUFBRSxDQUFDO0lBQ3JELE1BQU1DLFdBQVcsR0FBR0MsTUFBTSxDQUFDQyxJQUFJLENBQUNMLE1BQU0sRUFBRSxRQUFRLENBQUM7O0lBRWpEbkQsR0FBRyxDQUFDeUQsRUFBRSxDQUFDcEIsSUFBSSxDQUFDLFFBQVEsRUFBRTtNQUNwQnFCLElBQUksRUFBRSx3QkFBd0IsR0FBR0osV0FBVyxDQUFDSyxRQUFRLENBQUMsUUFBUSxDQUFDO01BQy9EN0QsT0FBTyxFQUFFSixNQUFNLENBQUNJO0lBQ2xCLENBQUMsQ0FBQzs7SUFFRixJQUFBMkMsc0JBQVcsRUFBQy9DLE1BQU0sRUFBRU0sR0FBRyxFQUFFLFFBQVEsRUFBRSxFQUFFc0MsTUFBTSxFQUFFYSxNQUFNLEVBQUVDLE9BQU8sRUFBRXhCLE9BQU8sQ0FBQyxDQUFDLENBQUM7SUFDeEUsSUFBSTFCLEdBQUcsSUFBSSxDQUFDQSxHQUFHLENBQUMwRCxXQUFXO0lBQ3pCMUQsR0FBRztJQUNBRSxNQUFNLENBQUMsR0FBRyxDQUFDO0lBQ1h5RCxJQUFJLENBQUMsRUFBRXpELE1BQU0sRUFBRSxRQUFRLEVBQUVrQyxNQUFNLEVBQUVhLE1BQU0sRUFBRUMsT0FBTyxFQUFFeEIsT0FBTyxDQUFDLENBQUMsQ0FBQztFQUNuRTs7RUFFQSxNQUFNaUIscUJBQXFCQSxDQUFDN0MsR0FBUSxFQUFFTixNQUFXLEVBQUU7SUFDakQsTUFBTUEsTUFBTSxDQUFDb0UsV0FBVyxFQUFFO0lBQzFCLE1BQU1wRSxNQUFNLENBQUNtRCxxQkFBcUIsQ0FBQyxDQUFDYixPQUFZLEtBQUs7TUFDbkQsSUFBQVMsc0JBQVcsRUFBQy9DLE1BQU0sRUFBRU0sR0FBRyxFQUFFLHVCQUF1QixFQUFFZ0MsT0FBTyxDQUFDO0lBQzVELENBQUMsQ0FBQztFQUNKOztFQUVBLE1BQU1XLEtBQUtBLENBQUMzQyxHQUFZLEVBQUVOLE1BQXNCLEVBQUU7SUFDaEQsSUFBSTtNQUNGLE1BQU1BLE1BQU0sQ0FBQ29FLFdBQVcsRUFBRTtNQUMxQjFDLE1BQU0sQ0FBQ0MsTUFBTSxDQUFDM0IsTUFBTSxFQUFFLEVBQUVVLE1BQU0sRUFBRSxXQUFXLEVBQUVrQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQzs7TUFFNUR0QyxHQUFHLENBQUNpQyxNQUFNLENBQUNDLElBQUksQ0FBRSxvQkFBbUJ4QyxNQUFNLENBQUNJLE9BQVEsRUFBQyxDQUFDO01BQ3JEO01BQ0FFLEdBQUcsQ0FBQ3lELEVBQUUsQ0FBQ3BCLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxFQUFFakMsTUFBTSxFQUFFLElBQUksRUFBRU4sT0FBTyxFQUFFSixNQUFNLENBQUNJLE9BQU8sQ0FBQyxDQUFDLENBQUM7TUFDeEUsSUFBQWlFLHNCQUFXLEVBQUNyRSxNQUFNLEVBQUVNLEdBQUcsQ0FBQztJQUMxQixDQUFDLENBQUMsT0FBTzBDLEtBQUssRUFBRTtNQUNkMUMsR0FBRyxDQUFDaUMsTUFBTSxDQUFDUyxLQUFLLENBQUNBLEtBQUssQ0FBQztNQUN2QjFDLEdBQUcsQ0FBQ3lELEVBQUUsQ0FBQ3BCLElBQUksQ0FBQyxlQUFlLEVBQUUzQyxNQUFNLENBQUNJLE9BQU8sQ0FBQztJQUM5Qzs7SUFFQSxNQUFNLElBQUksQ0FBQ2tFLGlCQUFpQixDQUFDdEUsTUFBTSxFQUFFTSxHQUFHLENBQUM7SUFDekMsTUFBTSxJQUFJLENBQUNpRSxjQUFjLENBQUN2RSxNQUFNLEVBQUVNLEdBQUcsQ0FBQzs7SUFFdEMsSUFBSUEsR0FBRyxDQUFDYSxhQUFhLENBQUMrQixPQUFPLENBQUNzQixVQUFVLEVBQUU7TUFDeEMsTUFBTSxJQUFJLENBQUNBLFVBQVUsQ0FBQ3hFLE1BQU0sRUFBRU0sR0FBRyxDQUFDO0lBQ3BDOztJQUVBLElBQUlBLEdBQUcsQ0FBQ2EsYUFBYSxDQUFDK0IsT0FBTyxDQUFDdUIsaUJBQWlCLEVBQUU7TUFDL0MsTUFBTSxJQUFJLENBQUNBLGlCQUFpQixDQUFDekUsTUFBTSxFQUFFTSxHQUFHLENBQUM7SUFDM0M7RUFDRjs7RUFFQSxNQUFNZ0UsaUJBQWlCQSxDQUFDdEUsTUFBc0IsRUFBRU0sR0FBWSxFQUFFO0lBQzVELE1BQU1OLE1BQU0sQ0FBQzBFLGFBQWEsQ0FBQyxDQUFDQyxLQUFLLEtBQUs7TUFDcENyRSxHQUFHLENBQUNpQyxNQUFNLENBQUNDLElBQUksQ0FBRSxnQkFBZW1DLEtBQU0sS0FBSTNFLE1BQU0sQ0FBQ0ksT0FBUSxFQUFDLENBQUM7TUFDM0QsTUFBTXdFLFFBQVEsR0FBRyxDQUFDQyx1QkFBVyxDQUFDQyxRQUFRLENBQUM7O01BRXZDLElBQUlGLFFBQVEsQ0FBQ0csUUFBUSxDQUFDSixLQUFLLENBQUMsRUFBRTtRQUM1QjNFLE1BQU0sQ0FBQ2dGLE9BQU8sRUFBRTtNQUNsQjtJQUNGLENBQUMsQ0FBQztFQUNKOztFQUVBLE1BQU1ULGNBQWNBLENBQUN2RSxNQUFzQixFQUFFTSxHQUFZLEVBQUU7SUFDekQsTUFBTU4sTUFBTSxDQUFDaUYsU0FBUyxDQUFDLE9BQU8zQyxPQUFZLEtBQUs7TUFDN0NJLHlCQUFZLENBQUNDLElBQUksQ0FBRSxZQUFXM0MsTUFBTSxDQUFDSSxPQUFRLEVBQUMsRUFBRUosTUFBTSxFQUFFc0MsT0FBTyxDQUFDO01BQ2hFLElBQUFTLHNCQUFXLEVBQUMvQyxNQUFNLEVBQUVNLEdBQUcsRUFBRSxXQUFXLEVBQUVnQyxPQUFPLENBQUM7TUFDOUMsSUFBSUEsT0FBTyxDQUFDNEMsSUFBSSxLQUFLLFVBQVU7TUFDN0JsRixNQUFNLENBQUNtRixjQUFjLENBQUM3QyxPQUFPLENBQUM4QyxNQUFNLENBQUNDLEVBQUUsRUFBRSxDQUFDQyxRQUFRLEtBQUs7UUFDckQsSUFBQXZDLHNCQUFXLEVBQUMvQyxNQUFNLEVBQUVNLEdBQUcsRUFBRSxVQUFVLEVBQUVnRixRQUFRLENBQUM7TUFDaEQsQ0FBQyxDQUFDO0lBQ04sQ0FBQyxDQUFDOztJQUVGLE1BQU10RixNQUFNLENBQUN1RixZQUFZLENBQUMsQ0FBQ2pELE9BQVksS0FBSztNQUMxQ0EsT0FBTyxDQUFDbEMsT0FBTyxHQUFHSixNQUFNLENBQUNJLE9BQU87O01BRWhDLElBQUlrQyxPQUFPLENBQUM0QyxJQUFJLEtBQUssU0FBUyxFQUFFO1FBQzlCLElBQUFNLDJCQUFRLEVBQUNsRCxPQUFPLEVBQUV0QyxNQUFNLEVBQUVNLEdBQUcsQ0FBQ2lDLE1BQU0sQ0FBQztNQUN2Qzs7TUFFQWpDLEdBQUcsQ0FBQ3lELEVBQUUsQ0FBQ3BCLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxFQUFFOEMsUUFBUSxFQUFFbkQsT0FBTyxDQUFDLENBQUMsQ0FBQztJQUN4RCxDQUFDLENBQUM7O0lBRUYsTUFBTXRDLE1BQU0sQ0FBQzBGLGNBQWMsQ0FBQyxPQUFPQyxJQUFJLEtBQUs7TUFDMUNyRixHQUFHLENBQUN5RCxFQUFFLENBQUNwQixJQUFJLENBQUMsY0FBYyxFQUFFZ0QsSUFBSSxDQUFDO01BQ2pDLElBQUE1QyxzQkFBVyxFQUFDL0MsTUFBTSxFQUFFTSxHQUFHLEVBQUUsY0FBYyxFQUFFcUYsSUFBSSxDQUFDO0lBQ2hELENBQUMsQ0FBQztFQUNKOztFQUVBLE1BQU1uQixVQUFVQSxDQUFDeEUsTUFBc0IsRUFBRU0sR0FBWSxFQUFFO0lBQ3JELE1BQU1OLE1BQU0sQ0FBQzRGLEtBQUssQ0FBQyxPQUFPQyxHQUFHLEtBQUs7TUFDaEN2RixHQUFHLENBQUN5RCxFQUFFLENBQUNwQixJQUFJLENBQUMsT0FBTyxFQUFFa0QsR0FBRyxDQUFDO01BQ3pCLElBQUE5QyxzQkFBVyxFQUFDL0MsTUFBTSxFQUFFTSxHQUFHLEVBQUUsT0FBTyxFQUFFdUYsR0FBRyxDQUFDO0lBQ3hDLENBQUMsQ0FBQztFQUNKOztFQUVBLE1BQU1wQixpQkFBaUJBLENBQUN6RSxNQUFzQixFQUFFTSxHQUFZLEVBQUU7SUFDNUQsTUFBTU4sTUFBTSxDQUFDeUUsaUJBQWlCLENBQUMsT0FBT3FCLG9CQUFvQixLQUFLO01BQzdEeEYsR0FBRyxDQUFDeUQsRUFBRSxDQUFDcEIsSUFBSSxDQUFDLG1CQUFtQixFQUFFbUQsb0JBQW9CLENBQUM7TUFDdEQsSUFBQS9DLHNCQUFXLEVBQUMvQyxNQUFNLEVBQUVNLEdBQUcsRUFBRSxtQkFBbUIsRUFBRXdGLG9CQUFvQixDQUFDO0lBQ3JFLENBQUMsQ0FBQztFQUNKOztFQUVBLE1BQU0xQyxpQkFBaUJBLENBQUNwRCxNQUFzQixFQUFFTSxHQUFZLEVBQUU7SUFDNUQsTUFBTU4sTUFBTSxDQUFDb0UsV0FBVyxFQUFFO0lBQzFCLE1BQU1wRSxNQUFNLENBQUNvRCxpQkFBaUIsQ0FBQyxPQUFPMkMsUUFBYSxLQUFLO01BQ3REekYsR0FBRyxDQUFDeUQsRUFBRSxDQUFDcEIsSUFBSSxDQUFDLG1CQUFtQixFQUFFb0QsUUFBUSxDQUFDO01BQzFDLElBQUFoRCxzQkFBVyxFQUFDL0MsTUFBTSxFQUFFTSxHQUFHLEVBQUUsbUJBQW1CLEVBQUV5RixRQUFRLENBQUM7SUFDekQsQ0FBQyxDQUFDO0VBQ0o7O0VBRUEsTUFBTTFDLGdCQUFnQkEsQ0FBQ3JELE1BQXNCLEVBQUVNLEdBQVksRUFBRTtJQUMzRCxNQUFNTixNQUFNLENBQUNvRSxXQUFXLEVBQUU7SUFDMUIsTUFBTXBFLE1BQU0sQ0FBQ3FELGdCQUFnQixDQUFDLE9BQU9vQyxRQUFhLEtBQUs7TUFDckRuRixHQUFHLENBQUN5RCxFQUFFLENBQUNwQixJQUFJLENBQUMsa0JBQWtCLEVBQUU4QyxRQUFRLENBQUM7TUFDekMsSUFBQTFDLHNCQUFXLEVBQUMvQyxNQUFNLEVBQUVNLEdBQUcsRUFBRSxrQkFBa0IsRUFBRW1GLFFBQVEsQ0FBQztJQUN4RCxDQUFDLENBQUM7RUFDSjtFQUNBLE1BQU1uQyxjQUFjQSxDQUFDdEQsTUFBc0IsRUFBRU0sR0FBWSxFQUFFO0lBQ3pELE1BQU1OLE1BQU0sQ0FBQ29FLFdBQVcsRUFBRTtJQUMxQixNQUFNcEUsTUFBTSxDQUFDc0QsY0FBYyxDQUFDLE9BQU9tQyxRQUFhLEtBQUs7TUFDbkRuRixHQUFHLENBQUN5RCxFQUFFLENBQUNwQixJQUFJLENBQUMsZ0JBQWdCLEVBQUU4QyxRQUFRLENBQUM7TUFDdkMsSUFBQTFDLHNCQUFXLEVBQUMvQyxNQUFNLEVBQUVNLEdBQUcsRUFBRSxnQkFBZ0IsRUFBRW1GLFFBQVEsQ0FBQztJQUN0RCxDQUFDLENBQUM7RUFDSjs7RUFFQU8sY0FBY0EsQ0FBQ2hDLElBQVMsRUFBRWQsT0FBWSxFQUFFO0lBQ3RDYyxJQUFJLENBQUNkLE9BQU8sR0FBR0EsT0FBTztJQUN0QixPQUFPK0MsSUFBSSxDQUFDQyxTQUFTLENBQUNsQyxJQUFJLENBQUM7RUFDN0I7O0VBRUFtQyxjQUFjQSxDQUFDQyxJQUFTLEVBQUVwRyxNQUFXLEVBQUU7SUFDckMsTUFBTXFHLE1BQU0sR0FBR0osSUFBSSxDQUFDSyxLQUFLLENBQUNGLElBQUksQ0FBQztJQUMvQixJQUFJQyxNQUFNLENBQUNuRCxPQUFPLElBQUksQ0FBQ2xELE1BQU0sQ0FBQ2tELE9BQU8sRUFBRWxELE1BQU0sQ0FBQ2tELE9BQU8sR0FBR21ELE1BQU0sQ0FBQ25ELE9BQU87SUFDdEUsT0FBT21ELE1BQU0sQ0FBQ25ELE9BQU87SUFDckIsT0FBT21ELE1BQU07RUFDZjs7RUFFQTVGLFNBQVNBLENBQUNMLE9BQVksRUFBRTtJQUN0QixJQUFJSixNQUFNLEdBQUdPLHlCQUFZLENBQUNILE9BQU8sQ0FBUTs7SUFFekMsSUFBSSxDQUFDSixNQUFNO0lBQ1RBLE1BQU0sR0FBSU8seUJBQVksQ0FBU0gsT0FBTyxDQUFDLEdBQUc7TUFDeENNLE1BQU0sRUFBRSxJQUFJO01BQ1pOLE9BQU8sRUFBRUE7SUFDWCxDQUFDO0lBQ0gsT0FBT0osTUFBTTtFQUNmO0FBQ0YsQ0FBQ3VHLE9BQUEsQ0FBQUMsT0FBQSxHQUFBMUcsaUJBQUEifQ==
307
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfd3BwY29ubmVjdCIsInJlcXVpcmUiLCJfc2Vzc2lvbkNvbnRyb2xsZXIiLCJfY2hhdFdvb3RDbGllbnQiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwiX2Z1bmN0aW9ucyIsIl9zZXNzaW9uVXRpbCIsIl9mYWN0b3J5IiwiQ3JlYXRlU2Vzc2lvblV0aWwiLCJzdGFydENoYXRXb290Q2xpZW50IiwiY2xpZW50IiwiY29uZmlnIiwiY2hhdFdvb3QiLCJjaGF0V29vdENsaWVudCIsInNlc3Npb24iLCJjcmVhdGVTZXNzaW9uVXRpbCIsInJlcSIsImNsaWVudHNBcnJheSIsInJlcyIsImdldENsaWVudCIsInN0YXR1cyIsImJvZHkiLCJ0b2tlblN0b3JlIiwiRmFjdG9yeSIsIm15VG9rZW5TdG9yZSIsImNyZWF0ZVRva2VuU3RvcnkiLCJ0b2tlbkRhdGEiLCJnZXRUb2tlbiIsInNldFRva2VuIiwic2VydmVyT3B0aW9ucyIsImN1c3RvbVVzZXJEYXRhRGlyIiwiY3JlYXRlT3B0aW9ucyIsInB1cHBldGVlck9wdGlvbnMiLCJ1c2VyRGF0YURpciIsIndwcENsaWVudCIsImNyZWF0ZSIsIk9iamVjdCIsImFzc2lnbiIsImRldmljZU5hbWUiLCJwb3dlcmVkQnkiLCJjYXRjaFFSIiwiYmFzZTY0UXIiLCJhc2NpaVFSIiwiYXR0ZW1wdCIsInVybENvZGUiLCJleHBvcnRRUiIsIm9uTG9hZGluZ1NjcmVlbiIsInBlcmNlbnQiLCJtZXNzYWdlIiwibG9nZ2VyIiwiaW5mbyIsInN0YXR1c0ZpbmQiLCJldmVudEVtaXR0ZXIiLCJlbWl0IiwicXJjb2RlIiwiY2xvc2UiLCJ1bmRlZmluZWQiLCJjYWxsV2ViSG9vayIsImVycm9yIiwic3RhcnQiLCJ3ZWJob29rIiwib25QYXJ0aWNpcGFudHNDaGFuZ2VkIiwib25SZWFjdGlvbk1lc3NhZ2UiLCJvblJldm9rZWRNZXNzYWdlIiwib25Qb2xsUmVzcG9uc2UiLCJvbkxhYmVsVXBkYXRlZCIsImUiLCJvcGVuZGF0YSIsInFyQ29kZSIsInVybGNvZGUiLCJyZXBsYWNlIiwiaW1hZ2VCdWZmZXIiLCJCdWZmZXIiLCJmcm9tIiwiaW8iLCJkYXRhIiwidG9TdHJpbmciLCJfaGVhZGVyU2VudCIsImpzb24iLCJpc0Nvbm5lY3RlZCIsInN0YXJ0SGVscGVyIiwiY2hlY2tTdGF0ZVNlc3Npb24iLCJsaXN0ZW5NZXNzYWdlcyIsImxpc3RlbkFja3MiLCJvblByZXNlbmNlQ2hhbmdlZCIsIm9uU3RhdGVDaGFuZ2UiLCJzdGF0ZSIsImNvbmZsaXRzIiwiU29ja2V0U3RhdGUiLCJDT05GTElDVCIsImluY2x1ZGVzIiwidXNlSGVyZSIsIm9uTWVzc2FnZSIsInR5cGUiLCJvbkxpdmVMb2NhdGlvbiIsInNlbmRlciIsImlkIiwibG9jYXRpb24iLCJvbkFueU1lc3NhZ2UiLCJkb3dubG9hZCIsInJlc3BvbnNlIiwib25JbmNvbWluZ0NhbGwiLCJjYWxsIiwib25BY2siLCJhY2siLCJwcmVzZW5jZUNoYW5nZWRFdmVudCIsInJlYWN0aW9uIiwib25VcGRhdGVMYWJlbCIsImVuY29kZUZ1bmN0aW9uIiwiSlNPTiIsInN0cmluZ2lmeSIsImRlY29kZUZ1bmN0aW9uIiwidGV4dCIsIm9iamVjdCIsInBhcnNlIiwiZXhwb3J0cyIsImRlZmF1bHQiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbC9jcmVhdGVTZXNzaW9uVXRpbC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogQ29weXJpZ2h0IDIwMjEgV1BQQ29ubmVjdCBUZWFtXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5pbXBvcnQgeyBjcmVhdGUsIFNvY2tldFN0YXRlIH0gZnJvbSAnQHdwcGNvbm5lY3QtdGVhbS93cHBjb25uZWN0JztcbmltcG9ydCB7IFJlcXVlc3QgfSBmcm9tICdleHByZXNzJztcblxuaW1wb3J0IHsgZG93bmxvYWQgfSBmcm9tICcuLi9jb250cm9sbGVyL3Nlc3Npb25Db250cm9sbGVyJztcbmltcG9ydCB7IFdoYXRzQXBwU2VydmVyIH0gZnJvbSAnLi4vdHlwZXMvV2hhdHNBcHBTZXJ2ZXInO1xuaW1wb3J0IGNoYXRXb290Q2xpZW50IGZyb20gJy4vY2hhdFdvb3RDbGllbnQnO1xuaW1wb3J0IHsgY2FsbFdlYkhvb2ssIHN0YXJ0SGVscGVyIH0gZnJvbSAnLi9mdW5jdGlvbnMnO1xuaW1wb3J0IHsgY2xpZW50c0FycmF5LCBldmVudEVtaXR0ZXIgfSBmcm9tICcuL3Nlc3Npb25VdGlsJztcbmltcG9ydCBGYWN0b3J5IGZyb20gJy4vdG9rZW5TdG9yZS9mYWN0b3J5JztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ3JlYXRlU2Vzc2lvblV0aWwge1xuICBzdGFydENoYXRXb290Q2xpZW50KGNsaWVudDogYW55KSB7XG4gICAgaWYgKGNsaWVudC5jb25maWcuY2hhdFdvb3QgJiYgIWNsaWVudC5fY2hhdFdvb3RDbGllbnQpXG4gICAgICBjbGllbnQuX2NoYXRXb290Q2xpZW50ID0gbmV3IGNoYXRXb290Q2xpZW50KFxuICAgICAgICBjbGllbnQuY29uZmlnLmNoYXRXb290LFxuICAgICAgICBjbGllbnQuc2Vzc2lvblxuICAgICAgKTtcbiAgICByZXR1cm4gY2xpZW50Ll9jaGF0V29vdENsaWVudDtcbiAgfVxuXG4gIGFzeW5jIGNyZWF0ZVNlc3Npb25VdGlsKFxuICAgIHJlcTogYW55LFxuICAgIGNsaWVudHNBcnJheTogYW55LFxuICAgIHNlc3Npb246IHN0cmluZyxcbiAgICByZXM/OiBhbnlcbiAgKSB7XG4gICAgdHJ5IHtcbiAgICAgIGxldCBjbGllbnQgPSB0aGlzLmdldENsaWVudChzZXNzaW9uKSBhcyBhbnk7XG4gICAgICBpZiAoY2xpZW50LnN0YXR1cyAhPSBudWxsICYmIGNsaWVudC5zdGF0dXMgIT09ICdDTE9TRUQnKSByZXR1cm47XG4gICAgICBjbGllbnQuc3RhdHVzID0gJ0lOSVRJQUxJWklORyc7XG4gICAgICBjbGllbnQuY29uZmlnID0gcmVxLmJvZHk7XG5cbiAgICAgIGNvbnN0IHRva2VuU3RvcmUgPSBuZXcgRmFjdG9yeSgpO1xuICAgICAgY29uc3QgbXlUb2tlblN0b3JlID0gdG9rZW5TdG9yZS5jcmVhdGVUb2tlblN0b3J5KGNsaWVudCk7XG4gICAgICBjb25zdCB0b2tlbkRhdGEgPSBhd2FpdCBteVRva2VuU3RvcmUuZ2V0VG9rZW4oc2Vzc2lvbik7XG5cbiAgICAgIGlmICghdG9rZW5EYXRhKSB7XG4gICAgICAgIG15VG9rZW5TdG9yZS5zZXRUb2tlbihzZXNzaW9uLCB7fSk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuc3RhcnRDaGF0V29vdENsaWVudChjbGllbnQpO1xuXG4gICAgICBpZiAocmVxLnNlcnZlck9wdGlvbnMuY3VzdG9tVXNlckRhdGFEaXIpIHtcbiAgICAgICAgcmVxLnNlcnZlck9wdGlvbnMuY3JlYXRlT3B0aW9ucy5wdXBwZXRlZXJPcHRpb25zID0ge1xuICAgICAgICAgIHVzZXJEYXRhRGlyOiByZXEuc2VydmVyT3B0aW9ucy5jdXN0b21Vc2VyRGF0YURpciArIHNlc3Npb24sXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHdwcENsaWVudCA9IGF3YWl0IGNyZWF0ZShcbiAgICAgICAgT2JqZWN0LmFzc2lnbihcbiAgICAgICAgICB7fSxcbiAgICAgICAgICB7IHRva2VuU3RvcmU6IG15VG9rZW5TdG9yZSB9LFxuICAgICAgICAgIHJlcS5zZXJ2ZXJPcHRpb25zLmNyZWF0ZU9wdGlvbnMsXG4gICAgICAgICAge1xuICAgICAgICAgICAgc2Vzc2lvbjogc2Vzc2lvbixcbiAgICAgICAgICAgIGRldmljZU5hbWU6IHJlcS5zZXJ2ZXJPcHRpb25zLmRldmljZU5hbWUsXG4gICAgICAgICAgICBwb3dlcmVkQnk6IHJlcS5zZXJ2ZXJPcHRpb25zLnBvd2VyZWRCeSB8fCAnV1BQQ29ubmVjdC1TZXJ2ZXInLFxuICAgICAgICAgICAgY2F0Y2hRUjogKFxuICAgICAgICAgICAgICBiYXNlNjRRcjogYW55LFxuICAgICAgICAgICAgICBhc2NpaVFSOiBhbnksXG4gICAgICAgICAgICAgIGF0dGVtcHQ6IGFueSxcbiAgICAgICAgICAgICAgdXJsQ29kZTogc3RyaW5nXG4gICAgICAgICAgICApID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5leHBvcnRRUihyZXEsIGJhc2U2NFFyLCB1cmxDb2RlLCBjbGllbnQsIHJlcyk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgb25Mb2FkaW5nU2NyZWVuOiAocGVyY2VudDogc3RyaW5nLCBtZXNzYWdlOiBzdHJpbmcpID0+IHtcbiAgICAgICAgICAgICAgcmVxLmxvZ2dlci5pbmZvKGBbJHtzZXNzaW9ufV0gJHtwZXJjZW50fSUgLSAke21lc3NhZ2V9YCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc3RhdHVzRmluZDogKHN0YXR1c0ZpbmQ6IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGV2ZW50RW1pdHRlci5lbWl0KFxuICAgICAgICAgICAgICAgICAgYHN0YXR1cy0ke2NsaWVudC5zZXNzaW9ufWAsXG4gICAgICAgICAgICAgICAgICBjbGllbnQsXG4gICAgICAgICAgICAgICAgICBzdGF0dXNGaW5kXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICBzdGF0dXNGaW5kID09PSAnYXV0b2Nsb3NlQ2FsbGVkJyB8fFxuICAgICAgICAgICAgICAgICAgc3RhdHVzRmluZCA9PT0gJ2Rlc2Nvbm5lY3RlZE1vYmlsZSdcbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgIGNsaWVudC5zdGF0dXMgPSAnQ0xPU0VEJztcbiAgICAgICAgICAgICAgICAgIGNsaWVudC5xcmNvZGUgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgY2xpZW50LmNsb3NlKCk7XG4gICAgICAgICAgICAgICAgICBjbGllbnRzQXJyYXlbc2Vzc2lvbl0gPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhbGxXZWJIb29rKGNsaWVudCwgcmVxLCAnc3RhdHVzLWZpbmQnLCB7XG4gICAgICAgICAgICAgICAgICBzdGF0dXM6IHN0YXR1c0ZpbmQsXG4gICAgICAgICAgICAgICAgICBzZXNzaW9uOiBjbGllbnQuc2Vzc2lvbixcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICByZXEubG9nZ2VyLmluZm8oc3RhdHVzRmluZCArICdcXG5cXG4nKTtcbiAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHt9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH1cbiAgICAgICAgKVxuICAgICAgKTtcblxuICAgICAgY2xpZW50ID0gY2xpZW50c0FycmF5W3Nlc3Npb25dID0gT2JqZWN0LmFzc2lnbih3cHBDbGllbnQsIGNsaWVudCk7XG4gICAgICBhd2FpdCB0aGlzLnN0YXJ0KHJlcSwgY2xpZW50KTtcblxuICAgICAgaWYgKHJlcS5zZXJ2ZXJPcHRpb25zLndlYmhvb2sub25QYXJ0aWNpcGFudHNDaGFuZ2VkKSB7XG4gICAgICAgIGF3YWl0IHRoaXMub25QYXJ0aWNpcGFudHNDaGFuZ2VkKHJlcSwgY2xpZW50KTtcbiAgICAgIH1cblxuICAgICAgaWYgKHJlcS5zZXJ2ZXJPcHRpb25zLndlYmhvb2sub25SZWFjdGlvbk1lc3NhZ2UpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5vblJlYWN0aW9uTWVzc2FnZShjbGllbnQsIHJlcSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChyZXEuc2VydmVyT3B0aW9ucy53ZWJob29rLm9uUmV2b2tlZE1lc3NhZ2UpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5vblJldm9rZWRNZXNzYWdlKGNsaWVudCwgcmVxKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHJlcS5zZXJ2ZXJPcHRpb25zLndlYmhvb2sub25Qb2xsUmVzcG9uc2UpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5vblBvbGxSZXNwb25zZShjbGllbnQsIHJlcSk7XG4gICAgICB9XG4gICAgICBpZiAocmVxLnNlcnZlck9wdGlvbnMud2ViaG9vay5vbkxhYmVsVXBkYXRlZCkge1xuICAgICAgICBhd2FpdCB0aGlzLm9uTGFiZWxVcGRhdGVkKGNsaWVudCwgcmVxKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZXEubG9nZ2VyLmVycm9yKGUpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIG9wZW5kYXRhKHJlcTogUmVxdWVzdCwgc2Vzc2lvbjogc3RyaW5nLCByZXM/OiBhbnkpIHtcbiAgICBhd2FpdCB0aGlzLmNyZWF0ZVNlc3Npb25VdGlsKHJlcSwgY2xpZW50c0FycmF5LCBzZXNzaW9uLCByZXMpO1xuICB9XG5cbiAgZXhwb3J0UVIoXG4gICAgcmVxOiBhbnksXG4gICAgcXJDb2RlOiBhbnksXG4gICAgdXJsQ29kZTogYW55LFxuICAgIGNsaWVudDogV2hhdHNBcHBTZXJ2ZXIsXG4gICAgcmVzPzogYW55XG4gICkge1xuICAgIGV2ZW50RW1pdHRlci5lbWl0KGBxcmNvZGUtJHtjbGllbnQuc2Vzc2lvbn1gLCBxckNvZGUsIHVybENvZGUsIGNsaWVudCk7XG4gICAgT2JqZWN0LmFzc2lnbihjbGllbnQsIHtcbiAgICAgIHN0YXR1czogJ1FSQ09ERScsXG4gICAgICBxcmNvZGU6IHFyQ29kZSxcbiAgICAgIHVybGNvZGU6IHVybENvZGUsXG4gICAgfSk7XG5cbiAgICBxckNvZGUgPSBxckNvZGUucmVwbGFjZSgnZGF0YTppbWFnZS9wbmc7YmFzZTY0LCcsICcnKTtcbiAgICBjb25zdCBpbWFnZUJ1ZmZlciA9IEJ1ZmZlci5mcm9tKHFyQ29kZSwgJ2Jhc2U2NCcpO1xuXG4gICAgcmVxLmlvLmVtaXQoJ3FyQ29kZScsIHtcbiAgICAgIGRhdGE6ICdkYXRhOmltYWdlL3BuZztiYXNlNjQsJyArIGltYWdlQnVmZmVyLnRvU3RyaW5nKCdiYXNlNjQnKSxcbiAgICAgIHNlc3Npb246IGNsaWVudC5zZXNzaW9uLFxuICAgIH0pO1xuXG4gICAgY2FsbFdlYkhvb2soY2xpZW50LCByZXEsICdxcmNvZGUnLCB7IHFyY29kZTogcXJDb2RlLCB1cmxjb2RlOiB1cmxDb2RlIH0pO1xuICAgIGlmIChyZXMgJiYgIXJlcy5faGVhZGVyU2VudClcbiAgICAgIHJlc1xuICAgICAgICAuc3RhdHVzKDIwMClcbiAgICAgICAgLmpzb24oeyBzdGF0dXM6ICdxcmNvZGUnLCBxcmNvZGU6IHFyQ29kZSwgdXJsY29kZTogdXJsQ29kZSB9KTtcbiAgfVxuXG4gIGFzeW5jIG9uUGFydGljaXBhbnRzQ2hhbmdlZChyZXE6IGFueSwgY2xpZW50OiBhbnkpIHtcbiAgICBhd2FpdCBjbGllbnQuaXNDb25uZWN0ZWQoKTtcbiAgICBhd2FpdCBjbGllbnQub25QYXJ0aWNpcGFudHNDaGFuZ2VkKChtZXNzYWdlOiBhbnkpID0+IHtcbiAgICAgIGNhbGxXZWJIb29rKGNsaWVudCwgcmVxLCAnb25wYXJ0aWNpcGFudHNjaGFuZ2VkJywgbWVzc2FnZSk7XG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBzdGFydChyZXE6IFJlcXVlc3QsIGNsaWVudDogV2hhdHNBcHBTZXJ2ZXIpIHtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgY2xpZW50LmlzQ29ubmVjdGVkKCk7XG4gICAgICBPYmplY3QuYXNzaWduKGNsaWVudCwgeyBzdGF0dXM6ICdDT05ORUNURUQnLCBxcmNvZGU6IG51bGwgfSk7XG5cbiAgICAgIHJlcS5sb2dnZXIuaW5mbyhgU3RhcnRlZCBTZXNzaW9uOiAke2NsaWVudC5zZXNzaW9ufWApO1xuICAgICAgLy9jYWxsV2ViSG9vayhjbGllbnQsIHJlcSwgJ3Nlc3Npb24tbG9nZ2VkJywgeyBzdGF0dXM6ICdDT05ORUNURUQnfSk7XG4gICAgICByZXEuaW8uZW1pdCgnc2Vzc2lvbi1sb2dnZWQnLCB7IHN0YXR1czogdHJ1ZSwgc2Vzc2lvbjogY2xpZW50LnNlc3Npb24gfSk7XG4gICAgICBzdGFydEhlbHBlcihjbGllbnQsIHJlcSk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHJlcS5sb2dnZXIuZXJyb3IoZXJyb3IpO1xuICAgICAgcmVxLmlvLmVtaXQoJ3Nlc3Npb24tZXJyb3InLCBjbGllbnQuc2Vzc2lvbik7XG4gICAgfVxuXG4gICAgYXdhaXQgdGhpcy5jaGVja1N0YXRlU2Vzc2lvbihjbGllbnQsIHJlcSk7XG4gICAgYXdhaXQgdGhpcy5saXN0ZW5NZXNzYWdlcyhjbGllbnQsIHJlcSk7XG5cbiAgICBpZiAocmVxLnNlcnZlck9wdGlvbnMud2ViaG9vay5saXN0ZW5BY2tzKSB7XG4gICAgICBhd2FpdCB0aGlzLmxpc3RlbkFja3MoY2xpZW50LCByZXEpO1xuICAgIH1cblxuICAgIGlmIChyZXEuc2VydmVyT3B0aW9ucy53ZWJob29rLm9uUHJlc2VuY2VDaGFuZ2VkKSB7XG4gICAgICBhd2FpdCB0aGlzLm9uUHJlc2VuY2VDaGFuZ2VkKGNsaWVudCwgcmVxKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBjaGVja1N0YXRlU2Vzc2lvbihjbGllbnQ6IFdoYXRzQXBwU2VydmVyLCByZXE6IFJlcXVlc3QpIHtcbiAgICBhd2FpdCBjbGllbnQub25TdGF0ZUNoYW5nZSgoc3RhdGUpID0+IHtcbiAgICAgIHJlcS5sb2dnZXIuaW5mbyhgU3RhdGUgQ2hhbmdlICR7c3RhdGV9OiAke2NsaWVudC5zZXNzaW9ufWApO1xuICAgICAgY29uc3QgY29uZmxpdHMgPSBbU29ja2V0U3RhdGUuQ09ORkxJQ1RdO1xuXG4gICAgICBpZiAoY29uZmxpdHMuaW5jbHVkZXMoc3RhdGUpKSB7XG4gICAgICAgIGNsaWVudC51c2VIZXJlKCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBsaXN0ZW5NZXNzYWdlcyhjbGllbnQ6IFdoYXRzQXBwU2VydmVyLCByZXE6IFJlcXVlc3QpIHtcbiAgICBhd2FpdCBjbGllbnQub25NZXNzYWdlKGFzeW5jIChtZXNzYWdlOiBhbnkpID0+IHtcbiAgICAgIGV2ZW50RW1pdHRlci5lbWl0KGBtZW5zYWdlbS0ke2NsaWVudC5zZXNzaW9ufWAsIGNsaWVudCwgbWVzc2FnZSk7XG4gICAgICBjYWxsV2ViSG9vayhjbGllbnQsIHJlcSwgJ29ubWVzc2FnZScsIG1lc3NhZ2UpO1xuICAgICAgaWYgKG1lc3NhZ2UudHlwZSA9PT0gJ2xvY2F0aW9uJylcbiAgICAgICAgY2xpZW50Lm9uTGl2ZUxvY2F0aW9uKG1lc3NhZ2Uuc2VuZGVyLmlkLCAobG9jYXRpb24pID0+IHtcbiAgICAgICAgICBjYWxsV2ViSG9vayhjbGllbnQsIHJlcSwgJ2xvY2F0aW9uJywgbG9jYXRpb24pO1xuICAgICAgICB9KTtcbiAgICB9KTtcblxuICAgIGF3YWl0IGNsaWVudC5vbkFueU1lc3NhZ2UoKG1lc3NhZ2U6IGFueSkgPT4ge1xuICAgICAgbWVzc2FnZS5zZXNzaW9uID0gY2xpZW50LnNlc3Npb247XG5cbiAgICAgIGlmIChtZXNzYWdlLnR5cGUgPT09ICdzdGlja2VyJykge1xuICAgICAgICBkb3dubG9hZChtZXNzYWdlLCBjbGllbnQsIHJlcS5sb2dnZXIpO1xuICAgICAgfVxuXG4gICAgICByZXEuaW8uZW1pdCgncmVjZWl2ZWQtbWVzc2FnZScsIHsgcmVzcG9uc2U6IG1lc3NhZ2UgfSk7XG4gICAgfSk7XG5cbiAgICBhd2FpdCBjbGllbnQub25JbmNvbWluZ0NhbGwoYXN5bmMgKGNhbGwpID0+IHtcbiAgICAgIHJlcS5pby5lbWl0KCdpbmNvbWluZ2NhbGwnLCBjYWxsKTtcbiAgICAgIGNhbGxXZWJIb29rKGNsaWVudCwgcmVxLCAnaW5jb21pbmdjYWxsJywgY2FsbCk7XG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBsaXN0ZW5BY2tzKGNsaWVudDogV2hhdHNBcHBTZXJ2ZXIsIHJlcTogUmVxdWVzdCkge1xuICAgIGF3YWl0IGNsaWVudC5vbkFjayhhc3luYyAoYWNrKSA9PiB7XG4gICAgICByZXEuaW8uZW1pdCgnb25hY2snLCBhY2spO1xuICAgICAgY2FsbFdlYkhvb2soY2xpZW50LCByZXEsICdvbmFjaycsIGFjayk7XG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBvblByZXNlbmNlQ2hhbmdlZChjbGllbnQ6IFdoYXRzQXBwU2VydmVyLCByZXE6IFJlcXVlc3QpIHtcbiAgICBhd2FpdCBjbGllbnQub25QcmVzZW5jZUNoYW5nZWQoYXN5bmMgKHByZXNlbmNlQ2hhbmdlZEV2ZW50KSA9PiB7XG4gICAgICByZXEuaW8uZW1pdCgnb25wcmVzZW5jZWNoYW5nZWQnLCBwcmVzZW5jZUNoYW5nZWRFdmVudCk7XG4gICAgICBjYWxsV2ViSG9vayhjbGllbnQsIHJlcSwgJ29ucHJlc2VuY2VjaGFuZ2VkJywgcHJlc2VuY2VDaGFuZ2VkRXZlbnQpO1xuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgb25SZWFjdGlvbk1lc3NhZ2UoY2xpZW50OiBXaGF0c0FwcFNlcnZlciwgcmVxOiBSZXF1ZXN0KSB7XG4gICAgYXdhaXQgY2xpZW50LmlzQ29ubmVjdGVkKCk7XG4gICAgYXdhaXQgY2xpZW50Lm9uUmVhY3Rpb25NZXNzYWdlKGFzeW5jIChyZWFjdGlvbjogYW55KSA9PiB7XG4gICAgICByZXEuaW8uZW1pdCgnb25yZWFjdGlvbm1lc3NhZ2UnLCByZWFjdGlvbik7XG4gICAgICBjYWxsV2ViSG9vayhjbGllbnQsIHJlcSwgJ29ucmVhY3Rpb25tZXNzYWdlJywgcmVhY3Rpb24pO1xuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgb25SZXZva2VkTWVzc2FnZShjbGllbnQ6IFdoYXRzQXBwU2VydmVyLCByZXE6IFJlcXVlc3QpIHtcbiAgICBhd2FpdCBjbGllbnQuaXNDb25uZWN0ZWQoKTtcbiAgICBhd2FpdCBjbGllbnQub25SZXZva2VkTWVzc2FnZShhc3luYyAocmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgcmVxLmlvLmVtaXQoJ29ucmV2b2tlZG1lc3NhZ2UnLCByZXNwb25zZSk7XG4gICAgICBjYWxsV2ViSG9vayhjbGllbnQsIHJlcSwgJ29ucmV2b2tlZG1lc3NhZ2UnLCByZXNwb25zZSk7XG4gICAgfSk7XG4gIH1cbiAgYXN5bmMgb25Qb2xsUmVzcG9uc2UoY2xpZW50OiBXaGF0c0FwcFNlcnZlciwgcmVxOiBSZXF1ZXN0KSB7XG4gICAgYXdhaXQgY2xpZW50LmlzQ29ubmVjdGVkKCk7XG4gICAgYXdhaXQgY2xpZW50Lm9uUG9sbFJlc3BvbnNlKGFzeW5jIChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICByZXEuaW8uZW1pdCgnb25wb2xscmVzcG9uc2UnLCByZXNwb25zZSk7XG4gICAgICBjYWxsV2ViSG9vayhjbGllbnQsIHJlcSwgJ29ucG9sbHJlc3BvbnNlJywgcmVzcG9uc2UpO1xuICAgIH0pO1xuICB9XG4gIGFzeW5jIG9uTGFiZWxVcGRhdGVkKGNsaWVudDogV2hhdHNBcHBTZXJ2ZXIsIHJlcTogUmVxdWVzdCkge1xuICAgIGF3YWl0IGNsaWVudC5pc0Nvbm5lY3RlZCgpO1xuICAgIGF3YWl0IGNsaWVudC5vblVwZGF0ZUxhYmVsKGFzeW5jIChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICByZXEuaW8uZW1pdCgnb251cGRhdGVsYWJlbCcsIHJlc3BvbnNlKTtcbiAgICAgIGNhbGxXZWJIb29rKGNsaWVudCwgcmVxLCAnb251cGRhdGVsYWJlbCcsIHJlc3BvbnNlKTtcbiAgICB9KTtcbiAgfVxuXG4gIGVuY29kZUZ1bmN0aW9uKGRhdGE6IGFueSwgd2ViaG9vazogYW55KSB7XG4gICAgZGF0YS53ZWJob29rID0gd2ViaG9vaztcbiAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoZGF0YSk7XG4gIH1cblxuICBkZWNvZGVGdW5jdGlvbih0ZXh0OiBhbnksIGNsaWVudDogYW55KSB7XG4gICAgY29uc3Qgb2JqZWN0ID0gSlNPTi5wYXJzZSh0ZXh0KTtcbiAgICBpZiAob2JqZWN0LndlYmhvb2sgJiYgIWNsaWVudC53ZWJob29rKSBjbGllbnQud2ViaG9vayA9IG9iamVjdC53ZWJob29rO1xuICAgIGRlbGV0ZSBvYmplY3Qud2ViaG9vaztcbiAgICByZXR1cm4gb2JqZWN0O1xuICB9XG5cbiAgZ2V0Q2xpZW50KHNlc3Npb246IGFueSkge1xuICAgIGxldCBjbGllbnQgPSBjbGllbnRzQXJyYXlbc2Vzc2lvbl07XG5cbiAgICBpZiAoIWNsaWVudClcbiAgICAgIGNsaWVudCA9IGNsaWVudHNBcnJheVtzZXNzaW9uXSA9IHtcbiAgICAgICAgc3RhdHVzOiBudWxsLFxuICAgICAgICBzZXNzaW9uOiBzZXNzaW9uLFxuICAgICAgfSBhcyBhbnk7XG4gICAgcmV0dXJuIGNsaWVudDtcbiAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7QUFlQSxJQUFBQSxXQUFBLEdBQUFDLE9BQUE7OztBQUdBLElBQUFDLGtCQUFBLEdBQUFELE9BQUE7O0FBRUEsSUFBQUUsZUFBQSxHQUFBQyxzQkFBQSxDQUFBSCxPQUFBO0FBQ0EsSUFBQUksVUFBQSxHQUFBSixPQUFBO0FBQ0EsSUFBQUssWUFBQSxHQUFBTCxPQUFBO0FBQ0EsSUFBQU0sUUFBQSxH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
@@ -13,12 +13,12 @@ if (_config.default.tokenStoreType === 'mongodb') {
13
13
 
14
14
  if (!_config.default.db.mongoIsRemote) {
15
15
  mongoose.connect(
16
- `mongodb://${userAndPassword}${_config.default.db.mongodbHost}:${_config.default.db.mongodbPort}/${_config.default.db.mongodbDatabase}`,
17
- {
18
- useNewUrlParser: true,
19
- useUnifiedTopology: true
20
- });
21
-
16
+ `mongodb://${userAndPassword}${_config.default.db.mongodbHost}:${_config.default.db.mongodbPort}/${_config.default.db.mongodbDatabase}`,
17
+ {
18
+ useNewUrlParser: true,
19
+ useUnifiedTopology: true
20
+ }
21
+ );
22
22
  } else {
23
23
  mongoose.connect(_config.default.db.mongoURLRemote, {
24
24
  useNewUrlParser: true,
@@ -28,4 +28,4 @@ if (_config.default.tokenStoreType === 'mongodb') {
28
28
  }var _default =
29
29
 
30
30
  mongoose;exports.default = _default;
31
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfY29uZmlnIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsInJlcXVpcmUiLCJtb25nb29zZSIsImNvbmZpZyIsInRva2VuU3RvcmVUeXBlIiwiUHJvbWlzZSIsImdsb2JhbCIsInVzZXJBbmRQYXNzd29yZCIsImRiIiwibW9uZ29kYlVzZXIiLCJtb25nb2RiUGFzc3dvcmQiLCJtb25nb0lzUmVtb3RlIiwiY29ubmVjdCIsIm1vbmdvZGJIb3N0IiwibW9uZ29kYlBvcnQiLCJtb25nb2RiRGF0YWJhc2UiLCJ1c2VOZXdVcmxQYXJzZXIiLCJ1c2VVbmlmaWVkVG9wb2xvZ3kiLCJtb25nb1VSTFJlbW90ZSIsIl9kZWZhdWx0IiwiZXhwb3J0cyIsImRlZmF1bHQiXSwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvdXRpbC9kYi9tb25nb2RiL2RiLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vaW1wb3J0IG1vbmdvb3NlIGZyb20gJ21vbmdvb3NlJztcbmltcG9ydCBjb25maWcgZnJvbSAnLi4vLi4vLi4vY29uZmlnJztcblxuY29uc3QgbW9uZ29vc2UgPVxuICBjb25maWcudG9rZW5TdG9yZVR5cGUgPT09ICdtb25nb2RiJyA/IHJlcXVpcmUoJ21vbmdvb3NlJykgOiBudWxsO1xuXG5pZiAoY29uZmlnLnRva2VuU3RvcmVUeXBlID09PSAnbW9uZ29kYicpIHtcbiAgbW9uZ29vc2UuUHJvbWlzZSA9IGdsb2JhbC5Qcm9taXNlO1xuICBjb25zdCB1c2VyQW5kUGFzc3dvcmQgPVxuICAgIGNvbmZpZy5kYi5tb25nb2RiVXNlciAmJiBjb25maWcuZGIubW9uZ29kYlBhc3N3b3JkXG4gICAgICA/IGAke2NvbmZpZy5kYi5tb25nb2RiVXNlcn06JHtjb25maWcuZGIubW9uZ29kYlBhc3N3b3JkfUBgXG4gICAgICA6ICcnO1xuXG4gIGlmICghY29uZmlnLmRiLm1vbmdvSXNSZW1vdGUpIHtcbiAgICBtb25nb29zZS5jb25uZWN0KFxuICAgICAgYG1vbmdvZGI6Ly8ke3VzZXJBbmRQYXNzd29yZH0ke2NvbmZpZy5kYi5tb25nb2RiSG9zdH06JHtjb25maWcuZGIubW9uZ29kYlBvcnR9LyR7Y29uZmlnLmRiLm1vbmdvZGJEYXRhYmFzZX1gLFxuICAgICAge1xuICAgICAgICB1c2VOZXdVcmxQYXJzZXI6IHRydWUsXG4gICAgICAgIHVzZVVuaWZpZWRUb3BvbG9neTogdHJ1ZSxcbiAgICAgIH1cbiAgICApO1xuICB9IGVsc2Uge1xuICAgIG1vbmdvb3NlLmNvbm5lY3QoY29uZmlnLmRiLm1vbmdvVVJMUmVtb3RlLCB7XG4gICAgICB1c2VOZXdVcmxQYXJzZXI6IHRydWUsXG4gICAgICB1c2VVbmlmaWVkVG9wb2xvZ3k6IHRydWUsXG4gICAgfSk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgbW9uZ29vc2U7XG4iXSwibWFwcGluZ3MiOiI7QUFDQSxJQUFBQSxPQUFBLEdBQUFDLHNCQUFBLENBQUFDLE9BQUEscUJBQXFDLENBRHJDOztBQUdBLE1BQU1DLFFBQVE7QUFDWkMsZUFBTSxDQUFDQyxjQUFjLEtBQUssU0FBUyxHQUFHSCxPQUFPLENBQUMsVUFBVSxDQUFDLEdBQUcsSUFBSTs7QUFFbEUsSUFBSUUsZUFBTSxDQUFDQyxjQUFjLEtBQUssU0FBUyxFQUFFO0VBQ3ZDRixRQUFRLENBQUNHLE9BQU8sR0FBR0MsTUFBTSxDQUFDRCxPQUFPO0VBQ2pDLE1BQU1FLGVBQWU7RUFDbkJKLGVBQU0sQ0FBQ0ssRUFBRSxDQUFDQyxXQUFXLElBQUlOLGVBQU0sQ0FBQ0ssRUFBRSxDQUFDRSxlQUFlO0VBQzdDLEdBQUVQLGVBQU0sQ0FBQ0ssRUFBRSxDQUFDQyxXQUFZLElBQUdOLGVBQU0sQ0FBQ0ssRUFBRSxDQUFDRSxlQUFnQixHQUFFO0VBQ3hELEVBQUU7O0VBRVIsSUFBSSxDQUFDUCxlQUFNLENBQUNLLEVBQUUsQ0FBQ0csYUFBYSxFQUFFO0lBQzVCVCxRQUFRLENBQUNVLE9BQU87SUFDYixhQUFZTCxlQUFnQixHQUFFSixlQUFNLENBQUNLLEVBQUUsQ0FBQ0ssV0FBWSxJQUFHVixlQUFNLENBQUNLLEVBQUUsQ0FBQ00sV0FBWSxJQUFHWCxlQUFNLENBQUNLLEVBQUUsQ0FBQ08sZUFBZ0IsRUFBQztJQUM1RztNQUNFQyxlQUFlLEVBQUUsSUFBSTtNQUNyQkMsa0JBQWtCLEVBQUU7SUFDdEIsQ0FBQyxDQUNGOztFQUNILENBQUMsTUFBTTtJQUNMZixRQUFRLENBQUNVLE9BQU8sQ0FBQ1QsZUFBTSxDQUFDSyxFQUFFLENBQUNVLGNBQWMsRUFBRTtNQUN6Q0YsZUFBZSxFQUFFLElBQUk7TUFDckJDLGtCQUFrQixFQUFFO0lBQ3RCLENBQUMsQ0FBQztFQUNKO0FBQ0YsQ0FBQyxJQUFBRSxRQUFBOztBQUVjakIsUUFBUSxDQUFBa0IsT0FBQSxDQUFBQyxPQUFBLEdBQUFGLFFBQUEifQ==
31
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfY29uZmlnIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsInJlcXVpcmUiLCJtb25nb29zZSIsImNvbmZpZyIsInRva2VuU3RvcmVUeXBlIiwiUHJvbWlzZSIsImdsb2JhbCIsInVzZXJBbmRQYXNzd29yZCIsImRiIiwibW9uZ29kYlVzZXIiLCJtb25nb2RiUGFzc3dvcmQiLCJtb25nb0lzUmVtb3RlIiwiY29ubmVjdCIsIm1vbmdvZGJIb3N0IiwibW9uZ29kYlBvcnQiLCJtb25nb2RiRGF0YWJhc2UiLCJ1c2VOZXdVcmxQYXJzZXIiLCJ1c2VVbmlmaWVkVG9wb2xvZ3kiLCJtb25nb1VSTFJlbW90ZSIsIl9kZWZhdWx0IiwiZXhwb3J0cyIsImRlZmF1bHQiXSwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvdXRpbC9kYi9tb25nb2RiL2RiLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vaW1wb3J0IG1vbmdvb3NlIGZyb20gJ21vbmdvb3NlJztcbmltcG9ydCBjb25maWcgZnJvbSAnLi4vLi4vLi4vY29uZmlnJztcblxuY29uc3QgbW9uZ29vc2UgPVxuICBjb25maWcudG9rZW5TdG9yZVR5cGUgPT09ICdtb25nb2RiJyA/IHJlcXVpcmUoJ21vbmdvb3NlJykgOiBudWxsO1xuXG5pZiAoY29uZmlnLnRva2VuU3RvcmVUeXBlID09PSAnbW9uZ29kYicpIHtcbiAgbW9uZ29vc2UuUHJvbWlzZSA9IGdsb2JhbC5Qcm9taXNlO1xuICBjb25zdCB1c2VyQW5kUGFzc3dvcmQgPVxuICAgIGNvbmZpZy5kYi5tb25nb2RiVXNlciAmJiBjb25maWcuZGIubW9uZ29kYlBhc3N3b3JkXG4gICAgICA/IGAke2NvbmZpZy5kYi5tb25nb2RiVXNlcn06JHtjb25maWcuZGIubW9uZ29kYlBhc3N3b3JkfUBgXG4gICAgICA6ICcnO1xuXG4gIGlmICghY29uZmlnLmRiLm1vbmdvSXNSZW1vdGUpIHtcbiAgICBtb25nb29zZS5jb25uZWN0KFxuICAgICAgYG1vbmdvZGI6Ly8ke3VzZXJBbmRQYXNzd29yZH0ke2NvbmZpZy5kYi5tb25nb2RiSG9zdH06JHtjb25maWcuZGIubW9uZ29kYlBvcnR9LyR7Y29uZmlnLmRiLm1vbmdvZGJEYXRhYmFzZX1gLFxuICAgICAge1xuICAgICAgICB1c2VOZXdVcmxQYXJzZXI6IHRydWUsXG4gICAgICAgIHVzZVVuaWZpZWRUb3BvbG9neTogdHJ1ZSxcbiAgICAgIH1cbiAgICApO1xuICB9IGVsc2Uge1xuICAgIG1vbmdvb3NlLmNvbm5lY3QoY29uZmlnLmRiLm1vbmdvVVJMUmVtb3RlLCB7XG4gICAgICB1c2VOZXdVcmxQYXJzZXI6IHRydWUsXG4gICAgICB1c2VVbmlmaWVkVG9wb2xvZ3k6IHRydWUsXG4gICAgfSk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgbW9uZ29vc2U7XG4iXSwibWFwcGluZ3MiOiI7QUFDQSxJQUFBQSxPQUFBLEdBQUFDLHNCQUFBLENBQUFDLE9BQUEscUJBQXFDLENBRHJDOztBQUdBLE1BQU1DLFFBQVE7QUFDWkMsZUFBTSxDQUFDQyxjQUFjLEtBQUssU0FBUyxHQUFHSCxPQUFPLENBQUMsVUFBVSxDQUFDLEdBQUcsSUFBSTs7QUFFbEUsSUFBSUUsZUFBTSxDQUFDQyxjQUFjLEtBQUssU0FBUyxFQUFFO0VBQ3ZDRixRQUFRLENBQUNHLE9BQU8sR0FBR0MsTUFBTSxDQUFDRCxPQUFPO0VBQ2pDLE1BQU1FLGVBQWU7RUFDbkJKLGVBQU0sQ0FBQ0ssRUFBRSxDQUFDQyxXQUFXLElBQUlOLGVBQU0sQ0FBQ0ssRUFBRSxDQUFDRSxlQUFlO0VBQzdDLEdBQUVQLGVBQU0sQ0FBQ0ssRUFBRSxDQUFDQyxXQUFZLElBQUdOLGVBQU0sQ0FBQ0ssRUFBRSxDQUFDRSxlQUFnQixHQUFFO0VBQ3hELEVBQUU7O0VBRVIsSUFBSSxDQUFDUCxlQUFNLENBQUNLLEVBQUUsQ0FBQ0csYUFBYSxFQUFFO0lBQzVCVCxRQUFRLENBQUNVLE9BQU87TUFDYixhQUFZTCxlQUFnQixHQUFFSixlQUFNLENBQUNLLEVBQUUsQ0FBQ0ssV0FBWSxJQUFHVixlQUFNLENBQUNLLEVBQUUsQ0FBQ00sV0FBWSxJQUFHWCxlQUFNLENBQUNLLEVBQUUsQ0FBQ08sZUFBZ0IsRUFBQztNQUM1RztRQUNFQyxlQUFlLEVBQUUsSUFBSTtRQUNyQkMsa0JBQWtCLEVBQUU7TUFDdEI7SUFDRixDQUFDO0VBQ0gsQ0FBQyxNQUFNO0lBQ0xmLFFBQVEsQ0FBQ1UsT0FBTyxDQUFDVCxlQUFNLENBQUNLLEVBQUUsQ0FBQ1UsY0FBYyxFQUFFO01BQ3pDRixlQUFlLEVBQUUsSUFBSTtNQUNyQkMsa0JBQWtCLEVBQUU7SUFDdEIsQ0FBQyxDQUFDO0VBQ0o7QUFDRixDQUFDLElBQUFFLFFBQUE7O0FBRWNqQixRQUFRLENBQUFrQixPQUFBLENBQUFDLE9BQUEsR0FBQUYsUUFBQSJ9