@bitgo-beta/abstract-utxo 1.1.1-beta.2021 → 1.1.1-beta.2023

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.
@@ -86,10 +86,10 @@ export class AbstractUtxoCoin extends BaseCoin {
86
86
  super(bitgo);
87
87
  this.supportedTxFormats = {
88
88
  psbt: true,
89
- legacy: this.getChain() === 'btc',
89
+ legacy: false,
90
90
  };
91
91
  this.supportedSdkBackends = {
92
- utxolib: this.getChain() === 'btc',
92
+ utxolib: false,
93
93
  'wasm-utxo': true,
94
94
  };
95
95
  this.defaultSdkBackend = 'wasm-utxo';
@@ -674,4 +674,4 @@ export class AbstractUtxoCoin extends BaseCoin {
674
674
  }
675
675
  }
676
676
  }
677
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWJzdHJhY3RVdHhvQ29pbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hYnN0cmFjdFV0eG9Db2luLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sTUFBTSxNQUFNLFFBQVEsQ0FBQztBQUM1QixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBRXJDLE9BQU8sQ0FBQyxNQUFNLFFBQVEsQ0FBQztBQUN2QixPQUFPLEtBQUssT0FBTyxNQUFNLHNCQUFzQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxLQUFLLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUM1RCxPQUFPLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3pELE9BQU8sRUFFTCxRQUFRLEVBTVIsZUFBZSxFQUNmLHFDQUFxQyxFQUNyQyxtQkFBbUIsRUFFbkIsUUFBUSxFQUdSLFVBQVUsRUFHVixhQUFhLEVBT2IscUJBQXFCLEVBTXJCLDhCQUE4QixFQUs5QixVQUFVLEVBQ1YsV0FBVyxHQUNaLE1BQU0sc0JBQXNCLENBQUM7QUFFOUIsT0FBTyxFQUNMLGlCQUFpQixFQUdqQixPQUFPLEVBQ1AsaUJBQWlCLEVBR2pCLG1CQUFtQixFQUVuQixPQUFPLEdBRVIsTUFBTSxZQUFZLENBQUM7QUFDcEIsT0FBTyxFQUFFLDBCQUEwQixFQUFFLHlCQUF5QixFQUFFLE1BQU0sNENBQTRDLENBQUM7QUFDbkgsT0FBTyxFQUFFLDZCQUE2QixFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ3pELE9BQU8sRUFDTCwrQkFBK0IsRUFFL0IsU0FBUyxFQUNULHlCQUF5QixFQUN6QixpQkFBaUIsRUFDakIsZ0JBQWdCLEVBQ2hCLGlCQUFpQixHQUNsQixNQUFNLGVBQWUsQ0FBQztBQUd2QixPQUFPLEVBQ0wsd0JBQXdCLEVBQ3hCLG1CQUFtQixFQUNuQiw0QkFBNEIsR0FDN0IsTUFBTSw0Q0FBNEMsQ0FBQztBQUNw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RUFBRSxDQUFDO1lBQzlELElBQUksU0FBUyxLQUFLLFNBQVMsRUFBRSxDQUFDO2dCQUM1QixNQUFNLElBQUksS0FBSyxDQUFDLHVDQUF1QyxDQUFDLENBQUM7WUFDM0QsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5pbXBvcnQgeyByYW5kb21CeXRlcyB9IGZyb20gJ2NyeXB0byc7XG5cbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgKiBhcyB1dHhvbGliIGZyb20gJ0BiaXRnby1iZXRhL3V0eG8tbGliJztcbmltcG9ydCB7IEJJUDMyLCBmaXhlZFNjcmlwdFdhbGxldCB9IGZyb20gJ0BiaXRnby93YXNtLXV0eG8nO1xuaW1wb3J0IHsgYml0Z28sIGdldE1haW5uZXQgfSBmcm9tICdAYml0Z28tYmV0YS91dHhvLWxpYic7XG5pbXBvcnQge1xuICBBZGRyZXNzQ29pblNwZWNpZmljLFxuICBCYXNlQ29pbixcbiAgQml0R29CYXNlLFxuICBDcmVhdGVBZGRyZXNzRm9ybWF0LFxuICBFeHRyYVByZWJ1aWxkUGFyYW1zT3B0aW9ucyxcbiAgSGFsZlNpZ25lZFV0eG9UcmFuc2FjdGlvbixcbiAgSUJhc2VDb2luLFxuICBpc0JvbHQxMUludm9pY2UsXG4gIEludmFsaWRBZGRyZXNzRGVyaXZhdGlvblByb3BlcnR5RXJyb3IsXG4gIEludmFsaWRBZGRyZXNzRXJyb3IsXG4gIElSZXF1ZXN0VHJhY2VyLFxuICBpc1RyaXBsZSxcbiAgSVdhbGxldCxcbiAgS2V5Y2hhaW5zVHJpcGxldCxcbiAgS2V5SW5kaWNlcyxcbiAgTWlzbWF0Y2hlZFJlY2lwaWVudCxcbiAgTXVsdGlzaWdUeXBlLFxuICBtdWx0aXNpZ1R5cGVzLFxuICBQYXJzZVRyYW5zYWN0aW9uT3B0aW9ucyBhcyBCYXNlUGFyc2VUcmFuc2FjdGlvbk9wdGlvbnMsXG4gIFByZWNyZWF0ZUJpdEdvT3B0aW9ucyxcbiAgUHJlc2lnblRyYW5zYWN0aW9uT3B0aW9ucyxcbiAgQnJpZGdpbmdQYXJhbXMsXG4gIFJlcXVlc3RUcmFjZXIsXG4gIFNpZ25lZFRyYW5zYWN0aW9uLFxuICBUeEludGVudE1pc21hdGNoRXJyb3IsXG4gIFNpZ25UcmFuc2FjdGlvbk9wdGlvbnMgYXMgQmFzZVNpZ25UcmFuc2FjdGlvbk9wdGlvbnMsXG4gIFN1cHBsZW1lbnRHZW5lcmF0ZVdhbGxldE9wdGlvbnMsXG4gIFRyYW5zYWN0aW9uUGFyYW1zIGFzIEJhc2VUcmFuc2FjdGlvblBhcmFtcyxcbiAgVHJhbnNhY3Rpb25QcmVidWlsZCBhcyBCYXNlVHJhbnNhY3Rpb25QcmVidWlsZCxcbiAgVHJpcGxlLFxuICBUeEludGVudE1pc21hdGNoUmVjaXBpZW50RXJyb3IsXG4gIFZlcmlmaWNhdGlvbk9wdGlvbnMsXG4gIFZlcmlmeUFkZHJlc3NPcHRpb25zIGFzIEJhc2VWZXJpZnlBZGRyZXNzT3B0aW9ucyxcbiAgVmVyaWZ5VHJhbnNhY3Rpb25PcHRpb25zIGFzIEJhc2VWZXJpZnlUcmFuc2FjdGlvbk9wdGlvbnMsXG4gIFdhbGxldCxcbiAgaXNWYWxpZFBydixcbiAgaXNWYWxpZFhwcnYsXG59IGZyb20gJ0BiaXRnby1iZXRhL3Nkay1jb3JlJztcblxuaW1wb3J0IHtcbiAgYmFja3VwS2V5UmVjb3ZlcnksXG4gIENyb3NzQ2hhaW5SZWNvdmVyeVNpZ25lZCxcbiAgQ3Jvc3NDaGFpblJlY292ZXJ5VW5zaWduZWQsXG4gIGZvckNvaW4sXG4gIHJlY292ZXJDcm9zc0NoYWluLFxuICBSZWNvdmVyUGFyYW1zLFxuICBSZWNvdmVyeVByb3ZpZGVyLFxuICB2MUJhY2t1cEtleVJlY292ZXJ5LFxuICBWMVJlY292ZXJQYXJhbXMsXG4gIHYxU3dlZXAsXG4gIFYxU3dlZXBQYXJhbXMsXG59IGZyb20gJy4vcmVjb3ZlcnknO1xuaW1wb3J0IHsgZ2V0UmVwbGF5UHJvdGVjdGlvblB1YmtleXMsIGlzUmVwbGF5UHJvdGVjdGlvblVuc3BlbnQgfSBmcm9tICcuL3RyYW5zYWN0aW9uL2ZpeGVkU2NyaXB0L3JlcGxheVByb3RlY3Rpb24nO1xuaW1wb3J0IHsgc3VwcG9ydGVkQ3Jvc3NDaGFpblJlY292ZXJpZXMgfSBmcm9tICcuL2NvbmZpZyc7XG5pbXBvcnQge1xuICBhc3NlcnRWYWxpZFRyYW5zYWN0aW9uUmVjaXBpZW50LFxuICBEZWNvZGVkVHJhbnNhY3Rpb24sXG4gIGV4cGxhaW5UeCxcbiAgZnJvbUV4dGVuZGVkQWRkcmVzc0Zvcm1hdCxcbiAgaXNTY3JpcHRSZWNpcGllbnQsXG4gIHBhcnNlVHJhbnNhY3Rpb24sXG4gIHZlcmlmeVRyYW5zYWN0aW9uLFxufSBmcm9tICcuL3RyYW5zYWN0aW9uJztcbmltcG9ydCB0eXBlIHsgVHJhbnNhY3Rpb25FeHBsYW5hdGlvbiB9IGZyb20gJy4vdHJhbnNhY3Rpb24vZml4ZWRTY3JpcHQvZXhwbGFpblRyYW5zYWN0aW9uJztcbmltcG9ydCB7IE11c2lnMlBhcnRpY2lwYW50IH0gZnJvbSAnLi90cmFuc2FjdGlvbi9maXhlZFNjcmlwdC9tdXNpZzInO1xuaW1wb3J0IHtcbiAgQWdncmVnYXRlVmFsaWRhdGlvbkVycm9yLFxuICBFcnJvck1pc3NpbmdPdXRwdXRzLFxuICBFcnJvckltcGxpY2l0RXh0ZXJuYWxPdXRwdXRzLFxufSBmcm9tICcuL3RyYW5zYWN0aW9uL2Rlc2NyaXB0b3IvdmVyaWZ5VHJhbnNhY3Rpb24nO1xuaW1wb3J0IHsgYXNzZXJ0RGVzY3JpcHRvcldhbGxldEFkZHJlc3MsIGdldERlc2NyaXB0b3JNYXBGcm9tV2FsbGV0LCBpc0Rlc2NyaXB0b3JXYWxsZXQgfSBmcm9tICcuL2Rlc2NyaXB0b3InO1xuaW1wb3J0IHtcbiAgZ2V0RnVsbE5hbWVGcm9tQ29pbk5hbWUsXG4gIGdldE1haW5uZXRDb2luTmFtZSxcbiAgZ2V0TmV0d29ya0Zyb21Db2luTmFtZSxcbiAgaXNNYWlubmV0Q29pbixcbiAgVXR4b0NvaW5OYW1lLFxuICBVdHhvQ29pbk5hbWVNYWlubmV0LFxufSBmcm9tICcuL25hbWVzJztcbmltcG9ydCB7IGFzc2VydEZpeGVkU2NyaXB0V2FsbGV0QWRkcmVzcyB9IGZyb20gJy4vYWRkcmVzcy9maXhlZFNjcmlwdCc7XG5pbXBvcnQgeyBpc1Nka0JhY2tlbmQsIFBhcnNlZFRyYW5zYWN0aW9uLCBTZGtCYWNrZW5kIH0gZnJvbSAnLi90cmFuc2FjdGlvbi90eXBlcyc7XG5pbXBvcnQge1xuICBkZWNvZGVEZXNjcmlwdG9yUHNidCxcbiAgZGVjb2RlUHNidFdpdGgsXG4gIGVuY29kZVRyYW5zYWN0aW9uLFxuICBzdHJpbmdUb0J1ZmZlclRyeUZvcm1hdHMsXG59IGZyb20gJy4vdHJhbnNhY3Rpb24vZGVjb2RlJztcbmltcG9ydCB7IGZldGNoS2V5Y2hhaW5zLCB0b0JpcDMyVHJpcGxlLCBVdHhvS2V5Y2hhaW4gfSBmcm9tICcuL2tleWNoYWlucyc7XG5pbXBvcnQgeyB2ZXJpZnlLZXlTaWduYXR1cmUsIHZlcmlmeVVzZXJQdWJsaWNLZXkgfSBmcm9tICcuL3ZlcmlmeUtleSc7XG5pbXBvcnQgeyBnZXRQb2xpY3lGb3JFbnYgfSBmcm9tICcuL2Rlc2NyaXB0b3IvdmFsaWRhdGVQb2xpY3knO1xuaW1wb3J0IHsgc2lnblRyYW5zYWN0aW9uIH0gZnJvbSAnLi90cmFuc2FjdGlvbi9zaWduVHJhbnNhY3Rpb24nO1xuaW1wb3J0IHsgaXNVdHhvV2FsbGV0RGF0YSwgVXR4b1dhbGxldCB9IGZyb20gJy4vd2FsbGV0JztcbmltcG9ydCB7IGlzRGVzY3JpcHRvcldhbGxldERhdGEgfSBmcm9tICcuL2Rlc2NyaXB0b3IvZGVzY3JpcHRvcldhbGxldCc7XG5pbXBvcnQgdHlwZSB7IFVuc3BlbnQgfSBmcm9tICcuL3Vuc3BlbnQnO1xuXG5pbXBvcnQgU2NyaXB0VHlwZTJPZjMgPSB1dHhvbGliLmJpdGdvLm91dHB1dFNjcmlwdHMuU2NyaXB0VHlwZTJPZjM7XG5cbmV4cG9ydCB0eXBlIFR4Rm9ybWF0ID1cbiAgLy8gVGhpcyBpcyBhIGxlZ2FjeSB0cmFuc2FjdGlvbiBmb3JtYXQgYmFzZWQgYXJvdW5kIHRoZSBiaXRjb2luanMtbGliIHNlcmlhbGl6YXRpb24gb2YgdW5zaWduZWQgdHJhbnNhY3Rpb25zXG4gIC8vIGRvZXMgbm90IGluY2x1ZGUgcHJldk91dCBkYXRhIGFuZCBpcyBhIGJpdCBwYWluZnVsIHRvIHdvcmsgd2l0aFxuICAvLyBnb2luZyB0byBiZSBkZXByZWNhdGVkIGluIGZhdm9yIG9mIHBzYnRcbiAgLy8gQGRlcHJlY2F0ZWRcbiAgfCAnbGVnYWN5J1xuICAvLyBUaGlzIGlzIHRoZSBzdGFuZGFyZCBwc2J0IGZvcm1hdCwgaW5jbHVkaW5nIHRoZSBmdWxsIHByZXZUeCBkYXRhIGZvciBsZWdhY3kgdHJhbnNhY3Rpb25zLlxuICAvLyBUaGlzIHdpbGwgcmVtYWluIHN1cHBvcnRlZCBidXQgaXMgbm90IHRoZSBkZWZhdWx0LCBzaW5jZSB0aGUgZGF0YSBzaXplcyBjYW4gYmVjb21lIHByb2hpYml0aXZlbHkgbGFyZ2UuXG4gIHwgJ3BzYnQnXG4gIC8vIFRoaXMgaXMgYSBub25zdGFuZGFyZCBwc2J0IHZlcnNpb24gd2hlcmUgbGVnYWN5IGlucHV0cyBhcmUgc2VyaWFsaXplZCBhcyBpZiB0aGV5IHdlcmUgc2Vnd2l0IGlucHV0cy5cbiAgLy8gV2hpbGUgdGhpcyBwcmV2ZW50cyB1cyB0byBmdWxseSB2ZXJpZnkgdGhlIHRyYW5zYWN0aW9uIGZlZSwgd2UgaGF2ZSBvdGhlciBjaGVja3MgaW4gcGxhY2UgdG8gZW5zdXJlIHRoZSBmZWUgaXMgd2l0aGluIGJvdW5kcy5cbiAgfCAncHNidC1saXRlJztcblxuZXhwb3J0IGNsYXNzIEVycm9yRGVwcmVjYXRlZFR4Rm9ybWF0IGV4dGVuZHMgRXJyb3Ige1xuICBjb25zdHJ1Y3Rvcih0eEZvcm1hdDogVHhGb3JtYXQpIHtcbiAgICBzdXBlcihgU0RLIHN1cHBvcnQgZm9yIHR4Rm9ybWF0PSR7dHhGb3JtYXR9IGlzIGRlcHJlY2F0ZWQgb24gdGhpcyBlbnZpcm9ubWVudC4gUGxlYXNlIHVzZSBwc2J0IGluc3RlYWQuYCk7XG4gIH1cbn1cblxudHlwZSBVdHhvQ3VzdG9tU2lnbmluZ0Z1bmN0aW9uPFROdW1iZXIgZXh0ZW5kcyBudW1iZXIgfCBiaWdpbnQ+ID0ge1xuICAocGFyYW1zOiB7XG4gICAgY29pbjogSUJhc2VDb2luO1xuICAgIHR4UHJlYnVpbGQ6IFRyYW5zYWN0aW9uUHJlYnVpbGQ8VE51bWJlcj47XG4gICAgcHVicz86IHN0cmluZ1tdO1xuICAgIC8qKlxuICAgICAqIHNpZ25pbmdTdGVwIGZsYWcgYmVjb21lcyBhcHBsaWNhYmxlIHdoZW4gYm90aCBvZiB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDpcbiAgICAgKiAxKSBXaGVuIHRoZSBleHRlcm5hbCBleHByZXNzIHNpZ25lciBpcyBhY3RpdmF0ZWRcbiAgICAgKiAyKSBXaGVuIHRoZSBQU0JUIGluY2x1ZGVzIGF0IGxlYXN0IG9uZSB0YXByb290S2V5UGF0aFNwZW5kIGlucHV0LlxuICAgICAqXG4gICAgICogVGhlIHNpZ25pbmcgcHJvY2VzcyBvZiBhIHRhcHJvb3RLZXlQYXRoU3BlbmQgaW5wdXQgaXMgYSA0LXN0ZXAgc2VxdWVuY2U6XG4gICAgICogaSkgdXNlciBub25jZSBnZW5lcmF0aW9uIC0gc2lnbmVyTm9uY2UgLSB0aGlzIGlzIHRoZSBmaXJzdCBjYWxsIHRvIGV4dGVybmFsIGV4cHJlc3Mgc2lnbmVyIHNpZ25UcmFuc2FjdGlvblxuICAgICAqIGlpKSBiaXRnbyBub25jZSBnZW5lcmF0aW9uIC0gY29zaWduZXJOb25jZSAtIHRoaXMgaXMgdGhlIGZpcnN0IGFuZCBvbmx5IGNhbGwgdG8gbG9jYWwgc2lnblRyYW5zYWN0aW9uXG4gICAgICogaWlpKSB1c2VyIHNpZ25hdHVyZSAtIHNpZ25lclNpZ25hdHVyZSAtIHRoaXMgaXMgdGhlIHNlY29uZCBjYWxsIHRvIGV4dGVybmFsIGV4cHJlc3Mgc2lnbmVyIHNpZ25UcmFuc2FjdGlvblxuICAgICAqIGl2KSBiaXRnbyBzaWduYXR1cmUgLSBub3QgaW4gc2lnblRyYW5zYWN0aW9uIG1ldGhvZOKAmXMgc2NvcGVcbiAgICAgKlxuICAgICAqIEluIHRoZSBhYnNlbmNlIG9mIHRoaXMgZmxhZywgdGhlIGFmb3JlbWVudGlvbmVkIGZpcnN0IHRocmVlIHNlcXVlbmNlIGlzIGV4ZWN1dGVkIGluIGEgc2luZ2xlIHNpZ25UcmFuc2FjdGlvbiBjYWxsLlxuICAgICAqXG4gICAgICogTk9URTogV2UgbWFrZSBhIHN0cm9uZyBhc3N1bXB0aW9uIHRoYXQgdGhlIGV4dGVybmFsIGV4cHJlc3Mgc2lnbmVyIGFuZCBpdHMgY2FsbGVyIHVzZXMgc3RpY2t5IHNlc3Npb25zLFxuICAgICAqIHNpbmNlIFBTQlRzIGFyZSBjYWNoZWQgaW4gc3RlcCAxIHRvIGJlIHVzZWQgaW4gc3RlcCAzIGZvciBNdVNpZzIgdXNlciBzZWN1cmUgbm9uY2UgYWNjZXNzLlxuICAgICAqL1xuICAgIHNpZ25pbmdTdGVwPzogJ3NpZ25lck5vbmNlJyB8ICdzaWduZXJTaWduYXR1cmUnIHwgJ2Nvc2lnbmVyTm9uY2UnO1xuICB9KTogUHJvbWlzZTxTaWduZWRUcmFuc2FjdGlvbj47XG59O1xuXG5jb25zdCB7IGlzQ2hhaW5Db2RlLCBzY3JpcHRUeXBlRm9yQ2hhaW4sIG91dHB1dFNjcmlwdHMgfSA9IGJpdGdvO1xuXG4vKipcbiAqIENoZWNrIGlmIGEgZGVjb2RlZCB0cmFuc2FjdGlvbiBoYXMgYXQgbGVhc3Qgb25lIHRhcHJvb3Qga2V5IHBhdGggc3BlbmQgKE11U2lnMikgaW5wdXQuXG4gKiBXb3JrcyBmb3IgYm90aCB1dHhvbGliIFV0eG9Qc2J0IGFuZCB3YXNtLXV0eG8gQml0R29Qc2J0LlxuICovXG5mdW5jdGlvbiBoYXNLZXlQYXRoU3BlbmRJbnB1dDxUTnVtYmVyIGV4dGVuZHMgbnVtYmVyIHwgYmlnaW50PihcbiAgdHg6IERlY29kZWRUcmFuc2FjdGlvbjxUTnVtYmVyPixcbiAgcHViczogc3RyaW5nW10gfCB1bmRlZmluZWQsXG4gIGNvaW5OYW1lOiBVdHhvQ29pbk5hbWVcbik6IGJvb2xlYW4ge1xuICBpZiAodHggaW5zdGFuY2VvZiBiaXRnby5VdHhvUHNidCkge1xuICAgIHJldHVybiBiaXRnby5pc1RyYW5zYWN0aW9uV2l0aEtleVBhdGhTcGVuZElucHV0KHR4KTtcbiAgfVxuICBpZiAodHggaW5zdGFuY2VvZiBmaXhlZFNjcmlwdFdhbGxldC5CaXRHb1BzYnQpIHtcbiAgICBhc3NlcnQocHVicyAmJiBpc1RyaXBsZShwdWJzKSwgJ3B1YiB0cmlwbGUgaXMgcmVxdWlyZWQgdG8gY2hlY2sgZm9yIGtleSBwYXRoIHNwZW5kIGlucHV0cyBpbiB3YXNtLXV0eG8gUFNCVCcpO1xuICAgIGNvbnN0IHJvb3RXYWxsZXRLZXlzID0gZml4ZWRTY3JpcHRXYWxsZXQuUm9vdFdhbGxldEtleXMuZnJvbVhwdWJzKHB1YnMpO1xuICAgIGNvbnN0IHJlcGxheVByb3RlY3Rpb24gPSB7IHB1YmxpY0tleXM6IGdldFJlcGxheVByb3RlY3Rpb25QdWJrZXlzKGNvaW5OYW1lKSB9O1xuICAgIGNvbnN0IHBhcnNlZCA9IHR4LnBhcnNlVHJhbnNhY3Rpb25XaXRoV2FsbGV0S2V5cyhyb290V2FsbGV0S2V5cywgeyByZXBsYXlQcm90ZWN0aW9uIH0pO1xuICAgIHJldHVybiBwYXJzZWQuaW5wdXRzLnNvbWUoKGlucHV0KSA9PiBpbnB1dC5zY3JpcHRUeXBlID09PSAncDJ0ck11c2lnMktleVBhdGgnKTtcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbi8qKlxuICogQ29udmVydCBWYWxpZGF0aW9uRXJyb3IgdG8gVHhJbnRlbnRNaXNtYXRjaFJlY2lwaWVudEVycm9yIHdpdGggc3RydWN0dXJlZCBkYXRhXG4gKlxuICogVGhpcyBwcmVzZXJ2ZXMgdGhlIHN0cnVjdHVyZWQgZXJyb3IgaW5mb3JtYXRpb24gZnJvbSB0aGUgb3JpZ2luYWwgVmFsaWRhdGlvbkVycm9yXG4gKiBieSBleHRyYWN0aW5nIHRoZSBtaXNtYXRjaGVkIG91dHB1dHMgYW5kIGNvbnZlcnRpbmcgdGhlbSB0byB0aGUgc3RhbmRhcmRpemVkIGZvcm1hdC5cbiAqIFRoZSBvcmlnaW5hbCBlcnJvciBpcyBwcmVzZXJ2ZWQgYXMgdGhlIGBjYXVzZWAgZm9yIGRlYnVnZ2luZyBwdXJwb3Nlcy5cbiAqL1xuZnVuY3Rpb24gY29udmVydFZhbGlkYXRpb25FcnJvclRvVHhJbnRlbnRNaXNtYXRjaChcbiAgZXJyb3I6IEFnZ3JlZ2F0ZVZhbGlkYXRpb25FcnJvcixcbiAgcmVxSWQ6IHN0cmluZyB8IElSZXF1ZXN0VHJhY2VyIHwgdW5kZWZpbmVkLFxuICB0eFBhcmFtczogQmFzZVRyYW5zYWN0aW9uUGFyYW1zLFxuICB0eEhleDogc3RyaW5nIHwgdW5kZWZpbmVkLFxuICB0eEV4cGxhbmF0aW9uPzogdW5rbm93blxuKTogVHhJbnRlbnRNaXNtYXRjaFJlY2lwaWVudEVycm9yIHtcbiAgY29uc3QgbWlzbWF0Y2hlZFJlY2lwaWVudHM6IE1pc21hdGNoZWRSZWNpcGllbnRbXSA9IFtdO1xuXG4gIGZvciAoY29uc3QgZXJyIG9mIGVycm9yLmVycm9ycykge1xuICAgIGlmIChlcnIgaW5zdGFuY2VvZiBFcnJvck1pc3NpbmdPdXRwdXRzKSB7XG4gICAgICBtaXNtYXRjaGVkUmVjaXBpZW50cy5wdXNoKFxuICAgICAgICAuLi5lcnIubWlzc2luZ091dHB1dHMubWFwKChvdXRwdXQpID0+ICh7XG4gICAgICAgICAgYWRkcmVzczogb3V0cHV0LmFkZHJlc3MsXG4gICAgICAgICAgYW1vdW50OiBvdXRwdXQuYW1vdW50LnRvU3RyaW5nKCksXG4gICAgICAgIH0pKVxuICAgICAgKTtcbiAgICB9IGVsc2UgaWYgKGVyciBpbnN0YW5jZW9mIEVycm9ySW1wbGljaXRFeHRlcm5hbE91dHB1dHMpIHtcbiAgICAgIG1pc21hdGNoZWRSZWNpcGllbnRzLnB1c2goXG4gICAgICAgIC4uLmVyci5pbXBsaWNpdEV4dGVybmFsT3V0cHV0cy5tYXAoKG91dHB1dCkgPT4gKHtcbiAgICAgICAgICBhZGRyZXNzOiBvdXRwdXQuYWRkcmVzcyxcbiAgICAgICAgICBhbW91bnQ6IG91dHB1dC5hbW91bnQudG9TdHJpbmcoKSxcbiAgICAgICAgfSkpXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHR4SW50ZW50RXJyb3IgPSBuZXcgVHhJbnRlbnRNaXNtYXRjaFJlY2lwaWVudEVycm9yKFxuICAgIGVycm9yLm1lc3NhZ2UsXG4gICAgcmVxSWQsXG4gICAgW3R4UGFyYW1zXSxcbiAgICB0eEhleCxcbiAgICBtaXNtYXRjaGVkUmVjaXBpZW50cyxcbiAgICB0eEV4cGxhbmF0aW9uXG4gICk7XG4gIC8vIFByZXNlcnZlIHRoZSBvcmlnaW5hbCBzdHJ1Y3R1cmVkIGVycm9yIGFzIHRoZSBjYXVzZSBmb3IgZGVidWdnaW5nXG4gIC8vIFNlZTogaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvRXJyb3IvY2F1c2VcbiAgKHR4SW50ZW50RXJyb3IgYXMgRXJyb3IgJiB7IGNhdXNlPzogRXJyb3IgfSkuY2F1c2UgPSBlcnJvcjtcbiAgcmV0dXJuIHR4SW50ZW50RXJyb3I7XG59XG5cbmV4cG9ydCB0eXBlIHsgRGVjb2RlZFRyYW5zYWN0aW9uIH0gZnJvbSAnLi90cmFuc2FjdGlvbi90eXBlcyc7XG5cbmV4cG9ydCB0eXBlIFJvb3RXYWxsZXRLZXlzID0gYml0Z28uUm9vdFdhbGxldEtleXM7XG5cbmV4cG9ydCB0eXBlIFV0eG9Db2luU3BlY2lmaWMgPSBBZGRyZXNzQ29pblNwZWNpZmljIHwgRGVzY3JpcHRvckFkZHJlc3NDb2luU3BlY2lmaWM7XG5cbmV4cG9ydCBpbnRlcmZhY2UgVmVyaWZ5QWRkcmVzc09wdGlvbnM8VENvaW5TcGVjaWZpYyBleHRlbmRzIFV0eG9Db2luU3BlY2lmaWM+IGV4dGVuZHMgQmFzZVZlcmlmeUFkZHJlc3NPcHRpb25zIHtcbiAgY2hhaW4/OiBudW1iZXI7XG4gIGluZGV4OiBudW1iZXI7XG4gIGNvaW5TcGVjaWZpYz86IFRDb2luU3BlY2lmaWM7XG59XG5cbmV4cG9ydCB0eXBlIEJpcDMyMk1lc3NhZ2UgPSB7XG4gIGFkZHJlc3M6IHN0cmluZztcbiAgbWVzc2FnZTogc3RyaW5nO1xufTtcblxuZXhwb3J0IGludGVyZmFjZSBUcmFuc2FjdGlvbkluZm88VE51bWJlciBleHRlbmRzIG51bWJlciB8IGJpZ2ludCA9IG51bWJlcj4ge1xuICAvKiogTWFwcyB0eGlkIHRvIHR4aGV4LiBSZXF1aXJlZCBmb3Igb2ZmbGluZSBzaWduaW5nLiAqL1xuICB0eEhleGVzPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgY2hhbmdlQWRkcmVzc2VzPzogc3RyaW5nW107XG4gIC8qKiBwc2J0IGRvZXMgbm90IHJlcXVpcmUgdW5zcGVudHMuICovXG4gIHVuc3BlbnRzPzogVW5zcGVudDxUTnVtYmVyPltdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEV4cGxhaW5UcmFuc2FjdGlvbk9wdGlvbnM8VE51bWJlciBleHRlbmRzIG51bWJlciB8IGJpZ2ludCA9IG51bWJlcj4ge1xuICB0eEhleDogc3RyaW5nO1xuICB0eEluZm8/OiBUcmFuc2FjdGlvbkluZm88VE51bWJlcj47XG4gIGZlZUluZm8/OiBzdHJpbmc7XG4gIHB1YnM/OiBUcmlwbGU8c3RyaW5nPjtcbiAgY3VzdG9tQ2hhbmdlWHB1YnM/OiBUcmlwbGU8c3RyaW5nPjtcbiAgZGVjb2RlV2l0aD86IFNka0JhY2tlbmQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGVjb3JhdGVkRXhwbGFpblRyYW5zYWN0aW9uT3B0aW9uczxUTnVtYmVyIGV4dGVuZHMgbnVtYmVyIHwgYmlnaW50ID0gbnVtYmVyPlxuICBleHRlbmRzIEV4cGxhaW5UcmFuc2FjdGlvbk9wdGlvbnM8VE51bWJlcj4ge1xuICBjaGFuZ2VJbmZvPzogeyBhZGRyZXNzOiBzdHJpbmc7IGNoYWluOiBudW1iZXI7IGluZGV4OiBudW1iZXIgfVtdO1xufVxuXG5leHBvcnQgdHlwZSBVdHhvTmV0d29yayA9IHV0eG9saWIuTmV0d29yaztcblxuZXhwb3J0IGludGVyZmFjZSBUcmFuc2FjdGlvblByZWJ1aWxkPFROdW1iZXIgZXh0ZW5kcyBudW1iZXIgfCBiaWdpbnQgPSBudW1iZXI+IGV4dGVuZHMgQmFzZVRyYW5zYWN0aW9uUHJlYnVpbGQge1xuICB0eEluZm8/OiBUcmFuc2FjdGlvbkluZm88VE51bWJlcj47XG4gIGJsb2NrSGVpZ2h0PzogbnVtYmVyO1xuICBkZWNvZGVXaXRoPzogU2RrQmFja2VuZDtcbiAgLyoqXG4gICAqIFBTQlQtbGl0ZSBoZXggcHJlc2VudCBvbmx5IGluIHBlbmRpbmcgYXBwcm92YWwgZmxvd3MsIHdoZXJlIGFub3RoZXIgdXNlcidzIHNlbmQgZml4ZWQgdGhlIGZvcm1hdC5cbiAgICogTm90IHNldCBpbiByZWd1bGFyIC90eC9idWlsZCByZXNwb25zZXMgKHdoZXJlIHRoZSBjYWxsZXIgY29udHJvbHMgdGhlIGJ1aWxkIHBhcmFtZXRlcnMpLlxuICAgKiBQcmVmZXJyZWQgb3ZlciB0eEhleCB3aGVuIHByZXNlbnQsIGFzIGl0IGNhcnJpZXMgcmljaGVyIGRhdGEgKG5vbldpdG5lc3NVdHhvLCByZWRlZW1TY3JpcHQsIEJJUC0zMiBwYXRocykuXG4gICAqL1xuICB0eEhleFBzYnQ/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVHJhbnNhY3Rpb25QYXJhbXMgZXh0ZW5kcyBCYXNlVHJhbnNhY3Rpb25QYXJhbXMge1xuICB3YWxsZXRQYXNzcGhyYXNlPzogc3RyaW5nO1xuICBhbGxvd0V4dGVybmFsQ2hhbmdlQWRkcmVzcz86IGJvb2xlYW47XG4gIGNoYW5nZUFkZHJlc3M/OiBzdHJpbmc7XG4gIHJiZlR4SWRzPzogc3RyaW5nW107XG4gIC8qKiBQYXJhbWV0ZXJzIGZvciBicmlkZ2luZyBpbnRlbnRzIChlLmcuIEJUQyAtPiBzQlRDIHBlZy1pbiksIHByZXNlbnQgd2hlbiBgdHlwZSA9PT0gJ2JyaWRnaW5nJ2AuICovXG4gIGJyaWRnaW5nUGFyYW1zPzogQnJpZGdpbmdQYXJhbXM7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUGFyc2VUcmFuc2FjdGlvbk9wdGlvbnM8VE51bWJlciBleHRlbmRzIG51bWJlciB8IGJpZ2ludCA9IG51bWJlcj4gZXh0ZW5kcyBCYXNlUGFyc2VUcmFuc2FjdGlvbk9wdGlvbnMge1xuICB0eFBhcmFtczogVHJhbnNhY3Rpb25QYXJhbXM7XG4gIHR4UHJlYnVpbGQ6IFRyYW5zYWN0aW9uUHJlYnVpbGQ8VE51bWJlcj47XG4gIHdhbGxldDogVXR4b1dhbGxldDtcbiAgdmVyaWZpY2F0aW9uPzogVmVyaWZpY2F0aW9uT3B0aW9ucztcbiAgcmVxSWQ/OiBJUmVxdWVzdFRyYWNlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBHZW5lcmF0ZUFkZHJlc3NPcHRpb25zIHtcbiAgYWRkcmVzc1R5cGU/OiBTY3JpcHRUeXBlMk9mMztcbiAgdGhyZXNob2xkPzogbnVtYmVyO1xuICBjaGFpbj86IG51bWJlcjtcbiAgaW5kZXg/OiBudW1iZXI7XG4gIHNlZ3dpdD86IGJvb2xlYW47XG4gIGJlY2gzMj86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgR2VuZXJhdGVGaXhlZFNjcmlwdEFkZHJlc3NPcHRpb25zIGV4dGVuZHMgR2VuZXJhdGVBZGRyZXNzT3B0aW9ucyB7XG4gIGZvcm1hdD86IENyZWF0ZUFkZHJlc3NGb3JtYXQ7XG4gIGtleWNoYWluczoge1xuICAgIHB1Yjogc3RyaW5nO1xuICAgIGFzcEtleUlkPzogc3RyaW5nO1xuICB9W107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQWRkcmVzc0RldGFpbHMge1xuICBhZGRyZXNzOiBzdHJpbmc7XG4gIGNoYWluOiBudW1iZXI7XG4gIGluZGV4OiBudW1iZXI7XG4gIGNvaW46IHN0cmluZztcbiAgY29pblNwZWNpZmljOiBBZGRyZXNzQ29pblNwZWNpZmljIHwgRGVzY3JpcHRvckFkZHJlc3NDb2luU3BlY2lmaWM7XG4gIGFkZHJlc3NUeXBlPzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIERlc2NyaXB0b3JBZGRyZXNzQ29pblNwZWNpZmljIGV4dGVuZHMgQWRkcmVzc0NvaW5TcGVjaWZpYyB7XG4gIGRlc2NyaXB0b3JOYW1lOiBzdHJpbmc7XG4gIGRlc2NyaXB0b3JDaGVja3N1bTogc3RyaW5nO1xufVxuXG50eXBlIFV0eG9CYXNlU2lnblRyYW5zYWN0aW9uT3B0aW9uczxUTnVtYmVyIGV4dGVuZHMgbnVtYmVyIHwgYmlnaW50ID0gbnVtYmVyPiA9IEJhc2VTaWduVHJhbnNhY3Rpb25PcHRpb25zICYge1xuICAvKiogVHJhbnNhY3Rpb24gcHJlYnVpbGQgZnJvbSBiaXRnbyBzZXJ2ZXIgKi9cbiAgdHhQcmVidWlsZDoge1xuICAgIC8qKlxuICAgICAqIHdhbGxldElkIGlzIHJlcXVpcmVkIGluIGZvbGxvd2luZyAyIHNjZW5hcmlvcy5cbiAgICAgKiAxLiBFeHRlcm5hbCBzaWduZXIgZXhwcmVzcyBtb2RlIGlzIHVzZWQuXG4gICAgICogMi4gYml0Z28gTXVTaWcyIG5vbmNlIGlzIHJlcXVlc3RlZFxuICAgICAqL1xuICAgIHdhbGxldElkPzogc3RyaW5nO1xuICAgIHR4SGV4OiBzdHJpbmc7XG4gICAgdHhJbmZvPzogVHJhbnNhY3Rpb25JbmZvPFROdW1iZXI+O1xuICAgIGRlY29kZVdpdGg/OiBTZGtCYWNrZW5kO1xuICB9O1xuICAvKiogeHB1YnMgdHJpcGxlIGZvciB3YWxsZXQgKHVzZXIsIGJhY2t1cCwgYml0Z28pLiBSZXF1aXJlZCBvbmx5IHdoZW4gdHhQcmVidWlsZC50eEhleCBpcyBub3QgYSBQU0JUICovXG4gIHB1YnM/OiBUcmlwbGU8c3RyaW5nPjtcbiAgLyoqIHhwdWIgZm9yIGNvc2lnbmVyIChkZWZhdWx0cyB0byBiaXRnbykgKi9cbiAgY29zaWduZXJQdWI/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBXaGVuIHRydWUsIGNyZWF0ZXMgZnVsbC1zaWduZWQgdHJhbnNhY3Rpb24gd2l0aG91dCBwbGFjZWhvbGRlciBzaWduYXR1cmVzLlxuICAgKiBXaGVuIGZhbHNlLCBjcmVhdGVzIGhhbGYtc2lnbmVkIHRyYW5zYWN0aW9uIHdpdGggcGxhY2Vob2xkZXIgc2lnbmF0dXJlcy5cbiAgICovXG4gIGlzTGFzdFNpZ25hdHVyZT86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBJZiB0cnVlLCBhbGxvd3Mgc2lnbmluZyBhIG5vbi1zZWd3aXQgaW5wdXQgd2l0aCBhIHdpdG5lc3NVdHhvIGluc3RlYWQgcmVxdWlyaW5nIGEgcHJldmlvdXNcbiAgICogdHJhbnNhY3Rpb24gKG5vbldpdG5lc3NVdHhvKVxuICAgKi9cbiAgYWxsb3dOb25TZWd3aXRTaWduaW5nV2l0aG91dFByZXZUeD86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBXaGVuIHRydWUsIHRoZSBzaWduZWQgdHJhbnNhY3Rpb24gd2lsbCBiZSBjb252ZXJ0ZWQgZnJvbSBQU0JUIHRvIGxlZ2FjeSBmb3JtYXQgYmVmb3JlIHJldHVybmluZy5cbiAgICogU2V0IGF1dG9tYXRpY2FsbHkgYnkgcHJlc2lnblRyYW5zYWN0aW9uKCkgd2hlbiB0aGUgY2FsbGVyIGV4cGxpY2l0bHkgcmVxdWVzdGVkIHR4Rm9ybWF0OiAnbGVnYWN5Jy5cbiAgICovXG4gIHJldHVybkxlZ2FjeUZvcm1hdD86IGJvb2xlYW47XG4gIHdhbGxldD86IFV0eG9XYWxsZXQ7XG4gIC8qKlxuICAgKiBXaGVuIHRydWUgKGRlZmF1bHQpLCBleHRyYWN0IGZpbmFsaXplZCBQU0JUIHRvIGxlZ2FjeSB0cmFuc2FjdGlvbiBmb3JtYXQuXG4gICAqIFdoZW4gZmFsc2UsIHJldHVybiBmaW5hbGl6ZWQgUFNCVC4gVXNlZnVsIGZvciB0ZXN0aW5nIHRvIGtlZXAgdHJhbnNhY3Rpb25zIGluIFBTQlQgZm9ybWF0LlxuICAgKi9cbiAgZXh0cmFjdFRyYW5zYWN0aW9uPzogYm9vbGVhbjtcbiAgLyoqIFdoZW4gdHJ1ZSwgZW1iZWRzIFdBU00tVVRYTyB2ZXJzaW9uIG1ldGFkYXRhIGludG8gdGhlIHNpZ25lZCBQU0JULiBEZWZhdWx0cyB0byBmYWxzZS4gKi9cbiAgd3JpdGVTaWduZWRXaXRoPzogYm9vbGVhbjtcbn07XG5cbmV4cG9ydCB0eXBlIFNpZ25UcmFuc2FjdGlvbk9wdGlvbnM8VE51bWJlciBleHRlbmRzIG51bWJlciB8IGJpZ2ludCA9IG51bWJlcj4gPSBVdHhvQmFzZVNpZ25UcmFuc2FjdGlvbk9wdGlvbnM8VE51bWJlcj4gJlxuICAoXG4gICAgfCB7XG4gICAgICAgIHBydjogc3RyaW5nO1xuICAgICAgICBzaWduaW5nU3RlcD86ICdzaWduZXJOb25jZScgfCAnc2lnbmVyU2lnbmF0dXJlJztcbiAgICAgIH1cbiAgICB8IHtcbiAgICAgICAgc2lnbmluZ1N0ZXA6ICdjb3NpZ25lck5vbmNlJztcbiAgICAgIH1cbiAgKTtcblxuZXhwb3J0IGludGVyZmFjZSBNdWx0aVNpZ0FkZHJlc3Mge1xuICBvdXRwdXRTY3JpcHQ6IEJ1ZmZlcjtcbiAgcmVkZWVtU2NyaXB0PzogQnVmZmVyO1xuICB3aXRuZXNzU2NyaXB0PzogQnVmZmVyO1xuICBhZGRyZXNzOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVjb3ZlckZyb21Xcm9uZ0NoYWluT3B0aW9ucyB7XG4gIHR4aWQ6IHN0cmluZztcbiAgcmVjb3ZlcnlBZGRyZXNzOiBzdHJpbmc7XG4gIHdhbGxldDogc3RyaW5nO1xuICB3YWxsZXRQYXNzcGhyYXNlPzogc3RyaW5nO1xuICB4cHJ2Pzogc3RyaW5nO1xuICBhcGlLZXk/OiBzdHJpbmc7XG4gIC8qKiBAZGVwcmVjYXRlZCAqL1xuICBjb2luPzogQWJzdHJhY3RVdHhvQ29pbjtcbiAgcmVjb3ZlcnlDb2luPzogQWJzdHJhY3RVdHhvQ29pbjtcbiAgc2lnbmVkPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBWZXJpZnlLZXlTaWduYXR1cmVzT3B0aW9ucyB7XG4gIHVzZXJLZXljaGFpbjogeyBwdWI/OiBzdHJpbmcgfTtcbiAga2V5Y2hhaW5Ub1ZlcmlmeTogeyBwdWI/OiBzdHJpbmcgfTtcbiAga2V5U2lnbmF0dXJlOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVmVyaWZ5VXNlclB1YmxpY0tleU9wdGlvbnMge1xuICB1c2VyS2V5Y2hhaW4/OiBVdHhvS2V5Y2hhaW47XG4gIGRpc2FibGVOZXR3b3JraW5nOiBib29sZWFuO1xuICB0eFBhcmFtczogVHJhbnNhY3Rpb25QYXJhbXM7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVmVyaWZ5VHJhbnNhY3Rpb25PcHRpb25zPFROdW1iZXIgZXh0ZW5kcyBudW1iZXIgfCBiaWdpbnQgPSBudW1iZXI+XG4gIGV4dGVuZHMgQmFzZVZlcmlmeVRyYW5zYWN0aW9uT3B0aW9ucyB7XG4gIHR4UHJlYnVpbGQ6IFRyYW5zYWN0aW9uUHJlYnVpbGQ8VE51bWJlcj47XG4gIHR4UGFyYW1zOiBUcmFuc2FjdGlvblBhcmFtcztcbiAgd2FsbGV0OiBVdHhvV2FsbGV0O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNpZ25Qc2J0UmVxdWVzdCB7XG4gIHBzYnQ6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTaWduUHNidFJlc3BvbnNlIHtcbiAgcHNidDogc3RyaW5nO1xufVxuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQWJzdHJhY3RVdHhvQ29pblxuICBleHRlbmRzIEJhc2VDb2luXG4gIGltcGxlbWVudHMgTXVzaWcyUGFydGljaXBhbnQ8dXR4b2xpYi5iaXRnby5VdHhvUHNidD4sIE11c2lnMlBhcnRpY2lwYW50PGZpeGVkU2NyaXB0V2FsbGV0LkJpdEdvUHNidD5cbntcbiAgYWJzdHJhY3QgbmFtZTogVXR4b0NvaW5OYW1lO1xuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHdoZXRoZXIgdGhpcyBjb2luIGlzIGEgbWFpbm5ldCBjb2luLlxuICAgKiBEZWZhdWx0IGltcGxlbWVudGF0aW9uIHVzZXMgdGhlIG5hbWUgcHJvcGVydHkuXG4gICAqIENhbiBiZSBvdmVycmlkZGVuIGJ5IHN1YmNsYXNzZXMuXG4gICAqL1xuICBwcm90ZWN0ZWQgaXNNYWlubmV0KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBpc01haW5uZXRDb2luKHRoaXMubmFtZSk7XG4gIH1cblxuICBwdWJsaWMgcmVhZG9ubHkgYW1vdW50VHlwZTogJ251bWJlcicgfCAnYmlnaW50JztcblxuICBwcm90ZWN0ZWQgc3VwcG9ydGVkVHhGb3JtYXRzOiB7IHBzYnQ6IGJvb2xlYW47IGxlZ2FjeTogYm9vbGVhbiB9ID0ge1xuICAgIHBzYnQ6IHRydWUsXG4gICAgbGVnYWN5OiB0aGlzLmdldENoYWluKCkgPT09ICdidGMnLFxuICB9O1xuXG4gIHByb3RlY3RlZCBzdXBwb3J0ZWRTZGtCYWNrZW5kczogeyB1dHhvbGliOiBib29sZWFuOyAnd2FzbS11dHhvJzogYm9vbGVhbiB9ID0ge1xuICAgIHV0eG9saWI6IHRoaXMuZ2V0Q2hhaW4oKSA9PT0gJ2J0YycsXG4gICAgJ3dhc20tdXR4byc6IHRydWUsXG4gIH07XG5cbiAgcHJvdGVjdGVkIGNvbnN0cnVjdG9yKGJpdGdvOiBCaXRHb0Jhc2UsIGFtb3VudFR5cGU6ICdudW1iZXInIHwgJ2JpZ2ludCcgPSAnbnVtYmVyJykge1xuICAgIHN1cGVyKGJpdGdvKTtcbiAgICB0aGlzLmFtb3VudFR5cGUgPSBhbW91bnRUeXBlO1xuICB9XG5cbiAgZGVmYXVsdFNka0JhY2tlbmQ6IFNka0JhY2tlbmQgPSAnd2FzbS11dHhvJztcblxuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgLSB3aWxsIGJlIHJlbW92ZWQgd2hlbiB3ZSBkcm9wIHN1cHBvcnQgZm9yIHV0eG9saWJcbiAgICogVXNlIGBuYW1lYCBwcm9wZXJ0eSBpbnN0ZWFkLlxuICAgKi9cbiAgZ2V0IG5ldHdvcmsoKTogdXR4b2xpYi5OZXR3b3JrIHtcbiAgICByZXR1cm4gZ2V0TmV0d29ya0Zyb21Db2luTmFtZSh0aGlzLm5hbWUpO1xuICB9XG5cbiAgZ2V0Q2hhaW4oKTogVXR4b0NvaW5OYW1lIHtcbiAgICByZXR1cm4gdGhpcy5uYW1lO1xuICB9XG5cbiAgZ2V0RmFtaWx5KCk6IFV0eG9Db2luTmFtZU1haW5uZXQge1xuICAgIHJldHVybiBnZXRNYWlubmV0Q29pbk5hbWUodGhpcy5uYW1lKTtcbiAgfVxuXG4gIGdldEZ1bGxOYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGdldEZ1bGxOYW1lRnJvbUNvaW5OYW1lKHRoaXMubmFtZSk7XG4gIH1cblxuICAvKiogSW5kaWNhdGVzIHdoZXRoZXIgdGhlIGNvaW4gc3VwcG9ydHMgYSBibG9jayB0YXJnZXQgKi9cbiAgc3VwcG9ydHNCbG9ja1RhcmdldCgpOiBib29sZWFuIHtcbiAgICAvLyBGSVhNRTogdGhlIFNESyBkb2VzIG5vdCBzZWVtIHRvIHVzZSB0aGlzIGFueXdoZXJlIHNvIGl0IGlzIHVuY2xlYXIgd2hhdCB0aGUgcHVycG9zZSBvZiB0aGlzIG1ldGhvZCBpc1xuICAgIHN3aXRjaCAoZ2V0TWFpbm5ldCh0aGlzLm5ldHdvcmspKSB7XG4gICAgICBjYXNlIHV0eG9saWIubmV0d29ya3MuYml0Y29pbjpcbiAgICAgIGNhc2UgdXR4b2xpYi5uZXR3b3Jrcy5kb2dlY29pbjpcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgc3dlZXBXaXRoU2VuZE1hbnkoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvKiogQGRlcHJlY2F0ZWQgKi9cbiAgc3RhdGljIGdldCB2YWxpZEFkZHJlc3NUeXBlcygpOiBTY3JpcHRUeXBlMk9mM1tdIHtcbiAgICByZXR1cm4gWy4uLm91dHB1dFNjcmlwdHMuc2NyaXB0VHlwZXMyT2YzXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBmYWN0b3IgYmV0d2VlbiB0aGUgYmFzZSB1bml0IGFuZCBpdHMgc21hbGxlc3Qgc3ViZGl2aXNvblxuICAgKiBAcmV0dXJuIHtudW1iZXJ9XG4gICAqL1xuICBnZXRCYXNlRmFjdG9yKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIDFlODtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiBhbiBhZGRyZXNzIGlzIHZhbGlkXG4gICAqIEBwYXJhbSBhZGRyZXNzXG4gICAqIEBwYXJhbSBwYXJhbVxuICAgKi9cbiAgaXNWYWxpZEFkZHJlc3MoXG4gICAgYWRkcmVzczogc3RyaW5nLFxuICAgIHBhcmFtPzogeyBhbnlGb3JtYXQ/OiBib29sZWFuOyBhbGxvd0xpZ2h0bmluZz86IGJvb2xlYW4gfSB8IC8qIGxlZ2FjeSBwYXJhbWV0ZXIgKi8gYm9vbGVhblxuICApOiBib29sZWFuIHtcbiAgICBpZiAodHlwZW9mIHBhcmFtID09PSAnYm9vbGVhbicgJiYgcGFyYW0pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignZGVwcmVjYXRlZCcpO1xuICAgIH1cblxuICAgIGNvbnN0IGFsbG93TGlnaHRuaW5nID0gKHBhcmFtIGFzIHsgYWxsb3dMaWdodG5pbmc/OiBib29sZWFuIH0gfCB1bmRlZmluZWQpPy5hbGxvd0xpZ2h0bmluZyA/PyBmYWxzZTtcbiAgICBpZiAoYWxsb3dMaWdodG5pbmcpIHtcbiAgICAgIGlmICgvXigwMnwwMylbMC05YS1mQS1GXXs2NH0kLy50ZXN0KGFkZHJlc3MpKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgaWYgKGlzQm9sdDExSW52b2ljZShhZGRyZXNzKSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBCeSBkZWZhdWx0LCBhbGxvdyBhbGwgYWRkcmVzcyBmb3JtYXRzLlxuICAgIC8vIEF0IHRoZSB0aW1lIG9mIHdyaXRpbmcsIHRoZSBvbmx5IGFkZGl0aW9uYWwgYWRkcmVzcyBmb3JtYXQgaXMgYmNoIGNhc2hhZGRyLlxuICAgIGNvbnN0IGFueUZvcm1hdCA9IChwYXJhbSBhcyB7IGFueUZvcm1hdDogYm9vbGVhbiB9IHwgdW5kZWZpbmVkKT8uYW55Rm9ybWF0ID8/IHRydWU7XG4gICAgdHJ5IHtcbiAgICAgIC8vIEZpbmQgb3V0IGlmIHRoZSBhZGRyZXNzIGlzIHZhbGlkIGZvciBhbnkgZm9ybWF0LiBUcmllcyBhbGwgc3VwcG9ydGVkIGZvcm1hdHMgYnkgZGVmYXVsdC5cbiAgICAgIC8vIFRocm93cyBpZiBhZGRyZXNzIGNhbm5vdCBiZSBkZWNvZGVkIHdpdGggYW55IGZvcm1hdC5cbiAgICAgIGNvbnN0IFtmb3JtYXQsIHNjcmlwdF0gPSB1dHhvbGliLmFkZHJlc3NGb3JtYXQudG9PdXRwdXRTY3JpcHRBbmRGb3JtYXQoYWRkcmVzcywgdGhpcy5uZXR3b3JrKTtcbiAgICAgIC8vIHVubGVzcyBhbnlGb3JtYXQgaXMgc2V0LCBvbmx5ICdkZWZhdWx0JyBpcyBhbGxvd2VkLlxuICAgICAgaWYgKCFhbnlGb3JtYXQgJiYgZm9ybWF0ICE9PSAnZGVmYXVsdCcpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgLy8gbWFrZSBzdXJlIHRoYXQgYWRkcmVzcyBpcyBpbiBub3JtYWwgcmVwcmVzZW50YXRpb24gZm9yIGdpdmVuIGZvcm1hdC5cbiAgICAgIHJldHVybiBhZGRyZXNzID09PSB1dHhvbGliLmFkZHJlc3NGb3JtYXQuZnJvbU91dHB1dFNjcmlwdFdpdGhGb3JtYXQoc2NyaXB0LCBmb3JtYXQsIHRoaXMubmV0d29yayk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gYm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgaW5wdXQgaXMgdmFsaWQgcHVibGljIGtleSBmb3IgdGhlIGNvaW4uXG4gICAqXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBwdWIgdGhlIHB1YiB0byBiZSBjaGVja2VkXG4gICAqIEByZXR1cm5zIHtCb29sZWFufSBpcyBpdCB2YWxpZD9cbiAgICovXG4gIGlzVmFsaWRQdWIocHViOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIEJJUDMyLmZyb21CYXNlNTgocHViKS5pc05ldXRlcmVkKCk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBUaGlzIGlzIGNhbGxlZCBiZWZvcmUgY3JhZnRpbmcgdGhlIEhUVFAgcmVxdWVzdCB0byB0aGUgQml0R28gQVBJLlxuICAgKiBJdCBjb252ZXJ0cyB0aGUgcmVjaXBpZW50IGFkZHJlc3MgYHNjcmlwdFB1YktleTouLi5gIHRvIHsgc2NyaXB0OiBzdHJpbmcgfSB8IHsgYWRkcmVzczogc3RyaW5nIH0uXG4gICAqL1xuICBvdmVycmlkZSBwcmVwcm9jZXNzQnVpbGRQYXJhbXMocGFyYW1zOiBSZWNvcmQ8c3RyaW5nLCBhbnk+KTogUmVjb3JkPHN0cmluZywgYW55PiB7XG4gICAgaWYgKHBhcmFtcy5yZWNpcGllbnRzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHBhcmFtcy5yZWNpcGllbnRzID1cbiAgICAgICAgcGFyYW1zLnJlY2lwaWVudHMgaW5zdGFuY2VvZiBBcnJheVxuICAgICAgICAgID8gcGFyYW1zPy5yZWNpcGllbnRzPy5tYXAoKHJlY2lwaWVudCkgPT4ge1xuICAgICAgICAgICAgICBjb25zdCB7IGFkZHJlc3MsIC4uLnJlc3QgfSA9IHJlY2lwaWVudDtcbiAgICAgICAgICAgICAgaWYgKGFkZHJlc3MgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHJldHVybiByZWNpcGllbnQ7IC8vIEFscmVhZHkgeyBzY3JpcHQsIGFtb3VudCB9IOKAlCBwYXNzIHRocm91Z2ggdW5jaGFuZ2VkXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcmV0dXJuIHsgLi4ucmVzdCwgLi4uZnJvbUV4dGVuZGVkQWRkcmVzc0Zvcm1hdChhZGRyZXNzKSB9O1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICA6IHBhcmFtcy5yZWNpcGllbnRzO1xuICAgIH1cblxuICAgIHJldHVybiBwYXJhbXM7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBsYXRlc3QgYmxvY2sgaGVpZ2h0XG4gICAqIEBwYXJhbSByZXFJZFxuICAgKi9cbiAgYXN5bmMgZ2V0TGF0ZXN0QmxvY2tIZWlnaHQocmVxSWQ/OiBSZXF1ZXN0VHJhY2VyKTogUHJvbWlzZTxudW1iZXI+IHtcbiAgICBpZiAocmVxSWQpIHtcbiAgICAgIHRoaXMuYml0Z28uc2V0UmVxdWVzdFRyYWNlcihyZXFJZCk7XG4gICAgfVxuICAgIGNvbnN0IGNoYWluaGVhZCA9IGF3YWl0IHRoaXMuYml0Z28uZ2V0KHRoaXMudXJsKCcvcHVibGljL2Jsb2NrL2xhdGVzdCcpKS5yZXN1bHQoKTtcbiAgICByZXR1cm4gKGNoYWluaGVhZCBhcyBhbnkpLmhlaWdodDtcbiAgfVxuXG4gIGNoZWNrUmVjaXBpZW50KHJlY2lwaWVudDogeyBhZGRyZXNzPzogc3RyaW5nOyBhbW91bnQ6IG51bWJlciB8IHN0cmluZyB9KTogdm9pZCB7XG4gICAgYXNzZXJ0VmFsaWRUcmFuc2FjdGlvblJlY2lwaWVudChyZWNpcGllbnQpO1xuICAgIGlmIChyZWNpcGllbnQuYWRkcmVzcyAmJiAhaXNTY3JpcHRSZWNpcGllbnQocmVjaXBpZW50LmFkZHJlc3MpKSB7XG4gICAgICBzdXBlci5jaGVja1JlY2lwaWVudCh7IGFkZHJlc3M6IHJlY2lwaWVudC5hZGRyZXNzLCBhbW91bnQ6IHJlY2lwaWVudC5hbW91bnQgfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJ1biBjdXN0b20gY29pbiBsb2dpYyBhZnRlciBhIHRyYW5zYWN0aW9uIHByZWJ1aWxkIGhhcyBiZWVuIHJlY2VpdmVkIGZyb20gQml0R29cbiAgICogQHBhcmFtIHByZWJ1aWxkXG4gICAqL1xuICBhc3luYyBwb3N0UHJvY2Vzc1ByZWJ1aWxkPFROdW1iZXIgZXh0ZW5kcyBudW1iZXIgfCBiaWdpbnQ+KFxuICAgIHByZWJ1aWxkOiBUcmFuc2FjdGlvblByZWJ1aWxkPFROdW1iZXI+XG4gICk6IFByb21pc2U8VHJhbnNhY3Rpb25QcmVidWlsZDxUTnVtYmVyPj4ge1xuICAgIGNvbnN0IHR4ID0gdGhpcy5kZWNvZGVUcmFuc2FjdGlvbkZyb21QcmVidWlsZChwcmVidWlsZCk7XG4gICAgaWYgKF8uaXNVbmRlZmluZWQocHJlYnVpbGQuYmxvY2tIZWlnaHQpKSB7XG4gICAgICBwcmVidWlsZC5ibG9ja0hlaWdodCA9IChhd2FpdCB0aGlzLmdldExhdGVzdEJsb2NrSGVpZ2h0KCkpIGFzIG51bWJlcjtcbiAgICB9XG4gICAgcmV0dXJuIF8uZXh0ZW5kKHt9LCBwcmVidWlsZCwgeyB0eEhleDogZW5jb2RlVHJhbnNhY3Rpb24odHgpLnRvU3RyaW5nKCdoZXgnKSB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCAtIHdpbGwgYmUgcmVtb3ZlZCB3aGVuIHdlIGRyb3Agc3VwcG9ydCBmb3IgdXR4b2xpYlxuICAgKiBEZXRlcm1pbmUgYW4gYWRkcmVzcycgdHlwZSBiYXNlZCBvbiBpdHMgd2l0bmVzcyBhbmQgcmVkZWVtIHNjcmlwdCBwcmVzZW5jZVxuICAgKiBAcGFyYW0gYWRkcmVzc0RldGFpbHNcbiAgICovXG4gIHN0YXRpYyBpbmZlckFkZHJlc3NUeXBlKGFkZHJlc3NEZXRhaWxzOiB7IGNoYWluOiBudW1iZXIgfSk6IFNjcmlwdFR5cGUyT2YzIHwgbnVsbCB7XG4gICAgcmV0dXJuIGlzQ2hhaW5Db2RlKGFkZHJlc3NEZXRhaWxzLmNoYWluKSA/IHNjcmlwdFR5cGVGb3JDaGFpbihhZGRyZXNzRGV0YWlscy5jaGFpbikgOiBudWxsO1xuICB9XG5cbiAgY3JlYXRlVHJhbnNhY3Rpb25Gcm9tSGV4PFROdW1iZXIgZXh0ZW5kcyBudW1iZXIgfCBiaWdpbnQgPSBudW1iZXI+KFxuICAgIGhleDogc3RyaW5nXG4gICk6IHV0eG9saWIuYml0Z28uVXR4b1RyYW5zYWN0aW9uPFROdW1iZXI+IHtcbiAgICByZXR1cm4gdXR4b2xpYi5iaXRnby5jcmVhdGVUcmFuc2FjdGlvbkZyb21IZXg8VE51bWJlcj4oaGV4LCB0aGlzLm5ldHdvcmssIHRoaXMuYW1vdW50VHlwZSk7XG4gIH1cblxuICBkZWNvZGVUcmFuc2FjdGlvbjxUTnVtYmVyIGV4dGVuZHMgbnVtYmVyIHwgYmlnaW50PihcbiAgICBpbnB1dDogQnVmZmVyIHwgc3RyaW5nLFxuICAgIGRlY29kZVdpdGg6IFNka0JhY2tlbmQgPSB0aGlzLmRlZmF1bHRTZGtCYWNrZW5kXG4gICk6IERlY29kZWRUcmFuc2FjdGlvbjxUTnVtYmVyPiB7XG4gICAgaWYgKHR5cGVvZiBpbnB1dCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGNvbnN0IGJ1ZmZlciA9IHN0cmluZ1RvQnVmZmVyVHJ5Rm9ybWF0cyhpbnB1dCwgWydoZXgnLCAnYmFzZTY0J10pO1xuICAgICAgcmV0dXJuIHRoaXMuZGVjb2RlVHJhbnNhY3Rpb24oYnVmZmVyLCBkZWNvZGVXaXRoKTtcbiAgICB9XG5cbiAgICBpZiAodXR4b2xpYi5iaXRnby5pc1BzYnQoaW5wdXQpKSB7XG4gICAgICBpZiAodGhpcy5zdXBwb3J0ZWRTZGtCYWNrZW5kc1tkZWNvZGVXaXRoXSAhPT0gdHJ1ZSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFNESyBzdXBwb3J0IGZvciBkZWNvZGVXaXRoPSR7ZGVjb2RlV2l0aH0gaXMgbm90IGF2YWlsYWJsZSBvbiB0aGlzIGVudmlyb25tZW50LmApO1xuICAgICAgfVxuXG4gICAgICBpZiAoIXRoaXMuc3VwcG9ydGVkVHhGb3JtYXRzLnBzYnQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yRGVwcmVjYXRlZFR4Rm9ybWF0KCdwc2J0Jyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gZGVjb2RlUHNidFdpdGgoaW5wdXQsIHRoaXMubmFtZSwgZGVjb2RlV2l0aCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIExlZ2FjeSBmb3JtYXQgdHJhbnNhY3Rpb25zIGFyZSBkZXByZWNhdGVkLiBUaGlzIHdpbGwgYmUgYW4gdW5jb25kaXRpb25hbCBlcnJvciBpbiB0aGUgZnV0dXJlLlxuICAgICAgaWYgKCF0aGlzLnN1cHBvcnRlZFR4Rm9ybWF0cy5sZWdhY3kpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yRGVwcmVjYXRlZFR4Rm9ybWF0KCdsZWdhY3knKTtcbiAgICAgIH1cbiAgICAgIGlmIChkZWNvZGVXaXRoICE9PSAndXR4b2xpYicpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcigncmVjZWl2ZWQgZGVjb2RlV2l0aCBoaW50ICVzLCBpZ25vcmluZyBmb3IgbGVnYWN5IHRyYW5zYWN0aW9uJywgZGVjb2RlV2l0aCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gdXR4b2xpYi5iaXRnby5jcmVhdGVUcmFuc2FjdGlvbkZyb21CdWZmZXIoaW5wdXQsIHRoaXMubmV0d29yaywge1xuICAgICAgICBhbW91bnRUeXBlOiB0aGlzLmFtb3VudFR5cGUsXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBkZWNvZGVUcmFuc2FjdGlvbkFzUHNidChpbnB1dDogQnVmZmVyIHwgc3RyaW5nKTogdXR4b2xpYi5iaXRnby5VdHhvUHNidCB8IGZpeGVkU2NyaXB0V2FsbGV0LkJpdEdvUHNidCB7XG4gICAgY29uc3QgZGVjb2RlZCA9IHRoaXMuZGVjb2RlVHJhbnNhY3Rpb24oaW5wdXQpO1xuICAgIGlmIChkZWNvZGVkIGluc3RhbmNlb2YgZml4ZWRTY3JpcHRXYWxsZXQuQml0R29Qc2J0IHx8IGRlY29kZWQgaW5zdGFuY2VvZiB1dHhvbGliLmJpdGdvLlV0eG9Qc2J0KSB7XG4gICAgICByZXR1cm4gZGVjb2RlZDtcbiAgICB9XG4gICAgdGhyb3cgbmV3IEVycm9yKCdleHBlY3RlZCBwc2J0IGJ1dCBnb3QgdHJhbnNhY3Rpb24nKTtcbiAgfVxuXG4gIGRlY29kZVRyYW5zYWN0aW9uRnJvbVByZWJ1aWxkPFROdW1iZXIgZXh0ZW5kcyBudW1iZXIgfCBiaWdpbnQ+KHByZWJ1aWxkOiB7XG4gICAgdHhIZXg/OiBzdHJpbmc7XG4gICAgdHhCYXNlNjQ/OiBzdHJpbmc7XG4gICAgLyoqIFNlZSBUcmFuc2FjdGlvblByZWJ1aWxkLnR4SGV4UHNidCDigJQgb25seSBwcmVzZW50IGluIHBlbmRpbmcgYXBwcm92YWwgZmxvd3MuICovXG4gICAgdHhIZXhQc2J0Pzogc3RyaW5nO1xuICAgIGRlY29kZVdpdGg/OiBzdHJpbmc7XG4gIH0pOiBEZWNvZGVkVHJhbnNhY3Rpb248VE51bWJlcj4ge1xuICAgIGNvbnN0IHN0cmluZyA9IHByZWJ1aWxkLnR4SGV4UHNidCA/PyBwcmVidWlsZC50eEhleCA/PyBwcmVidWlsZC50eEJhc2U2NDtcbiAgICBpZiAoIXN0cmluZykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdtaXNzaW5nIHJlcXVpcmVkIHR4SGV4IG9yIHR4QmFzZTY0IHByb3BlcnR5Jyk7XG4gICAgfVxuICAgIGxldCB7IGRlY29kZVdpdGggfSA9IHByZWJ1aWxkO1xuICAgIGlmIChkZWNvZGVXaXRoICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmICh0eXBlb2YgZGVjb2RlV2l0aCAhPT0gJ3N0cmluZycgfHwgIWlzU2RrQmFja2VuZChkZWNvZGVXaXRoKSkge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdkZWNvZGVXaXRoICVzIGlzIG5vdCBhIHZhbGlkIHZhbHVlLCB1c2luZyBkZWZhdWx0JywgZGVjb2RlV2l0aCk7XG4gICAgICAgIGRlY29kZVdpdGggPSB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmRlY29kZVRyYW5zYWN0aW9uKHN0cmluZywgZGVjb2RlV2l0aCk7XG4gIH1cblxuICAvKipcbiAgICogRXh0cmFjdCBhbmQgZmlsbCB0cmFuc2FjdGlvbiBkZXRhaWxzIHN1Y2ggYXMgaW50ZXJuYWwvY2hhbmdlIHNwZW5kLCBleHRlcm5hbCBzcGVuZCAoZXhwbGljaXQgdnMuIGltcGxpY2l0KSwgZXRjLlxuICAgKiBAcGFyYW0gcGFyYW1zXG4gICAqIEByZXR1cm5zIHsqfVxuICAgKi9cbiAgYXN5bmMgcGFyc2VUcmFuc2FjdGlvbjxUTnVtYmVyIGV4dGVuZHMgbnVtYmVyIHwgYmlnaW50ID0gbnVtYmVyPihcbiAgICBwYXJhbXM6IFBhcnNlVHJhbnNhY3Rpb25PcHRpb25zPFROdW1iZXI+XG4gICk6IFByb21pc2U8UGFyc2VkVHJhbnNhY3Rpb248VE51bWJlcj4+IHtcbiAgICByZXR1cm4gcGFyc2VUcmFuc2FjdGlvbih0aGlzLCBwYXJhbXMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkIC0gdXNlIGZ1bmN0aW9uIHZlcmlmeVVzZXJQdWJsaWNLZXkgaW5zdGVhZFxuICAgKi9cbiAgcHJvdGVjdGVkIHZlcmlmeVVzZXJQdWJsaWNLZXkocGFyYW1zOiBWZXJpZnlVc2VyUHVibGljS2V5T3B0aW9ucyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB2ZXJpZnlVc2VyUHVibGljS2V5KHRoaXMuYml0Z28sIHBhcmFtcyk7XG4gIH1cblxuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgLSB1c2UgZnVuY3Rpb24gdmVyaWZ5S2V5U2lnbmF0dXJlIGluc3RlYWRcbiAgICovXG4gIHB1YmxpYyB2ZXJpZnlLZXlTaWduYXR1cmUocGFyYW1zOiBWZXJpZnlLZXlTaWduYXR1cmVzT3B0aW9ucyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB2ZXJpZnlLZXlTaWduYXR1cmUocGFyYW1zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBWZXJpZnkgdGhhdCBhIHRyYW5zYWN0aW9uIHByZWJ1aWxkIGNvbXBsaWVzIHdpdGggdGhlIG9yaWdpbmFsIGludGVudGlvblxuICAgKlxuICAgKiBAcGFyYW0gcGFyYW1zXG4gICAqIEBwYXJhbSBwYXJhbXMudHhQYXJhbXMgcGFyYW1zIG9iamVjdCBwYXNzZWQgdG8gc2VuZFxuICAgKiBAcGFyYW0gcGFyYW1zLnR4UHJlYnVpbGQgcHJlYnVpbGQgb2JqZWN0IHJldHVybmVkIGJ5IHNlcnZlclxuICAgKiBAcGFyYW0gcGFyYW1zLnR4UHJlYnVpbGQudHhIZXggcHJlYnVpbHQgdHJhbnNhY3Rpb24ncyB0eEhleCBmb3JtXG4gICAqIEBwYXJhbSBwYXJhbXMud2FsbGV0IFdhbGxldCBvYmplY3QgdG8gb2J0YWluIGtleXMgdG8gdmVyaWZ5IGFnYWluc3RcbiAgICogQHBhcmFtIHBhcmFtcy52ZXJpZmljYXRpb24gT2JqZWN0IHNwZWNpZnlpbmcgc29tZSB2ZXJpZmljYXRpb24gcGFyYW1ldGVyc1xuICAgKiBAcGFyYW0gcGFyYW1zLnZlcmlmaWNhdGlvbi5kaXNhYmxlTmV0d29ya2luZyBEaXNhbGxvdyBmZXRjaGluZyBhbnkgZGF0YSBmcm9tIHRoZSBpbnRlcm5ldCBmb3IgdmVyaWZpY2F0aW9uIHB1cnBvc2VzXG4gICAqIEBwYXJhbSBwYXJhbXMudmVyaWZpY2F0aW9uLmtleWNoYWlucyBQYXNzIGtleWNoYWlucyBtYW51YWxseSByYXRoZXIgdGhhbiBmZXRjaGluZyB0aGVtIGJ5IGlkXG4gICAqIEBwYXJhbSBwYXJhbXMudmVyaWZpY2F0aW9uLmFkZHJlc3NlcyBBZGRyZXNzIGRldGFpbHMgdG8gcGFzcyBpbiBmb3Igb3V0LW9mLWJhbmQgdmVyaWZpY2F0aW9uXG4gICAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZlcmlmaWNhdGlvbiBwYXNzZXNcbiAgICogQHRocm93cyB7VHhJbnRlbnRNaXNtYXRjaEVycm9yfSBpZiB0cmFuc2FjdGlvbiB2YWxpZGF0aW9uIGZhaWxzXG4gICAqIEB0aHJvd3Mge1R4SW50ZW50TWlzbWF0Y2hSZWNpcGllbnRFcnJvcn0gaWYgdHJhbnNhY3Rpb24gcmVjaXBpZW50cyBkb24ndCBtYXRjaCB1c2VyIGludGVudFxuICAgKi9cbiAgYXN5bmMgdmVyaWZ5VHJhbnNhY3Rpb248VE51bWJlciBleHRlbmRzIG51bWJlciB8IGJpZ2ludCA9IG51bWJlcj4oXG4gICAgcGFyYW1zOiBWZXJpZnlUcmFuc2FjdGlvbk9wdGlvbnM8VE51bWJlcj5cbiAgKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBhd2FpdCB2ZXJpZnlUcmFuc2FjdGlvbih0aGlzLCB0aGlzLmJpdGdvLCBwYXJhbXMpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBBZ2dyZWdhdGVWYWxpZGF0aW9uRXJyb3IpIHtcbiAgICAgICAgY29uc3QgdHhFeHBsYW5hdGlvbiA9IGF3YWl0IFR4SW50ZW50TWlzbWF0Y2hFcnJvci50cnlHZXRUeEV4cGxhbmF0aW9uKFxuICAgICAgICAgIHRoaXMgYXMgdW5rbm93biBhcyBJQmFzZUNvaW4sXG4gICAgICAgICAgcGFyYW1zLnR4UHJlYnVpbGRcbiAgICAgICAgKTtcbiAgICAgICAgdGhyb3cgY29udmVydFZhbGlkYXRpb25FcnJvclRvVHhJbnRlbnRNaXNtYXRjaChcbiAgICAgICAgICBlcnJvcixcbiAgICAgICAgICBwYXJhbXMucmVxSWQsXG4gICAgICAgICAgcGFyYW1zLnR4UGFyYW1zLFxuICAgICAgICAgIHBhcmFtcy50eFByZWJ1aWxkLnR4SGV4LFxuICAgICAgICAgIHR4RXhwbGFuYXRpb25cbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBNYWtlIHN1cmUgYW4gYWRkcmVzcyBpcyB2YWxpZCBhbmQgdGhyb3cgYW4gZXJyb3IgaWYgaXQncyBub3QuXG4gICAqIEBwYXJhbSBwYXJhbXMuYWRkcmVzcyBUaGUgYWRkcmVzcyBzdHJpbmcgb24gdGhlIG5ldHdvcmtcbiAgICogQHBhcmFtIHBhcmFtcy5hZGRyZXNzVHlwZVxuICAgKiBAcGFyYW0gcGFyYW1zLmtleWNoYWlucyBLZXljaGFpbiBvYmplY3RzIHdpdGggeHB1YnNcbiAgICogQHBhcmFtIHBhcmFtcy5jb2luU3BlY2lmaWMgQ29pbi1zcGVjaWZpYyBkZXRhaWxzIGZvciB0aGUgYWRkcmVzcyBzdWNoIGFzIGEgd2l0bmVzcyBzY3JpcHRcbiAgICogQHBhcmFtIHBhcmFtcy5jaGFpbiBEZXJpdmF0aW9uIGNoYWluXG4gICAqIEBwYXJhbSBwYXJhbXMuaW5kZXggRGVyaXZhdGlvbiBpbmRleFxuICAgKiBAdGhyb3dzIHtJbnZhbGlkQWRkcmVzc0Vycm9yfVxuICAgKiBAdGhyb3dzIHtJbnZhbGlkQWRkcmVzc0Rlcml2YXRpb25Qcm9wZXJ0eUVycm9yfVxuICAgKiBAdGhyb3dzIHtVbmV4cGVjdGVkQWRkcmVzc0Vycm9yfVxuICAgKi9cbiAgYXN5bmMgaXNXYWxsZXRBZGRyZXNzKHBhcmFtczogVmVyaWZ5QWRkcmVzc09wdGlvbnM8VXR4b0NvaW5TcGVjaWZpYz4sIHdhbGxldD86IElXYWxsZXQpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCB7IGFkZHJlc3MsIGtleWNoYWlucywgY2hhaW4sIGluZGV4IH0gPSBwYXJhbXM7XG5cbiAgICBpZiAoIXRoaXMuaXNWYWxpZEFkZHJlc3MoYWRkcmVzcykpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQWRkcmVzc0Vycm9yKGBpbnZhbGlkIGFkZHJlc3M6ICR7YWRkcmVzc31gKTtcbiAgICB9XG5cbiAgICBpZiAod2FsbGV0ICYmIGlzRGVzY3JpcHRvcldhbGxldCh3YWxsZXQpKSB7XG4gICAgICBpZiAoIWtleWNoYWlucykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ21pc3NpbmcgcmVxdWlyZWQgcGFyYW0ga2V5Y2hhaW5zJyk7XG4gICAgICB9XG4gICAgICBpZiAoIWlzVHJpcGxlKGtleWNoYWlucykpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdrZXljaGFpbnMgbXVzdCBiZSBhIHRyaXBsZScpO1xuICAgICAgfVxuICAgICAgYXNzZXJ0RGVzY3JpcHRvcldhbGxldEFkZHJlc3MoXG4gICAgICAgIHRoaXMubmFtZSxcbiAgICAgICAgcGFyYW1zLFxuICAgICAgICBnZXREZXNjcmlwdG9yTWFwRnJvbVdhbGxldCh3YWxsZXQsIHRvQmlwMzJUcmlwbGUoa2V5Y2hhaW5zKSwgZ2V0UG9saWN5Rm9yRW52KHRoaXMuYml0Z28uZW52KSlcbiAgICAgICk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAoKF8uaXNVbmRlZmluZWQoY2hhaW4pICYmIF8uaXNVbmRlZmluZWQoaW5kZXgpKSB8fCAhKF8uaXNGaW5pdGUoY2hhaW4pICYmIF8uaXNGaW5pdGUoaW5kZXgpKSkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBZGRyZXNzRGVyaXZhdGlvblByb3BlcnR5RXJyb3IoXG4gICAgICAgIGBhZGRyZXNzIHZhbGlkYXRpb24gZmFpbHVyZTogaW52YWxpZCBjaGFpbiAoJHtjaGFpbn0pIG9yIGluZGV4ICgke2luZGV4fSlgXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmICgha2V5Y2hhaW5zKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ21pc3NpbmcgcmVxdWlyZWQgcGFyYW0ga2V5Y2hhaW5zJyk7XG4gICAgfVxuXG4gICAgYXNzZXJ0Rml4ZWRTY3JpcHRXYWxsZXRBZGRyZXNzKHRoaXMubmFtZSwge1xuICAgICAgYWRkcmVzcyxcbiAgICAgIGtleWNoYWlucyxcbiAgICAgIGZvcm1hdDogcGFyYW1zLmZvcm1hdCA/PyAnYmFzZTU4JyxcbiAgICAgIGNoYWluLFxuICAgICAgaW5kZXgsXG4gICAgfSk7XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0gYWRkcmVzc1R5cGVcbiAgICogQHJldHVybnMgdHJ1ZSBpZmYgY29pbiBzdXBwb3J0cyBzcGVuZGluZyBmcm9tIHVuc3BlbnRUeXBlXG4gICAqL1xuICBzdXBwb3J0c0FkZHJlc3NUeXBlKGFkZHJlc3NUeXBlOiBTY3JpcHRUeXBlMk9mMyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB1dHhvbGliLmJpdGdvLm91dHB1dFNjcmlwdHMuaXNTdXBwb3J0ZWRTY3JpcHRUeXBlKHRoaXMubmV0d29yaywgYWRkcmVzc1R5cGUpO1xuICB9XG5cbiAgLyoqIGluaGVyaXRlZCBkb2MgKi9cbiAgZ2V0RGVmYXVsdE11bHRpc2lnVHlwZSgpOiBNdWx0aXNpZ1R5cGUge1xuICAgIHJldHVybiBtdWx0aXNpZ1R5cGVzLm9uY2hhaW47XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIGNoYWluXG4gICAqIEByZXR1cm4gdHJ1ZSBpZmYgY29pbiBzdXBwb3J0cyBzcGVuZGluZyBmcm9tIGNoYWluXG4gICAqL1xuICBzdXBwb3J0c0FkZHJlc3NDaGFpbihjaGFpbjogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGlzQ2hhaW5Db2RlKGNoYWluKSAmJiB0aGlzLnN1cHBvcnRzQWRkcmVzc1R5cGUodXR4b2xpYi5iaXRnby5zY3JpcHRUeXBlRm9yQ2hhaW4oY2hhaW4pKTtcbiAgfVxuXG4gIGtleUlkc0ZvclNpZ25pbmcoKTogbnVtYmVyW10ge1xuICAgIHJldHVybiBbS2V5SW5kaWNlcy5VU0VSLCBLZXlJbmRpY2VzLkJBQ0tVUCwgS2V5SW5kaWNlcy5CSVRHT107XG4gIH1cblxuICAvKipcbiAgICogQHJldHVybnMgaW5wdXQgcHNidCBhZGRlZCB3aXRoIGRldGVybWluaXN0aWMgTXVTaWcyIG5vbmNlIGZvciBiaXRnbyBrZXkgZm9yIGVhY2ggTXVTaWcyIGlucHV0cy5cbiAgICogQHBhcmFtIHBzYnQgYWxsIE11U2lnMiBpbnB1dHMgc2hvdWxkIGNvbnRhaW4gdXNlciBNdVNpZzIgbm9uY2VcbiAgICogQHBhcmFtIHdhbGxldElkXG4gICAqL1xuICBhc3luYyBnZXRNdXNpZzJOb25jZXMocHNidDogdXR4b2xpYi5iaXRnby5VdHhvUHNidCwgd2FsbGV0SWQ6IHN0cmluZyk6IFByb21pc2U8dXR4b2xpYi5iaXRnby5VdHhvUHNidD47XG4gIGFzeW5jIGdldE11c2lnMk5vbmNlcyhwc2J0OiBmaXhlZFNjcmlwdFdhbGxldC5CaXRHb1BzYnQsIHdhbGxldElkOiBzdHJpbmcpOiBQcm9taXNlPGZpeGVkU2NyaXB0V2FsbGV0LkJpdEdvUHNidD47XG4gIGFzeW5jIGdldE11c2lnMk5vbmNlczxUIGV4dGVuZHMgdXR4b2xpYi5iaXRnby5VdHhvUHNidCB8IGZpeGVkU2NyaXB0V2FsbGV0LkJpdEdvUHNidD4oXG4gICAgcHNidDogVCxcbiAgICB3YWxsZXRJZDogc3RyaW5nXG4gICk6IFByb21pc2U8VD47XG4gIGFzeW5jIGdldE11c2lnMk5vbmNlczxUIGV4dGVuZHMgdXR4b2xpYi5iaXRnby5VdHhvUHNidCB8IGZpeGVkU2NyaXB0V2FsbGV0LkJpdEdvUHNidD4oXG4gICAgcHNidDogVCxcbiAgICB3YWxsZXRJZDogc3RyaW5nXG4gICk6IFByb21pc2U8VD4ge1xuICAgIGNvbnN0IGJ1ZmZlciA9IGVuY29kZVRyYW5zYWN0aW9uKHBzYnQpO1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5iaXRnb1xuICAgICAgLnBvc3QodGhpcy51cmwoJy93YWxsZXQvJyArIHdhbGxldElkICsgJy90eC9zaWducHNidCcpKVxuICAgICAgLnNlbmQoeyBwc2J0OiBidWZmZXIudG9TdHJpbmcoJ2hleCcpIH0pXG4gICAgICAucmVzdWx0KCk7XG4gICAgaWYgKHBzYnQgaW5zdGFuY2VvZiB1dHhvbGliLmJpdGdvLlV0eG9Qc2J0KSB7XG4gICAgICByZXR1cm4gZGVjb2RlUHNidFdpdGgocmVzcG9uc2UucHNidCwgdGhpcy5uYW1lLCAndXR4b2xpYicpIGFzIFQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBkZWNvZGVQc2J0V2l0aChyZXNwb25zZS5wc2J0LCB0aGlzLm5hbWUsICd3YXNtLXV0eG8nKSBhcyBUO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCBVc2UgZ2V0TXVzaWcyTm9uY2VzIGluc3RlYWRcbiAgICogQHJldHVybnMgaW5wdXQgcHNidCBhZGRlZCB3aXRoIGRldGVybWluaXN0aWMgTXVTaWcyIG5vbmNlIGZvciBiaXRnbyBrZXkgZm9yIGVhY2ggTXVTaWcyIGlucHV0cy5cbiAgICogQHBhcmFtIHBzYnRIZXggYWxsIE11U2lnMiBpbnB1dHMgc2hvdWxkIGNvbnRhaW4gdXNlciBNdVNpZzIgbm9uY2VcbiAgICogQHBhcmFtIHdhbGxldElkXG4gICAqL1xuICBhc3luYyBzaWduUHNidChwc2J0SGV4OiBzdHJpbmcsIHdhbGxldElkOiBzdHJpbmcpOiBQcm9taXNlPFNpZ25Qc2J0UmVzcG9uc2U+IHtcbiAgICBjb25zdCBwc2J0ID0gYXdhaXQgdGhpcy5nZXRNdXNpZzJOb25jZXModGhpcy5kZWNvZGVUcmFuc2FjdGlvbkFzUHNidChwc2J0SGV4KSwgd2FsbGV0SWQpO1xuICAgIHJldHVybiB7IHBzYnQ6IGVuY29kZVRyYW5zYWN0aW9uKHBzYnQpLnRvU3RyaW5nKCdoZXgnKSB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEByZXR1cm5zIGlucHV0IHBzYnQgYWRkZWQgd2l0aCBkZXRlcm1pbmlzdGljIE11U2lnMiBub25jZSBmb3IgYml0Z28ga2V5IGZvciBlYWNoIE11U2lnMiBpbnB1dHMgZnJvbSBPVkMuXG4gICAqIEBwYXJhbSBvdmNKc29uIEpTT04gb2JqZWN0IHByb3ZpZGVkIGJ5IE9WQyB3aXRoIGZpZWxkcyBwc2J0SGV4IGFuZCB3YWxsZXRJZFxuICAgKi9cbiAgYXN5bmMgc2lnblBzYnRGcm9tT1ZDKG92Y0pzb246IFJlY29yZDxzdHJpbmcsIHVua25vd24+KTogUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4ge1xuICAgIGFzc2VydChvdmNKc29uWydwc2J0SGV4J10sICdvdmNKc29uIG11c3QgY29udGFpbiBwc2J0SGV4Jyk7XG4gICAgYXNzZXJ0KG92Y0pzb25bJ3dhbGxldElkJ10sICdvdmNKc29uIG11c3QgY29udGFpbiB3YWxsZXRJZCcpO1xuICAgIGNvbnN0IGhleCA9IG92Y0pzb25bJ3BzYnRIZXgnXSBhcyBzdHJpbmc7XG4gICAgY29uc3Qgd2FsbGV0SWQgPSBvdmNKc29uWyd3YWxsZXRJZCddIGFzIHN0cmluZztcbiAgICBjb25zdCBwc2J0ID0gYXdhaXQgdGhpcy5nZXRNdXNpZzJOb25jZXModGhpcy5kZWNvZGVUcmFuc2FjdGlvbkFzUHNidChoZXgpLCB3YWxsZXRJZCk7XG4gICAgcmV0dXJuIF8uZXh0ZW5kKG92Y0pzb24sIHsgdHhIZXg6IGVuY29kZVRyYW5zYWN0aW9uKHBzYnQpLnRvU3RyaW5nKCdoZXgnKSB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBc3NlbWJsZSBrZXljaGFpbiBhbmQgaGFsZi1zaWduIHByZWJ1aWx0IHRyYW5zYWN0aW9uXG4gICAqIEBwYXJhbSBwYXJhbXMgLSB7QHNlZSBTaWduVHJhbnNhY3Rpb25PcHRpb25zfVxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxTaWduZWRUcmFuc2FjdGlvbiB8IEhhbGZTaWduZWRVdHhvVHJhbnNhY3Rpb24+fVxuICAgKi9cbiAgYXN5bmMgc2lnblRyYW5zYWN0aW9uPFROdW1iZXIgZXh0ZW5kcyBudW1iZXIgfCBiaWdpbnQgPSBudW1iZXI+KFxuICAgIHBhcmFtczogU2lnblRyYW5zYWN0aW9uT3B0aW9uczxUTnVtYmVyPlxuICApOiBQcm9taXNlPFNpZ25lZFRyYW5zYWN0aW9uIHwgSGFsZlNpZ25lZFV0eG9UcmFuc2FjdGlvbj4ge1xuICAgIHJldHVybiBzaWduVHJhbnNhY3Rpb248VE51bWJlcj4odGhpcywgdGhpcy5iaXRnbywgcGFyYW1zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTaWduIGEgdHJhbnNhY3Rpb24gd2l0aCBhIGN1c3RvbSBzaWduaW5nIGZ1bmN0aW9uLiBFeGFtcGxlIHVzZSBjYXNlIGlzIGV4cHJlc3MgZXh0ZXJuYWwgc2lnbmVyXG4gICAqIEBwYXJhbSBjdXN0b21TaWduaW5nRnVuY3Rpb24gY3VzdG9tIHNpZ25pbmcgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGEgc2luZ2xlIHNpZ25lZCB0cmFuc2FjdGlvblxuICAgKiBAcGFyYW0gc2lnblRyYW5zYWN0aW9uUGFyYW1zIHBhcmFtZXRlcnMgZm9yIGN1c3RvbSBzaWduaW5nIGZ1bmN0aW9uLiBJbmNsdWRlcyB0eFByZWJ1aWxkIGFuZCBwdWJzXG4gICAqXG4gICAqIEByZXR1cm5zIHNpZ25lZCB0cmFuc2FjdGlvbiBhcyBoZXggc3RyaW5nXG4gICAqL1xuICBhc3luYyBzaWduV2l0aEN1c3RvbVNpZ25pbmdGdW5jdGlvbjxUTnVtYmVyIGV4dGVuZHMgbnVtYmVyIHwgYmlnaW50PihcbiAgICBjdXN0b21TaWduaW5nRnVuY3Rpb246IFV0eG9DdXN0b21TaWduaW5nRnVuY3Rpb248VE51bWJlcj4sXG4gICAgc2lnblRyYW5zYWN0aW9uUGFyYW1zOiB7IHR4UHJlYnVpbGQ6IFRyYW5zYWN0aW9uUHJlYnVpbGQ8VE51bWJlcj47IHB1YnM6IHN0cmluZ1tdIH1cbiAgKTogUHJvbWlzZTxTaWduZWRUcmFuc2FjdGlvbj4ge1xuICAgIGNvbnN0IHR4SGV4ID0gc2lnblRyYW5zYWN0aW9uUGFyYW1zLnR4UHJlYnVpbGQudHhIZXg7XG4gICAgYXNzZXJ0KHR4SGV4LCAnbWlzc2luZyB0eEhleCBwYXJhbWV0ZXInKTtcblxuICAgIGNvbnN0IHR4ID0gdGhpcy5kZWNvZGVUcmFuc2FjdGlvbih0eEhleCk7XG5cbiAgICBjb25zdCBpc1R4V2l0aEtleVBhdGhTcGVuZElucHV0ID0gaGFzS2V5UGF0aFNwZW5kSW5wdXQodHgsIHNpZ25UcmFuc2FjdGlvblBhcmFtcy5wdWJzLCB0aGlzLm5hbWUpO1xuXG4gICAgaWYgKCFpc1R4V2l0aEtleVBhdGhTcGVuZElucHV0KSB7XG4gICAgICByZXR1cm4gYXdhaXQgY3VzdG9tU2lnbmluZ0Z1bmN0aW9uKHsgLi4uc2lnblRyYW5zYWN0aW9uUGFyYW1zLCBjb2luOiB0aGlzIH0pO1xuICAgIH1cblxuICAgIGNvbnN0IGdldFR4SGV4ID0gKHY6IFNpZ25lZFRyYW5zYWN0aW9uKTogc3RyaW5nID0+IHtcbiAgICAgIGlmICgndHhIZXgnIGluIHYpIHtcbiAgICAgICAgcmV0dXJuIHYudHhIZXg7XG4gICAgICB9XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ3R4SGV4IG5vdCBmb3VuZCBpbiBzaWduVHJhbnNhY3Rpb24gcmVzdWx0Jyk7XG4gICAgfTtcblxuICAgIGNvbnN0IHNpZ25lck5vbmNlVHggPSBhd2FpdCBjdXN0b21TaWduaW5nRnVuY3Rpb24oe1xuICAgICAgLi4uc2lnblRyYW5zYWN0aW9uUGFyYW1zLFxuICAgICAgc2lnbmluZ1N0ZXA6ICdzaWduZXJOb25jZScsXG4gICAgICBjb2luOiB0aGlzLFxuICAgIH0pO1xuXG4gICAgY29uc3QgeyBwdWJzIH0gPSBzaWduVHJhbnNhY3Rpb25QYXJhbXM7XG4gICAgYXNzZXJ0KHB1YnMgPT09IHVuZGVmaW5lZCB8fCBpc1RyaXBsZShwdWJzKSk7XG5cbiAgICBjb25zdCBjb3NpZ25lck5vbmNlVHggPSBhd2FpdCB0aGlzLnNpZ25UcmFuc2FjdGlvbjxUTnVtYmVyPih7XG4gICAgICAuLi5zaWduVHJhbnNhY3Rpb25QYXJhbXMsXG4gICAgICBwdWJzLFxuICAgICAgdHhQcmVidWlsZDogeyAuLi5zaWduVHJhbnNhY3Rpb25QYXJhbXMudHhQcmVidWlsZCwgdHhIZXg6IGdldFR4SGV4KHNpZ25lck5vbmNlVHgpIH0sXG4gICAgICBzaWduaW5nU3RlcDogJ2Nvc2lnbmVyTm9uY2UnLFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGF3YWl0IGN1c3RvbVNpZ25pbmdGdW5jdGlvbih7XG4gICAgICAuLi5zaWduVHJhbnNhY3Rpb25QYXJhbXMsXG4gICAgICB0eFByZWJ1aWxkOiB7IC4uLnNpZ25UcmFuc2FjdGlvblBhcmFtcy50eFByZWJ1aWxkLCB0eEhleDogZ2V0VHhIZXgoY29zaWduZXJOb25jZVR4KSB9LFxuICAgICAgc2lnbmluZ1N0ZXA6ICdzaWduZXJTaWduYXR1cmUnLFxuICAgICAgY29pbjogdGhpcyxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0gdW5zcGVudFxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICovXG4gIGlzQml0R29UYWludGVkVW5zcGVudDxUTnVtYmVyIGV4dGVuZHMgbnVtYmVyIHwgYmlnaW50Pih1bnNwZW50OiBVbnNwZW50PFROdW1iZXI+KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGlzUmVwbGF5UHJvdGVjdGlvblVuc3BlbnQodW5zcGVudCwgdGhpcy5uYW1lKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWNvbXBvc2UgYSByYXcgcHNidC90cmFuc2FjdGlvbiBpbnRvIHVzZWZ1bCBpbmZvcm1hdGlvbiwgc3VjaCBhcyB0aGUgdG90YWwgYW1vdW50cyxcbiAgICogY2hhbmdlIGFtb3VudHMsIGFuZCB0cmFuc2FjdGlvbiBvdXRwdXRzLlxuICAgKiBAcGFyYW0gcGFyYW1zXG4gICAqL1xuICBvdmVycmlkZSBhc3luYyBleHBsYWluVHJhbnNhY3Rpb248VE51bWJlciBleHRlbmRzIG51bWJlciB8IGJpZ2ludCA9IG51bWJlcj4oXG4gICAgcGFyYW1zOiBFeHBsYWluVHJhbnNhY3Rpb25PcHRpb25zPFROdW1iZXI+LFxuICAgIHdhbGxldD86IElXYWxsZXRcbiAgKTogUHJvbWlzZTxUcmFuc2FjdGlvbkV4cGxhbmF0aW9uPiB7XG4gICAgaWYgKCFwYXJhbXMucHVicykge1xuICAgICAgLy8gaWYgbm8gcHVicyBhcmUgcHJvdmlkZWQsIG9wcG9ydHVuaXN0aWNhbGx5IGZldGNoIHRoZSBrZXljaGFpbnMgZnJvbSB0aGUgd2FsbGV0XG4gICAgICBpZiAod2FsbGV0KSB7XG4gICAgICAgIGNvbnN0IGtleWNoYWlucyA9IGF3YWl0IGZldGNoS2V5Y2hhaW5zKHRoaXMsIHdhbGxldCk7XG4gICAgICAgIHBhcmFtcy5wdWJzID0gdG9CaXAzMlRyaXBsZShrZXljaGFpbnMpLm1hcCgoaykgPT4gay5uZXV0ZXJlZCgpLnRvQmFzZTU4KCkpIGFzIFRyaXBsZTxzdHJpbmc+O1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAod2FsbGV0ICYmIGlzRGVzY3JpcHRvcldhbGxldCh3YWxsZXQpKSB7XG4gICAgICAvLyBEZXNjcmlwdG9yIHdhbGxldHMgZGVjb2RlIHByZWJ1aWxkIGJ5dGVzIHN0cmFpZ2h0IGludG8gdGhlIHdhc20tdXR4b1xuICAgICAgLy8gZGVzY3JpcHRvciBQc2J0LCBza2lwcGluZyB0aGUgZml4ZWRTY3JpcHRXYWxsZXQuQml0R29Qc2J0IGludGVybWVkaWF0ZS5cbiAgICAgIHJldHVybiBleHBsYWluVHgoZGVjb2RlRGVzY3JpcHRvclBzYnQocGFyYW1zKSwgeyAuLi5wYXJhbXMsIHdhbGxldCB9LCB0aGlzLm5hbWUpO1xuICAgIH1cbiAgICByZXR1cm4gZXhwbGFpblR4KHRoaXMuZGVjb2RlVHJhbnNhY3Rpb25Gcm9tUHJlYnVpbGQocGFyYW1zKSwgeyAuLi5wYXJhbXMsIHdhbGxldCB9LCB0aGlzLm5hbWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkIC0gdXNlIHtAc2VlIGJhY2t1cEtleVJlY292ZXJ5fVxuICAgKiBCdWlsZHMgYSBmdW5kcyByZWNvdmVyeSB0cmFuc2FjdGlvbiB3aXRob3V0IEJpdEdvXG4gICAqIEBwYXJhbSBwYXJhbXMgLSB7QHNlZSBiYWNrdXBLZXlSZWNvdmVyeX1cbiAgICovXG4gIGFzeW5jIHJlY292ZXIocGFyYW1zOiBSZWNvdmVyUGFyYW1zKTogUmV0dXJuVHlwZTx0eXBlb2YgYmFja3VwS2V5UmVjb3Zlcnk+IHtcbiAgICByZXR1cm4gYmFja3VwS2V5UmVjb3ZlcnkodGhpcywgdGhpcy5iaXRnbywgcGFyYW1zKTtcbiAgfVxuXG4gIGFzeW5jIHJlY292ZXJWMShwYXJhbXM6IFYxUmVjb3ZlclBhcmFtcyk6IFJldHVyblR5cGU8dHlwZW9mIHYxQmFja3VwS2V5UmVjb3Zlcnk+IHtcbiAgICByZXR1cm4gdjFCYWNrdXBLZXlSZWNvdmVyeSh0aGlzLCB0aGlzLmJpdGdvLCBwYXJhbXMpO1xuICB9XG5cbiAgYXN5bmMgc3dlZXBWMShwYXJhbXM6IFYxU3dlZXBQYXJhbXMpOiBSZXR1cm5UeXBlPHR5cGVvZiB2MVN3ZWVwPiB7XG4gICAgcmV0dXJuIHYxU3dlZXAodGhpcywgdGhpcy5iaXRnbywgcGFyYW1zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWNvdmVyIGNvaW4gdGhhdCB3YXMgc2VudCB0byB3cm9uZyBjaGFpblxuICAgKiBAcGFyYW0gcGFyYW1zXG4gICAqIEBwYXJhbSBwYXJhbXMudHhpZCBUaGUgdHhpZCBvZiB0aGUgZmF1bHR5IHRyYW5zYWN0aW9uXG4gICAqIEBwYXJhbSBwYXJhbXMucmVjb3ZlcnlBZGRyZXNzIGFkZHJlc3MgdG8gc2VuZCByZWNvdmVyZWQgZnVuZHMgdG9cbiAgICogQHBhcmFtIHBhcmFtcy53YWxsZXQgdGhlIHdhbGxldCB0aGF0IHJlY2VpdmVkIHRoZSBmdW5kc1xuICAgKiBAcGFyYW0gcGFyYW1zLnJlY292ZXJ5Q29pbiB0aGUgY29pbiB0eXBlIG9mIHRoZSB3YWxsZXQgdGhhdCByZWNlaXZlZCB0aGUgZnVuZHNcbiAgICogQHBhcmFtIHBhcmFtcy5zaWduZWQgcmV0dXJuIGEgaGFsZi1zaWduZWQgdHJhbnNhY3Rpb24gKGRlZmF1bHQ9dHJ1ZSlcbiAgICogQHBhcmFtIHBhcmFtcy53YWxsZXRQYXNzcGhyYXNlIHRoZSB3YWxsZXQgcGFzc3BocmFzZVxuICAgKiBAcGFyYW0gcGFyYW1zLnhwcnYgdGhlIHVuZW5jcnlwdGVkIHhwcnYgKHVzZWQgaW5zdGVhZCBvZiB3YWxsZXQgcGFzc3BocmFzZSlcbiAgICogQHBhcmFtIHBhcmFtcy5hcGlLZXkgZm9yIHV0eG8gY29pbnMgb3RoZXIgdGhhbiBbQlRDLFRCVENdIHRoaXMgaXMgYSBCbG9jayBDaGFpciBhcGkga2V5XG4gICAqIEByZXR1cm5zIHsqfVxuICAgKi9cbiAgYXN5bmMgcmVjb3ZlckZyb21Xcm9uZ0NoYWluPFROdW1iZXIgZXh0ZW5kcyBudW1iZXIgfCBiaWdpbnQgPSBudW1iZXI+KFxuICAgIHBhcmFtczogUmVjb3ZlckZyb21Xcm9uZ0NoYWluT3B0aW9uc1xuICApOiBQcm9taXNlPENyb3NzQ2hhaW5SZWNvdmVyeVNpZ25lZDxUTnVtYmVyPiB8IENyb3NzQ2hhaW5SZWNvdmVyeVVuc2lnbmVkPFROdW1iZXI+PiB7XG4gICAgY29uc3QgeyB0eGlkLCByZWNvdmVyeUFkZHJlc3MsIHdhbGxldCwgd2FsbGV0UGFzc3BocmFzZSwgeHBydiwgYXBpS2V5IH0gPSBwYXJhbXM7XG5cbiAgICAvLyBwYXJhbXMucmVjb3ZlcnlDb2luIHVzZWQgdG8gYmUgcGFyYW1zLmNvaW4sIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5XG4gICAgY29uc3QgcmVjb3ZlcnlDb2luID0gcGFyYW1zLmNvaW4gfHwgcGFyYW1zLnJlY292ZXJ5Q29pbjtcbiAgICBpZiAoIXJlY292ZXJ5Q29pbikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdtaXNzaW5nIHJlcXVpcmVkIG9iamVjdCByZWNvdmVyeUNvaW4nKTtcbiAgICB9XG4gICAgLy8gc2lnbmVkIHNob3VsZCBkZWZhdWx0IHRvIHRydWUsIGFuZCBvbmx5IGJlIGRpc2FibGVkIGlmIGV4cGxpY2l0bHkgc2V0IHRvIGZhbHNlIChub3QgdW5kZWZpbmVkKVxuICAgIGNvbnN0IHNpZ25lZCA9IHBhcmFtcy5zaWduZWQgIT09IGZhbHNlO1xuXG4gICAgY29uc3Qgc291cmNlQ29pbkZhbWlseSA9IHRoaXMuZ2V0RmFtaWx5KCk7XG4gICAgY29uc3QgcmVjb3ZlcnlDb2luRmFtaWx5ID0gcmVjb3ZlcnlDb2luLmdldEZhbWlseSgpO1xuICAgIGNvbnN0IHN1cHBvcnRlZFJlY292ZXJ5Q29pbnMgPSBzdXBwb3J0ZWRDcm9zc0NoYWluUmVjb3Zlcmllc1tzb3VyY2VDb2luRmFtaWx5XTtcblxuICAgIGlmIChfLmlzVW5kZWZpbmVkKHN1cHBvcnRlZFJlY292ZXJ5Q29pbnMpIHx8ICFzdXBwb3J0ZWRSZWNvdmVyeUNvaW5zLmluY2x1ZGVzKHJlY292ZXJ5Q29pbkZhbWlseSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgUmVjb3Zlcnkgb2YgJHtzb3VyY2VDb2luRmFtaWx5fSBiYWxhbmNlcyBmcm9tICR7cmVjb3ZlcnlDb2luRmFtaWx5fSB3YWxsZXRzIGlzIG5vdCBzdXBwb3J0ZWQuYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGF3YWl0IHJlY292ZXJDcm9zc0NoYWluPFROdW1iZXI+KHRoaXMuYml0Z28sIHtcbiAgICAgIHNvdXJjZUNvaW46IHRoaXMsXG4gICAgICByZWNvdmVyeUNvaW4sXG4gICAgICB3YWxsZXRJZDogd2FsbGV0LFxuICAgICAgdHhpZCxcbiAgICAgIHJlY292ZXJ5QWRkcmVzcyxcbiAgICAgIHdhbGxldFBhc3NwaHJhc2U6IHNpZ25lZCA/IHdhbGxldFBhc3NwaHJhc2UgOiB1bmRlZmluZWQsXG4gICAgICB4cHJ2OiBzaWduZWQgPyB4cHJ2IDogdW5kZWZpbmVkLFxuICAgICAgYXBpS2V5LFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEdlbmVyYXRlIGJpcDMyIGtleSBwYWlyXG4gICAqXG4gICAqIEBwYXJhbSBzZWVkXG4gICAqIEByZXR1cm5zIHtPYmplY3R9IG9iamVjdCB3aXRoIGdlbmVyYXRlZCBwdWIgYW5kIHBydlxuICAgKi9cbiAgZ2VuZXJhdGVLZXlQYWlyKHNlZWQ6IEJ1ZmZlcik6IHsgcHViOiBzdHJpbmc7IHBydjogc3RyaW5nIH0ge1xuICAgIGlmICghc2VlZCkge1xuICAgICAgLy8gQW4gZXh0ZW5kZWQgcHJpdmF0ZSBrZXkgaGFzIGJvdGggYSBub3JtYWwgMjU2IGJpdCBwcml2YXRlIGtleSBhbmQgYSAyNTZcbiAgICAgIC8vIGJpdCBjaGFpbiBjb2RlLCBib3RoIG9mIHdoaWNoIG11c3QgYmUgcmFuZG9tLiA1MTIgYml0cyBpcyB0aGVyZWZvcmUgdGhlXG4gICAgICAvLyBtYXhpbXVtIGVudHJvcHkgYW5kIGdpdmVzIHVzIG1heGltdW0gc2VjdXJpdHkgYWdhaW5zdCBjcmFja2luZy5cbiAgICAgIHNlZWQgPSByYW5kb21CeXRlcyg1MTIgLyA4KTtcbiAgICB9XG4gICAgY29uc3QgZXh0ZW5kZWRLZXkgPSBCSVAzMi5mcm9tU2VlZChzZWVkKTtcbiAgICByZXR1cm4ge1xuICAgICAgcHViOiBleHRlbmRlZEtleS5uZXV0ZXJlZCgpLnRvQmFzZTU4KCksXG4gICAgICBwcnY6IGV4dGVuZGVkS2V5LnRvQmFzZTU4KCksXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmVzIHRoZSBkZWZhdWx0IHRyYW5zYWN0aW9uIGZvcm1hdCBiYXNlZCBvbiB3YWxsZXQgcHJvcGVydGllcyBhbmQgbmV0d29ya1xuICAgKiBAcGFyYW0gd2FsbGV0IC0gVGhlIHdhbGxldCB0byBjaGVja1xuICAgKiBAcGFyYW0gcmVxdWVzdGVkRm9ybWF0IC0gT3B0aW9uYWwgZXhwbGljaXRseSByZXF1ZXN0ZWQgZm9ybWF0XG4gICAqIEByZXR1cm5zIFRoZSB0cmFuc2FjdGlvbiBmb3JtYXQgdG8gdXNlLCBvciB1bmRlZmluZWQgaWYgbm8gZGVmYXVsdCBhcHBsaWVzXG4gICAqL1xuICBnZXREZWZhdWx0VHhGb3JtYXQod2FsbGV0OiBXYWxsZXQsIHJlcXVlc3RlZEZvcm1hdD86IFR4Rm9ybWF0KTogVHhGb3JtYXQge1xuICAgIGlmIChyZXF1ZXN0ZWRGb3JtYXQgPT09ICdsZWdhY3knKSB7XG4gICAgICByZXR1cm4gJ3BzYnQtbGl0ZSc7XG4gICAgfVxuICAgIHJldHVybiByZXF1ZXN0ZWRGb3JtYXQgPz8gJ3BzYnQtbGl0ZSc7XG4gIH1cblxuICBhc3luYyBnZXRFeHRyYVByZWJ1aWxkUGFyYW1zKGJ1aWxkUGFyYW1zOiBFeHRyYVByZWJ1aWxkUGFyYW1zT3B0aW9ucyAmIHsgd2FsbGV0OiBXYWxsZXQgfSk6IFByb21pc2U8e1xuICAgIHR4Rm9ybWF0PzogVHhGb3JtYXQ7XG4gICAgY2hhbmdlQWRkcmVzc1R5cGU/OiBTY3JpcHRUeXBlMk9mM1tdIHwgU2NyaXB0VHlwZTJPZjM7XG4gICAgYWxsb3dlZElucHV0U2NyaXB0VHlwZXM/OiBTY3JpcHRUeXBlMk9mM1tdO1xuICB9PiB7XG4gICAgY29uc3QgcmVxdWVzdGVkRm9ybWF0ID0gYnVpbGRQYXJhbXMudHhGb3JtYXQgYXMgVHhGb3JtYXQgfCB1bmRlZmluZWQ7XG4gICAgY29uc3QgdHhGb3JtYXQgPSB0aGlzLmdldERlZmF1bHRUeEZvcm1hdChidWlsZFBhcmFtcy53YWxsZXQsIHJlcXVlc3RlZEZvcm1hdCk7XG4gICAgbGV0IGNoYW5nZUFkZHJlc3NUeXBlID0gYnVpbGRQYXJhbXMuY2hhbmdlQWRkcmVzc1R5cGUgYXMgU2NyaXB0VHlwZTJPZjNbXSB8IFNjcmlwdFR5cGUyT2YzIHwgdW5kZWZpbmVkO1xuXG4gICAgLy8gaWYgdGhlIGFkZHJlc3NUeXBlIGlzIG5vdCBzcGVjaWZpZWQsIHdlIG5lZWQgdG8gZGVmYXVsdCB0byBwMnRyTXVzaWcyIGZvciB0ZXN0bmV0IGhvdCB3YWxsZXRzIGZvciBzdGFnZWQgcm9sbG91dCBvZiBwMnRyTXVzaWcyXG4gICAgaWYgKFxuICAgICAgYnVpbGRQYXJhbXMuYWRkcmVzc1R5cGUgPT09IHVuZGVmaW5lZCAmJiAvLyBhZGRyZXNzVHlwZSBpcyBkZXByZWNhdGVkIGFuZCByZXBsYWNlZCBieSBgY2hhbmdlQWRkcmVzc2BcbiAgICAgIGJ1aWxkUGFyYW1zLmNoYW5nZUFkZHJlc3NUeXBlID09PSB1bmRlZmluZWQgJiZcbiAgICAgIGJ1aWxkUGFyYW1zLmNoYW5nZUFkZHJlc3MgPT09IHVuZGVmaW5lZCAmJlxuICAgICAgYnVpbGRQYXJhbXMud2FsbGV0LnR5cGUoKSA9PT0gJ2hvdCdcbiAgICApIHtcbiAgICAgIGNoYW5nZUFkZHJlc3NUeXBlID0gWydwMnRyTXVzaWcyJywgJ3Ayd3NoJywgJ3Ayc2hQMndzaCcsICdwMnNoJywgJ3AydHInXTtcbiAgICB9XG5cbiAgICAvLyBnZXRIYWxmU2lnbmVkTGVnYWN5Rm9ybWF0KCkgb25seSBzdXBwb3J0cyBwMm1zLWJhc2VkIHR5cGVzIChwMnNoLCBwMnNoUDJ3c2gsIHAyd3NoKS5cbiAgICAvLyBGaWx0ZXIgY2hhbmdlIG91dHB1dHMgYW5kIHJlc3RyaWN0IGlucHV0IHNlbGVjdGlvbiB0byB0aGVzZSB0eXBlcy5cbiAgICBjb25zdCBsZWdhY3lDb21wYXRpYmxlVHlwZXM6IFNjcmlwdFR5cGUyT2YzW10gPSBbJ3Ayc2gnLCAncDJzaFAyd3NoJywgJ3Ayd3NoJ107XG4gICAgbGV0IGFsbG93ZWRJbnB1dFNjcmlwdFR5cGVzOiBTY3JpcHRUeXBlMk9mM1tdIHwgdW5kZWZpbmVkO1xuXG4gICAgaWYgKHJlcXVlc3RlZEZvcm1hdCA9PT0gJ2xlZ2FjeScpIHtcbiAgICAgIGFsbG93ZWRJbnB1dFNjcmlwdFR5cGVzID0gbGVnYWN5Q29tcGF0aWJsZVR5cGVzO1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkoY2hhbmdlQWRkcmVzc1R5cGUpKSB7XG4gICAgICAgIGNoYW5nZUFkZHJlc3NUeXBlID0gY2hhbmdlQWRkcmVzc1R5cGUuZmlsdGVyKCh0KTogdCBpcyBTY3JpcHRUeXBlMk9mMyA9PlxuICAgICAgICAgIGxlZ2FjeUNvbXBhdGlibGVUeXBlcy5pbmNsdWRlcyh0IGFzIFNjcmlwdFR5cGUyT2YzKVxuICAgICAgICApO1xuICAgICAgfSBlbHNlIGlmIChjaGFuZ2VBZGRyZXNzVHlwZSAhPT0gdW5kZWZpbmVkICYmICFsZWdhY3lDb21wYXRpYmxlVHlwZXMuaW5jbHVkZXMoY2hhbmdlQWRkcmVzc1R5cGUpKSB7XG4gICAgICAgIGNoYW5nZUFkZHJlc3NUeXBlID0gbGVnYWN5Q29tcGF0aWJsZVR5cGVzO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICB0eEZvcm1hdCxcbiAgICAgIGNoYW5nZUFkZHJlc3NUeXBlLFxuICAgICAgYWxsb3dlZElucHV0U2NyaXB0VHlwZXMsXG4gICAgfTtcbiAgfVxuXG4gIHByZUNyZWF0ZUJpdEdvKHBhcmFtczogUHJlY3JlYXRlQml0R29PcHRpb25zKTogdm9pZCB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgYXN5bmMgcHJlc2lnblRyYW5zYWN0aW9uKHBhcmFtczogUHJlc2lnblRyYW5zYWN0aW9uT3B0aW9ucyk6IFByb21pc2U8YW55PiB7XG4gICAgaWYgKHBhcmFtcy53YWxsZXREYXRhICYmIGlzVXR4b1dhbGxldERhdGEocGFyYW1zLndhbGxldERhdGEpICYmIGlzRGVzY3JpcHRvcldhbGxldERhdGEocGFyYW1zLndhbGxldERhdGEpKSB7XG4gICAgICByZXR1cm4gcGFyYW1zO1xuICAgIH1cblxuICAgIGNvbnN0IHJldHVybkxlZ2FjeUZvcm1hdCA9IChwYXJhbXMgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pLnR4Rm9ybWF0ID09PSAnbGVnYWN5JztcblxuICAgIC8vIEluIHRoZSBjYXNlIHRoYXQgd2UgaGF2ZSBhICdwc2J0LWxpdGUnIHRyYW5zYWN0aW9uIGZvcm1hdCwgd2Ugd2FudCB0byBpbmRpY2F0ZSBpbiBzaWduaW5nIHRvIG5vdCBmYWlsXG4gICAgY29uc3QgdHhIZXggPSAocGFyYW1zLnR4SGV4ID8/IHBhcmFtcy50eFByZWJ1aWxkPy50eEhleCkgYXMgc3RyaW5nO1xuICAgIGlmIChcbiAgICAgIHR4SGV4ICYmXG4gICAgICB1dHhvbGliLmJpdGdvLmlzUHNidCh0eEhleCBhcyBzdHJpbmcpICYmXG4gICAgICB1dHhvbGliLmJpdGdvLmlzUHNidExpdGUodXR4b2xpYi5iaXRnby5jcmVhdGVQc2J0RnJvbUhleCh0eEhleCwgdGhpcy5uZXR3b3JrKSkgJiZcbiAgICAgIHBhcmFtcy5hbGxvd05vblNlZ3dpdFNpZ25pbmdXaXRob3V0UHJldlR4ID09PSB1bmRlZmluZWRcbiAgICApIHtcbiAgICAgIHJldHVybiB7IC4uLnBhcmFtcywgYWxsb3dOb25TZWd3aXRTaWduaW5nV2l0aG91dFByZXZUeDogdHJ1ZSwgcmV0dXJuTGVnYWN5Rm9ybWF0IH07XG4gICAgfVxuICAgIHJldHVybiB7IC4uLnBhcmFtcywgcmV0dXJuTGVnYWN5Rm9ybWF0IH07XG4gIH1cblxuICBhc3luYyBzdXBwbGVtZW50R2VuZXJhdGVXYWxsZXQoXG4gICAgd2FsbGV0UGFyYW1zOiBTdXBwbGVtZW50R2VuZXJhdGVXYWxsZXRPcHRpb25zLFxuICAgIGtleWNoYWluczogS2V5Y2hhaW5zVHJpcGxldFxuICApOiBQcm9taXNlPGFueT4ge1xuICAgIHJldHVybiB3YWxsZXRQYXJhbXM7XG4gIH1cblxuICB0cmFuc2FjdGlvbkRhdGFBbGxvd2VkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHZhbHVlbGVzc1RyYW5zZmVyQWxsb3dlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBnZXRSZWNvdmVyeVByb3ZpZGVyKGFwaVRva2VuPzogc3RyaW5nKTogUmVjb3ZlcnlQcm92aWRlciB7XG4gICAgcmV0dXJuIGZvckNvaW4odGhpcy5nZXRDaGFpbigpLCBhcGlUb2tlbik7XG4gIH1cblxuICAvKiogQGluaGVyaXREb2MgKi9cbiAgYXVkaXREZWNyeXB0ZWRLZXkoe1xuICAgIG11bHRpU2lnVHlwZSxcbiAgICBwdWJsaWNLZXksXG4gICAgcHJ2LFxuICB9OiB7XG4gICAgbXVsdGlTaWdUeXBlOiBNdWx0aXNpZ1R5cGU7XG4gICAgcHVibGljS2V5OiBzdHJpbmc7XG4gICAgcHJ2OiBzdHJpbmc7XG4gIH0pOiB2b2lkIHtcbiAgICBpZiAobXVsdGlTaWdUeXBlID09PSAndHNzJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCd0c3MgYXVkaXRpbmcgaXMgbm90IHN1cHBvcnRlZCBmb3IgdGhpcyBjb2luJyk7XG4gICAgfVxuICAgIGlmICghaXNWYWxpZFBydihwcnYpICYmICFpc1ZhbGlkWHBydihwcnYpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgcHJpdmF0ZSBrZXknKTtcbiAgICB9XG4gICAgaWYgKHB1YmxpY0tleSkge1xuICAgICAgY29uc3QgZ2VuUHViS2V5ID0gQklQMzIuZnJvbUJhc2U1OChwcnYpLm5ldXRlcmVkKCkudG9CYXNlNTgoKTtcbiAgICAgIGlmIChnZW5QdWJLZXkgIT09IHB1YmxpY0tleSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3B1YmxpYyBrZXkgZG9lcyBub3QgbWF0Y2ggcHJpdmF0ZSBrZXknKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiJdfQ==
677
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWJzdHJhY3RVdHhvQ29pbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hYnN0cmFjdFV0eG9Db2luLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sTUFBTSxNQUFNLFFBQVEsQ0FBQztBQUM1QixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBRXJDLE9BQU8sQ0FBQyxNQUFNLFFBQVEsQ0FBQztBQUN2QixPQUFPLEtBQUssT0FBTyxNQUFNLHNCQUFzQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxLQUFLLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUM1RCxPQUFPLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3pELE9BQU8sRUFFTCxRQUFRLEVBTVIsZUFBZSxFQUNmLHFDQUFxQyxFQUNyQyxtQkFBbUIsRUFFbkIsUUFBUSxFQUdSLFVBQVUsRUFHVixhQUFhLEVBT2IscUJBQXFCLEVBTXJCLDhCQUE4QixFQUs5QixVQUFVLEVBQ1YsV0FBVyxHQUNaLE1BQU0sc0JBQXNCLENBQUM7QUFFOUIsT0FBTyxFQUNMLGlCQUFpQixFQUdqQixPQUFPLEVBQ1AsaUJBQWlCLEVBR2pCLG1CQUFtQixFQUVuQixPQUFPLEdBRVIsTUFBTSxZQUFZLENBQUM7QUFDcEIsT0FBTyxFQUFFLDBCQUEwQixFQUFFLHlCQUF5QixFQUFFLE1BQU0sNENBQTRDLENBQUM7QUFDbkgsT0FBTyxFQUFFLDZCQUE2QixFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ3pELE9BQU8sRUFDTCwrQkFBK0IsRUFFL0IsU0FBUyxFQUNULHlCQUF5QixFQUN6QixpQkFBaUIsRUFDakIsZ0JBQWdCLEVBQ2hCLGlCQUFpQixHQUNsQixNQUFNLGVBQWUsQ0FBQztBQUd2QixPQUFPLEVBQ0wsd0JBQXdCLEVBQ3hCLG1CQUFtQixFQUNuQiw0QkFBNEIsR0FDN0IsTUFBTSw0Q0FBNEMsQ0FBQztBQUNw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LE1BQU0sSUFBSSxLQUFLLENBQUMsdUNBQXVDLENBQUMsQ0FBQztZQUMzRCxDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcbmltcG9ydCB7IHJhbmRvbUJ5dGVzIH0gZnJvbSAnY3J5cHRvJztcblxuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCAqIGFzIHV0eG9saWIgZnJvbSAnQGJpdGdvLWJldGEvdXR4by1saWInO1xuaW1wb3J0IHsgQklQMzIsIGZpeGVkU2NyaXB0V2FsbGV0IH0gZnJvbSAnQGJpdGdvL3dhc20tdXR4byc7XG5pbXBvcnQgeyBiaXRnbywgZ2V0TWFpbm5ldCB9IGZyb20gJ0BiaXRnby1iZXRhL3V0eG8tbGliJztcbmltcG9ydCB7XG4gIEFkZHJlc3NDb2luU3BlY2lmaWMsXG4gIEJhc2VDb2luLFxuICBCaXRHb0Jhc2UsXG4gIENyZWF0ZUFkZHJlc3NGb3JtYXQsXG4gIEV4dHJhUHJlYnVpbGRQYXJhbXNPcHRpb25zLFxuICBIYWxmU2lnbmVkVXR4b1RyYW5zYWN0aW9uLFxuICBJQmFzZUNvaW4sXG4gIGlzQm9sdDExSW52b2ljZSxcbiAgSW52YWxpZEFkZHJlc3NEZXJpdmF0aW9uUHJvcGVydHlFcnJvcixcbiAgSW52YWxpZEFkZHJlc3NFcnJvcixcbiAgSVJlcXVlc3RUcmFjZXIsXG4gIGlzVHJpcGxlLFxuICBJV2FsbGV0LFxuICBLZXljaGFpbnNUcmlwbGV0LFxuICBLZXlJbmRpY2VzLFxuICBNaXNtYXRjaGVkUmVjaXBpZW50LFxuICBNdWx0aXNpZ1R5cGUsXG4gIG11bHRpc2lnVHlwZXMsXG4gIFBhcnNlVHJhbnNhY3Rpb25PcHRpb25zIGFzIEJhc2VQYXJzZVRyYW5zYWN0aW9uT3B0aW9ucyxcbiAgUHJlY3JlYXRlQml0R29PcHRpb25zLFxuICBQcmVzaWduVHJhbnNhY3Rpb25PcHRpb25zLFxuICBCcmlkZ2luZ1BhcmFtcyxcbiAgUmVxdWVzdFRyYWNlcixcbiAgU2lnbmVkVHJhbnNhY3Rpb24sXG4gIFR4SW50ZW50TWlzbWF0Y2hFcnJvcixcbiAgU2lnblRyYW5zYWN0aW9uT3B0aW9ucyBhcyBCYXNlU2lnblRyYW5zYWN0aW9uT3B0aW9ucyxcbiAgU3VwcGxlbWVudEdlbmVyYXRlV2FsbGV0T3B0aW9ucyxcbiAgVHJhbnNhY3Rpb25QYXJhbXMgYXMgQmFzZVRyYW5zYWN0aW9uUGFyYW1zLFxuICBUcmFuc2FjdGlvblByZWJ1aWxkIGFzIEJhc2VUcmFuc2FjdGlvblByZWJ1aWxkLFxuICBUcmlwbGUsXG4gIFR4SW50ZW50TWlzbWF0Y2hSZWNpcGllbnRFcnJvcixcbiAgVmVyaWZpY2F0aW9uT3B0aW9ucyxcbiAgVmVyaWZ5QWRkcmVzc09wdGlvbnMgYXMgQmFzZVZlcmlmeUFkZHJlc3NPcHRpb25zLFxuICBWZXJpZnlUcmFuc2FjdGlvbk9wdGlvbnMgYXMgQmFzZVZlcmlmeVRyYW5zYWN0aW9uT3B0aW9ucyxcbiAgV2FsbGV0LFxuICBpc1ZhbGlkUHJ2LFxuICBpc1ZhbGlkWHBydixcbn0gZnJvbSAnQGJpdGdvLWJldGEvc2RrLWNvcmUnO1xuXG5pbXBvcnQge1xuICBiYWNrdXBLZXlSZWNvdmVyeSxcbiAgQ3Jvc3NDaGFpblJlY292ZXJ5U2lnbmVkLFxuICBDcm9zc0NoYWluUmVjb3ZlcnlVbnNpZ25lZCxcbiAgZm9yQ29pbixcbiAgcmVjb3ZlckNyb3NzQ2hhaW4sXG4gIFJlY292ZXJQYXJhbXMsXG4gIFJlY292ZXJ5UHJvdmlkZXIsXG4gIHYxQmFja3VwS2V5UmVjb3ZlcnksXG4gIFYxUmVjb3ZlclBhcmFtcyxcbiAgdjFTd2VlcCxcbiAgVjFTd2VlcFBhcmFtcyxcbn0gZnJvbSAnLi9yZWNvdmVyeSc7XG5pbXBvcnQgeyBnZXRSZXBsYXlQcm90ZWN0aW9uUHVia2V5cywgaXNSZXBsYXlQcm90ZWN0aW9uVW5zcGVudCB9IGZyb20gJy4vdHJhbnNhY3Rpb24vZml4ZWRTY3JpcHQvcmVwbGF5UHJvdGVjdGlvbic7XG5pbXBvcnQgeyBzdXBwb3J0ZWRDcm9zc0NoYWluUmVjb3ZlcmllcyB9IGZyb20gJy4vY29uZmlnJztcbmltcG9ydCB7XG4gIGFzc2VydFZhbGlkVHJhbnNhY3Rpb25SZWNpcGllbnQsXG4gIERlY29kZWRUcmFuc2FjdGlvbixcbiAgZXhwbGFpblR4LFxuICBmcm9tRXh0ZW5kZWRBZGRyZXNzRm9ybWF0LFxuICBpc1NjcmlwdFJlY2lwaWVudCxcbiAgcGFyc2VUcmFuc2FjdGlvbixcbiAgdmVyaWZ5VHJhbnNhY3Rpb24sXG59IGZyb20gJy4vdHJhbnNhY3Rpb24nO1xuaW1wb3J0IHR5cGUgeyBUcmFuc2FjdGlvbkV4cGxhbmF0aW9uIH0gZnJvbSAnLi90cmFuc2FjdGlvbi9maXhlZFNjcmlwdC9leHBsYWluVHJhbnNhY3Rpb24nO1xuaW1wb3J0IHsgTXVzaWcyUGFydGljaXBhbnQgfSBmcm9tICcuL3RyYW5zYWN0aW9uL2ZpeGVkU2NyaXB0L211c2lnMic7XG5pbXBvcnQge1xuICBBZ2dyZWdhdGVWYWxpZGF0aW9uRXJyb3IsXG4gIEVycm9yTWlzc2luZ091dHB1dHMsXG4gIEVycm9ySW1wbGljaXRFeHRlcm5hbE91dHB1dHMsXG59IGZyb20gJy4vdHJhbnNhY3Rpb24vZGVzY3JpcHRvci92ZXJpZnlUcmFuc2FjdGlvbic7XG5pbXBvcnQgeyBhc3NlcnREZXNjcmlwdG9yV2FsbGV0QWRkcmVzcywgZ2V0RGVzY3JpcHRvck1hcEZyb21XYWxsZXQsIGlzRGVzY3JpcHRvcldhbGxldCB9IGZyb20gJy4vZGVzY3JpcHRvcic7XG5pbXBvcnQge1xuICBnZXRGdWxsTmFtZUZyb21Db2luTmFtZSxcbiAgZ2V0TWFpbm5ldENvaW5OYW1lLFxuICBnZXROZXR3b3JrRnJvbUNvaW5OYW1lLFxuICBpc01haW5uZXRDb2luLFxuICBVdHhvQ29pbk5hbWUsXG4gIFV0eG9Db2luTmFtZU1haW5uZXQsXG59IGZyb20gJy4vbmFtZXMnO1xuaW1wb3J0IHsgYXNzZXJ0Rml4ZWRTY3JpcHRXYWxsZXRBZGRyZXNzIH0gZnJvbSAnLi9hZGRyZXNzL2ZpeGVkU2NyaXB0JztcbmltcG9ydCB7IGlzU2RrQmFja2VuZCwgUGFyc2VkVHJhbnNhY3Rpb24sIFNka0JhY2tlbmQgfSBmcm9tICcuL3RyYW5zYWN0aW9uL3R5cGVzJztcbmltcG9ydCB7XG4gIGRlY29kZURlc2NyaXB0b3JQc2J0LFxuICBkZWNvZGVQc2J0V2l0aCxcbiAgZW5jb2RlVHJhbnNhY3Rpb24sXG4gIHN0cmluZ1RvQnVmZmVyVHJ5Rm9ybWF0cyxcbn0gZnJvbSAnLi90cmFuc2FjdGlvbi9kZWNvZGUnO1xuaW1wb3J0IHsgZmV0Y2hLZXljaGFpbnMsIHRvQmlwMzJUcmlwbGUsIFV0eG9LZXljaGFpbiB9IGZyb20gJy4va2V5Y2hhaW5zJztcbmltcG9ydCB7IHZlcmlmeUtleVNpZ25hdHVyZSwgdmVyaWZ5VXNlclB1YmxpY0tleSB9IGZyb20gJy4vdmVyaWZ5S2V5JztcbmltcG9ydCB7IGdldFBvbGljeUZvckVudiB9IGZyb20gJy4vZGVzY3JpcHRvci92YWxpZGF0ZVBvbGljeSc7XG5pbXBvcnQgeyBzaWduVHJhbnNhY3Rpb24gfSBmcm9tICcuL3RyYW5zYWN0aW9uL3NpZ25UcmFuc2FjdGlvbic7XG5pbXBvcnQgeyBpc1V0eG9XYWxsZXREYXRhLCBVdHhvV2FsbGV0IH0gZnJvbSAnLi93YWxsZXQnO1xuaW1wb3J0IHsgaXNEZXNjcmlwdG9yV2FsbGV0RGF0YSB9IGZyb20gJy4vZGVzY3JpcHRvci9kZXNjcmlwdG9yV2FsbGV0JztcbmltcG9ydCB0eXBlIHsgVW5zcGVudCB9IGZyb20gJy4vdW5zcGVudCc7XG5cbmltcG9ydCBTY3JpcHRUeXBlMk9mMyA9IHV0eG9saWIuYml0Z28ub3V0cHV0U2NyaXB0cy5TY3JpcHRUeXBlMk9mMztcblxuZXhwb3J0IHR5cGUgVHhGb3JtYXQgPVxuICAvLyBUaGlzIGlzIGEgbGVnYWN5IHRyYW5zYWN0aW9uIGZvcm1hdCBiYXNlZCBhcm91bmQgdGhlIGJpdGNvaW5qcy1saWIgc2VyaWFsaXphdGlvbiBvZiB1bnNpZ25lZCB0cmFuc2FjdGlvbnNcbiAgLy8gZG9lcyBub3QgaW5jbHVkZSBwcmV2T3V0IGRhdGEgYW5kIGlzIGEgYml0IHBhaW5mdWwgdG8gd29yayB3aXRoXG4gIC8vIGdvaW5nIHRvIGJlIGRlcHJlY2F0ZWQgaW4gZmF2b3Igb2YgcHNidFxuICAvLyBAZGVwcmVjYXRlZFxuICB8ICdsZWdhY3knXG4gIC8vIFRoaXMgaXMgdGhlIHN0YW5kYXJkIHBzYnQgZm9ybWF0LCBpbmNsdWRpbmcgdGhlIGZ1bGwgcHJldlR4IGRhdGEgZm9yIGxlZ2FjeSB0cmFuc2FjdGlvbnMuXG4gIC8vIFRoaXMgd2lsbCByZW1haW4gc3VwcG9ydGVkIGJ1dCBpcyBub3QgdGhlIGRlZmF1bHQsIHNpbmNlIHRoZSBkYXRhIHNpemVzIGNhbiBiZWNvbWUgcHJvaGliaXRpdmVseSBsYXJnZS5cbiAgfCAncHNidCdcbiAgLy8gVGhpcyBpcyBhIG5vbnN0YW5kYXJkIHBzYnQgdmVyc2lvbiB3aGVyZSBsZWdhY3kgaW5wdXRzIGFyZSBzZXJpYWxpemVkIGFzIGlmIHRoZXkgd2VyZSBzZWd3aXQgaW5wdXRzLlxuICAvLyBXaGlsZSB0aGlzIHByZXZlbnRzIHVzIHRvIGZ1bGx5IHZlcmlmeSB0aGUgdHJhbnNhY3Rpb24gZmVlLCB3ZSBoYXZlIG90aGVyIGNoZWNrcyBpbiBwbGFjZSB0byBlbnN1cmUgdGhlIGZlZSBpcyB3aXRoaW4gYm91bmRzLlxuICB8ICdwc2J0LWxpdGUnO1xuXG5leHBvcnQgY2xhc3MgRXJyb3JEZXByZWNhdGVkVHhGb3JtYXQgZXh0ZW5kcyBFcnJvciB7XG4gIGNvbnN0cnVjdG9yKHR4Rm9ybWF0OiBUeEZvcm1hdCkge1xuICAgIHN1cGVyKGBTREsgc3VwcG9ydCBmb3IgdHhGb3JtYXQ9JHt0eEZvcm1hdH0gaXMgZGVwcmVjYXRlZCBvbiB0aGlzIGVudmlyb25tZW50LiBQbGVhc2UgdXNlIHBzYnQgaW5zdGVhZC5gKTtcbiAgfVxufVxuXG50eXBlIFV0eG9DdXN0b21TaWduaW5nRnVuY3Rpb248VE51bWJlciBleHRlbmRzIG51bWJlciB8IGJpZ2ludD4gPSB7XG4gIChwYXJhbXM6IHtcbiAgICBjb2luOiBJQmFzZUNvaW47XG4gICAgdHhQcmVidWlsZDogVHJhbnNhY3Rpb25QcmVidWlsZDxUTnVtYmVyPjtcbiAgICBwdWJzPzogc3RyaW5nW107XG4gICAgLyoqXG4gICAgICogc2lnbmluZ1N0ZXAgZmxhZyBiZWNvbWVzIGFwcGxpY2FibGUgd2hlbiBib3RoIG9mIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OlxuICAgICAqIDEpIFdoZW4gdGhlIGV4dGVybmFsIGV4cHJlc3Mgc2lnbmVyIGlzIGFjdGl2YXRlZFxuICAgICAqIDIpIFdoZW4gdGhlIFBTQlQgaW5jbHVkZXMgYXQgbGVhc3Qgb25lIHRhcHJvb3RLZXlQYXRoU3BlbmQgaW5wdXQuXG4gICAgICpcbiAgICAgKiBUaGUgc2lnbmluZyBwcm9jZXNzIG9mIGEgdGFwcm9vdEtleVBhdGhTcGVuZCBpbnB1dCBpcyBhIDQtc3RlcCBzZXF1ZW5jZTpcbiAgICAgKiBpKSB1c2VyIG5vbmNlIGdlbmVyYXRpb24gLSBzaWduZXJOb25jZSAtIHRoaXMgaXMgdGhlIGZpcnN0IGNhbGwgdG8gZXh0ZXJuYWwgZXhwcmVzcyBzaWduZXIgc2lnblRyYW5zYWN0aW9uXG4gICAgICogaWkpIGJpdGdvIG5vbmNlIGdlbmVyYXRpb24gLSBjb3NpZ25lck5vbmNlIC0gdGhpcyBpcyB0aGUgZmlyc3QgYW5kIG9ubHkgY2FsbCB0byBsb2NhbCBzaWduVHJhbnNhY3Rpb25cbiAgICAgKiBpaWkpIHVzZXIgc2lnbmF0dXJlIC0gc2lnbmVyU2lnbmF0dXJlIC0gdGhpcyBpcyB0aGUgc2Vjb25kIGNhbGwgdG8gZXh0ZXJuYWwgZXhwcmVzcyBzaWduZXIgc2lnblRyYW5zYWN0aW9uXG4gICAgICogaXYpIGJpdGdvIHNpZ25hdHVyZSAtIG5vdCBpbiBzaWduVHJhbnNhY3Rpb24gbWV0aG9k4oCZcyBzY29wZVxuICAgICAqXG4gICAgICogSW4gdGhlIGFic2VuY2Ugb2YgdGhpcyBmbGFnLCB0aGUgYWZvcmVtZW50aW9uZWQgZmlyc3QgdGhyZWUgc2VxdWVuY2UgaXMgZXhlY3V0ZWQgaW4gYSBzaW5nbGUgc2lnblRyYW5zYWN0aW9uIGNhbGwuXG4gICAgICpcbiAgICAgKiBOT1RFOiBXZSBtYWtlIGEgc3Ryb25nIGFzc3VtcHRpb24gdGhhdCB0aGUgZXh0ZXJuYWwgZXhwcmVzcyBzaWduZXIgYW5kIGl0cyBjYWxsZXIgdXNlcyBzdGlja3kgc2Vzc2lvbnMsXG4gICAgICogc2luY2UgUFNCVHMgYXJlIGNhY2hlZCBpbiBzdGVwIDEgdG8gYmUgdXNlZCBpbiBzdGVwIDMgZm9yIE11U2lnMiB1c2VyIHNlY3VyZSBub25jZSBhY2Nlc3MuXG4gICAgICovXG4gICAgc2lnbmluZ1N0ZXA/OiAnc2lnbmVyTm9uY2UnIHwgJ3NpZ25lclNpZ25hdHVyZScgfCAnY29zaWduZXJOb25jZSc7XG4gIH0pOiBQcm9taXNlPFNpZ25lZFRyYW5zYWN0aW9uPjtcbn07XG5cbmNvbnN0IHsgaXNDaGFpbkNvZGUsIHNjcmlwdFR5cGVGb3JDaGFpbiwgb3V0cHV0U2NyaXB0cyB9ID0gYml0Z287XG5cbi8qKlxuICogQ2hlY2sgaWYgYSBkZWNvZGVkIHRyYW5zYWN0aW9uIGhhcyBhdCBsZWFzdCBvbmUgdGFwcm9vdCBrZXkgcGF0aCBzcGVuZCAoTXVTaWcyKSBpbnB1dC5cbiAqIFdvcmtzIGZvciBib3RoIHV0eG9saWIgVXR4b1BzYnQgYW5kIHdhc20tdXR4byBCaXRHb1BzYnQuXG4gKi9cbmZ1bmN0aW9uIGhhc0tleVBhdGhTcGVuZElucHV0PFROdW1iZXIgZXh0ZW5kcyBudW1iZXIgfCBiaWdpbnQ+KFxuICB0eDogRGVjb2RlZFRyYW5zYWN0aW9uPFROdW1iZXI+LFxuICBwdWJzOiBzdHJpbmdbXSB8IHVuZGVmaW5lZCxcbiAgY29pbk5hbWU6IFV0eG9Db2luTmFtZVxuKTogYm9vbGVhbiB7XG4gIGlmICh0eCBpbnN0YW5jZW9mIGJpdGdvLlV0eG9Qc2J0KSB7XG4gICAgcmV0dXJuIGJpdGdvLmlzVHJhbnNhY3Rpb25XaXRoS2V5UGF0aFNwZW5kSW5wdXQodHgpO1xuICB9XG4gIGlmICh0eCBpbnN0YW5jZW9mIGZpeGVkU2NyaXB0V2FsbGV0LkJpdEdvUHNidCkge1xuICAgIGFzc2VydChwdWJzICYmIGlzVHJpcGxlKHB1YnMpLCAncHViIHRyaXBsZSBpcyByZXF1aXJlZCB0byBjaGVjayBmb3Iga2V5IHBhdGggc3BlbmQgaW5wdXRzIGluIHdhc20tdXR4byBQU0JUJyk7XG4gICAgY29uc3Qgcm9vdFdhbGxldEtleXMgPSBmaXhlZFNjcmlwdFdhbGxldC5Sb290V2FsbGV0S2V5cy5mcm9tWHB1YnMocHVicyk7XG4gICAgY29uc3QgcmVwbGF5UHJvdGVjdGlvbiA9IHsgcHVibGljS2V5czogZ2V0UmVwbGF5UHJvdGVjdGlvblB1YmtleXMoY29pbk5hbWUpIH07XG4gICAgY29uc3QgcGFyc2VkID0gdHgucGFyc2VUcmFuc2FjdGlvbldpdGhXYWxsZXRLZXlzKHJvb3RXYWxsZXRLZXlzLCB7IHJlcGxheVByb3RlY3Rpb24gfSk7XG4gICAgcmV0dXJuIHBhcnNlZC5pbnB1dHMuc29tZSgoaW5wdXQpID0+IGlucHV0LnNjcmlwdFR5cGUgPT09ICdwMnRyTXVzaWcyS2V5UGF0aCcpO1xuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cblxuLyoqXG4gKiBDb252ZXJ0IFZhbGlkYXRpb25FcnJvciB0byBUeEludGVudE1pc21hdGNoUmVjaXBpZW50RXJyb3Igd2l0aCBzdHJ1Y3R1cmVkIGRhdGFcbiAqXG4gKiBUaGlzIHByZXNlcnZlcyB0aGUgc3RydWN0dXJlZCBlcnJvciBpbmZvcm1hdGlvbiBmcm9tIHRoZSBvcmlnaW5hbCBWYWxpZGF0aW9uRXJyb3JcbiAqIGJ5IGV4dHJhY3RpbmcgdGhlIG1pc21hdGNoZWQgb3V0cHV0cyBhbmQgY29udmVydGluZyB0aGVtIHRvIHRoZSBzdGFuZGFyZGl6ZWQgZm9ybWF0LlxuICogVGhlIG9yaWdpbmFsIGVycm9yIGlzIHByZXNlcnZlZCBhcyB0aGUgYGNhdXNlYCBmb3IgZGVidWdnaW5nIHB1cnBvc2VzLlxuICovXG5mdW5jdGlvbiBjb252ZXJ0VmFsaWRhdGlvbkVycm9yVG9UeEludGVudE1pc21hdGNoKFxuICBlcnJvcjogQWdncmVnYXRlVmFsaWRhdGlvbkVycm9yLFxuICByZXFJZDogc3RyaW5nIHwgSVJlcXVlc3RUcmFjZXIgfCB1bmRlZmluZWQsXG4gIHR4UGFyYW1zOiBCYXNlVHJhbnNhY3Rpb25QYXJhbXMsXG4gIHR4SGV4OiBzdHJpbmcgfCB1bmRlZmluZWQsXG4gIHR4RXhwbGFuYXRpb24/OiB1bmtub3duXG4pOiBUeEludGVudE1pc21hdGNoUmVjaXBpZW50RXJyb3Ige1xuICBjb25zdCBtaXNtYXRjaGVkUmVjaXBpZW50czogTWlzbWF0Y2hlZFJlY2lwaWVudFtdID0gW107XG5cbiAgZm9yIChjb25zdCBlcnIgb2YgZXJyb3IuZXJyb3JzKSB7XG4gICAgaWYgKGVyciBpbnN0YW5jZW9mIEVycm9yTWlzc2luZ091dHB1dHMpIHtcbiAgICAgIG1pc21hdGNoZWRSZWNpcGllbnRzLnB1c2goXG4gICAgICAgIC4uLmVyci5taXNzaW5nT3V0cHV0cy5tYXAoKG91dHB1dCkgPT4gKHtcbiAgICAgICAgICBhZGRyZXNzOiBvdXRwdXQuYWRkcmVzcyxcbiAgICAgICAgICBhbW91bnQ6IG91dHB1dC5hbW91bnQudG9TdHJpbmcoKSxcbiAgICAgICAgfSkpXG4gICAgICApO1xuICAgIH0gZWxzZSBpZiAoZXJyIGluc3RhbmNlb2YgRXJyb3JJbXBsaWNpdEV4dGVybmFsT3V0cHV0cykge1xuICAgICAgbWlzbWF0Y2hlZFJlY2lwaWVudHMucHVzaChcbiAgICAgICAgLi4uZXJyLmltcGxpY2l0RXh0ZXJuYWxPdXRwdXRzLm1hcCgob3V0cHV0KSA9PiAoe1xuICAgICAgICAgIGFkZHJlc3M6IG91dHB1dC5hZGRyZXNzLFxuICAgICAgICAgIGFtb3VudDogb3V0cHV0LmFtb3VudC50b1N0cmluZygpLFxuICAgICAgICB9KSlcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgY29uc3QgdHhJbnRlbnRFcnJvciA9IG5ldyBUeEludGVudE1pc21hdGNoUmVjaXBpZW50RXJyb3IoXG4gICAgZXJyb3IubWVzc2FnZSxcbiAgICByZXFJZCxcbiAgICBbdHhQYXJhbXNdLFxuICAgIHR4SGV4LFxuICAgIG1pc21hdGNoZWRSZWNpcGllbnRzLFxuICAgIHR4RXhwbGFuYXRpb25cbiAgKTtcbiAgLy8gUHJlc2VydmUgdGhlIG9yaWdpbmFsIHN0cnVjdHVyZWQgZXJyb3IgYXMgdGhlIGNhdXNlIGZvciBkZWJ1Z2dpbmdcbiAgLy8gU2VlOiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9FcnJvci9jYXVzZVxuICAodHhJbnRlbnRFcnJvciBhcyBFcnJvciAmIHsgY2F1c2U/OiBFcnJvciB9KS5jYXVzZSA9IGVycm9yO1xuICByZXR1cm4gdHhJbnRlbnRFcnJvcjtcbn1cblxuZXhwb3J0IHR5cGUgeyBEZWNvZGVkVHJhbnNhY3Rpb24gfSBmcm9tICcuL3RyYW5zYWN0aW9uL3R5cGVzJztcblxuZXhwb3J0IHR5cGUgUm9vdFdhbGxldEtleXMgPSBiaXRnby5Sb290V2FsbGV0S2V5cztcblxuZXhwb3J0IHR5cGUgVXR4b0NvaW5TcGVjaWZpYyA9IEFkZHJlc3NDb2luU3BlY2lmaWMgfCBEZXNjcmlwdG9yQWRkcmVzc0NvaW5TcGVjaWZpYztcblxuZXhwb3J0IGludGVyZmFjZSBWZXJpZnlBZGRyZXNzT3B0aW9uczxUQ29pblNwZWNpZmljIGV4dGVuZHMgVXR4b0NvaW5TcGVjaWZpYz4gZXh0ZW5kcyBCYXNlVmVyaWZ5QWRkcmVzc09wdGlvbnMge1xuICBjaGFpbj86IG51bWJlcjtcbiAgaW5kZXg6IG51bWJlcjtcbiAgY29pblNwZWNpZmljPzogVENvaW5TcGVjaWZpYztcbn1cblxuZXhwb3J0IHR5cGUgQmlwMzIyTWVzc2FnZSA9IHtcbiAgYWRkcmVzczogc3RyaW5nO1xuICBtZXNzYWdlOiBzdHJpbmc7XG59O1xuXG5leHBvcnQgaW50ZXJmYWNlIFRyYW5zYWN0aW9uSW5mbzxUTnVtYmVyIGV4dGVuZHMgbnVtYmVyIHwgYmlnaW50ID0gbnVtYmVyPiB7XG4gIC8qKiBNYXBzIHR4aWQgdG8gdHhoZXguIFJlcXVpcmVkIGZvciBvZmZsaW5lIHNpZ25pbmcuICovXG4gIHR4SGV4ZXM/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICBjaGFuZ2VBZGRyZXNzZXM/OiBzdHJpbmdbXTtcbiAgLyoqIHBzYnQgZG9lcyBub3QgcmVxdWlyZSB1bnNwZW50cy4gKi9cbiAgdW5zcGVudHM/OiBVbnNwZW50PFROdW1iZXI+W107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRXhwbGFpblRyYW5zYWN0aW9uT3B0aW9uczxUTnVtYmVyIGV4dGVuZHMgbnVtYmVyIHwgYmlnaW50ID0gbnVtYmVyPiB7XG4gIHR4SGV4OiBzdHJpbmc7XG4gIHR4SW5mbz86IFRyYW5zYWN0aW9uSW5mbzxUTnVtYmVyPjtcbiAgZmVlSW5mbz86IHN0cmluZztcbiAgcHVicz86IFRyaXBsZTxzdHJpbmc+O1xuICBjdXN0b21DaGFuZ2VYcHVicz86IFRyaXBsZTxzdHJpbmc+O1xuICBkZWNvZGVXaXRoPzogU2RrQmFja2VuZDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBEZWNvcmF0ZWRFeHBsYWluVHJhbnNhY3Rpb25PcHRpb25zPFROdW1iZXIgZXh0ZW5kcyBudW1iZXIgfCBiaWdpbnQgPSBudW1iZXI+XG4gIGV4dGVuZHMgRXhwbGFpblRyYW5zYWN0aW9uT3B0aW9uczxUTnVtYmVyPiB7XG4gIGNoYW5nZUluZm8/OiB7IGFkZHJlc3M6IHN0cmluZzsgY2hhaW46IG51bWJlcjsgaW5kZXg6IG51bWJlciB9W107XG59XG5cbmV4cG9ydCB0eXBlIFV0eG9OZXR3b3JrID0gdXR4b2xpYi5OZXR3b3JrO1xuXG5leHBvcnQgaW50ZXJmYWNlIFRyYW5zYWN0aW9uUHJlYnVpbGQ8VE51bWJlciBleHRlbmRzIG51bWJlciB8IGJpZ2ludCA9IG51bWJlcj4gZXh0ZW5kcyBCYXNlVHJhbnNhY3Rpb25QcmVidWlsZCB7XG4gIHR4SW5mbz86IFRyYW5zYWN0aW9uSW5mbzxUTnVtYmVyPjtcbiAgYmxvY2tIZWlnaHQ/OiBudW1iZXI7XG4gIGRlY29kZVdpdGg/OiBTZGtCYWNrZW5kO1xuICAvKipcbiAgICogUFNCVC1saXRlIGhleCBwcmVzZW50IG9ubHkgaW4gcGVuZGluZyBhcHByb3ZhbCBmbG93cywgd2hlcmUgYW5vdGhlciB1c2VyJ3Mgc2VuZCBmaXhlZCB0aGUgZm9ybWF0LlxuICAgKiBOb3Qgc2V0IGluIHJlZ3VsYXIgL3R4L2J1aWxkIHJlc3BvbnNlcyAod2hlcmUgdGhlIGNhbGxlciBjb250cm9scyB0aGUgYnVpbGQgcGFyYW1ldGVycykuXG4gICAqIFByZWZlcnJlZCBvdmVyIHR4SGV4IHdoZW4gcHJlc2VudCwgYXMgaXQgY2FycmllcyByaWNoZXIgZGF0YSAobm9uV2l0bmVzc1V0eG8sIHJlZGVlbVNjcmlwdCwgQklQLTMyIHBhdGhzKS5cbiAgICovXG4gIHR4SGV4UHNidD86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBUcmFuc2FjdGlvblBhcmFtcyBleHRlbmRzIEJhc2VUcmFuc2FjdGlvblBhcmFtcyB7XG4gIHdhbGxldFBhc3NwaHJhc2U/OiBzdHJpbmc7XG4gIGFsbG93RXh0ZXJuYWxDaGFuZ2VBZGRyZXNzPzogYm9vbGVhbjtcbiAgY2hhbmdlQWRkcmVzcz86IHN0cmluZztcbiAgcmJmVHhJZHM/OiBzdHJpbmdbXTtcbiAgLyoqIFBhcmFtZXRlcnMgZm9yIGJyaWRnaW5nIGludGVudHMgKGUuZy4gQlRDIC0+IHNCVEMgcGVnLWluKSwgcHJlc2VudCB3aGVuIGB0eXBlID09PSAnYnJpZGdpbmcnYC4gKi9cbiAgYnJpZGdpbmdQYXJhbXM/OiBCcmlkZ2luZ1BhcmFtcztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQYXJzZVRyYW5zYWN0aW9uT3B0aW9uczxUTnVtYmVyIGV4dGVuZHMgbnVtYmVyIHwgYmlnaW50ID0gbnVtYmVyPiBleHRlbmRzIEJhc2VQYXJzZVRyYW5zYWN0aW9uT3B0aW9ucyB7XG4gIHR4UGFyYW1zOiBUcmFuc2FjdGlvblBhcmFtcztcbiAgdHhQcmVidWlsZDogVHJhbnNhY3Rpb25QcmVidWlsZDxUTnVtYmVyPjtcbiAgd2FsbGV0OiBVdHhvV2FsbGV0O1xuICB2ZXJpZmljYXRpb24/OiBWZXJpZmljYXRpb25PcHRpb25zO1xuICByZXFJZD86IElSZXF1ZXN0VHJhY2VyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEdlbmVyYXRlQWRkcmVzc09wdGlvbnMge1xuICBhZGRyZXNzVHlwZT86IFNjcmlwdFR5cGUyT2YzO1xuICB0aHJlc2hvbGQ/OiBudW1iZXI7XG4gIGNoYWluPzogbnVtYmVyO1xuICBpbmRleD86IG51bWJlcjtcbiAgc2Vnd2l0PzogYm9vbGVhbjtcbiAgYmVjaDMyPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBHZW5lcmF0ZUZpeGVkU2NyaXB0QWRkcmVzc09wdGlvbnMgZXh0ZW5kcyBHZW5lcmF0ZUFkZHJlc3NPcHRpb25zIHtcbiAgZm9ybWF0PzogQ3JlYXRlQWRkcmVzc0Zvcm1hdDtcbiAga2V5Y2hhaW5zOiB7XG4gICAgcHViOiBzdHJpbmc7XG4gICAgYXNwS2V5SWQ/OiBzdHJpbmc7XG4gIH1bXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBZGRyZXNzRGV0YWlscyB7XG4gIGFkZHJlc3M6IHN0cmluZztcbiAgY2hhaW46IG51bWJlcjtcbiAgaW5kZXg6IG51bWJlcjtcbiAgY29pbjogc3RyaW5nO1xuICBjb2luU3BlY2lmaWM6IEFkZHJlc3NDb2luU3BlY2lmaWMgfCBEZXNjcmlwdG9yQWRkcmVzc0NvaW5TcGVjaWZpYztcbiAgYWRkcmVzc1R5cGU/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGVzY3JpcHRvckFkZHJlc3NDb2luU3BlY2lmaWMgZXh0ZW5kcyBBZGRyZXNzQ29pblNwZWNpZmljIHtcbiAgZGVzY3JpcHRvck5hbWU6IHN0cmluZztcbiAgZGVzY3JpcHRvckNoZWNrc3VtOiBzdHJpbmc7XG59XG5cbnR5cGUgVXR4b0Jhc2VTaWduVHJhbnNhY3Rpb25PcHRpb25zPFROdW1iZXIgZXh0ZW5kcyBudW1iZXIgfCBiaWdpbnQgPSBudW1iZXI+ID0gQmFzZVNpZ25UcmFuc2FjdGlvbk9wdGlvbnMgJiB7XG4gIC8qKiBUcmFuc2FjdGlvbiBwcmVidWlsZCBmcm9tIGJpdGdvIHNlcnZlciAqL1xuICB0eFByZWJ1aWxkOiB7XG4gICAgLyoqXG4gICAgICogd2FsbGV0SWQgaXMgcmVxdWlyZWQgaW4gZm9sbG93aW5nIDIgc2NlbmFyaW9zLlxuICAgICAqIDEuIEV4dGVybmFsIHNpZ25lciBleHByZXNzIG1vZGUgaXMgdXNlZC5cbiAgICAgKiAyLiBiaXRnbyBNdVNpZzIgbm9uY2UgaXMgcmVxdWVzdGVkXG4gICAgICovXG4gICAgd2FsbGV0SWQ/OiBzdHJpbmc7XG4gICAgdHhIZXg6IHN0cmluZztcbiAgICB0eEluZm8/OiBUcmFuc2FjdGlvbkluZm88VE51bWJlcj47XG4gICAgZGVjb2RlV2l0aD86IFNka0JhY2tlbmQ7XG4gIH07XG4gIC8qKiB4cHVicyB0cmlwbGUgZm9yIHdhbGxldCAodXNlciwgYmFja3VwLCBiaXRnbykuIFJlcXVpcmVkIG9ubHkgd2hlbiB0eFByZWJ1aWxkLnR4SGV4IGlzIG5vdCBhIFBTQlQgKi9cbiAgcHVicz86IFRyaXBsZTxzdHJpbmc+O1xuICAvKiogeHB1YiBmb3IgY29zaWduZXIgKGRlZmF1bHRzIHRvIGJpdGdvKSAqL1xuICBjb3NpZ25lclB1Yj86IHN0cmluZztcbiAgLyoqXG4gICAqIFdoZW4gdHJ1ZSwgY3JlYXRlcyBmdWxsLXNpZ25lZCB0cmFuc2FjdGlvbiB3aXRob3V0IHBsYWNlaG9sZGVyIHNpZ25hdHVyZXMuXG4gICAqIFdoZW4gZmFsc2UsIGNyZWF0ZXMgaGFsZi1zaWduZWQgdHJhbnNhY3Rpb24gd2l0aCBwbGFjZWhvbGRlciBzaWduYXR1cmVzLlxuICAgKi9cbiAgaXNMYXN0U2lnbmF0dXJlPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIElmIHRydWUsIGFsbG93cyBzaWduaW5nIGEgbm9uLXNlZ3dpdCBpbnB1dCB3aXRoIGEgd2l0bmVzc1V0eG8gaW5zdGVhZCByZXF1aXJpbmcgYSBwcmV2aW91c1xuICAgKiB0cmFuc2FjdGlvbiAobm9uV2l0bmVzc1V0eG8pXG4gICAqL1xuICBhbGxvd05vblNlZ3dpdFNpZ25pbmdXaXRob3V0UHJldlR4PzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIFdoZW4gdHJ1ZSwgdGhlIHNpZ25lZCB0cmFuc2FjdGlvbiB3aWxsIGJlIGNvbnZlcnRlZCBmcm9tIFBTQlQgdG8gbGVnYWN5IGZvcm1hdCBiZWZvcmUgcmV0dXJuaW5nLlxuICAgKiBTZXQgYXV0b21hdGljYWxseSBieSBwcmVzaWduVHJhbnNhY3Rpb24oKSB3aGVuIHRoZSBjYWxsZXIgZXhwbGljaXRseSByZXF1ZXN0ZWQgdHhGb3JtYXQ6ICdsZWdhY3knLlxuICAgKi9cbiAgcmV0dXJuTGVnYWN5Rm9ybWF0PzogYm9vbGVhbjtcbiAgd2FsbGV0PzogVXR4b1dhbGxldDtcbiAgLyoqXG4gICAqIFdoZW4gdHJ1ZSAoZGVmYXVsdCksIGV4dHJhY3QgZmluYWxpemVkIFBTQlQgdG8gbGVnYWN5IHRyYW5zYWN0aW9uIGZvcm1hdC5cbiAgICogV2hlbiBmYWxzZSwgcmV0dXJuIGZpbmFsaXplZCBQU0JULiBVc2VmdWwgZm9yIHRlc3RpbmcgdG8ga2VlcCB0cmFuc2FjdGlvbnMgaW4gUFNCVCBmb3JtYXQuXG4gICAqL1xuICBleHRyYWN0VHJhbnNhY3Rpb24/OiBib29sZWFuO1xuICAvKiogV2hlbiB0cnVlLCBlbWJlZHMgV0FTTS1VVFhPIHZlcnNpb24gbWV0YWRhdGEgaW50byB0aGUgc2lnbmVkIFBTQlQuIERlZmF1bHRzIHRvIGZhbHNlLiAqL1xuICB3cml0ZVNpZ25lZFdpdGg/OiBib29sZWFuO1xufTtcblxuZXhwb3J0IHR5cGUgU2lnblRyYW5zYWN0aW9uT3B0aW9uczxUTnVtYmVyIGV4dGVuZHMgbnVtYmVyIHwgYmlnaW50ID0gbnVtYmVyPiA9IFV0eG9CYXNlU2lnblRyYW5zYWN0aW9uT3B0aW9uczxUTnVtYmVyPiAmXG4gIChcbiAgICB8IHtcbiAgICAgICAgcHJ2OiBzdHJpbmc7XG4gICAgICAgIHNpZ25pbmdTdGVwPzogJ3NpZ25lck5vbmNlJyB8ICdzaWduZXJTaWduYXR1cmUnO1xuICAgICAgfVxuICAgIHwge1xuICAgICAgICBzaWduaW5nU3RlcDogJ2Nvc2lnbmVyTm9uY2UnO1xuICAgICAgfVxuICApO1xuXG5leHBvcnQgaW50ZXJmYWNlIE11bHRpU2lnQWRkcmVzcyB7XG4gIG91dHB1dFNjcmlwdDogQnVmZmVyO1xuICByZWRlZW1TY3JpcHQ/OiBCdWZmZXI7XG4gIHdpdG5lc3NTY3JpcHQ/OiBCdWZmZXI7XG4gIGFkZHJlc3M6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBSZWNvdmVyRnJvbVdyb25nQ2hhaW5PcHRpb25zIHtcbiAgdHhpZDogc3RyaW5nO1xuICByZWNvdmVyeUFkZHJlc3M6IHN0cmluZztcbiAgd2FsbGV0OiBzdHJpbmc7XG4gIHdhbGxldFBhc3NwaHJhc2U/OiBzdHJpbmc7XG4gIHhwcnY/OiBzdHJpbmc7XG4gIGFwaUtleT86IHN0cmluZztcbiAgLyoqIEBkZXByZWNhdGVkICovXG4gIGNvaW4/OiBBYnN0cmFjdFV0eG9Db2luO1xuICByZWNvdmVyeUNvaW4/OiBBYnN0cmFjdFV0eG9Db2luO1xuICBzaWduZWQ/OiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFZlcmlmeUtleVNpZ25hdHVyZXNPcHRpb25zIHtcbiAgdXNlcktleWNoYWluOiB7IHB1Yj86IHN0cmluZyB9O1xuICBrZXljaGFpblRvVmVyaWZ5OiB7IHB1Yj86IHN0cmluZyB9O1xuICBrZXlTaWduYXR1cmU6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBWZXJpZnlVc2VyUHVibGljS2V5T3B0aW9ucyB7XG4gIHVzZXJLZXljaGFpbj86IFV0eG9LZXljaGFpbjtcbiAgZGlzYWJsZU5ldHdvcmtpbmc6IGJvb2xlYW47XG4gIHR4UGFyYW1zOiBUcmFuc2FjdGlvblBhcmFtcztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBWZXJpZnlUcmFuc2FjdGlvbk9wdGlvbnM8VE51bWJlciBleHRlbmRzIG51bWJlciB8IGJpZ2ludCA9IG51bWJlcj5cbiAgZXh0ZW5kcyBCYXNlVmVyaWZ5VHJhbnNhY3Rpb25PcHRpb25zIHtcbiAgdHhQcmVidWlsZDogVHJhbnNhY3Rpb25QcmVidWlsZDxUTnVtYmVyPjtcbiAgdHhQYXJhbXM6IFRyYW5zYWN0aW9uUGFyYW1zO1xuICB3YWxsZXQ6IFV0eG9XYWxsZXQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2lnblBzYnRSZXF1ZXN0IHtcbiAgcHNidDogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNpZ25Qc2J0UmVzcG9uc2Uge1xuICBwc2J0OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBBYnN0cmFjdFV0eG9Db2luXG4gIGV4dGVuZHMgQmFzZUNvaW5cbiAgaW1wbGVtZW50cyBNdXNpZzJQYXJ0aWNpcGFudDx1dHhvbGliLmJpdGdvLlV0eG9Qc2J0PiwgTXVzaWcyUGFydGljaXBhbnQ8Zml4ZWRTY3JpcHRXYWxsZXQuQml0R29Qc2J0Plxue1xuICBhYnN0cmFjdCBuYW1lOiBVdHhvQ29pbk5hbWU7XG5cbiAgLyoqXG4gICAqIFJldHVybnMgd2hldGhlciB0aGlzIGNvaW4gaXMgYSBtYWlubmV0IGNvaW4uXG4gICAqIERlZmF1bHQgaW1wbGVtZW50YXRpb24gdXNlcyB0aGUgbmFtZSBwcm9wZXJ0eS5cbiAgICogQ2FuIGJlIG92ZXJyaWRkZW4gYnkgc3ViY2xhc3Nlcy5cbiAgICovXG4gIHByb3RlY3RlZCBpc01haW5uZXQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGlzTWFpbm5ldENvaW4odGhpcy5uYW1lKTtcbiAgfVxuXG4gIHB1YmxpYyByZWFkb25seSBhbW91bnRUeXBlOiAnbnVtYmVyJyB8ICdiaWdpbnQnO1xuXG4gIHByb3RlY3RlZCBzdXBwb3J0ZWRUeEZvcm1hdHM6IHsgcHNidDogYm9vbGVhbjsgbGVnYWN5OiBib29sZWFuIH0gPSB7XG4gICAgcHNidDogdHJ1ZSxcbiAgICBsZWdhY3k6IGZhbHNlLFxuICB9O1xuXG4gIHByb3RlY3RlZCBzdXBwb3J0ZWRTZGtCYWNrZW5kczogeyB1dHhvbGliOiBib29sZWFuOyAnd2FzbS11dHhvJzogYm9vbGVhbiB9ID0ge1xuICAgIHV0eG9saWI6IGZhbHNlLFxuICAgICd3YXNtLXV0eG8nOiB0cnVlLFxuICB9O1xuXG4gIHByb3RlY3RlZCBjb25zdHJ1Y3RvcihiaXRnbzogQml0R29CYXNlLCBhbW91bnRUeXBlOiAnbnVtYmVyJyB8ICdiaWdpbnQnID0gJ251bWJlcicpIHtcbiAgICBzdXBlcihiaXRnbyk7XG4gICAgdGhpcy5hbW91bnRUeXBlID0gYW1vdW50VHlwZTtcbiAgfVxuXG4gIGRlZmF1bHRTZGtCYWNrZW5kOiBTZGtCYWNrZW5kID0gJ3dhc20tdXR4byc7XG5cbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkIC0gd2lsbCBiZSByZW1vdmVkIHdoZW4gd2UgZHJvcCBzdXBwb3J0IGZvciB1dHhvbGliXG4gICAqIFVzZSBgbmFtZWAgcHJvcGVydHkgaW5zdGVhZC5cbiAgICovXG4gIGdldCBuZXR3b3JrKCk6IHV0eG9saWIuTmV0d29yayB7XG4gICAgcmV0dXJuIGdldE5ldHdvcmtGcm9tQ29pbk5hbWUodGhpcy5uYW1lKTtcbiAgfVxuXG4gIGdldENoYWluKCk6IFV0eG9Db2luTmFtZSB7XG4gICAgcmV0dXJuIHRoaXMubmFtZTtcbiAgfVxuXG4gIGdldEZhbWlseSgpOiBVdHhvQ29pbk5hbWVNYWlubmV0IHtcbiAgICByZXR1cm4gZ2V0TWFpbm5ldENvaW5OYW1lKHRoaXMubmFtZSk7XG4gIH1cblxuICBnZXRGdWxsTmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBnZXRGdWxsTmFtZUZyb21Db2luTmFtZSh0aGlzLm5hbWUpO1xuICB9XG5cbiAgLyoqIEluZGljYXRlcyB3aGV0aGVyIHRoZSBjb2luIHN1cHBvcnRzIGEgYmxvY2sgdGFyZ2V0ICovXG4gIHN1cHBvcnRzQmxvY2tUYXJnZXQoKTogYm9vbGVhbiB7XG4gICAgLy8gRklYTUU6IHRoZSBTREsgZG9lcyBub3Qgc2VlbSB0byB1c2UgdGhpcyBhbnl3aGVyZSBzbyBpdCBpcyB1bmNsZWFyIHdoYXQgdGhlIHB1cnBvc2Ugb2YgdGhpcyBtZXRob2QgaXNcbiAgICBzd2l0Y2ggKGdldE1haW5uZXQodGhpcy5uZXR3b3JrKSkge1xuICAgICAgY2FzZSB1dHhvbGliLm5ldHdvcmtzLmJpdGNvaW46XG4gICAgICBjYXNlIHV0eG9saWIubmV0d29ya3MuZG9nZWNvaW46XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHN3ZWVwV2l0aFNlbmRNYW55KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLyoqIEBkZXByZWNhdGVkICovXG4gIHN0YXRpYyBnZXQgdmFsaWRBZGRyZXNzVHlwZXMoKTogU2NyaXB0VHlwZTJPZjNbXSB7XG4gICAgcmV0dXJuIFsuLi5vdXRwdXRTY3JpcHRzLnNjcmlwdFR5cGVzMk9mM107XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgZmFjdG9yIGJldHdlZW4gdGhlIGJhc2UgdW5pdCBhbmQgaXRzIHNtYWxsZXN0IHN1YmRpdmlzb25cbiAgICogQHJldHVybiB7bnVtYmVyfVxuICAgKi9cbiAgZ2V0QmFzZUZhY3RvcigpOiBudW1iZXIge1xuICAgIHJldHVybiAxZTg7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgaWYgYW4gYWRkcmVzcyBpcyB2YWxpZFxuICAgKiBAcGFyYW0gYWRkcmVzc1xuICAgKiBAcGFyYW0gcGFyYW1cbiAgICovXG4gIGlzVmFsaWRBZGRyZXNzKFxuICAgIGFkZHJlc3M6IHN0cmluZyxcbiAgICBwYXJhbT86IHsgYW55Rm9ybWF0PzogYm9vbGVhbjsgYWxsb3dMaWdodG5pbmc/OiBib29sZWFuIH0gfCAvKiBsZWdhY3kgcGFyYW1ldGVyICovIGJvb2xlYW5cbiAgKTogYm9vbGVhbiB7XG4gICAgaWYgKHR5cGVvZiBwYXJhbSA9PT0gJ2Jvb2xlYW4nICYmIHBhcmFtKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2RlcHJlY2F0ZWQnKTtcbiAgICB9XG5cbiAgICBjb25zdCBhbGxvd0xpZ2h0bmluZyA9IChwYXJhbSBhcyB7IGFsbG93TGlnaHRuaW5nPzogYm9vbGVhbiB9IHwgdW5kZWZpbmVkKT8uYWxsb3dMaWdodG5pbmcgPz8gZmFsc2U7XG4gICAgaWYgKGFsbG93TGlnaHRuaW5nKSB7XG4gICAgICBpZiAoL14oMDJ8MDMpWzAtOWEtZkEtRl17NjR9JC8udGVzdChhZGRyZXNzKSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGlmIChpc0JvbHQxMUludm9pY2UoYWRkcmVzcykpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gQnkgZGVmYXVsdCwgYWxsb3cgYWxsIGFkZHJlc3MgZm9ybWF0cy5cbiAgICAvLyBBdCB0aGUgdGltZSBvZiB3cml0aW5nLCB0aGUgb25seSBhZGRpdGlvbmFsIGFkZHJlc3MgZm9ybWF0IGlzIGJjaCBjYXNoYWRkci5cbiAgICBjb25zdCBhbnlGb3JtYXQgPSAocGFyYW0gYXMgeyBhbnlGb3JtYXQ6IGJvb2xlYW4gfSB8IHVuZGVmaW5lZCk/LmFueUZvcm1hdCA/PyB0cnVlO1xuICAgIHRyeSB7XG4gICAgICAvLyBGaW5kIG91dCBpZiB0aGUgYWRkcmVzcyBpcyB2YWxpZCBmb3IgYW55IGZvcm1hdC4gVHJpZXMgYWxsIHN1cHBvcnRlZCBmb3JtYXRzIGJ5IGRlZmF1bHQuXG4gICAgICAvLyBUaHJvd3MgaWYgYWRkcmVzcyBjYW5ub3QgYmUgZGVjb2RlZCB3aXRoIGFueSBmb3JtYXQuXG4gICAgICBjb25zdCBbZm9ybWF0LCBzY3JpcHRdID0gdXR4b2xpYi5hZGRyZXNzRm9ybWF0LnRvT3V0cHV0U2NyaXB0QW5kRm9ybWF0KGFkZHJlc3MsIHRoaXMubmV0d29yayk7XG4gICAgICAvLyB1bmxlc3MgYW55Rm9ybWF0IGlzIHNldCwgb25seSAnZGVmYXVsdCcgaXMgYWxsb3dlZC5cbiAgICAgIGlmICghYW55Rm9ybWF0ICYmIGZvcm1hdCAhPT0gJ2RlZmF1bHQnKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIC8vIG1ha2Ugc3VyZSB0aGF0IGFkZHJlc3MgaXMgaW4gbm9ybWFsIHJlcHJlc2VudGF0aW9uIGZvciBnaXZlbiBmb3JtYXQuXG4gICAgICByZXR1cm4gYWRkcmVzcyA9PT0gdXR4b2xpYi5hZGRyZXNzRm9ybWF0LmZyb21PdXRwdXRTY3JpcHRXaXRoRm9ybWF0KHNjcmlwdCwgZm9ybWF0LCB0aGlzLm5ldHdvcmspO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIGlucHV0IGlzIHZhbGlkIHB1YmxpYyBrZXkgZm9yIHRoZSBjb2luLlxuICAgKlxuICAgKiBAcGFyYW0ge1N0cmluZ30gcHViIHRoZSBwdWIgdG8gYmUgY2hlY2tlZFxuICAgKiBAcmV0dXJucyB7Qm9vbGVhbn0gaXMgaXQgdmFsaWQ/XG4gICAqL1xuICBpc1ZhbGlkUHViKHB1Yjogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBCSVAzMi5mcm9tQmFzZTU4KHB1YikuaXNOZXV0ZXJlZCgpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVGhpcyBpcyBjYWxsZWQgYmVmb3JlIGNyYWZ0aW5nIHRoZSBIVFRQIHJlcXVlc3QgdG8gdGhlIEJpdEdvIEFQSS5cbiAgICogSXQgY29udmVydHMgdGhlIHJlY2lwaWVudCBhZGRyZXNzIGBzY3JpcHRQdWJLZXk6Li4uYCB0byB7IHNjcmlwdDogc3RyaW5nIH0gfCB7IGFkZHJlc3M6IHN0cmluZyB9LlxuICAgKi9cbiAgb3ZlcnJpZGUgcHJlcHJvY2Vzc0J1aWxkUGFyYW1zKHBhcmFtczogUmVjb3JkPHN0cmluZywgYW55Pik6IFJlY29yZDxzdHJpbmcsIGFueT4ge1xuICAgIGlmIChwYXJhbXMucmVjaXBpZW50cyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBwYXJhbXMucmVjaXBpZW50cyA9XG4gICAgICAgIHBhcmFtcy5yZWNpcGllbnRzIGluc3RhbmNlb2YgQXJyYXlcbiAgICAgICAgICA/IHBhcmFtcz8ucmVjaXBpZW50cz8ubWFwKChyZWNpcGllbnQpID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgeyBhZGRyZXNzLCAuLi5yZXN0IH0gPSByZWNpcGllbnQ7XG4gICAgICAgICAgICAgIGlmIChhZGRyZXNzID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVjaXBpZW50OyAvLyBBbHJlYWR5IHsgc2NyaXB0LCBhbW91bnQgfSDigJQgcGFzcyB0aHJvdWdoIHVuY2hhbmdlZFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHJldHVybiB7IC4uLnJlc3QsIC4uLmZyb21FeHRlbmRlZEFkZHJlc3NGb3JtYXQoYWRkcmVzcykgfTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgOiBwYXJhbXMucmVjaXBpZW50cztcbiAgICB9XG5cbiAgICByZXR1cm4gcGFyYW1zO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgbGF0ZXN0IGJsb2NrIGhlaWdodFxuICAgKiBAcGFyYW0gcmVxSWRcbiAgICovXG4gIGFzeW5jIGdldExhdGVzdEJsb2NrSGVpZ2h0KHJlcUlkPzogUmVxdWVzdFRyYWNlcik6IFByb21pc2U8bnVtYmVyPiB7XG4gICAgaWYgKHJlcUlkKSB7XG4gICAgICB0aGlzLmJpdGdvLnNldFJlcXVlc3RUcmFjZXIocmVxSWQpO1xuICAgIH1cbiAgICBjb25zdCBjaGFpbmhlYWQgPSBhd2FpdCB0aGlzLmJpdGdvLmdldCh0aGlzLnVybCgnL3B1YmxpYy9ibG9jay9sYXRlc3QnKSkucmVzdWx0KCk7XG4gICAgcmV0dXJuIChjaGFpbmhlYWQgYXMgYW55KS5oZWlnaHQ7XG4gIH1cblxuICBjaGVja1JlY2lwaWVudChyZWNpcGllbnQ6IHsgYWRkcmVzcz86IHN0cmluZzsgYW1vdW50OiBudW1iZXIgfCBzdHJpbmcgfSk6IHZvaWQge1xuICAgIGFzc2VydFZhbGlkVHJhbnNhY3Rpb25SZWNpcGllbnQocmVjaXBpZW50KTtcbiAgICBpZiAocmVjaXBpZW50LmFkZHJlc3MgJiYgIWlzU2NyaXB0UmVjaXBpZW50KHJlY2lwaWVudC5hZGRyZXNzKSkge1xuICAgICAgc3VwZXIuY2hlY2tSZWNpcGllbnQoeyBhZGRyZXNzOiByZWNpcGllbnQuYWRkcmVzcywgYW1vdW50OiByZWNpcGllbnQuYW1vdW50IH0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSdW4gY3VzdG9tIGNvaW4gbG9naWMgYWZ0ZXIgYSB0cmFuc2FjdGlvbiBwcmVidWlsZCBoYXMgYmVlbiByZWNlaXZlZCBmcm9tIEJpdEdvXG4gICAqIEBwYXJhbSBwcmVidWlsZFxuICAgKi9cbiAgYXN5bmMgcG9zdFByb2Nlc3NQcmVidWlsZDxUTnVtYmVyIGV4dGVuZHMgbnVtYmVyIHwgYmlnaW50PihcbiAgICBwcmVidWlsZDogVHJhbnNhY3Rpb25QcmVidWlsZDxUTnVtYmVyPlxuICApOiBQcm9taXNlPFRyYW5zYWN0aW9uUHJlYnVpbGQ8VE51bWJlcj4+IHtcbiAgICBjb25zdCB0eCA9IHRoaXMuZGVjb2RlVHJhbnNhY3Rpb25Gcm9tUHJlYnVpbGQocHJlYnVpbGQpO1xuICAgIGlmIChfLmlzVW5kZWZpbmVkKHByZWJ1aWxkLmJsb2NrSGVpZ2h0KSkge1xuICAgICAgcHJlYnVpbGQuYmxvY2tIZWlnaHQgPSAoYXdhaXQgdGhpcy5nZXRMYXRlc3RCbG9ja0hlaWdodCgpKSBhcyBudW1iZXI7XG4gICAgfVxuICAgIHJldHVybiBfLmV4dGVuZCh7fSwgcHJlYnVpbGQsIHsgdHhIZXg6IGVuY29kZVRyYW5zYWN0aW9uKHR4KS50b1N0cmluZygnaGV4JykgfSk7XG4gIH1cblxuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgLSB3aWxsIGJlIHJlbW92ZWQgd2hlbiB3ZSBkcm9wIHN1cHBvcnQgZm9yIHV0eG9saWJcbiAgICogRGV0ZXJtaW5lIGFuIGFkZHJlc3MnIHR5cGUgYmFzZWQgb24gaXRzIHdpdG5lc3MgYW5kIHJlZGVlbSBzY3JpcHQgcHJlc2VuY2VcbiAgICogQHBhcmFtIGFkZHJlc3NEZXRhaWxzXG4gICAqL1xuICBzdGF0aWMgaW5mZXJBZGRyZXNzVHlwZShhZGRyZXNzRGV0YWlsczogeyBjaGFpbjogbnVtYmVyIH0pOiBTY3JpcHRUeXBlMk9mMyB8IG51bGwge1xuICAgIHJldHVybiBpc0NoYWluQ29kZShhZGRyZXNzRGV0YWlscy5jaGFpbikgPyBzY3JpcHRUeXBlRm9yQ2hhaW4oYWRkcmVzc0RldGFpbHMuY2hhaW4pIDogbnVsbDtcbiAgfVxuXG4gIGNyZWF0ZVRyYW5zYWN0aW9uRnJvbUhleDxUTnVtYmVyIGV4dGVuZHMgbnVtYmVyIHwgYmlnaW50ID0gbnVtYmVyPihcbiAgICBoZXg6IHN0cmluZ1xuICApOiB1dHhvbGliLmJpdGdvLlV0eG9UcmFuc2FjdGlvbjxUTnVtYmVyPiB7XG4gICAgcmV0dXJuIHV0eG9saWIuYml0Z28uY3JlYXRlVHJhbnNhY3Rpb25Gcm9tSGV4PFROdW1iZXI+KGhleCwgdGhpcy5uZXR3b3JrLCB0aGlzLmFtb3VudFR5cGUpO1xuICB9XG5cbiAgZGVjb2RlVHJhbnNhY3Rpb248VE51bWJlciBleHRlbmRzIG51bWJlciB8IGJpZ2ludD4oXG4gICAgaW5wdXQ6IEJ1ZmZlciB8IHN0cmluZyxcbiAgICBkZWNvZGVXaXRoOiBTZGtCYWNrZW5kID0gdGhpcy5kZWZhdWx0U2RrQmFja2VuZFxuICApOiBEZWNvZGVkVHJhbnNhY3Rpb248VE51bWJlcj4ge1xuICAgIGlmICh0eXBlb2YgaW5wdXQgPT09ICdzdHJpbmcnKSB7XG4gICAgICBjb25zdCBidWZmZXIgPSBzdHJpbmdUb0J1ZmZlclRyeUZvcm1hdHMoaW5wdXQsIFsnaGV4JywgJ2Jhc2U2NCddKTtcbiAgICAgIHJldHVybiB0aGlzLmRlY29kZVRyYW5zYWN0aW9uKGJ1ZmZlciwgZGVjb2RlV2l0aCk7XG4gICAgfVxuXG4gICAgaWYgKHV0eG9saWIuYml0Z28uaXNQc2J0KGlucHV0KSkge1xuICAgICAgaWYgKHRoaXMuc3VwcG9ydGVkU2RrQmFja2VuZHNbZGVjb2RlV2l0aF0gIT09IHRydWUpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBTREsgc3VwcG9ydCBmb3IgZGVjb2RlV2l0aD0ke2RlY29kZVdpdGh9IGlzIG5vdCBhdmFpbGFibGUgb24gdGhpcyBlbnZpcm9ubWVudC5gKTtcbiAgICAgIH1cblxuICAgICAgaWYgKCF0aGlzLnN1cHBvcnRlZFR4Rm9ybWF0cy5wc2J0KSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvckRlcHJlY2F0ZWRUeEZvcm1hdCgncHNidCcpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGRlY29kZVBzYnRXaXRoKGlucHV0LCB0aGlzLm5hbWUsIGRlY29kZVdpdGgpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBMZWdhY3kgZm9ybWF0IHRyYW5zYWN0aW9ucyBhcmUgZGVwcmVjYXRlZC4gVGhpcyB3aWxsIGJlIGFuIHVuY29uZGl0aW9uYWwgZXJyb3IgaW4gdGhlIGZ1dHVyZS5cbiAgICAgIGlmICghdGhpcy5zdXBwb3J0ZWRUeEZvcm1hdHMubGVnYWN5KSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvckRlcHJlY2F0ZWRUeEZvcm1hdCgnbGVnYWN5Jyk7XG4gICAgICB9XG4gICAgICBpZiAoZGVjb2RlV2l0aCAhPT0gJ3V0eG9saWInKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ3JlY2VpdmVkIGRlY29kZVdpdGggaGludCAlcywgaWdub3JpbmcgZm9yIGxlZ2FjeSB0cmFuc2FjdGlvbicsIGRlY29kZVdpdGgpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHV0eG9saWIuYml0Z28uY3JlYXRlVHJhbnNhY3Rpb25Gcm9tQnVmZmVyKGlucHV0LCB0aGlzLm5ldHdvcmssIHtcbiAgICAgICAgYW1vdW50VHlwZTogdGhpcy5hbW91bnRUeXBlLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgZGVjb2RlVHJhbnNhY3Rpb25Bc1BzYnQoaW5wdXQ6IEJ1ZmZlciB8IHN0cmluZyk6IHV0eG9saWIuYml0Z28uVXR4b1BzYnQgfCBmaXhlZFNjcmlwdFdhbGxldC5CaXRHb1BzYnQge1xuICAgIGNvbnN0IGRlY29kZWQgPSB0aGlzLmRlY29kZVRyYW5zYWN0aW9uKGlucHV0KTtcbiAgICBpZiAoZGVjb2RlZCBpbnN0YW5jZW9mIGZpeGVkU2NyaXB0V2FsbGV0LkJpdEdvUHNidCB8fCBkZWNvZGVkIGluc3RhbmNlb2YgdXR4b2xpYi5iaXRnby5VdHhvUHNidCkge1xuICAgICAgcmV0dXJuIGRlY29kZWQ7XG4gICAgfVxuICAgIHRocm93IG5ldyBFcnJvcignZXhwZWN0ZWQgcHNidCBidXQgZ290IHRyYW5zYWN0aW9uJyk7XG4gIH1cblxuICBkZWNvZGVUcmFuc2FjdGlvbkZyb21QcmVidWlsZDxUTnVtYmVyIGV4dGVuZHMgbnVtYmVyIHwgYmlnaW50PihwcmVidWlsZDoge1xuICAgIHR4SGV4Pzogc3RyaW5nO1xuICAgIHR4QmFzZTY0Pzogc3RyaW5nO1xuICAgIC8qKiBTZWUgVHJhbnNhY3Rpb25QcmVidWlsZC50eEhleFBzYnQg4oCUIG9ubHkgcHJlc2VudCBpbiBwZW5kaW5nIGFwcHJvdmFsIGZsb3dzLiAqL1xuICAgIHR4SGV4UHNidD86IHN0cmluZztcbiAgICBkZWNvZGVXaXRoPzogc3RyaW5nO1xuICB9KTogRGVjb2RlZFRyYW5zYWN0aW9uPFROdW1iZXI+IHtcbiAgICBjb25zdCBzdHJpbmcgPSBwcmVidWlsZC50eEhleFBzYnQgPz8gcHJlYnVpbGQudHhIZXggPz8gcHJlYnVpbGQudHhCYXNlNjQ7XG4gICAgaWYgKCFzdHJpbmcpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignbWlzc2luZyByZXF1aXJlZCB0eEhleCBvciB0eEJhc2U2NCBwcm9wZXJ0eScpO1xuICAgIH1cbiAgICBsZXQgeyBkZWNvZGVXaXRoIH0gPSBwcmVidWlsZDtcbiAgICBpZiAoZGVjb2RlV2l0aCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAodHlwZW9mIGRlY29kZVdpdGggIT09ICdzdHJpbmcnIHx8ICFpc1Nka0JhY2tlbmQoZGVjb2RlV2l0aCkpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignZGVjb2RlV2l0aCAlcyBpcyBub3QgYSB2YWxpZCB2YWx1ZSwgdXNpbmcgZGVmYXVsdCcsIGRlY29kZVdpdGgpO1xuICAgICAgICBkZWNvZGVXaXRoID0gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcy5kZWNvZGVUcmFuc2FjdGlvbihzdHJpbmcsIGRlY29kZVdpdGgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEV4dHJhY3QgYW5kIGZpbGwgdHJhbnNhY3Rpb24gZGV0YWlscyBzdWNoIGFzIGludGVybmFsL2NoYW5nZSBzcGVuZCwgZXh0ZXJuYWwgc3BlbmQgKGV4cGxpY2l0IHZzLiBpbXBsaWNpdCksIGV0Yy5cbiAgICogQHBhcmFtIHBhcmFtc1xuICAgKiBAcmV0dXJucyB7Kn1cbiAgICovXG4gIGFzeW5jIHBhcnNlVHJhbnNhY3Rpb248VE51bWJlciBleHRlbmRzIG51bWJlciB8IGJpZ2ludCA9IG51bWJlcj4oXG4gICAgcGFyYW1zOiBQYXJzZVRyYW5zYWN0aW9uT3B0aW9uczxUTnVtYmVyPlxuICApOiBQcm9taXNlPFBhcnNlZFRyYW5zYWN0aW9uPFROdW1iZXI+PiB7XG4gICAgcmV0dXJuIHBhcnNlVHJhbnNhY3Rpb24odGhpcywgcGFyYW1zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCAtIHVzZSBmdW5jdGlvbiB2ZXJpZnlVc2VyUHVibGljS2V5IGluc3RlYWRcbiAgICovXG4gIHByb3RlY3RlZCB2ZXJpZnlVc2VyUHVibGljS2V5KHBhcmFtczogVmVyaWZ5VXNlclB1YmxpY0tleU9wdGlvbnMpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdmVyaWZ5VXNlclB1YmxpY0tleSh0aGlzLmJpdGdvLCBwYXJhbXMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkIC0gdXNlIGZ1bmN0aW9uIHZlcmlmeUtleVNpZ25hdHVyZSBpbnN0ZWFkXG4gICAqL1xuICBwdWJsaWMgdmVyaWZ5S2V5U2lnbmF0dXJlKHBhcmFtczogVmVyaWZ5S2V5U2lnbmF0dXJlc09wdGlvbnMpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdmVyaWZ5S2V5U2lnbmF0dXJlKHBhcmFtcyk7XG4gIH1cblxuICAvKipcbiAgICogVmVyaWZ5IHRoYXQgYSB0cmFuc2FjdGlvbiBwcmVidWlsZCBjb21wbGllcyB3aXRoIHRoZSBvcmlnaW5hbCBpbnRlbnRpb25cbiAgICpcbiAgICogQHBhcmFtIHBhcmFtc1xuICAgKiBAcGFyYW0gcGFyYW1zLnR4UGFyYW1zIHBhcmFtcyBvYmplY3QgcGFzc2VkIHRvIHNlbmRcbiAgICogQHBhcmFtIHBhcmFtcy50eFByZWJ1aWxkIHByZWJ1aWxkIG9iamVjdCByZXR1cm5lZCBieSBzZXJ2ZXJcbiAgICogQHBhcmFtIHBhcmFtcy50eFByZWJ1aWxkLnR4SGV4IHByZWJ1aWx0IHRyYW5zYWN0aW9uJ3MgdHhIZXggZm9ybVxuICAgKiBAcGFyYW0gcGFyYW1zLndhbGxldCBXYWxsZXQgb2JqZWN0IHRvIG9idGFpbiBrZXlzIHRvIHZlcmlmeSBhZ2FpbnN0XG4gICAqIEBwYXJhbSBwYXJhbXMudmVyaWZpY2F0aW9uIE9iamVjdCBzcGVjaWZ5aW5nIHNvbWUgdmVyaWZpY2F0aW9uIHBhcmFtZXRlcnNcbiAgICogQHBhcmFtIHBhcmFtcy52ZXJpZmljYXRpb24uZGlzYWJsZU5ldHdvcmtpbmcgRGlzYWxsb3cgZmV0Y2hpbmcgYW55IGRhdGEgZnJvbSB0aGUgaW50ZXJuZXQgZm9yIHZlcmlmaWNhdGlvbiBwdXJwb3Nlc1xuICAgKiBAcGFyYW0gcGFyYW1zLnZlcmlmaWNhdGlvbi5rZXljaGFpbnMgUGFzcyBrZXljaGFpbnMgbWFudWFsbHkgcmF0aGVyIHRoYW4gZmV0Y2hpbmcgdGhlbSBieSBpZFxuICAgKiBAcGFyYW0gcGFyYW1zLnZlcmlmaWNhdGlvbi5hZGRyZXNzZXMgQWRkcmVzcyBkZXRhaWxzIHRvIHBhc3MgaW4gZm9yIG91dC1vZi1iYW5kIHZlcmlmaWNhdGlvblxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2ZXJpZmljYXRpb24gcGFzc2VzXG4gICAqIEB0aHJvd3Mge1R4SW50ZW50TWlzbWF0Y2hFcnJvcn0gaWYgdHJhbnNhY3Rpb24gdmFsaWRhdGlvbiBmYWlsc1xuICAgKiBAdGhyb3dzIHtUeEludGVudE1pc21hdGNoUmVjaXBpZW50RXJyb3J9IGlmIHRyYW5zYWN0aW9uIHJlY2lwaWVudHMgZG9uJ3QgbWF0Y2ggdXNlciBpbnRlbnRcbiAgICovXG4gIGFzeW5jIHZlcmlmeVRyYW5zYWN0aW9uPFROdW1iZXIgZXh0ZW5kcyBudW1iZXIgfCBiaWdpbnQgPSBudW1iZXI+KFxuICAgIHBhcmFtczogVmVyaWZ5VHJhbnNhY3Rpb25PcHRpb25zPFROdW1iZXI+XG4gICk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gYXdhaXQgdmVyaWZ5VHJhbnNhY3Rpb24odGhpcywgdGhpcy5iaXRnbywgcGFyYW1zKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgQWdncmVnYXRlVmFsaWRhdGlvbkVycm9yKSB7XG4gICAgICAgIGNvbnN0IHR4RXhwbGFuYXRpb24gPSBhd2FpdCBUeEludGVudE1pc21hdGNoRXJyb3IudHJ5R2V0VHhFeHBsYW5hdGlvbihcbiAgICAgICAgICB0aGlzIGFzIHVua25vd24gYXMgSUJhc2VDb2luLFxuICAgICAgICAgIHBhcmFtcy50eFByZWJ1aWxkXG4gICAgICAgICk7XG4gICAgICAgIHRocm93IGNvbnZlcnRWYWxpZGF0aW9uRXJyb3JUb1R4SW50ZW50TWlzbWF0Y2goXG4gICAgICAgICAgZXJyb3IsXG4gICAgICAgICAgcGFyYW1zLnJlcUlkLFxuICAgICAgICAgIHBhcmFtcy50eFBhcmFtcyxcbiAgICAgICAgICBwYXJhbXMudHhQcmVidWlsZC50eEhleCxcbiAgICAgICAgICB0eEV4cGxhbmF0aW9uXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogTWFrZSBzdXJlIGFuIGFkZHJlc3MgaXMgdmFsaWQgYW5kIHRocm93IGFuIGVycm9yIGlmIGl0J3Mgbm90LlxuICAgKiBAcGFyYW0gcGFyYW1zLmFkZHJlc3MgVGhlIGFkZHJlc3Mgc3RyaW5nIG9uIHRoZSBuZXR3b3JrXG4gICAqIEBwYXJhbSBwYXJhbXMuYWRkcmVzc1R5cGVcbiAgICogQHBhcmFtIHBhcmFtcy5rZXljaGFpbnMgS2V5Y2hhaW4gb2JqZWN0cyB3aXRoIHhwdWJzXG4gICAqIEBwYXJhbSBwYXJhbXMuY29pblNwZWNpZmljIENvaW4tc3BlY2lmaWMgZGV0YWlscyBmb3IgdGhlIGFkZHJlc3Mgc3VjaCBhcyBhIHdpdG5lc3Mgc2NyaXB0XG4gICAqIEBwYXJhbSBwYXJhbXMuY2hhaW4gRGVyaXZhdGlvbiBjaGFpblxuICAgKiBAcGFyYW0gcGFyYW1zLmluZGV4IERlcml2YXRpb24gaW5kZXhcbiAgICogQHRocm93cyB7SW52YWxpZEFkZHJlc3NFcnJvcn1cbiAgICogQHRocm93cyB7SW52YWxpZEFkZHJlc3NEZXJpdmF0aW9uUHJvcGVydHlFcnJvcn1cbiAgICogQHRocm93cyB7VW5leHBlY3RlZEFkZHJlc3NFcnJvcn1cbiAgICovXG4gIGFzeW5jIGlzV2FsbGV0QWRkcmVzcyhwYXJhbXM6IFZlcmlmeUFkZHJlc3NPcHRpb25zPFV0eG9Db2luU3BlY2lmaWM+LCB3YWxsZXQ/OiBJV2FsbGV0KTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3QgeyBhZGRyZXNzLCBrZXljaGFpbnMsIGNoYWluLCBpbmRleCB9ID0gcGFyYW1zO1xuXG4gICAgaWYgKCF0aGlzLmlzVmFsaWRBZGRyZXNzKGFkZHJlc3MpKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFkZHJlc3NFcnJvcihgaW52YWxpZCBhZGRyZXNzOiAke2FkZHJlc3N9YCk7XG4gICAgfVxuXG4gICAgaWYgKHdhbGxldCAmJiBpc0Rlc2NyaXB0b3JXYWxsZXQod2FsbGV0KSkge1xuICAgICAgaWYgKCFrZXljaGFpbnMpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdtaXNzaW5nIHJlcXVpcmVkIHBhcmFtIGtleWNoYWlucycpO1xuICAgICAgfVxuICAgICAgaWYgKCFpc1RyaXBsZShrZXljaGFpbnMpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcigna2V5Y2hhaW5zIG11c3QgYmUgYSB0cmlwbGUnKTtcbiAgICAgIH1cbiAgICAgIGFzc2VydERlc2NyaXB0b3JXYWxsZXRBZGRyZXNzKFxuICAgICAgICB0aGlzLm5hbWUsXG4gICAgICAgIHBhcmFtcyxcbiAgICAgICAgZ2V0RGVzY3JpcHRvck1hcEZyb21XYWxsZXQod2FsbGV0LCB0b0JpcDMyVHJpcGxlKGtleWNoYWlucyksIGdldFBvbGljeUZvckVudih0aGlzLmJpdGdvLmVudikpXG4gICAgICApO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgaWYgKChfLmlzVW5kZWZpbmVkKGNoYWluKSAmJiBfLmlzVW5kZWZpbmVkKGluZGV4KSkgfHwgIShfLmlzRmluaXRlKGNoYWluKSAmJiBfLmlzRmluaXRlKGluZGV4KSkpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQWRkcmVzc0Rlcml2YXRpb25Qcm9wZXJ0eUVycm9yKFxuICAgICAgICBgYWRkcmVzcyB2YWxpZGF0aW9uIGZhaWx1cmU6IGludmFsaWQgY2hhaW4gKCR7Y2hhaW59KSBvciBpbmRleCAoJHtpbmRleH0pYFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAoIWtleWNoYWlucykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdtaXNzaW5nIHJlcXVpcmVkIHBhcmFtIGtleWNoYWlucycpO1xuICAgIH1cblxuICAgIGFzc2VydEZpeGVkU2NyaXB0V2FsbGV0QWRkcmVzcyh0aGlzLm5hbWUsIHtcbiAgICAgIGFkZHJlc3MsXG4gICAgICBrZXljaGFpbnMsXG4gICAgICBmb3JtYXQ6IHBhcmFtcy5mb3JtYXQgPz8gJ2Jhc2U1OCcsXG4gICAgICBjaGFpbixcbiAgICAgIGluZGV4LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIGFkZHJlc3NUeXBlXG4gICAqIEByZXR1cm5zIHRydWUgaWZmIGNvaW4gc3VwcG9ydHMgc3BlbmRpbmcgZnJvbSB1bnNwZW50VHlwZVxuICAgKi9cbiAgc3VwcG9ydHNBZGRyZXNzVHlwZShhZGRyZXNzVHlwZTogU2NyaXB0VHlwZTJPZjMpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdXR4b2xpYi5iaXRnby5vdXRwdXRTY3JpcHRzLmlzU3VwcG9ydGVkU2NyaXB0VHlwZSh0aGlzLm5ldHdvcmssIGFkZHJlc3NUeXBlKTtcbiAgfVxuXG4gIC8qKiBpbmhlcml0ZWQgZG9jICovXG4gIGdldERlZmF1bHRNdWx0aXNpZ1R5cGUoKTogTXVsdGlzaWdUeXBlIHtcbiAgICByZXR1cm4gbXVsdGlzaWdUeXBlcy5vbmNoYWluO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSBjaGFpblxuICAgKiBAcmV0dXJuIHRydWUgaWZmIGNvaW4gc3VwcG9ydHMgc3BlbmRpbmcgZnJvbSBjaGFpblxuICAgKi9cbiAgc3VwcG9ydHNBZGRyZXNzQ2hhaW4oY2hhaW46IG51bWJlcik6IGJvb2xlYW4ge1xuICAgIHJldHVybiBpc0NoYWluQ29kZShjaGFpbikgJiYgdGhpcy5zdXBwb3J0c0FkZHJlc3NUeXBlKHV0eG9saWIuYml0Z28uc2NyaXB0VHlwZUZvckNoYWluKGNoYWluKSk7XG4gIH1cblxuICBrZXlJZHNGb3JTaWduaW5nKCk6IG51bWJlcltdIHtcbiAgICByZXR1cm4gW0tleUluZGljZXMuVVNFUiwgS2V5SW5kaWNlcy5CQUNLVVAsIEtleUluZGljZXMuQklUR09dO1xuICB9XG5cbiAgLyoqXG4gICAqIEByZXR1cm5zIGlucHV0IHBzYnQgYWRkZWQgd2l0aCBkZXRlcm1pbmlzdGljIE11U2lnMiBub25jZSBmb3IgYml0Z28ga2V5IGZvciBlYWNoIE11U2lnMiBpbnB1dHMuXG4gICAqIEBwYXJhbSBwc2J0IGFsbCBNdVNpZzIgaW5wdXRzIHNob3VsZCBjb250YWluIHVzZXIgTXVTaWcyIG5vbmNlXG4gICAqIEBwYXJhbSB3YWxsZXRJZFxuICAgKi9cbiAgYXN5bmMgZ2V0TXVzaWcyTm9uY2VzKHBzYnQ6IHV0eG9saWIuYml0Z28uVXR4b1BzYnQsIHdhbGxldElkOiBzdHJpbmcpOiBQcm9taXNlPHV0eG9saWIuYml0Z28uVXR4b1BzYnQ+O1xuICBhc3luYyBnZXRNdXNpZzJOb25jZXMocHNidDogZml4ZWRTY3JpcHRXYWxsZXQuQml0R29Qc2J0LCB3YWxsZXRJZDogc3RyaW5nKTogUHJvbWlzZTxmaXhlZFNjcmlwdFdhbGxldC5CaXRHb1BzYnQ+O1xuICBhc3luYyBnZXRNdXNpZzJOb25jZXM8VCBleHRlbmRzIHV0eG9saWIuYml0Z28uVXR4b1BzYnQgfCBmaXhlZFNjcmlwdFdhbGxldC5CaXRHb1BzYnQ+KFxuICAgIHBzYnQ6IFQsXG4gICAgd2FsbGV0SWQ6IHN0cmluZ1xuICApOiBQcm9taXNlPFQ+O1xuICBhc3luYyBnZXRNdXNpZzJOb25jZXM8VCBleHRlbmRzIHV0eG9saWIuYml0Z28uVXR4b1BzYnQgfCBmaXhlZFNjcmlwdFdhbGxldC5CaXRHb1BzYnQ+KFxuICAgIHBzYnQ6IFQsXG4gICAgd2FsbGV0SWQ6IHN0cmluZ1xuICApOiBQcm9taXNlPFQ+IHtcbiAgICBjb25zdCBidWZmZXIgPSBlbmNvZGVUcmFuc2FjdGlvbihwc2J0KTtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuYml0Z29cbiAgICAgIC5wb3N0KHRoaXMudXJsKCcvd2FsbGV0LycgKyB3YWxsZXRJZCArICcvdHgvc2lnbnBzYnQnKSlcbiAgICAgIC5zZW5kKHsgcHNidDogYnVmZmVyLnRvU3RyaW5nKCdoZXgnKSB9KVxuICAgICAgLnJlc3VsdCgpO1xuICAgIGlmIChwc2J0IGluc3RhbmNlb2YgdXR4b2xpYi5iaXRnby5VdHhvUHNidCkge1xuICAgICAgcmV0dXJuIGRlY29kZVBzYnRXaXRoKHJlc3BvbnNlLnBzYnQsIHRoaXMubmFtZSwgJ3V0eG9saWInKSBhcyBUO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZGVjb2RlUHNidFdpdGgocmVzcG9uc2UucHNidCwgdGhpcy5uYW1lLCAnd2FzbS11dHhvJykgYXMgVDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgVXNlIGdldE11c2lnMk5vbmNlcyBpbnN0ZWFkXG4gICAqIEByZXR1cm5zIGlucHV0IHBzYnQgYWRkZWQgd2l0aCBkZXRlcm1pbmlzdGljIE11U2lnMiBub25jZSBmb3IgYml0Z28ga2V5IGZvciBlYWNoIE11U2lnMiBpbnB1dHMuXG4gICAqIEBwYXJhbSBwc2J0SGV4IGFsbCBNdVNpZzIgaW5wdXRzIHNob3VsZCBjb250YWluIHVzZXIgTXVTaWcyIG5vbmNlXG4gICAqIEBwYXJhbSB3YWxsZXRJZFxuICAgKi9cbiAgYXN5bmMgc2lnblBzYnQocHNidEhleDogc3RyaW5nLCB3YWxsZXRJZDogc3RyaW5nKTogUHJvbWlzZTxTaWduUHNidFJlc3BvbnNlPiB7XG4gICAgY29uc3QgcHNidCA9IGF3YWl0IHRoaXMuZ2V0TXVzaWcyTm9uY2VzKHRoaXMuZGVjb2RlVHJhbnNhY3Rpb25Bc1BzYnQocHNidEhleCksIHdhbGxldElkKTtcbiAgICByZXR1cm4geyBwc2J0OiBlbmNvZGVUcmFuc2FjdGlvbihwc2J0KS50b1N0cmluZygnaGV4JykgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcmV0dXJucyBpbnB1dCBwc2J0IGFkZGVkIHdpdGggZGV0ZXJtaW5pc3RpYyBNdVNpZzIgbm9uY2UgZm9yIGJpdGdvIGtleSBmb3IgZWFjaCBNdVNpZzIgaW5wdXRzIGZyb20gT1ZDLlxuICAgKiBAcGFyYW0gb3ZjSnNvbiBKU09OIG9iamVjdCBwcm92aWRlZCBieSBPVkMgd2l0aCBmaWVsZHMgcHNidEhleCBhbmQgd2FsbGV0SWRcbiAgICovXG4gIGFzeW5jIHNpZ25Qc2J0RnJvbU9WQyhvdmNKc29uOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik6IFByb21pc2U8UmVjb3JkPHN0cmluZywgdW5rbm93bj4+IHtcbiAgICBhc3NlcnQob3ZjSnNvblsncHNidEhleCddLCAnb3ZjSnNvbiBtdXN0IGNvbnRhaW4gcHNidEhleCcpO1xuICAgIGFzc2VydChvdmNKc29uWyd3YWxsZXRJZCddLCAnb3ZjSnNvbiBtdXN0IGNvbnRhaW4gd2FsbGV0SWQnKTtcbiAgICBjb25zdCBoZXggPSBvdmNKc29uWydwc2J0SGV4J10gYXMgc3RyaW5nO1xuICAgIGNvbnN0IHdhbGxldElkID0gb3ZjSnNvblsnd2FsbGV0SWQnXSBhcyBzdHJpbmc7XG4gICAgY29uc3QgcHNidCA9IGF3YWl0IHRoaXMuZ2V0TXVzaWcyTm9uY2VzKHRoaXMuZGVjb2RlVHJhbnNhY3Rpb25Bc1BzYnQoaGV4KSwgd2FsbGV0SWQpO1xuICAgIHJldHVybiBfLmV4dGVuZChvdmNKc29uLCB7IHR4SGV4OiBlbmNvZGVUcmFuc2FjdGlvbihwc2J0KS50b1N0cmluZygnaGV4JykgfSk7XG4gIH1cblxuICAvKipcbiAgICogQXNzZW1ibGUga2V5Y2hhaW4gYW5kIGhhbGYtc2lnbiBwcmVidWlsdCB0cmFuc2FjdGlvblxuICAgKiBAcGFyYW0gcGFyYW1zIC0ge0BzZWUgU2lnblRyYW5zYWN0aW9uT3B0aW9uc31cbiAgICogQHJldHVybnMge1Byb21pc2U8U2lnbmVkVHJhbnNhY3Rpb24gfCBIYWxmU2lnbmVkVXR4b1RyYW5zYWN0aW9uPn1cbiAgICovXG4gIGFzeW5jIHNpZ25UcmFuc2FjdGlvbjxUTnVtYmVyIGV4dGVuZHMgbnVtYmVyIHwgYmlnaW50ID0gbnVtYmVyPihcbiAgICBwYXJhbXM6IFNpZ25UcmFuc2FjdGlvbk9wdGlvbnM8VE51bWJlcj5cbiAgKTogUHJvbWlzZTxTaWduZWRUcmFuc2FjdGlvbiB8IEhhbGZTaWduZWRVdHhvVHJhbnNhY3Rpb24+IHtcbiAgICByZXR1cm4gc2lnblRyYW5zYWN0aW9uPFROdW1iZXI+KHRoaXMsIHRoaXMuYml0Z28sIHBhcmFtcyk7XG4gIH1cblxuICAvKipcbiAgICogU2lnbiBhIHRyYW5zYWN0aW9uIHdpdGggYSBjdXN0b20gc2lnbmluZyBmdW5jdGlvbi4gRXhhbXBsZSB1c2UgY2FzZSBpcyBleHByZXNzIGV4dGVybmFsIHNpZ25lclxuICAgKiBAcGFyYW0gY3VzdG9tU2lnbmluZ0Z1bmN0aW9uIGN1c3RvbSBzaWduaW5nIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhIHNpbmdsZSBzaWduZWQgdHJhbnNhY3Rpb25cbiAgICogQHBhcmFtIHNpZ25UcmFuc2FjdGlvblBhcmFtcyBwYXJhbWV0ZXJzIGZvciBjdXN0b20gc2lnbmluZyBmdW5jdGlvbi4gSW5jbHVkZXMgdHhQcmVidWlsZCBhbmQgcHVic1xuICAgKlxuICAgKiBAcmV0dXJucyBzaWduZWQgdHJhbnNhY3Rpb24gYXMgaGV4IHN0cmluZ1xuICAgKi9cbiAgYXN5bmMgc2lnbldpdGhDdXN0b21TaWduaW5nRnVuY3Rpb248VE51bWJlciBleHRlbmRzIG51bWJlciB8IGJpZ2ludD4oXG4gICAgY3VzdG9tU2lnbmluZ0Z1bmN0aW9uOiBVdHhvQ3VzdG9tU2lnbmluZ0Z1bmN0aW9uPFROdW1iZXI+LFxuICAgIHNpZ25UcmFuc2FjdGlvblBhcmFtczogeyB0eFByZWJ1aWxkOiBUcmFuc2FjdGlvblByZWJ1aWxkPFROdW1iZXI+OyBwdWJzOiBzdHJpbmdbXSB9XG4gICk6IFByb21pc2U8U2lnbmVkVHJhbnNhY3Rpb24+IHtcbiAgICBjb25zdCB0eEhleCA9IHNpZ25UcmFuc2FjdGlvblBhcmFtcy50eFByZWJ1aWxkLnR4SGV4O1xuICAgIGFzc2VydCh0eEhleCwgJ21pc3NpbmcgdHhIZXggcGFyYW1ldGVyJyk7XG5cbiAgICBjb25zdCB0eCA9IHRoaXMuZGVjb2RlVHJhbnNhY3Rpb24odHhIZXgpO1xuXG4gICAgY29uc3QgaXNUeFdpdGhLZXlQYXRoU3BlbmRJbnB1dCA9IGhhc0tleVBhdGhTcGVuZElucHV0KHR4LCBzaWduVHJhbnNhY3Rpb25QYXJhbXMucHVicywgdGhpcy5uYW1lKTtcblxuICAgIGlmICghaXNUeFdpdGhLZXlQYXRoU3BlbmRJbnB1dCkge1xuICAgICAgcmV0dXJuIGF3YWl0IGN1c3RvbVNpZ25pbmdGdW5jdGlvbih7IC4uLnNpZ25UcmFuc2FjdGlvblBhcmFtcywgY29pbjogdGhpcyB9KTtcbiAgICB9XG5cbiAgICBjb25zdCBnZXRUeEhleCA9ICh2OiBTaWduZWRUcmFuc2FjdGlvbik6IHN0cmluZyA9PiB7XG4gICAgICBpZiAoJ3R4SGV4JyBpbiB2KSB7XG4gICAgICAgIHJldHVybiB2LnR4SGV4O1xuICAgICAgfVxuICAgICAgdGhyb3cgbmV3IEVycm9yKCd0eEhleCBub3QgZm91bmQgaW4gc2lnblRyYW5zYWN0aW9uIHJlc3VsdCcpO1xuICAgIH07XG5cbiAgICBjb25zdCBzaWduZXJOb25jZVR4ID0gYXdhaXQgY3VzdG9tU2lnbmluZ0Z1bmN0aW9uKHtcbiAgICAgIC4uLnNpZ25UcmFuc2FjdGlvblBhcmFtcyxcbiAgICAgIHNpZ25pbmdTdGVwOiAnc2lnbmVyTm9uY2UnLFxuICAgICAgY29pbjogdGhpcyxcbiAgICB9KTtcblxuICAgIGNvbnN0IHsgcHVicyB9ID0gc2lnblRyYW5zYWN0aW9uUGFyYW1zO1xuICAgIGFzc2VydChwdWJzID09PSB1bmRlZmluZWQgfHwgaXNUcmlwbGUocHVicykpO1xuXG4gICAgY29uc3QgY29zaWduZXJOb25jZVR4ID0gYXdhaXQgdGhpcy5zaWduVHJhbnNhY3Rpb248VE51bWJlcj4oe1xuICAgICAgLi4uc2lnblRyYW5zYWN0aW9uUGFyYW1zLFxuICAgICAgcHVicyxcbiAgICAgIHR4UHJlYnVpbGQ6IHsgLi4uc2lnblRyYW5zYWN0aW9uUGFyYW1zLnR4UHJlYnVpbGQsIHR4SGV4OiBnZXRUeEhleChzaWduZXJOb25jZVR4KSB9LFxuICAgICAgc2lnbmluZ1N0ZXA6ICdjb3NpZ25lck5vbmNlJyxcbiAgICB9KTtcblxuICAgIHJldHVybiBhd2FpdCBjdXN0b21TaWduaW5nRnVuY3Rpb24oe1xuICAgICAgLi4uc2lnblRyYW5zYWN0aW9uUGFyYW1zLFxuICAgICAgdHhQcmVidWlsZDogeyAuLi5zaWduVHJhbnNhY3Rpb25QYXJhbXMudHhQcmVidWlsZCwgdHhIZXg6IGdldFR4SGV4KGNvc2lnbmVyTm9uY2VUeCkgfSxcbiAgICAgIHNpZ25pbmdTdGVwOiAnc2lnbmVyU2lnbmF0dXJlJyxcbiAgICAgIGNvaW46IHRoaXMsXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHVuc3BlbnRcbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqL1xuICBpc0JpdEdvVGFpbnRlZFVuc3BlbnQ8VE51bWJlciBleHRlbmRzIG51bWJlciB8IGJpZ2ludD4odW5zcGVudDogVW5zcGVudDxUTnVtYmVyPik6IGJvb2xlYW4ge1xuICAgIHJldHVybiBpc1JlcGxheVByb3RlY3Rpb25VbnNwZW50KHVuc3BlbnQsIHRoaXMubmFtZSk7XG4gIH1cblxuICAvKipcbiAgICogRGVjb21wb3NlIGEgcmF3IHBzYnQvdHJhbnNhY3Rpb24gaW50byB1c2VmdWwgaW5mb3JtYXRpb24sIHN1Y2ggYXMgdGhlIHRvdGFsIGFtb3VudHMsXG4gICAqIGNoYW5nZSBhbW91bnRzLCBhbmQgdHJhbnNhY3Rpb24gb3V0cHV0cy5cbiAgICogQHBhcmFtIHBhcmFtc1xuICAgKi9cbiAgb3ZlcnJpZGUgYXN5bmMgZXhwbGFpblRyYW5zYWN0aW9uPFROdW1iZXIgZXh0ZW5kcyBudW1iZXIgfCBiaWdpbnQgPSBudW1iZXI+KFxuICAgIHBhcmFtczogRXhwbGFpblRyYW5zYWN0aW9uT3B0aW9uczxUTnVtYmVyPixcbiAgICB3YWxsZXQ/OiBJV2FsbGV0XG4gICk6IFByb21pc2U8VHJhbnNhY3Rpb25FeHBsYW5hdGlvbj4ge1xuICAgIGlmICghcGFyYW1zLnB1YnMpIHtcbiAgICAgIC8vIGlmIG5vIHB1YnMgYXJlIHByb3ZpZGVkLCBvcHBvcnR1bmlzdGljYWxseSBmZXRjaCB0aGUga2V5Y2hhaW5zIGZyb20gdGhlIHdhbGxldFxuICAgICAgaWYgKHdhbGxldCkge1xuICAgICAgICBjb25zdCBrZXljaGFpbnMgPSBhd2FpdCBmZXRjaEtleWNoYWlucyh0aGlzLCB3YWxsZXQpO1xuICAgICAgICBwYXJhbXMucHVicyA9IHRvQmlwMzJUcmlwbGUoa2V5Y2hhaW5zKS5tYXAoKGspID0+IGsubmV1dGVyZWQoKS50b0Jhc2U1OCgpKSBhcyBUcmlwbGU8c3RyaW5nPjtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHdhbGxldCAmJiBpc0Rlc2NyaXB0b3JXYWxsZXQod2FsbGV0KSkge1xuICAgICAgLy8gRGVzY3JpcHRvciB3YWxsZXRzIGRlY29kZSBwcmVidWlsZCBieXRlcyBzdHJhaWdodCBpbnRvIHRoZSB3YXNtLXV0eG9cbiAgICAgIC8vIGRlc2NyaXB0b3IgUHNidCwgc2tpcHBpbmcgdGhlIGZpeGVkU2NyaXB0V2FsbGV0LkJpdEdvUHNidCBpbnRlcm1lZGlhdGUuXG4gICAgICByZXR1cm4gZXhwbGFpblR4KGRlY29kZURlc2NyaXB0b3JQc2J0KHBhcmFtcyksIHsgLi4ucGFyYW1zLCB3YWxsZXQgfSwgdGhpcy5uYW1lKTtcbiAgICB9XG4gICAgcmV0dXJuIGV4cGxhaW5UeCh0aGlzLmRlY29kZVRyYW5zYWN0aW9uRnJvbVByZWJ1aWxkKHBhcmFtcyksIHsgLi4ucGFyYW1zLCB3YWxsZXQgfSwgdGhpcy5uYW1lKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCAtIHVzZSB7QHNlZSBiYWNrdXBLZXlSZWNvdmVyeX1cbiAgICogQnVpbGRzIGEgZnVuZHMgcmVjb3ZlcnkgdHJhbnNhY3Rpb24gd2l0aG91dCBCaXRHb1xuICAgKiBAcGFyYW0gcGFyYW1zIC0ge0BzZWUgYmFja3VwS2V5UmVjb3Zlcnl9XG4gICAqL1xuICBhc3luYyByZWNvdmVyKHBhcmFtczogUmVjb3ZlclBhcmFtcyk6IFJldHVyblR5cGU8dHlwZW9mIGJhY2t1cEtleVJlY292ZXJ5PiB7XG4gICAgcmV0dXJuIGJhY2t1cEtleVJlY292ZXJ5KHRoaXMsIHRoaXMuYml0Z28sIHBhcmFtcyk7XG4gIH1cblxuICBhc3luYyByZWNvdmVyVjEocGFyYW1zOiBWMVJlY292ZXJQYXJhbXMpOiBSZXR1cm5UeXBlPHR5cGVvZiB2MUJhY2t1cEtleVJlY292ZXJ5PiB7XG4gICAgcmV0dXJuIHYxQmFja3VwS2V5UmVjb3ZlcnkodGhpcywgdGhpcy5iaXRnbywgcGFyYW1zKTtcbiAgfVxuXG4gIGFzeW5jIHN3ZWVwVjEocGFyYW1zOiBWMVN3ZWVwUGFyYW1zKTogUmV0dXJuVHlwZTx0eXBlb2YgdjFTd2VlcD4ge1xuICAgIHJldHVybiB2MVN3ZWVwKHRoaXMsIHRoaXMuYml0Z28sIHBhcmFtcyk7XG4gIH1cblxuICAvKipcbiAgICogUmVjb3ZlciBjb2luIHRoYXQgd2FzIHNlbnQgdG8gd3JvbmcgY2hhaW5cbiAgICogQHBhcmFtIHBhcmFtc1xuICAgKiBAcGFyYW0gcGFyYW1zLnR4aWQgVGhlIHR4aWQgb2YgdGhlIGZhdWx0eSB0cmFuc2FjdGlvblxuICAgKiBAcGFyYW0gcGFyYW1zLnJlY292ZXJ5QWRkcmVzcyBhZGRyZXNzIHRvIHNlbmQgcmVjb3ZlcmVkIGZ1bmRzIHRvXG4gICAqIEBwYXJhbSBwYXJhbXMud2FsbGV0IHRoZSB3YWxsZXQgdGhhdCByZWNlaXZlZCB0aGUgZnVuZHNcbiAgICogQHBhcmFtIHBhcmFtcy5yZWNvdmVyeUNvaW4gdGhlIGNvaW4gdHlwZSBvZiB0aGUgd2FsbGV0IHRoYXQgcmVjZWl2ZWQgdGhlIGZ1bmRzXG4gICAqIEBwYXJhbSBwYXJhbXMuc2lnbmVkIHJldHVybiBhIGhhbGYtc2lnbmVkIHRyYW5zYWN0aW9uIChkZWZhdWx0PXRydWUpXG4gICAqIEBwYXJhbSBwYXJhbXMud2FsbGV0UGFzc3BocmFzZSB0aGUgd2FsbGV0IHBhc3NwaHJhc2VcbiAgICogQHBhcmFtIHBhcmFtcy54cHJ2IHRoZSB1bmVuY3J5cHRlZCB4cHJ2ICh1c2VkIGluc3RlYWQgb2Ygd2FsbGV0IHBhc3NwaHJhc2UpXG4gICAqIEBwYXJhbSBwYXJhbXMuYXBpS2V5IGZvciB1dHhvIGNvaW5zIG90aGVyIHRoYW4gW0JUQyxUQlRDXSB0aGlzIGlzIGEgQmxvY2sgQ2hhaXIgYXBpIGtleVxuICAgKiBAcmV0dXJucyB7Kn1cbiAgICovXG4gIGFzeW5jIHJlY292ZXJGcm9tV3JvbmdDaGFpbjxUTnVtYmVyIGV4dGVuZHMgbnVtYmVyIHwgYmlnaW50ID0gbnVtYmVyPihcbiAgICBwYXJhbXM6IFJlY292ZXJGcm9tV3JvbmdDaGFpbk9wdGlvbnNcbiAgKTogUHJvbWlzZTxDcm9zc0NoYWluUmVjb3ZlcnlTaWduZWQ8VE51bWJlcj4gfCBDcm9zc0NoYWluUmVjb3ZlcnlVbnNpZ25lZDxUTnVtYmVyPj4ge1xuICAgIGNvbnN0IHsgdHhpZCwgcmVjb3ZlcnlBZGRyZXNzLCB3YWxsZXQsIHdhbGxldFBhc3NwaHJhc2UsIHhwcnYsIGFwaUtleSB9ID0gcGFyYW1zO1xuXG4gICAgLy8gcGFyYW1zLnJlY292ZXJ5Q29pbiB1c2VkIHRvIGJlIHBhcmFtcy5jb2luLCBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eVxuICAgIGNvbnN0IHJlY292ZXJ5Q29pbiA9IHBhcmFtcy5jb2luIHx8IHBhcmFtcy5yZWNvdmVyeUNvaW47XG4gICAgaWYgKCFyZWNvdmVyeUNvaW4pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignbWlzc2luZyByZXF1aXJlZCBvYmplY3QgcmVjb3ZlcnlDb2luJyk7XG4gICAgfVxuICAgIC8vIHNpZ25lZCBzaG91bGQgZGVmYXVsdCB0byB0cnVlLCBhbmQgb25seSBiZSBkaXNhYmxlZCBpZiBleHBsaWNpdGx5IHNldCB0byBmYWxzZSAobm90IHVuZGVmaW5lZClcbiAgICBjb25zdCBzaWduZWQgPSBwYXJhbXMuc2lnbmVkICE9PSBmYWxzZTtcblxuICAgIGNvbnN0IHNvdXJjZUNvaW5GYW1pbHkgPSB0aGlzLmdldEZhbWlseSgpO1xuICAgIGNvbnN0IHJlY292ZXJ5Q29pbkZhbWlseSA9IHJlY292ZXJ5Q29pbi5nZXRGYW1pbHkoKTtcbiAgICBjb25zdCBzdXBwb3J0ZWRSZWNvdmVyeUNvaW5zID0gc3VwcG9ydGVkQ3Jvc3NDaGFpblJlY292ZXJpZXNbc291cmNlQ29pbkZhbWlseV07XG5cbiAgICBpZiAoXy5pc1VuZGVmaW5lZChzdXBwb3J0ZWRSZWNvdmVyeUNvaW5zKSB8fCAhc3VwcG9ydGVkUmVjb3ZlcnlDb2lucy5pbmNsdWRlcyhyZWNvdmVyeUNvaW5GYW1pbHkpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFJlY292ZXJ5IG9mICR7c291cmNlQ29pbkZhbWlseX0gYmFsYW5jZXMgZnJvbSAke3JlY292ZXJ5Q29pbkZhbWlseX0gd2FsbGV0cyBpcyBub3Qgc3VwcG9ydGVkLmApO1xuICAgIH1cblxuICAgIHJldHVybiBhd2FpdCByZWNvdmVyQ3Jvc3NDaGFpbjxUTnVtYmVyPih0aGlzLmJpdGdvLCB7XG4gICAgICBzb3VyY2VDb2luOiB0aGlzLFxuICAgICAgcmVjb3ZlcnlDb2luLFxuICAgICAgd2FsbGV0SWQ6IHdhbGxldCxcbiAgICAgIHR4aWQsXG4gICAgICByZWNvdmVyeUFkZHJlc3MsXG4gICAgICB3YWxsZXRQYXNzcGhyYXNlOiBzaWduZWQgPyB3YWxsZXRQYXNzcGhyYXNlIDogdW5kZWZpbmVkLFxuICAgICAgeHBydjogc2lnbmVkID8geHBydiA6IHVuZGVmaW5lZCxcbiAgICAgIGFwaUtleSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZW5lcmF0ZSBiaXAzMiBrZXkgcGFpclxuICAgKlxuICAgKiBAcGFyYW0gc2VlZFxuICAgKiBAcmV0dXJucyB7T2JqZWN0fSBvYmplY3Qgd2l0aCBnZW5lcmF0ZWQgcHViIGFuZCBwcnZcbiAgICovXG4gIGdlbmVyYXRlS2V5UGFpcihzZWVkOiBCdWZmZXIpOiB7IHB1Yjogc3RyaW5nOyBwcnY6IHN0cmluZyB9IHtcbiAgICBpZiAoIXNlZWQpIHtcbiAgICAgIC8vIEFuIGV4dGVuZGVkIHByaXZhdGUga2V5IGhhcyBib3RoIGEgbm9ybWFsIDI1NiBiaXQgcHJpdmF0ZSBrZXkgYW5kIGEgMjU2XG4gICAgICAvLyBiaXQgY2hhaW4gY29kZSwgYm90aCBvZiB3aGljaCBtdXN0IGJlIHJhbmRvbS4gNTEyIGJpdHMgaXMgdGhlcmVmb3JlIHRoZVxuICAgICAgLy8gbWF4aW11bSBlbnRyb3B5IGFuZCBnaXZlcyB1cyBtYXhpbXVtIHNlY3VyaXR5IGFnYWluc3QgY3JhY2tpbmcuXG4gICAgICBzZWVkID0gcmFuZG9tQnl0ZXMoNTEyIC8gOCk7XG4gICAgfVxuICAgIGNvbnN0IGV4dGVuZGVkS2V5ID0gQklQMzIuZnJvbVNlZWQoc2VlZCk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHB1YjogZXh0ZW5kZWRLZXkubmV1dGVyZWQoKS50b0Jhc2U1OCgpLFxuICAgICAgcHJ2OiBleHRlbmRlZEtleS50b0Jhc2U1OCgpLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogRGV0ZXJtaW5lcyB0aGUgZGVmYXVsdCB0cmFuc2FjdGlvbiBmb3JtYXQgYmFzZWQgb24gd2FsbGV0IHByb3BlcnRpZXMgYW5kIG5ldHdvcmtcbiAgICogQHBhcmFtIHdhbGxldCAtIFRoZSB3YWxsZXQgdG8gY2hlY2tcbiAgICogQHBhcmFtIHJlcXVlc3RlZEZvcm1hdCAtIE9wdGlvbmFsIGV4cGxpY2l0bHkgcmVxdWVzdGVkIGZvcm1hdFxuICAgKiBAcmV0dXJucyBUaGUgdHJhbnNhY3Rpb24gZm9ybWF0IHRvIHVzZSwgb3IgdW5kZWZpbmVkIGlmIG5vIGRlZmF1bHQgYXBwbGllc1xuICAgKi9cbiAgZ2V0RGVmYXVsdFR4Rm9ybWF0KHdhbGxldDogV2FsbGV0LCByZXF1ZXN0ZWRGb3JtYXQ/OiBUeEZvcm1hdCk6IFR4Rm9ybWF0IHtcbiAgICBpZiAocmVxdWVzdGVkRm9ybWF0ID09PSAnbGVnYWN5Jykge1xuICAgICAgcmV0dXJuICdwc2J0LWxpdGUnO1xuICAgIH1cbiAgICByZXR1cm4gcmVxdWVzdGVkRm9ybWF0ID8/ICdwc2J0LWxpdGUnO1xuICB9XG5cbiAgYXN5bmMgZ2V0RXh0cmFQcmVidWlsZFBhcmFtcyhidWlsZFBhcmFtczogRXh0cmFQcmVidWlsZFBhcmFtc09wdGlvbnMgJiB7IHdhbGxldDogV2FsbGV0IH0pOiBQcm9taXNlPHtcbiAgICB0eEZvcm1hdD86IFR4Rm9ybWF0O1xuICAgIGNoYW5nZUFkZHJlc3NUeXBlPzogU2NyaXB0VHlwZTJPZjNbXSB8IFNjcmlwdFR5cGUyT2YzO1xuICAgIGFsbG93ZWRJbnB1dFNjcmlwdFR5cGVzPzogU2NyaXB0VHlwZTJPZjNbXTtcbiAgfT4ge1xuICAgIGNvbnN0IHJlcXVlc3RlZEZvcm1hdCA9IGJ1aWxkUGFyYW1zLnR4Rm9ybWF0IGFzIFR4Rm9ybWF0IHwgdW5kZWZpbmVkO1xuICAgIGNvbnN0IHR4Rm9ybWF0ID0gdGhpcy5nZXREZWZhdWx0VHhGb3JtYXQoYnVpbGRQYXJhbXMud2FsbGV0LCByZXF1ZXN0ZWRGb3JtYXQpO1xuICAgIGxldCBjaGFuZ2VBZGRyZXNzVHlwZSA9IGJ1aWxkUGFyYW1zLmNoYW5nZUFkZHJlc3NUeXBlIGFzIFNjcmlwdFR5cGUyT2YzW10gfCBTY3JpcHRUeXBlMk9mMyB8IHVuZGVmaW5lZDtcblxuICAgIC8vIGlmIHRoZSBhZGRyZXNzVHlwZSBpcyBub3Qgc3BlY2lmaWVkLCB3ZSBuZWVkIHRvIGRlZmF1bHQgdG8gcDJ0ck11c2lnMiBmb3IgdGVzdG5ldCBob3Qgd2FsbGV0cyBmb3Igc3RhZ2VkIHJvbGxvdXQgb2YgcDJ0ck11c2lnMlxuICAgIGlmIChcbiAgICAgIGJ1aWxkUGFyYW1zLmFkZHJlc3NUeXBlID09PSB1bmRlZmluZWQgJiYgLy8gYWRkcmVzc1R5cGUgaXMgZGVwcmVjYXRlZCBhbmQgcmVwbGFjZWQgYnkgYGNoYW5nZUFkZHJlc3NgXG4gICAgICBidWlsZFBhcmFtcy5jaGFuZ2VBZGRyZXNzVHlwZSA9PT0gdW5kZWZpbmVkICYmXG4gICAgICBidWlsZFBhcmFtcy5jaGFuZ2VBZGRyZXNzID09PSB1bmRlZmluZWQgJiZcbiAgICAgIGJ1aWxkUGFyYW1zLndhbGxldC50eXBlKCkgPT09ICdob3QnXG4gICAgKSB7XG4gICAgICBjaGFuZ2VBZGRyZXNzVHlwZSA9IFsncDJ0ck11c2lnMicsICdwMndzaCcsICdwMnNoUDJ3c2gnLCAncDJzaCcsICdwMnRyJ107XG4gICAgfVxuXG4gICAgLy8gZ2V0SGFsZlNpZ25lZExlZ2FjeUZvcm1hdCgpIG9ubHkgc3VwcG9ydHMgcDJtcy1iYXNlZCB0eXBlcyAocDJzaCwgcDJzaFAyd3NoLCBwMndzaCkuXG4gICAgLy8gRmlsdGVyIGNoYW5nZSBvdXRwdXRzIGFuZCByZXN0cmljdCBpbnB1dCBzZWxlY3Rpb24gdG8gdGhlc2UgdHlwZXMuXG4gICAgY29uc3QgbGVnYWN5Q29tcGF0aWJsZVR5cGVzOiBTY3JpcHRUeXBlMk9mM1tdID0gWydwMnNoJywgJ3Ayc2hQMndzaCcsICdwMndzaCddO1xuICAgIGxldCBhbGxvd2VkSW5wdXRTY3JpcHRUeXBlczogU2NyaXB0VHlwZTJPZjNbXSB8IHVuZGVmaW5lZDtcblxuICAgIGlmIChyZXF1ZXN0ZWRGb3JtYXQgPT09ICdsZWdhY3knKSB7XG4gICAgICBhbGxvd2VkSW5wdXRTY3JpcHRUeXBlcyA9IGxlZ2FjeUNvbXBhdGlibGVUeXBlcztcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KGNoYW5nZUFkZHJlc3NUeXBlKSkge1xuICAgICAgICBjaGFuZ2VBZGRyZXNzVHlwZSA9IGNoYW5nZUFkZHJlc3NUeXBlLmZpbHRlcigodCk6IHQgaXMgU2NyaXB0VHlwZTJPZjMgPT5cbiAgICAgICAgICBsZWdhY3lDb21wYXRpYmxlVHlwZXMuaW5jbHVkZXModCBhcyBTY3JpcHRUeXBlMk9mMylcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSBpZiAoY2hhbmdlQWRkcmVzc1R5cGUgIT09IHVuZGVmaW5lZCAmJiAhbGVnYWN5Q29tcGF0aWJsZVR5cGVzLmluY2x1ZGVzKGNoYW5nZUFkZHJlc3NUeXBlKSkge1xuICAgICAgICBjaGFuZ2VBZGRyZXNzVHlwZSA9IGxlZ2FjeUNvbXBhdGlibGVUeXBlcztcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgdHhGb3JtYXQsXG4gICAgICBjaGFuZ2VBZGRyZXNzVHlwZSxcbiAgICAgIGFsbG93ZWRJbnB1dFNjcmlwdFR5cGVzLFxuICAgIH07XG4gIH1cblxuICBwcmVDcmVhdGVCaXRHbyhwYXJhbXM6IFByZWNyZWF0ZUJpdEdvT3B0aW9ucyk6IHZvaWQge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGFzeW5jIHByZXNpZ25UcmFuc2FjdGlvbihwYXJhbXM6IFByZXNpZ25UcmFuc2FjdGlvbk9wdGlvbnMpOiBQcm9taXNlPGFueT4ge1xuICAgIGlmIChwYXJhbXMud2FsbGV0RGF0YSAmJiBpc1V0eG9XYWxsZXREYXRhKHBhcmFtcy53YWxsZXREYXRhKSAmJiBpc0Rlc2NyaXB0b3JXYWxsZXREYXRhKHBhcmFtcy53YWxsZXREYXRhKSkge1xuICAgICAgcmV0dXJuIHBhcmFtcztcbiAgICB9XG5cbiAgICBjb25zdCByZXR1cm5MZWdhY3lGb3JtYXQgPSAocGFyYW1zIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KS50eEZvcm1hdCA9PT0gJ2xlZ2FjeSc7XG5cbiAgICAvLyBJbiB0aGUgY2FzZSB0aGF0IHdlIGhhdmUgYSAncHNidC1saXRlJyB0cmFuc2FjdGlvbiBmb3JtYXQsIHdlIHdhbnQgdG8gaW5kaWNhdGUgaW4gc2lnbmluZyB0byBub3QgZmFpbFxuICAgIGNvbnN0IHR4SGV4ID0gKHBhcmFtcy50eEhleCA/PyBwYXJhbXMudHhQcmVidWlsZD8udHhIZXgpIGFzIHN0cmluZztcbiAgICBpZiAoXG4gICAgICB0eEhleCAmJlxuICAgICAgdXR4b2xpYi5iaXRnby5pc1BzYnQodHhIZXggYXMgc3RyaW5nKSAmJlxuICAgICAgdXR4b2xpYi5iaXRnby5pc1BzYnRMaXRlKHV0eG9saWIuYml0Z28uY3JlYXRlUHNidEZyb21IZXgodHhIZXgsIHRoaXMubmV0d29yaykpICYmXG4gICAgICBwYXJhbXMuYWxsb3dOb25TZWd3aXRTaWduaW5nV2l0aG91dFByZXZUeCA9PT0gdW5kZWZpbmVkXG4gICAgKSB7XG4gICAgICByZXR1cm4geyAuLi5wYXJhbXMsIGFsbG93Tm9uU2Vnd2l0U2lnbmluZ1dpdGhvdXRQcmV2VHg6IHRydWUsIHJldHVybkxlZ2FjeUZvcm1hdCB9O1xuICAgIH1cbiAgICByZXR1cm4geyAuLi5wYXJhbXMsIHJldHVybkxlZ2FjeUZvcm1hdCB9O1xuICB9XG5cbiAgYXN5bmMgc3VwcGxlbWVudEdlbmVyYXRlV2FsbGV0KFxuICAgIHdhbGxldFBhcmFtczogU3VwcGxlbWVudEdlbmVyYXRlV2FsbGV0T3B0aW9ucyxcbiAgICBrZXljaGFpbnM6IEtleWNoYWluc1RyaXBsZXRcbiAgKTogUHJvbWlzZTxhbnk+IHtcbiAgICByZXR1cm4gd2FsbGV0UGFyYW1zO1xuICB9XG5cbiAgdHJhbnNhY3Rpb25EYXRhQWxsb3dlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICB2YWx1ZWxlc3NUcmFuc2ZlckFsbG93ZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgZ2V0UmVjb3ZlcnlQcm92aWRlcihhcGlUb2tlbj86IHN0cmluZyk6IFJlY292ZXJ5UHJvdmlkZXIge1xuICAgIHJldHVybiBmb3JDb2luKHRoaXMuZ2V0Q2hhaW4oKSwgYXBpVG9rZW4pO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIGF1ZGl0RGVjcnlwdGVkS2V5KHtcbiAgICBtdWx0aVNpZ1R5cGUsXG4gICAgcHVibGljS2V5LFxuICAgIHBydixcbiAgfToge1xuICAgIG11bHRpU2lnVHlwZTogTXVsdGlzaWdUeXBlO1xuICAgIHB1YmxpY0tleTogc3RyaW5nO1xuICAgIHBydjogc3RyaW5nO1xuICB9KTogdm9pZCB7XG4gICAgaWYgKG11bHRpU2lnVHlwZSA9PT0gJ3RzcycpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcigndHNzIGF1ZGl0aW5nIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIHRoaXMgY29pbicpO1xuICAgIH1cbiAgICBpZiAoIWlzVmFsaWRQcnYocHJ2KSAmJiAhaXNWYWxpZFhwcnYocHJ2KSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkIHByaXZhdGUga2V5Jyk7XG4gICAgfVxuICAgIGlmIChwdWJsaWNLZXkpIHtcbiAgICAgIGNvbnN0IGdlblB1YktleSA9IEJJUDMyLmZyb21CYXNlNTgocHJ2KS5uZXV0ZXJlZCgpLnRvQmFzZTU4KCk7XG4gICAgICBpZiAoZ2VuUHViS2V5ICE9PSBwdWJsaWNLZXkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdwdWJsaWMga2V5IGRvZXMgbm90IG1hdGNoIHByaXZhdGUga2V5Jyk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iXX0=
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bitgo-beta/abstract-utxo",
3
- "version": "1.1.1-beta.2021",
3
+ "version": "1.1.1-beta.2023",
4
4
  "description": "BitGo SDK coin library for UTXO base implementation",
