@sapui5/sap.fe.test 1.102.0 → 1.102.1

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sapui5/sap.fe.test",
3
- "version": "1.102.0",
3
+ "version": "1.102.1",
4
4
  "description": "SAPUI5 Library sap.fe.test",
5
5
  "license": "SEE LICENSE IN LICENSE.txt",
6
6
  "author": "SAP SE (https://www.sap.com)",
@@ -6,7 +6,7 @@
6
6
  <copyright>SAP UI development toolkit for HTML5 (SAPUI5)
7
7
  (c) Copyright 2009-2021 SAP SE. All rights reserved
8
8
  </copyright>
9
- <version>1.102.0</version>
9
+ <version>1.102.1</version>
10
10
 
11
11
  <documentation>UI5 library: sap.fe.test</documentation>
12
12
 
@@ -2,14 +2,12 @@
2
2
  * SAP UI development toolkit for HTML5 (SAPUI5)
3
3
  * (c) Copyright 2009-2021 SAP SE. All rights reserved
4
4
  */
5
- sap.ui.define(["@sap/cds-compiler", "fs", "path", "prettier", "sap/base/Log", "sap/base/util/merge", "sap/fe/core/buildingBlocks/BuildingBlockRuntime", "sap/fe/core/converters/ConverterContext", "sap/fe/core/services/SideEffectsServiceFactory", "sap/fe/core/TemplateModel", "sap/ui/base/BindingParser", "sap/ui/core/InvisibleText", "sap/ui/core/util/XMLPreprocessor", "sap/ui/model/json/JSONModel", "sap/ui/model/odata/v4/lib/_MetadataRequestor", "sap/ui/model/odata/v4/ODataMetaModel", "xpath"], function (cds_compiler, fs, path, prettier, Log, merge, BuildingBlockRuntime, ConverterContext, SideEffectsFactory, TemplateModel, BindingParser, InvisibleText, XMLPreprocessor, JSONModel, _MetadataRequestor, ODataMetaModel, xpath) {
5
+ sap.ui.define(["@sap/cds-compiler", "fs", "path", "prettier", "sap/base/Log", "sap/base/util/merge", "sap/fe/core/buildingBlocks/BuildingBlockRuntime", "sap/fe/core/converters/ConverterContext", "sap/fe/core/services/SideEffectsServiceFactory", "sap/fe/core/TemplateModel", "sap/ui/base/BindingParser", "sap/ui/core/InvisibleText", "sap/ui/core/util/XMLPreprocessor", "sap/ui/model/json/JSONModel", "sap/ui/model/odata/v4/lib/_MetadataRequestor", "sap/ui/model/odata/v4/ODataMetaModel", "xpath"], function (compiler, fs, path, prettier, Log, merge, BuildingBlockRuntime, ConverterContext, SideEffectsFactory, TemplateModel, BindingParser, InvisibleText, XMLPreprocessor, JSONModel, _MetadataRequestor, ODataMetaModel, xpath) {
6
6
  "use strict";
7
7
 
8
8
  var _exports = {};
9
9
  var registerBuildingBlock = BuildingBlockRuntime.registerBuildingBlock;
10
10
  var format = prettier.format;
11
- var to = cds_compiler.to;
12
- var compileSources = cds_compiler.compileSources;
13
11
 
14
12
  function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function () {}; return { s: F, n: function () { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function (e) { throw e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function () { it = it.call(o); }, n: function () { var step = it.next(); normalCompletion = step.done; return step; }, e: function (e) { didErr = true; err = e; }, f: function () { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }
15
13
 
@@ -25,6 +23,12 @@ sap.ui.define(["@sap/cds-compiler", "fs", "path", "prettier", "sap/base/Log", "s
25
23
 
26
24
  function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
27
25
 
26
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
27
+
28
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
29
+
30
+ function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
31
+
28
32
  /**
29
33
  * Process the requested XML fragment with the provided data.
30
34
  *
@@ -195,32 +199,34 @@ sap.ui.define(["@sap/cds-compiler", "fs", "path", "prettier", "sap/base/Log", "s
195
199
  /**
196
200
  * Compile a CDS file into an EDMX file.
197
201
  *
198
- * @param {string} sCDSUrl The path to the file containing the CDS definition. This file MUST declare the namespace
199
- * sap.fe.test and a service JestService
200
- * @returns {string} The path of the generated EDMX
202
+ * @param cdsUrl The path to the file containing the CDS definition. This file must declare the namespace sap.fe.test and a service JestService
203
+ * @param options Options for creating the EDMX output
204
+ * @param edmxFileName Allows you to override the name of the compiled EDMX metadata file
205
+ * @returns The path of the generated EDMX
201
206
  */
202
207
 
203
208
 
204
209
  _exports.formatXML = formatXML;
205
210
 
206
- var compileCDS = function (sCDSUrl) {
207
- var cdsString = fs.readFileSync(sCDSUrl, "utf-8");
208
- var edmxContent = cds2edmx(cdsString, "sap.fe.test.JestService");
209
- var dir = path.resolve(sCDSUrl, "..", "gen");
210
- var edmxUrl = path.resolve(dir, path.basename(sCDSUrl).replace(".cds", ".xml"));
211
-
212
- if (!fs.existsSync(dir)) {
213
- fs.mkdirSync(dir);
214
- }
215
-
216
- fs.writeFileSync(edmxUrl, edmxContent);
217
- return edmxUrl;
211
+ var compileCDS = function (cdsUrl) {
212
+ var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
213
+ var edmxFileName = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : path.basename(cdsUrl).replace(".cds", ".xml");
214
+ var cdsString = fs.readFileSync(cdsUrl, "utf-8");
215
+ var edmxContent = cds2edmx(cdsString, "sap.fe.test.JestService", options);
216
+ var dir = path.resolve(cdsUrl, "..", "gen");
217
+ var edmxFilePath = path.resolve(dir, edmxFileName);
218
+ fs.mkdirSync(dir, {
219
+ recursive: true
220
+ });
221
+ fs.writeFileSync(edmxFilePath, edmxContent);
222
+ return edmxFilePath;
218
223
  };
219
224
  /**
220
225
  * Compile CDS to EDMX.
221
226
  *
222
227
  * @param cds The CDS model. It must define at least one service.
223
- * @param service The fully-qualified name of the service to compile. Defaults to "sap.fe.test.JestService".
228
+ * @param service The fully-qualified name of the service to be compiled. Defaults to "sap.fe.test.JestService".
229
+ * @param options Options for creating the EDMX output
224
230
  * @returns The compiled service model as EDMX.
225
231
  */
226
232
 
@@ -229,16 +235,21 @@ sap.ui.define(["@sap/cds-compiler", "fs", "path", "prettier", "sap/base/Log", "s
229
235
 
230
236
  function cds2edmx(cds) {
231
237
  var service = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : "sap.fe.test.JestService";
232
- var csn = compileSources({
238
+ var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
239
+ var csn = compiler.compileSources({
233
240
  "string.cds": cds
234
241
  }, {});
235
- var edmx = to.edmx(csn, {
236
- service: service,
242
+
243
+ var edmxOptions = _objectSpread(_objectSpread({
237
244
  odataForeignKeys: true,
238
245
  odataFormat: "structured",
239
246
  odataContainment: false
247
+ }, options), {}, {
248
+ service: service
240
249
  });
241
250
 
251
+ var edmx = compiler.to.edmx(csn, edmxOptions);
252
+
242
253
  if (!edmx) {
243
254
  throw new Error("Compilation failed. Hint: Make sure that the CDS model defines service ".concat(service, "."));
244
255
  }
@@ -462,4 +473,4 @@ sap.ui.define(["@sap/cds-compiler", "fs", "path", "prettier", "sap/base/Log", "s
462
473
  _exports.getTemplatedXML = getTemplatedXML;
463
474
  return _exports;
464
475
  }, false);
465
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkplc3RUZW1wbGF0aW5nSGVscGVyLnRzIl0sIm5hbWVzIjpbInByb2Nlc3NGcmFnbWVudCIsIm5hbWUiLCJ0ZXN0RGF0YSIsImlucHV0WG1sIiwicGFyc2VyIiwid2luZG93IiwiRE9NUGFyc2VyIiwiaW5wdXREb2MiLCJwYXJzZUZyb21TdHJpbmciLCJzZXR0aW5ncyIsIm1vZGVscyIsImJpbmRpbmdDb250ZXh0cyIsIm1vZGVsIiwianNvbk1vZGVsIiwiSlNPTk1vZGVsIiwic2V0RGF0YSIsImNyZWF0ZUJpbmRpbmdDb250ZXh0IiwiWE1MUHJlcHJvY2Vzc29yIiwicHJvY2VzcyIsImZpcnN0RWxlbWVudENoaWxkIiwicmVzdWx0RG9jIiwiZnJhZ21lbnRzIiwiZ2V0RWxlbWVudHNCeVRhZ05hbWUiLCJsZW5ndGgiLCJmcmFnbWVudCIsImlubmVySFRNTCIsInhtbFJlc3VsdCIsImNoaWxkcmVuIiwib3V0ZXJIVE1MIiwiZm9ybWF0WG1sIiwiZmlsdGVyIiwibm9kZSIsInR5cGUiLCJyZXF1aXJlIiwiTG9nIiwic2V0TGV2ZWwiLCJqZXN0Iiwic2V0VGltZW91dCIsIm5hbWVTcGFjZU1hcCIsInNlbGVjdCIsInhwYXRoIiwidXNlTmFtZXNwYWNlcyIsInJlZ2lzdGVyTWFjcm8iLCJtYWNyb01ldGFkYXRhIiwicmVnaXN0ZXJCdWlsZGluZ0Jsb2NrIiwidW5yZWdpc3Rlck1hY3JvIiwicGx1Z0luIiwibmFtZXNwYWNlIiwicHVibGljTmFtZXNwYWNlIiwicnVuWFBhdGhRdWVyeSIsInNlbGVjdG9yIiwieG1sZG9tIiwiZXhwZWN0IiwiZXh0ZW5kIiwidG9IYXZlQ29udHJvbCIsIm5vZGVzIiwibWVzc2FnZSIsIm91dHB1dFhtbCIsInNlcmlhbGl6ZVhNTCIsInBhc3MiLCJ0b05vdEhhdmVDb250cm9sIiwiZm9ybWF0QnVpbGRpbmdCbG9ja1hNTCIsInhtbFN0cmluZyIsIkFycmF5IiwiaXNBcnJheSIsImpvaW4iLCJ4bWxGb3JtYXR0ZWQiLCJmb3JtYXRYTUwiLCJyZXBsYWNlIiwiZ2V0Q29udHJvbEF0dHJpYnV0ZSIsImNvbnRyb2xTZWxlY3RvciIsImF0dHJpYnV0ZU5hbWUiLCJ4bWxEb20iLCJzZXJpYWxpemVyIiwiWE1MU2VyaWFsaXplciIsInNlcmlhbGl6ZVRvU3RyaW5nIiwiZm9ybWF0IiwieG1sV2hpdGVzcGFjZVNlbnNpdGl2aXR5IiwiY29tcGlsZUNEUyIsInNDRFNVcmwiLCJjZHNTdHJpbmciLCJmcyIsInJlYWRGaWxlU3luYyIsImVkbXhDb250ZW50IiwiY2RzMmVkbXgiLCJkaXIiLCJwYXRoIiwicmVzb2x2ZSIsImVkbXhVcmwiLCJiYXNlbmFtZSIsImV4aXN0c1N5bmMiLCJta2RpclN5bmMiLCJ3cml0ZUZpbGVTeW5jIiwiY2RzIiwic2VydmljZSIsImNzbiIsImNvbXBpbGVTb3VyY2VzIiwiZWRteCIsInRvIiwib2RhdGFGb3JlaWduS2V5cyIsIm9kYXRhRm9ybWF0Iiwib2RhdGFDb250YWlubWVudCIsIkVycm9yIiwiZ2V0RmFrZVNpZGVFZmZlY3RzU2VydmljZSIsIm9NZXRhTW9kZWwiLCJvU2VydmljZUNvbnRleHQiLCJzY29wZU9iamVjdCIsInNjb3BlVHlwZSIsIlNpZGVFZmZlY3RzRmFjdG9yeSIsImNyZWF0ZUluc3RhbmNlIiwidGhlbiIsIm9TZXJ2aWNlSW5zdGFuY2UiLCJvSmVzdFNpZGVFZmZlY3RzU2VydmljZSIsImdldEludGVyZmFjZSIsImdldENvbnRleHQiLCJnZXRNb2RlbCIsImdldE1ldGFNb2RlbCIsImdldEZha2VEaWFnbm9zdGljcyIsImlzc3VlcyIsImFkZElzc3VlIiwiaXNzdWVDYXRlZ29yeSIsImlzc3VlU2V2ZXJpdHkiLCJkZXRhaWxzIiwicHVzaCIsImdldElzc3VlcyIsImNoZWNrSWZJc3N1ZUV4aXN0cyIsImZpbmQiLCJpc3N1ZSIsImdldENvbnZlcnRlckNvbnRleHRGb3JUZXN0IiwiY29udmVydGVkVHlwZXMiLCJtYW5pZmVzdFNldHRpbmdzIiwiZW50aXR5U2V0IiwiZW50aXR5U2V0cyIsImVzIiwiZGF0YU1vZGVsUGF0aCIsImdldERhdGFNb2RlbE9iamVjdFBhdGhGb3JQcm9wZXJ0eSIsIkNvbnZlcnRlckNvbnRleHQiLCJtZXJnZSIsIm1ldGFNb2RlbENhY2hlIiwic01ldGFkYXRhVXJsIiwib1JlcXVlc3RvciIsIl9NZXRhZGF0YVJlcXVlc3RvciIsImNyZWF0ZSIsIk9EYXRhTWV0YU1vZGVsIiwidW5kZWZpbmVkIiwiZmV0Y2hFbnRpdHlDb250YWluZXIiLCJwcm9wZXJ0eSIsInRhcmdldFBhdGgiLCJzdGFydGluZ0VudGl0eVNldCIsIm5hdmlnYXRpb25Qcm9wZXJ0aWVzIiwidGFyZ2V0T2JqZWN0IiwidGFyZ2V0RW50aXR5U2V0IiwidGFyZ2V0RW50aXR5VHlwZSIsImVudGl0eVR5cGUiLCJjb250ZXh0TG9jYXRpb24iLCJldmFsdWF0ZUJpbmRpbmciLCJiaW5kaW5nU3RyaW5nIiwiYmluZGluZ0VsZW1lbnQiLCJCaW5kaW5nUGFyc2VyIiwiY29tcGxleFBhcnNlciIsImFyZ3MiLCJmb3JtYXR0ZXIiLCJhcHBseSIsImV2YWx1YXRlQmluZGluZ1dpdGhNb2RlbCIsIm1vZGVsQ29udGVudCIsIm5hbWVkTW9kZWxzQ29udGVudCIsInRleHQiLCJJbnZpc2libGVUZXh0IiwiYmluZFByb3BlcnR5IiwiZGVmYXVsdE1vZGVsIiwic2V0TW9kZWwiLCJzZXRCaW5kaW5nQ29udGV4dCIsIk9iamVjdCIsImVudHJpZXMiLCJjb250ZW50IiwiZ2V0VGV4dCIsImdldFRlbXBsYXRpbmdSZXN1bHQiLCJ4bWxJbnB1dCIsIm1CaW5kaW5nQ29udGV4dHMiLCJtTW9kZWxzIiwidGVtcGxhdGVkWG1sIiwieG1sRG9jIiwiaGFzT3duUHJvcGVydHkiLCJhc3NpZ24iLCJUZW1wbGF0ZU1vZGVsIiwia2V5cyIsImZvckVhY2giLCJzTW9kZWxOYW1lIiwiaXNUZW1wbGF0ZU1vZGVsIiwiZGF0YSIsIm9QcmVwcm9jZXNzb3JTZXR0aW5ncyIsIm1ldGFNb2RlbCIsInNLZXkiLCJnZXRPYmplY3QiLCJ0b0JlRGVm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QTFELENBQWhEO0FBQ0E7O0FBRUQsZUFBT0MsZUFBZSxDQUFDQyxPQUFoQixDQUF3Qm1LLE1BQU0sQ0FBQ2xLLGlCQUEvQixFQUFtRDtBQUFFbEIsVUFBQUEsSUFBSSxFQUFFO0FBQVIsU0FBbkQsRUFBOEU2TCxxQkFBOUUsQ0FBUDtBQTFDQztBQTJDRCxLQWhEK0I7QUFBQTtBQUFBO0FBQUEsR0FBekI7Ozs7QUFrREEsTUFBTU0sZUFBZSxhQUMzQm5CLFFBRDJCLEVBRTNCdEMsWUFGMkIsRUFHM0J1QyxnQkFIMkIsRUFJM0JDLE9BSjJCO0FBQUEsUUFLMUI7QUFBQSw2QkFDMEJILG1CQUFtQixDQUFDQyxRQUFELEVBQVd0QyxZQUFYLEVBQXlCdUMsZ0JBQXpCLEVBQTJDQyxPQUEzQyxDQUQ3QyxPQUVNekgsWUFGTjtBQUdELEtBUjJCO0FBQUE7QUFBQTtBQUFBLEdBQXJCIiwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBbnlBbm5vdGF0aW9uLCBDb252ZXJ0ZXJPdXRwdXQsIEVudGl0eVNldCwgUHJvcGVydHkgfSBmcm9tIFwiQHNhcC11eC9hbm5vdGF0aW9uLWNvbnZlcnRlclwiO1xuaW1wb3J0IHsgY29tcGlsZVNvdXJjZXMsIHRvIH0gZnJvbSBcIkBzYXAvY2RzLWNvbXBpbGVyXCI7XG5pbXBvcnQgKiBhcyBmcyBmcm9tIFwiZnNcIjtcbmltcG9ydCAqIGFzIHBhdGggZnJvbSBcInBhdGhcIjtcbmltcG9ydCB7IGZvcm1hdCwgUmVxdWlyZWRPcHRpb25zIH0gZnJvbSBcInByZXR0aWVyXCI7XG5pbXBvcnQgTG9nIGZyb20gXCJzYXAvYmFzZS9Mb2dcIjtcbmltcG9ydCBtZXJnZSBmcm9tIFwic2FwL2Jhc2UvdXRpbC9tZXJnZVwiO1xuaW1wb3J0IHsgcmVnaXN0ZXJCdWlsZGluZ0Jsb2NrIH0gZnJvbSBcInNhcC9mZS9jb3JlL2J1aWxkaW5nQmxvY2tzL0J1aWxkaW5nQmxvY2tSdW50aW1lXCI7XG5pbXBvcnQgQ29udmVydGVyQ29udGV4dCBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9Db252ZXJ0ZXJDb250ZXh0XCI7XG5pbXBvcnQgeyBJc3N1ZUNhdGVnb3J5LCBJc3N1ZVNldmVyaXR5IH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvaGVscGVycy9Jc3N1ZU1hbmFnZXJcIjtcbmltcG9ydCB7IExpc3RSZXBvcnRNYW5pZmVzdFNldHRpbmdzLCBPYmplY3RQYWdlTWFuaWZlc3RTZXR0aW5ncyB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL01hbmlmZXN0U2V0dGluZ3NcIjtcbmltcG9ydCB7IElEaWFnbm9zdGljcyB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL1RlbXBsYXRlQ29udmVydGVyXCI7XG5pbXBvcnQgU2lkZUVmZmVjdHNGYWN0b3J5IGZyb20gXCJzYXAvZmUvY29yZS9zZXJ2aWNlcy9TaWRlRWZmZWN0c1NlcnZpY2VGYWN0b3J5XCI7XG5pbXBvcnQgVGVtcGxhdGVNb2RlbCBmcm9tIFwic2FwL2ZlL2NvcmUvVGVtcGxhdGVNb2RlbFwiO1xuaW1wb3J0IHsgRGF0YU1vZGVsT2JqZWN0UGF0aCB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL0RhdGFNb2RlbFBhdGhIZWxwZXJcIjtcbmltcG9ydCBCaW5kaW5nUGFyc2VyIGZyb20gXCJzYXAvdWkvYmFzZS9CaW5kaW5nUGFyc2VyXCI7XG5pbXBvcnQgSW52aXNpYmxlVGV4dCBmcm9tIFwic2FwL3VpL2NvcmUvSW52aXNpYmxlVGV4dFwiO1xuaW1wb3J0IFhNTFByZXByb2Nlc3NvciBmcm9tIFwic2FwL3VpL2NvcmUvdXRpbC9YTUxQcmVwcm9jZXNzb3JcIjtcbmltcG9ydCBDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvQ29udGV4dFwiO1xuaW1wb3J0IEpTT05Nb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL2pzb24vSlNPTk1vZGVsXCI7XG5pbXBvcnQgX01ldGFkYXRhUmVxdWVzdG9yIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvbGliL19NZXRhZGF0YVJlcXVlc3RvclwiO1xuaW1wb3J0IE9EYXRhTWV0YU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFNZXRhTW9kZWxcIjtcbmltcG9ydCB4cGF0aCBmcm9tIFwieHBhdGhcIjtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdmFyLXJlcXVpcmVzXG5jb25zdCBmb3JtYXRYbWwgPSByZXF1aXJlKFwieG1sLWZvcm1hdHRlclwiKTtcblxuTG9nLnNldExldmVsKDEgYXMgYW55LCBcInNhcC51aS5jb3JlLnV0aWwuWE1MUHJlcHJvY2Vzc29yXCIpO1xuamVzdC5zZXRUaW1lb3V0KDQwMDAwKTtcblxuY29uc3QgbmFtZVNwYWNlTWFwID0ge1xuXHRcIm1hY3Jvc1wiOiBcInNhcC5mZS5tYWNyb3NcIixcblx0XCJtYWNyb1wiOiBcInNhcC5mZS5tYWNyb3NcIixcblx0XCJtYWNyb2RhdGFcIjogXCJodHRwOi8vc2NoZW1hcy5zYXAuY29tL3NhcHVpNS9leHRlbnNpb24vc2FwLnVpLmNvcmUuQ3VzdG9tRGF0YS8xXCIsXG5cdFwibG9nXCI6IFwiaHR0cDovL3NjaGVtYXMuc2FwLmNvbS9zYXB1aTUvZXh0ZW5zaW9uL3NhcC51aS5jb3JlLkN1c3RvbURhdGEvMVwiLFxuXHRcInVuaXR0ZXN0XCI6IFwiaHR0cDovL3NjaGVtYXMuc2FwLmNvbS9zYXB1aTUvcHJlcHJvY2Vzc29yZXh0ZW5zaW9uL3NhcC5mZS51bml0dGVzdGluZy8xXCIsXG5cdFwiY29udHJvbFwiOiBcInNhcC5mZS5jb3JlLmNvbnRyb2xzXCIsXG5cdFwiY29yZVwiOiBcInNhcC51aS5jb3JlXCIsXG5cdFwibVwiOiBcInNhcC5tXCIsXG5cdFwiZlwiOiBcInNhcC51aS5sYXlvdXQuZm9ybVwiLFxuXHRcImludGVybmFsTWFjcm9cIjogXCJzYXAuZmUubWFjcm9zLmludGVybmFsXCIsXG5cdFwibWRjXCI6IFwic2FwLnVpLm1kY1wiLFxuXHRcIm1kY2F0XCI6IFwic2FwLnVpLm1kYy5hY3Rpb250b29sYmFyXCIsXG5cdFwibWRjRmllbGRcIjogXCJzYXAudWkubWRjLmZpZWxkXCIsXG5cdFwibWRjVGFibGVcIjogXCJzYXAudWkubWRjLnRhYmxlXCIsXG5cdFwidVwiOiBcInNhcC51aS51bmlmaWVkXCIsXG5cdFwibWFjcm9NaWNyb0NoYXJ0XCI6IFwic2FwLmZlLm1hY3Jvcy5taWNyb2NoYXJ0XCIsXG5cdFwibWljcm9DaGFydFwiOiBcInNhcC5zdWl0ZS51aS5taWNyb2NoYXJ0XCIsXG5cdFwibWFjcm9UYWJsZVwiOiBcInNhcC5mZS5tYWNyb3MudGFibGVcIlxufTtcbmNvbnN0IHNlbGVjdCA9IHhwYXRoLnVzZU5hbWVzcGFjZXMobmFtZVNwYWNlTWFwKTtcblxuZXhwb3J0IGNvbnN0IHJlZ2lzdGVyTWFjcm8gPSBmdW5jdGlvbiAobWFjcm9NZXRhZGF0YTogYW55KSB7XG5cdHJlZ2lzdGVyQnVpbGRpbmdCbG9jayhtYWNyb01ldGFkYXRhKTtcbn07XG5leHBvcnQgY29uc3QgdW5yZWdpc3Rlck1hY3JvID0gZnVuY3Rpb24gKG1hY3JvTWV0YWRhdGE6IGFueSkge1xuXHRYTUxQcmVwcm9jZXNzb3IucGx1Z0luKG51bGwsIG1hY3JvTWV0YWRhdGEubmFtZXNwYWNlLCBtYWNyb01ldGFkYXRhLm5hbWUpO1xuXHRpZiAobWFjcm9NZXRhZGF0YS5wdWJsaWNOYW1lc3BhY2UpIHtcblx0XHRYTUxQcmVwcm9jZXNzb3IucGx1Z0luKG51bGwsIG1hY3JvTWV0YWRhdGEucHVibGljTmFtZXNwYWNlLCBtYWNyb01ldGFkYXRhLm5hbWUpO1xuXHR9XG59O1xuZXhwb3J0IGNvbnN0IHJ1blhQYXRoUXVlcnkgPSBmdW5jdGlvbiAoc2VsZWN0b3I6IHN0cmluZywgeG1sZG9tOiBOb2RlIHwgdW5kZWZpbmVkKSB7XG5cdHJldHVybiBzZWxlY3Qoc2VsZWN0b3IsIHhtbGRvbSk7XG59O1xuXG5leHBlY3QuZXh0ZW5kKHtcblx0dG9IYXZlQ29udHJvbCh4bWxkb20sIHNlbGVjdG9yKSB7XG5cdFx0Y29uc3Qgbm9kZXMgPSBydW5YUGF0aFF1ZXJ5KGAvcm9vdCR7c2VsZWN0b3J9YCwgeG1sZG9tKTtcblx0XHRyZXR1cm4ge1xuXHRcdFx0bWVzc2FnZTogKCkgPT4ge1xuXHRcdFx0XHRjb25zdCBvdXRwdXRYbWwgPSBzZXJpYWxpemVYTUwoeG1sZG9tKTtcblx0XHRcdFx0cmV0dXJuIGBkaWQgbm90IGZpbmQgY29udHJvbHMgbWF0Y2hpbmcgJHtzZWxlY3Rvcn0gaW4gZ2VuZXJhdGVkIHhtbDpcXG4gJHtvdXRwdXRYbWx9YDtcblx0XHRcdH0sXG5cdFx0XHRwYXNzOiBub2RlcyAmJiBub2Rlcy5sZW5ndGggPj0gMVxuXHRcdH07XG5cdH0sXG5cdHRvTm90SGF2ZUNvbnRyb2woeG1sZG9tLCBzZWxlY3Rvcikge1xuXHRcdGNvbnN0IG5vZGVzID0gcnVuWFBhdGhRdWVyeShgL3Jvb3Qke3NlbGVjdG9yfWAsIHhtbGRvbSk7XG5cdFx0cmV0dXJuIHtcblx0XHRcdG1lc3NhZ2U6ICgpID0+IHtcblx0XHRcdFx0Y29uc3Qgb3V0cHV0WG1sID0gc2VyaWFsaXplWE1MKHhtbGRvbSk7XG5cdFx0XHRcdHJldHVybiBgVGhlcmUgaXMgYSBjb250cm9sIG1hdGNoaW5nICR7c2VsZWN0b3J9IGluIGdlbmVyYXRlZCB4bWw6XFxuICR7b3V0cHV0WG1sfWA7XG5cdFx0XHR9LFxuXHRcdFx0cGFzczogbm9kZXMgJiYgbm9kZXMubGVuZ3RoID09PSAwXG5cdFx0fTtcblx0fVxufSk7XG5cbmV4cG9ydCBjb25zdCBmb3JtYXRCdWlsZGluZ0Jsb2NrWE1MID0gZnVuY3Rpb24gKHhtbFN0cmluZzogc3RyaW5nIHwgc3RyaW5nW10pIHtcblx0aWYgKEFycmF5LmlzQXJyYXkoeG1sU3RyaW5nKSkge1xuXHRcdHhtbFN0cmluZyA9IHhtbFN0cmluZy5qb2luKFwiXCIpO1xuXHR9XG5cdGxldCB4bWxGb3JtYXR0ZWQgPSBmb3JtYXRYTUwoeG1sU3RyaW5nKTtcblx0eG1sRm9ybWF0dGVkID0geG1sRm9ybWF0dGVkLnJlcGxhY2UoL3VpZC0taWQtWzAtOV17MTN9LVswLTldL2csIFwidWlkLS1pZFwiKTtcblx0cmV0dXJuIHhtbEZvcm1hdHRlZDtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRDb250cm9sQXR0cmlidXRlID0gZnVuY3Rpb24gKGNvbnRyb2xTZWxlY3Rvcjogc3RyaW5nLCBhdHRyaWJ1dGVOYW1lOiBzdHJpbmcsIHhtbERvbTogTm9kZSkge1xuXHRjb25zdCBzZWxlY3RvciA9IGBzdHJpbmcoL3Jvb3Qke2NvbnRyb2xTZWxlY3Rvcn0vQCR7YXR0cmlidXRlTmFtZX0pYDtcblx0cmV0dXJuIHJ1blhQYXRoUXVlcnkoc2VsZWN0b3IsIHhtbERvbSk7XG59O1xuXG5jb25zdCBzZXJpYWxpemVYTUwgPSBmdW5jdGlvbiAoeG1sRG9tOiBOb2RlKSB7XG5cdGNvbnN0IHNlcmlhbGl6ZXIgPSBuZXcgd2luZG93LlhNTFNlcmlhbGl6ZXIoKTtcblx0Y29uc3QgeG1sU3RyaW5nID0gc2VyaWFsaXplci5zZXJpYWxpemVUb1N0cmluZyh4bWxEb20pO1xuXHRyZXR1cm4gZm9ybWF0WE1MKHhtbFN0cmluZyk7XG59O1xuXG5leHBvcnQgY29uc3QgZm9ybWF0WE1MID0gZnVuY3Rpb24gKHhtbFN0cmluZzogc3RyaW5nKSB7XG5cdHJldHVybiBmb3JtYXQoXG5cdFx0eG1sU3RyaW5nLFxuXHRcdHsgcGFyc2VyOiBcInhtbFwiLCB4bWxXaGl0ZXNwYWNlU2Vuc2l0aXZpdHk6IFwiaWdub3JlXCIgfSBhcyBQYXJ0aWFsPFJlcXVpcmVkT3B0aW9ucz4gLyogb3B0aW9ucyBieSB0aGUgUHJldHRpZXIgWE1MIHBsdWdpbiAqL1xuXHQpO1xufTtcblxuLyoqXG4gKiBDb21waWxlIGEgQ0RTIGZpbGUgaW50byBhbiBFRE1YIGZpbGUuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHNDRFNVcmwgVGhlIHBhdGggdG8gdGhlIGZpbGUgY29udGFpbmluZyB0aGUgQ0RTIGRlZmluaXRpb24uIFRoaXMgZmlsZSBNVVNUIGRlY2xhcmUgdGhlIG5hbWVzcGFjZVxuICogc2FwLmZlLnRlc3QgYW5kIGEgc2VydmljZSBKZXN0U2VydmljZVxuICogQHJldHVybnMge3N0cmluZ30gVGhlIHBhdGggb2YgdGhlIGdlbmVyYXRlZCBFRE1YXG4gKi9cbmV4cG9ydCBjb25zdCBjb21waWxlQ0RTID0gZnVuY3Rpb24gKHNDRFNVcmw6IHN0cmluZykge1xuXHRjb25zdCBjZHNTdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoc0NEU1VybCwgXCJ1dGYtOFwiKTtcblx0Y29uc3QgZWRteENvbnRlbnQgPSBjZHMyZWRteChjZHNTdHJpbmcsIFwic2FwLmZlLnRlc3QuSmVzdFNlcnZpY2VcIik7XG5cdGNvbnN0IGRpciA9IHBhdGgucmVzb2x2ZShzQ0RTVXJsLCBcIi4uXCIsIFwiZ2VuXCIpO1xuXHRjb25zdCBlZG14VXJsID0gcGF0aC5yZXNvbHZlKGRpciwgcGF0aC5iYXNlbmFtZShzQ0RTVXJsKS5yZXBsYWNlKFwiLmNkc1wiLCBcIi54bWxcIikpO1xuXG5cdGlmICghZnMuZXhpc3RzU3luYyhkaXIpKSB7XG5cdFx0ZnMubWtkaXJTeW5jKGRpcik7XG5cdH1cblxuXHRmcy53cml0ZUZpbGVTeW5jKGVkbXhVcmwsIGVkbXhDb250ZW50KTtcblx0cmV0dXJuIGVkbXhVcmw7XG59O1xuXG4vKipcbiAqIENvbXBpbGUgQ0RTIHRvIEVETVguXG4gKlxuICogQHBhcmFtIGNkcyBUaGUgQ0RTIG1vZGVsLiBJdCBtdXN0IGRlZmluZSBhdCBsZWFzdCBvbmUgc2VydmljZS5cbiAqIEBwYXJhbSBzZXJ2aWNlIFRoZSBmdWxseS1xdWFsaWZpZWQgbmFtZSBvZiB0aGUgc2VydmljZSB0byBjb21waWxlLiBEZWZhdWx0cyB0byBcInNhcC5mZS50ZXN0Lkplc3RTZXJ2aWNlXCIuXG4gKiBAcmV0dXJucyBUaGUgY29tcGlsZWQgc2VydmljZSBtb2RlbCBhcyBFRE1YLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY2RzMmVkbXgoY2RzOiBzdHJpbmcsIHNlcnZpY2U6IHN0cmluZyA9IFwic2FwLmZlLnRlc3QuSmVzdFNlcnZpY2VcIikge1xuXHRjb25zdCBjc24gPSBjb21waWxlU291cmNlcyh7IFwic3RyaW5nLmNkc1wiOiBjZHMgfSwge30pO1xuXHRjb25zdCBlZG14ID0gdG8uZWRteChjc24sIHsgc2VydmljZTogc2VydmljZSwgb2RhdGFGb3JlaWduS2V5czogdHJ1ZSwgb2RhdGFGb3JtYXQ6IFwic3RydWN0dXJlZFwiLCBvZGF0YUNvbnRhaW5tZW50OiBmYWxzZSB9KTtcblx0aWYgKCFlZG14KSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKGBDb21waWxhdGlvbiBmYWlsZWQuIEhpbnQ6IE1ha2Ugc3VyZSB0aGF0IHRoZSBDRFMgbW9kZWwgZGVmaW5lcyBzZXJ2aWNlICR7c2VydmljZX0uYCk7XG5cdH1cblx0cmV0dXJuIGVkbXg7XG59XG5cbmV4cG9ydCBjb25zdCBnZXRGYWtlU2lkZUVmZmVjdHNTZXJ2aWNlID0gYXN5bmMgZnVuY3Rpb24gKG9NZXRhTW9kZWw6IE9EYXRhTWV0YU1vZGVsKTogUHJvbWlzZTxhbnk+IHtcblx0Y29uc3Qgb1NlcnZpY2VDb250ZXh0ID0geyBzY29wZU9iamVjdDoge30sIHNjb3BlVHlwZTogXCJcIiwgc2V0dGluZ3M6IHt9IH07XG5cdHJldHVybiBuZXcgU2lkZUVmZmVjdHNGYWN0b3J5KCkuY3JlYXRlSW5zdGFuY2Uob1NlcnZpY2VDb250ZXh0KS50aGVuKGZ1bmN0aW9uIChvU2VydmljZUluc3RhbmNlOiBhbnkpIHtcblx0XHRjb25zdCBvSmVzdFNpZGVFZmZlY3RzU2VydmljZSA9IG9TZXJ2aWNlSW5zdGFuY2UuZ2V0SW50ZXJmYWNlKCk7XG5cdFx0b0plc3RTaWRlRWZmZWN0c1NlcnZpY2UuZ2V0Q29udGV4dCA9IGZ1bmN0aW9uICgpIHtcblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdHNjb3BlT2JqZWN0OiB7XG5cdFx0XHRcdFx0Z2V0TW9kZWw6IGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRcdHJldHVybiB7XG5cdFx0XHRcdFx0XHRcdGdldE1ldGFNb2RlbDogZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdFx0XHRcdHJldHVybiBvTWV0YU1vZGVsO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fTtcblx0XHR9O1xuXHRcdHJldHVybiBvSmVzdFNpZGVFZmZlY3RzU2VydmljZTtcblx0fSk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0RmFrZURpYWdub3N0aWNzID0gZnVuY3Rpb24gKCk6IElEaWFnbm9zdGljcyB7XG5cdGNvbnN0IGlzc3VlczogYW55W10gPSBbXTtcblx0cmV0dXJuIHtcblx0XHRhZGRJc3N1ZShpc3N1ZUNhdGVnb3J5OiBJc3N1ZUNhdGVnb3J5LCBpc3N1ZVNldmVyaXR5OiBJc3N1ZVNldmVyaXR5LCBkZXRhaWxzOiBzdHJpbmcpOiB2b2lkIHtcblx0XHRcdGlzc3Vlcy5wdXNoKHtcblx0XHRcdFx0aXNzdWVDYXRlZ29yeSxcblx0XHRcdFx0aXNzdWVTZXZlcml0eSxcblx0XHRcdFx0ZGV0YWlsc1xuXHRcdFx0fSk7XG5cdFx0fSxcblx0XHRnZXRJc3N1ZXMoKTogYW55W10ge1xuXHRcdFx0cmV0dXJuIGlzc3Vlcztcblx0XHR9LFxuXHRcdGNoZWNrSWZJc3N1ZUV4aXN0cyhpc3N1ZUNhdGVnb3J5OiBJc3N1ZUNhdGVnb3J5LCBpc3N1ZVNldmVyaXR5OiBJc3N1ZVNldmVyaXR5LCBkZXRhaWxzOiBzdHJpbmcpOiBib29sZWFuIHtcblx0XHRcdHJldHVybiBpc3N1ZXMuZmluZCgoaXNzdWUpID0+IHtcblx0XHRcdFx0aXNzdWUuaXNzdWVDYXRlZ29yeSA9PT0gaXNzdWVDYXRlZ29yeSAmJiBpc3N1ZS5pc3N1ZVNldmVyaXR5ID09PSBpc3N1ZVNldmVyaXR5ICYmIGlzc3VlLmRldGFpbHMgPT09IGRldGFpbHM7XG5cdFx0XHR9KTtcblx0XHR9XG5cdH07XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0Q29udmVydGVyQ29udGV4dEZvclRlc3QgPSBmdW5jdGlvbiAoXG5cdGNvbnZlcnRlZFR5cGVzOiBDb252ZXJ0ZXJPdXRwdXQsXG5cdG1hbmlmZXN0U2V0dGluZ3M6IExpc3RSZXBvcnRNYW5pZmVzdFNldHRpbmdzIHwgT2JqZWN0UGFnZU1hbmlmZXN0U2V0dGluZ3Ncbikge1xuXHRjb25zdCBlbnRpdHlTZXQgPSBjb252ZXJ0ZWRUeXBlcy5lbnRpdHlTZXRzLmZpbmQoKGVzKSA9PiBlcy5uYW1lID09PSBtYW5pZmVzdFNldHRpbmdzLmVudGl0eVNldCk7XG5cdGNvbnN0IGRhdGFNb2RlbFBhdGggPSBnZXREYXRhTW9kZWxPYmplY3RQYXRoRm9yUHJvcGVydHkoZW50aXR5U2V0IGFzIEVudGl0eVNldCwgY29udmVydGVkVHlwZXMsIGVudGl0eVNldCk7XG5cdHJldHVybiBuZXcgQ29udmVydGVyQ29udGV4dChjb252ZXJ0ZWRUeXBlcywgbWFuaWZlc3RTZXR0aW5ncywgZ2V0RmFrZURpYWdub3N0aWNzKCksIG1lcmdlLCBkYXRhTW9kZWxQYXRoKTtcbn07XG5jb25zdCBtZXRhTW9kZWxDYWNoZTogYW55ID0ge307XG5leHBvcnQgY29uc3QgZ2V0TWV0YU1vZGVsID0gYXN5bmMgZnVuY3Rpb24gKHNNZXRhZGF0YVVybDogc3RyaW5nKSB7XG5cdGNvbnN0IG9SZXF1ZXN0b3IgPSBfTWV0YWRhdGFSZXF1ZXN0b3IuY3JlYXRlKHt9LCBcIjQuMFwiLCB7fSk7XG5cdGlmICghbWV0YU1vZGVsQ2FjaGVbc01ldGFkYXRhVXJsXSkge1xuXHRcdGNvbnN0IG9NZXRhTW9kZWwgPSBuZXcgKE9EYXRhTWV0YU1vZGVsIGFzIGFueSkob1JlcXVlc3Rvciwgc01ldGFkYXRhVXJsLCB1bmRlZmluZWQsIG51bGwpO1xuXHRcdGF3YWl0IG9NZXRhTW9kZWwuZmV0Y2hFbnRpdHlDb250YWluZXIoKTtcblx0XHRtZXRhTW9kZWxDYWNoZVtzTWV0YWRhdGFVcmxdID0gb01ldGFNb2RlbDtcblx0fVxuXG5cdHJldHVybiBtZXRhTW9kZWxDYWNoZVtzTWV0YWRhdGFVcmxdO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldERhdGFNb2RlbE9iamVjdFBhdGhGb3JQcm9wZXJ0eSA9IGZ1bmN0aW9uIChcblx0ZW50aXR5U2V0OiBFbnRpdHlTZXQsXG5cdGNvbnZlcnRlZFR5cGVzOiBDb252ZXJ0ZXJPdXRwdXQsXG5cdHByb3BlcnR5PzogUHJvcGVydHkgfCBFbnRpdHlTZXQgfCBBbnlBbm5vdGF0aW9uXG4pOiBEYXRhTW9kZWxPYmplY3RQYXRoIHtcblx0Y29uc3QgdGFyZ2V0UGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aCA9IHtcblx0XHRzdGFydGluZ0VudGl0eVNldDogZW50aXR5U2V0LFxuXHRcdG5hdmlnYXRpb25Qcm9wZXJ0aWVzOiBbXSxcblx0XHR0YXJnZXRPYmplY3Q6IHByb3BlcnR5LFxuXHRcdHRhcmdldEVudGl0eVNldDogZW50aXR5U2V0LFxuXHRcdHRhcmdldEVudGl0eVR5cGU6IGVudGl0eVNldC5lbnRpdHlUeXBlLFxuXHRcdGNvbnZlcnRlZFR5cGVzOiBjb252ZXJ0ZWRUeXBlc1xuXHR9O1xuXHR0YXJnZXRQYXRoLmNvbnRleHRMb2NhdGlvbiA9IHRhcmdldFBhdGg7XG5cdHJldHVybiB0YXJnZXRQYXRoO1xufTtcblxuZXhwb3J0IGNvbnN0IGV2YWx1YXRlQmluZGluZyA9IGZ1bmN0aW9uIChiaW5kaW5nU3RyaW5nOiBzdHJpbmcsIC4uLmFyZ3M6IGFueVtdKSB7XG5cdGNvbnN0IGJpbmRpbmdFbGVtZW50ID0gQmluZGluZ1BhcnNlci5jb21wbGV4UGFyc2VyKGJpbmRpbmdTdHJpbmcpO1xuXHRyZXR1cm4gYmluZGluZ0VsZW1lbnQuZm9ybWF0dGVyLmFwcGx5KHVuZGVmaW5lZCwgYXJncyk7XG59O1xuXG50eXBlIE1vZGVsQ29udGVudCA9IHtcblx0W25hbWU6IHN0cmluZ106IGFueTtcbn07XG5cbi8qKlxuICogRXZhbHVhdGUgYSBiaW5kaW5nIGFnYWluc3QgYSBtb2RlbC5cbiAqXG4gKiBAcGFyYW0gYmluZGluZ1N0cmluZyBUaGUgYmluZGluZyBzdHJpbmcuXG4gKiBAcGFyYW0gbW9kZWxDb250ZW50IENvbnRlbnQgb2YgdGhlIGRlZmF1bHQgbW9kZWwgdG8gdXNlIGZvciBldmFsdWF0aW9uLlxuICogQHBhcmFtIG5hbWVkTW9kZWxzQ29udGVudCBDb250ZW50cyBvZiBhZGRpdGlvbmFsLCBuYW1lZCBtb2RlbHMgdG8gdXNlLlxuICogQHJldHVybnMgVGhlIGV2YWx1YXRlZCBiaW5kaW5nLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZXZhbHVhdGVCaW5kaW5nV2l0aE1vZGVsKFxuXHRiaW5kaW5nU3RyaW5nOiBzdHJpbmcgfCB1bmRlZmluZWQsXG5cdG1vZGVsQ29udGVudDogTW9kZWxDb250ZW50LFxuXHRuYW1lZE1vZGVsc0NvbnRlbnQ/OiB7IFttb2RlbE5hbWU6IHN0cmluZ106IE1vZGVsQ29udGVudCB9XG4pOiBzdHJpbmcge1xuXHRjb25zdCBiaW5kaW5nRWxlbWVudCA9IEJpbmRpbmdQYXJzZXIuY29tcGxleFBhcnNlcihiaW5kaW5nU3RyaW5nKTtcblx0Y29uc3QgdGV4dCA9IG5ldyBJbnZpc2libGVUZXh0KCk7XG5cdHRleHQuYmluZFByb3BlcnR5KFwidGV4dFwiLCBiaW5kaW5nRWxlbWVudCk7XG5cblx0Y29uc3QgZGVmYXVsdE1vZGVsID0gbmV3IEpTT05Nb2RlbChtb2RlbENvbnRlbnQpO1xuXHR0ZXh0LnNldE1vZGVsKGRlZmF1bHRNb2RlbCk7XG5cdHRleHQuc2V0QmluZGluZ0NvbnRleHQoZGVmYXVsdE1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KFwiL1wiKSBhcyBDb250ZXh0KTtcblxuXHRpZiAobmFtZWRNb2RlbHNDb250ZW50KSB7XG5cdFx0Zm9yIChjb25zdCBbbmFtZSwgY29udGVudF0gb2YgT2JqZWN0LmVudHJpZXMobmFtZWRNb2RlbHNDb250ZW50KSkge1xuXHRcdFx0Y29uc3QgbW9kZWwgPSBuZXcgSlNPTk1vZGVsKGNvbnRlbnQpO1xuXHRcdFx0dGV4dC5zZXRNb2RlbChtb2RlbCwgbmFtZSk7XG5cdFx0XHR0ZXh0LnNldEJpbmRpbmdDb250ZXh0KG1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KFwiL1wiKSBhcyBDb250ZXh0LCBuYW1lKTtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gdGV4dC5nZXRUZXh0KCk7XG59XG5cbmV4cG9ydCBjb25zdCBnZXRUZW1wbGF0aW5nUmVzdWx0ID0gYXN5bmMgZnVuY3Rpb24gKFxuXHR4bWxJbnB1dDogc3RyaW5nLFxuXHRzTWV0YWRhdGFVcmw6IHN0cmluZyxcblx0bUJpbmRpbmdDb250ZXh0czogeyBbeDogc3RyaW5nXTogYW55OyBlbnRpdHlTZXQ/OiBzdHJpbmcgfSxcblx0bU1vZGVsczogeyBbeDogc3RyaW5nXTogYW55IH1cbikge1xuXHRjb25zdCB0ZW1wbGF0ZWRYbWwgPSBgPHJvb3Q+JHt4bWxJbnB1dH08L3Jvb3Q+YDtcblx0Y29uc3QgcGFyc2VyID0gbmV3IHdpbmRvdy5ET01QYXJzZXIoKTtcblx0Y29uc3QgeG1sRG9jID0gcGFyc2VyLnBhcnNlRnJvbVN0cmluZyh0ZW1wbGF0ZWRYbWwsIFwidGV4dC94bWxcIik7XG5cdC8vIFRvIGVuc3VyZSBvdXIgbWFjcm8gY2FuIHVzZSAjc2V0QmluZGluZ0NvbnRleHQgd2UgZW5zdXJlIHRoZXJlIGlzIGEgcHJlIGV4aXN0aW5nIEpTT05Nb2RlbCBmb3IgY29udmVydGVyQ29udGV4dFxuXHQvLyBpZiBub3QgYWxyZWFkeSBwYXNzZWQgdG8gdGVoIHRlbXBsYXRpbmdcblxuXHRjb25zdCBvTWV0YU1vZGVsID0gYXdhaXQgZ2V0TWV0YU1vZGVsKHNNZXRhZGF0YVVybCk7XG5cdGlmICghbU1vZGVscy5oYXNPd25Qcm9wZXJ0eShcImNvbnZlcnRlckNvbnRleHRcIikpIHtcblx0XHRtTW9kZWxzID0gT2JqZWN0LmFzc2lnbihtTW9kZWxzLCB7IFwiY29udmVydGVyQ29udGV4dFwiOiBuZXcgVGVtcGxhdGVNb2RlbCh7fSwgb01ldGFNb2RlbCkgfSk7XG5cdH1cblxuXHRPYmplY3Qua2V5cyhtTW9kZWxzKS5mb3JFYWNoKGZ1bmN0aW9uIChzTW9kZWxOYW1lKSB7XG5cdFx0aWYgKG1Nb2RlbHNbc01vZGVsTmFtZV0gJiYgbU1vZGVsc1tzTW9kZWxOYW1lXS5pc1RlbXBsYXRlTW9kZWwpIHtcblx0XHRcdG1Nb2RlbHNbc01vZGVsTmFtZV0gPSBuZXcgVGVtcGxhdGVNb2RlbChtTW9kZWxzW3NNb2RlbE5hbWVdLmRhdGEsIG9NZXRhTW9kZWwpO1xuXHRcdH1cblx0fSk7XG5cblx0Y29uc3Qgb1ByZXByb2Nlc3NvclNldHRpbmdzOiBhbnkgPSB7XG5cdFx0bW9kZWxzOiBPYmplY3QuYXNzaWduKFxuXHRcdFx0e1xuXHRcdFx0XHRtZXRhTW9kZWw6IG9NZXRhTW9kZWxcblx0XHRcdH0sXG5cdFx0XHRtTW9kZWxzXG5cdFx0KSxcblx0XHRiaW5kaW5nQ29udGV4dHM6IHt9XG5cdH07XG5cblx0Ly9JbmplY3QgbW9kZWxzIGFuZCBiaW5kaW5nQ29udGV4dHNcblx0T2JqZWN0LmtleXMobUJpbmRpbmdDb250ZXh0cykuZm9yRWFjaChmdW5jdGlvbiAoc0tleSkge1xuXHRcdC8qIEFzc2VydCB0byBtYWtlIHN1cmUgdGhlIGFubm90YXRpb25zIGFyZSBpbiB0aGUgdGVzdCBtZXRhZGF0YSAtPiBhdm9pZCBtaXNsZWFkaW5nIHRlc3RzICovXG5cdFx0ZXhwZWN0KHR5cGVvZiBvTWV0YU1vZGVsLmdldE9iamVjdChtQmluZGluZ0NvbnRleHRzW3NLZXldKSkudG9CZURlZmluZWQoKTtcblx0XHRjb25zdCBvTW9kZWwgPSBtTW9kZWxzW3NLZXldIHx8IG9NZXRhTW9kZWw7XG5cdFx0b1ByZXByb2Nlc3NvclNldHRpbmdzLmJpbmRpbmdDb250ZXh0c1tzS2V5XSA9IG9Nb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChtQmluZGluZ0NvbnRleHRzW3NLZXldKTsgLy9WYWx1ZSBpcyBzUGF0aFxuXHRcdG9QcmVwcm9jZXNzb3JTZXR0aW5ncy5tb2RlbHNbc0tleV0gPSBvTW9kZWw7XG5cdH0pO1xuXG5cdC8vVGhpcyBjb250ZXh0IGZvciBtYWNybyB0ZXN0aW5nXG5cdGlmIChvUHJlcHJvY2Vzc29yU2V0dGluZ3MubW9kZWxzW1widGhpc1wiXSkge1xuXHRcdG9QcmVwcm9jZXNzb3JTZXR0aW5ncy5iaW5kaW5nQ29udGV4dHNbXCJ0aGlzXCJdID0gb1ByZXByb2Nlc3NvclNldHRpbmdzLm1vZGVsc1tcInRoaXNcIl0uY3JlYXRlQmluZGluZ0NvbnRleHQoXCIvXCIpO1xuXHR9XG5cblx0cmV0dXJuIFhNTFByZXByb2Nlc3Nvci5wcm9jZXNzKHhtbERvYy5maXJzdEVsZW1lbnRDaGlsZCEsIHsgbmFtZTogXCJUZXN0IEZyYWdtZW50XCIgfSwgb1ByZXByb2Nlc3NvclNldHRpbmdzKTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRUZW1wbGF0ZWRYTUwgPSBhc3luYyBmdW5jdGlvbiAoXG5cdHhtbElucHV0OiBzdHJpbmcsXG5cdHNNZXRhZGF0YVVybDogc3RyaW5nLFxuXHRtQmluZGluZ0NvbnRleHRzOiB7IFt4OiBzdHJpbmddOiBhbnk7IGVudGl0eVNldD86IHN0cmluZyB9LFxuXHRtTW9kZWxzOiB7IFt4OiBzdHJpbmddOiBhbnkgfVxuKSB7XG5cdGNvbnN0IHRlbXBsYXRlZFhNTCA9IGF3YWl0IGdldFRlbXBsYXRpbmdSZXN1bHQoeG1sSW5wdXQsIHNNZXRhZGF0YVVybCwgbUJpbmRpbmdDb250ZXh0cywgbU1vZGVscyk7XG5cdHJldHVybiBzZXJpYWxpemVYTUwodGVtcGxhdGVkWE1MKTtcbn07XG5cbi8qKlxuICogUHJvY2VzcyB0aGUgcmVxdWVzdGVkIFhNTCBmcmFnbWVudCB3aXRoIHRoZSBwcm92aWRlZCBkYXRhLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIEZ1bGx5IHF1YWxpZmllZCBuYW1lIG9mIHRoZSBmcmFnbWVudCB0byBiZSB0ZXN0ZWQuXG4gKiBAcGFyYW0ge29iamVjdH0gdGVzdERhdGEgVGVzdCBkYXRhIGNvbnNpc3RpbmdcbiAqIEByZXR1cm5zIFRlbXBsYXRlZCBmcmFnbWVudCBhcyBzdHJpbmdcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHByb2Nlc3NGcmFnbWVudChuYW1lOiBzdHJpbmcsIHRlc3REYXRhOiB7IFttb2RlbDogc3RyaW5nXTogb2JqZWN0IH0pOiBQcm9taXNlPHN0cmluZz4ge1xuXHRjb25zdCBpbnB1dFhtbCA9IGA8cm9vdD48Y29yZTpGcmFnbWVudCBmcmFnbWVudE5hbWU9XCIke25hbWV9XCIgdHlwZT1cIlhNTFwiIHhtbG5zOmNvcmU9XCJzYXAudWkuY29yZVwiIC8+PC9yb290PmA7XG5cdGNvbnN0IHBhcnNlciA9IG5ldyB3aW5kb3cuRE9NUGFyc2VyKCk7XG5cdGNvbnN0IGlucHV0RG9jID0gcGFyc2VyLnBhcnNlRnJvbVN0cmluZyhpbnB1dFhtbCwgXCJ0ZXh0L3htbFwiKTtcblxuXHQvLyBidWlsZCBtb2RlbCBhbmQgYmluZGluZ3MgZm9yIGdpdmVuIHRlc3QgZGF0YVxuXHRjb25zdCBzZXR0aW5ncyA9IHtcblx0XHRtb2RlbHM6IHt9IGFzIHsgW25hbWU6IHN0cmluZ106IEpTT05Nb2RlbCB9LFxuXHRcdGJpbmRpbmdDb250ZXh0czoge30gYXMgeyBbbmFtZTogc3RyaW5nXTogb2JqZWN0IH1cblx0fTtcblx0Zm9yIChjb25zdCBtb2RlbCBpbiB0ZXN0RGF0YSkge1xuXHRcdGNvbnN0IGpzb25Nb2RlbCA9IG5ldyBKU09OTW9kZWwoKTtcblx0XHRqc29uTW9kZWwuc2V0RGF0YSh0ZXN0RGF0YVttb2RlbF0pO1xuXHRcdHNldHRpbmdzLm1vZGVsc1ttb2RlbF0gPSBqc29uTW9kZWw7XG5cdFx0c2V0dGluZ3MuYmluZGluZ0NvbnRleHRzW21vZGVsXSA9IHNldHRpbmdzLm1vZGVsc1ttb2RlbF0uY3JlYXRlQmluZGluZ0NvbnRleHQoXCIvXCIpIGFzIENvbnRleHQ7XG5cdH1cblxuXHQvLyBleGVjdXRlIHRoZSBwcmUtcHJvY2Vzc29yXG5cdGNvbnN0IHJlc3VsdERvYyA9IGF3YWl0IFhNTFByZXByb2Nlc3Nvci5wcm9jZXNzKGlucHV0RG9jLmZpcnN0RWxlbWVudENoaWxkLCB7IG5hbWUgfSwgc2V0dGluZ3MpO1xuXG5cdC8vIGV4Y2x1ZGUgbmVzdGVkIGZyYWdtZW50cyBmcm9tIHRlc3Qgc25hcHNob3RzXG5cdGNvbnN0IGZyYWdtZW50cyA9IHJlc3VsdERvYy5nZXRFbGVtZW50c0J5VGFnTmFtZShcImNvcmU6RnJhZ21lbnRcIik7XG5cdGlmIChmcmFnbWVudHM/Lmxlbmd0aCA+IDApIHtcblx0XHRmb3IgKGNvbnN0IGZyYWdtZW50IG9mIGZyYWdtZW50cykge1xuXHRcdFx0ZnJhZ21lbnQuaW5uZXJIVE1MID0gXCJcIjtcblx0XHR9XG5cdH1cblxuXHQvLyBLZWVwIHRoZSBmcmFnbWVudCByZXN1bHQgYXMgY2hpbGQgb2Ygcm9vdCBub2RlIHdoZW4gZnJhZ21lbnQgZ2VuZXJhdGVzIG11bHRpcGxlIHJvb3QgY29udHJvbHNcblx0Y29uc3QgeG1sUmVzdWx0ID0gcmVzdWx0RG9jLmNoaWxkcmVuLmxlbmd0aCA+IDEgPyByZXN1bHREb2Mub3V0ZXJIVE1MIDogcmVzdWx0RG9jLmlubmVySFRNTDtcblxuXHRyZXR1cm4gZm9ybWF0WG1sKHhtbFJlc3VsdCwge1xuXHRcdGZpbHRlcjogKG5vZGU6IGFueSkgPT4gbm9kZS50eXBlICE9PSBcIkNvbW1lbnRcIlxuXHR9KTtcbn1cbiJdfQ==
476
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkplc3RUZW1wbGF0aW5nSGVscGVyLnRzIl0sIm5hbWVzIjpbInByb2Nlc3NGcmFnbWVudCIsIm5hbWUiLCJ0ZXN0RGF0YSIsImlucHV0WG1sIiwicGFyc2VyIiwid2luZG93IiwiRE9NUGFyc2VyIiwiaW5wdXREb2MiLCJwYXJzZUZyb21TdHJpbmciLCJzZXR0aW5ncyIsIm1vZGVscyIsImJpbmRpbmdDb250ZXh0cyIsIm1vZGVsIiwianNvbk1vZGVsIiwiSlNPTk1vZGVsIiwic2V0RGF0YSIsImNyZWF0ZUJpbmRpbmdDb250ZXh0IiwiWE1MUHJlcHJvY2Vzc29yIiwicHJvY2VzcyIsImZpcnN0RWxlbWVudENoaWxkIiwicmVzdWx0RG9jIiwiZnJhZ21lbnRzIiwiZ2V0RWxlbWVudHNCeVRhZ05hbWUiLCJsZW5ndGgiLCJmcmFnbWVudCIsImlubmVySFRNTCIsInhtbFJlc3VsdCIsImNoaWxkcmVuIiwib3V0ZXJIVE1MIiwiZm9ybWF0WG1sIiwiZmlsdGVyIiwibm9kZSIsInR5cGUiLCJyZXF1aXJlIiwiTG9nIiwic2V0TGV2ZWwiLCJqZXN0Iiwic2V0VGltZW91dCIsIm5hbWVTcGFjZU1hcCIsInNlbGVjdCIsInhwYXRoIiwidXNlTmFtZXNwYWNlcyIsInJlZ2lzdGVyTWFjcm8iLCJtYWNyb01ldGFkYXRhIiwicmVnaXN0ZXJCdWlsZGluZ0Jsb2NrIiwidW5yZWdpc3Rlck1hY3JvIiwicGx1Z0luIiwibmFtZXNwYWNlIiwicHVibGljTmFtZXNwYWNlIiwicnVuWFBhdGhRdWVyeSIsInNlbGVjdG9yIiwieG1sZG9tIiwiZXhwZWN0IiwiZXh0ZW5kIiwidG9IYXZlQ29udHJvbCIsIm5vZGVzIiwibWVzc2FnZSIsIm91dHB1dFhtbCIsInNlcmlhbGl6ZVhNTCIsInBhc3MiLCJ0b05vdEhhdmVDb250cm9sIiwiZm9ybWF0QnVpbGRpbmdCbG9ja1hNTCIsInhtbFN0cmluZyIsIkFycmF5IiwiaXNBcnJheSIsImpvaW4iLCJ4bWxGb3JtYXR0ZWQiLCJmb3JtYXRYTUwiLCJyZXBsYWNlIiwiZ2V0Q29udHJvbEF0dHJpYnV0ZSIsImNvbnRyb2xTZWxlY3RvciIsImF0dHJpYnV0ZU5hbWUiLCJ4bWxEb20iLCJzZXJpYWxpemVyIiwiWE1MU2VyaWFsaXplciIsInNlcmlhbGl6ZVRvU3RyaW5nIiwiZm9ybWF0IiwieG1sV2hpdGVzcGFjZVNlbnNpdGl2aXR5IiwiY29tcGlsZUNEUyIsImNkc1VybCIsIm9wdGlvbnMiLCJlZG14RmlsZU5hbWUiLCJwYXRoIiwiYmFzZW5hbWUiLCJjZHNTdHJpbmciLCJmcyIsInJlYWRGaWxlU3luYyIsImVkbXhDb250ZW50IiwiY2RzMmVkbXgiLCJkaXIiLCJyZXNvbHZlIiwiZWRteEZpbGVQYXRoIiwibWtkaXJTeW5jIiwicmVjdXJzaXZlIiwid3JpdGVGaWxlU3luYyIsImNkcyIsInNlcnZpY2UiLCJjc24iLCJjb21waWxlciIsImNvbXBpbGVTb3VyY2VzIiwiZWRteE9wdGlvbnMiLCJvZGF0YUZvcmVpZ25LZXlzIiwib2RhdGFGb3JtYXQiLCJvZGF0YUNvbnRhaW5tZW50IiwiZWRteCIsInRvIiwiRXJyb3IiLCJnZXRGYWtlU2lkZUVmZmVjdHNTZXJ2aWNlIiwib01ldGFNb2RlbCIsIm9TZXJ2aWNlQ29udGV4dCIsInNjb3BlT2JqZWN0Iiwic2NvcGVUeXBlIiwiU2lkZUVmZmVjdHNGYWN0b3J5IiwiY3JlYXRlSW5zdGFuY2UiLCJ0aGVuIiwib1NlcnZpY2VJbnN0YW5jZSIsIm9KZXN0U2lkZUVmZmVjdHNTZXJ2aWNlIiwiZ2V0SW50ZXJmYWNlIiwiZ2V0Q29udGV4dCIsImdldE1vZGVsIiwiZ2V0TWV0YU1vZGVsIiwiZ2V0RmFrZURpYWdub3N0aWNzIiwiaXNzdWVzIiwiYWRkSXNzdWUiLCJpc3N1ZUNhdGVnb3J5IiwiaXNzdWVTZXZlcml0eSIsImRldGFpbHMiLCJwdXNoIiwiZ2V0SXNzdWVzIiwiY2hlY2tJZklzc3VlRXhpc3RzIiwiZmluZCIsImlzc3VlIiwiZ2V0Q29udmVydGVyQ29udGV4dEZvclRlc3QiLCJjb252ZXJ0ZWRUeXBlcyIsIm1hbmlmZXN0U2V0dGluZ3MiLCJlbnRpdHlTZXQiLCJlbnRpdHlTZXRzIiwiZXMiLCJkYXRhTW9kZWxQYXRoIiwiZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aEZvclByb3BlcnR5IiwiQ29udmVydGVyQ29udGV4dCIsIm1lcmdlIiwibWV0YU1vZGVsQ2FjaGUiLCJzTWV0YWRhdGFVcmwiLCJvUmVxdWVzdG9yIiwiX01ldGFkYXRhUmVxdWVzdG9yIiwiY3JlYXRlIiwiT0RhdGFNZXRhTW9kZWwiLCJ1bmRlZmluZWQiLCJmZXRjaEVudGl0eUNvbnRhaW5lciIsInByb3BlcnR5IiwidGFyZ2V0UGF0aCIsInN0YXJ0aW5nRW50aXR5U2V0IiwibmF2aWdhdGlvblByb3BlcnRpZXMiLCJ0YXJnZXRPYmplY3QiLCJ0YXJnZXRFbnRpdHlTZXQiLCJ0YXJnZXRFbnRpdHlUeXBlIiwiZW50aXR5VHlwZSIsImNvbnRleHRMb2NhdGlvbiIsImV2YWx1YXRlQmluZGluZyIsImJpbmRpbmdTdHJpbmciLCJiaW5kaW5nRWxlbWVudCIsIkJpbmRpbmdQYXJzZXIiLCJjb21wbGV4UGFyc2VyIiwiYXJncyIsImZvcm1hdHRlciIsImFwcGx5IiwiZXZhbHVhdGVCaW5kaW5nV2l0aE1vZGVsIiwibW9kZWxDb250ZW50IiwibmFtZWRNb2RlbHNDb250ZW50IiwidGV4dCIsIkludmlzaWJsZVRleHQiLCJiaW5kUHJvcGVydHkiLCJkZWZhdWx0TW9kZWwiLCJzZXRNb2RlbCIsInNldEJpbmRpbmdDb250ZXh0IiwiT2JqZWN0IiwiZW50cmllcyIsImNvbnRlbnQiLCJnZXRUZXh0IiwiZ2V0VGVtcGxhdGluZ1Jlc3VsdCIsInhtbElucHV0IiwibUJpbmRpbmdDb250ZXh0cyIsIm1Nb2RlbHMiLCJ0ZW1wbGF0ZWRYbWwiLCJ4bWxEb2MiLCJoYXNPd25Qcm9wZXJ0eSIsImFzc2lnbiIsIlRlbXBsYXRlTW9kZWwiLCJrZXlzIiwiZm9yRWFjaCIsInNNb2RlbE5hbWUiLCJpc1RlbXBsYXRlTW9kZWwiLCJkYXRhIiwib1ByZXByb2Nlc3NvclNldHRpbmdzIiwibWV0YU1vZGVsIiwic0tleSIsImdldE9iamVjdCIsInRvQmVEZWZpbmVkIiwib01vZGVsIiwiZ2V0VGVtcGxhdGVkWE1MIl0sIm1hcHBpbmdzIjoiO0FBQUE7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBdVZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO01BQ3NCQSxlLGFBQWdCQyxJLEVBQWNDLFE7UUFBd0Q7QUFDM0csVUFBTUMsUUFBUSxpREFBeUNGLElBQXpDLHlEQUFkO0FBQ0EsVUFBTUcsTUFBTSxHQUFHLElBQUlDLE1BQU0sQ0FBQ0MsU0FBWCxFQUFmO0FBQ0EsVUFBTUMsUUFBUSxHQUFHSCxNQUFNLENBQUNJLGVBQVAsQ0FBdUJMLFFBQXZCLEVBQWlDLFVBQWpDLENBQWpCLENBSDJHLENBSzNHOztBQUNBLFVBQU1NLFFBQVEsR0FBRztBQUNoQkMsUUFBQUEsTUFBTSxFQUFFLEVBRFE7QUFFaEJDLFFBQUFBLGVBQWUsRUFBRTtBQUZELE9BQWpCOztBQUlBLFdBQUssSUFBTUMsT0FBWCxJQUFvQlYsUUFBcEIsRUFBOEI7QUFDN0IsWUFBTVcsU0FBUyxHQUFHLElBQUlDLFNBQUosRUFBbEI7QUFDQUQsUUFBQUEsU0FBUyxDQUFDRSxPQUFWLENBQWtCYixRQUFRLENBQUNVLE9BQUQsQ0FBMUI7QUFDQUgsUUFBQUEsUUFBUSxDQUFDQyxNQUFULENBQWdCRSxPQUFoQixJQUF5QkMsU0FBekI7QUFDQUosUUFBQUEsUUFBUSxDQUFDRSxlQUFULENBQXlCQyxPQUF6QixJQUFrQ0gsUUFBUSxDQUFDQyxNQUFULENBQWdCRSxPQUFoQixFQUF1Qkksb0JBQXZCLENBQTRDLEdBQTVDLENBQWxDO0FBQ0EsT0FmMEcsQ0FpQjNHOzs7QUFqQjJHLDZCQWtCbkZDLGVBQWUsQ0FBQ0MsT0FBaEIsQ0FBd0JYLFFBQVEsQ0FBQ1ksaUJBQWpDLEVBQW9EO0FBQUVsQixRQUFBQSxJQUFJLEVBQUpBO0FBQUYsT0FBcEQsRUFBOERRLFFBQTlELENBbEJtRixp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TUFBdEIsQ0FBNkIwTCxJQUE3QixJQUFxQ0csTUFBckM7QUFDQSxTQU5ELEVBN0JDLENBcUNEOztBQUNBLFlBQUlMLHFCQUFxQixDQUFDeEwsTUFBdEIsQ0FBNkIsTUFBN0IsQ0FBSixFQUEwQztBQUN6Q3dMLFVBQUFBLHFCQUFxQixDQUFDdkwsZUFBdEIsQ0FBc0MsTUFBdEMsSUFBZ0R1TCxxQkFBcUIsQ0FBQ3hMLE1BQXRCLENBQTZCLE1BQTdCLEVBQXFDTSxvQkFBckMsQ0FBMEQsR0FBMUQsQ0FBaEQ7QUFDQTs7QUFFRCxlQUFPQyxlQUFlLENBQUNDLE9BQWhCLENBQXdCdUssTUFBTSxDQUFDdEssaUJBQS9CLEVBQW1EO0FBQUVsQixVQUFBQSxJQUFJLEVBQUU7QUFBUixTQUFuRCxFQUE4RWlNLHFCQUE5RSxDQUFQO0FBMUNDO0FBMkNELEtBaEQrQjtBQUFBO0FBQUE7QUFBQSxHQUF6Qjs7OztBQWtEQSxNQUFNTSxlQUFlLGFBQzNCbkIsUUFEMkIsRUFFM0J0QyxZQUYyQixFQUczQnVDLGdCQUgyQixFQUkzQkMsT0FKMkI7QUFBQSxRQUsxQjtBQUFBLDZCQUMwQkgsbUJBQW1CLENBQUNDLFFBQUQsRUFBV3RDLFlBQVgsRUFBeUJ1QyxnQkFBekIsRUFBMkNDLE9BQTNDLENBRDdDLE9BRU03SCxZQUZOO0FBR0QsS0FSMkI7QUFBQTtBQUFBO0FBQUEsR0FBckIiLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFueUFubm90YXRpb24sIENvbnZlcnRlck91dHB1dCwgRW50aXR5U2V0LCBQcm9wZXJ0eSB9IGZyb20gXCJAc2FwLXV4L2Fubm90YXRpb24tY29udmVydGVyXCI7XG5pbXBvcnQgY29tcGlsZXIgZnJvbSBcIkBzYXAvY2RzLWNvbXBpbGVyXCI7XG5pbXBvcnQgKiBhcyBmcyBmcm9tIFwiZnNcIjtcbmltcG9ydCAqIGFzIHBhdGggZnJvbSBcInBhdGhcIjtcbmltcG9ydCB7IGZvcm1hdCwgUmVxdWlyZWRPcHRpb25zIH0gZnJvbSBcInByZXR0aWVyXCI7XG5pbXBvcnQgTG9nIGZyb20gXCJzYXAvYmFzZS9Mb2dcIjtcbmltcG9ydCBtZXJnZSBmcm9tIFwic2FwL2Jhc2UvdXRpbC9tZXJnZVwiO1xuaW1wb3J0IHsgcmVnaXN0ZXJCdWlsZGluZ0Jsb2NrIH0gZnJvbSBcInNhcC9mZS9jb3JlL2J1aWxkaW5nQmxvY2tzL0J1aWxkaW5nQmxvY2tSdW50aW1lXCI7XG5pbXBvcnQgQ29udmVydGVyQ29udGV4dCBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9Db252ZXJ0ZXJDb250ZXh0XCI7XG5pbXBvcnQgeyBJc3N1ZUNhdGVnb3J5LCBJc3N1ZVNldmVyaXR5IH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvaGVscGVycy9Jc3N1ZU1hbmFnZXJcIjtcbmltcG9ydCB7IExpc3RSZXBvcnRNYW5pZmVzdFNldHRpbmdzLCBPYmplY3RQYWdlTWFuaWZlc3RTZXR0aW5ncyB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL01hbmlmZXN0U2V0dGluZ3NcIjtcbmltcG9ydCB7IElEaWFnbm9zdGljcyB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL1RlbXBsYXRlQ29udmVydGVyXCI7XG5pbXBvcnQgU2lkZUVmZmVjdHNGYWN0b3J5IGZyb20gXCJzYXAvZmUvY29yZS9zZXJ2aWNlcy9TaWRlRWZmZWN0c1NlcnZpY2VGYWN0b3J5XCI7XG5pbXBvcnQgVGVtcGxhdGVNb2RlbCBmcm9tIFwic2FwL2ZlL2NvcmUvVGVtcGxhdGVNb2RlbFwiO1xuaW1wb3J0IHsgRGF0YU1vZGVsT2JqZWN0UGF0aCB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL0RhdGFNb2RlbFBhdGhIZWxwZXJcIjtcbmltcG9ydCBCaW5kaW5nUGFyc2VyIGZyb20gXCJzYXAvdWkvYmFzZS9CaW5kaW5nUGFyc2VyXCI7XG5pbXBvcnQgSW52aXNpYmxlVGV4dCBmcm9tIFwic2FwL3VpL2NvcmUvSW52aXNpYmxlVGV4dFwiO1xuaW1wb3J0IFhNTFByZXByb2Nlc3NvciBmcm9tIFwic2FwL3VpL2NvcmUvdXRpbC9YTUxQcmVwcm9jZXNzb3JcIjtcbmltcG9ydCBDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvQ29udGV4dFwiO1xuaW1wb3J0IEpTT05Nb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL2pzb24vSlNPTk1vZGVsXCI7XG5pbXBvcnQgX01ldGFkYXRhUmVxdWVzdG9yIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvbGliL19NZXRhZGF0YVJlcXVlc3RvclwiO1xuaW1wb3J0IE9EYXRhTWV0YU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFNZXRhTW9kZWxcIjtcbmltcG9ydCB4cGF0aCBmcm9tIFwieHBhdGhcIjtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdmFyLXJlcXVpcmVzXG5jb25zdCBmb3JtYXRYbWwgPSByZXF1aXJlKFwieG1sLWZvcm1hdHRlclwiKTtcblxuTG9nLnNldExldmVsKDEgYXMgYW55LCBcInNhcC51aS5jb3JlLnV0aWwuWE1MUHJlcHJvY2Vzc29yXCIpO1xuamVzdC5zZXRUaW1lb3V0KDQwMDAwKTtcblxuY29uc3QgbmFtZVNwYWNlTWFwID0ge1xuXHRcIm1hY3Jvc1wiOiBcInNhcC5mZS5tYWNyb3NcIixcblx0XCJtYWNyb1wiOiBcInNhcC5mZS5tYWNyb3NcIixcblx0XCJtYWNyb2RhdGFcIjogXCJodHRwOi8vc2NoZW1hcy5zYXAuY29tL3NhcHVpNS9leHRlbnNpb24vc2FwLnVpLmNvcmUuQ3VzdG9tRGF0YS8xXCIsXG5cdFwibG9nXCI6IFwiaHR0cDovL3NjaGVtYXMuc2FwLmNvbS9zYXB1aTUvZXh0ZW5zaW9uL3NhcC51aS5jb3JlLkN1c3RvbURhdGEvMVwiLFxuXHRcInVuaXR0ZXN0XCI6IFwiaHR0cDovL3NjaGVtYXMuc2FwLmNvbS9zYXB1aTUvcHJlcHJvY2Vzc29yZXh0ZW5zaW9uL3NhcC5mZS51bml0dGVzdGluZy8xXCIsXG5cdFwiY29udHJvbFwiOiBcInNhcC5mZS5jb3JlLmNvbnRyb2xzXCIsXG5cdFwiY29yZVwiOiBcInNhcC51aS5jb3JlXCIsXG5cdFwibVwiOiBcInNhcC5tXCIsXG5cdFwiZlwiOiBcInNhcC51aS5sYXlvdXQuZm9ybVwiLFxuXHRcImludGVybmFsTWFjcm9cIjogXCJzYXAuZmUubWFjcm9zLmludGVybmFsXCIsXG5cdFwibWRjXCI6IFwic2FwLnVpLm1kY1wiLFxuXHRcIm1kY2F0XCI6IFwic2FwLnVpLm1kYy5hY3Rpb250b29sYmFyXCIsXG5cdFwibWRjRmllbGRcIjogXCJzYXAudWkubWRjLmZpZWxkXCIsXG5cdFwibWRjVGFibGVcIjogXCJzYXAudWkubWRjLnRhYmxlXCIsXG5cdFwidVwiOiBcInNhcC51aS51bmlmaWVkXCIsXG5cdFwibWFjcm9NaWNyb0NoYXJ0XCI6IFwic2FwLmZlLm1hY3Jvcy5taWNyb2NoYXJ0XCIsXG5cdFwibWljcm9DaGFydFwiOiBcInNhcC5zdWl0ZS51aS5taWNyb2NoYXJ0XCIsXG5cdFwibWFjcm9UYWJsZVwiOiBcInNhcC5mZS5tYWNyb3MudGFibGVcIlxufTtcbmNvbnN0IHNlbGVjdCA9IHhwYXRoLnVzZU5hbWVzcGFjZXMobmFtZVNwYWNlTWFwKTtcblxuZXhwb3J0IGNvbnN0IHJlZ2lzdGVyTWFjcm8gPSBmdW5jdGlvbiAobWFjcm9NZXRhZGF0YTogYW55KSB7XG5cdHJlZ2lzdGVyQnVpbGRpbmdCbG9jayhtYWNyb01ldGFkYXRhKTtcbn07XG5leHBvcnQgY29uc3QgdW5yZWdpc3Rlck1hY3JvID0gZnVuY3Rpb24gKG1hY3JvTWV0YWRhdGE6IGFueSkge1xuXHRYTUxQcmVwcm9jZXNzb3IucGx1Z0luKG51bGwsIG1hY3JvTWV0YWRhdGEubmFtZXNwYWNlLCBtYWNyb01ldGFkYXRhLm5hbWUpO1xuXHRpZiAobWFjcm9NZXRhZGF0YS5wdWJsaWNOYW1lc3BhY2UpIHtcblx0XHRYTUxQcmVwcm9jZXNzb3IucGx1Z0luKG51bGwsIG1hY3JvTWV0YWRhdGEucHVibGljTmFtZXNwYWNlLCBtYWNyb01ldGFkYXRhLm5hbWUpO1xuXHR9XG59O1xuZXhwb3J0IGNvbnN0IHJ1blhQYXRoUXVlcnkgPSBmdW5jdGlvbiAoc2VsZWN0b3I6IHN0cmluZywgeG1sZG9tOiBOb2RlIHwgdW5kZWZpbmVkKSB7XG5cdHJldHVybiBzZWxlY3Qoc2VsZWN0b3IsIHhtbGRvbSk7XG59O1xuXG5leHBlY3QuZXh0ZW5kKHtcblx0dG9IYXZlQ29udHJvbCh4bWxkb20sIHNlbGVjdG9yKSB7XG5cdFx0Y29uc3Qgbm9kZXMgPSBydW5YUGF0aFF1ZXJ5KGAvcm9vdCR7c2VsZWN0b3J9YCwgeG1sZG9tKTtcblx0XHRyZXR1cm4ge1xuXHRcdFx0bWVzc2FnZTogKCkgPT4ge1xuXHRcdFx0XHRjb25zdCBvdXRwdXRYbWwgPSBzZXJpYWxpemVYTUwoeG1sZG9tKTtcblx0XHRcdFx0cmV0dXJuIGBkaWQgbm90IGZpbmQgY29udHJvbHMgbWF0Y2hpbmcgJHtzZWxlY3Rvcn0gaW4gZ2VuZXJhdGVkIHhtbDpcXG4gJHtvdXRwdXRYbWx9YDtcblx0XHRcdH0sXG5cdFx0XHRwYXNzOiBub2RlcyAmJiBub2Rlcy5sZW5ndGggPj0gMVxuXHRcdH07XG5cdH0sXG5cdHRvTm90SGF2ZUNvbnRyb2woeG1sZG9tLCBzZWxlY3Rvcikge1xuXHRcdGNvbnN0IG5vZGVzID0gcnVuWFBhdGhRdWVyeShgL3Jvb3Qke3NlbGVjdG9yfWAsIHhtbGRvbSk7XG5cdFx0cmV0dXJuIHtcblx0XHRcdG1lc3NhZ2U6ICgpID0+IHtcblx0XHRcdFx0Y29uc3Qgb3V0cHV0WG1sID0gc2VyaWFsaXplWE1MKHhtbGRvbSk7XG5cdFx0XHRcdHJldHVybiBgVGhlcmUgaXMgYSBjb250cm9sIG1hdGNoaW5nICR7c2VsZWN0b3J9IGluIGdlbmVyYXRlZCB4bWw6XFxuICR7b3V0cHV0WG1sfWA7XG5cdFx0XHR9LFxuXHRcdFx0cGFzczogbm9kZXMgJiYgbm9kZXMubGVuZ3RoID09PSAwXG5cdFx0fTtcblx0fVxufSk7XG5cbmV4cG9ydCBjb25zdCBmb3JtYXRCdWlsZGluZ0Jsb2NrWE1MID0gZnVuY3Rpb24gKHhtbFN0cmluZzogc3RyaW5nIHwgc3RyaW5nW10pIHtcblx0aWYgKEFycmF5LmlzQXJyYXkoeG1sU3RyaW5nKSkge1xuXHRcdHhtbFN0cmluZyA9IHhtbFN0cmluZy5qb2luKFwiXCIpO1xuXHR9XG5cdGxldCB4bWxGb3JtYXR0ZWQgPSBmb3JtYXRYTUwoeG1sU3RyaW5nKTtcblx0eG1sRm9ybWF0dGVkID0geG1sRm9ybWF0dGVkLnJlcGxhY2UoL3VpZC0taWQtWzAtOV17MTN9LVswLTldL2csIFwidWlkLS1pZFwiKTtcblx0cmV0dXJuIHhtbEZvcm1hdHRlZDtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRDb250cm9sQXR0cmlidXRlID0gZnVuY3Rpb24gKGNvbnRyb2xTZWxlY3Rvcjogc3RyaW5nLCBhdHRyaWJ1dGVOYW1lOiBzdHJpbmcsIHhtbERvbTogTm9kZSkge1xuXHRjb25zdCBzZWxlY3RvciA9IGBzdHJpbmcoL3Jvb3Qke2NvbnRyb2xTZWxlY3Rvcn0vQCR7YXR0cmlidXRlTmFtZX0pYDtcblx0cmV0dXJuIHJ1blhQYXRoUXVlcnkoc2VsZWN0b3IsIHhtbERvbSk7XG59O1xuXG5jb25zdCBzZXJpYWxpemVYTUwgPSBmdW5jdGlvbiAoeG1sRG9tOiBOb2RlKSB7XG5cdGNvbnN0IHNlcmlhbGl6ZXIgPSBuZXcgd2luZG93LlhNTFNlcmlhbGl6ZXIoKTtcblx0Y29uc3QgeG1sU3RyaW5nID0gc2VyaWFsaXplci5zZXJpYWxpemVUb1N0cmluZyh4bWxEb20pO1xuXHRyZXR1cm4gZm9ybWF0WE1MKHhtbFN0cmluZyk7XG59O1xuXG5leHBvcnQgY29uc3QgZm9ybWF0WE1MID0gZnVuY3Rpb24gKHhtbFN0cmluZzogc3RyaW5nKSB7XG5cdHJldHVybiBmb3JtYXQoXG5cdFx0eG1sU3RyaW5nLFxuXHRcdHsgcGFyc2VyOiBcInhtbFwiLCB4bWxXaGl0ZXNwYWNlU2Vuc2l0aXZpdHk6IFwiaWdub3JlXCIgfSBhcyBQYXJ0aWFsPFJlcXVpcmVkT3B0aW9ucz4gLyogb3B0aW9ucyBieSB0aGUgUHJldHRpZXIgWE1MIHBsdWdpbiAqL1xuXHQpO1xufTtcblxuLyoqXG4gKiBDb21waWxlIGEgQ0RTIGZpbGUgaW50byBhbiBFRE1YIGZpbGUuXG4gKlxuICogQHBhcmFtIGNkc1VybCBUaGUgcGF0aCB0byB0aGUgZmlsZSBjb250YWluaW5nIHRoZSBDRFMgZGVmaW5pdGlvbi4gVGhpcyBmaWxlIG11c3QgZGVjbGFyZSB0aGUgbmFtZXNwYWNlIHNhcC5mZS50ZXN0IGFuZCBhIHNlcnZpY2UgSmVzdFNlcnZpY2VcbiAqIEBwYXJhbSBvcHRpb25zIE9wdGlvbnMgZm9yIGNyZWF0aW5nIHRoZSBFRE1YIG91dHB1dFxuICogQHBhcmFtIGVkbXhGaWxlTmFtZSBBbGxvd3MgeW91IHRvIG92ZXJyaWRlIHRoZSBuYW1lIG9mIHRoZSBjb21waWxlZCBFRE1YIG1ldGFkYXRhIGZpbGVcbiAqIEByZXR1cm5zIFRoZSBwYXRoIG9mIHRoZSBnZW5lcmF0ZWQgRURNWFxuICovXG5leHBvcnQgY29uc3QgY29tcGlsZUNEUyA9IGZ1bmN0aW9uIChcblx0Y2RzVXJsOiBzdHJpbmcsXG5cdG9wdGlvbnM6IGNvbXBpbGVyLk9EYXRhT3B0aW9ucyA9IHt9LFxuXHRlZG14RmlsZU5hbWUgPSBwYXRoLmJhc2VuYW1lKGNkc1VybCkucmVwbGFjZShcIi5jZHNcIiwgXCIueG1sXCIpXG4pIHtcblx0Y29uc3QgY2RzU3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKGNkc1VybCwgXCJ1dGYtOFwiKTtcblx0Y29uc3QgZWRteENvbnRlbnQgPSBjZHMyZWRteChjZHNTdHJpbmcsIFwic2FwLmZlLnRlc3QuSmVzdFNlcnZpY2VcIiwgb3B0aW9ucyk7XG5cdGNvbnN0IGRpciA9IHBhdGgucmVzb2x2ZShjZHNVcmwsIFwiLi5cIiwgXCJnZW5cIik7XG5cblx0Y29uc3QgZWRteEZpbGVQYXRoID0gcGF0aC5yZXNvbHZlKGRpciwgZWRteEZpbGVOYW1lKTtcblxuXHRmcy5ta2RpclN5bmMoZGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcblxuXHRmcy53cml0ZUZpbGVTeW5jKGVkbXhGaWxlUGF0aCwgZWRteENvbnRlbnQpO1xuXHRyZXR1cm4gZWRteEZpbGVQYXRoO1xufTtcblxuLyoqXG4gKiBDb21waWxlIENEUyB0byBFRE1YLlxuICpcbiAqIEBwYXJhbSBjZHMgVGhlIENEUyBtb2RlbC4gSXQgbXVzdCBkZWZpbmUgYXQgbGVhc3Qgb25lIHNlcnZpY2UuXG4gKiBAcGFyYW0gc2VydmljZSBUaGUgZnVsbHktcXVhbGlmaWVkIG5hbWUgb2YgdGhlIHNlcnZpY2UgdG8gYmUgY29tcGlsZWQuIERlZmF1bHRzIHRvIFwic2FwLmZlLnRlc3QuSmVzdFNlcnZpY2VcIi5cbiAqIEBwYXJhbSBvcHRpb25zIE9wdGlvbnMgZm9yIGNyZWF0aW5nIHRoZSBFRE1YIG91dHB1dFxuICogQHJldHVybnMgVGhlIGNvbXBpbGVkIHNlcnZpY2UgbW9kZWwgYXMgRURNWC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNkczJlZG14KGNkczogc3RyaW5nLCBzZXJ2aWNlID0gXCJzYXAuZmUudGVzdC5KZXN0U2VydmljZVwiLCBvcHRpb25zOiBjb21waWxlci5PRGF0YU9wdGlvbnMgPSB7fSkge1xuXHRjb25zdCBjc24gPSBjb21waWxlci5jb21waWxlU291cmNlcyh7IFwic3RyaW5nLmNkc1wiOiBjZHMgfSwge30pO1xuXG5cdGNvbnN0IGVkbXhPcHRpb25zOiBjb21waWxlci5PRGF0YU9wdGlvbnMgPSB7XG5cdFx0b2RhdGFGb3JlaWduS2V5czogdHJ1ZSxcblx0XHRvZGF0YUZvcm1hdDogXCJzdHJ1Y3R1cmVkXCIsXG5cdFx0b2RhdGFDb250YWlubWVudDogZmFsc2UsXG5cdFx0Li4ub3B0aW9ucyxcblx0XHRzZXJ2aWNlOiBzZXJ2aWNlXG5cdH07XG5cblx0Y29uc3QgZWRteCA9IGNvbXBpbGVyLnRvLmVkbXgoY3NuLCBlZG14T3B0aW9ucyk7XG5cdGlmICghZWRteCkge1xuXHRcdHRocm93IG5ldyBFcnJvcihgQ29tcGlsYXRpb24gZmFpbGVkLiBIaW50OiBNYWtlIHN1cmUgdGhhdCB0aGUgQ0RTIG1vZGVsIGRlZmluZXMgc2VydmljZSAke3NlcnZpY2V9LmApO1xuXHR9XG5cdHJldHVybiBlZG14O1xufVxuXG5leHBvcnQgY29uc3QgZ2V0RmFrZVNpZGVFZmZlY3RzU2VydmljZSA9IGFzeW5jIGZ1bmN0aW9uIChvTWV0YU1vZGVsOiBPRGF0YU1ldGFNb2RlbCk6IFByb21pc2U8YW55PiB7XG5cdGNvbnN0IG9TZXJ2aWNlQ29udGV4dCA9IHsgc2NvcGVPYmplY3Q6IHt9LCBzY29wZVR5cGU6IFwiXCIsIHNldHRpbmdzOiB7fSB9O1xuXHRyZXR1cm4gbmV3IFNpZGVFZmZlY3RzRmFjdG9yeSgpLmNyZWF0ZUluc3RhbmNlKG9TZXJ2aWNlQ29udGV4dCkudGhlbihmdW5jdGlvbiAob1NlcnZpY2VJbnN0YW5jZTogYW55KSB7XG5cdFx0Y29uc3Qgb0plc3RTaWRlRWZmZWN0c1NlcnZpY2UgPSBvU2VydmljZUluc3RhbmNlLmdldEludGVyZmFjZSgpO1xuXHRcdG9KZXN0U2lkZUVmZmVjdHNTZXJ2aWNlLmdldENvbnRleHQgPSBmdW5jdGlvbiAoKSB7XG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRzY29wZU9iamVjdDoge1xuXHRcdFx0XHRcdGdldE1vZGVsOiBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRcdFx0XHRnZXRNZXRhTW9kZWw6IGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gb01ldGFNb2RlbDtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH07XG5cdFx0fTtcblx0XHRyZXR1cm4gb0plc3RTaWRlRWZmZWN0c1NlcnZpY2U7XG5cdH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEZha2VEaWFnbm9zdGljcyA9IGZ1bmN0aW9uICgpOiBJRGlhZ25vc3RpY3Mge1xuXHRjb25zdCBpc3N1ZXM6IGFueVtdID0gW107XG5cdHJldHVybiB7XG5cdFx0YWRkSXNzdWUoaXNzdWVDYXRlZ29yeTogSXNzdWVDYXRlZ29yeSwgaXNzdWVTZXZlcml0eTogSXNzdWVTZXZlcml0eSwgZGV0YWlsczogc3RyaW5nKTogdm9pZCB7XG5cdFx0XHRpc3N1ZXMucHVzaCh7XG5cdFx0XHRcdGlzc3VlQ2F0ZWdvcnksXG5cdFx0XHRcdGlzc3VlU2V2ZXJpdHksXG5cdFx0XHRcdGRldGFpbHNcblx0XHRcdH0pO1xuXHRcdH0sXG5cdFx0Z2V0SXNzdWVzKCk6IGFueVtdIHtcblx0XHRcdHJldHVybiBpc3N1ZXM7XG5cdFx0fSxcblx0XHRjaGVja0lmSXNzdWVFeGlzdHMoaXNzdWVDYXRlZ29yeTogSXNzdWVDYXRlZ29yeSwgaXNzdWVTZXZlcml0eTogSXNzdWVTZXZlcml0eSwgZGV0YWlsczogc3RyaW5nKTogYm9vbGVhbiB7XG5cdFx0XHRyZXR1cm4gaXNzdWVzLmZpbmQoKGlzc3VlKSA9PiB7XG5cdFx0XHRcdGlzc3VlLmlzc3VlQ2F0ZWdvcnkgPT09IGlzc3VlQ2F0ZWdvcnkgJiYgaXNzdWUuaXNzdWVTZXZlcml0eSA9PT0gaXNzdWVTZXZlcml0eSAmJiBpc3N1ZS5kZXRhaWxzID09PSBkZXRhaWxzO1xuXHRcdFx0fSk7XG5cdFx0fVxuXHR9O1xufTtcblxuZXhwb3J0IGNvbnN0IGdldENvbnZlcnRlckNvbnRleHRGb3JUZXN0ID0gZnVuY3Rpb24gKFxuXHRjb252ZXJ0ZWRUeXBlczogQ29udmVydGVyT3V0cHV0LFxuXHRtYW5pZmVzdFNldHRpbmdzOiBMaXN0UmVwb3J0TWFuaWZlc3RTZXR0aW5ncyB8IE9iamVjdFBhZ2VNYW5pZmVzdFNldHRpbmdzXG4pIHtcblx0Y29uc3QgZW50aXR5U2V0ID0gY29udmVydGVkVHlwZXMuZW50aXR5U2V0cy5maW5kKChlcykgPT4gZXMubmFtZSA9PT0gbWFuaWZlc3RTZXR0aW5ncy5lbnRpdHlTZXQpO1xuXHRjb25zdCBkYXRhTW9kZWxQYXRoID0gZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aEZvclByb3BlcnR5KGVudGl0eVNldCBhcyBFbnRpdHlTZXQsIGNvbnZlcnRlZFR5cGVzLCBlbnRpdHlTZXQpO1xuXHRyZXR1cm4gbmV3IENvbnZlcnRlckNvbnRleHQoY29udmVydGVkVHlwZXMsIG1hbmlmZXN0U2V0dGluZ3MsIGdldEZha2VEaWFnbm9zdGljcygpLCBtZXJnZSwgZGF0YU1vZGVsUGF0aCk7XG59O1xuY29uc3QgbWV0YU1vZGVsQ2FjaGU6IGFueSA9IHt9O1xuZXhwb3J0IGNvbnN0IGdldE1ldGFNb2RlbCA9IGFzeW5jIGZ1bmN0aW9uIChzTWV0YWRhdGFVcmw6IHN0cmluZykge1xuXHRjb25zdCBvUmVxdWVzdG9yID0gX01ldGFkYXRhUmVxdWVzdG9yLmNyZWF0ZSh7fSwgXCI0LjBcIiwge30pO1xuXHRpZiAoIW1ldGFNb2RlbENhY2hlW3NNZXRhZGF0YVVybF0pIHtcblx0XHRjb25zdCBvTWV0YU1vZGVsID0gbmV3IChPRGF0YU1ldGFNb2RlbCBhcyBhbnkpKG9SZXF1ZXN0b3IsIHNNZXRhZGF0YVVybCwgdW5kZWZpbmVkLCBudWxsKTtcblx0XHRhd2FpdCBvTWV0YU1vZGVsLmZldGNoRW50aXR5Q29udGFpbmVyKCk7XG5cdFx0bWV0YU1vZGVsQ2FjaGVbc01ldGFkYXRhVXJsXSA9IG9NZXRhTW9kZWw7XG5cdH1cblxuXHRyZXR1cm4gbWV0YU1vZGVsQ2FjaGVbc01ldGFkYXRhVXJsXTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXREYXRhTW9kZWxPYmplY3RQYXRoRm9yUHJvcGVydHkgPSBmdW5jdGlvbiAoXG5cdGVudGl0eVNldDogRW50aXR5U2V0LFxuXHRjb252ZXJ0ZWRUeXBlczogQ29udmVydGVyT3V0cHV0LFxuXHRwcm9wZXJ0eT86IFByb3BlcnR5IHwgRW50aXR5U2V0IHwgQW55QW5ub3RhdGlvblxuKTogRGF0YU1vZGVsT2JqZWN0UGF0aCB7XG5cdGNvbnN0IHRhcmdldFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGggPSB7XG5cdFx0c3RhcnRpbmdFbnRpdHlTZXQ6IGVudGl0eVNldCxcblx0XHRuYXZpZ2F0aW9uUHJvcGVydGllczogW10sXG5cdFx0dGFyZ2V0T2JqZWN0OiBwcm9wZXJ0eSxcblx0XHR0YXJnZXRFbnRpdHlTZXQ6IGVudGl0eVNldCxcblx0XHR0YXJnZXRFbnRpdHlUeXBlOiBlbnRpdHlTZXQuZW50aXR5VHlwZSxcblx0XHRjb252ZXJ0ZWRUeXBlczogY29udmVydGVkVHlwZXNcblx0fTtcblx0dGFyZ2V0UGF0aC5jb250ZXh0TG9jYXRpb24gPSB0YXJnZXRQYXRoO1xuXHRyZXR1cm4gdGFyZ2V0UGF0aDtcbn07XG5cbmV4cG9ydCBjb25zdCBldmFsdWF0ZUJpbmRpbmcgPSBmdW5jdGlvbiAoYmluZGluZ1N0cmluZzogc3RyaW5nLCAuLi5hcmdzOiBhbnlbXSkge1xuXHRjb25zdCBiaW5kaW5nRWxlbWVudCA9IEJpbmRpbmdQYXJzZXIuY29tcGxleFBhcnNlcihiaW5kaW5nU3RyaW5nKTtcblx0cmV0dXJuIGJpbmRpbmdFbGVtZW50LmZvcm1hdHRlci5hcHBseSh1bmRlZmluZWQsIGFyZ3MpO1xufTtcblxudHlwZSBNb2RlbENvbnRlbnQgPSB7XG5cdFtuYW1lOiBzdHJpbmddOiBhbnk7XG59O1xuXG4vKipcbiAqIEV2YWx1YXRlIGEgYmluZGluZyBhZ2FpbnN0IGEgbW9kZWwuXG4gKlxuICogQHBhcmFtIGJpbmRpbmdTdHJpbmcgVGhlIGJpbmRpbmcgc3RyaW5nLlxuICogQHBhcmFtIG1vZGVsQ29udGVudCBDb250ZW50IG9mIHRoZSBkZWZhdWx0IG1vZGVsIHRvIHVzZSBmb3IgZXZhbHVhdGlvbi5cbiAqIEBwYXJhbSBuYW1lZE1vZGVsc0NvbnRlbnQgQ29udGVudHMgb2YgYWRkaXRpb25hbCwgbmFtZWQgbW9kZWxzIHRvIHVzZS5cbiAqIEByZXR1cm5zIFRoZSBldmFsdWF0ZWQgYmluZGluZy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGV2YWx1YXRlQmluZGluZ1dpdGhNb2RlbChcblx0YmluZGluZ1N0cmluZzogc3RyaW5nIHwgdW5kZWZpbmVkLFxuXHRtb2RlbENvbnRlbnQ6IE1vZGVsQ29udGVudCxcblx0bmFtZWRNb2RlbHNDb250ZW50PzogeyBbbW9kZWxOYW1lOiBzdHJpbmddOiBNb2RlbENvbnRlbnQgfVxuKTogc3RyaW5nIHtcblx0Y29uc3QgYmluZGluZ0VsZW1lbnQgPSBCaW5kaW5nUGFyc2VyLmNvbXBsZXhQYXJzZXIoYmluZGluZ1N0cmluZyk7XG5cdGNvbnN0IHRleHQgPSBuZXcgSW52aXNpYmxlVGV4dCgpO1xuXHR0ZXh0LmJpbmRQcm9wZXJ0eShcInRleHRcIiwgYmluZGluZ0VsZW1lbnQpO1xuXG5cdGNvbnN0IGRlZmF1bHRNb2RlbCA9IG5ldyBKU09OTW9kZWwobW9kZWxDb250ZW50KTtcblx0dGV4dC5zZXRNb2RlbChkZWZhdWx0TW9kZWwpO1xuXHR0ZXh0LnNldEJpbmRpbmdDb250ZXh0KGRlZmF1bHRNb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChcIi9cIikgYXMgQ29udGV4dCk7XG5cblx0aWYgKG5hbWVkTW9kZWxzQ29udGVudCkge1xuXHRcdGZvciAoY29uc3QgW25hbWUsIGNvbnRlbnRdIG9mIE9iamVjdC5lbnRyaWVzKG5hbWVkTW9kZWxzQ29udGVudCkpIHtcblx0XHRcdGNvbnN0IG1vZGVsID0gbmV3IEpTT05Nb2RlbChjb250ZW50KTtcblx0XHRcdHRleHQuc2V0TW9kZWwobW9kZWwsIG5hbWUpO1xuXHRcdFx0dGV4dC5zZXRCaW5kaW5nQ29udGV4dChtb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChcIi9cIikgYXMgQ29udGV4dCwgbmFtZSk7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHRleHQuZ2V0VGV4dCgpO1xufVxuXG5leHBvcnQgY29uc3QgZ2V0VGVtcGxhdGluZ1Jlc3VsdCA9IGFzeW5jIGZ1bmN0aW9uIChcblx0eG1sSW5wdXQ6IHN0cmluZyxcblx0c01ldGFkYXRhVXJsOiBzdHJpbmcsXG5cdG1CaW5kaW5nQ29udGV4dHM6IHsgW3g6IHN0cmluZ106IGFueTsgZW50aXR5U2V0Pzogc3RyaW5nIH0sXG5cdG1Nb2RlbHM6IHsgW3g6IHN0cmluZ106IGFueSB9XG4pIHtcblx0Y29uc3QgdGVtcGxhdGVkWG1sID0gYDxyb290PiR7eG1sSW5wdXR9PC9yb290PmA7XG5cdGNvbnN0IHBhcnNlciA9IG5ldyB3aW5kb3cuRE9NUGFyc2VyKCk7XG5cdGNvbnN0IHhtbERvYyA9IHBhcnNlci5wYXJzZUZyb21TdHJpbmcodGVtcGxhdGVkWG1sLCBcInRleHQveG1sXCIpO1xuXHQvLyBUbyBlbnN1cmUgb3VyIG1hY3JvIGNhbiB1c2UgI3NldEJpbmRpbmdDb250ZXh0IHdlIGVuc3VyZSB0aGVyZSBpcyBhIHByZSBleGlzdGluZyBKU09OTW9kZWwgZm9yIGNvbnZlcnRlckNvbnRleHRcblx0Ly8gaWYgbm90IGFscmVhZHkgcGFzc2VkIHRvIHRlaCB0ZW1wbGF0aW5nXG5cblx0Y29uc3Qgb01ldGFNb2RlbCA9IGF3YWl0IGdldE1ldGFNb2RlbChzTWV0YWRhdGFVcmwpO1xuXHRpZiAoIW1Nb2RlbHMuaGFzT3duUHJvcGVydHkoXCJjb252ZXJ0ZXJDb250ZXh0XCIpKSB7XG5cdFx0bU1vZGVscyA9IE9iamVjdC5hc3NpZ24obU1vZGVscywgeyBcImNvbnZlcnRlckNvbnRleHRcIjogbmV3IFRlbXBsYXRlTW9kZWwoe30sIG9NZXRhTW9kZWwpIH0pO1xuXHR9XG5cblx0T2JqZWN0LmtleXMobU1vZGVscykuZm9yRWFjaChmdW5jdGlvbiAoc01vZGVsTmFtZSkge1xuXHRcdGlmIChtTW9kZWxzW3NNb2RlbE5hbWVdICYmIG1Nb2RlbHNbc01vZGVsTmFtZV0uaXNUZW1wbGF0ZU1vZGVsKSB7XG5cdFx0XHRtTW9kZWxzW3NNb2RlbE5hbWVdID0gbmV3IFRlbXBsYXRlTW9kZWwobU1vZGVsc1tzTW9kZWxOYW1lXS5kYXRhLCBvTWV0YU1vZGVsKTtcblx0XHR9XG5cdH0pO1xuXG5cdGNvbnN0IG9QcmVwcm9jZXNzb3JTZXR0aW5nczogYW55ID0ge1xuXHRcdG1vZGVsczogT2JqZWN0LmFzc2lnbihcblx0XHRcdHtcblx0XHRcdFx0bWV0YU1vZGVsOiBvTWV0YU1vZGVsXG5cdFx0XHR9LFxuXHRcdFx0bU1vZGVsc1xuXHRcdCksXG5cdFx0YmluZGluZ0NvbnRleHRzOiB7fVxuXHR9O1xuXG5cdC8vSW5qZWN0IG1vZGVscyBhbmQgYmluZGluZ0NvbnRleHRzXG5cdE9iamVjdC5rZXlzKG1CaW5kaW5nQ29udGV4dHMpLmZvckVhY2goZnVuY3Rpb24gKHNLZXkpIHtcblx0XHQvKiBBc3NlcnQgdG8gbWFrZSBzdXJlIHRoZSBhbm5vdGF0aW9ucyBhcmUgaW4gdGhlIHRlc3QgbWV0YWRhdGEgLT4gYXZvaWQgbWlzbGVhZGluZyB0ZXN0cyAqL1xuXHRcdGV4cGVjdCh0eXBlb2Ygb01ldGFNb2RlbC5nZXRPYmplY3QobUJpbmRpbmdDb250ZXh0c1tzS2V5XSkpLnRvQmVEZWZpbmVkKCk7XG5cdFx0Y29uc3Qgb01vZGVsID0gbU1vZGVsc1tzS2V5XSB8fCBvTWV0YU1vZGVsO1xuXHRcdG9QcmVwcm9jZXNzb3JTZXR0aW5ncy5iaW5kaW5nQ29udGV4dHNbc0tleV0gPSBvTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQobUJpbmRpbmdDb250ZXh0c1tzS2V5XSk7IC8vVmFsdWUgaXMgc1BhdGhcblx0XHRvUHJlcHJvY2Vzc29yU2V0dGluZ3MubW9kZWxzW3NLZXldID0gb01vZGVsO1xuXHR9KTtcblxuXHQvL1RoaXMgY29udGV4dCBmb3IgbWFjcm8gdGVzdGluZ1xuXHRpZiAob1ByZXByb2Nlc3NvclNldHRpbmdzLm1vZGVsc1tcInRoaXNcIl0pIHtcblx0XHRvUHJlcHJvY2Vzc29yU2V0dGluZ3MuYmluZGluZ0NvbnRleHRzW1widGhpc1wiXSA9IG9QcmVwcm9jZXNzb3JTZXR0aW5ncy5tb2RlbHNbXCJ0aGlzXCJdLmNyZWF0ZUJpbmRpbmdDb250ZXh0KFwiL1wiKTtcblx0fVxuXG5cdHJldHVybiBYTUxQcmVwcm9jZXNzb3IucHJvY2Vzcyh4bWxEb2MuZmlyc3RFbGVtZW50Q2hpbGQhLCB7IG5hbWU6IFwiVGVzdCBGcmFnbWVudFwiIH0sIG9QcmVwcm9jZXNzb3JTZXR0aW5ncyk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0VGVtcGxhdGVkWE1MID0gYXN5bmMgZnVuY3Rpb24gKFxuXHR4bWxJbnB1dDogc3RyaW5nLFxuXHRzTWV0YWRhdGFVcmw6IHN0cmluZyxcblx0bUJpbmRpbmdDb250ZXh0czogeyBbeDogc3RyaW5nXTogYW55OyBlbnRpdHlTZXQ/OiBzdHJpbmcgfSxcblx0bU1vZGVsczogeyBbeDogc3RyaW5nXTogYW55IH1cbikge1xuXHRjb25zdCB0ZW1wbGF0ZWRYTUwgPSBhd2FpdCBnZXRUZW1wbGF0aW5nUmVzdWx0KHhtbElucHV0LCBzTWV0YWRhdGFVcmwsIG1CaW5kaW5nQ29udGV4dHMsIG1Nb2RlbHMpO1xuXHRyZXR1cm4gc2VyaWFsaXplWE1MKHRlbXBsYXRlZFhNTCk7XG59O1xuXG4vKipcbiAqIFByb2Nlc3MgdGhlIHJlcXVlc3RlZCBYTUwgZnJhZ21lbnQgd2l0aCB0aGUgcHJvdmlkZWQgZGF0YS5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZSBGdWxseSBxdWFsaWZpZWQgbmFtZSBvZiB0aGUgZnJhZ21lbnQgdG8gYmUgdGVzdGVkLlxuICogQHBhcmFtIHtvYmplY3R9IHRlc3REYXRhIFRlc3QgZGF0YSBjb25zaXN0aW5nXG4gKiBAcmV0dXJucyBUZW1wbGF0ZWQgZnJhZ21lbnQgYXMgc3RyaW5nXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBwcm9jZXNzRnJhZ21lbnQobmFtZTogc3RyaW5nLCB0ZXN0RGF0YTogeyBbbW9kZWw6IHN0cmluZ106IG9iamVjdCB9KTogUHJvbWlzZTxzdHJpbmc+IHtcblx0Y29uc3QgaW5wdXRYbWwgPSBgPHJvb3Q+PGNvcmU6RnJhZ21lbnQgZnJhZ21lbnROYW1lPVwiJHtuYW1lfVwiIHR5cGU9XCJYTUxcIiB4bWxuczpjb3JlPVwic2FwLnVpLmNvcmVcIiAvPjwvcm9vdD5gO1xuXHRjb25zdCBwYXJzZXIgPSBuZXcgd2luZG93LkRPTVBhcnNlcigpO1xuXHRjb25zdCBpbnB1dERvYyA9IHBhcnNlci5wYXJzZUZyb21TdHJpbmcoaW5wdXRYbWwsIFwidGV4dC94bWxcIik7XG5cblx0Ly8gYnVpbGQgbW9kZWwgYW5kIGJpbmRpbmdzIGZvciBnaXZlbiB0ZXN0IGRhdGFcblx0Y29uc3Qgc2V0dGluZ3MgPSB7XG5cdFx0bW9kZWxzOiB7fSBhcyB7IFtuYW1lOiBzdHJpbmddOiBKU09OTW9kZWwgfSxcblx0XHRiaW5kaW5nQ29udGV4dHM6IHt9IGFzIHsgW25hbWU6IHN0cmluZ106IG9iamVjdCB9XG5cdH07XG5cdGZvciAoY29uc3QgbW9kZWwgaW4gdGVzdERhdGEpIHtcblx0XHRjb25zdCBqc29uTW9kZWwgPSBuZXcgSlNPTk1vZGVsKCk7XG5cdFx0anNvbk1vZGVsLnNldERhdGEodGVzdERhdGFbbW9kZWxdKTtcblx0XHRzZXR0aW5ncy5tb2RlbHNbbW9kZWxdID0ganNvbk1vZGVsO1xuXHRcdHNldHRpbmdzLmJpbmRpbmdDb250ZXh0c1ttb2RlbF0gPSBzZXR0aW5ncy5tb2RlbHNbbW9kZWxdLmNyZWF0ZUJpbmRpbmdDb250ZXh0KFwiL1wiKSBhcyBDb250ZXh0O1xuXHR9XG5cblx0Ly8gZXhlY3V0ZSB0aGUgcHJlLXByb2Nlc3NvclxuXHRjb25zdCByZXN1bHREb2MgPSBhd2FpdCBYTUxQcmVwcm9jZXNzb3IucHJvY2VzcyhpbnB1dERvYy5maXJzdEVsZW1lbnRDaGlsZCwgeyBuYW1lIH0sIHNldHRpbmdzKTtcblxuXHQvLyBleGNsdWRlIG5lc3RlZCBmcmFnbWVudHMgZnJvbSB0ZXN0IHNuYXBzaG90c1xuXHRjb25zdCBmcmFnbWVudHMgPSByZXN1bHREb2MuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJjb3JlOkZyYWdtZW50XCIpO1xuXHRpZiAoZnJhZ21lbnRzPy5sZW5ndGggPiAwKSB7XG5cdFx0Zm9yIChjb25zdCBmcmFnbWVudCBvZiBmcmFnbWVudHMpIHtcblx0XHRcdGZyYWdtZW50LmlubmVySFRNTCA9IFwiXCI7XG5cdFx0fVxuXHR9XG5cblx0Ly8gS2VlcCB0aGUgZnJhZ21lbnQgcmVzdWx0IGFzIGNoaWxkIG9mIHJvb3Qgbm9kZSB3aGVuIGZyYWdtZW50IGdlbmVyYXRlcyBtdWx0aXBsZSByb290IGNvbnRyb2xzXG5cdGNvbnN0IHhtbFJlc3VsdCA9IHJlc3VsdERvYy5jaGlsZHJlbi5sZW5ndGggPiAxID8gcmVzdWx0RG9jLm91dGVySFRNTCA6IHJlc3VsdERvYy5pbm5lckhUTUw7XG5cblx0cmV0dXJuIGZvcm1hdFhtbCh4bWxSZXN1bHQsIHtcblx0XHRmaWx0ZXI6IChub2RlOiBhbnkpID0+IG5vZGUudHlwZSAhPT0gXCJDb21tZW50XCJcblx0fSk7XG59XG4iXX0=
@@ -1,5 +1,5 @@
1
1
  import { AnyAnnotation, ConverterOutput, EntitySet, Property } from "@sap-ux/annotation-converter";
2
- import { compileSources, to } from "@sap/cds-compiler";
2
+ import compiler from "@sap/cds-compiler";
3
3
  import * as fs from "fs";
4
4
  import * as path from "path";
5
5
  import { format, RequiredOptions } from "prettier";
@@ -115,34 +115,48 @@ export const formatXML = function (xmlString: string) {
115
115
  /**
116
116
  * Compile a CDS file into an EDMX file.
117
117
  *
118
- * @param {string} sCDSUrl The path to the file containing the CDS definition. This file MUST declare the namespace
119
- * sap.fe.test and a service JestService
120
- * @returns {string} The path of the generated EDMX
118
+ * @param cdsUrl The path to the file containing the CDS definition. This file must declare the namespace sap.fe.test and a service JestService
119
+ * @param options Options for creating the EDMX output
120
+ * @param edmxFileName Allows you to override the name of the compiled EDMX metadata file
121
+ * @returns The path of the generated EDMX
121
122
  */
122
- export const compileCDS = function (sCDSUrl: string) {
123
- const cdsString = fs.readFileSync(sCDSUrl, "utf-8");
124
- const edmxContent = cds2edmx(cdsString, "sap.fe.test.JestService");
125
- const dir = path.resolve(sCDSUrl, "..", "gen");
126
- const edmxUrl = path.resolve(dir, path.basename(sCDSUrl).replace(".cds", ".xml"));
127
-
128
- if (!fs.existsSync(dir)) {
129
- fs.mkdirSync(dir);
130
- }
123
+ export const compileCDS = function (
124
+ cdsUrl: string,
125
+ options: compiler.ODataOptions = {},
126
+ edmxFileName = path.basename(cdsUrl).replace(".cds", ".xml")
127
+ ) {
128
+ const cdsString = fs.readFileSync(cdsUrl, "utf-8");
129
+ const edmxContent = cds2edmx(cdsString, "sap.fe.test.JestService", options);
130
+ const dir = path.resolve(cdsUrl, "..", "gen");
131
+
132
+ const edmxFilePath = path.resolve(dir, edmxFileName);
131
133
 
132
- fs.writeFileSync(edmxUrl, edmxContent);
133
- return edmxUrl;
134
+ fs.mkdirSync(dir, { recursive: true });
135
+
136
+ fs.writeFileSync(edmxFilePath, edmxContent);
137
+ return edmxFilePath;
134
138
  };
135
139
 
136
140
  /**
137
141
  * Compile CDS to EDMX.
138
142
  *
139
143
  * @param cds The CDS model. It must define at least one service.
140
- * @param service The fully-qualified name of the service to compile. Defaults to "sap.fe.test.JestService".
144
+ * @param service The fully-qualified name of the service to be compiled. Defaults to "sap.fe.test.JestService".
145
+ * @param options Options for creating the EDMX output
141
146
  * @returns The compiled service model as EDMX.
142
147
  */
143
- export function cds2edmx(cds: string, service: string = "sap.fe.test.JestService") {
144
- const csn = compileSources({ "string.cds": cds }, {});
145
- const edmx = to.edmx(csn, { service: service, odataForeignKeys: true, odataFormat: "structured", odataContainment: false });
148
+ export function cds2edmx(cds: string, service = "sap.fe.test.JestService", options: compiler.ODataOptions = {}) {
149
+ const csn = compiler.compileSources({ "string.cds": cds }, {});
150
+
151
+ const edmxOptions: compiler.ODataOptions = {
152
+ odataForeignKeys: true,
153
+ odataFormat: "structured",
154
+ odataContainment: false,
155
+ ...options,
156
+ service: service
157
+ };
158
+
159
+ const edmx = compiler.to.edmx(csn, edmxOptions);
146
160
  if (!edmx) {
147
161
  throw new Error(`Compilation failed. Hint: Make sure that the CDS model defines service ${service}.`);
148
162
  }
@@ -23,6 +23,8 @@ sap.ui.define(
23
23
  "sap/fe/test/api/DialogValueHelpAssertions",
24
24
  "sap/fe/test/api/DialogCreateActions",
25
25
  "sap/fe/test/api/DialogCreateAssertions",
26
+ "sap/fe/test/api/DialogMassEditActions",
27
+ "sap/fe/test/api/DialogMassEditAssertions",
26
28
  "sap/fe/test/api/TableAssertions",
27
29
  "sap/fe/test/api/TableActions",
28
30
  "sap/fe/test/api/ChartAssertions",
@@ -52,6 +54,8 @@ sap.ui.define(
52
54
  DialogValueHelpAssertions,
53
55
  DialogCreateActions,
54
56
  DialogCreateAssertions,
57
+ DialogMassEditActions,
58
+ DialogMassEditAssertions,
55
59
  TableAssertions,
56
60
  TableActions,
57
61
  ChartAssertions,
@@ -116,6 +120,10 @@ sap.ui.define(
116
120
  return bAction
117
121
  ? new DialogCreateActions(oDialogBuilder, vDialogIdentifier)
118
122
  : new DialogCreateAssertions(oDialogBuilder, vDialogIdentifier);
123
+ case DialogType.MassEdit:
124
+ return bAction
125
+ ? new DialogMassEditActions(oDialogBuilder, vDialogIdentifier)
126
+ : new DialogMassEditAssertions(oDialogBuilder, vDialogIdentifier);
119
127
  default:
120
128
  return bAction
121
129
  ? new DialogActions(oDialogBuilder, vDialogIdentifier)
@@ -55,13 +55,14 @@ sap.ui.define([], function () {
55
55
  return (_this$oBinding = _this.oBinding) === null || _this$oBinding === void 0 ? void 0 : _this$oBinding.getModel();
56
56
  });
57
57
  this.isTransient = jest.fn();
58
- this.setKeepAlive = jest.fn(function (bool) {
58
+ this.setKeepAlive = jest.fn(function (bool, _fnOnBeforeDestroy, _bRequestMessages) {
59
59
  _this.isKeptAlive = bool;
60
60
  });
61
61
  this.isKeepAlive = jest.fn(function () {
62
62
  return _this.isKeptAlive;
63
63
  });
64
64
  this.requestSideEffects = jest.fn();
65
+ this.requestObject = jest.fn();
65
66
  this.oValues = oValues;
66
67
  this.oBinding = oBinding;
67
68
  }
@@ -428,4 +429,4 @@ sap.ui.define([], function () {
428
429
  _exports.mockMVC = mockMVC;
429
430
  return _exports;
430
431
  }, false);
431
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIlVJNU1vY2tIZWxwZXIudHMiXSwibmFtZXMiOlsiTW9ja0NvbnRleHQiLCJvVmFsdWVzIiwib0JpbmRpbmciLCJpc0tlcHRBbGl2ZSIsImdldFByb3BlcnR5IiwiamVzdCIsImZuIiwia2V5IiwicmVxdWVzdFByb3BlcnR5IiwiUHJvbWlzZSIsInJlc29sdmUiLCJzZXRQcm9wZXJ0eSIsInZhbHVlIiwiZ2V0T2JqZWN0IiwicGF0aCIsInRoYXQiLCJyZXN1bHQiLCJpbmRleE9mIiwicGFydHMiLCJzcGxpdCIsInJlZHVjZSIsInN1bSIsInBhcnQiLCJnZXRQYXRoIiwiZ2V0QmluZGluZyIsImdldE1vZGVsIiwiaXNUcmFuc2llbnQiLCJzZXRLZWVwQWxpdmUiLCJib29sIiwiaXNLZWVwQWxpdmUiLCJyZXF1ZXN0U2lkZUVmZmVjdHMiLCJpc0EiLCJzQ2xhc3NOYW1lIiwiTW9ja1VJNUVsZW1lbnQiLCJiaW5kaW5nQ29udGV4dCIsImdldEJpbmRpbmdDb250ZXh0IiwibW9ja1JldHVyblZhbHVlIiwiZ2V0QmluZGluZ0luZm8iLCJkYXRhIiwiZ2V0UGFyZW50IiwiTW9ja0NvbnRyb2wiLCJNb2NrRXZlbnQiLCJwYXJhbXMiLCJzb3VyY2UiLCJnZXRQYXJhbWV0ZXIiLCJuYW1lIiwiZ2V0U291cmNlIiwiTW9ja0xpc3RCaW5kaW5nIiwiYUNvbnRleHRzIiwibW9ja01vZGVsIiwic2V0QWdncmVnYXRpb24iLCJmaWx0ZXIiLCJzb3J0IiwicmVxdWVzdENvbnRleHRzIiwiYU1vY2tDb250ZXh0cyIsImdldEN1cnJlbnRDb250ZXh0cyIsImdldFVwZGF0ZUdyb3VwSWQiLCJtYXAiLCJjb250ZXh0Iiwic2V0TW9kZWwiLCJvTW9kZWwiLCJNb2NrUHJvcGVydHlCaW5kaW5nIiwibW9ja1BhdGgiLCJnZXRWYWx1ZSIsInNldFBhdGgiLCJNb2NrQ29tcG9zaXRlQmluZGluZyIsImFCaW5kaW5ncyIsImdldEJpbmRpbmdzIiwiYmluZGluZyIsIk1vY2tDb250ZXh0QmluZGluZyIsIm9Db250ZXh0IiwiZ2V0Qm91bmRDb250ZXh0Iiwib01vY2tDb250ZXh0IiwiYXR0YWNoRXZlbnRPbmNlIiwiZ2V0SW50ZXJuYWxNb2NrQ29udGV4dCIsIk1vY2tNZXRhTW9kZWwiLCJvTWV0YURhdGEiLCJnZXRNZXRhQ29udGV4dCIsInNQYXRoIiwiJHBhdGgiLCJvTWV0YUNvbnRleHQiLCJyZXF1ZXN0T2JqZWN0IiwiY3JlYXRlQmluZGluZ0NvbnRleHQiLCJnZXRNZXRhUGF0aCIsImdldENvbnRleHQiLCJNb2NrTW9kZWwiLCJtb2NrTGlzdEJpbmRpbmciLCJtb2NrQ29udGV4dEJpbmRpbmciLCJiaW5kTGlzdCIsImJpbmRDb250ZXh0IiwiZ2V0TWV0YU1vZGVsIiwib01ldGFNb2RlbCIsImdldEtlZXBBbGl2ZUNvbnRleHQiLCJtb2RlbEZyb21MaXN0QmluZGluZyIsIm1vZGVsRnJvbUNvbnRleHRCaW5kaW5nIiwidW5kZWZpbmVkIiwic2V0TWV0YU1vZGVsIiwiTW9ja1ZpZXciLCJnZXRDb250cm9sbGVyIiwiZ2V0Vmlld0RhdGEiLCJnZXRJZCIsIk1vY2tDb250cm9sbGVyIiwiZ2V0VmlldyIsIl9yb3V0aW5nIiwibmF2aWdhdGVUb1RhcmdldCIsIl9lZGl0RmxvdyIsInN5bmNUYXNrIiwiX3NpZGVFZmZlY3RzIiwiaGFuZGxlRmllbGRDaGFuZ2UiLCJtb2NrTVZDIiwiZXhpc3RpbmciLCJtb2RlbCIsInZpZXciLCJjb250cm9sbGVyIl0sIm1hcHBpbmdzIjoiO0FBQUE7QUFDQTtBQUNBOzs7Ozs7Ozs7O0FBRkE7QUFDQTtBQUNBO01BZWFBLFc7QUFFWix5QkFBMkJDLE9BQTNCLEVBQWtEQyxRQUFsRCxFQUFrRTtBQUFBOztBQUFBLFdBRDFEQyxXQUMwRCxHQUQ1QyxLQUM0QztBQUFBLFdBTTNEQyxXQU4yRCxHQU03Q0MsSUFBSSxDQUFDQyxFQUFMLENBQVEsVUFBQ0MsR0FBRCxFQUFpQjtBQUM3QyxlQUFPLEtBQUksQ0FBQ04sT0FBTCxDQUFhTSxHQUFiLENBQVA7QUFDQSxPQUZv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LFlBQUFBLFFBQVEsQ0FBRUcsVUFBVixLQUF3QixJQUFJWixjQUFKLEVBQTNDO0FBRUFXLElBQUFBLElBQUksQ0FBQ2QsYUFBTCxDQUFtQjlELGVBQW5CLENBQW1DNkUsVUFBbkM7QUFDQUQsSUFBQUEsSUFBSSxDQUFDdkYsUUFBTCxDQUFjVyxlQUFkLENBQThCMkUsS0FBOUI7QUFDQUUsSUFBQUEsVUFBVSxDQUFDWCxPQUFYLENBQW1CbEUsZUFBbkIsQ0FBbUM0RSxJQUFuQztBQUVBLFdBQU87QUFBRUQsTUFBQUEsS0FBSyxFQUFMQSxLQUFGO0FBQVNDLE1BQUFBLElBQUksRUFBSkEsSUFBVDtBQUFlQyxNQUFBQSxVQUFVLEVBQVZBO0FBQWYsS0FBUDtBQUNBIiwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIE1vY2sgY2xhc3MgZm9yIGEgVjQgQ29udGV4dFxuICovXG5pbXBvcnQgRXZlbnQgZnJvbSBcInNhcC91aS9iYXNlL0V2ZW50XCI7XG5pbXBvcnQgQ29udHJvbCBmcm9tIFwic2FwL3VpL2NvcmUvQ29udHJvbFwiO1xuaW1wb3J0IFVJNUVsZW1lbnQgZnJvbSBcInNhcC91aS9jb3JlL0VsZW1lbnRcIjtcbmltcG9ydCBDb250cm9sbGVyIGZyb20gXCJzYXAvdWkvY29yZS9tdmMvQ29udHJvbGxlclwiO1xuaW1wb3J0IFZpZXcgZnJvbSBcInNhcC91aS9jb3JlL212Yy9WaWV3XCI7XG5pbXBvcnQgQ29tcG9zaXRlQmluZGluZyBmcm9tIFwic2FwL3VpL21vZGVsL0NvbXBvc2l0ZUJpbmRpbmdcIjtcbmltcG9ydCBKU09OTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9qc29uL0pTT05Nb2RlbFwiO1xuaW1wb3J0IENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9Db250ZXh0XCI7XG5pbXBvcnQgT0RhdGFDb250ZXh0QmluZGluZyBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhQ29udGV4dEJpbmRpbmdcIjtcbmltcG9ydCBPRGF0YUxpc3RCaW5kaW5nIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFMaXN0QmluZGluZ1wiO1xuaW1wb3J0IE9EYXRhTWV0YU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFNZXRhTW9kZWxcIjtcbmltcG9ydCBPRGF0YU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFNb2RlbFwiO1xuaW1wb3J0IE9EYXRhUHJvcGVydHlCaW5kaW5nIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFQcm9wZXJ0eUJpbmRpbmdcIjtcblxuZXhwb3J0IGNsYXNzIE1vY2tDb250ZXh0IGltcGxlbWVudHMgUGFydGlhbDxDb250ZXh0PiB7XG5cdHByaXZhdGUgaXNLZXB0QWxpdmUgPSBmYWxzZTtcblx0cHVibGljIGNvbnN0cnVjdG9yKHByaXZhdGUgb1ZhbHVlcz86IGFueSwgcHJpdmF0ZSBvQmluZGluZz86IGFueSkge31cblxuXHRwdWJsaWMgaXNBKHNDbGFzc05hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiBzQ2xhc3NOYW1lID09PSBcInNhcC51aS5tb2RlbC5vZGF0YS52NC5Db250ZXh0XCI7XG5cdH1cblxuXHRwdWJsaWMgZ2V0UHJvcGVydHkgPSBqZXN0LmZuKChrZXk6IHN0cmluZykgPT4ge1xuXHRcdHJldHVybiB0aGlzLm9WYWx1ZXNba2V5XTtcblx0fSk7XG5cdHB1YmxpYyByZXF1ZXN0UHJvcGVydHkgPSBqZXN0LmZuKChrZXk6IHN0cmluZykgPT4ge1xuXHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5vVmFsdWVzW2tleV0pO1xuXHR9KTtcblx0cHVibGljIHNldFByb3BlcnR5ID0gamVzdC5mbigoa2V5OiBzdHJpbmcsIHZhbHVlOiBhbnkpID0+IHtcblx0XHR0aGlzLm9WYWx1ZXNba2V5XSA9IHZhbHVlO1xuXHRcdHJldHVybiB0aGlzLm9WYWx1ZXNba2V5XTtcblx0fSk7XG5cblx0cHVibGljIGdldE9iamVjdCA9IGplc3QuZm4oKHBhdGg6IHN0cmluZykgPT4ge1xuXHRcdGNvbnN0IHRoYXQgPSB0aGlzIGFzIGFueTtcblx0XHRsZXQgcmVzdWx0ID0gcGF0aCA/IHRoYXQub1ZhbHVlc1twYXRoXSA6IHRoYXQub1ZhbHVlcztcblxuXHRcdGlmICghcmVzdWx0ICYmIHBhdGggJiYgcGF0aC5pbmRleE9mKFwiL1wiKSA+IC0xKSB7XG5cdFx0XHRjb25zdCBwYXJ0cyA9IHBhdGguc3BsaXQoXCIvXCIpO1xuXHRcdFx0cmVzdWx0ID0gcGFydHMucmVkdWNlKChzdW0sIHBhcnQ6IGFueSkgPT4ge1xuXHRcdFx0XHRzdW0gPSBwYXJ0ID8gc3VtW3BhcnRdIDogc3VtO1xuXHRcdFx0XHRyZXR1cm4gc3VtO1xuXHRcdFx0fSwgdGhhdC5vVmFsdWVzKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9KTtcblx0cHVibGljIGdldFBhdGggPSBqZXN0LmZuKCgpID0+IHtcblx0XHRyZXR1cm4gdGhpcy5vVmFsdWVzW1wiJHBhdGhcIl07XG5cdH0pO1xuXG5cdHB1YmxpYyBnZXRCaW5kaW5nID0gamVzdC5mbigoKSA9PiB7XG5cdFx0cmV0dXJuIHRoaXMub0JpbmRpbmc7XG5cdH0pO1xuXHRwdWJsaWMgZ2V0TW9kZWwgPSBqZXN0LmZuKCgpID0+IHtcblx0XHRyZXR1cm4gdGhpcy5vQmluZGluZz8uZ2V0TW9kZWwoKSBhcyBhbnkgYXMgT0RhdGFNb2RlbDtcblx0fSk7XG5cdHB1YmxpYyBpc1RyYW5zaWVudCA9IGplc3QuZm4oKTtcblx0cHVibGljIHNldEtlZXBBbGl2ZSA9IGplc3QuZm4oKGJvb2w6IGJvb2xlYW4pID0+IHtcblx0XHR0aGlzLmlzS2VwdEFsaXZlID0gYm9vbDtcblx0fSk7XG5cdHB1YmxpYyBpc0tlZXBBbGl2ZSA9IGplc3QuZm4oKCkgPT4gdGhpcy5pc0tlcHRBbGl2ZSk7XG5cdHB1YmxpYyByZXF1ZXN0U2lkZUVmZmVjdHMgPSBqZXN0LmZuKCk7XG59XG5cbmV4cG9ydCBjbGFzcyBNb2NrVUk1RWxlbWVudCBpbXBsZW1lbnRzIFBhcnRpYWw8VUk1RWxlbWVudD4ge1xuXHRba2V5OiBzdHJpbmddOiBhbnk7XG5cdHB1YmxpYyBiaW5kaW5nQ29udGV4dCA9IG5ldyBNb2NrQ29udGV4dCh7fSk7XG5cdHB1YmxpYyBnZXRCaW5kaW5nID0gamVzdC5mbigpO1xuXHRwdWJsaWMgZ2V0QmluZGluZ0NvbnRleHQgPSBqZXN0LmZuKCkubW9ja1JldHVyblZhbHVlKHRoaXMuYmluZGluZ0NvbnRleHQpO1xuXHRwdWJsaWMgZ2V0QmluZGluZ0luZm8gPSBqZXN0LmZuKCk7XG5cdHB1YmxpYyBkYXRhID0gamVzdC5mbigpO1xuXHRwdWJsaWMgZ2V0TW9kZWwgPSBqZXN0LmZuKCk7XG5cdHB1YmxpYyBnZXRQYXJlbnQgPSBqZXN0LmZuKCk7XG59XG5cbmV4cG9ydCBjbGFzcyBNb2NrQ29udHJvbCBleHRlbmRzIE1vY2tVSTVFbGVtZW50IGltcGxlbWVudHMgUGFydGlhbDxDb250cm9sPiB7XG5cdHB1YmxpYyBnZXRCaW5kaW5nQ29udGV4dDogamVzdC5Nb2NrPGFueSwgYW55PiA9IGplc3QuZm4oKTtcblx0cHVibGljIGdldE1vZGVsOiBqZXN0Lk1vY2s8YW55LCBhbnk+ID0gamVzdC5mbigpO1xufVxuXG5leHBvcnQgY2xhc3MgTW9ja0V2ZW50IGltcGxlbWVudHMgUGFydGlhbDxFdmVudD4ge1xuXHRwdWJsaWMgY29uc3RydWN0b3IocHVibGljIHBhcmFtczogeyBba2V5OiBzdHJpbmddOiBhbnkgfSA9IHt9LCBwdWJsaWMgc291cmNlOiBNb2NrVUk1RWxlbWVudCA9IG5ldyBNb2NrVUk1RWxlbWVudCgpKSB7fVxuXG5cdHB1YmxpYyBnZXRQYXJhbWV0ZXIgPSBqZXN0LmZuKChuYW1lKSA9PiB0aGlzLnBhcmFtc1tuYW1lXSk7XG5cblx0cHVibGljIGdldFNvdXJjZSA9IGplc3QuZm4oKCkgPT4gdGhpcy5zb3VyY2UgYXMgYW55KTtcbn1cblxuLyoqXG4gKiBNb2NrIGNsYXNzIGZvciBPRGF0YSBWNCBMaXN0QmluZGluZ1xuICovXG5leHBvcnQgY2xhc3MgTW9ja0xpc3RCaW5kaW5nIGltcGxlbWVudHMgUGFydGlhbDxPRGF0YUxpc3RCaW5kaW5nPiB7XG5cdHByaXZhdGUgYU1vY2tDb250ZXh0czogTW9ja0NvbnRleHRbXTtcblxuXHRwdWJsaWMgY29uc3RydWN0b3IoYUNvbnRleHRzPzogYW55W10sIHByaXZhdGUgbW9ja01vZGVsPzogTW9ja01vZGVsKSB7XG5cdFx0YUNvbnRleHRzID0gYUNvbnRleHRzIHx8IFtdO1xuXG5cdFx0dGhpcy5hTW9ja0NvbnRleHRzID0gYUNvbnRleHRzLm1hcCgoY29udGV4dCkgPT4ge1xuXHRcdFx0cmV0dXJuIG5ldyBNb2NrQ29udGV4dChjb250ZXh0LCB0aGlzKTtcblx0XHR9KTtcblx0fVxuXG5cdHB1YmxpYyBpc0Eoc0NsYXNzTmFtZTogc3RyaW5nKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIHNDbGFzc05hbWUgPT09IFwic2FwLnVpLm1vZGVsLm9kYXRhLnY0Lk9EYXRhTGlzdEJpbmRpbmdcIjtcblx0fVxuXG5cdHB1YmxpYyBzZXRNb2RlbChvTW9kZWw6IE1vY2tNb2RlbCkge1xuXHRcdHRoaXMubW9ja01vZGVsID0gb01vZGVsO1xuXHR9XG5cblx0Ly8gTW9ja2VkIEFQSVxuXHRwdWJsaWMgc2V0QWdncmVnYXRpb24gPSBqZXN0LmZuKCk7XG5cdHB1YmxpYyBmaWx0ZXIgPSBqZXN0LmZuKCk7XG5cdHB1YmxpYyBzb3J0ID0gamVzdC5mbigpO1xuXG5cdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcblx0cHVibGljIHJlcXVlc3RDb250ZXh0cyA9IGplc3QuZm4oKC4uLmFyZ3MpID0+IHtcblx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRoaXMuYU1vY2tDb250ZXh0cyBhcyBhbnkgYXMgQ29udGV4dFtdKTtcblx0fSk7XG5cdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcblx0cHVibGljIGdldEN1cnJlbnRDb250ZXh0cyA9IGplc3QuZm4oKC4uLmFyZ3MpID0+IHtcblx0XHRyZXR1cm4gdGhpcy5hTW9ja0NvbnRleHRzIGFzIGFueSBhcyBDb250ZXh0W107XG5cdH0pO1xuXHRwdWJsaWMgZ2V0TW9kZWwgPSBqZXN0LmZuKCgpID0+IHtcblx0XHRyZXR1cm4gdGhpcy5tb2NrTW9kZWwgYXMgYW55IGFzIE9EYXRhTW9kZWw7XG5cdH0pO1xuXHRwdWJsaWMgZ2V0VXBkYXRlR3JvdXBJZCA9IGplc3QuZm4oKCkgPT4gXCJhdXRvXCIpO1xufVxuXG5leHBvcnQgY2xhc3MgTW9ja1Byb3BlcnR5QmluZGluZyBpbXBsZW1lbnRzIFBhcnRpYWw8T0RhdGFQcm9wZXJ0eUJpbmRpbmc+IHtcblx0cHJpdmF0ZSBtb2NrTW9kZWwhOiBKU09OTW9kZWw7XG5cdHByaXZhdGUgbW9ja1BhdGghOiBzdHJpbmc7XG5cblx0cHVibGljIGNvbnN0cnVjdG9yKG1vY2tNb2RlbDogSlNPTk1vZGVsLCBtb2NrUGF0aDogc3RyaW5nKSB7XG5cdFx0dGhpcy5zZXRNb2RlbChtb2NrTW9kZWwpO1xuXHRcdHRoaXMuc2V0UGF0aChtb2NrUGF0aCk7XG5cdH1cblxuXHRwdWJsaWMgaXNBKHNDbGFzc05hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiBzQ2xhc3NOYW1lID09PSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YVByb3BlcnR5QmluZGluZ1wiO1xuXHR9XG5cblx0cHVibGljIHNldE1vZGVsKG9Nb2RlbDogSlNPTk1vZGVsKSB7XG5cdFx0dGhpcy5tb2NrTW9kZWwgPSBvTW9kZWw7XG5cdH1cblx0cHVibGljIGdldE1vZGVsID0gamVzdC5mbigoKSA9PiB7XG5cdFx0cmV0dXJuIHRoaXMubW9ja01vZGVsIGFzIGFueSBhcyBPRGF0YU1vZGVsO1xuXHR9KTtcblxuXHRwdWJsaWMgc2V0UGF0aChwYXRoOiBzdHJpbmcgfCB1bmRlZmluZWQpIHtcblx0XHR0aGlzLm1vY2tQYXRoID0gcGF0aCA/IHBhdGggOiBcIlwiO1xuXHR9XG5cdHB1YmxpYyBnZXRQYXRoID0gamVzdC5mbigoKSA9PiB7XG5cdFx0cmV0dXJuIHRoaXMubW9ja1BhdGg7XG5cdH0pO1xuXG5cdHB1YmxpYyBnZXRWYWx1ZSA9IGplc3QuZm4oKCkgPT4ge1xuXHRcdHJldHVybiB0aGlzPy5tb2NrTW9kZWw/LmdldFByb3BlcnR5KFwiL1wiICsgdGhpcy5tb2NrUGF0aCk7XG5cdH0pO1xufVxuXG5leHBvcnQgY2xhc3MgTW9ja0NvbXBvc2l0ZUJpbmRpbmcgaW1wbGVtZW50cyBQYXJ0aWFsPENvbXBvc2l0ZUJpbmRpbmc+IHtcblx0cHJpdmF0ZSBhQmluZGluZ3M6IE1vY2tQcm9wZXJ0eUJpbmRpbmdbXTtcblxuXHRwdWJsaWMgY29uc3RydWN0b3IoYUJpbmRpbmdzOiBNb2NrUHJvcGVydHlCaW5kaW5nW10pIHtcblx0XHR0aGlzLmFCaW5kaW5ncyA9IGFCaW5kaW5ncztcblx0fVxuXG5cdHB1YmxpYyBpc0Eoc0NsYXNzTmFtZTogc3RyaW5nKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIHNDbGFzc05hbWUgPT09IFwic2FwLnVpLm1vZGVsLkNvbXBvc2l0ZUJpbmRpbmdcIjtcblx0fVxuXG5cdHB1YmxpYyBnZXRCaW5kaW5ncyA9IGplc3QuZm4oKCkgPT4ge1xuXHRcdHJldHVybiB0aGlzLmFCaW5kaW5ncztcblx0fSk7XG5cblx0cHVibGljIGdldFZhbHVlID0gamVzdC5mbigoKSA9PiB7XG5cdFx0cmV0dXJuIHRoaXMuYUJpbmRpbmdzLm1hcCgoYmluZGluZykgPT4gYmluZGluZy5nZXRWYWx1ZSgpKTtcblx0fSk7XG59XG5cbmV4cG9ydCBjbGFzcyBNb2NrQ29udGV4dEJpbmRpbmcgaW1wbGVtZW50cyBQYXJ0aWFsPE9EYXRhQ29udGV4dEJpbmRpbmc+IHtcblx0cHJpdmF0ZSBvTW9ja0NvbnRleHQ6IE1vY2tDb250ZXh0O1xuXHRwcml2YXRlIGlzS2VwdEFsaXZlOiBib29sZWFuID0gZmFsc2U7XG5cblx0cHVibGljIGNvbnN0cnVjdG9yKG9Db250ZXh0PzogYW55LCBwcml2YXRlIG1vY2tNb2RlbD86IE1vY2tNb2RlbCkge1xuXHRcdHRoaXMub01vY2tDb250ZXh0ID0gbmV3IE1vY2tDb250ZXh0KG9Db250ZXh0IHx8IHt9LCB0aGlzKTtcblx0fVxuXG5cdHB1YmxpYyBpc0Eoc0NsYXNzTmFtZTogc3RyaW5nKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIHNDbGFzc05hbWUgPT09IFwic2FwLnVpLm1vZGVsLm9kYXRhLnY0Lk9EYXRhQ29udGV4dEJpbmRpbmdcIjtcblx0fVxuXHRwdWJsaWMgZ2V0SW50ZXJuYWxNb2NrQ29udGV4dCgpOiBNb2NrQ29udGV4dCB7XG5cdFx0cmV0dXJuIHRoaXMub01vY2tDb250ZXh0O1xuXHR9XG5cdHB1YmxpYyBzZXRNb2RlbChvTW9kZWw6IE1vY2tNb2RlbCkge1xuXHRcdHRoaXMubW9ja01vZGVsID0gb01vZGVsO1xuXHR9XG5cblx0Ly8gTW9ja2VkIEFQSVxuXHRwdWJsaWMgZ2V0Qm91bmRDb250ZXh0ID0gamVzdC5mbigoKSA9PiB7XG5cdFx0cmV0dXJuIHRoaXMub01vY2tDb250ZXh0IGFzIGFueSBhcyBDb250ZXh0O1xuXHR9KTtcblx0cHVibGljIGF0dGFjaEV2ZW50T25jZSA9IGplc3QuZm4oKTtcblx0cHVibGljIGdldE1vZGVsID0gamVzdC5mbigoKSA9PiB7XG5cdFx0cmV0dXJuIHRoaXMubW9ja01vZGVsIGFzIGFueSBhcyBPRGF0YU1vZGVsO1xuXHR9KTtcbn1cblxuLyoqXG4gKiBNb2NrIGNsYXNzIGZvciBPRGF0YSBWNCBNZXRhTW9kZWxcbiAqL1xuZXhwb3J0IGNsYXNzIE1vY2tNZXRhTW9kZWwgaW1wbGVtZW50cyBQYXJ0aWFsPE9EYXRhTWV0YU1vZGVsPiB7XG5cdHByaXZhdGUgb01ldGFDb250ZXh0OiBNb2NrQ29udGV4dDtcblx0cmVxdWVzdFZhbHVlTGlzdEluZm8hOiBqZXN0Lk1vY2s8YW55LCBhbnk+O1xuXG5cdHB1YmxpYyBjb25zdHJ1Y3RvcihvTWV0YURhdGE/OiBhbnkpIHtcblx0XHR0aGlzLm9NZXRhQ29udGV4dCA9IG5ldyBNb2NrQ29udGV4dChvTWV0YURhdGEgfHwge30pO1xuXHR9XG5cblx0Ly8gTW9ja2VkIEFQSVxuXHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG5cdHB1YmxpYyBnZXRNZXRhQ29udGV4dCA9IGplc3QuZm4oKHNQYXRoOiBzdHJpbmcpID0+IHtcblx0XHRyZXR1cm4gbmV3IE1vY2tDb250ZXh0KHsgJHBhdGg6IHNQYXRoIH0pIGFzIGFueSBhcyBDb250ZXh0O1xuXHR9KTtcblx0cHVibGljIGdldE9iamVjdCA9IGplc3QuZm4oKHNQYXRoOiBzdHJpbmcpID0+IHtcblx0XHRyZXR1cm4gdGhpcy5vTWV0YUNvbnRleHQuZ2V0UHJvcGVydHkoc1BhdGgpO1xuXHR9KTtcblx0cHVibGljIHJlcXVlc3RPYmplY3QgPSBqZXN0LmZuKCk7XG5cdHB1YmxpYyBjcmVhdGVCaW5kaW5nQ29udGV4dCA9IGplc3QuZm4oKHNQYXRoOiBzdHJpbmcpID0+IHtcblx0XHRyZXR1cm4gbmV3IE1vY2tDb250ZXh0KHsgJHBhdGg6IHNQYXRoIH0pIGFzIGFueSBhcyBDb250ZXh0O1xuXHR9KTtcblx0cHVibGljIGdldE1ldGFQYXRoID0gamVzdC5mbigoc1BhdGg6IHN0cmluZykgPT4ge1xuXHRcdHJldHVybiBzUGF0aDtcblx0fSk7XG5cdHB1YmxpYyBnZXRDb250ZXh0ID0gamVzdC5mbigpO1xufVxuXG4vKipcbiAqIE1vY2sgY2xhc3MgZm9yIE9EYXRhIFY0IE1vZGVsXG4gKi9cblxuZXhwb3J0IGNsYXNzIE1vY2tNb2RlbCBpbXBsZW1lbnRzIFBhcnRpYWw8T0RhdGFNb2RlbD4ge1xuXHRwcml2YXRlIG9NZXRhTW9kZWw/OiBNb2NrTWV0YU1vZGVsO1xuXG5cdHB1YmxpYyBjb25zdHJ1Y3Rvcihwcml2YXRlIG1vY2tMaXN0QmluZGluZz86IE1vY2tMaXN0QmluZGluZywgcHJpdmF0ZSBtb2NrQ29udGV4dEJpbmRpbmc/OiBNb2NrQ29udGV4dEJpbmRpbmcpIHtcblx0XHRpZiAobW9ja0xpc3RCaW5kaW5nKSB7XG5cdFx0XHRtb2NrTGlzdEJpbmRpbmcuc2V0TW9kZWwodGhpcyk7XG5cdFx0fVxuXHRcdGlmIChtb2NrQ29udGV4dEJpbmRpbmcpIHtcblx0XHRcdG1vY2tDb250ZXh0QmluZGluZy5zZXRNb2RlbCh0aGlzKTtcblx0XHR9XG5cdH1cblxuXHQvLyBGYWN0b3JpZXNcblx0c3RhdGljIG1vZGVsRnJvbUxpc3RCaW5kaW5nKG1vY2tMaXN0QmluZGluZzogTW9ja0xpc3RCaW5kaW5nKTogTW9ja01vZGVsIHtcblx0XHRyZXR1cm4gbmV3IE1vY2tNb2RlbChtb2NrTGlzdEJpbmRpbmcpO1xuXHR9XG5cdHN0YXRpYyBtb2RlbEZyb21Db250ZXh0QmluZGluZyhtb2NrQ29udGV4dEJpbmRpbmc6IE1vY2tDb250ZXh0QmluZGluZyk6IE1vY2tNb2RlbCB7XG5cdFx0cmV0dXJuIG5ldyBNb2NrTW9kZWwodW5kZWZpbmVkLCBtb2NrQ29udGV4dEJpbmRpbmcpO1xuXHR9XG5cblx0cHVibGljIHNldE1ldGFNb2RlbChvTWV0YU1vZGVsOiBNb2NrTWV0YU1vZGVsKSB7XG5cdFx0dGhpcy5vTWV0YU1vZGVsID0gb01ldGFNb2RlbDtcblx0fVxuXG5cdC8vIE1vY2tlZCBBUElcblx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuXHRwdWJsaWMgYmluZExpc3QgPSBqZXN0LmZuKCguLi5hcmdzKSA9PiB7XG5cdFx0cmV0dXJuIHRoaXMubW9ja0xpc3RCaW5kaW5nIGFzIGFueSBhcyBPRGF0YUxpc3RCaW5kaW5nO1xuXHR9KTtcblx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuXHRwdWJsaWMgYmluZENvbnRleHQgPSBqZXN0LmZuKCguLi5hcmdzKSA9PiB7XG5cdFx0cmV0dXJuIHRoaXMubW9ja0NvbnRleHRCaW5kaW5nIGFzIGFueSBhcyBPRGF0YUNvbnRleHRCaW5kaW5nO1xuXHR9KTtcblx0cHVibGljIGdldE1ldGFNb2RlbCA9IGplc3QuZm4oKCkgPT4ge1xuXHRcdHJldHVybiB0aGlzLm9NZXRhTW9kZWwgYXMgYW55IGFzIE9EYXRhTWV0YU1vZGVsO1xuXHR9KTtcblxuXHRwdWJsaWMgZ2V0UHJvcGVydHkgPSBqZXN0LmZuKCk7XG5cdHB1YmxpYyBzZXRQcm9wZXJ0eSA9IGplc3QuZm4oKTtcblx0cHVibGljIHJlcXVlc3RPYmplY3QgPSBqZXN0LmZuKCk7XG5cdHB1YmxpYyBnZXRLZWVwQWxpdmVDb250ZXh0ID0gamVzdC5mbigpO1xufVxuXG5leHBvcnQgY2xhc3MgTW9ja1ZpZXcgaW1wbGVtZW50cyBQYXJ0aWFsPFZpZXc+IHtcblx0cHVibGljIGdldENvbnRyb2xsZXIgPSBqZXN0LmZuKCk7XG5cblx0cHVibGljIGdldEJpbmRpbmdDb250ZXh0ID0gamVzdC5mbigpO1xuXG5cdHB1YmxpYyBnZXRNb2RlbCA9IGplc3QuZm4oKTtcblxuXHRwdWJsaWMgZ2V0Vmlld0RhdGEgPSBqZXN0LmZuKCk7XG5cblx0cHVibGljIGlzQShzQ2xhc3NOYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gc0NsYXNzTmFtZSA9PT0gXCJzYXAudWkuY29yZS5tdmMuVmlld1wiO1xuXHR9XG5cblx0cHVibGljIGdldElkID0gamVzdC5mbigpO1xufVxuXG5leHBvcnQgY2xhc3MgTW9ja0NvbnRyb2xsZXIgaW1wbGVtZW50cyBQYXJ0aWFsPENvbnRyb2xsZXI+IHtcblx0cHVibGljIGdldFZpZXcgPSBqZXN0LmZuKCkubW9ja1JldHVyblZhbHVlKG5ldyBNb2NrVmlldygpKTtcblxuXHRwdWJsaWMgX3JvdXRpbmcgPSB7XG5cdFx0bmF2aWdhdGVUb1RhcmdldDogamVzdC5mbigpXG5cdH07XG5cblx0cHVibGljIF9lZGl0RmxvdyA9IHtcblx0XHRzeW5jVGFzazogamVzdC5mbigpXG5cdH07XG5cblx0cHVibGljIF9zaWRlRWZmZWN0cyA9IHtcblx0XHRoYW5kbGVGaWVsZENoYW5nZTogamVzdC5mbigpXG5cdH07XG5cblx0aXNBID0gamVzdC5mbigpLm1vY2tSZXR1cm5WYWx1ZShmYWxzZSk7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTVZDTW9jayB7XG5cdG1vZGVsOiBNb2NrTW9kZWw7XG5cdHZpZXc6IE1vY2tWaWV3O1xuXHRjb250cm9sbGVyOiBNb2NrQ29udHJvbGxlcjtcbn1cblxuLyoqXG4gKiBHZW5lcmF0ZSBtb2RlbCwgdmlldyBhbmQgY29udHJvbGxlciBtb2NrcyB0aGF0IHJlZmVyIHRvIGVhY2ggb3RoZXIuXG4gKlxuICogQHBhcmFtIGV4aXN0aW5nIE9wdGlvbmFsIGV4aXN0aW5nIG1vY2tlZCBpbnN0YW5jZXMgdGhhdCBzaG91bGQgYmUgdXNlZFxuICogQHJldHVybnMgTW9ja2VkIG1vZGVsLCB2aWV3IGFuZCBjb250cm9sbGVyIGluc3RhbmNlc1xuICovXG5leHBvcnQgZnVuY3Rpb24gbW9ja01WQyhleGlzdGluZz86IFBhcnRpYWw8TVZDTW9jaz4pOiBNVkNNb2NrIHtcblx0Y29uc3QgbW9kZWwgPSBleGlzdGluZz8ubW9kZWwgfHwgbmV3IE1vY2tNb2RlbCgpO1xuXHRjb25zdCB2aWV3ID0gZXhpc3Rpbmc/LnZpZXcgfHwgbmV3IE1vY2tWaWV3KCk7XG5cdGNvbnN0IGNvbnRyb2xsZXIgPSBleGlzdGluZz8uY29udHJvbGxlciB8fCBuZXcgTW9ja0NvbnRyb2xsZXIoKTtcblxuXHR2aWV3LmdldENvbnRyb2xsZXIubW9ja1JldHVyblZhbHVlKGNvbnRyb2xsZXIpO1xuXHR2aWV3LmdldE1vZGVsLm1vY2tSZXR1cm5WYWx1ZShtb2RlbCk7XG5cdGNvbnRyb2xsZXIuZ2V0Vmlldy5tb2NrUmV0dXJuVmFsdWUodmlldyk7XG5cblx0cmV0dXJuIHsgbW9kZWwsIHZpZXcsIGNvbnRyb2xsZXIgfTtcbn1cbiJdfQ==
432
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIlVJNU1vY2tIZWxwZXIudHMiXSwibmFtZXMiOlsiTW9ja0NvbnRleHQiLCJvVmFsdWVzIiwib0JpbmRpbmciLCJpc0tlcHRBbGl2ZSIsImdldFByb3BlcnR5IiwiamVzdCIsImZuIiwia2V5IiwicmVxdWVzdFByb3BlcnR5IiwiUHJvbWlzZSIsInJlc29sdmUiLCJzZXRQcm9wZXJ0eSIsInZhbHVlIiwiZ2V0T2JqZWN0IiwicGF0aCIsInRoYXQiLCJyZXN1bHQiLCJpbmRleE9mIiwicGFydHMiLCJzcGxpdCIsInJlZHVjZSIsInN1bSIsInBhcnQiLCJnZXRQYXRoIiwiZ2V0QmluZGluZyIsImdldE1vZGVsIiwiaXNUcmFuc2llbnQiLCJzZXRLZWVwQWxpdmUiLCJib29sIiwiX2ZuT25CZWZvcmVEZXN0cm95IiwiX2JSZXF1ZXN0TWVzc2FnZXMiLCJpc0tlZXBBbGl2ZSIsInJlcXVlc3RTaWRlRWZmZWN0cyIsInJlcXVlc3RPYmplY3QiLCJpc0EiLCJzQ2xhc3NOYW1lIiwiTW9ja1VJNUVsZW1lbnQiLCJiaW5kaW5nQ29udGV4dCIsImdldEJpbmRpbmdDb250ZXh0IiwibW9ja1JldHVyblZhbHVlIiwiZ2V0QmluZGluZ0luZm8iLCJkYXRhIiwiZ2V0UGFyZW50IiwiTW9ja0NvbnRyb2wiLCJNb2NrRXZlbnQiLCJwYXJhbXMiLCJzb3VyY2UiLCJnZXRQYXJhbWV0ZXIiLCJuYW1lIiwiZ2V0U291cmNlIiwiTW9ja0xpc3RCaW5kaW5nIiwiYUNvbnRleHRzIiwibW9ja01vZGVsIiwic2V0QWdncmVnYXRpb24iLCJmaWx0ZXIiLCJzb3J0IiwicmVxdWVzdENvbnRleHRzIiwiYU1vY2tDb250ZXh0cyIsImdldEN1cnJlbnRDb250ZXh0cyIsImdldFVwZGF0ZUdyb3VwSWQiLCJtYXAiLCJjb250ZXh0Iiwic2V0TW9kZWwiLCJvTW9kZWwiLCJNb2NrUHJvcGVydHlCaW5kaW5nIiwibW9ja1BhdGgiLCJnZXRWYWx1ZSIsInNldFBhdGgiLCJNb2NrQ29tcG9zaXRlQmluZGluZyIsImFCaW5kaW5ncyIsImdldEJpbmRpbmdzIiwiYmluZGluZyIsIk1vY2tDb250ZXh0QmluZGluZyIsIm9Db250ZXh0IiwiZ2V0Qm91bmRDb250ZXh0Iiwib01vY2tDb250ZXh0IiwiYXR0YWNoRXZlbnRPbmNlIiwiZ2V0SW50ZXJuYWxNb2NrQ29udGV4dCIsIk1vY2tNZXRhTW9kZWwiLCJvTWV0YURhdGEiLCJnZXRNZXRhQ29udGV4dCIsInNQYXRoIiwiJHBhdGgiLCJvTWV0YUNvbnRleHQiLCJjcmVhdGVCaW5kaW5nQ29udGV4dCIsImdldE1ldGFQYXRoIiwiZ2V0Q29udGV4dCIsIk1vY2tNb2RlbCIsIm1vY2tMaXN0QmluZGluZyIsIm1vY2tDb250ZXh0QmluZGluZyIsImJpbmRMaXN0IiwiYmluZENvbnRleHQiLCJnZXRNZXRhTW9kZWwiLCJvTWV0YU1vZGVsIiwiZ2V0S2VlcEFsaXZlQ29udGV4dCIsIm1vZGVsRnJvbUxpc3RCaW5kaW5nIiwibW9kZWxGcm9tQ29udGV4dEJpbmRpbmciLCJ1bmRlZmluZWQiLCJzZXRNZXRhTW9kZWwiLCJNb2NrVmlldyIsImdldENvbnRyb2xsZXIiLCJnZXRWaWV3RGF0YSIsImdldElkIiwiTW9ja0NvbnRyb2xsZXIiLCJnZXRWaWV3IiwiX3JvdXRpbmciLCJuYXZpZ2F0ZVRvVGFyZ2V0IiwiX2VkaXRGbG93Iiwic3luY1Rhc2siLCJfc2lkZUVmZmVjdHMiLCJoYW5kbGVGaWVsZENoYW5nZSIsIm1vY2tNVkMiLCJleGlzdGluZyIsIm1vZGVsIiwidmlldyIsImNvbnRyb2xsZXIiXSwibWFwcGluZ3MiOiI7QUFBQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7QUFGQTtBQUNBO0FBQ0E7TUFlYUEsVztBQUVaLHlCQUEyQkMsT0FBM0IsRUFBa0RDLFFBQWxELEVBQWtFO0FBQUE7O0FBQUEsV0FEMURDLFdBQzBELEdBRDVDLEtBQzRDO0FBQUEsV0FNM0RDLFdBTjJELEdBTTdDQyxJQUFJLENBQUNDLEVBQUwsQ0FBUSxVQUFDQyxHQUFELEVBQWlCO0FBQzdDLGVBQU8sS0FBSSxDQUFDTixPQUFMLENBQWFNLEdBQWIsQ0FBUDtBQUNBLE9BRm9CLENBTjZDO0FBQUEsV0FTM0RDLGVBVDJELEdBU3pDSCxJQUFJLENBQUNDLEVBQUwsQ0FBUSxVQUFDQyxHQUFELEVBQWlCO0FBQ2pELGVBQU9FLE9BQU8sQ0FBQ0MsT0FBUixDQUFnQixLQUFJLENBQUNULE9BQUwsQ0FBYU0sR0FBYixDQUFoQixDQUFQO0FBQ0EsT0FGd0IsQ0FUeUM7QUFBQSxXQVkzREksV0FaMkQsR0FZN0NOLElBQUksQ0FBQ0MsRUFBTCxDQUFRLFVBQUNDLEdBQUQsRUFBY0ssS0FBZCxFQUE2QjtBQUN6RCxRQUFBLEtBQUksQ0FBQ1gsT0FBTCxDQUFhTSxHQUFiLElBQW9CSyxLQUFwQjtBQUNBLGVBQU8sS0FBSSxDQUFDWCxPQUFMLENBQWFNLEdBQWIsQ0FBUDtBQUNBLE9BSG9CLENBWjZDO0FBQUEsV0FpQjNETSxTQWpCMkQsR0FpQi9DUixJQUFJLENBQUNDLEVBQUwsQ0FBUSxVQUFDUSxJQUFELEVBQWtCO0FBQzVDLFlBQU1DLElBQUksR0FBRyxLQUFiO0FBQ0EsWUFBSUMsTUFBTSxHQUFHRixJQUFJLEdBQUdDLElBQUksQ0FBQ2QsT0FBTCxDQUFhYSxJQUFiLENBQUgsR0FBd0JDLElBQUksQ0FBQ2QsT0FBOUM7O0FBRUEsWUFBSSxDQUFDZSxNQUFELElBQVdGLElBQVgsSUFBbUJBLElBQUksQ0FBQ0csT0FBTCxDQUFhLEdBQWIsSUFBb0IsQ0FBQyxDQUE1QyxFQUErQztBQUM5QyxjQUFNQyxLQUFLLEdBQUdKLElBQUksQ0FBQ0ssS0FBTCxDQUFXLEdBQVgsQ0FBZDtBQUNBSCxVQUFBQSxNQUFNLEdBQUdFLEtBQUssQ0FBQ0UsTUFBTixDQUFhLFVBQUNDLEdBQUQsRUFBTUMsSUFBTixFQUFvQjtBQUN6Q0QsWUFBQUEsR0FBRyxHQUFHQyxJQUFJLEdBQUdELEdBQUcsQ0FBQ0MsSUFBRCxDQUFOLEdBQWVELEdBQXpCO0FBQ0EsbUJBQU9BLEdBQVA7QUFDQSxXQUhRLEVBR05OLElBQUksQ0FBQ2QsT0FIQyxDQUFUO0FBSUE7O0FBRUQsZUFBT2UsTUFBUDtBQUNBLE9BYmtCLENBakIrQztBQUFBLFdBK0IzRE8sT0EvQjJELEdBK0JqRGxCLElBQUksQ0FBQ0MsRUFBTCxDQUFRLFlBQU07QUFDOUIsZUFBTyxLQUFJLENBQUNMLE9BQUwsQ0FBYSxPQUFiLENBQVA7QUFDQSxPQUZnQixDQS9CaUQ7QUFBQSxXQW1DM0R1QixVQW5DMkQsR0FtQzlDbkIsSUFBSSxDQUFDQyxFQUFMLENBQVEsWUFBTTtBQUNqQyxlQUFPLEtBQUksQ0FBQ0osUUFBWjtBQUNBLE9BRm1CLENBbkM4QztBQUFBLFdBc0MzRHVCLFFBdEMyRCxHQXNDaERwQixJQUFJLENBQUNDLEVBQUwsQ0FBUSxZQUFNO0FBQUE7O0FBQy9CLGlDQUFPLEtBQUksQ0FBQ0osUUFBWixtREFBTyxlQUFldUIsUUFBZixFQUFQO0FBQ0EsT0FGaUIsQ0F0Q2dEO0FBQUEsV0F5QzNEQyxXQXpDMkQsR0F5QzdDckIsSUFBSSxDQUFDQyxFQUFMLEVBekM2QztBQUFBLFdBMkMzRHFCLFlBM0MyRCxHQTJDNUN0QixJQUFJLENBQUNDLEVBQUwsQ0FBUSxVQUFDc0IsSUFBRCxFQUFnQkMsa0JBQWhCLEVBQTBDQyxpQkFBMUMsRUFBMEU7QUFDdkcsUUFBQSxLQUFJLENBQUMzQixXQUFMLEdBQW1CeUIsSUFBbkI7QUFDQSxPQUZxQixDQTNDNEM7QUFBQSxXQThDM0RHLFdBOUMyRCxHQThDN0MxQixJQUFJLENBQUNDLEVBQUwsQ0FBUTtBQUFBLGVBQU0sS0FBSSxDQUFDSCxXQUFYO0FBQUEsT0FBUixDQTlDNkM7QUFBQSxXQStDM0Q2QixrQkEvQzJELEdBK0N0QzNCLElBQUksQ0FBQ0MsRUFBTCxFQS9Dc0M7QUFBQSxXQWdEM0QyQixhQWhEMkQsR0FnRDNDNUIsSUFBSSxDQUFDQyxFQUFMLEVBaEQyQztBQUFBLFdBQXZDTCxPQUF1QyxHQUF2Q0EsT0FBdUM7QUFBQSxXQUFoQkMsUUFBZ0IsR0FBaEJBLFFBQWdCO0FBQUU7Ozs7O1dBRTdEZ0MsRyxHQUFQLGFBQVdDLFVBQVgsRUFBd0M7QUFDdkMsYUFBT0EsVUFBVSxLQUFLLCtCQUF0QjtBQUNBLEs7Ozs7Ozs7TUErQ1dDLGM7U0FFTEMsYyxHQUFpQixJQUFJckMsV0FBSixDQUFnQixFQUFoQixDO1NBQ2pCd0IsVSxHQUFhbkIsSUFBSSxDQUFDQyxFQUFMLEU7U0FDYmdDLGlCLEdBQW9CakMsSUFBSSxDQUFDQyxFQUFMLEdBQVVpQyxlQUFWLENBQTBCLEtBQUtGLGNBQS9CLEM7U0FDcEJHLGMsR0FBaUJuQyxJQUFJLENBQUNDLEVBQUwsRTtTQUNqQm1DLEksR0FBT3BDLElBQUksQ0FBQ0MsRUFBTCxFO1NBQ1BtQixRLEdBQVdwQixJQUFJLENBQUNDLEVBQUwsRTtTQUNYb0MsUyxHQUFZckMsSUFBSSxDQUFDQyxFQUFMLEU7Ozs7O01BR1BxQyxXOzs7Ozs7Ozs7OzthQUNMTCxpQixHQUF5Q2pDLElBQUksQ0FBQ0MsRUFBTCxFO2FBQ3pDbUIsUSxHQUFnQ3BCLElBQUksQ0FBQ0MsRUFBTCxFOzs7Ozs7SUFGUDhCLGM7Ozs7TUFLcEJRLFMsR0FDWixxQkFBcUg7QUFBQTs7QUFBQSxRQUEzRkMsTUFBMkYsdUVBQTFELEVBQTBEO0FBQUEsUUFBL0NDLE1BQStDLHVFQUF0QixJQUFJVixjQUFKLEVBQXNCO0FBQUEsU0FFOUdXLFlBRjhHLEdBRS9GMUMsSUFBSSxDQUFDQyxFQUFMLENBQVEsVUFBQzBDLElBQUQ7QUFBQSxhQUFVLE1BQUksQ0FBQ0gsTUFBTCxDQUFZRyxJQUFaLENBQVY7QUFBQSxLQUFSLENBRitGO0FBQUEsU0FJOUdDLFNBSjhHLEdBSWxHNUMsSUFBSSxDQUFDQyxFQUFMLENBQVE7QUFBQSxhQUFNLE1BQUksQ0FBQ3dDLE1BQVg7QUFBQSxLQUFSLENBSmtHO0FBQUEsU0FBM0ZELE1BQTJGLEdBQTNGQSxNQUEyRjtBQUFBLFNBQS9DQyxNQUErQyxHQUEvQ0EsTUFBK0M7QUFBRSxHO0FBT3hIO0FBQ0E7QUFDQTs7Ozs7TUFDYUksZTtBQUdaLDZCQUFtQkMsU0FBbkIsRUFBOENDLFNBQTlDLEVBQXFFO0FBQUE7O0FBQUEsV0FpQjlEQyxjQWpCOEQsR0FpQjdDaEQsSUFBSSxDQUFDQyxFQUFMLEVBakI2QztBQUFBLFdBa0I5RGdELE1BbEI4RCxHQWtCckRqRCxJQUFJLENBQUNDLEVBQUwsRUFsQnFEO0FBQUEsV0FtQjlEaUQsSUFuQjhELEdBbUJ2RGxELElBQUksQ0FBQ0MsRUFBTCxFQW5CdUQ7QUFBQSxXQXNCOURrRCxlQXRCOEQsR0FzQjVDbkQsSUFBSSxDQUFDQyxFQUFMLENBQVEsWUFBYTtBQUM3QyxlQUFPRyxPQUFPLENBQUNDLE9BQVIsQ0FBZ0IsTUFBSSxDQUFDK0MsYUFBckIsQ0FBUDtBQUNBLE9BRndCLENBdEI0QztBQUFBLFdBMEI5REMsa0JBMUI4RCxHQTBCekNyRCxJQUFJLENBQUNDLEVBQUwsQ0FBUSxZQUFhO0FBQ2hELGVBQU8sTUFBSSxDQUFDbUQsYUFBWjtBQUNBLE9BRjJCLENBMUJ5QztBQUFBLFdBNkI5RGhDLFFBN0I4RCxHQTZCbkRwQixJQUFJLENBQUNDLEVBQUwsQ0FBUSxZQUFNO0FBQy9CLGVBQU8sTUFBSSxDQUFDOEMsU0FBWjtBQUNBLE9BRmlCLENBN0JtRDtBQUFBLFdBZ0M5RE8sZ0JBaEM4RCxHQWdDM0N0RCxJQUFJLENBQUNDLEVBQUwsQ0FBUTtBQUFBLGVBQU0sTUFBTjtBQUFBLE9BQVIsQ0FoQzJDO0FBQUEsV0FBdkI4QyxTQUF1QixHQUF2QkEsU0FBdUI7QUFDcEVELE1BQUFBLFNBQVMsR0FBR0EsU0FBUyxJQUFJLEVBQXpCO0FBRUEsV0FBS00sYUFBTCxHQUFxQk4sU0FBUyxDQUFDUyxHQUFWLENBQWMsVUFBQ0MsT0FBRCxFQUFhO0FBQy9DLGVBQU8sSUFBSTdELFdBQUosQ0FBZ0I2RCxPQUFoQixFQUF5QixNQUF6QixDQUFQO0FBQ0EsT0FGb0IsQ0FBckI7QUFHQTs7Ozs7WUFFTTNCLEcsR0FBUCxhQUFXQyxVQUFYLEVBQXdDO0FBQ3ZDLGFBQU9BLFVBQVUsS0FBSyx3Q0FBdEI7QUFDQSxLOztZQUVNMkIsUSxHQUFQLGtCQUFnQkMsTUFBaEIsRUFBbUM7QUFDbEMsV0FBS1gsU0FBTCxHQUFpQlcsTUFBakI7QUFDQSxLLENBRUQ7Ozs7Ozs7O01BbUJZQyxtQjtBQUlaLGlDQUFtQlosU0FBbkIsRUFBeUNhLFFBQXpDLEVBQTJEO0FBQUE7O0FBQUEsV0FZcER4QyxRQVpvRCxHQVl6Q3BCLElBQUksQ0FBQ0MsRUFBTCxDQUFRLFlBQU07QUFDL0IsZUFBTyxNQUFJLENBQUM4QyxTQUFaO0FBQ0EsT0FGaUIsQ0FaeUM7QUFBQSxXQW1CcEQ3QixPQW5Cb0QsR0FtQjFDbEIsSUFBSSxDQUFDQyxFQUFMLENBQVEsWUFBTTtBQUM5QixlQUFPLE1BQUksQ0FBQzJELFFBQVo7QUFDQSxPQUZnQixDQW5CMEM7QUFBQSxXQXVCcERDLFFBdkJvRCxHQXVCekM3RCxJQUFJLENBQUNDLEVBQUwsQ0FBUSxZQUFNO0FBQUE7O0FBQy9CLGVBQU8sTUFBUCxhQUFPLE1BQVAsMkNBQU8sTUFBSSxDQUFFOEMsU0FBYixxREFBTyxpQkFBaUJoRCxXQUFqQixDQUE2QixNQUFNLE1BQUksQ0FBQzZELFFBQXhDLENBQVA7QUFDQSxPQUZpQixDQXZCeUM7QUFDMUQsV0FBS0gsUUFBTCxDQUFjVixTQUFkO0FBQ0EsV0FBS2UsT0FBTCxDQUFhRixRQUFiO0FBQ0E7Ozs7O1lBRU0vQixHLEdBQVAsYUFBV0MsVUFBWCxFQUF3QztBQUN2QyxhQUFPQSxVQUFVLEtBQUssNENBQXRCO0FBQ0EsSzs7WUFFTTJCLFEsR0FBUCxrQkFBZ0JDLE1BQWhCLEVBQW1DO0FBQ2xDLFdBQUtYLFNBQUwsR0FBaUJXLE1BQWpCO0FBQ0EsSzs7WUFLTUksTyxHQUFQLGlCQUFlckQsSUFBZixFQUF5QztBQUN4QyxXQUFLbUQsUUFBTCxHQUFnQm5ELElBQUksR0FBR0EsSUFBSCxHQUFVLEVBQTlCO0FBQ0EsSzs7Ozs7OztNQVVXc0Qsb0I7QUFHWixrQ0FBbUJDLFNBQW5CLEVBQXFEO0FBQUE7O0FBQUEsV0FROUNDLFdBUjhDLEdBUWhDakUsSUFBSSxDQUFDQyxFQUFMLENBQVEsWUFBTTtBQUNsQyxlQUFPLE1BQUksQ0FBQytELFNBQVo7QUFDQSxPQUZvQixDQVJnQztBQUFBLFdBWTlDSCxRQVo4QyxHQVluQzdELElBQUksQ0FBQ0MsRUFBTCxDQUFRLFlBQU07QUFDL0IsZUFBTyxNQUFJLENBQUMrRCxTQUFMLENBQWVULEdBQWYsQ0FBbUIsVUFBQ1csT0FBRDtBQUFBLGlCQUFhQSxPQUFPLENBQUNMLFFBQVIsRUFBYjtBQUFBLFNBQW5CLENBQVA7QUFDQSxPQUZpQixDQVptQztBQUNwRCxXQUFLRyxTQUFMLEdBQWlCQSxTQUFqQjtBQUNBOzs7OztZQUVNbkMsRyxHQUFQLGFBQVdDLFVBQVgsRUFBd0M7QUFDdkMsYUFBT0EsVUFBVSxLQUFLLCtCQUF0QjtBQUNBLEs7Ozs7Ozs7TUFXV3FDLGtCO0FBSVosZ0NBQW1CQyxRQUFuQixFQUEyQ3JCLFNBQTNDLEVBQWtFO0FBQUE7O0FBQUEsV0FGMURqRCxXQUUwRCxHQUZuQyxLQUVtQztBQUFBLFdBZTNEdUUsZUFmMkQsR0FlekNyRSxJQUFJLENBQUNDLEVBQUwsQ0FBUSxZQUFNO0FBQ3RDLGVBQU8sTUFBSSxDQUFDcUUsWUFBWjtBQUNBLE9BRndCLENBZnlDO0FBQUEsV0FrQjNEQyxlQWxCMkQsR0FrQnpDdkUsSUFBSSxDQUFDQyxFQUFMLEVBbEJ5QztBQUFBLFdBbUIzRG1CLFFBbkIyRCxHQW1CaERwQixJQUFJLENBQUNDLEVBQUwsQ0FBUSxZQUFNO0FBQy9CLGVBQU8sTUFBSSxDQUFDOEMsU0FBWjtBQUNBLE9BRmlCLENBbkJnRDtBQUFBLFdBQXZCQSxTQUF1QixHQUF2QkEsU0FBdUI7QUFDakUsV0FBS3VCLFlBQUwsR0FBb0IsSUFBSTNFLFdBQUosQ0FBZ0J5RSxRQUFRLElBQUksRUFBNUIsRUFBZ0MsSUFBaEMsQ0FBcEI7QUFDQTs7Ozs7WUFFTXZDLEcsR0FBUCxhQUFXQyxVQUFYLEVBQXdDO0FBQ3ZDLGFBQU9BLFVBQVUsS0FBSywyQ0FBdEI7QUFDQSxLOztZQUNNMEMsc0IsR0FBUCxrQ0FBNkM7QUFDNUMsYUFBTyxLQUFLRixZQUFaO0FBQ0EsSzs7WUFDTWIsUSxHQUFQLGtCQUFnQkMsTUFBaEIsRUFBbUM7QUFDbEMsV0FBS1gsU0FBTCxHQUFpQlcsTUFBakI7QUFDQSxLLENBRUQ7Ozs7O0FBVUQ7QUFDQTtBQUNBOzs7OztNQUNhZSxhLEdBSVosdUJBQW1CQyxTQUFuQixFQUFvQztBQUFBOztBQUFBLFNBTTdCQyxjQU42QixHQU1aM0UsSUFBSSxDQUFDQyxFQUFMLENBQVEsVUFBQzJFLEtBQUQsRUFBbUI7QUFDbEQsYUFBTyxJQUFJakYsV0FBSixDQUFnQjtBQUFFa0YsUUFBQUEsS0FBSyxFQUFFRDtBQUFULE9BQWhCLENBQVA7QUFDQSxLQUZ1QixDQU5ZO0FBQUEsU0FTN0JwRSxTQVQ2QixHQVNqQlIsSUFBSSxDQUFDQyxFQUFMLENBQVEsVUFBQzJFLEtBQUQsRUFBbUI7QUFDN0MsYUFBTyxNQUFJLENBQUNFLFlBQUwsQ0FBa0IvRSxXQUFsQixDQUE4QjZFLEtBQTlCLENBQVA7QUFDQSxLQUZrQixDQVRpQjtBQUFBLFNBWTdCaEQsYUFaNkIsR0FZYjVCLElBQUksQ0FBQ0MsRUFBTCxFQVphO0FBQUEsU0FhN0I4RSxvQkFiNkIsR0FhTi9FLElBQUksQ0FBQ0MsRUFBTCxDQUFRLFVBQUMyRSxLQUFELEVBQW1CO0FBQ3hELGFBQU8sSUFBSWpGLFdBQUosQ0FBZ0I7QUFBRWtGLFFBQUFBLEtBQUssRUFBRUQ7QUFBVCxPQUFoQixDQUFQO0FBQ0EsS0FGNkIsQ0FiTTtBQUFBLFNBZ0I3QkksV0FoQjZCLEdBZ0JmaEYsSUFBSSxDQUFDQyxFQUFMLENBQVEsVUFBQzJFLEtBQUQsRUFBbUI7QUFDL0MsYUFBT0EsS0FBUDtBQUNBLEtBRm9CLENBaEJlO0FBQUEsU0FtQjdCSyxVQW5CNkIsR0FtQmhCakYsSUFBSSxDQUFDQyxFQUFMLEVBbkJnQjtBQUNuQyxTQUFLNkUsWUFBTCxHQUFvQixJQUFJbkYsV0FBSixDQUFnQitFLFNBQVMsSUFBSSxFQUE3QixDQUFwQjtBQUNBLEcsQ0FFRDtBQUNBOztBQWlCRDtBQUNBO0FBQ0E7Ozs7O01BRWFRLFM7QUFHWix1QkFBMkJDLGVBQTNCLEVBQXNFQyxrQkFBdEUsRUFBK0c7QUFBQTs7QUFBQSxXQXVCeEdDLFFBdkJ3RyxHQXVCN0ZyRixJQUFJLENBQUNDLEVBQUwsQ0FBUSxZQUFhO0FBQ3RDLGVBQU8sTUFBSSxDQUFDa0YsZUFBWjtBQUNBLE9BRmlCLENBdkI2RjtBQUFBLFdBMkJ4R0csV0EzQndHLEdBMkIxRnRGLElBQUksQ0FBQ0MsRUFBTCxDQUFRLFlBQWE7QUFDekMsZUFBTyxNQUFJLENBQUNtRixrQkFBWjtBQUNBLE9BRm9CLENBM0IwRjtBQUFBLFdBOEJ4R0csWUE5QndHLEdBOEJ6RnZGLElBQUksQ0FBQ0MsRUFBTCxDQUFRLFlBQU07QUFDbkMsZUFBTyxNQUFJLENBQUN1RixVQUFaO0FBQ0EsT0FGcUIsQ0E5QnlGO0FBQUEsV0FrQ3hHekYsV0FsQ3dHLEdBa0MxRkMsSUFBSSxDQUFDQyxFQUFMLEVBbEMwRjtBQUFBLFdBbUN4R0ssV0FuQ3dHLEdBbUMxRk4sSUFBSSxDQUFDQyxFQUFMLEVBbkMwRjtBQUFBLFdBb0N4RzJCLGFBcEN3RyxHQW9DeEY1QixJQUFJLENBQUNDLEVBQUwsRUFwQ3dGO0FBQUEsV0FxQ3hHd0YsbUJBckN3RyxHQXFDbEZ6RixJQUFJLENBQUNDLEVBQUwsRUFyQ2tGO0FBQUEsV0FBcEZrRixlQUFvRixHQUFwRkEsZUFBb0Y7QUFBQSxXQUF6Q0Msa0JBQXlDLEdBQXpDQSxrQkFBeUM7O0FBQzlHLFVBQUlELGVBQUosRUFBcUI7QUFDcEJBLFFBQUFBLGVBQWUsQ0FBQzFCLFFBQWhCLENBQXlCLElBQXpCO0FBQ0E7O0FBQ0QsVUFBSTJCLGtCQUFKLEVBQXdCO0FBQ3ZCQSxRQUFBQSxrQkFBa0IsQ0FBQzNCLFFBQW5CLENBQTRCLElBQTVCO0FBQ0E7QUFDRCxLLENBRUQ7Ozs7O2NBQ09pQyxvQixHQUFQLDhCQUE0QlAsZUFBNUIsRUFBeUU7QUFDeEUsYUFBTyxJQUFJRCxTQUFKLENBQWNDLGVBQWQsQ0FBUDtBQUNBLEs7O2NBQ01RLHVCLEdBQVAsaUNBQStCUCxrQkFBL0IsRUFBa0Y7QUFDakYsYUFBTyxJQUFJRixTQUFKLENBQWNVLFNBQWQsRUFBeUJSLGtCQUF6QixDQUFQO0FBQ0EsSzs7OztZQUVNUyxZLEdBQVAsc0JBQW9CTCxVQUFwQixFQUErQztBQUM5QyxXQUFLQSxVQUFMLEdBQWtCQSxVQUFsQjtBQUNBLEssQ0FFRDtBQUNBOzs7Ozs7OztNQWtCWU0sUTs7V0FDTEMsYSxHQUFnQi9GLElBQUksQ0FBQ0MsRUFBTCxFO1dBRWhCZ0MsaUIsR0FBb0JqQyxJQUFJLENBQUNDLEVBQUwsRTtXQUVwQm1CLFEsR0FBV3BCLElBQUksQ0FBQ0MsRUFBTCxFO1dBRVgrRixXLEdBQWNoRyxJQUFJLENBQUNDLEVBQUwsRTtXQU1kZ0csSyxHQUFRakcsSUFBSSxDQUFDQyxFQUFMLEU7Ozs7OztZQUpSNEIsRyxHQUFQLGFBQVdDLFVBQVgsRUFBd0M7QUFDdkMsYUFBT0EsVUFBVSxLQUFLLHNCQUF0QjtBQUNBLEs7Ozs7Ozs7TUFLV29FLGM7U0FDTEMsTyxHQUFVbkcsSUFBSSxDQUFDQyxFQUFMLEdBQVVpQyxlQUFWLENBQTBCLElBQUk0RCxRQUFKLEVBQTFCLEM7U0FFVk0sUSxHQUFXO0FBQ2pCQyxNQUFBQSxnQkFBZ0IsRUFBRXJHLElBQUksQ0FBQ0MsRUFBTDtBQURELEs7U0FJWHFHLFMsR0FBWTtBQUNsQkMsTUFBQUEsUUFBUSxFQUFFdkcsSUFBSSxDQUFDQyxFQUFMO0FBRFEsSztTQUladUcsWSxHQUFlO0FBQ3JCQyxNQUFBQSxpQkFBaUIsRUFBRXpHLElBQUksQ0FBQ0MsRUFBTDtBQURFLEs7U0FJdEI0QixHLEdBQU03QixJQUFJLENBQUNDLEVBQUwsR0FBVWlDLGVBQVYsQ0FBMEIsS0FBMUIsQzs7Ozs7QUFTUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxXQUFTd0UsT0FBVCxDQUFpQkMsUUFBakIsRUFBdUQ7QUFDN0QsUUFBTUMsS0FBSyxHQUFHLENBQUFELFFBQVEsU0FBUixJQUFBQSxRQUFRLFdBQVIsWUFBQUEsUUFBUSxDQUFFQyxLQUFWLEtBQW1CLElBQUkxQixTQUFKLEVBQWpDO0FBQ0EsUUFBTTJCLElBQUksR0FBRyxDQUFBRixRQUFRLFNBQVIsSUFBQUEsUUFBUSxXQUFSLFlBQUFBLFFBQVEsQ0FBRUUsSUFBVixLQUFrQixJQUFJZixRQUFKLEVBQS9CO0FBQ0EsUUFBTWdCLFVBQVUsR0FBRyxDQUFBSCxRQUFRLFNBQVIsSUFBQUEsUUFBUSxXQUFSLFlBQUFBLFFBQVEsQ0FBRUcsVUFBVixLQUF3QixJQUFJWixjQUFKLEVBQTNDO0FBRUFXLElBQUFBLElBQUksQ0FBQ2QsYUFBTCxDQUFtQjdELGVBQW5CLENBQW1DNEUsVUFBbkM7QUFDQUQsSUFBQUEsSUFBSSxDQUFDekYsUUFBTCxDQUFjYyxlQUFkLENBQThCMEUsS0FBOUI7QUFDQUUsSUFBQUEsVUFBVSxDQUFDWCxPQUFYLENBQW1CakUsZUFBbkIsQ0FBbUMyRSxJQUFuQztBQUVBLFdBQU87QUFBRUQsTUFBQUEsS0FBSyxFQUFMQSxLQUFGO0FBQVNDLE1BQUFBLElBQUksRUFBSkEsSUFBVDtBQUFlQyxNQUFBQSxVQUFVLEVBQVZBO0FBQWYsS0FBUDtBQUNBIiwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIE1vY2sgY2xhc3MgZm9yIGEgVjQgQ29udGV4dFxuICovXG5pbXBvcnQgRXZlbnQgZnJvbSBcInNhcC91aS9iYXNlL0V2ZW50XCI7XG5pbXBvcnQgQ29udHJvbCBmcm9tIFwic2FwL3VpL2NvcmUvQ29udHJvbFwiO1xuaW1wb3J0IFVJNUVsZW1lbnQgZnJvbSBcInNhcC91aS9jb3JlL0VsZW1lbnRcIjtcbmltcG9ydCBDb250cm9sbGVyIGZyb20gXCJzYXAvdWkvY29yZS9tdmMvQ29udHJvbGxlclwiO1xuaW1wb3J0IFZpZXcgZnJvbSBcInNhcC91aS9jb3JlL212Yy9WaWV3XCI7XG5pbXBvcnQgQ29tcG9zaXRlQmluZGluZyBmcm9tIFwic2FwL3VpL21vZGVsL0NvbXBvc2l0ZUJpbmRpbmdcIjtcbmltcG9ydCBKU09OTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9qc29uL0pTT05Nb2RlbFwiO1xuaW1wb3J0IENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9Db250ZXh0XCI7XG5pbXBvcnQgT0RhdGFDb250ZXh0QmluZGluZyBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhQ29udGV4dEJpbmRpbmdcIjtcbmltcG9ydCBPRGF0YUxpc3RCaW5kaW5nIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFMaXN0QmluZGluZ1wiO1xuaW1wb3J0IE9EYXRhTWV0YU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFNZXRhTW9kZWxcIjtcbmltcG9ydCBPRGF0YU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFNb2RlbFwiO1xuaW1wb3J0IE9EYXRhUHJvcGVydHlCaW5kaW5nIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFQcm9wZXJ0eUJpbmRpbmdcIjtcblxuZXhwb3J0IGNsYXNzIE1vY2tDb250ZXh0IGltcGxlbWVudHMgUGFydGlhbDxDb250ZXh0PiB7XG5cdHByaXZhdGUgaXNLZXB0QWxpdmUgPSBmYWxzZTtcblx0cHVibGljIGNvbnN0cnVjdG9yKHByaXZhdGUgb1ZhbHVlcz86IGFueSwgcHJpdmF0ZSBvQmluZGluZz86IGFueSkge31cblxuXHRwdWJsaWMgaXNBKHNDbGFzc05hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiBzQ2xhc3NOYW1lID09PSBcInNhcC51aS5tb2RlbC5vZGF0YS52NC5Db250ZXh0XCI7XG5cdH1cblxuXHRwdWJsaWMgZ2V0UHJvcGVydHkgPSBqZXN0LmZuKChrZXk6IHN0cmluZykgPT4ge1xuXHRcdHJldHVybiB0aGlzLm9WYWx1ZXNba2V5XTtcblx0fSk7XG5cdHB1YmxpYyByZXF1ZXN0UHJvcGVydHkgPSBqZXN0LmZuKChrZXk6IHN0cmluZykgPT4ge1xuXHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5vVmFsdWVzW2tleV0pO1xuXHR9KTtcblx0cHVibGljIHNldFByb3BlcnR5ID0gamVzdC5mbigoa2V5OiBzdHJpbmcsIHZhbHVlOiBhbnkpID0+IHtcblx0XHR0aGlzLm9WYWx1ZXNba2V5XSA9IHZhbHVlO1xuXHRcdHJldHVybiB0aGlzLm9WYWx1ZXNba2V5XTtcblx0fSk7XG5cblx0cHVibGljIGdldE9iamVjdCA9IGplc3QuZm4oKHBhdGg6IHN0cmluZykgPT4ge1xuXHRcdGNvbnN0IHRoYXQgPSB0aGlzIGFzIGFueTtcblx0XHRsZXQgcmVzdWx0ID0gcGF0aCA/IHRoYXQub1ZhbHVlc1twYXRoXSA6IHRoYXQub1ZhbHVlcztcblxuXHRcdGlmICghcmVzdWx0ICYmIHBhdGggJiYgcGF0aC5pbmRleE9mKFwiL1wiKSA+IC0xKSB7XG5cdFx0XHRjb25zdCBwYXJ0cyA9IHBhdGguc3BsaXQoXCIvXCIpO1xuXHRcdFx0cmVzdWx0ID0gcGFydHMucmVkdWNlKChzdW0sIHBhcnQ6IGFueSkgPT4ge1xuXHRcdFx0XHRzdW0gPSBwYXJ0ID8gc3VtW3BhcnRdIDogc3VtO1xuXHRcdFx0XHRyZXR1cm4gc3VtO1xuXHRcdFx0fSwgdGhhdC5vVmFsdWVzKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9KTtcblx0cHVibGljIGdldFBhdGggPSBqZXN0LmZuKCgpID0+IHtcblx0XHRyZXR1cm4gdGhpcy5vVmFsdWVzW1wiJHBhdGhcIl07XG5cdH0pO1xuXG5cdHB1YmxpYyBnZXRCaW5kaW5nID0gamVzdC5mbigoKSA9PiB7XG5cdFx0cmV0dXJuIHRoaXMub0JpbmRpbmc7XG5cdH0pO1xuXHRwdWJsaWMgZ2V0TW9kZWwgPSBqZXN0LmZuKCgpID0+IHtcblx0XHRyZXR1cm4gdGhpcy5vQmluZGluZz8uZ2V0TW9kZWwoKSBhcyBhbnkgYXMgT0RhdGFNb2RlbDtcblx0fSk7XG5cdHB1YmxpYyBpc1RyYW5zaWVudCA9IGplc3QuZm4oKTtcblx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuXHRwdWJsaWMgc2V0S2VlcEFsaXZlID0gamVzdC5mbigoYm9vbDogYm9vbGVhbiwgX2ZuT25CZWZvcmVEZXN0cm95PzogYW55LCBfYlJlcXVlc3RNZXNzYWdlcz86IGJvb2xlYW4pID0+IHtcblx0XHR0aGlzLmlzS2VwdEFsaXZlID0gYm9vbDtcblx0fSk7XG5cdHB1YmxpYyBpc0tlZXBBbGl2ZSA9IGplc3QuZm4oKCkgPT4gdGhpcy5pc0tlcHRBbGl2ZSk7XG5cdHB1YmxpYyByZXF1ZXN0U2lkZUVmZmVjdHMgPSBqZXN0LmZuKCk7XG5cdHB1YmxpYyByZXF1ZXN0T2JqZWN0ID0gamVzdC5mbigpO1xufVxuXG5leHBvcnQgY2xhc3MgTW9ja1VJNUVsZW1lbnQgaW1wbGVtZW50cyBQYXJ0aWFsPFVJNUVsZW1lbnQ+IHtcblx0W2tleTogc3RyaW5nXTogYW55O1xuXHRwdWJsaWMgYmluZGluZ0NvbnRleHQgPSBuZXcgTW9ja0NvbnRleHQoe30pO1xuXHRwdWJsaWMgZ2V0QmluZGluZyA9IGplc3QuZm4oKTtcblx0cHVibGljIGdldEJpbmRpbmdDb250ZXh0ID0gamVzdC5mbigpLm1vY2tSZXR1cm5WYWx1ZSh0aGlzLmJpbmRpbmdDb250ZXh0KTtcblx0cHVibGljIGdldEJpbmRpbmdJbmZvID0gamVzdC5mbigpO1xuXHRwdWJsaWMgZGF0YSA9IGplc3QuZm4oKTtcblx0cHVibGljIGdldE1vZGVsID0gamVzdC5mbigpO1xuXHRwdWJsaWMgZ2V0UGFyZW50ID0gamVzdC5mbigpO1xufVxuXG5leHBvcnQgY2xhc3MgTW9ja0NvbnRyb2wgZXh0ZW5kcyBNb2NrVUk1RWxlbWVudCBpbXBsZW1lbnRzIFBhcnRpYWw8Q29udHJvbD4ge1xuXHRwdWJsaWMgZ2V0QmluZGluZ0NvbnRleHQ6IGplc3QuTW9jazxhbnksIGFueT4gPSBqZXN0LmZuKCk7XG5cdHB1YmxpYyBnZXRNb2RlbDogamVzdC5Nb2NrPGFueSwgYW55PiA9IGplc3QuZm4oKTtcbn1cblxuZXhwb3J0IGNsYXNzIE1vY2tFdmVudCBpbXBsZW1lbnRzIFBhcnRpYWw8RXZlbnQ+IHtcblx0cHVibGljIGNvbnN0cnVjdG9yKHB1YmxpYyBwYXJhbXM6IHsgW2tleTogc3RyaW5nXTogYW55IH0gPSB7fSwgcHVibGljIHNvdXJjZTogTW9ja1VJNUVsZW1lbnQgPSBuZXcgTW9ja1VJNUVsZW1lbnQoKSkge31cblxuXHRwdWJsaWMgZ2V0UGFyYW1ldGVyID0gamVzdC5mbigobmFtZSkgPT4gdGhpcy5wYXJhbXNbbmFtZV0pO1xuXG5cdHB1YmxpYyBnZXRTb3VyY2UgPSBqZXN0LmZuKCgpID0+IHRoaXMuc291cmNlIGFzIGFueSk7XG59XG5cbi8qKlxuICogTW9jayBjbGFzcyBmb3IgT0RhdGEgVjQgTGlzdEJpbmRpbmdcbiAqL1xuZXhwb3J0IGNsYXNzIE1vY2tMaXN0QmluZGluZyBpbXBsZW1lbnRzIFBhcnRpYWw8T0RhdGFMaXN0QmluZGluZz4ge1xuXHRwcml2YXRlIGFNb2NrQ29udGV4dHM6IE1vY2tDb250ZXh0W107XG5cblx0cHVibGljIGNvbnN0cnVjdG9yKGFDb250ZXh0cz86IGFueVtdLCBwcml2YXRlIG1vY2tNb2RlbD86IE1vY2tNb2RlbCkge1xuXHRcdGFDb250ZXh0cyA9IGFDb250ZXh0cyB8fCBbXTtcblxuXHRcdHRoaXMuYU1vY2tDb250ZXh0cyA9IGFDb250ZXh0cy5tYXAoKGNvbnRleHQpID0+IHtcblx0XHRcdHJldHVybiBuZXcgTW9ja0NvbnRleHQoY29udGV4dCwgdGhpcyk7XG5cdFx0fSk7XG5cdH1cblxuXHRwdWJsaWMgaXNBKHNDbGFzc05hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiBzQ2xhc3NOYW1lID09PSBcInNhcC51aS5tb2RlbC5vZGF0YS52NC5PRGF0YUxpc3RCaW5kaW5nXCI7XG5cdH1cblxuXHRwdWJsaWMgc2V0TW9kZWwob01vZGVsOiBNb2NrTW9kZWwpIHtcblx0XHR0aGlzLm1vY2tNb2RlbCA9IG9Nb2RlbDtcblx0fVxuXG5cdC8vIE1vY2tlZCBBUElcblx0cHVibGljIHNldEFnZ3JlZ2F0aW9uID0gamVzdC5mbigpO1xuXHRwdWJsaWMgZmlsdGVyID0gamVzdC5mbigpO1xuXHRwdWJsaWMgc29ydCA9IGplc3QuZm4oKTtcblxuXHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG5cdHB1YmxpYyByZXF1ZXN0Q29udGV4dHMgPSBqZXN0LmZuKCguLi5hcmdzKSA9PiB7XG5cdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZSh0aGlzLmFNb2NrQ29udGV4dHMgYXMgYW55IGFzIENvbnRleHRbXSk7XG5cdH0pO1xuXHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG5cdHB1YmxpYyBnZXRDdXJyZW50Q29udGV4dHMgPSBqZXN0LmZuKCguLi5hcmdzKSA9PiB7XG5cdFx0cmV0dXJuIHRoaXMuYU1vY2tDb250ZXh0cyBhcyBhbnkgYXMgQ29udGV4dFtdO1xuXHR9KTtcblx0cHVibGljIGdldE1vZGVsID0gamVzdC5mbigoKSA9PiB7XG5cdFx0cmV0dXJuIHRoaXMubW9ja01vZGVsIGFzIGFueSBhcyBPRGF0YU1vZGVsO1xuXHR9KTtcblx0cHVibGljIGdldFVwZGF0ZUdyb3VwSWQgPSBqZXN0LmZuKCgpID0+IFwiYXV0b1wiKTtcbn1cblxuZXhwb3J0IGNsYXNzIE1vY2tQcm9wZXJ0eUJpbmRpbmcgaW1wbGVtZW50cyBQYXJ0aWFsPE9EYXRhUHJvcGVydHlCaW5kaW5nPiB7XG5cdHByaXZhdGUgbW9ja01vZGVsITogSlNPTk1vZGVsO1xuXHRwcml2YXRlIG1vY2tQYXRoITogc3RyaW5nO1xuXG5cdHB1YmxpYyBjb25zdHJ1Y3Rvcihtb2NrTW9kZWw6IEpTT05Nb2RlbCwgbW9ja1BhdGg6IHN0cmluZykge1xuXHRcdHRoaXMuc2V0TW9kZWwobW9ja01vZGVsKTtcblx0XHR0aGlzLnNldFBhdGgobW9ja1BhdGgpO1xuXHR9XG5cblx0cHVibGljIGlzQShzQ2xhc3NOYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gc0NsYXNzTmFtZSA9PT0gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFQcm9wZXJ0eUJpbmRpbmdcIjtcblx0fVxuXG5cdHB1YmxpYyBzZXRNb2RlbChvTW9kZWw6IEpTT05Nb2RlbCkge1xuXHRcdHRoaXMubW9ja01vZGVsID0gb01vZGVsO1xuXHR9XG5cdHB1YmxpYyBnZXRNb2RlbCA9IGplc3QuZm4oKCkgPT4ge1xuXHRcdHJldHVybiB0aGlzLm1vY2tNb2RlbCBhcyBhbnkgYXMgT0RhdGFNb2RlbDtcblx0fSk7XG5cblx0cHVibGljIHNldFBhdGgocGF0aDogc3RyaW5nIHwgdW5kZWZpbmVkKSB7XG5cdFx0dGhpcy5tb2NrUGF0aCA9IHBhdGggPyBwYXRoIDogXCJcIjtcblx0fVxuXHRwdWJsaWMgZ2V0UGF0aCA9IGplc3QuZm4oKCkgPT4ge1xuXHRcdHJldHVybiB0aGlzLm1vY2tQYXRoO1xuXHR9KTtcblxuXHRwdWJsaWMgZ2V0VmFsdWUgPSBqZXN0LmZuKCgpID0+IHtcblx0XHRyZXR1cm4gdGhpcz8ubW9ja01vZGVsPy5nZXRQcm9wZXJ0eShcIi9cIiArIHRoaXMubW9ja1BhdGgpO1xuXHR9KTtcbn1cblxuZXhwb3J0IGNsYXNzIE1vY2tDb21wb3NpdGVCaW5kaW5nIGltcGxlbWVudHMgUGFydGlhbDxDb21wb3NpdGVCaW5kaW5nPiB7XG5cdHByaXZhdGUgYUJpbmRpbmdzOiBNb2NrUHJvcGVydHlCaW5kaW5nW107XG5cblx0cHVibGljIGNvbnN0cnVjdG9yKGFCaW5kaW5nczogTW9ja1Byb3BlcnR5QmluZGluZ1tdKSB7XG5cdFx0dGhpcy5hQmluZGluZ3MgPSBhQmluZGluZ3M7XG5cdH1cblxuXHRwdWJsaWMgaXNBKHNDbGFzc05hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiBzQ2xhc3NOYW1lID09PSBcInNhcC51aS5tb2RlbC5Db21wb3NpdGVCaW5kaW5nXCI7XG5cdH1cblxuXHRwdWJsaWMgZ2V0QmluZGluZ3MgPSBqZXN0LmZuKCgpID0+IHtcblx0XHRyZXR1cm4gdGhpcy5hQmluZGluZ3M7XG5cdH0pO1xuXG5cdHB1YmxpYyBnZXRWYWx1ZSA9IGplc3QuZm4oKCkgPT4ge1xuXHRcdHJldHVybiB0aGlzLmFCaW5kaW5ncy5tYXAoKGJpbmRpbmcpID0+IGJpbmRpbmcuZ2V0VmFsdWUoKSk7XG5cdH0pO1xufVxuXG5leHBvcnQgY2xhc3MgTW9ja0NvbnRleHRCaW5kaW5nIGltcGxlbWVudHMgUGFydGlhbDxPRGF0YUNvbnRleHRCaW5kaW5nPiB7XG5cdHByaXZhdGUgb01vY2tDb250ZXh0OiBNb2NrQ29udGV4dDtcblx0cHJpdmF0ZSBpc0tlcHRBbGl2ZTogYm9vbGVhbiA9IGZhbHNlO1xuXG5cdHB1YmxpYyBjb25zdHJ1Y3RvcihvQ29udGV4dD86IGFueSwgcHJpdmF0ZSBtb2NrTW9kZWw/OiBNb2NrTW9kZWwpIHtcblx0XHR0aGlzLm9Nb2NrQ29udGV4dCA9IG5ldyBNb2NrQ29udGV4dChvQ29udGV4dCB8fCB7fSwgdGhpcyk7XG5cdH1cblxuXHRwdWJsaWMgaXNBKHNDbGFzc05hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiBzQ2xhc3NOYW1lID09PSBcInNhcC51aS5tb2RlbC5vZGF0YS52NC5PRGF0YUNvbnRleHRCaW5kaW5nXCI7XG5cdH1cblx0cHVibGljIGdldEludGVybmFsTW9ja0NvbnRleHQoKTogTW9ja0NvbnRleHQge1xuXHRcdHJldHVybiB0aGlzLm9Nb2NrQ29udGV4dDtcblx0fVxuXHRwdWJsaWMgc2V0TW9kZWwob01vZGVsOiBNb2NrTW9kZWwpIHtcblx0XHR0aGlzLm1vY2tNb2RlbCA9IG9Nb2RlbDtcblx0fVxuXG5cdC8vIE1vY2tlZCBBUElcblx0cHVibGljIGdldEJvdW5kQ29udGV4dCA9IGplc3QuZm4oKCkgPT4ge1xuXHRcdHJldHVybiB0aGlzLm9Nb2NrQ29udGV4dCBhcyBhbnkgYXMgQ29udGV4dDtcblx0fSk7XG5cdHB1YmxpYyBhdHRhY2hFdmVudE9uY2UgPSBqZXN0LmZuKCk7XG5cdHB1YmxpYyBnZXRNb2RlbCA9IGplc3QuZm4oKCkgPT4ge1xuXHRcdHJldHVybiB0aGlzLm1vY2tNb2RlbCBhcyBhbnkgYXMgT0RhdGFNb2RlbDtcblx0fSk7XG59XG5cbi8qKlxuICogTW9jayBjbGFzcyBmb3IgT0RhdGEgVjQgTWV0YU1vZGVsXG4gKi9cbmV4cG9ydCBjbGFzcyBNb2NrTWV0YU1vZGVsIGltcGxlbWVudHMgUGFydGlhbDxPRGF0YU1ldGFNb2RlbD4ge1xuXHRwcml2YXRlIG9NZXRhQ29udGV4dDogTW9ja0NvbnRleHQ7XG5cdHJlcXVlc3RWYWx1ZUxpc3RJbmZvITogamVzdC5Nb2NrPGFueSwgYW55PjtcblxuXHRwdWJsaWMgY29uc3RydWN0b3Iob01ldGFEYXRhPzogYW55KSB7XG5cdFx0dGhpcy5vTWV0YUNvbnRleHQgPSBuZXcgTW9ja0NvbnRleHQob01ldGFEYXRhIHx8IHt9KTtcblx0fVxuXG5cdC8vIE1vY2tlZCBBUElcblx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuXHRwdWJsaWMgZ2V0TWV0YUNvbnRleHQgPSBqZXN0LmZuKChzUGF0aDogc3RyaW5nKSA9PiB7XG5cdFx0cmV0dXJuIG5ldyBNb2NrQ29udGV4dCh7ICRwYXRoOiBzUGF0aCB9KSBhcyBhbnkgYXMgQ29udGV4dDtcblx0fSk7XG5cdHB1YmxpYyBnZXRPYmplY3QgPSBqZXN0LmZuKChzUGF0aDogc3RyaW5nKSA9PiB7XG5cdFx0cmV0dXJuIHRoaXMub01ldGFDb250ZXh0LmdldFByb3BlcnR5KHNQYXRoKTtcblx0fSk7XG5cdHB1YmxpYyByZXF1ZXN0T2JqZWN0ID0gamVzdC5mbigpO1xuXHRwdWJsaWMgY3JlYXRlQmluZGluZ0NvbnRleHQgPSBqZXN0LmZuKChzUGF0aDogc3RyaW5nKSA9PiB7XG5cdFx0cmV0dXJuIG5ldyBNb2NrQ29udGV4dCh7ICRwYXRoOiBzUGF0aCB9KSBhcyBhbnkgYXMgQ29udGV4dDtcblx0fSk7XG5cdHB1YmxpYyBnZXRNZXRhUGF0aCA9IGplc3QuZm4oKHNQYXRoOiBzdHJpbmcpID0+IHtcblx0XHRyZXR1cm4gc1BhdGg7XG5cdH0pO1xuXHRwdWJsaWMgZ2V0Q29udGV4dCA9IGplc3QuZm4oKTtcbn1cblxuLyoqXG4gKiBNb2NrIGNsYXNzIGZvciBPRGF0YSBWNCBNb2RlbFxuICovXG5cbmV4cG9ydCBjbGFzcyBNb2NrTW9kZWwgaW1wbGVtZW50cyBQYXJ0aWFsPE9EYXRhTW9kZWw+IHtcblx0cHJpdmF0ZSBvTWV0YU1vZGVsPzogTW9ja01ldGFNb2RlbDtcblxuXHRwdWJsaWMgY29uc3RydWN0b3IocHJpdmF0ZSBtb2NrTGlzdEJpbmRpbmc/OiBNb2NrTGlzdEJpbmRpbmcsIHByaXZhdGUgbW9ja0NvbnRleHRCaW5kaW5nPzogTW9ja0NvbnRleHRCaW5kaW5nKSB7XG5cdFx0aWYgKG1vY2tMaXN0QmluZGluZykge1xuXHRcdFx0bW9ja0xpc3RCaW5kaW5nLnNldE1vZGVsKHRoaXMpO1xuXHRcdH1cblx0XHRpZiAobW9ja0NvbnRleHRCaW5kaW5nKSB7XG5cdFx0XHRtb2NrQ29udGV4dEJpbmRpbmcuc2V0TW9kZWwodGhpcyk7XG5cdFx0fVxuXHR9XG5cblx0Ly8gRmFjdG9yaWVzXG5cdHN0YXRpYyBtb2RlbEZyb21MaXN0QmluZGluZyhtb2NrTGlzdEJpbmRpbmc6IE1vY2tMaXN0QmluZGluZyk6IE1vY2tNb2RlbCB7XG5cdFx0cmV0dXJuIG5ldyBNb2NrTW9kZWwobW9ja0xpc3RCaW5kaW5nKTtcblx0fVxuXHRzdGF0aWMgbW9kZWxGcm9tQ29udGV4dEJpbmRpbmcobW9ja0NvbnRleHRCaW5kaW5nOiBNb2NrQ29udGV4dEJpbmRpbmcpOiBNb2NrTW9kZWwge1xuXHRcdHJldHVybiBuZXcgTW9ja01vZGVsKHVuZGVmaW5lZCwgbW9ja0NvbnRleHRCaW5kaW5nKTtcblx0fVxuXG5cdHB1YmxpYyBzZXRNZXRhTW9kZWwob01ldGFNb2RlbDogTW9ja01ldGFNb2RlbCkge1xuXHRcdHRoaXMub01ldGFNb2RlbCA9IG9NZXRhTW9kZWw7XG5cdH1cblxuXHQvLyBNb2NrZWQgQVBJXG5cdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcblx0cHVibGljIGJpbmRMaXN0ID0gamVzdC5mbigoLi4uYXJncykgPT4ge1xuXHRcdHJldHVybiB0aGlzLm1vY2tMaXN0QmluZGluZyBhcyBhbnkgYXMgT0RhdGFMaXN0QmluZGluZztcblx0fSk7XG5cdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcblx0cHVibGljIGJpbmRDb250ZXh0ID0gamVzdC5mbigoLi4uYXJncykgPT4ge1xuXHRcdHJldHVybiB0aGlzLm1vY2tDb250ZXh0QmluZGluZyBhcyBhbnkgYXMgT0RhdGFDb250ZXh0QmluZGluZztcblx0fSk7XG5cdHB1YmxpYyBnZXRNZXRhTW9kZWwgPSBqZXN0LmZuKCgpID0+IHtcblx0XHRyZXR1cm4gdGhpcy5vTWV0YU1vZGVsIGFzIGFueSBhcyBPRGF0YU1ldGFNb2RlbDtcblx0fSk7XG5cblx0cHVibGljIGdldFByb3BlcnR5ID0gamVzdC5mbigpO1xuXHRwdWJsaWMgc2V0UHJvcGVydHkgPSBqZXN0LmZuKCk7XG5cdHB1YmxpYyByZXF1ZXN0T2JqZWN0ID0gamVzdC5mbigpO1xuXHRwdWJsaWMgZ2V0S2VlcEFsaXZlQ29udGV4dCA9IGplc3QuZm4oKTtcbn1cblxuZXhwb3J0IGNsYXNzIE1vY2tWaWV3IGltcGxlbWVudHMgUGFydGlhbDxWaWV3PiB7XG5cdHB1YmxpYyBnZXRDb250cm9sbGVyID0gamVzdC5mbigpO1xuXG5cdHB1YmxpYyBnZXRCaW5kaW5nQ29udGV4dCA9IGplc3QuZm4oKTtcblxuXHRwdWJsaWMgZ2V0TW9kZWwgPSBqZXN0LmZuKCk7XG5cblx0cHVibGljIGdldFZpZXdEYXRhID0gamVzdC5mbigpO1xuXG5cdHB1YmxpYyBpc0Eoc0NsYXNzTmFtZTogc3RyaW5nKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIHNDbGFzc05hbWUgPT09IFwic2FwLnVpLmNvcmUubXZjLlZpZXdcIjtcblx0fVxuXG5cdHB1YmxpYyBnZXRJZCA9IGplc3QuZm4oKTtcbn1cblxuZXhwb3J0IGNsYXNzIE1vY2tDb250cm9sbGVyIGltcGxlbWVudHMgUGFydGlhbDxDb250cm9sbGVyPiB7XG5cdHB1YmxpYyBnZXRWaWV3ID0gamVzdC5mbigpLm1vY2tSZXR1cm5WYWx1ZShuZXcgTW9ja1ZpZXcoKSk7XG5cblx0cHVibGljIF9yb3V0aW5nID0ge1xuXHRcdG5hdmlnYXRlVG9UYXJnZXQ6IGplc3QuZm4oKVxuXHR9O1xuXG5cdHB1YmxpYyBfZWRpdEZsb3cgPSB7XG5cdFx0c3luY1Rhc2s6IGplc3QuZm4oKVxuXHR9O1xuXG5cdHB1YmxpYyBfc2lkZUVmZmVjdHMgPSB7XG5cdFx0aGFuZGxlRmllbGRDaGFuZ2U6IGplc3QuZm4oKVxuXHR9O1xuXG5cdGlzQSA9IGplc3QuZm4oKS5tb2NrUmV0dXJuVmFsdWUoZmFsc2UpO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE1WQ01vY2sge1xuXHRtb2RlbDogTW9ja01vZGVsO1xuXHR2aWV3OiBNb2NrVmlldztcblx0Y29udHJvbGxlcjogTW9ja0NvbnRyb2xsZXI7XG59XG5cbi8qKlxuICogR2VuZXJhdGUgbW9kZWwsIHZpZXcgYW5kIGNvbnRyb2xsZXIgbW9ja3MgdGhhdCByZWZlciB0byBlYWNoIG90aGVyLlxuICpcbiAqIEBwYXJhbSBleGlzdGluZyBPcHRpb25hbCBleGlzdGluZyBtb2NrZWQgaW5zdGFuY2VzIHRoYXQgc2hvdWxkIGJlIHVzZWRcbiAqIEByZXR1cm5zIE1vY2tlZCBtb2RlbCwgdmlldyBhbmQgY29udHJvbGxlciBpbnN0YW5jZXNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1vY2tNVkMoZXhpc3Rpbmc/OiBQYXJ0aWFsPE1WQ01vY2s+KTogTVZDTW9jayB7XG5cdGNvbnN0IG1vZGVsID0gZXhpc3Rpbmc/Lm1vZGVsIHx8IG5ldyBNb2NrTW9kZWwoKTtcblx0Y29uc3QgdmlldyA9IGV4aXN0aW5nPy52aWV3IHx8IG5ldyBNb2NrVmlldygpO1xuXHRjb25zdCBjb250cm9sbGVyID0gZXhpc3Rpbmc/LmNvbnRyb2xsZXIgfHwgbmV3IE1vY2tDb250cm9sbGVyKCk7XG5cblx0dmlldy5nZXRDb250cm9sbGVyLm1vY2tSZXR1cm5WYWx1ZShjb250cm9sbGVyKTtcblx0dmlldy5nZXRNb2RlbC5tb2NrUmV0dXJuVmFsdWUobW9kZWwpO1xuXHRjb250cm9sbGVyLmdldFZpZXcubW9ja1JldHVyblZhbHVlKHZpZXcpO1xuXG5cdHJldHVybiB7IG1vZGVsLCB2aWV3LCBjb250cm9sbGVyIH07XG59XG4iXX0=
@@ -59,11 +59,13 @@ export class MockContext implements Partial<Context> {
59
59
  return this.oBinding?.getModel() as any as ODataModel;
60
60
  });
61
61
  public isTransient = jest.fn();
62
- public setKeepAlive = jest.fn((bool: boolean) => {
62
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
63
+ public setKeepAlive = jest.fn((bool: boolean, _fnOnBeforeDestroy?: any, _bRequestMessages?: boolean) => {
63
64
  this.isKeptAlive = bool;
64
65
  });
65
66
  public isKeepAlive = jest.fn(() => this.isKeptAlive);
66
67
  public requestSideEffects = jest.fn();
68
+ public requestObject = jest.fn();
67
69
  }
68
70
 
69
71
  export class MockUI5Element implements Partial<UI5Element> {
@@ -0,0 +1,115 @@
1
+ /*
2
+ * ! SAP UI development toolkit for HTML5 (SAPUI5)
3
+ (c) Copyright 2009-2021 SAP SE. All rights reserved
4
+
5
+ */
6
+ sap.ui.define(
7
+ ["./DialogActions", "sap/fe/test/Utils", "sap/ui/test/OpaBuilder", "sap/fe/test/builder/FEBuilder"],
8
+ function (DialogActions, Utils, OpaBuilder, FEBuilder) {
9
+ "use strict";
10
+
11
+ /**
12
+ * Constructs a new DialogMassEditActions instance.
13
+ *
14
+ * @param {sap.fe.test.builder.DialogBuilder} oDialogBuilder The {@link sap.fe.test.builder.DialogBuilder} instance used to interact with the UI
15
+ * @param {string} [vDialogDescription] Description (optional) of the dialog to be used for logging messages
16
+ * @returns {sap.fe.test.api.DialogMassEditActions} The new instance
17
+ * @extends sap.fe.test.api.DialogActions
18
+ * @alias sap.fe.test.api.DialogMassEditActions
19
+ * @class
20
+ * @hideconstructor
21
+ * @private
22
+ */
23
+ var DialogMassEditActions = function (oDialogBuilder, vDialogDescription) {
24
+ return DialogActions.call(this, oDialogBuilder, vDialogDescription, 0);
25
+ };
26
+ DialogMassEditActions.prototype = Object.create(DialogActions.prototype);
27
+ DialogMassEditActions.prototype.constructor = DialogMassEditActions;
28
+ DialogMassEditActions.prototype.isAction = true;
29
+
30
+ /**
31
+ * A mass edit field identifier
32
+ *
33
+ * @typedef {object} MassEditFieldIdentifier
34
+ * @property {string} property The name of the property
35
+ * @name sap.fe.test.api.MassEditFieldIdentifier
36
+ * @private
37
+ */
38
+
39
+ /**
40
+ * A mass edit field value
41
+ *
42
+ * @typedef {object} MassEditValue
43
+ * @property {string} dropDownText The dropdown text for the selection
44
+ * @property {string} rawText The raw text for the selection
45
+ * @name sap.fe.test.api.MassEditValue
46
+ * @private
47
+ */
48
+
49
+ /**
50
+ * Changes the value of the defined filter field.
51
+ *
52
+ * @param {string | sap.fe.test.api.MassEditFieldIdentifier} vMassEditFieldIdentifier The identifier for the mass edit field
53
+ * @param {string | sap.fe.test.api.MassEditValue} vMassEditValue The new target value
54
+ * @param {object} [mState] The state of the mass edit field
55
+ * @param {object} [mProperties] The Properties of the mass edit field
56
+ * @returns {object} The result of the {@link sap.ui.test.Opa5#waitFor} function, to be used for chained statements
57
+ * @private
58
+ */
59
+ DialogMassEditActions.prototype.iChangeField = function (vMassEditFieldIdentifier, vMassEditValue, mState, mProperties) {
60
+ var that = this,
61
+ sProperty = Utils.isOfType(vMassEditFieldIdentifier, String) ? vMassEditFieldIdentifier : vMassEditFieldIdentifier.property,
62
+ vValue = vMassEditValue && (Utils.isOfType(vMassEditValue, String) ? { rawText: vMassEditValue } : vMassEditValue),
63
+ fieldRegEx = new RegExp("^MED(.*)" + sProperty + "$", "gi");
64
+
65
+ return that.prepareResult(
66
+ FEBuilder.create(this.getOpaInstance())
67
+ .isDialogElement()
68
+ .has(FEBuilder.Matchers.id(fieldRegEx))
69
+ .hasState(mState)
70
+ .hasProperties(mProperties)
71
+ .doPress()
72
+ .success(function (aSelect) {
73
+ var oRet,
74
+ oSelect = aSelect[0],
75
+ sControlType = oSelect.getMetadata().getName();
76
+ if (vValue.dropDownText) {
77
+ oRet = OpaBuilder.create()
78
+ .hasType("sap.ui.core.Item")
79
+ .has(OpaBuilder.Matchers.ancestor(oSelect[0], false))
80
+ .hasProperties({ text: vValue.dropDownText })
81
+ .doPress()
82
+ .description(
83
+ Utils.formatMessage(
84
+ "Value '{3}' selected for '{0}' in mass edit dialog '{1}'",
85
+ sProperty,
86
+ that.getIdentifier(),
87
+ vValue.dropDownText
88
+ )
89
+ )
90
+ .execute();
91
+ } else if (vValue.rawText && sControlType === "sap.m.ComboBox") {
92
+ oRet = OpaBuilder.create()
93
+ .hasId(oSelect.getId())
94
+ .doEnterText(vValue.rawText)
95
+ .description(
96
+ Utils.formatMessage(
97
+ "Value '{3}' entered for '{0}' in mass edit dialog '{1}'",
98
+ sProperty,
99
+ that.getIdentifier(),
100
+ vValue.rawText
101
+ )
102
+ )
103
+ .execute();
104
+ }
105
+
106
+ return oRet;
107
+ })
108
+ .description(Utils.formatMessage("Mass edit dropdown for '{0}' found in dialog '{1}'", sProperty, that.getIdentifier()))
109
+ .execute()
110
+ );
111
+ };
112
+
113
+ return DialogMassEditActions;
114
+ }
115
+ );
@@ -0,0 +1,174 @@
1
+ /*
2
+ * ! SAP UI development toolkit for HTML5 (SAPUI5)
3
+ (c) Copyright 2009-2021 SAP SE. All rights reserved
4
+
5
+ */
6
+ sap.ui.define(
7
+ ["./DialogAssertions", "sap/ui/test/OpaBuilder", "sap/fe/test/builder/FEBuilder", "sap/fe/test/Utils"],
8
+ function (DialogAssertions, OpaBuilder, FEBuilder, Utils) {
9
+ "use strict";
10
+
11
+ /**
12
+ * Constructs a new DialogMassEditAssertions instance.
13
+ *
14
+ * @param {sap.fe.test.builder.DialogBuilder} oDialogBuilder The {@link sap.fe.test.builder.DialogBuilder} instance used to interact with the UI
15
+ * @param {string} [vDialogDescription] Description (optional) of the dialog to be used for logging messages
16
+ * @returns {sap.fe.test.api.DialogMassEditAssertions} The new instance
17
+ * @extends sap.fe.test.api.DialogAssertions
18
+ * @alias sap.fe.test.api.DialogMassEditAssertions
19
+ * @class
20
+ * @hideconstructor
21
+ * @private
22
+ */
23
+ var DialogMassEditAssertions = function (oDialogBuilder, vDialogDescription) {
24
+ return DialogAssertions.call(this, oDialogBuilder, vDialogDescription, 0);
25
+ };
26
+ DialogMassEditAssertions.prototype = Object.create(DialogAssertions.prototype);
27
+ DialogMassEditAssertions.prototype.constructor = DialogMassEditAssertions;
28
+ DialogMassEditAssertions.prototype.isAction = false;
29
+
30
+ /**
31
+ * A mass edit field identifier
32
+ *
33
+ * @typedef {object} MassEditFieldIdentifier
34
+ * @property {string} property The name of the property
35
+ * @name sap.fe.test.api.MassEditFieldIdentifier
36
+ * @private
37
+ */
38
+
39
+ /**
40
+ * A mass edit field value
41
+ *
42
+ * @typedef {object} MassEditValue
43
+ * @property {string} dropDownText The dropdown text for the selection
44
+ * @property {string} rawText The raw text for the selection
45
+ * @name sap.fe.test.api.MassEditValue
46
+ * @private
47
+ */
48
+
49
+ /**
50
+ * Check the value of the defined filter field.
51
+ *
52
+ * @param {string | sap.fe.test.api.MassEditFieldIdentifier} vMassEditFieldIdentifier The identifier for the mass edit field
53
+ * @param {string | sap.fe.test.api.MassEditValue} vMassEditValue The new target value
54
+ * @param {object} [mState] The state of the mass edit field
55
+ * @param {object} [mProperties] The Properties of the mass edit field
56
+ * @returns {object} The result of the {@link sap.ui.test.Opa5#waitFor} function, to be used for chained statements
57
+ * @private
58
+ */
59
+ DialogMassEditAssertions.prototype.iCheckField = function (vMassEditFieldIdentifier, vMassEditValue, mState, mProperties) {
60
+ var that = this,
61
+ sProperty = Utils.isOfType(vMassEditFieldIdentifier, String) ? vMassEditFieldIdentifier : vMassEditFieldIdentifier.property,
62
+ vValue =
63
+ vMassEditValue &&
64
+ (Utils.isOfType(vMassEditValue, String) ? vMassEditValue : vMassEditValue.rawText || vMassEditValue.dropDownText),
65
+ fieldRegEx = new RegExp("^MED(.*)" + sProperty + "$", "gi");
66
+ var sControlType;
67
+
68
+ var vTest = FEBuilder.create(this.getOpaInstance()).isDialogElement();
69
+ var vIdMatcher = FEBuilder.Matchers.id(fieldRegEx);
70
+ var vMatcher = [FEBuilder.Matchers.states(mState), vIdMatcher];
71
+ if (mState && mState.visible === false) {
72
+ // two possibilities for non-visible action: either visible property is false, or the control wasn't rendered at all
73
+ vMatcher = OpaBuilder.Matchers.some(vMatcher, OpaBuilder.Matchers.not(vIdMatcher));
74
+ vTest = vTest.has(vMatcher);
75
+ } else {
76
+ vTest = vTest
77
+ .has(vMatcher)
78
+ .hasProperties(mProperties)
79
+ .check(function (aSelect) {
80
+ sControlType = aSelect && aSelect[0] && aSelect[0].getMetadata().getName();
81
+ return (
82
+ aSelect.length === 1 &&
83
+ (sControlType === "sap.m.ComboBox" || sControlType === "sap.fe.core.controls.MassEditSelect")
84
+ );
85
+ })
86
+ .success(function (aSelect) {
87
+ var oSelect = aSelect[0],
88
+ oRet = OpaBuilder.create().hasId(oSelect.getId());
89
+
90
+ if (sControlType === "sap.m.ComboBox") {
91
+ oRet = oRet.hasProperties({ value: vValue });
92
+ } else if (sControlType === "sap.fe.core.controls.MassEditSelect") {
93
+ oRet = oRet.has(function (oSelectControl) {
94
+ return oSelectControl.getSelectedItem() ? oSelectControl.getSelectedItem().getText() === vValue : false;
95
+ });
96
+ }
97
+
98
+ return oRet
99
+ .description(
100
+ Utils.formatMessage(
101
+ "Value selection '{3}' found for '{0}' in mass edit dialog '{1}'",
102
+ sProperty,
103
+ that.getIdentifier(),
104
+ vValue.toString()
105
+ )
106
+ )
107
+ .execute();
108
+ })
109
+ .description(
110
+ Utils.formatMessage("Mass edit dropdown for '{0}' found in dialog '{1}'", sProperty, that.getIdentifier())
111
+ );
112
+ }
113
+
114
+ return that.prepareResult(vTest.execute());
115
+ };
116
+
117
+ /**
118
+ * Check the suggestions of the defined filter field.
119
+ *
120
+ * @param {string | sap.fe.test.api.MassEditFieldIdentifier} vMassEditFieldIdentifier The identifier for the mass edit field
121
+ * @param {string | sap.fe.test.api.MassEditValue} vMassEditValue The new target value
122
+ * @param {object} [mState] The state of the mass edit field
123
+ * @param {object} [mProperties] The Properties of the mass edit field
124
+ * @param {boolean} [bExists] Should the suggestion exist. Default is true
125
+ * @returns {object} The result of the {@link sap.ui.test.Opa5#waitFor} function, to be used for chained statements
126
+ * @private
127
+ */
128
+ DialogMassEditAssertions.prototype.iCheckFieldSuggestions = function (
129
+ vMassEditFieldIdentifier,
130
+ vMassEditValue,
131
+ mState,
132
+ mProperties,
133
+ bExists
134
+ ) {
135
+ var that = this,
136
+ sProperty = Utils.isOfType(vMassEditFieldIdentifier, String) ? vMassEditFieldIdentifier : vMassEditFieldIdentifier.property,
137
+ vValue =
138
+ vMassEditValue &&
139
+ (Utils.isOfType(vMassEditValue, String) ? vMassEditValue : vMassEditValue.dropDownText || vMassEditValue.rawText),
140
+ fieldRegEx = new RegExp("^MED(.*)" + sProperty + "$", "gi");
141
+
142
+ return that.prepareResult(
143
+ FEBuilder.create(this.getOpaInstance())
144
+ .isDialogElement()
145
+ .hasId(fieldRegEx)
146
+ .hasState(mState)
147
+ .hasProperties(mProperties)
148
+ .check(function (aSelect) {
149
+ var oRet = false,
150
+ oSelect = aSelect && aSelect[0],
151
+ sControlType = aSelect && aSelect[0] && aSelect[0].getMetadata().getName();
152
+
153
+ if (
154
+ aSelect.length === 1 &&
155
+ (sControlType === "sap.m.ComboBox" || sControlType === "sap.fe.core.controls.MassEditSelect")
156
+ ) {
157
+ var aItems = oSelect.getItems(),
158
+ iIndex = (aItems || []).findIndex(function (oItem) {
159
+ return oItem.getText() === vValue;
160
+ }),
161
+ bFound = iIndex != -1;
162
+
163
+ oRet = (bExists !== false) === bFound;
164
+ }
165
+ return oRet;
166
+ })
167
+ .description(Utils.formatMessage("Mass edit dropdown for '{0}' found in dialog '{1}'", sProperty, that.getIdentifier()))
168
+ .execute()
169
+ );
170
+ };
171
+
172
+ return DialogMassEditAssertions;
173
+ }
174
+ );
@@ -5,7 +5,7 @@
5
5
  */
6
6
  sap.ui.define(
7
7
  [],
8
- function() {
8
+ function () {
9
9
  "use strict";
10
10
 
11
11
  /**
@@ -69,7 +69,16 @@ sap.ui.define(
69
69
  * @type {string}
70
70
  * @public
71
71
  */
72
- Create: "Create"
72
+ Create: "Create",
73
+ /**
74
+ * A dialog used for mass edit
75
+ *
76
+ * @name sap.fe.test.api.DialogType.MassEdit
77
+ * @constant
78
+ * @type {string}
79
+ * @private
80
+ */
81
+ MassEdit: "MassEdit"
73
82
  };
74
83
  },
75
84
  true
@@ -20,7 +20,7 @@ sap.ui.define(["sap/ui/core/Core", "sap/ui/core/library"], function (Core, _libr
20
20
  interfaces: [],
21
21
  controls: [],
22
22
  elements: [],
23
- version: "1.102.0",
23
+ version: "1.102.1",
24
24
  noLibraryCSS: true
25
25
  });
26
26
  return thisLib;
@@ -1,62 +0,0 @@
1
- /*
2
- * ! SAP UI development toolkit for HTML5 (SAPUI5)
3
- (c) Copyright 2009-2021 SAP SE. All rights reserved
4
-
5
- */
6
- sap.ui.define(
7
- [],
8
- function() {
9
- "use strict";
10
-
11
- var MassEditRuntime = {
12
- handleMassEditChange: function(oSource, value) {
13
- var aParams = oSource && oSource.getSelectedKey() && oSource.getSelectedKey().split("/");
14
- var oDialog =
15
- oSource &&
16
- oSource
17
- .getParent()
18
- .getParent()
19
- .getParent()
20
- .getParent();
21
- var oFieldsInfoData = oDialog && oDialog.getModel("fieldsInfo").getData();
22
- var oDataObject;
23
- if (aParams[0] === "Default") {
24
- oDataObject = { keyValue: aParams[1], value: aParams[0] };
25
- } else if (aParams[0] === "ClearFieldValue") {
26
- oDataObject = { keyValue: aParams[1], value: "" };
27
- } else if (!aParams) {
28
- var sPropertyName = oSource.getId().substring(oSource.getId().lastIndexOf(":") + 1);
29
- oDataObject = {
30
- keyValue: sPropertyName,
31
- value: value
32
- };
33
- } else {
34
- var aRelatedField =
35
- aParams[0] &&
36
- oFieldsInfoData.values &&
37
- oFieldsInfoData.values[aParams[0]].filter(function(oFieldData) {
38
- return oFieldData.text === oSource.getValue();
39
- });
40
- oDataObject =
41
- aRelatedField && aRelatedField[0] && aRelatedField[0].textInfo
42
- ? { keyValue: aParams[0], value: aRelatedField[0].textInfo.value }
43
- : { keyValue: aParams[0], value: oSource.getValue() };
44
- }
45
- var bExistingElementindex = false;
46
- for (var i = 0; i < oFieldsInfoData.results.length; i++) {
47
- if (oFieldsInfoData.results[i].keyValue === oDataObject.keyValue) {
48
- bExistingElementindex = i;
49
- }
50
- }
51
- if (bExistingElementindex !== false) {
52
- oFieldsInfoData.results[bExistingElementindex] = oDataObject;
53
- } else {
54
- oFieldsInfoData.results.push(oDataObject);
55
- }
56
- }
57
- };
58
-
59
- return MassEditRuntime;
60
- },
61
- /* bExport= */ true
62
- );