@bitgo-beta/sdk-coin-tempo 1.0.0-alpha.73 → 1.0.0-alpha.75

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.
@@ -22,9 +22,7 @@ export declare const TIP20_DECIMALS = 6;
22
22
  * Tempo uses EIP-7702 Account Abstraction with transaction type 0x76
23
23
  */
24
24
  export declare const AA_TRANSACTION_TYPE: "0x76";
25
- /**
26
- * pathUSD primary TIP-20 stablecoin on Tempo (6 decimals)
27
- * Used as the default feeToken for all transactions.
28
- */
29
- export declare const PATH_USD_ADDRESS = "0x20c0000000000000000000000000000000000000";
25
+ /** TIP-20 token names for pathUSD — used to look up contract address from statics */
26
+ export declare const PATH_USD_TOKEN_MAINNET = "tempo:pathusd";
27
+ export declare const PATH_USD_TOKEN_TESTNET = "ttempo:pathusd";
30
28
  //# sourceMappingURL=constants.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../../src/lib/constants.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,eAAO,MAAM,YAAY,UAAU,CAAC;AACpC,eAAO,MAAM,YAAY,WAAW,CAAC;AAErC,eAAO,MAAM,mBAAmB,QAAwB,CAAC;AACzD,eAAO,MAAM,sBAAsB,QAAsB,CAAC;AAE1D;;GAEG;AACH,eAAO,MAAM,eAAe;;;CAGlB,CAAC;AAEX;;;GAGG;AACH,eAAO,MAAM,cAAc,IAAI,CAAC;AAEhC;;;GAGG;AACH,eAAO,MAAM,mBAAmB,EAAG,MAAe,CAAC;AAEnD;;;GAGG;AACH,eAAO,MAAM,gBAAgB,+CAA+C,CAAC"}
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../../src/lib/constants.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,eAAO,MAAM,YAAY,UAAU,CAAC;AACpC,eAAO,MAAM,YAAY,WAAW,CAAC;AAErC,eAAO,MAAM,mBAAmB,QAAwB,CAAC;AACzD,eAAO,MAAM,sBAAsB,QAAsB,CAAC;AAE1D;;GAEG;AACH,eAAO,MAAM,eAAe;;;CAGlB,CAAC;AAEX;;;GAGG;AACH,eAAO,MAAM,cAAc,IAAI,CAAC;AAEhC;;;GAGG;AACH,eAAO,MAAM,mBAAmB,EAAG,MAAe,CAAC;AAEnD,qFAAqF;AACrF,eAAO,MAAM,sBAAsB,kBAAkB,CAAC;AACtD,eAAO,MAAM,sBAAsB,mBAAmB,CAAC"}
@@ -3,7 +3,7 @@
3
3
  * Constants for Tempo blockchain (EVM-compatible)
4
4
  */
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.PATH_USD_ADDRESS = exports.AA_TRANSACTION_TYPE = exports.TIP20_DECIMALS = exports.TEMPO_CHAIN_IDS = exports.VALID_PUBLIC_KEY_REGEX = exports.VALID_ADDRESS_REGEX = exports.TESTNET_COIN = exports.MAINNET_COIN = void 0;
6
+ exports.PATH_USD_TOKEN_TESTNET = exports.PATH_USD_TOKEN_MAINNET = exports.AA_TRANSACTION_TYPE = exports.TIP20_DECIMALS = exports.TEMPO_CHAIN_IDS = exports.VALID_PUBLIC_KEY_REGEX = exports.VALID_ADDRESS_REGEX = exports.TESTNET_COIN = exports.MAINNET_COIN = void 0;
7
7
  exports.MAINNET_COIN = 'tempo';
8
8
  exports.TESTNET_COIN = 'ttempo';
9
9
  exports.VALID_ADDRESS_REGEX = /^0x[a-fA-F0-9]{40}$/;
@@ -25,9 +25,7 @@ exports.TIP20_DECIMALS = 6;
25
25
  * Tempo uses EIP-7702 Account Abstraction with transaction type 0x76
26
26
  */
27
27
  exports.AA_TRANSACTION_TYPE = '0x76';