5
5
  "main": "./dist/cjs/src/index.js",
6
6
  "module": "./dist/esm/index.js",
@@ -60,13 +60,13 @@
60
60
  ]
61
61
  },
62
62
  "dependencies": {
63
- "@bitgo-beta/blockapis": "1.0.5-beta.2027",
64
- "@bitgo-beta/sdk-api": "1.10.1-beta.1787",
65
- "@bitgo-beta/sdk-core": "8.2.1-beta.1790",
66
- "@bitgo-beta/utxo-core": "1.8.1-beta.908",
67
- "@bitgo-beta/utxo-descriptors": "0.0.1-beta.46",
68
- "@bitgo-beta/utxo-lib": "8.0.3-beta.1792",
69
- "@bitgo-beta/utxo-ord": "1.0.1-beta.1862",
63
+ "@bitgo-beta/blockapis": "1.0.5-beta.2029",
64
+ "@bitgo-beta/sdk-api": "1.10.1-beta.1789",
65
+ "@bitgo-beta/sdk-core": "8.2.1-beta.1792",
66
+ "@bitgo-beta/utxo-core": "1.8.1-beta.910",
67
+ "@bitgo-beta/utxo-descriptors": "0.0.1-beta.48",
68
+ "@bitgo-beta/utxo-lib": "8.0.3-beta.1794",
69
+ "@bitgo-beta/utxo-ord": "1.0.1-beta.1864",
70
70
  "@bitgo/wasm-utxo": "^4.14.1",
71
71
  "@types/lodash": "^4.14.121",
72
72
  "@types/superagent": "4.1.15",
@@ -80,5 +80,5 @@
80
80
  "@bitgo-beta/sdk-test": "^9.1.46",
81
81
  "mocha": "^10.2.0"
82
82
  },
83
- "gitHead": "f679c827c8dd3c39d9b0cdef515e65745f400059"
83
+ "gitHead": "601e0004648c953c1d3590b9e8a0178e7f78e070"
84
84
  }