parse-server 9.7.0 → 9.7.1-alpha.2
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/lib/Routers/FilesRouter.js +34 -6
- package/lib/batch.js +4 -1
- package/package.json +7 -7
|
@@ -16,6 +16,7 @@ function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r
|
|
|
16
16
|
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
17
17
|
const triggers = require('../triggers');
|
|
18
18
|
const Utils = require('../Utils');
|
|
19
|
+
const auth = require('../Auth');
|
|
19
20
|
/**
|
|
20
21
|
* Wraps a readable stream in a Readable that enforces a byte size limit.
|
|
21
22
|
* Data flow is lazy: the source is not read until a consumer starts reading
|
|
@@ -100,6 +101,21 @@ class FilesRouter {
|
|
|
100
101
|
const parts = req.params.filepath;
|
|
101
102
|
return Array.isArray(parts) ? parts.join('/') : parts;
|
|
102
103
|
}
|
|
104
|
+
static async _resolveAuth(req, config) {
|
|
105
|
+
const sessionToken = req.get('X-Parse-Session-Token');
|
|
106
|
+
if (!sessionToken) {
|
|
107
|
+
return null;
|
|
108
|
+
}
|
|
109
|
+
try {
|
|
110
|
+
return await auth.getAuthForSessionToken({
|
|
111
|
+
config,
|
|
112
|
+
sessionToken,
|
|
113
|
+
installationId: req.get('X-Parse-Installation-Id')
|
|
114
|
+
});
|
|
115
|
+
} catch {
|
|
116
|
+
return null;
|
|
117
|
+
}
|
|
118
|
+
}
|
|
103
119
|
static validateDirectory(directory) {
|
|
104
120
|
if (typeof directory !== 'string') {
|
|
105
121
|
return new _node.default.Error(_node.default.Error.INVALID_FILE_NAME, 'Directory must be a string.');
|
|
@@ -147,9 +163,10 @@ class FilesRouter {
|
|
|
147
163
|
let file = new _node.default.File(filename, {
|
|
148
164
|
base64: ''
|
|
149
165
|
}, contentType);
|
|
166
|
+
const fileAuth = await FilesRouter._resolveAuth(req, config);
|
|
150
167
|
const triggerResult = await triggers.maybeRunFileTrigger(triggers.Types.beforeFind, {
|
|
151
168
|
file
|
|
152
|
-
}, config,
|
|
169
|
+
}, config, fileAuth);
|
|
153
170
|
if (triggerResult?.file?._name) {
|
|
154
171
|
filename = triggerResult?.file?._name;
|
|
155
172
|
contentType = mime.getType(filename);
|
|
@@ -158,7 +175,17 @@ class FilesRouter {
|
|
|
158
175
|
'X-Content-Type-Options': 'nosniff'
|
|
159
176
|
};
|
|
160
177
|
if (isFileStreamable(req, filesController)) {
|
|
161
|
-
|
|
178
|
+
const afterFind = await triggers.maybeRunFileTrigger(triggers.Types.afterFind, {
|
|
179
|
+
file,
|
|
180
|
+
forceDownload: false,
|
|
181
|
+
responseHeaders: {
|
|
182
|
+
...defaultResponseHeaders
|
|
183
|
+
}
|
|
184
|
+
}, config, fileAuth);
|
|
185
|
+
if (afterFind?.forceDownload) {
|
|
186
|
+
res.set('Content-Disposition', `attachment;filename=${afterFind.file?._name || filename}`);
|
|
187
|
+
}
|
|
188
|
+
for (const [key, value] of Object.entries(afterFind?.responseHeaders ?? defaultResponseHeaders)) {
|
|
162
189
|
res.set(key, value);
|
|
163
190
|
}
|
|
164
191
|
filesController.handleFileStream(config, filename, req, res, contentType).catch(() => {
|
|
@@ -185,7 +212,7 @@ class FilesRouter {
|
|
|
185
212
|
responseHeaders: {
|
|
186
213
|
...defaultResponseHeaders
|
|
187
214
|
}
|
|
188
|
-
}, config,
|
|
215
|
+
}, config, fileAuth);
|
|
189
216
|
if (afterFind?.file) {
|
|
190
217
|
contentType = mime.getType(afterFind.file._name);
|
|
191
218
|
data = Buffer.from(afterFind.file._data, 'base64');
|
|
@@ -676,9 +703,10 @@ class FilesRouter {
|
|
|
676
703
|
const file = new _node.default.File(filename, {
|
|
677
704
|
base64: ''
|
|
678
705
|
});
|
|
706
|
+
const fileAuth = await FilesRouter._resolveAuth(req, config);
|
|
679
707
|
const triggerResult = await triggers.maybeRunFileTrigger(triggers.Types.beforeFind, {
|
|
680
708
|
file
|
|
681
|
-
}, config,
|
|
709
|
+
}, config, fileAuth);
|
|
682
710
|
if (triggerResult?.file?._name) {
|
|
683
711
|
filename = triggerResult.file._name;
|
|
684
712
|
}
|
|
@@ -691,7 +719,7 @@ class FilesRouter {
|
|
|
691
719
|
}
|
|
692
720
|
await triggers.maybeRunFileTrigger(triggers.Types.afterFind, {
|
|
693
721
|
file
|
|
694
|
-
}, config,
|
|
722
|
+
}, config, fileAuth);
|
|
695
723
|
res.status(200);
|
|
696
724
|
res.json(data);
|
|
697
725
|
} catch (e) {
|
|
@@ -714,4 +742,4 @@ function isFileStreamable(req, filesController) {
|
|
|
714
742
|
const end = Number(range[1]);
|
|
715
743
|
return (!isNaN(start) || !isNaN(end)) && typeof filesController.adapter.handleFileStream === 'function';
|
|
716
744
|
}
|
|
717
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfZXhwcmVzcyIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJyZXF1aXJlIiwiTWlkZGxld2FyZXMiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsIl9ub2RlIiwiX0NvbmZpZyIsIl9sb2dnZXIiLCJfc3RyZWFtIiwiX0Vycm9yIiwiZSIsInQiLCJXZWFrTWFwIiwiciIsIm4iLCJfX2VzTW9kdWxlIiwibyIsImkiLCJmIiwiX19wcm90b19fIiwiZGVmYXVsdCIsImhhcyIsImdldCIsInNldCIsImhhc093blByb3BlcnR5IiwiY2FsbCIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwidHJpZ2dlcnMiLCJVdGlscyIsImNyZWF0ZVNpemVMaW1pdGVkU3RyZWFtIiwic291cmNlIiwibWF4Qnl0ZXMiLCJ0b3RhbEJ5dGVzIiwic3RhcnRlZCIsInNvdXJjZUVuZGVkIiwib25EYXRhIiwib25FbmQiLCJvbkVycm9yIiwib3V0cHV0IiwiUmVhZGFibGUiLCJyZWFkIiwiY2h1bmsiLCJsZW5ndGgiLCJkZXN0cm95IiwiUGFyc2UiLCJFcnJvciIsIkZJTEVfU0FWRV9FUlJPUiIsInB1c2giLCJwYXVzZSIsImVyciIsIm9uIiwicmVzdW1lIiwiY2FsbGJhY2siLCJyZW1vdmVMaXN0ZW5lciIsIlJFU0VSVkVEX0RJUkVDVE9SWV9TRUdNRU5UUyIsImV4cG9ydHMiLCJGaWxlc1JvdXRlciIsImV4cHJlc3NSb3V0ZXIiLCJtYXhVcGxvYWRTaXplIiwicm91dGVyIiwiZXhwcmVzcyIsIlJvdXRlciIsIm1ldGFkYXRhSGFuZGxlciIsImdldEhhbmRsZXIiLCJwb3N0IiwicmVxIiwicmVzIiwibmV4dCIsIklOVkFMSURfRklMRV9OQU1FIiwiX2Vhcmx5SGVhZGVyc01pZGRsZXdhcmUiLCJfYm9keVBhcnNpbmdNaWRkbGV3YXJlIiwiaGFuZGxlUGFyc2VIZWFkZXJzIiwiaGFuZGxlUGFyc2VTZXNzaW9uIiwiY3JlYXRlSGFuZGxlciIsImJpbmQiLCJkZWxldGUiLCJlbmZvcmNlTWFzdGVyS2V5QWNjZXNzIiwiZGVsZXRlSGFuZGxlciIsIl9nZXRGaWxlbmFtZUZyb21QYXJhbXMiLCJwYXJ0cyIsInBhcmFtcyIsImZpbGVwYXRoIiwiQXJyYXkiLCJpc0FycmF5Iiwiam9pbiIsInZhbGlkYXRlRGlyZWN0b3J5IiwiZGlyZWN0b3J5IiwiaW5jbHVkZXMiLCJzdGFydHNXaXRoIiwiZW5kc1dpdGgiLCJmaXJzdFNlZ21lbnQiLCJzcGxpdCIsImRpclJlZ2V4IiwidGVzdCIsImNvbmZpZyIsIkNvbmZpZyIsImFwcElkIiwiZXJyb3IiLCJjcmVhdGVTYW5pdGl6ZWRIdHRwRXJyb3IiLCJzdGF0dXMiLCJqc29uIiwibWVzc2FnZSIsImZpbGVuYW1lIiwiZmlsZXNDb250cm9sbGVyIiwibWltZSIsImNvbnRlbnRUeXBlIiwiZ2V0VHlwZSIsImZpbGUiLCJGaWxlIiwiYmFzZTY0IiwidHJpZ2dlclJlc3VsdCIsIm1heWJlUnVuRmlsZVRyaWdnZXIiLCJUeXBlcyIsImJlZm9yZUZpbmQiLCJhdXRoIiwiX25hbWUiLCJkZWZhdWx0UmVzcG9uc2VIZWFkZXJzIiwiaXNGaWxlU3RyZWFtYWJsZSIsImtleSIsInZhbHVlIiwiZW50cmllcyIsImhhbmRsZUZpbGVTdHJlYW0iLCJjYXRjaCIsImVuZCIsImRhdGEiLCJnZXRGaWxlRGF0YSIsInRvU3RyaW5nIiwiYWZ0ZXJGaW5kIiwiZm9yY2VEb3dubG9hZCIsInJlc3BvbnNlSGVhZGVycyIsIkJ1ZmZlciIsImZyb20iLCJfZGF0YSIsInJlc29sdmVFcnJvciIsImNvZGUiLCJTQ1JJUFRfRkFJTEVEIiwibWF4VXBsb2FkU2l6ZU92ZXJyaWRlIiwidW5kZWZpbmVkIiwibWFzdGVyS2V5IiwibG9hZE1hc3RlcktleSIsIm1hc3RlcktleUlwcyIsImNoZWNrSXAiLCJpcCIsIm1hc3RlcktleUlwc1N0b3JlIiwicGFyc2VkQnl0ZXMiLCJwYXJzZVNpemVUb0J5dGVzIiwiX21heFVwbG9hZFNpemVPdmVycmlkZSIsImRlZmF1bHRNYXhCeXRlcyIsIl9tYXhVcGxvYWRTaXplQnl0ZXMiLCJsaW1pdCIsInJhdyIsInR5cGUiLCJpc1JlYWRPbmx5IiwidXNlciIsImlzTWFzdGVyIiwiaXNMaW5rZWQiLCJBbm9ueW1vdXNVdGlscyIsImZpbGVVcGxvYWQiLCJlbmFibGVGb3JBbm9ueW1vdXNVc2VyIiwiZW5hYmxlRm9yQXV0aGVudGljYXRlZFVzZXIiLCJlbmFibGVGb3JQdWJsaWMiLCJ2YWxpZGF0ZUZpbGVuYW1lIiwiZmlsZUV4dGVuc2lvbnMiLCJpc1ZhbGlkRXh0ZW5zaW9uIiwiZXh0ZW5zaW9uIiwic29tZSIsImV4dCIsInJlZ2V4IiwiUmVnRXhwIiwic3Vic3RyaW5nIiwibGFzdEluZGV4T2YiLCJyZXBsYWNlIiwiZmlsZURhdGEiLCJwYXJzZWQiLCJKU09OIiwicGFyc2UiLCJtZXRhZGF0YSIsIklOVkFMSURfSlNPTiIsInRhZ3MiLCJPUEVSQVRJT05fRk9SQklEREVOIiwiZGlyZWN0b3J5RXJyb3IiLCJpc0J1ZmZlciIsImJvZHkiLCJfaGFuZGxlQnVmZmVyZWRVcGxvYWQiLCJfaGFuZGxlU3RyZWFtVXBsb2FkIiwiY2hlY2tQcm9oaWJpdGVkS2V5d29yZHMiLCJJTlZBTElEX0tFWV9OQU1FIiwic2V0VGFncyIsInNldE1ldGFkYXRhIiwic2V0RGlyZWN0b3J5IiwiZmlsZVNpemUiLCJieXRlTGVuZ3RoIiwiZmlsZU9iamVjdCIsImJlZm9yZVNhdmUiLCJzYXZlUmVzdWx0IiwidXJsIiwibmFtZSIsImJ1ZmZlckRhdGEiLCJfc291cmNlIiwiZm9ybWF0IiwiYnVmZmVyIiwiZmlsZU9wdGlvbnMiLCJfbWV0YWRhdGEiLCJmaWxlVGFncyIsImtleXMiLCJfdGFncyIsImFzc2lnbiIsIl9kaXJlY3RvcnkiLCJjcmVhdGVGaWxlUmVzdWx0IiwiY3JlYXRlRmlsZSIsIl91cmwiLCJfcmVxdWVzdFRhc2siLCJfcHJldmlvdXNTYXZlIiwiUHJvbWlzZSIsInJlc29sdmUiLCJhZnRlclNhdmUiLCJsb2dnZXIiLCJzdHJlYW0iLCJjb250ZW50TGVuZ3RoIiwicGFyc2VJbnQiLCJoYXNFeHRlbnNpb24iLCJzb3VyY2VUeXBlIiwiYWRhcHRlciIsImdldEZpbGVMb2NhdGlvbiIsImJlZm9yZURlbGV0ZSIsImRlbGV0ZUZpbGUiLCJhZnRlckRlbGV0ZSIsIkZJTEVfREVMRVRFX0VSUk9SIiwiZ2V0TWV0YWRhdGEiLCJyYW5nZSIsInN0YXJ0IiwiTnVtYmVyIiwiaXNOYU4iXSwic291cmNlcyI6WyIuLi8uLi9zcmMvUm91dGVycy9GaWxlc1JvdXRlci5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgZXhwcmVzcyBmcm9tICdleHByZXNzJztcbmltcG9ydCAqIGFzIE1pZGRsZXdhcmVzIGZyb20gJy4uL21pZGRsZXdhcmVzJztcbmltcG9ydCBQYXJzZSBmcm9tICdwYXJzZS9ub2RlJztcbmltcG9ydCBDb25maWcgZnJvbSAnLi4vQ29uZmlnJztcbmltcG9ydCBsb2dnZXIgZnJvbSAnLi4vbG9nZ2VyJztcbmNvbnN0IHRyaWdnZXJzID0gcmVxdWlyZSgnLi4vdHJpZ2dlcnMnKTtcbmNvbnN0IFV0aWxzID0gcmVxdWlyZSgnLi4vVXRpbHMnKTtcbmltcG9ydCB7IFJlYWRhYmxlIH0gZnJvbSAnc3RyZWFtJztcbmltcG9ydCB7IGNyZWF0ZVNhbml0aXplZEh0dHBFcnJvciB9IGZyb20gJy4uL0Vycm9yJztcblxuLyoqXG4gKiBXcmFwcyBhIHJlYWRhYmxlIHN0cmVhbSBpbiBhIFJlYWRhYmxlIHRoYXQgZW5mb3JjZXMgYSBieXRlIHNpemUgbGltaXQuXG4gKiBEYXRhIGZsb3cgaXMgbGF6eTogdGhlIHNvdXJjZSBpcyBub3QgcmVhZCB1bnRpbCBhIGNvbnN1bWVyIHN0YXJ0cyByZWFkaW5nXG4gKiBmcm9tIHRoZSByZXR1cm5lZCBzdHJlYW0gKHZpYSBwaXBlIG9yICdkYXRhJyBsaXN0ZW5lcikuIFRoaXMgZW5zdXJlcyB0aGVcbiAqIGNvbnN1bWVyJ3MgZXJyb3IgbGlzdGVuZXIgaXMgYXR0YWNoZWQgYmVmb3JlIGFueSBkYXRhIChvciBlcnJvcikgaXMgZW1pdHRlZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVNpemVMaW1pdGVkU3RyZWFtKHNvdXJjZSwgbWF4Qnl0ZXMpIHtcbiAgbGV0IHRvdGFsQnl0ZXMgPSAwO1xuICBsZXQgc3RhcnRlZCA9IGZhbHNlO1xuICBsZXQgc291cmNlRW5kZWQgPSBmYWxzZTtcbiAgbGV0IG9uRGF0YSwgb25FbmQsIG9uRXJyb3I7XG5cbiAgY29uc3Qgb3V0cHV0ID0gbmV3IFJlYWRhYmxlKHtcbiAgICByZWFkKCkge1xuICAgICAgaWYgKCFzdGFydGVkKSB7XG4gICAgICAgIHN0YXJ0ZWQgPSB0cnVlO1xuXG4gICAgICAgIG9uRGF0YSA9IChjaHVuaykgPT4ge1xuICAgICAgICAgIHRvdGFsQnl0ZXMgKz0gY2h1bmsubGVuZ3RoO1xuICAgICAgICAgIGlmICh0b3RhbEJ5dGVzID4gbWF4Qnl0ZXMpIHtcbiAgICAgICAgICAgIG91dHB1dC5kZXN0cm95KFxuICAgICAgICAgICAgICBuZXcgUGFyc2UuRXJyb3IoXG4gICAgICAgICAgICAgICAgUGFyc2UuRXJyb3IuRklMRV9TQVZFX0VSUk9SLFxuICAgICAgICAgICAgICAgIGBGaWxlIHNpemUgZXhjZWVkcyBtYXhpbXVtIGFsbG93ZWQ6ICR7bWF4Qnl0ZXN9IGJ5dGVzLmBcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKCFvdXRwdXQucHVzaChjaHVuaykpIHtcbiAgICAgICAgICAgIHNvdXJjZS5wYXVzZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICBvbkVuZCA9ICgpID0+IHtcbiAgICAgICAgICBzb3VyY2VFbmRlZCA9IHRydWU7XG4gICAgICAgICAgb3V0cHV0LnB1c2gobnVsbCk7XG4gICAgICAgIH07XG5cbiAgICAgICAgb25FcnJvciA9IChlcnIpID0+IG91dHB1dC5kZXN0cm95KGVycik7XG5cbiAgICAgICAgc291cmNlLm9uKCdkYXRhJywgb25EYXRhKTtcbiAgICAgICAgc291cmNlLm9uKCdlbmQnLCBvbkVuZCk7XG4gICAgICAgIHNvdXJjZS5vbignZXJyb3InLCBvbkVycm9yKTtcbiAgICAgIH1cblxuICAgICAgLy8gUmVzdW1lIHNvdXJjZSBpbiBjYXNlIGl0IHdhcyBwYXVzZWQgZHVlIHRvIGJhY2twcmVzc3VyZVxuICAgICAgaWYgKCFzb3VyY2VFbmRlZCkge1xuICAgICAgICBzb3VyY2UucmVzdW1lKCk7XG4gICAgICB9XG4gICAgfSxcbiAgICBkZXN0cm95KGVyciwgY2FsbGJhY2spIHtcbiAgICAgIGlmIChvbkRhdGEpIHtcbiAgICAgICAgc291cmNlLnJlbW92ZUxpc3RlbmVyKCdkYXRhJywgb25EYXRhKTtcbiAgICAgIH1cbiAgICAgIGlmIChvbkVuZCkge1xuICAgICAgICBzb3VyY2UucmVtb3ZlTGlzdGVuZXIoJ2VuZCcsIG9uRW5kKTtcbiAgICAgIH1cbiAgICAgIGlmIChvbkVycm9yKSB7XG4gICAgICAgIHNvdXJjZS5yZW1vdmVMaXN0ZW5lcignZXJyb3InLCBvbkVycm9yKTtcbiAgICAgIH1cbiAgICAgIC8vIFN1cHByZXNzIGVycm9ycyBlbWl0dGVkIGR1cmluZyBkcmFpbiAoZS5nLiBjbGllbnQgZGlzY29ubmVjdClcbiAgICAgIHNvdXJjZS5vbignZXJyb3InLCAoKSA9PiB7fSk7XG4gICAgICBpZiAoIXNvdXJjZUVuZGVkKSB7XG4gICAgICAgIHNvdXJjZS5yZXN1bWUoKTtcbiAgICAgIH1cbiAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gb3V0cHV0O1xufVxuXG4vLyBTZWdtZW50cyB0aGF0IGNvbmZsaWN0IHdpdGggc3ViLXJvdXRlcyB1bmRlciBHRVQgL2ZpbGVzLzphcHBJZC8qLiBJZiBhIGZpbGVcbi8vIGRpcmVjdG9yeSBzdGFydHMgd2l0aCBvbmUgb2YgdGhlc2UsIGl0cyBVUkwgd291bGQgbWF0Y2ggdGhlIHdyb25nIHJvdXRlXG4vLyBoYW5kbGVyLiBVcGRhdGUgdGhpcyBsaXN0IHdoZW4gYWRkaW5nIG5ldyBzdWItcm91dGVzIHRvIGV4cHJlc3NSb3V0ZXIoKS5cbmV4cG9ydCBjb25zdCBSRVNFUlZFRF9ESVJFQ1RPUllfU0VHTUVOVFMgPSBbJ21ldGFkYXRhJ107XG5cbmV4cG9ydCBjbGFzcyBGaWxlc1JvdXRlciB7XG4gIGV4cHJlc3NSb3V0ZXIoeyBtYXhVcGxvYWRTaXplID0gJzIwTWInIH0gPSB7fSkge1xuICAgIHZhciByb3V0ZXIgPSBleHByZXNzLlJvdXRlcigpO1xuICAgIC8vIE1ldGFkYXRhIHJvdXRlIG11c3QgY29tZSBiZWZvcmUgdGhlIGNhdGNoLWFsbCBHRVQgcm91dGVcbiAgICByb3V0ZXIuZ2V0KCcvZmlsZXMvOmFwcElkL21ldGFkYXRhLypmaWxlcGF0aCcsIHRoaXMubWV0YWRhdGFIYW5kbGVyKTtcbiAgICByb3V0ZXIuZ2V0KCcvZmlsZXMvOmFwcElkLypmaWxlcGF0aCcsIHRoaXMuZ2V0SGFuZGxlcik7XG5cbiAgICByb3V0ZXIucG9zdCgnL2ZpbGVzJywgZnVuY3Rpb24gKHJlcSwgcmVzLCBuZXh0KSB7XG4gICAgICBuZXh0KG5ldyBQYXJzZS5FcnJvcihQYXJzZS5FcnJvci5JTlZBTElEX0ZJTEVfTkFNRSwgJ0ZpbGVuYW1lIG5vdCBwcm92aWRlZC4nKSk7XG4gICAgfSk7XG5cbiAgICByb3V0ZXIucG9zdChcbiAgICAgICcvZmlsZXMvOmZpbGVuYW1lJyxcbiAgICAgIHRoaXMuX2Vhcmx5SGVhZGVyc01pZGRsZXdhcmUoKSxcbiAgICAgIHRoaXMuX2JvZHlQYXJzaW5nTWlkZGxld2FyZShtYXhVcGxvYWRTaXplKSxcbiAgICAgIE1pZGRsZXdhcmVzLmhhbmRsZVBhcnNlSGVhZGVycyxcbiAgICAgIE1pZGRsZXdhcmVzLmhhbmRsZVBhcnNlU2Vzc2lvbixcbiAgICAgIHRoaXMuY3JlYXRlSGFuZGxlci5iaW5kKHRoaXMpXG4gICAgKTtcblxuICAgIHJvdXRlci5kZWxldGUoXG4gICAgICAnL2ZpbGVzLypmaWxlcGF0aCcsXG4gICAgICBNaWRkbGV3YXJlcy5oYW5kbGVQYXJzZUhlYWRlcnMsXG4gICAgICBNaWRkbGV3YXJlcy5oYW5kbGVQYXJzZVNlc3Npb24sXG4gICAgICBNaWRkbGV3YXJlcy5lbmZvcmNlTWFzdGVyS2V5QWNjZXNzLFxuICAgICAgdGhpcy5kZWxldGVIYW5kbGVyXG4gICAgKTtcbiAgICByZXR1cm4gcm91dGVyO1xuICB9XG5cbiAgc3RhdGljIF9nZXRGaWxlbmFtZUZyb21QYXJhbXMocmVxKSB7XG4gICAgY29uc3QgcGFydHMgPSByZXEucGFyYW1zLmZpbGVwYXRoO1xuICAgIHJldHVybiBBcnJheS5pc0FycmF5KHBhcnRzKSA/IHBhcnRzLmpvaW4oJy8nKSA6IHBhcnRzO1xuICB9XG5cbiAgc3RhdGljIHZhbGlkYXRlRGlyZWN0b3J5KGRpcmVjdG9yeSkge1xuICAgIGlmICh0eXBlb2YgZGlyZWN0b3J5ICE9PSAnc3RyaW5nJykge1xuICAgICAgcmV0dXJuIG5ldyBQYXJzZS5FcnJvcihQYXJzZS5FcnJvci5JTlZBTElEX0ZJTEVfTkFNRSwgJ0RpcmVjdG9yeSBtdXN0IGJlIGEgc3RyaW5nLicpO1xuICAgIH1cbiAgICBpZiAoZGlyZWN0b3J5Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIG5ldyBQYXJzZS5FcnJvcihQYXJzZS5FcnJvci5JTlZBTElEX0ZJTEVfTkFNRSwgJ0RpcmVjdG9yeSBtdXN0IG5vdCBiZSBlbXB0eS4nKTtcbiAgICB9XG4gICAgaWYgKGRpcmVjdG9yeS5sZW5ndGggPiAyNTYpIHtcbiAgICAgIHJldHVybiBuZXcgUGFyc2UuRXJyb3IoUGFyc2UuRXJyb3IuSU5WQUxJRF9GSUxFX05BTUUsICdEaXJlY3RvcnkgcGF0aCBpcyB0b28gbG9uZy4nKTtcbiAgICB9XG4gICAgaWYgKGRpcmVjdG9yeS5pbmNsdWRlcygnLi4nKSkge1xuICAgICAgcmV0dXJuIG5ldyBQYXJzZS5FcnJvcihQYXJzZS5FcnJvci5JTlZBTElEX0ZJTEVfTkFNRSwgJ0RpcmVjdG9yeSBtdXN0IG5vdCBjb250YWluIFwiLi5cIi4nKTtcbiAgICB9XG4gICAgaWYgKGRpcmVjdG9yeS5zdGFydHNXaXRoKCcvJykgfHwgZGlyZWN0b3J5LmVuZHNXaXRoKCcvJykpIHtcbiAgICAgIHJldHVybiBuZXcgUGFyc2UuRXJyb3IoXG4gICAgICAgIFBhcnNlLkVycm9yLklOVkFMSURfRklMRV9OQU1FLFxuICAgICAgICAnRGlyZWN0b3J5IG11c3Qgbm90IHN0YXJ0IG9yIGVuZCB3aXRoIFwiL1wiLidcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChkaXJlY3RvcnkuaW5jbHVkZXMoJy8vJykpIHtcbiAgICAgIHJldHVybiBuZXcgUGFyc2UuRXJyb3IoXG4gICAgICAgIFBhcnNlLkVycm9yLklOVkFMSURfRklMRV9OQU1FLFxuICAgICAgICAnRGlyZWN0b3J5IG11c3Qgbm90IGNvbnRhaW4gY29uc2VjdXRpdmUgc2xhc2hlcy4nXG4gICAgICApO1xuICAgIH1cbiAgICBjb25zdCBmaXJzdFNlZ21lbnQgPSBkaXJlY3Rvcnkuc3BsaXQoJy8nKVswXTtcbiAgICBpZiAoUkVTRVJWRURfRElSRUNUT1JZX1NFR01FTlRTLmluY2x1ZGVzKGZpcnN0U2VnbWVudCkpIHtcbiAgICAgIHJldHVybiBuZXcgUGFyc2UuRXJyb3IoXG4gICAgICAgIFBhcnNlLkVycm9yLklOVkFMSURfRklMRV9OQU1FLFxuICAgICAgICBgRGlyZWN0b3J5IG11c3Qgbm90IHN0YXJ0IHdpdGggcmVzZXJ2ZWQgc2VnbWVudCBcIiR7Zmlyc3RTZWdtZW50fVwiLmBcbiAgICAgICk7XG4gICAgfVxuICAgIGNvbnN0IGRpclJlZ2V4ID0gL15bYS16QS1aMC05XVthLXpBLVowLTlfXFwtL10qJC87XG4gICAgaWYgKCFkaXJSZWdleC50ZXN0KGRpcmVjdG9yeSkpIHtcbiAgICAgIHJldHVybiBuZXcgUGFyc2UuRXJyb3IoXG4gICAgICAgIFBhcnNlLkVycm9yLklOVkFMSURfRklMRV9OQU1FLFxuICAgICAgICAnRGlyZWN0b3J5IGNvbnRhaW5zIGludmFsaWQgY2hhcmFjdGVycy4nXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGFzeW5jIGdldEhhbmRsZXIocmVxLCByZXMpIHtcbiAgICBjb25zdCBjb25maWcgPSBDb25maWcuZ2V0KHJlcS5wYXJhbXMuYXBwSWQpO1xuICAgIGlmICghY29uZmlnKSB7XG4gICAgICBjb25zdCBlcnJvciA9IGNyZWF0ZVNhbml0aXplZEh0dHBFcnJvcig0MDMsICdJbnZhbGlkIGFwcGxpY2F0aW9uIElELicsIGNvbmZpZyk7XG4gICAgICByZXMuc3RhdHVzKGVycm9yLnN0YXR1cyk7XG4gICAgICByZXMuanNvbih7IGVycm9yOiBlcnJvci5tZXNzYWdlIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGxldCBmaWxlbmFtZSA9IEZpbGVzUm91dGVyLl9nZXRGaWxlbmFtZUZyb21QYXJhbXMocmVxKTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgZmlsZXNDb250cm9sbGVyID0gY29uZmlnLmZpbGVzQ29udHJvbGxlcjtcbiAgICAgIGNvbnN0IG1pbWUgPSAoYXdhaXQgaW1wb3J0KCdtaW1lJykpLmRlZmF1bHQ7XG4gICAgICBsZXQgY29udGVudFR5cGUgPSBtaW1lLmdldFR5cGUoZmlsZW5hbWUpO1xuICAgICAgbGV0IGZpbGUgPSBuZXcgUGFyc2UuRmlsZShmaWxlbmFtZSwgeyBiYXNlNjQ6ICcnIH0sIGNvbnRlbnRUeXBlKTtcbiAgICAgIGNvbnN0IHRyaWdnZXJSZXN1bHQgPSBhd2FpdCB0cmlnZ2Vycy5tYXliZVJ1bkZpbGVUcmlnZ2VyKFxuICAgICAgICB0cmlnZ2Vycy5UeXBlcy5iZWZvcmVGaW5kLFxuICAgICAgICB7IGZpbGUgfSxcbiAgICAgICAgY29uZmlnLFxuICAgICAgICByZXEuYXV0aFxuICAgICAgKTtcbiAgICAgIGlmICh0cmlnZ2VyUmVzdWx0Py5maWxlPy5fbmFtZSkge1xuICAgICAgICBmaWxlbmFtZSA9IHRyaWdnZXJSZXN1bHQ/LmZpbGU/Ll9uYW1lO1xuICAgICAgICBjb250ZW50VHlwZSA9IG1pbWUuZ2V0VHlwZShmaWxlbmFtZSk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGRlZmF1bHRSZXNwb25zZUhlYWRlcnMgPSB7ICdYLUNvbnRlbnQtVHlwZS1PcHRpb25zJzogJ25vc25pZmYnIH07XG5cbiAgICAgIGlmIChpc0ZpbGVTdHJlYW1hYmxlKHJlcSwgZmlsZXNDb250cm9sbGVyKSkge1xuICAgICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhkZWZhdWx0UmVzcG9uc2VIZWFkZXJzKSkge1xuICAgICAgICAgIHJlcy5zZXQoa2V5LCB2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgZmlsZXNDb250cm9sbGVyLmhhbmRsZUZpbGVTdHJlYW0oY29uZmlnLCBmaWxlbmFtZSwgcmVxLCByZXMsIGNvbnRlbnRUeXBlKS5jYXRjaCgoKSA9PiB7XG4gICAgICAgICAgcmVzLnN0YXR1cyg0MDQpO1xuICAgICAgICAgIHJlcy5zZXQoJ0NvbnRlbnQtVHlwZScsICd0ZXh0L3BsYWluJyk7XG4gICAgICAgICAgcmVzLmVuZCgnRmlsZSBub3QgZm91bmQuJyk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGxldCBkYXRhID0gYXdhaXQgZmlsZXNDb250cm9sbGVyLmdldEZpbGVEYXRhKGNvbmZpZywgZmlsZW5hbWUpLmNhdGNoKCgpID0+IHtcbiAgICAgICAgcmVzLnN0YXR1cyg0MDQpO1xuICAgICAgICByZXMuc2V0KCdDb250ZW50LVR5cGUnLCAndGV4dC9wbGFpbicpO1xuICAgICAgICByZXMuZW5kKCdGaWxlIG5vdCBmb3VuZC4nKTtcbiAgICAgIH0pO1xuICAgICAgaWYgKCFkYXRhKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGZpbGUgPSBuZXcgUGFyc2UuRmlsZShmaWxlbmFtZSwgeyBiYXNlNjQ6IGRhdGEudG9TdHJpbmcoJ2Jhc2U2NCcpIH0sIGNvbnRlbnRUeXBlKTtcbiAgICAgIGNvbnN0IGFmdGVyRmluZCA9IGF3YWl0IHRyaWdnZXJzLm1heWJlUnVuRmlsZVRyaWdnZXIoXG4gICAgICAgIHRyaWdnZXJzLlR5cGVzLmFmdGVyRmluZCxcbiAgICAgICAgeyBmaWxlLCBmb3JjZURvd25sb2FkOiBmYWxzZSwgcmVzcG9uc2VIZWFkZXJzOiB7IC4uLmRlZmF1bHRSZXNwb25zZUhlYWRlcnMgfSB9LFxuICAgICAgICBjb25maWcsXG4gICAgICAgIHJlcS5hdXRoXG4gICAgICApO1xuXG4gICAgICBpZiAoYWZ0ZXJGaW5kPy5maWxlKSB7XG4gICAgICAgIGNvbnRlbnRUeXBlID0gbWltZS5nZXRUeXBlKGFmdGVyRmluZC5maWxlLl9uYW1lKTtcbiAgICAgICAgZGF0YSA9IEJ1ZmZlci5mcm9tKGFmdGVyRmluZC5maWxlLl9kYXRhLCAnYmFzZTY0Jyk7XG4gICAgICB9XG5cbiAgICAgIHJlcy5zdGF0dXMoMjAwKTtcbiAgICAgIHJlcy5zZXQoJ0NvbnRlbnQtVHlwZScsIGNvbnRlbnRUeXBlKTtcbiAgICAgIHJlcy5zZXQoJ0NvbnRlbnQtTGVuZ3RoJywgZGF0YS5sZW5ndGgpO1xuICAgICAgaWYgKGFmdGVyRmluZC5mb3JjZURvd25sb2FkKSB7XG4gICAgICAgIHJlcy5zZXQoJ0NvbnRlbnQtRGlzcG9zaXRpb24nLCBgYXR0YWNobWVudDtmaWxlbmFtZT0ke2FmdGVyRmluZC5maWxlLl9uYW1lfWApO1xuICAgICAgfVxuICAgICAgaWYgKGFmdGVyRmluZC5yZXNwb25zZUhlYWRlcnMpIHtcbiAgICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoYWZ0ZXJGaW5kLnJlc3BvbnNlSGVhZGVycykpIHtcbiAgICAgICAgICByZXMuc2V0KGtleSwgdmFsdWUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXMuZW5kKGRhdGEpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGNvbnN0IGVyciA9IHRyaWdnZXJzLnJlc29sdmVFcnJvcihlLCB7XG4gICAgICAgIGNvZGU6IFBhcnNlLkVycm9yLlNDUklQVF9GQUlMRUQsXG4gICAgICAgIG1lc3NhZ2U6IGBDb3VsZCBub3QgZmluZCBmaWxlOiAke2ZpbGVuYW1lfS5gLFxuICAgICAgfSk7XG4gICAgICByZXMuc3RhdHVzKDQwMyk7XG4gICAgICByZXMuanNvbih7IGNvZGU6IGVyci5jb2RlLCBlcnJvcjogZXJyLm1lc3NhZ2UgfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIE1pZGRsZXdhcmUgdGhhdCBydW5zIGJlZm9yZSBib2R5IHBhcnNpbmcgdG8gaGFuZGxlIGhlYWRlcnMgdGhhdCBtdXN0IGJlXG4gICAqIHJlc29sdmVkIGJlZm9yZSB0aGUgcmVxdWVzdCBib2R5IGlzIGNvbnN1bWVkLiBDdXJyZW50bHkgc3VwcG9ydHM6XG4gICAqXG4gICAqIC0gYFgtUGFyc2UtRmlsZS1NYXgtVXBsb2FkLVNpemVgOiBPdmVycmlkZXMgdGhlIHNlcnZlci13aWRlIGBtYXhVcGxvYWRTaXplYFxuICAgKiAgIGZvciB0aGlzIHJlcXVlc3QuIFJlcXVpcmVzIHRoZSBtYXN0ZXIga2V5LiBUaGUgdmFsdWUgdXNlcyB0aGUgc2FtZSBmb3JtYXRcbiAgICogICBhcyB0aGUgc2VydmVyIG9wdGlvbiAoZS5nLiBgJzUwbWInYCwgYCcxZ2InYCkuIFNldHMgYHJlcS5fbWF4VXBsb2FkU2l6ZU92ZXJyaWRlYFxuICAgKiAgIChpbiBieXRlcykgZm9yIGBfYm9keVBhcnNpbmdNaWRkbGV3YXJlYCB0byB1c2UuXG4gICAqL1xuICBfZWFybHlIZWFkZXJzTWlkZGxld2FyZSgpIHtcbiAgICByZXR1cm4gYXN5bmMgKHJlcSwgcmVzLCBuZXh0KSA9PiB7XG4gICAgICBjb25zdCBtYXhVcGxvYWRTaXplT3ZlcnJpZGUgPSByZXEuZ2V0KCdYLVBhcnNlLUZpbGUtTWF4LVVwbG9hZC1TaXplJyk7XG4gICAgICBpZiAoIW1heFVwbG9hZFNpemVPdmVycmlkZSkge1xuICAgICAgICByZXR1cm4gbmV4dCgpO1xuICAgICAgfVxuICAgICAgY29uc3QgYXBwSWQgPSByZXEuZ2V0KCdYLVBhcnNlLUFwcGxpY2F0aW9uLUlkJyk7XG4gICAgICBjb25zdCBjb25maWcgPSBDb25maWcuZ2V0KGFwcElkKTtcbiAgICAgIGlmICghY29uZmlnKSB7XG4gICAgICAgIGNvbnN0IGVycm9yID0gY3JlYXRlU2FuaXRpemVkSHR0cEVycm9yKDQwMywgJ0ludmFsaWQgYXBwbGljYXRpb24gSUQuJywgdW5kZWZpbmVkKTtcbiAgICAgICAgcmVzLnN0YXR1cyhlcnJvci5zdGF0dXMpO1xuICAgICAgICByZXMuanNvbih7IGVycm9yOiBlcnJvci5tZXNzYWdlIH0pO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjb25zdCBtYXN0ZXJLZXkgPSBhd2FpdCBjb25maWcubG9hZE1hc3RlcktleSgpO1xuICAgICAgaWYgKHJlcS5nZXQoJ1gtUGFyc2UtTWFzdGVyLUtleScpICE9PSBtYXN0ZXJLZXkpIHtcbiAgICAgICAgY29uc3QgZXJyb3IgPSBjcmVhdGVTYW5pdGl6ZWRIdHRwRXJyb3IoNDAzLCAndW5hdXRob3JpemVkOiBtYXN0ZXIga2V5IGlzIHJlcXVpcmVkJywgY29uZmlnKTtcbiAgICAgICAgcmVzLnN0YXR1cyhlcnJvci5zdGF0dXMpO1xuICAgICAgICByZXMuanNvbih7IGVycm9yOiBlcnJvci5tZXNzYWdlIH0pO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAoY29uZmlnLm1hc3RlcktleUlwcz8ubGVuZ3RoICYmICFNaWRkbGV3YXJlcy5jaGVja0lwKHJlcS5pcCwgY29uZmlnLm1hc3RlcktleUlwcywgY29uZmlnLm1hc3RlcktleUlwc1N0b3JlKSkge1xuICAgICAgICBjb25zdCBlcnJvciA9IGNyZWF0ZVNhbml0aXplZEh0dHBFcnJvcig0MDMsICd1bmF1dGhvcml6ZWQ6IG1hc3RlciBrZXkgaXMgcmVxdWlyZWQnLCBjb25maWcpO1xuICAgICAgICByZXMuc3RhdHVzKGVycm9yLnN0YXR1cyk7XG4gICAgICAgIHJlcy5qc29uKHsgZXJyb3I6IGVycm9yLm1lc3NhZ2UgfSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGxldCBwYXJzZWRCeXRlcztcbiAgICAgIHRyeSB7XG4gICAgICAgIHBhcnNlZEJ5dGVzID0gVXRpbHMucGFyc2VTaXplVG9CeXRlcyhtYXhVcGxvYWRTaXplT3ZlcnJpZGUpO1xuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIHJldHVybiBuZXh0KFxuICAgICAgICAgIG5ldyBQYXJzZS5FcnJvcihcbiAgICAgICAgICAgIFBhcnNlLkVycm9yLkZJTEVfU0FWRV9FUlJPUixcbiAgICAgICAgICAgIGBJbnZhbGlkIG1heFVwbG9hZFNpemUgb3ZlcnJpZGUgdmFsdWU6ICR7bWF4VXBsb2FkU2l6ZU92ZXJyaWRlfWBcbiAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICByZXEuX21heFVwbG9hZFNpemVPdmVycmlkZSA9IHBhcnNlZEJ5dGVzO1xuICAgICAgbmV4dCgpO1xuICAgIH07XG4gIH1cblxuICBfYm9keVBhcnNpbmdNaWRkbGV3YXJlKG1heFVwbG9hZFNpemUpIHtcbiAgICBjb25zdCBkZWZhdWx0TWF4Qnl0ZXMgPSBVdGlscy5wYXJzZVNpemVUb0J5dGVzKG1heFVwbG9hZFNpemUpO1xuICAgIHJldHVybiAocmVxLCByZXMsIG5leHQpID0+IHtcbiAgICAgIGlmIChyZXEuZ2V0KCdYLVBhcnNlLVVwbG9hZC1Nb2RlJykgPT09ICdzdHJlYW0nKSB7XG4gICAgICAgIHJlcS5fbWF4VXBsb2FkU2l6ZUJ5dGVzID0gcmVxLl9tYXhVcGxvYWRTaXplT3ZlcnJpZGUgPz8gZGVmYXVsdE1heEJ5dGVzO1xuICAgICAgICByZXR1cm4gbmV4dCgpO1xuICAgICAgfVxuICAgICAgY29uc3QgbGltaXQgPSByZXEuX21heFVwbG9hZFNpemVPdmVycmlkZSA/PyBtYXhVcGxvYWRTaXplO1xuICAgICAgcmV0dXJuIGV4cHJlc3MucmF3KHsgdHlwZTogKCkgPT4gdHJ1ZSwgbGltaXQgfSkocmVxLCByZXMsIG5leHQpO1xuICAgIH07XG4gIH1cblxuICBhc3luYyBjcmVhdGVIYW5kbGVyKHJlcSwgcmVzLCBuZXh0KSB7XG4gICAgaWYgKHJlcS5hdXRoLmlzUmVhZE9ubHkpIHtcbiAgICAgIGNvbnN0IGVycm9yID0gY3JlYXRlU2FuaXRpemVkSHR0cEVycm9yKDQwMywgXCJyZWFkLW9ubHkgbWFzdGVyS2V5IGlzbid0IGFsbG93ZWQgdG8gY3JlYXRlIGEgZmlsZS5cIiwgcmVxLmNvbmZpZyk7XG4gICAgICByZXMuc3RhdHVzKGVycm9yLnN0YXR1cyk7XG4gICAgICByZXMuZW5kKGB7XCJlcnJvclwiOlwiJHtlcnJvci5tZXNzYWdlfVwifWApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBjb25maWcgPSByZXEuY29uZmlnO1xuICAgIGNvbnN0IHVzZXIgPSByZXEuYXV0aC51c2VyO1xuICAgIGNvbnN0IGlzTWFzdGVyID0gcmVxLmF1dGguaXNNYXN0ZXI7XG4gICAgY29uc3QgaXNMaW5rZWQgPSB1c2VyICYmIFBhcnNlLkFub255bW91c1V0aWxzLmlzTGlua2VkKHVzZXIpO1xuICAgIGlmICghaXNNYXN0ZXIgJiYgIWNvbmZpZy5maWxlVXBsb2FkLmVuYWJsZUZvckFub255bW91c1VzZXIgJiYgaXNMaW5rZWQpIHtcbiAgICAgIG5leHQoXG4gICAgICAgIG5ldyBQYXJzZS5FcnJvcihQYXJzZS5FcnJvci5GSUxFX1NBVkVfRVJST1IsICdGaWxlIHVwbG9hZCBieSBhbm9ueW1vdXMgdXNlciBpcyBkaXNhYmxlZC4nKVxuICAgICAgKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKCFpc01hc3RlciAmJiAhY29uZmlnLmZpbGVVcGxvYWQuZW5hYmxlRm9yQXV0aGVudGljYXRlZFVzZXIgJiYgIWlzTGlua2VkICYmIHVzZXIpIHtcbiAgICAgIG5leHQoXG4gICAgICAgIG5ldyBQYXJzZS5FcnJvcihcbiAgICAgICAgICBQYXJzZS5FcnJvci5GSUxFX1NBVkVfRVJST1IsXG4gICAgICAgICAgJ0ZpbGUgdXBsb2FkIGJ5IGF1dGhlbnRpY2F0ZWQgdXNlciBpcyBkaXNhYmxlZC4nXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICghaXNNYXN0ZXIgJiYgIWNvbmZpZy5maWxlVXBsb2FkLmVuYWJsZUZvclB1YmxpYyAmJiAhdXNlcikge1xuICAgICAgbmV4dChuZXcgUGFyc2UuRXJyb3IoUGFyc2UuRXJyb3IuRklMRV9TQVZFX0VSUk9SLCAnRmlsZSB1cGxvYWQgYnkgcHVibGljIGlzIGRpc2FibGVkLicpKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgZmlsZXNDb250cm9sbGVyID0gY29uZmlnLmZpbGVzQ29udHJvbGxlcjtcbiAgICBjb25zdCB7IGZpbGVuYW1lIH0gPSByZXEucGFyYW1zO1xuICAgIGNvbnN0IGNvbnRlbnRUeXBlID0gcmVxLmdldCgnQ29udGVudC10eXBlJyk7XG5cbiAgICBjb25zdCBlcnJvciA9IGZpbGVzQ29udHJvbGxlci52YWxpZGF0ZUZpbGVuYW1lKGZpbGVuYW1lKTtcbiAgICBpZiAoZXJyb3IpIHtcbiAgICAgIG5leHQoZXJyb3IpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGZpbGVFeHRlbnNpb25zID0gY29uZmlnLmZpbGVVcGxvYWQ/LmZpbGVFeHRlbnNpb25zO1xuICAgIGlmICghaXNNYXN0ZXIgJiYgZmlsZUV4dGVuc2lvbnMpIHtcbiAgICAgIGNvbnN0IGlzVmFsaWRFeHRlbnNpb24gPSBleHRlbnNpb24gPT4ge1xuICAgICAgICByZXR1cm4gZmlsZUV4dGVuc2lvbnMuc29tZShleHQgPT4ge1xuICAgICAgICAgIGlmIChleHQgPT09ICcqJykge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IHJlZ2V4ID0gbmV3IFJlZ0V4cChleHQpO1xuICAgICAgICAgIGlmIChyZWdleC50ZXN0KGV4dGVuc2lvbikpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9O1xuICAgICAgbGV0IGV4dGVuc2lvbiA9IGNvbnRlbnRUeXBlO1xuICAgICAgaWYgKGZpbGVuYW1lICYmIGZpbGVuYW1lLmluY2x1ZGVzKCcuJykpIHtcbiAgICAgICAgZXh0ZW5zaW9uID0gZmlsZW5hbWUuc3Vic3RyaW5nKGZpbGVuYW1lLmxhc3RJbmRleE9mKCcuJykgKyAxKTtcbiAgICAgIH0gZWxzZSBpZiAoY29udGVudFR5cGUgJiYgY29udGVudFR5cGUuaW5jbHVkZXMoJy8nKSkge1xuICAgICAgICBleHRlbnNpb24gPSBjb250ZW50VHlwZS5zcGxpdCgnLycpWzFdO1xuICAgICAgfVxuICAgICAgLy8gU3RyaXAgTUlNRSBwYXJhbWV0ZXJzIChlLmcuIFwiO2NoYXJzZXQ9dXRmLThcIikgYW5kIHdoaXRlc3BhY2VcbiAgICAgIGV4dGVuc2lvbiA9IGV4dGVuc2lvbj8uc3BsaXQoJzsnKVswXT8ucmVwbGFjZSgvXFxzKy9nLCAnJyk7XG5cbiAgICAgIGlmIChleHRlbnNpb24gJiYgIWlzVmFsaWRFeHRlbnNpb24oZXh0ZW5zaW9uKSkge1xuICAgICAgICBuZXh0KFxuICAgICAgICAgIG5ldyBQYXJzZS5FcnJvcihcbiAgICAgICAgICAgIFBhcnNlLkVycm9yLkZJTEVfU0FWRV9FUlJPUixcbiAgICAgICAgICAgIGBGaWxlIHVwbG9hZCBvZiBleHRlbnNpb24gJHtleHRlbnNpb259IGlzIGRpc2FibGVkLmBcbiAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBGb3Igc3RyZWFtaW5nIHVwbG9hZHMsIHJlYWQgZmlsZSBkYXRhIGZyb20gaGVhZGVycyBzaW5jZSB0aGUgYm9keSBpcyB0aGUgcmF3IHN0cmVhbVxuICAgIGlmIChyZXEuZ2V0KCdYLVBhcnNlLVVwbG9hZC1Nb2RlJykgPT09ICdzdHJlYW0nKSB7XG4gICAgICByZXEuZmlsZURhdGEgPSB7fTtcbiAgICAgIGlmIChyZXEuZ2V0KCdYLVBhcnNlLUZpbGUtRGlyZWN0b3J5JykpIHtcbiAgICAgICAgcmVxLmZpbGVEYXRhLmRpcmVjdG9yeSA9IHJlcS5nZXQoJ1gtUGFyc2UtRmlsZS1EaXJlY3RvcnknKTtcbiAgICAgIH1cbiAgICAgIGlmIChyZXEuZ2V0KCdYLVBhcnNlLUZpbGUtTWV0YWRhdGEnKSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IHBhcnNlZCA9IEpTT04ucGFyc2UocmVxLmdldCgnWC1QYXJzZS1GaWxlLU1ldGFkYXRhJykpO1xuICAgICAgICAgIGlmICghcGFyc2VkIHx8IHR5cGVvZiBwYXJzZWQgIT09ICdvYmplY3QnIHx8IEFycmF5LmlzQXJyYXkocGFyc2VkKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJlcS5maWxlRGF0YS5tZXRhZGF0YSA9IHBhcnNlZDtcbiAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgbmV4dChuZXcgUGFyc2UuRXJyb3IoUGFyc2UuRXJyb3IuSU5WQUxJRF9KU09OLCAnSW52YWxpZCBKU09OIGluIFgtUGFyc2UtRmlsZS1NZXRhZGF0YSBoZWFkZXIuJykpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHJlcS5nZXQoJ1gtUGFyc2UtRmlsZS1UYWdzJykpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCBwYXJzZWQgPSBKU09OLnBhcnNlKHJlcS5nZXQoJ1gtUGFyc2UtRmlsZS1UYWdzJykpO1xuICAgICAgICAgIGlmICghcGFyc2VkIHx8IHR5cGVvZiBwYXJzZWQgIT09ICdvYmplY3QnIHx8IEFycmF5LmlzQXJyYXkocGFyc2VkKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJlcS5maWxlRGF0YS50YWdzID0gcGFyc2VkO1xuICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICBuZXh0KG5ldyBQYXJzZS5FcnJvcihQYXJzZS5FcnJvci5JTlZBTElEX0pTT04sICdJbnZhbGlkIEpTT04gaW4gWC1QYXJzZS1GaWxlLVRhZ3MgaGVhZGVyLicpKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBWYWxpZGF0ZSBkaXJlY3Rvcnkgb3B0aW9uIChyZXF1aXJlcyBtYXN0ZXIga2V5KVxuICAgIGNvbnN0IGRpcmVjdG9yeSA9IHJlcS5maWxlRGF0YT8uZGlyZWN0b3J5O1xuICAgIGlmIChkaXJlY3RvcnkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKCFpc01hc3Rlcikge1xuICAgICAgICBuZXh0KFxuICAgICAgICAgIG5ldyBQYXJzZS5FcnJvcihcbiAgICAgICAgICAgIFBhcnNlLkVycm9yLk9QRVJBVElPTl9GT1JCSURERU4sXG4gICAgICAgICAgICAnRGlyZWN0b3J5IGNhbiBvbmx5IGJlIHNldCB1c2luZyB0aGUgTWFzdGVyIEtleS4nXG4gICAgICAgICAgKVxuICAgICAgICApO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjb25zdCBkaXJlY3RvcnlFcnJvciA9IEZpbGVzUm91dGVyLnZhbGlkYXRlRGlyZWN0b3J5KGRpcmVjdG9yeSk7XG4gICAgICBpZiAoZGlyZWN0b3J5RXJyb3IpIHtcbiAgICAgICAgbmV4dChkaXJlY3RvcnlFcnJvcik7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBEaXNwYXRjaCB0byB0aGUgYXBwcm9wcmlhdGUgaGFuZGxlciBiYXNlZCBvbiB3aGV0aGVyIHRoZSBib2R5IHdhcyBidWZmZXJlZFxuICAgIGlmIChCdWZmZXIuaXNCdWZmZXIocmVxLmJvZHkpKSB7XG4gICAgICByZXR1cm4gdGhpcy5faGFuZGxlQnVmZmVyZWRVcGxvYWQocmVxLCByZXMsIG5leHQpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5faGFuZGxlU3RyZWFtVXBsb2FkKHJlcSwgcmVzLCBuZXh0KTtcbiAgfVxuXG4gIGFzeW5jIF9oYW5kbGVCdWZmZXJlZFVwbG9hZChyZXEsIHJlcywgbmV4dCkge1xuICAgIGNvbnN0IGNvbmZpZyA9IHJlcS5jb25maWc7XG4gICAgY29uc3QgZmlsZXNDb250cm9sbGVyID0gY29uZmlnLmZpbGVzQ29udHJvbGxlcjtcbiAgICBjb25zdCB7IGZpbGVuYW1lIH0gPSByZXEucGFyYW1zO1xuICAgIGNvbnN0IGNvbnRlbnRUeXBlID0gcmVxLmdldCgnQ29udGVudC10eXBlJyk7XG5cbiAgICBpZiAoIXJlcS5ib2R5IHx8ICFyZXEuYm9keS5sZW5ndGgpIHtcbiAgICAgIG5leHQobmV3IFBhcnNlLkVycm9yKFBhcnNlLkVycm9yLkZJTEVfU0FWRV9FUlJPUiwgJ0ludmFsaWQgZmlsZSB1cGxvYWQuJykpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGJhc2U2NCA9IHJlcS5ib2R5LnRvU3RyaW5nKCdiYXNlNjQnKTtcbiAgICBjb25zdCBmaWxlID0gbmV3IFBhcnNlLkZpbGUoZmlsZW5hbWUsIHsgYmFzZTY0IH0sIGNvbnRlbnRUeXBlKTtcbiAgICBjb25zdCB7IG1ldGFkYXRhID0ge30sIHRhZ3MgPSB7fSwgZGlyZWN0b3J5IH0gPSByZXEuZmlsZURhdGEgfHwge307XG4gICAgdHJ5IHtcbiAgICAgIC8vIFNjYW4gcmVxdWVzdCBkYXRhIGZvciBkZW5pZWQga2V5d29yZHNcbiAgICAgIFV0aWxzLmNoZWNrUHJvaGliaXRlZEtleXdvcmRzKGNvbmZpZywgbWV0YWRhdGEpO1xuICAgICAgVXRpbHMuY2hlY2tQcm9oaWJpdGVkS2V5d29yZHMoY29uZmlnLCB0YWdzKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgbmV4dChuZXcgUGFyc2UuRXJyb3IoUGFyc2UuRXJyb3IuSU5WQUxJRF9LRVlfTkFNRSwgZXJyb3IpKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZmlsZS5zZXRUYWdzKHRhZ3MpO1xuICAgIGZpbGUuc2V0TWV0YWRhdGEobWV0YWRhdGEpO1xuICAgIGlmIChkaXJlY3RvcnkpIHtcbiAgICAgIGZpbGUuc2V0RGlyZWN0b3J5KGRpcmVjdG9yeSk7XG4gICAgfVxuICAgIGNvbnN0IGZpbGVTaXplID0gQnVmZmVyLmJ5dGVMZW5ndGgocmVxLmJvZHkpO1xuICAgIGNvbnN0IGZpbGVPYmplY3QgPSB7IGZpbGUsIGZpbGVTaXplIH07XG4gICAgdHJ5IHtcbiAgICAgIC8vIHJ1biBiZWZvcmVTYXZlRmlsZSB0cmlnZ2VyXG4gICAgICBjb25zdCB0cmlnZ2VyUmVzdWx0ID0gYXdhaXQgdHJpZ2dlcnMubWF5YmVSdW5GaWxlVHJpZ2dlcihcbiAgICAgICAgdHJpZ2dlcnMuVHlwZXMuYmVmb3JlU2F2ZSxcbiAgICAgICAgZmlsZU9iamVjdCxcbiAgICAgICAgY29uZmlnLFxuICAgICAgICByZXEuYXV0aFxuICAgICAgKTtcbiAgICAgIGxldCBzYXZlUmVzdWx0O1xuICAgICAgLy8gaWYgYSBuZXcgUGFyc2VGaWxlIGlzIHJldHVybmVkIGNoZWNrIGlmIGl0J3MgYW4gYWxyZWFkeSBzYXZlZCBmaWxlXG4gICAgICBpZiAodHJpZ2dlclJlc3VsdCBpbnN0YW5jZW9mIFBhcnNlLkZpbGUpIHtcbiAgICAgICAgZmlsZU9iamVjdC5maWxlID0gdHJpZ2dlclJlc3VsdDtcbiAgICAgICAgaWYgKHRyaWdnZXJSZXN1bHQudXJsKCkpIHtcbiAgICAgICAgICAvLyBzZXQgZmlsZVNpemUgdG8gbnVsbCBiZWNhdXNlIHdlIHdvbnQga25vdyBob3cgYmlnIGl0IGlzIGhlcmVcbiAgICAgICAgICBmaWxlT2JqZWN0LmZpbGVTaXplID0gbnVsbDtcbiAgICAgICAgICBzYXZlUmVzdWx0ID0ge1xuICAgICAgICAgICAgdXJsOiB0cmlnZ2VyUmVzdWx0LnVybCgpLFxuICAgICAgICAgICAgbmFtZTogdHJpZ2dlclJlc3VsdC5fbmFtZSxcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICAvLyBpZiB0aGUgZmlsZSByZXR1cm5lZCBieSB0aGUgdHJpZ2dlciBoYXMgYWxyZWFkeSBiZWVuIHNhdmVkIHNraXAgc2F2aW5nIGFueXRoaW5nXG4gICAgICBpZiAoIXNhdmVSZXN1bHQpIHtcbiAgICAgICAgLy8gdXBkYXRlIGZpbGVTaXplXG4gICAgICAgIGxldCBidWZmZXJEYXRhO1xuICAgICAgICBpZiAoZmlsZU9iamVjdC5maWxlLl9zb3VyY2U/LmZvcm1hdCA9PT0gJ2J1ZmZlcicpIHtcbiAgICAgICAgICBidWZmZXJEYXRhID0gZmlsZU9iamVjdC5maWxlLl9zb3VyY2UuYnVmZmVyO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGJ1ZmZlckRhdGEgPSBCdWZmZXIuZnJvbShmaWxlT2JqZWN0LmZpbGUuX2RhdGEsICdiYXNlNjQnKTtcbiAgICAgICAgfVxuICAgICAgICBmaWxlT2JqZWN0LmZpbGVTaXplID0gQnVmZmVyLmJ5dGVMZW5ndGgoYnVmZmVyRGF0YSk7XG4gICAgICAgIC8vIHByZXBhcmUgZmlsZSBvcHRpb25zXG4gICAgICAgIGNvbnN0IGZpbGVPcHRpb25zID0ge1xuICAgICAgICAgIG1ldGFkYXRhOiBmaWxlT2JqZWN0LmZpbGUuX21ldGFkYXRhLFxuICAgICAgICB9O1xuICAgICAgICAvLyBzb21lIHMzLWNvbXBhdGlibGUgcHJvdmlkZXJzIChEaWdpdGFsT2NlYW4sIExpbm9kZSkgZG8gbm90IGFjY2VwdCB0YWdzXG4gICAgICAgIC8vIHNvIHdlIGRvIG5vdCBpbmNsdWRlIHRoZSB0YWdzIG9wdGlvbiBpZiBpdCBpcyBlbXB0eS5cbiAgICAgICAgY29uc3QgZmlsZVRhZ3MgPVxuICAgICAgICAgIE9iamVjdC5rZXlzKGZpbGVPYmplY3QuZmlsZS5fdGFncykubGVuZ3RoID4gMCA/IHsgdGFnczogZmlsZU9iamVjdC5maWxlLl90YWdzIH0gOiB7fTtcbiAgICAgICAgT2JqZWN0LmFzc2lnbihmaWxlT3B0aW9ucywgZmlsZVRhZ3MpO1xuICAgICAgICAvLyBpbmNsdWRlIGRpcmVjdG9yeSBpZiBzZXQgKGZyb20gY2xpZW50IHJlcXVlc3Qgb3IgYmVmb3JlU2F2ZUZpbGUgdHJpZ2dlcilcbiAgICAgICAgaWYgKGZpbGVPYmplY3QuZmlsZS5fZGlyZWN0b3J5KSB7XG4gICAgICAgICAgZmlsZU9wdGlvbnMuZGlyZWN0b3J5ID0gZmlsZU9iamVjdC5maWxlLl9kaXJlY3Rvcnk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gc2F2ZSBmaWxlXG4gICAgICAgIGNvbnN0IGNyZWF0ZUZpbGVSZXN1bHQgPSBhd2FpdCBmaWxlc0NvbnRyb2xsZXIuY3JlYXRlRmlsZShcbiAgICAgICAgICBjb25maWcsXG4gICAgICAgICAgZmlsZU9iamVjdC5maWxlLl9uYW1lLFxuICAgICAgICAgIGJ1ZmZlckRhdGEsXG4gICAgICAgICAgZmlsZU9iamVjdC5maWxlLl9zb3VyY2UudHlwZSxcbiAgICAgICAgICBmaWxlT3B0aW9uc1xuICAgICAgICApO1xuICAgICAgICAvLyB1cGRhdGUgZmlsZSB3aXRoIG5ldyBkYXRhXG4gICAgICAgIGZpbGVPYmplY3QuZmlsZS5fbmFtZSA9IGNyZWF0ZUZpbGVSZXN1bHQubmFtZTtcbiAgICAgICAgZmlsZU9iamVjdC5maWxlLl91cmwgPSBjcmVhdGVGaWxlUmVzdWx0LnVybDtcbiAgICAgICAgZmlsZU9iamVjdC5maWxlLl9yZXF1ZXN0VGFzayA9IG51bGw7XG4gICAgICAgIGZpbGVPYmplY3QuZmlsZS5fcHJldmlvdXNTYXZlID0gUHJvbWlzZS5yZXNvbHZlKGZpbGVPYmplY3QuZmlsZSk7XG4gICAgICAgIHNhdmVSZXN1bHQgPSB7XG4gICAgICAgICAgdXJsOiBjcmVhdGVGaWxlUmVzdWx0LnVybCxcbiAgICAgICAgICBuYW1lOiBjcmVhdGVGaWxlUmVzdWx0Lm5hbWUsXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICAvLyBydW4gYWZ0ZXJTYXZlRmlsZSB0cmlnZ2VyXG4gICAgICBhd2FpdCB0cmlnZ2Vycy5tYXliZVJ1bkZpbGVUcmlnZ2VyKHRyaWdnZXJzLlR5cGVzLmFmdGVyU2F2ZSwgZmlsZU9iamVjdCwgY29uZmlnLCByZXEuYXV0aCk7XG4gICAgICByZXMuc3RhdHVzKDIwMSk7XG4gICAgICByZXMuc2V0KCdMb2NhdGlvbicsIHNhdmVSZXN1bHQudXJsKTtcbiAgICAgIHJlcy5qc29uKHNhdmVSZXN1bHQpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGxvZ2dlci5lcnJvcignRXJyb3IgY3JlYXRpbmcgYSBmaWxlOiAnLCBlKTtcbiAgICAgIGNvbnN0IGVycm9yID0gdHJpZ2dlcnMucmVzb2x2ZUVycm9yKGUsIHtcbiAgICAgICAgY29kZTogUGFyc2UuRXJyb3IuRklMRV9TQVZFX0VSUk9SLFxuICAgICAgICBtZXNzYWdlOiBgQ291bGQgbm90IHN0b3JlIGZpbGU6ICR7ZmlsZU9iamVjdC5maWxlLl9uYW1lfS5gLFxuICAgICAgfSk7XG4gICAgICBuZXh0KGVycm9yKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBfaGFuZGxlU3RyZWFtVXBsb2FkKHJlcSwgcmVzLCBuZXh0KSB7XG4gICAgY29uc3QgY29uZmlnID0gcmVxLmNvbmZpZztcbiAgICBjb25zdCBmaWxlc0NvbnRyb2xsZXIgPSBjb25maWcuZmlsZXNDb250cm9sbGVyO1xuICAgIGNvbnN0IHsgZmlsZW5hbWUgfSA9IHJlcS5wYXJhbXM7XG4gICAgbGV0IGNvbnRlbnRUeXBlID0gcmVxLmdldCgnQ29udGVudC1UeXBlJyk7XG4gICAgY29uc3QgbWF4Qnl0ZXMgPSByZXEuX21heFVwbG9hZFNpemVCeXRlcztcbiAgICBsZXQgc3RyZWFtO1xuXG4gICAgdHJ5IHtcbiAgICAgIC8vIEVhcmx5IHJlamVjdGlvbiB2aWEgQ29udGVudC1MZW5ndGggaGVhZGVyXG4gICAgICBjb25zdCBjb250ZW50TGVuZ3RoID0gcmVxLmdldCgnQ29udGVudC1MZW5ndGgnKTtcbiAgICAgIGlmIChjb250ZW50TGVuZ3RoICYmIHBhcnNlSW50KGNvbnRlbnRMZW5ndGgsIDEwKSA+IG1heEJ5dGVzKSB7XG4gICAgICAgIHJlcS5yZXN1bWUoKTtcbiAgICAgICAgbmV4dChuZXcgUGFyc2UuRXJyb3IoXG4gICAgICAgICAgUGFyc2UuRXJyb3IuRklMRV9TQVZFX0VSUk9SLFxuICAgICAgICAgIGBGaWxlIHNpemUgZXhjZWVkcyBtYXhpbXVtIGFsbG93ZWQ6ICR7bWF4Qnl0ZXN9IGJ5dGVzLmBcbiAgICAgICAgKSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc3QgbWltZSA9IChhd2FpdCBpbXBvcnQoJ21pbWUnKSkuZGVmYXVsdDtcblxuICAgICAgLy8gSW5mZXIgY29udGVudCB0eXBlIGZyb20gZXh0ZW5zaW9uIG9yIGFkZCBleHRlbnNpb24gZnJvbSBjb250ZW50IHR5cGVcbiAgICAgIGNvbnN0IGhhc0V4dGVuc2lvbiA9IGZpbGVuYW1lICYmIGZpbGVuYW1lLmluY2x1ZGVzKCcuJyk7XG4gICAgICBpZiAoaGFzRXh0ZW5zaW9uICYmICFjb250ZW50VHlwZSkge1xuICAgICAgICBjb250ZW50VHlwZSA9IG1pbWUuZ2V0VHlwZShmaWxlbmFtZSk7XG4gICAgICB9IGVsc2UgaWYgKCFoYXNFeHRlbnNpb24gJiYgY29udGVudFR5cGUpIHtcbiAgICAgICAgLy8gZXh0ZW5zaW9uIHdpbGwgYmUgYWRkZWQgYnkgZmlsZXNDb250cm9sbGVyLmNyZWF0ZUZpbGVcbiAgICAgIH1cblxuICAgICAgLy8gQ3JlYXRlIHNpemUtbGltaXRlZCBzdHJlYW0gd3JhcHBpbmcgdGhlIHJlcXVlc3RcbiAgICAgIHN0cmVhbSA9IGNyZWF0ZVNpemVMaW1pdGVkU3RyZWFtKHJlcSwgbWF4Qnl0ZXMpO1xuXG4gICAgICAvLyBCdWlsZCBhIFBhcnNlLkZpbGUgd2l0aCBubyBfZGF0YSAoc3RyZWFtaW5nIG1vZGUpXG4gICAgICBjb25zdCBmaWxlID0gbmV3IFBhcnNlLkZpbGUoZmlsZW5hbWUsIHsgYmFzZTY0OiAnJyB9LCBjb250ZW50VHlwZSk7XG4gICAgICBjb25zdCB7IG1ldGFkYXRhID0ge30sIHRhZ3MgPSB7fSwgZGlyZWN0b3J5IH0gPSByZXEuZmlsZURhdGEgfHwge307XG5cbiAgICAgIC8vIFZhbGlkYXRlIG1ldGFkYXRhIGFuZCB0YWdzIGZvciBwcm9oaWJpdGVkIGtleXdvcmRzXG4gICAgICB0cnkge1xuICAgICAgICBVdGlscy5jaGVja1Byb2hpYml0ZWRLZXl3b3Jkcyhjb25maWcsIG1ldGFkYXRhKTtcbiAgICAgICAgVXRpbHMuY2hlY2tQcm9oaWJpdGVkS2V5d29yZHMoY29uZmlnLCB0YWdzKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIHN0cmVhbS5kZXN0cm95KCk7XG4gICAgICAgIG5leHQobmV3IFBhcnNlLkVycm9yKFBhcnNlLkVycm9yLklOVkFMSURfS0VZX05BTUUsIGVycm9yKSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgZmlsZS5zZXRUYWdzKHRhZ3MpO1xuICAgICAgZmlsZS5zZXRNZXRhZGF0YShtZXRhZGF0YSk7XG4gICAgICBpZiAoZGlyZWN0b3J5KSB7XG4gICAgICAgIGZpbGUuc2V0RGlyZWN0b3J5KGRpcmVjdG9yeSk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGZpbGVTaXplID0gcmVxLmdldCgnQ29udGVudC1MZW5ndGgnKVxuICAgICAgICA/IHBhcnNlSW50KHJlcS5nZXQoJ0NvbnRlbnQtTGVuZ3RoJyksIDEwKVxuICAgICAgICA6IG51bGw7XG4gICAgICBjb25zdCBmaWxlT2JqZWN0ID0geyBmaWxlLCBmaWxlU2l6ZSwgc3RyZWFtOiB0cnVlIH07XG5cbiAgICAgIC8vIFJ1biBiZWZvcmVTYXZlRmlsZSB0cmlnZ2VyXG4gICAgICBjb25zdCB0cmlnZ2VyUmVzdWx0ID0gYXdhaXQgdHJpZ2dlcnMubWF5YmVSdW5GaWxlVHJpZ2dlcihcbiAgICAgICAgdHJpZ2dlcnMuVHlwZXMuYmVmb3JlU2F2ZSxcbiAgICAgICAgZmlsZU9iamVjdCxcbiAgICAgICAgY29uZmlnLFxuICAgICAgICByZXEuYXV0aFxuICAgICAgKTtcblxuICAgICAgbGV0IHNhdmVSZXN1bHQ7XG4gICAgICAvLyBJZiBhIG5ldyBQYXJzZUZpbGUgaXMgcmV0dXJuZWQsIGNoZWNrIGlmIGl0J3MgYW4gYWxyZWFkeSBzYXZlZCBmaWxlXG4gICAgICBpZiAodHJpZ2dlclJlc3VsdCBpbnN0YW5jZW9mIFBhcnNlLkZpbGUpIHtcbiAgICAgICAgZmlsZU9iamVjdC5maWxlID0gdHJpZ2dlclJlc3VsdDtcbiAgICAgICAgaWYgKHRyaWdnZXJSZXN1bHQudXJsKCkpIHtcbiAgICAgICAgICBmaWxlT2JqZWN0LmZpbGVTaXplID0gbnVsbDtcbiAgICAgICAgICBzYXZlUmVzdWx0ID0ge1xuICAgICAgICAgICAgdXJsOiB0cmlnZ2VyUmVzdWx0LnVybCgpLFxuICAgICAgICAgICAgbmFtZTogdHJpZ2dlclJlc3VsdC5fbmFtZSxcbiAgICAgICAgICB9O1xuICAgICAgICAgIC8vIERlc3Ryb3kgc3RyZWFtIHRvIHJlbW92ZSBsaXN0ZW5lcnMgYW5kIGRyYWluIHJlcXVlc3RcbiAgICAgICAgICBzdHJlYW0uZGVzdHJveSgpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIElmIHRoZSBmaWxlIHJldHVybmVkIGJ5IHRoZSB0cmlnZ2VyIGhhcyBhbHJlYWR5IGJlZW4gc2F2ZWQsIHNraXAgc2F2aW5nXG4gICAgICBpZiAoIXNhdmVSZXN1bHQpIHtcbiAgICAgICAgLy8gUHJlcGFyZSBmaWxlIG9wdGlvbnNcbiAgICAgICAgY29uc3QgZmlsZU9wdGlvbnMgPSB7XG4gICAgICAgICAgbWV0YWRhdGE6IGZpbGVPYmplY3QuZmlsZS5fbWV0YWRhdGEsXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IGZpbGVUYWdzID1cbiAgICAgICAgICBPYmplY3Qua2V5cyhmaWxlT2JqZWN0LmZpbGUuX3RhZ3MpLmxlbmd0aCA+IDAgPyB7IHRhZ3M6IGZpbGVPYmplY3QuZmlsZS5fdGFncyB9IDoge307XG4gICAgICAgIE9iamVjdC5hc3NpZ24oZmlsZU9wdGlvbnMsIGZpbGVUYWdzKTtcbiAgICAgICAgLy8gaW5jbHVkZSBkaXJlY3RvcnkgaWYgc2V0IChmcm9tIGNsaWVudCByZXF1ZXN0IG9yIGJlZm9yZVNhdmVGaWxlIHRyaWdnZXIpXG4gICAgICAgIGlmIChmaWxlT2JqZWN0LmZpbGUuX2RpcmVjdG9yeSkge1xuICAgICAgICAgIGZpbGVPcHRpb25zLmRpcmVjdG9yeSA9IGZpbGVPYmplY3QuZmlsZS5fZGlyZWN0b3J5O1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gUGFzcyBzdHJlYW0gZGlyZWN0bHkgdG8gZmlsZXNDb250cm9sbGVyIOKAlCBpdCB3aWxsIGJ1ZmZlciBpZiBhZGFwdGVyIGRvZXNuJ3Qgc3VwcG9ydCBzdHJlYW1pbmdcbiAgICAgICAgY29uc3Qgc291cmNlVHlwZSA9IGZpbGVPYmplY3QuZmlsZS5fc291cmNlPy50eXBlIHx8IGNvbnRlbnRUeXBlO1xuICAgICAgICBjb25zdCBjcmVhdGVGaWxlUmVzdWx0ID0gYXdhaXQgZmlsZXNDb250cm9sbGVyLmNyZWF0ZUZpbGUoXG4gICAgICAgICAgY29uZmlnLFxuICAgICAgICAgIGZpbGVPYmplY3QuZmlsZS5fbmFtZSxcbiAgICAgICAgICBzdHJlYW0sXG4gICAgICAgICAgc291cmNlVHlwZSxcbiAgICAgICAgICBmaWxlT3B0aW9uc1xuICAgICAgICApO1xuXG4gICAgICAgIC8vIFVwZGF0ZSBmaWxlIHdpdGggbmV3IGRhdGFcbiAgICAgICAgZmlsZU9iamVjdC5maWxlLl9uYW1lID0gY3JlYXRlRmlsZVJlc3VsdC5uYW1lO1xuICAgICAgICBmaWxlT2JqZWN0LmZpbGUuX3VybCA9IGNyZWF0ZUZpbGVSZXN1bHQudXJsO1xuICAgICAgICBmaWxlT2JqZWN0LmZpbGUuX3JlcXVlc3RUYXNrID0gbnVsbDtcbiAgICAgICAgZmlsZU9iamVjdC5maWxlLl9wcmV2aW91c1NhdmUgPSBQcm9taXNlLnJlc29sdmUoZmlsZU9iamVjdC5maWxlKTtcbiAgICAgICAgc2F2ZVJlc3VsdCA9IHtcbiAgICAgICAgICB1cmw6IGNyZWF0ZUZpbGVSZXN1bHQudXJsLFxuICAgICAgICAgIG5hbWU6IGNyZWF0ZUZpbGVSZXN1bHQubmFtZSxcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgLy8gUnVuIGFmdGVyU2F2ZUZpbGUgdHJpZ2dlclxuICAgICAgYXdhaXQgdHJpZ2dlcnMubWF5YmVSdW5GaWxlVHJpZ2dlcih0cmlnZ2Vycy5UeXBlcy5hZnRlclNhdmUsIGZpbGVPYmplY3QsIGNvbmZpZywgcmVxLmF1dGgpO1xuICAgICAgcmVzLnN0YXR1cygyMDEpO1xuICAgICAgcmVzLnNldCgnTG9jYXRpb24nLCBzYXZlUmVzdWx0LnVybCk7XG4gICAgICByZXMuanNvbihzYXZlUmVzdWx0KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAvLyBEZXN0cm95IHN0cmVhbSB0byByZW1vdmUgbGlzdGVuZXJzIGFuZCBkcmFpbiByZXF1ZXN0LCBvciByZXN1bWUgZGlyZWN0bHlcbiAgICAgIGlmIChzdHJlYW0pIHtcbiAgICAgICAgc3RyZWFtLmRlc3Ryb3koKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlcS5yZXN1bWUoKTtcbiAgICAgIH1cbiAgICAgIGxvZ2dlci5lcnJvcignRXJyb3IgY3JlYXRpbmcgYSBmaWxlOiAnLCBlKTtcbiAgICAgIGNvbnN0IGVycm9yID0gdHJpZ2dlcnMucmVzb2x2ZUVycm9yKGUsIHtcbiAgICAgICAgY29kZTogUGFyc2UuRXJyb3IuRklMRV9TQVZFX0VSUk9SLFxuICAgICAgICBtZXNzYWdlOiBgQ291bGQgbm90IHN0b3JlIGZpbGU6ICR7ZmlsZW5hbWV9LmAsXG4gICAgICB9KTtcbiAgICAgIG5leHQoZXJyb3IpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGRlbGV0ZUhhbmRsZXIocmVxLCByZXMsIG5leHQpIHtcbiAgICBpZiAocmVxLmF1dGguaXNSZWFkT25seSkge1xuICAgICAgY29uc3QgZXJyb3IgPSBjcmVhdGVTYW5pdGl6ZWRIdHRwRXJyb3IoNDAzLCBcInJlYWQtb25seSBtYXN0ZXJLZXkgaXNuJ3QgYWxsb3dlZCB0byBkZWxldGUgYSBmaWxlLlwiLCByZXEuY29uZmlnKTtcbiAgICAgIHJlcy5zdGF0dXMoZXJyb3Iuc3RhdHVzKTtcbiAgICAgIHJlcy5lbmQoYHtcImVycm9yXCI6XCIke2Vycm9yLm1lc3NhZ2V9XCJ9YCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICBjb25zdCB7IGZpbGVzQ29udHJvbGxlciB9ID0gcmVxLmNvbmZpZztcbiAgICAgIGNvbnN0IGZpbGVuYW1lID0gRmlsZXNSb3V0ZXIuX2dldEZpbGVuYW1lRnJvbVBhcmFtcyhyZXEpO1xuICAgICAgLy8gcnVuIGJlZm9yZURlbGV0ZUZpbGUgdHJpZ2dlclxuICAgICAgY29uc3QgZmlsZSA9IG5ldyBQYXJzZS5GaWxlKGZpbGVuYW1lKTtcbiAgICAgIGZpbGUuX3VybCA9IGF3YWl0IGZpbGVzQ29udHJvbGxlci5hZGFwdGVyLmdldEZpbGVMb2NhdGlvbihyZXEuY29uZmlnLCBmaWxlbmFtZSk7XG4gICAgICBjb25zdCBmaWxlT2JqZWN0ID0geyBmaWxlLCBmaWxlU2l6ZTogbnVsbCB9O1xuICAgICAgYXdhaXQgdHJpZ2dlcnMubWF5YmVSdW5GaWxlVHJpZ2dlcihcbiAgICAgICAgdHJpZ2dlcnMuVHlwZXMuYmVmb3JlRGVsZXRlLFxuICAgICAgICBmaWxlT2JqZWN0LFxuICAgICAgICByZXEuY29uZmlnLFxuICAgICAgICByZXEuYXV0aFxuICAgICAgKTtcbiAgICAgIC8vIGRlbGV0ZSBmaWxlXG4gICAgICBhd2FpdCBmaWxlc0NvbnRyb2xsZXIuZGVsZXRlRmlsZShyZXEuY29uZmlnLCBmaWxlbmFtZSk7XG4gICAgICAvLyBydW4gYWZ0ZXJEZWxldGVGaWxlIHRyaWdnZXJcbiAgICAgIGF3YWl0IHRyaWdnZXJzLm1heWJlUnVuRmlsZVRyaWdnZXIoXG4gICAgICAgIHRyaWdnZXJzLlR5cGVzLmFmdGVyRGVsZXRlLFxuICAgICAgICBmaWxlT2JqZWN0LFxuICAgICAgICByZXEuY29uZmlnLFxuICAgICAgICByZXEuYXV0aFxuICAgICAgKTtcbiAgICAgIHJlcy5zdGF0dXMoMjAwKTtcbiAgICAgIC8vIFRPRE86IHJldHVybiB1c2VmdWwgSlNPTiBoZXJlP1xuICAgICAgcmVzLmVuZCgpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGxvZ2dlci5lcnJvcignRXJyb3IgZGVsZXRpbmcgYSBmaWxlOiAnLCBlKTtcbiAgICAgIGNvbnN0IGVycm9yID0gdHJpZ2dlcnMucmVzb2x2ZUVycm9yKGUsIHtcbiAgICAgICAgY29kZTogUGFyc2UuRXJyb3IuRklMRV9ERUxFVEVfRVJST1IsXG4gICAgICAgIG1lc3NhZ2U6ICdDb3VsZCBub3QgZGVsZXRlIGZpbGUuJyxcbiAgICAgIH0pO1xuICAgICAgbmV4dChlcnJvcik7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgbWV0YWRhdGFIYW5kbGVyKHJlcSwgcmVzKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGNvbmZpZyA9IENvbmZpZy5nZXQocmVxLnBhcmFtcy5hcHBJZCk7XG4gICAgICBpZiAoIWNvbmZpZykge1xuICAgICAgICByZXMuc3RhdHVzKDIwMCk7XG4gICAgICAgIHJlcy5qc29uKHt9KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3QgeyBmaWxlc0NvbnRyb2xsZXIgfSA9IGNvbmZpZztcbiAgICAgIGxldCBmaWxlbmFtZSA9IEZpbGVzUm91dGVyLl9nZXRGaWxlbmFtZUZyb21QYXJhbXMocmVxKTtcbiAgICAgIGNvbnN0IGZpbGUgPSBuZXcgUGFyc2UuRmlsZShmaWxlbmFtZSwgeyBiYXNlNjQ6ICcnIH0pO1xuICAgICAgY29uc3QgdHJpZ2dlclJlc3VsdCA9IGF3YWl0IHRyaWdnZXJzLm1heWJlUnVuRmlsZVRyaWdnZXIoXG4gICAgICAgIHRyaWdnZXJzLlR5cGVzLmJlZm9yZUZpbmQsXG4gICAgICAgIHsgZmlsZSB9LFxuICAgICAgICBjb25maWcsXG4gICAgICAgIHJlcS5hdXRoXG4gICAgICApO1xuICAgICAgaWYgKHRyaWdnZXJSZXN1bHQ/LmZpbGU/Ll9uYW1lKSB7XG4gICAgICAgIGZpbGVuYW1lID0gdHJpZ2dlclJlc3VsdC5maWxlLl9uYW1lO1xuICAgICAgfVxuICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IGZpbGVzQ29udHJvbGxlci5nZXRNZXRhZGF0YShmaWxlbmFtZSkuY2F0Y2goKCkgPT4ge1xuICAgICAgICByZXMuc3RhdHVzKDIwMCk7XG4gICAgICAgIHJlcy5qc29uKHt9KTtcbiAgICAgIH0pO1xuICAgICAgaWYgKCFkYXRhKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGF3YWl0IHRyaWdnZXJzLm1heWJlUnVuRmlsZVRyaWdnZXIoXG4gICAgICAgIHRyaWdnZXJzLlR5cGVzLmFmdGVyRmluZCxcbiAgICAgICAgeyBmaWxlIH0sXG4gICAgICAgIGNvbmZpZyxcbiAgICAgICAgcmVxLmF1dGhcbiAgICAgICk7XG4gICAgICByZXMuc3RhdHVzKDIwMCk7XG4gICAgICByZXMuanNvbihkYXRhKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBjb25zdCBlcnIgPSB0cmlnZ2Vycy5yZXNvbHZlRXJyb3IoZSwge1xuICAgICAgICBjb2RlOiBQYXJzZS5FcnJvci5TQ1JJUFRfRkFJTEVELFxuICAgICAgICBtZXNzYWdlOiAnQ291bGQgbm90IGdldCBmaWxlIG1ldGFkYXRhLicsXG4gICAgICB9KTtcbiAgICAgIHJlcy5zdGF0dXMoNDAzKTtcbiAgICAgIHJlcy5qc29uKHsgY29kZTogZXJyLmNvZGUsIGVycm9yOiBlcnIubWVzc2FnZSB9KTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gaXNGaWxlU3RyZWFtYWJsZShyZXEsIGZpbGVzQ29udHJvbGxlcikge1xuICBjb25zdCByYW5nZSA9IChyZXEuZ2V0KCdSYW5nZScpIHx8ICcvLS8nKS5zcGxpdCgnLScpO1xuICBjb25zdCBzdGFydCA9IE51bWJlcihyYW5nZVswXSk7XG4gIGNvbnN0IGVuZCA9IE51bWJlcihyYW5nZVsxXSk7XG4gIHJldHVybiAoXG4gICAgKCFpc05hTihzdGFydCkgfHwgIWlzTmFOKGVuZCkpICYmIHR5cGVvZiBmaWxlc0NvbnRyb2xsZXIuYWRhcHRlci5oYW5kbGVGaWxlU3RyZWFtID09PSAnZnVuY3Rpb24nXG4gICk7XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBQSxJQUFBQSxRQUFBLEdBQUFDLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBQyxXQUFBLEdBQUFDLHVCQUFBLENBQUFGLE9BQUE7QUFDQSxJQUFBRyxLQUFBLEdBQUFKLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBSSxPQUFBLEdBQUFMLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBSyxPQUFBLEdBQUFOLHNCQUFBLENBQUFDLE9BQUE7QUFHQSxJQUFBTSxPQUFBLEdBQUFOLE9BQUE7QUFDQSxJQUFBTyxNQUFBLEdBQUFQLE9BQUE7QUFBb0QsU0FBQUUsd0JBQUFNLENBQUEsRUFBQUMsQ0FBQSw2QkFBQUMsT0FBQSxNQUFBQyxDQUFBLE9BQUFELE9BQUEsSUFBQUUsQ0FBQSxPQUFBRixPQUFBLFlBQUFSLHVCQUFBLFlBQUFBLENBQUFNLENBQUEsRUFBQUMsQ0FBQSxTQUFBQSxDQUFBLElBQUFELENBQUEsSUFBQUEsQ0FBQSxDQUFBSyxVQUFBLFNBQUFMLENBQUEsTUFBQU0sQ0FBQSxFQUFBQyxDQUFBLEVBQUFDLENBQUEsS0FBQUMsU0FBQSxRQUFBQyxPQUFBLEVBQUFWLENBQUEsaUJBQUFBLENBQUEsdUJBQUFBLENBQUEseUJBQUFBLENBQUEsU0FBQVEsQ0FBQSxNQUFBRixDQUFBLEdBQUFMLENBQUEsR0FBQUcsQ0FBQSxHQUFBRCxDQUFBLFFBQUFHLENBQUEsQ0FBQUssR0FBQSxDQUFBWCxDQUFBLFVBQUFNLENBQUEsQ0FBQU0sR0FBQSxDQUFBWixDQUFBLEdBQUFNLENBQUEsQ0FBQU8sR0FBQSxDQUFBYixDQUFBLEVBQUFRLENBQUEsZ0JBQUFQLENBQUEsSUFBQUQsQ0FBQSxnQkFBQUMsQ0FBQSxPQUFBYSxjQUFBLENBQUFDLElBQUEsQ0FBQWYsQ0FBQSxFQUFBQyxDQUFBLE9BQUFNLENBQUEsSUFBQUQsQ0FBQSxHQUFBVSxNQUFBLENBQUFDLGNBQUEsS0FBQUQsTUFBQSxDQUFBRSx3QkFBQSxDQUFBbEIsQ0FBQSxFQUFBQyxDQUFBLE9BQUFNLENBQUEsQ0FBQUssR0FBQSxJQUFBTCxDQUFBLENBQUFNLEdBQUEsSUFBQVAsQ0FBQSxDQUFBRSxDQUFBLEVBQUFQLENBQUEsRUFBQU0sQ0FBQSxJQUFBQyxDQUFBLENBQUFQLENBQUEsSUFBQUQsQ0FBQSxDQUFBQyxDQUFBLFdBQUFPLENBQUEsS0FBQVIsQ0FBQSxFQUFBQyxDQUFBO0FBQUEsU0FBQVYsdUJBQUFTLENBQUEsV0FBQUEsQ0FBQSxJQUFBQSxDQUFBLENBQUFLLFVBQUEsR0FBQUwsQ0FBQSxLQUFBVSxPQUFBLEVBQUFWLENBQUE7QUFIcEQsTUFBTW1CLFFBQVEsR0FBRzNCLE9BQU8sQ0FBQyxhQUFhLENBQUM7QUFDdkMsTUFBTTRCLEtBQUssR0FBRzVCLE9BQU8sQ0FBQyxVQUFVLENBQUM7QUFJakM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sU0FBUzZCLHVCQUF1QkEsQ0FBQ0MsTUFBTSxFQUFFQyxRQUFRLEVBQUU7RUFDeEQsSUFBSUMsVUFBVSxHQUFHLENBQUM7RUFDbEIsSUFBSUMsT0FBTyxHQUFHLEtBQUs7RUFDbkIsSUFBSUMsV0FBVyxHQUFHLEtBQUs7RUFDdkIsSUFBSUMsTUFBTSxFQUFFQyxLQUFLLEVBQUVDLE9BQU87RUFFMUIsTUFBTUMsTUFBTSxHQUFHLElBQUlDLGdCQUFRLENBQUM7SUFDMUJDLElBQUlBLENBQUEsRUFBRztNQUNMLElBQUksQ0FBQ1AsT0FBTyxFQUFFO1FBQ1pBLE9BQU8sR0FBRyxJQUFJO1FBRWRFLE1BQU0sR0FBSU0sS0FBSyxJQUFLO1VBQ2xCVCxVQUFVLElBQUlTLEtBQUssQ0FBQ0MsTUFBTTtVQUMxQixJQUFJVixVQUFVLEdBQUdELFFBQVEsRUFBRTtZQUN6Qk8sTUFBTSxDQUFDSyxPQUFPLENBQ1osSUFBSUMsYUFBSyxDQUFDQyxLQUFLLENBQ2JELGFBQUssQ0FBQ0MsS0FBSyxDQUFDQyxlQUFlLEVBQzNCLHNDQUFzQ2YsUUFBUSxTQUNoRCxDQUNGLENBQUM7WUFDRDtVQUNGO1VBQ0EsSUFBSSxDQUFDTyxNQUFNLENBQUNTLElBQUksQ0FBQ04sS0FBSyxDQUFDLEVBQUU7WUFDdkJYLE1BQU0sQ0FBQ2tCLEtBQUssQ0FBQyxDQUFDO1VBQ2hCO1FBQ0YsQ0FBQztRQUVEWixLQUFLLEdBQUdBLENBQUEsS0FBTTtVQUNaRixXQUFXLEdBQUcsSUFBSTtVQUNsQkksTUFBTSxDQUFDUyxJQUFJLENBQUMsSUFBSSxDQUFDO1FBQ25CLENBQUM7UUFFRFYsT0FBTyxHQUFJWSxHQUFHLElBQUtYLE1BQU0sQ0FBQ0ssT0FBTyxDQUFDTSxHQUFHLENBQUM7UUFFdENuQixNQUFNLENBQUNvQixFQUFFLENBQUMsTUFBTSxFQUFFZixNQUFNLENBQUM7UUFDekJMLE1BQU0sQ0FBQ29CLEVBQUUsQ0FBQyxLQUFLLEVBQUVkLEtBQUssQ0FBQztRQUN2Qk4sTUFBTSxDQUFDb0IsRUFBRSxDQUFDLE9BQU8sRUFBRWIsT0FBTyxDQUFDO01BQzdCOztNQUVBO01BQ0EsSUFBSSxDQUFDSCxXQUFXLEVBQUU7UUFDaEJKLE1BQU0sQ0FBQ3FCLE1BQU0sQ0FBQyxDQUFDO01BQ2pCO0lBQ0YsQ0FBQztJQUNEUixPQUFPQSxDQUFDTSxHQUFHLEVBQUVHLFFBQVEsRUFBRTtNQUNyQixJQUFJakIsTUFBTSxFQUFFO1FBQ1ZMLE1BQU0sQ0FBQ3VCLGNBQWMsQ0FBQyxNQUFNLEVBQUVsQixNQUFNLENBQUM7TUFDdkM7TUFDQSxJQUFJQyxLQUFLLEVBQUU7UUFDVE4sTUFBTSxDQUFDdUIsY0FBYyxDQUFDLEtBQUssRUFBRWpCLEtBQUssQ0FBQztNQUNyQztNQUNBLElBQUlDLE9BQU8sRUFBRTtRQUNYUCxNQUFNLENBQUN1QixjQUFjLENBQUMsT0FBTyxFQUFFaEIsT0FBTyxDQUFDO01BQ3pDO01BQ0E7TUFDQVAsTUFBTSxDQUFDb0IsRUFBRSxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDO01BQzVCLElBQUksQ0FBQ2hCLFdBQVcsRUFBRTtRQUNoQkosTUFBTSxDQUFDcUIsTUFBTSxDQUFDLENBQUM7TUFDakI7TUFDQUMsUUFBUSxDQUFDSCxHQUFHLENBQUM7SUFDZjtFQUNGLENBQUMsQ0FBQztFQUVGLE9BQU9YLE1BQU07QUFDZjs7QUFFQTtBQUNBO0FBQ0E7QUFDTyxNQUFNZ0IsMkJBQTJCLEdBQUFDLE9BQUEsQ0FBQUQsMkJBQUEsR0FBRyxDQUFDLFVBQVUsQ0FBQztBQUVoRCxNQUFNRSxXQUFXLENBQUM7RUFDdkJDLGFBQWFBLENBQUM7SUFBRUMsYUFBYSxHQUFHO0VBQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFO0lBQzdDLElBQUlDLE1BQU0sR0FBR0MsZ0JBQU8sQ0FBQ0MsTUFBTSxDQUFDLENBQUM7SUFDN0I7SUFDQUYsTUFBTSxDQUFDdkMsR0FBRyxDQUFDLGtDQUFrQyxFQUFFLElBQUksQ0FBQzBDLGVBQWUsQ0FBQztJQUNwRUgsTUFBTSxDQUFDdkMsR0FBRyxDQUFDLHlCQUF5QixFQUFFLElBQUksQ0FBQzJDLFVBQVUsQ0FBQztJQUV0REosTUFBTSxDQUFDSyxJQUFJLENBQUMsUUFBUSxFQUFFLFVBQVVDLEdBQUcsRUFBRUMsR0FBRyxFQUFFQyxJQUFJLEVBQUU7TUFDOUNBLElBQUksQ0FBQyxJQUFJdkIsYUFBSyxDQUFDQyxLQUFLLENBQUNELGFBQUssQ0FBQ0MsS0FBSyxDQUFDdUIsaUJBQWlCLEVBQUUsd0JBQXdCLENBQUMsQ0FBQztJQUNoRixDQUFDLENBQUM7SUFFRlQsTUFBTSxDQUFDSyxJQUFJLENBQ1Qsa0JBQWtCLEVBQ2xCLElBQUksQ0FBQ0ssdUJBQXVCLENBQUMsQ0FBQyxFQUM5QixJQUFJLENBQUNDLHNCQUFzQixDQUFDWixhQUFhLENBQUMsRUFDMUN6RCxXQUFXLENBQUNzRSxrQkFBa0IsRUFDOUJ0RSxXQUFXLENBQUN1RSxrQkFBa0IsRUFDOUIsSUFBSSxDQUFDQyxhQUFhLENBQUNDLElBQUksQ0FBQyxJQUFJLENBQzlCLENBQUM7SUFFRGYsTUFBTSxDQUFDZ0IsTUFBTSxDQUNYLGtCQUFrQixFQUNsQjFFLFdBQVcsQ0FBQ3NFLGtCQUFrQixFQUM5QnRFLFdBQVcsQ0FBQ3VFLGtCQUFrQixFQUM5QnZFLFdBQVcsQ0FBQzJFLHNCQUFzQixFQUNsQyxJQUFJLENBQUNDLGFBQ1AsQ0FBQztJQUNELE9BQU9sQixNQUFNO0VBQ2Y7RUFFQSxPQUFPbUIsc0JBQXNCQSxDQUFDYixHQUFHLEVBQUU7SUFDakMsTUFBTWMsS0FBSyxHQUFHZCxHQUFHLENBQUNlLE1BQU0sQ0FBQ0MsUUFBUTtJQUNqQyxPQUFPQyxLQUFLLENBQUNDLE9BQU8sQ0FBQ0osS0FBSyxDQUFDLEdBQUdBLEtBQUssQ0FBQ0ssSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHTCxLQUFLO0VBQ3ZEO0VBRUEsT0FBT00saUJBQWlCQSxDQUFDQyxTQUFTLEVBQUU7SUFDbEMsSUFBSSxPQUFPQSxTQUFTLEtBQUssUUFBUSxFQUFFO01BQ2pDLE9BQU8sSUFBSTFDLGFBQUssQ0FBQ0MsS0FBSyxDQUFDRCxhQUFLLENBQUNDLEtBQUssQ0FBQ3VCLGlCQUFpQixFQUFFLDZCQUE2QixDQUFDO0lBQ3RGO0lBQ0EsSUFBSWtCLFNBQVMsQ0FBQzVDLE1BQU0sS0FBSyxDQUFDLEVBQUU7TUFDMUIsT0FBTyxJQUFJRSxhQUFLLENBQUNDLEtBQUssQ0FBQ0QsYUFBSyxDQUFDQyxLQUFLLENBQUN1QixpQkFBaUIsRUFBRSw4QkFBOEIsQ0FBQztJQUN2RjtJQUNBLElBQUlrQixTQUFTLENBQUM1QyxNQUFNLEdBQUcsR0FBRyxFQUFFO01BQzFCLE9BQU8sSUFBSUUsYUFBSyxDQUFDQyxLQUFLLENBQUNELGFBQUssQ0FBQ0MsS0FBSyxDQUFDdUIsaUJBQWlCLEVBQUUsNkJBQTZCLENBQUM7SUFDdEY7SUFDQSxJQUFJa0IsU0FBUyxDQUFDQyxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUU7TUFDNUIsT0FBTyxJQUFJM0MsYUFBSyxDQUFDQyxLQUFLLENBQUNELGFBQUssQ0FBQ0MsS0FBSyxDQUFDdUIsaUJBQWlCLEVBQUUsa0NBQWtDLENBQUM7SUFDM0Y7SUFDQSxJQUFJa0IsU0FBUyxDQUFDRSxVQUFVLENBQUMsR0FBRyxDQUFDLElBQUlGLFNBQVMsQ0FBQ0csUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFO01BQ3hELE9BQU8sSUFBSTdDLGFBQUssQ0FBQ0MsS0FBSyxDQUNwQkQsYUFBSyxDQUFDQyxLQUFLLENBQUN1QixpQkFBaUIsRUFDN0IsMkNBQ0YsQ0FBQztJQUNIO0lBQ0EsSUFBSWtCLFNBQVMsQ0FBQ0MsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFO01BQzVCLE9BQU8sSUFBSTNDLGFBQUssQ0FBQ0MsS0FBSyxDQUNwQkQsYUFBSyxDQUFDQyxLQUFLLENBQUN1QixpQkFBaUIsRUFDN0IsaURBQ0YsQ0FBQztJQUNIO0lBQ0EsTUFBTXNCLFlBQVksR0FBR0osU0FBUyxDQUFDSyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzVDLElBQUlyQywyQkFBMkIsQ0FBQ2lDLFFBQVEsQ0FBQ0csWUFBWSxDQUFDLEVBQUU7TUFDdEQsT0FBTyxJQUFJOUMsYUFBSyxDQUFDQyxLQUFLLENBQ3BCRCxhQUFLLENBQUNDLEtBQUssQ0FBQ3VCLGlCQUFpQixFQUM3QixtREFBbURzQixZQUFZLElBQ2pFLENBQUM7SUFDSDtJQUNBLE1BQU1FLFFBQVEsR0FBRywrQkFBK0I7SUFDaEQsSUFBSSxDQUFDQSxRQUFRLENBQUNDLElBQUksQ0FBQ1AsU0FBUyxDQUFDLEVBQUU7TUFDN0IsT0FBTyxJQUFJMUMsYUFBSyxDQUFDQyxLQUFLLENBQ3BCRCxhQUFLLENBQUNDLEtBQUssQ0FBQ3VCLGlCQUFpQixFQUM3Qix3Q0FDRixDQUFDO0lBQ0g7SUFDQSxPQUFPLElBQUk7RUFDYjtFQUVBLE1BQU1MLFVBQVVBLENBQUNFLEdBQUcsRUFBRUMsR0FBRyxFQUFFO0lBQ3pCLE1BQU00QixNQUFNLEdBQUdDLGVBQU0sQ0FBQzNFLEdBQUcsQ0FBQzZDLEdBQUcsQ0FBQ2UsTUFBTSxDQUFDZ0IsS0FBSyxDQUFDO0lBQzNDLElBQUksQ0FBQ0YsTUFBTSxFQUFFO01BQ1gsTUFBTUcsS0FBSyxHQUFHLElBQUFDLCtCQUF3QixFQUFDLEdBQUcsRUFBRSx5QkFBeUIsRUFBRUosTUFBTSxDQUFDO01BQzlFNUIsR0FBRyxDQUFDaUMsTUFBTSxDQUFDRixLQUFLLENBQUNFLE1BQU0sQ0FBQztNQUN4QmpDLEdBQUcsQ0FBQ2tDLElBQUksQ0FBQztRQUFFSCxLQUFLLEVBQUVBLEtBQUssQ0FBQ0k7TUFBUSxDQUFDLENBQUM7TUFDbEM7SUFDRjtJQUVBLElBQUlDLFFBQVEsR0FBRzlDLFdBQVcsQ0FBQ3NCLHNCQUFzQixDQUFDYixHQUFHLENBQUM7SUFDdEQsSUFBSTtNQUNGLE1BQU1zQyxlQUFlLEdBQUdULE1BQU0sQ0FBQ1MsZUFBZTtNQUM5QyxNQUFNQyxJQUFJLEdBQUcsQ0FBQyxNQUFNLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRXRGLE9BQU87TUFDM0MsSUFBSXVGLFdBQVcsR0FBR0QsSUFBSSxDQUFDRSxPQUFPLENBQUNKLFFBQVEsQ0FBQztNQUN4QyxJQUFJSyxJQUFJLEdBQUcsSUFBSS9ELGFBQUssQ0FBQ2dFLElBQUksQ0FBQ04sUUFBUSxFQUFFO1FBQUVPLE1BQU0sRUFBRTtNQUFHLENBQUMsRUFBRUosV0FBVyxDQUFDO01BQ2hFLE1BQU1LLGFBQWEsR0FBRyxNQUFNbkYsUUFBUSxDQUFDb0YsbUJBQW1CLENBQ3REcEYsUUFBUSxDQUFDcUYsS0FBSyxDQUFDQyxVQUFVLEVBQ3pCO1FBQUVOO01BQUssQ0FBQyxFQUNSYixNQUFNLEVBQ043QixHQUFHLENBQUNpRCxJQUNOLENBQUM7TUFDRCxJQUFJSixhQUFhLEVBQUVILElBQUksRUFBRVEsS0FBSyxFQUFFO1FBQzlCYixRQUFRLEdBQUdRLGFBQWEsRUFBRUgsSUFBSSxFQUFFUSxLQUFLO1FBQ3JDVixXQUFXLEdBQUdELElBQUksQ0FBQ0UsT0FBTyxDQUFDSixRQUFRLENBQUM7TUFDdEM7TUFFQSxNQUFNYyxzQkFBc0IsR0FBRztRQUFFLHdCQUF3QixFQUFFO01BQVUsQ0FBQztNQUV0RSxJQUFJQyxnQkFBZ0IsQ0FBQ3BELEdBQUcsRUFBRXNDLGVBQWUsQ0FBQyxFQUFFO1FBQzFDLEtBQUssTUFBTSxDQUFDZSxHQUFHLEVBQUVDLEtBQUssQ0FBQyxJQUFJL0YsTUFBTSxDQUFDZ0csT0FBTyxDQUFDSixzQkFBc0IsQ0FBQyxFQUFFO1VBQ2pFbEQsR0FBRyxDQUFDN0MsR0FBRyxDQUFDaUcsR0FBRyxFQUFFQyxLQUFLLENBQUM7UUFDckI7UUFDQWhCLGVBQWUsQ0FBQ2tCLGdCQUFnQixDQUFDM0IsTUFBTSxFQUFFUSxRQUFRLEVBQUVyQyxHQUFHLEVBQUVDLEdBQUcsRUFBRXVDLFdBQVcsQ0FBQyxDQUFDaUIsS0FBSyxDQUFDLE1BQU07VUFDcEZ4RCxHQUFHLENBQUNpQyxNQUFNLENBQUMsR0FBRyxDQUFDO1VBQ2ZqQyxHQUFHLENBQUM3QyxHQUFHLENBQUMsY0FBYyxFQUFFLFlBQVksQ0FBQztVQUNyQzZDLEdBQUcsQ0FBQ3lELEdBQUcsQ0FBQyxpQkFBaUIsQ0FBQztRQUM1QixDQUFDLENBQUM7UUFDRjtNQUNGO01BRUEsSUFBSUMsSUFBSSxHQUFHLE1BQU1yQixlQUFlLENBQUNzQixXQUFXLENBQUMvQixNQUFNLEVBQUVRLFFBQVEsQ0FBQyxDQUFDb0IsS0FBSyxDQUFDLE1BQU07UUFDekV4RCxHQUFHLENBQUNpQyxNQUFNLENBQUMsR0FBRyxDQUFDO1FBQ2ZqQyxHQUFHLENBQUM3QyxHQUFHLENBQUMsY0FBYyxFQUFFLFlBQVksQ0FBQztRQUNyQzZDLEdBQUcsQ0FBQ3lELEdBQUcsQ0FBQyxpQkFBaUIsQ0FBQztNQUM1QixDQUFDLENBQUM7TUFDRixJQUFJLENBQUNDLElBQUksRUFBRTtRQUNUO01BQ0Y7TUFDQWpCLElBQUksR0FBRyxJQUFJL0QsYUFBSyxDQUFDZ0UsSUFBSSxDQUFDTixRQUFRLEVBQUU7UUFBRU8sTUFBTSxFQUFFZSxJQUFJLENBQUNFLFFBQVEsQ0FBQyxRQUFRO01BQUUsQ0FBQyxFQUFFckIsV0FBVyxDQUFDO01BQ2pGLE1BQU1zQixTQUFTLEdBQUcsTUFBTXBHLFFBQVEsQ0FBQ29GLG1CQUFtQixDQUNsRHBGLFFBQVEsQ0FBQ3FGLEtBQUssQ0FBQ2UsU0FBUyxFQUN4QjtRQUFFcEIsSUFBSTtRQUFFcUIsYUFBYSxFQUFFLEtBQUs7UUFBRUMsZUFBZSxFQUFFO1VBQUUsR0FBR2I7UUFBdUI7TUFBRSxDQUFDLEVBQzlFdEIsTUFBTSxFQUNON0IsR0FBRyxDQUFDaUQsSUFDTixDQUFDO01BRUQsSUFBSWEsU0FBUyxFQUFFcEIsSUFBSSxFQUFFO1FBQ25CRixXQUFXLEdBQUdELElBQUksQ0FBQ0UsT0FBTyxDQUFDcUIsU0FBUyxDQUFDcEIsSUFBSSxDQUFDUSxLQUFLLENBQUM7UUFDaERTLElBQUksR0FBR00sTUFBTSxDQUFDQyxJQUFJLENBQUNKLFNBQVMsQ0FBQ3BCLElBQUksQ0FBQ3lCLEtBQUssRUFBRSxRQUFRLENBQUM7TUFDcEQ7TUFFQWxFLEdBQUcsQ0FBQ2lDLE1BQU0sQ0FBQyxHQUFHLENBQUM7TUFDZmpDLEdBQUcsQ0FBQzdDLEdBQUcsQ0FBQyxjQUFjLEVBQUVvRixXQUFXLENBQUM7TUFDcEN2QyxHQUFHLENBQUM3QyxHQUFHLENBQUMsZ0JBQWdCLEVBQUV1RyxJQUFJLENBQUNsRixNQUFNLENBQUM7TUFDdEMsSUFBSXFGLFNBQVMsQ0FBQ0MsYUFBYSxFQUFFO1FBQzNCOUQsR0FBRyxDQUFDN0MsR0FBRyxDQUFDLHFCQUFxQixFQUFFLHVCQUF1QjBHLFNBQVMsQ0FBQ3BCLElBQUksQ0FBQ1EsS0FBSyxFQUFFLENBQUM7TUFDL0U7TUFDQSxJQUFJWSxTQUFTLENBQUNFLGVBQWUsRUFBRTtRQUM3QixLQUFLLE1BQU0sQ0FBQ1gsR0FBRyxFQUFFQyxLQUFLLENBQUMsSUFBSS9GLE1BQU0sQ0FBQ2dHLE9BQU8sQ0FBQ08sU0FBUyxDQUFDRSxlQUFlLENBQUMsRUFBRTtVQUNwRS9ELEdBQUcsQ0FBQzdDLEdBQUcsQ0FBQ2lHLEdBQUcsRUFBRUMsS0FBSyxDQUFDO1FBQ3JCO01BQ0Y7TUFDQXJELEdBQUcsQ0FBQ3lELEdBQUcsQ0FBQ0MsSUFBSSxDQUFDO0lBQ2YsQ0FBQyxDQUFDLE9BQU9wSCxDQUFDLEVBQUU7TUFDVixNQUFNeUMsR0FBRyxHQUFHdEIsUUFBUSxDQUFDMEcsWUFBWSxDQUFDN0gsQ0FBQyxFQUFFO1FBQ25DOEgsSUFBSSxFQUFFMUYsYUFBSyxDQUFDQyxLQUFLLENBQUMwRixhQUFhO1FBQy9CbEMsT0FBTyxFQUFFLHdCQUF3QkMsUUFBUTtNQUMzQyxDQUFDLENBQUM7TUFDRnBDLEdBQUcsQ0FBQ2lDLE1BQU0sQ0FBQyxHQUFHLENBQUM7TUFDZmpDLEdBQUcsQ0FBQ2tDLElBQUksQ0FBQztRQUFFa0MsSUFBSSxFQUFFckYsR0FBRyxDQUFDcUYsSUFBSTtRQUFFckMsS0FBSyxFQUFFaEQsR0FBRyxDQUFDb0Q7TUFBUSxDQUFDLENBQUM7SUFDbEQ7RUFDRjs7RUFFQTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFDRWhDLHVCQUF1QkEsQ0FBQSxFQUFHO0lBQ3hCLE9BQU8sT0FBT0osR0FBRyxFQUFFQyxHQUFHLEVBQUVDLElBQUksS0FBSztNQUMvQixNQUFNcUUscUJBQXFCLEdBQUd2RSxHQUFHLENBQUM3QyxHQUFHLENBQUMsOEJBQThCLENBQUM7TUFDckUsSUFBSSxDQUFDb0gscUJBQXFCLEVBQUU7UUFDMUIsT0FBT3JFLElBQUksQ0FBQyxDQUFDO01BQ2Y7TUFDQSxNQUFNNkIsS0FBSyxHQUFHL0IsR0FBRyxDQUFDN0MsR0FBRyxDQUFDLHdCQUF3QixDQUFDO01BQy9DLE1BQU0wRSxNQUFNLEdBQUdDLGVBQU0sQ0FBQzNFLEdBQUcsQ0FBQzRFLEtBQUssQ0FBQztNQUNoQyxJQUFJLENBQUNGLE1BQU0sRUFBRTtRQUNYLE1BQU1HLEtBQUssR0FBRyxJQUFBQywrQkFBd0IsRUFBQyxHQUFHLEVBQUUseUJBQXlCLEVBQUV1QyxTQUFTLENBQUM7UUFDakZ2RSxHQUFHLENBQUNpQyxNQUFNLENBQUNGLEtBQUssQ0FBQ0UsTUFBTSxDQUFDO1FBQ3hCakMsR0FBRyxDQUFDa0MsSUFBSSxDQUFDO1VBQUVILEtBQUssRUFBRUEsS0FBSyxDQUFDSTtRQUFRLENBQUMsQ0FBQztRQUNsQztNQUNGO01BQ0EsTUFBTXFDLFNBQVMsR0FBRyxNQUFNNUMsTUFBTSxDQUFDNkMsYUFBYSxDQUFDLENBQUM7TUFDOUMsSUFBSTFFLEdBQUcsQ0FBQzdDLEdBQUcsQ0FBQyxvQkFBb0IsQ0FBQyxLQUFLc0gsU0FBUyxFQUFFO1FBQy9DLE1BQU16QyxLQUFLLEdBQUcsSUFBQUMsK0JBQXdCLEVBQUMsR0FBRyxFQUFFLHNDQUFzQyxFQUFFSixNQUFNLENBQUM7UUFDM0Y1QixHQUFHLENBQUNpQyxNQUFNLENBQUNGLEtBQUssQ0FBQ0UsTUFBTSxDQUFDO1FBQ3hCakMsR0FBRyxDQUFDa0MsSUFBSSxDQUFDO1VBQUVILEtBQUssRUFBRUEsS0FBSyxDQUFDSTtRQUFRLENBQUMsQ0FBQztRQUNsQztNQUNGO01BQ0EsSUFBSVAsTUFBTSxDQUFDOEMsWUFBWSxFQUFFbEcsTUFBTSxJQUFJLENBQUN6QyxXQUFXLENBQUM0SSxPQUFPLENBQUM1RSxHQUFHLENBQUM2RSxFQUFFLEVBQUVoRCxNQUFNLENBQUM4QyxZQUFZLEVBQUU5QyxNQUFNLENBQUNpRCxpQkFBaUIsQ0FBQyxFQUFFO1FBQzlHLE1BQU05QyxLQUFLLEdBQUcsSUFBQUMsK0JBQXdCLEVBQUMsR0FBRyxFQUFFLHNDQUFzQyxFQUFFSixNQUFNLENBQUM7UUFDM0Y1QixHQUFHLENBQUNpQyxNQUFNLENBQUNGLEtBQUssQ0FBQ0UsTUFBTSxDQUFDO1FBQ3hCakMsR0FBRyxDQUFDa0MsSUFBSSxDQUFDO1VBQUVILEtBQUssRUFBRUEsS0FBSyxDQUFDSTtRQUFRLENBQUMsQ0FBQztRQUNsQztNQUNGO01BQ0EsSUFBSTJDLFdBQVc7TUFDZixJQUFJO1FBQ0ZBLFdBQVcsR0FBR3BILEtBQUssQ0FBQ3FILGdCQUFnQixDQUFDVCxxQkFBcUIsQ0FBQztNQUM3RCxDQUFDLENBQUMsTUFBTTtRQUNOLE9BQU9yRSxJQUFJLENBQ1QsSUFBSXZCLGFBQUssQ0FBQ0MsS0FBSyxDQUNiRCxhQUFLLENBQUNDLEtBQUssQ0FBQ0MsZUFBZSxFQUMzQix5Q0FBeUMwRixxQkFBcUIsRUFDaEUsQ0FDRixDQUFDO01BQ0g7TUFDQXZFLEdBQUcsQ0FBQ2lGLHNCQUFzQixHQUFHRixXQUFXO01BQ3hDN0UsSUFBSSxDQUFDLENBQUM7SUFDUixDQUFDO0VBQ0g7RUFFQUcsc0JBQXNCQSxDQUFDWixhQUFhLEVBQUU7SUFDcEMsTUFBTXlGLGVBQWUsR0FBR3ZILEtBQUssQ0FBQ3FILGdCQUFnQixDQUFDdkYsYUFBYSxDQUFDO0lBQzdELE9BQU8sQ0FBQ08sR0FBRyxFQUFFQyxHQUFHLEVBQUVDLElBQUksS0FBSztNQUN6QixJQUFJRixHQUFHLENBQUM3QyxHQUFHLENBQUMscUJBQXFCLENBQUMsS0FBSyxRQUFRLEVBQUU7UUFDL0M2QyxHQUFHLENBQUNtRixtQkFBbUIsR0FBR25GLEdBQUcsQ0FBQ2lGLHNCQUFzQixJQUFJQyxlQUFlO1FBQ3ZFLE9BQU9oRixJQUFJLENBQUMsQ0FBQztNQUNmO01BQ0EsTUFBTWtGLEtBQUssR0FBR3BGLEdBQUcsQ0FBQ2lGLHNCQUFzQixJQUFJeEYsYUFBYTtNQUN6RCxPQUFPRSxnQkFBTyxDQUFDMEYsR0FBRyxDQUFDO1FBQUVDLElBQUksRUFBRUEsQ0FBQSxLQUFNLElBQUk7UUFBRUY7TUFBTSxDQUFDLENBQUMsQ0FBQ3BGLEdBQUcsRUFBRUMsR0FBRyxFQUFFQyxJQUFJLENBQUM7SUFDakUsQ0FBQztFQUNIO0VBRUEsTUFBTU0sYUFBYUEsQ0FBQ1IsR0FBRyxFQUFFQyxHQUFHLEVBQUVDLElBQUksRUFBRTtJQUNsQyxJQUFJRixHQUFHLENBQUNpRCxJQUFJLENBQUNzQyxVQUFVLEVBQUU7TUFDdkIsTUFBTXZELEtBQUssR0FBRyxJQUFBQywrQkFBd0IsRUFBQyxHQUFHLEVBQUUscURBQXFELEVBQUVqQyxHQUFHLENBQUM2QixNQUFNLENBQUM7TUFDOUc1QixHQUFHLENBQUNpQyxNQUFNLENBQUNGLEtBQUssQ0FBQ0UsTUFBTSxDQUFDO01BQ3hCakMsR0FBRyxDQUFDeUQsR0FBRyxDQUFDLGFBQWExQixLQUFLLENBQUNJLE9BQU8sSUFBSSxDQUFDO01BQ3ZDO0lBQ0Y7SUFDQSxNQUFNUCxNQUFNLEdBQUc3QixHQUFHLENBQUM2QixNQUFNO0lBQ3pCLE1BQU0yRCxJQUFJLEdBQUd4RixHQUFHLENBQUNpRCxJQUFJLENBQUN1QyxJQUFJO0lBQzFCLE1BQU1DLFFBQVEsR0FBR3pGLEdBQUcsQ0FBQ2lELElBQUksQ0FBQ3dDLFFBQVE7SUFDbEMsTUFBTUMsUUFBUSxHQUFHRixJQUFJLElBQUk3RyxhQUFLLENBQUNnSCxjQUFjLENBQUNELFFBQVEsQ0FBQ0YsSUFBSSxDQUFDO0lBQzVELElBQUksQ0FBQ0MsUUFBUSxJQUFJLENBQUM1RCxNQUFNLENBQUMrRCxVQUFVLENBQUNDLHNCQUFzQixJQUFJSCxRQUFRLEVBQUU7TUFDdEV4RixJQUFJLENBQ0YsSUFBSXZCLGFBQUssQ0FBQ0MsS0FBSyxDQUFDRCxhQUFLLENBQUNDLEtBQUssQ0FBQ0MsZUFBZSxFQUFFLDRDQUE0QyxDQUMzRixDQUFDO01BQ0Q7SUFDRjtJQUNBLElBQUksQ0FBQzRHLFFBQVEsSUFBSSxDQUFDNUQsTUFBTSxDQUFDK0QsVUFBVSxDQUFDRSwwQkFBMEIsSUFBSSxDQUFDSixRQUFRLElBQUlGLElBQUksRUFBRTtNQUNuRnRGLElBQUksQ0FDRixJQUFJdkIsYUFBSyxDQUFDQyxLQUFLLENBQ2JELGFBQUssQ0FBQ0MsS0FBSyxDQUFDQyxlQUFlLEVBQzNCLGdEQUNGLENBQ0YsQ0FBQztNQUNEO0lBQ0Y7SUFDQSxJQUFJLENBQUM0RyxRQUFRLElBQUksQ0FBQzVELE1BQU0sQ0FBQytELFVBQVUsQ0FBQ0csZUFBZSxJQUFJLENBQUNQLElBQUksRUFBRTtNQUM1RHRGLElBQUksQ0FBQyxJQUFJdkIsYUFBSyxDQUFDQyxLQUFLLENBQUNELGFBQUssQ0FBQ0MsS0FBSyxDQUFDQyxlQUFlLEVBQUUsb0NBQW9DLENBQUMsQ0FBQztNQUN4RjtJQUNGO0lBQ0EsTUFBTXlELGVBQWUsR0FBR1QsTUFBTSxDQUFDUyxlQUFlO0lBQzlDLE1BQU07TUFBRUQ7SUFBUyxDQUFDLEdBQUdyQyxHQUFHLENBQUNlLE1BQU07SUFDL0IsTUFBTXlCLFdBQVcsR0FBR3hDLEdBQUcsQ0FBQzdDLEdBQUcsQ0FBQyxjQUFjLENBQUM7SUFFM0MsTUFBTTZFLEtBQUssR0FBR00sZUFBZSxDQUFDMEQsZ0JBQWdCLENBQUMzRCxRQUFRLENBQUM7SUFDeEQsSUFBSUwsS0FBSyxFQUFFO01BQ1Q5QixJQUFJLENBQUM4QixLQUFLLENBQUM7TUFDWDtJQUNGO0lBRUEsTUFBTWlFLGNBQWMsR0FBR3BFLE1BQU0sQ0FBQytELFVBQVUsRUFBRUssY0FBYztJQUN4RCxJQUFJLENBQUNSLFFBQVEsSUFBSVEsY0FBYyxFQUFFO01BQy9CLE1BQU1DLGdCQUFnQixHQUFHQyxTQUFTLElBQUk7UUFDcEMsT0FBT0YsY0FBYyxDQUFDRyxJQUFJLENBQUNDLEdBQUcsSUFBSTtVQUNoQyxJQUFJQSxHQUFHLEtBQUssR0FBRyxFQUFFO1lBQ2YsT0FBTyxJQUFJO1VBQ2I7VUFDQSxNQUFNQyxLQUFLLEdBQUcsSUFBSUMsTUFBTSxDQUFDRixHQUFHLENBQUM7VUFDN0IsSUFBSUMsS0FBSyxDQUFDMUUsSUFBSSxDQUFDdUUsU0FBUyxDQUFDLEVBQUU7WUFDekIsT0FBTyxJQUFJO1VBQ2I7UUFDRixDQUFDLENBQUM7TUFDSixDQUFDO01BQ0QsSUFBSUEsU0FBUyxHQUFHM0QsV0FBVztNQUMzQixJQUFJSCxRQUFRLElBQUlBLFFBQVEsQ0FBQ2YsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFO1FBQ3RDNkUsU0FBUyxHQUFHOUQsUUFBUSxDQUFDbUUsU0FBUyxDQUFDbkUsUUFBUSxDQUFDb0UsV0FBVyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztNQUMvRCxDQUFDLE1BQU0sSUFBSWpFLFdBQVcsSUFBSUEsV0FBVyxDQUFDbEIsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFO1FBQ25ENkUsU0FBUyxHQUFHM0QsV0FBVyxDQUFDZCxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ3ZDO01BQ0E7TUFDQXlFLFNBQVMsR0FBR0EsU0FBUyxFQUFFekUsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFZ0YsT0FBTyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUM7TUFFekQsSUFBSVAsU0FBUyxJQUFJLENBQUNELGdCQUFnQixDQUFDQyxTQUFTLENBQUMsRUFBRTtRQUM3Q2pHLElBQUksQ0FDRixJQUFJdkIsYUFBSyxDQUFDQyxLQUFLLENBQ2JELGFBQUssQ0FBQ0MsS0FBSyxDQUFDQyxlQUFlLEVBQzNCLDRCQUE0QnNILFNBQVMsZUFDdkMsQ0FDRixDQUFDO1FBQ0Q7TUFDRjtJQUNGOztJQUVBO0lBQ0EsSUFBSW5HLEdBQUcsQ0FBQzdDLEdBQUcsQ0FBQyxxQkFBcUIsQ0FBQyxLQUFLLFFBQVEsRUFBRTtNQUMvQzZDLEdBQUcsQ0FBQzJHLFFBQVEsR0FBRyxDQUFDLENBQUM7TUFDakIsSUFBSTNHLEdBQUcsQ0FBQzdDLEdBQUcsQ0FBQyx3QkFBd0IsQ0FBQyxFQUFFO1FBQ3JDNkMsR0FBRyxDQUFDMkcsUUFBUSxDQUFDdEYsU0FBUyxHQUFHckIsR0FBRyxDQUFDN0MsR0FBRyxDQUFDLHdCQUF3QixDQUFDO01BQzVEO01BQ0EsSUFBSTZDLEdBQUcsQ0FBQzdDLEdBQUcsQ0FBQyx1QkFBdUIsQ0FBQyxFQUFFO1FBQ3BDLElBQUk7VUFDRixNQUFNeUosTUFBTSxHQUFHQyxJQUFJLENBQUNDLEtBQUssQ0FBQzlHLEdBQUcsQ0FBQzdDLEdBQUcsQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO1VBQzNELElBQUksQ0FBQ3lKLE1BQU0sSUFBSSxPQUFPQSxNQUFNLEtBQUssUUFBUSxJQUFJM0YsS0FBSyxDQUFDQyxPQUFPLENBQUMwRixNQUFNLENBQUMsRUFBRTtZQUNsRSxNQUFNLElBQUloSSxLQUFLLENBQUMsQ0FBQztVQUNuQjtVQUNBb0IsR0FBRyxDQUFDMkcsUUFBUSxDQUFDSSxRQUFRLEdBQUdILE1BQU07UUFDaEMsQ0FBQyxDQUFDLE1BQU07VUFDTjFHLElBQUksQ0FBQyxJQUFJdkIsYUFBSyxDQUFDQyxLQUFLLENBQUNELGFBQUssQ0FBQ0MsS0FBSyxDQUFDb0ksWUFBWSxFQUFFLCtDQUErQyxDQUFDLENBQUM7VUFDaEc7UUFDRjtNQUNGO01BQ0EsSUFBSWhILEdBQUcsQ0FBQzdDLEdBQUcsQ0FBQyxtQkFBbUIsQ0FBQyxFQUFFO1FBQ2hDLElBQUk7VUFDRixNQUFNeUosTUFBTSxHQUFHQyxJQUFJLENBQUNDLEtBQUssQ0FBQzlHLEdBQUcsQ0FBQzdDLEdBQUcsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO1VBQ3ZELElBQUksQ0FBQ3lKLE1BQU0sSUFBSSxPQUFPQSxNQUFNLEtBQUssUUFBUSxJQUFJM0YsS0FBSyxDQUFDQyxPQUFPLENBQUMwRixNQUFNLENBQUMsRUFBRTtZQUNsRSxNQUFNLElBQUloSSxLQUFLLENBQUMsQ0FBQztVQUNuQjtVQUNBb0IsR0FBRyxDQUFDMkcsUUFBUSxDQUFDTSxJQUFJLEdBQUdMLE1BQU07UUFDNUIsQ0FBQyxDQUFDLE1BQU07VUFDTjFHLElBQUksQ0FBQyxJQUFJdkIsYUFBSyxDQUFDQyxLQUFLLENBQUNELGFBQUssQ0FBQ0MsS0FBSyxDQUFDb0ksWUFBWSxFQUFFLDJDQUEyQyxDQUFDLENBQUM7VUFDNUY7UUFDRjtNQUNGO0lBQ0Y7O0lBRUE7SUFDQSxNQUFNM0YsU0FBUyxHQUFHckIsR0FBRyxDQUFDMkcsUUFBUSxFQUFFdEYsU0FBUztJQUN6QyxJQUFJQSxTQUFTLEtBQUttRCxTQUFTLEVBQUU7TUFDM0IsSUFBSSxDQUFDaUIsUUFBUSxFQUFFO1FBQ2J2RixJQUFJLENBQ0YsSUFBSXZCLGFBQUssQ0FBQ0MsS0FBSyxDQUNiRCxhQUFLLENBQUNDLEtBQUssQ0FBQ3NJLG1CQUFtQixFQUMvQixpREFDRixDQUNGLENBQUM7UUFDRDtNQUNGO01BQ0EsTUFBTUMsY0FBYyxHQUFHNUgsV0FBVyxDQUFDNkIsaUJBQWlCLENBQUNDLFNBQVMsQ0FBQztNQUMvRCxJQUFJOEYsY0FBYyxFQUFFO1FBQ2xCakgsSUFBSSxDQUFDaUgsY0FBYyxDQUFDO1FBQ3BCO01BQ0Y7SUFDRjs7SUFFQTtJQUNBLElBQUlsRCxNQUFNLENBQUNtRCxRQUFRLENBQUNwSCxHQUFHLENBQUNxSCxJQUFJLENBQUMsRUFBRTtNQUM3QixPQUFPLElBQUksQ0FBQ0MscUJBQXFCLENBQUN0SCxHQUFHLEVBQUVDLEdBQUcsRUFBRUMsSUFBSSxDQUFDO0lBQ25EO0lBQ0EsT0FBTyxJQUFJLENBQUNxSCxtQkFBbUIsQ0FBQ3ZILEdBQUcsRUFBRUMsR0FBRyxFQUFFQyxJQUFJLENBQUM7RUFDakQ7RUFFQSxNQUFNb0gscUJBQXFCQSxDQUFDdEgsR0FBRyxFQUFFQyxHQUFHLEVBQUVDLElBQUksRUFBRTtJQUMxQyxNQUFNMkIsTUFBTSxHQUFHN0IsR0FBRyxDQUFDNkIsTUFBTTtJQUN6QixNQUFNUyxlQUFlLEdBQUdULE1BQU0sQ0FBQ1MsZUFBZTtJQUM5QyxNQUFNO01BQUVEO0lBQVMsQ0FBQyxHQUFHckMsR0FBRyxDQUFDZSxNQUFNO0lBQy9CLE1BQU15QixXQUFXLEdBQUd4QyxHQUFHLENBQUM3QyxHQUFHLENBQUMsY0FBYyxDQUFDO0lBRTNDLElBQUksQ0FBQzZDLEdBQUcsQ0FBQ3FILElBQUksSUFBSSxDQUFDckgsR0FBRyxDQUFDcUgsSUFBSSxDQUFDNUksTUFBTSxFQUFFO01BQ2pDeUIsSUFBSSxDQUFDLElBQUl2QixhQUFLLENBQUNDLEtBQUssQ0FBQ0QsYUFBSyxDQUFDQyxLQUFLLENBQUNDLGVBQWUsRUFBRSxzQkFBc0IsQ0FBQyxDQUFDO01BQzFFO0lBQ0Y7SUFFQSxNQUFNK0QsTUFBTSxHQUFHNUMsR0FBRyxDQUFDcUgsSUFBSSxDQUFDeEQsUUFBUSxDQUFDLFFBQVEsQ0FBQztJQUMxQyxNQUFNbkIsSUFBSSxHQUFHLElBQUkvRCxhQUFLLENBQUNnRSxJQUFJLENBQUNOLFFBQVEsRUFBRTtNQUFFTztJQUFPLENBQUMsRUFBRUosV0FBVyxDQUFDO0lBQzlELE1BQU07TUFBRXVFLFFBQVEsR0FBRyxDQUFDLENBQUM7TUFBRUUsSUFBSSxHQUFHLENBQUMsQ0FBQztNQUFFNUY7SUFBVSxDQUFDLEdBQUdyQixHQUFHLENBQUMyRyxRQUFRLElBQUksQ0FBQyxDQUFDO0lBQ2xFLElBQUk7TUFDRjtNQUNBaEosS0FBSyxDQUFDNkosdUJBQXVCLENBQUMzRixNQUFNLEVBQUVrRixRQUFRLENBQUM7TUFDL0NwSixLQUFLLENBQUM2Six1QkFBdUIsQ0FBQzNGLE1BQU0sRUFBRW9GLElBQUksQ0FBQztJQUM3QyxDQUFDLENBQUMsT0FBT2pGLEtBQUssRUFBRTtNQUNkOUIsSUFBSSxDQUFDLElBQUl2QixhQUFLLENBQUNDLEtBQUssQ0FBQ0QsYUFBSyxDQUFDQyxLQUFLLENBQUM2SSxnQkFBZ0IsRUFBRXpGLEtBQUssQ0FBQyxDQUFDO01BQzFEO0lBQ0Y7SUFDQVUsSUFBSSxDQUFDZ0YsT0FBTyxDQUFDVCxJQUFJLENBQUM7SUFDbEJ2RSxJQUFJLENBQUNpRixXQUFXLENBQUNaLFFBQVEsQ0FBQztJQUMxQixJQUFJMUYsU0FBUyxFQUFFO01BQ2JxQixJQUFJLENBQUNrRixZQUFZLENBQUN2RyxTQUFTLENBQUM7SUFDOUI7SUFDQSxNQUFNd0csUUFBUSxHQUFHNUQsTUFBTSxDQUFDNkQsVUFBVSxDQUFDOUgsR0FBRyxDQUFDcUgsSUFBSSxDQUFDO0lBQzVDLE1BQU1VLFVBQVUsR0FBRztNQUFFckYsSUFBSTtNQUFFbUY7SUFBUyxDQUFDO0lBQ3JDLElBQUk7TUFDRjtNQUNBLE1BQU1oRixhQUFhLEdBQUcsTUFBTW5GLFFBQVEsQ0FBQ29GLG1CQUFtQixDQUN0RHBGLFFBQVEsQ0FBQ3FGLEtBQUssQ0FBQ2lGLFVBQVUsRUFDekJELFVBQVUsRUFDVmxHLE1BQU0sRUFDTjdCLEdBQUcsQ0FBQ2lELElBQ04sQ0FBQztNQUNELElBQUlnRixVQUFVO01BQ2Q7TUFDQSxJQUFJcEYsYUFBYSxZQUFZbEUsYUFBSyxDQUFDZ0UsSUFBSSxFQUFFO1FBQ3ZDb0YsVUFBVSxDQUFDckYsSUFBSSxHQUFHRyxhQUFhO1FBQy9CLElBQUlBLGFBQWEsQ0FBQ3FGLEdBQUcsQ0FBQyxDQUFDLEVBQUU7VUFDdkI7VUFDQUgsVUFBVSxDQUFDRixRQUFRLEdBQUcsSUFBSTtVQUMxQkksVUFBVSxHQUFHO1lBQ1hDLEdBQUcsRUFBRXJGLGFBQWEsQ0FBQ3FGLEdBQUcsQ0FBQyxDQUFDO1lBQ3hCQyxJQUFJLEVBQUV0RixhQUFhLENBQUNLO1VBQ3RCLENBQUM7UUFDSDtNQUNGO01BQ0E7TUFDQSxJQUFJLENBQUMrRSxVQUFVLEVBQUU7UUFDZjtRQUNBLElBQUlHLFVBQVU7UUFDZCxJQUFJTCxVQUFVLENBQUNyRixJQUFJLENBQUMyRixPQUFPLEVBQUVDLE1BQU0sS0FBSyxRQUFRLEVBQUU7VUFDaERGLFVBQVUsR0FBR0wsVUFBVSxDQUFDckYsSUFBSSxDQUFDMkYsT0FBTyxDQUFDRSxNQUFNO1FBQzdDLENBQUMsTUFBTTtVQUNMSCxVQUFVLEdBQUduRSxNQUFNLENBQUNDLElBQUksQ0FBQzZELFVBQVUsQ0FBQ3JGLElBQUksQ0FBQ3lCLEtBQUssRUFBRSxRQUFRLENBQUM7UUFDM0Q7UUFDQTRELFVBQVUsQ0FBQ0YsUUFBUSxHQUFHNUQsTUFBTSxDQUFDNkQsVUFBVSxDQUFDTSxVQUFVLENBQUM7UUFDbkQ7UUFDQSxNQUFNSSxXQUFXLEdBQUc7VUFDbEJ6QixRQUFRLEVBQUVnQixVQUFVLENBQUNyRixJQUFJLENBQUMrRjtRQUM1QixDQUFDO1FBQ0Q7UUFDQTtRQUNBLE1BQU1DLFFBQVEsR0FDWm5MLE1BQU0sQ0FBQ29MLElBQUksQ0FBQ1osVUFBVSxDQUFDckYsSUFBSSxDQUFDa0csS0FBSyxDQUFDLENBQUNuSyxNQUFNLEdBQUcsQ0FBQyxHQUFHO1VBQUV3SSxJQUFJLEVBQUVjLFVBQVUsQ0FBQ3JGLElBQUksQ0FBQ2tHO1FBQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN0RnJMLE1BQU0sQ0FBQ3NMLE1BQU0sQ0FBQ0wsV0FBVyxFQUFFRSxRQUFRLENBQUM7UUFDcEM7UUFDQSxJQUFJWCxVQUFVLENBQUNyRixJQUFJLENBQUNvRyxVQUFVLEVBQUU7VUFDOUJOLFdBQVcsQ0FBQ25ILFNBQVMsR0FBRzBHLFVBQVUsQ0FBQ3JGLElBQUksQ0FBQ29HLFVBQVU7UUFDcEQ7UUFDQTtRQUNBLE1BQU1DLGdCQUFnQixHQUFHLE1BQU16RyxlQUFlLENBQUMwRyxVQUFVLENBQ3ZEbkgsTUFBTSxFQUNOa0csVUFBVSxDQUFDckYsSUFBSSxDQUFDUSxLQUFLLEVBQ3JCa0YsVUFBVSxFQUNWTCxVQUFVLENBQUNyRixJQUFJLENBQUMyRixPQUFPLENBQUMvQyxJQUFJLEVBQzVCa0QsV0FDRixDQUFDO1FBQ0Q7UUFDQVQsVUFBVSxDQUFDckYsSUFBSSxDQUFDUSxLQUFLLEdBQUc2RixnQkFBZ0IsQ0FBQ1osSUFBSTtRQUM3Q0osVUFBVSxDQUFDckYsSUFBSSxDQUFDdUcsSUFBSSxHQUFHRixnQkFBZ0IsQ0FBQ2IsR0FBRztRQUMzQ0gsVUFBVSxDQUFDckYsSUFBSSxDQUFDd0csWUFBWSxHQUFHLElBQUk7UUFDbkNuQixVQUFVLENBQUNyRixJQUFJLENBQUN5RyxhQUFhLEdBQUdDLE9BQU8sQ0FBQ0MsT0FBTyxDQUFDdEIsVUFBVSxDQUFDckYsSUFBSSxDQUFDO1FBQ2hFdUYsVUFBVSxHQUFHO1VBQ1hDLEdBQUcsRUFBRWEsZ0JBQWdCLENBQUNiLEdBQUc7VUFDekJDLElBQUksRUFBRVksZ0JBQWdCLENBQUNaO1FBQ3pCLENBQUM7TUFDSDtNQUNBO01BQ0EsTUFBTXpLLFFBQVEsQ0FBQ29GLG1CQUFtQixDQUFDcEYsUUFBUSxDQUFDcUYsS0FBSyxDQUFDdUcsU0FBUyxFQUFFdkIsVUFBVSxFQUFFbEcsTUFBTSxFQUFFN0IsR0FBRyxDQUFDaUQsSUFBSSxDQUFDO01BQzFGaEQsR0FBRyxDQUFDaUMsTUFBTSxDQUFDLEdBQUcsQ0FBQztNQUNmakMsR0FBRyxDQUFDN0MsR0FBRyxDQUFDLFVBQVUsRUFBRTZLLFVBQVUsQ0FBQ0MsR0FBRyxDQUFDO01BQ25DakksR0FBRyxDQUFDa0MsSUFBSSxDQUFDOEYsVUFBVSxDQUFDO0lBQ3RCLENBQUMsQ0FBQyxPQUFPMUwsQ0FBQyxFQUFFO01BQ1ZnTixlQUFNLENBQUN2SCxLQUFLLENBQUMseUJBQXlCLEVBQUV6RixDQUFDLENBQUM7TUFDMUMsTUFBTXlGLEtBQUssR0FBR3RFLFFBQVEsQ0FBQzBHLFlBQVksQ0FBQzdILENBQUMsRUFBRTtRQUNyQzhILElBQUksRUFBRTFGLGFBQUssQ0FBQ0MsS0FBSyxDQUFDQyxlQUFlO1FBQ2pDdUQsT0FBTyxFQUFFLHlCQUF5QjJGLFVBQVUsQ0FBQ3JGLElBQUksQ0FBQ1EsS0FBSztNQUN6RCxDQUFDLENBQUM7TUFDRmhELElBQUksQ0FBQzhCLEtBQUssQ0FBQztJQUNiO0VBQ0Y7RUFFQSxNQUFNdUYsbUJBQW1CQSxDQUFDdkgsR0FBRyxFQUFFQyxHQUFHLEVBQUVDLElBQUksRUFBRTtJQUN4QyxNQUFNMkIsTUFBTSxHQUFHN0IsR0FBRyxDQUFDNkIsTUFBTTtJQUN6QixNQUFNUyxlQUFlLEdBQUdULE1BQU0sQ0FBQ1MsZUFBZTtJQUM5QyxNQUFNO01BQUVEO0lBQVMsQ0FBQyxHQUFHckMsR0FBRyxDQUFDZSxNQUFNO0lBQy9CLElBQUl5QixXQUFXLEdBQUd4QyxHQUFHLENBQUM3QyxHQUFHLENBQUMsY0FBYyxDQUFDO0lBQ3pDLE1BQU1XLFFBQVEsR0FBR2tDLEdBQUcsQ0FBQ21GLG1CQUFtQjtJQUN4QyxJQUFJcUUsTUFBTTtJQUVWLElBQUk7TUFDRjtNQUNBLE1BQU1DLGFBQWEsR0FBR3pKLEdBQUcsQ0FBQzdDLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQztNQUMvQyxJQUFJc00sYUFBYSxJQUFJQyxRQUFRLENBQUNELGFBQWEsRUFBRSxFQUFFLENBQUMsR0FBRzNMLFFBQVEsRUFBRTtRQUMzRGtDLEdBQUcsQ0FBQ2QsTUFBTSxDQUFDLENBQUM7UUFDWmdCLElBQUksQ0FBQyxJQUFJdkIsYUFBSyxDQUFDQyxLQUFLLENBQ2xCRCxhQUFLLENBQUNDLEtBQUssQ0FBQ0MsZUFBZSxFQUMzQixzQ0FBc0NmLFFBQVEsU0FDaEQsQ0FBQyxDQUFDO1FBQ0Y7TUFDRjtNQUVBLE1BQU15RSxJQUFJLEdBQUcsQ0FBQyxNQUFNLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRXRGLE9BQU87O01BRTNDO01BQ0EsTUFBTTBNLFlBQVksR0FBR3RILFFBQVEsSUFBSUEsUUFBUSxDQUFDZixRQUFRLENBQUMsR0FBRyxDQUFDO01BQ3ZELElBQUlxSSxZQUFZLElBQUksQ0FBQ25ILFdBQVcsRUFBRTtRQUNoQ0EsV0FBVyxHQUFHRCxJQUFJLENBQUNFLE9BQU8sQ0FBQ0osUUFBUSxDQUFDO01BQ3RDLENBQUMsTUFBTSxJQUFJLENBQUNzSCxZQUFZLElBQUluSCxXQUFXLEVBQUU7UUFDdkM7TUFBQTs7TUFHRjtNQUNBZ0gsTUFBTSxHQUFHNUwsdUJBQXVCLENBQUNvQyxHQUFHLEVBQUVsQyxRQUFRLENBQUM7O01BRS9DO01BQ0EsTUFBTTRFLElBQUksR0FBRyxJQUFJL0QsYUFBSyxDQUFDZ0UsSUFBSSxDQUFDTixRQUFRLEVBQUU7UUFBRU8sTUFBTSxFQUFFO01BQUcsQ0FBQyxFQUFFSixXQUFXLENBQUM7TUFDbEUsTUFBTTtRQUFFdUUsUUFBUSxHQUFHLENBQUMsQ0FBQztRQUFFRSxJQUFJLEdBQUcsQ0FBQyxDQUFDO1FBQUU1RjtNQUFVLENBQUMsR0FBR3JCLEdBQUcsQ0FBQzJHLFFBQVEsSUFBSSxDQUFDLENBQUM7O01BRWxFO01BQ0EsSUFBSTtRQUNGaEosS0FBSyxDQUFDNkosdUJBQXVCLENBQUMzRixNQUFNLEVBQUVrRixRQUFRLENBQUM7UUFDL0NwSixLQUFLLENBQUM2Six1QkFBdUIsQ0FBQzNGLE1BQU0sRUFBRW9GLElBQUksQ0FBQztNQUM3QyxDQUFDLENBQUMsT0FBT2pGLEtBQUssRUFBRTtRQUNkd0gsTUFBTSxDQUFDOUssT0FBTyxDQUFDLENBQUM7UUFDaEJ3QixJQUFJLENBQUMsSUFBSXZCLGFBQUssQ0FBQ0MsS0FBSyxDQUFDRCxhQUFLLENBQUNDLEtBQUssQ0FBQzZJLGdCQUFnQixFQUFFekYsS0FBSyxDQUFDLENBQUM7UUFDMUQ7TUFDRjtNQUVBVSxJQUFJLENBQUNnRixPQUFPLENBQUNULElBQUksQ0FBQztNQUNsQnZFLElBQUksQ0FBQ2lGLFdBQVcsQ0FBQ1osUUFBUSxDQUFDO01BQzFCLElBQUkxRixTQUFTLEVBQUU7UUFDYnFCLElBQUksQ0FBQ2tGLFlBQVksQ0FBQ3ZHLFNBQVMsQ0FBQztNQUM5QjtNQUVBLE1BQU13RyxRQUFRLEdBQUc3SCxHQUFHLENBQUM3QyxHQUFHLENBQUMsZ0JBQWdCLENBQUMsR0FDdEN1TSxRQUFRLENBQUMxSixHQUFHLENBQUM3QyxHQUFHLENBQUMsZ0JBQWdCLENBQUMsRUFBRSxFQUFFLENBQUMsR0FDdkMsSUFBSTtNQUNSLE1BQU00SyxVQUFVLEdBQUc7UUFBRXJGLElBQUk7UUFBRW1GLFFBQVE7UUFBRTJCLE1BQU0sRUFBRTtNQUFLLENBQUM7O01BRW5EO01BQ0EsTUFBTTNHLGFBQWEsR0FBRyxNQUFNbkYsUUFBUSxDQUFDb0YsbUJBQW1CLENBQ3REcEYsUUFBUSxDQUFDcUYsS0FBSyxDQUFDaUYsVUFBVSxFQUN6QkQsVUFBVSxFQUNWbEcsTUFBTSxFQUNON0IsR0FBRyxDQUFDaUQsSUFDTixDQUFDO01BRUQsSUFBSWdGLFVBQVU7TUFDZDtNQUNBLElBQUlwRixhQUFhLFlBQVlsRSxhQUFLLENBQUNnRSxJQUFJLEVBQUU7UUFDdkNvRixVQUFVLENBQUNyRixJQUFJLEdBQUdHLGFBQWE7UUFDL0IsSUFBSUEsYUFBYSxDQUFDcUYsR0FBRyxDQUFDLENBQUMsRUFBRTtVQUN2QkgsVUFBVSxDQUFDRixRQUFRLEdBQUcsSUFBSTtVQUMxQkksVUFBVSxHQUFHO1lBQ1hDLEdBQUcsRUFBRXJGLGFBQWEsQ0FBQ3FGLEdBQUcsQ0FBQyxDQUFDO1lBQ3hCQyxJQUFJLEVBQUV0RixhQUFhLENBQUNLO1VBQ3RCLENBQUM7VUFDRDtVQUNBc0csTUFBTSxDQUFDOUssT0FBTyxDQUFDLENBQUM7UUFDbEI7TUFDRjs7TUFFQTtNQUNBLElBQUksQ0FBQ3VKLFVBQVUsRUFBRTtRQUNmO1FBQ0EsTUFBTU8sV0FBVyxHQUFHO1VBQ2xCekIsUUFBUSxFQUFFZ0IsVUFBVSxDQUFDckYsSUFBSSxDQUFDK0Y7UUFDNUIsQ0FBQztRQUNELE1BQU1DLFFBQVEsR0FDWm5MLE1BQU0sQ0FBQ29MLElBQUksQ0FBQ1osVUFBVSxDQUFDckYsSUFBSSxDQUFDa0csS0FBSyxDQUFDLENBQUNuSyxNQUFNLEdBQUcsQ0FBQyxHQUFHO1VBQUV3SSxJQUFJLEVBQUVjLFVBQVUsQ0FBQ3JGLElBQUksQ0FBQ2tHO1FBQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN0RnJMLE1BQU0sQ0FBQ3NMLE1BQU0sQ0FBQ0wsV0FBVyxFQUFFRSxRQUFRLENBQUM7UUFDcEM7UUFDQSxJQUFJWCxVQUFVLENBQUNyRixJQUFJLENBQUNvRyxVQUFVLEVBQUU7VUFDOUJOLFdBQVcsQ0FBQ25ILFNBQVMsR0FBRzBHLFVBQVUsQ0FBQ3JGLElBQUksQ0FBQ29HLFVBQVU7UUFDcEQ7O1FBRUE7UUFDQSxNQUFNYyxVQUFVLEdBQUc3QixVQUFVLENBQUNyRixJQUFJLENBQUMyRixPQUFPLEVBQUUvQyxJQUFJLElBQUk5QyxXQUFXO1FBQy9ELE1BQU11RyxnQkFBZ0IsR0FBRyxNQUFNekcsZUFBZSxDQUFDMEcsVUFBVSxDQUN2RG5ILE1BQU0sRUFDTmtHLFVBQVUsQ0FBQ3JGLElBQUksQ0FBQ1EsS0FBSyxFQUNyQnNHLE1BQU0sRUFDTkksVUFBVSxFQUNWcEIsV0FDRixDQUFDOztRQUVEO1FBQ0FULFVBQVUsQ0FBQ3JGLElBQUksQ0FBQ1EsS0FBSyxHQUFHNkYsZ0JBQWdCLENBQUNaLElBQUk7UUFDN0NKLFVBQVUsQ0FBQ3JGLElBQUksQ0FBQ3VHLElBQUksR0FBR0YsZ0JBQWdCLENBQUNiLEdBQUc7UUFDM0NILFVBQVUsQ0FBQ3JGLElBQUksQ0FBQ3dHLFlBQVksR0FBRyxJQUFJO1FBQ25DbkIsVUFBVSxDQUFDckYsSUFBSSxDQUFDeUcsYUFBYSxHQUFHQyxPQUFPLENBQUNDLE9BQU8sQ0FBQ3RCLFVBQVUsQ0FBQ3JGLElBQUksQ0FBQztRQUNoRXVGLFVBQVUsR0FBRztVQUNYQyxHQUFHLEVBQUVhLGdCQUFnQixDQUFDYixHQUFHO1VBQ3pCQyxJQUFJLEVBQUVZLGdCQUFnQixDQUFDWjtRQUN6QixDQUFDO01BQ0g7O01BRUE7TUFDQSxNQUFNekssUUFBUSxDQUFDb0YsbUJBQW1CLENBQUNwRixRQUFRLENBQUNxRixLQUFLLENBQUN1RyxTQUFTLEVBQUV2QixVQUFVLEVBQUVsRyxNQUFNLEVBQUU3QixHQUFHLENBQUNpRCxJQUFJLENBQUM7TUFDMUZoRCxHQUFHLENBQUNpQyxNQUFNLENBQUMsR0FBRyxDQUFDO01BQ2ZqQyxHQUFHLENBQUM3QyxHQUFHLENBQUMsVUFBVSxFQUFFNkssVUFBVSxDQUFDQyxHQUFHLENBQUM7TUFDbkNqSSxHQUFHLENBQUNrQyxJQUFJLENBQUM4RixVQUFVLENBQUM7SUFDdEIsQ0FBQyxDQUFDLE9BQU8xTCxDQUFDLEVBQUU7TUFDVjtNQUNBLElBQUlpTixNQUFNLEVBQUU7UUFDVkEsTUFBTSxDQUFDOUssT0FBTyxDQUFDLENBQUM7TUFDbEIsQ0FBQyxNQUFNO1FBQ0xzQixHQUFHLENBQUNkLE1BQU0sQ0FBQyxDQUFDO01BQ2Q7TUFDQXFLLGVBQU0sQ0FBQ3ZILEtBQUssQ0FBQyx5QkFBeUIsRUFBRXpGLENBQUMsQ0FBQztNQUMxQyxNQUFNeUYsS0FBSyxHQUFHdEUsUUFBUSxDQUFDMEcsWUFBWSxDQUFDN0gsQ0FBQyxFQUFFO1FBQ3JDOEgsSUFBSSxFQUFFMUYsYUFBSyxDQUFDQyxLQUFLLENBQUNDLGVBQWU7UUFDakN1RCxPQUFPLEVBQUUseUJBQXlCQyxRQUFRO01BQzVDLENBQUMsQ0FBQztNQUNGbkMsSUFBSSxDQUFDOEIsS0FBSyxDQUFDO0lBQ2I7RUFDRjtFQUVBLE1BQU1wQixhQUFhQSxDQUFDWixHQUFHLEVBQUVDLEdBQUcsRUFBRUMsSUFBSSxFQUFFO0lBQ2xDLElBQUlGLEdBQUcsQ0FBQ2lELElBQUksQ0FBQ3NDLFVBQVUsRUFBRTtNQUN2QixNQUFNdkQsS0FBSyxHQUFHLElBQUFDLCtCQUF3QixFQUFDLEdBQUcsRUFBRSxxREFBcUQsRUFBRWpDLEdBQUcsQ0FBQzZCLE1BQU0sQ0FBQztNQUM5RzVCLEdBQUcsQ0FBQ2lDLE1BQU0sQ0FBQ0YsS0FBSyxDQUFDRSxNQUFNLENBQUM7TUFDeEJqQyxHQUFHLENBQUN5RCxHQUFHLENBQUMsYUFBYTFCLEtBQUssQ0FBQ0ksT0FBTyxJQUFJLENBQUM7TUFDdkM7SUFDRjtJQUNBLElBQUk7TUFDRixNQUFNO1FBQUVFO01BQWdCLENBQUMsR0FBR3RDLEdBQUcsQ0FBQzZCLE1BQU07TUFDdEMsTUFBTVEsUUFBUSxHQUFHOUMsV0FBVyxDQUFDc0Isc0JBQXNCLENBQUNiLEdBQUcsQ0FBQztNQUN4RDtNQUNBLE1BQU0wQyxJQUFJLEdBQUcsSUFBSS9ELGFBQUssQ0FBQ2dFLElBQUksQ0FBQ04sUUFBUSxDQUFDO01BQ3JDSyxJQUFJLENBQUN1RyxJQUFJLEdBQUcsTUFBTTNHLGVBQWUsQ0FBQ3VILE9BQU8sQ0FBQ0MsZUFBZSxDQUFDOUosR0FBRyxDQUFDNkIsTUFBTSxFQUFFUSxRQUFRLENBQUM7TUFDL0UsTUFBTTBGLFVBQVUsR0FBRztRQUFFckYsSUFBSTtRQUFFbUYsUUFBUSxFQUFFO01BQUssQ0FBQztNQUMzQyxNQUFNbkssUUFBUSxDQUFDb0YsbUJBQW1CLENBQ2hDcEYsUUFBUSxDQUFDcUYsS0FBSyxDQUFDZ0gsWUFBWSxFQUMzQmhDLFVBQVUsRUFDVi9ILEdBQUcsQ0FBQzZCLE1BQU0sRUFDVjdCLEdBQUcsQ0FBQ2lELElBQ04sQ0FBQztNQUNEO01BQ0EsTUFBTVgsZUFBZSxDQUFDMEgsVUFBVSxDQUFDaEssR0FBRyxDQUFDNkIsTUFBTSxFQUFFUSxRQUFRLENBQUM7TUFDdEQ7TUFDQSxNQUFNM0UsUUFBUSxDQUFDb0YsbUJBQW1CLENBQ2hDcEYsUUFBUSxDQUFDcUYsS0FBSyxDQUFDa0gsV0FBVyxFQUMxQmxDLFVBQVUsRUFDVi9ILEdBQUcsQ0FBQzZCLE1BQU0sRUFDVjdCLEdBQUcsQ0FBQ2lELElBQ04sQ0FBQztNQUNEaEQsR0FBRyxDQUFDaUMsTUFBTSxDQUFDLEdBQUcsQ0FBQztNQUNmO01BQ0FqQyxHQUFHLENBQUN5RCxHQUFHLENBQUMsQ0FBQztJQUNYLENBQUMsQ0FBQyxPQUFPbkgsQ0FBQyxFQUFFO01BQ1ZnTixlQUFNLENBQUN2SCxLQUFLLENBQUMseUJBQXlCLEVBQUV6RixDQUFDLENBQUM7TUFDMUMsTUFBTXlGLEtBQUssR0FBR3RFLFFBQVEsQ0FBQzBHLFlBQVksQ0FBQzdILENBQUMsRUFBRTtRQUNyQzhILElBQUksRUFBRTFGLGFBQUssQ0FBQ0MsS0FBSyxDQUFDc0wsaUJBQWlCO1FBQ25DOUgsT0FBTyxFQUFFO01BQ1gsQ0FBQyxDQUFDO01BQ0ZsQyxJQUFJLENBQUM4QixLQUFLLENBQUM7SUFDYjtFQUNGO0VBRUEsTUFBTW5DLGVBQWVBLENBQUNHLEdBQUcsRUFBRUMsR0FBRyxFQUFFO0lBQzlCLElBQUk7TUFDRixNQUFNNEIsTUFBTSxHQUFHQyxlQUFNLENBQUMzRSxHQUFHLENBQUM2QyxHQUFHLENBQUNlLE1BQU0sQ0FBQ2dCLEtBQUssQ0FBQztNQUMzQyxJQUFJLENBQUNGLE1BQU0sRUFBRTtRQUNYNUIsR0FBRyxDQUFDaUMsTUFBTSxDQUFDLEdBQUcsQ0FBQztRQUNmakMsR0FBRyxDQUFDa0MsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ1o7TUFDRjtNQUNBLE1BQU07UUFBRUc7TUFBZ0IsQ0FBQyxHQUFHVCxNQUFNO01BQ2xDLElBQUlRLFFBQVEsR0FBRzlDLFdBQVcsQ0FBQ3NCLHNCQUFzQixDQUFDYixHQUFHLENBQUM7TUFDdEQsTUFBTTBDLElBQUksR0FBRyxJQUFJL0QsYUFBSyxDQUFDZ0UsSUFBSSxDQUFDTixRQUFRLEVBQUU7UUFBRU8sTUFBTSxFQUFFO01BQUcsQ0FBQyxDQUFDO01BQ3JELE1BQU1DLGFBQWEsR0FBRyxNQUFNbkYsUUFBUSxDQUFDb0YsbUJBQW1CLENBQ3REcEYsUUFBUSxDQUFDcUYsS0FBSyxDQUFDQyxVQUFVLEVBQ3pCO1FBQUVOO01BQUssQ0FBQyxFQUNSYixNQUFNLEVBQ043QixHQUFHLENBQUNpRCxJQUNOLENBQUM7TUFDRCxJQUFJSixhQUFhLEVBQUVILElBQUksRUFBRVEsS0FBSyxFQUFFO1FBQzlCYixRQUFRLEdBQUdRLGFBQWEsQ0FBQ0gsSUFBSSxDQUFDUSxLQUFLO01BQ3JDO01BQ0EsTUFBTVMsSUFBSSxHQUFHLE1BQU1yQixlQUFlLENBQUM2SCxXQUFXLENBQUM5SCxRQUFRLENBQUMsQ0FBQ29CLEtBQUssQ0FBQyxNQUFNO1FBQ25FeEQsR0FBRyxDQUFDaUMsTUFBTSxDQUFDLEdBQUcsQ0FBQztRQUNmakMsR0FBRyxDQUFDa0MsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ2QsQ0FBQyxDQUFDO01BQ0YsSUFBSSxDQUFDd0IsSUFBSSxFQUFFO1FBQ1Q7TUFDRjtNQUNBLE1BQU1qRyxRQUFRLENBQUNvRixtQkFBbUIsQ0FDaENwRixRQUFRLENBQUNxRixLQUFLLENBQUNlLFNBQVMsRUFDeEI7UUFBRXBCO01BQUssQ0FBQyxFQUNSYixNQUFNLEVBQ043QixHQUFHLENBQUNpRCxJQUNOLENBQUM7TUFDRGhELEdBQUcsQ0FBQ2lDLE1BQU0sQ0FBQyxHQUFHLENBQUM7TUFDZmpDLEdBQUcsQ0FBQ2tDLElBQUksQ0FBQ3dCLElBQUksQ0FBQztJQUNoQixDQUFDLENBQUMsT0FBT3BILENBQUMsRUFBRTtNQUNWLE1BQU15QyxHQUFHLEdBQUd0QixRQUFRLENBQUMwRyxZQUFZLENBQUM3SCxDQUFDLEVBQUU7UUFDbkM4SCxJQUFJLEVBQUUxRixhQUFLLENBQUNDLEtBQUssQ0FBQzBGLGFBQWE7UUFDL0JsQyxPQUFPLEVBQUU7TUFDWCxDQUFDLENBQUM7TUFDRm5DLEdBQUcsQ0FBQ2lDLE1BQU0sQ0FBQyxHQUFHLENBQUM7TUFDZmpDLEdBQUcsQ0FBQ2tDLElBQUksQ0FBQztRQUFFa0MsSUFBSSxFQUFFckYsR0FBRyxDQUFDcUYsSUFBSTtRQUFFckMsS0FBSyxFQUFFaEQsR0FBRyxDQUFDb0Q7TUFBUSxDQUFDLENBQUM7SUFDbEQ7RUFDRjtBQUNGO0FBQUM5QyxPQUFBLENBQUFDLFdBQUEsR0FBQUEsV0FBQTtBQUVELFNBQVM2RCxnQkFBZ0JBLENBQUNwRCxHQUFHLEVBQUVzQyxlQUFlLEVBQUU7RUFDOUMsTUFBTThILEtBQUssR0FBRyxDQUFDcEssR0FBRyxDQUFDN0MsR0FBRyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEtBQUssRUFBRXVFLEtBQUssQ0FBQyxHQUFHLENBQUM7RUFDcEQsTUFBTTJJLEtBQUssR0FBR0MsTUFBTSxDQUFDRixLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDOUIsTUFBTTFHLEdBQUcsR0FBRzRHLE1BQU0sQ0FBQ0YsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBQzVCLE9BQ0UsQ0FBQyxDQUFDRyxLQUFLLENBQUNGLEtBQUssQ0FBQyxJQUFJLENBQUNFLEtBQUssQ0FBQzdHLEdBQUcsQ0FBQyxLQUFLLE9BQU9wQixlQUFlLENBQUN1SCxPQUFPLENBQUNyRyxnQkFBZ0IsS0FBSyxVQUFVO0FBRXBHIiwiaWdub3JlTGlzdCI6W119
|
|
745
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfZXhwcmVzcyIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJyZXF1aXJlIiwiTWlkZGxld2FyZXMiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsIl9ub2RlIiwiX0NvbmZpZyIsIl9sb2dnZXIiLCJfc3RyZWFtIiwiX0Vycm9yIiwiZSIsInQiLCJXZWFrTWFwIiwiciIsIm4iLCJfX2VzTW9kdWxlIiwibyIsImkiLCJmIiwiX19wcm90b19fIiwiZGVmYXVsdCIsImhhcyIsImdldCIsInNldCIsImhhc093blByb3BlcnR5IiwiY2FsbCIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwidHJpZ2dlcnMiLCJVdGlscyIsImF1dGgiLCJjcmVhdGVTaXplTGltaXRlZFN0cmVhbSIsInNvdXJjZSIsIm1heEJ5dGVzIiwidG90YWxCeXRlcyIsInN0YXJ0ZWQiLCJzb3VyY2VFbmRlZCIsIm9uRGF0YSIsIm9uRW5kIiwib25FcnJvciIsIm91dHB1dCIsIlJlYWRhYmxlIiwicmVhZCIsImNodW5rIiwibGVuZ3RoIiwiZGVzdHJveSIsIlBhcnNlIiwiRXJyb3IiLCJGSUxFX1NBVkVfRVJST1IiLCJwdXNoIiwicGF1c2UiLCJlcnIiLCJvbiIsInJlc3VtZSIsImNhbGxiYWNrIiwicmVtb3ZlTGlzdGVuZXIiLCJSRVNFUlZFRF9ESVJFQ1RPUllfU0VHTUVOVFMiLCJleHBvcnRzIiwiRmlsZXNSb3V0ZXIiLCJleHByZXNzUm91dGVyIiwibWF4VXBsb2FkU2l6ZSIsInJvdXRlciIsImV4cHJlc3MiLCJSb3V0ZXIiLCJtZXRhZGF0YUhhbmRsZXIiLCJnZXRIYW5kbGVyIiwicG9zdCIsInJlcSIsInJlcyIsIm5leHQiLCJJTlZBTElEX0ZJTEVfTkFNRSIsIl9lYXJseUhlYWRlcnNNaWRkbGV3YXJlIiwiX2JvZHlQYXJzaW5nTWlkZGxld2FyZSIsImhhbmRsZVBhcnNlSGVhZGVycyIsImhhbmRsZVBhcnNlU2Vzc2lvbiIsImNyZWF0ZUhhbmRsZXIiLCJiaW5kIiwiZGVsZXRlIiwiZW5mb3JjZU1hc3RlcktleUFjY2VzcyIsImRlbGV0ZUhhbmRsZXIiLCJfZ2V0RmlsZW5hbWVGcm9tUGFyYW1zIiwicGFydHMiLCJwYXJhbXMiLCJmaWxlcGF0aCIsIkFycmF5IiwiaXNBcnJheSIsImpvaW4iLCJfcmVzb2x2ZUF1dGgiLCJjb25maWciLCJzZXNzaW9uVG9rZW4iLCJnZXRBdXRoRm9yU2Vzc2lvblRva2VuIiwiaW5zdGFsbGF0aW9uSWQiLCJ2YWxpZGF0ZURpcmVjdG9yeSIsImRpcmVjdG9yeSIsImluY2x1ZGVzIiwic3RhcnRzV2l0aCIsImVuZHNXaXRoIiwiZmlyc3RTZWdtZW50Iiwic3BsaXQiLCJkaXJSZWdleCIsInRlc3QiLCJDb25maWciLCJhcHBJZCIsImVycm9yIiwiY3JlYXRlU2FuaXRpemVkSHR0cEVycm9yIiwic3RhdHVzIiwianNvbiIsIm1lc3NhZ2UiLCJmaWxlbmFtZSIsImZpbGVzQ29udHJvbGxlciIsIm1pbWUiLCJjb250ZW50VHlwZSIsImdldFR5cGUiLCJmaWxlIiwiRmlsZSIsImJhc2U2NCIsImZpbGVBdXRoIiwidHJpZ2dlclJlc3VsdCIsIm1heWJlUnVuRmlsZVRyaWdnZXIiLCJUeXBlcyIsImJlZm9yZUZpbmQiLCJfbmFtZSIsImRlZmF1bHRSZXNwb25zZUhlYWRlcnMiLCJpc0ZpbGVTdHJlYW1hYmxlIiwiYWZ0ZXJGaW5kIiwiZm9yY2VEb3dubG9hZCIsInJlc3BvbnNlSGVhZGVycyIsImtleSIsInZhbHVlIiwiZW50cmllcyIsImhhbmRsZUZpbGVTdHJlYW0iLCJjYXRjaCIsImVuZCIsImRhdGEiLCJnZXRGaWxlRGF0YSIsInRvU3RyaW5nIiwiQnVmZmVyIiwiZnJvbSIsIl9kYXRhIiwicmVzb2x2ZUVycm9yIiwiY29kZSIsIlNDUklQVF9GQUlMRUQiLCJtYXhVcGxvYWRTaXplT3ZlcnJpZGUiLCJ1bmRlZmluZWQiLCJtYXN0ZXJLZXkiLCJsb2FkTWFzdGVyS2V5IiwibWFzdGVyS2V5SXBzIiwiY2hlY2tJcCIsImlwIiwibWFzdGVyS2V5SXBzU3RvcmUiLCJwYXJzZWRCeXRlcyIsInBhcnNlU2l6ZVRvQnl0ZXMiLCJfbWF4VXBsb2FkU2l6ZU92ZXJyaWRlIiwiZGVmYXVsdE1heEJ5dGVzIiwiX21heFVwbG9hZFNpemVCeXRlcyIsImxpbWl0IiwicmF3IiwidHlwZSIsImlzUmVhZE9ubHkiLCJ1c2VyIiwiaXNNYXN0ZXIiLCJpc0xpbmtlZCIsIkFub255bW91c1V0aWxzIiwiZmlsZVVwbG9hZCIsImVuYWJsZUZvckFub255bW91c1VzZXIiLCJlbmFibGVGb3JBdXRoZW50aWNhdGVkVXNlciIsImVuYWJsZUZvclB1YmxpYyIsInZhbGlkYXRlRmlsZW5hbWUiLCJmaWxlRXh0ZW5zaW9ucyIsImlzVmFsaWRFeHRlbnNpb24iLCJleHRlbnNpb24iLCJzb21lIiwiZXh0IiwicmVnZXgiLCJSZWdFeHAiLCJzdWJzdHJpbmciLCJsYXN0SW5kZXhPZiIsInJlcGxhY2UiLCJmaWxlRGF0YSIsInBhcnNlZCIsIkpTT04iLCJwYXJzZSIsIm1ldGFkYXRhIiwiSU5WQUxJRF9KU09OIiwidGFncyIsIk9QRVJBVElPTl9GT1JCSURERU4iLCJkaXJlY3RvcnlFcnJvciIsImlzQnVmZmVyIiwiYm9keSIsIl9oYW5kbGVCdWZmZXJlZFVwbG9hZCIsIl9oYW5kbGVTdHJlYW1VcGxvYWQiLCJjaGVja1Byb2hpYml0ZWRLZXl3b3JkcyIsIklOVkFMSURfS0VZX05BTUUiLCJzZXRUYWdzIiwic2V0TWV0YWRhdGEiLCJzZXREaXJlY3RvcnkiLCJmaWxlU2l6ZSIsImJ5dGVMZW5ndGgiLCJmaWxlT2JqZWN0IiwiYmVmb3JlU2F2ZSIsInNhdmVSZXN1bHQiLCJ1cmwiLCJuYW1lIiwiYnVmZmVyRGF0YSIsIl9zb3VyY2UiLCJmb3JtYXQiLCJidWZmZXIiLCJmaWxlT3B0aW9ucyIsIl9tZXRhZGF0YSIsImZpbGVUYWdzIiwia2V5cyIsIl90YWdzIiwiYXNzaWduIiwiX2RpcmVjdG9yeSIsImNyZWF0ZUZpbGVSZXN1bHQiLCJjcmVhdGVGaWxlIiwiX3VybCIsIl9yZXF1ZXN0VGFzayIsIl9wcmV2aW91c1NhdmUiLCJQcm9taXNlIiwicmVzb2x2ZSIsImFmdGVyU2F2ZSIsImxvZ2dlciIsInN0cmVhbSIsImNvbnRlbnRMZW5ndGgiLCJwYXJzZUludCIsImhhc0V4dGVuc2lvbiIsInNvdXJjZVR5cGUiLCJhZGFwdGVyIiwiZ2V0RmlsZUxvY2F0aW9uIiwiYmVmb3JlRGVsZXRlIiwiZGVsZXRlRmlsZSIsImFmdGVyRGVsZXRlIiwiRklMRV9ERUxFVEVfRVJST1IiLCJnZXRNZXRhZGF0YSIsInJhbmdlIiwic3RhcnQiLCJOdW1iZXIiLCJpc05hTiJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9Sb3V0ZXJzL0ZpbGVzUm91dGVyLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBleHByZXNzIGZyb20gJ2V4cHJlc3MnO1xuaW1wb3J0ICogYXMgTWlkZGxld2FyZXMgZnJvbSAnLi4vbWlkZGxld2FyZXMnO1xuaW1wb3J0IFBhcnNlIGZyb20gJ3BhcnNlL25vZGUnO1xuaW1wb3J0IENvbmZpZyBmcm9tICcuLi9Db25maWcnO1xuaW1wb3J0IGxvZ2dlciBmcm9tICcuLi9sb2dnZXInO1xuY29uc3QgdHJpZ2dlcnMgPSByZXF1aXJlKCcuLi90cmlnZ2VycycpO1xuY29uc3QgVXRpbHMgPSByZXF1aXJlKCcuLi9VdGlscycpO1xuY29uc3QgYXV0aCA9IHJlcXVpcmUoJy4uL0F1dGgnKTtcbmltcG9ydCB7IFJlYWRhYmxlIH0gZnJvbSAnc3RyZWFtJztcbmltcG9ydCB7IGNyZWF0ZVNhbml0aXplZEh0dHBFcnJvciB9IGZyb20gJy4uL0Vycm9yJztcblxuLyoqXG4gKiBXcmFwcyBhIHJlYWRhYmxlIHN0cmVhbSBpbiBhIFJlYWRhYmxlIHRoYXQgZW5mb3JjZXMgYSBieXRlIHNpemUgbGltaXQuXG4gKiBEYXRhIGZsb3cgaXMgbGF6eTogdGhlIHNvdXJjZSBpcyBub3QgcmVhZCB1bnRpbCBhIGNvbnN1bWVyIHN0YXJ0cyByZWFkaW5nXG4gKiBmcm9tIHRoZSByZXR1cm5lZCBzdHJlYW0gKHZpYSBwaXBlIG9yICdkYXRhJyBsaXN0ZW5lcikuIFRoaXMgZW5zdXJlcyB0aGVcbiAqIGNvbnN1bWVyJ3MgZXJyb3IgbGlzdGVuZXIgaXMgYXR0YWNoZWQgYmVmb3JlIGFueSBkYXRhIChvciBlcnJvcikgaXMgZW1pdHRlZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVNpemVMaW1pdGVkU3RyZWFtKHNvdXJjZSwgbWF4Qnl0ZXMpIHtcbiAgbGV0IHRvdGFsQnl0ZXMgPSAwO1xuICBsZXQgc3RhcnRlZCA9IGZhbHNlO1xuICBsZXQgc291cmNlRW5kZWQgPSBmYWxzZTtcbiAgbGV0IG9uRGF0YSwgb25FbmQsIG9uRXJyb3I7XG5cbiAgY29uc3Qgb3V0cHV0ID0gbmV3IFJlYWRhYmxlKHtcbiAgICByZWFkKCkge1xuICAgICAgaWYgKCFzdGFydGVkKSB7XG4gICAgICAgIHN0YXJ0ZWQgPSB0cnVlO1xuXG4gICAgICAgIG9uRGF0YSA9IChjaHVuaykgPT4ge1xuICAgICAgICAgIHRvdGFsQnl0ZXMgKz0gY2h1bmsubGVuZ3RoO1xuICAgICAgICAgIGlmICh0b3RhbEJ5dGVzID4gbWF4Qnl0ZXMpIHtcbiAgICAgICAgICAgIG91dHB1dC5kZXN0cm95KFxuICAgICAgICAgICAgICBuZXcgUGFyc2UuRXJyb3IoXG4gICAgICAgICAgICAgICAgUGFyc2UuRXJyb3IuRklMRV9TQVZFX0VSUk9SLFxuICAgICAgICAgICAgICAgIGBGaWxlIHNpemUgZXhjZWVkcyBtYXhpbXVtIGFsbG93ZWQ6ICR7bWF4Qnl0ZXN9IGJ5dGVzLmBcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKCFvdXRwdXQucHVzaChjaHVuaykpIHtcbiAgICAgICAgICAgIHNvdXJjZS5wYXVzZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICBvbkVuZCA9ICgpID0+IHtcbiAgICAgICAgICBzb3VyY2VFbmRlZCA9IHRydWU7XG4gICAgICAgICAgb3V0cHV0LnB1c2gobnVsbCk7XG4gICAgICAgIH07XG5cbiAgICAgICAgb25FcnJvciA9IChlcnIpID0+IG91dHB1dC5kZXN0cm95KGVycik7XG5cbiAgICAgICAgc291cmNlLm9uKCdkYXRhJywgb25EYXRhKTtcbiAgICAgICAgc291cmNlLm9uKCdlbmQnLCBvbkVuZCk7XG4gICAgICAgIHNvdXJjZS5vbignZXJyb3InLCBvbkVycm9yKTtcbiAgICAgIH1cblxuICAgICAgLy8gUmVzdW1lIHNvdXJjZSBpbiBjYXNlIGl0IHdhcyBwYXVzZWQgZHVlIHRvIGJhY2twcmVzc3VyZVxuICAgICAgaWYgKCFzb3VyY2VFbmRlZCkge1xuICAgICAgICBzb3VyY2UucmVzdW1lKCk7XG4gICAgICB9XG4gICAgfSxcbiAgICBkZXN0cm95KGVyciwgY2FsbGJhY2spIHtcbiAgICAgIGlmIChvbkRhdGEpIHtcbiAgICAgICAgc291cmNlLnJlbW92ZUxpc3RlbmVyKCdkYXRhJywgb25EYXRhKTtcbiAgICAgIH1cbiAgICAgIGlmIChvbkVuZCkge1xuICAgICAgICBzb3VyY2UucmVtb3ZlTGlzdGVuZXIoJ2VuZCcsIG9uRW5kKTtcbiAgICAgIH1cbiAgICAgIGlmIChvbkVycm9yKSB7XG4gICAgICAgIHNvdXJjZS5yZW1vdmVMaXN0ZW5lcignZXJyb3InLCBvbkVycm9yKTtcbiAgICAgIH1cbiAgICAgIC8vIFN1cHByZXNzIGVycm9ycyBlbWl0dGVkIGR1cmluZyBkcmFpbiAoZS5nLiBjbGllbnQgZGlzY29ubmVjdClcbiAgICAgIHNvdXJjZS5vbignZXJyb3InLCAoKSA9PiB7fSk7XG4gICAgICBpZiAoIXNvdXJjZUVuZGVkKSB7XG4gICAgICAgIHNvdXJjZS5yZXN1bWUoKTtcbiAgICAgIH1cbiAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gb3V0cHV0O1xufVxuXG4vLyBTZWdtZW50cyB0aGF0IGNvbmZsaWN0IHdpdGggc3ViLXJvdXRlcyB1bmRlciBHRVQgL2ZpbGVzLzphcHBJZC8qLiBJZiBhIGZpbGVcbi8vIGRpcmVjdG9yeSBzdGFydHMgd2l0aCBvbmUgb2YgdGhlc2UsIGl0cyBVUkwgd291bGQgbWF0Y2ggdGhlIHdyb25nIHJvdXRlXG4vLyBoYW5kbGVyLiBVcGRhdGUgdGhpcyBsaXN0IHdoZW4gYWRkaW5nIG5ldyBzdWItcm91dGVzIHRvIGV4cHJlc3NSb3V0ZXIoKS5cbmV4cG9ydCBjb25zdCBSRVNFUlZFRF9ESVJFQ1RPUllfU0VHTUVOVFMgPSBbJ21ldGFkYXRhJ107XG5cbmV4cG9ydCBjbGFzcyBGaWxlc1JvdXRlciB7XG4gIGV4cHJlc3NSb3V0ZXIoeyBtYXhVcGxvYWRTaXplID0gJzIwTWInIH0gPSB7fSkge1xuICAgIHZhciByb3V0ZXIgPSBleHByZXNzLlJvdXRlcigpO1xuICAgIC8vIE1ldGFkYXRhIHJvdXRlIG11c3QgY29tZSBiZWZvcmUgdGhlIGNhdGNoLWFsbCBHRVQgcm91dGVcbiAgICByb3V0ZXIuZ2V0KCcvZmlsZXMvOmFwcElkL21ldGFkYXRhLypmaWxlcGF0aCcsIHRoaXMubWV0YWRhdGFIYW5kbGVyKTtcbiAgICByb3V0ZXIuZ2V0KCcvZmlsZXMvOmFwcElkLypmaWxlcGF0aCcsIHRoaXMuZ2V0SGFuZGxlcik7XG5cbiAgICByb3V0ZXIucG9zdCgnL2ZpbGVzJywgZnVuY3Rpb24gKHJlcSwgcmVzLCBuZXh0KSB7XG4gICAgICBuZXh0KG5ldyBQYXJzZS5FcnJvcihQYXJzZS5FcnJvci5JTlZBTElEX0ZJTEVfTkFNRSwgJ0ZpbGVuYW1lIG5vdCBwcm92aWRlZC4nKSk7XG4gICAgfSk7XG5cbiAgICByb3V0ZXIucG9zdChcbiAgICAgICcvZmlsZXMvOmZpbGVuYW1lJyxcbiAgICAgIHRoaXMuX2Vhcmx5SGVhZGVyc01pZGRsZXdhcmUoKSxcbiAgICAgIHRoaXMuX2JvZHlQYXJzaW5nTWlkZGxld2FyZShtYXhVcGxvYWRTaXplKSxcbiAgICAgIE1pZGRsZXdhcmVzLmhhbmRsZVBhcnNlSGVhZGVycyxcbiAgICAgIE1pZGRsZXdhcmVzLmhhbmRsZVBhcnNlU2Vzc2lvbixcbiAgICAgIHRoaXMuY3JlYXRlSGFuZGxlci5iaW5kKHRoaXMpXG4gICAgKTtcblxuICAgIHJvdXRlci5kZWxldGUoXG4gICAgICAnL2ZpbGVzLypmaWxlcGF0aCcsXG4gICAgICBNaWRkbGV3YXJlcy5oYW5kbGVQYXJzZUhlYWRlcnMsXG4gICAgICBNaWRkbGV3YXJlcy5oYW5kbGVQYXJzZVNlc3Npb24sXG4gICAgICBNaWRkbGV3YXJlcy5lbmZvcmNlTWFzdGVyS2V5QWNjZXNzLFxuICAgICAgdGhpcy5kZWxldGVIYW5kbGVyXG4gICAgKTtcbiAgICByZXR1cm4gcm91dGVyO1xuICB9XG5cbiAgc3RhdGljIF9nZXRGaWxlbmFtZUZyb21QYXJhbXMocmVxKSB7XG4gICAgY29uc3QgcGFydHMgPSByZXEucGFyYW1zLmZpbGVwYXRoO1xuICAgIHJldHVybiBBcnJheS5pc0FycmF5KHBhcnRzKSA/IHBhcnRzLmpvaW4oJy8nKSA6IHBhcnRzO1xuICB9XG5cbiAgc3RhdGljIGFzeW5jIF9yZXNvbHZlQXV0aChyZXEsIGNvbmZpZykge1xuICAgIGNvbnN0IHNlc3Npb25Ub2tlbiA9IHJlcS5nZXQoJ1gtUGFyc2UtU2Vzc2lvbi1Ub2tlbicpO1xuICAgIGlmICghc2Vzc2lvblRva2VuKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBhd2FpdCBhdXRoLmdldEF1dGhGb3JTZXNzaW9uVG9rZW4oe1xuICAgICAgICBjb25maWcsXG4gICAgICAgIHNlc3Npb25Ub2tlbixcbiAgICAgICAgaW5zdGFsbGF0aW9uSWQ6IHJlcS5nZXQoJ1gtUGFyc2UtSW5zdGFsbGF0aW9uLUlkJyksXG4gICAgICB9KTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxuXG4gIHN0YXRpYyB2YWxpZGF0ZURpcmVjdG9yeShkaXJlY3RvcnkpIHtcbiAgICBpZiAodHlwZW9mIGRpcmVjdG9yeSAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHJldHVybiBuZXcgUGFyc2UuRXJyb3IoUGFyc2UuRXJyb3IuSU5WQUxJRF9GSUxFX05BTUUsICdEaXJlY3RvcnkgbXVzdCBiZSBhIHN0cmluZy4nKTtcbiAgICB9XG4gICAgaWYgKGRpcmVjdG9yeS5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiBuZXcgUGFyc2UuRXJyb3IoUGFyc2UuRXJyb3IuSU5WQUxJRF9GSUxFX05BTUUsICdEaXJlY3RvcnkgbXVzdCBub3QgYmUgZW1wdHkuJyk7XG4gICAgfVxuICAgIGlmIChkaXJlY3RvcnkubGVuZ3RoID4gMjU2KSB7XG4gICAgICByZXR1cm4gbmV3IFBhcnNlLkVycm9yKFBhcnNlLkVycm9yLklOVkFMSURfRklMRV9OQU1FLCAnRGlyZWN0b3J5IHBhdGggaXMgdG9vIGxvbmcuJyk7XG4gICAgfVxuICAgIGlmIChkaXJlY3RvcnkuaW5jbHVkZXMoJy4uJykpIHtcbiAgICAgIHJldHVybiBuZXcgUGFyc2UuRXJyb3IoUGFyc2UuRXJyb3IuSU5WQUxJRF9GSUxFX05BTUUsICdEaXJlY3RvcnkgbXVzdCBub3QgY29udGFpbiBcIi4uXCIuJyk7XG4gICAgfVxuICAgIGlmIChkaXJlY3Rvcnkuc3RhcnRzV2l0aCgnLycpIHx8IGRpcmVjdG9yeS5lbmRzV2l0aCgnLycpKSB7XG4gICAgICByZXR1cm4gbmV3IFBhcnNlLkVycm9yKFxuICAgICAgICBQYXJzZS5FcnJvci5JTlZBTElEX0ZJTEVfTkFNRSxcbiAgICAgICAgJ0RpcmVjdG9yeSBtdXN0IG5vdCBzdGFydCBvciBlbmQgd2l0aCBcIi9cIi4nXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoZGlyZWN0b3J5LmluY2x1ZGVzKCcvLycpKSB7XG4gICAgICByZXR1cm4gbmV3IFBhcnNlLkVycm9yKFxuICAgICAgICBQYXJzZS5FcnJvci5JTlZBTElEX0ZJTEVfTkFNRSxcbiAgICAgICAgJ0RpcmVjdG9yeSBtdXN0IG5vdCBjb250YWluIGNvbnNlY3V0aXZlIHNsYXNoZXMuJ1xuICAgICAgKTtcbiAgICB9XG4gICAgY29uc3QgZmlyc3RTZWdtZW50ID0gZGlyZWN0b3J5LnNwbGl0KCcvJylbMF07XG4gICAgaWYgKFJFU0VSVkVEX0RJUkVDVE9SWV9TRUdNRU5UUy5pbmNsdWRlcyhmaXJzdFNlZ21lbnQpKSB7XG4gICAgICByZXR1cm4gbmV3IFBhcnNlLkVycm9yKFxuICAgICAgICBQYXJzZS5FcnJvci5JTlZBTElEX0ZJTEVfTkFNRSxcbiAgICAgICAgYERpcmVjdG9yeSBtdXN0IG5vdCBzdGFydCB3aXRoIHJlc2VydmVkIHNlZ21lbnQgXCIke2ZpcnN0U2VnbWVudH1cIi5gXG4gICAgICApO1xuICAgIH1cbiAgICBjb25zdCBkaXJSZWdleCA9IC9eW2EtekEtWjAtOV1bYS16QS1aMC05X1xcLS9dKiQvO1xuICAgIGlmICghZGlyUmVnZXgudGVzdChkaXJlY3RvcnkpKSB7XG4gICAgICByZXR1cm4gbmV3IFBhcnNlLkVycm9yKFxuICAgICAgICBQYXJzZS5FcnJvci5JTlZBTElEX0ZJTEVfTkFNRSxcbiAgICAgICAgJ0RpcmVjdG9yeSBjb250YWlucyBpbnZhbGlkIGNoYXJhY3RlcnMuJ1xuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBhc3luYyBnZXRIYW5kbGVyKHJlcSwgcmVzKSB7XG4gICAgY29uc3QgY29uZmlnID0gQ29uZmlnLmdldChyZXEucGFyYW1zLmFwcElkKTtcbiAgICBpZiAoIWNvbmZpZykge1xuICAgICAgY29uc3QgZXJyb3IgPSBjcmVhdGVTYW5pdGl6ZWRIdHRwRXJyb3IoNDAzLCAnSW52YWxpZCBhcHBsaWNhdGlvbiBJRC4nLCBjb25maWcpO1xuICAgICAgcmVzLnN0YXR1cyhlcnJvci5zdGF0dXMpO1xuICAgICAgcmVzLmpzb24oeyBlcnJvcjogZXJyb3IubWVzc2FnZSB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBsZXQgZmlsZW5hbWUgPSBGaWxlc1JvdXRlci5fZ2V0RmlsZW5hbWVGcm9tUGFyYW1zKHJlcSk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGZpbGVzQ29udHJvbGxlciA9IGNvbmZpZy5maWxlc0NvbnRyb2xsZXI7XG4gICAgICBjb25zdCBtaW1lID0gKGF3YWl0IGltcG9ydCgnbWltZScpKS5kZWZhdWx0O1xuICAgICAgbGV0IGNvbnRlbnRUeXBlID0gbWltZS5nZXRUeXBlKGZpbGVuYW1lKTtcbiAgICAgIGxldCBmaWxlID0gbmV3IFBhcnNlLkZpbGUoZmlsZW5hbWUsIHsgYmFzZTY0OiAnJyB9LCBjb250ZW50VHlwZSk7XG4gICAgICBjb25zdCBmaWxlQXV0aCA9IGF3YWl0IEZpbGVzUm91dGVyLl9yZXNvbHZlQXV0aChyZXEsIGNvbmZpZyk7XG4gICAgICBjb25zdCB0cmlnZ2VyUmVzdWx0ID0gYXdhaXQgdHJpZ2dlcnMubWF5YmVSdW5GaWxlVHJpZ2dlcihcbiAgICAgICAgdHJpZ2dlcnMuVHlwZXMuYmVmb3JlRmluZCxcbiAgICAgICAgeyBmaWxlIH0sXG4gICAgICAgIGNvbmZpZyxcbiAgICAgICAgZmlsZUF1dGhcbiAgICAgICk7XG4gICAgICBpZiAodHJpZ2dlclJlc3VsdD8uZmlsZT8uX25hbWUpIHtcbiAgICAgICAgZmlsZW5hbWUgPSB0cmlnZ2VyUmVzdWx0Py5maWxlPy5fbmFtZTtcbiAgICAgICAgY29udGVudFR5cGUgPSBtaW1lLmdldFR5cGUoZmlsZW5hbWUpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBkZWZhdWx0UmVzcG9uc2VIZWFkZXJzID0geyAnWC1Db250ZW50LVR5cGUtT3B0aW9ucyc6ICdub3NuaWZmJyB9O1xuXG4gICAgICBpZiAoaXNGaWxlU3RyZWFtYWJsZShyZXEsIGZpbGVzQ29udHJvbGxlcikpIHtcbiAgICAgICAgY29uc3QgYWZ0ZXJGaW5kID0gYXdhaXQgdHJpZ2dlcnMubWF5YmVSdW5GaWxlVHJpZ2dlcihcbiAgICAgICAgICB0cmlnZ2Vycy5UeXBlcy5hZnRlckZpbmQsXG4gICAgICAgICAgeyBmaWxlLCBmb3JjZURvd25sb2FkOiBmYWxzZSwgcmVzcG9uc2VIZWFkZXJzOiB7IC4uLmRlZmF1bHRSZXNwb25zZUhlYWRlcnMgfSB9LFxuICAgICAgICAgIGNvbmZpZyxcbiAgICAgICAgICBmaWxlQXV0aFxuICAgICAgICApO1xuICAgICAgICBpZiAoYWZ0ZXJGaW5kPy5mb3JjZURvd25sb2FkKSB7XG4gICAgICAgICAgcmVzLnNldCgnQ29udGVudC1EaXNwb3NpdGlvbicsIGBhdHRhY2htZW50O2ZpbGVuYW1lPSR7YWZ0ZXJGaW5kLmZpbGU/Ll9uYW1lIHx8IGZpbGVuYW1lfWApO1xuICAgICAgICB9XG4gICAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGFmdGVyRmluZD8ucmVzcG9uc2VIZWFkZXJzID8/IGRlZmF1bHRSZXNwb25zZUhlYWRlcnMpKSB7XG4gICAgICAgICAgcmVzLnNldChrZXksIHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICBmaWxlc0NvbnRyb2xsZXIuaGFuZGxlRmlsZVN0cmVhbShjb25maWcsIGZpbGVuYW1lLCByZXEsIHJlcywgY29udGVudFR5cGUpLmNhdGNoKCgpID0+IHtcbiAgICAgICAgICByZXMuc3RhdHVzKDQwNCk7XG4gICAgICAgICAgcmVzLnNldCgnQ29udGVudC1UeXBlJywgJ3RleHQvcGxhaW4nKTtcbiAgICAgICAgICByZXMuZW5kKCdGaWxlIG5vdCBmb3VuZC4nKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgbGV0IGRhdGEgPSBhd2FpdCBmaWxlc0NvbnRyb2xsZXIuZ2V0RmlsZURhdGEoY29uZmlnLCBmaWxlbmFtZSkuY2F0Y2goKCkgPT4ge1xuICAgICAgICByZXMuc3RhdHVzKDQwNCk7XG4gICAgICAgIHJlcy5zZXQoJ0NvbnRlbnQtVHlwZScsICd0ZXh0L3BsYWluJyk7XG4gICAgICAgIHJlcy5lbmQoJ0ZpbGUgbm90IGZvdW5kLicpO1xuICAgICAgfSk7XG4gICAgICBpZiAoIWRhdGEpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgZmlsZSA9IG5ldyBQYXJzZS5GaWxlKGZpbGVuYW1lLCB7IGJhc2U2NDogZGF0YS50b1N0cmluZygnYmFzZTY0JykgfSwgY29udGVudFR5cGUpO1xuICAgICAgY29uc3QgYWZ0ZXJGaW5kID0gYXdhaXQgdHJpZ2dlcnMubWF5YmVSdW5GaWxlVHJpZ2dlcihcbiAgICAgICAgdHJpZ2dlcnMuVHlwZXMuYWZ0ZXJGaW5kLFxuICAgICAgICB7IGZpbGUsIGZvcmNlRG93bmxvYWQ6IGZhbHNlLCByZXNwb25zZUhlYWRlcnM6IHsgLi4uZGVmYXVsdFJlc3BvbnNlSGVhZGVycyB9IH0sXG4gICAgICAgIGNvbmZpZyxcbiAgICAgICAgZmlsZUF1dGhcbiAgICAgICk7XG5cbiAgICAgIGlmIChhZnRlckZpbmQ/LmZpbGUpIHtcbiAgICAgICAgY29udGVudFR5cGUgPSBtaW1lLmdldFR5cGUoYWZ0ZXJGaW5kLmZpbGUuX25hbWUpO1xuICAgICAgICBkYXRhID0gQnVmZmVyLmZyb20oYWZ0ZXJGaW5kLmZpbGUuX2RhdGEsICdiYXNlNjQnKTtcbiAgICAgIH1cblxuICAgICAgcmVzLnN0YXR1cygyMDApO1xuICAgICAgcmVzLnNldCgnQ29udGVudC1UeXBlJywgY29udGVudFR5cGUpO1xuICAgICAgcmVzLnNldCgnQ29udGVudC1MZW5ndGgnLCBkYXRhLmxlbmd0aCk7XG4gICAgICBpZiAoYWZ0ZXJGaW5kLmZvcmNlRG93bmxvYWQpIHtcbiAgICAgICAgcmVzLnNldCgnQ29udGVudC1EaXNwb3NpdGlvbicsIGBhdHRhY2htZW50O2ZpbGVuYW1lPSR7YWZ0ZXJGaW5kLmZpbGUuX25hbWV9YCk7XG4gICAgICB9XG4gICAgICBpZiAoYWZ0ZXJGaW5kLnJlc3BvbnNlSGVhZGVycykge1xuICAgICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhhZnRlckZpbmQucmVzcG9uc2VIZWFkZXJzKSkge1xuICAgICAgICAgIHJlcy5zZXQoa2V5LCB2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJlcy5lbmQoZGF0YSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgY29uc3QgZXJyID0gdHJpZ2dlcnMucmVzb2x2ZUVycm9yKGUsIHtcbiAgICAgICAgY29kZTogUGFyc2UuRXJyb3IuU0NSSVBUX0ZBSUxFRCxcbiAgICAgICAgbWVzc2FnZTogYENvdWxkIG5vdCBmaW5kIGZpbGU6ICR7ZmlsZW5hbWV9LmAsXG4gICAgICB9KTtcbiAgICAgIHJlcy5zdGF0dXMoNDAzKTtcbiAgICAgIHJlcy5qc29uKHsgY29kZTogZXJyLmNvZGUsIGVycm9yOiBlcnIubWVzc2FnZSB9KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogTWlkZGxld2FyZSB0aGF0IHJ1bnMgYmVmb3JlIGJvZHkgcGFyc2luZyB0byBoYW5kbGUgaGVhZGVycyB0aGF0IG11c3QgYmVcbiAgICogcmVzb2x2ZWQgYmVmb3JlIHRoZSByZXF1ZXN0IGJvZHkgaXMgY29uc3VtZWQuIEN1cnJlbnRseSBzdXBwb3J0czpcbiAgICpcbiAgICogLSBgWC1QYXJzZS1GaWxlLU1heC1VcGxvYWQtU2l6ZWA6IE92ZXJyaWRlcyB0aGUgc2VydmVyLXdpZGUgYG1heFVwbG9hZFNpemVgXG4gICAqICAgZm9yIHRoaXMgcmVxdWVzdC4gUmVxdWlyZXMgdGhlIG1hc3RlciBrZXkuIFRoZSB2YWx1ZSB1c2VzIHRoZSBzYW1lIGZvcm1hdFxuICAgKiAgIGFzIHRoZSBzZXJ2ZXIgb3B0aW9uIChlLmcuIGAnNTBtYidgLCBgJzFnYidgKS4gU2V0cyBgcmVxLl9tYXhVcGxvYWRTaXplT3ZlcnJpZGVgXG4gICAqICAgKGluIGJ5dGVzKSBmb3IgYF9ib2R5UGFyc2luZ01pZGRsZXdhcmVgIHRvIHVzZS5cbiAgICovXG4gIF9lYXJseUhlYWRlcnNNaWRkbGV3YXJlKCkge1xuICAgIHJldHVybiBhc3luYyAocmVxLCByZXMsIG5leHQpID0+IHtcbiAgICAgIGNvbnN0IG1heFVwbG9hZFNpemVPdmVycmlkZSA9IHJlcS5nZXQoJ1gtUGFyc2UtRmlsZS1NYXgtVXBsb2FkLVNpemUnKTtcbiAgICAgIGlmICghbWF4VXBsb2FkU2l6ZU92ZXJyaWRlKSB7XG4gICAgICAgIHJldHVybiBuZXh0KCk7XG4gICAgICB9XG4gICAgICBjb25zdCBhcHBJZCA9IHJlcS5nZXQoJ1gtUGFyc2UtQXBwbGljYXRpb24tSWQnKTtcbiAgICAgIGNvbnN0IGNvbmZpZyA9IENvbmZpZy5nZXQoYXBwSWQpO1xuICAgICAgaWYgKCFjb25maWcpIHtcbiAgICAgICAgY29uc3QgZXJyb3IgPSBjcmVhdGVTYW5pdGl6ZWRIdHRwRXJyb3IoNDAzLCAnSW52YWxpZCBhcHBsaWNhdGlvbiBJRC4nLCB1bmRlZmluZWQpO1xuICAgICAgICByZXMuc3RhdHVzKGVycm9yLnN0YXR1cyk7XG4gICAgICAgIHJlcy5qc29uKHsgZXJyb3I6IGVycm9yLm1lc3NhZ2UgfSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IG1hc3RlcktleSA9IGF3YWl0IGNvbmZpZy5sb2FkTWFzdGVyS2V5KCk7XG4gICAgICBpZiAocmVxLmdldCgnWC1QYXJzZS1NYXN0ZXItS2V5JykgIT09IG1hc3RlcktleSkge1xuICAgICAgICBjb25zdCBlcnJvciA9IGNyZWF0ZVNhbml0aXplZEh0dHBFcnJvcig0MDMsICd1bmF1dGhvcml6ZWQ6IG1hc3RlciBrZXkgaXMgcmVxdWlyZWQnLCBjb25maWcpO1xuICAgICAgICByZXMuc3RhdHVzKGVycm9yLnN0YXR1cyk7XG4gICAgICAgIHJlcy5qc29uKHsgZXJyb3I6IGVycm9yLm1lc3NhZ2UgfSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmIChjb25maWcubWFzdGVyS2V5SXBzPy5sZW5ndGggJiYgIU1pZGRsZXdhcmVzLmNoZWNrSXAocmVxLmlwLCBjb25maWcubWFzdGVyS2V5SXBzLCBjb25maWcubWFzdGVyS2V5SXBzU3RvcmUpKSB7XG4gICAgICAgIGNvbnN0IGVycm9yID0gY3JlYXRlU2FuaXRpemVkSHR0cEVycm9yKDQwMywgJ3VuYXV0aG9yaXplZDogbWFzdGVyIGtleSBpcyByZXF1aXJlZCcsIGNvbmZpZyk7XG4gICAgICAgIHJlcy5zdGF0dXMoZXJyb3Iuc3RhdHVzKTtcbiAgICAgICAgcmVzLmpzb24oeyBlcnJvcjogZXJyb3IubWVzc2FnZSB9KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgbGV0IHBhcnNlZEJ5dGVzO1xuICAgICAgdHJ5IHtcbiAgICAgICAgcGFyc2VkQnl0ZXMgPSBVdGlscy5wYXJzZVNpemVUb0J5dGVzKG1heFVwbG9hZFNpemVPdmVycmlkZSk7XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgcmV0dXJuIG5leHQoXG4gICAgICAgICAgbmV3IFBhcnNlLkVycm9yKFxuICAgICAgICAgICAgUGFyc2UuRXJyb3IuRklMRV9TQVZFX0VSUk9SLFxuICAgICAgICAgICAgYEludmFsaWQgbWF4VXBsb2FkU2l6ZSBvdmVycmlkZSB2YWx1ZTogJHttYXhVcGxvYWRTaXplT3ZlcnJpZGV9YFxuICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHJlcS5fbWF4VXBsb2FkU2l6ZU92ZXJyaWRlID0gcGFyc2VkQnl0ZXM7XG4gICAgICBuZXh0KCk7XG4gICAgfTtcbiAgfVxuXG4gIF9ib2R5UGFyc2luZ01pZGRsZXdhcmUobWF4VXBsb2FkU2l6ZSkge1xuICAgIGNvbnN0IGRlZmF1bHRNYXhCeXRlcyA9IFV0aWxzLnBhcnNlU2l6ZVRvQnl0ZXMobWF4VXBsb2FkU2l6ZSk7XG4gICAgcmV0dXJuIChyZXEsIHJlcywgbmV4dCkgPT4ge1xuICAgICAgaWYgKHJlcS5nZXQoJ1gtUGFyc2UtVXBsb2FkLU1vZGUnKSA9PT0gJ3N0cmVhbScpIHtcbiAgICAgICAgcmVxLl9tYXhVcGxvYWRTaXplQnl0ZXMgPSByZXEuX21heFVwbG9hZFNpemVPdmVycmlkZSA/PyBkZWZhdWx0TWF4Qnl0ZXM7XG4gICAgICAgIHJldHVybiBuZXh0KCk7XG4gICAgICB9XG4gICAgICBjb25zdCBsaW1pdCA9IHJlcS5fbWF4VXBsb2FkU2l6ZU92ZXJyaWRlID8/IG1heFVwbG9hZFNpemU7XG4gICAgICByZXR1cm4gZXhwcmVzcy5yYXcoeyB0eXBlOiAoKSA9PiB0cnVlLCBsaW1pdCB9KShyZXEsIHJlcywgbmV4dCk7XG4gICAgfTtcbiAgfVxuXG4gIGFzeW5jIGNyZWF0ZUhhbmRsZXIocmVxLCByZXMsIG5leHQpIHtcbiAgICBpZiAocmVxLmF1dGguaXNSZWFkT25seSkge1xuICAgICAgY29uc3QgZXJyb3IgPSBjcmVhdGVTYW5pdGl6ZWRIdHRwRXJyb3IoNDAzLCBcInJlYWQtb25seSBtYXN0ZXJLZXkgaXNuJ3QgYWxsb3dlZCB0byBjcmVhdGUgYSBmaWxlLlwiLCByZXEuY29uZmlnKTtcbiAgICAgIHJlcy5zdGF0dXMoZXJyb3Iuc3RhdHVzKTtcbiAgICAgIHJlcy5lbmQoYHtcImVycm9yXCI6XCIke2Vycm9yLm1lc3NhZ2V9XCJ9YCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGNvbmZpZyA9IHJlcS5jb25maWc7XG4gICAgY29uc3QgdXNlciA9IHJlcS5hdXRoLnVzZXI7XG4gICAgY29uc3QgaXNNYXN0ZXIgPSByZXEuYXV0aC5pc01hc3RlcjtcbiAgICBjb25zdCBpc0xpbmtlZCA9IHVzZXIgJiYgUGFyc2UuQW5vbnltb3VzVXRpbHMuaXNMaW5rZWQodXNlcik7XG4gICAgaWYgKCFpc01hc3RlciAmJiAhY29uZmlnLmZpbGVVcGxvYWQuZW5hYmxlRm9yQW5vbnltb3VzVXNlciAmJiBpc0xpbmtlZCkge1xuICAgICAgbmV4dChcbiAgICAgICAgbmV3IFBhcnNlLkVycm9yKFBhcnNlLkVycm9yLkZJTEVfU0FWRV9FUlJPUiwgJ0ZpbGUgdXBsb2FkIGJ5IGFub255bW91cyB1c2VyIGlzIGRpc2FibGVkLicpXG4gICAgICApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoIWlzTWFzdGVyICYmICFjb25maWcuZmlsZVVwbG9hZC5lbmFibGVGb3JBdXRoZW50aWNhdGVkVXNlciAmJiAhaXNMaW5rZWQgJiYgdXNlcikge1xuICAgICAgbmV4dChcbiAgICAgICAgbmV3IFBhcnNlLkVycm9yKFxuICAgICAgICAgIFBhcnNlLkVycm9yLkZJTEVfU0FWRV9FUlJPUixcbiAgICAgICAgICAnRmlsZSB1cGxvYWQgYnkgYXV0aGVudGljYXRlZCB1c2VyIGlzIGRpc2FibGVkLidcbiAgICAgICAgKVxuICAgICAgKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKCFpc01hc3RlciAmJiAhY29uZmlnLmZpbGVVcGxvYWQuZW5hYmxlRm9yUHVibGljICYmICF1c2VyKSB7XG4gICAgICBuZXh0KG5ldyBQYXJzZS5FcnJvcihQYXJzZS5FcnJvci5GSUxFX1NBVkVfRVJST1IsICdGaWxlIHVwbG9hZCBieSBwdWJsaWMgaXMgZGlzYWJsZWQuJykpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBmaWxlc0NvbnRyb2xsZXIgPSBjb25maWcuZmlsZXNDb250cm9sbGVyO1xuICAgIGNvbnN0IHsgZmlsZW5hbWUgfSA9IHJlcS5wYXJhbXM7XG4gICAgY29uc3QgY29udGVudFR5cGUgPSByZXEuZ2V0KCdDb250ZW50LXR5cGUnKTtcblxuICAgIGNvbnN0IGVycm9yID0gZmlsZXNDb250cm9sbGVyLnZhbGlkYXRlRmlsZW5hbWUoZmlsZW5hbWUpO1xuICAgIGlmIChlcnJvcikge1xuICAgICAgbmV4dChlcnJvcik7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgZmlsZUV4dGVuc2lvbnMgPSBjb25maWcuZmlsZVVwbG9hZD8uZmlsZUV4dGVuc2lvbnM7XG4gICAgaWYgKCFpc01hc3RlciAmJiBmaWxlRXh0ZW5zaW9ucykge1xuICAgICAgY29uc3QgaXNWYWxpZEV4dGVuc2lvbiA9IGV4dGVuc2lvbiA9PiB7XG4gICAgICAgIHJldHVybiBmaWxlRXh0ZW5zaW9ucy5zb21lKGV4dCA9PiB7XG4gICAgICAgICAgaWYgKGV4dCA9PT0gJyonKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3QgcmVnZXggPSBuZXcgUmVnRXhwKGV4dCk7XG4gICAgICAgICAgaWYgKHJlZ2V4LnRlc3QoZXh0ZW5zaW9uKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH07XG4gICAgICBsZXQgZXh0ZW5zaW9uID0gY29udGVudFR5cGU7XG4gICAgICBpZiAoZmlsZW5hbWUgJiYgZmlsZW5hbWUuaW5jbHVkZXMoJy4nKSkge1xuICAgICAgICBleHRlbnNpb24gPSBmaWxlbmFtZS5zdWJzdHJpbmcoZmlsZW5hbWUubGFzdEluZGV4T2YoJy4nKSArIDEpO1xuICAgICAgfSBlbHNlIGlmIChjb250ZW50VHlwZSAmJiBjb250ZW50VHlwZS5pbmNsdWRlcygnLycpKSB7XG4gICAgICAgIGV4dGVuc2lvbiA9IGNvbnRlbnRUeXBlLnNwbGl0KCcvJylbMV07XG4gICAgICB9XG4gICAgICAvLyBTdHJpcCBNSU1FIHBhcmFtZXRlcnMgKGUuZy4gXCI7Y2hhcnNldD11dGYtOFwiKSBhbmQgd2hpdGVzcGFjZVxuICAgICAgZXh0ZW5zaW9uID0gZXh0ZW5zaW9uPy5zcGxpdCgnOycpWzBdPy5yZXBsYWNlKC9cXHMrL2csICcnKTtcblxuICAgICAgaWYgKGV4dGVuc2lvbiAmJiAhaXNWYWxpZEV4dGVuc2lvbihleHRlbnNpb24pKSB7XG4gICAgICAgIG5leHQoXG4gICAgICAgICAgbmV3IFBhcnNlLkVycm9yKFxuICAgICAgICAgICAgUGFyc2UuRXJyb3IuRklMRV9TQVZFX0VSUk9SLFxuICAgICAgICAgICAgYEZpbGUgdXBsb2FkIG9mIGV4dGVuc2lvbiAke2V4dGVuc2lvbn0gaXMgZGlzYWJsZWQuYFxuICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEZvciBzdHJlYW1pbmcgdXBsb2FkcywgcmVhZCBmaWxlIGRhdGEgZnJvbSBoZWFkZXJzIHNpbmNlIHRoZSBib2R5IGlzIHRoZSByYXcgc3RyZWFtXG4gICAgaWYgKHJlcS5nZXQoJ1gtUGFyc2UtVXBsb2FkLU1vZGUnKSA9PT0gJ3N0cmVhbScpIHtcbiAgICAgIHJlcS5maWxlRGF0YSA9IHt9O1xuICAgICAgaWYgKHJlcS5nZXQoJ1gtUGFyc2UtRmlsZS1EaXJlY3RvcnknKSkge1xuICAgICAgICByZXEuZmlsZURhdGEuZGlyZWN0b3J5ID0gcmVxLmdldCgnWC1QYXJzZS1GaWxlLURpcmVjdG9yeScpO1xuICAgICAgfVxuICAgICAgaWYgKHJlcS5nZXQoJ1gtUGFyc2UtRmlsZS1NZXRhZGF0YScpKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgcGFyc2VkID0gSlNPTi5wYXJzZShyZXEuZ2V0KCdYLVBhcnNlLUZpbGUtTWV0YWRhdGEnKSk7XG4gICAgICAgICAgaWYgKCFwYXJzZWQgfHwgdHlwZW9mIHBhcnNlZCAhPT0gJ29iamVjdCcgfHwgQXJyYXkuaXNBcnJheShwYXJzZWQpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmVxLmZpbGVEYXRhLm1ldGFkYXRhID0gcGFyc2VkO1xuICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICBuZXh0KG5ldyBQYXJzZS5FcnJvcihQYXJzZS5FcnJvci5JTlZBTElEX0pTT04sICdJbnZhbGlkIEpTT04gaW4gWC1QYXJzZS1GaWxlLU1ldGFkYXRhIGhlYWRlci4nKSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAocmVxLmdldCgnWC1QYXJzZS1GaWxlLVRhZ3MnKSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IHBhcnNlZCA9IEpTT04ucGFyc2UocmVxLmdldCgnWC1QYXJzZS1GaWxlLVRhZ3MnKSk7XG4gICAgICAgICAgaWYgKCFwYXJzZWQgfHwgdHlwZW9mIHBhcnNlZCAhPT0gJ29iamVjdCcgfHwgQXJyYXkuaXNBcnJheShwYXJzZWQpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmVxLmZpbGVEYXRhLnRhZ3MgPSBwYXJzZWQ7XG4gICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgIG5leHQobmV3IFBhcnNlLkVycm9yKFBhcnNlLkVycm9yLklOVkFMSURfSlNPTiwgJ0ludmFsaWQgSlNPTiBpbiBYLVBhcnNlLUZpbGUtVGFncyBoZWFkZXIuJykpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFZhbGlkYXRlIGRpcmVjdG9yeSBvcHRpb24gKHJlcXVpcmVzIG1hc3RlciBrZXkpXG4gICAgY29uc3QgZGlyZWN0b3J5ID0gcmVxLmZpbGVEYXRhPy5kaXJlY3Rvcnk7XG4gICAgaWYgKGRpcmVjdG9yeSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAoIWlzTWFzdGVyKSB7XG4gICAgICAgIG5leHQoXG4gICAgICAgICAgbmV3IFBhcnNlLkVycm9yKFxuICAgICAgICAgICAgUGFyc2UuRXJyb3IuT1BFUkFUSU9OX0ZPUkJJRERFTixcbiAgICAgICAgICAgICdEaXJlY3RvcnkgY2FuIG9ubHkgYmUgc2V0IHVzaW5nIHRoZSBNYXN0ZXIgS2V5LidcbiAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGRpcmVjdG9yeUVycm9yID0gRmlsZXNSb3V0ZXIudmFsaWRhdGVEaXJlY3RvcnkoZGlyZWN0b3J5KTtcbiAgICAgIGlmIChkaXJlY3RvcnlFcnJvcikge1xuICAgICAgICBuZXh0KGRpcmVjdG9yeUVycm9yKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIERpc3BhdGNoIHRvIHRoZSBhcHByb3ByaWF0ZSBoYW5kbGVyIGJhc2VkIG9uIHdoZXRoZXIgdGhlIGJvZHkgd2FzIGJ1ZmZlcmVkXG4gICAgaWYgKEJ1ZmZlci5pc0J1ZmZlcihyZXEuYm9keSkpIHtcbiAgICAgIHJldHVybiB0aGlzLl9oYW5kbGVCdWZmZXJlZFVwbG9hZChyZXEsIHJlcywgbmV4dCk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl9oYW5kbGVTdHJlYW1VcGxvYWQocmVxLCByZXMsIG5leHQpO1xuICB9XG5cbiAgYXN5bmMgX2hhbmRsZUJ1ZmZlcmVkVXBsb2FkKHJlcSwgcmVzLCBuZXh0KSB7XG4gICAgY29uc3QgY29uZmlnID0gcmVxLmNvbmZpZztcbiAgICBjb25zdCBmaWxlc0NvbnRyb2xsZXIgPSBjb25maWcuZmlsZXNDb250cm9sbGVyO1xuICAgIGNvbnN0IHsgZmlsZW5hbWUgfSA9IHJlcS5wYXJhbXM7XG4gICAgY29uc3QgY29udGVudFR5cGUgPSByZXEuZ2V0KCdDb250ZW50LXR5cGUnKTtcblxuICAgIGlmICghcmVxLmJvZHkgfHwgIXJlcS5ib2R5Lmxlbmd0aCkge1xuICAgICAgbmV4dChuZXcgUGFyc2UuRXJyb3IoUGFyc2UuRXJyb3IuRklMRV9TQVZFX0VSUk9SLCAnSW52YWxpZCBmaWxlIHVwbG9hZC4nKSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgYmFzZTY0ID0gcmVxLmJvZHkudG9TdHJpbmcoJ2Jhc2U2NCcpO1xuICAgIGNvbnN0IGZpbGUgPSBuZXcgUGFyc2UuRmlsZShmaWxlbmFtZSwgeyBiYXNlNjQgfSwgY29udGVudFR5cGUpO1xuICAgIGNvbnN0IHsgbWV0YWRhdGEgPSB7fSwgdGFncyA9IHt9LCBkaXJlY3RvcnkgfSA9IHJlcS5maWxlRGF0YSB8fCB7fTtcbiAgICB0cnkge1xuICAgICAgLy8gU2NhbiByZXF1ZXN0IGRhdGEgZm9yIGRlbmllZCBrZXl3b3Jkc1xuICAgICAgVXRpbHMuY2hlY2tQcm9oaWJpdGVkS2V5d29yZHMoY29uZmlnLCBtZXRhZGF0YSk7XG4gICAgICBVdGlscy5jaGVja1Byb2hpYml0ZWRLZXl3b3Jkcyhjb25maWcsIHRhZ3MpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBuZXh0KG5ldyBQYXJzZS5FcnJvcihQYXJzZS5FcnJvci5JTlZBTElEX0tFWV9OQU1FLCBlcnJvcikpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBmaWxlLnNldFRhZ3ModGFncyk7XG4gICAgZmlsZS5zZXRNZXRhZGF0YShtZXRhZGF0YSk7XG4gICAgaWYgKGRpcmVjdG9yeSkge1xuICAgICAgZmlsZS5zZXREaXJlY3RvcnkoZGlyZWN0b3J5KTtcbiAgICB9XG4gICAgY29uc3QgZmlsZVNpemUgPSBCdWZmZXIuYnl0ZUxlbmd0aChyZXEuYm9keSk7XG4gICAgY29uc3QgZmlsZU9iamVjdCA9IHsgZmlsZSwgZmlsZVNpemUgfTtcbiAgICB0cnkge1xuICAgICAgLy8gcnVuIGJlZm9yZVNhdmVGaWxlIHRyaWdnZXJcbiAgICAgIGNvbnN0IHRyaWdnZXJSZXN1bHQgPSBhd2FpdCB0cmlnZ2Vycy5tYXliZVJ1bkZpbGVUcmlnZ2VyKFxuICAgICAgICB0cmlnZ2Vycy5UeXBlcy5iZWZvcmVTYXZlLFxuICAgICAgICBmaWxlT2JqZWN0LFxuICAgICAgICBjb25maWcsXG4gICAgICAgIHJlcS5hdXRoXG4gICAgICApO1xuICAgICAgbGV0IHNhdmVSZXN1bHQ7XG4gICAgICAvLyBpZiBhIG5ldyBQYXJzZUZpbGUgaXMgcmV0dXJuZWQgY2hlY2sgaWYgaXQncyBhbiBhbHJlYWR5IHNhdmVkIGZpbGVcbiAgICAgIGlmICh0cmlnZ2VyUmVzdWx0IGluc3RhbmNlb2YgUGFyc2UuRmlsZSkge1xuICAgICAgICBmaWxlT2JqZWN0LmZpbGUgPSB0cmlnZ2VyUmVzdWx0O1xuICAgICAgICBpZiAodHJpZ2dlclJlc3VsdC51cmwoKSkge1xuICAgICAgICAgIC8vIHNldCBmaWxlU2l6ZSB0byBudWxsIGJlY2F1c2Ugd2Ugd29udCBrbm93IGhvdyBiaWcgaXQgaXMgaGVyZVxuICAgICAgICAgIGZpbGVPYmplY3QuZmlsZVNpemUgPSBudWxsO1xuICAgICAgICAgIHNhdmVSZXN1bHQgPSB7XG4gICAgICAgICAgICB1cmw6IHRyaWdnZXJSZXN1bHQudXJsKCksXG4gICAgICAgICAgICBuYW1lOiB0cmlnZ2VyUmVzdWx0Ll9uYW1lLFxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIC8vIGlmIHRoZSBmaWxlIHJldHVybmVkIGJ5IHRoZSB0cmlnZ2VyIGhhcyBhbHJlYWR5IGJlZW4gc2F2ZWQgc2tpcCBzYXZpbmcgYW55dGhpbmdcbiAgICAgIGlmICghc2F2ZVJlc3VsdCkge1xuICAgICAgICAvLyB1cGRhdGUgZmlsZVNpemVcbiAgICAgICAgbGV0IGJ1ZmZlckRhdGE7XG4gICAgICAgIGlmIChmaWxlT2JqZWN0LmZpbGUuX3NvdXJjZT8uZm9ybWF0ID09PSAnYnVmZmVyJykge1xuICAgICAgICAgIGJ1ZmZlckRhdGEgPSBmaWxlT2JqZWN0LmZpbGUuX3NvdXJjZS5idWZmZXI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYnVmZmVyRGF0YSA9IEJ1ZmZlci5mcm9tKGZpbGVPYmplY3QuZmlsZS5fZGF0YSwgJ2Jhc2U2NCcpO1xuICAgICAgICB9XG4gICAgICAgIGZpbGVPYmplY3QuZmlsZVNpemUgPSBCdWZmZXIuYnl0ZUxlbmd0aChidWZmZXJEYXRhKTtcbiAgICAgICAgLy8gcHJlcGFyZSBmaWxlIG9wdGlvbnNcbiAgICAgICAgY29uc3QgZmlsZU9wdGlvbnMgPSB7XG4gICAgICAgICAgbWV0YWRhdGE6IGZpbGVPYmplY3QuZmlsZS5fbWV0YWRhdGEsXG4gICAgICAgIH07XG4gICAgICAgIC8vIHNvbWUgczMtY29tcGF0aWJsZSBwcm92aWRlcnMgKERpZ2l0YWxPY2VhbiwgTGlub2RlKSBkbyBub3QgYWNjZXB0IHRhZ3NcbiAgICAgICAgLy8gc28gd2UgZG8gbm90IGluY2x1ZGUgdGhlIHRhZ3Mgb3B0aW9uIGlmIGl0IGlzIGVtcHR5LlxuICAgICAgICBjb25zdCBmaWxlVGFncyA9XG4gICAgICAgICAgT2JqZWN0LmtleXMoZmlsZU9iamVjdC5maWxlLl90YWdzKS5sZW5ndGggPiAwID8geyB0YWdzOiBmaWxlT2JqZWN0LmZpbGUuX3RhZ3MgfSA6IHt9O1xuICAgICAgICBPYmplY3QuYXNzaWduKGZpbGVPcHRpb25zLCBmaWxlVGFncyk7XG4gICAgICAgIC8vIGluY2x1ZGUgZGlyZWN0b3J5IGlmIHNldCAoZnJvbSBjbGllbnQgcmVxdWVzdCBvciBiZWZvcmVTYXZlRmlsZSB0cmlnZ2VyKVxuICAgICAgICBpZiAoZmlsZU9iamVjdC5maWxlLl9kaXJlY3RvcnkpIHtcbiAgICAgICAgICBmaWxlT3B0aW9ucy5kaXJlY3RvcnkgPSBmaWxlT2JqZWN0LmZpbGUuX2RpcmVjdG9yeTtcbiAgICAgICAgfVxuICAgICAgICAvLyBzYXZlIGZpbGVcbiAgICAgICAgY29uc3QgY3JlYXRlRmlsZVJlc3VsdCA9IGF3YWl0IGZpbGVzQ29udHJvbGxlci5jcmVhdGVGaWxlKFxuICAgICAgICAgIGNvbmZpZyxcbiAgICAgICAgICBmaWxlT2JqZWN0LmZpbGUuX25hbWUsXG4gICAgICAgICAgYnVmZmVyRGF0YSxcbiAgICAgICAgICBmaWxlT2JqZWN0LmZpbGUuX3NvdXJjZS50eXBlLFxuICAgICAgICAgIGZpbGVPcHRpb25zXG4gICAgICAgICk7XG4gICAgICAgIC8vIHVwZGF0ZSBmaWxlIHdpdGggbmV3IGRhdGFcbiAgICAgICAgZmlsZU9iamVjdC5maWxlLl9uYW1lID0gY3JlYXRlRmlsZVJlc3VsdC5uYW1lO1xuICAgICAgICBmaWxlT2JqZWN0LmZpbGUuX3VybCA9IGNyZWF0ZUZpbGVSZXN1bHQudXJsO1xuICAgICAgICBmaWxlT2JqZWN0LmZpbGUuX3JlcXVlc3RUYXNrID0gbnVsbDtcbiAgICAgICAgZmlsZU9iamVjdC5maWxlLl9wcmV2aW91c1NhdmUgPSBQcm9taXNlLnJlc29sdmUoZmlsZU9iamVjdC5maWxlKTtcbiAgICAgICAgc2F2ZVJlc3VsdCA9IHtcbiAgICAgICAgICB1cmw6IGNyZWF0ZUZpbGVSZXN1bHQudXJsLFxuICAgICAgICAgIG5hbWU6IGNyZWF0ZUZpbGVSZXN1bHQubmFtZSxcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIC8vIHJ1biBhZnRlclNhdmVGaWxlIHRyaWdnZXJcbiAgICAgIGF3YWl0IHRyaWdnZXJzLm1heWJlUnVuRmlsZVRyaWdnZXIodHJpZ2dlcnMuVHlwZXMuYWZ0ZXJTYXZlLCBmaWxlT2JqZWN0LCBjb25maWcsIHJlcS5hdXRoKTtcbiAgICAgIHJlcy5zdGF0dXMoMjAxKTtcbiAgICAgIHJlcy5zZXQoJ0xvY2F0aW9uJywgc2F2ZVJlc3VsdC51cmwpO1xuICAgICAgcmVzLmpzb24oc2F2ZVJlc3VsdCk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgbG9nZ2VyLmVycm9yKCdFcnJvciBjcmVhdGluZyBhIGZpbGU6ICcsIGUpO1xuICAgICAgY29uc3QgZXJyb3IgPSB0cmlnZ2Vycy5yZXNvbHZlRXJyb3IoZSwge1xuICAgICAgICBjb2RlOiBQYXJzZS5FcnJvci5GSUxFX1NBVkVfRVJST1IsXG4gICAgICAgIG1lc3NhZ2U6IGBDb3VsZCBub3Qgc3RvcmUgZmlsZTogJHtmaWxlT2JqZWN0LmZpbGUuX25hbWV9LmAsXG4gICAgICB9KTtcbiAgICAgIG5leHQoZXJyb3IpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIF9oYW5kbGVTdHJlYW1VcGxvYWQocmVxLCByZXMsIG5leHQpIHtcbiAgICBjb25zdCBjb25maWcgPSByZXEuY29uZmlnO1xuICAgIGNvbnN0IGZpbGVzQ29udHJvbGxlciA9IGNvbmZpZy5maWxlc0NvbnRyb2xsZXI7XG4gICAgY29uc3QgeyBmaWxlbmFtZSB9ID0gcmVxLnBhcmFtcztcbiAgICBsZXQgY29udGVudFR5cGUgPSByZXEuZ2V0KCdDb250ZW50LVR5cGUnKTtcbiAgICBjb25zdCBtYXhCeXRlcyA9IHJlcS5fbWF4VXBsb2FkU2l6ZUJ5dGVzO1xuICAgIGxldCBzdHJlYW07XG5cbiAgICB0cnkge1xuICAgICAgLy8gRWFybHkgcmVqZWN0aW9uIHZpYSBDb250ZW50LUxlbmd0aCBoZWFkZXJcbiAgICAgIGNvbnN0IGNvbnRlbnRMZW5ndGggPSByZXEuZ2V0KCdDb250ZW50LUxlbmd0aCcpO1xuICAgICAgaWYgKGNvbnRlbnRMZW5ndGggJiYgcGFyc2VJbnQoY29udGVudExlbmd0aCwgMTApID4gbWF4Qnl0ZXMpIHtcbiAgICAgICAgcmVxLnJlc3VtZSgpO1xuICAgICAgICBuZXh0KG5ldyBQYXJzZS5FcnJvcihcbiAgICAgICAgICBQYXJzZS5FcnJvci5GSUxFX1NBVkVfRVJST1IsXG4gICAgICAgICAgYEZpbGUgc2l6ZSBleGNlZWRzIG1heGltdW0gYWxsb3dlZDogJHttYXhCeXRlc30gYnl0ZXMuYFxuICAgICAgICApKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBtaW1lID0gKGF3YWl0IGltcG9ydCgnbWltZScpKS5kZWZhdWx0O1xuXG4gICAgICAvLyBJbmZlciBjb250ZW50IHR5cGUgZnJvbSBleHRlbnNpb24gb3IgYWRkIGV4dGVuc2lvbiBmcm9tIGNvbnRlbnQgdHlwZVxuICAgICAgY29uc3QgaGFzRXh0ZW5zaW9uID0gZmlsZW5hbWUgJiYgZmlsZW5hbWUuaW5jbHVkZXMoJy4nKTtcbiAgICAgIGlmIChoYXNFeHRlbnNpb24gJiYgIWNvbnRlbnRUeXBlKSB7XG4gICAgICAgIGNvbnRlbnRUeXBlID0gbWltZS5nZXRUeXBlKGZpbGVuYW1lKTtcbiAgICAgIH0gZWxzZSBpZiAoIWhhc0V4dGVuc2lvbiAmJiBjb250ZW50VHlwZSkge1xuICAgICAgICAvLyBleHRlbnNpb24gd2lsbCBiZSBhZGRlZCBieSBmaWxlc0NvbnRyb2xsZXIuY3JlYXRlRmlsZVxuICAgICAgfVxuXG4gICAgICAvLyBDcmVhdGUgc2l6ZS1saW1pdGVkIHN0cmVhbSB3cmFwcGluZyB0aGUgcmVxdWVzdFxuICAgICAgc3RyZWFtID0gY3JlYXRlU2l6ZUxpbWl0ZWRTdHJlYW0ocmVxLCBtYXhCeXRlcyk7XG5cbiAgICAgIC8vIEJ1aWxkIGEgUGFyc2UuRmlsZSB3aXRoIG5vIF9kYXRhIChzdHJlYW1pbmcgbW9kZSlcbiAgICAgIGNvbnN0IGZpbGUgPSBuZXcgUGFyc2UuRmlsZShmaWxlbmFtZSwgeyBiYXNlNjQ6ICcnIH0sIGNvbnRlbnRUeXBlKTtcbiAgICAgIGNvbnN0IHsgbWV0YWRhdGEgPSB7fSwgdGFncyA9IHt9LCBkaXJlY3RvcnkgfSA9IHJlcS5maWxlRGF0YSB8fCB7fTtcblxuICAgICAgLy8gVmFsaWRhdGUgbWV0YWRhdGEgYW5kIHRhZ3MgZm9yIHByb2hpYml0ZWQga2V5d29yZHNcbiAgICAgIHRyeSB7XG4gICAgICAgIFV0aWxzLmNoZWNrUHJvaGliaXRlZEtleXdvcmRzKGNvbmZpZywgbWV0YWRhdGEpO1xuICAgICAgICBVdGlscy5jaGVja1Byb2hpYml0ZWRLZXl3b3Jkcyhjb25maWcsIHRhZ3MpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgc3RyZWFtLmRlc3Ryb3koKTtcbiAgICAgICAgbmV4dChuZXcgUGFyc2UuRXJyb3IoUGFyc2UuRXJyb3IuSU5WQUxJRF9LRVlfTkFNRSwgZXJyb3IpKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBmaWxlLnNldFRhZ3ModGFncyk7XG4gICAgICBmaWxlLnNldE1ldGFkYXRhKG1ldGFkYXRhKTtcbiAgICAgIGlmIChkaXJlY3RvcnkpIHtcbiAgICAgICAgZmlsZS5zZXREaXJlY3RvcnkoZGlyZWN0b3J5KTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZmlsZVNpemUgPSByZXEuZ2V0KCdDb250ZW50LUxlbmd0aCcpXG4gICAgICAgID8gcGFyc2VJbnQocmVxLmdldCgnQ29udGVudC1MZW5ndGgnKSwgMTApXG4gICAgICAgIDogbnVsbDtcbiAgICAgIGNvbnN0IGZpbGVPYmplY3QgPSB7IGZpbGUsIGZpbGVTaXplLCBzdHJlYW06IHRydWUgfTtcblxuICAgICAgLy8gUnVuIGJlZm9yZVNhdmVGaWxlIHRyaWdnZXJcbiAgICAgIGNvbnN0IHRyaWdnZXJSZXN1bHQgPSBhd2FpdCB0cmlnZ2Vycy5tYXliZVJ1bkZpbGVUcmlnZ2VyKFxuICAgICAgICB0cmlnZ2Vycy5UeXBlcy5iZWZvcmVTYXZlLFxuICAgICAgICBmaWxlT2JqZWN0LFxuICAgICAgICBjb25maWcsXG4gICAgICAgIHJlcS5hdXRoXG4gICAgICApO1xuXG4gICAgICBsZXQgc2F2ZVJlc3VsdDtcbiAgICAgIC8vIElmIGEgbmV3IFBhcnNlRmlsZSBpcyByZXR1cm5lZCwgY2hlY2sgaWYgaXQncyBhbiBhbHJlYWR5IHNhdmVkIGZpbGVcbiAgICAgIGlmICh0cmlnZ2VyUmVzdWx0IGluc3RhbmNlb2YgUGFyc2UuRmlsZSkge1xuICAgICAgICBmaWxlT2JqZWN0LmZpbGUgPSB0cmlnZ2VyUmVzdWx0O1xuICAgICAgICBpZiAodHJpZ2dlclJlc3VsdC51cmwoKSkge1xuICAgICAgICAgIGZpbGVPYmplY3QuZmlsZVNpemUgPSBudWxsO1xuICAgICAgICAgIHNhdmVSZXN1bHQgPSB7XG4gICAgICAgICAgICB1cmw6IHRyaWdnZXJSZXN1bHQudXJsKCksXG4gICAgICAgICAgICBuYW1lOiB0cmlnZ2VyUmVzdWx0Ll9uYW1lLFxuICAgICAgICAgIH07XG4gICAgICAgICAgLy8gRGVzdHJveSBzdHJlYW0gdG8gcmVtb3ZlIGxpc3RlbmVycyBhbmQgZHJhaW4gcmVxdWVzdFxuICAgICAgICAgIHN0cmVhbS5kZXN0cm95KCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gSWYgdGhlIGZpbGUgcmV0dXJuZWQgYnkgdGhlIHRyaWdnZXIgaGFzIGFscmVhZHkgYmVlbiBzYXZlZCwgc2tpcCBzYXZpbmdcbiAgICAgIGlmICghc2F2ZVJlc3VsdCkge1xuICAgICAgICAvLyBQcmVwYXJlIGZpbGUgb3B0aW9uc1xuICAgICAgICBjb25zdCBmaWxlT3B0aW9ucyA9IHtcbiAgICAgICAgICBtZXRhZGF0YTogZmlsZU9iamVjdC5maWxlLl9tZXRhZGF0YSxcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgZmlsZVRhZ3MgPVxuICAgICAgICAgIE9iamVjdC5rZXlzKGZpbGVPYmplY3QuZmlsZS5fdGFncykubGVuZ3RoID4gMCA/IHsgdGFnczogZmlsZU9iamVjdC5maWxlLl90YWdzIH0gOiB7fTtcbiAgICAgICAgT2JqZWN0LmFzc2lnbihmaWxlT3B0aW9ucywgZmlsZVRhZ3MpO1xuICAgICAgICAvLyBpbmNsdWRlIGRpcmVjdG9yeSBpZiBzZXQgKGZyb20gY2xpZW50IHJlcXVlc3Qgb3IgYmVmb3JlU2F2ZUZpbGUgdHJpZ2dlcilcbiAgICAgICAgaWYgKGZpbGVPYmplY3QuZmlsZS5fZGlyZWN0b3J5KSB7XG4gICAgICAgICAgZmlsZU9wdGlvbnMuZGlyZWN0b3J5ID0gZmlsZU9iamVjdC5maWxlLl9kaXJlY3Rvcnk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBQYXNzIHN0cmVhbSBkaXJlY3RseSB0byBmaWxlc0NvbnRyb2xsZXIg4oCUIGl0IHdpbGwgYnVmZmVyIGlmIGFkYXB0ZXIgZG9lc24ndCBzdXBwb3J0IHN0cmVhbWluZ1xuICAgICAgICBjb25zdCBzb3VyY2VUeXBlID0gZmlsZU9iamVjdC5maWxlLl9zb3VyY2U/LnR5cGUgfHwgY29udGVudFR5cGU7XG4gICAgICAgIGNvbnN0IGNyZWF0ZUZpbGVSZXN1bHQgPSBhd2FpdCBmaWxlc0NvbnRyb2xsZXIuY3JlYXRlRmlsZShcbiAgICAgICAgICBjb25maWcsXG4gICAgICAgICAgZmlsZU9iamVjdC5maWxlLl9uYW1lLFxuICAgICAgICAgIHN0cmVhbSxcbiAgICAgICAgICBzb3VyY2VUeXBlLFxuICAgICAgICAgIGZpbGVPcHRpb25zXG4gICAgICAgICk7XG5cbiAgICAgICAgLy8gVXBkYXRlIGZpbGUgd2l0aCBuZXcgZGF0YVxuICAgICAgICBmaWxlT2JqZWN0LmZpbGUuX25hbWUgPSBjcmVhdGVGaWxlUmVzdWx0Lm5hbWU7XG4gICAgICAgIGZpbGVPYmplY3QuZmlsZS5fdXJsID0gY3JlYXRlRmlsZVJlc3VsdC51cmw7XG4gICAgICAgIGZpbGVPYmplY3QuZmlsZS5fcmVxdWVzdFRhc2sgPSBudWxsO1xuICAgICAgICBmaWxlT2JqZWN0LmZpbGUuX3ByZXZpb3VzU2F2ZSA9IFByb21pc2UucmVzb2x2ZShmaWxlT2JqZWN0LmZpbGUpO1xuICAgICAgICBzYXZlUmVzdWx0ID0ge1xuICAgICAgICAgIHVybDogY3JlYXRlRmlsZVJlc3VsdC51cmwsXG4gICAgICAgICAgbmFtZTogY3JlYXRlRmlsZVJlc3VsdC5uYW1lLFxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICAvLyBSdW4gYWZ0ZXJTYXZlRmlsZSB0cmlnZ2VyXG4gICAgICBhd2FpdCB0cmlnZ2Vycy5tYXliZVJ1bkZpbGVUcmlnZ2VyKHRyaWdnZXJzLlR5cGVzLmFmdGVyU2F2ZSwgZmlsZU9iamVjdCwgY29uZmlnLCByZXEuYXV0aCk7XG4gICAgICByZXMuc3RhdHVzKDIwMSk7XG4gICAgICByZXMuc2V0KCdMb2NhdGlvbicsIHNhdmVSZXN1bHQudXJsKTtcbiAgICAgIHJlcy5qc29uKHNhdmVSZXN1bHQpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIC8vIERlc3Ryb3kgc3RyZWFtIHRvIHJlbW92ZSBsaXN0ZW5lcnMgYW5kIGRyYWluIHJlcXVlc3QsIG9yIHJlc3VtZSBkaXJlY3RseVxuICAgICAgaWYgKHN0cmVhbSkge1xuICAgICAgICBzdHJlYW0uZGVzdHJveSgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVxLnJlc3VtZSgpO1xuICAgICAgfVxuICAgICAgbG9nZ2VyLmVycm9yKCdFcnJvciBjcmVhdGluZyBhIGZpbGU6ICcsIGUpO1xuICAgICAgY29uc3QgZXJyb3IgPSB0cmlnZ2Vycy5yZXNvbHZlRXJyb3IoZSwge1xuICAgICAgICBjb2RlOiBQYXJzZS5FcnJvci5GSUxFX1NBVkVfRVJST1IsXG4gICAgICAgIG1lc3NhZ2U6IGBDb3VsZCBub3Qgc3RvcmUgZmlsZTogJHtmaWxlbmFtZX0uYCxcbiAgICAgIH0pO1xuICAgICAgbmV4dChlcnJvcik7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZGVsZXRlSGFuZGxlcihyZXEsIHJlcywgbmV4dCkge1xuICAgIGlmIChyZXEuYXV0aC5pc1JlYWRPbmx5KSB7XG4gICAgICBjb25zdCBlcnJvciA9IGNyZWF0ZVNhbml0aXplZEh0dHBFcnJvcig0MDMsIFwicmVhZC1vbmx5IG1hc3RlcktleSBpc24ndCBhbGxvd2VkIHRvIGRlbGV0ZSBhIGZpbGUuXCIsIHJlcS5jb25maWcpO1xuICAgICAgcmVzLnN0YXR1cyhlcnJvci5zdGF0dXMpO1xuICAgICAgcmVzLmVuZChge1wiZXJyb3JcIjpcIiR7ZXJyb3IubWVzc2FnZX1cIn1gKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHsgZmlsZXNDb250cm9sbGVyIH0gPSByZXEuY29uZmlnO1xuICAgICAgY29uc3QgZmlsZW5hbWUgPSBGaWxlc1JvdXRlci5fZ2V0RmlsZW5hbWVGcm9tUGFyYW1zKHJlcSk7XG4gICAgICAvLyBydW4gYmVmb3JlRGVsZXRlRmlsZSB0cmlnZ2VyXG4gICAgICBjb25zdCBmaWxlID0gbmV3IFBhcnNlLkZpbGUoZmlsZW5hbWUpO1xuICAgICAgZmlsZS5fdXJsID0gYXdhaXQgZmlsZXNDb250cm9sbGVyLmFkYXB0ZXIuZ2V0RmlsZUxvY2F0aW9uKHJlcS5jb25maWcsIGZpbGVuYW1lKTtcbiAgICAgIGNvbnN0IGZpbGVPYmplY3QgPSB7IGZpbGUsIGZpbGVTaXplOiBudWxsIH07XG4gICAgICBhd2FpdCB0cmlnZ2Vycy5tYXliZVJ1bkZpbGVUcmlnZ2VyKFxuICAgICAgICB0cmlnZ2Vycy5UeXBlcy5iZWZvcmVEZWxldGUsXG4gICAgICAgIGZpbGVPYmplY3QsXG4gICAgICAgIHJlcS5jb25maWcsXG4gICAgICAgIHJlcS5hdXRoXG4gICAgICApO1xuICAgICAgLy8gZGVsZXRlIGZpbGVcbiAgICAgIGF3YWl0IGZpbGVzQ29udHJvbGxlci5kZWxldGVGaWxlKHJlcS5jb25maWcsIGZpbGVuYW1lKTtcbiAgICAgIC8vIHJ1biBhZnRlckRlbGV0ZUZpbGUgdHJpZ2dlclxuICAgICAgYXdhaXQgdHJpZ2dlcnMubWF5YmVSdW5GaWxlVHJpZ2dlcihcbiAgICAgICAgdHJpZ2dlcnMuVHlwZXMuYWZ0ZXJEZWxldGUsXG4gICAgICAgIGZpbGVPYmplY3QsXG4gICAgICAgIHJlcS5jb25maWcsXG4gICAgICAgIHJlcS5hdXRoXG4gICAgICApO1xuICAgICAgcmVzLnN0YXR1cygyMDApO1xuICAgICAgLy8gVE9ETzogcmV0dXJuIHVzZWZ1bCBKU09OIGhlcmU/XG4gICAgICByZXMuZW5kKCk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgbG9nZ2VyLmVycm9yKCdFcnJvciBkZWxldGluZyBhIGZpbGU6ICcsIGUpO1xuICAgICAgY29uc3QgZXJyb3IgPSB0cmlnZ2Vycy5yZXNvbHZlRXJyb3IoZSwge1xuICAgICAgICBjb2RlOiBQYXJzZS5FcnJvci5GSUxFX0RFTEVURV9FUlJPUixcbiAgICAgICAgbWVzc2FnZTogJ0NvdWxkIG5vdCBkZWxldGUgZmlsZS4nLFxuICAgICAgfSk7XG4gICAgICBuZXh0KGVycm9yKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBtZXRhZGF0YUhhbmRsZXIocmVxLCByZXMpIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgY29uZmlnID0gQ29uZmlnLmdldChyZXEucGFyYW1zLmFwcElkKTtcbiAgICAgIGlmICghY29uZmlnKSB7XG4gICAgICAgIHJlcy5zdGF0dXMoMjAwKTtcbiAgICAgICAgcmVzLmpzb24oe30pO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjb25zdCB7IGZpbGVzQ29udHJvbGxlciB9ID0gY29uZmlnO1xuICAgICAgbGV0IGZpbGVuYW1lID0gRmlsZXNSb3V0ZXIuX2dldEZpbGVuYW1lRnJvbVBhcmFtcyhyZXEpO1xuICAgICAgY29uc3QgZmlsZSA9IG5ldyBQYXJzZS5GaWxlKGZpbGVuYW1lLCB7IGJhc2U2NDogJycgfSk7XG4gICAgICBjb25zdCBmaWxlQXV0aCA9IGF3YWl0IEZpbGVzUm91dGVyLl9yZXNvbHZlQXV0aChyZXEsIGNvbmZpZyk7XG4gICAgICBjb25zdCB0cmlnZ2VyUmVzdWx0ID0gYXdhaXQgdHJpZ2dlcnMubWF5YmVSdW5GaWxlVHJpZ2dlcihcbiAgICAgICAgdHJpZ2dlcnMuVHlwZXMuYmVmb3JlRmluZCxcbiAgICAgICAgeyBmaWxlIH0sXG4gICAgICAgIGNvbmZpZyxcbiAgICAgICAgZmlsZUF1dGhcbiAgICAgICk7XG4gICAgICBpZiAodHJpZ2dlclJlc3VsdD8uZmlsZT8uX25hbWUpIHtcbiAgICAgICAgZmlsZW5hbWUgPSB0cmlnZ2VyUmVzdWx0LmZpbGUuX25hbWU7XG4gICAgICB9XG4gICAgICBjb25zdCBkYXRhID0gYXdhaXQgZmlsZXNDb250cm9sbGVyLmdldE1ldGFkYXRhKGZpbGVuYW1lKS5jYXRjaCgoKSA9PiB7XG4gICAgICAgIHJlcy5zdGF0dXMoMjAwKTtcbiAgICAgICAgcmVzLmpzb24oe30pO1xuICAgICAgfSk7XG4gICAgICBpZiAoIWRhdGEpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgYXdhaXQgdHJpZ2dlcnMubWF5YmVSdW5GaWxlVHJpZ2dlcihcbiAgICAgICAgdHJpZ2dlcnMuVHlwZXMuYWZ0ZXJGaW5kLFxuICAgICAgICB7IGZpbGUgfSxcbiAgICAgICAgY29uZmlnLFxuICAgICAgICBmaWxlQXV0aFxuICAgICAgKTtcbiAgICAgIHJlcy5zdGF0dXMoMjAwKTtcbiAgICAgIHJlcy5qc29uKGRhdGEpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGNvbnN0IGVyciA9IHRyaWdnZXJzLnJlc29sdmVFcnJvcihlLCB7XG4gICAgICAgIGNvZGU6IFBhcnNlLkVycm9yLlNDUklQVF9GQUlMRUQsXG4gICAgICAgIG1lc3NhZ2U6ICdDb3VsZCBub3QgZ2V0IGZpbGUgbWV0YWRhdGEuJyxcbiAgICAgIH0pO1xuICAgICAgcmVzLnN0YXR1cyg0MDMpO1xuICAgICAgcmVzLmpzb24oeyBjb2RlOiBlcnIuY29kZSwgZXJyb3I6IGVyci5tZXNzYWdlIH0pO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBpc0ZpbGVTdHJlYW1hYmxlKHJlcSwgZmlsZXNDb250cm9sbGVyKSB7XG4gIGNvbnN0IHJhbmdlID0gKHJlcS5nZXQoJ1JhbmdlJykgfHwgJy8tLycpLnNwbGl0KCctJyk7XG4gIGNvbnN0IHN0YXJ0ID0gTnVtYmVyKHJhbmdlWzBdKTtcbiAgY29uc3QgZW5kID0gTnVtYmVyKHJhbmdlWzFdKTtcbiAgcmV0dXJuIChcbiAgICAoIWlzTmFOKHN0YXJ0KSB8fCAhaXNOYU4oZW5kKSkgJiYgdHlwZW9mIGZpbGVzQ29udHJvbGxlci5hZGFwdGVyLmhhbmRsZUZpbGVTdHJlYW0gPT09ICdmdW5jdGlvbidcbiAgKTtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUFBLElBQUFBLFFBQUEsR0FBQUMsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFDLFdBQUEsR0FBQUMsdUJBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFHLEtBQUEsR0FBQUosc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFJLE9BQUEsR0FBQUwsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFLLE9BQUEsR0FBQU4sc0JBQUEsQ0FBQUMsT0FBQTtBQUlBLElBQUFNLE9BQUEsR0FBQU4sT0FBQTtBQUNBLElBQUFPLE1BQUEsR0FBQVAsT0FBQTtBQUFvRCxTQUFBRSx3QkFBQU0sQ0FBQSxFQUFBQyxDQUFBLDZCQUFBQyxPQUFBLE1BQUFDLENBQUEsT0FBQUQsT0FBQSxJQUFBRSxDQUFBLE9BQUFGLE9BQUEsWUFBQVIsdUJBQUEsWUFBQUEsQ0FBQU0sQ0FBQSxFQUFBQyxDQUFBLFNBQUFBLENBQUEsSUFBQUQsQ0FBQSxJQUFBQSxDQUFBLENBQUFLLFVBQUEsU0FBQUwsQ0FBQSxNQUFBTSxDQUFBLEVBQUFDLENBQUEsRUFBQUMsQ0FBQSxLQUFBQyxTQUFBLFFBQUFDLE9BQUEsRUFBQVYs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
|
package/lib/batch.js
CHANGED
|
@@ -83,6 +83,9 @@ async function handleBatch(router, req) {
|
|
|
83
83
|
const rateLimits = req.config.rateLimits || [];
|
|
84
84
|
for (const restRequest of req.body.requests) {
|
|
85
85
|
const routablePath = makeRoutablePath(restRequest.path);
|
|
86
|
+
if ((restRequest.method || 'GET').toUpperCase() === 'POST' && routablePath === batchPath) {
|
|
87
|
+
throw new Parse.Error(Parse.Error.INVALID_JSON, 'nested batch requests are not allowed');
|
|
88
|
+
}
|
|
86
89
|
for (const limit of rateLimits) {
|
|
87
90
|
const pathExp = limit.path.regexp || limit.path;
|
|
88
91
|
if (!pathExp.test(routablePath)) {
|
|
@@ -179,4 +182,4 @@ module.exports = {
|
|
|
179
182
|
mountOnto,
|
|
180
183
|
makeBatchRoutingPathFunction
|
|
181
184
|
};
|
|
182
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJQYXJzZSIsInJlcXVpcmUiLCJwYXRoIiwiYmF0Y2hQYXRoIiwibW91bnRPbnRvIiwicm91dGVyIiwicm91dGUiLCJyZXEiLCJoYW5kbGVCYXRjaCIsInBhcnNlVVJMIiwidXJsU3RyaW5nIiwiVVJMIiwidW5kZWZpbmVkIiwibWFrZUJhdGNoUm91dGluZ1BhdGhGdW5jdGlvbiIsIm9yaWdpbmFsVXJsIiwic2VydmVyVVJMIiwicHVibGljU2VydmVyVVJMIiwiYXBpUHJlZml4TGVuZ3RoIiwibGVuZ3RoIiwiYXBpUHJlZml4Iiwic2xpY2UiLCJtYWtlUm91dGFibGVQYXRoIiwicmVxdWVzdFBhdGgiLCJFcnJvciIsIklOVkFMSURfSlNPTiIsInBvc2l4Iiwiam9pbiIsInBhdGhuYW1lIiwibG9jYWxQYXRoIiwicHVibGljUGF0aCIsInN0YXJ0c1dpdGhMb2NhbCIsInN0YXJ0c1dpdGgiLCJzdGFydHNXaXRoUHVibGljIiwicGF0aExlbmd0aFRvVXNlIiwiTWF0aCIsIm1heCIsIm5ld1BhdGgiLCJBcnJheSIsImlzQXJyYXkiLCJib2R5IiwicmVxdWVzdHMiLCJiYXRjaFJlcXVlc3RMaW1pdCIsImNvbmZpZyIsInJlcXVlc3RDb21wbGV4aXR5IiwiYXV0aCIsImlzTWFzdGVyIiwiaXNNYWludGVuYW5jZSIsInJlc3RSZXF1ZXN0IiwiZW5kc1dpdGgiLCJyYXRlTGltaXRzIiwicm91dGFibGVQYXRoIiwibGltaXQiLCJwYXRoRXhwIiwicmVnZXhwIiwidGVzdCIsImluZm8iLCJzZXNzaW9uVG9rZW4iLCJmYWtlUmVxIiwiaXAiLCJtZXRob2QiLCJ0b1VwcGVyQ2FzZSIsIl9iYXRjaE9yaWdpbmFsTWV0aG9kIiwiZmFrZVJlcyIsInNldEhlYWRlciIsImhhbmRsZXIiLCJlcnIiLCJDT05ORUNUSU9OX0ZBSUxFRCIsImVycm9yUmVzcG9uc2VNZXNzYWdlIiwiYmF0Y2giLCJ0cmFuc2FjdGlvblJldHJpZXMiLCJpbml0aWFsUHJvbWlzZSIsIlByb21pc2UiLCJyZXNvbHZlIiwidHJhbnNhY3Rpb24iLCJkYXRhYmFzZSIsImNyZWF0ZVRyYW5zYWN0aW9uYWxTZXNzaW9uIiwidGhlbiIsInByb21pc2VzIiwibWFwIiwicmVxdWVzdCIsInRyeVJvdXRlUmVxdWVzdCIsInJlc3BvbnNlIiwic3VjY2VzcyIsImVycm9yIiwiY29kZSIsIm1lc3NhZ2UiLCJhbGwiLCJyZXN1bHRzIiwiZmluZCIsInJlc3VsdCIsImFib3J0VHJhbnNhY3Rpb25hbFNlc3Npb24iLCJyZWplY3QiLCJjb21taXRUcmFuc2FjdGlvbmFsU2Vzc2lvbiIsImNhdGNoIiwiZXJyb3JJdGVtIiwibW9kdWxlIiwiZXhwb3J0cyJdLCJzb3VyY2VzIjpbIi4uL3NyYy9iYXRjaC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJjb25zdCBQYXJzZSA9IHJlcXVpcmUoJ3BhcnNlL25vZGUnKS5QYXJzZTtcbmNvbnN0IHBhdGggPSByZXF1aXJlKCdwYXRoJyk7XG4vLyBUaGVzZSBtZXRob2RzIGhhbmRsZSBiYXRjaCByZXF1ZXN0cy5cbmNvbnN0IGJhdGNoUGF0aCA9ICcvYmF0Y2gnO1xuXG4vLyBNb3VudHMgYSBiYXRjaC1oYW5kbGVyIG9udG8gYSBQcm9taXNlUm91dGVyLlxuZnVuY3Rpb24gbW91bnRPbnRvKHJvdXRlcikge1xuICByb3V0ZXIucm91dGUoJ1BPU1QnLCBiYXRjaFBhdGgsIHJlcSA9PiB7XG4gICAgcmV0dXJuIGhhbmRsZUJhdGNoKHJvdXRlciwgcmVxKTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHBhcnNlVVJMKHVybFN0cmluZykge1xuICB0cnkge1xuICAgIHJldHVybiBuZXcgVVJMKHVybFN0cmluZyk7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbn1cblxuZnVuY3Rpb24gbWFrZUJhdGNoUm91dGluZ1BhdGhGdW5jdGlvbihvcmlnaW5hbFVybCwgc2VydmVyVVJMLCBwdWJsaWNTZXJ2ZXJVUkwpIHtcbiAgc2VydmVyVVJMID0gc2VydmVyVVJMID8gcGFyc2VVUkwoc2VydmVyVVJMKSA6IHVuZGVmaW5lZDtcbiAgcHVibGljU2VydmVyVVJMID0gcHVibGljU2VydmVyVVJMID8gcGFyc2VVUkwocHVibGljU2VydmVyVVJMKSA6IHVuZGVmaW5lZDtcblxuICBjb25zdCBhcGlQcmVmaXhMZW5ndGggPSBvcmlnaW5hbFVybC5sZW5ndGggLSBiYXRjaFBhdGgubGVuZ3RoO1xuICBsZXQgYXBpUHJlZml4ID0gb3JpZ2luYWxVcmwuc2xpY2UoMCwgYXBpUHJlZml4TGVuZ3RoKTtcblxuICBjb25zdCBtYWtlUm91dGFibGVQYXRoID0gZnVuY3Rpb24gKHJlcXVlc3RQYXRoKSB7XG4gICAgLy8gVGhlIHJvdXRhYmxlUGF0aCBpcyB0aGUgcGF0aCBtaW51cyB0aGUgYXBpIHByZWZpeFxuICAgIGlmIChyZXF1ZXN0UGF0aC5zbGljZSgwLCBhcGlQcmVmaXgubGVuZ3RoKSAhPSBhcGlQcmVmaXgpIHtcbiAgICAgIHRocm93IG5ldyBQYXJzZS5FcnJvcihQYXJzZS5FcnJvci5JTlZBTElEX0pTT04sICdjYW5ub3Qgcm91dGUgYmF0Y2ggcGF0aCAnICsgcmVxdWVzdFBhdGgpO1xuICAgIH1cbiAgICByZXR1cm4gcGF0aC5wb3NpeC5qb2luKCcvJywgcmVxdWVzdFBhdGguc2xpY2UoYXBpUHJlZml4Lmxlbmd0aCkpO1xuICB9O1xuXG4gIGlmIChzZXJ2ZXJVUkwgJiYgcHVibGljU2VydmVyVVJMICYmIHNlcnZlclVSTC5wYXRobmFtZSAhPSBwdWJsaWNTZXJ2ZXJVUkwucGF0aG5hbWUpIHtcbiAgICBjb25zdCBsb2NhbFBhdGggPSBzZXJ2ZXJVUkwucGF0aG5hbWU7XG4gICAgY29uc3QgcHVibGljUGF0aCA9IHB1YmxpY1NlcnZlclVSTC5wYXRobmFtZTtcblxuICAgIC8vIE92ZXJyaWRlIHRoZSBhcGkgcHJlZml4XG4gICAgYXBpUHJlZml4ID0gbG9jYWxQYXRoO1xuICAgIHJldHVybiBmdW5jdGlvbiAocmVxdWVzdFBhdGgpIHtcbiAgICAgIC8vIEZpZ3VyZSBvdXQgd2hpY2ggc2VydmVyIHVybCB3YXMgdXNlZCBieSBmaWd1cmluZyBvdXQgd2hpY2hcbiAgICAgIC8vIHBhdGggbW9yZSBjbG9zZWx5IG1hdGNoZXMgcmVxdWVzdFBhdGhcbiAgICAgIGNvbnN0IHN0YXJ0c1dpdGhMb2NhbCA9IHJlcXVlc3RQYXRoLnN0YXJ0c1dpdGgobG9jYWxQYXRoKTtcbiAgICAgIGNvbnN0IHN0YXJ0c1dpdGhQdWJsaWMgPSByZXF1ZXN0UGF0aC5zdGFydHNXaXRoKHB1YmxpY1BhdGgpO1xuICAgICAgY29uc3QgcGF0aExlbmd0aFRvVXNlID1cbiAgICAgICAgc3RhcnRzV2l0aExvY2FsICYmIHN0YXJ0c1dpdGhQdWJsaWNcbiAgICAgICAgICA/IE1hdGgubWF4KGxvY2FsUGF0aC5sZW5ndGgsIHB1YmxpY1BhdGgubGVuZ3RoKVxuICAgICAgICAgIDogc3RhcnRzV2l0aExvY2FsXG4gICAgICAgICAgICA/IGxvY2FsUGF0aC5sZW5ndGhcbiAgICAgICAgICAgIDogcHVibGljUGF0aC5sZW5ndGg7XG5cbiAgICAgIGNvbnN0IG5ld1BhdGggPSBwYXRoLnBvc2l4LmpvaW4oJy8nLCBsb2NhbFBhdGgsICcvJywgcmVxdWVzdFBhdGguc2xpY2UocGF0aExlbmd0aFRvVXNlKSk7XG5cbiAgICAgIC8vIFVzZSB0aGUgbWV0aG9kIGZvciBsb2NhbCByb3V0aW5nXG4gICAgICByZXR1cm4gbWFrZVJvdXRhYmxlUGF0aChuZXdQYXRoKTtcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIG1ha2VSb3V0YWJsZVBhdGg7XG59XG5cbi8vIFJldHVybnMgYSBwcm9taXNlIGZvciBhIHtyZXNwb25zZX0gb2JqZWN0LlxuLy8gVE9ETzogcGFzcyBhbG9uZyBhdXRoIGNvcnJlY3RseVxuYXN5bmMgZnVuY3Rpb24gaGFuZGxlQmF0Y2gocm91dGVyLCByZXEpIHtcbiAgaWYgKCFBcnJheS5pc0FycmF5KHJlcS5ib2R5Py5yZXF1ZXN0cykpIHtcbiAgICB0aHJvdyBuZXcgUGFyc2UuRXJyb3IoUGFyc2UuRXJyb3IuSU5WQUxJRF9KU09OLCAncmVxdWVzdHMgbXVzdCBiZSBhbiBhcnJheScpO1xuICB9XG4gIGNvbnN0IGJhdGNoUmVxdWVzdExpbWl0ID0gcmVxLmNvbmZpZz8ucmVxdWVzdENvbXBsZXhpdHk/LmJhdGNoUmVxdWVzdExpbWl0ID8/IC0xO1xuICBpZiAoYmF0Y2hSZXF1ZXN0TGltaXQgPiAtMSAmJiAhcmVxLmF1dGg/LmlzTWFzdGVyICYmICFyZXEuYXV0aD8uaXNNYWludGVuYW5jZSAmJiByZXEuYm9keS5yZXF1ZXN0cy5sZW5ndGggPiBiYXRjaFJlcXVlc3RMaW1pdCkge1xuICAgIHRocm93IG5ldyBQYXJzZS5FcnJvcihcbiAgICAgIFBhcnNlLkVycm9yLklOVkFMSURfSlNPTixcbiAgICAgIGBCYXRjaCByZXF1ZXN0IGNvbnRhaW5zICR7cmVxLmJvZHkucmVxdWVzdHMubGVuZ3RofSBzdWItcmVxdWVzdHMsIHdoaWNoIGV4Y2VlZHMgdGhlIGxpbWl0IG9mICR7YmF0Y2hSZXF1ZXN0TGltaXR9LmBcbiAgICApO1xuICB9XG4gIGZvciAoY29uc3QgcmVzdFJlcXVlc3Qgb2YgcmVxLmJvZHkucmVxdWVzdHMpIHtcbiAgICBpZiAoIXJlc3RSZXF1ZXN0IHx8IHR5cGVvZiByZXN0UmVxdWVzdCAhPT0gJ29iamVjdCcgfHwgdHlwZW9mIHJlc3RSZXF1ZXN0LnBhdGggIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgUGFyc2UuRXJyb3IoUGFyc2UuRXJyb3IuSU5WQUxJRF9KU09OLCAnYmF0Y2ggcmVxdWVzdCBwYXRoIG11c3QgYmUgYSBzdHJpbmcnKTtcbiAgICB9XG4gIH1cblxuICAvLyBUaGUgYmF0Y2ggcGF0aHMgYXJlIGFsbCBmcm9tIHRoZSByb290IG9mIG91ciBkb21haW4uXG4gIC8vIFRoYXQgbWVhbnMgdGhleSBpbmNsdWRlIHRoZSBBUEkgcHJlZml4LCB0aGF0IHRoZSBBUEkgaXMgbW91bnRlZFxuICAvLyB0by4gSG93ZXZlciwgb3VyIHByb21pc2Ugcm91dGVyIGRvZXMgbm90IHJvdXRlIHRoZSBhcGkgcHJlZml4LiBTb1xuICAvLyB3ZSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIEFQSSBwcmVmaXgsIHNvIHRoYXQgd2UgY2FuIHN0cmlwIGl0XG4gIC8vIGZyb20gYWxsIHRoZSBzdWJyZXF1ZXN0cy5cbiAgaWYgKCFyZXEub3JpZ2luYWxVcmwuZW5kc1dpdGgoYmF0Y2hQYXRoKSkge1xuICAgIHRocm93ICdpbnRlcm5hbCByb3V0aW5nIHByb2JsZW0gLSBleHBlY3RlZCB1cmwgdG8gZW5kIHdpdGggYmF0Y2gnO1xuICB9XG5cbiAgY29uc3QgbWFrZVJvdXRhYmxlUGF0aCA9IG1ha2VCYXRjaFJvdXRpbmdQYXRoRnVuY3Rpb24oXG4gICAgcmVxLm9yaWdpbmFsVXJsLFxuICAgIHJlcS5jb25maWcuc2VydmVyVVJMLFxuICAgIHJlcS5jb25maWcucHVibGljU2VydmVyVVJMXG4gICk7XG5cbiAgLy8gRW5mb3JjZSByYXRlIGxpbWl0cyBmb3IgZWFjaCBiYXRjaCBzdWItcmVxdWVzdCBieSBpbnZva2luZyB0aGVcbiAgLy8gcmF0ZSBsaW1pdCBoYW5kbGVyLiBUaGlzIGVuc3VyZXMgc3ViLXJlcXVlc3RzIGNvbnN1bWUgdG9rZW5zIGZyb21cbiAgLy8gdGhlIHNhbWUgd2luZG93IHN0YXRlIGFzIGRpcmVjdCByZXF1ZXN0cy5cbiAgY29uc3QgcmF0ZUxpbWl0cyA9IHJlcS5jb25maWcucmF0ZUxpbWl0cyB8fCBbXTtcbiAgZm9yIChjb25zdCByZXN0UmVxdWVzdCBvZiByZXEuYm9keS5yZXF1ZXN0cykge1xuICAgIGNvbnN0IHJvdXRhYmxlUGF0aCA9IG1ha2VSb3V0YWJsZVBhdGgocmVzdFJlcXVlc3QucGF0aCk7XG4gICAgZm9yIChjb25zdCBsaW1pdCBvZiByYXRlTGltaXRzKSB7XG4gICAgICBjb25zdCBwYXRoRXhwID0gbGltaXQucGF0aC5yZWdleHAgfHwgbGltaXQucGF0aDtcbiAgICAgIGlmICghcGF0aEV4cC50ZXN0KHJvdXRhYmxlUGF0aCkpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBjb25zdCBpbmZvID0geyAuLi5yZXEuaW5mbyB9O1xuICAgICAgaWYgKHJvdXRhYmxlUGF0aCA9PT0gJy9sb2dpbicpIHtcbiAgICAgICAgZGVsZXRlIGluZm8uc2Vzc2lvblRva2VuO1xuICAgICAgfVxuICAgICAgY29uc3QgZmFrZVJlcSA9IHtcbiAgICAgICAgaXA6IHJlcS5pcCB8fCByZXEuY29uZmlnPy5pcCB8fCAnMTI3LjAuMC4xJyxcbiAgICAgICAgbWV0aG9kOiAocmVzdFJlcXVlc3QubWV0aG9kIHx8ICdHRVQnKS50b1VwcGVyQ2FzZSgpLFxuICAgICAgICBfYmF0Y2hPcmlnaW5hbE1ldGhvZDogJ1BPU1QnLFxuICAgICAgICBjb25maWc6IHJlcS5jb25maWcsXG4gICAgICAgIGF1dGg6IHJlcS5hdXRoLFxuICAgICAgICBpbmZvLFxuICAgICAgfTtcbiAgICAgIGNvbnN0IGZha2VSZXMgPSB7IHNldEhlYWRlcigpIHt9IH07XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCBsaW1pdC5oYW5kbGVyKGZha2VSZXEsIGZha2VSZXMsIGVyciA9PiB7XG4gICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgdGhyb3cgbmV3IFBhcnNlLkVycm9yKFxuICAgICAgICAgIFBhcnNlLkVycm9yLkNPTk5FQ1RJT05fRkFJTEVELFxuICAgICAgICAgIGxpbWl0LmVycm9yUmVzcG9uc2VNZXNzYWdlIHx8ICdUb28gbWFueSByZXF1ZXN0cydcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBjb25zdCBiYXRjaCA9IHRyYW5zYWN0aW9uUmV0cmllcyA9PiB7XG4gICAgbGV0IGluaXRpYWxQcm9taXNlID0gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgaWYgKHJlcS5ib2R5Py50cmFuc2FjdGlvbiA9PT0gdHJ1ZSkge1xuICAgICAgaW5pdGlhbFByb21pc2UgPSByZXEuY29uZmlnLmRhdGFiYXNlLmNyZWF0ZVRyYW5zYWN0aW9uYWxTZXNzaW9uKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGluaXRpYWxQcm9taXNlLnRoZW4oKCkgPT4ge1xuICAgICAgY29uc3QgcHJvbWlzZXMgPSByZXEuYm9keT8ucmVxdWVzdHMubWFwKHJlc3RSZXF1ZXN0ID0+IHtcbiAgICAgICAgY29uc3Qgcm91dGFibGVQYXRoID0gbWFrZVJvdXRhYmxlUGF0aChyZXN0UmVxdWVzdC5wYXRoKTtcblxuICAgICAgICAvLyBDb25zdHJ1Y3QgYSByZXF1ZXN0IHRoYXQgd2UgY2FuIHNlbmQgdG8gYSBoYW5kbGVyXG4gICAgICAgIGNvbnN0IHJlcXVlc3QgPSB7XG4gICAgICAgICAgYm9keTogcmVzdFJlcXVlc3QuYm9keSxcbiAgICAgICAgICBjb25maWc6IHJlcS5jb25maWcsXG4gICAgICAgICAgYXV0aDogcmVxLmF1dGgsXG4gICAgICAgICAgaW5mbzogcmVxLmluZm8sXG4gICAgICAgIH07XG5cbiAgICAgICAgcmV0dXJuIHJvdXRlci50cnlSb3V0ZVJlcXVlc3QocmVzdFJlcXVlc3QubWV0aG9kLCByb3V0YWJsZVBhdGgsIHJlcXVlc3QpLnRoZW4oXG4gICAgICAgICAgcmVzcG9uc2UgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHsgc3VjY2VzczogcmVzcG9uc2UucmVzcG9uc2UgfTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIGVycm9yID0+IHtcbiAgICAgICAgICAgIHJldHVybiB7IGVycm9yOiB7IGNvZGU6IGVycm9yLmNvZGUsIGVycm9yOiBlcnJvci5tZXNzYWdlIH0gfTtcbiAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIFByb21pc2UuYWxsKHByb21pc2VzKVxuICAgICAgICAudGhlbihyZXN1bHRzID0+IHtcbiAgICAgICAgICBpZiAocmVxLmJvZHk/LnRyYW5zYWN0aW9uID09PSB0cnVlKSB7XG4gICAgICAgICAgICBpZiAocmVzdWx0cy5maW5kKHJlc3VsdCA9PiB0eXBlb2YgcmVzdWx0LmVycm9yID09PSAnb2JqZWN0JykpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHJlcS5jb25maWcuZGF0YWJhc2UuYWJvcnRUcmFuc2FjdGlvbmFsU2Vzc2lvbigpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdCh7IHJlc3BvbnNlOiByZXN1bHRzIH0pO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHJldHVybiByZXEuY29uZmlnLmRhdGFiYXNlLmNvbW1pdFRyYW5zYWN0aW9uYWxTZXNzaW9uKCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgcmVzcG9uc2U6IHJlc3VsdHMgfTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB7IHJlc3BvbnNlOiByZXN1bHRzIH07XG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2goZXJyb3IgPT4ge1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIGVycm9yICYmXG4gICAgICAgICAgICBlcnJvci5yZXNwb25zZSAmJlxuICAgICAgICAgICAgZXJyb3IucmVzcG9uc2UuZmluZChcbiAgICAgICAgICAgICAgZXJyb3JJdGVtID0+IHR5cGVvZiBlcnJvckl0ZW0uZXJyb3IgPT09ICdvYmplY3QnICYmIGVycm9ySXRlbS5lcnJvci5jb2RlID09PSAyNTFcbiAgICAgICAgICAgICkgJiZcbiAgICAgICAgICAgIHRyYW5zYWN0aW9uUmV0cmllcyA+IDBcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHJldHVybiBiYXRjaCh0cmFuc2FjdGlvblJldHJpZXMgLSAxKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuICB9O1xuICByZXR1cm4gYmF0Y2goNSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBtb3VudE9udG8sXG4gIG1ha2VCYXRjaFJvdXRpbmdQYXRoRnVuY3Rpb24sXG59O1xuIl0sIm1hcHBpbmdzIjoiOztBQUFBLE1BQU1BLEtBQUssR0FBR0MsT0FBTyxDQUFDLFlBQVksQ0FBQyxDQUFDRCxLQUFLO0FBQ3pDLE1BQU1FLElBQUksR0FBR0QsT0FBTyxDQUFDLE1BQU0sQ0FBQztBQUM1QjtBQUNBLE1BQU1FLFNBQVMsR0FBRyxRQUFROztBQUUxQjtBQUNBLFNBQVNDLFNBQVNBLENBQUNDLE1BQU0sRUFBRTtFQUN6QkEsTUFBTSxDQUFDQyxLQUFLLENBQUMsTUFBTSxFQUFFSCxTQUFTLEVBQUVJLEdBQUcsSUFBSTtJQUNyQyxPQUFPQyxXQUFXLENBQUNILE1BQU0sRUFBRUUsR0FBRyxDQUFDO0VBQ2pDLENBQUMsQ0FBQztBQUNKO0FBRUEsU0FBU0UsUUFBUUEsQ0FBQ0MsU0FBUyxFQUFFO0VBQzNCLElBQUk7SUFDRixPQUFPLElBQUlDLEdBQUcsQ0FBQ0QsU0FBUyxDQUFDO0VBQzNCLENBQUMsQ0FBQyxNQUFNO0lBQ04sT0FBT0UsU0FBUztFQUNsQjtBQUNGO0FBRUEsU0FBU0MsNEJBQTRCQSxDQUFDQyxXQUFXLEVBQUVDLFNBQVMsRUFBRUMsZUFBZSxFQUFFO0VBQzdFRCxTQUFTLEdBQUdBLFNBQVMsR0FBR04sUUFBUSxDQUFDTSxTQUFTLENBQUMsR0FBR0gsU0FBUztFQUN2REksZUFBZSxHQUFHQSxlQUFlLEdBQUdQLFFBQVEsQ0FBQ08sZUFBZSxDQUFDLEdBQUdKLFNBQVM7RUFFekUsTUFBTUssZUFBZSxHQUFHSCxXQUFXLENBQUNJLE1BQU0sR0FBR2YsU0FBUyxDQUFDZSxNQUFNO0VBQzdELElBQUlDLFNBQVMsR0FBR0wsV0FBVyxDQUFDTSxLQUFLLENBQUMsQ0FBQyxFQUFFSCxlQUFlLENBQUM7RUFFckQsTUFBTUksZ0JBQWdCLEdBQUcsU0FBQUEsQ0FBVUMsV0FB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
|
|
185
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJQYXJzZSIsInJlcXVpcmUiLCJwYXRoIiwiYmF0Y2hQYXRoIiwibW91bnRPbnRvIiwicm91dGVyIiwicm91dGUiLCJyZXEiLCJoYW5kbGVCYXRjaCIsInBhcnNlVVJMIiwidXJsU3RyaW5nIiwiVVJMIiwidW5kZWZpbmVkIiwibWFrZUJhdGNoUm91dGluZ1BhdGhGdW5jdGlvbiIsIm9yaWdpbmFsVXJsIiwic2VydmVyVVJMIiwicHVibGljU2VydmVyVVJMIiwiYXBpUHJlZml4TGVuZ3RoIiwibGVuZ3RoIiwiYXBpUHJlZml4Iiwic2xpY2UiLCJtYWtlUm91dGFibGVQYXRoIiwicmVxdWVzdFBhdGgiLCJFcnJvciIsIklOVkFMSURfSlNPTiIsInBvc2l4Iiwiam9pbiIsInBhdGhuYW1lIiwibG9jYWxQYXRoIiwicHVibGljUGF0aCIsInN0YXJ0c1dpdGhMb2NhbCIsInN0YXJ0c1dpdGgiLCJzdGFydHNXaXRoUHVibGljIiwicGF0aExlbmd0aFRvVXNlIiwiTWF0aCIsIm1heCIsIm5ld1BhdGgiLCJBcnJheSIsImlzQXJyYXkiLCJib2R5IiwicmVxdWVzdHMiLCJiYXRjaFJlcXVlc3RMaW1pdCIsImNvbmZpZyIsInJlcXVlc3RDb21wbGV4aXR5IiwiYXV0aCIsImlzTWFzdGVyIiwiaXNNYWludGVuYW5jZSIsInJlc3RSZXF1ZXN0IiwiZW5kc1dpdGgiLCJyYXRlTGltaXRzIiwicm91dGFibGVQYXRoIiwibWV0aG9kIiwidG9VcHBlckNhc2UiLCJsaW1pdCIsInBhdGhFeHAiLCJyZWdleHAiLCJ0ZXN0IiwiaW5mbyIsInNlc3Npb25Ub2tlbiIsImZha2VSZXEiLCJpcCIsIl9iYXRjaE9yaWdpbmFsTWV0aG9kIiwiZmFrZVJlcyIsInNldEhlYWRlciIsImhhbmRsZXIiLCJlcnIiLCJDT05ORUNUSU9OX0ZBSUxFRCIsImVycm9yUmVzcG9uc2VNZXNzYWdlIiwiYmF0Y2giLCJ0cmFuc2FjdGlvblJldHJpZXMiLCJpbml0aWFsUHJvbWlzZSIsIlByb21pc2UiLCJyZXNvbHZlIiwidHJhbnNhY3Rpb24iLCJkYXRhYmFzZSIsImNyZWF0ZVRyYW5zYWN0aW9uYWxTZXNzaW9uIiwidGhlbiIsInByb21pc2VzIiwibWFwIiwicmVxdWVzdCIsInRyeVJvdXRlUmVxdWVzdCIsInJlc3BvbnNlIiwic3VjY2VzcyIsImVycm9yIiwiY29kZSIsIm1lc3NhZ2UiLCJhbGwiLCJyZXN1bHRzIiwiZmluZCIsInJlc3VsdCIsImFib3J0VHJhbnNhY3Rpb25hbFNlc3Npb24iLCJyZWplY3QiLCJjb21taXRUcmFuc2FjdGlvbmFsU2Vzc2lvbiIsImNhdGNoIiwiZXJyb3JJdGVtIiwibW9kdWxlIiwiZXhwb3J0cyJdLCJzb3VyY2VzIjpbIi4uL3NyYy9iYXRjaC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJjb25zdCBQYXJzZSA9IHJlcXVpcmUoJ3BhcnNlL25vZGUnKS5QYXJzZTtcbmNvbnN0IHBhdGggPSByZXF1aXJlKCdwYXRoJyk7XG4vLyBUaGVzZSBtZXRob2RzIGhhbmRsZSBiYXRjaCByZXF1ZXN0cy5cbmNvbnN0IGJhdGNoUGF0aCA9ICcvYmF0Y2gnO1xuXG4vLyBNb3VudHMgYSBiYXRjaC1oYW5kbGVyIG9udG8gYSBQcm9taXNlUm91dGVyLlxuZnVuY3Rpb24gbW91bnRPbnRvKHJvdXRlcikge1xuICByb3V0ZXIucm91dGUoJ1BPU1QnLCBiYXRjaFBhdGgsIHJlcSA9PiB7XG4gICAgcmV0dXJuIGhhbmRsZUJhdGNoKHJvdXRlciwgcmVxKTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHBhcnNlVVJMKHVybFN0cmluZykge1xuICB0cnkge1xuICAgIHJldHVybiBuZXcgVVJMKHVybFN0cmluZyk7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbn1cblxuZnVuY3Rpb24gbWFrZUJhdGNoUm91dGluZ1BhdGhGdW5jdGlvbihvcmlnaW5hbFVybCwgc2VydmVyVVJMLCBwdWJsaWNTZXJ2ZXJVUkwpIHtcbiAgc2VydmVyVVJMID0gc2VydmVyVVJMID8gcGFyc2VVUkwoc2VydmVyVVJMKSA6IHVuZGVmaW5lZDtcbiAgcHVibGljU2VydmVyVVJMID0gcHVibGljU2VydmVyVVJMID8gcGFyc2VVUkwocHVibGljU2VydmVyVVJMKSA6IHVuZGVmaW5lZDtcblxuICBjb25zdCBhcGlQcmVmaXhMZW5ndGggPSBvcmlnaW5hbFVybC5sZW5ndGggLSBiYXRjaFBhdGgubGVuZ3RoO1xuICBsZXQgYXBpUHJlZml4ID0gb3JpZ2luYWxVcmwuc2xpY2UoMCwgYXBpUHJlZml4TGVuZ3RoKTtcblxuICBjb25zdCBtYWtlUm91dGFibGVQYXRoID0gZnVuY3Rpb24gKHJlcXVlc3RQYXRoKSB7XG4gICAgLy8gVGhlIHJvdXRhYmxlUGF0aCBpcyB0aGUgcGF0aCBtaW51cyB0aGUgYXBpIHByZWZpeFxuICAgIGlmIChyZXF1ZXN0UGF0aC5zbGljZSgwLCBhcGlQcmVmaXgubGVuZ3RoKSAhPSBhcGlQcmVmaXgpIHtcbiAgICAgIHRocm93IG5ldyBQYXJzZS5FcnJvcihQYXJzZS5FcnJvci5JTlZBTElEX0pTT04sICdjYW5ub3Qgcm91dGUgYmF0Y2ggcGF0aCAnICsgcmVxdWVzdFBhdGgpO1xuICAgIH1cbiAgICByZXR1cm4gcGF0aC5wb3NpeC5qb2luKCcvJywgcmVxdWVzdFBhdGguc2xpY2UoYXBpUHJlZml4Lmxlbmd0aCkpO1xuICB9O1xuXG4gIGlmIChzZXJ2ZXJVUkwgJiYgcHVibGljU2VydmVyVVJMICYmIHNlcnZlclVSTC5wYXRobmFtZSAhPSBwdWJsaWNTZXJ2ZXJVUkwucGF0aG5hbWUpIHtcbiAgICBjb25zdCBsb2NhbFBhdGggPSBzZXJ2ZXJVUkwucGF0aG5hbWU7XG4gICAgY29uc3QgcHVibGljUGF0aCA9IHB1YmxpY1NlcnZlclVSTC5wYXRobmFtZTtcblxuICAgIC8vIE92ZXJyaWRlIHRoZSBhcGkgcHJlZml4XG4gICAgYXBpUHJlZml4ID0gbG9jYWxQYXRoO1xuICAgIHJldHVybiBmdW5jdGlvbiAocmVxdWVzdFBhdGgpIHtcbiAgICAgIC8vIEZpZ3VyZSBvdXQgd2hpY2ggc2VydmVyIHVybCB3YXMgdXNlZCBieSBmaWd1cmluZyBvdXQgd2hpY2hcbiAgICAgIC8vIHBhdGggbW9yZSBjbG9zZWx5IG1hdGNoZXMgcmVxdWVzdFBhdGhcbiAgICAgIGNvbnN0IHN0YXJ0c1dpdGhMb2NhbCA9IHJlcXVlc3RQYXRoLnN0YXJ0c1dpdGgobG9jYWxQYXRoKTtcbiAgICAgIGNvbnN0IHN0YXJ0c1dpdGhQdWJsaWMgPSByZXF1ZXN0UGF0aC5zdGFydHNXaXRoKHB1YmxpY1BhdGgpO1xuICAgICAgY29uc3QgcGF0aExlbmd0aFRvVXNlID1cbiAgICAgICAgc3RhcnRzV2l0aExvY2FsICYmIHN0YXJ0c1dpdGhQdWJsaWNcbiAgICAgICAgICA/IE1hdGgubWF4KGxvY2FsUGF0aC5sZW5ndGgsIHB1YmxpY1BhdGgubGVuZ3RoKVxuICAgICAgICAgIDogc3RhcnRzV2l0aExvY2FsXG4gICAgICAgICAgICA/IGxvY2FsUGF0aC5sZW5ndGhcbiAgICAgICAgICAgIDogcHVibGljUGF0aC5sZW5ndGg7XG5cbiAgICAgIGNvbnN0IG5ld1BhdGggPSBwYXRoLnBvc2l4LmpvaW4oJy8nLCBsb2NhbFBhdGgsICcvJywgcmVxdWVzdFBhdGguc2xpY2UocGF0aExlbmd0aFRvVXNlKSk7XG5cbiAgICAgIC8vIFVzZSB0aGUgbWV0aG9kIGZvciBsb2NhbCByb3V0aW5nXG4gICAgICByZXR1cm4gbWFrZVJvdXRhYmxlUGF0aChuZXdQYXRoKTtcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIG1ha2VSb3V0YWJsZVBhdGg7XG59XG5cbi8vIFJldHVybnMgYSBwcm9taXNlIGZvciBhIHtyZXNwb25zZX0gb2JqZWN0LlxuLy8gVE9ETzogcGFzcyBhbG9uZyBhdXRoIGNvcnJlY3RseVxuYXN5bmMgZnVuY3Rpb24gaGFuZGxlQmF0Y2gocm91dGVyLCByZXEpIHtcbiAgaWYgKCFBcnJheS5pc0FycmF5KHJlcS5ib2R5Py5yZXF1ZXN0cykpIHtcbiAgICB0aHJvdyBuZXcgUGFyc2UuRXJyb3IoUGFyc2UuRXJyb3IuSU5WQUxJRF9KU09OLCAncmVxdWVzdHMgbXVzdCBiZSBhbiBhcnJheScpO1xuICB9XG4gIGNvbnN0IGJhdGNoUmVxdWVzdExpbWl0ID0gcmVxLmNvbmZpZz8ucmVxdWVzdENvbXBsZXhpdHk/LmJhdGNoUmVxdWVzdExpbWl0ID8/IC0xO1xuICBpZiAoYmF0Y2hSZXF1ZXN0TGltaXQgPiAtMSAmJiAhcmVxLmF1dGg/LmlzTWFzdGVyICYmICFyZXEuYXV0aD8uaXNNYWludGVuYW5jZSAmJiByZXEuYm9keS5yZXF1ZXN0cy5sZW5ndGggPiBiYXRjaFJlcXVlc3RMaW1pdCkge1xuICAgIHRocm93IG5ldyBQYXJzZS5FcnJvcihcbiAgICAgIFBhcnNlLkVycm9yLklOVkFMSURfSlNPTixcbiAgICAgIGBCYXRjaCByZXF1ZXN0IGNvbnRhaW5zICR7cmVxLmJvZHkucmVxdWVzdHMubGVuZ3RofSBzdWItcmVxdWVzdHMsIHdoaWNoIGV4Y2VlZHMgdGhlIGxpbWl0IG9mICR7YmF0Y2hSZXF1ZXN0TGltaXR9LmBcbiAgICApO1xuICB9XG4gIGZvciAoY29uc3QgcmVzdFJlcXVlc3Qgb2YgcmVxLmJvZHkucmVxdWVzdHMpIHtcbiAgICBpZiAoIXJlc3RSZXF1ZXN0IHx8IHR5cGVvZiByZXN0UmVxdWVzdCAhPT0gJ29iamVjdCcgfHwgdHlwZW9mIHJlc3RSZXF1ZXN0LnBhdGggIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgUGFyc2UuRXJyb3IoUGFyc2UuRXJyb3IuSU5WQUxJRF9KU09OLCAnYmF0Y2ggcmVxdWVzdCBwYXRoIG11c3QgYmUgYSBzdHJpbmcnKTtcbiAgICB9XG4gIH1cblxuICAvLyBUaGUgYmF0Y2ggcGF0aHMgYXJlIGFsbCBmcm9tIHRoZSByb290IG9mIG91ciBkb21haW4uXG4gIC8vIFRoYXQgbWVhbnMgdGhleSBpbmNsdWRlIHRoZSBBUEkgcHJlZml4LCB0aGF0IHRoZSBBUEkgaXMgbW91bnRlZFxuICAvLyB0by4gSG93ZXZlciwgb3VyIHByb21pc2Ugcm91dGVyIGRvZXMgbm90IHJvdXRlIHRoZSBhcGkgcHJlZml4LiBTb1xuICAvLyB3ZSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIEFQSSBwcmVmaXgsIHNvIHRoYXQgd2UgY2FuIHN0cmlwIGl0XG4gIC8vIGZyb20gYWxsIHRoZSBzdWJyZXF1ZXN0cy5cbiAgaWYgKCFyZXEub3JpZ2luYWxVcmwuZW5kc1dpdGgoYmF0Y2hQYXRoKSkge1xuICAgIHRocm93ICdpbnRlcm5hbCByb3V0aW5nIHByb2JsZW0gLSBleHBlY3RlZCB1cmwgdG8gZW5kIHdpdGggYmF0Y2gnO1xuICB9XG5cbiAgY29uc3QgbWFrZVJvdXRhYmxlUGF0aCA9IG1ha2VCYXRjaFJvdXRpbmdQYXRoRnVuY3Rpb24oXG4gICAgcmVxLm9yaWdpbmFsVXJsLFxuICAgIHJlcS5jb25maWcuc2VydmVyVVJMLFxuICAgIHJlcS5jb25maWcucHVibGljU2VydmVyVVJMXG4gICk7XG5cbiAgLy8gRW5mb3JjZSByYXRlIGxpbWl0cyBmb3IgZWFjaCBiYXRjaCBzdWItcmVxdWVzdCBieSBpbnZva2luZyB0aGVcbiAgLy8gcmF0ZSBsaW1pdCBoYW5kbGVyLiBUaGlzIGVuc3VyZXMgc3ViLXJlcXVlc3RzIGNvbnN1bWUgdG9rZW5zIGZyb21cbiAgLy8gdGhlIHNhbWUgd2luZG93IHN0YXRlIGFzIGRpcmVjdCByZXF1ZXN0cy5cbiAgY29uc3QgcmF0ZUxpbWl0cyA9IHJlcS5jb25maWcucmF0ZUxpbWl0cyB8fCBbXTtcbiAgZm9yIChjb25zdCByZXN0UmVxdWVzdCBvZiByZXEuYm9keS5yZXF1ZXN0cykge1xuICAgIGNvbnN0IHJvdXRhYmxlUGF0aCA9IG1ha2VSb3V0YWJsZVBhdGgocmVzdFJlcXVlc3QucGF0aCk7XG4gICAgaWYgKChyZXN0UmVxdWVzdC5tZXRob2QgfHwgJ0dFVCcpLnRvVXBwZXJDYXNlKCkgPT09ICdQT1NUJyAmJiByb3V0YWJsZVBhdGggPT09IGJhdGNoUGF0aCkge1xuICAgICAgdGhyb3cgbmV3IFBhcnNlLkVycm9yKFBhcnNlLkVycm9yLklOVkFMSURfSlNPTiwgJ25lc3RlZCBiYXRjaCByZXF1ZXN0cyBhcmUgbm90IGFsbG93ZWQnKTtcbiAgICB9XG4gICAgZm9yIChjb25zdCBsaW1pdCBvZiByYXRlTGltaXRzKSB7XG4gICAgICBjb25zdCBwYXRoRXhwID0gbGltaXQucGF0aC5yZWdleHAgfHwgbGltaXQucGF0aDtcbiAgICAgIGlmICghcGF0aEV4cC50ZXN0KHJvdXRhYmxlUGF0aCkpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBjb25zdCBpbmZvID0geyAuLi5yZXEuaW5mbyB9O1xuICAgICAgaWYgKHJvdXRhYmxlUGF0aCA9PT0gJy9sb2dpbicpIHtcbiAgICAgICAgZGVsZXRlIGluZm8uc2Vzc2lvblRva2VuO1xuICAgICAgfVxuICAgICAgY29uc3QgZmFrZVJlcSA9IHtcbiAgICAgICAgaXA6IHJlcS5pcCB8fCByZXEuY29uZmlnPy5pcCB8fCAnMTI3LjAuMC4xJyxcbiAgICAgICAgbWV0aG9kOiAocmVzdFJlcXVlc3QubWV0aG9kIHx8ICdHRVQnKS50b1VwcGVyQ2FzZSgpLFxuICAgICAgICBfYmF0Y2hPcmlnaW5hbE1ldGhvZDogJ1BPU1QnLFxuICAgICAgICBjb25maWc6IHJlcS5jb25maWcsXG4gICAgICAgIGF1dGg6IHJlcS5hdXRoLFxuICAgICAgICBpbmZvLFxuICAgICAgfTtcbiAgICAgIGNvbnN0IGZha2VSZXMgPSB7IHNldEhlYWRlcigpIHt9IH07XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCBsaW1pdC5oYW5kbGVyKGZha2VSZXEsIGZha2VSZXMsIGVyciA9PiB7XG4gICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgdGhyb3cgbmV3IFBhcnNlLkVycm9yKFxuICAgICAgICAgIFBhcnNlLkVycm9yLkNPTk5FQ1RJT05fRkFJTEVELFxuICAgICAgICAgIGxpbWl0LmVycm9yUmVzcG9uc2VNZXNzYWdlIHx8ICdUb28gbWFueSByZXF1ZXN0cydcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBjb25zdCBiYXRjaCA9IHRyYW5zYWN0aW9uUmV0cmllcyA9PiB7XG4gICAgbGV0IGluaXRpYWxQcm9taXNlID0gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgaWYgKHJlcS5ib2R5Py50cmFuc2FjdGlvbiA9PT0gdHJ1ZSkge1xuICAgICAgaW5pdGlhbFByb21pc2UgPSByZXEuY29uZmlnLmRhdGFiYXNlLmNyZWF0ZVRyYW5zYWN0aW9uYWxTZXNzaW9uKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGluaXRpYWxQcm9taXNlLnRoZW4oKCkgPT4ge1xuICAgICAgY29uc3QgcHJvbWlzZXMgPSByZXEuYm9keT8ucmVxdWVzdHMubWFwKHJlc3RSZXF1ZXN0ID0+IHtcbiAgICAgICAgY29uc3Qgcm91dGFibGVQYXRoID0gbWFrZVJvdXRhYmxlUGF0aChyZXN0UmVxdWVzdC5wYXRoKTtcblxuICAgICAgICAvLyBDb25zdHJ1Y3QgYSByZXF1ZXN0IHRoYXQgd2UgY2FuIHNlbmQgdG8gYSBoYW5kbGVyXG4gICAgICAgIGNvbnN0IHJlcXVlc3QgPSB7XG4gICAgICAgICAgYm9keTogcmVzdFJlcXVlc3QuYm9keSxcbiAgICAgICAgICBjb25maWc6IHJlcS5jb25maWcsXG4gICAgICAgICAgYXV0aDogcmVxLmF1dGgsXG4gICAgICAgICAgaW5mbzogcmVxLmluZm8sXG4gICAgICAgIH07XG5cbiAgICAgICAgcmV0dXJuIHJvdXRlci50cnlSb3V0ZVJlcXVlc3QocmVzdFJlcXVlc3QubWV0aG9kLCByb3V0YWJsZVBhdGgsIHJlcXVlc3QpLnRoZW4oXG4gICAgICAgICAgcmVzcG9uc2UgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHsgc3VjY2VzczogcmVzcG9uc2UucmVzcG9uc2UgfTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIGVycm9yID0+IHtcbiAgICAgICAgICAgIHJldHVybiB7IGVycm9yOiB7IGNvZGU6IGVycm9yLmNvZGUsIGVycm9yOiBlcnJvci5tZXNzYWdlIH0gfTtcbiAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIFByb21pc2UuYWxsKHByb21pc2VzKVxuICAgICAgICAudGhlbihyZXN1bHRzID0+IHtcbiAgICAgICAgICBpZiAocmVxLmJvZHk/LnRyYW5zYWN0aW9uID09PSB0cnVlKSB7XG4gICAgICAgICAgICBpZiAocmVzdWx0cy5maW5kKHJlc3VsdCA9PiB0eXBlb2YgcmVzdWx0LmVycm9yID09PSAnb2JqZWN0JykpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHJlcS5jb25maWcuZGF0YWJhc2UuYWJvcnRUcmFuc2FjdGlvbmFsU2Vzc2lvbigpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdCh7IHJlc3BvbnNlOiByZXN1bHRzIH0pO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHJldHVybiByZXEuY29uZmlnLmRhdGFiYXNlLmNvbW1pdFRyYW5zYWN0aW9uYWxTZXNzaW9uKCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgcmVzcG9uc2U6IHJlc3VsdHMgfTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB7IHJlc3BvbnNlOiByZXN1bHRzIH07XG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2goZXJyb3IgPT4ge1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIGVycm9yICYmXG4gICAgICAgICAgICBlcnJvci5yZXNwb25zZSAmJlxuICAgICAgICAgICAgZXJyb3IucmVzcG9uc2UuZmluZChcbiAgICAgICAgICAgICAgZXJyb3JJdGVtID0+IHR5cGVvZiBlcnJvckl0ZW0uZXJyb3IgPT09ICdvYmplY3QnICYmIGVycm9ySXRlbS5lcnJvci5jb2RlID09PSAyNTFcbiAgICAgICAgICAgICkgJiZcbiAgICAgICAgICAgIHRyYW5zYWN0aW9uUmV0cmllcyA+IDBcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHJldHVybiBiYXRjaCh0cmFuc2FjdGlvblJldHJpZXMgLSAxKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuICB9O1xuICByZXR1cm4gYmF0Y2goNSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBtb3VudE9udG8sXG4gIG1ha2VCYXRjaFJvdXRpbmdQYXRoRnVuY3Rpb24sXG59O1xuIl0sIm1hcHBpbmdzIjoiOztBQUFBLE1BQU1BLEtBQUssR0FBR0MsT0FBTyxDQUFDLFlBQVksQ0FBQyxDQUFDRCxLQUFLO0FBQ3pDLE1BQU1FLElBQUksR0FBR0QsT0FBTyxDQUFDLE1BQU0sQ0FBQztBQUM1QjtBQUNBLE1BQU1FLFNBQVMsR0FBRyxRQUFROztBQUUxQjtBQUNBLFNBQVNDLFNBQVNBLENBQUNDLE1BQU0sRUFBRTtFQUN6QkEsTUFBTSxDQUFDQyxLQUFLLENBQUMsTUFBTSxFQUFFSCxTQUFTLEVBQUVJLEdBQUcsSUFBSTtJQUNyQyxPQUFPQyxXQUFXLENBQUNILE1BQU0sRUFBRUUsR0FBRyxDQUFDO0VBQ2pDLENBQUMsQ0FBQztBQUNKO0FBRUEsU0FBU0UsUUFBUUEsQ0FBQ0MsU0FBUyxFQUFFO0VBQzNCLElBQUk7SUFDRixPQUFPLElBQUlDLEdBQUcsQ0FBQ0QsU0FBUyxDQUFDO0VBQzNCLENBQUMsQ0FBQyxNQUFNO0lBQ04sT0FBT0UsU0FBUztFQUNsQjtBQUNGO0FBRUEsU0FBU0MsNEJBQTRCQSxDQUFDQyxXQUFXLEVBQUVDLFNBQVMsRUFBRUMsZUFBZSxFQUFFO0VBQzdFRCxTQUFTLEdBQUdBLFNBQVMsR0FBR04sUUFBUSxDQUFDTSxTQUFTLENBQUMsR0FBR0gsU0FBUztFQUN2REksZUFBZSxHQUFHQSxlQUFlLEdB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QUFJO2NBQUVELEtBQUssRUFBRUEsS0FBSyxDQUFDRTtZQUFRO1VBQUUsQ0FBQztRQUM5RCxDQUNGLENBQUM7TUFDSCxDQUFDLENBQUM7TUFFRixPQUFPZCxPQUFPLENBQUNlLEdBQUcsQ0FBQ1QsUUFBUSxDQUFDLENBQ3pCRCxJQUFJLENBQUNXLE9BQU8sSUFBSTtRQUNmLElBQUloRixHQUFHLENBQUNnQyxJQUFJLEVBQUVrQyxXQUFXLEtBQUssSUFBSSxFQUFFO1VBQ2xDLElBQUljLE9BQU8sQ0FBQ0MsSUFBSSxDQUFDQyxNQUFNLElBQUksT0FBT0EsTUFBTSxDQUFDTixLQUFLLEtBQUssUUFBUSxDQUFDLEVBQUU7WUFDNUQsT0FBTzVFLEdBQUcsQ0FBQ21DLE1BQU0sQ0FBQ2dDLFFBQVEsQ0FBQ2dCLHlCQUF5QixDQUFDLENBQUMsQ0FBQ2QsSUFBSSxDQUFDLE1BQU07Y0FDaEUsT0FBT0wsT0FBTyxDQUFDb0IsTUFBTSxDQUFDO2dCQUFFVixRQUFRLEVBQUVNO2NBQVEsQ0FBQyxDQUFDO1lBQzlDLENBQUMsQ0FBQztVQUNKLENBQUMsTUFBTTtZQUNMLE9BQU9oRixHQUFHLENBQUNtQyxNQUFNLENBQUNnQyxRQUFRLENBQUNrQiwwQkFBMEIsQ0FBQyxDQUFDLENBQUNoQixJQUFJLENBQUMsTUFBTTtjQUNqRSxPQUFPO2dCQUFFSyxRQUFRLEVBQUVNO2NBQVEsQ0FBQztZQUM5QixDQUFDLENBQUM7VUFDSjtRQUNGLENBQUMsTUFBTTtVQUNMLE9BQU87WUFBRU4sUUFBUSxFQUFFTTtVQUFRLENBQUM7UUFDOUI7TUFDRixDQUFDLENBQUMsQ0FDRE0sS0FBSyxDQUFDVixLQUFLLElBQUk7UUFDZCxJQUNFQSxLQUFLLElBQ0xBLEtBQUssQ0FBQ0YsUUFBUSxJQUNkRSxLQUFLLENBQUNGLFFBQVEsQ0FBQ08sSUFBSSxDQUNqQk0sU0FBUyxJQUFJLE9BQU9BLFNBQVMsQ0FBQ1gsS0FBSyxLQUFLLFFBQVEsSUFBSVcsU0FBUyxDQUFDWCxLQUFLLENBQUNDLElBQUksS0FBSyxHQUMvRSxDQUFDLElBQ0RmLGtCQUFrQixHQUFHLENBQUMsRUFDdEI7VUFDQSxPQUFPRCxLQUFLLENBQUNDLGtCQUFrQixHQUFHLENBQUMsQ0FBQztRQUN0QztRQUNBLE1BQU1jLEtBQUs7TUFDYixDQUFDLENBQUM7SUFDTixDQUFDLENBQUM7RUFDSixDQUFDO0VBQ0QsT0FBT2YsS0FBSyxDQUFDLENBQUMsQ0FBQztBQUNqQjtBQUVBMkIsTUFBTSxDQUFDQyxPQUFPLEdBQUc7RUFDZjVGLFNBQVM7RUFDVFM7QUFDRixDQUFDIiwiaWdub3JlTGlzdCI6W119
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "parse-server",
|
|
3
|
-
"version": "9.7.
|
|
3
|
+
"version": "9.7.1-alpha.2",
|
|
4
4
|
"description": "An express module providing a Parse-compatible API server",
|
|
5
5
|
"main": "lib/index.js",
|
|
6
6
|
"repository": {
|
|
@@ -31,7 +31,7 @@
|
|
|
31
31
|
"commander": "14.0.3",
|
|
32
32
|
"cors": "2.8.6",
|
|
33
33
|
"express": "5.2.1",
|
|
34
|
-
"express-rate-limit": "8.3.
|
|
34
|
+
"express-rate-limit": "8.3.1",
|
|
35
35
|
"follow-redirects": "1.15.11",
|
|
36
36
|
"graphql": "16.13.2",
|
|
37
37
|
"graphql-list-fields": "2.0.4",
|
|
@@ -43,7 +43,7 @@
|
|
|
43
43
|
"ldapjs": "3.0.7",
|
|
44
44
|
"lodash": "4.17.23",
|
|
45
45
|
"lru-cache": "11.2.7",
|
|
46
|
-
"mime": "4.0
|
|
46
|
+
"mime": "4.1.0",
|
|
47
47
|
"mongodb": "7.1.0",
|
|
48
48
|
"mustache": "4.2.0",
|
|
49
49
|
"otpauth": "9.4.0",
|
|
@@ -57,7 +57,7 @@
|
|
|
57
57
|
"redis": "5.11.0",
|
|
58
58
|
"semver": "7.7.2",
|
|
59
59
|
"tv4": "1.3.0",
|
|
60
|
-
"uuid": "
|
|
60
|
+
"uuid": "13.0.0",
|
|
61
61
|
"winston": "3.19.0",
|
|
62
62
|
"winston-daily-rotate-file": "5.0.0",
|
|
63
63
|
"ws": "8.20.0"
|
|
@@ -70,7 +70,7 @@
|
|
|
70
70
|
"@babel/eslint-parser": "7.28.6",
|
|
71
71
|
"@babel/plugin-proposal-object-rest-spread": "7.20.7",
|
|
72
72
|
"@babel/plugin-transform-flow-strip-types": "7.27.1",
|
|
73
|
-
"@babel/preset-env": "7.
|
|
73
|
+
"@babel/preset-env": "7.29.2",
|
|
74
74
|
"@babel/preset-typescript": "7.27.1",
|
|
75
75
|
"@saithodev/semantic-release-backmerge": "4.0.1",
|
|
76
76
|
"@semantic-release/changelog": "6.0.3",
|
|
@@ -94,7 +94,7 @@
|
|
|
94
94
|
"jasmine-spec-reporter": "7.0.0",
|
|
95
95
|
"jsdoc": "4.0.4",
|
|
96
96
|
"jsdoc-babel": "0.5.0",
|
|
97
|
-
"lint-staged": "16.
|
|
97
|
+
"lint-staged": "16.4.0",
|
|
98
98
|
"m": "1.10.0",
|
|
99
99
|
"madge": "8.0.0",
|
|
100
100
|
"mock-files-adapter": "file:spec/dependencies/mock-files-adapter",
|
|
@@ -107,7 +107,7 @@
|
|
|
107
107
|
"semantic-release": "25.0.3",
|
|
108
108
|
"typescript": "5.9.3",
|
|
109
109
|
"typescript-eslint": "8.53.1",
|
|
110
|
-
"yaml": "2.8.
|
|
110
|
+
"yaml": "2.8.3"
|
|
111
111
|
},
|
|
112
112
|
"scripts": {
|
|
113
113
|
"ci:check": "node ./ci/ciCheck.js",
|