@kontur.candy/tools 2.147.0 → 2.149.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +11 -0
- package/distr/Common/CandyApiClient/CandyApiClient.js +51 -6
- package/distr/Common/CandyApiClient/FakeCandyApiClient.js +18 -4
- package/distr/Common/CandyApiClient/Types/GetInner/ServerRawResponse.js +11 -0
- package/distr/Common/CandyApiClient/Types/MassActions/MassActionParameters.js +6 -0
- package/distr/Common/HttpClient/HttpClient.js +5 -2
- package/distr/Common/IterableUtils.js +26 -1
- package/distr/Common/ModelPath/ModelPath.js +3 -3
- package/distr/Tools/src/BuildTasks/Generator/GeneratorWorker/GeneratorRequireUtils.js +45 -2
- package/distr/Tools/src/BuildTasks/Generator/GeneratorWorker/ReadSourcesAndProcessSugarWorker.js +3 -1
- package/distr/Tools/src/CLICommands/BuildForms/RunBuildForms.js +5 -5
- package/distr/Tools/src/Commons/ApiClient/ToolsApiClient.js +37 -0
- package/distr/Tools/src/FormWebpackConfiguration/CacheAssetsPlugin.js +9 -7
- package/distr/Tools/src/LocalServerFrontEndDist/enhancedClient.js +1 -1
- package/distr/Tools/src/LocalServerFrontEndDist/index.js +1 -1
- package/distr/Tools/src/LocalServerFrontEndDist/index.js.map +1 -1
- package/distr/Tools/src/StaticFilesForProductionResourcesDir/client.js +369 -369
- package/distr/Tools/src/StaticFilesForProductionResourcesDir/client.js.map +1 -1
- package/distr/Tools/src/StaticFilesForProductionResourcesDir/client.min.js +33 -33
- package/distr/Tools/src/StaticFilesForProductionResourcesDir/client.min.js.map +1 -1
- package/package.json +1 -1
|
@@ -4,7 +4,7 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.PathTokens = exports.ModelPathImpl = exports.AbsoluteModelFieldPath = void 0;
|
|
7
|
-
exports.
|
|
7
|
+
exports.convertToAbsoluteModelPath = convertToAbsoluteModelPath;
|
|
8
8
|
exports.convertToLegacyPath = convertToLegacyPath;
|
|
9
9
|
exports.createAbsolute = createAbsolute;
|
|
10
10
|
exports.createAbsoluteFromMask = createAbsoluteFromMask;
|
|
@@ -61,7 +61,7 @@ function convertToLegacyPath(path) {
|
|
|
61
61
|
return isModelPath(path) ? path.toLegacyPath() : path;
|
|
62
62
|
}
|
|
63
63
|
|
|
64
|
-
function
|
|
64
|
+
function convertToAbsoluteModelPath(path) {
|
|
65
65
|
return isModelPath(path) ? path : createAbsoluteFromMask(path, PathTokens.each);
|
|
66
66
|
}
|
|
67
67
|
|
|
@@ -606,4 +606,4 @@ class ModelPathImpl {
|
|
|
606
606
|
}
|
|
607
607
|
|
|
608
608
|
exports.ModelPathImpl = ModelPathImpl;
|
|
609
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL0NvbW1vbi9Nb2RlbFBhdGgvTW9kZWxQYXRoLnRzIl0sIm5hbWVzIjpbIkVhY2hTeW1ib2wiLCJTeW1ib2wiLCJmb3IiLCJDdXJyZW50U3ltYm9sIiwiUGF0aFRva2VucyIsImlzTXVsdGlUb2tlbiIsInBhcnQiLCJlYWNoIiwiY3VycmVudCIsImlzU2ltcGxlVG9rZW4iLCJpc0luc3RhbmNlVG9rZW4iLCJ0ZXN0IiwiaXNNb2RlbFBhdGgiLCJwYXRoIiwiTW9kZWxQYXRoSW1wbCIsImNvbnZlcnRUb0xlZ2FjeVBhdGgiLCJ0b0xlZ2FjeVBhdGgiLCJjb252ZXJ0VG9BYnNvbHV0TW9kZWxQYXRoIiwiY3JlYXRlQWJzb2x1dGVGcm9tTWFzayIsImVtcHR5TW9kZWxQYXRoIiwiZW1wdHlBYnNvbHV0ZU1vZGVsUGF0aCIsImNyZWF0ZU1vZGVsUGF0aCIsImFic29sdXRlIiwicGFydFBhcnRTdHJpbmdzIiwic3BsaXQiLCJlbnN1cmVQbGFpblBhdGhQYXJ0c0RvZXNOb3RDb250YWluTXVsdGlwbGljaXR5Iiwic3RhcnRzV2l0aCIsInNsaWNlIiwiY3JlYXRlRnJvbU1hc2siLCJtdWx0aXBsaWNpdHlTeW1ib2wiLCJtYXAiLCJ4IiwicGFydHMiLCJzb21lIiwiRXJyb3IiLCJjcmVhdGVBYnNvbHV0ZSIsImNyZWF0ZVJlbGF0aXZlUmVzb2x2ZWRNb2RlbFBhdGgiLCJjcmVhdGVBYnNvbHV0ZUZyb21Ub2tlbnMiLCJ0b2tlbnMiLCJjcmVhdGVBYnNvbHV0ZVJlc29sdmVkRnJvbVRva2VucyIsImNyZWF0ZVJlbGF0aXZlRnJvbVRva2VucyIsImpvaW5Nb2RlbFBhdGhzIiwicmVzdWx0UGFydHMiLCJqb2luSXRlbSIsInB1c2giLCJpc0Fic29sdXRlIiwiZ2V0UGF0aFBhcnRzQXNBcnJheSIsIkFycmF5IiwiaXNBcnJheSIsIkFic29sdXRlTW9kZWxGaWVsZFBhdGgiLCJjb25zdHJ1Y3RvciIsImZpZWxkTmFtZSIsImZpZWxkIiwiZ2V0SGFzaCIsImlzRXF1YWxzIiwibW9kZWxQYXRoIiwiZWFjaEN1cnJlbnRDb2xsaXNpb24iLCJFYWNoQ3VycmVudENvbGxpc2lvbiIsIkFyZVNhbWUiLCJjcmVhdGVGcm9tU3RyaW5nIiwicGF0aFdpdGhGaWVsZE5hbWUiLCJlbmRzV2l0aCIsInJlcGxhY2UiLCJpc0FsbFRva2Vuc1Jlc29sdmVkIiwiZXZlcnkiLCJwYXRoUGFydHMiLCJsZWdhY3lQYXRoIiwiZmlsdGVyIiwicmVzb2x2ZWQiLCJnZXRQYXRoUGFydHMiLCJnZXRTaW1wbGVUb2tlbnNTdHJpY3QiLCJ0b2tlbiIsImdldFNpbXBsZVRva2Vuc0FzQXJyYXlTdHJpY3QiLCJqb2luV2l0aCIsImlzUmVzb2x2ZWQiLCJyZXNvbHZlQWxsIiwiaW5zdGFuY2UiLCJpc0NvbnRhaW5JdGVyYXRpb24iLCJpc0NvbnRhaW5DdXJyZW50SXRlcmF0aW9uIiwiZ2V0TGFzdExpc3RQYXRoIiwibGFzdEl0ZXJhdGlvbkluZGV4IiwibGFzdEluZGV4T2YiLCJpc0VuZHNXaXRoSXRlcmF0aW9uIiwibGFzdEl0ZW0iLCJJdGVyVXRpbHMiLCJsYXN0IiwidG9TdHJpbmciLCJsZW5ndGgiLCJwYXRoUGFydFRvU3RyaW5nIiwiam9pbiIsIkl0ZXJhdG9yIiwiZnJvbSIsInppcCIsInQxIiwidDIiLCJoYXNoIiwiY3VycmVudFN0ciIsIkFyZURpZmZlcmVudCIsInN0cmluZ0luZGV4IiwiY2hhckNvZGVBdCIsImlzSW5jbHVkZXMiLCJ0YXJnZXRUb2tlbnMiLCJpIiwibGVmdFBhcnQiLCJyaWdodFBhcnQiLCJpc0Zpbml0ZSIsIk51bWJlciIsImdldEl0ZXJhdGlvblJhbmsiLCJpc0VtcHR5IiwibWF0Y2hGb3IiLCJQYXRoTWF0Y2hlciIsIm1hdGNoIiwic3BsaXRCeU11bHRpcGxpY2l0eSIsImxhc3RTaW1wbGVQYXJ0cyIsIk1vZGVsUGF0aEJ1aWxkZXIiLCJhcHBlbmQiLCJlbXB0eSIsInRvUmVzb2x2ZWRQYXRoIiwibm9ybWFsaXplIiwicmVzdWx0VG9rZW5zIiwicGF0aFBhcnQiLCJwb3AiLCJ0b0N1cnJlbnRJdGVyYXRpb24iLCJ0b0VhY2hJdGVyYXRpb24iLCJ0b0Fic29sdXRlIiwiZ2V0QWxsUGFyZW50UGF0aHMiLCJyZXN1bHQiLCJza2lwTGFzdCIsInRvUGF0aCIsInRyaW1MYXN0U3RhcklmTGFzdFRva2VuIiwidW5kZWZpbmVkIiwiZ2V0UGFyZW50UGF0aCIsImFwcGx5SW5zdGFuY2VzRGlydHkiLCJpbnN0YW5jZXMiLCJpbnN0YW5jZUNvdW50ZXIiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUNBOztBQUNBOztBQUNBOztBQUVBOztBQUNBOztBQUNBOztBQUdBLE1BQU1BLFVBQVUsR0FBR0MsTUFBTSxDQUFDQyxHQUFQLENBQVcsVUFBWCxDQUFuQjtBQUNBLE1BQU1DLGFBQWEsR0FBR0YsTUFBTSxDQUFDQyxHQUFQLENBQVcsYUFBWCxDQUF0Qjs7QUFFTyxNQUFNRSxVQUFOLENBQWlCO0FBSU0sU0FBWkMsWUFBWSxDQUFDQyxJQUFELEVBQWdGO0FBQ3RHLFdBQU9BLElBQUksS0FBS0YsVUFBVSxDQUFDRyxJQUFwQixJQUE0QkQsSUFBSSxLQUFLRixVQUFVLENBQUNJLE9BQXZEO0FBQ0g7O0FBRTBCLFNBQWJDLGFBQWEsQ0FBQ0gsSUFBRCxFQUE4QztBQUNyRSxXQUFPLE9BQU9BLElBQVAsS0FBZ0IsUUFBdkI7QUFDSDs7QUFFNEIsU0FBZkksZUFBZSxDQUFDSixJQUFELEVBQThDO0FBQ3ZFLFdBQU8sT0FBT0EsSUFBUCxLQUFnQixRQUFoQixJQUE0QixTQUFTSyxJQUFULENBQWNMLElBQWQsQ0FBbkM7QUFDSDs7QUFkbUI7OztBQUFYRixVLENBQ0tHLEksR0FBMEJQLFU7QUFEL0JJLFUsQ0FFS0ksTyxHQUFnQ0wsYTs7QUFtQjNDLFNBQVNTLFdBQVQsQ0FBcUJDLElBQXJCLEVBQWlGO0FBQ3BGLFNBQU8sT0FBT0EsSUFBUCxLQUFnQixRQUFoQixJQUE0QkEsSUFBSSxZQUFZQyxhQUFuRDtBQUNIOztBQUVNLFNBQVNDLG1CQUFULENBQTZCRixJ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UyxDQUFDOUMsTUFBVixLQUFxQixDQUE5QyxFQUFpRDtBQUM3QyxhQUFPLElBQVA7QUFDSDs7QUFDRCxRQUFJK0MsZUFBZSxHQUFHLENBQXRCO0FBQ0EsVUFBTVIsTUFBTSxHQUFHLElBQUlaLGtDQUFKLENBQXFCLElBQXJCLENBQWY7O0FBQ0EsU0FBSyxNQUFNM0MsS0FBWCxJQUFvQixLQUFLRixZQUFMLEVBQXBCLEVBQXlDO0FBQ3JDLFVBQUlqRSxVQUFVLENBQUNDLFlBQVgsQ0FBd0JrRSxLQUF4QixLQUFrQytELGVBQWUsR0FBR0QsU0FBUyxDQUFDOUMsTUFBbEUsRUFBMEU7QUFBQTs7QUFDdEV1QyxRQUFBQSxNQUFNLENBQUNYLE1BQVAsMEJBQWNrQixTQUFTLENBQUNDLGVBQUQsQ0FBdkIseUVBQTRDLDBCQUE1QztBQUNBQSxRQUFBQSxlQUFlO0FBQ2xCLE9BSEQsTUFHTztBQUNIUixRQUFBQSxNQUFNLENBQUNYLE1BQVAsQ0FBYzVDLEtBQWQ7QUFDSDtBQUNKLEtBYnNGLENBY3ZGO0FBQ0E7OztBQUNBLFdBQU91RCxNQUFNLENBQUNFLE1BQVAsRUFBUDtBQUNIOztBQUVPeEMsRUFBQUEsZ0JBQWdCLENBQUNnQyxRQUFELEVBQThCO0FBQ2xELFFBQUksT0FBT0EsUUFBUCxLQUFvQixRQUF4QixFQUFrQztBQUM5QixhQUFPQSxRQUFQO0FBQ0g7O0FBQ0QsUUFBSUEsUUFBUSxLQUFLcEgsVUFBVSxDQUFDRyxJQUE1QixFQUFrQztBQUM5QixhQUFPLEdBQVA7QUFDSDs7QUFDRCxRQUFJaUgsUUFBUSxLQUFLcEgsVUFBVSxDQUFDSSxPQUE1QixFQUFxQztBQUNqQyxhQUFPLEdBQVA7QUFDSDs7QUFDRCxVQUFNLElBQUkwQixLQUFKLENBQVcsZ0NBQStCLHFDQUFtQnNGLFFBQW5CLENBQTZCLEVBQXZFLENBQU47QUFDSDs7QUFuVkwiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBCaW5kaW5nUGF0aCwgVmlld01vZGVsRmllbGROYW1lIH0gZnJvbSBcIi4uLy4uL0VuZ2luZS9zcmMvRW5naW5lL0NvcmUvQ29yZVR5cGVzXCI7XG5pbXBvcnQgeyBjb3VudCwgSXRlclV0aWxzLCByZXZlcnNlQXJyYXkgfSBmcm9tIFwiLi4vSXRlcmFibGVVdGlsc1wiO1xuaW1wb3J0IHsgZW5zdXJlQW5kR2V0U3RyaW5nLCByZWplY3QgfSBmcm9tIFwiLi4vVHlwaW5nVXRpbHNcIjtcbmltcG9ydCB7IGdldFNpbXBsZUhhc2hCeVN0cmluZyB9IGZyb20gXCIuLi9oYXNoVXRpbHNcIjtcblxuaW1wb3J0IHsgRWFjaEN1cnJlbnRDb2xsaXNpb24gfSBmcm9tIFwiLi9FYWNoQ3VycmVudENvbGxpc2lvblwiO1xuaW1wb3J0IHsgTW9kZWxQYXRoQnVpbGRlciB9IGZyb20gXCIuL01vZGVsUGF0aEJ1aWxkZXJcIjtcbmltcG9ydCB7IFBhdGhNYXRjaGVyLCBQYXRoTWF0Y2hpbmcgfSBmcm9tIFwiLi9QYXRoTWF0Y2hlclwiO1xuaW1wb3J0IHsgSUVxdWF0YWJsZSB9IGZyb20gXCIuL0lFcXVhdGFibGVcIjtcblxuY29uc3QgRWFjaFN5bWJvbCA9IFN5bWJvbC5mb3IoXCJfX0VBQ0hfX1wiKTtcbmNvbnN0IEN1cnJlbnRTeW1ib2wgPSBTeW1ib2wuZm9yKFwiX19DVVJSRU5UX19cIik7XG5cbmV4cG9ydCBjbGFzcyBQYXRoVG9rZW5zIHtcbiAgICBwdWJsaWMgc3RhdGljIGVhY2g6IHR5cGVvZiBFYWNoU3ltYm9sID0gRWFjaFN5bWJvbDtcbiAgICBwdWJsaWMgc3RhdGljIGN1cnJlbnQ6IHR5cGVvZiBDdXJyZW50U3ltYm9sID0gQ3VycmVudFN5bWJvbDtcblxuICAgIHB1YmxpYyBzdGF0aWMgaXNNdWx0aVRva2VuKHBhcnQ6IHVuZGVmaW5lZCB8IFBhdGhUb2tlbik6IHBhcnQgaXMgdHlwZW9mIEVhY2hTeW1ib2wgfCB0eXBlb2YgQ3VycmVudFN5bWJvbCB7XG4gICAgICAgIHJldHVybiBwYXJ0ID09PSBQYXRoVG9rZW5zLmVhY2ggfHwgcGFydCA9PT0gUGF0aFRva2Vucy5jdXJyZW50O1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgaXNTaW1wbGVUb2tlbihwYXJ0OiB1bmRlZmluZWQgfCBQYXRoVG9rZW4pOiBwYXJ0IGlzIHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0eXBlb2YgcGFydCA9PT0gXCJzdHJpbmdcIjtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIGlzSW5zdGFuY2VUb2tlbihwYXJ0OiB1bmRlZmluZWQgfCBQYXRoVG9rZW4pOiBwYXJ0IGlzIHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0eXBlb2YgcGFydCA9PT0gXCJzdHJpbmdcIiAmJiAvXlxcZCskL2kudGVzdChwYXJ0KTtcbiAgICB9XG59XG5cbmV4cG9ydCB0eXBlIFNpbXBsZVBhdGhUb2tlbiA9IHN0cmluZztcblxuZXhwb3J0IHR5cGUgUGF0aFRva2VuID0gU2ltcGxlUGF0aFRva2VuIHwgdHlwZW9mIEVhY2hTeW1ib2wgfCB0eXBlb2YgQ3VycmVudFN5bWJvbDtcblxuZXhwb3J0IGZ1bmN0aW9uIGlzTW9kZWxQYXRoKHBhdGg6IEJpbmRpbmdQYXRoIHwgTW9kZWxQYXRoIHwgdW5rbm93bik6IHBhdGggaXMgTW9kZWxQYXRoIHtcbiAgICByZXR1cm4gdHlwZW9mIHBhdGggIT09IFwic3RyaW5nXCIgJiYgcGF0aCBpbnN0YW5jZW9mIE1vZGVsUGF0aEltcGw7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb252ZXJ0VG9MZWdhY3lQYXRoKHBhdGg6IEJpbmRpbmdQYXRoIHwgTW9kZWxQYXRoKTogQmluZGluZ1BhdGgge1xuICAgIHJldHVybiBpc01vZGVsUGF0aChwYXRoKSA/IHBhdGgudG9MZWdhY3lQYXRoKCkgOiBwYXRoO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29udmVydFRvQWJzb2x1dE1vZGVsUGF0aDxSIGV4dGVuZHMgYm9vbGVhbiwgQSBleHRlbmRzIGJvb2xlYW4+KFxuICAgIHBhdGg6IEJpbmRpbmdQYXRoIHwgSU1vZGVsUGF0aDxSLCBBPlxuKTogSU1vZGVsUGF0aDxSLCB0cnVlPjtcbmV4cG9ydCBmdW5jdGlvbiBjb252ZXJ0VG9BYnNvbHV0TW9kZWxQYXRoKHBhdGg6IEJpbmRpbmdQYXRoIHwgQWJzb2x1dGVNb2RlbFBhdGgpOiBBYnNvbHV0ZU1vZGVsUGF0aCB7XG4gICAgcmV0dXJuIGlzTW9kZWxQYXRoKHBhdGgpID8gcGF0aCA6IGNyZWF0ZUFic29sdXRlRnJvbU1hc2socGF0aCwgUGF0aFRva2Vucy5lYWNoKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVtcHR5TW9kZWxQYXRoKCk6IFJlbGF0aXZlUmVzb2x2ZWRNb2RlbFBhdGgge1xuICAgIHJldHVybiBuZXcgTW9kZWxQYXRoSW1wbDx0cnVlLCBmYWxzZT4oW10sIGZhbHNlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVtcHR5QWJzb2x1dGVNb2RlbFBhdGgoKTogQWJzb2x1dGVSZXNvbHZlZE1vZGVsUGF0aCB7XG4gICAgcmV0dXJuIG5ldyBNb2RlbFBhdGhJbXBsPHRydWUsIHRydWU+KFtdLCB0cnVlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZU1vZGVsUGF0aChwYXRoOiBzdHJpbmcsIGFic29sdXRlOiB0cnVlKTogQWJzb2x1dGVSZXNvbHZlZE1vZGVsUGF0aDtcbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVNb2RlbFBhdGgocGF0aDogc3RyaW5nLCBhYnNvbHV0ZTogZmFsc2UpOiBSZWxhdGl2ZVJlc29sdmVkTW9kZWxQYXRoO1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZU1vZGVsUGF0aChwYXRoOiBzdHJpbmcsIGFic29sdXRlOiBcImF1dG9cIik6IFJlc29sdmVkTW9kZWxQYXRoO1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZU1vZGVsUGF0aChwYXRoOiBzdHJpbmcsIGFic29sdXRlOiBib29sZWFuIHwgXCJhdXRvXCIpOiBSZXNvbHZlZE1vZGVsUGF0aCB7XG4gICAgY29uc3QgcGFydFBhcnRTdHJpbmdzID0gcGF0aC5zcGxpdChcIi9cIik7XG4gICAgZW5zdXJlUGxhaW5QYXRoUGFydHNEb2VzTm90Q29udGFpbk11bHRpcGxpY2l0eShwYXJ0UGFydFN0cmluZ3MpO1xuICAgIGlmIChhYnNvbHV0ZSA9PT0gXCJhdXRvXCIpIHtcbiAgICAgICAgaWYgKHBhdGguc3RhcnRzV2l0aChcIi9cIikpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgTW9kZWxQYXRoSW1wbDx0cnVlLCB0cnVlPihwYXJ0UGFydFN0cmluZ3Muc2xpY2UoMSksIHRydWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBNb2RlbFBhdGhJbXBsPHRydWUsIGZhbHNlPihwYXJ0UGFydFN0cmluZ3MsIGZhbHNlKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAoYWJzb2x1dGUgJiYgcGF0aC5zdGFydHNXaXRoKFwiL1wiKSkge1xuICAgICAgICByZXR1cm4gbmV3IE1vZGVsUGF0aEltcGw8dHJ1ZSwgdHJ1ZT4ocGFydFBhcnRTdHJpbmdzLnNsaWNlKDEpLCB0cnVlKTtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBNb2RlbFBhdGhJbXBsPHRydWUsIGJvb2xlYW4+KHBhcnRQYXJ0U3RyaW5ncywgYWJzb2x1dGUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlRnJvbU1hc2socGF0aDogc3RyaW5nLCBhYnNvbHV0ZTogdHJ1ZSwgbXVsdGlwbGljaXR5U3ltYm9sOiBQYXRoVG9rZW4pOiBBYnNvbHV0ZU1vZGVsUGF0aDtcbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVGcm9tTWFzayhwYXRoOiBzdHJpbmcsIGFic29sdXRlOiBmYWxzZSwgbXVsdGlwbGljaXR5U3ltYm9sOiBQYXRoVG9rZW4pOiBSZXNvbHZlZE1vZGVsUGF0aDtcbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVGcm9tTWFzayhwYXRoOiBzdHJpbmcsIGFic29sdXRlOiBcImF1dG9cIiwgbXVsdGlwbGljaXR5U3ltYm9sOiBQYXRoVG9rZW4pOiBNb2RlbFBhdGg7XG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlRnJvbU1hc2socGF0aDogc3RyaW5nLCBhYnNvbHV0ZTogYm9vbGVhbiB8IFwiYXV0b1wiLCBtdWx0aXBsaWNpdHlTeW1ib2w6IFBhdGhUb2tlbik6IE1vZGVsUGF0aCB7XG4gICAgY29uc3QgcGFydFBhcnRTdHJpbmdzID0gcGF0aC5zcGxpdChcIi9cIikubWFwKHggPT4gKHggPT09IFwiKlwiID8gbXVsdGlwbGljaXR5U3ltYm9sIDogeCkpO1xuICAgIGlmIChhYnNvbHV0ZSA9PT0gXCJhdXRvXCIpIHtcbiAgICAgICAgaWYgKHBhdGguc3RhcnRzV2l0aChcIi9cIikpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgTW9kZWxQYXRoSW1wbChwYXJ0UGFydFN0cmluZ3Muc2xpY2UoMSksIHRydWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBNb2RlbFBhdGhJbXBsKHBhcnRQYXJ0U3RyaW5ncywgZmFsc2UpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmIChhYnNvbHV0ZSAmJiBwYXRoLnN0YXJ0c1dpdGgoXCIvXCIpKSB7XG4gICAgICAgIHJldHVybiBuZXcgTW9kZWxQYXRoSW1wbChwYXJ0UGFydFN0cmluZ3Muc2xpY2UoMSksIHRydWUpO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IE1vZGVsUGF0aEltcGwocGFydFBhcnRTdHJpbmdzLCBhYnNvbHV0ZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVBYnNvbHV0ZUZyb21NYXNrKHBhdGg6IHN0cmluZywgbXVsdGlwbGljaXR5U3ltYm9sOiBQYXRoVG9rZW4pOiBBYnNvbHV0ZU1vZGVsUGF0aCB7XG4gICAgY29uc3QgcGFydFBhcnRTdHJpbmdzID0gcGF0aC5zcGxpdChcIi9cIikubWFwKHggPT4gKHggPT09IFwiKlwiID8gbXVsdGlwbGljaXR5U3ltYm9sIDogeCkpO1xuICAgIGlmIChwYXRoLnN0YXJ0c1dpdGgoXCIvXCIpKSB7XG4gICAgICAgIHJldHVybiBuZXcgTW9kZWxQYXRoSW1wbChwYXJ0UGFydFN0cmluZ3Muc2xpY2UoMSksIHRydWUpO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IE1vZGVsUGF0aEltcGwocGFydFBhcnRTdHJpbmdzLCB0cnVlKTtcbn1cblxuZnVuY3Rpb24gZW5zdXJlUGxhaW5QYXRoUGFydHNEb2VzTm90Q29udGFpbk11bHRpcGxpY2l0eShwYXJ0czogc3RyaW5nW10pOiB2b2lkIHtcbiAgICBpZiAocGFydHMuc29tZSh4ID0+IHggPT09IFwiKlwiKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJQYXRoIG11c3Qgbm90IGNvbnRhaW4gKiBzeW1ib2xcIik7XG4gICAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQWJzb2x1dGUocGF0aDogc3RyaW5nKTogQWJzb2x1dGVSZXNvbHZlZE1vZGVsUGF0aCB7XG4gICAgY29uc3QgcGFydFBhcnRTdHJpbmdzID0gcGF0aC5zcGxpdChcIi9cIik7XG4gICAgZW5zdXJlUGxhaW5QYXRoUGFydHNEb2VzTm90Q29udGFpbk11bHRpcGxpY2l0eShwYXJ0UGFydFN0cmluZ3MpO1xuICAgIGlmIChwYXRoLnN0YXJ0c1dpdGgoXCIvXCIpKSB7XG4gICAgICAgIHJldHVybiBuZXcgTW9kZWxQYXRoSW1wbDx0cnVlLCB0cnVlPihwYXJ0UGFydFN0cmluZ3Muc2xpY2UoMSksIHRydWUpO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IE1vZGVsUGF0aEltcGw8dHJ1ZSwgdHJ1ZT4ocGFydFBhcnRTdHJpbmdzLCB0cnVlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVJlbGF0aXZlUmVzb2x2ZWRNb2RlbFBhdGgocGF0aDogc3RyaW5nKTogUmVsYXRpdmVSZXNvbHZlZE1vZGVsUGF0aCB7XG4gICAgY29uc3QgcGFydFBhcnRTdHJpbmdzID0gcGF0aC5zcGxpdChcIi9cIik7XG4gICAgZW5zdXJlUGxhaW5QYXRoUGFydHNEb2VzTm90Q29udGFpbk11bHRpcGxpY2l0eShwYXJ0UGFydFN0cmluZ3MpO1xuICAgIHJldHVybiBuZXcgTW9kZWxQYXRoSW1wbDx0cnVlLCBmYWxzZT4ocGFydFBhcnRTdHJpbmdzLCBmYWxzZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVBYnNvbHV0ZUZyb21Ub2tlbnModG9rZW5zOiBQYXRoVG9rZW5bXSk6IEFic29sdXRlTW9kZWxQYXRoIHtcbiAgICByZXR1cm4gbmV3IE1vZGVsUGF0aEltcGw8ZmFsc2UsIHRydWU+KHRva2VucywgdHJ1ZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVBYnNvbHV0ZVJlc29sdmVkRnJvbVRva2Vucyh0b2tlbnM6IHN0cmluZ1tdKTogQWJzb2x1dGVSZXNvbHZlZE1vZGVsUGF0aCB7XG4gICAgZW5zdXJlUGxhaW5QYXRoUGFydHNEb2VzTm90Q29udGFpbk11bHRpcGxpY2l0eSh0b2tlbnMpO1xuICAgIHJldHVybiBuZXcgTW9kZWxQYXRoSW1wbDx0cnVlLCB0cnVlPih0b2tlbnMsIHRydWUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlUmVsYXRpdmVGcm9tVG9rZW5zKHRva2VuczogcmVhZG9ubHkgc3RyaW5nW10pOiBSZWxhdGl2ZVJlc29sdmVkTW9kZWxQYXRoO1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVJlbGF0aXZlRnJvbVRva2Vucyh0b2tlbnM6IHJlYWRvbmx5IFBhdGhUb2tlbltdKTogUmVsYXRpdmVNb2RlbFBhdGg7XG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlUmVsYXRpdmVGcm9tVG9rZW5zKHRva2VuczogcmVhZG9ubHkgUGF0aFRva2VuW10pOiBSZWxhdGl2ZU1vZGVsUGF0aCB7XG4gICAgcmV0dXJuIG5ldyBNb2RlbFBhdGhJbXBsPGZhbHNlLCBmYWxzZT4odG9rZW5zLCBmYWxzZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBqb2luTW9kZWxQYXRocyguLi5wYXJ0czogQXJyYXk8TW9kZWxQYXRoIHwgUGF0aFRva2VuIHwgUGF0aFRva2VuW10+KTogTW9kZWxQYXRoIHtcbiAgICBsZXQgYWJzb2x1dGUgPSBmYWxzZTtcbiAgICBsZXQgcmVzdWx0UGFydHM6IFBhdGhUb2tlbltdID0gW107XG4gICAgZm9yIChjb25zdCBqb2luSXRlbSBvZiBwYXJ0cykge1xuICAgICAgICBpZiAodHlwZW9mIGpvaW5JdGVtID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICByZXN1bHRQYXJ0cy5wdXNoKGpvaW5JdGVtKTtcbiAgICAgICAgfSBlbHNlIGlmIChpc01vZGVsUGF0aChqb2luSXRlbSkpIHtcbiAgICAgICAgICAgIGlmIChqb2luSXRlbS5pc0Fic29sdXRlKCkpIHtcbiAgICAgICAgICAgICAgICBhYnNvbHV0ZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgcmVzdWx0UGFydHMgPSBbLi4uam9pbkl0ZW0uZ2V0UGF0aFBhcnRzQXNBcnJheSgpXTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0UGFydHMucHVzaCguLi5qb2luSXRlbS5nZXRQYXRoUGFydHNBc0FycmF5KCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoam9pbkl0ZW0pKSB7XG4gICAgICAgICAgICByZXN1bHRQYXJ0cy5wdXNoKC4uLmpvaW5JdGVtKTtcbiAgICAgICAgfSBlbHNlIGlmIChQYXRoVG9rZW5zLmlzTXVsdGlUb2tlbihqb2luSXRlbSkpIHtcbiAgICAgICAgICAgIHJlc3VsdFBhcnRzLnB1c2goam9pbkl0ZW0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBNb2RlbFBhdGhJbXBsKHJlc3VsdFBhcnRzLCBhYnNvbHV0ZSk7XG59XG5cbmV4cG9ydCBjbGFzcyBBYnNvbHV0ZU1vZGVsRmllbGRQYXRoIGltcGxlbWVudHMgSUVxdWF0YWJsZTxBYnNvbHV0ZU1vZGVsRmllbGRQYXRoPiB7XG4gICAgcHVibGljIHJlYWRvbmx5IHBhdGg6IEFic29sdXRlTW9kZWxQYXRoO1xuICAgIHB1YmxpYyByZWFkb25seSBmaWVsZDogVmlld01vZGVsRmllbGROYW1lIHwgXCIkZXJyb3JDb3VudFwiIHwgXCIkd2FybmluZ0NvdW50XCI7XG5cbiAgICBwdWJsaWMgY29uc3RydWN0b3IocGF0aDogQWJzb2x1dGVNb2RlbFBhdGgsIGZpZWxkTmFtZTogVmlld01vZGVsRmllbGROYW1lIHwgXCIkZXJyb3JDb3VudFwiIHwgXCIkd2FybmluZ0NvdW50XCIpIHtcbiAgICAgICAgdGhpcy5wYXRoID0gcGF0aDtcbiAgICAgICAgdGhpcy5maWVsZCA9IGZpZWxkTmFtZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0SGFzaCgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5wYXRoLmdldEhhc2goKSArIGdldFNpbXBsZUhhc2hCeVN0cmluZyh0aGlzLmZpZWxkKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgaXNFcXVhbHMoXG4gICAgICAgIG1vZGVsUGF0aDogQWJzb2x1dGVNb2RlbEZpZWxkUGF0aCxcbiAgICAgICAgZWFjaEN1cnJlbnRDb2xsaXNpb246IEVhY2hDdXJyZW50Q29sbGlzaW9uID0gRWFjaEN1cnJlbnRDb2xsaXNpb24uQXJlU2FtZVxuICAgICk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5wYXRoLmlzRXF1YWxzKG1vZGVsUGF0aC5wYXRoLCBlYWNoQ3VycmVudENvbGxpc2lvbikgJiYgdGhpcy5maWVsZCA9PT0gbW9kZWxQYXRoLmZpZWxkO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgY3JlYXRlRnJvbVN0cmluZyhwYXRoV2l0aEZpZWxkTmFtZTogc3RyaW5nKTogQWJzb2x1dGVNb2RlbEZpZWxkUGF0aCB7XG4gICAgICAgIGlmIChwYXRoV2l0aEZpZWxkTmFtZS5lbmRzV2l0aChcIi4kZXJyb3JDb3VudFwiKSkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBBYnNvbHV0ZU1vZGVsRmllbGRQYXRoKFxuICAgICAgICAgICAgICAgIGNyZWF0ZUFic29sdXRlKHBhdGhXaXRoRmllbGROYW1lLnJlcGxhY2UoXCIuJGVycm9yQ291bnRcIiwgXCJcIikpLFxuICAgICAgICAgICAgICAgIFwiJGVycm9yQ291bnRcIlxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocGF0aFdpdGhGaWVsZE5hbWUuZW5kc1dpdGgoXCIuJHdhcm5pbmdDb3VudFwiKSkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBBYnNvbHV0ZU1vZGVsRmllbGRQYXRoKFxuICAgICAgICAgICAgICAgIGNyZWF0ZUFic29sdXRlKHBhdGhXaXRoRmllbGROYW1lLnJlcGxhY2UoXCIuJHdhcm5pbmdDb3VudFwiLCBcIlwiKSksXG4gICAgICAgICAgICAgICAgXCIkd2FybmluZ0NvdW50XCJcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ldyBBYnNvbHV0ZU1vZGVsRmllbGRQYXRoKGNyZWF0ZUFic29sdXRlKHBhdGhXaXRoRmllbGROYW1lKSwgXCJ2YWx1ZVwiKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIGNyZWF0ZUZyb21NYXNrKHBhdGhXaXRoRmllbGROYW1lOiBzdHJpbmcsIG11bHRpcGxpY2l0eVN5bWJvbDogUGF0aFRva2VuKTogQWJzb2x1dGVNb2RlbEZpZWxkUGF0aCB7XG4gICAgICAgIGlmIChwYXRoV2l0aEZpZWxkTmFtZS5lbmRzV2l0aChcIi4kZXJyb3JDb3VudFwiKSkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBBYnNvbHV0ZU1vZGVsRmllbGRQYXRoKFxuICAgICAgICAgICAgICAgIGNyZWF0ZUFic29sdXRlRnJvbU1hc2socGF0aFdpdGhGaWVsZE5hbWUucmVwbGFjZShcIi4kZXJyb3JDb3VudFwiLCBcIlwiKSwgbXVsdGlwbGljaXR5U3ltYm9sKSxcbiAgICAgICAgICAgICAgICBcIiRlcnJvckNvdW50XCJcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBhdGhXaXRoRmllbGROYW1lLmVuZHNXaXRoKFwiLiR3YXJuaW5nQ291bnRcIikpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgQWJzb2x1dGVNb2RlbEZpZWxkUGF0aChcbiAgICAgICAgICAgICAgICBjcmVhdGVBYnNvbHV0ZUZyb21NYXNrKHBhdGhXaXRoRmllbGROYW1lLnJlcGxhY2UoXCIuJHdhcm5pbmdDb3VudFwiLCBcIlwiKSwgbXVsdGlwbGljaXR5U3ltYm9sKSxcbiAgICAgICAgICAgICAgICBcIiR3YXJuaW5nQ291bnRcIlxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocGF0aFdpdGhGaWVsZE5hbWUuZW5kc1dpdGgoXCIuZXJyb3JzQ291bnRcIikpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgQWJzb2x1dGVNb2RlbEZpZWxkUGF0aChcbiAgICAgICAgICAgICAgICBjcmVhdGVBYnNvbHV0ZUZyb21NYXNrKHBhdGhXaXRoRmllbGROYW1lLnJlcGxhY2UoXCIuZXJyb3JzQ291bnRcIiwgXCJcIiksIG11bHRpcGxpY2l0eVN5bWJvbCksXG4gICAgICAgICAgICAgICAgXCJlcnJvcnNDb3VudFwiXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwYXRoV2l0aEZpZWxkTmFtZS5lbmRzV2l0aChcIi53YXJuaW5nc0NvdW50XCIpKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IEFic29sdXRlTW9kZWxGaWVsZFBhdGgoXG4gICAgICAgICAgICAgICAgY3JlYXRlQWJzb2x1dGVGcm9tTWFzayhwYXRoV2l0aEZpZWxkTmFtZS5yZXBsYWNlKFwiLndhcm5pbmdzQ291bnRcIiwgXCJcIiksIG11bHRpcGxpY2l0eVN5bWJvbCksXG4gICAgICAgICAgICAgICAgXCJ3YXJuaW5nc0NvdW50XCJcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ldyBBYnNvbHV0ZU1vZGVsRmllbGRQYXRoKGNyZWF0ZUFic29sdXRlRnJvbU1hc2socGF0aFdpdGhGaWVsZE5hbWUsIG11bHRpcGxpY2l0eVN5bWJvbCksIFwidmFsdWVcIik7XG4gICAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIElNb2RlbFBhdGg8VFJlc29sdmVkIGV4dGVuZHMgYm9vbGVhbiwgVEFic29sdXRlIGV4dGVuZHMgYm9vbGVhbj5cbiAgICBleHRlbmRzIElFcXVhdGFibGU8SU1vZGVsUGF0aDxib29sZWFuLCBib29sZWFuPj4ge1xuICAgIHJlYWRvbmx5IHJlc29sdmVkOiBUUmVzb2x2ZWQ7XG4gICAgcmVhZG9ubHkgYWJzb2x1dGU6IFRBYnNvbHV0ZTtcblxuICAgIGlzRXF1YWxzKG1vZGVsUGF0aDogTW9kZWxQYXRoLCBlYWNoQ3VycmVudENvbGxpc2lvbj86IEVhY2hDdXJyZW50Q29sbGlzaW9uKTogYm9vbGVhbjtcbiAgICBnZXRIYXNoKGVhY2hDdXJyZW50Q29sbGlzaW9uPzogRWFjaEN1cnJlbnRDb2xsaXNpb24pOiBudW1iZXI7XG5cbiAgICBpc1Jlc29sdmVkKCk6IHRoaXMgaXMgSU1vZGVsUGF0aDx0cnVlLCBUQWJzb2x1dGU+O1xuICAgIGlzQWJzb2x1dGUoKTogdGhpcyBpcyBJTW9kZWxQYXRoPFRSZXNvbHZlZCwgdHJ1ZT47XG4gICAgdG9BYnNvbHV0ZSgpOiBJTW9kZWxQYXRoPFRSZXNvbHZlZCwgdHJ1ZT47XG5cbiAgICBqb2luV2l0aCguLi5wYXRoOiBzdHJpbmdbXSk6IElNb2RlbFBhdGg8VFJlc29sdmVkLCBUQWJzb2x1dGU+O1xuICAgIGpvaW5XaXRoKC4uLnBhdGg6IFBhdGhUb2tlbltdKTogSU1vZGVsUGF0aDxib29sZWFuLCBUQWJzb2x1dGU+O1xuICAgIGpvaW5XaXRoKC4uLnBhdGg6IEFycmF5PFJlc29sdmVkTW9kZWxQYXRoIHwgc3RyaW5nPik6IElNb2RlbFBhdGg8VFJlc29sdmVkLCBUQWJzb2x1dGU+O1xuICAgIGpvaW5XaXRoKC4uLnBhdGg6IEFycmF5PEFic29sdXRlUmVzb2x2ZWRNb2RlbFBhdGggfCBzdHJpbmc+KTogSU1vZGVsUGF0aDxUUmVzb2x2ZWQsIHRydWU+O1xuICAgIGpvaW5XaXRoKC4uLnBhdGg6IEFycmF5PE1vZGVsUGF0aCB8IFBhdGhUb2tlbj4pOiBJTW9kZWxQYXRoPGJvb2xlYW4sIFRBYnNvbHV0ZT47XG5cbiAgICBnZXRQYXRoUGFydHMoKTogSXRlcmFibGU8UGF0aFRva2VuU3BlYzxUUmVzb2x2ZWQ+PjtcbiAgICBnZXRQYXRoUGFydHNBc0FycmF5KCk6IFJlYWRvbmx5QXJyYXk8UGF0aFRva2VuU3BlYzxUUmVzb2x2ZWQ+PjtcbiAgICBnZXRTaW1wbGVUb2tlbnNTdHJpY3QoKTogSXRlcmFibGU8U2ltcGxlUGF0aFRva2VuPjtcbiAgICBnZXRTaW1wbGVUb2tlbnNBc0FycmF5U3RyaWN0KCk6IHJlYWRvbmx5IFNpbXBsZVBhdGhUb2tlbltdO1xuXG4gICAgcmVzb2x2ZUFsbChpbnN0YW5jZTogc3RyaW5nKTogTW9kZWxQYXRoO1xuICAgIGlzQ29udGFpbkl0ZXJhdGlvbigpOiBib29sZWFuO1xuICAgIGlzQ29udGFpbkN1cnJlbnRJdGVyYXRpb24oKTogYm9vbGVhbjtcbiAgICBnZXRMYXN0TGlzdFBhdGgoKTogUGF0aFRva2VuW107XG4gICAgaXNFbmRzV2l0aEl0ZXJhdGlvbigpOiBib29sZWFuO1xuICAgIGlzSW5jbHVkZXMobW9kZWxQYXRoOiBNb2RlbFBhdGgpOiBib29sZWFuO1xuICAgIGdldEl0ZXJhdGlvblJhbmsoKTogbnVtYmVyO1xuICAgIGlzRW1wdHkoKTogYm9vbGVhbjtcbiAgICBtYXRjaEZvcihtb2RlbFBhdGg6IE1vZGVsUGF0aCk6IFBhdGhNYXRjaGluZztcbiAgICBzcGxpdEJ5TXVsdGlwbGljaXR5KCk6IEl0ZXJhYmxlPFJlc29sdmVkTW9kZWxQYXRoIHwgdHlwZW9mIEVhY2hTeW1ib2wgfCB0eXBlb2YgQ3VycmVudFN5bWJvbD47XG4gICAgbm9ybWFsaXplKCk6IElNb2RlbFBhdGg8VFJlc29sdmVkLCBUQWJzb2x1dGU+O1xuICAgIHRvQ3VycmVudEl0ZXJhdGlvbigpOiBJTW9kZWxQYXRoPFRSZXNvbHZlZCwgVEFic29sdXRlPjtcbiAgICB0b0VhY2hJdGVyYXRpb24oKTogSU1vZGVsUGF0aDxUUmVzb2x2ZWQsIFRBYnNvbHV0ZT47XG4gICAgZ2V0QWxsUGFyZW50UGF0aHMoKTogSXRlcmFibGU8TW9kZWxQYXRoPjtcbiAgICB0cmltTGFzdFN0YXJJZkxhc3RUb2tlbigpOiBJTW9kZWxQYXRoPFRSZXNvbHZlZCwgVEFic29sdXRlPjtcbiAgICBnZXRQYXJlbnRQYXRoKCk6IElNb2RlbFBhdGg8VFJlc29sdmVkLCBUQWJzb2x1dGU+O1xuICAgIGFwcGx5SW5zdGFuY2VzRGlydHkoaW5zdGFuY2VzOiBTaW1wbGVQYXRoVG9rZW5bXSk6IElNb2RlbFBhdGg8VFJlc29sdmVkLCBUQWJzb2x1dGU+O1xuXG4gICAgdG9TdHJpbmcoKTogc3RyaW5nO1xuICAgIHRvTGVnYWN5UGF0aCgpOiBzdHJpbmc7XG59XG5cbmV4cG9ydCB0eXBlIE1vZGVsUGF0aCA9IElNb2RlbFBhdGg8Ym9vbGVhbiwgYm9vbGVhbj47XG5leHBvcnQgdHlwZSBSZXNvbHZlZE1vZGVsUGF0aCA9IElNb2RlbFBhdGg8dHJ1ZSwgYm9vbGVhbj47XG5leHBvcnQgdHlwZSBBYnNvbHV0ZU1vZGVsUGF0aCA9IElNb2RlbFBhdGg8Ym9vbGVhbiwgdHJ1ZT47XG5leHBvcnQgdHlwZSBBYnNvbHV0ZVJlc29sdmVkTW9kZWxQYXRoID0gSU1vZGVsUGF0aDx0cnVlLCB0cnVlPjtcblxuZXhwb3J0IHR5cGUgUmVsYXRpdmVNb2RlbFBhdGggPSBJTW9kZWxQYXRoPGJvb2xlYW4sIGZhbHNlPjtcbmV4cG9ydCB0eXBlIFJlbGF0aXZlUmVzb2x2ZWRNb2RlbFBhdGggPSBJTW9kZWxQYXRoPHRydWUsIGZhbHNlPjtcblxudHlwZSBQYXRoVG9rZW5TcGVjPFRSZXNvbHZlZCBleHRlbmRzIGJvb2xlYW4+ID0gVFJlc29sdmVkIGV4dGVuZHMgdHJ1ZSA/IHN0cmluZyA6IFBhdGhUb2tlbjtcblxudHlwZSBQYXRoVG9rZW5zU3BlYzxUUmVzb2x2ZWQgZXh0ZW5kcyBib29sZWFuPiA9IEFycmF5PFBhdGhUb2tlblNwZWM8VFJlc29sdmVkPj47XG5cbnR5cGUgUmVhZG9ubHlQYXRoVG9rZW5zU3BlYzxUUmVzb2x2ZWQgZXh0ZW5kcyBib29sZWFuPiA9IFJlYWRvbmx5QXJyYXk8UGF0aFRva2VuU3BlYzxUUmVzb2x2ZWQ+PjtcblxuZnVuY3Rpb24gaXNBbGxUb2tlbnNSZXNvbHZlZDxUUmVzb2x2ZWQgZXh0ZW5kcyBib29sZWFuPih0b2tlbnM6IFJlYWRvbmx5UGF0aFRva2Vuc1NwZWM8VFJlc29sdmVkPik6IFRSZXNvbHZlZCB7XG4gICAgLy8g0K8g0YfRgtC+LdGC0L4g0L3QtdC80L7Qs9GDINGB0L7QvtCx0YDQsNC30LjRgtGMINC60LDQuiDRgtGD0YIg0LLRgdGRINGB0YLRgNC+0LPQviDQvdCw0L/QuNGB0LDRgtGMLi4uXG4gICAgLy8gQHRzLWV4cGVjdC1lcnJvclxuICAgIHJldHVybiB0b2tlbnMuZXZlcnkoUGF0aFRva2Vucy5pc1NpbXBsZVRva2VuKTtcbn1cblxuZXhwb3J0IGNsYXNzIE1vZGVsUGF0aEltcGw8VFJlc29sdmVkIGV4dGVuZHMgYm9vbGVhbiwgVEFic29sdXRlIGV4dGVuZHMgYm9vbGVhbj5cbiAgICBpbXBsZW1lbnRzIElFcXVhdGFibGU8TW9kZWxQYXRoPiwgSU1vZGVsUGF0aDxUUmVzb2x2ZWQsIFRBYnNvbHV0ZT5cbntcbiAgICBwcml2YXRlIHJlYWRvbmx5IHRva2VuczogUmVhZG9ubHlQYXRoVG9rZW5zU3BlYzxUUmVzb2x2ZWQ+O1xuICAgIHB1YmxpYyByZWFkb25seSBhYnNvbHV0ZTogVEFic29sdXRlO1xuICAgIHByaXZhdGUgbGVnYWN5UGF0aDogdW5kZWZpbmVkIHwgc3RyaW5nO1xuXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKHBhdGhQYXJ0czogUmVhZG9ubHlQYXRoVG9rZW5zU3BlYzxUUmVzb2x2ZWQ+LCBhYnNvbHV0ZTogVEFic29sdXRlKSB7XG4gICAgICAgIHRoaXMudG9rZW5zID0gcGF0aFBhcnRzLmZpbHRlcih4ID0+IHggIT09IFwiXCIpO1xuICAgICAgICB0aGlzLmFic29sdXRlID0gYWJzb2x1dGU7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCByZXNvbHZlZCgpOiBUUmVzb2x2ZWQge1xuICAgICAgICByZXR1cm4gaXNBbGxUb2tlbnNSZXNvbHZlZCh0aGlzLnRva2Vucyk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldFBhdGhQYXJ0cygpOiBJdGVyYWJsZTxQYXRoVG9rZW5TcGVjPFRSZXNvbHZlZD4+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMudG9rZW5zO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRQYXRoUGFydHNBc0FycmF5KCk6IFJlYWRvbmx5QXJyYXk8UGF0aFRva2VuU3BlYzxUUmVzb2x2ZWQ+PiB7XG4gICAgICAgIHJldHVybiB0aGlzLnRva2VucztcbiAgICB9XG5cbiAgICBwdWJsaWMgKmdldFNpbXBsZVRva2Vuc1N0cmljdCgpOiBJdGVyYWJsZTxTaW1wbGVQYXRoVG9rZW4+IHtcbiAgICAgICAgZm9yIChjb25zdCB0b2tlbiBvZiB0aGlzLnRva2Vucykge1xuICAgICAgICAgICAgaWYgKCFQYXRoVG9rZW5zLmlzU2ltcGxlVG9rZW4odG9rZW4pKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUGF0aCBtdXN0IG5vdCBjb250YWluIHNwZWMgdG9rZW5zXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgeWllbGQgdG9rZW47XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0U2ltcGxlVG9rZW5zQXNBcnJheVN0cmljdCgpOiByZWFkb25seSBTaW1wbGVQYXRoVG9rZW5bXSB7XG4gICAgICAgIGZvciAoY29uc3QgdG9rZW4gb2YgdGhpcy50b2tlbnMpIHtcbiAgICAgICAgICAgIGlmICghUGF0aFRva2Vucy5pc1NpbXBsZVRva2VuKHRva2VuKSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlBhdGggbXVzdCBub3QgY29udGFpbiBzcGVjIHRva2Vuc1wiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyDQn9GA0L7QstC10YDQutCwINCy0YvRiNC1INCz0LDRgNCw0LXQvdGC0LjRgNGD0LXRgiDRh9GC0L4g0LHRg9C00YPRgiDRgtC+0LvRjNC60L4gU2ltcGxlUGF0aFRva2VuLlxuICAgICAgICAvLyDQktGB0LUgbWFwINC4IGZpbHRlciDRg9Cx0YDQsNC90Ysg0LTQu9GPINC/0YDQvtC40LfQstC+0LTQuNGC0LXQu9GM0L3QvtGB0YLQuFxuICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgIHJldHVybiB0aGlzLnRva2VucztcbiAgICB9XG5cbiAgICBwdWJsaWMgam9pbldpdGgoLi4ucGF0aDogc3RyaW5nW10pOiBJTW9kZWxQYXRoPFRSZXNvbHZlZCwgVEFic29sdXRlPjtcbiAgICBwdWJsaWMgam9pbldpdGgoLi4ucGF0aDogUGF0aFRva2VuW10pOiBJTW9kZWxQYXRoPGJvb2xlYW4sIFRBYnNvbHV0ZT47XG4gICAgcHVibGljIGpvaW5XaXRoKC4uLnBhdGg6IEFycmF5PFJlc29sdmVkTW9kZWxQYXRoIHwgc3RyaW5nPik6IElNb2RlbFBhdGg8VFJlc29sdmVkLCBUQWJzb2x1dGU+O1xuICAgIHB1YmxpYyBqb2luV2l0aCguLi5wYXRoOiBBcnJheTxBYnNvbHV0ZVJlc29sdmVkTW9kZWxQYXRoIHwgc3RyaW5nPik6IElNb2RlbFBhdGg8VFJlc29sdmVkLCB0cnVlPjtcbiAgICBwdWJsaWMgam9pbldpdGgoLi4ucGF0aDogQXJyYXk8TW9kZWxQYXRoIHwgUGF0aFRva2VuPik6IElNb2RlbFBhdGg8Ym9vbGVhbiwgVEFic29sdXRlPjtcbiAgICBwdWJsaWMgam9pbldpdGgoLi4ucGF0aDogQXJyYXk8TW9kZWxQYXRoIHwgUGF0aFRva2VuPik6IElNb2RlbFBhdGg8Ym9vbGVhbiwgYm9vbGVhbj4ge1xuICAgICAgICByZXR1cm4gam9pbk1vZGVsUGF0aHModGhpcywgLi4ucGF0aCk7XG4gICAgfVxuXG4gICAgcHVibGljIGlzUmVzb2x2ZWQoKTogdGhpcyBpcyBJTW9kZWxQYXRoPHRydWUsIFRBYnNvbHV0ZT4ge1xuICAgICAgICByZXR1cm4gaXNBbGxUb2tlbnNSZXNvbHZlZCh0aGlzLnRva2Vucyk7XG4gICAgfVxuXG4gICAgcHVibGljIHJlc29sdmVBbGwoaW5zdGFuY2U6IHN0cmluZyk6IE1vZGVsUGF0aCB7XG4gICAgICAgIGNvbnN0IHRva2VucyA9IHRoaXMudG9rZW5zLm1hcCh0b2tlbiA9PiB7XG4gICAgICAgICAgICBpZiAoUGF0aFRva2Vucy5pc1NpbXBsZVRva2VuKHRva2VuKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0b2tlbjtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGluc3RhbmNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gbmV3IE1vZGVsUGF0aEltcGwodG9rZW5zLCB0aGlzLmFic29sdXRlKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgaXNDb250YWluSXRlcmF0aW9uKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy50b2tlbnMuc29tZSh4ID0+IHggPT09IFBhdGhUb2tlbnMuZWFjaCk7XG4gICAgfVxuXG4gICAgcHVibGljIGlzQ29udGFpbkN1cnJlbnRJdGVyYXRpb24oKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLnRva2Vucy5zb21lKHggPT4geCA9PT0gUGF0aFRva2Vucy5jdXJyZW50KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0TGFzdExpc3RQYXRoKCk6IFBhdGhUb2tlbltdIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzQ29udGFpbkl0ZXJhdGlvbigpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJQYXRoIG11c3QgY29udGFpbiBpdGVyYXRpb25cIik7XG4gICAgICAgIH1cblxuICAgICAgICAvLyDQn9GA0L7QstC10YDQutCwINCy0YvRiNC1INCz0LDRgNCw0L3RgtC40YDRg9C10YIsINGH0YLQviDQsdGD0LTQtdGCIFBhdGhUb2tlbnMuZWFjaFxuICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgIGNvbnN0IGxhc3RJdGVyYXRpb25JbmRleCA9IHRoaXMudG9rZW5zLmxhc3RJbmRleE9mKFBhdGhUb2tlbnMuZWFjaCk7XG4gICAgICAgIHJldHVybiB0aGlzLnRva2Vucy5zbGljZSgwLCBsYXN0SXRlcmF0aW9uSW5kZXgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBpc0VuZHNXaXRoSXRlcmF0aW9uKCk6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCBsYXN0SXRlbSA9IEl0ZXJVdGlscy5sYXN0KHRoaXMudG9rZW5zKTtcbiAgICAgICAgcmV0dXJuIGxhc3RJdGVtID09IFBhdGhUb2tlbnMuZWFjaDtcbiAgICB9XG5cbiAgICBwdWJsaWMgaXNBYnNvbHV0ZSgpOiB0aGlzIGlzIElNb2RlbFBhdGg8VFJlc29sdmVkLCB0cnVlPiB7XG4gICAgICAgIHJldHVybiB0aGlzLmFic29sdXRlO1xuICAgIH1cblxuICAgIHB1YmxpYyB0b1N0cmluZygpOiBzdHJpbmcge1xuICAgICAgICBpZiAodGhpcy50b2tlbnMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gXCJcIjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gKHRoaXMuYWJzb2x1dGUgPyBcIi9cIiA6IFwiXCIpICsgdGhpcy50b2tlbnMubWFwKHggPT4gdGhpcy5wYXRoUGFydFRvU3RyaW5nKHgpKS5qb2luKFwiL1wiKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgdG9MZWdhY3lQYXRoKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLmxlZ2FjeVBhdGggPz8gKHRoaXMubGVnYWN5UGF0aCA9IHRoaXMudG9rZW5zLm1hcCh4ID0+IHRoaXMucGF0aFBhcnRUb1N0cmluZyh4KSkuam9pbihcIi9cIikpO1xuICAgIH1cblxuICAgIHB1YmxpYyBpc0VxdWFscyhcbiAgICAgICAgbW9kZWxQYXRoOiBNb2RlbFBhdGgsXG4gICAgICAgIGVhY2hDdXJyZW50Q29sbGlzaW9uOiBFYWNoQ3VycmVudENvbGxpc2lvbiA9IEVhY2hDdXJyZW50Q29sbGlzaW9uLkFyZVNhbWVcbiAgICApOiBib29sZWFuIHtcbiAgICAgICAgaWYgKGVhY2hDdXJyZW50Q29sbGlzaW9uID09PSBFYWNoQ3VycmVudENvbGxpc2lvbi5BcmVTYW1lKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy50b0xlZ2FjeVBhdGgoKSA9PT0gbW9kZWxQYXRoLnRvTGVnYWN5UGF0aCgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICB0aGlzLmlzQWJzb2x1dGUoKSA9PT0gbW9kZWxQYXRoLmlzQWJzb2x1dGUoKSAmJlxuICAgICAgICAgICAgICAgIEl0ZXJhdG9yLmZyb20oSXRlclV0aWxzLnppcCh0aGlzLmdldFBhdGhQYXJ0cygpLCBtb2RlbFBhdGguZ2V0UGF0aFBhcnRzKCkpKS5ldmVyeShcbiAgICAgICAgICAgICAgICAgICAgKFt0MSwgdDJdKSA9PiB0MSA9PT0gdDJcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog0JLRgdC10LPQtNCwINGG0LXQu9C+0LUg0L/QvtC70L7QttC40YLQtdC70YzQvdC+0LUg0LHQtdC30LfQvdCw0LrQvtCy0L7QtSAzMi3QsdC40YLQvdC+0LUg0YfQuNGB0LvQvlxuICAgICAqL1xuICAgIHB1YmxpYyBnZXRIYXNoKGVhY2hDdXJyZW50Q29sbGlzaW9uOiBFYWNoQ3VycmVudENvbGxpc2lvbiA9IEVhY2hDdXJyZW50Q29sbGlzaW9uLkFyZVNhbWUpOiBudW1iZXIge1xuICAgICAgICBsZXQgaGFzaCA9IDUzODE7XG4gICAgICAgIGZvciAoY29uc3QgdG9rZW4gb2YgcmV2ZXJzZUFycmF5KHRoaXMudG9rZW5zKSkge1xuICAgICAgICAgICAgbGV0IGN1cnJlbnRTdHI6IHN0cmluZztcbiAgICAgICAgICAgIGlmIChQYXRoVG9rZW5zLmlzU2ltcGxlVG9rZW4odG9rZW4pKSB7XG4gICAgICAgICAgICAgICAgY3VycmVudFN0ciA9IHRva2VuO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAoZWFjaEN1cnJlbnRDb2xsaXNpb24gPT09IEVhY2hDdXJyZW50Q29sbGlzaW9uLkFyZURpZmZlcmVudCkge1xuICAgICAgICAgICAgICAgICAgICBjdXJyZW50U3RyID0gdG9rZW4gPT09IFBhdGhUb2tlbnMuZWFjaCA/IFwiKlwiIDogXCIhXCI7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFN0ciA9IFwiKlwiO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxldCBzdHJpbmdJbmRleCA9IGN1cnJlbnRTdHIubGVuZ3RoO1xuICAgICAgICAgICAgd2hpbGUgKHN0cmluZ0luZGV4KSB7XG4gICAgICAgICAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm5vLWJpdHdpc2VcbiAgICAgICAgICAgICAgICBoYXNoID0gKGhhc2ggKiAzMykgXiBjdXJyZW50U3RyLmNoYXJDb2RlQXQoLS1zdHJpbmdJbmRleCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvKlxuICAgICAgICAgICAgdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm5vLWJpdHdpc2VcbiAgICAgICAgICAgIEphdmFTY3JpcHQgZG9lcyBiaXR3aXNlIG9wZXJhdGlvbnMgKGxpa2UgWE9SLCBhYm92ZSkgb24gMzItYml0IHNpZ25lZFxuICAgICAgICAgICAgaW50ZWdlcnMuIFNpbmNlIHdlIHdhbnQgdGhlIHJlc3VsdHMgdG8gYmUgYWx3YXlzIHBvc2l0aXZlLCBjb252ZXJ0IHRoZVxuICAgICAgICAgICAgc2lnbmVkIGludCB0byBhbiB1bnNpZ25lZCBieSBkb2luZyBhbiB1bnNpZ25lZCBiaXRzaGlmdC5cbiAgICAgICovXG4gICAgICAgIHJldHVybiBoYXNoID4+PiAwO1xuICAgIH1cblxuICAgIHB1YmxpYyBpc0luY2x1ZGVzKG1vZGVsUGF0aDogTW9kZWxQYXRoKTogYm9vbGVhbiB7XG4gICAgICAgIGNvbnN0IHRhcmdldFRva2VucyA9IG1vZGVsUGF0aC5nZXRQYXRoUGFydHNBc0FycmF5KCk7XG4gICAgICAgIGlmICh0aGlzLnRva2Vucy5sZW5ndGggIT09IHRhcmdldFRva2Vucy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMudG9rZW5zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBsZWZ0UGFydCA9IHRoaXMudG9rZW5zW2ldO1xuICAgICAgICAgICAgY29uc3QgcmlnaHRQYXJ0ID0gdGFyZ2V0VG9rZW5zW2ldO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBsZWZ0UGFydCA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgcmlnaHRQYXJ0ID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChsZWZ0UGFydCAhPT0gcmlnaHRQYXJ0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAobGVmdFBhcnQgPT09IFBhdGhUb2tlbnMuY3VycmVudCB8fCBsZWZ0UGFydCA9PT0gUGF0aFRva2Vucy5lYWNoKSB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiByaWdodFBhcnQgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFpc0Zpbml0ZShOdW1iZXIocmlnaHRQYXJ0KSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBpZiAocmlnaHRQYXJ0ICE9PSBQYXRoVG9rZW5zLmN1cnJlbnQgJiYgcmlnaHRQYXJ0ICE9PSBQYXRoVG9rZW5zLmVhY2gpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcHVibGljIGdldEl0ZXJhdGlvblJhbmsoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIGNvdW50KEl0ZXJhdG9yLmZyb20odGhpcy50b2tlbnMpLmZpbHRlcih4ID0+IHggPT09IFBhdGhUb2tlbnMuZWFjaCkpO1xuICAgIH1cblxuICAgIHB1YmxpYyBpc0VtcHR5KCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy50b2tlbnMubGVuZ3RoID09PSAwO1xuICAgIH1cblxuICAgIHB1YmxpYyBtYXRjaEZvcihtb2RlbFBhdGg6IE1vZGVsUGF0aCk6IFBhdGhNYXRjaGluZyB7XG4gICAgICAgIGlmICghdGhpcy5pc0Fic29sdXRlKCkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IG1hdGNoIG5vbiBhYnNvbHV0ZSBwYXRoICcke3RoaXMudG9TdHJpbmcoKX0nYCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFtb2RlbFBhdGguaXNBYnNvbHV0ZSgpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBtYXRjaCBub24gYWJzb2x1dGUgcGF0aCAnJHttb2RlbFBhdGgudG9TdHJpbmcoKX0nYCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFBhdGhNYXRjaGVyLm1hdGNoKHRoaXMudG9rZW5zLCBtb2RlbFBhdGguZ2V0UGF0aFBhcnRzQXNBcnJheSgpKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgKnNwbGl0QnlNdWx0aXBsaWNpdHkoKTogSXRlcmFibGU8UmVzb2x2ZWRNb2RlbFBhdGggfCB0eXBlb2YgRWFjaFN5bWJvbCB8IHR5cGVvZiBDdXJyZW50U3ltYm9sPiB7XG4gICAgICAgIGxldCBsYXN0U2ltcGxlUGFydHMgPSBuZXcgTW9kZWxQYXRoQnVpbGRlcih0aGlzLmlzQWJzb2x1dGUoKSk7XG4gICAgICAgIGZvciAoY29uc3QgdG9rZW4gb2YgdGhpcy50b2tlbnMpIHtcbiAgICAgICAgICAgIGlmIChQYXRoVG9rZW5zLmlzU2ltcGxlVG9rZW4odG9rZW4pKSB7XG4gICAgICAgICAgICAgICAgbGFzdFNpbXBsZVBhcnRzLmFwcGVuZCh0b2tlbik7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmICghbGFzdFNpbXBsZVBhcnRzLmVtcHR5KSB7XG4gICAgICAgICAgICAgICAgICAgIHlpZWxkIGxhc3RTaW1wbGVQYXJ0cy50b1Jlc29sdmVkUGF0aCgpO1xuICAgICAgICAgICAgICAgICAgICBsYXN0U2ltcGxlUGFydHMgPSBuZXcgTW9kZWxQYXRoQnVpbGRlcihmYWxzZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHlpZWxkIHRva2VuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICghbGFzdFNpbXBsZVBhcnRzLmVtcHR5KSB7XG4gICAgICAgICAgICB5aWVsZCBsYXN0U2ltcGxlUGFydHMudG9SZXNvbHZlZFBhdGgoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBub3JtYWxpemUoKTogSU1vZGVsUGF0aDxUUmVzb2x2ZWQsIFRBYnNvbHV0ZT4ge1xuICAgICAgICBjb25zdCByZXN1bHRUb2tlbnM6IFBhdGhUb2tlbnNTcGVjPFRSZXNvbHZlZD4gPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBwYXRoUGFydCBvZiB0aGlzLnRva2Vucykge1xuICAgICAgICAgICAgaWYgKHBhdGhQYXJ0ID09PSBcIi4uXCIpIHtcbiAgICAgICAgICAgICAgICBpZiAoIXJlc3VsdFRva2Vucy5wb3AoKSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5pc0Fic29sdXRlKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgUGF0aCBpcyBpbnZhbGlkICcke3RoaXMudG9TdHJpbmcoKX0nYCk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRUb2tlbnMucHVzaChcIi4uXCIpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAocGF0aFBhcnQgPT09IFwiLlwiKSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXN1bHRUb2tlbnMucHVzaChwYXRoUGFydCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ldyBNb2RlbFBhdGhJbXBsPFRSZXNvbHZlZCwgVEFic29sdXRlPihyZXN1bHRUb2tlbnMsIHRoaXMuYWJzb2x1dGUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBzdW1tYXJ5INCh0L/QtdGG0LjRhNC40LrQsNGC0L7RgNGLINC80L3QvtC20LXRgdGC0LLQtdC90L3QvtGB0YLQuCBFYWNoINC30LDQvNC10L3Rj9C10YIg0L3QsCBDdXJyZW50XG4gICAgICovXG4gICAgcHVibGljIHRvQ3VycmVudEl0ZXJhdGlvbigpOiBJTW9kZWxQYXRoPFRSZXNvbHZlZCwgVEFic29sdXRlPiB7XG4gICAgICAgIGlmICh0aGlzLmlzUmVzb2x2ZWQoKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBOT1RFINCi0YPRgiDQvdC1INC/0L7Qu9GD0YfQsNC10YLRgdGPINC90LDQu9C+0LbQuNGC0Ywg0LTQuNGB0LrRgNC40LzQuNC90LDRgtC+0YBcbiAgICAgICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3JcbiAgICAgICAgICAgIGNvbnN0IHBhdGhQYXJ0czogUGF0aFRva2Vuc1NwZWM8VFJlc29sdmVkPiA9IHRoaXMudG9rZW5zLm1hcCh4ID0+XG4gICAgICAgICAgICAgICAgeCA9PT0gUGF0aFRva2Vucy5lYWNoID8gUGF0aFRva2Vucy5jdXJyZW50IDogeFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHJldHVybiBuZXcgTW9kZWxQYXRoSW1wbDxUUmVzb2x2ZWQsIFRBYnNvbHV0ZT4ocGF0aFBhcnRzLCB0aGlzLmFic29sdXRlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyB0b0VhY2hJdGVyYXRpb24oKTogSU1vZGVsUGF0aDxUUmVzb2x2ZWQsIFRBYnNvbHV0ZT4ge1xuICAgICAgICBpZiAodGhpcy5pc1Jlc29sdmVkKCkpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gTk9URSDQotGD0YIg0L3QtSDQv9C+0LvRg9GH0LDQtdGC0YHRjyDQvdCw0LvQvtC20LjRgtGMINC00LjRgdC60YDQuNC80LjQvdCw0YLQvtGAXG4gICAgICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yXG4gICAgICAgICAgICBjb25zdCBwYXRoUGFydHM6IFBhdGhUb2tlbnNTcGVjPFRSZXNvbHZlZD4gPSB0aGlzLnRva2Vucy5tYXAoeCA9PlxuICAgICAgICAgICAgICAgIHggPT09IFBhdGhUb2tlbnMuY3VycmVudCA/IFBhdGhUb2tlbnMuZWFjaCA6IHhcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICByZXR1cm4gbmV3IE1vZGVsUGF0aEltcGw8VFJlc29sdmVkLCBUQWJzb2x1dGU+KHBhdGhQYXJ0cywgdGhpcy5hYnNvbHV0ZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgdG9BYnNvbHV0ZSgpOiBJTW9kZWxQYXRoPFRSZXNvbHZlZCwgdHJ1ZT4ge1xuICAgICAgICBpZiAoIXRoaXMuYWJzb2x1dGUpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgUGF0aCAnJHt0aGlzLnRvTGVnYWN5UGF0aCgpfSBpcyBub3QgYWJzb2x1dGUnYCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ldyBNb2RlbFBhdGhJbXBsPFRSZXNvbHZlZCwgdHJ1ZT4odGhpcy50b2tlbnMsIHRydWUpO1xuICAgIH1cblxuICAgIHB1YmxpYyAqZ2V0QWxsUGFyZW50UGF0aHMoKTogSXRlcmFibGU8TW9kZWxQYXRoPiB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IG5ldyBNb2RlbFBhdGhCdWlsZGVyKHRoaXMuaXNBYnNvbHV0ZSgpKTtcbiAgICAgICAgZm9yIChjb25zdCB0b2tlbiBvZiBJdGVyVXRpbHMuc2tpcExhc3QodGhpcy5nZXRQYXRoUGFydHMoKSwgMSkpIHtcbiAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQodG9rZW4pO1xuICAgICAgICAgICAgeWllbGQgcmVzdWx0LnRvUGF0aCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIHRyaW1MYXN0U3RhcklmTGFzdFRva2VuKCk6IElNb2RlbFBhdGg8VFJlc29sdmVkLCBUQWJzb2x1dGU+IHtcbiAgICAgICAgY29uc3QgbGFzdEl0ZW0gPSBJdGVyVXRpbHMubGFzdCh0aGlzLnRva2Vucyk7XG4gICAgICAgIGlmIChsYXN0SXRlbSAhPSB1bmRlZmluZWQgJiYgUGF0aFRva2Vucy5pc011bHRpVG9rZW4obGFzdEl0ZW0pKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IE1vZGVsUGF0aEltcGwodGhpcy50b2tlbnMuc2xpY2UoMCwgLTEpLCB0aGlzLmFic29sdXRlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0UGFyZW50UGF0aCgpOiBJTW9kZWxQYXRoPFRSZXNvbHZlZCwgVEFic29sdXRlPiB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IG5ldyBNb2RlbFBhdGhCdWlsZGVyKHRoaXMuYWJzb2x1dGUpO1xuICAgICAgICBmb3IgKGNvbnN0IHRva2VuIG9mIEl0ZXJVdGlscy5za2lwTGFzdCh0aGlzLmdldFBhdGhQYXJ0cygpLCAxKSkge1xuICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCh0b2tlbik7XG4gICAgICAgIH1cbiAgICAgICAgLy8g0KLRg9GCINC/0L7Qu9GD0YfQsNC10YLRgdGPINGC0LDQuiwg0YfRgtC+INC/0L4g0LTRgNGD0LPQvtC80YMg0L3QuNC60LDQulxuICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yXG4gICAgICAgIHJldHVybiByZXN1bHQudG9QYXRoKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGFwcGx5SW5zdGFuY2VzRGlydHkoaW5zdGFuY2VzOiBTaW1wbGVQYXRoVG9rZW5bXSk6IElNb2RlbFBhdGg8VFJlc29sdmVkLCBUQWJzb2x1dGU+IHtcbiAgICAgICAgaWYgKHRoaXMuaXNSZXNvbHZlZCgpIHx8IGluc3RhbmNlcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9XG4gICAgICAgIGxldCBpbnN0YW5jZUNvdW50ZXIgPSAwO1xuICAgICAgICBjb25zdCByZXN1bHQgPSBuZXcgTW9kZWxQYXRoQnVpbGRlcih0cnVlKTtcbiAgICAgICAgZm9yIChjb25zdCB0b2tlbiBvZiB0aGlzLmdldFBhdGhQYXJ0cygpKSB7XG4gICAgICAgICAgICBpZiAoUGF0aFRva2Vucy5pc011bHRpVG9rZW4odG9rZW4pICYmIGluc3RhbmNlQ291bnRlciA8IGluc3RhbmNlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKGluc3RhbmNlc1tpbnN0YW5jZUNvdW50ZXJdID8/IHJlamVjdCgpKTtcbiAgICAgICAgICAgICAgICBpbnN0YW5jZUNvdW50ZXIrKztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCh0b2tlbik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8g0KLRg9GCINC/0L7Qu9GD0YfQsNC10YLRgdGPINGC0LDQuiwg0YfRgtC+INC/0L4g0LTRgNGD0LPQvtC80YMg0L3QuNC60LDQulxuICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yXG4gICAgICAgIHJldHVybiByZXN1bHQudG9QYXRoKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBwYXRoUGFydFRvU3RyaW5nKHBhdGhQYXJ0OiBQYXRoVG9rZW4pOiBzdHJpbmcge1xuICAgICAgICBpZiAodHlwZW9mIHBhdGhQYXJ0ID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICByZXR1cm4gcGF0aFBhcnQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBhdGhQYXJ0ID09PSBQYXRoVG9rZW5zLmVhY2gpIHtcbiAgICAgICAgICAgIHJldHVybiBcIipcIjtcbiAgICAgICAgfVxuICAgICAgICBpZiAocGF0aFBhcnQgPT09IFBhdGhUb2tlbnMuY3VycmVudCkge1xuICAgICAgICAgICAgcmV0dXJuIFwiKlwiO1xuICAgICAgICB9XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5rbm93biBwYXRoIHBhcnQgc3BlY2lmaWVkOiAke2Vuc3VyZUFuZEdldFN0cmluZyhwYXRoUGFydCl9YCk7XG4gICAgfVxufVxuIl19
|
|
609
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL0NvbW1vbi9Nb2RlbFBhdGgvTW9kZWxQYXRoLnRzIl0sIm5hbWVzIjpbIkVhY2hTeW1ib2wiLCJTeW1ib2wiLCJmb3IiLCJDdXJyZW50U3ltYm9sIiwiUGF0aFRva2VucyIsImlzTXVsdGlUb2tlbiIsInBhcnQiLCJlYWNoIiwiY3VycmVudCIsImlzU2ltcGxlVG9rZW4iLCJpc0luc3RhbmNlVG9rZW4iLCJ0ZXN0IiwiaXNNb2RlbFBhdGgiLCJwYXRoIiwiTW9kZWxQYXRoSW1wbCIsImNvbnZlcnRUb0xlZ2FjeVBhdGgiLCJ0b0xlZ2FjeVBhdGgiLCJjb252ZXJ0VG9BYnNvbHV0ZU1vZGVsUGF0aCIsImNyZWF0ZUFic29sdXRlRnJvbU1hc2siLCJlbXB0eU1vZGVsUGF0aCIsImVtcHR5QWJzb2x1dGVNb2RlbFBhdGgiLCJjcmVhdGVNb2RlbFBhdGgiLCJhYnNvbHV0ZSIsInBhcnRQYXJ0U3RyaW5ncyIsInNwbGl0IiwiZW5zdXJlUGxhaW5QYXRoUGFydHNEb2VzTm90Q29udGFpbk11bHRpcGxpY2l0eSIsInN0YXJ0c1dpdGgiLCJzbGljZSIsImNyZWF0ZUZyb21NYXNrIiwibXVsdGlwbGljaXR5U3ltYm9sIiwibWFwIiwieCIsInBhcnRzIiwic29tZSIsIkVycm9yIiwiY3JlYXRlQWJzb2x1dGUiLCJjcmVhdGVSZWxhdGl2ZVJlc29sdmVkTW9kZWxQYXRoIiwiY3JlYXRlQWJzb2x1dGVGcm9tVG9rZW5zIiwidG9rZW5zIiwiY3JlYXRlQWJzb2x1dGVSZXNvbHZlZEZyb21Ub2tlbnMiLCJjcmVhdGVSZWxhdGl2ZUZyb21Ub2tlbnMiLCJqb2luTW9kZWxQYXRocyIsInJlc3VsdFBhcnRzIiwiam9pbkl0ZW0iLCJwdXNoIiwiaXNBYnNvbHV0ZSIsImdldFBhdGhQYXJ0c0FzQXJyYXkiLCJBcnJheSIsImlzQXJyYXkiLCJBYnNvbHV0ZU1vZGVsRmllbGRQYXRoIiwiY29uc3RydWN0b3IiLCJmaWVsZE5hbWUiLCJmaWVsZCIsImdldEhhc2giLCJpc0VxdWFscyIsIm1vZGVsUGF0aCIsImVhY2hDdXJyZW50Q29sbGlzaW9uIiwiRWFjaEN1cnJlbnRDb2xsaXNpb24iLCJBcmVTYW1lIiwiY3JlYXRlRnJvbVN0cmluZyIsInBhdGhXaXRoRmllbGROYW1lIiwiZW5kc1dpdGgiLCJyZXBsYWNlIiwiaXNBbGxUb2tlbnNSZXNvbHZlZCIsImV2ZXJ5IiwicGF0aFBhcnRzIiwibGVnYWN5UGF0aCIsImZpbHRlciIsInJlc29sdmVkIiwiZ2V0UGF0aFBhcnRzIiwiZ2V0U2ltcGxlVG9rZW5zU3RyaWN0IiwidG9rZW4iLCJnZXRTaW1wbGVUb2tlbnNBc0FycmF5U3RyaWN0Iiwiam9pbldpdGgiLCJpc1Jlc29sdmVkIiwicmVzb2x2ZUFsbCIsImluc3RhbmNlIiwiaXNDb250YWluSXRlcmF0aW9uIiwiaXNDb250YWluQ3VycmVudEl0ZXJhdGlvbiIsImdldExhc3RMaXN0UGF0aCIsImxhc3RJdGVyYXRpb25JbmRleCIsImxhc3RJbmRleE9mIiwiaXNFbmRzV2l0aEl0ZXJhdGlvbiIsImxhc3RJdGVtIiwiSXRlclV0aWxzIiwibGFzdCIsInRvU3RyaW5nIiwibGVuZ3RoIiwicGF0aFBhcnRUb1N0cmluZyIsImpvaW4iLCJJdGVyYXRvciIsImZyb20iLCJ6aXAiLCJ0MSIsInQyIiwiaGFzaCIsImN1cnJlbnRTdHIiLCJBcmVEaWZmZXJlbnQiLCJzdHJpbmdJbmRleCIsImNoYXJDb2RlQXQiLCJpc0luY2x1ZGVzIiwidGFyZ2V0VG9rZW5zIiwiaSIsImxlZnRQYXJ0IiwicmlnaHRQYXJ0IiwiaXNGaW5pdGUiLCJOdW1iZXIiLCJnZXRJdGVyYXRpb25SYW5rIiwiaXNFbXB0eSIsIm1hdGNoRm9yIiwiUGF0aE1hdGNoZXIiLCJtYXRjaCIsInNwbGl0QnlNdWx0aXBsaWNpdHkiLCJsYXN0U2ltcGxlUGFydHMiLCJNb2RlbFBhdGhCdWlsZGVyIiwiYXBwZW5kIiwiZW1wdHkiLCJ0b1Jlc29sdmVkUGF0aCIsIm5vcm1hbGl6ZSIsInJlc3VsdFRva2VucyIsInBhdGhQYXJ0IiwicG9wIiwidG9DdXJyZW50SXRlcmF0aW9uIiwidG9FYWNoSXRlcmF0aW9uIiwidG9BYnNvbHV0ZSIsImdldEFsbFBhcmVudFBhdGhzIiwicmVzdWx0Iiwic2tpcExhc3QiLCJ0b1BhdGgiLCJ0cmltTGFzdFN0YXJJZkxhc3RUb2tlbiIsInVuZGVmaW5lZCIsImdldFBhcmVudFBhdGgiLCJhcHBseUluc3RhbmNlc0RpcnR5IiwiaW5zdGFuY2VzIiwiaW5zdGFuY2VDb3VudGVyIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFDQTs7QUFDQTs7QUFDQTs7QUFFQTs7QUFDQTs7QUFDQTs7QUFHQSxNQUFNQSxVQUFVLEdBQUdDLE1BQU0sQ0FBQ0MsR0FBUCxDQUFXLFVBQVgsQ0FBbkI7QUFDQSxNQUFNQyxhQUFhLEdBQUdGLE1BQU0sQ0FBQ0MsR0FBUCxDQUFXLGFBQVgsQ0FBdEI7O0FBRU8sTUFBTUUsVUFBTixDQUFpQjtBQUlNLFNBQVpDLFlBQVksQ0FBQ0MsSUFBRCxFQUFnRjtBQUN0RyxXQUFPQSxJQUFJLEtBQUtGLFVBQVUsQ0FBQ0csSUFBcEIsSUFBNEJELElBQUksS0FBS0YsVUFBVSxDQUFDSSxPQUF2RDtBQUNIOztBQUUwQixTQUFiQyxhQUFhLENBQUNILElBQUQsRUFBOEM7QUFDckUsV0FBTyxPQUFPQSxJQUFQLEtBQWdCLFFBQXZCO0FBQ0g7O0FBRTRCLFNBQWZJLGVBQWUsQ0FBQ0osSUFBRCxFQUE4QztBQUN2RSxXQUFPLE9BQU9BLElBQVAsS0FBZ0IsUUFBaEIsSUFBNEIsU0FBU0ssSUFBVCxDQUFjTCxJQUFkLENBQW5DO0FBQ0g7O0FBZG1COzs7QUFBWEYsVSxDQUNLRyxJLEdBQTBCUCxVO0FBRC9CSSxVLENBRUtJLE8sR0FBZ0NMLGE7O0FBbUIzQyxTQUFTUyxXQUFULENBQXFCQyxJQUFyQixFQUFpRjtBQUNwRixTQUFPLE9BQU9BLElBQVAsS0FBZ0IsUUFBaEIsSUFBNEJBLElBQUksWUFBWUMsYUFBbkQ7QUFDSDs7QUFFTSxTQUFTQyxtQkFBVCxDQUE2QkYsSUFBN0IsRUFBeUU7QUFDNUUsU0FBT0QsV0FBVyxDQUFDQyxJQUFELENBQVgsR0FBb0JBLElBQUksQ0FBQ0csWUFBTCxFQUFwQixHQUEwQ0gsSUFBakQ7QUFDSDs7QUFLTSxTQUFTSSwwQkFBVCxDQUFvQ0osSUFBcEMsRUFBOEY7QUFDakcsU0FBT0QsV0FBVyxDQUFDQyxJQUFELENBQVgsR0FBb0JBLElBQXBCLEdBQTJCSyxzQkFBc0IsQ0FBQ0wsSUFBRCxFQUFPVCxVQUFVLENBQUNHLElBQWxCLENBQXhEO0FBQ0g7O0FBRU0sU0FBU1ksY0FBVCxHQUFxRDtBQUN4RCxTQUFPLElBQUlMLGFBQUosQ0FBK0IsRUFBL0IsRUFBbUMsS0FBbkMsQ0FBUDtBQUNIOztBQUVNLFNBQVNNLHNCQUFULEdBQTZEO0FBQ2hFLFNBQU8sSUFBSU4sYUFBSixDQUE4QixFQUE5QixFQUFrQyxJQUFsQyxDQUFQO0FBQ0g7O0FBS00sU0FBU08sZUFBVCxDQUF5QlIsSUFBekIsRUFBdUNTLFFBQXZDLEVBQXNGO0FBQ3pGLFFBQU1DLGVBQWUsR0FBR1YsSUFBSSxDQUFDVyxLQUFMLENBQVcsR0FBWCxDQUF4QjtBQUNBQyxFQUFBQSw4Q0FBOEMsQ0FBQ0YsZUFBRCxDQUE5Qzs7QUFDQSxNQUFJRCxRQUFRLEtBQUssTUFBakIsRUFBeUI7QUFDckIsUUFBSVQsSUFBSSxDQUFDYSxVQUFMLENBQWdCLEdBQWhCLENBQUosRUFBMEI7QUFDdEIsYUFBTyxJQUFJWixhQUFKLENBQThCUyxlQUFlLENBQUNJLEtBQWhCLENBQXNCLENBQXRCLENBQTlCLEVBQXdELElBQXhELENBQVA7QUFDSCxLQUZELE1BRU87QUFDSCxhQUFPLElBQUliLGFBQUosQ0FBK0JTLGVBQS9CLEVBQWdELEtBQWhELENBQVA7QUFDSDtBQUNKOztBQUNELE1BQUlELFFBQVEsSUFBSVQsSUFBSSxDQUFDYSxVQUFMLENBQWdCLEdBQWhCLENBQWhCLEVBQXNDO0FBQ2xDLFdBQU8sSUFBSVosYUFBSixDQUE4QlMsZUFBZSxDQUFDSSxLQUFoQixDQUFzQixDQUF0QixDQUE5QixFQUF3RCxJQUF4RCxDQUFQO0FBQ0g7O0FBQ0QsU0FBTyxJQUFJYixhQUFKLENBQWlDUyxlQUFqQyxFQUFrREQsUUFBbEQsQ0FBUDtBQUNIOztBQUtNLFNBQVNNLGNBQVQsQ0FBd0JmLElBQXhCLEVBQXNDUyxRQUF0QyxFQUFrRU8sa0JBQWxFLEVBQTRHO0FBQy9HLFFBQU1OLGVBQWUsR0FBR1YsSUFBSSxDQUFDVyxLQUFMLENBQVcsR0FBWCxFQUFnQk0sR0FBaEIsQ0FBb0JDLENBQUMsSUFBS0EsQ0FBQyxLQUFLLEdBQU4sR0FBWUYsa0JBQVosR0FBaUNFLENBQTNELENBQXhCOztBQUNBLE1BQUlULFFBQVEsS0FBSyxNQUFqQixFQUF5QjtBQUNyQixRQUFJVCxJQUFJLENBQUNhLFVBQUwsQ0FBZ0IsR0FBaEIsQ0FBSixFQUEwQjtBQUN0QixhQUFPLElBQUlaLGFBQUosQ0FBa0JTLGVBQWUsQ0FBQ0ksS0FBaEIsQ0FBc0IsQ0FBdEIsQ0FBbEIsRUFBNEMsSUFBNUMsQ0FBUDtBQUNILEtBRkQsTUFFTztBQUNILGFBQU8sSUFBSWIsYUFBSixDQUFrQlMsZUFBbEIsRUFBbUMsS0FBbkMsQ0FBUDtBQUNIO0FBQ0o7O0FBQ0QsTUFBSUQsUUFBUSxJQUFJVCxJQUFJLENBQUNhLFVBQUwsQ0FBZ0IsR0FBaEIsQ0FBaEIsRUFBc0M7QUFDbEMsV0FBTyxJQUFJWixhQUFKLENBQWtCUyxlQUFlLENBQUNJLEtBQWhCLENBQXNCLENBQXRCLENBQWxCLEVBQTRDLElBQTVDLENBQVA7QUFDSDs7QUFDRCxTQUFPLElBQUliLGFBQUosQ0FBa0JTLGVBQWxCLEVBQW1DRCxRQUFuQyxDQUFQO0FBQ0g7O0FBRU0sU0FBU0osc0JBQVQsQ0FBZ0NMLElBQWhDLEVBQThDZ0Isa0JBQTlDLEVBQWdHO0FBQ25HLFFBQU1OLGVBQWUsR0FBR1YsSUFBSSxDQUFDVyxLQUFMLENBQVcsR0FBWCxFQUFnQk0sR0FBaEIsQ0FBb0JDLENBQUMsSUFBS0EsQ0FBQyxLQUFLLEdBQU4sR0FBWUYsa0JBQVosR0FBaUNFLENBQTNELENBQXhCOztBQUNBLE1BQUlsQixJQUFJLENBQUNhLFVBQUwsQ0FBZ0IsR0FBaEIsQ0FBSixFQUEwQjtBQUN0QixXQUFPLElBQUlaLGFBQUosQ0FBa0JTLGVBQWUsQ0FBQ0ksS0FBaEIsQ0FBc0IsQ0FBdEIsQ0FBbEIsRUFBNEMsSUFBNUMsQ0FBUDtBQUNIOztBQUNELFNBQU8sSUFBSWIsYUFBSixDQUFrQlMsZUFBbEIsRUFBbUMsSUFBbkMsQ0FBUDtBQUNIOztBQUVELFNBQVNFLDhDQUFULENBQXdETyxLQUF4RCxFQUErRTtBQUMzRSxNQUFJQSxLQUFLLENBQUNDLElBQU4sQ0FBV0YsQ0FBQyxJQUFJQSxDQUFDLEtBQUssR0FBdEIsQ0FBSixFQUFnQztBQUM1QixVQUFNLElBQUlHLEtBQUosQ0FBVSxnQ0FBVixDQUFOO0FBQ0g7QUFDSjs7QUFFTSxTQUFTQyxjQUFULENBQXdCdEIsSUFBeEIsRUFBaUU7QUFDcEUsUUFBTVUsZUFBZSxHQUFHVixJQUFJLENBQUNXLEtBQUwsQ0FBVyxHQUFYLENBQXhCO0FBQ0FDLEVBQUFBLDhDQUE4QyxDQUFDRixlQUFELENBQTlDOztBQUNBLE1BQUlWLElBQUksQ0FBQ2EsVUFBTCxDQUFnQixHQUFoQixDQUFKLEVBQTBCO0FBQ3RCLFdBQU8sSUFBSVosYUFBSixDQUE4QlMsZUFBZSxDQUFDSSxLQUFoQixDQUFzQixDQUF0QixDQUE5QixFQUF3RCxJQUF4RCxDQUFQO0FBQ0g7O0FBQ0QsU0FBTyxJQUFJYixhQUFKLENBQThCUyxlQUE5QixFQUErQyxJQUEvQyxDQUFQO0FBQ0g7O0FBRU0sU0FBU2EsK0JBQVQsQ0FBeUN2QixJQUF6QyxFQUFrRjtBQUNyRixRQUFNVSxlQUFlLEdBQUdWLElBQUksQ0FBQ1csS0FBTCxDQUFXLEdBQVgsQ0FBeEI7QUFDQUMsRUFBQUEsOENBQThDLENBQUNGLGVBQUQsQ0FBOUM7QUFDQSxTQUFPLElBQUlULGFBQUosQ0FBK0JTLGVBQS9CLEVBQWdELEtBQWhELENBQVA7QUFDSDs7QUFFTSxTQUFTYyx3QkFBVCxDQUFrQ0MsTUFBbEMsRUFBMEU7QUFDN0UsU0FBTyxJQUFJeEIsYUFBSixDQUErQndCLE1BQS9CLEVBQXVDLElBQXZDLENBQVA7QUFDSDs7QUFFTSxTQUFTQyxnQ0FBVCxDQUEwQ0QsTUFBMUMsRUFBdUY7QUFDMUZiLEVBQUFBLDhDQUE4QyxDQUFDYSxNQUFELENBQTlDO0FBQ0EsU0FBTyxJQUFJeEIsYUFBSixDQUE4QndCLE1BQTlCLEVBQXNDLElBQXRDLENBQVA7QUFDSDs7QUFJTSxTQUFTRSx3QkFBVCxDQUFrQ0YsTUFBbEMsRUFBbUY7QUFDdEYsU0FBTyxJQUFJeEIsYUFBSixDQUFnQ3dCLE1BQWhDLEVBQXdDLEtBQXhDLENBQVA7QUFDSDs7QUFFTSxTQUFTRyxjQUFULENBQXdCLEdBQUdULEtBQTNCLEVBQXlGO0FBQzVGLE1BQUlWLFFBQVEsR0FBRyxLQUFmO0FBQ0EsTUFBSW9CLFdBQXdCLEdBQUcsRUFBL0I7O0FBQ0EsT0FBSyxNQUFNQyxRQUFYLElBQXVCWCxLQUF2QixFQUE4QjtBQUMxQixRQUFJLE9BQU9XLFFBQVAsS0FBb0IsUUFBeEIsRUFBa0M7QUFDOUJELE1BQUFBLFdBQVcsQ0FBQ0UsSUFBWixDQUFpQkQsUUFBakI7QUFDSCxLQUZELE1BRU8sSUFBSS9CLFdBQVcsQ0FBQytCLFFBQUQsQ0FBZixFQUEyQjtBQUM5QixVQUFJQSxRQUFRLENBQUNFLFVBQVQsRUFBSixFQUEyQjtBQUN2QnZCLFFBQUFBLFFBQVEsR0FBRyxJQUFYO0FBQ0FvQixRQUFBQSxXQUFXLEdBQUcsQ0FBQyxHQUFHQyxRQUFRLENBQUNHLG1CQUFULEVBQUosQ0FBZDtBQUNILE9BSEQsTUFHTztBQUNISixRQUFBQSxXQUFXLENBQUNFLElBQVosQ0FBaUIsR0FBR0QsUUFBUSxDQUFDRyxtQkFBVCxFQUFwQjtBQUNIO0FBQ0osS0FQTSxNQU9BLElBQUlDLEtBQUssQ0FBQ0MsT0FBTixDQUFjTCxRQUFkLENBQUosRUFBNkI7QUFDaENELE1BQUFBLFdBQVcsQ0FBQ0UsSUFBWixDQUFpQixHQUFHRCxRQUFwQjtBQUNILEtBRk0sTUFFQSxJQUFJdkMsVUFBVSxDQUFDQyxZQUFYLENBQXdCc0MsUUFBeEIsQ0FBSixFQUF1QztBQUMxQ0QsTUFBQUEsV0FBVyxDQUFDRSxJQUFaLENBQWlCRCxRQUFqQjtBQUNIO0FBQ0o7O0FBRUQsU0FBTyxJQUFJN0IsYUFBSixDQUFrQjRCLFdBQWxCLEVBQStCcEIsUUFBL0IsQ0FBUDtBQUNIOztBQUVNLE1BQU0yQixzQkFBTixDQUEyRTtBQUl2RUMsRUFBQUEsV0FBVyxDQUFDckMsSUFBRCxFQUEwQnNDLFNBQTFCLEVBQTJGO0FBQUEsU0FIN0Z0QyxJQUc2RjtBQUFBLFNBRjdGdUMsS0FFNkY7QUFDekcsU0FBS3ZDLElBQUwsR0FBWUEsSUFBWjtBQUNBLFNBQUt1QyxLQUFMLEdBQWFELFNBQWI7QUFDSDs7QUFFTUUsRUFBQUEsT0FBTyxHQUFXO0FBQ3JCLFdBQU8sS0FBS3hDLElBQUwsQ0FBVXdDLE9BQVYsS0FBc0Isc0NBQXNCLEtBQUtELEtBQTNCLENBQTdCO0FBQ0g7O0FBRU1FLEVBQUFBLFFBQVEsQ0FDWEMsU0FEVyxFQUVYQyxvQkFBMEMsR0FBR0MsMkNBQXFCQyxPQUZ2RCxFQUdKO0FBQ1AsV0FBTyxLQUFLN0MsSUFBTCxDQUFVeUMsUUFBVixDQUFtQkMsU0FBUyxDQUFDMUMsSUFBN0IsRUFBbUMyQyxvQkFBbkMsS0FBNEQsS0FBS0osS0FBTCxLQUFlRyxTQUFTLENBQUNILEtBQTVGO0FBQ0g7O0FBRTZCLFNBQWhCTyxnQkFBZ0IsQ0FBQ0MsaUJBQUQsRUFBb0Q7QUFDOUUsUUFBSUEsaUJBQWlCLENBQUNDLFFBQWxCLENBQTJCLGNBQTNCLENBQUosRUFBZ0Q7QUFDNUMsYUFBTyxJQUFJWixzQkFBSixDQUNIZCxjQUFjLENBQUN5QixpQkFBaUIsQ0FBQ0UsT0FBbEIsQ0FBMEIsY0FBMUIsRUFBMEMsRUFBMUMsQ0FBRCxDQURYLEVBRUgsYUFGRyxDQUFQO0FBSUg7O0FBQ0QsUUFBSUYsaUJBQWlCLENBQUNDLFFBQWxCLENBQTJCLGdCQUEzQixDQUFKLEVBQWtEO0FBQzlDLGFBQU8sSUFBSVosc0JBQUosQ0FDSGQsY0FBYyxDQUFDeUIsaUJBQWlCLENBQUNFLE9BQWxCLENBQTBCLGdCQUExQixFQUE0QyxFQUE1QyxDQUFELENBRFgsRUFFSCxlQUZHLENBQVA7QUFJSDs7QUFDRCxXQUFPLElBQUliLHNCQUFKLENBQTJCZCxjQUFjLENBQUN5QixpQkFBRCxDQUF6QyxFQUE4RCxPQUE5RCxDQUFQO0FBQ0g7O0FBRTJCLFNBQWRoQyxjQUFjLENBQUNnQyxpQkFBRCxFQUE0Qi9CLGtCQUE1QixFQUFtRjtBQUMzRyxRQUFJK0IsaUJBQWlCLENBQUNDLFFBQWxCLENBQTJCLGNBQTNCLENBQUosRUFBZ0Q7QUFDNUMsYUFBTyxJQUFJWixzQkFBSixDQUNIL0Isc0JBQXNCLENBQUMwQyxpQkFBaUIsQ0FBQ0UsT0FBbEIsQ0FBMEIsY0FBMUIsRUFBMEMsRUFBMUMsQ0FBRCxFQUFnRGpDLGtCQUFoRCxDQURuQixFQUVILGFBRkcsQ0FBUDtBQUlIOztBQUNELFFBQUkrQixpQkFBaUIsQ0FBQ0MsUUFBbEIsQ0FBMkIsZ0JBQTNCLENBQUosRUFBa0Q7QUFDOUMsYUFBTyxJQUFJWixzQkFBSixDQUNIL0Isc0JBQXNCLENBQUMwQyxpQkFBaUIsQ0FBQ0UsT0FBbEIsQ0FBMEIsZ0JBQTFCLEVBQTRDLEVBQTVDLENBQUQsRUFBa0RqQyxrQkFBbEQsQ0FEbkIsRUFFSCxlQUZHLENBQVA7QUFJSDs7QUFDRCxRQUFJK0IsaUJBQWlCLENBQUNDLFFBQWxCLENBQTJCLGNBQTNCLENBQUosRUFBZ0Q7QUFDNUMsYUFBTyxJQUFJWixzQkFBSixDQUNIL0Isc0JBQXNCLENBQUMwQyxpQkFBaUIsQ0FBQ0UsT0FBbEIsQ0FBMEIsY0FBMUIsRUFBMEMsRUFBMUMsQ0FBRCxFQUFnRGpDLGtCQUFoRCxDQURuQixFQUVILGFBRkcsQ0FBUDtBQUlIOztBQUNELFFBQUkrQixpQkFBaUIsQ0FBQ0MsUUFBbEIsQ0FBMkIsZ0JBQTNCLENBQUosRUFBa0Q7QUFDOUMsYUFBTyxJQUFJWixzQkFBSixDQUNIL0Isc0JBQXNCLENBQUMwQyxpQkFBaUIsQ0FBQ0UsT0FBbEIsQ0FBMEIsZ0JBQTFCLEVBQTRDLEVBQTVDLENBQUQsRUFBa0RqQyxrQkFBbEQsQ0FEbkIsRUFFSCxlQUZHLENBQVA7QUFJSDs7QUFDRCxXQUFPLElBQUlvQixzQkFBSixDQUEyQi9CLHNCQUFzQixDQUFDMEMsaUJBQUQsRUFBb0IvQixrQkFBcEIsQ0FBakQsRUFBMEYsT0FBMUYsQ0FBUDtBQUNIOztBQTlENkU7Ozs7QUE0SGxGLFNBQVNrQyxtQkFBVCxDQUF3RHpCLE1BQXhELEVBQThHO0FBQzFHO0FBQ0E7QUFDQSxTQUFPQSxNQUFNLENBQUMwQixLQUFQLENBQWE1RCxVQUFVLENBQUNLLGFBQXhCLENBQVA7QUFDSDs7QUFFTSxNQUFNSyxhQUFOLENBRVA7QUFLV29DLEVBQUFBLFdBQVcsQ0FBQ2UsU0FBRCxFQUErQzNDLFFBQS9DLEVBQW9FO0FBQUEsU0FKckVnQixNQUlxRTtBQUFBLFNBSHRFaEIsUUFHc0U7QUFBQSxTQUY5RTRDLFVBRThFO0FBQ2xGLFNBQUs1QixNQUFMLEdBQWMyQixTQUFTLENBQUNFLE1BQVYsQ0FBaUJwQyxDQUFDLElBQUlBLENBQUMsS0FBSyxFQUE1QixDQUFkO0FBQ0EsU0FBS1QsUUFBTCxHQUFnQkEsUUFBaEI7QUFDSDs7QUFFa0IsTUFBUjhDLFFBQVEsR0FBYztBQUM3QixXQUFPTCxtQkFBbUIsQ0FBQyxLQUFLekIsTUFBTixDQUExQjtBQUNIOztBQUVNK0IsRUFBQUEsWUFBWSxHQUF1QztBQUN0RCxXQUFPLEtBQUsvQixNQUFaO0FBQ0g7O0FBRU1RLEVBQUFBLG1CQUFtQixHQUE0QztBQUNsRSxXQUFPLEtBQUtSLE1BQVo7QUFDSDs7QUFFNEIsR0FBckJnQyxxQkFBcUIsR0FBOEI7QUFDdkQsU0FBSyxNQUFNQyxLQUFYLElBQW9CLEtBQUtqQyxNQUF6QixFQUFpQztBQUM3QixVQUFJLENBQUNsQyxVQUFVLENBQUNLLGFBQVgsQ0FBeUI4RCxLQUF6QixDQUFMLEVBQXNDO0FBQ2xDLGNBQU0sSUFBSXJDLEtBQUosQ0FBVSxtQ0FBVixDQUFOO0FBQ0g7O0FBQ0QsWUFBTXFDLEtBQU47QUFDSDtBQUNKOztBQUVNQyxFQUFBQSw0QkFBNEIsR0FBK0I7QUFDOUQsU0FBSyxNQUFNRCxLQUFYLElBQW9CLEtBQUtqQyxNQUF6QixFQUFpQztBQUM3QixVQUFJLENBQUNsQyxVQUFVLENBQUNLLGFBQVgsQ0FBeUI4RCxLQUF6QixDQUFMLEVBQXNDO0FBQ2xDLGNBQU0sSUFBSXJDLEtBQUosQ0FBVSxtQ0FBVixDQUFOO0FBQ0g7QUFDSixLQUw2RCxDQU05RDtBQUNBO0FBQ0E7OztBQUNBLFdBQU8sS0FBS0ksTUFBWjtBQUNIOztBQU9NbUMsRUFBQUEsUUFBUSxDQUFDLEdBQUc1RCxJQUFKLEVBQXNFO0FBQ2pGLFdBQU80QixjQUFjLENBQUMsSUFBRCxFQUFPLEdBQUc1QixJQUFWLENBQXJCO0FBQ0g7O0FBRU02RCxFQUFBQSxVQUFVLEdBQXdDO0FBQ3JELFdBQU9YLG1CQUFtQixDQUFDLEtBQUt6QixNQUFOLENBQTFCO0FBQ0g7O0FBRU1xQyxFQUFBQSxVQUFVLENBQUNDLFFBQUQsRUFBOEI7QUFDM0MsVUFBTXRDLE1BQU0sR0FBRyxLQUFLQSxNQUFMLENBQVlSLEdBQVosQ0FBZ0J5QyxLQUFLLElBQUk7QUFDcEMsVUFBSW5FLFVBQVUsQ0FBQ0ssYUFBWCxDQUF5QjhELEtBQXpCLENBQUosRUFBcUM7QUFDakMsZUFBT0EsS0FBUDtBQUNILE9BRkQsTUFFTztBQUNILGVBQU9LLFFBQVA7QUFDSDtBQUNKLEtBTmMsQ0FBZjtBQVFBLFdBQU8sSUFBSTlELGFBQUosQ0FBa0J3QixNQUFsQixFQUEwQixLQUFLaEIsUUFBL0IsQ0FBUDtBQUNIOztBQUVNdUQsRUFBQUEsa0JBQWtCLEdBQVk7QUFDakMsV0FBTyxLQUFLdkMsTUFBTCxDQUFZTCxJQUFaLENBQWlCRixDQUFDLElBQUlBLENBQUMsS0FBSzNCLFVBQVUsQ0FBQ0csSUFBdkMsQ0FBUDtBQUNIOztBQUVNdUUsRUFBQUEseUJBQXlCLEdBQVk7QUFDeEMsV0FBTyxLQUFLeEMsTUFBTCxDQUFZTCxJQUFaLENBQWlCRixDQUFDLElBQUlBLENBQUMsS0FBSzNCLFVBQVUsQ0FBQ0ksT0FBdkMsQ0FBUDtBQUNIOztBQUVNdUUsRUFBQUEsZUFBZSxHQUFnQjtBQUNsQyxRQUFJLENBQUMsS0FBS0Ysa0JBQUwsRUFBTCxFQUFnQztBQUM1QixZQUFNLElBQUkzQyxLQUFKLENBQVUsNkJBQVYsQ0FBTjtBQUNILEtBSGlDLENBS2xDO0FBQ0E7OztBQUNBLFVBQU04QyxrQkFBa0IsR0FBRyxLQUFLMUMsTUFBTCxDQUFZMkMsV0FBWixDQUF3QjdFLFVBQVUsQ0FBQ0csSUFBbkMsQ0FBM0I7QUFDQSxXQUFPLEtBQUsrQixNQUFMLENBQVlYLEtBQVosQ0FBa0IsQ0FBbEIsRUFBcUJxRCxrQkFBckIsQ0FBUDtBQUNIOztBQUVNRSxFQUFBQSxtQkFBbUIsR0FBWTtBQUNsQyxVQUFNQyxRQUFRLEdBQUdDLHlCQUFVQyxJQUFWLENBQWUsS0FBSy9DLE1BQXBCLENBQWpCOztBQUNBLFdBQU82QyxRQUFRLElBQUkvRSxVQUFVLENBQUNHLElBQTlCO0FBQ0g7O0FBRU1zQyxFQUFBQSxVQUFVLEdBQXdDO0FBQ3JELFdBQU8sS0FBS3ZCLFFBQVo7QUFDSDs7QUFFTWdFLEVBQUFBLFFBQVEsR0FBVztBQUN0QixRQUFJLEtBQUtoRCxNQUFMLENBQVlpRCxNQUFaLEtBQXVCLENBQTNCLEVBQThCO0FBQzFCLGFBQU8sRUFBUDtBQUNIOztBQUNELFdBQU8sQ0FBQyxLQUFLakUsUUFBTCxHQUFnQixHQUFoQixHQUFzQixFQUF2QixJQUE2QixLQUFLZ0IsTUFBTCxDQUFZUixHQUFaLENBQWdCQyxDQUFDLElBQUksS0FBS3lELGdCQUFMLENBQXNCekQsQ0FBdEIsQ0FBckIsRUFBK0MwRCxJQUEvQyxDQUFvRCxHQUFwRCxDQUFwQztBQUNIOztBQUVNekUsRUFBQUEsWUFBWSxHQUFXO0FBQUE7O0FBQzFCLCtCQUFPLEtBQUtrRCxVQUFaLCtEQUEyQixLQUFLQSxVQUFMLEdBQWtCLEtBQUs1QixNQUFMLENBQVlSLEdBQVosQ0FBZ0JDLENBQUMsSUFBSSxLQUFLeUQsZ0JBQUwsQ0FBc0J6RCxDQUF0QixDQUFyQixFQUErQzBELElBQS9DLENBQW9ELEdBQXBELENBQTdDO0FBQ0g7O0FBRU1uQyxFQUFBQSxRQUFRLENBQ1hDLFNBRFcsRUFFWEMsb0JBQTBDLEdBQUdDLDJDQUFxQkMsT0FGdkQsRUFHSjtBQUNQLFFBQUlGLG9CQUFvQixLQUFLQywyQ0FBcUJDLE9BQWxELEVBQTJEO0FBQ3ZELGFBQU8sS0FBSzFDLFlBQUwsT0FBd0J1QyxTQUFTLENBQUN2QyxZQUFWLEVBQS9CO0FBQ0gsS0FGRCxNQUVPO0FBQ0gsYUFDSSxLQUFLNkIsVUFBTCxPQUFzQlUsU0FBUyxDQUFDVixVQUFWLEVBQXRCLElBQ0E2QyxRQUFRLENBQUNDLElBQVQsQ0FBY1AseUJBQVVRLEdBQVYsQ0FBYyxLQUFLdkIsWUFBTCxFQUFkLEVBQW1DZCxTQUFTLENBQUNjLFlBQVYsRUFBbkMsQ0FBZCxFQUE0RUwsS0FBNUUsQ0FDSSxDQUFDLENBQUM2QixFQUFELEVBQUtDLEVBQUwsQ0FBRCxLQUFjRCxFQUFFLEtBQUtDLEVBRHpCLENBRko7QUFNSDtBQUNKO0FBRUQ7QUFDSjtBQUNBOzs7QUFDV3pDLEVBQUFBLE9BQU8sQ0FBQ0csb0JBQTBDLEdBQUdDLDJDQUFxQkMsT0FBbkUsRUFBb0Y7QUFDOUYsUUFBSXFDLElBQUksR0FBRyxJQUFYOztBQUNBLFNBQUssTUFBTXhCLEtBQVgsSUFBb0IsaUNBQWEsS0FBS2pDLE1BQWxCLENBQXBCLEVBQStDO0FBQzNDLFVBQUkwRCxVQUFKOztBQUNBLFVBQUk1RixVQUFVLENBQUNLLGFBQVgsQ0FBeUI4RCxLQUF6QixDQUFKLEVBQXFDO0FBQ2pDeUIsUUFBQUEsVUFBVSxHQUFHekIsS0FBYjtBQUNILE9BRkQsTUFFTztBQUNILFlBQUlmLG9CQUFvQixLQUFLQywyQ0FBcUJ3QyxZQUFsRCxFQUFnRTtBQUM1REQsVUFBQUEsVUFBVSxHQUFHekIsS0FBSyxLQUFLbkUsVUFBVSxDQUFDRyxJQUFyQixHQUE0QixHQUE1QixHQUFrQyxHQUEvQztBQUNILFNBRkQsTUFFTztBQUNIeUYsVUFBQUEsVUFBVSxHQUFHLEdBQWI7QUFDSDtBQUNKOztBQUNELFVBQUlFLFdBQVcsR0FBR0YsVUFBVSxDQUFDVCxNQUE3Qjs7QUFDQSxhQUFPVyxXQUFQLEVBQW9CO0FBQ2hCO0FBQ0FILFFBQUFBLElBQUksR0FBSUEsSUFBSSxHQUFHLEVBQVIsR0FBY0MsVUFBVSxDQUFDRyxVQUFYLENBQXNCLEVBQUVELFdBQXhCLENBQXJCO0FBQ0g7QUFDSjtBQUVEO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBQ1EsV0FBT0gsSUFBSSxLQUFLLENBQWhCO0FBQ0g7O0FBRU1LLEVBQUFBLFVBQVUsQ0FBQzdDLFNBQUQsRUFBZ0M7QUFDN0MsVUFBTThDLFlBQVksR0FBRzlDLFNBQVMsQ0FBQ1QsbUJBQVYsRUFBckI7O0FBQ0EsUUFBSSxLQUFLUixNQUFMLENBQVlpRCxNQUFaLEtBQXVCYyxZQUFZLENBQUNkLE1BQXhDLEVBQWdEO0FBQzVDLGFBQU8sS0FBUDtBQUNIOztBQUNELFNBQUssSUFBSWUsQ0FBQyxHQUFHLENBQWIsRUFBZ0JBLENBQUMsR0FBRyxLQUFLaEUsTUFBTCxDQUFZaUQsTUFBaEMsRUFBd0NlLENBQUMsRUFBekMsRUFBNkM7QUFDekMsWUFBTUMsUUFBUSxHQUFHLEtBQUtqRSxNQUFMLENBQVlnRSxDQUFaLENBQWpCO0FBQ0EsWUFBTUUsU0FBUyxHQUFHSCxZQUFZLENBQUNDLENBQUQsQ0FBOUI7O0FBQ0EsVUFBSSxPQUFPQyxRQUFQLEtBQW9CLFFBQXhCLEVBQWtDO0FBQzlCLFlBQUksT0FBT0MsU0FBUCxLQUFxQixRQUF6QixFQUFtQztBQUMvQixjQUFJRCxRQUFRLEtBQUtDLFNBQWpCLEVBQTRCO0FBQ3hCLG1CQUFPLEtBQVA7QUFDSDs7QUFDRDtBQUNILFNBTEQsTUFLTztBQUNILGlCQUFPLEtBQVA7QUFDSDtBQUNKLE9BVEQsTUFTTyxJQUFJRCxRQUFRLEtBQUtuRyxVQUFVLENBQUNJLE9BQXhCLElBQW1DK0YsUUFBUSxLQUFLbkcsVUFBVSxDQUFDRyxJQUEvRCxFQUFxRTtBQUN4RSxZQUFJLE9BQU9pRyxTQUFQLEtBQXFCLFFBQXpCLEVBQW1DO0FBQy9CLGNBQUksQ0FBQ0MsUUFBUSxDQUFDQyxNQUFNLENBQUNGLFNBQUQsQ0FBUCxDQUFiLEVBQWtDO0FBQzlCLG1CQUFPLEtBQVA7QUFDSDs7QUFDRDtBQUNILFNBTEQsTUFLTztBQUNILGNBQUlBLFNBQVMsS0FBS3BHLFVBQVUsQ0FBQ0ksT0FBekIsSUFBb0NnRyxTQUFTLEtBQUtwRyxVQUFVLENBQUNHLElBQWpFLEVBQXVFO0FBQ25FLG1CQUFPLEtBQVA7QUFDSDs7QUFDRDtBQUNIO0FBQ0o7QUFDSjs7QUFDRCxXQUFPLElBQVA7QUFDSDs7QUFFTW9HLEVBQUFBLGdCQUFnQixHQUFXO0FBQzlCLFdBQU8sMEJBQU1qQixRQUFRLENBQUNDLElBQVQsQ0FBYyxLQUFLckQsTUFBbkIsRUFBMkI2QixNQUEzQixDQUFrQ3BDLENBQUMsSUFBSUEsQ0FBQyxLQUFLM0IsVUFBVSxDQUFDRyxJQUF4RCxDQUFOLENBQVA7QUFDSDs7QUFFTXFHLEVBQUFBLE9BQU8sR0FBWTtBQUN0QixXQUFPLEtBQUt0RSxNQUFMLENBQVlpRCxNQUFaLEtBQXVCLENBQTlCO0FBQ0g7O0FBRU1zQixFQUFBQSxRQUFRLENBQUN0RCxTQUFELEVBQXFDO0FBQ2hELFFBQUksQ0FBQyxLQUFLVixVQUFMLEVBQUwsRUFBd0I7QUFDcEIsWUFBTSxJQUFJWCxLQUFKLENBQVcsbUNBQWtDLEtBQUtvRCxRQUFMLEVBQWdCLEdBQTdELENBQU47QUFDSDs7QUFDRCxRQUFJLENBQUMvQixTQUFTLENBQUNWLFVBQVYsRUFBTCxFQUE2QjtBQUN6QixZQUFNLElBQUlYLEtBQUosQ0FBVyxtQ0FBa0NxQixTQUFTLENBQUMrQixRQUFWLEVBQXFCLEdBQWxFLENBQU47QUFDSDs7QUFDRCxXQUFPd0IseUJBQVlDLEtBQVosQ0FBa0IsS0FBS3pFLE1BQXZCLEVBQStCaUIsU0FBUyxDQUFDVCxtQkFBVixFQUEvQixDQUFQO0FBQ0g7O0FBRTBCLEdBQW5Ca0UsbUJBQW1CLEdBQTJFO0FBQ2xHLFFBQUlDLGVBQWUsR0FBRyxJQUFJQyxrQ0FBSixDQUFxQixLQUFLckUsVUFBTCxFQUFyQixDQUF0Qjs7QUFDQSxTQUFLLE1BQU0wQixLQUFYLElBQW9CLEtBQUtqQyxNQUF6QixFQUFpQztBQUM3QixVQUFJbEMsVUFBVSxDQUFDSyxhQUFYLENBQXlCOEQsS0FBekIsQ0FBSixFQUFxQztBQUNqQzBDLFFBQUFBLGVBQWUsQ0FBQ0UsTUFBaEIsQ0FBdUI1QyxLQUF2QjtBQUNILE9BRkQsTUFFTztBQUNILFlBQUksQ0FBQzBDLGVBQWUsQ0FBQ0csS0FBckIsRUFBNEI7QUFDeEIsZ0JBQU1ILGVBQWUsQ0FBQ0ksY0FBaEIsRUFBTjtBQUNBSixVQUFBQSxlQUFlLEdBQUcsSUFBSUMsa0NBQUosQ0FBcUIsS0FBckIsQ0FBbEI7QUFDSDs7QUFDRCxjQUFNM0MsS0FBTjtBQUNIO0FBQ0o7O0FBQ0QsUUFBSSxDQUFDMEMsZUFBZSxDQUFDRyxLQUFyQixFQUE0QjtBQUN4QixZQUFNSCxlQUFlLENBQUNJLGNBQWhCLEVBQU47QUFDSDtBQUNKOztBQUVNQyxFQUFBQSxTQUFTLEdBQXFDO0FBQ2pELFVBQU1DLFlBQXVDLEdBQUcsRUFBaEQ7O0FBQ0EsU0FBSyxNQUFNQyxRQUFYLElBQXVCLEtBQUtsRixNQUE1QixFQUFvQztBQUNoQyxVQUFJa0YsUUFBUSxLQUFLLElBQWpCLEVBQXVCO0FBQ25CLFlBQUksQ0FBQ0QsWUFBWSxDQUFDRSxHQUFiLEVBQUwsRUFBeUI7QUFDckIsY0FBSSxLQUFLNUUsVUFBTCxFQUFKLEVBQXVCO0FBQ25CLGtCQUFNLElBQUlYLEtBQUosQ0FBVyxvQkFBbUIsS0FBS29ELFFBQUwsRUFBZ0IsR0FBOUMsQ0FBTjtBQUNILFdBRkQsTUFFTztBQUNIaUMsWUFBQUEsWUFBWSxDQUFDM0UsSUFBYixDQUFrQixJQUFsQjtBQUNIO0FBQ0o7O0FBQ0Q7QUFDSDs7QUFFRCxVQUFJNEUsUUFBUSxLQUFLLEdBQWpCLEVBQXNCO0FBQ2xCO0FBQ0g7O0FBQ0RELE1BQUFBLFlBQVksQ0FBQzNFLElBQWIsQ0FBa0I0RSxRQUFsQjtBQUNIOztBQUNELFdBQU8sSUFBSTFHLGFBQUosQ0FBd0N5RyxZQUF4QyxFQUFzRCxLQUFLakcsUUFBM0QsQ0FBUDtBQUNIO0FBRUQ7QUFDSjtBQUNBOzs7QUFDV29HLEVBQUFBLGtCQUFrQixHQUFxQztBQUMxRCxRQUFJLEtBQUtoRCxVQUFMLEVBQUosRUFBdUI7QUFDbkIsYUFBTyxJQUFQO0FBQ0gsS0FGRCxNQUVPO0FBQ0g7QUFDQTtBQUNBLFlBQU1ULFNBQW9DLEdBQUcsS0FBSzNCLE1BQUwsQ0FBWVIsR0FBWixDQUFnQkMsQ0FBQyxJQUMxREEsQ0FBQyxLQUFLM0IsVUFBVSxDQUFDRyxJQUFqQixHQUF3QkgsVUFBVSxDQUFDSSxPQUFuQyxHQUE2Q3VCLENBREosQ0FBN0M7QUFHQSxhQUFPLElBQUlqQixhQUFKLENBQXdDbUQsU0FBeEMsRUFBbUQsS0FBSzNDLFFBQXhELENBQVA7QUFDSDtBQUNKOztBQUVNcUcsRUFBQUEsZUFBZSxHQUFxQztBQUN2RCxRQUFJLEtBQUtqRCxVQUFMLEVBQUosRUFBdUI7QUFDbkIsYUFBTyxJQUFQO0FBQ0gsS0FGRCxNQUVPO0FBQ0g7QUFDQTtBQUNBLFlBQU1ULFNBQW9DLEdBQUcsS0FBSzNCLE1BQUwsQ0FBWVIsR0FBWixDQUFnQkMsQ0FBQyxJQUMxREEsQ0FBQyxLQUFLM0IsVUFBVSxDQUFDSSxPQUFqQixHQUEyQkosVUFBVSxDQUFDRyxJQUF0QyxHQUE2Q3dCLENBREosQ0FBN0M7QUFHQSxhQUFPLElBQUlqQixhQUFKLENBQXdDbUQsU0FBeEMsRUFBbUQsS0FBSzNDLFFBQXhELENBQVA7QUFDSDtBQUNKOztBQUVNc0csRUFBQUEsVUFBVSxHQUFnQztBQUM3QyxRQUFJLENBQUMsS0FBS3RHLFFBQVYsRUFBb0I7QUFDaEIsWUFBTSxJQUFJWSxLQUFKLENBQVcsU0FBUSxLQUFLbEIsWUFBTCxFQUFvQixtQkFBdkMsQ0FBTjtBQUNIOztBQUNELFdBQU8sSUFBSUYsYUFBSixDQUFtQyxLQUFLd0IsTUFBeEMsRUFBZ0QsSUFBaEQsQ0FBUDtBQUNIOztBQUV3QixHQUFqQnVGLGlCQUFpQixHQUF3QjtBQUM3QyxVQUFNQyxNQUFNLEdBQUcsSUFBSVosa0NBQUosQ0FBcUIsS0FBS3JFLFVBQUwsRUFBckIsQ0FBZjs7QUFDQSxTQUFLLE1BQU0wQixLQUFYLElBQW9CYSx5QkFBVTJDLFFBQVYsQ0FBbUIsS0FBSzFELFlBQUwsRUFBbkIsRUFBd0MsQ0FBeEMsQ0FBcEIsRUFBZ0U7QUFDNUR5RCxNQUFBQSxNQUFNLENBQUNYLE1BQVAsQ0FBYzVDLEtBQWQ7QUFDQSxZQUFNdUQsTUFBTSxDQUFDRSxNQUFQLEVBQU47QUFDSDtBQUNKOztBQUVNQyxFQUFBQSx1QkFBdUIsR0FBcUM7QUFDL0QsVUFBTTlDLFFBQVEsR0FBR0MseUJBQVVDLElBQVYsQ0FBZSxLQUFLL0MsTUFBcEIsQ0FBakI7O0FBQ0EsUUFBSTZDLFFBQVEsSUFBSStDLFNBQVosSUFBeUI5SCxVQUFVLENBQUNDLFlBQVgsQ0FBd0I4RSxRQUF4QixDQUE3QixFQUFnRTtBQUM1RCxhQUFPLElBQUlyRSxhQUFKLENBQWtCLEtBQUt3QixNQUFMLENBQVlYLEtBQVosQ0FBa0IsQ0FBbEIsRUFBcUIsQ0FBQyxDQUF0QixDQUFsQixFQUE0QyxLQUFLTCxRQUFqRCxDQUFQO0FBQ0g7O0FBQ0QsV0FBTyxJQUFQO0FBQ0g7O0FBRU02RyxFQUFBQSxhQUFhLEdBQXFDO0FBQ3JELFVBQU1MLE1BQU0sR0FBRyxJQUFJWixrQ0FBSixDQUFxQixLQUFLNUYsUUFBMUIsQ0FBZjs7QUFDQSxTQUFLLE1BQU1pRCxLQUFYLElBQW9CYSx5QkFBVTJDLFFBQVYsQ0FBbUIsS0FBSzFELFlBQUwsRUFBbkIsRUFBd0MsQ0FBeEMsQ0FBcEIsRUFBZ0U7QUFDNUR5RCxNQUFBQSxNQUFNLENBQUNYLE1BQVAsQ0FBYzVDLEtBQWQ7QUFDSCxLQUpvRCxDQUtyRDtBQUNBOzs7QUFDQSxXQUFPdUQsTUFBTSxDQUFDRSxNQUFQLEVBQVA7QUFDSDs7QUFFTUksRUFBQUEsbUJBQW1CLENBQUNDLFNBQUQsRUFBaUU7QUFDdkYsUUFBSSxLQUFLM0QsVUFBTCxNQUFxQjJELFNBQVMsQ0FBQzlDLE1BQVYsS0FBcUIsQ0FBOUMsRUFBaUQ7QUFDN0MsYUFBTyxJQUFQO0FBQ0g7O0FBQ0QsUUFBSStDLGVBQWUsR0FBRyxDQUF0QjtBQUNBLFVBQU1SLE1BQU0sR0FBRyxJQUFJWixrQ0FBSixDQUFxQixJQUFyQixDQUFmOztBQUNBLFNBQUssTUFBTTNDLEtBQVgsSUFBb0IsS0FBS0YsWUFBTCxFQUFwQixFQUF5QztBQUNyQyxVQUFJakUsVUFBVSxDQUFDQyxZQUFYLENBQXdCa0UsS0FBeEIsS0FBa0MrRCxlQUFlLEdBQUdELFNBQVMsQ0FBQzlDLE1BQWxFLEVBQTBFO0FBQUE7O0FBQ3RFdUMsUUFBQUEsTUFBTSxDQUFDWCxNQUFQLDBCQUFja0IsU0FBUyxDQUFDQyxlQUFELENBQXZCLHlFQUE0QywwQkFBNUM7QUFDQUEsUUFBQUEsZUFBZTtBQUNsQixPQUhELE1BR087QUFDSFIsUUFBQUEsTUFBTSxDQUFDWCxNQUFQLENBQWM1QyxLQUFkO0FBQ0g7QUFDSixLQWJzRixDQWN2RjtBQUNBOzs7QUFDQSxXQUFPdUQsTUFBTSxDQUFDRSxNQUFQLEVBQVA7QUFDSDs7QUFFT3hDLEVBQUFBLGdCQUFnQixDQUFDZ0MsUUFBRCxFQUE4QjtBQUNsRCxRQUFJLE9BQU9BLFFBQVAsS0FBb0IsUUFBeEIsRUFBa0M7QUFDOUIsYUFBT0EsUUFBUDtBQUNIOztBQUNELFFBQUlBLFFBQVEsS0FBS3BILFVBQVUsQ0FBQ0csSUFBNUIsRUFBa0M7QUFDOUIsYUFBTyxHQUFQO0FBQ0g7O0FBQ0QsUUFBSWlILFFBQVEsS0FBS3BILFVBQVUsQ0FBQ0ksT0FBNUIsRUFBcUM7QUFDakMsYUFBTyxHQUFQO0FBQ0g7O0FBQ0QsVUFBTSxJQUFJMEIsS0FBSixDQUFXLGdDQUErQixxQ0FBbUJzRixRQUFuQixDQUE2QixFQUF2RSxDQUFOO0FBQ0g7O0FBblZMIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQmluZGluZ1BhdGgsIFZpZXdNb2RlbEZpZWxkTmFtZSB9IGZyb20gXCIuLi8uLi9FbmdpbmUvc3JjL0VuZ2luZS9Db3JlL0NvcmVUeXBlc1wiO1xuaW1wb3J0IHsgY291bnQsIEl0ZXJVdGlscywgcmV2ZXJzZUFycmF5IH0gZnJvbSBcIi4uL0l0ZXJhYmxlVXRpbHNcIjtcbmltcG9ydCB7IGVuc3VyZUFuZEdldFN0cmluZywgcmVqZWN0IH0gZnJvbSBcIi4uL1R5cGluZ1V0aWxzXCI7XG5pbXBvcnQgeyBnZXRTaW1wbGVIYXNoQnlTdHJpbmcgfSBmcm9tIFwiLi4vaGFzaFV0aWxzXCI7XG5cbmltcG9ydCB7IEVhY2hDdXJyZW50Q29sbGlzaW9uIH0gZnJvbSBcIi4vRWFjaEN1cnJlbnRDb2xsaXNpb25cIjtcbmltcG9ydCB7IE1vZGVsUGF0aEJ1aWxkZXIgfSBmcm9tIFwiLi9Nb2RlbFBhdGhCdWlsZGVyXCI7XG5pbXBvcnQgeyBQYXRoTWF0Y2hlciwgUGF0aE1hdGNoaW5nIH0gZnJvbSBcIi4vUGF0aE1hdGNoZXJcIjtcbmltcG9ydCB7IElFcXVhdGFibGUgfSBmcm9tIFwiLi9JRXF1YXRhYmxlXCI7XG5cbmNvbnN0IEVhY2hTeW1ib2wgPSBTeW1ib2wuZm9yKFwiX19FQUNIX19cIik7XG5jb25zdCBDdXJyZW50U3ltYm9sID0gU3ltYm9sLmZvcihcIl9fQ1VSUkVOVF9fXCIpO1xuXG5leHBvcnQgY2xhc3MgUGF0aFRva2VucyB7XG4gICAgcHVibGljIHN0YXRpYyBlYWNoOiB0eXBlb2YgRWFjaFN5bWJvbCA9IEVhY2hTeW1ib2w7XG4gICAgcHVibGljIHN0YXRpYyBjdXJyZW50OiB0eXBlb2YgQ3VycmVudFN5bWJvbCA9IEN1cnJlbnRTeW1ib2w7XG5cbiAgICBwdWJsaWMgc3RhdGljIGlzTXVsdGlUb2tlbihwYXJ0OiB1bmRlZmluZWQgfCBQYXRoVG9rZW4pOiBwYXJ0IGlzIHR5cGVvZiBFYWNoU3ltYm9sIHwgdHlwZW9mIEN1cnJlbnRTeW1ib2wge1xuICAgICAgICByZXR1cm4gcGFydCA9PT0gUGF0aFRva2Vucy5lYWNoIHx8IHBhcnQgPT09IFBhdGhUb2tlbnMuY3VycmVudDtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIGlzU2ltcGxlVG9rZW4ocGFydDogdW5kZWZpbmVkIHwgUGF0aFRva2VuKTogcGFydCBpcyBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdHlwZW9mIHBhcnQgPT09IFwic3RyaW5nXCI7XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBpc0luc3RhbmNlVG9rZW4ocGFydDogdW5kZWZpbmVkIHwgUGF0aFRva2VuKTogcGFydCBpcyBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdHlwZW9mIHBhcnQgPT09IFwic3RyaW5nXCIgJiYgL15cXGQrJC9pLnRlc3QocGFydCk7XG4gICAgfVxufVxuXG5leHBvcnQgdHlwZSBTaW1wbGVQYXRoVG9rZW4gPSBzdHJpbmc7XG5cbmV4cG9ydCB0eXBlIFBhdGhUb2tlbiA9IFNpbXBsZVBhdGhUb2tlbiB8IHR5cGVvZiBFYWNoU3ltYm9sIHwgdHlwZW9mIEN1cnJlbnRTeW1ib2w7XG5cbmV4cG9ydCBmdW5jdGlvbiBpc01vZGVsUGF0aChwYXRoOiBCaW5kaW5nUGF0aCB8IE1vZGVsUGF0aCB8IHVua25vd24pOiBwYXRoIGlzIE1vZGVsUGF0aCB7XG4gICAgcmV0dXJuIHR5cGVvZiBwYXRoICE9PSBcInN0cmluZ1wiICYmIHBhdGggaW5zdGFuY2VvZiBNb2RlbFBhdGhJbXBsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29udmVydFRvTGVnYWN5UGF0aChwYXRoOiBCaW5kaW5nUGF0aCB8IE1vZGVsUGF0aCk6IEJpbmRpbmdQYXRoIHtcbiAgICByZXR1cm4gaXNNb2RlbFBhdGgocGF0aCkgPyBwYXRoLnRvTGVnYWN5UGF0aCgpIDogcGF0aDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbnZlcnRUb0Fic29sdXRlTW9kZWxQYXRoPFIgZXh0ZW5kcyBib29sZWFuLCBBIGV4dGVuZHMgYm9vbGVhbj4oXG4gICAgcGF0aDogQmluZGluZ1BhdGggfCBJTW9kZWxQYXRoPFIsIEE+XG4pOiBJTW9kZWxQYXRoPFIsIHRydWU+O1xuZXhwb3J0IGZ1bmN0aW9uIGNvbnZlcnRUb0Fic29sdXRlTW9kZWxQYXRoKHBhdGg6IEJpbmRpbmdQYXRoIHwgQWJzb2x1dGVNb2RlbFBhdGgpOiBBYnNvbHV0ZU1vZGVsUGF0aCB7XG4gICAgcmV0dXJuIGlzTW9kZWxQYXRoKHBhdGgpID8gcGF0aCA6IGNyZWF0ZUFic29sdXRlRnJvbU1hc2socGF0aCwgUGF0aFRva2Vucy5lYWNoKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVtcHR5TW9kZWxQYXRoKCk6IFJlbGF0aXZlUmVzb2x2ZWRNb2RlbFBhdGgge1xuICAgIHJldHVybiBuZXcgTW9kZWxQYXRoSW1wbDx0cnVlLCBmYWxzZT4oW10sIGZhbHNlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVtcHR5QWJzb2x1dGVNb2RlbFBhdGgoKTogQWJzb2x1dGVSZXNvbHZlZE1vZGVsUGF0aCB7XG4gICAgcmV0dXJuIG5ldyBNb2RlbFBhdGhJbXBsPHRydWUsIHRydWU+KFtdLCB0cnVlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZU1vZGVsUGF0aChwYXRoOiBzdHJpbmcsIGFic29sdXRlOiB0cnVlKTogQWJzb2x1dGVSZXNvbHZlZE1vZGVsUGF0aDtcbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVNb2RlbFBhdGgocGF0aDogc3RyaW5nLCBhYnNvbHV0ZTogZmFsc2UpOiBSZWxhdGl2ZVJlc29sdmVkTW9kZWxQYXRoO1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZU1vZGVsUGF0aChwYXRoOiBzdHJpbmcsIGFic29sdXRlOiBcImF1dG9cIik6IFJlc29sdmVkTW9kZWxQYXRoO1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZU1vZGVsUGF0aChwYXRoOiBzdHJpbmcsIGFic29sdXRlOiBib29sZWFuIHwgXCJhdXRvXCIpOiBSZXNvbHZlZE1vZGVsUGF0aCB7XG4gICAgY29uc3QgcGFydFBhcnRTdHJpbmdzID0gcGF0aC5zcGxpdChcIi9cIik7XG4gICAgZW5zdXJlUGxhaW5QYXRoUGFydHNEb2VzTm90Q29udGFpbk11bHRpcGxpY2l0eShwYXJ0UGFydFN0cmluZ3MpO1xuICAgIGlmIChhYnNvbHV0ZSA9PT0gXCJhdXRvXCIpIHtcbiAgICAgICAgaWYgKHBhdGguc3RhcnRzV2l0aChcIi9cIikpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgTW9kZWxQYXRoSW1wbDx0cnVlLCB0cnVlPihwYXJ0UGFydFN0cmluZ3Muc2xpY2UoMSksIHRydWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBNb2RlbFBhdGhJbXBsPHRydWUsIGZhbHNlPihwYXJ0UGFydFN0cmluZ3MsIGZhbHNlKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAoYWJzb2x1dGUgJiYgcGF0aC5zdGFydHNXaXRoKFwiL1wiKSkge1xuICAgICAgICByZXR1cm4gbmV3IE1vZGVsUGF0aEltcGw8dHJ1ZSwgdHJ1ZT4ocGFydFBhcnRTdHJpbmdzLnNsaWNlKDEpLCB0cnVlKTtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBNb2RlbFBhdGhJbXBsPHRydWUsIGJvb2xlYW4+KHBhcnRQYXJ0U3RyaW5ncywgYWJzb2x1dGUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlRnJvbU1hc2socGF0aDogc3RyaW5nLCBhYnNvbHV0ZTogdHJ1ZSwgbXVsdGlwbGljaXR5U3ltYm9sOiBQYXRoVG9rZW4pOiBBYnNvbHV0ZU1vZGVsUGF0aDtcbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVGcm9tTWFzayhwYXRoOiBzdHJpbmcsIGFic29sdXRlOiBmYWxzZSwgbXVsdGlwbGljaXR5U3ltYm9sOiBQYXRoVG9rZW4pOiBSZXNvbHZlZE1vZGVsUGF0aDtcbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVGcm9tTWFzayhwYXRoOiBzdHJpbmcsIGFic29sdXRlOiBcImF1dG9cIiwgbXVsdGlwbGljaXR5U3ltYm9sOiBQYXRoVG9rZW4pOiBNb2RlbFBhdGg7XG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlRnJvbU1hc2socGF0aDogc3RyaW5nLCBhYnNvbHV0ZTogYm9vbGVhbiB8IFwiYXV0b1wiLCBtdWx0aXBsaWNpdHlTeW1ib2w6IFBhdGhUb2tlbik6IE1vZGVsUGF0aCB7XG4gICAgY29uc3QgcGFydFBhcnRTdHJpbmdzID0gcGF0aC5zcGxpdChcIi9cIikubWFwKHggPT4gKHggPT09IFwiKlwiID8gbXVsdGlwbGljaXR5U3ltYm9sIDogeCkpO1xuICAgIGlmIChhYnNvbHV0ZSA9PT0gXCJhdXRvXCIpIHtcbiAgICAgICAgaWYgKHBhdGguc3RhcnRzV2l0aChcIi9cIikpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgTW9kZWxQYXRoSW1wbChwYXJ0UGFydFN0cmluZ3Muc2xpY2UoMSksIHRydWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBNb2RlbFBhdGhJbXBsKHBhcnRQYXJ0U3RyaW5ncywgZmFsc2UpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmIChhYnNvbHV0ZSAmJiBwYXRoLnN0YXJ0c1dpdGgoXCIvXCIpKSB7XG4gICAgICAgIHJldHVybiBuZXcgTW9kZWxQYXRoSW1wbChwYXJ0UGFydFN0cmluZ3Muc2xpY2UoMSksIHRydWUpO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IE1vZGVsUGF0aEltcGwocGFydFBhcnRTdHJpbmdzLCBhYnNvbHV0ZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVBYnNvbHV0ZUZyb21NYXNrKHBhdGg6IHN0cmluZywgbXVsdGlwbGljaXR5U3ltYm9sOiBQYXRoVG9rZW4pOiBBYnNvbHV0ZU1vZGVsUGF0aCB7XG4gICAgY29uc3QgcGFydFBhcnRTdHJpbmdzID0gcGF0aC5zcGxpdChcIi9cIikubWFwKHggPT4gKHggPT09IFwiKlwiID8gbXVsdGlwbGljaXR5U3ltYm9sIDogeCkpO1xuICAgIGlmIChwYXRoLnN0YXJ0c1dpdGgoXCIvXCIpKSB7XG4gICAgICAgIHJldHVybiBuZXcgTW9kZWxQYXRoSW1wbChwYXJ0UGFydFN0cmluZ3Muc2xpY2UoMSksIHRydWUpO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IE1vZGVsUGF0aEltcGwocGFydFBhcnRTdHJpbmdzLCB0cnVlKTtcbn1cblxuZnVuY3Rpb24gZW5zdXJlUGxhaW5QYXRoUGFydHNEb2VzTm90Q29udGFpbk11bHRpcGxpY2l0eShwYXJ0czogc3RyaW5nW10pOiB2b2lkIHtcbiAgICBpZiAocGFydHMuc29tZSh4ID0+IHggPT09IFwiKlwiKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJQYXRoIG11c3Qgbm90IGNvbnRhaW4gKiBzeW1ib2xcIik7XG4gICAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQWJzb2x1dGUocGF0aDogc3RyaW5nKTogQWJzb2x1dGVSZXNvbHZlZE1vZGVsUGF0aCB7XG4gICAgY29uc3QgcGFydFBhcnRTdHJpbmdzID0gcGF0aC5zcGxpdChcIi9cIik7XG4gICAgZW5zdXJlUGxhaW5QYXRoUGFydHNEb2VzTm90Q29udGFpbk11bHRpcGxpY2l0eShwYXJ0UGFydFN0cmluZ3MpO1xuICAgIGlmIChwYXRoLnN0YXJ0c1dpdGgoXCIvXCIpKSB7XG4gICAgICAgIHJldHVybiBuZXcgTW9kZWxQYXRoSW1wbDx0cnVlLCB0cnVlPihwYXJ0UGFydFN0cmluZ3Muc2xpY2UoMSksIHRydWUpO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IE1vZGVsUGF0aEltcGw8dHJ1ZSwgdHJ1ZT4ocGFydFBhcnRTdHJpbmdzLCB0cnVlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVJlbGF0aXZlUmVzb2x2ZWRNb2RlbFBhdGgocGF0aDogc3RyaW5nKTogUmVsYXRpdmVSZXNvbHZlZE1vZGVsUGF0aCB7XG4gICAgY29uc3QgcGFydFBhcnRTdHJpbmdzID0gcGF0aC5zcGxpdChcIi9cIik7XG4gICAgZW5zdXJlUGxhaW5QYXRoUGFydHNEb2VzTm90Q29udGFpbk11bHRpcGxpY2l0eShwYXJ0UGFydFN0cmluZ3MpO1xuICAgIHJldHVybiBuZXcgTW9kZWxQYXRoSW1wbDx0cnVlLCBmYWxzZT4ocGFydFBhcnRTdHJpbmdzLCBmYWxzZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVBYnNvbHV0ZUZyb21Ub2tlbnModG9rZW5zOiBQYXRoVG9rZW5bXSk6IEFic29sdXRlTW9kZWxQYXRoIHtcbiAgICByZXR1cm4gbmV3IE1vZGVsUGF0aEltcGw8ZmFsc2UsIHRydWU+KHRva2VucywgdHJ1ZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVBYnNvbHV0ZVJlc29sdmVkRnJvbVRva2Vucyh0b2tlbnM6IHN0cmluZ1tdKTogQWJzb2x1dGVSZXNvbHZlZE1vZGVsUGF0aCB7XG4gICAgZW5zdXJlUGxhaW5QYXRoUGFydHNEb2VzTm90Q29udGFpbk11bHRpcGxpY2l0eSh0b2tlbnMpO1xuICAgIHJldHVybiBuZXcgTW9kZWxQYXRoSW1wbDx0cnVlLCB0cnVlPih0b2tlbnMsIHRydWUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlUmVsYXRpdmVGcm9tVG9rZW5zKHRva2VuczogcmVhZG9ubHkgc3RyaW5nW10pOiBSZWxhdGl2ZVJlc29sdmVkTW9kZWxQYXRoO1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVJlbGF0aXZlRnJvbVRva2Vucyh0b2tlbnM6IHJlYWRvbmx5IFBhdGhUb2tlbltdKTogUmVsYXRpdmVNb2RlbFBhdGg7XG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlUmVsYXRpdmVGcm9tVG9rZW5zKHRva2VuczogcmVhZG9ubHkgUGF0aFRva2VuW10pOiBSZWxhdGl2ZU1vZGVsUGF0aCB7XG4gICAgcmV0dXJuIG5ldyBNb2RlbFBhdGhJbXBsPGZhbHNlLCBmYWxzZT4odG9rZW5zLCBmYWxzZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBqb2luTW9kZWxQYXRocyguLi5wYXJ0czogQXJyYXk8TW9kZWxQYXRoIHwgUGF0aFRva2VuIHwgUGF0aFRva2VuW10+KTogTW9kZWxQYXRoIHtcbiAgICBsZXQgYWJzb2x1dGUgPSBmYWxzZTtcbiAgICBsZXQgcmVzdWx0UGFydHM6IFBhdGhUb2tlbltdID0gW107XG4gICAgZm9yIChjb25zdCBqb2luSXRlbSBvZiBwYXJ0cykge1xuICAgICAgICBpZiAodHlwZW9mIGpvaW5JdGVtID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICByZXN1bHRQYXJ0cy5wdXNoKGpvaW5JdGVtKTtcbiAgICAgICAgfSBlbHNlIGlmIChpc01vZGVsUGF0aChqb2luSXRlbSkpIHtcbiAgICAgICAgICAgIGlmIChqb2luSXRlbS5pc0Fic29sdXRlKCkpIHtcbiAgICAgICAgICAgICAgICBhYnNvbHV0ZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgcmVzdWx0UGFydHMgPSBbLi4uam9pbkl0ZW0uZ2V0UGF0aFBhcnRzQXNBcnJheSgpXTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0UGFydHMucHVzaCguLi5qb2luSXRlbS5nZXRQYXRoUGFydHNBc0FycmF5KCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoam9pbkl0ZW0pKSB7XG4gICAgICAgICAgICByZXN1bHRQYXJ0cy5wdXNoKC4uLmpvaW5JdGVtKTtcbiAgICAgICAgfSBlbHNlIGlmIChQYXRoVG9rZW5zLmlzTXVsdGlUb2tlbihqb2luSXRlbSkpIHtcbiAgICAgICAgICAgIHJlc3VsdFBhcnRzLnB1c2goam9pbkl0ZW0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBNb2RlbFBhdGhJbXBsKHJlc3VsdFBhcnRzLCBhYnNvbHV0ZSk7XG59XG5cbmV4cG9ydCBjbGFzcyBBYnNvbHV0ZU1vZGVsRmllbGRQYXRoIGltcGxlbWVudHMgSUVxdWF0YWJsZTxBYnNvbHV0ZU1vZGVsRmllbGRQYXRoPiB7XG4gICAgcHVibGljIHJlYWRvbmx5IHBhdGg6IEFic29sdXRlTW9kZWxQYXRoO1xuICAgIHB1YmxpYyByZWFkb25seSBmaWVsZDogVmlld01vZGVsRmllbGROYW1lIHwgXCIkZXJyb3JDb3VudFwiIHwgXCIkd2FybmluZ0NvdW50XCI7XG5cbiAgICBwdWJsaWMgY29uc3RydWN0b3IocGF0aDogQWJzb2x1dGVNb2RlbFBhdGgsIGZpZWxkTmFtZTogVmlld01vZGVsRmllbGROYW1lIHwgXCIkZXJyb3JDb3VudFwiIHwgXCIkd2FybmluZ0NvdW50XCIpIHtcbiAgICAgICAgdGhpcy5wYXRoID0gcGF0aDtcbiAgICAgICAgdGhpcy5maWVsZCA9IGZpZWxkTmFtZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0SGFzaCgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5wYXRoLmdldEhhc2goKSArIGdldFNpbXBsZUhhc2hCeVN0cmluZyh0aGlzLmZpZWxkKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgaXNFcXVhbHMoXG4gICAgICAgIG1vZGVsUGF0aDogQWJzb2x1dGVNb2RlbEZpZWxkUGF0aCxcbiAgICAgICAgZWFjaEN1cnJlbnRDb2xsaXNpb246IEVhY2hDdXJyZW50Q29sbGlzaW9uID0gRWFjaEN1cnJlbnRDb2xsaXNpb24uQXJlU2FtZVxuICAgICk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5wYXRoLmlzRXF1YWxzKG1vZGVsUGF0aC5wYXRoLCBlYWNoQ3VycmVudENvbGxpc2lvbikgJiYgdGhpcy5maWVsZCA9PT0gbW9kZWxQYXRoLmZpZWxkO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgY3JlYXRlRnJvbVN0cmluZyhwYXRoV2l0aEZpZWxkTmFtZTogc3RyaW5nKTogQWJzb2x1dGVNb2RlbEZpZWxkUGF0aCB7XG4gICAgICAgIGlmIChwYXRoV2l0aEZpZWxkTmFtZS5lbmRzV2l0aChcIi4kZXJyb3JDb3VudFwiKSkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBBYnNvbHV0ZU1vZGVsRmllbGRQYXRoKFxuICAgICAgICAgICAgICAgIGNyZWF0ZUFic29sdXRlKHBhdGhXaXRoRmllbGROYW1lLnJlcGxhY2UoXCIuJGVycm9yQ291bnRcIiwgXCJcIikpLFxuICAgICAgICAgICAgICAgIFwiJGVycm9yQ291bnRcIlxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocGF0aFdpdGhGaWVsZE5hbWUuZW5kc1dpdGgoXCIuJHdhcm5pbmdDb3VudFwiKSkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBBYnNvbHV0ZU1vZGVsRmllbGRQYXRoKFxuICAgICAgICAgICAgICAgIGNyZWF0ZUFic29sdXRlKHBhdGhXaXRoRmllbGROYW1lLnJlcGxhY2UoXCIuJHdhcm5pbmdDb3VudFwiLCBcIlwiKSksXG4gICAgICAgICAgICAgICAgXCIkd2FybmluZ0NvdW50XCJcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ldyBBYnNvbHV0ZU1vZGVsRmllbGRQYXRoKGNyZWF0ZUFic29sdXRlKHBhdGhXaXRoRmllbGROYW1lKSwgXCJ2YWx1ZVwiKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIGNyZWF0ZUZyb21NYXNrKHBhdGhXaXRoRmllbGROYW1lOiBzdHJpbmcsIG11bHRpcGxpY2l0eVN5bWJvbDogUGF0aFRva2VuKTogQWJzb2x1dGVNb2RlbEZpZWxkUGF0aCB7XG4gICAgICAgIGlmIChwYXRoV2l0aEZpZWxkTmFtZS5lbmRzV2l0aChcIi4kZXJyb3JDb3VudFwiKSkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBBYnNvbHV0ZU1vZGVsRmllbGRQYXRoKFxuICAgICAgICAgICAgICAgIGNyZWF0ZUFic29sdXRlRnJvbU1hc2socGF0aFdpdGhGaWVsZE5hbWUucmVwbGFjZShcIi4kZXJyb3JDb3VudFwiLCBcIlwiKSwgbXVsdGlwbGljaXR5U3ltYm9sKSxcbiAgICAgICAgICAgICAgICBcIiRlcnJvckNvdW50XCJcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBhdGhXaXRoRmllbGROYW1lLmVuZHNXaXRoKFwiLiR3YXJuaW5nQ291bnRcIikpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgQWJzb2x1dGVNb2RlbEZpZWxkUGF0aChcbiAgICAgICAgICAgICAgICBjcmVhdGVBYnNvbHV0ZUZyb21NYXNrKHBhdGhXaXRoRmllbGROYW1lLnJlcGxhY2UoXCIuJHdhcm5pbmdDb3VudFwiLCBcIlwiKSwgbXVsdGlwbGljaXR5U3ltYm9sKSxcbiAgICAgICAgICAgICAgICBcIiR3YXJuaW5nQ291bnRcIlxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocGF0aFdpdGhGaWVsZE5hbWUuZW5kc1dpdGgoXCIuZXJyb3JzQ291bnRcIikpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgQWJzb2x1dGVNb2RlbEZpZWxkUGF0aChcbiAgICAgICAgICAgICAgICBjcmVhdGVBYnNvbHV0ZUZyb21NYXNrKHBhdGhXaXRoRmllbGROYW1lLnJlcGxhY2UoXCIuZXJyb3JzQ291bnRcIiwgXCJcIiksIG11bHRpcGxpY2l0eVN5bWJvbCksXG4gICAgICAgICAgICAgICAgXCJlcnJvcnNDb3VudFwiXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwYXRoV2l0aEZpZWxkTmFtZS5lbmRzV2l0aChcIi53YXJuaW5nc0NvdW50XCIpKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IEFic29sdXRlTW9kZWxGaWVsZFBhdGgoXG4gICAgICAgICAgICAgICAgY3JlYXRlQWJzb2x1dGVGcm9tTWFzayhwYXRoV2l0aEZpZWxkTmFtZS5yZXBsYWNlKFwiLndhcm5pbmdzQ291bnRcIiwgXCJcIiksIG11bHRpcGxpY2l0eVN5bWJvbCksXG4gICAgICAgICAgICAgICAgXCJ3YXJuaW5nc0NvdW50XCJcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ldyBBYnNvbHV0ZU1vZGVsRmllbGRQYXRoKGNyZWF0ZUFic29sdXRlRnJvbU1hc2socGF0aFdpdGhGaWVsZE5hbWUsIG11bHRpcGxpY2l0eVN5bWJvbCksIFwidmFsdWVcIik7XG4gICAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIElNb2RlbFBhdGg8VFJlc29sdmVkIGV4dGVuZHMgYm9vbGVhbiwgVEFic29sdXRlIGV4dGVuZHMgYm9vbGVhbj5cbiAgICBleHRlbmRzIElFcXVhdGFibGU8SU1vZGVsUGF0aDxib29sZWFuLCBib29sZWFuPj4ge1xuICAgIHJlYWRvbmx5IHJlc29sdmVkOiBUUmVzb2x2ZWQ7XG4gICAgcmVhZG9ubHkgYWJzb2x1dGU6IFRBYnNvbHV0ZTtcblxuICAgIGlzRXF1YWxzKG1vZGVsUGF0aDogTW9kZWxQYXRoLCBlYWNoQ3VycmVudENvbGxpc2lvbj86IEVhY2hDdXJyZW50Q29sbGlzaW9uKTogYm9vbGVhbjtcbiAgICBnZXRIYXNoKGVhY2hDdXJyZW50Q29sbGlzaW9uPzogRWFjaEN1cnJlbnRDb2xsaXNpb24pOiBudW1iZXI7XG5cbiAgICBpc1Jlc29sdmVkKCk6IHRoaXMgaXMgSU1vZGVsUGF0aDx0cnVlLCBUQWJzb2x1dGU+O1xuICAgIGlzQWJzb2x1dGUoKTogdGhpcyBpcyBJTW9kZWxQYXRoPFRSZXNvbHZlZCwgdHJ1ZT47XG4gICAgdG9BYnNvbHV0ZSgpOiBJTW9kZWxQYXRoPFRSZXNvbHZlZCwgdHJ1ZT47XG5cbiAgICBqb2luV2l0aCguLi5wYXRoOiBzdHJpbmdbXSk6IElNb2RlbFBhdGg8VFJlc29sdmVkLCBUQWJzb2x1dGU+O1xuICAgIGpvaW5XaXRoKC4uLnBhdGg6IFBhdGhUb2tlbltdKTogSU1vZGVsUGF0aDxib29sZWFuLCBUQWJzb2x1dGU+O1xuICAgIGpvaW5XaXRoKC4uLnBhdGg6IEFycmF5PFJlc29sdmVkTW9kZWxQYXRoIHwgc3RyaW5nPik6IElNb2RlbFBhdGg8VFJlc29sdmVkLCBUQWJzb2x1dGU+O1xuICAgIGpvaW5XaXRoKC4uLnBhdGg6IEFycmF5PEFic29sdXRlUmVzb2x2ZWRNb2RlbFBhdGggfCBzdHJpbmc+KTogSU1vZGVsUGF0aDxUUmVzb2x2ZWQsIHRydWU+O1xuICAgIGpvaW5XaXRoKC4uLnBhdGg6IEFycmF5PE1vZGVsUGF0aCB8IFBhdGhUb2tlbj4pOiBJTW9kZWxQYXRoPGJvb2xlYW4sIFRBYnNvbHV0ZT47XG5cbiAgICBnZXRQYXRoUGFydHMoKTogSXRlcmFibGU8UGF0aFRva2VuU3BlYzxUUmVzb2x2ZWQ+PjtcbiAgICBnZXRQYXRoUGFydHNBc0FycmF5KCk6IFJlYWRvbmx5QXJyYXk8UGF0aFRva2VuU3BlYzxUUmVzb2x2ZWQ+PjtcbiAgICBnZXRTaW1wbGVUb2tlbnNTdHJpY3QoKTogSXRlcmFibGU8U2ltcGxlUGF0aFRva2VuPjtcbiAgICBnZXRTaW1wbGVUb2tlbnNBc0FycmF5U3RyaWN0KCk6IHJlYWRvbmx5IFNpbXBsZVBhdGhUb2tlbltdO1xuXG4gICAgcmVzb2x2ZUFsbChpbnN0YW5jZTogc3RyaW5nKTogTW9kZWxQYXRoO1xuICAgIGlzQ29udGFpbkl0ZXJhdGlvbigpOiBib29sZWFuO1xuICAgIGlzQ29udGFpbkN1cnJlbnRJdGVyYXRpb24oKTogYm9vbGVhbjtcbiAgICBnZXRMYXN0TGlzdFBhdGgoKTogUGF0aFRva2VuW107XG4gICAgaXNFbmRzV2l0aEl0ZXJhdGlvbigpOiBib29sZWFuO1xuICAgIGlzSW5jbHVkZXMobW9kZWxQYXRoOiBNb2RlbFBhdGgpOiBib29sZWFuO1xuICAgIGdldEl0ZXJhdGlvblJhbmsoKTogbnVtYmVyO1xuICAgIGlzRW1wdHkoKTogYm9vbGVhbjtcbiAgICBtYXRjaEZvcihtb2RlbFBhdGg6IE1vZGVsUGF0aCk6IFBhdGhNYXRjaGluZztcbiAgICBzcGxpdEJ5TXVsdGlwbGljaXR5KCk6IEl0ZXJhYmxlPFJlc29sdmVkTW9kZWxQYXRoIHwgdHlwZW9mIEVhY2hTeW1ib2wgfCB0eXBlb2YgQ3VycmVudFN5bWJvbD47XG4gICAgbm9ybWFsaXplKCk6IElNb2RlbFBhdGg8VFJlc29sdmVkLCBUQWJzb2x1dGU+O1xuICAgIHRvQ3VycmVudEl0ZXJhdGlvbigpOiBJTW9kZWxQYXRoPFRSZXNvbHZlZCwgVEFic29sdXRlPjtcbiAgICB0b0VhY2hJdGVyYXRpb24oKTogSU1vZGVsUGF0aDxUUmVzb2x2ZWQsIFRBYnNvbHV0ZT47XG4gICAgZ2V0QWxsUGFyZW50UGF0aHMoKTogSXRlcmFibGU8TW9kZWxQYXRoPjtcbiAgICB0cmltTGFzdFN0YXJJZkxhc3RUb2tlbigpOiBJTW9kZWxQYXRoPFRSZXNvbHZlZCwgVEFic29sdXRlPjtcbiAgICBnZXRQYXJlbnRQYXRoKCk6IElNb2RlbFBhdGg8VFJlc29sdmVkLCBUQWJzb2x1dGU+O1xuICAgIGFwcGx5SW5zdGFuY2VzRGlydHkoaW5zdGFuY2VzOiBTaW1wbGVQYXRoVG9rZW5bXSk6IElNb2RlbFBhdGg8VFJlc29sdmVkLCBUQWJzb2x1dGU+O1xuXG4gICAgdG9TdHJpbmcoKTogc3RyaW5nO1xuICAgIHRvTGVnYWN5UGF0aCgpOiBzdHJpbmc7XG59XG5cbmV4cG9ydCB0eXBlIE1vZGVsUGF0aCA9IElNb2RlbFBhdGg8Ym9vbGVhbiwgYm9vbGVhbj47XG5leHBvcnQgdHlwZSBSZXNvbHZlZE1vZGVsUGF0aCA9IElNb2RlbFBhdGg8dHJ1ZSwgYm9vbGVhbj47XG5leHBvcnQgdHlwZSBBYnNvbHV0ZU1vZGVsUGF0aCA9IElNb2RlbFBhdGg8Ym9vbGVhbiwgdHJ1ZT47XG5leHBvcnQgdHlwZSBBYnNvbHV0ZVJlc29sdmVkTW9kZWxQYXRoID0gSU1vZGVsUGF0aDx0cnVlLCB0cnVlPjtcblxuZXhwb3J0IHR5cGUgUmVsYXRpdmVNb2RlbFBhdGggPSBJTW9kZWxQYXRoPGJvb2xlYW4sIGZhbHNlPjtcbmV4cG9ydCB0eXBlIFJlbGF0aXZlUmVzb2x2ZWRNb2RlbFBhdGggPSBJTW9kZWxQYXRoPHRydWUsIGZhbHNlPjtcblxudHlwZSBQYXRoVG9rZW5TcGVjPFRSZXNvbHZlZCBleHRlbmRzIGJvb2xlYW4+ID0gVFJlc29sdmVkIGV4dGVuZHMgdHJ1ZSA/IHN0cmluZyA6IFBhdGhUb2tlbjtcblxudHlwZSBQYXRoVG9rZW5zU3BlYzxUUmVzb2x2ZWQgZXh0ZW5kcyBib29sZWFuPiA9IEFycmF5PFBhdGhUb2tlblNwZWM8VFJlc29sdmVkPj47XG5cbnR5cGUgUmVhZG9ubHlQYXRoVG9rZW5zU3BlYzxUUmVzb2x2ZWQgZXh0ZW5kcyBib29sZWFuPiA9IFJlYWRvbmx5QXJyYXk8UGF0aFRva2VuU3BlYzxUUmVzb2x2ZWQ+PjtcblxuZnVuY3Rpb24gaXNBbGxUb2tlbnNSZXNvbHZlZDxUUmVzb2x2ZWQgZXh0ZW5kcyBib29sZWFuPih0b2tlbnM6IFJlYWRvbmx5UGF0aFRva2Vuc1NwZWM8VFJlc29sdmVkPik6IFRSZXNvbHZlZCB7XG4gICAgLy8g0K8g0YfRgtC+LdGC0L4g0L3QtdC80L7Qs9GDINGB0L7QvtCx0YDQsNC30LjRgtGMINC60LDQuiDRgtGD0YIg0LLRgdGRINGB0YLRgNC+0LPQviDQvdCw0L/QuNGB0LDRgtGMLi4uXG4gICAgLy8gQHRzLWV4cGVjdC1lcnJvclxuICAgIHJldHVybiB0b2tlbnMuZXZlcnkoUGF0aFRva2Vucy5pc1NpbXBsZVRva2VuKTtcbn1cblxuZXhwb3J0IGNsYXNzIE1vZGVsUGF0aEltcGw8VFJlc29sdmVkIGV4dGVuZHMgYm9vbGVhbiwgVEFic29sdXRlIGV4dGVuZHMgYm9vbGVhbj5cbiAgICBpbXBsZW1lbnRzIElFcXVhdGFibGU8TW9kZWxQYXRoPiwgSU1vZGVsUGF0aDxUUmVzb2x2ZWQsIFRBYnNvbHV0ZT5cbntcbiAgICBwcml2YXRlIHJlYWRvbmx5IHRva2VuczogUmVhZG9ubHlQYXRoVG9rZW5zU3BlYzxUUmVzb2x2ZWQ+O1xuICAgIHB1YmxpYyByZWFkb25seSBhYnNvbHV0ZTogVEFic29sdXRlO1xuICAgIHByaXZhdGUgbGVnYWN5UGF0aDogdW5kZWZpbmVkIHwgc3RyaW5nO1xuXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKHBhdGhQYXJ0czogUmVhZG9ubHlQYXRoVG9rZW5zU3BlYzxUUmVzb2x2ZWQ+LCBhYnNvbHV0ZTogVEFic29sdXRlKSB7XG4gICAgICAgIHRoaXMudG9rZW5zID0gcGF0aFBhcnRzLmZpbHRlcih4ID0+IHggIT09IFwiXCIpO1xuICAgICAgICB0aGlzLmFic29sdXRlID0gYWJzb2x1dGU7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCByZXNvbHZlZCgpOiBUUmVzb2x2ZWQge1xuICAgICAgICByZXR1cm4gaXNBbGxUb2tlbnNSZXNvbHZlZCh0aGlzLnRva2Vucyk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldFBhdGhQYXJ0cygpOiBJdGVyYWJsZTxQYXRoVG9rZW5TcGVjPFRSZXNvbHZlZD4+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMudG9rZW5zO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRQYXRoUGFydHNBc0FycmF5KCk6IFJlYWRvbmx5QXJyYXk8UGF0aFRva2VuU3BlYzxUUmVzb2x2ZWQ+PiB7XG4gICAgICAgIHJldHVybiB0aGlzLnRva2VucztcbiAgICB9XG5cbiAgICBwdWJsaWMgKmdldFNpbXBsZVRva2Vuc1N0cmljdCgpOiBJdGVyYWJsZTxTaW1wbGVQYXRoVG9rZW4+IHtcbiAgICAgICAgZm9yIChjb25zdCB0b2tlbiBvZiB0aGlzLnRva2Vucykge1xuICAgICAgICAgICAgaWYgKCFQYXRoVG9rZW5zLmlzU2ltcGxlVG9rZW4odG9rZW4pKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUGF0aCBtdXN0IG5vdCBjb250YWluIHNwZWMgdG9rZW5zXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgeWllbGQgdG9rZW47XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0U2ltcGxlVG9rZW5zQXNBcnJheVN0cmljdCgpOiByZWFkb25seSBTaW1wbGVQYXRoVG9rZW5bXSB7XG4gICAgICAgIGZvciAoY29uc3QgdG9rZW4gb2YgdGhpcy50b2tlbnMpIHtcbiAgICAgICAgICAgIGlmICghUGF0aFRva2Vucy5pc1NpbXBsZVRva2VuKHRva2VuKSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlBhdGggbXVzdCBub3QgY29udGFpbiBzcGVjIHRva2Vuc1wiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyDQn9GA0L7QstC10YDQutCwINCy0YvRiNC1INCz0LDRgNCw0LXQvdGC0LjRgNGD0LXRgiDRh9GC0L4g0LHRg9C00YPRgiDRgtC+0LvRjNC60L4gU2ltcGxlUGF0aFRva2VuLlxuICAgICAgICAvLyDQktGB0LUgbWFwINC4IGZpbHRlciDRg9Cx0YDQsNC90Ysg0LTQu9GPINC/0YDQvtC40LfQstC+0LTQuNGC0LXQu9GM0L3QvtGB0YLQuFxuICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgIHJldHVybiB0aGlzLnRva2VucztcbiAgICB9XG5cbiAgICBwdWJsaWMgam9pbldpdGgoLi4ucGF0aDogc3RyaW5nW10pOiBJTW9kZWxQYXRoPFRSZXNvbHZlZCwgVEFic29sdXRlPjtcbiAgICBwdWJsaWMgam9pbldpdGgoLi4ucGF0aDogUGF0aFRva2VuW10pOiBJTW9kZWxQYXRoPGJvb2xlYW4sIFRBYnNvbHV0ZT47XG4gICAgcHVibGljIGpvaW5XaXRoKC4uLnBhdGg6IEFycmF5PFJlc29sdmVkTW9kZWxQYXRoIHwgc3RyaW5nPik6IElNb2RlbFBhdGg8VFJlc29sdmVkLCBUQWJzb2x1dGU+O1xuICAgIHB1YmxpYyBqb2luV2l0aCguLi5wYXRoOiBBcnJheTxBYnNvbHV0ZVJlc29sdmVkTW9kZWxQYXRoIHwgc3RyaW5nPik6IElNb2RlbFBhdGg8VFJlc29sdmVkLCB0cnVlPjtcbiAgICBwdWJsaWMgam9pbldpdGgoLi4ucGF0aDogQXJyYXk8TW9kZWxQYXRoIHwgUGF0aFRva2VuPik6IElNb2RlbFBhdGg8Ym9vbGVhbiwgVEFic29sdXRlPjtcbiAgICBwdWJsaWMgam9pbldpdGgoLi4ucGF0aDogQXJyYXk8TW9kZWxQYXRoIHwgUGF0aFRva2VuPik6IElNb2RlbFBhdGg8Ym9vbGVhbiwgYm9vbGVhbj4ge1xuICAgICAgICByZXR1cm4gam9pbk1vZGVsUGF0aHModGhpcywgLi4ucGF0aCk7XG4gICAgfVxuXG4gICAgcHVibGljIGlzUmVzb2x2ZWQoKTogdGhpcyBpcyBJTW9kZWxQYXRoPHRydWUsIFRBYnNvbHV0ZT4ge1xuICAgICAgICByZXR1cm4gaXNBbGxUb2tlbnNSZXNvbHZlZCh0aGlzLnRva2Vucyk7XG4gICAgfVxuXG4gICAgcHVibGljIHJlc29sdmVBbGwoaW5zdGFuY2U6IHN0cmluZyk6IE1vZGVsUGF0aCB7XG4gICAgICAgIGNvbnN0IHRva2VucyA9IHRoaXMudG9rZW5zLm1hcCh0b2tlbiA9PiB7XG4gICAgICAgICAgICBpZiAoUGF0aFRva2Vucy5pc1NpbXBsZVRva2VuKHRva2VuKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0b2tlbjtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGluc3RhbmNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gbmV3IE1vZGVsUGF0aEltcGwodG9rZW5zLCB0aGlzLmFic29sdXRlKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgaXNDb250YWluSXRlcmF0aW9uKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy50b2tlbnMuc29tZSh4ID0+IHggPT09IFBhdGhUb2tlbnMuZWFjaCk7XG4gICAgfVxuXG4gICAgcHVibGljIGlzQ29udGFpbkN1cnJlbnRJdGVyYXRpb24oKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLnRva2Vucy5zb21lKHggPT4geCA9PT0gUGF0aFRva2Vucy5jdXJyZW50KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0TGFzdExpc3RQYXRoKCk6IFBhdGhUb2tlbltdIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzQ29udGFpbkl0ZXJhdGlvbigpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJQYXRoIG11c3QgY29udGFpbiBpdGVyYXRpb25cIik7XG4gICAgICAgIH1cblxuICAgICAgICAvLyDQn9GA0L7QstC10YDQutCwINCy0YvRiNC1INCz0LDRgNCw0L3RgtC40YDRg9C10YIsINGH0YLQviDQsdGD0LTQtdGCIFBhdGhUb2tlbnMuZWFjaFxuICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgIGNvbnN0IGxhc3RJdGVyYXRpb25JbmRleCA9IHRoaXMudG9rZW5zLmxhc3RJbmRleE9mKFBhdGhUb2tlbnMuZWFjaCk7XG4gICAgICAgIHJldHVybiB0aGlzLnRva2Vucy5zbGljZSgwLCBsYXN0SXRlcmF0aW9uSW5kZXgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBpc0VuZHNXaXRoSXRlcmF0aW9uKCk6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCBsYXN0SXRlbSA9IEl0ZXJVdGlscy5sYXN0KHRoaXMudG9rZW5zKTtcbiAgICAgICAgcmV0dXJuIGxhc3RJdGVtID09IFBhdGhUb2tlbnMuZWFjaDtcbiAgICB9XG5cbiAgICBwdWJsaWMgaXNBYnNvbHV0ZSgpOiB0aGlzIGlzIElNb2RlbFBhdGg8VFJlc29sdmVkLCB0cnVlPiB7XG4gICAgICAgIHJldHVybiB0aGlzLmFic29sdXRlO1xuICAgIH1cblxuICAgIHB1YmxpYyB0b1N0cmluZygpOiBzdHJpbmcge1xuICAgICAgICBpZiAodGhpcy50b2tlbnMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gXCJcIjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gKHRoaXMuYWJzb2x1dGUgPyBcIi9cIiA6IFwiXCIpICsgdGhpcy50b2tlbnMubWFwKHggPT4gdGhpcy5wYXRoUGFydFRvU3RyaW5nKHgpKS5qb2luKFwiL1wiKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgdG9MZWdhY3lQYXRoKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLmxlZ2FjeVBhdGggPz8gKHRoaXMubGVnYWN5UGF0aCA9IHRoaXMudG9rZW5zLm1hcCh4ID0+IHRoaXMucGF0aFBhcnRUb1N0cmluZyh4KSkuam9pbihcIi9cIikpO1xuICAgIH1cblxuICAgIHB1YmxpYyBpc0VxdWFscyhcbiAgICAgICAgbW9kZWxQYXRoOiBNb2RlbFBhdGgsXG4gICAgICAgIGVhY2hDdXJyZW50Q29sbGlzaW9uOiBFYWNoQ3VycmVudENvbGxpc2lvbiA9IEVhY2hDdXJyZW50Q29sbGlzaW9uLkFyZVNhbWVcbiAgICApOiBib29sZWFuIHtcbiAgICAgICAgaWYgKGVhY2hDdXJyZW50Q29sbGlzaW9uID09PSBFYWNoQ3VycmVudENvbGxpc2lvbi5BcmVTYW1lKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy50b0xlZ2FjeVBhdGgoKSA9PT0gbW9kZWxQYXRoLnRvTGVnYWN5UGF0aCgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICB0aGlzLmlzQWJzb2x1dGUoKSA9PT0gbW9kZWxQYXRoLmlzQWJzb2x1dGUoKSAmJlxuICAgICAgICAgICAgICAgIEl0ZXJhdG9yLmZyb20oSXRlclV0aWxzLnppcCh0aGlzLmdldFBhdGhQYXJ0cygpLCBtb2RlbFBhdGguZ2V0UGF0aFBhcnRzKCkpKS5ldmVyeShcbiAgICAgICAgICAgICAgICAgICAgKFt0MSwgdDJdKSA9PiB0MSA9PT0gdDJcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog0JLRgdC10LPQtNCwINGG0LXQu9C+0LUg0L/QvtC70L7QttC40YLQtdC70YzQvdC+0LUg0LHQtdC30LfQvdCw0LrQvtCy0L7QtSAzMi3QsdC40YLQvdC+0LUg0YfQuNGB0LvQvlxuICAgICAqL1xuICAgIHB1YmxpYyBnZXRIYXNoKGVhY2hDdXJyZW50Q29sbGlzaW9uOiBFYWNoQ3VycmVudENvbGxpc2lvbiA9IEVhY2hDdXJyZW50Q29sbGlzaW9uLkFyZVNhbWUpOiBudW1iZXIge1xuICAgICAgICBsZXQgaGFzaCA9IDUzODE7XG4gICAgICAgIGZvciAoY29uc3QgdG9rZW4gb2YgcmV2ZXJzZUFycmF5KHRoaXMudG9rZW5zKSkge1xuICAgICAgICAgICAgbGV0IGN1cnJlbnRTdHI6IHN0cmluZztcbiAgICAgICAgICAgIGlmIChQYXRoVG9rZW5zLmlzU2ltcGxlVG9rZW4odG9rZW4pKSB7XG4gICAgICAgICAgICAgICAgY3VycmVudFN0ciA9IHRva2VuO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAoZWFjaEN1cnJlbnRDb2xsaXNpb24gPT09IEVhY2hDdXJyZW50Q29sbGlzaW9uLkFyZURpZmZlcmVudCkge1xuICAgICAgICAgICAgICAgICAgICBjdXJyZW50U3RyID0gdG9rZW4gPT09IFBhdGhUb2tlbnMuZWFjaCA/IFwiKlwiIDogXCIhXCI7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFN0ciA9IFwiKlwiO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxldCBzdHJpbmdJbmRleCA9IGN1cnJlbnRTdHIubGVuZ3RoO1xuICAgICAgICAgICAgd2hpbGUgKHN0cmluZ0luZGV4KSB7XG4gICAgICAgICAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm5vLWJpdHdpc2VcbiAgICAgICAgICAgICAgICBoYXNoID0gKGhhc2ggKiAzMykgXiBjdXJyZW50U3RyLmNoYXJDb2RlQXQoLS1zdHJpbmdJbmRleCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvKlxuICAgICAgICAgICAgdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm5vLWJpdHdpc2VcbiAgICAgICAgICAgIEphdmFTY3JpcHQgZG9lcyBiaXR3aXNlIG9wZXJhdGlvbnMgKGxpa2UgWE9SLCBhYm92ZSkgb24gMzItYml0IHNpZ25lZFxuICAgICAgICAgICAgaW50ZWdlcnMuIFNpbmNlIHdlIHdhbnQgdGhlIHJlc3VsdHMgdG8gYmUgYWx3YXlzIHBvc2l0aXZlLCBjb252ZXJ0IHRoZVxuICAgICAgICAgICAgc2lnbmVkIGludCB0byBhbiB1bnNpZ25lZCBieSBkb2luZyBhbiB1bnNpZ25lZCBiaXRzaGlmdC5cbiAgICAgICovXG4gICAgICAgIHJldHVybiBoYXNoID4+PiAwO1xuICAgIH1cblxuICAgIHB1YmxpYyBpc0luY2x1ZGVzKG1vZGVsUGF0aDogTW9kZWxQYXRoKTogYm9vbGVhbiB7XG4gICAgICAgIGNvbnN0IHRhcmdldFRva2VucyA9IG1vZGVsUGF0aC5nZXRQYXRoUGFydHNBc0FycmF5KCk7XG4gICAgICAgIGlmICh0aGlzLnRva2Vucy5sZW5ndGggIT09IHRhcmdldFRva2Vucy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMudG9rZW5zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBsZWZ0UGFydCA9IHRoaXMudG9rZW5zW2ldO1xuICAgICAgICAgICAgY29uc3QgcmlnaHRQYXJ0ID0gdGFyZ2V0VG9rZW5zW2ldO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBsZWZ0UGFydCA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgcmlnaHRQYXJ0ID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChsZWZ0UGFydCAhPT0gcmlnaHRQYXJ0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAobGVmdFBhcnQgPT09IFBhdGhUb2tlbnMuY3VycmVudCB8fCBsZWZ0UGFydCA9PT0gUGF0aFRva2Vucy5lYWNoKSB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiByaWdodFBhcnQgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFpc0Zpbml0ZShOdW1iZXIocmlnaHRQYXJ0KSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBpZiAocmlnaHRQYXJ0ICE9PSBQYXRoVG9rZW5zLmN1cnJlbnQgJiYgcmlnaHRQYXJ0ICE9PSBQYXRoVG9rZW5zLmVhY2gpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcHVibGljIGdldEl0ZXJhdGlvblJhbmsoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIGNvdW50KEl0ZXJhdG9yLmZyb20odGhpcy50b2tlbnMpLmZpbHRlcih4ID0+IHggPT09IFBhdGhUb2tlbnMuZWFjaCkpO1xuICAgIH1cblxuICAgIHB1YmxpYyBpc0VtcHR5KCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy50b2tlbnMubGVuZ3RoID09PSAwO1xuICAgIH1cblxuICAgIHB1YmxpYyBtYXRjaEZvcihtb2RlbFBhdGg6IE1vZGVsUGF0aCk6IFBhdGhNYXRjaGluZyB7XG4gICAgICAgIGlmICghdGhpcy5pc0Fic29sdXRlKCkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IG1hdGNoIG5vbiBhYnNvbHV0ZSBwYXRoICcke3RoaXMudG9TdHJpbmcoKX0nYCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFtb2RlbFBhdGguaXNBYnNvbHV0ZSgpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBtYXRjaCBub24gYWJzb2x1dGUgcGF0aCAnJHttb2RlbFBhdGgudG9TdHJpbmcoKX0nYCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFBhdGhNYXRjaGVyLm1hdGNoKHRoaXMudG9rZW5zLCBtb2RlbFBhdGguZ2V0UGF0aFBhcnRzQXNBcnJheSgpKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgKnNwbGl0QnlNdWx0aXBsaWNpdHkoKTogSXRlcmFibGU8UmVzb2x2ZWRNb2RlbFBhdGggfCB0eXBlb2YgRWFjaFN5bWJvbCB8IHR5cGVvZiBDdXJyZW50U3ltYm9sPiB7XG4gICAgICAgIGxldCBsYXN0U2ltcGxlUGFydHMgPSBuZXcgTW9kZWxQYXRoQnVpbGRlcih0aGlzLmlzQWJzb2x1dGUoKSk7XG4gICAgICAgIGZvciAoY29uc3QgdG9rZW4gb2YgdGhpcy50b2tlbnMpIHtcbiAgICAgICAgICAgIGlmIChQYXRoVG9rZW5zLmlzU2ltcGxlVG9rZW4odG9rZW4pKSB7XG4gICAgICAgICAgICAgICAgbGFzdFNpbXBsZVBhcnRzLmFwcGVuZCh0b2tlbik7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmICghbGFzdFNpbXBsZVBhcnRzLmVtcHR5KSB7XG4gICAgICAgICAgICAgICAgICAgIHlpZWxkIGxhc3RTaW1wbGVQYXJ0cy50b1Jlc29sdmVkUGF0aCgpO1xuICAgICAgICAgICAgICAgICAgICBsYXN0U2ltcGxlUGFydHMgPSBuZXcgTW9kZWxQYXRoQnVpbGRlcihmYWxzZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHlpZWxkIHRva2VuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICghbGFzdFNpbXBsZVBhcnRzLmVtcHR5KSB7XG4gICAgICAgICAgICB5aWVsZCBsYXN0U2ltcGxlUGFydHMudG9SZXNvbHZlZFBhdGgoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBub3JtYWxpemUoKTogSU1vZGVsUGF0aDxUUmVzb2x2ZWQsIFRBYnNvbHV0ZT4ge1xuICAgICAgICBjb25zdCByZXN1bHRUb2tlbnM6IFBhdGhUb2tlbnNTcGVjPFRSZXNvbHZlZD4gPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBwYXRoUGFydCBvZiB0aGlzLnRva2Vucykge1xuICAgICAgICAgICAgaWYgKHBhdGhQYXJ0ID09PSBcIi4uXCIpIHtcbiAgICAgICAgICAgICAgICBpZiAoIXJlc3VsdFRva2Vucy5wb3AoKSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5pc0Fic29sdXRlKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgUGF0aCBpcyBpbnZhbGlkICcke3RoaXMudG9TdHJpbmcoKX0nYCk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRUb2tlbnMucHVzaChcIi4uXCIpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAocGF0aFBhcnQgPT09IFwiLlwiKSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXN1bHRUb2tlbnMucHVzaChwYXRoUGFydCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ldyBNb2RlbFBhdGhJbXBsPFRSZXNvbHZlZCwgVEFic29sdXRlPihyZXN1bHRUb2tlbnMsIHRoaXMuYWJzb2x1dGUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBzdW1tYXJ5INCh0L/QtdGG0LjRhNC40LrQsNGC0L7RgNGLINC80L3QvtC20LXRgdGC0LLQtdC90L3QvtGB0YLQuCBFYWNoINC30LDQvNC10L3Rj9C10YIg0L3QsCBDdXJyZW50XG4gICAgICovXG4gICAgcHVibGljIHRvQ3VycmVudEl0ZXJhdGlvbigpOiBJTW9kZWxQYXRoPFRSZXNvbHZlZCwgVEFic29sdXRlPiB7XG4gICAgICAgIGlmICh0aGlzLmlzUmVzb2x2ZWQoKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBOT1RFINCi0YPRgiDQvdC1INC/0L7Qu9GD0YfQsNC10YLRgdGPINC90LDQu9C+0LbQuNGC0Ywg0LTQuNGB0LrRgNC40LzQuNC90LDRgtC+0YBcbiAgICAgICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3JcbiAgICAgICAgICAgIGNvbnN0IHBhdGhQYXJ0czogUGF0aFRva2Vuc1NwZWM8VFJlc29sdmVkPiA9IHRoaXMudG9rZW5zLm1hcCh4ID0+XG4gICAgICAgICAgICAgICAgeCA9PT0gUGF0aFRva2Vucy5lYWNoID8gUGF0aFRva2Vucy5jdXJyZW50IDogeFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHJldHVybiBuZXcgTW9kZWxQYXRoSW1wbDxUUmVzb2x2ZWQsIFRBYnNvbHV0ZT4ocGF0aFBhcnRzLCB0aGlzLmFic29sdXRlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyB0b0VhY2hJdGVyYXRpb24oKTogSU1vZGVsUGF0aDxUUmVzb2x2ZWQsIFRBYnNvbHV0ZT4ge1xuICAgICAgICBpZiAodGhpcy5pc1Jlc29sdmVkKCkpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gTk9URSDQotGD0YIg0L3QtSDQv9C+0LvRg9GH0LDQtdGC0YHRjyDQvdCw0LvQvtC20LjRgtGMINC00LjRgdC60YDQuNC80LjQvdCw0YLQvtGAXG4gICAgICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yXG4gICAgICAgICAgICBjb25zdCBwYXRoUGFydHM6IFBhdGhUb2tlbnNTcGVjPFRSZXNvbHZlZD4gPSB0aGlzLnRva2Vucy5tYXAoeCA9PlxuICAgICAgICAgICAgICAgIHggPT09IFBhdGhUb2tlbnMuY3VycmVudCA/IFBhdGhUb2tlbnMuZWFjaCA6IHhcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICByZXR1cm4gbmV3IE1vZGVsUGF0aEltcGw8VFJlc29sdmVkLCBUQWJzb2x1dGU+KHBhdGhQYXJ0cywgdGhpcy5hYnNvbHV0ZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgdG9BYnNvbHV0ZSgpOiBJTW9kZWxQYXRoPFRSZXNvbHZlZCwgdHJ1ZT4ge1xuICAgICAgICBpZiAoIXRoaXMuYWJzb2x1dGUpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgUGF0aCAnJHt0aGlzLnRvTGVnYWN5UGF0aCgpfSBpcyBub3QgYWJzb2x1dGUnYCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ldyBNb2RlbFBhdGhJbXBsPFRSZXNvbHZlZCwgdHJ1ZT4odGhpcy50b2tlbnMsIHRydWUpO1xuICAgIH1cblxuICAgIHB1YmxpYyAqZ2V0QWxsUGFyZW50UGF0aHMoKTogSXRlcmFibGU8TW9kZWxQYXRoPiB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IG5ldyBNb2RlbFBhdGhCdWlsZGVyKHRoaXMuaXNBYnNvbHV0ZSgpKTtcbiAgICAgICAgZm9yIChjb25zdCB0b2tlbiBvZiBJdGVyVXRpbHMuc2tpcExhc3QodGhpcy5nZXRQYXRoUGFydHMoKSwgMSkpIHtcbiAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQodG9rZW4pO1xuICAgICAgICAgICAgeWllbGQgcmVzdWx0LnRvUGF0aCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIHRyaW1MYXN0U3RhcklmTGFzdFRva2VuKCk6IElNb2RlbFBhdGg8VFJlc29sdmVkLCBUQWJzb2x1dGU+IHtcbiAgICAgICAgY29uc3QgbGFzdEl0ZW0gPSBJdGVyVXRpbHMubGFzdCh0aGlzLnRva2Vucyk7XG4gICAgICAgIGlmIChsYXN0SXRlbSAhPSB1bmRlZmluZWQgJiYgUGF0aFRva2Vucy5pc011bHRpVG9rZW4obGFzdEl0ZW0pKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IE1vZGVsUGF0aEltcGwodGhpcy50b2tlbnMuc2xpY2UoMCwgLTEpLCB0aGlzLmFic29sdXRlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0UGFyZW50UGF0aCgpOiBJTW9kZWxQYXRoPFRSZXNvbHZlZCwgVEFic29sdXRlPiB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IG5ldyBNb2RlbFBhdGhCdWlsZGVyKHRoaXMuYWJzb2x1dGUpO1xuICAgICAgICBmb3IgKGNvbnN0IHRva2VuIG9mIEl0ZXJVdGlscy5za2lwTGFzdCh0aGlzLmdldFBhdGhQYXJ0cygpLCAxKSkge1xuICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCh0b2tlbik7XG4gICAgICAgIH1cbiAgICAgICAgLy8g0KLRg9GCINC/0L7Qu9GD0YfQsNC10YLRgdGPINGC0LDQuiwg0YfRgtC+INC/0L4g0LTRgNGD0LPQvtC80YMg0L3QuNC60LDQulxuICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yXG4gICAgICAgIHJldHVybiByZXN1bHQudG9QYXRoKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGFwcGx5SW5zdGFuY2VzRGlydHkoaW5zdGFuY2VzOiBTaW1wbGVQYXRoVG9rZW5bXSk6IElNb2RlbFBhdGg8VFJlc29sdmVkLCBUQWJzb2x1dGU+IHtcbiAgICAgICAgaWYgKHRoaXMuaXNSZXNvbHZlZCgpIHx8IGluc3RhbmNlcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9XG4gICAgICAgIGxldCBpbnN0YW5jZUNvdW50ZXIgPSAwO1xuICAgICAgICBjb25zdCByZXN1bHQgPSBuZXcgTW9kZWxQYXRoQnVpbGRlcih0cnVlKTtcbiAgICAgICAgZm9yIChjb25zdCB0b2tlbiBvZiB0aGlzLmdldFBhdGhQYXJ0cygpKSB7XG4gICAgICAgICAgICBpZiAoUGF0aFRva2Vucy5pc011bHRpVG9rZW4odG9rZW4pICYmIGluc3RhbmNlQ291bnRlciA8IGluc3RhbmNlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKGluc3RhbmNlc1tpbnN0YW5jZUNvdW50ZXJdID8/IHJlamVjdCgpKTtcbiAgICAgICAgICAgICAgICBpbnN0YW5jZUNvdW50ZXIrKztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCh0b2tlbik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8g0KLRg9GCINC/0L7Qu9GD0YfQsNC10YLRgdGPINGC0LDQuiwg0YfRgtC+INC/0L4g0LTRgNGD0LPQvtC80YMg0L3QuNC60LDQulxuICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yXG4gICAgICAgIHJldHVybiByZXN1bHQudG9QYXRoKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBwYXRoUGFydFRvU3RyaW5nKHBhdGhQYXJ0OiBQYXRoVG9rZW4pOiBzdHJpbmcge1xuICAgICAgICBpZiAodHlwZW9mIHBhdGhQYXJ0ID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICByZXR1cm4gcGF0aFBhcnQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBhdGhQYXJ0ID09PSBQYXRoVG9rZW5zLmVhY2gpIHtcbiAgICAgICAgICAgIHJldHVybiBcIipcIjtcbiAgICAgICAgfVxuICAgICAgICBpZiAocGF0aFBhcnQgPT09IFBhdGhUb2tlbnMuY3VycmVudCkge1xuICAgICAgICAgICAgcmV0dXJuIFwiKlwiO1xuICAgICAgICB9XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5rbm93biBwYXRoIHBhcnQgc3BlY2lmaWVkOiAke2Vuc3VyZUFuZEdldFN0cmluZyhwYXRoUGFydCl9YCk7XG4gICAgfVxufVxuIl19
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.GeneratorSourcesImporter = void 0;
|
|
6
|
+
exports.GeneratorSourcesValidator = exports.GeneratorSourcesImporter = void 0;
|
|
7
7
|
|
|
8
8
|
var path = _interopRequireWildcard(require("path"));
|
|
9
9
|
|
|
@@ -15,6 +15,8 @@ var _EngineStructureUtils = require("../../EngineStructureUtils");
|
|
|
15
15
|
|
|
16
16
|
var _ReadFormSource = require("../../ReadFormSource");
|
|
17
17
|
|
|
18
|
+
var _ToolsApiClient = require("../../../Commons/ApiClient/ToolsApiClient");
|
|
19
|
+
|
|
18
20
|
var _RequireUncached = require("./RequireUncached");
|
|
19
21
|
|
|
20
22
|
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
@@ -98,4 +100,45 @@ class GeneratorSourcesImporter {
|
|
|
98
100
|
}
|
|
99
101
|
|
|
100
102
|
exports.GeneratorSourcesImporter = GeneratorSourcesImporter;
|
|
101
|
-
|
|
103
|
+
|
|
104
|
+
class GeneratorSourcesValidator {
|
|
105
|
+
constructor(generationOptions) {
|
|
106
|
+
this.isLocalDebug = void 0;
|
|
107
|
+
this.apiClient = void 0;
|
|
108
|
+
|
|
109
|
+
this.validate = async formContent => {
|
|
110
|
+
if (!this.isLocalDebug) {
|
|
111
|
+
return;
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
await this.compileNormalizationRulesOrDie(formContent);
|
|
115
|
+
};
|
|
116
|
+
|
|
117
|
+
this.compileNormalizationRulesOrDie = async formContent => {
|
|
118
|
+
var _compileResult$diagno, _compileResult$diagno2;
|
|
119
|
+
|
|
120
|
+
const normalizationRules = formContent["ServerSide.normalize"];
|
|
121
|
+
|
|
122
|
+
if (!normalizationRules || typeof normalizationRules !== "string") {
|
|
123
|
+
return;
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
const compileResult = await this.apiClient.compileNormalizationRules(normalizationRules, "formulas");
|
|
127
|
+
|
|
128
|
+
if (!compileResult || ((_compileResult$diagno = compileResult === null || compileResult === void 0 ? void 0 : (_compileResult$diagno2 = compileResult.diagnosticMessages) === null || _compileResult$diagno2 === void 0 ? void 0 : _compileResult$diagno2.length) !== null && _compileResult$diagno !== void 0 ? _compileResult$diagno : 0) == 0) {
|
|
129
|
+
return;
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
throw Error(`Invalid ServerSide.normalize:\r\n
|
|
133
|
+
${JSON.stringify(compileResult.diagnosticMessages)}\r\n
|
|
134
|
+
${compileResult.sourceText}`);
|
|
135
|
+
};
|
|
136
|
+
|
|
137
|
+
this.isLocalDebug = (generationOptions === null || generationOptions === void 0 ? void 0 : generationOptions.resourcesHash) == "local-hash";
|
|
138
|
+
this.apiClient = new _ToolsApiClient.ToolsApiClient();
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
exports.GeneratorSourcesValidator = GeneratorSourcesValidator;
|
|
144
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9CdWlsZFRhc2tzL0dlbmVyYXRvci9HZW5lcmF0b3JXb3JrZXIvR2VuZXJhdG9yUmVxdWlyZVV0aWxzLnRzIl0sIm5hbWVzIjpbIkdlbmVyYXRvclNvdXJjZXNJbXBvcnRlciIsImNvbnN0cnVjdG9yIiwicHVyZ2VDYWNoZSIsImltcG9ydFJlYWRTb3VyY2VzIiwicGF0aFRvR2VuZXJhdG9yIiwicmVhZFNvdXJjZXNQYXRoIiwicGF0aCIsImpvaW4iLCJyZXF1aXJlVW5jYWNoZWREZWZhdWx0IiwicmVhZEZvcm1Tb3VyY2UiLCJnZW5lcmF0b3JNYWluIiwicmVxdWlyZVVuY2FjaGVkQWxsTmFtZWQiLCJpbXBvcnRHZXRBbGxEZXBlbmRlbmNpZXMiLCJ1bmRlZmluZWQiLCJpbXBvcnRHZXRBbGxEZXBlbmRlbmNpZXNIYXNoIiwiaW1wb3J0UHJvY2Vzc1N1Z2FyIiwicHJvY2Vzc1N1Z2FyUGF0aCIsInJlcXVpcmUiLCJkZWZhdWx0IiwiaW1wb3J0TG9jYWxpemF0aW9uIiwibG9jYWxpemF0aW9uRW50cnlQb2ludFBhdGgiLCJtb2R1bGUiLCJHZW5lcmF0b3JTb3VyY2VzVmFsaWRhdG9yIiwiZ2VuZXJhdGlvbk9wdGlvbnMiLCJpc0xvY2FsRGVidWciLCJhcGlDbGllbnQiLCJ2YWxpZGF0ZSIsImZvcm1Db250ZW50IiwiY29tcGlsZU5vcm1hbGl6YXRpb25SdWxlc09yRGllIiwibm9ybWFsaXphdGlvblJ1bGVzIiwiY29tcGlsZVJlc3VsdCIsImNvbXBpbGVOb3JtYWxpemF0aW9uUnVsZXMiLCJkaWFnbm9zdGljTWVzc2FnZXMiLCJsZW5ndGgiLCJFcnJvciIsIkpTT04iLCJzdHJpbmdpZnkiLCJzb3VyY2VUZXh0IiwicmVzb3VyY2VzSGFzaCIsIlRvb2xzQXBpQ2xpZW50Il0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQ0E7O0FBRUE7O0FBRUE7O0FBQ0E7O0FBRUE7O0FBQ0E7O0FBRUE7Ozs7OztBQVhBO0FBbUJPLE1BQU1B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RUFBakI7QUFDSDs7QUFQa0MiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLXJldHVybiAqL1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tIFwicGF0aFwiO1xuXG5pbXBvcnQgeyBwYXRoRXhpc3RzIH0gZnJvbSBcImZzLWV4dHJhXCI7XG5cbmltcG9ydCB7IGlzRmlsZUV4aXN0cyB9IGZyb20gXCIuLi8uLi8uLi9Db21tb25zL0ZzVXRpbHNcIjtcbmltcG9ydCB7IGlzT2xkR2VuZXJhdG9yU291cmNlc1N0cnVjdHVyZSB9IGZyb20gXCIuLi8uLi9FbmdpbmVTdHJ1Y3R1cmVVdGlsc1wiO1xuaW1wb3J0IHsgRm9ybUdlbmVyYXRvciwgR2VuZXJhdGVkRm9ybSwgR2VuZXJhdGlvbk9wdGlvbnMsIExvY2FsaXphdGlvbkVudHJ5UG9pbnQgfSBmcm9tIFwiLi4vLi4vRm9ybS9HZW5lcmF0ZUZvcm1cIjtcbmltcG9ydCB7IEZvcm1SZXNvdXJjZXMsIHJlYWRGb3JtU291cmNlLCBTdWdhckNvbnRlbnQgfSBmcm9tIFwiLi4vLi4vUmVhZEZvcm1Tb3VyY2VcIjtcbmltcG9ydCB7IFRvb2xzQXBpQ2xpZW50IH0gZnJvbSBcIi4uLy4uLy4uL0NvbW1vbnMvQXBpQ2xpZW50L1Rvb2xzQXBpQ2xpZW50XCI7XG5cbmltcG9ydCB7IFJlcXVpcmVEZWZhdWx0UmVzdWx0LCByZXF1aXJlVW5jYWNoZWRBbGxOYW1lZCwgcmVxdWlyZVVuY2FjaGVkRGVmYXVsdCB9IGZyb20gXCIuL1JlcXVpcmVVbmNhY2hlZFwiO1xuXG50eXBlIFByb2Nlc3NTdWdhckZ1bmMgPSAoXG4gICAgc3VnYXJGaWxlczogU3VnYXJDb250ZW50LFxuICAgIHJlc291cmNlczogRm9ybVJlc291cmNlcyxcbiAgICBnZW5lcmF0aW9uT3B0aW9ucz86IEdlbmVyYXRpb25PcHRpb25zXG4pID0+IEdlbmVyYXRlZEZvcm0gfCBQcm9taXNlPEdlbmVyYXRlZEZvcm0+O1xuXG5leHBvcnQgY2xhc3MgR2VuZXJhdG9yU291cmNlc0ltcG9ydGVyIHtcbiAgICBwcml2YXRlIHJlYWRvbmx5IHB1cmdlQ2FjaGU6IGJvb2xlYW47XG5cbiAgICBwdWJsaWMgY29uc3RydWN0b3IocHVyZ2VDYWNoZTogYm9vbGVhbikge1xuICAgICAgICB0aGlzLnB1cmdlQ2FjaGUgPSBwdXJnZUNhY2hlO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBpbXBvcnRSZWFkU291cmNlcyhwYXRoVG9HZW5lcmF0b3I6IHN0cmluZyk6IFByb21pc2U8Rm9ybUdlbmVyYXRvcltcInJlYWRTb3VyY2VzXCJdPiB7XG4gICAgICAgIGlmIChhd2FpdCBpc09sZEdlbmVyYXRvclNvdXJjZXNTdHJ1Y3R1cmUocGF0aFRvR2VuZXJhdG9yKSkge1xuICAgICAgICAgICAgY29uc3QgcmVhZFNvdXJjZXNQYXRoID0gcGF0aC5qb2luKHBhdGhUb0dlbmVyYXRvciwgXCJkaXN0XCIsIFwiZ2VuZXJhdG9yc1wiLCBcInJlYWRTb3VyY2VzLmpzXCIpO1xuXG4gICAgICAgICAgICBpZiAoYXdhaXQgaXNGaWxlRXhpc3RzKHJlYWRTb3VyY2VzUGF0aCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5yZXF1aXJlVW5jYWNoZWREZWZhdWx0KHJlYWRTb3VyY2VzUGF0aCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiByZWFkRm9ybVNvdXJjZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IGdlbmVyYXRvck1haW4gPSB0aGlzLnJlcXVpcmVVbmNhY2hlZEFsbE5hbWVkKHBhdGhUb0dlbmVyYXRvcik7XG4gICAgICAgICAgICByZXR1cm4gZ2VuZXJhdG9yTWFpbltcInJlYWRTb3VyY2VzXCJdO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGltcG9ydEdldEFsbERlcGVuZGVuY2llcyhcbiAgICAgICAgcGF0aFRvR2VuZXJhdG9yOiBzdHJpbmdcbiAgICApOiBQcm9taXNlPEZvcm1HZW5lcmF0b3JbXCJnZXRBbGxEZXBlbmRlbmNpZXNcIl0gfCB1bmRlZmluZWQ+IHtcbiAgICAgICAgaWYgKGF3YWl0IGlzT2xkR2VuZXJhdG9yU291cmNlc1N0cnVjdHVyZShwYXRoVG9HZW5lcmF0b3IpKSB7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGdlbmVyYXRvck1haW4gPSB0aGlzLnJlcXVpcmVVbmNhY2hlZEFsbE5hbWVkKHBhdGhUb0dlbmVyYXRvcik7XG4gICAgICAgIHJldHVybiBnZW5lcmF0b3JNYWluW1wiZ2V0QWxsRGVwZW5kZW5jaWVzXCJdO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBpbXBvcnRHZXRBbGxEZXBlbmRlbmNpZXNIYXNoKFxuICAgICAgICBwYXRoVG9HZW5lcmF0b3I6IHN0cmluZ1xuICAgICk6IFByb21pc2U8Rm9ybUdlbmVyYXRvcltcImdldEFsbERlcGVuZGVuY2llc0hhc2hcIl0gfCB1bmRlZmluZWQ+IHtcbiAgICAgICAgaWYgKGF3YWl0IGlzT2xkR2VuZXJhdG9yU291cmNlc1N0cnVjdHVyZShwYXRoVG9HZW5lcmF0b3IpKSB7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGdlbmVyYXRvck1haW4gPSB0aGlzLnJlcXVpcmVVbmNhY2hlZEFsbE5hbWVkKHBhdGhUb0dlbmVyYXRvcik7XG4gICAgICAgIHJldHVybiBnZW5lcmF0b3JNYWluW1wiZ2V0QWxsRGVwZW5kZW5jaWVzSGFzaFwiXTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgaW1wb3J0UHJvY2Vzc1N1Z2FyKHBhdGhUb0dlbmVyYXRvcjogc3RyaW5nKTogUHJvbWlzZTxQcm9jZXNzU3VnYXJGdW5jPiB7XG4gICAgICAgIGlmIChhd2FpdCBpc09sZEdlbmVyYXRvclNvdXJjZXNTdHJ1Y3R1cmUocGF0aFRvR2VuZXJhdG9yKSkge1xuICAgICAgICAgICAgY29uc3QgcHJvY2Vzc1N1Z2FyUGF0aCA9IHBhdGguam9pbihwYXRoVG9HZW5lcmF0b3IsIFwiZGlzdFwiLCBcImdlbmVyYXRvcnNcIiwgXCJwcm9jZXNzU3VnYXIuanNcIik7XG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXZhci1yZXF1aXJlc1xuICAgICAgICAgICAgcmV0dXJuIHJlcXVpcmUocHJvY2Vzc1N1Z2FyUGF0aCkuZGVmYXVsdDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IGdlbmVyYXRvck1haW4gPSB0aGlzLnJlcXVpcmVVbmNhY2hlZEFsbE5hbWVkKHBhdGhUb0dlbmVyYXRvcik7XG4gICAgICAgICAgICByZXR1cm4gZ2VuZXJhdG9yTWFpbltcInByb2Nlc3NTdWdhclwiXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBpbXBvcnRMb2NhbGl6YXRpb24ocGF0aFRvR2VuZXJhdG9yOiBzdHJpbmcpOiBQcm9taXNlPHVuZGVmaW5lZCB8IExvY2FsaXphdGlvbkVudHJ5UG9pbnQ+IHtcbiAgICAgICAgaWYgKGF3YWl0IGlzT2xkR2VuZXJhdG9yU291cmNlc1N0cnVjdHVyZShwYXRoVG9HZW5lcmF0b3IpKSB7XG4gICAgICAgICAgICBjb25zdCBsb2NhbGl6YXRpb25FbnRyeVBvaW50UGF0aCA9IHBhdGguam9pbihwYXRoVG9HZW5lcmF0b3IsIFwiZGlzdFwiLCBcImdlbmVyYXRvcnNcIiwgXCJsb2NhbGl6YXRpb24uanNcIik7XG4gICAgICAgICAgICBpZiAoIShhd2FpdCBwYXRoRXhpc3RzKGxvY2FsaXphdGlvbkVudHJ5UG9pbnRQYXRoKSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHJlcXVpcmUobG9jYWxpemF0aW9uRW50cnlQb2ludFBhdGgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgZ2VuZXJhdG9yTWFpbiA9IHRoaXMucmVxdWlyZVVuY2FjaGVkQWxsTmFtZWQocGF0aFRvR2VuZXJhdG9yKTtcbiAgICAgICAgICAgIHJldHVybiBnZW5lcmF0b3JNYWluW1wibG9jYWxpemF0aW9uXCJdO1xuICAgICAgICB9XG4gICAgfVxuICAgIHByaXZhdGUgcmVxdWlyZVVuY2FjaGVkRGVmYXVsdChtb2R1bGU6IHN0cmluZyk6IFJlcXVpcmVEZWZhdWx0UmVzdWx0IHtcbiAgICAgICAgcmV0dXJuIHJlcXVpcmVVbmNhY2hlZERlZmF1bHQobW9kdWxlLCB0aGlzLnB1cmdlQ2FjaGUpO1xuICAgIH1cblxuICAgIHByaXZhdGUgcmVxdWlyZVVuY2FjaGVkQWxsTmFtZWQobW9kdWxlOiBzdHJpbmcpOiBSZXF1aXJlRGVmYXVsdFJlc3VsdCB7XG4gICAgICAgIHJldHVybiByZXF1aXJlVW5jYWNoZWRBbGxOYW1lZChtb2R1bGUsIHRoaXMucHVyZ2VDYWNoZSk7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgR2VuZXJhdG9yU291cmNlc1ZhbGlkYXRvciB7XG4gICAgcHJpdmF0ZSByZWFkb25seSBpc0xvY2FsRGVidWc6IGJvb2xlYW47XG4gICAgcHJpdmF0ZSByZWFkb25seSBhcGlDbGllbnQ6IFRvb2xzQXBpQ2xpZW50O1xuXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKGdlbmVyYXRpb25PcHRpb25zOiBHZW5lcmF0aW9uT3B0aW9ucyB8IHVuZGVmaW5lZCkge1xuICAgICAgICB0aGlzLmlzTG9jYWxEZWJ1ZyA9IGdlbmVyYXRpb25PcHRpb25zPy5yZXNvdXJjZXNIYXNoID09IFwibG9jYWwtaGFzaFwiO1xuICAgICAgICB0aGlzLmFwaUNsaWVudCA9IG5ldyBUb29sc0FwaUNsaWVudCgpO1xuICAgIH1cblxuICAgIHB1YmxpYyB2YWxpZGF0ZSA9IGFzeW5jIChmb3JtQ29udGVudDogR2VuZXJhdGVkRm9ybSk6IFByb21pc2U8dm9pZD4gPT4ge1xuICAgICAgICBpZiAoIXRoaXMuaXNMb2NhbERlYnVnKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgYXdhaXQgdGhpcy5jb21waWxlTm9ybWFsaXphdGlvblJ1bGVzT3JEaWUoZm9ybUNvbnRlbnQpO1xuICAgIH07XG5cbiAgICBwcml2YXRlIHJlYWRvbmx5IGNvbXBpbGVOb3JtYWxpemF0aW9uUnVsZXNPckRpZSA9IGFzeW5jIChmb3JtQ29udGVudDogR2VuZXJhdGVkRm9ybSk6IFByb21pc2U8dm9pZD4gPT4ge1xuICAgICAgICBjb25zdCBub3JtYWxpemF0aW9uUnVsZXMgPSBmb3JtQ29udGVudFtcIlNlcnZlclNpZGUubm9ybWFsaXplXCJdO1xuICAgICAgICBpZiAoIW5vcm1hbGl6YXRpb25SdWxlcyB8fCB0eXBlb2Ygbm9ybWFsaXphdGlvblJ1bGVzICE9PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY29tcGlsZVJlc3VsdCA9IGF3YWl0IHRoaXMuYXBpQ2xpZW50LmNvbXBpbGVOb3JtYWxpemF0aW9uUnVsZXMobm9ybWFsaXphdGlvblJ1bGVzLCBcImZvcm11bGFzXCIpO1xuICAgICAgICBpZiAoIWNvbXBpbGVSZXN1bHQgfHwgKGNvbXBpbGVSZXN1bHQ/LmRpYWdub3N0aWNNZXNzYWdlcz8ubGVuZ3RoID8/IDApID09IDApIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRocm93IEVycm9yKFxuICAgICAgICAgICAgYEludmFsaWQgU2VydmVyU2lkZS5ub3JtYWxpemU6XFxyXFxuXG4gICAgICAgICAgICAgJHtKU09OLnN0cmluZ2lmeShjb21waWxlUmVzdWx0LmRpYWdub3N0aWNNZXNzYWdlcyl9XFxyXFxuXG4gICAgICAgICAgICAgJHtjb21waWxlUmVzdWx0LnNvdXJjZVRleHR9YFxuICAgICAgICApO1xuICAgIH07XG59XG4iXX0=
|
package/distr/Tools/src/BuildTasks/Generator/GeneratorWorker/ReadSourcesAndProcessSugarWorker.js
CHANGED
|
@@ -15,6 +15,8 @@ _TypedProcessWorker.TypedProcessWorker.start(async ([pathToGeneratorProcessSugar
|
|
|
15
15
|
formSource = await readSources(formSourcesPath, farmDirectory, hlFarmDirectoryPath);
|
|
16
16
|
const processSugar = await importer.importProcessSugar(pathToGeneratorProcessSugar);
|
|
17
17
|
const formContent = await processSugar(formSource.sugarContent, formSource.resources, generationOptions);
|
|
18
|
+
const validator = new _GeneratorRequireUtils.GeneratorSourcesValidator(generationOptions);
|
|
19
|
+
await validator.validate(formContent);
|
|
18
20
|
const result = {}; // NOTE Because only JSON are allowed for IPC we need to convert Buffer -> Base64
|
|
19
21
|
// Another solution is use a stream, but formContent still need to convert or send by chunks
|
|
20
22
|
|
|
@@ -53,4 +55,4 @@ _TypedProcessWorker.TypedProcessWorker.start(async ([pathToGeneratorProcessSugar
|
|
|
53
55
|
}
|
|
54
56
|
}
|
|
55
57
|
});
|
|
56
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
58
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9CdWlsZFRhc2tzL0dlbmVyYXRvci9HZW5lcmF0b3JXb3JrZXIvUmVhZFNvdXJjZXNBbmRQcm9jZXNzU3VnYXJXb3JrZXIudHMiXSwibmFtZXMiOlsiVHlwZWRQcm9jZXNzV29ya2VyIiwic3RhcnQiLCJwYXRoVG9HZW5lcmF0b3JQcm9jZXNzU3VnYXIiLCJmb3JtU291cmNlc1BhdGgiLCJmYXJtRGlyZWN0b3J5IiwiaGxGYXJtRGlyZWN0b3J5UGF0aCIsImdlbmVyYXRpb25PcHRpb25zIiwicHVyZ2VDYWNoZSIsInJlcXVlc3ROdW1iZXIiLCJzZW5kIiwiZm9ybVNvdXJjZSIsImltcG9ydGVyIiwiR2VuZXJhdG9yU291cmNlc0ltcG9ydGVyIiwicmVhZFNvdXJjZXMiLCJpbXBvcnRSZWFkU291cmNlcyIsInByb2Nlc3NTdWdhciIsImltcG9ydFByb2Nlc3NTdWdhciIsImZvcm1Db250ZW50Iiwic3VnYXJDb250ZW50IiwicmVzb3VyY2VzIiwidmFsaWRhdG9yIiwiR2VuZXJhdG9yU291cmNlc1ZhbGlkYXRvciIsInZhbGlkYXRlIiwicmVzdWx0Iiwia2V5IiwiZm9ybUNvbnRlbnRJdGVtIiwiQnVmZmVyIiwicGF5bG9hZCIsInRvU3RyaW5nIiwiZW5jb2RpbmciLCJ0eXBlIiwiZ2Z2IiwiZ2VuZXJhdGVkRm9ybSIsImVycm9yIiwiRXJyb3IiLCJlcnJvclRleHQiLCJzdGFjayJdLCJtYXBwaW5ncyI6Ijs7QUFFQTs7QUFFQTs7QUFDQTs7QUFXQUEsdUNBQW1CQyxLQUFuQixDQUNJLE9BQ0ksQ0FDSUMsMkJBREosRUFFSUMsZUFGSixFQUdJQyxhQUhKLEVBSUlDLG1CQUpKLEVBS0lDLGlCQUxKLEVBTUlDLFVBTkosRUFPSUMsYUFQSixDQURKLEVBVUlDLElBVkosS0FXb0I7QUFDaEIsTUFBSUMsVUFBSjs7QUFDQSxNQUFJO0FBQ0EsVUFBTUMsUUFBUSxHQUFHLElBQUlDLCtDQUFKLENBQTZCTCxVQUE3QixDQUFqQjtBQUNBLFVBQU1NLFdBQVcsR0FBRyxNQUFNRixRQUFRLENBQUNHLGlCQUFULENBQTJCWiwyQkFBM0IsQ0FBMUI7QUFDQVEsSUFBQUEsVUFBVSxHQUFHLE1BQU1HLFdBQVcsQ0FBQ1YsZUFBRCxFQUFrQkMsYUFBbEIsRUFBaUNDLG1CQUFqQyxDQUE5QjtBQUVBLFVBQU1VLFlBQVksR0FBRyxNQUFNSixRQUFRLENBQUNLLGtCQUFULENBQTRCZCwyQkFBNUIsQ0FBM0I7QUFFQSxVQUFNZSxXQUEwQixHQUFHLE1BQU1GLFlBQVksQ0FDakRMLFVBQVUsQ0FBQ1EsWUFEc0MsRUFFakRSLFVBQVUsQ0FBQ1MsU0FGc0MsRUFHakRiLGlCQUhpRCxDQUFyRDtBQU1BLFVBQU1jLFNBQVMsR0FBRyxJQUFJQyxnREFBSixDQUE4QmYsaUJBQTlCLENBQWxCO0FBQ0EsVUFBTWMsU0FBUyxDQUFDRSxRQUFWLENBQW1CTCxXQUFuQixDQUFOO0FBRUEsVUFBTU0sTUFBd0MsR0FBRyxFQUFqRCxDQWhCQSxDQWtCQTtBQUNBOztBQUNBLFNBQUssTUFBTSxDQUFDQyxHQUFELEVBQU1DLGVBQU4sQ0FBWCxJQUFxQyxtQ0FBZVIsV0FBZixDQUFyQyxFQUFrRTtBQUM5RE0sTUFBQUEsTUFBTSxDQUFDQyxHQUFELENBQU4sR0FDSUMsZUFBZSxZQUFZQyxNQUEzQixHQUNNO0FBQUVDLFFBQUFBLE9BQU8sRUFBRUYsZUFBZSxDQUFDRyxRQUFoQixDQUF5QixRQUF6QixDQUFYO0FBQStDQyxRQUFBQSxRQUFRLEVBQUU7QUFBekQsT0FETixHQUVNSixlQUhWO0FBSUg7O0FBRURoQixJQUFBQSxJQUFJLENBQUM7QUFDRHFCLE1BQUFBLElBQUksRUFBRSxRQURMO0FBRURDLE1BQUFBLEdBQUcsRUFBRXJCLFVBQVUsQ0FBQ1MsU0FBWCxDQUFxQlksR0FGekI7QUFHREMsTUFBQUEsYUFBYSxFQUFFVCxNQUhkO0FBSURmLE1BQUFBLGFBQWEsRUFBRUE7QUFKZCxLQUFELENBQUo7QUFNSCxHQWpDRCxDQWlDRSxPQUFPeUIsS0FBUCxFQUFjO0FBQ1osUUFBSUEsS0FBSyxZQUFZQyxLQUFyQixFQUE0QjtBQUFBOztBQUN4QnpCLE1BQUFBLElBQUksQ0FBQztBQUNEcUIsUUFBQUEsSUFBSSxFQUFFLE9BREw7QUFFREMsUUFBQUEsR0FBRyxpQkFBRXJCLFVBQUYsZ0RBQUUsWUFBWVMsU0FBWixDQUFzQlksR0FGMUI7QUFHREksUUFBQUEsU0FBUyxFQUFHLEdBQUVGLEtBQUssQ0FBQ0wsUUFBTixFQUFpQixLQUFJSyxLQUFLLENBQUNHLEtBQU0sRUFIOUM7QUFJRDVCLFFBQUFBLGFBQWEsRUFBRUE7QUFKZCxPQUFELENBQUo7QUFNSCxLQVBELE1BT087QUFBQTs7QUFDSEMsTUFBQUEsSUFBSSxDQUFDO0FBQ0RxQixRQUFBQSxJQUFJLEVBQUUsT0FETDtBQUVEQyxRQUFBQSxHQUFHLGtCQUFFckIsVUFBRixpREFBRSxhQUFZUyxTQUFaLENBQXNCWSxHQUYxQjtBQUdESSxRQUFBQSxTQUFTLEVBQUcsR0FBRUYsS0FBTSxFQUhuQjtBQUlEekIsUUFBQUEsYUFBYSxFQUFFQTtBQUpkLE9BQUQsQ0FBSjtBQU1IO0FBQ0o7QUFDSixDQWhFTCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEdlbmVyYXRlZEZvcm0sIEdlbmVyYXRpb25PcHRpb25zIH0gZnJvbSBcIi4uLy4uL0Zvcm0vR2VuZXJhdGVGb3JtXCI7XG5pbXBvcnQgeyBGb3JtU291cmNlIH0gZnJvbSBcIi4uLy4uL1JlYWRGb3JtU291cmNlXCI7XG5pbXBvcnQgeyBpdGVyYXRlRW50cmllcyB9IGZyb20gXCIuLi8uLi8uLi8uLi8uLi9Db21tb24vSXRlcmFibGVVdGlsc1wiO1xuXG5pbXBvcnQgeyBHZW5lcmF0b3JTb3VyY2VzSW1wb3J0ZXIsIEdlbmVyYXRvclNvdXJjZXNWYWxpZGF0b3IgfSBmcm9tIFwiLi9HZW5lcmF0b3JSZXF1aXJlVXRpbHNcIjtcbmltcG9ydCB7IFR5cGVkUHJvY2Vzc1dvcmtlciB9IGZyb20gXCIuL1R5cGVkUHJvY2Vzc1dvcmtlclwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIEdlbmVyYXRlZEZvcm1JbnRlclByb2Nlc3NNZXNzYWdlIHtcbiAgICBbcmVsYXRpdmVGaWxlTmFtZTogc3RyaW5nXTogc3RyaW5nIHwgeyBwYXlsb2FkOiBzdHJpbmc7IGVuY29kaW5nOiBzdHJpbmcgfTtcbn1cblxuZXhwb3J0IHR5cGUgQ2FsbE1lc3NhZ2UgPSBbc3RyaW5nLCBzdHJpbmcsIHN0cmluZywgc3RyaW5nLCB1bmRlZmluZWQgfCBHZW5lcmF0aW9uT3B0aW9ucywgYm9vbGVhbiwgbnVtYmVyXTtcbmV4cG9ydCB0eXBlIENhbGxSZXNwb25zZSA9XG4gICAgfCB7IHR5cGU6IFwiUmVzdWx0XCI7IGdmdjogc3RyaW5nOyBnZW5lcmF0ZWRGb3JtOiBHZW5lcmF0ZWRGb3JtSW50ZXJQcm9jZXNzTWVzc2FnZTsgcmVxdWVzdE51bWJlcjogbnVtYmVyIH1cbiAgICB8IHsgdHlwZTogXCJFcnJvclwiOyBnZnY/OiBzdHJpbmc7IGVycm9yVGV4dDogc3RyaW5nOyByZXF1ZXN0TnVtYmVyOiBudW1iZXIgfTtcblxuVHlwZWRQcm9jZXNzV29ya2VyLnN0YXJ0PENhbGxNZXNzYWdlLCBDYWxsUmVzcG9uc2U+KFxuICAgIGFzeW5jIChcbiAgICAgICAgW1xuICAgICAgICAgICAgcGF0aFRvR2VuZXJhdG9yUHJvY2Vzc1N1Z2FyLFxuICAgICAgICAgICAgZm9ybVNvdXJjZXNQYXRoLFxuICAgICAgICAgICAgZmFybURpcmVjdG9yeSxcbiAgICAgICAgICAgIGhsRmFybURpcmVjdG9yeVBhdGgsXG4gICAgICAgICAgICBnZW5lcmF0aW9uT3B0aW9ucyxcbiAgICAgICAgICAgIHB1cmdlQ2FjaGUsXG4gICAgICAgICAgICByZXF1ZXN0TnVtYmVyLFxuICAgICAgICBdLFxuICAgICAgICBzZW5kXG4gICAgKTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gICAgICAgIGxldCBmb3JtU291cmNlOiBGb3JtU291cmNlIHwgdW5kZWZpbmVkO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgaW1wb3J0ZXIgPSBuZXcgR2VuZXJhdG9yU291cmNlc0ltcG9ydGVyKHB1cmdlQ2FjaGUpO1xuICAgICAgICAgICAgY29uc3QgcmVhZFNvdXJjZXMgPSBhd2FpdCBpbXBvcnRlci5pbXBvcnRSZWFkU291cmNlcyhwYXRoVG9HZW5lcmF0b3JQcm9jZXNzU3VnYXIpO1xuICAgICAgICAgICAgZm9ybVNvdXJjZSA9IGF3YWl0IHJlYWRTb3VyY2VzKGZvcm1Tb3VyY2VzUGF0aCwgZmFybURpcmVjdG9yeSwgaGxGYXJtRGlyZWN0b3J5UGF0aCk7XG5cbiAgICAgICAgICAgIGNvbnN0IHByb2Nlc3NTdWdhciA9IGF3YWl0IGltcG9ydGVyLmltcG9ydFByb2Nlc3NTdWdhcihwYXRoVG9HZW5lcmF0b3JQcm9jZXNzU3VnYXIpO1xuXG4gICAgICAgICAgICBjb25zdCBmb3JtQ29udGVudDogR2VuZXJhdGVkRm9ybSA9IGF3YWl0IHByb2Nlc3NTdWdhcihcbiAgICAgICAgICAgICAgICBmb3JtU291cmNlLnN1Z2FyQ29udGVudCxcbiAgICAgICAgICAgICAgICBmb3JtU291cmNlLnJlc291cmNlcyxcbiAgICAgICAgICAgICAgICBnZW5lcmF0aW9uT3B0aW9uc1xuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgY29uc3QgdmFsaWRhdG9yID0gbmV3IEdlbmVyYXRvclNvdXJjZXNWYWxpZGF0b3IoZ2VuZXJhdGlvbk9wdGlvbnMpO1xuICAgICAgICAgICAgYXdhaXQgdmFsaWRhdG9yLnZhbGlkYXRlKGZvcm1Db250ZW50KTtcblxuICAgICAgICAgICAgY29uc3QgcmVzdWx0OiBHZW5lcmF0ZWRGb3JtSW50ZXJQcm9jZXNzTWVzc2FnZSA9IHt9O1xuXG4gICAgICAgICAgICAvLyBOT1RFIEJlY2F1c2Ugb25seSBKU09OIGFyZSBhbGxvd2VkIGZvciBJUEMgd2UgbmVlZCB0byBjb252ZXJ0IEJ1ZmZlciAtPiBCYXNlNjRcbiAgICAgICAgICAgIC8vIEFub3RoZXIgc29sdXRpb24gaXMgdXNlIGEgc3RyZWFtLCBidXQgZm9ybUNvbnRlbnQgc3RpbGwgbmVlZCB0byBjb252ZXJ0IG9yIHNlbmQgYnkgY2h1bmtzXG4gICAgICAgICAgICBmb3IgKGNvbnN0IFtrZXksIGZvcm1Db250ZW50SXRlbV0gb2YgaXRlcmF0ZUVudHJpZXMoZm9ybUNvbnRlbnQpKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0W2tleV0gPVxuICAgICAgICAgICAgICAgICAgICBmb3JtQ29udGVudEl0ZW0gaW5zdGFuY2VvZiBCdWZmZXJcbiAgICAgICAgICAgICAgICAgICAgICAgID8geyBwYXlsb2FkOiBmb3JtQ29udGVudEl0ZW0udG9TdHJpbmcoXCJiYXNlNjRcIiksIGVuY29kaW5nOiBcImJhc2U2NFwiIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIDogZm9ybUNvbnRlbnRJdGVtO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBzZW5kKHtcbiAgICAgICAgICAgICAgICB0eXBlOiBcIlJlc3VsdFwiLFxuICAgICAgICAgICAgICAgIGdmdjogZm9ybVNvdXJjZS5yZXNvdXJjZXMuZ2Z2LFxuICAgICAgICAgICAgICAgIGdlbmVyYXRlZEZvcm06IHJlc3VsdCxcbiAgICAgICAgICAgICAgICByZXF1ZXN0TnVtYmVyOiByZXF1ZXN0TnVtYmVyLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICAgICAgICAgIHNlbmQoe1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiBcIkVycm9yXCIsXG4gICAgICAgICAgICAgICAgICAgIGdmdjogZm9ybVNvdXJjZT8ucmVzb3VyY2VzLmdmdixcbiAgICAgICAgICAgICAgICAgICAgZXJyb3JUZXh0OiBgJHtlcnJvci50b1N0cmluZygpfVxcbiR7ZXJyb3Iuc3RhY2t9YCxcbiAgICAgICAgICAgICAgICAgICAgcmVxdWVzdE51bWJlcjogcmVxdWVzdE51bWJlcixcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgc2VuZCh7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IFwiRXJyb3JcIixcbiAgICAgICAgICAgICAgICAgICAgZ2Z2OiBmb3JtU291cmNlPy5yZXNvdXJjZXMuZ2Z2LFxuICAgICAgICAgICAgICAgICAgICBlcnJvclRleHQ6IGAke2Vycm9yfWAsXG4gICAgICAgICAgICAgICAgICAgIHJlcXVlc3ROdW1iZXI6IHJlcXVlc3ROdW1iZXIsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4pO1xuIl19
|