@bitgo-beta/sdk-coin-hbar 1.3.3-alpha.100 → 1.3.3-alpha.101

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,19 @@
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
+ # [1.10.0](https://github.com/BitGo/BitGoJS/compare/@bitgo/sdk-coin-hbar@1.5.0...@bitgo/sdk-coin-hbar@1.10.0) (2024-01-30)
7
+
8
+ ### Bug Fixes
9
+
10
+ - **root:** update @types/node ([cedc1a0](https://github.com/BitGo/BitGoJS/commit/cedc1a0035e79bb42fda57bf6ac29d606242f50b))
11
+ - **sdk-coin-hbar:** allow explain txn to take both feeParam as well as parsed json ([fcc8bc5](https://github.com/BitGo/BitGoJS/commit/fcc8bc571efb5c7ec218ef1d30b8eac4640a5d7e))
12
+ - **sdk-coin-hbar:** hbar transaction valid duration ([74d7c4d](https://github.com/BitGo/BitGoJS/commit/74d7c4dd71d21a089274b87172aeae126a5af49d))
13
+
14
+ ### Features
15
+
16
+ - **sdk-coin-hbar:** implement recover method for native hbar ([45c4b7a](https://github.com/BitGo/BitGoJS/commit/45c4b7a7591176cb665efbdbb4279d40f3a869dd))
17
+ - **statics:** update thbar usdc token address ([f83d2aa](https://github.com/BitGo/BitGoJS/commit/f83d2aab9e3bc12cebe73b4bb11f284aab00b2ee))
18
+
6
19
  # [1.9.0](https://github.com/BitGo/BitGoJS/compare/@bitgo/sdk-coin-hbar@1.5.0...@bitgo/sdk-coin-hbar@1.9.0) (2024-01-26)
7
20
 
8
21
  ### Bug Fixes
@@ -96,13 +96,15 @@ export declare class Hbar extends BaseCoin {
96
96
  * @param address
97
97
  */
98
98
  isValidAddress(address: string): boolean;
99
- /**
100
- * Generate Hedera Hashgraph key pair
101
- *
102
- * @param seed
103
- * @returns {Object} object with generated pub, prv
104
- */
99
+ /** inheritdoc */
100
+ deriveKeyWithSeed(): {
101
+ derivationPath: string;
102
+ key: string;
103
+ };
104
+ /** inheritdoc */
105
105
  generateKeyPair(seed?: Buffer): KeyPair;
106
+ /** inheritdoc */
107
+ generateKeyPairAsync(seed?: Buffer): Promise<KeyPair>;
106
108
  parseTransaction(params: ParseTransactionOptions): Promise<ParsedTransaction>;
107
109
  /**
108
110
  * Check if address is valid, then make sure it matches the base address.
@@ -1 +1 @@
1
- {"version":3,"file":"hbar.d.ts","sourceRoot":"","sources":["../../src/hbar.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"hbar.d.ts","sourceRoot":"","sources":["../../src/hbar.ts"],"names":[],"mappings":"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"}
package/dist/src/hbar.js CHANGED
@@ -75,12 +75,11 @@ class Hbar extends sdk_core_1.BaseCoin {
75
75
  return false;
76
76
  }
77
77
  }
78
- /**
79
- * Generate Hedera Hashgraph key pair
80
- *
81
- * @param seed
82
- * @returns {Object} object with generated pub, prv
83
- */
78
+ /** inheritdoc */
79
+ deriveKeyWithSeed() {
80
+ throw new sdk_core_1.NotSupported('method deriveKeyWithSeed not supported for eddsa curve');
81
+ }
82
+ /** inheritdoc */
84
83
  generateKeyPair(seed) {
85
84
  const keyPair = seed ? new lib_1.KeyPair({ seed }) : new lib_1.KeyPair();
86
85
  const keys = keyPair.getKeys();
@@ -92,6 +91,18 @@ class Hbar extends sdk_core_1.BaseCoin {
92
91
  prv: keys.prv,
93
92
  };
94
93
  }
94
+ /** inheritdoc */
95
+ async generateKeyPairAsync(seed) {
96
+ const keyPair = seed ? new lib_1.KeyPair({ seed }) : new lib_1.KeyPair();
97
+ const keys = keyPair.getKeys(true);
98
+ if (!keys.prv) {
99
+ throw new Error('Keypair generation failed to generate a prv');
100
+ }
101
+ return {
102
+ pub: keys.pub,
103
+ prv: keys.prv,
104
+ };
105
+ }
95
106
  async parseTransaction(params) {
96
107
  return {};
97
108
  }
@@ -430,4 +441,4 @@ class Hbar extends sdk_core_1.BaseCoin {
430
441
  }
431
442
  }
432
443
  exports.Hbar = Hbar;
433
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGJhci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9oYmFyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTs7R0FFRztBQUNILGlEQUFxRjtBQUNyRixtREFrQjhCO0FBQzlCLCtDQUF5QztBQUN6QyxxREFBdUM7QUFDdkMsbURBQWdEO0FBQ2hELCtCQUF1RjtBQUN2RixtREFBcUM7QUFDckMsMENBQTRCO0FBQzVCLHdDQU13QjtBQUN4QiwyQ0FBa0Q7QUF1RmxELE1BQWEsSUFBSyxTQUFRLG1CQUFRO0lBR2hDLFlBQVksS0FBZ0IsRUFBRSxXQUF1QztRQUNuRSxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFYixJQUFJLENBQUMsV0FBVyxFQUFFO1lBQ2hCLE1BQU0sSUFBSSxLQUFLLENBQUMsb0RBQW9ELENBQUMsQ0FBQztTQUN2RTtRQUVELElBQUksQ0FBQyxZQUFZLEdBQUcsV0FBVyxDQUFDO0lBQ2xDLENBQUM7SUFFRCxRQUFRO1FBQ04sT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQztJQUNoQyxDQUFDO0lBRUQsU0FBUztRQUNQLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUM7SUFDbEMsQ0FBQztJQUVELFdBQVc7UUFDVCxPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDO0lBQ3BDLENBQUM7SUFFRCxhQUFhO1FBQ1gsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQ3ZELENBQUM7SUFFRCxNQUFNLENBQUMsY0FBYyxDQUFDLEtBQWdCLEVBQUUsV0FBdUM7UUFDN0UsT0FBTyxJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUUsV0FBVyxDQUFDLENBQUM7SUFDdEMsQ0FBQztJQUVEOzs7T0FHRztJQUNILHdCQUF3QjtRQUN0QixPQUFPLEtBQUssQ0FBQztJ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SUFFRCxLQUFLLENBQUMsb0JBQW9CLENBQUMsRUFDekIsMkJBQTJCLEVBQzNCLFNBQVMsR0FDbUI7UUFDNUIsSUFBSTtZQUNGLE1BQU0sTUFBTSxHQUFHLGlCQUFlLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsMkJBQTJCLENBQUMsQ0FBQyxDQUFDO1lBRTFGLElBQUksU0FBUyxFQUFFO2dCQUNiLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxTQUFTLENBQUMsQ0FBQztnQkFDbkMsT0FBTyxDQUFDLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxTQUFTLENBQUMsRUFBRTtvQkFDM0MsTUFBTSxLQUFLLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO2lCQUN6QjthQUNGO1lBRUQsT0FBTyxJQUFJLENBQUMsMEJBQTBCLENBQUMsTUFBTSxDQUFDLENBQUM7U0FDaEQ7UUFBQyxPQUFPLENBQUMsRUFBRTtZQUNWLE1BQU0sSUFBSSxLQUFLLENBQUMsMENBQTBDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1NBQ3pFO0lBQ0gsQ0FBQztJQUVELEtBQUssQ0FBQywwQkFBMEIsQ0FBQyxNQUF1QjtRQUN0RCxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDcEMsTUFBTSxtQkFBbUIsR0FBRyxNQUFNLE1BQU0sQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDekQsTUFBTSxrQkFBa0IsR0FBRyxNQUFNLG1CQUFtQixDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUV4RSxPQUFPLEVBQUUsSUFBSSxFQUFFLG1CQUFtQixDQUFDLGFBQWEsQ0FBQyxRQUFRLEVBQUUsRUFBRSxNQUFNLEVBQUUsa0JBQWtCLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUM7SUFDOUcsQ0FBQztDQUNGO0FBdmRELG9CQXVkQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQHByZXR0aWVyXG4gKi9cbmltcG9ydCB7IENvaW5GYW1pbHksIEJhc2VDb2luIGFzIFN0YXRpY3NCYXNlQ29pbiwgY29pbnMgfSBmcm9tICdAYml0Z28tYmV0YS9zdGF0aWNzJztcbmltcG9ydCB7XG4gIEJhc2VDb2luLFxuICBCaXRHb0Jhc2UsXG4gIEtleVBhaXIsXG4gIFBhcnNlZFRyYW5zYWN0aW9uLFxuICBQYXJzZVRyYW5zYWN0aW9uT3B0aW9ucyxcbiAgU2lnbmVkVHJhbnNhY3Rpb24sXG4gIFNpZ25UcmFuc2FjdGlvbk9wdGlvbnMsXG4gIFZlcmlmeUFkZHJlc3NPcHRpb25zIGFzIEJhc2VWZXJpZnlBZGRyZXNzT3B0aW9ucyxcbiAgVmVyaWZ5VHJhbnNhY3Rpb25PcHRpb25zLFxuICBUcmFuc2FjdGlvbkZlZSxcbiAgVHJhbnNhY3Rpb25SZWNpcGllbnQgYXMgUmVjaXBpZW50LFxuICBUcmFuc2FjdGlvblByZWJ1aWxkIGFzIEJhc2VUcmFuc2FjdGlvblByZWJ1aWxkLFxuICBUcmFuc2FjdGlvbkV4cGxhbmF0aW9uLFxuICBNZW1vLFxuICBUb2tlbkVuYWJsZW1lbnRDb25maWcsXG4gIEJhc2VCcm9hZGNhc3RUcmFuc2FjdGlvbk9wdGlvbnMsXG4gIEJhc2VCcm9hZGNhc3RUcmFuc2FjdGlvblJlc3VsdCxcbn0gZnJvbSAnQGJpdGdvLWJldGEvc2RrLWNvcmUnO1xuaW1wb3J0IHsgQmlnTnVtYmVyIH0gZnJvbSAnYmlnbnVtYmVyLmpzJztcbmltcG9ydCAqIGFzIHN0ZWxsYXIgZnJvbSAnc3RlbGxhci1zZGsnO1xuaW1wb3J0IHsgU2VlZFZhbGlkYXRvciB9IGZyb20gJy4vc2VlZFZhbGlkYXRvcic7XG5pbXBvcnQgeyBLZXlQYWlyIGFzIEhiYXJLZXlQYWlyLCBUcmFuc2FjdGlvbkJ1aWxkZXJGYWN0b3J5LCBUcmFuc2FjdGlvbiB9IGZyb20gJy4vbGliJztcbmltcG9ydCAqIGFzIFV0aWxzIGZyb20gJy4vbGliL3V0aWxzJztcbmltcG9ydCAqIGFzIF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7XG4gIENsaWVudCxcbiAgVHJhbnNhY3Rpb24gYXMgSGJhclRyYW5zYWN0aW9uLFxuICBBY2NvdW50QmFsYW5jZVF1ZXJ5LFxuICBBY2NvdW50QmFsYW5jZUpzb24sXG4gIEhiYXIgYXMgSGJhclVuaXQsXG59IGZyb20gJ0BoYXNoZ3JhcGgvc2RrJztcbmltcG9ydCB7IFBVQkxJQ19LRVlfUFJFRklYIH0gZnJvbSAnLi9saWIva2V5UGFpcic7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSGJhclNpZ25UcmFuc2FjdGlvbk9wdGlvbnMgZXh0ZW5kcyBTaWduVHJhbnNhY3Rpb25PcHRpb25zIHtcbiAgdHhQcmVidWlsZDogVHJhbnNhY3Rpb25QcmVidWlsZDtcbiAgcHJ2OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVHhJbmZvIHtcbiAgcmVjaXBpZW50czogUmVjaXBpZW50W107XG4gIGZyb206IHN0cmluZztcbiAgdHhpZDogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFRyYW5zYWN0aW9uUHJlYnVpbGQgZXh0ZW5kcyBCYXNlVHJhbnNhY3Rpb25QcmVidWlsZCB7XG4gIHR4SGV4OiBzdHJpbmc7XG4gIHR4SW5mbzogVHhJbmZvO1xuICBmZWVJbmZvOiBUcmFuc2FjdGlvbkZlZTtcbiAgc291cmNlOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRXhwbGFpblRyYW5zYWN0aW9uT3B0aW9ucyB7XG4gIHR4SGV4Pzogc3RyaW5nO1xuICBoYWxmU2lnbmVkPzoge1xuICAgIHR4SGV4OiBzdHJpbmc7XG4gIH07XG4gIGZlZUluZm8/OiBUcmFuc2FjdGlvbkZlZTtcbiAgLy8gVE9ETyhCRy0yNDgwOSk6IGdldCB0aGUgbWVtbyBmcm9tIHRoZSB0b0pzb25cbiAgbWVtbz86IHtcbiAgICB0eXBlOiBzdHJpbmc7XG4gICAgdmFsdWU6IHN0cmluZztcbiAgfTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBIYmFyVmVyaWZ5VHJhbnNhY3Rpb25PcHRpb25zIGV4dGVuZHMgVmVyaWZ5VHJhbnNhY3Rpb25PcHRpb25zIHtcbiAgdHhQcmVidWlsZDogVHJhbnNhY3Rpb25QcmVidWlsZDtcbiAgbWVtbz86IE1lbW87XG59XG5cbmludGVyZmFjZSBWZXJpZnlBZGRyZXNzT3B0aW9ucyBleHRlbmRzIEJhc2VWZXJpZnlBZGRyZXNzT3B0aW9ucyB7XG4gIGJhc2VBZGRyZXNzOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVjb3ZlcnlPcHRpb25zIHtcbiAgYmFja3VwS2V5OiBzdHJpbmc7XG4gIHVzZXJLZXk6IHN0cmluZztcbiAgcm9vdEFkZHJlc3M6IHN0cmluZztcbiAgcmVjb3ZlcnlEZXN0aW5hdGlvbjogc3RyaW5nO1xuICBiaXRnb0tleT86IHN0cmluZztcbiAgd2FsbGV0UGFzc3BocmFzZT86IHN0cmluZztcbiAgbWF4RmVlPzogc3RyaW5nO1xuICBub2RlSWQ/OiBzdHJpbmc7XG4gIHN0YXJ0VGltZT86IHN0cmluZztcbn1cblxuaW50ZXJmYWNlIFJlY292ZXJ5SW5mbyB7XG4gIGlkOiBzdHJpbmc7XG4gIHR4OiBzdHJpbmc7XG4gIGNvaW46IHN0cmluZztcbiAgc3RhcnRUaW1lOiBzdHJpbmc7XG4gIG5vZGVJZDogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE9mZmxpbmVWYXVsdFR4SW5mbyB7XG4gIHR4SGV4OiBzdHJpbmc7XG4gIHVzZXJLZXk6IHN0cmluZztcbiAgYmFja3VwS2V5OiBzdHJpbmc7XG4gIGJpdGdvS2V5Pzogc3RyaW5nO1xuICBhZGRyZXNzOiBzdHJpbmc7XG4gIGNvaW46IHN0cmluZztcbiAgbWF4RmVlOiBzdHJpbmc7XG4gIHJlY2lwaWVudHM6IFJlY2lwaWVudFtdO1xuICBhbW91bnQ6IHN0cmluZztcbiAgc3RhcnRUaW1lOiBzdHJpbmc7XG4gIHZhbGlkRHVyYXRpb246IHN0cmluZztcbiAgbm9kZUlkOiBzdHJpbmc7XG4gIG1lbW86IHN0cmluZztcbiAganNvbj86IGFueTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBCcm9hZGNhc3RUcmFuc2FjdGlvbk9wdGlvbnMgZXh0ZW5kcyBCYXNlQnJvYWRjYXN0VHJhbnNhY3Rpb25PcHRpb25zIHtcbiAgc3RhcnRUaW1lPzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEJyb2FkY2FzdFRyYW5zYWN0aW9uUmVzdWx0IGV4dGVuZHMgQmFzZUJyb2FkY2FzdFRyYW5zYWN0aW9uUmVzdWx0IHtcbiAgc3RhdHVzPzogc3RyaW5nO1xufVxuXG5leHBvcnQgY2xhc3MgSGJhciBleHRlbmRzIEJhc2VDb2luIHtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IF9zdGF0aWNzQ29pbjogUmVhZG9ubHk8U3RhdGljc0Jhc2VDb2luPjtcblxuICBjb25zdHJ1Y3RvcihiaXRnbzogQml0R29CYXNlLCBzdGF0aWNzQ29pbj86IFJlYWRvbmx5PFN0YXRpY3NCYXNlQ29pbj4pIHtcbiAgICBzdXBlcihiaXRnbyk7XG5cbiAgICBpZiAoIXN0YXRpY3NDb2luKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ21pc3NpbmcgcmVxdWlyZWQgY29uc3RydWN0b3IgcGFyYW1ldGVyIHN0YXRpY3NDb2luJyk7XG4gICAgfVxuXG4gICAgdGhpcy5fc3RhdGljc0NvaW4gPSBzdGF0aWNzQ29pbjtcbiAgfVxuXG4gIGdldENoYWluKCkge1xuICAgIHJldHVybiB0aGlzLl9zdGF0aWNzQ29pbi5uYW1lO1xuICB9XG5cbiAgZ2V0RmFtaWx5KCk6IENvaW5GYW1pbHkge1xuICAgIHJldHVybiB0aGlzLl9zdGF0aWNzQ29pbi5mYW1pbHk7XG4gIH1cblxuICBnZXRGdWxsTmFtZSgpIHtcbiAgICByZXR1cm4gdGhpcy5fc3RhdGljc0NvaW4uZnVsbE5hbWU7XG4gIH1cblxuICBnZXRCYXNlRmFjdG9yKCkge1xuICAgIHJldHVybiBNYXRoLnBvdygxMCwgdGhpcy5fc3RhdGljc0NvaW4uZGVjaW1hbFBsYWNlcyk7XG4gIH1cblxuICBzdGF0aWMgY3JlYXRlSW5zdGFuY2UoYml0Z286IEJpdEdvQmFzZSwgc3RhdGljc0NvaW4/OiBSZWFkb25seTxTdGF0aWNzQmFzZUNvaW4+KTogQmFzZUNvaW4ge1xuICAgIHJldHVybiBuZXcgSGJhcihiaXRnbywgc3RhdGljc0NvaW4pO1xuICB9XG5cbiAgLyoqXG4gICAqIEZsYWcgZm9yIHNlbmRpbmcgdmFsdWUgb2YgMFxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiBva2F5IHRvIHNlbmQgMCB2YWx1ZSwgZmFsc2Ugb3RoZXJ3aXNlXG4gICAqL1xuICB2YWx1ZWxlc3NUcmFuc2ZlckFsbG93ZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyBpZiB0aGlzIGlzIGEgdmFsaWQgYmFzZTU4IG9yIGhleCBhZGRyZXNzXG4gICAqIEBwYXJhbSBhZGRyZXNzXG4gICAqL1xuICBpc1ZhbGlkQWRkcmVzcyhhZGRyZXNzOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIFV0aWxzLmlzVmFsaWRBZGRyZXNzV2l0aFBheW1lbnRJZChhZGRyZXNzKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEdlbmVyYXRlIEhlZGVyYSBIYXNoZ3JhcGgga2V5IHBhaXJcbiAgICpcbiAgICogQHBhcmFtIHNlZWRcbiAgICogQHJldHVybnMge09iamVjdH0gb2JqZWN0IHdpdGggZ2VuZXJhdGVkIHB1YiwgcHJ2XG4gICAqL1xuICBnZW5lcmF0ZUtleVBhaXIoc2VlZD86IEJ1ZmZlcik6IEtleVBhaXIge1xuICAgIGNvbnN0IGtleVBhaXIgPSBzZWVkID8gbmV3IEhiYXJLZXlQYWlyKHsgc2VlZCB9KSA6IG5ldyBIYmFyS2V5UGFpcigpO1xuICAgIGNvbnN0IGtleXMgPSBrZXlQYWlyLmdldEtleXMoKTtcblxuICAgIGlmICgha2V5cy5wcnYpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignS2V5cGFpciBnZW5lcmF0aW9uIGZhaWxlZCB0byBnZW5lcmF0ZSBhIHBydicpO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBwdWI6IGtleXMucHViLFxuICAgICAgcHJ2OiBrZXlzLnBydixcbiAgICB9O1xuICB9XG5cbiAgYXN5bmMgcGFyc2VUcmFuc2FjdGlvbihwYXJhbXM6IFBhcnNlVHJhbnNhY3Rpb25PcHRpb25zKTogUHJvbWlzZTxQYXJzZWRUcmFuc2FjdGlvbj4ge1xuICAgIHJldHVybiB7fTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiBhZGRyZXNzIGlzIHZhbGlkLCB0aGVuIG1ha2Ugc3VyZSBpdCBtYXRjaGVzIHRoZSBiYXNlIGFkZHJlc3MuXG4gICAqXG4gICAqIEBwYXJhbSB7VmVyaWZ5QWRkcmVzc09wdGlvbnN9IHBhcmFtc1xuICAgKiBAcGFyYW0ge1N0cmluZ30gcGFyYW1zLmFkZHJlc3MgLSB0aGUgYWRkcmVzcyB0byB2ZXJpZnlcbiAgICogQHBhcmFtIHtTdHJpbmd9IHBhcmFtcy5iYXNlQWRkcmVzcyAtIHRoZSBiYXNlIGFkZHJlc3MgZnJvbSB0aGUgd2FsbGV0XG4gICAqL1xuICBhc3luYyBpc1dhbGxldEFkZHJlc3MocGFyYW1zOiBWZXJpZnlBZGRyZXNzT3B0aW9ucyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IHsgYWRkcmVzcywgYmFzZUFkZHJlc3MgfSA9IHBhcmFtcztcbiAgICByZXR1cm4gVXRpbHMuaXNTYW1lQmFzZUFkZHJlc3MoYWRkcmVzcywgYmFzZUFkZHJlc3MpO1xuICB9XG5cbiAgYXN5bmMgdmVyaWZ5VHJhbnNhY3Rpb24ocGFyYW1zOiBIYmFyVmVyaWZ5VHJhbnNhY3Rpb25PcHRpb25zKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgLy8gYXNzZXQgbmFtZSB0byB0cmFuc2ZlciBhbW91bnQgbWFwXG4gICAgY29uc3QgY29pbkNvbmZpZyA9IGNvaW5zLmdldCh0aGlzLmdldENoYWluKCkpO1xuICAgIGNvbnN0IHsgdHhQYXJhbXM6IHR4UGFyYW1zLCB0eFByZWJ1aWxkOiB0eFByZWJ1aWxkLCBtZW1vOiBtZW1vIH0gPSBwYXJhbXM7XG4gICAgY29uc3QgdHJhbnNhY3Rpb24gPSBuZXcgVHJhbnNhY3Rpb24oY29pbkNvbmZpZyk7XG4gICAgaWYgKCF0eFByZWJ1aWxkLnR4SGV4KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ21pc3NpbmcgcmVxdWlyZWQgdHggcHJlYnVpbGQgcHJvcGVydHkgdHhIZXgnKTtcbiAgICB9XG5cbiAgICB0cmFuc2FjdGlvbi5mcm9tUmF3VHJhbnNhY3Rpb24odHhQcmVidWlsZC50eEhleCk7XG4gICAgY29uc3QgZXhwbGFpblR4UGFyYW1zOiBFeHBsYWluVHJhbnNhY3Rpb25PcHRpb25zID0ge1xuICAgICAgdHhIZXg6IHR4UHJlYnVpbGQudHhIZXgsXG4gICAgICBmZWVJbmZvOiB0eFByZWJ1aWxkLmZlZUluZm8sXG4gICAgICBtZW1vOiBtZW1vLFxuICAgIH07XG4gICAgY29uc3QgZXhwbGFpbmVkVHggPSBhd2FpdCB0aGlzLmV4cGxhaW5UcmFuc2FjdGlvbihleHBsYWluVHhQYXJhbXMpO1xuXG4gICAgaWYgKCF0eFBhcmFtcy5yZWNpcGllbnRzKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ21pc3NpbmcgcmVxdWlyZWQgdHggcGFyYW1zIHByb3BlcnR5IHJlY2lwaWVudHMnKTtcbiAgICB9XG5cbiAgICAvLyBmb3IgZW5hYmxldG9rZW4sIHJlY2lwaWVudCBvdXRwdXQgYW1vdW50IGlzIDBcbiAgICBjb25zdCByZWNpcGllbnRzID0gdHhQYXJhbXMucmVjaXBpZW50cy5tYXAoKHJlY2lwaWVudCkgPT4gKHtcbiAgICAgIC4uLnJlY2lwaWVudCxcbiAgICAgIGFtb3VudDogdHhQYXJhbXMudHlwZSA9PT0gJ2VuYWJsZXRva2VuJyA/ICcwJyA6IHJlY2lwaWVudC5hbW91bnQsXG4gICAgfSkpO1xuICAgIGlmIChjb2luQ29uZmlnLmlzVG9rZW4pIHtcbiAgICAgIHJlY2lwaWVudHMuZm9yRWFjaCgocmVjaXBpZW50KSA9PiB7XG4gICAgICAgIGlmIChyZWNpcGllbnQudG9rZW5OYW1lICE9PSB1bmRlZmluZWQgJiYgcmVjaXBpZW50LnRva2VuTmFtZSAhPT0gY29pbkNvbmZpZy5uYW1lKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbmNvcnJlY3QgdG9rZW4gbmFtZSBzcGVjaWZpZWQgaW4gcmVjaXBpZW50cycpO1xuICAgICAgICB9XG4gICAgICAgIHJlY2lwaWVudC50b2tlbk5hbWUgPSBjb2luQ29uZmlnLm5hbWU7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyB2ZXJpZnkgcmVjaXBpZW50cyBmcm9tIHBhcmFtcyBhbmQgZXhwbGFpbmVkVHhcbiAgICBjb25zdCBmaWx0ZXJlZFJlY2lwaWVudHMgPSByZWNpcGllbnRzPy5tYXAoKHJlY2lwaWVudCkgPT4gXy5waWNrKHJlY2lwaWVudCwgWydhZGRyZXNzJywgJ2Ftb3VudCcsICd0b2tlbk5hbWUnXSkpO1xuICAgIGNvbnN0IGZpbHRlcmVkT3V0cHV0cyA9IGV4cGxhaW5lZFR4Lm91dHB1dHMubWFwKChvdXRwdXQpID0+IF8ucGljayhvdXRwdXQsIFsnYWRkcmVzcycsICdhbW91bnQnLCAndG9rZW5OYW1lJ10pKTtcblxuICAgIGlmICghXy5pc0VxdWFsKGZpbHRlcmVkT3V0cHV0cywgZmlsdGVyZWRSZWNpcGllbnRzKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdUeCBvdXRwdXRzIGRvZXMgbm90IG1hdGNoIHdpdGggZXhwZWN0ZWQgdHhQYXJhbXMgcmVjaXBpZW50cycpO1xuICAgIH1cblxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIEFzc2VtYmxlIGtleWNoYWluIGFuZCBoYWxmLXNpZ24gcHJlYnVpbHQgdHJhbnNhY3Rpb25cbiAgICpcbiAgICogQHBhcmFtIHBhcmFtc1xuICAgKiBAcGFyYW0gcGFyYW1zLnR4UHJlYnVpbGQge09iamVjdH0gcHJlYnVpbGQgb2JqZWN0IHJldHVybmVkIGJ5IHBsYXRmb3JtXG4gICAqIEBwYXJhbSBwYXJhbXMucHJ2IHtTdHJpbmd9IHVzZXIgcHJ2XG4gICAqIEBwYXJhbSBwYXJhbXMud2FsbGV0LmFkZHJlc3NWZXJzaW9uIHtTdHJpbmd9IHRoaXMgaXMgdGhlIHZlcnNpb24gb2YgdGhlIEFsZ29yYW5kIG11bHRpc2lnIGFkZHJlc3MgZ2VuZXJhdGlvbiBmb3JtYXRcbiAgICogQHJldHVybnMgUHJvbWlzZTxTaWduZWRUcmFuc2FjdGlvbj5cbiAgICovXG4gIGFzeW5jIHNpZ25UcmFuc2FjdGlvbihwYXJhbXM6IEhiYXJTaWduVHJhbnNhY3Rpb25PcHRpb25zKTogUHJvbWlzZTxTaWduZWRUcmFuc2FjdGlvbj4ge1xuICAgIGNvbnN0IGZhY3RvcnkgPSB0aGlzLmdldEJ1aWxkZXJGYWN0b3J5KCk7XG4gICAgY29uc3QgdHhCdWlsZGVyID0gZmFjdG9yeS5mcm9tKHBhcmFtcy50eFByZWJ1aWxkLnR4SGV4KTtcbiAgICB0eEJ1aWxkZXIuc2lnbih7IGtleTogcGFyYW1zLnBydiB9KTtcblxuICAgIGNvbnN0IHRyYW5zYWN0aW9uID0gYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCk7XG5cbiAgICBpZiAoIXRyYW5zYWN0aW9uKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgbWVzc2FnZWQgcGFzc2VkIHRvIHNpZ25NZXNzYWdlJyk7XG4gICAgfVxuXG4gICAgY29uc3QgcmVzcG9uc2UgPSB7XG4gICAgICB0eEhleDogdHJhbnNhY3Rpb24udG9Ccm9hZGNhc3RGb3JtYXQoKSxcbiAgICB9O1xuICAgIHJldHVybiB0cmFuc2FjdGlvbi5zaWduYXR1cmUubGVuZ3RoID49IDIgPyByZXNwb25zZSA6IHsgaGFsZlNpZ25lZDogcmVzcG9uc2UgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTaWduIG1lc3NhZ2Ugd2l0aCBwcml2YXRlIGtleVxuICAgKlxuICAgKiBAcGFyYW0ga2V5XG4gICAqIEBwYXJhbSBtZXNzYWdlXG4gICAqIEByZXR1cm4ge0J1ZmZlcn0gQSBzaWduYXR1cmUgb3ZlciB0aGUgZ2l2ZW4gbWVzc2FnZSB1c2luZyB0aGUgZ2l2ZW4ga2V5XG4gICAqL1xuICBhc3luYyBzaWduTWVzc2FnZShrZXk6IEtleVBhaXIsIG1lc3NhZ2U6IHN0cmluZyB8IEJ1ZmZlcik6IFByb21pc2U8QnVmZmVyPiB7XG4gICAgY29uc3QgbXNnID0gQnVmZmVyLmlzQnVmZmVyKG1lc3NhZ2UpID8gbWVzc2FnZS50b1N0cmluZygndXRmOCcpIDogbWVzc2FnZTtcbiAgICAvLyByZWNvbnN0aXR1dGUga2V5cyBhbmQgc2lnblxuICAgIHJldHVybiBCdWZmZXIuZnJvbShuZXcgSGJhcktleVBhaXIoeyBwcnY6IGtleS5wcnYgfSkuc2lnbk1lc3NhZ2UobXNnKSk7XG4gIH1cblxuICAvKipcbiAgICogQnVpbGRzIGEgZnVuZHMgcmVjb3ZlcnkgdHJhbnNhY3Rpb24gd2l0aG91dCBCaXRHby5cbiAgICogV2UgbmVlZCB0byBkbyB0aHJlZSBxdWVyaWVzIGR1cmluZyB0aGlzOlxuICAgKiAxKSBOb2RlIHF1ZXJ5IC0gaG93IG11Y2ggbW9uZXkgaXMgaW4gdGhlIGFjY291bnRcbiAgICogMikgQnVpbGQgdHJhbnNhY3Rpb24gLSBidWlsZCBvdXIgdHJhbnNhY3Rpb24gZm9yIHRoZSBhbW91bnRcbiAgICogMykgU2VuZCBzaWduZWQgYnVpbGQgLSBzZW5kIG91ciBzaWduZWQgYnVpbGQgdG8gYSBwdWJsaWMgbm9kZVxuICAgKiBAcGFyYW0gcGFyYW1zXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgcmVjb3ZlcihwYXJhbXM6IFJlY292ZXJ5T3B0aW9ucyk6IFByb21pc2U8UmVjb3ZlcnlJbmZvIHwgT2ZmbGluZVZhdWx0VHhJbmZvPiB7XG4gICAgY29uc3QgaXNVbnNpZ25lZFN3ZWVwID1cbiAgICAgIHBhcmFtcy5iYWNrdXBLZXkuc3RhcnRzV2l0aChQVUJMSUNfS0VZX1BSRUZJWCkgJiYgcGFyYW1zLnVzZXJLZXkuc3RhcnRzV2l0aChQVUJMSUNfS0VZX1BSRUZJWCk7XG5cbiAgICAvLyBWYWxpZGF0ZSB0aGUgcm9vdCBhZGRyZXNzXG4gICAgaWYgKCF0aGlzLmlzVmFsaWRBZGRyZXNzKHBhcmFtcy5yb290QWRkcmVzcykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignaW52YWxpZCByb290QWRkcmVzcywgZ290OiAnICsgcGFyYW1zLnJvb3RBZGRyZXNzKTtcbiAgICB9XG5cbiAgICAvLyBWYWxpZGF0ZSB0aGUgZGVzdGluYXRpb24gYWRkcmVzc1xuICAgIGlmICghdGhpcy5pc1ZhbGlkQWRkcmVzcyhwYXJhbXMucmVjb3ZlcnlEZXN0aW5hdGlvbikpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignaW52YWxpZCByZWNvdmVyeURlc3RpbmF0aW9uLCBnb3Q6ICcgKyBwYXJhbXMucmVjb3ZlcnlEZXN0aW5hdGlvbik7XG4gICAgfVxuXG4gICAgLy8gVmFsaWRhdGUgbm9kZUlkXG4gICAgaWYgKHBhcmFtcy5ub2RlSWQgJiYgIVV0aWxzLmlzVmFsaWRBZGRyZXNzKHBhcmFtcy5ub2RlSWQpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgbm9kZUlkLCBnb3Q6ICcgKyBwYXJhbXMubm9kZUlkKTtcbiAgICB9XG5cbiAgICAvLyB2YWxpZGF0ZSBmZWVcbiAgICBpZiAocGFyYW1zLm1heEZlZSAmJiAhVXRpbHMuaXNWYWxpZEFtb3VudChwYXJhbXMubWF4RmVlKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkIG1heEZlZSwgZ290OiAnICsgcGFyYW1zLm1heEZlZSk7XG4gICAgfVxuXG4gICAgLy8gdmFsaWRhdGUgc3RhcnRUaW1lXG5cbiAgICBpZiAocGFyYW1zLnN0YXJ0VGltZSkge1xuICAgICAgVXRpbHMudmFsaWRhdGVTdGFydFRpbWUocGFyYW1zLnN0YXJ0VGltZSk7XG4gICAgfVxuXG4gICAgaWYgKGlzVW5zaWduZWRTd2VlcCAmJiAhcGFyYW1zLnN0YXJ0VGltZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdzdGFydCB0aW1lIGlzIHJlcXVpcmVkIGZvciB1bnNpZ25lZCBzd2VlcCcpO1xuICAgIH1cblxuICAgIGlmICghaXNVbnNpZ25lZFN3ZWVwICYmICFwYXJhbXMud2FsbGV0UGFzc3BocmFzZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCd3YWxsZXRQYXNzcGhyYXNlIGlzIHJlcXVpcmVkIGZvciBub24tYml0Z28gcmVjb3ZlcnknKTtcbiAgICB9XG5cbiAgICBsZXQgdXNlclBydjogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIGxldCBiYWNrVXA6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICBpZiAoIWlzVW5zaWduZWRTd2VlcCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgdXNlclBydiA9IHRoaXMuYml0Z28uZGVjcnlwdCh7IGlucHV0OiBwYXJhbXMudXNlcktleSwgcGFzc3dvcmQ6IHBhcmFtcy53YWxsZXRQYXNzcGhyYXNlIH0pO1xuICAgICAgICBiYWNrVXAgPSB0aGlzLmJpdGdvLmRlY3J5cHQoeyBpbnB1dDogcGFyYW1zLmJhY2t1cEtleSwgcGFzc3dvcmQ6IHBhcmFtcy53YWxsZXRQYXNzcGhyYXNlIH0pO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgJ3VuYWJsZSB0byBkZWNyeXB0IHVzZXJLZXkgb3IgYmFja3VwS2V5IHdpdGggdGhlIHdhbGxldFBhc3NwaHJhc2UgcHJvdmlkZWQsIGdvdCBlcnJvcjogJyArIGUubWVzc2FnZVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIHZhbGlkYXRlIHVzZXJLZXkgZm9yIHVuc2lnbmVkIHN3ZWVwXG4gICAgaWYgKGlzVW5zaWduZWRTd2VlcCAmJiAhVXRpbHMuaXNWYWxpZFB1YmxpY0tleShwYXJhbXMudXNlcktleSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignaW52YWxpZCB1c2VyS2V5LCBnb3Q6ICcgKyBwYXJhbXMudXNlcktleSk7XG4gICAgfVxuXG4gICAgLy8gdmFsaWRhdGUgYmFja3VwS2V5IGZvciB1bnNpZ25lZCBzd2VlcFxuICAgIGlmIChpc1Vuc2lnbmVkU3dlZXAgJiYgIVV0aWxzLmlzVmFsaWRQdWJsaWNLZXkocGFyYW1zLmJhY2t1cEtleSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignaW52YWxpZCBiYWNrdXBLZXksIGdvdDogJyArIHBhcmFtcy5iYWNrdXBLZXkpO1xuICAgIH1cblxuICAgIGNvbnN0IHsgYWRkcmVzczogZGVzdGluYXRpb25BZGRyZXNzLCBtZW1vSWQgfSA9IFV0aWxzLmdldEFkZHJlc3NEZXRhaWxzKHBhcmFtcy5yZWNvdmVyeURlc3RpbmF0aW9uKTtcblxuICAgIGNvbnN0IGNsaWVudCA9IHRoaXMuZ2V0SGJhckNsaWVudCgpO1xuXG4gICAgY29uc3QgYmFsYW5jZSA9IGF3YWl0IHRoaXMuZ2V0QWNjb3VudEJhbGFuY2UocGFyYW1zLnJvb3RBZGRyZXNzLCBjbGllbnQpO1xuICAgIGNvbnN0IG5hdGl2ZUJhbGFuY2UgPSBIYmFyVW5pdC5mcm9tU3RyaW5nKGJhbGFuY2UuaGJhcnMpLnRvVGlueWJhcnMoKS50b1N0cmluZygpO1xuICAgIGNvbnN0IGZlZSA9IHBhcmFtcy5tYXhGZWUgPyBwYXJhbXMubWF4RmVlIDogJzEwMDAwMDAwJztcblxuICAgIGlmIChuZXcgQmlnTnVtYmVyKG5hdGl2ZUJhbGFuY2UpLmlzWmVybygpIHx8IG5ldyBCaWdOdW1iZXIobmF0aXZlQmFsYW5jZSkuaXNMZXNzVGhhbk9yRXF1YWxUbyhmZWUpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0luc3VmZmljaWVudCBiYWxhbmNlIHRvIHJlY292ZXIsIGdvdCBiYWxhbmNlOiAnICsgbmF0aXZlQmFsYW5jZSArICcgZmVlOiAnICsgZmVlKTtcbiAgICB9XG5cbiAgICBjb25zdCBub2RlSWQgPSBwYXJhbXMubm9kZUlkID8gcGFyYW1zLm5vZGVJZCA6ICcwLjAuMyc7XG5cbiAgICBjb25zdCBzcGVuZGFibGVBbW91bnQgPSBuZXcgQmlnTnVtYmVyKG5hdGl2ZUJhbGFuY2UpLm1pbnVzKGZlZSkudG9TdHJpbmcoKTtcblxuICAgIGNvbnN0IHR4QnVpbGRlciA9IHRoaXMuZ2V0QnVpbGRlckZhY3RvcnkoKS5nZXRUcmFuc2ZlckJ1aWxkZXIoKTtcbiAgICB0eEJ1aWxkZXIubm9kZSh7IG5vZGVJZCB9KTtcbiAgICB0eEJ1aWxkZXIuZmVlKHsgZmVlIH0pO1xuICAgIHR4QnVpbGRlci5zb3VyY2UoeyBhZGRyZXNzOiBwYXJhbXMucm9vdEFkZHJlc3MgfSk7XG4gICAgdHhCdWlsZGVyLnNlbmQoeyBhZGRyZXNzOiBkZXN0aW5hdGlvbkFkZHJlc3MsIGFtb3VudDogc3BlbmRhYmxlQW1vdW50IH0pO1xuICAgIHR4QnVpbGRlci52YWxpZER1cmF0aW9uKDE4MCk7XG5cbiAgICBpZiAobWVtb0lkKSB7XG4gICAgICB0eEJ1aWxkZXIubWVtbyhtZW1vSWQpO1xuICAgIH1cblxuICAgIGlmIChwYXJhbXMuc3RhcnRUaW1lKSB7XG4gICAgICB0eEJ1aWxkZXIuc3RhcnRUaW1lKFV0aWxzLm5vcm1hbGl6ZVN0YXJ0dGltZShwYXJhbXMuc3RhcnRUaW1lKSk7XG4gICAgfVxuICAgIGlmIChpc1Vuc2lnbmVkU3dlZXApIHtcbiAgICAgIGNvbnN0IHR4ID0gYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCk7XG4gICAgICBjb25zdCB0eEpzb24gPSB0eC50b0pzb24oKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHR4SGV4OiB0eC50b0Jyb2FkY2FzdEZvcm1hdCgpLFxuICAgICAgICBjb2luOiB0aGlzLmdldENoYWluKCksXG4gICAgICAgIGlkOiB0eEpzb24uaWQsXG4gICAgICAgIHN0YXJ0VGltZTogdHhKc29uLnN0YXJ0VGltZSxcbiAgICAgICAgdmFsaWREdXJhdGlvbjogdHhKc29uLnZhbGlkRHVyYXRpb24sXG4gICAgICAgIG5vZGVJZDogdHhKc29uLm5vZGUsXG4gICAgICAgIG1lbW86IHR4SnNvbi5tZW1vLFxuICAgICAgICB1c2VyS2V5OiBwYXJhbXMudXNlcktleSxcbiAgICAgICAgYmFja3VwS2V5OiBwYXJhbXMuYmFja3VwS2V5LFxuICAgICAgICBiaXRnb0tleTogcGFyYW1zLmJpdGdvS2V5LFxuICAgICAgICBtYXhGZWU6IGZlZSxcbiAgICAgICAgYWRkcmVzczogcGFyYW1zLnJvb3RBZGRyZXNzLFxuICAgICAgICByZWNpcGllbnRzOiB0eEpzb24uaW5zdHJ1Y3Rpb25zRGF0YS5wYXJhbXMucmVjaXBpZW50cyxcbiAgICAgICAgYW1vdW50OiB0eEpzb24uYW1vdW50LFxuICAgICAgICBqc29uOiB0eEpzb24sXG4gICAgICB9O1xuICAgIH1cblxuICAgIHR4QnVpbGRlci5zaWduKHsga2V5OiB1c2VyUHJ2IH0pO1xuICAgIHR4QnVpbGRlci5zaWduKHsga2V5OiBiYWNrVXAgfSk7XG5cbiAgICBjb25zdCB0eCA9IGF3YWl0IHR4QnVpbGRlci5idWlsZCgpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHR4OiB0eC50b0Jyb2FkY2FzdEZvcm1hdCgpLFxuICAgICAgaWQ6IHR4LnRvSnNvbigpLmlkLFxuICAgICAgY29pbjogdGhpcy5nZXRDaGFpbigpLFxuICAgICAgc3RhcnRUaW1lOiB0eC50b0pzb24oKS5zdGFydFRpbWUsXG4gICAgICBub2RlSWQ6IHR4LnRvSnNvbigpLm5vZGUsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFeHBsYWluIGEgSGVkZXJhIHRyYW5zYWN0aW9uIGZyb20gdHhIZXhcbiAgICogQHBhcmFtIHBhcmFtc1xuICAgKi9cbiAgYXN5bmMgZXhwbGFpblRyYW5zYWN0aW9uKHBhcmFtczogRXhwbGFpblRyYW5zYWN0aW9uT3B0aW9ucyk6IFByb21pc2U8VHJhbnNhY3Rpb25FeHBsYW5hdGlvbj4ge1xuICAgIGNvbnN0IHR4SGV4ID0gcGFyYW1zLnR4SGV4IHx8IChwYXJhbXMuaGFsZlNpZ25lZCAmJiBwYXJhbXMuaGFsZlNpZ25lZC50eEhleCk7XG4gICAgaWYgKCF0eEhleCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdtaXNzaW5nIGV4cGxhaW4gdHggcGFyYW1ldGVycycpO1xuICAgIH1cblxuICAgIGNvbnN0IGZhY3RvcnkgPSB0aGlzLmdldEJ1aWxkZXJGYWN0b3J5KCk7XG4gICAgY29uc3QgdHhCdWlsZGVyID0gZmFjdG9yeS5mcm9tKHR4SGV4KTtcbiAgICBjb25zdCB0eCA9IGF3YWl0IHR4QnVpbGRlci5idWlsZCgpO1xuICAgIGNvbnN0IHR4SnNvbiA9IHR4LnRvSnNvbigpO1xuXG4gICAgbGV0IG91dHB1dEFtb3VudCA9IG5ldyBCaWdOdW1iZXIoMCk7XG4gICAgY29uc3Qgb3V0cHV0czogeyBhZGRyZXNzOiBzdHJpbmc7IGFtb3VudDogc3RyaW5nOyBtZW1vOiBzdHJpbmc7IHRva2VuTmFtZT86IHN0cmluZyB9W10gPSBbXTtcbiAgICAvLyBUT0RPKEJHLTI0ODA5KTogZ2V0IHRoZSBtZW1vIGZyb20gdGhlIHRvSnNvblxuICAgIGxldCBtZW1vID0gJyc7XG4gICAgaWYgKHBhcmFtcy5tZW1vKSB7XG4gICAgICBtZW1vID0gcGFyYW1zLm1lbW8udmFsdWU7XG4gICAgfVxuXG4gICAgc3dpdGNoICh0eEpzb24uaW5zdHJ1Y3Rpb25zRGF0YS50eXBlKSB7XG4gICAgICBjYXNlICdjcnlwdG9UcmFuc2Zlcic6XG4gICAgICAgIGNvbnN0IHJlY2lwaWVudHMgPSB0eEpzb24uaW5zdHJ1Y3Rpb25zRGF0YS5wYXJhbXMucmVjaXBpZW50cyB8fCBbXTtcbiAgICAgICAgcmVjaXBpZW50cy5mb3JFYWNoKChyZWNpcGllbnQpID0+IHtcbiAgICAgICAgICBpZiAoIXJlY2lwaWVudC50b2tlbk5hbWUpIHtcbiAgICAgICAgICAgIC8vIHRva2VuIHRyYW5zZmVyIGRvZXNuJ3QgY2hhbmdlIG91dHB1dEFtb3VudFxuICAgICAgICAgICAgb3V0cHV0QW1vdW50ID0gb3V0cHV0QW1vdW50LnBsdXMocmVjaXBpZW50LmFtb3VudCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIG91dHB1dHMucHVzaCh7XG4gICAgICAgICAgICBhZGRyZXNzOiByZWNpcGllbnQuYWRkcmVzcyxcbiAgICAgICAgICAgIGFtb3VudDogcmVjaXBpZW50LmFtb3VudC50b1N0cmluZygpLFxuICAgICAgICAgICAgbWVtbyxcbiAgICAgICAgICAgIC4uLihyZWNpcGllbnQudG9rZW5OYW1lICYmIHtcbiAgICAgICAgICAgICAgdG9rZW5OYW1lOiByZWNpcGllbnQudG9rZW5OYW1lLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAndG9rZW5Bc3NvY2lhdGUnOlxuICAgICAgICBjb25zdCB0b2tlbnMgPSB0eEpzb24uaW5zdHJ1Y3Rpb25zRGF0YS5wYXJhbXMudG9rZW5OYW1lcyB8fCBbXTtcbiAgICAgICAgY29uc3QgYWNjb3VudElkID0gdHhKc29uLmluc3RydWN0aW9uc0RhdGEucGFyYW1zLmFjY291bnRJZDtcbiAgICAgICAgdG9rZW5zLmZvckVhY2goKHRva2VuKSA9PiB7XG4gICAgICAgICAgb3V0cHV0cy5wdXNoKHtcbiAgICAgICAgICAgIGFkZHJlc3M6IGFjY291bnRJZCxcbiAgICAgICAgICAgIGFtb3VudDogJzAnLFxuICAgICAgICAgICAgbWVtbyxcbiAgICAgICAgICAgIHRva2VuTmFtZTogdG9rZW4sXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgICBicmVhaztcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUcmFuc2FjdGlvbiBmb3JtYXQgb3V0c2lkZSBvZiBjcnlwdG9UcmFuc2ZlciBub3Qgc3VwcG9ydGVkIGZvciBleHBsYW5hdGlvbi4nKTtcbiAgICB9XG5cbiAgICBjb25zdCBkaXNwbGF5T3JkZXIgPSBbXG4gICAgICAnaWQnLFxuICAgICAgJ291dHB1dEFtb3VudCcsXG4gICAgICAnY2hhbmdlQW1vdW50JyxcbiAgICAgICdvdXRwdXRzJyxcbiAgICAgICdjaGFuZ2VPdXRwdXRzJyxcbiAgICAgICdmZWUnLFxuICAgICAgJ3RpbWVzdGFtcCcsXG4gICAgICAnZXhwaXJhdGlvbicsXG4gICAgICAnbWVtbycsXG4gICAgXTtcblxuICAgIHJldHVybiB7XG4gICAgICBkaXNwbGF5T3JkZXIsXG4gICAgICBpZDogdHhKc29uLmlkLFxuICAgICAgb3V0cHV0cyxcbiAgICAgIG91dHB1dEFtb3VudDogb3V0cHV0QW1vdW50LnRvU3RyaW5nKCksXG4gICAgICBjaGFuZ2VPdXRwdXRzOiBbXSwgLy8gYWNjb3VudCBiYXNlZCBkb2VzIG5vdCB1c2UgY2hhbmdlIG91dHB1dHNcbiAgICAgIGNoYW5nZUFtb3VudDogJzAnLCAvLyBhY2NvdW50IGJhc2UgZG9lcyBub3QgbWFrZSBjaGFuZ2VcbiAgICAgIGZlZTogcGFyYW1zLmZlZUluZm8/LmZlZSB8fCB0eEpzb24uZmVlLCAvLyBpbiB0aGUgaW5zdGFuY2Ugbm8gZmVlSW5mbyBpcyBwYXNzZWQgaW4gYXMgYSBwYXJhbSwgc2hvdyB0aGUgZmVlIGdpdmVuIGJ5IHRoZSB0eEpTT05cbiAgICAgIHRpbWVzdGFtcDogdHhKc29uLnN0YXJ0VGltZSxcbiAgICAgIGV4cGlyYXRpb246IHR4SnNvbi52YWxpZER1cmF0aW9uLFxuICAgIH0gYXMgYW55O1xuICB9XG5cbiAgaXNTdGVsbGFyU2VlZChzZWVkOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gU2VlZFZhbGlkYXRvci5pc1ZhbGlkRWQyNTUxOVNlZWRGb3JDb2luKHNlZWQsIENvaW5GYW1pbHkuWExNKTtcbiAgfVxuXG4gIGNvbnZlcnRGcm9tU3RlbGxhclNlZWQoc2VlZDogc3RyaW5nKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgLy8gYXNzdW1lIHRoaXMgaXMgYSB0cnVzdCBjdXN0b2RpYWwgc2VlZCBpZiBpdHMgYSB2YWxpZCBlZDI1NTE5IHBydlxuICAgIGlmICghdGhpcy5pc1N0ZWxsYXJTZWVkKHNlZWQpIHx8IFNlZWRWYWxpZGF0b3IuaGFzQ29tcGV0aW5nU2VlZEZvcm1hdHMoc2VlZCkpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGlmIChTZWVkVmFsaWRhdG9yLmlzVmFsaWRFZDI1NTE5U2VlZEZvckNvaW4oc2VlZCwgQ29pbkZhbWlseS5YTE0pKSB7XG4gICAgICBjb25zdCBrZXlGcm9tU2VlZCA9IG5ldyBIYmFyS2V5UGFpcih7IHNlZWQ6IHN0ZWxsYXIuU3RyS2V5LmRlY29kZUVkMjU1MTlTZWNyZXRTZWVkKHNlZWQpIH0pO1xuICAgICAgY29uc3Qga2V5cyA9IGtleUZyb21TZWVkLmdldEtleXMoKTtcbiAgICAgIGlmIChrZXlzICE9PSB1bmRlZmluZWQgJiYga2V5cy5wcnYpIHtcbiAgICAgICAgcmV0dXJuIGtleXMucHJ2O1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgaXNWYWxpZFB1YihwdWI6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBVdGlscy5pc1ZhbGlkUHVibGljS2V5KHB1Yik7XG4gIH1cblxuICBwdWJsaWMgZ2V0VG9rZW5FbmFibGVtZW50Q29uZmlnKCk6IFRva2VuRW5hYmxlbWVudENvbmZpZyB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHJlcXVpcmVzVG9rZW5FbmFibGVtZW50OiB0cnVlLFxuICAgICAgc3VwcG9ydHNNdWx0aXBsZVRva2VuRW5hYmxlbWVudHM6IHRydWUsXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0QnVpbGRlckZhY3RvcnkoKTogVHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeSB7XG4gICAgcmV0dXJuIG5ldyBUcmFuc2FjdGlvbkJ1aWxkZXJGYWN0b3J5KGNvaW5zLmdldCh0aGlzLmdldENoYWluKCkpKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0SGJhckNsaWVudCgpOiBDbGllbnQge1xuICAgIGNvbnN0IGNsaWVudCA9IHRoaXMuYml0Z28uZ2V0RW52KCkgPT09ICdwcm9kJyA/IENsaWVudC5mb3JNYWlubmV0KCkgOiBDbGllbnQuZm9yVGVzdG5ldCgpO1xuICAgIHJldHVybiBjbGllbnQ7XG4gIH1cblxuICBhc3luYyBnZXRBY2NvdW50QmFsYW5jZShhY2NvdW50SWQ6IHN0cmluZywgY2xpZW50OiBDbGllbnQpOiBQcm9taXNlPEFjY291bnRCYWxhbmNlSnNvbj4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBiYWxhbmNlID0gYXdhaXQgbmV3IEFjY291bnRCYWxhbmNlUXVlcnkoKS5zZXRBY2NvdW50SWQoYWNjb3VudElkKS5leGVjdXRlKGNsaWVudCk7XG5cbiAgICAgIHJldHVybiBiYWxhbmNlLnRvSlNPTigpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignRmFpbGVkIHRvIGdldCBhY2NvdW50IGJhbGFuY2UsIGVycm9yOiAnICsgZS5tZXNzYWdlKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBicm9hZGNhc3RUcmFuc2FjdGlvbih7XG4gICAgc2VyaWFsaXplZFNpZ25lZFRyYW5zYWN0aW9uLFxuICAgIHN0YXJ0VGltZSxcbiAgfTogQnJvYWRjYXN0VHJhbnNhY3Rpb25PcHRpb25zKTogUHJvbWlzZTxCcm9hZGNhc3RUcmFuc2FjdGlvblJlc3VsdD4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBoYmFyVHggPSBIYmFyVHJhbnNhY3Rpb24uZnJvbUJ5dGVzKFV0aWxzLnRvVWludDhBcnJheShzZXJpYWxpemVkU2lnbmVkVHJhbnNhY3Rpb24pKTtcblxuICAgICAgaWYgKHN0YXJ0VGltZSkge1xuICAgICAgICBVdGlscy5pc1ZhbGlkVGltZVN0cmluZyhzdGFydFRpbWUpO1xuICAgICAgICB3aGlsZSAoIVV0aWxzLnNob3VsZEJyb2FkY2FzdE5vdyhzdGFydFRpbWUpKSB7XG4gICAgICAgICAgYXdhaXQgVXRpbHMuc2xlZXAoMTAwMCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRoaXMuY2xpZW50QnJvYWRjYXN0VHJhbnNhY3Rpb24oaGJhclR4KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZhaWxlZCB0byBicm9hZGNhc3QgdHJhbnNhY3Rpb24sIGVycm9yOiAnICsgZS5tZXNzYWdlKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBjbGllbnRCcm9hZGNhc3RUcmFuc2FjdGlvbihoYmFyVHg6IEhiYXJUcmFuc2FjdGlvbikge1xuICAgIGNvbnN0IGNsaWVudCA9IHRoaXMuZ2V0SGJhckNsaWVudCgpO1xuICAgIGNvbnN0IHRyYW5zYWN0aW9uUmVzcG9uc2UgPSBhd2FpdCBoYmFyVHguZXhlY3V0ZShjbGllbnQpO1xuICAgIGNvbnN0IHRyYW5zYWN0aW9uUmVjZWlwdCA9IGF3YWl0IHRyYW5zYWN0aW9uUmVzcG9uc2UuZ2V0UmVjZWlwdChjbGllbnQpO1xuXG4gICAgcmV0dXJuIHsgdHhJZDogdHJhbnNhY3Rpb25SZXNwb25zZS50cmFuc2FjdGlvbklkLnRvU3RyaW5nKCksIHN0YXR1czogdHJhbnNhY3Rpb25SZWNlaXB0LnN0YXR1cy50b1N0cmluZygpIH07XG4gIH1cbn1cbiJdfQ==
444
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGJhci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9oYmFyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTs7R0FFRztBQUNILGlEQUFxRjtBQUNyRixtREFtQjhCO0FBQzlCLCtDQUF5QztBQUN6QyxxREFBdUM7QUFDdkMsbURBQWdEO0FBQ2hELCtCQUF1RjtBQUN2RixtREFBcUM7QUFDckMsMENBQTRCO0FBQzVCLHdDQU13QjtBQUN4QiwyQ0FBa0Q7QUF1RmxELE1BQWEsSUFBSyxTQUFRLG1CQUFRO0lBR2hDLFlBQVksS0FBZ0IsRUFBRSxXQUF1QztRQUNuRSxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFYixJQUFJLENBQUMsV0FBVyxFQUFFO1lBQ2hCLE1BQU0sSUFBSSxLQUFLLENBQUMsb0RBQW9ELENBQUMsQ0FBQztTQUN2RTtRQUVELElBQUksQ0FBQyxZQUFZLEdBQUcsV0FBVyxDQUFDO0lBQ2xDLENBQUM7SUFFRCxRQUFRO1FBQ04sT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQztJQUNoQyxDQUFDO0lBRUQsU0FBUztRQUNQLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUM7SUFDbEMsQ0FBQztJQUVELFdBQVc7UUFDVCxPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDO0lBQ3BDLENBQUM7SUFFRCxhQUFhO1FBQ1gsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQ3ZELENBQUM7SUFFRCxNQUFNLENBQUMsY0FBYyxDQUFDLEtBQWdCLEVBQUUsV0FBdUM7UUFDN0UsT0FBTyxJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUUsV0FBVyxDQUFDLENBQUM7SUFDdEMsQ0FBQztJQUVEOzs7T0FHRztJQUNILHdCQUF3QjtRQUN0QixPQUFPLEtBQUssQ0FBQztJ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RyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUM7U0FDekU7SUFDSCxDQUFDO0lBRUQsS0FBSyxDQUFDLDBCQUEwQixDQUFDLE1BQXVCO1FBQ3RELE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUNwQyxNQUFNLG1CQUFtQixHQUFHLE1BQU0sTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN6RCxNQUFNLGtCQUFrQixHQUFHLE1BQU0sbUJBQW1CLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBRXhFLE9BQU8sRUFBRSxJQUFJLEVBQUUsbUJBQW1CLENBQUMsYUFBYSxDQUFDLFFBQVEsRUFBRSxFQUFFLE1BQU0sRUFBRSxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQztJQUM5RyxDQUFDO0NBQ0Y7QUF0ZUQsb0JBc2VDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAcHJldHRpZXJcbiAqL1xuaW1wb3J0IHsgQ29pbkZhbWlseSwgQmFzZUNvaW4gYXMgU3RhdGljc0Jhc2VDb2luLCBjb2lucyB9IGZyb20gJ0BiaXRnby1iZXRhL3N0YXRpY3MnO1xuaW1wb3J0IHtcbiAgQmFzZUNvaW4sXG4gIEJpdEdvQmFzZSxcbiAgS2V5UGFpcixcbiAgUGFyc2VkVHJhbnNhY3Rpb24sXG4gIFBhcnNlVHJhbnNhY3Rpb25PcHRpb25zLFxuICBTaWduZWRUcmFuc2FjdGlvbixcbiAgU2lnblRyYW5zYWN0aW9uT3B0aW9ucyxcbiAgVmVyaWZ5QWRkcmVzc09wdGlvbnMgYXMgQmFzZVZlcmlmeUFkZHJlc3NPcHRpb25zLFxuICBWZXJpZnlUcmFuc2FjdGlvbk9wdGlvbnMsXG4gIFRyYW5zYWN0aW9uRmVlLFxuICBUcmFuc2FjdGlvblJlY2lwaWVudCBhcyBSZWNpcGllbnQsXG4gIFRyYW5zYWN0aW9uUHJlYnVpbGQgYXMgQmFzZVRyYW5zYWN0aW9uUHJlYnVpbGQsXG4gIFRyYW5zYWN0aW9uRXhwbGFuYXRpb24sXG4gIE1lbW8sXG4gIFRva2VuRW5hYmxlbWVudENvbmZpZyxcbiAgQmFzZUJyb2FkY2FzdFRyYW5zYWN0aW9uT3B0aW9ucyxcbiAgQmFzZUJyb2FkY2FzdFRyYW5zYWN0aW9uUmVzdWx0LFxuICBOb3RTdXBwb3J0ZWQsXG59IGZyb20gJ0BiaXRnby1iZXRhL3Nkay1jb3JlJztcbmltcG9ydCB7IEJpZ051bWJlciB9IGZyb20gJ2JpZ251bWJlci5qcyc7XG5pbXBvcnQgKiBhcyBzdGVsbGFyIGZyb20gJ3N0ZWxsYXItc2RrJztcbmltcG9ydCB7IFNlZWRWYWxpZGF0b3IgfSBmcm9tICcuL3NlZWRWYWxpZGF0b3InO1xuaW1wb3J0IHsgS2V5UGFpciBhcyBIYmFyS2V5UGFpciwgVHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeSwgVHJhbnNhY3Rpb24gfSBmcm9tICcuL2xpYic7XG5pbXBvcnQgKiBhcyBVdGlscyBmcm9tICcuL2xpYi91dGlscyc7XG5pbXBvcnQgKiBhcyBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQge1xuICBDbGllbnQsXG4gIFRyYW5zYWN0aW9uIGFzIEhiYXJUcmFuc2FjdGlvbixcbiAgQWNjb3VudEJhbGFuY2VRdWVyeSxcbiAgQWNjb3VudEJhbGFuY2VKc29uLFxuICBIYmFyIGFzIEhiYXJVbml0LFxufSBmcm9tICdAaGFzaGdyYXBoL3Nkayc7XG5pbXBvcnQgeyBQVUJMSUNfS0VZX1BSRUZJWCB9IGZyb20gJy4vbGliL2tleVBhaXInO1xuXG5leHBvcnQgaW50ZXJmYWNlIEhiYXJTaWduVHJhbnNhY3Rpb25PcHRpb25zIGV4dGVuZHMgU2lnblRyYW5zYWN0aW9uT3B0aW9ucyB7XG4gIHR4UHJlYnVpbGQ6IFRyYW5zYWN0aW9uUHJlYnVpbGQ7XG4gIHBydjogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFR4SW5mbyB7XG4gIHJlY2lwaWVudHM6IFJlY2lwaWVudFtdO1xuICBmcm9tOiBzdHJpbmc7XG4gIHR4aWQ6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBUcmFuc2FjdGlvblByZWJ1aWxkIGV4dGVuZHMgQmFzZVRyYW5zYWN0aW9uUHJlYnVpbGQge1xuICB0eEhleDogc3RyaW5nO1xuICB0eEluZm86IFR4SW5mbztcbiAgZmVlSW5mbzogVHJhbnNhY3Rpb25GZWU7XG4gIHNvdXJjZTogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEV4cGxhaW5UcmFuc2FjdGlvbk9wdGlvbnMge1xuICB0eEhleD86IHN0cmluZztcbiAgaGFsZlNpZ25lZD86IHtcbiAgICB0eEhleDogc3RyaW5nO1xuICB9O1xuICBmZWVJbmZvPzogVHJhbnNhY3Rpb25GZWU7XG4gIC8vIFRPRE8oQkctMjQ4MDkpOiBnZXQgdGhlIG1lbW8gZnJvbSB0aGUgdG9Kc29uXG4gIG1lbW8/OiB7XG4gICAgdHlwZTogc3RyaW5nO1xuICAgIHZhbHVlOiBzdHJpbmc7XG4gIH07XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSGJhclZlcmlmeVRyYW5zYWN0aW9uT3B0aW9ucyBleHRlbmRzIFZlcmlmeVRyYW5zYWN0aW9uT3B0aW9ucyB7XG4gIHR4UHJlYnVpbGQ6IFRyYW5zYWN0aW9uUHJlYnVpbGQ7XG4gIG1lbW8/OiBNZW1vO1xufVxuXG5pbnRlcmZhY2UgVmVyaWZ5QWRkcmVzc09wdGlvbnMgZXh0ZW5kcyBCYXNlVmVyaWZ5QWRkcmVzc09wdGlvbnMge1xuICBiYXNlQWRkcmVzczogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJlY292ZXJ5T3B0aW9ucyB7XG4gIGJhY2t1cEtleTogc3RyaW5nO1xuICB1c2VyS2V5OiBzdHJpbmc7XG4gIHJvb3RBZGRyZXNzOiBzdHJpbmc7XG4gIHJlY292ZXJ5RGVzdGluYXRpb246IHN0cmluZztcbiAgYml0Z29LZXk/OiBzdHJpbmc7XG4gIHdhbGxldFBhc3NwaHJhc2U/OiBzdHJpbmc7XG4gIG1heEZlZT86IHN0cmluZztcbiAgbm9kZUlkPzogc3RyaW5nO1xuICBzdGFydFRpbWU/OiBzdHJpbmc7XG59XG5cbmludGVyZmFjZSBSZWNvdmVyeUluZm8ge1xuICBpZDogc3RyaW5nO1xuICB0eDogc3RyaW5nO1xuICBjb2luOiBzdHJpbmc7XG4gIHN0YXJ0VGltZTogc3RyaW5nO1xuICBub2RlSWQ6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBPZmZsaW5lVmF1bHRUeEluZm8ge1xuICB0eEhleDogc3RyaW5nO1xuICB1c2VyS2V5OiBzdHJpbmc7XG4gIGJhY2t1cEtleTogc3RyaW5nO1xuICBiaXRnb0tleT86IHN0cmluZztcbiAgYWRkcmVzczogc3RyaW5nO1xuICBjb2luOiBzdHJpbmc7XG4gIG1heEZlZTogc3RyaW5nO1xuICByZWNpcGllbnRzOiBSZWNpcGllbnRbXTtcbiAgYW1vdW50OiBzdHJpbmc7XG4gIHN0YXJ0VGltZTogc3RyaW5nO1xuICB2YWxpZER1cmF0aW9uOiBzdHJpbmc7XG4gIG5vZGVJZDogc3RyaW5nO1xuICBtZW1vOiBzdHJpbmc7XG4gIGpzb24/OiBhbnk7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQnJvYWRjYXN0VHJhbnNhY3Rpb25PcHRpb25zIGV4dGVuZHMgQmFzZUJyb2FkY2FzdFRyYW5zYWN0aW9uT3B0aW9ucyB7XG4gIHN0YXJ0VGltZT86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBCcm9hZGNhc3RUcmFuc2FjdGlvblJlc3VsdCBleHRlbmRzIEJhc2VCcm9hZGNhc3RUcmFuc2FjdGlvblJlc3VsdCB7XG4gIHN0YXR1cz86IHN0cmluZztcbn1cblxuZXhwb3J0IGNsYXNzIEhiYXIgZXh0ZW5kcyBCYXNlQ29pbiB7XG4gIHByb3RlY3RlZCByZWFkb25seSBfc3RhdGljc0NvaW46IFJlYWRvbmx5PFN0YXRpY3NCYXNlQ29pbj47XG5cbiAgY29uc3RydWN0b3IoYml0Z286IEJpdEdvQmFzZSwgc3RhdGljc0NvaW4/OiBSZWFkb25seTxTdGF0aWNzQmFzZUNvaW4+KSB7XG4gICAgc3VwZXIoYml0Z28pO1xuXG4gICAgaWYgKCFzdGF0aWNzQ29pbikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdtaXNzaW5nIHJlcXVpcmVkIGNvbnN0cnVjdG9yIHBhcmFtZXRlciBzdGF0aWNzQ29pbicpO1xuICAgIH1cblxuICAgIHRoaXMuX3N0YXRpY3NDb2luID0gc3RhdGljc0NvaW47XG4gIH1cblxuICBnZXRDaGFpbigpIHtcbiAgICByZXR1cm4gdGhpcy5fc3RhdGljc0NvaW4ubmFtZTtcbiAgfVxuXG4gIGdldEZhbWlseSgpOiBDb2luRmFtaWx5IHtcbiAgICByZXR1cm4gdGhpcy5fc3RhdGljc0NvaW4uZmFtaWx5O1xuICB9XG5cbiAgZ2V0RnVsbE5hbWUoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3N0YXRpY3NDb2luLmZ1bGxOYW1lO1xuICB9XG5cbiAgZ2V0QmFzZUZhY3RvcigpIHtcbiAgICByZXR1cm4gTWF0aC5wb3coMTAsIHRoaXMuX3N0YXRpY3NDb2luLmRlY2ltYWxQbGFjZXMpO1xuICB9XG5cbiAgc3RhdGljIGNyZWF0ZUluc3RhbmNlKGJpdGdvOiBCaXRHb0Jhc2UsIHN0YXRpY3NDb2luPzogUmVhZG9ubHk8U3RhdGljc0Jhc2VDb2luPik6IEJhc2VDb2luIHtcbiAgICByZXR1cm4gbmV3IEhiYXIoYml0Z28sIHN0YXRpY3NDb2luKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGbGFnIGZvciBzZW5kaW5nIHZhbHVlIG9mIDBcbiAgICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgb2theSB0byBzZW5kIDAgdmFsdWUsIGZhbHNlIG90aGVyd2lzZVxuICAgKi9cbiAgdmFsdWVsZXNzVHJhbnNmZXJBbGxvd2VkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgdGhpcyBpcyBhIHZhbGlkIGJhc2U1OCBvciBoZXggYWRkcmVzc1xuICAgKiBAcGFyYW0gYWRkcmVzc1xuICAgKi9cbiAgaXNWYWxpZEFkZHJlc3MoYWRkcmVzczogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBVdGlscy5pc1ZhbGlkQWRkcmVzc1dpdGhQYXltZW50SWQoYWRkcmVzcyk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBpbmhlcml0ZG9jICovXG4gIGRlcml2ZUtleVdpdGhTZWVkKCk6IHsgZGVyaXZhdGlvblBhdGg6IHN0cmluZzsga2V5OiBzdHJpbmcgfSB7XG4gICAgdGhyb3cgbmV3IE5vdFN1cHBvcnRlZCgnbWV0aG9kIGRlcml2ZUtleVdpdGhTZWVkIG5vdCBzdXBwb3J0ZWQgZm9yIGVkZHNhIGN1cnZlJyk7XG4gIH1cblxuICAvKiogaW5oZXJpdGRvYyAqL1xuICBnZW5lcmF0ZUtleVBhaXIoc2VlZD86IEJ1ZmZlcik6IEtleVBhaXIge1xuICAgIGNvbnN0IGtleVBhaXIgPSBzZWVkID8gbmV3IEhiYXJLZXlQYWlyKHsgc2VlZCB9KSA6IG5ldyBIYmFyS2V5UGFpcigpO1xuICAgIGNvbnN0IGtleXMgPSBrZXlQYWlyLmdldEtleXMoKTtcblxuICAgIGlmICgha2V5cy5wcnYpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignS2V5cGFpciBnZW5lcmF0aW9uIGZhaWxlZCB0byBnZW5lcmF0ZSBhIHBydicpO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBwdWI6IGtleXMucHViLFxuICAgICAgcHJ2OiBrZXlzLnBydixcbiAgICB9O1xuICB9XG5cbiAgLyoqIGluaGVyaXRkb2MgKi9cbiAgYXN5bmMgZ2VuZXJhdGVLZXlQYWlyQXN5bmMoc2VlZD86IEJ1ZmZlcik6IFByb21pc2U8S2V5UGFpcj4ge1xuICAgIGNvbnN0IGtleVBhaXIgPSBzZWVkID8gbmV3IEhiYXJLZXlQYWlyKHsgc2VlZCB9KSA6IG5ldyBIYmFyS2V5UGFpcigpO1xuICAgIGNvbnN0IGtleXMgPSBrZXlQYWlyLmdldEtleXModHJ1ZSk7XG5cbiAgICBpZiAoIWtleXMucHJ2KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0tleXBhaXIgZ2VuZXJhdGlvbiBmYWlsZWQgdG8gZ2VuZXJhdGUgYSBwcnYnKTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgcHViOiBrZXlzLnB1YixcbiAgICAgIHBydjoga2V5cy5wcnYsXG4gICAgfTtcbiAgfVxuXG4gIGFzeW5jIHBhcnNlVHJhbnNhY3Rpb24ocGFyYW1zOiBQYXJzZVRyYW5zYWN0aW9uT3B0aW9ucyk6IFByb21pc2U8UGFyc2VkVHJhbnNhY3Rpb24+IHtcbiAgICByZXR1cm4ge307XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgaWYgYWRkcmVzcyBpcyB2YWxpZCwgdGhlbiBtYWtlIHN1cmUgaXQgbWF0Y2hlcyB0aGUgYmFzZSBhZGRyZXNzLlxuICAgKlxuICAgKiBAcGFyYW0ge1ZlcmlmeUFkZHJlc3NPcHRpb25zfSBwYXJhbXNcbiAgICogQHBhcmFtIHtTdHJpbmd9IHBhcmFtcy5hZGRyZXNzIC0gdGhlIGFkZHJlc3MgdG8gdmVyaWZ5XG4gICAqIEBwYXJhbSB7U3RyaW5nfSBwYXJhbXMuYmFzZUFkZHJlc3MgLSB0aGUgYmFzZSBhZGRyZXNzIGZyb20gdGhlIHdhbGxldFxuICAgKi9cbiAgYXN5bmMgaXNXYWxsZXRBZGRyZXNzKHBhcmFtczogVmVyaWZ5QWRkcmVzc09wdGlvbnMpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCB7IGFkZHJlc3MsIGJhc2VBZGRyZXNzIH0gPSBwYXJhbXM7XG4gICAgcmV0dXJuIFV0aWxzLmlzU2FtZUJhc2VBZGRyZXNzKGFkZHJlc3MsIGJhc2VBZGRyZXNzKTtcbiAgfVxuXG4gIGFzeW5jIHZlcmlmeVRyYW5zYWN0aW9uKHBhcmFtczogSGJhclZlcmlmeVRyYW5zYWN0aW9uT3B0aW9ucyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIC8vIGFzc2V0IG5hbWUgdG8gdHJhbnNmZXIgYW1vdW50IG1hcFxuICAgIGNvbnN0IGNvaW5Db25maWcgPSBjb2lucy5nZXQodGhpcy5nZXRDaGFpbigpKTtcbiAgICBjb25zdCB7IHR4UGFyYW1zOiB0eFBhcmFtcywgdHhQcmVidWlsZDogdHhQcmVidWlsZCwgbWVtbzogbWVtbyB9ID0gcGFyYW1zO1xuICAgIGNvbnN0IHRyYW5zYWN0aW9uID0gbmV3IFRyYW5zYWN0aW9uKGNvaW5Db25maWcpO1xuICAgIGlmICghdHhQcmVidWlsZC50eEhleCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdtaXNzaW5nIHJlcXVpcmVkIHR4IHByZWJ1aWxkIHByb3BlcnR5IHR4SGV4Jyk7XG4gICAgfVxuXG4gICAgdHJhbnNhY3Rpb24uZnJvbVJhd1RyYW5zYWN0aW9uKHR4UHJlYnVpbGQudHhIZXgpO1xuICAgIGNvbnN0IGV4cGxhaW5UeFBhcmFtczogRXhwbGFpblRyYW5zYWN0aW9uT3B0aW9ucyA9IHtcbiAgICAgIHR4SGV4OiB0eFByZWJ1aWxkLnR4SGV4LFxuICAgICAgZmVlSW5mbzogdHhQcmVidWlsZC5mZWVJbmZvLFxuICAgICAgbWVtbzogbWVtbyxcbiAgICB9O1xuICAgIGNvbnN0IGV4cGxhaW5lZFR4ID0gYXdhaXQgdGhpcy5leHBsYWluVHJhbnNhY3Rpb24oZXhwbGFpblR4UGFyYW1zKTtcblxuICAgIGlmICghdHhQYXJhbXMucmVjaXBpZW50cykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdtaXNzaW5nIHJlcXVpcmVkIHR4IHBhcmFtcyBwcm9wZXJ0eSByZWNpcGllbnRzJyk7XG4gICAgfVxuXG4gICAgLy8gZm9yIGVuYWJsZXRva2VuLCByZWNpcGllbnQgb3V0cHV0IGFtb3VudCBpcyAwXG4gICAgY29uc3QgcmVjaXBpZW50cyA9IHR4UGFyYW1zLnJlY2lwaWVudHMubWFwKChyZWNpcGllbnQpID0+ICh7XG4gICAgICAuLi5yZWNpcGllbnQsXG4gICAgICBhbW91bnQ6IHR4UGFyYW1zLnR5cGUgPT09ICdlbmFibGV0b2tlbicgPyAnMCcgOiByZWNpcGllbnQuYW1vdW50LFxuICAgIH0pKTtcbiAgICBpZiAoY29pbkNvbmZpZy5pc1Rva2VuKSB7XG4gICAgICByZWNpcGllbnRzLmZvckVhY2goKHJlY2lwaWVudCkgPT4ge1xuICAgICAgICBpZiAocmVjaXBpZW50LnRva2VuTmFtZSAhPT0gdW5kZWZpbmVkICYmIHJlY2lwaWVudC50b2tlbk5hbWUgIT09IGNvaW5Db25maWcubmFtZSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignSW5jb3JyZWN0IHRva2VuIG5hbWUgc3BlY2lmaWVkIGluIHJlY2lwaWVudHMnKTtcbiAgICAgICAgfVxuICAgICAgICByZWNpcGllbnQudG9rZW5OYW1lID0gY29pbkNvbmZpZy5uYW1lO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gdmVyaWZ5IHJlY2lwaWVudHMgZnJvbSBwYXJhbXMgYW5kIGV4cGxhaW5lZFR4XG4gICAgY29uc3QgZmlsdGVyZWRSZWNpcGllbnRzID0gcmVjaXBpZW50cz8ubWFwKChyZWNpcGllbnQpID0+IF8ucGljayhyZWNpcGllbnQsIFsnYWRkcmVzcycsICdhbW91bnQnLCAndG9rZW5OYW1lJ10pKTtcbiAgICBjb25zdCBmaWx0ZXJlZE91dHB1dHMgPSBleHBsYWluZWRUeC5vdXRwdXRzLm1hcCgob3V0cHV0KSA9PiBfLnBpY2sob3V0cHV0LCBbJ2FkZHJlc3MnLCAnYW1vdW50JywgJ3Rva2VuTmFtZSddKSk7XG5cbiAgICBpZiAoIV8uaXNFcXVhbChmaWx0ZXJlZE91dHB1dHMsIGZpbHRlcmVkUmVjaXBpZW50cykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignVHggb3V0cHV0cyBkb2VzIG5vdCBtYXRjaCB3aXRoIGV4cGVjdGVkIHR4UGFyYW1zIHJlY2lwaWVudHMnKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBc3NlbWJsZSBrZXljaGFpbiBhbmQgaGFsZi1zaWduIHByZWJ1aWx0IHRyYW5zYWN0aW9uXG4gICAqXG4gICAqIEBwYXJhbSBwYXJhbXNcbiAgICogQHBhcmFtIHBhcmFtcy50eFByZWJ1aWxkIHtPYmplY3R9IHByZWJ1aWxkIG9iamVjdCByZXR1cm5lZCBieSBwbGF0Zm9ybVxuICAgKiBAcGFyYW0gcGFyYW1zLnBydiB7U3RyaW5nfSB1c2VyIHBydlxuICAgKiBAcGFyYW0gcGFyYW1zLndhbGxldC5hZGRyZXNzVmVyc2lvbiB7U3RyaW5nfSB0aGlzIGlzIHRoZSB2ZXJzaW9uIG9mIHRoZSBBbGdvcmFuZCBtdWx0aXNpZyBhZGRyZXNzIGdlbmVyYXRpb24gZm9ybWF0XG4gICAqIEByZXR1cm5zIFByb21pc2U8U2lnbmVkVHJhbnNhY3Rpb24+XG4gICAqL1xuICBhc3luYyBzaWduVHJhbnNhY3Rpb24ocGFyYW1zOiBIYmFyU2lnblRyYW5zYWN0aW9uT3B0aW9ucyk6IFByb21pc2U8U2lnbmVkVHJhbnNhY3Rpb24+IHtcbiAgICBjb25zdCBmYWN0b3J5ID0gdGhpcy5nZXRCdWlsZGVyRmFjdG9yeSgpO1xuICAgIGNvbnN0IHR4QnVpbGRlciA9IGZhY3RvcnkuZnJvbShwYXJhbXMudHhQcmVidWlsZC50eEhleCk7XG4gICAgdHhCdWlsZGVyLnNpZ24oeyBrZXk6IHBhcmFtcy5wcnYgfSk7XG5cbiAgICBjb25zdCB0cmFuc2FjdGlvbiA9IGF3YWl0IHR4QnVpbGRlci5idWlsZCgpO1xuXG4gICAgaWYgKCF0cmFuc2FjdGlvbikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIG1lc3NhZ2VkIHBhc3NlZCB0byBzaWduTWVzc2FnZScpO1xuICAgIH1cblxuICAgIGNvbnN0IHJlc3BvbnNlID0ge1xuICAgICAgdHhIZXg6IHRyYW5zYWN0aW9uLnRvQnJvYWRjYXN0Rm9ybWF0KCksXG4gICAgfTtcbiAgICByZXR1cm4gdHJhbnNhY3Rpb24uc2lnbmF0dXJlLmxlbmd0aCA+PSAyID8gcmVzcG9uc2UgOiB7IGhhbGZTaWduZWQ6IHJlc3BvbnNlIH07XG4gIH1cblxuICAvKipcbiAgICogU2lnbiBtZXNzYWdlIHdpdGggcHJpdmF0ZSBrZXlcbiAgICpcbiAgICogQHBhcmFtIGtleVxuICAgKiBAcGFyYW0gbWVzc2FnZVxuICAgKiBAcmV0dXJuIHtCdWZmZXJ9IEEgc2lnbmF0dXJlIG92ZXIgdGhlIGdpdmVuIG1lc3NhZ2UgdXNpbmcgdGhlIGdpdmVuIGtleVxuICAgKi9cbiAgYXN5bmMgc2lnbk1lc3NhZ2Uoa2V5OiBLZXlQYWlyLCBtZXNzYWdlOiBzdHJpbmcgfCBCdWZmZXIpOiBQcm9taXNlPEJ1ZmZlcj4ge1xuICAgIGNvbnN0IG1zZyA9IEJ1ZmZlci5pc0J1ZmZlcihtZXNzYWdlKSA/IG1lc3NhZ2UudG9TdHJpbmcoJ3V0ZjgnKSA6IG1lc3NhZ2U7XG4gICAgLy8gcmVjb25zdGl0dXRlIGtleXMgYW5kIHNpZ25cbiAgICByZXR1cm4gQnVmZmVyLmZyb20obmV3IEhiYXJLZXlQYWlyKHsgcHJ2OiBrZXkucHJ2IH0pLnNpZ25NZXNzYWdlKG1zZykpO1xuICB9XG5cbiAgLyoqXG4gICAqIEJ1aWxkcyBhIGZ1bmRzIHJlY292ZXJ5IHRyYW5zYWN0aW9uIHdpdGhvdXQgQml0R28uXG4gICAqIFdlIG5lZWQgdG8gZG8gdGhyZWUgcXVlcmllcyBkdXJpbmcgdGhpczpcbiAgICogMSkgTm9kZSBxdWVyeSAtIGhvdyBtdWNoIG1vbmV5IGlzIGluIHRoZSBhY2NvdW50XG4gICAqIDIpIEJ1aWxkIHRyYW5zYWN0aW9uIC0gYnVpbGQgb3VyIHRyYW5zYWN0aW9uIGZvciB0aGUgYW1vdW50XG4gICAqIDMpIFNlbmQgc2lnbmVkIGJ1aWxkIC0gc2VuZCBvdXIgc2lnbmVkIGJ1aWxkIHRvIGEgcHVibGljIG5vZGVcbiAgICogQHBhcmFtIHBhcmFtc1xuICAgKi9cbiAgcHVibGljIGFzeW5jIHJlY292ZXIocGFyYW1zOiBSZWNvdmVyeU9wdGlvbnMpOiBQcm9taXNlPFJlY292ZXJ5SW5mbyB8IE9mZmxpbmVWYXVsdFR4SW5mbz4ge1xuICAgIGNvbnN0IGlzVW5zaWduZWRTd2VlcCA9XG4gICAgICBwYXJhbXMuYmFja3VwS2V5LnN0YXJ0c1dpdGgoUFVCTElDX0tFWV9QUkVGSVgpICYmIHBhcmFtcy51c2VyS2V5LnN0YXJ0c1dpdGgoUFVCTElDX0tFWV9QUkVGSVgpO1xuXG4gICAgLy8gVmFsaWRhdGUgdGhlIHJvb3QgYWRkcmVzc1xuICAgIGlmICghdGhpcy5pc1ZhbGlkQWRkcmVzcyhwYXJhbXMucm9vdEFkZHJlc3MpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgcm9vdEFkZHJlc3MsIGdvdDogJyArIHBhcmFtcy5yb290QWRkcmVzcyk7XG4gICAgfVxuXG4gICAgLy8gVmFsaWRhdGUgdGhlIGRlc3RpbmF0aW9uIGFkZHJlc3NcbiAgICBpZiAoIXRoaXMuaXNWYWxpZEFkZHJlc3MocGFyYW1zLnJlY292ZXJ5RGVzdGluYXRpb24pKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgcmVjb3ZlcnlEZXN0aW5hdGlvbiwgZ290OiAnICsgcGFyYW1zLnJlY292ZXJ5RGVzdGluYXRpb24pO1xuICAgIH1cblxuICAgIC8vIFZhbGlkYXRlIG5vZGVJZFxuICAgIGlmIChwYXJhbXMubm9kZUlkICYmICFVdGlscy5pc1ZhbGlkQWRkcmVzcyhwYXJhbXMubm9kZUlkKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkIG5vZGVJZCwgZ290OiAnICsgcGFyYW1zLm5vZGVJZCk7XG4gICAgfVxuXG4gICAgLy8gdmFsaWRhdGUgZmVlXG4gICAgaWYgKHBhcmFtcy5tYXhGZWUgJiYgIVV0aWxzLmlzVmFsaWRBbW91bnQocGFyYW1zLm1heEZlZSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignaW52YWxpZCBtYXhGZWUsIGdvdDogJyArIHBhcmFtcy5tYXhGZWUpO1xuICAgIH1cblxuICAgIC8vIHZhbGlkYXRlIHN0YXJ0VGltZVxuXG4gICAgaWYgKHBhcmFtcy5zdGFydFRpbWUpIHtcbiAgICAgIFV0aWxzLnZhbGlkYXRlU3RhcnRUaW1lKHBhcmFtcy5zdGFydFRpbWUpO1xuICAgIH1cblxuICAgIGlmIChpc1Vuc2lnbmVkU3dlZXAgJiYgIXBhcmFtcy5zdGFydFRpbWUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignc3RhcnQgdGltZSBpcyByZXF1aXJlZCBmb3IgdW5zaWduZWQgc3dlZXAnKTtcbiAgICB9XG5cbiAgICBpZiAoIWlzVW5zaWduZWRTd2VlcCAmJiAhcGFyYW1zLndhbGxldFBhc3NwaHJhc2UpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignd2FsbGV0UGFzc3BocmFzZSBpcyByZXF1aXJlZCBmb3Igbm9uLWJpdGdvIHJlY292ZXJ5Jyk7XG4gICAgfVxuXG4gICAgbGV0IHVzZXJQcnY6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICBsZXQgYmFja1VwOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgaWYgKCFpc1Vuc2lnbmVkU3dlZXApIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHVzZXJQcnYgPSB0aGlzLmJpdGdvLmRlY3J5cHQoeyBpbnB1dDogcGFyYW1zLnVzZXJLZXksIHBhc3N3b3JkOiBwYXJhbXMud2FsbGV0UGFzc3BocmFzZSB9KTtcbiAgICAgICAgYmFja1VwID0gdGhpcy5iaXRnby5kZWNyeXB0KHsgaW5wdXQ6IHBhcmFtcy5iYWNrdXBLZXksIHBhc3N3b3JkOiBwYXJhbXMud2FsbGV0UGFzc3BocmFzZSB9KTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICd1bmFibGUgdG8gZGVjcnlwdCB1c2VyS2V5IG9yIGJhY2t1cEtleSB3aXRoIHRoZSB3YWxsZXRQYXNzcGhyYXNlIHByb3ZpZGVkLCBnb3QgZXJyb3I6ICcgKyBlLm1lc3NhZ2VcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyB2YWxpZGF0ZSB1c2VyS2V5IGZvciB1bnNpZ25lZCBzd2VlcFxuICAgIGlmIChpc1Vuc2lnbmVkU3dlZXAgJiYgIVV0aWxzLmlzVmFsaWRQdWJsaWNLZXkocGFyYW1zLnVzZXJLZXkpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgdXNlcktleSwgZ290OiAnICsgcGFyYW1zLnVzZXJLZXkpO1xuICAgIH1cblxuICAgIC8vIHZhbGlkYXRlIGJhY2t1cEtleSBmb3IgdW5zaWduZWQgc3dlZXBcbiAgICBpZiAoaXNVbnNpZ25lZFN3ZWVwICYmICFVdGlscy5pc1ZhbGlkUHVibGljS2V5KHBhcmFtcy5iYWNrdXBLZXkpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgYmFja3VwS2V5LCBnb3Q6ICcgKyBwYXJhbXMuYmFja3VwS2V5KTtcbiAgICB9XG5cbiAgICBjb25zdCB7IGFkZHJlc3M6IGRlc3RpbmF0aW9uQWRkcmVzcywgbWVtb0lkIH0gPSBVdGlscy5nZXRBZGRyZXNzRGV0YWlscyhwYXJhbXMucmVjb3ZlcnlEZXN0aW5hdGlvbik7XG5cbiAgICBjb25zdCBjbGllbnQgPSB0aGlzLmdldEhiYXJDbGllbnQoKTtcblxuICAgIGNvbnN0IGJhbGFuY2UgPSBhd2FpdCB0aGlzLmdldEFjY291bnRCYWxhbmNlKHBhcmFtcy5yb290QWRkcmVzcywgY2xpZW50KTtcbiAgICBjb25zdCBuYXRpdmVCYWxhbmNlID0gSGJhclVuaXQuZnJvbVN0cmluZyhiYWxhbmNlLmhiYXJzKS50b1RpbnliYXJzKCkudG9TdHJpbmcoKTtcbiAgICBjb25zdCBmZWUgPSBwYXJhbXMubWF4RmVlID8gcGFyYW1zLm1heEZlZSA6ICcxMDAwMDAwMCc7XG5cbiAgICBpZiAobmV3IEJpZ051bWJlcihuYXRpdmVCYWxhbmNlKS5pc1plcm8oKSB8fCBuZXcgQmlnTnVtYmVyKG5hdGl2ZUJhbGFuY2UpLmlzTGVzc1RoYW5PckVxdWFsVG8oZmVlKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnN1ZmZpY2llbnQgYmFsYW5jZSB0byByZWNvdmVyLCBnb3QgYmFsYW5jZTogJyArIG5hdGl2ZUJhbGFuY2UgKyAnIGZlZTogJyArIGZlZSk7XG4gICAgfVxuXG4gICAgY29uc3Qgbm9kZUlkID0gcGFyYW1zLm5vZGVJZCA/IHBhcmFtcy5ub2RlSWQgOiAnMC4wLjMnO1xuXG4gICAgY29uc3Qgc3BlbmRhYmxlQW1vdW50ID0gbmV3IEJpZ051bWJlcihuYXRpdmVCYWxhbmNlKS5taW51cyhmZWUpLnRvU3RyaW5nKCk7XG5cbiAgICBjb25zdCB0eEJ1aWxkZXIgPSB0aGlzLmdldEJ1aWxkZXJGYWN0b3J5KCkuZ2V0VHJhbnNmZXJCdWlsZGVyKCk7XG4gICAgdHhCdWlsZGVyLm5vZGUoeyBub2RlSWQgfSk7XG4gICAgdHhCdWlsZGVyLmZlZSh7IGZlZSB9KTtcbiAgICB0eEJ1aWxkZXIuc291cmNlKHsgYWRkcmVzczogcGFyYW1zLnJvb3RBZGRyZXNzIH0pO1xuICAgIHR4QnVpbGRlci5zZW5kKHsgYWRkcmVzczogZGVzdGluYXRpb25BZGRyZXNzLCBhbW91bnQ6IHNwZW5kYWJsZUFtb3VudCB9KTtcbiAgICB0eEJ1aWxkZXIudmFsaWREdXJhdGlvbigxODApO1xuXG4gICAgaWYgKG1lbW9JZCkge1xuICAgICAgdHhCdWlsZGVyLm1lbW8obWVtb0lkKTtcbiAgICB9XG5cbiAgICBpZiAocGFyYW1zLnN0YXJ0VGltZSkge1xuICAgICAgdHhCdWlsZGVyLnN0YXJ0VGltZShVdGlscy5ub3JtYWxpemVTdGFydHRpbWUocGFyYW1zLnN0YXJ0VGltZSkpO1xuICAgIH1cbiAgICBpZiAoaXNVbnNpZ25lZFN3ZWVwKSB7XG4gICAgICBjb25zdCB0eCA9IGF3YWl0IHR4QnVpbGRlci5idWlsZCgpO1xuICAgICAgY29uc3QgdHhKc29uID0gdHgudG9Kc29uKCk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB0eEhleDogdHgudG9Ccm9hZGNhc3RGb3JtYXQoKSxcbiAgICAgICAgY29pbjogdGhpcy5nZXRDaGFpbigpLFxuICAgICAgICBpZDogdHhKc29uLmlkLFxuICAgICAgICBzdGFydFRpbWU6IHR4SnNvbi5zdGFydFRpbWUsXG4gICAgICAgIHZhbGlkRHVyYXRpb246IHR4SnNvbi52YWxpZER1cmF0aW9uLFxuICAgICAgICBub2RlSWQ6IHR4SnNvbi5ub2RlLFxuICAgICAgICBtZW1vOiB0eEpzb24ubWVtbyxcbiAgICAgICAgdXNlcktleTogcGFyYW1zLnVzZXJLZXksXG4gICAgICAgIGJhY2t1cEtleTogcGFyYW1zLmJhY2t1cEtleSxcbiAgICAgICAgYml0Z29LZXk6IHBhcmFtcy5iaXRnb0tleSxcbiAgICAgICAgbWF4RmVlOiBmZWUsXG4gICAgICAgIGFkZHJlc3M6IHBhcmFtcy5yb290QWRkcmVzcyxcbiAgICAgICAgcmVjaXBpZW50czogdHhKc29uLmluc3RydWN0aW9uc0RhdGEucGFyYW1zLnJlY2lwaWVudHMsXG4gICAgICAgIGFtb3VudDogdHhKc29uLmFtb3VudCxcbiAgICAgICAganNvbjogdHhKc29uLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICB0eEJ1aWxkZXIuc2lnbih7IGtleTogdXNlclBydiB9KTtcbiAgICB0eEJ1aWxkZXIuc2lnbih7IGtleTogYmFja1VwIH0pO1xuXG4gICAgY29uc3QgdHggPSBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKTtcblxuICAgIHJldHVybiB7XG4gICAgICB0eDogdHgudG9Ccm9hZGNhc3RGb3JtYXQoKSxcbiAgICAgIGlkOiB0eC50b0pzb24oKS5pZCxcbiAgICAgIGNvaW46IHRoaXMuZ2V0Q2hhaW4oKSxcbiAgICAgIHN0YXJ0VGltZTogdHgudG9Kc29uKCkuc3RhcnRUaW1lLFxuICAgICAgbm9kZUlkOiB0eC50b0pzb24oKS5ub2RlLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogRXhwbGFpbiBhIEhlZGVyYSB0cmFuc2FjdGlvbiBmcm9tIHR4SGV4XG4gICAqIEBwYXJhbSBwYXJhbXNcbiAgICovXG4gIGFzeW5jIGV4cGxhaW5UcmFuc2FjdGlvbihwYXJhbXM6IEV4cGxhaW5UcmFuc2FjdGlvbk9wdGlvbnMpOiBQcm9taXNlPFRyYW5zYWN0aW9uRXhwbGFuYXRpb24+IHtcbiAgICBjb25zdCB0eEhleCA9IHBhcmFtcy50eEhleCB8fCAocGFyYW1zLmhhbGZTaWduZWQgJiYgcGFyYW1zLmhhbGZTaWduZWQudHhIZXgpO1xuICAgIGlmICghdHhIZXgpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignbWlzc2luZyBleHBsYWluIHR4IHBhcmFtZXRlcnMnKTtcbiAgICB9XG5cbiAgICBjb25zdCBmYWN0b3J5ID0gdGhpcy5nZXRCdWlsZGVyRmFjdG9yeSgpO1xuICAgIGNvbnN0IHR4QnVpbGRlciA9IGZhY3RvcnkuZnJvbSh0eEhleCk7XG4gICAgY29uc3QgdHggPSBhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKTtcbiAgICBjb25zdCB0eEpzb24gPSB0eC50b0pzb24oKTtcblxuICAgIGxldCBvdXRwdXRBbW91bnQgPSBuZXcgQmlnTnVtYmVyKDApO1xuICAgIGNvbnN0IG91dHB1dHM6IHsgYWRkcmVzczogc3RyaW5nOyBhbW91bnQ6IHN0cmluZzsgbWVtbzogc3RyaW5nOyB0b2tlbk5hbWU/OiBzdHJpbmcgfVtdID0gW107XG4gICAgLy8gVE9ETyhCRy0yNDgwOSk6IGdldCB0aGUgbWVtbyBmcm9tIHRoZSB0b0pzb25cbiAgICBsZXQgbWVtbyA9ICcnO1xuICAgIGlmIChwYXJhbXMubWVtbykge1xuICAgICAgbWVtbyA9IHBhcmFtcy5tZW1vLnZhbHVlO1xuICAgIH1cblxuICAgIHN3aXRjaCAodHhKc29uLmluc3RydWN0aW9uc0RhdGEudHlwZSkge1xuICAgICAgY2FzZSAnY3J5cHRvVHJhbnNmZXInOlxuICAgICAgICBjb25zdCByZWNpcGllbnRzID0gdHhKc29uLmluc3RydWN0aW9uc0RhdGEucGFyYW1zLnJlY2lwaWVudHMgfHwgW107XG4gICAgICAgIHJlY2lwaWVudHMuZm9yRWFjaCgocmVjaXBpZW50KSA9PiB7XG4gICAgICAgICAgaWYgKCFyZWNpcGllbnQudG9rZW5OYW1lKSB7XG4gICAgICAgICAgICAvLyB0b2tlbiB0cmFuc2ZlciBkb2Vzbid0IGNoYW5nZSBvdXRwdXRBbW91bnRcbiAgICAgICAgICAgIG91dHB1dEFtb3VudCA9IG91dHB1dEFtb3VudC5wbHVzKHJlY2lwaWVudC5hbW91bnQpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBvdXRwdXRzLnB1c2goe1xuICAgICAgICAgICAgYWRkcmVzczogcmVjaXBpZW50LmFkZHJlc3MsXG4gICAgICAgICAgICBhbW91bnQ6IHJlY2lwaWVudC5hbW91bnQudG9TdHJpbmcoKSxcbiAgICAgICAgICAgIG1lbW8sXG4gICAgICAgICAgICAuLi4ocmVjaXBpZW50LnRva2VuTmFtZSAmJiB7XG4gICAgICAgICAgICAgIHRva2VuTmFtZTogcmVjaXBpZW50LnRva2VuTmFtZSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgJ3Rva2VuQXNzb2NpYXRlJzpcbiAgICAgICAgY29uc3QgdG9rZW5zID0gdHhKc29uLmluc3RydWN0aW9uc0RhdGEucGFyYW1zLnRva2VuTmFtZXMgfHwgW107XG4gICAgICAgIGNvbnN0IGFjY291bnRJZCA9IHR4SnNvbi5pbnN0cnVjdGlvbnNEYXRhLnBhcmFtcy5hY2NvdW50SWQ7XG4gICAgICAgIHRva2Vucy5mb3JFYWNoKCh0b2tlbikgPT4ge1xuICAgICAgICAgIG91dHB1dHMucHVzaCh7XG4gICAgICAgICAgICBhZGRyZXNzOiBhY2NvdW50SWQsXG4gICAgICAgICAgICBhbW91bnQ6ICcwJyxcbiAgICAgICAgICAgIG1lbW8sXG4gICAgICAgICAgICB0b2tlbk5hbWU6IHRva2VuLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVHJhbnNhY3Rpb24gZm9ybWF0IG91dHNpZGUgb2YgY3J5cHRvVHJhbnNmZXIgbm90IHN1cHBvcnRlZCBmb3IgZXhwbGFuYXRpb24uJyk7XG4gICAgfVxuXG4gICAgY29uc3QgZGlzcGxheU9yZGVyID0gW1xuICAgICAgJ2lkJyxcbiAgICAgICdvdXRwdXRBbW91bnQnLFxuICAgICAgJ2NoYW5nZUFtb3VudCcsXG4gICAgICAnb3V0cHV0cycsXG4gICAgICAnY2hhbmdlT3V0cHV0cycsXG4gICAgICAnZmVlJyxcbiAgICAgICd0aW1lc3RhbXAnLFxuICAgICAgJ2V4cGlyYXRpb24nLFxuICAgICAgJ21lbW8nLFxuICAgIF07XG5cbiAgICByZXR1cm4ge1xuICAgICAgZGlzcGxheU9yZGVyLFxuICAgICAgaWQ6IHR4SnNvbi5pZCxcbiAgICAgIG91dHB1dHMsXG4gICAgICBvdXRwdXRBbW91bnQ6IG91dHB1dEFtb3VudC50b1N0cmluZygpLFxuICAgICAgY2hhbmdlT3V0cHV0czogW10sIC8vIGFjY291bnQgYmFzZWQgZG9lcyBub3QgdXNlIGNoYW5nZSBvdXRwdXRzXG4gICAgICBjaGFuZ2VBbW91bnQ6ICcwJywgLy8gYWNjb3VudCBiYXNlIGRvZXMgbm90IG1ha2UgY2hhbmdlXG4gICAgICBmZWU6IHBhcmFtcy5mZWVJbmZvPy5mZWUgfHwgdHhKc29uLmZlZSwgLy8gaW4gdGhlIGluc3RhbmNlIG5vIGZlZUluZm8gaXMgcGFzc2VkIGluIGFzIGEgcGFyYW0sIHNob3cgdGhlIGZlZSBnaXZlbiBieSB0aGUgdHhKU09OXG4gICAgICB0aW1lc3RhbXA6IHR4SnNvbi5zdGFydFRpbWUsXG4gICAgICBleHBpcmF0aW9uOiB0eEpzb24udmFsaWREdXJhdGlvbixcbiAgICB9IGFzIGFueTtcbiAgfVxuXG4gIGlzU3RlbGxhclNlZWQoc2VlZDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIFNlZWRWYWxpZGF0b3IuaXNWYWxpZEVkMjU1MTlTZWVkRm9yQ29pbihzZWVkLCBDb2luRmFtaWx5LlhMTSk7XG4gIH1cblxuICBjb252ZXJ0RnJvbVN0ZWxsYXJTZWVkKHNlZWQ6IHN0cmluZyk6IHN0cmluZyB8IG51bGwge1xuICAgIC8vIGFzc3VtZSB0aGlzIGlzIGEgdHJ1c3QgY3VzdG9kaWFsIHNlZWQgaWYgaXRzIGEgdmFsaWQgZWQyNTUxOSBwcnZcbiAgICBpZiAoIXRoaXMuaXNTdGVsbGFyU2VlZChzZWVkKSB8fCBTZWVkVmFsaWRhdG9yLmhhc0NvbXBldGluZ1NlZWRGb3JtYXRzKHNlZWQpKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAoU2VlZFZhbGlkYXRvci5pc1ZhbGlkRWQyNTUxOVNlZWRGb3JDb2luKHNlZWQsIENvaW5GYW1pbHkuWExNKSkge1xuICAgICAgY29uc3Qga2V5RnJvbVNlZWQgPSBuZXcgSGJhcktleVBhaXIoeyBzZWVkOiBzdGVsbGFyLlN0cktleS5kZWNvZGVFZDI1NTE5U2VjcmV0U2VlZChzZWVkKSB9KTtcbiAgICAgIGNvbnN0IGtleXMgPSBrZXlGcm9tU2VlZC5nZXRLZXlzKCk7XG4gICAgICBpZiAoa2V5cyAhPT0gdW5kZWZpbmVkICYmIGtleXMucHJ2KSB7XG4gICAgICAgIHJldHVybiBrZXlzLnBydjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGlzVmFsaWRQdWIocHViOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gVXRpbHMuaXNWYWxpZFB1YmxpY0tleShwdWIpO1xuICB9XG5cbiAgcHVibGljIGdldFRva2VuRW5hYmxlbWVudENvbmZpZygpOiBUb2tlbkVuYWJsZW1lbnRDb25maWcge1xuICAgIHJldHVybiB7XG4gICAgICByZXF1aXJlc1Rva2VuRW5hYmxlbWVudDogdHJ1ZSxcbiAgICAgIHN1cHBvcnRzTXVsdGlwbGVUb2tlbkVuYWJsZW1lbnRzOiB0cnVlLFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGdldEJ1aWxkZXJGYWN0b3J5KCk6IFRyYW5zYWN0aW9uQnVpbGRlckZhY3Rvcnkge1xuICAgIHJldHVybiBuZXcgVHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeShjb2lucy5nZXQodGhpcy5nZXRDaGFpbigpKSk7XG4gIH1cblxuICBwcml2YXRlIGdldEhiYXJDbGllbnQoKTogQ2xpZW50IHtcbiAgICBjb25zdCBjbGllbnQgPSB0aGlzLmJpdGdvLmdldEVudigpID09PSAncHJvZCcgPyBDbGllbnQuZm9yTWFpbm5ldCgpIDogQ2xpZW50LmZvclRlc3RuZXQoKTtcbiAgICByZXR1cm4gY2xpZW50O1xuICB9XG5cbiAgYXN5bmMgZ2V0QWNjb3VudEJhbGFuY2UoYWNjb3VudElkOiBzdHJpbmcsIGNsaWVudDogQ2xpZW50KTogUHJvbWlzZTxBY2NvdW50QmFsYW5jZUpzb24+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgYmFsYW5jZSA9IGF3YWl0IG5ldyBBY2NvdW50QmFsYW5jZVF1ZXJ5KCkuc2V0QWNjb3VudElkKGFjY291bnRJZCkuZXhlY3V0ZShjbGllbnQpO1xuXG4gICAgICByZXR1cm4gYmFsYW5jZS50b0pTT04oKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZhaWxlZCB0byBnZXQgYWNjb3VudCBiYWxhbmNlLCBlcnJvcjogJyArIGUubWVzc2FnZSk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgYnJvYWRjYXN0VHJhbnNhY3Rpb24oe1xuICAgIHNlcmlhbGl6ZWRTaWduZWRUcmFuc2FjdGlvbixcbiAgICBzdGFydFRpbWUsXG4gIH06IEJyb2FkY2FzdFRyYW5zYWN0aW9uT3B0aW9ucyk6IFByb21pc2U8QnJvYWRjYXN0VHJhbnNhY3Rpb25SZXN1bHQ+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgaGJhclR4ID0gSGJhclRyYW5zYWN0aW9uLmZyb21CeXRlcyhVdGlscy50b1VpbnQ4QXJyYXkoc2VyaWFsaXplZFNpZ25lZFRyYW5zYWN0aW9uKSk7XG5cbiAgICAgIGlmIChzdGFydFRpbWUpIHtcbiAgICAgICAgVXRpbHMuaXNWYWxpZFRpbWVTdHJpbmcoc3RhcnRUaW1lKTtcbiAgICAgICAgd2hpbGUgKCFVdGlscy5zaG91bGRCcm9hZGNhc3ROb3coc3RhcnRUaW1lKSkge1xuICAgICAgICAgIGF3YWl0IFV0aWxzLnNsZWVwKDEwMDApO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzLmNsaWVudEJyb2FkY2FzdFRyYW5zYWN0aW9uKGhiYXJUeCk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdGYWlsZWQgdG8gYnJvYWRjYXN0IHRyYW5zYWN0aW9uLCBlcnJvcjogJyArIGUubWVzc2FnZSk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgY2xpZW50QnJvYWRjYXN0VHJhbnNhY3Rpb24oaGJhclR4OiBIYmFyVHJhbnNhY3Rpb24pIHtcbiAgICBjb25zdCBjbGllbnQgPSB0aGlzLmdldEhiYXJDbGllbnQoKTtcbiAgICBjb25zdCB0cmFuc2FjdGlvblJlc3BvbnNlID0gYXdhaXQgaGJhclR4LmV4ZWN1dGUoY2xpZW50KTtcbiAgICBjb25zdCB0cmFuc2FjdGlvblJlY2VpcHQgPSBhd2FpdCB0cmFuc2FjdGlvblJlc3BvbnNlLmdldFJlY2VpcHQoY2xpZW50KTtcblxuICAgIHJldHVybiB7IHR4SWQ6IHRyYW5zYWN0aW9uUmVzcG9uc2UudHJhbnNhY3Rpb25JZC50b1N0cmluZygpLCBzdGF0dXM6IHRyYW5zYWN0aW9uUmVjZWlwdC5zdGF0dXMudG9TdHJpbmcoKSB9O1xuICB9XG59XG4iXX0=
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bitgo-beta/sdk-coin-hbar",
3
- "version": "1.3.3-alpha.100",
3
+ "version": "1.3.3-alpha.101",
4
4
  "description": "BitGo SDK coin library for Hbar",
5
5
  "main": "./dist/src/index.js",
6
6
  "types": "./dist/src/index.d.ts",
@@ -40,9 +40,9 @@
40
40
  ]
41
41
  },
42
42
  "dependencies": {
43
- "@bitgo-beta/sdk-coin-algo": "1.3.3-alpha.100",
44
- "@bitgo-beta/sdk-core": "2.4.1-alpha.100",
45
- "@bitgo-beta/statics": "10.0.1-alpha.100",
43
+ "@bitgo-beta/sdk-coin-algo": "1.3.3-alpha.101",
44
+ "@bitgo-beta/sdk-core": "2.4.1-alpha.101",
45
+ "@bitgo-beta/statics": "10.0.1-alpha.101",
46
46
  "@hashgraph/proto": "2.12.0",
47
47
  "@hashgraph/sdk": "2.29.0",
48
48
  "@stablelib/sha384": "^1.0.0",
@@ -54,8 +54,8 @@
54
54
  "tweetnacl": "^1.0.3"
55
55
  },
56
56
  "devDependencies": {
57
- "@bitgo-beta/sdk-api": "1.6.1-alpha.100",
58
- "@bitgo-beta/sdk-test": "^6.0.0"
57
+ "@bitgo-beta/sdk-api": "1.6.1-alpha.101",
58
+ "@bitgo-beta/sdk-test": "^7.1.0"
59
59
  },
60
- "gitHead": "9d875e8a0ac042363b1bd44de02809f543eefdd6"
60
+ "gitHead": "67cfca3e3a8962a05744f20b2de625fd6d80772d"
61
61
  }