@kontur.candy/tools 2.152.0 → 2.154.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,3 +1,15 @@
1
+ <a name="2.154.0"></a>
2
+ # [2.154.0](https://git.skbkontur.ru/ke/candy-utils/compare/release/tools/v2.153.0...release/tools/v2.154.0) (2023-06-21)
3
+
4
+ <a name="2.153.0"></a>
5
+ # [2.153.0](https://git.skbkontur.ru/ke/candy-utils/compare/release/tools/v2.152.0...release/tools/v2.153.0) (2023-06-15)
6
+
7
+
8
+ ### Bug Fixes
9
+
10
+ * **Tools:** исправление генерации BuildCache ([8d29185](https://git.skbkontur.ru/ke/candy-utils/commit/8d29185))
11
+ * **Tools:** исправление генерации BuildCacheExists ([654f6bd](https://git.skbkontur.ru/ke/candy-utils/commit/654f6bd))
12
+
1
13
  <a name="2.152.0"></a>
2
14
  # [2.152.0](https://git.skbkontur.ru/ke/candy-utils/compare/release/tools/v2.151.0...release/tools/v2.152.0) (2023-06-07)
3
15
 
@@ -475,6 +475,40 @@ class CandyApiDraftClient {
475
475
  return await response.json();
476
476
  }
477
477
 
478
+ async excelsToPartialFufs(gfv, pathToTable, driveUris) {
479
+ try {
480
+ const response = await this.httpClient.post("v1/files/excels-to-partial-fufs").withQueryParams({
481
+ gfv: gfv,
482
+ pathToTable: pathToTable
483
+ }).withJsonBody(driveUris);
484
+
485
+ if (response.status === 200) {
486
+ return await response.json();
487
+ }
488
+
489
+ return undefined;
490
+ } catch (e) {
491
+ return undefined;
492
+ }
493
+ }
494
+
495
+ async importFromPartialFufsByPath(pathToTable, driveUri, combineMethod) {
496
+ try {
497
+ const response = await this.httpClient.post(this.getDraftUrl("transfer/import-from-partial-fufs-by-path")).withQueryParams({
498
+ pathToTable: pathToTable,
499
+ combineMethod: combineMethod
500
+ }).withJsonBody(driveUri);
501
+
502
+ if (response.status === 200) {
503
+ return await response.json();
504
+ }
505
+
506
+ return undefined;
507
+ } catch (e) {
508
+ return undefined;
509
+ }
510
+ }
511
+
478
512
  async multipleCombineFufByDriveUri(driveUris, combineMethod) {
479
513
  const response = await this.httpClient.post(this.getDraftUrl("transfer/combine-with-fufs")).withQueryParams({
480
514
  combineMethod: combineMethod
@@ -573,4 +607,4 @@ class CandyApiDraftClient {
573
607
  }
574
608
 
575
609
  exports.CandyApiDraftClient = CandyApiDraftClient;
576
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL0NvbW1vbi9DYW5keUFwaUNsaWVudC9DYW5keUFwaUNsaWVudC50cyJdLCJuYW1lcyI6WyJzdHJhbmdlT3B0aW9ucyIsInNyYyIsImRhdGFWZXJzaW9uIiwiU2VydmVyRXJyb3JzIiwiQ2FuZHlBcGlDbGllbnQiLCJjb25zdHJ1Y3RvciIsImZldGNoSW1wbCIsImJhc2VVcmwiLCJyZXNvdXJjZVpvbmUiLCJhdXRoZW50aWNhdGlvbiIsImh0dHBDbGllbnQiLCJIdHRwQ2xpZW50IiwiZm9yRHJhZnQiLCJkcmFmdEZ1bGxJZCIsIkNhbmR5QXBpRHJhZnRDbGllbnQiLCJjcmVhdGVEaWdlc3RBcGlDbGllbnQiLCJEaWdlc3RBcGlDbGllbnQiLCJnZXRJbmZvQnlJbm5zIiwiaW5ucyIsInBhdGhzIiwibWFwIiwiaW5uIiwicmVzcG9uc2UiLCJwb3N0IiwiZ2V0RHJhZnRVcmwiLCJ3aXRoSnNvbkJvZHkiLCJqc29uIiwicmVzdWx0IiwiaW5uU2VydmVyVmFsdWUiLCJ2YWx1ZSIsInVuZGVmaW5lZCIsImVycm9yIiwiZXJyb3JDb2RlIiwiRm9jdXNTZXJ2ZXJFcnJvckNvZGUiLCJOb0lubkVycm9yIiwiZ2V0QWxsR2Z2cyIsImFib3J0U2lnbmFsIiwiYm9keSIsImdldCIsImNyZWF0ZURyYWZ0RnJvbURyaXZlIiwibnMiLCJmdWZEcml2ZVVyaSIsIndpdGhRdWVyeVBhcmFtcyIsIndpdGhBYm9ydFNpZ25hbCIsImNyZWF0ZUVtcHR5RHJhZnQiLCJnZnYiLCJjcmVhdGVEcmFmdCIsImZ1ZkNvbnRlbnQiLCJ3aXRoQ29udGVudFR5cGUiLCJ3aXRoQm9keUZyb21CdWZmZXIiLCJCdWZmZXIiLCJmcm9tIiwiRXJyb3IiLCJjaGVja0FsaXZlIiwiZHJhZnRSZWxhdGVkVXJsIiwiZHJhZnRJZCIsImdldEZlYXR1cmVGbGFncyIsInNldFRlc3RDbGFzc2lmaWNhdGlvbiIsInRlc3RDbGFzc2lmaWNhdGlvbiIsIndpdGhSYXdCb2R5IiwiSlNPTiIsInN0cmluZ2lmeSIsInN0YXR1cyIsImdldEhyZWZUb0lubmVyRWRpdG9yIiwidXJsIiwiZ2V0SHJlZkRvd25sb2FkRnVmIiwiZ2V0SHJlZlRvQ29udmVydGF0aW9uTG9nIiwiZ2V0SHJlZlRvRG93bmxvYWRJbm5lckZ1ZiIsImdldEhyZWZEb3dubG9hZERyYWZ0UHJlc2VudGF0aW9uIiwiRHJhZnRQcmVzZW50YXRpb25UeXBlIiwiaW5uZXJGdWYiLCJnZXRIcmVmVG9Eb3dubG9hZENsaWVudEluZm8iLCJjbGllbnRJbmZvIiwiZ2V0SHJlZlRvRG93bmxvYWRGb3Jtc0NsaWVudEluZm8iLCJmb3Jtc0NsaWVudEluZm8iLCJnZXRIcmVmRG93bmxvYWRJbm5lciIsImlubmVyIiwiZ2V0RXJyb3JMb2ciLCJnZXREcmFmdFByZXNlbnRhdGlvblVybCIsImVycm9yTG9nIiwiZ2V0RXJyb3JMb2dXaXRoQ2hlY2tTY2VuYXJpb3MiLCJjaGVja1NjZW5hcmlvcyIsImdldFRhc2tCeUlkIiwidGFza0lkIiwidGFza3MiLCJnZXRBbGxUYXNrcyIsIk9iamVjdCIsInZhbHVlcyIsIngiLCJlbnF1ZXVlVGFzayIsInRhc2tJbmZvIiwiYWRkZWQiLCJjaGFuZ2VkIiwiaWQiLCJyZW1vdmVkIiwiY2FuY2VsVGFzayIsImdldEV4cGVydEVycm9yTG9nIiwiZXJyb3Jsb2dFeHBlcnQiLCJnZXRIcmVmVG9FcnJvckxvZ1BkZiIsImVycm9yTG9nTmFtZSIsInByb3BzTmFtZSIsInByb3BzRHJpdmVOYW1lIiwiY2xlYXJEcmFmdCIsImNvbnZlcnREcmFmdEZyb21QcmV2R2Z2IiwicHJldkdmdkRyYWZ0SWQiLCJzZW5kQ2hhbmdlU2V0IiwiZGF0YSIsImN1cnJlbnREYXRhVmVyc2lvbiIsImFjY2VwdENvZGUiLCJnZXRTdWNjZXNzUmVzdWx0IiwiZGF0YVJlc3VsdCIsInNlbmRDaGFuZ2VTZXRTeW5jIiwicG9zdFN5bmMiLCJnZXRTdWNjZXNzUmVzdWx0U3luYyIsImdldFJlcXVpc2l0ZXMiLCJyZXF1aXNpdGVMaXN0IiwiZ2V0SW5uZXIiLCJnZXRQYXJ0aWFsSW5uZXIiLCJydWxlcyIsIm1heEluc3RhbmNlQ291bnQiLCJ0b1N0cmluZyIsImdldFBhcnRpYWxJbm5lckFzSnNvblRyZWUiLCJmb3JtYXQiLCJnZXRSYXdQYXJ0aWFsSW5uZXJBc0pzb25UcmVlIiwiZ2V0RGF0YVZlcnNpb24iLCJnZXRFeHBsYW5hdG9yeU5vdGUiLCJleHBsYW5hdG9yeU5vdGUiLCJnZXRBdHRhY2htZW50QnlJZCIsImF0dGFjaG1lbnRJZCIsImdldEFsbEF0dGFjaG1lbnRzIiwicmVtb3ZlQXR0YWNobWVudHMiLCJhdHRhY2htZW50SWRzIiwiY3JlYXRlT3JVcGRhdGVBdHRhY2htZW50cyIsImF0dGFjaG1lbnRzIiwiYXR0YWNobWVudCIsImNvbnRlbnRVcmkiLCJtZXRhIiwic2V0UHJlc2VudGF0aW9uIiwicHJlc2VudGF0aW9uVHlwZSIsImNvbnRlbnQiLCJyZXF1ZXN0IiwicHV0IiwicGF0Y2hQcmVzZW50YXRpb24iLCJwcmVzZW50YXRpb25Db250ZW50IiwicGF0Y2giLCJnZXRGaWxlUHJvcGVydGllcyIsImRyaXZlVXJpIiwicHJlcGFyZUFuZEdldEZpbGVQcm9wZXJ0aWVzIiwiZXJyb3JEYXRhIiwiRnVmU2l6ZVRvb0xhcmdlRXJyb3IiLCJtZXNzYWdlIiwiSHR0cEVycm9yIiwidXBsb2FkQW5kR2V0RmlsZVByb3BlcnRpZXMiLCJkcml2ZVVyaXMiLCJzZXJ2ZXJFcnJvciIsImludmFsaWRTb3VyY2VEcml2ZUNvbnRlbnROYW1lcyIsInNvdXJjZXNUb3RhbENvdW50IiwiZSIsIlVua25vd25FcnJvciIsImFjY2VwdFRyYW5zZmVyVHlwZSIsInRyYW5zZmVyVHlwZSIsInR5cGVJZCIsInNldEZ1ZkJ5RHJpdmVVcmkiLCJjb21iaW5lRnVmQnlEcml2ZVVyaSIsImNvbWJpbmVNZXRob2QiLCJtdWx0aXBsZUNvbWJpbmVGdWZCeURyaXZlVXJpIiwibm9ybWFsaXplQnlSdWxlcyIsInNldEFsbENoZWNrYm94ZXNGb3IxMTMxMDMiLCJlbmFibGVkIiwidXJpIiwic2V0RW5hYmxlZCIsInNlYXJjaEluc3RhbmNlc0J5VGV4dCIsInRleHQiLCJwYXRoc1ByZWZpeCIsInBhdGhzVG9TZWFyY2giLCJtYXhJbnN0YW5jZUNvdW50UGFyYW1zIiwicGFyYW1zIiwic2VhcmNoU3RyaW5nIiwiY3VzdG9tTm9ybWFsaXplIiwibm9ybWFsaXplcklkIiwicGF0aFByZWZpeGVzIiwiaW1wb3J0RW1wbG95ZWVzIiwiZGVsZXRlSW5zdGFuY2VzIiwiZGVsZXRpbmdSdWxlcyIsInJ1bk1hc3NBY3Rpb24iLCJhY3Rpb25JZCIsInBhcmFtZXRlcnMiLCJxdWVyeVBhcmFtcyIsInByaW50IiwidHlwZSIsInByaW50RXhjZWwiLCJwYXRoVG9UYWJsZSIsInRhYmxlRXhjZWwiLCJjaGVja0J5UG9wZCJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUFBOztBQUVBOztBQUVBOztBQVdBOztBQUVBOztBQU9BOztBQUdBOztBQUVBOztBQVVBLE1BQU1BLGNBQWMsR0FBRztBQUFFQyxFQUFBQSxHQUFHLEVBQUUsV0FBUDtBQUFvQkMsRUFBQUEsV0FBVyxFQUFFO0FBQWpDLENBQXZCO0lBRVlDLFk7OztXQUFBQSxZO0FBQUFBLEVBQUFBLFk7QUFBQUEsRUFBQUEsWTtBQUFBQSxFQUFBQSxZO0dBQUFBLFksNEJBQUFBLFk7O0FBTUwsTUFBTUMsY0FBTixDQUFnRDtBQUc1Q0MsRUFBQUEsV0FBVyxDQUNkQyxTQURjLEVBRWRDLE9BRmMsRUFHZEMsWUFIYyxFQUlkQyxjQUpjLEVBS2hCO0FBQUEsU0FQZUMsVUFPZjtBQUNFLFNBQUtBLFVBQUwsR0FBa0IsSUFBSUMsc0JBQUosQ0FBZUwsU0FBZixFQUEwQkMsT0FBMUIsRUFBbUMsc0RBQTZCRSxjQUE3QixDQUFuQyxFQUFpRjtBQUMvRkQsTUFBQUEsWUFBWSxFQUFFQTtBQURpRixLQUFqRixDQUFsQjtBQUdIOztBQUVNSSxFQUFBQSxRQUFRLENBQUNDLFdBQUQsRUFBaUQ7QUFDNUQsV0FBTyxJQUFJQyxtQkFBSixDQUF3QixLQUFLSixVQUE3QixFQUF5Q0csV0FBekMsQ0FBUDtBQUNIOztBQUVNRSxFQUFBQSxxQkFBcUIsQ0FBQ0YsV0FBRCxFQUE2QztBQUNyRSxXQUFPLElBQUlHLGdDQUFKLENBQW9CLEtBQUtOLFVBQXpCLEVBQXFDRyxXQUFyQyxDQUFQO0FBQ0g7O0FBRXlCLFFBQWJJLGFBQWEsQ0FBQ0osV0FBRCxFQUEyQkssSUFBM0IsRUFBK0U7QUFDckcsVUFBTUMsS0FBSyxHQUFHRCxJQUFJLENBQUNFLEdBQUwsQ0FBU0MsR0FBRyxJQUFLLFVBQVNBLEdBQUksRUFBOUIsQ0FBZDtBQUNBLFVBQU1DLFFBQVEsR0FBRyxNQUFNLEtBQUtaLFVBQUwsQ0FDbEJhLElBRGtCLENBQ2IsS0FBS0MsV0FBTCxDQUFpQlgsV0FBakIsRUFBOEIsV0FBOUIsQ0FEYSxFQUVsQlksWUFGa0IsQ0FFTE4sS0FGSyxFQUdsQk8sSUFIa0IsRUFBdkI7QUFJQSxVQUFNQyxNQUF3QixHQUFHLEVBQWpDOztBQUNBLFNBQUssTUFBTU4sR0FBWCxJQUFrQkgsSUFBbEIsRUFBd0I7QUFBQTs7QUFDcEIsWUFBTVUsY0FBYyxpQkFBR04sUUFBUSxDQUFFLFVBQVNELEdBQUksRUFBZixDQUFYLCtDQUFHLFdBQTJCUSxLQUFsRDs7QUFDQSxVQUFJRCxjQUFjLElBQUlFLFNBQXRCLEVBQWlDO0FBQzdCSCxRQUFBQSxNQUFNLENBQUNOLEdBQUQsQ0FBTixHQUFjO0FBQ1ZRLFVBQUFBLEtBQUssRUFBRUMsU0FERztBQUVWQyxVQUFBQSxLQUFLLEVBQUUsaUNBRkc7QUFHVkMsVUFBQUEsU0FBUyxFQUFFQyxpQ0FBcUJDO0FBSHRCLFNBQWQ7QUFLSCxPQU5ELE1BTU87QUFBQTs7QUFDSFAsUUFBQUEsTUFBTSxDQUFDTixHQUFELENBQU4sR0FBYztBQUNWUSxVQUFBQSxLQUFLLDJCQUFFRCxjQUFjLENBQUNDLEtBQWpCLHlFQUEwQkMsU0FEckI7QUFFVkUsVUFBQUEsU0FBUywyQkFBRUosY0FBYyxDQUFDSSxTQUFqQix5RUFBOEJGLFNBRjdCO0FBR1ZDLFVBQUFBLEtBQUssNEJBQUVILGNBQWMsQ0FBQ0csS0FBakIsMkVBQTBCRDtBQUhyQixTQUFkO0FBS0g7QUFDSjs7QUFDRCxXQUFPSCxNQUFQO0FBQ0g7O0FBRXNCLFFBQVZRLFVBQVUsQ0FBQ0MsV0FBRCxFQUErQztBQUNsRSxVQUFNQyxJQUFJLEdBQUcsTUFBTSxLQUFLM0IsVUFBTCxDQUFnQjRCLEdBQWhCLENBQXFCLG1CQUFyQixFQUF5Q1osSUFBekMsRUFBbkI7QUFDQSxXQUFPVyxJQUFQO0FBQ0g7O0FBRWdDLFFBQXBCRSxvQkFBb0IsQ0FDN0JDLEVBRDZCLEVBRTdCQyxXQUY2QixFQUc3QkwsV0FINkIsRUFJRDtBQUM1QixXQUFPLE1BQU0sS0FBSzFCLFVBQUwsQ0FDUmEsSUFEUSxDQUNGLFNBQVFpQixFQUFHLDBCQURULEVBRVJFLGVBRlEsQ0FFUTtBQUNiRixNQUFBQSxFQUFFLEVBQUVBLEVBRFM7QUFFYkMsTUFBQUEsV0FBVyxFQUFFQTtBQUZBLEtBRlIsRUFNUkUsZUFOUSxDQU1RUCxXQU5SLEVBT1JWLElBUFEsRUFBYjtBQVFIOztBQUU0QixRQUFoQmtCLGdCQUFnQixDQUFDSixFQUFELEVBQWFLLEdBQWIsRUFBMEJULFdBQTFCLEVBQW1GO0FBQzVHLFdBQU8sTUFBTSxLQUFLMUIsVUFBTCxDQUNSYSxJQURRLENBQ0YsU0FBUWlCLEVBQUcsZUFEVCxFQUVSRSxlQUZRLENBRVE7QUFBRUcsTUFBQUEsR0FBRyxFQUFFQTtBQUFQLEtBRlIsRUFHUkYsZUFIUSxDQUdRUCxXQUhSLEVBSVJWLElBSlEsRUFBYjtBQUtIOztBQUl1QixRQUFYb0IsV0FBVyxDQUFDTixFQUFELEVBQWFLLEdBQWIsRUFBc0NFLFVBQXRDLEVBQXlGO0FBQzdHLFFBQUlGLEdBQUcsSUFBSWYsU0FBUCxJQUFvQmlCLFVBQVUsSUFBSWpCLFNBQXRDLEVBQWlEO0FBQzdDLGFBQU8sTUFBTSxLQUFLcEIsVUFBTCxDQUNSYSxJQURRLENBQ0YsU0FBUWlCLEVBQUcsZUFEVCxFQUVSUSxlQUZRLENBRVEsMEJBRlIsRUFHUkMsa0JBSFEsQ0FHV0YsVUFIWCxFQUlSckIsSUFKUSxFQUFiO0FBS0g7O0FBQ0QsUUFBSW1CLEdBQUcsSUFBSWYsU0FBUCxJQUFvQmlCLFVBQVUsSUFBSWpCLFNBQXRDLEVBQWlEO0FBQzdDLGFBQU8sTUFBTSxLQUFLcEIsVUFBTCxDQUNSYSxJQURRLENBQ0YsU0FBUWlCLEVBQUcsZUFEVCxFQUVSRSxlQUZRLENBRVE7QUFBRUcsUUFBQUEsR0FBRyxFQUFFQTtBQUFQLE9BRlIsRUFHUkcsZUFIUSxDQUdRLDBCQUhSLEVBSVJDLGtCQUpRLENBSVdDLE1BQU0sQ0FBQ0MsSUFBUCxDQUFZLEVBQVosQ0FKWCxFQUtSekIsSUFMUSxFQUFiO0FBTUg7O0FBQ0QsUUFBSW1CLEdBQUcsSUFBSWYsU0FBUCxJQUFvQmlCLFVBQVUsSUFBSWpCLFNBQXRDLEVBQWlEO0FBQzdDLFlBQU0sSUFBSXNCLEtBQUosQ0FBVSxrREFBVixDQUFOO0FBQ0g7O0FBQ0QsV0FBTyxNQUFNLEtBQUsxQyxVQUFMLENBQ1JhLElBRFEsQ0FDRixTQUFRaUIsRUFBRyxlQURULEVBRVJFLGVBRlEsQ0FFUTtBQUFFRyxNQUFBQSxHQUFHLEVBQUVBO0FBQVAsS0FGUixFQUdSRyxlQUhRLENBR1EsMEJBSFIsRUFJUkMsa0JBSlEsQ0FJV0YsVUFKWCxFQUtSckIsSUFMUSxFQUFiO0FBTUg7O0FBRXNCLFFBQVYyQixVQUFVLEdBQWtCO0FBQ3JDLFVBQU0sS0FBSzNDLFVBQUwsQ0FBZ0I0QixHQUFoQixDQUFxQixjQUFyQixDQUFOO0FBQ0g7O0FBRU9kLEVBQUFBLFdBQVcsQ0FBQ1gsV0FBRCxFQUEyQnlDLGVBQTNCLEVBQTREO0FBQzNFLFdBQVEsU0FBUXpDLFdBQVcsQ0FBQzJCLEVBQUcsV0FBVTNCLFdBQVcsQ0FBQzBDLE9BQVEsSUFBR0QsZUFBZ0IsRUFBaEY7QUFDSDs7QUFFMkIsUUFBZkUsZUFBZSxHQUFrQztBQUMxRCxXQUFPLE1BQU0sS0FBSzlDLFVBQUwsQ0FBZ0I0QixHQUFoQixDQUFvQixtQkFBcEIsRUFBeUNaLElBQXpDLEVBQWI7QUFDSDs7QUFFaUMsUUFBckIrQixxQkFBcUIsQ0FBQ0Msa0JBQUQsRUFBMkQ7QUFDekYsVUFBTXBDLFFBQVEsR0FBRyxNQUFNLEtBQUtaLFVBQUwsQ0FDbEJhLElBRGtCLENBQ2IsK0JBRGEsRUFFbEJvQyxXQUZrQixDQUVOQyxJQUFJLENBQUNDLFNBQUwsQ0FBZUgsa0JBQWYsQ0FGTSxDQUF2Qjs7QUFHQSxRQUFJLEVBQUVwQyxRQUFRLENBQUN3QyxNQUFULElBQW1CLEdBQW5CLElBQTBCeEMsUUFBUSxDQUFDd0MsTUFBVCxHQUFrQixHQUE5QyxDQUFKLEVBQXdEO0FBQ3BELFlBQU0sSUFBSVYsS0FBSixDQUFXLHlCQUF3QjlCLFFBQVEsQ0FBQ3dDLE1BQU8sR0FBbkQsQ0FBTjtBQUNIOztBQUNELFdBQU8sSUFBUDtBQUNIOztBQTdIa0Q7Ozs7QUFnSWhELE1BQU1oRCxtQkFBTixDQUEwRDtBQUl0RFQsRUFBQUEsV0FBVyxDQUFDSyxVQUFELEVBQTBCRyxXQUExQixFQUFvRDtBQUFBLFNBSHJESCxVQUdxRDtBQUFBLFNBRnJERyxXQUVxRDtBQUNsRSxTQUFLSCxVQUFMLEdBQWtCQSxVQUFsQjtBQUNBLFNBQUtHLFdBQUwsR0FBbUJBLFdBQW5CO0FBQ0g7O0FBRU1rRCxFQUFBQSxvQkFBb0IsR0FBVztBQUNsQyxXQUFPLEtBQUtyRCxVQUFMLENBQWdCc0QsR0FBaEIsQ0FBcUIsbUJBQWtCLEtBQUtuRCxXQUFMLENBQWlCMkIsRUFBRyxXQUFVLEtBQUszQixXQUFMLENBQWlCMEMsT0FBUSxFQUE5RixDQUFQO0FBQ0g7O0FBRU1VLEVBQUFBLGtCQUFrQixHQUFXO0FBQ2hDLFdBQU8sS0FBS3ZELFVBQUwsQ0FBZ0JzRCxHQUFoQixDQUFvQixLQUFLeEMsV0FBTCxDQUFpQixTQUFqQixDQUFwQixDQUFQO0FBQ0g7O0FBRU0wQyxFQUFBQSx3QkFBd0IsR0FBVztBQUN0QyxXQUFPLEtBQUt4RCxVQUFMLENBQWdCc0QsR0FBaEIsQ0FBb0IsS0FBS3hDLFdBQUwsQ0FBaUIsWUFBakIsQ0FBcEIsQ0FBUDtBQUNIOztBQUVNMkMsRUFBQUEseUJBQXlCLEdBQVc7QUFDdkMsV0FBTyxLQUFLQyxnQ0FBTCxDQUFzQ0MsNkNBQXNCQyxRQUE1RCxDQUFQO0FBQ0g7O0FBRU1DLEVBQUFBLDJCQUEyQixHQUFXO0FBQ3pDLFdBQU8sS0FBS0gsZ0NBQUwsQ0FBc0NDLDZDQUFzQkcsVUFBNUQsQ0FBUDtBQUNIOztBQUVNQyxFQUFBQSxnQ0FBZ0MsR0FBVztBQUM5QyxXQUFPLEtBQUtMLGdDQUFMLENBQXNDQyw2Q0FBc0JLLGVBQTVELENBQVA7QUFDSDs7QUFFTUMsRUFBQUEsb0JBQW9CLEdBQVc7QUFDbEMsV0FBTyxLQUFLUCxnQ0FBTCxDQUFzQ0MsNkNBQXNCTyxLQUE1RCxDQUFQO0FBQ0g7O0FBRXVCLFFBQVhDLFdBQVcsR0FBNEI7QUFDaEQsV0FBTyxLQUFLbkUsVUFBTCxDQUFnQjRCLEdBQWhCLENBQW9CLEtBQUt3Qyx1QkFBTCxDQUE2QlQsNkNBQXNCVSxRQUFuRCxDQUFwQixFQUFrRnJELElBQWxGLEVBQVA7QUFDSDs7QUFFeUMsUUFBN0JzRCw2QkFBNkIsQ0FBQ0MsY0FBRCxFQUErRDtBQUNyRyxXQUFPLEtBQUt2RSxVQUFMLENBQ0ZhLElBREUsQ0FDRyxLQUFLQyxXQUFMLENBQWlCLFVBQWpCLENBREgsRUFFRkMsWUFGRSxDQUVXO0FBQUV3RCxNQUFBQSxjQUFjLEVBQUVBO0FBQWxCLEtBRlgsRUFHRnZELElBSEUsRUFBUDtBQUlIOztBQUV1QixRQUFYd0QsV0FBVyxDQUFDQyxNQUFELEVBQWtEO0FBQUE7O0FBQ3RFLFVBQU1DLEtBQUssR0FBRyxNQUFNLEtBQUsxRSxVQUFMLENBQ2ZhLElBRGUsQ0FDVixLQUFLQyxXQUFMLENBQWlCLFdBQWpCLENBRFUsRUFFZkMsWUFGZSxDQUVGLENBQUUsU0FBRixDQUZFLEVBR2ZDLElBSGUsRUFBcEI7QUFJQSxzQkFBTzBELEtBQUssQ0FBRSxTQUFRRCxNQUFPLEVBQWpCLENBQVosNENBQU8sUUFBMEJ0RCxLQUFqQztBQUNIOztBQUV1QixRQUFYd0QsV0FBVyxHQUEwQjtBQUM5QyxVQUFNRCxLQUFLLEdBQUcsTUFBTSxLQUFLMUUsVUFBTCxDQUNmYSxJQURlLENBQ1YsS0FBS0MsV0FBTCxDQUFpQixXQUFqQixDQURVLEVBRWZDLFlBRmUsQ0FFRixDQUFFLFNBQUYsQ0FGRSxFQUdmQyxJQUhlLEVBQXBCO0FBSUEsV0FBTzRELE1BQU0sQ0FBQ0MsTUFBUCxDQUFjSCxLQUFkLEVBQXFCaEUsR0FBckIsQ0FBeUJvRSxDQUFDLElBQUlBLENBQUMsQ0FBQzNELEtBQWhDLENBQVA7QUFDSDs7QUFFdUIsUUFBWDRELFdBQVcsQ0FBQ04sTUFBRCxFQUFpQk8sUUFBakIsRUFBK0U7QUFDbkcsVUFBTSxLQUFLaEYsVUFBTCxDQUNEYSxJQURDLENBQ0ksS0FBS3VELHVCQUFMLENBQTZCVCw2Q0FBc0JPLEtBQW5ELENBREosRUFFRGxDLGVBRkMsQ0FFZTFDLGNBRmYsRUFHRHlCLFlBSEMsQ0FHWTtBQUNWa0UsTUFBQUEsS0FBSyxFQUFFLEVBREc7QUFFVkMsTUFBQUEsT0FBTyxFQUFFO0FBQ0wsU0FBRSxTQUFRVCxNQUFPLEVBQWpCLEdBQXFCLEVBQ2pCLEdBQUdPLFFBRGM7QUFFakJHLFVBQUFBLEVBQUUsRUFBRVY7QUFGYTtBQURoQixPQUZDO0FBUVZXLE1BQUFBLE9BQU8sRUFBRTtBQVJDLEtBSFosQ0FBTjtBQWFIOztBQUVzQixRQUFWQyxVQUFVLENBQUNaLE1BQUQsRUFBZ0M7QUFDbkQsVUFBTSxLQUFLekUsVUFBTCxDQUNEYSxJQURDLENBQ0ksS0FBS3VELHVCQUFMLENBQTZCVCw2Q0FBc0JPLEtBQW5ELENBREosRUFFRGxDLGVBRkMsQ0FFZTFDLGNBRmYsRUFHRHlCLFlBSEMsQ0FHWTtBQUNWa0UsTUFBQUEsS0FBSyxFQUFFLEVBREc7QUFFVkMsTUFBQUEsT0FBTyxFQUFFLEVBRkM7QUFHVkUsTUFBQUEsT0FBTyxFQUFFLENBQUUsU0FBUVgsTUFBTyxFQUFqQjtBQUhDLEtBSFosQ0FBTjtBQVFIOztBQUVNYSxFQUFBQSxpQkFBaUIsR0FBNEI7QUFDaEQsV0FBTyxLQUFLdEYsVUFBTCxDQUNGNEIsR0FERSxDQUNFLEtBQUt3Qyx1QkFBTCxDQUE2QlQsNkNBQXNCNEIsY0FBbkQsQ0FERixFQUVGdkUsSUFGRSxFQUFQO0FBR0g7O0FBRU13RSxFQUFBQSxvQkFBb0IsQ0FBQ0MsWUFBRCxFQUF1QkMsU0FBdkIsRUFBa0Q7QUFDekUsV0FBTyxLQUFLMUYsVUFBTCxDQUFnQnNELEdBQWhCLENBQW9CLEtBQUt4QyxXQUFMLENBQWlCLDhCQUFqQixDQUFwQixFQUFzRTtBQUN6RTJFLE1BQUFBLFlBQVksRUFBRUEsWUFEMkQ7QUFFekVFLE1BQUFBLGNBQWMsRUFBRUQ7QUFGeUQsS0FBdEUsQ0FBUDtBQUlIOztBQUVzQixRQUFWRSxVQUFVLEdBQWtCO0FBQ3JDLFVBQU0sS0FBSzVGLFVBQUwsQ0FBZ0JhLElBQWhCLENBQXFCLEtBQUtDLFdBQUwsQ0FBaUIsT0FBakIsQ0FBckIsQ0FBTjtBQUNIOztBQUVtQyxRQUF2QitFLHVCQUF1QixDQUFDO0FBQUVDLElBQUFBLGNBQUY7QUFBa0IzRCxJQUFBQTtBQUFsQixHQUFELEVBQThEO0FBQzlGLFVBQU0sS0FBS25DLFVBQUwsQ0FBZ0JhLElBQWhCLENBQXFCLEtBQUtDLFdBQUwsQ0FBaUIsU0FBakIsQ0FBckIsRUFBa0RrQixlQUFsRCxDQUFrRTtBQUNwRW1ELE1BQUFBLEVBQUUsRUFBRVcsY0FEZ0U7QUFFcEUzRCxNQUFBQSxHQUFHLEVBQUVBO0FBRitELEtBQWxFLENBQU47QUFJSDs7QUFFeUIsUUFBYjRELGFBQWEsQ0FBQ0MsSUFBRCxFQUF3QkMsa0JBQXhCLEVBQW1GO0FBQ3pHLFVBQU1oRixNQUFNLEdBQUcsTUFBTSxLQUFLakIsVUFBTCxDQUNoQmEsSUFEZ0IsQ0FDWCxLQUFLQyxXQUFMLENBQWlCLE9BQWpCLENBRFcsRUFFaEJrQixlQUZnQixDQUVBO0FBQUV4QyxNQUFBQSxXQUFXLEVBQUV5RztBQUFmLEtBRkEsRUFHaEJsRixZQUhnQixDQUdIaUYsSUFIRyxFQUloQkUsVUFKZ0IsQ0FJTCxHQUpLLENBQXJCOztBQU1BLFVBQU1DLGdCQUFnQixHQUFHLFlBQVk7QUFBQTs7QUFDakMsWUFBTUMsVUFBVSxHQUFHLE1BQU1uRixNQUFNLENBQUNELElBQVAsRUFBekI7QUFDQSxhQUFPO0FBQ0h4QixRQUFBQSxXQUFXLDJCQUFFNEcsVUFBRixhQUFFQSxVQUFGLHVCQUFFQSxVQUFVLENBQUU1RyxXQUFkLHlFQUE2Qix5QkFBTyxnREFBUDtBQURyQyxPQUFQO0FBR0gsS0FMRDs7QUFPQSxXQUFPeUIsTUFBTSxDQUFDbUMsTUFBUCxJQUFpQixHQUFqQixHQUF1QixNQUFNK0MsZ0JBQWdCLEVBQTdDLEdBQWtEbEYsTUFBTSxDQUFDbUMsTUFBaEU7QUFDSDs7QUFFTWlELEVBQUFBLGlCQUFpQixDQUFDTCxJQUFELEVBQXdCQyxrQkFBeEIsRUFBMEU7QUFDOUYsVUFBTWhGLE1BQU0sR0FBRyxLQUFLakIsVUFBTCxDQUFnQnNHLFFBQWhCLENBQXlCLEtBQUt4RixXQUFMLENBQWlCLE9BQWpCLENBQXpCLEVBQW9EO0FBQUV0QixNQUFBQSxXQUFXLEVBQUV5RztBQUFmLEtBQXBELEVBQXlGRCxJQUF6RixDQUFmOztBQUVBLFVBQU1PLG9CQUFvQixHQUFHLE1BQU07QUFBQTs7QUFDL0IsWUFBTUgsVUFBVSxHQUFHbkYsTUFBTSxDQUFDRCxJQUFQLEVBQW5CO0FBQ0EsYUFBTztBQUNIeEIsUUFBQUEsV0FBVyw0QkFBRTRHLFVBQUYsYUFBRUEsVUFBRix1QkFBRUEsVUFBVSxDQUFFNUcsV0FBZCwyRUFBNkIseUJBQU8sZ0RBQVA7QUFEckMsT0FBUDtBQUdILEtBTEQ7O0FBTUEsV0FBT3lCLE1BQU0sQ0FBQ21DLE1BQVAsSUFBaUIsR0FBakIsR0FBdUJtRCxvQkFBb0IsRUFBM0MsR0FBZ0R0RixNQUFNLENBQUNtQyxNQUE5RDtBQUNIOztBQUV5QixRQUFib0QsYUFBYSxDQUFDQyxhQUFELEVBQXNFO0FBQzVGLFdBQU8sTUFBTSxLQUFLekcsVUFBTCxDQUNSYSxJQURRLENBQ0gsS0FBS0MsV0FBTCxDQUFpQixXQUFqQixDQURHLEVBRVJDLFlBRlEsQ0FFSzBGLGFBRkwsRUFHUnpGLElBSFEsRUFBYjtBQUlIOztBQUVvQixRQUFSMEYsUUFBUSxDQUFDakcsS0FBRCxFQUFxRTtBQUN0RixXQUFPLE1BQU0sS0FBS1QsVUFBTCxDQUNSYSxJQURRLENBQ0gsS0FBS0MsV0FBTCxDQUFpQixXQUFqQixDQURHLEVBRVJDLFlBRlEsQ0FFS04sS0FGTCxFQUdSTyxJQUhRLEVBQWI7QUFJSDs7QUFFTTJGLEVBQUFBLGVBQWUsQ0FBQ0MsS0FBRCxFQUEwQkMsZ0JBQTFCLEVBQW1GO0FBQ3JHLFdBQU8sS0FBSzdHLFVBQUwsQ0FDRmEsSUFERSxDQUNHLEtBQUtDLFdBQUwsQ0FBaUIsbUJBQWpCLENBREgsRUFFRmtCLGVBRkUsQ0FFYzZFLGdCQUFnQixJQUFJekYsU0FBcEIsSUFBaUM7QUFBRXlGLE1BQUFBLGdCQUFnQixFQUFFQSxnQkFBZ0IsQ0FBQ0MsUUFBakI7QUFBcEIsS0FGL0MsRUFHRi9GLFlBSEUsQ0FHVzZGLEtBSFgsRUFJRjVGLElBSkUsRUFBUDtBQUtIOztBQUVxQyxRQUF6QitGLHlCQUF5QixDQUNsQ0gsS0FEa0MsRUFFbENDLGdCQUZrQyxFQUdQO0FBQzNCLFdBQU8sS0FBSzdHLFVBQUwsQ0FDRmEsSUFERSxDQUNHLEtBQUtDLFdBQUwsQ0FBaUIsbUJBQWpCLENBREgsRUFFRmtCLGVBRkUsQ0FFYzZFLGdCQUFnQixJQUFJekYsU0FBcEIsSUFBaUM7QUFBRXlGLE1BQUFBLGdCQUFnQixFQUFFQSxnQkFBZ0IsQ0FBQ0MsUUFBakI7QUFBcEIsS0FGL0MsRUFHRjlFLGVBSEUsQ0FHYztBQUFFZ0YsTUFBQUEsTUFBTSxFQUFFO0FBQVYsS0FIZCxFQUlGakcsWUFKRSxDQUlXNkYsS0FKWCxFQUtGNUYsSUFMRSxFQUFQO0FBTUg7O0FBRU1pRyxFQUFBQSw0QkFBNEIsQ0FDL0JMLEtBRCtCLEVBRS9CQyxnQkFGK0IsRUFHTDtBQUMxQixXQUFPLEtBQUs3RyxVQUFMLENBQ0ZhLElBREUsQ0FDRyxLQUFLQyxXQUFMLENBQWlCLG9CQUFqQixDQURILEVBRUZrQixlQUZFLENBRWM2RSxnQkFBZ0IsSUFBSXpGLFNBQXBCLElBQWlDO0FBQUV5RixNQUFBQSxnQkFBZ0IsRUFBRUEsZ0JBQWdCLENBQUNDLFFBQWpCO0FBQXBCLEtBRi9DLEVBR0YvRixZQUhFLENBR1c2RixLQUhYLEVBSUY1RixJQUpFLEVBQVA7QUFLSDs7QUFFTWtHLEVBQUFBLGNBQWMsR0FBb0I7QUFDckMsV0FBTyxLQUFLbEgsVUFBTCxDQUFnQjRCLEdBQWhCLENBQW9CLEtBQUtkLFdBQUwsQ0FBaUIsd0JBQWpCLENBQXBCLEVBQWdFRSxJQUFoRSxFQUFQO0FBQ0g7O0FBRThCLFFBQWxCbUcsa0JBQWtCLEdBQTJDO0FBQ3RFLFdBQU8sTUFBTSxLQUFLbkgsVUFBTCxDQUNSNEIsR0FEUSxDQUNKLEtBQUt3Qyx1QkFBTCxDQUE2QlQsNkNBQXNCeUQsZUFBbkQsQ0FESSxFQUVScEcsSUFGUSxFQUFiO0FBR0g7O0FBRTZCLFFBQWpCcUcsaUJBQWlCLENBQUNDLFlBQUQsRUFBNEM7QUFBQTs7QUFDdEUsVUFBTXJHLE1BQU0sR0FBRyxNQUFNLEtBQUtqQixVQUFMLENBQ2hCYSxJQURnQixDQUNYLEtBQUtDLFdBQUwsQ0FBaUIsV0FBakIsQ0FEVyxFQUVoQkMsWUFGZ0IsQ0FFSCxDQUFFLGVBQWN1RyxZQUFhLEVBQTdCLENBRkcsRUFHaEJ0RyxJQUhnQixFQUFyQjtBQUlBLHlDQUFPQyxNQUFNLENBQUUsZUFBY3FHLFlBQWEsRUFBN0IsQ0FBYiw2Q0FBTyxTQUF1Q25HLEtBQTlDLDJEQUF1RCwwQkFBdkQ7QUFDSDs7QUFFNkIsUUFBakJvRyxpQkFBaUIsR0FBMEI7QUFDcEQsVUFBTXRHLE1BQU0sR0FBRyxNQUFNLEtBQUtqQixVQUFMLENBQ2hCYSxJQURnQixDQUNYLEtBQUtDLFdBQUwsQ0FBaUIsV0FBakIsQ0FEVyxFQUVoQkMsWUFGZ0IsQ0FFSCxDQUFFLGVBQUYsQ0FGRyxFQUdoQkMsSUFIZ0IsRUFBckI7QUFJQSxXQUFPNEQsTUFBTSxDQUFDQyxNQUFQLENBQWM1RCxNQUFkLEVBQXNCUCxHQUF0QixDQUEwQm9FLENBQUMsSUFBSUEsQ0FBQyxDQUFDM0QsS0FBakMsQ0FBUDtBQUNIOztBQUU2QixRQUFqQnFHLGlCQUFpQixDQUFDQyxhQUFELEVBQWtEO0FBQzVFLFVBQU0sS0FBS3pILFVBQUwsQ0FDRGEsSUFEQyxDQUNJLEtBQUt1RCx1QkFBTCxDQUE2QlQsNkNBQXNCTyxLQUFuRCxDQURKLEVBRURsQyxlQUZDLENBRWUxQyxjQUZmLEVBR0R5QixZQUhDLENBR1k7QUFDVmtFLE1BQUFBLEtBQUssRUFBRSxFQURHO0FBRVZDLE1BQUFBLE9BQU8sRUFBRSxFQUZDO0FBR1ZFLE1BQUFBLE9BQU8sRUFBRXFDLGFBQWEsQ0FBQy9HLEdBQWQsQ0FBa0J5RSxFQUFFLElBQUssZUFBY0EsRUFBRyxFQUExQztBQUhDLEtBSFosQ0FBTjtBQVFIOztBQUVxQyxRQUF6QnVDLHlCQUF5QixDQUFDQyxXQUFELEVBQW9EO0FBQ3RGLFVBQU16QyxPQUFPLEdBQUcsRUFBaEI7O0FBQ0EsU0FBSyxNQUFNMEMsVUFBWCxJQUF5QkQsV0FBekIsRUFBc0M7QUFDbEN6QyxNQUFBQSxPQUFPLENBQUUsZUFBYzBDLFVBQVUsQ0FBQ3pDLEVBQUcsRUFBOUIsQ0FBUCxHQUEwQztBQUN0QzBDLFFBQUFBLFVBQVUsRUFBRUQsVUFBVSxDQUFDQyxVQURlO0FBRXRDMUMsUUFBQUEsRUFBRSxFQUFFeUMsVUFBVSxDQUFDekMsRUFGdUI7QUFHdEMyQyxRQUFBQSxJQUFJLEVBQUVGLFVBQVUsQ0FBQ0U7QUFIcUIsT0FBMUM7QUFLSDs7QUFDRCxVQUFNLEtBQUs5SCxVQUFMLENBQ0RhLElBREMsQ0FDSSxLQUFLdUQsdUJBQUwsQ0FBNkJULDZDQUFzQk8sS0FBbkQsQ0FESixFQUVEbEMsZUFGQyxDQUVlMUMsY0FGZixFQUdEeUIsWUFIQyxDQUdZO0FBQ1ZrRSxNQUFBQSxLQUFLLEVBQUUsRUFERztBQUVWQyxNQUFBQSxPQUFPLEVBQUVBLE9BRkM7QUFHVkUsTUFBQUEsT0FBTyxFQUFFO0FBSEMsS0FIWixDQUFOO0FBUUg7O0FBRTJCLFFBQWYyQyxlQUFlLENBQUNDLGdCQUFELEVBQTBDQyxPQUExQyxFQUFvRjtBQUM1RyxRQUFJQyxPQUFPLEdBQUcsS0FBS2xJLFVBQUwsQ0FBZ0JtSSxHQUFoQixDQUFvQixLQUFLL0QsdUJBQUwsQ0FBNkI0RCxnQkFBN0IsQ0FBcEIsQ0FBZDs7QUFDQSxRQUFJLE9BQU9DLE9BQVAsS0FBbUIsUUFBdkIsRUFBaUM7QUFDN0JDLE1BQUFBLE9BQU8sR0FBR0EsT0FBTyxDQUFDakYsV0FBUixDQUFvQmdGLE9BQXBCLENBQVY7QUFDSCxLQUZELE1BRU8sSUFBSSx3QkFBU0EsT0FBVCxDQUFKLEVBQXVCO0FBQzFCQyxNQUFBQSxPQUFPLEdBQUdBLE9BQU8sQ0FBQ2pGLFdBQVIsQ0FBb0JnRixPQUFwQixDQUFWO0FBQ0gsS0FGTSxNQUVBO0FBQ0hDLE1BQUFBLE9BQU8sR0FBR0EsT0FBTyxDQUFDbkgsWUFBUixDQUFxQmtILE9BQXJCLENBQVY7QUFDSDs7QUFDRCxVQUFNQyxPQUFOO0FBQ0g7O0FBRTZCLFFBQWpCRSxpQkFBaUIsQ0FDMUJKLGdCQUQwQixFQUUxQkssbUJBRjBCLEVBR2I7QUFDYixVQUFNLEtBQUtySSxVQUFMLENBQWdCc0ksS0FBaEIsQ0FBc0IsS0FBS2xFLHVCQUFMLENBQTZCNEQsZ0JBQTdCLENBQXRCLEVBQXNFakgsWUFBdEUsQ0FBbUZzSCxtQkFBbkYsQ0FBTjtBQUNIOztBQUU2QixRQUFqQkUsaUJBQWlCLENBQUNDLFFBQUQsRUFBd0Q7QUFDbEYsVUFBTTVILFFBQVEsR0FBRyxNQUFNLEtBQUtaLFVBQUwsQ0FDbEI0QixHQURrQixDQUNiLHlCQURhLEVBRWxCSSxlQUZrQixDQUVGO0FBQUV3RyxNQUFBQSxRQUFRLEVBQUVBO0FBQVosS0FGRSxFQUdsQnRDLFVBSGtCLENBR1AsR0FITyxDQUF2Qjs7QUFJQSxRQUFJdEYsUUFBUSxDQUFDd0MsTUFBVCxLQUFvQixHQUF4QixFQUE2QjtBQUN6QixhQUFPaEMsU0FBUDtBQUNIOztBQUNELFdBQU8sTUFBTVIsUUFBUSxDQUFDSSxJQUFULEVBQWI7QUFDSDs7QUFFdUMsUUFBM0J5SCwyQkFBMkIsQ0FBQ0QsUUFBRCxFQUFtQnJHLEdBQW5CLEVBQXFFO0FBQ3pHLFVBQU12QixRQUFRLEdBQUcsTUFBTSxLQUFLWixVQUFMLENBQ2xCNEIsR0FEa0IsQ0FDYixxQ0FEYSxFQUVsQkksZUFGa0IsQ0FFRjtBQUFFRyxNQUFBQSxHQUFHLEVBQUVBLEdBQVA7QUFBWXFHLE1BQUFBLFFBQVEsRUFBRUE7QUFBdEIsS0FGRSxFQUdsQnRDLFVBSGtCLENBR1AsR0FITyxDQUF2Qjs7QUFJQSxRQUFJdEYsUUFBUSxDQUFDd0MsTUFBVCxLQUFvQixHQUF4QixFQUE2QjtBQUN6QixhQUFPaEMsU0FBUDtBQUNIOztBQUNELFFBQUlSLFFBQVEsQ0FBQ3dDLE1BQVQsS0FBb0IsR0FBeEIsRUFBNkI7QUFDekIsWUFBTXNGLFNBQVMsR0FBRyxNQUFNOUgsUUFBUSxDQUFDSSxJQUFULEVBQXhCOztBQUNBLFVBQUkwSCxTQUFTLENBQUNwSCxTQUFWLEtBQXdCLGlCQUE1QixFQUErQztBQUMzQyxjQUFNLElBQUlxSCwwQ0FBSixDQUF5QkQsU0FBUyxDQUFDRSxPQUFuQyxDQUFOO0FBQ0g7O0FBQ0QsWUFBTSxJQUFJQyxxQkFBSixDQUFjSCxTQUFTLENBQUNFLE9BQXhCLEVBQWlDaEksUUFBUSxDQUFDd0MsTUFBMUMsQ0FBTjtBQUNIOztBQUNELFdBQU8sTUFBTXhDLFFBQVEsQ0FBQ0ksSUFBVCxFQUFiO0FBQ0g7O0FBRXNDLFFBQTFCOEgsMEJBQTBCLENBQ25DQyxTQURtQyxFQUVuQzVHLEdBRm1DLEVBR25DVCxXQUhtQyxFQUlFO0FBQ3JDLFFBQUk7QUFDQSxZQUFNZCxRQUFRLEdBQUcsTUFBTSxLQUFLWixVQUFMLENBQ2xCYSxJQURrQixDQUNaLG9DQURZLEVBRWxCbUIsZUFGa0IsQ0FFRjtBQUFFRyxRQUFBQSxHQUFHLEVBQUVBO0FBQVAsT0FGRSxFQUdsQnBCLFlBSGtCLENBR0xnSSxTQUhLLEVBSWxCOUcsZUFKa0IsQ0FJRlAsV0FKRSxFQUtsQndFLFVBTGtCLENBS1AsR0FMTyxFQU1sQkEsVUFOa0IsQ0FNUCxHQU5PLENBQXZCOztBQU9BLFVBQUl0RixRQUFRLENBQUN3QyxNQUFULEtBQW9CLEdBQXhCLEVBQTZCO0FBQ3pCLGNBQU00QyxJQUFJLEdBQUcsTUFBTXBGLFFBQVEsQ0FBQ0ksSUFBVCxFQUFuQjtBQUNBLGVBQU87QUFBRWdJLFVBQUFBLFdBQVcsRUFBRWhELElBQUksQ0FBQzFFLFNBQXBCO0FBQStCMkgsVUFBQUEsOEJBQThCLEVBQUUsRUFBL0Q7QUFBbUVDLFVBQUFBLGlCQUFpQixFQUFFO0FBQXRGLFNBQVA7QUFDSDs7QUFDRCxZQUFNbEQsSUFBSSxHQUFHLE1BQU1wRixRQUFRLENBQUNJLElBQVQsRUFBbkI7QUFDQSxhQUFPZ0YsSUFBUDtBQUNILEtBZEQsQ0FjRSxPQUFPbUQsQ0FBUCxFQUFVO0FBQ1IsYUFBTztBQUNISCxRQUFBQSxXQUFXLEVBQUV2SixZQUFZLENBQUMySixZQUR2QjtBQUVISCxRQUFBQSw4QkFBOEIsRUFBRSxFQUY3QjtBQUdIQyxRQUFBQSxpQkFBaUIsRUFBRTtBQUhoQixPQUFQO0FBS0g7QUFDSjs7QUFFOEIsUUFBbEJHLGtCQUFrQixDQUMzQnRILFdBRDJCLEVBRTNCdUgsWUFGMkIsRUFHM0I1SCxXQUgyQixFQUlhO0FBQ3hDLFFBQUk7QUFDQSxZQUFNZCxRQUFRLEdBQUcsTUFBTSxLQUFLWixVQUFMLENBQ2xCYSxJQURrQixDQUNaLFNBQVEsS0FBS1YsV0FBTCxDQUFpQjJCLEVBQUcsV0FBVSxLQUFLM0IsV0FBTCxDQUFpQjBDLE9BQVEsbUJBRG5ELEVBRWxCYixlQUZrQixDQUVGO0FBQUVELFFBQUFBLFdBQVcsRUFBRUEsV0FBZjtBQUE0QndILFFBQUFBLE1BQU0sRUFBRUQ7QUFBcEMsT0FGRSxFQUdsQnJILGVBSGtCLENBR0ZQLFdBSEUsRUFJbEJ3RSxVQUprQixDQUlQLEdBSk8sRUFLbEJBLFVBTGtCLENBS1AsR0FMTyxDQUF2Qjs7QUFNQSxVQUFJdEYsUUFBUSxDQUFDd0MsTUFBVCxLQUFvQixHQUF4QixFQUE2QjtBQUN6QixjQUFNNEMsSUFBSSxHQUFHLE1BQU1wRixRQUFRLENBQUNJLElBQVQsRUFBbkI7QUFDQSxlQUFPO0FBQUVnSSxVQUFBQSxXQUFXLEVBQUVoRCxJQUFJLENBQUMxRTtBQUFwQixTQUFQO0FBQ0g7O0FBQ0QsYUFBT0YsU0FBUDtBQUNILEtBWkQsQ0FZRSxPQUFPK0gsQ0FBUCxFQUFVO0FBQ1IsYUFBTztBQUFFSCxRQUFBQSxXQUFXLEVBQUV2SixZQUFZLENBQUMySjtBQUE1QixPQUFQO0FBQ0g7QUFDSjs7QUFFNEIsUUFBaEJJLGdCQUFnQixDQUFDaEIsUUFBRCxFQUFrQztBQUMzRCxVQUFNLEtBQUt4SSxVQUFMLENBQWdCbUksR0FBaEIsQ0FBb0IsS0FBS3JILFdBQUwsQ0FBaUIsU0FBakIsQ0FBcEIsRUFBaURrQixlQUFqRCxDQUFpRTtBQUFFd0csTUFBQUEsUUFBUSxFQUFFQTtBQUFaLEtBQWpFLENBQU47QUFDSDs7QUFFZ0MsUUFBcEJpQixvQkFBb0IsQ0FDN0JqQixRQUQ2QixFQUU3QmtCLGFBRjZCLEVBRzdCaEksV0FINkIsRUFJUTtBQUNyQyxVQUFNZCxRQUFRLEdBQUcsTUFBTSxLQUFLWixVQUFMLENBQ2xCYSxJQURrQixDQUNiLEtBQUtDLFdBQUwsQ0FBaUIsMkJBQWpCLENBRGEsRUFFbEJrQixlQUZrQixDQUVGO0FBQUVELE1BQUFBLFdBQVcsRUFBRXlHLFFBQWY7QUFBeUJrQixNQUFBQSxhQUFhLEVBQUVBO0FBQXhDLEtBRkUsRUFHbEJ6SCxlQUhrQixDQUdGUCxXQUhFLENBQXZCOztBQUlBLFFBQUlkLFFBQVEsQ0FBQ3dDLE1BQVQsS0FBb0IsR0FBeEIsRUFBNkI7QUFDekIsYUFBT2hDLFNBQVA7QUFDSDs7QUFDRCxXQUFPLE1BQU1SLFFBQVEsQ0FBQ0ksSUFBVCxFQUFiO0FBQ0g7O0FBRXdDLFFBQTVCMkksNEJBQTRCLENBQ3JDWixTQURxQyxFQUVyQ1csYUFGcUMsRUFHQTtBQUNyQyxVQUFNOUksUUFBUSxHQUFHLE1BQU0sS0FBS1osVUFBTCxDQUNsQmEsSUFEa0IsQ0FDYixLQUFLQyxXQUFMLENBQWlCLDRCQUFqQixDQURhLEVBRWxCa0IsZUFGa0IsQ0FFRjtBQUFFMEgsTUFBQUEsYUFBYSxFQUFFQTtBQUFqQixLQUZFLEVBR2xCM0ksWUFIa0IsQ0FHTGdJLFNBSEssQ0FBdkI7O0FBSUEsUUFBSW5JLFFBQVEsQ0FBQ3dDLE1BQVQsS0FBb0IsR0FBeEIsRUFBNkI7QUFDekIsYUFBT2hDLFNBQVA7QUFDSDs7QUFDRCxXQUFPLE1BQU1SLFFBQVEsQ0FBQ0ksSUFBVCxFQUFiO0FBQ0g7O0FBRTRCLFFBQWhCNEksZ0JBQWdCLENBQUNoRCxLQUFELEVBQStCO0FBQ3hELFVBQU0sS0FBSzVHLFVBQUwsQ0FBZ0JhLElBQWhCLENBQXFCLEtBQUtDLFdBQUwsQ0FBaUIsZ0JBQWpCLENBQXJCLEVBQXlEQyxZQUF6RCxDQUFzRTZGLEtBQXRFLENBQU47QUFDSDs7QUFFT2xELEVBQUFBLGdDQUFnQyxDQUFDc0UsZ0JBQUQsRUFBa0Q7QUFDdEYsV0FBTyxLQUFLaEksVUFBTCxDQUFnQnNELEdBQWhCLENBQW9CLEtBQUtjLHVCQUFMLENBQTZCNEQsZ0JBQTdCLENBQXBCLENBQVA7QUFDSDs7QUFFT2xILEVBQUFBLFdBQVcsQ0FBQzhCLGVBQUQsRUFBa0M7QUFDakQsV0FBUSxTQUFRLEtBQUt6QyxXQUFMLENBQWlCMkIsRUFBRyxXQUFVLEtBQUszQixXQUFMLENBQWlCMEMsT0FBUSxJQUFHRCxlQUFnQixFQUExRjtBQUNIOztBQUVPd0IsRUFBQUEsdUJBQXVCLENBQUM0RCxnQkFBRCxFQUFrRDtBQUM3RSxXQUFPLEtBQUtsSCxXQUFMLENBQWtCLGlCQUFnQmtILGdCQUFnQixDQUFDbEIsUUFBakIsRUFBNEIsRUFBOUQsQ0FBUDtBQUNIOztBQUVxQyxRQUF6QitDLHlCQUF5QixDQUFDQyxPQUFELEVBQWtDO0FBQ3BFLFVBQU1DLEdBQUcsR0FBRyxLQUFLakosV0FBTCxDQUFpQixpQkFBakIsQ0FBWjtBQUNBLFVBQU0sS0FBS2QsVUFBTCxDQUFnQnNJLEtBQWhCLENBQXNCeUIsR0FBdEIsRUFBMkIvSCxlQUEzQixDQUEyQztBQUFFZ0ksTUFBQUEsVUFBVSxFQUFFRjtBQUFkLEtBQTNDLENBQU47QUFDSDs7QUFFaUMsUUFBckJHLHFCQUFxQixDQUM5QkMsSUFEOEIsRUFFOUJDLFdBRjhCLEVBRzlCQyxhQUg4QixFQUk5QnZELGdCQUo4QixFQUtiO0FBQ2pCLFVBQU13RCxzQkFBc0IsR0FBR3hELGdCQUFnQixJQUFJekYsU0FBcEIsR0FBZ0M7QUFBRXlGLE1BQUFBLGdCQUFnQixFQUFFQTtBQUFwQixLQUFoQyxHQUF5RSxFQUF4RztBQUNBLFVBQU15RCxNQUFNLEdBQUc7QUFBRUMsTUFBQUEsWUFBWSxFQUFFTCxJQUFoQjtBQUFzQkMsTUFBQUEsV0FBVyxFQUFFQSxXQUFuQztBQUFnRCxTQUFHRTtBQUFuRCxLQUFmO0FBQ0EsV0FBTyxLQUFLckssVUFBTCxDQUNGYSxJQURFLENBQ0csS0FBS0MsV0FBTCxDQUFpQix3QkFBakIsQ0FESCxFQUVGa0IsZUFGRSxDQUVjc0ksTUFGZCxFQUdGdkosWUFIRSxDQUdXcUosYUFIWCxFQUlGcEosSUFKRSxFQUFQO0FBS0g7O0FBRTJCLFFBQWZ3SixlQUFlLENBQ3hCQyxZQUR3QixFQUV4QkMsWUFGd0IsRUFHeEJoSixXQUh3QixFQUlYO0FBQ2IsVUFBTTRJLE1BQU0sR0FBRztBQUFFRyxNQUFBQSxZQUFZLEVBQUVBO0FBQWhCLEtBQWY7QUFDQSxVQUFNLEtBQUt6SyxVQUFMLENBQ0RhLElBREMsQ0FDSSxLQUFLQyxXQUFMLENBQWlCLHdCQUFqQixDQURKLEVBRURrQixlQUZDLENBRWVzSSxNQUZmLEVBR0R2SixZQUhDLENBR1kySixZQUhaLEVBSUR6SSxlQUpDLENBSWVQLFdBSmYsQ0FBTjtBQUtIOztBQUUyQixRQUFmaUosZUFBZSxDQUFDekMsT0FBRCxFQUFpRDtBQUN6RSxVQUFNLEtBQUtsSSxVQUFMLENBQWdCc0ksS0FBaEIsQ0FBc0IsS0FBS3hILFdBQUwsQ0FBaUIsT0FBakIsQ0FBdEIsRUFBaURDLFlBQWpELENBQThEbUgsT0FBOUQsQ0FBTjtBQUNIOztBQUUyQixRQUFmMEMsZUFBZSxDQUFDQyxhQUFELEVBQXdEO0FBQ2hGLFVBQU0sS0FBSzdLLFVBQUwsQ0FBZ0JhLElBQWhCLENBQXFCLEtBQUtDLFdBQUwsQ0FBaUIsd0JBQWpCLENBQXJCLEVBQWlFQyxZQUFqRSxDQUE4RThKLGFBQTlFLENBQU47QUFDSDs7QUFFeUIsUUFBYkMsYUFBYSxDQUFDQyxRQUFELEVBQW1CQyxVQUFuQixFQUFxRTtBQUMzRixVQUFNQyxXQUFXLEdBQUc7QUFBRUYsTUFBQUEsUUFBUSxFQUFFQTtBQUFaLEtBQXBCO0FBQ0EsVUFBTSxLQUFLL0ssVUFBTCxDQUNEYSxJQURDLENBQ0ksS0FBS0MsV0FBTCxDQUFpQixtQkFBakIsQ0FESixFQUVEa0IsZUFGQyxDQUVlaUosV0FGZixFQUdEbEssWUFIQyxDQUdZaUssVUFIWixDQUFOO0FBSUg7O0FBRU1FLEVBQUFBLEtBQUssQ0FBQ0MsSUFBRCxFQUFrQnhKLElBQWxCLEVBQTJEO0FBQ25FLFdBQU8sS0FBSzNCLFVBQUwsQ0FDRmEsSUFERSxDQUNHLEtBQUtDLFdBQUwsQ0FBa0IsNkJBQTRCcUssSUFBSyxFQUFuRCxDQURILEVBRUZwSyxZQUZFLENBRVdZLElBRlgsRUFHRlgsSUFIRSxFQUFQO0FBSUg7O0FBRXNCLFFBQVZvSyxVQUFVLENBQUNDLFdBQUQsRUFBMEQ7QUFDN0UsUUFBSTtBQUNBLFlBQU16SyxRQUFRLEdBQUcsTUFBTSxLQUFLWixVQUFMLENBQ2xCYSxJQURrQixDQUNiLEtBQUtDLFdBQUwsQ0FBa0IsMkJBQWxCLENBRGEsRUFFbEJrQixlQUZrQixDQUVGO0FBQUVxSixRQUFBQSxXQUFXLEVBQUVBO0FBQWYsT0FGRSxDQUF2Qjs7QUFHQSxVQUFJekssUUFBUSxDQUFDd0MsTUFBVCxLQUFvQixHQUF4QixFQUE2QjtBQUN6QixjQUFNa0ksVUFBVSxHQUFHMUssUUFBUSxDQUFDSSxJQUFULEVBQW5CO0FBQ0EsZUFBT3NLLFVBQVA7QUFDSDs7QUFDRCxhQUFPbEssU0FBUDtBQUNILEtBVEQsQ0FTRSxPQUFPK0gsQ0FBUCxFQUFVO0FBQ1IsYUFBTy9ILFNBQVA7QUFDSDtBQUNKOztBQUV1QixRQUFYbUssV0FBVyxHQUErQjtBQUNuRCxVQUFNM0ssUUFBUSxHQUFHLE1BQU0sS0FBS1osVUFBTCxDQUFnQjRCLEdBQWhCLENBQ2xCLFNBQVEsS0FBS3pCLFdBQUwsQ0FBaUIyQixFQUFHLFdBQVUsS0FBSzNCLFdBQUwsQ0FBaUIwQyxPQUFRLGNBRDdDLENBQXZCO0FBSUEsV0FBT2pDLFFBQVEsQ0FBQ0ksSUFBVCxFQUFQO0FBQ0g7O0FBcmQ0RCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHJlamVjdCB9IGZyb20gXCIuLi9UeXBpbmdVdGlsc1wiO1xuaW1wb3J0IHsgRmV0Y2ggfSBmcm9tIFwiLi4vSHR0cENsaWVudC9GZXRjaEltcGxlbWVudGF0aW9uL0ZldGNoXCI7XG5pbXBvcnQgeyBIdHRwQ2xpZW50LCBIdHRwRXJyb3IgfSBmcm9tIFwiLi4vSHR0cENsaWVudC9IdHRwQ2xpZW50XCI7XG5pbXBvcnQgeyBJSHR0cENsaWVudCB9IGZyb20gXCIuLi9IdHRwQ2xpZW50L0lIdHRwQ2xpZW50XCI7XG5pbXBvcnQgeyBBdXRoZW50aWNhdGlvbk1vZGUsIGNyZWF0ZUF1dGhlbnRpY2F0aW9uUHJvdmlkZXIgfSBmcm9tIFwiLi4vSHR0cENsaWVudC9BdXRoZW50aWNhdGlvbk1vZGVcIjtcblxuaW1wb3J0IHsgQ2hlY2tTY2VuYXJpb1R5cGUsIElDYW5keUFwaUNsaWVudCwgSUNhbmR5QXBpRHJhZnRDbGllbnQsIElTZW5kQ2hhbmdlU2V0UmVzdWx0IH0gZnJvbSBcIi4vSUNhbmR5QXBpQ2xpZW50XCI7XG5pbXBvcnQgeyBTZXJ2ZXJFcnJvckxvZyB9IGZyb20gXCIuL1R5cGVzL0Vycm9yTG9nL1NlcnZlckVycm9yTG9nXCI7XG5pbXBvcnQgeyBTZXJ2ZXJJbm5lclJlc3BvbnNlLCBTZXJ2ZXJKc29uUmVzcG9uc2UgfSBmcm9tIFwiLi9UeXBlcy9HZXRJbm5lci9TZXJ2ZXJJbm5lclJlc3BvbnNlXCI7XG5pbXBvcnQgeyBGaWxlUHJvcGVydGllcywgU2VydmVyRXJyb3JSZXNwb25zZSwgVXBsb2FkRmlsZVByb3BlcnRpZXNSZXNwb25zZSB9IGZyb20gXCIuL1R5cGVzL0RyYWZ0QWN0aW9ucy9GaWxlUHJvcGVydGllc1wiO1xuaW1wb3J0IHsgQ3JlYXRlRHJhZnRSZXNwb25zZSB9IGZyb20gXCIuL1R5cGVzL0NyZWF0ZURyYWZ0L0NyZWF0ZURyYWZ0UmVzcG9uc2VcIjtcbmltcG9ydCB7IENyZWF0ZUV4cGxhbmF0b3J5Tm90ZVJlc3BvbnNlIH0gZnJvbSBcIi4vVHlwZXMvRXhwbGFuYXRvcnlOb3RlL0NyZWF0ZUV4cGxhbmF0b3J5Tm90ZVJlc3BvbnNlXCI7XG5pbXBvcnQgeyBEcmFmdEZ1bGxJZCB9IGZyb20gXCIuL1R5cGVzL0RyYWZ0RnVsbElkXCI7XG5pbXBvcnQgeyBTZXJ2ZXJDaGFuZ2VTZXQgfSBmcm9tIFwiLi9UeXBlcy9DaGFuZ2VTZXQvU2VydmVyQ2hhbmdlU2V0XCI7XG5pbXBvcnQgeyBTZXJ2ZXJUYXNrLCBWZXJpZnlBbmRGaXhGbnNSZXF1aXJlbWVudHNUYXNrSW5mbyB9IGZyb20gXCIuL1R5cGVzL1Rhc2tzL1Rhc2tzXCI7XG5pbXBvcnQgeyBGb2N1c1NlcnZlckVycm9yQ29kZSwgR2V0QnlJbm5SZXNwb25zZSB9IGZyb20gXCIuL1R5cGVzL0ZvY3VzL0ZvY3VzVHlwZXNcIjtcbmltcG9ydCB7IEF0dGFjaEluZm8gfSBmcm9tIFwiLi9UeXBlcy9BdHRhY2htZW50cy9BdHRhY21lbnRzXCI7XG5pbXBvcnQgeyBEcmFmdFByZXNlbnRhdGlvblR5cGUgfSBmcm9tIFwiLi9UeXBlcy9QcmVzZW50YXRpb25zL0RyYWZ0UHJlc2VudGF0aW9uVHlwZVwiO1xuaW1wb3J0IHsgUHJlc2VudGF0aW9uQ29udGVudCB9IGZyb20gXCIuL1R5cGVzL1ByZXNlbnRhdGlvbnMvUHJlc2VudGF0aW9uQ29udGVudFwiO1xuaW1wb3J0IHsgQ29udmVydERyYWZ0UmVxdWVzdCB9IGZyb20gXCIuL1R5cGVzL0RyYWZ0QWN0aW9ucy9Db252ZXJ0RHJhZnRSZXF1ZXN0XCI7XG5pbXBvcnQgeyBHZXRBdHRhY2htZW50c1Jlc3BvbnNlIH0gZnJvbSBcIi4vVHlwZXMvQXR0YWNobWVudHMvR2V0QXR0YWNobWVudHNSZXNwb25zZVwiO1xuaW1wb3J0IHsgRm9jdXNTZXJ2ZXJSZXNwb25zZSB9IGZyb20gXCIuL1R5cGVzL0ZvY3VzL0ZvY3VzU2VydmVyUmVzcG9uc2VcIjtcbmltcG9ydCB7IEdldFRhc2tzU2VydmVyUmVzcG9uc2UgfSBmcm9tIFwiLi9UeXBlcy9UYXNrcy9HZXRUYXNrc1NlcnZlclJlc3BvbnNlXCI7XG5pbXBvcnQgeyBTZXJ2ZXJSZXF1aXNpdGVzUmVzcG9uc2UgfSBmcm9tIFwiLi9UeXBlcy9HZXRJbm5lci9TZXJ2ZXJSZXF1aXNpdGVzUmVzcG9uc2VcIjtcbmltcG9ydCB7IGlzQnVmZmVyIH0gZnJvbSBcIi4vSXNCdWZmZXJcIjtcbmltcG9ydCB7IENvbWJpbmVGdWZSZXN1bHQsIEZ1ZkNvbWJpbmVNZXRob2QgfSBmcm9tIFwiLi9UeXBlcy9EcmFmdEFjdGlvbnMvQ29tYmluZUZ1ZlJlc3VsdFwiO1xuaW1wb3J0IHsgRmVhdHVyZUZsYWdzUmVzcG9uc2UgfSBmcm9tIFwiLi9UeXBlcy9GZWF0dXJlRmxhZ3MvRmVhdHVyZUZsYWdzUmVzcG9uc2VcIjtcbmltcG9ydCB7IERpZ2VzdEFwaUNsaWVudCB9IGZyb20gXCIuL0RpZ2VzdEFwaUNsaWVudC9EaWdlc3RBcGlDbGllbnRcIjtcbmltcG9ydCB7IElEaWdlc3RBcGlDbGllbnQgfSBmcm9tIFwiLi9EaWdlc3RBcGlDbGllbnQvSURpZ2VzdEFwaUNsaWVudFwiO1xuaW1wb3J0IHsgRnVmU2l6ZVRvb0xhcmdlRXJyb3IgfSBmcm9tIFwiLi9UeXBlcy9EcmFmdEFjdGlvbnMvRnVmU2l6ZVRvb0xhcmdlRXJyb3JcIjtcbmltcG9ydCB7IEltcG9ydEVtcGxveWVlc1JlcXVlc3QgfSBmcm9tIFwiLi9UeXBlcy9TdGFmZi9JbXBvcnRFbXBsb3llZXNSZXF1ZXN0XCI7XG5pbXBvcnQgeyBNYXNzQWN0aW9uUGFyYW1ldGVycyB9IGZyb20gXCIuL1R5cGVzL01hc3NBY3Rpb25zL01hc3NBY3Rpb25QYXJhbWV0ZXJzXCI7XG5pbXBvcnQgeyBQcmludFR5cGUgfSBmcm9tIFwiLi9UeXBlcy9QcmludC9QcmludFR5cGVcIjtcbmltcG9ydCB7IFByaW50UmVzcG9uc2UgfSBmcm9tIFwiLi9UeXBlcy9QcmludC9QcmludFJlc3BvbnNlXCI7XG5pbXBvcnQgeyBTZXJ2ZXJSYXdSZXNwb25zZSB9IGZyb20gXCIuL1R5cGVzL0dldElubmVyL1NlcnZlclJhd1Jlc3BvbnNlXCI7XG5pbXBvcnQgeyBUZXN0Q2xhc3NpZmljYXRpb24gfSBmcm9tIFwiLi9UeXBlcy9UZXN0Q2xhc3NpZmljYXRpb25cIjtcbmltcG9ydCB7IENhbmR5UG9wZFByb3RvY29sIH0gZnJvbSBcIi4vVHlwZXMvRXJyb3JMb2cvQ2FuZHlQb3BkUHJvdG9jb2xcIjtcbmltcG9ydCB7IEluc3RhbmNlc0RlbGV0aW5nUnVsZSB9IGZyb20gXCIuL1R5cGVzL0luc3RhbmNlc0RlbGV0aW5nL0luc3RhbmNlc0RlbGV0aW5nUnVsZVwiO1xuXG5jb25zdCBzdHJhbmdlT3B0aW9ucyA9IHsgc3JjOiBcImNoYW5nZVNldFwiLCBkYXRhVmVyc2lvbjogXCIwXCIgfTtcblxuZXhwb3J0IGVudW0gU2VydmVyRXJyb3JzIHtcbiAgICBGdWZTaXplVG9vTGFyZ2UgPSBcIkZ1ZlNpemVUb29MYXJnZVwiLFxuICAgIEJhZFJlcXVlc3QgPSBcIkJhZFJlcXVlc3RcIixcbiAgICBVbmtub3duRXJyb3IgPSBcIlVua25vd25FcnJvclwiLFxufVxuXG5leHBvcnQgY2xhc3MgQ2FuZHlBcGlDbGllbnQgaW1wbGVtZW50cyBJQ2FuZHlBcGlDbGllbnQge1xuICAgIHByaXZhdGUgcmVhZG9ubHkgaHR0cENsaWVudDogSUh0dHBDbGllbnQ7XG5cbiAgICBwdWJsaWMgY29uc3RydWN0b3IoXG4gICAgICAgIGZldGNoSW1wbDogRmV0Y2gsXG4gICAgICAgIGJhc2VVcmw6IHN0cmluZyxcbiAgICAgICAgcmVzb3VyY2Vab25lOiB1bmRlZmluZWQgfCBzdHJpbmcsXG4gICAgICAgIGF1dGhlbnRpY2F0aW9uOiB1bmRlZmluZWQgfCBBdXRoZW50aWNhdGlvbk1vZGVcbiAgICApIHtcbiAgICAgICAgdGhpcy5odHRwQ2xpZW50ID0gbmV3IEh0dHBDbGllbnQoZmV0Y2hJbXBsLCBiYXNlVXJsLCBjcmVhdGVBdXRoZW50aWNhdGlvblByb3ZpZGVyKGF1dGhlbnRpY2F0aW9uKSwge1xuICAgICAgICAgICAgcmVzb3VyY2Vab25lOiByZXNvdXJjZVpvbmUsXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBmb3JEcmFmdChkcmFmdEZ1bGxJZDogRHJhZnRGdWxsSWQpOiBJQ2FuZHlBcGlEcmFmdENsaWVudCB7XG4gICAgICAgIHJldHVybiBuZXcgQ2FuZHlBcGlEcmFmdENsaWVudCh0aGlzLmh0dHBDbGllbnQsIGRyYWZ0RnVsbElkKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgY3JlYXRlRGlnZXN0QXBpQ2xpZW50KGRyYWZ0RnVsbElkOiBEcmFmdEZ1bGxJZCk6IElEaWdlc3RBcGlDbGllbnQge1xuICAgICAgICByZXR1cm4gbmV3IERpZ2VzdEFwaUNsaWVudCh0aGlzLmh0dHBDbGllbnQsIGRyYWZ0RnVsbElkKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZ2V0SW5mb0J5SW5ucyhkcmFmdEZ1bGxJZDogRHJhZnRGdWxsSWQsIGlubnM6IHJlYWRvbmx5IHN0cmluZ1tdKTogUHJvbWlzZTxHZXRCeUlublJlc3BvbnNlPiB7XG4gICAgICAgIGNvbnN0IHBhdGhzID0gaW5ucy5tYXAoaW5uID0+IGBAZm9jdXMvJHtpbm59YCk7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5odHRwQ2xpZW50XG4gICAgICAgICAgICAucG9zdCh0aGlzLmdldERyYWZ0VXJsKGRyYWZ0RnVsbElkLCBcImdldC1pbm5lclwiKSlcbiAgICAgICAgICAgIC53aXRoSnNvbkJvZHkocGF0aHMpXG4gICAgICAgICAgICAuanNvbjxGb2N1c1NlcnZlclJlc3BvbnNlPigpO1xuICAgICAgICBjb25zdCByZXN1bHQ6IEdldEJ5SW5uUmVzcG9uc2UgPSB7fTtcbiAgICAgICAgZm9yIChjb25zdCBpbm4gb2YgaW5ucykge1xuICAgICAgICAgICAgY29uc3QgaW5uU2VydmVyVmFsdWUgPSByZXNwb25zZVtgQGZvY3VzLyR7aW5ufWBdPy52YWx1ZTtcbiAgICAgICAgICAgIGlmIChpbm5TZXJ2ZXJWYWx1ZSA9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICByZXN1bHRbaW5uXSA9IHtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgICAgZXJyb3I6IFwiU2VydmVyIGRvZXMgbm90IHJldHVybiBpbm4gaW5mb1wiLFxuICAgICAgICAgICAgICAgICAgICBlcnJvckNvZGU6IEZvY3VzU2VydmVyRXJyb3JDb2RlLk5vSW5uRXJyb3IsXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0W2lubl0gPSB7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiBpbm5TZXJ2ZXJWYWx1ZS52YWx1ZSA/PyB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICAgIGVycm9yQ29kZTogaW5uU2VydmVyVmFsdWUuZXJyb3JDb2RlID8/IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgICAgZXJyb3I6IGlublNlcnZlclZhbHVlLmVycm9yID8/IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGdldEFsbEdmdnMoYWJvcnRTaWduYWw/OiBBYm9ydFNpZ25hbCk6IFByb21pc2U8c3RyaW5nW10+IHtcbiAgICAgICAgY29uc3QgYm9keSA9IGF3YWl0IHRoaXMuaHR0cENsaWVudC5nZXQoYGJ1aWxkLXNlcnZlci9nZnZzYCkuanNvbjxzdHJpbmdbXT4oKTtcbiAgICAgICAgcmV0dXJuIGJvZHk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGNyZWF0ZURyYWZ0RnJvbURyaXZlKFxuICAgICAgICBuczogc3RyaW5nLFxuICAgICAgICBmdWZEcml2ZVVyaTogc3RyaW5nLFxuICAgICAgICBhYm9ydFNpZ25hbD86IEFib3J0U2lnbmFsXG4gICAgKTogUHJvbWlzZTxDcmVhdGVEcmFmdFJlc3BvbnNlPiB7XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmh0dHBDbGllbnRcbiAgICAgICAgICAgIC5wb3N0KGB2MS9ucy8ke25zfS9jcmVhdGUtZHJhZnQtZnJvbS1kcml2ZWApXG4gICAgICAgICAgICAud2l0aFF1ZXJ5UGFyYW1zKHtcbiAgICAgICAgICAgICAgICBuczogbnMsXG4gICAgICAgICAgICAgICAgZnVmRHJpdmVVcmk6IGZ1ZkRyaXZlVXJpLFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC53aXRoQWJvcnRTaWduYWwoYWJvcnRTaWduYWwpXG4gICAgICAgICAgICAuanNvbjxDcmVhdGVEcmFmdFJlc3BvbnNlPigpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBjcmVhdGVFbXB0eURyYWZ0KG5zOiBzdHJpbmcsIGdmdjogc3RyaW5nLCBhYm9ydFNpZ25hbD86IEFib3J0U2lnbmFsKTogUHJvbWlzZTxDcmVhdGVEcmFmdFJlc3BvbnNlPiB7XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmh0dHBDbGllbnRcbiAgICAgICAgICAgIC5wb3N0KGB2MS9ucy8ke25zfS9jcmVhdGUtZHJhZnRgKVxuICAgICAgICAgICAgLndpdGhRdWVyeVBhcmFtcyh7IGdmdjogZ2Z2IH0pXG4gICAgICAgICAgICAud2l0aEFib3J0U2lnbmFsKGFib3J0U2lnbmFsKVxuICAgICAgICAgICAgLmpzb248Q3JlYXRlRHJhZnRSZXNwb25zZT4oKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgY3JlYXRlRHJhZnQobnM6IHN0cmluZywgZ2Z2OiBzdHJpbmcpOiBQcm9taXNlPENyZWF0ZURyYWZ0UmVzcG9uc2U+O1xuICAgIHB1YmxpYyBjcmVhdGVEcmFmdChuczogc3RyaW5nLCBnZnY6IHVuZGVmaW5lZCwgZnVmQ29udGVudDogQnVmZmVyKTogUHJvbWlzZTxDcmVhdGVEcmFmdFJlc3BvbnNlPjtcbiAgICBwdWJsaWMgYXN5bmMgY3JlYXRlRHJhZnQobnM6IHN0cmluZywgZ2Z2OiB1bmRlZmluZWQgfCBzdHJpbmcsIGZ1ZkNvbnRlbnQ/OiBCdWZmZXIpOiBQcm9taXNlPENyZWF0ZURyYWZ0UmVzcG9uc2U+IHtcbiAgICAgICAgaWYgKGdmdiA9PSB1bmRlZmluZWQgJiYgZnVmQ29udGVudCAhPSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmh0dHBDbGllbnRcbiAgICAgICAgICAgICAgICAucG9zdChgdjEvbnMvJHtuc30vY3JlYXRlLWRyYWZ0YClcbiAgICAgICAgICAgICAgICAud2l0aENvbnRlbnRUeXBlKFwiYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtXCIpXG4gICAgICAgICAgICAgICAgLndpdGhCb2R5RnJvbUJ1ZmZlcihmdWZDb250ZW50KVxuICAgICAgICAgICAgICAgIC5qc29uPENyZWF0ZURyYWZ0UmVzcG9uc2U+KCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGdmdiAhPSB1bmRlZmluZWQgJiYgZnVmQ29udGVudCA9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmh0dHBDbGllbnRcbiAgICAgICAgICAgICAgICAucG9zdChgdjEvbnMvJHtuc30vY3JlYXRlLWRyYWZ0YClcbiAgICAgICAgICAgICAgICAud2l0aFF1ZXJ5UGFyYW1zKHsgZ2Z2OiBnZnYgfSlcbiAgICAgICAgICAgICAgICAud2l0aENvbnRlbnRUeXBlKFwiYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtXCIpXG4gICAgICAgICAgICAgICAgLndpdGhCb2R5RnJvbUJ1ZmZlcihCdWZmZXIuZnJvbShbXSkpXG4gICAgICAgICAgICAgICAgLmpzb248Q3JlYXRlRHJhZnRSZXNwb25zZT4oKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZ2Z2ID09IHVuZGVmaW5lZCAmJiBmdWZDb250ZW50ID09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ2Fubm90IGNyZWF0ZSBkcmFmdDogbm8gZ2Z2IGFuZCBubyBmdWYgc3BlY2lmaWVkXCIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmh0dHBDbGllbnRcbiAgICAgICAgICAgIC5wb3N0KGB2MS9ucy8ke25zfS9jcmVhdGUtZHJhZnRgKVxuICAgICAgICAgICAgLndpdGhRdWVyeVBhcmFtcyh7IGdmdjogZ2Z2IH0pXG4gICAgICAgICAgICAud2l0aENvbnRlbnRUeXBlKFwiYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtXCIpXG4gICAgICAgICAgICAud2l0aEJvZHlGcm9tQnVmZmVyKGZ1ZkNvbnRlbnQpXG4gICAgICAgICAgICAuanNvbjxDcmVhdGVEcmFmdFJlc3BvbnNlPigpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBjaGVja0FsaXZlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBhd2FpdCB0aGlzLmh0dHBDbGllbnQuZ2V0KGBfc3RhdHVzL3BpbmdgKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldERyYWZ0VXJsKGRyYWZ0RnVsbElkOiBEcmFmdEZ1bGxJZCwgZHJhZnRSZWxhdGVkVXJsOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gYHYxL25zLyR7ZHJhZnRGdWxsSWQubnN9L2RyYWZ0cy8ke2RyYWZ0RnVsbElkLmRyYWZ0SWR9LyR7ZHJhZnRSZWxhdGVkVXJsfWA7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGdldEZlYXR1cmVGbGFncygpOiBQcm9taXNlPEZlYXR1cmVGbGFnc1Jlc3BvbnNlPiB7XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmh0dHBDbGllbnQuZ2V0KFwidjEvZmVhdHVyZXMvZmxhZ3NcIikuanNvbjxGZWF0dXJlRmxhZ3NSZXNwb25zZT4oKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgc2V0VGVzdENsYXNzaWZpY2F0aW9uKHRlc3RDbGFzc2lmaWNhdGlvbjogVGVzdENsYXNzaWZpY2F0aW9uKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5odHRwQ2xpZW50XG4gICAgICAgICAgICAucG9zdChcIi90ZXN0b25seS9tb2NrLWNsYXNzaWZpY2F0aW9uXCIpXG4gICAgICAgICAgICAud2l0aFJhd0JvZHkoSlNPTi5zdHJpbmdpZnkodGVzdENsYXNzaWZpY2F0aW9uKSk7XG4gICAgICAgIGlmICghKHJlc3BvbnNlLnN0YXR1cyA+PSAyMDAgJiYgcmVzcG9uc2Uuc3RhdHVzIDwgMzAwKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBCYWQgcmVzcG9uc2UuIENvZGUgaXMgJHtyZXNwb25zZS5zdGF0dXN9LmApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIENhbmR5QXBpRHJhZnRDbGllbnQgaW1wbGVtZW50cyBJQ2FuZHlBcGlEcmFmdENsaWVudCB7XG4gICAgcHJpdmF0ZSByZWFkb25seSBodHRwQ2xpZW50OiBJSHR0cENsaWVudDtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGRyYWZ0RnVsbElkOiBEcmFmdEZ1bGxJZDtcblxuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcihodHRwQ2xpZW50OiBJSHR0cENsaWVudCwgZHJhZnRGdWxsSWQ6IERyYWZ0RnVsbElkKSB7XG4gICAgICAgIHRoaXMuaHR0cENsaWVudCA9IGh0dHBDbGllbnQ7XG4gICAgICAgIHRoaXMuZHJhZnRGdWxsSWQgPSBkcmFmdEZ1bGxJZDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0SHJlZlRvSW5uZXJFZGl0b3IoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC51cmwoYGlubmVyLWVkaXRvci9ucy8ke3RoaXMuZHJhZnRGdWxsSWQubnN9L2RyYWZ0cy8ke3RoaXMuZHJhZnRGdWxsSWQuZHJhZnRJZH1gKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0SHJlZkRvd25sb2FkRnVmKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQudXJsKHRoaXMuZ2V0RHJhZnRVcmwoXCJnZXQtZnVmXCIpKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0SHJlZlRvQ29udmVydGF0aW9uTG9nKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQudXJsKHRoaXMuZ2V0RHJhZnRVcmwoXCJjb252ZXJzaW9uXCIpKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0SHJlZlRvRG93bmxvYWRJbm5lckZ1ZigpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRIcmVmRG93bmxvYWREcmFmdFByZXNlbnRhdGlvbihEcmFmdFByZXNlbnRhdGlvblR5cGUuaW5uZXJGdWYpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRIcmVmVG9Eb3dubG9hZENsaWVudEluZm8oKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0SHJlZkRvd25sb2FkRHJhZnRQcmVzZW50YXRpb24oRHJhZnRQcmVzZW50YXRpb25UeXBlLmNsaWVudEluZm8pO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRIcmVmVG9Eb3dubG9hZEZvcm1zQ2xpZW50SW5mbygpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRIcmVmRG93bmxvYWREcmFmdFByZXNlbnRhdGlvbihEcmFmdFByZXNlbnRhdGlvblR5cGUuZm9ybXNDbGllbnRJbmZvKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0SHJlZkRvd25sb2FkSW5uZXIoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0SHJlZkRvd25sb2FkRHJhZnRQcmVzZW50YXRpb24oRHJhZnRQcmVzZW50YXRpb25UeXBlLmlubmVyKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZ2V0RXJyb3JMb2coKTogUHJvbWlzZTxTZXJ2ZXJFcnJvckxvZz4ge1xuICAgICAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LmdldCh0aGlzLmdldERyYWZ0UHJlc2VudGF0aW9uVXJsKERyYWZ0UHJlc2VudGF0aW9uVHlwZS5lcnJvckxvZykpLmpzb248U2VydmVyRXJyb3JMb2c+KCk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGdldEVycm9yTG9nV2l0aENoZWNrU2NlbmFyaW9zKGNoZWNrU2NlbmFyaW9zOiBDaGVja1NjZW5hcmlvVHlwZVtdKTogUHJvbWlzZTxTZXJ2ZXJFcnJvckxvZz4ge1xuICAgICAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50XG4gICAgICAgICAgICAucG9zdCh0aGlzLmdldERyYWZ0VXJsKFwiZXJyb3Jsb2dcIikpXG4gICAgICAgICAgICAud2l0aEpzb25Cb2R5KHsgY2hlY2tTY2VuYXJpb3M6IGNoZWNrU2NlbmFyaW9zIH0pXG4gICAgICAgICAgICAuanNvbjxTZXJ2ZXJFcnJvckxvZz4oKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZ2V0VGFza0J5SWQodGFza0lkOiBzdHJpbmcpOiBQcm9taXNlPFNlcnZlclRhc2sgfCB1bmRlZmluZWQ+IHtcbiAgICAgICAgY29uc3QgdGFza3MgPSBhd2FpdCB0aGlzLmh0dHBDbGllbnRcbiAgICAgICAgICAgIC5wb3N0KHRoaXMuZ2V0RHJhZnRVcmwoXCJnZXQtaW5uZXJcIikpXG4gICAgICAgICAgICAud2l0aEpzb25Cb2R5KFtgQHRhc2svKmBdKVxuICAgICAgICAgICAgLmpzb248R2V0VGFza3NTZXJ2ZXJSZXNwb25zZT4oKTtcbiAgICAgICAgcmV0dXJuIHRhc2tzW2BAdGFzay8ke3Rhc2tJZH1gXT8udmFsdWU7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGdldEFsbFRhc2tzKCk6IFByb21pc2U8U2VydmVyVGFza1tdPiB7XG4gICAgICAgIGNvbnN0IHRhc2tzID0gYXdhaXQgdGhpcy5odHRwQ2xpZW50XG4gICAgICAgICAgICAucG9zdCh0aGlzLmdldERyYWZ0VXJsKFwiZ2V0LWlubmVyXCIpKVxuICAgICAgICAgICAgLndpdGhKc29uQm9keShbYEB0YXNrLypgXSlcbiAgICAgICAgICAgIC5qc29uPEdldFRhc2tzU2VydmVyUmVzcG9uc2U+KCk7XG4gICAgICAgIHJldHVybiBPYmplY3QudmFsdWVzKHRhc2tzKS5tYXAoeCA9PiB4LnZhbHVlKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZW5xdWV1ZVRhc2sodGFza0lkOiBzdHJpbmcsIHRhc2tJbmZvOiBWZXJpZnlBbmRGaXhGbnNSZXF1aXJlbWVudHNUYXNrSW5mbyk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBhd2FpdCB0aGlzLmh0dHBDbGllbnRcbiAgICAgICAgICAgIC5wb3N0KHRoaXMuZ2V0RHJhZnRQcmVzZW50YXRpb25VcmwoRHJhZnRQcmVzZW50YXRpb25UeXBlLmlubmVyKSlcbiAgICAgICAgICAgIC53aXRoUXVlcnlQYXJhbXMoc3RyYW5nZU9wdGlvbnMpXG4gICAgICAgICAgICAud2l0aEpzb25Cb2R5KHtcbiAgICAgICAgICAgICAgICBhZGRlZDogW10sXG4gICAgICAgICAgICAgICAgY2hhbmdlZDoge1xuICAgICAgICAgICAgICAgICAgICBbYEB0YXNrLyR7dGFza0lkfWBdOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAuLi50YXNrSW5mbyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkOiB0YXNrSWQsXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICByZW1vdmVkOiBbXSxcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBjYW5jZWxUYXNrKHRhc2tJZDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGF3YWl0IHRoaXMuaHR0cENsaWVudFxuICAgICAgICAgICAgLnBvc3QodGhpcy5nZXREcmFmdFByZXNlbnRhdGlvblVybChEcmFmdFByZXNlbnRhdGlvblR5cGUuaW5uZXIpKVxuICAgICAgICAgICAgLndpdGhRdWVyeVBhcmFtcyhzdHJhbmdlT3B0aW9ucylcbiAgICAgICAgICAgIC53aXRoSnNvbkJvZHkoe1xuICAgICAgICAgICAgICAgIGFkZGVkOiBbXSxcbiAgICAgICAgICAgICAgICBjaGFuZ2VkOiB7fSxcbiAgICAgICAgICAgICAgICByZW1vdmVkOiBbYEB0YXNrLyR7dGFza0lkfWBdLFxuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldEV4cGVydEVycm9yTG9nKCk6IFByb21pc2U8U2VydmVyRXJyb3JMb2c+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudFxuICAgICAgICAgICAgLmdldCh0aGlzLmdldERyYWZ0UHJlc2VudGF0aW9uVXJsKERyYWZ0UHJlc2VudGF0aW9uVHlwZS5lcnJvcmxvZ0V4cGVydCkpXG4gICAgICAgICAgICAuanNvbjxTZXJ2ZXJFcnJvckxvZz4oKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0SHJlZlRvRXJyb3JMb2dQZGYoZXJyb3JMb2dOYW1lOiBzdHJpbmcsIHByb3BzTmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC51cmwodGhpcy5nZXREcmFmdFVybChcInByZXNlbnRhdGlvbnMvZXJyb3JMb2cvcHJpbnRcIiksIHtcbiAgICAgICAgICAgIGVycm9yTG9nTmFtZTogZXJyb3JMb2dOYW1lLFxuICAgICAgICAgICAgcHJvcHNEcml2ZU5hbWU6IHByb3BzTmFtZSxcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGNsZWFyRHJhZnQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGF3YWl0IHRoaXMuaHR0cENsaWVudC5wb3N0KHRoaXMuZ2V0RHJhZnRVcmwoXCJjbGVhclwiKSk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGNvbnZlcnREcmFmdEZyb21QcmV2R2Z2KHsgcHJldkdmdkRyYWZ0SWQsIGdmdiB9OiBDb252ZXJ0RHJhZnRSZXF1ZXN0KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGF3YWl0IHRoaXMuaHR0cENsaWVudC5wb3N0KHRoaXMuZ2V0RHJhZnRVcmwoXCJjb252ZXJ0XCIpKS53aXRoUXVlcnlQYXJhbXMoe1xuICAgICAgICAgICAgaWQ6IHByZXZHZnZEcmFmdElkLFxuICAgICAgICAgICAgZ2Z2OiBnZnYsXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBzZW5kQ2hhbmdlU2V0KGRhdGE6IFNlcnZlckNoYW5nZVNldCwgY3VycmVudERhdGFWZXJzaW9uOiBudW1iZXIpOiBQcm9taXNlPElTZW5kQ2hhbmdlU2V0UmVzdWx0PiB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuaHR0cENsaWVudFxuICAgICAgICAgICAgLnBvc3QodGhpcy5nZXREcmFmdFVybChcImlubmVyXCIpKVxuICAgICAgICAgICAgLndpdGhRdWVyeVBhcmFtcyh7IGRhdGFWZXJzaW9uOiBjdXJyZW50RGF0YVZlcnNpb24gfSlcbiAgICAgICAgICAgIC53aXRoSnNvbkJvZHkoZGF0YSlcbiAgICAgICAgICAgIC5hY2NlcHRDb2RlKDQwOSk7XG5cbiAgICAgICAgY29uc3QgZ2V0U3VjY2Vzc1Jlc3VsdCA9IGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGRhdGFSZXN1bHQgPSBhd2FpdCByZXN1bHQuanNvbjx7IGRhdGFWZXJzaW9uPzogbnVtYmVyIH0+KCk7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIGRhdGFWZXJzaW9uOiBkYXRhUmVzdWx0Py5kYXRhVmVyc2lvbiA/PyByZWplY3QoXCJJbnZhbGlkIGRhdGFWZXJzaW9uIGFmdGVyIGFwcGx5aW5nIGNoYW5nZSBzZXQuXCIpLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfTtcblxuICAgICAgICByZXR1cm4gcmVzdWx0LnN0YXR1cyA9PSAyMDAgPyBhd2FpdCBnZXRTdWNjZXNzUmVzdWx0KCkgOiByZXN1bHQuc3RhdHVzO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZW5kQ2hhbmdlU2V0U3luYyhkYXRhOiBTZXJ2ZXJDaGFuZ2VTZXQsIGN1cnJlbnREYXRhVmVyc2lvbjogbnVtYmVyKTogSVNlbmRDaGFuZ2VTZXRSZXN1bHQge1xuICAgICAgICBjb25zdCByZXN1bHQgPSB0aGlzLmh0dHBDbGllbnQucG9zdFN5bmModGhpcy5nZXREcmFmdFVybChcImlubmVyXCIpLCB7IGRhdGFWZXJzaW9uOiBjdXJyZW50RGF0YVZlcnNpb24gfSwgZGF0YSk7XG5cbiAgICAgICAgY29uc3QgZ2V0U3VjY2Vzc1Jlc3VsdFN5bmMgPSAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBkYXRhUmVzdWx0ID0gcmVzdWx0Lmpzb248eyBkYXRhVmVyc2lvbj86IG51bWJlciB9PigpO1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBkYXRhVmVyc2lvbjogZGF0YVJlc3VsdD8uZGF0YVZlcnNpb24gPz8gcmVqZWN0KFwiSW52YWxpZCBkYXRhVmVyc2lvbiBhZnRlciBhcHBseWluZyBjaGFuZ2Ugc2V0LlwiKSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiByZXN1bHQuc3RhdHVzID09IDIwMCA/IGdldFN1Y2Nlc3NSZXN1bHRTeW5jKCkgOiByZXN1bHQuc3RhdHVzO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBnZXRSZXF1aXNpdGVzKHJlcXVpc2l0ZUxpc3Q6IHJlYWRvbmx5IHN0cmluZ1tdKTogUHJvbWlzZTxTZXJ2ZXJSZXF1aXNpdGVzUmVzcG9uc2U+IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuaHR0cENsaWVudFxuICAgICAgICAgICAgLnBvc3QodGhpcy5nZXREcmFmdFVybChcImdldC1pbm5lclwiKSlcbiAgICAgICAgICAgIC53aXRoSnNvbkJvZHkocmVxdWlzaXRlTGlzdClcbiAgICAgICAgICAgIC5qc29uPFNlcnZlclJlcXVpc2l0ZXNSZXNwb25zZT4oKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZ2V0SW5uZXIocGF0aHM6IHVuZGVmaW5lZCB8IHJlYWRvbmx5IHN0cmluZ1tdKTogUHJvbWlzZTxTZXJ2ZXJJbm5lclJlc3BvbnNlPiB7XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmh0dHBDbGllbnRcbiAgICAgICAgICAgIC5wb3N0KHRoaXMuZ2V0RHJhZnRVcmwoXCJnZXQtaW5uZXJcIikpXG4gICAgICAgICAgICAud2l0aEpzb25Cb2R5KHBhdGhzKVxuICAgICAgICAgICAgLmpzb248U2VydmVySW5uZXJSZXNwb25zZT4oKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0UGFydGlhbElubmVyKHJ1bGVzOiBbXCIqXCJdIHwgc3RyaW5nW10sIG1heEluc3RhbmNlQ291bnQ/OiBudW1iZXIpOiBQcm9taXNlPFNlcnZlcklubmVyUmVzcG9uc2U+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudFxuICAgICAgICAgICAgLnBvc3QodGhpcy5nZXREcmFmdFVybChcImdldC1wYXJ0aWFsLWlubmVyXCIpKVxuICAgICAgICAgICAgLndpdGhRdWVyeVBhcmFtcyhtYXhJbnN0YW5jZUNvdW50ICE9IHVuZGVmaW5lZCAmJiB7IG1heEluc3RhbmNlQ291bnQ6IG1heEluc3RhbmNlQ291bnQudG9TdHJpbmcoKSB9KVxuICAgICAgICAgICAgLndpdGhKc29uQm9keShydWxlcylcbiAgICAgICAgICAgIC5qc29uPFNlcnZlcklubmVyUmVzcG9uc2U+KCk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGdldFBhcnRpYWxJbm5lckFzSnNvblRyZWUoXG4gICAgICAgIHJ1bGVzOiBbXCIqXCJdIHwgc3RyaW5nW10sXG4gICAgICAgIG1heEluc3RhbmNlQ291bnQ/OiBudW1iZXJcbiAgICApOiBQcm9taXNlPFNlcnZlckpzb25SZXNwb25zZT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50XG4gICAgICAgICAgICAucG9zdCh0aGlzLmdldERyYWZ0VXJsKFwiZ2V0LXBhcnRpYWwtaW5uZXJcIikpXG4gICAgICAgICAgICAud2l0aFF1ZXJ5UGFyYW1zKG1heEluc3RhbmNlQ291bnQgIT0gdW5kZWZpbmVkICYmIHsgbWF4SW5zdGFuY2VDb3VudDogbWF4SW5zdGFuY2VDb3VudC50b1N0cmluZygpIH0pXG4gICAgICAgICAgICAud2l0aFF1ZXJ5UGFyYW1zKHsgZm9ybWF0OiBcIkpzb25UcmVlXCIgfSlcbiAgICAgICAgICAgIC53aXRoSnNvbkJvZHkocnVsZXMpXG4gICAgICAgICAgICAuanNvbjxTZXJ2ZXJKc29uUmVzcG9uc2U+KCk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldFJhd1BhcnRpYWxJbm5lckFzSnNvblRyZWUoXG4gICAgICAgIHJ1bGVzOiByZWFkb25seSBzdHJpbmdbXSxcbiAgICAgICAgbWF4SW5zdGFuY2VDb3VudD86IG51bWJlclxuICAgICk6IFByb21pc2U8U2VydmVyUmF3UmVzcG9uc2U+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudFxuICAgICAgICAgICAgLnBvc3QodGhpcy5nZXREcmFmdFVybChcImdldC1wYXJ0aWFsLWlubmVyMlwiKSlcbiAgICAgICAgICAgIC53aXRoUXVlcnlQYXJhbXMobWF4SW5zdGFuY2VDb3VudCAhPSB1bmRlZmluZWQgJiYgeyBtYXhJbnN0YW5jZUNvdW50OiBtYXhJbnN0YW5jZUNvdW50LnRvU3RyaW5nKCkgfSlcbiAgICAgICAgICAgIC53aXRoSnNvbkJvZHkocnVsZXMpXG4gICAgICAgICAgICAuanNvbjxTZXJ2ZXJSYXdSZXNwb25zZT4oKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0RGF0YVZlcnNpb24oKTogUHJvbWlzZTxudW1iZXI+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5nZXQodGhpcy5nZXREcmFmdFVybChcImlubmVyL2dldC1kYXRhLXZlcnNpb25cIikpLmpzb248bnVtYmVyPigpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBnZXRFeHBsYW5hdG9yeU5vdGUoKTogUHJvbWlzZTxDcmVhdGVFeHBsYW5hdG9yeU5vdGVSZXNwb25zZT4ge1xuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5odHRwQ2xpZW50XG4gICAgICAgICAgICAuZ2V0KHRoaXMuZ2V0RHJhZnRQcmVzZW50YXRpb25VcmwoRHJhZnRQcmVzZW50YXRpb25UeXBlLmV4cGxhbmF0b3J5Tm90ZSkpXG4gICAgICAgICAgICAuanNvbjxDcmVhdGVFeHBsYW5hdG9yeU5vdGVSZXNwb25zZT4oKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZ2V0QXR0YWNobWVudEJ5SWQoYXR0YWNobWVudElkOiBzdHJpbmcpOiBQcm9taXNlPEF0dGFjaEluZm8+IHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5odHRwQ2xpZW50XG4gICAgICAgICAgICAucG9zdCh0aGlzLmdldERyYWZ0VXJsKFwiZ2V0LWlubmVyXCIpKVxuICAgICAgICAgICAgLndpdGhKc29uQm9keShbYEBhdHRhY2htZW50LyR7YXR0YWNobWVudElkfWBdKVxuICAgICAgICAgICAgLmpzb248R2V0QXR0YWNobWVudHNSZXNwb25zZT4oKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdFtgQGF0dGFjaG1lbnQvJHthdHRhY2htZW50SWR9YF0/LnZhbHVlID8/IHJlamVjdCgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBnZXRBbGxBdHRhY2htZW50cygpOiBQcm9taXNlPEF0dGFjaEluZm9bXT4ge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLmh0dHBDbGllbnRcbiAgICAgICAgICAgIC5wb3N0KHRoaXMuZ2V0RHJhZnRVcmwoXCJnZXQtaW5uZXJcIikpXG4gICAgICAgICAgICAud2l0aEpzb25Cb2R5KFtgQGF0dGFjaG1lbnQvKmBdKVxuICAgICAgICAgICAgLmpzb248R2V0QXR0YWNobWVudHNSZXNwb25zZT4oKTtcbiAgICAgICAgcmV0dXJuIE9iamVjdC52YWx1ZXMocmVzdWx0KS5tYXAoeCA9PiB4LnZhbHVlKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgcmVtb3ZlQXR0YWNobWVudHMoYXR0YWNobWVudElkczogcmVhZG9ubHkgc3RyaW5nW10pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgYXdhaXQgdGhpcy5odHRwQ2xpZW50XG4gICAgICAgICAgICAucG9zdCh0aGlzLmdldERyYWZ0UHJlc2VudGF0aW9uVXJsKERyYWZ0UHJlc2VudGF0aW9uVHlwZS5pbm5lcikpXG4gICAgICAgICAgICAud2l0aFF1ZXJ5UGFyYW1zKHN0cmFuZ2VPcHRpb25zKVxuICAgICAgICAgICAgLndpdGhKc29uQm9keSh7XG4gICAgICAgICAgICAgICAgYWRkZWQ6IFtdLFxuICAgICAgICAgICAgICAgIGNoYW5nZWQ6IHt9LFxuICAgICAgICAgICAgICAgIHJlbW92ZWQ6IGF0dGFjaG1lbnRJZHMubWFwKGlkID0+IGBAYXR0YWNobWVudC8ke2lkfWApLFxuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGNyZWF0ZU9yVXBkYXRlQXR0YWNobWVudHMoYXR0YWNobWVudHM6IHJlYWRvbmx5IEF0dGFjaEluZm9bXSk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBjb25zdCBjaGFuZ2VkID0ge307XG4gICAgICAgIGZvciAoY29uc3QgYXR0YWNobWVudCBvZiBhdHRhY2htZW50cykge1xuICAgICAgICAgICAgY2hhbmdlZFtgQGF0dGFjaG1lbnQvJHthdHRhY2htZW50LmlkfWBdID0ge1xuICAgICAgICAgICAgICAgIGNvbnRlbnRVcmk6IGF0dGFjaG1lbnQuY29udGVudFVyaSxcbiAgICAgICAgICAgICAgICBpZDogYXR0YWNobWVudC5pZCxcbiAgICAgICAgICAgICAgICBtZXRhOiBhdHRhY2htZW50Lm1ldGEsXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGF3YWl0IHRoaXMuaHR0cENsaWVudFxuICAgICAgICAgICAgLnBvc3QodGhpcy5nZXREcmFmdFByZXNlbnRhdGlvblVybChEcmFmdFByZXNlbnRhdGlvblR5cGUuaW5uZXIpKVxuICAgICAgICAgICAgLndpdGhRdWVyeVBhcmFtcyhzdHJhbmdlT3B0aW9ucylcbiAgICAgICAgICAgIC53aXRoSnNvbkJvZHkoe1xuICAgICAgICAgICAgICAgIGFkZGVkOiBbXSxcbiAgICAgICAgICAgICAgICBjaGFuZ2VkOiBjaGFuZ2VkLFxuICAgICAgICAgICAgICAgIHJlbW92ZWQ6IFtdLFxuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIHNldFByZXNlbnRhdGlvbihwcmVzZW50YXRpb25UeXBlOiBEcmFmdFByZXNlbnRhdGlvblR5cGUsIGNvbnRlbnQ6IHN0cmluZyB8IHVua25vd24pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgbGV0IHJlcXVlc3QgPSB0aGlzLmh0dHBDbGllbnQucHV0KHRoaXMuZ2V0RHJhZnRQcmVzZW50YXRpb25VcmwocHJlc2VudGF0aW9uVHlwZSkpO1xuICAgICAgICBpZiAodHlwZW9mIGNvbnRlbnQgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIHJlcXVlc3QgPSByZXF1ZXN0LndpdGhSYXdCb2R5KGNvbnRlbnQpO1xuICAgICAgICB9IGVsc2UgaWYgKGlzQnVmZmVyKGNvbnRlbnQpKSB7XG4gICAgICAgICAgICByZXF1ZXN0ID0gcmVxdWVzdC53aXRoUmF3Qm9keShjb250ZW50KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlcXVlc3QgPSByZXF1ZXN0LndpdGhKc29uQm9keShjb250ZW50KTtcbiAgICAgICAgfVxuICAgICAgICBhd2FpdCByZXF1ZXN0O1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBwYXRjaFByZXNlbnRhdGlvbihcbiAgICAgICAgcHJlc2VudGF0aW9uVHlwZTogRHJhZnRQcmVzZW50YXRpb25UeXBlLFxuICAgICAgICBwcmVzZW50YXRpb25Db250ZW50OiBQcmVzZW50YXRpb25Db250ZW50XG4gICAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGF3YWl0IHRoaXMuaHR0cENsaWVudC5wYXRjaCh0aGlzLmdldERyYWZ0UHJlc2VudGF0aW9uVXJsKHByZXNlbnRhdGlvblR5cGUpKS53aXRoSnNvbkJvZHkocHJlc2VudGF0aW9uQ29udGVudCk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGdldEZpbGVQcm9wZXJ0aWVzKGRyaXZlVXJpOiBzdHJpbmcpOiBQcm9taXNlPEZpbGVQcm9wZXJ0aWVzIHwgdW5kZWZpbmVkPiB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5odHRwQ2xpZW50XG4gICAgICAgICAgICAuZ2V0KGB2MS9maWxlcy9nZXQtcHJvcGVydGllc2ApXG4gICAgICAgICAgICAud2l0aFF1ZXJ5UGFyYW1zKHsgZHJpdmVVcmk6IGRyaXZlVXJpIH0pXG4gICAgICAgICAgICAuYWNjZXB0Q29kZSg0MDApO1xuICAgICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09PSA0MDApIHtcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGF3YWl0IHJlc3BvbnNlLmpzb248RmlsZVByb3BlcnRpZXM+KCk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIHByZXBhcmVBbmRHZXRGaWxlUHJvcGVydGllcyhkcml2ZVVyaTogc3RyaW5nLCBnZnY6IHN0cmluZyk6IFByb21pc2U8RmlsZVByb3BlcnRpZXMgfCB1bmRlZmluZWQ+IHtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmh0dHBDbGllbnRcbiAgICAgICAgICAgIC5nZXQoYHYxL2ZpbGVzL3ByZXBhcmUtYW5kLWdldC1wcm9wZXJ0aWVzYClcbiAgICAgICAgICAgIC53aXRoUXVlcnlQYXJhbXMoeyBnZnY6IGdmdiwgZHJpdmVVcmk6IGRyaXZlVXJpIH0pXG4gICAgICAgICAgICAuYWNjZXB0Q29kZSg0MTMpO1xuICAgICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09PSA0MDApIHtcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PT0gNDEzKSB7XG4gICAgICAgICAgICBjb25zdCBlcnJvckRhdGEgPSBhd2FpdCByZXNwb25zZS5qc29uPHsgZXJyb3JDb2RlOiBzdHJpbmc7IG1lc3NhZ2U6IHN0cmluZyB9PigpO1xuICAgICAgICAgICAgaWYgKGVycm9yRGF0YS5lcnJvckNvZGUgPT09IFwiRnVmU2l6ZVRvb0xhcmdlXCIpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRnVmU2l6ZVRvb0xhcmdlRXJyb3IoZXJyb3JEYXRhLm1lc3NhZ2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhyb3cgbmV3IEh0dHBFcnJvcihlcnJvckRhdGEubWVzc2FnZSwgcmVzcG9uc2Uuc3RhdHVzKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYXdhaXQgcmVzcG9uc2UuanNvbjxGaWxlUHJvcGVydGllcz4oKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgdXBsb2FkQW5kR2V0RmlsZVByb3BlcnRpZXMoXG4gICAgICAgIGRyaXZlVXJpczogc3RyaW5nW10sXG4gICAgICAgIGdmdjogc3RyaW5nLFxuICAgICAgICBhYm9ydFNpZ25hbD86IEFib3J0U2lnbmFsXG4gICAgKTogUHJvbWlzZTxVcGxvYWRGaWxlUHJvcGVydGllc1Jlc3BvbnNlPiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuaHR0cENsaWVudFxuICAgICAgICAgICAgICAgIC5wb3N0KGB2MS9maWxlcy91cGxvYWQtYW5kLWdldC1wcm9wZXJ0aWVzYClcbiAgICAgICAgICAgICAgICAud2l0aFF1ZXJ5UGFyYW1zKHsgZ2Z2OiBnZnYgfSlcbiAgICAgICAgICAgICAgICAud2l0aEpzb25Cb2R5KGRyaXZlVXJpcylcbiAgICAgICAgICAgICAgICAud2l0aEFib3J0U2lnbmFsKGFib3J0U2lnbmFsKVxuICAgICAgICAgICAgICAgIC5hY2NlcHRDb2RlKDQwMClcbiAgICAgICAgICAgICAgICAuYWNjZXB0Q29kZSg0MTMpO1xuICAgICAgICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyAhPT0gMjAwKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlc3BvbnNlLmpzb248eyBlcnJvckNvZGU6IFNlcnZlckVycm9yczsgbWVzc2FnZTogc3RyaW5nIH0+KCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgc2VydmVyRXJyb3I6IGRhdGEuZXJyb3JDb2RlLCBpbnZhbGlkU291cmNlRHJpdmVDb250ZW50TmFtZXM6IFwiXCIsIHNvdXJjZXNUb3RhbENvdW50OiAwIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBkYXRhID0gYXdhaXQgcmVzcG9uc2UuanNvbjxVcGxvYWRGaWxlUHJvcGVydGllc1Jlc3BvbnNlPigpO1xuICAgICAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgc2VydmVyRXJyb3I6IFNlcnZlckVycm9ycy5Vbmtub3duRXJyb3IsXG4gICAgICAgICAgICAgICAgaW52YWxpZFNvdXJjZURyaXZlQ29udGVudE5hbWVzOiBcIlwiLFxuICAgICAgICAgICAgICAgIHNvdXJjZXNUb3RhbENvdW50OiAwLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBhY2NlcHRUcmFuc2ZlclR5cGUoXG4gICAgICAgIGZ1ZkRyaXZlVXJpOiBzdHJpbmcsXG4gICAgICAgIHRyYW5zZmVyVHlwZTogc3RyaW5nLFxuICAgICAgICBhYm9ydFNpZ25hbD86IEFib3J0U2lnbmFsXG4gICAgKTogUHJvbWlzZTxTZXJ2ZXJFcnJvclJlc3BvbnNlIHwgdW5kZWZpbmVkPiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuaHR0cENsaWVudFxuICAgICAgICAgICAgICAgIC5wb3N0KGB2MS9ucy8ke3RoaXMuZHJhZnRGdWxsSWQubnN9L2RyYWZ0cy8ke3RoaXMuZHJhZnRGdWxsSWQuZHJhZnRJZH0vdHJhbnNmZXIvY29tYmluZWApXG4gICAgICAgICAgICAgICAgLndpdGhRdWVyeVBhcmFtcyh7IGZ1ZkRyaXZlVXJpOiBmdWZEcml2ZVVyaSwgdHlwZUlkOiB0cmFuc2ZlclR5cGUgfSlcbiAgICAgICAgICAgICAgICAud2l0aEFib3J0U2lnbmFsKGFib3J0U2lnbmFsKVxuICAgICAgICAgICAgICAgIC5hY2NlcHRDb2RlKDQwMClcbiAgICAgICAgICAgICAgICAuYWNjZXB0Q29kZSg0MTMpO1xuICAgICAgICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyAhPT0gMjAwKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlc3BvbnNlLmpzb248eyBlcnJvckNvZGU6IFNlcnZlckVycm9yczsgbWVzc2FnZTogc3RyaW5nIH0+KCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgc2VydmVyRXJyb3I6IGRhdGEuZXJyb3JDb2RlIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICByZXR1cm4geyBzZXJ2ZXJFcnJvcjogU2VydmVyRXJyb3JzLlVua25vd25FcnJvciB9O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIHNldEZ1ZkJ5RHJpdmVVcmkoZHJpdmVVcmk6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBhd2FpdCB0aGlzLmh0dHBDbGllbnQucHV0KHRoaXMuZ2V0RHJhZnRVcmwoXCJzZXQtZnVmXCIpKS53aXRoUXVlcnlQYXJhbXMoeyBkcml2ZVVyaTogZHJpdmVVcmkgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGNvbWJpbmVGdWZCeURyaXZlVXJpKFxuICAgICAgICBkcml2ZVVyaTogc3RyaW5nLFxuICAgICAgICBjb21iaW5lTWV0aG9kOiBGdWZDb21iaW5lTWV0aG9kLFxuICAgICAgICBhYm9ydFNpZ25hbD86IEFib3J0U2lnbmFsXG4gICAgKTogUHJvbWlzZTxDb21iaW5lRnVmUmVzdWx0IHwgdW5kZWZpbmVkPiB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5odHRwQ2xpZW50XG4gICAgICAgICAgICAucG9zdCh0aGlzLmdldERyYWZ0VXJsKFwidHJhbnNmZXIvY29tYmluZS13aXRoLWZ1ZlwiKSlcbiAgICAgICAgICAgIC53aXRoUXVlcnlQYXJhbXMoeyBmdWZEcml2ZVVyaTogZHJpdmVVcmksIGNvbWJpbmVNZXRob2Q6IGNvbWJpbmVNZXRob2QgfSlcbiAgICAgICAgICAgIC53aXRoQWJvcnRTaWduYWwoYWJvcnRTaWduYWwpO1xuICAgICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09PSA0MDApIHtcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGF3YWl0IHJlc3BvbnNlLmpzb248Q29tYmluZUZ1ZlJlc3VsdD4oKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgbXVsdGlwbGVDb21iaW5lRnVmQnlEcml2ZVVyaShcbiAgICAgICAgZHJpdmVVcmlzOiBzdHJpbmdbXSxcbiAgICAgICAgY29tYmluZU1ldGhvZDogRnVmQ29tYmluZU1ldGhvZFxuICAgICk6IFByb21pc2U8Q29tYmluZUZ1ZlJlc3VsdCB8IHVuZGVmaW5lZD4ge1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuaHR0cENsaWVudFxuICAgICAgICAgICAgLnBvc3QodGhpcy5nZXREcmFmdFVybChcInRyYW5zZmVyL2NvbWJpbmUtd2l0aC1mdWZzXCIpKVxuICAgICAgICAgICAgLndpdGhRdWVyeVBhcmFtcyh7IGNvbWJpbmVNZXRob2Q6IGNvbWJpbmVNZXRob2QgfSlcbiAgICAgICAgICAgIC53aXRoSnNvbkJvZHkoZHJpdmVVcmlzKTtcbiAgICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PT0gNDAwKSB7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhd2FpdCByZXNwb25zZS5qc29uPENvbWJpbmVGdWZSZXN1bHQ+KCk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIG5vcm1hbGl6ZUJ5UnVsZXMocnVsZXM6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBhd2FpdCB0aGlzLmh0dHBDbGllbnQucG9zdCh0aGlzLmdldERyYWZ0VXJsKFwidGVzdC1ub3JtYWxpemVcIikpLndpdGhKc29uQm9keShydWxlcyk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRIcmVmRG93bmxvYWREcmFmdFByZXNlbnRhdGlvbihwcmVzZW50YXRpb25UeXBlOiBEcmFmdFByZXNlbnRhdGlvblR5cGUpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LnVybCh0aGlzLmdldERyYWZ0UHJlc2VudGF0aW9uVXJsKHByZXNlbnRhdGlvblR5cGUpKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldERyYWZ0VXJsKGRyYWZ0UmVsYXRlZFVybDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIGB2MS9ucy8ke3RoaXMuZHJhZnRGdWxsSWQubnN9L2RyYWZ0cy8ke3RoaXMuZHJhZnRGdWxsSWQuZHJhZnRJZH0vJHtkcmFmdFJlbGF0ZWRVcmx9YDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldERyYWZ0UHJlc2VudGF0aW9uVXJsKHByZXNlbnRhdGlvblR5cGU6IERyYWZ0UHJlc2VudGF0aW9uVHlwZSk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldERyYWZ0VXJsKGBwcmVzZW50YXRpb25zLyR7cHJlc2VudGF0aW9uVHlwZS50b1N0cmluZygpfWApO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBzZXRBbGxDaGVja2JveGVzRm9yMTEzMTAzKGVuYWJsZWQ6IGJvb2xlYW4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgY29uc3QgdXJpID0gdGhpcy5nZXREcmFmdFVybChcImlubmVyL2NoZWNrLWFsbFwiKTtcbiAgICAgICAgYXdhaXQgdGhpcy5odHRwQ2xpZW50LnBhdGNoKHVyaSkud2l0aFF1ZXJ5UGFyYW1zKHsgc2V0RW5hYmxlZDogZW5hYmxlZCB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgc2VhcmNoSW5zdGFuY2VzQnlUZXh0KFxuICAgICAgICB0ZXh0OiBzdHJpbmcsXG4gICAgICAgIHBhdGhzUHJlZml4OiBzdHJpbmcsXG4gICAgICAgIHBhdGhzVG9TZWFyY2g6IHN0cmluZ1tdLFxuICAgICAgICBtYXhJbnN0YW5jZUNvdW50PzogbnVtYmVyXG4gICAgKTogUHJvbWlzZTxzdHJpbmdbXT4ge1xuICAgICAgICBjb25zdCBtYXhJbnN0YW5jZUNvdW50UGFyYW1zID0gbWF4SW5zdGFuY2VDb3VudCAhPSB1bmRlZmluZWQgPyB7IG1heEluc3RhbmNlQ291bnQ6IG1heEluc3RhbmNlQ291bnQgfSA6IHt9O1xuICAgICAgICBjb25zdCBwYXJhbXMgPSB7IHNlYXJjaFN0cmluZzogdGV4dCwgcGF0aHNQcmVmaXg6IHBhdGhzUHJlZml4LCAuLi5tYXhJbnN0YW5jZUNvdW50UGFyYW1zIH07XG4gICAgICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnRcbiAgICAgICAgICAgIC5wb3N0KHRoaXMuZ2V0RHJhZnRVcmwoXCJpbm5lci9zZWFyY2gtYnktc3RyaW5nXCIpKVxuICAgICAgICAgICAgLndpdGhRdWVyeVBhcmFtcyhwYXJhbXMpXG4gICAgICAgICAgICAud2l0aEpzb25Cb2R5KHBhdGhzVG9TZWFyY2gpXG4gICAgICAgICAgICAuanNvbjxzdHJpbmdbXT4oKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgY3VzdG9tTm9ybWFsaXplKFxuICAgICAgICBub3JtYWxpemVySWQ6IHN0cmluZyxcbiAgICAgICAgcGF0aFByZWZpeGVzOiBzdHJpbmdbXSxcbiAgICAgICAgYWJvcnRTaWduYWw/OiBBYm9ydFNpZ25hbFxuICAgICk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBjb25zdCBwYXJhbXMgPSB7IG5vcm1hbGl6ZXJJZDogbm9ybWFsaXplcklkIH07XG4gICAgICAgIGF3YWl0IHRoaXMuaHR0cENsaWVudFxuICAgICAgICAgICAgLnBvc3QodGhpcy5nZXREcmFmdFVybChcImlubmVyL2N1c3RvbS1ub3JtYWxpemVcIikpXG4gICAgICAgICAgICAud2l0aFF1ZXJ5UGFyYW1zKHBhcmFtcylcbiAgICAgICAgICAgIC53aXRoSnNvbkJvZHkocGF0aFByZWZpeGVzKVxuICAgICAgICAgICAgLndpdGhBYm9ydFNpZ25hbChhYm9ydFNpZ25hbCk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGltcG9ydEVtcGxveWVlcyhyZXF1ZXN0OiBJbXBvcnRFbXBsb3llZXNSZXF1ZXN0KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGF3YWl0IHRoaXMuaHR0cENsaWVudC5wYXRjaCh0aGlzLmdldERyYWZ0VXJsKFwic3RhZmZcIikpLndpdGhKc29uQm9keShyZXF1ZXN0KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZGVsZXRlSW5zdGFuY2VzKGRlbGV0aW5nUnVsZXM6IEluc3RhbmNlc0RlbGV0aW5nUnVsZVtdKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGF3YWl0IHRoaXMuaHR0cENsaWVudC5wb3N0KHRoaXMuZ2V0RHJhZnRVcmwoXCJpbm5lci9kZWxldGUtaW5zdGFuY2VzXCIpKS53aXRoSnNvbkJvZHkoZGVsZXRpbmdSdWxlcyk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIHJ1bk1hc3NBY3Rpb24oYWN0aW9uSWQ6IHN0cmluZywgcGFyYW1ldGVycz86IE1hc3NBY3Rpb25QYXJhbWV0ZXJzKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGNvbnN0IHF1ZXJ5UGFyYW1zID0geyBhY3Rpb25JZDogYWN0aW9uSWQgfTtcbiAgICAgICAgYXdhaXQgdGhpcy5odHRwQ2xpZW50XG4gICAgICAgICAgICAucG9zdCh0aGlzLmdldERyYWZ0VXJsKFwiaW5uZXIvbWFzcy1hY3Rpb25cIikpXG4gICAgICAgICAgICAud2l0aFF1ZXJ5UGFyYW1zKHF1ZXJ5UGFyYW1zKVxuICAgICAgICAgICAgLndpdGhKc29uQm9keShwYXJhbWV0ZXJzKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgcHJpbnQodHlwZTogUHJpbnRUeXBlLCBib2R5Pzogc3RyaW5nW10pOiBQcm9taXNlPFByaW50UmVzcG9uc2U+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudFxuICAgICAgICAgICAgLnBvc3QodGhpcy5nZXREcmFmdFVybChgcHJlc2VudGF0aW9ucy9pbm5lci9wcmludC8ke3R5cGV9YCkpXG4gICAgICAgICAgICAud2l0aEpzb25Cb2R5KGJvZHkpXG4gICAgICAgICAgICAuanNvbjxQcmludFJlc3BvbnNlPigpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBwcmludEV4Y2VsKHBhdGhUb1RhYmxlOiBzdHJpbmcpOiBQcm9taXNlPFByaW50UmVzcG9uc2UgfCB1bmRlZmluZWQ+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5odHRwQ2xpZW50XG4gICAgICAgICAgICAgICAgLnBvc3QodGhpcy5nZXREcmFmdFVybChgcHJlc2VudGF0aW9ucy90YWJsZS9wcmludGApKVxuICAgICAgICAgICAgICAgIC53aXRoUXVlcnlQYXJhbXMoeyBwYXRoVG9UYWJsZTogcGF0aFRvVGFibGUgfSk7XG4gICAgICAgICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09PSAyMDApIHtcbiAgICAgICAgICAgICAgICBjb25zdCB0YWJsZUV4Y2VsID0gcmVzcG9uc2UuanNvbjxQcmludFJlc3BvbnNlPigpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0YWJsZUV4Y2VsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBjaGVja0J5UG9wZCgpOiBQcm9taXNlPENhbmR5UG9wZFByb3RvY29sPiB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5odHRwQ2xpZW50LmdldChcbiAgICAgICAgICAgIGB2MS9ucy8ke3RoaXMuZHJhZnRGdWxsSWQubnN9L2RyYWZ0cy8ke3RoaXMuZHJhZnRGdWxsSWQuZHJhZnRJZH0vY2hlY2tCeVBvcGRgXG4gICAgICAgICk7XG5cbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlLmpzb248Q2FuZHlQb3BkUHJvdG9jb2w+KCk7XG4gICAgfVxufVxuIl19
610
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL0NvbW1vbi9DYW5keUFwaUNsaWVudC9DYW5keUFwaUNsaWVudC50cyJdLCJuYW1lcyI6WyJzdHJhbmdlT3B0aW9ucyIsInNyYyIsImRhdGFWZXJzaW9uIiwiU2VydmVyRXJyb3JzIiwiQ2FuZHlBcGlDbGllbnQiLCJjb25zdHJ1Y3RvciIsImZldGNoSW1wbCIsImJhc2VVcmwiLCJyZXNvdXJjZVpvbmUiLCJhdXRoZW50aWNhdGlvbiIsImh0dHBDbGllbnQiLCJIdHRwQ2xpZW50IiwiZm9yRHJhZnQiLCJkcmFmdEZ1bGxJZCIsIkNhbmR5QXBpRHJhZnRDbGllbnQiLCJjcmVhdGVEaWdlc3RBcGlDbGllbnQiLCJEaWdlc3RBcGlDbGllbnQiLCJnZXRJbmZvQnlJbm5zIiwiaW5ucyIsInBhdGhzIiwibWFwIiwiaW5uIiwicmVzcG9uc2UiLCJwb3N0IiwiZ2V0RHJhZnRVcmwiLCJ3aXRoSnNvbkJvZHkiLCJqc29uIiwicmVzdWx0IiwiaW5uU2VydmVyVmFsdWUiLCJ2YWx1ZSIsInVuZGVmaW5lZCIsImVycm9yIiwiZXJyb3JDb2RlIiwiRm9jdXNTZXJ2ZXJFcnJvckNvZGUiLCJOb0lubkVycm9yIiwiZ2V0QWxsR2Z2cyIsImFib3J0U2lnbmFsIiwiYm9keSIsImdldCIsImNyZWF0ZURyYWZ0RnJvbURyaXZlIiwibnMiLCJmdWZEcml2ZVVyaSIsIndpdGhRdWVyeVBhcmFtcyIsIndpdGhBYm9ydFNpZ25hbCIsImNyZWF0ZUVtcHR5RHJhZnQiLCJnZnYiLCJjcmVhdGVEcmFmdCIsImZ1ZkNvbnRlbnQiLCJ3aXRoQ29udGVudFR5cGUiLCJ3aXRoQm9keUZyb21CdWZmZXIiLCJCdWZmZXIiLCJmcm9tIiwiRXJyb3IiLCJjaGVja0FsaXZlIiwiZHJhZnRSZWxhdGVkVXJsIiwiZHJhZnRJZCIsImdldEZlYXR1cmVGbGFncyIsInNldFRlc3RDbGFzc2lmaWNhdGlvbiIsInRlc3RDbGFzc2lmaWNhdGlvbiIsIndpdGhSYXdCb2R5IiwiSlNPTiIsInN0cmluZ2lmeSIsInN0YXR1cyIsImdldEhyZWZUb0lubmVyRWRpdG9yIiwidXJsIiwiZ2V0SHJlZkRvd25sb2FkRnVmIiwiZ2V0SHJlZlRvQ29udmVydGF0aW9uTG9nIiwiZ2V0SHJlZlRvRG93bmxvYWRJbm5lckZ1ZiIsImdldEhyZWZEb3dubG9hZERyYWZ0UHJlc2VudGF0aW9uIiwiRHJhZnRQcmVzZW50YXRpb25UeXBlIiwiaW5uZXJGdWYiLCJnZXRIcmVmVG9Eb3dubG9hZENsaWVudEluZm8iLCJjbGllbnRJbmZvIiwiZ2V0SHJlZlRvRG93bmxvYWRGb3Jtc0NsaWVudEluZm8iLCJmb3Jtc0NsaWVudEluZm8iLCJnZXRIcmVmRG93bmxvYWRJbm5lciIsImlubmVyIiwiZ2V0RXJyb3JMb2ciLCJnZXREcmFmdFByZXNlbnRhdGlvblVybCIsImVycm9yTG9nIiwiZ2V0RXJyb3JMb2dXaXRoQ2hlY2tTY2VuYXJpb3MiLCJjaGVja1NjZW5hcmlvcyIsImdldFRhc2tCeUlkIiwidGFza0lkIiwidGFza3MiLCJnZXRBbGxUYXNrcyIsIk9iamVjdCIsInZhbHVlcyIsIngiLCJlbnF1ZXVlVGFzayIsInRhc2tJbmZvIiwiYWRkZWQiLCJjaGFuZ2VkIiwiaWQiLCJyZW1vdmVkIiwiY2FuY2VsVGFzayIsImdldEV4cGVydEVycm9yTG9nIiwiZXJyb3Jsb2dFeHBlcnQiLCJnZXRIcmVmVG9FcnJvckxvZ1BkZiIsImVycm9yTG9nTmFtZSIsInByb3BzTmFtZSIsInByb3BzRHJpdmVOYW1lIiwiY2xlYXJEcmFmdCIsImNvbnZlcnREcmFmdEZyb21QcmV2R2Z2IiwicHJldkdmdkRyYWZ0SWQiLCJzZW5kQ2hhbmdlU2V0IiwiZGF0YSIsImN1cnJlbnREYXRhVmVyc2lvbiIsImFjY2VwdENvZGUiLCJnZXRTdWNjZXNzUmVzdWx0IiwiZGF0YVJlc3VsdCIsInNlbmRDaGFuZ2VTZXRTeW5jIiwicG9zdFN5bmMiLCJnZXRTdWNjZXNzUmVzdWx0U3luYyIsImdldFJlcXVpc2l0ZXMiLCJyZXF1aXNpdGVMaXN0IiwiZ2V0SW5uZXIiLCJnZXRQYXJ0aWFsSW5uZXIiLCJydWxlcyIsIm1heEluc3RhbmNlQ291bnQiLCJ0b1N0cmluZyIsImdldFBhcnRpYWxJbm5lckFzSnNvblRyZWUiLCJmb3JtYXQiLCJnZXRSYXdQYXJ0aWFsSW5uZXJBc0pzb25UcmVlIiwiZ2V0RGF0YVZlcnNpb24iLCJnZXRFeHBsYW5hdG9yeU5vdGUiLCJleHBsYW5hdG9yeU5vdGUiLCJnZXRBdHRhY2htZW50QnlJZCIsImF0dGFjaG1lbnRJZCIsImdldEFsbEF0dGFjaG1lbnRzIiwicmVtb3ZlQXR0YWNobWVudHMiLCJhdHRhY2htZW50SWRzIiwiY3JlYXRlT3JVcGRhdGVBdHRhY2htZW50cyIsImF0dGFjaG1lbnRzIiwiYXR0YWNobWVudCIsImNvbnRlbnRVcmkiLCJtZXRhIiwic2V0UHJlc2VudGF0aW9uIiwicHJlc2VudGF0aW9uVHlwZSIsImNvbnRlbnQiLCJyZXF1ZXN0IiwicHV0IiwicGF0Y2hQcmVzZW50YXRpb24iLCJwcmVzZW50YXRpb25Db250ZW50IiwicGF0Y2giLCJnZXRGaWxlUHJvcGVydGllcyIsImRyaXZlVXJpIiwicHJlcGFyZUFuZEdldEZpbGVQcm9wZXJ0aWVzIiwiZXJyb3JEYXRhIiwiRnVmU2l6ZVRvb0xhcmdlRXJyb3IiLCJtZXNzYWdlIiwiSHR0cEVycm9yIiwidXBsb2FkQW5kR2V0RmlsZVByb3BlcnRpZXMiLCJkcml2ZVVyaXMiLCJzZXJ2ZXJFcnJvciIsImludmFsaWRTb3VyY2VEcml2ZUNvbnRlbnROYW1lcyIsInNvdXJjZXNUb3RhbENvdW50IiwiZSIsIlVua25vd25FcnJvciIsImFjY2VwdFRyYW5zZmVyVHlwZSIsInRyYW5zZmVyVHlwZSIsInR5cGVJZCIsInNldEZ1ZkJ5RHJpdmVVcmkiLCJjb21iaW5lRnVmQnlEcml2ZVVyaSIsImNvbWJpbmVNZXRob2QiLCJleGNlbHNUb1BhcnRpYWxGdWZzIiwicGF0aFRvVGFibGUiLCJpbXBvcnRGcm9tUGFydGlhbEZ1ZnNCeVBhdGgiLCJtdWx0aXBsZUNvbWJpbmVGdWZCeURyaXZlVXJpIiwibm9ybWFsaXplQnlSdWxlcyIsInNldEFsbENoZWNrYm94ZXNGb3IxMTMxMDMiLCJlbmFibGVkIiwidXJpIiwic2V0RW5hYmxlZCIsInNlYXJjaEluc3RhbmNlc0J5VGV4dCIsInRleHQiLCJwYXRoc1ByZWZpeCIsInBhdGhzVG9TZWFyY2giLCJtYXhJbnN0YW5jZUNvdW50UGFyYW1zIiwicGFyYW1zIiwic2VhcmNoU3RyaW5nIiwiY3VzdG9tTm9ybWFsaXplIiwibm9ybWFsaXplcklkIiwicGF0aFByZWZpeGVzIiwiaW1wb3J0RW1wbG95ZWVzIiwiZGVsZXRlSW5zdGFuY2VzIiwiZGVsZXRpbmdSdWxlcyIsInJ1bk1hc3NBY3Rpb24iLCJhY3Rpb25JZCIsInBhcmFtZXRlcnMiLCJxdWVyeVBhcmFtcyIsInByaW50IiwidHlwZSIsInByaW50RXhjZWwiLCJ0YWJsZUV4Y2VsIiwiY2hlY2tCeVBvcGQiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBQTs7QUFFQTs7QUFFQTs7QUFpQkE7O0FBRUE7O0FBT0E7O0FBR0E7O0FBRUE7O0FBVUEsTUFBTUEsY0FBYyxHQUFHO0FBQUVDLEVBQUFBLEdBQUcsRUFBRSxXQUFQO0FBQW9CQyxFQUFBQSxXQUFXLEVBQUU7QUFBakMsQ0FBdkI7SUFFWUMsWTs7O1dBQUFBLFk7QUFBQUEsRUFBQUEsWTtBQUFBQSxFQUFBQSxZO0FBQUFBLEVBQUFBLFk7R0FBQUEsWSw0QkFBQUEsWTs7QUFNTCxNQUFNQyxjQUFOLENBQWdEO0FBRzVDQyxFQUFBQSxXQUFXLENBQ2RDLFNBRGMsRUFFZEMsT0FGYyxFQUdkQyxZQUhjLEVBSWRDLGNBSmMsRUFLaEI7QUFBQSxTQVBlQyxVQU9mO0FBQ0UsU0FBS0EsVUFBTCxHQUFrQixJQUFJQyxzQkFBSixDQUFlTCxTQUFmLEVBQTBCQyxPQUExQixFQUFtQyxzREFBNkJFLGNBQTdCLENBQW5DLEVBQWlGO0FBQy9GRCxNQUFBQSxZQUFZLEVBQUVBO0FBRGlGLEtBQWpGLENBQWxCO0FBR0g7O0FBRU1JLEVBQUFBLFFBQVEsQ0FBQ0Ms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SDtBQUNKOztBQUV1QixRQUFYcUssV0FBVyxHQUErQjtBQUNuRCxVQUFNN0ssUUFBUSxHQUFHLE1BQU0sS0FBS1osVUFBTCxDQUFnQjRCLEdBQWhCLENBQ2xCLFNBQVEsS0FBS3pCLFdBQUwsQ0FBaUIyQixFQUFHLFdBQVUsS0FBSzNCLFdBQUwsQ0FBaUIwQyxPQUFRLGNBRDdDLENBQXZCO0FBSUEsV0FBT2pDLFFBQVEsQ0FBQ0ksSUFBVCxFQUFQO0FBQ0g7O0FBOWY0RCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHJlamVjdCB9IGZyb20gXCIuLi9UeXBpbmdVdGlsc1wiO1xuaW1wb3J0IHsgRmV0Y2ggfSBmcm9tIFwiLi4vSHR0cENsaWVudC9GZXRjaEltcGxlbWVudGF0aW9uL0ZldGNoXCI7XG5pbXBvcnQgeyBIdHRwQ2xpZW50LCBIdHRwRXJyb3IgfSBmcm9tIFwiLi4vSHR0cENsaWVudC9IdHRwQ2xpZW50XCI7XG5pbXBvcnQgeyBJSHR0cENsaWVudCB9IGZyb20gXCIuLi9IdHRwQ2xpZW50L0lIdHRwQ2xpZW50XCI7XG5pbXBvcnQgeyBBdXRoZW50aWNhdGlvbk1vZGUsIGNyZWF0ZUF1dGhlbnRpY2F0aW9uUHJvdmlkZXIgfSBmcm9tIFwiLi4vSHR0cENsaWVudC9BdXRoZW50aWNhdGlvbk1vZGVcIjtcblxuaW1wb3J0IHsgQ2hlY2tTY2VuYXJpb1R5cGUsIElDYW5keUFwaUNsaWVudCwgSUNhbmR5QXBpRHJhZnRDbGllbnQsIElTZW5kQ2hhbmdlU2V0UmVzdWx0IH0gZnJvbSBcIi4vSUNhbmR5QXBpQ2xpZW50XCI7XG5pbXBvcnQgeyBTZXJ2ZXJFcnJvckxvZyB9IGZyb20gXCIuL1R5cGVzL0Vycm9yTG9nL1NlcnZlckVycm9yTG9nXCI7XG5pbXBvcnQgeyBTZXJ2ZXJJbm5lclJlc3BvbnNlLCBTZXJ2ZXJKc29uUmVzcG9uc2UgfSBmcm9tIFwiLi9UeXBlcy9HZXRJbm5lci9TZXJ2ZXJJbm5lclJlc3BvbnNlXCI7XG5pbXBvcnQge1xuICAgIEV4Y2Vsc1RvUGFydGlhbEZ1ZnNSZXNwb25zZSxcbiAgICBGaWxlUHJvcGVydGllcyxcbiAgICBJbXBvcnRGcm9tUGFydGlhbEZ1ZnNCeVBhdGhSZXNwb25zZSxcbiAgICBTZXJ2ZXJFcnJvclJlc3BvbnNlLFxuICAgIFVwbG9hZEZpbGVQcm9wZXJ0aWVzUmVzcG9uc2UsXG59IGZyb20gXCIuL1R5cGVzL0RyYWZ0QWN0aW9ucy9GaWxlUHJvcGVydGllc1wiO1xuaW1wb3J0IHsgQ3JlYXRlRHJhZnRSZXNwb25zZSB9IGZyb20gXCIuL1R5cGVzL0NyZWF0ZURyYWZ0L0NyZWF0ZURyYWZ0UmVzcG9uc2VcIjtcbmltcG9ydCB7IENyZWF0ZUV4cGxhbmF0b3J5Tm90ZVJlc3BvbnNlIH0gZnJvbSBcIi4vVHlwZXMvRXhwbGFuYXRvcnlOb3RlL0NyZWF0ZUV4cGxhbmF0b3J5Tm90ZVJlc3BvbnNlXCI7XG5pbXBvcnQgeyBEcmFmdEZ1bGxJZCB9IGZyb20gXCIuL1R5cGVzL0RyYWZ0RnVsbElkXCI7XG5pbXBvcnQgeyBTZXJ2ZXJDaGFuZ2VTZXQgfSBmcm9tIFwiLi9UeXBlcy9DaGFuZ2VTZXQvU2VydmVyQ2hhbmdlU2V0XCI7XG5pbXBvcnQgeyBTZXJ2ZXJUYXNrLCBWZXJpZnlBbmRGaXhGbnNSZXF1aXJlbWVudHNUYXNrSW5mbyB9IGZyb20gXCIuL1R5cGVzL1Rhc2tzL1Rhc2tzXCI7XG5pbXBvcnQgeyBGb2N1c1NlcnZlckVycm9yQ29kZSwgR2V0QnlJbm5SZXNwb25zZSB9IGZyb20gXCIuL1R5cGVzL0ZvY3VzL0ZvY3VzVHlwZXNcIjtcbmltcG9ydCB7IEF0dGFjaEluZm8gfSBmcm9tIFwiLi9UeXBlcy9BdHRhY2htZW50cy9BdHRhY21lbnRzXCI7XG5pbXBvcnQgeyBEcmFmdFByZXNlbnRhdGlvblR5cGUgfSBmcm9tIFwiLi9UeXBlcy9QcmVzZW50YXRpb25zL0RyYWZ0UHJlc2VudGF0aW9uVHlwZVwiO1xuaW1wb3J0IHsgUHJlc2VudGF0aW9uQ29udGVudCB9IGZyb20gXCIuL1R5cGVzL1ByZXNlbnRhdGlvbnMvUHJlc2VudGF0aW9uQ29udGVudFwiO1xuaW1wb3J0IHsgQ29udmVydERyYWZ0UmVxdWVzdCB9IGZyb20gXCIuL1R5cGVzL0RyYWZ0QWN0aW9ucy9Db252ZXJ0RHJhZnRSZXF1ZXN0XCI7XG5pbXBvcnQgeyBHZXRBdHRhY2htZW50c1Jlc3BvbnNlIH0gZnJvbSBcIi4vVHlwZXMvQXR0YWNobWVudHMvR2V0QXR0YWNobWVudHNSZXNwb25zZVwiO1xuaW1wb3J0IHsgRm9jdXNTZXJ2ZXJSZXNwb25zZSB9IGZyb20gXCIuL1R5cGVzL0ZvY3VzL0ZvY3VzU2VydmVyUmVzcG9uc2VcIjtcbmltcG9ydCB7IEdldFRhc2tzU2VydmVyUmVzcG9uc2UgfSBmcm9tIFwiLi9UeXBlcy9UYXNrcy9HZXRUYXNrc1NlcnZlclJlc3BvbnNlXCI7XG5pbXBvcnQgeyBTZXJ2ZXJSZXF1aXNpdGVzUmVzcG9uc2UgfSBmcm9tIFwiLi9UeXBlcy9HZXRJbm5lci9TZXJ2ZXJSZXF1aXNpdGVzUmVzcG9uc2VcIjtcbmltcG9ydCB7IGlzQnVmZmVyIH0gZnJvbSBcIi4vSXNCdWZmZXJcIjtcbmltcG9ydCB7IENvbWJpbmVGdWZSZXN1bHQsIEZ1ZkNvbWJpbmVNZXRob2QgfSBmcm9tIFwiLi9UeXBlcy9EcmFmdEFjdGlvbnMvQ29tYmluZUZ1ZlJlc3VsdFwiO1xuaW1wb3J0IHsgRmVhdHVyZUZsYWdzUmVzcG9uc2UgfSBmcm9tIFwiLi9UeXBlcy9GZWF0dXJlRmxhZ3MvRmVhdHVyZUZsYWdzUmVzcG9uc2VcIjtcbmltcG9ydCB7IERpZ2VzdEFwaUNsaWVudCB9IGZyb20gXCIuL0RpZ2VzdEFwaUNsaWVudC9EaWdlc3RBcGlDbGllbnRcIjtcbmltcG9ydCB7IElEaWdlc3RBcGlDbGllbnQgfSBmcm9tIFwiLi9EaWdlc3RBcGlDbGllbnQvSURpZ2VzdEFwaUNsaWVudFwiO1xuaW1wb3J0IHsgRnVmU2l6ZVRvb0xhcmdlRXJyb3IgfSBmcm9tIFwiLi9UeXBlcy9EcmFmdEFjdGlvbnMvRnVmU2l6ZVRvb0xhcmdlRXJyb3JcIjtcbmltcG9ydCB7IEltcG9ydEVtcGxveWVlc1JlcXVlc3QgfSBmcm9tIFwiLi9UeXBlcy9TdGFmZi9JbXBvcnRFbXBsb3llZXNSZXF1ZXN0XCI7XG5pbXBvcnQgeyBNYXNzQWN0aW9uUGFyYW1ldGVycyB9IGZyb20gXCIuL1R5cGVzL01hc3NBY3Rpb25zL01hc3NBY3Rpb25QYXJhbWV0ZXJzXCI7XG5pbXBvcnQgeyBQcmludFR5cGUgfSBmcm9tIFwiLi9UeXBlcy9QcmludC9QcmludFR5cGVcIjtcbmltcG9ydCB7IFByaW50UmVzcG9uc2UgfSBmcm9tIFwiLi9UeXBlcy9QcmludC9QcmludFJlc3BvbnNlXCI7XG5pbXBvcnQgeyBTZXJ2ZXJSYXdSZXNwb25zZSB9IGZyb20gXCIuL1R5cGVzL0dldElubmVyL1NlcnZlclJhd1Jlc3BvbnNlXCI7XG5pbXBvcnQgeyBUZXN0Q2xhc3NpZmljYXRpb24gfSBmcm9tIFwiLi9UeXBlcy9UZXN0Q2xhc3NpZmljYXRpb25cIjtcbmltcG9ydCB7IENhbmR5UG9wZFByb3RvY29sIH0gZnJvbSBcIi4vVHlwZXMvRXJyb3JMb2cvQ2FuZHlQb3BkUHJvdG9jb2xcIjtcbmltcG9ydCB7IEluc3RhbmNlc0RlbGV0aW5nUnVsZSB9IGZyb20gXCIuL1R5cGVzL0luc3RhbmNlc0RlbGV0aW5nL0luc3RhbmNlc0RlbGV0aW5nUnVsZVwiO1xuXG5jb25zdCBzdHJhbmdlT3B0aW9ucyA9IHsgc3JjOiBcImNoYW5nZVNldFwiLCBkYXRhVmVyc2lvbjogXCIwXCIgfTtcblxuZXhwb3J0IGVudW0gU2VydmVyRXJyb3JzIHtcbiAgICBGdWZTaXplVG9vTGFyZ2UgPSBcIkZ1ZlNpemVUb29MYXJnZVwiLFxuICAgIEJhZFJlcXVlc3QgPSBcIkJhZFJlcXVlc3RcIixcbiAgICBVbmtub3duRXJyb3IgPSBcIlVua25vd25FcnJvclwiLFxufVxuXG5leHBvcnQgY2xhc3MgQ2FuZHlBcGlDbGllbnQgaW1wbGVtZW50cyBJQ2FuZHlBcGlDbGllbnQge1xuICAgIHByaXZhdGUgcmVhZG9ubHkgaHR0cENsaWVudDogSUh0dHBDbGllbnQ7XG5cbiAgICBwdWJsaWMgY29uc3RydWN0b3IoXG4gICAgICAgIGZldGNoSW1wbDogRmV0Y2gsXG4gICAgICAgIGJhc2VVcmw6IHN0cmluZyxcbiAgICAgICAgcmVzb3VyY2Vab25lOiB1bmRlZmluZWQgfCBzdHJpbmcsXG4gICAgICAgIGF1dGhlbnRpY2F0aW9uOiB1bmRlZmluZWQgfCBBdXRoZW50aWNhdGlvbk1vZGVcbiAgICApIHtcbiAgICAgICAgdGhpcy5odHRwQ2xpZW50ID0gbmV3IEh0dHBDbGllbnQoZmV0Y2hJbXBsLCBiYXNlVXJsLCBjcmVhdGVBdXRoZW50aWNhdGlvblByb3ZpZGVyKGF1dGhlbnRpY2F0aW9uKSwge1xuICAgICAgICAgICAgcmVzb3VyY2Vab25lOiByZXNvdXJjZVpvbmUsXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBmb3JEcmFmdChkcmFmdEZ1bGxJZDogRHJhZnRGdWxsSWQpOiBJQ2FuZHlBcGlEcmFmdENsaWVudCB7XG4gICAgICAgIHJldHVybiBuZXcgQ2FuZHlBcGlEcmFmdENsaWVudCh0aGlzLmh0dHBDbGllbnQsIGRyYWZ0RnVsbElkKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgY3JlYXRlRGlnZXN0QXBpQ2xpZW50KGRyYWZ0RnVsbElkOiBEcmFmdEZ1bGxJZCk6IElEaWdlc3RBcGlDbGllbnQge1xuICAgICAgICByZXR1cm4gbmV3IERpZ2VzdEFwaUNsaWVudCh0aGlzLmh0dHBDbGllbnQsIGRyYWZ0RnVsbElkKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZ2V0SW5mb0J5SW5ucyhkcmFmdEZ1bGxJZDogRHJhZnRGdWxsSWQsIGlubnM6IHJlYWRvbmx5IHN0cmluZ1tdKTogUHJvbWlzZTxHZXRCeUlublJlc3BvbnNlPiB7XG4gICAgICAgIGNvbnN0IHBhdGhzID0gaW5ucy5tYXAoaW5uID0+IGBAZm9jdXMvJHtpbm59YCk7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5odHRwQ2xpZW50XG4gICAgICAgICAgICAucG9zdCh0aGlzLmdldERyYWZ0VXJsKGRyYWZ0RnVsbElkLCBcImdldC1pbm5lclwiKSlcbiAgICAgICAgICAgIC53aXRoSnNvbkJvZHkocGF0aHMpXG4gICAgICAgICAgICAuanNvbjxGb2N1c1NlcnZlclJlc3BvbnNlPigpO1xuICAgICAgICBjb25zdCByZXN1bHQ6IEdldEJ5SW5uUmVzcG9uc2UgPSB7fTtcbiAgICAgICAgZm9yIChjb25zdCBpbm4gb2YgaW5ucykge1xuICAgICAgICAgICAgY29uc3QgaW5uU2VydmVyVmFsdWUgPSByZXNwb25zZVtgQGZvY3VzLyR7aW5ufWBdPy52YWx1ZTtcbiAgICAgICAgICAgIGlmIChpbm5TZXJ2ZXJWYWx1ZSA9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICByZXN1bHRbaW5uXSA9IHtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgICAgZXJyb3I6IFwiU2VydmVyIGRvZXMgbm90IHJldHVybiBpbm4gaW5mb1wiLFxuICAgICAgICAgICAgICAgICAgICBlcnJvckNvZGU6IEZvY3VzU2VydmVyRXJyb3JDb2RlLk5vSW5uRXJyb3IsXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0W2lubl0gPSB7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiBpbm5TZXJ2ZXJWYWx1ZS52YWx1ZSA/PyB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICAgIGVycm9yQ29kZTogaW5uU2VydmVyVmFsdWUuZXJyb3JDb2RlID8/IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgICAgZXJyb3I6IGlublNlcnZlclZhbHVlLmVycm9yID8/IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGdldEFsbEdmdnMoYWJvcnRTaWduYWw/OiBBYm9ydFNpZ25hbCk6IFByb21pc2U8c3RyaW5nW10+IHtcbiAgICAgICAgY29uc3QgYm9keSA9IGF3YWl0IHRoaXMuaHR0cENsaWVudC5nZXQoYGJ1aWxkLXNlcnZlci9nZnZzYCkuanNvbjxzdHJpbmdbXT4oKTtcbiAgICAgICAgcmV0dXJuIGJvZHk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGNyZWF0ZURyYWZ0RnJvbURyaXZlKFxuICAgICAgICBuczogc3RyaW5nLFxuICAgICAgICBmdWZEcml2ZVVyaTogc3RyaW5nLFxuICAgICAgICBhYm9ydFNpZ25hbD86IEFib3J0U2lnbmFsXG4gICAgKTogUHJvbWlzZTxDcmVhdGVEcmFmdFJlc3BvbnNlPiB7XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmh0dHBDbGllbnRcbiAgICAgICAgICAgIC5wb3N0KGB2MS9ucy8ke25zfS9jcmVhdGUtZHJhZnQtZnJvbS1kcml2ZWApXG4gICAgICAgICAgICAud2l0aFF1ZXJ5UGFyYW1zKHtcbiAgICAgICAgICAgICAgICBuczogbnMsXG4gICAgICAgICAgICAgICAgZnVmRHJpdmVVcmk6IGZ1ZkRyaXZlVXJpLFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC53aXRoQWJvcnRTaWduYWwoYWJvcnRTaWduYWwpXG4gICAgICAgICAgICAuanNvbjxDcmVhdGVEcmFmdFJlc3BvbnNlPigpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBjcmVhdGVFbXB0eURyYWZ0KG5zOiBzdHJpbmcsIGdmdjogc3RyaW5nLCBhYm9ydFNpZ25hbD86IEFib3J0U2lnbmFsKTogUHJvbWlzZTxDcmVhdGVEcmFmdFJlc3BvbnNlPiB7XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmh0dHBDbGllbnRcbiAgICAgICAgICAgIC5wb3N0KGB2MS9ucy8ke25zfS9jcmVhdGUtZHJhZnRgKVxuICAgICAgICAgICAgLndpdGhRdWVyeVBhcmFtcyh7IGdmdjogZ2Z2IH0pXG4gICAgICAgICAgICAud2l0aEFib3J0U2lnbmFsKGFib3J0U2lnbmFsKVxuICAgICAgICAgICAgLmpzb248Q3JlYXRlRHJhZnRSZXNwb25zZT4oKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgY3JlYXRlRHJhZnQobnM6IHN0cmluZywgZ2Z2OiBzdHJpbmcpOiBQcm9taXNlPENyZWF0ZURyYWZ0UmVzcG9uc2U+O1xuICAgIHB1YmxpYyBjcmVhdGVEcmFmdChuczogc3RyaW5nLCBnZnY6IHVuZGVmaW5lZCwgZnVmQ29udGVudDogQnVmZmVyKTogUHJvbWlzZTxDcmVhdGVEcmFmdFJlc3BvbnNlPjtcbiAgICBwdWJsaWMgYXN5bmMgY3JlYXRlRHJhZnQobnM6IHN0cmluZywgZ2Z2OiB1bmRlZmluZWQgfCBzdHJpbmcsIGZ1ZkNvbnRlbnQ/OiBCdWZmZXIpOiBQcm9taXNlPENyZWF0ZURyYWZ0UmVzcG9uc2U+IHtcbiAgICAgICAgaWYgKGdmdiA9PSB1bmRlZmluZWQgJiYgZnVmQ29udGVudCAhPSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmh0dHBDbGllbnRcbiAgICAgICAgICAgICAgICAucG9zdChgdjEvbnMvJHtuc30vY3JlYXRlLWRyYWZ0YClcbiAgICAgICAgICAgICAgICAud2l0aENvbnRlbnRUeXBlKFwiYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtXCIpXG4gICAgICAgICAgICAgICAgLndpdGhCb2R5RnJvbUJ1ZmZlcihmdWZDb250ZW50KVxuICAgICAgICAgICAgICAgIC5qc29uPENyZWF0ZURyYWZ0UmVzcG9uc2U+KCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGdmdiAhPSB1bmRlZmluZWQgJiYgZnVmQ29udGVudCA9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmh0dHBDbGllbnRcbiAgICAgICAgICAgICAgICAucG9zdChgdjEvbnMvJHtuc30vY3JlYXRlLWRyYWZ0YClcbiAgICAgICAgICAgICAgICAud2l0aFF1ZXJ5UGFyYW1zKHsgZ2Z2OiBnZnYgfSlcbiAgICAgICAgICAgICAgICAud2l0aENvbnRlbnRUeXBlKFwiYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtXCIpXG4gICAgICAgICAgICAgICAgLndpdGhCb2R5RnJvbUJ1ZmZlcihCdWZmZXIuZnJvbShbXSkpXG4gICAgICAgICAgICAgICAgLmpzb248Q3JlYXRlRHJhZnRSZXNwb25zZT4oKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZ2Z2ID09IHVuZGVmaW5lZCAmJiBmdWZDb250ZW50ID09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ2Fubm90IGNyZWF0ZSBkcmFmdDogbm8gZ2Z2IGFuZCBubyBmdWYgc3BlY2lmaWVkXCIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmh0dHBDbGllbnRcbiAgICAgICAgICAgIC5wb3N0KGB2MS9ucy8ke25zfS9jcmVhdGUtZHJhZnRgKVxuICAgICAgICAgICAgLndpdGhRdWVyeVBhcmFtcyh7IGdmdjogZ2Z2IH0pXG4gICAgICAgICAgICAud2l0aENvbnRlbnRUeXBlKFwiYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtXCIpXG4gICAgICAgICAgICAud2l0aEJvZHlGcm9tQnVmZmVyKGZ1ZkNvbnRlbnQpXG4gICAgICAgICAgICAuanNvbjxDcmVhdGVEcmFmdFJlc3BvbnNlPigpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBjaGVja0FsaXZlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBhd2FpdCB0aGlzLmh0dHBDbGllbnQuZ2V0KGBfc3RhdHVzL3BpbmdgKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldERyYWZ0VXJsKGRyYWZ0RnVsbElkOiBEcmFmdEZ1bGxJZCwgZHJhZnRSZWxhdGVkVXJsOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gYHYxL25zLyR7ZHJhZnRGdWxsSWQubnN9L2RyYWZ0cy8ke2RyYWZ0RnVsbElkLmRyYWZ0SWR9LyR7ZHJhZnRSZWxhdGVkVXJsfWA7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGdldEZlYXR1cmVGbGFncygpOiBQcm9taXNlPEZlYXR1cmVGbGFnc1Jlc3BvbnNlPiB7XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmh0dHBDbGllbnQuZ2V0KFwidjEvZmVhdHVyZXMvZmxhZ3NcIikuanNvbjxGZWF0dXJlRmxhZ3NSZXNwb25zZT4oKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgc2V0VGVzdENsYXNzaWZpY2F0aW9uKHRlc3RDbGFzc2lmaWNhdGlvbjogVGVzdENsYXNzaWZpY2F0aW9uKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5odHRwQ2xpZW50XG4gICAgICAgICAgICAucG9zdChcIi90ZXN0b25seS9tb2NrLWNsYXNzaWZpY2F0aW9uXCIpXG4gICAgICAgICAgICAud2l0aFJhd0JvZHkoSlNPTi5zdHJpbmdpZnkodGVzdENsYXNzaWZpY2F0aW9uKSk7XG4gICAgICAgIGlmICghKHJlc3BvbnNlLnN0YXR1cyA+PSAyMDAgJiYgcmVzcG9uc2Uuc3RhdHVzIDwgMzAwKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBCYWQgcmVzcG9uc2UuIENvZGUgaXMgJHtyZXNwb25zZS5zdGF0dXN9LmApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIENhbmR5QXBpRHJhZnRDbGllbnQgaW1wbGVtZW50cyBJQ2FuZHlBcGlEcmFmdENsaWVudCB7XG4gICAgcHJpdmF0ZSByZWFkb25seSBodHRwQ2xpZW50OiBJSHR0cENsaWVudDtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGRyYWZ0RnVsbElkOiBEcmFmdEZ1bGxJZDtcblxuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcihodHRwQ2xpZW50OiBJSHR0cENsaWVudCwgZHJhZnRGdWxsSWQ6IERyYWZ0RnVsbElkKSB7XG4gICAgICAgIHRoaXMuaHR0cENsaWVudCA9IGh0dHBDbGllbnQ7XG4gICAgICAgIHRoaXMuZHJhZnRGdWxsSWQgPSBkcmFmdEZ1bGxJZDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0SHJlZlRvSW5uZXJFZGl0b3IoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC51cmwoYGlubmVyLWVkaXRvci9ucy8ke3RoaXMuZHJhZnRGdWxsSWQubnN9L2RyYWZ0cy8ke3RoaXMuZHJhZnRGdWxsSWQuZHJhZnRJZH1gKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0SHJlZkRvd25sb2FkRnVmKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQudXJsKHRoaXMuZ2V0RHJhZnRVcmwoXCJnZXQtZnVmXCIpKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0SHJlZlRvQ29udmVydGF0aW9uTG9nKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQudXJsKHRoaXMuZ2V0RHJhZnRVcmwoXCJjb252ZXJzaW9uXCIpKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0SHJlZlRvRG93bmxvYWRJbm5lckZ1ZigpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRIcmVmRG93bmxvYWREcmFmdFByZXNlbnRhdGlvbihEcmFmdFByZXNlbnRhdGlvblR5cGUuaW5uZXJGdWYpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRIcmVmVG9Eb3dubG9hZENsaWVudEluZm8oKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0SHJlZkRvd25sb2FkRHJhZnRQcmVzZW50YXRpb24oRHJhZnRQcmVzZW50YXRpb25UeXBlLmNsaWVudEluZm8pO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRIcmVmVG9Eb3dubG9hZEZvcm1zQ2xpZW50SW5mbygpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRIcmVmRG93bmxvYWREcmFmdFByZXNlbnRhdGlvbihEcmFmdFByZXNlbnRhdGlvblR5cGUuZm9ybXNDbGllbnRJbmZvKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0SHJlZkRvd25sb2FkSW5uZXIoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0SHJlZkRvd25sb2FkRHJhZnRQcmVzZW50YXRpb24oRHJhZnRQcmVzZW50YXRpb25UeXBlLmlubmVyKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZ2V0RXJyb3JMb2coKTogUHJvbWlzZTxTZXJ2ZXJFcnJvckxvZz4ge1xuICAgICAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LmdldCh0aGlzLmdldERyYWZ0UHJlc2VudGF0aW9uVXJsKERyYWZ0UHJlc2VudGF0aW9uVHlwZS5lcnJvckxvZykpLmpzb248U2VydmVyRXJyb3JMb2c+KCk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGdldEVycm9yTG9nV2l0aENoZWNrU2NlbmFyaW9zKGNoZWNrU2NlbmFyaW9zOiBDaGVja1NjZW5hcmlvVHlwZVtdKTogUHJvbWlzZTxTZXJ2ZXJFcnJvckxvZz4ge1xuICAgICAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50XG4gICAgICAgICAgICAucG9zdCh0aGlzLmdldERyYWZ0VXJsKFwiZXJyb3Jsb2dcIikpXG4gICAgICAgICAgICAud2l0aEpzb25Cb2R5KHsgY2hlY2tTY2VuYXJpb3M6IGNoZWNrU2NlbmFyaW9zIH0pXG4gICAgICAgICAgICAuanNvbjxTZXJ2ZXJFcnJvckxvZz4oKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZ2V0VGFza0J5SWQodGFza0lkOiBzdHJpbmcpOiBQcm9taXNlPFNlcnZlclRhc2sgfCB1bmRlZmluZWQ+IHtcbiAgICAgICAgY29uc3QgdGFza3MgPSBhd2FpdCB0aGlzLmh0dHBDbGllbnRcbiAgICAgICAgICAgIC5wb3N0KHRoaXMuZ2V0RHJhZnRVcmwoXCJnZXQtaW5uZXJcIikpXG4gICAgICAgICAgICAud2l0aEpzb25Cb2R5KFtgQHRhc2svKmBdKVxuICAgICAgICAgICAgLmpzb248R2V0VGFza3NTZXJ2ZXJSZXNwb25zZT4oKTtcbiAgICAgICAgcmV0dXJuIHRhc2tzW2BAdGFzay8ke3Rhc2tJZH1gXT8udmFsdWU7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGdldEFsbFRhc2tzKCk6IFByb21pc2U8U2VydmVyVGFza1tdPiB7XG4gICAgICAgIGNvbnN0IHRhc2tzID0gYXdhaXQgdGhpcy5odHRwQ2xpZW50XG4gICAgICAgICAgICAucG9zdCh0aGlzLmdldERyYWZ0VXJsKFwiZ2V0LWlubmVyXCIpKVxuICAgICAgICAgICAgLndpdGhKc29uQm9keShbYEB0YXNrLypgXSlcbiAgICAgICAgICAgIC5qc29uPEdldFRhc2tzU2VydmVyUmVzcG9uc2U+KCk7XG4gICAgICAgIHJldHVybiBPYmplY3QudmFsdWVzKHRhc2tzKS5tYXAoeCA9PiB4LnZhbHVlKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZW5xdWV1ZVRhc2sodGFza0lkOiBzdHJpbmcsIHRhc2tJbmZvOiBWZXJpZnlBbmRGaXhGbnNSZXF1aXJlbWVudHNUYXNrSW5mbyk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBhd2FpdCB0aGlzLmh0dHBDbGllbnRcbiAgICAgICAgICAgIC5wb3N0KHRoaXMuZ2V0RHJhZnRQcmVzZW50YXRpb25VcmwoRHJhZnRQcmVzZW50YXRpb25UeXBlLmlubmVyKSlcbiAgICAgICAgICAgIC53aXRoUXVlcnlQYXJhbXMoc3RyYW5nZU9wdGlvbnMpXG4gICAgICAgICAgICAud2l0aEpzb25Cb2R5KHtcbiAgICAgICAgICAgICAgICBhZGRlZDogW10sXG4gICAgICAgICAgICAgICAgY2hhbmdlZDoge1xuICAgICAgICAgICAgICAgICAgICBbYEB0YXNrLyR7dGFza0lkfWBdOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAuLi50YXNrSW5mbyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkOiB0YXNrSWQsXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICByZW1vdmVkOiBbXSxcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBjYW5jZWxUYXNrKHRhc2tJZDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGF3YWl0IHRoaXMuaHR0cENsaWVudFxuICAgICAgICAgICAgLnBvc3QodGhpcy5nZXREcmFmdFByZXNlbnRhdGlvblVybChEcmFmdFByZXNlbnRhdGlvblR5cGUuaW5uZXIpKVxuICAgICAgICAgICAgLndpdGhRdWVyeVBhcmFtcyhzdHJhbmdlT3B0aW9ucylcbiAgICAgICAgICAgIC53aXRoSnNvbkJvZHkoe1xuICAgICAgICAgICAgICAgIGFkZGVkOiBbXSxcbiAgICAgICAgICAgICAgICBjaGFuZ2VkOiB7fSxcbiAgICAgICAgICAgICAgICByZW1vdmVkOiBbYEB0YXNrLyR7dGFza0lkfWBdLFxuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldEV4cGVydEVycm9yTG9nKCk6IFByb21pc2U8U2VydmVyRXJyb3JMb2c+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudFxuICAgICAgICAgICAgLmdldCh0aGlzLmdldERyYWZ0UHJlc2VudGF0aW9uVXJsKERyYWZ0UHJlc2VudGF0aW9uVHlwZS5lcnJvcmxvZ0V4cGVydCkpXG4gICAgICAgICAgICAuanNvbjxTZXJ2ZXJFcnJvckxvZz4oKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0SHJlZlRvRXJyb3JMb2dQZGYoZXJyb3JMb2dOYW1lOiBzdHJpbmcsIHByb3BzTmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC51cmwodGhpcy5nZXREcmFmdFVybChcInByZXNlbnRhdGlvbnMvZXJyb3JMb2cvcHJpbnRcIiksIHtcbiAgICAgICAgICAgIGVycm9yTG9nTmFtZTogZXJyb3JMb2dOYW1lLFxuICAgICAgICAgICAgcHJvcHNEcml2ZU5hbWU6IHByb3BzTmFtZSxcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGNsZWFyRHJhZnQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGF3YWl0IHRoaXMuaHR0cENsaWVudC5wb3N0KHRoaXMuZ2V0RHJhZnRVcmwoXCJjbGVhclwiKSk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGNvbnZlcnREcmFmdEZyb21QcmV2R2Z2KHsgcHJldkdmdkRyYWZ0SWQsIGdmdiB9OiBDb252ZXJ0RHJhZnRSZXF1ZXN0KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGF3YWl0IHRoaXMuaHR0cENsaWVudC5wb3N0KHRoaXMuZ2V0RHJhZnRVcmwoXCJjb252ZXJ0XCIpKS53aXRoUXVlcnlQYXJhbXMoe1xuICAgICAgICAgICAgaWQ6IHByZXZHZnZEcmFmdElkLFxuICAgICAgICAgICAgZ2Z2OiBnZnYsXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBzZW5kQ2hhbmdlU2V0KGRhdGE6IFNlcnZlckNoYW5nZVNldCwgY3VycmVudERhdGFWZXJzaW9uOiBudW1iZXIpOiBQcm9taXNlPElTZW5kQ2hhbmdlU2V0UmVzdWx0PiB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuaHR0cENsaWVudFxuICAgICAgICAgICAgLnBvc3QodGhpcy5nZXREcmFmdFVybChcImlubmVyXCIpKVxuICAgICAgICAgICAgLndpdGhRdWVyeVBhcmFtcyh7IGRhdGFWZXJzaW9uOiBjdXJyZW50RGF0YVZlcnNpb24gfSlcbiAgICAgICAgICAgIC53aXRoSnNvbkJvZHkoZGF0YSlcbiAgICAgICAgICAgIC5hY2NlcHRDb2RlKDQwOSk7XG5cbiAgICAgICAgY29uc3QgZ2V0U3VjY2Vzc1Jlc3VsdCA9IGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGRhdGFSZXN1bHQgPSBhd2FpdCByZXN1bHQuanNvbjx7IGRhdGFWZXJzaW9uPzogbnVtYmVyIH0+KCk7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIGRhdGFWZXJzaW9uOiBkYXRhUmVzdWx0Py5kYXRhVmVyc2lvbiA/PyByZWplY3QoXCJJbnZhbGlkIGRhdGFWZXJzaW9uIGFmdGVyIGFwcGx5aW5nIGNoYW5nZSBzZXQuXCIpLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfTtcblxuICAgICAgICByZXR1cm4gcmVzdWx0LnN0YXR1cyA9PSAyMDAgPyBhd2FpdCBnZXRTdWNjZXNzUmVzdWx0KCkgOiByZXN1bHQuc3RhdHVzO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZW5kQ2hhbmdlU2V0U3luYyhkYXRhOiBTZXJ2ZXJDaGFuZ2VTZXQsIGN1cnJlbnREYXRhVmVyc2lvbjogbnVtYmVyKTogSVNlbmRDaGFuZ2VTZXRSZXN1bHQge1xuICAgICAgICBjb25zdCByZXN1bHQgPSB0aGlzLmh0dHBDbGllbnQucG9zdFN5bmModGhpcy5nZXREcmFmdFVybChcImlubmVyXCIpLCB7IGRhdGFWZXJzaW9uOiBjdXJyZW50RGF0YVZlcnNpb24gfSwgZGF0YSk7XG5cbiAgICAgICAgY29uc3QgZ2V0U3VjY2Vzc1Jlc3VsdFN5bmMgPSAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBkYXRhUmVzdWx0ID0gcmVzdWx0Lmpzb248eyBkYXRhVmVyc2lvbj86IG51bWJlciB9PigpO1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBkYXRhVmVyc2lvbjogZGF0YVJlc3VsdD8uZGF0YVZlcnNpb24gPz8gcmVqZWN0KFwiSW52YWxpZCBkYXRhVmVyc2lvbiBhZnRlciBhcHBseWluZyBjaGFuZ2Ugc2V0LlwiKSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiByZXN1bHQuc3RhdHVzID09IDIwMCA/IGdldFN1Y2Nlc3NSZXN1bHRTeW5jKCkgOiByZXN1bHQuc3RhdHVzO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBnZXRSZXF1aXNpdGVzKHJlcXVpc2l0ZUxpc3Q6IHJlYWRvbmx5IHN0cmluZ1tdKTogUHJvbWlzZTxTZXJ2ZXJSZXF1aXNpdGVzUmVzcG9uc2U+IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuaHR0cENsaWVudFxuICAgICAgICAgICAgLnBvc3QodGhpcy5nZXREcmFmdFVybChcImdldC1pbm5lclwiKSlcbiAgICAgICAgICAgIC53aXRoSnNvbkJvZHkocmVxdWlzaXRlTGlzdClcbiAgICAgICAgICAgIC5qc29uPFNlcnZlclJlcXVpc2l0ZXNSZXNwb25zZT4oKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZ2V0SW5uZXIocGF0aHM6IHVuZGVmaW5lZCB8IHJlYWRvbmx5IHN0cmluZ1tdKTogUHJvbWlzZTxTZXJ2ZXJJbm5lclJlc3BvbnNlPiB7XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmh0dHBDbGllbnRcbiAgICAgICAgICAgIC5wb3N0KHRoaXMuZ2V0RHJhZnRVcmwoXCJnZXQtaW5uZXJcIikpXG4gICAgICAgICAgICAud2l0aEpzb25Cb2R5KHBhdGhzKVxuICAgICAgICAgICAgLmpzb248U2VydmVySW5uZXJSZXNwb25zZT4oKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0UGFydGlhbElubmVyKHJ1bGVzOiBbXCIqXCJdIHwgc3RyaW5nW10sIG1heEluc3RhbmNlQ291bnQ/OiBudW1iZXIpOiBQcm9taXNlPFNlcnZlcklubmVyUmVzcG9uc2U+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudFxuICAgICAgICAgICAgLnBvc3QodGhpcy5nZXREcmFmdFVybChcImdldC1wYXJ0aWFsLWlubmVyXCIpKVxuICAgICAgICAgICAgLndpdGhRdWVyeVBhcmFtcyhtYXhJbnN0YW5jZUNvdW50ICE9IHVuZGVmaW5lZCAmJiB7IG1heEluc3RhbmNlQ291bnQ6IG1heEluc3RhbmNlQ291bnQudG9TdHJpbmcoKSB9KVxuICAgICAgICAgICAgLndpdGhKc29uQm9keShydWxlcylcbiAgICAgICAgICAgIC5qc29uPFNlcnZlcklubmVyUmVzcG9uc2U+KCk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGdldFBhcnRpYWxJbm5lckFzSnNvblRyZWUoXG4gICAgICAgIHJ1bGVzOiBbXCIqXCJdIHwgc3RyaW5nW10sXG4gICAgICAgIG1heEluc3RhbmNlQ291bnQ/OiBudW1iZXJcbiAgICApOiBQcm9taXNlPFNlcnZlckpzb25SZXNwb25zZT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50XG4gICAgICAgICAgICAucG9zdCh0aGlzLmdldERyYWZ0VXJsKFwiZ2V0LXBhcnRpYWwtaW5uZXJcIikpXG4gICAgICAgICAgICAud2l0aFF1ZXJ5UGFyYW1zKG1heEluc3RhbmNlQ291bnQgIT0gdW5kZWZpbmVkICYmIHsgbWF4SW5zdGFuY2VDb3VudDogbWF4SW5zdGFuY2VDb3VudC50b1N0cmluZygpIH0pXG4gICAgICAgICAgICAud2l0aFF1ZXJ5UGFyYW1zKHsgZm9ybWF0OiBcIkpzb25UcmVlXCIgfSlcbiAgICAgICAgICAgIC53aXRoSnNvbkJvZHkocnVsZXMpXG4gICAgICAgICAgICAuanNvbjxTZXJ2ZXJKc29uUmVzcG9uc2U+KCk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldFJhd1BhcnRpYWxJbm5lckFzSnNvblRyZWUoXG4gICAgICAgIHJ1bGVzOiByZWFkb25seSBzdHJpbmdbXSxcbiAgICAgICAgbWF4SW5zdGFuY2VDb3VudD86IG51bWJlclxuICAgICk6IFByb21pc2U8U2VydmVyUmF3UmVzcG9uc2U+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudFxuICAgICAgICAgICAgLnBvc3QodGhpcy5nZXREcmFmdFVybChcImdldC1wYXJ0aWFsLWlubmVyMlwiKSlcbiAgICAgICAgICAgIC53aXRoUXVlcnlQYXJhbXMobWF4SW5zdGFuY2VDb3VudCAhPSB1bmRlZmluZWQgJiYgeyBtYXhJbnN0YW5jZUNvdW50OiBtYXhJbnN0YW5jZUNvdW50LnRvU3RyaW5nKCkgfSlcbiAgICAgICAgICAgIC53aXRoSnNvbkJvZHkocnVsZXMpXG4gICAgICAgICAgICAuanNvbjxTZXJ2ZXJSYXdSZXNwb25zZT4oKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0RGF0YVZlcnNpb24oKTogUHJvbWlzZTxudW1iZXI+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5nZXQodGhpcy5nZXREcmFmdFVybChcImlubmVyL2dldC1kYXRhLXZlcnNpb25cIikpLmpzb248bnVtYmVyPigpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBnZXRFeHBsYW5hdG9yeU5vdGUoKTogUHJvbWlzZTxDcmVhdGVFeHBsYW5hdG9yeU5vdGVSZXNwb25zZT4ge1xuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5odHRwQ2xpZW50XG4gICAgICAgICAgICAuZ2V0KHRoaXMuZ2V0RHJhZnRQcmVzZW50YXRpb25VcmwoRHJhZnRQcmVzZW50YXRpb25UeXBlLmV4cGxhbmF0b3J5Tm90ZSkpXG4gICAgICAgICAgICAuanNvbjxDcmVhdGVFeHBsYW5hdG9yeU5vdGVSZXNwb25zZT4oKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZ2V0QXR0YWNobWVudEJ5SWQoYXR0YWNobWVudElkOiBzdHJpbmcpOiBQcm9taXNlPEF0dGFjaEluZm8+IHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5odHRwQ2xpZW50XG4gICAgICAgICAgICAucG9zdCh0aGlzLmdldERyYWZ0VXJsKFwiZ2V0LWlubmVyXCIpKVxuICAgICAgICAgICAgLndpdGhKc29uQm9keShbYEBhdHRhY2htZW50LyR7YXR0YWNobWVudElkfWBdKVxuICAgICAgICAgICAgLmpzb248R2V0QXR0YWNobWVudHNSZXNwb25zZT4oKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdFtgQGF0dGFjaG1lbnQvJHthdHRhY2htZW50SWR9YF0/LnZhbHVlID8/IHJlamVjdCgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBnZXRBbGxBdHRhY2htZW50cygpOiBQcm9taXNlPEF0dGFjaEluZm9bXT4ge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLmh0dHBDbGllbnRcbiAgICAgICAgICAgIC5wb3N0KHRoaXMuZ2V0RHJhZnRVcmwoXCJnZXQtaW5uZXJcIikpXG4gICAgICAgICAgICAud2l0aEpzb25Cb2R5KFtgQGF0dGFjaG1lbnQvKmBdKVxuICAgICAgICAgICAgLmpzb248R2V0QXR0YWNobWVudHNSZXNwb25zZT4oKTtcbiAgICAgICAgcmV0dXJuIE9iamVjdC52YWx1ZXMocmVzdWx0KS5tYXAoeCA9PiB4LnZhbHVlKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgcmVtb3ZlQXR0YWNobWVudHMoYXR0YWNobWVudElkczogcmVhZG9ubHkgc3RyaW5nW10pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgYXdhaXQgdGhpcy5odHRwQ2xpZW50XG4gICAgICAgICAgICAucG9zdCh0aGlzLmdldERyYWZ0UHJlc2VudGF0aW9uVXJsKERyYWZ0UHJlc2VudGF0aW9uVHlwZS5pbm5lcikpXG4gICAgICAgICAgICAud2l0aFF1ZXJ5UGFyYW1zKHN0cmFuZ2VPcHRpb25zKVxuICAgICAgICAgICAgLndpdGhKc29uQm9keSh7XG4gICAgICAgICAgICAgICAgYWRkZWQ6IFtdLFxuICAgICAgICAgICAgICAgIGNoYW5nZWQ6IHt9LFxuICAgICAgICAgICAgICAgIHJlbW92ZWQ6IGF0dGFjaG1lbnRJZHMubWFwKGlkID0+IGBAYXR0YWNobWVudC8ke2lkfWApLFxuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGNyZWF0ZU9yVXBkYXRlQXR0YWNobWVudHMoYXR0YWNobWVudHM6IHJlYWRvbmx5IEF0dGFjaEluZm9bXSk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBjb25zdCBjaGFuZ2VkID0ge307XG4gICAgICAgIGZvciAoY29uc3QgYXR0YWNobWVudCBvZiBhdHRhY2htZW50cykge1xuICAgICAgICAgICAgY2hhbmdlZFtgQGF0dGFjaG1lbnQvJHthdHRhY2htZW50LmlkfWBdID0ge1xuICAgICAgICAgICAgICAgIGNvbnRlbnRVcmk6IGF0dGFjaG1lbnQuY29udGVudFVyaSxcbiAgICAgICAgICAgICAgICBpZDogYXR0YWNobWVudC5pZCxcbiAgICAgICAgICAgICAgICBtZXRhOiBhdHRhY2htZW50Lm1ldGEsXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGF3YWl0IHRoaXMuaHR0cENsaWVudFxuICAgICAgICAgICAgLnBvc3QodGhpcy5nZXREcmFmdFByZXNlbnRhdGlvblVybChEcmFmdFByZXNlbnRhdGlvblR5cGUuaW5uZXIpKVxuICAgICAgICAgICAgLndpdGhRdWVyeVBhcmFtcyhzdHJhbmdlT3B0aW9ucylcbiAgICAgICAgICAgIC53aXRoSnNvbkJvZHkoe1xuICAgICAgICAgICAgICAgIGFkZGVkOiBbXSxcbiAgICAgICAgICAgICAgICBjaGFuZ2VkOiBjaGFuZ2VkLFxuICAgICAgICAgICAgICAgIHJlbW92ZWQ6IFtdLFxuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIHNldFByZXNlbnRhdGlvbihwcmVzZW50YXRpb25UeXBlOiBEcmFmdFByZXNlbnRhdGlvblR5cGUsIGNvbnRlbnQ6IHN0cmluZyB8IHVua25vd24pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgbGV0IHJlcXVlc3QgPSB0aGlzLmh0dHBDbGllbnQucHV0KHRoaXMuZ2V0RHJhZnRQcmVzZW50YXRpb25VcmwocHJlc2VudGF0aW9uVHlwZSkpO1xuICAgICAgICBpZiAodHlwZW9mIGNvbnRlbnQgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIHJlcXVlc3QgPSByZXF1ZXN0LndpdGhSYXdCb2R5KGNvbnRlbnQpO1xuICAgICAgICB9IGVsc2UgaWYgKGlzQnVmZmVyKGNvbnRlbnQpKSB7XG4gICAgICAgICAgICByZXF1ZXN0ID0gcmVxdWVzdC53aXRoUmF3Qm9keShjb250ZW50KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlcXVlc3QgPSByZXF1ZXN0LndpdGhKc29uQm9keShjb250ZW50KTtcbiAgICAgICAgfVxuICAgICAgICBhd2FpdCByZXF1ZXN0O1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBwYXRjaFByZXNlbnRhdGlvbihcbiAgICAgICAgcHJlc2VudGF0aW9uVHlwZTogRHJhZnRQcmVzZW50YXRpb25UeXBlLFxuICAgICAgICBwcmVzZW50YXRpb25Db250ZW50OiBQcmVzZW50YXRpb25Db250ZW50XG4gICAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGF3YWl0IHRoaXMuaHR0cENsaWVudC5wYXRjaCh0aGlzLmdldERyYWZ0UHJlc2VudGF0aW9uVXJsKHByZXNlbnRhdGlvblR5cGUpKS53aXRoSnNvbkJvZHkocHJlc2VudGF0aW9uQ29udGVudCk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGdldEZpbGVQcm9wZXJ0aWVzKGRyaXZlVXJpOiBzdHJpbmcpOiBQcm9taXNlPEZpbGVQcm9wZXJ0aWVzIHwgdW5kZWZpbmVkPiB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5odHRwQ2xpZW50XG4gICAgICAgICAgICAuZ2V0KGB2MS9maWxlcy9nZXQtcHJvcGVydGllc2ApXG4gICAgICAgICAgICAud2l0aFF1ZXJ5UGFyYW1zKHsgZHJpdmVVcmk6IGRyaXZlVXJpIH0pXG4gICAgICAgICAgICAuYWNjZXB0Q29kZSg0MDApO1xuICAgICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09PSA0MDApIHtcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGF3YWl0IHJlc3BvbnNlLmpzb248RmlsZVByb3BlcnRpZXM+KCk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIHByZXBhcmVBbmRHZXRGaWxlUHJvcGVydGllcyhkcml2ZVVyaTogc3RyaW5nLCBnZnY6IHN0cmluZyk6IFByb21pc2U8RmlsZVByb3BlcnRpZXMgfCB1bmRlZmluZWQ+IHtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmh0dHBDbGllbnRcbiAgICAgICAgICAgIC5nZXQoYHYxL2ZpbGVzL3ByZXBhcmUtYW5kLWdldC1wcm9wZXJ0aWVzYClcbiAgICAgICAgICAgIC53aXRoUXVlcnlQYXJhbXMoeyBnZnY6IGdmdiwgZHJpdmVVcmk6IGRyaXZlVXJpIH0pXG4gICAgICAgICAgICAuYWNjZXB0Q29kZSg0MTMpO1xuICAgICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09PSA0MDApIHtcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PT0gNDEzKSB7XG4gICAgICAgICAgICBjb25zdCBlcnJvckRhdGEgPSBhd2FpdCByZXNwb25zZS5qc29uPHsgZXJyb3JDb2RlOiBzdHJpbmc7IG1lc3NhZ2U6IHN0cmluZyB9PigpO1xuICAgICAgICAgICAgaWYgKGVycm9yRGF0YS5lcnJvckNvZGUgPT09IFwiRnVmU2l6ZVRvb0xhcmdlXCIpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRnVmU2l6ZVRvb0xhcmdlRXJyb3IoZXJyb3JEYXRhLm1lc3NhZ2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhyb3cgbmV3IEh0dHBFcnJvcihlcnJvckRhdGEubWVzc2FnZSwgcmVzcG9uc2Uuc3RhdHVzKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYXdhaXQgcmVzcG9uc2UuanNvbjxGaWxlUHJvcGVydGllcz4oKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgdXBsb2FkQW5kR2V0RmlsZVByb3BlcnRpZXMoXG4gICAgICAgIGRyaXZlVXJpczogc3RyaW5nW10sXG4gICAgICAgIGdmdjogc3RyaW5nLFxuICAgICAgICBhYm9ydFNpZ25hbD86IEFib3J0U2lnbmFsXG4gICAgKTogUHJvbWlzZTxVcGxvYWRGaWxlUHJvcGVydGllc1Jlc3BvbnNlPiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuaHR0cENsaWVudFxuICAgICAgICAgICAgICAgIC5wb3N0KGB2MS9maWxlcy91cGxvYWQtYW5kLWdldC1wcm9wZXJ0aWVzYClcbiAgICAgICAgICAgICAgICAud2l0aFF1ZXJ5UGFyYW1zKHsgZ2Z2OiBnZnYgfSlcbiAgICAgICAgICAgICAgICAud2l0aEpzb25Cb2R5KGRyaXZlVXJpcylcbiAgICAgICAgICAgICAgICAud2l0aEFib3J0U2lnbmFsKGFib3J0U2lnbmFsKVxuICAgICAgICAgICAgICAgIC5hY2NlcHRDb2RlKDQwMClcbiAgICAgICAgICAgICAgICAuYWNjZXB0Q29kZSg0MTMpO1xuICAgICAgICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyAhPT0gMjAwKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlc3BvbnNlLmpzb248eyBlcnJvckNvZGU6IFNlcnZlckVycm9yczsgbWVzc2FnZTogc3RyaW5nIH0+KCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgc2VydmVyRXJyb3I6IGRhdGEuZXJyb3JDb2RlLCBpbnZhbGlkU291cmNlRHJpdmVDb250ZW50TmFtZXM6IFwiXCIsIHNvdXJjZXNUb3RhbENvdW50OiAwIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBkYXRhID0gYXdhaXQgcmVzcG9uc2UuanNvbjxVcGxvYWRGaWxlUHJvcGVydGllc1Jlc3BvbnNlPigpO1xuICAgICAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgc2VydmVyRXJyb3I6IFNlcnZlckVycm9ycy5Vbmtub3duRXJyb3IsXG4gICAgICAgICAgICAgICAgaW52YWxpZFNvdXJjZURyaXZlQ29udGVudE5hbWVzOiBcIlwiLFxuICAgICAgICAgICAgICAgIHNvdXJjZXNUb3RhbENvdW50OiAwLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBhY2NlcHRUcmFuc2ZlclR5cGUoXG4gICAgICAgIGZ1ZkRyaXZlVXJpOiBzdHJpbmcsXG4gICAgICAgIHRyYW5zZmVyVHlwZTogc3RyaW5nLFxuICAgICAgICBhYm9ydFNpZ25hbD86IEFib3J0U2lnbmFsXG4gICAgKTogUHJvbWlzZTxTZXJ2ZXJFcnJvclJlc3BvbnNlIHwgdW5kZWZpbmVkPiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuaHR0cENsaWVudFxuICAgICAgICAgICAgICAgIC5wb3N0KGB2MS9ucy8ke3RoaXMuZHJhZnRGdWxsSWQubnN9L2RyYWZ0cy8ke3RoaXMuZHJhZnRGdWxsSWQuZHJhZnRJZH0vdHJhbnNmZXIvY29tYmluZWApXG4gICAgICAgICAgICAgICAgLndpdGhRdWVyeVBhcmFtcyh7IGZ1ZkRyaXZlVXJpOiBmdWZEcml2ZVVyaSwgdHlwZUlkOiB0cmFuc2ZlclR5cGUgfSlcbiAgICAgICAgICAgICAgICAud2l0aEFib3J0U2lnbmFsKGFib3J0U2lnbmFsKVxuICAgICAgICAgICAgICAgIC5hY2NlcHRDb2RlKDQwMClcbiAgICAgICAgICAgICAgICAuYWNjZXB0Q29kZSg0MTMpO1xuICAgICAgICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyAhPT0gMjAwKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlc3BvbnNlLmpzb248eyBlcnJvckNvZGU6IFNlcnZlckVycm9yczsgbWVzc2FnZTogc3RyaW5nIH0+KCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgc2VydmVyRXJyb3I6IGRhdGEuZXJyb3JDb2RlIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICByZXR1cm4geyBzZXJ2ZXJFcnJvcjogU2VydmVyRXJyb3JzLlVua25vd25FcnJvciB9O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIHNldEZ1ZkJ5RHJpdmVVcmkoZHJpdmVVcmk6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBhd2FpdCB0aGlzLmh0dHBDbGllbnQucHV0KHRoaXMuZ2V0RHJhZnRVcmwoXCJzZXQtZnVmXCIpKS53aXRoUXVlcnlQYXJhbXMoeyBkcml2ZVVyaTogZHJpdmVVcmkgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGNvbWJpbmVGdWZCeURyaXZlVXJpKFxuICAgICAgICBkcml2ZVVyaTogc3RyaW5nLFxuICAgICAgICBjb21iaW5lTWV0aG9kOiBGdWZDb21iaW5lTWV0aG9kLFxuICAgICAgICBhYm9ydFNpZ25hbD86IEFib3J0U2lnbmFsXG4gICAgKTogUHJvbWlzZTxDb21iaW5lRnVmUmVzdWx0IHwgdW5kZWZpbmVkPiB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5odHRwQ2xpZW50XG4gICAgICAgICAgICAucG9zdCh0aGlzLmdldERyYWZ0VXJsKFwidHJhbnNmZXIvY29tYmluZS13aXRoLWZ1ZlwiKSlcbiAgICAgICAgICAgIC53aXRoUXVlcnlQYXJhbXMoeyBmdWZEcml2ZVVyaTogZHJpdmVVcmksIGNvbWJpbmVNZXRob2Q6IGNvbWJpbmVNZXRob2QgfSlcbiAgICAgICAgICAgIC53aXRoQWJvcnRTaWduYWwoYWJvcnRTaWduYWwpO1xuICAgICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09PSA0MDApIHtcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGF3YWl0IHJlc3BvbnNlLmpzb248Q29tYmluZUZ1ZlJlc3VsdD4oKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZXhjZWxzVG9QYXJ0aWFsRnVmcyhcbiAgICAgICAgZ2Z2OiBzdHJpbmcsXG4gICAgICAgIHBhdGhUb1RhYmxlOiBzdHJpbmcsXG4gICAgICAgIGRyaXZlVXJpczogc3RyaW5nW11cbiAgICApOiBQcm9taXNlPEV4Y2Vsc1RvUGFydGlhbEZ1ZnNSZXNwb25zZSB8IHVuZGVmaW5lZD4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmh0dHBDbGllbnRcbiAgICAgICAgICAgICAgICAucG9zdChcInYxL2ZpbGVzL2V4Y2Vscy10by1wYXJ0aWFsLWZ1ZnNcIilcbiAgICAgICAgICAgICAgICAud2l0aFF1ZXJ5UGFyYW1zKHsgZ2Z2OiBnZnYsIHBhdGhUb1RhYmxlOiBwYXRoVG9UYWJsZSB9KVxuICAgICAgICAgICAgICAgIC53aXRoSnNvbkJvZHkoZHJpdmVVcmlzKTtcbiAgICAgICAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgPT09IDIwMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBhd2FpdCByZXNwb25zZS5qc29uPEV4Y2Vsc1RvUGFydGlhbEZ1ZnNSZXNwb25zZT4oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgaW1wb3J0RnJvbVBhcnRpYWxGdWZzQnlQYXRoKFxuICAgICAgICBwYXRoVG9UYWJsZTogc3RyaW5nLFxuICAgICAgICBkcml2ZVVyaTogc3RyaW5nW10sXG4gICAgICAgIGNvbWJpbmVNZXRob2Q6IHN0cmluZ1xuICAgICk6IFByb21pc2U8SW1wb3J0RnJvbVBhcnRpYWxGdWZzQnlQYXRoUmVzcG9uc2UgfCB1bmRlZmluZWQ+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5odHRwQ2xpZW50XG4gICAgICAgICAgICAgICAgLnBvc3QodGhpcy5nZXREcmFmdFVybChcInRyYW5zZmVyL2ltcG9ydC1mcm9tLXBhcnRpYWwtZnVmcy1ieS1wYXRoXCIpKVxuICAgICAgICAgICAgICAgIC53aXRoUXVlcnlQYXJhbXMoe1xuICAgICAgICAgICAgICAgICAgICBwYXRoVG9UYWJsZTogcGF0aFRvVGFibGUsXG4gICAgICAgICAgICAgICAgICAgIGNvbWJpbmVNZXRob2Q6IGNvbWJpbmVNZXRob2QsXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAud2l0aEpzb25Cb2R5KGRyaXZlVXJpKTtcbiAgICAgICAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgPT09IDIwMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBhd2FpdCByZXNwb25zZS5qc29uPEltcG9ydEZyb21QYXJ0aWFsRnVmc0J5UGF0aFJlc3BvbnNlPigpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBtdWx0aXBsZUNvbWJpbmVGdWZCeURyaXZlVXJpKFxuICAgICAgICBkcml2ZVVyaXM6IHN0cmluZ1tdLFxuICAgICAgICBjb21iaW5lTWV0aG9kOiBGdWZDb21iaW5lTWV0aG9kXG4gICAgKTogUHJvbWlzZTxDb21iaW5lRnVmUmVzdWx0IHwgdW5kZWZpbmVkPiB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5odHRwQ2xpZW50XG4gICAgICAgICAgICAucG9zdCh0aGlzLmdldERyYWZ0VXJsKFwidHJhbnNmZXIvY29tYmluZS13aXRoLWZ1ZnNcIikpXG4gICAgICAgICAgICAud2l0aFF1ZXJ5UGFyYW1zKHsgY29tYmluZU1ldGhvZDogY29tYmluZU1ldGhvZCB9KVxuICAgICAgICAgICAgLndpdGhKc29uQm9keShkcml2ZVVyaXMpO1xuICAgICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09PSA0MDApIHtcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGF3YWl0IHJlc3BvbnNlLmpzb248Q29tYmluZUZ1ZlJlc3VsdD4oKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgbm9ybWFsaXplQnlSdWxlcyhydWxlczogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGF3YWl0IHRoaXMuaHR0cENsaWVudC5wb3N0KHRoaXMuZ2V0RHJhZnRVcmwoXCJ0ZXN0LW5vcm1hbGl6ZVwiKSkud2l0aEpzb25Cb2R5KHJ1bGVzKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldEhyZWZEb3dubG9hZERyYWZ0UHJlc2VudGF0aW9uKHByZXNlbnRhdGlvblR5cGU6IERyYWZ0UHJlc2VudGF0aW9uVHlwZSk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQudXJsKHRoaXMuZ2V0RHJhZnRQcmVzZW50YXRpb25VcmwocHJlc2VudGF0aW9uVHlwZSkpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0RHJhZnRVcmwoZHJhZnRSZWxhdGVkVXJsOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gYHYxL25zLyR7dGhpcy5kcmFmdEZ1bGxJZC5uc30vZHJhZnRzLyR7dGhpcy5kcmFmdEZ1bGxJZC5kcmFmdElkfS8ke2RyYWZ0UmVsYXRlZFVybH1gO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0RHJhZnRQcmVzZW50YXRpb25VcmwocHJlc2VudGF0aW9uVHlwZTogRHJhZnRQcmVzZW50YXRpb25UeXBlKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0RHJhZnRVcmwoYHByZXNlbnRhdGlvbnMvJHtwcmVzZW50YXRpb25UeXBlLnRvU3RyaW5nKCl9YCk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIHNldEFsbENoZWNrYm94ZXNGb3IxMTMxMDMoZW5hYmxlZDogYm9vbGVhbik6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBjb25zdCB1cmkgPSB0aGlzLmdldERyYWZ0VXJsKFwiaW5uZXIvY2hlY2stYWxsXCIpO1xuICAgICAgICBhd2FpdCB0aGlzLmh0dHBDbGllbnQucGF0Y2godXJpKS53aXRoUXVlcnlQYXJhbXMoeyBzZXRFbmFibGVkOiBlbmFibGVkIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBzZWFyY2hJbnN0YW5jZXNCeVRleHQoXG4gICAgICAgIHRleHQ6IHN0cmluZyxcbiAgICAgICAgcGF0aHNQcmVmaXg6IHN0cmluZyxcbiAgICAgICAgcGF0aHNUb1NlYXJjaDogc3RyaW5nW10sXG4gICAgICAgIG1heEluc3RhbmNlQ291bnQ/OiBudW1iZXJcbiAgICApOiBQcm9taXNlPHN0cmluZ1tdPiB7XG4gICAgICAgIGNvbnN0IG1heEluc3RhbmNlQ291bnRQYXJhbXMgPSBtYXhJbnN0YW5jZUNvdW50ICE9IHVuZGVmaW5lZCA/IHsgbWF4SW5zdGFuY2VDb3VudDogbWF4SW5zdGFuY2VDb3VudCB9IDoge307XG4gICAgICAgIGNvbnN0IHBhcmFtcyA9IHsgc2VhcmNoU3RyaW5nOiB0ZXh0LCBwYXRoc1ByZWZpeDogcGF0aHNQcmVmaXgsIC4uLm1heEluc3RhbmNlQ291bnRQYXJhbXMgfTtcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudFxuICAgICAgICAgICAgLnBvc3QodGhpcy5nZXREcmFmdFVybChcImlubmVyL3NlYXJjaC1ieS1zdHJpbmdcIikpXG4gICAgICAgICAgICAud2l0aFF1ZXJ5UGFyYW1zKHBhcmFtcylcbiAgICAgICAgICAgIC53aXRoSnNvbkJvZHkocGF0aHNUb1NlYXJjaClcbiAgICAgICAgICAgIC5qc29uPHN0cmluZ1tdPigpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBjdXN0b21Ob3JtYWxpemUoXG4gICAgICAgIG5vcm1hbGl6ZXJJZDogc3RyaW5nLFxuICAgICAgICBwYXRoUHJlZml4ZXM6IHN0cmluZ1tdLFxuICAgICAgICBhYm9ydFNpZ25hbD86IEFib3J0U2lnbmFsXG4gICAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGNvbnN0IHBhcmFtcyA9IHsgbm9ybWFsaXplcklkOiBub3JtYWxpemVySWQgfTtcbiAgICAgICAgYXdhaXQgdGhpcy5odHRwQ2xpZW50XG4gICAgICAgICAgICAucG9zdCh0aGlzLmdldERyYWZ0VXJsKFwiaW5uZXIvY3VzdG9tLW5vcm1hbGl6ZVwiKSlcbiAgICAgICAgICAgIC53aXRoUXVlcnlQYXJhbXMocGFyYW1zKVxuICAgICAgICAgICAgLndpdGhKc29uQm9keShwYXRoUHJlZml4ZXMpXG4gICAgICAgICAgICAud2l0aEFib3J0U2lnbmFsKGFib3J0U2lnbmFsKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgaW1wb3J0RW1wbG95ZWVzKHJlcXVlc3Q6IEltcG9ydEVtcGxveWVlc1JlcXVlc3QpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgYXdhaXQgdGhpcy5odHRwQ2xpZW50LnBhdGNoKHRoaXMuZ2V0RHJhZnRVcmwoXCJzdGFmZlwiKSkud2l0aEpzb25Cb2R5KHJlcXVlc3QpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBkZWxldGVJbnN0YW5jZXMoZGVsZXRpbmdSdWxlczogSW5zdGFuY2VzRGVsZXRpbmdSdWxlW10pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgYXdhaXQgdGhpcy5odHRwQ2xpZW50LnBvc3QodGhpcy5nZXREcmFmdFVybChcImlubmVyL2RlbGV0ZS1pbnN0YW5jZXNcIikpLndpdGhKc29uQm9keShkZWxldGluZ1J1bGVzKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgcnVuTWFzc0FjdGlvbihhY3Rpb25JZDogc3RyaW5nLCBwYXJhbWV0ZXJzPzogTWFzc0FjdGlvblBhcmFtZXRlcnMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgY29uc3QgcXVlcnlQYXJhbXMgPSB7IGFjdGlvbklkOiBhY3Rpb25JZCB9O1xuICAgICAgICBhd2FpdCB0aGlzLmh0dHBDbGllbnRcbiAgICAgICAgICAgIC5wb3N0KHRoaXMuZ2V0RHJhZnRVcmwoXCJpbm5lci9tYXNzLWFjdGlvblwiKSlcbiAgICAgICAgICAgIC53aXRoUXVlcnlQYXJhbXMocXVlcnlQYXJhbXMpXG4gICAgICAgICAgICAud2l0aEpzb25Cb2R5KHBhcmFtZXRlcnMpO1xuICAgIH1cblxuICAgIHB1YmxpYyBwcmludCh0eXBlOiBQcmludFR5cGUsIGJvZHk/OiBzdHJpbmdbXSk6IFByb21pc2U8UHJpbnRSZXNwb25zZT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50XG4gICAgICAgICAgICAucG9zdCh0aGlzLmdldERyYWZ0VXJsKGBwcmVzZW50YXRpb25zL2lubmVyL3ByaW50LyR7dHlwZX1gKSlcbiAgICAgICAgICAgIC53aXRoSnNvbkJvZHkoYm9keSlcbiAgICAgICAgICAgIC5qc29uPFByaW50UmVzcG9uc2U+KCk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIHByaW50RXhjZWwocGF0aFRvVGFibGU6IHN0cmluZyk6IFByb21pc2U8UHJpbnRSZXNwb25zZSB8IHVuZGVmaW5lZD4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmh0dHBDbGllbnRcbiAgICAgICAgICAgICAgICAucG9zdCh0aGlzLmdldERyYWZ0VXJsKGBwcmVzZW50YXRpb25zL3RhYmxlL3ByaW50YCkpXG4gICAgICAgICAgICAgICAgLndpdGhRdWVyeVBhcmFtcyh7IHBhdGhUb1RhYmxlOiBwYXRoVG9UYWJsZSB9KTtcbiAgICAgICAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgPT09IDIwMCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHRhYmxlRXhjZWwgPSByZXNwb25zZS5qc29uPFByaW50UmVzcG9uc2U+KCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRhYmxlRXhjZWw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGNoZWNrQnlQb3BkKCk6IFByb21pc2U8Q2FuZHlQb3BkUHJvdG9jb2w+IHtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmh0dHBDbGllbnQuZ2V0KFxuICAgICAgICAgICAgYHYxL25zLyR7dGhpcy5kcmFmdEZ1bGxJZC5uc30vZHJhZnRzLyR7dGhpcy5kcmFmdEZ1bGxJZC5kcmFmdElkfS9jaGVja0J5UG9wZGBcbiAgICAgICAgKTtcblxuICAgICAgICByZXR1cm4gcmVzcG9uc2UuanNvbjxDYW5keVBvcGRQcm90b2NvbD4oKTtcbiAgICB9XG59XG4iXX0=
@@ -270,6 +270,14 @@ class FakeCandyApiDraftClient {
270
270
  throw new _Errors.NotImplementedError();
271
271
  }
272
272
 
273
+ excelsToPartialFufs(gfv, pathToTable, driveUris) {
274
+ throw new _Errors.NotImplementedError();
275
+ }
276
+
277
+ importFromPartialFufsByPath(pathToTable, driveUri, combineMethod) {
278
+ throw new _Errors.NotImplementedError();
279
+ }
280
+
273
281
  checkByPopd() {
274
282
  throw new _Errors.NotImplementedError();
275
283
  }
@@ -277,4 +285,4 @@ class FakeCandyApiDraftClient {
277
285
  }
278
286
 
279
287
  exports.FakeCandyApiDraftClient = FakeCandyApiDraftClient;
280
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL0NvbW1vbi9DYW5keUFwaUNsaWVudC9GYWtlQ2FuZHlBcGlDbGllbnQudHMiXSwibmFtZXMiOlsiRmFrZUNhbmR5QXBpQ2xpZW50IiwiZGlnZXN0Q2xpZW50IiwiRmFrZURpZ2VzdEFwaUNsaWVudCIsImNyZWF0ZURpZ2VzdEFwaUNsaWVudCIsImRyYWZ0RnVsbElkIiwiY3JlYXRlUGlja2xpc3QiLCJnSWQiLCJkYXRhIiwiZ2V0QWxsR2Z2cyIsImFib3J0U2lnbmFsIiwiUHJvbWlzZSIsInJlc29sdmUiLCJjaGVja0FsaXZlIiwidW5kZWZpbmVkIiwiY3JlYXRlRHJhZnQiLCJucyIsImdmdiIsImJvZHkiLCJOb3RJbXBsZW1lbnRlZEVycm9yIiwiZm9yRHJhZnQiLCJGYWtlQ2FuZHlBcGlEcmFmdENsaWVudCIsImNyZWF0ZURyYWZ0RnJvbURyaXZlIiwiZnVmRHJpdmVVcmkiLCJjcmVhdGVFbXB0eURyYWZ0IiwiZ2V0SW5mb0J5SW5ucyIsImlubnMiLCJnZXRGZWF0dXJlRmxhZ3NXaXRob3V0UHJvbWlzZSIsImZlYXR1cmVGbGFncyIsImdldEZlYXR1cmVGbGFncyIsInJlc3BvbnNlIiwiY2FuZHlUZXN0RmVhdHVyZSIsInNldFRlc3RDbGFzc2lmaWNhdGlvbiIsInRlc3RDbGFzc2lmaWNhdGlvbiIsImRlbGV0ZUluc3RhbmNlcyIsImRlbGV0aW5nUnVsZXMiLCJpbXBvcnRFbXBsb3llZXMiLCJyZXF1ZXN0IiwicnVuTWFzc0FjdGlvbiIsImFjdGlvbklkIiwicGFyYW1ldGVycyIsImFjY2VwdFRyYW5zZmVyVHlwZSIsInRyYW5zZmVyVHlwZSIsImNhbmNlbFRhc2siLCJ0YXNrSWQiLCJjbGVhckRyYWZ0IiwiY29udmVydERyYWZ0RnJvbVByZXZHZnYiLCJjcmVhdGVPclVwZGF0ZUF0dGFjaG1lbnRzIiwiYXR0YWNobWVudHMiLCJlbnF1ZXVlVGFzayIsInRhc2tJbmZvIiwiZ2V0QWxsQXR0YWNobWVudHMiLCJnZXRBbGxUYXNrcyIsImdldEF0dGFjaG1lbnRCeUlkIiwiYXR0YWNobWVudElkIiwiZ2V0RXJyb3JMb2ciLCJnZXRFcnJvckxvZ1dpdGhDaGVja1NjZW5hcmlvcyIsImNoZWNrU2NlbmFyaW9zIiwiZ2V0RXhwZXJ0RXJyb3JMb2ciLCJnZXRFeHBsYW5hdG9yeU5vdGUiLCJwcmludCIsInR5cGUiLCJnZXRGaWxlUHJvcGVydGllcyIsImRyaXZlVXJpIiwicHJlcGFyZUFuZEdldEZpbGVQcm9wZXJ0aWVzIiwidXBsb2FkQW5kR2V0RmlsZVByb3BlcnRpZXMiLCJkcml2ZVVyaXMiLCJzZXJ2ZXJFcnJvciIsIlNlcnZlckVycm9ycyIsIlVua25vd25FcnJvciIsInNvdXJjZXNUb3RhbENvdW50IiwiaW52YWxpZFNvdXJjZURyaXZlQ29udGVudE5hbWVzIiwiZ2V0SHJlZkRvd25sb2FkRnVmIiwiZ2V0SHJlZkRvd25sb2FkSW5uZXIiLCJnZXRIcmVmVG9Db252ZXJ0YXRpb25Mb2ciLCJnZXRIcmVmVG9Eb3dubG9hZENsaWVudEluZm8iLCJnZXRIcmVmVG9Eb3dubG9hZEZvcm1zQ2xpZW50SW5mbyIsImdldEhyZWZUb0Rvd25sb2FkSW5uZXJGdWYiLCJnZXRIcmVmVG9FcnJvckxvZ1BkZiIsImVycm9yTG9nTmFtZSIsInByb3BzTmFtZSIsImdldEhyZWZUb0lubmVyRWRpdG9yIiwiZ2V0UmVxdWlzaXRlcyIsInJlcXVpc2l0ZUxpc3QiLCJnZXRJbm5lciIsInBhdGhzIiwiZ2V0UGFydGlhbElubmVyIiwicnVsZXMiLCJtYXhJbnN0YW5jZUNvdW50IiwiZ2V0UGFydGlhbElubmVyQXNKc29uVHJlZSIsImdldFJhd1BhcnRpYWxJbm5lckFzSnNvblRyZWUiLCJnZXRUYXNrQnlJZCIsIm5vcm1hbGl6ZUJ5UnVsZXMiLCJwYXRjaFByZXNlbnRhdGlvbiIsImNvbnRlbnQiLCJyZW1vdmVBdHRhY2htZW50cyIsImF0dGFjaG1lbnRJZHMiLCJzZW5kQ2hhbmdlU2V0IiwiY3VycmVudERhdGFWZXJzaW9uIiwiZGF0YVZlcnNpb24iLCJzZW5kQ2hhbmdlU2V0U3luYyIsInNldEZ1ZkJ5RHJpdmVVcmkiLCJjb21iaW5lRnVmQnlEcml2ZVVyaSIsImNvbWJpbmVNZXRob2QiLCJtdWx0aXBsZUNvbWJpbmVGdWZCeURyaXZlVXJpIiwic2V0UHJlc2VudGF0aW9uIiwic2V0QWxsQ2hlY2tib3hlc0ZvcjExMzEwMyIsImVuYWJsZWQiLCJzZWFyY2hJbnN0YW5jZXNCeVRleHQiLCJ0ZXh0IiwicGF0aFByZWZpeCIsInBhdGhzVG9TZWFyY2giLCJjdXN0b21Ob3JtYWxpemUiLCJub3JtYWxpemVySWQiLCJwYXRoUHJlZml4ZXMiLCJnZXREYXRhVmVyc2lvbiIsInByaW50RXhjZWwiLCJwYXRoVG9UYWJsZSIsImNoZWNrQnlQb3BkIl0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQ0E7O0FBb0JBOztBQUNBOztBQVVPLE1BQU1BLGtCQUFOLENBQW9EO0FBQUE7QUFBQSxTQUN0Q0MsWUFEc0MsR0FDdkIsSUFBSUMsd0NBQUosRUFEdUI7QUFBQTs7QUFHaERDLEVBQUFBLHFCQUFxQixDQUFDQyxXQUFELEVBQTZDO0FBQ3JFLFdBQU8sS0FBS0gsWUFBWjtBQUNIOztBQUVNSSxFQUFBQSxjQUFjLENBQUNDLEdBQUQsRUFBY0MsSUFBZCxFQUE4QztBQUMvRCxTQUFLTixZQUFMLENBQWtCSSxjQUFsQixDQUFpQ0MsR0FBakMsRUFBc0NDLElBQXRDO0FBQ0g7O0FBRU1DLEVBQUFBLFVBQVUsQ0FBQ0MsV0FBRCxFQUErQztBQUM1RCxXQUFPQyxPQUFPLENBQUNDLE9BQVIsQ0FBZ0IsRUFBaEIsQ0FBUDtBQUNIOztBQUVNQyxFQUFBQSxVQUFVLEdBQWtCO0FBQy9CLFdBQU9GLE9BQU8sQ0FBQ0MsT0FBUixDQUFnQkUsU0FBaEIsQ0FBUDtBQUNIOztBQUlNQyxFQUFBQSxXQUFXLENBQUNDLEVBQUQsRUFBYUMsR0FBYixFQUFzQ0MsSUFBdEMsRUFBbUY7QUFDakcsVUFBTSxJQUFJQywyQkFBSixFQUFOO0FBQ0g7O0FBRU1DLEVBQUFBLFFBQVEsQ0FBQ2YsV0FBRCxFQUFpRDtB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eEcsT0FBTyxDQUFDQyxPQUFSLENBQWdCLENBQWhCLENBQVA7QUFDSDs7QUFFTXdHLEVBQUFBLFVBQVUsQ0FBQ0MsV0FBRCxFQUE4QztBQUMzRCxVQUFNLElBQUlsRywyQkFBSixFQUFOO0FBQ0g7O0FBRU1tRyxFQUFBQSxXQUFXLEdBQStCO0FBQzdDLFVBQU0sSUFBSW5HLDJCQUFKLEVBQU47QUFDSDs7QUE3TmdFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBQaWNrbGlzdERhdGFJdGVtIH0gZnJvbSBcIi4uLy4uL0VuZ2luZS9zcmMvRW5naW5lL0NvcmUvUGlja2xpc3RzL1BpY2tsaXN0VHlwZXNcIjtcbmltcG9ydCB7IE5vdEltcGxlbWVudGVkRXJyb3IgfSBmcm9tIFwiLi4vRXJyb3JzXCI7XG5cbmltcG9ydCB0eXBlIHsgQ2hlY2tTY2VuYXJpb1R5cGUsIElDYW5keUFwaUNsaWVudCwgSUNhbmR5QXBpRHJhZnRDbGllbnQsIElTZW5kQ2hhbmdlU2V0UmVzdWx0IH0gZnJvbSBcIi4vSUNhbmR5QXBpQ2xpZW50XCI7XG5pbXBvcnQgdHlwZSB7IFNlcnZlckVycm9yTG9nIH0gZnJvbSBcIi4vVHlwZXMvRXJyb3JMb2cvU2VydmVyRXJyb3JMb2dcIjtcbmltcG9ydCB0eXBlIHsgU2VydmVySW5uZXJSZXNwb25zZSwgU2VydmVySnNvblJlc3BvbnNlIH0gZnJvbSBcIi4vVHlwZXMvR2V0SW5uZXIvU2VydmVySW5uZXJSZXNwb25zZVwiO1xuaW1wb3J0IHsgRmlsZVByb3BlcnRpZXMsIFNlcnZlckVycm9yUmVzcG9uc2UsIFVwbG9hZEZpbGVQcm9wZXJ0aWVzUmVzcG9uc2UgfSBmcm9tIFwiLi9UeXBlcy9EcmFmdEFjdGlvbnMvRmlsZVByb3BlcnRpZXNcIjtcbmltcG9ydCB7IENyZWF0ZURyYWZ0UmVzcG9uc2UgfSBmcm9tIFwiLi9UeXBlcy9DcmVhdGVEcmFmdC9DcmVhdGVEcmFmdFJlc3BvbnNlXCI7XG5pbXBvcnQgeyBDcmVhdGVFeHBsYW5hdG9yeU5vdGVSZXNwb25zZSB9IGZyb20gXCIuL1R5cGVzL0V4cGxhbmF0b3J5Tm90ZS9DcmVhdGVFeHBsYW5hdG9yeU5vdGVSZXNwb25zZVwiO1xuaW1wb3J0IHsgRHJhZnRGdWxsSWQgfSBmcm9tIFwiLi9UeXBlcy9EcmFmdEZ1bGxJZFwiO1xuaW1wb3J0IHsgU2VydmVyQ2hhbmdlU2V0IH0gZnJvbSBcIi4vVHlwZXMvQ2hhbmdlU2V0L1NlcnZlckNoYW5nZVNldFwiO1xuaW1wb3J0IHsgU2VydmVyVGFzaywgVmVyaWZ5QW5kRml4Rm5zUmVxdWlyZW1lbnRzVGFza0luZm8gfSBmcm9tIFwiLi9UeXBlcy9UYXNrcy9UYXNrc1wiO1xuaW1wb3J0IHsgR2V0QnlJbm5SZXNwb25zZSB9IGZyb20gXCIuL1R5cGVzL0ZvY3VzL0ZvY3VzVHlwZXNcIjtcbmltcG9ydCB7IEF0dGFjaEluZm8gfSBmcm9tIFwiLi9UeXBlcy9BdHRhY2htZW50cy9BdHRhY21lbnRzXCI7XG5pbXBvcnQgeyBEcmFmdFByZXNlbnRhdGlvblR5cGUgfSBmcm9tIFwiLi9UeXBlcy9QcmVzZW50YXRpb25zL0RyYWZ0UHJlc2VudGF0aW9uVHlwZVwiO1xuaW1wb3J0IHsgQ29udmVydERyYWZ0UmVxdWVzdCB9IGZyb20gXCIuL1R5cGVzL0RyYWZ0QWN0aW9ucy9Db252ZXJ0RHJhZnRSZXF1ZXN0XCI7XG5pbXBvcnQgeyBQcmVzZW50YXRpb25Db250ZW50IH0gZnJvbSBcIi4vVHlwZXMvUHJlc2VudGF0aW9ucy9QcmVzZW50YXRpb25Db250ZW50XCI7XG5pbXBvcnQgeyBTZXJ2ZXJSZXF1aXNpdGVzUmVzcG9uc2UgfSBmcm9tIFwiLi9UeXBlcy9HZXRJbm5lci9TZXJ2ZXJSZXF1aXNpdGVzUmVzcG9uc2VcIjtcbmltcG9ydCB7IENvbWJpbmVGdWZSZXN1bHQsIEZ1ZkNvbWJpbmVNZXRob2QgfSBmcm9tIFwiLi9UeXBlcy9EcmFmdEFjdGlvbnMvQ29tYmluZUZ1ZlJlc3VsdFwiO1xuaW1wb3J0IHsgRmVhdHVyZUZsYWdzUmVzcG9uc2UgfSBmcm9tIFwiLi9UeXBlcy9GZWF0dXJlRmxhZ3MvRmVhdHVyZUZsYWdzUmVzcG9uc2VcIjtcbmltcG9ydCB7IElEaWdlc3RBcGlDbGllbnQgfSBmcm9tIFwiLi9EaWdlc3RBcGlDbGllbnQvSURpZ2VzdEFwaUNsaWVudFwiO1xuaW1wb3J0IHsgRmFrZURpZ2VzdEFwaUNsaWVudCB9IGZyb20gXCIuL0RpZ2VzdEFwaUNsaWVudC9GYWtlcy9GYWtlRGlnZXN0QXBpQ2xpZW50XCI7XG5pbXBvcnQgeyBTZXJ2ZXJFcnJvcnMgfSBmcm9tIFwiLi9DYW5keUFwaUNsaWVudFwiO1xuaW1wb3J0IHsgSW1wb3J0RW1wbG95ZWVzUmVxdWVzdCB9IGZyb20gXCIuL1R5cGVzL1N0YWZmL0ltcG9ydEVtcGxveWVlc1JlcXVlc3RcIjtcbmltcG9ydCB7IE1hc3NBY3Rpb25QYXJhbWV0ZXJzIH0gZnJvbSBcIi4vVHlwZXMvTWFzc0FjdGlvbnMvTWFzc0FjdGlvblBhcmFtZXRlcnNcIjtcbmltcG9ydCB7IFByaW50VHlwZSB9IGZyb20gXCIuL1R5cGVzL1ByaW50L1ByaW50VHlwZVwiO1xuaW1wb3J0IHsgUHJpbnRSZXNwb25zZSB9IGZyb20gXCIuL1R5cGVzL1ByaW50L1ByaW50UmVzcG9uc2VcIjtcbmltcG9ydCB7IFNlcnZlclJhd1Jlc3BvbnNlIH0gZnJvbSBcIi4vVHlwZXMvR2V0SW5uZXIvU2VydmVyUmF3UmVzcG9uc2VcIjtcbmltcG9ydCB7IFRlc3RDbGFzc2lmaWNhdGlvbiB9IGZyb20gXCIuL1R5cGVzL1Rlc3RDbGFzc2lmaWNhdGlvblwiO1xuaW1wb3J0IHsgQ2FuZHlQb3BkUHJvdG9jb2wgfSBmcm9tIFwiLi9UeXBlcy9FcnJvckxvZy9DYW5keVBvcGRQcm90b2NvbFwiO1xuaW1wb3J0IHsgSW5zdGFuY2VzRGVsZXRpbmdSdWxlIH0gZnJvbSBcIi4vVHlwZXMvSW5zdGFuY2VzRGVsZXRpbmcvSW5zdGFuY2VzRGVsZXRpbmdSdWxlXCI7XG5cbmV4cG9ydCBjbGFzcyBGYWtlQ2FuZHlBcGlDbGllbnQgaW1wbGVtZW50cyBJQ2FuZHlBcGlDbGllbnQge1xuICAgIHByaXZhdGUgcmVhZG9ubHkgZGlnZXN0Q2xpZW50ID0gbmV3IEZha2VEaWdlc3RBcGlDbGllbnQoKTtcblxuICAgIHB1YmxpYyBjcmVhdGVEaWdlc3RBcGlDbGllbnQoZHJhZnRGdWxsSWQ6IERyYWZ0RnVsbElkKTogSURpZ2VzdEFwaUNsaWVudCB7XG4gICAgICAgIHJldHVybiB0aGlzLmRpZ2VzdENsaWVudDtcbiAgICB9XG5cbiAgICBwdWJsaWMgY3JlYXRlUGlja2xpc3QoZ0lkOiBzdHJpbmcsIGRhdGE6IFBpY2tsaXN0RGF0YUl0ZW1bXSk6IHZvaWQge1xuICAgICAgICB0aGlzLmRpZ2VzdENsaWVudC5jcmVhdGVQaWNrbGlzdChnSWQsIGRhdGEpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRBbGxHZnZzKGFib3J0U2lnbmFsPzogQWJvcnRTaWduYWwpOiBQcm9taXNlPHN0cmluZ1tdPiB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoW10pO1xuICAgIH1cblxuICAgIHB1YmxpYyBjaGVja0FsaXZlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHVuZGVmaW5lZCk7XG4gICAgfVxuXG4gICAgcHVibGljIGNyZWF0ZURyYWZ0KG5zOiBzdHJpbmcsIGdmdjogc3RyaW5nKTogUHJvbWlzZTxDcmVhdGVEcmFmdFJlc3BvbnNlPjtcbiAgICBwdWJsaWMgY3JlYXRlRHJhZnQobnM6IHN0cmluZywgZ2Z2OiB1bmRlZmluZWQsIGJvZHk6IEJ1ZmZlcik6IFByb21pc2U8Q3JlYXRlRHJhZnRSZXNwb25zZT47XG4gICAgcHVibGljIGNyZWF0ZURyYWZ0KG5zOiBzdHJpbmcsIGdmdjogc3RyaW5nIHwgdW5kZWZpbmVkLCBib2R5PzogQnVmZmVyKTogUHJvbWlzZTxDcmVhdGVEcmFmdFJlc3BvbnNlPiB7XG4gICAgICAgIHRocm93IG5ldyBOb3RJbXBsZW1lbnRlZEVycm9yKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGZvckRyYWZ0KGRyYWZ0RnVsbElkOiBEcmFmdEZ1bGxJZCk6IElDYW5keUFwaURyYWZ0Q2xpZW50IHtcbiAgICAgICAgcmV0dXJuIG5ldyBGYWtlQ2FuZHlBcGlEcmFmdENsaWVudCgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBjcmVhdGVEcmFmdEZyb21Ecml2ZShcbiAgICAgICAgbnM6IHN0cmluZyxcbiAgICAgICAgZnVmRHJpdmVVcmk6IHN0cmluZyxcbiAgICAgICAgYWJvcnRTaWduYWw/OiBBYm9ydFNpZ25hbFxuICAgICk6IFByb21pc2U8Q3JlYXRlRHJhZnRSZXNwb25zZT4ge1xuICAgICAgICB0aHJvdyBuZXcgTm90SW1wbGVtZW50ZWRFcnJvcigpO1xuICAgIH1cblxuICAgIHB1YmxpYyBjcmVhdGVFbXB0eURyYWZ0KG5zOiBzdHJpbmcsIGdmdjogc3RyaW5nLCBhYm9ydFNpZ25hbD86IEFib3J0U2lnbmFsKTogUHJvbWlzZTxDcmVhdGVEcmFmdFJlc3BvbnNlPiB7XG4gICAgICAgIHRocm93IG5ldyBOb3RJbXBsZW1lbnRlZEVycm9yKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldEluZm9CeUlubnMoZHJhZnRGdWxsSWQ6IERyYWZ0RnVsbElkLCBpbm5zOiByZWFkb25seSBzdHJpbmdbXSk6IFByb21pc2U8R2V0QnlJbm5SZXNwb25zZT4ge1xuICAgICAgICB0aHJvdyBuZXcgTm90SW1wbGVtZW50ZWRFcnJvcigpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRGZWF0dXJlRmxhZ3NXaXRob3V0UHJvbWlzZShmZWF0dXJlRmxhZ3M6IEZlYXR1cmVGbGFnc1Jlc3BvbnNlKTogRmVhdHVyZUZsYWdzUmVzcG9uc2Uge1xuICAgICAgICByZXR1cm4gZmVhdHVyZUZsYWdzO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRGZWF0dXJlRmxhZ3MoKTogUHJvbWlzZTxGZWF0dXJlRmxhZ3NSZXNwb25zZT4ge1xuICAgICAgICBjb25zdCByZXNwb25zZTogRmVhdHVyZUZsYWdzUmVzcG9uc2UgPSB7IGNhbmR5VGVzdEZlYXR1cmU6IFwidHJ1ZVwiIH07XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUocmVzcG9uc2UpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXRUZXN0Q2xhc3NpZmljYXRpb24odGVzdENsYXNzaWZpY2F0aW9uOiBUZXN0Q2xhc3NpZmljYXRpb24pOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShmYWxzZSk7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgRmFrZUNhbmR5QXBpRHJhZnRDbGllbnQgaW1wbGVtZW50cyBJQ2FuZHlBcGlEcmFmdENsaWVudCB7XG4gICAgcHVibGljIGRlbGV0ZUluc3RhbmNlcyhkZWxldGluZ1J1bGVzOiBJbnN0YW5jZXNEZWxldGluZ1J1bGVbXSk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGltcG9ydEVtcGxveWVlcyhyZXF1ZXN0OiBJbXBvcnRFbXBsb3llZXNSZXF1ZXN0KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgcnVuTWFzc0FjdGlvbihhY3Rpb25JZDogc3RyaW5nLCBwYXJhbWV0ZXJzPzogTWFzc0FjdGlvblBhcmFtZXRlcnMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhY2NlcHRUcmFuc2ZlclR5cGUoXG4gICAgICAgIGZ1ZkRyaXZlVXJpOiBzdHJpbmcsXG4gICAgICAgIHRyYW5zZmVyVHlwZTogc3RyaW5nLFxuICAgICAgICBhYm9ydFNpZ25hbD86IEFib3J0U2lnbmFsXG4gICAgKTogUHJvbWlzZTxTZXJ2ZXJFcnJvclJlc3BvbnNlIHwgdW5kZWZpbmVkPiB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodW5kZWZpbmVkKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgY2FuY2VsVGFzayh0YXNrSWQ6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHVuZGVmaW5lZCk7XG4gICAgfVxuXG4gICAgcHVibGljIGNsZWFyRHJhZnQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodW5kZWZpbmVkKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgY29udmVydERyYWZ0RnJvbVByZXZHZnYocmVxdWVzdDogQ29udmVydERyYWZ0UmVxdWVzdCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHVuZGVmaW5lZCk7XG4gICAgfVxuXG4gICAgcHVibGljIGNyZWF0ZU9yVXBkYXRlQXR0YWNobWVudHMoYXR0YWNobWVudHM6IHJlYWRvbmx5IEF0dGFjaEluZm9bXSk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHVuZGVmaW5lZCk7XG4gICAgfVxuXG4gICAgcHVibGljIGVucXVldWVUYXNrKHRhc2tJZDogc3RyaW5nLCB0YXNrSW5mbzogVmVyaWZ5QW5kRml4Rm5zUmVxdWlyZW1lbnRzVGFza0luZm8pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh1bmRlZmluZWQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRBbGxBdHRhY2htZW50cygpOiBQcm9taXNlPEF0dGFjaEluZm9bXT4ge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKFtdKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0QWxsVGFza3MoKTogUHJvbWlzZTxTZXJ2ZXJUYXNrW10+IHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShbXSk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldEF0dGFjaG1lbnRCeUlkKGF0dGFjaG1lbnRJZDogc3RyaW5nKTogUHJvbWlzZTxBdHRhY2hJbmZvPiB7XG4gICAgICAgIHRocm93IG5ldyBOb3RJbXBsZW1lbnRlZEVycm9yKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldEVycm9yTG9nKCk6IFByb21pc2U8U2VydmVyRXJyb3JMb2c+IHtcbiAgICAgICAgdGhyb3cgbmV3IE5vdEltcGxlbWVudGVkRXJyb3IoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZ2V0RXJyb3JMb2dXaXRoQ2hlY2tTY2VuYXJpb3MoY2hlY2tTY2VuYXJpb3M6IENoZWNrU2NlbmFyaW9UeXBlW10pOiBQcm9taXNlPFNlcnZlckVycm9yTG9nPiB7XG4gICAgICAgIHRocm93IG5ldyBOb3RJbXBsZW1lbnRlZEVycm9yKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldEV4cGVydEVycm9yTG9nKCk6IFByb21pc2U8U2VydmVyRXJyb3JMb2c+IHtcbiAgICAgICAgdGhyb3cgbmV3IE5vdEltcGxlbWVudGVkRXJyb3IoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0RXhwbGFuYXRvcnlOb3RlKCk6IFByb21pc2U8Q3JlYXRlRXhwbGFuYXRvcnlOb3RlUmVzcG9uc2U+IHtcbiAgICAgICAgdGhyb3cgbmV3IE5vdEltcGxlbWVudGVkRXJyb3IoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgcHJpbnQodHlwZTogUHJpbnRUeXBlLCBib2R5Pzogc3RyaW5nW10pOiBQcm9taXNlPFByaW50UmVzcG9uc2U+IHtcbiAgICAgICAgdGhyb3cgbmV3IE5vdEltcGxlbWVudGVkRXJyb3IoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0RmlsZVByb3BlcnRpZXMoZHJpdmVVcmk6IHN0cmluZyk6IFByb21pc2U8RmlsZVByb3BlcnRpZXMgfCB1bmRlZmluZWQ+IHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh1bmRlZmluZWQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBwcmVwYXJlQW5kR2V0RmlsZVByb3BlcnRpZXMoZHJpdmVVcmk6IHN0cmluZywgZ2Z2OiBzdHJpbmcpOiBQcm9taXNlPEZpbGVQcm9wZXJ0aWVzIHwgdW5kZWZpbmVkPiB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodW5kZWZpbmVkKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgdXBsb2FkQW5kR2V0RmlsZVByb3BlcnRpZXMoXG4gICAgICAgIGRyaXZlVXJpczogc3RyaW5nW10sXG4gICAgICAgIGdmdjogc3RyaW5nLFxuICAgICAgICBhYm9ydFNpZ25hbD86IEFib3J0U2lnbmFsXG4gICAgKTogUHJvbWlzZTxVcGxvYWRGaWxlUHJvcGVydGllc1Jlc3BvbnNlPiB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoe1xuICAgICAgICAgICAgc2VydmVyRXJyb3I6IFNlcnZlckVycm9ycy5Vbmtub3duRXJyb3IsXG4gICAgICAgICAgICBzb3VyY2VzVG90YWxDb3VudDogMCxcbiAgICAgICAgICAgIGludmFsaWRTb3VyY2VEcml2ZUNvbnRlbnROYW1lczogXCJcIixcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldEhyZWZEb3dubG9hZEZ1ZigpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gXCJcIjtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0SHJlZkRvd25sb2FkSW5uZXIoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIFwiXCI7XG4gICAgfVxuXG4gICAgcHVibGljIGdldEhyZWZUb0NvbnZlcnRhdGlvbkxvZygpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gXCJcIjtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0SHJlZlRvRG93bmxvYWRDbGllbnRJbmZvKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBcIlwiO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRIcmVmVG9Eb3dubG9hZEZvcm1zQ2xpZW50SW5mbygpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gXCJcIjtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0SHJlZlRvRG93bmxvYWRJbm5lckZ1ZigpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gXCJcIjtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0SHJlZlRvRXJyb3JMb2dQZGYoZXJyb3JMb2dOYW1lOiBzdHJpbmcsIHByb3BzTmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIFwiXCI7XG4gICAgfVxuXG4gICAgcHVibGljIGdldEhyZWZUb0lubmVyRWRpdG9yKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBcIlwiO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBnZXRSZXF1aXNpdGVzKHJlcXVpc2l0ZUxpc3Q6IHJlYWRvbmx5IHN0cmluZ1tdKTogUHJvbWlzZTxTZXJ2ZXJSZXF1aXNpdGVzUmVzcG9uc2U+IHtcbiAgICAgICAgcmV0dXJuIHt9O1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBnZXRJbm5lcihwYXRoczogcmVhZG9ubHkgc3RyaW5nW10gfCB1bmRlZmluZWQpOiBQcm9taXNlPFNlcnZlcklubmVyUmVzcG9uc2U+IHtcbiAgICAgICAgcmV0dXJuIHt9O1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRQYXJ0aWFsSW5uZXIocnVsZXM6IHJlYWRvbmx5IHN0cmluZ1tdLCBtYXhJbnN0YW5jZUNvdW50PzogbnVtYmVyKTogUHJvbWlzZTxTZXJ2ZXJJbm5lclJlc3BvbnNlPiB7XG4gICAgICAgIHRocm93IG5ldyBOb3RJbXBsZW1lbnRlZEVycm9yKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldFBhcnRpYWxJbm5lckFzSnNvblRyZWUocnVsZXM6IHJlYWRvbmx5IHN0cmluZ1tdLCBtYXhJbnN0YW5jZUNvdW50PzogbnVtYmVyKTogUHJvbWlzZTxTZXJ2ZXJKc29uUmVzcG9uc2U+IHtcbiAgICAgICAgdGhyb3cgbmV3IE5vdEltcGxlbWVudGVkRXJyb3IoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0UmF3UGFydGlhbElubmVyQXNKc29uVHJlZShcbiAgICAgICAgcnVsZXM6IHJlYWRvbmx5IHN0cmluZ1tdLFxuICAgICAgICBtYXhJbnN0YW5jZUNvdW50PzogbnVtYmVyXG4gICAgKTogUHJvbWlzZTxTZXJ2ZXJSYXdSZXNwb25zZT4ge1xuICAgICAgICB0aHJvdyBuZXcgTm90SW1wbGVtZW50ZWRFcnJvcigpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRUYXNrQnlJZCh0YXNrSWQ6IHN0cmluZyk6IFByb21pc2U8U2VydmVyVGFzayB8IHVuZGVmaW5lZD4ge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHVuZGVmaW5lZCk7XG4gICAgfVxuXG4gICAgcHVibGljIG5vcm1hbGl6ZUJ5UnVsZXMocnVsZXM6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHVuZGVmaW5lZCk7XG4gICAgfVxuXG4gICAgcHVibGljIHBhdGNoUHJlc2VudGF0aW9uKHR5cGU6IERyYWZ0UHJlc2VudGF0aW9uVHlwZSwgY29udGVudDogUHJlc2VudGF0aW9uQ29udGVudCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHVuZGVmaW5lZCk7XG4gICAgfVxuXG4gICAgcHVibGljIHJlbW92ZUF0dGFjaG1lbnRzKGF0dGFjaG1lbnRJZHM6IHJlYWRvbmx5IHN0cmluZ1tdKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodW5kZWZpbmVkKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgc2VuZENoYW5nZVNldChkYXRhOiBTZXJ2ZXJDaGFuZ2VTZXQsIGN1cnJlbnREYXRhVmVyc2lvbjogbnVtYmVyKTogUHJvbWlzZTxJU2VuZENoYW5nZVNldFJlc3VsdD4ge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHsgZGF0YVZlcnNpb246IDAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIHNlbmRDaGFuZ2VTZXRTeW5jKGRhdGE6IFNlcnZlckNoYW5nZVNldCwgY3VycmVudERhdGFWZXJzaW9uOiBudW1iZXIpOiBJU2VuZENoYW5nZVNldFJlc3VsdCB7XG4gICAgICAgIHJldHVybiAyMDA7XG4gICAgfVxuXG4gICAgcHVibGljIHNldEZ1ZkJ5RHJpdmVVcmkoZHJpdmVVcmk6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHVuZGVmaW5lZCk7XG4gICAgfVxuXG4gICAgcHVibGljIGNvbWJpbmVGdWZCeURyaXZlVXJpKFxuICAgICAgICBkcml2ZVVyaTogc3RyaW5nLFxuICAgICAgICBjb21iaW5lTWV0aG9kOiBGdWZDb21iaW5lTWV0aG9kXG4gICAgKTogUHJvbWlzZTxDb21iaW5lRnVmUmVzdWx0IHwgdW5kZWZpbmVkPiB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodW5kZWZpbmVkKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgbXVsdGlwbGVDb21iaW5lRnVmQnlEcml2ZVVyaShcbiAgICAgICAgZHJpdmVVcmlzOiBzdHJpbmdbXSxcbiAgICAgICAgY29tYmluZU1ldGhvZDogRnVmQ29tYmluZU1ldGhvZFxuICAgICk6IFByb21pc2U8Q29tYmluZUZ1ZlJlc3VsdCB8IHVuZGVmaW5lZD4ge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHVuZGVmaW5lZCk7XG4gICAgfVxuXG4gICAgcHVibGljIHNldFByZXNlbnRhdGlvbih0eXBlOiBEcmFmdFByZXNlbnRhdGlvblR5cGUsIGNvbnRlbnQ6IHN0cmluZyB8IHVua25vd24pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh1bmRlZmluZWQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXRBbGxDaGVja2JveGVzRm9yMTEzMTAzKGVuYWJsZWQ6IGJvb2xlYW4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh1bmRlZmluZWQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZWFyY2hJbnN0YW5jZXNCeVRleHQoXG4gICAgICAgIHRleHQ6IHN0cmluZyxcbiAgICAgICAgcGF0aFByZWZpeDogc3RyaW5nLFxuICAgICAgICBwYXRoc1RvU2VhcmNoOiBzdHJpbmdbXSxcbiAgICAgICAgbWF4SW5zdGFuY2VDb3VudD86IG51bWJlclxuICAgICk6IFByb21pc2U8c3RyaW5nW10+IHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShbXSk7XG4gICAgfVxuXG4gICAgcHVibGljIGN1c3RvbU5vcm1hbGl6ZShub3JtYWxpemVySWQ6IHN0cmluZywgcGF0aFByZWZpeGVzOiBzdHJpbmdbXSk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHVuZGVmaW5lZCk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldERhdGFWZXJzaW9uKCk6IFByb21pc2U8bnVtYmVyPiB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoMCk7XG4gICAgfVxuXG4gICAgcHVibGljIHByaW50RXhjZWwocGF0aFRvVGFibGU6IHN0cmluZyk6IFByb21pc2U8UHJpbnRSZXNwb25zZT4ge1xuICAgICAgICB0aHJvdyBuZXcgTm90SW1wbGVtZW50ZWRFcnJvcigpO1xuICAgIH1cblxuICAgIHB1YmxpYyBjaGVja0J5UG9wZCgpOiBQcm9taXNlPENhbmR5UG9wZFByb3RvY29sPiB7XG4gICAgICAgIHRocm93IG5ldyBOb3RJbXBsZW1lbnRlZEVycm9yKCk7XG4gICAgfVxufVxuIl19
288
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL0NvbW1vbi9DYW5keUFwaUNsaWVudC9GYWtlQ2FuZHlBcGlDbGllbnQudHMiXSwibmFtZXMiOlsiRmFrZUNhbmR5QXBpQ2xpZW50IiwiZGlnZXN0Q2xpZW50IiwiRmFrZURpZ2VzdEFwaUNsaWVudCIsImNyZWF0ZURpZ2VzdEFwaUNsaWVudCIsImRyYWZ0RnVsbElkIiwiY3JlYXRlUGlja2xpc3QiLCJnSWQiLCJkYXRhIiwiZ2V0QWxsR2Z2cyIsImFib3J0U2lnbmFsIiwiUHJvbWlzZSIsInJlc29sdmUiLCJjaGVja0FsaXZlIiwidW5kZWZpbmVkIiwiY3JlYXRlRHJhZnQiLCJucyIsImdmdiIsImJvZHkiLCJOb3RJbXBsZW1lbnRlZEVycm9yIiwiZm9yRHJhZnQiLCJGYWtlQ2FuZHlBcGlEcmFmdENsaWVudCIsImNyZWF0ZURyYWZ0RnJvbURyaXZlIiwiZnVmRHJpdmVVcmkiLCJjcmVhdGVFbXB0eURyYWZ0IiwiZ2V0SW5mb0J5SW5ucyIsImlubnMiLCJnZXRGZWF0dXJlRmxhZ3NXaXRob3V0UHJvbWlzZSIsImZlYXR1cmVGbGFncyIsImdldEZlYXR1cmVGbGFncyIsInJlc3BvbnNlIiwiY2FuZHlUZXN0RmVhdHVyZSIsInNldFRlc3RDbGFzc2lmaWNhdGlvbiIsInRlc3RDbGFzc2lmaWNhdGlvbiIsImRlbGV0ZUluc3RhbmNlcyIsImRlbGV0aW5nUnVsZXMiLCJpbXBvcnRFbXBsb3llZXMiLCJyZXF1ZXN0IiwicnVuTWFzc0FjdGlvbiIsImFjdGlvbklkIiwicGFyYW1ldGVycyIsImFjY2VwdFRyYW5zZmVyVHlwZSIsInRyYW5zZmVyVHlwZSIsImNhbmNlbFRhc2siLCJ0YXNrSWQiLCJjbGVhckRyYWZ0IiwiY29udmVydERyYWZ0RnJvbVByZXZHZnYiLCJjcmVhdGVPclVwZGF0ZUF0dGFjaG1lbnRzIiwiYXR0YWNobWVudHMiLCJlbnF1ZXVlVGFzayIsInRhc2tJbmZvIiwiZ2V0QWxsQXR0YWNobWVudHMiLCJnZXRBbGxUYXNrcyIsImdldEF0dGFjaG1lbnRCeUlkIiwiYXR0YWNobWVudElkIiwiZ2V0RXJyb3JMb2ciLCJnZXRFcnJvckxvZ1dpdGhDaGVja1NjZW5hcmlvcyIsImNoZWNrU2NlbmFyaW9zIiwiZ2V0RXhwZXJ0RXJyb3JMb2ciLCJnZXRFeHBsYW5hdG9yeU5vdGUiLCJwcmludCIsInR5cGUiLCJnZXRGaWxlUHJvcGVydGllcyIsImRyaXZlVXJpIiwicHJlcGFyZUFuZEdldEZpbGVQcm9wZXJ0aWVzIiwidXBsb2FkQW5kR2V0RmlsZVByb3BlcnRpZXMiLCJkcml2ZVVyaXMiLCJzZXJ2ZXJFcnJvciIsIlNlcnZlckVycm9ycyIsIlVua25vd25FcnJvciIsInNvdXJjZXNUb3RhbENvdW50IiwiaW52YWxpZFNvdXJjZURyaXZlQ29udGVudE5hbWVzIiwiZ2V0SHJlZkRvd25sb2FkRnVmIiwiZ2V0SHJlZkRvd25sb2FkSW5uZXIiLCJnZXRIcmVmVG9Db252ZXJ0YXRpb25Mb2ciLCJnZXRIcmVmVG9Eb3dubG9hZENsaWVudEluZm8iLCJnZXRIcmVmVG9Eb3dubG9hZEZvcm1zQ2xpZW50SW5mbyIsImdldEhyZWZUb0Rvd25sb2FkSW5uZXJGdWYiLCJnZXRIcmVmVG9FcnJvckxvZ1BkZiIsImVycm9yTG9nTmFtZSIsInByb3BzTmFtZSIsImdldEhyZWZUb0lubmVyRWRpdG9yIiwiZ2V0UmVxdWlzaXRlcyIsInJlcXVpc2l0ZUxpc3QiLCJnZXRJbm5lciIsInBhdGhzIiwiZ2V0UGFydGlhbElubmVyIiwicnVsZXMiLCJtYXhJbnN0YW5jZUNvdW50IiwiZ2V0UGFydGlhbElubmVyQXNKc29uVHJlZSIsImdldFJhd1BhcnRpYWxJbm5lckFzSnNvblRyZWUiLCJnZXRUYXNrQnlJZCIsIm5vcm1hbGl6ZUJ5UnVsZXMiLCJwYXRjaFByZXNlbnRhdGlvbiIsImNvbnRlbnQiLCJyZW1vdmVBdHRhY2htZW50cyIsImF0dGFjaG1lbnRJZHMiLCJzZW5kQ2hhbmdlU2V0IiwiY3VycmVudERhdGFWZXJzaW9uIiwiZGF0YVZlcnNpb24iLCJzZW5kQ2hhbmdlU2V0U3luYyIsInNldEZ1ZkJ5RHJpdmVVcmkiLCJjb21iaW5lRnVmQnlEcml2ZVVyaSIsImNvbWJpbmVNZXRob2QiLCJtdWx0aXBsZUNvbWJpbmVGdWZCeURyaXZlVXJpIiwic2V0UHJlc2VudGF0aW9uIiwic2V0QWxsQ2hlY2tib3hlc0ZvcjExMzEwMyIsImVuYWJsZWQiLCJzZWFyY2hJbnN0YW5jZXNCeVRleHQiLCJ0ZXh0IiwicGF0aFByZWZpeCIsInBhdGhzVG9TZWFyY2giLCJjdXN0b21Ob3JtYWxpemUiLCJub3JtYWxpemVySWQiLCJwYXRoUHJlZml4ZXMiLCJnZXREYXRhVmVyc2lvbiIsInByaW50RXhjZWwiLCJwYXRoVG9UYWJsZSIsImV4Y2Vsc1RvUGFydGlhbEZ1ZnMiLCJpbXBvcnRGcm9tUGFydGlhbEZ1ZnNCeVBhdGgiLCJjaGVja0J5UG9wZCJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUNBOztBQTBCQTs7QUFDQTs7QUFVTyxNQUFNQSxrQkFBTixDQUFvRDtBQUFBO0FBQUEsU0FDdENDLFlBRHNDLEdBQ3ZCLElBQUlDLHdDQUFKLEVBRHVCO0FBQUE7O0FBR2hEQyxFQUFBQSxxQkFBcUIsQ0FBQ0MsV0FBRCxFQUE2QztBQUNyRSxXQUFPLEtBQUtILFlBQVo7QUFDSDs7QUFFTUksRUFBQUEsY0FBYyxDQUFDQyxHQUFELEVBQWNDLElBQWQsRUFBOEM7QUFDL0QsU0FBS04sWUFBTCxDQUFrQkksY0FBbEIsQ0FBaUNDLEdBQWpDLEVBQXNDQyxJQUF0QztBQUNIOztBQUVNQyxFQUFBQSxVQUFVLENBQUNDLFdBQUQsRUFBK0M7QUFDNUQsV0FBT0MsT0FBTyxDQUFDQyxPQUFSLENBQWdCLEVBQWhCLENBQVA7QUFDSDs7QUFFTUMsRUFBQUEsVUFBVSxHQUFrQjtBQUMvQixXQUFPRixPQUFPLENBQUNDLE9BQVIsQ0FBZ0JFLFNBQWhCLENBQVA7QUFDSDs7QUFJTUMsRUFBQUEsV0FBVyxDQUFDQyxFQUFELEVBQWFDLEdBQWIsRUFBc0NDLElBQXRDLEVBQW1GO0FBQ2pHLFVBQU0sSUFBSUMs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LFNBQWhCLENBQVA7QUFDSDs7QUFFTXFHLEVBQUFBLGNBQWMsR0FBb0I7QUFDckMsV0FBT3hHLE9BQU8sQ0FBQ0MsT0FBUixDQUFnQixDQUFoQixDQUFQO0FBQ0g7O0FBRU13RyxFQUFBQSxVQUFVLENBQUNDLFdBQUQsRUFBOEM7QUFDM0QsVUFBTSxJQUFJbEcsMkJBQUosRUFBTjtBQUNIOztBQUVNbUcsRUFBQUEsbUJBQW1CLENBQ3RCckcsR0FEc0IsRUFFdEJvRyxXQUZzQixFQUd0Qm5ELFNBSHNCLEVBSTBCO0FBQ2hELFVBQU0sSUFBSS9DLDJCQUFKLEVBQU47QUFDSDs7QUFFTW9HLEVBQUFBLDJCQUEyQixDQUM5QkYsV0FEOEIsRUFFOUJ0RCxRQUY4QixFQUc5QndDLGFBSDhCLEVBSTBCO0FBQ3hELFVBQU0sSUFBSXBGLDJCQUFKLEVBQU47QUFDSDs7QUFFTXFHLEVBQUFBLFdBQVcsR0FBK0I7QUFDN0MsVUFBTSxJQUFJckcsMkJBQUosRUFBTjtBQUNIOztBQTdPZ0UiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IFBpY2tsaXN0RGF0YUl0ZW0gfSBmcm9tIFwiLi4vLi4vRW5naW5lL3NyYy9FbmdpbmUvQ29yZS9QaWNrbGlzdHMvUGlja2xpc3RUeXBlc1wiO1xuaW1wb3J0IHsgTm90SW1wbGVtZW50ZWRFcnJvciB9IGZyb20gXCIuLi9FcnJvcnNcIjtcblxuaW1wb3J0IHR5cGUgeyBDaGVja1NjZW5hcmlvVHlwZSwgSUNhbmR5QXBpQ2xpZW50LCBJQ2FuZHlBcGlEcmFmdENsaWVudCwgSVNlbmRDaGFuZ2VTZXRSZXN1bHQgfSBmcm9tIFwiLi9JQ2FuZHlBcGlDbGllbnRcIjtcbmltcG9ydCB0eXBlIHsgU2VydmVyRXJyb3JMb2cgfSBmcm9tIFwiLi9UeXBlcy9FcnJvckxvZy9TZXJ2ZXJFcnJvckxvZ1wiO1xuaW1wb3J0IHR5cGUgeyBTZXJ2ZXJJbm5lclJlc3BvbnNlLCBTZXJ2ZXJKc29uUmVzcG9uc2UgfSBmcm9tIFwiLi9UeXBlcy9HZXRJbm5lci9TZXJ2ZXJJbm5lclJlc3BvbnNlXCI7XG5pbXBvcnQge1xuICAgIEV4Y2Vsc1RvUGFydGlhbEZ1ZnNSZXNwb25zZSxcbiAgICBGaWxlUHJvcGVydGllcyxcbiAgICBJbXBvcnRGcm9tUGFydGlhbEZ1ZnNCeVBhdGhSZXNwb25zZSxcbiAgICBTZXJ2ZXJFcnJvclJlc3BvbnNlLFxuICAgIFVwbG9hZEZpbGVQcm9wZXJ0aWVzUmVzcG9uc2UsXG59IGZyb20gXCIuL1R5cGVzL0RyYWZ0QWN0aW9ucy9GaWxlUHJvcGVydGllc1wiO1xuaW1wb3J0IHsgQ3JlYXRlRHJhZnRSZXNwb25zZSB9IGZyb20gXCIuL1R5cGVzL0NyZWF0ZURyYWZ0L0NyZWF0ZURyYWZ0UmVzcG9uc2VcIjtcbmltcG9ydCB7IENyZWF0ZUV4cGxhbmF0b3J5Tm90ZVJlc3BvbnNlIH0gZnJvbSBcIi4vVHlwZXMvRXhwbGFuYXRvcnlOb3RlL0NyZWF0ZUV4cGxhbmF0b3J5Tm90ZVJlc3BvbnNlXCI7XG5pbXBvcnQgeyBEcmFmdEZ1bGxJZCB9IGZyb20gXCIuL1R5cGVzL0RyYWZ0RnVsbElkXCI7XG5pbXBvcnQgeyBTZXJ2ZXJDaGFuZ2VTZXQgfSBmcm9tIFwiLi9UeXBlcy9DaGFuZ2VTZXQvU2VydmVyQ2hhbmdlU2V0XCI7XG5pbXBvcnQgeyBTZXJ2ZXJUYXNrLCBWZXJpZnlBbmRGaXhGbnNSZXF1aXJlbWVudHNUYXNrSW5mbyB9IGZyb20gXCIuL1R5cGVzL1Rhc2tzL1Rhc2tzXCI7XG5pbXBvcnQgeyBHZXRCeUlublJlc3BvbnNlIH0gZnJvbSBcIi4vVHlwZXMvRm9jdXMvRm9jdXNUeXBlc1wiO1xuaW1wb3J0IHsgQXR0YWNoSW5mbyB9IGZyb20gXCIuL1R5cGVzL0F0dGFjaG1lbnRzL0F0dGFjbWVudHNcIjtcbmltcG9ydCB7IERyYWZ0UHJlc2VudGF0aW9uVHlwZSB9IGZyb20gXCIuL1R5cGVzL1ByZXNlbnRhdGlvbnMvRHJhZnRQcmVzZW50YXRpb25UeXBlXCI7XG5pbXBvcnQgeyBDb252ZXJ0RHJhZnRSZXF1ZXN0IH0gZnJvbSBcIi4vVHlwZXMvRHJhZnRBY3Rpb25zL0NvbnZlcnREcmFmdFJlcXVlc3RcIjtcbmltcG9ydCB7IFByZXNlbnRhdGlvbkNvbnRlbnQgfSBmcm9tIFwiLi9UeXBlcy9QcmVzZW50YXRpb25zL1ByZXNlbnRhdGlvbkNvbnRlbnRcIjtcbmltcG9ydCB7IFNlcnZlclJlcXVpc2l0ZXNSZXNwb25zZSB9IGZyb20gXCIuL1R5cGVzL0dldElubmVyL1NlcnZlclJlcXVpc2l0ZXNSZXNwb25zZVwiO1xuaW1wb3J0IHsgQ29tYmluZUZ1ZlJlc3VsdCwgRnVmQ29tYmluZU1ldGhvZCB9IGZyb20gXCIuL1R5cGVzL0RyYWZ0QWN0aW9ucy9Db21iaW5lRnVmUmVzdWx0XCI7XG5pbXBvcnQgeyBGZWF0dXJlRmxhZ3NSZXNwb25zZSB9IGZyb20gXCIuL1R5cGVzL0ZlYXR1cmVGbGFncy9GZWF0dXJlRmxhZ3NSZXNwb25zZVwiO1xuaW1wb3J0IHsgSURpZ2VzdEFwaUNsaWVudCB9IGZyb20gXCIuL0RpZ2VzdEFwaUNsaWVudC9JRGlnZXN0QXBpQ2xpZW50XCI7XG5pbXBvcnQgeyBGYWtlRGlnZXN0QXBpQ2xpZW50IH0gZnJvbSBcIi4vRGlnZXN0QXBpQ2xpZW50L0Zha2VzL0Zha2VEaWdlc3RBcGlDbGllbnRcIjtcbmltcG9ydCB7IFNlcnZlckVycm9ycyB9IGZyb20gXCIuL0NhbmR5QXBpQ2xpZW50XCI7XG5pbXBvcnQgeyBJbXBvcnRFbXBsb3llZXNSZXF1ZXN0IH0gZnJvbSBcIi4vVHlwZXMvU3RhZmYvSW1wb3J0RW1wbG95ZWVzUmVxdWVzdFwiO1xuaW1wb3J0IHsgTWFzc0FjdGlvblBhcmFtZXRlcnMgfSBmcm9tIFwiLi9UeXBlcy9NYXNzQWN0aW9ucy9NYXNzQWN0aW9uUGFyYW1ldGVyc1wiO1xuaW1wb3J0IHsgUHJpbnRUeXBlIH0gZnJvbSBcIi4vVHlwZXMvUHJpbnQvUHJpbnRUeXBlXCI7XG5pbXBvcnQgeyBQcmludFJlc3BvbnNlIH0gZnJvbSBcIi4vVHlwZXMvUHJpbnQvUHJpbnRSZXNwb25zZVwiO1xuaW1wb3J0IHsgU2VydmVyUmF3UmVzcG9uc2UgfSBmcm9tIFwiLi9UeXBlcy9HZXRJbm5lci9TZXJ2ZXJSYXdSZXNwb25zZVwiO1xuaW1wb3J0IHsgVGVzdENsYXNzaWZpY2F0aW9uIH0gZnJvbSBcIi4vVHlwZXMvVGVzdENsYXNzaWZpY2F0aW9uXCI7XG5pbXBvcnQgeyBDYW5keVBvcGRQcm90b2NvbCB9IGZyb20gXCIuL1R5cGVzL0Vycm9yTG9nL0NhbmR5UG9wZFByb3RvY29sXCI7XG5pbXBvcnQgeyBJbnN0YW5jZXNEZWxldGluZ1J1bGUgfSBmcm9tIFwiLi9UeXBlcy9JbnN0YW5jZXNEZWxldGluZy9JbnN0YW5jZXNEZWxldGluZ1J1bGVcIjtcblxuZXhwb3J0IGNsYXNzIEZha2VDYW5keUFwaUNsaWVudCBpbXBsZW1lbnRzIElDYW5keUFwaUNsaWVudCB7XG4gICAgcHJpdmF0ZSByZWFkb25seSBkaWdlc3RDbGllbnQgPSBuZXcgRmFrZURpZ2VzdEFwaUNsaWVudCgpO1xuXG4gICAgcHVibGljIGNyZWF0ZURpZ2VzdEFwaUNsaWVudChkcmFmdEZ1bGxJZDogRHJhZnRGdWxsSWQpOiBJRGlnZXN0QXBpQ2xpZW50IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGlnZXN0Q2xpZW50O1xuICAgIH1cblxuICAgIHB1YmxpYyBjcmVhdGVQaWNrbGlzdChnSWQ6IHN0cmluZywgZGF0YTogUGlja2xpc3REYXRhSXRlbVtdKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZGlnZXN0Q2xpZW50LmNyZWF0ZVBpY2tsaXN0KGdJZCwgZGF0YSk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldEFsbEdmdnMoYWJvcnRTaWduYWw/OiBBYm9ydFNpZ25hbCk6IFByb21pc2U8c3RyaW5nW10+IHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShbXSk7XG4gICAgfVxuXG4gICAgcHVibGljIGNoZWNrQWxpdmUoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodW5kZWZpbmVkKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgY3JlYXRlRHJhZnQobnM6IHN0cmluZywgZ2Z2OiBzdHJpbmcpOiBQcm9taXNlPENyZWF0ZURyYWZ0UmVzcG9uc2U+O1xuICAgIHB1YmxpYyBjcmVhdGVEcmFmdChuczogc3RyaW5nLCBnZnY6IHVuZGVmaW5lZCwgYm9keTogQnVmZmVyKTogUHJvbWlzZTxDcmVhdGVEcmFmdFJlc3BvbnNlPjtcbiAgICBwdWJsaWMgY3JlYXRlRHJhZnQobnM6IHN0cmluZywgZ2Z2OiBzdHJpbmcgfCB1bmRlZmluZWQsIGJvZHk/OiBCdWZmZXIpOiBQcm9taXNlPENyZWF0ZURyYWZ0UmVzcG9uc2U+IHtcbiAgICAgICAgdGhyb3cgbmV3IE5vdEltcGxlbWVudGVkRXJyb3IoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZm9yRHJhZnQoZHJhZnRGdWxsSWQ6IERyYWZ0RnVsbElkKTogSUNhbmR5QXBpRHJhZnRDbGllbnQge1xuICAgICAgICByZXR1cm4gbmV3IEZha2VDYW5keUFwaURyYWZ0Q2xpZW50KCk7XG4gICAgfVxuXG4gICAgcHVibGljIGNyZWF0ZURyYWZ0RnJvbURyaXZlKFxuICAgICAgICBuczogc3RyaW5nLFxuICAgICAgICBmdWZEcml2ZVVyaTogc3RyaW5nLFxuICAgICAgICBhYm9ydFNpZ25hbD86IEFib3J0U2lnbmFsXG4gICAgKTogUHJvbWlzZTxDcmVhdGVEcmFmdFJlc3BvbnNlPiB7XG4gICAgICAgIHRocm93IG5ldyBOb3RJbXBsZW1lbnRlZEVycm9yKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGNyZWF0ZUVtcHR5RHJhZnQobnM6IHN0cmluZywgZ2Z2OiBzdHJpbmcsIGFib3J0U2lnbmFsPzogQWJvcnRTaWduYWwpOiBQcm9taXNlPENyZWF0ZURyYWZ0UmVzcG9uc2U+IHtcbiAgICAgICAgdGhyb3cgbmV3IE5vdEltcGxlbWVudGVkRXJyb3IoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0SW5mb0J5SW5ucyhkcmFmdEZ1bGxJZDogRHJhZnRGdWxsSWQsIGlubnM6IHJlYWRvbmx5IHN0cmluZ1tdKTogUHJvbWlzZTxHZXRCeUlublJlc3BvbnNlPiB7XG4gICAgICAgIHRocm93IG5ldyBOb3RJbXBsZW1lbnRlZEVycm9yKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldEZlYXR1cmVGbGFnc1dpdGhvdXRQcm9taXNlKGZlYXR1cmVGbGFnczogRmVhdHVyZUZsYWdzUmVzcG9uc2UpOiBGZWF0dXJlRmxhZ3NSZXNwb25zZSB7XG4gICAgICAgIHJldHVybiBmZWF0dXJlRmxhZ3M7XG4gICAgfVxuXG4gICAgcHVibGljIGdldEZlYXR1cmVGbGFncygpOiBQcm9taXNlPEZlYXR1cmVGbGFnc1Jlc3BvbnNlPiB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlOiBGZWF0dXJlRmxhZ3NSZXNwb25zZSA9IHsgY2FuZHlUZXN0RmVhdHVyZTogXCJ0cnVlXCIgfTtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShyZXNwb25zZSk7XG4gICAgfVxuXG4gICAgcHVibGljIHNldFRlc3RDbGFzc2lmaWNhdGlvbih0ZXN0Q2xhc3NpZmljYXRpb246IFRlc3RDbGFzc2lmaWNhdGlvbik6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGZhbHNlKTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBGYWtlQ2FuZHlBcGlEcmFmdENsaWVudCBpbXBsZW1lbnRzIElDYW5keUFwaURyYWZ0Q2xpZW50IHtcbiAgICBwdWJsaWMgZGVsZXRlSW5zdGFuY2VzKGRlbGV0aW5nUnVsZXM6IEluc3RhbmNlc0RlbGV0aW5nUnVsZVtdKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgaW1wb3J0RW1wbG95ZWVzKHJlcXVlc3Q6IEltcG9ydEVtcGxveWVlc1JlcXVlc3QpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBydW5NYXNzQWN0aW9uKGFjdGlvbklkOiBzdHJpbmcsIHBhcmFtZXRlcnM/OiBNYXNzQWN0aW9uUGFyYW1ldGVycyk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGFjY2VwdFRyYW5zZmVyVHlwZShcbiAgICAgICAgZnVmRHJpdmVVcmk6IHN0cmluZyxcbiAgICAgICAgdHJhbnNmZXJUeXBlOiBzdHJpbmcsXG4gICAgICAgIGFib3J0U2lnbmFsPzogQWJvcnRTaWduYWxcbiAgICApOiBQcm9taXNlPFNlcnZlckVycm9yUmVzcG9uc2UgfCB1bmRlZmluZWQ+IHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh1bmRlZmluZWQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBjYW5jZWxUYXNrKHRhc2tJZDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodW5kZWZpbmVkKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgY2xlYXJEcmFmdCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh1bmRlZmluZWQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBjb252ZXJ0RHJhZnRGcm9tUHJldkdmdihyZXF1ZXN0OiBDb252ZXJ0RHJhZnRSZXF1ZXN0KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodW5kZWZpbmVkKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgY3JlYXRlT3JVcGRhdGVBdHRhY2htZW50cyhhdHRhY2htZW50czogcmVhZG9ubHkgQXR0YWNoSW5mb1tdKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodW5kZWZpbmVkKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZW5xdWV1ZVRhc2sodGFza0lkOiBzdHJpbmcsIHRhc2tJbmZvOiBWZXJpZnlBbmRGaXhGbnNSZXF1aXJlbWVudHNUYXNrSW5mbyk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHVuZGVmaW5lZCk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldEFsbEF0dGFjaG1lbnRzKCk6IFByb21pc2U8QXR0YWNoSW5mb1tdPiB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoW10pO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRBbGxUYXNrcygpOiBQcm9taXNlPFNlcnZlclRhc2tbXT4ge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKFtdKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0QXR0YWNobWVudEJ5SWQoYXR0YWNobWVudElkOiBzdHJpbmcpOiBQcm9taXNlPEF0dGFjaEluZm8+IHtcbiAgICAgICAgdGhyb3cgbmV3IE5vdEltcGxlbWVudGVkRXJyb3IoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0RXJyb3JMb2coKTogUHJvbWlzZTxTZXJ2ZXJFcnJvckxvZz4ge1xuICAgICAgICB0aHJvdyBuZXcgTm90SW1wbGVtZW50ZWRFcnJvcigpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBnZXRFcnJvckxvZ1dpdGhDaGVja1NjZW5hcmlvcyhjaGVja1NjZW5hcmlvczogQ2hlY2tTY2VuYXJpb1R5cGVbXSk6IFByb21pc2U8U2VydmVyRXJyb3JMb2c+IHtcbiAgICAgICAgdGhyb3cgbmV3IE5vdEltcGxlbWVudGVkRXJyb3IoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0RXhwZXJ0RXJyb3JMb2coKTogUHJvbWlzZTxTZXJ2ZXJFcnJvckxvZz4ge1xuICAgICAgICB0aHJvdyBuZXcgTm90SW1wbGVtZW50ZWRFcnJvcigpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRFeHBsYW5hdG9yeU5vdGUoKTogUHJvbWlzZTxDcmVhdGVFeHBsYW5hdG9yeU5vdGVSZXNwb25zZT4ge1xuICAgICAgICB0aHJvdyBuZXcgTm90SW1wbGVtZW50ZWRFcnJvcigpO1xuICAgIH1cblxuICAgIHB1YmxpYyBwcmludCh0eXBlOiBQcmludFR5cGUsIGJvZHk/OiBzdHJpbmdbXSk6IFByb21pc2U8UHJpbnRSZXNwb25zZT4ge1xuICAgICAgICB0aHJvdyBuZXcgTm90SW1wbGVtZW50ZWRFcnJvcigpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRGaWxlUHJvcGVydGllcyhkcml2ZVVyaTogc3RyaW5nKTogUHJvbWlzZTxGaWxlUHJvcGVydGllcyB8IHVuZGVmaW5lZD4ge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHVuZGVmaW5lZCk7XG4gICAgfVxuXG4gICAgcHVibGljIHByZXBhcmVBbmRHZXRGaWxlUHJvcGVydGllcyhkcml2ZVVyaTogc3RyaW5nLCBnZnY6IHN0cmluZyk6IFByb21pc2U8RmlsZVByb3BlcnRpZXMgfCB1bmRlZmluZWQ+IHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh1bmRlZmluZWQpO1xuICAgIH1cblxuICAgIHB1YmxpYyB1cGxvYWRBbmRHZXRGaWxlUHJvcGVydGllcyhcbiAgICAgICAgZHJpdmVVcmlzOiBzdHJpbmdbXSxcbiAgICAgICAgZ2Z2OiBzdHJpbmcsXG4gICAgICAgIGFib3J0U2lnbmFsPzogQWJvcnRTaWduYWxcbiAgICApOiBQcm9taXNlPFVwbG9hZEZpbGVQcm9wZXJ0aWVzUmVzcG9uc2U+IHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh7XG4gICAgICAgICAgICBzZXJ2ZXJFcnJvcjogU2VydmVyRXJyb3JzLlVua25vd25FcnJvcixcbiAgICAgICAgICAgIHNvdXJjZXNUb3RhbENvdW50OiAwLFxuICAgICAgICAgICAgaW52YWxpZFNvdXJjZURyaXZlQ29udGVudE5hbWVzOiBcIlwiLFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0SHJlZkRvd25sb2FkRnVmKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBcIlwiO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRIcmVmRG93bmxvYWRJbm5lcigpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gXCJcIjtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0SHJlZlRvQ29udmVydGF0aW9uTG9nKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBcIlwiO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRIcmVmVG9Eb3dubG9hZENsaWVudEluZm8oKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIFwiXCI7XG4gICAgfVxuXG4gICAgcHVibGljIGdldEhyZWZUb0Rvd25sb2FkRm9ybXNDbGllbnRJbmZvKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBcIlwiO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRIcmVmVG9Eb3dubG9hZElubmVyRnVmKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBcIlwiO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRIcmVmVG9FcnJvckxvZ1BkZihlcnJvckxvZ05hbWU6IHN0cmluZywgcHJvcHNOYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gXCJcIjtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0SHJlZlRvSW5uZXJFZGl0b3IoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIFwiXCI7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGdldFJlcXVpc2l0ZXMocmVxdWlzaXRlTGlzdDogcmVhZG9ubHkgc3RyaW5nW10pOiBQcm9taXNlPFNlcnZlclJlcXVpc2l0ZXNSZXNwb25zZT4ge1xuICAgICAgICByZXR1cm4ge307XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGdldElubmVyKHBhdGhzOiByZWFkb25seSBzdHJpbmdbXSB8IHVuZGVmaW5lZCk6IFByb21pc2U8U2VydmVySW5uZXJSZXNwb25zZT4ge1xuICAgICAgICByZXR1cm4ge307XG4gICAgfVxuXG4gICAgcHVibGljIGdldFBhcnRpYWxJbm5lcihydWxlczogcmVhZG9ubHkgc3RyaW5nW10sIG1heEluc3RhbmNlQ291bnQ/OiBudW1iZXIpOiBQcm9taXNlPFNlcnZlcklubmVyUmVzcG9uc2U+IHtcbiAgICAgICAgdGhyb3cgbmV3IE5vdEltcGxlbWVudGVkRXJyb3IoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0UGFydGlhbElubmVyQXNKc29uVHJlZShydWxlczogcmVhZG9ubHkgc3RyaW5nW10sIG1heEluc3RhbmNlQ291bnQ/OiBudW1iZXIpOiBQcm9taXNlPFNlcnZlckpzb25SZXNwb25zZT4ge1xuICAgICAgICB0aHJvdyBuZXcgTm90SW1wbGVtZW50ZWRFcnJvcigpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRSYXdQYXJ0aWFsSW5uZXJBc0pzb25UcmVlKFxuICAgICAgICBydWxlczogcmVhZG9ubHkgc3RyaW5nW10sXG4gICAgICAgIG1heEluc3RhbmNlQ291bnQ/OiBudW1iZXJcbiAgICApOiBQcm9taXNlPFNlcnZlclJhd1Jlc3BvbnNlPiB7XG4gICAgICAgIHRocm93IG5ldyBOb3RJbXBsZW1lbnRlZEVycm9yKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldFRhc2tCeUlkKHRhc2tJZDogc3RyaW5nKTogUHJvbWlzZTxTZXJ2ZXJUYXNrIHwgdW5kZWZpbmVkPiB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodW5kZWZpbmVkKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgbm9ybWFsaXplQnlSdWxlcyhydWxlczogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodW5kZWZpbmVkKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgcGF0Y2hQcmVzZW50YXRpb24odHlwZTogRHJhZnRQcmVzZW50YXRpb25UeXBlLCBjb250ZW50OiBQcmVzZW50YXRpb25Db250ZW50KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodW5kZWZpbmVkKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgcmVtb3ZlQXR0YWNobWVudHMoYXR0YWNobWVudElkczogcmVhZG9ubHkgc3RyaW5nW10pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh1bmRlZmluZWQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBzZW5kQ2hhbmdlU2V0KGRhdGE6IFNlcnZlckNoYW5nZVNldCwgY3VycmVudERhdGFWZXJzaW9uOiBudW1iZXIpOiBQcm9taXNlPElTZW5kQ2hhbmdlU2V0UmVzdWx0PiB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoeyBkYXRhVmVyc2lvbjogMCB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2VuZENoYW5nZVNldFN5bmMoZGF0YTogU2VydmVyQ2hhbmdlU2V0LCBjdXJyZW50RGF0YVZlcnNpb246IG51bWJlcik6IElTZW5kQ2hhbmdlU2V0UmVzdWx0IHtcbiAgICAgICAgcmV0dXJuIDIwMDtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0RnVmQnlEcml2ZVVyaShkcml2ZVVyaTogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodW5kZWZpbmVkKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgY29tYmluZUZ1ZkJ5RHJpdmVVcmkoXG4gICAgICAgIGRyaXZlVXJpOiBzdHJpbmcsXG4gICAgICAgIGNvbWJpbmVNZXRob2Q6IEZ1ZkNvbWJpbmVNZXRob2RcbiAgICApOiBQcm9taXNlPENvbWJpbmVGdWZSZXN1bHQgfCB1bmRlZmluZWQ+IHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh1bmRlZmluZWQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBtdWx0aXBsZUNvbWJpbmVGdWZCeURyaXZlVXJpKFxuICAgICAgICBkcml2ZVVyaXM6IHN0cmluZ1tdLFxuICAgICAgICBjb21iaW5lTWV0aG9kOiBGdWZDb21iaW5lTWV0aG9kXG4gICAgKTogUHJvbWlzZTxDb21iaW5lRnVmUmVzdWx0IHwgdW5kZWZpbmVkPiB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodW5kZWZpbmVkKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0UHJlc2VudGF0aW9uKHR5cGU6IERyYWZ0UHJlc2VudGF0aW9uVHlwZSwgY29udGVudDogc3RyaW5nIHwgdW5rbm93bik6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHVuZGVmaW5lZCk7XG4gICAgfVxuXG4gICAgcHVibGljIHNldEFsbENoZWNrYm94ZXNGb3IxMTMxMDMoZW5hYmxlZDogYm9vbGVhbik6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHVuZGVmaW5lZCk7XG4gICAgfVxuXG4gICAgcHVibGljIHNlYXJjaEluc3RhbmNlc0J5VGV4dChcbiAgICAgICAgdGV4dDogc3RyaW5nLFxuICAgICAgICBwYXRoUHJlZml4OiBzdHJpbmcsXG4gICAgICAgIHBhdGhzVG9TZWFyY2g6IHN0cmluZ1tdLFxuICAgICAgICBtYXhJbnN0YW5jZUNvdW50PzogbnVtYmVyXG4gICAgKTogUHJvbWlzZTxzdHJpbmdbXT4ge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKFtdKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgY3VzdG9tTm9ybWFsaXplKG5vcm1hbGl6ZXJJZDogc3RyaW5nLCBwYXRoUHJlZml4ZXM6IHN0cmluZ1tdKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodW5kZWZpbmVkKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0RGF0YVZlcnNpb24oKTogUHJvbWlzZTxudW1iZXI+IHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgwKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgcHJpbnRFeGNlbChwYXRoVG9UYWJsZTogc3RyaW5nKTogUHJvbWlzZTxQcmludFJlc3BvbnNlPiB7XG4gICAgICAgIHRocm93IG5ldyBOb3RJbXBsZW1lbnRlZEVycm9yKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGV4Y2Vsc1RvUGFydGlhbEZ1ZnMoXG4gICAgICAgIGdmdjogc3RyaW5nLFxuICAgICAgICBwYXRoVG9UYWJsZTogc3RyaW5nLFxuICAgICAgICBkcml2ZVVyaXM6IHN0cmluZ1tdXG4gICAgKTogUHJvbWlzZTxFeGNlbHNUb1BhcnRpYWxGdWZzUmVzcG9uc2UgfCB1bmRlZmluZWQ+IHtcbiAgICAgICAgdGhyb3cgbmV3IE5vdEltcGxlbWVudGVkRXJyb3IoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgaW1wb3J0RnJvbVBhcnRpYWxGdWZzQnlQYXRoKFxuICAgICAgICBwYXRoVG9UYWJsZTogc3RyaW5nLFxuICAgICAgICBkcml2ZVVyaTogc3RyaW5nW10sXG4gICAgICAgIGNvbWJpbmVNZXRob2Q6IHN0cmluZ1xuICAgICk6IFByb21pc2U8SW1wb3J0RnJvbVBhcnRpYWxGdWZzQnlQYXRoUmVzcG9uc2UgfCB1bmRlZmluZWQ+IHtcbiAgICAgICAgdGhyb3cgbmV3IE5vdEltcGxlbWVudGVkRXJyb3IoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgY2hlY2tCeVBvcGQoKTogUHJvbWlzZTxDYW5keVBvcGRQcm90b2NvbD4ge1xuICAgICAgICB0aHJvdyBuZXcgTm90SW1wbGVtZW50ZWRFcnJvcigpO1xuICAgIH1cbn1cbiJdfQ==
@@ -11,26 +11,30 @@ var _fsExtra = require("fs-extra");
11
11
 
12
12
  var _StaticLogger = require("../../Commons/Logging/StaticLogger");
13
13
 
14
+ var _BuildCacheMode = require("../../CLICommands/BuildForms/BuildCacheMode");
15
+
14
16
  function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
15
17
 
16
18
  function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
17
19
 
18
- async function writeFLangNormalizationFiles(gfv, farmDirectory, resourcesDirectory, parentLogger = (0, _StaticLogger.getLogger)(), buildCache, buildCacheOptions) {
20
+ async function writeFLangNormalizationFiles(gfv, farmDirectory, resourcesDirectory, parentLogger = (0, _StaticLogger.getLogger)(), buildCache, buildCacheOptions, buildCacheExist) {
19
21
  const logger = parentLogger.withPrefix(`FLASHNORM:${gfv}`);
20
22
  const sourceFile = path.join(farmDirectory, "forms", gfv, "form", "ServerSide.normalize");
21
23
  const targetFile = path.join(resourcesDirectory, "normalize", `${gfv}.normalize`);
22
24
  const sourceFileExists = await (0, _fsExtra.pathExists)(sourceFile);
23
25
  const targetFileExists = await (0, _fsExtra.pathExists)(targetFile);
24
26
 
25
- if (sourceFileExists && !targetFileExists) {
26
- logger.log(`copy\n from: ${sourceFile}\n to: ${targetFile}`);
27
- await (0, _fsExtra.copy)(sourceFile, targetFile);
27
+ if (sourceFileExists) {
28
+ if (!targetFileExists || !buildCacheExist) {
29
+ logger.log(`copy\n from: ${sourceFile}\n to: ${targetFile}`);
30
+ await (0, _fsExtra.copy)(sourceFile, targetFile);
31
+ }
28
32
 
29
- if (buildCache != undefined && buildCacheOptions != undefined) {
33
+ if (buildCache != undefined && buildCacheOptions != undefined && (buildCacheOptions.mode === _BuildCacheMode.BuildCacheMode.ForceUpdate || buildCacheOptions.mode === _BuildCacheMode.BuildCacheMode.UpdateIfNeed)) {
30
34
  await buildCache.setContent(buildCacheOptions.generatorVersion, buildCacheOptions.gfv, buildCacheOptions.depsHash, resourcesDirectory, path.join("normalize", `${gfv}.normalize`), await (0, _fsExtra.readFile)(sourceFile, "utf-8"));
31
35
  }
32
36
  } else {
33
37
  logger.log(`No server side normalization\n at: ${sourceFile} \n or file got from build-cache`);
34
38
  }
35
39
  }
36
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9CdWlsZFRhc2tzL0Zvcm0vV3JpdGVGTGFuZ05vcm1hbGl6YXRpb25GaWxlcy50cyJdLCJuYW1lcyI6WyJ3cml0ZUZMYW5nTm9ybWFsaXphdGlvbkZpbGVzIiwiZ2Z2IiwiZmFybURpcmVjdG9yeSIsInJlc291cmNlc0RpcmVjdG9yeSIsInBhcmVudExvZ2dlciIsImJ1aWxkQ2FjaGUiLCJidWlsZENhY2hlT3B0aW9ucyIsImxvZ2dlciIsIndpdGhQcmVmaXgiLCJzb3VyY2VGaWxlIiwicGF0aCIsImpvaW4iLCJ0YXJnZXRGaWxlIiwic291cmNlRmlsZUV4aXN0cyIsInRhcmdldEZpbGVFeGlzdHMiLCJsb2ciLCJ1bmRlZmluZWQiLCJzZXRDb250ZW50IiwiZ2VuZXJhdG9yVmVyc2lvbiIsImRlcHNIYXNoIl0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQUE7O0FBRUE7O0FBSUE7Ozs7OztBQUVPLGVBQWVBLDRCQUFmLENBQ0hDLEdBREcsRUFFSEMsYUFGRyxFQUdIQyxrQkFIRyxFQUlIQyxZQUFxQixHQUFHLDhCQUpyQixFQUtIQyxVQUxHLEVBTUhDLGlCQU5HLEVBT1U7QUFDYixRQUFNQyxNQUFNLEdBQUdILFlBQVksQ0FBQ0ksVUFBYixDQUF5QixhQUFZUCxHQUFJLEVBQXpDLENBQWY7QUFDQSxRQUFNUSxVQUFVLEdBQUdDLElBQUksQ0FBQ0MsSUFBTCxDQUFVVCxhQUFWLEVBQXlCLE9BQXpCLEVBQWtDRCxHQUFsQyxFQUF1QyxNQUF2QyxFQUErQyxzQkFBL0MsQ0FBbkI7QUFDQSxRQUFNVyxVQUFVLEdBQUdGLElBQUksQ0FBQ0MsSUFBTCxDQUFVUixrQkFBVixFQUE4QixXQUE5QixFQUE0QyxHQUFFRixHQUFJLFlBQWxELENBQW5CO0FBQ0EsUUFBTVksZ0JBQWdCLEdBQUcsTUFBTSx5QkFBV0osVUFBWCxDQUEvQjtBQUNBLFFBQU1LLGdCQUFnQixHQUFHLE1BQU0seUJBQVdGLFVBQVgsQ0FBL0I7O0FBRUEsTUFBSUMsZ0JBQWdCLElBQUksQ0FBQ0MsZ0JBQXpCLEVBQTJDO0FBQ3ZDUCxJQUFBQSxNQUFNLENBQUNRLEdBQVAsQ0FBWSxpQkFBZ0JOLFVBQVcsV0FBVUcsVUFBVyxFQUE1RDtBQUNBLFVBQU0sbUJBQUtILFVBQUwsRUFBaUJHLFVBQWpCLENBQU47O0FBRUEsUUFBSVAsVUFBVSxJQUFJVyxTQUFkLElBQTJCVixpQkFBaUIsSUFBSVUsU0FBcEQsRUFBK0Q7QUFDM0QsWUFBTVgsVUFBVSxDQUFDWSxVQUFYLENBQ0ZYLGlCQUFpQixDQUFDWSxnQkFEaEIsRUFFRlosaUJBQWlCLENBQUNMLEdBRmhCLEVBR0ZLLGlCQUFpQixDQUFDYSxRQUhoQixFQUlGaEIsa0JBSkUsRUFLRk8sSUFBSSxDQUFDQyxJQUFMLENBQVUsV0FBVixFQUF3QixHQUFFVixHQUFJLFlBQTlCLENBTEUsRUFNRixNQUFNLHVCQUFTUSxVQUFULEVBQXFCLE9BQXJCLENBTkosQ0FBTjtBQVFIO0FBQ0osR0FkRCxNQWNPO0FBQ0hGLElBQUFBLE1BQU0sQ0FBQ1EsR0FBUCxDQUFZLHVDQUFzQ04sVUFBVyxrQ0FBN0Q7QUFDSDtBQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgcGF0aCBmcm9tIFwicGF0aFwiO1xuXG5pbXBvcnQgeyBjb3B5LCBwYXRoRXhpc3RzLCByZWFkRmlsZSB9IGZyb20gXCJmcy1leHRyYVwiO1xuXG5pbXBvcnQgeyBJTG9nZ2VyIH0gZnJvbSBcIi4uLy4uL0NvbW1vbnMvTG9nZ2luZy9JTG9nZ2VyXCI7XG5pbXBvcnQgeyBCdWlsZENhY2hlLCBGb3JtQnVpbGRDYWNoZU9wdGlvbnMgfSBmcm9tIFwiLi4vLi4vRm9ybVdlYnBhY2tDb25maWd1cmF0aW9uL0NhY2hlQXNzZXRzUGx1Z2luXCI7XG5pbXBvcnQgeyBnZXRMb2dnZXIgfSBmcm9tIFwiLi4vLi4vQ29tbW9ucy9Mb2dnaW5nL1N0YXRpY0xvZ2dlclwiO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gd3JpdGVGTGFuZ05vcm1hbGl6YXRpb25GaWxlcyhcbiAgICBnZnY6IHN0cmluZyxcbiAgICBmYXJtRGlyZWN0b3J5OiBzdHJpbmcsXG4gICAgcmVzb3VyY2VzRGlyZWN0b3J5OiBzdHJpbmcsXG4gICAgcGFyZW50TG9nZ2VyOiBJTG9nZ2VyID0gZ2V0TG9nZ2VyKCksXG4gICAgYnVpbGRDYWNoZT86IEJ1aWxkQ2FjaGUsXG4gICAgYnVpbGRDYWNoZU9wdGlvbnM/OiBGb3JtQnVpbGRDYWNoZU9wdGlvbnNcbik6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGxvZ2dlciA9IHBhcmVudExvZ2dlci53aXRoUHJlZml4KGBGTEFTSE5PUk06JHtnZnZ9YCk7XG4gICAgY29uc3Qgc291cmNlRmlsZSA9IHBhdGguam9pbihmYXJtRGlyZWN0b3J5LCBcImZvcm1zXCIsIGdmdiwgXCJmb3JtXCIsIFwiU2VydmVyU2lkZS5ub3JtYWxpemVcIik7XG4gICAgY29uc3QgdGFyZ2V0RmlsZSA9IHBhdGguam9pbihyZXNvdXJjZXNEaXJlY3RvcnksIFwibm9ybWFsaXplXCIsIGAke2dmdn0ubm9ybWFsaXplYCk7XG4gICAgY29uc3Qgc291cmNlRmlsZUV4aXN0cyA9IGF3YWl0IHBhdGhFeGlzdHMoc291cmNlRmlsZSk7XG4gICAgY29uc3QgdGFyZ2V0RmlsZUV4aXN0cyA9IGF3YWl0IHBhdGhFeGlzdHModGFyZ2V0RmlsZSk7XG5cbiAgICBpZiAoc291cmNlRmlsZUV4aXN0cyAmJiAhdGFyZ2V0RmlsZUV4aXN0cykge1xuICAgICAgICBsb2dnZXIubG9nKGBjb3B5XFxuICBmcm9tOiAke3NvdXJjZUZpbGV9XFxuICB0bzogJHt0YXJnZXRGaWxlfWApO1xuICAgICAgICBhd2FpdCBjb3B5KHNvdXJjZUZpbGUsIHRhcmdldEZpbGUpO1xuXG4gICAgICAgIGlmIChidWlsZENhY2hlICE9IHVuZGVmaW5lZCAmJiBidWlsZENhY2hlT3B0aW9ucyAhPSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGF3YWl0IGJ1aWxkQ2FjaGUuc2V0Q29udGVudChcbiAgICAgICAgICAgICAgICBidWlsZENhY2hlT3B0aW9ucy5nZW5lcmF0b3JWZXJzaW9uLFxuICAgICAgICAgICAgICAgIGJ1aWxkQ2FjaGVPcHRpb25zLmdmdixcbiAgICAgICAgICAgICAgICBidWlsZENhY2hlT3B0aW9ucy5kZXBzSGFzaCxcbiAgICAgICAgICAgICAgICByZXNvdXJjZXNEaXJlY3RvcnksXG4gICAgICAgICAgICAgICAgcGF0aC5qb2luKFwibm9ybWFsaXplXCIsIGAke2dmdn0ubm9ybWFsaXplYCksXG4gICAgICAgICAgICAgICAgYXdhaXQgcmVhZEZpbGUoc291cmNlRmlsZSwgXCJ1dGYtOFwiKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAgIGxvZ2dlci5sb2coYE5vIHNlcnZlciBzaWRlIG5vcm1hbGl6YXRpb25cXG4gIGF0OiAke3NvdXJjZUZpbGV9IFxcbiBvciBmaWxlIGdvdCBmcm9tIGJ1aWxkLWNhY2hlYCk7XG4gICAgfVxufVxuIl19
40
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9CdWlsZFRhc2tzL0Zvcm0vV3JpdGVGTGFuZ05vcm1hbGl6YXRpb25GaWxlcy50cyJdLCJuYW1lcyI6WyJ3cml0ZUZMYW5nTm9ybWFsaXphdGlvbkZpbGVzIiwiZ2Z2IiwiZmFybURpcmVjdG9yeSIsInJlc291cmNlc0RpcmVjdG9yeSIsInBhcmVudExvZ2dlciIsImJ1aWxkQ2FjaGUiLCJidWlsZENhY2hlT3B0aW9ucyIsImJ1aWxkQ2FjaGVFeGlzdCIsImxvZ2dlciIsIndpdGhQcmVmaXgiLCJzb3VyY2VGaWxlIiwicGF0aCIsImpvaW4iLCJ0YXJnZXRGaWxlIiwic291cmNlRmlsZUV4aXN0cyIsInRhcmdldEZpbGVFeGlzdHMiLCJsb2ciLCJ1bmRlZmluZWQiLCJtb2RlIiwiQnVpbGRDYWNoZU1vZGUiLCJGb3JjZVVwZGF0ZSIsIlVwZGF0ZUlmTmVlZCIsInNldENvbnRlbnQiLCJnZW5lcmF0b3JWZXJzaW9uIiwiZGVwc0hhc2giXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBQTs7QUFFQTs7QUFJQTs7QUFDQTs7Ozs7O0FBRU8sZUFBZUEsNEJBQWYsQ0FDSEMsR0FERyxFQUVIQyxhQUZHLEVBR0hDLGtCQUhHLEVBSUhDLFlBQXFCLEdBQUcsOEJBSnJCLEVBS0hDLFVBTEcsRUFNSEMsaUJBTkcsRUFPSEMsZUFQRyxFQVFVO0FBQ2IsUUFBTUMsTUFBTSxHQUFHSixZQUFZLENBQUNLLFVBQWIsQ0FBeUIsYUFBWVIsR0FBSSxFQUF6QyxDQUFmO0FBQ0EsUUFBTVMsVUFBVSxHQUFHQyxJQUFJLENBQUNDLElBQUwsQ0FBVVYsYUFBVixFQUF5QixPQUF6QixFQUFrQ0QsR0FBbEMsRUFBdUMsTUFBdkMsRUFBK0Msc0JBQS9DLENBQW5CO0FBQ0EsUUFBTVksVUFBVSxHQUFHRixJQUFJLENBQUNDLElBQUwsQ0FBVVQsa0JBQVYsRUFBOEIsV0FBOUIsRUFBNEMsR0FBRUYsR0FBSSxZQUFsRCxDQUFuQjtBQUNBLFFBQU1hLGdCQUFnQixHQUFHLE1BQU0seUJBQVdKLFVBQVgsQ0FBL0I7QUFDQSxRQUFNSyxnQkFBZ0IsR0FBRyxNQUFNLHlCQUFXRixVQUFYLENBQS9COztBQUVBLE1BQUlDLGdCQUFKLEVBQXNCO0FBQ2xCLFFBQUksQ0FBQ0MsZ0JBQUQsSUFBcUIsQ0FBQ1IsZUFBMUIsRUFBMkM7QUFDdkNDLE1BQUFBLE1BQU0sQ0FBQ1EsR0FBUCxDQUFZLGlCQUFnQk4sVUFBVyxXQUFVRyxVQUFXLEVBQTVEO0FBQ0EsWUFBTSxtQkFBS0gsVUFBTCxFQUFpQkcsVUFBakIsQ0FBTjtBQUNIOztBQUVELFFBQ0lSLFVBQVUsSUFBSVksU0FBZCxJQUNBWCxpQkFBaUIsSUFBSVcsU0FEckIsS0FFQ1gsaUJBQWlCLENBQUNZLElBQWxCLEtBQTJCQywrQkFBZUMsV0FBMUMsSUFDR2QsaUJBQWlCLENBQUNZLElBQWxCLEtBQTJCQywrQkFBZUUsWUFIOUMsQ0FESixFQUtFO0FBQ0UsWUFBTWhCLFVBQVUsQ0FBQ2lCLFVBQVgsQ0FDRmhCLGlCQUFpQixDQUFDaUIsZ0JBRGhCLEVBRUZqQixpQkFBaUIsQ0FBQ0wsR0FGaEIsRUFHRkssaUJBQWlCLENBQUNrQixRQUhoQixFQUlGckIsa0JBSkUsRUFLRlEsSUFBSSxDQUFDQyxJQUFMLENBQVUsV0FBVixFQUF3QixHQUFFWCxHQUFJLFlBQTlCLENBTEUsRUFNRixNQUFNLHVCQUFTUyxVQUFULEVBQXFCLE9BQXJCLENBTkosQ0FBTjtBQVFIO0FBQ0osR0FyQkQsTUFxQk87QUFDSEYsSUFBQUEsTUFBTSxDQUFDUSxHQUFQLENBQVksdUNBQXNDTixVQUFXLGtDQUE3RDtBQUNIO0FBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBwYXRoIGZyb20gXCJwYXRoXCI7XG5cbmltcG9ydCB7IGNvcHksIHBhdGhFeGlzdHMsIHJlYWRGaWxlIH0gZnJvbSBcImZzLWV4dHJhXCI7XG5cbmltcG9ydCB7IElMb2dnZXIgfSBmcm9tIFwiLi4vLi4vQ29tbW9ucy9Mb2dnaW5nL0lMb2dnZXJcIjtcbmltcG9ydCB7IEJ1aWxkQ2FjaGUsIEZvcm1CdWlsZENhY2hlT3B0aW9ucyB9IGZyb20gXCIuLi8uLi9Gb3JtV2VicGFja0NvbmZpZ3VyYXRpb24vQ2FjaGVBc3NldHNQbHVnaW5cIjtcbmltcG9ydCB7IGdldExvZ2dlciB9IGZyb20gXCIuLi8uLi9Db21tb25zL0xvZ2dpbmcvU3RhdGljTG9nZ2VyXCI7XG5pbXBvcnQgeyBCdWlsZENhY2hlTW9kZSB9IGZyb20gXCIuLi8uLi9DTElDb21tYW5kcy9CdWlsZEZvcm1zL0J1aWxkQ2FjaGVNb2RlXCI7XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB3cml0ZUZMYW5nTm9ybWFsaXphdGlvbkZpbGVzKFxuICAgIGdmdjogc3RyaW5nLFxuICAgIGZhcm1EaXJlY3Rvcnk6IHN0cmluZyxcbiAgICByZXNvdXJjZXNEaXJlY3Rvcnk6IHN0cmluZyxcbiAgICBwYXJlbnRMb2dnZXI6IElMb2dnZXIgPSBnZXRMb2dnZXIoKSxcbiAgICBidWlsZENhY2hlPzogQnVpbGRDYWNoZSxcbiAgICBidWlsZENhY2hlT3B0aW9ucz86IEZvcm1CdWlsZENhY2hlT3B0aW9ucyxcbiAgICBidWlsZENhY2hlRXhpc3Q/OiBib29sZWFuXG4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBsb2dnZXIgPSBwYXJlbnRMb2dnZXIud2l0aFByZWZpeChgRkxBU0hOT1JNOiR7Z2Z2fWApO1xuICAgIGNvbnN0IHNvdXJjZUZpbGUgPSBwYXRoLmpvaW4oZmFybURpcmVjdG9yeSwgXCJmb3Jtc1wiLCBnZnYsIFwiZm9ybVwiLCBcIlNlcnZlclNpZGUubm9ybWFsaXplXCIpO1xuICAgIGNvbnN0IHRhcmdldEZpbGUgPSBwYXRoLmpvaW4ocmVzb3VyY2VzRGlyZWN0b3J5LCBcIm5vcm1hbGl6ZVwiLCBgJHtnZnZ9Lm5vcm1hbGl6ZWApO1xuICAgIGNvbnN0IHNvdXJjZUZpbGVFeGlzdHMgPSBhd2FpdCBwYXRoRXhpc3RzKHNvdXJjZUZpbGUpO1xuICAgIGNvbnN0IHRhcmdldEZpbGVFeGlzdHMgPSBhd2FpdCBwYXRoRXhpc3RzKHRhcmdldEZpbGUpO1xuXG4gICAgaWYgKHNvdXJjZUZpbGVFeGlzdHMpIHtcbiAgICAgICAgaWYgKCF0YXJnZXRGaWxlRXhpc3RzIHx8ICFidWlsZENhY2hlRXhpc3QpIHtcbiAgICAgICAgICAgIGxvZ2dlci5sb2coYGNvcHlcXG4gIGZyb206ICR7c291cmNlRmlsZX1cXG4gIHRvOiAke3RhcmdldEZpbGV9YCk7XG4gICAgICAgICAgICBhd2FpdCBjb3B5KHNvdXJjZUZpbGUsIHRhcmdldEZpbGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgYnVpbGRDYWNoZSAhPSB1bmRlZmluZWQgJiZcbiAgICAgICAgICAgIGJ1aWxkQ2FjaGVPcHRpb25zICE9IHVuZGVmaW5lZCAmJlxuICAgICAgICAgICAgKGJ1aWxkQ2FjaGVPcHRpb25zLm1vZGUgPT09IEJ1aWxkQ2FjaGVNb2RlLkZvcmNlVXBkYXRlIHx8XG4gICAgICAgICAgICAgICAgYnVpbGRDYWNoZU9wdGlvbnMubW9kZSA9PT0gQnVpbGRDYWNoZU1vZGUuVXBkYXRlSWZOZWVkKVxuICAgICAgICApIHtcbiAgICAgICAgICAgIGF3YWl0IGJ1aWxkQ2FjaGUuc2V0Q29udGVudChcbiAgICAgICAgICAgICAgICBidWlsZENhY2hlT3B0aW9ucy5nZW5lcmF0b3JWZXJzaW9uLFxuICAgICAgICAgICAgICAgIGJ1aWxkQ2FjaGVPcHRpb25zLmdmdixcbiAgICAgICAgICAgICAgICBidWlsZENhY2hlT3B0aW9ucy5kZXBzSGFzaCxcbiAgICAgICAgICAgICAgICByZXNvdXJjZXNEaXJlY3RvcnksXG4gICAgICAgICAgICAgICAgcGF0aC5qb2luKFwibm9ybWFsaXplXCIsIGAke2dmdn0ubm9ybWFsaXplYCksXG4gICAgICAgICAgICAgICAgYXdhaXQgcmVhZEZpbGUoc291cmNlRmlsZSwgXCJ1dGYtOFwiKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAgIGxvZ2dlci5sb2coYE5vIHNlcnZlciBzaWRlIG5vcm1hbGl6YXRpb25cXG4gIGF0OiAke3NvdXJjZUZpbGV9IFxcbiBvciBmaWxlIGdvdCBmcm9tIGJ1aWxkLWNhY2hlYCk7XG4gICAgfVxufVxuIl19