@ditojs/server 0.273.0 → 0.274.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/app/Application.js +10 -4
- package/lib/cli/console.js +4 -4
- package/lib/cli/db/createMigration.js +4 -4
- package/lib/cli/db/migrate.js +3 -3
- package/lib/cli/db/reset.js +3 -3
- package/lib/cli/db/rollback.js +3 -3
- package/lib/cli/db/seed.js +5 -5
- package/lib/cli/db/unlock.js +3 -3
- package/lib/cli/index.js +4 -4
- package/lib/controllers/Controller.js +4 -4
- package/lib/controllers/RelationController.js +3 -3
- package/lib/middleware/logRequests.js +4 -4
- package/package.json +9 -9
- package/src/app/Application.js +12 -6
- package/src/cli/console.js +3 -3
- package/src/cli/db/createMigration.js +3 -3
- package/src/cli/db/migrate.js +4 -4
- package/src/cli/db/reset.js +4 -4
- package/src/cli/db/rollback.js +4 -4
- package/src/cli/db/seed.js +6 -6
- package/src/cli/db/unlock.js +2 -2
- package/src/cli/index.js +3 -3
- package/src/controllers/Controller.js +8 -8
- package/src/controllers/RelationController.js +2 -2
- package/src/middleware/logRequests.js +9 -9
|
@@ -19,7 +19,7 @@ var _path = _interopRequireDefault(require("path"));
|
|
|
19
19
|
|
|
20
20
|
var _fsExtra = _interopRequireDefault(require("fs-extra"));
|
|
21
21
|
|
|
22
|
-
var
|
|
22
|
+
var _picocolors = _interopRequireDefault(require("picocolors"));
|
|
23
23
|
|
|
24
24
|
var _schema = require("../../schema");
|
|
25
25
|
|
|
@@ -82,7 +82,7 @@ async function createMigration(app, name, ...modelNames) {
|
|
|
82
82
|
const file = _path.default.join(migrationDir, filename);
|
|
83
83
|
|
|
84
84
|
if (await _fsExtra.default.exists(file)) {
|
|
85
|
-
console.info(
|
|
85
|
+
console.info(_picocolors.default.red(`Migration '${filename}' already exists.`));
|
|
86
86
|
return false;
|
|
87
87
|
} else {
|
|
88
88
|
await _fsExtra.default.writeFile(file, (0, _utils.deindent)`
|
|
@@ -94,7 +94,7 @@ async function createMigration(app, name, ...modelNames) {
|
|
|
94
94
|
${getCode(dropTables)}
|
|
95
95
|
}
|
|
96
96
|
`);
|
|
97
|
-
console.info(
|
|
97
|
+
console.info(_picocolors.default.cyan(`Migration '${filename}' successfully created.`));
|
|
98
98
|
return true;
|
|
99
99
|
}
|
|
100
100
|
}
|
|
@@ -234,4 +234,4 @@ function getTimestamp() {
|
|
|
234
234
|
const d = new Date();
|
|
235
235
|
return d.getFullYear().toString() + padDate(d.getMonth() + 1) + padDate(d.getDate()) + padDate(d.getHours()) + padDate(d.getMinutes()) + padDate(d.getSeconds());
|
|
236
236
|
}
|
|
237
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jbGkvZGIvY3JlYXRlTWlncmF0aW9uLmpzIl0sIm5hbWVzIjpbInR5cGVUb0tuZXgiLCJudW1iZXIiLCJvYmplY3QiLCJhcnJheSIsImRlZmF1bHRWYWx1ZXMiLCJtaWdyYXRpb25EaXIiLCJwYXRoIiwiam9pbiIsInByb2Nlc3MiLCJjd2QiLCJjcmVhdGVNaWdyYXRpb24iLCJhcHAiLCJuYW1lIiwibW9kZWxOYW1lcyIsIm1vZGVscyIsIm1hcCIsIm1vZGVsTmFtZSIsIm1vZGVsQ2xhc3MiLCJFcnJvciIsInRhYmxlcyIsImNvbGxlY3RNb2RlbFRhYmxlcyIsImNvbGxlY3RUaHJvdWdoVGFibGVzIiwiY3JlYXRlVGFibGVzIiwiZHJvcFRhYmxlcyIsInRhYmxlTmFtZSIsInN0YXRlbWVudHMiLCJwdXNoIiwidW5zaGlmdCIsImdldENvZGUiLCJsZW5ndGgiLCJmaWxlbmFtZSIsImdldFRpbWVzdGFtcCIsImZpbGUiLCJmcyIsImV4aXN0cyIsImNvbnNvbGUiLCJpbmZvIiwiY2hhbGsiLCJyZWQiLCJ3cml0ZUZpbGUiLCJjeWFuIiwibm9ybWFsaXplSWRlbnRpZmllciIsInByb3BlcnRpZXMiLCJyZWxhdGlvbnMiLCJkZWZpbml0aW9uIiwidW5pcXVlQ29tcG9zaXRlcyIsInByb3BlcnR5IiwiT2JqZWN0IiwiZW50cmllcyIsImNvbHVtbiIsImRlc2NyaXB0aW9uIiwidHlwZSIsInNwZWNpZmljVHlwZSIsInVuc2lnbmVkIiwiY29tcHV0ZWQiLCJudWxsYWJsZSIsInJlcXVpcmVkIiwicHJpbWFyeSIsImZvcmVpZ24iLCJ1bmlxdWUiLCJpbmRleCIsImRlZmF1bHQiLCJfZGVmYXVsdCIsImtuZXhUeXBlIiwicmVwbGFjZSIsInRyaW0iLCJjb21wb3NpdGVzIiwic3RhdGVtZW50IiwidW5kZWZpbmVkIiwidmFsdWUiLCJKU09OIiwic3RyaW5naWZ5IiwicmVsYXRpb24iLCJ2YWx1ZXMiLCJmcm9tIiwidG8iLCJvd25lciIsImZyb21DbGFzcyIsImZyb21Qcm9wZXJ0eSIsInNwbGl0IiwidG9DbGFzcyIsInRvUHJvcGVydHkiLCJmaWx0ZXIiLCJzdHIiLCJpbnZlcnNlIiwicmVsYXRpb25DbGFzcyIsImZyb21JZCIsInRvSWQiLCJwYWREYXRlIiwic2VnbWVudCIsInRvU3RyaW5nIiwicGFkU3RhcnQiLCJkIiwiRGF0ZSIsImdldEZ1bGxZZWFyIiwiZ2V0TW9udGgiLCJnZXREYXRlIiwiZ2V0SG91cnMiLCJnZXRNaW51dGVzIiwiZ2V0U2Vjb25kcyJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7OztBQUlBLE1BQU1BLFVBQVUsR0FBRztBQUNqQkMsRUFBQUEsTUFBTSxFQUFFLFFBRFM7QUFFakJDLEVBQUFBLE1BQU0sRUFBRSxNQUZTO0FBR2pCQyxFQUFBQSxLQUFLLEVBQUU7QUFIVSxDQUFuQjtBQU1BLE1BQU1DLGFBQWEsR0FBRztBQUNwQixXQUFVO0FBRFUsQ0FBdEI7O0FBSUEsTUFBTUMsWUFBWSxHQUFHQyxjQUFLQyxJQUFMLENBQVVDLE9BQU8sQ0FBQ0MsR0FBUixFQUFWLEVBQXlCLFlBQXpCLENBQXJCOztBQUVPLGVBQWVDLGVBQWYsQ0FBK0JDLEdBQS9CLEVBQW9DQyxJQUFwQyxFQUEwQyxHQUFHQyxVQUE3QyxFQUF5RDtBQUM5RCxRQUFNQyxNQUFNLEdBQUdELFVBQVUsQ0FBQ0UsR0FBWCxDQUFlQyxTQUFTLElBQUk7QUFDekMsVUFBTUMsVUFBVSxHQUFHTixHQUFHLENBQUNHLE1BQUosQ0FBV0UsU0FBWCxDQUFuQjs7QUFDQSxRQUFJLENBQUNDLFVBQUwsRUFBaUI7QUFDZixZQUFNLElBQUlDLEtBQUosQ0FBVywwQkFBeUJGLFNBQVUsa0JBQTlDLENBQU47QUFDRDs7QUFDRCxXQUFPQyxVQUFQO0FBQ0QsR0FOYyxDQUFmO0FBT0EsUUFBTUUsTUFBTSxHQUFHLEVBQWY7O0FBQ0EsT0FBSyxNQUFNRixVQUFYLElBQXlCSCxNQUF6QixFQUFpQztBQUMvQk0sSUFB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O0FBQ0Y7O0FBR0QsU0FBU1EsT0FBVCxDQUFpQkMsT0FBakIsRUFBMEI7QUFDeEIsU0FBT0EsT0FBTyxDQUFDQyxRQUFSLEdBQW1CQyxRQUFuQixDQUE0QixDQUE1QixFQUErQixHQUEvQixDQUFQO0FBQ0Q7O0FBSUQsU0FBUzVELFlBQVQsR0FBd0I7QUFDdEIsUUFBTTZELENBQUMsR0FBRyxJQUFJQyxJQUFKLEVBQVY7QUFDQSxTQUFPRCxDQUFDLENBQUNFLFdBQUYsR0FBZ0JKLFFBQWhCLEtBQ0xGLE9BQU8sQ0FBQ0ksQ0FBQyxDQUFDRyxRQUFGLEtBQWUsQ0FBaEIsQ0FERixHQUVMUCxPQUFPLENBQUNJLENBQUMsQ0FBQ0ksT0FBRixFQUFELENBRkYsR0FHTFIsT0FBTyxDQUFDSSxDQUFDLENBQUNLLFFBQUYsRUFBRCxDQUhGLEdBSUxULE9BQU8sQ0FBQ0ksQ0FBQyxDQUFDTSxVQUFGLEVBQUQsQ0FKRixHQUtMVixPQUFPLENBQUNJLENBQUMsQ0FBQ08sVUFBRixFQUFELENBTFQ7QUFNRCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBwYXRoIGZyb20gJ3BhdGgnXG5pbXBvcnQgZnMgZnJvbSAnZnMtZXh0cmEnXG5pbXBvcnQgY2hhbGsgZnJvbSAnY2hhbGsnXG5pbXBvcnQgeyBnZXRSZWxhdGlvbkNsYXNzLCBpc1Rocm91Z2hSZWxhdGlvbkNsYXNzIH0gZnJvbSAnQC9zY2hlbWEnXG5pbXBvcnQge1xuICBpc09iamVjdCwgaXNBcnJheSwgaXNTdHJpbmcsIGRlaW5kZW50LCBjYXBpdGFsaXplXG59IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbmNvbnN0IHR5cGVUb0tuZXggPSB7XG4gIG51bWJlcjogJ2RvdWJsZScsXG4gIG9iamVjdDogJ2pzb24nLFxuICBhcnJheTogJ2pzb24nXG59XG5cbmNvbnN0IGRlZmF1bHRWYWx1ZXMgPSB7XG4gICdub3coKSc6IGBrbmV4LnJhdygnQ1VSUkVOVF9USU1FU1RBTVAnKWBcbn1cblxuY29uc3QgbWlncmF0aW9uRGlyID0gcGF0aC5qb2luKHByb2Nlc3MuY3dkKCksICdtaWdyYXRpb25zJylcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNyZWF0ZU1pZ3JhdGlvbihhcHAsIG5hbWUsIC4uLm1vZGVsTmFtZXMpIHtcbiAgY29uc3QgbW9kZWxzID0gbW9kZWxOYW1lcy5tYXAobW9kZWxOYW1lID0+IHtcbiAgICBjb25zdCBtb2RlbENsYXNzID0gYXBwLm1vZGVsc1ttb2RlbE5hbWVdXG4gICAgaWYgKCFtb2RlbENsYXNzKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYE1vZGVsIGNsYXNzIHdpdGggbmFtZSAnJHttb2RlbE5hbWV9JyBkb2VzIG5vdCBleGlzdGApXG4gICAgfVxuICAgIHJldHVybiBtb2RlbENsYXNzXG4gIH0pXG4gIGNvbnN0IHRhYmxlcyA9IFtdXG4gIGZvciAoY29uc3QgbW9kZWxDbGFzcyBvZiBtb2RlbHMpIHtcbiAgICBjb2xsZWN0TW9kZWxUYWJsZXMobW9kZWxDbGFzcywgYXBwLCB0YWJsZXMpXG4gIH1cbiAgZm9yIChjb25zdCBtb2RlbENsYXNzIG9mIG1vZGVscykge1xuICAgIGNvbGxlY3RUaHJvdWdoVGFibGVzKG1vZGVsQ2xhc3MsIGFwcCwgdGFibGVzKVxuICB9XG4gIGNvbnN0IGNyZWF0ZVRhYmxlcyA9IFtdXG4gIGNvbnN0IGRyb3BUYWJsZXMgPSBbXVxuICBmb3IgKGNvbnN0IHsgdGFibGVOYW1lLCBzdGF0ZW1lbnRzIH0gb2YgdGFibGVzKSB7XG4gICAgY3JlYXRlVGFibGVzLnB1c2goZGVpbmRlbnRgXG4gICAgICAuY3JlYXRlVGFibGUoJyR7dGFibGVOYW1lfScsIHRhYmxlID0+IHtcbiAgICAgICAgJHtzdGF0ZW1lbnRzLmpvaW4oJ1xcbicpfVxuICAgICAgfSlgKVxuICAgIGRyb3BUYWJsZXMudW5zaGlmdChkZWluZGVudGBcbiAgICAgIC5kcm9wVGFibGVJZkV4aXN0cygnJHt0YWJsZU5hbWV9JylgKVxuICB9XG4gIGNvbnN0IGdldENvZGUgPSB0YWJsZXMgPT4gdGFibGVzLmxlbmd0aCA+IDBcbiAgICA/IGRlaW5kZW50YFxuICAgICAgYXdhaXQga25leC5zY2hlbWFcbiAgICAgICAgJHt0YWJsZXMuam9pbignXFxuJyl9YFxuICAgIDogJydcbiAgY29uc3QgZmlsZW5hbWUgPSBgJHtnZXRUaW1lc3RhbXAoKX1fJHtuYW1lfS5qc2BcbiAgY29uc3QgZmlsZSA9IHBhdGguam9pbihtaWdyYXRpb25EaXIsIGZpbGVuYW1lKVxuICBpZiAoYXdhaXQgZnMuZXhpc3RzKGZpbGUpKSB7XG4gICAgLy8gVGhpcyBzaG91bGQgbmV2ZXIgaGFwcGVuLCBidXQgbGV0J3MgYmUgb24gdGhlIHNhZmUgc2lkZSBoZXJlOlxuICAgIGNvbnNvbGUuaW5mbyhjaGFsay5yZWQoYE1pZ3JhdGlvbiAnJHtmaWxlbmFtZX0nIGFscmVhZHkgZXhpc3RzLmApKVxuICAgIHJldHVybiBmYWxzZVxuICB9IGVsc2Uge1xuICAgIGF3YWl0IGZzLndyaXRlRmlsZShmaWxlLCBkZWluZGVudGBcbiAgICAgIGV4cG9ydCBhc3luYyBmdW5jdGlvbiB1cChrbmV4KSB7XG4gICAgICAgICR7Z2V0Q29kZShjcmVhdGVUYWJsZXMpfVxuICAgICAgfVxuXG4gICAgICBleHBvcnQgYXN5bmMgZnVuY3Rpb24gZG93bihrbmV4KSB7XG4gICAgICAgICR7Z2V0Q29kZShkcm9wVGFibGVzKX1cbiAgICAgIH1cbiAgICBgKVxuICAgIGNvbnNvbGUuaW5mbyhjaGFsay5jeWFuKGBNaWdyYXRpb24gJyR7ZmlsZW5hbWV9JyBzdWNjZXNzZnVsbHkgY3JlYXRlZC5gKSlcbiAgICByZXR1cm4gdHJ1ZVxuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGNvbGxlY3RNb2RlbFRhYmxlcyhtb2RlbENsYXNzLCBhcHAsIHRhYmxlcykge1xuICBjb25zdCB0YWJsZU5hbWUgPSBhcHAubm9ybWFsaXplSWRlbnRpZmllcihtb2RlbENsYXNzLnRhYmxlTmFtZSlcbiAgY29uc3QgeyBwcm9wZXJ0aWVzLCByZWxhdGlvbnMgfSA9IG1vZGVsQ2xhc3MuZGVmaW5pdGlvblxuICBjb25zdCBzdGF0ZW1lbnRzID0gW11cbiAgdGFibGVzLnB1c2goeyB0YWJsZU5hbWUsIHN0YXRlbWVudHMgfSlcbiAgY29uc3QgdW5pcXVlQ29tcG9zaXRlcyA9IHt9XG4gIGZvciAoY29uc3QgW25hbWUsIHByb3BlcnR5XSBvZiBPYmplY3QuZW50cmllcyhwcm9wZXJ0aWVzKSkge1xuICAgIGNvbnN0IGNvbHVtbiA9IGFwcC5ub3JtYWxpemVJZGVudGlmaWVyKG5hbWUpXG4gICAgbGV0IHtcbiAgICAgIGRlc2NyaXB0aW9uLCB0eXBlLCBzcGVjaWZpY1R5cGUsIHVuc2lnbmVkLCBjb21wdXRlZCwgbnVsbGFibGUsIHJlcXVpcmVkLFxuICAgICAgcHJpbWFyeSwgZm9yZWlnbiwgdW5pcXVlLCBpbmRleCxcbiAgICAgIGRlZmF1bHQ6IF9kZWZhdWx0XG4gICAgfSA9IHByb3BlcnR5XG4gICAgY29uc3Qga25leFR5cGUgPSB0eXBlVG9LbmV4W3R5cGVdIHx8IHR5cGVcbiAgICBpZiAoIWNvbXB1dGVkKSB7XG4gICAgICBpZiAoZGVzY3JpcHRpb24pIHtcbiAgICAgICAgc3RhdGVtZW50cy5wdXNoKGAvLyAke2Rlc2NyaXB0aW9uLnJlcGxhY2UoL1xcc3syLH0vZywgJyAnKS50cmltKCl9YClcbiAgICAgIH1cbiAgICAgIGlmIChpc1N0cmluZyh1bmlxdWUpKSB7XG4gICAgICAgIC8vIFRvIGRlY2xhcmUgY29tcG9zaXRlIGZvcmVpZ24ga2V5cyBhcyB1bmlxdWUsIHlvdSBjYW4gZ2l2ZSBlYWNoXG4gICAgICAgIC8vIHByb3BlcnR5IHRoZSBzYW1lIHN0cmluZyB2YWx1ZSBpbiB0aGUgYHVuaXF1ZWAga2V5d29yZHMsIGUuZy46XG4gICAgICAgIC8vIGB1bmlxdWU6ICdjdXN0b21lcklkX25hbWUnXG4gICAgICAgIGNvbnN0IGNvbXBvc2l0ZXMgPSB1bmlxdWVDb21wb3NpdGVzW3VuaXF1ZV0gfHxcbiAgICAgICAgICAodW5pcXVlQ29tcG9zaXRlc1t1bmlxdWVdID0gW10pXG4gICAgICAgIGNvbXBvc2l0ZXMucHVzaChjb2x1bW4pXG4gICAgICAgIHVuaXF1ZSA9IGZhbHNlXG4gICAgICB9XG4gICAgICBjb25zdCBzdGF0ZW1lbnQgPSBwcmltYXJ5XG4gICAgICAgID8gW2B0YWJsZS5pbmNyZW1lbnRzKCcke2NvbHVtbn0nKS5wcmltYXJ5KClgXVxuICAgICAgICA6IHNwZWNpZmljVHlwZVxuICAgICAgICAgID8gW2B0YWJsZS5zcGVjaWZpY1R5cGUoJyR7Y29sdW1ufScsICcke3NwZWNpZmljVHlwZX0nKWBdXG4gICAgICAgICAgOiBbYHRhYmxlLiR7a25leFR5cGV9KCcke2NvbHVtbn0nKWBdXG4gICAgICBzdGF0ZW1lbnQucHVzaChcbiAgICAgICAgdW5zaWduZWQgJiYgJ3Vuc2lnbmVkKCknLFxuICAgICAgICAhcHJpbWFyeSAmJiByZXF1aXJlZCAmJiAnbm90TnVsbGFibGUoKScsXG4gICAgICAgIG51bGxhYmxlICYmICdudWxsYWJsZSgpJyxcbiAgICAgICAgdW5pcXVlICYmICd1bmlxdWUoKScsXG4gICAgICAgIGluZGV4ICYmICdpbmRleCgpJ1xuICAgICAgKVxuICAgICAgaWYgKF9kZWZhdWx0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgbGV0IHZhbHVlID0gZGVmYXVsdFZhbHVlc1tfZGVmYXVsdF1cbiAgICAgICAgaWYgKCF2YWx1ZSkge1xuICAgICAgICAgIHZhbHVlID0gaXNBcnJheShfZGVmYXVsdCkgfHwgaXNPYmplY3QoX2RlZmF1bHQpXG4gICAgICAgICAgICA/IEpTT04uc3RyaW5naWZ5KF9kZWZhdWx0KVxuICAgICAgICAgICAgOiBfZGVmYXVsdFxuICAgICAgICAgIGlmIChpc1N0cmluZyh2YWx1ZSkpIHtcbiAgICAgICAgICAgIHZhbHVlID0gYCcke3ZhbHVlfSdgXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHN0YXRlbWVudC5wdXNoKGBkZWZhdWx0VG8oJHt2YWx1ZX0pYClcbiAgICAgIH1cbiAgICAgIGlmIChmb3JlaWduKSB7XG4gICAgICAgIGZvciAoY29uc3QgcmVsYXRpb24gb2YgT2JqZWN0LnZhbHVlcyhyZWxhdGlvbnMpKSB7XG4gICAgICAgICAgLy8gVE9ETzogU3VwcG9ydCBjb21wb3NpdGUga2V5cyBmb3IgZm9yZWlnbiByZWZlcmVuY2VzOlxuICAgICAgICAgIC8vIFVzZSBgYXNBcnJheShmcm9tKWAsIGBhc0FycmF5KHRvKWBcbiAgICAgICAgICBjb25zdCB7IGZyb20sIHRvLCBvd25lciB9ID0gcmVsYXRpb25cbiAgICAgICAgICBjb25zdCBbZnJvbUNsYXNzLCBmcm9tUHJvcGVydHldID0gZnJvbT8uc3BsaXQoJy4nKSB8fCBbXVxuICAgICAgICAgIGlmIChmcm9tUHJvcGVydHkgPT09IG5hbWUpIHtcbiAgICAgICAgICAgIGlmIChmcm9tQ2xhc3MgIT09IG1vZGVsQ2xhc3MubmFtZSkge1xuICAgICAgICAgICAgICB0aHJvdyBFcnJvcihgSW52YWxpZCByZWxhdGlvbiBkZWNsYXJhdGlvbjogJHtyZWxhdGlvbn1gKVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgW3RvQ2xhc3MsIHRvUHJvcGVydHldID0gdG8/LnNwbGl0KCcuJykgfHwgW11cbiAgICAgICAgICAgIHN0YXRlbWVudC5wdXNoKFxuICAgICAgICAgICAgICAnXFxuJyxcbiAgICAgICAgICAgICAgYHJlZmVyZW5jZXMoJyR7YXBwLm5vcm1hbGl6ZUlkZW50aWZpZXIodG9Qcm9wZXJ0eSl9JylgLFxuICAgICAgICAgICAgICBgaW5UYWJsZSgnJHthcHAubm9ybWFsaXplSWRlbnRpZmllcih0b0NsYXNzKX0nKWAsXG4gICAgICAgICAgICAgIC8vIE9ubHkgcmVsYXRpb25zIHRoYXQgYXJlbid0IG93bmVycyBvZiB0aGVpciBkYXRhIHNob3VsZCBjYXNjYWRlXG4gICAgICAgICAgICAgIC8vIG9uIGRlbGV0ZS5cbiAgICAgICAgICAgICAgLy8gVE9ETzogRmluZCB0aGUgcmV2ZXJzZSByZWxhdGlvbiBvZiB0aGlzIGluIHRoZSBvdGhlciBjbGFzcyBhbmRcbiAgICAgICAgICAgICAgLy8gb25seSBhZGQgYG9uRGVsZXRlKCdDQVNDQURFJylgIGlmIHRoYXQgb25lJ3MgYW4gb3duZXIuXG4gICAgICAgICAgICAgICFvd25lciAmJiBgb25EZWxldGUoJ0NBU0NBREUnKWBcbiAgICAgICAgICAgIClcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHN0YXRlbWVudHMucHVzaChzdGF0ZW1lbnQuZmlsdGVyKHN0ciA9PiAhIXN0cikuam9pbignLicpXG4gICAgICAgIC5yZXBsYWNlKC9cXC5cXG5cXC4vZywgJ1xcbiAgLicpKVxuICAgIH1cbiAgfVxuICBmb3IgKGNvbnN0IGNvbXBvc2l0ZXMgb2YgT2JqZWN0LnZhbHVlcyh1bmlxdWVDb21wb3NpdGVzKSkge1xuICAgIHN0YXRlbWVudHMucHVzaChgdGFibGUudW5pcXVlKFske1xuICAgICAgY29tcG9zaXRlcy5tYXAoY29sdW1uID0+IGAnJHtjb2x1bW59J2ApLmpvaW4oJywgJylcbiAgICB9XSlgKVxuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGNvbGxlY3RUaHJvdWdoVGFibGVzKG1vZGVsQ2xhc3MsIGFwcCwgdGFibGVzKSB7XG4gIGNvbnN0IHsgcmVsYXRpb25zIH0gPSBtb2RlbENsYXNzLmRlZmluaXRpb25cbiAgZm9yIChjb25zdCByZWxhdGlvbiBvZiBPYmplY3QudmFsdWVzKHJlbGF0aW9ucykpIHtcbiAgICBjb25zdCB7IGZyb20sIHRvLCBpbnZlcnNlIH0gPSByZWxhdGlvblxuICAgIGNvbnN0IHJlbGF0aW9uQ2xhc3MgPSBnZXRSZWxhdGlvbkNsYXNzKHJlbGF0aW9uLnJlbGF0aW9uKVxuICAgIGlmIChpc1Rocm91Z2hSZWxhdGlvbkNsYXNzKHJlbGF0aW9uQ2xhc3MpICYmICFpbnZlcnNlKSB7XG4gICAgICAvLyBUT0RPOiBTdXBwb3J0IGNvbXBvc2l0ZSBrZXlzIGZvciBmb3JlaWduIHJlZmVyZW5jZXM6XG4gICAgICAvLyBVc2UgYGFzQXJyYXkoZnJvbSlgLCBgYXNBcnJheSh0bylgXG4gICAgICBjb25zdCBbZnJvbUNsYXNzLCBmcm9tUHJvcGVydHldID0gZnJvbT8uc3BsaXQoJy4nKSB8fCBbXVxuICAgICAgY29uc3QgW3RvQ2xhc3MsIHRvUHJvcGVydHldID0gdG8/LnNwbGl0KCcuJykgfHwgW11cbiAgICAgIGNvbnN0IHN0YXRlbWVudHMgPSBbXVxuICAgICAgLy8gU2VlIGNvbnZlcnRSZWxhdGlvbnMoKVxuICAgICAgY29uc3QgdGFibGVOYW1lID0gYXBwLm5vcm1hbGl6ZUlkZW50aWZpZXIoYCR7ZnJvbUNsYXNzfSR7dG9DbGFzc31gKVxuICAgICAgY29uc3QgZnJvbUlkID0gYXBwLm5vcm1hbGl6ZUlkZW50aWZpZXIoXG4gICAgICAgIGAke2Zyb21DbGFzc30ke2NhcGl0YWxpemUoZnJvbVByb3BlcnR5KX1gKVxuICAgICAgY29uc3QgdG9JZCA9IGFwcC5ub3JtYWxpemVJZGVudGlmaWVyKFxuICAgICAgICBgJHt0b0NsYXNzfSR7Y2FwaXRhbGl6ZSh0b1Byb3BlcnR5KX1gKVxuICAgICAgdGFibGVzLnB1c2goeyB0YWJsZU5hbWUsIHN0YXRlbWVudHMgfSlcbiAgICAgIHN0YXRlbWVudHMucHVzaChgdGFibGUuaW5jcmVtZW50cygnaWQnKS5wcmltYXJ5KClgKVxuICAgICAgc3RhdGVtZW50cy5wdXNoKGRlaW5kZW50YFxuICAgICAgICB0YWJsZS5pbnRlZ2VyKCcke2Zyb21JZH0nKS51bnNpZ25lZCgpLmluZGV4KClcbiAgICAgICAgICAucmVmZXJlbmNlcygnJHthcHAubm9ybWFsaXplSWRlbnRpZmllcihmcm9tUHJvcGVydHkpfScpXFxcXFxuICAgICAgICAgIC5pblRhYmxlKCcke2FwcC5ub3JtYWxpemVJZGVudGlmaWVyKGZyb21DbGFzcyl9JylcXFxcXG4gICAgICAgICAgLm9uRGVsZXRlKCdDQVNDQURFJylgKVxuICAgICAgc3RhdGVtZW50cy5wdXNoKGRlaW5kZW50YFxuICAgICAgICB0YWJsZS5pbnRlZ2VyKCcke3RvSWR9JykudW5zaWduZWQoKS5pbmRleCgpXG4gICAgICAgICAgLnJlZmVyZW5jZXMoJyR7YXBwLm5vcm1hbGl6ZUlkZW50aWZpZXIodG9Qcm9wZXJ0eSl9JylcXFxcXG4gICAgICAgICAgLmluVGFibGUoJyR7YXBwLm5vcm1hbGl6ZUlkZW50aWZpZXIodG9DbGFzcyl9JylcXFxcXG4gICAgICAgICAgLm9uRGVsZXRlKCdDQVNDQURFJylgKVxuICAgIH1cbiAgfVxufVxuXG4vLyBFbnN1cmUgdGhhdCB3ZSBoYXZlIDIgcGxhY2VzIGZvciBlYWNoIG9mIHRoZSBkYXRlIHNlZ21lbnRzLlxuZnVuY3Rpb24gcGFkRGF0ZShzZWdtZW50KSB7XG4gIHJldHVybiBzZWdtZW50LnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgJzAnKVxufVxuXG4vLyBHZXQgYSBkYXRlIG9iamVjdCBpbiB0aGUgY29ycmVjdCBmb3JtYXQsIHdpdGhvdXQgcmVxdWlyaW5nIGEgZnVsbCBvdXQgbGlicmFyeVxuLy8gbGlrZSBcIm1vbWVudC5qc1wiLlxuZnVuY3Rpb24gZ2V0VGltZXN0YW1wKCkge1xuICBjb25zdCBkID0gbmV3IERhdGUoKVxuICByZXR1cm4gZC5nZXRGdWxsWWVhcigpLnRvU3RyaW5nKCkgK1xuICAgIHBhZERhdGUoZC5nZXRNb250aCgpICsgMSkgK1xuICAgIHBhZERhdGUoZC5nZXREYXRlKCkpICtcbiAgICBwYWREYXRlKGQuZ2V0SG91cnMoKSkgK1xuICAgIHBhZERhdGUoZC5nZXRNaW51dGVzKCkpICtcbiAgICBwYWREYXRlKGQuZ2V0U2Vjb25kcygpKVxufVxuIl19
|
|
237
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jbGkvZGIvY3JlYXRlTWlncmF0aW9uLmpzIl0sIm5hbWVzIjpbInR5cGVUb0tuZXgiLCJudW1iZXIiLCJvYmplY3QiLCJhcnJheSIsImRlZmF1bHRWYWx1ZXMiLCJtaWdyYXRpb25EaXIiLCJwYXRoIiwiam9pbiIsInByb2Nlc3MiLCJjd2QiLCJjcmVhdGVNaWdyYXRpb24iLCJhcHAiLCJuYW1lIiwibW9kZWxOYW1lcyIsIm1vZGVscyIsIm1hcCIsIm1vZGVsTmFtZSIsIm1vZGVsQ2xhc3MiLCJFcnJvciIsInRhYmxlcyIsImNvbGxlY3RNb2RlbFRhYmxlcyIsImNvbGxlY3RUaHJvdWdoVGFibGVzIiwiY3JlYXRlVGFibGVzIiwiZHJvcFRhYmxlcyIsInRhYmxlTmFtZSIsInN0YXRlbWVudHMiLCJwdXNoIiwidW5zaGlmdCIsImdldENvZGUiLCJsZW5ndGgiLCJmaWxlbmFtZSIsImdldFRpbWVzdGFtcCIsImZpbGUiLCJmcyIsImV4aXN0cyIsImNvbnNvbGUiLCJpbmZvIiwicGljbyIsInJlZCIsIndyaXRlRmlsZSIsImN5YW4iLCJub3JtYWxpemVJZGVudGlmaWVyIiwicHJvcGVydGllcyIsInJlbGF0aW9ucyIsImRlZmluaXRpb24iLCJ1bmlxdWVDb21wb3NpdGVzIiwicHJvcGVydHkiLCJPYmplY3QiLCJlbnRyaWVzIiwiY29sdW1uIiwiZGVzY3JpcHRpb24iLCJ0eXBlIiwic3BlY2lmaWNUeXBlIiwidW5zaWduZWQiLCJjb21wdXRlZCIsIm51bGxhYmxlIiwicmVxdWlyZWQiLCJwcmltYXJ5IiwiZm9yZWlnbiIsInVuaXF1ZSIsImluZGV4IiwiZGVmYXVsdCIsIl9kZWZhdWx0Iiwia25leFR5cGUiLCJyZXBsYWNlIiwidHJpbSIsImNvbXBvc2l0ZXMiLCJzdGF0ZW1lbnQiLCJ1bmRlZmluZWQiLCJ2YWx1ZSIsIkpTT04iLCJzdHJpbmdpZnkiLCJyZWxhdGlvbiIsInZhbHVlcyIsImZyb20iLCJ0byIsIm93bmVyIiwiZnJvbUNsYXNzIiwiZnJvbVByb3BlcnR5Iiwic3BsaXQiLCJ0b0NsYXNzIiwidG9Qcm9wZXJ0eSIsImZpbHRlciIsInN0ciIsImludmVyc2UiLCJyZWxhdGlvbkNsYXNzIiwiZnJvbUlkIiwidG9JZCIsInBhZERhdGUiLCJzZWdtZW50IiwidG9TdHJpbmciLCJwYWRTdGFydCIsImQiLCJEYXRlIiwiZ2V0RnVsbFllYXIiLCJnZXRNb250aCIsImdldERhdGUiLCJnZXRIb3VycyIsImdldE1pbnV0ZXMiLCJnZXRTZWNvbmRzIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOzs7O0FBSUEsTUFBTUEsVUFBVSxHQUFHO0FBQ2pCQyxFQUFBQSxNQUFNLEVBQUUsUUFEUztBQUVqQkMsRUFBQUEsTUFBTSxFQUFFLE1BRlM7QUFHakJDLEVBQUFBLEtBQUssRUFBRTtBQUhVLENBQW5CO0FBTUEsTUFBTUMsYUFBYSxHQUFHO0FBQ3BCLFdBQVU7QUFEVSxDQUF0Qjs7QUFJQSxNQUFNQyxZQUFZLEdBQUdDLGNBQUtDLElBQUwsQ0FBVUMsT0FBTyxDQUFDQyxHQUFSLEVBQVYsRUFBeUIsWUFBekIsQ0FBckI7O0FBRU8sZUFBZUMsZUFBZixDQUErQkMsR0FBL0IsRUFBb0NDLElBQXBDLEVBQTBDLEdBQUdDLFVBQTdDLEVBQXlEO0FBQzlELFFBQU1DLE1BQU0sR0FBR0QsVUFBVSxDQUFDRSxHQUFYLENBQWVDLFNBQVMsSUFBSTtBQUN6QyxVQUFNQyxVQUFVLEdBQUdOLEdBQUcsQ0FBQ0csTUFBSixDQUFXRSxTQUFYLENBQW5COztBQUNBLFFBQUksQ0FBQ0MsVUFBTCxFQUFpQjtBQUNmLFlBQU0sSUFBSUMsS0FBSixDQUFXLDBCQUF5QkYsU0FBVSxrQkFBOUMsQ0FBTjtBQUNEOztBQUNELFdBQU9DLFVBQVA7QUFDRCxHQU5jLENBQWY7QUFPQSxRQUFNRSxNQUFNLEdBQUcsRUFBZjs7QUFDQSxPQUFLLE1BQU1GLFVBQVgsSUFBeUJILE1BQXpCLEVBQWlDO0FBQy9CTSxJQUFB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RjtBQUNGOztBQUdELFNBQVNRLE9BQVQsQ0FBaUJDLE9BQWpCLEVBQTBCO0FBQ3hCLFNBQU9BLE9BQU8sQ0FBQ0MsUUFBUixHQUFtQkMsUUFBbkIsQ0FBNEIsQ0FBNUIsRUFBK0IsR0FBL0IsQ0FBUDtBQUNEOztBQUlELFNBQVM1RCxZQUFULEdBQXdCO0FBQ3RCLFFBQU02RCxDQUFDLEdBQUcsSUFBSUMsSUFBSixFQUFWO0FBQ0EsU0FBT0QsQ0FBQyxDQUFDRSxXQUFGLEdBQWdCSixRQUFoQixLQUNMRixPQUFPLENBQUNJLENBQUMsQ0FBQ0csUUFBRixLQUFlLENBQWhCLENBREYsR0FFTFAsT0FBTyxDQUFDSSxDQUFDLENBQUNJLE9BQUYsRUFBRCxDQUZGLEdBR0xSLE9BQU8sQ0FBQ0ksQ0FBQyxDQUFDSyxRQUFGLEVBQUQsQ0FIRixHQUlMVCxPQUFPLENBQUNJLENBQUMsQ0FBQ00sVUFBRixFQUFELENBSkYsR0FLTFYsT0FBTyxDQUFDSSxDQUFDLENBQUNPLFVBQUYsRUFBRCxDQUxUO0FBTUQiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgcGF0aCBmcm9tICdwYXRoJ1xuaW1wb3J0IGZzIGZyb20gJ2ZzLWV4dHJhJ1xuaW1wb3J0IHBpY28gZnJvbSAncGljb2NvbG9ycydcbmltcG9ydCB7IGdldFJlbGF0aW9uQ2xhc3MsIGlzVGhyb3VnaFJlbGF0aW9uQ2xhc3MgfSBmcm9tICdAL3NjaGVtYSdcbmltcG9ydCB7XG4gIGlzT2JqZWN0LCBpc0FycmF5LCBpc1N0cmluZywgZGVpbmRlbnQsIGNhcGl0YWxpemVcbn0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuY29uc3QgdHlwZVRvS25leCA9IHtcbiAgbnVtYmVyOiAnZG91YmxlJyxcbiAgb2JqZWN0OiAnanNvbicsXG4gIGFycmF5OiAnanNvbidcbn1cblxuY29uc3QgZGVmYXVsdFZhbHVlcyA9IHtcbiAgJ25vdygpJzogYGtuZXgucmF3KCdDVVJSRU5UX1RJTUVTVEFNUCcpYFxufVxuXG5jb25zdCBtaWdyYXRpb25EaXIgPSBwYXRoLmpvaW4ocHJvY2Vzcy5jd2QoKSwgJ21pZ3JhdGlvbnMnKVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY3JlYXRlTWlncmF0aW9uKGFwcCwgbmFtZSwgLi4ubW9kZWxOYW1lcykge1xuICBjb25zdCBtb2RlbHMgPSBtb2RlbE5hbWVzLm1hcChtb2RlbE5hbWUgPT4ge1xuICAgIGNvbnN0IG1vZGVsQ2xhc3MgPSBhcHAubW9kZWxzW21vZGVsTmFtZV1cbiAgICBpZiAoIW1vZGVsQ2xhc3MpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgTW9kZWwgY2xhc3Mgd2l0aCBuYW1lICcke21vZGVsTmFtZX0nIGRvZXMgbm90IGV4aXN0YClcbiAgICB9XG4gICAgcmV0dXJuIG1vZGVsQ2xhc3NcbiAgfSlcbiAgY29uc3QgdGFibGVzID0gW11cbiAgZm9yIChjb25zdCBtb2RlbENsYXNzIG9mIG1vZGVscykge1xuICAgIGNvbGxlY3RNb2RlbFRhYmxlcyhtb2RlbENsYXNzLCBhcHAsIHRhYmxlcylcbiAgfVxuICBmb3IgKGNvbnN0IG1vZGVsQ2xhc3Mgb2YgbW9kZWxzKSB7XG4gICAgY29sbGVjdFRocm91Z2hUYWJsZXMobW9kZWxDbGFzcywgYXBwLCB0YWJsZXMpXG4gIH1cbiAgY29uc3QgY3JlYXRlVGFibGVzID0gW11cbiAgY29uc3QgZHJvcFRhYmxlcyA9IFtdXG4gIGZvciAoY29uc3QgeyB0YWJsZU5hbWUsIHN0YXRlbWVudHMgfSBvZiB0YWJsZXMpIHtcbiAgICBjcmVhdGVUYWJsZXMucHVzaChkZWluZGVudGBcbiAgICAgIC5jcmVhdGVUYWJsZSgnJHt0YWJsZU5hbWV9JywgdGFibGUgPT4ge1xuICAgICAgICAke3N0YXRlbWVudHMuam9pbignXFxuJyl9XG4gICAgICB9KWApXG4gICAgZHJvcFRhYmxlcy51bnNoaWZ0KGRlaW5kZW50YFxuICAgICAgLmRyb3BUYWJsZUlmRXhpc3RzKCcke3RhYmxlTmFtZX0nKWApXG4gIH1cbiAgY29uc3QgZ2V0Q29kZSA9IHRhYmxlcyA9PiB0YWJsZXMubGVuZ3RoID4gMFxuICAgID8gZGVpbmRlbnRgXG4gICAgICBhd2FpdCBrbmV4LnNjaGVtYVxuICAgICAgICAke3RhYmxlcy5qb2luKCdcXG4nKX1gXG4gICAgOiAnJ1xuICBjb25zdCBmaWxlbmFtZSA9IGAke2dldFRpbWVzdGFtcCgpfV8ke25hbWV9LmpzYFxuICBjb25zdCBmaWxlID0gcGF0aC5qb2luKG1pZ3JhdGlvbkRpciwgZmlsZW5hbWUpXG4gIGlmIChhd2FpdCBmcy5leGlzdHMoZmlsZSkpIHtcbiAgICAvLyBUaGlzIHNob3VsZCBuZXZlciBoYXBwZW4sIGJ1dCBsZXQncyBiZSBvbiB0aGUgc2FmZSBzaWRlIGhlcmU6XG4gICAgY29uc29sZS5pbmZvKHBpY28ucmVkKGBNaWdyYXRpb24gJyR7ZmlsZW5hbWV9JyBhbHJlYWR5IGV4aXN0cy5gKSlcbiAgICByZXR1cm4gZmFsc2VcbiAgfSBlbHNlIHtcbiAgICBhd2FpdCBmcy53cml0ZUZpbGUoZmlsZSwgZGVpbmRlbnRgXG4gICAgICBleHBvcnQgYXN5bmMgZnVuY3Rpb24gdXAoa25leCkge1xuICAgICAgICAke2dldENvZGUoY3JlYXRlVGFibGVzKX1cbiAgICAgIH1cblxuICAgICAgZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGRvd24oa25leCkge1xuICAgICAgICAke2dldENvZGUoZHJvcFRhYmxlcyl9XG4gICAgICB9XG4gICAgYClcbiAgICBjb25zb2xlLmluZm8ocGljby5jeWFuKGBNaWdyYXRpb24gJyR7ZmlsZW5hbWV9JyBzdWNjZXNzZnVsbHkgY3JlYXRlZC5gKSlcbiAgICByZXR1cm4gdHJ1ZVxuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGNvbGxlY3RNb2RlbFRhYmxlcyhtb2RlbENsYXNzLCBhcHAsIHRhYmxlcykge1xuICBjb25zdCB0YWJsZU5hbWUgPSBhcHAubm9ybWFsaXplSWRlbnRpZmllcihtb2RlbENsYXNzLnRhYmxlTmFtZSlcbiAgY29uc3QgeyBwcm9wZXJ0aWVzLCByZWxhdGlvbnMgfSA9IG1vZGVsQ2xhc3MuZGVmaW5pdGlvblxuICBjb25zdCBzdGF0ZW1lbnRzID0gW11cbiAgdGFibGVzLnB1c2goeyB0YWJsZU5hbWUsIHN0YXRlbWVudHMgfSlcbiAgY29uc3QgdW5pcXVlQ29tcG9zaXRlcyA9IHt9XG4gIGZvciAoY29uc3QgW25hbWUsIHByb3BlcnR5XSBvZiBPYmplY3QuZW50cmllcyhwcm9wZXJ0aWVzKSkge1xuICAgIGNvbnN0IGNvbHVtbiA9IGFwcC5ub3JtYWxpemVJZGVudGlmaWVyKG5hbWUpXG4gICAgbGV0IHtcbiAgICAgIGRlc2NyaXB0aW9uLCB0eXBlLCBzcGVjaWZpY1R5cGUsIHVuc2lnbmVkLCBjb21wdXRlZCwgbnVsbGFibGUsIHJlcXVpcmVkLFxuICAgICAgcHJpbWFyeSwgZm9yZWlnbiwgdW5pcXVlLCBpbmRleCxcbiAgICAgIGRlZmF1bHQ6IF9kZWZhdWx0XG4gICAgfSA9IHByb3BlcnR5XG4gICAgY29uc3Qga25leFR5cGUgPSB0eXBlVG9LbmV4W3R5cGVdIHx8IHR5cGVcbiAgICBpZiAoIWNvbXB1dGVkKSB7XG4gICAgICBpZiAoZGVzY3JpcHRpb24pIHtcbiAgICAgICAgc3RhdGVtZW50cy5wdXNoKGAvLyAke2Rlc2NyaXB0aW9uLnJlcGxhY2UoL1xcc3syLH0vZywgJyAnKS50cmltKCl9YClcbiAgICAgIH1cbiAgICAgIGlmIChpc1N0cmluZyh1bmlxdWUpKSB7XG4gICAgICAgIC8vIFRvIGRlY2xhcmUgY29tcG9zaXRlIGZvcmVpZ24ga2V5cyBhcyB1bmlxdWUsIHlvdSBjYW4gZ2l2ZSBlYWNoXG4gICAgICAgIC8vIHByb3BlcnR5IHRoZSBzYW1lIHN0cmluZyB2YWx1ZSBpbiB0aGUgYHVuaXF1ZWAga2V5d29yZHMsIGUuZy46XG4gICAgICAgIC8vIGB1bmlxdWU6ICdjdXN0b21lcklkX25hbWUnXG4gICAgICAgIGNvbnN0IGNvbXBvc2l0ZXMgPSB1bmlxdWVDb21wb3NpdGVzW3VuaXF1ZV0gfHxcbiAgICAgICAgICAodW5pcXVlQ29tcG9zaXRlc1t1bmlxdWVdID0gW10pXG4gICAgICAgIGNvbXBvc2l0ZXMucHVzaChjb2x1bW4pXG4gICAgICAgIHVuaXF1ZSA9IGZhbHNlXG4gICAgICB9XG4gICAgICBjb25zdCBzdGF0ZW1lbnQgPSBwcmltYXJ5XG4gICAgICAgID8gW2B0YWJsZS5pbmNyZW1lbnRzKCcke2NvbHVtbn0nKS5wcmltYXJ5KClgXVxuICAgICAgICA6IHNwZWNpZmljVHlwZVxuICAgICAgICAgID8gW2B0YWJsZS5zcGVjaWZpY1R5cGUoJyR7Y29sdW1ufScsICcke3NwZWNpZmljVHlwZX0nKWBdXG4gICAgICAgICAgOiBbYHRhYmxlLiR7a25leFR5cGV9KCcke2NvbHVtbn0nKWBdXG4gICAgICBzdGF0ZW1lbnQucHVzaChcbiAgICAgICAgdW5zaWduZWQgJiYgJ3Vuc2lnbmVkKCknLFxuICAgICAgICAhcHJpbWFyeSAmJiByZXF1aXJlZCAmJiAnbm90TnVsbGFibGUoKScsXG4gICAgICAgIG51bGxhYmxlICYmICdudWxsYWJsZSgpJyxcbiAgICAgICAgdW5pcXVlICYmICd1bmlxdWUoKScsXG4gICAgICAgIGluZGV4ICYmICdpbmRleCgpJ1xuICAgICAgKVxuICAgICAgaWYgKF9kZWZhdWx0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgbGV0IHZhbHVlID0gZGVmYXVsdFZhbHVlc1tfZGVmYXVsdF1cbiAgICAgICAgaWYgKCF2YWx1ZSkge1xuICAgICAgICAgIHZhbHVlID0gaXNBcnJheShfZGVmYXVsdCkgfHwgaXNPYmplY3QoX2RlZmF1bHQpXG4gICAgICAgICAgICA/IEpTT04uc3RyaW5naWZ5KF9kZWZhdWx0KVxuICAgICAgICAgICAgOiBfZGVmYXVsdFxuICAgICAgICAgIGlmIChpc1N0cmluZyh2YWx1ZSkpIHtcbiAgICAgICAgICAgIHZhbHVlID0gYCcke3ZhbHVlfSdgXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHN0YXRlbWVudC5wdXNoKGBkZWZhdWx0VG8oJHt2YWx1ZX0pYClcbiAgICAgIH1cbiAgICAgIGlmIChmb3JlaWduKSB7XG4gICAgICAgIGZvciAoY29uc3QgcmVsYXRpb24gb2YgT2JqZWN0LnZhbHVlcyhyZWxhdGlvbnMpKSB7XG4gICAgICAgICAgLy8gVE9ETzogU3VwcG9ydCBjb21wb3NpdGUga2V5cyBmb3IgZm9yZWlnbiByZWZlcmVuY2VzOlxuICAgICAgICAgIC8vIFVzZSBgYXNBcnJheShmcm9tKWAsIGBhc0FycmF5KHRvKWBcbiAgICAgICAgICBjb25zdCB7IGZyb20sIHRvLCBvd25lciB9ID0gcmVsYXRpb25cbiAgICAgICAgICBjb25zdCBbZnJvbUNsYXNzLCBmcm9tUHJvcGVydHldID0gZnJvbT8uc3BsaXQoJy4nKSB8fCBbXVxuICAgICAgICAgIGlmIChmcm9tUHJvcGVydHkgPT09IG5hbWUpIHtcbiAgICAgICAgICAgIGlmIChmcm9tQ2xhc3MgIT09IG1vZGVsQ2xhc3MubmFtZSkge1xuICAgICAgICAgICAgICB0aHJvdyBFcnJvcihgSW52YWxpZCByZWxhdGlvbiBkZWNsYXJhdGlvbjogJHtyZWxhdGlvbn1gKVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgW3RvQ2xhc3MsIHRvUHJvcGVydHldID0gdG8/LnNwbGl0KCcuJykgfHwgW11cbiAgICAgICAgICAgIHN0YXRlbWVudC5wdXNoKFxuICAgICAgICAgICAgICAnXFxuJyxcbiAgICAgICAgICAgICAgYHJlZmVyZW5jZXMoJyR7YXBwLm5vcm1hbGl6ZUlkZW50aWZpZXIodG9Qcm9wZXJ0eSl9JylgLFxuICAgICAgICAgICAgICBgaW5UYWJsZSgnJHthcHAubm9ybWFsaXplSWRlbnRpZmllcih0b0NsYXNzKX0nKWAsXG4gICAgICAgICAgICAgIC8vIE9ubHkgcmVsYXRpb25zIHRoYXQgYXJlbid0IG93bmVycyBvZiB0aGVpciBkYXRhIHNob3VsZCBjYXNjYWRlXG4gICAgICAgICAgICAgIC8vIG9uIGRlbGV0ZS5cbiAgICAgICAgICAgICAgLy8gVE9ETzogRmluZCB0aGUgcmV2ZXJzZSByZWxhdGlvbiBvZiB0aGlzIGluIHRoZSBvdGhlciBjbGFzcyBhbmRcbiAgICAgICAgICAgICAgLy8gb25seSBhZGQgYG9uRGVsZXRlKCdDQVNDQURFJylgIGlmIHRoYXQgb25lJ3MgYW4gb3duZXIuXG4gICAgICAgICAgICAgICFvd25lciAmJiBgb25EZWxldGUoJ0NBU0NBREUnKWBcbiAgICAgICAgICAgIClcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHN0YXRlbWVudHMucHVzaChzdGF0ZW1lbnQuZmlsdGVyKHN0ciA9PiAhIXN0cikuam9pbignLicpXG4gICAgICAgIC5yZXBsYWNlKC9cXC5cXG5cXC4vZywgJ1xcbiAgLicpKVxuICAgIH1cbiAgfVxuICBmb3IgKGNvbnN0IGNvbXBvc2l0ZXMgb2YgT2JqZWN0LnZhbHVlcyh1bmlxdWVDb21wb3NpdGVzKSkge1xuICAgIHN0YXRlbWVudHMucHVzaChgdGFibGUudW5pcXVlKFske1xuICAgICAgY29tcG9zaXRlcy5tYXAoY29sdW1uID0+IGAnJHtjb2x1bW59J2ApLmpvaW4oJywgJylcbiAgICB9XSlgKVxuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGNvbGxlY3RUaHJvdWdoVGFibGVzKG1vZGVsQ2xhc3MsIGFwcCwgdGFibGVzKSB7XG4gIGNvbnN0IHsgcmVsYXRpb25zIH0gPSBtb2RlbENsYXNzLmRlZmluaXRpb25cbiAgZm9yIChjb25zdCByZWxhdGlvbiBvZiBPYmplY3QudmFsdWVzKHJlbGF0aW9ucykpIHtcbiAgICBjb25zdCB7IGZyb20sIHRvLCBpbnZlcnNlIH0gPSByZWxhdGlvblxuICAgIGNvbnN0IHJlbGF0aW9uQ2xhc3MgPSBnZXRSZWxhdGlvbkNsYXNzKHJlbGF0aW9uLnJlbGF0aW9uKVxuICAgIGlmIChpc1Rocm91Z2hSZWxhdGlvbkNsYXNzKHJlbGF0aW9uQ2xhc3MpICYmICFpbnZlcnNlKSB7XG4gICAgICAvLyBUT0RPOiBTdXBwb3J0IGNvbXBvc2l0ZSBrZXlzIGZvciBmb3JlaWduIHJlZmVyZW5jZXM6XG4gICAgICAvLyBVc2UgYGFzQXJyYXkoZnJvbSlgLCBgYXNBcnJheSh0bylgXG4gICAgICBjb25zdCBbZnJvbUNsYXNzLCBmcm9tUHJvcGVydHldID0gZnJvbT8uc3BsaXQoJy4nKSB8fCBbXVxuICAgICAgY29uc3QgW3RvQ2xhc3MsIHRvUHJvcGVydHldID0gdG8/LnNwbGl0KCcuJykgfHwgW11cbiAgICAgIGNvbnN0IHN0YXRlbWVudHMgPSBbXVxuICAgICAgLy8gU2VlIGNvbnZlcnRSZWxhdGlvbnMoKVxuICAgICAgY29uc3QgdGFibGVOYW1lID0gYXBwLm5vcm1hbGl6ZUlkZW50aWZpZXIoYCR7ZnJvbUNsYXNzfSR7dG9DbGFzc31gKVxuICAgICAgY29uc3QgZnJvbUlkID0gYXBwLm5vcm1hbGl6ZUlkZW50aWZpZXIoXG4gICAgICAgIGAke2Zyb21DbGFzc30ke2NhcGl0YWxpemUoZnJvbVByb3BlcnR5KX1gKVxuICAgICAgY29uc3QgdG9JZCA9IGFwcC5ub3JtYWxpemVJZGVudGlmaWVyKFxuICAgICAgICBgJHt0b0NsYXNzfSR7Y2FwaXRhbGl6ZSh0b1Byb3BlcnR5KX1gKVxuICAgICAgdGFibGVzLnB1c2goeyB0YWJsZU5hbWUsIHN0YXRlbWVudHMgfSlcbiAgICAgIHN0YXRlbWVudHMucHVzaChgdGFibGUuaW5jcmVtZW50cygnaWQnKS5wcmltYXJ5KClgKVxuICAgICAgc3RhdGVtZW50cy5wdXNoKGRlaW5kZW50YFxuICAgICAgICB0YWJsZS5pbnRlZ2VyKCcke2Zyb21JZH0nKS51bnNpZ25lZCgpLmluZGV4KClcbiAgICAgICAgICAucmVmZXJlbmNlcygnJHthcHAubm9ybWFsaXplSWRlbnRpZmllcihmcm9tUHJvcGVydHkpfScpXFxcXFxuICAgICAgICAgIC5pblRhYmxlKCcke2FwcC5ub3JtYWxpemVJZGVudGlmaWVyKGZyb21DbGFzcyl9JylcXFxcXG4gICAgICAgICAgLm9uRGVsZXRlKCdDQVNDQURFJylgKVxuICAgICAgc3RhdGVtZW50cy5wdXNoKGRlaW5kZW50YFxuICAgICAgICB0YWJsZS5pbnRlZ2VyKCcke3RvSWR9JykudW5zaWduZWQoKS5pbmRleCgpXG4gICAgICAgICAgLnJlZmVyZW5jZXMoJyR7YXBwLm5vcm1hbGl6ZUlkZW50aWZpZXIodG9Qcm9wZXJ0eSl9JylcXFxcXG4gICAgICAgICAgLmluVGFibGUoJyR7YXBwLm5vcm1hbGl6ZUlkZW50aWZpZXIodG9DbGFzcyl9JylcXFxcXG4gICAgICAgICAgLm9uRGVsZXRlKCdDQVNDQURFJylgKVxuICAgIH1cbiAgfVxufVxuXG4vLyBFbnN1cmUgdGhhdCB3ZSBoYXZlIDIgcGxhY2VzIGZvciBlYWNoIG9mIHRoZSBkYXRlIHNlZ21lbnRzLlxuZnVuY3Rpb24gcGFkRGF0ZShzZWdtZW50KSB7XG4gIHJldHVybiBzZWdtZW50LnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgJzAnKVxufVxuXG4vLyBHZXQgYSBkYXRlIG9iamVjdCBpbiB0aGUgY29ycmVjdCBmb3JtYXQsIHdpdGhvdXQgcmVxdWlyaW5nIGEgZnVsbCBvdXQgbGlicmFyeVxuLy8gbGlrZSBcIm1vbWVudC5qc1wiLlxuZnVuY3Rpb24gZ2V0VGltZXN0YW1wKCkge1xuICBjb25zdCBkID0gbmV3IERhdGUoKVxuICByZXR1cm4gZC5nZXRGdWxsWWVhcigpLnRvU3RyaW5nKCkgK1xuICAgIHBhZERhdGUoZC5nZXRNb250aCgpICsgMSkgK1xuICAgIHBhZERhdGUoZC5nZXREYXRlKCkpICtcbiAgICBwYWREYXRlKGQuZ2V0SG91cnMoKSkgK1xuICAgIHBhZERhdGUoZC5nZXRNaW51dGVzKCkpICtcbiAgICBwYWREYXRlKGQuZ2V0U2Vjb25kcygpKVxufVxuIl19
|
package/lib/cli/db/migrate.js
CHANGED
|
@@ -3,13 +3,13 @@
|
|
|
3
3
|
exports.__esModule = true;
|
|
4
4
|
exports.migrate = migrate;
|
|
5
5
|
|
|
6
|
-
var
|
|
6
|
+
var _picocolors = _interopRequireDefault(require("picocolors"));
|
|
7
7
|
|
|
8
8
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
9
9
|
|
|
10
10
|
async function migrate(knex) {
|
|
11
11
|
const [batch, log] = await knex.migrate.latest();
|
|
12
|
-
console.info(log.length === 0 ?
|
|
12
|
+
console.info(log.length === 0 ? _picocolors.default.cyan('Already up to date') : _picocolors.default.green(`Batch ${batch} run: ${log.length} migrations\n`) + _picocolors.default.cyan(log.join('\n')));
|
|
13
13
|
return true;
|
|
14
14
|
}
|
|
15
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
15
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jbGkvZGIvbWlncmF0ZS5qcyJdLCJuYW1lcyI6WyJtaWdyYXRlIiwia25leCIsImJhdGNoIiwibG9nIiwibGF0ZXN0IiwiY29uc29sZSIsImluZm8iLCJsZW5ndGgiLCJwaWNvIiwiY3lhbiIsImdyZWVuIiwiam9pbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQTs7OztBQUVPLGVBQWVBLE9BQWYsQ0FBdUJDLElBQXZCLEVBQTZCO0FBQ2xDLFFBQU0sQ0FBQ0MsS0FBRCxFQUFRQyxHQUFSLElBQWUsTUFBTUYsSUFBSSxDQUFDRCxPQUFMLENBQWFJLE1BQWIsRUFBM0I7QUFDQUMsRUFBQUEsT0FBTyxDQUFDQyxJQUFSLENBQWFILEdBQUcsQ0FBQ0ksTUFBSixLQUFlLENBQWYsR0FDVEMsb0JBQUtDLElBQUwsQ0FBVSxvQkFBVixDQURTLEdBRVRELG9CQUFLRSxLQUFMLENBQVksU0FBUVIsS0FBTSxTQUFRQyxHQUFHLENBQUNJLE1BQU8sZUFBN0MsSUFDQUMsb0JBQUtDLElBQUwsQ0FBVU4sR0FBRyxDQUFDUSxJQUFKLENBQVMsSUFBVCxDQUFWLENBSEo7QUFJQSxTQUFPLElBQVA7QUFDRCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBwaWNvIGZyb20gJ3BpY29jb2xvcnMnXG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBtaWdyYXRlKGtuZXgpIHtcbiAgY29uc3QgW2JhdGNoLCBsb2ddID0gYXdhaXQga25leC5taWdyYXRlLmxhdGVzdCgpXG4gIGNvbnNvbGUuaW5mbyhsb2cubGVuZ3RoID09PSAwXG4gICAgPyBwaWNvLmN5YW4oJ0FscmVhZHkgdXAgdG8gZGF0ZScpXG4gICAgOiBwaWNvLmdyZWVuKGBCYXRjaCAke2JhdGNofSBydW46ICR7bG9nLmxlbmd0aH0gbWlncmF0aW9uc1xcbmApICtcbiAgICAgIHBpY28uY3lhbihsb2cuam9pbignXFxuJykpKVxuICByZXR1cm4gdHJ1ZVxufVxuIl19
|
package/lib/cli/db/reset.js
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
exports.__esModule = true;
|
|
4
4
|
exports.reset = reset;
|
|
5
5
|
|
|
6
|
-
var
|
|
6
|
+
var _picocolors = _interopRequireDefault(require("picocolors"));
|
|
7
7
|
|
|
8
8
|
var _migrate = require("./migrate");
|
|
9
9
|
|
|
@@ -20,8 +20,8 @@ async function reset(knex) {
|
|
|
20
20
|
migrations.push(...log);
|
|
21
21
|
}
|
|
22
22
|
|
|
23
|
-
console.info(migrations.length === 0 ?
|
|
23
|
+
console.info(migrations.length === 0 ? _picocolors.default.cyan('Already at the base migration') : _picocolors.default.green(`${batches.length > 1 ? 'Batches' : 'Batch'} ${batches} ` + `rolled back: ${migrations.length} migrations\n`) + _picocolors.default.cyan(migrations.join('\n')));
|
|
24
24
|
await (0, _migrate.migrate)(knex);
|
|
25
25
|
return true;
|
|
26
26
|
}
|
|
27
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
27
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jbGkvZGIvcmVzZXQuanMiXSwibmFtZXMiOlsicmVzZXQiLCJrbmV4IiwiYmF0Y2hlcyIsIm1pZ3JhdGlvbnMiLCJiYXRjaCIsImxvZyIsIm1pZ3JhdGUiLCJyb2xsYmFjayIsImxlbmd0aCIsInB1c2giLCJjb25zb2xlIiwiaW5mbyIsInBpY28iLCJjeWFuIiwiZ3JlZW4iLCJqb2luIl0sIm1hcHBpbmdzIjoiOzs7OztBQUFBOztBQUNBOzs7O0FBRU8sZUFBZUEsS0FBZixDQUFxQkMsSUFBckIsRUFBMkI7QUFDaEMsUUFBTUMsT0FBTyxHQUFHLEVBQWhCO0FBQ0EsUUFBTUMsVUFBVSxHQUFHLEVBQW5COztBQUNBLFNBQU8sSUFBUCxFQUFhO0FBQ1gsVUFBTSxDQUFDQyxLQUFELEVBQVFDLEdBQVIsSUFBZSxNQUFNSixJQUFJLENBQUNLLE9BQUwsQ0FBYUMsUUFBYixFQUEzQjtBQUNBLFFBQUlGLEdBQUcsQ0FBQ0csTUFBSixLQUFlLENBQW5CLEVBQXNCO0FBQ3RCTixJQUFBQSxPQUFPLENBQUNPLElBQVIsQ0FBYUwsS0FBYjtBQUNBRCxJQUFBQSxVQUFVLENBQUNNLElBQVgsQ0FBZ0IsR0FBR0osR0FBbkI7QUFDRDs7QUFDREssRUFBQUEsT0FBTyxDQUFDQyxJQUFSLENBQWFSLFVBQVUsQ0FBQ0ssTUFBWCxLQUFzQixDQUF0QixHQUNUSSxvQkFBS0MsSUFBTCxDQUFVLCtCQUFWLENBRFMsR0FFVEQsb0JBQUtFLEtBQUwsQ0FBWSxHQUFFWixPQUFPLENBQUNNLE1BQVIsR0FBaUIsQ0FBakIsR0FBcUIsU0FBckIsR0FBaUMsT0FBUSxJQUFHTixPQUFRLEdBQXZELEdBQ1YsZ0JBQWVDLFVBQVUsQ0FBQ0ssTUFBTyxlQURsQyxJQUVBSSxvQkFBS0MsSUFBTCxDQUFVVixVQUFVLENBQUNZLElBQVgsQ0FBZ0IsSUFBaEIsQ0FBVixDQUpKO0FBS0EsUUFBTSxzQkFBUWQsSUFBUixDQUFOO0FBQ0EsU0FBTyxJQUFQO0FBQ0QiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgcGljbyBmcm9tICdwaWNvY29sb3JzJ1xuaW1wb3J0IHsgbWlncmF0ZSB9IGZyb20gJy4vbWlncmF0ZSdcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlc2V0KGtuZXgpIHtcbiAgY29uc3QgYmF0Y2hlcyA9IFtdXG4gIGNvbnN0IG1pZ3JhdGlvbnMgPSBbXVxuICB3aGlsZSAodHJ1ZSkge1xuICAgIGNvbnN0IFtiYXRjaCwgbG9nXSA9IGF3YWl0IGtuZXgubWlncmF0ZS5yb2xsYmFjaygpXG4gICAgaWYgKGxvZy5sZW5ndGggPT09IDApIGJyZWFrXG4gICAgYmF0Y2hlcy5wdXNoKGJhdGNoKVxuICAgIG1pZ3JhdGlvbnMucHVzaCguLi5sb2cpXG4gIH1cbiAgY29uc29sZS5pbmZvKG1pZ3JhdGlvbnMubGVuZ3RoID09PSAwXG4gICAgPyBwaWNvLmN5YW4oJ0FscmVhZHkgYXQgdGhlIGJhc2UgbWlncmF0aW9uJylcbiAgICA6IHBpY28uZ3JlZW4oYCR7YmF0Y2hlcy5sZW5ndGggPiAxID8gJ0JhdGNoZXMnIDogJ0JhdGNoJ30gJHtiYXRjaGVzfSBgICtcbiAgICAgIGByb2xsZWQgYmFjazogJHttaWdyYXRpb25zLmxlbmd0aH0gbWlncmF0aW9uc1xcbmApICtcbiAgICAgIHBpY28uY3lhbihtaWdyYXRpb25zLmpvaW4oJ1xcbicpKSlcbiAgYXdhaXQgbWlncmF0ZShrbmV4KVxuICByZXR1cm4gdHJ1ZVxufVxuIl19
|
package/lib/cli/db/rollback.js
CHANGED
|
@@ -3,13 +3,13 @@
|
|
|
3
3
|
exports.__esModule = true;
|
|
4
4
|
exports.rollback = rollback;
|
|
5
5
|
|
|
6
|
-
var
|
|
6
|
+
var _picocolors = _interopRequireDefault(require("picocolors"));
|
|
7
7
|
|
|
8
8
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
9
9
|
|
|
10
10
|
async function rollback(knex) {
|
|
11
11
|
const [batch, log] = await knex.migrate.rollback();
|
|
12
|
-
console.info(log.length === 0 ?
|
|
12
|
+
console.info(log.length === 0 ? _picocolors.default.cyan('Already at the base migration') : _picocolors.default.green(`Batch ${batch} rolled back: ${log.length} migrations\n`) + _picocolors.default.cyan(log.join('\n')));
|
|
13
13
|
return true;
|
|
14
14
|
}
|
|
15
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
15
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jbGkvZGIvcm9sbGJhY2suanMiXSwibmFtZXMiOlsicm9sbGJhY2siLCJrbmV4IiwiYmF0Y2giLCJsb2ciLCJtaWdyYXRlIiwiY29uc29sZSIsImluZm8iLCJsZW5ndGgiLCJwaWNvIiwiY3lhbiIsImdyZWVuIiwiam9pbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQTs7OztBQUVPLGVBQWVBLFFBQWYsQ0FBd0JDLElBQXhCLEVBQThCO0FBQ25DLFFBQU0sQ0FBQ0MsS0FBRCxFQUFRQyxHQUFSLElBQWUsTUFBTUYsSUFBSSxDQUFDRyxPQUFMLENBQWFKLFFBQWIsRUFBM0I7QUFDQUssRUFBQUEsT0FBTyxDQUFDQyxJQUFSLENBQWFILEdBQUcsQ0FBQ0ksTUFBSixLQUFlLENBQWYsR0FDVEMsb0JBQUtDLElBQUwsQ0FBVSwrQkFBVixDQURTLEdBRVRELG9CQUFLRSxLQUFMLENBQVksU0FBUVIsS0FBTSxpQkFBZ0JDLEdBQUcsQ0FBQ0ksTUFBTyxlQUFyRCxJQUNBQyxvQkFBS0MsSUFBTCxDQUFVTixHQUFHLENBQUNRLElBQUosQ0FBUyxJQUFULENBQVYsQ0FISjtBQUlBLFNBQU8sSUFBUDtBQUNEIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHBpY28gZnJvbSAncGljb2NvbG9ycydcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJvbGxiYWNrKGtuZXgpIHtcbiAgY29uc3QgW2JhdGNoLCBsb2ddID0gYXdhaXQga25leC5taWdyYXRlLnJvbGxiYWNrKClcbiAgY29uc29sZS5pbmZvKGxvZy5sZW5ndGggPT09IDBcbiAgICA/IHBpY28uY3lhbignQWxyZWFkeSBhdCB0aGUgYmFzZSBtaWdyYXRpb24nKVxuICAgIDogcGljby5ncmVlbihgQmF0Y2ggJHtiYXRjaH0gcm9sbGVkIGJhY2s6ICR7bG9nLmxlbmd0aH0gbWlncmF0aW9uc1xcbmApICtcbiAgICAgIHBpY28uY3lhbihsb2cuam9pbignXFxuJykpKVxuICByZXR1cm4gdHJ1ZVxufVxuIl19
|
package/lib/cli/db/seed.js
CHANGED
|
@@ -17,7 +17,7 @@ var _path = _interopRequireDefault(require("path"));
|
|
|
17
17
|
|
|
18
18
|
var _fsExtra = _interopRequireDefault(require("fs-extra"));
|
|
19
19
|
|
|
20
|
-
var
|
|
20
|
+
var _picocolors = _interopRequireDefault(require("picocolors"));
|
|
21
21
|
|
|
22
22
|
var _util = _interopRequireDefault(require("util"));
|
|
23
23
|
|
|
@@ -89,16 +89,16 @@ async function handleSeed(app, base, seed, modelClass) {
|
|
|
89
89
|
}
|
|
90
90
|
|
|
91
91
|
if ((0, _utils.isArray)(res)) {
|
|
92
|
-
console.info(
|
|
92
|
+
console.info(_picocolors.default.green(`${base}:`), _picocolors.default.cyan(`${res.length} seed records created.`));
|
|
93
93
|
} else {
|
|
94
|
-
console.info(
|
|
94
|
+
console.info(_picocolors.default.red(`${base}:`), _picocolors.default.cyan('No seed records created.'));
|
|
95
95
|
}
|
|
96
96
|
} catch (err) {
|
|
97
|
-
console.error(
|
|
97
|
+
console.error(_picocolors.default.red(`${base}:`), _util.default.inspect(err, {
|
|
98
98
|
colors: true,
|
|
99
99
|
depth: null,
|
|
100
100
|
maxArrayLength: null
|
|
101
101
|
}));
|
|
102
102
|
}
|
|
103
103
|
}
|
|
104
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
104
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jbGkvZGIvc2VlZC5qcyJdLCJuYW1lcyI6WyJzZWVkIiwiYXBwIiwic2VlZERpciIsInBhdGgiLCJqb2luIiwicHJvY2VzcyIsImN3ZCIsImZpbGVzIiwiZnMiLCJyZWFkZGlyIiwic2VlZHMiLCJtb2RlbEluZGljZXMiLCJPYmplY3QiLCJrZXlzIiwibW9kZWxzIiwicmVkdWNlIiwiaW5kaWNlcyIsIm5hbWUiLCJpbmRleCIsImZpbGUiLCJleHQiLCJiYXNlIiwicGFyc2UiLCJzdGFydHNXaXRoIiwiaW5jbHVkZXMiLCJvYmplY3QiLCJyZXNvbHZlIiwiZGVmYXVsdCIsIm1vZGVsQ2xhc3MiLCJwbHVyYWxpemUiLCJzaW5ndWxhciIsIkluZmluaXR5IiwicHVzaCIsInNvcnQiLCJlbnRyeTEiLCJlbnRyeTIiLCJoYW5kbGVTZWVkIiwicmVzIiwidHJ1bmNhdGUiLCJjYXNjYWRlIiwiaW5zZXJ0R3JhcGgiLCJjb25zb2xlIiwiaW5mbyIsInBpY28iLCJncmVlbiIsImN5YW4iLCJsZW5ndGgiLCJyZWQiLCJlcnIiLCJlcnJvciIsInV0aWwiLCJpbnNwZWN0IiwiY29sb3JzIiwiZGVwdGgiLCJtYXhBcnJheUxlbmd0aCJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7Ozs7Ozs7O0FBRU8sZUFBZUEsSUFBZixDQUFvQkMsR0FBcEIsRUFBeUI7QUFDOUIsUUFBTUMsT0FBTyxHQUFHQyxjQUFLQyxJQUFMLENBQVVDLE9BQU8sQ0FBQ0MsR0FBUixFQUFWLEVBQXlCLE9BQXpCLENBQWhCOztBQUNBLFFBQU1DLEtBQUssR0FBRyxNQUFNQyxpQkFBR0MsT0FBSCxDQUFXUCxPQUFYLENBQXBCO0FBQ0EsUUFBTVEsS0FBSyxHQUFHLEVBQWQ7QUFFQSxRQUFNQyxZQUFZLEdBQUdDLE1BQU0sQ0FBQ0MsSUFBUCxDQUFZWixHQUFHLENBQUNhLE1BQWhCLEVBQXdCQyxNQUF4QixDQUNuQixDQUFDQyxPQUFELEVBQVVDLElBQVYsRUFBZ0JDLEtBQWhCLEtBQTBCO0FBQ3hCRixJQUFBQSxPQUFPLENBQUNDLElBQUQsQ0FBUCxHQUFnQkMsS0FBaEI7QUFDQSxXQUFPRixPQUFQO0FBQ0QsR0FKa0IsRUFLbkIsRUFMbUIsQ0FBckI7O0FBUUEsT0FBSyxNQUFNRyxJQUFYLElBQW1CWixLQUFuQixFQUEwQjtBQUN4QixVQUFNO0FBQUVVLE1BQUFBLElBQUY7QUFBUUcsTUFBQUEsR0FBUjtBQUFhQyxNQUFBQTtBQUFiLFFBQXNCbEIsY0FBS21CLEtBQUwsQ0FBV0gsSUFBWCxDQUE1Qjs7QUFDQSxRQUFJLENBQUNGLElBQUksQ0FBQ00sVUFBTCxDQUFnQixHQUFoQixDQUFELElBQXlCLENBQUMsS0FBRCxFQUFRLE9BQVIsRUFBaUJDLFFBQWpCLENBQTBCSixHQUExQixDQUE3QixFQUE2RDtBQUMzRCxZQUFNSyxNQUFNLEdBQUcseUJBQWF0QixjQUFLdUIsT0FBTCxDQUFheEIsT0FBYixFQUFzQmlCLElBQXRCLENBQWIsa0RBQWY7QUFDQSxZQUFNbkIsSUFBSSxHQUFHeUIsTUFBTSxDQUFDRSxPQUFQLElBQWtCRixNQUEvQjtBQUdBLFlBQU1HLFVBQVUsR0FDZDNCLEdBQUcsQ0FBQ2EsTUFBSixDQUFXRyxJQUFYLEtBQ0FoQixHQUFHLENBQUNhLE1BQUosQ0FBVyxxQkFBU2UsbUJBQVVDLFFBQVYsQ0FBbUJiLElBQW5CLENBQVQsRUFBbUMsSUFBbkMsQ0FBWCxDQUZGO0FBR0EsWUFBTUMsS0FBSyxHQUFHVSxVQUFVLEdBQUdqQixZQUFZLENBQUNpQixVQUFVLENBQUNYLElBQVosQ0FBZixHQUFtQ2MsUUFBM0Q7QUFDQXJCLE1BQUFBLEtBQUssQ0FBQ3NCLElBQU4sQ0FBVztBQUNUWCxRQUFBQSxJQURTO0FBRVRyQixRQUFBQSxJQUZTO0FBR1Q0QixRQUFBQSxVQUhTO0FBSVRWLFFBQUFBO0FBSlMsT0FBWDtBQU1EO0FBQ0Y7O0FBR0RSLEVBQUFBLEtBQUssQ0FBQ3VCLElBQU4sQ0FBVyxDQUFDQyxNQUFELEVBQVNDLE1BQVQsS0FBb0JELE1BQU0sQ0FBQ2hCLEtBQVAsR0FBZWlCLE1BQU0sQ0FBQ2pCLEtBQXJEOztBQUNBLE9BQUssTUFBTTtBQUFFRyxJQUFBQSxJQUFGO0FBQVFyQixJQUFBQSxJQUFSO0FBQWM0QixJQUFBQTtBQUFkLEdBQVgsSUFBeUNsQixLQUF6QyxFQUFnRDtBQUM5QyxVQUFNMEIsVUFBVSxDQUFDbkMsR0FBRCxFQUFNb0IsSUFBTixFQUFZckIsSUFBWixFQUFrQjRCLFVBQWxCLENBQWhCO0FBQ0Q7O0FBQ0QsU0FBTyxJQUFQO0FBQ0Q7O0FBRUQsZUFBZVEsVUFBZixDQUEwQm5DLEdBQTFCLEVBQStCb0IsSUFBL0IsRUFBcUNyQixJQUFyQyxFQUEyQzRCLFVBQTNDLEVBQXVEO0FBQ3JELE1BQUk7QUFDRixRQUFJUyxHQUFKOztBQUNBLFFBQUksdUJBQVdyQyxJQUFYLENBQUosRUFBc0I7QUFDcEJxQyxNQUFBQSxHQUFHLEdBQUcsTUFBTXJDLElBQUksQ0FBQ0MsR0FBRyxDQUFDYSxNQUFMLENBQWhCO0FBQ0QsS0FGRCxNQUVPLElBQUljLFVBQUosRUFBZ0I7QUFDckIsWUFBTUEsVUFBVSxDQUFDVSxRQUFYLENBQW9CO0FBQUVDLFFBQUFBLE9BQU8sRUFBRTtBQUFYLE9BQXBCLENBQU47QUFDQUYsTUFBQUEsR0FBRyxHQUFHLE1BQU1ULFVBQVUsQ0FBQ1ksV0FBWCxDQUF1QnhDLElBQXZCLENBQVo7QUFDRDs7QUFDRCxRQUFJLG9CQUFRcUMsR0FBUixDQUFKLEVBQWtCO0FBQ2hCSSxNQUFBQSxPQUFPLENBQUNDLElBQVIsQ0FDRUMsb0JBQUtDLEtBQUwsQ0FBWSxHQUFFdkIsSUFBSyxHQUFuQixDQURGLEVBRUVzQixvQkFBS0UsSUFBTCxDQUFXLEdBQUVSLEdBQUcsQ0FBQ1MsTUFBTyx3QkFBeEIsQ0FGRjtBQUlELEtBTEQsTUFLTztBQUNMTCxNQUFBQSxPQUFPLENBQUNDLElBQVIsQ0FDRUMsb0JBQUtJLEdBQUwsQ0FBVSxHQUFFMUIsSUFBSyxHQUFqQixDQURGLEVBRUVzQixvQkFBS0UsSUFBTCxDQUFVLDBCQUFWLENBRkY7QUFJRDtBQUNGLEdBbkJELENBbUJFLE9BQU9HLEdBQVAsRUFBWTtBQUNaUCxJQUFBQSxPQUFPLENBQUNRLEtBQVIsQ0FDRU4sb0JBQUtJLEdBQUwsQ0FBVSxHQUFFMUIsSUFBSyxHQUFqQixDQURGLEVBRUU2QixjQUFLQyxPQUFMLENBQWFILEdBQWIsRUFBa0I7QUFDaEJJLE1BQUFBLE1BQU0sRUFBRSxJQURRO0FBRWhCQyxNQUFBQSxLQUFLLEVBQUUsSUFGUztBQUdoQkMsTUFBQUEsY0FBYyxFQUFFO0FBSEEsS0FBbEIsQ0FGRjtBQVFEO0FBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgcGF0aCBmcm9tICdwYXRoJ1xuaW1wb3J0IGZzIGZyb20gJ2ZzLWV4dHJhJ1xuaW1wb3J0IHBpY28gZnJvbSAncGljb2NvbG9ycydcbmltcG9ydCB1dGlsIGZyb20gJ3V0aWwnXG5pbXBvcnQgcGx1cmFsaXplIGZyb20gJ3BsdXJhbGl6ZSdcbmltcG9ydCB7IGlzRnVuY3Rpb24sIGlzQXJyYXksIGNhbWVsaXplIH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHNlZWQoYXBwKSB7XG4gIGNvbnN0IHNlZWREaXIgPSBwYXRoLmpvaW4ocHJvY2Vzcy5jd2QoKSwgJ3NlZWRzJylcbiAgY29uc3QgZmlsZXMgPSBhd2FpdCBmcy5yZWFkZGlyKHNlZWREaXIpXG4gIGNvbnN0IHNlZWRzID0gW11cbiAgLy8gQ3JlYXRlIGEgbG9va3VwIHRhYmxlIHdpdGggc29ydCBpbmRpY2VzIHBlciBtb2RlbCBuYW1lLlxuICBjb25zdCBtb2RlbEluZGljZXMgPSBPYmplY3Qua2V5cyhhcHAubW9kZWxzKS5yZWR1Y2UoXG4gICAgKGluZGljZXMsIG5hbWUsIGluZGV4KSA9PiB7XG4gICAgICBpbmRpY2VzW25hbWVdID0gaW5kZXhcbiAgICAgIHJldHVybiBpbmRpY2VzXG4gICAgfSxcbiAgICB7fVxuICApXG4gIC8vIENvbGxlY3QgYWxsIHNlZWQsIGFuZCBzZXBhcmF0ZSBiZXR3ZWVuIHNlZWQgZnVuY3Rpb25zIGFuZCBtb2RlbCBzZWUgZGF0YTpcbiAgZm9yIChjb25zdCBmaWxlIG9mIGZpbGVzKSB7XG4gICAgY29uc3QgeyBuYW1lLCBleHQsIGJhc2UgfSA9IHBhdGgucGFyc2UoZmlsZSlcbiAgICBpZiAoIW5hbWUuc3RhcnRzV2l0aCgnLicpICYmIFsnLmpzJywgJy5qc29uJ10uaW5jbHVkZXMoZXh0KSkge1xuICAgICAgY29uc3Qgb2JqZWN0ID0gYXdhaXQgaW1wb3J0KHBhdGgucmVzb2x2ZShzZWVkRGlyLCBmaWxlKSlcbiAgICAgIGNvbnN0IHNlZWQgPSBvYmplY3QuZGVmYXVsdCB8fCBvYmplY3RcbiAgICAgIC8vIFRyeSB0byBkZXRlcm1pbmUgdGhlIHJlbGF0ZWQgbW9kZWwgZnJvbSB0aGUgc2VlZCBuYW1lLCBhbmQgdXNlIGl0IGFsc29cbiAgICAgIC8vIHRvIGRldGVybWluZSBzZWVkIHNlcXVlbmNlIGJhc2VkIG9uIGl0cyBpbmRleCBpbiBgYXBwLm1vZGVsc2AuXG4gICAgICBjb25zdCBtb2RlbENsYXNzID1cbiAgICAgICAgYXBwLm1vZGVsc1tuYW1lXSB8fFxuICAgICAgICBhcHAubW9kZWxzW2NhbWVsaXplKHBsdXJhbGl6ZS5zaW5ndWxhcihuYW1lKSwgdHJ1ZSldXG4gICAgICBjb25zdCBpbmRleCA9IG1vZGVsQ2xhc3MgPyBtb2RlbEluZGljZXNbbW9kZWxDbGFzcy5uYW1lXSA6IEluZmluaXR5XG4gICAgICBzZWVkcy5wdXNoKHtcbiAgICAgICAgYmFzZSxcbiAgICAgICAgc2VlZCxcbiAgICAgICAgbW9kZWxDbGFzcyxcbiAgICAgICAgaW5kZXhcbiAgICAgIH0pXG4gICAgfVxuICB9XG4gIC8vIE5vdyBzb3J0IHRoZSBzZWVkIG1vZGVsIGRhdGEgYWNjb3JkaW5nIHRvIGBhcHAubW9kZWxzYCBzb3J0aW5nLFxuICAvLyBhcyBkZXRlcm1pbmVkIGJ5IGBBcHBsaWNhdGlvbi5zb3J0TW9kZWxzKClgOlxuICBzZWVkcy5zb3J0KChlbnRyeTEsIGVudHJ5MikgPT4gZW50cnkxLmluZGV4IC0gZW50cnkyLmluZGV4KVxuICBmb3IgKGNvbnN0IHsgYmFzZSwgc2VlZCwgbW9kZWxDbGFzcyB9IG9mIHNlZWRzKSB7XG4gICAgYXdhaXQgaGFuZGxlU2VlZChhcHAsIGJhc2UsIHNlZWQsIG1vZGVsQ2xhc3MpXG4gIH1cbiAgcmV0dXJuIHRydWVcbn1cblxuYXN5bmMgZnVuY3Rpb24gaGFuZGxlU2VlZChhcHAsIGJhc2UsIHNlZWQsIG1vZGVsQ2xhc3MpIHtcbiAgdHJ5IHtcbiAgICBsZXQgcmVzXG4gICAgaWYgKGlzRnVuY3Rpb24oc2VlZCkpIHtcbiAgICAgIHJlcyA9IGF3YWl0IHNlZWQoYXBwLm1vZGVscylcbiAgICB9IGVsc2UgaWYgKG1vZGVsQ2xhc3MpIHtcbiAgICAgIGF3YWl0IG1vZGVsQ2xhc3MudHJ1bmNhdGUoeyBjYXNjYWRlOiB0cnVlIH0pXG4gICAgICByZXMgPSBhd2FpdCBtb2RlbENsYXNzLmluc2VydEdyYXBoKHNlZWQpXG4gICAgfVxuICAgIGlmIChpc0FycmF5KHJlcykpIHtcbiAgICAgIGNvbnNvbGUuaW5mbyhcbiAgICAgICAgcGljby5ncmVlbihgJHtiYXNlfTpgKSxcbiAgICAgICAgcGljby5jeWFuKGAke3Jlcy5sZW5ndGh9IHNlZWQgcmVjb3JkcyBjcmVhdGVkLmApXG4gICAgICApXG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnNvbGUuaW5mbyhcbiAgICAgICAgcGljby5yZWQoYCR7YmFzZX06YCksXG4gICAgICAgIHBpY28uY3lhbignTm8gc2VlZCByZWNvcmRzIGNyZWF0ZWQuJylcbiAgICAgIClcbiAgICB9XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICBwaWNvLnJlZChgJHtiYXNlfTpgKSxcbiAgICAgIHV0aWwuaW5zcGVjdChlcnIsIHtcbiAgICAgICAgY29sb3JzOiB0cnVlLFxuICAgICAgICBkZXB0aDogbnVsbCxcbiAgICAgICAgbWF4QXJyYXlMZW5ndGg6IG51bGxcbiAgICAgIH0pXG4gICAgKVxuICB9XG59XG4iXX0=
|
package/lib/cli/db/unlock.js
CHANGED
|
@@ -3,13 +3,13 @@
|
|
|
3
3
|
exports.__esModule = true;
|
|
4
4
|
exports.unlock = unlock;
|
|
5
5
|
|
|
6
|
-
var
|
|
6
|
+
var _picocolors = _interopRequireDefault(require("picocolors"));
|
|
7
7
|
|
|
8
8
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
9
9
|
|
|
10
10
|
async function unlock(knex) {
|
|
11
11
|
await knex.migrate.forceFreeMigrationsLock();
|
|
12
|
-
console.info(
|
|
12
|
+
console.info(_picocolors.default.green(`Successfully unlocked the migrations lock table`));
|
|
13
13
|
return true;
|
|
14
14
|
}
|
|
15
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
15
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jbGkvZGIvdW5sb2NrLmpzIl0sIm5hbWVzIjpbInVubG9jayIsImtuZXgiLCJtaWdyYXRlIiwiZm9yY2VGcmVlTWlncmF0aW9uc0xvY2siLCJjb25zb2xlIiwiaW5mbyIsInBpY28iLCJncmVlbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQTs7OztBQUVPLGVBQWVBLE1BQWYsQ0FBc0JDLElBQXRCLEVBQTRCO0FBQ2pDLFFBQU1BLElBQUksQ0FBQ0MsT0FBTCxDQUFhQyx1QkFBYixFQUFOO0FBQ0FDLEVBQUFBLE9BQU8sQ0FBQ0MsSUFBUixDQUNFQyxvQkFBS0MsS0FBTCxDQUFZLGlEQUFaLENBREY7QUFHQSxTQUFPLElBQVA7QUFDRCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBwaWNvIGZyb20gJ3BpY29jb2xvcnMnXG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB1bmxvY2soa25leCkge1xuICBhd2FpdCBrbmV4Lm1pZ3JhdGUuZm9yY2VGcmVlTWlncmF0aW9uc0xvY2soKVxuICBjb25zb2xlLmluZm8oXG4gICAgcGljby5ncmVlbihgU3VjY2Vzc2Z1bGx5IHVubG9ja2VkIHRoZSBtaWdyYXRpb25zIGxvY2sgdGFibGVgKVxuICApXG4gIHJldHVybiB0cnVlXG59XG4iXX0=
|
package/lib/cli/index.js
CHANGED
|
@@ -12,7 +12,7 @@ require("core-js/modules/es.error.cause.js");
|
|
|
12
12
|
|
|
13
13
|
var _path = _interopRequireDefault(require("path"));
|
|
14
14
|
|
|
15
|
-
var
|
|
15
|
+
var _picocolors = _interopRequireDefault(require("picocolors"));
|
|
16
16
|
|
|
17
17
|
var _knex = _interopRequireDefault(require("knex"));
|
|
18
18
|
|
|
@@ -72,9 +72,9 @@ async function execute() {
|
|
|
72
72
|
process.exit(res === true ? 0 : 1);
|
|
73
73
|
} catch (err) {
|
|
74
74
|
if (err instanceof Error) {
|
|
75
|
-
console.error(
|
|
75
|
+
console.error(_picocolors.default.red(`${err.detail ? `${err.detail}\n` : ''}${err.stack}`));
|
|
76
76
|
} else {
|
|
77
|
-
console.error(
|
|
77
|
+
console.error(_picocolors.default.red(err));
|
|
78
78
|
}
|
|
79
79
|
|
|
80
80
|
process.exit(1);
|
|
@@ -87,4 +87,4 @@ if (require.main === module) {
|
|
|
87
87
|
|
|
88
88
|
var _default = execute;
|
|
89
89
|
exports.default = _default;
|
|
90
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
90
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jbGkvaW5kZXguanMiXSwibmFtZXMiOlsiY29tbWFuZHMiLCJkYiIsImNvbnNvbGUiLCJzdGFydENvbnNvbGUiLCJnZXRDb21tYW5kIiwicGFydHMiLCJwYXJ0Iiwic2hpZnQiLCJzZXRTaWxlbnQiLCJzaWxlbnQiLCJvbGRWYWx1ZSIsInByb2Nlc3MiLCJlbnYiLCJESVRPX1NJTEVOVCIsImV4ZWN1dGUiLCJjb21tYW5kIiwiaW1wb3J0UGF0aCIsImFyZ3MiLCJhcmd2Iiwic3BsaXQiLCJFcnJvciIsImFyZyIsInBhdGgiLCJyZXNvbHZlIiwiZGVmYXVsdCIsImtuZXgiLCJyZXMiLCJleGl0IiwiZXJyIiwiZXJyb3IiLCJwaWNvIiwicmVkIiwiZGV0YWlsIiwic3RhY2siLCJyZXF1aXJlIiwibWFpbiIsIm1vZHVsZSJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7OztBQUVBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOzs7Ozs7OztBQUVBLE1BQU1BLFFBQVEsR0FBRztBQUFFQyxFQUFBQSxFQUFGO0FBQU1DLEVBQUFBLE9BQU8sRUFBRUM7QUFBZixDQUFqQjs7QUFFQSxTQUFTQyxVQUFULENBQW9CSixRQUFwQixFQUE4QkssS0FBOUIsRUFBcUM7QUFDbkMsUUFBTUMsSUFBSSxHQUFHRCxLQUFLLENBQUNFLEtBQU4sRUFBYjtBQUNBLFNBQU9QLFFBQVEsSUFBSU0sSUFBWixHQUNIRixVQUFVLENBQUNKLFFBQVEsQ0FBQyxxQkFBU00sSUFBVCxDQUFELENBQVQsRUFBMkJELEtBQTNCLENBRFAsR0FFSEwsUUFGSjtBQUdEOztBQUVELFNBQVNRLFNBQVQsQ0FBbUJDLE1BQW5CLEVBQTJCO0FBQ3pCLFFBQU1DLFFBQVEsR0FBR0MsT0FBTyxDQUFDQyxHQUFSLENBQVlDLFdBQTdCO0FBQ0FGLEVBQUFBLE9BQU8sQ0FBQ0MsR0FBUixDQUFZQyxXQUFaLEdBQTBCSixNQUExQjtBQUNBLFNBQU9DLFFBQVA7QUFDRDs7QUFFRCxlQUFlSSxPQUFmLEdBQXlCO0FBQ3ZCLE1BQUk7QUFFRixVQUFNLElBQUlDLE9BQUosRUFBYUMsVUFBYixFQUF5QixHQUFHQyxJQUE1QixJQUFvQ04sT0FBTyxDQUFDTyxJQUFsRDtBQUNBLFVBQU1KLE9BQU8sR0FBR0MsT0FBTyxJQUFJWCxVQUFVLENBQUNKLFFBQUQsRUFBV2UsT0FBTyxDQUFDSSxLQUFSLENBQWMsR0FBZCxDQUFYLENBQXJDOztBQUNBLFFBQUksQ0FBQyx1QkFBV0wsT0FBWCxDQUFMLEVBQTBCO0FBQ3hCLFlBQU0sSUFBSU0sS0FBSixDQUFXLG9CQUFtQkwsT0FBUSxFQUF0QyxDQUFOO0FBQ0Q7O0FBQ0QsVUFBTU4sTUFBTSxHQUFHRCxTQUFTLENBQUMsSUFBRCxDQUF4QjtBQUNBLFFBQUlhLEdBQUo7O0FBQ0EsUUFBSTtBQUNGQSxNQUFBQSxHQUFHLEdBQUcsQ0FBQyx5QkFBYUMsY0FBS0MsT0FBTCxDQUFhUCxVQUFiLENBQWIsa0RBQUQsRUFBeUNRLE9BQS9DO0FBQ0QsS0FGRCxTQUVVO0FBQ1JoQixNQUFBQSxTQUFTLENBQUNDLE1BQUQsQ0FBVDtBQUNEOztBQUNELFFBQUksdUJBQVdZLEdBQVgsQ0FBSixFQUFxQjtBQUNuQkEsTUFBQUEsR0FBRyxHQUFHLE1BQU1BLEdBQUcsRUFBZjtBQUNELEtBRkQsTUFFTyxJQUFJLDBCQUFjQSxHQUFkLEtBQXNCQSxHQUFHLENBQUNJLElBQTlCLEVBQW9DO0FBQ3pDSixNQUFBQSxHQUFHLEdBQUcsbUJBQUtBLEdBQUcsQ0FBQ0ksSUFBVCxDQUFOO0FBQ0Q7O0FBQ0QsVUFBTUMsR0FBRyxHQUFHLE1BQU1aLE9BQU8sQ0FBQ08sR0FBRCxFQUFNLEdBQUdKLElBQVQsQ0FBekI7QUFDQU4sSUFBQUEsT0FBTyxDQUFDZ0IsSUFBUixDQUFhRCxHQUFHLEtBQUssSUFBUixHQUFlLENBQWYsR0FBbUIsQ0FBaEM7QUFDRCxHQXJCRCxDQXFCRSxPQUFPRSxHQUFQLEVBQVk7QUFDWixRQUFJQSxHQUFHLFlBQVlSLEtBQW5CLEVBQTBCO0FBQ3hCbEIsTUFBQUEsT0FBTyxDQUFDMkIsS0FBUixDQUNFQyxvQkFBS0MsR0FBTCxDQUFVLEdBQUVILEdBQUcsQ0FBQ0ksTUFBSixHQUFjLEdBQUVKLEdBQUcsQ0FBQ0ksTUFBTyxJQUEzQixHQUFpQyxFQUFHLEdBQUVKLEdBQUcsQ0FBQ0ssS0FBTSxFQUE1RCxDQURGO0FBR0QsS0FKRCxNQUlPO0FBQ0wvQixNQUFBQSxPQUFPLENBQUMyQixLQUFSLENBQWNDLG9CQUFLQyxHQUFMLENBQVNILEdBQVQsQ0FBZDtBQUNEOztBQUNEakIsSUFBQUEsT0FBTyxDQUFDZ0IsSUFBUixDQUFhLENBQWI7QUFDRDtBQUNGOztBQUdELElBQUlPLE9BQU8sQ0FBQ0MsSUFBUixLQUFpQkMsTUFBckIsRUFBNkI7QUFDM0J0QixFQUFBQSxPQUFPO0FBQ1I7O2VBRWNBLE8iLCJzb3VyY2VzQ29udGVudCI6WyIjIS91c3IvYmluL2VudiBiYWJlbC1ub2RlXG5cbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnXG5pbXBvcnQgcGljbyBmcm9tICdwaWNvY29sb3JzJ1xuaW1wb3J0IEtuZXggZnJvbSAna25leCdcbmltcG9ydCB7IGlzUGxhaW5PYmplY3QsIGlzRnVuY3Rpb24sIGNhbWVsaXplIH0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCAqIGFzIGRiIGZyb20gJy4vZGInXG5pbXBvcnQgc3RhcnRDb25zb2xlIGZyb20gJy4vY29uc29sZSdcblxuY29uc3QgY29tbWFuZHMgPSB7IGRiLCBjb25zb2xlOiBzdGFydENvbnNvbGUgfVxuXG5mdW5jdGlvbiBnZXRDb21tYW5kKGNvbW1hbmRzLCBwYXJ0cykge1xuICBjb25zdCBwYXJ0ID0gcGFydHMuc2hpZnQoKVxuICByZXR1cm4gY29tbWFuZHMgJiYgcGFydFxuICAgID8gZ2V0Q29tbWFuZChjb21tYW5kc1tjYW1lbGl6ZShwYXJ0KV0sIHBhcnRzKVxuICAgIDogY29tbWFuZHNcbn1cblxuZnVuY3Rpb24gc2V0U2lsZW50KHNpbGVudCkge1xuICBjb25zdCBvbGRWYWx1ZSA9IHByb2Nlc3MuZW52LkRJVE9fU0lMRU5UXG4gIHByb2Nlc3MuZW52LkRJVE9fU0lMRU5UID0gc2lsZW50XG4gIHJldHVybiBvbGRWYWx1ZVxufVxuXG5hc3luYyBmdW5jdGlvbiBleGVjdXRlKCkge1xuICB0cnkge1xuICAgIC8vIER5bmFtaWNhbGx5IGxvYWQgYXBwIG9yIGNvbmZpZyBmcm9tIHRoZSBwYXRoIHByb3ZpZGVkIHBhY2thZ2UuanNvbiBzY3JpcHRcbiAgICBjb25zdCBbLCwgY29tbWFuZCwgaW1wb3J0UGF0aCwgLi4uYXJnc10gPSBwcm9jZXNzLmFyZ3ZcbiAgICBjb25zdCBleGVjdXRlID0gY29tbWFuZCAmJiBnZXRDb21tYW5kKGNvbW1hbmRzLCBjb21tYW5kLnNwbGl0KCc6JykpXG4gICAgaWYgKCFpc0Z1bmN0aW9uKGV4ZWN1dGUpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gY29tbWFuZDogJHtjb21tYW5kfWApXG4gICAgfVxuICAgIGNvbnN0IHNpbGVudCA9IHNldFNpbGVudCh0cnVlKVxuICAgIGxldCBhcmdcbiAgICB0cnkge1xuICAgICAgYXJnID0gKGF3YWl0IGltcG9ydChwYXRoLnJlc29sdmUoaW1wb3J0UGF0aCkpKS5kZWZhdWx0XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHNldFNpbGVudChzaWxlbnQpXG4gICAgfVxuICAgIGlmIChpc0Z1bmN0aW9uKGFyZykpIHtcbiAgICAgIGFyZyA9IGF3YWl0IGFyZygpXG4gICAgfSBlbHNlIGlmIChpc1BsYWluT2JqZWN0KGFyZykgJiYgYXJnLmtuZXgpIHtcbiAgICAgIGFyZyA9IEtuZXgoYXJnLmtuZXgpXG4gICAgfVxuICAgIGNvbnN0IHJlcyA9IGF3YWl0IGV4ZWN1dGUoYXJnLCAuLi5hcmdzKVxuICAgIHByb2Nlc3MuZXhpdChyZXMgPT09IHRydWUgPyAwIDogMSlcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgaWYgKGVyciBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICBwaWNvLnJlZChgJHtlcnIuZGV0YWlsID8gYCR7ZXJyLmRldGFpbH1cXG5gIDogJyd9JHtlcnIuc3RhY2t9YClcbiAgICAgIClcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc29sZS5lcnJvcihwaWNvLnJlZChlcnIpKVxuICAgIH1cbiAgICBwcm9jZXNzLmV4aXQoMSlcbiAgfVxufVxuXG4vLyBTdGFydCB0aGUgY29uc29sZSBpZiBgbm9kZSAuL2xpYi9jbGkvaW5kZXguanNgXG5pZiAocmVxdWlyZS5tYWluID09PSBtb2R1bGUpIHtcbiAgZXhlY3V0ZSgpXG59XG5cbmV4cG9ydCBkZWZhdWx0IGV4ZWN1dGVcbiJdfQ==
|
|
@@ -29,7 +29,7 @@ require("core-js/modules/esnext.weak-map.delete-all.js");
|
|
|
29
29
|
|
|
30
30
|
require("core-js/modules/esnext.weak-map.emplace.js");
|
|
31
31
|
|
|
32
|
-
var
|
|
32
|
+
var _picocolors = _interopRequireDefault(require("picocolors"));
|
|
33
33
|
|
|
34
34
|
var _utils = require("../utils");
|
|
35
35
|
|
|
@@ -75,7 +75,7 @@ class Controller {
|
|
|
75
75
|
} = this;
|
|
76
76
|
const url = path ? `/${path}` : '';
|
|
77
77
|
this.url = namespace ? `/${namespace}${url}` : url;
|
|
78
|
-
this.log(`${namespace ?
|
|
78
|
+
this.log(`${namespace ? _picocolors.default.green(`/${namespace}/`) : ''}${_picocolors.default.cyan(path)}${_picocolors.default.white(':')}`, this.level);
|
|
79
79
|
|
|
80
80
|
if (setupActionsObject) {
|
|
81
81
|
this.actions = this.actions || this.reflectActionsObject();
|
|
@@ -109,7 +109,7 @@ class Controller {
|
|
|
109
109
|
}
|
|
110
110
|
|
|
111
111
|
setupRoute(verb, url, transacted, authorize, action, handlers) {
|
|
112
|
-
this.log(`${
|
|
112
|
+
this.log(`${_picocolors.default.magenta(verb.toUpperCase())} ${_picocolors.default.green(this.url)}${_picocolors.default.cyan(url.slice(this.url.length))} ${_picocolors.default.white(this.describeAuthorize(authorize))}`, this.level + 1);
|
|
113
113
|
this.app.addRoute(verb, url, transacted, handlers, this, action);
|
|
114
114
|
}
|
|
115
115
|
|
|
@@ -459,4 +459,4 @@ function setupHandlerFromObject(object, actions) {
|
|
|
459
459
|
|
|
460
460
|
return handler;
|
|
461
461
|
}
|
|
462
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb250cm9sbGVycy9Db250cm9sbGVyLmpzIl0sIm5hbWVzIjpbIkNvbnRyb2xsZXIiLCJjb25zdHJ1Y3RvciIsImFwcCIsIm5hbWVzcGFjZSIsImxvZ2dpbmciLCJjb25maWciLCJsb2ciLCJyb3V0ZXMiLCJsZXZlbCIsImluaXRpYWxpemUiLCJzZXR1cCIsImlzUm9vdCIsInNldHVwQWN0aW9uc09iamVjdCIsIl9zZXR1cEVtaXR0ZXIiLCJob29rcyIsIndpbGRjYXJkIiwibmFtZSIsIm1hdGNoIiwicGF0aCIsInVuZGVmaW5lZCIsIm5vcm1hbGl6ZVBhdGgiLCJ0cmFuc2FjdGVkIiwidXJsIiwiY2hhbGsiLCJncmVlbiIsImN5YW4iLCJ3aGl0ZSIsImFjdGlvbnMiLCJyZWZsZWN0QWN0aW9uc09iamVjdCIsInNldHVwQWN0aW9ucyIsImFzc2V0cyIsInNldHVwQXNzZXRzIiwiYWxsb3ciLCJjb250cm9sbGVyIiwiYWRkQWN0aW9uIiwia2V5IiwidmFsdWUiLCJ2ZXJiIiwicHJvdG8iLCJPYmplY3QiLCJnZXRQcm90b3R5cGVPZiIsImdldE93blByb3BlcnR5TmFtZXMiLCJmb3JFYWNoIiwic2V0dXBSb3V0ZSIsImF1dGhvcml6ZSIsImFjdGlvbiIsImhhbmRsZXJzIiwibWFnZW50YSIsInRvVXBwZXJDYXNlIiwic2xpY2UiLCJsZW5ndGgiLCJkZXNjcmliZUF1dGhvcml6ZSIsImFkZFJvdXRlIiwidHlwZSIsInZhbHVlcyIsInByb2Nlc3NWYWx1ZXMiLCJpbmhlcml0VmFsdWVzIiwiaGFuZGxlciIsImVudHJpZXMiLCJzZXR1cEFjdGlvbiIsInNldHVwSGFuZGxlckZyb21PYmplY3QiLCJhY3Rpb25DbGFzcyIsIk1lbWJlckFjdGlvbiIsIkNvbnRyb2xsZXJBY3Rpb24iLCJzZXR1cEFjdGlvblJvdXRlIiwiZ2V0VXJsIiwiY3R4IiwicmVzIiwiY2FsbEFjdGlvbiIsImJvZHkiLCJlcnIiLCJSZXNwb25zZUVycm9yIiwiV3JhcHBlZEVycm9yIiwiZGF0YVBhdGgiLCJzZXR1cEFzc2V0Um91dGUiLCJzdG9yYWdlIiwic3RvcmFnZU5hbWUiLCJzZXR0aW5ncyIsImdldFN0b3JhZ2UiLCJDb250cm9sbGVyRXJyb3IiLCJ0b2tlbnMiLCJnZXREYXRhUGF0aCIsImNhbGxiYWNrIiwibWFwIiwiaW5kZXgiLCJtdWx0aXBsZVdpbGRjYXJkcyIsImZpbHRlciIsInRva2VuIiwibm9ybWFsaXplZFBhdGgiLCJtYXRjaERhdGFQYXRoIiwiUmVnRXhwIiwidXBsb2FkIiwiZ2V0VXBsb2FkSGFuZGxlciIsImZpbGVGaWx0ZXIiLCJyZXEiLCJmaWxlIiwiY2IiLCJ0ZXN0IiwiZmllbGRuYW1lIiwiYXV0aG9yaXphdGlvbiIsInByb2Nlc3NBdXRob3JpemUiLCJuZXh0IiwiaGFuZGxlQXV0aG9yaXphdGlvbiIsImZpbGVzIiwiY29udmVydFN0b3JhZ2VGaWxlcyIsInJlcXVlc3QiLCJjcmVhdGVBc3NldHMiLCJ0cmFuc2FjdGlvbiIsImNvbXBvc2UiLCJnZXRQYXRoIiwicGFyZW50Q2xhc3MiLCJpbmhlcml0YW5jZU1hcCIsImhhcyIsInNldCIsImluc3RhbmNlIiwiZW50cnkiLCJnZXQiLCJwYXJlbnQiLCJwYXJlbnRWYWx1ZXMiLCJjdXJyZW50VmFsdWVzIiwic2V0UHJvdG90eXBlT2YiLCJtZXJnZWRBbGxvdyIsIm1lcmdlZEF1dGhvcml6ZSIsImhhc093bkFsbG93IiwiZXhjbHVkZUtleSIsImluY2x1ZGVzIiwiaGFuZGxlQWxsb3ciLCJjdXJyZW50Iiwia2V5cyIsImhhbmRsZUF1dGhvcml6ZSIsImFkZCIsInByb3RvdHlwZSIsImhhc093blByb3BlcnR5IiwicmVkdWNlIiwicmVzdWx0IiwiY3JlYXRlIiwiZW1pdEhvb2siLCJoYW5kbGVSZXN1bHQiLCJhcmdzIiwic2hpZnQiLCJsaXN0ZW5lcnMiLCJjYWxsIiwiZ2V0TWVtYmVyIiwibWVtYmVyIiwidXNlciIsInN0YXRlIiwiZmluZCIsIm1vZGVsQ2xhc3MiLCIkaWQiLCJtZW1iZXJJZCIsIiRoYXNPd25lciIsIiRoYXNSb2xlIiwiam9pbiIsIm9rIiwiQXV0aG9yaXphdGlvbkVycm9yIiwic3RyIiwiaW5kZW50IiwiY29uc29sZSIsImluZm8iLCJyZXBlYXQiLCJFdmVudEVtaXR0ZXIiLCJtaXhpbiIsIldlYWtNYXAiLCJvYmplY3QiLCJwYXJhbWV0ZXJzIiwicmV0dXJucyIsInNjb3BlIiwiX3BhcmFtZXRlcnMiLCJvcHRpb25zIiwiaGFzT3B0aW9ucyIsIl9yZXR1cm5zIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBR0E7Ozs7QUFLTyxNQUFNQSxVQUFOLENBQWlCO0FBQ3RCQyxFQUFBQSxXQUFXLENBQUNDLEdBQUQsRUFBTUMsU0FBTixFQUFpQjtBQUMxQixTQUFLRCxHQUFMLEdBQVdBLEdBQVg7QUFDQSxTQUFLQyxTQUFMLEdBQWlCLEtBQUtBLFNBQUwsSUFBa0JBLFNBQW5DO0FBQ0EsU0FBS0MsT0FBTCxHQUFlLEtBQUtGLEdBQUwsQ0FBU0csTUFBVCxDQUFnQkMsR0FBaEIsQ0FBb0JDLE1BQW5DO0FBQ0EsU0FBS0MsS0FBTCxHQUFhLENBQWI7QUFDRDs7QUFHREMsRUFBQUEsVUFBVSxHQUFHLENBQ1o7O0FBRURDLEVBQUFBLEtBQUssQ0FBQ0MsTUFBTSxHQUFHLElBQVYsRUFBZ0JDLGtCQUFrQixHQUFHLElBQXJDLEVBQTJDO0FBQzlDLFNBQUtDLGFBQUwsQ0FBbUIsS0FBS0MsS0FBeEIsRUFBK0I7QUFFN0JDLE1BQUFBLFFBQVEsRUFBRTtBQUZtQixLQUEvQjs7QUFLQSxTQUFLQyxJQUFMLEdBQVksS0FBS0EsSUFBTCxJQUNWLEtBQUtmLFdBQUwsQ0FBaUJlLElBQWpCLENBQXNCQyxLQUF0QixDQUE0Qix3QkFBNUIsRUFBc0QsQ0FBdEQsQ0FERjs7QUFFQSxRQUFJLEtBQUtDLElBQUwsS0FBY0MsU0FBbEIsRUFBNkI7QUFDM0IsV0FBS0QsSUFBTCxHQUFZLEtBQUtoQixHQUFMLENBQVNrQixhQUFULENBQXVCLEtBQUtKLElBQTVCLENBQVo7QUFDRDs7QUFDRCxTQUFLSyxVQUFMLEdBQWtCLENBQUMsQ0FBQyxLQUFLQSxVQUF6Qjs7QUFDQSxRQUFJVixNQUFKLEVBQVk7QUFDVixZQUFNO0FBQUVPLFFBQUFBLElBQUY7QUFBUWYsUUFBQUE7QUFBUixVQUFzQixJQUE1QjtBQUlBLFlBQU1tQixHQUFHLEdBQUdKLElBQUksR0FBSSxJQUFHQSxJQUFLLEVBQVosR0FBZ0IsRUFBaEM7QUFDQSxXQUFLSSxHQUFMLEdBQVduQixTQUFTLEdBQUksSUFBR0EsU0FBVSxHQUFFbUIsR0FBSSxFQUF2QixHQUEyQkEsR0FBL0M7QUFDQSxXQUFLaEIsR0FBTCxDQUNHLEdBQ0NILFNBQVMsR0FBR29CLGVBQU1DLEtBQU4sQ0FBYSxJQUFHckIsU0FBVSxHQUExQixDQUFILEdBQW1DLEVBQzdDLEdBQ0NvQixlQUFNRSxJQUFOLENBQVdQLElBQVgsQ0FDRCxHQUNDSyxlQUFNRyxLQUFOLENBQVksR0FBWixDQUNELEVBUEgsRUFRRSxLQUFLbEIsS0FSUDs7QUFVQSxVQUFJSSxrQkFBSixFQUF3QjtBQUN0QixhQUFLZSxPQUFMLEdBQWUsS0FBS0EsT0FBTCxJQUFnQixLQUFLQyxvQkFBTCxFQUEvQjtBQUdBLGFBQUtELE9BQUwsR0FBZSxLQUFLRSxZQUFMLENBQWtCLFNBQWxCLENBQWY7QUFDRDs7QUFDRCxXQUFLQyxNQUFMLEdBQWMsS0FBS0MsV0FBTCxFQUFkO0FBQ0Q7QUFDRjs7QUFFREgsRUFBQUEsb0JBQW9CLEdBQUc7QUFNckIsVUFBTTtBQUFFSSxNQUFBQTtBQUFGLFFBQVksSUFBbEI7QUFDQSxVQUFNQyxVQUFVLEdBQUdELEtBQUssR0FBRztBQUFFQSxNQUFBQTtBQUFGLEtBQUgsR0FBZSxFQUF2Qzs7QUFFQSxVQUFNRSxTQUFTLEdBQUdDLEdBQUcsSUFBSTtBQUN2QixZQUFNQyxLQUFLLEdBQUcsS0FBS0QsR0FBTCxDQUFkOztBQUlBLFVBQUlDLEtBQUosWUFBSUEsS0FBSyxDQUFFQyxJQUFYLEVBQWlCO0FBQ2ZKLFFBQUFBLFVBQVUsQ0FBQ0UsR0FBRCxDQUFWLEdBQWtCQyxLQUFsQjtBQUNEO0FBQ0YsS0FSRDs7QUFZQSxVQUFNRSxLQUFLLEdBQUdDLE1BQU0sQ0FBQ0MsY0FBUCxDQUFzQixJQUF0QixDQUFkO0FBQ0FELElBQUFBLE1BQU0sQ0FBQ0UsbUJBQVAsQ0FBMkJILEtBQTNCLEVBQWtDSSxPQUFsQyxDQUEwQ1IsU0FBMUM7QUFDQUssSUFBQUEsTUFBTSxDQUFDRSxtQkFBUCxDQUEyQixJQUEzQixFQUFpQ0MsT0FBakMsQ0FBeUNSLFNBQXpDO0FBQ0EsV0FBT0QsVUFBUDtBQUNEOztBQUVEVSxFQUFBQSxVQUFVLENBQUNOLElBQUQsRUFBT2YsR0FBUCxFQUFZRCxVQUFaLEVBQXdCdUIsU0FBeEIsRUFBbUNDLE1BQW5DLEVBQTJDQyxRQUEzQyxFQUFxRDtBQUM3RCxTQUFLeEMsR0FBTCxDQUNHLEdBQ0NpQixlQUFNd0IsT0FBTixDQUFjVixJQUFJLENBQUNXLFdBQUwsRUFBZCxDQUNELElBQ0N6QixlQUFNQyxLQUFOLENBQVksS0FBS0YsR0FBakIsQ0FDRCxHQUNDQyxlQUFNRSxJQUFOLENBQVdILEdBQUcsQ0FBQzJCLEtBQUosQ0FBVSxLQUFLM0IsR0FBTCxDQUFTNEIsTUFBbkIsQ0FBWCxDQUNELElBQ0MzQixlQUFNRyxLQUFOLENBQVksS0FBS3lCLGlCQUFMLENBQXVCUCxTQUF2QixDQUFaLENBQ0QsRUFUSCxFQVVFLEtBQUtwQyxLQUFMLEdBQWEsQ0FWZjtBQVlBLFNBQUtOLEdBQUwsQ0FBU2tELFFBQVQsQ0FBa0JmLElBQWxCLEVBQXdCZixHQUF4QixFQUE2QkQsVUFBN0IsRUFBeUN5QixRQUF6QyxFQUFtRCxJQUFuRCxFQUF5REQsTUFBekQ7QUFDRDs7QUFFRGhCLEVBQUFBLFlBQVksQ0FBQ3dCLElBQUQsRUFBTztBQUNqQixVQUFNO0FBQ0pDLE1BQUFBLE1BQU0sRUFBRTNCLE9BREo7QUFFSmlCLE1BQUFBO0FBRkksUUFHRixLQUFLVyxhQUFMLENBQW1CLEtBQUtDLGFBQUwsQ0FBbUJILElBQW5CLENBQW5CLENBSEo7O0FBSUEsU0FBSyxNQUFNLENBQUNyQyxJQUFELEVBQU95QyxPQUFQLENBQVgsSUFBOEJsQixNQUFNLENBQUNtQixPQUFQLENBQWUvQixPQUFmLENBQTlCLEVBQXVEO0FBQ3JELFdBQUtnQyxXQUFMLENBQWlCTixJQUFqQixFQUF1QjFCLE9BQXZCLEVBQWdDWCxJQUFoQyxFQUFzQ3lDLE9BQXRDLEVBQStDYixTQUFTLENBQUM1QixJQUFELENBQXhEO0FBQ0Q7O0FBQ0QsV0FBT1csT0FBUDtBQUNEOztBQUVEZ0MsRUFBQUEsV0FBVyxDQUNUTixJQURTLEVBRVQxQixPQUZTLEVBR1RYLElBSFMsRUFJVHlDLE9BSlMsRUFLVGIsU0FMUyxFQVFUUCxJQUFJLEdBQUcsS0FSRSxFQVVUbkIsSUFBSSxHQUFHLEtBQUtoQixHQUFMLENBQVNrQixhQUFULENBQXVCSixJQUF2QixDQVZFLEVBV1Q7QUFDQSxRQUFJLENBQUMsd0JBQVd5QyxPQUFYLENBQUwsRUFBMEI7QUFDeEJBLE1BQUFBLE9BQU8sR0FBR0csc0JBQXNCLENBQUNILE9BQUQsRUFBVTlCLE9BQVYsQ0FBaEM7QUFDRDs7QUFHRCxVQUFNa0MsV0FBVyxHQUFHUixJQUFJLEtBQUssUUFBVCxHQUFvQlMscUJBQXBCLEdBQW1DQyx5QkFBdkQ7QUFDQSxTQUFLQyxnQkFBTCxDQUNFWCxJQURGLEVBR0UsSUFBSVEsV0FBSixDQUFnQixJQUFoQixFQUFzQkosT0FBdEIsRUFBK0JKLElBQS9CLEVBQXFDckMsSUFBckMsRUFBMkNxQixJQUEzQyxFQUFpRG5CLElBQWpELEVBQXVEMEIsU0FBdkQsQ0FIRjtBQUtEOztBQUVEb0IsRUFBQUEsZ0JBQWdCLENBQUNYLElBQUQsRUFBT1IsTUFBUCxFQUFlO0FBQzdCLFVBQU12QixHQUFHLEdBQUcsS0FBSzJDLE1BQUwsQ0FBWVosSUFBWixFQUFrQlIsTUFBTSxDQUFDM0IsSUFBekIsQ0FBWjtBQUNBLFVBQU07QUFBRW1CLE1BQUFBLElBQUY7QUFBUWhCLE1BQUFBLFVBQVI7QUFBb0J1QixNQUFBQTtBQUFwQixRQUFrQ0MsTUFBeEM7QUFDQSxTQUFLRixVQUFMLENBQWdCTixJQUFoQixFQUFzQmYsR0FBdEIsRUFBMkJELFVBQTNCLEVBQXVDdUIsU0FBdkMsRUFBa0RDLE1BQWxELEVBQTBELENBQ3hELE1BQU1xQixHQUFOLElBQWE7QUFDWCxVQUFJO0FBQ0YsY0FBTUMsR0FBRyxHQUFHLE1BQU10QixNQUFNLENBQUN1QixVQUFQLENBQWtCRixHQUFsQixDQUFsQjs7QUFDQSxZQUFJQyxHQUFHLEtBQUtoRCxTQUFaLEVBQXVCO0FBQ3JCK0MsVUFBQUEsR0FBRyxDQUFDRyxJQUFKLEdBQVdGLEdBQVg7QUFDRDtBQUNGLE9BTEQsQ0FLRSxPQUFPRyxHQUFQLEVBQVk7QUFDWixjQUFNQSxHQUFHLFlBQVlDLHFCQUFmLEdBQStCRCxHQUEvQixHQUFxQyxJQUFJRSxvQkFBSixDQUFpQkYsR0FBakIsQ0FBM0M7QUFDRDtBQUNGLEtBVnVELENBQTFEO0FBWUQ7O0FBRUR2QyxFQUFBQSxXQUFXLEdBQUc7QUFDWixVQUFNO0FBQ0p1QixNQUFBQSxNQUFNLEVBQUV4QixNQURKO0FBRUpjLE1BQUFBO0FBRkksUUFHRixLQUFLVyxhQUFMLENBQW1CLEtBQUtDLGFBQUwsQ0FBbUIsUUFBbkIsQ0FBbkIsQ0FISjs7QUFJQSxTQUFLLE1BQU0sQ0FBQ2lCLFFBQUQsRUFBV3BFLE1BQVgsQ0FBWCxJQUFpQ2tDLE1BQU0sQ0FBQ21CLE9BQVAsQ0FBZTVCLE1BQU0sSUFBSSxFQUF6QixDQUFqQyxFQUErRDtBQUM3RCxXQUFLNEMsZUFBTCxDQUFxQkQsUUFBckIsRUFBK0JwRSxNQUEvQixFQUF1Q3VDLFNBQVMsQ0FBQzZCLFFBQUQsQ0FBaEQ7QUFDRDs7QUFDRCxXQUFPM0MsTUFBUDtBQUNEOztBQUVENEMsRUFBQUEsZUFBZSxDQUFDRCxRQUFELEVBQVdwRSxNQUFYLEVBQW1CdUMsU0FBbkIsRUFBOEI7QUFDM0MsVUFBTTtBQUNKK0IsTUFBQUEsT0FBTyxFQUFFQyxXQURMO0FBR0p2RCxNQUFBQSxVQUhJO0FBSUosU0FBR3dEO0FBSkMsUUFLRnhFLE1BTEo7QUFNQSxVQUFNc0UsT0FBTyxHQUFHLEtBQUt6RSxHQUFMLENBQVM0RSxVQUFULENBQW9CRixXQUFwQixDQUFoQjs7QUFDQSxRQUFJLENBQUNELE9BQUwsRUFBYztBQUNaLFlBQU0sSUFBSUksdUJBQUosQ0FBb0IsSUFBcEIsRUFDSCxtQ0FBa0NILFdBQVksR0FEM0MsQ0FBTjtBQUdEOztBQUNELFVBQU1JLE1BQU0sR0FBRywyQkFBY1AsUUFBZCxDQUFmOztBQUNBLFVBQU1RLFdBQVcsR0FBR0MsUUFBUSxJQUFJLCtCQUFrQkYsTUFBTSxDQUFDRyxHQUFQLENBQVdELFFBQVgsQ0FBbEIsQ0FBaEM7O0FBR0EsUUFBSUUsS0FBSyxHQUFHLENBQVo7QUFDQSxVQUFNQyxpQkFBaUIsR0FBR0wsTUFBTSxDQUFDTSxNQUFQLENBQWNDLEtBQUssSUFBSUEsS0FBSyxLQUFLLEdBQWpDLEVBQXNDckMsTUFBdEMsR0FBK0MsQ0FBekU7QUFDQSxVQUFNc0MsY0FBYyxHQUFHUCxXQUFXLENBQ2hDTSxLQUFLLElBQUlBLEtBQUssS0FBSyxHQUFWLEdBQ0xGLGlCQUFpQixHQUNkLFNBQVEsRUFBRUQsS0FBTSxFQURGLEdBRWYsUUFIRyxHQUlMLEtBQUtsRixHQUFMLENBQVNrQixhQUFULENBQXVCbUUsS0FBdkIsQ0FMNEIsQ0FBbEM7QUFXQSxVQUFNRSxhQUFhLEdBQUcsSUFBSUMsTUFBSixDQUNuQixJQUFHVCxXQUFXLENBQUNNLEtBQUssSUFBSUEsS0FBSyxLQUFLLEdBQVYsR0FBZ0IsTUFBaEIsR0FBeUJBLEtBQW5DLENBQTBDLEdBRHJDLENBQXRCO0FBSUEsVUFBTWpFLEdBQUcsR0FBRyxLQUFLMkMsTUFBTCxDQUFZLFlBQVosRUFBMkIsVUFBU3VCLGNBQWUsRUFBbkQsQ0FBWjtBQUNBLFVBQU1HLE1BQU0sR0FBR2hCLE9BQU8sQ0FBQ2lCLGdCQUFSLENBQXlCLEVBQ3RDLEdBQUdmLFFBRG1DO0FBR3RDZ0IsTUFBQUEsVUFBVSxFQUFFLENBQUNDLEdBQUQsRUFBTUMsSUFBTixFQUFZQyxFQUFaLEtBQW1CO0FBQzdCQSxRQUFBQSxFQUFFLENBQUMsSUFBRCxFQUFPUCxhQUFhLENBQUNRLElBQWQsQ0FBbUJGLElBQUksQ0FBQ0csU0FBeEIsQ0FBUCxDQUFGO0FBQ0Q7QUFMcUMsS0FBekIsQ0FBZjtBQVFBLFVBQU1DLGFBQWEsR0FBRyxLQUFLQyxnQkFBTCxDQUFzQnhELFNBQXRCLENBQXRCO0FBQ0EsU0FBS0QsVUFBTCxDQUFnQixNQUFoQixFQUF3QnJCLEdBQXhCLEVBQTZCRCxVQUE3QixFQUF5Q3VCLFNBQXpDLEVBQW9ELElBQXBELEVBQTBELENBQ3hELE9BQU9zQixHQUFQLEVBQVltQyxJQUFaLEtBQXFCO0FBQ25CLFlBQU0sS0FBS0MsbUJBQUwsQ0FBeUJILGFBQXpCLEVBQXdDakMsR0FBeEMsQ0FBTjtBQUNBLGFBQU9tQyxJQUFJLEVBQVg7QUFDRCxLQUp1RCxFQU14RFYsTUFOd0QsRUFReEQsT0FBT3pCLEdBQVAsRUFBWW1DLElBQVosS0FBcUI7QUFDbkIsWUFBTUUsS0FBSyxHQUFHNUIsT0FBTyxDQUFDNkIsbUJBQVIsQ0FBNEJ0QyxHQUFHLENBQUN1QyxPQUFKLENBQVlGLEtBQXhDLENBQWQ7QUFDQSxZQUFNLEtBQUtyRyxHQUFMLENBQVN3RyxZQUFULENBQXNCL0IsT0FBdEIsRUFBK0I0QixLQUEvQixFQUFzQyxDQUF0QyxFQUF5Q3JDLEdBQUcsQ0FBQ3lDLFdBQTdDLENBQU47QUFHQXpDLE1BQUFBLEdBQUcsQ0FBQ0csSUFBSixHQUFXa0MsS0FBWDtBQUNBLGFBQU9GLElBQUksRUFBWDtBQUNELEtBZnVELENBQTFEO0FBaUJEOztBQUVETyxFQUFBQSxPQUFPLEdBQUcsQ0FHVDs7QUFFREMsRUFBQUEsT0FBTyxDQUFDeEQsSUFBRCxFQUFPbkMsSUFBUCxFQUFhO0FBRWxCLFdBQU9BLElBQVA7QUFDRDs7QUFFRCtDLEVBQUFBLE1BQU0sQ0FBQ1osSUFBRCxFQUFPbkMsSUFBUCxFQUFhO0FBQ2pCQSxJQUFBQSxJQUFJLEdBQUcsS0FBSzJGLE9BQUwsQ0FBYXhELElBQWIsRUFBbUJuQyxJQUFuQixDQUFQO0FBRUEsV0FBT0EsSUFBSSxJQUFJQSxJQUFJLEtBQUssR0FBakIsR0FBd0IsR0FBRSxLQUFLSSxHQUFJLElBQUdKLElBQUssRUFBM0MsR0FBK0MsS0FBS0ksR0FBM0Q7QUFDRDs7QUFFRGtDLEVBQUFBLGFBQWEsQ0FBQ0gsSUFBRCxFQUFPO0FBT2xCLFVBQU15RCxXQUFXLEdBQUd2RSxNQUFNLENBQUNDLGNBQVAsQ0FBc0IsS0FBS3ZDLFdBQTNCLENBQXBCOztBQUlBLFFBQUksQ0FBQzhHLGNBQWMsQ0FBQ0MsR0FBZixDQUFtQkYsV0FBbkIsQ0FBTCxFQUFzQztBQUNwQ0MsTUFBQUEsY0FBYyxDQUFDRSxHQUFmLENBQW1CSCxXQUFuQixFQUFnQztBQUU5QkksUUFBQUEsUUFBUSxFQUFFLElBQUlKLFdBQUosQ0FBZ0IsS0FBSzVHLEdBQXJCLEVBQTBCLEtBQUtDLFNBQS9CO0FBRm9CLE9BQWhDO0FBSUQ7O0FBQ0QsVUFBTWdILEtBQUssR0FBR0osY0FBYyxDQUFDSyxHQUFmLENBQW1CTixXQUFuQixDQUFkOztBQUNBLFFBQUksQ0FBQ0ssS0FBSyxDQUFDOUQsSUFBRCxDQUFWLEVBQWtCO0FBQ2hCLFlBQU1nRSxNQUFNLEdBQUdGLEtBQUssQ0FBQ0QsUUFBckI7QUFDQSxVQUFJNUQsTUFBTSxHQUFHK0QsTUFBTSxDQUFDaEUsSUFBRCxDQUFuQjs7QUFDQSxVQUFJeUQsV0FBVyxLQUFLOUcsVUFBcEIsRUFBZ0M7QUFFOUJzRCxRQUFBQSxNQUFNLEdBQUcrRCxNQUFNLENBQUM3RCxhQUFQLENBQXFCSCxJQUFyQixDQUFUO0FBQ0Q7O0FBQ0Q4RCxNQUFBQSxLQUFLLENBQUM5RCxJQUFELENBQUwsR0FBY0MsTUFBZDtBQUNEOztBQU1ELFVBQU1nRSxZQUFZLEdBQUdILEtBQUssQ0FBQzlELElBQUQsQ0FBMUI7QUFDQSxRQUFJa0UsYUFBYSxHQUFHLEtBQUtsRSxJQUFMLENBQXBCOztBQUNBLFFBQUlrRSxhQUFhLElBQUlBLGFBQWEsS0FBS0QsWUFBdkMsRUFBcUQ7QUFDbkRDLE1BQUFBLGFBQWEsR0FBRyxLQUFLbEUsSUFBTCxJQUFhLEVBQTdCO0FBQ0Q7O0FBRUQsV0FBTyxzQkFBU2lFLFlBQVQsS0FBMEIsc0JBQVNDLGFBQVQsQ0FBMUIsR0FDSGhGLE1BQU0sQ0FBQ2lGLGNBQVAsQ0FBc0JELGFBQXRCLEVBQXFDRCxZQUFyQyxDQURHLEdBRUhDLGFBRko7QUFHRDs7QUFFRGhFLEVBQUFBLGFBQWEsQ0FBQ0QsTUFBRCxFQUFTO0FBQ3BCLFFBQUksQ0FBQ0EsTUFBTCxFQUFhLE9BQU8sRUFBUDtBQWdCYixVQUFNbUUsV0FBVyxHQUFHLEVBQXBCO0FBQ0EsVUFBTUMsZUFBZSxHQUFHLEVBQXhCO0FBQ0EsUUFBSUMsV0FBVyxHQUFHLEtBQWxCOztBQUVBLFVBQU1DLFVBQVUsR0FBR3pGLEdBQUcsSUFBSSxDQUFDLE9BQUQsRUFBVSxXQUFWLEVBQXVCMEYsUUFBdkIsQ0FBZ0MxRixHQUFoQyxDQUExQjs7QUFFQSxVQUFNMkYsV0FBVyxHQUFHLENBQUM5RixLQUFELEVBQVErRixPQUFSLEtBQW9CO0FBQ3RDLFVBQUkvRixLQUFKLEVBQVc7QUFDVEEsUUFBQUEsS0FBSyxHQUFHLHFCQUFRQSxLQUFSLENBQVI7QUFDQTJGLFFBQUFBLFdBQVcsR0FBRyxJQUFkO0FBQ0QsT0FIRCxNQUdPLElBQUksQ0FBQ0EsV0FBTCxFQUFrQjtBQUd2QjNGLFFBQUFBLEtBQUssR0FBR08sTUFBTSxDQUFDeUYsSUFBUCxDQUFZRCxPQUFaLENBQVI7QUFDRDs7QUFDRCxVQUFJL0YsS0FBSixFQUFXO0FBQ1QsWUFBSUEsS0FBSyxDQUFDNkYsUUFBTixDQUFlLEdBQWYsQ0FBSixFQUF5QjtBQUN2QjdGLFVBQUFBLEtBQUssR0FBRyx1QkFBVytGLE9BQVgsQ0FBUjtBQUNEOztBQUNELGFBQUssTUFBTTVGLEdBQVgsSUFBa0JILEtBQWxCLEVBQXlCO0FBQ3ZCLGNBQUksQ0FBQzRGLFVBQVUsQ0FBQ3pGLEdBQUQsQ0FBZixFQUFzQjtBQUNwQnNGLFlBQUFBLFdBQVcsQ0FBQ3RGLEdBQUQsQ0FBWCxHQUFtQixJQUFuQjtBQUNEO0FBQ0Y7QUFDRjtBQUNGLEtBbkJEOztBQXFCQSxVQUFNOEYsZUFBZSxHQUFHckYsU0FBUyxJQUFJO0FBQ25DLFlBQU1zRixHQUFHLEdBQUcsQ0FBQy9GLEdBQUQsRUFBTUMsS0FBTixLQUFnQjtBQUcxQixZQUNFRCxHQUFHLElBQUltQixNQUFQLElBQ0EsRUFBRW5CLEdBQUcsSUFBSXVGLGVBQVQsQ0FEQSxJQUVBLENBQUNFLFVBQVUsQ0FBQ3pGLEdBQUQsQ0FIYixFQUlFO0FBQ0F1RixVQUFBQSxlQUFlLENBQUN2RixHQUFELENBQWYsR0FBdUJDLEtBQXZCO0FBQ0Q7QUFDRixPQVZEOztBQVlBLFVBQUksc0JBQVNRLFNBQVQsQ0FBSixFQUF5QjtBQUN2QixhQUFLLE1BQU1ULEdBQVgsSUFBa0JTLFNBQWxCLEVBQTZCO0FBQzNCc0YsVUFBQUEsR0FBRyxDQUFDL0YsR0FBRCxFQUFNUyxTQUFTLENBQUNULEdBQUQsQ0FBZixDQUFIO0FBQ0Q7QUFDRixPQUpELE1BSU8sSUFBSVMsU0FBUyxJQUFJLElBQWpCLEVBQXVCO0FBRzVCLGFBQUssTUFBTVQsR0FBWCxJQUFrQm1CLE1BQWxCLEVBQTBCO0FBQ3hCNEUsVUFBQUEsR0FBRyxDQUFDL0YsR0FBRCxFQUFNUyxTQUFOLENBQUg7QUFDRDtBQUNGO0FBQ0YsS0F4QkQ7O0FBNEJBLFFBQUltRixPQUFPLEdBQUd6RSxNQUFkOztBQUNBLFdBQU95RSxPQUFPLEtBQUt4RixNQUFNLENBQUM0RixTQUFuQixJQUFnQyxDQUFDSixPQUFPLENBQUNLLGNBQVIsQ0FBdUIsT0FBdkIsQ0FBeEMsRUFBeUU7QUFDdkVOLE1BQUFBLFdBQVcsQ0FBQywyQkFBZUMsT0FBZixFQUF3QixPQUF4QixDQUFELEVBQW1DQSxPQUFuQyxDQUFYO0FBQ0FFLE1BQUFBLGVBQWUsQ0FBQywyQkFBZUYsT0FBZixFQUF3QixXQUF4QixDQUFELENBQWY7QUFDQUEsTUFBQUEsT0FBTyxHQUFHeEYsTUFBTSxDQUFDQyxjQUFQLENBQXNCdUYsT0FBdEIsQ0FBVjtBQUNEOztBQUlELFFBQUksS0FBSy9GLEtBQVQsRUFBZ0I7QUFDZDhGLE1BQUFBLFdBQVcsQ0FBQyxLQUFLOUYsS0FBTixFQUFhc0IsTUFBYixDQUFYO0FBQ0Q7O0FBQ0QsUUFBSSxLQUFLVixTQUFULEVBQW9CO0FBQ2xCcUYsTUFBQUEsZUFBZSxDQUFDLEtBQUtyRixTQUFOLENBQWY7QUFDRDs7QUFFRCxXQUFPO0FBRUxVLE1BQUFBLE1BQU0sRUFBRSx1QkFBV0EsTUFBWCxFQUFtQitFLE1BQW5CLENBQ04sQ0FBQ0MsTUFBRCxFQUFTbkcsR0FBVCxLQUFpQjtBQUNmLFlBQUlzRixXQUFXLENBQUN0RixHQUFELENBQWYsRUFBc0I7QUFDcEJtRyxVQUFBQSxNQUFNLENBQUNuRyxHQUFELENBQU4sR0FBY21CLE1BQU0sQ0FBQ25CLEdBQUQsQ0FBcEI7QUFDRDs7QUFDRCxlQUFPbUcsTUFBUDtBQUNELE9BTkssRUFVTi9GLE1BQU0sQ0FBQ2dHLE1BQVAsQ0FBY2hHLE1BQU0sQ0FBQ0MsY0FBUCxDQUFzQmMsTUFBdEIsQ0FBZCxDQVZNLENBRkg7QUFjTHRCLE1BQUFBLEtBQUssRUFBRU8sTUFBTSxDQUFDeUYsSUFBUCxDQUFZUCxXQUFaLENBZEY7QUFlTDdFLE1BQUFBLFNBQVMsRUFBRThFO0FBZk4sS0FBUDtBQWlCRDs7QUFFYSxRQUFSYyxRQUFRLENBQUNuRixJQUFELEVBQU9vRixZQUFQLEVBQXFCdkUsR0FBckIsRUFBMEIsR0FBR3dFLElBQTdCLEVBQW1DO0FBQy9DLFFBQUlKLE1BQU0sR0FBR0csWUFBWSxHQUFHQyxJQUFJLENBQUNDLEtBQUwsRUFBSCxHQUFrQnhILFNBQTNDOztBQUNBLFNBQUssTUFBTXNDLE9BQVgsSUFBc0IsS0FBS21GLFNBQUwsQ0FBZXZGLElBQWYsQ0FBdEIsRUFBNEM7QUFDMUMsVUFBSW9GLFlBQUosRUFBa0I7QUFDaEIsY0FBTXRFLEdBQUcsR0FBRyxNQUFNVixPQUFPLENBQUNvRixJQUFSLENBQWEsSUFBYixFQUFtQjNFLEdBQW5CLEVBQXdCb0UsTUFBeEIsRUFBZ0MsR0FBR0ksSUFBbkMsQ0FBbEI7O0FBQ0EsWUFBSXZFLEdBQUcsS0FBS2hELFNBQVosRUFBdUI7QUFDckJtSCxVQUFBQSxNQUFNLEdBQUduRSxHQUFUO0FBQ0Q7QUFDRixPQUxELE1BS087QUFDTCxjQUFNVixPQUFPLENBQUNvRixJQUFSLENBQWEsSUFBYixFQUFtQjNFLEdBQW5CLEVBQXdCLEdBQUd3RSxJQUEzQixDQUFOO0FBQ0Q7QUFDRjs7QUFDRCxXQUFPSixNQUFQO0FBQ0Q7O0FBRWMsUUFBVFEsU0FBUyxHQUEwQztBQUd2RCxXQUFPLElBQVA7QUFDRDs7QUFVRDFDLEVBQUFBLGdCQUFnQixDQUFDeEQsU0FBRCxFQUFZO0FBQzFCLFFBQUlBLFNBQVMsSUFBSSxJQUFqQixFQUF1QjtBQUNyQixhQUFPLE1BQU0sSUFBYjtBQUNELEtBRkQsTUFFTyxJQUFJLHVCQUFVQSxTQUFWLENBQUosRUFBMEI7QUFDL0IsYUFBTyxNQUFNQSxTQUFiO0FBQ0QsS0FGTSxNQUVBLElBQUksd0JBQVdBLFNBQVgsQ0FBSixFQUEyQjtBQUNoQyxhQUFPLE9BQU9zQixHQUFQLEVBQVk2RSxNQUFaLEtBQXVCO0FBQzVCLGNBQU01RSxHQUFHLEdBQUcsTUFBTXZCLFNBQVMsQ0FBQ3NCLEdBQUQsRUFBTTZFLE1BQU4sQ0FBM0I7QUFFQSxlQUFPLEtBQUszQyxnQkFBTCxDQUFzQmpDLEdBQXRCLEVBQTJCRCxHQUEzQixFQUFnQzZFLE1BQWhDLENBQVA7QUFDRCxPQUpEO0FBS0QsS0FOTSxNQU1BLElBQUksc0JBQVNuRyxTQUFULEtBQXVCLHFCQUFRQSxTQUFSLENBQTNCLEVBQStDO0FBQ3BELGFBQU8sT0FBT3NCLEdBQVAsRUFBWTZFLE1BQVosS0FBdUI7QUFDNUIsY0FBTTtBQUFFQyxVQUFBQTtBQUFGLFlBQVc5RSxHQUFHLENBQUMrRSxLQUFyQjs7QUFDQSxZQUFJLENBQUNELElBQUwsRUFBVztBQUNULGlCQUFPLEtBQVA7QUFDRDs7QUFDRCxjQUFNMUYsTUFBTSxHQUFHLHFCQUFRVixTQUFSLENBQWY7O0FBR0EsWUFBSSxDQUFDbUcsTUFBRCxJQUFXekYsTUFBTSxDQUFDdUUsUUFBUCxDQUFnQixRQUFoQixDQUFmLEVBQTBDO0FBQ3hDa0IsVUFBQUEsTUFBTSxHQUFHLE1BQU0sS0FBS0QsU0FBTCxDQUFlNUUsR0FBZixDQUFmO0FBQ0Q7O0FBQ0QsZUFBTyxDQUFDLENBQUNaLE1BQU0sQ0FBQzRGLElBQVAsQ0FRUDlHLEtBQUssSUFBSTtBQUFBOztBQUNQLGlCQUFPQSxLQUFLLEtBQUssT0FBVixHQUNINEcsSUFBSSxDQUFDL0ksV0FBTCxLQUFxQixLQUFLa0osVUFBMUIsSUFDRixvQkFBT0gsSUFBSSxDQUFDSSxHQUFMLEVBQVAsRUFBbUJsRixHQUFHLENBQUNtRixRQUF2QixDQUZLLEdBR0hqSCxLQUFLLEtBQUssUUFBVixjQUNFMkcsTUFERixxQkFDRSxRQUFRTyxTQURWLG9CQUNFLFFBQVFBLFNBQVIsQ0FBb0JOLElBQXBCLENBREYsR0FFRUEsSUFBSSxDQUFDTyxRQUFMLENBQWNuSCxLQUFkLENBTE47QUFNRCxTQWZNLENBQVQ7QUFpQkQsT0E1QkQ7QUE2QkQsS0E5Qk0sTUE4QkE7QUFDTCxZQUFNLElBQUkyQyx1QkFBSixDQUFvQixJQUFwQixFQUNILG1DQUFrQ25DLFNBQVUsR0FEekMsQ0FBTjtBQUdEO0FBQ0Y7O0FBRURPLEVBQUFBLGlCQUFpQixDQUFDUCxTQUFELEVBQVk7QUFDM0IsV0FBTyx3QkFBV0EsU0FBWCxJQUNILDZCQUFpQkEsU0FBakIsQ0FERyxHQUVILHNCQUFTQSxTQUFULElBQ0csSUFBR0EsU0FBVSxHQURoQixHQUVFLHFCQUFRQSxTQUFSLElBQ0csSUFBR0EsU0FBUyxDQUFDdUMsR0FBVixDQUFjL0MsS0FBSyxJQUFLLElBQUdBLEtBQU0sR0FBakMsRUFBcUNvSCxJQUFyQyxDQUEwQyxJQUExQyxDQUFnRCxHQUR0RCxHQUVFLEVBTlI7QUFPRDs7QUFFd0IsUUFBbkJsRCxtQkFBbUIsQ0FBQ0gsYUFBRCxFQUFnQmpDLEdBQWhCLEVBQXFCNkUsTUFBckIsRUFBNkI7QUFDcEQsVUFBTVUsRUFBRSxHQUFHLE1BQU10RCxhQUFhLENBQUNqQyxHQUFELEVBQU02RSxNQUFOLENBQTlCOztBQUNBLFFBQUlVLEVBQUUsS0FBSyxJQUFYLEVBQWlCO0FBQ2YsWUFBTSxJQUFJQywwQkFBSixFQUFOO0FBQ0Q7QUFDRjs7QUFFRHBKLEVBQUFBLEdBQUcsQ0FBQ3FKLEdBQUQsRUFBTUMsTUFBTSxHQUFHLENBQWYsRUFBa0I7QUFDbkIsUUFBSSxLQUFLeEosT0FBVCxFQUFrQjtBQUNoQnlKLE1BQUFBLE9BQU8sQ0FBQ0MsSUFBUixDQUFjLEdBQUUsS0FBS0MsTUFBTCxDQUFZSCxNQUFaLENBQW9CLEdBQUVELEdBQUksRUFBMUM7QUFDRDtBQUNGOztBQXJlcUI7Ozs7QUF3ZXhCSyxrQkFBYUMsS0FBYixDQUFtQmpLLFVBQVUsQ0FBQ21JLFNBQTlCOztBQUVBLE1BQU1wQixjQUFjLEdBQUcsSUFBSW1ELE9BQUosRUFBdkI7O0FBRUEsU0FBU3RHLHNCQUFULENBQWdDdUcsTUFBaEMsRUFBd0N4SSxPQUF4QyxFQUFpRDtBQUMvQyxRQUFNO0FBQ0o4QixJQUFBQSxPQURJO0FBRUpaLElBQUFBLE1BRkk7QUFHSkQsSUFBQUEsU0FISTtBQUlKd0gsSUFBQUEsVUFKSTtBQUtKQyxJQUFBQSxPQUxJO0FBTUpDLElBQUFBLEtBTkk7QUFPSmpKLElBQUFBO0FBUEksTUFRRjhJLE1BUko7QUFZQTVILEVBQUFBLE1BQU0sQ0FBQ2lGLGNBQVAsQ0FBc0IyQyxNQUF0QixFQUE4QjVILE1BQU0sQ0FBQ0MsY0FBUCxDQUFzQmIsT0FBdEIsQ0FBOUI7QUFFQThCLEVBQUFBLE9BQU8sQ0FBQ2IsU0FBUixHQUFvQkEsU0FBcEI7QUFDQWEsRUFBQUEsT0FBTyxDQUFDcEMsVUFBUixHQUFxQkEsVUFBckI7O0FBRUEsTUFBSXdCLE1BQUosRUFBWTtBQUNWLFVBQU0sQ0FBQ1IsSUFBRCxFQUFPbkIsSUFBUCxJQUFlLHFCQUFRMkIsTUFBUixDQUFyQjtBQUNBWSxJQUFBQSxPQUFPLENBQUNwQixJQUFSLEdBQWVBLElBQWY7QUFDQW9CLElBQUFBLE9BQU8sQ0FBQ3ZDLElBQVIsR0FBZUEsSUFBZjtBQUNEOztBQUVELE1BQUlrSixVQUFKLEVBQWdCO0FBQ2QsVUFBTSxDQUFDRyxXQUFELEVBQWNDLE9BQWQsSUFBeUJKLFVBQS9CO0FBQ0EsVUFBTUssVUFBVSxHQUFHLHFCQUFRRixXQUFSLENBQW5CO0FBQ0E5RyxJQUFBQSxPQUFPLENBQUMyRyxVQUFSLEdBQXFCSyxVQUFVLEdBQUdGLFdBQUgsR0FBaUJILFVBQWhEOztBQUlBLFFBQUlLLFVBQUosRUFBZ0I7QUFDZGhILE1BQUFBLE9BQU8sQ0FBQytHLE9BQVIsR0FBa0IsRUFDaEIsR0FBRy9HLE9BQU8sQ0FBQytHLE9BREs7QUFFaEJKLFFBQUFBLFVBQVUsRUFBRUk7QUFGSSxPQUFsQjtBQUlEO0FBQ0Y7O0FBRUQsTUFBSUgsT0FBSixFQUFhO0FBQ1gsVUFBTSxDQUFDSyxRQUFELEVBQVdGLE9BQVgsSUFBc0IscUJBQVFILE9BQVIsQ0FBNUI7QUFDQTVHLElBQUFBLE9BQU8sQ0FBQzRHLE9BQVIsR0FBa0JLLFFBQWxCOztBQUlBLFFBQUlGLE9BQUosRUFBYTtBQUNYL0csTUFBQUEsT0FBTyxDQUFDK0csT0FBUixHQUFrQixFQUNoQixHQUFHL0csT0FBTyxDQUFDK0csT0FESztBQUVoQkosUUFBQUEsVUFBVSxFQUFFSTtBQUZJLE9BQWxCO0FBSUQ7QUFDRjs7QUFFRCxNQUFJRixLQUFKLEVBQVc7QUFDVDdHLElBQUFBLE9BQU8sQ0FBQzZHLEtBQVIsR0FBZ0IscUJBQVFBLEtBQVIsQ0FBaEI7QUFDRDs7QUFFRCxTQUFPN0csT0FBUDtBQUNEIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGNoYWxrIGZyb20gJ2NoYWxrJ1xuaW1wb3J0IHsgZ2V0T3duUHJvcGVydHksIGdldEFsbEtleXMsIGRlc2NyaWJlRnVuY3Rpb24gfSBmcm9tICdAL3V0aWxzJ1xuaW1wb3J0IHsgRXZlbnRFbWl0dGVyIH0gZnJvbSAnQC9saWInXG5pbXBvcnQgQ29udHJvbGxlckFjdGlvbiBmcm9tICcuL0NvbnRyb2xsZXJBY3Rpb24nXG5pbXBvcnQgTWVtYmVyQWN0aW9uIGZyb20gJy4vTWVtYmVyQWN0aW9uJ1xuaW1wb3J0IHtcbiAgUmVzcG9uc2VFcnJvciwgV3JhcHBlZEVycm9yLCBDb250cm9sbGVyRXJyb3IsIEF1dGhvcml6YXRpb25FcnJvclxufSBmcm9tICdAL2Vycm9ycydcbmltcG9ydCB7XG4gIGlzT2JqZWN0LCBpc1N0cmluZywgaXNBcnJheSwgaXNCb29sZWFuLCBpc0Z1bmN0aW9uLCBhc0FycmF5LCBlcXVhbHMsXG4gIHBhcnNlRGF0YVBhdGgsIG5vcm1hbGl6ZURhdGFQYXRoXG59IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbmV4cG9ydCBjbGFzcyBDb250cm9sbGVyIHtcbiAgY29uc3RydWN0b3IoYXBwLCBuYW1lc3BhY2UpIHtcbiAgICB0aGlzLmFwcCA9IGFwcFxuICAgIHRoaXMubmFtZXNwYWNlID0gdGhpcy5uYW1lc3BhY2UgfHwgbmFtZXNwYWNlXG4gICAgdGhpcy5sb2dnaW5nID0gdGhpcy5hcHAuY29uZmlnLmxvZy5yb3V0ZXNcbiAgICB0aGlzLmxldmVsID0gMFxuICB9XG5cbiAgLy8gQG92ZXJyaWRhYmxlXG4gIGluaXRpYWxpemUoKSB7XG4gIH1cblxuICBzZXR1cChpc1Jvb3QgPSB0cnVlLCBzZXR1cEFjdGlvbnNPYmplY3QgPSB0cnVlKSB7XG4gICAgdGhpcy5fc2V0dXBFbWl0dGVyKHRoaXMuaG9va3MsIHtcbiAgICAgIC8vIFN1cHBvcnQgd2lsZGNhcmQgaG9va3Mgb25seSBvbiBjb250cm9sbGVyczpcbiAgICAgIHdpbGRjYXJkOiB0cnVlXG4gICAgfSlcbiAgICAvLyBJZiB0aGUgY2xhc3MgbmFtZSBlbmRzIGluICdDb250cm9sbGVyJywgcmVtb3ZlIGl0IGZyb20gY29udHJvbGxlciBuYW1lLlxuICAgIHRoaXMubmFtZSA9IHRoaXMubmFtZSB8fFxuICAgICAgdGhpcy5jb25zdHJ1Y3Rvci5uYW1lLm1hdGNoKC9eKC4qPykoPzpDb250cm9sbGVyfCkkLylbMV1cbiAgICBpZiAodGhpcy5wYXRoID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMucGF0aCA9IHRoaXMuYXBwLm5vcm1hbGl6ZVBhdGgodGhpcy5uYW1lKVxuICAgIH1cbiAgICB0aGlzLnRyYW5zYWN0ZWQgPSAhIXRoaXMudHJhbnNhY3RlZFxuICAgIGlmIChpc1Jvb3QpIHtcbiAgICAgIGNvbnN0IHsgcGF0aCwgbmFtZXNwYWNlIH0gPSB0aGlzXG4gICAgICAvLyBUT0RPOiBUaGUgZGlzdGluY3Rpb24gYmV0d2VlbiAgYHVybGAgYW5kIGBwYXRoYCBpcyBhIGJpdCB0cmlja3ksIHNpbmNlXG4gICAgICAvLyB3aGF0IHdlIGNhbGwgYHVybGAgaGVyZSBpcyBjYWxsZWQgYHBhdGhgIGluIFJvdXRlciwgYW5kIG1heSBjb250YWluXG4gICAgICAvLyBtYXBwZWQgcGFyYW1ldGVycyBvciB3aWxkY2FyZHMuIENvbnNpZGVyIGBwYXRoYCAvIGByb3V0ZWAgaW5zdGVhZD9cbiAgICAgIGNvbnN0IHVybCA9IHBhdGggPyBgLyR7cGF0aH1gIDogJydcbiAgICAgIHRoaXMudXJsID0gbmFtZXNwYWNlID8gYC8ke25hbWVzcGFjZX0ke3VybH1gIDogdXJsXG4gICAgICB0aGlzLmxvZyhcbiAgICAgICAgYCR7XG4gICAgICAgICAgbmFtZXNwYWNlID8gY2hhbGsuZ3JlZW4oYC8ke25hbWVzcGFjZX0vYCkgOiAnJ1xuICAgICAgICB9JHtcbiAgICAgICAgICBjaGFsay5jeWFuKHBhdGgpXG4gICAgICAgIH0ke1xuICAgICAgICAgIGNoYWxrLndoaXRlKCc6JylcbiAgICAgICAgfWAsXG4gICAgICAgIHRoaXMubGV2ZWxcbiAgICAgIClcbiAgICAgIGlmIChzZXR1cEFjdGlvbnNPYmplY3QpIHtcbiAgICAgICAgdGhpcy5hY3Rpb25zID0gdGhpcy5hY3Rpb25zIHx8IHRoaXMucmVmbGVjdEFjdGlvbnNPYmplY3QoKVxuICAgICAgICAvLyBOb3cgdGhhdCB0aGUgaW5zdGFuY2UgZmllbGRzIGFyZSByZWZsZWN0ZWQgaW4gdGhlIGBjb250cm9sbGVyYCBvYmplY3RcbiAgICAgICAgLy8gd2UgY2FuIHVzZSB0aGUgbm9ybWFsIGluaGVyaXRhbmNlIG1lY2hhbmlzbSB0aHJvdWdoIGBzZXR1cEFjdGlvbnMoKWA6XG4gICAgICAgIHRoaXMuYWN0aW9ucyA9IHRoaXMuc2V0dXBBY3Rpb25zKCdhY3Rpb25zJylcbiAgICAgIH1cbiAgICAgIHRoaXMuYXNzZXRzID0gdGhpcy5zZXR1cEFzc2V0cygpXG4gICAgfVxuICB9XG5cbiAgcmVmbGVjdEFjdGlvbnNPYmplY3QoKSB7XG4gICAgLy8gT24gYmFzZSBjb250cm9sbGVycywgdGhlIGFjdGlvbnMgY2FuIGJlIGRlZmluZWQgZGlyZWN0bHkgaW4gdGhlIGNsYXNzXG4gICAgLy8gaW5zdGVhZCBvZiBpbnNpZGUgYW4gYWN0aW9ucyBvYmplY3QsIGFzIGlzIGRvbmUgd2l0aCBtb2RlbCBhbmQgcmVsYXRpb25cbiAgICAvLyBjb250cm9sbGVycy4gQnV0IGluIG9yZGVyIHRvIHVzZSB0aGUgc2FtZSBzdHJ1Y3R1cmUgZm9yIGluaGVyaXRhbmNlIGFzXG4gICAgLy8gdGhlc2Ugb3RoZXIgY29udHJvbGxlcnMsIHdlIHJlZmxlY3QgdGhlc2UgaW5zdGFuY2UgZmllbGRzIGluIGEgc2VwYXJhdGVcbiAgICAvLyBgYWN0aW9uc2Agb2JqZWN0LlxuICAgIGNvbnN0IHsgYWxsb3cgfSA9IHRoaXNcbiAgICBjb25zdCBjb250cm9sbGVyID0gYWxsb3cgPyB7IGFsbG93IH0gOiB7fVxuXG4gICAgY29uc3QgYWRkQWN0aW9uID0ga2V5ID0+IHtcbiAgICAgIGNvbnN0IHZhbHVlID0gdGhpc1trZXldXG4gICAgICAvLyBOT1RFOiBPbmx5IGFkZCBpbnN0YW5jZSBtZXRob2RzIHRoYXQgaGF2ZSBhIEBhY3Rpb24oKSBkZWNvcmF0b3IsXG4gICAgICAvLyB3aGljaCBpbiB0dXJuIHNldHMgdGhlIGB2ZXJiYCBwcm9wZXJ0eSBvbiB0aGUgbWV0aG9kLCBvciBhY3Rpb24gb2JqZWN0c1xuICAgICAgLy8gd2hpY2ggaGF2ZSB0aGUgYHZlcmJgIHByb3BlcnR5OlxuICAgICAgaWYgKHZhbHVlPy52ZXJiKSB7XG4gICAgICAgIGNvbnRyb2xsZXJba2V5XSA9IHZhbHVlXG4gICAgICB9XG4gICAgfVxuICAgIC8vIFVzZSBgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoKWAgdG8gZ2V0IHRoZSBmaWVsZHMsIGluIG9yZGVyIHRvXG4gICAgLy8gbm90IGFsc28gcmVjZWl2ZSB2YWx1ZXMgZnJvbSBwYXJlbnRzICh0aG9zZSBhcmUgZmV0Y2hlZCBsYXRlciBpblxuICAgIC8vIGBpbmhlcml0VmFsdWVzKClgLCBzZWUgYGdldFBhcmVudFZhbHVlcygpYCkuXG4gICAgY29uc3QgcHJvdG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcylcbiAgICBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhwcm90bykuZm9yRWFjaChhZGRBY3Rpb24pXG4gICAgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModGhpcykuZm9yRWFjaChhZGRBY3Rpb24pXG4gICAgcmV0dXJuIGNvbnRyb2xsZXJcbiAgfVxuXG4gIHNldHVwUm91dGUodmVyYiwgdXJsLCB0cmFuc2FjdGVkLCBhdXRob3JpemUsIGFjdGlvbiwgaGFuZGxlcnMpIHtcbiAgICB0aGlzLmxvZyhcbiAgICAgIGAke1xuICAgICAgICBjaGFsay5tYWdlbnRhKHZlcmIudG9VcHBlckNhc2UoKSlcbiAgICAgIH0gJHtcbiAgICAgICAgY2hhbGsuZ3JlZW4odGhpcy51cmwpXG4gICAgICB9JHtcbiAgICAgICAgY2hhbGsuY3lhbih1cmwuc2xpY2UodGhpcy51cmwubGVuZ3RoKSlcbiAgICAgIH0gJHtcbiAgICAgICAgY2hhbGsud2hpdGUodGhpcy5kZXNjcmliZUF1dGhvcml6ZShhdXRob3JpemUpKVxuICAgICAgfWAsXG4gICAgICB0aGlzLmxldmVsICsgMVxuICAgIClcbiAgICB0aGlzLmFwcC5hZGRSb3V0ZSh2ZXJiLCB1cmwsIHRyYW5zYWN0ZWQsIGhhbmRsZXJzLCB0aGlzLCBhY3Rpb24pXG4gIH1cblxuICBzZXR1cEFjdGlvbnModHlwZSkge1xuICAgIGNvbnN0IHtcbiAgICAgIHZhbHVlczogYWN0aW9ucyxcbiAgICAgIGF1dGhvcml6ZVxuICAgIH0gPSB0aGlzLnByb2Nlc3NWYWx1ZXModGhpcy5pbmhlcml0VmFsdWVzKHR5cGUpKVxuICAgIGZvciAoY29uc3QgW25hbWUsIGhhbmRsZXJdIG9mIE9iamVjdC5lbnRyaWVzKGFjdGlvbnMpKSB7XG4gICAgICB0aGlzLnNldHVwQWN0aW9uKHR5cGUsIGFjdGlvbnMsIG5hbWUsIGhhbmRsZXIsIGF1dGhvcml6ZVtuYW1lXSlcbiAgICB9XG4gICAgcmV0dXJuIGFjdGlvbnNcbiAgfVxuXG4gIHNldHVwQWN0aW9uKFxuICAgIHR5cGUsXG4gICAgYWN0aW9ucyxcbiAgICBuYW1lLFxuICAgIGhhbmRsZXIsXG4gICAgYXV0aG9yaXplLFxuICAgIC8vIFRoZXNlIHZhbHVlcyBhcmUgb25seSBjaGFuZ2VkIHdoZW4gY2FsbGVkIGZyb21cbiAgICAvLyBgQ29sbGVjdGlvbkNvbnRyb2xsZXIuc2V0dXBBY3Rpb24oKWA6XG4gICAgdmVyYiA9ICdnZXQnLFxuICAgIC8vIFRoZSBkZWZhdWx0IHBhdGggZm9yIGFjdGlvbnMgaXMgdGhlIG5vcm1hbGl6ZWQgbmFtZS5cbiAgICBwYXRoID0gdGhpcy5hcHAubm9ybWFsaXplUGF0aChuYW1lKVxuICApIHtcbiAgICBpZiAoIWlzRnVuY3Rpb24oaGFuZGxlcikpIHtcbiAgICAgIGhhbmRsZXIgPSBzZXR1cEhhbmRsZXJGcm9tT2JqZWN0KGhhbmRsZXIsIGFjdGlvbnMpXG4gICAgfVxuICAgIC8vIEN1c3RvbSBtZW1iZXIgYWN0aW9ucyBoYXZlIHRoZWlyIG93biBjbGFzcyBzbyB0aGV5IGNhbiBmZXRjaCB0aGUgbWVtYmVyc1xuICAgIC8vIGFoZWFkIG9mIHRoZWlyIGNhbGwuXG4gICAgY29uc3QgYWN0aW9uQ2xhc3MgPSB0eXBlID09PSAnbWVtYmVyJyA/IE1lbWJlckFjdGlvbiA6IENvbnRyb2xsZXJBY3Rpb25cbiAgICB0aGlzLnNldHVwQWN0aW9uUm91dGUoXG4gICAgICB0eXBlLFxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5ldy1jYXBcbiAgICAgIG5ldyBhY3Rpb25DbGFzcyh0aGlzLCBoYW5kbGVyLCB0eXBlLCBuYW1lLCB2ZXJiLCBwYXRoLCBhdXRob3JpemUpXG4gICAgKVxuICB9XG5cbiAgc2V0dXBBY3Rpb25Sb3V0ZSh0eXBlLCBhY3Rpb24pIHtcbiAgICBjb25zdCB1cmwgPSB0aGlzLmdldFVybCh0eXBlLCBhY3Rpb24ucGF0aClcbiAgICBjb25zdCB7IHZlcmIsIHRyYW5zYWN0ZWQsIGF1dGhvcml6ZSB9ID0gYWN0aW9uXG4gICAgdGhpcy5zZXR1cFJvdXRlKHZlcmIsIHVybCwgdHJhbnNhY3RlZCwgYXV0aG9yaXplLCBhY3Rpb24sIFtcbiAgICAgIGFzeW5jIGN0eCA9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgYWN0aW9uLmNhbGxBY3Rpb24oY3R4KVxuICAgICAgICAgIGlmIChyZXMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgY3R4LmJvZHkgPSByZXNcbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIHRocm93IGVyciBpbnN0YW5jZW9mIFJlc3BvbnNlRXJyb3IgPyBlcnIgOiBuZXcgV3JhcHBlZEVycm9yKGVycilcbiAgICAgICAgfVxuICAgICAgfVxuICAgIF0pXG4gIH1cblxuICBzZXR1cEFzc2V0cygpIHtcbiAgICBjb25zdCB7XG4gICAgICB2YWx1ZXM6IGFzc2V0cyxcbiAgICAgIGF1dGhvcml6ZVxuICAgIH0gPSB0aGlzLnByb2Nlc3NWYWx1ZXModGhpcy5pbmhlcml0VmFsdWVzKCdhc3NldHMnKSlcbiAgICBmb3IgKGNvbnN0IFtkYXRhUGF0aCwgY29uZmlnXSBvZiBPYmplY3QuZW50cmllcyhhc3NldHMgfHwge30pKSB7XG4gICAgICB0aGlzLnNldHVwQXNzZXRSb3V0ZShkYXRhUGF0aCwgY29uZmlnLCBhdXRob3JpemVbZGF0YVBhdGhdKVxuICAgIH1cbiAgICByZXR1cm4gYXNzZXRzXG4gIH1cblxuICBzZXR1cEFzc2V0Um91dGUoZGF0YVBhdGgsIGNvbmZpZywgYXV0aG9yaXplKSB7XG4gICAgY29uc3Qge1xuICAgICAgc3RvcmFnZTogc3RvcmFnZU5hbWUsXG4gICAgICAvLyBUT0RPOiBXaGF0IGV4YWN0bHkgc2hvdWxkIGNvbnRyb2wgdGhlIHVzZSBvZiBgdHJhbnNhY3RlZGA/XG4gICAgICB0cmFuc2FjdGVkLFxuICAgICAgLi4uc2V0dGluZ3NcbiAgICB9ID0gY29uZmlnXG4gICAgY29uc3Qgc3RvcmFnZSA9IHRoaXMuYXBwLmdldFN0b3JhZ2Uoc3RvcmFnZU5hbWUpXG4gICAgaWYgKCFzdG9yYWdlKSB7XG4gICAgICB0aHJvdyBuZXcgQ29udHJvbGxlckVycm9yKHRoaXMsXG4gICAgICAgIGBVbmtub3duIHN0b3JhZ2UgY29uZmlndXJhdGlvbjogJyR7c3RvcmFnZU5hbWV9J2BcbiAgICAgIClcbiAgICB9XG4gICAgY29uc3QgdG9rZW5zID0gcGFyc2VEYXRhUGF0aChkYXRhUGF0aClcbiAgICBjb25zdCBnZXREYXRhUGF0aCA9IGNhbGxiYWNrID0+IG5vcm1hbGl6ZURhdGFQYXRoKHRva2Vucy5tYXAoY2FsbGJhY2spKVxuXG4gICAgLy8gUmVwbGFjZSB3aWxkY2FyZHMgd2l0aCBudW1iZXJlZCBpbmRpY2VzIGFuZCBjb252ZXJ0IHRvICcvJy1ub3RhdGlvbjpcbiAgICBsZXQgaW5kZXggPSAwXG4gICAgY29uc3QgbXVsdGlwbGVXaWxkY2FyZHMgPSB0b2tlbnMuZmlsdGVyKHRva2VuID0+IHRva2VuID09PSAnKicpLmxlbmd0aCA+IDFcbiAgICBjb25zdCBub3JtYWxpemVkUGF0aCA9IGdldERhdGFQYXRoKFxuICAgICAgdG9rZW4gPT4gdG9rZW4gPT09ICcqJ1xuICAgICAgICA/IG11bHRpcGxlV2lsZGNhcmRzXG4gICAgICAgICAgPyBgOmluZGV4JHsrK2luZGV4fWBcbiAgICAgICAgICA6ICc6aW5kZXgnXG4gICAgICAgIDogdGhpcy5hcHAubm9ybWFsaXplUGF0aCh0b2tlbilcbiAgICApXG5cbiAgICAvLyBDb252ZXJ0IGBkYXRhUGF0aGAgdG8gYSByZWd1bGFyIGV4cHJlc3Npb24gdG8gbWF0Y2ggZmllbGQgbmFtZXNcbiAgICAvLyBhZ2FpbnN0LCBidXQgY29udmVydCB3aWxkY2FyZHMgKCopIHRvIG1hdGNoIGJvdGggbnVtZXJpYyBpZHMgYW5kIHdvcmRzLFxuICAgIC8vIGUuZy4gJ2NyZWF0ZSc6XG4gICAgY29uc3QgbWF0Y2hEYXRhUGF0aCA9IG5ldyBSZWdFeHAoXG4gICAgICBgXiR7Z2V0RGF0YVBhdGgodG9rZW4gPT4gdG9rZW4gPT09ICcqJyA/ICdcXFxcdysnIDogdG9rZW4pfSRgXG4gICAgKVxuXG4gICAgY29uc3QgdXJsID0gdGhpcy5nZXRVcmwoJ2NvbnRyb2xsZXInLCBgdXBsb2FkLyR7bm9ybWFsaXplZFBhdGh9YClcbiAgICBjb25zdCB1cGxvYWQgPSBzdG9yYWdlLmdldFVwbG9hZEhhbmRsZXIoe1xuICAgICAgLi4uc2V0dGluZ3MsXG4gICAgICAvLyBPbmx5IGxldCB1cGxvYWRzIHBhc3MgdGhhdCBtYXRjaCB0aGUgbm9ybWFsaXplUGF0aCArIHdpbGRjYXJkczpcbiAgICAgIGZpbGVGaWx0ZXI6IChyZXEsIGZpbGUsIGNiKSA9PiB7XG4gICAgICAgIGNiKG51bGwsIG1hdGNoRGF0YVBhdGgudGVzdChmaWxlLmZpZWxkbmFtZSkpXG4gICAgICB9XG4gICAgfSlcblxuICAgIGNvbnN0IGF1dGhvcml6YXRpb24gPSB0aGlzLnByb2Nlc3NBdXRob3JpemUoYXV0aG9yaXplKVxuICAgIHRoaXMuc2V0dXBSb3V0ZSgncG9zdCcsIHVybCwgdHJhbnNhY3RlZCwgYXV0aG9yaXplLCBudWxsLCBbXG4gICAgICBhc3luYyAoY3R4LCBuZXh0KSA9PiB7XG4gICAgICAgIGF3YWl0IHRoaXMuaGFuZGxlQXV0aG9yaXphdGlvbihhdXRob3JpemF0aW9uLCBjdHgpXG4gICAgICAgIHJldHVybiBuZXh0KClcbiAgICAgIH0sXG5cbiAgICAgIHVwbG9hZCxcblxuICAgICAgYXN5bmMgKGN0eCwgbmV4dCkgPT4ge1xuICAgICAgICBjb25zdCBmaWxlcyA9IHN0b3JhZ2UuY29udmVydFN0b3JhZ2VGaWxlcyhjdHgucmVxdWVzdC5maWxlcylcbiAgICAgICAgYXdhaXQgdGhpcy5hcHAuY3JlYXRlQXNzZXRzKHN0b3JhZ2UsIGZpbGVzLCAwLCBjdHgudHJhbnNhY3Rpb24pXG4gICAgICAgIC8vIFNlbmQgdGhlIGZpbGUgb2JqZWN0cyBiYWNrIGZvciB0aGUgdXBsb2FkIGNvbXBvbmVudCB0byBzdG9yZSBpbiB0aGVcbiAgICAgICAgLy8gZGF0YS5cbiAgICAgICAgY3R4LmJvZHkgPSBmaWxlc1xuICAgICAgICByZXR1cm4gbmV4dCgpXG4gICAgICB9XG4gICAgXSlcbiAgfVxuXG4gIGNvbXBvc2UoKSB7XG4gICAgLy8gVG8gYmUgb3ZlcnJpZGRlbiBpbiBzdWItY2xhc3NlcywgaWYgdGhlIGNvbnRyb2xsZXIgbmVlZHMgdG8gaW5zdGFsbFxuICAgIC8vIG1pZGRsZXdhcmUuIEZvciBub3JtYWwgcm91dGVzLCB1c2UgYHRoaXMuYXBwLmFkZFJvdXRlKClgIGluc3RlYWQuXG4gIH1cblxuICBnZXRQYXRoKHR5cGUsIHBhdGgpIHtcbiAgICAvLyBUbyBiZSBvdmVycmlkZGVuIGJ5IHN1Yi1jbGFzc2VzLlxuICAgIHJldHVybiBwYXRoXG4gIH1cblxuICBnZXRVcmwodHlwZSwgcGF0aCkge1xuICAgIHBhdGggPSB0aGlzLmdldFBhdGgodHlwZSwgcGF0aClcbiAgICAvLyBVc2UgJy4nIGFzIHRoZSBwYXRoIGZvciB0aGUgY29udHJvbGxlcidzIFwiaW5kZXhcIiBhY3Rpb24uXG4gICAgcmV0dXJuIHBhdGggJiYgcGF0aCAhPT0gJy4nID8gYCR7dGhpcy51cmx9LyR7cGF0aH1gIDogdGhpcy51cmxcbiAgfVxuXG4gIGluaGVyaXRWYWx1ZXModHlwZSkge1xuICAgIC8vIEdldHMgdGhlIGNvbnRyb2xsZXIgY2xhc3MncyBpbnN0YW5jZSBmaWVsZCBmb3IgYSBnaXZlbiBhY3Rpb24gdHlwZSwgZS5nLlxuICAgIC8vIGBjb250cm9sbGVyYCAoQ29udHJvbGxlciksIGBjb2xsZWN0aW9uYCwgYG1lbWJlcmAgKE1vZGVsQ29udHJvbGxlcixcbiAgICAvLyBSZWxhdGlvbkNvbnRyb2xsZXIpLCBgcmVsYXRpb25gIChSZWxhdGlvbkNvbnRyb2xsZXIpLCBhbmQgc2V0cyB1cCBhblxuICAgIC8vIGluaGVyaXRhbmNlIGNoYWluIGZvciBpdCB0aGF0IGdvZXMgYWxsIHRoZSB3YXkgdXAgdG8gaXQgYmFzZSBjbGFzcyAoZS5nLlxuICAgIC8vIENvbGxlY3Rpb25Db250cm9sbGVyKSwgc28gdGhhdCB0aGUgZGVmYXVsdCBkZWZpbml0aW9ucyBmb3IgYWxsIGh0dHAgdmVyYnNcbiAgICAvLyBjYW4gYmUgY29ycmVjdGx5IGluaGVyaXRlZCBhbmQgb3ZlcnJpZGRlbiB3aGlsZSB1c2luZyBgc3VwZXIuPGFjdGlvbj4oKWAuXG4gICAgY29uc3QgcGFyZW50Q2xhc3MgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcy5jb25zdHJ1Y3RvcilcbiAgICAvLyBDcmVhdGUgb25lIGluc3RhbmNlIG9mIGVhY2ggY29udHJvbGxlciBjbGFzcyB1cCB0aGUgY2hhaW4gaW4gb3JkZXIgdG9cbiAgICAvLyBnZXQgdG8gdGhlaXIgZGVmaW5pdGlvbnMgb2YgdGhlIGluaGVyaXRhYmxlIHZhbHVlcy4gQ2FjaGUgYm90aCBpbnN0YW5jZVxuICAgIC8vIGFuZCByZXNvbHZlZCB2YWx1ZXMgcGVyIHBhcmVudENsYXNzIGluIGFuIGluaGVyaXRhbmNlTWFwLlxuICAgIGlmICghaW5oZXJpdGFuY2VNYXAuaGFzKHBhcmVudENsYXNzKSkge1xuICAgICAgaW5oZXJpdGFuY2VNYXAuc2V0KHBhcmVudENsYXNzLCB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuZXctY2FwXG4gICAgICAgIGluc3RhbmNlOiBuZXcgcGFyZW50Q2xhc3ModGhpcy5hcHAsIHRoaXMubmFtZXNwYWNlKVxuICAgICAgfSlcbiAgICB9XG4gICAgY29uc3QgZW50cnkgPSBpbmhlcml0YW5jZU1hcC5nZXQocGFyZW50Q2xhc3MpXG4gICAgaWYgKCFlbnRyeVt0eXBlXSkge1xuICAgICAgY29uc3QgcGFyZW50ID0gZW50cnkuaW5zdGFuY2VcbiAgICAgIGxldCB2YWx1ZXMgPSBwYXJlbnRbdHlwZV1cbiAgICAgIGlmIChwYXJlbnRDbGFzcyAhPT0gQ29udHJvbGxlcikge1xuICAgICAgICAvLyBSZWN1cnNpdmVseSBzZXQgdXAgaW5oZXJpdGFuY2UgY2hhaW5zLlxuICAgICAgICB2YWx1ZXMgPSBwYXJlbnQuaW5oZXJpdFZhbHVlcyh0eXBlKVxuICAgICAgfVxuICAgICAgZW50cnlbdHlwZV0gPSB2YWx1ZXNcbiAgICB9XG4gICAgLy8gSWYgdGhlcmUgYXJlIG5vIHZhbHVlcyBkZWZpbmVkIG9uIGB0aGlzYCB0aGF0IGRpZmZlciBmcm9tIHRoZSBwYXJlbnQsXG4gICAgLy8gc2V0IHRvIGFuIGVtcHR5IG9iamVjdCBzbyBpbmhlcml0YW5jZSBjYW4gYmUgc2V0IHVwIGFuZCBgcHJvY2Vzc1ZhbHVlcygpYFxuICAgIC8vIGNhbiBzdGlsbCBiZSBjYWxsZWQuXG4gICAgLy8gTk9URTogV2UgY2FuJ3QgY2hlY2sgd2l0aCBgdGhpcy5oYXNPd25Qcm9wZXJ0eSh0eXBlKWAgYmVjYXVzZSB0aGVcbiAgICAvLyBmaWVsZCBjYW4gYmUgb24gdGhlIGNsYXNzIHByb3RvdHlwZSBhcyB3ZWxsLCBpbiBjYXNlIG9mIGFjY2Vzc29ycy5cbiAgICBjb25zdCBwYXJlbnRWYWx1ZXMgPSBlbnRyeVt0eXBlXVxuICAgIGxldCBjdXJyZW50VmFsdWVzID0gdGhpc1t0eXBlXVxuICAgIGlmIChjdXJyZW50VmFsdWVzICYmIGN1cnJlbnRWYWx1ZXMgPT09IHBhcmVudFZhbHVlcykge1xuICAgICAgY3VycmVudFZhbHVlcyA9IHRoaXNbdHlwZV0gPSB7fVxuICAgIH1cbiAgICAvLyBDb21iaW5lIHBhcmVudFZhbHVlcyBhbmQgY3VycmVudFZhbHVlcyB3aXRoIGNvcnJlY3QgaW5oZXJpdGFuY2UuXG4gICAgcmV0dXJuIGlzT2JqZWN0KHBhcmVudFZhbHVlcykgJiYgaXNPYmplY3QoY3VycmVudFZhbHVlcylcbiAgICAgID8gT2JqZWN0LnNldFByb3RvdHlwZU9mKGN1cnJlbnRWYWx1ZXMsIHBhcmVudFZhbHVlcylcbiAgICAgIDogY3VycmVudFZhbHVlc1xuICB9XG5cbiAgcHJvY2Vzc1ZhbHVlcyh2YWx1ZXMpIHtcbiAgICBpZiAoIXZhbHVlcykgcmV0dXJuIHt9XG4gICAgLy8gUmVzcGVjdCBgYWxsb3dgIHNldHRpbmdzIGFuZCBjbGVhciBlbnRyaWVzIHRoYXQgYXJlbid0IGFsbG93ZWQuXG4gICAgLy8gQWxzbyBjb2xsZWN0IGFuZCBleHBhbmQgYGF1dGhvcml6ZWAgc2V0dGluZ3Mgc28gdGhhdCBpbiB0aGUgZW5kLCBhblxuICAgIC8vIGBhdXRob3JpemVgIG9iamVjdCBjYW4gYmUgcmV0dXJuZWQgd2l0aCB2YWxpZCBzZXR0aW5ncyBmb3IgYWxsIHZhbHVlcy5cbiAgICAvL1xuICAgIC8vIFJ1bGVzOlxuICAgIC8vIC0gT3duIHZhbHVlcyBvbiBvYmplY3RzIHRoYXQgZG9uJ3QgZGVmaW5lIGFuIGBhbGxvd2AgYXJyYXkgYXJlXG4gICAgLy8gICBhdXRvbWF0aWNhbGx5IGFsbG93ZWQuIElmIGFuIGBhbGxvd2AgYXJyYXkgaXMgZGVmaW5lZCBhcyB3ZWxsLCB0aGVuXG4gICAgLy8gICB0aGVzZSBvd24gdmFsdWVzIG5lZWQgdG8gYmUgZXhwbGljaXRseSBsaXN0ZWQuXG4gICAgLy8gLSBJZiBubyBgYWxsb3dgIGFycmF5cyBhcmUgZGVmaW5lZCBpbiB0aGUgcHJvdG90eXBhbCBoaWVyYXJjaHksIGVhY2hcbiAgICAvLyAgIGxldmVsIGFsbG93cyBpdHMgb3duIHZhbHVlcywgYW5kIHRoZXNlIGFyZSBtZXJnZWQsIGV4Y2VwdCBmb3IgdGhvc2VcbiAgICAvLyAgIG1hcmtlZCBhcyBgJGNvcmVgLCB3aGljaCBuZWVkIHRvIGJlIGV4cGxpY2l0bHkgbGlzdGVkIGluIGBhbGxvd2AuXG5cbiAgICAvLyBOT1RFOiBgaGFuZGxlQWxsb3coKWAgYW5kIGBoYW5kbGVBdXRob3JpemUoKWAgYXJlIGFwcGxpZWQgaW4gc2VxdWVuY2Ugb2ZcbiAgICAvLyB0aGUgYHZhbHVlc2AgaW5oZXJpdGFuY2UsIGZyb20gc3ViLWNsYXNzIHRvIGJhc2UtY2xhc3MuXG5cbiAgICBjb25zdCBtZXJnZWRBbGxvdyA9IHt9XG4gICAgY29uc3QgbWVyZ2VkQXV0aG9yaXplID0ge31cbiAgICBsZXQgaGFzT3duQWxsb3cgPSBmYWxzZVxuXG4gICAgY29uc3QgZXhjbHVkZUtleSA9IGtleSA9PiBbJ2FsbG93JywgJ2F1dGhvcml6ZSddLmluY2x1ZGVzKGtleSlcblxuICAgIGNvbnN0IGhhbmRsZUFsbG93ID0gKGFsbG93LCBjdXJyZW50KSA9PiB7XG4gICAgICBpZiAoYWxsb3cpIHtcbiAgICAgICAgYWxsb3cgPSBhc0FycmF5KGFsbG93KVxuICAgICAgICBoYXNPd25BbGxvdyA9IHRydWVcbiAgICAgIH0gZWxzZSBpZiAoIWhhc093bkFsbG93KSB7XG4gICAgICAgIC8vIE9ubHkga2VlcCBhZGRpbmcgdG8gdGhlIG1lcmdlZCBgYWxsb3dgIGlmIHdlIGRpZG4ndCBhbHJlYWR5IGVuY291bnRlclxuICAgICAgICAvLyBhbiBvd24gYGFsbG93YCBvYmplY3QgZnVydGhlciB1cCB0aGUgY2hhaW4uXG4gICAgICAgIGFsbG93ID0gT2JqZWN0LmtleXMoY3VycmVudClcbiAgICAgIH1cbiAgICAgIGlmIChhbGxvdykge1xuICAgICAgICBpZiAoYWxsb3cuaW5jbHVkZXMoJyonKSkge1xuICAgICAgICAgIGFsbG93ID0gZ2V0QWxsS2V5cyhjdXJyZW50KVxuICAgICAgICB9XG4gICAgICAgIGZvciAoY29uc3Qga2V5IG9mIGFsbG93KSB7XG4gICAgICAgICAgaWYgKCFleGNsdWRlS2V5KGtleSkpIHtcbiAgICAgICAgICAgIG1lcmdlZEFsbG93W2tleV0gPSB0cnVlXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgaGFuZGxlQXV0aG9yaXplID0gYXV0aG9yaXplID0+IHtcbiAgICAgIGNvbnN0IGFkZCA9IChrZXksIHZhbHVlKSA9PiB7XG4gICAgICAgIC8vIFNpbmNlIHdlJ3JlIHdhbGtpbmcgdXAgaW4gdGhlIGluaGVyaXRhbmNlIGNoYWluLCBvbmx5IHRha2Ugb24gYW5cbiAgICAgICAgLy8gYXV0aG9yaXplIHNldHRpbmcgZm9yIGEgZ2l2ZW4ga2V5IGlmIGl0IHdhc24ndCBhbHJlYWR5IGRlZmluZWQgYmVmb3JlXG4gICAgICAgIGlmIChcbiAgICAgICAgICBrZXkgaW4gdmFsdWVzICYmXG4gICAgICAgICAgIShrZXkgaW4gbWVyZ2VkQXV0aG9yaXplKSAmJlxuICAgICAgICAgICFleGNsdWRlS2V5KGtleSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgbWVyZ2VkQXV0aG9yaXplW2tleV0gPSB2YWx1ZVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChpc09iamVjdChhdXRob3JpemUpKSB7XG4gICAgICAgIGZvciAoY29uc3Qga2V5IGluIGF1dGhvcml6ZSkge1xuICAgICAgICAgIGFkZChrZXksIGF1dGhvcml6ZVtrZXldKVxuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGF1dGhvcml6ZSAhPSBudWxsKSB7XG4gICAgICAgIC8vIFRoaXMgaXMgYSB2YWx1ZXMtd2lkZSBzZXR0aW5nLiBMb29wIHRocm91Z2ggYWxsIHZhbHVlcywgbm90IGp1c3RcbiAgICAgICAgLy8gY3VycmVudCBvbmVzLCBhbmQgYXBwbHkgdG8gYW55IGFjdGlvbiB0aGF0IGRvZXNuJ3QgYWxyZWFkeSBoYXZlIG9uZTpcbiAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gdmFsdWVzKSB7XG4gICAgICAgICAgYWRkKGtleSwgYXV0aG9yaXplKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gUHJvY2VzcyB0aGUgYGFsbG93YCBhbmQgYGF1dGhvcml6ZWAgc2V0dGluZ3MgaW4gc2VxdWVuY2Ugb2YgdGhlIGB2YWx1ZXNgXG4gICAgLy8gaW5oZXJpdGFuY2UsIGZyb20gc3ViLWNsYXNzIHRvIGJhc2UtY2xhc3MuXG4gICAgbGV0IGN1cnJlbnQgPSB2YWx1ZXNcbiAgICB3aGlsZSAoY3VycmVudCAhPT0gT2JqZWN0LnByb3RvdHlwZSAmJiAhY3VycmVudC5oYXNPd25Qcm9wZXJ0eSgnJGNvcmUnKSkge1xuICAgICAgaGFuZGxlQWxsb3coZ2V0T3duUHJvcGVydHkoY3VycmVudCwgJ2FsbG93JyksIGN1cnJlbnQpXG4gICAgICBoYW5kbGVBdXRob3JpemUoZ2V0T3duUHJvcGVydHkoY3VycmVudCwgJ2F1dGhvcml6ZScpKVxuICAgICAgY3VycmVudCA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihjdXJyZW50KVxuICAgIH1cblxuICAgIC8vIEF0IHRoZSBlbmQgb2YgdGhlIGNoYWluLCBhbHNvIHN1cHBvcnQgYm90aCBzZXR0aW5ncyBvbiB0aGUgY29udHJvbGxlci1cbiAgICAvLyBsZXZlbCwgYW5kIHRodXMgYXBwbGllZCB0byBhbGwgYWN0aW9uIG9iamVjdHMgaW4gdGhlIGNvbnRyb2xsZXIuXG4gICAgaWYgKHRoaXMuYWxsb3cpIHtcbiAgICAgIGhhbmRsZUFsbG93KHRoaXMuYWxsb3csIHZhbHVlcylcbiAgICB9XG4gICAgaWYgKHRoaXMuYXV0aG9yaXplKSB7XG4gICAgICBoYW5kbGVBdXRob3JpemUodGhpcy5hdXRob3JpemUpXG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIC8vIENyZWF0ZSBhIGZpbHRlcmVkIGB2YWx1ZXNgIG9iamVjdCB0aGF0IG9ubHkgY29udGFpbnMgdGhlIGFsbG93ZWQgZmllbGRzXG4gICAgICB2YWx1ZXM6IGdldEFsbEtleXModmFsdWVzKS5yZWR1Y2UoXG4gICAgICAgIChyZXN1bHQsIGtleSkgPT4ge1xuICAgICAgICAgIGlmIChtZXJnZWRBbGxvd1trZXldKSB7XG4gICAgICAgICAgICByZXN1bHRba2V5XSA9IHZhbHVlc1trZXldXG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiByZXN1bHRcbiAgICAgICAgfSxcbiAgICAgICAgLy8gQ3JlYXRlIGEgbmV3IG9iamVjdCBmb3IgdGhlIGZpbHRlcmVkIGB2YWx1ZXNgIHRoYXQga2VlcHMgaW5oZXJpdGFuY2VcbiAgICAgICAgLy8gaW50YWN0LiBUaGlzIGlzIHJlcXVpcmVkIGJ5IGBzZXR1cEhhbmRsZXJGcm9tT2JqZWN0KClgLCB0byBzdXBwb3J0XG4gICAgICAgIC8vIGBzdXBlcmAgaW4gaGFuZGxlciBmdW5jdGlvbnMuXG4gICAgICAgIE9iamVjdC5jcmVhdGUoT2JqZWN0LmdldFByb3RvdHlwZU9mKHZhbHVlcykpXG4gICAgICApLFxuICAgICAgYWxsb3c6IE9iamVjdC5rZXlzKG1lcmdlZEFsbG93KSxcbiAgICAgIGF1dGhvcml6ZTogbWVyZ2VkQXV0aG9yaXplXG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZW1pdEhvb2sodHlwZSwgaGFuZGxlUmVzdWx0LCBjdHgsIC4uLmFyZ3MpIHtcbiAgICBsZXQgcmVzdWx0ID0gaGFuZGxlUmVzdWx0ID8gYXJncy5zaGlmdCgpIDogdW5kZWZpbmVkXG4gICAgZm9yIChjb25zdCBoYW5kbGVyIG9mIHRoaXMubGlzdGVuZXJzKHR5cGUpKSB7XG4gICAgICBpZiAoaGFuZGxlUmVzdWx0KSB7XG4gICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IGhhbmRsZXIuY2FsbCh0aGlzLCBjdHgsIHJlc3VsdCwgLi4uYXJncylcbiAgICAgICAgaWYgKHJlcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgcmVzdWx0ID0gcmVzXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGF3YWl0IGhhbmRsZXIuY2FsbCh0aGlzLCBjdHgsIC4uLmFyZ3MpXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHRcbiAgfVxuXG4gIGFzeW5jIGdldE1lbWJlcigvKiBjdHgsIGJhc2UgPSB0aGlzLCBwYXJhbSA9IHsgLi4uIH0gKi8pIHtcbiAgICAvLyBUaGlzIGlzIG9ubHkgZGVmaW5lZCBpbiBgQ29sbGVjdGlvbkNvbnRyb2xsZXJgLCB3aGVyZSBpdCByZXNvbHZlcyB0byB0aGVcbiAgICAvLyBtZW1iZXIgcmVwcmVzZW50ZWQgYnkgdGhlIGdpdmVuIHJvdXRlLlxuICAgIHJldHVybiBudWxsXG4gIH1cblxuICAvKipcbiAgICogQ29udmVydHMgdGhlIGF1dGhvcml6ZSBjb25maWcgc2V0dGluZ3MgaW50byBhbiBhdXRob3JpemF0aW9uIGZ1bmN0aW9uIHRoYXRcbiAgICogY2FuIGJlIHBhc3NlZCB0byBgaGFuZGxlQXV0aG9yaXphdGlvbigpYC5cbiAgICpcbiAgICogQHBhcmFtIHtib29sZWFufGZ1bmN0aW9ufHN0cmluZ3xzdHJpbmdbXX0gYXV0aG9yaXplIHRoZSBhdXRob3JpemUgY29uZmlnXG4gICAqIHNldHRpbmdzXG4gICAqIEByZXR1cm4ge2Z1bmN0aW9ufSB0aGUgYXV0aG9yaXphdGlvbiBmdW5jdGlvblxuICAgKi9cbiAgcHJvY2Vzc0F1dGhvcml6ZShhdXRob3JpemUpIHtcbiAgICBpZiAoYXV0aG9yaXplID09IG51bGwpIHtcbiAgICAgIHJldHVybiAoKSA9PiB0cnVlXG4gICAgfSBlbHNlIGlmIChpc0Jvb2xlYW4oYXV0aG9yaXplKSkge1xuICAgICAgcmV0dXJuICgpID0+IGF1dGhvcml6ZVxuICAgIH0gZWxzZSBpZiAoaXNGdW5jdGlvbihhdXRob3JpemUpKSB7XG4gICAgICByZXR1cm4gYXN5bmMgKGN0eCwgbWVtYmVyKSA9PiB7XG4gICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IGF1dGhvcml6ZShjdHgsIG1lbWJlcilcbiAgICAgICAgLy8gUGFzcyByZXMgdGhyb3VnaCBgcHJvY2Vzc0F1dGhvcml6ZSgpYCB0byBzdXBwb3J0IHN0cmluZ3MgJiBhcnJheXMuXG4gICAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NBdXRob3JpemUocmVzKShjdHgsIG1lbWJlcilcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGlzU3RyaW5nKGF1dGhvcml6ZSkgfHwgaXNBcnJheShhdXRob3JpemUpKSB7XG4gICAgICByZXR1cm4gYXN5bmMgKGN0eCwgbWVtYmVyKSA9PiB7XG4gICAgICAgIGNvbnN0IHsgdXNlciB9ID0gY3R4LnN0YXRlXG4gICAgICAgIGlmICghdXNlcikge1xuICAgICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHZhbHVlcyA9IGFzQXJyYXkoYXV0aG9yaXplKVxuICAgICAgICAvLyBGb3IgJyRvd25lcicsIGZldGNoIGBtZW1iZXJgIG5vdyBpbiBjYXNlIHRoZSBhY3Rpb24gcGFyYW1ldGVyc1xuICAgICAgICAvLyBkaWRuJ3QgYWxyZWFkeSByZXF1ZXN0IGl0OlxuICAgICAgICBpZiAoIW1lbWJlciAmJiB2YWx1ZXMuaW5jbHVkZXMoJyRvd25lcicpKSB7XG4gICAgICAgICAgbWVtYmVyID0gYXdhaXQgdGhpcy5nZXRNZW1iZXIoY3R4KVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiAhIXZhbHVlcy5maW5kKFxuICAgICAgICAvLyBTdXBwb3J0IDMgc2NlbmFyaW9zOlxuICAgICAgICAvLyAtICckc2VsZic6IFRoZSByZXF1ZXN0ZWQgbWVtYmVyIGlzIGNoZWNrZWQgYWdhaW5zdCBgY3R4LnN0YXRlLnVzZXJgXG4gICAgICAgIC8vICAgYW5kIHRoZSBhY3Rpb24gaXMgb25seSBhdXRob3JpemVkIGlmIGl0IG1hdGNoZXMgdGhlIG1lbWJlci5cbiAgICAgICAgLy8gLSAnJG93bmVyJzogVGhlIG1lbWJlciBpcyBhc2tlZCBpZiBpdCBpcyBvd25lZCBieSBgY3R4LnN0YXRlLnVzZXJgXG4gICAgICAgIC8vICAgdGhyb3VnaCB0aGUgb3B0aW9uYWwgYE1vZGVsLiRoYXNPd25lcigpYCBtZXRob2QuXG4gICAgICAgIC8vIC0gYW55IHN0cmluZzogIGBjdHguc3RhdGUudXNlcmAgaXMgY2hlY2tlZCBmb3IgdGhpcyByb2xlIHRocm91Z2hcbiAgICAgICAgLy8gICB0aGUgb3ZlcnJpZGFibGUgYFVzZXJNb2RlbC5oYXNSb2xlKClgIG1ldGhvZC5cbiAgICAgICAgICB2YWx1ZSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gdmFsdWUgPT09ICckc2VsZidcbiAgICAgICAgICAgICAgPyB1c2VyLmNvbnN0cnVjdG9yID09PSB0aGlzLm1vZGVsQ2xhc3MgJiZcbiAgICAgICAgICAgICAgZXF1YWxzKHVzZXIuJGlkKCksIGN0eC5tZW1iZXJJZClcbiAgICAgICAgICAgICAgOiB2YWx1ZSA9PT0gJyRvd25lcidcbiAgICAgICAgICAgICAgICA/IG1lbWJlcj8uJGhhc093bmVyPy4odXNlcilcbiAgICAgICAgICAgICAgICA6IHVzZXIuJGhhc1JvbGUodmFsdWUpXG4gICAgICAgICAgfVxuICAgICAgICApXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBDb250cm9sbGVyRXJyb3IodGhpcyxcbiAgICAgICAgYFVuc3VwcG9ydGVkIGF1dGhvcml6ZSBzZXR0aW5nOiAnJHthdXRob3JpemV9J2BcbiAgICAgIClcbiAgICB9XG4gIH1cblxuICBkZXNjcmliZUF1dGhvcml6ZShhdXRob3JpemUpIHtcbiAgICByZXR1cm4gaXNGdW5jdGlvbihhdXRob3JpemUpXG4gICAgICA/IGRlc2NyaWJlRnVuY3Rpb24oYXV0aG9yaXplKVxuICAgICAgOiBpc1N0cmluZyhhdXRob3JpemUpXG4gICAgICAgID8gYCcke2F1dGhvcml6ZX0nYFxuICAgICAgICA6IGlzQXJyYXkoYXV0aG9yaXplKVxuICAgICAgICAgID8gYFske2F1dGhvcml6ZS5tYXAodmFsdWUgPT4gYCcke3ZhbHVlfSdgKS5qb2luKCcsICcpfV1gXG4gICAgICAgICAgOiAnJ1xuICB9XG5cbiAgYXN5bmMgaGFuZGxlQXV0aG9yaXphdGlvbihhdXRob3JpemF0aW9uLCBjdHgsIG1lbWJlcikge1xuICAgIGNvbnN0IG9rID0gYXdhaXQgYXV0aG9yaXphdGlvbihjdHgsIG1lbWJlcilcbiAgICBpZiAob2sgIT09IHRydWUpIHtcbiAgICAgIHRocm93IG5ldyBBdXRob3JpemF0aW9uRXJyb3IoKVxuICAgIH1cbiAgfVxuXG4gIGxvZyhzdHIsIGluZGVudCA9IDApIHtcbiAgICBpZiAodGhpcy5sb2dnaW5nKSB7XG4gICAgICBjb25zb2xlLmluZm8oYCR7JyAgJy5yZXBlYXQoaW5kZW50KX0ke3N0cn1gKVxuICAgIH1cbiAgfVxufVxuXG5FdmVudEVtaXR0ZXIubWl4aW4oQ29udHJvbGxlci5wcm90b3R5cGUpXG5cbmNvbnN0IGluaGVyaXRhbmNlTWFwID0gbmV3IFdlYWtNYXAoKVxuXG5mdW5jdGlvbiBzZXR1cEhhbmRsZXJGcm9tT2JqZWN0KG9iamVjdCwgYWN0aW9ucykge1xuICBjb25zdCB7XG4gICAgaGFuZGxlcixcbiAgICBhY3Rpb24sXG4gICAgYXV0aG9yaXplLFxuICAgIHBhcmFtZXRlcnMsXG4gICAgcmV0dXJucyxcbiAgICBzY29wZSxcbiAgICB0cmFuc2FjdGVkXG4gIH0gPSBvYmplY3RcblxuICAvLyBJbiBvcmRlciB0byBzdXBvcnQgYHN1cGVyYCBjYWxscyBpbiB0aGUgYGhhbmRsZXJgIGZ1bmN0aW9uIGluIG9iamVjdFxuICAvLyBub3RhdGlvbiwgZGVwbG95IHRoaXMgY3JhenkgSlMgc29yY2VyeTpcbiAgT2JqZWN0LnNldFByb3RvdHlwZU9mKG9iamVjdCwgT2JqZWN0LmdldFByb3RvdHlwZU9mKGFjdGlvbnMpKVxuXG4gIGhhbmRsZXIuYXV0aG9yaXplID0gYXV0aG9yaXplXG4gIGhhbmRsZXIudHJhbnNhY3RlZCA9IHRyYW5zYWN0ZWRcblxuICBpZiAoYWN0aW9uKSB7XG4gICAgY29uc3QgW3ZlcmIsIHBhdGhdID0gYXNBcnJheShhY3Rpb24pXG4gICAgaGFuZGxlci52ZXJiID0gdmVyYlxuICAgIGhhbmRsZXIucGF0aCA9IHBhdGhcbiAgfVxuXG4gIGlmIChwYXJhbWV0ZXJzKSB7XG4gICAgY29uc3QgW19wYXJhbWV0ZXJzLCBvcHRpb25zXSA9IHBhcmFtZXRlcnNcbiAgICBjb25zdCBoYXNPcHRpb25zID0gaXNBcnJheShfcGFyYW1ldGVycylcbiAgICBoYW5kbGVyLnBhcmFtZXRlcnMgPSBoYXNPcHRpb25zID8gX3BhcmFtZXRlcnMgOiBwYXJhbWV0ZXJzXG5cbiAgICAvLyBJZiB2YWxpZGF0aW9uIG9wdGlvbnMgYXJlIHByb3ZpZGVkLCBleHBvc2UgdGhlbSB0aHJvdWdoXG4gICAgLy8gYGhhbmRsZXIub3B0aW9ucy5wYXJhbWV0ZXJzYCwgc2VlIENvbnRyb2xsZXJBY3Rpb25cbiAgICBpZiAoaGFzT3B0aW9ucykge1xuICAgICAgaGFuZGxlci5vcHRpb25zID0ge1xuICAgICAgICAuLi5oYW5kbGVyLm9wdGlvbnMsXG4gICAgICAgIHBhcmFtZXRlcnM6IG9wdGlvbnNcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZiAocmV0dXJucykge1xuICAgIGNvbnN0IFtfcmV0dXJucywgb3B0aW9uc10gPSBhc0FycmF5KHJldHVybnMpXG4gICAgaGFuZGxlci5yZXR1cm5zID0gX3JldHVybnNcblxuICAgIC8vIElmIHZhbGlkYXRpb24gb3B0aW9ucyBhcmUgcHJvdmlkZWQsIGV4cG9zZSB0aGVtIHRocm91Z2hcbiAgICAvLyBgaGFuZGxlci5vcHRpb25zLnJldHVybnNgLCBzZWUgQ29udHJvbGxlckFjdGlvblxuICAgIGlmIChvcHRpb25zKSB7XG4gICAgICBoYW5kbGVyLm9wdGlvbnMgPSB7XG4gICAgICAgIC4uLmhhbmRsZXIub3B0aW9ucyxcbiAgICAgICAgcGFyYW1ldGVyczogb3B0aW9uc1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGlmIChzY29wZSkge1xuICAgIGhhbmRsZXIuc2NvcGUgPSBhc0FycmF5KHNjb3BlKVxuICB9XG5cbiAgcmV0dXJuIGhhbmRsZXJcbn1cbiJdfQ==
|
|
462
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb250cm9sbGVycy9Db250cm9sbGVyLmpzIl0sIm5hbWVzIjpbIkNvbnRyb2xsZXIiLCJjb25zdHJ1Y3RvciIsImFwcCIsIm5hbWVzcGFjZSIsImxvZ2dpbmciLCJjb25maWciLCJsb2ciLCJyb3V0ZXMiLCJsZXZlbCIsImluaXRpYWxpemUiLCJzZXR1cCIsImlzUm9vdCIsInNldHVwQWN0aW9uc09iamVjdCIsIl9zZXR1cEVtaXR0ZXIiLCJob29rcyIsIndpbGRjYXJkIiwibmFtZSIsIm1hdGNoIiwicGF0aCIsInVuZGVmaW5lZCIsIm5vcm1hbGl6ZVBhdGgiLCJ0cmFuc2FjdGVkIiwidXJsIiwicGljbyIsImdyZWVuIiwiY3lhbiIsIndoaXRlIiwiYWN0aW9ucyIsInJlZmxlY3RBY3Rpb25zT2JqZWN0Iiwic2V0dXBBY3Rpb25zIiwiYXNzZXRzIiwic2V0dXBBc3NldHMiLCJhbGxvdyIsImNvbnRyb2xsZXIiLCJhZGRBY3Rpb24iLCJrZXkiLCJ2YWx1ZSIsInZlcmIiLCJwcm90byIsIk9iamVjdCIsImdldFByb3RvdHlwZU9mIiwiZ2V0T3duUHJvcGVydHlOYW1lcyIsImZvckVhY2giLCJzZXR1cFJvdXRlIiwiYXV0aG9yaXplIiwiYWN0aW9uIiwiaGFuZGxlcnMiLCJtYWdlbnRhIiwidG9VcHBlckNhc2UiLCJzbGljZSIsImxlbmd0aCIsImRlc2NyaWJlQXV0aG9yaXplIiwiYWRkUm91dGUiLCJ0eXBlIiwidmFsdWVzIiwicHJvY2Vzc1ZhbHVlcyIsImluaGVyaXRWYWx1ZXMiLCJoYW5kbGVyIiwiZW50cmllcyIsInNldHVwQWN0aW9uIiwic2V0dXBIYW5kbGVyRnJvbU9iamVjdCIsImFjdGlvbkNsYXNzIiwiTWVtYmVyQWN0aW9uIiwiQ29udHJvbGxlckFjdGlvbiIsInNldHVwQWN0aW9uUm91dGUiLCJnZXRVcmwiLCJjdHgiLCJyZXMiLCJjYWxsQWN0aW9uIiwiYm9keSIsImVyciIsIlJlc3BvbnNlRXJyb3IiLCJXcmFwcGVkRXJyb3IiLCJkYXRhUGF0aCIsInNldHVwQXNzZXRSb3V0ZSIsInN0b3JhZ2UiLCJzdG9yYWdlTmFtZSIsInNldHRpbmdzIiwiZ2V0U3RvcmFnZSIsIkNvbnRyb2xsZXJFcnJvciIsInRva2VucyIsImdldERhdGFQYXRoIiwiY2FsbGJhY2siLCJtYXAiLCJpbmRleCIsIm11bHRpcGxlV2lsZGNhcmRzIiwiZmlsdGVyIiwidG9rZW4iLCJub3JtYWxpemVkUGF0aCIsIm1hdGNoRGF0YVBhdGgiLCJSZWdFeHAiLCJ1cGxvYWQiLCJnZXRVcGxvYWRIYW5kbGVyIiwiZmlsZUZpbHRlciIsInJlcSIsImZpbGUiLCJjYiIsInRlc3QiLCJmaWVsZG5hbWUiLCJhdXRob3JpemF0aW9uIiwicHJvY2Vzc0F1dGhvcml6ZSIsIm5leHQiLCJoYW5kbGVBdXRob3JpemF0aW9uIiwiZmlsZXMiLCJjb252ZXJ0U3RvcmFnZUZpbGVzIiwicmVxdWVzdCIsImNyZWF0ZUFzc2V0cyIsInRyYW5zYWN0aW9uIiwiY29tcG9zZSIsImdldFBhdGgiLCJwYXJlbnRDbGFzcyIsImluaGVyaXRhbmNlTWFwIiwiaGFzIiwic2V0IiwiaW5zdGFuY2UiLCJlbnRyeSIsImdldCIsInBhcmVudCIsInBhcmVudFZhbHVlcyIsImN1cnJlbnRWYWx1ZXMiLCJzZXRQcm90b3R5cGVPZiIsIm1lcmdlZEFsbG93IiwibWVyZ2VkQXV0aG9yaXplIiwiaGFzT3duQWxsb3ciLCJleGNsdWRlS2V5IiwiaW5jbHVkZXMiLCJoYW5kbGVBbGxvdyIsImN1cnJlbnQiLCJrZXlzIiwiaGFuZGxlQXV0aG9yaXplIiwiYWRkIiwicHJvdG90eXBlIiwiaGFzT3duUHJvcGVydHkiLCJyZWR1Y2UiLCJyZXN1bHQiLCJjcmVhdGUiLCJlbWl0SG9vayIsImhhbmRsZVJlc3VsdCIsImFyZ3MiLCJzaGlmdCIsImxpc3RlbmVycyIsImNhbGwiLCJnZXRNZW1iZXIiLCJtZW1iZXIiLCJ1c2VyIiwic3RhdGUiLCJmaW5kIiwibW9kZWxDbGFzcyIsIiRpZCIsIm1lbWJlcklkIiwiJGhhc093bmVyIiwiJGhhc1JvbGUiLCJqb2luIiwib2siLCJBdXRob3JpemF0aW9uRXJyb3IiLCJzdHIiLCJpbmRlbnQiLCJjb25zb2xlIiwiaW5mbyIsInJlcGVhdCIsIkV2ZW50RW1pdHRlciIsIm1peGluIiwiV2Vha01hcCIsIm9iamVjdCIsInBhcmFtZXRlcnMiLCJyZXR1cm5zIiwic2NvcGUiLCJfcGFyYW1ldGVycyIsIm9wdGlvbnMiLCJoYXNPcHRpb25zIiwiX3JldHVybnMiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFHQTs7OztBQUtPLE1BQU1BLFVBQU4sQ0FBaUI7QUFDdEJDLEVBQUFBLFdBQVcsQ0FBQ0MsR0FBRCxFQUFNQyxTQUFOLEVBQWlCO0FBQzFCLFNBQUtELEdBQUwsR0FBV0EsR0FBWDtBQUNBLFNBQUtDLFNBQUwsR0FBaUIsS0FBS0EsU0FBTCxJQUFrQkEsU0FBbkM7QUFDQSxTQUFLQyxPQUFMLEdBQWUsS0FBS0YsR0FBTCxDQUFTRyxNQUFULENBQWdCQyxHQUFoQixDQUFvQkMsTUFBbkM7QUFDQSxTQUFLQyxLQUFMLEdBQWEsQ0FBYjtBQUNEOztBQUdEQyxFQUFBQSxVQUFVLEdBQUcsQ0FDWjs7QUFFREMsRUFBQUEsS0FBSyxDQUFDQyxNQUFNLEdBQUcsSUFBVixFQUFnQkMsa0JBQWtCLEdBQUcsSUFBckMsRUFBMkM7QUFDOUMsU0FBS0MsYUFBTCxDQUFtQixLQUFLQyxLQUF4QixFQUErQjtBQUU3QkMsTUFBQUEsUUFBUSxFQUFFO0FBRm1CLEtBQS9COztBQUtBLFNBQUtDLElBQUwsR0FBWSxLQUFLQSxJQUFMLElBQ1YsS0FBS2YsV0FBTCxDQUFpQmUsSUFBakIsQ0FBc0JDLEtBQXRCLENBQTRCLHdCQUE1QixFQUFzRCxDQUF0RCxDQURGOztBQUVBLFFBQUksS0FBS0MsSUFBTCxLQUFjQyxTQUFsQixFQUE2QjtBQUMzQixXQUFLRCxJQUFMLEdBQVksS0FBS2hCLEdBQUwsQ0FB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Q0FBQ3ZDLElBQVIsR0FBZUEsSUFBZjtBQUNEOztBQUVELE1BQUlrSixVQUFKLEVBQWdCO0FBQ2QsVUFBTSxDQUFDRyxXQUFELEVBQWNDLE9BQWQsSUFBeUJKLFVBQS9CO0FBQ0EsVUFBTUssVUFBVSxHQUFHLHFCQUFRRixXQUFSLENBQW5CO0FBQ0E5RyxJQUFBQSxPQUFPLENBQUMyRyxVQUFSLEdBQXFCSyxVQUFVLEdBQUdGLFdBQUgsR0FBaUJILFVBQWhEOztBQUlBLFFBQUlLLFVBQUosRUFBZ0I7QUFDZGhILE1BQUFBLE9BQU8sQ0FBQytHLE9BQVIsR0FBa0IsRUFDaEIsR0FBRy9HLE9BQU8sQ0FBQytHLE9BREs7QUFFaEJKLFFBQUFBLFVBQVUsRUFBRUk7QUFGSSxPQUFsQjtBQUlEO0FBQ0Y7O0FBRUQsTUFBSUgsT0FBSixFQUFhO0FBQ1gsVUFBTSxDQUFDSyxRQUFELEVBQVdGLE9BQVgsSUFBc0IscUJBQVFILE9BQVIsQ0FBNUI7QUFDQTVHLElBQUFBLE9BQU8sQ0FBQzRHLE9BQVIsR0FBa0JLLFFBQWxCOztBQUlBLFFBQUlGLE9BQUosRUFBYTtBQUNYL0csTUFBQUEsT0FBTyxDQUFDK0csT0FBUixHQUFrQixFQUNoQixHQUFHL0csT0FBTyxDQUFDK0csT0FESztBQUVoQkosUUFBQUEsVUFBVSxFQUFFSTtBQUZJLE9BQWxCO0FBSUQ7QUFDRjs7QUFFRCxNQUFJRixLQUFKLEVBQVc7QUFDVDdHLElBQUFBLE9BQU8sQ0FBQzZHLEtBQVIsR0FBZ0IscUJBQVFBLEtBQVIsQ0FBaEI7QUFDRDs7QUFFRCxTQUFPN0csT0FBUDtBQUNEIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHBpY28gZnJvbSAncGljb2NvbG9ycydcbmltcG9ydCB7IGdldE93blByb3BlcnR5LCBnZXRBbGxLZXlzLCBkZXNjcmliZUZ1bmN0aW9uIH0gZnJvbSAnQC91dGlscydcbmltcG9ydCB7IEV2ZW50RW1pdHRlciB9IGZyb20gJ0AvbGliJ1xuaW1wb3J0IENvbnRyb2xsZXJBY3Rpb24gZnJvbSAnLi9Db250cm9sbGVyQWN0aW9uJ1xuaW1wb3J0IE1lbWJlckFjdGlvbiBmcm9tICcuL01lbWJlckFjdGlvbidcbmltcG9ydCB7XG4gIFJlc3BvbnNlRXJyb3IsIFdyYXBwZWRFcnJvciwgQ29udHJvbGxlckVycm9yLCBBdXRob3JpemF0aW9uRXJyb3Jcbn0gZnJvbSAnQC9lcnJvcnMnXG5pbXBvcnQge1xuICBpc09iamVjdCwgaXNTdHJpbmcsIGlzQXJyYXksIGlzQm9vbGVhbiwgaXNGdW5jdGlvbiwgYXNBcnJheSwgZXF1YWxzLFxuICBwYXJzZURhdGFQYXRoLCBub3JtYWxpemVEYXRhUGF0aFxufSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG5leHBvcnQgY2xhc3MgQ29udHJvbGxlciB7XG4gIGNvbnN0cnVjdG9yKGFwcCwgbmFtZXNwYWNlKSB7XG4gICAgdGhpcy5hcHAgPSBhcHBcbiAgICB0aGlzLm5hbWVzcGFjZSA9IHRoaXMubmFtZXNwYWNlIHx8IG5hbWVzcGFjZVxuICAgIHRoaXMubG9nZ2luZyA9IHRoaXMuYXBwLmNvbmZpZy5sb2cucm91dGVzXG4gICAgdGhpcy5sZXZlbCA9IDBcbiAgfVxuXG4gIC8vIEBvdmVycmlkYWJsZVxuICBpbml0aWFsaXplKCkge1xuICB9XG5cbiAgc2V0dXAoaXNSb290ID0gdHJ1ZSwgc2V0dXBBY3Rpb25zT2JqZWN0ID0gdHJ1ZSkge1xuICAgIHRoaXMuX3NldHVwRW1pdHRlcih0aGlzLmhvb2tzLCB7XG4gICAgICAvLyBTdXBwb3J0IHdpbGRjYXJkIGhvb2tzIG9ubHkgb24gY29udHJvbGxlcnM6XG4gICAgICB3aWxkY2FyZDogdHJ1ZVxuICAgIH0pXG4gICAgLy8gSWYgdGhlIGNsYXNzIG5hbWUgZW5kcyBpbiAnQ29udHJvbGxlcicsIHJlbW92ZSBpdCBmcm9tIGNvbnRyb2xsZXIgbmFtZS5cbiAgICB0aGlzLm5hbWUgPSB0aGlzLm5hbWUgfHxcbiAgICAgIHRoaXMuY29uc3RydWN0b3IubmFtZS5tYXRjaCgvXiguKj8pKD86Q29udHJvbGxlcnwpJC8pWzFdXG4gICAgaWYgKHRoaXMucGF0aCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLnBhdGggPSB0aGlzLmFwcC5ub3JtYWxpemVQYXRoKHRoaXMubmFtZSlcbiAgICB9XG4gICAgdGhpcy50cmFuc2FjdGVkID0gISF0aGlzLnRyYW5zYWN0ZWRcbiAgICBpZiAoaXNSb290KSB7XG4gICAgICBjb25zdCB7IHBhdGgsIG5hbWVzcGFjZSB9ID0gdGhpc1xuICAgICAgLy8gVE9ETzogVGhlIGRpc3RpbmN0aW9uIGJldHdlZW4gIGB1cmxgIGFuZCBgcGF0aGAgaXMgYSBiaXQgdHJpY2t5LCBzaW5jZVxuICAgICAgLy8gd2hhdCB3ZSBjYWxsIGB1cmxgIGhlcmUgaXMgY2FsbGVkIGBwYXRoYCBpbiBSb3V0ZXIsIGFuZCBtYXkgY29udGFpblxuICAgICAgLy8gbWFwcGVkIHBhcmFtZXRlcnMgb3Igd2lsZGNhcmRzLiBDb25zaWRlciBgcGF0aGAgLyBgcm91dGVgIGluc3RlYWQ/XG4gICAgICBjb25zdCB1cmwgPSBwYXRoID8gYC8ke3BhdGh9YCA6ICcnXG4gICAgICB0aGlzLnVybCA9IG5hbWVzcGFjZSA/IGAvJHtuYW1lc3BhY2V9JHt1cmx9YCA6IHVybFxuICAgICAgdGhpcy5sb2coXG4gICAgICAgIGAke1xuICAgICAgICAgIG5hbWVzcGFjZSA/IHBpY28uZ3JlZW4oYC8ke25hbWVzcGFjZX0vYCkgOiAnJ1xuICAgICAgICB9JHtcbiAgICAgICAgICBwaWNvLmN5YW4ocGF0aClcbiAgICAgICAgfSR7XG4gICAgICAgICAgcGljby53aGl0ZSgnOicpXG4gICAgICAgIH1gLFxuICAgICAgICB0aGlzLmxldmVsXG4gICAgICApXG4gICAgICBpZiAoc2V0dXBBY3Rpb25zT2JqZWN0KSB7XG4gICAgICAgIHRoaXMuYWN0aW9ucyA9IHRoaXMuYWN0aW9ucyB8fCB0aGlzLnJlZmxlY3RBY3Rpb25zT2JqZWN0KClcbiAgICAgICAgLy8gTm93IHRoYXQgdGhlIGluc3RhbmNlIGZpZWxkcyBhcmUgcmVmbGVjdGVkIGluIHRoZSBgY29udHJvbGxlcmAgb2JqZWN0XG4gICAgICAgIC8vIHdlIGNhbiB1c2UgdGhlIG5vcm1hbCBpbmhlcml0YW5jZSBtZWNoYW5pc20gdGhyb3VnaCBgc2V0dXBBY3Rpb25zKClgOlxuICAgICAgICB0aGlzLmFjdGlvbnMgPSB0aGlzLnNldHVwQWN0aW9ucygnYWN0aW9ucycpXG4gICAgICB9XG4gICAgICB0aGlzLmFzc2V0cyA9IHRoaXMuc2V0dXBBc3NldHMoKVxuICAgIH1cbiAgfVxuXG4gIHJlZmxlY3RBY3Rpb25zT2JqZWN0KCkge1xuICAgIC8vIE9uIGJhc2UgY29udHJvbGxlcnMsIHRoZSBhY3Rpb25zIGNhbiBiZSBkZWZpbmVkIGRpcmVjdGx5IGluIHRoZSBjbGFzc1xuICAgIC8vIGluc3RlYWQgb2YgaW5zaWRlIGFuIGFjdGlvbnMgb2JqZWN0LCBhcyBpcyBkb25lIHdpdGggbW9kZWwgYW5kIHJlbGF0aW9uXG4gICAgLy8gY29udHJvbGxlcnMuIEJ1dCBpbiBvcmRlciB0byB1c2UgdGhlIHNhbWUgc3RydWN0dXJlIGZvciBpbmhlcml0YW5jZSBhc1xuICAgIC8vIHRoZXNlIG90aGVyIGNvbnRyb2xsZXJzLCB3ZSByZWZsZWN0IHRoZXNlIGluc3RhbmNlIGZpZWxkcyBpbiBhIHNlcGFyYXRlXG4gICAgLy8gYGFjdGlvbnNgIG9iamVjdC5cbiAgICBjb25zdCB7IGFsbG93IH0gPSB0aGlzXG4gICAgY29uc3QgY29udHJvbGxlciA9IGFsbG93ID8geyBhbGxvdyB9IDoge31cblxuICAgIGNvbnN0IGFkZEFjdGlvbiA9IGtleSA9PiB7XG4gICAgICBjb25zdCB2YWx1ZSA9IHRoaXNba2V5XVxuICAgICAgLy8gTk9URTogT25seSBhZGQgaW5zdGFuY2UgbWV0aG9kcyB0aGF0IGhhdmUgYSBAYWN0aW9uKCkgZGVjb3JhdG9yLFxuICAgICAgLy8gd2hpY2ggaW4gdHVybiBzZXRzIHRoZSBgdmVyYmAgcHJvcGVydHkgb24gdGhlIG1ldGhvZCwgb3IgYWN0aW9uIG9iamVjdHNcbiAgICAgIC8vIHdoaWNoIGhhdmUgdGhlIGB2ZXJiYCBwcm9wZXJ0eTpcbiAgICAgIGlmICh2YWx1ZT8udmVyYikge1xuICAgICAgICBjb250cm9sbGVyW2tleV0gPSB2YWx1ZVxuICAgICAgfVxuICAgIH1cbiAgICAvLyBVc2UgYE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKClgIHRvIGdldCB0aGUgZmllbGRzLCBpbiBvcmRlciB0b1xuICAgIC8vIG5vdCBhbHNvIHJlY2VpdmUgdmFsdWVzIGZyb20gcGFyZW50cyAodGhvc2UgYXJlIGZldGNoZWQgbGF0ZXIgaW5cbiAgICAvLyBgaW5oZXJpdFZhbHVlcygpYCwgc2VlIGBnZXRQYXJlbnRWYWx1ZXMoKWApLlxuICAgIGNvbnN0IHByb3RvID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMpXG4gICAgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMocHJvdG8pLmZvckVhY2goYWRkQWN0aW9uKVxuICAgIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHRoaXMpLmZvckVhY2goYWRkQWN0aW9uKVxuICAgIHJldHVybiBjb250cm9sbGVyXG4gIH1cblxuICBzZXR1cFJvdXRlKHZlcmIsIHVybCwgdHJhbnNhY3RlZCwgYXV0aG9yaXplLCBhY3Rpb24sIGhhbmRsZXJzKSB7XG4gICAgdGhpcy5sb2coXG4gICAgICBgJHtcbiAgICAgICAgcGljby5tYWdlbnRhKHZlcmIudG9VcHBlckNhc2UoKSlcbiAgICAgIH0gJHtcbiAgICAgICAgcGljby5ncmVlbih0aGlzLnVybClcbiAgICAgIH0ke1xuICAgICAgICBwaWNvLmN5YW4odXJsLnNsaWNlKHRoaXMudXJsLmxlbmd0aCkpXG4gICAgICB9ICR7XG4gICAgICAgIHBpY28ud2hpdGUodGhpcy5kZXNjcmliZUF1dGhvcml6ZShhdXRob3JpemUpKVxuICAgICAgfWAsXG4gICAgICB0aGlzLmxldmVsICsgMVxuICAgIClcbiAgICB0aGlzLmFwcC5hZGRSb3V0ZSh2ZXJiLCB1cmwsIHRyYW5zYWN0ZWQsIGhhbmRsZXJzLCB0aGlzLCBhY3Rpb24pXG4gIH1cblxuICBzZXR1cEFjdGlvbnModHlwZSkge1xuICAgIGNvbnN0IHtcbiAgICAgIHZhbHVlczogYWN0aW9ucyxcbiAgICAgIGF1dGhvcml6ZVxuICAgIH0gPSB0aGlzLnByb2Nlc3NWYWx1ZXModGhpcy5pbmhlcml0VmFsdWVzKHR5cGUpKVxuICAgIGZvciAoY29uc3QgW25hbWUsIGhhbmRsZXJdIG9mIE9iamVjdC5lbnRyaWVzKGFjdGlvbnMpKSB7XG4gICAgICB0aGlzLnNldHVwQWN0aW9uKHR5cGUsIGFjdGlvbnMsIG5hbWUsIGhhbmRsZXIsIGF1dGhvcml6ZVtuYW1lXSlcbiAgICB9XG4gICAgcmV0dXJuIGFjdGlvbnNcbiAgfVxuXG4gIHNldHVwQWN0aW9uKFxuICAgIHR5cGUsXG4gICAgYWN0aW9ucyxcbiAgICBuYW1lLFxuICAgIGhhbmRsZXIsXG4gICAgYXV0aG9yaXplLFxuICAgIC8vIFRoZXNlIHZhbHVlcyBhcmUgb25seSBjaGFuZ2VkIHdoZW4gY2FsbGVkIGZyb21cbiAgICAvLyBgQ29sbGVjdGlvbkNvbnRyb2xsZXIuc2V0dXBBY3Rpb24oKWA6XG4gICAgdmVyYiA9ICdnZXQnLFxuICAgIC8vIFRoZSBkZWZhdWx0IHBhdGggZm9yIGFjdGlvbnMgaXMgdGhlIG5vcm1hbGl6ZWQgbmFtZS5cbiAgICBwYXRoID0gdGhpcy5hcHAubm9ybWFsaXplUGF0aChuYW1lKVxuICApIHtcbiAgICBpZiAoIWlzRnVuY3Rpb24oaGFuZGxlcikpIHtcbiAgICAgIGhhbmRsZXIgPSBzZXR1cEhhbmRsZXJGcm9tT2JqZWN0KGhhbmRsZXIsIGFjdGlvbnMpXG4gICAgfVxuICAgIC8vIEN1c3RvbSBtZW1iZXIgYWN0aW9ucyBoYXZlIHRoZWlyIG93biBjbGFzcyBzbyB0aGV5IGNhbiBmZXRjaCB0aGUgbWVtYmVyc1xuICAgIC8vIGFoZWFkIG9mIHRoZWlyIGNhbGwuXG4gICAgY29uc3QgYWN0aW9uQ2xhc3MgPSB0eXBlID09PSAnbWVtYmVyJyA/IE1lbWJlckFjdGlvbiA6IENvbnRyb2xsZXJBY3Rpb25cbiAgICB0aGlzLnNldHVwQWN0aW9uUm91dGUoXG4gICAgICB0eXBlLFxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5ldy1jYXBcbiAgICAgIG5ldyBhY3Rpb25DbGFzcyh0aGlzLCBoYW5kbGVyLCB0eXBlLCBuYW1lLCB2ZXJiLCBwYXRoLCBhdXRob3JpemUpXG4gICAgKVxuICB9XG5cbiAgc2V0dXBBY3Rpb25Sb3V0ZSh0eXBlLCBhY3Rpb24pIHtcbiAgICBjb25zdCB1cmwgPSB0aGlzLmdldFVybCh0eXBlLCBhY3Rpb24ucGF0aClcbiAgICBjb25zdCB7IHZlcmIsIHRyYW5zYWN0ZWQsIGF1dGhvcml6ZSB9ID0gYWN0aW9uXG4gICAgdGhpcy5zZXR1cFJvdXRlKHZlcmIsIHVybCwgdHJhbnNhY3RlZCwgYXV0aG9yaXplLCBhY3Rpb24sIFtcbiAgICAgIGFzeW5jIGN0eCA9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgYWN0aW9uLmNhbGxBY3Rpb24oY3R4KVxuICAgICAgICAgIGlmIChyZXMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgY3R4LmJvZHkgPSByZXNcbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIHRocm93IGVyciBpbnN0YW5jZW9mIFJlc3BvbnNlRXJyb3IgPyBlcnIgOiBuZXcgV3JhcHBlZEVycm9yKGVycilcbiAgICAgICAgfVxuICAgICAgfVxuICAgIF0pXG4gIH1cblxuICBzZXR1cEFzc2V0cygpIHtcbiAgICBjb25zdCB7XG4gICAgICB2YWx1ZXM6IGFzc2V0cyxcbiAgICAgIGF1dGhvcml6ZVxuICAgIH0gPSB0aGlzLnByb2Nlc3NWYWx1ZXModGhpcy5pbmhlcml0VmFsdWVzKCdhc3NldHMnKSlcbiAgICBmb3IgKGNvbnN0IFtkYXRhUGF0aCwgY29uZmlnXSBvZiBPYmplY3QuZW50cmllcyhhc3NldHMgfHwge30pKSB7XG4gICAgICB0aGlzLnNldHVwQXNzZXRSb3V0ZShkYXRhUGF0aCwgY29uZmlnLCBhdXRob3JpemVbZGF0YVBhdGhdKVxuICAgIH1cbiAgICByZXR1cm4gYXNzZXRzXG4gIH1cblxuICBzZXR1cEFzc2V0Um91dGUoZGF0YVBhdGgsIGNvbmZpZywgYXV0aG9yaXplKSB7XG4gICAgY29uc3Qge1xuICAgICAgc3RvcmFnZTogc3RvcmFnZU5hbWUsXG4gICAgICAvLyBUT0RPOiBXaGF0IGV4YWN0bHkgc2hvdWxkIGNvbnRyb2wgdGhlIHVzZSBvZiBgdHJhbnNhY3RlZGA/XG4gICAgICB0cmFuc2FjdGVkLFxuICAgICAgLi4uc2V0dGluZ3NcbiAgICB9ID0gY29uZmlnXG4gICAgY29uc3Qgc3RvcmFnZSA9IHRoaXMuYXBwLmdldFN0b3JhZ2Uoc3RvcmFnZU5hbWUpXG4gICAgaWYgKCFzdG9yYWdlKSB7XG4gICAgICB0aHJvdyBuZXcgQ29udHJvbGxlckVycm9yKHRoaXMsXG4gICAgICAgIGBVbmtub3duIHN0b3JhZ2UgY29uZmlndXJhdGlvbjogJyR7c3RvcmFnZU5hbWV9J2BcbiAgICAgIClcbiAgICB9XG4gICAgY29uc3QgdG9rZW5zID0gcGFyc2VEYXRhUGF0aChkYXRhUGF0aClcbiAgICBjb25zdCBnZXREYXRhUGF0aCA9IGNhbGxiYWNrID0+IG5vcm1hbGl6ZURhdGFQYXRoKHRva2Vucy5tYXAoY2FsbGJhY2spKVxuXG4gICAgLy8gUmVwbGFjZSB3aWxkY2FyZHMgd2l0aCBudW1iZXJlZCBpbmRpY2VzIGFuZCBjb252ZXJ0IHRvICcvJy1ub3RhdGlvbjpcbiAgICBsZXQgaW5kZXggPSAwXG4gICAgY29uc3QgbXVsdGlwbGVXaWxkY2FyZHMgPSB0b2tlbnMuZmlsdGVyKHRva2VuID0+IHRva2VuID09PSAnKicpLmxlbmd0aCA+IDFcbiAgICBjb25zdCBub3JtYWxpemVkUGF0aCA9IGdldERhdGFQYXRoKFxuICAgICAgdG9rZW4gPT4gdG9rZW4gPT09ICcqJ1xuICAgICAgICA/IG11bHRpcGxlV2lsZGNhcmRzXG4gICAgICAgICAgPyBgOmluZGV4JHsrK2luZGV4fWBcbiAgICAgICAgICA6ICc6aW5kZXgnXG4gICAgICAgIDogdGhpcy5hcHAubm9ybWFsaXplUGF0aCh0b2tlbilcbiAgICApXG5cbiAgICAvLyBDb252ZXJ0IGBkYXRhUGF0aGAgdG8gYSByZWd1bGFyIGV4cHJlc3Npb24gdG8gbWF0Y2ggZmllbGQgbmFtZXNcbiAgICAvLyBhZ2FpbnN0LCBidXQgY29udmVydCB3aWxkY2FyZHMgKCopIHRvIG1hdGNoIGJvdGggbnVtZXJpYyBpZHMgYW5kIHdvcmRzLFxuICAgIC8vIGUuZy4gJ2NyZWF0ZSc6XG4gICAgY29uc3QgbWF0Y2hEYXRhUGF0aCA9IG5ldyBSZWdFeHAoXG4gICAgICBgXiR7Z2V0RGF0YVBhdGgodG9rZW4gPT4gdG9rZW4gPT09ICcqJyA/ICdcXFxcdysnIDogdG9rZW4pfSRgXG4gICAgKVxuXG4gICAgY29uc3QgdXJsID0gdGhpcy5nZXRVcmwoJ2NvbnRyb2xsZXInLCBgdXBsb2FkLyR7bm9ybWFsaXplZFBhdGh9YClcbiAgICBjb25zdCB1cGxvYWQgPSBzdG9yYWdlLmdldFVwbG9hZEhhbmRsZXIoe1xuICAgICAgLi4uc2V0dGluZ3MsXG4gICAgICAvLyBPbmx5IGxldCB1cGxvYWRzIHBhc3MgdGhhdCBtYXRjaCB0aGUgbm9ybWFsaXplUGF0aCArIHdpbGRjYXJkczpcbiAgICAgIGZpbGVGaWx0ZXI6IChyZXEsIGZpbGUsIGNiKSA9PiB7XG4gICAgICAgIGNiKG51bGwsIG1hdGNoRGF0YVBhdGgudGVzdChmaWxlLmZpZWxkbmFtZSkpXG4gICAgICB9XG4gICAgfSlcblxuICAgIGNvbnN0IGF1dGhvcml6YXRpb24gPSB0aGlzLnByb2Nlc3NBdXRob3JpemUoYXV0aG9yaXplKVxuICAgIHRoaXMuc2V0dXBSb3V0ZSgncG9zdCcsIHVybCwgdHJhbnNhY3RlZCwgYXV0aG9yaXplLCBudWxsLCBbXG4gICAgICBhc3luYyAoY3R4LCBuZXh0KSA9PiB7XG4gICAgICAgIGF3YWl0IHRoaXMuaGFuZGxlQXV0aG9yaXphdGlvbihhdXRob3JpemF0aW9uLCBjdHgpXG4gICAgICAgIHJldHVybiBuZXh0KClcbiAgICAgIH0sXG5cbiAgICAgIHVwbG9hZCxcblxuICAgICAgYXN5bmMgKGN0eCwgbmV4dCkgPT4ge1xuICAgICAgICBjb25zdCBmaWxlcyA9IHN0b3JhZ2UuY29udmVydFN0b3JhZ2VGaWxlcyhjdHgucmVxdWVzdC5maWxlcylcbiAgICAgICAgYXdhaXQgdGhpcy5hcHAuY3JlYXRlQXNzZXRzKHN0b3JhZ2UsIGZpbGVzLCAwLCBjdHgudHJhbnNhY3Rpb24pXG4gICAgICAgIC8vIFNlbmQgdGhlIGZpbGUgb2JqZWN0cyBiYWNrIGZvciB0aGUgdXBsb2FkIGNvbXBvbmVudCB0byBzdG9yZSBpbiB0aGVcbiAgICAgICAgLy8gZGF0YS5cbiAgICAgICAgY3R4LmJvZHkgPSBmaWxlc1xuICAgICAgICByZXR1cm4gbmV4dCgpXG4gICAgICB9XG4gICAgXSlcbiAgfVxuXG4gIGNvbXBvc2UoKSB7XG4gICAgLy8gVG8gYmUgb3ZlcnJpZGRlbiBpbiBzdWItY2xhc3NlcywgaWYgdGhlIGNvbnRyb2xsZXIgbmVlZHMgdG8gaW5zdGFsbFxuICAgIC8vIG1pZGRsZXdhcmUuIEZvciBub3JtYWwgcm91dGVzLCB1c2UgYHRoaXMuYXBwLmFkZFJvdXRlKClgIGluc3RlYWQuXG4gIH1cblxuICBnZXRQYXRoKHR5cGUsIHBhdGgpIHtcbiAgICAvLyBUbyBiZSBvdmVycmlkZGVuIGJ5IHN1Yi1jbGFzc2VzLlxuICAgIHJldHVybiBwYXRoXG4gIH1cblxuICBnZXRVcmwodHlwZSwgcGF0aCkge1xuICAgIHBhdGggPSB0aGlzLmdldFBhdGgodHlwZSwgcGF0aClcbiAgICAvLyBVc2UgJy4nIGFzIHRoZSBwYXRoIGZvciB0aGUgY29udHJvbGxlcidzIFwiaW5kZXhcIiBhY3Rpb24uXG4gICAgcmV0dXJuIHBhdGggJiYgcGF0aCAhPT0gJy4nID8gYCR7dGhpcy51cmx9LyR7cGF0aH1gIDogdGhpcy51cmxcbiAgfVxuXG4gIGluaGVyaXRWYWx1ZXModHlwZSkge1xuICAgIC8vIEdldHMgdGhlIGNvbnRyb2xsZXIgY2xhc3MncyBpbnN0YW5jZSBmaWVsZCBmb3IgYSBnaXZlbiBhY3Rpb24gdHlwZSwgZS5nLlxuICAgIC8vIGBjb250cm9sbGVyYCAoQ29udHJvbGxlciksIGBjb2xsZWN0aW9uYCwgYG1lbWJlcmAgKE1vZGVsQ29udHJvbGxlcixcbiAgICAvLyBSZWxhdGlvbkNvbnRyb2xsZXIpLCBgcmVsYXRpb25gIChSZWxhdGlvbkNvbnRyb2xsZXIpLCBhbmQgc2V0cyB1cCBhblxuICAgIC8vIGluaGVyaXRhbmNlIGNoYWluIGZvciBpdCB0aGF0IGdvZXMgYWxsIHRoZSB3YXkgdXAgdG8gaXQgYmFzZSBjbGFzcyAoZS5nLlxuICAgIC8vIENvbGxlY3Rpb25Db250cm9sbGVyKSwgc28gdGhhdCB0aGUgZGVmYXVsdCBkZWZpbml0aW9ucyBmb3IgYWxsIGh0dHAgdmVyYnNcbiAgICAvLyBjYW4gYmUgY29ycmVjdGx5IGluaGVyaXRlZCBhbmQgb3ZlcnJpZGRlbiB3aGlsZSB1c2luZyBgc3VwZXIuPGFjdGlvbj4oKWAuXG4gICAgY29uc3QgcGFyZW50Q2xhc3MgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcy5jb25zdHJ1Y3RvcilcbiAgICAvLyBDcmVhdGUgb25lIGluc3RhbmNlIG9mIGVhY2ggY29udHJvbGxlciBjbGFzcyB1cCB0aGUgY2hhaW4gaW4gb3JkZXIgdG9cbiAgICAvLyBnZXQgdG8gdGhlaXIgZGVmaW5pdGlvbnMgb2YgdGhlIGluaGVyaXRhYmxlIHZhbHVlcy4gQ2FjaGUgYm90aCBpbnN0YW5jZVxuICAgIC8vIGFuZCByZXNvbHZlZCB2YWx1ZXMgcGVyIHBhcmVudENsYXNzIGluIGFuIGluaGVyaXRhbmNlTWFwLlxuICAgIGlmICghaW5oZXJpdGFuY2VNYXAuaGFzKHBhcmVudENsYXNzKSkge1xuICAgICAgaW5oZXJpdGFuY2VNYXAuc2V0KHBhcmVudENsYXNzLCB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuZXctY2FwXG4gICAgICAgIGluc3RhbmNlOiBuZXcgcGFyZW50Q2xhc3ModGhpcy5hcHAsIHRoaXMubmFtZXNwYWNlKVxuICAgICAgfSlcbiAgICB9XG4gICAgY29uc3QgZW50cnkgPSBpbmhlcml0YW5jZU1hcC5nZXQocGFyZW50Q2xhc3MpXG4gICAgaWYgKCFlbnRyeVt0eXBlXSkge1xuICAgICAgY29uc3QgcGFyZW50ID0gZW50cnkuaW5zdGFuY2VcbiAgICAgIGxldCB2YWx1ZXMgPSBwYXJlbnRbdHlwZV1cbiAgICAgIGlmIChwYXJlbnRDbGFzcyAhPT0gQ29udHJvbGxlcikge1xuICAgICAgICAvLyBSZWN1cnNpdmVseSBzZXQgdXAgaW5oZXJpdGFuY2UgY2hhaW5zLlxuICAgICAgICB2YWx1ZXMgPSBwYXJlbnQuaW5oZXJpdFZhbHVlcyh0eXBlKVxuICAgICAgfVxuICAgICAgZW50cnlbdHlwZV0gPSB2YWx1ZXNcbiAgICB9XG4gICAgLy8gSWYgdGhlcmUgYXJlIG5vIHZhbHVlcyBkZWZpbmVkIG9uIGB0aGlzYCB0aGF0IGRpZmZlciBmcm9tIHRoZSBwYXJlbnQsXG4gICAgLy8gc2V0IHRvIGFuIGVtcHR5IG9iamVjdCBzbyBpbmhlcml0YW5jZSBjYW4gYmUgc2V0IHVwIGFuZCBgcHJvY2Vzc1ZhbHVlcygpYFxuICAgIC8vIGNhbiBzdGlsbCBiZSBjYWxsZWQuXG4gICAgLy8gTk9URTogV2UgY2FuJ3QgY2hlY2sgd2l0aCBgdGhpcy5oYXNPd25Qcm9wZXJ0eSh0eXBlKWAgYmVjYXVzZSB0aGVcbiAgICAvLyBmaWVsZCBjYW4gYmUgb24gdGhlIGNsYXNzIHByb3RvdHlwZSBhcyB3ZWxsLCBpbiBjYXNlIG9mIGFjY2Vzc29ycy5cbiAgICBjb25zdCBwYXJlbnRWYWx1ZXMgPSBlbnRyeVt0eXBlXVxuICAgIGxldCBjdXJyZW50VmFsdWVzID0gdGhpc1t0eXBlXVxuICAgIGlmIChjdXJyZW50VmFsdWVzICYmIGN1cnJlbnRWYWx1ZXMgPT09IHBhcmVudFZhbHVlcykge1xuICAgICAgY3VycmVudFZhbHVlcyA9IHRoaXNbdHlwZV0gPSB7fVxuICAgIH1cbiAgICAvLyBDb21iaW5lIHBhcmVudFZhbHVlcyBhbmQgY3VycmVudFZhbHVlcyB3aXRoIGNvcnJlY3QgaW5oZXJpdGFuY2UuXG4gICAgcmV0dXJuIGlzT2JqZWN0KHBhcmVudFZhbHVlcykgJiYgaXNPYmplY3QoY3VycmVudFZhbHVlcylcbiAgICAgID8gT2JqZWN0LnNldFByb3RvdHlwZU9mKGN1cnJlbnRWYWx1ZXMsIHBhcmVudFZhbHVlcylcbiAgICAgIDogY3VycmVudFZhbHVlc1xuICB9XG5cbiAgcHJvY2Vzc1ZhbHVlcyh2YWx1ZXMpIHtcbiAgICBpZiAoIXZhbHVlcykgcmV0dXJuIHt9XG4gICAgLy8gUmVzcGVjdCBgYWxsb3dgIHNldHRpbmdzIGFuZCBjbGVhciBlbnRyaWVzIHRoYXQgYXJlbid0IGFsbG93ZWQuXG4gICAgLy8gQWxzbyBjb2xsZWN0IGFuZCBleHBhbmQgYGF1dGhvcml6ZWAgc2V0dGluZ3Mgc28gdGhhdCBpbiB0aGUgZW5kLCBhblxuICAgIC8vIGBhdXRob3JpemVgIG9iamVjdCBjYW4gYmUgcmV0dXJuZWQgd2l0aCB2YWxpZCBzZXR0aW5ncyBmb3IgYWxsIHZhbHVlcy5cbiAgICAvL1xuICAgIC8vIFJ1bGVzOlxuICAgIC8vIC0gT3duIHZhbHVlcyBvbiBvYmplY3RzIHRoYXQgZG9uJ3QgZGVmaW5lIGFuIGBhbGxvd2AgYXJyYXkgYXJlXG4gICAgLy8gICBhdXRvbWF0aWNhbGx5IGFsbG93ZWQuIElmIGFuIGBhbGxvd2AgYXJyYXkgaXMgZGVmaW5lZCBhcyB3ZWxsLCB0aGVuXG4gICAgLy8gICB0aGVzZSBvd24gdmFsdWVzIG5lZWQgdG8gYmUgZXhwbGljaXRseSBsaXN0ZWQuXG4gICAgLy8gLSBJZiBubyBgYWxsb3dgIGFycmF5cyBhcmUgZGVmaW5lZCBpbiB0aGUgcHJvdG90eXBhbCBoaWVyYXJjaHksIGVhY2hcbiAgICAvLyAgIGxldmVsIGFsbG93cyBpdHMgb3duIHZhbHVlcywgYW5kIHRoZXNlIGFyZSBtZXJnZWQsIGV4Y2VwdCBmb3IgdGhvc2VcbiAgICAvLyAgIG1hcmtlZCBhcyBgJGNvcmVgLCB3aGljaCBuZWVkIHRvIGJlIGV4cGxpY2l0bHkgbGlzdGVkIGluIGBhbGxvd2AuXG5cbiAgICAvLyBOT1RFOiBgaGFuZGxlQWxsb3coKWAgYW5kIGBoYW5kbGVBdXRob3JpemUoKWAgYXJlIGFwcGxpZWQgaW4gc2VxdWVuY2Ugb2ZcbiAgICAvLyB0aGUgYHZhbHVlc2AgaW5oZXJpdGFuY2UsIGZyb20gc3ViLWNsYXNzIHRvIGJhc2UtY2xhc3MuXG5cbiAgICBjb25zdCBtZXJnZWRBbGxvdyA9IHt9XG4gICAgY29uc3QgbWVyZ2VkQXV0aG9yaXplID0ge31cbiAgICBsZXQgaGFzT3duQWxsb3cgPSBmYWxzZVxuXG4gICAgY29uc3QgZXhjbHVkZUtleSA9IGtleSA9PiBbJ2FsbG93JywgJ2F1dGhvcml6ZSddLmluY2x1ZGVzKGtleSlcblxuICAgIGNvbnN0IGhhbmRsZUFsbG93ID0gKGFsbG93LCBjdXJyZW50KSA9PiB7XG4gICAgICBpZiAoYWxsb3cpIHtcbiAgICAgICAgYWxsb3cgPSBhc0FycmF5KGFsbG93KVxuICAgICAgICBoYXNPd25BbGxvdyA9IHRydWVcbiAgICAgIH0gZWxzZSBpZiAoIWhhc093bkFsbG93KSB7XG4gICAgICAgIC8vIE9ubHkga2VlcCBhZGRpbmcgdG8gdGhlIG1lcmdlZCBgYWxsb3dgIGlmIHdlIGRpZG4ndCBhbHJlYWR5IGVuY291bnRlclxuICAgICAgICAvLyBhbiBvd24gYGFsbG93YCBvYmplY3QgZnVydGhlciB1cCB0aGUgY2hhaW4uXG4gICAgICAgIGFsbG93ID0gT2JqZWN0LmtleXMoY3VycmVudClcbiAgICAgIH1cbiAgICAgIGlmIChhbGxvdykge1xuICAgICAgICBpZiAoYWxsb3cuaW5jbHVkZXMoJyonKSkge1xuICAgICAgICAgIGFsbG93ID0gZ2V0QWxsS2V5cyhjdXJyZW50KVxuICAgICAgICB9XG4gICAgICAgIGZvciAoY29uc3Qga2V5IG9mIGFsbG93KSB7XG4gICAgICAgICAgaWYgKCFleGNsdWRlS2V5KGtleSkpIHtcbiAgICAgICAgICAgIG1lcmdlZEFsbG93W2tleV0gPSB0cnVlXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgaGFuZGxlQXV0aG9yaXplID0gYXV0aG9yaXplID0+IHtcbiAgICAgIGNvbnN0IGFkZCA9IChrZXksIHZhbHVlKSA9PiB7XG4gICAgICAgIC8vIFNpbmNlIHdlJ3JlIHdhbGtpbmcgdXAgaW4gdGhlIGluaGVyaXRhbmNlIGNoYWluLCBvbmx5IHRha2Ugb24gYW5cbiAgICAgICAgLy8gYXV0aG9yaXplIHNldHRpbmcgZm9yIGEgZ2l2ZW4ga2V5IGlmIGl0IHdhc24ndCBhbHJlYWR5IGRlZmluZWQgYmVmb3JlXG4gICAgICAgIGlmIChcbiAgICAgICAgICBrZXkgaW4gdmFsdWVzICYmXG4gICAgICAgICAgIShrZXkgaW4gbWVyZ2VkQXV0aG9yaXplKSAmJlxuICAgICAgICAgICFleGNsdWRlS2V5KGtleSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgbWVyZ2VkQXV0aG9yaXplW2tleV0gPSB2YWx1ZVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChpc09iamVjdChhdXRob3JpemUpKSB7XG4gICAgICAgIGZvciAoY29uc3Qga2V5IGluIGF1dGhvcml6ZSkge1xuICAgICAgICAgIGFkZChrZXksIGF1dGhvcml6ZVtrZXldKVxuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGF1dGhvcml6ZSAhPSBudWxsKSB7XG4gICAgICAgIC8vIFRoaXMgaXMgYSB2YWx1ZXMtd2lkZSBzZXR0aW5nLiBMb29wIHRocm91Z2ggYWxsIHZhbHVlcywgbm90IGp1c3RcbiAgICAgICAgLy8gY3VycmVudCBvbmVzLCBhbmQgYXBwbHkgdG8gYW55IGFjdGlvbiB0aGF0IGRvZXNuJ3QgYWxyZWFkeSBoYXZlIG9uZTpcbiAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gdmFsdWVzKSB7XG4gICAgICAgICAgYWRkKGtleSwgYXV0aG9yaXplKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gUHJvY2VzcyB0aGUgYGFsbG93YCBhbmQgYGF1dGhvcml6ZWAgc2V0dGluZ3MgaW4gc2VxdWVuY2Ugb2YgdGhlIGB2YWx1ZXNgXG4gICAgLy8gaW5oZXJpdGFuY2UsIGZyb20gc3ViLWNsYXNzIHRvIGJhc2UtY2xhc3MuXG4gICAgbGV0IGN1cnJlbnQgPSB2YWx1ZXNcbiAgICB3aGlsZSAoY3VycmVudCAhPT0gT2JqZWN0LnByb3RvdHlwZSAmJiAhY3VycmVudC5oYXNPd25Qcm9wZXJ0eSgnJGNvcmUnKSkge1xuICAgICAgaGFuZGxlQWxsb3coZ2V0T3duUHJvcGVydHkoY3VycmVudCwgJ2FsbG93JyksIGN1cnJlbnQpXG4gICAgICBoYW5kbGVBdXRob3JpemUoZ2V0T3duUHJvcGVydHkoY3VycmVudCwgJ2F1dGhvcml6ZScpKVxuICAgICAgY3VycmVudCA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihjdXJyZW50KVxuICAgIH1cblxuICAgIC8vIEF0IHRoZSBlbmQgb2YgdGhlIGNoYWluLCBhbHNvIHN1cHBvcnQgYm90aCBzZXR0aW5ncyBvbiB0aGUgY29udHJvbGxlci1cbiAgICAvLyBsZXZlbCwgYW5kIHRodXMgYXBwbGllZCB0byBhbGwgYWN0aW9uIG9iamVjdHMgaW4gdGhlIGNvbnRyb2xsZXIuXG4gICAgaWYgKHRoaXMuYWxsb3cpIHtcbiAgICAgIGhhbmRsZUFsbG93KHRoaXMuYWxsb3csIHZhbHVlcylcbiAgICB9XG4gICAgaWYgKHRoaXMuYXV0aG9yaXplKSB7XG4gICAgICBoYW5kbGVBdXRob3JpemUodGhpcy5hdXRob3JpemUpXG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIC8vIENyZWF0ZSBhIGZpbHRlcmVkIGB2YWx1ZXNgIG9iamVjdCB0aGF0IG9ubHkgY29udGFpbnMgdGhlIGFsbG93ZWQgZmllbGRzXG4gICAgICB2YWx1ZXM6IGdldEFsbEtleXModmFsdWVzKS5yZWR1Y2UoXG4gICAgICAgIChyZXN1bHQsIGtleSkgPT4ge1xuICAgICAgICAgIGlmIChtZXJnZWRBbGxvd1trZXldKSB7XG4gICAgICAgICAgICByZXN1bHRba2V5XSA9IHZhbHVlc1trZXldXG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiByZXN1bHRcbiAgICAgICAgfSxcbiAgICAgICAgLy8gQ3JlYXRlIGEgbmV3IG9iamVjdCBmb3IgdGhlIGZpbHRlcmVkIGB2YWx1ZXNgIHRoYXQga2VlcHMgaW5oZXJpdGFuY2VcbiAgICAgICAgLy8gaW50YWN0LiBUaGlzIGlzIHJlcXVpcmVkIGJ5IGBzZXR1cEhhbmRsZXJGcm9tT2JqZWN0KClgLCB0byBzdXBwb3J0XG4gICAgICAgIC8vIGBzdXBlcmAgaW4gaGFuZGxlciBmdW5jdGlvbnMuXG4gICAgICAgIE9iamVjdC5jcmVhdGUoT2JqZWN0LmdldFByb3RvdHlwZU9mKHZhbHVlcykpXG4gICAgICApLFxuICAgICAgYWxsb3c6IE9iamVjdC5rZXlzKG1lcmdlZEFsbG93KSxcbiAgICAgIGF1dGhvcml6ZTogbWVyZ2VkQXV0aG9yaXplXG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZW1pdEhvb2sodHlwZSwgaGFuZGxlUmVzdWx0LCBjdHgsIC4uLmFyZ3MpIHtcbiAgICBsZXQgcmVzdWx0ID0gaGFuZGxlUmVzdWx0ID8gYXJncy5zaGlmdCgpIDogdW5kZWZpbmVkXG4gICAgZm9yIChjb25zdCBoYW5kbGVyIG9mIHRoaXMubGlzdGVuZXJzKHR5cGUpKSB7XG4gICAgICBpZiAoaGFuZGxlUmVzdWx0KSB7XG4gICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IGhhbmRsZXIuY2FsbCh0aGlzLCBjdHgsIHJlc3VsdCwgLi4uYXJncylcbiAgICAgICAgaWYgKHJlcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgcmVzdWx0ID0gcmVzXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGF3YWl0IGhhbmRsZXIuY2FsbCh0aGlzLCBjdHgsIC4uLmFyZ3MpXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHRcbiAgfVxuXG4gIGFzeW5jIGdldE1lbWJlcigvKiBjdHgsIGJhc2UgPSB0aGlzLCBwYXJhbSA9IHsgLi4uIH0gKi8pIHtcbiAgICAvLyBUaGlzIGlzIG9ubHkgZGVmaW5lZCBpbiBgQ29sbGVjdGlvbkNvbnRyb2xsZXJgLCB3aGVyZSBpdCByZXNvbHZlcyB0byB0aGVcbiAgICAvLyBtZW1iZXIgcmVwcmVzZW50ZWQgYnkgdGhlIGdpdmVuIHJvdXRlLlxuICAgIHJldHVybiBudWxsXG4gIH1cblxuICAvKipcbiAgICogQ29udmVydHMgdGhlIGF1dGhvcml6ZSBjb25maWcgc2V0dGluZ3MgaW50byBhbiBhdXRob3JpemF0aW9uIGZ1bmN0aW9uIHRoYXRcbiAgICogY2FuIGJlIHBhc3NlZCB0byBgaGFuZGxlQXV0aG9yaXphdGlvbigpYC5cbiAgICpcbiAgICogQHBhcmFtIHtib29sZWFufGZ1bmN0aW9ufHN0cmluZ3xzdHJpbmdbXX0gYXV0aG9yaXplIHRoZSBhdXRob3JpemUgY29uZmlnXG4gICAqIHNldHRpbmdzXG4gICAqIEByZXR1cm4ge2Z1bmN0aW9ufSB0aGUgYXV0aG9yaXphdGlvbiBmdW5jdGlvblxuICAgKi9cbiAgcHJvY2Vzc0F1dGhvcml6ZShhdXRob3JpemUpIHtcbiAgICBpZiAoYXV0aG9yaXplID09IG51bGwpIHtcbiAgICAgIHJldHVybiAoKSA9PiB0cnVlXG4gICAgfSBlbHNlIGlmIChpc0Jvb2xlYW4oYXV0aG9yaXplKSkge1xuICAgICAgcmV0dXJuICgpID0+IGF1dGhvcml6ZVxuICAgIH0gZWxzZSBpZiAoaXNGdW5jdGlvbihhdXRob3JpemUpKSB7XG4gICAgICByZXR1cm4gYXN5bmMgKGN0eCwgbWVtYmVyKSA9PiB7XG4gICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IGF1dGhvcml6ZShjdHgsIG1lbWJlcilcbiAgICAgICAgLy8gUGFzcyByZXMgdGhyb3VnaCBgcHJvY2Vzc0F1dGhvcml6ZSgpYCB0byBzdXBwb3J0IHN0cmluZ3MgJiBhcnJheXMuXG4gICAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NBdXRob3JpemUocmVzKShjdHgsIG1lbWJlcilcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGlzU3RyaW5nKGF1dGhvcml6ZSkgfHwgaXNBcnJheShhdXRob3JpemUpKSB7XG4gICAgICByZXR1cm4gYXN5bmMgKGN0eCwgbWVtYmVyKSA9PiB7XG4gICAgICAgIGNvbnN0IHsgdXNlciB9ID0gY3R4LnN0YXRlXG4gICAgICAgIGlmICghdXNlcikge1xuICAgICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHZhbHVlcyA9IGFzQXJyYXkoYXV0aG9yaXplKVxuICAgICAgICAvLyBGb3IgJyRvd25lcicsIGZldGNoIGBtZW1iZXJgIG5vdyBpbiBjYXNlIHRoZSBhY3Rpb24gcGFyYW1ldGVyc1xuICAgICAgICAvLyBkaWRuJ3QgYWxyZWFkeSByZXF1ZXN0IGl0OlxuICAgICAgICBpZiAoIW1lbWJlciAmJiB2YWx1ZXMuaW5jbHVkZXMoJyRvd25lcicpKSB7XG4gICAgICAgICAgbWVtYmVyID0gYXdhaXQgdGhpcy5nZXRNZW1iZXIoY3R4KVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiAhIXZhbHVlcy5maW5kKFxuICAgICAgICAvLyBTdXBwb3J0IDMgc2NlbmFyaW9zOlxuICAgICAgICAvLyAtICckc2VsZic6IFRoZSByZXF1ZXN0ZWQgbWVtYmVyIGlzIGNoZWNrZWQgYWdhaW5zdCBgY3R4LnN0YXRlLnVzZXJgXG4gICAgICAgIC8vICAgYW5kIHRoZSBhY3Rpb24gaXMgb25seSBhdXRob3JpemVkIGlmIGl0IG1hdGNoZXMgdGhlIG1lbWJlci5cbiAgICAgICAgLy8gLSAnJG93bmVyJzogVGhlIG1lbWJlciBpcyBhc2tlZCBpZiBpdCBpcyBvd25lZCBieSBgY3R4LnN0YXRlLnVzZXJgXG4gICAgICAgIC8vICAgdGhyb3VnaCB0aGUgb3B0aW9uYWwgYE1vZGVsLiRoYXNPd25lcigpYCBtZXRob2QuXG4gICAgICAgIC8vIC0gYW55IHN0cmluZzogIGBjdHguc3RhdGUudXNlcmAgaXMgY2hlY2tlZCBmb3IgdGhpcyByb2xlIHRocm91Z2hcbiAgICAgICAgLy8gICB0aGUgb3ZlcnJpZGFibGUgYFVzZXJNb2RlbC5oYXNSb2xlKClgIG1ldGhvZC5cbiAgICAgICAgICB2YWx1ZSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gdmFsdWUgPT09ICckc2VsZidcbiAgICAgICAgICAgICAgPyB1c2VyLmNvbnN0cnVjdG9yID09PSB0aGlzLm1vZGVsQ2xhc3MgJiZcbiAgICAgICAgICAgICAgZXF1YWxzKHVzZXIuJGlkKCksIGN0eC5tZW1iZXJJZClcbiAgICAgICAgICAgICAgOiB2YWx1ZSA9PT0gJyRvd25lcidcbiAgICAgICAgICAgICAgICA/IG1lbWJlcj8uJGhhc093bmVyPy4odXNlcilcbiAgICAgICAgICAgICAgICA6IHVzZXIuJGhhc1JvbGUodmFsdWUpXG4gICAgICAgICAgfVxuICAgICAgICApXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBDb250cm9sbGVyRXJyb3IodGhpcyxcbiAgICAgICAgYFVuc3VwcG9ydGVkIGF1dGhvcml6ZSBzZXR0aW5nOiAnJHthdXRob3JpemV9J2BcbiAgICAgIClcbiAgICB9XG4gIH1cblxuICBkZXNjcmliZUF1dGhvcml6ZShhdXRob3JpemUpIHtcbiAgICByZXR1cm4gaXNGdW5jdGlvbihhdXRob3JpemUpXG4gICAgICA/IGRlc2NyaWJlRnVuY3Rpb24oYXV0aG9yaXplKVxuICAgICAgOiBpc1N0cmluZyhhdXRob3JpemUpXG4gICAgICAgID8gYCcke2F1dGhvcml6ZX0nYFxuICAgICAgICA6IGlzQXJyYXkoYXV0aG9yaXplKVxuICAgICAgICAgID8gYFske2F1dGhvcml6ZS5tYXAodmFsdWUgPT4gYCcke3ZhbHVlfSdgKS5qb2luKCcsICcpfV1gXG4gICAgICAgICAgOiAnJ1xuICB9XG5cbiAgYXN5bmMgaGFuZGxlQXV0aG9yaXphdGlvbihhdXRob3JpemF0aW9uLCBjdHgsIG1lbWJlcikge1xuICAgIGNvbnN0IG9rID0gYXdhaXQgYXV0aG9yaXphdGlvbihjdHgsIG1lbWJlcilcbiAgICBpZiAob2sgIT09IHRydWUpIHtcbiAgICAgIHRocm93IG5ldyBBdXRob3JpemF0aW9uRXJyb3IoKVxuICAgIH1cbiAgfVxuXG4gIGxvZyhzdHIsIGluZGVudCA9IDApIHtcbiAgICBpZiAodGhpcy5sb2dnaW5nKSB7XG4gICAgICBjb25zb2xlLmluZm8oYCR7JyAgJy5yZXBlYXQoaW5kZW50KX0ke3N0cn1gKVxuICAgIH1cbiAgfVxufVxuXG5FdmVudEVtaXR0ZXIubWl4aW4oQ29udHJvbGxlci5wcm90b3R5cGUpXG5cbmNvbnN0IGluaGVyaXRhbmNlTWFwID0gbmV3IFdlYWtNYXAoKVxuXG5mdW5jdGlvbiBzZXR1cEhhbmRsZXJGcm9tT2JqZWN0KG9iamVjdCwgYWN0aW9ucykge1xuICBjb25zdCB7XG4gICAgaGFuZGxlcixcbiAgICBhY3Rpb24sXG4gICAgYXV0aG9yaXplLFxuICAgIHBhcmFtZXRlcnMsXG4gICAgcmV0dXJucyxcbiAgICBzY29wZSxcbiAgICB0cmFuc2FjdGVkXG4gIH0gPSBvYmplY3RcblxuICAvLyBJbiBvcmRlciB0byBzdXBvcnQgYHN1cGVyYCBjYWxscyBpbiB0aGUgYGhhbmRsZXJgIGZ1bmN0aW9uIGluIG9iamVjdFxuICAvLyBub3RhdGlvbiwgZGVwbG95IHRoaXMgY3JhenkgSlMgc29yY2VyeTpcbiAgT2JqZWN0LnNldFByb3RvdHlwZU9mKG9iamVjdCwgT2JqZWN0LmdldFByb3RvdHlwZU9mKGFjdGlvbnMpKVxuXG4gIGhhbmRsZXIuYXV0aG9yaXplID0gYXV0aG9yaXplXG4gIGhhbmRsZXIudHJhbnNhY3RlZCA9IHRyYW5zYWN0ZWRcblxuICBpZiAoYWN0aW9uKSB7XG4gICAgY29uc3QgW3ZlcmIsIHBhdGhdID0gYXNBcnJheShhY3Rpb24pXG4gICAgaGFuZGxlci52ZXJiID0gdmVyYlxuICAgIGhhbmRsZXIucGF0aCA9IHBhdGhcbiAgfVxuXG4gIGlmIChwYXJhbWV0ZXJzKSB7XG4gICAgY29uc3QgW19wYXJhbWV0ZXJzLCBvcHRpb25zXSA9IHBhcmFtZXRlcnNcbiAgICBjb25zdCBoYXNPcHRpb25zID0gaXNBcnJheShfcGFyYW1ldGVycylcbiAgICBoYW5kbGVyLnBhcmFtZXRlcnMgPSBoYXNPcHRpb25zID8gX3BhcmFtZXRlcnMgOiBwYXJhbWV0ZXJzXG5cbiAgICAvLyBJZiB2YWxpZGF0aW9uIG9wdGlvbnMgYXJlIHByb3ZpZGVkLCBleHBvc2UgdGhlbSB0aHJvdWdoXG4gICAgLy8gYGhhbmRsZXIub3B0aW9ucy5wYXJhbWV0ZXJzYCwgc2VlIENvbnRyb2xsZXJBY3Rpb25cbiAgICBpZiAoaGFzT3B0aW9ucykge1xuICAgICAgaGFuZGxlci5vcHRpb25zID0ge1xuICAgICAgICAuLi5oYW5kbGVyLm9wdGlvbnMsXG4gICAgICAgIHBhcmFtZXRlcnM6IG9wdGlvbnNcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZiAocmV0dXJucykge1xuICAgIGNvbnN0IFtfcmV0dXJucywgb3B0aW9uc10gPSBhc0FycmF5KHJldHVybnMpXG4gICAgaGFuZGxlci5yZXR1cm5zID0gX3JldHVybnNcblxuICAgIC8vIElmIHZhbGlkYXRpb24gb3B0aW9ucyBhcmUgcHJvdmlkZWQsIGV4cG9zZSB0aGVtIHRocm91Z2hcbiAgICAvLyBgaGFuZGxlci5vcHRpb25zLnJldHVybnNgLCBzZWUgQ29udHJvbGxlckFjdGlvblxuICAgIGlmIChvcHRpb25zKSB7XG4gICAgICBoYW5kbGVyLm9wdGlvbnMgPSB7XG4gICAgICAgIC4uLmhhbmRsZXIub3B0aW9ucyxcbiAgICAgICAgcGFyYW1ldGVyczogb3B0aW9uc1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGlmIChzY29wZSkge1xuICAgIGhhbmRsZXIuc2NvcGUgPSBhc0FycmF5KHNjb3BlKVxuICB9XG5cbiAgcmV0dXJuIGhhbmRsZXJcbn1cbiJdfQ==
|