28
- /**
29
- * pathUSD — primary TIP-20 stablecoin on Tempo (6 decimals)
30
- * Used as the default feeToken for all transactions.
31
- */
32
- exports.PATH_USD_ADDRESS = '0x20c0000000000000000000000000000000000000';
33
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3RhbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9jb25zdGFudHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOztHQUVHOzs7QUFFVSxRQUFBLFlBQVksR0FBRyxPQUFPLENBQUM7QUFDdkIsUUFBQSxZQUFZLEdBQUcsUUFBUSxDQUFDO0FBRXhCLFFBQUEsbUJBQW1CLEdBQUcscUJBQXFCLENBQUM7QUFDNUMsUUFBQSxzQkFBc0IsR0FBRyxtQkFBbUIsQ0FBQztBQUUxRDs7R0FFRztBQUNVLFFBQUEsZUFBZSxHQUFHO0lBQzdCLE9BQU8sRUFBRSxJQUFJO0lBQ2IsT0FBTyxFQUFFLEtBQUssRUFBRSxtQkFBbUI7Q0FDM0IsQ0FBQztBQUVYOzs7R0FHRztBQUNVLFFBQUEsY0FBYyxHQUFHLENBQUMsQ0FBQztBQUVoQzs7O0dBR0c7QUFDVSxRQUFBLG1CQUFtQixHQUFHLE1BQWUsQ0FBQztBQUVuRDs7O0dBR0c7QUFDVSxRQUFBLGdCQUFnQixHQUFHLDRDQUE0QyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb25zdGFudHMgZm9yIFRlbXBvIGJsb2NrY2hhaW4gKEVWTS1jb21wYXRpYmxlKVxuICovXG5cbmV4cG9ydCBjb25zdCBNQUlOTkVUX0NPSU4gPSAndGVtcG8nO1xuZXhwb3J0IGNvbnN0IFRFU1RORVRfQ09JTiA9ICd0dGVtcG8nO1xuXG5leHBvcnQgY29uc3QgVkFMSURfQUREUkVTU19SRUdFWCA9IC9eMHhbYS1mQS1GMC05XXs0MH0kLztcbmV4cG9ydCBjb25zdCBWQUxJRF9QVUJMSUNfS0VZX1JFR0VYID0gL15bQS1GYS1mMC05XXs2NH0kLztcblxuLyoqXG4gKiBUZW1wbyBDaGFpbiBJRHNcbiAqL1xuZXhwb3J0IGNvbnN0IFRFTVBPX0NIQUlOX0lEUyA9IHtcbiAgTUFJTk5FVDogNDIxNyxcbiAgVEVTVE5FVDogNDI0MzEsIC8vIE1vZGVyYXRvIHRlc3RuZXRcbn0gYXMgY29uc3Q7XG5cbi8qKlxuICogVElQLTIwIFRva2VuIFN0YW5kYXJkXG4gKiBUSVAtMjAgdXNlcyA2IGRlY2ltYWxzICh1bmxpa2UgRVJDLTIwJ3Mgc3RhbmRhcmQgMTggZGVjaW1hbHMpXG4gKi9cbmV4cG9ydCBjb25zdCBUSVAyMF9ERUNJTUFMUyA9IDY7XG5cbi8qKlxuICogQUEgVHJhbnNhY3Rpb24gVHlwZVxuICogVGVtcG8gdXNlcyBFSVAtNzcwMiBBY2NvdW50IEFic3RyYWN0aW9uIHdpdGggdHJhbnNhY3Rpb24gdHlwZSAweDc2XG4gKi9cbmV4cG9ydCBjb25zdCBBQV9UUkFOU0FDVElPTl9UWVBFID0gJzB4NzYnIGFzIGNvbnN0O1xuXG4vKipcbiAqIHBhdGhVU0Qg4oCUIHByaW1hcnkgVElQLTIwIHN0YWJsZWNvaW4gb24gVGVtcG8gKDYgZGVjaW1hbHMpXG4gKiBVc2VkIGFzIHRoZSBkZWZhdWx0IGZlZVRva2VuIGZvciBhbGwgdHJhbnNhY3Rpb25zLlxuICovXG5leHBvcnQgY29uc3QgUEFUSF9VU0RfQUREUkVTUyA9ICcweDIwYzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAnO1xuIl19
28
+ /** TIP-20 token names for pathUSD — used to look up contract address from statics */
29
+ exports.PATH_USD_TOKEN_MAINNET = 'tempo:pathusd';
30
+ exports.PATH_USD_TOKEN_TESTNET = 'ttempo:pathusd';
31
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3RhbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9jb25zdGFudHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOztHQUVHOzs7QUFFVSxRQUFBLFlBQVksR0FBRyxPQUFPLENBQUM7QUFDdkIsUUFBQSxZQUFZLEdBQUcsUUFBUSxDQUFDO0FBRXhCLFFBQUEsbUJBQW1CLEdBQUcscUJBQXFCLENBQUM7QUFDNUMsUUFBQSxzQkFBc0IsR0FBRyxtQkFBbUIsQ0FBQztBQUUxRDs7R0FFRztBQUNVLFFBQUEsZUFBZSxHQUFHO0lBQzdCLE9BQU8sRUFBRSxJQUFJO0lBQ2IsT0FBTyxFQUFFLEtBQUssRUFBRSxtQkFBbUI7Q0FDM0IsQ0FBQztBQUVYOzs7R0FHRztBQUNVLFFBQUEsY0FBYyxHQUFHLENBQUMsQ0FBQztBQUVoQzs7O0dBR0c7QUFDVSxRQUFBLG1CQUFtQixHQUFHLE1BQWUsQ0FBQztBQUVuRCxxRkFBcUY7QUFDeEUsUUFBQSxzQkFBc0IsR0FBRyxlQUFlLENBQUM7QUFDekMsUUFBQSxzQkFBc0IsR0FBRyxnQkFBZ0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ29uc3RhbnRzIGZvciBUZW1wbyBibG9ja2NoYWluIChFVk0tY29tcGF0aWJsZSlcbiAqL1xuXG5leHBvcnQgY29uc3QgTUFJTk5FVF9DT0lOID0gJ3RlbXBvJztcbmV4cG9ydCBjb25zdCBURVNUTkVUX0NPSU4gPSAndHRlbXBvJztcblxuZXhwb3J0IGNvbnN0IFZBTElEX0FERFJFU1NfUkVHRVggPSAvXjB4W2EtZkEtRjAtOV17NDB9JC87XG5leHBvcnQgY29uc3QgVkFMSURfUFVCTElDX0tFWV9SRUdFWCA9IC9eW0EtRmEtZjAtOV17NjR9JC87XG5cbi8qKlxuICogVGVtcG8gQ2hhaW4gSURzXG4gKi9cbmV4cG9ydCBjb25zdCBURU1QT19DSEFJTl9JRFMgPSB7XG4gIE1BSU5ORVQ6IDQyMTcsXG4gIFRFU1RORVQ6IDQyNDMxLCAvLyBNb2RlcmF0byB0ZXN0bmV0XG59IGFzIGNvbnN0O1xuXG4vKipcbiAqIFRJUC0yMCBUb2tlbiBTdGFuZGFyZFxuICogVElQLTIwIHVzZXMgNiBkZWNpbWFscyAodW5saWtlIEVSQy0yMCdzIHN0YW5kYXJkIDE4IGRlY2ltYWxzKVxuICovXG5leHBvcnQgY29uc3QgVElQMjBfREVDSU1BTFMgPSA2O1xuXG4vKipcbiAqIEFBIFRyYW5zYWN0aW9uIFR5cGVcbiAqIFRlbXBvIHVzZXMgRUlQLTc3MDIgQWNjb3VudCBBYnN0cmFjdGlvbiB3aXRoIHRyYW5zYWN0aW9uIHR5cGUgMHg3NlxuICovXG5leHBvcnQgY29uc3QgQUFfVFJBTlNBQ1RJT05fVFlQRSA9ICcweDc2JyBhcyBjb25zdDtcblxuLyoqIFRJUC0yMCB0b2tlbiBuYW1lcyBmb3IgcGF0aFVTRCDigJQgdXNlZCB0byBsb29rIHVwIGNvbnRyYWN0IGFkZHJlc3MgZnJvbSBzdGF0aWNzICovXG5leHBvcnQgY29uc3QgUEFUSF9VU0RfVE9LRU5fTUFJTk5FVCA9ICd0ZW1wbzpwYXRodXNkJztcbmV4cG9ydCBjb25zdCBQQVRIX1VTRF9UT0tFTl9URVNUTkVUID0gJ3R0ZW1wbzpwYXRodXNkJztcbiJdfQ==
@@ -1 +1 @@
1
- {"version":3,"file":"tempo.d.ts","sourceRoot":"","sources":["../../src/tempo.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EACL,uBAAuB,EACvB,cAAc,EACd,kBAAkB,EAClB,oBAAoB,EACpB,YAAY,EACZ,kBAAkB,EAClB,2BAA2B,EAC3B,uBAAuB,EACvB,0BAA0B,EAG3B,MAAM,0BAA0B,CAAC;AAClC,OAAO,KAAK,KAAK,aAAa,MAAM,oBAAoB,CAAC;AACzD,OAAO,EACL,QAAQ,EACR,SAAS,EAGT,YAAY,EACZ,uBAAuB,EACvB,iBAAiB,EAEjB,eAAe,EACf,oCAAoC,EAKrC,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EAAE,QAAQ,IAAI,eAAe,EAAS,MAAM,qBAAqB,CAAC;AAazE,qBAAa,KAAM,SAAQ,uBAAuB;IAChD,SAAS,aAAa,KAAK,EAAE,SAAS,EAAE,WAAW,CAAC,EAAE,QAAQ,CAAC,eAAe,CAAC;IAI/E;;OAEG;IACH,MAAM,CAAC,cAAc,CAAC,KAAK,EAAE,SAAS,EAAE,WAAW,CAAC,EAAE,QAAQ,CAAC,eAAe,CAAC,GAAG,QAAQ;IAI1F;;OAEG;IACH,QAAQ,IAAI,MAAM;IAIlB;;OAEG;IACH,WAAW,IAAI,MAAM;IAIrB,kBAAkB;IAClB,aAAa,IAAI,MAAM;IAIvB;;;OAGG;IACH,wBAAwB,IAAI,OAAO;IAInC;;OAEG;IACH,WAAW,IAAI,OAAO;IAItB;;OAEG;IACH,eAAe,IAAI,YAAY;IAI/B;;;;;OAKG;IACH,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAaxC;;;;;;OAMG;IACH,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE;IAsDnG;;;;OAIG;IACH,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO;IAItC;;;;OAIG;IACG,eAAe,CAAC,MAAM,EAAE,uBAAuB,GAAG,0BAA0B,GAAG,OAAO,CAAC,OAAO,CAAC;IA4BrG;;;OAGG;IACG,gBAAgB,CAAC,MAAM,EAAE,uBAAuB,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAyBnF;;;OAGG;IACG,iBAAiB,CAAC,MAAM,EAAE,2BAA2B,GAAG,OAAO,CAAC,OAAO,CAAC;IAyE9E;;;;;OAKG;IACH,6BAA6B,CAAC,MAAM,EAAE,eAAe,EAAE,MAAM,EAAE,oCAAoC,GAAG,IAAI;IAQ1G;;;OAGG;IACG,+BAA+B,CACnC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC7B,MAAM,CAAC,EAAE,MAAM,GACd,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAWnC;;;;;;;OAOG;YACW,aAAa;IAkD3B;;;;;;;OAOG;YACW,iBAAiB;IAwC/B;;;;;;OAMG;cACa,UAAU,CACxB,MAAM,EAAE,cAAc,GACrB,OAAO,CAAC,YAAY,GAAG,kBAAkB,GAAG,oBAAoB,CAAC;IA0CpE;;;OAGG;cACa,wBAAwB,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,kBAAkB,GAAG,oBAAoB,CAAC;IAkDpH;;OAEG;IACH,SAAS,CAAC,qBAAqB,CAAC,MAAM,CAAC,EAAE,aAAa,CAAC,OAAO,GAAG,kBAAkB;CAGpF"}
1
+ {"version":3,"file":"tempo.d.ts","sourceRoot":"","sources":["../../src/tempo.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EACL,uBAAuB,EACvB,cAAc,EACd,kBAAkB,EAClB,oBAAoB,EACpB,YAAY,EACZ,kBAAkB,EAClB,2BAA2B,EAC3B,uBAAuB,EACvB,0BAA0B,EAG3B,MAAM,0BAA0B,CAAC;AAClC,OAAO,KAAK,KAAK,aAAa,MAAM,oBAAoB,CAAC;AACzD,OAAO,EACL,QAAQ,EACR,SAAS,EAGT,YAAY,EACZ,uBAAuB,EACvB,iBAAiB,EAEjB,eAAe,EACf,oCAAoC,EAKrC,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EAAE,QAAQ,IAAI,eAAe,EAAS,MAAM,qBAAqB,CAAC;AAazE,qBAAa,KAAM,SAAQ,uBAAuB;IAChD,SAAS,aAAa,KAAK,EAAE,SAAS,EAAE,WAAW,CAAC,EAAE,QAAQ,CAAC,eAAe,CAAC;IAI/E;;OAEG;IACH,MAAM,CAAC,cAAc,CAAC,KAAK,EAAE,SAAS,EAAE,WAAW,CAAC,EAAE,QAAQ,CAAC,eAAe,CAAC,GAAG,QAAQ;IAI1F;;OAEG;IACH,QAAQ,IAAI,MAAM;IAIlB;;OAEG;IACH,WAAW,IAAI,MAAM;IAIrB,kBAAkB;IAClB,aAAa,IAAI,MAAM;IAIvB;;;OAGG;IACH,wBAAwB,IAAI,OAAO;IAInC;;OAEG;IACH,WAAW,IAAI,OAAO;IAItB;;OAEG;IACH,eAAe,IAAI,YAAY;IAI/B;;;;;OAKG;IACH,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAaxC;;;;;;OAMG;IACH,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE;IAsDnG;;;;OAIG;IACH,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO;IAItC;;;;OAIG;IACG,eAAe,CAAC,MAAM,EAAE,uBAAuB,GAAG,0BAA0B,GAAG,OAAO,CAAC,OAAO,CAAC;IA4BrG;;;OAGG;IACG,gBAAgB,CAAC,MAAM,EAAE,uBAAuB,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAyBnF;;;OAGG;IACG,iBAAiB,CAAC,MAAM,EAAE,2BAA2B,GAAG,OAAO,CAAC,OAAO,CAAC;IAyE9E;;;;;OAKG;IACH,6BAA6B,CAAC,MAAM,EAAE,eAAe,EAAE,MAAM,EAAE,oCAAoC,GAAG,IAAI;IAQ1G;;;OAGG;IACG,+BAA+B,CACnC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC7B,MAAM,CAAC,EAAE,MAAM,GACd,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAWnC;;;;;;;OAOG;YACW,aAAa;IAkD3B;;;;;;;OAOG;YACW,iBAAiB;IA8C/B;;;;;;OAMG;cACa,UAAU,CACxB,MAAM,EAAE,cAAc,GACrB,OAAO,CAAC,YAAY,GAAG,kBAAkB,GAAG,oBAAoB,CAAC;IA0CpE;;;OAGG;cACa,wBAAwB,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,kBAAkB,GAAG,oBAAoB,CAAC;IAkDpH;;OAEG;IACH,SAAS,CAAC,qBAAqB,CAAC,MAAM,CAAC,EAAE,aAAa,CAAC,OAAO,GAAG,kBAAkB;CAGpF"}
package/dist/src/tempo.js CHANGED
@@ -373,10 +373,15 @@ class Tempo extends abstract_eth_1.AbstractEthLikeNewCoins {
373
373
  * - If sweeping pathUSD itself, reserves gasLimit × maxFeePerGas / 10^12 pathUSD units for fees.
374
374
  */
375
375
  async buildTempoSweepTx(walletAddress, params) {
376
- const tokenAddress = params.tokenContractAddress ?? constants_1.PATH_USD_ADDRESS;
376
+ if (!params.tokenContractAddress) {
377
+ throw new Error('tokenContractAddress is required for sweep');
378
+ }
379
+ const tokenAddress = params.tokenContractAddress;
380
+ const pathUsdTokenName = this.getChain() === constants_1.MAINNET_COIN ? constants_1.PATH_USD_TOKEN_MAINNET : constants_1.PATH_USD_TOKEN_TESTNET;
381
+ const pathUsdAddress = statics_1.coins.get(pathUsdTokenName).contractAddress;
377
382
  const rawBalance = await this.queryAddressTokenBalance(tokenAddress, walletAddress, params.apiKey);
378
383
  const balance = BigInt(rawBalance.toString());
379
- const isPathUsd = tokenAddress.toLowerCase() === constants_1.PATH_USD_ADDRESS.toLowerCase();
384
+ const isPathUsd = tokenAddress.toLowerCase() === pathUsdAddress.toLowerCase();
380
385
  const gasLimitBig = BigInt(params.gasLimit ?? 700000);
381
386
  const maxFeePerGasBig = BigInt(params.eip1559?.maxFeePerGas ?? 20000000000);
382
387
  // 75% buffer on top of gasLimit × maxFeePerGas to cover actual on-chain gas variance
@@ -390,7 +395,7 @@ class Tempo extends abstract_eth_1.AbstractEthLikeNewCoins {
390
395
  const txBuilder = this.getTransactionBuilder();
391
396
  txBuilder
392
397
  .addOperation({ token: tokenAddress, to: params.recoveryDestination, amount: sweepAmountHuman })
393
- .feeToken(constants_1.PATH_USD_ADDRESS)
398
+ .feeToken(pathUsdAddress)
394
399
  .nonce(nonce)
395
400
  .gas(gasLimitBig)
396
401
  .maxFeePerGas(maxFeePerGasBig)
@@ -493,4 +498,4 @@ class Tempo extends abstract_eth_1.AbstractEthLikeNewCoins {
493
498
  }
494
499
  }
495
500
  exports.Tempo = Tempo;
496
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVtcG8uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdGVtcG8udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7O0dBRUc7QUFDSCwyREFZa0M7QUFFbEMsbURBZThCO0FBQzlCLHlEQUE0RDtBQUM1RCxpREFBeUU7QUFDekUsbUNBQWdDO0FBQ2hDLCtCQUFrRTtBQUNsRSx1Q0FLcUI7QUFDckIsK0NBQW1EO0FBQ25ELHlDQUEyQjtBQUMzQix5REFBMkM7QUFFM0MsTUFBYSxLQUFNLFNBQVEsc0NBQXVCO0lBQ2hELFlBQXNCLEtBQWdCLEVBQUUsV0FBdUM7UUFDN0UsS0FBSyxDQUFDLEtBQUssRUFBRSxXQUFXLENBQUMsQ0FBQztJQUM1QixDQUFDO0lBRUQ7O09BRUc7SUFDSCxNQUFNLENBQUMsY0FBYyxDQUFDLEtBQWdCLEVBQUUsV0FBdUM7UUFDN0UsT0FBTyxJQUFJLEtBQUssQ0FBQyxLQUFLLEVBQUUsV0FBVyxDQUFDLENBQUM7SUFDdkMsQ0FBQztJQUVEOztPQUVHO0lBQ0gsUUFBUTtRQUNOLE9BQU8sSUFBSSxDQUFDLFlBQVksRUFBRSxJQUFJLElBQUksT0FBTyxDQUFDO0lBQzVDLENBQUM7SUFFRDs7T0FFRztJQUNILFdBQVc7UUFDVCxPQUFPLE9BQU8sQ0FBQztJQUNqQixDQUFDO0lBRUQsa0JBQWtCO0lBQ2xCLGFBQWE7UUFDWCxPQUFPLEdBQUcsQ0FBQztJQUNiLENBQUM7SUFFRDs7O09BR0c7SUFDSCx3QkFBd0I7UUFDdEIsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxXQUFXO1FBQ1QsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxlQUFlO1FBQ2IsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsY0FBYyxDQUFDLE9BQWU7UUFDNUIsSUFBSSxPQUFPLE9B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LENBQUMsQ0FBa0MsQ0FBQztJQUN0RyxDQUFDO0NBQ0Y7QUFsaEJELHNCQWtoQkMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBwcmV0dGllclxuICovXG5pbXBvcnQge1xuICBBYnN0cmFjdEV0aExpa2VOZXdDb2lucyxcbiAgUmVjb3Zlck9wdGlvbnMsXG4gIE9mZmxpbmVWYXVsdFR4SW5mbyxcbiAgVW5zaWduZWRTd2VlcFR4TVBDdjIsXG4gIFJlY292ZXJ5SW5mbyxcbiAgVHJhbnNhY3Rpb25CdWlsZGVyLFxuICBWZXJpZnlFdGhUcmFuc2FjdGlvbk9wdGlvbnMsXG4gIFZlcmlmeUV0aEFkZHJlc3NPcHRpb25zLFxuICBUc3NWZXJpZnlFdGhBZGRyZXNzT3B0aW9ucyxcbiAgb3B0aW9uYWxEZXBzLFxuICBLZXlQYWlyLFxufSBmcm9tICdAYml0Z28tYmV0YS9hYnN0cmFjdC1ldGgnO1xuaW1wb3J0IHR5cGUgKiBhcyBFdGhMaWtlQ29tbW9uIGZyb20gJ0BldGhlcmV1bWpzL2NvbW1vbic7XG5pbXBvcnQge1xuICBCYXNlQ29pbixcbiAgQml0R29CYXNlLFxuICBJbnZhbGlkQWRkcmVzc0Vycm9yLFxuICBJbnZhbGlkTWVtb0lkRXJyb3IsXG4gIE1QQ0FsZ29yaXRobSxcbiAgUGFyc2VUcmFuc2FjdGlvbk9wdGlvbnMsXG4gIFBhcnNlZFRyYW5zYWN0aW9uLFxuICBVbmV4cGVjdGVkQWRkcmVzc0Vycm9yLFxuICBQb3B1bGF0ZWRJbnRlbnQsXG4gIFByZWJ1aWxkVHJhbnNhY3Rpb25XaXRoSW50ZW50T3B0aW9ucyxcbiAgY29tbW9uLFxuICBFY2RzYSxcbiAgRUNEU0FVdGlscyxcbiAgZ2V0SXNVbnNpZ25lZFN3ZWVwLFxufSBmcm9tICdAYml0Z28tYmV0YS9zZGstY29yZSc7XG5pbXBvcnQgeyBnZXREZXJpdmF0aW9uUGF0aCB9IGZyb20gJ0BiaXRnby1iZXRhL3Nkay1saWItbXBjJztcbmltcG9ydCB7IEJhc2VDb2luIGFzIFN0YXRpY3NCYXNlQ29pbiwgY29pbnMgfSBmcm9tICdAYml0Z28tYmV0YS9zdGF0aWNzJztcbmltcG9ydCB7IGV0aGVycyB9IGZyb20gJ2V0aGVycyc7XG5pbXBvcnQgeyBUaXAyMFRyYW5zYWN0aW9uLCBUaXAyMFRyYW5zYWN0aW9uQnVpbGRlciB9IGZyb20gJy4vbGliJztcbmltcG9ydCB7XG4gIGFtb3VudFRvVGlwMjBVbml0cyxcbiAgdGlwMjBVbml0c1RvQW1vdW50LFxuICBpc1RpcDIwVHJhbnNhY3Rpb24sXG4gIGlzVmFsaWRNZW1vSWQgYXMgaXNWYWxpZE1lbW9JZFV0aWwsXG59IGZyb20gJy4vbGliL3V0aWxzJztcbmltcG9ydCB7IFBBVEhfVVNEX0FERFJFU1MgfSBmcm9tICcuL2xpYi9jb25zdGFudHMnO1xuaW1wb3J0ICogYXMgdXJsIGZyb20gJ3VybCc7XG5pbXBvcnQgKiBhcyBxdWVyeXN0cmluZyBmcm9tICdxdWVyeXN0cmluZyc7XG5cbmV4cG9ydCBjbGFzcyBUZW1wbyBleHRlbmRzIEFic3RyYWN0RXRoTGlrZU5ld0NvaW5zIHtcbiAgcHJvdGVjdGVkIGNvbnN0cnVjdG9yKGJpdGdvOiBCaXRHb0Jhc2UsIHN0YXRpY3NDb2luPzogUmVhZG9ubHk8U3RhdGljc0Jhc2VDb2luPikge1xuICAgIHN1cGVyKGJpdGdvLCBzdGF0aWNzQ29pbik7XG4gIH1cblxuICAvKipcbiAgICogRmFjdG9yeSBtZXRob2QgdG8gY3JlYXRlIFRlbXBvIGluc3RhbmNlXG4gICAqL1xuICBzdGF0aWMgY3JlYXRlSW5zdGFuY2UoYml0Z286IEJpdEdvQmFzZSwgc3RhdGljc0NvaW4/OiBSZWFkb25seTxTdGF0aWNzQmFzZUNvaW4+KTogQmFzZUNvaW4ge1xuICAgIHJldHVybiBuZXcgVGVtcG8oYml0Z28sIHN0YXRpY3NDb2luKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGNoYWluIGlkZW50aWZpZXJcbiAgICovXG4gIGdldENoYWluKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX3N0YXRpY3NDb2luPy5uYW1lIHx8ICd0ZW1wbyc7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBmdWxsIGNoYWluIG5hbWVcbiAgICovXG4gIGdldEZ1bGxOYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuICdUZW1wbyc7XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgZ2V0QmFzZUZhY3RvcigpOiBudW1iZXIge1xuICAgIHJldHVybiAxZTY7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgaWYgdmFsdWUtbGVzcyB0cmFuc2ZlcnMgYXJlIGFsbG93ZWRcbiAgICogRVZNLWJhc2VkIGNoYWlucyBhbGxvdyB6ZXJvLXZhbHVlIHRyYW5zZmVycyBmb3Igc21hcnQgY29udHJhY3QgaW50ZXJhY3Rpb25zXG4gICAqL1xuICB2YWx1ZWxlc3NUcmFuc2ZlckFsbG93ZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgaWYgVFNTIGlzIHN1cHBvcnRlZFxuICAgKi9cbiAgc3VwcG9ydHNUc3MoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBNUEMgYWxnb3JpdGhtIChFQ0RTQSBmb3IgRVZNIGNoYWlucylcbiAgICovXG4gIGdldE1QQ0FsZ29yaXRobSgpOiBNUENBbGdvcml0aG0ge1xuICAgIHJldHVybiAnZWNkc2EnO1xuICB9XG5cbiAgLyoqXG4gICAqIEV2YWx1YXRlcyB3aGV0aGVyIGFuIGFkZHJlc3Mgc3RyaW5nIGlzIHZhbGlkIGZvciBUZW1wb1xuICAgKiBTdXBwb3J0cyBhZGRyZXNzZXMgd2l0aCBvcHRpb25hbCBtZW1vSWQgcXVlcnkgcGFyYW1ldGVyIChlLmcuLCAweC4uLj9tZW1vSWQ9MTIzKVxuICAgKiBAcGFyYW0gYWRkcmVzcyAtIFRoZSBhZGRyZXNzIHRvIHZhbGlkYXRlXG4gICAqIEByZXR1cm5zIHRydWUgaWYgYWRkcmVzcyBpcyB2YWxpZFxuICAgKi9cbiAgaXNWYWxpZEFkZHJlc3MoYWRkcmVzczogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgaWYgKHR5cGVvZiBhZGRyZXNzICE9PSAnc3RyaW5nJykge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBjb25zdCB7IGJhc2VBZGRyZXNzIH0gPSB0aGlzLmdldEFkZHJlc3NEZXRhaWxzKGFkZHJlc3MpO1xuICAgICAgcmV0dXJuIG9wdGlvbmFsRGVwcy5ldGhVdGlsLmlzVmFsaWRBZGRyZXNzKG9wdGlvbmFsRGVwcy5ldGhVdGlsLmFkZEhleFByZWZpeChiYXNlQWRkcmVzcykpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUGFyc2UgYWRkcmVzcyBpbnRvIGJhc2UgYWRkcmVzcyBhbmQgb3B0aW9uYWwgbWVtb0lkXG4gICAqIFRocm93cyBJbnZhbGlkQWRkcmVzc0Vycm9yIGZvciBpbnZhbGlkIGFkZHJlc3MgZm9ybWF0c1xuICAgKiBAcGFyYW0gYWRkcmVzcyAtIEFkZHJlc3Mgc3RyaW5nLCBwb3RlbnRpYWxseSB3aXRoID9tZW1vSWQ9WCBzdWZmaXhcbiAgICogQHJldHVybnMgT2JqZWN0IGNvbnRhaW5pbmcgYWRkcmVzcywgYmFzZUFkZHJlc3MsIGFuZCBtZW1vSWQgKG51bGwgaWYgbm90IHByZXNlbnQpXG4gICAqIEB0aHJvd3MgSW52YWxpZEFkZHJlc3NFcnJvciBpZiBhZGRyZXNzIGZvcm1hdCBpcyBpbnZhbGlkXG4gICAqL1xuICBnZXRBZGRyZXNzRGV0YWlscyhhZGRyZXNzOiBzdHJpbmcpOiB7IGFkZHJlc3M6IHN0cmluZzsgYmFzZUFkZHJlc3M6IHN0cmluZzsgbWVtb0lkOiBzdHJpbmcgfCBudWxsIH0ge1xuICAgIGlmICh0eXBlb2YgYWRkcmVzcyAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQWRkcmVzc0Vycm9yKGBpbnZhbGlkIGFkZHJlc3M6ICR7YWRkcmVzc31gKTtcbiAgICB9XG5cbiAgICBjb25zdCBkZXN0aW5hdGlvbkRldGFpbHMgPSB1cmwucGFyc2UoYWRkcmVzcyk7XG4gICAgY29uc3QgYmFzZUFkZHJlc3MgPSBkZXN0aW5hdGlvbkRldGFpbHMucGF0aG5hbWUgfHwgJyc7XG5cbiAgICAvLyBObyBxdWVyeSBzdHJpbmcgLSBqdXN0IGEgcGxhaW4gYWRkcmVzc1xuICAgIGlmIChkZXN0aW5hdGlvbkRldGFpbHMucGF0aG5hbWUgPT09IGFkZHJlc3MpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGFkZHJlc3MsXG4gICAgICAgIGJhc2VBZGRyZXNzOiBhZGRyZXNzLFxuICAgICAgICBtZW1vSWQ6IG51bGwsXG4gICAgICB9O1xuICAgIH1cblxuICAgIC8vIEhhcyBxdWVyeSBzdHJpbmcgLSBtdXN0IGNvbnRhaW4gbWVtb0lkXG4gICAgaWYgKCFkZXN0aW5hdGlvbkRldGFpbHMucXVlcnkpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQWRkcmVzc0Vycm9yKGBpbnZhbGlkIGFkZHJlc3M6ICR7YWRkcmVzc31gKTtcbiAgICB9XG5cbiAgICBjb25zdCBxdWVyeURldGFpbHMgPSBxdWVyeXN0cmluZy5wYXJzZShkZXN0aW5hdGlvbkRldGFpbHMucXVlcnkpO1xuXG4gICAgLy8gUXVlcnkgc3RyaW5nIG11c3QgY29udGFpbiBtZW1vSWRcbiAgICBpZiAoIXF1ZXJ5RGV0YWlscy5tZW1vSWQpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQWRkcmVzc0Vycm9yKGBpbnZhbGlkIGFkZHJlc3M6ICR7YWRkcmVzc30sIHVua25vd24gcXVlcnkgcGFyYW1ldGVyc2ApO1xuICAgIH1cblxuICAgIC8vIE9ubHkgb25lIG1lbW9JZCBhbGxvd2VkXG4gICAgaWYgKEFycmF5LmlzQXJyYXkocXVlcnlEZXRhaWxzLm1lbW9JZCkpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQWRkcmVzc0Vycm9yKFxuICAgICAgICBgbWVtb0lkIG1heSBvbmx5IGJlIGdpdmVuIGF0IG1vc3Qgb25jZSwgYnV0IGZvdW5kICR7cXVlcnlEZXRhaWxzLm1lbW9JZC5sZW5ndGh9IGluc3RhbmNlcyBpbiBhZGRyZXNzICR7YWRkcmVzc31gXG4gICAgICApO1xuICAgIH1cblxuICAgIC8vIFJlamVjdCBpZiB0aGVyZSBhcmUgb3RoZXIgcXVlcnkgcGFyYW1ldGVycyBiZXNpZGVzIG1lbW9JZFxuICAgIGNvbnN0IHF1ZXJ5S2V5cyA9IE9iamVjdC5rZXlzKHF1ZXJ5RGV0YWlscyk7XG4gICAgaWYgKHF1ZXJ5S2V5cy5sZW5ndGggIT09IDEpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQWRkcmVzc0Vycm9yKGBpbnZhbGlkIGFkZHJlc3M6ICR7YWRkcmVzc30sIG9ubHkgbWVtb0lkIHF1ZXJ5IHBhcmFtZXRlciBpcyBhbGxvd2VkYCk7XG4gICAgfVxuXG4gICAgLy8gVmFsaWRhdGUgbWVtb0lkIGZvcm1hdFxuICAgIGlmICghdGhpcy5pc1ZhbGlkTWVtb0lkKHF1ZXJ5RGV0YWlscy5tZW1vSWQpKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZE1lbW9JZEVycm9yKGBpbnZhbGlkIGFkZHJlc3M6ICcke2FkZHJlc3N9JywgbWVtb0lkIGlzIG5vdCB2YWxpZGApO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBhZGRyZXNzLFxuICAgICAgYmFzZUFkZHJlc3MsXG4gICAgICBtZW1vSWQ6IHF1ZXJ5RGV0YWlscy5tZW1vSWQsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZSB0aGF0IGEgbWVtb0lkIGlzIGEgdmFsaWQgbm9uLW5lZ2F0aXZlIGludGVnZXIgc3RyaW5nXG4gICAqIEBwYXJhbSBtZW1vSWQgLSBUaGUgbWVtb0lkIHRvIHZhbGlkYXRlXG4gICAqIEByZXR1cm5zIHRydWUgaWYgdmFsaWRcbiAgICovXG4gIGlzVmFsaWRNZW1vSWQobWVtb0lkOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gaXNWYWxpZE1lbW9JZFV0aWwobWVtb0lkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUZW1wbyB1c2VzIG1lbW9JZC1iYXNlZCBhZGRyZXNzZXMgcmF0aGVyIHRoYW4gZm9yd2FyZGVyIGNvbnRyYWN0cy5cbiAgICogVmVyaWZ5IHRoYXQgdGhlIGFkZHJlc3MgYmVsb25ncyB0byB0aGlzIHdhbGxldCBieSBjaGVja2luZyB0aGF0IHRoZVxuICAgKiBiYXNlIChFVk0pIHBvcnRpb24gbWF0Y2hlcyB0aGUgd2FsbGV0J3MgYmFzZSBhZGRyZXNzLlxuICAgKi9cbiAgYXN5bmMgaXNXYWxsZXRBZGRyZXNzKHBhcmFtczogVmVyaWZ5RXRoQWRkcmVzc09wdGlvbnMgfCBUc3NWZXJpZnlFdGhBZGRyZXNzT3B0aW9ucyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IHsgYWRkcmVzcywgYmFzZUFkZHJlc3MgfSA9IHBhcmFtcztcbiAgICBjb25zdCByb290QWRkcmVzcyA9IChwYXJhbXMgYXMgdW5rbm93biBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikucm9vdEFkZHJlc3MgYXMgc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gICAgaWYgKCFhZGRyZXNzKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFkZHJlc3NFcnJvcignYWRkcmVzcyBpcyByZXF1aXJlZCcpO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5pc1ZhbGlkQWRkcmVzcyhhZGRyZXNzKSkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBZGRyZXNzRXJyb3IoYGludmFsaWQgYWRkcmVzczogJHthZGRyZXNzfWApO1xuICAgIH1cblxuICAgIGNvbnN0IHsgYmFzZUFkZHJlc3M6IGFkZHJlc3NCYXNlIH0gPSB0aGlzLmdldEFkZHJlc3NEZXRhaWxzKGFkZHJlc3MpO1xuXG4gICAgY29uc3Qgd2FsbGV0QmFzZUFkZHJlc3MgPSBiYXNlQWRkcmVzcyB8fCByb290QWRkcmVzcztcbiAgICBpZiAoIXdhbGxldEJhc2VBZGRyZXNzKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFkZHJlc3NFcnJvcignYmFzZUFkZHJlc3Mgb3Igcm9vdEFkZHJlc3MgaXMgcmVxdWlyZWQgZm9yIHZlcmlmaWNhdGlvbicpO1xuICAgIH1cblxuICAgIGNvbnN0IHsgYmFzZUFkZHJlc3M6IHdhbGxldEJhc2UgfSA9IHRoaXMuZ2V0QWRkcmVzc0RldGFpbHMod2FsbGV0QmFzZUFkZHJlc3MpO1xuXG4gICAgaWYgKGFkZHJlc3NCYXNlLnRvTG93ZXJDYXNlKCkgIT09IHdhbGxldEJhc2UudG9Mb3dlckNhc2UoKSkge1xuICAgICAgdGhyb3cgbmV3IFVuZXhwZWN0ZWRBZGRyZXNzRXJyb3IoYGFkZHJlc3MgdmFsaWRhdGlvbiBmYWlsdXJlOiBleHBlY3RlZCAke3dhbGxldEJhc2V9IGJ1dCBnb3QgJHthZGRyZXNzQmFzZX1gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQYXJzZSBhIHNlcmlhbGlzZWQgVGVtcG8gdHJhbnNhY3Rpb24gYW5kIHJldHVybiBpdHMgb3BlcmF0aW9ucyBhcyBTREsgb3V0cHV0cy5cbiAgICogQGluaGVyaXRkb2NcbiAgICovXG4gIGFzeW5jIHBhcnNlVHJhbnNhY3Rpb24ocGFyYW1zOiBQYXJzZVRyYW5zYWN0aW9uT3B0aW9ucyk6IFByb21pc2U8UGFyc2VkVHJhbnNhY3Rpb24+IHtcbiAgICBjb25zdCB0eEhleCA9IChwYXJhbXMudHhIZXggfHwgKHBhcmFtcyBhcyBhbnkpLmhhbGZTaWduZWQ/LnR4SGV4KSBhcyBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgaWYgKCF0eEhleCkge1xuICAgICAgcmV0dXJuIHt9O1xuICAgIH1cbiAgICBpZiAoIWlzVGlwMjBUcmFuc2FjdGlvbih0eEhleCkpIHtcbiAgICAgIHJldHVybiB7fTtcbiAgICB9XG4gICAgY29uc3QgdHhCdWlsZGVyID0gdGhpcy5nZXRUcmFuc2FjdGlvbkJ1aWxkZXIoKTtcbiAgICB0eEJ1aWxkZXIuZnJvbSh0eEhleCk7XG4gICAgY29uc3QgdHggPSAoYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCkpIGFzIFRpcDIwVHJhbnNhY3Rpb247XG4gICAgcmV0dXJuIHtcbiAgICAgIGlucHV0czogdHguaW5wdXRzLm1hcCgoaW5wdXQpID0+ICh7XG4gICAgICAgIGFkZHJlc3M6IGlucHV0LmFkZHJlc3MsXG4gICAgICAgIGFtb3VudDogaW5wdXQudmFsdWUsXG4gICAgICAgIGNvaW46IHRoaXMuZ2V0Q2hhaW4oKSxcbiAgICAgIH0pKSxcbiAgICAgIG91dHB1dHM6IHR4Lm91dHB1dHMubWFwKChvdXRwdXQpID0+ICh7XG4gICAgICAgIGFkZHJlc3M6IG91dHB1dC5hZGRyZXNzLFxuICAgICAgICBhbW91bnQ6IG91dHB1dC52YWx1ZSxcbiAgICAgICAgY29pbjogdGhpcy5nZXRDaGFpbigpLFxuICAgICAgfSkpLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogVmVyaWZ5IHRoYXQgYSBUZW1wbyB0cmFuc2FjdGlvbiBtYXRjaGVzIHRoZSBpbnRlbmRlZCByZWNpcGllbnRzIGFuZCBhbW91bnRzLlxuICAgKiBAaW5oZXJpdGRvY1xuICAgKi9cbiAgYXN5bmMgdmVyaWZ5VHJhbnNhY3Rpb24ocGFyYW1zOiBWZXJpZnlFdGhUcmFuc2FjdGlvbk9wdGlvbnMpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCB7IHR4UGFyYW1zLCB0eFByZWJ1aWxkIH0gPSBwYXJhbXM7XG5cbiAgICBpZiAoIXR4UHJlYnVpbGQ/LnR4SGV4KSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICAvLyBzaWduYWJsZUhleCBtYXkgYXJyaXZlIHdpdGhvdXQgdGhlIDB4IHByZWZpeCAoZS5nLiBmcm9tIHRoZSBUU1Mgc2lnbmluZyBmbG93KS5cbiAgICBjb25zdCB0eEhleCA9IHR4UHJlYnVpbGQudHhIZXguc3RhcnRzV2l0aCgnMHgnKSA/IHR4UHJlYnVpbGQudHhIZXggOiAnMHgnICsgdHhQcmVidWlsZC50eEhleDtcbiAgICBpZiAoIWlzVGlwMjBUcmFuc2FjdGlvbih0eEhleCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBUZW1wbyB0cmFuc2FjdGlvbiBoZXg6IGV4cGVjdGVkIGEgMHg3NiBUSVAtMjAgdHJhbnNhY3Rpb25gKTtcbiAgICB9XG5cbiAgICBjb25zdCB0eEJ1aWxkZXIgPSB0aGlzLmdldFRyYW5zYWN0aW9uQnVpbGRlcigpO1xuICAgIHR4QnVpbGRlci5mcm9tKHR4SGV4KTtcbiAgICBjb25zdCB0eCA9IChhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKSkgYXMgVGlwMjBUcmFuc2FjdGlvbjtcbiAgICBjb25zdCBvcGVyYXRpb25zID0gdHguZ2V0T3BlcmF0aW9ucygpO1xuICAgIGNvbnN0IHJhd0NhbGxzID0gdHguZ2V0UmF3Q2FsbHMoKTtcblxuICAgIC8vIElmIHRoZSBjYWxsZXIgc3BlY2lmaWVkIGV4cGxpY2l0IHJlY2lwaWVudHMsIHZlcmlmeSB0aGV5IG1hdGNoIHRoZSB0cmFuc2FjdGlvbi5cbiAgICAvLyBBIHRyYW5zYWN0aW9uIGlzIGVpdGhlciBhbGwgdG9rZW4gdHJhbnNmZXIgb3BlcmF0aW9ucyBPUiBhIHNpbmdsZSByYXcgY29udHJhY3QgY2FsbCDigJQgbmV2ZXIgbWl4ZWQuXG4gICAgY29uc3QgcmVjaXBpZW50cyA9IHR4UGFyYW1zPy5yZWNpcGllbnRzO1xuICAgIGlmIChyZWNpcGllbnRzICYmIHJlY2lwaWVudHMubGVuZ3RoID4gMCkge1xuICAgICAgaWYgKHJhd0NhbGxzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgLy8gQ29udHJhY3QgY2FsbCB0cmFuc2FjdGlvbiDigJQgc2luZ2xlIHJhdyBjYWxsLCBzaW5nbGUgcmVjaXBpZW50IHdpdGggZGF0YVxuICAgICAgICBpZiAocmF3Q2FsbHMubGVuZ3RoICE9PSByZWNpcGllbnRzLmxlbmd0aCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgIGBUcmFuc2FjdGlvbiBoYXMgJHtyYXdDYWxscy5sZW5ndGh9IGNhbGwocykgYnV0ICR7cmVjaXBpZW50cy5sZW5ndGh9IHJlY2lwaWVudChzKSB3ZXJlIHJlcXVlc3RlZGBcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcmF3Q2FsbHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBjb25zdCByYXdDYWxsID0gcmF3Q2FsbHNbaV07XG4gICAgICAgICAgY29uc3QgcmVjaXBpZW50ID0gcmVjaXBpZW50c1tpXTtcbiAgICAgICAgICBpZiAocmF3Q2FsbC50by50b0xvd2VyQ2FzZSgpICE9PSByZWNpcGllbnQuYWRkcmVzcy5zcGxpdCgnPycpWzBdLnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgUmF3IGNhbGwgJHtpfSBhZGRyZXNzIG1pc21hdGNoOiBleHBlY3RlZCAke3JlY2lwaWVudC5hZGRyZXNzfSwgZ290ICR7cmF3Q2FsbC50b31gKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKCFyZWNpcGllbnQuZGF0YSB8fCByYXdDYWxsLmRhdGEudG9Mb3dlckNhc2UoKSAhPT0gcmVjaXBpZW50LmRhdGEudG9Mb3dlckNhc2UoKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBSYXcgY2FsbCAke2l9IGNhbGxkYXRhIG1pc21hdGNoYCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBUb2tlbiB0cmFuc2ZlciB0cmFuc2FjdGlvbiDigJQgb3BlcmF0aW9ucyBtYXRjaGVkIDEtdG8tMSBhZ2FpbnN0IHJlY2lwaWVudHNcbiAgICAgICAgaWYgKG9wZXJhdGlvbnMubGVuZ3RoICE9PSByZWNpcGllbnRzLmxlbmd0aCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgIGBUcmFuc2FjdGlvbiBoYXMgJHtvcGVyYXRpb25zLmxlbmd0aH0gb3BlcmF0aW9uKHMpIGJ1dCAke3JlY2lwaWVudHMubGVuZ3RofSByZWNpcGllbnQocykgd2VyZSByZXF1ZXN0ZWRgXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG9wZXJhdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBjb25zdCBvcCA9IG9wZXJhdGlvbnNbaV07XG4gICAgICAgICAgY29uc3QgcmVjaXBpZW50ID0gcmVjaXBpZW50c1tpXTtcbiAgICAgICAgICBjb25zdCByZWNpcGllbnRCYXNlQWRkcmVzcyA9IHJlY2lwaWVudC5hZGRyZXNzLnNwbGl0KCc/JylbMF07XG4gICAgICAgICAgaWYgKG9wLnRvLnRvTG93ZXJDYXNlKCkgIT09IHJlY2lwaWVudEJhc2VBZGRyZXNzLnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgT3BlcmF0aW9uICR7aX0gcmVjaXBpZW50IG1pc21hdGNoOiBleHBlY3RlZCAke3JlY2lwaWVudC5hZGRyZXNzfSwgZ290ICR7b3AudG99YCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IG9wQW1vdW50QmFzZVVuaXRzID0gYW1vdW50VG9UaXAyMFVuaXRzKG9wLmFtb3VudCkudG9TdHJpbmcoKTtcbiAgICAgICAgICBpZiAob3BBbW91bnRCYXNlVW5pdHMgIT09IHJlY2lwaWVudC5hbW91bnQudG9TdHJpbmcoKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBPcGVyYXRpb24gJHtpfSBhbW91bnQgbWlzbWF0Y2g6IGV4cGVjdGVkICR7cmVjaXBpZW50LmFtb3VudH0sIGdvdCAke29wQW1vdW50QmFzZVVuaXRzfWApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFZlcmlmeSBmZWUgdG9rZW4gaWYgc3BlY2lmaWVkXG4gICAgaWYgKHR4UGFyYW1zPy5mZWVUb2tlbikge1xuICAgICAgY29uc3QgdHhGZWVUb2tlbiA9IHR4LmdldEZlZVRva2VuKCk7XG4gICAgICBpZiAodHhGZWVUb2tlbj8udG9Mb3dlckNhc2UoKSAhPT0gdHhQYXJhbXMuZmVlVG9rZW4udG9Mb3dlckNhc2UoKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEZlZSB0b2tlbiBtaXNtYXRjaDogZXhwZWN0ZWQgJHt0eFBhcmFtcy5mZWVUb2tlbn0sIGdvdCAke3R4RmVlVG9rZW4gfHwgJ25vbmUnfWApO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCBjb2luLXNwZWNpZmljIGZpZWxkcyBpbiB0aGUgaW50ZW50IGZvciBUZW1wbyBUU1MgdHJhbnNhY3Rpb25zLlxuICAgKiBFbnN1cmVzIGZlZVRva2VuIGlzIHByb3Blcmx5IHdpcmVkIHRocm91Z2ggdGhlIGludGVudCBmb3IgVGVtcG8gdHJhbnNhY3Rpb25zLlxuICAgKiBAcGFyYW0gaW50ZW50IC0gVGhlIHBvcHVsYXRlZCBpbnRlbnQgdG8gbW9kaWZ5XG4gICAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgcGFyYW1ldGVycyBjb250YWluaW5nIGZlZVRva2VuXG4gICAqL1xuICBzZXRDb2luU3BlY2lmaWNGaWVsZHNJbkludGVudChpbnRlbnQ6IFBvcHVsYXRlZEludGVudCwgcGFyYW1zOiBQcmVidWlsZFRyYW5zYWN0aW9uV2l0aEludGVudE9wdGlvbnMpOiB2b2lkIHtcbiAgICBpZiAocGFyYW1zLmZlZVRva2VuKSB7XG4gICAgICBpbnRlbnQuZmVlT3B0aW9ucyA9IGludGVudC5mZWVPcHRpb25zXG4gICAgICAgID8geyAuLi5pbnRlbnQuZmVlT3B0aW9ucywgZmVlVG9rZW46IHBhcmFtcy5mZWVUb2tlbiB9XG4gICAgICAgIDogeyBmZWVUb2tlbjogcGFyYW1zLmZlZVRva2VuIH07XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFF1ZXJ5IHRoZSBUZW1wbyBBbGNoZW15IFJQQyBmb3IgcmVjb3ZlcnkgYmFsYW5jZS9ub25jZSBpbmZvcm1hdGlvbi5cbiAgICogUm91dGVzIHRocm91Z2ggcXVlcnlUZW1wb1JwYyB1c2luZyB0aGUgVVJMIGZyb20gZW52aXJvbm1lbnRzLnRzLlxuICAgKi9cbiAgYXN5bmMgcmVjb3ZlcnlCbG9ja2NoYWluRXhwbG9yZXJRdWVyeShcbiAgICBxdWVyeTogUmVjb3JkPHN0cmluZywgc3RyaW5nPixcbiAgICBhcGlLZXk/OiBzdHJpbmdcbiAgKTogUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4ge1xuICAgIGNvbnN0IGV2bUNvbmZpZyA9IGNvbW1vbi5FbnZpcm9ubWVudHNbdGhpcy5iaXRnby5nZXRFbnYoKV0uZXZtO1xuICAgIGNvbnN0IGNvaW5GYW1pbHkgPSB0aGlzLmdldEZhbWlseSgpO1xuICAgIGlmICghZXZtQ29uZmlnIHx8ICEoY29pbkZhbWlseSBpbiBldm1Db25maWcpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYGVudiBjb25maWcgbWlzc2luZyBmb3IgJHtjb2luRmFtaWx5fSBpbiAke3RoaXMuYml0Z28uZ2V0RW52KCl9YCk7XG4gICAgfVxuICAgIGNvbnN0IHRva2VuID0gYXBpS2V5IHx8IGV2bUNvbmZpZ1tjb2luRmFtaWx5XS5hcGlUb2tlbjtcbiAgICBjb25zdCBycGNVcmwgPSBldm1Db25maWdbY29pbkZhbWlseV0uYmFzZVVybDtcbiAgICByZXR1cm4gdGhpcy5xdWVyeVRlbXBvUnBjKHF1ZXJ5LCBycGNVcmwsIHRva2VuKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUcmFuc2xhdGVzIEV0aGVyc2Nhbi1zdHlsZSByZWNvdmVyeSBxdWVyaWVzIGludG8gVGVtcG8gQWxjaGVteSBKU09OLVJQQyBjYWxscy5cbiAgICpcbiAgICogU3VwcG9ydGVkOlxuICAgKiAgIGFjY291bnQvYmFsYW5jZSAgICAgIOKGkiByZXR1cm5zIHsgcmVzdWx0OiAnMCcgfSAobm8gbmF0aXZlIGNvaW4gb24gVGVtcG8pXG4gICAqICAgYWNjb3VudC90b2tlbmJhbGFuY2Ug4oaSIGV0aF9jYWxsIChiYWxhbmNlT2Ygc2VsZWN0b3IgMHg3MGEwODIzMSkg4oaSIHsgcmVzdWx0OiBkZWNpbWFsU3RyaW5nIH1cbiAgICogICBhY2NvdW50L3R4bGlzdCAgICAgICDihpIgZXRoX2dldFRyYW5zYWN0aW9uQ291bnQg4oaSIHsgbm9uY2U6IG51bWJlciB9XG4gICAqL1xuICBwcml2YXRlIGFzeW5jIHF1ZXJ5VGVtcG9ScGMoXG4gICAgcXVlcnk6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4sXG4gICAgcnBjVXJsOiBzdHJpbmcsXG4gICAgYXBpS2V5Pzogc3RyaW5nXG4gICk6IFByb21pc2U8UmVjb3JkPHN0cmluZywgdW5rbm93bj4+IHtcbiAgICBjb25zdCBlbmRwb2ludCA9IGFwaUtleSA/IGAke3JwY1VybH0ke2FwaUtleX1gIDogcnBjVXJsO1xuICAgIGNvbnN0IHsgbW9kdWxlLCBhY3Rpb24sIGFkZHJlc3MsIGNvbnRyYWN0YWRkcmVzcywgdGFnIH0gPSBxdWVyeTtcblxuICAgIGxldCBtZXRob2Q6IHN0cmluZztcbiAgICBsZXQgcGFyYW1zOiB1bmtub3duW107XG5cbiAgICBpZiAobW9kdWxlID09PSAnYWNjb3VudCcgJiYgYWN0aW9uID09PSAnYmFsYW5jZScpIHtcbiAgICAgIHJldHVybiB7IHJlc3VsdDogJzAnIH07XG4gICAgfSBlbHNlIGlmIChtb2R1bGUgPT09ICdhY2NvdW50JyAmJiBhY3Rpb24gPT09ICd0b2tlbmJhbGFuY2UnKSB7XG4gICAgICBjb25zdCBwYWRkZWRBZGRyID0gKGFkZHJlc3MgPz8gJycpLnJlcGxhY2UoL14weC8sICcnKS5wYWRTdGFydCg2NCwgJzAnKTtcbiAgICAgIG1ldGhvZCA9ICdldGhfY2FsbCc7XG4gICAgICBwYXJhbXMgPSBbeyB0bzogY29udHJhY3RhZGRyZXNzLCBkYXRhOiAnMHg3MGEwODIzMScgKyBwYWRkZWRBZGRyIH0sIHRhZyA/PyAnbGF0ZXN0J107XG4gICAgfSBlbHNlIGlmIChtb2R1bGUgPT09ICdhY2NvdW50JyAmJiBhY3Rpb24gPT09ICd0eGxpc3QnKSB7XG4gICAgICBtZXRob2QgPSAnZXRoX2dldFRyYW5zYWN0aW9uQ291bnQnO1xuICAgICAgcGFyYW1zID0gW2FkZHJlc3MsICdsYXRlc3QnXTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBxdWVyeVRlbXBvUnBjOiB1bnN1cHBvcnRlZCBtb2R1bGU9JHttb2R1bGV9IGFjdGlvbj0ke2FjdGlvbn1gKTtcbiAgICB9XG5cbiAgICBjb25zdCByZXMgPSBhd2FpdCBmZXRjaChlbmRwb2ludCwge1xuICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICBoZWFkZXJzOiB7ICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicgfSxcbiAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHsganNvbnJwYzogJzIuMCcsIG1ldGhvZCwgcGFyYW1zLCBpZDogMSB9KSxcbiAgICB9KTtcblxuICAgIGlmICghcmVzLm9rKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYENvdWxkIG5vdCByZWFjaCBUZW1wbyBSUEMgZW5kcG9pbnQgKEhUVFAgJHtyZXMuc3RhdHVzfSlgKTtcbiAgICB9XG5cbiAgICBjb25zdCBib2R5ID0gKGF3YWl0IHJlcy5qc29uKCkpIGFzIHsgcmVzdWx0PzogdW5rbm93bjsgZXJyb3I/OiB7IG1lc3NhZ2U6IHN0cmluZyB9IH07XG4gICAgaWYgKGJvZHkuZXJyb3IpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVGVtcG8gUlBDIGVycm9yOiAke2JvZHkuZXJyb3IubWVzc2FnZX1gKTtcbiAgICB9XG5cbiAgICBpZiAobW9kdWxlID09PSAnYWNjb3VudCcgJiYgYWN0aW9uID09PSAndHhsaXN0Jykge1xuICAgICAgcmV0dXJuIHsgbm9uY2U6IHBhcnNlSW50KGJvZHkucmVzdWx0IGFzIHN0cmluZywgMTYpIH07XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiB7IHJlc3VsdDogQmlnSW50KGJvZHkucmVzdWx0IGFzIHN0cmluZykudG9TdHJpbmcoKSB9O1xuICAgIH0gY2F0Y2gge1xuICAgICAgcmV0dXJuIHsgcmVzdWx0OiAnMCcgfTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2hhcmVkIGhlbHBlcjogcXVlcmllcyB0aGUgdG9rZW4gYmFsYW5jZSwgY29tcHV0ZXMgc3dlZXAgYW1vdW50LCBhbmQgYnVpbGRzXG4gICAqIGFuIHVuc2lnbmVkIFRJUC0yMCB0cmFuc2ZlciB0cmFuc2FjdGlvbi4gVXNlZCBieSBib3RoIHJlY292ZXJ5IHBhdGhzLlxuICAgKlxuICAgKiAtIHRva2VuQ29udHJhY3RBZGRyZXNzOiB0aGUgdG9rZW4gdG8gc3dlZXAgKGRlZmF1bHRzIHRvIHBhdGhVU0QpXG4gICAqIC0gZmVlVG9rZW46IGFsd2F5cyBwYXRoVVNEXG4gICAqIC0gSWYgc3dlZXBpbmcgcGF0aFVTRCBpdHNlbGYsIHJlc2VydmVzIGdhc0xpbWl0IMOXIG1heEZlZVBlckdhcyAvIDEwXjEyIHBhdGhVU0QgdW5pdHMgZm9yIGZlZXMuXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIGJ1aWxkVGVtcG9Td2VlcFR4KFxuICAgIHdhbGxldEFkZHJlc3M6IHN0cmluZyxcbiAgICBwYXJhbXM6IFJlY292ZXJPcHRpb25zXG4gICk6IFByb21pc2U8eyB0eDogVGlwMjBUcmFuc2FjdGlvbjsgbm9uY2U6IG51bWJlcjsgc3dlZXBBbW91bnQ6IGJpZ2ludDsgZ2FzTWFyZ2luVW5pdHM6IGJpZ2ludCB9PiB7XG4gICAgY29uc3QgdG9rZW5BZGRyZXNzID0gcGFyYW1zLnRva2VuQ29udHJhY3RBZGRyZXNzID8/IFBBVEhfVVNEX0FERFJFU1M7XG5cbiAgICBjb25zdCByYXdCYWxhbmNlID0gYXdhaXQgdGhpcy5xdWVyeUFkZHJlc3NUb2tlbkJhbGFuY2UodG9rZW5BZGRyZXNzLCB3YWxsZXRBZGRyZXNzLCBwYXJhbXMuYXBpS2V5KTtcbiAgICBjb25zdCBiYWxhbmNlID0gQmlnSW50KHJhd0JhbGFuY2UudG9TdHJpbmcoKSk7XG5cbiAgICBjb25zdCBpc1BhdGhVc2QgPSB0b2tlbkFkZHJlc3MudG9Mb3dlckNhc2UoKSA9PT0gUEFUSF9VU0RfQUREUkVTUy50b0xvd2VyQ2FzZSgpO1xuICAgIGNvbnN0IGdhc0xpbWl0QmlnID0gQmlnSW50KHBhcmFtcy5nYXNMaW1pdCA/PyA3MDBfMDAwKTtcbiAgICBjb25zdCBtYXhGZWVQZXJHYXNCaWcgPSBCaWdJbnQocGFyYW1zLmVpcDE1NTk/Lm1heEZlZVBlckdhcyA/PyAyMF8wMDBfMDAwXzAwMCk7XG4gICAgLy8gNzUlIGJ1ZmZlciBvbiB0b3Agb2YgZ2FzTGltaXQgw5cgbWF4RmVlUGVyR2FzIHRvIGNvdmVyIGFjdHVhbCBvbi1jaGFpbiBnYXMgdmFyaWFuY2VcbiAgICBjb25zdCBnYXNNYXJnaW5Vbml0cyA9IChnYXNMaW1pdEJpZyAqIG1heEZlZVBlckdhc0JpZyAqIDE3NW4pIC8gKDEwbiAqKiAxMm4gKiAxMDBuKTtcbiAgICBjb25zdCBzd2VlcEFtb3VudCA9IGlzUGF0aFVzZCA/IGJhbGFuY2UgLSBnYXNNYXJnaW5Vbml0cyA6IGJhbGFuY2U7XG5cbiAgICBpZiAoc3dlZXBBbW91bnQgPD0gMG4pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYEluc3VmZmljaWVudCBiYWxhbmNlIGluICR7dG9rZW5BZGRyZXNzfTogJHtiYWxhbmNlfSB1bml0cyAobWluaW11bSByZXF1aXJlZDogJHtcbiAgICAgICAgICBpc1BhdGhVc2QgPyBnYXNNYXJnaW5Vbml0cyArIDFuIDogMW5cbiAgICAgICAgfSlgXG4gICAgICApO1xuICAgIH1cblxuICAgIGNvbnN0IHN3ZWVwQW1vdW50SHVtYW4gPSB0aXAyMFVuaXRzVG9BbW91bnQoc3dlZXBBbW91bnQpO1xuICAgIGNvbnN0IG5vbmNlID0gYXdhaXQgdGhpcy5nZXRBZGRyZXNzTm9uY2Uod2FsbGV0QWRkcmVzcywgcGFyYW1zLmFwaUtleSk7XG5cbiAgICBjb25zdCB0eEJ1aWxkZXIgPSB0aGlzLmdldFRyYW5zYWN0aW9uQnVpbGRlcigpIGFzIHVua25vd24gYXMgVGlwMjBUcmFuc2FjdGlvbkJ1aWxkZXI7XG4gICAgdHhCdWlsZGVyXG4gICAgICAuYWRkT3BlcmF0aW9uKHsgdG9rZW46IHRva2VuQWRkcmVzcywgdG86IHBhcmFtcy5yZWNvdmVyeURlc3RpbmF0aW9uLCBhbW91bnQ6IHN3ZWVwQW1vdW50SHVtYW4gfSlcbiAgICAgIC5mZWVUb2tlbihQQVRIX1VTRF9BRERSRVNTKVxuICAgICAgLm5vbmNlKG5vbmNlKVxuICAgICAgLmdhcyhnYXNMaW1pdEJpZylcbiAgICAgIC5tYXhGZWVQZXJHYXMobWF4RmVlUGVyR2FzQmlnKVxuICAgICAgLm1heFByaW9yaXR5RmVlUGVyR2FzKEJpZ0ludChwYXJhbXMuZWlwMTU1OT8ubWF4UHJpb3JpdHlGZWVQZXJHYXMgPz8gMTBfMDAwXzAwMF8wMDApKTtcblxuICAgIGNvbnN0IHR4ID0gKGF3YWl0IHR4QnVpbGRlci5idWlsZCgpKSBhcyBUaXAyMFRyYW5zYWN0aW9uO1xuICAgIHJldHVybiB7IHR4LCBub25jZSwgc3dlZXBBbW91bnQsIGdhc01hcmdpblVuaXRzIH07XG4gIH1cblxuICAvKipcbiAgICogT3ZlcnJpZGVzIHRoZSBiYXNlLWNsYXNzIHJlY292ZXJUU1MgdG8gdXNlIFRJUC0yMCB0cmFuc2FjdGlvbnMgaW5zdGVhZCBvZiBzdGFuZGFyZCBFVEguXG4gICAqXG4gICAqIFR3byBwYXRoczpcbiAgICogICAtIFVuc2lnbmVkIHN3ZWVwIChwbGFpbiBwdWJsaWMga2V5IHNoYXJlcyk6IGRlbGVnYXRlcyB0byBidWlsZFVuc2lnbmVkU3dlZXBUeG5UU1NcbiAgICogICAtIFNpZ25lZCBzd2VlcCAoZW5jcnlwdGVkIGtleXMgKyBwYXNzcGhyYXNlKTogYnVpbGRzIGFuZCBzaWducyBhIFRJUC0yMCB0eCB2aWEgTVBDXG4gICAqL1xuICBwcm90ZWN0ZWQgYXN5bmMgcmVjb3ZlclRTUyhcbiAgICBwYXJhbXM6IFJlY292ZXJPcHRpb25zXG4gICk6IFByb21pc2U8UmVjb3ZlcnlJbmZvIHwgT2ZmbGluZVZhdWx0VHhJbmZvIHwgVW5zaWduZWRTd2VlcFR4TVBDdjI+IHtcbiAgICB0aGlzLnZhbGlkYXRlUmVjb3ZlcnlQYXJhbXMocGFyYW1zKTtcbiAgICBjb25zdCB1c2VyS2V5ID0gcGFyYW1zLnVzZXJLZXkucmVwbGFjZSgvXFxzL2csICcnKTtcbiAgICBjb25zdCBiYWNrdXBLZXkgPSBwYXJhbXMuYmFja3VwS2V5LnJlcGxhY2UoL1xccy9nLCAnJyk7XG5cbiAgICBpZiAoZ2V0SXNVbnNpZ25lZFN3ZWVwKHsgdXNlcktleSwgYmFja3VwS2V5LCBpc1RzczogcGFyYW1zLmlzVHNzIH0pKSB7XG4gICAgICByZXR1cm4gdGhpcy5idWlsZFVuc2lnbmVkU3dlZXBUeG5UU1MocGFyYW1zKTtcbiAgICB9XG5cbiAgICAvLyBTaWduZWQgc3dlZXA6IGRlY3J5cHQgTVBDIHYyIGtleSBzaGFyZXNcbiAgICBjb25zdCB7IHVzZXJLZXlTaGFyZSwgYmFja3VwS2V5U2hhcmUsIGNvbW1vbktleUNoYWluIH0gPSBhd2FpdCBFQ0RTQVV0aWxzLmdldE1wY1YyUmVjb3ZlcnlLZXlTaGFyZXMoXG4gICAgICB1c2VyS2V5LFxuICAgICAgYmFja3VwS2V5LFxuICAgICAgcGFyYW1zLndhbGxldFBhc3NwaHJhc2VcbiAgICApO1xuXG4gICAgY29uc3QgTVBDID0gbmV3IEVjZHNhKCk7XG4gICAgY29uc3QgZGVyaXZlZENvbW1vbktleUNoYWluID0gTVBDLmRlcml2ZVVuaGFyZGVuZWQoY29tbW9uS2V5Q2hhaW4sICdtLzAnKTtcbiAgICBjb25zdCBiYWNrdXBLZXlQYWlyID0gbmV3IEtleVBhaXIoeyBwdWI6IGRlcml2ZWRDb21tb25LZXlDaGFpbi5zbGljZSgwLCA2NikgfSk7XG4gICAgY29uc3QgYmFzZUFkZHJlc3MgPSBiYWNrdXBLZXlQYWlyLmdldEFkZHJlc3MoKTtcblxuICAgIGNvbnN0IHsgdHg6IHVuc2lnbmVkVHggfSA9IGF3YWl0IHRoaXMuYnVpbGRUZW1wb1N3ZWVwVHgoYmFzZUFkZHJlc3MsIHBhcmFtcyk7XG4gICAgY29uc3Qgc2VyaWFsaXplZEhleCA9IGF3YWl0IHVuc2lnbmVkVHguc2VyaWFsaXplKCk7XG5cbiAgICAvLyBIYXNoIHRoZSB1bnNpZ25lZCAweDc2IHR4IOKAlCBtYXRjaGVzIFRpcDIwVHJhbnNhY3Rpb25CdWlsZGVyJ3Mgb3duIHNpZ25pbmcgbG9naWNcbiAgICBjb25zdCBtc2dIYXNoSGV4ID0gZXRoZXJzLnV0aWxzLmtlY2NhazI1NihldGhlcnMudXRpbHMuYXJyYXlpZnkoc2VyaWFsaXplZEhleCkpO1xuICAgIGNvbnN0IG1lc3NhZ2VIYXNoID0gQnVmZmVyLmZyb20obXNnSGFzaEhleC5yZXBsYWNlKCcweCcsICcnKSwgJ2hleCcpO1xuXG4gICAgY29uc3Qgc2lnbmF0dXJlID0gYXdhaXQgRUNEU0FVdGlscy5zaWduUmVjb3ZlcnlNcGNWMihtZXNzYWdlSGFzaCwgdXNlcktleVNoYXJlLCBiYWNrdXBLZXlTaGFyZSwgY29tbW9uS2V5Q2hhaW4pO1xuXG4gICAgLy8gRUNEU0FNZXRob2RUeXBlcy5TaWduYXR1cmUuci9zIGFyZSA2NC1jaGFyIGhleCBXSVRIT1VUIDB4IHByZWZpeFxuICAgIHVuc2lnbmVkVHguc2V0U2lnbmF0dXJlKHtcbiAgICAgIHI6IGAweCR7c2lnbmF0dXJlLnJ9YCxcbiAgICAgIHM6IGAweCR7c2lnbmF0dXJlLnN9YCxcbiAgICAgIHlQYXJpdHk6IHNpZ25hdHVyZS5yZWNpZCxcbiAgICB9KTtcblxuICAgIGNvbnN0IHNpZ25lZEhleCA9IGF3YWl0IHVuc2lnbmVkVHguc2VyaWFsaXplKCk7XG4gICAgY29uc3QgdHhJZCA9IGV0aGVycy51dGlscy5rZWNjYWsyNTYoZXRoZXJzLnV0aWxzLmFycmF5aWZ5KHNpZ25lZEhleCkpO1xuICAgIHJldHVybiB7IGlkOiB0eElkLCB0eDogc2lnbmVkSGV4IH07XG4gIH1cblxuICAvKipcbiAgICogQnVpbGRzIGFuIHVuc2lnbmVkIFRJUC0yMCBzd2VlcCB0cmFuc2FjdGlvbiBmb3IgdGhlIG9mZmxpbmUgdmF1bHQgKHVuc2lnbmVkIHN3ZWVwIHBhdGgpLlxuICAgKiBDYWxsZWQgYnkgcmVjb3ZlclRTUyB3aGVuIHBsYWluIHB1YmxpYyBrZXkgc2hhcmVzIGFyZSBwcm92aWRlZC5cbiAgICovXG4gIHByb3RlY3RlZCBhc3luYyBidWlsZFVuc2lnbmVkU3dlZXBUeG5UU1MocGFyYW1zOiBSZWNvdmVyT3B0aW9ucyk6IFByb21pc2U8T2ZmbGluZVZhdWx0VHhJbmZvIHwgVW5zaWduZWRTd2VlcFR4TVBDdjI+IHtcbiAgICBjb25zdCBiYWNrdXBLZXkgPSBwYXJhbXMuYmFja3VwS2V5LnJlcGxhY2UoL1xccy9nLCAnJyk7XG4gICAgY29uc3QgZGVyaXZhdGlvblBhdGggPSBwYXJhbXMuZGVyaXZhdGlvblNlZWQgPyBnZXREZXJpdmF0aW9uUGF0aChwYXJhbXMuZGVyaXZhdGlvblNlZWQpIDogJ20vMCc7XG4gICAgY29uc3QgTVBDID0gbmV3IEVjZHNhKCk7XG4gICAgY29uc3QgZGVyaXZlZENvbW1vbktleUNoYWluID0gTVBDLmRlcml2ZVVuaGFyZGVuZWQoYmFja3VwS2V5LCBkZXJpdmF0aW9uUGF0aCk7XG4gICAgY29uc3QgYmFja3VwS2V5UGFpciA9IG5ldyBLZXlQYWlyKHsgcHViOiBkZXJpdmVkQ29tbW9uS2V5Q2hhaW4uc2xpY2UoMCwgNjYpIH0pO1xuICAgIGNvbnN0IGJhc2VBZGRyZXNzID0gYmFja3VwS2V5UGFpci5nZXRBZGRyZXNzKCk7XG5cbiAgICBjb25zdCB7IHR4LCBub25jZSwgc3dlZXBBbW91bnQsIGdhc01hcmdpblVuaXRzIH0gPSBhd2FpdCB0aGlzLmJ1aWxkVGVtcG9Td2VlcFR4KGJhc2VBZGRyZXNzLCBwYXJhbXMpO1xuICAgIGNvbnN0IHNlcmlhbGl6ZWRIZXggPSBhd2FpdCB0eC5zZXJpYWxpemUoKTtcbiAgICBjb25zdCBzZXJpYWxpemVkVHhIZXggPSBzZXJpYWxpemVkSGV4LnJlcGxhY2UoJzB4JywgJycpO1xuICAgIGNvbnN0IHNpZ25hYmxlSGV4ID0gZXRoZXJzLnV0aWxzLmtlY2NhazI1NihldGhlcnMudXRpbHMuYXJyYXlpZnkoc2VyaWFsaXplZEhleCkpLnJlcGxhY2UoJzB4JywgJycpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHR4UmVxdWVzdHM6IFtcbiAgICAgICAge1xuICAgICAgICAgIHdhbGxldENvaW46IHRoaXMuZ2V0Q2hhaW4oKSxcbiAgICAgICAgICB0cmFuc2FjdGlvbnM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgdW5zaWduZWRUeDoge1xuICAgICAgICAgICAgICAgIHNlcmlhbGl6ZWRUeEhleCxcbiAgICAgICAgICAgICAgICBzaWduYWJsZUhleCxcbiAgICAgICAgICAgICAgICBkZXJpdmF0aW9uUGF0aCxcbiAgICAgICAgICAgICAgICBmZWVJbmZvOiB7XG4gICAgICAgICAgICAgICAgICBmZWU6IE51bWJlcihnYXNNYXJnaW5Vbml0cyksXG4gICAgICAgICAgICAgICAgICBmZWVTdHJpbmc6IHRpcDIwVW5pdHNUb0Ftb3VudChnYXNNYXJnaW5Vbml0cyksXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBwYXJzZWRUeDoge1xuICAgICAgICAgICAgICAgICAgc3BlbmRBbW91bnQ6IHRpcDIwVW5pdHNUb0Ftb3VudChzd2VlcEFtb3VudCksXG4gICAgICAgICAgICAgICAgICBvdXRwdXRzOiBbXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICBjb2luTmFtZTogdGhpcy5nZXRDaGFpbigpLFxuICAgICAgICAgICAgICAgICAgICAgIGFkZHJlc3M6IHBhcmFtcy5yZWNvdmVyeURlc3RpbmF0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgIHZhbHVlU3RyaW5nOiB0aXAyMFVuaXRzVG9BbW91bnQoc3dlZXBBbW91bnQpLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGNvaW5TcGVjaWZpYzogeyBjb21tb25LZXlDaGFpbjogYmFja3VwS2V5IH0sXG4gICAgICAgICAgICAgICAgZWlwMTU1OTogcGFyYW1zLmVpcDE1NTksXG4gICAgICAgICAgICAgICAgcmVwbGF5UHJvdGVjdGlvbk9wdGlvbnM6IHBhcmFtcy5yZXBsYXlQcm90ZWN0aW9uT3B0aW9ucyxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgbm9uY2UsXG4gICAgICAgICAgICAgIHNpZ25hdHVyZVNoYXJlczogW10sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRyYW5zYWN0aW9uIGJ1aWxkZXIgZm9yIFRlbXBvLlxuICAgKi9cbiAgcHJvdGVjdGVkIGdldFRyYW5zYWN0aW9uQnVpbGRlcihjb21tb24/OiBFdGhMaWtlQ29tbW9uLmRlZmF1bHQpOiBUcmFuc2FjdGlvbkJ1aWxkZXIge1xuICAgIHJldHVybiBuZXcgVGlwMjBUcmFuc2FjdGlvbkJ1aWxkZXIoY29pbnMuZ2V0KHRoaXMuZ2V0QmFzZUNoYWluKCkpKSBhcyB1bmtub3duIGFzIFRyYW5zYWN0aW9uQnVpbGRlcjtcbiAgfVxufVxuIl19
501
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVtcG8uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdGVtcG8udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7O0dBRUc7QUFDSCwyREFZa0M7QUFFbEMsbURBZThCO0FBQzlCLHlEQUE0RDtBQUM1RCxpREFBeUU7QUFDekUsbUNBQWdDO0FBQ2hDLCtCQUFrRTtBQUNsRSx1Q0FLcUI7QUFDckIsK0NBQStGO0FBQy9GLHlDQUEyQjtBQUMzQix5REFBMkM7QUFFM0MsTUFBYSxLQUFNLFNBQVEsc0NBQXVCO0lBQ2hELFlBQXNCLEtBQWdCLEVBQUUsV0FBdUM7UUFDN0UsS0FBSyxDQUFDLEtBQUssRUFBRSxXQUFXLENBQUMsQ0FBQztJQUM1QixDQUFDO0lBRUQ7O09BRUc7SUFDSCxNQUFNLENBQUMsY0FBYyxDQUFDLEtBQWdCLEVBQUUsV0FBdUM7UUFDN0UsT0FBTyxJQUFJLEtBQUssQ0FBQyxLQUFLLEVBQUUsV0FBVyxDQUFDLENBQUM7SUFDdkMsQ0FBQztJQUVEOztPQUVHO0lBQ0gsUUFBUTtRQUNOLE9BQU8sSUFBSSxDQUFDLFlBQVksRUFBRSxJQUFJLElBQUksT0FBTyxDQUFDO0lBQzVDLENBQUM7SUFFRDs7T0FFRztJQUNILFdBQVc7UUFDVCxPQUFPLE9BQU8sQ0FBQztJQUNqQixDQUFDO0lBRUQsa0JBQWtCO0lBQ2xCLGFBQWE7UUFDWCxPQUFPLEdBQUcsQ0FBQztJQUNiLENBQUM7SUFFRDs7O09BR0c7SUFDSCx3QkFBd0I7UUFDdEIsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxXQUFXO1FBQ1QsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxlQUFlO1FBQ2IsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsY0FBYyxDQUFDLE9BQWU7UUFDNUIsSUFBSSxPQUFPLE9B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Z0NBQzNDLE9BQU8sRUFBRSxNQUFNLENBQUMsT0FBTztnQ0FDdkIsdUJBQXVCLEVBQUUsTUFBTSxDQUFDLHVCQUF1Qjs2QkFDeEQ7NEJBQ0QsS0FBSzs0QkFDTCxlQUFlLEVBQUUsRUFBRTt5QkFDcEI7cUJBQ0Y7aUJBQ0Y7YUFDRjtTQUNGLENBQUM7SUFDSixDQUFDO0lBRUQ7O09BRUc7SUFDTyxxQkFBcUIsQ0FBQyxNQUE4QjtRQUM1RCxPQUFPLElBQUksNkJBQXVCLENBQUMsZUFBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FBa0MsQ0FBQztJQUN0RyxDQUFDO0NBQ0Y7QUF4aEJELHNCQXdoQkMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBwcmV0dGllclxuICovXG5pbXBvcnQge1xuICBBYnN0cmFjdEV0aExpa2VOZXdDb2lucyxcbiAgUmVjb3Zlck9wdGlvbnMsXG4gIE9mZmxpbmVWYXVsdFR4SW5mbyxcbiAgVW5zaWduZWRTd2VlcFR4TVBDdjIsXG4gIFJlY292ZXJ5SW5mbyxcbiAgVHJhbnNhY3Rpb25CdWlsZGVyLFxuICBWZXJpZnlFdGhUcmFuc2FjdGlvbk9wdGlvbnMsXG4gIFZlcmlmeUV0aEFkZHJlc3NPcHRpb25zLFxuICBUc3NWZXJpZnlFdGhBZGRyZXNzT3B0aW9ucyxcbiAgb3B0aW9uYWxEZXBzLFxuICBLZXlQYWlyLFxufSBmcm9tICdAYml0Z28tYmV0YS9hYnN0cmFjdC1ldGgnO1xuaW1wb3J0IHR5cGUgKiBhcyBFdGhMaWtlQ29tbW9uIGZyb20gJ0BldGhlcmV1bWpzL2NvbW1vbic7XG5pbXBvcnQge1xuICBCYXNlQ29pbixcbiAgQml0R29CYXNlLFxuICBJbnZhbGlkQWRkcmVzc0Vycm9yLFxuICBJbnZhbGlkTWVtb0lkRXJyb3IsXG4gIE1QQ0FsZ29yaXRobSxcbiAgUGFyc2VUcmFuc2FjdGlvbk9wdGlvbnMsXG4gIFBhcnNlZFRyYW5zYWN0aW9uLFxuICBVbmV4cGVjdGVkQWRkcmVzc0Vycm9yLFxuICBQb3B1bGF0ZWRJbnRlbnQsXG4gIFByZWJ1aWxkVHJhbnNhY3Rpb25XaXRoSW50ZW50T3B0aW9ucyxcbiAgY29tbW9uLFxuICBFY2RzYSxcbiAgRUNEU0FVdGlscyxcbiAgZ2V0SXNVbnNpZ25lZFN3ZWVwLFxufSBmcm9tICdAYml0Z28tYmV0YS9zZGstY29yZSc7XG5pbXBvcnQgeyBnZXREZXJpdmF0aW9uUGF0aCB9IGZyb20gJ0BiaXRnby1iZXRhL3Nkay1saWItbXBjJztcbmltcG9ydCB7IEJhc2VDb2luIGFzIFN0YXRpY3NCYXNlQ29pbiwgY29pbnMgfSBmcm9tICdAYml0Z28tYmV0YS9zdGF0aWNzJztcbmltcG9ydCB7IGV0aGVycyB9IGZyb20gJ2V0aGVycyc7XG5pbXBvcnQgeyBUaXAyMFRyYW5zYWN0aW9uLCBUaXAyMFRyYW5zYWN0aW9uQnVpbGRlciB9IGZyb20gJy4vbGliJztcbmltcG9ydCB7XG4gIGFtb3VudFRvVGlwMjBVbml0cyxcbiAgdGlwMjBVbml0c1RvQW1vdW50LFxuICBpc1RpcDIwVHJhbnNhY3Rpb24sXG4gIGlzVmFsaWRNZW1vSWQgYXMgaXNWYWxpZE1lbW9JZFV0aWwsXG59IGZyb20gJy4vbGliL3V0aWxzJztcbmltcG9ydCB7IE1BSU5ORVRfQ09JTiwgUEFUSF9VU0RfVE9LRU5fTUFJTk5FVCwgUEFUSF9VU0RfVE9LRU5fVEVTVE5FVCB9IGZyb20gJy4vbGliL2NvbnN0YW50cyc7XG5pbXBvcnQgKiBhcyB1cmwgZnJvbSAndXJsJztcbmltcG9ydCAqIGFzIHF1ZXJ5c3RyaW5nIGZyb20gJ3F1ZXJ5c3RyaW5nJztcblxuZXhwb3J0IGNsYXNzIFRlbXBvIGV4dGVuZHMgQWJzdHJhY3RFdGhMaWtlTmV3Q29pbnMge1xuICBwcm90ZWN0ZWQgY29uc3RydWN0b3IoYml0Z286IEJpdEdvQmFzZSwgc3RhdGljc0NvaW4/OiBSZWFkb25seTxTdGF0aWNzQmFzZUNvaW4+KSB7XG4gICAgc3VwZXIoYml0Z28sIHN0YXRpY3NDb2luKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGYWN0b3J5IG1ldGhvZCB0byBjcmVhdGUgVGVtcG8gaW5zdGFuY2VcbiAgICovXG4gIHN0YXRpYyBjcmVhdGVJbnN0YW5jZShiaXRnbzogQml0R29CYXNlLCBzdGF0aWNzQ29pbj86IFJlYWRvbmx5PFN0YXRpY3NCYXNlQ29pbj4pOiBCYXNlQ29pbiB7XG4gICAgcmV0dXJuIG5ldyBUZW1wbyhiaXRnbywgc3RhdGljc0NvaW4pO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgY2hhaW4gaWRlbnRpZmllclxuICAgKi9cbiAgZ2V0Q2hhaW4oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fc3RhdGljc0NvaW4/Lm5hbWUgfHwgJ3RlbXBvJztcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGZ1bGwgY2hhaW4gbmFtZVxuICAgKi9cbiAgZ2V0RnVsbE5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gJ1RlbXBvJztcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICBnZXRCYXNlRmFjdG9yKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIDFlNjtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiB2YWx1ZS1sZXNzIHRyYW5zZmVycyBhcmUgYWxsb3dlZFxuICAgKiBFVk0tYmFzZWQgY2hhaW5zIGFsbG93IHplcm8tdmFsdWUgdHJhbnNmZXJzIGZvciBzbWFydCBjb250cmFjdCBpbnRlcmFjdGlvbnNcbiAgICovXG4gIHZhbHVlbGVzc1RyYW5zZmVyQWxsb3dlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiBUU1MgaXMgc3VwcG9ydGVkXG4gICAqL1xuICBzdXBwb3J0c1RzcygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIE1QQyBhbGdvcml0aG0gKEVDRFNBIGZvciBFVk0gY2hhaW5zKVxuICAgKi9cbiAgZ2V0TVBDQWxnb3JpdGhtKCk6IE1QQ0FsZ29yaXRobSB7XG4gICAgcmV0dXJuICdlY2RzYSc7XG4gIH1cblxuICAvKipcbiAgICogRXZhbHVhdGVzIHdoZXRoZXIgYW4gYWRkcmVzcyBzdHJpbmcgaXMgdmFsaWQgZm9yIFRlbXBvXG4gICAqIFN1cHBvcnRzIGFkZHJlc3NlcyB3aXRoIG9wdGlvbmFsIG1lbW9JZCBxdWVyeSBwYXJhbWV0ZXIgKGUuZy4sIDB4Li4uP21lbW9JZD0xMjMpXG4gICAqIEBwYXJhbSBhZGRyZXNzIC0gVGhlIGFkZHJlc3MgdG8gdmFsaWRhdGVcbiAgICogQHJldHVybnMgdHJ1ZSBpZiBhZGRyZXNzIGlzIHZhbGlkXG4gICAqL1xuICBpc1ZhbGlkQWRkcmVzcyhhZGRyZXNzOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBpZiAodHlwZW9mIGFkZHJlc3MgIT09ICdzdHJpbmcnKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHsgYmFzZUFkZHJlc3MgfSA9IHRoaXMuZ2V0QWRkcmVzc0RldGFpbHMoYWRkcmVzcyk7XG4gICAgICByZXR1cm4gb3B0aW9uYWxEZXBzLmV0aFV0aWwuaXNWYWxpZEFkZHJlc3Mob3B0aW9uYWxEZXBzLmV0aFV0aWwuYWRkSGV4UHJlZml4KGJhc2VBZGRyZXNzKSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBQYXJzZSBhZGRyZXNzIGludG8gYmFzZSBhZGRyZXNzIGFuZCBvcHRpb25hbCBtZW1vSWRcbiAgICogVGhyb3dzIEludmFsaWRBZGRyZXNzRXJyb3IgZm9yIGludmFsaWQgYWRkcmVzcyBmb3JtYXRzXG4gICAqIEBwYXJhbSBhZGRyZXNzIC0gQWRkcmVzcyBzdHJpbmcsIHBvdGVudGlhbGx5IHdpdGggP21lbW9JZD1YIHN1ZmZpeFxuICAgKiBAcmV0dXJucyBPYmplY3QgY29udGFpbmluZyBhZGRyZXNzLCBiYXNlQWRkcmVzcywgYW5kIG1lbW9JZCAobnVsbCBpZiBub3QgcHJlc2VudClcbiAgICogQHRocm93cyBJbnZhbGlkQWRkcmVzc0Vycm9yIGlmIGFkZHJlc3MgZm9ybWF0IGlzIGludmFsaWRcbiAgICovXG4gIGdldEFkZHJlc3NEZXRhaWxzKGFkZHJlc3M6IHN0cmluZyk6IHsgYWRkcmVzczogc3RyaW5nOyBiYXNlQWRkcmVzczogc3RyaW5nOyBtZW1vSWQ6IHN0cmluZyB8IG51bGwgfSB7XG4gICAgaWYgKHR5cGVvZiBhZGRyZXNzICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBZGRyZXNzRXJyb3IoYGludmFsaWQgYWRkcmVzczogJHthZGRyZXNzfWApO1xuICAgIH1cblxuICAgIGNvbnN0IGRlc3RpbmF0aW9uRGV0YWlscyA9IHVybC5wYXJzZShhZGRyZXNzKTtcbiAgICBjb25zdCBiYXNlQWRkcmVzcyA9IGRlc3RpbmF0aW9uRGV0YWlscy5wYXRobmFtZSB8fCAnJztcblxuICAgIC8vIE5vIHF1ZXJ5IHN0cmluZyAtIGp1c3QgYSBwbGFpbiBhZGRyZXNzXG4gICAgaWYgKGRlc3RpbmF0aW9uRGV0YWlscy5wYXRobmFtZSA9PT0gYWRkcmVzcykge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgYWRkcmVzcyxcbiAgICAgICAgYmFzZUFkZHJlc3M6IGFkZHJlc3MsXG4gICAgICAgIG1lbW9JZDogbnVsbCxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgLy8gSGFzIHF1ZXJ5IHN0cmluZyAtIG11c3QgY29udGFpbiBtZW1vSWRcbiAgICBpZiAoIWRlc3RpbmF0aW9uRGV0YWlscy5xdWVyeSkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBZGRyZXNzRXJyb3IoYGludmFsaWQgYWRkcmVzczogJHthZGRyZXNzfWApO1xuICAgIH1cblxuICAgIGNvbnN0IHF1ZXJ5RGV0YWlscyA9IHF1ZXJ5c3RyaW5nLnBhcnNlKGRlc3RpbmF0aW9uRGV0YWlscy5xdWVyeSk7XG5cbiAgICAvLyBRdWVyeSBzdHJpbmcgbXVzdCBjb250YWluIG1lbW9JZFxuICAgIGlmICghcXVlcnlEZXRhaWxzLm1lbW9JZCkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBZGRyZXNzRXJyb3IoYGludmFsaWQgYWRkcmVzczogJHthZGRyZXNzfSwgdW5rbm93biBxdWVyeSBwYXJhbWV0ZXJzYCk7XG4gICAgfVxuXG4gICAgLy8gT25seSBvbmUgbWVtb0lkIGFsbG93ZWRcbiAgICBpZiAoQXJyYXkuaXNBcnJheShxdWVyeURldGFpbHMubWVtb0lkKSkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBZGRyZXNzRXJyb3IoXG4gICAgICAgIGBtZW1vSWQgbWF5IG9ubHkgYmUgZ2l2ZW4gYXQgbW9zdCBvbmNlLCBidXQgZm91bmQgJHtxdWVyeURldGFpbHMubWVtb0lkLmxlbmd0aH0gaW5zdGFuY2VzIGluIGFkZHJlc3MgJHthZGRyZXNzfWBcbiAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gUmVqZWN0IGlmIHRoZXJlIGFyZSBvdGhlciBxdWVyeSBwYXJhbWV0ZXJzIGJlc2lkZXMgbWVtb0lkXG4gICAgY29uc3QgcXVlcnlLZXlzID0gT2JqZWN0LmtleXMocXVlcnlEZXRhaWxzKTtcbiAgICBpZiAocXVlcnlLZXlzLmxlbmd0aCAhPT0gMSkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBZGRyZXNzRXJyb3IoYGludmFsaWQgYWRkcmVzczogJHthZGRyZXNzfSwgb25seSBtZW1vSWQgcXVlcnkgcGFyYW1ldGVyIGlzIGFsbG93ZWRgKTtcbiAgICB9XG5cbiAgICAvLyBWYWxpZGF0ZSBtZW1vSWQgZm9ybWF0XG4gICAgaWYgKCF0aGlzLmlzVmFsaWRNZW1vSWQocXVlcnlEZXRhaWxzLm1lbW9JZCkpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkTWVtb0lkRXJyb3IoYGludmFsaWQgYWRkcmVzczogJyR7YWRkcmVzc30nLCBtZW1vSWQgaXMgbm90IHZhbGlkYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGFkZHJlc3MsXG4gICAgICBiYXNlQWRkcmVzcyxcbiAgICAgIG1lbW9JZDogcXVlcnlEZXRhaWxzLm1lbW9JZCxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlIHRoYXQgYSBtZW1vSWQgaXMgYSB2YWxpZCBub24tbmVnYXRpdmUgaW50ZWdlciBzdHJpbmdcbiAgICogQHBhcmFtIG1lbW9JZCAtIFRoZSBtZW1vSWQgdG8gdmFsaWRhdGVcbiAgICogQHJldHVybnMgdHJ1ZSBpZiB2YWxpZFxuICAgKi9cbiAgaXNWYWxpZE1lbW9JZChtZW1vSWQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBpc1ZhbGlkTWVtb0lkVXRpbChtZW1vSWQpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRlbXBvIHVzZXMgbWVtb0lkLWJhc2VkIGFkZHJlc3NlcyByYXRoZXIgdGhhbiBmb3J3YXJkZXIgY29udHJhY3RzLlxuICAgKiBWZXJpZnkgdGhhdCB0aGUgYWRkcmVzcyBiZWxvbmdzIHRvIHRoaXMgd2FsbGV0IGJ5IGNoZWNraW5nIHRoYXQgdGhlXG4gICAqIGJhc2UgKEVWTSkgcG9ydGlvbiBtYXRjaGVzIHRoZSB3YWxsZXQncyBiYXNlIGFkZHJlc3MuXG4gICAqL1xuICBhc3luYyBpc1dhbGxldEFkZHJlc3MocGFyYW1zOiBWZXJpZnlFdGhBZGRyZXNzT3B0aW9ucyB8IFRzc1ZlcmlmeUV0aEFkZHJlc3NPcHRpb25zKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3QgeyBhZGRyZXNzLCBiYXNlQWRkcmVzcyB9ID0gcGFyYW1zO1xuICAgIGNvbnN0IHJvb3RBZGRyZXNzID0gKHBhcmFtcyBhcyB1bmtub3duIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KS5yb290QWRkcmVzcyBhcyBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgICBpZiAoIWFkZHJlc3MpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQWRkcmVzc0Vycm9yKCdhZGRyZXNzIGlzIHJlcXVpcmVkJyk7XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLmlzVmFsaWRBZGRyZXNzKGFkZHJlc3MpKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFkZHJlc3NFcnJvcihgaW52YWxpZCBhZGRyZXNzOiAke2FkZHJlc3N9YCk7XG4gICAgfVxuXG4gICAgY29uc3QgeyBiYXNlQWRkcmVzczogYWRkcmVzc0Jhc2UgfSA9IHRoaXMuZ2V0QWRkcmVzc0RldGFpbHMoYWRkcmVzcyk7XG5cbiAgICBjb25zdCB3YWxsZXRCYXNlQWRkcmVzcyA9IGJhc2VBZGRyZXNzIHx8IHJvb3RBZGRyZXNzO1xuICAgIGlmICghd2FsbGV0QmFzZUFkZHJlc3MpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQWRkcmVzc0Vycm9yKCdiYXNlQWRkcmVzcyBvciByb290QWRkcmVzcyBpcyByZXF1aXJlZCBmb3IgdmVyaWZpY2F0aW9uJyk7XG4gICAgfVxuXG4gICAgY29uc3QgeyBiYXNlQWRkcmVzczogd2FsbGV0QmFzZSB9ID0gdGhpcy5nZXRBZGRyZXNzRGV0YWlscyh3YWxsZXRCYXNlQWRkcmVzcyk7XG5cbiAgICBpZiAoYWRkcmVzc0Jhc2UudG9Mb3dlckNhc2UoKSAhPT0gd2FsbGV0QmFzZS50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICB0aHJvdyBuZXcgVW5leHBlY3RlZEFkZHJlc3NFcnJvcihgYWRkcmVzcyB2YWxpZGF0aW9uIGZhaWx1cmU6IGV4cGVjdGVkICR7d2FsbGV0QmFzZX0gYnV0IGdvdCAke2FkZHJlc3NCYXNlfWApO1xuICAgIH1cblxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIFBhcnNlIGEgc2VyaWFsaXNlZCBUZW1wbyB0cmFuc2FjdGlvbiBhbmQgcmV0dXJuIGl0cyBvcGVyYXRpb25zIGFzIFNESyBvdXRwdXRzLlxuICAgKiBAaW5oZXJpdGRvY1xuICAgKi9cbiAgYXN5bmMgcGFyc2VUcmFuc2FjdGlvbihwYXJhbXM6IFBhcnNlVHJhbnNhY3Rpb25PcHRpb25zKTogUHJvbWlzZTxQYXJzZWRUcmFuc2FjdGlvbj4ge1xuICAgIGNvbnN0IHR4SGV4ID0gKHBhcmFtcy50eEhleCB8fCAocGFyYW1zIGFzIGFueSkuaGFsZlNpZ25lZD8udHhIZXgpIGFzIHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICBpZiAoIXR4SGV4KSB7XG4gICAgICByZXR1cm4ge307XG4gICAgfVxuICAgIGlmICghaXNUaXAyMFRyYW5zYWN0aW9uKHR4SGV4KSkge1xuICAgICAgcmV0dXJuIHt9O1xuICAgIH1cbiAgICBjb25zdCB0eEJ1aWxkZXIgPSB0aGlzLmdldFRyYW5zYWN0aW9uQnVpbGRlcigpO1xuICAgIHR4QnVpbGRlci5mcm9tKHR4SGV4KTtcbiAgICBjb25zdCB0eCA9IChhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKSkgYXMgVGlwMjBUcmFuc2FjdGlvbjtcbiAgICByZXR1cm4ge1xuICAgICAgaW5wdXRzOiB0eC5pbnB1dHMubWFwKChpbnB1dCkgPT4gKHtcbiAgICAgICAgYWRkcmVzczogaW5wdXQuYWRkcmVzcyxcbiAgICAgICAgYW1vdW50OiBpbnB1dC52YWx1ZSxcbiAgICAgICAgY29pbjogdGhpcy5nZXRDaGFpbigpLFxuICAgICAgfSkpLFxuICAgICAgb3V0cHV0czogdHgub3V0cHV0cy5tYXAoKG91dHB1dCkgPT4gKHtcbiAgICAgICAgYWRkcmVzczogb3V0cHV0LmFkZHJlc3MsXG4gICAgICAgIGFtb3VudDogb3V0cHV0LnZhbHVlLFxuICAgICAgICBjb2luOiB0aGlzLmdldENoYWluKCksXG4gICAgICB9KSksXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBWZXJpZnkgdGhhdCBhIFRlbXBvIHRyYW5zYWN0aW9uIG1hdGNoZXMgdGhlIGludGVuZGVkIHJlY2lwaWVudHMgYW5kIGFtb3VudHMuXG4gICAqIEBpbmhlcml0ZG9jXG4gICAqL1xuICBhc3luYyB2ZXJpZnlUcmFuc2FjdGlvbihwYXJhbXM6IFZlcmlmeUV0aFRyYW5zYWN0aW9uT3B0aW9ucyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IHsgdHhQYXJhbXMsIHR4UHJlYnVpbGQgfSA9IHBhcmFtcztcblxuICAgIGlmICghdHhQcmVidWlsZD8udHhIZXgpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIC8vIHNpZ25hYmxlSGV4IG1heSBhcnJpdmUgd2l0aG91dCB0aGUgMHggcHJlZml4IChlLmcuIGZyb20gdGhlIFRTUyBzaWduaW5nIGZsb3cpLlxuICAgIGNvbnN0IHR4SGV4ID0gdHhQcmVidWlsZC50eEhleC5zdGFydHNXaXRoKCcweCcpID8gdHhQcmVidWlsZC50eEhleCA6ICcweCcgKyB0eFByZWJ1aWxkLnR4SGV4O1xuICAgIGlmICghaXNUaXAyMFRyYW5zYWN0aW9uKHR4SGV4KSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIFRlbXBvIHRyYW5zYWN0aW9uIGhleDogZXhwZWN0ZWQgYSAweDc2IFRJUC0yMCB0cmFuc2FjdGlvbmApO1xuICAgIH1cblxuICAgIGNvbnN0IHR4QnVpbGRlciA9IHRoaXMuZ2V0VHJhbnNhY3Rpb25CdWlsZGVyKCk7XG4gICAgdHhCdWlsZGVyLmZyb20odHhIZXgpO1xuICAgIGNvbnN0IHR4ID0gKGF3YWl0IHR4QnVpbGRlci5idWlsZCgpKSBhcyBUaXAyMFRyYW5zYWN0aW9uO1xuICAgIGNvbnN0IG9wZXJhdGlvbnMgPSB0eC5nZXRPcGVyYXRpb25zKCk7XG4gICAgY29uc3QgcmF3Q2FsbHMgPSB0eC5nZXRSYXdDYWxscygpO1xuXG4gICAgLy8gSWYgdGhlIGNhbGxlciBzcGVjaWZpZWQgZXhwbGljaXQgcmVjaXBpZW50cywgdmVyaWZ5IHRoZXkgbWF0Y2ggdGhlIHRyYW5zYWN0aW9uLlxuICAgIC8vIEEgdHJhbnNhY3Rpb24gaXMgZWl0aGVyIGFsbCB0b2tlbiB0cmFuc2ZlciBvcGVyYXRpb25zIE9SIGEgc2luZ2xlIHJhdyBjb250cmFjdCBjYWxsIOKAlCBuZXZlciBtaXhlZC5cbiAgICBjb25zdCByZWNpcGllbnRzID0gdHhQYXJhbXM/LnJlY2lwaWVudHM7XG4gICAgaWYgKHJlY2lwaWVudHMgJiYgcmVjaXBpZW50cy5sZW5ndGggPiAwKSB7XG4gICAgICBpZiAocmF3Q2FsbHMubGVuZ3RoID4gMCkge1xuICAgICAgICAvLyBDb250cmFjdCBjYWxsIHRyYW5zYWN0aW9uIOKAlCBzaW5nbGUgcmF3IGNhbGwsIHNpbmdsZSByZWNpcGllbnQgd2l0aCBkYXRhXG4gICAgICAgIGlmIChyYXdDYWxscy5sZW5ndGggIT09IHJlY2lwaWVudHMubGVuZ3RoKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgYFRyYW5zYWN0aW9uIGhhcyAke3Jhd0NhbGxzLmxlbmd0aH0gY2FsbChzKSBidXQgJHtyZWNpcGllbnRzLmxlbmd0aH0gcmVjaXBpZW50KHMpIHdlcmUgcmVxdWVzdGVkYFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCByYXdDYWxscy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIGNvbnN0IHJhd0NhbGwgPSByYXdDYWxsc1tpXTtcbiAgICAgICAgICBjb25zdCByZWNpcGllbnQgPSByZWNpcGllbnRzW2ldO1xuICAgICAgICAgIGlmIChyYXdDYWxsLnRvLnRvTG93ZXJDYXNlKCkgIT09IHJlY2lwaWVudC5hZGRyZXNzLnNwbGl0KCc/JylbMF0udG9Mb3dlckNhc2UoKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBSYXcgY2FsbCAke2l9IGFkZHJlc3MgbWlzbWF0Y2g6IGV4cGVjdGVkICR7cmVjaXBpZW50LmFkZHJlc3N9LCBnb3QgJHtyYXdDYWxsLnRvfWApO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoIXJlY2lwaWVudC5kYXRhIHx8IHJhd0NhbGwuZGF0YS50b0xvd2VyQ2FzZSgpICE9PSByZWNpcGllbnQuZGF0YS50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFJhdyBjYWxsICR7aX0gY2FsbGRhdGEgbWlzbWF0Y2hgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFRva2VuIHRyYW5zZmVyIHRyYW5zYWN0aW9uIOKAlCBvcGVyYXRpb25zIG1hdGNoZWQgMS10by0xIGFnYWluc3QgcmVjaXBpZW50c1xuICAgICAgICBpZiAob3BlcmF0aW9ucy5sZW5ndGggIT09IHJlY2lwaWVudHMubGVuZ3RoKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgYFRyYW5zYWN0aW9uIGhhcyAke29wZXJhdGlvbnMubGVuZ3RofSBvcGVyYXRpb24ocykgYnV0ICR7cmVjaXBpZW50cy5sZW5ndGh9IHJlY2lwaWVudChzKSB3ZXJlIHJlcXVlc3RlZGBcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgb3BlcmF0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIGNvbnN0IG9wID0gb3BlcmF0aW9uc1tpXTtcbiAgICAgICAgICBjb25zdCByZWNpcGllbnQgPSByZWNpcGllbnRzW2ldO1xuICAgICAgICAgIGNvbnN0IHJlY2lwaWVudEJhc2VBZGRyZXNzID0gcmVjaXBpZW50LmFkZHJlc3Muc3BsaXQoJz8nKVswXTtcbiAgICAgICAgICBpZiAob3AudG8udG9Mb3dlckNhc2UoKSAhPT0gcmVjaXBpZW50QmFzZUFkZHJlc3MudG9Mb3dlckNhc2UoKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBPcGVyYXRpb24gJHtpfSByZWNpcGllbnQgbWlzbWF0Y2g6IGV4cGVjdGVkICR7cmVjaXBpZW50LmFkZHJlc3N9LCBnb3QgJHtvcC50b31gKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3Qgb3BBbW91bnRCYXNlVW5pdHMgPSBhbW91bnRUb1RpcDIwVW5pdHMob3AuYW1vdW50KS50b1N0cmluZygpO1xuICAgICAgICAgIGlmIChvcEFtb3VudEJhc2VVbml0cyAhPT0gcmVjaXBpZW50LmFtb3VudC50b1N0cmluZygpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE9wZXJhdGlvbiAke2l9IGFtb3VudCBtaXNtYXRjaDogZXhwZWN0ZWQgJHtyZWNpcGllbnQuYW1vdW50fSwgZ290ICR7b3BBbW91bnRCYXNlVW5pdHN9YCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gVmVyaWZ5IGZlZSB0b2tlbiBpZiBzcGVjaWZpZWRcbiAgICBpZiAodHhQYXJhbXM/LmZlZVRva2VuKSB7XG4gICAgICBjb25zdCB0eEZlZVRva2VuID0gdHguZ2V0RmVlVG9rZW4oKTtcbiAgICAgIGlmICh0eEZlZVRva2VuPy50b0xvd2VyQ2FzZSgpICE9PSB0eFBhcmFtcy5mZWVUb2tlbi50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgRmVlIHRva2VuIG1pc21hdGNoOiBleHBlY3RlZCAke3R4UGFyYW1zLmZlZVRva2VufSwgZ290ICR7dHhGZWVUb2tlbiB8fCAnbm9uZSd9YCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvKipcbiAgICogU2V0IGNvaW4tc3BlY2lmaWMgZmllbGRzIGluIHRoZSBpbnRlbnQgZm9yIFRlbXBvIFRTUyB0cmFuc2FjdGlvbnMuXG4gICAqIEVuc3VyZXMgZmVlVG9rZW4gaXMgcHJvcGVybHkgd2lyZWQgdGhyb3VnaCB0aGUgaW50ZW50IGZvciBUZW1wbyB0cmFuc2FjdGlvbnMuXG4gICAqIEBwYXJhbSBpbnRlbnQgLSBUaGUgcG9wdWxhdGVkIGludGVudCB0byBtb2RpZnlcbiAgICogQHBhcmFtIHBhcmFtcyAtIFRoZSBwYXJhbWV0ZXJzIGNvbnRhaW5pbmcgZmVlVG9rZW5cbiAgICovXG4gIHNldENvaW5TcGVjaWZpY0ZpZWxkc0luSW50ZW50KGludGVudDogUG9wdWxhdGVkSW50ZW50LCBwYXJhbXM6IFByZWJ1aWxkVHJhbnNhY3Rpb25XaXRoSW50ZW50T3B0aW9ucyk6IHZvaWQge1xuICAgIGlmIChwYXJhbXMuZmVlVG9rZW4pIHtcbiAgICAgIGludGVudC5mZWVPcHRpb25zID0gaW50ZW50LmZlZU9wdGlvbnNcbiAgICAgICAgPyB7IC4uLmludGVudC5mZWVPcHRpb25zLCBmZWVUb2tlbjogcGFyYW1zLmZlZVRva2VuIH1cbiAgICAgICAgOiB7IGZlZVRva2VuOiBwYXJhbXMuZmVlVG9rZW4gfTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUXVlcnkgdGhlIFRlbXBvIEFsY2hlbXkgUlBDIGZvciByZWNvdmVyeSBiYWxhbmNlL25vbmNlIGluZm9ybWF0aW9uLlxuICAgKiBSb3V0ZXMgdGhyb3VnaCBxdWVyeVRlbXBvUnBjIHVzaW5nIHRoZSBVUkwgZnJvbSBlbnZpcm9ubWVudHMudHMuXG4gICAqL1xuICBhc3luYyByZWNvdmVyeUJsb2NrY2hhaW5FeHBsb3JlclF1ZXJ5KFxuICAgIHF1ZXJ5OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+LFxuICAgIGFwaUtleT86IHN0cmluZ1xuICApOiBQcm9taXNlPFJlY29yZDxzdHJpbmcsIHVua25vd24+PiB7XG4gICAgY29uc3QgZXZtQ29uZmlnID0gY29tbW9uLkVudmlyb25tZW50c1t0aGlzLmJpdGdvLmdldEVudigpXS5ldm07XG4gICAgY29uc3QgY29pbkZhbWlseSA9IHRoaXMuZ2V0RmFtaWx5KCk7XG4gICAgaWYgKCFldm1Db25maWcgfHwgIShjb2luRmFtaWx5IGluIGV2bUNvbmZpZykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgZW52IGNvbmZpZyBtaXNzaW5nIGZvciAke2NvaW5GYW1pbHl9IGluICR7dGhpcy5iaXRnby5nZXRFbnYoKX1gKTtcbiAgICB9XG4gICAgY29uc3QgdG9rZW4gPSBhcGlLZXkgfHwgZXZtQ29uZmlnW2NvaW5GYW1pbHldLmFwaVRva2VuO1xuICAgIGNvbnN0IHJwY1VybCA9IGV2bUNvbmZpZ1tjb2luRmFtaWx5XS5iYXNlVXJsO1xuICAgIHJldHVybiB0aGlzLnF1ZXJ5VGVtcG9ScGMocXVlcnksIHJwY1VybCwgdG9rZW4pO1xuICB9XG5cbiAgLyoqXG4gICAqIFRyYW5zbGF0ZXMgRXRoZXJzY2FuLXN0eWxlIHJlY292ZXJ5IHF1ZXJpZXMgaW50byBUZW1wbyBBbGNoZW15IEpTT04tUlBDIGNhbGxzLlxuICAgKlxuICAgKiBTdXBwb3J0ZWQ6XG4gICAqICAgYWNjb3VudC9iYWxhbmNlICAgICAg4oaSIHJldHVybnMgeyByZXN1bHQ6ICcwJyB9IChubyBuYXRpdmUgY29pbiBvbiBUZW1wbylcbiAgICogICBhY2NvdW50L3Rva2VuYmFsYW5jZSDihpIgZXRoX2NhbGwgKGJhbGFuY2VPZiBzZWxlY3RvciAweDcwYTA4MjMxKSDihpIgeyByZXN1bHQ6IGRlY2ltYWxTdHJpbmcgfVxuICAgKiAgIGFjY291bnQvdHhsaXN0ICAgICAgIOKGkiBldGhfZ2V0VHJhbnNhY3Rpb25Db3VudCDihpIgeyBub25jZTogbnVtYmVyIH1cbiAgICovXG4gIHByaXZhdGUgYXN5bmMgcXVlcnlUZW1wb1JwYyhcbiAgICBxdWVyeTogUmVjb3JkPHN0cmluZywgc3RyaW5nPixcbiAgICBycGNVcmw6IHN0cmluZyxcbiAgICBhcGlLZXk/OiBzdHJpbmdcbiAgKTogUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4ge1xuICAgIGNvbnN0IGVuZHBvaW50ID0gYXBpS2V5ID8gYCR7cnBjVXJsfSR7YXBpS2V5fWAgOiBycGNVcmw7XG4gICAgY29uc3QgeyBtb2R1bGUsIGFjdGlvbiwgYWRkcmVzcywgY29udHJhY3RhZGRyZXNzLCB0YWcgfSA9IHF1ZXJ5O1xuXG4gICAgbGV0IG1ldGhvZDogc3RyaW5nO1xuICAgIGxldCBwYXJhbXM6IHVua25vd25bXTtcblxuICAgIGlmIChtb2R1bGUgPT09ICdhY2NvdW50JyAmJiBhY3Rpb24gPT09ICdiYWxhbmNlJykge1xuICAgICAgcmV0dXJuIHsgcmVzdWx0OiAnMCcgfTtcbiAgICB9IGVsc2UgaWYgKG1vZHVsZSA9PT0gJ2FjY291bnQnICYmIGFjdGlvbiA9PT0gJ3Rva2VuYmFsYW5jZScpIHtcbiAgICAgIGNvbnN0IHBhZGRlZEFkZHIgPSAoYWRkcmVzcyA/PyAnJykucmVwbGFjZSgvXjB4LywgJycpLnBhZFN0YXJ0KDY0LCAnMCcpO1xuICAgICAgbWV0aG9kID0gJ2V0aF9jYWxsJztcbiAgICAgIHBhcmFtcyA9IFt7IHRvOiBjb250cmFjdGFkZHJlc3MsIGRhdGE6ICcweDcwYTA4MjMxJyArIHBhZGRlZEFkZHIgfSwgdGFnID8/ICdsYXRlc3QnXTtcbiAgICB9IGVsc2UgaWYgKG1vZHVsZSA9PT0gJ2FjY291bnQnICYmIGFjdGlvbiA9PT0gJ3R4bGlzdCcpIHtcbiAgICAgIG1ldGhvZCA9ICdldGhfZ2V0VHJhbnNhY3Rpb25Db3VudCc7XG4gICAgICBwYXJhbXMgPSBbYWRkcmVzcywgJ2xhdGVzdCddO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYHF1ZXJ5VGVtcG9ScGM6IHVuc3VwcG9ydGVkIG1vZHVsZT0ke21vZHVsZX0gYWN0aW9uPSR7YWN0aW9ufWApO1xuICAgIH1cblxuICAgIGNvbnN0IHJlcyA9IGF3YWl0IGZldGNoKGVuZHBvaW50LCB7XG4gICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgIGhlYWRlcnM6IHsgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyB9LFxuICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoeyBqc29ucnBjOiAnMi4wJywgbWV0aG9kLCBwYXJhbXMsIGlkOiAxIH0pLFxuICAgIH0pO1xuXG4gICAgaWYgKCFyZXMub2spIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQ291bGQgbm90IHJlYWNoIFRlbXBvIFJQQyBlbmRwb2ludCAoSFRUUCAke3Jlcy5zdGF0dXN9KWApO1xuICAgIH1cblxuICAgIGNvbnN0IGJvZHkgPSAoYXdhaXQgcmVzLmpzb24oKSkgYXMgeyByZXN1bHQ/OiB1bmtub3duOyBlcnJvcj86IHsgbWVzc2FnZTogc3RyaW5nIH0gfTtcbiAgICBpZiAoYm9keS5lcnJvcikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBUZW1wbyBSUEMgZXJyb3I6ICR7Ym9keS5lcnJvci5tZXNzYWdlfWApO1xuICAgIH1cblxuICAgIGlmIChtb2R1bGUgPT09ICdhY2NvdW50JyAmJiBhY3Rpb24gPT09ICd0eGxpc3QnKSB7XG4gICAgICByZXR1cm4geyBub25jZTogcGFyc2VJbnQoYm9keS5yZXN1bHQgYXMgc3RyaW5nLCAxNikgfTtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgcmV0dXJuIHsgcmVzdWx0OiBCaWdJbnQoYm9keS5yZXN1bHQgYXMgc3RyaW5nKS50b1N0cmluZygpIH07XG4gICAgfSBjYXRjaCB7XG4gICAgICByZXR1cm4geyByZXN1bHQ6ICcwJyB9O1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTaGFyZWQgaGVscGVyOiBxdWVyaWVzIHRoZSB0b2tlbiBiYWxhbmNlLCBjb21wdXRlcyBzd2VlcCBhbW91bnQsIGFuZCBidWlsZHNcbiAgICogYW4gdW5zaWduZWQgVElQLTIwIHRyYW5zZmVyIHRyYW5zYWN0aW9uLiBVc2VkIGJ5IGJvdGggcmVjb3ZlcnkgcGF0aHMuXG4gICAqXG4gICAqIC0gdG9rZW5Db250cmFjdEFkZHJlc3M6IHRoZSB0b2tlbiB0byBzd2VlcCAoZGVmYXVsdHMgdG8gcGF0aFVTRClcbiAgICogLSBmZWVUb2tlbjogYWx3YXlzIHBhdGhVU0RcbiAgICogLSBJZiBzd2VlcGluZyBwYXRoVVNEIGl0c2VsZiwgcmVzZXJ2ZXMgZ2FzTGltaXQgw5cgbWF4RmVlUGVyR2FzIC8gMTBeMTIgcGF0aFVTRCB1bml0cyBmb3IgZmVlcy5cbiAgICovXG4gIHByaXZhdGUgYXN5bmMgYnVpbGRUZW1wb1N3ZWVwVHgoXG4gICAgd2FsbGV0QWRkcmVzczogc3RyaW5nLFxuICAgIHBhcmFtczogUmVjb3Zlck9wdGlvbnNcbiAgKTogUHJvbWlzZTx7IHR4OiBUaXAyMFRyYW5zYWN0aW9uOyBub25jZTogbnVtYmVyOyBzd2VlcEFtb3VudDogYmlnaW50OyBnYXNNYXJnaW5Vbml0czogYmlnaW50IH0+IHtcbiAgICBpZiAoIXBhcmFtcy50b2tlbkNvbnRyYWN0QWRkcmVzcykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCd0b2tlbkNvbnRyYWN0QWRkcmVzcyBpcyByZXF1aXJlZCBmb3Igc3dlZXAnKTtcbiAgICB9XG4gICAgY29uc3QgdG9rZW5BZGRyZXNzID0gcGFyYW1zLnRva2VuQ29udHJhY3RBZGRyZXNzO1xuXG4gICAgY29uc3QgcGF0aFVzZFRva2VuTmFtZSA9IHRoaXMuZ2V0Q2hhaW4oKSA9PT0gTUFJTk5FVF9DT0lOID8gUEFUSF9VU0RfVE9LRU5fTUFJTk5FVCA6IFBBVEhfVVNEX1RPS0VOX1RFU1RORVQ7XG4gICAgY29uc3QgcGF0aFVzZEFkZHJlc3MgPSAoY29pbnMuZ2V0KHBhdGhVc2RUb2tlbk5hbWUpIGFzIHVua25vd24gYXMgeyBjb250cmFjdEFkZHJlc3M6IHN0cmluZyB9KS5jb250cmFjdEFkZHJlc3M7XG5cbiAgICBjb25zdCByYXdCYWxhbmNlID0gYXdhaXQgdGhpcy5xdWVyeUFkZHJlc3NUb2tlbkJhbGFuY2UodG9rZW5BZGRyZXNzLCB3YWxsZXRBZGRyZXNzLCBwYXJhbXMuYXBpS2V5KTtcbiAgICBjb25zdCBiYWxhbmNlID0gQmlnSW50KHJhd0JhbGFuY2UudG9TdHJpbmcoKSk7XG5cbiAgICBjb25zdCBpc1BhdGhVc2QgPSB0b2tlbkFkZHJlc3MudG9Mb3dlckNhc2UoKSA9PT0gcGF0aFVzZEFkZHJlc3MudG9Mb3dlckNhc2UoKTtcbiAgICBjb25zdCBnYXNMaW1pdEJpZyA9IEJpZ0ludChwYXJhbXMuZ2FzTGltaXQgPz8gNzAwXzAwMCk7XG4gICAgY29uc3QgbWF4RmVlUGVyR2FzQmlnID0gQmlnSW50KHBhcmFtcy5laXAxNTU5Py5tYXhGZWVQZXJHYXMgPz8gMjBfMDAwXzAwMF8wMDApO1xuICAgIC8vIDc1JSBidWZmZXIgb24gdG9wIG9mIGdhc0xpbWl0IMOXIG1heEZlZVBlckdhcyB0byBjb3ZlciBhY3R1YWwgb24tY2hhaW4gZ2FzIHZhcmlhbmNlXG4gICAgY29uc3QgZ2FzTWFyZ2luVW5pdHMgPSAoZ2FzTGltaXRCaWcgKiBtYXhGZWVQZXJHYXNCaWcgKiAxNzVuKSAvICgxMG4gKiogMTJuICogMTAwbik7XG4gICAgY29uc3Qgc3dlZXBBbW91bnQgPSBpc1BhdGhVc2QgPyBiYWxhbmNlIC0gZ2FzTWFyZ2luVW5pdHMgOiBiYWxhbmNlO1xuXG4gICAgaWYgKHN3ZWVwQW1vdW50IDw9IDBuKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBJbnN1ZmZpY2llbnQgYmFsYW5jZSBpbiAke3Rva2VuQWRkcmVzc306ICR7YmFsYW5jZX0gdW5pdHMgKG1pbmltdW0gcmVxdWlyZWQ6ICR7XG4gICAgICAgICAgaXNQYXRoVXNkID8gZ2FzTWFyZ2luVW5pdHMgKyAxbiA6IDFuXG4gICAgICAgIH0pYFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCBzd2VlcEFtb3VudEh1bWFuID0gdGlwMjBVbml0c1RvQW1vdW50KHN3ZWVwQW1vdW50KTtcbiAgICBjb25zdCBub25jZSA9IGF3YWl0IHRoaXMuZ2V0QWRkcmVzc05vbmNlKHdhbGxldEFkZHJlc3MsIHBhcmFtcy5hcGlLZXkpO1xuXG4gICAgY29uc3QgdHhCdWlsZGVyID0gdGhpcy5nZXRUcmFuc2FjdGlvbkJ1aWxkZXIoKSBhcyB1bmtub3duIGFzIFRpcDIwVHJhbnNhY3Rpb25CdWlsZGVyO1xuICAgIHR4QnVpbGRlclxuICAgICAgLmFkZE9wZXJhdGlvbih7IHRva2VuOiB0b2tlbkFkZHJlc3MsIHRvOiBwYXJhbXMucmVjb3ZlcnlEZXN0aW5hdGlvbiwgYW1vdW50OiBzd2VlcEFtb3VudEh1bWFuIH0pXG4gICAgICAuZmVlVG9rZW4ocGF0aFVzZEFkZHJlc3MpXG4gICAgICAubm9uY2Uobm9uY2UpXG4gICAgICAuZ2FzKGdhc0xpbWl0QmlnKVxuICAgICAgLm1heEZlZVBlckdhcyhtYXhGZWVQZXJHYXNCaWcpXG4gICAgICAubWF4UHJpb3JpdHlGZWVQZXJHYXMoQmlnSW50KHBhcmFtcy5laXAxNTU5Py5tYXhQcmlvcml0eUZlZVBlckdhcyA/PyAxMF8wMDBfMDAwXzAwMCkpO1xuXG4gICAgY29uc3QgdHggPSAoYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCkpIGFzIFRpcDIwVHJhbnNhY3Rpb247XG4gICAgcmV0dXJuIHsgdHgsIG5vbmNlLCBzd2VlcEFtb3VudCwgZ2FzTWFyZ2luVW5pdHMgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBPdmVycmlkZXMgdGhlIGJhc2UtY2xhc3MgcmVjb3ZlclRTUyB0byB1c2UgVElQLTIwIHRyYW5zYWN0aW9ucyBpbnN0ZWFkIG9mIHN0YW5kYXJkIEVUSC5cbiAgICpcbiAgICogVHdvIHBhdGhzOlxuICAgKiAgIC0gVW5zaWduZWQgc3dlZXAgKHBsYWluIHB1YmxpYyBrZXkgc2hhcmVzKTogZGVsZWdhdGVzIHRvIGJ1aWxkVW5zaWduZWRTd2VlcFR4blRTU1xuICAgKiAgIC0gU2lnbmVkIHN3ZWVwIChlbmNyeXB0ZWQga2V5cyArIHBhc3NwaHJhc2UpOiBidWlsZHMgYW5kIHNpZ25zIGEgVElQLTIwIHR4IHZpYSBNUENcbiAgICovXG4gIHByb3RlY3RlZCBhc3luYyByZWNvdmVyVFNTKFxuICAgIHBhcmFtczogUmVjb3Zlck9wdGlvbnNcbiAgKTogUHJvbWlzZTxSZWNvdmVyeUluZm8gfCBPZmZsaW5lVmF1bHRUeEluZm8gfCBVbnNpZ25lZFN3ZWVwVHhNUEN2Mj4ge1xuICAgIHRoaXMudmFsaWRhdGVSZWNvdmVyeVBhcmFtcyhwYXJhbXMpO1xuICAgIGNvbnN0IHVzZXJLZXkgPSBwYXJhbXMudXNlcktleS5yZXBsYWNlKC9cXHMvZywgJycpO1xuICAgIGNvbnN0IGJhY2t1cEtleSA9IHBhcmFtcy5iYWNrdXBLZXkucmVwbGFjZSgvXFxzL2csICcnKTtcblxuICAgIGlmIChnZXRJc1Vuc2lnbmVkU3dlZXAoeyB1c2VyS2V5LCBiYWNrdXBLZXksIGlzVHNzOiBwYXJhbXMuaXNUc3MgfSkpIHtcbiAgICAgIHJldHVybiB0aGlzLmJ1aWxkVW5zaWduZWRTd2VlcFR4blRTUyhwYXJhbXMpO1xuICAgIH1cblxuICAgIC8vIFNpZ25lZCBzd2VlcDogZGVjcnlwdCBNUEMgdjIga2V5IHNoYXJlc1xuICAgIGNvbnN0IHsgdXNlcktleVNoYXJlLCBiYWNrdXBLZXlTaGFyZSwgY29tbW9uS2V5Q2hhaW4gfSA9IGF3YWl0IEVDRFNBVXRpbHMuZ2V0TXBjVjJSZWNvdmVyeUtleVNoYXJlcyhcbiAgICAgIHVzZXJLZXksXG4gICAgICBiYWNrdXBLZXksXG4gICAgICBwYXJhbXMud2FsbGV0UGFzc3BocmFzZVxuICAgICk7XG5cbiAgICBjb25zdCBNUEMgPSBuZXcgRWNkc2EoKTtcbiAgICBjb25zdCBkZXJpdmVkQ29tbW9uS2V5Q2hhaW4gPSBNUEMuZGVyaXZlVW5oYXJkZW5lZChjb21tb25LZXlDaGFpbiwgJ20vMCcpO1xuICAgIGNvbnN0IGJhY2t1cEtleVBhaXIgPSBuZXcgS2V5UGFpcih7IHB1YjogZGVyaXZlZENvbW1vbktleUNoYWluLnNsaWNlKDAsIDY2KSB9KTtcbiAgICBjb25zdCBiYXNlQWRkcmVzcyA9IGJhY2t1cEtleVBhaXIuZ2V0QWRkcmVzcygpO1xuXG4gICAgY29uc3QgeyB0eDogdW5zaWduZWRUeCB9ID0gYXdhaXQgdGhpcy5idWlsZFRlbXBvU3dlZXBUeChiYXNlQWRkcmVzcywgcGFyYW1zKTtcbiAgICBjb25zdCBzZXJpYWxpemVkSGV4ID0gYXdhaXQgdW5zaWduZWRUeC5zZXJpYWxpemUoKTtcblxuICAgIC8vIEhhc2ggdGhlIHVuc2lnbmVkIDB4NzYgdHgg4oCUIG1hdGNoZXMgVGlwMjBUcmFuc2FjdGlvbkJ1aWxkZXIncyBvd24gc2lnbmluZyBsb2dpY1xuICAgIGNvbnN0IG1zZ0hhc2hIZXggPSBldGhlcnMudXRpbHMua2VjY2FrMjU2KGV0aGVycy51dGlscy5hcnJheWlmeShzZXJpYWxpemVkSGV4KSk7XG4gICAgY29uc3QgbWVzc2FnZUhhc2ggPSBCdWZmZXIuZnJvbShtc2dIYXNoSGV4LnJlcGxhY2UoJzB4JywgJycpLCAnaGV4Jyk7XG5cbiAgICBjb25zdCBzaWduYXR1cmUgPSBhd2FpdCBFQ0RTQVV0aWxzLnNpZ25SZWNvdmVyeU1wY1YyKG1lc3NhZ2VIYXNoLCB1c2VyS2V5U2hhcmUsIGJhY2t1cEtleVNoYXJlLCBjb21tb25LZXlDaGFpbik7XG5cbiAgICAvLyBFQ0RTQU1ldGhvZFR5cGVzLlNpZ25hdHVyZS5yL3MgYXJlIDY0LWNoYXIgaGV4IFdJVEhPVVQgMHggcHJlZml4XG4gICAgdW5zaWduZWRUeC5zZXRTaWduYXR1cmUoe1xuICAgICAgcjogYDB4JHtzaWduYXR1cmUucn1gLFxuICAgICAgczogYDB4JHtzaWduYXR1cmUuc31gLFxuICAgICAgeVBhcml0eTogc2lnbmF0dXJlLnJlY2lkLFxuICAgIH0pO1xuXG4gICAgY29uc3Qgc2lnbmVkSGV4ID0gYXdhaXQgdW5zaWduZWRUeC5zZXJpYWxpemUoKTtcbiAgICBjb25zdCB0eElkID0gZXRoZXJzLnV0aWxzLmtlY2NhazI1NihldGhlcnMudXRpbHMuYXJyYXlpZnkoc2lnbmVkSGV4KSk7XG4gICAgcmV0dXJuIHsgaWQ6IHR4SWQsIHR4OiBzaWduZWRIZXggfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBCdWlsZHMgYW4gdW5zaWduZWQgVElQLTIwIHN3ZWVwIHRyYW5zYWN0aW9uIGZvciB0aGUgb2ZmbGluZSB2YXVsdCAodW5zaWduZWQgc3dlZXAgcGF0aCkuXG4gICAqIENhbGxlZCBieSByZWNvdmVyVFNTIHdoZW4gcGxhaW4gcHVibGljIGtleSBzaGFyZXMgYXJlIHByb3ZpZGVkLlxuICAgKi9cbiAgcHJvdGVjdGVkIGFzeW5jIGJ1aWxkVW5zaWduZWRTd2VlcFR4blRTUyhwYXJhbXM6IFJlY292ZXJPcHRpb25zKTogUHJvbWlzZTxPZmZsaW5lVmF1bHRUeEluZm8gfCBVbnNpZ25lZFN3ZWVwVHhNUEN2Mj4ge1xuICAgIGNvbnN0IGJhY2t1cEtleSA9IHBhcmFtcy5iYWNrdXBLZXkucmVwbGFjZSgvXFxzL2csICcnKTtcbiAgICBjb25zdCBkZXJpdmF0aW9uUGF0aCA9IHBhcmFtcy5kZXJpdmF0aW9uU2VlZCA/IGdldERlcml2YXRpb25QYXRoKHBhcmFtcy5kZXJpdmF0aW9uU2VlZCkgOiAnbS8wJztcbiAgICBjb25zdCBNUEMgPSBuZXcgRWNkc2EoKTtcbiAgICBjb25zdCBkZXJpdmVkQ29tbW9uS2V5Q2hhaW4gPSBNUEMuZGVyaXZlVW5oYXJkZW5lZChiYWNrdXBLZXksIGRlcml2YXRpb25QYXRoKTtcbiAgICBjb25zdCBiYWNrdXBLZXlQYWlyID0gbmV3IEtleVBhaXIoeyBwdWI6IGRlcml2ZWRDb21tb25LZXlDaGFpbi5zbGljZSgwLCA2NikgfSk7XG4gICAgY29uc3QgYmFzZUFkZHJlc3MgPSBiYWNrdXBLZXlQYWlyLmdldEFkZHJlc3MoKTtcblxuICAgIGNvbnN0IHsgdHgsIG5vbmNlLCBzd2VlcEFtb3VudCwgZ2FzTWFyZ2luVW5pdHMgfSA9IGF3YWl0IHRoaXMuYnVpbGRUZW1wb1N3ZWVwVHgoYmFzZUFkZHJlc3MsIHBhcmFtcyk7XG4gICAgY29uc3Qgc2VyaWFsaXplZEhleCA9IGF3YWl0IHR4LnNlcmlhbGl6ZSgpO1xuICAgIGNvbnN0IHNlcmlhbGl6ZWRUeEhleCA9IHNlcmlhbGl6ZWRIZXgucmVwbGFjZSgnMHgnLCAnJyk7XG4gICAgY29uc3Qgc2lnbmFibGVIZXggPSBldGhlcnMudXRpbHMua2VjY2FrMjU2KGV0aGVycy51dGlscy5hcnJheWlmeShzZXJpYWxpemVkSGV4KSkucmVwbGFjZSgnMHgnLCAnJyk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgdHhSZXF1ZXN0czogW1xuICAgICAgICB7XG4gICAgICAgICAgd2FsbGV0Q29pbjogdGhpcy5nZXRDaGFpbigpLFxuICAgICAgICAgIHRyYW5zYWN0aW9uczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICB1bnNpZ25lZFR4OiB7XG4gICAgICAgICAgICAgICAgc2VyaWFsaXplZFR4SGV4LFxuICAgICAgICAgICAgICAgIHNpZ25hYmxlSGV4LFxuICAgICAgICAgICAgICAgIGRlcml2YXRpb25QYXRoLFxuICAgICAgICAgICAgICAgIGZlZUluZm86IHtcbiAgICAgICAgICAgICAgICAgIGZlZTogTnVtYmVyKGdhc01hcmdpblVuaXRzKSxcbiAgICAgICAgICAgICAgICAgIGZlZVN0cmluZzogdGlwMjBVbml0c1RvQW1vdW50KGdhc01hcmdpblVuaXRzKSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHBhcnNlZFR4OiB7XG4gICAgICAgICAgICAgICAgICBzcGVuZEFtb3VudDogdGlwMjBVbml0c1RvQW1vdW50KHN3ZWVwQW1vdW50KSxcbiAgICAgICAgICAgICAgICAgIG91dHB1dHM6IFtcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgIGNvaW5OYW1lOiB0aGlzLmdldENoYWluKCksXG4gICAgICAgICAgICAgICAgICAgICAgYWRkcmVzczogcGFyYW1zLnJlY292ZXJ5RGVzdGluYXRpb24sXG4gICAgICAgICAgICAgICAgICAgICAgdmFsdWVTdHJpbmc6IHRpcDIwVW5pdHNUb0Ftb3VudChzd2VlcEFtb3VudCksXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgY29pblNwZWNpZmljOiB7IGNvbW1vbktleUNoYWluOiBiYWNrdXBLZXkgfSxcbiAgICAgICAgICAgICAgICBlaXAxNTU5OiBwYXJhbXMuZWlwMTU1OSxcbiAgICAgICAgICAgICAgICByZXBsYXlQcm90ZWN0aW9uT3B0aW9uczogcGFyYW1zLnJlcGxheVByb3RlY3Rpb25PcHRpb25zLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBub25jZSxcbiAgICAgICAgICAgICAgc2lnbmF0dXJlU2hhcmVzOiBbXSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdHJhbnNhY3Rpb24gYnVpbGRlciBmb3IgVGVtcG8uXG4gICAqL1xuICBwcm90ZWN0ZWQgZ2V0VHJhbnNhY3Rpb25CdWlsZGVyKGNvbW1vbj86IEV0aExpa2VDb21tb24uZGVmYXVsdCk6IFRyYW5zYWN0aW9uQnVpbGRlciB7XG4gICAgcmV0dXJuIG5ldyBUaXAyMFRyYW5zYWN0aW9uQnVpbGRlcihjb2lucy5nZXQodGhpcy5nZXRCYXNlQ2hhaW4oKSkpIGFzIHVua25vd24gYXMgVHJhbnNhY3Rpb25CdWlsZGVyO1xuICB9XG59XG4iXX0=
@@ -9,9 +9,10 @@ const sdk_api_1 = require("@bitgo-beta/sdk-api");
9
9
  const sdk_test_1 = require("@bitgo-beta/sdk-test");
10
10
  const statics_1 = require("@bitgo-beta/statics");
11
11
  const tempo_1 = require("../../src/tempo");
12
- const constants_1 = require("../../src/lib/constants");
13
- // secp256k1 generator point G a well-known valid compressed public key
14
- const TEST_BACKUP_KEY = '0279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798';
12
+ const PATH_USD_ADDRESS = '0x20c0000000000000000000000000000000000000';
13
+ // secp256k1 generator point G (33 bytes) + 32-byte chaincode — valid commonKeyChain for deriveUnhardened
14
+ const TEST_BACKUP_KEY = '0279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798' +
15
+ '0000000000000000000000000000000000000000000000000000000000000001';
15
16
  const TEST_RECOVERY_DESTINATION = '0x80151ebf635e6ec8a5455258f617be6cda1fbd7e';
16
17
  describe('Tempo Recovery', function () {
17
18
  let bitgo;
@@ -61,7 +62,7 @@ describe('Tempo Recovery', function () {
61
62
  module: 'account',
62
63
  action: 'tokenbalance',
63
64
  address: '0x1234567890123456789012345678901234567890',
64
- contractaddress: constants_1.PATH_USD_ADDRESS,
65
+ contractaddress: PATH_USD_ADDRESS,
65
66
  tag: 'latest',
66
67
  });
67
68
  result.should.deepEqual({ result: '20000' });
@@ -84,7 +85,7 @@ describe('Tempo Recovery', function () {
84
85
  module: 'account',
85
86
  action: 'tokenbalance',
86
87
  address: '0xabc',
87
- contractaddress: constants_1.PATH_USD_ADDRESS,
88
+ contractaddress: PATH_USD_ADDRESS,
88
89
  });
89
90
  result.should.deepEqual({ result: '0' });
90
91
  });
@@ -94,7 +95,7 @@ describe('Tempo Recovery', function () {
94
95
  module: 'account',
95
96
  action: 'tokenbalance',
96
97
  address: '0xabc',
97
- contractaddress: constants_1.PATH_USD_ADDRESS,
98
+ contractaddress: PATH_USD_ADDRESS,
98
99
  });
99
100
  result.should.deepEqual({ result: '0' });
100
101
  });
@@ -105,7 +106,7 @@ describe('Tempo Recovery', function () {
105
106
  module: 'account',
106
107
  action: 'tokenbalance',
107
108
  address: '0xabc',
108
- contractaddress: constants_1.PATH_USD_ADDRESS,
109
+ contractaddress: PATH_USD_ADDRESS,
109
110
  })
110
111
  .should.be.rejectedWith('Tempo RPC error: execution reverted');
111
112
  });
