@wppconnect/server 1.8.5 → 2.0.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.
- package/CHANGELOG.md +6 -0
- package/dist/config/upload.js +4 -4
- package/dist/config.js +78 -0
- package/dist/controller/catalogController.js +111 -22
- package/dist/controller/deviceController.js +324 -114
- package/dist/controller/encryptController.js +4 -2
- package/dist/controller/groupController.js +157 -44
- package/dist/controller/labelsController.js +46 -8
- package/dist/controller/messageController.js +104 -39
- package/dist/controller/orderController.js +19 -7
- package/dist/controller/sessionController.js +99 -34
- package/dist/controller/statusController.js +18 -10
- package/dist/index.js +47 -25
- package/dist/mapper/index.js +7 -5
- package/dist/mapper/tagone-chat.js +1 -1
- package/dist/mapper/tagone-device.js +1 -1
- package/dist/mapper/tagone-message-document.js +1 -1
- package/dist/mapper/tagone-message-image.js +1 -1
- package/dist/mapper/tagone-message-location.js +1 -1
- package/dist/mapper/tagone-message-video.js +1 -1
- package/dist/mapper/tagone-message.js +1 -1
- package/dist/mapper/tagone-onack.js +1 -1
- package/dist/mapper/tagone-return.js +4 -2
- package/dist/middleware/auth.js +29 -9
- package/dist/middleware/healthCheck.js +1 -1
- package/dist/middleware/statusConnection.js +9 -3
- package/dist/routes/index.js +618 -113
- package/dist/server.js +2 -2
- package/dist/types/Request.js +2 -0
- package/dist/types/ServerOptions.js +2 -0
- package/dist/types/WhatsAppServer.js +2 -0
- package/dist/util/chatWootClient.js +55 -22
- package/dist/util/createSessionUtil.js +65 -17
- package/dist/util/db/mongodb/db.js +10 -7
- package/dist/util/db/redis/db.js +7 -5
- package/dist/util/functions.js +81 -37
- package/dist/util/getAllTokens.js +1 -1
- package/dist/util/logger.js +2 -3
- package/dist/util/sessionUtil.js +5 -4
- package/dist/util/tokenStore/FileTokenStore/FileTokenStore.js +178 -0
- package/dist/util/tokenStore/factory.js +8 -11
- package/dist/util/tokenStore/fileTokenStory.js +21 -15
- package/dist/util/tokenStore/firebaseTokenStory.js +1 -1
- package/dist/util/tokenStore/model/token.js +7 -5
- package/dist/util/tokenStore/mongodbTokenStory.js +18 -11
- package/dist/util/tokenStore/redisTokenStory.js +39 -19
- package/dist/util/tokenStore/types.js +2 -0
- package/package.json +44 -22
- package/tsconfig.json +105 -0
- package/types.d.ts +2 -0
- package/dist/config/upload.js.map +0 -1
- package/dist/config.json +0 -77
- package/dist/controller/catalogController.js.map +0 -1
- package/dist/controller/deviceController.js.map +0 -1
- package/dist/controller/encryptController.js.map +0 -1
- package/dist/controller/groupController.js.map +0 -1
- package/dist/controller/labelsController.js.map +0 -1
- package/dist/controller/messageController.js.map +0 -1
- package/dist/controller/orderController.js.map +0 -1
- package/dist/controller/sessionController.js.map +0 -1
- package/dist/controller/statusController.js.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/mapper/index.js.map +0 -1
- package/dist/mapper/tagone-chat.js.map +0 -1
- package/dist/mapper/tagone-device.js.map +0 -1
- package/dist/mapper/tagone-message-document.js.map +0 -1
- package/dist/mapper/tagone-message-image.js.map +0 -1
- package/dist/mapper/tagone-message-location.js.map +0 -1
- package/dist/mapper/tagone-message-video.js.map +0 -1
- package/dist/mapper/tagone-message.js.map +0 -1
- package/dist/mapper/tagone-onack.js.map +0 -1
- package/dist/mapper/tagone-return.js.map +0 -1
- package/dist/middleware/auth.js.map +0 -1
- package/dist/middleware/healthCheck.js.map +0 -1
- package/dist/middleware/statusConnection.js.map +0 -1
- package/dist/routes/index.js.map +0 -1
- package/dist/server.js.map +0 -1
- package/dist/util/chatWootClient.js.map +0 -1
- package/dist/util/createSessionUtil.js.map +0 -1
- package/dist/util/db/mongodb/db.js.map +0 -1
- package/dist/util/db/redis/db.js.map +0 -1
- package/dist/util/functions.js.map +0 -1
- package/dist/util/getAllTokens.js.map +0 -1
- package/dist/util/logger.js.map +0 -1
- package/dist/util/sessionUtil.js.map +0 -1
- package/dist/util/tokenStore/factory.js.map +0 -1
- package/dist/util/tokenStore/fileTokenStory.js.map +0 -1
- package/dist/util/tokenStore/firebaseTokenStory.js.map +0 -1
- package/dist/util/tokenStore/model/token.js.map +0 -1
- package/dist/util/tokenStore/mongodbTokenStory.js.map +0 -1
- package/dist/util/tokenStore/redisTokenStory.js.map +0 -1
package/CHANGELOG.md
CHANGED
package/dist/config/upload.js
CHANGED
|
@@ -13,8 +13,8 @@
|
|
|
13
13
|
|
|
14
14
|
|
|
15
15
|
|
|
16
|
-
var
|
|
17
|
-
var
|
|
16
|
+
var _multer = _interopRequireDefault(require("multer"));
|
|
17
|
+
var _path = _interopRequireDefault(require("path")); /*
|
|
18
18
|
* Copyright 2021 WPPConnect Team
|
|
19
19
|
*
|
|
20
20
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
@@ -28,5 +28,5 @@ var _multer = _interopRequireDefault(require("multer")); /*
|
|
|
28
28
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
29
29
|
* See the License for the specific language governing permissions and
|
|
30
30
|
* limitations under the License.
|
|
31
|
-
*/const storage = _multer.default.diskStorage({ destination: function (req, file, cb) {const __dirname = _path.default.resolve(_path.default.dirname(''));cb(null, _path.default.resolve(__dirname, 'uploads'));}, filename: function (req, file, cb) {
|
|
32
|
-
//# sourceMappingURL=
|
|
31
|
+
*/const storage = _multer.default.diskStorage({ destination: function (req, file, cb) {const __dirname = _path.default.resolve(_path.default.dirname(''));cb(null, _path.default.resolve(__dirname, 'uploads'));}, filename: function (req, file, cb) {const filename = `wppConnect-${Date.now()}-${file.originalname}`;cb(null, filename);} });const uploads = (0, _multer.default)({ storage: storage });var _default = uploads;exports.default = _default;
|
|
32
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbXVsdGVyIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsInJlcXVpcmUiLCJfcGF0aCIsInN0b3JhZ2UiLCJtdWx0ZXIiLCJkaXNrU3RvcmFnZSIsImRlc3RpbmF0aW9uIiwicmVxIiwiZmlsZSIsImNiIiwiX19kaXJuYW1lIiwicGF0aCIsInJlc29sdmUiLCJkaXJuYW1lIiwiZmlsZW5hbWUiLCJEYXRlIiwibm93Iiwib3JpZ2luYWxuYW1lIiwidXBsb2FkcyIsIl9kZWZhdWx0IiwiZXhwb3J0cyIsImRlZmF1bHQiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvY29uZmlnL3VwbG9hZC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogQ29weXJpZ2h0IDIwMjEgV1BQQ29ubmVjdCBUZWFtXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5pbXBvcnQgbXVsdGVyIGZyb20gJ211bHRlcic7XG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJztcblxuY29uc3Qgc3RvcmFnZSA9IG11bHRlci5kaXNrU3RvcmFnZSh7XG4gIGRlc3RpbmF0aW9uOiBmdW5jdGlvbiAocmVxLCBmaWxlLCBjYikge1xuICAgIGNvbnN0IF9fZGlybmFtZSA9IHBhdGgucmVzb2x2ZShwYXRoLmRpcm5hbWUoJycpKTtcbiAgICBjYihudWxsLCBwYXRoLnJlc29sdmUoX19kaXJuYW1lLCAndXBsb2FkcycpKTtcbiAgfSxcbiAgZmlsZW5hbWU6IGZ1bmN0aW9uIChyZXEsIGZpbGUsIGNiKSB7XG4gICAgY29uc3QgZmlsZW5hbWUgPSBgd3BwQ29ubmVjdC0ke0RhdGUubm93KCl9LSR7ZmlsZS5vcmlnaW5hbG5hbWV9YDtcbiAgICBjYihudWxsLCBmaWxlbmFtZSk7XG4gIH0sXG59KTtcblxuY29uc3QgdXBsb2FkcyA9IG11bHRlcih7IHN0b3JhZ2U6IHN0b3JhZ2UgfSk7XG5leHBvcnQgZGVmYXVsdCB1cGxvYWRzO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7QUFlQSxJQUFBQSxPQUFBLEdBQUFDLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBQyxLQUFBLEdBQUFGLHNCQUFBLENBQUFDLE9BQUEsVUFBd0IsQ0FoQnhCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUlBLE1BQU1FLE9BQU8sR0FBR0MsZUFBTSxDQUFDQyxXQUFXLENBQUMsRUFDakNDLFdBQVcsRUFBRSxTQUFBQSxDQUFVQyxHQUFHLEVBQUVDLElBQUksRUFBRUMsRUFBRSxFQUFFLENBQ3BDLE1BQU1DLFNBQVMsR0FBR0MsYUFBSSxDQUFDQyxPQUFPLENBQUNELGFBQUksQ0FBQ0UsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQ2hESixFQUFFLENBQUMsSUFBSSxFQUFFRSxhQUFJLENBQUNDLE9BQU8sQ0FBQ0YsU0FBUyxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQzlDLENBQUMsRUFDREksUUFBUSxFQUFFLFNBQUFBLENBQVVQLEdBQUcsRUFBRUMsSUFBSSxFQUFFQyxFQUFFLEVBQUUsQ0FDakMsTUFBTUssUUFBUSxHQUFJLGNBQWFDLElBQUksQ0FBQ0MsR0FBRyxFQUFHLElBQUdSLElBQUksQ0FBQ1MsWUFBYSxFQUFDLENBQ2hFUixFQUFFLENBQUMsSUFBSSxFQUFFSyxRQUFRLENBQUMsQ0FDcEIsQ0FBQyxDQUNILENBQUMsQ0FBQyxDQUVGLE1BQU1JLE9BQU8sR0FBRyxJQUFBZCxlQUFNLEVBQUMsRUFBRUQsT0FBTyxFQUFFQSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBQWdCLFFBQUEsR0FDOUJELE9BQU8sQ0FBQUUsT0FBQSxDQUFBQyxPQUFBLEdBQUFGLFFBQUEifQ==
|
package/dist/config.js
ADDED
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports, "__esModule", { value: true });exports.default = void 0;var _default = {
|
|
2
|
+
secretKey: 'THISISMYSECURETOKEN',
|
|
3
|
+
host: 'http://localhost',
|
|
4
|
+
port: '21465',
|
|
5
|
+
deviceName: 'WppConnect',
|
|
6
|
+
poweredBy: 'WPPConnect-Server',
|
|
7
|
+
startAllSession: true,
|
|
8
|
+
tokenStoreType: 'file',
|
|
9
|
+
maxListeners: 15,
|
|
10
|
+
customUserDataDir: './userDataDir/',
|
|
11
|
+
webhook: {
|
|
12
|
+
url: null,
|
|
13
|
+
autoDownload: true,
|
|
14
|
+
uploadS3: false,
|
|
15
|
+
readMessage: true,
|
|
16
|
+
allUnreadOnStart: false,
|
|
17
|
+
listenAcks: true,
|
|
18
|
+
onPresenceChanged: true,
|
|
19
|
+
onParticipantsChanged: true,
|
|
20
|
+
onReactionMessage: true,
|
|
21
|
+
onPollResponse: true,
|
|
22
|
+
onRevokedMessage: true
|
|
23
|
+
},
|
|
24
|
+
archive: {
|
|
25
|
+
enable: false,
|
|
26
|
+
waitTime: 10,
|
|
27
|
+
daysToArchive: 45
|
|
28
|
+
},
|
|
29
|
+
log: {
|
|
30
|
+
level: 'silly', // Before open a issue, change level to silly and retry a action
|
|
31
|
+
logger: ['console', 'file']
|
|
32
|
+
},
|
|
33
|
+
createOptions: {
|
|
34
|
+
browserArgs: [
|
|
35
|
+
'--disable-web-security',
|
|
36
|
+
'--no-sandbox',
|
|
37
|
+
'--disable-web-security',
|
|
38
|
+
'--aggressive-cache-discard',
|
|
39
|
+
'--disable-cache',
|
|
40
|
+
'--disable-application-cache',
|
|
41
|
+
'--disable-offline-load-stale-cache',
|
|
42
|
+
'--disk-cache-size=0',
|
|
43
|
+
'--disable-background-networking',
|
|
44
|
+
'--disable-default-apps',
|
|
45
|
+
'--disable-extensions',
|
|
46
|
+
'--disable-sync',
|
|
47
|
+
'--disable-translate',
|
|
48
|
+
'--hide-scrollbars',
|
|
49
|
+
'--metrics-recording-only',
|
|
50
|
+
'--mute-audio',
|
|
51
|
+
'--no-first-run',
|
|
52
|
+
'--safebrowsing-disable-auto-update',
|
|
53
|
+
'--ignore-certificate-errors',
|
|
54
|
+
'--ignore-ssl-errors',
|
|
55
|
+
'--ignore-certificate-errors-spki-list']
|
|
56
|
+
|
|
57
|
+
},
|
|
58
|
+
mapper: {
|
|
59
|
+
enable: false,
|
|
60
|
+
prefix: 'tagone-'
|
|
61
|
+
},
|
|
62
|
+
db: {
|
|
63
|
+
mongodbDatabase: 'tokens',
|
|
64
|
+
mongodbCollection: '',
|
|
65
|
+
mongodbUser: '',
|
|
66
|
+
mongodbPassword: '',
|
|
67
|
+
mongodbHost: '',
|
|
68
|
+
mongoIsRemote: true,
|
|
69
|
+
mongoURLRemote: '',
|
|
70
|
+
mongodbPort: 27017,
|
|
71
|
+
redisHost: 'localhost',
|
|
72
|
+
redisPort: 6379,
|
|
73
|
+
redisPassword: '',
|
|
74
|
+
redisDb: 0,
|
|
75
|
+
redisPrefix: 'docker'
|
|
76
|
+
}
|
|
77
|
+
};exports.default = _default;
|
|
78
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJzZWNyZXRLZXkiLCJob3N0IiwicG9ydCIsImRldmljZU5hbWUiLCJwb3dlcmVkQnkiLCJzdGFydEFsbFNlc3Npb24iLCJ0b2tlblN0b3JlVHlwZSIsIm1heExpc3RlbmVycyIsImN1c3RvbVVzZXJEYXRhRGlyIiwid2ViaG9vayIsInVybCIsImF1dG9Eb3dubG9hZCIsInVwbG9hZFMzIiwicmVhZE1lc3NhZ2UiLCJhbGxVbnJlYWRPblN0YXJ0IiwibGlzdGVuQWNrcyIsIm9uUHJlc2VuY2VDaGFuZ2VkIiwib25QYXJ0aWNpcGFudHNDaGFuZ2VkIiwib25SZWFjdGlvbk1lc3NhZ2UiLCJvblBvbGxSZXNwb25zZSIsIm9uUmV2b2tlZE1lc3NhZ2UiLCJhcmNoaXZlIiwiZW5hYmxlIiwid2FpdFRpbWUiLCJkYXlzVG9BcmNoaXZlIiwibG9nIiwibGV2ZWwiLCJsb2dnZXIiLCJjcmVhdGVPcHRpb25zIiwiYnJvd3NlckFyZ3MiLCJtYXBwZXIiLCJwcmVmaXgiLCJkYiIsIm1vbmdvZGJEYXRhYmFzZSIsIm1vbmdvZGJDb2xsZWN0aW9uIiwibW9uZ29kYlVzZXIiLCJtb25nb2RiUGFzc3dvcmQiLCJtb25nb2RiSG9zdCIsIm1vbmdvSXNSZW1vdGUiLCJtb25nb1VSTFJlbW90ZSIsIm1vbmdvZGJQb3J0IiwicmVkaXNIb3N0IiwicmVkaXNQb3J0IiwicmVkaXNQYXNzd29yZCIsInJlZGlzRGIiLCJyZWRpc1ByZWZpeCIsImV4cG9ydHMiLCJkZWZhdWx0IiwiX2RlZmF1bHQiXSwic291cmNlcyI6WyIuLi9zcmMvY29uZmlnLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBkZWZhdWx0IHtcbiAgc2VjcmV0S2V5OiAnVEhJU0lTTVlTRUNVUkVUT0tFTicsXG4gIGhvc3Q6ICdodHRwOi8vbG9jYWxob3N0JyxcbiAgcG9ydDogJzIxNDY1JyxcbiAgZGV2aWNlTmFtZTogJ1dwcENvbm5lY3QnLFxuICBwb3dlcmVkQnk6ICdXUFBDb25uZWN0LVNlcnZlcicsXG4gIHN0YXJ0QWxsU2Vzc2lvbjogdHJ1ZSxcbiAgdG9rZW5TdG9yZVR5cGU6ICdmaWxlJyxcbiAgbWF4TGlzdGVuZXJzOiAxNSxcbiAgY3VzdG9tVXNlckRhdGFEaXI6ICcuL3VzZXJEYXRhRGlyLycsXG4gIHdlYmhvb2s6IHtcbiAgICB1cmw6IG51bGwsXG4gICAgYXV0b0Rvd25sb2FkOiB0cnVlLFxuICAgIHVwbG9hZFMzOiBmYWxzZSxcbiAgICByZWFkTWVzc2FnZTogdHJ1ZSxcbiAgICBhbGxVbnJlYWRPblN0YXJ0OiBmYWxzZSxcbiAgICBsaXN0ZW5BY2tzOiB0cnVlLFxuICAgIG9uUHJlc2VuY2VDaGFuZ2VkOiB0cnVlLFxuICAgIG9uUGFydGljaXBhbnRzQ2hhbmdlZDogdHJ1ZSxcbiAgICBvblJlYWN0aW9uTWVzc2FnZTogdHJ1ZSxcbiAgICBvblBvbGxSZXNwb25zZTogdHJ1ZSxcbiAgICBvblJldm9rZWRNZXNzYWdlOiB0cnVlLFxuICB9LFxuICBhcmNoaXZlOiB7XG4gICAgZW5hYmxlOiBmYWxzZSxcbiAgICB3YWl0VGltZTogMTAsXG4gICAgZGF5c1RvQXJjaGl2ZTogNDUsXG4gIH0sXG4gIGxvZzoge1xuICAgIGxldmVsOiAnc2lsbHknLCAvLyBCZWZvcmUgb3BlbiBhIGlzc3VlLCBjaGFuZ2UgbGV2ZWwgdG8gc2lsbHkgYW5kIHJldHJ5IGEgYWN0aW9uXG4gICAgbG9nZ2VyOiBbJ2NvbnNvbGUnLCAnZmlsZSddLFxuICB9LFxuICBjcmVhdGVPcHRpb25zOiB7XG4gICAgYnJvd3NlckFyZ3M6IFtcbiAgICAgICctLWRpc2FibGUtd2ViLXNlY3VyaXR5JyxcbiAgICAgICctLW5vLXNhbmRib3gnLFxuICAgICAgJy0tZGlzYWJsZS13ZWItc2VjdXJpdHknLFxuICAgICAgJy0tYWdncmVzc2l2ZS1jYWNoZS1kaXNjYXJkJyxcbiAgICAgICctLWRpc2FibGUtY2FjaGUnLFxuICAgICAgJy0tZGlzYWJsZS1hcHBsaWNhdGlvbi1jYWNoZScsXG4gICAgICAnLS1kaXNhYmxlLW9mZmxpbmUtbG9hZC1zdGFsZS1jYWNoZScsXG4gICAgICAnLS1kaXNrLWNhY2hlLXNpemU9MCcsXG4gICAgICAnLS1kaXNhYmxlLWJhY2tncm91bmQtbmV0d29ya2luZycsXG4gICAgICAnLS1kaXNhYmxlLWRlZmF1bHQtYXBwcycsXG4gICAgICAnLS1kaXNhYmxlLWV4dGVuc2lvbnMnLFxuICAgICAgJy0tZGlzYWJsZS1zeW5jJyxcbiAgICAgICctLWRpc2FibGUtdHJhbnNsYXRlJyxcbiAgICAgICctLWhpZGUtc2Nyb2xsYmFycycsXG4gICAgICAnLS1tZXRyaWNzLXJlY29yZGluZy1vbmx5JyxcbiAgICAgICctLW11dGUtYXVkaW8nLFxuICAgICAgJy0tbm8tZmlyc3QtcnVuJyxcbiAgICAgICctLXNhZmVicm93c2luZy1kaXNhYmxlLWF1dG8tdXBkYXRlJyxcbiAgICAgICctLWlnbm9yZS1jZXJ0aWZpY2F0ZS1lcnJvcnMnLFxuICAgICAgJy0taWdub3JlLXNzbC1lcnJvcnMnLFxuICAgICAgJy0taWdub3JlLWNlcnRpZmljYXRlLWVycm9ycy1zcGtpLWxpc3QnLFxuICAgIF0sXG4gIH0sXG4gIG1hcHBlcjoge1xuICAgIGVuYWJsZTogZmFsc2UsXG4gICAgcHJlZml4OiAndGFnb25lLScsXG4gIH0sXG4gIGRiOiB7XG4gICAgbW9uZ29kYkRhdGFiYXNlOiAndG9rZW5zJyxcbiAgICBtb25nb2RiQ29sbGVjdGlvbjogJycsXG4gICAgbW9uZ29kYlVzZXI6ICcnLFxuICAgIG1vbmdvZGJQYXNzd29yZDogJycsXG4gICAgbW9uZ29kYkhvc3Q6ICcnLFxuICAgIG1vbmdvSXNSZW1vdGU6IHRydWUsXG4gICAgbW9uZ29VUkxSZW1vdGU6ICcnLFxuICAgIG1vbmdvZGJQb3J0OiAyNzAxNyxcbiAgICByZWRpc0hvc3Q6ICdsb2NhbGhvc3QnLFxuICAgIHJlZGlzUG9ydDogNjM3OSxcbiAgICByZWRpc1Bhc3N3b3JkOiAnJyxcbiAgICByZWRpc0RiOiAwLFxuICAgIHJlZGlzUHJlZml4OiAnZG9ja2VyJyxcbiAgfSxcbn07XG4iXSwibWFwcGluZ3MiOiJtSEFBZTtFQUNiQSxTQUFTLEVBQUUscUJBQXFCO0VBQ2hDQyxJQUFJLEVBQUUsa0JBQWtCO0VBQ3hCQyxJQUFJLEVBQUUsT0FBTztFQUNiQyxVQUFVLEVBQUUsWUFBWTtFQUN4QkMsU0FBUyxFQUFFLG1CQUFtQjtFQUM5QkMsZUFBZSxFQUFFLElBQUk7RUFDckJDLGNBQWMsRUFBRSxNQUFNO0VBQ3RCQyxZQUFZLEVBQUUsRUFBRTtFQUNoQkMsaUJBQWlCLEVBQUUsZ0JBQWdCO0VBQ25DQyxPQUFPLEVBQUU7SUFDUEMsR0FBRyxFQUFFLElBQUk7SUFDVEMsWUFBWSxFQUFFLElBQUk7SUFDbEJDLFFBQVEsRUFBRSxLQUFLO0lBQ2ZDLFdBQVcsRUFBRSxJQUFJO0lBQ2pCQyxnQkFBZ0IsRUFBRSxLQUFLO0lBQ3ZCQyxVQUFVLEVBQUUsSUFBSTtJQUNoQkMsaUJBQWlCLEVBQUUsSUFBSTtJQUN2QkMscUJBQXFCLEVBQUUsSUFBSTtJQUMzQkMsaUJBQWlCLEVBQUUsSUFBSTtJQUN2QkMsY0FBYyxFQUFFLElBQUk7SUFDcEJDLGdCQUFnQixFQUFFO0VBQ3BCLENBQUM7RUFDREMsT0FBTyxFQUFFO0lBQ1BDLE1BQU0sRUFBRSxLQUFLO0lBQ2JDLFFBQVEsRUFBRSxFQUFFO0lBQ1pDLGFBQWEsRUFBRTtFQUNqQixDQUFDO0VBQ0RDLEdBQUcsRUFBRTtJQUNIQyxLQUFLLEVBQUUsT0FBTyxFQUFFO0lBQ2hCQyxNQUFNLEVBQUUsQ0FBQyxTQUFTLEVBQUUsTUFBTTtFQUM1QixDQUFDO0VBQ0RDLGFBQWEsRUFBRTtJQUNiQyxXQUFXLEVBQUU7SUFDWCx3QkFBd0I7SUFDeEIsY0FBYztJQUNkLHdCQUF3QjtJQUN4Qiw0QkFBNEI7SUFDNUIsaUJBQWlCO0lBQ2pCLDZCQUE2QjtJQUM3QixvQ0FBb0M7SUFDcEMscUJBQXFCO0lBQ3JCLGlDQUFpQztJQUNqQyx3QkFBd0I7SUFDeEIsc0JBQXNCO0lBQ3RCLGdCQUFnQjtJQUNoQixxQkFBcUI7SUFDckIsbUJBQW1CO0lBQ25CLDBCQUEwQjtJQUMxQixjQUFjO0lBQ2QsZ0JBQWdCO0lBQ2hCLG9DQUFvQztJQUNwQyw2QkFBNkI7SUFDN0IscUJBQXFCO0lBQ3JCLHVDQUF1Qzs7RUFFM0MsQ0FBQztFQUNEQyxNQUFNLEVBQUU7SUFDTlIsTUFBTSxFQUFFLEtBQUs7SUFDYlMsTUFBTSxFQUFFO0VBQ1YsQ0FBQztFQUNEQyxFQUFFLEVBQUU7SUFDRkMsZUFBZSxFQUFFLFFBQVE7SUFDekJDLGlCQUFpQixFQUFFLEVBQUU7SUFDckJDLFdBQVcsRUFBRSxFQUFFO0lBQ2ZDLGVBQWUsRUFBRSxFQUFFO0lBQ25CQyxXQUFXLEVBQUUsRUFBRTtJQUNmQyxhQUFhLEVBQUUsSUFBSTtJQUNuQkMsY0FBYyxFQUFFLEVBQUU7SUFDbEJDLFdBQVcsRUFBRSxLQUFLO0lBQ2xCQyxTQUFTLEVBQUUsV0FBVztJQUN0QkMsU0FBUyxFQUFFLElBQUk7SUFDZkMsYUFBYSxFQUFFLEVBQUU7SUFDakJDLE9BQU8sRUFBRSxDQUFDO0lBQ1ZDLFdBQVcsRUFBRTtFQUNmO0FBQ0YsQ0FBQyxDQUFBQyxPQUFBLENBQUFDLE9BQUEsR0FBQUMsUUFBQSJ9
|
|
@@ -27,7 +27,15 @@ var _functions = require("../util/functions"); /*
|
|
|
27
27
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
28
28
|
* See the License for the specific language governing permissions and
|
|
29
29
|
* limitations under the License.
|
|
30
|
-
*/async function getProducts(req, res) {const { phone, qnt } = req.query;if (!phone) return res.status(401).send({ message: 'Please send the contact number you wish to return the products.' });try {const result = await req.client.getProducts(phone, qnt);
|
|
30
|
+
*/async function getProducts(req, res) {const { phone, qnt } = req.query;if (!phone) return res.status(401).send({ message: 'Please send the contact number you wish to return the products.' });try {const result = await req.client.getProducts(phone, qnt);
|
|
31
|
+
res.status(201).json({ status: 'success', response: result });
|
|
32
|
+
} catch (error) {
|
|
33
|
+
res.status(500).json({
|
|
34
|
+
status: 'Error',
|
|
35
|
+
message: 'Error on get products',
|
|
36
|
+
error: error
|
|
37
|
+
});
|
|
38
|
+
}
|
|
31
39
|
}
|
|
32
40
|
|
|
33
41
|
async function getProductById(req, res) {
|
|
@@ -38,13 +46,17 @@ async function getProductById(req, res) {
|
|
|
38
46
|
});
|
|
39
47
|
|
|
40
48
|
try {
|
|
41
|
-
const result = await req.client.getProductById(
|
|
49
|
+
const result = await req.client.getProductById(
|
|
50
|
+
phone,
|
|
51
|
+
id);
|
|
52
|
+
|
|
42
53
|
res.status(201).json({ status: 'success', response: result });
|
|
43
54
|
} catch (error) {
|
|
44
|
-
res.
|
|
55
|
+
res.
|
|
56
|
+
status(500).
|
|
57
|
+
json({ status: 'Error', message: 'Error on get product', error: error });
|
|
45
58
|
}
|
|
46
59
|
}
|
|
47
|
-
|
|
48
60
|
async function editProduct(req, res) {
|
|
49
61
|
const { id, options } = req.body;
|
|
50
62
|
if (!id || !options)
|
|
@@ -56,7 +68,11 @@ async function editProduct(req, res) {
|
|
|
56
68
|
const result = await req.client.editProduct(id, options);
|
|
57
69
|
res.status(201).json({ status: 'success', response: result });
|
|
58
70
|
} catch (error) {
|
|
59
|
-
res.status(500).json({
|
|
71
|
+
res.status(500).json({
|
|
72
|
+
status: 'Error',
|
|
73
|
+
message: 'Error on edit product.',
|
|
74
|
+
error: error
|
|
75
|
+
});
|
|
60
76
|
}
|
|
61
77
|
}
|
|
62
78
|
|
|
@@ -71,7 +87,11 @@ async function delProducts(req, res) {
|
|
|
71
87
|
const result = await req.client.delProducts(id);
|
|
72
88
|
res.status(201).json({ status: 'success', response: result });
|
|
73
89
|
} catch (error) {
|
|
74
|
-
res.status(500).json({
|
|
90
|
+
res.status(500).json({
|
|
91
|
+
status: 'Error',
|
|
92
|
+
message: 'Error on delete product.',
|
|
93
|
+
error: error
|
|
94
|
+
});
|
|
75
95
|
}
|
|
76
96
|
}
|
|
77
97
|
|
|
@@ -86,23 +106,48 @@ async function changeProductImage(req, res) {
|
|
|
86
106
|
const result = await req.client.changeProductImage(id, base64);
|
|
87
107
|
res.status(201).json({ status: 'success', response: result });
|
|
88
108
|
} catch (error) {
|
|
89
|
-
res.status(500).json({
|
|
109
|
+
res.status(500).json({
|
|
110
|
+
status: 'Error',
|
|
111
|
+
message: 'Error on change product image.',
|
|
112
|
+
error: error
|
|
113
|
+
});
|
|
90
114
|
}
|
|
91
115
|
}
|
|
92
116
|
|
|
93
117
|
async function addProduct(req, res) {
|
|
94
|
-
const {
|
|
118
|
+
const {
|
|
119
|
+
name,
|
|
120
|
+
image,
|
|
121
|
+
description,
|
|
122
|
+
price,
|
|
123
|
+
url,
|
|
124
|
+
retailerId,
|
|
125
|
+
currency = 'BRL'
|
|
126
|
+
} = req.body;
|
|
95
127
|
if (!name || !image || !price)
|
|
96
128
|
return res.status(401).send({
|
|
97
129
|
message: 'name, price and image was not informed'
|
|
98
130
|
});
|
|
99
131
|
|
|
100
132
|
try {
|
|
101
|
-
const result = await req.client.createProduct(
|
|
133
|
+
const result = await req.client.createProduct(
|
|
134
|
+
name,
|
|
135
|
+
image,
|
|
136
|
+
description,
|
|
137
|
+
price,
|
|
138
|
+
false,
|
|
139
|
+
url,
|
|
140
|
+
retailerId,
|
|
141
|
+
currency);
|
|
142
|
+
|
|
102
143
|
res.status(201).json({ status: 'success', response: result });
|
|
103
144
|
} catch (error) {
|
|
104
145
|
console.log(error);
|
|
105
|
-
res.status(500).json({
|
|
146
|
+
res.status(500).json({
|
|
147
|
+
status: 'Error',
|
|
148
|
+
message: 'Error on add product.',
|
|
149
|
+
error: error
|
|
150
|
+
});
|
|
106
151
|
}
|
|
107
152
|
}
|
|
108
153
|
|
|
@@ -117,7 +162,11 @@ async function addProductImage(req, res) {
|
|
|
117
162
|
const result = await req.client.addProductImage(id, base64);
|
|
118
163
|
res.status(201).json({ status: 'success', response: result });
|
|
119
164
|
} catch (error) {
|
|
120
|
-
res.status(500).json({
|
|
165
|
+
res.status(500).json({
|
|
166
|
+
status: 'Error',
|
|
167
|
+
message: 'Error on add product image.',
|
|
168
|
+
error: error
|
|
169
|
+
});
|
|
121
170
|
}
|
|
122
171
|
}
|
|
123
172
|
|
|
@@ -132,7 +181,11 @@ async function removeProductImage(req, res) {
|
|
|
132
181
|
const result = await req.client.removeProductImage(id, index);
|
|
133
182
|
res.status(201).json({ status: 'success', response: result });
|
|
134
183
|
} catch (error) {
|
|
135
|
-
res.status(500).json({
|
|
184
|
+
res.status(500).json({
|
|
185
|
+
status: 'Error',
|
|
186
|
+
message: 'Error on remove product image.',
|
|
187
|
+
error: error
|
|
188
|
+
});
|
|
136
189
|
}
|
|
137
190
|
}
|
|
138
191
|
|
|
@@ -144,10 +197,18 @@ async function getCollections(req, res) {
|
|
|
144
197
|
});
|
|
145
198
|
|
|
146
199
|
try {
|
|
147
|
-
const result = await req.client.getCollections(
|
|
200
|
+
const result = await req.client.getCollections(
|
|
201
|
+
phone,
|
|
202
|
+
qnt,
|
|
203
|
+
max);
|
|
204
|
+
|
|
148
205
|
res.status(201).json({ status: 'success', response: result });
|
|
149
206
|
} catch (error) {
|
|
150
|
-
res.status(500).json({
|
|
207
|
+
res.status(500).json({
|
|
208
|
+
status: 'Error',
|
|
209
|
+
message: 'Error on get collections.',
|
|
210
|
+
error: error
|
|
211
|
+
});
|
|
151
212
|
}
|
|
152
213
|
}
|
|
153
214
|
|
|
@@ -162,7 +223,11 @@ async function createCollection(req, res) {
|
|
|
162
223
|
const result = await req.client.createCollection(name, products);
|
|
163
224
|
res.status(201).json({ status: 'success', response: result });
|
|
164
225
|
} catch (error) {
|
|
165
|
-
res.status(500).json({
|
|
226
|
+
res.status(500).json({
|
|
227
|
+
status: 'Error',
|
|
228
|
+
message: 'Error on create collection.',
|
|
229
|
+
error: error
|
|
230
|
+
});
|
|
166
231
|
}
|
|
167
232
|
}
|
|
168
233
|
|
|
@@ -177,7 +242,11 @@ async function editCollection(req, res) {
|
|
|
177
242
|
const result = await req.client.editCollection(id, options);
|
|
178
243
|
res.status(201).json({ status: 'success', response: result });
|
|
179
244
|
} catch (error) {
|
|
180
|
-
res.status(500).json({
|
|
245
|
+
res.status(500).json({
|
|
246
|
+
status: 'Error',
|
|
247
|
+
message: 'Error on edit collection.',
|
|
248
|
+
error: error
|
|
249
|
+
});
|
|
181
250
|
}
|
|
182
251
|
}
|
|
183
252
|
|
|
@@ -192,7 +261,11 @@ async function deleteCollection(req, res) {
|
|
|
192
261
|
const result = await req.client.deleteCollection(id);
|
|
193
262
|
res.status(201).json({ status: 'success', response: result });
|
|
194
263
|
} catch (error) {
|
|
195
|
-
res.status(500).json({
|
|
264
|
+
res.status(500).json({
|
|
265
|
+
status: 'Error',
|
|
266
|
+
message: 'Error on delete collection.',
|
|
267
|
+
error: error
|
|
268
|
+
});
|
|
196
269
|
}
|
|
197
270
|
}
|
|
198
271
|
|
|
@@ -207,7 +280,11 @@ async function setProductVisibility(req, res) {
|
|
|
207
280
|
const result = await req.client.setProductVisibility(id, value);
|
|
208
281
|
res.status(201).json({ status: 'success', response: result });
|
|
209
282
|
} catch (error) {
|
|
210
|
-
res.status(500).json({
|
|
283
|
+
res.status(500).json({
|
|
284
|
+
status: 'Error',
|
|
285
|
+
message: 'Error on set product visibility.',
|
|
286
|
+
error: error
|
|
287
|
+
});
|
|
211
288
|
}
|
|
212
289
|
}
|
|
213
290
|
|
|
@@ -222,7 +299,11 @@ async function updateCartEnabled(req, res) {
|
|
|
222
299
|
const result = await req.client.updateCartEnabled(enabled);
|
|
223
300
|
res.status(201).json({ status: 'success', response: result });
|
|
224
301
|
} catch (error) {
|
|
225
|
-
res.status(500).json({
|
|
302
|
+
res.status(500).json({
|
|
303
|
+
status: 'Error',
|
|
304
|
+
message: 'Error on set enabled cart.',
|
|
305
|
+
error: error
|
|
306
|
+
});
|
|
226
307
|
}
|
|
227
308
|
}
|
|
228
309
|
|
|
@@ -237,7 +318,10 @@ async function sendLinkCatalog(req, res) {
|
|
|
237
318
|
const session = await req.client.getWid();
|
|
238
319
|
const catalogLink = (0, _functions.createCatalogLink)(session);
|
|
239
320
|
for (const phone of phones) {
|
|
240
|
-
const result = await req.client.sendText(
|
|
321
|
+
const result = await req.client.sendText(
|
|
322
|
+
phone,
|
|
323
|
+
`${message} ${catalogLink}`,
|
|
324
|
+
{
|
|
241
325
|
useTemplateButtons: true,
|
|
242
326
|
buttons: [
|
|
243
327
|
{
|
|
@@ -246,11 +330,16 @@ async function sendLinkCatalog(req, res) {
|
|
|
246
330
|
}]
|
|
247
331
|
|
|
248
332
|
});
|
|
333
|
+
|
|
249
334
|
results.push({ phone, status: result.id });
|
|
250
335
|
}
|
|
251
336
|
return res.status(200).json({ status: 'success', response: results });
|
|
252
337
|
} catch (error) {
|
|
253
|
-
res.status(500).json({
|
|
338
|
+
res.status(500).json({
|
|
339
|
+
status: 'Error',
|
|
340
|
+
message: 'Error on set enabled cart.',
|
|
341
|
+
error: error
|
|
342
|
+
});
|
|
254
343
|
}
|
|
255
344
|
}
|
|
256
|
-
//# sourceMappingURL=catalogController.js.map
|
|
345
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfZnVuY3Rpb25zIiwicmVxdWlyZSIsImdldFByb2R1Y3RzIiwicmVxIiwicmVzIiwicGhvbmUiLCJxbnQiLCJxdWVyeSIsInN0YXR1cyIsInNlbmQiLCJtZXNzYWdlIiwicmVzdWx0IiwiY2xpZW50IiwianNvbiIsInJlc3BvbnNlIiwiZXJyb3IiLCJnZXRQcm9kdWN0QnlJZCIsImlkIiwiZWRpdFByb2R1Y3QiLCJvcHRpb25zIiwiYm9keSIsImRlbFByb2R1Y3RzIiwiY2hhbmdlUHJvZHVjdEltYWdlIiwiYmFzZTY0IiwiYWRkUHJvZHVjdCIsIm5hbWUiLCJpbWFnZSIsImRlc2NyaXB0aW9uIiwicHJpY2UiLCJ1cmwiLCJyZXRhaWxlcklkIiwiY3VycmVuY3kiLCJjcmVhdGVQcm9kdWN0IiwiY29uc29sZSIsImxvZyIsImFkZFByb2R1Y3RJbWFnZSIsInJlbW92ZVByb2R1Y3RJbWFnZSIsImluZGV4IiwiZ2V0Q29sbGVjdGlvbnMiLCJtYXgiLCJjcmVhdGVDb2xsZWN0aW9uIiwicHJvZHVjdHMiLCJlZGl0Q29sbGVjdGlvbiIsImRlbGV0ZUNvbGxlY3Rpb24iLCJzZXRQcm9kdWN0VmlzaWJpbGl0eSIsInZhbHVlIiwidXBkYXRlQ2FydEVuYWJsZWQiLCJlbmFibGVkIiwic2VuZExpbmtDYXRhbG9nIiwicGhvbmVzIiwicmVzdWx0cyIsInNlc3Npb24iLCJnZXRXaWQiLCJjYXRhbG9nTGluayIsImNyZWF0ZUNhdGFsb2dMaW5rIiwic2VuZFRleHQiLCJ1c2VUZW1wbGF0ZUJ1dHRvbnMiLCJidXR0b25zIiwidGV4dCIsInB1c2giXSwic291cmNlcyI6WyIuLi8uLi9zcmMvY29udHJvbGxlci9jYXRhbG9nQ29udHJvbGxlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogQ29weXJpZ2h0IDIwMjEgV1BQQ29ubmVjdCBUZWFtXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5pbXBvcnQgeyBjcmVhdGVDYXRhbG9nTGluayB9IGZyb20gJy4uL3V0aWwvZnVuY3Rpb25zJztcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldFByb2R1Y3RzKHJlcTogYW55LCByZXM6IGFueSkge1xuICBjb25zdCB7IHBob25lLCBxbnQgfSA9IHJlcS5xdWVyeTtcbiAgaWYgKCFwaG9uZSlcbiAgICByZXR1cm4gcmVzLnN0YXR1cyg0MDEpLnNlbmQoe1xuICAgICAgbWVzc2FnZTpcbiAgICAgICAgJ1BsZWFzZSBzZW5kIHRoZSBjb250YWN0IG51bWJlciB5b3Ugd2lzaCB0byByZXR1cm4gdGhlIHByb2R1Y3RzLicsXG4gICAgfSk7XG5cbiAgdHJ5IHtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCByZXEuY2xpZW50LmdldFByb2R1Y3RzKFxuICAgICAgcGhvbmUgYXMgc3RyaW5nLFxuICAgICAgcW50IGFzIHVua25vd24gYXMgbnVtYmVyXG4gICAgKTtcbiAgICByZXMuc3RhdHVzKDIwMSkuanNvbih7IHN0YXR1czogJ3N1Y2Nlc3MnLCByZXNwb25zZTogcmVzdWx0IH0pO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJlcy5zdGF0dXMoNTAwKS5qc29uKHtcbiAgICAgIHN0YXR1czogJ0Vycm9yJyxcbiAgICAgIG1lc3NhZ2U6ICdFcnJvciBvbiBnZXQgcHJvZHVjdHMnLFxuICAgICAgZXJyb3I6IGVycm9yLFxuICAgIH0pO1xuICB9XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRQcm9kdWN0QnlJZChyZXE6IGFueSwgcmVzOiBhbnkpIHtcbiAgY29uc3QgeyBwaG9uZSwgaWQgfSA9IHJlcS5xdWVyeTtcbiAgaWYgKCFwaG9uZSB8fCAhaWQpXG4gICAgcmV0dXJuIHJlcy5zdGF0dXMoNDAxKS5zZW5kKHtcbiAgICAgIG1lc3NhZ2U6ICdQbGVhc2Ugc2VuZCB0aGUgY29udGFjdCBudW1iZXIgYW5kIHByb2R1Y3RJZC4nLFxuICAgIH0pO1xuXG4gIHRyeSB7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcmVxLmNsaWVudC5nZXRQcm9kdWN0QnlJZChcbiAgICAgIHBob25lIGFzIHN0cmluZyxcbiAgICAgIGlkIGFzIHN0cmluZ1xuICAgICk7XG4gICAgcmVzLnN0YXR1cygyMDEpLmpzb24oeyBzdGF0dXM6ICdzdWNjZXNzJywgcmVzcG9uc2U6IHJlc3VsdCB9KTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXNcbiAgICAgIC5zdGF0dXMoNTAwKVxuICAgICAgLmpzb24oeyBzdGF0dXM6ICdFcnJvcicsIG1lc3NhZ2U6ICdFcnJvciBvbiBnZXQgcHJvZHVjdCcsIGVycm9yOiBlcnJvciB9KTtcbiAgfVxufVxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGVkaXRQcm9kdWN0KHJlcTogYW55LCByZXM6IGFueSkge1xuICBjb25zdCB7IGlkLCBvcHRpb25zIH0gPSByZXEuYm9keTtcbiAgaWYgKCFpZCB8fCAhb3B0aW9ucylcbiAgICByZXR1cm4gcmVzLnN0YXR1cyg0MDEpLnNlbmQoe1xuICAgICAgbWVzc2FnZTogJ3Byb2R1Y3RJZCBvciBvcHRpb25zIHdhcyBub3QgaW5mb3JtZWQnLFxuICAgIH0pO1xuXG4gIHRyeSB7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcmVxLmNsaWVudC5lZGl0UHJvZHVjdChpZCwgb3B0aW9ucyk7XG4gICAgcmVzLnN0YXR1cygyMDEpLmpzb24oeyBzdGF0dXM6ICdzdWNjZXNzJywgcmVzcG9uc2U6IHJlc3VsdCB9KTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXMuc3RhdHVzKDUwMCkuanNvbih7XG4gICAgICBzdGF0dXM6ICdFcnJvcicsXG4gICAgICBtZXNzYWdlOiAnRXJyb3Igb24gZWRpdCBwcm9kdWN0LicsXG4gICAgICBlcnJvcjogZXJyb3IsXG4gICAgfSk7XG4gIH1cbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGRlbFByb2R1Y3RzKHJlcTogYW55LCByZXM6IGFueSkge1xuICBjb25zdCB7IGlkIH0gPSByZXEuYm9keTtcbiAgaWYgKCFpZClcbiAgICByZXR1cm4gcmVzLnN0YXR1cyg0MDEpLnNlbmQoe1xuICAgICAgbWVzc2FnZTogJ3Byb2R1Y3RzIElkIHdhcyBub3QgaW5mb3JtZWQnLFxuICAgIH0pO1xuXG4gIHRyeSB7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcmVxLmNsaWVudC5kZWxQcm9kdWN0cyhpZCk7XG4gICAgcmVzLnN0YXR1cygyMDEpLmpzb24oeyBzdGF0dXM6ICdzdWNjZXNzJywgcmVzcG9uc2U6IHJlc3VsdCB9KTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXMuc3RhdHVzKDUwMCkuanNvbih7XG4gICAgICBzdGF0dXM6ICdFcnJvcicsXG4gICAgICBtZXNzYWdlOiAnRXJyb3Igb24gZGVsZXRlIHByb2R1Y3QuJyxcbiAgICAgIGVycm9yOiBlcnJvcixcbiAgICB9KTtcbiAgfVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY2hhbmdlUHJvZHVjdEltYWdlKHJlcTogYW55LCByZXM6IGFueSkge1xuICBjb25zdCB7IGlkLCBiYXNlNjQgfSA9IHJlcS5ib2R5O1xuICBpZiAoIWlkIHx8ICFiYXNlNjQpXG4gICAgcmV0dXJuIHJlcy5zdGF0dXMoNDAxKS5zZW5kKHtcbiAgICAgIG1lc3NhZ2U6ICdwcm9kdWN0SWQgYW5kIGJhc2U2NCB3YXMgbm90IGluZm9ybWVkJyxcbiAgICB9KTtcblxuICB0cnkge1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHJlcS5jbGllbnQuY2hhbmdlUHJvZHVjdEltYWdlKGlkLCBiYXNlNjQpO1xuICAgIHJlcy5zdGF0dXMoMjAxKS5qc29uKHsgc3RhdHVzOiAnc3VjY2VzcycsIHJlc3BvbnNlOiByZXN1bHQgfSk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmVzLnN0YXR1cyg1MDApLmpzb24oe1xuICAgICAgc3RhdHVzOiAnRXJyb3InLFxuICAgICAgbWVzc2FnZTogJ0Vycm9yIG9uIGNoYW5nZSBwcm9kdWN0IGltYWdlLicsXG4gICAgICBlcnJvcjogZXJyb3IsXG4gICAgfSk7XG4gIH1cbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGFkZFByb2R1Y3QocmVxOiBhbnksIHJlczogYW55KSB7XG4gIGNvbnN0IHtcbiAgICBuYW1lLFxuICAgIGltYWdlLFxuICAgIGRlc2NyaXB0aW9uLFxuICAgIHByaWNlLFxuICAgIHVybCxcbiAgICByZXRhaWxlcklkLFxuICAgIGN1cnJlbmN5ID0gJ0JSTCcsXG4gIH0gPSByZXEuYm9keTtcbiAgaWYgKCFuYW1lIHx8ICFpbWFnZSB8fCAhcHJpY2UpXG4gICAgcmV0dXJuIHJlcy5zdGF0dXMoNDAxKS5zZW5kKHtcbiAgICAgIG1lc3NhZ2U6ICduYW1lLCBwcmljZSBhbmQgaW1hZ2Ugd2FzIG5vdCBpbmZvcm1lZCcsXG4gICAgfSk7XG5cbiAgdHJ5IHtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCByZXEuY2xpZW50LmNyZWF0ZVByb2R1Y3QoXG4gICAgICBuYW1lLFxuICAgICAgaW1hZ2UsXG4gICAgICBkZXNjcmlwdGlvbixcbiAgICAgIHByaWNlLFxuICAgICAgZmFsc2UsXG4gICAgICB1cmwsXG4gICAgICByZXRhaWxlcklkLFxuICAgICAgY3VycmVuY3lcbiAgICApO1xuICAgIHJlcy5zdGF0dXMoMjAxKS5qc29uKHsgc3RhdHVzOiAnc3VjY2VzcycsIHJlc3BvbnNlOiByZXN1bHQgfSk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgY29uc29sZS5sb2coZXJyb3IpO1xuICAgIHJlcy5zdGF0dXMoNTAwKS5qc29uKHtcbiAgICAgIHN0YXR1czogJ0Vycm9yJyxcbiAgICAgIG1lc3NhZ2U6ICdFcnJvciBvbiBhZGQgcHJvZHVjdC4nLFxuICAgICAgZXJyb3I6IGVycm9yLFxuICAgIH0pO1xuICB9XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBhZGRQcm9kdWN0SW1hZ2UocmVxOiBhbnksIHJlczogYW55KSB7XG4gIGNvbnN0IHsgaWQsIGJhc2U2NCB9ID0gcmVxLmJvZHk7XG4gIGlmICghaWQgfHwgIWJhc2U2NClcbiAgICByZXR1cm4gcmVzLnN0YXR1cyg0MDEpLnNlbmQoe1xuICAgICAgbWVzc2FnZTogJ3Byb2R1Y3RJZCBhbmQgYmFzZTY0IHdhcyBub3QgaW5mb3JtZWQnLFxuICAgIH0pO1xuXG4gIHRyeSB7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcmVxLmNsaWVudC5hZGRQcm9kdWN0SW1hZ2UoaWQsIGJhc2U2NCk7XG4gICAgcmVzLnN0YXR1cygyMDEpLmpzb24oeyBzdGF0dXM6ICdzdWNjZXNzJywgcmVzcG9uc2U6IHJlc3VsdCB9KTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXMuc3RhdHVzKDUwMCkuanNvbih7XG4gICAgICBzdGF0dXM6ICdFcnJvcicsXG4gICAgICBtZXNzYWdlOiAnRXJyb3Igb24gYWRkIHByb2R1Y3QgaW1hZ2UuJyxcbiAgICAgIGVycm9yOiBlcnJvcixcbiAgICB9KTtcbiAgfVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVtb3ZlUHJvZHVjdEltYWdlKHJlcTogYW55LCByZXM6IGFueSkge1xuICBjb25zdCB7IGlkLCBpbmRleCB9ID0gcmVxLmJvZHk7XG4gIGlmICghaWQgfHwgIWluZGV4KVxuICAgIHJldHVybiByZXMuc3RhdHVzKDQwMSkuc2VuZCh7XG4gICAgICBtZXNzYWdlOiAncHJvZHVjdElkIGFuZCBpbmRleCBpbWFnZSB3YXMgbm90IGluZm9ybWVkJyxcbiAgICB9KTtcblxuICB0cnkge1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHJlcS5jbGllbnQucmVtb3ZlUHJvZHVjdEltYWdlKGlkLCBpbmRleCk7XG4gICAgcmVzLnN0YXR1cygyMDEpLmpzb24oeyBzdGF0dXM6ICdzdWNjZXNzJywgcmVzcG9uc2U6IHJlc3VsdCB9KTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXMuc3RhdHVzKDUwMCkuanNvbih7XG4gICAgICBzdGF0dXM6ICdFcnJvcicsXG4gICAgICBtZXNzYWdlOiAnRXJyb3Igb24gcmVtb3ZlIHByb2R1Y3QgaW1hZ2UuJyxcbiAgICAgIGVycm9yOiBlcnJvcixcbiAgICB9KTtcbiAgfVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0Q29sbGVjdGlvbnMocmVxOiBhbnksIHJlczogYW55KSB7XG4gIGNvbnN0IHsgcGhvbmUsIHFudCwgbWF4IH0gPSByZXEucXVlcnk7XG4gIGlmICghcGhvbmUpXG4gICAgcmV0dXJuIHJlcy5zdGF0dXMoNDAxKS5zZW5kKHtcbiAgICAgIG1lc3NhZ2U6ICdwaG9uZSB3YXMgbm90IGluZm9ybWVkJyxcbiAgICB9KTtcblxuICB0cnkge1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHJlcS5jbGllbnQuZ2V0Q29sbGVjdGlvbnMoXG4gICAgICBwaG9uZSBhcyBzdHJpbmcsXG4gICAgICBxbnQgYXMgc3RyaW5nLFxuICAgICAgbWF4IGFzIHN0cmluZ1xuICAgICk7XG4gICAgcmVzLnN0YXR1cygyMDEpLmpzb24oeyBzdGF0dXM6ICdzdWNjZXNzJywgcmVzcG9uc2U6IHJlc3VsdCB9KTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXMuc3RhdHVzKDUwMCkuanNvbih7XG4gICAgICBzdGF0dXM6ICdFcnJvcicsXG4gICAgICBtZXNzYWdlOiAnRXJyb3Igb24gZ2V0IGNvbGxlY3Rpb25zLicsXG4gICAgICBlcnJvcjogZXJyb3IsXG4gICAgfSk7XG4gIH1cbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNyZWF0ZUNvbGxlY3Rpb24ocmVxOiBhbnksIHJlczogYW55KSB7XG4gIGNvbnN0IHsgbmFtZSwgcHJvZHVjdHMgfSA9IHJlcS5ib2R5O1xuICBpZiAoIW5hbWUgfHwgIXByb2R1Y3RzKVxuICAgIHJldHVybiByZXMuc3RhdHVzKDQwMSkuc2VuZCh7XG4gICAgICBtZXNzYWdlOiAnbmFtZSBvciBwcm9kdWN0cyB3YXMgbm90IGluZm9ybWVkJyxcbiAgICB9KTtcblxuICB0cnkge1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHJlcS5jbGllbnQuY3JlYXRlQ29sbGVjdGlvbihuYW1lLCBwcm9kdWN0cyk7XG4gICAgcmVzLnN0YXR1cygyMDEpLmpzb24oeyBzdGF0dXM6ICdzdWNjZXNzJywgcmVzcG9uc2U6IHJlc3VsdCB9KTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXMuc3RhdHVzKDUwMCkuanNvbih7XG4gICAgICBzdGF0dXM6ICdFcnJvcicsXG4gICAgICBtZXNzYWdlOiAnRXJyb3Igb24gY3JlYXRlIGNvbGxlY3Rpb24uJyxcbiAgICAgIGVycm9yOiBlcnJvcixcbiAgICB9KTtcbiAgfVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZWRpdENvbGxlY3Rpb24ocmVxOiBhbnksIHJlczogYW55KSB7XG4gIGNvbnN0IHsgaWQsIG9wdGlvbnMgfSA9IHJlcS5ib2R5O1xuICBpZiAoIWlkIHx8ICFvcHRpb25zKVxuICAgIHJldHVybiByZXMuc3RhdHVzKDQwMSkuc2VuZCh7XG4gICAgICBtZXNzYWdlOiAnaWQgb3Igb3B0aW9ucyB3YXMgbm90IGluZm9ybWVkJyxcbiAgICB9KTtcblxuICB0cnkge1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHJlcS5jbGllbnQuZWRpdENvbGxlY3Rpb24oaWQsIG9wdGlvbnMpO1xuICAgIHJlcy5zdGF0dXMoMjAxKS5qc29uKHsgc3RhdHVzOiAnc3VjY2VzcycsIHJlc3BvbnNlOiByZXN1bHQgfSk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmVzLnN0YXR1cyg1MDApLmpzb24oe1xuICAgICAgc3RhdHVzOiAnRXJyb3InLFxuICAgICAgbWVzc2FnZTogJ0Vycm9yIG9uIGVkaXQgY29sbGVjdGlvbi4nLFxuICAgICAgZXJyb3I6IGVycm9yLFxuICAgIH0pO1xuICB9XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBkZWxldGVDb2xsZWN0aW9uKHJlcTogYW55LCByZXM6IGFueSkge1xuICBjb25zdCB7IGlkIH0gPSByZXEuYm9keTtcbiAgaWYgKCFpZClcbiAgICByZXR1cm4gcmVzLnN0YXR1cyg0MDEpLnNlbmQoe1xuICAgICAgbWVzc2FnZTogJ2lkIHdhcyBub3QgaW5mb3JtZWQnLFxuICAgIH0pO1xuXG4gIHRyeSB7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcmVxLmNsaWVudC5kZWxldGVDb2xsZWN0aW9uKGlkKTtcbiAgICByZXMuc3RhdHVzKDIwMSkuanNvbih7IHN0YXR1czogJ3N1Y2Nlc3MnLCByZXNwb25zZTogcmVzdWx0IH0pO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJlcy5zdGF0dXMoNTAwKS5qc29uKHtcbiAgICAgIHN0YXR1czogJ0Vycm9yJyxcbiAgICAgIG1lc3NhZ2U6ICdFcnJvciBvbiBkZWxldGUgY29sbGVjdGlvbi4nLFxuICAgICAgZXJyb3I6IGVycm9yLFxuICAgIH0pO1xuICB9XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzZXRQcm9kdWN0VmlzaWJpbGl0eShyZXE6IGFueSwgcmVzOiBhbnkpIHtcbiAgY29uc3QgeyBpZCwgdmFsdWUgfSA9IHJlcS5ib2R5O1xuICBpZiAoIWlkIHx8ICF2YWx1ZSlcbiAgICByZXR1cm4gcmVzLnN0YXR1cyg0MDEpLnNlbmQoe1xuICAgICAgbWVzc2FnZTogJ3Byb2R1Y3QgaWQgb3IgdmFsdWUgKGZhbHNlLCB0cnVlKSB3YXMgbm90IGluZm9ybWVkJyxcbiAgICB9KTtcblxuICB0cnkge1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHJlcS5jbGllbnQuc2V0UHJvZHVjdFZpc2liaWxpdHkoaWQsIHZhbHVlKTtcbiAgICByZXMuc3RhdHVzKDIwMSkuanNvbih7IHN0YXR1czogJ3N1Y2Nlc3MnLCByZXNwb25zZTogcmVzdWx0IH0pO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJlcy5zdGF0dXMoNTAwKS5qc29uKHtcbiAgICAgIHN0YXR1czogJ0Vycm9yJyxcbiAgICAgIG1lc3NhZ2U6ICdFcnJvciBvbiBzZXQgcHJvZHVjdCB2aXNpYmlsaXR5LicsXG4gICAgICBlcnJvcjogZXJyb3IsXG4gICAgfSk7XG4gIH1cbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHVwZGF0ZUNhcnRFbmFibGVkKHJlcTogYW55LCByZXM6IGFueSkge1xuICBjb25zdCB7IGVuYWJsZWQgfSA9IHJlcS5ib2R5O1xuICBpZiAoIWVuYWJsZWQpXG4gICAgcmV0dXJuIHJlcy5zdGF0dXMoNDAxKS5zZW5kKHtcbiAgICAgIG1lc3NhZ2U6ICdlbmFibGVkIChmYWxzZSwgdHJ1ZSkgd2FzIG5vdCBpbmZvcm1lZCcsXG4gICAgfSk7XG5cbiAgdHJ5IHtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCByZXEuY2xpZW50LnVwZGF0ZUNhcnRFbmFibGVkKGVuYWJsZWQpO1xuICAgIHJlcy5zdGF0dXMoMjAxKS5qc29uKHsgc3RhdHVzOiAnc3VjY2VzcycsIHJlc3BvbnNlOiByZXN1bHQgfSk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmVzLnN0YXR1cyg1MDApLmpzb24oe1xuICAgICAgc3RhdHVzOiAnRXJyb3InLFxuICAgICAgbWVzc2FnZTogJ0Vycm9yIG9uIHNldCBlbmFibGVkIGNhcnQuJyxcbiAgICAgIGVycm9yOiBlcnJvcixcbiAgICB9KTtcbiAgfVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc2VuZExpbmtDYXRhbG9nKHJlcTogYW55LCByZXM6IGFueSkge1xuICBjb25zdCB7IHBob25lcywgbWVzc2FnZSB9ID0gcmVxLmJvZHk7XG4gIGlmICghcGhvbmVzKVxuICAgIHJldHVybiByZXMuc3RhdHVzKDQwMSkuc2VuZCh7XG4gICAgICBtZXNzYWdlOiAncGhvbmVzIHdhcyBub3QgaW5mb3JtZWQnLFxuICAgIH0pO1xuICBjb25zdCByZXN1bHRzID0gW107XG4gIHRyeSB7XG4gICAgY29uc3Qgc2Vzc2lvbiA9IGF3YWl0IHJlcS5jbGllbnQuZ2V0V2lkKCk7XG4gICAgY29uc3QgY2F0YWxvZ0xpbmsgPSBjcmVhdGVDYXRhbG9nTGluayhzZXNzaW9uKTtcbiAgICBmb3IgKGNvbnN0IHBob25lIG9mIHBob25lcykge1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcmVxLmNsaWVudC5zZW5kVGV4dChcbiAgICAgICAgcGhvbmUsXG4gICAgICAgIGAke21lc3NhZ2V9ICR7Y2F0YWxvZ0xpbmt9YCxcbiAgICAgICAge1xuICAgICAgICAgIHVzZVRlbXBsYXRlQnV0dG9uczogdHJ1ZSxcbiAgICAgICAgICBidXR0b25zOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHVybDogY2F0YWxvZ0xpbmssXG4gICAgICAgICAgICAgIHRleHQ6ICdBYnJpciBjYXTDoWxvZ28nLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICBdLFxuICAgICAgICB9XG4gICAgICApO1xuICAgICAgKHJlc3VsdHMgYXMgYW55KS5wdXNoKHsgcGhvbmUsIHN0YXR1czogcmVzdWx0LmlkIH0pO1xuICAgIH1cbiAgICByZXR1cm4gcmVzLnN0YXR1cygyMDApLmpzb24oeyBzdGF0dXM6ICdzdWNjZXNzJywgcmVzcG9uc2U6IHJlc3VsdHMgfSk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmVzLnN0YXR1cyg1MDApLmpzb24oe1xuICAgICAgc3RhdHVzOiAnRXJyb3InLFxuICAgICAgbWVzc2FnZTogJ0Vycm9yIG9uIHNldCBlbmFibGVkIGNhcnQuJyxcbiAgICAgIGVycm9yOiBlcnJvcixcbiAgICB9KTtcbiAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7QUFlQSxJQUFBQSxVQUFBLEdBQUFDLE9BQUEsc0JBQXNELENBZnREO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUdPLGVBQWVDLFdBQVdBLENBQUNDLEdBQVEsRUFBRUMsR0FBUSxFQUFFLENBQ3BELE1BQU0sRUFBRUMsS0FBSyxFQUFFQyxHQUFHLENBQUMsQ0FBQyxHQUFHSCxHQUFHLENBQUNJLEtBQUssQ0FDaEMsSUFBSSxDQUFDRixLQUFLLEVBQ1IsT0FBT0QsR0FBRyxDQUFDSSxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUNDLElBQUksQ0FBQyxFQUMxQkMsT0FBTyxFQUNMLGlFQUFpRSxDQUNyRSxDQUFDLENBQUMsQ0FFSixJQUFJLENBQ0YsTUFBTUMsTUFBTSxHQUFHLE1BQU1SLEdBQUcsQ0FBQ1MsTUFBTSxDQUFDVixXQUFXLENBQ3pDRyxLQUFLLEVBQ0xDLEdBQUcsQ0FDSjtJQUNERixHQUFHLENBQUNJLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQ0ssSUFBSSxDQUFDLEVBQUVMLE1BQU0sRUFBRSxTQUFTLEVBQUVNLFFBQVEsRUFBRUgsTUFBTSxDQUFDLENBQUMsQ0FBQztFQUMvRCxDQUFDLENBQUMsT0FBT0ksS0FBSyxFQUFFO0lBQ2RYLEdBQUcsQ0FBQ0ksTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDSyxJQUFJLENBQUM7TUFDbkJMLE1BQU0sRUFBRSxP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
|