@bitgo/sdk-coin-canton 1.34.0 → 1.35.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/src/lib/utils.d.ts +6 -0
- package/dist/src/lib/utils.d.ts.map +1 -1
- package/dist/src/lib/utils.js +19 -8
- package/dist/test/resources.d.ts +12 -0
- package/dist/test/resources.d.ts.map +1 -1
- package/dist/test/resources.js +18 -3
- package/dist/test/unit/builder/allocationAllocate/allocationAllocateBuilder.js +27 -1
- package/dist/test/unit/utils.js +12 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +7 -7
package/dist/src/lib/utils.d.ts
CHANGED
|
@@ -155,6 +155,12 @@ export declare class Utils implements BaseUtils {
|
|
|
155
155
|
* @returns tokenName if contractAddress matches with any supported canton tokens
|
|
156
156
|
*/
|
|
157
157
|
private findTokenNameByContractAddress;
|
|
158
|
+
/**
|
|
159
|
+
* Whether an instrument is native Canton Coin: `Amulet` administered by a DSO party. This is an exact
|
|
160
|
+
* check on the instrument id and the admin's `DSO::` prefix, never a substring match on the whole
|
|
161
|
+
* `admin:id` string, so an unrelated token whose name merely contains "Amulet" is not treated as native.
|
|
162
|
+
*/
|
|
163
|
+
private isNativeInstrument;
|
|
158
164
|
}
|
|
159
165
|
declare const utils: Utils;
|
|
160
166
|
export default utils;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/lib/utils.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,SAAS,EAA2B,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAOtF,OAAO,EAAE,iBAAiB,EAA+C,qBAAqB,EAAE,MAAM,SAAS,CAAC;AAChH,OAAO,EAAe,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAE1D,qBAAa,KAAM,YAAW,SAAS;IACrC,kBAAkB;IAClB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAUxC,kBAAkB;IAClB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAQrC,kBAAkB;IAClB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAIvC,kBAAkB;IAClB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAItC,kBAAkB;IAClB,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO;IAI5C,kBAAkB;IAClB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAI3C;;;;OAIG;IACH,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO;IAKxC;;;;OAIG;IACH,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM;IAI3C;;;;OAIG;IACH,uBAAuB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM;IAMlD;;;;;OAKG;IACH,6BAA6B,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,eAAe,GAAG,qBAAqB;
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/lib/utils.ts"],"names":[],"mappings":"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"}
|
package/dist/src/lib/utils.js
CHANGED
|
@@ -419,8 +419,10 @@ class Utils {
|
|
|
419
419
|
}
|
|
420
420
|
}
|
|
421
421
|
// DvpLegAllocation create node → allocation.transferLeg contains the full settlement transfer details:
|
|
422
|
-
// sender, receiver (the actual settlement counterparty), amount, and instrumentId
|
|
423
|
-
|
|
422
|
+
// sender, receiver (the actual settlement counterparty), amount, and instrumentId.
|
|
423
|
+
// Native Canton Coin (Amulet) allocations create an AmuletAllocation instead, with the identical
|
|
424
|
+
// `allocation` record (AmuletAllocation also carries lockedAmulet and expiresAt).
|
|
425
|
+
const dvpFields = findCreateNodeFields('DvpLegAllocation') ?? findCreateNodeFields('AmuletAllocation');
|
|
424
426
|
if (dvpFields) {
|
|
425
427
|
const allocationField = getField(dvpFields, 'allocation');
|
|
426
428
|
if (allocationField?.oneofKind === 'record') {
|
|
@@ -642,7 +644,8 @@ class Utils {
|
|
|
642
644
|
if (memoId) {
|
|
643
645
|
parsedData.memoId = memoId;
|
|
644
646
|
}
|
|
645
|
-
|
|
647
|
+
// Native Canton Coin carries no token: the transaction falls back to the base coin.
|
|
648
|
+
if (instrumentId && instrumentAdmin && !this.isNativeInstrument(instrumentAdmin, instrumentId)) {
|
|
646
649
|
parsedData.token = this.findTokenNameByContractAddress(`${instrumentAdmin}:${instrumentId}`);
|
|
647
650
|
}
|
|
648
651
|
return parsedData;
|
|
@@ -1050,16 +1053,24 @@ class Utils {
|
|
|
1050
1053
|
* @returns tokenName if contractAddress matches with any supported canton tokens
|
|
1051
1054
|
*/
|
|
1052
1055
|
findTokenNameByContractAddress(contractAddress) {
|
|
1053
|
-
if (contractAddress.includes('Amulet')) {
|
|
1054
|
-
return undefined;
|
|
1055
|
-
}
|
|
1056
1056
|
const cantonToken = statics_1.coins
|
|
1057
1057
|
.filter((coin) => coin instanceof statics_1.CantonToken && coin.contractAddress === contractAddress)
|
|
1058
1058
|
.map((coin) => coin);
|
|
1059
|
-
|
|
1059
|
+
if (cantonToken.length === 0) {
|
|
1060
|
+
throw new Error(`unsupported canton token instrument: ${contractAddress}`);
|
|
1061
|
+
}
|
|
1062
|
+
return cantonToken[0].name;
|
|
1063
|
+
}
|
|
1064
|
+
/**
|
|
1065
|
+
* Whether an instrument is native Canton Coin: `Amulet` administered by a DSO party. This is an exact
|
|
1066
|
+
* check on the instrument id and the admin's `DSO::` prefix, never a substring match on the whole
|
|
1067
|
+
* `admin:id` string, so an unrelated token whose name merely contains "Amulet" is not treated as native.
|
|
1068
|
+
*/
|
|
1069
|
+
isNativeInstrument(instrumentAdmin, instrumentId) {
|
|
1070
|
+
return instrumentId === 'Amulet' && instrumentAdmin.startsWith('DSO::');
|
|
1060
1071
|
}
|
|
1061
1072
|
}
|
|
1062
1073
|
exports.Utils = Utils;
|
|
1063
1074
|
const utils = new Utils();
|
|
1064
1075
|
exports.default = utils;
|
|
1065
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3V0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLGdFQUFxQztBQUNyQyxvREFBNEI7QUFFNUIsOENBQXNGO0FBQ3RGLDRDQUFvRDtBQUVwRCwwREFBMEU7QUFDMUUseUZBQW1GO0FBRW5GLHlDQUFtRjtBQUluRixNQUFhLEtBQUs7SUFDaEIsa0JBQWtCO0lBQ2xCLGNBQWMsQ0FBQyxPQUFlO1FBQzVCLElBQUksQ0FBQyxPQUFPLElBQUksT0FBTyxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUU7WUFBRSxPQUFPLEtBQUssQ0FBQztRQUNwRCxNQUFNLENBQUMsU0FBUyxFQUFFLFdBQVcsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDNUQsSUFBSSxDQUFDLFdBQVc7WUFBRSxPQUFPLEtBQUssQ0FBQztRQUMvQixpRUFBaUU7UUFDakUsTUFBTSxDQUFDLGVBQWUsQ0FBQyxHQUFHLFdBQVcsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDL0QsSUFBSSxDQUFDLFNBQVMsSUFBSSxDQUFDLGVBQWU7WUFBRSxPQUFPLEtBQUssQ0FBQztRQUNqRCxPQUFPLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxlQUFlLENBQUMsQ0FBQztJQUNoRCxDQUFDO0lBRUQsa0JBQWtCO0lBQ2xCLGNBQWMsQ0FBQyxJQUFZO1FBQ3pCLDJFQUEyRTtRQUMzRSxvREFBb0Q7UUFDcEQsTUFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDakMsTUFBTSxXQUFXLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ25DLE9BQU8sQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLElBQUksV0FBVyxHQUFHLENBQUMs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QUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO0lBQ3ZELENBQUM7Q0FDRjtBQTdoQ0Qsc0JBNmhDQztBQUVELE1BQU0sS0FBSyxHQUFHLElBQUksS0FBSyxFQUFFLENBQUM7QUFFMUIsa0JBQWUsS0FBSyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IEJpZ051bWJlciBmcm9tICdiaWdudW1iZXIuanMnO1xuaW1wb3J0IGNyeXB0byBmcm9tICdjcnlwdG8nO1xuXG5pbXBvcnQgeyBCYXNlVXRpbHMsIGlzVmFsaWRFZDI1NTE5UHVibGljS2V5LCBUcmFuc2FjdGlvblR5cGUgfSBmcm9tICdAYml0Z28vc2RrLWNvcmUnO1xuaW1wb3J0IHsgQ2FudG9uVG9rZW4sIGNvaW5zIH0gZnJvbSAnQGJpdGdvL3N0YXRpY3MnO1xuXG5pbXBvcnQgeyBjb21wdXRlUHJlcGFyZWRUcmFuc2FjdGlvbiB9IGZyb20gJy4uLy4uL3Jlc291cmNlcy9oYXNoL2hhc2guanMnO1xuaW1wb3J0IHsgUHJlcGFyZWRUcmFuc2FjdGlvbiB9IGZyb20gJy4uLy4uL3Jlc291cmNlcy9wcm90by9wcmVwYXJlZFRyYW5zYWN0aW9uLmpzJztcblxuaW1wb3J0IHsgQ3J5cHRvS2V5Rm9ybWF0LCBTaWduaW5nQWxnb3JpdGhtU3BlYywgU2lnbmluZ0tleVNwZWMgfSBmcm9tICcuL2NvbnN0YW50JztcbmltcG9ydCB7IENhbnRvbkNvbW1hbmRJbmZvLCBQcmVwYXJlZFRyYW5zYWN0aW9uIGFzIElQcmVwYXJlZFRyYW5zYWN0aW9uLCBQcmVwYXJlZFR4blBhcnNlZEluZm8gfSBmcm9tICcuL2lmYWNlJztcbmltcG9ydCB7IFJlY29yZEZpZWxkLCBWYWx1ZSB9IGZyb20gJy4vcmVzb3VyY2VzSW50ZXJmYWNlJztcblxuZXhwb3J0IGNsYXNzIFV0aWxzIGltcGxlbWVudHMgQmFzZVV0aWxzIHtcbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIGlzVmFsaWRBZGRyZXNzKGFkZHJlc3M6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGlmICghYWRkcmVzcyB8fCBhZGRyZXNzLnRyaW0oKSA9PT0gJycpIHJldHVybiBmYWxzZTtcbiAgICBjb25zdCBbcGFydHlIaW50LCBmaW5nZXJwcmludF0gPSBhZGRyZXNzLnRyaW0oKS5zcGxpdCgnOjonKTtcbiAgICBpZiAoIWZpbmdlcnByaW50KSByZXR1cm4gZmFsc2U7XG4gICAgLy8gYWxsIG1lbW9JZHMgYXJlIGNvbnNpZGVyZWQgdmFsaWQgYXMgbG9uZyBhcyBzdHJpbmdzIGFyZSBwYXNzZWRcbiAgICBjb25zdCBbZmluZ2VycHJpbnRQYXJ0XSA9IGZpbmdlcnByaW50LnRyaW0oKS5zcGxpdCgnP21lbW9JZD0nKTtcbiAgICBpZiAoIXBhcnR5SGludCB8fCAhZmluZ2VycHJpbnRQYXJ0KSByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuIHRoaXMuaXNWYWxpZENhbnRvbkhleChmaW5nZXJwcmludFBhcnQpO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIGlzVmFsaWRCbG9ja0lkKGhhc2g6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIC8vIEluIGNhbnRvbiwgdGhlcmUgaXMgbm8gYmxvY2sgaGFzaCwgd2Ugc3RvcmUgdGhlIGhlaWdodCBhcyB0aGUgX2lkIChoYXNoKVxuICAgIC8vIHRoaXMgd2lsbCBiZSBvZiB0aGUgZm9ybSwgPGJsb2NrSGVpZ2h0Pl88dmVyc2lvbj5cbiAgICBjb25zdCBbaGVpZ2h0XSA9IGhhc2guc3BsaXQoJ18nKTtcbiAgICBjb25zdCBibG9ja0hlaWdodCA9IE51bWJlcihoZWlnaHQpO1xuICAgIHJldHVybiAhaXNOYU4oYmxvY2tIZWlnaHQpICYmIGJsb2NrSGVpZ2h0ID4gMDtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICBpc1ZhbGlkUHJpdmF0ZUtleShrZXk6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHRocm93IG5ldyBFcnJvcignTWV0aG9kIG5vdCBpbXBsZW1lbnRlZC4nKTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICBpc1ZhbGlkUHVibGljS2V5KGtleTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGlzVmFsaWRFZDI1NTE5UHVibGljS2V5KGtleSk7XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgaXNWYWxpZFNpZ25hdHVyZShzaWduYXR1cmU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHRocm93IG5ldyBFcnJvcignTWV0aG9kIG5vdCBpbXBsZW1lbnRlZC4nKTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICBpc1ZhbGlkVHJhbnNhY3Rpb25JZCh0eElkOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ01ldGhvZCBub3QgaW1wbGVtZW50ZWQuJyk7XG4gIH1cblxuICAvKipcbiAgICogTWV0aG9kIHRvIHZhbGlkYXRlIHRoZSBpbnB1dCBpcyBhIHZhbGlkIGNhbnRvbiBoZXggc3RyaW5nXG4gICAqIEBwYXJhbSB7U3RyaW5nfSB2YWx1ZSB0aGUgaGV4IHN0cmluZyB2YWx1ZVxuICAgKiBAcmV0dXJucyB7Qm9vbGVhbn0gdHJ1ZSBpZiB2YWxpZFxuICAgKi9cbiAgaXNWYWxpZENhbnRvbkhleCh2YWx1ZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgY29uc3QgcmVnZXggPSAvXlthLWZBLUYwLTldezY4fSQvO1xuICAgIHJldHVybiByZWdleC50ZXN0KHZhbHVlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBIZWxwZXIgbWV0aG9kIHRvIGNvbnZlcnQgaGV4IHZhbHVlIHRvIGJhc2U2NFxuICAgKiBAcGFyYW0ge1N0cmluZ30gaGV4U3RyaW5nIC0gaGV4IGVuY29kZWQgc3RyaW5nXG4gICAqIEByZXR1cm5zIHtTdHJpbmd9IGJhc2U2NCBlbmNvZGVkIHN0cmluZ1xuICAgKi9cbiAgZ2V0QmFzZTY0RnJvbUhleChoZXhTdHJpbmc6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIEJ1ZmZlci5mcm9tKGhleFN0cmluZywgJ2hleCcpLnRvU3RyaW5nKCdiYXNlNjQnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBNZXRob2QgdG8gY3JlYXRlIGZpbmdlcnByaW50IChwYXJ0IG9mIHRoZSBjYW50b24gcGFydHlJZCkgZnJvbSBwdWJsaWMga2V5XG4gICAqIEBwYXJhbSB7U3RyaW5nfSBwdWJsaWNLZXkgdGhlIHB1YmxpYyBrZXlcbiAgICogQHJldHVybnMge1N0cmluZ31cbiAgICovXG4gIGdldEFkZHJlc3NGcm9tUHVibGljS2V5KHB1YmxpY0tleTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCBrZXkgPSB0aGlzLnNpZ25pbmdQdWJsaWNLZXlGcm9tRWQyNTUxOShwdWJsaWNLZXkpO1xuICAgIGNvbnN0IGhhc2hQdXJwb3NlID0gMTI7XG4gICAgcmV0dXJuIHRoaXMuY29tcHV0ZVNoYTI1NkNhbnRvbkhhc2goaGFzaFB1cnBvc2UsIGtleS5wdWJsaWNLZXkpO1xuICB9XG5cbiAgLyoqXG4gICAqIE1ldGhvZCB0byBwYXJzZSByYXcgY2FudG9uIHRyYW5zYWN0aW9uICYgZ2V0IHJlcXVpcmVkIGRhdGFcbiAgICogQHBhcmFtIHtTdHJpbmd9IHJhd0RhdGEgYmFzZTY0IGVuY29kZWQgc3RyaW5nXG4gICAqIEBwYXJhbSB7VHJhbnNhY3Rpb25UeXBlfSB0eFR5cGUgdGhlIHRyYW5zYWN0aW9uIHR5cGVcbiAgICogQHJldHVybnMge1ByZXBhcmVkVHhuUGFyc2VkSW5mb31cbiAgICovXG4gIHBhcnNlUmF3Q2FudG9uVHJhbnNhY3Rpb25EYXRhKHJhd0RhdGE6IHN0cmluZywgdHhUeXBlOiBUcmFuc2FjdGlvblR5cGUpOiBQcmVwYXJlZFR4blBhcnNlZEluZm8ge1xuICAgIGNvbnN0IGRlY29kZWREYXRhID0gdGhpcy5kZWNvZGVQcmVwYXJlZFRyYW5zYWN0aW9uKHJhd0RhdGEpO1xuICAgIGNvbnN0IG5vZGVzID0gZGVjb2RlZERhdGEudHJhbnNhY3Rpb24/Lm5vZGVzID8/IFtdO1xuICAgIGNvbnN0IGdldEZpZWxkID0gKGZpZWxkczogUmVjb3JkRmllbGRbXSwgbGFiZWw6IHN0cmluZykgPT4gZmllbGRzLmZpbmQoKGYpID0+IGYubGFiZWwgPT09IGxhYmVsKT8udmFsdWU/LnN1bTtcblxuICAgIGxldCBzZW5kZXIgPSAnJztcbiAgICBsZXQgcmVjZWl2ZXIgPSAnJztcbiAgICBsZXQgYW1vdW50ID0gJyc7XG4gICAgbGV0IG1lbW9JZDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIGxldCBpbnN0cnVtZW50SWQ6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICBsZXQgaW5zdHJ1bWVudEFkbWluOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBhcmd1bWVudCBmaWVsZHMgb2YgdGhlIGZpcnN0IGNyZWF0ZSBub2RlIG1hdGNoaW5nIHRoZSBnaXZlbiBlbnRpdHkgbmFtZS5cbiAgICAgKi9cbiAgICBjb25zdCBmaW5kQ3JlYXRlTm9kZUZpZWxkcyA9IChlbnRpdHlOYW1lOiBzdHJpbmcpOiBSZWNvcmRGaWVsZFtdIHwgdW5kZWZpbmVkID0+IHtcbiAgICAgIGZvciAoY29uc3Qgbm9kZSBvZiBub2Rlcykge1xuICAgICAgICBjb25zdCB2biA9IG5vZGUudmVyc2lvbmVkTm9kZTtcbiAgICAgICAgaWYgKCF2biB8fCB2bi5vbmVvZktpbmQgIT09ICd2MScpIGNvbnRpbnVlO1xuICAgICAgICBjb25zdCBudCA9IHZuLnYxLm5vZGVUeXBlO1xuICAgICAgICBpZiAobnQub25lb2ZLaW5kICE9PSAnY3JlYXRlJykgY29udGludWU7XG4gICAgICAgIGlmIChudC5jcmVhdGUudGVtcGxhdGVJZD8uZW50aXR5TmFtZSAhPT0gZW50aXR5TmFtZSkgY29udGludWU7XG4gICAgICAgIGNvbnN0IGFyZ1N1bSA9IG50LmNyZWF0ZS5hcmd1bWVudD8uc3VtO1xuICAgICAgICBpZiAoIWFyZ1N1bSB8fCBhcmdTdW0ub25lb2ZLaW5kICE9PSAncmVjb3JkJykgY29udGludWU7XG4gICAgICAgIGNvbnN0IGZpZWxkcyA9IGFyZ1N1bS5yZWNvcmQ/LmZpZWxkcztcbiAgICAgICAgaWYgKGZpZWxkcykgcmV0dXJuIGZpZWxkcztcbiAgICAgIH1cbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIGNob3NlblZhbHVlIGZpZWxkcyBvZiB0aGUgZmlyc3QgZXhlcmNpc2Ugbm9kZSBtYXRjaGluZyB0aGUgZ2l2ZW4gY2hvaWNlSWQuXG4gICAgICovXG4gICAgY29uc3QgZmluZEV4ZXJjaXNlTm9kZUZpZWxkcyA9IChjaG9pY2VJZDogc3RyaW5nKTogUmVjb3JkRmllbGRbXSB8IHVuZGVmaW5lZCA9PiB7XG4gICAgICBmb3IgKGNvbnN0IG5vZGUgb2Ygbm9kZXMpIHtcbiAgICAgICAgY29uc3Qgdm4gPSBub2RlLnZlcnNpb25lZE5vZGU7XG4gICAgICAgIGlmICghdm4gfHwgdm4ub25lb2ZLaW5kICE9PSAndjEnKSBjb250aW51ZTtcbiAgICAgICAgY29uc3QgbnQgPSB2bi52MS5ub2RlVHlwZTtcbiAgICAgICAgaWYgKG50Lm9uZW9mS2luZCAhPT0gJ2V4ZXJjaXNlJykgY29udGludWU7XG4gICAgICAgIGlmIChudC5leGVyY2lzZS5jaG9pY2VJZCAhPT0gY2hvaWNlSWQpIGNvbnRpbnVlO1xuICAgICAgICBjb25zdCBhcmdTdW0gPSBudC5leGVyY2lzZS5jaG9zZW5WYWx1ZT8uc3VtO1xuICAgICAgICBpZiAoIWFyZ1N1bSB8fCBhcmdTdW0ub25lb2ZLaW5kICE9PSAncmVjb3JkJykgY29udGludWU7XG4gICAgICAgIGNvbnN0IGZpZWxkcyA9IGFyZ1N1bS5yZWNvcmQ/LmZpZWxkcztcbiAgICAgICAgaWYgKGZpZWxkcykgcmV0dXJuIGZpZWxkcztcbiAgICAgIH1cbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIGZpcnN0IGFjdGluZyBwYXJ0eSBvZiB0aGUgZmlyc3QgZXhlcmNpc2Ugbm9kZSBtYXRjaGluZyB0aGUgZ2l2ZW4gY2hvaWNlSWQuXG4gICAgICovXG4gICAgY29uc3QgZmluZEV4ZXJjaXNlQWN0aW5nUGFydHkgPSAoY2hvaWNlSWQ6IHN0cmluZyk6IHN0cmluZyB8IHVuZGVmaW5lZCA9PiB7XG4gICAgICBmb3IgKGNvbnN0IG5vZGUgb2Ygbm9kZXMpIHtcbiAgICAgICAgY29uc3Qgdm4gPSBub2RlLnZlcnNpb25lZE5vZGU7XG4gICAgICAgIGlmICghdm4gfHwgdm4ub25lb2ZLaW5kICE9PSAndjEnKSBjb250aW51ZTtcbiAgICAgICAgY29uc3QgbnQgPSB2bi52MS5ub2RlVHlwZTtcbiAgICAgICAgaWYgKG50Lm9uZW9mS2luZCAhPT0gJ2V4ZXJjaXNlJykgY29udGludWU7XG4gICAgICAgIGlmIChudC5leGVyY2lzZS5jaG9pY2VJZCAhPT0gY2hvaWNlSWQpIGNvbnRpbnVlO1xuICAgICAgICByZXR1cm4gbnQuZXhlcmNpc2UuYWN0aW5nUGFydGllc1swXTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfTtcblxuICAgIC8qKiBVbndyYXBzIGEgRGFtbCBvcHRpb25hbCAob3IgYmFyZSkgcGFydHkgdmFsdWUgdG8gdGhlIHBhcnR5IHN0cmluZy4gKi9cbiAgICBjb25zdCBnZXRQYXJ0eUZyb21PcHRpb25hbCA9IChmaWVsZHM6IFJlY29yZEZpZWxkW10sIGxhYmVsOiBzdHJpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQgPT4ge1xuICAgICAgY29uc3Qgc3VtID0gZ2V0RmllbGQoZmllbGRzLCBsYWJlbCk7XG4gICAgICBpZiAoc3VtPy5vbmVvZktpbmQgPT09ICdwYXJ0eScpIHJldHVybiBzdW0ucGFydHkgPz8gJyc7XG4gICAgICBpZiAoc3VtPy5vbmVvZktpbmQgPT09ICdvcHRpb25hbCcpIHtcbiAgICAgICAgY29uc3QgaW5uZXIgPSBzdW0ub3B0aW9uYWwudmFsdWU/LnN1bTtcbiAgICAgICAgaWYgKGlubmVyPy5vbmVvZktpbmQgPT09ICdwYXJ0eScpIHJldHVybiBpbm5lci5wYXJ0eSA/PyAnJztcbiAgICAgIH1cbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfTtcblxuICAgIC8qKiBSZWFkcyBhIERhbWwgZW51bSBjb25zdHJ1Y3RvciBuYW1lIChlLmcuIEFsbG9jYXRpb25WMiBUcmFuc2ZlclNpZGUgU2VuZGVyU2lkZS9SZWNlaXZlclNpZGUpLiAqL1xuICAgIGNvbnN0IGdldEVudW1Db25zdHJ1Y3RvciA9IChmaWVsZHM6IFJlY29yZEZpZWxkW10sIGxhYmVsOiBzdHJpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQgPT4ge1xuICAgICAgY29uc3Qgc3VtID0gZ2V0RmllbGQoZmllbGRzLCBsYWJlbCk7XG4gICAgICBpZiAoc3VtPy5vbmVvZktpbmQgPT09ICdlbnVtJykgcmV0dXJuIHN1bS5lbnVtLmNvbnN0cnVjdG9yID8/ICcnO1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogRXh0cmFjdHMgc2VuZGVyLCByZWNlaXZlciwgYW1vdW50LCBhbmQgaW5zdHJ1bWVudCBmaWVsZHMgZnJvbSBhIHRyYW5zZmVyIHJlY29yZC5cbiAgICAgKiBDYW50b24gY29pbiB0cmFuc2ZlcnMgYW5kIGNidGMgdXNlIGluc3RydW1lbnRJZC5hZG1pbjsgcmVndWxhciB0b2tlbiB0cmFuc2ZlcnMgdXNlIGluc3RydW1lbnRJZGVudGlmaWVyLnNvdXJjZS5cbiAgICAgKi9cbiAgICBjb25zdCBleHRyYWN0RnJvbVRyYW5zZmVyUmVjb3JkID0gKFxuICAgICAgdHJhbnNmZXJSZWNvcmQ6IFJlY29yZEZpZWxkW10sXG4gICAgICBpbnN0cnVtZW50RmllbGROYW1lOiBzdHJpbmcsXG4gICAgICBpbnN0cnVtZW50QWRtaW5GaWVsZE5hbWU6IHN0cmluZ1xuICAgICk6IHZvaWQgPT4ge1xuICAgICAgY29uc3Qgc2VuZGVyRGF0YSA9IGdldEZpZWxkKHRyYW5zZmVyUmVjb3JkLCAnc2VuZGVyJyk7XG4gICAgICBpZiAoc2VuZGVyRGF0YT8ub25lb2ZLaW5kID09PSAncGFydHknKSBzZW5kZXIgPSBzZW5kZXJEYXRhLnBhcnR5ID8/ICcnO1xuICAgICAgY29uc3QgcmVjZWl2ZXJEYXRhID0gZ2V0RmllbGQodHJhbnNmZXJSZWNvcmQsICdyZWNlaXZlcicpO1xuICAgICAgaWYgKHJlY2VpdmVyRGF0YT8ub25lb2ZLaW5kID09PSAncGFydHknKSByZWNlaXZlciA9IHJlY2VpdmVyRGF0YS5wYXJ0eSA/PyAnJztcbiAgICAgIGNvbnN0IGFtb3VudERhdGEgPSBnZXRGaWVsZCh0cmFuc2ZlclJlY29yZCwgJ2Ftb3VudCcpO1xuICAgICAgaWYgKGFtb3VudERhdGE/Lm9uZW9mS2luZCA9PT0gJ251bWVyaWMnKSBhbW91bnQgPSBhbW91bnREYXRhLm51bWVyaWMgPz8gJyc7XG4gICAgICBjb25zdCBpbnN0cnVtZW50RmllbGQgPSBnZXRGaWVsZCh0cmFuc2ZlclJlY29yZCwgaW5zdHJ1bWVudEZpZWxkTmFtZSk7XG4gICAgICBpZiAoaW5zdHJ1bWVudEZpZWxkPy5vbmVvZktpbmQgPT09ICdyZWNvcmQnKSB7XG4gICAgICAgIGNvbnN0IGluc3RydW1lbnRGaWVsZHMgPSBpbnN0cnVtZW50RmllbGQucmVjb3JkPy5maWVsZHMgPz8gW107XG4gICAgICAgIGNvbnN0IGFkbWluRGF0YSA9IGdldEZpZWxkKGluc3RydW1lbnRGaWVsZHMsIGluc3RydW1lbnRBZG1pbkZpZWxkTmFtZSk7XG4gICAgICAgIGlmIChhZG1pbkRhdGE/Lm9uZW9mS2luZCA9PT0gJ3BhcnR5JykgaW5zdHJ1bWVudEFkbWluID0gYWRtaW5EYXRhLnBhcnR5ID8/ICcnO1xuICAgICAgICBjb25zdCBpZERhdGEgPSBnZXRGaWVsZChpbnN0cnVtZW50RmllbGRzLCAnaWQnKTtcbiAgICAgICAgaWYgKGlkRGF0YT8ub25lb2ZLaW5kID09PSAndGV4dCcpIGluc3RydW1lbnRJZCA9IGlkRGF0YS50ZXh0ID8/ICcnO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBzd2l0Y2ggKHR4VHlwZSkge1xuICAgICAgY2FzZSBUcmFuc2FjdGlvblR5cGUuT25lU3RlcFByZUFwcHJvdmFsOiB7XG4gICAgICAgIC8vIENhbnRvbiBjb2luOiBUcmFuc2ZlclByZWFwcHJvdmFsUHJvcG9zYWwgY3JlYXRlIG5vZGUg4oaSIHByb3ZpZGVyPXNlbmRlciwgcmVjZWl2ZXJcbiAgICAgICAgY29uc3QgY29pbkZpZWxkcyA9IGZpbmRDcmVhdGVOb2RlRmllbGRzKCdUcmFuc2ZlclByZWFwcHJvdmFsUHJvcG9zYWwnKTtcbiAgICAgICAgaWYgKGNvaW5GaWVsZHMpIHtcbiAgICAgICAgICBjb25zdCBwcm92aWRlckRhdGEgPSBnZXRGaWVsZChjb2luRmllbGRzLCAncHJvdmlkZXInKTtcbiAgICAgICAgICBpZiAocHJvdmlkZXJEYXRhPy5vbmVvZktpbmQgPT09ICdwYXJ0eScpIHNlbmRlciA9IHByb3ZpZGVyRGF0YS5wYXJ0eSA/PyAnJztcbiAgICAgICAgICBjb25zdCByZWNlaXZlckRhdGEgPSBnZXRGaWVsZChjb2luRmllbGRzLCAncmVjZWl2ZXInKTtcbiAgICAgICAgICBpZiAocmVjZWl2ZXJEYXRhPy5vbmVvZktpbmQgPT09ICdwYXJ0eScpIHJlY2VpdmVyID0gcmVjZWl2ZXJEYXRhLnBhcnR5ID8/ICcnO1xuICAgICAgICAgIGFtb3VudCA9ICcwJztcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICAvLyBUb2tlbjogVHJhbnNmZXJQcmVhcHByb3ZhbCBjcmVhdGUgbm9kZSDihpIgb3BlcmF0b3I9c2VuZGVyLCByZWNlaXZlciwgaW5zdHJ1bWVudEFkbWluLCBpbnN0cnVtZW50QWxsb3dhbmNlc1xuICAgICAgICBjb25zdCB0b2tlbkZpZWxkcyA9IGZpbmRDcmVhdGVOb2RlRmllbGRzKCdUcmFuc2ZlclByZWFwcHJvdmFsJyk7XG4gICAgICAgIGlmICh0b2tlbkZpZWxkcykge1xuICAgICAgICAgIGNvbnN0IG9wZXJhdG9yRGF0YSA9IGdldEZpZWxkKHRva2VuRmllbGRzLCAnb3BlcmF0b3InKTtcbiAgICAgICAgICBpZiAob3BlcmF0b3JEYXRhPy5vbmVvZktpbmQgPT09ICdwYXJ0eScpIHNlbmRlciA9IG9wZXJhdG9yRGF0YS5wYXJ0eSA/PyAnJztcbiAgICAgICAgICBjb25zdCByZWNlaXZlckRhdGEgPSBnZXRGaWVsZCh0b2tlbkZpZWxkcywgJ3JlY2VpdmVyJyk7XG4gICAgICAgICAgaWYgKHJlY2VpdmVyRGF0YT8ub25lb2ZLaW5kID09PSAncGFydHknKSByZWNlaXZlciA9IHJlY2VpdmVyRGF0YS5wYXJ0eSA/PyAnJztcbiAgICAgICAgICBhbW91bnQgPSAnMCc7XG4gICAgICAgICAgY29uc3QgaW5zdHJ1bWVudEFkbWluRGF0YSA9IGdldEZpZWxkKHRva2VuRmllbGRzLCAnaW5zdHJ1bWVudEFkbWluJyk7XG4gICAgICAgICAgaWYgKGluc3RydW1lbnRBZG1pbkRhdGE/Lm9uZW9mS2luZCA9PT0gJ3BhcnR5JykgaW5zdHJ1bWVudEFkbWluID0gaW5zdHJ1bWVudEFkbWluRGF0YS5wYXJ0eSA/PyAnJztcbiAgICAgICAgICBjb25zdCBhbGxvd2FuY2VzRGF0YSA9IGdldEZpZWxkKHRva2VuRmllbGRzLCAnaW5zdHJ1bWVudEFsbG93YW5jZXMnKTtcbiAgICAgICAgICBpZiAoYWxsb3dhbmNlc0RhdGE/Lm9uZW9mS2luZCA9PT0gJ2xpc3QnKSB7XG4gICAgICAgICAgICAvLyBmb3IgdGhlIHNhbWUgaW5zdHJ1bWVudCBhZG1pbiwgaWYgbXVsdGlwbGUgdG9rZW5zIGFyZSBzdXBwb3J0ZWQgdGhlbiB3ZSBjYW4gZW5hYmxlIGFsbCBvZiB0aGVtLFxuICAgICAgICAgICAgLy8gYnV0IHdlIHdvbid0IGJlIGRvaW5nIHRoYXQgZm9yIG5vd1xuICAgICAgICAgICAgY29uc3QgZmlyc3RBbGxvd2FuY2UgPSBhbGxvd2FuY2VzRGF0YS5saXN0Py5lbGVtZW50cz8uWzBdPy5zdW07XG4gICAgICAgICAgICBpZiAoZmlyc3RBbGxvd2FuY2U/Lm9uZW9mS2luZCA9PT0gJ3JlY29yZCcpIHtcbiAgICAgICAgICAgICAgY29uc3QgYWxsb3dhbmNlRmllbGRzID0gZmlyc3RBbGxvd2FuY2UucmVjb3JkPy5maWVsZHMgPz8gW107XG4gICAgICAgICAgICAgIGNvbnN0IGlkRGF0YSA9IGdldEZpZWxkKGFsbG93YW5jZUZpZWxkcywgJ2lkJyk7XG4gICAgICAgICAgICAgIGlmIChpZERhdGE/Lm9uZW9mS2luZCA9PT0gJ3RleHQnKSBpbnN0cnVtZW50SWQgPSBpZERhdGEudGV4dCA/PyAnJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIGNhc2UgVHJhbnNhY3Rpb25UeXBlLlRyYW5zZmVyQWNjZXB0OiB7XG4gICAgICAgIC8vIENhbnRvbiBjb2luOiBBbXVsZXQgY3JlYXRlIG5vZGUg4oaSIGRzbz1zZW5kZXIsIG93bmVyPXJlY2VpdmVyLCBhbW91bnQuaW5pdGlhbEFtb3VudFxuICAgICAgICBjb25zdCBhbXVsZXRGaWVsZHMgPSBmaW5kQ3JlYXRlTm9kZUZpZWxkcygnQW11bGV0Jyk7XG4gICAgICAgIGlmIChhbXVsZXRGaWVsZHMpIHtcbiAgICAgICAgICBjb25zdCBkc29EYXRhID0gZ2V0RmllbGQoYW11bGV0RmllbGRzLCAnZHNvJyk7XG4gICAgICAgICAgaWYgKGRzb0RhdGE/Lm9uZW9mS2luZCA9PT0gJ3BhcnR5Jykgc2VuZGVyID0gZHNvRGF0YS5wYXJ0eSA/PyAnJztcbiAgICAgICAgICBjb25zdCBvd25lckRhdGEgPSBnZXRGaWVsZChhbXVsZXRGaWVsZHMsICdvd25lcicpO1xuICAgICAgICAgIGlmIChvd25lckRhdGE/Lm9uZW9mS2luZCA9PT0gJ3BhcnR5JykgcmVjZWl2ZXIgPSBvd25lckRhdGEucGFydHkgPz8gJyc7XG4gICAgICAgICAgY29uc3QgYW1vdW50RmllbGQgPSBnZXRGaWVsZChhbXVsZXRGaWVsZHMsICdhbW91bnQnKTtcbiAgICAgICAgICBpZiAoYW1vdW50RmllbGQ/Lm9uZW9mS2luZCA9PT0gJ3JlY29yZCcpIHtcbiAgICAgICAgICAgIGNvbnN0IGluaXRpYWxBbW91bnREYXRhID0gZ2V0RmllbGQoYW1vdW50RmllbGQucmVjb3JkPy5maWVsZHMgPz8gW10sICdpbml0aWFsQW1vdW50Jyk7XG4gICAgICAgICAgICBpZiAoaW5pdGlhbEFtb3VudERhdGE/Lm9uZW9mS2luZCA9PT0gJ251bWVyaWMnKSBhbW91bnQgPSBpbml0aWFsQW1vdW50RGF0YS5udW1lcmljID8/ICcnO1xuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICAvLyBSZWd1bGFyIHRva2VuIChub24tY2J0Yyk6IEV4ZWN1dGVkVHJhbnNmZXIgY3JlYXRlIG5vZGVcbiAgICAgICAgLy8g4oaSIHRyYW5zZmVyLntzZW5kZXIsIHJlY2VpdmVyLCBhbW91bnQsIGluc3RydW1lbnRJZGVudGlmaWVyLntzb3VyY2U9YWRtaW4sIGlkfX1cbiAgICAgICAgY29uc3QgZXhlY3V0ZWRUcmFuc2ZlckZpZWxkcyA9IGZpbmRDcmVhdGVOb2RlRmllbGRzKCdFeGVjdXRlZFRyYW5zZmVyJyk7XG4gICAgICAgIGlmIChleGVjdXRlZFRyYW5zZmVyRmllbGRzKSB7XG4gICAgICAgICAgY29uc3QgdHJhbnNmZXJTdW0gPSBnZXRGaWVsZChleGVjdXRlZFRyYW5zZmVyRmllbGRzLCAndHJhbnNmZXInKTtcbiAgICAgICAgICBpZiAodHJhbnNmZXJTdW0/Lm9uZW9mS2luZCA9PT0gJ3JlY29yZCcpIHtcbiAgICAgICAgICAgIGV4dHJhY3RGcm9tVHJhbnNmZXJSZWNvcmQodHJhbnNmZXJTdW0ucmVjb3JkPy5maWVsZHMgPz8gW10sICdpbnN0cnVtZW50SWRlbnRpZmllcicsICdzb3VyY2UnKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgLy8gY2J0YyB0b2tlbiBmYWxsYmFjazogVHJhbnNmZXJSdWxlX0RpcmVjdFRyYW5zZmVyIGV4ZXJjaXNlIG5vZGVcbiAgICAgICAgLy8g4oaSIHRyYW5zZmVyLntzZW5kZXIsIHJlY2VpdmVyLCBhbW91bnQsIGluc3RydW1lbnRJZC57YWRtaW4sIGlkfX1cbiAgICAgICAgY29uc3QgZGlyZWN0VHJhbnNmZXJGaWVsZHMgPSBmaW5kRXhlcmNpc2VOb2RlRmllbGRzKCdUcmFuc2ZlclJ1bGVfRGlyZWN0VHJhbnNmZXInKTtcbiAgICAgICAgaWYgKGRpcmVjdFRyYW5zZmVyRmllbGRzKSB7XG4gICAgICAgICAgY29uc3QgdHJhbnNmZXJTdW0gPSBnZXRGaWVsZChkaXJlY3RUcmFuc2ZlckZpZWxkcywgJ3RyYW5zZmVyJyk7XG4gICAgICAgICAgaWYgKHRyYW5zZmVyU3VtPy5vbmVvZktpbmQgPT09ICdyZWNvcmQnKSB7XG4gICAgICAgICAgICBleHRyYWN0RnJvbVRyYW5zZmVyUmVjb3JkKHRyYW5zZmVyU3VtLnJlY29yZD8uZmllbGRzID8/IFtdLCAnaW5zdHJ1bWVudElkJywgJ2FkbWluJyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIFVTREN4L3R3by1zdGVwIHRva2VuIGZhbGxiYWNrOiBUcmFuc2ZlclJ1bGVfVHdvU3RlcFRyYW5zZmVyIGV4ZXJjaXNlIG5vZGVcbiAgICAgICAgLy8g4oaSIHRyYW5zZmVyLntzZW5kZXIsIHJlY2VpdmVyLCBhbW91bnQsIGluc3RydW1lbnRJZC57YWRtaW4sIGlkfX1cbiAgICAgICAgaWYgKCFzZW5kZXIpIHtcbiAgICAgICAgICBjb25zdCB0d29TdGVwVHJhbnNmZXJGaWVsZHMgPSBmaW5kRXhlcmNpc2VOb2RlRmllbGRzKCdUcmFuc2ZlclJ1bGVfVHdvU3RlcFRyYW5zZmVyJyk7XG4gICAgICAgICAgaWYgKHR3b1N0ZXBUcmFuc2ZlckZpZWxkcykge1xuICAgICAgICAgICAgY29uc3QgdHJhbnNmZXJTdW0gPSBnZXRGaWVsZCh0d29TdGVwVHJhbnNmZXJGaWVsZHMsICd0cmFuc2ZlcicpO1xuICAgICAgICAgICAgaWYgKHRyYW5zZmVyU3VtPy5vbmVvZktpbmQgPT09ICdyZWNvcmQnKSB7XG4gICAgICAgICAgICAgIGV4dHJhY3RGcm9tVHJhbnNmZXJSZWNvcmQodHJhbnNmZXJTdW0ucmVjb3JkPy5maWVsZHMgPz8gW10sICdpbnN0cnVtZW50SWQnLCAnYWRtaW4nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIGNhc2UgVHJhbnNhY3Rpb25UeXBlLlRyYW5zZmVyUmVqZWN0OiB7XG4gICAgICAgIC8vIENhbnRvbiBjb2luOiBBbXVsZXQgY3JlYXRlIG5vZGUg4oaSIGRzbz1zZW5kZXIsIG93bmVyPXJlY2VpdmVyLCBhbW91bnQuaW5pdGlhbEFtb3VudFxuICAgICAgICBjb25zdCBhbXVsZXRGaWVsZHMgPSBmaW5kQ3JlYXRlTm9kZUZpZWxkcygnQW11bGV0Jyk7XG4gICAgICAgIGlmIChhbXVsZXRGaWVsZHMpIHtcbiAgICAgICAgICBjb25zdCBkc29EYXRhID0gZ2V0RmllbGQoYW11bGV0RmllbGRzLCAnZHNvJyk7XG4gICAgICAgICAgaWYgKGRzb0RhdGE/Lm9uZW9mS2luZCA9PT0gJ3BhcnR5Jykgc2VuZGVyID0gZHNvRGF0YS5wYXJ0eSA/PyAnJztcbiAgICAgICAgICBjb25zdCBvd25lckRhdGEgPSBnZXRGaWVsZChhbXVsZXRGaWVsZHMsICdvd25lcicpO1xuICAgICAgICAgIGlmIChvd25lckRhdGE/Lm9uZW9mS2luZCA9PT0gJ3BhcnR5JykgcmVjZWl2ZXIgPSBvd25lckRhdGEucGFydHkgPz8gJyc7XG4gICAgICAgICAgY29uc3QgYW1vdW50RmllbGQgPSBnZXRGaWVsZChhbXVsZXRGaWVsZHMsICdhbW91bnQnKTtcbiAgICAgICAgICBpZiAoYW1vdW50RmllbGQ/Lm9uZW9mS2luZCA9PT0gJ3JlY29yZCcpIHtcbiAgICAgICAgICAgIGNvbnN0IGluaXRpYWxBbW91bnREYXRhID0gZ2V0RmllbGQoYW1vdW50RmllbGQucmVjb3JkPy5maWVsZHMgPz8gW10sICdpbml0aWFsQW1vdW50Jyk7XG4gICAgICAgICAgICBpZiAoaW5pdGlhbEFtb3VudERhdGE/Lm9uZW9mS2luZCA9PT0gJ251bWVyaWMnKSBhbW91bnQgPSBpbml0aWFsQW1vdW50RGF0YS5udW1lcmljID8/ICcnO1xuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICAvLyBSZWd1bGFyIHRva2VuIChub24tY2J0Yyk6IFJlamVjdGVkVHJhbnNmZXIgY3JlYXRlIG5vZGVcbiAgICAgICAgLy8g4oaSIHRyYW5zZmVyLntzZW5kZXIsIHJlY2VpdmVyLCBhbW91bnQsIGluc3RydW1lbnRJZGVudGlmaWVyLntzb3VyY2U9YWRtaW4sIGlkfX1cbiAgICAgICAgY29uc3QgcmVqZWN0ZWRUcmFuc2ZlckZpZWxkcyA9IGZpbmRDcmVhdGVOb2RlRmllbGRzKCdSZWplY3RlZFRyYW5zZmVyJyk7XG4gICAgICAgIGlmIChyZWplY3RlZFRyYW5zZmVyRmllbGRzKSB7XG4gICAgICAgICAgY29uc3QgdHJhbnNmZXJTdW0gPSBnZXRGaWVsZChyZWplY3RlZFRyYW5zZmVyRmllbGRzLCAndHJhbnNmZXInKTtcbiAgICAgICAgICBpZiAodHJhbnNmZXJTdW0/Lm9uZW9mS2luZCA9PT0gJ3JlY29yZCcpIHtcbiAgICAgICAgICAgIGV4dHJhY3RGcm9tVHJhbnNmZXJSZWNvcmQodHJhbnNmZXJTdW0ucmVjb3JkPy5maWVsZHMgPz8gW10sICdpbnN0cnVtZW50SWRlbnRpZmllcicsICdzb3VyY2UnKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgLy8gY2J0YyB0b2tlbiBmYWxsYmFjazogSG9sZGluZyBjcmVhdGUgbm9kZSAob3duZXI9c2VuZGVyLCBpbnN0cnVtZW50LCBhbW91bnQpXG4gICAgICAgIC8vICsgVHJhbnNmZXJJbnN0cnVjdGlvbl9SZWplY3QgZXhlcmNpc2UgKGFjdGluZ1BhcnRpZXNbMF09cmVjZWl2ZXIgd2hvIHJlamVjdGVkKVxuICAgICAgICBjb25zdCBob2xkaW5nRmllbGRzID0gZmluZENyZWF0ZU5vZGVGaWVsZHMoJ0hvbGRpbmcnKTtcbiAgICAgICAgaWYgKGhvbGRpbmdGaWVsZHMpIHtcbiAgICAgICAgICBjb25zdCBvd25lckRhdGEgPSBnZXRGaWVsZChob2xkaW5nRmllbGRzLCAnb3duZXInKTtcbiAgICAgICAgICBpZiAob3duZXJEYXRhPy5vbmVvZktpbmQgPT09ICdwYXJ0eScpIHNlbmRlciA9IG93bmVyRGF0YS5wYXJ0eSA/PyAnJztcbiAgICAgICAgICBjb25zdCBhbW91bnREYXRhID0gZ2V0RmllbGQoaG9sZGluZ0ZpZWxkcywgJ2Ftb3VudCcpO1xuICAgICAgICAgIGlmIChhbW91bnREYXRhPy5vbmVvZktpbmQgPT09ICdudW1lcmljJykgYW1vdW50ID0gYW1vdW50RGF0YS5udW1lcmljID8/ICcnO1xuICAgICAgICAgIGNvbnN0IGluc3RydW1lbnREYXRhID0gZ2V0RmllbGQoaG9sZGluZ0ZpZWxkcywgJ2luc3RydW1lbnQnKTtcbiAgICAgICAgICBpZiAoaW5zdHJ1bWVudERhdGE/Lm9uZW9mS2luZCA9PT0gJ3JlY29yZCcpIHtcbiAgICAgICAgICAgIGNvbnN0IGluc3RydW1lbnRGaWVsZHMgPSBpbnN0cnVtZW50RGF0YS5yZWNvcmQ/LmZpZWxkcyA/PyBbXTtcbiAgICAgICAgICAgIGNvbnN0IHNvdXJjZURhdGEgPSBnZXRGaWVsZChpbnN0cnVtZW50RmllbGRzLCAnc291cmNlJyk7XG4gICAgICAgICAgICBpZiAoc291cmNlRGF0YT8ub25lb2ZLaW5kID09PSAncGFydHknKSBpbnN0cnVtZW50QWRtaW4gPSBzb3VyY2VEYXRhLnBhcnR5ID8/ICcnO1xuICAgICAgICAgICAgY29uc3QgaWREYXRhID0gZ2V0RmllbGQoaW5zdHJ1bWVudEZpZWxkcywgJ2lkJyk7XG4gICAgICAgICAgICBpZiAoaWREYXRhPy5vbmVvZktpbmQgPT09ICd0ZXh0JykgaW5zdHJ1bWVudElkID0gaWREYXRhLnRleHQgPz8gJyc7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IHJlY2VpdmVyUGFydHkgPSBmaW5kRXhlcmNpc2VBY3RpbmdQYXJ0eSgnVHJhbnNmZXJJbnN0cnVjdGlvbl9SZWplY3QnKTtcbiAgICAgICAgICBpZiAocmVjZWl2ZXJQYXJ0eSkgcmVjZWl2ZXIgPSByZWNlaXZlclBhcnR5O1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBjYXNlIFRyYW5zYWN0aW9uVHlwZS5BbGxvY2F0aW9uQWxsb2NhdGVXaXRoZHJhd246IHtcbiAgICAgICAgLy8gSG9sZGluZyBjcmVhdGUgbm9kZSDihpIgb3duZXI9c2VuZGVyPXJlY2VpdmVyIChhbGxvY2F0aW5nIHBhcnR5IGdldHMgdGhlaXIgaG9sZGluZyBiYWNrKSxcbiAgICAgICAgLy8gaW5zdHJ1bWVudC57c291cmNlPWFkbWluLCBpZH0sIGFtb3VudFxuICAgICAgICBjb25zdCBob2xkaW5nRmllbGRzID0gZmluZENyZWF0ZU5vZGVGaWVsZHMoJ0hvbGRpbmcnKTtcbiAgICAgICAgaWYgKGhvbGRpbmdGaWVsZHMpIHtcbiAgICAgICAgICBjb25zdCBvd25lckRhdGEgPSBnZXRGaWVsZChob2xkaW5nRmllbGRzLCAnb3duZXInKTtcbiAgICAgICAgICBpZiAob3duZXJEYXRhPy5vbmVvZktpbmQgPT09ICdwYXJ0eScpIHtcbiAgICAgICAgICAgIHJlY2VpdmVyID0gb3duZXJEYXRhLnBhcnR5ID8/ICcnO1xuICAgICAgICAgICAgc2VuZGVyID0gcmVjZWl2ZXI7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IGFtb3VudERhdGEgPSBnZXRGaWVsZChob2xkaW5nRmllbGRzLCAnYW1vdW50Jyk7XG4gICAgICAgICAgaWYgKGFtb3VudERhdGE/Lm9uZW9mS2luZCA9PT0gJ251bWVyaWMnKSBhbW91bnQgPSBhbW91bnREYXRhLm51bWVyaWMgPz8gJyc7XG4gICAgICAgICAgY29uc3QgaW5zdHJ1bWVudERhdGEgPSBnZXRGaWVsZChob2xkaW5nRmllbGRzLCAnaW5zdHJ1bWVudCcpO1xuICAgICAgICAgIGlmIChpbnN0cnVtZW50RGF0YT8ub25lb2ZLaW5kID09PSAncmVjb3JkJykge1xuICAgICAgICAgICAgY29uc3QgaW5zdHJ1bWVudEZpZWxkcyA9IGluc3RydW1lbnREYXRhLnJlY29yZD8uZmllbGRzID8/IFtdO1xuICAgICAgICAgICAgY29uc3Qgc291cmNlRGF0YSA9IGdldEZpZWxkKGluc3RydW1lbnRGaWVsZHMsICdzb3VyY2UnKTtcbiAgICAgICAgICAgIGlmIChzb3VyY2VEYXRhPy5vbmVvZktpbmQgPT09ICdwYXJ0eScpIGluc3RydW1lbnRBZG1pbiA9IHNvdXJjZURhdGEucGFydHkgPz8gJyc7XG4gICAgICAgICAgICBjb25zdCBpZERhdGEgPSBnZXRGaWVsZChpbnN0cnVtZW50RmllbGRzLCAnaWQnKTtcbiAgICAgICAgICAgIGlmIChpZERhdGE/Lm9uZW9mS2luZCA9PT0gJ3RleHQnKSBpbnN0cnVtZW50SWQgPSBpZERhdGEudGV4dCA/PyAnJztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIGNhc2UgVHJhbnNhY3Rpb25UeXBlLkFsbG9jYXRpb25BbGxvY2F0ZToge1xuICAgICAgICAvLyBWMiAoYWxsb2NhdGlvbi1pbnN0cnVjdGlvbi12Mik6IEFsbG9jYXRpb25WMiBjcmVhdGUgbm9kZVxuICAgICAgICAvLyDihpIgYWxsb2NhdGlvbi57YXV0aG9yaXplci5vd25lciwgYWRtaW4sIHRyYW5zZmVyTGVnU2lkZXNbXS57c2lkZSwgb3RoZXJzaWRlLm93bmVyLCBhbW91bnQsIGluc3RydW1lbnRJZH19LlxuICAgICAgICAvLyBUaGUgYXV0aG9yaXplciBpcyB0aGUgYWxsb2NhdGluZyBwYXJ0eTsgaXRzIG91dGdvaW5nIGxlZyAoc2lkZT1TZW5kZXJTaWRlKSBjYXJyaWVzIHRoZVxuICAgICAgICAvLyBzZXR0bGVtZW50IGNvdW50ZXJwYXJ0eSAocmVjZWl2ZXIpIGFuZCBhbW91bnQuIEEgcmVjZWl2ZXItb25seSBhbGxvY2F0aW9uIGhhcyBub1xuICAgICAgICAvLyBTZW5kZXJTaWRlIGxlZyDigJQgdGhlIGF1dGhvcml6ZXIgcmVjZWl2ZXMsIHNvIHNlbmRlci9yZWNlaXZlciBmbGlwIHRvIHRoZSBvdGhlcnNpZGUgb2ZcbiAgICAgICAgLy8gaXRzIChmaXJzdCkgUmVjZWl2ZXJTaWRlIGxlZy4gVGhlIGZpcnN0IG1hdGNoaW5nIGxlZyB3aW5zIGZvciBtdWx0aS1sZWcgYWxsb2NhdGlvbnMuXG4gICAgICAgIGNvbnN0IGFsbG9jYXRpb25WMkZpZWxkcyA9IGZpbmRDcmVhdGVOb2RlRmllbGRzKCdBbGxvY2F0aW9uVjInKTtcbiAgICAgICAgaWYgKGFsbG9jYXRpb25WMkZpZWxkcykge1xuICAgICAgICAgIGNvbnN0IGFsbG9jYXRpb25GaWVsZCA9IGdldEZpZWxkKGFsbG9jYXRpb25WMkZpZWxkcywgJ2FsbG9jYXRpb24nKTtcbiAgICAgICAgICBpZiAoYWxsb2NhdGlvbkZpZWxkPy5vbmVvZktpbmQgPT09ICdyZWNvcmQnKSB7XG4gICAgICAgICAgICBjb25zdCBhbGxvY2F0aW9uUmVjb3JkID0gYWxsb2NhdGlvbkZpZWxkLnJlY29yZD8uZmllbGRzID8/IFtdO1xuICAgICAgICAgICAgY29uc3QgYXV0aG9yaXplciA9IGdldEZpZWxkKGFsbG9jYXRpb25SZWNvcmQsICdhdXRob3JpemVyJyk7XG4gICAgICAgICAgICBjb25zdCBhdXRob3JpemVyT3duZXIgPVxuICAgICAgICAgICAgICBhdXRob3JpemVyPy5vbmVvZktpbmQgPT09ICdyZWNvcmQnXG4gICAgICAgICAgICAgICAgPyBnZXRQYXJ0eUZyb21PcHRpb25hbChhdXRob3JpemVyLnJlY29yZD8uZmllbGRzID8/IFtdLCAnb3duZXInKVxuICAgICAgICAgICAgICAgIDogdW5kZWZpbmVkO1xuICAgICAgICAgICAgY29uc3QgYWRtaW5EYXRhID0gZ2V0RmllbGQoYWxsb2NhdGlvblJlY29yZCwgJ2FkbWluJyk7XG4gICAgICAgICAgICBpZiAoYWRtaW5EYXRhPy5vbmVvZktpbmQgPT09ICdwYXJ0eScpIGluc3RydW1lbnRBZG1pbiA9IGFkbWluRGF0YS5wYXJ0eSA/PyAnJztcbiAgICAgICAgICAgIGNvbnN0IGxlZ3NEYXRhID0gZ2V0RmllbGQoYWxsb2NhdGlvblJlY29yZCwgJ3RyYW5zZmVyTGVnU2lkZXMnKTtcbiAgICAgICAgICAgIGlmIChsZWdzRGF0YT8ub25lb2ZLaW5kID09PSAnbGlzdCcpIHtcbiAgICAgICAgICAgICAgY29uc3QgbGVnUmVjb3JkcyA9IChsZWdzRGF0YS5saXN0Py5lbGVtZW50cyA/PyBbXSlcbiAgICAgICAgICAgICAgICAubWFwKChsZWcpID0+IChsZWcuc3VtLm9uZW9mS2luZCA9PT0gJ3JlY29yZCcgPyBsZWcuc3VtLnJlY29yZC5maWVsZHMgOiB1bmRlZmluZWQpKVxuICAgICAgICAgICAgICAgIC5maWx0ZXIoKGZpZWxkcyk6IGZpZWxkcyBpcyBSZWNvcmRGaWVsZFtdID0+IGZpZWxkcyAhPT0gdW5kZWZpbmVkKTtcbiAgICAgICAgICAgICAgY29uc3Qgc2VuZGVyTGVnID0gbGVnUmVjb3Jkcy5maW5kKChsZWcpID0+IGdldEVudW1Db25zdHJ1Y3RvcihsZWcsICdzaWRlJykgPT09ICdTZW5kZXJTaWRlJyk7XG4gICAgICAgICAgICAgIGNvbnN0IGxlZyA9IHNlbmRlckxlZyA/PyBsZWdSZWNvcmRzLmZpbmQoKGxlZykgPT4gZ2V0RW51bUNvbnN0cnVjdG9yKGxlZywgJ3NpZGUnKSA9PT0gJ1JlY2VpdmVyU2lkZScpO1xuICAgICAgICAgICAgICBpZiAobGVnKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbGVnT3RoZXJzaWRlID0gZ2V0RmllbGQobGVnLCAnb3RoZXJzaWRlJyk7XG4gICAgICAgICAgICAgICAgY29uc3Qgb3RoZXJzaWRlT3duZXIgPVxuICAgICAgICAgICAgICAgICAgbGVnT3RoZXJzaWRlPy5vbmVvZktpbmQgPT09ICdyZWNvcmQnXG4gICAgICAgICAgICAgICAgICAgID8gZ2V0UGFydHlGcm9tT3B0aW9uYWwobGVnT3RoZXJzaWRlLnJlY29yZD8uZmllbGRzID8/IFtdLCAnb3duZXInKVxuICAgICAgICAgICAgICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICBjb25zdCBsZWdBbW91bnQgPSBnZXRGaWVsZChsZWcsICdhbW91bnQnKTtcbiAgICAgICAgICAgICAgICBjb25zdCBsZWdJbnN0cnVtZW50SWQgPSBnZXRGaWVsZChsZWcsICdpbnN0cnVtZW50SWQnKTtcbiAgICAgICAgICAgICAgICBpZiAoc2VuZGVyTGVnKSB7XG4gICAgICAgICAgICAgICAgICBzZW5kZXIgPSBhdXRob3JpemVyT3duZXIgPz8gJyc7XG4gICAgICAgICAgICAgICAgICByZWNlaXZlciA9IG90aGVyc2lkZU93bmVyID8/ICcnO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICBzZW5kZXIgPSBvdGhlcnNpZGVPd25lciA/PyAnJztcbiAgICAgICAgICAgICAgICAgIHJlY2VpdmVyID0gYXV0aG9yaXplck93bmVyID8/ICcnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAobGVnQW1vdW50Py5vbmVvZktpbmQgPT09ICdudW1lcmljJykgYW1vdW50ID0gbGVnQW1vdW50Lm51bWVyaWMgPz8gJyc7XG4gICAgICAgICAgICAgICAgaWYgKGxlZ0luc3RydW1lbnRJZD8ub25lb2ZLaW5kID09PSAndGV4dCcpIGluc3RydW1lbnRJZCA9IGxlZ0luc3RydW1lbnRJZC50ZXh0ID8/ICcnO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIER2cExlZ0FsbG9jYXRpb24gY3JlYXRlIG5vZGUg4oaSIGFsbG9jYXRpb24udHJhbnNmZXJMZWcgY29udGFpbnMgdGhlIGZ1bGwgc2V0dGxlbWVudCB0cmFuc2ZlciBkZXRhaWxzOlxuICAgICAgICAvLyBzZW5kZXIsIHJlY2VpdmVyICh0aGUgYWN0dWFsIHNldHRsZW1lbnQgY291bnRlcnBhcnR5KSwgYW1vdW50LCBhbmQgaW5zdHJ1bWVudElkXG4gICAgICAgIGNvbnN0IGR2cEZpZWxkcyA9IGZpbmRDcmVhdGVOb2RlRmllbGRzKCdEdnBMZWdBbGxvY2F0aW9uJyk7XG4gICAgICAgIGlmIChkdnBGaWVsZHMpIHtcbiAgICAgICAgICBjb25zdCBhbGxvY2F0aW9uRmllbGQgPSBnZXRGaWVsZChkdnBGaWVsZHMsICdhbGxvY2F0aW9uJyk7XG4gICAgICAgICAgaWYgKGFsbG9jYXRpb25GaWVsZD8ub25lb2ZLaW5kID09PSAncmVjb3JkJykge1xuICAgICAgICAgICAgY29uc3QgYWxsb2NhdGlvbkZpZWxkcyA9IGFsbG9jYXRpb25GaWVsZC5yZWNvcmQ/LmZpZWxkcyA/PyBbXTtcbiAgICAgICAgICAgIGNvbnN0IHRyYW5zZmVyTGVnRmllbGQgPSBnZXRGaWVsZChhbGxvY2F0aW9uRmllbGRzLCAndHJhbnNmZXJMZWcnKTtcbiAgICAgICAgICAgIGlmICh0cmFuc2ZlckxlZ0ZpZWxkPy5vbmVvZktpbmQgPT09ICdyZWNvcmQnKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHRyYW5zZmVyTGVnRmllbGRzID0gdHJhbnNmZXJMZWdGaWVsZC5yZWNvcmQ/LmZpZWxkcyA/PyBbXTtcbiAgICAgICAgICAgICAgY29uc3Qgc2VuZGVyRGF0YSA9IGdldEZpZWxkKHRyYW5zZmVyTGVnRmllbGRzLCAnc2VuZGVyJyk7XG4gICAgICAgICAgICAgIGlmIChzZW5kZXJEYXRhPy5vbmVvZktpbmQgPT09ICdwYXJ0eScpIHNlbmRlciA9IHNlbmRlckRhdGEucGFydHkgPz8gJyc7XG4gICAgICAgICAgICAgIGNvbnN0IHJlY2VpdmVyRGF0YSA9IGdldEZpZWxkKHRyYW5zZmVyTGVnRmllbGRzLCAncmVjZWl2ZXInKTtcbiAgICAgICAgICAgICAgaWYgKHJlY2VpdmVyRGF0YT8ub25lb2ZLaW5kID09PSAncGFydHknKSByZWNlaXZlciA9IHJlY2VpdmVyRGF0YS5wYXJ0eSA/PyAnJztcbiAgICAgICAgICAgICAgY29uc3QgYW1vdW50RGF0YSA9IGdldEZpZWxkKHRyYW5zZmVyTGVnRmllbGRzLCAnYW1vdW50Jyk7XG4gICAgICAgICAgICAgIGlmIChhbW91bnREYXRhPy5vbmVvZktpbmQgPT09ICdudW1lcmljJykgYW1vdW50ID0gYW1vdW50RGF0YS5udW1lcmljID8/ICcnO1xuICAgICAgICAgICAgICBjb25zdCBpbnN0cnVtZW50SWRGaWVsZCA9IGdldEZpZWxkKHRyYW5zZmVyTGVnRmllbGRzLCAnaW5zdHJ1bWVudElkJyk7XG4gICAgICAgICAgICAgIGlmIChpbnN0cnVtZW50SWRGaWVsZD8ub25lb2ZLaW5kID09PSAncmVjb3JkJykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGluc3RydW1lbnRJZEZpZWxkcyA9IGluc3RydW1lbnRJZEZpZWxkLnJlY29yZD8uZmllbGRzID8/IFtdO1xuICAgICAgICAgICAgICAgIGNvbnN0IGFkbWluRGF0YSA9IGdldEZpZWxkKGluc3RydW1lbnRJZEZpZWxkcywgJ2FkbWluJyk7XG4gICAgICAgICAgICAgICAgaWYgKGFkbWluRGF0YT8ub25lb2ZLaW5kID09PSAncGFydHknKSBpbnN0cnVtZW50QWRtaW4gPSBhZG1pbkRhdGEucGFydHkgPz8gJyc7XG4gICAgICAgICAgICAgICAgY29uc3QgaWREYXRhID0gZ2V0RmllbGQoaW5zdHJ1bWVudElkRmllbGRzLCAnaWQnKTtcbiAgICAgICAgICAgICAgICBpZiAoaWREYXRhPy5vbmVvZktpbmQgPT09ICd0ZXh0JykgaW5zdHJ1bWVudElkID0gaWREYXRhLnRleHQgPz8gJyc7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gRmFsbGJhY2s6IGlmIER2cExlZ0FsbG9jYXRpb24gaXMgYWJzZW50LCB1c2UgdGhlIG9wZXJhdG9yIGFzIHJlY2VpdmVyXG4gICAgICAgIGlmICghcmVjZWl2ZXIpIHtcbiAgICAgICAgICBjb25zdCBhbGxvY2F0ZUZpZWxkcyA9IGZpbmRFeGVyY2lzZU5vZGVGaWVsZHMoJ0FsbG9jYXRpb25GYWN0b3J5X0FsbG9jYXRlJyk7XG4gICAgICAgICAgaWYgKGFsbG9jYXRlRmllbGRzKSB7XG4gICAgICAgICAgICBjb25zdCBhZG1pbkRhdGEgPSBnZXRGaWVsZChhbGxvY2F0ZUZpZWxkcywgJ2V4cGVjdGVkQWRtaW4nKTtcbiAgICAgICAgICAgIGlmIChhZG1pbkRhdGE/Lm9uZW9mS2luZCA9PT0gJ3BhcnR5JykgcmVjZWl2ZXIgPSBhZG1pbkRhdGEucGFydHkgPz8gJyc7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICghc2VuZGVyKSB7XG4gICAgICAgICAgY29uc3Qgc2VuZGVyUGFydHkgPSBmaW5kRXhlcmNpc2VBY3RpbmdQYXJ0eSgnQWxsb2NhdGlvbkZhY3RvcnlfQWxsb2NhdGUnKTtcbiAgICAgICAgICBpZiAoc2VuZGVyUGFydHkpIHNlbmRlciA9IHNlbmRlclBhcnR5O1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBjYXNlIFRyYW5zYWN0aW9uVHlwZS5BbGxvY2F0aW9uUmVqZWN0OiB7XG4gICAgICAgIC8vIFJlamVjdGVkRHZwIGNyZWF0ZSBub2RlIOKGkiBkdnAue3NlbGxlcj1zZW5kZXIsIGJ1eWVyPXJlY2VpdmVyLCB0ZXJtcy5kZWxpdmVyaWVzWzBdLnthbW91bnQsIGluc3RydW1lbnQue2FkbWluLCBpZH19fVxuICAgICAgICBjb25zdCByZWplY3RlZER2cEZpZWxkcyA9IGZpbmRDcmVhdGVOb2RlRmllbGRzKCdSZWplY3RlZER2cCcpO1xuICAgICAgICBpZiAocmVqZWN0ZWREdnBGaWVsZHMpIHtcbiAgICAgICAgICBjb25zdCBkdnBGaWVsZCA9IGdldEZpZWxkKHJlamVjdGVkRHZwRmllbGRzLCAnZHZwJyk7XG4gICAgICAgICAgaWYgKGR2cEZpZWxkPy5vbmVvZktpbmQgPT09ICdyZWNvcmQnKSB7XG4gICAgICAgICAgICBjb25zdCBkdnBGaWVsZHMgPSBkdnBGaWVsZC5yZWNvcmQ/LmZpZWxkcyA/PyBbXTtcbiAgICAgICAgICAgIGNvbnN0IHNlbGxlckRhdGEgPSBnZXRGaWVsZChkdnBGaWVsZHMsICdzZWxsZXInKTtcbiAgICAgICAgICAgIGlmIChzZWxsZXJEYXRhPy5vbmVvZktpbmQgPT09ICdwYXJ0eScpIHNlbmRlciA9IHNlbGxlckRhdGEucGFydHkgPz8gJyc7XG4gICAgICAgICAgICBjb25zdCBidXllckRhdGEgPSBnZXRGaWVsZChkdnBGaWVsZHMsICdidXllcicpO1xuICAgICAgICAgICAgaWYgKGJ1eWVyRGF0YT8ub25lb2ZLaW5kID09PSAncGFydHknKSByZWNlaXZlciA9IGJ1eWVyRGF0YS5wYXJ0eSA/PyAnJztcbiAgICAgICAgICAgIGNvbnN0IHRlcm1zRmllbGQgPSBnZXRGaWVsZChkdnBGaWVsZHMsICd0ZXJtcycpO1xuICAgICAgICAgICAgaWYgKHRlcm1zRmllbGQ/Lm9uZW9mS2luZCA9PT0gJ3JlY29yZCcpIHtcbiAgICAgICAgICAgICAgY29uc3QgdGVybXNGaWVsZHMgPSB0ZXJtc0ZpZWxkLnJlY29yZD8uZmllbGRzID8/IFtdO1xuICAgICAgICAgICAgICBjb25zdCBkZWxpdmVyaWVzRmllbGQgPSBnZXRGaWVsZCh0ZXJtc0ZpZWxkcywgJ2RlbGl2ZXJpZXMnKTtcbiAgICAgICAgICAgICAgaWYgKGRlbGl2ZXJpZXNGaWVsZD8ub25lb2ZLaW5kID09PSAnbGlzdCcpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBmaXJzdERlbGl2ZXJ5ID0gZGVsaXZlcmllc0ZpZWxkLmxpc3Q/LmVsZW1lbnRzPy5bMF0/LnN1bTtcbiAgICAgICAgICAgICAgICBpZiAoZmlyc3REZWxpdmVyeT8ub25lb2ZLaW5kID09PSAncmVjb3JkJykge1xuICAgICAgICAgICAgICAgICAgY29uc3QgZGVsaXZlcnlGaWVsZHMgPSBmaXJzdERlbGl2ZXJ5LnJlY29yZD8uZmllbGRzID8/IFtdO1xuICAgICAgICAgICAgICAgICAgY29uc3QgYW1vdW50RGF0YSA9IGdldEZpZWxkKGRlbGl2ZXJ5RmllbGRzLCAnYW1vdW50Jyk7XG4gICAgICAgICAgICAgICAgICBpZiAoYW1vdW50RGF0YT8ub25lb2ZLaW5kID09PSAnbnVtZXJpYycpIGFtb3VudCA9IGFtb3VudERhdGEubnVtZXJpYyA/PyAnJztcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGluc3RydW1lbnRGaWVsZCA9IGdldEZpZWxkKGRlbGl2ZXJ5RmllbGRzLCAnaW5zdHJ1bWVudCcpO1xuICAgICAgICAgICAgICAgICAgaWYgKGluc3RydW1lbnRGaWVsZD8ub25lb2ZLaW5kID09PSAncmVjb3JkJykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBpbnN0cnVtZW50RmllbGRzID0gaW5zdHJ1bWVudEZpZWxkLnJlY29yZD8uZmllbGRzID8/IFtdO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBhZG1pbkRhdGEgPSBnZXRGaWVsZChpbnN0cnVtZW50RmllbGRzLCAnYWRtaW4nKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGFkbWluRGF0YT8ub25lb2ZLaW5kID09PSAncGFydHknKSBpbnN0cnVtZW50QWRtaW4gPSBhZG1pbkRhdGEucGFydHkgPz8gJyc7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGlkRGF0YSA9IGdldEZpZWxkKGluc3RydW1lbnRGaWVsZHMsICdpZCcpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoaWREYXRhPy5vbmVvZktpbmQgPT09ICd0ZXh0JykgaW5zdHJ1bWVudElkID0gaWREYXRhLnRleHQgPz8gJyc7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBjYXNlIFRyYW5zYWN0aW9uVHlwZS5Db3NpZ25EZWxlZ2F0aW9uQWNjZXB0OiB7XG4gICAgICAgIC8vIFRyYWRlV2ViOiBDb3NpZ25pbmdEZWxlZ2F0aW9uUHJvcG9zYWxfQWNjZXB0OyBUZW1wbGU6IEFjY2VwdERlbGVnYXRpb25Qcm9wb3NhbC5cbiAgICAgICAgY29uc3Qgc2lnbmVyUGFydHkgPVxuICAgICAgICAgIGZpbmRFeGVyY2lzZUFjdGluZ1BhcnR5KCdDb3NpZ25pbmdEZWxlZ2F0aW9uUHJvcG9zYWxfQWNjZXB0JykgPz9cbiAgICAgICAgICBmaW5kRXhlcmNpc2VBY3RpbmdQYXJ0eSgnQWNjZXB0RGVsZWdhdGlvblByb3Bvc2FsJyk7XG4gICAgICAgIGlmIChzaWduZXJQYXJ0eSkgc2VuZGVyID0gc2lnbmVyUGFydHk7XG5cbiAgICAgICAgLy8gVHJhZGVXZWIgY3JlYXRlcyBDb3NpZ25pbmdEZWxlZ2F0aW9uIHsgYWRtaW4sIHNpZ25lciB9OyBUZW1wbGUgY3JlYXRlc1xuICAgICAgICAvLyBEZWxlZ2F0aW9uIHsgb3BlcmF0b3IsIHVzZXIgfSBmcm9tIHRoZSBzYW1lIGFjY2VwdGFuY2Ugb3BlcmF0aW9uLlxuICAgICAgICBjb25zdCBkZWxlZ2F0aW9uRmllbGRzID0gZmluZENyZWF0ZU5vZGVGaWVsZHMoJ0Nvc2lnbmluZ0RlbGVnYXRpb24nKSA/PyBmaW5kQ3JlYXRlTm9kZUZpZWxkcygnRGVsZWdhdGlvbicpO1xuICAgICAgICBpZiAoZGVsZWdhdGlvbkZpZWxkcykge1xuICAgICAgICAgIGNvbnN0IGFkbWluRGF0YSA9IGdldEZpZWxkKGRlbGVnYXRpb25GaWVsZHMsICdhZG1pbicpID8/IGdldEZpZWxkKGRlbGVnYXRpb25GaWVsZHMsICdvcGVyYXRvcicpO1xuICAgICAgICAgIGlmIChhZG1pbkRhdGE/Lm9uZW9mS2luZCA9PT0gJ3BhcnR5JykgcmVjZWl2ZXIgPSBhZG1pbkRhdGEucGFydHkgPz8gJyc7XG4gICAgICAgIH1cbiAgICAgICAgYW1vdW50ID0gJzAnO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgY2FzZSBUcmFuc2FjdGlvblR5cGUuVHJhbnNmZXJPZmZlcldpdGhkcmF3bjoge1xuICAgICAgICAvLyBDYW50b24gY29pbjogQW11bGV0IGNyZWF0ZSBub2RlIOKGkiBvd25lcj1zZW5kZXI9cmVjZWl2ZXIsIGFtb3VudC5pbml0aWFsQW1vdW50XG4gICAgICAgIGNvbnN0IGFtdWxldEZpZWxkcyA9IGZpbmRDcmVhdGVOb2RlRmllbGRzKCdBbXVsZXQnKTtcbiAgICAgICAgaWYgKGFtdWxldEZpZWxkcykge1xuICAgICAgICAgIGNvbnN0IG93bmVyRGF0YSA9IGdldEZpZWxkKGFtdWxldEZpZWxkcywgJ293bmVyJyk7XG4gICAgICAgICAgaWYgKG93bmVyRGF0YT8ub25lb2ZLaW5kID09PSAncGFydHknKSB7XG4gICAgICAgICAgICByZWNlaXZlciA9IG93bmVyRGF0YS5wYXJ0eSA/PyAnJztcbiAgICAgICAgICAgIHNlbmRlciA9IHJlY2VpdmVyO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCBhbW91bnRGaWVsZCA9IGdldEZpZWxkKGFtdWxldEZpZWxkcywgJ2Ftb3VudCcpO1xuICAgICAgICAgIGlmIChhbW91bnRGaWVsZD8ub25lb2ZLaW5kID09PSAncmVjb3JkJykge1xuICAgICAgICAgICAgY29uc3QgaW5pdGlhbEFtb3VudERhdGEgPSBnZXRGaWVsZChhbW91bnRGaWVsZC5yZWNvcmQ/LmZpZWxkcyA/PyBbXSwgJ2luaXRpYWxBbW91bnQnKTtcbiAgICAgICAgICAgIGlmIChpbml0aWFsQW1vdW50RGF0YT8ub25lb2ZLaW5kID09PSAnbnVtZXJpYycpIGFtb3VudCA9IGluaXRpYWxBbW91bnREYXRhLm51bWVyaWMgPz8gJyc7XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIC8vIFRva2VuOiBIb2xkaW5nIGNyZWF0ZSBub2RlIOKGkiBvd25lcj1zZW5kZXI9cmVjZWl2ZXIsIGluc3RydW1lbnQue3NvdXJjZT1hZG1pbiwgaWR9LCBhbW91bnRcbiAgICAgICAgY29uc3QgaG9sZGluZ0ZpZWxkcyA9IGZpbmRDcmVhdGVOb2RlRmllbGRzKCdIb2xkaW5nJyk7XG4gICAgICAgIGlmIChob2xkaW5nRmllbGRzKSB7XG4gICAgICAgICAgY29uc3Qgb3duZXJEYXRhID0gZ2V0RmllbGQoaG9sZGluZ0ZpZWxkcywgJ293bmVyJyk7XG4gICAgICAgICAgaWYgKG93bmVyRGF0YT8ub25lb2ZLaW5kID09PSAncGFydHknKSB7XG4gICAgICAgICAgICByZWNlaXZlciA9IG93bmVyRGF0YS5wYXJ0eSA/PyAnJztcbiAgICAgICAgICAgIHNlbmRlciA9IHJlY2VpdmVyO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCBhbW91bnREYXRhID0gZ2V0RmllbGQoaG9sZGluZ0ZpZWxkcywgJ2Ftb3VudCcpO1xuICAgICAgICAgIGlmIChhbW91bnREYXRhPy5vbmVvZktpbmQgPT09ICdudW1lcmljJykgYW1vdW50ID0gYW1vdW50RGF0YS5udW1lcmljID8/ICcnO1xuICAgICAgICAgIGNvbnN0IGluc3RydW1lbnREYXRhID0gZ2V0RmllbGQoaG9sZGluZ0ZpZWxkcywgJ2luc3RydW1lbnQnKTtcbiAgICAgICAgICBpZiAoaW5zdHJ1bWVudERhdGE/Lm9uZW9mS2luZCA9PT0gJ3JlY29yZCcpIHtcbiAgICAgICAgICAgIGNvbnN0IGluc3RydW1lbnRGaWVsZHMgPSBpbnN0cnVtZW50RGF0YS5yZWNvcmQ/LmZpZWxkcyA/PyBbXTtcbiAgICAgICAgICAgIGNvbnN0IHNvdXJjZURhdGEgPSBnZXRGaWVsZChpbnN0cnVtZW50RmllbGRzLCAnc291cmNlJyk7XG4gICAgICAgICAgICBpZiAoc291cmNlRGF0YT8ub25lb2ZLaW5kID09PSAncGFydHknKSBpbnN0cnVtZW50QWRtaW4gPSBzb3VyY2VEYXRhLnBhcnR5ID8/ICcnO1xuICAgICAgICAgICAgY29uc3QgaWREYXRhID0gZ2V0RmllbGQoaW5zdHJ1bWVudEZpZWxkcywgJ2lkJyk7XG4gICAgICAgICAgICBpZiAoaWREYXRhPy5vbmVvZktpbmQgPT09ICd0ZXh0JykgaW5zdHJ1bWVudElkID0gaWREYXRhLnRleHQgPz8gJyc7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBjYXNlIFRyYW5zYWN0aW9uVHlwZS5UcmFuc2ZlclByZWFwcHJvdmFsQ2FuY2VsOiB7XG4gICAgICAgIC8vIENvaW4gY2FuY2VsOiBUcmFuc2ZlclByZWFwcHJvdmFsX0NhbmNlbCBleGVyY2lzZSBvbiBTcGxpY2UuQW11bGV0UnVsZXM6VHJhbnNmZXJQcmVhcHByb3ZhbC5cbiAgICAgICAgLy8gU2VsZi1zZXJ2aWNlIOKAlCB0aGUgYWN0aW5nIHBhcnR5IChvciwgYXMgYSBmYWxsYmFjaywgdGhlIGV4ZXJjaXNlZCBjaG9pY2VBcmd1bWVudC5wKSBpc1xuICAgICAgICAvLyBib3RoIHNlbmRlciBhbmQgcmVjZWl2ZXIuXG4gICAgICAgIGNvbnN0IGFjdGluZ1BhcnR5ID0gZmluZEV4ZXJjaXNlQWN0aW5nUGFydHkoJ1RyYW5zZmVyUHJlYXBwcm92YWxfQ2FuY2VsJyk7XG4gICAgICAgIGlmIChhY3RpbmdQYXJ0eSkge1xuICAgICAgICAgIHNlbmRlciA9IGFjdGluZ1BhcnR5O1xuICAgICAgICAgIHJlY2VpdmVyID0gYWN0aW5nUGFydHk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3QgY2FuY2VsRmllbGRzID0gZmluZEV4ZXJjaXNlTm9kZUZpZWxkcygnVHJhbnNmZXJQcmVhcHByb3ZhbF9DYW5jZWwnKTtcbiAgICAgICAgICBpZiAoY2FuY2VsRmllbGRzKSB7XG4gICAgICAgICAgICBjb25zdCBwYXJ0eURhdGEgPSBnZXRGaWVsZChjYW5jZWxGaWVsZHMsICdwJyk7XG4gICAgICAgICAgICBpZiAocGFydHlEYXRhPy5vbmVvZktpbmQgPT09ICdwYXJ0eScpIHtcbiAgICAgICAgICAgICAgc2VuZGVyID0gcGFydHlEYXRhLnBhcnR5ID8/ICcnO1xuICAgICAgICAgICAgICByZWNlaXZlciA9IHNlbmRlcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gVG9rZW4gY2FuY2VsOiBBcmNoaXZlIGV4ZXJjaXNlIG9uIFV0aWxpdHkuUmVnaXN0cnkuQXBwLlYwLk1vZGVsLlRyYW5zZmVyUHJlYXBwcm92YWwuXG4gICAgICAgICAgICAvLyBUaGUgYnVpbHQtaW4gQXJjaGl2ZSBjaG9pY2UgaGFzIGVtcHR5IGNob2ljZUFyZ3VtZW50IHt9LCBzbyB0aGUgYWN0aW5nIHBhcnR5IGlzXG4gICAgICAgICAgICAvLyB0aGUgb25seSB3YXkgdG8gcmVjb3ZlciB0aGUgY2FuY2VsbGluZyBwYXJ0eS5cbiAgICAgICAgICAgIGNvbnN0IHRva2VuQXJjaGl2ZVBhcnR5ID0gZmluZEV4ZXJjaXNlQWN0aW5nUGFydHkoJ0FyY2hpdmUnKTtcbiAgICAgICAgICAgIGlmICh0b2tlbkFyY2hpdmVQYXJ0eSkge1xuICAgICAgICAgICAgICBzZW5kZXIgPSB0b2tlbkFyY2hpdmVQYXJ0eTtcbiAgICAgICAgICAgICAgcmVjZWl2ZXIgPSB0b2tlbkFyY2hpdmVQYXJ0eTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgYW1vdW50ID0gJzAnO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgZGVmYXVsdDoge1xuICAgICAgICAvLyBJbml0aWFsIHRyYW5zZmVyICgxLXN0ZXAgYW5kIDItc3RlcCwgY29pbiBhbmQgdG9rZW4pOiBUcmFuc2ZlckZhY3RvcnlfVHJhbnNmZXIgZXhlcmNpc2Ugbm9kZVxuICAgICAgICAvLyDihpIgdHJhbnNmZXIue3NlbmRlciwgcmVjZWl2ZXIsIGFtb3VudCwgaW5zdHJ1bWVudElkLnthZG1pbiwgaWR9LCBtZXRhfVxuICAgICAgICBjb25zdCB0cmFuc2ZlckZpZWxkcyA9IGZpbmRFeGVyY2lzZU5vZGVGaWVsZHMoJ1RyYW5zZmVyRmFjdG9yeV9UcmFuc2ZlcicpO1xuICAgICAgICBpZiAodHJhbnNmZXJGaWVsZHMpIHtcbiAgICAgICAgICBjb25zdCB0cmFuc2ZlclN1bSA9IGdldEZpZWxkKHRyYW5zZmVyRmllbGRzLCAndHJhbnNmZXInKTtcbiAgICAgICAgICBpZiAodHJhbnNmZXJTdW0/Lm9uZW9mS2luZCA9PT0gJ3JlY29yZCcpIHtcbiAgICAgICAgICAgIGNvbnN0IHRyYW5zZmVyUmVjb3JkID0gdHJhbnNmZXJTdW0ucmVjb3JkPy5maWVsZHMgPz8gW107XG4gICAgICAgICAgICBleHRyYWN0RnJvbVRyYW5zZmVyUmVjb3JkKHRyYW5zZmVyUmVjb3JkLCAnaW5zdHJ1bWVudElkJywgJ2FkbWluJyk7XG4gICAgICAgICAgICBjb25zdCBtZXRhRmllbGQgPSBnZXRGaWVsZCh0cmFuc2ZlclJlY29yZCwgJ21ldGEnKTtcbiAgICAgICAgICAgIGlmIChtZXRhRmllbGQ/Lm9uZW9mS2luZCA9PT0gJ3JlY29yZCcpIHtcbiAgICAgICAgICAgICAgY29uc3QgdmFsdWVzRmllbGQgPSBnZXRGaWVsZChtZXRhRmllbGQucmVjb3JkPy5maWVsZHMgPz8gW10sICd2YWx1ZXMnKTtcbiAgICAgICAgICAgICAgaWYgKHZhbHVlc0ZpZWxkPy5vbmVvZktpbmQgPT09ICd0ZXh0TWFwJykge1xuICAgICAgICAgICAgICAgIGNvbnN0IG1lbW9FbnRyeSA9IHZhbHVlc0ZpZWxkLnRleHRNYXA/LmVudHJpZXMuZmluZChcbiAgICAgICAgICAgICAgICAgIChlKSA9PiBlLmtleSA9PT0gJ3NwbGljZS5sZmRlY2VudHJhbGl6ZWR0cnVzdC5vcmcvcmVhc29uJ1xuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgaWYgKG1lbW9FbnRyeSkge1xuICAgICAgICAgICAgICAgICAgY29uc3QgbWVtb1ZhbHVlID0gbWVtb0VudHJ5Py52YWx1ZT8uc3VtO1xuICAgICAgICAgICAgICAgICAgaWYgKG1lbW9WYWx1ZT8ub25lb2ZLaW5kID09PSAndGV4dCcpIG1lbW9JZCA9IG1lbW9WYWx1ZS50ZXh0O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIXNlbmRlciB8fCAhcmVjZWl2ZXIgfHwgIWFtb3VudCkge1xuICAgICAgY29uc3QgbWlzc2luZ0ZpZWxkczogc3RyaW5nW10gPSBbXTtcbiAgICAgIGlmICghc2VuZGVyKSBtaXNzaW5nRmllbGRzLnB1c2goJ3NlbmRlcicpO1xuICAgICAgaWYgKCFyZWNlaXZlcikgbWlzc2luZ0ZpZWxkcy5wdXNoKCdyZWNlaXZlcicpO1xuICAgICAgaWYgKCFhbW91bnQpIG1pc3NpbmdGaWVsZHMucHVzaCgnYW1vdW50Jyk7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYGludmFsaWQgdHJhbnNhY3Rpb24gZGF0YTogbWlzc2luZyAke21pc3NpbmdGaWVsZHMuam9pbignLCAnKX1gKTtcbiAgICB9XG4gICAgY29uc3QgY29udmVydGVkQW1vdW50ID0gdGhpcy5jb252ZXJ0QW1vdW50VG9Mb3dlc3RVbml0KG5ldyBCaWdOdW1iZXIoYW1vdW50KSk7XG4gICAgY29uc3QgcGFyc2VkRGF0YTogUHJlcGFyZWRUeG5QYXJzZWRJbmZvID0ge1xuICAgICAgc2VuZGVyLFxuICAgICAgcmVjZWl2ZXIsXG4gICAgICBhbW91bnQ6IGNvbnZlcnRlZEFtb3VudCxcbiAgICB9O1xuICAgIGlmIChtZW1vSWQpIHtcbiAgICAgIHBhcnNlZERhdGEubWVtb0lkID0gbWVtb0lkO1xuICAgIH1cbiAgICBpZiAoaW5zdHJ1bWVudElkICYmIGluc3RydW1lbnRBZG1pbikge1xuICAgICAgcGFyc2VkRGF0YS50b2tlbiA9IHRoaXMuZmluZFRva2VuTmFtZUJ5Q29udHJhY3RBZGRyZXNzKGAke2luc3RydW1lbnRBZG1pbn06JHtpbnN0cnVtZW50SWR9YCk7XG4gICAgfVxuICAgIHJldHVybiBwYXJzZWREYXRhO1xuICB9XG5cbiAgLyoqIFBhcnNlcyBgXCJQa2c6TW9kdWxlOkVudGl0eVwiYCBpbnRvIHBhcnRzLiAqL1xuICBwYXJzZUNhbnRvblRlbXBsYXRlSWQodmFsdWU6IHN0cmluZyk6IHsgcGtnOiBzdHJpbmc7IG1vZHVsZU5hbWU6IHN0cmluZzsgZW50aXR5TmFtZTogc3RyaW5nIH0gfCB1bmRlZmluZWQge1xuICAgIGlmICh0eXBlb2YgdmFsdWUgIT09ICdzdHJpbmcnKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIGNvbnN0IHBhcnRzID0gdmFsdWUuc3BsaXQoJzonKTtcbiAgICBpZiAocGFydHMubGVuZ3RoICE9PSAzKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIGNvbnN0IFtwa2csIG1vZHVsZU5hbWUsIGVudGl0eU5hbWVdID0gcGFydHM7XG4gICAgaWYgKCFwa2cgfHwgIW1vZHVsZU5hbWUgfHwgIWVudGl0eU5hbWUpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIHsgcGtnLCBtb2R1bGVOYW1lLCBlbnRpdHlOYW1lIH07XG4gIH1cblxuICBkYW1sVmFsdWVUb0pzb24odmFsdWU6IFZhbHVlIHwgdW5kZWZpbmVkKTogdW5rbm93biB7XG4gICAgaWYgKCF2YWx1ZSB8fCAhdmFsdWUuc3VtKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIGNvbnN0IHN1bSA9IHZhbHVlLnN1bTtcbiAgICBzd2l0Y2ggKHN1bS5vbmVvZktpbmQpIHtcbiAgICAgIGNhc2UgJ3VuaXQnOlxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIGNhc2UgJ2Jvb2wnOlxuICAgICAgICByZXR1cm4gc3VtLmJvb2w7XG4gICAgICBjYXNlICdpbnQ2NCc6XG4gICAgICAgIHJldHVybiBzdW0uaW50NjQ7XG4gICAgICBjYXNlICdkYXRlJzpcbiAgICAgICAgcmV0dXJuIHN1bS5kYXRlO1xuICAgICAgY2FzZSAndGltZXN0YW1wJzpcbiAgICAgICAgcmV0dXJuIHN1bS50aW1lc3RhbXA7XG4gICAgICBjYXNlICdudW1lcmljJzpcbiAgICAgICAgcmV0dXJuIHN1bS5udW1lcmljO1xuICAgICAgY2FzZSAncGFydHknOlxuICAgICAgICByZXR1cm4gc3VtLnBhcnR5O1xuICAgICAgY2FzZSAndGV4dCc6XG4gICAgICAgIHJldHVybiBzdW0udGV4dDtcbiAgICAgIGNhc2UgJ2NvbnRyYWN0SWQnOlxuICAgICAgICByZXR1cm4gc3VtLmNvbnRyYWN0SWQ7XG4gICAgICBjYXNlICdvcHRpb25hbCc6XG4gICAgICAgIHJldHVybiBzdW0ub3B0aW9uYWw/LnZhbHVlID8gdGhpcy5kYW1sVmFsdWVUb0pzb24oc3VtLm9wdGlvbmFsLnZhbHVlKSA6IG51bGw7XG4gICAgICBjYXNlICdsaXN0JzpcbiAgICAgICAgcmV0dXJuIChzdW0ubGlzdD8uZWxlbWVudHMgPz8gW10pLm1hcCgoZWwpID0+IHRoaXMuZGFtbFZhbHVlVG9Kc29uKGVsKSk7XG4gICAgICBjYXNlICd0ZXh0TWFwJzoge1xuICAgICAgICBjb25zdCBvYmo6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge307XG4gICAgICAgIGZvciAoY29uc3QgZW50cnkgb2Ygc3VtLnRleHRNYXA/LmVudHJpZXMgPz8gW10pIHtcbiAgICAgICAgICBvYmpbZW50cnkua2V5XSA9IHRoaXMuZGFtbFZhbHVlVG9Kc29uKGVudHJ5LnZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gb2JqO1xuICAgICAgfVxuICAgICAgY2FzZSAnZ2VuTWFwJzpcbiAgICAgICAgcmV0dXJuIChzdW0uZ2VuTWFwPy5lbnRyaWVzID8/IFtdKS5tYXAoKGVudHJ5KSA9PiBbXG4gICAgICAgICAgdGhpcy5kYW1sVmFsdWVUb0pzb24oZW50cnkua2V5KSxcbiAgICAgICAgICB0aGlzLmRhbWxWYWx1ZVRvSnNvbihlbnRyeS52YWx1ZSksXG4gICAgICAgIF0pO1xuICAgICAgY2FzZSAncmVjb3JkJzoge1xuICAgICAgICBjb25zdCBvYmo6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge307XG4gICAgICAgIGZvciAoY29uc3QgZiBvZiBzdW0ucmVjb3JkPy5maWVsZHMgPz8gW10pIHtcbiAgICAgICAgICBvYmpbZi5sYWJlbF0gPSB0aGlzLmRhbWxWYWx1ZVRvSnNvbihmLnZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gb2JqO1xuICAgICAgfVxuICAgICAgY2FzZSAndmFyaWFudCc6IHtcbiAgICAgICAgY29uc3Qgb2JqOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHt9O1xuICAgICAgICBvYmpbc3VtLnZhcmlhbnQuY29uc3RydWN0b3JdID0gdGhpcy5kYW1sVmFsdWVUb0pzb24oc3VtLnZhcmlhbnQudmFsdWUpO1xuICAgICAgICByZXR1cm4gb2JqO1xuICAgICAgfVxuICAgICAgY2FzZSAnZW51bSc6XG4gICAgICAgIHJldHVybiBzdW0uZW51bS5jb25zdHJ1Y3RvcjtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG5cbiAgLyoqIFJlYWRzIGFjdEFzIHBhcnRpZXMgZnJvbSBhIGJhc2U2NC1lbmNvZGVkIHByZXBhcmVkIHRyYW5zYWN0aW9uIHByb3RvYnVmLiAqL1xuICBleHRyYWN0U3VibWl0dGVyQWN0QXMocmF3QmFzZTY0OiBzdHJpbmcpOiBzdHJpbmdbXSB7XG4gICAgY29uc3QgZGVjb2RlZCA9IHRoaXMuZGVjb2RlUHJlcGFyZWRUcmFuc2FjdGlvbihyYXdCYXNlNjQpO1xuICAgIHJldHVybiBkZWNvZGVkLm1ldGFkYXRhPy5zdWJtaXR0ZXJJbmZvPy5hY3RBcyA/PyBbXTtcbiAgfVxuXG4gIC8qKiBEZWNvZGVzIGEgcHJlcGFyZWQgQ2FudG9uIHRyYW5zYWN0aW9uIHByb3RvYnVmIGFuZCBleHRyYWN0cyB0aGUgcm9vdCBDcmVhdGVDb21tYW5kIG9yIEV4ZXJjaXNlQ29tbWFuZC4gKi9cbiAgZXh0cmFjdENhbnRvbkNvbW1hbmRJbmZvKHJhd0Jhc2U2NDogc3RyaW5nKTogQ2FudG9uQ29tbWFuZEluZm8ge1xuICAgIGNvbnN0IGRlY29kZWQgPSB0aGlzLmRlY29kZVByZXBhcmVkVHJhbnNhY3Rpb24ocmF3QmFzZTY0KTtcbiAgICBjb25zdCB0eCA9IGRlY29kZWQudHJhbnNhY3Rpb247XG4gICAgaWYgKCF0eCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdkZWNvZGVkIHByZXBhcmVkIHRyYW5zYWN0aW9uIGhhcyBubyB0cmFuc2FjdGlvbiBib2R5Jyk7XG4gICAgfVxuICAgIGNvbnN0IHJvb3RzID0gdHgucm9vdHMgPz8gW107XG4gICAgaWYgKHJvb3RzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdkZWNvZGVkIHByZXBhcmVkIHRyYW5zYWN0aW9uIGhhcyBubyByb290IG5vZGVzJyk7XG4gICAgfVxuICAgIGlmIChyb290cy5sZW5ndGggPiAxKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYGRlY29kZWQgcHJlcGFyZWQgdHJhbnNhY3Rpb24gaGFzICR7cm9vdHMubGVuZ3RofSByb290IG5vZGVzOyBleHBlY3RlZCBleGFjdGx5IDFgKTtcbiAgICB9XG4gICAgY29uc3Qgcm9vdElkID0gcm9vdHNbMF07XG4gICAgY29uc3Qgcm9vdE5vZGUgPSAodHgubm9kZXMgPz8gW10pLmZpbmQoKG4pID0+IG4ubm9kZUlkID09PSByb290SWQpO1xuICAgIGlmICghcm9vdE5vZGUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgcm9vdCBub2RlICcke3Jvb3RJZH0nIG5vdCBmb3VuZCBpbiBub2RlcyBsaXN0YCk7XG4gICAgfVxuICAgIGNvbnN0IHZlcnNpb25lZE5vZGUgPSByb290Tm9kZS52ZXJzaW9uZWROb2RlO1xuICAgIGlmICghdmVyc2lvbmVkTm9kZSB8fCB2ZXJzaW9uZWROb2RlLm9uZW9mS2luZCAhPT0gJ3YxJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGB1bnN1cHBvcnRlZCByb290IG5vZGUgdmVyc2lvbjogJHt2ZXJzaW9uZWROb2RlPy5vbmVvZktpbmQgPz8gJ3VuZGVmaW5lZCd9YCk7XG4gICAgfVxuICAgIGNvbnN0IG5vZGVUeXBlID0gdmVyc2lvbmVkTm9kZS52MS5ub2RlVHlwZTtcbiAgICBpZiAobm9kZVR5cGUub25lb2ZLaW5kID09PSAnY3JlYXRlJykge1xuICAgICAgY29uc3QgY3JlYXRlTm9kZSA9IG5vZGVUeXBlLmNyZWF0ZTtcbiAgICAgIGlmICghY3JlYXRlTm9kZS50ZW1wbGF0ZUlkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignY3JlYXRlIG5vZGUgbWlzc2luZyB0ZW1wbGF0ZUlkJyk7XG4gICAgICB9XG4gICAgICByZXR1cm4ge1xuICAgICAgICBraW5kOiAnQ3JlYXRlQ29tbWFuZCcsXG4gICAgICAgIHRlbXBsYXRlSWQ6IHtcbiAgICAgICAgICBwYWNrYWdlSWQ6IGNyZWF0ZU5vZGUudGVtcGxhdGVJZC5wYWNrYWdlSWQsXG4gICAgICAgICAgbW9kdWxlTmFtZTogY3JlYXRlTm9kZS50ZW1wbGF0ZUlkLm1vZHVsZU5hbWUsXG4gICAgICAgICAgZW50aXR5TmFtZTogY3JlYXRlTm9kZS50ZW1wbGF0ZUlkLmVudGl0eU5hbWUsXG4gICAgICAgIH0sXG4gICAgICAgIGFyZ3VtZW50OiB0aGlzLmRhbWxWYWx1ZVRvSnNvbihjcmVhdGVOb2RlLmFyZ3VtZW50KSxcbiAgICAgIH07XG4gICAgfVxuICAgIGlmIChub2RlVHlwZS5vbmVvZktpbmQgPT09ICdleGVyY2lzZScpIHtcbiAgICAgIGNvbnN0IGV4ZXJjaXNlTm9kZSA9IG5vZGVUeXBlLmV4ZXJjaXNlO1xuICAgICAgaWYgKCFleGVyY2lzZU5vZGUudGVtcGxhdGVJZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2V4ZXJjaXNlIG5vZGUgbWlzc2luZyB0ZW1wbGF0ZUlkJyk7XG4gICAgICB9XG4gICAgICByZXR1cm4ge1xuICAgICAgICBraW5kOiAnRXhlcmNpc2VDb21tYW5kJyxcbiAgICAgICAgdGVtcGxhdGVJZDoge1xuICAgICAgICAgIHBhY2thZ2VJZDogZXhlcmNpc2VOb2RlLnRlbXBsYXRlSWQucGFja2FnZUlkLFxuICAgICAgICAgIG1vZHVsZU5hbWU6IGV4ZXJjaXNlTm9kZS50ZW1wbGF0ZUlkLm1vZHVsZU5hbWUsXG4gICAgICAgICAgZW50aXR5TmFtZTogZXhlcmNpc2VOb2RlLnRlbXBsYXRlSWQuZW50aXR5TmFtZSxcbiAgICAgICAgfSxcbiAgICAgICAgYXJndW1lbnQ6IHRoaXMuZGFtbFZhbHVlVG9Kc29uKGV4ZXJjaXNlTm9kZS5jaG9zZW5WYWx1ZSksXG4gICAgICAgIGNob2ljZTogZXhlcmNpc2VOb2RlLmNob2ljZUlkLFxuICAgICAgICBjb250cmFjdElkOiBleGVyY2lzZU5vZGUuY29udHJhY3RJZCxcbiAgICAgICAgYWN0aW5nUGFydGllczogWy4uLihleGVyY2lzZU5vZGUuYWN0aW5nUGFydGllcyA/PyBbXSldLFxuICAgICAgfTtcbiAgICB9XG4gICAgdGhyb3cgbmV3IEVycm9yKGB1bnN1cHBvcnRlZCByb290IG5vZGUgdHlwZTogJHtub2RlVHlwZS5vbmVvZktpbmQgPz8gJ3VuZGVmaW5lZCd9YCk7XG4gIH1cblxuICBzYW1lRWxlbWVudHMoYTogcmVhZG9ubHkgc3RyaW5nW10sIGI6IHJlYWRvbmx5IHN0cmluZ1tdKTogYm9vbGVhbiB7XG4gICAgaWYgKGEubGVuZ3RoICE9PSBiLmxlbmd0aCkgcmV0dXJuIGZhbHNlO1xuICAgIGNvbnN0IHNvcnRlZEEgPSBbLi4uYV0uc29ydCgpO1xuICAgIGNvbnN0IHNvcnRlZEIgPSBbLi4uYl0uc29ydCgpO1xuICAgIHJldHVybiBzb3J0ZWRBLmV2ZXJ5KCh4LCBpKSA9PiB4ID09PSBzb3J0ZWRCW2ldKTtcbiAgfVxuXG4gIC8qKiBTdHJpcHMgdGhlIGBjb21tYW5kLmAgcHJlZml4IGZyb20gaW5qZWN0QXMgcGF0aHMgKGUuZy4gYGNvbW1hbmQuRXhlcmNpc2VDb21tYW5kLmNvbnRyYWN0SWRgIOKGkiBgRXhlcmNpc2VDb21tYW5kLmNvbnRyYWN0SWRgKS4gKi9cbiAgbm9ybWFsaXplSW5qZWN0QXMoc3BlY3M6IHJlYWRvbmx5IHsgaW5qZWN0QXM/OiBzdHJpbmcgfVtdIHwgdW5kZWZpbmVkKTogU2V0PHN0cmluZz4ge1xuICAgIGNvbnN0IG91dCA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICAgIGlmICghc3BlY3MpIHJldHVybiBvdXQ7XG4gICAgZm9yIChjb25zdCBzcGVjIG9mIHNwZWNzKSB7XG4gICAgICBpZiAoIXNwZWMgfHwgdHlwZW9mIHNwZWMuaW5qZWN0QXMgIT09ICdzdHJpbmcnKSBjb250aW51ZTtcbiAgICAgIGNvbnN0IHN0cmlwcGVkID0gc3BlYy5pbmplY3RBcy5zdGFydHNXaXRoKCdjb21tYW5kLicpID8gc3BlYy5pbmplY3RBcy5zbGljZSgnY29tbWFuZC4nLmxlbmd0aCkgOiBzcGVjLmluamVjdEFzO1xuICAgICAgaWYgKHN0cmlwcGVkKSBvdXQuYWRkKHN0cmlwcGVkKTtcbiAgICB9XG4gICAgcmV0dXJuIG91dDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWN1cnNpdmVseSBhc3NlcnRzIHRoYXQgYGFjdHVhbGAgbWF0Y2hlcyBgZXhwZWN0ZWRgLiBQYXRocyBpbiBgaW5qZWN0QXNQYXRoc2AgYXJlIHNraXBwZWQuXG4gICAqIE51bWVyaWMgc3RyaW5ncyBhcmUgY29tcGFyZWQgdmlhIEJpZ051bWJlciB0byBoYW5kbGUgREFNTCBmb3JtYXR0aW5nIGRpZmZlcmVuY2VzIChlLmcuIFwiMTAwXCIgdnMgXCIxMDAuMDAwMDAwMDAwMFwiKS5cbiAgICovXG4gIGFzc2VydERlZXBDYW50b25NYXRjaChleHBlY3RlZDogdW5rbm93biwgYWN0dWFsOiB1bmtub3duLCBpbmplY3RBc1BhdGhzOiBTZXQ8c3RyaW5nPiwgY3VycmVudFBhdGggPSAnJyk6IHZvaWQge1xuICAgIGlmIChpbmplY3RBc1BhdGhzLmhhcyhjdXJyZW50UGF0aCkpIHJldHVybjtcblxuICAgIC8vIE9ubHkgdW5kZWZpbmVkIG1lYW5zIFwidW5zcGVjaWZpZWQg4oCUIHNraXAgY29tcGFyaXNvblwiLiBFbXB0eSB7fSBvciBbXSBhcmUgdmFsaWRcbiAgICAvLyBEYW1sIHZhbHVlcyBhbmQgbXVzdCBiZSB2ZXJpZmllZCBhZ2FpbnN0IGFjdHVhbCB0byBwcmV2ZW50IGFjY2lkZW50YWwgdW5kZXItdmVyaWZpY2F0aW9uLlxuICAgIGlmIChleHBlY3RlZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGV4cGVjdGVkID09PSBudWxsIHx8IGFjdHVhbCA9PT0gbnVsbCkge1xuICAgICAgaWYgKGV4cGVjdGVkICE9PSBhY3R1YWwpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBDYW50b24gY29tbWFuZCBtaXNtYXRjaCBhdCAnJHtjdXJyZW50UGF0aCB8fCAnPHJvb3Q+J30nOiBleHBlY3RlZCAke3RoaXMuc3RyaW5naWZ5Rm9yRXJyb3IoXG4gICAgICAgICAgICBleHBlY3RlZFxuICAgICAgICAgICl9LCBnb3QgJHt0aGlzLnN0cmluZ2lmeUZvckVycm9yKGFjdHVhbCl9YFxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIGV4cGVjdGVkID09PSAnc3RyaW5nJyAmJiB0eXBlb2YgYWN0dWFsID09PSAnc3RyaW5nJykge1xuICAgICAgaWYgKHRoaXMuYXJlTnVtZXJpY1N0cmluZ3MoZXhwZWN0ZWQsIGFjdHVhbCkpIHtcbiAgICAgICAgaWYgKCFuZXcgQmlnTnVtYmVyKGV4cGVjdGVkKS5pc0VxdWFsVG8obmV3IEJpZ051bWJlcihhY3R1YWwpKSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgIGBDYW50b24gY29tbWFuZCBudW1lcmljIG1pc21hdGNoIGF0ICcke2N1cnJlbnRQYXRoIHx8ICc8cm9vdD4nfSc6IGV4cGVjdGVkICR7ZXhwZWN0ZWR9LCBnb3QgJHthY3R1YWx9YFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgLy8gSVNPIDg2MDEgaW5wdXQgdnMgbWljcm9zZWNvbmQtc2luY2UtZXBvY2ggZW5jb2RpbmcgaW4gdGhlIHByZXBhcmVkLXRyYW5zYWN0aW9uIHByb3RvYnVmLlxuICAgICAgaWYgKHRoaXMuaXNJc29UaW1lc3RhbXAoZXhwZWN0ZWQpICYmIHRoaXMuaXNJbnRlZ2VyU3RyaW5nKGFjdHVhbCkpIHtcbiAgICAgICAgY29uc3QgZXhwZWN0ZWRNaWNyb3NlY29uZHMgPSBuZXcgQmlnTnVtYmVyKG5ldyBEYXRlKGV4cGVjdGVkKS5nZXRUaW1lKCkpLm11bHRpcGxpZWRCeSgxMDAwKTtcbiAgICAgICAgaWYgKCFleHBlY3RlZE1pY3Jvc2Vjb25kcy5pc0VxdWFsVG8obmV3IEJpZ051bWJlcihhY3R1YWwpKSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgIGBDYW50b24gY29tbWFuZCB0aW1lc3RhbXAgbWlzbWF0Y2ggYXQgJyR7Y3VycmVudFBhdGggfHwgJzxyb290Pid9JzogYCArXG4gICAgICAgICAgICAgIGBleHBlY3RlZCAnJHtleHBlY3RlZH0nICgke2V4cGVjdGVkTWljcm9zZWNvbmRzLnRvRml4ZWQoMCl9IMK1cyksIGdvdCAnJHthY3R1YWx9J2BcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmIChleHBlY3RlZCAhPT0gYWN0dWFsKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgQ2FudG9uIGNvbW1hbmQgbWlzbWF0Y2ggYXQgJyR7Y3VycmVudFBhdGggfHwgJzxyb290Pid9JzogZXhwZWN0ZWQgJyR7ZXhwZWN0ZWR9JywgZ290ICcke2FjdHVhbH0nYFxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIGV4cGVjdGVkID09PSAnbnVtYmVyJyAmJiB0eXBlb2YgYWN0dWFsID09PSAnbnVtYmVyJykge1xuICAgICAgaWYgKGV4cGVjdGVkICE9PSBhY3R1YWwpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW50b24gY29tbWFuZCBtaXNtYXRjaCBhdCAnJHtjdXJyZW50UGF0aCB8fCAnPHJvb3Q+J30nOiBleHBlY3RlZCAke2V4cGVjdGVkfSwgZ290ICR7YWN0dWFsfWApO1xuICAgICAgfVxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIGV4cGVjdGVkID09PSAnYm9vbGVhbicgJiYgdHlwZW9mIGFjdHVhbCA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICBpZiAoZXhwZWN0ZWQgIT09IGFjdHVhbCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENhbnRvbiBjb21tYW5kIG1pc21hdGNoIGF0ICcke2N1cnJlbnRQYXRoIHx8ICc8cm9vdD4nfSc6IGV4cGVjdGVkICR7ZXhwZWN0ZWR9LCBnb3QgJHthY3R1YWx9YCk7XG4gICAgICB9XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChBcnJheS5pc0FycmF5KGV4cGVjdGVkKSAmJiBBcnJheS5pc0FycmF5KGFjdHVhbCkpIHtcbiAgICAgIGlmIChleHBlY3RlZC5sZW5ndGggIT09IGFjdHVhbC5sZW5ndGgpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBDYW50b24gY29tbWFuZCBsaXN0LWxlbmd0aCBtaXNtYXRjaCBhdCAnJHtjdXJyZW50UGF0aCB8fCAnPHJvb3Q+J30nOiBleHBlY3RlZCAke2V4cGVjdGVkLmxlbmd0aH0sIGdvdCAke1xuICAgICAgICAgICAgYWN0dWFsLmxlbmd0aFxuICAgICAgICAgIH1gXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGV4cGVjdGVkLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IGNoaWxkUGF0aCA9IGN1cnJlbnRQYXRoID8gYCR7Y3VycmVudFBhdGh9LiR7aX1gIDogU3RyaW5nKGkpO1xuICAgICAgICB0aGlzLmFzc2VydERlZXBDYW50b25NYXRjaChleHBlY3RlZFtpXSwgYWN0dWFsW2ldLCBpbmplY3RBc1BhdGhzLCBjaGlsZFBhdGgpO1xuICAgICAgfVxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodGhpcy5pc1BsYWluT2JqZWN0KGV4cGVjdGVkKSAmJiB0aGlzLmlzUGxhaW5PYmplY3QoYWN0dWFsKSkge1xuICAgICAgY29uc3QgZXhwZWN0ZWRLZXlzID0gbmV3IFNldChPYmplY3Qua2V5cyhleHBlY3RlZCkpO1xuICAgICAgY29uc3QgYWN0dWFsS2V5cyA9IG5ldyBTZXQoT2JqZWN0LmtleXMoYWN0dWFsKSk7XG4gICAgICBmb3IgKGNvbnN0IGtleSBvZiBleHBlY3RlZEtleXMpIHtcbiAgICAgICAgY29uc3QgY2hpbGRQYXRoID0gY3VycmVudFBhdGggPyBgJHtjdXJyZW50UGF0aH0uJHtrZXl9YCA6IGtleTtcbiAgICAgICAgaWYgKGV4cGVjdGVkW2tleV0gPT09IHVuZGVmaW5lZCB8fCBpbmplY3RBc1BhdGhzLmhhcyhjaGlsZFBhdGgpKSBjb250aW51ZTtcbiAgICAgICAgaWYgKCFhY3R1YWxLZXlzLmhhcyhrZXkpKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW50b24gY29tbWFuZCBtaXNzaW5nIGZpZWxkIGF0ICcke2NoaWxkUGF0aH0nIG9uIHByZXBhcmVkIHRyYW5zYWN0aW9uYCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5hc3NlcnREZWVwQ2FudG9uTWF0Y2goZXhwZWN0ZWRba2V5XSwgKGFjdHVhbCBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPilba2V5XSwgaW5qZWN0QXNQYXRocywgY2hpbGRQYXRoKTtcbiAgICAgIH1cbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYENhbnRvbiBjb21tYW5kIHR5cGUgbWlzbWF0Y2ggYXQgJyR7Y3VycmVudFBhdGggfHwgJzxyb290Pid9JzogZXhwZWN0ZWQgJHt0aGlzLmRlc2NyaWJlVHlwZShcbiAgICAgICAgZXhwZWN0ZWRcbiAgICAgICl9LCBnb3QgJHt0aGlzLmRlc2NyaWJlVHlwZShhY3R1YWwpfWBcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbXB1dGVzIHRoZSB0b3BvbG9neSBoYXNoIGZyb20gdGhlIEFQSSByZXNwb25zZSBvZiB0aGUgJ2NyZWF0ZSBwYXJ0eScgZW5kcG9pbnQuXG4gICAqXG4gICAqIEBwYXJhbSB0b3BvbG9neVRyYW5zYWN0aW9ucyAtIExpc3Qgb2YgYmFzZTY0LWVuY29kZWQgdG9wb2xvZ3kgdHJhbnNhY3Rpb25zIGZyb20gdGhlIENhbnRvbiBBUEkuXG4gICAqIEByZXR1cm5zIFRoZSBmaW5hbCBiYXNlNjQtZW5jb2RlZCB0b3BvbG9neSB0cmFuc2FjdGlvbiBoYXNoLlxuICAgKi9cbiAgY29tcHV0ZUhhc2hGcm9tQ3JlYXRlUGFydHlSZXNwb25zZSh0b3BvbG9neVRyYW5zYWN0aW9uczogc3RyaW5nW10pOiBzdHJpbmcge1xuICAgIGNvbnN0IHR4QnVmZmVycyA9IHRvcG9sb2d5VHJhbnNhY3Rpb25zLm1hcCgodHgpID0+IEJ1ZmZlci5mcm9tKHR4LCAnYmFzZTY0JykpO1xuICAgIHJldHVybiB0aGlzLmNvbXB1dGVIYXNoRnJvbVRvcG9sb2d5VHJhbnNhY3Rpb24odHhCdWZmZXJzKTtcbiAgfVxuXG4gIGFzeW5jIGNvbXB1dGVIYXNoRnJvbVByZXBhcmVTdWJtaXNzaW9uUmVzcG9uc2UocHJlcGFyZWRUcmFuc2FjdGlvbkJhc2U2NDogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICBjb25zdCBwcmVwYXJlZFRyYW5zYWN0aW9uID0gdGhpcy5kZWNvZGVQcmVwYXJlZFRyYW5zYWN0aW9uKHByZXBhcmVkVHJhbnNhY3Rpb25CYXNlNjQpO1xuICAgIGNvbnN0IGhhc2ggPSBhd2FpdCBjb21wdXRlUHJlcGFyZWRUcmFuc2FjdGlvbihwcmVwYXJlZFRyYW5zYWN0aW9uKTtcbiAgICByZXR1cm4gQnVmZmVyLmZyb20oaGFzaCkudG9TdHJpbmcoJ2Jhc2U2NCcpO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbXB1dGVzIHRoZSBmaW5hbCB0b3BvbG9neSB0cmFuc2FjdGlvbiBoYXNoIGZvciBhIGxpc3Qgb2YgcHJlcGFyZWQgQ2FudG9uIHRyYW5zYWN0aW9ucy5cbiAgICpcbiAgICogRWFjaCB0cmFuc2FjdGlvbiBpcyBmaXJzdCBoYXNoZWQgd2l0aCBwdXJwb3NlIGAxMWAsIHRoZW4gYWxsIGhhc2hlcyBhcmUgY29tYmluZWQgYW5kXG4gICAqIGhhc2hlZCBhZ2FpbiB3aXRoIHB1cnBvc2UgYDU1YCwgZm9sbG93aW5nIHRoZSBDYW50b24gdG9wb2xvZ3kgaGFzaCBydWxlcy5cbiAgICpcbiAgICogVGhlIHJlc3VsdGluZyBoYXNoIGlzIGVuY29kZWQgYXMgYSBiYXNlNjQgc3RyaW5nLlxuICAgKlxuICAgKiBAcGFyYW0ge0J1ZmZlcltdfSBwcmVwYXJlZFRyYW5zYWN0aW9ucyAtIEFuIGFycmF5IG9mIENhbnRvbiB0cmFuc2FjdGlvbiBidWZmZXJzLlxuICAgKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgZmluYWwgdG9wb2xvZ3kgaGFzaCwgYmFzZTY0LWVuY29kZWQuXG4gICAqL1xuICBwcml2YXRlIGNvbXB1dGVIYXNoRnJvbVRvcG9sb2d5VHJhbnNhY3Rpb24ocHJlcGFyZWRUcmFuc2FjdGlvbnM6IEJ1ZmZlcltdKTogc3RyaW5nIHtcbiAgICBjb25zdCByYXdIYXNoZXMgPSBwcmVwYXJlZFRyYW5zYWN0aW9ucy5tYXAoKHR4KSA9PiB0aGlzLmNvbXB1dGVTaGEyNTZDYW50b25IYXNoKDExLCB0eCkpO1xuICAgIGNvbnN0IGNvbWJpbmVkSGFzaGVzID0gdGhpcy5jb21wdXRlTXVsdGlIYXNoRm9yVG9wb2xvZ3kocmF3SGFzaGVzKTtcbiAgICBjb25zdCBjb21wdXRlZEhhc2ggPSB0aGlzLmNvbXB1dGVTaGEyNTZDYW50b25IYXNoKDU1LCBjb21iaW5lZEhhc2hlcyk7XG4gICAgcmV0dXJuIEJ1ZmZlci5mcm9tKGNvbXB1dGVkSGFzaCwgJ2hleCcpLnRvU3RyaW5nKCdiYXNlNjQnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb252ZXJ0cyBhIGJhc2U2NC1lbmNvZGVkIEVkMjU1MTkgcHVibGljIGtleSBzdHJpbmcgaW50byBhIHN0cnVjdHVyZWQgc2lnbmluZyBwdWJsaWMga2V5IG9iamVjdC5cbiAgICogQHBhcmFtIHtTdHJpbmd9IHB1YmxpY0tleSBUaGUgYmFzZTY0LWVuY29kZWQgRWQyNTUxOSBwdWJsaWMga2V5XG4gICAqIEByZXR1cm5zIHtPYmplY3R9IFRoZSBzdHJ1Y3R1cmVkIHNpZ25pbmcga2V5IG9iamVjdCBmb3JtYXR0ZWQgZm9yIHVzZSB3aXRoIGNyeXB0b2dyYXBoaWMgb3BlcmF0aW9uc1xuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgcHJpdmF0ZSBzaWduaW5nUHVibGljS2V5RnJvbUVkMjU1MTkocHVibGljS2V5OiBzdHJpbmcpOiB7XG4gICAgZm9ybWF0OiBudW1iZXI7XG4gICAgcHVibGljS2V5OiBCdWZmZXI7XG4gICAgc2NoZW1lOiBudW1iZXI7XG4gICAga2V5U3BlYzogbnVtYmVyO1xuICAgIHVzYWdlOiBbXTtcbiAgfSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGZvcm1hdDogQ3J5cHRvS2V5Rm9ybWF0LlJBVyxcbiAgICAgIHB1YmxpY0tleTogQnVmZmVyLmZyb20ocHVibGljS2V5LCAnYmFzZTY0JyksXG4gICAgICBzY2hlbWU6IFNpZ25pbmdBbGdvcml0aG1TcGVjLkVEMjU1MTksXG4gICAgICBrZXlTcGVjOiBTaWduaW5nS2V5U3BlYy5FQ19DVVJWRTI1NTE5LFxuICAgICAgdXNhZ2U6IFtdLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhIGJ1ZmZlciB3aXRoIGEgNC1ieXRlIGJpZy1lbmRpYW4gaW50ZWdlciBwcmVmaXggZm9sbG93ZWQgYnkgdGhlIHByb3ZpZGVkIGJ5dGUgYnVmZmVyXG4gICAqIEBwYXJhbSB7TnVtYmVyfSB2YWx1ZSBUaGUgaW50ZWdlciB0byBwcmVmaXgsIHdyaXR0ZW4gYXMgNCBieXRlcyBpbiBiaWctZW5kaWFuIG9yZGVyXG4gICAqIEBwYXJhbSB7QnVmZmVyfSBieXRlcyBUaGUgYnVmZmVyIHRvIGFwcGVuZCBhZnRlciB0aGUgaW50ZWdlciBwcmVmaXhcbiAgICogQHJldHVybnMge0J1ZmZlcn0gVGhlIHJlc3VsdGluZyBidWZmZXIgd2l0aCB0aGUgcHJlZml4ZWQgaW50ZWdlclxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgcHJpdmF0ZSBwcmVmaXhlZEludCh2YWx1ZTogbnVtYmVyLCBieXRlczogQnVmZmVyKTogQnVmZmVyIHtcbiAgICBjb25zdCBidWZmZXIgPSBCdWZmZXIuYWxsb2MoNCArIGJ5dGVzLmxlbmd0aCk7XG4gICAgYnVmZmVyLndyaXRlVUludDMyQkUodmFsdWUsIDApO1xuICAgIEJ1ZmZlci5mcm9tKGJ5dGVzKS5jb3B5KGJ1ZmZlciwgNCk7XG4gICAgcmV0dXJuIGJ1ZmZlcjtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb21wdXRlcyBhbiBTSEEtMjU2IENhbnRvbi1zdHlsZSBoYXNoIGJ5IHByZWZpeGluZyB0aGUgaW5wdXQgd2l0aCBhIHB1cnBvc2UgaWRlbnRpZmllcixcbiAgICogdGhlbiBoYXNoaW5nIHRoZSByZXN1bHRpbmcgYnVmZmVyIGFuZCBwcmVwZW5kaW5nIGEgbXVsdGktcHJlZml4XG4gICAqXG4gICAqIEBwYXJhbSB7TnVtYmVyfSBwdXJwb3NlIEEgbnVtZXJpYyBpZGVudGlmaWVyIHRvIHByZWZpeCB0aGUgaGFzaCBpbnB1dCB3aXRoXG4gICAqIEBwYXJhbSB7QnVmZmVyfSBieXRlcyBUaGUgYnVmZmVyIHRvIGJlIGhhc2hlZFxuICAgKiBAcmV0dXJucyB7U3RyaW5nfSBBIGhleGFkZWNpbWFsIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgcmVzdWx0aW5nIGhhc2ggd2l0aCBtdWx0aS1wcmVmaXhcbiAgICogQHByaXZhdGVcbiAgICovXG4gIHByaXZhdGUgY29tcHV0ZVNoYTI1NkNhbnRvbkhhc2gocHVycG9zZTogbnVtYmVyLCBieXRlczogQnVmZmVyKTogc3RyaW5nIHtcbiAgICBjb25zdCBoYXNoSW5wdXQgPSB0aGlzLnByZWZpeGVkSW50KHB1cnBvc2UsIGJ5dGVzKTtcbiAgICBjb25zdCBoYXNoID0gY3J5cHRvLmNyZWF0ZUhhc2goJ3NoYTI1NicpLnVwZGF0ZShoYXNoSW5wdXQpLmRpZ2VzdCgpO1xuICAgIGNvbnN0IG11bHRpcHJlZml4ID0gQnVmZmVyLmZyb20oWzB4MTIsIDB4MjBdKTtcbiAgICByZXR1cm4gQnVmZmVyLmNvbmNhdChbbXVsdGlwcmVmaXgsIGhhc2hdKS50b1N0cmluZygnaGV4Jyk7XG4gIH1cblxuICAvKipcbiAgICogRGVjb2RlcyBhIEJhc2U2NC1lbmNvZGVkIHN0cmluZyBpbnRvIGEgVWludDhBcnJheVxuICAgKiBAcGFyYW0ge1N0cmluZ30gYjY0IFRoZSBCYXNlNjQtZW5jb2RlZCBzdHJpbmdcbiAgICogQHJldHVybnMge1VpbnQ4QXJyYXl9IFRoZSBkZWNvZGVkIGJ5dGUgYXJyYXlcbiAgICogQHByaXZhdGVcbiAgICovXG4gIHByaXZhdGUgZnJvbUJhc2U2NChiNjQ6IHN0cmluZyk6IFVpbnQ4QXJyYXkge1xuICAgIHJldHVybiBuZXcgVWludDhBcnJheShCdWZmZXIuZnJvbShiNjQsICdiYXNlNjQnKSk7XG4gIH1cblxuICAvKipcbiAgICogRGVjb2RlcyBhIEJhc2U2NC1lbmNvZGVkIHByZXBhcmVkIHRyYW5zYWN0aW9uIGludG8gYSBzdHJ1Y3R1cmVkIG9iamVjdFxuICAgKiBAcGFyYW0ge1N0cmluZ30gYmFzZTY0IFRoZSBCYXNlNjQtZW5jb2RlZCB0cmFuc2FjdGlvbiBkYXRhXG4gICAqIEByZXR1cm5zIHtJUHJlcGFyZWRUcmFuc2FjdGlvbn0gVGhlIGRlY29kZWQgYElQcmVwYXJlZFRyYW5zYWN0aW9uYCBvYmplY3RcbiAgICogQHByaXZhdGVcbiAgICovXG4gIHByaXZhdGUgZGVjb2RlUHJlcGFyZWRUcmFuc2FjdGlvbihiYXNlNjQ6IHN0cmluZyk6IElQcmVwYXJlZFRyYW5zYWN0aW9uIHtcbiAgICBjb25zdCBieXRlcyA9IHRoaXMuZnJvbUJhc2U2NChiYXNlNjQpO1xuICAgIHJldHVybiBQcmVwYXJlZFRyYW5zYWN0aW9uLmZyb21CaW5hcnkoYnl0ZXMpO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbXB1dGVzIGEgZGV0ZXJtaW5pc3RpYyBjb21iaW5lZCBoYXNoIGZyb20gYW4gYXJyYXkgb2YgaW5kaXZpZHVhbCBDYW50b24tc3R5bGUgU0hBLTI1NiBoYXNoZXNcbiAgICpcbiAgICogRWFjaCBoYXNoIGlzIGRlY29kZWQgZnJvbSBoZXgsIHNvcnRlZCBsZXhpY29ncmFwaGljYWxseSAoYnkgaGV4KSwgYW5kIHByZWZpeGVkIHdpdGggaXRzIGxlbmd0aFxuICAgKiBUaGUgZmluYWwgYnVmZmVyIGluY2x1ZGVzIHRoZSBudW1iZXIgb2YgaGFzaGVzIGZvbGxvd2VkIGJ5IGVhY2ggKGxlbmd0aC1wcmVmaXhlZCkgaGFzaFxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ1tdfSBoYXNoZXMgLSBBbiBhcnJheSBvZiBDYW50b24tcHJlZml4ZWQgU0hBLTI1NiBoYXNoZXMgaW4gaGV4YWRlY2ltYWwgc3RyaW5nIGZvcm1hdFxuICAgKiBAcmV0dXJucyB7QnVmZmVyfSBBIGJpbmFyeSBidWZmZXIgcmVwcmVzZW50aW5nIHRoZSBjb21iaW5lZCBoYXNoIGlucHV0XG4gICAqL1xuICBwcml2YXRlIGNvbXB1dGVNdWx0aUhhc2hGb3JUb3BvbG9neShoYXNoZXM6IHN0cmluZ1tdKTogQnVmZmVyIHtcbiAgICBjb25zdCBzb3J0ZWRIYXNoZXMgPSBoYXNoZXNcbiAgICAgIC5tYXAoKGhleCkgPT4gQnVmZmVyLmZyb20oaGV4LCAnaGV4JykpXG4gICAgICAuc29ydCgoYSwgYikgPT4gYS50b1N0cmluZygnaGV4JykubG9jYWxlQ29tcGFyZShiLnRvU3RyaW5nKCdoZXgnKSkpO1xuXG4gICAgY29uc3QgbnVtSGFzaGVzQnl0ZXMgPSB0aGlzLmVuY29kZUludDMyKHNvcnRlZEhhc2hlcy5sZW5ndGgpO1xuICAgIGNvbnN0IHBhcnRzOiBCdWZmZXJbXSA9IFtudW1IYXNoZXNCeXRlc107XG5cbiAgICBmb3IgKGNvbnN0IGggb2Ygc29ydGVkSGFzaGVzKSB7XG4gICAgICBjb25zdCBsZW5ndGhCeXRlcyA9IHRoaXMuZW5jb2RlSW50MzIoaC5sZW5ndGgpO1xuICAgICAgcGFydHMucHVzaChsZW5ndGhCeXRlcywgaCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIEJ1ZmZlci5jb25jYXQocGFydHMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEVuY29kZXMgYSAzMi1iaXQgc2lnbmVkIGludGVnZXIgaW50byBhIDQtYnl0ZSBiaWctZW5kaWFuIEJ1ZmZlclxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0gdmFsdWUgLSBUaGUgaW50ZWdlciB0byBlbmNvZGVcbiAgICogQHJldHVybnMge0J1ZmZlcn0gQSA0LWJ5dGUgYnVmZmVyIHJlcHJlc2VudGluZyB0aGUgaW50ZWdlciBpbiBiaWctZW5kaWFuIGZvcm1hdFxuICAgKi9cbiAgcHJpdmF0ZSBlbmNvZGVJbnQzMih2YWx1ZTogbnVtYmVyKTogQnVmZmVyIHtcbiAgICBjb25zdCBidWYgPSBCdWZmZXIuYWxsb2MoNCk7XG4gICAgYnVmLndyaXRlSW50MzJCRSh2YWx1ZSwgMCk7XG4gICAgcmV0dXJuIGJ1ZjtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb252ZXJ0IHRvIGNhbnRvbiByYXcgdW5pdHNcbiAgICogQHBhcmFtIHtCaWdOdW1iZXJ9IHZhbHVlXG4gICAqIEByZXR1cm5zIHtTdHJpbmd9IHRoZSBjb252ZXJ0ZWQgcmF3IGNhbnRvbiB1bml0c1xuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgcHJpdmF0ZSBjb252ZXJ0QW1vdW50VG9Mb3dlc3RVbml0KHZhbHVlOiBCaWdOdW1iZXIpOiBzdHJpbmcge1xuICAgIHJldHVybiB2YWx1ZS5tdWx0aXBsaWVkQnkobmV3IEJpZ051bWJlcigxMCkucG93KDEwKSkudG9GaXhlZCgwKTtcbiAgfVxuXG4gIGlzUGxhaW5PYmplY3QodmFsdWU6IHVua25vd24pOiB2YWx1ZSBpcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB7XG4gICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgIT09IG51bGwgJiYgIUFycmF5LmlzQXJyYXkodmFsdWUpO1xuICB9XG5cbiAgcHJpdmF0ZSBhcmVOdW1lcmljU3RyaW5ncyhhOiBzdHJpbmcsIGI6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IG51bWVyaWNSZSA9IC9eLT9cXGQrKFxcLlxcZCspPyQvO1xuICAgIHJldHVybiBudW1lcmljUmUudGVzdChhKSAmJiBudW1lcmljUmUudGVzdChiKTtcbiAgfVxuXG4gIHByaXZhdGUgaXNJc29UaW1lc3RhbXAodmFsdWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGlmICghL15cXGR7NH0tXFxkezJ9LVxcZHsyfVRcXGR7Mn06XFxkezJ9OlxcZHsyfShcXC5cXGR7MSwzfSk/WiQvLnRlc3QodmFsdWUpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiBOdW1iZXIuaXNGaW5pdGUoRGF0ZS5wYXJzZSh2YWx1ZSkpO1xuICB9XG5cbiAgcHJpdmF0ZSBpc0ludGVnZXJTdHJpbmcodmFsdWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAvXlxcZCskLy50ZXN0KHZhbHVlKTtcbiAgfVxuXG4gIHByaXZhdGUgZGVzY3JpYmVUeXBlKHZhbHVlOiB1bmtub3duKTogc3RyaW5nIHtcbiAgICBpZiAodmFsdWUgPT09IG51bGwpIHJldHVybiAnbnVsbCc7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSByZXR1cm4gJ2FycmF5JztcbiAgICByZXR1cm4gdHlwZW9mIHZhbHVlO1xuICB9XG5cbiAgcHJpdmF0ZSBzdHJpbmdpZnlGb3JFcnJvcih2YWx1ZTogdW5rbm93bik6IHN0cmluZyB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh2YWx1ZSk7XG4gICAgfSBjYXRjaCB7XG4gICAgICByZXR1cm4gU3RyaW5nKHZhbHVlKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBiaXRnbyB0b2tlbiBuYW1lIHVzaW5nIHRoZSBvbi1jaGFpbiBpbnN0cnVtZW50IGRldGFpbHNcbiAgICogQHBhcmFtIGNvbnRyYWN0QWRkcmVzcyAtIHRoZSBjb250cmFjdCBhZGRyZXNzIG9mIHRoZSBmb3JtLCBgaW5zdHJ1bWVudEFkbWluOmluc3RydW1lbnRJZGBcbiAgICogQHJldHVybnMgdG9rZW5OYW1lIGlmIGNvbnRyYWN0QWRkcmVzcyBtYXRjaGVzIHdpdGggYW55IHN1cHBvcnRlZCBjYW50b24gdG9rZW5zXG4gICAqL1xuICBwcml2YXRlIGZpbmRUb2tlbk5hbWVCeUNvbnRyYWN0QWRkcmVzcyhjb250cmFjdEFkZHJlc3M6IHN0cmluZyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKGNvbnRyYWN0QWRkcmVzcy5pbmNsdWRlcygnQW11bGV0JykpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGNvbnN0IGNhbnRvblRva2VuID0gY29pbnNcbiAgICAgIC5maWx0ZXIoKGNvaW4pID0+IGNvaW4gaW5zdGFuY2VvZiBDYW50b25Ub2tlbiAmJiBjb2luLmNvbnRyYWN0QWRkcmVzcyA9PT0gY29udHJhY3RBZGRyZXNzKVxuICAgICAgLm1hcCgoY29pbikgPT4gY29pbiBhcyBDYW50b25Ub2tlbik7XG4gICAgcmV0dXJuIGNhbnRvblRva2VuID8gY2FudG9uVG9rZW5bMF0ubmFtZSA6IHVuZGVmaW5lZDtcbiAgfVxufVxuXG5jb25zdCB1dGlscyA9IG5ldyBVdGlscygpO1xuXG5leHBvcnQgZGVmYXVsdCB1dGlscztcbiJdfQ==
|
|
1076
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3V0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLGdFQUFxQztBQUNyQyxvREFBNEI7QUFFNUIsOENBQXNGO0FBQ3RGLDRDQUFvRDtBQUVwRCwwREFBMEU7QUFDMUUseUZBQW1GO0FBRW5GLHlDQUFtRjtBQUluRixNQUFhLEtBQUs7SUFDaEIsa0JBQWtCO0lBQ2xCLGNBQWMsQ0FBQyxPQUFlO1FBQzVCLElBQUksQ0FBQyxPQUFPLElBQUksT0FBTyxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUU7WUFBRSxPQUFPLEtBQUssQ0FBQztRQUNwRCxNQUFNLENBQUMsU0FBUyxFQUFFLFdBQVcsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDNUQsSUFBSSxDQUFDLFdBQVc7WUFBRSxPQUFPLEtBQUssQ0FBQztRQUMvQixpRUFBaUU7UUFDakUsTUFBTSxDQUFDLGVBQWUsQ0FBQyxHQUFHLFdBQVcsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDL0QsSUFBSSxDQUFDLFNBQVMsSUFBSSxDQUFDLGVBQWU7WUFBRSxPQUFPLEtBQUssQ0FBQztRQUNqRCxPQUFPLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxlQUFlLENBQUMsQ0FBQztJQUNoRCxDQUFDO0lBRUQsa0JBQWtCO0lBQ2xCLGNBQWMsQ0FBQyxJQUFZO1FBQ3pCLDJFQUEyRTtRQUMzRSxvREFBb0Q7UUFDcEQsTUFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDakMsTUFBTSxXQUFXLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ25DLE9BQU8sQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLElBQUksV0FBVyxHQUFHLENBQUMs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dEMsSUFBSSxXQUFXLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQzdCLE1BQU0sSUFBSSxLQUFLLENBQUMsd0NBQXdDLGVBQWUsRUFBRSxDQUFDLENBQUM7UUFDN0UsQ0FBQztRQUNELE9BQU8sV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztJQUM3QixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNLLGtCQUFrQixDQUFDLGVBQXVCLEVBQUUsWUFBb0I7UUFDdEUsT0FBTyxZQUFZLEtBQUssUUFBUSxJQUFJLGVBQWUsQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDMUUsQ0FBQztDQUNGO0FBemlDRCxzQkF5aUNDO0FBRUQsTUFBTSxLQUFLLEdBQUcsSUFBSSxLQUFLLEVBQUUsQ0FBQztBQUUxQixrQkFBZSxLQUFLLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgQmlnTnVtYmVyIGZyb20gJ2JpZ251bWJlci5qcyc7XG5pbXBvcnQgY3J5cHRvIGZyb20gJ2NyeXB0byc7XG5cbmltcG9ydCB7IEJhc2VVdGlscywgaXNWYWxpZEVkMjU1MTlQdWJsaWNLZXksIFRyYW5zYWN0aW9uVHlwZSB9IGZyb20gJ0BiaXRnby9zZGstY29yZSc7XG5pbXBvcnQgeyBDYW50b25Ub2tlbiwgY29pbnMgfSBmcm9tICdAYml0Z28vc3RhdGljcyc7XG5cbmltcG9ydCB7IGNvbXB1dGVQcmVwYXJlZFRyYW5zYWN0aW9uIH0gZnJvbSAnLi4vLi4vcmVzb3VyY2VzL2hhc2gvaGFzaC5qcyc7XG5pbXBvcnQgeyBQcmVwYXJlZFRyYW5zYWN0aW9uIH0gZnJvbSAnLi4vLi4vcmVzb3VyY2VzL3Byb3RvL3ByZXBhcmVkVHJhbnNhY3Rpb24uanMnO1xuXG5pbXBvcnQgeyBDcnlwdG9LZXlGb3JtYXQsIFNpZ25pbmdBbGdvcml0aG1TcGVjLCBTaWduaW5nS2V5U3BlYyB9IGZyb20gJy4vY29uc3RhbnQnO1xuaW1wb3J0IHsgQ2FudG9uQ29tbWFuZEluZm8sIFByZXBhcmVkVHJhbnNhY3Rpb24gYXMgSVByZXBhcmVkVHJhbnNhY3Rpb24sIFByZXBhcmVkVHhuUGFyc2VkSW5mbyB9IGZyb20gJy4vaWZhY2UnO1xuaW1wb3J0IHsgUmVjb3JkRmllbGQsIFZhbHVlIH0gZnJvbSAnLi9yZXNvdXJjZXNJbnRlcmZhY2UnO1xuXG5leHBvcnQgY2xhc3MgVXRpbHMgaW1wbGVtZW50cyBCYXNlVXRpbHMge1xuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgaXNWYWxpZEFkZHJlc3MoYWRkcmVzczogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgaWYgKCFhZGRyZXNzIHx8IGFkZHJlc3MudHJpbSgpID09PSAnJykgcmV0dXJuIGZhbHNlO1xuICAgIGNvbnN0IFtwYXJ0eUhpbnQsIGZpbmdlcnByaW50XSA9IGFkZHJlc3MudHJpbSgpLnNwbGl0KCc6OicpO1xuICAgIGlmICghZmluZ2VycHJpbnQpIHJldHVybiBmYWxzZTtcbiAgICAvLyBhbGwgbWVtb0lkcyBhcmUgY29uc2lkZXJlZCB2YWxpZCBhcyBsb25nIGFzIHN0cmluZ3MgYXJlIHBhc3NlZFxuICAgIGNvbnN0IFtmaW5nZXJwcmludFBhcnRdID0gZmluZ2VycHJpbnQudHJpbSgpLnNwbGl0KCc/bWVtb0lkPScpO1xuICAgIGlmICghcGFydHlIaW50IHx8ICFmaW5nZXJwcmludFBhcnQpIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gdGhpcy5pc1ZhbGlkQ2FudG9uSGV4KGZpbmdlcnByaW50UGFydCk7XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgaXNWYWxpZEJsb2NrSWQoaGFzaDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgLy8gSW4gY2FudG9uLCB0aGVyZSBpcyBubyBibG9jayBoYXNoLCB3ZSBzdG9yZSB0aGUgaGVpZ2h0IGFzIHRoZSBfaWQgKGhhc2gpXG4gICAgLy8gdGhpcyB3aWxsIGJlIG9mIHRoZSBmb3JtLCA8YmxvY2tIZWlnaHQ+Xzx2ZXJzaW9uPlxuICAgIGNvbnN0IFtoZWlnaHRdID0gaGFzaC5zcGxpdCgnXycpO1xuICAgIGNvbnN0IGJsb2NrSGVpZ2h0ID0gTnVtYmVyKGhlaWdodCk7XG4gICAgcmV0dXJuICFpc05hTihibG9ja0hlaWdodCkgJiYgYmxvY2tIZWlnaHQgPiAwO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIGlzVmFsaWRQcml2YXRlS2V5KGtleTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdNZXRob2Qgbm90IGltcGxlbWVudGVkLicpO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIGlzVmFsaWRQdWJsaWNLZXkoa2V5OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gaXNWYWxpZEVkMjU1MTlQdWJsaWNLZXkoa2V5KTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICBpc1ZhbGlkU2lnbmF0dXJlKHNpZ25hdHVyZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdNZXRob2Qgbm90IGltcGxlbWVudGVkLicpO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIGlzVmFsaWRUcmFuc2FjdGlvbklkKHR4SWQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHRocm93IG5ldyBFcnJvcignTWV0aG9kIG5vdCBpbXBsZW1lbnRlZC4nKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBNZXRob2QgdG8gdmFsaWRhdGUgdGhlIGlucHV0IGlzIGEgdmFsaWQgY2FudG9uIGhleCBzdHJpbmdcbiAgICogQHBhcmFtIHtTdHJpbmd9IHZhbHVlIHRoZSBoZXggc3RyaW5nIHZhbHVlXG4gICAqIEByZXR1cm5zIHtCb29sZWFufSB0cnVlIGlmIHZhbGlkXG4gICAqL1xuICBpc1ZhbGlkQ2FudG9uSGV4KHZhbHVlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBjb25zdCByZWdleCA9IC9eW2EtZkEtRjAtOV17Njh9JC87XG4gICAgcmV0dXJuIHJlZ2V4LnRlc3QodmFsdWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEhlbHBlciBtZXRob2QgdG8gY29udmVydCBoZXggdmFsdWUgdG8gYmFzZTY0XG4gICAqIEBwYXJhbSB7U3RyaW5nfSBoZXhTdHJpbmcgLSBoZXggZW5jb2RlZCBzdHJpbmdcbiAgICogQHJldHVybnMge1N0cmluZ30gYmFzZTY0IGVuY29kZWQgc3RyaW5nXG4gICAqL1xuICBnZXRCYXNlNjRGcm9tSGV4KGhleFN0cmluZzogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gQnVmZmVyLmZyb20oaGV4U3RyaW5nLCAnaGV4JykudG9TdHJpbmcoJ2Jhc2U2NCcpO1xuICB9XG5cbiAgLyoqXG4gICAqIE1ldGhvZCB0byBjcmVhdGUgZmluZ2VycHJpbnQgKHBhcnQgb2YgdGhlIGNhbnRvbiBwYXJ0eUlkKSBmcm9tIHB1YmxpYyBrZXlcbiAgICogQHBhcmFtIHtTdHJpbmd9IHB1YmxpY0tleSB0aGUgcHVibGljIGtleVxuICAgKiBAcmV0dXJucyB7U3RyaW5nfVxuICAgKi9cbiAgZ2V0QWRkcmVzc0Zyb21QdWJsaWNLZXkocHVibGljS2V5OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGNvbnN0IGtleSA9IHRoaXMuc2lnbmluZ1B1YmxpY0tleUZyb21FZDI1NTE5KHB1YmxpY0tleSk7XG4gICAgY29uc3QgaGFzaFB1cnBvc2UgPSAxMjtcbiAgICByZXR1cm4gdGhpcy5jb21wdXRlU2hhMjU2Q2FudG9uSGFzaChoYXNoUHVycG9zZSwga2V5LnB1YmxpY0tleSk7XG4gIH1cblxuICAvKipcbiAgICogTWV0aG9kIHRvIHBhcnNlIHJhdyBjYW50b24gdHJhbnNhY3Rpb24gJiBnZXQgcmVxdWlyZWQgZGF0YVxuICAgKiBAcGFyYW0ge1N0cmluZ30gcmF3RGF0YSBiYXNlNjQgZW5jb2RlZCBzdHJpbmdcbiAgICogQHBhcmFtIHtUcmFuc2FjdGlvblR5cGV9IHR4VHlwZSB0aGUgdHJhbnNhY3Rpb24gdHlwZVxuICAgKiBAcmV0dXJucyB7UHJlcGFyZWRUeG5QYXJzZWRJbmZvfVxuICAgKi9cbiAgcGFyc2VSYXdDYW50b25UcmFuc2FjdGlvbkRhdGEocmF3RGF0YTogc3RyaW5nLCB0eFR5cGU6IFRyYW5zYWN0aW9uVHlwZSk6IFByZXBhcmVkVHhuUGFyc2VkSW5mbyB7XG4gICAgY29uc3QgZGVjb2RlZERhdGEgPSB0aGlzLmRlY29kZVByZXBhcmVkVHJhbnNhY3Rpb24ocmF3RGF0YSk7XG4gICAgY29uc3Qgbm9kZXMgPSBkZWNvZGVkRGF0YS50cmFuc2FjdGlvbj8ubm9kZXMgPz8gW107XG4gICAgY29uc3QgZ2V0RmllbGQgPSAoZmllbGRzOiBSZWNvcmRGaWVsZFtdLCBsYWJlbDogc3RyaW5nKSA9PiBmaWVsZHMuZmluZCgoZikgPT4gZi5sYWJlbCA9PT0gbGFiZWwpPy52YWx1ZT8uc3VtO1xuXG4gICAgbGV0IHNlbmRlciA9ICcnO1xuICAgIGxldCByZWNlaXZlciA9ICcnO1xuICAgIGxldCBhbW91bnQgPSAnJztcbiAgICBsZXQgbWVtb0lkOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgbGV0IGluc3RydW1lbnRJZDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIGxldCBpbnN0cnVtZW50QWRtaW46IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIGFyZ3VtZW50IGZpZWxkcyBvZiB0aGUgZmlyc3QgY3JlYXRlIG5vZGUgbWF0Y2hpbmcgdGhlIGdpdmVuIGVudGl0eSBuYW1lLlxuICAgICAqL1xuICAgIGNvbnN0IGZpbmRDcmVhdGVOb2RlRmllbGRzID0gKGVudGl0eU5hbWU6IHN0cmluZyk6IFJlY29yZEZpZWxkW10gfCB1bmRlZmluZWQgPT4ge1xuICAgICAgZm9yIChjb25zdCBub2RlIG9mIG5vZGVzKSB7XG4gICAgICAgIGNvbnN0IHZuID0gbm9kZS52ZXJzaW9uZWROb2RlO1xuICAgICAgICBpZiAoIXZuIHx8IHZuLm9uZW9mS2luZCAhPT0gJ3YxJykgY29udGludWU7XG4gICAgICAgIGNvbnN0IG50ID0gdm4udjEubm9kZVR5cGU7XG4gICAgICAgIGlmIChudC5vbmVvZktpbmQgIT09ICdjcmVhdGUnKSBjb250aW51ZTtcbiAgICAgICAgaWYgKG50LmNyZWF0ZS50ZW1wbGF0ZUlkPy5lbnRpdHlOYW1lICE9PSBlbnRpdHlOYW1lKSBjb250aW51ZTtcbiAgICAgICAgY29uc3QgYXJnU3VtID0gbnQuY3JlYXRlLmFyZ3VtZW50Py5zdW07XG4gICAgICAgIGlmICghYXJnU3VtIHx8IGFyZ1N1bS5vbmVvZktpbmQgIT09ICdyZWNvcmQnKSBjb250aW51ZTtcbiAgICAgICAgY29uc3QgZmllbGRzID0gYXJnU3VtLnJlY29yZD8uZmllbGRzO1xuICAgICAgICBpZiAoZmllbGRzKSByZXR1cm4gZmllbGRzO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgY2hvc2VuVmFsdWUgZmllbGRzIG9mIHRoZSBmaXJzdCBleGVyY2lzZSBub2RlIG1hdGNoaW5nIHRoZSBnaXZlbiBjaG9pY2VJZC5cbiAgICAgKi9cbiAgICBjb25zdCBmaW5kRXhlcmNpc2VOb2RlRmllbGRzID0gKGNob2ljZUlkOiBzdHJpbmcpOiBSZWNvcmRGaWVsZFtdIHwgdW5kZWZpbmVkID0+IHtcbiAgICAgIGZvciAoY29uc3Qgbm9kZSBvZiBub2Rlcykge1xuICAgICAgICBjb25zdCB2biA9IG5vZGUudmVyc2lvbmVkTm9kZTtcbiAgICAgICAgaWYgKCF2biB8fCB2bi5vbmVvZktpbmQgIT09ICd2MScpIGNvbnRpbnVlO1xuICAgICAgICBjb25zdCBudCA9IHZuLnYxLm5vZGVUeXBlO1xuICAgICAgICBpZiAobnQub25lb2ZLaW5kICE9PSAnZXhlcmNpc2UnKSBjb250aW51ZTtcbiAgICAgICAgaWYgKG50LmV4ZXJjaXNlLmNob2ljZUlkICE9PSBjaG9pY2VJZCkgY29udGludWU7XG4gICAgICAgIGNvbnN0IGFyZ1N1bSA9IG50LmV4ZXJjaXNlLmNob3NlblZhbHVlPy5zdW07XG4gICAgICAgIGlmICghYXJnU3VtIHx8IGFyZ1N1bS5vbmVvZktpbmQgIT09ICdyZWNvcmQnKSBjb250aW51ZTtcbiAgICAgICAgY29uc3QgZmllbGRzID0gYXJnU3VtLnJlY29yZD8uZmllbGRzO1xuICAgICAgICBpZiAoZmllbGRzKSByZXR1cm4gZmllbGRzO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgZmlyc3QgYWN0aW5nIHBhcnR5IG9mIHRoZSBmaXJzdCBleGVyY2lzZSBub2RlIG1hdGNoaW5nIHRoZSBnaXZlbiBjaG9pY2VJZC5cbiAgICAgKi9cbiAgICBjb25zdCBmaW5kRXhlcmNpc2VBY3RpbmdQYXJ0eSA9IChjaG9pY2VJZDogc3RyaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkID0+IHtcbiAgICAgIGZvciAoY29uc3Qgbm9kZSBvZiBub2Rlcykge1xuICAgICAgICBjb25zdCB2biA9IG5vZGUudmVyc2lvbmVkTm9kZTtcbiAgICAgICAgaWYgKCF2biB8fCB2bi5vbmVvZktpbmQgIT09ICd2MScpIGNvbnRpbnVlO1xuICAgICAgICBjb25zdCBudCA9IHZuLnYxLm5vZGVUeXBlO1xuICAgICAgICBpZiAobnQub25lb2ZLaW5kICE9PSAnZXhlcmNpc2UnKSBjb250aW51ZTtcbiAgICAgICAgaWYgKG50LmV4ZXJjaXNlLmNob2ljZUlkICE9PSBjaG9pY2VJZCkgY29udGludWU7XG4gICAgICAgIHJldHVybiBudC5leGVyY2lzZS5hY3RpbmdQYXJ0aWVzWzBdO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9O1xuXG4gICAgLyoqIFVud3JhcHMgYSBEYW1sIG9wdGlvbmFsIChvciBiYXJlKSBwYXJ0eSB2YWx1ZSB0byB0aGUgcGFydHkgc3RyaW5nLiAqL1xuICAgIGNvbnN0IGdldFBhcnR5RnJvbU9wdGlvbmFsID0gKGZpZWxkczogUmVjb3JkRmllbGRbXSwgbGFiZWw6IHN0cmluZyk6IHN0cmluZyB8IHVuZGVmaW5lZCA9PiB7XG4gICAgICBjb25zdCBzdW0gPSBnZXRGaWVsZChmaWVsZHMsIGxhYmVsKTtcbiAgICAgIGlmIChzdW0/Lm9uZW9mS2luZCA9PT0gJ3BhcnR5JykgcmV0dXJuIHN1bS5wYXJ0eSA/PyAnJztcbiAgICAgIGlmIChzdW0/Lm9uZW9mS2luZCA9PT0gJ29wdGlvbmFsJykge1xuICAgICAgICBjb25zdCBpbm5lciA9IHN1bS5vcHRpb25hbC52YWx1ZT8uc3VtO1xuICAgICAgICBpZiAoaW5uZXI/Lm9uZW9mS2luZCA9PT0gJ3BhcnR5JykgcmV0dXJuIGlubmVyLnBhcnR5ID8/ICcnO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9O1xuXG4gICAgLyoqIFJlYWRzIGEgRGFtbCBlbnVtIGNvbnN0cnVjdG9yIG5hbWUgKGUuZy4gQWxsb2NhdGlvblYyIFRyYW5zZmVyU2lkZSBTZW5kZXJTaWRlL1JlY2VpdmVyU2lkZSkuICovXG4gICAgY29uc3QgZ2V0RW51bUNvbnN0cnVjdG9yID0gKGZpZWxkczogUmVjb3JkRmllbGRbXSwgbGFiZWw6IHN0cmluZyk6IHN0cmluZyB8IHVuZGVmaW5lZCA9PiB7XG4gICAgICBjb25zdCBzdW0gPSBnZXRGaWVsZChmaWVsZHMsIGxhYmVsKTtcbiAgICAgIGlmIChzdW0/Lm9uZW9mS2luZCA9PT0gJ2VudW0nKSByZXR1cm4gc3VtLmVudW0uY29uc3RydWN0b3IgPz8gJyc7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBFeHRyYWN0cyBzZW5kZXIsIHJlY2VpdmVyLCBhbW91bnQsIGFuZCBpbnN0cnVtZW50IGZpZWxkcyBmcm9tIGEgdHJhbnNmZXIgcmVjb3JkLlxuICAgICAqIENhbnRvbiBjb2luIHRyYW5zZmVycyBhbmQgY2J0YyB1c2UgaW5zdHJ1bWVudElkLmFkbWluOyByZWd1bGFyIHRva2VuIHRyYW5zZmVycyB1c2UgaW5zdHJ1bWVudElkZW50aWZpZXIuc291cmNlLlxuICAgICAqL1xuICAgIGNvbnN0IGV4dHJhY3RGcm9tVHJhbnNmZXJSZWNvcmQgPSAoXG4gICAgICB0cmFuc2ZlclJlY29yZDogUmVjb3JkRmllbGRbXSxcbiAgICAgIGluc3RydW1lbnRGaWVsZE5hbWU6IHN0cmluZyxcbiAgICAgIGluc3RydW1lbnRBZG1pbkZpZWxkTmFtZTogc3RyaW5nXG4gICAgKTogdm9pZCA9PiB7XG4gICAgICBjb25zdCBzZW5kZXJEYXRhID0gZ2V0RmllbGQodHJhbnNmZXJSZWNvcmQsICdzZW5kZXInKTtcbiAgICAgIGlmIChzZW5kZXJEYXRhPy5vbmVvZktpbmQgPT09ICdwYXJ0eScpIHNlbmRlciA9IHNlbmRlckRhdGEucGFydHkgPz8gJyc7XG4gICAgICBjb25zdCByZWNlaXZlckRhdGEgPSBnZXRGaWVsZCh0cmFuc2ZlclJlY29yZCwgJ3JlY2VpdmVyJyk7XG4gICAgICBpZiAocmVjZWl2ZXJEYXRhPy5vbmVvZktpbmQgPT09ICdwYXJ0eScpIHJlY2VpdmVyID0gcmVjZWl2ZXJEYXRhLnBhcnR5ID8/ICcnO1xuICAgICAgY29uc3QgYW1vdW50RGF0YSA9IGdldEZpZWxkKHRyYW5zZmVyUmVjb3JkLCAnYW1vdW50Jyk7XG4gICAgICBpZiAoYW1vdW50RGF0YT8ub25lb2ZLaW5kID09PSAnbnVtZXJpYycpIGFtb3VudCA9IGFtb3VudERhdGEubnVtZXJpYyA/PyAnJztcbiAgICAgIGNvbnN0IGluc3RydW1lbnRGaWVsZCA9IGdldEZpZWxkKHRyYW5zZmVyUmVjb3JkLCBpbnN0cnVtZW50RmllbGROYW1lKTtcbiAgICAgIGlmIChpbnN0cnVtZW50RmllbGQ/Lm9uZW9mS2luZCA9PT0gJ3JlY29yZCcpIHtcbiAgICAgICAgY29uc3QgaW5zdHJ1bWVudEZpZWxkcyA9IGluc3RydW1lbnRGaWVsZC5yZWNvcmQ/LmZpZWxkcyA/PyBbXTtcbiAgICAgICAgY29uc3QgYWRtaW5EYXRhID0gZ2V0RmllbGQoaW5zdHJ1bWVudEZpZWxkcywgaW5zdHJ1bWVudEFkbWluRmllbGROYW1lKTtcbiAgICAgICAgaWYgKGFkbWluRGF0YT8ub25lb2ZLaW5kID09PSAncGFydHknKSBpbnN0cnVtZW50QWRtaW4gPSBhZG1pbkRhdGEucGFydHkgPz8gJyc7XG4gICAgICAgIGNvbnN0IGlkRGF0YSA9IGdldEZpZWxkKGluc3RydW1lbnRGaWVsZHMsICdpZCcpO1xuICAgICAgICBpZiAoaWREYXRhPy5vbmVvZktpbmQgPT09ICd0ZXh0JykgaW5zdHJ1bWVudElkID0gaWREYXRhLnRleHQgPz8gJyc7XG4gICAgICB9XG4gICAgfTtcblxuICAgIHN3aXRjaCAodHhUeXBlKSB7XG4gICAgICBjYXNlIFRyYW5zYWN0aW9uVHlwZS5PbmVTdGVwUHJlQXBwcm92YWw6IHtcbiAgICAgICAgLy8gQ2FudG9uIGNvaW46IFRyYW5zZmVyUHJlYXBwcm92YWxQcm9wb3NhbCBjcmVhdGUgbm9kZSDihpIgcHJvdmlkZXI9c2VuZGVyLCByZWNlaXZlclxuICAgICAgICBjb25zdCBjb2luRmllbGRzID0gZmluZENyZWF0ZU5vZGVGaWVsZHMoJ1RyYW5zZmVyUHJlYXBwcm92YWxQcm9wb3NhbCcpO1xuICAgICAgICBpZiAoY29pbkZpZWxkcykge1xuICAgICAgICAgIGNvbnN0IHByb3ZpZGVyRGF0YSA9IGdldEZpZWxkKGNvaW5GaWVsZHMsICdwcm92aWRlcicpO1xuICAgICAgICAgIGlmIChwcm92aWRlckRhdGE/Lm9uZW9mS2luZCA9PT0gJ3BhcnR5Jykgc2VuZGVyID0gcHJvdmlkZXJEYXRhLnBhcnR5ID8/ICcnO1xuICAgICAgICAgIGNvbnN0IHJlY2VpdmVyRGF0YSA9IGdldEZpZWxkKGNvaW5GaWVsZHMsICdyZWNlaXZlcicpO1xuICAgICAgICAgIGlmIChyZWNlaXZlckRhdGE/Lm9uZW9mS2luZCA9PT0gJ3BhcnR5JykgcmVjZWl2ZXIgPSByZWNlaXZlckRhdGEucGFydHkgPz8gJyc7XG4gICAgICAgICAgYW1vdW50ID0gJzAnO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIC8vIFRva2VuOiBUcmFuc2ZlclByZWFwcHJvdmFsIGNyZWF0ZSBub2RlIOKGkiBvcGVyYXRvcj1zZW5kZXIsIHJlY2VpdmVyLCBpbnN0cnVtZW50QWRtaW4sIGluc3RydW1lbnRBbGxvd2FuY2VzXG4gICAgICAgIGNvbnN0IHRva2VuRmllbGRzID0gZmluZENyZWF0ZU5vZGVGaWVsZHMoJ1RyYW5zZmVyUHJlYXBwcm92YWwnKTtcbiAgICAgICAgaWYgKHRva2VuRmllbGRzKSB7XG4gICAgICAgICAgY29uc3Qgb3BlcmF0b3JEYXRhID0gZ2V0RmllbGQodG9rZW5GaWVsZHMsICdvcGVyYXRvcicpO1xuICAgICAgICAgIGlmIChvcGVyYXRvckRhdGE/Lm9uZW9mS2luZCA9PT0gJ3BhcnR5Jykgc2VuZGVyID0gb3BlcmF0b3JEYXRhLnBhcnR5ID8/ICcnO1xuICAgICAgICAgIGNvbnN0IHJlY2VpdmVyRGF0YSA9IGdldEZpZWxkKHRva2VuRmllbGRzLCAncmVjZWl2ZXInKTtcbiAgICAgICAgICBpZiAocmVjZWl2ZXJEYXRhPy5vbmVvZktpbmQgPT09ICdwYXJ0eScpIHJlY2VpdmVyID0gcmVjZWl2ZXJEYXRhLnBhcnR5ID8/ICcnO1xuICAgICAgICAgIGFtb3VudCA9ICcwJztcbiAgICAgICAgICBjb25zdCBpbnN0cnVtZW50QWRtaW5EYXRhID0gZ2V0RmllbGQodG9rZW5GaWVsZHMsICdpbnN0cnVtZW50QWRtaW4nKTtcbiAgICAgICAgICBpZiAoaW5zdHJ1bWVudEFkbWluRGF0YT8ub25lb2ZLaW5kID09PSAncGFydHknKSBpbnN0cnVtZW50QWRtaW4gPSBpbnN0cnVtZW50QWRtaW5EYXRhLnBhcnR5ID8/ICcnO1xuICAgICAgICAgIGNvbnN0IGFsbG93YW5jZXNEYXRhID0gZ2V0RmllbGQodG9rZW5GaWVsZHMsICdpbnN0cnVtZW50QWxsb3dhbmNlcycpO1xuICAgICAgICAgIGlmIChhbGxvd2FuY2VzRGF0YT8ub25lb2ZLaW5kID09PSAnbGlzdCcpIHtcbiAgICAgICAgICAgIC8vIGZvciB0aGUgc2FtZSBpbnN0cnVtZW50IGFkbWluLCBpZiBtdWx0aXBsZSB0b2tlbnMgYXJlIHN1cHBvcnRlZCB0aGVuIHdlIGNhbiBlbmFibGUgYWxsIG9mIHRoZW0sXG4gICAgICAgICAgICAvLyBidXQgd2Ugd29uJ3QgYmUgZG9pbmcgdGhhdCBmb3Igbm93XG4gICAgICAgICAgICBjb25zdCBmaXJzdEFsbG93YW5jZSA9IGFsbG93YW5jZXNEYXRhLmxpc3Q/LmVsZW1lbnRzPy5bMF0/LnN1bTtcbiAgICAgICAgICAgIGlmIChmaXJzdEFsbG93YW5jZT8ub25lb2ZLaW5kID09PSAncmVjb3JkJykge1xuICAgICAgICAgICAgICBjb25zdCBhbGxvd2FuY2VGaWVsZHMgPSBmaXJzdEFsbG93YW5jZS5yZWNvcmQ/LmZpZWxkcyA/PyBbXTtcbiAgICAgICAgICAgICAgY29uc3QgaWREYXRhID0gZ2V0RmllbGQoYWxsb3dhbmNlRmllbGRzLCAnaWQnKTtcbiAgICAgICAgICAgICAgaWYgKGlkRGF0YT8ub25lb2ZLaW5kID09PSAndGV4dCcpIGluc3RydW1lbnRJZCA9IGlkRGF0YS50ZXh0ID8/ICcnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgY2FzZSBUcmFuc2FjdGlvblR5cGUuVHJhbnNmZXJBY2NlcHQ6IHtcbiAgICAgICAgLy8gQ2FudG9uIGNvaW46IEFtdWxldCBjcmVhdGUgbm9kZSDihpIgZHNvPXNlbmRlciwgb3duZXI9cmVjZWl2ZXIsIGFtb3VudC5pbml0aWFsQW1vdW50XG4gICAgICAgIGNvbnN0IGFtdWxldEZpZWxkcyA9IGZpbmRDcmVhdGVOb2RlRmllbGRzKCdBbXVsZXQnKTtcbiAgICAgICAgaWYgKGFtdWxldEZpZWxkcykge1xuICAgICAgICAgIGNvbnN0IGRzb0RhdGEgPSBnZXRGaWVsZChhbXVsZXRGaWVsZHMsICdkc28nKTtcbiAgICAgICAgICBpZiAoZHNvRGF0YT8ub25lb2ZLaW5kID09PSAncGFydHknKSBzZW5kZXIgPSBkc29EYXRhLnBhcnR5ID8/ICcnO1xuICAgICAgICAgIGNvbnN0IG93bmVyRGF0YSA9IGdldEZpZWxkKGFtdWxldEZpZWxkcywgJ293bmVyJyk7XG4gICAgICAgICAgaWYgKG93bmVyRGF0YT8ub25lb2ZLaW5kID09PSAncGFydHknKSByZWNlaXZlciA9IG93bmVyRGF0YS5wYXJ0eSA/PyAnJztcbiAgICAgICAgICBjb25zdCBhbW91bnRGaWVsZCA9IGdldEZpZWxkKGFtdWxldEZpZWxkcywgJ2Ftb3VudCcpO1xuICAgICAgICAgIGlmIChhbW91bnRGaWVsZD8ub25lb2ZLaW5kID09PSAncmVjb3JkJykge1xuICAgICAgICAgICAgY29uc3QgaW5pdGlhbEFtb3VudERhdGEgPSBnZXRGaWVsZChhbW91bnRGaWVsZC5yZWNvcmQ/LmZpZWxkcyA/PyBbXSwgJ2luaXRpYWxBbW91bnQnKTtcbiAgICAgICAgICAgIGlmIChpbml0aWFsQW1vdW50RGF0YT8ub25lb2ZLaW5kID09PSAnbnVtZXJpYycpIGFtb3VudCA9IGluaXRpYWxBbW91bnREYXRhLm51bWVyaWMgPz8gJyc7XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIC8vIFJlZ3VsYXIgdG9rZW4gKG5vbi1jYnRjKTogRXhlY3V0ZWRUcmFuc2ZlciBjcmVhdGUgbm9kZVxuICAgICAgICAvLyDihpIgdHJhbnNmZXIue3NlbmRlciwgcmVjZWl2ZXIsIGFtb3VudCwgaW5zdHJ1bWVudElkZW50aWZpZXIue3NvdXJjZT1hZG1pbiwgaWR9fVxuICAgICAgICBjb25zdCBleGVjdXRlZFRyYW5zZmVyRmllbGRzID0gZmluZENyZWF0ZU5vZGVGaWVsZHMoJ0V4ZWN1dGVkVHJhbnNmZXInKTtcbiAgICAgICAgaWYgKGV4ZWN1dGVkVHJhbnNmZXJGaWVsZHMpIHtcbiAgICAgICAgICBjb25zdCB0cmFuc2ZlclN1bSA9IGdldEZpZWxkKGV4ZWN1dGVkVHJhbnNmZXJGaWVsZHMsICd0cmFuc2ZlcicpO1xuICAgICAgICAgIGlmICh0cmFuc2ZlclN1bT8ub25lb2ZLaW5kID09PSAncmVjb3JkJykge1xuICAgICAgICAgICAgZXh0cmFjdEZyb21UcmFuc2ZlclJlY29yZCh0cmFuc2ZlclN1bS5yZWNvcmQ/LmZpZWxkcyA/PyBbXSwgJ2luc3RydW1lbnRJZGVudGlmaWVyJywgJ3NvdXJjZScpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICAvLyBjYnRjIHRva2VuIGZhbGxiYWNrOiBUcmFuc2ZlclJ1bGVfRGlyZWN0VHJhbnNmZXIgZXhlcmNpc2Ugbm9kZVxuICAgICAgICAvLyDihpIgdHJhbnNmZXIue3NlbmRlciwgcmVjZWl2ZXIsIGFtb3VudCwgaW5zdHJ1bWVudElkLnthZG1pbiwgaWR9fVxuICAgICAgICBjb25zdCBkaXJlY3RUcmFuc2ZlckZpZWxkcyA9IGZpbmRFeGVyY2lzZU5vZGVGaWVsZHMoJ1RyYW5zZmVyUnVsZV9EaXJlY3RUcmFuc2ZlcicpO1xuICAgICAgICBpZiAoZGlyZWN0VHJhbnNmZXJGaWVsZHMpIHtcbiAgICAgICAgICBjb25zdCB0cmFuc2ZlclN1bSA9IGdldEZpZWxkKGRpcmVjdFRyYW5zZmVyRmllbGRzLCAndHJhbnNmZXInKTtcbiAgICAgICAgICBpZiAodHJhbnNmZXJTdW0/Lm9uZW9mS2luZCA9PT0gJ3JlY29yZCcpIHtcbiAgICAgICAgICAgIGV4dHJhY3RGcm9tVHJhbnNmZXJSZWNvcmQodHJhbnNmZXJTdW0ucmVjb3JkPy5maWVsZHMgPz8gW10sICdpbnN0cnVtZW50SWQnLCAnYWRtaW4nKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gVVNEQ3gvdHdvLXN0ZXAgdG9rZW4gZmFsbGJhY2s6IFRyYW5zZmVyUnVsZV9Ud29TdGVwVHJhbnNmZXIgZXhlcmNpc2Ugbm9kZVxuICAgICAgICAvLyDihpIgdHJhbnNmZXIue3NlbmRlciwgcmVjZWl2ZXIsIGFtb3VudCwgaW5zdHJ1bWVudElkLnthZG1pbiwgaWR9fVxuICAgICAgICBpZiAoIXNlbmRlcikge1xuICAgICAgICAgIGNvbnN0IHR3b1N0ZXBUcmFuc2ZlckZpZWxkcyA9IGZpbmRFeGVyY2lzZU5vZGVGaWVsZHMoJ1RyYW5zZmVyUnVsZV9Ud29TdGVwVHJhbnNmZXInKTtcbiAgICAgICAgICBpZiAodHdvU3RlcFRyYW5zZmVyRmllbGRzKSB7XG4gICAgICAgICAgICBjb25zdCB0cmFuc2ZlclN1bSA9IGdldEZpZWxkKHR3b1N0ZXBUcmFuc2ZlckZpZWxkcywgJ3RyYW5zZmVyJyk7XG4gICAgICAgICAgICBpZiAodHJhbnNmZXJTdW0/Lm9uZW9mS2luZCA9PT0gJ3JlY29yZCcpIHtcbiAgICAgICAgICAgICAgZXh0cmFjdEZyb21UcmFuc2ZlclJlY29yZCh0cmFuc2ZlclN1bS5yZWNvcmQ/LmZpZWxkcyA/PyBbXSwgJ2luc3RydW1lbnRJZCcsICdhZG1pbicpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgY2FzZSBUcmFuc2FjdGlvblR5cGUuVHJhbnNmZXJSZWplY3Q6IHtcbiAgICAgICAgLy8gQ2FudG9uIGNvaW46IEFtdWxldCBjcmVhdGUgbm9kZSDihpIgZHNvPXNlbmRlciwgb3duZXI9cmVjZWl2ZXIsIGFtb3VudC5pbml0aWFsQW1vdW50XG4gICAgICAgIGNvbnN0IGFtdWxldEZpZWxkcyA9IGZpbmRDcmVhdGVOb2RlRmllbGRzKCdBbXVsZXQnKTtcbiAgICAgICAgaWYgKGFtdWxldEZpZWxkcykge1xuICAgICAgICAgIGNvbnN0IGRzb0RhdGEgPSBnZXRGaWVsZChhbXVsZXRGaWVsZHMsICdkc28nKTtcbiAgICAgICAgICBpZiAoZHNvRGF0YT8ub25lb2ZLaW5kID09PSAncGFydHknKSBzZW5kZXIgPSBkc29EYXRhLnBhcnR5ID8/ICcnO1xuICAgICAgICAgIGNvbnN0IG93bmVyRGF0YSA9IGdldEZpZWxkKGFtdWxldEZpZWxkcywgJ293bmVyJyk7XG4gICAgICAgICAgaWYgKG93bmVyRGF0YT8ub25lb2ZLaW5kID09PSAncGFydHknKSByZWNlaXZlciA9IG93bmVyRGF0YS5wYXJ0eSA/PyAnJztcbiAgICAgICAgICBjb25zdCBhbW91bnRGaWVsZCA9IGdldEZpZWxkKGFtdWxldEZpZWxkcywgJ2Ftb3VudCcpO1xuICAgICAgICAgIGlmIChhbW91bnRGaWVsZD8ub25lb2ZLaW5kID09PSAncmVjb3JkJykge1xuICAgICAgICAgICAgY29uc3QgaW5pdGlhbEFtb3VudERhdGEgPSBnZXRGaWVsZChhbW91bnRGaWVsZC5yZWNvcmQ/LmZpZWxkcyA/PyBbXSwgJ2luaXRpYWxBbW91bnQnKTtcbiAgICAgICAgICAgIGlmIChpbml0aWFsQW1vdW50RGF0YT8ub25lb2ZLaW5kID09PSAnbnVtZXJpYycpIGFtb3VudCA9IGluaXRpYWxBbW91bnREYXRhLm51bWVyaWMgPz8gJyc7XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIC8vIFJlZ3VsYXIgdG9rZW4gKG5vbi1jYnRjKTogUmVqZWN0ZWRUcmFuc2ZlciBjcmVhdGUgbm9kZVxuICAgICAgICAvLyDihpIgdHJhbnNmZXIue3NlbmRlciwgcmVjZWl2ZXIsIGFtb3VudCwgaW5zdHJ1bWVudElkZW50aWZpZXIue3NvdXJjZT1hZG1pbiwgaWR9fVxuICAgICAgICBjb25zdCByZWplY3RlZFRyYW5zZmVyRmllbGRzID0gZmluZENyZWF0ZU5vZGVGaWVsZHMoJ1JlamVjdGVkVHJhbnNmZXInKTtcbiAgICAgICAgaWYgKHJlamVjdGVkVHJhbnNmZXJGaWVsZHMpIHtcbiAgICAgICAgICBjb25zdCB0cmFuc2ZlclN1bSA9IGdldEZpZWxkKHJlamVjdGVkVHJhbnNmZXJGaWVsZHMsICd0cmFuc2ZlcicpO1xuICAgICAgICAgIGlmICh0cmFuc2ZlclN1bT8ub25lb2ZLaW5kID09PSAncmVjb3JkJykge1xuICAgICAgICAgICAgZXh0cmFjdEZyb21UcmFuc2ZlclJlY29yZCh0cmFuc2ZlclN1bS5yZWNvcmQ/LmZpZWxkcyA/PyBbXSwgJ2luc3RydW1lbnRJZGVudGlmaWVyJywgJ3NvdXJjZScpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICAvLyBjYnRjIHRva2VuIGZhbGxiYWNrOiBIb2xkaW5nIGNyZWF0ZSBub2RlIChvd25lcj1zZW5kZXIsIGluc3RydW1lbnQsIGFtb3VudClcbiAgICAgICAgLy8gKyBUcmFuc2Zlckluc3RydWN0aW9uX1JlamVjdCBleGVyY2lzZSAoYWN0aW5nUGFydGllc1swXT1yZWNlaXZlciB3aG8gcmVqZWN0ZWQpXG4gICAgICAgIGNvbnN0IGhvbGRpbmdGaWVsZHMgPSBmaW5kQ3JlYXRlTm9kZUZpZWxkcygnSG9sZGluZycpO1xuICAgICAgICBpZiAoaG9sZGluZ0ZpZWxkcykge1xuICAgICAgICAgIGNvbnN0IG93bmVyRGF0YSA9IGdldEZpZWxkKGhvbGRpbmdGaWVsZHMsICdvd25lcicpO1xuICAgICAgICAgIGlmIChvd25lckRhdGE/Lm9uZW9mS2luZCA9PT0gJ3BhcnR5Jykgc2VuZGVyID0gb3duZXJEYXRhLnBhcnR5ID8/ICcnO1xuICAgICAgICAgIGNvbnN0IGFtb3VudERhdGEgPSBnZXRGaWVsZChob2xkaW5nRmllbGRzLCAnYW1vdW50Jyk7XG4gICAgICAgICAgaWYgKGFtb3VudERhdGE/Lm9uZW9mS2luZCA9PT0gJ251bWVyaWMnKSBhbW91bnQgPSBhbW91bnREYXRhLm51bWVyaWMgPz8gJyc7XG4gICAgICAgICAgY29uc3QgaW5zdHJ1bWVudERhdGEgPSBnZXRGaWVsZChob2xkaW5nRmllbGRzLCAnaW5zdHJ1bWVudCcpO1xuICAgICAgICAgIGlmIChpbnN0cnVtZW50RGF0YT8ub25lb2ZLaW5kID09PSAncmVjb3JkJykge1xuICAgICAgICAgICAgY29uc3QgaW5zdHJ1bWVudEZpZWxkcyA9IGluc3RydW1lbnREYXRhLnJlY29yZD8uZmllbGRzID8/IFtdO1xuICAgICAgICAgICAgY29uc3Qgc291cmNlRGF0YSA9IGdldEZpZWxkKGluc3RydW1lbnRGaWVsZHMsICdzb3VyY2UnKTtcbiAgICAgICAgICAgIGlmIChzb3VyY2VEYXRhPy5vbmVvZktpbmQgPT09ICdwYXJ0eScpIGluc3RydW1lbnRBZG1pbiA9IHNvdXJjZURhdGEucGFydHkgPz8gJyc7XG4gICAgICAgICAgICBjb25zdCBpZERhdGEgPSBnZXRGaWVsZChpbnN0cnVtZW50RmllbGRzLCAnaWQnKTtcbiAgICAgICAgICAgIGlmIChpZERhdGE/Lm9uZW9mS2luZCA9PT0gJ3RleHQnKSBpbnN0cnVtZW50SWQgPSBpZERhdGEudGV4dCA/PyAnJztcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3QgcmVjZWl2ZXJQYXJ0eSA9IGZpbmRFeGVyY2lzZUFjdGluZ1BhcnR5KCdUcmFuc2Zlckluc3RydWN0aW9uX1JlamVjdCcpO1xuICAgICAgICAgIGlmIChyZWNlaXZlclBhcnR5KSByZWNlaXZlciA9IHJlY2VpdmVyUGFydHk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIGNhc2UgVHJhbnNhY3Rpb25UeXBlLkFsbG9jYXRpb25BbGxvY2F0ZVdpdGhkcmF3bjoge1xuICAgICAgICAvLyBIb2xkaW5nIGNyZWF0ZSBub2RlIOKGkiBvd25lcj1zZW5kZXI9cmVjZWl2ZXIgKGFsbG9jYXRpbmcgcGFydHkgZ2V0cyB0aGVpciBob2xkaW5nIGJhY2spLFxuICAgICAgICAvLyBpbnN0cnVtZW50Lntzb3VyY2U9YWRtaW4sIGlkfSwgYW1vdW50XG4gICAgICAgIGNvbnN0IGhvbGRpbmdGaWVsZHMgPSBmaW5kQ3JlYXRlTm9kZUZpZWxkcygnSG9sZGluZycpO1xuICAgICAgICBpZiAoaG9sZGluZ0ZpZWxkcykge1xuICAgICAgICAgIGNvbnN0IG93bmVyRGF0YSA9IGdldEZpZWxkKGhvbGRpbmdGaWVsZHMsICdvd25lcicpO1xuICAgICAgICAgIGlmIChvd25lckRhdGE/Lm9uZW9mS2luZCA9PT0gJ3BhcnR5Jykge1xuICAgICAgICAgICAgcmVjZWl2ZXIgPSBvd25lckRhdGEucGFydHkgPz8gJyc7XG4gICAgICAgICAgICBzZW5kZXIgPSByZWNlaXZlcjtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3QgYW1vdW50RGF0YSA9IGdldEZpZWxkKGhvbGRpbmdGaWVsZHMsICdhbW91bnQnKTtcbiAgICAgICAgICBpZiAoYW1vdW50RGF0YT8ub25lb2ZLaW5kID09PSAnbnVtZXJpYycpIGFtb3VudCA9IGFtb3VudERhdGEubnVtZXJpYyA/PyAnJztcbiAgICAgICAgICBjb25zdCBpbnN0cnVtZW50RGF0YSA9IGdldEZpZWxkKGhvbGRpbmdGaWVsZHMsICdpbnN0cnVtZW50Jyk7XG4gICAgICAgICAgaWYgKGluc3RydW1lbnREYXRhPy5vbmVvZktpbmQgPT09ICdyZWNvcmQnKSB7XG4gICAgICAgICAgICBjb25zdCBpbnN0cnVtZW50RmllbGRzID0gaW5zdHJ1bWVudERhdGEucmVjb3JkPy5maWVsZHMgPz8gW107XG4gICAgICAgICAgICBjb25zdCBzb3VyY2VEYXRhID0gZ2V0RmllbGQoaW5zdHJ1bWVudEZpZWxkcywgJ3NvdXJjZScpO1xuICAgICAgICAgICAgaWYgKHNvdXJjZURhdGE/Lm9uZW9mS2luZCA9PT0gJ3BhcnR5JykgaW5zdHJ1bWVudEFkbWluID0gc291cmNlRGF0YS5wYXJ0eSA/PyAnJztcbiAgICAgICAgICAgIGNvbnN0IGlkRGF0YSA9IGdldEZpZWxkKGluc3RydW1lbnRGaWVsZHMsICdpZCcpO1xuICAgICAgICAgICAgaWYgKGlkRGF0YT8ub25lb2ZLaW5kID09PSAndGV4dCcpIGluc3RydW1lbnRJZCA9IGlkRGF0YS50ZXh0ID8/ICcnO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgY2FzZSBUcmFuc2FjdGlvblR5cGUuQWxsb2NhdGlvbkFsbG9jYXRlOiB7XG4gICAgICAgIC8vIFYyIChhbGxvY2F0aW9uLWluc3RydWN0aW9uLXYyKTogQWxsb2NhdGlvblYyIGNyZWF0ZSBub2RlXG4gICAgICAgIC8vIOKGkiBhbGxvY2F0aW9uLnthdXRob3JpemVyLm93bmVyLCBhZG1pbiwgdHJhbnNmZXJMZWdTaWRlc1tdLntzaWRlLCBvdGhlcnNpZGUub3duZXIsIGFtb3VudCwgaW5zdHJ1bWVudElkfX0uXG4gICAgICAgIC8vIFRoZSBhdXRob3JpemVyIGlzIHRoZSBhbGxvY2F0aW5nIHBhcnR5OyBpdHMgb3V0Z29pbmcgbGVnIChzaWRlPVNlbmRlclNpZGUpIGNhcnJpZXMgdGhlXG4gICAgICAgIC8vIHNldHRsZW1lbnQgY291bnRlcnBhcnR5IChyZWNlaXZlcikgYW5kIGFtb3VudC4gQSByZWNlaXZlci1vbmx5IGFsbG9jYXRpb24gaGFzIG5vXG4gICAgICAgIC8vIFNlbmRlclNpZGUgbGVnIOKAlCB0aGUgYXV0aG9yaXplciByZWNlaXZlcywgc28gc2VuZGVyL3JlY2VpdmVyIGZsaXAgdG8gdGhlIG90aGVyc2lkZSBvZlxuICAgICAgICAvLyBpdHMgKGZpcnN0KSBSZWNlaXZlclNpZGUgbGVnLiBUaGUgZmlyc3QgbWF0Y2hpbmcgbGVnIHdpbnMgZm9yIG11bHRpLWxlZyBhbGxvY2F0aW9ucy5cbiAgICAgICAgY29uc3QgYWxsb2NhdGlvblYyRmllbGRzID0gZmluZENyZWF0ZU5vZGVGaWVsZHMoJ0FsbG9jYXRpb25WMicpO1xuICAgICAgICBpZiAoYWxsb2NhdGlvblYyRmllbGRzKSB7XG4gICAgICAgICAgY29uc3QgYWxsb2NhdGlvbkZpZWxkID0gZ2V0RmllbGQoYWxsb2NhdGlvblYyRmllbGRzLCAnYWxsb2NhdGlvbicpO1xuICAgICAgICAgIGlmIChhbGxvY2F0aW9uRmllbGQ/Lm9uZW9mS2luZCA9PT0gJ3JlY29yZCcpIHtcbiAgICAgICAgICAgIGNvbnN0IGFsbG9jYXRpb25SZWNvcmQgPSBhbGxvY2F0aW9uRmllbGQucmVjb3JkPy5maWVsZHMgPz8gW107XG4gICAgICAgICAgICBjb25zdCBhdXRob3JpemVyID0gZ2V0RmllbGQoYWxsb2NhdGlvblJlY29yZCwgJ2F1dGhvcml6ZXInKTtcbiAgICAgICAgICAgIGNvbnN0IGF1dGhvcml6ZXJPd25lciA9XG4gICAgICAgICAgICAgIGF1dGhvcml6ZXI/Lm9uZW9mS2luZCA9PT0gJ3JlY29yZCdcbiAgICAgICAgICAgICAgICA/IGdldFBhcnR5RnJvbU9wdGlvbmFsKGF1dGhvcml6ZXIucmVjb3JkPy5maWVsZHMgPz8gW10sICdvd25lcicpXG4gICAgICAgICAgICAgICAgOiB1bmRlZmluZWQ7XG4gICAgICAgICAgICBjb25zdCBhZG1pbkRhdGEgPSBnZXRGaWVsZChhbGxvY2F0aW9uUmVjb3JkLCAnYWRtaW4nKTtcbiAgICAgICAgICAgIGlmIChhZG1pbkRhdGE/Lm9uZW9mS2luZCA9PT0gJ3BhcnR5JykgaW5zdHJ1bWVudEFkbWluID0gYWRtaW5EYXRhLnBhcnR5ID8/ICcnO1xuICAgICAgICAgICAgY29uc3QgbGVnc0RhdGEgPSBnZXRGaWVsZChhbGxvY2F0aW9uUmVjb3JkLCAndHJhbnNmZXJMZWdTaWRlcycpO1xuICAgICAgICAgICAgaWYgKGxlZ3NEYXRhPy5vbmVvZktpbmQgPT09ICdsaXN0Jykge1xuICAgICAgICAgICAgICBjb25zdCBsZWdSZWNvcmRzID0gKGxlZ3NEYXRhLmxpc3Q/LmVsZW1lbnRzID8/IFtdKVxuICAgICAgICAgICAgICAgIC5tYXAoKGxlZykgPT4gKGxlZy5zdW0ub25lb2ZLaW5kID09PSAncmVjb3JkJyA/IGxlZy5zdW0ucmVjb3JkLmZpZWxkcyA6IHVuZGVmaW5lZCkpXG4gICAgICAgICAgICAgICAgLmZpbHRlcigoZmllbGRzKTogZmllbGRzIGlzIFJlY29yZEZpZWxkW10gPT4gZmllbGRzICE9PSB1bmRlZmluZWQpO1xuICAgICAgICAgICAgICBjb25zdCBzZW5kZXJMZWcgPSBsZWdSZWNvcmRzLmZpbmQoKGxlZykgPT4gZ2V0RW51bUNvbnN0cnVjdG9yKGxlZywgJ3NpZGUnKSA9PT0gJ1NlbmRlclNpZGUnKTtcbiAgICAgICAgICAgICAgY29uc3QgbGVnID0gc2VuZGVyTGVnID8/IGxlZ1JlY29yZHMuZmluZCgobGVnKSA9PiBnZXRFbnVtQ29uc3RydWN0b3IobGVnLCAnc2lkZScpID09PSAnUmVjZWl2ZXJTaWRlJyk7XG4gICAgICAgICAgICAgIGlmIChsZWcpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBsZWdPdGhlcnNpZGUgPSBnZXRGaWVsZChsZWcsICdvdGhlcnNpZGUnKTtcbiAgICAgICAgICAgICAgICBjb25zdCBvdGhlcnNpZGVPd25lciA9XG4gICAgICAgICAgICAgICAgICBsZWdPdGhlcnNpZGU/Lm9uZW9mS2luZCA9PT0gJ3JlY29yZCdcbiAgICAgICAgICAgICAgICAgICAgPyBnZXRQYXJ0eUZyb21PcHRpb25hbChsZWdPdGhlcnNpZGUucmVjb3JkPy5maWVsZHMgPz8gW10sICdvd25lcicpXG4gICAgICAgICAgICAgICAgICAgIDogdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIGNvbnN0IGxlZ0Ftb3VudCA9IGdldEZpZWxkKGxlZywgJ2Ftb3VudCcpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGxlZ0luc3RydW1lbnRJZCA9IGdldEZpZWxkKGxlZywgJ2luc3RydW1lbnRJZCcpO1xuICAgICAgICAgICAgICAgIGlmIChzZW5kZXJMZWcpIHtcbiAgICAgICAgICAgICAgICAgIHNlbmRlciA9IGF1dGhvcml6ZXJPd25lciA/PyAnJztcbiAgICAgICAgICAgICAgICAgIHJlY2VpdmVyID0gb3RoZXJzaWRlT3duZXIgPz8gJyc7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIHNlbmRlciA9IG90aGVyc2lkZU93bmVyID8/ICcnO1xuICAgICAgICAgICAgICAgICAgcmVjZWl2ZXIgPSBhdXRob3JpemVyT3duZXIgPz8gJyc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChsZWdBbW91bnQ/Lm9uZW9mS2luZCA9PT0gJ251bWVyaWMnKSBhbW91bnQgPSBsZWdBbW91bnQubnVtZXJpYyA/PyAnJztcbiAgICAgICAgICAgICAgICBpZiAobGVnSW5zdHJ1bWVudElkPy5vbmVvZktpbmQgPT09ICd0ZXh0JykgaW5zdHJ1bWVudElkID0gbGVnSW5zdHJ1bWVudElkLnRleHQgPz8gJyc7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gRHZwTGVnQWxsb2NhdGlvbiBjcmVhdGUgbm9kZSDihpIgYWxsb2NhdGlvbi50cmFuc2ZlckxlZyBjb250YWlucyB0aGUgZnVsbCBzZXR0bGVtZW50IHRyYW5zZmVyIGRldGFpbHM6XG4gICAgICAgIC8vIHNlbmRlciwgcmVjZWl2ZXIgKHRoZSBhY3R1YWwgc2V0dGxlbWVudCBjb3VudGVycGFydHkpLCBhbW91bnQsIGFuZCBpbnN0cnVtZW50SWQuXG4gICAgICAgIC8vIE5hdGl2ZSBDYW50b24gQ29pbiAoQW11bGV0KSBhbGxvY2F0aW9ucyBjcmVhdGUgYW4gQW11bGV0QWxsb2NhdGlvbiBpbnN0ZWFkLCB3aXRoIHRoZSBpZGVudGljYWxcbiAgICAgICAgLy8gYGFsbG9jYXRpb25gIHJlY29yZCAoQW11bGV0QWxsb2NhdGlvbiBhbHNvIGNhcnJpZXMgbG9ja2VkQW11bGV0IGFuZCBleHBpcmVzQXQpLlxuICAgICAgICBjb25zdCBkdnBGaWVsZHMgPSBmaW5kQ3JlYXRlTm9kZUZpZWxkcygnRHZwTGVnQWxsb2NhdGlvbicpID8/IGZpbmRDcmVhdGVOb2RlRmllbGRzKCdBbXVsZXRBbGxvY2F0aW9uJyk7XG4gICAgICAgIGlmIChkdnBGaWVsZHMpIHtcbiAgICAgICAgICBjb25zdCBhbGxvY2F0aW9uRmllbGQgPSBnZXRGaWVsZChkdnBGaWVsZHMsICdhbGxvY2F0aW9uJyk7XG4gICAgICAgICAgaWYgKGFsbG9jYXRpb25GaWVsZD8ub25lb2ZLaW5kID09PSAncmVjb3JkJykge1xuICAgICAgICAgICAgY29uc3QgYWxsb2NhdGlvbkZpZWxkcyA9IGFsbG9jYXRpb25GaWVsZC5yZWNvcmQ/LmZpZWxkcyA/PyBbXTtcbiAgICAgICAgICAgIGNvbnN0IHRyYW5zZmVyTGVnRmllbGQgPSBnZXRGaWVsZChhbGxvY2F0aW9uRmllbGRzLCAndHJhbnNmZXJMZWcnKTtcbiAgICAgICAgICAgIGlmICh0cmFuc2ZlckxlZ0ZpZWxkPy5vbmVvZktpbmQgPT09ICdyZWNvcmQnKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHRyYW5zZmVyTGVnRmllbGRzID0gdHJhbnNmZXJMZWdGaWVsZC5yZWNvcmQ/LmZpZWxkcyA/PyBbXTtcbiAgICAgICAgICAgICAgY29uc3Qgc2VuZGVyRGF0YSA9IGdldEZpZWxkKHRyYW5zZmVyTGVnRmllbGRzLCAnc2VuZGVyJyk7XG4gICAgICAgICAgICAgIGlmIChzZW5kZXJEYXRhPy5vbmVvZktpbmQgPT09ICdwYXJ0eScpIHNlbmRlciA9IHNlbmRlckRhdGEucGFydHkgPz8gJyc7XG4gICAgICAgICAgICAgIGNvbnN0IHJlY2VpdmVyRGF0YSA9IGdldEZpZWxkKHRyYW5zZmVyTGVnRmllbGRzLCAncmVjZWl2ZXInKTtcbiAgICAgICAgICAgICAgaWYgKHJlY2VpdmVyRGF0YT8ub25lb2ZLaW5kID09PSAncGFydHknKSByZWNlaXZlciA9IHJlY2VpdmVyRGF0YS5wYXJ0eSA/PyAnJztcbiAgICAgICAgICAgICAgY29uc3QgYW1vdW50RGF0YSA9IGdldEZpZWxkKHRyYW5zZmVyTGVnRmllbGRzLCAnYW1vdW50Jyk7XG4gICAgICAgICAgICAgIGlmIChhbW91bnREYXRhPy5vbmVvZktpbmQgPT09ICdudW1lcmljJykgYW1vdW50ID0gYW1vdW50RGF0YS5udW1lcmljID8/ICcnO1xuICAgICAgICAgICAgICBjb25zdCBpbnN0cnVtZW50SWRGaWVsZCA9IGdldEZpZWxkKHRyYW5zZmVyTGVnRmllbGRzLCAnaW5zdHJ1bWVudElkJyk7XG4gICAgICAgICAgICAgIGlmIChpbnN0cnVtZW50SWRGaWVsZD8ub25lb2ZLaW5kID09PSAncmVjb3JkJykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGluc3RydW1lbnRJZEZpZWxkcyA9IGluc3RydW1lbnRJZEZpZWxkLnJlY29yZD8uZmllbGRzID8/IFtdO1xuICAgICAgICAgICAgICAgIGNvbnN0IGFkbWluRGF0YSA9IGdldEZpZWxkKGluc3RydW1lbnRJZEZpZWxkcywgJ2FkbWluJyk7XG4gICAgICAgICAgICAgICAgaWYgKGFkbWluRGF0YT8ub25lb2ZLaW5kID09PSAncGFydHknKSBpbnN0cnVtZW50QWRtaW4gPSBhZG1pbkRhdGEucGFydHkgPz8gJyc7XG4gICAgICAgICAgICAgICAgY29uc3QgaWREYXRhID0gZ2V0RmllbGQoaW5zdHJ1bWVudElkRmllbGRzLCAnaWQnKTtcbiAgICAgICAgICAgICAgICBpZiAoaWREYXRhPy5vbmVvZktpbmQgPT09ICd0ZXh0JykgaW5zdHJ1bWVudElkID0gaWREYXRhLnRleHQgPz8gJyc7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gRmFsbGJhY2s6IGlmIER2cExlZ0FsbG9jYXRpb24gaXMgYWJzZW50LCB1c2UgdGhlIG9wZXJhdG9yIGFzIHJlY2VpdmVyXG4gICAgICAgIGlmICghcmVjZWl2ZXIpIHtcbiAgICAgICAgICBjb25zdCBhbGxvY2F0ZUZpZWxkcyA9IGZpbmRFeGVyY2lzZU5vZGVGaWVsZHMoJ0FsbG9jYXRpb25GYWN0b3J5X0FsbG9jYXRlJyk7XG4gICAgICAgICAgaWYgKGFsbG9jYXRlRmllbGRzKSB7XG4gICAgICAgICAgICBjb25zdCBhZG1pbkRhdGEgPSBnZXRGaWVsZChhbGxvY2F0ZUZpZWxkcywgJ2V4cGVjdGVkQWRtaW4nKTtcbiAgICAgICAgICAgIGlmIChhZG1pbkRhdGE/Lm9uZW9mS2luZCA9PT0gJ3BhcnR5JykgcmVjZWl2ZXIgPSBhZG1pbkRhdGEucGFydHkgPz8gJyc7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICghc2VuZGVyKSB7XG4gICAgICAgICAgY29uc3Qgc2VuZGVyUGFydHkgPSBmaW5kRXhlcmNpc2VBY3RpbmdQYXJ0eSgnQWxsb2NhdGlvbkZhY3RvcnlfQWxsb2NhdGUnKTtcbiAgICAgICAgICBpZiAoc2VuZGVyUGFydHkpIHNlbmRlciA9IHNlbmRlclBhcnR5O1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBjYXNlIFRyYW5zYWN0aW9uVHlwZS5BbGxvY2F0aW9uUmVqZWN0OiB7XG4gICAgICAgIC8vIFJlamVjdGVkRHZwIGNyZWF0ZSBub2RlIOKGkiBkdnAue3NlbGxlcj1zZW5kZXIsIGJ1eWVyPXJlY2VpdmVyLCB0ZXJtcy5kZWxpdmVyaWVzWzBdLnthbW91bnQsIGluc3RydW1lbnQue2FkbWluLCBpZH19fVxuICAgICAgICBjb25zdCByZWplY3RlZER2cEZpZWxkcyA9IGZpbmRDcmVhdGVOb2RlRmllbGRzKCdSZWplY3RlZER2cCcpO1xuICAgICAgICBpZiAocmVqZWN0ZWREdnBGaWVsZHMpIHtcbiAgICAgICAgICBjb25zdCBkdnBGaWVsZCA9IGdldEZpZWxkKHJlamVjdGVkRHZwRmllbGRzLCAnZHZwJyk7XG4gICAgICAgICAgaWYgKGR2cEZpZWxkPy5vbmVvZktpbmQgPT09ICdyZWNvcmQnKSB7XG4gICAgICAgICAgICBjb25zdCBkdnBGaWVsZHMgPSBkdnBGaWVsZC5yZWNvcmQ/LmZpZWxkcyA/PyBbXTtcbiAgICAgICAgICAgIGNvbnN0IHNlbGxlckRhdGEgPSBnZXRGaWVsZChkdnBGaWVsZHMsICdzZWxsZXInKTtcbiAgICAgICAgICAgIGlmIChzZWxsZXJEYXRhPy5vbmVvZktpbmQgPT09ICdwYXJ0eScpIHNlbmRlciA9IHNlbGxlckRhdGEucGFydHkgPz8gJyc7XG4gICAgICAgICAgICBjb25zdCBidXllckRhdGEgPSBnZXRGaWVsZChkdnBGaWVsZHMsICdidXllcicpO1xuICAgICAgICAgICAgaWYgKGJ1eWVyRGF0YT8ub25lb2ZLaW5kID09PSAncGFydHknKSByZWNlaXZlciA9IGJ1eWVyRGF0YS5wYXJ0eSA/PyAnJztcbiAgICAgICAgICAgIGNvbnN0IHRlcm1zRmllbGQgPSBnZXRGaWVsZChkdnBGaWVsZHMsICd0ZXJtcycpO1xuICAgICAgICAgICAgaWYgKHRlcm1zRmllbGQ/Lm9uZW9mS2luZCA9PT0gJ3JlY29yZCcpIHtcbiAgICAgICAgICAgICAgY29uc3QgdGVybXNGaWVsZHMgPSB0ZXJtc0ZpZWxkLnJlY29yZD8uZmllbGRzID8/IFtdO1xuICAgICAgICAgICAgICBjb25zdCBkZWxpdmVyaWVzRmllbGQgPSBnZXRGaWVsZCh0ZXJtc0ZpZWxkcywgJ2RlbGl2ZXJpZXMnKTtcbiAgICAgICAgICAgICAgaWYgKGRlbGl2ZXJpZXNGaWVsZD8ub25lb2ZLaW5kID09PSAnbGlzdCcpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBmaXJzdERlbGl2ZXJ5ID0gZGVsaXZlcmllc0ZpZWxkLmxpc3Q/LmVsZW1lbnRzPy5bMF0/LnN1bTtcbiAgICAgICAgICAgICAgICBpZiAoZmlyc3REZWxpdmVyeT8ub25lb2ZLaW5kID09PSAncmVjb3JkJykge1xuICAgICAgICAgICAgICAgICAgY29uc3QgZGVsaXZlcnlGaWVsZHMgPSBmaXJzdERlbGl2ZXJ5LnJlY29yZD8uZmllbGRzID8/IFtdO1xuICAgICAgICAgICAgICAgICAgY29uc3QgYW1vdW50RGF0YSA9IGdldEZpZWxkKGRlbGl2ZXJ5RmllbGRzLCAnYW1vdW50Jyk7XG4gICAgICAgICAgICAgICAgICBpZiAoYW1vdW50RGF0YT8ub25lb2ZLaW5kID09PSAnbnVtZXJpYycpIGFtb3VudCA9IGFtb3VudERhdGEubnVtZXJpYyA/PyAnJztcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGluc3RydW1lbnRGaWVsZCA9IGdldEZpZWxkKGRlbGl2ZXJ5RmllbGRzLCAnaW5zdHJ1bWVudCcpO1xuICAgICAgICAgICAgICAgICAgaWYgKGluc3RydW1lbnRGaWVsZD8ub25lb2ZLaW5kID09PSAncmVjb3JkJykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBpbnN0cnVtZW50RmllbGRzID0gaW5zdHJ1bWVudEZpZWxkLnJlY29yZD8uZmllbGRzID8/IFtdO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBhZG1pbkRhdGEgPSBnZXRGaWVsZChpbnN0cnVtZW50RmllbGRzLCAnYWRtaW4nKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGFkbWluRGF0YT8ub25lb2ZLaW5kID09PSAncGFydHknKSBpbnN0cnVtZW50QWRtaW4gPSBhZG1pbkRhdGEucGFydHkgPz8gJyc7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGlkRGF0YSA9IGdldEZpZWxkKGluc3RydW1lbnRGaWVsZHMsICdpZCcpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoaWREYXRhPy5vbmVvZktpbmQgPT09ICd0ZXh0JykgaW5zdHJ1bWVudElkID0gaWREYXRhLnRleHQgPz8gJyc7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBjYXNlIFRyYW5zYWN0aW9uVHlwZS5Db3NpZ25EZWxlZ2F0aW9uQWNjZXB0OiB7XG4gICAgICAgIC8vIFRyYWRlV2ViOiBDb3NpZ25pbmdEZWxlZ2F0aW9uUHJvcG9zYWxfQWNjZXB0OyBUZW1wbGU6IEFjY2VwdERlbGVnYXRpb25Qcm9wb3NhbC5cbiAgICAgICAgY29uc3Qgc2lnbmVyUGFydHkgPVxuICAgICAgICAgIGZpbmRFeGVyY2lzZUFjdGluZ1BhcnR5KCdDb3NpZ25pbmdEZWxlZ2F0aW9uUHJvcG9zYWxfQWNjZXB0JykgPz9cbiAgICAgICAgICBmaW5kRXhlcmNpc2VBY3RpbmdQYXJ0eSgnQWNjZXB0RGVsZWdhdGlvblByb3Bvc2FsJyk7XG4gICAgICAgIGlmIChzaWduZXJQYXJ0eSkgc2VuZGVyID0gc2lnbmVyUGFydHk7XG5cbiAgICAgICAgLy8gVHJhZGVXZWIgY3JlYXRlcyBDb3NpZ25pbmdEZWxlZ2F0aW9uIHsgYWRtaW4sIHNpZ25lciB9OyBUZW1wbGUgY3JlYXRlc1xuICAgICAgICAvLyBEZWxlZ2F0aW9uIHsgb3BlcmF0b3IsIHVzZXIgfSBmcm9tIHRoZSBzYW1lIGFjY2VwdGFuY2Ugb3BlcmF0aW9uLlxuICAgICAgICBjb25zdCBkZWxlZ2F0aW9uRmllbGRzID0gZmluZENyZWF0ZU5vZGVGaWVsZHMoJ0Nvc2lnbmluZ0RlbGVnYXRpb24nKSA/PyBmaW5kQ3JlYXRlTm9kZUZpZWxkcygnRGVsZWdhdGlvbicpO1xuICAgICAgICBpZiAoZGVsZWdhdGlvbkZpZWxkcykge1xuICAgICAgICAgIGNvbnN0IGFkbWluRGF0YSA9IGdldEZpZWxkKGRlbGVnYXRpb25GaWVsZHMsICdhZG1pbicpID8/IGdldEZpZWxkKGRlbGVnYXRpb25GaWVsZHMsICdvcGVyYXRvcicpO1xuICAgICAgICAgIGlmIChhZG1pbkRhdGE/Lm9uZW9mS2luZCA9PT0gJ3BhcnR5JykgcmVjZWl2ZXIgPSBhZG1pbkRhdGEucGFydHkgPz8gJyc7XG4gICAgICAgIH1cbiAgICAgICAgYW1vdW50ID0gJzAnO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgY2FzZSBUcmFuc2FjdGlvblR5cGUuVHJhbnNmZXJPZmZlcldpdGhkcmF3bjoge1xuICAgICAgICAvLyBDYW50b24gY29pbjogQW11bGV0IGNyZWF0ZSBub2RlIOKGkiBvd25lcj1zZW5kZXI9cmVjZWl2ZXIsIGFtb3VudC5pbml0aWFsQW1vdW50XG4gICAgICAgIGNvbnN0IGFtdWxldEZpZWxkcyA9IGZpbmRDcmVhdGVOb2RlRmllbGRzKCdBbXVsZXQnKTtcbiAgICAgICAgaWYgKGFtdWxldEZpZWxkcykge1xuICAgICAgICAgIGNvbnN0IG93bmVyRGF0YSA9IGdldEZpZWxkKGFtdWxldEZpZWxkcywgJ293bmVyJyk7XG4gICAgICAgICAgaWYgKG93bmVyRGF0YT8ub25lb2ZLaW5kID09PSAncGFydHknKSB7XG4gICAgICAgICAgICByZWNlaXZlciA9IG93bmVyRGF0YS5wYXJ0eSA/PyAnJztcbiAgICAgICAgICAgIHNlbmRlciA9IHJlY2VpdmVyO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCBhbW91bnRGaWVsZCA9IGdldEZpZWxkKGFtdWxldEZpZWxkcywgJ2Ftb3VudCcpO1xuICAgICAgICAgIGlmIChhbW91bnRGaWVsZD8ub25lb2ZLaW5kID09PSAncmVjb3JkJykge1xuICAgICAgICAgICAgY29uc3QgaW5pdGlhbEFtb3VudERhdGEgPSBnZXRGaWVsZChhbW91bnRGaWVsZC5yZWNvcmQ/LmZpZWxkcyA/PyBbXSwgJ2luaXRpYWxBbW91bnQnKTtcbiAgICAgICAgICAgIGlmIChpbml0aWFsQW1vdW50RGF0YT8ub25lb2ZLaW5kID09PSAnbnVtZXJpYycpIGFtb3VudCA9IGluaXRpYWxBbW91bnREYXRhLm51bWVyaWMgPz8gJyc7XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIC8vIFRva2VuOiBIb2xkaW5nIGNyZWF0ZSBub2RlIOKGkiBvd25lcj1zZW5kZXI9cmVjZWl2ZXIsIGluc3RydW1lbnQue3NvdXJjZT1hZG1pbiwgaWR9LCBhbW91bnRcbiAgICAgICAgY29uc3QgaG9sZGluZ0ZpZWxkcyA9IGZpbmRDcmVhdGVOb2RlRmllbGRzKCdIb2xkaW5nJyk7XG4gICAgICAgIGlmIChob2xkaW5nRmllbGRzKSB7XG4gICAgICAgICAgY29uc3Qgb3duZXJEYXRhID0gZ2V0RmllbGQoaG9sZGluZ0ZpZWxkcywgJ293bmVyJyk7XG4gICAgICAgICAgaWYgKG93bmVyRGF0YT8ub25lb2ZLaW5kID09PSAncGFydHknKSB7XG4gICAgICAgICAgICByZWNlaXZlciA9IG93bmVyRGF0YS5wYXJ0eSA/PyAnJztcbiAgICAgICAgICAgIHNlbmRlciA9IHJlY2VpdmVyO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCBhbW91bnREYXRhID0gZ2V0RmllbGQoaG9sZGluZ0ZpZWxkcywgJ2Ftb3VudCcpO1xuICAgICAgICAgIGlmIChhbW91bnREYXRhPy5vbmVvZktpbmQgPT09ICdudW1lcmljJykgYW1vdW50ID0gYW1vdW50RGF0YS5udW1lcmljID8/ICcnO1xuICAgICAgICAgIGNvbnN0IGluc3RydW1lbnREYXRhID0gZ2V0RmllbGQoaG9sZGluZ0ZpZWxkcywgJ2luc3RydW1lbnQnKTtcbiAgICAgICAgICBpZiAoaW5zdHJ1bWVudERhdGE/Lm9uZW9mS2luZCA9PT0gJ3JlY29yZCcpIHtcbiAgICAgICAgICAgIGNvbnN0IGluc3RydW1lbnRGaWVsZHMgPSBpbnN0cnVtZW50RGF0YS5yZWNvcmQ/LmZpZWxkcyA/PyBbXTtcbiAgICAgICAgICAgIGNvbnN0IHNvdXJjZURhdGEgPSBnZXRGaWVsZChpbnN0cnVtZW50RmllbGRzLCAnc291cmNlJyk7XG4gICAgICAgICAgICBpZiAoc291cmNlRGF0YT8ub25lb2ZLaW5kID09PSAncGFydHknKSBpbnN0cnVtZW50QWRtaW4gPSBzb3VyY2VEYXRhLnBhcnR5ID8/ICcnO1xuICAgICAgICAgICAgY29uc3QgaWREYXRhID0gZ2V0RmllbGQoaW5zdHJ1bWVudEZpZWxkcywgJ2lkJyk7XG4gICAgICAgICAgICBpZiAoaWREYXRhPy5vbmVvZktpbmQgPT09ICd0ZXh0JykgaW5zdHJ1bWVudElkID0gaWREYXRhLnRleHQgPz8gJyc7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBjYXNlIFRyYW5zYWN0aW9uVHlwZS5UcmFuc2ZlclByZWFwcHJvdmFsQ2FuY2VsOiB7XG4gICAgICAgIC8vIENvaW4gY2FuY2VsOiBUcmFuc2ZlclByZWFwcHJvdmFsX0NhbmNlbCBleGVyY2lzZSBvbiBTcGxpY2UuQW11bGV0UnVsZXM6VHJhbnNmZXJQcmVhcHByb3ZhbC5cbiAgICAgICAgLy8gU2VsZi1zZXJ2aWNlIOKAlCB0aGUgYWN0aW5nIHBhcnR5IChvciwgYXMgYSBmYWxsYmFjaywgdGhlIGV4ZXJjaXNlZCBjaG9pY2VBcmd1bWVudC5wKSBpc1xuICAgICAgICAvLyBib3RoIHNlbmRlciBhbmQgcmVjZWl2ZXIuXG4gICAgICAgIGNvbnN0IGFjdGluZ1BhcnR5ID0gZmluZEV4ZXJjaXNlQWN0aW5nUGFydHkoJ1RyYW5zZmVyUHJlYXBwcm92YWxfQ2FuY2VsJyk7XG4gICAgICAgIGlmIChhY3RpbmdQYXJ0eSkge1xuICAgICAgICAgIHNlbmRlciA9IGFjdGluZ1BhcnR5O1xuICAgICAgICAgIHJlY2VpdmVyID0gYWN0aW5nUGFydHk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3QgY2FuY2VsRmllbGRzID0gZmluZEV4ZXJjaXNlTm9kZUZpZWxkcygnVHJhbnNmZXJQcmVhcHByb3ZhbF9DYW5jZWwnKTtcbiAgICAgICAgICBpZiAoY2FuY2VsRmllbGRzKSB7XG4gICAgICAgICAgICBjb25zdCBwYXJ0eURhdGEgPSBnZXRGaWVsZChjYW5jZWxGaWVsZHMsICdwJyk7XG4gICAgICAgICAgICBpZiAocGFydHlEYXRhPy5vbmVvZktpbmQgPT09ICdwYXJ0eScpIHtcbiAgICAgICAgICAgICAgc2VuZGVyID0gcGFydHlEYXRhLnBhcnR5ID8/ICcnO1xuICAgICAgICAgICAgICByZWNlaXZlciA9IHNlbmRlcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gVG9rZW4gY2FuY2VsOiBBcmNoaXZlIGV4ZXJjaXNlIG9uIFV0aWxpdHkuUmVnaXN0cnkuQXBwLlYwLk1vZGVsLlRyYW5zZmVyUHJlYXBwcm92YWwuXG4gICAgICAgICAgICAvLyBUaGUgYnVpbHQtaW4gQXJjaGl2ZSBjaG9pY2UgaGFzIGVtcHR5IGNob2ljZUFyZ3VtZW50IHt9LCBzbyB0aGUgYWN0aW5nIHBhcnR5IGlzXG4gICAgICAgICAgICAvLyB0aGUgb25seSB3YXkgdG8gcmVjb3ZlciB0aGUgY2FuY2VsbGluZyBwYXJ0eS5cbiAgICAgICAgICAgIGNvbnN0IHRva2VuQXJjaGl2ZVBhcnR5ID0gZmluZEV4ZXJjaXNlQWN0aW5nUGFydHkoJ0FyY2hpdmUnKTtcbiAgICAgICAgICAgIGlmICh0b2tlbkFyY2hpdmVQYXJ0eSkge1xuICAgICAgICAgICAgICBzZW5kZXIgPSB0b2tlbkFyY2hpdmVQYXJ0eTtcbiAgICAgICAgICAgICAgcmVjZWl2ZXIgPSB0b2tlbkFyY2hpdmVQYXJ0eTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgYW1vdW50ID0gJzAnO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgZGVmYXVsdDoge1xuICAgICAgICAvLyBJbml0aWFsIHRyYW5zZmVyICgxLXN0ZXAgYW5kIDItc3RlcCwgY29pbiBhbmQgdG9rZW4pOiBUcmFuc2ZlckZhY3RvcnlfVHJhbnNmZXIgZXhlcmNpc2Ugbm9kZVxuICAgICAgICAvLyDihpIgdHJhbnNmZXIue3NlbmRlciwgcmVjZWl2ZXIsIGFtb3VudCwgaW5zdHJ1bWVudElkLnthZG1pbiwgaWR9LCBtZXRhfVxuICAgICAgICBjb25zdCB0cmFuc2ZlckZpZWxkcyA9IGZpbmRFeGVyY2lzZU5vZGVGaWVsZHMoJ1RyYW5zZmVyRmFjdG9yeV9UcmFuc2ZlcicpO1xuICAgICAgICBpZiAodHJhbnNmZXJGaWVsZHMpIHtcbiAgICAgICAgICBjb25zdCB0cmFuc2ZlclN1bSA9IGdldEZpZWxkKHRyYW5zZmVyRmllbGRzLCAndHJhbnNmZXInKTtcbiAgICAgICAgICBpZiAodHJhbnNmZXJTdW0/Lm9uZW9mS2luZCA9PT0gJ3JlY29yZCcpIHtcbiAgICAgICAgICAgIGNvbnN0IHRyYW5zZmVyUmVjb3JkID0gdHJhbnNmZXJTdW0ucmVjb3JkPy5maWVsZHMgPz8gW107XG4gICAgICAgICAgICBleHRyYWN0RnJvbVRyYW5zZmVyUmVjb3JkKHRyYW5zZmVyUmVjb3JkLCAnaW5zdHJ1bWVudElkJywgJ2FkbWluJyk7XG4gICAgICAgICAgICBjb25zdCBtZXRhRmllbGQgPSBnZXRGaWVsZCh0cmFuc2ZlclJlY29yZCwgJ21ldGEnKTtcbiAgICAgICAgICAgIGlmIChtZXRhRmllbGQ/Lm9uZW9mS2luZCA9PT0gJ3JlY29yZCcpIHtcbiAgICAgICAgICAgICAgY29uc3QgdmFsdWVzRmllbGQgPSBnZXRGaWVsZChtZXRhRmllbGQucmVjb3JkPy5maWVsZHMgPz8gW10sICd2YWx1ZXMnKTtcbiAgICAgICAgICAgICAgaWYgKHZhbHVlc0ZpZWxkPy5vbmVvZktpbmQgPT09ICd0ZXh0TWFwJykge1xuICAgICAgICAgICAgICAgIGNvbnN0IG1lbW9FbnRyeSA9IHZhbHVlc0ZpZWxkLnRleHRNYXA/LmVudHJpZXMuZmluZChcbiAgICAgICAgICAgICAgICAgIChlKSA9PiBlLmtleSA9PT0gJ3NwbGljZS5sZmRlY2VudHJhbGl6ZWR0cnVzdC5vcmcvcmVhc29uJ1xuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgaWYgKG1lbW9FbnRyeSkge1xuICAgICAgICAgICAgICAgICAgY29uc3QgbWVtb1ZhbHVlID0gbWVtb0VudHJ5Py52YWx1ZT8uc3VtO1xuICAgICAgICAgICAgICAgICAgaWYgKG1lbW9WYWx1ZT8ub25lb2ZLaW5kID09PSAndGV4dCcpIG1lbW9JZCA9IG1lbW9WYWx1ZS50ZXh0O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIXNlbmRlciB8fCAhcmVjZWl2ZXIgfHwgIWFtb3VudCkge1xuICAgICAgY29uc3QgbWlzc2luZ0ZpZWxkczogc3RyaW5nW10gPSBbXTtcbiAgICAgIGlmICghc2VuZGVyKSBtaXNzaW5nRmllbGRzLnB1c2goJ3NlbmRlcicpO1xuICAgICAgaWYgKCFyZWNlaXZlcikgbWlzc2luZ0ZpZWxkcy5wdXNoKCdyZWNlaXZlcicpO1xuICAgICAgaWYgKCFhbW91bnQpIG1pc3NpbmdGaWVsZHMucHVzaCgnYW1vdW50Jyk7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYGludmFsaWQgdHJhbnNhY3Rpb24gZGF0YTogbWlzc2luZyAke21pc3NpbmdGaWVsZHMuam9pbignLCAnKX1gKTtcbiAgICB9XG4gICAgY29uc3QgY29udmVydGVkQW1vdW50ID0gdGhpcy5jb252ZXJ0QW1vdW50VG9Mb3dlc3RVbml0KG5ldyBCaWdOdW1iZXIoYW1vdW50KSk7XG4gICAgY29uc3QgcGFyc2VkRGF0YTogUHJlcGFyZWRUeG5QYXJzZWRJbmZvID0ge1xuICAgICAgc2VuZGVyLFxuICAgICAgcmVjZWl2ZXIsXG4gICAgICBhbW91bnQ6IGNvbnZlcnRlZEFtb3VudCxcbiAgICB9O1xuICAgIGlmIChtZW1vSWQpIHtcbiAgICAgIHBhcnNlZERhdGEubWVtb0lkID0gbWVtb0lkO1xuICAgIH1cbiAgICAvLyBOYXRpdmUgQ2FudG9uIENvaW4gY2FycmllcyBubyB0b2tlbjogdGhlIHRyYW5zYWN0aW9uIGZhbGxzIGJhY2sgdG8gdGhlIGJhc2UgY29pbi5cbiAgICBpZiAoaW5zdHJ1bWVudElkICYmIGluc3RydW1lbnRBZG1pbiAmJiAhdGhpcy5pc05hdGl2ZUluc3RydW1lbnQoaW5zdHJ1bWVudEFkbWluLCBpbnN0cnVtZW50SWQpKSB7XG4gICAgICBwYXJzZWREYXRhLnRva2VuID0gdGhpcy5maW5kVG9rZW5OYW1lQnlDb250cmFjdEFkZHJlc3MoYCR7aW5zdHJ1bWVudEFkbWlufToke2luc3RydW1lbnRJZH1gKTtcbiAgICB9XG4gICAgcmV0dXJuIHBhcnNlZERhdGE7XG4gIH1cblxuICAvKiogUGFyc2VzIGBcIlBrZzpNb2R1bGU6RW50aXR5XCJgIGludG8gcGFydHMuICovXG4gIHBhcnNlQ2FudG9uVGVtcGxhdGVJZCh2YWx1ZTogc3RyaW5nKTogeyBwa2c6IHN0cmluZzsgbW9kdWxlTmFtZTogc3RyaW5nOyBlbnRpdHlOYW1lOiBzdHJpbmcgfSB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ3N0cmluZycpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgY29uc3QgcGFydHMgPSB2YWx1ZS5zcGxpdCgnOicpO1xuICAgIGlmIChwYXJ0cy5sZW5ndGggIT09IDMpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgY29uc3QgW3BrZywgbW9kdWxlTmFtZSwgZW50aXR5TmFtZV0gPSBwYXJ0cztcbiAgICBpZiAoIXBrZyB8fCAhbW9kdWxlTmFtZSB8fCAhZW50aXR5TmFtZSkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICByZXR1cm4geyBwa2csIG1vZHVsZU5hbWUsIGVudGl0eU5hbWUgfTtcbiAgfVxuXG4gIGRhbWxWYWx1ZVRvSnNvbih2YWx1ZTogVmFsdWUgfCB1bmRlZmluZWQpOiB1bmtub3duIHtcbiAgICBpZiAoIXZhbHVlIHx8ICF2YWx1ZS5zdW0pIHJldHVybiB1bmRlZmluZWQ7XG4gICAgY29uc3Qgc3VtID0gdmFsdWUuc3VtO1xuICAgIHN3aXRjaCAoc3VtLm9uZW9mS2luZCkge1xuICAgICAgY2FzZSAndW5pdCc6XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgY2FzZSAnYm9vbCc6XG4gICAgICAgIHJldHVybiBzdW0uYm9vbDtcbiAgICAgIGNhc2UgJ2ludDY0JzpcbiAgICAgICAgcmV0dXJuIHN1bS5pbnQ2NDtcbiAgICAgIGNhc2UgJ2RhdGUnOlxuICAgICAgICByZXR1cm4gc3VtLmRhdGU7XG4gICAgICBjYXNlICd0aW1lc3RhbXAnOlxuICAgICAgICByZXR1cm4gc3VtLnRpbWVzdGFtcDtcbiAgICAgIGNhc2UgJ251bWVyaWMnOlxuICAgICAgICByZXR1cm4gc3VtLm51bWVyaWM7XG4gICAgICBjYXNlICdwYXJ0eSc6XG4gICAgICAgIHJldHVybiBzdW0ucGFydHk7XG4gICAgICBjYXNlICd0ZXh0JzpcbiAgICAgICAgcmV0dXJuIHN1bS50ZXh0O1xuICAgICAgY2FzZSAnY29udHJhY3RJZCc6XG4gICAgICAgIHJldHVybiBzdW0uY29udHJhY3RJZDtcbiAgICAgIGNhc2UgJ29wdGlvbmFsJzpcbiAgICAgICAgcmV0dXJuIHN1bS5vcHRpb25hbD8udmFsdWUgPyB0aGlzLmRhbWxWYWx1ZVRvSnNvbihzdW0ub3B0aW9uYWwudmFsdWUpIDogbnVsbDtcbiAgICAgIGNhc2UgJ2xpc3QnOlxuICAgICAgICByZXR1cm4gKHN1bS5saXN0Py5lbGVtZW50cyA/PyBbXSkubWFwKChlbCkgPT4gdGhpcy5kYW1sVmFsdWVUb0pzb24oZWwpKTtcbiAgICAgIGNhc2UgJ3RleHRNYXAnOiB7XG4gICAgICAgIGNvbnN0IG9iajogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7fTtcbiAgICAgICAgZm9yIChjb25zdCBlbnRyeSBvZiBzdW0udGV4dE1hcD8uZW50cmllcyA/PyBbXSkge1xuICAgICAgICAgIG9ialtlbnRyeS5rZXldID0gdGhpcy5kYW1sVmFsdWVUb0pzb24oZW50cnkudmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBvYmo7XG4gICAgICB9XG4gICAgICBjYXNlICdnZW5NYXAnOlxuICAgICAgICByZXR1cm4gKHN1bS5nZW5NYXA/LmVudHJpZXMgPz8gW10pLm1hcCgoZW50cnkpID0+IFtcbiAgICAgICAgICB0aGlzLmRhbWxWYWx1ZVRvSnNvbihlbnRyeS5rZXkpLFxuICAgICAgICAgIHRoaXMuZGFtbFZhbHVlVG9Kc29uKGVudHJ5LnZhbHVlKSxcbiAgICAgICAgXSk7XG4gICAgICBjYXNlICdyZWNvcmQnOiB7XG4gICAgICAgIGNvbnN0IG9iajogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7fTtcbiAgICAgICAgZm9yIChjb25zdCBmIG9mIHN1bS5yZWNvcmQ/LmZpZWxkcyA/PyBbXSkge1xuICAgICAgICAgIG9ialtmLmxhYmVsXSA9IHRoaXMuZGFtbFZhbHVlVG9Kc29uKGYudmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBvYmo7XG4gICAgICB9XG4gICAgICBjYXNlICd2YXJpYW50Jzoge1xuICAgICAgICBjb25zdCBvYmo6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge307XG4gICAgICAgIG9ialtzdW0udmFyaWFudC5jb25zdHJ1Y3Rvcl0gPSB0aGlzLmRhbWxWYWx1ZVRvSnNvbihzdW0udmFyaWFudC52YWx1ZSk7XG4gICAgICAgIHJldHVybiBvYmo7XG4gICAgICB9XG4gICAgICBjYXNlICdlbnVtJzpcbiAgICAgICAgcmV0dXJuIHN1bS5lbnVtLmNvbnN0cnVjdG9yO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cblxuICAvKiogUmVhZHMgYWN0QXMgcGFydGllcyBmcm9tIGEgYmFzZTY0LWVuY29kZWQgcHJlcGFyZWQgdHJhbnNhY3Rpb24gcHJvdG9idWYuICovXG4gIGV4dHJhY3RTdWJtaXR0ZXJBY3RBcyhyYXdCYXNlNjQ6IHN0cmluZyk6IHN0cmluZ1tdIHtcbiAgICBjb25zdCBkZWNvZGVkID0gdGhpcy5kZWNvZGVQcmVwYXJlZFRyYW5zYWN0aW9uKHJhd0Jhc2U2NCk7XG4gICAgcmV0dXJuIGRlY29kZWQubWV0YWRhdGE/LnN1Ym1pdHRlckluZm8/LmFjdEFzID8/IFtdO1xuICB9XG5cbiAgLyoqIERlY29kZXMgYSBwcmVwYXJlZCBDYW50b24gdHJhbnNhY3Rpb24gcHJvdG9idWYgYW5kIGV4dHJhY3RzIHRoZSByb290IENyZWF0ZUNvbW1hbmQgb3IgRXhlcmNpc2VDb21tYW5kLiAqL1xuICBleHRyYWN0Q2FudG9uQ29tbWFuZEluZm8ocmF3QmFzZTY0OiBzdHJpbmcpOiBDYW50b25Db21tYW5kSW5mbyB7XG4gICAgY29uc3QgZGVjb2RlZCA9IHRoaXMuZGVjb2RlUHJlcGFyZWRUcmFuc2FjdGlvbihyYXdCYXNlNjQpO1xuICAgIGNvbnN0IHR4ID0gZGVjb2RlZC50cmFuc2FjdGlvbjtcbiAgICBpZiAoIXR4KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2RlY29kZWQgcHJlcGFyZWQgdHJhbnNhY3Rpb24gaGFzIG5vIHRyYW5zYWN0aW9uIGJvZHknKTtcbiAgICB9XG4gICAgY29uc3Qgcm9vdHMgPSB0eC5yb290cyA/PyBbXTtcbiAgICBpZiAocm9vdHMubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2RlY29kZWQgcHJlcGFyZWQgdHJhbnNhY3Rpb24gaGFzIG5vIHJvb3Qgbm9kZXMnKTtcbiAgICB9XG4gICAgaWYgKHJvb3RzLmxlbmd0aCA+IDEpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgZGVjb2RlZCBwcmVwYXJlZCB0cmFuc2FjdGlvbiBoYXMgJHtyb290cy5sZW5ndGh9IHJvb3Qgbm9kZXM7IGV4cGVjdGVkIGV4YWN0bHkgMWApO1xuICAgIH1cbiAgICBjb25zdCByb290SWQgPSByb290c1swXTtcbiAgICBjb25zdCByb290Tm9kZSA9ICh0eC5ub2RlcyA/PyBbXSkuZmluZCgobikgPT4gbi5ub2RlSWQgPT09IHJvb3RJZCk7XG4gICAgaWYgKCFyb290Tm9kZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGByb290IG5vZGUgJyR7cm9vdElkfScgbm90IGZvdW5kIGluIG5vZGVzIGxpc3RgKTtcbiAgICB9XG4gICAgY29uc3QgdmVyc2lvbmVkTm9kZSA9IHJvb3ROb2RlLnZlcnNpb25lZE5vZGU7XG4gICAgaWYgKCF2ZXJzaW9uZWROb2RlIHx8IHZlcnNpb25lZE5vZGUub25lb2ZLaW5kICE9PSAndjEnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYHVuc3VwcG9ydGVkIHJvb3Qgbm9kZSB2ZXJzaW9uOiAke3ZlcnNpb25lZE5vZGU/Lm9uZW9mS2luZCA/PyAndW5kZWZpbmVkJ31gKTtcbiAgICB9XG4gICAgY29uc3Qgbm9kZVR5cGUgPSB2ZXJzaW9uZWROb2RlLnYxLm5vZGVUeXBlO1xuICAgIGlmIChub2RlVHlwZS5vbmVvZktpbmQgPT09ICdjcmVhdGUnKSB7XG4gICAgICBjb25zdCBjcmVhdGVOb2RlID0gbm9kZVR5cGUuY3JlYXRlO1xuICAgICAgaWYgKCFjcmVhdGVOb2RlLnRlbXBsYXRlSWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdjcmVhdGUgbm9kZSBtaXNzaW5nIHRlbXBsYXRlSWQnKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGtpbmQ6ICdDcmVhdGVDb21tYW5kJyxcbiAgICAgICAgdGVtcGxhdGVJZDoge1xuICAgICAgICAgIHBhY2thZ2VJZDogY3JlYXRlTm9kZS50ZW1wbGF0ZUlkLnBhY2thZ2VJZCxcbiAgICAgICAgICBtb2R1bGVOYW1lOiBjcmVhdGVOb2RlLnRlbXBsYXRlSWQubW9kdWxlTmFtZSxcbiAgICAgICAgICBlbnRpdHlOYW1lOiBjcmVhdGVOb2RlLnRlbXBsYXRlSWQuZW50aXR5TmFtZSxcbiAgICAgICAgfSxcbiAgICAgICAgYXJndW1lbnQ6IHRoaXMuZGFtbFZhbHVlVG9Kc29uKGNyZWF0ZU5vZGUuYXJndW1lbnQpLFxuICAgICAgfTtcbiAgICB9XG4gICAgaWYgKG5vZGVUeXBlLm9uZW9mS2luZCA9PT0gJ2V4ZXJjaXNlJykge1xuICAgICAgY29uc3QgZXhlcmNpc2VOb2RlID0gbm9kZVR5cGUuZXhlcmNpc2U7XG4gICAgICBpZiAoIWV4ZXJjaXNlTm9kZS50ZW1wbGF0ZUlkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignZXhlcmNpc2Ugbm9kZSBtaXNzaW5nIHRlbXBsYXRlSWQnKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGtpbmQ6ICdFeGVyY2lzZUNvbW1hbmQnLFxuICAgICAgICB0ZW1wbGF0ZUlkOiB7XG4gICAgICAgICAgcGFja2FnZUlkOiBleGVyY2lzZU5vZGUudGVtcGxhdGVJZC5wYWNrYWdlSWQsXG4gICAgICAgICAgbW9kdWxlTmFtZTogZXhlcmNpc2VOb2RlLnRlbXBsYXRlSWQubW9kdWxlTmFtZSxcbiAgICAgICAgICBlbnRpdHlOYW1lOiBleGVyY2lzZU5vZGUudGVtcGxhdGVJZC5lbnRpdHlOYW1lLFxuICAgICAgICB9LFxuICAgICAgICBhcmd1bWVudDogdGhpcy5kYW1sVmFsdWVUb0pzb24oZXhlcmNpc2VOb2RlLmNob3NlblZhbHVlKSxcbiAgICAgICAgY2hvaWNlOiBleGVyY2lzZU5vZGUuY2hvaWNlSWQsXG4gICAgICAgIGNvbnRyYWN0SWQ6IGV4ZXJjaXNlTm9kZS5jb250cmFjdElkLFxuICAgICAgICBhY3RpbmdQYXJ0aWVzOiBbLi4uKGV4ZXJjaXNlTm9kZS5hY3RpbmdQYXJ0aWVzID8/IFtdKV0sXG4gICAgICB9O1xuICAgIH1cbiAgICB0aHJvdyBuZXcgRXJyb3IoYHVuc3VwcG9ydGVkIHJvb3Qgbm9kZSB0eXBlOiAke25vZGVUeXBlLm9uZW9mS2luZCA/PyAndW5kZWZpbmVkJ31gKTtcbiAgfVxuXG4gIHNhbWVFbGVtZW50cyhhOiByZWFkb25seSBzdHJpbmdbXSwgYjogcmVhZG9ubHkgc3RyaW5nW10pOiBib29sZWFuIHtcbiAgICBpZiAoYS5sZW5ndGggIT09IGIubGVuZ3RoKSByZXR1cm4gZmFsc2U7XG4gICAgY29uc3Qgc29ydGVkQSA9IFsuLi5hXS5zb3J0KCk7XG4gICAgY29uc3Qgc29ydGVkQiA9IFsuLi5iXS5zb3J0KCk7XG4gICAgcmV0dXJuIHNvcnRlZEEuZXZlcnkoKHgsIGkpID0+IHggPT09IHNvcnRlZEJbaV0pO1xuICB9XG5cbiAgLyoqIFN0cmlwcyB0aGUgYGNvbW1hbmQuYCBwcmVmaXggZnJvbSBpbmplY3RBcyBwYXRocyAoZS5nLiBgY29tbWFuZC5FeGVyY2lzZUNvbW1hbmQuY29udHJhY3RJZGAg4oaSIGBFeGVyY2lzZUNvbW1hbmQuY29udHJhY3RJZGApLiAqL1xuICBub3JtYWxpemVJbmplY3RBcyhzcGVjczogcmVhZG9ubHkgeyBpbmplY3RBcz86IHN0cmluZyB9W10gfCB1bmRlZmluZWQpOiBTZXQ8c3RyaW5nPiB7XG4gICAgY29uc3Qgb3V0ID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gICAgaWYgKCFzcGVjcykgcmV0dXJuIG91dDtcbiAgICBmb3IgKGNvbnN0IHNwZWMgb2Ygc3BlY3MpIHtcbiAgICAgIGlmICghc3BlYyB8fCB0eXBlb2Ygc3BlYy5pbmplY3RBcyAhPT0gJ3N0cmluZycpIGNvbnRpbnVlO1xuICAgICAgY29uc3Qgc3RyaXBwZWQgPSBzcGVjLmluamVjdEFzLnN0YXJ0c1dpdGgoJ2NvbW1hbmQuJykgPyBzcGVjLmluamVjdEFzLnNsaWNlKCdjb21tYW5kLicubGVuZ3RoKSA6IHNwZWMuaW5qZWN0QXM7XG4gICAgICBpZiAoc3RyaXBwZWQpIG91dC5hZGQoc3RyaXBwZWQpO1xuICAgIH1cbiAgICByZXR1cm4gb3V0O1xuICB9XG5cbiAgLyoqXG4gICAqIFJlY3Vyc2l2ZWx5IGFzc2VydHMgdGhhdCBgYWN0dWFsYCBtYXRjaGVzIGBleHBlY3RlZGAuIFBhdGhzIGluIGBpbmplY3RBc1BhdGhzYCBhcmUgc2tpcHBlZC5cbiAgICogTnVtZXJpYyBzdHJpbmdzIGFyZSBjb21wYXJlZCB2aWEgQmlnTnVtYmVyIHRvIGhhbmRsZSBEQU1MIGZvcm1hdHRpbmcgZGlmZmVyZW5jZXMgKGUuZy4gXCIxMDBcIiB2cyBcIjEwMC4wMDAwMDAwMDAwXCIpLlxuICAgKi9cbiAgYXNzZXJ0RGVlcENhbnRvbk1hdGNoKGV4cGVjdGVkOiB1bmtub3duLCBhY3R1YWw6IHVua25vd24sIGluamVjdEFzUGF0aHM6IFNldDxzdHJpbmc+LCBjdXJyZW50UGF0aCA9ICcnKTogdm9pZCB7XG4gICAgaWYgKGluamVjdEFzUGF0aHMuaGFzKGN1cnJlbnRQYXRoKSkgcmV0dXJuO1xuXG4gICAgLy8gT25seSB1bmRlZmluZWQgbWVhbnMgXCJ1bnNwZWNpZmllZCDigJQgc2tpcCBjb21wYXJpc29uXCIuIEVtcHR5IHt9IG9yIFtdIGFyZSB2YWxpZFxuICAgIC8vIERhbWwgdmFsdWVzIGFuZCBtdXN0IGJlIHZlcmlmaWVkIGFnYWluc3QgYWN0dWFsIHRvIHByZXZlbnQgYWNjaWRlbnRhbCB1bmRlci12ZXJpZmljYXRpb24uXG4gICAgaWYgKGV4cGVjdGVkID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoZXhwZWN0ZWQgPT09IG51bGwgfHwgYWN0dWFsID09PSBudWxsKSB7XG4gICAgICBpZiAoZXhwZWN0ZWQgIT09IGFjdHVhbCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYENhbnRvbiBjb21tYW5kIG1pc21hdGNoIGF0ICcke2N1cnJlbnRQYXRoIHx8ICc8cm9vdD4nfSc6IGV4cGVjdGVkICR7dGhpcy5zdHJpbmdpZnlGb3JFcnJvcihcbiAgICAgICAgICAgIGV4cGVjdGVkXG4gICAgICAgICAgKX0sIGdvdCAke3RoaXMuc3RyaW5naWZ5Rm9yRXJyb3IoYWN0dWFsKX1gXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0eXBlb2YgZXhwZWN0ZWQgPT09ICdzdHJpbmcnICYmIHR5cGVvZiBhY3R1YWwgPT09ICdzdHJpbmcnKSB7XG4gICAgICBpZiAodGhpcy5hcmVOdW1lcmljU3RyaW5ncyhleHBlY3RlZCwgYWN0dWFsKSkge1xuICAgICAgICBpZiAoIW5ldyBCaWdOdW1iZXIoZXhwZWN0ZWQpLmlzRXF1YWxUbyhuZXcgQmlnTnVtYmVyKGFjdHVhbCkpKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgYENhbnRvbiBjb21tYW5kIG51bWVyaWMgbWlzbWF0Y2ggYXQgJyR7Y3VycmVudFBhdGggfHwgJzxyb290Pid9JzogZXhwZWN0ZWQgJHtleHBlY3RlZH0sIGdvdCAke2FjdHVhbH1gXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICAvLyBJU08gODYwMSBpbnB1dCB2cyBtaWNyb3NlY29uZC1zaW5jZS1lcG9jaCBlbmNvZGluZyBpbiB0aGUgcHJlcGFyZWQtdHJhbnNhY3Rpb24gcHJvdG9idWYuXG4gICAgICBpZiAodGhpcy5pc0lzb1RpbWVzdGFtcChleHBlY3RlZCkgJiYgdGhpcy5pc0ludGVnZXJTdHJpbmcoYWN0dWFsKSkge1xuICAgICAgICBjb25zdCBleHBlY3RlZE1pY3Jvc2Vjb25kcyA9IG5ldyBCaWdOdW1iZXIobmV3IERhdGUoZXhwZWN0ZWQpLmdldFRpbWUoKSkubXVsdGlwbGllZEJ5KDEwMDApO1xuICAgICAgICBpZiAoIWV4cGVjdGVkTWljcm9zZWNvbmRzLmlzRXF1YWxUbyhuZXcgQmlnTnVtYmVyKGFjdHVhbCkpKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgYENhbnRvbiBjb21tYW5kIHRpbWVzdGFtcCBtaXNtYXRjaCBhdCAnJHtjdXJyZW50UGF0aCB8fCAnPHJvb3Q+J30nOiBgICtcbiAgICAgICAgICAgICAgYGV4cGVjdGVkICcke2V4cGVjdGVkfScgKCR7ZXhwZWN0ZWRNaWNyb3NlY29uZHMudG9GaXhlZCgwKX0gwrVzKSwgZ290ICcke2FjdHVhbH0nYFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKGV4cGVjdGVkICE9PSBhY3R1YWwpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBDYW50b24gY29tbWFuZCBtaXNtYXRjaCBhdCAnJHtjdXJyZW50UGF0aCB8fCAnPHJvb3Q+J30nOiBleHBlY3RlZCAnJHtleHBlY3RlZH0nLCBnb3QgJyR7YWN0dWFsfSdgXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0eXBlb2YgZXhwZWN0ZWQgPT09ICdudW1iZXInICYmIHR5cGVvZiBhY3R1YWwgPT09ICdudW1iZXInKSB7XG4gICAgICBpZiAoZXhwZWN0ZWQgIT09IGFjdHVhbCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENhbnRvbiBjb21tYW5kIG1pc21hdGNoIGF0ICcke2N1cnJlbnRQYXRoIHx8ICc8cm9vdD4nfSc6IGV4cGVjdGVkICR7ZXhwZWN0ZWR9LCBnb3QgJHthY3R1YWx9YCk7XG4gICAgICB9XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0eXBlb2YgZXhwZWN0ZWQgPT09ICdib29sZWFuJyAmJiB0eXBlb2YgYWN0dWFsID09PSAnYm9vbGVhbicpIHtcbiAgICAgIGlmIChleHBlY3RlZCAhPT0gYWN0dWFsKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgQ2FudG9uIGNvbW1hbmQgbWlzbWF0Y2ggYXQgJyR7Y3VycmVudFBhdGggfHwgJzxyb290Pid9JzogZXhwZWN0ZWQgJHtleHBlY3RlZH0sIGdvdCAke2FjdHVhbH1gKTtcbiAgICAgIH1cbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoZXhwZWN0ZWQpICYmIEFycmF5LmlzQXJyYXkoYWN0dWFsKSkge1xuICAgICAgaWYgKGV4cGVjdGVkLmxlbmd0aCAhPT0gYWN0dWFsLmxlbmd0aCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYENhbnRvbiBjb21tYW5kIGxpc3QtbGVuZ3RoIG1pc21hdGNoIGF0ICcke2N1cnJlbnRQYXRoIHx8ICc8cm9vdD4nfSc6IGV4cGVjdGVkICR7ZXhwZWN0ZWQubGVuZ3RofSwgZ290ICR7XG4gICAgICAgICAgICBhY3R1YWwubGVuZ3RoXG4gICAgICAgICAgfWBcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZXhwZWN0ZWQubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3QgY2hpbGRQYXRoID0gY3VycmVudFBhdGggPyBgJHtjdXJyZW50UGF0aH0uJHtpfWAgOiBTdHJpbmcoaSk7XG4gICAgICAgIHRoaXMuYXNzZXJ0RGVlcENhbnRvbk1hdGNoKGV4cGVjdGVkW2ldLCBhY3R1YWxbaV0sIGluamVjdEFzUGF0aHMsIGNoaWxkUGF0aCk7XG4gICAgICB9XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0aGlzLmlzUGxhaW5PYmplY3QoZXhwZWN0ZWQpICYmIHRoaXMuaXNQbGFpbk9iamVjdChhY3R1YWwpKSB7XG4gICAgICBjb25zdCBleHBlY3RlZEtleXMgPSBuZXcgU2V0KE9iamVjdC5rZXlzKGV4cGVjdGVkKSk7XG4gICAgICBjb25zdCBhY3R1YWxLZXlzID0gbmV3IFNldChPYmplY3Qua2V5cyhhY3R1YWwpKTtcbiAgICAgIGZvciAoY29uc3Qga2V5IG9mIGV4cGVjdGVkS2V5cykge1xuICAgICAgICBjb25zdCBjaGlsZFBhdGggPSBjdXJyZW50UGF0aCA/IGAke2N1cnJlbnRQYXRofS4ke2tleX1gIDoga2V5O1xuICAgICAgICBpZiAoZXhwZWN0ZWRba2V5XSA9PT0gdW5kZWZpbmVkIHx8IGluamVjdEFzUGF0aHMuaGFzKGNoaWxkUGF0aCkpIGNvbnRpbnVlO1xuICAgICAgICBpZiAoIWFjdHVhbEtleXMuaGFzKGtleSkpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENhbnRvbiBjb21tYW5kIG1pc3NpbmcgZmllbGQgYXQgJyR7Y2hpbGRQYXRofScgb24gcHJlcGFyZWQgdHJhbnNhY3Rpb25gKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmFzc2VydERlZXBDYW50b25NYXRjaChleHBlY3RlZFtrZXldLCAoYWN0dWFsIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KVtrZXldLCBpbmplY3RBc1BhdGhzLCBjaGlsZFBhdGgpO1xuICAgICAgfVxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgQ2FudG9uIGNvbW1hbmQgdHlwZSBtaXNtYXRjaCBhdCAnJHtjdXJyZW50UGF0aCB8fCAnPHJvb3Q+J30nOiBleHBlY3RlZCAke3RoaXMuZGVzY3JpYmVUeXBlKFxuICAgICAgICBleHBlY3RlZFxuICAgICAgKX0sIGdvdCAke3RoaXMuZGVzY3JpYmVUeXBlKGFjdHVhbCl9YFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogQ29tcHV0ZXMgdGhlIHRvcG9sb2d5IGhhc2ggZnJvbSB0aGUgQVBJIHJlc3BvbnNlIG9mIHRoZSAnY3JlYXRlIHBhcnR5JyBlbmRwb2ludC5cbiAgICpcbiAgICogQHBhcmFtIHRvcG9sb2d5VHJhbnNhY3Rpb25zIC0gTGlzdCBvZiBiYXNlNjQtZW5jb2RlZCB0b3BvbG9neSB0cmFuc2FjdGlvbnMgZnJvbSB0aGUgQ2FudG9uIEFQSS5cbiAgICogQHJldHVybnMgVGhlIGZpbmFsIGJhc2U2NC1lbmNvZGVkIHRvcG9sb2d5IHRyYW5zYWN0aW9uIGhhc2guXG4gICAqL1xuICBjb21wdXRlSGFzaEZyb21DcmVhdGVQYXJ0eVJlc3BvbnNlKHRvcG9sb2d5VHJhbnNhY3Rpb25zOiBzdHJpbmdbXSk6IHN0cmluZyB7XG4gICAgY29uc3QgdHhCdWZmZXJzID0gdG9wb2xvZ3lUcmFuc2FjdGlvbnMubWFwKCh0eCkgPT4gQnVmZmVyLmZyb20odHgsICdiYXNlNjQnKSk7XG4gICAgcmV0dXJuIHRoaXMuY29tcHV0ZUhhc2hGcm9tVG9wb2xvZ3lUcmFuc2FjdGlvbih0eEJ1ZmZlcnMpO1xuICB9XG5cbiAgYXN5bmMgY29tcHV0ZUhhc2hGcm9tUHJlcGFyZVN1Ym1pc3Npb25SZXNwb25zZShwcmVwYXJlZFRyYW5zYWN0aW9uQmFzZTY0OiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIGNvbnN0IHByZXBhcmVkVHJhbnNhY3Rpb24gPSB0aGlzLmRlY29kZVByZXBhcmVkVHJhbnNhY3Rpb24ocHJlcGFyZWRUcmFuc2FjdGlvbkJhc2U2NCk7XG4gICAgY29uc3QgaGFzaCA9IGF3YWl0IGNvbXB1dGVQcmVwYXJlZFRyYW5zYWN0aW9uKHByZXBhcmVkVHJhbnNhY3Rpb24pO1xuICAgIHJldHVybiBCdWZmZXIuZnJvbShoYXNoKS50b1N0cmluZygnYmFzZTY0Jyk7XG4gIH1cblxuICAvKipcbiAgICogQ29tcHV0ZXMgdGhlIGZpbmFsIHRvcG9sb2d5IHRyYW5zYWN0aW9uIGhhc2ggZm9yIGEgbGlzdCBvZiBwcmVwYXJlZCBDYW50b24gdHJhbnNhY3Rpb25zLlxuICAgKlxuICAgKiBFYWNoIHRyYW5zYWN0aW9uIGlzIGZpcnN0IGhhc2hlZCB3aXRoIHB1cnBvc2UgYDExYCwgdGhlbiBhbGwgaGFzaGVzIGFyZSBjb21iaW5lZCBhbmRcbiAgICogaGFzaGVkIGFnYWluIHdpdGggcHVycG9zZSBgNTVgLCBmb2xsb3dpbmcgdGhlIENhbnRvbiB0b3BvbG9neSBoYXNoIHJ1bGVzLlxuICAgKlxuICAgKiBUaGUgcmVzdWx0aW5nIGhhc2ggaXMgZW5jb2RlZCBhcyBhIGJhc2U2NCBzdHJpbmcuXG4gICAqXG4gICAqIEBwYXJhbSB7QnVmZmVyW119IHByZXBhcmVkVHJhbnNhY3Rpb25zIC0gQW4gYXJyYXkgb2YgQ2FudG9uIHRyYW5zYWN0aW9uIGJ1ZmZlcnMuXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBmaW5hbCB0b3BvbG9neSBoYXNoLCBiYXNlNjQtZW5jb2RlZC5cbiAgICovXG4gIHByaXZhdGUgY29tcHV0ZUhhc2hGcm9tVG9wb2xvZ3lUcmFuc2FjdGlvbihwcmVwYXJlZFRyYW5zYWN0aW9uczogQnVmZmVyW10pOiBzdHJpbmcge1xuICAgIGNvbnN0IHJhd0hhc2hlcyA9IHByZXBhcmVkVHJhbnNhY3Rpb25zLm1hcCgodHgpID0+IHRoaXMuY29tcHV0ZVNoYTI1NkNhbnRvbkhhc2goMTEsIHR4KSk7XG4gICAgY29uc3QgY29tYmluZWRIYXNoZXMgPSB0aGlzLmNvbXB1dGVNdWx0aUhhc2hGb3JUb3BvbG9neShyYXdIYXNoZXMpO1xuICAgIGNvbnN0IGNvbXB1dGVkSGFzaCA9IHRoaXMuY29tcHV0ZVNoYTI1NkNhbnRvbkhhc2goNTUsIGNvbWJpbmVkSGFzaGVzKTtcbiAgICByZXR1cm4gQnVmZmVyLmZyb20oY29tcHV0ZWRIYXNoLCAnaGV4JykudG9TdHJpbmcoJ2Jhc2U2NCcpO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbnZlcnRzIGEgYmFzZTY0LWVuY29kZWQgRWQyNTUxOSBwdWJsaWMga2V5IHN0cmluZyBpbnRvIGEgc3RydWN0dXJlZCBzaWduaW5nIHB1YmxpYyBrZXkgb2JqZWN0LlxuICAgKiBAcGFyYW0ge1N0cmluZ30gcHVibGljS2V5IFRoZSBiYXNlNjQtZW5jb2RlZCBFZDI1NTE5IHB1YmxpYyBrZXlcbiAgICogQHJldHVybnMge09iamVjdH0gVGhlIHN0cnVjdHVyZWQgc2lnbmluZyBrZXkgb2JqZWN0IGZvcm1hdHRlZCBmb3IgdXNlIHdpdGggY3J5cHRvZ3JhcGhpYyBvcGVyYXRpb25zXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBwcml2YXRlIHNpZ25pbmdQdWJsaWNLZXlGcm9tRWQyNTUxOShwdWJsaWNLZXk6IHN0cmluZyk6IHtcbiAgICBmb3JtYXQ6IG51bWJlcjtcbiAgICBwdWJsaWNLZXk6IEJ1ZmZlcjtcbiAgICBzY2hlbWU6IG51bWJlcjtcbiAgICBrZXlTcGVjOiBudW1iZXI7XG4gICAgdXNhZ2U6IFtdO1xuICB9IHtcbiAgICByZXR1cm4ge1xuICAgICAgZm9ybWF0OiBDcnlwdG9LZXlGb3JtYXQuUkFXLFxuICAgICAgcHVibGljS2V5OiBCdWZmZXIuZnJvbShwdWJsaWNLZXksICdiYXNlNjQnKSxcbiAgICAgIHNjaGVtZTogU2lnbmluZ0FsZ29yaXRobVNwZWMuRUQyNTUxOSxcbiAgICAgIGtleVNwZWM6IFNpZ25pbmdLZXlTcGVjLkVDX0NVUlZFMjU1MTksXG4gICAgICB1c2FnZTogW10sXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgYnVmZmVyIHdpdGggYSA0LWJ5dGUgYmlnLWVuZGlhbiBpbnRlZ2VyIHByZWZpeCBmb2xsb3dlZCBieSB0aGUgcHJvdmlkZWQgYnl0ZSBidWZmZXJcbiAgICogQHBhcmFtIHtOdW1iZXJ9IHZhbHVlIFRoZSBpbnRlZ2VyIHRvIHByZWZpeCwgd3JpdHRlbiBhcyA0IGJ5dGVzIGluIGJpZy1lbmRpYW4gb3JkZXJcbiAgICogQHBhcmFtIHtCdWZmZXJ9IGJ5dGVzIFRoZSBidWZmZXIgdG8gYXBwZW5kIGFmdGVyIHRoZSBpbnRlZ2VyIHByZWZpeFxuICAgKiBAcmV0dXJucyB7QnVmZmVyfSBUaGUgcmVzdWx0aW5nIGJ1ZmZlciB3aXRoIHRoZSBwcmVmaXhlZCBpbnRlZ2VyXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBwcml2YXRlIHByZWZpeGVkSW50KHZhbHVlOiBudW1iZXIsIGJ5dGVzOiBCdWZmZXIpOiBCdWZmZXIge1xuICAgIGNvbnN0IGJ1ZmZlciA9IEJ1ZmZlci5hbGxvYyg0ICsgYnl0ZXMubGVuZ3RoKTtcbiAgICBidWZmZXIud3JpdGVVSW50MzJCRSh2YWx1ZSwgMCk7XG4gICAgQnVmZmVyLmZyb20oYnl0ZXMpLmNvcHkoYnVmZmVyLCA0KTtcbiAgICByZXR1cm4gYnVmZmVyO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbXB1dGVzIGFuIFNIQS0yNTYgQ2FudG9uLXN0eWxlIGhhc2ggYnkgcHJlZml4aW5nIHRoZSBpbnB1dCB3aXRoIGEgcHVycG9zZSBpZGVudGlmaWVyLFxuICAgKiB0aGVuIGhhc2hpbmcgdGhlIHJlc3VsdGluZyBidWZmZXIgYW5kIHByZXBlbmRpbmcgYSBtdWx0aS1wcmVmaXhcbiAgICpcbiAgICogQHBhcmFtIHtOdW1iZXJ9IHB1cnBvc2UgQSBudW1lcmljIGlkZW50aWZpZXIgdG8gcHJlZml4IHRoZSBoYXNoIGlucHV0IHdpdGhcbiAgICogQHBhcmFtIHtCdWZmZXJ9IGJ5dGVzIFRoZSBidWZmZXIgdG8gYmUgaGFzaGVkXG4gICAqIEByZXR1cm5zIHtTdHJpbmd9IEEgaGV4YWRlY2ltYWwgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSByZXN1bHRpbmcgaGFzaCB3aXRoIG11bHRpLXByZWZpeFxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgcHJpdmF0ZSBjb21wdXRlU2hhMjU2Q2FudG9uSGFzaChwdXJwb3NlOiBudW1iZXIsIGJ5dGVzOiBCdWZmZXIpOiBzdHJpbmcge1xuICAgIGNvbnN0IGhhc2hJbnB1dCA9IHRoaXMucHJlZml4ZWRJbnQocHVycG9zZSwgYnl0ZXMpO1xuICAgIGNvbnN0IGhhc2ggPSBjcnlwdG8uY3JlYXRlSGFzaCgnc2hhMjU2JykudXBkYXRlKGhhc2hJbnB1dCkuZGlnZXN0KCk7XG4gICAgY29uc3QgbXVsdGlwcmVmaXggPSBCdWZmZXIuZnJvbShbMHgxMiwgMHgyMF0pO1xuICAgIHJldHVybiBCdWZmZXIuY29uY2F0KFttdWx0aXByZWZpeCwgaGFzaF0pLnRvU3RyaW5nKCdoZXgnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWNvZGVzIGEgQmFzZTY0LWVuY29kZWQgc3RyaW5nIGludG8gYSBVaW50OEFycmF5XG4gICAqIEBwYXJhbSB7U3RyaW5nfSBiNjQgVGhlIEJhc2U2NC1lbmNvZGVkIHN0cmluZ1xuICAgKiBAcmV0dXJucyB7VWludDhBcnJheX0gVGhlIGRlY29kZWQgYnl0ZSBhcnJheVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgcHJpdmF0ZSBmcm9tQmFzZTY0KGI2NDogc3RyaW5nKTogVWludDhBcnJheSB7XG4gICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KEJ1ZmZlci5mcm9tKGI2NCwgJ2Jhc2U2NCcpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWNvZGVzIGEgQmFzZTY0LWVuY29kZWQgcHJlcGFyZWQgdHJhbnNhY3Rpb24gaW50byBhIHN0cnVjdHVyZWQgb2JqZWN0XG4gICAqIEBwYXJhbSB7U3RyaW5nfSBiYXNlNjQgVGhlIEJhc2U2NC1lbmNvZGVkIHRyYW5zYWN0aW9uIGRhdGFcbiAgICogQHJldHVybnMge0lQcmVwYXJlZFRyYW5zYWN0aW9ufSBUaGUgZGVjb2RlZCBgSVByZXBhcmVkVHJhbnNhY3Rpb25gIG9iamVjdFxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgcHJpdmF0ZSBkZWNvZGVQcmVwYXJlZFRyYW5zYWN0aW9uKGJhc2U2NDogc3RyaW5nKTogSVByZXBhcmVkVHJhbnNhY3Rpb24ge1xuICAgIGNvbnN0IGJ5dGVzID0gdGhpcy5mcm9tQmFzZTY0KGJhc2U2NCk7XG4gICAgcmV0dXJuIFByZXBhcmVkVHJhbnNhY3Rpb24uZnJvbUJpbmFyeShieXRlcyk7XG4gIH1cblxuICAvKipcbiAgICogQ29tcHV0ZXMgYSBkZXRlcm1pbmlzdGljIGNvbWJpbmVkIGhhc2ggZnJvbSBhbiBhcnJheSBvZiBpbmRpdmlkdWFsIENhbnRvbi1zdHlsZSBTSEEtMjU2IGhhc2hlc1xuICAgKlxuICAgKiBFYWNoIGhhc2ggaXMgZGVjb2RlZCBmcm9tIGhleCwgc29ydGVkIGxleGljb2dyYXBoaWNhbGx5IChieSBoZXgpLCBhbmQgcHJlZml4ZWQgd2l0aCBpdHMgbGVuZ3RoXG4gICAqIFRoZSBmaW5hbCBidWZmZXIgaW5jbHVkZXMgdGhlIG51bWJlciBvZiBoYXNoZXMgZm9sbG93ZWQgYnkgZWFjaCAobGVuZ3RoLXByZWZpeGVkKSBoYXNoXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nW119IGhhc2hlcyAtIEFuIGFycmF5IG9mIENhbnRvbi1wcmVmaXhlZCBTSEEtMjU2IGhhc2hlcyBpbiBoZXhhZGVjaW1hbCBzdHJpbmcgZm9ybWF0XG4gICAqIEByZXR1cm5zIHtCdWZmZXJ9IEEgYmluYXJ5IGJ1ZmZlciByZXByZXNlbnRpbmcgdGhlIGNvbWJpbmVkIGhhc2ggaW5wdXRcbiAgICovXG4gIHByaXZhdGUgY29tcHV0ZU11bHRpSGFzaEZvclRvcG9sb2d5KGhhc2hlczogc3RyaW5nW10pOiBCdWZmZXIge1xuICAgIGNvbnN0IHNvcnRlZEhhc2hlcyA9IGhhc2hlc1xuICAgICAgLm1hcCgoaGV4KSA9PiBCdWZmZXIuZnJvbShoZXgsICdoZXgnKSlcbiAgICAgIC5zb3J0KChhLCBiKSA9PiBhLnRvU3RyaW5nKCdoZXgnKS5sb2NhbGVDb21wYXJlKGIudG9TdHJpbmcoJ2hleCcpKSk7XG5cbiAgICBjb25zdCBudW1IYXNoZXNCeXRlcyA9IHRoaXMuZW5jb2RlSW50MzIoc29ydGVkSGFzaGVzLmxlbmd0aCk7XG4gICAgY29uc3QgcGFydHM6IEJ1ZmZlcltdID0gW251bUhhc2hlc0J5dGVzXTtcblxuICAgIGZvciAoY29uc3QgaCBvZiBzb3J0ZWRIYXNoZXMpIHtcbiAgICAgIGNvbnN0IGxlbmd0aEJ5dGVzID0gdGhpcy5lbmNvZGVJbnQzMihoLmxlbmd0aCk7XG4gICAgICBwYXJ0cy5wdXNoKGxlbmd0aEJ5dGVzLCBoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gQnVmZmVyLmNvbmNhdChwYXJ0cyk7XG4gIH1cblxuICAvKipcbiAgICogRW5jb2RlcyBhIDMyLWJpdCBzaWduZWQgaW50ZWdlciBpbnRvIGEgNC1ieXRlIGJpZy1lbmRpYW4gQnVmZmVyXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZSAtIFRoZSBpbnRlZ2VyIHRvIGVuY29kZVxuICAgKiBAcmV0dXJucyB7QnVmZmVyfSBBIDQtYnl0ZSBidWZmZXIgcmVwcmVzZW50aW5nIHRoZSBpbnRlZ2VyIGluIGJpZy1lbmRpYW4gZm9ybWF0XG4gICAqL1xuICBwcml2YXRlIGVuY29kZUludDMyKHZhbHVlOiBudW1iZXIpOiBCdWZmZXIge1xuICAgIGNvbnN0IGJ1ZiA9IEJ1ZmZlci5hbGxvYyg0KTtcbiAgICBidWYud3JpdGVJbnQzMkJFKHZhbHVlLCAwKTtcbiAgICByZXR1cm4gYnVmO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbnZlcnQgdG8gY2FudG9uIHJhdyB1bml0c1xuICAgKiBAcGFyYW0ge0JpZ051bWJlcn0gdmFsdWVcbiAgICogQHJldHVybnMge1N0cmluZ30gdGhlIGNvbnZlcnRlZCByYXcgY2FudG9uIHVuaXRzXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBwcml2YXRlIGNvbnZlcnRBbW91bnRUb0xvd2VzdFVuaXQodmFsdWU6IEJpZ051bWJlcik6IHN0cmluZyB7XG4gICAgcmV0dXJuIHZhbHVlLm11bHRpcGxpZWRCeShuZXcgQmlnTnVtYmVyKDEwKS5wb3coMTApKS50b0ZpeGVkKDApO1xuICB9XG5cbiAgaXNQbGFpbk9iamVjdCh2YWx1ZTogdW5rbm93bik6IHZhbHVlIGlzIFJlY29yZDxzdHJpbmcsIHVua25vd24+IHtcbiAgICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAhPT0gbnVsbCAmJiAhQXJyYXkuaXNBcnJheSh2YWx1ZSk7XG4gIH1cblxuICBwcml2YXRlIGFyZU51bWVyaWNTdHJpbmdzKGE6IHN0cmluZywgYjogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgY29uc3QgbnVtZXJpY1JlID0gL14tP1xcZCsoXFwuXFxkKyk/JC87XG4gICAgcmV0dXJuIG51bWVyaWNSZS50ZXN0KGEpICYmIG51bWVyaWNSZS50ZXN0KGIpO1xuICB9XG5cbiAgcHJpdmF0ZSBpc0lzb1RpbWVzdGFtcCh2YWx1ZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgaWYgKCEvXlxcZHs0fS1cXGR7Mn0tXFxkezJ9VFxcZHsyfTpcXGR7Mn06XFxkezJ9KFxcLlxcZHsxLDN9KT9aJC8udGVzdCh2YWx1ZSkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIE51bWJlci5pc0Zpbml0ZShEYXRlLnBhcnNlKHZhbHVlKSk7XG4gIH1cblxuICBwcml2YXRlIGlzSW50ZWdlclN0cmluZyh2YWx1ZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIC9eXFxkKyQvLnRlc3QodmFsdWUpO1xuICB9XG5cbiAgcHJpdmF0ZSBkZXNjcmliZVR5cGUodmFsdWU6IHVua25vd24pOiBzdHJpbmcge1xuICAgIGlmICh2YWx1ZSA9PT0gbnVsbCkgcmV0dXJuICdudWxsJztcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHJldHVybiAnYXJyYXknO1xuICAgIHJldHVybiB0eXBlb2YgdmFsdWU7XG4gIH1cblxuICBwcml2YXRlIHN0cmluZ2lmeUZvckVycm9yKHZhbHVlOiB1bmtub3duKTogc3RyaW5nIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHZhbHVlKTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHJldHVybiBTdHJpbmcodmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGJpdGdvIHRva2VuIG5hbWUgdXNpbmcgdGhlIG9uLWNoYWluIGluc3RydW1lbnQgZGV0YWlsc1xuICAgKiBAcGFyYW0gY29udHJhY3RBZGRyZXNzIC0gdGhlIGNvbnRyYWN0IGFkZHJlc3Mgb2YgdGhlIGZvcm0sIGBpbnN0cnVtZW50QWRtaW46aW5zdHJ1bWVudElkYFxuICAgKiBAcmV0dXJucyB0b2tlbk5hbWUgaWYgY29udHJhY3RBZGRyZXNzIG1hdGNoZXMgd2l0aCBhbnkgc3VwcG9ydGVkIGNhbnRvbiB0b2tlbnNcbiAgICovXG4gIHByaXZhdGUgZmluZFRva2VuTmFtZUJ5Q29udHJhY3RBZGRyZXNzKGNvbnRyYWN0QWRkcmVzczogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCBjYW50b25Ub2tlbiA9IGNvaW5zXG4gICAgICAuZmlsdGVyKChjb2luKSA9PiBjb2luIGluc3RhbmNlb2YgQ2FudG9uVG9rZW4gJiYgY29pbi5jb250cmFjdEFkZHJlc3MgPT09IGNvbnRyYWN0QWRkcmVzcylcbiAgICAgIC5tYXAoKGNvaW4pID0+IGNvaW4gYXMgQ2FudG9uVG9rZW4pO1xuICAgIGlmIChjYW50b25Ub2tlbi5sZW5ndGggPT09IDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgdW5zdXBwb3J0ZWQgY2FudG9uIHRva2VuIGluc3RydW1lbnQ6ICR7Y29udHJhY3RBZGRyZXNzfWApO1xuICAgIH1cbiAgICByZXR1cm4gY2FudG9uVG9rZW5bMF0ubmFtZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBXaGV0aGVyIGFuIGluc3RydW1lbnQgaXMgbmF0aXZlIENhbnRvbiBDb2luOiBgQW11bGV0YCBhZG1pbmlzdGVyZWQgYnkgYSBEU08gcGFydHkuIFRoaXMgaXMgYW4gZXhhY3RcbiAgICogY2hlY2sgb24gdGhlIGluc3RydW1lbnQgaWQgYW5kIHRoZSBhZG1pbidzIGBEU086OmAgcHJlZml4LCBuZXZlciBhIHN1YnN0cmluZyBtYXRjaCBvbiB0aGUgd2hvbGVcbiAgICogYGFkbWluOmlkYCBzdHJpbmcsIHNvIGFuIHVucmVsYXRlZCB0b2tlbiB3aG9zZSBuYW1lIG1lcmVseSBjb250YWlucyBcIkFtdWxldFwiIGlzIG5vdCB0cmVhdGVkIGFzIG5hdGl2ZS5cbiAgICovXG4gIHByaXZhdGUgaXNOYXRpdmVJbnN0cnVtZW50KGluc3RydW1lbnRBZG1pbjogc3RyaW5nLCBpbnN0cnVtZW50SWQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBpbnN0cnVtZW50SWQgPT09ICdBbXVsZXQnICYmIGluc3RydW1lbnRBZG1pbi5zdGFydHNXaXRoKCdEU086OicpO1xuICB9XG59XG5cbmNvbnN0IHV0aWxzID0gbmV3IFV0aWxzKCk7XG5cbmV4cG9ydCBkZWZhdWx0IHV0aWxzO1xuIl19
|