@@ -121,12 +122,13 @@ describe('Tempo Recovery', function () {
121
122
  sandbox.stub(basecoin, 'getAddressNonce').resolves(nonce);
122
123
  }
123
124
  it('deducts gasLimit × maxFeePerGas / 10^12 from pathUSD balance', async function () {
124
- // gasMargin = 1_000_000 * 20_000_000_000 / 10^12 = 20_000
125
- // sweepAmount = 1_000_000 - 20_000 = 980_000
125
+ // gasMargin = 1_000_000 * 20_000_000_000 * 1.75 / 10^12 = 35_000
126
+ // sweepAmount = 1_000_000 - 35_000 = 965_000
126
127
  stubBalanceAndNonce('1000000');
127
128
  const result = (await basecoin.buildUnsignedSweepTxnTSS({
128
129
  backupKey: TEST_BACKUP_KEY,
129
130
  recoveryDestination: TEST_RECOVERY_DESTINATION,
131
+ tokenContractAddress: PATH_USD_ADDRESS,
130
132
  gasLimit: 1000000,
131
133
  eip1559: { maxFeePerGas: 20000000000, maxPriorityFeePerGas: 10000000000 },
132
134
  }));
@@ -134,12 +136,13 @@ describe('Tempo Recovery', function () {
134
136
  result.txRequests[0].transactions[0].unsignedTx.should.have.property('serializedTxHex');
135
137
  });
136
138
  it('uses smaller margin when gasLimit is halved', async function () {
137
- // gasMargin = 500_000 * 20_000_000_000 / 10^12 = 10_000
138
- // sweepAmount = 15_000 - 10_000 = 5_000
139
- stubBalanceAndNonce('15000');
139
+ // gasMargin = 500_000 * 20_000_000_000 * 1.75 / 10^12 = 17_500
140
+ // sweepAmount = 50_000 - 17_500 = 32_500
141
+ stubBalanceAndNonce('50000');
140
142
  const result = (await basecoin.buildUnsignedSweepTxnTSS({
141
143
  backupKey: TEST_BACKUP_KEY,
142
144
  recoveryDestination: TEST_RECOVERY_DESTINATION,
145
+ tokenContractAddress: PATH_USD_ADDRESS,
143
146
  gasLimit: 500000,
144
147
  eip1559: { maxFeePerGas: 20000000000, maxPriorityFeePerGas: 10000000000 },
145
148
  }));
@@ -152,6 +155,7 @@ describe('Tempo Recovery', function () {
152
155
  .buildUnsignedSweepTxnTSS({
153
156
  backupKey: TEST_BACKUP_KEY,
154
157
  recoveryDestination: TEST_RECOVERY_DESTINATION,
158
+ tokenContractAddress: PATH_USD_ADDRESS,
155
159
  gasLimit: 1000000,
156
160
  eip1559: { maxFeePerGas: 20000000000, maxPriorityFeePerGas: 10000000000 },
157
161
  })
@@ -175,6 +179,7 @@ describe('Tempo Recovery', function () {
175
179
  const result = (await basecoin.buildUnsignedSweepTxnTSS({
176
180
  backupKey: TEST_BACKUP_KEY,
177
181
  recoveryDestination: TEST_RECOVERY_DESTINATION,
182
+ tokenContractAddress: PATH_USD_ADDRESS,
178
183
  gasLimit: 1000000,
179
184
  eip1559: { maxFeePerGas: 20000000000, maxPriorityFeePerGas: 10000000000 },
180
185
  }));
@@ -199,4 +204,4 @@ describe('Tempo Recovery', function () {
199
204
  });
200
205
  });
201
206
  });
202
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVtcG8uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi90ZXN0L3VuaXQvdGVtcG8udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxrREFBMEI7QUFDMUIsb0RBQTRCO0FBQzVCLGlEQUErQztBQUMvQyxtREFBK0Q7QUFFL0QsaURBQThFO0FBQzlFLDJDQUF3QztBQUN4Qyx1REFBMkQ7QUFFM0QseUVBQXlFO0FBQ3pFLE1BQU0sZUFBZSxHQUFHLG9FQUFvRSxDQUFDO0FBQzdGLE1BQU0seUJBQXlCLEdBQUcsNENBQTRDLENBQUM7QUFFL0UsUUFBUSxDQUFDLGdCQUFnQixFQUFFO0lBQ3pCLElBQUksS0FBbUIsQ0FBQztJQUN4QixJQUFJLFFBQWUsQ0FBQztJQUNwQixJQUFJLE9BQTJCLENBQUM7SUFFaEMsTUFBTSxDQUFDO1FBQ0wsS0FBSyxHQUFHLG9CQUFTLENBQUMsUUFBUSxDQUFDLGtCQUFRLEVBQUUsRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQztRQUN0RCxLQUFLLENBQUMsWUFBWSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQVksRUFBRSxFQUFFO1lBQzNDLE1BQU0sZUFBZSxHQUE4QjtnQkFDakQsSUFBSSxFQUFFLE9BQU87Z0JBQ2IsUUFBUSxFQUFFLE9BQU87Z0JBQ2pCLE1BQU0sRUFBRSxvQkFBVSxDQUFDLEtBQUs7Z0JBQ3hCLE9BQU8sRUFBRSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUU7Z0JBQzVCLFFBQVEsRUFBRSxFQUFFO2FBQ04sQ0FBQztZQUNULE9BQU8sYUFBSyxDQUFDLGNBQWMsQ0FBQyxDQUFDLEVBQUUsZUFBZSxDQUFDLENBQUM7UUFDbEQsQ0FBQyxDQUFDLENBQUM7UUFDSCxLQUFLLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztRQUMzQixRQUFRLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQVUsQ0FBQztJQUMxQyxDQUFDLENBQUMsQ0FBQztJQUVILFVBQVUsQ0FB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QzVFLE1BQU0sU0FBUyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsUUFBZSxFQUFFLDBCQUEwQixDQUFDLENBQUMsUUFBUSxDQUFDLEVBQUUsVUFBVSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDekcsT0FBTyxDQUFDLElBQUksQ0FBQyxRQUFlLEVBQUUsd0JBQXdCLENBQUMsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUM7WUFFM0UsTUFBTyxRQUFnQixDQUFDLFVBQVUsQ0FBQztnQkFDakMsT0FBTyxFQUFFLGVBQWU7Z0JBQ3hCLFNBQVMsRUFBRSxlQUFlO2dCQUMxQixLQUFLLEVBQUUsSUFBSTtnQkFDWCxtQkFBbUIsRUFBRSx5QkFBeUI7YUFDL0MsQ0FBQyxDQUFDO1lBRUgsU0FBUyxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzFDLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBzaW5vbiBmcm9tICdzaW5vbic7XG5pbXBvcnQgc2hvdWxkIGZyb20gJ3Nob3VsZCc7XG5pbXBvcnQgeyBCaXRHb0FQSSB9IGZyb20gJ0BiaXRnby1iZXRhL3Nkay1hcGknO1xuaW1wb3J0IHsgVGVzdEJpdEdvLCBUZXN0Qml0R29BUEkgfSBmcm9tICdAYml0Z28tYmV0YS9zZGstdGVzdCc7XG5pbXBvcnQgeyBCaXRHb0Jhc2UgfSBmcm9tICdAYml0Z28tYmV0YS9zZGstY29yZSc7XG5pbXBvcnQgeyBCYXNlQ29pbiBhcyBTdGF0aWNzQmFzZUNvaW4sIENvaW5GYW1pbHkgfSBmcm9tICdAYml0Z28tYmV0YS9zdGF0aWNzJztcbmltcG9ydCB7IFRlbXBvIH0gZnJvbSAnLi4vLi4vc3JjL3RlbXBvJztcbmltcG9ydCB7IFBBVEhfVVNEX0FERFJFU1MgfSBmcm9tICcuLi8uLi9zcmMvbGliL2NvbnN0YW50cyc7XG5cbi8vIHNlY3AyNTZrMSBnZW5lcmF0b3IgcG9pbnQgRyDigJQgYSB3ZWxsLWtub3duIHZhbGlkIGNvbXByZXNzZWQgcHVibGljIGtleVxuY29uc3QgVEVTVF9CQUNLVVBfS0VZID0gJzAyNzliZTY2N2VmOWRjYmJhYzU1YTA2Mjk1Y2U4NzBiMDcwMjliZmNkYjJkY2UyOGQ5NTlmMjgxNWIxNmY4MTc5OCc7XG5jb25zdCBURVNUX1JFQ09WRVJZX0RFU1RJTkFUSU9OID0gJzB4ODAxNTFlYmY2MzVlNmVjOGE1NDU1MjU4ZjYxN2JlNmNkYTFmYmQ3ZSc7XG5cbmRlc2NyaWJlKCdUZW1wbyBSZWNvdmVyeScsIGZ1bmN0aW9uICgpIHtcbiAgbGV0IGJpdGdvOiBUZXN0Qml0R29BUEk7XG4gIGxldCBiYXNlY29pbjogVGVtcG87XG4gIGxldCBzYW5kYm94OiBzaW5vbi5TaW5vblNhbmRib3g7XG5cbiAgYmVmb3JlKGZ1bmN0aW9uICgpIHtcbiAgICBiaXRnbyA9IFRlc3RCaXRHby5kZWNvcmF0ZShCaXRHb0FQSSwgeyBlbnY6ICdtb2NrJyB9KTtcbiAgICBiaXRnby5zYWZlUmVnaXN0ZXIoJ3RlbXBvJywgKGI6IEJpdEdvQmFzZSkgPT4ge1xuICAgICAgY29uc3QgbW9ja1N0YXRpY3NDb2luOiBSZWFkb25seTxTdGF0aWNzQmFzZUNvaW4+ID0ge1xuICAgICAgICBuYW1lOiAndGVtcG8nLFxuICAgICAgICBmdWxsTmFtZTogJ1RlbXBvJyxcbiAgICAgICAgZmFtaWx5OiBDb2luRmFtaWx5LlRFTVBPLFxuICAgICAgICBuZXR3b3JrOiB7IHR5cGU6ICdtYWlubmV0JyB9LFxuICAgICAgICBmZWF0dXJlczogW10sXG4gICAgICB9IGFzIGFueTtcbiAgICAgIHJldHVybiBUZW1wby5jcmVhdGVJbnN0YW5jZShiLCBtb2NrU3RhdGljc0NvaW4pO1xuICAgIH0pO1xuICAgIGJpdGdvLmluaXRpYWxpemVUZXN0VmFycygpO1xuICAgIGJhc2Vjb2luID0gYml0Z28uY29pbigndGVtcG8nKSBhcyBUZW1wbztcbiAgfSk7XG5cbiAgYmVmb3JlRWFjaChmdW5jdGlvbiAoKSB7XG4gICAgc2FuZGJveCA9IHNpbm9uLmNyZWF0ZVNhbmRib3goKTtcbiAgfSk7XG5cbiAgYWZ0ZXJFYWNoKGZ1bmN0aW9uICgpIHtcbiAgICBzYW5kYm94LnJlc3RvcmUoKTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ3F1ZXJ5VGVtcG9ScGMgKHZpYSByZWNvdmVyeUJsb2NrY2hhaW5FeHBsb3JlclF1ZXJ5KScsIGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBtb2NrRmV0Y2gocmVzcG9uc2VCb2R5OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik6IHNpbm9uLlNpbm9uU3R1YiB7XG4gICAgICByZXR1cm4gc2FuZGJveC5zdHViKGdsb2JhbCwgJ2ZldGNoJyBhcyBhbnkpLnJlc29sdmVzKHtcbiAgICAgICAgb2s6IHRydWUsXG4gICAgICAgIGpzb246IGFzeW5jICgpID0+IHJlc3BvbnNlQm9keSxcbiAgICAgIH0gYXMgYW55KTtcbiAgICB9XG5cbiAgICBpdCgncmV0dXJucyB7IHJlc3VsdDogXCIwXCIgfSBmb3IgYWNjb3VudC9iYWxhbmNlIHdpdGhvdXQgY2FsbGluZyBSUEMnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBmZXRjaFN0dWIgPSBtb2NrRmV0Y2goe30pO1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgYmFzZWNvaW4ucmVjb3ZlcnlCbG9ja2NoYWluRXhwbG9yZXJRdWVyeSh7XG4gICAgICAgIG1vZHVsZTogJ2FjY291bnQnLFxuICAgICAgICBhY3Rpb246ICdiYWxhbmNlJyxcbiAgICAgICAgYWRkcmVzczogJzB4YWJjJyxcbiAgICAgIH0pO1xuICAgICAgcmVzdWx0LnNob3VsZC5kZWVwRXF1YWwoeyByZXN1bHQ6ICcwJyB9KTtcbiAgICAgIGZldGNoU3R1Yi5jYWxsZWQuc2hvdWxkLmVxdWFsKGZhbHNlKTtcbiAgICB9KTtcblxuICAgIGl0KCdjYWxscyBldGhfY2FsbCB3aXRoIGJhbGFuY2VPZiBzZWxlY3RvciBmb3IgYWNjb3VudC90b2tlbmJhbGFuY2UnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBmZXRjaFN0dWIgPSBtb2NrRmV0Y2goeyByZXN1bHQ6ICcweDRlMjAnIH0pOyAvLyAyMDAwMCBkZWNpbWFsXG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBiYXNlY29pbi5yZWNvdmVyeUJsb2NrY2hhaW5FeHBsb3JlclF1ZXJ5KHtcbiAgICAgICAgbW9kdWxlOiAnYWNjb3VudCcsXG4gICAgICAgIGFjdGlvbjogJ3Rva2VuYmFsYW5jZScsXG4gICAgICAgIGFkZHJlc3M6ICcweDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAnLFxuICAgICAgICBjb250cmFjdGFkZHJlc3M6IFBBVEhfVVNEX0FERFJFU1MsXG4gICAgICAgIHRhZzogJ2xhdGVzdCcsXG4gICAgICB9KTtcbiAgICAgIHJlc3VsdC5zaG91bGQuZGVlcEVxdWFsKHsgcmVzdWx0OiAnMjAwMDAnIH0pO1xuICAgICAgY29uc3QgYm9keSA9IEpTT04ucGFyc2UoZmV0Y2hTdHViLmZpcnN0Q2FsbC5hcmdzWzFdLmJvZHkpO1xuICAgICAgYm9keS5tZXRob2Quc2hvdWxkLmVxdWFsKCdldGhfY2FsbCcpO1xuICAgICAgYm9keS5wYXJhbXNbMF0uZGF0YS5zaG91bGQuc3RhcnRXaXRoKCcweDcwYTA4MjMxJyk7XG4gICAgfSk7XG5cbiAgICBpdCgnY2FsbHMgZXRoX2dldFRyYW5zYWN0aW9uQ291bnQgZm9yIGFjY291bnQvdHhsaXN0IGFuZCBwYXJzZXMgbm9uY2UnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBtb2NrRmV0Y2goeyByZXN1bHQ6ICcweDUnIH0pO1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgYmFzZWNvaW4ucmVjb3ZlcnlCbG9ja2NoYWluRXhwbG9yZXJRdWVyeSh7XG4gICAgICAgIG1vZHVsZTogJ2FjY291bnQnLFxuICAgICAgICBhY3Rpb246ICd0eGxpc3QnLFxuICAgICAgICBhZGRyZXNzOiAnMHhhYmMnLFxuICAgICAgfSk7XG4gICAgICByZXN1bHQuc2hvdWxkLmRlZXBFcXVhbCh7IG5vbmNlOiA1IH0pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3JldHVybnMgeyByZXN1bHQ6IFwiMFwiIH0gd2hlbiBSUEMgcmV0dXJucyBudWxsIGJvZHkucmVzdWx0JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgbW9ja0ZldGNoKHsgcmVzdWx0OiBudWxsIH0pO1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgYmFzZWNvaW4ucmVjb3ZlcnlCbG9ja2NoYWluRXhwbG9yZXJRdWVyeSh7XG4gICAgICAgIG1vZHVsZTogJ2FjY291bnQnLFxuICAgICAgICBhY3Rpb246ICd0b2tlbmJhbGFuY2UnLFxuICAgICAgICBhZGRyZXNzOiAnMHhhYmMnLFxuICAgICAgICBjb250cmFjdGFkZHJlc3M6IFBBVEhfVVNEX0FERFJFU1MsXG4gICAgICB9KTtcbiAgICAgIHJlc3VsdC5zaG91bGQuZGVlcEVxdWFsKHsgcmVzdWx0OiAnMCcgfSk7XG4gICAgfSk7XG5cbiAgICBpdCgncmV0dXJucyB7IHJlc3VsdDogXCIwXCIgfSB3aGVuIFJQQyByZXR1cm5zIG1hbGZvcm1lZCBib2R5LnJlc3VsdCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIG1vY2tGZXRjaCh7IHJlc3VsdDogJ25vdC1hLW51bWJlcicgfSk7XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBiYXNlY29pbi5yZWNvdmVyeUJsb2NrY2hhaW5FeHBsb3JlclF1ZXJ5KHtcbiAgICAgICAgbW9kdWxlOiAnYWNjb3VudCcsXG4gICAgICAgIGFjdGlvbjogJ3Rva2VuYmFsYW5jZScsXG4gICAgICAgIGFkZHJlc3M6ICcweGFiYycsXG4gICAgICAgIGNvbnRyYWN0YWRkcmVzczogUEFUSF9VU0RfQUREUkVTUyxcbiAgICAgIH0pO1xuICAgICAgcmVzdWx0LnNob3VsZC5kZWVwRXF1YWwoeyByZXN1bHQ6ICcwJyB9KTtcbiAgICB9KTtcblxuICAgIGl0KCd0aHJvd3Mgd2hlbiB0aGUgUlBDIHJldHVybnMgYW4gZXJyb3IgZmllbGQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBtb2NrRmV0Y2goeyBlcnJvcjogeyBtZXNzYWdlOiAnZXhlY3V0aW9uIHJldmVydGVkJyB9IH0pO1xuICAgICAgYXdhaXQgYmFzZWNvaW5cbiAgICAgICAgLnJlY292ZXJ5QmxvY2tjaGFpbkV4cGxvcmVyUXVlcnkoe1xuICAgICAgICAgIG1vZHVsZTogJ2FjY291bnQnLFxuICAgICAgICAgIGFjdGlvbjogJ3Rva2VuYmFsYW5jZScsXG4gICAgICAgICAgYWRkcmVzczogJzB4YWJjJyxcbiAgICAgICAgICBjb250cmFjdGFkZHJlc3M6IFBBVEhfVVNEX0FERFJFU1MsXG4gICAgICAgIH0pXG4gICAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKCdUZW1wbyBSUEMgZXJyb3I6IGV4ZWN1dGlvbiByZXZlcnRlZCcpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Rocm93cyBmb3IgdW5zdXBwb3J0ZWQgbW9kdWxlL2FjdGlvbicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGF3YWl0IGJhc2Vjb2luXG4gICAgICAgIC5yZWNvdmVyeUJsb2NrY2hhaW5FeHBsb3JlclF1ZXJ5KHsgbW9kdWxlOiAncHJveHknLCBhY3Rpb246ICdldGhfYmxvY2tOdW1iZXInIH0pXG4gICAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKCdxdWVyeVRlbXBvUnBjOiB1bnN1cHBvcnRlZCBtb2R1bGU9cHJveHkgYWN0aW9uPWV0aF9ibG9ja051bWJlcicpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnYnVpbGRVbnNpZ25lZFN3ZWVwVHhuVFNTIOKAlCBnYXMgbWFyZ2luIGNhbGN1bGF0aW9uJywgZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIHN0dWJCYWxhbmNlQW5kTm9uY2UoYmFsYW5jZTogc3RyaW5nLCBub25jZSA9IDApIHtcbiAgICAgIHNhbmRib3guc3R1YihiYXNlY29pbiBhcyBhbnksICdxdWVyeUFkZHJlc3NUb2tlbkJhbGFuY2UnKS5yZXNvbHZlcyhiYWxhbmNlKTtcbiAgICAgIHNhbmRib3guc3R1YihiYXNlY29pbiBhcyBhbnksICdnZXRBZGRyZXNzTm9uY2UnKS5yZXNvbHZlcyhub25jZSk7XG4gICAgfVxuXG4gICAgaXQoJ2RlZHVjdHMgZ2FzTGltaXQgw5cgbWF4RmVlUGVyR2FzIC8gMTBeMTIgZnJvbSBwYXRoVVNEIGJhbGFuY2UnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAvLyBnYXNNYXJnaW4gPSAxXzAwMF8wMDAgKiAyMF8wMDBfMDAwXzAwMCAvIDEwXjEyID0gMjBfMDAwXG4gICAgICAvLyBzd2VlcEFtb3VudCA9IDFfMDAwXzAwMCAtIDIwXzAwMCA9IDk4MF8wMDBcbiAgICAgIHN0dWJCYWxhbmNlQW5kTm9uY2UoJzEwMDAwMDAnKTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IChhd2FpdCAoYmFzZWNvaW4gYXMgYW55KS5idWlsZFVuc2lnbmVkU3dlZXBUeG5UU1Moe1xuICAgICAgICBiYWNrdXBLZXk6IFRFU1RfQkFDS1VQX0tFWSxcbiAgICAgICAgcmVjb3ZlcnlEZXN0aW5hdGlvbjogVEVTVF9SRUNPVkVSWV9ERVNUSU5BVElPTixcbiAgICAgICAgZ2FzTGltaXQ6IDFfMDAwXzAwMCxcbiAgICAgICAgZWlwMTU1OTogeyBtYXhGZWVQZXJHYXM6IDIwXzAwMF8wMDBfMDAwLCBtYXhQcmlvcml0eUZlZVBlckdhczogMTBfMDAwXzAwMF8wMDAgfSxcbiAgICAgIH0pKSBhcyBhbnk7XG4gICAgICBzaG91bGQuZXhpc3QocmVzdWx0LnR4UmVxdWVzdHMpO1xuICAgICAgcmVzdWx0LnR4UmVxdWVzdHNbMF0udHJhbnNhY3Rpb25zWzBdLnVuc2lnbmVkVHguc2hvdWxkLmhhdmUucHJvcGVydHkoJ3NlcmlhbGl6ZWRUeEhleCcpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3VzZXMgc21hbGxlciBtYXJnaW4gd2hlbiBnYXNMaW1pdCBpcyBoYWx2ZWQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAvLyBnYXNNYXJnaW4gPSA1MDBfMDAwICogMjBfMDAwXzAwMF8wMDAgLyAxMF4xMiA9IDEwXzAwMFxuICAgICAgLy8gc3dlZXBBbW91bnQgPSAxNV8wMDAgLSAxMF8wMDAgPSA1XzAwMFxuICAgICAgc3R1YkJhbGFuY2VBbmROb25jZSgnMTUwMDAnKTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IChhd2FpdCAoYmFzZWNvaW4gYXMgYW55KS5idWlsZFVuc2lnbmVkU3dlZXBUeG5UU1Moe1xuICAgICAgICBiYWNrdXBLZXk6IFRFU1RfQkFDS1VQX0tFWSxcbiAgICAgICAgcmVjb3ZlcnlEZXN0aW5hdGlvbjogVEVTVF9SRUNPVkVSWV9ERVNUSU5BVElPTixcbiAgICAgICAgZ2FzTGltaXQ6IDUwMF8wMDAsXG4gICAgICAgIGVpcDE1NTk6IHsgbWF4RmVlUGVyR2FzOiAyMF8wMDBfMDAwXzAwMCwgbWF4UHJpb3JpdHlGZWVQZXJHYXM6IDEwXzAwMF8wMDBfMDAwIH0sXG4gICAgICB9KSkgYXMgYW55O1xuICAgICAgc2hvdWxkLmV4aXN0KHJlc3VsdC50eFJlcXVlc3RzKTtcbiAgICB9KTtcblxuICAgIGl0KCd0aHJvd3Mgd2hlbiBiYWxhbmNlIGV4YWN0bHkgZXF1YWxzIHRoZSBnYXMgbWFyZ2luJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgLy8gZ2FzTWFyZ2luID0gMV8wMDBfMDAwICogMjBfMDAwXzAwMF8wMDAgLyAxMF4xMiA9IDIwXzAwMDsgYmFsYW5jZSA9IDIwXzAwMCDihpIgc3dlZXBBbW91bnQgPSAwXG4gICAgICBzdHViQmFsYW5jZUFuZE5vbmNlKCcyMDAwMCcpO1xuICAgICAgYXdhaXQgKGJhc2Vjb2luIGFzIGFueSlcbiAgICAgICAgLmJ1aWxkVW5zaWduZWRTd2VlcFR4blRTUyh7XG4gICAgICAgICAgYmFja3VwS2V5OiBURVNUX0JBQ0tVUF9LRVksXG4gICAgICAgICAgcmVjb3ZlcnlEZXN0aW5hdGlvbjogVEVTVF9SRUNPVkVSWV9ERVNUSU5BVElPTixcbiAgICAgICAgICBnYXNMaW1pdDogMV8wMDBfMDAwLFxuICAgICAgICAgIGVpcDE1NTk6IHsgbWF4RmVlUGVyR2FzOiAyMF8wMDBfMDAwXzAwMCwgbWF4UHJpb3JpdHlGZWVQZXJHYXM6IDEwXzAwMF8wMDBfMDAwIH0sXG4gICAgICAgIH0pXG4gICAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKC9JbnN1ZmZpY2llbnQgYmFsYW5jZS8pO1xuICAgIH0pO1xuXG4gICAgaXQoJ2RvZXMgbm90IGRlZHVjdCBtYXJnaW4gd2hlbiBzd2VlcGluZyBhIG5vbi1wYXRoVVNEIHRva2VuJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3Qgb3RoZXJUb2tlbiA9ICcweDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEnO1xuICAgICAgc3R1YkJhbGFuY2VBbmROb25jZSgnNTAwJyk7XG4gICAgICBjb25zdCByZXN1bHQgPSAoYXdhaXQgKGJhc2Vjb2luIGFzIGFueSkuYnVpbGRVbnNpZ25lZFN3ZWVwVHhuVFNTKHtcbiAgICAgICAgYmFja3VwS2V5OiBURVNUX0JBQ0tVUF9LRVksXG4gICAgICAgIHJlY292ZXJ5RGVzdGluYXRpb246IFRFU1RfUkVDT1ZFUllfREVTVElOQVRJT04sXG4gICAgICAgIHRva2VuQ29udHJhY3RBZGRyZXNzOiBvdGhlclRva2VuLFxuICAgICAgICBnYXNMaW1pdDogMV8wMDBfMDAwLFxuICAgICAgICBlaXAxNTU5OiB7IG1heEZlZVBlckdhczogMjBfMDAwXzAwMF8wMDAsIG1heFByaW9yaXR5RmVlUGVyR2FzOiAxMF8wMDBfMDAwXzAwMCB9LFxuICAgICAgfSkpIGFzIGFueTtcbiAgICAgIC8vIEZ1bGwgYmFsYW5jZSBvZiA1MDAgc3dlcHQ7IG5vIG1hcmdpbiBkZWR1Y3RlZFxuICAgICAgc2hvdWxkLmV4aXN0KHJlc3VsdC50eFJlcXVlc3RzKTtcbiAgICB9KTtcblxuICAgIGl0KCdyZXR1cm5zIGNvcnJlY3QgVW5zaWduZWRTd2VlcFR4TVBDdjIgc3RydWN0dXJlJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgc3R1YkJhbGFuY2VBbmROb25jZSgnMTAwMDAwMCcpO1xuICAgICAgY29uc3QgcmVzdWx0ID0gKGF3YWl0IChiYXNlY29pbiBhcyBhbnkpLmJ1aWxkVW5zaWduZWRTd2VlcFR4blRTUyh7XG4gICAgICAgIGJhY2t1cEtleTogVEVTVF9CQUNLVVBfS0VZLFxuICAgICAgICByZWNvdmVyeURlc3RpbmF0aW9uOiBURVNUX1JFQ09WRVJZX0RFU1RJTkFUSU9OLFxuICAgICAgICBnYXNMaW1pdDogMV8wMDBfMDAwLFxuICAgICAgICBlaXAxNTU5OiB7IG1heEZlZVBlckdhczogMjBfMDAwXzAwMF8wMDAsIG1heFByaW9yaXR5RmVlUGVyR2FzOiAxMF8wMDBfMDAwXzAwMCB9LFxuICAgICAgfSkpIGFzIGFueTtcbiAgICAgIGNvbnN0IHR4ID0gcmVzdWx0LnR4UmVxdWVzdHNbMF0udHJhbnNhY3Rpb25zWzBdO1xuICAgICAgdHgudW5zaWduZWRUeC5kZXJpdmF0aW9uUGF0aC5zaG91bGQuZXF1YWwoJ20vMCcpO1xuICAgICAgdHgudW5zaWduZWRUeC5jb2luU3BlY2lmaWMuY29tbW9uS2V5Q2hhaW4uc2hvdWxkLmVxdWFsKFRFU1RfQkFDS1VQX0tFWSk7XG4gICAgICB0eC5zaWduYXR1cmVTaGFyZXMuc2hvdWxkLmRlZXBFcXVhbChbXSk7XG4gICAgICB0eC5ub25jZS5zaG91bGQuZXF1YWwoMCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdyZWNvdmVyVFNTIOKAlCB1bnNpZ25lZCBzd2VlcCBkaXNwYXRjaCcsIGZ1bmN0aW9uICgpIHtcbiAgICBpdCgncm91dGVzIHRvIGJ1aWxkVW5zaWduZWRTd2VlcFR4blRTUyB3aGVuIGtleXMgYXJlIHBsYWluIHB1YmxpYyBrZXlzJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgYnVpbGRTdHViID0gc2FuZGJveC5zdHViKGJhc2Vjb2luIGFzIGFueSwgJ2J1aWxkVW5zaWduZWRTd2VlcFR4blRTUycpLnJlc29sdmVzKHsgdHhSZXF1ZXN0czogW10gfSk7XG4gICAgICBzYW5kYm94LnN0dWIoYmFzZWNvaW4gYXMgYW55LCAndmFsaWRhdGVSZWNvdmVyeVBhcmFtcycpLnJldHVybnModW5kZWZpbmVkKTtcblxuICAgICAgYXdhaXQgKGJhc2Vjb2luIGFzIGFueSkucmVjb3ZlclRTUyh7XG4gICAgICAgIHVzZXJLZXk6IFRFU1RfQkFDS1VQX0tFWSxcbiAgICAgICAgYmFja3VwS2V5OiBURVNUX0JBQ0tVUF9LRVksXG4gICAgICAgIGlzVHNzOiB0cnVlLFxuICAgICAgICByZWNvdmVyeURlc3RpbmF0aW9uOiBURVNUX1JFQ09WRVJZX0RFU1RJTkFUSU9OLFxuICAgICAgfSk7XG5cbiAgICAgIGJ1aWxkU3R1Yi5jYWxsZWRPbmNlLnNob3VsZC5lcXVhbCh0cnVlKTtcbiAgICB9KTtcbiAgfSk7XG59KTtcbiJdfQ==
207
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVtcG8uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi90ZXN0L3VuaXQvdGVtcG8udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxrREFBMEI7QUFDMUIsb0RBQTRCO0FBQzVCLGlEQUErQztBQUMvQyxtREFBK0Q7QUFFL0QsaURBQThFO0FBQzlFLDJDQUF3QztBQUN4QyxNQUFNLGdCQUFnQixHQUFHLDRDQUE0QyxDQUFDO0FBRXRFLHlHQUF5RztBQUN6RyxNQUFNLGVBQWUsR0FDbkIsb0VBQW9FO0lBQ3BFLGtFQUFrRSxDQUFDO0FBQ3JFLE1BQU0seUJBQXlCLEdBQUcsNENBQTRDLENBQUM7QUFFL0UsUUFBUSxDQUFDLGdCQUFnQixFQUFFO0lBQ3pCLElBQUksS0FBbUIsQ0FBQztJQUN4QixJQUFJLFFBQWUsQ0FBQztJQUNwQixJQUFJLE9BQTJCLENBQUM7SUFFaEMsTUFBTSxDQUFDO1FBQ0wsS0FBSyxHQUFHLG9CQUFTLENBQUMsUUFBUSxDQUFDLGtCQUFRLEVBQUUsRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQztRQUN0RCxLQUFLLENBQUMsWUFBWSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQVksRUFBRSxFQUFFO1lBQzNDLE1BQU0sZUFBZSxHQUE4QjtnQkFDakQsSUFBSSxFQUFFLE9BQU87Z0JBQ2IsUUFBUSxFQUFFLE9BQU87Z0JBQ2pCLE1BQU0sRUFBRSxvQkFBVSxDQUFDLEtBQUs7Z0JBQ3hCLE9BQU8sRUFBRSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUU7Z0JBQzVCLFFBQVEsRUFBRSxFQUFFO2FBQ04sQ0FBQztZQUNULE9BQU8sYUFBSyxDQUFDLGNBQWMsQ0FBQyxDQUFDLEVBQUUsZUFBZSxDQUFDLENBQUM7UUFDbEQsQ0FBQyxDQUFDLENBQUM7UUFDSCxLQUFLLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztRQUMzQixRQUFRLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQVUsQ0FB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QyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzNCLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7SUFFSCxRQUFRLENBQUMsc0NBQXNDLEVBQUU7UUFDL0MsRUFBRSxDQUFDLG9FQUFvRSxFQUFFLEtBQUs7WUFDNUUsTUFBTSxTQUFTLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxRQUFlLEVBQUUsMEJBQTBCLENBQUMsQ0FBQyxRQUFRLENBQUMsRUFBRSxVQUFVLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUN6RyxPQUFPLENBQUMsSUFBSSxDQUFDLFFBQWUsRUFBRSx3QkFBd0IsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUUzRSxNQUFPLFFBQWdCLENBQUMsVUFBVSxDQUFDO2dCQUNqQyxPQUFPLEVBQUUsZUFBZTtnQkFDeEIsU0FBUyxFQUFFLGVBQWU7Z0JBQzFCLEtBQUssRUFBRSxJQUFJO2dCQUNYLG1CQUFtQixFQUFFLHlCQUF5QjthQUMvQyxDQUFDLENBQUM7WUFFSCxTQUFTLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDMUMsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHNpbm9uIGZyb20gJ3Npbm9uJztcbmltcG9ydCBzaG91bGQgZnJvbSAnc2hvdWxkJztcbmltcG9ydCB7IEJpdEdvQVBJIH0gZnJvbSAnQGJpdGdvLWJldGEvc2RrLWFwaSc7XG5pbXBvcnQgeyBUZXN0Qml0R28sIFRlc3RCaXRHb0FQSSB9IGZyb20gJ0BiaXRnby1iZXRhL3Nkay10ZXN0JztcbmltcG9ydCB7IEJpdEdvQmFzZSB9IGZyb20gJ0BiaXRnby1iZXRhL3Nkay1jb3JlJztcbmltcG9ydCB7IEJhc2VDb2luIGFzIFN0YXRpY3NCYXNlQ29pbiwgQ29pbkZhbWlseSB9IGZyb20gJ0BiaXRnby1iZXRhL3N0YXRpY3MnO1xuaW1wb3J0IHsgVGVtcG8gfSBmcm9tICcuLi8uLi9zcmMvdGVtcG8nO1xuY29uc3QgUEFUSF9VU0RfQUREUkVTUyA9ICcweDIwYzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAnO1xuXG4vLyBzZWNwMjU2azEgZ2VuZXJhdG9yIHBvaW50IEcgKDMzIGJ5dGVzKSArIDMyLWJ5dGUgY2hhaW5jb2RlIOKAlCB2YWxpZCBjb21tb25LZXlDaGFpbiBmb3IgZGVyaXZlVW5oYXJkZW5lZFxuY29uc3QgVEVTVF9CQUNLVVBfS0VZID1cbiAgJzAyNzliZTY2N2VmOWRjYmJhYzU1YTA2Mjk1Y2U4NzBiMDcwMjliZmNkYjJkY2UyOGQ5NTlmMjgxNWIxNmY4MTc5OCcgK1xuICAnMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMSc7XG5jb25zdCBURVNUX1JFQ09WRVJZX0RFU1RJTkFUSU9OID0gJzB4ODAxNTFlYmY2MzVlNmVjOGE1NDU1MjU4ZjYxN2JlNmNkYTFmYmQ3ZSc7XG5cbmRlc2NyaWJlKCdUZW1wbyBSZWNvdmVyeScsIGZ1bmN0aW9uICgpIHtcbiAgbGV0IGJpdGdvOiBUZXN0Qml0R29BUEk7XG4gIGxldCBiYXNlY29pbjogVGVtcG87XG4gIGxldCBzYW5kYm94OiBzaW5vbi5TaW5vblNhbmRib3g7XG5cbiAgYmVmb3JlKGZ1bmN0aW9uICgpIHtcbiAgICBiaXRnbyA9IFRlc3RCaXRHby5kZWNvcmF0ZShCaXRHb0FQSSwgeyBlbnY6ICdtb2NrJyB9KTtcbiAgICBiaXRnby5zYWZlUmVnaXN0ZXIoJ3RlbXBvJywgKGI6IEJpdEdvQmFzZSkgPT4ge1xuICAgICAgY29uc3QgbW9ja1N0YXRpY3NDb2luOiBSZWFkb25seTxTdGF0aWNzQmFzZUNvaW4+ID0ge1xuICAgICAgICBuYW1lOiAndGVtcG8nLFxuICAgICAgICBmdWxsTmFtZTogJ1RlbXBvJyxcbiAgICAgICAgZmFtaWx5OiBDb2luRmFtaWx5LlRFTVBPLFxuICAgICAgICBuZXR3b3JrOiB7IHR5cGU6ICdtYWlubmV0JyB9LFxuICAgICAgICBmZWF0dXJlczogW10sXG4gICAgICB9IGFzIGFueTtcbiAgICAgIHJldHVybiBUZW1wby5jcmVhdGVJbnN0YW5jZShiLCBtb2NrU3RhdGljc0NvaW4pO1xuICAgIH0pO1xuICAgIGJpdGdvLmluaXRpYWxpemVUZXN0VmFycygpO1xuICAgIGJhc2Vjb2luID0gYml0Z28uY29pbigndGVtcG8nKSBhcyBUZW1wbztcbiAgfSk7XG5cbiAgYmVmb3JlRWFjaChmdW5jdGlvbiAoKSB7XG4gICAgc2FuZGJveCA9IHNpbm9uLmNyZWF0ZVNhbmRib3goKTtcbiAgfSk7XG5cbiAgYWZ0ZXJFYWNoKGZ1bmN0aW9uICgpIHtcbiAgICBzYW5kYm94LnJlc3RvcmUoKTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ3F1ZXJ5VGVtcG9ScGMgKHZpYSByZWNvdmVyeUJsb2NrY2hhaW5FeHBsb3JlclF1ZXJ5KScsIGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBtb2NrRmV0Y2gocmVzcG9uc2VCb2R5OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik6IHNpbm9uLlNpbm9uU3R1YiB7XG4gICAgICByZXR1cm4gc2FuZGJveC5zdHViKGdsb2JhbCwgJ2ZldGNoJyBhcyBhbnkpLnJlc29sdmVzKHtcbiAgICAgICAgb2s6IHRydWUsXG4gICAgICAgIGpzb246IGFzeW5jICgpID0+IHJlc3BvbnNlQm9keSxcbiAgICAgIH0gYXMgYW55KTtcbiAgICB9XG5cbiAgICBpdCgncmV0dXJucyB7IHJlc3VsdDogXCIwXCIgfSBmb3IgYWNjb3VudC9iYWxhbmNlIHdpdGhvdXQgY2FsbGluZyBSUEMnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBmZXRjaFN0dWIgPSBtb2NrRmV0Y2goe30pO1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgYmFzZWNvaW4ucmVjb3ZlcnlCbG9ja2NoYWluRXhwbG9yZXJRdWVyeSh7XG4gICAgICAgIG1vZHVsZTogJ2FjY291bnQnLFxuICAgICAgICBhY3Rpb246ICdiYWxhbmNlJyxcbiAgICAgICAgYWRkcmVzczogJzB4YWJjJyxcbiAgICAgIH0pO1xuICAgICAgcmVzdWx0LnNob3VsZC5kZWVwRXF1YWwoeyByZXN1bHQ6ICcwJyB9KTtcbiAgICAgIGZldGNoU3R1Yi5jYWxsZWQuc2hvdWxkLmVxdWFsKGZhbHNlKTtcbiAgICB9KTtcblxuICAgIGl0KCdjYWxscyBldGhfY2FsbCB3aXRoIGJhbGFuY2VPZiBzZWxlY3RvciBmb3IgYWNjb3VudC90b2tlbmJhbGFuY2UnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBmZXRjaFN0dWIgPSBtb2NrRmV0Y2goeyByZXN1bHQ6ICcweDRlMjAnIH0pOyAvLyAyMDAwMCBkZWNpbWFsXG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBiYXNlY29pbi5yZWNvdmVyeUJsb2NrY2hhaW5FeHBsb3JlclF1ZXJ5KHtcbiAgICAgICAgbW9kdWxlOiAnYWNjb3VudCcsXG4gICAgICAgIGFjdGlvbjogJ3Rva2VuYmFsYW5jZScsXG4gICAgICAgIGFkZHJlc3M6ICcweDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAnLFxuICAgICAgICBjb250cmFjdGFkZHJlc3M6IFBBVEhfVVNEX0FERFJFU1MsXG4gICAgICAgIHRhZzogJ2xhdGVzdCcsXG4gICAgICB9KTtcbiAgICAgIHJlc3VsdC5zaG91bGQuZGVlcEVxdWFsKHsgcmVzdWx0OiAnMjAwMDAnIH0pO1xuICAgICAgY29uc3QgYm9keSA9IEpTT04ucGFyc2UoZmV0Y2hTdHViLmZpcnN0Q2FsbC5hcmdzWzFdLmJvZHkpO1xuICAgICAgYm9keS5tZXRob2Quc2hvdWxkLmVxdWFsKCdldGhfY2FsbCcpO1xuICAgICAgYm9keS5wYXJhbXNbMF0uZGF0YS5zaG91bGQuc3RhcnRXaXRoKCcweDcwYTA4MjMxJyk7XG4gICAgfSk7XG5cbiAgICBpdCgnY2FsbHMgZXRoX2dldFRyYW5zYWN0aW9uQ291bnQgZm9yIGFjY291bnQvdHhsaXN0IGFuZCBwYXJzZXMgbm9uY2UnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBtb2NrRmV0Y2goeyByZXN1bHQ6ICcweDUnIH0pO1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgYmFzZWNvaW4ucmVjb3ZlcnlCbG9ja2NoYWluRXhwbG9yZXJRdWVyeSh7XG4gICAgICAgIG1vZHVsZTogJ2FjY291bnQnLFxuICAgICAgICBhY3Rpb246ICd0eGxpc3QnLFxuICAgICAgICBhZGRyZXNzOiAnMHhhYmMnLFxuICAgICAgfSk7XG4gICAgICByZXN1bHQuc2hvdWxkLmRlZXBFcXVhbCh7IG5vbmNlOiA1IH0pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3JldHVybnMgeyByZXN1bHQ6IFwiMFwiIH0gd2hlbiBSUEMgcmV0dXJucyBudWxsIGJvZHkucmVzdWx0JywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgbW9ja0ZldGNoKHsgcmVzdWx0OiBudWxsIH0pO1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgYmFzZWNvaW4ucmVjb3ZlcnlCbG9ja2NoYWluRXhwbG9yZXJRdWVyeSh7XG4gICAgICAgIG1vZHVsZTogJ2FjY291bnQnLFxuICAgICAgICBhY3Rpb246ICd0b2tlbmJhbGFuY2UnLFxuICAgICAgICBhZGRyZXNzOiAnMHhhYmMnLFxuICAgICAgICBjb250cmFjdGFkZHJlc3M6IFBBVEhfVVNEX0FERFJFU1MsXG4gICAgICB9KTtcbiAgICAgIHJlc3VsdC5zaG91bGQuZGVlcEVxdWFsKHsgcmVzdWx0OiAnMCcgfSk7XG4gICAgfSk7XG5cbiAgICBpdCgncmV0dXJucyB7IHJlc3VsdDogXCIwXCIgfSB3aGVuIFJQQyByZXR1cm5zIG1hbGZvcm1lZCBib2R5LnJlc3VsdCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIG1vY2tGZXRjaCh7IHJlc3VsdDogJ25vdC1hLW51bWJlcicgfSk7XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBiYXNlY29pbi5yZWNvdmVyeUJsb2NrY2hhaW5FeHBsb3JlclF1ZXJ5KHtcbiAgICAgICAgbW9kdWxlOiAnYWNjb3VudCcsXG4gICAgICAgIGFjdGlvbjogJ3Rva2VuYmFsYW5jZScsXG4gICAgICAgIGFkZHJlc3M6ICcweGFiYycsXG4gICAgICAgIGNvbnRyYWN0YWRkcmVzczogUEFUSF9VU0RfQUREUkVTUyxcbiAgICAgIH0pO1xuICAgICAgcmVzdWx0LnNob3VsZC5kZWVwRXF1YWwoeyByZXN1bHQ6ICcwJyB9KTtcbiAgICB9KTtcblxuICAgIGl0KCd0aHJvd3Mgd2hlbiB0aGUgUlBDIHJldHVybnMgYW4gZXJyb3IgZmllbGQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBtb2NrRmV0Y2goeyBlcnJvcjogeyBtZXNzYWdlOiAnZXhlY3V0aW9uIHJldmVydGVkJyB9IH0pO1xuICAgICAgYXdhaXQgYmFzZWNvaW5cbiAgICAgICAgLnJlY292ZXJ5QmxvY2tjaGFpbkV4cGxvcmVyUXVlcnkoe1xuICAgICAgICAgIG1vZHVsZTogJ2FjY291bnQnLFxuICAgICAgICAgIGFjdGlvbjogJ3Rva2VuYmFsYW5jZScsXG4gICAgICAgICAgYWRkcmVzczogJzB4YWJjJyxcbiAgICAgICAgICBjb250cmFjdGFkZHJlc3M6IFBBVEhfVVNEX0FERFJFU1MsXG4gICAgICAgIH0pXG4gICAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKCdUZW1wbyBSUEMgZXJyb3I6IGV4ZWN1dGlvbiByZXZlcnRlZCcpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Rocm93cyBmb3IgdW5zdXBwb3J0ZWQgbW9kdWxlL2FjdGlvbicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGF3YWl0IGJhc2Vjb2luXG4gICAgICAgIC5yZWNvdmVyeUJsb2NrY2hhaW5FeHBsb3JlclF1ZXJ5KHsgbW9kdWxlOiAncHJveHknLCBhY3Rpb246ICdldGhfYmxvY2tOdW1iZXInIH0pXG4gICAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKCdxdWVyeVRlbXBvUnBjOiB1bnN1cHBvcnRlZCBtb2R1bGU9cHJveHkgYWN0aW9uPWV0aF9ibG9ja051bWJlcicpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnYnVpbGRVbnNpZ25lZFN3ZWVwVHhuVFNTIOKAlCBnYXMgbWFyZ2luIGNhbGN1bGF0aW9uJywgZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIHN0dWJCYWxhbmNlQW5kTm9uY2UoYmFsYW5jZTogc3RyaW5nLCBub25jZSA9IDApIHtcbiAgICAgIHNhbmRib3guc3R1YihiYXNlY29pbiBhcyBhbnksICdxdWVyeUFkZHJlc3NUb2tlbkJhbGFuY2UnKS5yZXNvbHZlcyhiYWxhbmNlKTtcbiAgICAgIHNhbmRib3guc3R1YihiYXNlY29pbiBhcyBhbnksICdnZXRBZGRyZXNzTm9uY2UnKS5yZXNvbHZlcyhub25jZSk7XG4gICAgfVxuXG4gICAgaXQoJ2RlZHVjdHMgZ2FzTGltaXQgw5cgbWF4RmVlUGVyR2FzIC8gMTBeMTIgZnJvbSBwYXRoVVNEIGJhbGFuY2UnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAvLyBnYXNNYXJnaW4gPSAxXzAwMF8wMDAgKiAyMF8wMDBfMDAwXzAwMCAqIDEuNzUgLyAxMF4xMiA9IDM1XzAwMFxuICAgICAgLy8gc3dlZXBBbW91bnQgPSAxXzAwMF8wMDAgLSAzNV8wMDAgPSA5NjVfMDAwXG4gICAgICBzdHViQmFsYW5jZUFuZE5vbmNlKCcxMDAwMDAwJyk7XG4gICAgICBjb25zdCByZXN1bHQgPSAoYXdhaXQgKGJhc2Vjb2luIGFzIGFueSkuYnVpbGRVbnNpZ25lZFN3ZWVwVHhuVFNTKHtcbiAgICAgICAgYmFja3VwS2V5OiBURVNUX0JBQ0tVUF9LRVksXG4gICAgICAgIHJlY292ZXJ5RGVzdGluYXRpb246IFRFU1RfUkVDT1ZFUllfREVTVElOQVRJT04sXG4gICAgICAgIHRva2VuQ29udHJhY3RBZGRyZXNzOiBQQVRIX1VTRF9BRERSRVNTLFxuICAgICAgICBnYXNMaW1pdDogMV8wMDBfMDAwLFxuICAgICAgICBlaXAxNTU5OiB7IG1heEZlZVBlckdhczogMjBfMDAwXzAwMF8wMDAsIG1heFByaW9yaXR5RmVlUGVyR2FzOiAxMF8wMDBfMDAwXzAwMCB9LFxuICAgICAgfSkpIGFzIGFueTtcbiAgICAgIHNob3VsZC5leGlzdChyZXN1bHQudHhSZXF1ZXN0cyk7XG4gICAgICByZXN1bHQudHhSZXF1ZXN0c1swXS50cmFuc2FjdGlvbnNbMF0udW5zaWduZWRUeC5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgnc2VyaWFsaXplZFR4SGV4Jyk7XG4gICAgfSk7XG5cbiAgICBpdCgndXNlcyBzbWFsbGVyIG1hcmdpbiB3aGVuIGdhc0xpbWl0IGlzIGhhbHZlZCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIGdhc01hcmdpbiA9IDUwMF8wMDAgKiAyMF8wMDBfMDAwXzAwMCAqIDEuNzUgLyAxMF4xMiA9IDE3XzUwMFxuICAgICAgLy8gc3dlZXBBbW91bnQgPSA1MF8wMDAgLSAxN181MDAgPSAzMl81MDBcbiAgICAgIHN0dWJCYWxhbmNlQW5kTm9uY2UoJzUwMDAwJyk7XG4gICAgICBjb25zdCByZXN1bHQgPSAoYXdhaXQgKGJhc2Vjb2luIGFzIGFueSkuYnVpbGRVbnNpZ25lZFN3ZWVwVHhuVFNTKHtcbiAgICAgICAgYmFja3VwS2V5OiBURVNUX0JBQ0tVUF9LRVksXG4gICAgICAgIHJlY292ZXJ5RGVzdGluYXRpb246IFRFU1RfUkVDT1ZFUllfREVTVElOQVRJT04sXG4gICAgICAgIHRva2VuQ29udHJhY3RBZGRyZXNzOiBQQVRIX1VTRF9BRERSRVNTLFxuICAgICAgICBnYXNMaW1pdDogNTAwXzAwMCxcbiAgICAgICAgZWlwMTU1OTogeyBtYXhGZWVQZXJHYXM6IDIwXzAwMF8wMDBfMDAwLCBtYXhQcmlvcml0eUZlZVBlckdhczogMTBfMDAwXzAwMF8wMDAgfSxcbiAgICAgIH0pKSBhcyBhbnk7XG4gICAgICBzaG91bGQuZXhpc3QocmVzdWx0LnR4UmVxdWVzdHMpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Rocm93cyB3aGVuIGJhbGFuY2UgZXhhY3RseSBlcXVhbHMgdGhlIGdhcyBtYXJnaW4nLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAvLyBnYXNNYXJnaW4gPSAxXzAwMF8wMDAgKiAyMF8wMDBfMDAwXzAwMCAvIDEwXjEyID0gMjBfMDAwOyBiYWxhbmNlID0gMjBfMDAwIOKGkiBzd2VlcEFtb3VudCA9IDBcbiAgICAgIHN0dWJCYWxhbmNlQW5kTm9uY2UoJzIwMDAwJyk7XG4gICAgICBhd2FpdCAoYmFzZWNvaW4gYXMgYW55KVxuICAgICAgICAuYnVpbGRVbnNpZ25lZFN3ZWVwVHhuVFNTKHtcbiAgICAgICAgICBiYWNrdXBLZXk6IFRFU1RfQkFDS1VQX0tFWSxcbiAgICAgICAgICByZWNvdmVyeURlc3RpbmF0aW9uOiBURVNUX1JFQ09WRVJZX0RFU1RJTkFUSU9OLFxuICAgICAgICAgIHRva2VuQ29udHJhY3RBZGRyZXNzOiBQQVRIX1VTRF9BRERSRVNTLFxuICAgICAgICAgIGdhc0xpbWl0OiAxXzAwMF8wMDAsXG4gICAgICAgICAgZWlwMTU1OTogeyBtYXhGZWVQZXJHYXM6IDIwXzAwMF8wMDBfMDAwLCBtYXhQcmlvcml0eUZlZVBlckdhczogMTBfMDAwXzAwMF8wMDAgfSxcbiAgICAgICAgfSlcbiAgICAgICAgLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoL0luc3VmZmljaWVudCBiYWxhbmNlLyk7XG4gICAgfSk7XG5cbiAgICBpdCgnZG9lcyBub3QgZGVkdWN0IG1hcmdpbiB3aGVuIHN3ZWVwaW5nIGEgbm9uLXBhdGhVU0QgdG9rZW4nLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBvdGhlclRva2VuID0gJzB4MTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMSc7XG4gICAgICBzdHViQmFsYW5jZUFuZE5vbmNlKCc1MDAnKTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IChhd2FpdCAoYmFzZWNvaW4gYXMgYW55KS5idWlsZFVuc2lnbmVkU3dlZXBUeG5UU1Moe1xuICAgICAgICBiYWNrdXBLZXk6IFRFU1RfQkFDS1VQX0tFWSxcbiAgICAgICAgcmVjb3ZlcnlEZXN0aW5hdGlvbjogVEVTVF9SRUNPVkVSWV9ERVNUSU5BVElPTixcbiAgICAgICAgdG9rZW5Db250cmFjdEFkZHJlc3M6IG90aGVyVG9rZW4sXG4gICAgICAgIGdhc0xpbWl0OiAxXzAwMF8wMDAsXG4gICAgICAgIGVpcDE1NTk6IHsgbWF4RmVlUGVyR2FzOiAyMF8wMDBfMDAwXzAwMCwgbWF4UHJpb3JpdHlGZWVQZXJHYXM6IDEwXzAwMF8wMDBfMDAwIH0sXG4gICAgICB9KSkgYXMgYW55O1xuICAgICAgLy8gRnVsbCBiYWxhbmNlIG9mIDUwMCBzd2VwdDsgbm8gbWFyZ2luIGRlZHVjdGVkXG4gICAgICBzaG91bGQuZXhpc3QocmVzdWx0LnR4UmVxdWVzdHMpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3JldHVybnMgY29ycmVjdCBVbnNpZ25lZFN3ZWVwVHhNUEN2MiBzdHJ1Y3R1cmUnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBzdHViQmFsYW5jZUFuZE5vbmNlKCcxMDAwMDAwJyk7XG4gICAgICBjb25zdCByZXN1bHQgPSAoYXdhaXQgKGJhc2Vjb2luIGFzIGFueSkuYnVpbGRVbnNpZ25lZFN3ZWVwVHhuVFNTKHtcbiAgICAgICAgYmFja3VwS2V5OiBURVNUX0JBQ0tVUF9LRVksXG4gICAgICAgIHJlY292ZXJ5RGVzdGluYXRpb246IFRFU1RfUkVDT1ZFUllfREVTVElOQVRJT04sXG4gICAgICAgIHRva2VuQ29udHJhY3RBZGRyZXNzOiBQQVRIX1VTRF9BRERSRVNTLFxuICAgICAgICBnYXNMaW1pdDogMV8wMDBfMDAwLFxuICAgICAgICBlaXAxNTU5OiB7IG1heEZlZVBlckdhczogMjBfMDAwXzAwMF8wMDAsIG1heFByaW9yaXR5RmVlUGVyR2FzOiAxMF8wMDBfMDAwXzAwMCB9LFxuICAgICAgfSkpIGFzIGFueTtcbiAgICAgIGNvbnN0IHR4ID0gcmVzdWx0LnR4UmVxdWVzdHNbMF0udHJhbnNhY3Rpb25zWzBdO1xuICAgICAgdHgudW5zaWduZWRUeC5kZXJpdmF0aW9uUGF0aC5zaG91bGQuZXF1YWwoJ20vMCcpO1xuICAgICAgdHgudW5zaWduZWRUeC5jb2luU3BlY2lmaWMuY29tbW9uS2V5Q2hhaW4uc2hvdWxkLmVxdWFsKFRFU1RfQkFDS1VQX0tFWSk7XG4gICAgICB0eC5zaWduYXR1cmVTaGFyZXMuc2hvdWxkLmRlZXBFcXVhbChbXSk7XG4gICAgICB0eC5ub25jZS5zaG91bGQuZXF1YWwoMCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdyZWNvdmVyVFNTIOKAlCB1bnNpZ25lZCBzd2VlcCBkaXNwYXRjaCcsIGZ1bmN0aW9uICgpIHtcbiAgICBpdCgncm91dGVzIHRvIGJ1aWxkVW5zaWduZWRTd2VlcFR4blRTUyB3aGVuIGtleXMgYXJlIHBsYWluIHB1YmxpYyBrZXlzJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgYnVpbGRTdHViID0gc2FuZGJveC5zdHViKGJhc2Vjb2luIGFzIGFueSwgJ2J1aWxkVW5zaWduZWRTd2VlcFR4blRTUycpLnJlc29sdmVzKHsgdHhSZXF1ZXN0czogW10gfSk7XG4gICAgICBzYW5kYm94LnN0dWIoYmFzZWNvaW4gYXMgYW55LCAndmFsaWRhdGVSZWNvdmVyeVBhcmFtcycpLnJldHVybnModW5kZWZpbmVkKTtcblxuICAgICAgYXdhaXQgKGJhc2Vjb2luIGFzIGFueSkucmVjb3ZlclRTUyh7XG4gICAgICAgIHVzZXJLZXk6IFRFU1RfQkFDS1VQX0tFWSxcbiAgICAgICAgYmFja3VwS2V5OiBURVNUX0JBQ0tVUF9LRVksXG4gICAgICAgIGlzVHNzOiB0cnVlLFxuICAgICAgICByZWNvdmVyeURlc3RpbmF0aW9uOiBURVNUX1JFQ09WRVJZX0RFU1RJTkFUSU9OLFxuICAgICAgfSk7XG5cbiAgICAgIGJ1aWxkU3R1Yi5jYWxsZWRPbmNlLnNob3VsZC5lcXVhbCh0cnVlKTtcbiAgICB9KTtcbiAgfSk7XG59KTtcbiJdfQ==