@bitgo/sdk-coin-xlm 2.25.0 → 3.0.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
@@ -3,6 +3,21 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
5
 
6
+ # [3.0.0](https://github.com/BitGo/BitGoJS/compare/@bitgo/sdk-coin-xlm@2.25.1...@bitgo/sdk-coin-xlm@3.0.0) (2024-03-28)
7
+
8
+ ### Features
9
+
10
+ - **root:** deprecate node 16 ([d3ec624](https://github.com/BitGo/BitGoJS/commit/d3ec6240bddae2a4ab7fa80c4a16efecc36210bd))
11
+
12
+ ### BREAKING CHANGES
13
+
14
+ - **root:** Node 16 is no longer supported in bitgojs.
15
+ TICKET: WP-1100
16
+
17
+ ## [2.25.1](https://github.com/BitGo/BitGoJS/compare/@bitgo/sdk-coin-xlm@2.25.0...@bitgo/sdk-coin-xlm@2.25.1) (2024-03-19)
18
+
19
+ **Note:** Version bump only for package @bitgo/sdk-coin-xlm
20
+
6
21
  # [2.25.0](https://github.com/BitGo/BitGoJS/compare/@bitgo/sdk-coin-xlm@2.24.2...@bitgo/sdk-coin-xlm@2.25.0) (2024-03-11)
7
22
 
8
23
  ### Features
@@ -1,7 +1,11 @@
1
1
  "use strict";
2
2
  var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
3
  if (k2 === undefined) k2 = k;
4
- Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
5
9
  }) : (function(o, m, k, k2) {
6
10
  if (k2 === undefined) k2 = k;
7
11
  o[k2] = m[k];
@@ -61,4 +65,4 @@ function getStellarKeys(bitgo, params) {
61
65
  return keys;
62
66
  }
63
67
  exports.getStellarKeys = getStellarKeys;
64
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2V0U3RlbGxhcktleXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZ2V0U3RlbGxhcktleXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUNBLHFEQUF1QztBQUV2QyxTQUFnQixjQUFjLENBQUMsS0FBZ0IsRUFBRSxNQUErQjtJQUM5RSxNQUFNLElBQUksR0FBc0IsRUFBRSxDQUFDO0lBQ25DLElBQUksT0FBTyxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUM7SUFDN0IsSUFBSSxTQUFTLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQztJQUVqQyxtRkFBbUY7SUFDbkYsTUFBTSxhQUFhLEdBQUcsU0FBUyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDNUUsTUFBTSxlQUFlLEdBQUcsU0FBUyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsSUFBSSxPQUFPLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBRTdFLElBQUk7UUFDRixJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDeEQsT0FBTyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUM7Z0JBQ3RCLEtBQUssRUFBRSxPQUFPO2dCQUNkLFFBQVEsRUFBRSxNQUFNLENBQUMsZ0JBQWdCO2FBQ2xDLENBQUMsQ0FBQztTQUNKO1FBRUQsTUFBTSxXQUFXLEdBQUcsZUFBZSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDbkgsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztLQUN4QjtJQUFDLE9BQU8sQ0FBQyxFQUFFO1FBQ1YsTUFBTSxJQUFJLEtBQUssQ0FBQyx1REFBdUQsQ0FBQyxDQUFDO0tBQzFFO0lBRUQsSUFBSTtRQUNGLElBQUksQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsYUFBYSxJQUFJLENBQUMsZUFBZSxFQUFFO1lBQ3BFLFNBQVMsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDO2dCQUN4QixLQUFLLEVBQUUsU0FBUztnQkFDaEIsUUFBUSxFQUFFLE1BQU0sQ0FBQyxnQkFBZ0I7YUFDbEMsQ0FBQyxDQUFDO1NBQ0o7UUFFRCxJQUFJLGFBQWEsSUFBSSxlQUFlLEVBQUU7WUFDcEMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO1NBQ3JEO2FBQU07WUFDTCxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7U0FDbEQ7S0FDRjtJQUFDLE9BQU8sQ0FBQyxFQUFFO1FBQ1YsTUFBTSxJQUFJLEtBQUssQ0FBQyx5REFBeUQsQ0FBQyxDQUFDO0tBQzVFO0lBRUQsT0FBTyxJQUFJLENBQUM7QUFDZCxDQUFDO0FBekNELHdDQXlDQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJpdEdvQmFzZSwgSW5pdGlhdGVSZWNvdmVyeU9wdGlvbnMgfSBmcm9tICdAYml0Z28vc2RrLWNvcmUnO1xuaW1wb3J0ICogYXMgc3RlbGxhciBmcm9tICdzdGVsbGFyLXNkayc7XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRTdGVsbGFyS2V5cyhiaXRnbzogQml0R29CYXNlLCBwYXJhbXM6IEluaXRpYXRlUmVjb3ZlcnlPcHRpb25zKTogc3RlbGxhci5LZXlwYWlyW10ge1xuICBjb25zdCBrZXlzOiBzdGVsbGFyLktleXBhaXJbXSA9IFtdO1xuICBsZXQgdXNlcktleSA9IHBhcmFtcy51c2VyS2V5O1xuICBsZXQgYmFja3VwS2V5ID0gcGFyYW1zLmJhY2t1cEtleTtcblxuICAvLyBTdGVsbGFyJ3MgRWQyNTUxOSBwdWJsaWMga2V5cyBzdGFydCB3aXRoIGEgRywgd2hpbGUgcHJpdmF0ZSBrZXlzIHN0YXJ0IHdpdGggYW4gU1xuICBjb25zdCBpc0tyc1JlY292ZXJ5ID0gYmFja3VwS2V5LnN0YXJ0c1dpdGgoJ0cnKSAmJiAhdXNlcktleS5zdGFydHNXaXRoKCdHJyk7XG4gIGNvbnN0IGlzVW5zaWduZWRTd2VlcCA9IGJhY2t1cEtleS5zdGFydHNXaXRoKCdHJykgJiYgdXNlcktleS5zdGFydHNXaXRoKCdHJyk7XG5cbiAgdHJ5IHtcbiAgICBpZiAoIXVzZXJLZXkuc3RhcnRzV2l0aCgnUycpICYmICF1c2VyS2V5LnN0YXJ0c1dpdGgoJ0cnKSkge1xuICAgICAgdXNlcktleSA9IGJpdGdvLmRlY3J5cHQoe1xuICAgICAgICBpbnB1dDogdXNlcktleSxcbiAgICAgICAgcGFzc3dvcmQ6IHBhcmFtcy53YWxsZXRQYXNzcGhyYXNlLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgY29uc3QgdXNlcktleVBhaXIgPSBpc1Vuc2lnbmVkU3dlZXAgPyBzdGVsbGFyLktleXBhaXIuZnJvbVB1YmxpY0tleSh1c2VyS2V5KSA6IHN0ZWxsYXIuS2V5cGFpci5mcm9tU2VjcmV0KHVzZXJLZXkpO1xuICAgIGtleXMucHVzaCh1c2VyS2V5UGFpcik7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZhaWxlZCB0byBkZWNyeXB0IHVzZXIga2V5IHdpdGggcGFzc2NvZGUgLSB0cnkgYWdhaW4hJyk7XG4gIH1cblxuICB0cnkge1xuICAgIGlmICghYmFja3VwS2V5LnN0YXJ0c1dpdGgoJ1MnKSAmJiAhaXNLcnNSZWNvdmVyeSAmJiAhaXNVbnNpZ25lZFN3ZWVwKSB7XG4gICAgICBiYWNrdXBLZXkgPSBiaXRnby5kZWNyeXB0KHtcbiAgICAgICAgaW5wdXQ6IGJhY2t1cEtleSxcbiAgICAgICAgcGFzc3dvcmQ6IHBhcmFtcy53YWxsZXRQYXNzcGhyYXNlLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKGlzS3JzUmVjb3ZlcnkgfHwgaXNVbnNpZ25lZFN3ZWVwKSB7XG4gICAgICBrZXlzLnB1c2goc3RlbGxhci5LZXlwYWlyLmZyb21QdWJsaWNLZXkoYmFja3VwS2V5KSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGtleXMucHVzaChzdGVsbGFyLktleXBhaXIuZnJvbVNlY3JldChiYWNrdXBLZXkpKTtcbiAgICB9XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZhaWxlZCB0byBkZWNyeXB0IGJhY2t1cCBrZXkgd2l0aCBwYXNzY29kZSAtIHRyeSBhZ2FpbiEnKTtcbiAgfVxuXG4gIHJldHVybiBrZXlzO1xufVxuIl19
68
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2V0U3RlbGxhcktleXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZ2V0U3RlbGxhcktleXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFDQSxxREFBdUM7QUFFdkMsU0FBZ0IsY0FBYyxDQUFDLEtBQWdCLEVBQUUsTUFBK0I7SUFDOUUsTUFBTSxJQUFJLEdBQXNCLEVBQUUsQ0FBQztJQUNuQyxJQUFJLE9BQU8sR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDO0lBQzdCLElBQUksU0FBUyxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUM7SUFFakMsbUZBQW1GO0lBQ25GLE1BQU0sYUFBYSxHQUFHLFNBQVMsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzVFLE1BQU0sZUFBZSxHQUFHLFNBQVMsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLElBQUksT0FBTyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUU3RSxJQUFJO1FBQ0YsSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQ3hELE9BQU8sR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDO2dCQUN0QixLQUFLLEVBQUUsT0FBTztnQkFDZCxRQUFRLEVBQUUsTUFBTSxDQUFDLGdCQUFnQjthQUNsQyxDQUFDLENBQUM7U0FDSjtRQUVELE1BQU0sV0FBVyxHQUFHLGVBQWUsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ25ILElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7S0FDeEI7SUFBQyxPQUFPLENBQUMsRUFBRTtRQUNWLE1BQU0sSUFBSSxLQUFLLENBQUMsdURBQXVELENBQUMsQ0FBQztLQUMxRTtJQUVELElBQUk7UUFDRixJQUFJLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLGFBQWEsSUFBSSxDQUFDLGVBQWUsRUFBRTtZQUNwRSxTQUFTLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQztnQkFDeEIsS0FBSyxFQUFFLFNBQVM7Z0JBQ2hCLFFBQVEsRUFBRSxNQUFNLENBQUMsZ0JBQWdCO2FBQ2xDLENBQUMsQ0FBQztTQUNKO1FBRUQsSUFBSSxhQUFhLElBQUksZUFBZSxFQUFFO1lBQ3BDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztTQUNyRDthQUFNO1lBQ0wsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO1NBQ2xEO0tBQ0Y7SUFBQyxPQUFPLENBQUMsRUFBRTtRQUNWLE1BQU0sSUFBSSxLQUFLLENBQUMseURBQXlELENBQUMsQ0FBQztLQUM1RTtJQUVELE9BQU8sSUFBSSxDQUFDO0FBQ2QsQ0FBQztBQXpDRCx3Q0F5Q0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBCaXRHb0Jhc2UsIEluaXRpYXRlUmVjb3ZlcnlPcHRpb25zIH0gZnJvbSAnQGJpdGdvL3Nkay1jb3JlJztcbmltcG9ydCAqIGFzIHN0ZWxsYXIgZnJvbSAnc3RlbGxhci1zZGsnO1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0U3RlbGxhcktleXMoYml0Z286IEJpdEdvQmFzZSwgcGFyYW1zOiBJbml0aWF0ZVJlY292ZXJ5T3B0aW9ucyk6IHN0ZWxsYXIuS2V5cGFpcltdIHtcbiAgY29uc3Qga2V5czogc3RlbGxhci5LZXlwYWlyW10gPSBbXTtcbiAgbGV0IHVzZXJLZXkgPSBwYXJhbXMudXNlcktleTtcbiAgbGV0IGJhY2t1cEtleSA9IHBhcmFtcy5iYWNrdXBLZXk7XG5cbiAgLy8gU3RlbGxhcidzIEVkMjU1MTkgcHVibGljIGtleXMgc3RhcnQgd2l0aCBhIEcsIHdoaWxlIHByaXZhdGUga2V5cyBzdGFydCB3aXRoIGFuIFNcbiAgY29uc3QgaXNLcnNSZWNvdmVyeSA9IGJhY2t1cEtleS5zdGFydHNXaXRoKCdHJykgJiYgIXVzZXJLZXkuc3RhcnRzV2l0aCgnRycpO1xuICBjb25zdCBpc1Vuc2lnbmVkU3dlZXAgPSBiYWNrdXBLZXkuc3RhcnRzV2l0aCgnRycpICYmIHVzZXJLZXkuc3RhcnRzV2l0aCgnRycpO1xuXG4gIHRyeSB7XG4gICAgaWYgKCF1c2VyS2V5LnN0YXJ0c1dpdGgoJ1MnKSAmJiAhdXNlcktleS5zdGFydHNXaXRoKCdHJykpIHtcbiAgICAgIHVzZXJLZXkgPSBiaXRnby5kZWNyeXB0KHtcbiAgICAgICAgaW5wdXQ6IHVzZXJLZXksXG4gICAgICAgIHBhc3N3b3JkOiBwYXJhbXMud2FsbGV0UGFzc3BocmFzZSxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGNvbnN0IHVzZXJLZXlQYWlyID0gaXNVbnNpZ25lZFN3ZWVwID8gc3RlbGxhci5LZXlwYWlyLmZyb21QdWJsaWNLZXkodXNlcktleSkgOiBzdGVsbGFyLktleXBhaXIuZnJvbVNlY3JldCh1c2VyS2V5KTtcbiAgICBrZXlzLnB1c2godXNlcktleVBhaXIpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdGYWlsZWQgdG8gZGVjcnlwdCB1c2VyIGtleSB3aXRoIHBhc3Njb2RlIC0gdHJ5IGFnYWluIScpO1xuICB9XG5cbiAgdHJ5IHtcbiAgICBpZiAoIWJhY2t1cEtleS5zdGFydHNXaXRoKCdTJykgJiYgIWlzS3JzUmVjb3ZlcnkgJiYgIWlzVW5zaWduZWRTd2VlcCkge1xuICAgICAgYmFja3VwS2V5ID0gYml0Z28uZGVjcnlwdCh7XG4gICAgICAgIGlucHV0OiBiYWNrdXBLZXksXG4gICAgICAgIHBhc3N3b3JkOiBwYXJhbXMud2FsbGV0UGFzc3BocmFzZSxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmIChpc0tyc1JlY292ZXJ5IHx8IGlzVW5zaWduZWRTd2VlcCkge1xuICAgICAga2V5cy5wdXNoKHN0ZWxsYXIuS2V5cGFpci5mcm9tUHVibGljS2V5KGJhY2t1cEtleSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBrZXlzLnB1c2goc3RlbGxhci5LZXlwYWlyLmZyb21TZWNyZXQoYmFja3VwS2V5KSk7XG4gICAgfVxuICB9IGNhdGNoIChlKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdGYWlsZWQgdG8gZGVjcnlwdCBiYWNrdXAga2V5IHdpdGggcGFzc2NvZGUgLSB0cnkgYWdhaW4hJyk7XG4gIH1cblxuICByZXR1cm4ga2V5cztcbn1cbiJdfQ==
package/dist/src/index.js CHANGED
@@ -1,7 +1,11 @@
1
1
  "use strict";
2
2
  var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
3
  if (k2 === undefined) k2 = k;
4
- Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
5
9
  }) : (function(o, m, k, k2) {
6
10
  if (k2 === undefined) k2 = k;
7
11
  o[k2] = m[k];
@@ -15,4 +19,4 @@ __exportStar(require("./stellarToken"), exports);
15
19
  __exportStar(require("./txlm"), exports);
16
20
  __exportStar(require("./xlm"), exports);
17
21
  __exportStar(require("./register"), exports);
18
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0FBQUEsbURBQWlDO0FBQ2pDLGlEQUErQjtBQUMvQix5Q0FBdUI7QUFDdkIsd0NBQXNCO0FBQ3RCLDZDQUEyQiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vZ2V0U3RlbGxhcktleXMnO1xuZXhwb3J0ICogZnJvbSAnLi9zdGVsbGFyVG9rZW4nO1xuZXhwb3J0ICogZnJvbSAnLi90eGxtJztcbmV4cG9ydCAqIGZyb20gJy4veGxtJztcbmV4cG9ydCAqIGZyb20gJy4vcmVnaXN0ZXInO1xuIl19
22
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLG1EQUFpQztBQUNqQyxpREFBK0I7QUFDL0IseUNBQXVCO0FBQ3ZCLHdDQUFzQjtBQUN0Qiw2Q0FBMkIiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2dldFN0ZWxsYXJLZXlzJztcbmV4cG9ydCAqIGZyb20gJy4vc3RlbGxhclRva2VuJztcbmV4cG9ydCAqIGZyb20gJy4vdHhsbSc7XG5leHBvcnQgKiBmcm9tICcuL3hsbSc7XG5leHBvcnQgKiBmcm9tICcuL3JlZ2lzdGVyJztcbiJdfQ==
@@ -1,7 +1,11 @@
1
1
  "use strict";
2
2
  var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
3
  if (k2 === undefined) k2 = k;
4
- Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
5
9
  }) : (function(o, m, k, k2) {
6
10
  if (k2 === undefined) k2 = k;
7
11
  o[k2] = m[k];
@@ -92,4 +96,4 @@ class StellarToken extends xlm_1.Xlm {
92
96
  }
93
97
  exports.StellarToken = StellarToken;
94
98
  StellarToken.tokenPattern = /[A-Z]{1,12}-G[A-Z0-9]{55}/;
95
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RlbGxhclRva2VuLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3N0ZWxsYXJUb2tlbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7O0dBRUc7QUFDSCwwQ0FBNEI7QUFDNUIsK0JBQTRCO0FBQzVCLDhDQUFpRztBQUNqRyxxREFBdUM7QUFDdkMsNENBQTREO0FBSTVELE1BQWEsWUFBYSxTQUFRLFNBQUc7SUFNbkMsWUFBWSxLQUFnQixFQUFFLFdBQStCO1FBQzNELEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNiLElBQUksQ0FBQyxXQUFXLEdBQUcsV0FBVyxDQUFDO1FBRS9CLE1BQU0sQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksRUFBRSxTQUFHLENBQUMseUJBQXlCLENBQUMsQ0FBQztRQUN6RixJQUFJLFNBQVMsS0FBSyxXQUFXLENBQUMsSUFBSSxFQUFFO1lBQ2xDLE1BQU0sSUFBSSx1QkFBWSxDQUFDLGdDQUFnQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7U0FDakY7UUFDRCxJQUFJLENBQUMsS0FBSyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsWUFBWSxDQUFDLEVBQUU7WUFDckQsTUFBTSxJQUFJLHVCQUFZLENBQUMsa0JBQWtCLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztTQUNuRTtRQUNELENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDbkQsQ0FBQztJQUVELE1BQU0sQ0FBQyxzQkFBc0IsQ0FBQyxNQUEwQjtRQUN0RCxPQUFPLENBQUMsS0FBZ0IsRUFBRSxFQUFFLENBQUMsSUFBSSxZQUFZLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQy9ELENBQUM7SUFFRCxNQUFNLENBQUMsdUJBQXVCO1FBQzVCLE1BQU0sV0FBVyxHQUEyQixFQUFFLENBQUM7UUFDL0MsS0FBSyxNQUFNLEtBQUssSUFBSSxDQUFDLEdBQUcsZ0JBQU0sQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxHQUFHLGdCQUFNLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRTtZQUNoRixNQUFNLGdCQUFnQixHQUFHLFlBQVksQ0FBQyxzQkFBc0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNwRSxXQUFXLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxFQUFFLEtBQUssQ0FBQyxJQUFJLEVBQUUsZUFBZSxFQUFFLGdCQUFnQixFQUFFLENBQUMsQ0FBQztTQUMzRTtRQUNELE9BQU8sV0FBVyxDQUFDO0lBQ3JCLENBQUM7SUFFRCxJQUFJLElBQUk7UUFDTixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDO0lBQy9CLENBQUM7SUFFRCxJQUFJLElBQUk7UUFDTixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDO0lBQy9CLENBQUM7SUFFRCxJQUFJLElBQUk7UUFDTixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDO0lBQy9CLENBQUM7SUFFRCxJQUFJLE9BQU87UUFDVCxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDO0lBQ2xDLENBQUM7SUFFRCxJQUFJLElBQUk7UUFDTixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUM7SUFDcEIsQ0FBQztJQUVELElBQUksTUFBTTtRQUNSLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQztJQUN0QixDQUFDO0lBRUQsSUFBSSxhQUFhO1FBQ2YsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQztJQUN4QyxDQUFDO0lBRVMsaUJBQWlCO1FBQ3pCLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUM7SUFDckcsQ0FBQztJQUVELFFBQVE7UUFDTixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDO0lBQy9CLENBQUM7SUFFRCxXQUFXO1FBQ1QsT0FBTyxlQUFlLENBQUM7SUFDekIsQ0FBQztJQUVEOzs7T0FHRztJQUNILHdCQUF3QjtRQUN0QixPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7O0FBL0VILG9DQWdGQztBQS9FaUIseUJBQVksR0FBVywyQkFBMkIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQHByZXR0aWVyXG4gKi9cbmltcG9ydCAqIGFzIF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IFhsbSB9IGZyb20gJy4veGxtJztcbmltcG9ydCB7IEJpdEdvQmFzZSwgQml0R29Kc0Vycm9yLCBDb2luQ29uc3RydWN0b3IsIE5hbWVkQ29pbkNvbnN0cnVjdG9yIH0gZnJvbSAnQGJpdGdvL3Nkay1jb3JlJztcbmltcG9ydCAqIGFzIHN0ZWxsYXIgZnJvbSAnc3RlbGxhci1zZGsnO1xuaW1wb3J0IHsgU3RlbGxhclRva2VuQ29uZmlnLCB0b2tlbnMgfSBmcm9tICdAYml0Z28vc3RhdGljcyc7XG5cbmV4cG9ydCB7IFN0ZWxsYXJUb2tlbkNvbmZpZyB9O1xuXG5leHBvcnQgY2xhc3MgU3RlbGxhclRva2VuIGV4dGVuZHMgWGxtIHtcbiAgc3RhdGljIHJlYWRvbmx5IHRva2VuUGF0dGVybjogUmVnRXhwID0gL1tBLVpdezEsMTJ9LUdbQS1aMC05XXs1NX0vO1xuICBwdWJsaWMgcmVhZG9ubHkgdG9rZW5Db25maWc6IFN0ZWxsYXJUb2tlbkNvbmZpZztcbiAgcHJpdmF0ZSByZWFkb25seSBfY29kZTogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IF9pc3N1ZXI6IHN0cmluZztcblxuICBjb25zdHJ1Y3RvcihiaXRnbzogQml0R29CYXNlLCB0b2tlbkNvbmZpZzogU3RlbGxhclRva2VuQ29uZmlnKSB7XG4gICAgc3VwZXIoYml0Z28pO1xuICAgIHRoaXMudG9rZW5Db25maWcgPSB0b2tlbkNvbmZpZztcblxuICAgIGNvbnN0IFt0b2tlbkNvaW4sIHRva2VuXSA9IF8uc3BsaXQodGhpcy50b2tlbkNvbmZpZy50eXBlLCBYbG0uY29pblRva2VuUGF0dGVyblNlcGFyYXRvcik7XG4gICAgaWYgKHRva2VuQ29pbiAhPT0gdG9rZW5Db25maWcuY29pbikge1xuICAgICAgdGhyb3cgbmV3IEJpdEdvSnNFcnJvcihgaW52YWxpZCBjb2luIGZvdW5kIGluIHRva2VuOiAke3RoaXMudG9rZW5Db25maWcudHlwZX1gKTtcbiAgICB9XG4gICAgaWYgKCF0b2tlbiB8fCAhdG9rZW4ubWF0Y2goU3RlbGxhclRva2VuLnRva2VuUGF0dGVybikpIHtcbiAgICAgIHRocm93IG5ldyBCaXRHb0pzRXJyb3IoYGludmFsaWQgdG9rZW46ICR7dGhpcy50b2tlbkNvbmZpZy50eXBlfWApO1xuICAgIH1cbiAgICBbdGhpcy5fY29kZSwgdGhpcy5faXNzdWVyXSA9IF8uc3BsaXQodG9rZW4sICctJyk7XG4gIH1cblxuICBzdGF0aWMgY3JlYXRlVG9rZW5Db25zdHJ1Y3Rvcihjb25maWc6IFN0ZWxsYXJUb2tlbkNvbmZpZyk6IENvaW5Db25zdHJ1Y3RvciB7XG4gICAgcmV0dXJuIChiaXRnbzogQml0R29CYXNlKSA9PiBuZXcgU3RlbGxhclRva2VuKGJpdGdvLCBjb25maWcpO1xuICB9XG5cbiAgc3RhdGljIGNyZWF0ZVRva2VuQ29uc3RydWN0b3JzKCk6IE5hbWVkQ29pbkNvbnN0cnVjdG9yW10ge1xuICAgIGNvbnN0IHRva2Vuc0N0b3JzOiBOYW1lZENvaW5Db25zdHJ1Y3RvcltdID0gW107XG4gICAgZm9yIChjb25zdCB0b2tlbiBvZiBbLi4udG9rZW5zLmJpdGNvaW4ueGxtLnRva2VucywgLi4udG9rZW5zLnRlc3RuZXQueGxtLnRva2Vuc10pIHtcbiAgICAgIGNvbnN0IHRva2VuQ29uc3RydWN0b3IgPSBTdGVsbGFyVG9rZW4uY3JlYXRlVG9rZW5Db25zdHJ1Y3Rvcih0b2tlbik7XG4gICAgICB0b2tlbnNDdG9ycy5wdXNoKHsgbmFtZTogdG9rZW4udHlwZSwgY29pbkNvbnN0cnVjdG9yOiB0b2tlbkNvbnN0cnVjdG9yIH0pO1xuICAgIH1cbiAgICByZXR1cm4gdG9rZW5zQ3RvcnM7XG4gIH1cblxuICBnZXQgdHlwZSgpIHtcbiAgICByZXR1cm4gdGhpcy50b2tlbkNvbmZpZy50eXBlO1xuICB9XG5cbiAgZ2V0IG5hbWUoKSB7XG4gICAgcmV0dXJuIHRoaXMudG9rZW5Db25maWcubmFtZTtcbiAgfVxuXG4gIGdldCBjb2luKCkge1xuICAgIHJldHVybiB0aGlzLnRva2VuQ29uZmlnLmNvaW47XG4gIH1cblxuICBnZXQgbmV0d29yaygpIHtcbiAgICByZXR1cm4gdGhpcy50b2tlbkNvbmZpZy5uZXR3b3JrO1xuICB9XG5cbiAgZ2V0IGNvZGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2NvZGU7XG4gIH1cblxuICBnZXQgaXNzdWVyKCkge1xuICAgIHJldHVybiB0aGlzLl9pc3N1ZXI7XG4gIH1cblxuICBnZXQgZGVjaW1hbFBsYWNlcygpIHtcbiAgICByZXR1cm4gdGhpcy50b2tlbkNvbmZpZy5kZWNpbWFsUGxhY2VzO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldFN0ZWxsYXJOZXR3b3JrKCk6IHN0ZWxsYXIuTmV0d29ya3Mge1xuICAgIHJldHVybiB0aGlzLnRva2VuQ29uZmlnLm5ldHdvcmsgPT09ICdUZXN0bmV0JyA/IHN0ZWxsYXIuTmV0d29ya3MuVEVTVE5FVCA6IHN0ZWxsYXIuTmV0d29ya3MuUFVCTElDO1xuICB9XG5cbiAgZ2V0Q2hhaW4oKSB7XG4gICAgcmV0dXJuIHRoaXMudG9rZW5Db25maWcudHlwZTtcbiAgfVxuXG4gIGdldEZ1bGxOYW1lKCkge1xuICAgIHJldHVybiAnU3RlbGxhciBUb2tlbic7XG4gIH1cblxuICAvKipcbiAgICogRmxhZyBmb3Igc2VuZGluZyB2YWx1ZSBvZiAwXG4gICAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIG9rYXkgdG8gc2VuZCAwIHZhbHVlLCBmYWxzZSBvdGhlcndpc2VcbiAgICovXG4gIHZhbHVlbGVzc1RyYW5zZmVyQWxsb3dlZCgpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufVxuIl19
99
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RlbGxhclRva2VuLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3N0ZWxsYXJUb2tlbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBOztHQUVHO0FBQ0gsMENBQTRCO0FBQzVCLCtCQUE0QjtBQUM1Qiw4Q0FBaUc7QUFDakcscURBQXVDO0FBQ3ZDLDRDQUE0RDtBQUk1RCxNQUFhLFlBQWEsU0FBUSxTQUFHO0lBTW5DLFlBQVksS0FBZ0IsRUFBRSxXQUErQjtRQUMzRCxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDYixJQUFJLENBQUMsV0FBVyxHQUFHLFdBQVcsQ0FBQztRQUUvQixNQUFNLENBQUMsU0FBUyxFQUFFLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEVBQUUsU0FBRyxDQUFDLHlCQUF5QixDQUFDLENBQUM7UUFDekYsSUFBSSxTQUFTLEtBQUssV0FBVyxDQUFDLElBQUksRUFBRTtZQUNsQyxNQUFNLElBQUksdUJBQVksQ0FBQyxnQ0FBZ0MsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1NBQ2pGO1FBQ0QsSUFBSSxDQUFDLEtBQUssSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLFlBQVksQ0FBQyxFQUFFO1lBQ3JELE1BQU0sSUFBSSx1QkFBWSxDQUFDLGtCQUFrQixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7U0FDbkU7UUFDRCxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ25ELENBQUM7SUFFRCxNQUFNLENBQUMsc0JBQXNCLENBQUMsTUFBMEI7UUFDdEQsT0FBTyxDQUFDLEtBQWdCLEVBQUUsRUFBRSxDQUFDLElBQUksWUFBWSxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQztJQUMvRCxDQUFDO0lBRUQsTUFBTSxDQUFDLHVCQUF1QjtRQUM1QixNQUFNLFdBQVcsR0FBMkIsRUFBRSxDQUFDO1FBQy9DLEtBQUssTUFBTSxLQUFLLElBQUksQ0FBQyxHQUFHLGdCQUFNLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsR0FBRyxnQkFBTSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUU7WUFDaEYsTUFBTSxnQkFBZ0IsR0FBRyxZQUFZLENBQUMsc0JBQXNCLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDcEUsV0FBVyxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksRUFBRSxLQUFLLENBQUMsSUFBSSxFQUFFLGVBQWUsRUFBRSxnQkFBZ0IsRUFBRSxDQUFDLENBQUM7U0FDM0U7UUFDRCxPQUFPLFdBQVcsQ0FBQztJQUNyQixDQUFDO0lBRUQsSUFBSSxJQUFJO1FBQ04sT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQztJQUMvQixDQUFDO0lBRUQsSUFBSSxJQUFJO1FBQ04sT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQztJQUMvQixDQUFDO0lBRUQsSUFBSSxJQUFJO1FBQ04sT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQztJQUMvQixDQUFDO0lBRUQsSUFBSSxPQUFPO1FBQ1QsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQztJQUNsQyxDQUFDO0lBRUQsSUFBSSxJQUFJO1FBQ04sT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDO0lBQ3BCLENBQUM7SUFFRCxJQUFJLE1BQU07UUFDUixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUM7SUFDdEIsQ0FBQztJQUVELElBQUksYUFBYTtRQUNmLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUM7SUFDeEMsQ0FBQztJQUVTLGlCQUFpQjtRQUN6QixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDO0lBQ3JHLENBQUM7SUFFRCxRQUFRO1FBQ04sT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQztJQUMvQixDQUFDO0lBRUQsV0FBVztRQUNULE9BQU8sZUFBZSxDQUFDO0lBQ3pCLENBQUM7SUFFRDs7O09BR0c7SUFDSCx3QkFBd0I7UUFDdEIsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDOztBQS9FSCxvQ0FnRkM7QUEvRWlCLHlCQUFZLEdBQVcsMkJBQTJCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBwcmV0dGllclxuICovXG5pbXBvcnQgKiBhcyBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyBYbG0gfSBmcm9tICcuL3hsbSc7XG5pbXBvcnQgeyBCaXRHb0Jhc2UsIEJpdEdvSnNFcnJvciwgQ29pbkNvbnN0cnVjdG9yLCBOYW1lZENvaW5Db25zdHJ1Y3RvciB9IGZyb20gJ0BiaXRnby9zZGstY29yZSc7XG5pbXBvcnQgKiBhcyBzdGVsbGFyIGZyb20gJ3N0ZWxsYXItc2RrJztcbmltcG9ydCB7IFN0ZWxsYXJUb2tlbkNvbmZpZywgdG9rZW5zIH0gZnJvbSAnQGJpdGdvL3N0YXRpY3MnO1xuXG5leHBvcnQgeyBTdGVsbGFyVG9rZW5Db25maWcgfTtcblxuZXhwb3J0IGNsYXNzIFN0ZWxsYXJUb2tlbiBleHRlbmRzIFhsbSB7XG4gIHN0YXRpYyByZWFkb25seSB0b2tlblBhdHRlcm46IFJlZ0V4cCA9IC9bQS1aXXsxLDEyfS1HW0EtWjAtOV17NTV9LztcbiAgcHVibGljIHJlYWRvbmx5IHRva2VuQ29uZmlnOiBTdGVsbGFyVG9rZW5Db25maWc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2NvZGU6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBfaXNzdWVyOiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3IoYml0Z286IEJpdEdvQmFzZSwgdG9rZW5Db25maWc6IFN0ZWxsYXJUb2tlbkNvbmZpZykge1xuICAgIHN1cGVyKGJpdGdvKTtcbiAgICB0aGlzLnRva2VuQ29uZmlnID0gdG9rZW5Db25maWc7XG5cbiAgICBjb25zdCBbdG9rZW5Db2luLCB0b2tlbl0gPSBfLnNwbGl0KHRoaXMudG9rZW5Db25maWcudHlwZSwgWGxtLmNvaW5Ub2tlblBhdHRlcm5TZXBhcmF0b3IpO1xuICAgIGlmICh0b2tlbkNvaW4gIT09IHRva2VuQ29uZmlnLmNvaW4pIHtcbiAgICAgIHRocm93IG5ldyBCaXRHb0pzRXJyb3IoYGludmFsaWQgY29pbiBmb3VuZCBpbiB0b2tlbjogJHt0aGlzLnRva2VuQ29uZmlnLnR5cGV9YCk7XG4gICAgfVxuICAgIGlmICghdG9rZW4gfHwgIXRva2VuLm1hdGNoKFN0ZWxsYXJUb2tlbi50b2tlblBhdHRlcm4pKSB7XG4gICAgICB0aHJvdyBuZXcgQml0R29Kc0Vycm9yKGBpbnZhbGlkIHRva2VuOiAke3RoaXMudG9rZW5Db25maWcudHlwZX1gKTtcbiAgICB9XG4gICAgW3RoaXMuX2NvZGUsIHRoaXMuX2lzc3Vlcl0gPSBfLnNwbGl0KHRva2VuLCAnLScpO1xuICB9XG5cbiAgc3RhdGljIGNyZWF0ZVRva2VuQ29uc3RydWN0b3IoY29uZmlnOiBTdGVsbGFyVG9rZW5Db25maWcpOiBDb2luQ29uc3RydWN0b3Ige1xuICAgIHJldHVybiAoYml0Z286IEJpdEdvQmFzZSkgPT4gbmV3IFN0ZWxsYXJUb2tlbihiaXRnbywgY29uZmlnKTtcbiAgfVxuXG4gIHN0YXRpYyBjcmVhdGVUb2tlbkNvbnN0cnVjdG9ycygpOiBOYW1lZENvaW5Db25zdHJ1Y3RvcltdIHtcbiAgICBjb25zdCB0b2tlbnNDdG9yczogTmFtZWRDb2luQ29uc3RydWN0b3JbXSA9IFtdO1xuICAgIGZvciAoY29uc3QgdG9rZW4gb2YgWy4uLnRva2Vucy5iaXRjb2luLnhsbS50b2tlbnMsIC4uLnRva2Vucy50ZXN0bmV0LnhsbS50b2tlbnNdKSB7XG4gICAgICBjb25zdCB0b2tlbkNvbnN0cnVjdG9yID0gU3RlbGxhclRva2VuLmNyZWF0ZVRva2VuQ29uc3RydWN0b3IodG9rZW4pO1xuICAgICAgdG9rZW5zQ3RvcnMucHVzaCh7IG5hbWU6IHRva2VuLnR5cGUsIGNvaW5Db25zdHJ1Y3RvcjogdG9rZW5Db25zdHJ1Y3RvciB9KTtcbiAgICB9XG4gICAgcmV0dXJuIHRva2Vuc0N0b3JzO1xuICB9XG5cbiAgZ2V0IHR5cGUoKSB7XG4gICAgcmV0dXJuIHRoaXMudG9rZW5Db25maWcudHlwZTtcbiAgfVxuXG4gIGdldCBuYW1lKCkge1xuICAgIHJldHVybiB0aGlzLnRva2VuQ29uZmlnLm5hbWU7XG4gIH1cblxuICBnZXQgY29pbigpIHtcbiAgICByZXR1cm4gdGhpcy50b2tlbkNvbmZpZy5jb2luO1xuICB9XG5cbiAgZ2V0IG5ldHdvcmsoKSB7XG4gICAgcmV0dXJuIHRoaXMudG9rZW5Db25maWcubmV0d29yaztcbiAgfVxuXG4gIGdldCBjb2RlKCkge1xuICAgIHJldHVybiB0aGlzLl9jb2RlO1xuICB9XG5cbiAgZ2V0IGlzc3VlcigpIHtcbiAgICByZXR1cm4gdGhpcy5faXNzdWVyO1xuICB9XG5cbiAgZ2V0IGRlY2ltYWxQbGFjZXMoKSB7XG4gICAgcmV0dXJuIHRoaXMudG9rZW5Db25maWcuZGVjaW1hbFBsYWNlcztcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRTdGVsbGFyTmV0d29yaygpOiBzdGVsbGFyLk5ldHdvcmtzIHtcbiAgICByZXR1cm4gdGhpcy50b2tlbkNvbmZpZy5uZXR3b3JrID09PSAnVGVzdG5ldCcgPyBzdGVsbGFyLk5ldHdvcmtzLlRFU1RORVQgOiBzdGVsbGFyLk5ldHdvcmtzLlBVQkxJQztcbiAgfVxuXG4gIGdldENoYWluKCkge1xuICAgIHJldHVybiB0aGlzLnRva2VuQ29uZmlnLnR5cGU7XG4gIH1cblxuICBnZXRGdWxsTmFtZSgpIHtcbiAgICByZXR1cm4gJ1N0ZWxsYXIgVG9rZW4nO1xuICB9XG5cbiAgLyoqXG4gICAqIEZsYWcgZm9yIHNlbmRpbmcgdmFsdWUgb2YgMFxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiBva2F5IHRvIHNlbmQgMCB2YWx1ZSwgZmFsc2Ugb3RoZXJ3aXNlXG4gICAqL1xuICB2YWx1ZWxlc3NUcmFuc2ZlckFsbG93ZWQoKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbn1cbiJdfQ==
package/dist/src/xlm.js CHANGED
@@ -1,7 +1,11 @@
1
1
  "use strict";
2
2
  var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
3
  if (k2 === undefined) k2 = k;
4
- Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
5
9
  }) : (function(o, m, k, k2) {
6
10
  if (k2 === undefined) k2 = k;
7
11
  o[k2] = m[k];
@@ -456,12 +460,12 @@ class Xlm extends sdk_core_1.BaseCoin {
456
460
  const isKrsRecovery = params.backupKey.startsWith('G') && !params.userKey.startsWith('G');
457
461
  const isUnsignedSweep = params.backupKey.startsWith('G') && params.userKey.startsWith('G');
458
462
  if (isKrsRecovery) {
459
- sdk_core_1.checkKrsProvider(this, params.krsProvider);
463
+ (0, sdk_core_1.checkKrsProvider)(this, params.krsProvider);
460
464
  }
461
465
  if (!this.isValidAddress(params.recoveryDestination)) {
462
466
  throw new sdk_core_1.InvalidAddressError('Invalid destination address!');
463
467
  }
464
- const [userKey, backupKey] = getStellarKeys_1.getStellarKeys(this.bitgo, params);
468
+ const [userKey, backupKey] = (0, getStellarKeys_1.getStellarKeys)(this.bitgo, params);
465
469
  if (!params.rootAddress || !stellar.StrKey.isValidEd25519PublicKey(params.rootAddress)) {
466
470
  throw new Error(`Invalid wallet address: ${params.rootAddress}`);
467
471
  }
@@ -469,7 +473,7 @@ class Xlm extends sdk_core_1.BaseCoin {
469
473
  const destinationUrl = `${this.getHorizonUrl()}/accounts/${params.recoveryDestination}`;
470
474
  let accountData;
471
475
  try {
472
- accountData = await sdk_api_1.toBitgoRequest(request.get(accountDataUrl)).result();
476
+ accountData = await (0, sdk_api_1.toBitgoRequest)(request.get(accountDataUrl)).result();
473
477
  }
474
478
  catch (e) {
475
479
  throw new Error('Unable to reach the Stellar network via Horizon.');
@@ -868,7 +872,7 @@ class Xlm extends sdk_core_1.BaseCoin {
868
872
  throw new Error('cannot fetch keychains without networking');
869
873
  }
870
874
  else if (!keychains) {
871
- keychains = await sdk_core_1.promiseProps({
875
+ keychains = await (0, sdk_core_1.promiseProps)({
872
876
  user: this.keychains().get({ id: wallet.keyIds()[sdk_core_1.KeyIndices.USER] }),
873
877
  backup: this.keychains().get({ id: wallet.keyIds()[sdk_core_1.KeyIndices.BACKUP] }),
874
878
  });
@@ -876,11 +880,11 @@ class Xlm extends sdk_core_1.BaseCoin {
876
880
  if (!keychains || !keychains.backup || !keychains.user) {
877
881
  throw new Error('keychains are required, but could not be fetched');
878
882
  }
879
- assert_1.default(keychains.backup.pub);
883
+ (0, assert_1.default)(keychains.backup.pub);
880
884
  if (this.verifySignature(keychains.backup.pub, tx.hash(), userSignature)) {
881
885
  throw new Error('transaction signed with wrong key');
882
886
  }
883
- assert_1.default(keychains.user.pub);
887
+ (0, assert_1.default)(keychains.user.pub);
884
888
  if (!this.verifySignature(keychains.user.pub, tx.hash(), userSignature)) {
885
889
  throw new Error('transaction signature invalid');
886
890
  }
@@ -919,4 +923,4 @@ Xlm.maxTrustlineLimit = '9223372036854775807';
919
923
  * @param tx transaction to convert
920
924
  */
921
925
  Xlm.txToString = (tx) => tx.toEnvelope().toXDR('base64');
922
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoieGxtLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3hsbS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsb0RBQTRCO0FBQzVCLDBDQUE0QjtBQUM1Qix5REFBMkM7QUFDM0MseUNBQTJCO0FBQzNCLG9EQUFzQztBQUN0QyxxREFBdUM7QUFDdkMsK0NBQXlDO0FBRXpDLDhDQTBCeUI7QUFDekIsNENBQWdEO0FBQ2hELHFEQUFrRDtBQStHbEQsTUFBYSxHQUFJLFNBQVEsbUJBQVE7SUFRL0IsWUFBWSxLQUFnQjtRQUMxQixLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDYixJQUFJLENBQUMsVUFBVSxHQUFHLFdBQVcsQ0FBQyxDQUFDLHFDQUFxQztJQUN0RSxDQUFDO0lBRUQsTUFBTSxDQUFDLGNBQWMsQ0FBQyxLQUFnQjtRQUNwQyxPQUFPLElBQUksR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3hCLENBQUM7SUFFUyxpQkFBaUI7UUFDekIsT0FBTyxPQUFPLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQztJQUNqQyxDQUFDO0lBRUQ7O09BRUc7SUFDSCxhQUFhO1FBQ1gsT0FBTyxHQUFHLENBQUM7SUFDYixDQUFDO0lBRUQ7O09BRUc7SUFDSCxRQUFRO1FBQ04sT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRUQ7O09BRUc7SUFDSCxTQUFTO1FBQ1AsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRUQ7O09BRUc7SUFDSCxXQUFXO1FBQ1QsT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQztJQUVEOztPQUVHO0lBQ0gsc0JBQXNCO1FBQ3BCLE9BQU8saUJBQU0sQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLDBCQUEwQixDQUFDO0lBQzdFLENBQUM7SUFFRDs7T0FFRztJQUNILGFBQWE7UUFDWCxPQUFPLDZCQUE2QixDQUFD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QVMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDM0IsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxFQUFFLGFBQWEsQ0FBQyxFQUFFO2dCQUN2RSxNQUFNLElBQUksS0FBSyxDQUFDLCtCQUErQixDQUFDLENBQUM7YUFDbEQ7U0FDRjtRQUVELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELGlCQUFpQjtJQUNqQixpQkFBaUI7UUFDZixNQUFNLElBQUksdUJBQVksQ0FBQyx3REFBd0QsQ0FBQyxDQUFDO0lBQ25GLENBQUM7SUFVRCxLQUFLLENBQUMsZ0JBQWdCLENBQUMsTUFBK0I7UUFDcEQsT0FBTyxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCx3QkFBd0I7UUFDdEIsT0FBTztZQUNMLHVCQUF1QixFQUFFLElBQUk7WUFDN0IsZ0NBQWdDLEVBQUUsS0FBSztTQUN4QyxDQUFDO0lBQ0osQ0FBQzs7QUFsK0JILGtCQW0rQkM7QUFqK0J3Qix5QkFBcUIsR0FBRyxHQUFHLENBQUMsQ0FBQyxzQ0FBc0M7QUFDMUUsYUFBUyxHQUFXLG9CQUFvQixDQUFDLENBQUMsb0RBQW9EO0FBQzlHLHFEQUFxRDtBQUNyRCwwR0FBMEc7QUFDMUYscUJBQWlCLEdBQVcscUJBQXFCLENBQUM7QUFxOEJsRTs7OztHQUlHO0FBQ2MsY0FBVSxHQUFHLENBQUMsRUFBdUIsRUFBVSxFQUFFLENBQy9ELEVBQUUsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxLQUErQixDQUFDLFFBQVEsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGFzc2VydCBmcm9tICdhc3NlcnQnO1xuaW1wb3J0ICogYXMgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0ICogYXMgcXVlcnlzdHJpbmcgZnJvbSAncXVlcnlzdHJpbmcnO1xuaW1wb3J0ICogYXMgdXJsIGZyb20gJ3VybCc7XG5pbXBvcnQgKiBhcyByZXF1ZXN0IGZyb20gJ3N1cGVyYWdlbnQnO1xuaW1wb3J0ICogYXMgc3RlbGxhciBmcm9tICdzdGVsbGFyLXNkayc7XG5pbXBvcnQgeyBCaWdOdW1iZXIgfSBmcm9tICdiaWdudW1iZXIuanMnO1xuXG5pbXBvcnQge1xuICBCYXNlQ29pbixcbiAgQml0R29CYXNlLFxuICBjaGVja0tyc1Byb3ZpZGVyLFxuICBjb21tb24sXG4gIEV4dHJhUHJlYnVpbGRQYXJhbXNPcHRpb25zLFxuICBJbnZhbGlkQWRkcmVzc0Vycm9yLFxuICBJbnZhbGlkTWVtb0lkRXJyb3IsXG4gIElUcmFuc2FjdGlvblJlY2lwaWVudCxcbiAgS2V5SW5kaWNlcyxcbiAgS2V5UGFpcixcbiAgUGFyc2VkVHJhbnNhY3Rpb24sXG4gIFBhcnNlVHJhbnNhY3Rpb25PcHRpb25zLFxuICBwcm9taXNlUHJvcHMsXG4gIFNpZ25UcmFuc2FjdGlvbk9wdGlvbnMgYXMgQmFzZVNpZ25UcmFuc2FjdGlvbk9wdGlvbnMsXG4gIFN0ZWxsYXJGZWRlcmF0aW9uVXNlck5vdEZvdW5kRXJyb3IsXG4gIFRva2VuRW5hYmxlbWVudENvbmZpZyxcbiAgVHJhbnNhY3Rpb25FeHBsYW5hdGlvbiBhcyBCYXNlVHJhbnNhY3Rpb25FeHBsYW5hdGlvbixcbiAgVHJhbnNhY3Rpb25QYXJhbXMgYXMgQmFzZVRyYW5zYWN0aW9uUGFyYW1zLFxuICBUcmFuc2FjdGlvblByZWJ1aWxkIGFzIEJhc2VUcmFuc2FjdGlvblByZWJ1aWxkLFxuICBUcmFuc2FjdGlvblJlY2lwaWVudCBhcyBCYXNlVHJhbnNhY3Rpb25PdXRwdXQsXG4gIFVuZXhwZWN0ZWRBZGRyZXNzRXJyb3IsXG4gIFZlcmlmeUFkZHJlc3NPcHRpb25zIGFzIEJhc2VWZXJpZnlBZGRyZXNzT3B0aW9ucyxcbiAgVmVyaWZ5VHJhbnNhY3Rpb25PcHRpb25zIGFzIEJhc2VWZXJpZnlUcmFuc2FjdGlvbk9wdGlvbnMsXG4gIFdhbGxldCxcbiAgTm90U3VwcG9ydGVkLFxufSBmcm9tICdAYml0Z28vc2RrLWNvcmUnO1xuaW1wb3J0IHsgdG9CaXRnb1JlcXVlc3QgfSBmcm9tICdAYml0Z28vc2RrLWFwaSc7XG5pbXBvcnQgeyBnZXRTdGVsbGFyS2V5cyB9IGZyb20gJy4vZ2V0U3RlbGxhcktleXMnO1xuXG4vKipcbiAqIFhMTSBhY2NvdW50cyBzdXBwb3J0IHZpcnR1YWwgKG11eGVkKSBhZGRyZXNzZXNcbiAqIEEgYmFzZSBhZGRyZXNzIHN0YXJ0cyB3aXRoIFwiR1wiIGFuZCBpcyB0aWVkIHRvIHRoZSB1bmRlcmx5aW5nIFwicmVhbFwiIGFjY291bnRcbiAqIEEgbXV4ZWQgYWRkcmVzcyBzdGFydHMgd2l0aCBcIk1cIiBhbmQgY29tYmluZXMgdGhlIGJhc2UgYWRkcmVzcyB3aXRoIGEgNjQtYml0IGludGVnZXIgSUQgaW4gb3JkZXIgdG8gcHJvdmlkZVxuICogYW4gYWx0ZXJuYXRpdmUgdG8gbWVtbyBpZHMuXG4gKi9cbmludGVyZmFjZSBBZGRyZXNzRGV0YWlscyB7XG4gIGJhc2VBZGRyZXNzOiBzdHJpbmc7XG4gIGFkZHJlc3M6IHN0cmluZztcbiAgaWQ/OiBzdHJpbmc7XG4gIG1lbW9JZD86IHN0cmluZyB8IHVuZGVmaW5lZDtcbn1cblxuaW50ZXJmYWNlIE1lbW8ge1xuICB0eXBlOiBzdGVsbGFyLk1lbW9UeXBlO1xuICB2YWx1ZTogc3RyaW5nO1xufVxuXG5pbnRlcmZhY2UgSW5pdGlhdGVSZWNvdmVyeU9wdGlvbnMge1xuICB1c2VyS2V5OiBzdHJpbmc7XG4gIGJhY2t1cEtleTogc3RyaW5nO1xuICByZWNvdmVyeURlc3RpbmF0aW9uOiBzdHJpbmc7XG4gIGtyc1Byb3ZpZGVyPzogc3RyaW5nO1xuICB3YWxsZXRQYXNzcGhyYXNlPzogc3RyaW5nO1xufVxuXG5pbnRlcmZhY2UgUmVjb3ZlcnlPcHRpb25zIGV4dGVuZHMgSW5pdGlhdGVSZWNvdmVyeU9wdGlvbnMge1xuICByb290QWRkcmVzcz86IHN0cmluZztcbn1cblxuaW50ZXJmYWNlIFJlY292ZXJ5VHJhbnNhY3Rpb24ge1xuICB0eDogc3RyaW5nO1xuICByZWNvdmVyeUFtb3VudDogbnVtYmVyO1xuICBiYWNrdXBLZXk/OiBzdHJpbmc7XG4gIGNvaW4/OiBzdHJpbmc7XG59XG5cbmludGVyZmFjZSBCdWlsZE9wdGlvbnMge1xuICB3YWxsZXQ/OiBXYWxsZXQ7XG4gIHJlY2lwaWVudHM/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+W107XG4gIHR5cGU/OiBzdHJpbmc7XG4gIHdhbGxldFBhc3NwaHJhc2U/OiBzdHJpbmc7XG4gIFtpbmRleDogc3RyaW5nXTogdW5rbm93bjtcbn1cblxuaW50ZXJmYWNlIFRyYW5zYWN0aW9uUHJlYnVpbGQgZXh0ZW5kcyBCYXNlVHJhbnNhY3Rpb25QcmVidWlsZCB7XG4gIHR4QmFzZTY0OiBzdHJpbmc7XG59XG5cbmludGVyZmFjZSBTaWduVHJhbnNhY3Rpb25PcHRpb25zIGV4dGVuZHMgQmFzZVNpZ25UcmFuc2FjdGlvbk9wdGlvbnMge1xuICB0eFByZWJ1aWxkOiBUcmFuc2FjdGlvblByZWJ1aWxkO1xuICBwcnY6IHN0cmluZztcbn1cblxuaW50ZXJmYWNlIEhhbGZTaWduZWRUcmFuc2FjdGlvbiB7XG4gIGhhbGZTaWduZWQ6IHtcbiAgICB0eEJhc2U2NDogc3RyaW5nO1xuICB9O1xuICByZWNpcGllbnRzPzogSVRyYW5zYWN0aW9uUmVjaXBpZW50W107XG4gIHR5cGU/OiBzdHJpbmc7XG59XG5cbmludGVyZmFjZSBTdXBwbGVtZW50R2VuZXJhdGVXYWxsZXRPcHRpb25zIHtcbiAgcm9vdFByaXZhdGVLZXk/OiBzdHJpbmc7XG59XG5cbmludGVyZmFjZSBFeHBsYWluVHJhbnNhY3Rpb25PcHRpb25zIHtcbiAgdHhIZXg/OiBzdHJpbmc7XG4gIHR4QmFzZTY0Pzogc3RyaW5nO1xufVxuXG5pbnRlcmZhY2UgVHJhbnNhY3Rpb25NZW1vIHtcbiAgdmFsdWU/OiBzdHJpbmc7XG4gIHR5cGU/OiBzdHJpbmc7XG59XG5cbmludGVyZmFjZSBUcmFuc2FjdGlvbk9wZXJhdGlvbiB7XG4gIHR5cGU6IHN0cmluZztcbiAgY29pbjogc3RyaW5nO1xuICBsaW1pdD86IHN0cmluZztcbiAgYXNzZXQ/OiBzdGVsbGFyLkFzc2V0O1xufVxuXG5pbnRlcmZhY2UgVHJhbnNhY3Rpb25PdXRwdXQgZXh0ZW5kcyBCYXNlVHJhbnNhY3Rpb25PdXRwdXQge1xuICBjb2luOiBzdHJpbmc7XG59XG5cbmludGVyZmFjZSBUcmFuc2FjdGlvbkV4cGxhbmF0aW9uIGV4dGVuZHMgQmFzZVRyYW5zYWN0aW9uRXhwbGFuYXRpb24ge1xuICBtZW1vOiBUcmFuc2FjdGlvbk1lbW87XG59XG5cbmludGVyZmFjZSBWZXJpZnlBZGRyZXNzT3B0aW9ucyBleHRlbmRzIEJhc2VWZXJpZnlBZGRyZXNzT3B0aW9ucyB7XG4gIHJvb3RBZGRyZXNzOiBzdHJpbmc7XG59XG5cbmludGVyZmFjZSBUcnVzdGxpbmVPcHRpb25zIHtcbiAgdG9rZW46IHN0cmluZztcbiAgYWN0aW9uOiBzdHJpbmc7XG4gIGxpbWl0Pzogc3RyaW5nO1xufVxuXG5pbnRlcmZhY2UgVHJhbnNhY3Rpb25QYXJhbXMgZXh0ZW5kcyBCYXNlVHJhbnNhY3Rpb25QYXJhbXMge1xuICB0cnVzdGxpbmVzPzogVHJ1c3RsaW5lT3B0aW9uc1tdO1xufVxuXG5pbnRlcmZhY2UgVmVyaWZ5VHJhbnNhY3Rpb25PcHRpb25zIGV4dGVuZHMgQmFzZVZlcmlmeVRyYW5zYWN0aW9uT3B0aW9ucyB7XG4gIHR4UGFyYW1zOiBUcmFuc2FjdGlvblBhcmFtcztcbn1cblxuZXhwb3J0IGNsYXNzIFhsbSBleHRlbmRzIEJhc2VDb2luIHtcbiAgcHVibGljIHJlYWRvbmx5IGhvbWVEb21haW46IHN0cmluZztcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSB0b2tlblBhdHRlcm5TZXBhcmF0b3IgPSAnLSc7IC8vIHNlcGFyYXRvciBmb3IgdG9rZW4gY29kZSBhbmQgaXNzdWVyXG4gIHN0YXRpYyByZWFkb25seSBtYXhNZW1vSWQ6IHN0cmluZyA9ICcweEZGRkZGRkZGRkZGRkZGRkYnOyAvLyBtYXggdW5zaWduZWQgNjQtYml0IG51bWJlciA9IDE4NDQ2NzQ0MDczNzA5NTUxNjE1XG4gIC8vIG1heCBpbnQ2NCBudW1iZXIgc3VwcG9ydGVkIGJ5IHRoZSBuZXR3b3JrICgyXjYzKS0xXG4gIC8vIFNlZTogaHR0cHM6Ly93d3cuc3RlbGxhci5vcmcvZGV2ZWxvcGVycy9ndWlkZXMvY29uY2VwdHMvYXNzZXRzLmh0bWwjYW1vdW50LXByZWNpc2lvbi1hbmQtcmVwcmVzZW50YXRpb25cbiAgc3RhdGljIHJlYWRvbmx5IG1heFRydXN0bGluZUxpbWl0OiBzdHJpbmcgPSAnOTIyMzM3MjAzNjg1NDc3NTgwNyc7XG5cbiAgY29uc3RydWN0b3IoYml0Z286IEJpdEdvQmFzZSkge1xuICAgIHN1cGVyKGJpdGdvKTtcbiAgICB0aGlzLmhvbWVEb21haW4gPSAnYml0Z28uY29tJzsgLy8gdXNlZCBmb3IgcmV2ZXJzZSBmZWRlcmF0aW9uIGxvb2t1cFxuICB9XG5cbiAgc3RhdGljIGNyZWF0ZUluc3RhbmNlKGJpdGdvOiBCaXRHb0Jhc2UpOiBCYXNlQ29pbiB7XG4gICAgcmV0dXJuIG5ldyBYbG0oYml0Z28pO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldFN0ZWxsYXJOZXR3b3JrKCk6IHN0ZWxsYXIuTmV0d29ya3Mge1xuICAgIHJldHVybiBzdGVsbGFyLk5ldHdvcmtzLlBVQkxJQztcbiAgfVxuXG4gIC8qKlxuICAgKiBGYWN0b3IgYmV0d2VlbiB0aGUgYmFzZSB1bml0IGFuZCBpdHMgc21hbGxlc3Qgc3ViZGl2aXNvblxuICAgKi9cbiAgZ2V0QmFzZUZhY3RvcigpIHtcbiAgICByZXR1cm4gMWU3O1xuICB9XG5cbiAgLyoqXG4gICAqIElkZW50aWZpZXIgZm9yIHRoZSBibG9ja2NoYWluIHdoaWNoIHN1cHBvcnRzIHRoaXMgY29pblxuICAgKi9cbiAgZ2V0Q2hhaW4oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gJ3hsbSc7XG4gIH1cblxuICAvKipcbiAgICogSWRlbnRpZmllciBmb3IgdGhlIGNvaW4gZmFtaWx5XG4gICAqL1xuICBnZXRGYW1pbHkoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gJ3hsbSc7XG4gIH1cblxuICAvKipcbiAgICogQ29tcGxldGUgaHVtYW4tcmVhZGFibGUgbmFtZSBvZiB0aGlzIGNvaW5cbiAgICovXG4gIGdldEZ1bGxOYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuICdTdGVsbGFyJztcbiAgfVxuXG4gIC8qKlxuICAgKiBVcmwgYXQgd2hpY2ggdGhlIHN0ZWxsYXIgZmVkZXJhdGlvbiBzZXJ2ZXIgY2FuIGJlIHJlYWNoZWRcbiAgICovXG4gIGdldEZlZGVyYXRpb25TZXJ2ZXJVcmwoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gY29tbW9uLkVudmlyb25tZW50c1t0aGlzLmJpdGdvLmdldEVudigpXS5zdGVsbGFyRmVkZXJhdGlvblNlcnZlclVybDtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcmwgYXQgd2hpY2ggaG9yaXpvbiBjYW4gYmUgcmVhY2hlZFxuICAgKi9cbiAgZ2V0SG9yaXpvblVybCgpOiBzdHJpbmcge1xuICAgIHJldHVybiAnaHR0cHM6Ly9ob3Jpem9uLnN0ZWxsYXIub3JnJztcbiAgfVxuXG4gIC8qKiBpbmhlcml0ZG9jICovXG4gIGdlbmVyYXRlS2V5UGFpcihzZWVkPzogQnVmZmVyKTogS2V5UGFpciB7XG4gICAgY29uc3QgcGFpciA9IHNlZWQgPyBzdGVsbGFyLktleXBhaXIuZnJvbVJhd0VkMjU1MTlTZWVkKHNlZWQpIDogc3RlbGxhci5LZXlwYWlyLnJhbmRvbSgpO1xuICAgIHJldHVybiB7XG4gICAgICBwdWI6IHBhaXIucHVibGljS2V5KCksXG4gICAgICBwcnY6IHBhaXIuc2VjcmV0KCksXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgZGVjb2RlZCBlZDI1NTE5IHB1YmxpYyBrZXkgZnJvbSByYXcgZGF0YVxuICAgKlxuICAgKiBAcGFyYW0gcHViIFJhdyBwdWJsaWMga2V5XG4gICAqIEByZXR1cm5zIEVuY29kZWQgcHVibGljIGtleVxuICAgKi9cbiAgZ2V0UHViRnJvbVJhdyhwdWI6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHN0ZWxsYXIuU3RyS2V5LmVuY29kZUVkMjU1MTlQdWJsaWNLZXkoQnVmZmVyLmZyb20ocHViLCAnaGV4JykpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBkZWNvZGVkIGVkMjU1MTkgcHJpdmF0ZSBrZXkgZnJvbSByYXcgZGF0YVxuICAgKlxuICAgKiBAcGFyYW0gcHJ2IFJhdyBwcml2YXRlIGtleVxuICAgKiBAcmV0dXJucyBFbmNvZGVkIHByaXZhdGUga2V5XG4gICAqL1xuICBnZXRQcnZGcm9tUmF3KHBydjogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gc3RlbGxhci5TdHJLZXkuZW5jb2RlRWQyNTUxOVNlY3JldFNlZWQoQnVmZmVyLmZyb20ocHJ2LCAnaGV4JykpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiBib29sZWFuIGluZGljYXRpbmcgd2hldGhlciBpbnB1dCBpcyB2YWxpZCBwdWJsaWMga2V5IGZvciB0aGUgY29pbi5cbiAgICpcbiAgICogQHBhcmFtIHB1YiB0aGUgcHViIHRvIGJlIGNoZWNrZWRcbiAgICogQHJldHVybnMgaXMgaXQgdmFsaWQ/XG4gICAqL1xuICBpc1ZhbGlkUHViKHB1Yjogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHN0ZWxsYXIuU3RyS2V5LmlzVmFsaWRFZDI1NTE5UHVibGljS2V5KHB1Yik7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIGlucHV0IGlzIHZhbGlkIHByaXZhdGUga2V5IGZvciB0aGUgY29pblxuICAgKlxuICAgKiBAcGFyYW0gcHJ2IHRoZSBwcnYgdG8gYmUgY2hlY2tlZFxuICAgKiBAcmV0dXJucyBpcyBpdCB2YWxpZD9cbiAgICovXG4gIGlzVmFsaWRQcnYocHJ2OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gc3RlbGxhci5TdHJLZXkuaXNWYWxpZEVkMjU1MTlTZWNyZXRTZWVkKHBydik7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIGEgbWVtbyBpZCBpcyB2YWxpZFxuICAgKlxuICAgKiBAcGFyYW0gbWVtb0lkIG1lbW8gaWRcbiAgICogQHJldHVybnMgdHJ1ZSBpZiBtZW1vIGlkIGlzIHZhbGlkXG4gICAqL1xuICBpc1ZhbGlkTWVtb0lkKG1lbW9JZDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgbGV0IG1lbW9JZE51bWJlcjtcbiAgICB0cnkge1xuICAgICAgc3RlbGxhci5NZW1vLmlkKG1lbW9JZCk7IC8vIHRocm93cyBpZiB0aGUgdmFsdWUgaXMgbm90IHZhbGlkIG1lbW8gaWRcbiAgICAgIG1lbW9JZE51bWJlciA9IG5ldyBCaWdOdW1iZXIobWVtb0lkKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgcmV0dXJuIG1lbW9JZE51bWJlci5ndGUoMCkgJiYgbWVtb0lkTnVtYmVyLmx0KFhsbS5tYXhNZW1vSWQpO1xuICB9XG5cbiAgc3VwcG9ydHNEZXJpdmVLZXlXaXRoU2VlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICogRXZhbHVhdGVzIHdoZXRoZXIgYSBtZW1vIGlzIHZhbGlkXG4gICAqXG4gICAqIEBwYXJhbSB2YWx1ZSB2YWx1ZSBvZiB0aGUgbWVtb1xuICAgKiBAcGFyYW0gdHlwZSB0eXBlIG9mIHRoZSBtZW1vXG4gICAqIEByZXR1cm5zIHRydWUgaWYgdmFsdWUgYW5kIHR5cGUgYXJlIGEgdmFsaWRcbiAgICovXG4gIGlzVmFsaWRNZW1vKHsgdmFsdWUsIHR5cGUgfTogTWVtbyk6IGJvb2xlYW4ge1xuICAgIGlmICghdmFsdWUgfHwgIXR5cGUpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIC8vIHRocm93cyBpZiB0aGUgdmFsdWUgaXMgbm90IHZhbGlkIGZvciB0aGUgdHlwZVxuICAgICAgLy8gdmFsaWQgdHlwZXMgYXJlOiAnaWQnLCAndGV4dCcsICdoYXNoJywgJ3JldHVybidcbiAgICAgIC8vIFNlZSBodHRwczovL3d3dy5zdGVsbGFyLm9yZy9kZXZlbG9wZXJzL2d1aWRlcy9jb25jZXB0cy90cmFuc2FjdGlvbnMuaHRtbCNtZW1vXG4gICAgICBzdGVsbGFyLk1lbW9bdHlwZV0odmFsdWUpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGluc3RhbmNlIG9mIHN0ZWxsYXIuTXV4ZWRBY2NvdW50IGZyb20gTSBhZGRyZXNzXG4gICAqIFNlZTogaHR0cHM6Ly9kZXZlbG9wZXJzLnN0ZWxsYXIub3JnL2RvY3MvZ2xvc3NhcnkvbXV4ZWQtYWNjb3VudHNcbiAgICovXG4gIGdldE11eGVkQWNjb3VudChhZGRyZXNzOiBzdHJpbmcpOiBzdGVsbGFyLk11eGVkQWNjb3VudCB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBzdGVsbGFyLk11eGVkQWNjb3VudC5mcm9tQWRkcmVzcyhhZGRyZXNzLCAnMCcpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgaW52YWxpZCBtdXhlZCBhZGRyZXNzOiAke2FkZHJlc3N9YCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiBib29sZWFuIGluZGljYXRpbmcgd2hldGhlciBhIG11eGVkIGFkZHJlc3MgaXMgdmFsaWRcbiAgICogU2VlOiBodHRwczovL2RldmVsb3BlcnMuc3RlbGxhci5vcmcvZG9jcy9nbG9zc2FyeS9tdXhlZC1hY2NvdW50c1xuICAgKlxuICAgKiBAcGFyYW0gYWRkcmVzc1xuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICovXG4gIGlzVmFsaWRNdXhlZEFkZHJlc3MoYWRkcmVzczogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgaWYgKCFfLmlzU3RyaW5nKGFkZHJlc3MpIHx8ICFhZGRyZXNzLnN0YXJ0c1dpdGgoJ00nKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICAvLyByZXR1cm4gdHJ1ZSBpZiBtdXhlZCBhY2NvdW50IGlzIHZhbGlkIG9yIHRocm93XG4gICAgICByZXR1cm4gISFzdGVsbGFyLk11eGVkQWNjb3VudC5mcm9tQWRkcmVzcyhhZGRyZXNzLCAnMCcpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogTWluaW11bSBiYWxhbmNlIG9mIGEgMi1vZi0zIG11bHRpc2lnIHdhbGxldFxuICAgKiBAcmV0dXJucyBtaW5pbXVtIGJhbGFuY2UgaW4gc3Ryb29wc1xuICAgKi9cbiAgYXN5bmMgZ2V0TWluaW11bVJlc2VydmUoKTogUHJvbWlzZTxudW1iZXI+IHtcbiAgICBjb25zdCBzZXJ2ZXIgPSBuZXcgc3RlbGxhci5TZXJ2ZXIodGhpcy5nZXRIb3Jpem9uVXJsKCkpO1xuXG4gICAgY29uc3QgaG9yaXpvbkxlZGdlckluZm8gPSBhd2FpdCBzZXJ2ZXIubGVkZ2VycygpLm9yZGVyKCdkZXNjJykubGltaXQoMSkuY2FsbCgpO1xuXG4gICAgaWYgKCFob3Jpem9uTGVkZ2VySW5mbykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCd1bmFibGUgdG8gY29ubmVjdCB0byBIb3Jpem9uIGZvciByZXNlcnZlIHJlcXVpcmVtZW50IGRhdGEnKTtcbiAgICB9XG5cbiAgICBjb25zdCBiYXNlUmVzZXJ2ZSA9IGhvcml6b25MZWRnZXJJbmZvLnJlY29yZHNbMF0uYmFzZV9yZXNlcnZlX2luX3N0cm9vcHM7XG5cbiAgICAvLyAyLW9mLTMgd2FsbGV0cyBoYXZlIGEgbWluaW11bSByZXNlcnZlIG9mIDV4IHRoZSBiYXNlIHJlc2VydmVcbiAgICByZXR1cm4gNSAqIGJhc2VSZXNlcnZlO1xuICB9XG5cbiAgLyoqXG4gICAqIFRyYW5zYWN0aW9uIGZlZSBmb3IgZWFjaCBvcGVyYXRpb25cbiAgICogQHJldHVybnMgdHJhbnNhY3Rpb24gZmVlIGluIHN0cm9vcHNcbiAgICovXG4gIGFzeW5jIGdldEJhc2VUcmFuc2FjdGlvbkZlZSgpOiBQcm9taXNlPG51bWJlcj4ge1xuICAgIGNvbnN0IHNlcnZlciA9IG5ldyBzdGVsbGFyLlNlcnZlcih0aGlzLmdldEhvcml6b25VcmwoKSk7XG5cbiAgICBjb25zdCBob3Jpem9uTGVkZ2VySW5mbyA9IGF3YWl0IHNlcnZlci5sZWRnZXJzKCkub3JkZXIoJ2Rlc2MnKS5saW1pdCgxKS5jYWxsKCk7XG5cbiAgICBpZiAoIWhvcml6b25MZWRnZXJJbmZvKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ3VuYWJsZSB0byBjb25uZWN0IHRvIEhvcml6b24gZm9yIHJlc2VydmUgcmVxdWlyZW1lbnQgZGF0YScpO1xuICAgIH1cblxuICAgIHJldHVybiBob3Jpem9uTGVkZ2VySW5mby5yZWNvcmRzWzBdLmJhc2VfZmVlX2luX3N0cm9vcHM7XG4gIH1cblxuICAvKipcbiAgICogUHJvY2VzcyBhZGRyZXNzIGludG8gYWRkcmVzcyBhbmQgbWVtbyBpZFxuICAgKlxuICAgKiBAcGFyYW0gYWRkcmVzcyB0aGUgYWRkcmVzc1xuICAgKiBAcmV0dXJucyBvYmplY3QgY29udGFpbmluZyBhZGRyZXNzIGFuZCBtZW1vIGlkXG4gICAqL1xuICBnZXRBZGRyZXNzRGV0YWlscyhhZGRyZXNzOiBzdHJpbmcpOiBBZGRyZXNzRGV0YWlscyB7XG4gICAgaWYgKGFkZHJlc3Muc3RhcnRzV2l0aCgnTScpKSB7XG4gICAgICBpZiAodGhpcy5pc1ZhbGlkTXV4ZWRBZGRyZXNzKGFkZHJlc3MpKSB7XG4gICAgICAgIGNvbnN0IG11eGVkQWNjb3VudCA9IHRoaXMuZ2V0TXV4ZWRBY2NvdW50KGFkZHJlc3MpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGJhc2VBZGRyZXNzOiBtdXhlZEFjY291bnQuYmFzZUFjY291bnQoKS5hY2NvdW50SWQoKSxcbiAgICAgICAgICBhZGRyZXNzLFxuICAgICAgICAgIGlkOiBtdXhlZEFjY291bnQuaWQoKSxcbiAgICAgICAgICBtZW1vSWQ6IHVuZGVmaW5lZCxcbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBJbnZhbGlkQWRkcmVzc0Vycm9yKGBpbnZhbGlkIG11eGVkIGFkZHJlc3M6ICR7YWRkcmVzc31gKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBkZXN0aW5hdGlvbkRldGFpbHMgPSB1cmwucGFyc2UoYWRkcmVzcyk7XG4gICAgY29uc3QgZGVzdGluYXRpb25BZGRyZXNzID0gZGVzdGluYXRpb25EZXRhaWxzLnBhdGhuYW1lIHx8ICcnO1xuICAgIGlmICghZGVzdGluYXRpb25BZGRyZXNzIHx8ICFzdGVsbGFyLlN0cktleS5pc1ZhbGlkRWQyNTUxOVB1YmxpY0tleShkZXN0aW5hdGlvbkFkZHJlc3MpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYGludmFsaWQgYWRkcmVzczogJHthZGRyZXNzfWApO1xuICAgIH1cbiAgICAvLyBhZGRyZXNzIGRvZXNuJ3QgaGF2ZSBhIG1lbW8gaWRcbiAgICBpZiAoZGVzdGluYXRpb25EZXRhaWxzLnBhdGhuYW1lID09PSBhZGRyZXNzKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBiYXNlQWRkcmVzczogYWRkcmVzcyxcbiAgICAgICAgYWRkcmVzczogYWRkcmVzcyxcbiAgICAgICAgaWQ6IHVuZGVmaW5lZCxcbiAgICAgICAgbWVtb0lkOiB1bmRlZmluZWQsXG4gICAgICB9O1xuICAgIH1cblxuICAgIGlmICghZGVzdGluYXRpb25EZXRhaWxzLnF1ZXJ5KSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFkZHJlc3NFcnJvcihgaW52YWxpZCBhZGRyZXNzOiAke2FkZHJlc3N9YCk7XG4gICAgfVxuXG4gICAgY29uc3QgcXVlcnlEZXRhaWxzID0gcXVlcnlzdHJpbmcucGFyc2UoZGVzdGluYXRpb25EZXRhaWxzLnF1ZXJ5KTtcbiAgICBpZiAoIXF1ZXJ5RGV0YWlscy5tZW1vSWQpIHtcbiAgICAgIC8vIGlmIHRoZXJlIGFyZSBtb3JlIHByb3BlcnRpZXMsIHRoZSBxdWVyeSBkZXRhaWxzIG5lZWQgdG8gY29udGFpbiB0aGUgbWVtbyBpZCBwcm9wZXJ0eVxuICAgICAgdGhyb3cgbmV3IEludmFsaWRBZGRyZXNzRXJyb3IoYGludmFsaWQgYWRkcmVzczogJHthZGRyZXNzfWApO1xuICAgIH1cblxuICAgIGlmIChBcnJheS5pc0FycmF5KHF1ZXJ5RGV0YWlscy5tZW1vSWQpKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFkZHJlc3NFcnJvcihcbiAgICAgICAgYG1lbW9JZCBtYXkgb25seSBiZSBnaXZlbiBhdCBtb3N0IG9uY2UsIGJ1dCBmb3VuZCAke3F1ZXJ5RGV0YWlscy5tZW1vSWQubGVuZ3RofSBpbnN0YW5jZXMgaW4gYWRkcmVzcyAke2FkZHJlc3N9YFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAoQXJyYXkuaXNBcnJheShxdWVyeURldGFpbHMubWVtb0lkKSAmJiBxdWVyeURldGFpbHMubWVtb0lkLmxlbmd0aCAhPT0gMSkge1xuICAgICAgLy8gdmFsaWQgYWRkcmVzc2VzIGNhbiBvbmx5IGNvbnRhaW4gb25lIG1lbW8gaWRcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQWRkcmVzc0Vycm9yKGBpbnZhbGlkIGFkZHJlc3MgJyR7YWRkcmVzc30nLCBtdXN0IGNvbnRhaW4gZXhhY3RseSBvbmUgbWVtb0lkYCk7XG4gICAgfVxuXG4gICAgY29uc3QgW21lbW9JZF0gPSBfLmNhc3RBcnJheShxdWVyeURldGFpbHMubWVtb0lkKSB8fCB1bmRlZmluZWQ7XG4gICAgaWYgKCF0aGlzLmlzVmFsaWRNZW1vSWQobWVtb0lkKSkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRNZW1vSWRFcnJvcihgaW52YWxpZCBhZGRyZXNzOiAnJHthZGRyZXNzfScsIG1lbW9JZCBpcyBub3QgdmFsaWRgKTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgYmFzZUFkZHJlc3M6IGRlc3RpbmF0aW9uQWRkcmVzcyxcbiAgICAgIGFkZHJlc3M6IGRlc3RpbmF0aW9uQWRkcmVzcyxcbiAgICAgIGlkOiB1bmRlZmluZWQsXG4gICAgICBtZW1vSWQsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZSBhbmQgcmV0dXJuIGFkZHJlc3Mgd2l0aCBhcHBlbmRlZCBtZW1vIGlkIG9yIG11eGVkIGFkZHJlc3NcbiAgICpcbiAgICogQHBhcmFtIGFkZHJlc3MgYWRkcmVzc1xuICAgKiBAcGFyYW0gbWVtb0lkIG1lbW8gaWRcbiAgICogQHJldHVybnMgYWRkcmVzcyB3aXRoIG1lbW8gaWRcbiAgICovXG4gIG5vcm1hbGl6ZUFkZHJlc3MoeyBhZGRyZXNzLCBtZW1vSWQgfTogQWRkcmVzc0RldGFpbHMpOiBzdHJpbmcge1xuICAgIGlmICh0aGlzLmlzVmFsaWRNdXhlZEFkZHJlc3MoYWRkcmVzcykpIHtcbiAgICAgIHJldHVybiBhZGRyZXNzO1xuICAgIH1cbiAgICBpZiAoIXN0ZWxsYXIuU3RyS2V5LmlzVmFsaWRFZDI1NTE5UHVibGljS2V5KGFkZHJlc3MpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYGludmFsaWQgYWRkcmVzcyBkZXRhaWxzOiAke2FkZHJlc3N9YCk7XG4gICAgfVxuICAgIGlmIChtZW1vSWQgJiYgdGhpcy5pc1ZhbGlkTWVtb0lkKG1lbW9JZCkpIHtcbiAgICAgIHJldHVybiBgJHthZGRyZXNzfT9tZW1vSWQ9JHttZW1vSWR9YDtcbiAgICB9XG4gICAgcmV0dXJuIGFkZHJlc3M7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIGlucHV0IGlzIHZhbGlkIHB1YmxpYyBrZXkgZm9yIHRoZSBjb2luXG4gICAqXG4gICAqIEBwYXJhbSBhZGRyZXNzIHRoZSBwdWIgdG8gYmUgY2hlY2tlZFxuICAgKiBAcmV0dXJucyBpcyBpdCB2YWxpZD9cbiAgICovXG4gIGlzVmFsaWRBZGRyZXNzKGFkZHJlc3M6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBhZGRyZXNzRGV0YWlscyA9IHRoaXMuZ2V0QWRkcmVzc0RldGFpbHMoYWRkcmVzcyk7XG4gICAgICByZXR1cm4gYWRkcmVzcyA9PT0gdGhpcy5ub3JtYWxpemVBZGRyZXNzKGFkZHJlc3NEZXRhaWxzKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiBhIFN0ZWxsYXIgQXNzZXQgaW4gY29pbjp0b2tlbiBmb3JtIChpLmUuICh0KXhsbTo8Y29kZT4tPGlzc3Vlcj4pXG4gICAqIElmIHRoZSBhc3NldCBpcyBYTE0sIHJldHVybiB0aGUgY2hhaW5cbiAgICogQHBhcmFtIHtzdGVsbGFyLkFzc2V0fSBhc3NldCAtIGluc3RhbmNlIG9mIFN0ZWxsYXIgQXNzZXRcbiAgICovXG4gIGdldFRva2VuTmFtZUZyb21TdGVsbGFyQXNzZXQoYXNzZXQ6IHN0ZWxsYXIuQXNzZXQpOiBzdHJpbmcge1xuICAgIGNvbnN0IGNvZGUgPSBhc3NldC5nZXRDb2RlKCk7XG4gICAgY29uc3QgaXNzdWVyID0gYXNzZXQuZ2V0SXNzdWVyKCk7XG4gICAgaWYgKGFzc2V0LmlzTmF0aXZlKCkpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldENoYWluKCk7XG4gICAgfVxuICAgIHJldHVybiBgJHt0aGlzLmdldENoYWluKCl9JHtCYXNlQ29pbi5jb2luVG9rZW5QYXR0ZXJuU2VwYXJhdG9yfSR7Y29kZX0ke1hsbS50b2tlblBhdHRlcm5TZXBhcmF0b3J9JHtpc3N1ZXJ9YDtcbiAgfVxuXG4gIC8qKlxuICAgKiBFdmFsdWF0ZSB3aGV0aGVyIGEgc3RlbGxhciB1c2VybmFtZSBoYXMgdmFsaWQgZm9ybWF0XG4gICAqIFRoaXMgbWV0aG9kIGlzIHVzZWQgYnkgdGhlIGNsaWVudCB3aGVuIGEgc3RlbGxhciBhZGRyZXNzIGlzIGJlaW5nIGFkZGVkIHRvIGEgd2FsbGV0XG4gICAqIEV4YW1wbGUgb2YgYSBjb21tb24gc3RlbGxhciB1c2VybmFtZTogZm9vQGJhci5iYXpcbiAgICogVGhlIGFib3ZlIGV4YW1wbGUgd291bGQgcmVzdWx0IGluIHRoZSBTdGVsbGFyIGFkZHJlc3M6IGZvb0BiYXIuYmF6KmJpdGdvLmNvbVxuICAgKlxuICAgKiBAcGFyYW0gdXNlcm5hbWUgLSBzdGVsbGFyIHVzZXJuYW1lXG4gICAqIEByZXR1cm4gdHJ1ZSBpZiBzdGVsbGFyIHVzZXJuYW1lIGlzIHZhbGlkXG4gICAqL1xuICBpc1ZhbGlkU3RlbGxhclVzZXJuYW1lKHVzZXJuYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gL15bYS16MC05XFwtXy4rQF0rJC8udGVzdCh1c2VybmFtZSk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGFuIGluc3RhbmNlIG9mIEZlZGVyYXRpb25TZXJ2ZXIgZm9yIEJpdEdvIGxvb2t1cHNcbiAgICpcbiAgICogQHJldHVybnMgaW5zdGFuY2Ugb2YgQml0R28gRmVkZXJhdGlvbiBTZXJ2ZXJcbiAgICovXG4gIGdldEJpdEdvRmVkZXJhdGlvblNlcnZlcigpOiBzdGVsbGFyLkZlZGVyYXRpb25TZXJ2ZXIge1xuICAgIC8vIElkZW50aWZ5IHRoZSBVUkkgc2NoZW1lIGluIGNhc2Ugd2UgbmVlZCB0byBhbGxvdyBjb25uZWN0aW5nIHRvIEhUVFAgc2VydmVyLlxuICAgIGNvbnN0IGlzTm9uU2VjdXJlRW52ID0gIV8uc3RhcnRzV2l0aChjb21tb24uRW52aXJvbm1lbnRzW3RoaXMuYml0Z28uZW52XS51cmksICdodHRwcycpO1xuICAgIGNvbnN0IGZlZGVyYXRpb25TZXJ2ZXJPcHRpb25zID0geyBhbGxvd0h0dHA6IGlzTm9uU2VjdXJlRW52IH07XG4gICAgcmV0dXJuIG5ldyBzdGVsbGFyLkZlZGVyYXRpb25TZXJ2ZXIodGhpcy5nZXRGZWRlcmF0aW9uU2VydmVyVXJsKCksICdiaXRnby5jb20nLCBmZWRlcmF0aW9uU2VydmVyT3B0aW9ucyk7XG4gIH1cblxuICAvKipcbiAgICogUGVyZm9ybSBmZWRlcmF0aW9uIGxvb2t1cHNcbiAgICogT3VyIGZlZGVyYXRpb24gc2VydmVyIGhhbmRsZXMgbG9va3VwcyBmb3IgYml0Z28gYXMgd2VsbCBhcyBmb3Igb3RoZXIgZmVkZXJhdGlvbiBkb21haW5zXG4gICAqXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBbYWRkcmVzc10gLSBhZGRyZXNzIHRvIGxvb2sgdXBcbiAgICogQHBhcmFtIHtTdHJpbmd9IFthY2NvdW50SWRdIC0gYWNjb3VudCBpZCB0byBsb29rIHVwXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIGZlZGVyYXRpb25Mb29rdXAoe1xuICAgIGFkZHJlc3MsXG4gICAgYWNjb3VudElkLFxuICB9OiB7XG4gICAgYWRkcmVzcz86IHN0cmluZztcbiAgICBhY2NvdW50SWQ/OiBzdHJpbmc7XG4gIH0pOiBQcm9taXNlPHN0ZWxsYXIuRmVkZXJhdGlvblNlcnZlci5SZWNvcmQ+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgZmVkZXJhdGlvblNlcnZlciA9IHRoaXMuZ2V0Qml0R29GZWRlcmF0aW9uU2VydmVyKCk7XG4gICAgICBpZiAoYWRkcmVzcykge1xuICAgICAgICByZXR1cm4gYXdhaXQgZmVkZXJhdGlvblNlcnZlci5yZXNvbHZlQWRkcmVzcyhhZGRyZXNzKTtcbiAgICAgIH0gZWxzZSBpZiAoYWNjb3VudElkKSB7XG4gICAgICAgIHJldHVybiBhd2FpdCBmZWRlcmF0aW9uU2VydmVyLnJlc29sdmVBY2NvdW50SWQoYWNjb3VudElkKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignaW52YWxpZCBhcmd1bWVudCAtIG11c3QgcHJvdmlkZSBTdGVsbGFyIGFkZHJlc3Mgb3IgYWNjb3VudCBpZCcpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGNvbnN0IGVycm9yID0gXy5nZXQoZSwgJ3Jlc3BvbnNlLmRhdGEuZGV0YWlsJyk7XG4gICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgdGhyb3cgbmV3IFN0ZWxsYXJGZWRlcmF0aW9uVXNlck5vdEZvdW5kRXJyb3IoZXJyb3IpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQXR0ZW1wdCB0byByZXNvbHZlIGEgc3RlbGxhciBhZGRyZXNzIGludG8gYSBzdGVsbGFyIGFjY291bnRcbiAgICpcbiAgICogQHBhcmFtIHtTdHJpbmd9IGFkZHJlc3MgLSBzdGVsbGFyIGFkZHJlc3MgdG8gbG9vayBmb3JcbiAgICovXG4gIGFzeW5jIGZlZGVyYXRpb25Mb29rdXBCeU5hbWUoYWRkcmVzczogc3RyaW5nKTogUHJvbWlzZTxzdGVsbGFyLkZlZGVyYXRpb25TZXJ2ZXIuUmVjb3JkPiB7XG4gICAgaWYgKCFhZGRyZXNzKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgU3RlbGxhciBhZGRyZXNzJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuZmVkZXJhdGlvbkxvb2t1cCh7IGFkZHJlc3MgfSk7XG4gIH1cblxuICAvKipcbiAgICogQXR0ZW1wdCB0byByZXNvbHZlIGFuIGFjY291bnQgaWQgaW50byBhIHN0ZWxsYXIgYWNjb3VudFxuICAgKiBPbmx5IHdvcmtzIGZvciBhY2NvdW50cyB0aGF0IGNhbiBiZSByZXNvbHZlZCBieSBvdXIgZmVkZXJhdGlvbiBzZXJ2ZXJcbiAgICpcbiAgICogQHBhcmFtIHtTdHJpbmd9IGFjY291bnRJZCAtIHN0ZWxsYXIgYWNjb3VudCBpZFxuICAgKi9cbiAgYXN5bmMgZmVkZXJhdGlvbkxvb2t1cEJ5QWNjb3VudElkKGFjY291bnRJZDogc3RyaW5nKTogUHJvbWlzZTxzdGVsbGFyLkZlZGVyYXRpb25TZXJ2ZXIuUmVjb3JkPiB7XG4gICAgaWYgKCFhY2NvdW50SWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignaW52YWxpZCBTdGVsbGFyIGFjY291bnQnKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuZmVkZXJhdGlvbkxvb2t1cCh7IGFjY291bnRJZCB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiBhZGRyZXNzIGlzIGEgdmFsaWQgWExNIGFkZHJlc3MsIGFuZCB0aGVuIG1ha2Ugc3VyZSBpdCBtYXRjaGVzIHRoZSByb290IGFkZHJlc3MuXG4gICAqXG4gICAqIEBwYXJhbSBhZGRyZXNzIHtTdHJpbmd9IHRoZSBhZGRyZXNzIHRvIHZlcmlmeVxuICAgKiBAcGFyYW0gcm9vdEFkZHJlc3Mge1N0cmluZ30gdGhlIHdhbGxldCdzIHJvb3QgYWRkcmVzc1xuICAgKi9cbiAgYXN5bmMgaXNXYWxsZXRBZGRyZXNzKHsgYWRkcmVzcywgcm9vdEFkZHJlc3MgfTogVmVyaWZ5QWRkcmVzc09wdGlvbnMpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBpZiAoIXRoaXMuaXNWYWxpZEFkZHJlc3MoYWRkcmVzcykpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQWRkcmVzc0Vycm9yKGBpbnZhbGlkIGFkZHJlc3M6ICR7YWRkcmVzc31gKTtcbiAgICB9XG5cbiAgICBjb25zdCBhZGRyZXNzRGV0YWlscyA9IHRoaXMuZ2V0QWRkcmVzc0RldGFpbHMoYWRkcmVzcyk7XG4gICAgY29uc3Qgcm9vdEFkZHJlc3NEZXRhaWxzID0gdGhpcy5nZXRBZGRyZXNzRGV0YWlscyhyb290QWRkcmVzcyk7XG4gICAgaWYgKGFkZHJlc3NEZXRhaWxzLmJhc2VBZGRyZXNzICE9PSByb290QWRkcmVzc0RldGFpbHMuYWRkcmVzcykge1xuICAgICAgdGhyb3cgbmV3IFVuZXhwZWN0ZWRBZGRyZXNzRXJyb3IoXG4gICAgICAgIGBhZGRyZXNzIHZhbGlkYXRpb24gZmFpbHVyZTogJHthZGRyZXNzRGV0YWlscy5iYXNlQWRkcmVzc30gdnMgJHtyb290QWRkcmVzc0RldGFpbHMuYWRkcmVzc31gXG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBleHRyYSBwYXJhbWV0ZXJzIGZvciBwcmVidWlsZGluZyBhIHR4XG4gICAqIFNldCBlbXB0eSByZWNpcGllbnRzIGFycmF5IGluIHRydXN0bGluZSB0eHNcbiAgICovXG4gIGFzeW5jIGdldEV4dHJhUHJlYnVpbGRQYXJhbXMoYnVpbGRQYXJhbXM6IEV4dHJhUHJlYnVpbGRQYXJhbXNPcHRpb25zKTogUHJvbWlzZTxCdWlsZE9wdGlvbnM+IHtcbiAgICBjb25zdCBwYXJhbXM6IHsgcmVjaXBpZW50cz86IFJlY29yZDxzdHJpbmcsIHN0cmluZz5bXSB9ID0ge307XG4gICAgaWYgKGJ1aWxkUGFyYW1zLnR5cGUgPT09ICd0cnVzdGxpbmUnKSB7XG4gICAgICBwYXJhbXMucmVjaXBpZW50cyA9IFtdO1xuICAgIH1cbiAgICByZXR1cm4gcGFyYW1zO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkXG4gICAqL1xuICBpbml0aWF0ZVJlY292ZXJ5KHBhcmFtczogUmVjb3ZlcnlPcHRpb25zKTogbmV2ZXIge1xuICAgIHRocm93IG5ldyBFcnJvcignZGVwcmVjYXRlZCBtZXRob2QnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBCdWlsZHMgYSBmdW5kcyByZWNvdmVyeSB0cmFuc2FjdGlvbiB3aXRob3V0IEJpdEdvXG4gICAqIEBwYXJhbSBwYXJhbXNcbiAgICogLSB1c2VyS2V5OiBbZW5jcnlwdGVkXSBTdGVsbGFyIHByaXZhdGUga2V5XG4gICAqIC0gYmFja3VwS2V5OiBbZW5jcnlwdGVkXSBTdGVsbGFyIHByaXZhdGUga2V5LCBvciBwdWJsaWMga2V5IGlmIHRoZSBwcml2YXRlIGtleSBpcyBoZWxkIGJ5IGEgS1JTIHByb3ZpZGVyXG4gICAqIC0gd2FsbGV0UGFzc3BocmFzZTogbmVjZXNzYXJ5IGlmIG9uZSBvZiB0aGUgcHJpdmF0ZSBrZXlzIGlzIGVuY3J5cHRlZFxuICAgKiAtIHJvb3RBZGRyZXNzOiBiYXNlIGFkZHJlc3Mgb2YgdGhlIHdhbGxldCB0byByZWNvdmVyIGZ1bmRzIGZyb21cbiAgICogLSBrcnNQcm92aWRlcjogbmVjZXNzYXJ5IGlmIGJhY2t1cCBrZXkgaXMgaGVsZCBieSBLUlNcbiAgICogLSByZWNvdmVyeURlc3RpbmF0aW9uOiB0YXJnZXQgYWRkcmVzcyB0byBzZW5kIHJlY292ZXJlZCBmdW5kcyB0b1xuICAgKi9cbiAgYXN5bmMgcmVjb3ZlcihwYXJhbXM6IFJlY292ZXJ5T3B0aW9ucyk6IFByb21pc2U8UmVjb3ZlcnlUcmFuc2FjdGlvbj4ge1xuICAgIC8vIFN0ZWxsYXIncyBFZDI1NTE5IHB1YmxpYyBrZXlzIHN0YXJ0IHdpdGggYSBHLCB3aGlsZSBwcml2YXRlIGtleXMgc3RhcnQgd2l0aCBhbiBTXG4gICAgY29uc3QgaXNLcnNSZWNvdmVyeSA9IHBhcmFtcy5iYWNrdXBLZXkuc3RhcnRzV2l0aCgnRycpICYmICFwYXJhbXMudXNlcktleS5zdGFydHNXaXRoKCdHJyk7XG4gICAgY29uc3QgaXNVbnNpZ25lZFN3ZWVwID0gcGFyYW1zLmJhY2t1cEtleS5zdGFydHNXaXRoKCdHJykgJiYgcGFyYW1zLnVzZXJLZXkuc3RhcnRzV2l0aCgnRycpO1xuXG4gICAgaWYgKGlzS3JzUmVjb3ZlcnkpIHtcbiAgICAgIGNoZWNrS3JzUHJvdmlkZXIodGhpcywgcGFyYW1zLmtyc1Byb3ZpZGVyKTtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuaXNWYWxpZEFkZHJlc3MocGFyYW1zLnJlY292ZXJ5RGVzdGluYXRpb24pKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFkZHJlc3NFcnJvcignSW52YWxpZCBkZXN0aW5hdGlvbiBhZGRyZXNzIScpO1xuICAgIH1cblxuICAgIGNvbnN0IFt1c2VyS2V5LCBiYWNrdXBLZXldID0gZ2V0U3RlbGxhcktleXModGhpcy5iaXRnbywgcGFyYW1zKTtcblxuICAgIGlmICghcGFyYW1zLnJvb3RBZGRyZXNzIHx8ICFzdGVsbGFyLlN0cktleS5pc1ZhbGlkRWQyNTUxOVB1YmxpY0tleShwYXJhbXMucm9vdEFkZHJlc3MpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgd2FsbGV0IGFkZHJlc3M6ICR7cGFyYW1zLnJvb3RBZGRyZXNzfWApO1xuICAgIH1cblxuICAgIGNvbnN0IGFjY291bnREYXRhVXJsID0gYCR7dGhpcy5nZXRIb3Jpem9uVXJsKCl9L2FjY291bnRzLyR7cGFyYW1zLnJvb3RBZGRyZXNzfWA7XG4gICAgY29uc3QgZGVzdGluYXRpb25VcmwgPSBgJHt0aGlzLmdldEhvcml6b25VcmwoKX0vYWNjb3VudHMvJHtwYXJhbXMucmVjb3ZlcnlEZXN0aW5hdGlvbn1gO1xuXG4gICAgbGV0IGFjY291bnREYXRhO1xuICAgIHRyeSB7XG4gICAgICBhY2NvdW50RGF0YSA9IGF3YWl0IHRvQml0Z29SZXF1ZXN0KHJlcXVlc3QuZ2V0KGFjY291bnREYXRhVXJsKSkucmVzdWx0KCk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbmFibGUgdG8gcmVhY2ggdGhlIFN0ZWxsYXIgbmV0d29yayB2aWEgSG9yaXpvbi4nKTtcbiAgICB9XG5cbiAgICAvLyBOb3cgY2hlY2sgaWYgdGhlIGRlc3RpbmF0aW9uIGFjY291bnQgaXMgZW1wdHkgb3Igbm90XG4gICAgbGV0IHVuZnVuZGVkRGVzdGluYXRpb24gPSBmYWxzZTtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgcmVxdWVzdC5nZXQoZGVzdGluYXRpb25VcmwpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGlmIChlLnN0YXR1cyA9PT0gNDA0KSB7XG4gICAgICAgIC8vIElmIHRoZSBkZXN0aW5hdGlvbiBhY2NvdW50IGRvZXMgbm90IHlldCBleGlzdCwgaG9yaXpvbiByZXNwb25kcyB3aXRoIDQwNFxuICAgICAgICB1bmZ1bmRlZERlc3RpbmF0aW9uID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIWFjY291bnREYXRhLnNlcXVlbmNlIHx8ICFhY2NvdW50RGF0YS5iYWxhbmNlcykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdIb3Jpem9uIHNlcnZlciBlcnJvciAtIHVuYWJsZSB0byByZXRyaWV2ZSBzZXF1ZW5jZSBJRCBvciBhY2NvdW50IGJhbGFuY2UnKTtcbiAgICB9XG5cbiAgICBjb25zdCBhY2NvdW50ID0gbmV3IHN0ZWxsYXIuQWNjb3VudChwYXJhbXMucm9vdEFkZHJlc3MsIGFjY291bnREYXRhLnNlcXVlbmNlKTtcblxuICAgIC8vIFN0ZWxsYXIgc3VwcG9ydHMgbXVsdGlwbGUgYXNzZXRzIG9uIGNoYWluLCB3ZSdyZSBvbmx5IGludGVyZXN0ZWQgaW4gdGhlIGJhbGFuY2VzIGVudHJ5IHdob3NlIHR5cGUgaXMgXCJuYXRpdmVcIiAoWExNKVxuICAgIGNvbnN0IG5hdGl2ZUJhbGFuY2VJbmZvID0gYWNjb3VudERhdGEuYmFsYW5jZXMuZmluZCgoYXNzZXRCYWxhbmNlKSA9PiBhc3NldEJhbGFuY2VbJ2Fzc2V0X3R5cGUnXSA9PT0gJ25hdGl2ZScpO1xuXG4gICAgaWYgKCFuYXRpdmVCYWxhbmNlSW5mbykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdQcm92aWRlZCB3YWxsZXQgaGFzIGEgYmFsYW5jZSBvZiAwIFhMTSwgcmVjb3ZlcnkgYWJvcnRlZCcpO1xuICAgIH1cblxuICAgIGNvbnN0IHdhbGxldEJhbGFuY2UgPSBOdW1iZXIodGhpcy5iaWdVbml0c1RvQmFzZVVuaXRzKG5hdGl2ZUJhbGFuY2VJbmZvLmJhbGFuY2UpKTtcbiAgICBjb25zdCBtaW5pbXVtUmVzZXJ2ZSA9IGF3YWl0IHRoaXMuZ2V0TWluaW11bVJlc2VydmUoKTtcbiAgICBjb25zdCBiYXNlVHhGZWUgPSBhd2FpdCB0aGlzLmdldEJhc2VUcmFuc2FjdGlvbkZlZSgpO1xuICAgIGNvbnN0IHJlY292ZXJ5QW1vdW50ID0gd2FsbGV0QmFsYW5jZSAtIG1pbmltdW1SZXNlcnZlIC0gYmFzZVR4RmVlO1xuICAgIGNvbnN0IGZvcm1hdHRlZFJlY292ZXJ5QW1vdW50ID0gdGhpcy5iYXNlVW5pdHNUb0JpZ1VuaXRzKHJlY292ZXJ5QW1vdW50KS50b1N0cmluZygpO1xuXG4gICAgY29uc3QgdHhCdWlsZGVyID0gbmV3IHN0ZWxsYXIuVHJhbnNhY3Rpb25CdWlsZGVyKGFjY291bnQsIHtcbiAgICAgIGZlZTogYmFzZVR4RmVlLnRvRml4ZWQoMCksXG4gICAgICBuZXR3b3JrUGFzc3BocmFzZTogdGhpcy5nZXRTdGVsbGFyTmV0d29yaygpLFxuICAgIH0pO1xuICAgIGNvbnN0IG9wZXJhdGlvbiA9IHVuZnVuZGVkRGVzdGluYXRpb25cbiAgICAgID8gLy8gSW4gdGhpcyBjYXNlLCB3ZSBuZWVkIHRvIGNyZWF0ZSB0aGUgYWNjb3VudFxuICAgICAgICBzdGVsbGFyLk9wZXJhdGlvbi5jcmVhdGVBY2NvdW50KHtcbiAgICAgICAgICBkZXN0aW5hdGlvbjogcGFyYW1zLnJlY292ZXJ5RGVzdGluYXRpb24sXG4gICAgICAgICAgc3RhcnRpbmdCYWxhbmNlOiBmb3JtYXR0ZWRSZWNvdmVyeUFtb3VudCxcbiAgICAgICAgfSlcbiAgICAgIDogLy8gT3RoZXJ3aXNlIGlmIHRoZSBhY2NvdW50IGFscmVhZHkgZXhpc3RzLCB3ZSBkbyBhIG5vcm1hbCBzZW5kXG4gICAgICAgIHN0ZWxsYXIuT3BlcmF0aW9uLnBheW1lbnQoe1xuICAgICAgICAgIGRlc3RpbmF0aW9uOiBwYXJhbXMucmVjb3ZlcnlEZXN0aW5hdGlvbixcbiAgICAgICAgICBhc3NldDogc3RlbGxhci5Bc3NldC5uYXRpdmUoKSxcbiAgICAgICAgICBhbW91bnQ6IGZvcm1hdHRlZFJlY292ZXJ5QW1vdW50LFxuICAgICAgICB9KTtcbiAgICBjb25zdCB0eCA9IHR4QnVpbGRlci5hZGRPcGVyYXRpb24ob3BlcmF0aW9uKS5zZXRUaW1lb3V0KHN0ZWxsYXIuVGltZW91dEluZmluaXRlKS5idWlsZCgpO1xuXG4gICAgaWYgKCFpc1Vuc2lnbmVkU3dlZXApIHtcbiAgICAgIHR4LnNpZ24odXNlcktleSk7XG4gICAgfVxuXG4gICAgaWYgKCFpc0tyc1JlY292ZXJ5ICYmICFpc1Vuc2lnbmVkU3dlZXApIHtcbiAgICAgIHR4LnNpZ24oYmFja3VwS2V5KTtcbiAgICB9XG5cbiAgICBjb25zdCB0cmFuc2FjdGlvbjogUmVjb3ZlcnlUcmFuc2FjdGlvbiA9IHtcbiAgICAgIHR4OiBYbG0udHhUb1N0cmluZyh0eCksXG4gICAgICByZWNvdmVyeUFtb3VudCxcbiAgICB9O1xuXG4gICAgaWYgKGlzS3JzUmVjb3ZlcnkpIHtcbiAgICAgIHRyYW5zYWN0aW9uLmJhY2t1cEtleSA9IHBhcmFtcy5iYWNrdXBLZXk7XG4gICAgICB0cmFuc2FjdGlvbi5jb2luID0gdGhpcy5nZXRDaGFpbigpO1xuICAgIH1cblxuICAgIHJldHVybiB0cmFuc2FjdGlvbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBBc3NlbWJsZSBrZXljaGFpbiBhbmQgaGFsZi1zaWduIHByZWJ1aWx0IHRyYW5zYWN0aW9uXG4gICAqXG4gICAqIEBwYXJhbSBwYXJhbXNcbiAgICogQHBhcmFtIHBhcmFtcy50eFByZWJ1aWxkIHtPYmplY3R9IHByZWJ1aWxkIG9iamVjdCByZXR1cm5lZCBieSBwbGF0Zm9ybVxuICAgKiBAcGFyYW0gcGFyYW1zLnBydiB7U3RyaW5nfSB1c2VyIHBydlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxIYWxmU2lnbmVkVHJhbnNhY3Rpb24+fVxuICAgKi9cbiAgYXN5bmMgc2lnblRyYW5zYWN0aW9uKHBhcmFtczogU2lnblRyYW5zYWN0aW9uT3B0aW9ucyk6IFByb21pc2U8SGFsZlNpZ25lZFRyYW5zYWN0aW9uPiB7XG4gICAgY29uc3QgeyB0eFByZWJ1aWxkLCBwcnYgfSA9IHBhcmFtcztcblxuICAgIGlmIChfLmlzVW5kZWZpbmVkKHR4UHJlYnVpbGQpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ21pc3NpbmcgdHhQcmVidWlsZCBwYXJhbWV0ZXInKTtcbiAgICB9XG4gICAgaWYgKCFfLmlzT2JqZWN0KHR4UHJlYnVpbGQpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYHR4UHJlYnVpbGQgbXVzdCBiZSBhbiBvYmplY3QsIGdvdCB0eXBlICR7dHlwZW9mIHR4UHJlYnVpbGR9YCk7XG4gICAgfVxuXG4gICAgaWYgKF8uaXNVbmRlZmluZWQocHJ2KSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdtaXNzaW5nIHBydiBwYXJhbWV0ZXIgdG8gc2lnbiB0cmFuc2FjdGlvbicpO1xuICAgIH1cbiAgICBpZiAoIV8uaXNTdHJpbmcocHJ2KSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBwcnYgbXVzdCBiZSBhIHN0cmluZywgZ290IHR5cGUgJHt0eXBlb2YgcHJ2fWApO1xuICAgIH1cblxuICAgIGNvbnN0IGtleVBhaXIgPSBzdGVsbGFyLktleXBhaXIuZnJvbVNlY3JldChwcnYpO1xuICAgIGNvbnN0IHR4ID0gbmV3IHN0ZWxsYXIuVHJhbnNhY3Rpb24odHhQcmVidWlsZC50eEJhc2U2NCwgdGhpcy5nZXRTdGVsbGFyTmV0d29yaygpKTtcbiAgICB0eC5zaWduKGtleVBhaXIpO1xuICAgIGNvbnN0IHR4QmFzZTY0ID0gWGxtLnR4VG9TdHJpbmcodHgpO1xuXG4gICAgY29uc3QgdHlwZSA9IHR4UHJlYnVpbGQ/LmJ1aWxkUGFyYW1zPy50eXBlO1xuICAgIGNvbnN0IHJlY2lwaWVudHMgPSB0eFByZWJ1aWxkPy5idWlsZFBhcmFtcz8ucmVjaXBpZW50cztcbiAgICBpZiAodHlwZSA9PT0gJ2VuYWJsZXRva2VuJykge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaGFsZlNpZ25lZDogeyB0eEJhc2U2NCB9LFxuICAgICAgICB0eXBlLFxuICAgICAgICByZWNpcGllbnRzLFxuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHsgaGFsZlNpZ25lZDogeyB0eEJhc2U2NCB9IH07XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEV4dGVuZCB3YWxsZXRQYXJhbXMgd2l0aCBleHRyYSBwYXJhbXMgcmVxdWlyZWQgZm9yIGdlbmVyYXRpbmcgYW4gWExNIHdhbGxldFxuICAgKlxuICAgKiBTdGVsbGFyIHdhbGxldHMgaGF2ZSB0aHJlZSBrZXljaGFpbnMgb24gdGhlbS4gVHdvIGFyZSBnZW5lcmF0ZWQgYnkgdGhlIHBsYXRmb3JtLCBhbmQgdGhlIGxhc3QgaXMgZ2VuZXJhdGVkIGJ5IHRoZSB1c2VyLlxuICAgKiBJbml0aWFsbHksIHdlIG5lZWQgYSByb290IHBydiB0byBnZW5lcmF0ZSB0aGUgYWNjb3VudCwgd2hpY2ggbXVzdCBiZSBkaXN0aW5jdCBmcm9tIGFsbCB0aHJlZSBrZXljaGFpbnMgb24gdGhlIHdhbGxldC5cbiAgICogSWYgYSByb290IHBydiBpcyBub3QgcHJvdmlkZWQsIGEgcmFuZG9tIG9uZSBpcyBnZW5lcmF0ZWQuXG4gICAqL1xuICBhc3luYyBzdXBwbGVtZW50R2VuZXJhdGVXYWxsZXQoXG4gICAgd2FsbGV0UGFyYW1zOiBTdXBwbGVtZW50R2VuZXJhdGVXYWxsZXRPcHRpb25zXG4gICk6IFByb21pc2U8U3VwcGxlbWVudEdlbmVyYXRlV2FsbGV0T3B0aW9ucz4ge1xuICAgIGxldCBzZWVkO1xuICAgIGNvbnN0IHJvb3RQcnYgPSB3YWxsZXRQYXJhbXMucm9vdFByaXZhdGVLZXk7XG4gICAgaWYgKHJvb3RQcnYpIHtcbiAgICAgIGlmICghdGhpcy5pc1ZhbGlkUHJ2KHJvb3RQcnYpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcigncm9vdFByaXZhdGVLZXkgbmVlZHMgdG8gYmUgdmFsaWQgZWQyNTUxOSBzZWNyZXQgc2VlZCcpO1xuICAgICAgfVxuICAgICAgc2VlZCA9IHN0ZWxsYXIuU3RyS2V5LmRlY29kZUVkMjU1MTlTZWNyZXRTZWVkKHJvb3RQcnYpO1xuICAgIH1cbiAgICBjb25zdCBrZXlQYWlyID0gdGhpcy5nZW5lcmF0ZUtleVBhaXIoc2VlZCk7XG4gICAgLy8gZXh0ZW5kIHRoZSB3YWxsZXQgaW5pdGlhbGl6YXRpb24gcGFyYW1zXG4gICAgd2FsbGV0UGFyYW1zLnJvb3RQcml2YXRlS2V5ID0ga2V5UGFpci5wcnY7XG4gICAgcmV0dXJuIHdhbGxldFBhcmFtcztcbiAgfVxuXG4gIC8qKlxuICAgKiBTaWduIG1lc3NhZ2Ugd2l0aCBwcml2YXRlIGtleVxuICAgKlxuICAgKiBAcGFyYW0ga2V5XG4gICAqIEBwYXJhbSBtZXNzYWdlXG4gICAqL1xuICBhc3luYyBzaWduTWVzc2FnZShrZXk6IEtleVBhaXIsIG1lc3NhZ2U6IHN0cmluZyB8IEJ1ZmZlcik6IFByb21pc2U8QnVmZmVyPiB7XG4gICAgaWYgKCF0aGlzLmlzVmFsaWRQcnYoa2V5LnBydikpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgaW52YWxpZCBwcnY6ICR7a2V5LnBydn1gKTtcbiAgICB9XG4gICAgaWYgKCFCdWZmZXIuaXNCdWZmZXIobWVzc2FnZSkpIHtcbiAgICAgIG1lc3NhZ2UgPSBCdWZmZXIuZnJvbShtZXNzYWdlKTtcbiAgICB9XG4gICAgY29uc3Qga2V5cGFpciA9IHN0ZWxsYXIuS2V5cGFpci5mcm9tU2VjcmV0KGtleS5wcnYpO1xuICAgIHJldHVybiBrZXlwYWlyLnNpZ24obWVzc2FnZSk7XG4gIH1cblxuICAvKipcbiAgICogVmVyaWZpZXMgaWYgc2lnbmF0dXJlIGZvciBtZXNzYWdlIGlzIHZhbGlkLlxuICAgKlxuICAgKiBAcGFyYW0gcHViIHB1YmxpYyBrZXlcbiAgICogQHBhcmFtIG1lc3NhZ2Ugc2lnbmVkIG1lc3NhZ2VcbiAgICogQHBhcmFtIHNpZ25hdHVyZSBzaWduYXR1cmUgdG8gdmVyaWZ5XG4gICAqIEByZXR1cm5zIHRydWUgaWYgc2lnbmF0dXJlIGlzIHZhbGlkLlxuICAgKi9cbiAgdmVyaWZ5U2lnbmF0dXJlKHB1Yjogc3RyaW5nLCBtZXNzYWdlOiBzdHJpbmcgfCBCdWZmZXIsIHNpZ25hdHVyZTogQnVmZmVyKSB7XG4gICAgaWYgKCF0aGlzLmlzVmFsaWRQdWIocHViKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBpbnZhbGlkIHB1YjogJHtwdWJ9YCk7XG4gICAgfVxuICAgIGlmICghQnVmZmVyLmlzQnVmZmVyKG1lc3NhZ2UpKSB7XG4gICAgICBtZXNzYWdlID0gQnVmZmVyLmZyb20obWVzc2FnZSk7XG4gICAgfVxuICAgIGNvbnN0IGtleVBhaXIgPSBzdGVsbGFyLktleXBhaXIuZnJvbVB1YmxpY0tleShwdWIpO1xuICAgIHJldHVybiBrZXlQYWlyLnZlcmlmeShtZXNzYWdlLCBzaWduYXR1cmUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEV4cGxhaW4vcGFyc2UgdHJhbnNhY3Rpb25cbiAgICogQHBhcmFtIHBhcmFtc1xuICAgKi9cbiAgYXN5bmMgZXhwbGFpblRyYW5zYWN0aW9uKHBhcmFtczogRXhwbGFpblRyYW5zYWN0aW9uT3B0aW9ucyk6IFByb21pc2U8VHJhbnNhY3Rpb25FeHBsYW5hdGlvbj4ge1xuICAgIGNvbnN0IHsgdHhIZXgsIHR4QmFzZTY0IH0gPSBwYXJhbXM7XG4gICAgbGV0IHR4OiBzdGVsbGFyLlRyYW5zYWN0aW9uIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkO1xuXG4gICAgaWYgKCF0eEhleCAmJiAhdHhCYXNlNjQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignZXhwbGFpblRyYW5zYWN0aW9uIG1pc3NpbmcgdHhIZXggb3IgdHhCYXNlNjQgcGFyYW1ldGVyLCBtdXN0IGhhdmUgYXQgbGVhc3Qgb25lJyk7XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGlmICh0eEhleCkge1xuICAgICAgICB0eCA9IG5ldyBzdGVsbGFyLlRyYW5zYWN0aW9uKEJ1ZmZlci5mcm9tKHR4SGV4LCAnaGV4JykudG9TdHJpbmcoJ2Jhc2U2NCcpLCB0aGlzLmdldFN0ZWxsYXJOZXR3b3JrKCkpO1xuICAgICAgfSBlbHNlIGlmICh0eEJhc2U2NCkge1xuICAgICAgICB0eCA9IG5ldyBzdGVsbGFyLlRyYW5zYWN0aW9uKHR4QmFzZTY0LCB0aGlzLmdldFN0ZWxsYXJOZXR3b3JrKCkpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcigndHhCYXNlNjQgbmVlZHMgdG8gYmUgYSB2YWxpZCB0eCBlbmNvZGVkIGFzIGJhc2U2NCBzdHJpbmcnKTtcbiAgICB9XG5cbiAgICBpZiAoIXR4KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ3R4IG5lZWRzIHRvIGJlIGRlZmluZWQgaW4gb3JkZXIgdG8gZXhwbGFpbiB0cmFuc2FjdGlvbicpO1xuICAgIH1cbiAgICBjb25zdCBpZCA9IHR4Lmhhc2goKS50b1N0cmluZygnaGV4Jyk7XG5cbiAgICAvLyBJbiBhIFN0ZWxsYXIgdHgsIHRoZSBfbWVtbyBwcm9wZXJ0eSBpcyBhbiBvYmplY3Qgd2l0aCB0aGUgbWV0aG9kczpcbiAgICAvLyB2YWx1ZSgpIGFuZCBhcm0oKSB0aGF0IHByb3ZpZGUgbWVtbyB2YWx1ZSBhbmQgdHlwZSwgcmVzcGVjdGl2ZWx5LlxuICAgIGNvbnN0IG1lbW86IFRyYW5zYWN0aW9uTWVtbyA9XG4gICAgICBfLnJlc3VsdCh0eCwgJ19tZW1vLnZhbHVlJykgJiYgXy5yZXN1bHQodHgsICdfbWVtby5hcm0nKVxuICAgICAgICA/IHtcbiAgICAgICAgICAgIHZhbHVlOiAoXy5yZXN1bHQodHgsICdfbWVtby52YWx1ZScpIGFzIGFueSkudG9TdHJpbmcoKSxcbiAgICAgICAgICAgIHR5cGU6IF8ucmVzdWx0KHR4LCAnX21lbW8uYXJtJyksXG4gICAgICAgICAgfVxuICAgICAgICA6IHt9O1xuXG4gICAgbGV0IHNwZW5kQW1vdW50ID0gbmV3IEJpZ051bWJlcigwKTsgLy8gYW1vdW50IG9mIFhMTSB1c2VkIGluIFhMTS1vbmx5IHR4c1xuICAgIGNvbnN0IHNwZW5kQW1vdW50cyA9IHt9OyAvLyB0cmFjayBib3RoIHhsbSBhbmQgdG9rZW4gYW1vdW50c1xuICAgIGlmIChfLmlzRW1wdHkodHgub3BlcmF0aW9ucykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignbWlzc2luZyBvcGVyYXRpb25zJyk7XG4gICAgfVxuXG4gICAgY29uc3Qgb3V0cHV0czogVHJhbnNhY3Rpb25PdXRwdXRbXSA9IFtdO1xuICAgIGNvbnN0IG9wZXJhdGlvbnM6IFRyYW5zYWN0aW9uT3BlcmF0aW9uW10gPSBbXTsgLy8gbm9uLXBheW1lbnQgb3BlcmF0aW9uc1xuXG4gICAgXy5mb3JFYWNoKHR4Lm9wZXJhdGlvbnMsIChvcDogc3RlbGxhci5PcGVyYXRpb24pID0+IHtcbiAgICAgIGlmIChvcC50eXBlID09PSAnY3JlYXRlQWNjb3VudCcgfHwgb3AudHlwZSA9PT0gJ3BheW1lbnQnKSB7XG4gICAgICAgIC8vIFRPRE8gUmVtb3ZlIG1lbW9JZCBmcm9tIGFkZHJlc3NcbiAgICAgICAgLy8gR2V0IG1lbW8gdG8gYXR0YWNoIHRvIGFkZHJlc3MsIGlmIHR5cGUgaXMgJ2lkJ1xuICAgICAgICBjb25zdCBtZW1vSWQgPSBfLmdldChtZW1vLCAndHlwZScpID09PSAnaWQnICYmICFfLmdldChtZW1vLCAndmFsdWUnKSA/IGA/bWVtb0lkPSR7bWVtby52YWx1ZX1gIDogJyc7XG4gICAgICAgIGxldCBhc3NldDtcbiAgICAgICAgaWYgKG9wLnR5cGUgPT09ICdwYXltZW50Jykge1xuICAgICAgICAgIGlmIChvcC5hc3NldC5nZXRBc3NldFR5cGUoKSA9PT0gJ2xpcXVpZGl0eV9wb29sX3NoYXJlcycpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBhc3NldCB0eXBlJyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGFzc2V0ID0gb3AuYXNzZXQgYXMgc3RlbGxhci5Bc3NldDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBhc3NldCA9IHN0ZWxsYXIuQXNzZXQubmF0aXZlKCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY29pbiA9IHRoaXMuZ2V0VG9rZW5OYW1lRnJvbVN0ZWxsYXJBc3NldChhc3NldCk7IC8vIGNvaW4gb3IgdG9rZW4gaWRcbiAgICAgICAgY29uc3Qgb3V0cHV0OiBUcmFuc2FjdGlvbk91dHB1dCA9IHtcbiAgICAgICAgICBhbW91bnQ6IHRoaXMuYmlnVW5pdHNUb0Jhc2VVbml0cyhcbiAgICAgICAgICAgIChvcCBhcyBzdGVsbGFyLk9wZXJhdGlvbi5DcmVhdGVBY2NvdW50KS5zdGFydGluZ0JhbGFuY2UgfHwgKG9wIGFzIHN0ZWxsYXIuT3BlcmF0aW9uLlBheW1lbnQpLmFtb3VudFxuICAgICAgICAgICksXG4gICAgICAgICAgYWRkcmVzczogb3AuZGVzdGluYXRpb24gKyBtZW1vSWQsXG4gICAgICAgICAgY29pbixcbiAgICAgICAgfTtcblxuICAgICAgICBpZiAoIV8uaXNVbmRlZmluZWQoc3BlbmRBbW91bnRzW2NvaW5dKSkge1xuICAgICAgICAgIHNwZW5kQW1vdW50c1tjb2luXSA9IHNwZW5kQW1vdW50c1tjb2luXS5wbHVzKG91dHB1dC5hbW91bnQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHNwZW5kQW1vdW50c1tjb2luXSA9IG5ldyBCaWdOdW1iZXIob3V0cHV0LmFtb3VudCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGFzc2V0LmlzTmF0aXZlKCkpIHtcbiAgICAgICAgICBzcGVuZEFtb3VudCA9IHNwZW5kQW1vdW50LnBsdXMob3V0cHV0LmFtb3VudCk7XG4gICAgICAgIH1cbiAgICAgICAgb3V0cHV0cy5wdXNoKG91dHB1dCk7XG4gICAgICB9IGVsc2UgaWYgKG9wLnR5cGUgPT09ICdjaGFuZ2VUcnVzdCcpIHtcbiAgICAgICAgaWYgKG9wLmxpbmUuZ2V0QXNzZXRUeXBlKCkgPT09ICdsaXF1aWRpdHlfcG9vbF9zaGFyZXMnKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGFzc2V0IHR5cGUnKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBhc3NldCA9IG9wLmxpbmUgYXMgc3RlbGxhci5Bc3NldDtcblxuICAgICAgICBvcGVyYXRpb25zLnB1c2goe1xuICAgICAgICAgIHR5cGU6IG9wLnR5cGUsXG4gICAgICAgICAgY29pbjogdGhpcy5nZXRUb2tlbk5hbWVGcm9tU3RlbGxhckFzc2V0KGFzc2V0KSxcbiAgICAgICAgICBhc3NldCxcbiAgICAgICAgICBsaW1pdDogdGhpcy5iaWdVbml0c1RvQmFzZVVuaXRzKG9wLmxpbWl0KSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBjb25zdCBvdXRwdXRBbW91bnQgPSBzcGVuZEFtb3VudC50b0ZpeGVkKDApO1xuICAgIGNvbnN0IG91dHB1dEFtb3VudHMgPSBfLm1hcFZhbHVlcyhzcGVuZEFtb3VudHMsIChhbW91bnQ6IEJpZ051bWJlcikgPT4gYW1vdW50LnRvRml4ZWQoMCkpO1xuICAgIGNvbnN0IGZlZSA9IHtcbiAgICAgIGZlZTogbmV3IEJpZ051bWJlcih0eC5mZWUpLnRvRml4ZWQoMCksXG4gICAgICBmZWVSYXRlOiBudWxsLFxuICAgICAgc2l6ZTogbnVsbCxcbiAgICB9O1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGRpc3BsYXlPcmRlcjogW1xuICAgICAgICAnaWQnLFxuICAgICAgICAnb3V0cHV0QW1vdW50JyxcbiAgICAgICAgJ291dHB1dEFtb3VudHMnLFxuICAgICAgICAnY2hhbmdlQW1vdW50JyxcbiAgICAgICAgJ291dHB1dHMnLFxuICAgICAgICAnY2hhbmdlT3V0cHV0cycsXG4gICAgICAgICdmZWUnLFxuICAgICAgICAnbWVtbycsXG4gICAgICAgICdvcGVyYXRpb25zJyxcbiAgICAgIF0sXG4gICAgICBpZCxcbiAgICAgIG91dHB1dHMsXG4gICAgICBvdXRwdXRBbW91bnQsXG4gICAgICBvdXRwdXRBbW91bnRzLFxuICAgICAgY2hhbmdlT3V0cHV0czogW10sXG4gICAgICBjaGFuZ2VBbW91bnQ6ICcwJyxcbiAgICAgIG1lbW8sXG4gICAgICBmZWUsXG4gICAgICBvcGVyYXRpb25zLFxuICAgIH0gYXMgYW55O1xuICB9XG5cbiAgLyoqXG4gICAqIFZlcmlmeSB0aGF0IGEgdHggcHJlYnVpbGQncyBvcGVyYXRpb25zIGNvbXBseSB3aXRoIHRoZSBvcmlnaW5hbCBpbnRlbnRpb25cbiAgICogQHBhcmFtIHtzdGVsbGFyLk9wZXJhdGlvbn0gb3BlcmF0aW9ucyAtIHR4IG9wZXJhdGlvbnNcbiAgICogQHBhcmFtIHtUcmFuc2FjdGlvblBhcmFtc30gdHhQYXJhbXMgLSBwYXJhbXMgdXNlZCB0byBidWlsZCB0aGUgdHhcbiAgICovXG4gIHZlcmlmeUVuYWJsZVRva2VuVHhPcGVyYXRpb25zKG9wZXJhdGlvbnM6IHN0ZWxsYXIuT3BlcmF0aW9uW10sIHR4UGFyYW1zOiBUcmFuc2FjdGlvblBhcmFtcyk6IHZvaWQge1xuICAgIGNvbnN0IHRydXN0bGluZU9wZXJhdGlvbnMgPSBfLmZpbHRlcihvcGVyYXRpb25zLCBbJ3R5cGUnLCAnY2hhbmdlVHJ1c3QnXSkgYXMgc3RlbGxhci5PcGVyYXRpb24uQ2hhbmdlVHJ1c3RbXTtcbiAgICBpZiAodHJ1c3RsaW5lT3BlcmF0aW9ucy5sZW5ndGggIT09IF8uZ2V0KHR4UGFyYW1zLCAncmVjaXBpZW50cycsIFtdKS5sZW5ndGgpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcigndHJhbnNhY3Rpb24gcHJlYnVpbGQgZG9lcyBub3QgbWF0Y2ggZXhwZWN0ZWQgdHJ1c3RsaW5lIG9wZXJhdGlvbnMnKTtcbiAgICB9XG4gICAgXy5mb3JFYWNoKHRydXN0bGluZU9wZXJhdGlvbnMsIChvcDogc3RlbGxhci5PcGVyYXRpb24pID0+IHtcbiAgICAgIGlmIChvcC50eXBlICE9PSAnY2hhbmdlVHJ1c3QnKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBhc3NldCB0eXBlJyk7XG4gICAgICB9XG4gICAgICBpZiAob3AubGluZS5nZXRBc3NldFR5cGUoKSA9PT0gJ2xpcXVpZGl0eV9wb29sX3NoYXJlcycpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGFzc2V0IHR5cGUnKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGFzc2V0ID0gb3AubGluZSBhcyBzdGVsbGFyLkFzc2V0O1xuICAgICAgY29uc3Qgb3BUb2tlbiA9IHRoaXMuZ2V0VG9rZW5OYW1lRnJvbVN0ZWxsYXJBc3NldChhc3NldCk7XG4gICAgICBjb25zdCB0b2tlblRydXN0bGluZSA9IF8uZmluZCh0eFBhcmFtcy5yZWNpcGllbnRzLCAocmVjaXBpZW50KSA9PiB7XG4gICAgICAgIC8vIHRydXN0bGluZSBwYXJhbXMgdXNlIGxpbWl0cyBpbiBiYXNlIHVuaXRzXG4gICAgICAgIGNvbnN0IG9wTGltaXRCYXNlVW5pdHMgPSB0aGlzLmJpZ1VuaXRzVG9CYXNlVW5pdHMob3AubGltaXQpO1xuICAgICAgICAvLyBFbmFibGUgdG9rZW4gbGltaXQgaXMgc2V0IHRvIFhsbS5tYXhUcnVzdGxpbmVMaW1pdCBieSBkZWZhdWx0XG4gICAgICAgIHJldHVybiByZWNpcGllbnQudG9rZW5OYW1lID09PSBvcFRva2VuICYmIG9wTGltaXRCYXNlVW5pdHMgPT09IFhsbS5tYXhUcnVzdGxpbmVMaW1pdDtcbiAgICAgIH0pO1xuICAgICAgaWYgKCF0b2tlblRydXN0bGluZSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3RyYW5zYWN0aW9uIHByZWJ1aWxkIGRvZXMgbm90IG1hdGNoIGV4cGVjdGVkIHRydXN0bGluZSB0b2tlbnMnKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBWZXJpZnkgdGhhdCBhIHR4IHByZWJ1aWxkJ3Mgb3BlcmF0aW9ucyBjb21wbHkgd2l0aCB0aGUgb3JpZ2luYWwgaW50ZW50aW9uXG4gICAqIEBwYXJhbSB7c3RlbGxhci5PcGVyYXRpb259IG9wZXJhdGlvbnMgLSB0eCBvcGVyYXRpb25zXG4gICAqIEBwYXJhbSB7VHJhbnNhY3Rpb25QYXJhbXN9IHR4UGFyYW1zIC0gcGFyYW1zIHVzZWQgdG8gYnVpbGQgdGhlIHR4XG4gICAqL1xuICB2ZXJpZnlUcnVzdGxpbmVUeE9wZXJhdGlvbnMob3BlcmF0aW9uczogc3RlbGxhci5PcGVyYXRpb25bXSwgdHhQYXJhbXM6IFRyYW5zYWN0aW9uUGFyYW1zKTogdm9pZCB7XG4gICAgY29uc3QgdHJ1c3RsaW5lT3BlcmF0aW9ucyA9IF8uZmlsdGVyKG9wZXJhdGlvbnMsIFsndHlwZScsICdjaGFuZ2VUcnVzdCddKSBhcyBzdGVsbGFyLk9wZXJhdGlvbi5DaGFuZ2VUcnVzdFtdO1xuICAgIGlmICh0cnVzdGxpbmVPcGVyYXRpb25zLmxlbmd0aCAhPT0gXy5nZXQodHhQYXJhbXMsICd0cnVzdGxpbmVzJywgW10pLmxlbmd0aCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCd0cmFuc2FjdGlvbiBwcmVidWlsZCBkb2VzIG5vdCBtYXRjaCBleHBlY3RlZCB0cnVzdGxpbmUgb3BlcmF0aW9ucycpO1xuICAgIH1cbiAgICBfLmZvckVhY2godHJ1c3RsaW5lT3BlcmF0aW9ucywgKG9wOiBzdGVsbGFyLk9wZXJhdGlvbikgPT4ge1xuICAgICAgaWYgKG9wLnR5cGUgIT09ICdjaGFuZ2VUcnVzdCcpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGFzc2V0IHR5cGUnKTtcbiAgICAgIH1cbiAgICAgIGlmIChvcC5saW5lLmdldEFzc2V0VHlwZSgpID09PSAnbGlxdWlkaXR5X3Bvb2xfc2hhcmVzJykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgYXNzZXQgdHlwZScpO1xuICAgICAgfVxuICAgICAgY29uc3QgYXNzZXQgPSBvcC5saW5lIGFzIHN0ZWxsYXIuQXNzZXQ7XG4gICAgICBjb25zdCBvcFRva2VuID0gdGhpcy5nZXRUb2tlbk5hbWVGcm9tU3RlbGxhckFzc2V0KGFzc2V0KTtcbiAgICAgIGNvbnN0IHRva2VuVHJ1c3RsaW5lID0gXy5maW5kKHR4UGFyYW1zLnRydXN0bGluZXMsICh0cnVzdGxpbmUpID0+IHtcbiAgICAgICAgLy8gdHJ1c3RsaW5lIHBhcmFtcyB1c2UgbGltaXRzIGluIGJhc2UgdW5pdHNcbiAgICAgICAgY29uc3Qgb3BMaW1pdEJhc2VVbml0cyA9IHRoaXMuYmlnVW5pdHNUb0Jhc2VVbml0cyhvcC5saW1pdCk7XG4gICAgICAgIC8vIFByZXBhcmUgdGhlIGNvbmRpdGlvbnMgdG8gY2hlY2sgZm9yXG4gICAgICAgIC8vIExpbWl0IHdpbGwgYWx3YXlzIGJlIHNldCBpbiB0aGUgb3BlcmF0aW9uLCBldmVuIGlmIGl0IHdhcyBvbWl0dGVkIGZyb20gdHhQYXJhbXMgaW4gdGhlIGZvbGxvd2luZyBjYXNlczpcbiAgICAgICAgLy8gMS4gQWN0aW9uIGlzICdhZGQnIC0gbGltaXQgaXMgc2V0IHRvIFhsbS5tYXhUcnVzdGxpbmVMaW1pdCBieSBkZWZhdWx0XG4gICAgICAgIC8vIDIuIEFjdGlvbiBpcyAncmVtb3ZlJyAtIGxpbWl0IGlzIHNldCB0byAnMCdcbiAgICAgICAgY29uc3Qgbm9MaW1pdCA9IF8uaXNVbmRlZmluZWQodHJ1c3RsaW5lLmxpbWl0KTtcbiAgICAgICAgY29uc3QgYWRkVHJ1c3RsaW5lV2l0aERlZmF1bHRMaW1pdCA9IHRydXN0bGluZS5hY3Rpb24gPT09ICdhZGQnICYmIG9wTGltaXRCYXNlVW5pdHMgPT09IFhsbS5tYXhUcnVzdGxpbmVMaW1pdDtcbiAgICAgICAgY29uc3QgcmVtb3ZlVHJ1c3RsaW5lID0gdHJ1c3RsaW5lLmFjdGlvbiA9PT0gJ3JlbW92ZScgJiYgb3BMaW1pdEJhc2VVbml0cyA9PT0gJzAnO1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIHRydXN0bGluZS50b2tlbiA9PT0gb3BUb2tlbiAmJlxuICAgICAgICAgICh0cnVzdGxpbmUubGltaXQgPT09IG9wTGltaXRCYXNlVW5pdHMgfHwgKG5vTGltaXQgJiYgKGFkZFRydXN0bGluZVdpdGhEZWZhdWx0TGltaXQgfHwgcmVtb3ZlVHJ1c3RsaW5lKSkpXG4gICAgICAgICk7XG4gICAgICB9KTtcbiAgICAgIGlmICghdG9rZW5UcnVzdGxpbmUpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCd0cmFuc2FjdGlvbiBwcmVidWlsZCBkb2VzIG5vdCBtYXRjaCBleHBlY3RlZCB0cnVzdGxpbmUgdG9rZW5zJyk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogVmVyaWZ5IHRoYXQgYSB0cmFuc2FjdGlvbiBwcmVidWlsZCBjb21wbGllcyB3aXRoIHRoZSBvcmlnaW5hbCBpbnRlbnRpb25cbiAgICpcbiAgICogQHBhcmFtIG9wdGlvbnNcbiAgICogQHBhcmFtIG9wdGlvbnMudHhQcmVidWlsZCBwcmVidWlsZCBvYmplY3QgcmV0dXJuZWQgYnkgcGxhdGZvcm1cbiAgICogQHBhcmFtIG9wdGlvbnMudHhQcmVidWlsZC50eEJhc2U2NCBwcmVidWlsdCB0cmFuc2FjdGlvbiBlbmNvZGVkIGFzIGJhc2U2NCBzdHJpbmdcbiAgICogQHBhcmFtIG9wdGlvbnMud2FsbGV0IHdhbGxldCBvYmplY3QgdG8gb2J0YWluIGtleXMgdG8gdmVyaWZ5IGFnYWluc3RcbiAgICogQHBhcmFtIG9wdGlvbnMudmVyaWZpY2F0aW9uIHNwZWNpZnlpbmcgc29tZSB2ZXJpZmljYXRpb24gcGFyYW1ldGVyc1xuICAgKiBAcGFyYW0gb3B0aW9ucy52ZXJpZmljYXRpb24uZGlzYWJsZU5ldHdvcmtpbmcgRGlzYWxsb3cgZmV0Y2hpbmcgYW55IGRhdGEgZnJvbSB0aGUgaW50ZXJuZXQgZm9yIHZlcmlmaWNhdGlvbiBwdXJwb3Nlc1xuICAgKiBAcGFyYW0gb3B0aW9ucy52ZXJpZmljYXRpb24ua2V5Y2hhaW5zIFBhc3Mga2V5Y2hhaW5zIG1hbnVhbGx5IHJhdGhlciB0aGFuIGZldGNoaW5nIHRoZW0gYnkgaWRcbiAgICovXG4gIGFzeW5jIHZlcmlmeVRyYW5zYWN0aW9uKG9wdGlvbnM6IFZlcmlmeVRyYW5zYWN0aW9uT3B0aW9ucyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIC8vIFRPRE8gQkctNTYwMCBBZGQgcGFyc2VUcmFuc2FjdGlvbiAvIGltcHJvdmUgdmVyaWZpY2F0aW9uXG4gICAgY29uc3QgeyB0eFBhcmFtcywgdHhQcmVidWlsZCwgd2FsbGV0LCB2ZXJpZmljYXRpb24gPSB7fSB9ID0gb3B0aW9ucztcbiAgICBjb25zdCBkaXNhYmxlTmV0d29ya2luZyA9ICEhdmVyaWZpY2F0aW9uLmRpc2FibGVOZXR3b3JraW5nO1xuXG4gICAgaWYgKCF0eFByZWJ1aWxkLnR4QmFzZTY0KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ21pc3NpbmcgcmVxdWlyZWQgdHggcHJlYnVpbGQgcHJvcGVydHkgdHhCYXNlNjQnKTtcbiAgICB9XG5cbiAgICBjb25zdCB0eCA9IG5ldyBzdGVsbGFyLlRyYW5zYWN0aW9uKHR4UHJlYnVpbGQudHhCYXNlNjQsIHRoaXMuZ2V0U3RlbGxhck5ldHdvcmsoKSk7XG5cbiAgICBpZiAodHhQYXJhbXMucmVjaXBpZW50cyAmJiB0eFBhcmFtcy5yZWNpcGllbnRzLmxlbmd0aCA+IDEpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignY2Fubm90IHNwZWNpZnkgbW9yZSB0aGFuIDEgcmVjaXBpZW50Jyk7XG4gICAgfVxuXG4gICAgLy8gU3RlbGxhciB0eHMgYXJlIG1hZGUgdXAgb2Ygb3BlcmF0aW9ucy4gV2Ugb25seSBjYXJlIGFib3V0IENyZWF0ZSBBY2NvdW50IGFuZCBQYXltZW50IGZvciBzZW5kaW5nIGZ1bmRzLlxuICAgIGNvbnN0IG91dHB1dE9wZXJhdGlvbnMgPSBfLmZpbHRlcihcbiAgICAgIHR4Lm9wZXJhdGlvbnMsXG4gICAgICAob3BlcmF0aW9uKSA9PiBvcGVyYXRpb24udHlwZSA9PT0gJ2NyZWF0ZUFjY291bnQnIHx8IG9wZXJhdGlvbi50eXBlID09PSAncGF5bWVudCdcbiAgICApO1xuXG4gICAgaWYgKHR4UGFyYW1zLnR5cGUgPT09ICdlbmFibGV0b2tlbicpIHtcbiAgICAgIHRoaXMudmVyaWZ5RW5hYmxlVG9rZW5UeE9wZXJhdGlvbnModHgub3BlcmF0aW9ucywgdHhQYXJhbXMpO1xuICAgIH0gZWxzZSBpZiAodHhQYXJhbXMudHlwZSA9PT0gJ3RydXN0bGluZScpIHtcbiAgICAgIHRoaXMudmVyaWZ5VHJ1c3RsaW5lVHhPcGVyYXRpb25zKHR4Lm9wZXJhdGlvbnMsIHR4UGFyYW1zKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKF8uaXNFbXB0eShvdXRwdXRPcGVyYXRpb25zKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3RyYW5zYWN0aW9uIHByZWJ1aWxkIGRvZXMgbm90IGhhdmUgYW55IG9wZXJhdGlvbnMnKTtcbiAgICAgIH1cblxuICAgICAgXy5mb3JFYWNoKHR4UGFyYW1zLnJlY2lwaWVudHMsIChleHBlY3RlZE91dHB1dCwgaW5kZXgpID0+IHtcbiAgICAgICAgY29uc3QgZXhwZWN0ZWRPdXRwdXRBZGRyZXNzRGV0YWlscyA9IHRoaXMuZ2V0QWRkcmVzc0RldGFpbHMoZXhwZWN0ZWRPdXRwdXQuYWRkcmVzcyk7XG4gICAgICAgIGNvbnN0IGV4cGVjdGVkT3V0cHV0QWRkcmVzcyA9IGV4cGVjdGVkT3V0cHV0QWRkcmVzc0RldGFpbHMuYWRkcmVzcztcbiAgICAgICAgY29uc3Qgb3V0cHV0ID0gb3V0cHV0T3BlcmF0aW9uc1tpbmRleF0gYXMgc3RlbGxhci5PcGVyYXRpb24uUGF5bWVudCB8IHN0ZWxsYXIuT3BlcmF0aW9uLkNyZWF0ZUFjY291bnQ7XG4gICAgICAgIGlmIChvdXRwdXQuZGVzdGluYXRpb24gIT09IGV4cGVjdGVkT3V0cHV0QWRkcmVzcykge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcigndHJhbnNhY3Rpb24gcHJlYnVpbGQgZG9lcyBub3QgbWF0Y2ggZXhwZWN0ZWQgcmVjaXBpZW50Jyk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBleHBlY3RlZE91dHB1dEFtb3VudCA9IG5ldyBCaWdOdW1iZXIoZXhwZWN0ZWRPdXRwdXQuYW1vdW50KTtcbiAgICAgICAgLy8gVGhlIG91dHB1dCBhbW91bnQgaXMgZXhwcmVzc2VkIGFzIHN0YXJ0aW5nQmFsYW5jZSBpbiBjcmVhdGVBY2NvdW50IG9wZXJhdGlvbnMgYW5kIGFzIGFtb3VudCBpbiBwYXltZW50IG9wZXJhdGlvbnMuXG4gICAgICAgIGNvbnN0IG91dHB1dEFtb3VudFN0cmluZyA9IG91dHB1dC50eXBlID09PSAnY3JlYXRlQWNjb3VudCcgPyBvdXRwdXQuc3RhcnRpbmdCYWxhbmNlIDogb3V0cHV0LmFtb3VudDtcbiAgICAgICAgY29uc3Qgb3V0cHV0QW1vdW50ID0gbmV3IEJpZ051bWJlcih0aGlzLmJpZ1VuaXRzVG9CYXNlVW5pdHMob3V0cHV0QW1vdW50U3RyaW5nKSk7XG5cbiAgICAgICAgaWYgKCFvdXRwdXRBbW91bnQuZXEoZXhwZWN0ZWRPdXRwdXRBbW91bnQpKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCd0cmFuc2FjdGlvbiBwcmVidWlsZCBkb2VzIG5vdCBtYXRjaCBleHBlY3RlZCBhbW91bnQnKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gVmVyaWZ5IHRoZSB1c2VyIHNpZ25hdHVyZSwgaWYgdGhlIHR4IGlzIGhhbGYtc2lnbmVkXG4gICAgaWYgKCFfLmlzRW1wdHkodHguc2lnbmF0dXJlcykpIHtcbiAgICAgIGNvbnN0IHVzZXJTaWduYXR1cmUgPSB0eC5zaWduYXR1cmVzWzBdLnNpZ25hdHVyZSgpO1xuXG4gICAgICAvLyBvYnRhaW4gdGhlIGtleWNoYWlucyBhbmQga2V5IHNpZ25hdHVyZXNcbiAgICAgIGxldCBrZXljaGFpbnMgPSB2ZXJpZmljYXRpb24ua2V5Y2hhaW5zO1xuICAgICAgaWYgKCFrZXljaGFpbnMgJiYgZGlzYWJsZU5ldHdvcmtpbmcpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdjYW5ub3QgZmV0Y2gga2V5Y2hhaW5zIHdpdGhvdXQgbmV0d29ya2luZycpO1xuICAgICAgfSBlbHNlIGlmICgha2V5Y2hhaW5zKSB7XG4gICAgICAgIGtleWNoYWlucyA9IGF3YWl0IHByb21pc2VQcm9wcyh7XG4gICAgICAgICAgdXNlcjogdGhpcy5rZXljaGFpbnMoKS5nZXQoeyBpZDogd2FsbGV0LmtleUlkcygpW0tleUluZGljZXMuVVNFUl0gfSksXG4gICAgICAgICAgYmFja3VwOiB0aGlzLmtleWNoYWlucygpLmdldCh7IGlkOiB3YWxsZXQua2V5SWRzKClbS2V5SW5kaWNlcy5CQUNLVVBdIH0pLFxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgaWYgKCFrZXljaGFpbnMgfHwgIWtleWNoYWlucy5iYWNrdXAgfHwgIWtleWNoYWlucy51c2VyKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcigna2V5Y2hhaW5zIGFyZSByZXF1aXJlZCwgYnV0IGNvdWxkIG5vdCBiZSBmZXRjaGVkJyk7XG4gICAgICB9XG5cbiAgICAgIGFzc2VydChrZXljaGFpbnMuYmFja3VwLnB1Yik7XG4gICAgICBpZiAodGhpcy52ZXJpZnlTaWduYXR1cmUoa2V5Y2hhaW5zLmJhY2t1cC5wdWIsIHR4Lmhhc2goKSwgdXNlclNpZ25hdHVyZSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCd0cmFuc2FjdGlvbiBzaWduZWQgd2l0aCB3cm9uZyBrZXknKTtcbiAgICAgIH1cbiAgICAgIGFzc2VydChrZXljaGFpbnMudXNlci5wdWIpO1xuICAgICAgaWYgKCF0aGlzLnZlcmlmeVNpZ25hdHVyZShrZXljaGFpbnMudXNlci5wdWIsIHR4Lmhhc2goKSwgdXNlclNpZ25hdHVyZSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCd0cmFuc2FjdGlvbiBzaWduYXR1cmUgaW52YWxpZCcpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLyoqIGluaGVyaXRkb2MgKi9cbiAgZGVyaXZlS2V5V2l0aFNlZWQoKTogeyBkZXJpdmF0aW9uUGF0aDogc3RyaW5nOyBrZXk6IHN0cmluZyB9IHtcbiAgICB0aHJvdyBuZXcgTm90U3VwcG9ydGVkKCdtZXRob2QgZGVyaXZlS2V5V2l0aFNlZWQgbm90IHN1cHBvcnRlZCBmb3IgZWRkc2EgY3VydmUnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBzdGVsbGFyLXNkayBoYXMgdHdvIG92ZXJsb2FkcyBmb3IgdG9YRFIsIGFuZCB0eXBlc2NyaXB0IGNhbid0IHNlZW0gdG8gZmlndXJlIG91dCB0aGVcbiAgICogY29ycmVjdCBvbmUgdG8gdXNlLCBzbyB3ZSBoYXZlIHRvIGJlIHZlcnkgZXhwbGljaXQgYXMgdG8gd2hpY2ggb25lIHdlIHdhbnQuXG4gICAqIEBwYXJhbSB0eCB0cmFuc2FjdGlvbiB0byBjb252ZXJ0XG4gICAqL1xuICBwcm90ZWN0ZWQgc3RhdGljIHR4VG9TdHJpbmcgPSAodHg6IHN0ZWxsYXIuVHJhbnNhY3Rpb24pOiBzdHJpbmcgPT5cbiAgICAodHgudG9FbnZlbG9wZSgpLnRvWERSIGFzIChfOiBzdHJpbmcpID0+IHN0cmluZykoJ2Jhc2U2NCcpO1xuXG4gIGFzeW5jIHBhcnNlVHJhbnNhY3Rpb24ocGFyYW1zOiBQYXJzZVRyYW5zYWN0aW9uT3B0aW9ucyk6IFByb21pc2U8UGFyc2VkVHJhbnNhY3Rpb24+IHtcbiAgICByZXR1cm4ge307XG4gIH1cblxuICAvKipcbiAgICogR2V0cyBjb25maWcgZm9yIGhvdyB0b2tlbiBlbmFibGVtZW50cyB3b3JrIGZvciB0aGlzIGNvaW5cbiAgICogQHJldHVybnNcbiAgICogICAgcmVxdWlyZXNUb2tlbkVuYWJsZW1lbnQ6IFRydWUgaWYgdG9rZW5zIG5lZWQgdG8gYmUgZW5hYmxlZCBmb3IgdGhpcyBjb2luXG4gICAqICAgIHN1cHBvcnRzTXVsdGlwbGVUb2tlbkVuYWJsZW1lbnRzOiBUcnVlIGlmIG11bHRpcGxlIHRva2VucyBjYW4gYmUgZW5hYmxlZCBpbiBvbmUgdHJhbnNhY3Rpb25cbiAgICovXG4gIGdldFRva2VuRW5hYmxlbWVudENvbmZpZygpOiBUb2tlbkVuYWJsZW1lbnRDb25maWcge1xuICAgIHJldHVybiB7XG4gICAgICByZXF1aXJlc1Rva2VuRW5hYmxlbWVudDogdHJ1ZSxcbiAgICAgIHN1cHBvcnRzTXVsdGlwbGVUb2tlbkVuYWJsZW1lbnRzOiBmYWxzZSxcbiAgICB9O1xuICB9XG59XG4iXX0=
926
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoieGxtLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3hsbS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLG9EQUE0QjtBQUM1QiwwQ0FBNEI7QUFDNUIseURBQTJDO0FBQzNDLHlDQUEyQjtBQUMzQixvREFBc0M7QUFDdEMscURBQXVDO0FBQ3ZDLCtDQUF5QztBQUV6Qyw4Q0EwQnlCO0FBQ3pCLDRDQUFnRDtBQUNoRCxxREFBa0Q7QUErR2xELE1BQWEsR0FBSSxTQUFRLG1CQUFRO0lBUS9CLFlBQVksS0FBZ0I7UUFDMUIsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2IsSUFBSSxDQUFDLFVBQVUsR0FBRyxXQUFXLENBQUMsQ0FBQyxxQ0FBcUM7SUFDdEUsQ0FBQztJQUVELE1BQU0sQ0FBQyxjQUFjLENBQUMsS0FBZ0I7UUFDcEMsT0FBTyxJQUFJLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN4QixDQUFDO0lBRVMsaUJBQWlCO1FBQ3pCLE9BQU8sT0FBTyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUM7SUFDakMsQ0FBQztJQUVEOztPQUVHO0lBQ0gsYUFBYTtRQUNYLE9BQU8sR0FBRyxDQUFDO0lBQ2IsQ0FBQztJQUVEOztPQUVHO0lBQ0gsUUFBUTtRQUNOLE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVEOztPQUVHO0lBQ0gsU0FBUztRQUNQLE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVEOztPQUVHO0lBQ0gsV0FBVztRQUNULE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUM7SUFFRDs7T0FFRztJQUNILHNCQUFzQjtRQUNwQixPQUFPLGlCQUFNLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQywwQkFBMEIsQ0FBQztJQUM3RSxDQUFDO0lBRUQ7O09BRUc7SUFDSCxhQUFhO1FBQ1gsT0FBTyw2QkFBNkIs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Q0FBQzthQUN0RDtZQUNELElBQUEsZ0JBQU0sRUFBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQzNCLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsRUFBRSxhQUFhLENBQUMsRUFBRTtnQkFDdkUsTUFBTSxJQUFJLEtBQUssQ0FBQywrQkFBK0IsQ0FBQyxDQUFDO2FBQ2xEO1NBQ0Y7UUFFRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRCxpQkFBaUI7SUFDakIsaUJBQWlCO1FBQ2YsTUFBTSxJQUFJLHVCQUFZLENBQUMsd0RBQXdELENBQUMsQ0FBQztJQUNuRixDQUFDO0lBVUQsS0FBSyxDQUFDLGdCQUFnQixDQUFDLE1BQStCO1FBQ3BELE9BQU8sRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsd0JBQXdCO1FBQ3RCLE9BQU87WUFDTCx1QkFBdUIsRUFBRSxJQUFJO1lBQzdCLGdDQUFnQyxFQUFFLEtBQUs7U0FDeEMsQ0FBQztJQUNKLENBQUM7O0FBbCtCSCxrQkFtK0JDO0FBaitCd0IseUJBQXFCLEdBQUcsR0FBRyxDQUFDLENBQUMsc0NBQXNDO0FBQzFFLGFBQVMsR0FBVyxvQkFBb0IsQ0FBQyxDQUFDLG9EQUFvRDtBQUM5RyxxREFBcUQ7QUFDckQsMEdBQTBHO0FBQzFGLHFCQUFpQixHQUFXLHFCQUFxQixDQUFDO0FBcThCbEU7Ozs7R0FJRztBQUNjLGNBQVUsR0FBRyxDQUFDLEVBQXVCLEVBQVUsRUFBRSxDQUMvRCxFQUFFLENBQUMsVUFBVSxFQUFFLENBQUMsS0FBK0IsQ0FBQyxRQUFRLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcbmltcG9ydCAqIGFzIF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCAqIGFzIHF1ZXJ5c3RyaW5nIGZyb20gJ3F1ZXJ5c3RyaW5nJztcbmltcG9ydCAqIGFzIHVybCBmcm9tICd1cmwnO1xuaW1wb3J0ICogYXMgcmVxdWVzdCBmcm9tICdzdXBlcmFnZW50JztcbmltcG9ydCAqIGFzIHN0ZWxsYXIgZnJvbSAnc3RlbGxhci1zZGsnO1xuaW1wb3J0IHsgQmlnTnVtYmVyIH0gZnJvbSAnYmlnbnVtYmVyLmpzJztcblxuaW1wb3J0IHtcbiAgQmFzZUNvaW4sXG4gIEJpdEdvQmFzZSxcbiAgY2hlY2tLcnNQcm92aWRlcixcbiAgY29tbW9uLFxuICBFeHRyYVByZWJ1aWxkUGFyYW1zT3B0aW9ucyxcbiAgSW52YWxpZEFkZHJlc3NFcnJvcixcbiAgSW52YWxpZE1lbW9JZEVycm9yLFxuICBJVHJhbnNhY3Rpb25SZWNpcGllbnQsXG4gIEtleUluZGljZXMsXG4gIEtleVBhaXIsXG4gIFBhcnNlZFRyYW5zYWN0aW9uLFxuICBQYXJzZVRyYW5zYWN0aW9uT3B0aW9ucyxcbiAgcHJvbWlzZVByb3BzLFxuICBTaWduVHJhbnNhY3Rpb25PcHRpb25zIGFzIEJhc2VTaWduVHJhbnNhY3Rpb25PcHRpb25zLFxuICBTdGVsbGFyRmVkZXJhdGlvblVzZXJOb3RGb3VuZEVycm9yLFxuICBUb2tlbkVuYWJsZW1lbnRDb25maWcsXG4gIFRyYW5zYWN0aW9uRXhwbGFuYXRpb24gYXMgQmFzZVRyYW5zYWN0aW9uRXhwbGFuYXRpb24sXG4gIFRyYW5zYWN0aW9uUGFyYW1zIGFzIEJhc2VUcmFuc2FjdGlvblBhcmFtcyxcbiAgVHJhbnNhY3Rpb25QcmVidWlsZCBhcyBCYXNlVHJhbnNhY3Rpb25QcmVidWlsZCxcbiAgVHJhbnNhY3Rpb25SZWNpcGllbnQgYXMgQmFzZVRyYW5zYWN0aW9uT3V0cHV0LFxuICBVbmV4cGVjdGVkQWRkcmVzc0Vycm9yLFxuICBWZXJpZnlBZGRyZXNzT3B0aW9ucyBhcyBCYXNlVmVyaWZ5QWRkcmVzc09wdGlvbnMsXG4gIFZlcmlmeVRyYW5zYWN0aW9uT3B0aW9ucyBhcyBCYXNlVmVyaWZ5VHJhbnNhY3Rpb25PcHRpb25zLFxuICBXYWxsZXQsXG4gIE5vdFN1cHBvcnRlZCxcbn0gZnJvbSAnQGJpdGdvL3Nkay1jb3JlJztcbmltcG9ydCB7IHRvQml0Z29SZXF1ZXN0IH0gZnJvbSAnQGJpdGdvL3Nkay1hcGknO1xuaW1wb3J0IHsgZ2V0U3RlbGxhcktleXMgfSBmcm9tICcuL2dldFN0ZWxsYXJLZXlzJztcblxuLyoqXG4gKiBYTE0gYWNjb3VudHMgc3VwcG9ydCB2aXJ0dWFsIChtdXhlZCkgYWRkcmVzc2VzXG4gKiBBIGJhc2UgYWRkcmVzcyBzdGFydHMgd2l0aCBcIkdcIiBhbmQgaXMgdGllZCB0byB0aGUgdW5kZXJseWluZyBcInJlYWxcIiBhY2NvdW50XG4gKiBBIG11eGVkIGFkZHJlc3Mgc3RhcnRzIHdpdGggXCJNXCIgYW5kIGNvbWJpbmVzIHRoZSBiYXNlIGFkZHJlc3Mgd2l0aCBhIDY0LWJpdCBpbnRlZ2VyIElEIGluIG9yZGVyIHRvIHByb3ZpZGVcbiAqIGFuIGFsdGVybmF0aXZlIHRvIG1lbW8gaWRzLlxuICovXG5pbnRlcmZhY2UgQWRkcmVzc0RldGFpbHMge1xuICBiYXNlQWRkcmVzczogc3RyaW5nO1xuICBhZGRyZXNzOiBzdHJpbmc7XG4gIGlkPzogc3RyaW5nO1xuICBtZW1vSWQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG59XG5cbmludGVyZmFjZSBNZW1vIHtcbiAgdHlwZTogc3RlbGxhci5NZW1vVHlwZTtcbiAgdmFsdWU6IHN0cmluZztcbn1cblxuaW50ZXJmYWNlIEluaXRpYXRlUmVjb3ZlcnlPcHRpb25zIHtcbiAgdXNlcktleTogc3RyaW5nO1xuICBiYWNrdXBLZXk6IHN0cmluZztcbiAgcmVjb3ZlcnlEZXN0aW5hdGlvbjogc3RyaW5nO1xuICBrcnNQcm92aWRlcj86IHN0cmluZztcbiAgd2FsbGV0UGFzc3BocmFzZT86IHN0cmluZztcbn1cblxuaW50ZXJmYWNlIFJlY292ZXJ5T3B0aW9ucyBleHRlbmRzIEluaXRpYXRlUmVjb3ZlcnlPcHRpb25zIHtcbiAgcm9vdEFkZHJlc3M/OiBzdHJpbmc7XG59XG5cbmludGVyZmFjZSBSZWNvdmVyeVRyYW5zYWN0aW9uIHtcbiAgdHg6IHN0cmluZztcbiAgcmVjb3ZlcnlBbW91bnQ6IG51bWJlcjtcbiAgYmFja3VwS2V5Pzogc3RyaW5nO1xuICBjb2luPzogc3RyaW5nO1xufVxuXG5pbnRlcmZhY2UgQnVpbGRPcHRpb25zIHtcbiAgd2FsbGV0PzogV2FsbGV0O1xuICByZWNpcGllbnRzPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPltdO1xuICB0eXBlPzogc3RyaW5nO1xuICB3YWxsZXRQYXNzcGhyYXNlPzogc3RyaW5nO1xuICBbaW5kZXg6IHN0cmluZ106IHVua25vd247XG59XG5cbmludGVyZmFjZSBUcmFuc2FjdGlvblByZWJ1aWxkIGV4dGVuZHMgQmFzZVRyYW5zYWN0aW9uUHJlYnVpbGQge1xuICB0eEJhc2U2NDogc3RyaW5nO1xufVxuXG5pbnRlcmZhY2UgU2lnblRyYW5zYWN0aW9uT3B0aW9ucyBleHRlbmRzIEJhc2VTaWduVHJhbnNhY3Rpb25PcHRpb25zIHtcbiAgdHhQcmVidWlsZDogVHJhbnNhY3Rpb25QcmVidWlsZDtcbiAgcHJ2OiBzdHJpbmc7XG59XG5cbmludGVyZmFjZSBIYWxmU2lnbmVkVHJhbnNhY3Rpb24ge1xuICBoYWxmU2lnbmVkOiB7XG4gICAgdHhCYXNlNjQ6IHN0cmluZztcbiAgfTtcbiAgcmVjaXBpZW50cz86IElUcmFuc2FjdGlvblJlY2lwaWVudFtdO1xuICB0eXBlPzogc3RyaW5nO1xufVxuXG5pbnRlcmZhY2UgU3VwcGxlbWVudEdlbmVyYXRlV2FsbGV0T3B0aW9ucyB7XG4gIHJvb3RQcml2YXRlS2V5Pzogc3RyaW5nO1xufVxuXG5pbnRlcmZhY2UgRXhwbGFpblRyYW5zYWN0aW9uT3B0aW9ucyB7XG4gIHR4SGV4Pzogc3RyaW5nO1xuICB0eEJhc2U2ND86IHN0cmluZztcbn1cblxuaW50ZXJmYWNlIFRyYW5zYWN0aW9uTWVtbyB7XG4gIHZhbHVlPzogc3RyaW5nO1xuICB0eXBlPzogc3RyaW5nO1xufVxuXG5pbnRlcmZhY2UgVHJhbnNhY3Rpb25PcGVyYXRpb24ge1xuICB0eXBlOiBzdHJpbmc7XG4gIGNvaW46IHN0cmluZztcbiAgbGltaXQ/OiBzdHJpbmc7XG4gIGFzc2V0Pzogc3RlbGxhci5Bc3NldDtcbn1cblxuaW50ZXJmYWNlIFRyYW5zYWN0aW9uT3V0cHV0IGV4dGVuZHMgQmFzZVRyYW5zYWN0aW9uT3V0cHV0IHtcbiAgY29pbjogc3RyaW5nO1xufVxuXG5pbnRlcmZhY2UgVHJhbnNhY3Rpb25FeHBsYW5hdGlvbiBleHRlbmRzIEJhc2VUcmFuc2FjdGlvbkV4cGxhbmF0aW9uIHtcbiAgbWVtbzogVHJhbnNhY3Rpb25NZW1vO1xufVxuXG5pbnRlcmZhY2UgVmVyaWZ5QWRkcmVzc09wdGlvbnMgZXh0ZW5kcyBCYXNlVmVyaWZ5QWRkcmVzc09wdGlvbnMge1xuICByb290QWRkcmVzczogc3RyaW5nO1xufVxuXG5pbnRlcmZhY2UgVHJ1c3RsaW5lT3B0aW9ucyB7XG4gIHRva2VuOiBzdHJpbmc7XG4gIGFjdGlvbjogc3RyaW5nO1xuICBsaW1pdD86IHN0cmluZztcbn1cblxuaW50ZXJmYWNlIFRyYW5zYWN0aW9uUGFyYW1zIGV4dGVuZHMgQmFzZVRyYW5zYWN0aW9uUGFyYW1zIHtcbiAgdHJ1c3RsaW5lcz86IFRydXN0bGluZU9wdGlvbnNbXTtcbn1cblxuaW50ZXJmYWNlIFZlcmlmeVRyYW5zYWN0aW9uT3B0aW9ucyBleHRlbmRzIEJhc2VWZXJpZnlUcmFuc2FjdGlvbk9wdGlvbnMge1xuICB0eFBhcmFtczogVHJhbnNhY3Rpb25QYXJhbXM7XG59XG5cbmV4cG9ydCBjbGFzcyBYbG0gZXh0ZW5kcyBCYXNlQ29pbiB7XG4gIHB1YmxpYyByZWFkb25seSBob21lRG9tYWluOiBzdHJpbmc7XG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgdG9rZW5QYXR0ZXJuU2VwYXJhdG9yID0gJy0nOyAvLyBzZXBhcmF0b3IgZm9yIHRva2VuIGNvZGUgYW5kIGlzc3VlclxuICBzdGF0aWMgcmVhZG9ubHkgbWF4TWVtb0lkOiBzdHJpbmcgPSAnMHhGRkZGRkZGRkZGRkZGRkZGJzsgLy8gbWF4IHVuc2lnbmVkIDY0LWJpdCBudW1iZXIgPSAxODQ0Njc0NDA3MzcwOTU1MTYxNVxuICAvLyBtYXggaW50NjQgbnVtYmVyIHN1cHBvcnRlZCBieSB0aGUgbmV0d29yayAoMl42MyktMVxuICAvLyBTZWU6IGh0dHBzOi8vd3d3LnN0ZWxsYXIub3JnL2RldmVsb3BlcnMvZ3VpZGVzL2NvbmNlcHRzL2Fzc2V0cy5odG1sI2Ftb3VudC1wcmVjaXNpb24tYW5kLXJlcHJlc2VudGF0aW9uXG4gIHN0YXRpYyByZWFkb25seSBtYXhUcnVzdGxpbmVMaW1pdDogc3RyaW5nID0gJzkyMjMzNzIwMzY4NTQ3NzU4MDcnO1xuXG4gIGNvbnN0cnVjdG9yKGJpdGdvOiBCaXRHb0Jhc2UpIHtcbiAgICBzdXBlcihiaXRnbyk7XG4gICAgdGhpcy5ob21lRG9tYWluID0gJ2JpdGdvLmNvbSc7IC8vIHVzZWQgZm9yIHJldmVyc2UgZmVkZXJhdGlvbiBsb29rdXBcbiAgfVxuXG4gIHN0YXRpYyBjcmVhdGVJbnN0YW5jZShiaXRnbzogQml0R29CYXNlKTogQmFzZUNvaW4ge1xuICAgIHJldHVybiBuZXcgWGxtKGJpdGdvKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRTdGVsbGFyTmV0d29yaygpOiBzdGVsbGFyLk5ldHdvcmtzIHtcbiAgICByZXR1cm4gc3RlbGxhci5OZXR3b3Jrcy5QVUJMSUM7XG4gIH1cblxuICAvKipcbiAgICogRmFjdG9yIGJldHdlZW4gdGhlIGJhc2UgdW5pdCBhbmQgaXRzIHNtYWxsZXN0IHN1YmRpdmlzb25cbiAgICovXG4gIGdldEJhc2VGYWN0b3IoKSB7XG4gICAgcmV0dXJuIDFlNztcbiAgfVxuXG4gIC8qKlxuICAgKiBJZGVudGlmaWVyIGZvciB0aGUgYmxvY2tjaGFpbiB3aGljaCBzdXBwb3J0cyB0aGlzIGNvaW5cbiAgICovXG4gIGdldENoYWluKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuICd4bG0nO1xuICB9XG5cbiAgLyoqXG4gICAqIElkZW50aWZpZXIgZm9yIHRoZSBjb2luIGZhbWlseVxuICAgKi9cbiAgZ2V0RmFtaWx5KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuICd4bG0nO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbXBsZXRlIGh1bWFuLXJlYWRhYmxlIG5hbWUgb2YgdGhpcyBjb2luXG4gICAqL1xuICBnZXRGdWxsTmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiAnU3RlbGxhcic7XG4gIH1cblxuICAvKipcbiAgICogVXJsIGF0IHdoaWNoIHRoZSBzdGVsbGFyIGZlZGVyYXRpb24gc2VydmVyIGNhbiBiZSByZWFjaGVkXG4gICAqL1xuICBnZXRGZWRlcmF0aW9uU2VydmVyVXJsKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGNvbW1vbi5FbnZpcm9ubWVudHNbdGhpcy5iaXRnby5nZXRFbnYoKV0uc3RlbGxhckZlZGVyYXRpb25TZXJ2ZXJVcmw7XG4gIH1cblxuICAvKipcbiAgICogVXJsIGF0IHdoaWNoIGhvcml6b24gY2FuIGJlIHJlYWNoZWRcbiAgICovXG4gIGdldEhvcml6b25VcmwoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gJ2h0dHBzOi8vaG9yaXpvbi5zdGVsbGFyLm9yZyc7XG4gIH1cblxuICAvKiogaW5oZXJpdGRvYyAqL1xuICBnZW5lcmF0ZUtleVBhaXIoc2VlZD86IEJ1ZmZlcik6IEtleVBhaXIge1xuICAgIGNvbnN0IHBhaXIgPSBzZWVkID8gc3RlbGxhci5LZXlwYWlyLmZyb21SYXdFZDI1NTE5U2VlZChzZWVkKSA6IHN0ZWxsYXIuS2V5cGFpci5yYW5kb20oKTtcbiAgICByZXR1cm4ge1xuICAgICAgcHViOiBwYWlyLnB1YmxpY0tleSgpLFxuICAgICAgcHJ2OiBwYWlyLnNlY3JldCgpLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogR2V0IGRlY29kZWQgZWQyNTUxOSBwdWJsaWMga2V5IGZyb20gcmF3IGRhdGFcbiAgICpcbiAgICogQHBhcmFtIHB1YiBSYXcgcHVibGljIGtleVxuICAgKiBAcmV0dXJucyBFbmNvZGVkIHB1YmxpYyBrZXlcbiAgICovXG4gIGdldFB1YkZyb21SYXcocHViOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiBzdGVsbGFyLlN0cktleS5lbmNvZGVFZDI1NTE5UHVibGljS2V5KEJ1ZmZlci5mcm9tKHB1YiwgJ2hleCcpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgZGVjb2RlZCBlZDI1NTE5IHByaXZhdGUga2V5IGZyb20gcmF3IGRhdGFcbiAgICpcbiAgICogQHBhcmFtIHBydiBSYXcgcHJpdmF0ZSBrZXlcbiAgICogQHJldHVybnMgRW5jb2RlZCBwcml2YXRlIGtleVxuICAgKi9cbiAgZ2V0UHJ2RnJvbVJhdyhwcnY6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHN0ZWxsYXIuU3RyS2V5LmVuY29kZUVkMjU1MTlTZWNyZXRTZWVkKEJ1ZmZlci5mcm9tKHBydiwgJ2hleCcpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gYm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgaW5wdXQgaXMgdmFsaWQgcHVibGljIGtleSBmb3IgdGhlIGNvaW4uXG4gICAqXG4gICAqIEBwYXJhbSBwdWIgdGhlIHB1YiB0byBiZSBjaGVja2VkXG4gICAqIEByZXR1cm5zIGlzIGl0IHZhbGlkP1xuICAgKi9cbiAgaXNWYWxpZFB1YihwdWI6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBzdGVsbGFyLlN0cktleS5pc1ZhbGlkRWQyNTUxOVB1YmxpY0tleShwdWIpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiBib29sZWFuIGluZGljYXRpbmcgd2hldGhlciBpbnB1dCBpcyB2YWxpZCBwcml2YXRlIGtleSBmb3IgdGhlIGNvaW5cbiAgICpcbiAgICogQHBhcmFtIHBydiB0aGUgcHJ2IHRvIGJlIGNoZWNrZWRcbiAgICogQHJldHVybnMgaXMgaXQgdmFsaWQ/XG4gICAqL1xuICBpc1ZhbGlkUHJ2KHBydjogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHN0ZWxsYXIuU3RyS2V5LmlzVmFsaWRFZDI1NTE5U2VjcmV0U2VlZChwcnYpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiBib29sZWFuIGluZGljYXRpbmcgd2hldGhlciBhIG1lbW8gaWQgaXMgdmFsaWRcbiAgICpcbiAgICogQHBhcmFtIG1lbW9JZCBtZW1vIGlkXG4gICAqIEByZXR1cm5zIHRydWUgaWYgbWVtbyBpZCBpcyB2YWxpZFxuICAgKi9cbiAgaXNWYWxpZE1lbW9JZChtZW1vSWQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGxldCBtZW1vSWROdW1iZXI7XG4gICAgdHJ5IHtcbiAgICAgIHN0ZWxsYXIuTWVtby5pZChtZW1vSWQpOyAvLyB0aHJvd3MgaWYgdGhlIHZhbHVlIGlzIG5vdCB2YWxpZCBtZW1vIGlkXG4gICAgICBtZW1vSWROdW1iZXIgPSBuZXcgQmlnTnVtYmVyKG1lbW9JZCk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHJldHVybiBtZW1vSWROdW1iZXIuZ3RlKDApICYmIG1lbW9JZE51bWJlci5sdChYbG0ubWF4TWVtb0lkKTtcbiAgfVxuXG4gIHN1cHBvcnRzRGVyaXZlS2V5V2l0aFNlZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLyoqXG4gICAqIEV2YWx1YXRlcyB3aGV0aGVyIGEgbWVtbyBpcyB2YWxpZFxuICAgKlxuICAgKiBAcGFyYW0gdmFsdWUgdmFsdWUgb2YgdGhlIG1lbW9cbiAgICogQHBhcmFtIHR5cGUgdHlwZSBvZiB0aGUgbWVtb1xuICAgKiBAcmV0dXJucyB0cnVlIGlmIHZhbHVlIGFuZCB0eXBlIGFyZSBhIHZhbGlkXG4gICAqL1xuICBpc1ZhbGlkTWVtbyh7IHZhbHVlLCB0eXBlIH06IE1lbW8pOiBib29sZWFuIHtcbiAgICBpZiAoIXZhbHVlIHx8ICF0eXBlKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAvLyB0aHJvd3MgaWYgdGhlIHZhbHVlIGlzIG5vdCB2YWxpZCBmb3IgdGhlIHR5cGVcbiAgICAgIC8vIHZhbGlkIHR5cGVzIGFyZTogJ2lkJywgJ3RleHQnLCAnaGFzaCcsICdyZXR1cm4nXG4gICAgICAvLyBTZWUgaHR0cHM6Ly93d3cuc3RlbGxhci5vcmcvZGV2ZWxvcGVycy9ndWlkZXMvY29uY2VwdHMvdHJhbnNhY3Rpb25zLmh0bWwjbWVtb1xuICAgICAgc3RlbGxhci5NZW1vW3R5cGVdKHZhbHVlKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBpbnN0YW5jZSBvZiBzdGVsbGFyLk11eGVkQWNjb3VudCBmcm9tIE0gYWRkcmVzc1xuICAgKiBTZWU6IGh0dHBzOi8vZGV2ZWxvcGVycy5zdGVsbGFyLm9yZy9kb2NzL2dsb3NzYXJ5L211eGVkLWFjY291bnRzXG4gICAqL1xuICBnZXRNdXhlZEFjY291bnQoYWRkcmVzczogc3RyaW5nKTogc3RlbGxhci5NdXhlZEFjY291bnQge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gc3RlbGxhci5NdXhlZEFjY291bnQuZnJvbUFkZHJlc3MoYWRkcmVzcywgJzAnKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYGludmFsaWQgbXV4ZWQgYWRkcmVzczogJHthZGRyZXNzfWApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gYm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgYSBtdXhlZCBhZGRyZXNzIGlzIHZhbGlkXG4gICAqIFNlZTogaHR0cHM6Ly9kZXZlbG9wZXJzLnN0ZWxsYXIub3JnL2RvY3MvZ2xvc3NhcnkvbXV4ZWQtYWNjb3VudHNcbiAgICpcbiAgICogQHBhcmFtIGFkZHJlc3NcbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqL1xuICBpc1ZhbGlkTXV4ZWRBZGRyZXNzKGFkZHJlc3M6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGlmICghXy5pc1N0cmluZyhhZGRyZXNzKSB8fCAhYWRkcmVzcy5zdGFydHNXaXRoKCdNJykpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgLy8gcmV0dXJuIHRydWUgaWYgbXV4ZWQgYWNjb3VudCBpcyB2YWxpZCBvciB0aHJvd1xuICAgICAgcmV0dXJuICEhc3RlbGxhci5NdXhlZEFjY291bnQuZnJvbUFkZHJlc3MoYWRkcmVzcywgJzAnKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIE1pbmltdW0gYmFsYW5jZSBvZiBhIDItb2YtMyBtdWx0aXNpZyB3YWxsZXRcbiAgICogQHJldHVybnMgbWluaW11bSBiYWxhbmNlIGluIHN0cm9vcHNcbiAgICovXG4gIGFzeW5jIGdldE1pbmltdW1SZXNlcnZlKCk6IFByb21pc2U8bnVtYmVyPiB7XG4gICAgY29uc3Qgc2VydmVyID0gbmV3IHN0ZWxsYXIuU2VydmVyKHRoaXMuZ2V0SG9yaXpvblVybCgpKTtcblxuICAgIGNvbnN0IGhvcml6b25MZWRnZXJJbmZvID0gYXdhaXQgc2VydmVyLmxlZGdlcnMoKS5vcmRlcignZGVzYycpLmxpbWl0KDEpLmNhbGwoKTtcblxuICAgIGlmICghaG9yaXpvbkxlZGdlckluZm8pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcigndW5hYmxlIHRvIGNvbm5lY3QgdG8gSG9yaXpvbiBmb3IgcmVzZXJ2ZSByZXF1aXJlbWVudCBkYXRhJyk7XG4gICAgfVxuXG4gICAgY29uc3QgYmFzZVJlc2VydmUgPSBob3Jpem9uTGVkZ2VySW5mby5yZWNvcmRzWzBdLmJhc2VfcmVzZXJ2ZV9pbl9zdHJvb3BzO1xuXG4gICAgLy8gMi1vZi0zIHdhbGxldHMgaGF2ZSBhIG1pbmltdW0gcmVzZXJ2ZSBvZiA1eCB0aGUgYmFzZSByZXNlcnZlXG4gICAgcmV0dXJuIDUgKiBiYXNlUmVzZXJ2ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUcmFuc2FjdGlvbiBmZWUgZm9yIGVhY2ggb3BlcmF0aW9uXG4gICAqIEByZXR1cm5zIHRyYW5zYWN0aW9uIGZlZSBpbiBzdHJvb3BzXG4gICAqL1xuICBhc3luYyBnZXRCYXNlVHJhbnNhY3Rpb25GZWUoKTogUHJvbWlzZTxudW1iZXI+IHtcbiAgICBjb25zdCBzZXJ2ZXIgPSBuZXcgc3RlbGxhci5TZXJ2ZXIodGhpcy5nZXRIb3Jpem9uVXJsKCkpO1xuXG4gICAgY29uc3QgaG9yaXpvbkxlZGdlckluZm8gPSBhd2FpdCBzZXJ2ZXIubGVkZ2VycygpLm9yZGVyKCdkZXNjJykubGltaXQoMSkuY2FsbCgpO1xuXG4gICAgaWYgKCFob3Jpem9uTGVkZ2VySW5mbykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCd1bmFibGUgdG8gY29ubmVjdCB0byBIb3Jpem9uIGZvciByZXNlcnZlIHJlcXVpcmVtZW50IGRhdGEnKTtcbiAgICB9XG5cbiAgICByZXR1cm4gaG9yaXpvbkxlZGdlckluZm8ucmVjb3Jkc1swXS5iYXNlX2ZlZV9pbl9zdHJvb3BzO1xuICB9XG5cbiAgLyoqXG4gICAqIFByb2Nlc3MgYWRkcmVzcyBpbnRvIGFkZHJlc3MgYW5kIG1lbW8gaWRcbiAgICpcbiAgICogQHBhcmFtIGFkZHJlc3MgdGhlIGFkZHJlc3NcbiAgICogQHJldHVybnMgb2JqZWN0IGNvbnRhaW5pbmcgYWRkcmVzcyBhbmQgbWVtbyBpZFxuICAgKi9cbiAgZ2V0QWRkcmVzc0RldGFpbHMoYWRkcmVzczogc3RyaW5nKTogQWRkcmVzc0RldGFpbHMge1xuICAgIGlmIChhZGRyZXNzLnN0YXJ0c1dpdGgoJ00nKSkge1xuICAgICAgaWYgKHRoaXMuaXNWYWxpZE11eGVkQWRkcmVzcyhhZGRyZXNzKSkge1xuICAgICAgICBjb25zdCBtdXhlZEFjY291bnQgPSB0aGlzLmdldE11eGVkQWNjb3VudChhZGRyZXNzKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBiYXNlQWRkcmVzczogbXV4ZWRBY2NvdW50LmJhc2VBY2NvdW50KCkuYWNjb3VudElkKCksXG4gICAgICAgICAgYWRkcmVzcyxcbiAgICAgICAgICBpZDogbXV4ZWRBY2NvdW50LmlkKCksXG4gICAgICAgICAgbWVtb0lkOiB1bmRlZmluZWQsXG4gICAgICAgIH07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFkZHJlc3NFcnJvcihgaW52YWxpZCBtdXhlZCBhZGRyZXNzOiAke2FkZHJlc3N9YCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgZGVzdGluYXRpb25EZXRhaWxzID0gdXJsLnBhcnNlKGFkZHJlc3MpO1xuICAgIGNvbnN0IGRlc3RpbmF0aW9uQWRkcmVzcyA9IGRlc3RpbmF0aW9uRGV0YWlscy5wYXRobmFtZSB8fCAnJztcbiAgICBpZiAoIWRlc3RpbmF0aW9uQWRkcmVzcyB8fCAhc3RlbGxhci5TdHJLZXkuaXNWYWxpZEVkMjU1MTlQdWJsaWNLZXkoZGVzdGluYXRpb25BZGRyZXNzKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBpbnZhbGlkIGFkZHJlc3M6ICR7YWRkcmVzc31gKTtcbiAgICB9XG4gICAgLy8gYWRkcmVzcyBkb2Vzbid0IGhhdmUgYSBtZW1vIGlkXG4gICAgaWYgKGRlc3RpbmF0aW9uRGV0YWlscy5wYXRobmFtZSA9PT0gYWRkcmVzcykge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgYmFzZUFkZHJlc3M6IGFkZHJlc3MsXG4gICAgICAgIGFkZHJlc3M6IGFkZHJlc3MsXG4gICAgICAgIGlkOiB1bmRlZmluZWQsXG4gICAgICAgIG1lbW9JZDogdW5kZWZpbmVkLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICBpZiAoIWRlc3RpbmF0aW9uRGV0YWlscy5xdWVyeSkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBZGRyZXNzRXJyb3IoYGludmFsaWQgYWRkcmVzczogJHthZGRyZXNzfWApO1xuICAgIH1cblxuICAgIGNvbnN0IHF1ZXJ5RGV0YWlscyA9IHF1ZXJ5c3RyaW5nLnBhcnNlKGRlc3RpbmF0aW9uRGV0YWlscy5xdWVyeSk7XG4gICAgaWYgKCFxdWVyeURldGFpbHMubWVtb0lkKSB7XG4gICAgICAvLyBpZiB0aGVyZSBhcmUgbW9yZSBwcm9wZXJ0aWVzLCB0aGUgcXVlcnkgZGV0YWlscyBuZWVkIHRvIGNvbnRhaW4gdGhlIG1lbW8gaWQgcHJvcGVydHlcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQWRkcmVzc0Vycm9yKGBpbnZhbGlkIGFkZHJlc3M6ICR7YWRkcmVzc31gKTtcbiAgICB9XG5cbiAgICBpZiAoQXJyYXkuaXNBcnJheShxdWVyeURldGFpbHMubWVtb0lkKSkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBZGRyZXNzRXJyb3IoXG4gICAgICAgIGBtZW1vSWQgbWF5IG9ubHkgYmUgZ2l2ZW4gYXQgbW9zdCBvbmNlLCBidXQgZm91bmQgJHtxdWVyeURldGFpbHMubWVtb0lkLmxlbmd0aH0gaW5zdGFuY2VzIGluIGFkZHJlc3MgJHthZGRyZXNzfWBcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKEFycmF5LmlzQXJyYXkocXVlcnlEZXRhaWxzLm1lbW9JZCkgJiYgcXVlcnlEZXRhaWxzLm1lbW9JZC5sZW5ndGggIT09IDEpIHtcbiAgICAgIC8vIHZhbGlkIGFkZHJlc3NlcyBjYW4gb25seSBjb250YWluIG9uZSBtZW1vIGlkXG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFkZHJlc3NFcnJvcihgaW52YWxpZCBhZGRyZXNzICcke2FkZHJlc3N9JywgbXVzdCBjb250YWluIGV4YWN0bHkgb25lIG1lbW9JZGApO1xuICAgIH1cblxuICAgIGNvbnN0IFttZW1vSWRdID0gXy5jYXN0QXJyYXkocXVlcnlEZXRhaWxzLm1lbW9JZCkgfHwgdW5kZWZpbmVkO1xuICAgIGlmICghdGhpcy5pc1ZhbGlkTWVtb0lkKG1lbW9JZCkpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkTWVtb0lkRXJyb3IoYGludmFsaWQgYWRkcmVzczogJyR7YWRkcmVzc30nLCBtZW1vSWQgaXMgbm90IHZhbGlkYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGJhc2VBZGRyZXNzOiBkZXN0aW5hdGlvbkFkZHJlc3MsXG4gICAgICBhZGRyZXNzOiBkZXN0aW5hdGlvbkFkZHJlc3MsXG4gICAgICBpZDogdW5kZWZpbmVkLFxuICAgICAgbWVtb0lkLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGUgYW5kIHJldHVybiBhZGRyZXNzIHdpdGggYXBwZW5kZWQgbWVtbyBpZCBvciBtdXhlZCBhZGRyZXNzXG4gICAqXG4gICAqIEBwYXJhbSBhZGRyZXNzIGFkZHJlc3NcbiAgICogQHBhcmFtIG1lbW9JZCBtZW1vIGlkXG4gICAqIEByZXR1cm5zIGFkZHJlc3Mgd2l0aCBtZW1vIGlkXG4gICAqL1xuICBub3JtYWxpemVBZGRyZXNzKHsgYWRkcmVzcywgbWVtb0lkIH06IEFkZHJlc3NEZXRhaWxzKTogc3RyaW5nIHtcbiAgICBpZiAodGhpcy5pc1ZhbGlkTXV4ZWRBZGRyZXNzKGFkZHJlc3MpKSB7XG4gICAgICByZXR1cm4gYWRkcmVzcztcbiAgICB9XG4gICAgaWYgKCFzdGVsbGFyLlN0cktleS5pc1ZhbGlkRWQyNTUxOVB1YmxpY0tleShhZGRyZXNzKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBpbnZhbGlkIGFkZHJlc3MgZGV0YWlsczogJHthZGRyZXNzfWApO1xuICAgIH1cbiAgICBpZiAobWVtb0lkICYmIHRoaXMuaXNWYWxpZE1lbW9JZChtZW1vSWQpKSB7XG4gICAgICByZXR1cm4gYCR7YWRkcmVzc30/bWVtb0lkPSR7bWVtb0lkfWA7XG4gICAgfVxuICAgIHJldHVybiBhZGRyZXNzO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiBib29sZWFuIGluZGljYXRpbmcgd2hldGhlciBpbnB1dCBpcyB2YWxpZCBwdWJsaWMga2V5IGZvciB0aGUgY29pblxuICAgKlxuICAgKiBAcGFyYW0gYWRkcmVzcyB0aGUgcHViIHRvIGJlIGNoZWNrZWRcbiAgICogQHJldHVybnMgaXMgaXQgdmFsaWQ/XG4gICAqL1xuICBpc1ZhbGlkQWRkcmVzcyhhZGRyZXNzOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgYWRkcmVzc0RldGFpbHMgPSB0aGlzLmdldEFkZHJlc3NEZXRhaWxzKGFkZHJlc3MpO1xuICAgICAgcmV0dXJuIGFkZHJlc3MgPT09IHRoaXMubm9ybWFsaXplQWRkcmVzcyhhZGRyZXNzRGV0YWlscyk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gYSBTdGVsbGFyIEFzc2V0IGluIGNvaW46dG9rZW4gZm9ybSAoaS5lLiAodCl4bG06PGNvZGU+LTxpc3N1ZXI+KVxuICAgKiBJZiB0aGUgYXNzZXQgaXMgWExNLCByZXR1cm4gdGhlIGNoYWluXG4gICAqIEBwYXJhbSB7c3RlbGxhci5Bc3NldH0gYXNzZXQgLSBpbnN0YW5jZSBvZiBTdGVsbGFyIEFzc2V0XG4gICAqL1xuICBnZXRUb2tlbk5hbWVGcm9tU3RlbGxhckFzc2V0KGFzc2V0OiBzdGVsbGFyLkFzc2V0KTogc3RyaW5nIHtcbiAgICBjb25zdCBjb2RlID0gYXNzZXQuZ2V0Q29kZSgpO1xuICAgIGNvbnN0IGlzc3VlciA9IGFzc2V0LmdldElzc3VlcigpO1xuICAgIGlmIChhc3NldC5pc05hdGl2ZSgpKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRDaGFpbigpO1xuICAgIH1cbiAgICByZXR1cm4gYCR7dGhpcy5nZXRDaGFpbigpfSR7QmFzZUNvaW4uY29pblRva2VuUGF0dGVyblNlcGFyYXRvcn0ke2NvZGV9JHtYbG0udG9rZW5QYXR0ZXJuU2VwYXJhdG9yfSR7aXNzdWVyfWA7XG4gIH1cblxuICAvKipcbiAgICogRXZhbHVhdGUgd2hldGhlciBhIHN0ZWxsYXIgdXNlcm5hbWUgaGFzIHZhbGlkIGZvcm1hdFxuICAgKiBUaGlzIG1ldGhvZCBpcyB1c2VkIGJ5IHRoZSBjbGllbnQgd2hlbiBhIHN0ZWxsYXIgYWRkcmVzcyBpcyBiZWluZyBhZGRlZCB0byBhIHdhbGxldFxuICAgKiBFeGFtcGxlIG9mIGEgY29tbW9uIHN0ZWxsYXIgdXNlcm5hbWU6IGZvb0BiYXIuYmF6XG4gICAqIFRoZSBhYm92ZSBleGFtcGxlIHdvdWxkIHJlc3VsdCBpbiB0aGUgU3RlbGxhciBhZGRyZXNzOiBmb29AYmFyLmJheipiaXRnby5jb21cbiAgICpcbiAgICogQHBhcmFtIHVzZXJuYW1lIC0gc3RlbGxhciB1c2VybmFtZVxuICAgKiBAcmV0dXJuIHRydWUgaWYgc3RlbGxhciB1c2VybmFtZSBpcyB2YWxpZFxuICAgKi9cbiAgaXNWYWxpZFN0ZWxsYXJVc2VybmFtZSh1c2VybmFtZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIC9eW2EtejAtOVxcLV8uK0BdKyQvLnRlc3QodXNlcm5hbWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBhbiBpbnN0YW5jZSBvZiBGZWRlcmF0aW9uU2VydmVyIGZvciBCaXRHbyBsb29rdXBzXG4gICAqXG4gICAqIEByZXR1cm5zIGluc3RhbmNlIG9mIEJpdEdvIEZlZGVyYXRpb24gU2VydmVyXG4gICAqL1xuICBnZXRCaXRHb0ZlZGVyYXRpb25TZXJ2ZXIoKTogc3RlbGxhci5GZWRlcmF0aW9uU2VydmVyIHtcbiAgICAvLyBJZGVudGlmeSB0aGUgVVJJIHNjaGVtZSBpbiBjYXNlIHdlIG5lZWQgdG8gYWxsb3cgY29ubmVjdGluZyB0byBIVFRQIHNlcnZlci5cbiAgICBjb25zdCBpc05vblNlY3VyZUVudiA9ICFfLnN0YXJ0c1dpdGgoY29tbW9uLkVudmlyb25tZW50c1t0aGlzLmJpdGdvLmVudl0udXJpLCAnaHR0cHMnKTtcbiAgICBjb25zdCBmZWRlcmF0aW9uU2VydmVyT3B0aW9ucyA9IHsgYWxsb3dIdHRwOiBpc05vblNlY3VyZUVudiB9O1xuICAgIHJldHVybiBuZXcgc3RlbGxhci5GZWRlcmF0aW9uU2VydmVyKHRoaXMuZ2V0RmVkZXJhdGlvblNlcnZlclVybCgpLCAnYml0Z28uY29tJywgZmVkZXJhdGlvblNlcnZlck9wdGlvbnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIFBlcmZvcm0gZmVkZXJhdGlvbiBsb29rdXBzXG4gICAqIE91ciBmZWRlcmF0aW9uIHNlcnZlciBoYW5kbGVzIGxvb2t1cHMgZm9yIGJpdGdvIGFzIHdlbGwgYXMgZm9yIG90aGVyIGZlZGVyYXRpb24gZG9tYWluc1xuICAgKlxuICAgKiBAcGFyYW0ge1N0cmluZ30gW2FkZHJlc3NdIC0gYWRkcmVzcyB0byBsb29rIHVwXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBbYWNjb3VudElkXSAtIGFjY291bnQgaWQgdG8gbG9vayB1cFxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBmZWRlcmF0aW9uTG9va3VwKHtcbiAgICBhZGRyZXNzLFxuICAgIGFjY291bnRJZCxcbiAgfToge1xuICAgIGFkZHJlc3M/OiBzdHJpbmc7XG4gICAgYWNjb3VudElkPzogc3RyaW5nO1xuICB9KTogUHJvbWlzZTxzdGVsbGFyLkZlZGVyYXRpb25TZXJ2ZXIuUmVjb3JkPiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGZlZGVyYXRpb25TZXJ2ZXIgPSB0aGlzLmdldEJpdEdvRmVkZXJhdGlvblNlcnZlcigpO1xuICAgICAgaWYgKGFkZHJlc3MpIHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IGZlZGVyYXRpb25TZXJ2ZXIucmVzb2x2ZUFkZHJlc3MoYWRkcmVzcyk7XG4gICAgICB9IGVsc2UgaWYgKGFjY291bnRJZCkge1xuICAgICAgICByZXR1cm4gYXdhaXQgZmVkZXJhdGlvblNlcnZlci5yZXNvbHZlQWNjb3VudElkKGFjY291bnRJZCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgYXJndW1lbnQgLSBtdXN0IHByb3ZpZGUgU3RlbGxhciBhZGRyZXNzIG9yIGFjY291bnQgaWQnKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBjb25zdCBlcnJvciA9IF8uZ2V0KGUsICdyZXNwb25zZS5kYXRhLmRldGFpbCcpO1xuICAgICAgaWYgKGVycm9yKSB7XG4gICAgICAgIHRocm93IG5ldyBTdGVsbGFyRmVkZXJhdGlvblVzZXJOb3RGb3VuZEVycm9yKGVycm9yKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IGU7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEF0dGVtcHQgdG8gcmVzb2x2ZSBhIHN0ZWxsYXIgYWRkcmVzcyBpbnRvIGEgc3RlbGxhciBhY2NvdW50XG4gICAqXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBhZGRyZXNzIC0gc3RlbGxhciBhZGRyZXNzIHRvIGxvb2sgZm9yXG4gICAqL1xuICBhc3luYyBmZWRlcmF0aW9uTG9va3VwQnlOYW1lKGFkZHJlc3M6IHN0cmluZyk6IFByb21pc2U8c3RlbGxhci5GZWRlcmF0aW9uU2VydmVyLlJlY29yZD4ge1xuICAgIGlmICghYWRkcmVzcykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkIFN0ZWxsYXIgYWRkcmVzcycpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmZlZGVyYXRpb25Mb29rdXAoeyBhZGRyZXNzIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEF0dGVtcHQgdG8gcmVzb2x2ZSBhbiBhY2NvdW50IGlkIGludG8gYSBzdGVsbGFyIGFjY291bnRcbiAgICogT25seSB3b3JrcyBmb3IgYWNjb3VudHMgdGhhdCBjYW4gYmUgcmVzb2x2ZWQgYnkgb3VyIGZlZGVyYXRpb24gc2VydmVyXG4gICAqXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBhY2NvdW50SWQgLSBzdGVsbGFyIGFjY291bnQgaWRcbiAgICovXG4gIGFzeW5jIGZlZGVyYXRpb25Mb29rdXBCeUFjY291bnRJZChhY2NvdW50SWQ6IHN0cmluZyk6IFByb21pc2U8c3RlbGxhci5GZWRlcmF0aW9uU2VydmVyLlJlY29yZD4ge1xuICAgIGlmICghYWNjb3VudElkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgU3RlbGxhciBhY2NvdW50Jyk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmZlZGVyYXRpb25Mb29rdXAoeyBhY2NvdW50SWQgfSk7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgaWYgYWRkcmVzcyBpcyBhIHZhbGlkIFhMTSBhZGRyZXNzLCBhbmQgdGhlbiBtYWtlIHN1cmUgaXQgbWF0Y2hlcyB0aGUgcm9vdCBhZGRyZXNzLlxuICAgKlxuICAgKiBAcGFyYW0gYWRkcmVzcyB7U3RyaW5nfSB0aGUgYWRkcmVzcyB0byB2ZXJpZnlcbiAgICogQHBhcmFtIHJvb3RBZGRyZXNzIHtTdHJpbmd9IHRoZSB3YWxsZXQncyByb290IGFkZHJlc3NcbiAgICovXG4gIGFzeW5jIGlzV2FsbGV0QWRkcmVzcyh7IGFkZHJlc3MsIHJvb3RBZGRyZXNzIH06IFZlcmlmeUFkZHJlc3NPcHRpb25zKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgaWYgKCF0aGlzLmlzVmFsaWRBZGRyZXNzKGFkZHJlc3MpKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFkZHJlc3NFcnJvcihgaW52YWxpZCBhZGRyZXNzOiAke2FkZHJlc3N9YCk7XG4gICAgfVxuXG4gICAgY29uc3QgYWRkcmVzc0RldGFpbHMgPSB0aGlzLmdldEFkZHJlc3NEZXRhaWxzKGFkZHJlc3MpO1xuICAgIGNvbnN0IHJvb3RBZGRyZXNzRGV0YWlscyA9IHRoaXMuZ2V0QWRkcmVzc0RldGFpbHMocm9vdEFkZHJlc3MpO1xuICAgIGlmIChhZGRyZXNzRGV0YWlscy5iYXNlQWRkcmVzcyAhPT0gcm9vdEFkZHJlc3NEZXRhaWxzLmFkZHJlc3MpIHtcbiAgICAgIHRocm93IG5ldyBVbmV4cGVjdGVkQWRkcmVzc0Vycm9yKFxuICAgICAgICBgYWRkcmVzcyB2YWxpZGF0aW9uIGZhaWx1cmU6ICR7YWRkcmVzc0RldGFpbHMuYmFzZUFkZHJlc3N9IHZzICR7cm9vdEFkZHJlc3NEZXRhaWxzLmFkZHJlc3N9YFxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgZXh0cmEgcGFyYW1ldGVycyBmb3IgcHJlYnVpbGRpbmcgYSB0eFxuICAgKiBTZXQgZW1wdHkgcmVjaXBpZW50cyBhcnJheSBpbiB0cnVzdGxpbmUgdHhzXG4gICAqL1xuICBhc3luYyBnZXRFeHRyYVByZWJ1aWxkUGFyYW1zKGJ1aWxkUGFyYW1zOiBFeHRyYVByZWJ1aWxkUGFyYW1zT3B0aW9ucyk6IFByb21pc2U8QnVpbGRPcHRpb25zPiB7XG4gICAgY29uc3QgcGFyYW1zOiB7IHJlY2lwaWVudHM/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+W10gfSA9IHt9O1xuICAgIGlmIChidWlsZFBhcmFtcy50eXBlID09PSAndHJ1c3RsaW5lJykge1xuICAgICAgcGFyYW1zLnJlY2lwaWVudHMgPSBbXTtcbiAgICB9XG4gICAgcmV0dXJuIHBhcmFtcztcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZFxuICAgKi9cbiAgaW5pdGlhdGVSZWNvdmVyeShwYXJhbXM6IFJlY292ZXJ5T3B0aW9ucyk6IG5ldmVyIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2RlcHJlY2F0ZWQgbWV0aG9kJyk7XG4gIH1cblxuICAvKipcbiAgICogQnVpbGRzIGEgZnVuZHMgcmVjb3ZlcnkgdHJhbnNhY3Rpb24gd2l0aG91dCBCaXRHb1xuICAgKiBAcGFyYW0gcGFyYW1zXG4gICAqIC0gdXNlcktleTogW2VuY3J5cHRlZF0gU3RlbGxhciBwcml2YXRlIGtleVxuICAgKiAtIGJhY2t1cEtleTogW2VuY3J5cHRlZF0gU3RlbGxhciBwcml2YXRlIGtleSwgb3IgcHVibGljIGtleSBpZiB0aGUgcHJpdmF0ZSBrZXkgaXMgaGVsZCBieSBhIEtSUyBwcm92aWRlclxuICAgKiAtIHdhbGxldFBhc3NwaHJhc2U6IG5lY2Vzc2FyeSBpZiBvbmUgb2YgdGhlIHByaXZhdGUga2V5cyBpcyBlbmNyeXB0ZWRcbiAgICogLSByb290QWRkcmVzczogYmFzZSBhZGRyZXNzIG9mIHRoZSB3YWxsZXQgdG8gcmVjb3ZlciBmdW5kcyBmcm9tXG4gICAqIC0ga3JzUHJvdmlkZXI6IG5lY2Vzc2FyeSBpZiBiYWNrdXAga2V5IGlzIGhlbGQgYnkgS1JTXG4gICAqIC0gcmVjb3ZlcnlEZXN0aW5hdGlvbjogdGFyZ2V0IGFkZHJlc3MgdG8gc2VuZCByZWNvdmVyZWQgZnVuZHMgdG9cbiAgICovXG4gIGFzeW5jIHJlY292ZXIocGFyYW1zOiBSZWNvdmVyeU9wdGlvbnMpOiBQcm9taXNlPFJlY292ZXJ5VHJhbnNhY3Rpb24+IHtcbiAgICAvLyBTdGVsbGFyJ3MgRWQyNTUxOSBwdWJsaWMga2V5cyBzdGFydCB3aXRoIGEgRywgd2hpbGUgcHJpdmF0ZSBrZXlzIHN0YXJ0IHdpdGggYW4gU1xuICAgIGNvbnN0IGlzS3JzUmVjb3ZlcnkgPSBwYXJhbXMuYmFja3VwS2V5LnN0YXJ0c1dpdGgoJ0cnKSAmJiAhcGFyYW1zLnVzZXJLZXkuc3RhcnRzV2l0aCgnRycpO1xuICAgIGNvbnN0IGlzVW5zaWduZWRTd2VlcCA9IHBhcmFtcy5iYWNrdXBLZXkuc3RhcnRzV2l0aCgnRycpICYmIHBhcmFtcy51c2VyS2V5LnN0YXJ0c1dpdGgoJ0cnKTtcblxuICAgIGlmIChpc0tyc1JlY292ZXJ5KSB7XG4gICAgICBjaGVja0tyc1Byb3ZpZGVyKHRoaXMsIHBhcmFtcy5rcnNQcm92aWRlcik7XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLmlzVmFsaWRBZGRyZXNzKHBhcmFtcy5yZWNvdmVyeURlc3RpbmF0aW9uKSkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBZGRyZXNzRXJyb3IoJ0ludmFsaWQgZGVzdGluYXRpb24gYWRkcmVzcyEnKTtcbiAgICB9XG5cbiAgICBjb25zdCBbdXNlcktleSwgYmFja3VwS2V5XSA9IGdldFN0ZWxsYXJLZXlzKHRoaXMuYml0Z28sIHBhcmFtcyk7XG5cbiAgICBpZiAoIXBhcmFtcy5yb290QWRkcmVzcyB8fCAhc3RlbGxhci5TdHJLZXkuaXNWYWxpZEVkMjU1MTlQdWJsaWNLZXkocGFyYW1zLnJvb3RBZGRyZXNzKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHdhbGxldCBhZGRyZXNzOiAke3BhcmFtcy5yb290QWRkcmVzc31gKTtcbiAgICB9XG5cbiAgICBjb25zdCBhY2NvdW50RGF0YVVybCA9IGAke3RoaXMuZ2V0SG9yaXpvblVybCgpfS9hY2NvdW50cy8ke3BhcmFtcy5yb290QWRkcmVzc31gO1xuICAgIGNvbnN0IGRlc3RpbmF0aW9uVXJsID0gYCR7dGhpcy5nZXRIb3Jpem9uVXJsKCl9L2FjY291bnRzLyR7cGFyYW1zLnJlY292ZXJ5RGVzdGluYXRpb259YDtcblxuICAgIGxldCBhY2NvdW50RGF0YTtcbiAgICB0cnkge1xuICAgICAgYWNjb3VudERhdGEgPSBhd2FpdCB0b0JpdGdvUmVxdWVzdChyZXF1ZXN0LmdldChhY2NvdW50RGF0YVVybCkpLnJlc3VsdCgpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignVW5hYmxlIHRvIHJlYWNoIHRoZSBTdGVsbGFyIG5ldHdvcmsgdmlhIEhvcml6b24uJyk7XG4gICAgfVxuXG4gICAgLy8gTm93IGNoZWNrIGlmIHRoZSBkZXN0aW5hdGlvbiBhY2NvdW50IGlzIGVtcHR5IG9yIG5vdFxuICAgIGxldCB1bmZ1bmRlZERlc3RpbmF0aW9uID0gZmFsc2U7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHJlcXVlc3QuZ2V0KGRlc3RpbmF0aW9uVXJsKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBpZiAoZS5zdGF0dXMgPT09IDQwNCkge1xuICAgICAgICAvLyBJZiB0aGUgZGVzdGluYXRpb24gYWNjb3VudCBkb2VzIG5vdCB5ZXQgZXhpc3QsIGhvcml6b24gcmVzcG9uZHMgd2l0aCA0MDRcbiAgICAgICAgdW5mdW5kZWREZXN0aW5hdGlvbiA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCFhY2NvdW50RGF0YS5zZXF1ZW5jZSB8fCAhYWNjb3VudERhdGEuYmFsYW5jZXMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSG9yaXpvbiBzZXJ2ZXIgZXJyb3IgLSB1bmFibGUgdG8gcmV0cmlldmUgc2VxdWVuY2UgSUQgb3IgYWNjb3VudCBiYWxhbmNlJyk7XG4gICAgfVxuXG4gICAgY29uc3QgYWNjb3VudCA9IG5ldyBzdGVsbGFyLkFjY291bnQocGFyYW1zLnJvb3RBZGRyZXNzLCBhY2NvdW50RGF0YS5zZXF1ZW5jZSk7XG5cbiAgICAvLyBTdGVsbGFyIHN1cHBvcnRzIG11bHRpcGxlIGFzc2V0cyBvbiBjaGFpbiwgd2UncmUgb25seSBpbnRlcmVzdGVkIGluIHRoZSBiYWxhbmNlcyBlbnRyeSB3aG9zZSB0eXBlIGlzIFwibmF0aXZlXCIgKFhMTSlcbiAgICBjb25zdCBuYXRpdmVCYWxhbmNlSW5mbyA9IGFjY291bnREYXRhLmJhbGFuY2VzLmZpbmQoKGFzc2V0QmFsYW5jZSkgPT4gYXNzZXRCYWxhbmNlWydhc3NldF90eXBlJ10gPT09ICduYXRpdmUnKTtcblxuICAgIGlmICghbmF0aXZlQmFsYW5jZUluZm8pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignUHJvdmlkZWQgd2FsbGV0IGhhcyBhIGJhbGFuY2Ugb2YgMCBYTE0sIHJlY292ZXJ5IGFib3J0ZWQnKTtcbiAgICB9XG5cbiAgICBjb25zdCB3YWxsZXRCYWxhbmNlID0gTnVtYmVyKHRoaXMuYmlnVW5pdHNUb0Jhc2VVbml0cyhuYXRpdmVCYWxhbmNlSW5mby5iYWxhbmNlKSk7XG4gICAgY29uc3QgbWluaW11bVJlc2VydmUgPSBhd2FpdCB0aGlzLmdldE1pbmltdW1SZXNlcnZlKCk7XG4gICAgY29uc3QgYmFzZVR4RmVlID0gYXdhaXQgdGhpcy5nZXRCYXNlVHJhbnNhY3Rpb25GZWUoKTtcbiAgICBjb25zdCByZWNvdmVyeUFtb3VudCA9IHdhbGxldEJhbGFuY2UgLSBtaW5pbXVtUmVzZXJ2ZSAtIGJhc2VUeEZlZTtcbiAgICBjb25zdCBmb3JtYXR0ZWRSZWNvdmVyeUFtb3VudCA9IHRoaXMuYmFzZVVuaXRzVG9CaWdVbml0cyhyZWNvdmVyeUFtb3VudCkudG9TdHJpbmcoKTtcblxuICAgIGNvbnN0IHR4QnVpbGRlciA9IG5ldyBzdGVsbGFyLlRyYW5zYWN0aW9uQnVpbGRlcihhY2NvdW50LCB7XG4gICAgICBmZWU6IGJhc2VUeEZlZS50b0ZpeGVkKDApLFxuICAgICAgbmV0d29ya1Bhc3NwaHJhc2U6IHRoaXMuZ2V0U3RlbGxhck5ldHdvcmsoKSxcbiAgICB9KTtcbiAgICBjb25zdCBvcGVyYXRpb24gPSB1bmZ1bmRlZERlc3RpbmF0aW9uXG4gICAgICA/IC8vIEluIHRoaXMgY2FzZSwgd2UgbmVlZCB0byBjcmVhdGUgdGhlIGFjY291bnRcbiAgICAgICAgc3RlbGxhci5PcGVyYXRpb24uY3JlYXRlQWNjb3VudCh7XG4gICAgICAgICAgZGVzdGluYXRpb246IHBhcmFtcy5yZWNvdmVyeURlc3RpbmF0aW9uLFxuICAgICAgICAgIHN0YXJ0aW5nQmFsYW5jZTogZm9ybWF0dGVkUmVjb3ZlcnlBbW91bnQsXG4gICAgICAgIH0pXG4gICAgICA6IC8vIE90aGVyd2lzZSBpZiB0aGUgYWNjb3VudCBhbHJlYWR5IGV4aXN0cywgd2UgZG8gYSBub3JtYWwgc2VuZFxuICAgICAgICBzdGVsbGFyLk9wZXJhdGlvbi5wYXltZW50KHtcbiAgICAgICAgICBkZXN0aW5hdGlvbjogcGFyYW1zLnJlY292ZXJ5RGVzdGluYXRpb24sXG4gICAgICAgICAgYXNzZXQ6IHN0ZWxsYXIuQXNzZXQubmF0aXZlKCksXG4gICAgICAgICAgYW1vdW50OiBmb3JtYXR0ZWRSZWNvdmVyeUFtb3VudCxcbiAgICAgICAgfSk7XG4gICAgY29uc3QgdHggPSB0eEJ1aWxkZXIuYWRkT3BlcmF0aW9uKG9wZXJhdGlvbikuc2V0VGltZW91dChzdGVsbGFyLlRpbWVvdXRJbmZpbml0ZSkuYnVpbGQoKTtcblxuICAgIGlmICghaXNVbnNpZ25lZFN3ZWVwKSB7XG4gICAgICB0eC5zaWduKHVzZXJLZXkpO1xuICAgIH1cblxuICAgIGlmICghaXNLcnNSZWNvdmVyeSAmJiAhaXNVbnNpZ25lZFN3ZWVwKSB7XG4gICAgICB0eC5zaWduKGJhY2t1cEtleSk7XG4gICAgfVxuXG4gICAgY29uc3QgdHJhbnNhY3Rpb246IFJlY292ZXJ5VHJhbnNhY3Rpb24gPSB7XG4gICAgICB0eDogWGxtLnR4VG9TdHJpbmcodHgpLFxuICAgICAgcmVjb3ZlcnlBbW91bnQsXG4gICAgfTtcblxuICAgIGlmIChpc0tyc1JlY292ZXJ5KSB7XG4gICAgICB0cmFuc2FjdGlvbi5iYWNrdXBLZXkgPSBwYXJhbXMuYmFja3VwS2V5O1xuICAgICAgdHJhbnNhY3Rpb24uY29pbiA9IHRoaXMuZ2V0Q2hhaW4oKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdHJhbnNhY3Rpb247XG4gIH1cblxuICAvKipcbiAgICogQXNzZW1ibGUga2V5Y2hhaW4gYW5kIGhhbGYtc2lnbiBwcmVidWlsdCB0cmFuc2FjdGlvblxuICAgKlxuICAgKiBAcGFyYW0gcGFyYW1zXG4gICAqIEBwYXJhbSBwYXJhbXMudHhQcmVidWlsZCB7T2JqZWN0fSBwcmVidWlsZCBvYmplY3QgcmV0dXJuZWQgYnkgcGxhdGZvcm1cbiAgICogQHBhcmFtIHBhcmFtcy5wcnYge1N0cmluZ30gdXNlciBwcnZcbiAgICogQHJldHVybnMge1Byb21pc2U8SGFsZlNpZ25lZFRyYW5zYWN0aW9uPn1cbiAgICovXG4gIGFzeW5jIHNpZ25UcmFuc2FjdGlvbihwYXJhbXM6IFNpZ25UcmFuc2FjdGlvbk9wdGlvbnMpOiBQcm9taXNlPEhhbGZTaWduZWRUcmFuc2FjdGlvbj4ge1xuICAgIGNvbnN0IHsgdHhQcmVidWlsZCwgcHJ2IH0gPSBwYXJhbXM7XG5cbiAgICBpZiAoXy5pc1VuZGVmaW5lZCh0eFByZWJ1aWxkKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdtaXNzaW5nIHR4UHJlYnVpbGQgcGFyYW1ldGVyJyk7XG4gICAgfVxuICAgIGlmICghXy5pc09iamVjdCh0eFByZWJ1aWxkKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGB0eFByZWJ1aWxkIG11c3QgYmUgYW4gb2JqZWN0LCBnb3QgdHlwZSAke3R5cGVvZiB0eFByZWJ1aWxkfWApO1xuICAgIH1cblxuICAgIGlmIChfLmlzVW5kZWZpbmVkKHBydikpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignbWlzc2luZyBwcnYgcGFyYW1ldGVyIHRvIHNpZ24gdHJhbnNhY3Rpb24nKTtcbiAgICB9XG4gICAgaWYgKCFfLmlzU3RyaW5nKHBydikpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgcHJ2IG11c3QgYmUgYSBzdHJpbmcsIGdvdCB0eXBlICR7dHlwZW9mIHBydn1gKTtcbiAgICB9XG5cbiAgICBjb25zdCBrZXlQYWlyID0gc3RlbGxhci5LZXlwYWlyLmZyb21TZWNyZXQocHJ2KTtcbiAgICBjb25zdCB0eCA9IG5ldyBzdGVsbGFyLlRyYW5zYWN0aW9uKHR4UHJlYnVpbGQudHhCYXNlNjQsIHRoaXMuZ2V0U3RlbGxhck5ldHdvcmsoKSk7XG4gICAgdHguc2lnbihrZXlQYWlyKTtcbiAgICBjb25zdCB0eEJhc2U2NCA9IFhsbS50eFRvU3RyaW5nKHR4KTtcblxuICAgIGNvbnN0IHR5cGUgPSB0eFByZWJ1aWxkPy5idWlsZFBhcmFtcz8udHlwZTtcbiAgICBjb25zdCByZWNpcGllbnRzID0gdHhQcmVidWlsZD8uYnVpbGRQYXJhbXM/LnJlY2lwaWVudHM7XG4gICAgaWYgKHR5cGUgPT09ICdlbmFibGV0b2tlbicpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGhhbGZTaWduZWQ6IHsgdHhCYXNlNjQgfSxcbiAgICAgICAgdHlwZSxcbiAgICAgICAgcmVjaXBpZW50cyxcbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB7IGhhbGZTaWduZWQ6IHsgdHhCYXNlNjQgfSB9O1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBFeHRlbmQgd2FsbGV0UGFyYW1zIHdpdGggZXh0cmEgcGFyYW1zIHJlcXVpcmVkIGZvciBnZW5lcmF0aW5nIGFuIFhMTSB3YWxsZXRcbiAgICpcbiAgICogU3RlbGxhciB3YWxsZXRzIGhhdmUgdGhyZWUga2V5Y2hhaW5zIG9uIHRoZW0uIFR3byBhcmUgZ2VuZXJhdGVkIGJ5IHRoZSBwbGF0Zm9ybSwgYW5kIHRoZSBsYXN0IGlzIGdlbmVyYXRlZCBieSB0aGUgdXNlci5cbiAgICogSW5pdGlhbGx5LCB3ZSBuZWVkIGEgcm9vdCBwcnYgdG8gZ2VuZXJhdGUgdGhlIGFjY291bnQsIHdoaWNoIG11c3QgYmUgZGlzdGluY3QgZnJvbSBhbGwgdGhyZWUga2V5Y2hhaW5zIG9uIHRoZSB3YWxsZXQuXG4gICAqIElmIGEgcm9vdCBwcnYgaXMgbm90IHByb3ZpZGVkLCBhIHJhbmRvbSBvbmUgaXMgZ2VuZXJhdGVkLlxuICAgKi9cbiAgYXN5bmMgc3VwcGxlbWVudEdlbmVyYXRlV2FsbGV0KFxuICAgIHdhbGxldFBhcmFtczogU3VwcGxlbWVudEdlbmVyYXRlV2FsbGV0T3B0aW9uc1xuICApOiBQcm9taXNlPFN1cHBsZW1lbnRHZW5lcmF0ZVdhbGxldE9wdGlvbnM+IHtcbiAgICBsZXQgc2VlZDtcbiAgICBjb25zdCByb290UHJ2ID0gd2FsbGV0UGFyYW1zLnJvb3RQcml2YXRlS2V5O1xuICAgIGlmIChyb290UHJ2KSB7XG4gICAgICBpZiAoIXRoaXMuaXNWYWxpZFBydihyb290UHJ2KSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3Jvb3RQcml2YXRlS2V5IG5lZWRzIHRvIGJlIHZhbGlkIGVkMjU1MTkgc2VjcmV0IHNlZWQnKTtcbiAgICAgIH1cbiAgICAgIHNlZWQgPSBzdGVsbGFyLlN0cktleS5kZWNvZGVFZDI1NTE5U2VjcmV0U2VlZChyb290UHJ2KTtcbiAgICB9XG4gICAgY29uc3Qga2V5UGFpciA9IHRoaXMuZ2VuZXJhdGVLZXlQYWlyKHNlZWQpO1xuICAgIC8vIGV4dGVuZCB0aGUgd2FsbGV0IGluaXRpYWxpemF0aW9uIHBhcmFtc1xuICAgIHdhbGxldFBhcmFtcy5yb290UHJpdmF0ZUtleSA9IGtleVBhaXIucHJ2O1xuICAgIHJldHVybiB3YWxsZXRQYXJhbXM7XG4gIH1cblxuICAvKipcbiAgICogU2lnbiBtZXNzYWdlIHdpdGggcHJpdmF0ZSBrZXlcbiAgICpcbiAgICogQHBhcmFtIGtleVxuICAgKiBAcGFyYW0gbWVzc2FnZVxuICAgKi9cbiAgYXN5bmMgc2lnbk1lc3NhZ2Uoa2V5OiBLZXlQYWlyLCBtZXNzYWdlOiBzdHJpbmcgfCBCdWZmZXIpOiBQcm9taXNlPEJ1ZmZlcj4ge1xuICAgIGlmICghdGhpcy5pc1ZhbGlkUHJ2KGtleS5wcnYpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYGludmFsaWQgcHJ2OiAke2tleS5wcnZ9YCk7XG4gICAgfVxuICAgIGlmICghQnVmZmVyLmlzQnVmZmVyKG1lc3NhZ2UpKSB7XG4gICAgICBtZXNzYWdlID0gQnVmZmVyLmZyb20obWVzc2FnZSk7XG4gICAgfVxuICAgIGNvbnN0IGtleXBhaXIgPSBzdGVsbGFyLktleXBhaXIuZnJvbVNlY3JldChrZXkucHJ2KTtcbiAgICByZXR1cm4ga2V5cGFpci5zaWduKG1lc3NhZ2UpO1xuICB9XG5cbiAgLyoqXG4gICAqIFZlcmlmaWVzIGlmIHNpZ25hdHVyZSBmb3IgbWVzc2FnZSBpcyB2YWxpZC5cbiAgICpcbiAgICogQHBhcmFtIHB1YiBwdWJsaWMga2V5XG4gICAqIEBwYXJhbSBtZXNzYWdlIHNpZ25lZCBtZXNzYWdlXG4gICAqIEBwYXJhbSBzaWduYXR1cmUgc2lnbmF0dXJlIHRvIHZlcmlmeVxuICAgKiBAcmV0dXJucyB0cnVlIGlmIHNpZ25hdHVyZSBpcyB2YWxpZC5cbiAgICovXG4gIHZlcmlmeVNpZ25hdHVyZShwdWI6IHN0cmluZywgbWVzc2FnZTogc3RyaW5nIHwgQnVmZmVyLCBzaWduYXR1cmU6IEJ1ZmZlcikge1xuICAgIGlmICghdGhpcy5pc1ZhbGlkUHViKHB1YikpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgaW52YWxpZCBwdWI6ICR7cHVifWApO1xuICAgIH1cbiAgICBpZiAoIUJ1ZmZlci5pc0J1ZmZlcihtZXNzYWdlKSkge1xuICAgICAgbWVzc2FnZSA9IEJ1ZmZlci5mcm9tKG1lc3NhZ2UpO1xuICAgIH1cbiAgICBjb25zdCBrZXlQYWlyID0gc3RlbGxhci5LZXlwYWlyLmZyb21QdWJsaWNLZXkocHViKTtcbiAgICByZXR1cm4ga2V5UGFpci52ZXJpZnkobWVzc2FnZSwgc2lnbmF0dXJlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFeHBsYWluL3BhcnNlIHRyYW5zYWN0aW9uXG4gICAqIEBwYXJhbSBwYXJhbXNcbiAgICovXG4gIGFzeW5jIGV4cGxhaW5UcmFuc2FjdGlvbihwYXJhbXM6IEV4cGxhaW5UcmFuc2FjdGlvbk9wdGlvbnMpOiBQcm9taXNlPFRyYW5zYWN0aW9uRXhwbGFuYXRpb24+IHtcbiAgICBjb25zdCB7IHR4SGV4LCB0eEJhc2U2NCB9ID0gcGFyYW1zO1xuICAgIGxldCB0eDogc3RlbGxhci5UcmFuc2FjdGlvbiB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcblxuICAgIGlmICghdHhIZXggJiYgIXR4QmFzZTY0KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2V4cGxhaW5UcmFuc2FjdGlvbiBtaXNzaW5nIHR4SGV4IG9yIHR4QmFzZTY0IHBhcmFtZXRlciwgbXVzdCBoYXZlIGF0IGxlYXN0IG9uZScpO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBpZiAodHhIZXgpIHtcbiAgICAgICAgdHggPSBuZXcgc3RlbGxhci5UcmFuc2FjdGlvbihCdWZmZXIuZnJvbSh0eEhleCwgJ2hleCcpLnRvU3RyaW5nKCdiYXNlNjQnKSwgdGhpcy5nZXRTdGVsbGFyTmV0d29yaygpKTtcbiAgICAgIH0gZWxzZSBpZiAodHhCYXNlNjQpIHtcbiAgICAgICAgdHggPSBuZXcgc3RlbGxhci5UcmFuc2FjdGlvbih0eEJhc2U2NCwgdGhpcy5nZXRTdGVsbGFyTmV0d29yaygpKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ3R4QmFzZTY0IG5lZWRzIHRvIGJlIGEgdmFsaWQgdHggZW5jb2RlZCBhcyBiYXNlNjQgc3RyaW5nJyk7XG4gICAgfVxuXG4gICAgaWYgKCF0eCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCd0eCBuZWVkcyB0byBiZSBkZWZpbmVkIGluIG9yZGVyIHRvIGV4cGxhaW4gdHJhbnNhY3Rpb24nKTtcbiAgICB9XG4gICAgY29uc3QgaWQgPSB0eC5oYXNoKCkudG9TdHJpbmcoJ2hleCcpO1xuXG4gICAgLy8gSW4gYSBTdGVsbGFyIHR4LCB0aGUgX21lbW8gcHJvcGVydHkgaXMgYW4gb2JqZWN0IHdpdGggdGhlIG1ldGhvZHM6XG4gICAgLy8gdmFsdWUoKSBhbmQgYXJtKCkgdGhhdCBwcm92aWRlIG1lbW8gdmFsdWUgYW5kIHR5cGUsIHJlc3BlY3RpdmVseS5cbiAgICBjb25zdCBtZW1vOiBUcmFuc2FjdGlvbk1lbW8gPVxuICAgICAgXy5yZXN1bHQodHgsICdfbWVtby52YWx1ZScpICYmIF8ucmVzdWx0KHR4LCAnX21lbW8uYXJtJylcbiAgICAgICAgPyB7XG4gICAgICAgICAgICB2YWx1ZTogKF8ucmVzdWx0KHR4LCAnX21lbW8udmFsdWUnKSBhcyBhbnkpLnRvU3RyaW5nKCksXG4gICAgICAgICAgICB0eXBlOiBfLnJlc3VsdCh0eCwgJ19tZW1vLmFybScpLFxuICAgICAgICAgIH1cbiAgICAgICAgOiB7fTtcblxuICAgIGxldCBzcGVuZEFtb3VudCA9IG5ldyBCaWdOdW1iZXIoMCk7IC8vIGFtb3VudCBvZiBYTE0gdXNlZCBpbiBYTE0tb25seSB0eHNcbiAgICBjb25zdCBzcGVuZEFtb3VudHMgPSB7fTsgLy8gdHJhY2sgYm90aCB4bG0gYW5kIHRva2VuIGFtb3VudHNcbiAgICBpZiAoXy5pc0VtcHR5KHR4Lm9wZXJhdGlvbnMpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ21pc3Npbmcgb3BlcmF0aW9ucycpO1xuICAgIH1cblxuICAgIGNvbnN0IG91dHB1dHM6IFRyYW5zYWN0aW9uT3V0cHV0W10gPSBbXTtcbiAgICBjb25zdCBvcGVyYXRpb25zOiBUcmFuc2FjdGlvbk9wZXJhdGlvbltdID0gW107IC8vIG5vbi1wYXltZW50IG9wZXJhdGlvbnNcblxuICAgIF8uZm9yRWFjaCh0eC5vcGVyYXRpb25zLCAob3A6IHN0ZWxsYXIuT3BlcmF0aW9uKSA9PiB7XG4gICAgICBpZiAob3AudHlwZSA9PT0gJ2NyZWF0ZUFjY291bnQnIHx8IG9wLnR5cGUgPT09ICdwYXltZW50Jykge1xuICAgICAgICAvLyBUT0RPIFJlbW92ZSBtZW1vSWQgZnJvbSBhZGRyZXNzXG4gICAgICAgIC8vIEdldCBtZW1vIHRvIGF0dGFjaCB0byBhZGRyZXNzLCBpZiB0eXBlIGlzICdpZCdcbiAgICAgICAgY29uc3QgbWVtb0lkID0gXy5nZXQobWVtbywgJ3R5cGUnKSA9PT0gJ2lkJyAmJiAhXy5nZXQobWVtbywgJ3ZhbHVlJykgPyBgP21lbW9JZD0ke21lbW8udmFsdWV9YCA6ICcnO1xuICAgICAgICBsZXQgYXNzZXQ7XG4gICAgICAgIGlmIChvcC50eXBlID09PSAncGF5bWVudCcpIHtcbiAgICAgICAgICBpZiAob3AuYXNzZXQuZ2V0QXNzZXRUeXBlKCkgPT09ICdsaXF1aWRpdHlfcG9vbF9zaGFyZXMnKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgYXNzZXQgdHlwZScpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBhc3NldCA9IG9wLmFzc2V0IGFzIHN0ZWxsYXIuQXNzZXQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYXNzZXQgPSBzdGVsbGFyLkFzc2V0Lm5hdGl2ZSgpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNvaW4gPSB0aGlzLmdldFRva2VuTmFtZUZyb21TdGVsbGFyQXNzZXQoYXNzZXQpOyAvLyBjb2luIG9yIHRva2VuIGlkXG4gICAgICAgIGNvbnN0IG91dHB1dDogVHJhbnNhY3Rpb25PdXRwdXQgPSB7XG4gICAgICAgICAgYW1vdW50OiB0aGlzLmJpZ1VuaXRzVG9CYXNlVW5pdHMoXG4gICAgICAgICAgICAob3AgYXMgc3RlbGxhci5PcGVyYXRpb24uQ3JlYXRlQWNjb3VudCkuc3RhcnRpbmdCYWxhbmNlIHx8IChvcCBhcyBzdGVsbGFyLk9wZXJhdGlvbi5QYXltZW50KS5hbW91bnRcbiAgICAgICAgICApLFxuICAgICAgICAgIGFkZHJlc3M6IG9wLmRlc3RpbmF0aW9uICsgbWVtb0lkLFxuICAgICAgICAgIGNvaW4sXG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgKCFfLmlzVW5kZWZpbmVkKHNwZW5kQW1vdW50c1tjb2luXSkpIHtcbiAgICAgICAgICBzcGVuZEFtb3VudHNbY29pbl0gPSBzcGVuZEFtb3VudHNbY29pbl0ucGx1cyhvdXRwdXQuYW1vdW50KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzcGVuZEFtb3VudHNbY29pbl0gPSBuZXcgQmlnTnVtYmVyKG91dHB1dC5hbW91bnQpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChhc3NldC5pc05hdGl2ZSgpKSB7XG4gICAgICAgICAgc3BlbmRBbW91bnQgPSBzcGVuZEFtb3VudC5wbHVzKG91dHB1dC5hbW91bnQpO1xuICAgICAgICB9XG4gICAgICAgIG91dHB1dHMucHVzaChvdXRwdXQpO1xuICAgICAgfSBlbHNlIGlmIChvcC50eXBlID09PSAnY2hhbmdlVHJ1c3QnKSB7XG4gICAgICAgIGlmIChvcC5saW5lLmdldEFzc2V0VHlwZSgpID09PSAnbGlxdWlkaXR5X3Bvb2xfc2hhcmVzJykge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBhc3NldCB0eXBlJyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYXNzZXQgPSBvcC5saW5lIGFzIHN0ZWxsYXIuQXNzZXQ7XG5cbiAgICAgICAgb3BlcmF0aW9ucy5wdXNoKHtcbiAgICAgICAgICB0eXBlOiBvcC50eXBlLFxuICAgICAgICAgIGNvaW46IHRoaXMuZ2V0VG9rZW5OYW1lRnJvbVN0ZWxsYXJBc3NldChhc3NldCksXG4gICAgICAgICAgYXNzZXQsXG4gICAgICAgICAgbGltaXQ6IHRoaXMuYmlnVW5pdHNUb0Jhc2VVbml0cyhvcC5saW1pdCksXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgY29uc3Qgb3V0cHV0QW1vdW50ID0gc3BlbmRBbW91bnQudG9GaXhlZCgwKTtcbiAgICBjb25zdCBvdXRwdXRBbW91bnRzID0gXy5tYXBWYWx1ZXMoc3BlbmRBbW91bnRzLCAoYW1vdW50OiBCaWdOdW1iZXIpID0+IGFtb3VudC50b0ZpeGVkKDApKTtcbiAgICBjb25zdCBmZWUgPSB7XG4gICAgICBmZWU6IG5ldyBCaWdOdW1iZXIodHguZmVlKS50b0ZpeGVkKDApLFxuICAgICAgZmVlUmF0ZTogbnVsbCxcbiAgICAgIHNpemU6IG51bGwsXG4gICAgfTtcblxuICAgIHJldHVybiB7XG4gICAgICBkaXNwbGF5T3JkZXI6IFtcbiAgICAgICAgJ2lkJyxcbiAgICAgICAgJ291dHB1dEFtb3VudCcsXG4gICAgICAgICdvdXRwdXRBbW91bnRzJyxcbiAgICAgICAgJ2NoYW5nZUFtb3VudCcsXG4gICAgICAgICdvdXRwdXRzJyxcbiAgICAgICAgJ2NoYW5nZU91dHB1dHMnLFxuICAgICAgICAnZmVlJyxcbiAgICAgICAgJ21lbW8nLFxuICAgICAgICAnb3BlcmF0aW9ucycsXG4gICAgICBdLFxuICAgICAgaWQsXG4gICAgICBvdXRwdXRzLFxuICAgICAgb3V0cHV0QW1vdW50LFxuICAgICAgb3V0cHV0QW1vdW50cyxcbiAgICAgIGNoYW5nZU91dHB1dHM6IFtdLFxuICAgICAgY2hhbmdlQW1vdW50OiAnMCcsXG4gICAgICBtZW1vLFxuICAgICAgZmVlLFxuICAgICAgb3BlcmF0aW9ucyxcbiAgICB9IGFzIGFueTtcbiAgfVxuXG4gIC8qKlxuICAgKiBWZXJpZnkgdGhhdCBhIHR4IHByZWJ1aWxkJ3Mgb3BlcmF0aW9ucyBjb21wbHkgd2l0aCB0aGUgb3JpZ2luYWwgaW50ZW50aW9uXG4gICAqIEBwYXJhbSB7c3RlbGxhci5PcGVyYXRpb259IG9wZXJhdGlvbnMgLSB0eCBvcGVyYXRpb25zXG4gICAqIEBwYXJhbSB7VHJhbnNhY3Rpb25QYXJhbXN9IHR4UGFyYW1zIC0gcGFyYW1zIHVzZWQgdG8gYnVpbGQgdGhlIHR4XG4gICAqL1xuICB2ZXJpZnlFbmFibGVUb2tlblR4T3BlcmF0aW9ucyhvcGVyYXRpb25zOiBzdGVsbGFyLk9wZXJhdGlvbltdLCB0eFBhcmFtczogVHJhbnNhY3Rpb25QYXJhbXMpOiB2b2lkIHtcbiAgICBjb25zdCB0cnVzdGxpbmVPcGVyYXRpb25zID0gXy5maWx0ZXIob3BlcmF0aW9ucywgWyd0eXBlJywgJ2NoYW5nZVRydXN0J10pIGFzIHN0ZWxsYXIuT3BlcmF0aW9uLkNoYW5nZVRydXN0W107XG4gICAgaWYgKHRydXN0bGluZU9wZXJhdGlvbnMubGVuZ3RoICE9PSBfLmdldCh0eFBhcmFtcywgJ3JlY2lwaWVudHMnLCBbXSkubGVuZ3RoKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ3RyYW5zYWN0aW9uIHByZWJ1aWxkIGRvZXMgbm90IG1hdGNoIGV4cGVjdGVkIHRydXN0bGluZSBvcGVyYXRpb25zJyk7XG4gICAgfVxuICAgIF8uZm9yRWFjaCh0cnVzdGxpbmVPcGVyYXRpb25zLCAob3A6IHN0ZWxsYXIuT3BlcmF0aW9uKSA9PiB7XG4gICAgICBpZiAob3AudHlwZSAhPT0gJ2NoYW5nZVRydXN0Jykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgYXNzZXQgdHlwZScpO1xuICAgICAgfVxuICAgICAgaWYgKG9wLmxpbmUuZ2V0QXNzZXRUeXBlKCkgPT09ICdsaXF1aWRpdHlfcG9vbF9zaGFyZXMnKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBhc3NldCB0eXBlJyk7XG4gICAgICB9XG4gICAgICBjb25zdCBhc3NldCA9IG9wLmxpbmUgYXMgc3RlbGxhci5Bc3NldDtcbiAgICAgIGNvbnN0IG9wVG9rZW4gPSB0aGlzLmdldFRva2VuTmFtZUZyb21TdGVsbGFyQXNzZXQoYXNzZXQpO1xuICAgICAgY29uc3QgdG9rZW5UcnVzdGxpbmUgPSBfLmZpbmQodHhQYXJhbXMucmVjaXBpZW50cywgKHJlY2lwaWVudCkgPT4ge1xuICAgICAgICAvLyB0cnVzdGxpbmUgcGFyYW1zIHVzZSBsaW1pdHMgaW4gYmFzZSB1bml0c1xuICAgICAgICBjb25zdCBvcExpbWl0QmFzZVVuaXRzID0gdGhpcy5iaWdVbml0c1RvQmFzZVVuaXRzKG9wLmxpbWl0KTtcbiAgICAgICAgLy8gRW5hYmxlIHRva2VuIGxpbWl0IGlzIHNldCB0byBYbG0ubWF4VHJ1c3RsaW5lTGltaXQgYnkgZGVmYXVsdFxuICAgICAgICByZXR1cm4gcmVjaXBpZW50LnRva2VuTmFtZSA9PT0gb3BUb2tlbiAmJiBvcExpbWl0QmFzZVVuaXRzID09PSBYbG0ubWF4VHJ1c3RsaW5lTGltaXQ7XG4gICAgICB9KTtcbiAgICAgIGlmICghdG9rZW5UcnVzdGxpbmUpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCd0cmFuc2FjdGlvbiBwcmVidWlsZCBkb2VzIG5vdCBtYXRjaCBleHBlY3RlZCB0cnVzdGxpbmUgdG9rZW5zJyk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogVmVyaWZ5IHRoYXQgYSB0eCBwcmVidWlsZCdzIG9wZXJhdGlvbnMgY29tcGx5IHdpdGggdGhlIG9yaWdpbmFsIGludGVudGlvblxuICAgKiBAcGFyYW0ge3N0ZWxsYXIuT3BlcmF0aW9ufSBvcGVyYXRpb25zIC0gdHggb3BlcmF0aW9uc1xuICAgKiBAcGFyYW0ge1RyYW5zYWN0aW9uUGFyYW1zfSB0eFBhcmFtcyAtIHBhcmFtcyB1c2VkIHRvIGJ1aWxkIHRoZSB0eFxuICAgKi9cbiAgdmVyaWZ5VHJ1c3RsaW5lVHhPcGVyYXRpb25zKG9wZXJhdGlvbnM6IHN0ZWxsYXIuT3BlcmF0aW9uW10sIHR4UGFyYW1zOiBUcmFuc2FjdGlvblBhcmFtcyk6IHZvaWQge1xuICAgIGNvbnN0IHRydXN0bGluZU9wZXJhdGlvbnMgPSBfLmZpbHRlcihvcGVyYXRpb25zLCBbJ3R5cGUnLCAnY2hhbmdlVHJ1c3QnXSkgYXMgc3RlbGxhci5PcGVyYXRpb24uQ2hhbmdlVHJ1c3RbXTtcbiAgICBpZiAodHJ1c3RsaW5lT3BlcmF0aW9ucy5sZW5ndGggIT09IF8uZ2V0KHR4UGFyYW1zLCAndHJ1c3RsaW5lcycsIFtdKS5sZW5ndGgpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcigndHJhbnNhY3Rpb24gcHJlYnVpbGQgZG9lcyBub3QgbWF0Y2ggZXhwZWN0ZWQgdHJ1c3RsaW5lIG9wZXJhdGlvbnMnKTtcbiAgICB9XG4gICAgXy5mb3JFYWNoKHRydXN0bGluZU9wZXJhdGlvbnMsIChvcDogc3RlbGxhci5PcGVyYXRpb24pID0+IHtcbiAgICAgIGlmIChvcC50eXBlICE9PSAnY2hhbmdlVHJ1c3QnKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBhc3NldCB0eXBlJyk7XG4gICAgICB9XG4gICAgICBpZiAob3AubGluZS5nZXRBc3NldFR5cGUoKSA9PT0gJ2xpcXVpZGl0eV9wb29sX3NoYXJlcycpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGFzc2V0IHR5cGUnKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGFzc2V0ID0gb3AubGluZSBhcyBzdGVsbGFyLkFzc2V0O1xuICAgICAgY29uc3Qgb3BUb2tlbiA9IHRoaXMuZ2V0VG9rZW5OYW1lRnJvbVN0ZWxsYXJBc3NldChhc3NldCk7XG4gICAgICBjb25zdCB0b2tlblRydXN0bGluZSA9IF8uZmluZCh0eFBhcmFtcy50cnVzdGxpbmVzLCAodHJ1c3RsaW5lKSA9PiB7XG4gICAgICAgIC8vIHRydXN0bGluZSBwYXJhbXMgdXNlIGxpbWl0cyBpbiBiYXNlIHVuaXRzXG4gICAgICAgIGNvbnN0IG9wTGltaXRCYXNlVW5pdHMgPSB0aGlzLmJpZ1VuaXRzVG9CYXNlVW5pdHMob3AubGltaXQpO1xuICAgICAgICAvLyBQcmVwYXJlIHRoZSBjb25kaXRpb25zIHRvIGNoZWNrIGZvclxuICAgICAgICAvLyBMaW1pdCB3aWxsIGFsd2F5cyBiZSBzZXQgaW4gdGhlIG9wZXJhdGlvbiwgZXZlbiBpZiBpdCB3YXMgb21pdHRlZCBmcm9tIHR4UGFyYW1zIGluIHRoZSBmb2xsb3dpbmcgY2FzZXM6XG4gICAgICAgIC8vIDEuIEFjdGlvbiBpcyAnYWRkJyAtIGxpbWl0IGlzIHNldCB0byBYbG0ubWF4VHJ1c3RsaW5lTGltaXQgYnkgZGVmYXVsdFxuICAgICAgICAvLyAyLiBBY3Rpb24gaXMgJ3JlbW92ZScgLSBsaW1pdCBpcyBzZXQgdG8gJzAnXG4gICAgICAgIGNvbnN0IG5vTGltaXQgPSBfLmlzVW5kZWZpbmVkKHRydXN0bGluZS5saW1pdCk7XG4gICAgICAgIGNvbnN0IGFkZFRydXN0bGluZVdpdGhEZWZhdWx0TGltaXQgPSB0cnVzdGxpbmUuYWN0aW9uID09PSAnYWRkJyAmJiBvcExpbWl0QmFzZVVuaXRzID09PSBYbG0ubWF4VHJ1c3RsaW5lTGltaXQ7XG4gICAgICAgIGNvbnN0IHJlbW92ZVRydXN0bGluZSA9IHRydXN0bGluZS5hY3Rpb24gPT09ICdyZW1vdmUnICYmIG9wTGltaXRCYXNlVW5pdHMgPT09ICcwJztcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICB0cnVzdGxpbmUudG9rZW4gPT09IG9wVG9rZW4gJiZcbiAgICAgICAgICAodHJ1c3RsaW5lLmxpbWl0ID09PSBvcExpbWl0QmFzZVVuaXRzIHx8IChub0xpbWl0ICYmIChhZGRUcnVzdGxpbmVXaXRoRGVmYXVsdExpbWl0IHx8IHJlbW92ZVRydXN0bGluZSkpKVxuICAgICAgICApO1xuICAgICAgfSk7XG4gICAgICBpZiAoIXRva2VuVHJ1c3RsaW5lKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcigndHJhbnNhY3Rpb24gcHJlYnVpbGQgZG9lcyBub3QgbWF0Y2ggZXhwZWN0ZWQgdHJ1c3RsaW5lIHRva2VucycpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFZlcmlmeSB0aGF0IGEgdHJhbnNhY3Rpb24gcHJlYnVpbGQgY29tcGxpZXMgd2l0aCB0aGUgb3JpZ2luYWwgaW50ZW50aW9uXG4gICAqXG4gICAqIEBwYXJhbSBvcHRpb25zXG4gICAqIEBwYXJhbSBvcHRpb25zLnR4UHJlYnVpbGQgcHJlYnVpbGQgb2JqZWN0IHJldHVybmVkIGJ5IHBsYXRmb3JtXG4gICAqIEBwYXJhbSBvcHRpb25zLnR4UHJlYnVpbGQudHhCYXNlNjQgcHJlYnVpbHQgdHJhbnNhY3Rpb24gZW5jb2RlZCBhcyBiYXNlNjQgc3RyaW5nXG4gICAqIEBwYXJhbSBvcHRpb25zLndhbGxldCB3YWxsZXQgb2JqZWN0IHRvIG9idGFpbiBrZXlzIHRvIHZlcmlmeSBhZ2FpbnN0XG4gICAqIEBwYXJhbSBvcHRpb25zLnZlcmlmaWNhdGlvbiBzcGVjaWZ5aW5nIHNvbWUgdmVyaWZpY2F0aW9uIHBhcmFtZXRlcnNcbiAgICogQHBhcmFtIG9wdGlvbnMudmVyaWZpY2F0aW9uLmRpc2FibGVOZXR3b3JraW5nIERpc2FsbG93IGZldGNoaW5nIGFueSBkYXRhIGZyb20gdGhlIGludGVybmV0IGZvciB2ZXJpZmljYXRpb24gcHVycG9zZXNcbiAgICogQHBhcmFtIG9wdGlvbnMudmVyaWZpY2F0aW9uLmtleWNoYWlucyBQYXNzIGtleWNoYWlucyBtYW51YWxseSByYXRoZXIgdGhhbiBmZXRjaGluZyB0aGVtIGJ5IGlkXG4gICAqL1xuICBhc3luYyB2ZXJpZnlUcmFuc2FjdGlvbihvcHRpb25zOiBWZXJpZnlUcmFuc2FjdGlvbk9wdGlvbnMpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICAvLyBUT0RPIEJHLTU2MDAgQWRkIHBhcnNlVHJhbnNhY3Rpb24gLyBpbXByb3ZlIHZlcmlmaWNhdGlvblxuICAgIGNvbnN0IHsgdHhQYXJhbXMsIHR4UHJlYnVpbGQsIHdhbGxldCwgdmVyaWZpY2F0aW9uID0ge30gfSA9IG9wdGlvbnM7XG4gICAgY29uc3QgZGlzYWJsZU5ldHdvcmtpbmcgPSAhIXZlcmlmaWNhdGlvbi5kaXNhYmxlTmV0d29ya2luZztcblxuICAgIGlmICghdHhQcmVidWlsZC50eEJhc2U2NCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdtaXNzaW5nIHJlcXVpcmVkIHR4IHByZWJ1aWxkIHByb3BlcnR5IHR4QmFzZTY0Jyk7XG4gICAgfVxuXG4gICAgY29uc3QgdHggPSBuZXcgc3RlbGxhci5UcmFuc2FjdGlvbih0eFByZWJ1aWxkLnR4QmFzZTY0LCB0aGlzLmdldFN0ZWxsYXJOZXR3b3JrKCkpO1xuXG4gICAgaWYgKHR4UGFyYW1zLnJlY2lwaWVudHMgJiYgdHhQYXJhbXMucmVjaXBpZW50cy5sZW5ndGggPiAxKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2Nhbm5vdCBzcGVjaWZ5IG1vcmUgdGhhbiAxIHJlY2lwaWVudCcpO1xuICAgIH1cblxuICAgIC8vIFN0ZWxsYXIgdHhzIGFyZSBtYWRlIHVwIG9mIG9wZXJhdGlvbnMuIFdlIG9ubHkgY2FyZSBhYm91dCBDcmVhdGUgQWNjb3VudCBhbmQgUGF5bWVudCBmb3Igc2VuZGluZyBmdW5kcy5cbiAgICBjb25zdCBvdXRwdXRPcGVyYXRpb25zID0gXy5maWx0ZXIoXG4gICAgICB0eC5vcGVyYXRpb25zLFxuICAgICAgKG9wZXJhdGlvbikgPT4gb3BlcmF0aW9uLnR5cGUgPT09ICdjcmVhdGVBY2NvdW50JyB8fCBvcGVyYXRpb24udHlwZSA9PT0gJ3BheW1lbnQnXG4gICAgKTtcblxuICAgIGlmICh0eFBhcmFtcy50eXBlID09PSAnZW5hYmxldG9rZW4nKSB7XG4gICAgICB0aGlzLnZlcmlmeUVuYWJsZVRva2VuVHhPcGVyYXRpb25zKHR4Lm9wZXJhdGlvbnMsIHR4UGFyYW1zKTtcbiAgICB9IGVsc2UgaWYgKHR4UGFyYW1zLnR5cGUgPT09ICd0cnVzdGxpbmUnKSB7XG4gICAgICB0aGlzLnZlcmlmeVRydXN0bGluZVR4T3BlcmF0aW9ucyh0eC5vcGVyYXRpb25zLCB0eFBhcmFtcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChfLmlzRW1wdHkob3V0cHV0T3BlcmF0aW9ucykpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCd0cmFuc2FjdGlvbiBwcmVidWlsZCBkb2VzIG5vdCBoYXZlIGFueSBvcGVyYXRpb25zJyk7XG4gICAgICB9XG5cbiAgICAgIF8uZm9yRWFjaCh0eFBhcmFtcy5yZWNpcGllbnRzLCAoZXhwZWN0ZWRPdXRwdXQsIGluZGV4KSA9PiB7XG4gICAgICAgIGNvbnN0IGV4cGVjdGVkT3V0cHV0QWRkcmVzc0RldGFpbHMgPSB0aGlzLmdldEFkZHJlc3NEZXRhaWxzKGV4cGVjdGVkT3V0cHV0LmFkZHJlc3MpO1xuICAgICAgICBjb25zdCBleHBlY3RlZE91dHB1dEFkZHJlc3MgPSBleHBlY3RlZE91dHB1dEFkZHJlc3NEZXRhaWxzLmFkZHJlc3M7XG4gICAgICAgIGNvbnN0IG91dHB1dCA9IG91dHB1dE9wZXJhdGlvbnNbaW5kZXhdIGFzIHN0ZWxsYXIuT3BlcmF0aW9uLlBheW1lbnQgfCBzdGVsbGFyLk9wZXJhdGlvbi5DcmVhdGVBY2NvdW50O1xuICAgICAgICBpZiAob3V0cHV0LmRlc3RpbmF0aW9uICE9PSBleHBlY3RlZE91dHB1dEFkZHJlc3MpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3RyYW5zYWN0aW9uIHByZWJ1aWxkIGRvZXMgbm90IG1hdGNoIGV4cGVjdGVkIHJlY2lwaWVudCcpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZXhwZWN0ZWRPdXRwdXRBbW91bnQgPSBuZXcgQmlnTnVtYmVyKGV4cGVjdGVkT3V0cHV0LmFtb3VudCk7XG4gICAgICAgIC8vIFRoZSBvdXRwdXQgYW1vdW50IGlzIGV4cHJlc3NlZCBhcyBzdGFydGluZ0JhbGFuY2UgaW4gY3JlYXRlQWNjb3VudCBvcGVyYXRpb25zIGFuZCBhcyBhbW91bnQgaW4gcGF5bWVudCBvcGVyYXRpb25zLlxuICAgICAgICBjb25zdCBvdXRwdXRBbW91bnRTdHJpbmcgPSBvdXRwdXQudHlwZSA9PT0gJ2NyZWF0ZUFjY291bnQnID8gb3V0cHV0LnN0YXJ0aW5nQmFsYW5jZSA6IG91dHB1dC5hbW91bnQ7XG4gICAgICAgIGNvbnN0IG91dHB1dEFtb3VudCA9IG5ldyBCaWdOdW1iZXIodGhpcy5iaWdVbml0c1RvQmFzZVVuaXRzKG91dHB1dEFtb3VudFN0cmluZykpO1xuXG4gICAgICAgIGlmICghb3V0cHV0QW1vdW50LmVxKGV4cGVjdGVkT3V0cHV0QW1vdW50KSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcigndHJhbnNhY3Rpb24gcHJlYnVpbGQgZG9lcyBub3QgbWF0Y2ggZXhwZWN0ZWQgYW1vdW50Jyk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIFZlcmlmeSB0aGUgdXNlciBzaWduYXR1cmUsIGlmIHRoZSB0eCBpcyBoYWxmLXNpZ25lZFxuICAgIGlmICghXy5pc0VtcHR5KHR4LnNpZ25hdHVyZXMpKSB7XG4gICAgICBjb25zdCB1c2VyU2lnbmF0dXJlID0gdHguc2lnbmF0dXJlc1swXS5zaWduYXR1cmUoKTtcblxuICAgICAgLy8gb2J0YWluIHRoZSBrZXljaGFpbnMgYW5kIGtleSBzaWduYXR1cmVzXG4gICAgICBsZXQga2V5Y2hhaW5zID0gdmVyaWZpY2F0aW9uLmtleWNoYWlucztcbiAgICAgIGlmICgha2V5Y2hhaW5zICYmIGRpc2FibGVOZXR3b3JraW5nKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignY2Fubm90IGZldGNoIGtleWNoYWlucyB3aXRob3V0IG5ldHdvcmtpbmcnKTtcbiAgICAgIH0gZWxzZSBpZiAoIWtleWNoYWlucykge1xuICAgICAgICBrZXljaGFpbnMgPSBhd2FpdCBwcm9taXNlUHJvcHMoe1xuICAgICAgICAgIHVzZXI6IHRoaXMua2V5Y2hhaW5zKCkuZ2V0KHsgaWQ6IHdhbGxldC5rZXlJZHMoKVtLZXlJbmRpY2VzLlVTRVJdIH0pLFxuICAgICAgICAgIGJhY2t1cDogdGhpcy5rZXljaGFpbnMoKS5nZXQoeyBpZDogd2FsbGV0LmtleUlkcygpW0tleUluZGljZXMuQkFDS1VQXSB9KSxcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIGlmICgha2V5Y2hhaW5zIHx8ICFrZXljaGFpbnMuYmFja3VwIHx8ICFrZXljaGFpbnMudXNlcikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2tleWNoYWlucyBhcmUgcmVxdWlyZWQsIGJ1dCBjb3VsZCBub3QgYmUgZmV0Y2hlZCcpO1xuICAgICAgfVxuXG4gICAgICBhc3NlcnQoa2V5Y2hhaW5zLmJhY2t1cC5wdWIpO1xuICAgICAgaWYgKHRoaXMudmVyaWZ5U2lnbmF0dXJlKGtleWNoYWlucy5iYWNrdXAucHViLCB0eC5oYXNoKCksIHVzZXJTaWduYXR1cmUpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcigndHJhbnNhY3Rpb24gc2lnbmVkIHdpdGggd3Jvbmcga2V5Jyk7XG4gICAgICB9XG4gICAgICBhc3NlcnQoa2V5Y2hhaW5zLnVzZXIucHViKTtcbiAgICAgIGlmICghdGhpcy52ZXJpZnlTaWduYXR1cmUoa2V5Y2hhaW5zLnVzZXIucHViLCB0eC5oYXNoKCksIHVzZXJTaWduYXR1cmUpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcigndHJhbnNhY3Rpb24gc2lnbmF0dXJlIGludmFsaWQnKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8qKiBpbmhlcml0ZG9jICovXG4gIGRlcml2ZUtleVdpdGhTZWVkKCk6IHsgZGVyaXZhdGlvblBhdGg6IHN0cmluZzsga2V5OiBzdHJpbmcgfSB7XG4gICAgdGhyb3cgbmV3IE5vdFN1cHBvcnRlZCgnbWV0aG9kIGRlcml2ZUtleVdpdGhTZWVkIG5vdCBzdXBwb3J0ZWQgZm9yIGVkZHNhIGN1cnZlJyk7XG4gIH1cblxuICAvKipcbiAgICogc3RlbGxhci1zZGsgaGFzIHR3byBvdmVybG9hZHMgZm9yIHRvWERSLCBhbmQgdHlwZXNjcmlwdCBjYW4ndCBzZWVtIHRvIGZpZ3VyZSBvdXQgdGhlXG4gICAqIGNvcnJlY3Qgb25lIHRvIHVzZSwgc28gd2UgaGF2ZSB0byBiZSB2ZXJ5IGV4cGxpY2l0IGFzIHRvIHdoaWNoIG9uZSB3ZSB3YW50LlxuICAgKiBAcGFyYW0gdHggdHJhbnNhY3Rpb24gdG8gY29udmVydFxuICAgKi9cbiAgcHJvdGVjdGVkIHN0YXRpYyB0eFRvU3RyaW5nID0gKHR4OiBzdGVsbGFyLlRyYW5zYWN0aW9uKTogc3RyaW5nID0+XG4gICAgKHR4LnRvRW52ZWxvcGUoKS50b1hEUiBhcyAoXzogc3RyaW5nKSA9PiBzdHJpbmcpKCdiYXNlNjQnKTtcblxuICBhc3luYyBwYXJzZVRyYW5zYWN0aW9uKHBhcmFtczogUGFyc2VUcmFuc2FjdGlvbk9wdGlvbnMpOiBQcm9taXNlPFBhcnNlZFRyYW5zYWN0aW9uPiB7XG4gICAgcmV0dXJuIHt9O1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgY29uZmlnIGZvciBob3cgdG9rZW4gZW5hYmxlbWVudHMgd29yayBmb3IgdGhpcyBjb2luXG4gICAqIEByZXR1cm5zXG4gICAqICAgIHJlcXVpcmVzVG9rZW5FbmFibGVtZW50OiBUcnVlIGlmIHRva2VucyBuZWVkIHRvIGJlIGVuYWJsZWQgZm9yIHRoaXMgY29pblxuICAgKiAgICBzdXBwb3J0c011bHRpcGxlVG9rZW5FbmFibGVtZW50czogVHJ1ZSBpZiBtdWx0aXBsZSB0b2tlbnMgY2FuIGJlIGVuYWJsZWQgaW4gb25lIHRyYW5zYWN0aW9uXG4gICAqL1xuICBnZXRUb2tlbkVuYWJsZW1lbnRDb25maWcoKTogVG9rZW5FbmFibGVtZW50Q29uZmlnIHtcbiAgICByZXR1cm4ge1xuICAgICAgcmVxdWlyZXNUb2tlbkVuYWJsZW1lbnQ6IHRydWUsXG4gICAgICBzdXBwb3J0c011bHRpcGxlVG9rZW5FbmFibGVtZW50czogZmFsc2UsXG4gICAgfTtcbiAgfVxufVxuIl19
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bitgo/sdk-coin-xlm",
3
- "version": "2.25.0",
3
+ "version": "3.0.0",
4
4
  "description": "BitGo SDK coin library for Xlm",
5
5
  "main": "./dist/src/index.js",
6
6
  "types": "./dist/src/index.d.ts",
@@ -18,7 +18,7 @@
18
18
  "author": "BitGo SDK Team <sdkteam@bitgo.com>",
19
19
  "license": "MIT",
20
20
  "engines": {
21
- "node": ">=16 <21"
21
+ "node": ">=18 <21"
22
22
  },
23
23
  "repository": {
24
24
  "type": "git",
@@ -40,16 +40,15 @@
40
40
  ]
41
41
  },
42
42
  "dependencies": {
43
- "@bitgo/sdk-core": "^26.2.0",
44
- "@bitgo/statics": "^48.0.0",
43
+ "@bitgo/sdk-core": "^26.4.0",
44
+ "@bitgo/statics": "^48.2.0",
45
45
  "bignumber.js": "^9.1.1",
46
46
  "lodash": "^4.17.14",
47
47
  "stellar-sdk": "^10.0.1",
48
48
  "superagent": "^3.8.3"
49
49
  },
50
50
  "devDependencies": {
51
- "@bitgo/sdk-api": "^1.43.3",
52
- "@bitgo/sdk-test": "^8.0.3"
53
- },
54
- "gitHead": "160c34f86c0819bfa0dbe8bc996c0745a34f222a"
51
+ "@bitgo/sdk-api": "^1.43.5",
52
+ "@bitgo/sdk-test": "^8.0.5"
53
+ }
55
54
  }
package/LICENSE DELETED
@@ -1,191 +0,0 @@
1
-
2
- Apache License
3
- Version 2.0, January 2004
4
- http://www.apache.org/licenses/
5
-
6
- TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
7
-
8
- 1. Definitions.
9
-
10
- "License" shall mean the terms and conditions for use, reproduction,
11
- and distribution as defined by Sections 1 through 9 of this document.
12
-
13
- "Licensor" shall mean the copyright owner or entity authorized by
14
- the copyright owner that is granting the License.
15
-
16
- "Legal Entity" shall mean the union of the acting entity and all
17
- other entities that control, are controlled by, or are under common
18
- control with that entity. For the purposes of this definition,
19
- "control" means (i) the power, direct or indirect, to cause the
20
- direction or management of such entity, whether by contract or
21
- otherwise, or (ii) ownership of fifty percent (50%) or more of the
22
- outstanding shares, or (iii) beneficial ownership of such entity.
23
-
24
- "You" (or "Your") shall mean an individual or Legal Entity
25
- exercising permissions granted by this License.
26
-
27
- "Source" form shall mean the preferred form for making modifications,
28
- including but not limited to software source code, documentation
29
- source, and configuration files.
30
-
31
- "Object" form shall mean any form resulting from mechanical
32
- transformation or translation of a Source form, including but
33
- not limited to compiled object code, generated documentation,
34
- and conversions to other media types.
35
-
36
- "Work" shall mean the work of authorship, whether in Source or
37
- Object form, made available under the License, as indicated by a
38
- copyright notice that is included in or attached to the work
39
- (an example is provided in the Appendix below).
40
-
41
- "Derivative Works" shall mean any work, whether in Source or Object
42
- form, that is based on (or derived from) the Work and for which the
43
- editorial revisions, annotations, elaborations, or other modifications
44
- represent, as a whole, an original work of authorship. For the purposes
45
- of this License, Derivative Works shall not include works that remain
46
- separable from, or merely link (or bind by name) to the interfaces of,
47
- the Work and Derivative Works thereof.
48
-
49
- "Contribution" shall mean any work of authorship, including
50
- the original version of the Work and any modifications or additions
51
- to that Work or Derivative Works thereof, that is intentionally
52
- submitted to Licensor for inclusion in the Work by the copyright owner
53
- or by an individual or Legal Entity authorized to submit on behalf of
54
- the copyright owner. For the purposes of this definition, "submitted"
55
- means any form of electronic, verbal, or written communication sent
56
- to the Licensor or its representatives, including but not limited to
57
- communication on electronic mailing lists, source code control systems,
58
- and issue tracking systems that are managed by, or on behalf of, the
59
- Licensor for the purpose of discussing and improving the Work, but
60
- excluding communication that is conspicuously marked or otherwise
61
- designated in writing by the copyright owner as "Not a Contribution."
62
-
63
- "Contributor" shall mean Licensor and any individual or Legal Entity
64
- on behalf of whom a Contribution has been received by Licensor and
65
- subsequently incorporated within the Work.
66
-
67
- 2. Grant of Copyright License. Subject to the terms and conditions of
68
- this License, each Contributor hereby grants to You a perpetual,
69
- worldwide, non-exclusive, no-charge, royalty-free, irrevocable
70
- copyright license to reproduce, prepare Derivative Works of,
71
- publicly display, publicly perform, sublicense, and distribute the
72
- Work and such Derivative Works in Source or Object form.
73
-
74
- 3. Grant of Patent License. Subject to the terms and conditions of
75
- this License, each Contributor hereby grants to You a perpetual,
76
- worldwide, non-exclusive, no-charge, royalty-free, irrevocable
77
- (except as stated in this section) patent license to make, have made,
78
- use, offer to sell, sell, import, and otherwise transfer the Work,
79
- where such license applies only to those patent claims licensable
80
- by such Contributor that are necessarily infringed by their
81
- Contribution(s) alone or by combination of their Contribution(s)
82
- with the Work to which such Contribution(s) was submitted. If You
83
- institute patent litigation against any entity (including a
84
- cross-claim or counterclaim in a lawsuit) alleging that the Work
85
- or a Contribution incorporated within the Work constitutes direct
86
- or contributory patent infringement, then any patent licenses
87
- granted to You under this License for that Work shall terminate
88
- as of the date such litigation is filed.
89
-
90
- 4. Redistribution. You may reproduce and distribute copies of the
91
- Work or Derivative Works thereof in any medium, with or without
92
- modifications, and in Source or Object form, provided that You
93
- meet the following conditions:
94
-
95
- (a) You must give any other recipients of the Work or
96
- Derivative Works a copy of this License; and
97
-
98
- (b) You must cause any modified files to carry prominent notices
99
- stating that You changed the files; and
100
-
101
- (c) You must retain, in the Source form of any Derivative Works
102
- that You distribute, all copyright, patent, trademark, and
103
- attribution notices from the Source form of the Work,
104
- excluding those notices that do not pertain to any part of
105
- the Derivative Works; and
106
-
107
- (d) If the Work includes a "NOTICE" text file as part of its
108
- distribution, then any Derivative Works that You distribute must
109
- include a readable copy of the attribution notices contained
110
- within such NOTICE file, excluding those notices that do not
111
- pertain to any part of the Derivative Works, in at least one
112
- of the following places: within a NOTICE text file distributed
113
- as part of the Derivative Works; within the Source form or
114
- documentation, if provided along with the Derivative Works; or,
115
- within a display generated by the Derivative Works, if and
116
- wherever such third-party notices normally appear. The contents
117
- of the NOTICE file are for informational purposes only and
118
- do not modify the License. You may add Your own attribution
119
- notices within Derivative Works that You distribute, alongside
120
- or as an addendum to the NOTICE text from the Work, provided
121
- that such additional attribution notices cannot be construed
122
- as modifying the License.
123
-
124
- You may add Your own copyright statement to Your modifications and
125
- may provide additional or different license terms and conditions
126
- for use, reproduction, or distribution of Your modifications, or
127
- for any such Derivative Works as a whole, provided Your use,
128
- reproduction, and distribution of the Work otherwise complies with
129
- the conditions stated in this License.
130
-
131
- 5. Submission of Contributions. Unless You explicitly state otherwise,
132
- any Contribution intentionally submitted for inclusion in the Work
133
- by You to the Licensor shall be under the terms and conditions of
134
- this License, without any additional terms or conditions.
135
- Notwithstanding the above, nothing herein shall supersede or modify
136
- the terms of any separate license agreement you may have executed
137
- with Licensor regarding such Contributions.
138
-
139
- 6. Trademarks. This License does not grant permission to use the trade
140
- names, trademarks, service marks, or product names of the Licensor,
141
- except as required for reasonable and customary use in describing the
142
- origin of the Work and reproducing the content of the NOTICE file.
143
-
144
- 7. Disclaimer of Warranty. Unless required by applicable law or
145
- agreed to in writing, Licensor provides the Work (and each
146
- Contributor provides its Contributions) on an "AS IS" BASIS,
147
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
148
- implied, including, without limitation, any warranties or conditions
149
- of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
150
- PARTICULAR PURPOSE. You are solely responsible for determining the
151
- appropriateness of using or redistributing the Work and assume any
152
- risks associated with Your exercise of permissions under this License.
153
-
154
- 8. Limitation of Liability. In no event and under no legal theory,
155
- whether in tort (including negligence), contract, or otherwise,
156
- unless required by applicable law (such as deliberate and grossly
157
- negligent acts) or agreed to in writing, shall any Contributor be
158
- liable to You for damages, including any direct, indirect, special,
159
- incidental, or consequential damages of any character arising as a
160
- result of this License or out of the use or inability to use the
161
- Work (including but not limited to damages for loss of goodwill,
162
- work stoppage, computer failure or malfunction, or any and all
163
- other commercial damages or losses), even if such Contributor
164
- has been advised of the possibility of such damages.
165
-
166
- 9. Accepting Warranty or Additional Liability. While redistributing
167
- the Work or Derivative Works thereof, You may choose to offer,
168
- and charge a fee for, acceptance of support, warranty, indemnity,
169
- or other liability obligations and/or rights consistent with this
170
- License. However, in accepting such obligations, You may act only
171
- on Your own behalf and on Your sole responsibility, not on behalf
172
- of any other Contributor, and only if You agree to indemnify,
173
- defend, and hold each Contributor harmless for any liability
174
- incurred by, or claims asserted against, such Contributor by reason
175
- of your accepting any such warranty or additional liability.
176
-
177
- END OF TERMS AND CONDITIONS
178
-
179
- Copyright 2022 BitGo
180
-
181
- Licensed under the Apache License, Version 2.0 (the "License");
182
- you may not use this file except in compliance with the License.
183
- You may obtain a copy of the License at
184
-
185
- http://www.apache.org/licenses/LICENSE-2.0
186
-
187
- Unless required by applicable law or agreed to in writing, software
188
- distributed under the License is distributed on an "AS IS" BASIS,
189
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
190
- See the License for the specific language governing permissions and
191
- limitations under the License.