@bitgo-beta/sdk-core 8.2.1-beta.2137 → 8.2.1-beta.2139
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.
|
@@ -44,7 +44,6 @@ const sdk_lib_mpc_1 = require("@bitgo-beta/sdk-lib-mpc");
|
|
|
44
44
|
const sjcl = __importStar(require("@bitgo-beta/sjcl"));
|
|
45
45
|
const src_1 = require("../../../../../../src");
|
|
46
46
|
const gpgKeys_1 = require("./gpgKeys");
|
|
47
|
-
const openpgp = __importStar(require("openpgp"));
|
|
48
47
|
describe('ECDSA MPC v2', async () => {
|
|
49
48
|
let userShare;
|
|
50
49
|
let bitgoShare;
|
|
@@ -1066,181 +1065,4 @@ describe('EcdsaMPCv2Utils.createKeychainsWithExternalSigner', function () {
|
|
|
1066
1065
|
await assert.rejects(() => utils.createKeychainsWithExternalSigner({ enterprise, callbacks }), /Session ID mismatch after round 2/);
|
|
1067
1066
|
});
|
|
1068
1067
|
});
|
|
1069
|
-
describe('signRequestBase message finalization', () => {
|
|
1070
|
-
let sandbox;
|
|
1071
|
-
beforeEach(() => {
|
|
1072
|
-
sandbox = sinon.createSandbox();
|
|
1073
|
-
});
|
|
1074
|
-
afterEach(() => {
|
|
1075
|
-
sandbox.restore();
|
|
1076
|
-
});
|
|
1077
|
-
const walletID = '62fe536a6b4cf70007acb48c0e7bb0b0';
|
|
1078
|
-
const fakeReqId = { inc: sinon.stub(), toString: sinon.stub().returns('test-req') };
|
|
1079
|
-
let userShare;
|
|
1080
|
-
let bitgoKeyShare;
|
|
1081
|
-
before('generate key shares for finalization tests', async () => {
|
|
1082
|
-
const [userDkgSession, , bitgoDkgSession] = await sdk_lib_mpc_1.DklsUtils.generateDKGKeyShares();
|
|
1083
|
-
userShare = userDkgSession.getKeyShare();
|
|
1084
|
-
bitgoKeyShare = bitgoDkgSession.getKeyShare();
|
|
1085
|
-
});
|
|
1086
|
-
/**
|
|
1087
|
-
* Drives signRequestBase through the REAL DKLS protocol: the user-side DSG
|
|
1088
|
-
* session is the one the class builds itself; the BitGo-side session is a
|
|
1089
|
-
* real DSG advanced by this test's mocked HTTP layer on every /sign POST,
|
|
1090
|
-
* using the signBitgoMPCv2RoundX helpers. Only the HTTP transport is faked
|
|
1091
|
-
* (bitgo.get / bitgo.post chains), which is exactly the surface the
|
|
1092
|
-
* finalization-tail decision acts on: GET txrequests vs POST /send.
|
|
1093
|
-
*/
|
|
1094
|
-
const runFullSigningFlow = async (params) => {
|
|
1095
|
-
const postedUrls = [];
|
|
1096
|
-
const getUrls = [];
|
|
1097
|
-
const hashBuffer = Buffer.alloc(32, 1);
|
|
1098
|
-
const derivationPath = 'm/0';
|
|
1099
|
-
// The BitGo-side session signs the same hash buffer the user session is
|
|
1100
|
-
// given via the getMpcv2HashBuffer stub below.
|
|
1101
|
-
const bitgoSession = new sdk_lib_mpc_1.DklsDsg.Dsg(bitgoKeyShare, 2, derivationPath, hashBuffer);
|
|
1102
|
-
// Carrier shaped for the signBitgoMPCv2RoundX helpers, which index
|
|
1103
|
-
// transactions[0]; the response is remapped back to the real resource.
|
|
1104
|
-
const carrier = { transactions: [{ signatureShares: [] }] };
|
|
1105
|
-
let signPostCount = 0;
|
|
1106
|
-
const mockBg = {
|
|
1107
|
-
getEnv: () => 'test',
|
|
1108
|
-
setRequestTracer: () => undefined,
|
|
1109
|
-
url: (p) => p,
|
|
1110
|
-
get: (url) => ({
|
|
1111
|
-
query() {
|
|
1112
|
-
return this;
|
|
1113
|
-
},
|
|
1114
|
-
retry() {
|
|
1115
|
-
return this;
|
|
1116
|
-
},
|
|
1117
|
-
async result() {
|
|
1118
|
-
getUrls.push(url);
|
|
1119
|
-
return {
|
|
1120
|
-
txRequests: [
|
|
1121
|
-
{
|
|
1122
|
-
...params.txRequest,
|
|
1123
|
-
state: 'delivered',
|
|
1124
|
-
[params.requestType === 'message' ? 'messages' : 'transactions']: [
|
|
1125
|
-
{
|
|
1126
|
-
state: 'signed',
|
|
1127
|
-
txHash: '0xsigned-message-hash',
|
|
1128
|
-
signatureShares: [],
|
|
1129
|
-
...(params.requestType === 'tx'
|
|
1130
|
-
? { unsignedTx: { derivationPath, signableHex: 'abcd', serializedTxHex: 'abcd' } }
|
|
1131
|
-
: {}),
|
|
1132
|
-
},
|
|
1133
|
-
],
|
|
1134
|
-
},
|
|
1135
|
-
],
|
|
1136
|
-
};
|
|
1137
|
-
},
|
|
1138
|
-
}),
|
|
1139
|
-
post: (url) => {
|
|
1140
|
-
postedUrls.push(url);
|
|
1141
|
-
return {
|
|
1142
|
-
_body: undefined,
|
|
1143
|
-
send(body) {
|
|
1144
|
-
this._body = body;
|
|
1145
|
-
return this;
|
|
1146
|
-
},
|
|
1147
|
-
async result() {
|
|
1148
|
-
if (!url.endsWith('/sign')) {
|
|
1149
|
-
return { ...params.txRequest, state: 'delivered' };
|
|
1150
|
-
}
|
|
1151
|
-
signPostCount += 1;
|
|
1152
|
-
const body = this._body;
|
|
1153
|
-
const userShareRecord = body.signatureShares[0];
|
|
1154
|
-
if (signPostCount === 1) {
|
|
1155
|
-
await signBitgoMPCv2Round1(bitgoSession, carrier, userShareRecord, body.signerGpgPublicKey);
|
|
1156
|
-
}
|
|
1157
|
-
else if (signPostCount === 2) {
|
|
1158
|
-
await signBitgoMPCv2Round2(bitgoSession, carrier, userShareRecord, body.signerGpgPublicKey);
|
|
1159
|
-
}
|
|
1160
|
-
else {
|
|
1161
|
-
await signBitgoMPCv2Round3(bitgoSession, userShareRecord, body.signerGpgPublicKey);
|
|
1162
|
-
}
|
|
1163
|
-
const shares = carrier.transactions[0].signatureShares;
|
|
1164
|
-
return {
|
|
1165
|
-
...params.txRequest,
|
|
1166
|
-
[params.requestType === 'message' ? 'messages' : 'transactions']: [{ signatureShares: shares }],
|
|
1167
|
-
};
|
|
1168
|
-
},
|
|
1169
|
-
};
|
|
1170
|
-
},
|
|
1171
|
-
};
|
|
1172
|
-
const mockCoin = {
|
|
1173
|
-
getMPCAlgorithm: () => 'ecdsa',
|
|
1174
|
-
verifyTransaction: () => Promise.resolve(true),
|
|
1175
|
-
getConfig: () => ({ family: 'eth' }),
|
|
1176
|
-
};
|
|
1177
|
-
const mockWallet = {
|
|
1178
|
-
id: () => walletID,
|
|
1179
|
-
multisigType: () => 'tss',
|
|
1180
|
-
multisigTypeVersion: () => 'MPCv2',
|
|
1181
|
-
};
|
|
1182
|
-
const utils = new src_1.EcdsaMPCv2Utils(mockBg, mockCoin, mockWallet);
|
|
1183
|
-
sandbox
|
|
1184
|
-
.stub(utils, 'pickBitgoPubGpgKeyForSigning')
|
|
1185
|
-
.resolves(await openpgp.readKey({ armoredKey: gpgKeys_1.bitgoGpgKey.public }));
|
|
1186
|
-
sandbox.stub(utils, 'getMpcv2HashBuffer').returns(hashBuffer);
|
|
1187
|
-
const baseParams = {
|
|
1188
|
-
txRequest: params.txRequest,
|
|
1189
|
-
prv: userShare.toString('base64'),
|
|
1190
|
-
reqId: fakeReqId,
|
|
1191
|
-
};
|
|
1192
|
-
const result = params.requestType === 'message'
|
|
1193
|
-
? await utils.signTxRequestForMessage({
|
|
1194
|
-
...baseParams,
|
|
1195
|
-
messageRaw: 'raw',
|
|
1196
|
-
messageEncoded: 'abcd',
|
|
1197
|
-
bufferToSign: Buffer.from('abcd', 'hex'),
|
|
1198
|
-
})
|
|
1199
|
-
: await utils.signTxRequest({
|
|
1200
|
-
...baseParams,
|
|
1201
|
-
txParams: { recipients: [{ address: '0x' + '00'.repeat(20), amount: '1000' }] },
|
|
1202
|
-
});
|
|
1203
|
-
return { result, postedUrls, getUrls };
|
|
1204
|
-
};
|
|
1205
|
-
it('message requests finalize via GET (wallet-platform delivers at share ingestion), never POST /send', async () => {
|
|
1206
|
-
const txRequestId = 'msg-txreq-finalization';
|
|
1207
|
-
const { result, postedUrls, getUrls } = await runFullSigningFlow({
|
|
1208
|
-
requestType: 'message',
|
|
1209
|
-
txRequest: {
|
|
1210
|
-
txRequestId,
|
|
1211
|
-
walletId: walletID,
|
|
1212
|
-
apiVersion: 'full',
|
|
1213
|
-
state: 'pendingDelivery',
|
|
1214
|
-
messages: [{ messageRaw: 'raw', messageEncoded: 'abcd', derivationPath: 'm/0' }],
|
|
1215
|
-
},
|
|
1216
|
-
});
|
|
1217
|
-
assert.strictEqual(result.state, 'delivered');
|
|
1218
|
-
assert.strictEqual(postedUrls.filter((url) => url.endsWith('/send')).length, 0, 'message signing must not POST /send (wallet-platform already delivered at share ingestion)');
|
|
1219
|
-
assert.ok(postedUrls.every((url) => url.includes(`/txrequests/${txRequestId}/messages/0/sign`)), 'all message POSTs must be share submissions');
|
|
1220
|
-
// The park-check GET is skipped (object txRequest) so the only GET is the
|
|
1221
|
-
// final re-fetch.
|
|
1222
|
-
assert.strictEqual(getUrls.length, 1);
|
|
1223
|
-
assert.ok(getUrls[0].includes('/txrequests'));
|
|
1224
|
-
});
|
|
1225
|
-
it('transaction requests still finalize via POST /send', async () => {
|
|
1226
|
-
const txRequestId = 'tx-txreq-finalization';
|
|
1227
|
-
const { result, postedUrls } = await runFullSigningFlow({
|
|
1228
|
-
requestType: 'tx',
|
|
1229
|
-
txRequest: {
|
|
1230
|
-
txRequestId,
|
|
1231
|
-
walletId: walletID,
|
|
1232
|
-
apiVersion: 'full',
|
|
1233
|
-
state: 'pendingDelivery',
|
|
1234
|
-
transactions: [
|
|
1235
|
-
{
|
|
1236
|
-
unsignedTx: { derivationPath: 'm/0', signableHex: 'abcd', serializedTxHex: 'abcd' },
|
|
1237
|
-
signatureShares: [],
|
|
1238
|
-
},
|
|
1239
|
-
],
|
|
1240
|
-
},
|
|
1241
|
-
});
|
|
1242
|
-
assert.strictEqual(result.state, 'delivered');
|
|
1243
|
-
assert.strictEqual(postedUrls.filter((url) => url.endsWith('/transactions/0/send')).length, 1, 'transaction signing must POST /send to broadcast');
|
|
1244
|
-
});
|
|
1245
|
-
});
|
|
1246
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWNkc2FNUEN2Mi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Rlc3QvdW5pdC9iaXRnby91dGlscy90c3MvZWNkc2EvZWNkc2FNUEN2Mi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLCtDQUFpQztBQUNqQyw2Q0FBK0I7QUFDL0IsbUNBQXVEO0FBQ3ZELG9EQUFzQztBQVd0Qyx5REFBbUY7QUFDbkYsdURBQXlDO0FBQ3pDLCtDQVMrQjtBQUMvQix1Q0FBd0M7QUFDeEMsaURBQW1DO0FBRW5DLFFBQVEsQ0FBQyxjQUFjLEVBQUUsS0FBSyxJQUFJLEVBQUU7SUFDbEMsSUFBSSxTQUFpQixDQUFDO0lBQ3RCLElBQUksVUFBa0IsQ0FBQztJQUV2QixNQUFNLENBQUMsaUNBQWlDLEVBQUUsS0FBSyxJQUFJLEVBQUU7UUFDbkQsTUFBTSxDQUFDLGNBQWMsRUFBRSxnQkFBZ0IsRUFBRSxlQUFlLENBQUMsR0FBRyxNQUFNLHVCQUFTLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztRQUNuRyxNQUFNLENBQUMsRUFBRSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQzFCLE1BQU0sQ0FBQyxFQUFFLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUM1QixNQUFNLENBQUMsRUFBRSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBRTNCLFNBQVMsR0FBRyxjQUFjLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDekMsVUFBVSxHQUFHLGVBQWUsQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUM3QyxDQUFDLENBQUMsQ0FBQztJQUVILElBQUksZUFBZ0MsQ0FBQztJQUVyQyxNQUFNLENBQUMsNEJBQTRCLEVBQUUsS0FBSyxJQUFJLEVBQUU7UUFDOUMsTUFBTSxNQUFNLEdBQUcsRUFBZSxDQUFDO1FBQy9CLE1BQU0sQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLE9B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Q2hCLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsc0JBQXNCLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFDdkUsQ0FBQyxFQUNELGtEQUFrRCxDQUNuRCxDQUFDO0lBQ0osQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGFzc2VydCBmcm9tICdhc3NlcnQnO1xuaW1wb3J0ICogYXMgc2lub24gZnJvbSAnc2lub24nO1xuaW1wb3J0IHsgSGFzaCwgY3JlYXRlSGFzaCwgcmFuZG9tQnl0ZXMgfSBmcm9tICdjcnlwdG8nO1xuaW1wb3J0IGNyZWF0ZUtlY2Nha0hhc2ggZnJvbSAna2VjY2FrJztcbmltcG9ydCB7XG4gIE1QQ3YyQnJvYWRjYXN0TWVzc2FnZSxcbiAgTVBDdjJQMlBNZXNzYWdlLFxuICBNUEN2MlBhcnR5RnJvbVN0cmluZ09yTnVtYmVyLFxuICBNUEN2MlNpZ25hdHVyZVNoYXJlUm91bmQxSW5wdXQsXG4gIE1QQ3YyU2lnbmF0dXJlU2hhcmVSb3VuZDFPdXRwdXQsXG4gIE1QQ3YyU2lnbmF0dXJlU2hhcmVSb3VuZDJJbnB1dCxcbiAgTVBDdjJTaWduYXR1cmVTaGFyZVJvdW5kMk91dHB1dCxcbiAgTVBDdjJTaWduYXR1cmVTaGFyZVJvdW5kM0lucHV0LFxufSBmcm9tICdAYml0Z28vcHVibGljLXR5cGVzJztcbmltcG9ydCB7IERrbHNDb21tcywgRGtsc0RzZywgRGtsc1R5cGVzLCBEa2xzVXRpbHMgfSBmcm9tICdAYml0Z28tYmV0YS9zZGstbGliLW1wYyc7XG5pbXBvcnQgKiBhcyBzamNsIGZyb20gJ0BiaXRnby1iZXRhL3NqY2wnO1xuaW1wb3J0IHtcbiAgQml0R29CYXNlLFxuICBFY2RzYU1QQ3YyVXRpbHMsXG4gIEVjZHNhTVBDdjJLZXlHZW5DYWxsYmFja3MsXG4gIElCYXNlQ29pbixcbiAgU2lnbmF0dXJlU2hhcmVSZWNvcmQsXG4gIFNpZ25hdHVyZVNoYXJlVHlwZSxcbiAgVHhSZXF1ZXN0LFxuICBSZXF1ZXN0VHJhY2VyLFxufSBmcm9tICcuLi8uLi8uLi8uLi8uLi8uLi9zcmMnO1xuaW1wb3J0IHsgYml0Z29HcGdLZXkgfSBmcm9tICcuL2dwZ0tleXMnO1xuaW1wb3J0ICogYXMgb3BlbnBncCBmcm9tICdvcGVucGdwJztcblxuZGVzY3JpYmUoJ0VDRFNBIE1QQyB2MicsIGFzeW5jICgpID0+IHtcbiAgbGV0IHVzZXJTaGFyZTogQnVmZmVyO1xuICBsZXQgYml0Z29TaGFyZTogQnVmZmVyO1xuXG4gIGJlZm9yZSgnZ2VuZXJhdGUga2V5IHNoYXJlcyBmb3IgdGVzdGluZycsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBbdXNlckRrZ1Nlc3Npb24sIGJhY2t1cERrZ1Nlc3Npb24sIGJpdGdvRGtnU2Vzc2lvbl0gPSBhd2FpdCBEa2xzVXRpbHMuZ2VuZXJhdGVES0dLZXlTaGFyZXMoKTtcbiAgICBhc3NlcnQub2sodXNlckRrZ1Nlc3Npb24pO1xuICAgIGFzc2VydC5vayhiYWNrdXBEa2dTZXNzaW9uKTtcbiAgICBhc3NlcnQub2soYml0Z29Ea2dTZXNzaW9uKTtcblxuICAgIHVzZXJTaGFyZSA9IHVzZXJEa2dTZXNzaW9uLmdldEtleVNoYXJlKCk7XG4gICAgYml0Z29TaGFyZSA9IGJpdGdvRGtnU2Vzc2lvbi5nZXRLZXlTaGFyZSgpO1xuICB9KTtcblxuICBsZXQgZWNkc2FNUEN2MlV0aWxzOiBFY2RzYU1QQ3YyVXRpbHM7XG5cbiAgYmVmb3JlKCdpbml0aWFsaXplIEVjZHNhTVBDdjJVdGlscycsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBtb2NrQmcgPSB7fSBhcyBCaXRHb0Jhc2U7XG4gICAgbW9ja0JnLmdldEVudiA9IHNpbm9uLnN0dWIoKS5yZXR1cm5zKCd0ZXN0Jyk7XG4gICAgY29uc3QgZW5jcnlwdEltcGwgPSAocGFyYW1zOiB7IHBhc3N3b3JkOiBzdHJpbmc7IGlucHV0OiBzdHJpbmc7IGFkYXRhPzogc3RyaW5nIH0pID0+IHtcbiAgICAgIGNvbnN0IHNhbHQgPSByYW5kb21CeXRlcyg4KTtcbiAgICAgIGNvbnN0IGl2ID0gcmFuZG9tQnl0ZXMoMTYpO1xuICAgICAgcmV0dXJuIHNqY2wuZW5jcnlwdChwYXJhbXMucGFzc3dvcmQsIHBhcmFtcy5pbnB1dCwge1xuICAgICAgICBzYWx0OiBbYnl0ZXNUb1dvcmQoc2FsdC5zdWJhcnJheSgwLCA0KSksIGJ5dGVzVG9Xb3JkKHNhbHQuc3ViYXJyYXkoNCkpXSxcbiAgICAgICAgaXY6IFtcbiAgICAgICAgICBieXRlc1RvV29yZChpdi5zdWJhcnJheSgwLCA0KSksXG4gICAgICAgICAgYnl0ZXNUb1dvcmQoaXYuc3ViYXJyYXkoNCwgOCkpLFxuICAgICAgICAgIGJ5dGVzVG9Xb3JkKGl2LnN1YmFycmF5KDgsIDEyKSksXG4gICAgICAgICAgYnl0ZXNUb1dvcmQoaXYuc3ViYXJyYXkoMTIsIDE2KSksXG4gICAgICAgIF0sXG4gICAgICAgIGFkYXRhOiBwYXJhbXMuYWRhdGEsXG4gICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IGRlY3J5cHRJbXBsID0gKHBhcmFtczogeyBwYXNzd29yZDogc3RyaW5nOyBpbnB1dDogc3RyaW5nIH0pID0+IHtcbiAgICAgIHJldHVybiBzamNsLmRlY3J5cHQocGFyYW1zLnBhc3N3b3JkLCBwYXJhbXMuaW5wdXQpO1xuICAgIH07XG4gICAgbW9ja0JnLmVuY3J5cHQgPSBzaW5vbi5zdHViKCkuY2FsbHNGYWtlKGVuY3J5cHRJbXBsKTtcbiAgICBtb2NrQmcuZW5jcnlwdCA9IHNpbm9uLnN0dWIoKS5jYWxsc0Zha2UoYXN5bmMgKHBhcmFtcykgPT4gZW5jcnlwdEltcGwocGFyYW1zKSk7XG4gICAgbW9ja0JnLmRlY3J5cHQgPSBzaW5vbi5zdHViKCkuY2FsbHNGYWtlKGRlY3J5cHRJbXBsKTtcbiAgICBtb2NrQmcuZGVjcnlwdCA9IHNpbm9uLnN0dWIoKS5jYWxsc0Zha2UoYXN5bmMgKHBhcmFtcykgPT4gZGVjcnlwdEltcGwocGFyYW1zKSk7XG5cbiAgICBjb25zdCBtb2NrQ29pbiA9IHt9IGFzIElCYXNlQ29pbjtcbiAgICBtb2NrQ29pbi5nZXRIYXNoRnVuY3Rpb24gPSBzaW5vbi5zdHViKCkuY2FsbHNGYWtlKCgpID0+IGNyZWF0ZUtlY2Nha0hhc2goJ2tlY2NhazI1NicpIGFzIEhhc2gpO1xuICAgIG1vY2tDb2luLmlzU2lnbmFibGVQcmVIYXNoZWQgPSAodW5zaWduZWRUeCkgPT4gdW5zaWduZWRUeC5zZXJpYWxpemVkVHhIZXg/LnN0YXJ0c1dpdGgoJzAwMDAnKSA/PyBmYWxzZTtcblxuICAgIGVjZHNhTVBDdjJVdGlscyA9IG5ldyBFY2RzYU1QQ3YyVXRpbHMobW9ja0JnLCBtb2NrQ29pbik7XG4gIH0pO1xuXG4gIGNvbnN0IHdhbGxldElEID0gJzYyZmU1MzZhNmI0Y2Y3MDAwN2FjYjQ4YzBlN2JiMGIwJztcbiAgY29uc3Qgd2FsbGV0UGFzc3BocmFzZSA9ICd0ZXN0UGFzcyc7XG5cbiAgaXQoJ3Nob3VsZCBzaWduIGEgbWVzc2FnZSBoYXNoIHVzaW5nIEVDRFNBIE1QQyB2MiBvZmZsaW5lIHJvdW5kcycsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCB0TWVzc2FnZSA9ICd0ZXN0TWVzc2FnZSc7XG4gICAgY29uc3QgZGVyaXZhdGlvblBhdGggPSAnbS8wJztcblxuICAgIC8vIHJvdW5kIDFcbiAgICBjb25zdCByZXFNUEN2MlNpZ25pbmdSb3VuZDEgPSB7XG4gICAgICB0eFJlcXVlc3Q6IHtcbiAgICAgICAgdHhSZXF1ZXN0SWQ6ICcxMjM0NTYnLFxuICAgICAgICBhcGlWZXJzaW9uOiAnZnVsbCcsXG4gICAgICAgIHdhbGxldElkOiB3YWxsZXRJRCxcbiAgICAgICAgdHJhbnNhY3Rpb25zOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgdW5zaWduZWRUeDoge1xuICAgICAgICAgICAgICBkZXJpdmF0aW9uUGF0aCxcbiAgICAgICAgICAgICAgc2lnbmFibGVIZXg6IHRNZXNzYWdlLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNpZ25hdHVyZVNoYXJlczogW10sXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgIH0sXG4gICAgICBwcnY6IHVzZXJTaGFyZS50b1N0cmluZygnYmFzZTY0JyksXG4gICAgICB3YWxsZXRQYXNzcGhyYXNlLFxuICAgIH07XG5cbiAgICBjb25zdCByZXNNUEN2MlNpZ25pbmdSb3VuZDEgPSBhd2FpdCBlY2RzYU1QQ3YyVXRpbHMuY3JlYXRlT2ZmbGluZVJvdW5kMVNoYXJlKHJlcU1QQ3YyU2lnbmluZ1JvdW5kMSBhcyBhbnkpO1xuICAgIHJlc01QQ3YyU2lnbmluZ1JvdW5kMS5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgnc2lnbmF0dXJlU2hhcmVSb3VuZDEnKTtcbiAgICByZXNNUEN2MlNpZ25pbmdSb3VuZDEuc2hvdWxkLmhhdmUucHJvcGVydHkoJ3VzZXJHcGdQdWJLZXknKTtcbiAgICByZXNNUEN2MlNpZ25pbmdSb3VuZDEuc2hvdWxkLmhhdmUucHJvcGVydHkoJ2VuY3J5cHRlZFJvdW5kMVNlc3Npb24nKTtcbiAgICByZXNNUEN2MlNpZ25pbmdSb3VuZDEuc2hvdWxkLmhhdmUucHJvcGVydHkoJ2VuY3J5cHRlZFVzZXJHcGdQcnZLZXknKTtcblxuICAgIGNvbnN0IGVuY3J5cHRlZFJvdW5kMVNlc3Npb24gPSByZXNNUEN2MlNpZ25pbmdSb3VuZDEuZW5jcnlwdGVkUm91bmQxU2Vzc2lvbjtcbiAgICBjb25zdCBlbmNyeXB0ZWRVc2VyR3BnUHJ2S2V5ID0gcmVzTVBDdjJTaWduaW5nUm91bmQxLmVuY3J5cHRlZFVzZXJHcGdQcnZLZXk7XG5cbiAgICBjb25zdCBoYXNoQnVmZmVyID0gY3JlYXRlS2VjY2FrSGFzaCgna2VjY2FrMjU2JykudXBkYXRlKEJ1ZmZlci5mcm9tKHRNZXNzYWdlLCAnaGV4JykpLmRpZ2VzdCgpO1xuICAgIGNvbnN0IGJpdGdvU2Vzc2lvbiA9IG5ldyBEa2xzRHNnLkRzZyhiaXRnb1NoYXJlLCAyLCBkZXJpdmF0aW9uUGF0aCwgaGFzaEJ1ZmZlcik7XG5cbiAgICBjb25zdCB0eFJlcXVlc3RSb3VuZDEgPSBhd2FpdCBzaWduQml0Z29NUEN2MlJvdW5kMShcbiAgICAgIGJpdGdvU2Vzc2lvbixcbiAgICAgIHJlcU1QQ3YyU2lnbmluZ1JvdW5kMS50eFJlcXVlc3QgYXMgYW55LFxuICAgICAgcmVzTVBDdjJTaWduaW5nUm91bmQxLnNpZ25hdHVyZVNoYXJlUm91bmQxLFxuICAgICAgcmVzTVBDdjJTaWduaW5nUm91bmQxLnVzZXJHcGdQdWJLZXlcbiAgICApO1xuICAgIGFzc2VydC5vayhcbiAgICAgIHR4UmVxdWVzdFJvdW5kMS50cmFuc2FjdGlvbnMgJiZcbiAgICAgICAgdHhSZXF1ZXN0Um91bmQxLnRyYW5zYWN0aW9ucy5sZW5ndGggPT09IDEgJiZcbiAgICAgICAgdHhSZXF1ZXN0Um91bmQxLnRyYW5zYWN0aW9uc1swXS5zaWduYXR1cmVTaGFyZXMubGVuZ3RoID09PSAyLFxuICAgICAgJ3R4UmVxdWVzdFJvdW5kMS50cmFuc2FjdGlvbnMgaXMgbm90IGFuIGFycmF5IG9mIGxlbmd0aCAxIHdpdGggMiBzaWduYXR1cmVTaGFyZXMnXG4gICAgKTtcblxuICAgIC8vIHJvdW5kIDJcbiAgICBjb25zdCByZXFNUEN2MlNpZ25pbmdSb3VuZDIgPSB7XG4gICAgICAuLi5yZXFNUEN2MlNpZ25pbmdSb3VuZDEsXG4gICAgICB0eFJlcXVlc3Q6IHR4UmVxdWVzdFJvdW5kMSxcbiAgICAgIGVuY3J5cHRlZFJvdW5kMVNlc3Npb24sXG4gICAgICBlbmNyeXB0ZWRVc2VyR3BnUHJ2S2V5LFxuICAgICAgYml0Z29QdWJsaWNHcGdLZXk6IGJpdGdvR3BnS2V5LnB1YmxpYyxcbiAgICB9O1xuXG4gICAgY29uc3QgcmVzTVBDdjJTaWduaW5nUm91bmQyID0gYXdhaXQgZWNkc2FNUEN2MlV0aWxzLmNyZWF0ZU9mZmxpbmVSb3VuZDJTaGFyZShyZXFNUEN2MlNpZ25pbmdSb3VuZDIgYXMgYW55KTtcbiAgICByZXNNUEN2MlNpZ25pbmdSb3VuZDIuc2hvdWxkLmhhdmUucHJvcGVydHkoJ3NpZ25hdHVyZVNoYXJlUm91bmQyJyk7XG4gICAgcmVzTVBDdjJTaWduaW5nUm91bmQyLnNob3VsZC5oYXZlLnByb3BlcnR5KCdlbmNyeXB0ZWRSb3VuZDJTZXNzaW9uJyk7XG5cbiAgICBjb25zdCBlbmNyeXB0ZWRSb3VuZDJTZXNzaW9uID0gcmVzTVBDdjJTaWduaW5nUm91bmQyLmVuY3J5cHRlZFJvdW5kMlNlc3Npb247XG5cbiAgICBjb25zdCB7IHR4UmVxdWVzdDogdHhSZXF1ZXN0Um91bmQyLCBiaXRnb01zZzQgfSA9IGF3YWl0IHNpZ25CaXRnb01QQ3YyUm91bmQyKFxuICAgICAgYml0Z29TZXNzaW9uLFxuICAgICAgcmVxTVBDdjJTaWduaW5nUm91bmQyLnR4UmVxdWVzdCxcbiAgICAgIHJlc01QQ3YyU2lnbmluZ1JvdW5kMi5zaWduYXR1cmVTaGFyZVJvdW5kMixcbiAgICAgIHJlc01QQ3YyU2lnbmluZ1JvdW5kMS51c2VyR3BnUHViS2V5XG4gICAgKTtcbiAgICBhc3NlcnQub2soXG4gICAgICB0eFJlcXVlc3RSb3VuZDIudHJhbnNhY3Rpb25zICYmXG4gICAgICAgIHR4UmVxdWVzdFJvdW5kMi50cmFuc2FjdGlvbnMubGVuZ3RoID09PSAxICYmXG4gICAgICAgIHR4UmVxdWVzdFJvdW5kMi50cmFuc2FjdGlvbnNbMF0uc2lnbmF0dXJlU2hhcmVzLmxlbmd0aCA9PT0gNCxcbiAgICAgICd0eFJlcXVlc3RSb3VuZDIudHJhbnNhY3Rpb25zIGlzIG5vdCBhbiBhcnJheSBvZiBsZW5ndGggMSB3aXRoIDQgc2lnbmF0dXJlU2hhcmVzJ1xuICAgICk7XG4gICAgYml0Z29Nc2c0LnNob3VsZC5oYXZlLnByb3BlcnR5KCdzaWduYXR1cmVSJyk7XG5cbiAgICAvLyByb3VuZCAzXG4gICAgY29uc3QgcmVxTVBDdjJTaWduaW5nUm91bmQzID0ge1xuICAgICAgLi4ucmVxTVBDdjJTaWduaW5nUm91bmQyLFxuICAgICAgdHhSZXF1ZXN0OiB0eFJlcXVlc3RSb3VuZDIsXG4gICAgICBlbmNyeXB0ZWRSb3VuZDFTZXNzaW9uOiBudWxsLCAvLyBub3QgbmVlZGVkIGZvciByb3VuZCAzXG4gICAgICBlbmNyeXB0ZWRSb3VuZDJTZXNzaW9uLFxuICAgIH07XG5cbiAgICBjb25zdCByZXNNUEN2MlNpZ25pbmdSb3VuZDMgPSBhd2FpdCBlY2RzYU1QQ3YyVXRpbHMuY3JlYXRlT2ZmbGluZVJvdW5kM1NoYXJlKHJlcU1QQ3YyU2lnbmluZ1JvdW5kMyBhcyBhbnkpO1xuICAgIHJlc01QQ3YyU2lnbmluZ1JvdW5kMy5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgnc2lnbmF0dXJlU2hhcmVSb3VuZDMnKTtcblxuICAgIGNvbnN0IHsgdXNlck1zZzQgfSA9IGF3YWl0IHNpZ25CaXRnb01QQ3YyUm91bmQzKFxuICAgICAgYml0Z29TZXNzaW9uLFxuICAgICAgcmVzTVBDdjJTaWduaW5nUm91bmQzLnNpZ25hdHVyZVNoYXJlUm91bmQzLFxuICAgICAgcmVzTVBDdjJTaWduaW5nUm91bmQxLnVzZXJHcGdQdWJLZXlcbiAgICApO1xuXG4gICAgLy8gc2lnbmF0dXJlIGdlbmVyYXRpb24gYW5kIHZhbGlkYXRpb25cbiAgICBhc3NlcnQub2sodXNlck1zZzQuZGF0YS5tc2c0LnNpZ25hdHVyZVIgPT09IGJpdGdvTXNnNC5zaWduYXR1cmVSLCAnVXNlciBhbmQgQml0R28gc2lnbmF0dXJlc1IgZG8gbm90IG1hdGNoJyk7XG5cbiAgICBjb25zdCBkZXNlcmlhbGl6ZWRCaXRnb01zZzQgPSBEa2xzVHlwZXMuZGVzZXJpYWxpemVNZXNzYWdlcyh7XG4gICAgICBwMnBNZXNzYWdlczogW10sXG4gICAgICBicm9hZGNhc3RNZXNzYWdlczogW2JpdGdvTXNnNF0sXG4gICAgfSk7XG5cbiAgICBjb25zdCBkZXNlcmlhbGl6ZWRVc2VyTXNnNCA9IERrbHNUeXBlcy5kZXNlcmlhbGl6ZU1lc3NhZ2VzKHtcbiAgICAgIHAycE1lc3NhZ2VzOiBbXSxcbiAgICAgIGJyb2FkY2FzdE1lc3NhZ2VzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBmcm9tOiB1c2VyTXNnNC5kYXRhLm1zZzQuZnJvbSxcbiAgICAgICAgICBwYXlsb2FkOiB1c2VyTXNnNC5kYXRhLm1zZzQubWVzc2FnZSxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfSk7XG5cbiAgICBjb25zdCBjb21iaW5lZFNpZ1VzaW5nVXRpbCA9IERrbHNVdGlscy5jb21iaW5lUGFydGlhbFNpZ25hdHVyZXMoXG4gICAgICBbZGVzZXJpYWxpemVkVXNlck1zZzQuYnJvYWRjYXN0TWVzc2FnZXNbMF0ucGF5bG9hZCwgZGVzZXJpYWxpemVkQml0Z29Nc2c0LmJyb2FkY2FzdE1lc3NhZ2VzWzBdLnBheWxvYWRdLFxuICAgICAgQnVmZmVyLmZyb20odXNlck1zZzQuZGF0YS5tc2c0LnNpZ25hdHVyZVIsICdiYXNlNjQnKS50b1N0cmluZygnaGV4JylcbiAgICApO1xuXG4gICAgY29uc3QgY29udmVydGVkU2lnbmF0dXJlID0gRGtsc1V0aWxzLnZlcmlmeUFuZENvbnZlcnREa2xzU2lnbmF0dXJlKFxuICAgICAgQnVmZmVyLmZyb20odE1lc3NhZ2UsICdoZXgnKSxcbiAgICAgIGNvbWJpbmVkU2lnVXNpbmdVdGlsLFxuICAgICAgRGtsc1R5cGVzLmdldENvbW1vbktleWNoYWluKHVzZXJTaGFyZSksXG4gICAgICBkZXJpdmF0aW9uUGF0aCxcbiAgICAgIGNyZWF0ZUtlY2Nha0hhc2goJ2tlY2NhazI1NicpIGFzIEhhc2hcbiAgICApO1xuICAgIGFzc2VydC5vayhjb252ZXJ0ZWRTaWduYXR1cmUsICdTaWduYXR1cmUgaXMgbm90IHZhbGlkJyk7XG4gICAgYXNzZXJ0Lm9rKGNvbnZlcnRlZFNpZ25hdHVyZS5zcGxpdCgnOicpLmxlbmd0aCA9PT0gNCwgJ1NpZ25hdHVyZSBpcyBub3QgdmFsaWQnKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBmYWlsIHRvIHNpZ24gdXNpbmcgc2Vzc2lvbiBhZnRlciByb3VuZCBYIHdoZW4gc2Vzc2lvbiBhZnRlciByb3VuZCBZIGlzIGV4cGVjdGVkJywgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHRNZXNzYWdlID0gJ3Rlc3RNZXNzYWdlJztcbiAgICBjb25zdCBkZXJpdmF0aW9uUGF0aCA9ICdtLzEvMic7XG5cbiAgICAvLyByb3VuZCAxXG4gICAgY29uc3QgcmVxTVBDdjJTaWduaW5nUm91bmQxID0ge1xuICAgICAgdHhSZXF1ZXN0OiB7XG4gICAgICAgIHR4UmVxdWVzdElkOiAnMTIzNDU2JyxcbiAgICAgICAgYXBpVmVyc2lvbjogJ2Z1bGwnLFxuICAgICAgICB3YWxsZXRJZDogd2FsbGV0SUQsXG4gICAgICAgIHRyYW5zYWN0aW9uczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHVuc2lnbmVkVHg6IHtcbiAgICAgICAgICAgICAgZGVyaXZhdGlvblBhdGgsXG4gICAgICAgICAgICAgIHNpZ25hYmxlSGV4OiB0TWVzc2FnZSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzaWduYXR1cmVTaGFyZXM6IFtdLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9LFxuICAgICAgcHJ2OiB1c2VyU2hhcmUudG9TdHJpbmcoJ2Jhc2U2NCcpLFxuICAgICAgd2FsbGV0UGFzc3BocmFzZSxcbiAgICB9O1xuXG4gICAgY29uc3QgcmVzTVBDdjJTaWduaW5nUm91bmQxID0gYXdhaXQgZWNkc2FNUEN2MlV0aWxzLmNyZWF0ZU9mZmxpbmVSb3VuZDFTaGFyZShyZXFNUEN2MlNpZ25pbmdSb3VuZDEgYXMgYW55KTtcbiAgICByZXNNUEN2MlNpZ25pbmdSb3VuZDEuc2hvdWxkLmhhdmUucHJvcGVydHkoJ3NpZ25hdHVyZVNoYXJlUm91bmQxJyk7XG4gICAgcmVzTVBDdjJTaWduaW5nUm91bmQxLnNob3VsZC5oYXZlLnByb3BlcnR5KCd1c2VyR3BnUHViS2V5Jyk7XG4gICAgcmVzTVBDdjJTaWduaW5nUm91bmQxLnNob3VsZC5oYXZlLnByb3BlcnR5KCdlbmNyeXB0ZWRSb3VuZDFTZXNzaW9uJyk7XG4gICAgcmVzTVBDdjJTaWduaW5nUm91bmQxLnNob3VsZC5oYXZlLnByb3BlcnR5KCdlbmNyeXB0ZWRVc2VyR3BnUHJ2S2V5Jyk7XG5cbiAgICBjb25zdCBlbmNyeXB0ZWRSb3VuZDFTZXNzaW9uID0gcmVzTVBDdjJTaWduaW5nUm91bmQxLmVuY3J5cHRlZFJvdW5kMVNlc3Npb247XG4gICAgY29uc3QgZW5jcnlwdGVkVXNlckdwZ1BydktleSA9IHJlc01QQ3YyU2lnbmluZ1JvdW5kMS5lbmNyeXB0ZWRVc2VyR3BnUHJ2S2V5O1xuXG4gICAgY29uc3QgaGFzaEJ1ZmZlciA9IGNyZWF0ZUtlY2Nha0hhc2goJ2tlY2NhazI1NicpLnVwZGF0ZShCdWZmZXIuZnJvbSh0TWVzc2FnZSwgJ2hleCcpKS5kaWdlc3QoKTtcbiAgICBjb25zdCBiaXRnb1Nlc3Npb24gPSBuZXcgRGtsc0RzZy5Ec2coYml0Z29TaGFyZSwgMiwgZGVyaXZhdGlvblBhdGgsIGhhc2hCdWZmZXIpO1xuXG4gICAgY29uc3QgdHhSZXF1ZXN0Um91bmQxID0gYXdhaXQgc2lnbkJpdGdvTVBDdjJSb3VuZDEoXG4gICAgICBiaXRnb1Nlc3Npb24sXG4gICAgICByZXFNUEN2MlNpZ25pbmdSb3VuZDEudHhSZXF1ZXN0IGFzIGFueSxcbiAgICAgIHJlc01QQ3YyU2lnbmluZ1JvdW5kMS5zaWduYXR1cmVTaGFyZVJvdW5kMSxcbiAgICAgIHJlc01QQ3YyU2lnbmluZ1JvdW5kMS51c2VyR3BnUHViS2V5XG4gICAgKTtcbiAgICBhc3NlcnQub2soXG4gICAgICB0eFJlcXVlc3RSb3VuZDEudHJhbnNhY3Rpb25zICYmXG4gICAgICAgIHR4UmVxdWVzdFJvdW5kMS50cmFuc2FjdGlvbnMubGVuZ3RoID09PSAxICYmXG4gICAgICAgIHR4UmVxdWVzdFJvdW5kMS50cmFuc2FjdGlvbnNbMF0uc2lnbmF0dXJlU2hhcmVzLmxlbmd0aCA9PT0gMixcbiAgICAgICd0eFJlcXVlc3RSb3VuZDEudHJhbnNhY3Rpb25zIGlzIG5vdCBhbiBhcnJheSBvZiBsZW5ndGggMSB3aXRoIDIgc2lnbmF0dXJlU2hhcmVzJ1xuICAgICk7XG5cbiAgICAvLyByb3VuZCAyXG4gICAgY29uc3QgcmVxTVBDdjJTaWduaW5nUm91bmQyID0ge1xuICAgICAgLi4ucmVxTVBDdjJTaWduaW5nUm91bmQxLFxuICAgICAgdHhSZXF1ZXN0OiB0eFJlcXVlc3RSb3VuZDEsXG4gICAgICBlbmNyeXB0ZWRSb3VuZDFTZXNzaW9uLFxuICAgICAgZW5jcnlwdGVkVXNlckdwZ1BydktleSxcbiAgICAgIGJpdGdvUHVibGljR3BnS2V5OiBiaXRnb0dwZ0tleS5wdWJsaWMsXG4gICAgfTtcblxuICAgIGNvbnN0IHJlc01QQ3YyU2lnbmluZ1JvdW5kMiA9IGF3YWl0IGVjZHNhTVBDdjJVdGlscy5jcmVhdGVPZmZsaW5lUm91bmQyU2hhcmUocmVxTVBDdjJTaWduaW5nUm91bmQyIGFzIGFueSk7XG4gICAgcmVzTVBDdjJTaWduaW5nUm91bmQyLnNob3VsZC5oYXZlLnByb3BlcnR5KCdzaWduYXR1cmVTaGFyZVJvdW5kMicpO1xuICAgIHJlc01QQ3YyU2lnbmluZ1JvdW5kMi5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgnZW5jcnlwdGVkUm91bmQyU2Vzc2lvbicpO1xuXG4gICAgY29uc3QgeyB0eFJlcXVlc3Q6IHR4UmVxdWVzdFJvdW5kMiwgYml0Z29Nc2c0IH0gPSBhd2FpdCBzaWduQml0Z29NUEN2MlJvdW5kMihcbiAgICAgIGJpdGdvU2Vzc2lvbixcbiAgICAgIHJlcU1QQ3YyU2lnbmluZ1JvdW5kMi50eFJlcXVlc3QsXG4gICAgICByZXNNUEN2MlNpZ25pbmdSb3VuZDIuc2lnbmF0dXJlU2hhcmVSb3VuZDIsXG4gICAgICByZXNNUEN2MlNpZ25pbmdSb3VuZDEudXNlckdwZ1B1YktleVxuICAgICk7XG4gICAgYXNzZXJ0Lm9rKFxuICAgICAgdHhSZXF1ZXN0Um91bmQyLnRyYW5zYWN0aW9ucyAmJlxuICAgICAgICB0eFJlcXVlc3RSb3VuZDIudHJhbnNhY3Rpb25zLmxlbmd0aCA9PT0gMSAmJlxuICAgICAgICB0eFJlcXVlc3RSb3VuZDIudHJhbnNhY3Rpb25zWzBdLnNpZ25hdHVyZVNoYXJlcy5sZW5ndGggPT09IDQsXG4gICAgICAndHhSZXF1ZXN0Um91bmQyLnRyYW5zYWN0aW9ucyBpcyBub3QgYW4gYXJyYXkgb2YgbGVuZ3RoIDEgd2l0aCA0IHNpZ25hdHVyZVNoYXJlcydcbiAgICApO1xuICAgIGJpdGdvTXNnNC5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgnc2lnbmF0dXJlUicpO1xuXG4gICAgY29uc3QgZW5jcnlwdGVkUm91bmQyU2Vzc2lvbiA9IHJlc01QQ3YyU2lnbmluZ1JvdW5kMi5lbmNyeXB0ZWRSb3VuZDJTZXNzaW9uO1xuXG4gICAgLy8gQSBib2d1cyByb3VuZCAzIHNpZ25pbmcgcmVxdWVzdCBjb250YWluaW5nIGVuY3J5cHRlZCBzZXNzaW9uIGZyb20gcm91bmQgMSBpbnN0ZWFkIG9mIHJvdW5kIDIgc2hvdWxkIGZhaWwuXG4gICAgY29uc3QgYm9ndXNSZXFNUEN2MlNpZ25pbmdSb3VuZDMgPSB7XG4gICAgICAuLi5yZXFNUEN2MlNpZ25pbmdSb3VuZDIsXG4gICAgICB0eFJlcXVlc3Q6IHR4UmVxdWVzdFJvdW5kMixcbiAgICAgIGVuY3J5cHRlZFJvdW5kMVNlc3Npb246IG51bGwsIC8vIG5vdCBuZWVkZWQgZm9yIHJvdW5kIDNcbiAgICAgIGVuY3J5cHRlZFJvdW5kMlNlc3Npb246IGVuY3J5cHRlZFJvdW5kMVNlc3Npb24sIC8vIGluc3RhZWQgb2YgZW5jcnlwdGVkUm91bmQyU2Vzc2lvblxuICAgIH07XG5cbiAgICBhd2FpdCBlY2RzYU1QQ3YyVXRpbHNcbiAgICAgIC5jcmVhdGVPZmZsaW5lUm91bmQzU2hhcmUoYm9ndXNSZXFNUEN2MlNpZ25pbmdSb3VuZDMgYXMgYW55KVxuICAgICAgLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoJ0FkYXRhIGRvZXMgbm90IG1hdGNoIGN5cGhlcnRleHQgYWRhdGEnKTtcblxuICAgIC8vIEEgYm9ndXMgcm91bmQgMiBzaWduaW5nIHJlcXVlc3QgY29udGFpbmluZyBlbmNyeXB0ZWQgc2Vzc2lvbiBmcm9tIHJvdW5kIDIgaW5zdGVhZCBvZiByb3VuZCAxIHNob3VsZCBmYWlsLlxuICAgIGNvbnN0IGJvZ3VzUmVxTVBDdjJTaWduaW5nUm91bmQyID0ge1xuICAgICAgLi4ucmVxTVBDdjJTaWduaW5nUm91bmQyLFxuICAgICAgZW5jcnlwdGVkUm91bmQxU2Vzc2lvbjogZW5jcnlwdGVkUm91bmQyU2Vzc2lvbiwgLy8gaW5zdGFlZCBvZiBlbmNyeXB0ZWRSb3VuZDFTZXNzaW9uXG4gICAgfTtcblxuICAgIGF3YWl0IGVjZHNhTVBDdjJVdGlsc1xuICAgICAgLmNyZWF0ZU9mZmxpbmVSb3VuZDJTaGFyZShib2d1c1JlcU1QQ3YyU2lnbmluZ1JvdW5kMiBhcyBhbnkpXG4gICAgICAuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgnVW5leHBlY3RlZCBzaWduYXR1cmUgc2hhcmUgcmVzcG9uc2UuIFVuYWJsZSB0byBwYXJzZSBkYXRhLicpO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIGZhaWwgdG8gc2lnbiByZXVzaW5nIGEgc2Vzc2lvbiBvbiBkaWZmZXJlbnQgbWVzc2FnZScsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCB0TWVzc2FnZTEgPSAndGVzdE1lc3NhZ2UxJztcbiAgICBjb25zdCB0TWVzc2FnZTIgPSAndGVzdE1lc3NhZ2UyJztcbiAgICBjb25zdCBkZXJpdmF0aW9uUGF0aCA9ICdtLzMvNCc7XG5cbiAgICAvLyByb3VuZCAxIG9mIHNpZ25pbmcgdE1lc3NhZ2UxXG4gICAgY29uc3QgcmVxTVBDdjJTaWduaW5nTXNnMVJvdW5kMSA9IHtcbiAgICAgIHR4UmVxdWVzdDoge1xuICAgICAgICB0eFJlcXVlc3RJZDogJzEyMzQ1NicsXG4gICAgICAgIGFwaVZlcnNpb246ICdmdWxsJyxcbiAgICAgICAgd2FsbGV0SWQ6IHdhbGxldElELFxuICAgICAgICB0cmFuc2FjdGlvbnM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICB1bnNpZ25lZFR4OiB7XG4gICAgICAgICAgICAgIGRlcml2YXRpb25QYXRoLFxuICAgICAgICAgICAgICBzaWduYWJsZUhleDogdE1lc3NhZ2UxLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNpZ25hdHVyZVNoYXJlczogW10sXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgIH0sXG4gICAgICBwcnY6IHVzZXJTaGFyZS50b1N0cmluZygnYmFzZTY0JyksXG4gICAgICB3YWxsZXRQYXNzcGhyYXNlLFxuICAgIH07XG5cbiAgICBjb25zdCByZXNNUEN2MlNpZ25pbmdNc2cxUm91bmQxID0gYXdhaXQgZWNkc2FNUEN2MlV0aWxzLmNyZWF0ZU9mZmxpbmVSb3VuZDFTaGFyZShyZXFNUEN2MlNpZ25pbmdNc2cxUm91bmQxIGFzIGFueSk7XG4gICAgcmVzTVBDdjJTaWduaW5nTXNnMVJvdW5kMS5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgnc2lnbmF0dXJlU2hhcmVSb3VuZDEnKTtcbiAgICByZXNNUEN2MlNpZ25pbmdNc2cxUm91bmQxLnNob3VsZC5oYXZlLnByb3BlcnR5KCd1c2VyR3BnUHViS2V5Jyk7XG4gICAgcmVzTVBDdjJTaWduaW5nTXNnMVJvdW5kMS5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgnZW5jcnlwdGVkUm91bmQxU2Vzc2lvbicpO1xuICAgIHJlc01QQ3YyU2lnbmluZ01zZzFSb3VuZDEuc2hvdWxkLmhhdmUucHJvcGVydHkoJ2VuY3J5cHRlZFVzZXJHcGdQcnZLZXknKTtcblxuICAgIGNvbnN0IGVuY3J5cHRlZE1zZzFSb3VuZDFTZXNzaW9uID0gcmVzTVBDdjJTaWduaW5nTXNnMVJvdW5kMS5lbmNyeXB0ZWRSb3VuZDFTZXNzaW9uO1xuXG4gICAgY29uc3QgaGFzaEJ1ZmZlcjEgPSBjcmVhdGVLZWNjYWtIYXNoKCdrZWNjYWsyNTYnKS51cGRhdGUoQnVmZmVyLmZyb20odE1lc3NhZ2UxLCAnaGV4JykpLmRpZ2VzdCgpO1xuICAgIGNvbnN0IGJpdGdvU2Vzc2lvbjEgPSBuZXcgRGtsc0RzZy5Ec2coYml0Z29TaGFyZSwgMiwgZGVyaXZhdGlvblBhdGgsIGhhc2hCdWZmZXIxKTtcblxuICAgIGNvbnN0IHR4UmVxdWVzdE1zZzFSb3VuZDEgPSBhd2FpdCBzaWduQml0Z29NUEN2MlJvdW5kMShcbiAgICAgIGJpdGdvU2Vzc2lvbjEsXG4gICAgICByZXFNUEN2MlNpZ25pbmdNc2cxUm91bmQxLnR4UmVxdWVzdCBhcyBhbnksXG4gICAgICByZXNNUEN2MlNpZ25pbmdNc2cxUm91bmQxLnNpZ25hdHVyZVNoYXJlUm91bmQxLFxuICAgICAgcmVzTVBDdjJTaWduaW5nTXNnMVJvdW5kMS51c2VyR3BnUHViS2V5XG4gICAgKTtcbiAgICBhc3NlcnQub2soXG4gICAgICB0eFJlcXVlc3RNc2cxUm91bmQxLnRyYW5zYWN0aW9ucyAmJlxuICAgICAgICB0eFJlcXVlc3RNc2cxUm91bmQxLnRyYW5zYWN0aW9ucy5sZW5ndGggPT09IDEgJiZcbiAgICAgICAgdHhSZXF1ZXN0TXNnMVJvdW5kMS50cmFuc2FjdGlvbnNbMF0uc2lnbmF0dXJlU2hhcmVzLmxlbmd0aCA9PT0gMixcbiAgICAgICd0eFJlcXVlc3RNc2cxUm91bmQxLnRyYW5zYWN0aW9ucyBpcyBub3QgYW4gYXJyYXkgb2YgbGVuZ3RoIDEgd2l0aCAyIHNpZ25hdHVyZVNoYXJlcydcbiAgICApO1xuXG4gICAgLy8gcm91bmQgMSBvZiBzaWduaW5nIHRNZXNzYWdlMlxuICAgIGNvbnN0IHJlcU1QQ3YyU2lnbmluZ01zZzJSb3VuZDEgPSB7XG4gICAgICAuLi5yZXFNUEN2MlNpZ25pbmdNc2cxUm91bmQxLFxuICAgICAgdHhSZXF1ZXN0OiB7XG4gICAgICAgIC4uLnJlcU1QQ3YyU2lnbmluZ01zZzFSb3VuZDEudHhSZXF1ZXN0LFxuICAgICAgICB0cmFuc2FjdGlvbnM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICB1bnNpZ25lZFR4OiB7XG4gICAgICAgICAgICAgIGRlcml2YXRpb25QYXRoLFxuICAgICAgICAgICAgICBzaWduYWJsZUhleDogdE1lc3NhZ2UyLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNpZ25hdHVyZVNoYXJlczogW10sXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgIH0sXG4gICAgfTtcblxuICAgIGNvbnN0IHJlc01QQ3YyU2lnbmluZ01zZzJSb3VuZDEgPSBhd2FpdCBlY2RzYU1QQ3YyVXRpbHMuY3JlYXRlT2ZmbGluZVJvdW5kMVNoYXJlKHJlcU1QQ3YyU2lnbmluZ01zZzJSb3VuZDEgYXMgYW55KTtcbiAgICByZXNNUEN2MlNpZ25pbmdNc2cyUm91bmQxLnNob3VsZC5oYXZlLnByb3BlcnR5KCdzaWduYXR1cmVTaGFyZVJvdW5kMScpO1xuICAgIHJlc01QQ3YyU2lnbmluZ01zZzJSb3VuZDEuc2hvdWxkLmhhdmUucHJvcGVydHkoJ3VzZXJHcGdQdWJLZXknKTtcbiAgICByZXNNUEN2MlNpZ25pbmdNc2cyUm91bmQxLnNob3VsZC5oYXZlLnByb3BlcnR5KCdlbmNyeXB0ZWRSb3VuZDFTZXNzaW9uJyk7XG4gICAgcmVzTVBDdjJTaWduaW5nTXNnMlJvdW5kMS5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgnZW5jcnlwdGVkVXNlckdwZ1BydktleScpO1xuXG4gICAgY29uc3QgZW5jcnlwdGVkTXNnMlVzZXJHcGdQcnZLZXkgPSByZXNNUEN2MlNpZ25pbmdNc2cyUm91bmQxLmVuY3J5cHRlZFVzZXJHcGdQcnZLZXk7XG5cbiAgICBjb25zdCBoYXNoQnVmZmVyMiA9IGNyZWF0ZUtlY2Nha0hhc2goJ2tlY2NhazI1NicpLnVwZGF0ZShCdWZmZXIuZnJvbSh0TWVzc2FnZTIsICdoZXgnKSkuZGlnZXN0KCk7XG4gICAgY29uc3QgYml0Z29TZXNzaW9uMiA9IG5ldyBEa2xzRHNnLkRzZyhiaXRnb1NoYXJlLCAyLCBkZXJpdmF0aW9uUGF0aCwgaGFzaEJ1ZmZlcjIpO1xuXG4gICAgY29uc3QgdHhSZXF1ZXN0TXNnMlJvdW5kMSA9IGF3YWl0IHNpZ25CaXRnb01QQ3YyUm91bmQxKFxuICAgICAgYml0Z29TZXNzaW9uMixcbiAgICAgIHJlcU1QQ3YyU2lnbmluZ01zZzJSb3VuZDEudHhSZXF1ZXN0IGFzIGFueSxcbiAgICAgIHJlc01QQ3YyU2lnbmluZ01zZzJSb3VuZDEuc2lnbmF0dXJlU2hhcmVSb3VuZDEsXG4gICAgICByZXNNUEN2MlNpZ25pbmdNc2cyUm91bmQxLnVzZXJHcGdQdWJLZXlcbiAgICApO1xuICAgIGFzc2VydC5vayhcbiAgICAgIHR4UmVxdWVzdE1zZzJSb3VuZDEudHJhbnNhY3Rpb25zICYmXG4gICAgICAgIHR4UmVxdWVzdE1zZzJSb3VuZDEudHJhbnNhY3Rpb25zLmxlbmd0aCA9PT0gMSAmJlxuICAgICAgICB0eFJlcXVlc3RNc2cyUm91bmQxLnRyYW5zYWN0aW9uc1swXS5zaWduYXR1cmVTaGFyZXMubGVuZ3RoID09PSAyLFxuICAgICAgJ3R4UmVxdWVzdE1zZzJSb3VuZDEudHJhbnNhY3Rpb25zIGlzIG5vdCBhbiBhcnJheSBvZiBsZW5ndGggMSB3aXRoIDIgc2lnbmF0dXJlU2hhcmVzJ1xuICAgICk7XG5cbiAgICAvLyBBdHRlbXB0aW5nIHRvIHJldXNlIHJvdW5kIDEgc2Vzc2lvbiBmcm9tIHNpZ25pbmcgdE1lc3NhZ2UxIGZvciBzaWduaW5nIHRNZXNzYWdlMiBzaG91bGQgZmFpbCBhdCByb3VuZCAyLlxuICAgIGNvbnN0IHJlcU1QQ3YyU2lnbmluZ01zZzJSb3VuZDJXaXRoTXNnMVNlc3Npb24gPSB7XG4gICAgICAuLi5yZXFNUEN2MlNpZ25pbmdNc2cyUm91bmQxLFxuICAgICAgdHhSZXF1ZXN0OiB0eFJlcXVlc3RNc2cyUm91bmQxLFxuICAgICAgZW5jcnlwdGVkUm91bmQxU2Vzc2lvbjogZW5jcnlwdGVkTXNnMVJvdW5kMVNlc3Npb24sIC8vIGluc3RlYWQgb2YgcmVzTVBDdjJTaWduaW5nTXNnMlJvdW5kMS5lbmNyeXB0ZWRSb3VuZDFTZXNzaW9uXG4gICAgICBlbmNyeXB0ZWRVc2VyR3BnUHJ2S2V5OiBlbmNyeXB0ZWRNc2cyVXNlckdwZ1BydktleSxcbiAgICAgIGJpdGdvUHVibGljR3BnS2V5OiBiaXRnb0dwZ0tleS5wdWJsaWMsXG4gICAgfTtcblxuICAgIGF3YWl0IGVjZHNhTVBDdjJVdGlsc1xuICAgICAgLmNyZWF0ZU9mZmxpbmVSb3VuZDJTaGFyZShyZXFNUEN2MlNpZ25pbmdNc2cyUm91bmQyV2l0aE1zZzFTZXNzaW9uIGFzIGFueSlcbiAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKCdFcnJvciB3aGlsZSBjcmVhdGluZyBtZXNzYWdlcyBmcm9tIHBhcnR5IDAsIHJvdW5kIDI6IEVycm9yOiBJbnZhbGlkIGZpbmFsX3Nlc3Npb25faWQnKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBzaWduIGEgcHJlLWhhc2hlZCBBdmFsYW5jaGUgYXRvbWljIGV4cG9ydCB0eCB3aXRob3V0IGFwcGx5aW5nIGtlY2NhazI1NicsIGFzeW5jICgpID0+IHtcbiAgICAvLyBSZWFsIEF2YWxhbmNoZSBFeHBvcnRJbkMgdHJhbnNhY3Rpb24gZnJvbSBzZGstY29pbi1mbHIgdGVzdCByZXNvdXJjZXMuXG4gICAgLy8gTWlycm9ycyB0aGUgc2FuZGJveCBmbG93OiBjMnBNcGNUb01wY1Rzcy50cyDihpIgc2lnbldpdGhNcGMoKSB3aGVyZVxuICAgIC8vIEZsYXJlSlMgYnVpbGRzIGFuIEV4cG9ydEluQyB0eCwgU0hBLTI1NiBoYXNoZXMgdGhlIHVuc2lnbmVkIGJ5dGVzLFxuICAgIC8vIGFuZCBNUEMgc2lnbnMgdGhlIHJhdyBTSEEtMjU2IGhhc2ggKE5PVCBrZWNjYWsyNTYgb2YgaXQpLlxuICAgIC8vXG4gICAgLy8gc2VyaWFsaXplZFR4SGV4ID0gZnVsbCB1bnNpZ25lZCBBdmFsYW5jaGUgYXRvbWljIHR4IChjb2RlYyB0eXBlIElEIDB4MDAwMClcbiAgICAvLyBzaWduYWJsZUhleCAgICAgPSBTSEEtMjU2KHR4Qm9keSkg4oCUIDMyIGJ5dGVzLCBhbHJlYWR5IHRoZSBmaW5hbCBzaWduaW5nIGhhc2hcbiAgICAvL1xuICAgIC8vIFNhbmRib3ggcmVmZXJlbmNlIChjb2lucy1zYW5kYm94L2ZsYXJlQ1AvZmxyQ19NUENfdG9fZmxyUF9NUEMpOlxuICAgIC8vXG4gICAgLy8gQ+KGklAgZGlyZWN0aW9uIChjMnBNcGNUb01wY1Rzcy50cyDigJQgZXhwb3J0IGZyb20gQy1jaGFpbik6XG4gICAgLy8gICBNZXNzYWdlIGhhc2ggKFNIQS0yNTYpOiA5YjNlMWM4ZmM5MzIyYjY2N2VjNjE2MTk0ODdiMzk5M2U5MWRjZmM1Li4uXG4gICAgLy8gICBTaWduYXR1cmUgcjogZDViYzJlMmNhZDMxNDAyMy4uLiAgczogNDdhZjlkNzEwOTEzNWY3YS4uLiAgUmVjb3Zlcnk6IDFcbiAgICAvLyAgIEV4cG9ydCBUWCBJRDogMlo1RUxTaG5tbU1ndlRldXB6TFF6RUt0QWdidlprRHZxNktSWXFielZnY3lCR1ZHcGJcbiAgICAvL1xuICAgIC8vIFDihpJDIGRpcmVjdGlvbiAocDJjTXBjVG9NcGNUc3MudHMg4oCUIGV4cG9ydCBmcm9tIFAtY2hhaW4pOlxuICAgIC8vICAgVGhyZXNob2xkOiAxIChNUEMgc2luZ2xlLXNpZyBvbi1jaGFpbiwgTk8gaG9wIHRyYW5zYWN0aW9uKVxuICAgIC8vICAgTWVzc2FnZSBoYXNoIChTSEEtMjU2KTogZjFhZmQ3YmIzZGYyMDE5ZWU2MWI0MTMzNGFiZjk1MTcyZDQ2OWQxOC4uLlxuICAgIC8vICAgU2lnbmF0dXJlIHI6IGZhZTQ0Y2E4OWU3YTBkM2VmZmQwOTEyYzE2ZDY5NzM1YWFiYmM3M2FkMmQxNDBmZmEyYzNiNDZhZjQ4ZDE1OWNcbiAgICAvLyAgIFNpZ25hdHVyZSBzOiAxZGVjMDVkMGQ0NzdhNWIyNDVhMGEyZTVmM2E2N2U3NTQ4OWZmOWI5OGIyOTc4MGZjNzU3YjEyZDlmNjg3ZGIzXG4gICAgLy8gICBSZWNvdmVyeTogMFxuICAgIC8vICAgRXhwb3J0IFRYIElEOiAydERRbVFVdERNeVZXZThCbzM2eUhYeWtWMlJNdmg4cmZ0M3RvNVFzZ29OaEFUTURYelxuICAgIC8vICAgTmV0d29yazogQ29zdG9uMiBUZXN0bmV0IChJRDogMTE0KVxuICAgIGNvbnN0IHNlcmlhbGl6ZWRUeEhleCA9XG4gICAgICAnMDAwMDAwMDAwMDAxMDAwMDAwNzI3OGRiNWMzMGJlZDA0YzA1Y2UyMDkxNzk4MTI4NTBiYmIzZmU2ZDQ2ZDdlZWYzNzQ0ZDgxNGMwZGE1NTUyNDc5JyArXG4gICAgICAnMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMjhhMDU5MzNkYzc2JyArXG4gICAgICAnZTRlNmMyNWYzNWQ1YzliMmE1ODc2OTcwMGU3NjAwMDAwMDAwMDJmZjNkMTY1ODczNGY5NGFmODcxYzNkMTMxYjU2MTMxYjZmYjdhMDI5MWVhYycgK1xuICAgICAgJ2FkZDI2MWU2OWRmYjQyYTljZGY2ZjdmZGRkMDAwMDAwMDAwMDAwMDAwOTAwMDAwMDAxNTg3MzRmOTRhZjg3MWMzZDEzMWI1NjEzMWI2ZmI3YTAyOScgK1xuICAgICAgJzFlYWNhZGQyNjFlNjlkZmI0MmE5Y2RmNmY3ZmRkZDAwMDAwMDA3MDAwMDAwMDAwMmZhZjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjAwMDAwMDAzJyArXG4gICAgICAnMTJjYjMyZWFmOTI1NTMwNjRkYjk4ZDI3MWI1NmNiYTA3OWVjNzhmNWE2ZTBjMWFiZDAxMzJmNzBlZmI3N2UyMjc0NjM3ZmYzMzZhMjlhNTdjMzg2JyArXG4gICAgICAnZDU4ZDA5YTlhZTc3Y2YxY2YwN2JmMWM5ZGU0NGViYjBjOWYzJztcbiAgICAvLyBTSEEtMjU2KHNlcmlhbGl6ZWRUeEhleCBieXRlcykg4oCUIHNhbWUgYXMgRmxhcmVKUyB1bnNpZ25lZFR4LnRvQnl0ZXMoKSDihpIgc2hhMjU2XG4gICAgY29uc3Qgc2lnbmFibGVIZXggPSBjcmVhdGVIYXNoKCdzaGEyNTYnKS51cGRhdGUoQnVmZmVyLmZyb20oc2VyaWFsaXplZFR4SGV4LCAnaGV4JykpLmRpZ2VzdCgnaGV4Jyk7XG4gICAgY29uc3QgZGVyaXZhdGlvblBhdGggPSAnbS8wJztcblxuICAgIC8vIFZhbGlkYXRlIGZpeHR1cmUgcHJvcGVydGllcyBtYXRjaCBzYW5kYm94IGV4cGVjdGF0aW9uczpcbiAgICAvLyAtIHNlcmlhbGl6ZWRUeEhleCBzdGFydHMgd2l0aCBBdmFsYW5jaGUgY29kZWMgdHlwZSBJRCAoMHgwMDAwKVxuICAgIC8vIC0gc2lnbmFibGVIZXggaXMgZXhhY3RseSA2NCBoZXggY2hhcnMgKDMyLWJ5dGUgU0hBLTI1NiBkaWdlc3QpXG4gICAgYXNzZXJ0Lm9rKHNlcmlhbGl6ZWRUeEhleC5zdGFydHNXaXRoKCcwMDAwJyksICdGaXh0dXJlIG11c3Qgc3RhcnQgd2l0aCBBdmFsYW5jaGUgY29kZWMgcHJlZml4Jyk7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKHNpZ25hYmxlSGV4Lmxlbmd0aCwgNjQsICdzaWduYWJsZUhleCBtdXN0IGJlIDMyLWJ5dGUgU0hBLTI1NiAoNjQgaGV4IGNoYXJzKScpO1xuICAgIC8vIFZlcmlmeSBrZWNjYWsyNTYoc2lnbmFibGVIZXgpIGRpZmZlcnMg4oCUIHByb3ZlcyBza2lwcGluZyBoYXNoIG1hdHRlcnNcbiAgICBjb25zdCBrZWNjYWtIYXNoID0gY3JlYXRlS2VjY2FrSGFzaCgna2VjY2FrMjU2JykudXBkYXRlKEJ1ZmZlci5mcm9tKHNpZ25hYmxlSGV4LCAnaGV4JykpLmRpZ2VzdCgnaGV4Jyk7XG4gICAgYXNzZXJ0Lm5vdFN0cmljdEVxdWFsKHNpZ25hYmxlSGV4LCBrZWNjYWtIYXNoLCAnU0hBLTI1NiBhbmQga2VjY2FrMjU2IGhhc2hlcyBtdXN0IGRpZmZlcicpO1xuXG4gICAgLy8gcm91bmQgMVxuICAgIGNvbnN0IHJlcU1QQ3YyU2lnbmluZ1JvdW5kMSA9IHtcbiAgICAgIHR4UmVxdWVzdDoge1xuICAgICAgICB0eFJlcXVlc3RJZDogJ2Zsci1leHBvcnQtYzJwJyxcbiAgICAgICAgYXBpVmVyc2lvbjogJ2Z1bGwnLFxuICAgICAgICB3YWxsZXRJZDogd2FsbGV0SUQsXG4gICAgICAgIHRyYW5zYWN0aW9uczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHVuc2lnbmVkVHg6IHtcbiAgICAgICAgICAgICAgZGVyaXZhdGlvblBhdGgsXG4gICAgICAgICAgICAgIHNpZ25hYmxlSGV4LFxuICAgICAgICAgICAgICBzZXJpYWxpemVkVHhIZXgsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc2lnbmF0dXJlU2hhcmVzOiBbXSxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgfSxcbiAgICAgIHBydjogdXNlclNoYXJlLnRvU3RyaW5nKCdiYXNlNjQnKSxcbiAgICAgIHdhbGxldFBhc3NwaHJhc2UsXG4gICAgfTtcblxuICAgIGNvbnN0IHJlc01QQ3YyU2lnbmluZ1JvdW5kMSA9IGF3YWl0IGVjZHNhTVBDdjJVdGlscy5jcmVhdGVPZmZsaW5lUm91bmQxU2hhcmUocmVxTVBDdjJTaWduaW5nUm91bmQxIGFzIGFueSk7XG4gICAgcmVzTVBDdjJTaWduaW5nUm91bmQxLnNob3VsZC5oYXZlLnByb3BlcnR5KCdzaWduYXR1cmVTaGFyZVJvdW5kMScpO1xuICAgIHJlc01QQ3YyU2lnbmluZ1JvdW5kMS5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgnZW5jcnlwdGVkUm91bmQxU2Vzc2lvbicpO1xuICAgIHJlc01QQ3YyU2lnbmluZ1JvdW5kMS5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgnZW5jcnlwdGVkVXNlckdwZ1BydktleScpO1xuXG4gICAgY29uc3QgZW5jcnlwdGVkUm91bmQxU2Vzc2lvbiA9IHJlc01QQ3YyU2lnbmluZ1JvdW5kMS5lbmNyeXB0ZWRSb3VuZDFTZXNzaW9uO1xuICAgIGNvbnN0IGVuY3J5cHRlZFVzZXJHcGdQcnZLZXkgPSByZXNNUEN2MlNpZ25pbmdSb3VuZDEuZW5jcnlwdGVkVXNlckdwZ1BydktleTtcblxuICAgIC8vIEJpdEdvL0hTTSBwYXJ0eSB1c2VzIHRoZSByYXcgU0hBLTI1NiBoYXNoIGRpcmVjdGx5IChubyBrZWNjYWsyNTYpLlxuICAgIC8vIFRoaXMgbWF0Y2hlcyBXUCdzIE1QQ3YyU2lnbmVyIGlzUHJlSGFzaGVkPXRydWUgcGF0aCB3aGVyZVxuICAgIC8vIHR4SGFzaCA9IHNpZ25hYmxlTWF0ZXJpYWwgKHJhdyBzaWduYWJsZUhleCBieXRlcykuXG4gICAgLy8gSWYgdGhlIFNESyBpbmNvcnJlY3RseSBhcHBsaWVkIGtlY2NhazI1NiwgdXNlciBwYXJ0eSB3b3VsZCB1c2VcbiAgICAvLyBrZWNjYWsyNTYoU0hBLTI1Nih0eEJvZHkpKSB3aGlsZSBIU00gdXNlcyBTSEEtMjU2KHR4Qm9keSkg4oCUIHRoZVxuICAgIC8vIHR3byBES0xTIHBhcnRpZXMgd291bGQgZGlzYWdyZWUsIHByb2R1Y2luZyBhbiBpbnZhbGlkIGNvbWJpbmVkIHNpZy5cbiAgICBjb25zdCBoYXNoQnVmZmVyID0gQnVmZmVyLmZyb20oc2lnbmFibGVIZXgsICdoZXgnKTtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwoaGFzaEJ1ZmZlci5sZW5ndGgsIDMyLCAnREtMUyBtZXNzYWdlIGhhc2ggbXVzdCBiZSAzMiBieXRlcycpO1xuICAgIGNvbnN0IGJpdGdvU2Vzc2lvbiA9IG5ldyBEa2xzRHNnLkRzZyhiaXRnb1NoYXJlLCAyLCBkZXJpdmF0aW9uUGF0aCwgaGFzaEJ1ZmZlcik7XG5cbiAgICBjb25zdCB0eFJlcXVlc3RSb3VuZDEgPSBhd2FpdCBzaWduQml0Z29NUEN2MlJvdW5kMShcbiAgICAgIGJpdGdvU2Vzc2lvbixcbiAgICAgIHJlcU1QQ3YyU2lnbmluZ1JvdW5kMS50eFJlcXVlc3QgYXMgYW55LFxuICAgICAgcmVzTVBDdjJTaWduaW5nUm91bmQxLnNpZ25hdHVyZVNoYXJlUm91bmQxLFxuICAgICAgcmVzTVBDdjJTaWduaW5nUm91bmQxLnVzZXJHcGdQdWJLZXlcbiAgICApO1xuICAgIGFzc2VydC5vayhcbiAgICAgIHR4UmVxdWVzdFJvdW5kMS50cmFuc2FjdGlvbnMgJiZcbiAgICAgICAgdHhSZXF1ZXN0Um91bmQxLnRyYW5zYWN0aW9ucy5sZW5ndGggPT09IDEgJiZcbiAgICAgICAgdHhSZXF1ZXN0Um91bmQxLnRyYW5zYWN0aW9uc1swXS5zaWduYXR1cmVTaGFyZXMubGVuZ3RoID09PSAyXG4gICAgKTtcblxuICAgIC8vIHJvdW5kIDJcbiAgICBjb25zdCByZXFNUEN2MlNpZ25pbmdSb3VuZDIgPSB7XG4gICAgICAuLi5yZXFNUEN2MlNpZ25pbmdSb3VuZDEsXG4gICAgICB0eFJlcXVlc3Q6IHR4UmVxdWVzdFJvdW5kMSxcbiAgICAgIGVuY3J5cHRlZFJvdW5kMVNlc3Npb24sXG4gICAgICBlbmNyeXB0ZWRVc2VyR3BnUHJ2S2V5LFxuICAgICAgYml0Z29QdWJsaWNHcGdLZXk6IGJpdGdvR3BnS2V5LnB1YmxpYyxcbiAgICB9O1xuXG4gICAgY29uc3QgcmVzTVBDdjJTaWduaW5nUm91bmQyID0gYXdhaXQgZWNkc2FNUEN2MlV0aWxzLmNyZWF0ZU9mZmxpbmVSb3VuZDJTaGFyZShyZXFNUEN2MlNpZ25pbmdSb3VuZDIgYXMgYW55KTtcbiAgICByZXNNUEN2MlNpZ25pbmdSb3VuZDIuc2hvdWxkLmhhdmUucHJvcGVydHkoJ3NpZ25hdHVyZVNoYXJlUm91bmQyJyk7XG4gICAgcmVzTVBDdjJTaWduaW5nUm91bmQyLnNob3VsZC5oYXZlLnByb3BlcnR5KCdlbmNyeXB0ZWRSb3VuZDJTZXNzaW9uJyk7XG5cbiAgICBjb25zdCBlbmNyeXB0ZWRSb3VuZDJTZXNzaW9uID0gcmVzTVBDdjJTaWduaW5nUm91bmQyLmVuY3J5cHRlZFJvdW5kMlNlc3Npb247XG5cbiAgICBjb25zdCB7IHR4UmVxdWVzdDogdHhSZXF1ZXN0Um91bmQyLCBiaXRnb01zZzQgfSA9IGF3YWl0IHNpZ25CaXRnb01QQ3YyUm91bmQyKFxuICAgICAgYml0Z29TZXNzaW9uLFxuICAgICAgcmVxTVBDdjJTaWduaW5nUm91bmQyLnR4UmVxdWVzdCxcbiAgICAgIHJlc01QQ3YyU2lnbmluZ1JvdW5kMi5zaWduYXR1cmVTaGFyZVJvdW5kMixcbiAgICAgIHJlc01QQ3YyU2lnbmluZ1JvdW5kMS51c2VyR3BnUHViS2V5XG4gICAgKTtcbiAgICBhc3NlcnQub2soXG4gICAgICB0eFJlcXVlc3RSb3VuZDIudHJhbnNhY3Rpb25zICYmXG4gICAgICAgIHR4UmVxdWVzdFJvdW5kMi50cmFuc2FjdGlvbnMubGVuZ3RoID09PSAxICYmXG4gICAgICAgIHR4UmVxdWVzdFJvdW5kMi50cmFuc2FjdGlvbnNbMF0uc2lnbmF0dXJlU2hhcmVzLmxlbmd0aCA9PT0gNFxuICAgICk7XG4gICAgYml0Z29Nc2c0LnNob3VsZC5oYXZlLnByb3BlcnR5KCdzaWduYXR1cmVSJyk7XG5cbiAgICAvLyByb3VuZCAzXG4gICAgY29uc3QgcmVxTVBDdjJTaWduaW5nUm91bmQzID0ge1xuICAgICAgLi4ucmVxTVBDdjJTaWduaW5nUm91bmQyLFxuICAgICAgdHhSZXF1ZXN0OiB0eFJlcXVlc3RSb3VuZDIsXG4gICAgICBlbmNyeXB0ZWRSb3VuZDFTZXNzaW9uOiBudWxsLFxuICAgICAgZW5jcnlwdGVkUm91bmQyU2Vzc2lvbixcbiAgICB9O1xuXG4gICAgY29uc3QgcmVzTVBDdjJTaWduaW5nUm91bmQzID0gYXdhaXQgZWNkc2FNUEN2MlV0aWxzLmNyZWF0ZU9mZmxpbmVSb3VuZDNTaGFyZShyZXFNUEN2MlNpZ25pbmdSb3VuZDMgYXMgYW55KTtcbiAgICByZXNNUEN2MlNpZ25pbmdSb3VuZDMuc2hvdWxkLmhhdmUucHJvcGVydHkoJ3NpZ25hdHVyZVNoYXJlUm91bmQzJyk7XG5cbiAgICBjb25zdCB7IHVzZXJNc2c0IH0gPSBhd2FpdCBzaWduQml0Z29NUEN2MlJvdW5kMyhcbiAgICAgIGJpdGdvU2Vzc2lvbixcbiAgICAgIHJlc01QQ3YyU2lnbmluZ1JvdW5kMy5zaWduYXR1cmVTaGFyZVJvdW5kMyxcbiAgICAgIHJlc01QQ3YyU2lnbmluZ1JvdW5kMS51c2VyR3BnUHViS2V5XG4gICAgKTtcblxuICAgIC8vIEJvdGggcGFydGllcyBtdXN0IHByb2R1Y2UgbWF0Y2hpbmcgUiB2YWx1ZXMgZm9yIGEgdmFsaWQgY29tYmluZWQgc2lnbmF0dXJlXG4gICAgYXNzZXJ0Lm9rKHVzZXJNc2c0LmRhdGEubXNnNC5zaWduYXR1cmVSID09PSBiaXRnb01zZzQuc2lnbmF0dXJlUiwgJ1VzZXIgYW5kIEJpdEdvIHNpZ25hdHVyZXNSIGRvIG5vdCBtYXRjaCcpO1xuXG4gICAgY29uc3QgZGVzZXJpYWxpemVkQml0Z29Nc2c0ID0gRGtsc1R5cGVzLmRlc2VyaWFsaXplTWVzc2FnZXMoe1xuICAgICAgcDJwTWVzc2FnZXM6IFtdLFxuICAgICAgYnJvYWRjYXN0TWVzc2FnZXM6IFtiaXRnb01zZzRdLFxuICAgIH0pO1xuXG4gICAgY29uc3QgZGVzZXJpYWxpemVkVXNlck1zZzQgPSBEa2xzVHlwZXMuZGVzZXJpYWxpemVNZXNzYWdlcyh7XG4gICAgICBwMnBNZXNzYWdlczogW10sXG4gICAgICBicm9hZGNhc3RNZXNzYWdlczogW1xuICAgICAgICB7XG4gICAgICAgICAgZnJvbTogdXNlck1zZzQuZGF0YS5tc2c0LmZyb20sXG4gICAgICAgICAgcGF5bG9hZDogdXNlck1zZzQuZGF0YS5tc2c0Lm1lc3NhZ2UsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH0pO1xuXG4gICAgY29uc3QgY29tYmluZWRTaWdVc2luZ1V0aWwgPSBEa2xzVXRpbHMuY29tYmluZVBhcnRpYWxTaWduYXR1cmVzKFxuICAgICAgW2Rlc2VyaWFsaXplZFVzZXJNc2c0LmJyb2FkY2FzdE1lc3NhZ2VzWzBdLnBheWxvYWQsIGRlc2VyaWFsaXplZEJpdGdvTXNnNC5icm9hZGNhc3RNZXNzYWdlc1swXS5wYXlsb2FkXSxcbiAgICAgIEJ1ZmZlci5mcm9tKHVzZXJNc2c0LmRhdGEubXNnNC5zaWduYXR1cmVSLCAnYmFzZTY0JykudG9TdHJpbmcoJ2hleCcpXG4gICAgKTtcblxuICAgIC8vIENvbWJpbmVkIHNpZ25hdHVyZSBtdXN0IGhhdmUgdmFsaWQgUiBhbmQgUyBjb21wb25lbnRzICgzMiBieXRlcyBlYWNoKVxuICAgIGFzc2VydC5zdHJpY3RFcXVhbChjb21iaW5lZFNpZ1VzaW5nVXRpbC5SLmxlbmd0aCwgMzIsICdTaWduYXR1cmUgUiBtdXN0IGJlIDMyIGJ5dGVzJyk7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKGNvbWJpbmVkU2lnVXNpbmdVdGlsLlMubGVuZ3RoLCAzMiwgJ1NpZ25hdHVyZSBTIG11c3QgYmUgMzIgYnl0ZXMnKTtcblxuICAgIC8vIFZlcmlmeSB3aXRoIHNob3VsZEhhc2g9ZmFsc2Ug4oCUIHNpZ25hYmxlSGV4IGlzIGFscmVhZHkgU0hBLTI1Nih0eEJvZHkpLlxuICAgIC8vIFRoaXMgbWlycm9ycyBXUCdzIGNvbWJpbmVTaWdTaGFyZXNNUEN2MiB3aGVyZSBzaG91bGRIYXNoPWZhbHNlIGZvclxuICAgIC8vIHByZS1oYXNoZWQgQXZhbGFuY2hlIGF0b21pYyB0cmFuc2FjdGlvbnMgKGlzU2lnbmFibGVQcmVIYXNoZWQ9dHJ1ZSkuXG4gICAgLy8gT24tY2hhaW4sIEF2YWxhbmNoZSB2ZXJpZmllczogZWNkc2FSZWNvdmVyKFNIQS0yNTYodHhCb2R5KSkgPT0gc2lnbmVyUHViS2V5XG4gICAgY29uc3QgY29udmVydGVkU2lnbmF0dXJlID0gRGtsc1V0aWxzLnZlcmlmeUFuZENvbnZlcnREa2xzU2lnbmF0dXJlKFxuICAgICAgQnVmZmVyLmZyb20oc2lnbmFibGVIZXgsICdoZXgnKSxcbiAgICAgIGNvbWJpbmVkU2lnVXNpbmdVdGlsLFxuICAgICAgRGtsc1R5cGVzLmdldENvbW1vbktleWNoYWluKHVzZXJTaGFyZSksXG4gICAgICBkZXJpdmF0aW9uUGF0aCxcbiAgICAgIGNyZWF0ZUhhc2goJ3NoYTI1NicpIGFzIEhhc2gsXG4gICAgICBmYWxzZSAvLyBzaG91bGRIYXNoPWZhbHNlOiBtZXNzYWdlIGlzIGFscmVhZHkgU0hBLTI1Nih0eEJvZHkpXG4gICAgKTtcbiAgICBhc3NlcnQub2soY29udmVydGVkU2lnbmF0dXJlLCAnUHJlLWhhc2hlZCBBdmFsYW5jaGUgYXRvbWljIHNpZ25hdHVyZSBpcyBub3QgdmFsaWQnKTtcbiAgICAvLyBGb3JtYXQ6IHJlY2lkOlJfaGV4OlNfaGV4OnB1YmxpY0tleV9oZXhcbiAgICAvLyBTYW5kYm94IHByb2R1Y2VzIHRoZSBzYW1lIHN0cnVjdHVyZSDigJQgZS5nLiBQ4oaSQyBleHBvcnQ6XG4gICAgLy8gICByOiBmYWU0NGNhODllN2EwZDNlZmZkMDkxMmMxNmQ2OTczNWFhYmJjNzNhZDJkMTQwZmZhMmMzYjQ2YWY0OGQxNTljICgzMiBieXRlcylcbiAgICAvLyAgIHM6IDFkZWMwNWQwZDQ3N2E1YjI0NWEwYTJlNWYzYTY3ZTc1NDg5ZmY5Yjk4YjI5NzgwZmM3NTdiMTJkOWY2ODdkYjMgKDMyIGJ5dGVzKVxuICAgIC8vICAgUmVjb3Zlcnk6IDBcbiAgICBjb25zdCBzaWdQYXJ0cyA9IGNvbnZlcnRlZFNpZ25hdHVyZS5zcGxpdCgnOicpO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChzaWdQYXJ0cy5sZW5ndGgsIDQsICdTaWduYXR1cmUgbXVzdCBiZSByZWNpZDpSOlM6cHVia2V5IGZvcm1hdCcpO1xuICAgIGFzc2VydC5vayhbJzAnLCAnMSddLmluY2x1ZGVzKHNpZ1BhcnRzWzBdKSwgJ1JlY292ZXJ5IElEIG11c3QgYmUgMCBvciAxJyk7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKHNpZ1BhcnRzWzFdLmxlbmd0aCwgNjQsICdTaWduYXR1cmUgUiBtdXN0IGJlIDMyIGJ5dGVzIGhleCcpO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChzaWdQYXJ0c1syXS5sZW5ndGgsIDY0LCAnU2lnbmF0dXJlIFMgbXVzdCBiZSAzMiBieXRlcyBoZXgnKTtcbiAgfSk7XG5cbiAgaXQoJ3NpZ25SZXF1ZXN0QmFzZSAoaG90IHdhbGxldCBwYXRoKSBzaG91bGQgc2tpcCBrZWNjYWsyNTYgZm9yIEF2YWxhbmNoZSBhdG9taWMgdHgnLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3Qgc2VyaWFsaXplZFR4SGV4ID1cbiAgICAgICcwMDAwMDAwMDAwMDEwMDAwMDA3Mjc4ZGI1YzMwYmVkMDRjMDVjZTIwOTE3OTgxMjg1MGJiYjNmZTZkNDZkN2VlZjM3NDRkODE0YzBkYTU1NTI0NzknICtcbiAgICAgICcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEyOGEwNTkzM2RjNzYnICtcbiAgICAgICdlNGU2YzI1ZjM1ZDVjOWIyYTU4NzY5NzAwZTc2MDAwMDAwMDAwMmZmM2QxNjU4NzM0Zjk0YWY4NzFjM2QxMzFiNTYxMzFiNmZiN2EwMjkxZWFjJyArXG4gICAgICAnYWRkMjYxZTY5ZGZiNDJhOWNkZjZmN2ZkZGQwMDAwMDAwMDAwMDAwMDA5MDAwMDAwMDE1ODczNGY5NGFmODcxYzNkMTMxYjU2MTMxYjZmYjdhMDI5JyArXG4gICAgICAnMWVhY2FkZDI2MWU2OWRmYjQyYTljZGY2ZjdmZGRkMDAwMDAwMDcwMDAwMDAwMDAyZmFmMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMDAwMDAwMDMnICtcbiAgICAgICcxMmNiMzJlYWY5MjU1MzA2NGRiOThkMjcxYjU2Y2JhMDc5ZWM3OGY1YTZlMGMxYWJkMDEzMmY3MGVmYjc3ZTIyNzQ2MzdmZjMzNmEyOWE1N2MzODYnICtcbiAgICAgICdkNThkMDlhOWFlNzdjZjFjZjA3YmYxYzlkZTQ0ZWJiMGM5ZjMnO1xuICAgIGNvbnN0IHNpZ25hYmxlSGV4ID0gY3JlYXRlSGFzaCgnc2hhMjU2JykudXBkYXRlKEJ1ZmZlci5mcm9tKHNlcmlhbGl6ZWRUeEhleCwgJ2hleCcpKS5kaWdlc3QoJ2hleCcpO1xuICAgIGNvbnN0IGRlcml2YXRpb25QYXRoID0gJ20vMCc7XG5cbiAgICBjb25zdCBtb2NrQmdXaXRoUG9zdCA9IHt9IGFzIEJpdEdvQmFzZTtcbiAgICBtb2NrQmdXaXRoUG9zdC5nZXRFbnYgPSBzaW5vbi5zdHViKCkucmV0dXJucygndGVzdCcpO1xuICAgIG1vY2tCZ1dpdGhQb3N0LnNldFJlcXVlc3RUcmFjZXIgPSBzaW5vbi5zdHViKCk7XG4gICAgbW9ja0JnV2l0aFBvc3QuZW5jcnlwdCA9IHNpbm9uLnN0dWIoKS5yZXR1cm5zKCdlbmNyeXB0ZWQnKTtcbiAgICBtb2NrQmdXaXRoUG9zdC5lbmNyeXB0ID0gc2lub24uc3R1YigpLnJlc29sdmVzKCdlbmNyeXB0ZWQnKTtcbiAgICBtb2NrQmdXaXRoUG9zdC5kZWNyeXB0ID0gc2lub24uc3R1YigpLnJldHVybnMoJ2RlY3J5cHRlZCcpO1xuICAgIG1vY2tCZ1dpdGhQb3N0LmRlY3J5cHQgPSBzaW5vbi5zdHViKCkucmVzb2x2ZXMoJ2RlY3J5cHRlZCcpO1xuICAgIG1vY2tCZ1dpdGhQb3N0LnBvc3QgPSBzaW5vbi5zdHViKCkucmV0dXJucyh7XG4gICAgICBzZW5kOiBzaW5vbi5zdHViKCkucmV0dXJuc1RoaXMoKSxcbiAgICAgIHNldDogc2lub24uc3R1YigpLnJldHVybnNUaGlzKCksXG4gICAgICByZXN1bHQ6IHNpbm9uLnN0dWIoKS5yZWplY3RzKG5ldyBFcnJvcignbW9jazogSFRUUCBub3QgYXZhaWxhYmxlJykpLFxuICAgIH0pO1xuXG4gICAgY29uc3QgaGFzaEZ1bmN0aW9uU3B5ID0gc2lub24uc3R1YigpLmNhbGxzRmFrZSgoKSA9PiBjcmVhdGVLZWNjYWtIYXNoKCdrZWNjYWsyNTYnKSBhcyBIYXNoKTtcbiAgICBjb25zdCBtb2NrQ29pbkZvckhvdFdhbGxldCA9IHtcbiAgICAgIGdldEhhc2hGdW5jdGlvbjogaGFzaEZ1bmN0aW9uU3B5LFxuICAgICAgdmVyaWZ5VHJhbnNhY3Rpb246IHNpbm9uLnN0dWIoKS5yZXNvbHZlcyh0cnVlKSxcbiAgICAgIGdldE1QQ0FsZ29yaXRobTogc2lub24uc3R1YigpLnJldHVybnMoJ2VjZHNhJyksXG4gICAgICBnZXRDb25maWc6IHNpbm9uLnN0dWIoKS5yZXR1cm5zKHsgZmFtaWx5OiAnZmxycCcgfSksXG4gICAgICBpc1NpZ25hYmxlUHJlSGFzaGVkOiAodW5zaWduZWRUeDogeyBzZXJpYWxpemVkVHhIZXg/OiBzdHJpbmcgfSkgPT5cbiAgICAgICAgdW5zaWduZWRUeC5zZXJpYWxpemVkVHhIZXg/LnN0YXJ0c1dpdGgoJzAwMDAnKSA/PyBmYWxzZSxcbiAgICB9IGFzIHVua25vd24gYXMgSUJhc2VDb2luO1xuXG4gICAgY29uc3QgbW9ja1dhbGxldCA9IHtcbiAgICAgIGlkOiBzaW5vbi5zdHViKCkucmV0dXJucyh3YWxsZXRJRCksXG4gICAgICBtdWx0aXNpZ1R5cGU6IHNpbm9uLnN0dWIoKS5yZXR1cm5zKCd0c3MnKSxcbiAgICAgIG11bHRpc2lnVHlwZVZlcnNpb246IHNpbm9uLnN0dWIoKS5yZXR1cm5zKCdNUEN2MicpLFxuICAgIH07XG5cbiAgICBjb25zdCBob3RXYWxsZXRVdGlscyA9IG5ldyBFY2RzYU1QQ3YyVXRpbHMobW9ja0JnV2l0aFBvc3QsIG1vY2tDb2luRm9ySG90V2FsbGV0LCBtb2NrV2FsbGV0IGFzIGFueSk7XG4gICAgc2lub24uc3R1Yihob3RXYWxsZXRVdGlscyBhcyBhbnksICdwaWNrQml0Z29QdWJHcGdLZXlGb3JTaWduaW5nJykucmVzb2x2ZXMoYml0Z29HcGdLZXkucHVibGljKTtcblxuICAgIGNvbnN0IHR4UmVxdWVzdCA9IHtcbiAgICAgIHR4UmVxdWVzdElkOiAnZmxycC1leHBvcnQtdGVzdCcsXG4gICAgICBhcGlWZXJzaW9uOiAnZnVsbCcsXG4gICAgICB3YWxsZXRJZDogd2FsbGV0SUQsXG4gICAgICB0cmFuc2FjdGlvbnM6IFtcbiAgICAgICAge1xuICAgICAgICAgIHVuc2lnbmVkVHg6IHtcbiAgICAgICAgICAgIGRlcml2YXRpb25QYXRoLFxuICAgICAgICAgICAgc2lnbmFibGVIZXgsXG4gICAgICAgICAgICBzZXJpYWxpemVkVHhIZXgsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBzaWduYXR1cmVTaGFyZXM6IFtdLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9IGFzIHVua25vd24gYXMgVHhSZXF1ZXN0O1xuXG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGhvdFdhbGxldFV0aWxzLnNpZ25UeFJlcXVlc3Qoe1xuICAgICAgICB0eFJlcXVlc3QsXG4gICAgICAgIHR4UGFyYW1zOiB7IHJlY2lwaWVudHM6IFt7IGFkZHJlc3M6ICcweCcgKyAnMDAnLnJlcGVhdCgyMCksIGFtb3VudDogJzEwMDAnIH1dIH0sXG4gICAgICAgIHBydjogdXNlclNoYXJlLnRvU3RyaW5nKCdiYXNlNjQnKSxcbiAgICAgICAgcmVxSWQ6IHsgaW5jOiBzaW5vbi5zdHViKCksIHRvU3RyaW5nOiBzaW5vbi5zdHViKCkucmV0dXJucygndGVzdC1yZXEnKSB9IGFzIGFueSxcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGUpIHt9XG5cbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwoXG4gICAgICBoYXNoRnVuY3Rpb25TcHkuY2FsbENvdW50LFxuICAgICAgMCxcbiAgICAgICdnZXRIYXNoRnVuY3Rpb24gbXVzdCBOT1QgYmUgY2FsbGVkIGZvciBBdmFsYW5jaGUgYXRvbWljIHR4IChzZXJpYWxpemVkVHhIZXggc3RhcnRzIHdpdGggMDAwMCknXG4gICAgKTtcbiAgfSk7XG5cbiAgaXQoJ3NpZ25SZXF1ZXN0QmFzZSAoaG90IHdhbGxldCBwYXRoKSBzaG91bGQgYXBwbHkga2VjY2FrMjU2IGZvciByZWd1bGFyIEVWTSB0eCcsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBzZXJpYWxpemVkVHhIZXggPSAnZjg2YzgwODUwNGE4MTdjODAwODI1MjA4OTQnICsgJzAwJy5yZXBlYXQoMjApICsgJzgwODA4MDgwJztcbiAgICBjb25zdCBzaWduYWJsZUhleCA9IHNlcmlhbGl6ZWRUeEhleDtcbiAgICBjb25zdCBkZXJpdmF0aW9uUGF0aCA9ICdtLzAnO1xuXG4gICAgYXNzZXJ0Lm9rKCFzZXJpYWxpemVkVHhIZXguc3RhcnRzV2l0aCgnMDAwMCcpLCAnRVZNIHR4IG11c3Qgbm90IHN0YXJ0IHdpdGggQXZhbGFuY2hlIHByZWZpeCcpO1xuXG4gICAgY29uc3QgbW9ja0JnV2l0aFBvc3QgPSB7fSBhcyBCaXRHb0Jhc2U7XG4gICAgbW9ja0JnV2l0aFBvc3QuZ2V0RW52ID0gc2lub24uc3R1YigpLnJldHVybnMoJ3Rlc3QnKTtcbiAgICBtb2NrQmdXaXRoUG9zdC5zZXRSZXF1ZXN0VHJhY2VyID0gc2lub24uc3R1YigpO1xuICAgIG1vY2tCZ1dpdGhQb3N0LmVuY3J5cHQgPSBzaW5vbi5zdHViKCkucmV0dXJucygnZW5jcnlwdGVkJyk7XG4gICAgbW9ja0JnV2l0aFBvc3QuZW5jcnlwdCA9IHNpbm9uLnN0dWIoKS5yZXNvbHZlcygnZW5jcnlwdGVkJyk7XG4gICAgbW9ja0JnV2l0aFBvc3QuZGVjcnlwdCA9IHNpbm9uLnN0dWIoKS5yZXR1cm5zKCdkZWNyeXB0ZWQnKTtcbiAgICBtb2NrQmdXaXRoUG9zdC5kZWNyeXB0ID0gc2lub24uc3R1YigpLnJlc29sdmVzKCdkZWNyeXB0ZWQnKTtcbiAgICBtb2NrQmdXaXRoUG9zdC5wb3N0ID0gc2lub24uc3R1YigpLnJldHVybnMoe1xuICAgICAgc2VuZDogc2lub24uc3R1YigpLnJldHVybnNUaGlzKCksXG4gICAgICBzZXQ6IHNpbm9uLnN0dWIoKS5yZXR1cm5zVGhpcygpLFxuICAgICAgcmVzdWx0OiBzaW5vbi5zdHViKCkucmVqZWN0cyhuZXcgRXJyb3IoJ21vY2s6IEhUVFAgbm90IGF2YWlsYWJsZScpKSxcbiAgICB9KTtcblxuICAgIGNvbnN0IGhhc2hGdW5jdGlvblNweSA9IHNpbm9uLnN0dWIoKS5jYWxsc0Zha2UoKCkgPT4gY3JlYXRlS2VjY2FrSGFzaCgna2VjY2FrMjU2JykgYXMgSGFzaCk7XG4gICAgY29uc3QgbW9ja0NvaW5Gb3JFdm1XYWxsZXQgPSB7XG4gICAgICBnZXRIYXNoRnVuY3Rpb246IGhhc2hGdW5jdGlvblNweSxcbiAgICAgIHZlcmlmeVRyYW5zYWN0aW9uOiBzaW5vbi5zdHViKCkucmVzb2x2ZXModHJ1ZSksXG4gICAgICBnZXRNUENBbGdvcml0aG06IHNpbm9uLnN0dWIoKS5yZXR1cm5zKCdlY2RzYScpLFxuICAgICAgZ2V0Q29uZmlnOiBzaW5vbi5zdHViKCkucmV0dXJucyh7IGZhbWlseTogJ2ZscicgfSksXG4gICAgfSBhcyB1bmtub3duIGFzIElCYXNlQ29pbjtcblxuICAgIGNvbnN0IG1vY2tXYWxsZXQgPSB7XG4gICAgICBpZDogc2lub24uc3R1YigpLnJldHVybnMod2FsbGV0SUQpLFxuICAgICAgbXVsdGlzaWdUeXBlOiBzaW5vbi5zdHViKCkucmV0dXJucygndHNzJyksXG4gICAgICBtdWx0aXNpZ1R5cGVWZXJzaW9uOiBzaW5vbi5zdHViKCkucmV0dXJucygnTVBDdjInKSxcbiAgICB9O1xuXG4gICAgY29uc3QgZXZtVXRpbHMgPSBuZXcgRWNkc2FNUEN2MlV0aWxzKG1vY2tCZ1dpdGhQb3N0LCBtb2NrQ29pbkZvckV2bVdhbGxldCwgbW9ja1dhbGxldCBhcyBhbnkpO1xuICAgIHNpbm9uLnN0dWIoZXZtVXRpbHMgYXMgYW55LCAncGlja0JpdGdvUHViR3BnS2V5Rm9yU2lnbmluZycpLnJlc29sdmVzKGJpdGdvR3BnS2V5LnB1YmxpYyk7XG5cbiAgICBjb25zdCB0eFJlcXVlc3QgPSB7XG4gICAgICB0eFJlcXVlc3RJZDogJ2Zsci1ldm0tdGVzdCcsXG4gICAgICBhcGlWZXJzaW9uOiAnZnVsbCcsXG4gICAgICB3YWxsZXRJZDogd2FsbGV0SUQsXG4gICAgICB0cmFuc2FjdGlvbnM6IFtcbiAgICAgICAge1xuICAgICAgICAgIHVuc2lnbmVkVHg6IHtcbiAgICAgICAgICAgIGRlcml2YXRpb25QYXRoLFxuICAgICAgICAgICAgc2lnbmFibGVIZXgsXG4gICAgICAgICAgICBzZXJpYWxpemVkVHhIZXgsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBzaWduYXR1cmVTaGFyZXM6IFtdLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9IGFzIHVua25vd24gYXMgVHhSZXF1ZXN0O1xuXG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGV2bVV0aWxzLnNpZ25UeFJlcXVlc3Qoe1xuICAgICAgICB0eFJlcXVlc3QsXG4gICAgICAgIHR4UGFyYW1zOiB7IHJlY2lwaWVudHM6IFt7IGFkZHJlc3M6ICcweCcgKyAnMDAnLnJlcGVhdCgyMCksIGFtb3VudDogJzEwMDAnIH1dIH0sXG4gICAgICAgIHBydjogdXNlclNoYXJlLnRvU3RyaW5nKCdiYXNlNjQnKSxcbiAgICAgICAgcmVxSWQ6IHsgaW5jOiBzaW5vbi5zdHViKCksIHRvU3RyaW5nOiBzaW5vbi5zdHViKCkucmV0dXJucygndGVzdC1yZXEnKSB9IGFzIGFueSxcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGUpIHt9XG5cbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwoXG4gICAgICBoYXNoRnVuY3Rpb25TcHkuY2FsbENvdW50LFxuICAgICAgMSxcbiAgICAgICdnZXRIYXNoRnVuY3Rpb24gbXVzdCBiZSBjYWxsZWQgZm9yIHJlZ3VsYXIgRVZNIHR4IChzZXJpYWxpemVkVHhIZXggZG9lcyBub3Qgc3RhcnQgd2l0aCAwMDAwKSdcbiAgICApO1xuICB9KTtcblxuICAvLyBSZWdyZXNzaW9uIHRlc3QgZm9yIENHRC0xODE1IC8gREVGSS02NjE6IHJlc29sdmVFZmZlY3RpdmVUeFBhcmFtcygpIHNwZWNpYWwtY2FzZXMgd3JhcC1uYXRpdmVcbiAgLy8gYW5kIHVud3JhcC1uYXRpdmUgc28gdGhlIG5vLXJlY2lwaWVudHMgZ3VhcmQgaW4gdmVyaWZ5VHNzVHJhbnNhY3Rpb24gZG9lc24ndCByZWplY3QgdGhlbS4gVGhhdFxuICAvLyBieXBhc3MgaXMgc2VjdXJpdHktc2Vuc2l0aXZlIChpdCdzIHdoYXQgbGV0cyBhIERlRmkgdmF1bHQgd3JhcC91bndyYXAgdHggc2tpcCByZWNpcGllbnRcbiAgLy8gdmVyaWZpY2F0aW9uKSwgc28gcGluIGl0IHRocm91Z2ggdGhlIHJlYWwgc2lnblJlcXVlc3RCYXNlKCkgLT4gcmVzb2x2ZUVmZmVjdGl2ZVR4UGFyYW1zKCkgLT5cbiAgLy8gdmVyaWZ5VHJhbnNhY3Rpb24oKSB3aXJpbmcgaW5zdGVhZCBvZiBvbmx5IHVuaXQtdGVzdGluZyByZXNvbHZlRWZmZWN0aXZlVHhQYXJhbXMoKSBpbiBpc29sYXRpb24uXG4gIC8vIHBlbmRpbmdBcHByb3ZhbC5hcHByb3ZlKCkgLT4gcmVjcmVhdGVUeFJlcXVlc3QoKSAtPiBzaWduVHhSZXF1ZXN0KCkgY2FycmllcyBubyB0eFBhcmFtcyBhdCBhbGwsXG4gIC8vIHNvIGludGVudFR5cGUgaXMgdGhlIE9OTFkgc291cmNlIG9mIHRoZSB0eXBlIGhlcmUg4oCUIGV4YWN0bHkgdGhlIHBhdGggdGhhdCBvbmx5IGV2ZXIgc2VlcyB0aGVcbiAgLy8ga2ViYWItY2FzZSBzcGVsbGluZyAoJ3dyYXAtbmF0aXZlJyAvICd1bndyYXAtbmF0aXZlJyksIG5ldmVyIHRoZSBjYW1lbENhc2UgJ3dyYXBOYXRpdmUnLyd1bndyYXBOYXRpdmUnLlxuICBbJ3dyYXAtbmF0aXZlJywgJ3Vud3JhcC1uYXRpdmUnXS5mb3JFYWNoKChpbnRlbnRUeXBlKSA9PiB7XG4gICAgaXQoYHNpZ25SZXF1ZXN0QmFzZSBzaG91bGQgdmVyaWZ5IGEgbm8tdHhQYXJhbXMgJHtpbnRlbnRUeXBlfSBpbnRlbnQgd2l0aG91dCByZXF1aXJpbmcgcmVjaXBpZW50c2AsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHNlcmlhbGl6ZWRUeEhleCA9ICdmODZjODA4NTA0YTgxN2M4MDA4MjUyMDg5NCcgKyAnMDAnLnJlcGVhdCgyMCkgKyAnODA4MDgwODAnO1xuICAgICAgY29uc3Qgc2lnbmFibGVIZXggPSBzZXJpYWxpemVkVHhIZXg7XG4gICAgICBjb25zdCBkZXJpdmF0aW9uUGF0aCA9ICdtLzAnO1xuXG4gICAgICBjb25zdCBtb2NrQmdXaXRoUG9zdCA9IHt9IGFzIEJpdEdvQmFzZTtcbiAgICAgIG1vY2tCZ1dpdGhQb3N0LmdldEVudiA9IHNpbm9uLnN0dWIoKS5yZXR1cm5zKCd0ZXN0Jyk7XG4gICAgICBtb2NrQmdXaXRoUG9zdC5zZXRSZXF1ZXN0VHJhY2VyID0gc2lub24uc3R1YigpO1xuICAgICAgbW9ja0JnV2l0aFBvc3QuZW5jcnlwdCA9IHNpbm9uLnN0dWIoKS5yZXNvbHZlcygnZW5jcnlwdGVkJyk7XG4gICAgICBtb2NrQmdXaXRoUG9zdC5kZWNyeXB0ID0gc2lub24uc3R1YigpLnJlc29sdmVzKCdkZWNyeXB0ZWQnKTtcbiAgICAgIG1vY2tCZ1dpdGhQb3N0LnBvc3QgPSBzaW5vbi5zdHViKCkucmV0dXJucyh7XG4gICAgICAgIHNlbmQ6IHNpbm9uLnN0dWIoKS5yZXR1cm5zVGhpcygpLFxuICAgICAgICBzZXQ6IHNpbm9uLnN0dWIoKS5yZXR1cm5zVGhpcygpLFxuICAgICAgICByZXN1bHQ6IHNpbm9uLnN0dWIoKS5yZWplY3RzKG5ldyBFcnJvcignbW9jazogSFRUUCBub3QgYXZhaWxhYmxlJykpLFxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IHZlcmlmeVRyYW5zYWN0aW9uU3B5ID0gc2lub24uc3R1YigpLnJlc29sdmVzKHRydWUpO1xuICAgICAgY29uc3QgbW9ja0NvaW5Gb3JXcmFwID0ge1xuICAgICAgICBnZXRIYXNoRnVuY3Rpb246IHNpbm9uLnN0dWIoKS5jYWxsc0Zha2UoKCkgPT4gY3JlYXRlS2VjY2FrSGFzaCgna2VjY2FrMjU2JykgYXMgSGFzaCksXG4gICAgICAgIHZlcmlmeVRyYW5zYWN0aW9uOiB2ZXJpZnlUcmFuc2FjdGlvblNweSxcbiAgICAgICAgZ2V0TVBDQWxnb3JpdGhtOiBzaW5vbi5zdHViKCkucmV0dXJucygnZWNkc2EnKSxcbiAgICAgICAgZ2V0Q29uZmlnOiBzaW5vbi5zdHViKCkucmV0dXJucyh7IGZhbWlseTogJ2h0ZXRoJyB9KSxcbiAgICAgIH0gYXMgdW5rbm93biBhcyBJQmFzZUNvaW47XG5cbiAgICAgIGNvbnN0IG1vY2tXYWxsZXQgPSB7XG4gICAgICAgIGlkOiBzaW5vbi5zdHViKCkucmV0dXJucyh3YWxsZXRJRCksXG4gICAgICAgIG11bHRpc2lnVHlwZTogc2lub24uc3R1YigpLnJldHVybnMoJ3RzcycpLFxuICAgICAgICBtdWx0aXNpZ1R5cGVWZXJzaW9uOiBzaW5vbi5zdHViKCkucmV0dXJucygnTVBDdjInKSxcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IHdyYXBVdGlscyA9IG5ldyBFY2RzYU1QQ3YyVXRpbHMobW9ja0JnV2l0aFBvc3QsIG1vY2tDb2luRm9yV3JhcCwgbW9ja1dhbGxldCBhcyBhbnkpO1xuICAgICAgc2lub24uc3R1Yih3cmFwVXRpbHMgYXMgYW55LCAncGlja0JpdGdvUHViR3BnS2V5Rm9yU2lnbmluZycpLnJlc29sdmVzKGJpdGdvR3BnS2V5LnB1YmxpYyk7XG5cbiAgICAgIC8vIE5vIHJlY2lwaWVudHMgYW55d2hlcmUgKG5laXRoZXIgdHhQYXJhbXMucmVjaXBpZW50cyBub3IgaW50ZW50LnJlY2lwaWVudHMpIOKAlCB0aGUgd3JhcC1uYXRpdmUvXG4gICAgICAvLyB1bndyYXAtbmF0aXZlIGNhbGxkYXRhIGlzIGJ1aWx0IHNlcnZlci1zaWRlIGZyb20gZGVmaVBhcmFtcywgcGVyIERlZmlWYXVsdC5zZW5kV3JhcEludGVudC5cbiAgICAgIGNvbnN0IHR4UmVxdWVzdCA9IHtcbiAgICAgICAgdHhSZXF1ZXN0SWQ6IGB3cmFwLW5hdGl2ZS10ZXN0LSR7aW50ZW50VHlwZX1gLFxuICAgICAgICBhcGlWZXJzaW9uOiAnZnVsbCcsXG4gICAgICAgIHdhbGxldElkOiB3YWxsZXRJRCxcbiAgICAgICAgaW50ZW50OiB7IGludGVudFR5cGUsIGRlZmlQYXJhbXM6IHsgdmF1bHRJZDogJ3ZsdC1nYWxheHktd2V0aCcsIGFtb3VudDogJzEwMDAwMDAwMDAwMDAwMDAwMDAnIH0gfSxcbiAgICAgICAgdHJhbnNhY3Rpb25zOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgdW5zaWduZWRUeDogeyBkZXJpdmF0aW9uUGF0aCwgc2lnbmFibGVIZXgsIHNlcmlhbGl6ZWRUeEhleCB9LFxuICAgICAgICAgICAgc2lnbmF0dXJlU2hhcmVzOiBbXSxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgfSBhcyB1bmtub3duIGFzIFR4UmVxdWVzdDtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgd3JhcFV0aWxzLnNpZ25UeFJlcXVlc3Qoe1xuICAgICAgICAgIHR4UmVxdWVzdCxcbiAgICAgICAgICAvLyBObyB0eFBhcmFtcyBhdCBhbGwg4oCUIG1pcnJvcnMgcGVuZGluZ0FwcHJvdmFsLmFwcHJvdmUoKSAtPiByZWNyZWF0ZVR4UmVxdWVzdCgpIC0+XG4gICAgICAgICAgLy8gc2lnblR4UmVxdWVzdCgpLCB0aGUgb25lIHNpZ25pbmcgcGF0aCB0aGF0IG9ubHkgZXZlciBzZWVzIHRoZSBrZWJhYi1jYXNlIGludGVudFR5cGUuXG4gICAgICAgICAgdHhQYXJhbXM6IHVuZGVmaW5lZCxcbiAgICAgICAgICBwcnY6IHVzZXJTaGFyZS50b1N0cmluZygnYmFzZTY0JyksXG4gICAgICAgICAgcmVxSWQ6IHsgaW5jOiBzaW5vbi5zdHViKCksIHRvU3RyaW5nOiBzaW5vbi5zdHViKCkucmV0dXJucygndGVzdC1yZXEnKSB9IGFzIGFueSxcbiAgICAgICAgfSk7XG4gICAgICB9IGNhdGNoIChlKSB7fVxuXG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoXG4gICAgICAgIHZlcmlmeVRyYW5zYWN0aW9uU3B5LmNhbGxDb3VudCxcbiAgICAgICAgMSxcbiAgICAgICAgJ3ZlcmlmeVRyYW5zYWN0aW9uIG11c3QgYmUgcmVhY2hlZDogcmVzb2x2ZUVmZmVjdGl2ZVR4UGFyYW1zIG11c3Qgbm90IHRocm93IGZvciBhIG5vLXJlY2lwaWVudHMgJyArXG4gICAgICAgICAgYCR7aW50ZW50VHlwZX0gaW50ZW50YFxuICAgICAgKTtcbiAgICAgIGNvbnN0IHZlcmlmeUNhbGxBcmdzID0gdmVyaWZ5VHJhbnNhY3Rpb25TcHkuZmlyc3RDYWxsLmFyZ3NbMF07XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwodmVyaWZ5Q2FsbEFyZ3MudHhQYXJhbXMudHlwZSwgaW50ZW50VHlwZSk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwodmVyaWZ5Q2FsbEFyZ3MudHhQYXJhbXMucmVjaXBpZW50cywgdW5kZWZpbmVkKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBzdGlsbCBhcHBseSBrZWNjYWsyNTYgZm9yIHJlZ3VsYXIgRkxSIEVWTSB0cmFuc2FjdGlvbnMnLCBhc3luYyAoKSA9PiB7XG4gICAgLy8gUmVndWxhciBFVk0gdHJhbnNhY3Rpb24gb24gRkxSIChlLmcuIHRva2VuIHRyYW5zZmVyLCBub3QgY3Jvc3MtY2hhaW4pLlxuICAgIC8vIHNlcmlhbGl6ZWRUeEhleCBzdGFydHMgd2l0aCAnZjgnIChSTFAgcHJlZml4KSwgTk9UICcwMDAwJy5cbiAgICAvLyBUaGUgU0RLIG11c3QgYXBwbHkga2VjY2FrMjU2IGFzIHRoZSBoYXNoIGZ1bmN0aW9uIOKAlCBzdGFuZGFyZCBFVk0gcGF0aC5cbiAgICAvLyBVc2UgdmFsaWQgaGV4IGZvciBzaWduYWJsZUhleCAodW5saWtlIHRoZSBwcmUtZXhpc3RpbmcgJ3Rlc3RNZXNzYWdlJyBwYXR0ZXJuXG4gICAgLy8gaW4gZWFybGllciB0ZXN0cykgc28ga2VjY2FrMjU2IG9wZXJhdGVzIG9uIGEgcmVhbGlzdGljIGJ5dGUgYnVmZmVyLlxuICAgIGNvbnN0IHNlcmlhbGl6ZWRUeEhleCA9ICdmODZjODA4NTA0YTgxN2M4MDA4MjUyMDg5NCcgKyAnMDAnLnJlcGVhdCgyMCkgKyAnODA4MDgwODAnO1xuICAgIGNvbnN0IHNpZ25hYmxlSGV4ID0gc2VyaWFsaXplZFR4SGV4OyAvLyBJbiBFVk0sIHNpZ25hYmxlSGV4IGlzIHRoZSBSTFAtZW5jb2RlZCB1bnNpZ25lZCB0eFxuICAgIGNvbnN0IGRlcml2YXRpb25QYXRoID0gJ20vMCc7XG5cbiAgICAvLyBWZXJpZnkgZml4dHVyZSBkb2VzIE5PVCB0cmlnZ2VyIHRoZSBBdmFsYW5jaGUgZGV0ZWN0aW9uXG4gICAgYXNzZXJ0Lm9rKCFzZXJpYWxpemVkVHhIZXguc3RhcnRzV2l0aCgnMDAwMCcpLCAnRVZNIHR4IG11c3Qgbm90IHN0YXJ0IHdpdGggQXZhbGFuY2hlIHByZWZpeCcpO1xuXG4gICAgLy8gcm91bmQgMVxuICAgIGNvbnN0IHJlcU1QQ3YyU2lnbmluZ1JvdW5kMSA9IHtcbiAgICAgIHR4UmVxdWVzdDoge1xuICAgICAgICB0eFJlcXVlc3RJZDogJ2Zsci1ldm0tdHJhbnNmZXInLFxuICAgICAgICBhcGlWZXJzaW9uOiAnZnVsbCcsXG4gICAgICAgIHdhbGxldElkOiB3YWxsZXRJRCxcbiAgICAgICAgdHJhbnNhY3Rpb25zOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgdW5zaWduZWRUeDoge1xuICAgICAgICAgICAgICBkZXJpdmF0aW9uUGF0aCxcbiAgICAgICAgICAgICAgc2lnbmFibGVIZXgsXG4gICAgICAgICAgICAgIHNlcmlhbGl6ZWRUeEhleCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzaWduYXR1cmVTaGFyZXM6IFtdLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9LFxuICAgICAgcHJ2OiB1c2VyU2hhcmUudG9TdHJpbmcoJ2Jhc2U2NCcpLFxuICAgICAgd2FsbGV0UGFzc3BocmFzZSxcbiAgICB9O1xuXG4gICAgY29uc3QgcmVzTVBDdjJTaWduaW5nUm91bmQxID0gYXdhaXQgZWNkc2FNUEN2MlV0aWxzLmNyZWF0ZU9mZmxpbmVSb3VuZDFTaGFyZShyZXFNUEN2MlNpZ25pbmdSb3VuZDEgYXMgYW55KTtcbiAgICByZXNNUEN2MlNpZ25pbmdSb3VuZDEuc2hvdWxkLmhhdmUucHJvcGVydHkoJ3NpZ25hdHVyZVNoYXJlUm91bmQxJyk7XG4gICAgcmVzTVBDdjJTaWduaW5nUm91bmQxLnNob3VsZC5oYXZlLnByb3BlcnR5KCdlbmNyeXB0ZWRSb3VuZDFTZXNzaW9uJyk7XG4gICAgcmVzTVBDdjJTaWduaW5nUm91bmQxLnNob3VsZC5oYXZlLnByb3BlcnR5KCdlbmNyeXB0ZWRVc2VyR3BnUHJ2S2V5Jyk7XG5cbiAgICBjb25zdCBlbmNyeXB0ZWRSb3VuZDFTZXNzaW9uID0gcmVzTVBDdjJTaWduaW5nUm91bmQxLmVuY3J5cHRlZFJvdW5kMVNlc3Npb247XG4gICAgY29uc3QgZW5jcnlwdGVkVXNlckdwZ1BydktleSA9IHJlc01QQ3YyU2lnbmluZ1JvdW5kMS5lbmNyeXB0ZWRVc2VyR3BnUHJ2S2V5O1xuXG4gICAgLy8gQml0R28gcGFydHkgdXNlcyBrZWNjYWsyNTYoc2lnbmFibGVIZXgpIOKAlCBzdGFuZGFyZCBFVk0gcGF0aC5cbiAgICAvLyBCb3RoIFNESyBhbmQgV1AvSFNNIGFwcGx5IGtlY2NhazI1NiBmb3IgcmVndWxhciBFVk0gdHJhbnNhY3Rpb25zLlxuICAgIGNvbnN0IGhhc2hCdWZmZXIgPSBjcmVhdGVLZWNjYWtIYXNoKCdrZWNjYWsyNTYnKS51cGRhdGUoQnVmZmVyLmZyb20oc2lnbmFibGVIZXgsICdoZXgnKSkuZGlnZXN0KCk7XG4gICAgY29uc3QgYml0Z29TZXNzaW9uID0gbmV3IERrbHNEc2cuRHNnKGJpdGdvU2hhcmUsIDIsIGRlcml2YXRpb25QYXRoLCBoYXNoQnVmZmVyKTtcblxuICAgIGNvbnN0IHR4UmVxdWVzdFJvdW5kMSA9IGF3YWl0IHNpZ25CaXRnb01QQ3YyUm91bmQxKFxuICAgICAgYml0Z29TZXNzaW9uLFxuICAgICAgcmVxTVBDdjJTaWduaW5nUm91bmQxLnR4UmVxdWVzdCBhcyBhbnksXG4gICAgICByZXNNUEN2MlNpZ25pbmdSb3VuZDEuc2lnbmF0dXJlU2hhcmVSb3VuZDEsXG4gICAgICByZXNNUEN2MlNpZ25pbmdSb3VuZDEudXNlckdwZ1B1YktleVxuICAgICk7XG4gICAgYXNzZXJ0Lm9rKFxuICAgICAgdHhSZXF1ZXN0Um91bmQxLnRyYW5zYWN0aW9ucyAmJlxuICAgICAgICB0eFJlcXVlc3RSb3VuZDEudHJhbnNhY3Rpb25zLmxlbmd0aCA9PT0gMSAmJlxuICAgICAgICB0eFJlcXVlc3RSb3VuZDEudHJhbnNhY3Rpb25zWzBdLnNpZ25hdHVyZVNoYXJlcy5sZW5ndGggPT09IDJcbiAgICApO1xuXG4gICAgLy8gcm91bmQgMlxuICAgIGNvbnN0IHJlcU1QQ3YyU2lnbmluZ1JvdW5kMiA9IHtcbiAgICAgIC4uLnJlcU1QQ3YyU2lnbmluZ1JvdW5kMSxcbiAgICAgIHR4UmVxdWVzdDogdHhSZXF1ZXN0Um91bmQxLFxuICAgICAgZW5jcnlwdGVkUm91bmQxU2Vzc2lvbixcbiAgICAgIGVuY3J5cHRlZFVzZXJHcGdQcnZLZXksXG4gICAgICBiaXRnb1B1YmxpY0dwZ0tleTogYml0Z29HcGdLZXkucHVibGljLFxuICAgIH07XG5cbiAgICBjb25zdCByZXNNUEN2MlNpZ25pbmdSb3VuZDIgPSBhd2FpdCBlY2RzYU1QQ3YyVXRpbHMuY3JlYXRlT2ZmbGluZVJvdW5kMlNoYXJlKHJlcU1QQ3YyU2lnbmluZ1JvdW5kMiBhcyBhbnkpO1xuICAgIHJlc01QQ3YyU2lnbmluZ1JvdW5kMi5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgnc2lnbmF0dXJlU2hhcmVSb3VuZDInKTtcbiAgICByZXNNUEN2MlNpZ25pbmdSb3VuZDIuc2hvdWxkLmhhdmUucHJvcGVydHkoJ2VuY3J5cHRlZFJvdW5kMlNlc3Npb24nKTtcblxuICAgIGNvbnN0IGVuY3J5cHRlZFJvdW5kMlNlc3Npb24gPSByZXNNUEN2MlNpZ25pbmdSb3VuZDIuZW5jcnlwdGVkUm91bmQyU2Vzc2lvbjtcblxuICAgIGNvbnN0IHsgdHhSZXF1ZXN0OiB0eFJlcXVlc3RSb3VuZDIsIGJpdGdvTXNnNCB9ID0gYXdhaXQgc2lnbkJpdGdvTVBDdjJSb3VuZDIoXG4gICAgICBiaXRnb1Nlc3Npb24sXG4gICAgICByZXFNUEN2MlNpZ25pbmdSb3VuZDIudHhSZXF1ZXN0LFxuICAgICAgcmVzTVBDdjJTaWduaW5nUm91bmQyLnNpZ25hdHVyZVNoYXJlUm91bmQyLFxuICAgICAgcmVzTVBDdjJTaWduaW5nUm91bmQxLnVzZXJHcGdQdWJLZXlcbiAgICApO1xuICAgIGFzc2VydC5vayhcbiAgICAgIHR4UmVxdWVzdFJvdW5kMi50cmFuc2FjdGlvbnMgJiZcbiAgICAgICAgdHhSZXF1ZXN0Um91bmQyLnRyYW5zYWN0aW9ucy5sZW5ndGggPT09IDEgJiZcbiAgICAgICAgdHhSZXF1ZXN0Um91bmQyLnRyYW5zYWN0aW9uc1swXS5zaWduYXR1cmVTaGFyZXMubGVuZ3RoID09PSA0XG4gICAgKTtcbiAgICBiaXRnb01zZzQuc2hvdWxkLmhhdmUucHJvcGVydHkoJ3NpZ25hdHVyZVInKTtcblxuICAgIC8vIHJvdW5kIDNcbiAgICBjb25zdCByZXFNUEN2MlNpZ25pbmdSb3VuZDMgPSB7XG4gICAgICAuLi5yZXFNUEN2MlNpZ25pbmdSb3VuZDIsXG4gICAgICB0eFJlcXVlc3Q6IHR4UmVxdWVzdFJvdW5kMixcbiAgICAgIGVuY3J5cHRlZFJvdW5kMVNlc3Npb246IG51bGwsXG4gICAgICBlbmNyeXB0ZWRSb3VuZDJTZXNzaW9uLFxuICAgIH07XG5cbiAgICBjb25zdCByZXNNUEN2MlNpZ25pbmdSb3VuZDMgPSBhd2FpdCBlY2RzYU1QQ3YyVXRpbHMuY3JlYXRlT2ZmbGluZVJvdW5kM1NoYXJlKHJlcU1QQ3YyU2lnbmluZ1JvdW5kMyBhcyBhbnkpO1xuICAgIHJlc01QQ3YyU2lnbmluZ1JvdW5kMy5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgnc2lnbmF0dXJlU2hhcmVSb3VuZDMnKTtcblxuICAgIGNvbnN0IHsgdXNlck1zZzQgfSA9IGF3YWl0IHNpZ25CaXRnb01QQ3YyUm91bmQzKFxuICAgICAgYml0Z29TZXNzaW9uLFxuICAgICAgcmVzTVBDdjJTaWduaW5nUm91bmQzLnNpZ25hdHVyZVNoYXJlUm91bmQzLFxuICAgICAgcmVzTVBDdjJTaWduaW5nUm91bmQxLnVzZXJHcGdQdWJLZXlcbiAgICApO1xuXG4gICAgYXNzZXJ0Lm9rKHVzZXJNc2c0LmRhdGEubXNnNC5zaWduYXR1cmVSID09PSBiaXRnb01zZzQuc2lnbmF0dXJlUiwgJ1VzZXIgYW5kIEJpdEdvIHNpZ25hdHVyZXNSIGRvIG5vdCBtYXRjaCcpO1xuXG4gICAgY29uc3QgZGVzZXJpYWxpemVkQml0Z29Nc2c0ID0gRGtsc1R5cGVzLmRlc2VyaWFsaXplTWVzc2FnZXMoe1xuICAgICAgcDJwTWVzc2FnZXM6IFtdLFxuICAgICAgYnJvYWRjYXN0TWVzc2FnZXM6IFtiaXRnb01zZzRdLFxuICAgIH0pO1xuXG4gICAgY29uc3QgZGVzZXJpYWxpemVkVXNlck1zZzQgPSBEa2xzVHlwZXMuZGVzZXJpYWxpemVNZXNzYWdlcyh7XG4gICAgICBwMnBNZXNzYWdlczogW10sXG4gICAgICBicm9hZGNhc3RNZXNzYWdlczogW1xuICAgICAgICB7XG4gICAgICAgICAgZnJvbTogdXNlck1zZzQuZGF0YS5tc2c0LmZyb20sXG4gICAgICAgICAgcGF5bG9hZDogdXNlck1zZzQuZGF0YS5tc2c0Lm1lc3NhZ2UsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH0pO1xuXG4gICAgY29uc3QgY29tYmluZWRTaWdVc2luZ1V0aWwgPSBEa2xzVXRpbHMuY29tYmluZVBhcnRpYWxTaWduYXR1cmVzKFxuICAgICAgW2Rlc2VyaWFsaXplZFVzZXJNc2c0LmJyb2FkY2FzdE1lc3NhZ2VzWzBdLnBheWxvYWQsIGRlc2VyaWFsaXplZEJpdGdvTXNnNC5icm9hZGNhc3RNZXNzYWdlc1swXS5wYXlsb2FkXSxcbiAgICAgIEJ1ZmZlci5mcm9tKHVzZXJNc2c0LmRhdGEubXNnNC5zaWduYXR1cmVSLCAnYmFzZTY0JykudG9TdHJpbmcoJ2hleCcpXG4gICAgKTtcblxuICAgIC8vIFZlcmlmeSB3aXRoIHNob3VsZEhhc2g9dHJ1ZSBhbmQga2VjY2FrMjU2IOKAlCBzdGFuZGFyZCBFVk0gdmVyaWZpY2F0aW9uXG4gICAgY29uc3QgY29udmVydGVkU2lnbmF0dXJlID0gRGtsc1V0aWxzLnZlcmlmeUFuZENvbnZlcnREa2xzU2lnbmF0dXJlKFxuICAgICAgQnVmZmVyLmZyb20oc2lnbmFibGVIZXgsICdoZXgnKSxcbiAgICAgIGNvbWJpbmVkU2lnVXNpbmdVdGlsLFxuICAgICAgRGtsc1R5cGVzLmdldENvbW1vbktleWNoYWluKHVzZXJTaGFyZSksXG4gICAgICBkZXJpdmF0aW9uUGF0aCxcbiAgICAgIGNyZWF0ZUtlY2Nha0hhc2goJ2tlY2NhazI1NicpIGFzIEhhc2hcbiAgICApO1xuICAgIGFzc2VydC5vayhjb252ZXJ0ZWRTaWduYXR1cmUsICdFVk0gc2lnbmF0dXJlIHdpdGggc2VyaWFsaXplZFR4SGV4IGlzIG5vdCB2YWxpZCcpO1xuICAgIGNvbnN0IHNpZ1BhcnRzID0gY29udmVydGVkU2lnbmF0dXJlLnNwbGl0KCc6Jyk7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKHNpZ1BhcnRzLmxlbmd0aCwgNCwgJ1NpZ25hdHVyZSBtdXN0IGJlIHJlY2lkOlI6UzpwdWJrZXkgZm9ybWF0Jyk7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKHNpZ1BhcnRzWzFdLmxlbmd0aCwgNjQsICdTaWduYXR1cmUgUiBtdXN0IGJlIDMyIGJ5dGVzIGhleCcpO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChzaWdQYXJ0c1syXS5sZW5ndGgsIDY0LCAnU2lnbmF0dXJlIFMgbXVzdCBiZSAzMiBieXRlcyBoZXgnKTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2NyZWF0ZU9mZmxpbmVSb3VuZDFTaGFyZSBhbmQgY3JlYXRlT2ZmbGluZVJvdW5kMlNoYXJlIC0gZW5jcnlwdGlvblZlcnNpb246IDEgaW4gdjEgcGF0aCcsIGFzeW5jICgpID0+IHtcbiAgICBsZXQgZWNkc2FNUEN2MlV0aWxzV2l0aFNweTogRWNkc2FNUEN2MlV0aWxzO1xuICAgIGxldCBlbmNyeXB0QXN5bmNTcHk6IHNpbm9uLlNpbm9uU3R1YjtcblxuICAgIGJlZm9yZShhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBtb2NrQmcgPSB7fSBhcyBCaXRHb0Jhc2U7XG4gICAgICBtb2NrQmcuZ2V0RW52ID0gc2lub24uc3R1YigpLnJldHVybnMoJ3Rlc3QnKTtcbiAgICAgIGNvbnN0IGVuY3J5cHRJbXBsID0gKHBhcmFtczogeyBwYXNzd29yZDogc3RyaW5nOyBpbnB1dDogc3RyaW5nOyBhZGF0YT86IHN0cmluZyB9KSA9PiB7XG4gICAgICAgIGNvbnN0IHNhbHQgPSByYW5kb21CeXRlcyg4KTtcbiAgICAgICAgY29uc3QgaXYgPSByYW5kb21CeXRlcygxNik7XG4gICAgICAgIHJldHVybiBzamNsLmVuY3J5cHQocGFyYW1zLnBhc3N3b3JkLCBwYXJhbXMuaW5wdXQsIHtcbiAgICAgICAgICBzYWx0OiBbYnl0ZXNUb1dvcmQoc2FsdC5zdWJhcnJheSgwLCA0KSksIGJ5dGVzVG9Xb3JkKHNhbHQuc3ViYXJyYXkoNCkpXSxcbiAgICAgICAgICBpdjogW1xuICAgICAgICAgICAgYnl0ZXNUb1dvcmQoaXYuc3ViYXJyYXkoMCwgNCkpLFxuICAgICAgICAgICAgYnl0ZXNUb1dvcmQoaXYuc3ViYXJyYXkoNCwgOCkpLFxuICAgICAgICAgICAgYnl0ZXNUb1dvcmQoaXYuc3ViYXJyYXkoOCwgMTIpKSxcbiAgICAgICAgICAgIGJ5dGVzVG9Xb3JkKGl2LnN1YmFycmF5KDEyLCAxNikpLFxuICAgICAgICAgIF0sXG4gICAgICAgICAgYWRhdGE6IHBhcmFtcy5hZGF0YSxcbiAgICAgICAgfSk7XG4gICAgICB9O1xuICAgICAgZW5jcnlwdEFzeW5jU3B5ID0gc2lub24uc3R1YigpLmNhbGxzRmFrZShhc3luYyAocGFyYW1zKSA9PiBlbmNyeXB0SW1wbChwYXJhbXMpKTtcbiAgICAgIG1vY2tCZy5lbmNyeXB0ID0gc2lub24uc3R1YigpLmNhbGxzRmFrZShlbmNyeXB0SW1wbCk7XG4gICAgICBtb2NrQmcuZW5jcnlwdCA9IGVuY3J5cHRBc3luY1NweTtcbiAgICAgIG1vY2tCZy5kZWNyeXB0ID0gc2lub24uc3R1YigpLmNhbGxzRmFrZSgocGFyYW1zKSA9PiBzamNsLmRlY3J5cHQocGFyYW1zLnBhc3N3b3JkLCBwYXJhbXMuaW5wdXQpKTtcbiAgICAgIG1vY2tCZy5kZWNyeXB0ID0gc2lub24uc3R1YigpLmNhbGxzRmFrZShhc3luYyAocGFyYW1zKSA9PiBzamNsLmRlY3J5cHQocGFyYW1zLnBhc3N3b3JkLCBwYXJhbXMuaW5wdXQpKTtcblxuICAgICAgY29uc3QgbW9ja0NvaW4gPSB7fSBhcyBJQmFzZUNvaW47XG4gICAgICBtb2NrQ29pbi5nZXRIYXNoRnVuY3Rpb24gPSBzaW5vbi5zdHViKCkuY2FsbHNGYWtlKCgpID0+IGNyZWF0ZUtlY2Nha0hhc2goJ2tlY2NhazI1NicpIGFzIEhhc2gpO1xuICAgICAgbW9ja0NvaW4uaXNTaWduYWJsZVByZUhhc2hlZCA9ICh1bnNpZ25lZFR4KSA9PiB1bnNpZ25lZFR4LnNlcmlhbGl6ZWRUeEhleD8uc3RhcnRzV2l0aCgnMDAwMCcpID8/IGZhbHNlO1xuICAgICAgZWNkc2FNUEN2MlV0aWxzV2l0aFNweSA9IG5ldyBFY2RzYU1QQ3YyVXRpbHMobW9ja0JnLCBtb2NrQ29pbik7XG4gICAgfSk7XG5cbiAgICBpdCgnY3JlYXRlT2ZmbGluZVJvdW5kMVNoYXJlIHVzZXMgZW5jcnlwdGlvblZlcnNpb246IDEgaW4gdjEgKG5vbi12MiBlbnZlbG9wZSkgcGF0aCcsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHR4UmVxdWVzdCA9IHtcbiAgICAgICAgdHhSZXF1ZXN0SWQ6ICdyZXEtaWQnLFxuICAgICAgICB3YWxsZXRJZDogd2FsbGV0SUQsXG4gICAgICAgIHRyYW5zYWN0aW9uczogW3sgdW5zaWduZWRUeDogeyBzaWduYWJsZUhleDogJ2RlYWRiZWVmMDEnLCBkZXJpdmF0aW9uUGF0aDogJ20vMCcsIHNlcmlhbGl6ZWRUeEhleDogJycgfSB9XSxcbiAgICAgICAgYXBpVmVyc2lvbjogJ2Z1bGwnLFxuICAgICAgfSBhcyBhbnk7XG5cbiAgICAgIGVuY3J5cHRBc3luY1NweS5yZXNldEhpc3RvcnkoKTtcblxuICAgICAgYXdhaXQgZWNkc2FNUEN2MlV0aWxzV2l0aFNweS5jcmVhdGVPZmZsaW5lUm91bmQxU2hhcmUoe1xuICAgICAgICB0eFJlcXVlc3QsXG4gICAgICAgIHBydjogQnVmZmVyLmZyb20odXNlclNoYXJlKS50b1N0cmluZygnYmFzZTY0JyksXG4gICAgICAgIHdhbGxldFBhc3NwaHJhc2UsXG4gICAgICAgIGVuY3J5cHRlZFBydjogdW5kZWZpbmVkLFxuICAgICAgfSk7XG5cbiAgICAgIGFzc2VydC5vayhlbmNyeXB0QXN5bmNTcHkuY2FsbGVkLCAnZW5jcnlwdCBzaG91bGQgYmUgY2FsbGVkIGluIHYxIHBhdGgnKTtcbiAgICAgIGZvciAoY29uc3QgY2FsbCBvZiBlbmNyeXB0QXN5bmNTcHkuZ2V0Q2FsbHMoKSkge1xuICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoXG4gICAgICAgICAgY2FsbC5hcmdzWzBdLmVuY3J5cHRpb25WZXJzaW9uLFxuICAgICAgICAgIDEsXG4gICAgICAgICAgJ2VuY3J5cHRpb25WZXJzaW9uIHNob3VsZCBiZSBoYXJkY29kZWQgdG8gMSBpbiB0aGUgdjEgc2lnbmluZyBzZXNzaW9uIHBhdGgnXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xufSk7XG5cbmZ1bmN0aW9uIGJ5dGVzVG9Xb3JkKGJ5dGVzPzogVWludDhBcnJheSB8IG51bWJlcltdKTogbnVtYmVyIHtcbiAgaWYgKCEoYnl0ZXMgaW5zdGFuY2VvZiBVaW50OEFycmF5KSB8fCBieXRlcy5sZW5ndGggIT09IDQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2J5dGVzIG11c3QgYmUgYSBVaW50OEFycmF5IHdpdGggbGVuZ3RoIDQnKTtcbiAgfVxuXG4gIHJldHVybiBieXRlcy5yZWR1Y2UoKG51bSwgYnl0ZSkgPT4gbnVtICogMHgxMDAgKyBieXRlLCAwKTtcbn1cblxuZnVuY3Rpb24gZ2V0VXNlclBhcnR5R3BnS2V5UHVibGljKHVzZXJQdWJLZXk6IHN0cmluZyk6IERrbHNUeXBlcy5QYXJ0eUdwZ0tleSB7XG4gIHJldHVybiB7XG4gICAgcGFydHlJZDogMCxcbiAgICBncGdLZXk6IHVzZXJQdWJLZXksXG4gIH07XG59XG5cbmZ1bmN0aW9uIGdldEJpdEdvUGFydHlHcGdLZXlQcnYoYml0Z29QcnZLZXk6IHN0cmluZyk6IERrbHNUeXBlcy5QYXJ0eUdwZ0tleSB7XG4gIHJldHVybiB7XG4gICAgcGFydHlJZDogMixcbiAgICBncGdLZXk6IGJpdGdvUHJ2S2V5LFxuICB9O1xufVxuXG5hc3luYyBmdW5jdGlvbiBzaWduQml0Z29NUEN2MlJvdW5kMShcbiAgYml0Z29TZXNzaW9uOiBEa2xzRHNnLkRzZyxcbiAgdHhSZXF1ZXN0OiBUeFJlcXVlc3QsXG4gIHVzZXJTaGFyZTogU2lnbmF0dXJlU2hhcmVSZWNvcmQsXG4gIHVzZXJHUEdQdWJLZXk6IHN0cmluZ1xuKTogUHJvbWlzZTxUeFJlcXVlc3Q+IHtcbiAgYXNzZXJ0Lm9rKFxuICAgIHR4UmVxdWVzdC50cmFuc2FjdGlvbnMgJiYgdHhSZXF1ZXN0LnRyYW5zYWN0aW9ucy5sZW5ndGggPT09IDEsXG4gICAgJ3R4UmVxdWVzdC50cmFuc2FjdGlvbnMgaXMgbm90IGFuIGFycmF5IG9mIGxlbmd0aCAxJ1xuICApO1xuICB0eFJlcXVlc3QudHJhbnNhY3Rpb25zWzBdLnNpZ25hdHVyZVNoYXJlcy5wdXNoKHVzZXJTaGFyZSk7XG4gIC8vIERvIHRoZSBhY3R1YWwgc2lnbmluZyBvbiBCaXRHbydzIHNpZGUgYmFzZWQgb24gVXNlcidzIG1lc3NhZ2VzXG4gIGNvbnN0IHNpZ25hdHVyZVNoYXJlID0gSlNPTi5wYXJzZSh1c2VyU2hhcmUuc2hhcmUpIGFzIE1QQ3YyU2lnbmF0dXJlU2hhcmVSb3VuZDFJbnB1dDtcbiAgY29uc3QgZGVzZXJpYWxpemVkTWVzc2FnZXMgPSBEa2xzVHlwZXMuZGVzZXJpYWxpemVNZXNzYWdlcyh7XG4gICAgcDJwTWVzc2FnZXM6IFtdLFxuICAgIGJyb2FkY2FzdE1lc3NhZ2VzOiBbXG4gICAgICB7XG4gICAgICAgIGZyb206IHNpZ25hdHVyZVNoYXJlLmRhdGEubXNnMS5mcm9tLFxuICAgICAgICBwYXlsb2FkOiBzaWduYXR1cmVTaGFyZS5kYXRhLm1zZzEubWVzc2FnZSxcbiAgICAgIH0sXG4gICAgXSxcbiAgfSk7XG4gIGNvbnN0IGJpdGdvVG9Vc2VyUm91bmQxQnJvYWRjYXN0TXNnID0gYXdhaXQgYml0Z29TZXNzaW9uLmluaXQoKTtcbiAgY29uc3QgYml0Z29Ub1VzZXJSb3VuZDJNc2cgPSBiaXRnb1Nlc3Npb24uaGFuZGxlSW5jb21pbmdNZXNzYWdlcyh7XG4gICAgcDJwTWVzc2FnZXM6IFtdLFxuICAgIGJyb2FkY2FzdE1lc3NhZ2VzOiBkZXNlcmlhbGl6ZWRNZXNzYWdlcy5icm9hZGNhc3RNZXNzYWdlcyxcbiAgfSk7XG4gIGNvbnN0IHNlcmlhbGl6ZWRCaXRHb1RvVXNlclJvdW5kMUFuZDJNc2dzID0gRGtsc1R5cGVzLnNlcmlhbGl6ZU1lc3NhZ2VzKHtcbiAgICBwMnBNZXNzYWdlczogYml0Z29Ub1VzZXJSb3VuZDJNc2cucDJwTWVzc2FnZXMsXG4gICAgYnJvYWRjYXN0TWVzc2FnZXM6IFtiaXRnb1RvVXNlclJvdW5kMUJyb2FkY2FzdE1zZ10sXG4gIH0pO1xuXG4gIGNvbnN0IGF1dGhFbmNNZXNzYWdlcyA9IGF3YWl0IERrbHNDb21tcy5lbmNyeXB0QW5kQXV0aE91dGdvaW5nTWVzc2FnZXMoXG4gICAgc2VyaWFsaXplZEJpdEdvVG9Vc2VyUm91bmQxQW5kMk1zZ3MsXG4gICAgW2dldFVzZXJQYXJ0eUdwZ0tleVB1YmxpYyh1c2VyR1BHUHViS2V5KV0sXG4gICAgW2dldEJpdEdvUGFydHlHcGdLZXlQcnYoYml0Z29HcGdLZXkucHJpdmF0ZSldXG4gICk7XG5cbiAgY29uc3QgYml0Z29Ub1VzZXJTaWduYXR1cmVTaGFyZTogTVBDdjJTaWduYXR1cmVTaGFyZVJvdW5kMU91dHB1dCA9IHtcbiAgICB0eXBlOiAncm91bmQxT3V0cHV0JyxcbiAgICBkYXRhOiB7XG4gICAgICBtc2cxOiB7XG4gICAgICAgIGZyb206IGF1dGhFbmNNZXNzYWdlcy5icm9hZGNhc3RNZXNzYWdlc1swXS5mcm9tIGFzIE1QQ3YyUGFydHlGcm9tU3RyaW5nT3JOdW1iZXIsXG4gICAgICAgIHNpZ25hdHVyZTogYXV0aEVuY01lc3NhZ2VzLmJyb2FkY2FzdE1lc3NhZ2VzWzBdLnBheWxvYWQuc2lnbmF0dXJlLFxuICAgICAgICBtZXNzYWdlOiBhdXRoRW5jTWVzc2FnZXMuYnJvYWRjYXN0TWVzc2FnZXNbMF0ucGF5bG9hZC5tZXNzYWdlLFxuICAgICAgfSxcbiAgICAgIG1zZzI6IHtcbiAgICAgICAgZnJvbTogYXV0aEVuY01lc3NhZ2VzLnAycE1lc3NhZ2VzWzBdLmZyb20gYXMgTVBDdjJQYXJ0eUZyb21TdHJpbmdPck51bWJlcixcbiAgICAgICAgdG86IGF1dGhFbmNNZXNzYWdlcy5wMnBNZXNzYWdlc1swXS50byBhcyBNUEN2MlBhcnR5RnJvbVN0cmluZ09yTnVtYmVyLFxuICAgICAgICBlbmNyeXB0ZWRNZXNzYWdlOiBhdXRoRW5jTWVzc2FnZXMucDJwTWVzc2FnZXNbMF0ucGF5bG9hZC5lbmNyeXB0ZWRNZXNzYWdlLFxuICAgICAgICBzaWduYXR1cmU6IGF1dGhFbmNNZXNzYWdlcy5wMnBNZXNzYWdlc1swXS5wYXlsb2FkLnNpZ25hdHVyZSxcbiAgICAgIH0sXG4gICAgfSxcbiAgfTtcbiAgdHhSZXF1ZXN0LnRyYW5zYWN0aW9uc1swXS5zaWduYXR1cmVTaGFyZXMucHVzaCh7XG4gICAgZnJvbTogU2lnbmF0dXJlU2hhcmVUeXBlLkJJVEdPLFxuICAgIHRvOiBTaWduYXR1cmVTaGFyZVR5cGUuVVNFUixcbiAgICBzaGFyZTogSlNPTi5zdHJpbmdpZnkoYml0Z29Ub1VzZXJTaWduYXR1cmVTaGFyZSksXG4gIH0pO1xuICByZXR1cm4gdHhSZXF1ZXN0O1xufVxuXG5hc3luYyBmdW5jdGlvbiBzaWduQml0Z29NUEN2MlJvdW5kMihcbiAgYml0Z29TZXNzaW9uOiBEa2xzRHNnLkRzZyxcbiAgdHhSZXF1ZXN0OiBUeFJlcXVlc3QsXG4gIHVzZXJTaGFyZTogU2lnbmF0dXJlU2hhcmVSZWNvcmQsXG4gIHVzZXJHUEdQdWJLZXk6IHN0cmluZ1xuKTogUHJvbWlzZTx7IHR4UmVxdWVzdDogVHhSZXF1ZXN0OyBiaXRnb01zZzQ6IERrbHNUeXBlcy5TZXJpYWxpemVkQnJvYWRjYXN0TWVzc2FnZSB9PiB7XG4gIGFzc2VydC5vayhcbiAgICB0eFJlcXVlc3QudHJhbnNhY3Rpb25zICYmIHR4UmVxdWVzdC50cmFuc2FjdGlvbnMubGVuZ3RoID09PSAxLFxuICAgICd0eFJlcXVlc3QudHJhbnNhY3Rpb25zIGlzIG5vdCBhbiBhcnJheSBvZiBsZW5ndGggMSdcbiAgKTtcbiAgdHhSZXF1ZXN0LnRyYW5zYWN0aW9uc1swXS5zaWduYXR1cmVTaGFyZXMucHVzaCh1c2VyU2hhcmUpO1xuXG4gIC8vIERvIHRoZSBhY3R1YWwgc2lnbmluZyBvbiBCaXRHbydzIHNpZGUgYmFzZWQgb24gVXNlcidzIG1lc3NhZ2VzXG4gIGNvbnN0IHBhcnNlZFNpZ25hdHVyZVNoYXJlID0gSlNPTi5wYXJzZSh1c2VyU2hhcmUuc2hhcmUpIGFzIE1QQ3YyU2lnbmF0dXJlU2hhcmVSb3VuZDJJbnB1dDtcbiAgY29uc3Qgc2VyaWFsaXplZE1lc3NhZ2VzID0gYXdhaXQgRGtsc0NvbW1zLmRlY3J5cHRBbmRWZXJpZnlJbmNvbWluZ01lc3NhZ2VzKFxuICAgIHtcbiAgICAgIHAycE1lc3NhZ2VzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBmcm9tOiBwYXJzZWRTaWduYXR1cmVTaGFyZS5kYXRhLm1zZzIuZnJvbSxcbiAgICAgICAgICB0bzogcGFyc2VkU2lnbmF0dXJlU2hhcmUuZGF0YS5tc2cyLnRvLFxuICAgICAgICAgIHBheWxvYWQ6IHtcbiAgICAgICAgICAgIGVuY3J5cHRlZE1lc3NhZ2U6IHBhcnNlZFNpZ25hdHVyZVNoYXJlLmRhdGEubXNnMi5lbmNyeXB0ZWRNZXNzYWdlLFxuICAgICAgICAgICAgc2lnbmF0dXJlOiBwYXJzZWRTaWduYXR1cmVTaGFyZS5kYXRhLm1zZzIuc2lnbmF0dXJlLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBmcm9tOiBwYXJzZWRTaWduYXR1cmVTaGFyZS5kYXRhLm1zZzMuZnJvbSxcbiAgICAgICAgICB0bzogcGFyc2VkU2lnbmF0dXJlU2hhcmUuZGF0YS5tc2czLnRvLFxuICAgICAgICAgIHBheWxvYWQ6IHtcbiAgICAgICAgICAgIGVuY3J5cHRlZE1lc3NhZ2U6IHBhcnNlZFNpZ25hdHVyZVNoYXJlLmRhdGEubXNnMy5lbmNyeXB0ZWRNZXNzYWdlLFxuICAgICAgICAgICAgc2lnbmF0dXJlOiBwYXJzZWRTaWduYXR1cmVTaGFyZS5kYXRhLm1zZzMuc2lnbmF0dXJlLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgICAgYnJvYWRjYXN0TWVzc2FnZXM6IFtdLFxuICAgIH0sXG4gICAgW2dldFVzZXJQYXJ0eUdwZ0tleVB1YmxpYyh1c2VyR1BHUHViS2V5KV0sXG4gICAgW2dldEJpdEdvUGFydHlHcGdLZXlQcnYoYml0Z29HcGdLZXkucHJpdmF0ZSldXG4gICk7XG4gIGNvbnN0IGRlc2VyaWFsaXplZE1lc3NhZ2VzMiA9IERrbHNUeXBlcy5kZXNlcmlhbGl6ZU1lc3NhZ2VzKHtcbiAgICBwMnBNZXNzYWdlczogW3NlcmlhbGl6ZWRNZXNzYWdlcy5wMnBNZXNzYWdlc1swXV0sXG4gICAgYnJvYWRjYXN0TWVzc2FnZXM6IFtdLFxuICB9KTtcblxuICBjb25zdCBiaXRnb1RvVXNlclJvdW5kM01zZyA9IGJpdGdvU2Vzc2lvbi5oYW5kbGVJbmNvbWluZ01lc3NhZ2VzKGRlc2VyaWFsaXplZE1lc3NhZ2VzMik7XG4gIGNvbnN0IHNlcmlhbGl6ZWRCaXRHb1RvVXNlclJvdW5kM01zZ3MgPSBEa2xzVHlwZXMuc2VyaWFsaXplTWVzc2FnZXMoYml0Z29Ub1VzZXJSb3VuZDNNc2cpO1xuXG4gIGNvbnN0IGF1dGhFbmNNZXNzYWdlcyA9IGF3YWl0IERrbHNDb21tcy5lbmNyeXB0QW5kQXV0aE91dGdvaW5nTWVzc2FnZXMoXG4gICAgc2VyaWFsaXplZEJpdEdvVG9Vc2VyUm91bmQzTXNncyxcbiAgICBbZ2V0VXNlclBhcnR5R3BnS2V5UHVibGljKHVzZXJHUEdQdWJLZXkpXSxcbiAgICBbZ2V0Qml0R29QYXJ0eUdwZ0tleVBydihiaXRnb0dwZ0tleS5wcml2YXRlKV1cbiAgKTtcblxuICBjb25zdCBiaXRnb1RvVXNlclNpZ25hdHVyZVNoYXJlOiBNUEN2MlNpZ25hdHVyZVNoYXJlUm91bmQyT3V0cHV0ID0ge1xuICAgIHR5cGU6ICdyb3VuZDJPdXRwdXQnLFxuICAgIGRhdGE6IHtcbiAgICAgIG1zZzM6IHtcbiAgICAgICAgZnJvbTogYXV0aEVuY01lc3NhZ2VzLnAycE1lc3NhZ2VzWzBdLmZyb20gYXMgTVBDdjJQYXJ0eUZyb21TdHJpbmdPck51bWJlcixcbiAgICAgICAgdG86IGF1dGhFbmNNZXNzYWdlcy5wMnBNZXNzYWdlc1swXS50byBhcyBNUEN2MlBhcnR5RnJvbVN0cmluZ09yTnVtYmVyLFxuICAgICAgICBlbmNyeXB0ZWRNZXNzYWdlOiBhdXRoRW5jTWVzc2FnZXMucDJwTWVzc2FnZXNbMF0ucGF5bG9hZC5lbmNyeXB0ZWRNZXNzYWdlLFxuICAgICAgICBzaWduYXR1cmU6IGF1dGhFbmNNZXNzYWdlcy5wMnBNZXNzYWdlc1swXS5wYXlsb2FkLnNpZ25hdHVyZSxcbiAgICAgIH0sXG4gICAgfSxcbiAgfTtcblxuICAvLyBoYW5kbGluZyB1c2VyIG1zZzMgYnV0IG5vdCByZXR1cm5pbmcgYml0Z28gbXNnNCBzaW5jZSBpdHMgc3RvcmVkIG9uIGJpdGdvIHNpZGUgb25seVxuICBjb25zdCBkZXNlcmlhbGl6ZWRNZXNzYWdlczMgPSBEa2xzVHlwZXMuZGVzZXJpYWxpemVNZXNzYWdlcyh7XG4gICAgcDJwTWVzc2FnZXM6IFtzZXJpYWxpemVkTWVzc2FnZXMucDJwTWVzc2FnZXNbMV1dLFxuICAgIGJyb2FkY2FzdE1lc3NhZ2VzOiBbXSxcbiAgfSk7XG4gIGNvbnN0IGRlc2VyaWFsaXplZEJpdGdvTXNnNCA9IGJpdGdvU2Vzc2lvbi5oYW5kbGVJbmNvbWluZ01lc3NhZ2VzKGRlc2VyaWFsaXplZE1lc3NhZ2VzMyk7XG4gIGNvbnN0IHNlcmlhbGl6ZWRCaXRHb1RvVXNlclJvdW5kNE1zZ3MgPSBEa2xzVHlwZXMuc2VyaWFsaXplTWVzc2FnZXMoZGVzZXJpYWxpemVkQml0Z29Nc2c0KTtcblxuICB0eFJlcXVlc3QudHJhbnNhY3Rpb25zWzBdLnNpZ25hdHVyZVNoYXJlcy5wdXNoKHtcbiAgICBmcm9tOiBTaWduYXR1cmVTaGFyZVR5cGUuQklUR08sXG4gICAgdG86IFNpZ25hdHVyZVNoYXJlVHlwZS5VU0VSLFxuICAgIHNoYXJlOiBKU09OLnN0cmluZ2lmeShiaXRnb1RvVXNlclNpZ25hdHVyZVNoYXJlKSxcbiAgfSk7XG4gIHJldHVybiB7IHR4UmVxdWVzdCwgYml0Z29Nc2c0OiBzZXJpYWxpemVkQml0R29Ub1VzZXJSb3VuZDRNc2dzLmJyb2FkY2FzdE1lc3NhZ2VzWzBdIH07XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHNpZ25CaXRnb01QQ3YyUm91bmQzKFxuICBiaXRnb1Nlc3Npb246IERrbHNEc2cuRHNnLFxuICB1c2VyU2hhcmU6IFNpZ25hdHVyZVNoYXJlUmVjb3JkLFxuICB1c2VyR1BHUHViS2V5OiBzdHJpbmdcbik6IFByb21pc2U8eyB1c2VyTXNnNDogTVBDdjJTaWduYXR1cmVTaGFyZVJvdW5kM0lucHV0IH0+IHtcbiAgY29uc3QgcGFyc2VkU2lnbmF0dXJlU2hhcmUgPSBKU09OLnBhcnNlKHVzZXJTaGFyZS5zaGFyZSkgYXMgTVBDdjJTaWduYXR1cmVTaGFyZVJvdW5kM0lucHV0O1xuICBjb25zdCBtc2c0ID0gcGFyc2VkU2lnbmF0dXJlU2hhcmUuZGF0YS5tc2c0O1xuICBjb25zdCBzaWduYXR1cmVSQXV0aE1lc3NhZ2UgPVxuICAgIG1zZzQuc2lnbmF0dXJlUiAmJiBtc2c0LnNpZ25hdHVyZVJTaWduYXR1cmVcbiAgICAgID8geyBtZXNzYWdlOiBtc2c0LnNpZ25hdHVyZVIsIHNpZ25hdHVyZTogbXNnNC5zaWduYXR1cmVSU2lnbmF0dXJlIH1cbiAgICAgIDogdW5kZWZpbmVkO1xuICBjb25zdCBzZXJpYWxpemVkTWVzc2FnZXMgPSBhd2FpdCBEa2xzQ29tbXMuZGVjcnlwdEFuZFZlcmlmeUluY29taW5nTWVzc2FnZXMoXG4gICAge1xuICAgICAgcDJwTWVzc2FnZXM6IFtdLFxuICAgICAgYnJvYWRjYXN0TWVzc2FnZXM6IFtcbiAgICAgICAge1xuICAgICAgICAgIGZyb206IG1zZzQuZnJvbSxcbiAgICAgICAgICBwYXlsb2FkOiB7XG4gICAgICAgICAgICBtZXNzYWdlOiBtc2c0Lm1lc3NhZ2UsXG4gICAgICAgICAgICBzaWduYXR1cmU6IG1zZzQuc2lnbmF0dXJlLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgc2lnbmF0dXJlUjogc2lnbmF0dXJlUkF1dGhNZXNzYWdlLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9LFxuICAgIFtnZXRVc2VyUGFydHlHcGdLZXlQdWJsaWModXNlckdQR1B1YktleSldLFxuICAgIFtnZXRCaXRHb1BhcnR5R3BnS2V5UHJ2KGJpdGdvR3BnS2V5LnByaXZhdGUpXVxuICApO1xuICBjb25zdCBkZXNlcmlhbGl6ZWRNZXNzYWdlcyA9IERrbHNUeXBlcy5kZXNlcmlhbGl6ZU1lc3NhZ2VzKHtcbiAgICBwMnBNZXNzYWdlczogW10sXG4gICAgYnJvYWRjYXN0TWVzc2FnZXM6IFtzZXJpYWxpemVkTWVzc2FnZXMuYnJvYWRjYXN0TWVzc2FnZXNbMF1dLFxuICB9KTtcbiAgYml0Z29TZXNzaW9uLmhhbmRsZUluY29taW5nTWVzc2FnZXMoZGVzZXJpYWxpemVkTWVzc2FnZXMpO1xuXG4gIHJldHVybiB7XG4gICAgdXNlck1zZzQ6IHBhcnNlZFNpZ25hdHVyZVNoYXJlLFxuICB9O1xufVxuXG5kZXNjcmliZSgnRWNkc2FNUEN2MlV0aWxzLmNyZWF0ZUtleWNoYWluc1dpdGhFeHRlcm5hbFNpZ25lcicsIGZ1bmN0aW9uICgpIHtcbiAgbGV0IHV0aWxzOiBFY2RzYU1QQ3YyVXRpbHM7XG4gIGxldCBjYWxsYmFja3M6IEVjZHNhTVBDdjJLZXlHZW5DYWxsYmFja3M7XG4gIGNvbnN0IGVudGVycHJpc2UgPSAnZW50ZXJwcmlzZS1pZCc7XG4gIGNvbnN0IHNlc3Npb25JZCA9ICdzZXNzaW9uLTAwMSc7XG4gIGNvbnN0IGNvbW1vbktleWNoYWluID0gJ2NvbW1vbi1rZXljaGFpbi1hYmMnO1xuXG4gIGNvbnN0IGVtcHR5TWVzc2FnZXM6IERrbHNUeXBlcy5BdXRoRW5jTWVzc2FnZXMgPSB7IGJyb2FkY2FzdE1lc3NhZ2VzOiBbXSwgcDJwTWVzc2FnZXM6IFtdIH07XG4gIGNvbnN0IHVzZXJTdGF0ZSA9IHsgZW5jcnlwdGVkRGF0YTogJ3UtZGF0YScsIGVuY3J5cHRlZERhdGFLZXk6ICd1LWRhdGEta2V5JyB9O1xuICBjb25zdCBiYWNrdXBTdGF0ZSA9IHsgZW5jcnlwdGVkRGF0YTogJ2ItZGF0YScsIGVuY3J5cHRlZERhdGFLZXk6ICdiLWRhdGEta2V5JyB9O1xuICBjb25zdCBiaXRnb01zZzE6IE1QQ3YyQnJvYWRjYXN0TWVzc2FnZSA9IHsgZnJvbTogMiwgbWVzc2FnZTogJ21zZzEnLCBzaWduYXR1cmU6ICdzaWcxJyB9O1xuICBjb25zdCBiaXRnb1RvVXNlck1zZzI6IE1QQ3YyUDJQTWVzc2FnZSA9IHsgZnJvbTogMiwgdG86IDAsIGVuY3J5cHRlZE1lc3NhZ2U6ICd1MicsIHNpZ25hdHVyZTogJ3N1MicgfTtcbiAgY29uc3QgYml0Z29Ub0JhY2t1cE1zZzI6IE1QQ3YyUDJQTWVzc2FnZSA9IHsgZnJvbTogMiwgdG86IDEsIGVuY3J5cHRlZE1lc3NhZ2U6ICdiMicsIHNpZ25hdHVyZTogJ3NiMicgfTtcbiAgY29uc3QgYml0Z29Ub1VzZXJNc2czOiBNUEN2MlAyUE1lc3NhZ2UgPSB7IGZyb206IDIsIHRvOiAwLCBlbmNyeXB0ZWRNZXNzYWdlOiAndTMnLCBzaWduYXR1cmU6ICdzdTMnIH07XG4gIGNvbnN0IGJpdGdvVG9CYWNrdXBNc2czOiBNUEN2MlAyUE1lc3NhZ2UgPSB7IGZyb206IDIsIHRvOiAxLCBlbmNyeXB0ZWRNZXNzYWdlOiAnYjMnLCBzaWduYXR1cmU6ICdzYjMnIH07XG4gIGNvbnN0IGJpdGdvTXNnNDogTVBDdjJCcm9hZGNhc3RNZXNzYWdlID0geyBmcm9tOiAyLCBtZXNzYWdlOiAnbXNnNCcsIHNpZ25hdHVyZTogJ3NpZzQnIH07XG5cbiAgYmVmb3JlRWFjaChmdW5jdGlvbiAoKSB7XG4gICAgY2FsbGJhY2tzID0ge1xuICAgICAgaW5pdGlhbGl6ZUNhbGxiYWNrOiBzaW5vbi5zdHViKCkucmVzb2x2ZXMoe1xuICAgICAgICB1c2VyR3BnUHVibGljS2V5OiAndXNlci1ncGctcHViJyxcbiAgICAgICAgYmFja3VwR3BnUHVibGljS2V5OiAnYmFja3VwLWdwZy1wdWInLFxuICAgICAgICByb3VuZDFNZXNzYWdlczogZW1wdHlNZXNzYWdlcyxcbiAgICAgICAgdXNlclN0YXRlLFxuICAgICAgICBiYWNrdXBTdGF0ZSxcbiAgICAgIH0pLFxuICAgICAgcm91bmQyQ2FsbGJhY2s6IHNpbm9uLnN0dWIoKS5yZXNvbHZlcyh7IHJvdW5kMk1lc3NhZ2VzOiBlbXB0eU1lc3NhZ2VzLCB1c2VyU3RhdGUsIGJhY2t1cFN0YXRlIH0pLFxuICAgICAgcm91bmQzQ2FsbGJhY2s6IHNpbm9uLnN0dWIoKS5yZXNvbHZlcyh7IHJvdW5kM01lc3NhZ2VzOiBlbXB0eU1lc3NhZ2VzLCB1c2VyU3RhdGUsIGJhY2t1cFN0YXRlIH0pLFxuICAgICAgZmluYWxpemVDYWxsYmFjazogc2lub24uc3R1YigpLnJlc29sdmVzKHsgY29tbW9uS2V5Y2hhaW4gfSksXG4gICAgfTtcblxuICAgIGNvbnN0IG1vY2tCaXRHbyA9IHtcbiAgICAgIGdldEVudjogc2lub24uc3R1YigpLnJldHVybnMoJ2RldicpLFxuICAgIH0gYXMgYW55O1xuXG4gICAgY29uc3QgbW9ja0tleWNoYWlucyA9IHtcbiAgICAgIGFkZDogc2lub25cbiAgICAgICAgLnN0dWIoKVxuICAgICAgICAuY2FsbHNGYWtlKChwYXJhbXM6IGFueSkgPT4gUHJvbWlzZS5yZXNvbHZlKHsgaWQ6IGAke3BhcmFtcy5zb3VyY2V9LWtleS1pZGAsIGNvbW1vbktleWNoYWluLCBpc01QQ3YyOiB0cnVlIH0pKSxcbiAgICAgIGNyZWF0ZUJpdEdvOiBzaW5vbi5zdHViKCkucmVzb2x2ZXMoeyBpZDogJ2JpdGdvLWtleS1pZCcsIGNvbW1vbktleWNoYWluLCBpc01QQ3YyOiB0cnVlIH0pLFxuICAgIH07XG5cbiAgICBjb25zdCBtb2NrQ29pbiA9IHtcbiAgICAgIGtleWNoYWluczogc2lub24uc3R1YigpLnJldHVybnMobW9ja0tleWNoYWlucyksXG4gICAgfSBhcyBhbnk7XG5cbiAgICB1dGlscyA9IG5ldyBFY2RzYU1QQ3YyVXRpbHMobW9ja0JpdEdvLCBtb2NrQ29pbik7XG5cbiAgICBzaW5vbi5zdHViKHV0aWxzLCAnZ2V0Qml0Z29HcGdQdWJrZXlCYXNlZE9uRmVhdHVyZUZsYWdzJyBhcyBhbnkpLnJlc29sdmVzKHsgbXBjdjJQdWJsaWNLZXk6IG51bGwgfSk7XG4gICAgKHV0aWxzIGFzIGFueSkuYml0Z29NUEN2MlB1YmxpY0dwZ0tleSA9IHsgYXJtb3I6ICgpID0+ICctLS0tLUJFR0lOIFBHUCBQVUJMSUMgS0VZIEJMT0NLLS0tLS1cXG4nIH07XG5cbiAgICBzaW5vbi5zdHViKHV0aWxzLCAnc2VuZEtleUdlbmVyYXRpb25Sb3VuZDEnKS5yZXNvbHZlcyh7XG4gICAgICBzZXNzaW9uSWQ6IHNlc3Npb25JZCBhcyBhbnksXG4gICAgICB3YWxsZXRHcGdQdWJLZXlTaWdzOiAnc2lncycgYXMgYW55LFxuICAgICAgYml0Z29Nc2cxLFxuICAgICAgYml0Z29Ub1VzZXJNc2cyLFxuICAgICAgYml0Z29Ub0JhY2t1cE1zZzIsXG4gICAgfSk7XG4gICAgc2lub24uc3R1Yih1dGlscywgJ3NlbmRLZXlHZW5lcmF0aW9uUm91bmQyJykucmVzb2x2ZXMoe1xuICAgICAgc2Vzc2lvbklkOiBzZXNzaW9uSWQgYXMgYW55LFxuICAgICAgYml0Z29Db21taXRtZW50MjogJ2NvbW1pdG1lbnQyJyBhcyBhbnksXG4gICAgICBiaXRnb1RvVXNlck1zZzMsXG4gICAgICBiaXRnb1RvQmFja3VwTXNnMyxcbiAgICB9KTtcbiAgICBzaW5vbi5zdHViKHV0aWxzLCAnc2VuZEtleUdlbmVyYXRpb25Sb3VuZDMnKS5yZXNvbHZlcyh7XG4gICAgICBzZXNzaW9uSWQ6IHNlc3Npb25JZCBhcyBhbnksXG4gICAgICBiaXRnb01zZzQsXG4gICAgICBjb21tb25LZXljaGFpbjogY29tbW9uS2V5Y2hhaW4gYXMgYW55LFxuICAgIH0pO1xuICAgIHNpbm9uLnN0dWIodXRpbHMgYXMgYW55LCAnYWRkQml0Z29LZXljaGFpbicpLnJlc29sdmVzKHsgaWQ6ICdiaXRnby1rZXktaWQnLCBjb21tb25LZXljaGFpbiwgaXNNUEN2MjogdHJ1ZSB9KTtcbiAgfSk7XG5cbiAgYWZ0ZXJFYWNoKGZ1bmN0aW9uICgpIHtcbiAgICBzaW5vbi5yZXN0b3JlKCk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgaW52b2tlIGNhbGxiYWNrcyBpbiBvcmRlciBhbmQgcmV0dXJuIGtleWNoYWlucycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBrZXljaGFpbnMgPSBhd2FpdCB1dGlscy5jcmVhdGVLZXljaGFpbnNXaXRoRXh0ZXJuYWxTaWduZXIoeyBlbnRlcnByaXNlLCBjYWxsYmFja3MgfSk7XG5cbiAgICBhc3NlcnQub2soa2V5Y2hhaW5zLnVzZXJLZXljaGFpbik7XG4gICAgYXNzZXJ0Lm9rKGtleWNoYWlucy5iYWNrdXBLZXljaGFpbik7XG4gICAgYXNzZXJ0Lm9rKGtleWNoYWlucy5iaXRnb0tleWNoYWluKTtcblxuICAgIHNpbm9uLmFzc2VydC5jYWxsZWRPbmNlKGNhbGxiYWNrcy5pbml0aWFsaXplQ2FsbGJhY2sgYXMgc2lub24uU2lub25TdHViKTtcbiAgICBzaW5vbi5hc3NlcnQuY2FsbGVkT25jZShjYWxsYmFja3Mucm91bmQyQ2FsbGJhY2sgYXMgc2lub24uU2lub25TdHViKTtcbiAgICBzaW5vbi5hc3NlcnQuY2FsbGVkT25jZShjYWxsYmFja3Mucm91bmQzQ2FsbGJhY2sgYXMgc2lub24uU2lub25TdHViKTtcbiAgICBzaW5vbi5hc3NlcnQuY2FsbGVkT25jZShjYWxsYmFja3MuZmluYWxpemVDYWxsYmFjayBhcyBzaW5vbi5TaW5vblN0dWIpO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIHBhc3Mgcm91bmQxIHJlc3BvbnNlIGFuZCBzdGF0ZSB0byByb3VuZDJDYWxsYmFjaycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBhd2FpdCB1dGlscy5jcmVhdGVLZXljaGFpbnNXaXRoRXh0ZXJuYWxTaWduZXIoeyBlbnRlcnByaXNlLCBjYWxsYmFja3MgfSk7XG5cbiAgICBjb25zdCByb3VuZDJBcmdzID0gKGNhbGxiYWNrcy5yb3VuZDJDYWxsYmFjayBhcyBzaW5vbi5TaW5vblN0dWIpLmZpcnN0Q2FsbC5hcmdzWzBdO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChyb3VuZDJBcmdzLnNlc3Npb25JZCwgc2Vzc2lvbklkKTtcbiAgICBhc3NlcnQuZGVlcFN0cmljdEVxdWFsKHJvdW5kMkFyZ3MuYml0Z29Nc2cxLCBiaXRnb01zZzEpO1xuICAgIGFzc2VydC5kZWVwU3RyaWN0RXF1YWwocm91bmQyQXJncy5iaXRnb1RvVXNlck1zZzIsIGJpdGdvVG9Vc2VyTXNnMik7XG4gICAgYXNzZXJ0LmRlZXBTdHJpY3RFcXVhbChyb3VuZDJBcmdzLmJpdGdvVG9CYWNrdXBNc2cyLCBiaXRnb1RvQmFja3VwTXNnMik7XG4gICAgYXNzZXJ0LmRlZXBTdHJpY3RFcXVhbChyb3VuZDJBcmdzLnVzZXJTdGF0ZSwgdXNlclN0YXRlKTtcbiAgICBhc3NlcnQuZGVlcFN0cmljdEVxdWFsKHJvdW5kMkFyZ3MuYmFja3VwU3RhdGUsIGJhY2t1cFN0YXRlKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBwYXNzIHJvdW5kMiByZXNwb25zZSBhbmQgdGhyZWFkZWQgc3RhdGUgdG8gcm91bmQzQ2FsbGJhY2snLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgYXdhaXQgdXRpbHMuY3JlYXRlS2V5Y2hhaW5zV2l0aEV4dGVybmFsU2lnbmVyKHsgZW50ZXJwcmlzZSwgY2FsbGJhY2tzIH0pO1xuXG4gICAgY29uc3Qgcm91bmQzQXJncyA9IChjYWxsYmFja3Mucm91bmQzQ2FsbGJhY2sgYXMgc2lub24uU2lub25TdHViKS5maXJzdENhbGwuYXJnc1swXTtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwocm91bmQzQXJncy5zZXNzaW9uSWQsIHNlc3Npb25JZCk7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKHJvdW5kM0FyZ3MuYml0Z29Db21taXRtZW50MiwgJ2NvbW1pdG1lbnQyJyk7XG4gICAgYXNzZXJ0LmRlZXBTdHJpY3RFcXVhbChyb3VuZDNBcmdzLmJpdGdvVG9Vc2VyTXNnMywgYml0Z29Ub1VzZXJNc2czKTtcbiAgICBhc3NlcnQuZGVlcFN0cmljdEVxdWFsKHJvdW5kM0FyZ3MuYml0Z29Ub0JhY2t1cE1zZzMsIGJpdGdvVG9CYWNrdXBNc2czKTtcbiAgICBhc3NlcnQuZGVlcFN0cmljdEVxdWFsKHJvdW5kM0FyZ3MudXNlclN0YXRlLCB1c2VyU3RhdGUpO1xuICAgIGFzc2VydC5kZWVwU3RyaWN0RXF1YWwocm91bmQzQXJncy5iYWNrdXBTdGF0ZSwgYmFja3VwU3RhdGUpO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIHBhc3Mgcm91bmQzIHJlc3BvbnNlIGFuZCBiaXRnb0NvbW1vbktleWNoYWluIHRvIGZpbmFsaXplQ2FsbGJhY2snLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgYXdhaXQgdXRpbHMuY3JlYXRlS2V5Y2hhaW5zV2l0aEV4dGVybmFsU2lnbmVyKHsgZW50ZXJwcmlzZSwgY2FsbGJhY2tzIH0pO1xuXG4gICAgY29uc3QgZmluYWxpemVBcmdzID0gKGNhbGxiYWNrcy5maW5hbGl6ZUNhbGxiYWNrIGFzIHNpbm9uLlNpbm9uU3R1YikuZmlyc3RDYWxsLmFyZ3NbMF07XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKGZpbmFsaXplQXJncy5zZXNzaW9uSWQsIHNlc3Npb25JZCk7XG4gICAgYXNzZXJ0LmRlZXBTdHJpY3RFcXVhbChmaW5hbGl6ZUFyZ3MuYml0Z29Nc2c0LCBiaXRnb01zZzQpO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChmaW5hbGl6ZUFyZ3MuYml0Z29Db21tb25LZXljaGFpbiwgY29tbW9uS2V5Y2hhaW4pO1xuICAgIGFzc2VydC5kZWVwU3RyaWN0RXF1YWwoZmluYWxpemVBcmdzLnVzZXJTdGF0ZSwgdXNlclN0YXRlKTtcbiAgICBhc3NlcnQuZGVlcFN0cmljdEVxdWFsKGZpbmFsaXplQXJncy5iYWNrdXBTdGF0ZSwgYmFja3VwU3RhdGUpO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIHJlamVjdCB3aGVuIGZpbmFsaXplQ2FsbGJhY2sgcmV0dXJucyBtaXNtYXRjaGVkIGNvbW1vbktleWNoYWluJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIChjYWxsYmFja3MuZmluYWxpemVDYWxsYmFjayBhcyBzaW5vbi5TaW5vblN0dWIpLnJlc29sdmVzKHsgY29tbW9uS2V5Y2hhaW46ICdkaWZmZXJlbnQta2V5Y2hhaW4nIH0pO1xuXG4gICAgYXdhaXQgYXNzZXJ0LnJlamVjdHMoXG4gICAgICAoKSA9PiB1dGlscy5jcmVhdGVLZXljaGFpbnNXaXRoRXh0ZXJuYWxTaWduZXIoeyBlbnRlcnByaXNlLCBjYWxsYmFja3MgfSksXG4gICAgICAvQ29tbW9uIGtleWNoYWlucyBkbyBub3QgbWF0Y2gvXG4gICAgKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCByZWplY3Qgd2hlbiByb3VuZDIgcmV0dXJucyBtaXNtYXRjaGVkIHNlc3Npb25JZCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAodXRpbHMuc2VuZEtleUdlbmVyYXRpb25Sb3VuZDIgYXMgc2lub24uU2lub25TdHViKS5yZXNvbHZlcyh7XG4gICAgICBzZXNzaW9uSWQ6ICdkaWZmZXJlbnQtc2Vzc2lvbicgYXMgYW55LFxuICAgICAgYml0Z29Db21taXRtZW50MjogJ2NvbW1pdG1lbnQyJyBhcyBhbnksXG4gICAgICBiaXRnb1RvVXNlck1zZzMsXG4gICAgICBiaXRnb1RvQmFja3VwTXNnMyxcbiAgICB9KTtcblxuICAgIGF3YWl0IGFzc2VydC5yZWplY3RzKFxuICAgICAgKCkgPT4gdXRpbHMuY3JlYXRlS2V5Y2hhaW5zV2l0aEV4dGVybmFsU2lnbmVyKHsgZW50ZXJwcmlzZSwgY2FsbGJhY2tzIH0pLFxuICAgICAgL1Nlc3Npb24gSUQgbWlzbWF0Y2ggYWZ0ZXIgcm91bmQgMi9cbiAgICApO1xuICB9KTtcbn0pO1xuXG5kZXNjcmliZSgnc2lnblJlcXVlc3RCYXNlIG1lc3NhZ2UgZmluYWxpemF0aW9uJywgKCkgPT4ge1xuICBsZXQgc2FuZGJveDogc2lub24uU2lub25TYW5kYm94O1xuXG4gIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgIHNhbmRib3ggPSBzaW5vbi5jcmVhdGVTYW5kYm94KCk7XG4gIH0pO1xuXG4gIGFmdGVyRWFjaCgoKSA9PiB7XG4gICAgc2FuZGJveC5yZXN0b3JlKCk7XG4gIH0pO1xuXG4gIGNvbnN0IHdhbGxldElEID0gJzYyZmU1MzZhNmI0Y2Y3MDAwN2FjYjQ4YzBlN2JiMGIwJztcbiAgY29uc3QgZmFrZVJlcUlkID0geyBpbmM6IHNpbm9uLnN0dWIoKSwgdG9TdHJpbmc6IHNpbm9uLnN0dWIoKS5yZXR1cm5zKCd0ZXN0LXJlcScpIH0gYXMgdW5rbm93biBhcyBSZXF1ZXN0VHJhY2VyO1xuXG4gIGxldCB1c2VyU2hhcmU6IEJ1ZmZlcjtcbiAgbGV0IGJpdGdvS2V5U2hhcmU6IEJ1ZmZlcjtcbiAgYmVmb3JlKCdnZW5lcmF0ZSBrZXkgc2hhcmVzIGZvciBmaW5hbGl6YXRpb24gdGVzdHMnLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgW3VzZXJEa2dTZXNzaW9uLCAsIGJpdGdvRGtnU2Vzc2lvbl0gPSBhd2FpdCBEa2xzVXRpbHMuZ2VuZXJhdGVES0dLZXlTaGFyZXMoKTtcbiAgICB1c2VyU2hhcmUgPSB1c2VyRGtnU2Vzc2lvbi5nZXRLZXlTaGFyZSgpO1xuICAgIGJpdGdvS2V5U2hhcmUgPSBiaXRnb0RrZ1Nlc3Npb24uZ2V0S2V5U2hhcmUoKTtcbiAgfSk7XG5cbiAgLyoqXG4gICAqIERyaXZlcyBzaWduUmVxdWVzdEJhc2UgdGhyb3VnaCB0aGUgUkVBTCBES0xTIHByb3RvY29sOiB0aGUgdXNlci1zaWRlIERTR1xuICAgKiBzZXNzaW9uIGlzIHRoZSBvbmUgdGhlIGNsYXNzIGJ1aWxkcyBpdHNlbGY7IHRoZSBCaXRHby1zaWRlIHNlc3Npb24gaXMgYVxuICAgKiByZWFsIERTRyBhZHZhbmNlZCBieSB0aGlzIHRlc3QncyBtb2NrZWQgSFRUUCBsYXllciBvbiBldmVyeSAvc2lnbiBQT1NULFxuICAgKiB1c2luZyB0aGUgc2lnbkJpdGdvTVBDdjJSb3VuZFggaGVscGVycy4gT25seSB0aGUgSFRUUCB0cmFuc3BvcnQgaXMgZmFrZWRcbiAgICogKGJpdGdvLmdldCAvIGJpdGdvLnBvc3QgY2hhaW5zKSwgd2hpY2ggaXMgZXhhY3RseSB0aGUgc3VyZmFjZSB0aGVcbiAgICogZmluYWxpemF0aW9uLXRhaWwgZGVjaXNpb24gYWN0cyBvbjogR0VUIHR4cmVxdWVzdHMgdnMgUE9TVCAvc2VuZC5cbiAgICovXG4gIGNvbnN0IHJ1bkZ1bGxTaWduaW5nRmxvdyA9IGFzeW5jIChwYXJhbXM6IHsgcmVxdWVzdFR5cGU6ICd0eCcgfCAnbWVzc2FnZSc7IHR4UmVxdWVzdDogVHhSZXF1ZXN0IH0pID0+IHtcbiAgICBjb25zdCBwb3N0ZWRVcmxzOiBzdHJpbmdbXSA9IFtdO1xuICAgIGNvbnN0IGdldFVybHM6IHN0cmluZ1tdID0gW107XG4gICAgY29uc3QgaGFzaEJ1ZmZlciA9IEJ1ZmZlci5hbGxvYygzMiwgMSk7XG4gICAgY29uc3QgZGVyaXZhdGlvblBhdGggPSAnbS8wJztcblxuICAgIC8vIFRoZSBCaXRHby1zaWRlIHNlc3Npb24gc2lnbnMgdGhlIHNhbWUgaGFzaCBidWZmZXIgdGhlIHVzZXIgc2Vzc2lvbiBpc1xuICAgIC8vIGdpdmVuIHZpYSB0aGUgZ2V0TXBjdjJIYXNoQnVmZmVyIHN0dWIgYmVsb3cuXG4gICAgY29uc3QgYml0Z29TZXNzaW9uID0gbmV3IERrbHNEc2cuRHNnKGJpdGdvS2V5U2hhcmUsIDIsIGRlcml2YXRpb25QYXRoLCBoYXNoQnVmZmVyKTtcblxuICAgIC8vIENhcnJpZXIgc2hhcGVkIGZvciB0aGUgc2lnbkJpdGdvTVBDdjJSb3VuZFggaGVscGVycywgd2hpY2ggaW5kZXhcbiAgICAvLyB0cmFuc2FjdGlvbnNbMF07IHRoZSByZXNwb25zZSBpcyByZW1hcHBlZCBiYWNrIHRvIHRoZSByZWFsIHJlc291cmNlLlxuICAgIGNvbnN0IGNhcnJpZXIgPSB7IHRyYW5zYWN0aW9uczogW3sgc2lnbmF0dXJlU2hhcmVzOiBbXSB9XSB9IGFzIHVua25vd24gYXMgVHhSZXF1ZXN0O1xuICAgIGxldCBzaWduUG9zdENvdW50ID0gMDtcblxuICAgIGNvbnN0IG1vY2tCZyA9IHtcbiAgICAgIGdldEVudjogKCkgPT4gJ3Rlc3QnLFxuICAgICAgc2V0UmVxdWVzdFRyYWNlcjogKCkgPT4gdW5kZWZpbmVkLFxuICAgICAgdXJsOiAocDogc3RyaW5nKSA9PiBwLFxuICAgICAgZ2V0OiAodXJsOiBzdHJpbmcpID0+ICh7XG4gICAgICAgIHF1ZXJ5KCkge1xuICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9LFxuICAgICAgICByZXRyeSgpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfSxcbiAgICAgICAgYXN5bmMgcmVzdWx0KCkge1xuICAgICAgICAgIGdldFVybHMucHVzaCh1cmwpO1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eFJlcXVlc3RzOiBbXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAuLi5wYXJhbXMudHhSZXF1ZXN0LFxuICAgICAgICAgICAgICAgIHN0YXRlOiAnZGVsaXZlcmVkJyxcbiAgICAgICAgICAgICAgICBbcGFyYW1zLnJlcXVlc3RUeXBlID09PSAnbWVzc2FnZScgPyAnbWVzc2FnZXMnIDogJ3RyYW5zYWN0aW9ucyddOiBbXG4gICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHN0YXRlOiAnc2lnbmVkJyxcbiAgICAgICAgICAgICAgICAgICAgdHhIYXNoOiAnMHhzaWduZWQtbWVzc2FnZS1oYXNoJyxcbiAgICAgICAgICAgICAgICAgICAgc2lnbmF0dXJlU2hhcmVzOiBbXSxcbiAgICAgICAgICAgICAgICAgICAgLi4uKHBhcmFtcy5yZXF1ZXN0VHlwZSA9PT0gJ3R4J1xuICAgICAgICAgICAgICAgICAgICAgID8geyB1bnNpZ25lZFR4OiB7IGRlcml2YXRpb25QYXRoLCBzaWduYWJsZUhleDogJ2FiY2QnLCBzZXJpYWxpemVkVHhIZXg6ICdhYmNkJyB9IH1cbiAgICAgICAgICAgICAgICAgICAgICA6IHt9KSxcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgfTtcbiAgICAgICAgfSxcbiAgICAgIH0pLFxuICAgICAgcG9zdDogKHVybDogc3RyaW5nKSA9PiB7XG4gICAgICAgIHBvc3RlZFVybHMucHVzaCh1cmwpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIF9ib2R5OiB1bmRlZmluZWQgYXMgdW5rbm93bixcbiAgICAgICAgICBzZW5kKGJvZHk/OiB1bmtub3duKSB7XG4gICAgICAgICAgICB0aGlzLl9ib2R5ID0gYm9keTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgYXN5bmMgcmVzdWx0KCkge1xuICAgICAgICAgICAgaWYgKCF1cmwuZW5kc1dpdGgoJy9zaWduJykpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHsgLi4ucGFyYW1zLnR4UmVxdWVzdCwgc3RhdGU6ICdkZWxpdmVyZWQnIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzaWduUG9zdENvdW50ICs9IDE7XG4gICAgICAgICAgICBjb25zdCBib2R5ID0gdGhpcy5fYm9keSBhcyB7IHNpZ25hdHVyZVNoYXJlczogU2lnbmF0dXJlU2hhcmVSZWNvcmRbXTsgc2lnbmVyR3BnUHVibGljS2V5OiBzdHJpbmcgfTtcbiAgICAgICAgICAgIGNvbnN0IHVzZXJTaGFyZVJlY29yZCA9IGJvZHkuc2lnbmF0dXJlU2hhcmVzWzBdO1xuICAgICAgICAgICAgaWYgKHNpZ25Qb3N0Q291bnQgPT09IDEpIHtcbiAgICAgICAgICAgICAgYXdhaXQgc2lnbkJpdGdvTVBDdjJSb3VuZDEoYml0Z29TZXNzaW9uLCBjYXJyaWVyLCB1c2VyU2hhcmVSZWNvcmQsIGJvZHkuc2lnbmVyR3BnUHVibGljS2V5KTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoc2lnblBvc3RDb3VudCA9PT0gMikge1xuICAgICAgICAgICAgICBhd2FpdCBzaWduQml0Z29NUEN2MlJvdW5kMihiaXRnb1Nlc3Npb24sIGNhcnJpZXIsIHVzZXJTaGFyZVJlY29yZCwgYm9keS5zaWduZXJHcGdQdWJsaWNLZXkpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgYXdhaXQgc2lnbkJpdGdvTVBDdjJSb3VuZDMoYml0Z29TZXNzaW9uLCB1c2VyU2hhcmVSZWNvcmQsIGJvZHkuc2lnbmVyR3BnUHVibGljS2V5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHNoYXJlcyA9IGNhcnJpZXIudHJhbnNhY3Rpb25zIVswXS5zaWduYXR1cmVTaGFyZXM7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAuLi5wYXJhbXMudHhSZXF1ZXN0LFxuICAgICAgICAgICAgICBbcGFyYW1zLnJlcXVlc3RUeXBlID09PSAnbWVzc2FnZScgPyAnbWVzc2FnZXMnIDogJ3RyYW5zYWN0aW9ucyddOiBbeyBzaWduYXR1cmVTaGFyZXM6IHNoYXJlcyB9XSxcbiAgICAgICAgICAgIH0gYXMgdW5rbm93biBhcyBUeFJlcXVlc3Q7XG4gICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICAgIH0sXG4gICAgfSBhcyB1bmtub3duIGFzIEJpdEdvQmFzZTtcblxuICAgIGNvbnN0IG1vY2tDb2luID0ge1xuICAgICAgZ2V0TVBDQWxnb3JpdGhtOiAoKSA9PiAnZWNkc2EnLFxuICAgICAgdmVyaWZ5VHJhbnNhY3Rpb246ICgpID0+IFByb21pc2UucmVzb2x2ZSh0cnVlKSxcbiAgICAgIGdldENvbmZpZzogKCkgPT4gKHsgZmFtaWx5OiAnZXRoJyB9KSxcbiAgICB9IGFzIHVua25vd24gYXMgSUJhc2VDb2luO1xuICAgIGNvbnN0IG1vY2tXYWxsZXQgPSB7XG4gICAgICBpZDogKCkgPT4gd2FsbGV0SUQsXG4gICAgICBtdWx0aXNpZ1R5cGU6ICgpID0+ICd0c3MnLFxuICAgICAgbXVsdGlzaWdUeXBlVmVyc2lvbjogKCkgPT4gJ01QQ3YyJyxcbiAgICB9O1xuICAgIGNvbnN0IHV0aWxzID0gbmV3IEVjZHNhTVBDdjJVdGlscyhtb2NrQmcsIG1vY2tDb2luLCBtb2NrV2FsbGV0IGFzIG5ldmVyKTtcbiAgICBzYW5kYm94XG4gICAgICAuc3R1Yih1dGlscyBhcyB1bmtub3duIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+LCAncGlja0JpdGdvUHViR3BnS2V5Rm9yU2lnbmluZycpXG4gICAgICAucmVzb2x2ZXMoYXdhaXQgb3BlbnBncC5yZWFkS2V5KHsgYXJtb3JlZEtleTogYml0Z29HcGdLZXkucHVibGljIH0pKTtcbiAgICBzYW5kYm94LnN0dWIodXRpbHMgYXMgdW5rbm93biBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiwgJ2dldE1wY3YySGFzaEJ1ZmZlcicpLnJldHVybnMoaGFzaEJ1ZmZlcik7XG5cbiAgICBjb25zdCBiYXNlUGFyYW1zID0ge1xuICAgICAgdHhSZXF1ZXN0OiBwYXJhbXMudHhSZXF1ZXN0LFxuICAgICAgcHJ2OiB1c2VyU2hhcmUudG9TdHJpbmcoJ2Jhc2U2NCcpLFxuICAgICAgcmVxSWQ6IGZha2VSZXFJZCxcbiAgICB9O1xuICAgIGNvbnN0IHJlc3VsdCA9XG4gICAgICBwYXJhbXMucmVxdWVzdFR5cGUgPT09ICdtZXNzYWdlJ1xuICAgICAgICA/IGF3YWl0IHV0aWxzLnNpZ25UeFJlcXVlc3RGb3JNZXNzYWdlKHtcbiAgICAgICAgICAgIC4uLmJhc2VQYXJhbXMsXG4gICAgICAgICAgICBtZXNzYWdlUmF3OiAncmF3JyxcbiAgICAgICAgICAgIG1lc3NhZ2VFbmNvZGVkOiAnYWJjZCcsXG4gICAgICAgICAgICBidWZmZXJUb1NpZ246IEJ1ZmZlci5mcm9tKCdhYmNkJywgJ2hleCcpLFxuICAgICAgICAgIH0pXG4gICAgICAgIDogYXdhaXQgdXRpbHMuc2lnblR4UmVxdWVzdCh7XG4gICAgICAgICAgICAuLi5iYXNlUGFyYW1zLFxuICAgICAgICAgICAgdHhQYXJhbXM6IHsgcmVjaXBpZW50czogW3sgYWRkcmVzczogJzB4JyArICcwMCcucmVwZWF0KDIwKSwgYW1vdW50OiAnMTAwMCcgfV0gfSxcbiAgICAgICAgICB9KTtcblxuICAgIHJldHVybiB7IHJlc3VsdCwgcG9zdGVkVXJscywgZ2V0VXJscyB9O1xuICB9O1xuXG4gIGl0KCdtZXNzYWdlIHJlcXVlc3RzIGZpbmFsaXplIHZpYSBHRVQgKHdhbGxldC1wbGF0Zm9ybSBkZWxpdmVycyBhdCBzaGFyZSBpbmdlc3Rpb24pLCBuZXZlciBQT1NUIC9zZW5kJywgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHR4UmVxdWVzdElkID0gJ21zZy10eHJlcS1maW5hbGl6YXRpb24nO1xuICAgIGNvbnN0IHsgcmVzdWx0LCBwb3N0ZWRVcmxzLCBnZXRVcmxzIH0gPSBhd2FpdCBydW5GdWxsU2lnbmluZ0Zsb3coe1xuICAgICAgcmVxdWVzdFR5cGU6ICdtZXNzYWdlJyxcbiAgICAgIHR4UmVxdWVzdDoge1xuICAgICAgICB0eFJlcXVlc3RJZCxcbiAgICAgICAgd2FsbGV0SWQ6IHdhbGxldElELFxuICAgICAgICBhcGlWZXJzaW9uOiAnZnVsbCcsXG4gICAgICAgIHN0YXRlOiAncGVuZGluZ0RlbGl2ZXJ5JyxcbiAgICAgICAgbWVzc2FnZXM6IFt7IG1lc3NhZ2VSYXc6ICdyYXcnLCBtZXNzYWdlRW5jb2RlZDogJ2FiY2QnLCBkZXJpdmF0aW9uUGF0aDogJ20vMCcgfV0sXG4gICAgICB9IGFzIHVua25vd24gYXMgVHhSZXF1ZXN0LFxuICAgIH0pO1xuXG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKHJlc3VsdC5zdGF0ZSwgJ2RlbGl2ZXJlZCcpO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChcbiAgICAgIHBvc3RlZFVybHMuZmlsdGVyKCh1cmwpID0+IHVybC5lbmRzV2l0aCgnL3NlbmQnKSkubGVuZ3RoLFxuICAgICAgMCxcbiAgICAgICdtZXNzYWdlIHNpZ25pbmcgbXVzdCBub3QgUE9TVCAvc2VuZCAod2FsbGV0LXBsYXRmb3JtIGFscmVhZHkgZGVsaXZlcmVkIGF0IHNoYXJlIGluZ2VzdGlvbiknXG4gICAgKTtcbiAgICBhc3NlcnQub2soXG4gICAgICBwb3N0ZWRVcmxzLmV2ZXJ5KCh1cmwpID0+IHVybC5pbmNsdWRlcyhgL3R4cmVxdWVzdHMvJHt0eFJlcXVlc3RJZH0vbWVzc2FnZXMvMC9zaWduYCkpLFxuICAgICAgJ2FsbCBtZXNzYWdlIFBPU1RzIG11c3QgYmUgc2hhcmUgc3VibWlzc2lvbnMnXG4gICAgKTtcbiAgICAvLyBUaGUgcGFyay1jaGVjayBHRVQgaXMgc2tpcHBlZCAob2JqZWN0IHR4UmVxdWVzdCkgc28gdGhlIG9ubHkgR0VUIGlzIHRoZVxuICAgIC8vIGZpbmFsIHJlLWZldGNoLlxuICAgIGFzc2VydC5zdHJpY3RFcXVhbChnZXRVcmxzLmxlbmd0aCwgMSk7XG4gICAgYXNzZXJ0Lm9rKGdldFVybHNbMF0uaW5jbHVkZXMoJy90eHJlcXVlc3RzJykpO1xuICB9KTtcblxuICBpdCgndHJhbnNhY3Rpb24gcmVxdWVzdHMgc3RpbGwgZmluYWxpemUgdmlhIFBPU1QgL3NlbmQnLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgdHhSZXF1ZXN0SWQgPSAndHgtdHhyZXEtZmluYWxpemF0aW9uJztcbiAgICBjb25zdCB7IHJlc3VsdCwgcG9zdGVkVXJscyB9ID0gYXdhaXQgcnVuRnVsbFNpZ25pbmdGbG93KHtcbiAgICAgIHJlcXVlc3RUeXBlOiAndHgnLFxuICAgICAgdHhSZXF1ZXN0OiB7XG4gICAgICAgIHR4UmVxdWVzdElkLFxuICAgICAgICB3YWxsZXRJZDogd2FsbGV0SUQsXG4gICAgICAgIGFwaVZlcnNpb246ICdmdWxsJyxcbiAgICAgICAgc3RhdGU6ICdwZW5kaW5nRGVsaXZlcnknLFxuICAgICAgICB0cmFuc2FjdGlvbnM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICB1bnNpZ25lZFR4OiB7IGRlcml2YXRpb25QYXRoOiAnbS8wJywgc2lnbmFibGVIZXg6ICdhYmNkJywgc2VyaWFsaXplZFR4SGV4OiAnYWJjZCcgfSxcbiAgICAgICAgICAgIHNpZ25hdHVyZVNoYXJlczogW10sXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgIH0gYXMgdW5rbm93biBhcyBUeFJlcXVlc3QsXG4gICAgfSk7XG5cbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwocmVzdWx0LnN0YXRlLCAnZGVsaXZlcmVkJyk7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKFxuICAgICAgcG9zdGVkVXJscy5maWx0ZXIoKHVybCkgPT4gdXJsLmVuZHNXaXRoKCcvdHJhbnNhY3Rpb25zLzAvc2VuZCcpKS5sZW5ndGgsXG4gICAgICAxLFxuICAgICAgJ3RyYW5zYWN0aW9uIHNpZ25pbmcgbXVzdCBQT1NUIC9zZW5kIHRvIGJyb2FkY2FzdCdcbiAgICApO1xuICB9KTtcbn0pO1xuIl19
|
|
1068
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWNkc2FNUEN2Mi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Rlc3QvdW5pdC9iaXRnby91dGlscy90c3MvZWNkc2EvZWNkc2FNUEN2Mi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLCtDQUFpQztBQUNqQyw2Q0FBK0I7QUFDL0IsbUNBQXVEO0FBQ3ZELG9EQUFzQztBQVd0Qyx5REFBbUY7QUFDbkYsdURBQXlDO0FBQ3pDLCtDQVErQjtBQUMvQix1Q0FBd0M7QUFFeEMsUUFBUSxDQUFDLGNBQWMsRUFBRSxLQUFLLElBQUksRUFBRTtJQUNsQyxJQUFJLFNBQWlCLENBQUM7SUFDdEIsSUFBSSxVQUFrQixDQUFDO0lBRXZCLE1BQU0sQ0FBQyxpQ0FBaUMsRUFBRSxLQUFLLElBQUksRUFBRTtRQUNuRCxNQUFNLENBQUMsY0FBYyxFQUFFLGdCQUFnQixFQUFFLGVBQWUsQ0FBQyxHQUFHLE1BQU0sdUJBQVMsQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO1FBQ25HLE1BQU0sQ0FBQyxFQUFFLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDMUIsTUFBTSxDQUFDLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQzVCLE1BQU0sQ0FBQyxFQUFFLENBQUMsZUFBZSxDQUFDLENBQUM7UUFFM0IsU0FBUyxHQUFHLGNBQWMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUN6QyxVQUFVLEdBQUcsZUFBZSxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQzdDLENBQUMsQ0FBQyxDQUFDO0lBRUgsSUFBSSxlQUFnQyxDQUFDO0lBRXJDLE1BQU0sQ0FBQyw0QkFBNEIsRUFBRSxLQUFLLElBQUksRUFBRTtRQUM5QyxNQUFNLE1BQU0sR0FBRyxFQUFlLENBQUM7UUFDL0IsTUFBTSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsT0FBTyxDQUFDLE1BQU0s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LENBQUM7SUFDaEUsQ0FBQyxDQUFDLENBQUM7SUFFSCxFQUFFLENBQUMsdUVBQXVFLEVBQUUsS0FBSztRQUM5RSxTQUFTLENBQUMsZ0JBQW9DLENBQUMsUUFBUSxDQUFDLEVBQUUsY0FBYyxFQUFFLG9CQUFvQixFQUFFLENBQUMsQ0FBQztRQUVuRyxNQUFNLE1BQU0sQ0FBQyxPQUFPLENBQ2xCLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxpQ0FBaUMsQ0FBQyxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsQ0FBQyxFQUN4RSwrQkFBK0IsQ0FDaEMsQ0FBQztJQUNKLENBQUMsQ0FBQyxDQUFDO0lBRUgsRUFBRSxDQUFDLHdEQUF3RCxFQUFFLEtBQUs7UUFDL0QsS0FBSyxDQUFDLHVCQUEyQyxDQUFDLFFBQVEsQ0FBQztZQUMxRCxTQUFTLEVBQUUsbUJBQTBCO1lBQ3JDLGdCQUFnQixFQUFFLGFBQW9CO1lBQ3RDLGVBQWU7WUFDZixpQkFBaUI7U0FDbEIsQ0FBQyxDQUFDO1FBRUgsTUFBTSxNQUFNLENBQUMsT0FBTyxDQUNsQixHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUMsaUNBQWlDLENBQUMsRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLENBQUMsRUFDeEUsbUNBQW1DLENBQ3BDLENBQUM7SUFDSixDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5pbXBvcnQgKiBhcyBzaW5vbiBmcm9tICdzaW5vbic7XG5pbXBvcnQgeyBIYXNoLCBjcmVhdGVIYXNoLCByYW5kb21CeXRlcyB9IGZyb20gJ2NyeXB0byc7XG5pbXBvcnQgY3JlYXRlS2VjY2FrSGFzaCBmcm9tICdrZWNjYWsnO1xuaW1wb3J0IHtcbiAgTVBDdjJCcm9hZGNhc3RNZXNzYWdlLFxuICBNUEN2MlAyUE1lc3NhZ2UsXG4gIE1QQ3YyUGFydHlGcm9tU3RyaW5nT3JOdW1iZXIsXG4gIE1QQ3YyU2lnbmF0dXJlU2hhcmVSb3VuZDFJbnB1dCxcbiAgTVBDdjJTaWduYXR1cmVTaGFyZVJvdW5kMU91dHB1dCxcbiAgTVBDdjJTaWduYXR1cmVTaGFyZVJvdW5kMklucHV0LFxuICBNUEN2MlNpZ25hdHVyZVNoYXJlUm91bmQyT3V0cHV0LFxuICBNUEN2MlNpZ25hdHVyZVNoYXJlUm91bmQzSW5wdXQsXG59IGZyb20gJ0BiaXRnby9wdWJsaWMtdHlwZXMnO1xuaW1wb3J0IHsgRGtsc0NvbW1zLCBEa2xzRHNnLCBEa2xzVHlwZXMsIERrbHNVdGlscyB9IGZyb20gJ0BiaXRnby1iZXRhL3Nkay1saWItbXBjJztcbmltcG9ydCAqIGFzIHNqY2wgZnJvbSAnQGJpdGdvLWJldGEvc2pjbCc7XG5pbXBvcnQge1xuICBCaXRHb0Jhc2UsXG4gIEVjZHNhTVBDdjJVdGlscyxcbiAgRWNkc2FNUEN2MktleUdlbkNhbGxiYWNrcyxcbiAgSUJhc2VDb2luLFxuICBTaWduYXR1cmVTaGFyZVJlY29yZCxcbiAgU2lnbmF0dXJlU2hhcmVUeXBlLFxuICBUeFJlcXVlc3QsXG59IGZyb20gJy4uLy4uLy4uLy4uLy4uLy4uL3NyYyc7XG5pbXBvcnQgeyBiaXRnb0dwZ0tleSB9IGZyb20gJy4vZ3BnS2V5cyc7XG5cbmRlc2NyaWJlKCdFQ0RTQSBNUEMgdjInLCBhc3luYyAoKSA9PiB7XG4gIGxldCB1c2VyU2hhcmU6IEJ1ZmZlcjtcbiAgbGV0IGJpdGdvU2hhcmU6IEJ1ZmZlcjtcblxuICBiZWZvcmUoJ2dlbmVyYXRlIGtleSBzaGFyZXMgZm9yIHRlc3RpbmcnLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgW3VzZXJEa2dTZXNzaW9uLCBiYWNrdXBEa2dTZXNzaW9uLCBiaXRnb0RrZ1Nlc3Npb25dID0gYXdhaXQgRGtsc1V0aWxzLmdlbmVyYXRlREtHS2V5U2hhcmVzKCk7XG4gICAgYXNzZXJ0Lm9rKHVzZXJEa2dTZXNzaW9uKTtcbiAgICBhc3NlcnQub2soYmFja3VwRGtnU2Vzc2lvbik7XG4gICAgYXNzZXJ0Lm9rKGJpdGdvRGtnU2Vzc2lvbik7XG5cbiAgICB1c2VyU2hhcmUgPSB1c2VyRGtnU2Vzc2lvbi5nZXRLZXlTaGFyZSgpO1xuICAgIGJpdGdvU2hhcmUgPSBiaXRnb0RrZ1Nlc3Npb24uZ2V0S2V5U2hhcmUoKTtcbiAgfSk7XG5cbiAgbGV0IGVjZHNhTVBDdjJVdGlsczogRWNkc2FNUEN2MlV0aWxzO1xuXG4gIGJlZm9yZSgnaW5pdGlhbGl6ZSBFY2RzYU1QQ3YyVXRpbHMnLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgbW9ja0JnID0ge30gYXMgQml0R29CYXNlO1xuICAgIG1vY2tCZy5nZXRFbnYgPSBzaW5vbi5zdHViKCkucmV0dXJucygndGVzdCcpO1xuICAgIGNvbnN0IGVuY3J5cHRJbXBsID0gKHBhcmFtczogeyBwYXNzd29yZDogc3RyaW5nOyBpbnB1dDogc3RyaW5nOyBhZGF0YT86IHN0cmluZyB9KSA9PiB7XG4gICAgICBjb25zdCBzYWx0ID0gcmFuZG9tQnl0ZXMoOCk7XG4gICAgICBjb25zdCBpdiA9IHJhbmRvbUJ5dGVzKDE2KTtcbiAgICAgIHJldHVybiBzamNsLmVuY3J5cHQocGFyYW1zLnBhc3N3b3JkLCBwYXJhbXMuaW5wdXQsIHtcbiAgICAgICAgc2FsdDogW2J5dGVzVG9Xb3JkKHNhbHQuc3ViYXJyYXkoMCwgNCkpLCBieXRlc1RvV29yZChzYWx0LnN1YmFycmF5KDQpKV0sXG4gICAgICAgIGl2OiBbXG4gICAgICAgICAgYnl0ZXNUb1dvcmQoaXYuc3ViYXJyYXkoMCwgNCkpLFxuICAgICAgICAgIGJ5dGVzVG9Xb3JkKGl2LnN1YmFycmF5KDQsIDgpKSxcbiAgICAgICAgICBieXRlc1RvV29yZChpdi5zdWJhcnJheSg4LCAxMikpLFxuICAgICAgICAgIGJ5dGVzVG9Xb3JkKGl2LnN1YmFycmF5KDEyLCAxNikpLFxuICAgICAgICBdLFxuICAgICAgICBhZGF0YTogcGFyYW1zLmFkYXRhLFxuICAgICAgfSk7XG4gICAgfTtcbiAgICBjb25zdCBkZWNyeXB0SW1wbCA9IChwYXJhbXM6IHsgcGFzc3dvcmQ6IHN0cmluZzsgaW5wdXQ6IHN0cmluZyB9KSA9PiB7XG4gICAgICByZXR1cm4gc2pjbC5kZWNyeXB0KHBhcmFtcy5wYXNzd29yZCwgcGFyYW1zLmlucHV0KTtcbiAgICB9O1xuICAgIG1vY2tCZy5lbmNyeXB0ID0gc2lub24uc3R1YigpLmNhbGxzRmFrZShlbmNyeXB0SW1wbCk7XG4gICAgbW9ja0JnLmVuY3J5cHQgPSBzaW5vbi5zdHViKCkuY2FsbHNGYWtlKGFzeW5jIChwYXJhbXMpID0+IGVuY3J5cHRJbXBsKHBhcmFtcykpO1xuICAgIG1vY2tCZy5kZWNyeXB0ID0gc2lub24uc3R1YigpLmNhbGxzRmFrZShkZWNyeXB0SW1wbCk7XG4gICAgbW9ja0JnLmRlY3J5cHQgPSBzaW5vbi5zdHViKCkuY2FsbHNGYWtlKGFzeW5jIChwYXJhbXMpID0+IGRlY3J5cHRJbXBsKHBhcmFtcykpO1xuXG4gICAgY29uc3QgbW9ja0NvaW4gPSB7fSBhcyBJQmFzZUNvaW47XG4gICAgbW9ja0NvaW4uZ2V0SGFzaEZ1bmN0aW9uID0gc2lub24uc3R1YigpLmNhbGxzRmFrZSgoKSA9PiBjcmVhdGVLZWNjYWtIYXNoKCdrZWNjYWsyNTYnKSBhcyBIYXNoKTtcbiAgICBtb2NrQ29pbi5pc1NpZ25hYmxlUHJlSGFzaGVkID0gKHVuc2lnbmVkVHgpID0+IHVuc2lnbmVkVHguc2VyaWFsaXplZFR4SGV4Py5zdGFydHNXaXRoKCcwMDAwJykgPz8gZmFsc2U7XG5cbiAgICBlY2RzYU1QQ3YyVXRpbHMgPSBuZXcgRWNkc2FNUEN2MlV0aWxzKG1vY2tCZywgbW9ja0NvaW4pO1xuICB9KTtcblxuICBjb25zdCB3YWxsZXRJRCA9ICc2MmZlNTM2YTZiNGNmNzAwMDdhY2I0OGMwZTdiYjBiMCc7XG4gIGNvbnN0IHdhbGxldFBhc3NwaHJhc2UgPSAndGVzdFBhc3MnO1xuXG4gIGl0KCdzaG91bGQgc2lnbiBhIG1lc3NhZ2UgaGFzaCB1c2luZyBFQ0RTQSBNUEMgdjIgb2ZmbGluZSByb3VuZHMnLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgdE1lc3NhZ2UgPSAndGVzdE1lc3NhZ2UnO1xuICAgIGNvbnN0IGRlcml2YXRpb25QYXRoID0gJ20vMCc7XG5cbiAgICAvLyByb3VuZCAxXG4gICAgY29uc3QgcmVxTVBDdjJTaWduaW5nUm91bmQxID0ge1xuICAgICAgdHhSZXF1ZXN0OiB7XG4gICAgICAgIHR4UmVxdWVzdElkOiAnMTIzNDU2JyxcbiAgICAgICAgYXBpVmVyc2lvbjogJ2Z1bGwnLFxuICAgICAgICB3YWxsZXRJZDogd2FsbGV0SUQsXG4gICAgICAgIHRyYW5zYWN0aW9uczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHVuc2lnbmVkVHg6IHtcbiAgICAgICAgICAgICAgZGVyaXZhdGlvblBhdGgsXG4gICAgICAgICAgICAgIHNpZ25hYmxlSGV4OiB0TWVzc2FnZSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzaWduYXR1cmVTaGFyZXM6IFtdLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9LFxuICAgICAgcHJ2OiB1c2VyU2hhcmUudG9TdHJpbmcoJ2Jhc2U2NCcpLFxuICAgICAgd2FsbGV0UGFzc3BocmFzZSxcbiAgICB9O1xuXG4gICAgY29uc3QgcmVzTVBDdjJTaWduaW5nUm91bmQxID0gYXdhaXQgZWNkc2FNUEN2MlV0aWxzLmNyZWF0ZU9mZmxpbmVSb3VuZDFTaGFyZShyZXFNUEN2MlNpZ25pbmdSb3VuZDEgYXMgYW55KTtcbiAgICByZXNNUEN2MlNpZ25pbmdSb3VuZDEuc2hvdWxkLmhhdmUucHJvcGVydHkoJ3NpZ25hdHVyZVNoYXJlUm91bmQxJyk7XG4gICAgcmVzTVBDdjJTaWduaW5nUm91bmQxLnNob3VsZC5oYXZlLnByb3BlcnR5KCd1c2VyR3BnUHViS2V5Jyk7XG4gICAgcmVzTVBDdjJTaWduaW5nUm91bmQxLnNob3VsZC5oYXZlLnByb3BlcnR5KCdlbmNyeXB0ZWRSb3VuZDFTZXNzaW9uJyk7XG4gICAgcmVzTVBDdjJTaWduaW5nUm91bmQxLnNob3VsZC5oYXZlLnByb3BlcnR5KCdlbmNyeXB0ZWRVc2VyR3BnUHJ2S2V5Jyk7XG5cbiAgICBjb25zdCBlbmNyeXB0ZWRSb3VuZDFTZXNzaW9uID0gcmVzTVBDdjJTaWduaW5nUm91bmQxLmVuY3J5cHRlZFJvdW5kMVNlc3Npb247XG4gICAgY29uc3QgZW5jcnlwdGVkVXNlckdwZ1BydktleSA9IHJlc01QQ3YyU2lnbmluZ1JvdW5kMS5lbmNyeXB0ZWRVc2VyR3BnUHJ2S2V5O1xuXG4gICAgY29uc3QgaGFzaEJ1ZmZlciA9IGNyZWF0ZUtlY2Nha0hhc2goJ2tlY2NhazI1NicpLnVwZGF0ZShCdWZmZXIuZnJvbSh0TWVzc2FnZSwgJ2hleCcpKS5kaWdlc3QoKTtcbiAgICBjb25zdCBiaXRnb1Nlc3Npb24gPSBuZXcgRGtsc0RzZy5Ec2coYml0Z29TaGFyZSwgMiwgZGVyaXZhdGlvblBhdGgsIGhhc2hCdWZmZXIpO1xuXG4gICAgY29uc3QgdHhSZXF1ZXN0Um91bmQxID0gYXdhaXQgc2lnbkJpdGdvTVBDdjJSb3VuZDEoXG4gICAgICBiaXRnb1Nlc3Npb24sXG4gICAgICByZXFNUEN2MlNpZ25pbmdSb3VuZDEudHhSZXF1ZXN0IGFzIGFueSxcbiAgICAgIHJlc01QQ3YyU2lnbmluZ1JvdW5kMS5zaWduYXR1cmVTaGFyZVJvdW5kMSxcbiAgICAgIHJlc01QQ3YyU2lnbmluZ1JvdW5kMS51c2VyR3BnUHViS2V5XG4gICAgKTtcbiAgICBhc3NlcnQub2soXG4gICAgICB0eFJlcXVlc3RSb3VuZDEudHJhbnNhY3Rpb25zICYmXG4gICAgICAgIHR4UmVxdWVzdFJvdW5kMS50cmFuc2FjdGlvbnMubGVuZ3RoID09PSAxICYmXG4gICAgICAgIHR4UmVxdWVzdFJvdW5kMS50cmFuc2FjdGlvbnNbMF0uc2lnbmF0dXJlU2hhcmVzLmxlbmd0aCA9PT0gMixcbiAgICAgICd0eFJlcXVlc3RSb3VuZDEudHJhbnNhY3Rpb25zIGlzIG5vdCBhbiBhcnJheSBvZiBsZW5ndGggMSB3aXRoIDIgc2lnbmF0dXJlU2hhcmVzJ1xuICAgICk7XG5cbiAgICAvLyByb3VuZCAyXG4gICAgY29uc3QgcmVxTVBDdjJTaWduaW5nUm91bmQyID0ge1xuICAgICAgLi4ucmVxTVBDdjJTaWduaW5nUm91bmQxLFxuICAgICAgdHhSZXF1ZXN0OiB0eFJlcXVlc3RSb3VuZDEsXG4gICAgICBlbmNyeXB0ZWRSb3VuZDFTZXNzaW9uLFxuICAgICAgZW5jcnlwdGVkVXNlckdwZ1BydktleSxcbiAgICAgIGJpdGdvUHVibGljR3BnS2V5OiBiaXRnb0dwZ0tleS5wdWJsaWMsXG4gICAgfTtcblxuICAgIGNvbnN0IHJlc01QQ3YyU2lnbmluZ1JvdW5kMiA9IGF3YWl0IGVjZHNhTVBDdjJVdGlscy5jcmVhdGVPZmZsaW5lUm91bmQyU2hhcmUocmVxTVBDdjJTaWduaW5nUm91bmQyIGFzIGFueSk7XG4gICAgcmVzTVBDdjJTaWduaW5nUm91bmQyLnNob3VsZC5oYXZlLnByb3BlcnR5KCdzaWduYXR1cmVTaGFyZVJvdW5kMicpO1xuICAgIHJlc01QQ3YyU2lnbmluZ1JvdW5kMi5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgnZW5jcnlwdGVkUm91bmQyU2Vzc2lvbicpO1xuXG4gICAgY29uc3QgZW5jcnlwdGVkUm91bmQyU2Vzc2lvbiA9IHJlc01QQ3YyU2lnbmluZ1JvdW5kMi5lbmNyeXB0ZWRSb3VuZDJTZXNzaW9uO1xuXG4gICAgY29uc3QgeyB0eFJlcXVlc3Q6IHR4UmVxdWVzdFJvdW5kMiwgYml0Z29Nc2c0IH0gPSBhd2FpdCBzaWduQml0Z29NUEN2MlJvdW5kMihcbiAgICAgIGJpdGdvU2Vzc2lvbixcbiAgICAgIHJlcU1QQ3YyU2lnbmluZ1JvdW5kMi50eFJlcXVlc3QsXG4gICAgICByZXNNUEN2MlNpZ25pbmdSb3VuZDIuc2lnbmF0dXJlU2hhcmVSb3VuZDIsXG4gICAgICByZXNNUEN2MlNpZ25pbmdSb3VuZDEudXNlckdwZ1B1YktleVxuICAgICk7XG4gICAgYXNzZXJ0Lm9rKFxuICAgICAgdHhSZXF1ZXN0Um91bmQyLnRyYW5zYWN0aW9ucyAmJlxuICAgICAgICB0eFJlcXVlc3RSb3VuZDIudHJhbnNhY3Rpb25zLmxlbmd0aCA9PT0gMSAmJlxuICAgICAgICB0eFJlcXVlc3RSb3VuZDIudHJhbnNhY3Rpb25zWzBdLnNpZ25hdHVyZVNoYXJlcy5sZW5ndGggPT09IDQsXG4gICAgICAndHhSZXF1ZXN0Um91bmQyLnRyYW5zYWN0aW9ucyBpcyBub3QgYW4gYXJyYXkgb2YgbGVuZ3RoIDEgd2l0aCA0IHNpZ25hdHVyZVNoYXJlcydcbiAgICApO1xuICAgIGJpdGdvTXNnNC5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgnc2lnbmF0dXJlUicpO1xuXG4gICAgLy8gcm91bmQgM1xuICAgIGNvbnN0IHJlcU1QQ3YyU2lnbmluZ1JvdW5kMyA9IHtcbiAgICAgIC4uLnJlcU1QQ3YyU2lnbmluZ1JvdW5kMixcbiAgICAgIHR4UmVxdWVzdDogdHhSZXF1ZXN0Um91bmQyLFxuICAgICAgZW5jcnlwdGVkUm91bmQxU2Vzc2lvbjogbnVsbCwgLy8gbm90IG5lZWRlZCBmb3Igcm91bmQgM1xuICAgICAgZW5jcnlwdGVkUm91bmQyU2Vzc2lvbixcbiAgICB9O1xuXG4gICAgY29uc3QgcmVzTVBDdjJTaWduaW5nUm91bmQzID0gYXdhaXQgZWNkc2FNUEN2MlV0aWxzLmNyZWF0ZU9mZmxpbmVSb3VuZDNTaGFyZShyZXFNUEN2MlNpZ25pbmdSb3VuZDMgYXMgYW55KTtcbiAgICByZXNNUEN2MlNpZ25pbmdSb3VuZDMuc2hvdWxkLmhhdmUucHJvcGVydHkoJ3NpZ25hdHVyZVNoYXJlUm91bmQzJyk7XG5cbiAgICBjb25zdCB7IHVzZXJNc2c0IH0gPSBhd2FpdCBzaWduQml0Z29NUEN2MlJvdW5kMyhcbiAgICAgIGJpdGdvU2Vzc2lvbixcbiAgICAgIHJlc01QQ3YyU2lnbmluZ1JvdW5kMy5zaWduYXR1cmVTaGFyZVJvdW5kMyxcbiAgICAgIHJlc01QQ3YyU2lnbmluZ1JvdW5kMS51c2VyR3BnUHViS2V5XG4gICAgKTtcblxuICAgIC8vIHNpZ25hdHVyZSBnZW5lcmF0aW9uIGFuZCB2YWxpZGF0aW9uXG4gICAgYXNzZXJ0Lm9rKHVzZXJNc2c0LmRhdGEubXNnNC5zaWduYXR1cmVSID09PSBiaXRnb01zZzQuc2lnbmF0dXJlUiwgJ1VzZXIgYW5kIEJpdEdvIHNpZ25hdHVyZXNSIGRvIG5vdCBtYXRjaCcpO1xuXG4gICAgY29uc3QgZGVzZXJpYWxpemVkQml0Z29Nc2c0ID0gRGtsc1R5cGVzLmRlc2VyaWFsaXplTWVzc2FnZXMoe1xuICAgICAgcDJwTWVzc2FnZXM6IFtdLFxuICAgICAgYnJvYWRjYXN0TWVzc2FnZXM6IFtiaXRnb01zZzRdLFxuICAgIH0pO1xuXG4gICAgY29uc3QgZGVzZXJpYWxpemVkVXNlck1zZzQgPSBEa2xzVHlwZXMuZGVzZXJpYWxpemVNZXNzYWdlcyh7XG4gICAgICBwMnBNZXNzYWdlczogW10sXG4gICAgICBicm9hZGNhc3RNZXNzYWdlczogW1xuICAgICAgICB7XG4gICAgICAgICAgZnJvbTogdXNlck1zZzQuZGF0YS5tc2c0LmZyb20sXG4gICAgICAgICAgcGF5bG9hZDogdXNlck1zZzQuZGF0YS5tc2c0Lm1lc3NhZ2UsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH0pO1xuXG4gICAgY29uc3QgY29tYmluZWRTaWdVc2luZ1V0aWwgPSBEa2xzVXRpbHMuY29tYmluZVBhcnRpYWxTaWduYXR1cmVzKFxuICAgICAgW2Rlc2VyaWFsaXplZFVzZXJNc2c0LmJyb2FkY2FzdE1lc3NhZ2VzWzBdLnBheWxvYWQsIGRlc2VyaWFsaXplZEJpdGdvTXNnNC5icm9hZGNhc3RNZXNzYWdlc1swXS5wYXlsb2FkXSxcbiAgICAgIEJ1ZmZlci5mcm9tKHVzZXJNc2c0LmRhdGEubXNnNC5zaWduYXR1cmVSLCAnYmFzZTY0JykudG9TdHJpbmcoJ2hleCcpXG4gICAgKTtcblxuICAgIGNvbnN0IGNvbnZlcnRlZFNpZ25hdHVyZSA9IERrbHNVdGlscy52ZXJpZnlBbmRDb252ZXJ0RGtsc1NpZ25hdHVyZShcbiAgICAgIEJ1ZmZlci5mcm9tKHRNZXNzYWdlLCAnaGV4JyksXG4gICAgICBjb21iaW5lZFNpZ1VzaW5nVXRpbCxcbiAgICAgIERrbHNUeXBlcy5nZXRDb21tb25LZXljaGFpbih1c2VyU2hhcmUpLFxuICAgICAgZGVyaXZhdGlvblBhdGgsXG4gICAgICBjcmVhdGVLZWNjYWtIYXNoKCdrZWNjYWsyNTYnKSBhcyBIYXNoXG4gICAgKTtcbiAgICBhc3NlcnQub2soY29udmVydGVkU2lnbmF0dXJlLCAnU2lnbmF0dXJlIGlzIG5vdCB2YWxpZCcpO1xuICAgIGFzc2VydC5vayhjb252ZXJ0ZWRTaWduYXR1cmUuc3BsaXQoJzonKS5sZW5ndGggPT09IDQsICdTaWduYXR1cmUgaXMgbm90IHZhbGlkJyk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgZmFpbCB0byBzaWduIHVzaW5nIHNlc3Npb24gYWZ0ZXIgcm91bmQgWCB3aGVuIHNlc3Npb24gYWZ0ZXIgcm91bmQgWSBpcyBleHBlY3RlZCcsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCB0TWVzc2FnZSA9ICd0ZXN0TWVzc2FnZSc7XG4gICAgY29uc3QgZGVyaXZhdGlvblBhdGggPSAnbS8xLzInO1xuXG4gICAgLy8gcm91bmQgMVxuICAgIGNvbnN0IHJlcU1QQ3YyU2lnbmluZ1JvdW5kMSA9IHtcbiAgICAgIHR4UmVxdWVzdDoge1xuICAgICAgICB0eFJlcXVlc3RJZDogJzEyMzQ1NicsXG4gICAgICAgIGFwaVZlcnNpb246ICdmdWxsJyxcbiAgICAgICAgd2FsbGV0SWQ6IHdhbGxldElELFxuICAgICAgICB0cmFuc2FjdGlvbnM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICB1bnNpZ25lZFR4OiB7XG4gICAgICAgICAgICAgIGRlcml2YXRpb25QYXRoLFxuICAgICAgICAgICAgICBzaWduYWJsZUhleDogdE1lc3NhZ2UsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc2lnbmF0dXJlU2hhcmVzOiBbXSxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgfSxcbiAgICAgIHBydjogdXNlclNoYXJlLnRvU3RyaW5nKCdiYXNlNjQnKSxcbiAgICAgIHdhbGxldFBhc3NwaHJhc2UsXG4gICAgfTtcblxuICAgIGNvbnN0IHJlc01QQ3YyU2lnbmluZ1JvdW5kMSA9IGF3YWl0IGVjZHNhTVBDdjJVdGlscy5jcmVhdGVPZmZsaW5lUm91bmQxU2hhcmUocmVxTVBDdjJTaWduaW5nUm91bmQxIGFzIGFueSk7XG4gICAgcmVzTVBDdjJTaWduaW5nUm91bmQxLnNob3VsZC5oYXZlLnByb3BlcnR5KCdzaWduYXR1cmVTaGFyZVJvdW5kMScpO1xuICAgIHJlc01QQ3YyU2lnbmluZ1JvdW5kMS5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgndXNlckdwZ1B1YktleScpO1xuICAgIHJlc01QQ3YyU2lnbmluZ1JvdW5kMS5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgnZW5jcnlwdGVkUm91bmQxU2Vzc2lvbicpO1xuICAgIHJlc01QQ3YyU2lnbmluZ1JvdW5kMS5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgnZW5jcnlwdGVkVXNlckdwZ1BydktleScpO1xuXG4gICAgY29uc3QgZW5jcnlwdGVkUm91bmQxU2Vzc2lvbiA9IHJlc01QQ3YyU2lnbmluZ1JvdW5kMS5lbmNyeXB0ZWRSb3VuZDFTZXNzaW9uO1xuICAgIGNvbnN0IGVuY3J5cHRlZFVzZXJHcGdQcnZLZXkgPSByZXNNUEN2MlNpZ25pbmdSb3VuZDEuZW5jcnlwdGVkVXNlckdwZ1BydktleTtcblxuICAgIGNvbnN0IGhhc2hCdWZmZXIgPSBjcmVhdGVLZWNjYWtIYXNoKCdrZWNjYWsyNTYnKS51cGRhdGUoQnVmZmVyLmZyb20odE1lc3NhZ2UsICdoZXgnKSkuZGlnZXN0KCk7XG4gICAgY29uc3QgYml0Z29TZXNzaW9uID0gbmV3IERrbHNEc2cuRHNnKGJpdGdvU2hhcmUsIDIsIGRlcml2YXRpb25QYXRoLCBoYXNoQnVmZmVyKTtcblxuICAgIGNvbnN0IHR4UmVxdWVzdFJvdW5kMSA9IGF3YWl0IHNpZ25CaXRnb01QQ3YyUm91bmQxKFxuICAgICAgYml0Z29TZXNzaW9uLFxuICAgICAgcmVxTVBDdjJTaWduaW5nUm91bmQxLnR4UmVxdWVzdCBhcyBhbnksXG4gICAgICByZXNNUEN2MlNpZ25pbmdSb3VuZDEuc2lnbmF0dXJlU2hhcmVSb3VuZDEsXG4gICAgICByZXNNUEN2MlNpZ25pbmdSb3VuZDEudXNlckdwZ1B1YktleVxuICAgICk7XG4gICAgYXNzZXJ0Lm9rKFxuICAgICAgdHhSZXF1ZXN0Um91bmQxLnRyYW5zYWN0aW9ucyAmJlxuICAgICAgICB0eFJlcXVlc3RSb3VuZDEudHJhbnNhY3Rpb25zLmxlbmd0aCA9PT0gMSAmJlxuICAgICAgICB0eFJlcXVlc3RSb3VuZDEudHJhbnNhY3Rpb25zWzBdLnNpZ25hdHVyZVNoYXJlcy5sZW5ndGggPT09IDIsXG4gICAgICAndHhSZXF1ZXN0Um91bmQxLnRyYW5zYWN0aW9ucyBpcyBub3QgYW4gYXJyYXkgb2YgbGVuZ3RoIDEgd2l0aCAyIHNpZ25hdHVyZVNoYXJlcydcbiAgICApO1xuXG4gICAgLy8gcm91bmQgMlxuICAgIGNvbnN0IHJlcU1QQ3YyU2lnbmluZ1JvdW5kMiA9IHtcbiAgICAgIC4uLnJlcU1QQ3YyU2lnbmluZ1JvdW5kMSxcbiAgICAgIHR4UmVxdWVzdDogdHhSZXF1ZXN0Um91bmQxLFxuICAgICAgZW5jcnlwdGVkUm91bmQxU2Vzc2lvbixcbiAgICAgIGVuY3J5cHRlZFVzZXJHcGdQcnZLZXksXG4gICAgICBiaXRnb1B1YmxpY0dwZ0tleTogYml0Z29HcGdLZXkucHVibGljLFxuICAgIH07XG5cbiAgICBjb25zdCByZXNNUEN2MlNpZ25pbmdSb3VuZDIgPSBhd2FpdCBlY2RzYU1QQ3YyVXRpbHMuY3JlYXRlT2ZmbGluZVJvdW5kMlNoYXJlKHJlcU1QQ3YyU2lnbmluZ1JvdW5kMiBhcyBhbnkpO1xuICAgIHJlc01QQ3YyU2lnbmluZ1JvdW5kMi5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgnc2lnbmF0dXJlU2hhcmVSb3VuZDInKTtcbiAgICByZXNNUEN2MlNpZ25pbmdSb3VuZDIuc2hvdWxkLmhhdmUucHJvcGVydHkoJ2VuY3J5cHRlZFJvdW5kMlNlc3Npb24nKTtcblxuICAgIGNvbnN0IHsgdHhSZXF1ZXN0OiB0eFJlcXVlc3RSb3VuZDIsIGJpdGdvTXNnNCB9ID0gYXdhaXQgc2lnbkJpdGdvTVBDdjJSb3VuZDIoXG4gICAgICBiaXRnb1Nlc3Npb24sXG4gICAgICByZXFNUEN2MlNpZ25pbmdSb3VuZDIudHhSZXF1ZXN0LFxuICAgICAgcmVzTVBDdjJTaWduaW5nUm91bmQyLnNpZ25hdHVyZVNoYXJlUm91bmQyLFxuICAgICAgcmVzTVBDdjJTaWduaW5nUm91bmQxLnVzZXJHcGdQdWJLZXlcbiAgICApO1xuICAgIGFzc2VydC5vayhcbiAgICAgIHR4UmVxdWVzdFJvdW5kMi50cmFuc2FjdGlvbnMgJiZcbiAgICAgICAgdHhSZXF1ZXN0Um91bmQyLnRyYW5zYWN0aW9ucy5sZW5ndGggPT09IDEgJiZcbiAgICAgICAgdHhSZXF1ZXN0Um91bmQyLnRyYW5zYWN0aW9uc1swXS5zaWduYXR1cmVTaGFyZXMubGVuZ3RoID09PSA0LFxuICAgICAgJ3R4UmVxdWVzdFJvdW5kMi50cmFuc2FjdGlvbnMgaXMgbm90IGFuIGFycmF5IG9mIGxlbmd0aCAxIHdpdGggNCBzaWduYXR1cmVTaGFyZXMnXG4gICAgKTtcbiAgICBiaXRnb01zZzQuc2hvdWxkLmhhdmUucHJvcGVydHkoJ3NpZ25hdHVyZVInKTtcblxuICAgIGNvbnN0IGVuY3J5cHRlZFJvdW5kMlNlc3Npb24gPSByZXNNUEN2MlNpZ25pbmdSb3VuZDIuZW5jcnlwdGVkUm91bmQyU2Vzc2lvbjtcblxuICAgIC8vIEEgYm9ndXMgcm91bmQgMyBzaWduaW5nIHJlcXVlc3QgY29udGFpbmluZyBlbmNyeXB0ZWQgc2Vzc2lvbiBmcm9tIHJvdW5kIDEgaW5zdGVhZCBvZiByb3VuZCAyIHNob3VsZCBmYWlsLlxuICAgIGNvbnN0IGJvZ3VzUmVxTVBDdjJTaWduaW5nUm91bmQzID0ge1xuICAgICAgLi4ucmVxTVBDdjJTaWduaW5nUm91bmQyLFxuICAgICAgdHhSZXF1ZXN0OiB0eFJlcXVlc3RSb3VuZDIsXG4gICAgICBlbmNyeXB0ZWRSb3VuZDFTZXNzaW9uOiBudWxsLCAvLyBub3QgbmVlZGVkIGZvciByb3VuZCAzXG4gICAgICBlbmNyeXB0ZWRSb3VuZDJTZXNzaW9uOiBlbmNyeXB0ZWRSb3VuZDFTZXNzaW9uLCAvLyBpbnN0YWVkIG9mIGVuY3J5cHRlZFJvdW5kMlNlc3Npb25cbiAgICB9O1xuXG4gICAgYXdhaXQgZWNkc2FNUEN2MlV0aWxzXG4gICAgICAuY3JlYXRlT2ZmbGluZVJvdW5kM1NoYXJlKGJvZ3VzUmVxTVBDdjJTaWduaW5nUm91bmQzIGFzIGFueSlcbiAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKCdBZGF0YSBkb2VzIG5vdCBtYXRjaCBjeXBoZXJ0ZXh0IGFkYXRhJyk7XG5cbiAgICAvLyBBIGJvZ3VzIHJvdW5kIDIgc2lnbmluZyByZXF1ZXN0IGNvbnRhaW5pbmcgZW5jcnlwdGVkIHNlc3Npb24gZnJvbSByb3VuZCAyIGluc3RlYWQgb2Ygcm91bmQgMSBzaG91bGQgZmFpbC5cbiAgICBjb25zdCBib2d1c1JlcU1QQ3YyU2lnbmluZ1JvdW5kMiA9IHtcbiAgICAgIC4uLnJlcU1QQ3YyU2lnbmluZ1JvdW5kMixcbiAgICAgIGVuY3J5cHRlZFJvdW5kMVNlc3Npb246IGVuY3J5cHRlZFJvdW5kMlNlc3Npb24sIC8vIGluc3RhZWQgb2YgZW5jcnlwdGVkUm91bmQxU2Vzc2lvblxuICAgIH07XG5cbiAgICBhd2FpdCBlY2RzYU1QQ3YyVXRpbHNcbiAgICAgIC5jcmVhdGVPZmZsaW5lUm91bmQyU2hhcmUoYm9ndXNSZXFNUEN2MlNpZ25pbmdSb3VuZDIgYXMgYW55KVxuICAgICAgLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoJ1VuZXhwZWN0ZWQgc2lnbmF0dXJlIHNoYXJlIHJlc3BvbnNlLiBVbmFibGUgdG8gcGFyc2UgZGF0YS4nKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBmYWlsIHRvIHNpZ24gcmV1c2luZyBhIHNlc3Npb24gb24gZGlmZmVyZW50IG1lc3NhZ2UnLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgdE1lc3NhZ2UxID0gJ3Rlc3RNZXNzYWdlMSc7XG4gICAgY29uc3QgdE1lc3NhZ2UyID0gJ3Rlc3RNZXNzYWdlMic7XG4gICAgY29uc3QgZGVyaXZhdGlvblBhdGggPSAnbS8zLzQnO1xuXG4gICAgLy8gcm91bmQgMSBvZiBzaWduaW5nIHRNZXNzYWdlMVxuICAgIGNvbnN0IHJlcU1QQ3YyU2lnbmluZ01zZzFSb3VuZDEgPSB7XG4gICAgICB0eFJlcXVlc3Q6IHtcbiAgICAgICAgdHhSZXF1ZXN0SWQ6ICcxMjM0NTYnLFxuICAgICAgICBhcGlWZXJzaW9uOiAnZnVsbCcsXG4gICAgICAgIHdhbGxldElkOiB3YWxsZXRJRCxcbiAgICAgICAgdHJhbnNhY3Rpb25zOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgdW5zaWduZWRUeDoge1xuICAgICAgICAgICAgICBkZXJpdmF0aW9uUGF0aCxcbiAgICAgICAgICAgICAgc2lnbmFibGVIZXg6IHRNZXNzYWdlMSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzaWduYXR1cmVTaGFyZXM6IFtdLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9LFxuICAgICAgcHJ2OiB1c2VyU2hhcmUudG9TdHJpbmcoJ2Jhc2U2NCcpLFxuICAgICAgd2FsbGV0UGFzc3BocmFzZSxcbiAgICB9O1xuXG4gICAgY29uc3QgcmVzTVBDdjJTaWduaW5nTXNnMVJvdW5kMSA9IGF3YWl0IGVjZHNhTVBDdjJVdGlscy5jcmVhdGVPZmZsaW5lUm91bmQxU2hhcmUocmVxTVBDdjJTaWduaW5nTXNnMVJvdW5kMSBhcyBhbnkpO1xuICAgIHJlc01QQ3YyU2lnbmluZ01zZzFSb3VuZDEuc2hvdWxkLmhhdmUucHJvcGVydHkoJ3NpZ25hdHVyZVNoYXJlUm91bmQxJyk7XG4gICAgcmVzTVBDdjJTaWduaW5nTXNnMVJvdW5kMS5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgndXNlckdwZ1B1YktleScpO1xuICAgIHJlc01QQ3YyU2lnbmluZ01zZzFSb3VuZDEuc2hvdWxkLmhhdmUucHJvcGVydHkoJ2VuY3J5cHRlZFJvdW5kMVNlc3Npb24nKTtcbiAgICByZXNNUEN2MlNpZ25pbmdNc2cxUm91bmQxLnNob3VsZC5oYXZlLnByb3BlcnR5KCdlbmNyeXB0ZWRVc2VyR3BnUHJ2S2V5Jyk7XG5cbiAgICBjb25zdCBlbmNyeXB0ZWRNc2cxUm91bmQxU2Vzc2lvbiA9IHJlc01QQ3YyU2lnbmluZ01zZzFSb3VuZDEuZW5jcnlwdGVkUm91bmQxU2Vzc2lvbjtcblxuICAgIGNvbnN0IGhhc2hCdWZmZXIxID0gY3JlYXRlS2VjY2FrSGFzaCgna2VjY2FrMjU2JykudXBkYXRlKEJ1ZmZlci5mcm9tKHRNZXNzYWdlMSwgJ2hleCcpKS5kaWdlc3QoKTtcbiAgICBjb25zdCBiaXRnb1Nlc3Npb24xID0gbmV3IERrbHNEc2cuRHNnKGJpdGdvU2hhcmUsIDIsIGRlcml2YXRpb25QYXRoLCBoYXNoQnVmZmVyMSk7XG5cbiAgICBjb25zdCB0eFJlcXVlc3RNc2cxUm91bmQxID0gYXdhaXQgc2lnbkJpdGdvTVBDdjJSb3VuZDEoXG4gICAgICBiaXRnb1Nlc3Npb24xLFxuICAgICAgcmVxTVBDdjJTaWduaW5nTXNnMVJvdW5kMS50eFJlcXVlc3QgYXMgYW55LFxuICAgICAgcmVzTVBDdjJTaWduaW5nTXNnMVJvdW5kMS5zaWduYXR1cmVTaGFyZVJvdW5kMSxcbiAgICAgIHJlc01QQ3YyU2lnbmluZ01zZzFSb3VuZDEudXNlckdwZ1B1YktleVxuICAgICk7XG4gICAgYXNzZXJ0Lm9rKFxuICAgICAgdHhSZXF1ZXN0TXNnMVJvdW5kMS50cmFuc2FjdGlvbnMgJiZcbiAgICAgICAgdHhSZXF1ZXN0TXNnMVJvdW5kMS50cmFuc2FjdGlvbnMubGVuZ3RoID09PSAxICYmXG4gICAgICAgIHR4UmVxdWVzdE1zZzFSb3VuZDEudHJhbnNhY3Rpb25zWzBdLnNpZ25hdHVyZVNoYXJlcy5sZW5ndGggPT09IDIsXG4gICAgICAndHhSZXF1ZXN0TXNnMVJvdW5kMS50cmFuc2FjdGlvbnMgaXMgbm90IGFuIGFycmF5IG9mIGxlbmd0aCAxIHdpdGggMiBzaWduYXR1cmVTaGFyZXMnXG4gICAgKTtcblxuICAgIC8vIHJvdW5kIDEgb2Ygc2lnbmluZyB0TWVzc2FnZTJcbiAgICBjb25zdCByZXFNUEN2MlNpZ25pbmdNc2cyUm91bmQxID0ge1xuICAgICAgLi4ucmVxTVBDdjJTaWduaW5nTXNnMVJvdW5kMSxcbiAgICAgIHR4UmVxdWVzdDoge1xuICAgICAgICAuLi5yZXFNUEN2MlNpZ25pbmdNc2cxUm91bmQxLnR4UmVxdWVzdCxcbiAgICAgICAgdHJhbnNhY3Rpb25zOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgdW5zaWduZWRUeDoge1xuICAgICAgICAgICAgICBkZXJpdmF0aW9uUGF0aCxcbiAgICAgICAgICAgICAgc2lnbmFibGVIZXg6IHRNZXNzYWdlMixcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzaWduYXR1cmVTaGFyZXM6IFtdLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9LFxuICAgIH07XG5cbiAgICBjb25zdCByZXNNUEN2MlNpZ25pbmdNc2cyUm91bmQxID0gYXdhaXQgZWNkc2FNUEN2MlV0aWxzLmNyZWF0ZU9mZmxpbmVSb3VuZDFTaGFyZShyZXFNUEN2MlNpZ25pbmdNc2cyUm91bmQxIGFzIGFueSk7XG4gICAgcmVzTVBDdjJTaWduaW5nTXNnMlJvdW5kMS5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgnc2lnbmF0dXJlU2hhcmVSb3VuZDEnKTtcbiAgICByZXNNUEN2MlNpZ25pbmdNc2cyUm91bmQxLnNob3VsZC5oYXZlLnByb3BlcnR5KCd1c2VyR3BnUHViS2V5Jyk7XG4gICAgcmVzTVBDdjJTaWduaW5nTXNnMlJvdW5kMS5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgnZW5jcnlwdGVkUm91bmQxU2Vzc2lvbicpO1xuICAgIHJlc01QQ3YyU2lnbmluZ01zZzJSb3VuZDEuc2hvdWxkLmhhdmUucHJvcGVydHkoJ2VuY3J5cHRlZFVzZXJHcGdQcnZLZXknKTtcblxuICAgIGNvbnN0IGVuY3J5cHRlZE1zZzJVc2VyR3BnUHJ2S2V5ID0gcmVzTVBDdjJTaWduaW5nTXNnMlJvdW5kMS5lbmNyeXB0ZWRVc2VyR3BnUHJ2S2V5O1xuXG4gICAgY29uc3QgaGFzaEJ1ZmZlcjIgPSBjcmVhdGVLZWNjYWtIYXNoKCdrZWNjYWsyNTYnKS51cGRhdGUoQnVmZmVyLmZyb20odE1lc3NhZ2UyLCAnaGV4JykpLmRpZ2VzdCgpO1xuICAgIGNvbnN0IGJpdGdvU2Vzc2lvbjIgPSBuZXcgRGtsc0RzZy5Ec2coYml0Z29TaGFyZSwgMiwgZGVyaXZhdGlvblBhdGgsIGhhc2hCdWZmZXIyKTtcblxuICAgIGNvbnN0IHR4UmVxdWVzdE1zZzJSb3VuZDEgPSBhd2FpdCBzaWduQml0Z29NUEN2MlJvdW5kMShcbiAgICAgIGJpdGdvU2Vzc2lvbjIsXG4gICAgICByZXFNUEN2MlNpZ25pbmdNc2cyUm91bmQxLnR4UmVxdWVzdCBhcyBhbnksXG4gICAgICByZXNNUEN2MlNpZ25pbmdNc2cyUm91bmQxLnNpZ25hdHVyZVNoYXJlUm91bmQxLFxuICAgICAgcmVzTVBDdjJTaWduaW5nTXNnMlJvdW5kMS51c2VyR3BnUHViS2V5XG4gICAgKTtcbiAgICBhc3NlcnQub2soXG4gICAgICB0eFJlcXVlc3RNc2cyUm91bmQxLnRyYW5zYWN0aW9ucyAmJlxuICAgICAgICB0eFJlcXVlc3RNc2cyUm91bmQxLnRyYW5zYWN0aW9ucy5sZW5ndGggPT09IDEgJiZcbiAgICAgICAgdHhSZXF1ZXN0TXNnMlJvdW5kMS50cmFuc2FjdGlvbnNbMF0uc2lnbmF0dXJlU2hhcmVzLmxlbmd0aCA9PT0gMixcbiAgICAgICd0eFJlcXVlc3RNc2cyUm91bmQxLnRyYW5zYWN0aW9ucyBpcyBub3QgYW4gYXJyYXkgb2YgbGVuZ3RoIDEgd2l0aCAyIHNpZ25hdHVyZVNoYXJlcydcbiAgICApO1xuXG4gICAgLy8gQXR0ZW1wdGluZyB0byByZXVzZSByb3VuZCAxIHNlc3Npb24gZnJvbSBzaWduaW5nIHRNZXNzYWdlMSBmb3Igc2lnbmluZyB0TWVzc2FnZTIgc2hvdWxkIGZhaWwgYXQgcm91bmQgMi5cbiAgICBjb25zdCByZXFNUEN2MlNpZ25pbmdNc2cyUm91bmQyV2l0aE1zZzFTZXNzaW9uID0ge1xuICAgICAgLi4ucmVxTVBDdjJTaWduaW5nTXNnMlJvdW5kMSxcbiAgICAgIHR4UmVxdWVzdDogdHhSZXF1ZXN0TXNnMlJvdW5kMSxcbiAgICAgIGVuY3J5cHRlZFJvdW5kMVNlc3Npb246IGVuY3J5cHRlZE1zZzFSb3VuZDFTZXNzaW9uLCAvLyBpbnN0ZWFkIG9mIHJlc01QQ3YyU2lnbmluZ01zZzJSb3VuZDEuZW5jcnlwdGVkUm91bmQxU2Vzc2lvblxuICAgICAgZW5jcnlwdGVkVXNlckdwZ1BydktleTogZW5jcnlwdGVkTXNnMlVzZXJHcGdQcnZLZXksXG4gICAgICBiaXRnb1B1YmxpY0dwZ0tleTogYml0Z29HcGdLZXkucHVibGljLFxuICAgIH07XG5cbiAgICBhd2FpdCBlY2RzYU1QQ3YyVXRpbHNcbiAgICAgIC5jcmVhdGVPZmZsaW5lUm91bmQyU2hhcmUocmVxTVBDdjJTaWduaW5nTXNnMlJvdW5kMldpdGhNc2cxU2Vzc2lvbiBhcyBhbnkpXG4gICAgICAuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgnRXJyb3Igd2hpbGUgY3JlYXRpbmcgbWVzc2FnZXMgZnJvbSBwYXJ0eSAwLCByb3VuZCAyOiBFcnJvcjogSW52YWxpZCBmaW5hbF9zZXNzaW9uX2lkJyk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgc2lnbiBhIHByZS1oYXNoZWQgQXZhbGFuY2hlIGF0b21pYyBleHBvcnQgdHggd2l0aG91dCBhcHBseWluZyBrZWNjYWsyNTYnLCBhc3luYyAoKSA9PiB7XG4gICAgLy8gUmVhbCBBdmFsYW5jaGUgRXhwb3J0SW5DIHRyYW5zYWN0aW9uIGZyb20gc2RrLWNvaW4tZmxyIHRlc3QgcmVzb3VyY2VzLlxuICAgIC8vIE1pcnJvcnMgdGhlIHNhbmRib3ggZmxvdzogYzJwTXBjVG9NcGNUc3MudHMg4oaSIHNpZ25XaXRoTXBjKCkgd2hlcmVcbiAgICAvLyBGbGFyZUpTIGJ1aWxkcyBhbiBFeHBvcnRJbkMgdHgsIFNIQS0yNTYgaGFzaGVzIHRoZSB1bnNpZ25lZCBieXRlcyxcbiAgICAvLyBhbmQgTVBDIHNpZ25zIHRoZSByYXcgU0hBLTI1NiBoYXNoIChOT1Qga2VjY2FrMjU2IG9mIGl0KS5cbiAgICAvL1xuICAgIC8vIHNlcmlhbGl6ZWRUeEhleCA9IGZ1bGwgdW5zaWduZWQgQXZhbGFuY2hlIGF0b21pYyB0eCAoY29kZWMgdHlwZSBJRCAweDAwMDApXG4gICAgLy8gc2lnbmFibGVIZXggICAgID0gU0hBLTI1Nih0eEJvZHkpIOKAlCAzMiBieXRlcywgYWxyZWFkeSB0aGUgZmluYWwgc2lnbmluZyBoYXNoXG4gICAgLy9cbiAgICAvLyBTYW5kYm94IHJlZmVyZW5jZSAoY29pbnMtc2FuZGJveC9mbGFyZUNQL2ZsckNfTVBDX3RvX2ZsclBfTVBDKTpcbiAgICAvL1xuICAgIC8vIEPihpJQIGRpcmVjdGlvbiAoYzJwTXBjVG9NcGNUc3MudHMg4oCUIGV4cG9ydCBmcm9tIEMtY2hhaW4pOlxuICAgIC8vICAgTWVzc2FnZSBoYXNoIChTSEEtMjU2KTogOWIzZTFjOGZjOTMyMmI2NjdlYzYxNjE5NDg3YjM5OTNlOTFkY2ZjNS4uLlxuICAgIC8vICAgU2lnbmF0dXJlIHI6IGQ1YmMyZTJjYWQzMTQwMjMuLi4gIHM6IDQ3YWY5ZDcxMDkxMzVmN2EuLi4gIFJlY292ZXJ5OiAxXG4gICAgLy8gICBFeHBvcnQgVFggSUQ6IDJaNUVMU2hubW1NZ3ZUZXVwekxRekVLdEFnYnZaa0R2cTZLUllxYnpWZ2N5QkdWR3BiXG4gICAgLy9cbiAgICAvLyBQ4oaSQyBkaXJlY3Rpb24gKHAyY01wY1RvTXBjVHNzLnRzIOKAlCBleHBvcnQgZnJvbSBQLWNoYWluKTpcbiAgICAvLyAgIFRocmVzaG9sZDogMSAoTVBDIHNpbmdsZS1zaWcgb24tY2hhaW4sIE5PIGhvcCB0cmFuc2FjdGlvbilcbiAgICAvLyAgIE1lc3NhZ2UgaGFzaCAoU0hBLTI1Nik6IGYxYWZkN2JiM2RmMjAxOWVlNjFiNDEzMzRhYmY5NTE3MmQ0NjlkMTguLi5cbiAgICAvLyAgIFNpZ25hdHVyZSByOiBmYWU0NGNhODllN2EwZDNlZmZkMDkxMmMxNmQ2OTczNWFhYmJjNzNhZDJkMTQwZmZhMmMzYjQ2YWY0OGQxNTljXG4gICAgLy8gICBTaWduYXR1cmUgczogMWRlYzA1ZDBkNDc3YTViMjQ1YTBhMmU1ZjNhNjdlNzU0ODlmZjliOThiMjk3ODBmYzc1N2IxMmQ5ZjY4N2RiM1xuICAgIC8vICAgUmVjb3Zlcnk6IDBcbiAgICAvLyAgIEV4cG9ydCBUWCBJRDogMnREUW1RVXRETXlWV2U4Qm8zNnlIWHlrVjJSTXZoOHJmdDN0bzVRc2dvTmhBVE1EWHpcbiAgICAvLyAgIE5ldHdvcms6IENvc3RvbjIgVGVzdG5ldCAoSUQ6IDExNClcbiAgICBjb25zdCBzZXJpYWxpemVkVHhIZXggPVxuICAgICAgJzAwMDAwMDAwMDAwMTAwMDAwMDcyNzhkYjVjMzBiZWQwNGMwNWNlMjA5MTc5ODEyODUwYmJiM2ZlNmQ0NmQ3ZWVmMzc0NGQ4MTRjMGRhNTU1MjQ3OScgK1xuICAgICAgJzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTI4YTA1OTMzZGM3NicgK1xuICAgICAgJ2U0ZTZjMjVmMzVkNWM5YjJhNTg3Njk3MDBlNzYwMDAwMDAwMDAyZmYzZDE2NTg3MzRmOTRhZjg3MWMzZDEzMWI1NjEzMWI2ZmI3YTAyOTFlYWMnICtcbiAgICAgICdhZGQyNjFlNjlkZmI0MmE5Y2RmNmY3ZmRkZDAwMDAwMDAwMDAwMDAwMDkwMDAwMDAwMTU4NzM0Zjk0YWY4NzFjM2QxMzFiNTYxMzFiNmZiN2EwMjknICtcbiAgICAgICcxZWFjYWRkMjYxZTY5ZGZiNDJhOWNkZjZmN2ZkZGQwMDAwMDAwNzAwMDAwMDAwMDJmYWYwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIwMDAwMDAwMycgK1xuICAgICAgJzEyY2IzMmVhZjkyNTUzMDY0ZGI5OGQyNzFiNTZjYmEwNzllYzc4ZjVhNmUwYzFhYmQwMTMyZjcwZWZiNzdlMjI3NDYzN2ZmMzM2YTI5YTU3YzM4NicgK1xuICAgICAgJ2Q1OGQwOWE5YWU3N2NmMWNmMDdiZjFjOWRlNDRlYmIwYzlmMyc7XG4gICAgLy8gU0hBLTI1NihzZXJpYWxpemVkVHhIZXggYnl0ZXMpIOKAlCBzYW1lIGFzIEZsYXJlSlMgdW5zaWduZWRUeC50b0J5dGVzKCkg4oaSIHNoYTI1NlxuICAgIGNvbnN0IHNpZ25hYmxlSGV4ID0gY3JlYXRlSGFzaCgnc2hhMjU2JykudXBkYXRlKEJ1ZmZlci5mcm9tKHNlcmlhbGl6ZWRUeEhleCwgJ2hleCcpKS5kaWdlc3QoJ2hleCcpO1xuICAgIGNvbnN0IGRlcml2YXRpb25QYXRoID0gJ20vMCc7XG5cbiAgICAvLyBWYWxpZGF0ZSBmaXh0dXJlIHByb3BlcnRpZXMgbWF0Y2ggc2FuZGJveCBleHBlY3RhdGlvbnM6XG4gICAgLy8gLSBzZXJpYWxpemVkVHhIZXggc3RhcnRzIHdpdGggQXZhbGFuY2hlIGNvZGVjIHR5cGUgSUQgKDB4MDAwMClcbiAgICAvLyAtIHNpZ25hYmxlSGV4IGlzIGV4YWN0bHkgNjQgaGV4IGNoYXJzICgzMi1ieXRlIFNIQS0yNTYgZGlnZXN0KVxuICAgIGFzc2VydC5vayhzZXJpYWxpemVkVHhIZXguc3RhcnRzV2l0aCgnMDAwMCcpLCAnRml4dHVyZSBtdXN0IHN0YXJ0IHdpdGggQXZhbGFuY2hlIGNvZGVjIHByZWZpeCcpO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChzaWduYWJsZUhleC5sZW5ndGgsIDY0LCAnc2lnbmFibGVIZXggbXVzdCBiZSAzMi1ieXRlIFNIQS0yNTYgKDY0IGhleCBjaGFycyknKTtcbiAgICAvLyBWZXJpZnkga2VjY2FrMjU2KHNpZ25hYmxlSGV4KSBkaWZmZXJzIOKAlCBwcm92ZXMgc2tpcHBpbmcgaGFzaCBtYXR0ZXJzXG4gICAgY29uc3Qga2VjY2FrSGFzaCA9IGNyZWF0ZUtlY2Nha0hhc2goJ2tlY2NhazI1NicpLnVwZGF0ZShCdWZmZXIuZnJvbShzaWduYWJsZUhleCwgJ2hleCcpKS5kaWdlc3QoJ2hleCcpO1xuICAgIGFzc2VydC5ub3RTdHJpY3RFcXVhbChzaWduYWJsZUhleCwga2VjY2FrSGFzaCwgJ1NIQS0yNTYgYW5kIGtlY2NhazI1NiBoYXNoZXMgbXVzdCBkaWZmZXInKTtcblxuICAgIC8vIHJvdW5kIDFcbiAgICBjb25zdCByZXFNUEN2MlNpZ25pbmdSb3VuZDEgPSB7XG4gICAgICB0eFJlcXVlc3Q6IHtcbiAgICAgICAgdHhSZXF1ZXN0SWQ6ICdmbHItZXhwb3J0LWMycCcsXG4gICAgICAgIGFwaVZlcnNpb246ICdmdWxsJyxcbiAgICAgICAgd2FsbGV0SWQ6IHdhbGxldElELFxuICAgICAgICB0cmFuc2FjdGlvbnM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICB1bnNpZ25lZFR4OiB7XG4gICAgICAgICAgICAgIGRlcml2YXRpb25QYXRoLFxuICAgICAgICAgICAgICBzaWduYWJsZUhleCxcbiAgICAgICAgICAgICAgc2VyaWFsaXplZFR4SGV4LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNpZ25hdHVyZVNoYXJlczogW10sXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgIH0sXG4gICAgICBwcnY6IHVzZXJTaGFyZS50b1N0cmluZygnYmFzZTY0JyksXG4gICAgICB3YWxsZXRQYXNzcGhyYXNlLFxuICAgIH07XG5cbiAgICBjb25zdCByZXNNUEN2MlNpZ25pbmdSb3VuZDEgPSBhd2FpdCBlY2RzYU1QQ3YyVXRpbHMuY3JlYXRlT2ZmbGluZVJvdW5kMVNoYXJlKHJlcU1QQ3YyU2lnbmluZ1JvdW5kMSBhcyBhbnkpO1xuICAgIHJlc01QQ3YyU2lnbmluZ1JvdW5kMS5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgnc2lnbmF0dXJlU2hhcmVSb3VuZDEnKTtcbiAgICByZXNNUEN2MlNpZ25pbmdSb3VuZDEuc2hvdWxkLmhhdmUucHJvcGVydHkoJ2VuY3J5cHRlZFJvdW5kMVNlc3Npb24nKTtcbiAgICByZXNNUEN2MlNpZ25pbmdSb3VuZDEuc2hvdWxkLmhhdmUucHJvcGVydHkoJ2VuY3J5cHRlZFVzZXJHcGdQcnZLZXknKTtcblxuICAgIGNvbnN0IGVuY3J5cHRlZFJvdW5kMVNlc3Npb24gPSByZXNNUEN2MlNpZ25pbmdSb3VuZDEuZW5jcnlwdGVkUm91bmQxU2Vzc2lvbjtcbiAgICBjb25zdCBlbmNyeXB0ZWRVc2VyR3BnUHJ2S2V5ID0gcmVzTVBDdjJTaWduaW5nUm91bmQxLmVuY3J5cHRlZFVzZXJHcGdQcnZLZXk7XG5cbiAgICAvLyBCaXRHby9IU00gcGFydHkgdXNlcyB0aGUgcmF3IFNIQS0yNTYgaGFzaCBkaXJlY3RseSAobm8ga2VjY2FrMjU2KS5cbiAgICAvLyBUaGlzIG1hdGNoZXMgV1AncyBNUEN2MlNpZ25lciBpc1ByZUhhc2hlZD10cnVlIHBhdGggd2hlcmVcbiAgICAvLyB0eEhhc2ggPSBzaWduYWJsZU1hdGVyaWFsIChyYXcgc2lnbmFibGVIZXggYnl0ZXMpLlxuICAgIC8vIElmIHRoZSBTREsgaW5jb3JyZWN0bHkgYXBwbGllZCBrZWNjYWsyNTYsIHVzZXIgcGFydHkgd291bGQgdXNlXG4gICAgLy8ga2VjY2FrMjU2KFNIQS0yNTYodHhCb2R5KSkgd2hpbGUgSFNNIHVzZXMgU0hBLTI1Nih0eEJvZHkpIOKAlCB0aGVcbiAgICAvLyB0d28gREtMUyBwYXJ0aWVzIHdvdWxkIGRpc2FncmVlLCBwcm9kdWNpbmcgYW4gaW52YWxpZCBjb21iaW5lZCBzaWcuXG4gICAgY29uc3QgaGFzaEJ1ZmZlciA9IEJ1ZmZlci5mcm9tKHNpZ25hYmxlSGV4LCAnaGV4Jyk7XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKGhhc2hCdWZmZXIubGVuZ3RoLCAzMiwgJ0RLTFMgbWVzc2FnZSBoYXNoIG11c3QgYmUgMzIgYnl0ZXMnKTtcbiAgICBjb25zdCBiaXRnb1Nlc3Npb24gPSBuZXcgRGtsc0RzZy5Ec2coYml0Z29TaGFyZSwgMiwgZGVyaXZhdGlvblBhdGgsIGhhc2hCdWZmZXIpO1xuXG4gICAgY29uc3QgdHhSZXF1ZXN0Um91bmQxID0gYXdhaXQgc2lnbkJpdGdvTVBDdjJSb3VuZDEoXG4gICAgICBiaXRnb1Nlc3Npb24sXG4gICAgICByZXFNUEN2MlNpZ25pbmdSb3VuZDEudHhSZXF1ZXN0IGFzIGFueSxcbiAgICAgIHJlc01QQ3YyU2lnbmluZ1JvdW5kMS5zaWduYXR1cmVTaGFyZVJvdW5kMSxcbiAgICAgIHJlc01QQ3YyU2lnbmluZ1JvdW5kMS51c2VyR3BnUHViS2V5XG4gICAgKTtcbiAgICBhc3NlcnQub2soXG4gICAgICB0eFJlcXVlc3RSb3VuZDEudHJhbnNhY3Rpb25zICYmXG4gICAgICAgIHR4UmVxdWVzdFJvdW5kMS50cmFuc2FjdGlvbnMubGVuZ3RoID09PSAxICYmXG4gICAgICAgIHR4UmVxdWVzdFJvdW5kMS50cmFuc2FjdGlvbnNbMF0uc2lnbmF0dXJlU2hhcmVzLmxlbmd0aCA9PT0gMlxuICAgICk7XG5cbiAgICAvLyByb3VuZCAyXG4gICAgY29uc3QgcmVxTVBDdjJTaWduaW5nUm91bmQyID0ge1xuICAgICAgLi4ucmVxTVBDdjJTaWduaW5nUm91bmQxLFxuICAgICAgdHhSZXF1ZXN0OiB0eFJlcXVlc3RSb3VuZDEsXG4gICAgICBlbmNyeXB0ZWRSb3VuZDFTZXNzaW9uLFxuICAgICAgZW5jcnlwdGVkVXNlckdwZ1BydktleSxcbiAgICAgIGJpdGdvUHVibGljR3BnS2V5OiBiaXRnb0dwZ0tleS5wdWJsaWMsXG4gICAgfTtcblxuICAgIGNvbnN0IHJlc01QQ3YyU2lnbmluZ1JvdW5kMiA9IGF3YWl0IGVjZHNhTVBDdjJVdGlscy5jcmVhdGVPZmZsaW5lUm91bmQyU2hhcmUocmVxTVBDdjJTaWduaW5nUm91bmQyIGFzIGFueSk7XG4gICAgcmVzTVBDdjJTaWduaW5nUm91bmQyLnNob3VsZC5oYXZlLnByb3BlcnR5KCdzaWduYXR1cmVTaGFyZVJvdW5kMicpO1xuICAgIHJlc01QQ3YyU2lnbmluZ1JvdW5kMi5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgnZW5jcnlwdGVkUm91bmQyU2Vzc2lvbicpO1xuXG4gICAgY29uc3QgZW5jcnlwdGVkUm91bmQyU2Vzc2lvbiA9IHJlc01QQ3YyU2lnbmluZ1JvdW5kMi5lbmNyeXB0ZWRSb3VuZDJTZXNzaW9uO1xuXG4gICAgY29uc3QgeyB0eFJlcXVlc3Q6IHR4UmVxdWVzdFJvdW5kMiwgYml0Z29Nc2c0IH0gPSBhd2FpdCBzaWduQml0Z29NUEN2MlJvdW5kMihcbiAgICAgIGJpdGdvU2Vzc2lvbixcbiAgICAgIHJlcU1QQ3YyU2lnbmluZ1JvdW5kMi50eFJlcXVlc3QsXG4gICAgICByZXNNUEN2MlNpZ25pbmdSb3VuZDIuc2lnbmF0dXJlU2hhcmVSb3VuZDIsXG4gICAgICByZXNNUEN2MlNpZ25pbmdSb3VuZDEudXNlckdwZ1B1YktleVxuICAgICk7XG4gICAgYXNzZXJ0Lm9rKFxuICAgICAgdHhSZXF1ZXN0Um91bmQyLnRyYW5zYWN0aW9ucyAmJlxuICAgICAgICB0eFJlcXVlc3RSb3VuZDIudHJhbnNhY3Rpb25zLmxlbmd0aCA9PT0gMSAmJlxuICAgICAgICB0eFJlcXVlc3RSb3VuZDIudHJhbnNhY3Rpb25zWzBdLnNpZ25hdHVyZVNoYXJlcy5sZW5ndGggPT09IDRcbiAgICApO1xuICAgIGJpdGdvTXNnNC5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgnc2lnbmF0dXJlUicpO1xuXG4gICAgLy8gcm91bmQgM1xuICAgIGNvbnN0IHJlcU1QQ3YyU2lnbmluZ1JvdW5kMyA9IHtcbiAgICAgIC4uLnJlcU1QQ3YyU2lnbmluZ1JvdW5kMixcbiAgICAgIHR4UmVxdWVzdDogdHhSZXF1ZXN0Um91bmQyLFxuICAgICAgZW5jcnlwdGVkUm91bmQxU2Vzc2lvbjogbnVsbCxcbiAgICAgIGVuY3J5cHRlZFJvdW5kMlNlc3Npb24sXG4gICAgfTtcblxuICAgIGNvbnN0IHJlc01QQ3YyU2lnbmluZ1JvdW5kMyA9IGF3YWl0IGVjZHNhTVBDdjJVdGlscy5jcmVhdGVPZmZsaW5lUm91bmQzU2hhcmUocmVxTVBDdjJTaWduaW5nUm91bmQzIGFzIGFueSk7XG4gICAgcmVzTVBDdjJTaWduaW5nUm91bmQzLnNob3VsZC5oYXZlLnByb3BlcnR5KCdzaWduYXR1cmVTaGFyZVJvdW5kMycpO1xuXG4gICAgY29uc3QgeyB1c2VyTXNnNCB9ID0gYXdhaXQgc2lnbkJpdGdvTVBDdjJSb3VuZDMoXG4gICAgICBiaXRnb1Nlc3Npb24sXG4gICAgICByZXNNUEN2MlNpZ25pbmdSb3VuZDMuc2lnbmF0dXJlU2hhcmVSb3VuZDMsXG4gICAgICByZXNNUEN2MlNpZ25pbmdSb3VuZDEudXNlckdwZ1B1YktleVxuICAgICk7XG5cbiAgICAvLyBCb3RoIHBhcnRpZXMgbXVzdCBwcm9kdWNlIG1hdGNoaW5nIFIgdmFsdWVzIGZvciBhIHZhbGlkIGNvbWJpbmVkIHNpZ25hdHVyZVxuICAgIGFzc2VydC5vayh1c2VyTXNnNC5kYXRhLm1zZzQuc2lnbmF0dXJlUiA9PT0gYml0Z29Nc2c0LnNpZ25hdHVyZVIsICdVc2VyIGFuZCBCaXRHbyBzaWduYXR1cmVzUiBkbyBub3QgbWF0Y2gnKTtcblxuICAgIGNvbnN0IGRlc2VyaWFsaXplZEJpdGdvTXNnNCA9IERrbHNUeXBlcy5kZXNlcmlhbGl6ZU1lc3NhZ2VzKHtcbiAgICAgIHAycE1lc3NhZ2VzOiBbXSxcbiAgICAgIGJyb2FkY2FzdE1lc3NhZ2VzOiBbYml0Z29Nc2c0XSxcbiAgICB9KTtcblxuICAgIGNvbnN0IGRlc2VyaWFsaXplZFVzZXJNc2c0ID0gRGtsc1R5cGVzLmRlc2VyaWFsaXplTWVzc2FnZXMoe1xuICAgICAgcDJwTWVzc2FnZXM6IFtdLFxuICAgICAgYnJvYWRjYXN0TWVzc2FnZXM6IFtcbiAgICAgICAge1xuICAgICAgICAgIGZyb206IHVzZXJNc2c0LmRhdGEubXNnNC5mcm9tLFxuICAgICAgICAgIHBheWxvYWQ6IHVzZXJNc2c0LmRhdGEubXNnNC5tZXNzYWdlLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9KTtcblxuICAgIGNvbnN0IGNvbWJpbmVkU2lnVXNpbmdVdGlsID0gRGtsc1V0aWxzLmNvbWJpbmVQYXJ0aWFsU2lnbmF0dXJlcyhcbiAgICAgIFtkZXNlcmlhbGl6ZWRVc2VyTXNnNC5icm9hZGNhc3RNZXNzYWdlc1swXS5wYXlsb2FkLCBkZXNlcmlhbGl6ZWRCaXRnb01zZzQuYnJvYWRjYXN0TWVzc2FnZXNbMF0ucGF5bG9hZF0sXG4gICAgICBCdWZmZXIuZnJvbSh1c2VyTXNnNC5kYXRhLm1zZzQuc2lnbmF0dXJlUiwgJ2Jhc2U2NCcpLnRvU3RyaW5nKCdoZXgnKVxuICAgICk7XG5cbiAgICAvLyBDb21iaW5lZCBzaWduYXR1cmUgbXVzdCBoYXZlIHZhbGlkIFIgYW5kIFMgY29tcG9uZW50cyAoMzIgYnl0ZXMgZWFjaClcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwoY29tYmluZWRTaWdVc2luZ1V0aWwuUi5sZW5ndGgsIDMyLCAnU2lnbmF0dXJlIFIgbXVzdCBiZSAzMiBieXRlcycpO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChjb21iaW5lZFNpZ1VzaW5nVXRpbC5TLmxlbmd0aCwgMzIsICdTaWduYXR1cmUgUyBtdXN0IGJlIDMyIGJ5dGVzJyk7XG5cbiAgICAvLyBWZXJpZnkgd2l0aCBzaG91bGRIYXNoPWZhbHNlIOKAlCBzaWduYWJsZUhleCBpcyBhbHJlYWR5IFNIQS0yNTYodHhCb2R5KS5cbiAgICAvLyBUaGlzIG1pcnJvcnMgV1AncyBjb21iaW5lU2lnU2hhcmVzTVBDdjIgd2hlcmUgc2hvdWxkSGFzaD1mYWxzZSBmb3JcbiAgICAvLyBwcmUtaGFzaGVkIEF2YWxhbmNoZSBhdG9taWMgdHJhbnNhY3Rpb25zIChpc1NpZ25hYmxlUHJlSGFzaGVkPXRydWUpLlxuICAgIC8vIE9uLWNoYWluLCBBdmFsYW5jaGUgdmVyaWZpZXM6IGVjZHNhUmVjb3ZlcihTSEEtMjU2KHR4Qm9keSkpID09IHNpZ25lclB1YktleVxuICAgIGNvbnN0IGNvbnZlcnRlZFNpZ25hdHVyZSA9IERrbHNVdGlscy52ZXJpZnlBbmRDb252ZXJ0RGtsc1NpZ25hdHVyZShcbiAgICAgIEJ1ZmZlci5mcm9tKHNpZ25hYmxlSGV4LCAnaGV4JyksXG4gICAgICBjb21iaW5lZFNpZ1VzaW5nVXRpbCxcbiAgICAgIERrbHNUeXBlcy5nZXRDb21tb25LZXljaGFpbih1c2VyU2hhcmUpLFxuICAgICAgZGVyaXZhdGlvblBhdGgsXG4gICAgICBjcmVhdGVIYXNoKCdzaGEyNTYnKSBhcyBIYXNoLFxuICAgICAgZmFsc2UgLy8gc2hvdWxkSGFzaD1mYWxzZTogbWVzc2FnZSBpcyBhbHJlYWR5IFNIQS0yNTYodHhCb2R5KVxuICAgICk7XG4gICAgYXNzZXJ0Lm9rKGNvbnZlcnRlZFNpZ25hdHVyZSwgJ1ByZS1oYXNoZWQgQXZhbGFuY2hlIGF0b21pYyBzaWduYXR1cmUgaXMgbm90IHZhbGlkJyk7XG4gICAgLy8gRm9ybWF0OiByZWNpZDpSX2hleDpTX2hleDpwdWJsaWNLZXlfaGV4XG4gICAgLy8gU2FuZGJveCBwcm9kdWNlcyB0aGUgc2FtZSBzdHJ1Y3R1cmUg4oCUIGUuZy4gUOKGkkMgZXhwb3J0OlxuICAgIC8vICAgcjogZmFlNDRjYTg5ZTdhMGQzZWZmZDA5MTJjMTZkNjk3MzVhYWJiYzczYWQyZDE0MGZmYTJjM2I0NmFmNDhkMTU5YyAoMzIgYnl0ZXMpXG4gICAgLy8gICBzOiAxZGVjMDVkMGQ0NzdhNWIyNDVhMGEyZTVmM2E2N2U3NTQ4OWZmOWI5OGIyOTc4MGZjNzU3YjEyZDlmNjg3ZGIzICgzMiBieXRlcylcbiAgICAvLyAgIFJlY292ZXJ5OiAwXG4gICAgY29uc3Qgc2lnUGFydHMgPSBjb252ZXJ0ZWRTaWduYXR1cmUuc3BsaXQoJzonKTtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwoc2lnUGFydHMubGVuZ3RoLCA0LCAnU2lnbmF0dXJlIG11c3QgYmUgcmVjaWQ6UjpTOnB1YmtleSBmb3JtYXQnKTtcbiAgICBhc3NlcnQub2soWycwJywgJzEnXS5pbmNsdWRlcyhzaWdQYXJ0c1swXSksICdSZWNvdmVyeSBJRCBtdXN0IGJlIDAgb3IgMScpO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChzaWdQYXJ0c1sxXS5sZW5ndGgsIDY0LCAnU2lnbmF0dXJlIFIgbXVzdCBiZSAzMiBieXRlcyBoZXgnKTtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwoc2lnUGFydHNbMl0ubGVuZ3RoLCA2NCwgJ1NpZ25hdHVyZSBTIG11c3QgYmUgMzIgYnl0ZXMgaGV4Jyk7XG4gIH0pO1xuXG4gIGl0KCdzaWduUmVxdWVzdEJhc2UgKGhvdCB3YWxsZXQgcGF0aCkgc2hvdWxkIHNraXAga2VjY2FrMjU2IGZvciBBdmFsYW5jaGUgYXRvbWljIHR4JywgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHNlcmlhbGl6ZWRUeEhleCA9XG4gICAgICAnMDAwMDAwMDAwMDAxMDAwMDAwNzI3OGRiNWMzMGJlZDA0YzA1Y2UyMDkxNzk4MTI4NTBiYmIzZmU2ZDQ2ZDdlZWYzNzQ0ZDgxNGMwZGE1NTUyNDc5JyArXG4gICAgICAnMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMjhhMDU5MzNkYzc2JyArXG4gICAgICAnZTRlNmMyNWYzNWQ1YzliMmE1ODc2OTcwMGU3NjAwMDAwMDAwMDJmZjNkMTY1ODczNGY5NGFmODcxYzNkMTMxYjU2MTMxYjZmYjdhMDI5MWVhYycgK1xuICAgICAgJ2FkZDI2MWU2OWRmYjQyYTljZGY2ZjdmZGRkMDAwMDAwMDAwMDAwMDAwOTAwMDAwMDAxNTg3MzRmOTRhZjg3MWMzZDEzMWI1NjEzMWI2ZmI3YTAyOScgK1xuICAgICAgJzFlYWNhZGQyNjFlNjlkZmI0MmE5Y2RmNmY3ZmRkZDAwMDAwMDA3MDAwMDAwMDAwMmZhZjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjAwMDAwMDAzJyArXG4gICAgICAnMTJjYjMyZWFmOTI1NTMwNjRkYjk4ZDI3MWI1NmNiYTA3OWVjNzhmNWE2ZTBjMWFiZDAxMzJmNzBlZmI3N2UyMjc0NjM3ZmYzMzZhMjlhNTdjMzg2JyArXG4gICAgICAnZDU4ZDA5YTlhZTc3Y2YxY2YwN2JmMWM5ZGU0NGViYjBjOWYzJztcbiAgICBjb25zdCBzaWduYWJsZUhleCA9IGNyZWF0ZUhhc2goJ3NoYTI1NicpLnVwZGF0ZShCdWZmZXIuZnJvbShzZXJpYWxpemVkVHhIZXgsICdoZXgnKSkuZGlnZXN0KCdoZXgnKTtcbiAgICBjb25zdCBkZXJpdmF0aW9uUGF0aCA9ICdtLzAnO1xuXG4gICAgY29uc3QgbW9ja0JnV2l0aFBvc3QgPSB7fSBhcyBCaXRHb0Jhc2U7XG4gICAgbW9ja0JnV2l0aFBvc3QuZ2V0RW52ID0gc2lub24uc3R1YigpLnJldHVybnMoJ3Rlc3QnKTtcbiAgICBtb2NrQmdXaXRoUG9zdC5zZXRSZXF1ZXN0VHJhY2VyID0gc2lub24uc3R1YigpO1xuICAgIG1vY2tCZ1dpdGhQb3N0LmVuY3J5cHQgPSBzaW5vbi5zdHViKCkucmV0dXJucygnZW5jcnlwdGVkJyk7XG4gICAgbW9ja0JnV2l0aFBvc3QuZW5jcnlwdCA9IHNpbm9uLnN0dWIoKS5yZXNvbHZlcygnZW5jcnlwdGVkJyk7XG4gICAgbW9ja0JnV2l0aFBvc3QuZGVjcnlwdCA9IHNpbm9uLnN0dWIoKS5yZXR1cm5zKCdkZWNyeXB0ZWQnKTtcbiAgICBtb2NrQmdXaXRoUG9zdC5kZWNyeXB0ID0gc2lub24uc3R1YigpLnJlc29sdmVzKCdkZWNyeXB0ZWQnKTtcbiAgICBtb2NrQmdXaXRoUG9zdC5wb3N0ID0gc2lub24uc3R1YigpLnJldHVybnMoe1xuICAgICAgc2VuZDogc2lub24uc3R1YigpLnJldHVybnNUaGlzKCksXG4gICAgICBzZXQ6IHNpbm9uLnN0dWIoKS5yZXR1cm5zVGhpcygpLFxuICAgICAgcmVzdWx0OiBzaW5vbi5zdHViKCkucmVqZWN0cyhuZXcgRXJyb3IoJ21vY2s6IEhUVFAgbm90IGF2YWlsYWJsZScpKSxcbiAgICB9KTtcblxuICAgIGNvbnN0IGhhc2hGdW5jdGlvblNweSA9IHNpbm9uLnN0dWIoKS5jYWxsc0Zha2UoKCkgPT4gY3JlYXRlS2VjY2FrSGFzaCgna2VjY2FrMjU2JykgYXMgSGFzaCk7XG4gICAgY29uc3QgbW9ja0NvaW5Gb3JIb3RXYWxsZXQgPSB7XG4gICAgICBnZXRIYXNoRnVuY3Rpb246IGhhc2hGdW5jdGlvblNweSxcbiAgICAgIHZlcmlmeVRyYW5zYWN0aW9uOiBzaW5vbi5zdHViKCkucmVzb2x2ZXModHJ1ZSksXG4gICAgICBnZXRNUENBbGdvcml0aG06IHNpbm9uLnN0dWIoKS5yZXR1cm5zKCdlY2RzYScpLFxuICAgICAgZ2V0Q29uZmlnOiBzaW5vbi5zdHViKCkucmV0dXJucyh7IGZhbWlseTogJ2ZscnAnIH0pLFxuICAgICAgaXNTaWduYWJsZVByZUhhc2hlZDogKHVuc2lnbmVkVHg6IHsgc2VyaWFsaXplZFR4SGV4Pzogc3RyaW5nIH0pID0+XG4gICAgICAgIHVuc2lnbmVkVHguc2VyaWFsaXplZFR4SGV4Py5zdGFydHNXaXRoKCcwMDAwJykgPz8gZmFsc2UsXG4gICAgfSBhcyB1bmtub3duIGFzIElCYXNlQ29pbjtcblxuICAgIGNvbnN0IG1vY2tXYWxsZXQgPSB7XG4gICAgICBpZDogc2lub24uc3R1YigpLnJldHVybnMod2FsbGV0SUQpLFxuICAgICAgbXVsdGlzaWdUeXBlOiBzaW5vbi5zdHViKCkucmV0dXJucygndHNzJyksXG4gICAgICBtdWx0aXNpZ1R5cGVWZXJzaW9uOiBzaW5vbi5zdHViKCkucmV0dXJucygnTVBDdjInKSxcbiAgICB9O1xuXG4gICAgY29uc3QgaG90V2FsbGV0VXRpbHMgPSBuZXcgRWNkc2FNUEN2MlV0aWxzKG1vY2tCZ1dpdGhQb3N0LCBtb2NrQ29pbkZvckhvdFdhbGxldCwgbW9ja1dhbGxldCBhcyBhbnkpO1xuICAgIHNpbm9uLnN0dWIoaG90V2FsbGV0VXRpbHMgYXMgYW55LCAncGlja0JpdGdvUHViR3BnS2V5Rm9yU2lnbmluZycpLnJlc29sdmVzKGJpdGdvR3BnS2V5LnB1YmxpYyk7XG5cbiAgICBjb25zdCB0eFJlcXVlc3QgPSB7XG4gICAgICB0eFJlcXVlc3RJZDogJ2ZscnAtZXhwb3J0LXRlc3QnLFxuICAgICAgYXBpVmVyc2lvbjogJ2Z1bGwnLFxuICAgICAgd2FsbGV0SWQ6IHdhbGxldElELFxuICAgICAgdHJhbnNhY3Rpb25zOiBbXG4gICAgICAgIHtcbiAgICAgICAgICB1bnNpZ25lZFR4OiB7XG4gICAgICAgICAgICBkZXJpdmF0aW9uUGF0aCxcbiAgICAgICAgICAgIHNpZ25hYmxlSGV4LFxuICAgICAgICAgICAgc2VyaWFsaXplZFR4SGV4LFxuICAgICAgICAgIH0sXG4gICAgICAgICAgc2lnbmF0dXJlU2hhcmVzOiBbXSxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfSBhcyB1bmtub3duIGFzIFR4UmVxdWVzdDtcblxuICAgIHRyeSB7XG4gICAgICBhd2FpdCBob3RXYWxsZXRVdGlscy5zaWduVHhSZXF1ZXN0KHtcbiAgICAgICAgdHhSZXF1ZXN0LFxuICAgICAgICB0eFBhcmFtczogeyByZWNpcGllbnRzOiBbeyBhZGRyZXNzOiAnMHgnICsgJzAwJy5yZXBlYXQoMjApLCBhbW91bnQ6ICcxMDAwJyB9XSB9LFxuICAgICAgICBwcnY6IHVzZXJTaGFyZS50b1N0cmluZygnYmFzZTY0JyksXG4gICAgICAgIHJlcUlkOiB7IGluYzogc2lub24uc3R1YigpLCB0b1N0cmluZzogc2lub24uc3R1YigpLnJldHVybnMoJ3Rlc3QtcmVxJykgfSBhcyBhbnksXG4gICAgICB9KTtcbiAgICB9IGNhdGNoIChlKSB7fVxuXG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKFxuICAgICAgaGFzaEZ1bmN0aW9uU3B5LmNhbGxDb3VudCxcbiAgICAgIDAsXG4gICAgICAnZ2V0SGFzaEZ1bmN0aW9uIG11c3QgTk9UIGJlIGNhbGxlZCBmb3IgQXZhbGFuY2hlIGF0b21pYyB0eCAoc2VyaWFsaXplZFR4SGV4IHN0YXJ0cyB3aXRoIDAwMDApJ1xuICAgICk7XG4gIH0pO1xuXG4gIGl0KCdzaWduUmVxdWVzdEJhc2UgKGhvdCB3YWxsZXQgcGF0aCkgc2hvdWxkIGFwcGx5IGtlY2NhazI1NiBmb3IgcmVndWxhciBFVk0gdHgnLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3Qgc2VyaWFsaXplZFR4SGV4ID0gJ2Y4NmM4MDg1MDRhODE3YzgwMDgyNTIwODk0JyArICcwMCcucmVwZWF0KDIwKSArICc4MDgwODA4MCc7XG4gICAgY29uc3Qgc2lnbmFibGVIZXggPSBzZXJpYWxpemVkVHhIZXg7XG4gICAgY29uc3QgZGVyaXZhdGlvblBhdGggPSAnbS8wJztcblxuICAgIGFzc2VydC5vayghc2VyaWFsaXplZFR4SGV4LnN0YXJ0c1dpdGgoJzAwMDAnKSwgJ0VWTSB0eCBtdXN0IG5vdCBzdGFydCB3aXRoIEF2YWxhbmNoZSBwcmVmaXgnKTtcblxuICAgIGNvbnN0IG1vY2tCZ1dpdGhQb3N0ID0ge30gYXMgQml0R29CYXNlO1xuICAgIG1vY2tCZ1dpdGhQb3N0LmdldEVudiA9IHNpbm9uLnN0dWIoKS5yZXR1cm5zKCd0ZXN0Jyk7XG4gICAgbW9ja0JnV2l0aFBvc3Quc2V0UmVxdWVzdFRyYWNlciA9IHNpbm9uLnN0dWIoKTtcbiAgICBtb2NrQmdXaXRoUG9zdC5lbmNyeXB0ID0gc2lub24uc3R1YigpLnJldHVybnMoJ2VuY3J5cHRlZCcpO1xuICAgIG1vY2tCZ1dpdGhQb3N0LmVuY3J5cHQgPSBzaW5vbi5zdHViKCkucmVzb2x2ZXMoJ2VuY3J5cHRlZCcpO1xuICAgIG1vY2tCZ1dpdGhQb3N0LmRlY3J5cHQgPSBzaW5vbi5zdHViKCkucmV0dXJucygnZGVjcnlwdGVkJyk7XG4gICAgbW9ja0JnV2l0aFBvc3QuZGVjcnlwdCA9IHNpbm9uLnN0dWIoKS5yZXNvbHZlcygnZGVjcnlwdGVkJyk7XG4gICAgbW9ja0JnV2l0aFBvc3QucG9zdCA9IHNpbm9uLnN0dWIoKS5yZXR1cm5zKHtcbiAgICAgIHNlbmQ6IHNpbm9uLnN0dWIoKS5yZXR1cm5zVGhpcygpLFxuICAgICAgc2V0OiBzaW5vbi5zdHViKCkucmV0dXJuc1RoaXMoKSxcbiAgICAgIHJlc3VsdDogc2lub24uc3R1YigpLnJlamVjdHMobmV3IEVycm9yKCdtb2NrOiBIVFRQIG5vdCBhdmFpbGFibGUnKSksXG4gICAgfSk7XG5cbiAgICBjb25zdCBoYXNoRnVuY3Rpb25TcHkgPSBzaW5vbi5zdHViKCkuY2FsbHNGYWtlKCgpID0+IGNyZWF0ZUtlY2Nha0hhc2goJ2tlY2NhazI1NicpIGFzIEhhc2gpO1xuICAgIGNvbnN0IG1vY2tDb2luRm9yRXZtV2FsbGV0ID0ge1xuICAgICAgZ2V0SGFzaEZ1bmN0aW9uOiBoYXNoRnVuY3Rpb25TcHksXG4gICAgICB2ZXJpZnlUcmFuc2FjdGlvbjogc2lub24uc3R1YigpLnJlc29sdmVzKHRydWUpLFxuICAgICAgZ2V0TVBDQWxnb3JpdGhtOiBzaW5vbi5zdHViKCkucmV0dXJucygnZWNkc2EnKSxcbiAgICAgIGdldENvbmZpZzogc2lub24uc3R1YigpLnJldHVybnMoeyBmYW1pbHk6ICdmbHInIH0pLFxuICAgIH0gYXMgdW5rbm93biBhcyBJQmFzZUNvaW47XG5cbiAgICBjb25zdCBtb2NrV2FsbGV0ID0ge1xuICAgICAgaWQ6IHNpbm9uLnN0dWIoKS5yZXR1cm5zKHdhbGxldElEKSxcbiAgICAgIG11bHRpc2lnVHlwZTogc2lub24uc3R1YigpLnJldHVybnMoJ3RzcycpLFxuICAgICAgbXVsdGlzaWdUeXBlVmVyc2lvbjogc2lub24uc3R1YigpLnJldHVybnMoJ01QQ3YyJyksXG4gICAgfTtcblxuICAgIGNvbnN0IGV2bVV0aWxzID0gbmV3IEVjZHNhTVBDdjJVdGlscyhtb2NrQmdXaXRoUG9zdCwgbW9ja0NvaW5Gb3JFdm1XYWxsZXQsIG1vY2tXYWxsZXQgYXMgYW55KTtcbiAgICBzaW5vbi5zdHViKGV2bVV0aWxzIGFzIGFueSwgJ3BpY2tCaXRnb1B1YkdwZ0tleUZvclNpZ25pbmcnKS5yZXNvbHZlcyhiaXRnb0dwZ0tleS5wdWJsaWMpO1xuXG4gICAgY29uc3QgdHhSZXF1ZXN0ID0ge1xuICAgICAgdHhSZXF1ZXN0SWQ6ICdmbHItZXZtLXRlc3QnLFxuICAgICAgYXBpVmVyc2lvbjogJ2Z1bGwnLFxuICAgICAgd2FsbGV0SWQ6IHdhbGxldElELFxuICAgICAgdHJhbnNhY3Rpb25zOiBbXG4gICAgICAgIHtcbiAgICAgICAgICB1bnNpZ25lZFR4OiB7XG4gICAgICAgICAgICBkZXJpdmF0aW9uUGF0aCxcbiAgICAgICAgICAgIHNpZ25hYmxlSGV4LFxuICAgICAgICAgICAgc2VyaWFsaXplZFR4SGV4LFxuICAgICAgICAgIH0sXG4gICAgICAgICAgc2lnbmF0dXJlU2hhcmVzOiBbXSxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfSBhcyB1bmtub3duIGFzIFR4UmVxdWVzdDtcblxuICAgIHRyeSB7XG4gICAgICBhd2FpdCBldm1VdGlscy5zaWduVHhSZXF1ZXN0KHtcbiAgICAgICAgdHhSZXF1ZXN0LFxuICAgICAgICB0eFBhcmFtczogeyByZWNpcGllbnRzOiBbeyBhZGRyZXNzOiAnMHgnICsgJzAwJy5yZXBlYXQoMjApLCBhbW91bnQ6ICcxMDAwJyB9XSB9LFxuICAgICAgICBwcnY6IHVzZXJTaGFyZS50b1N0cmluZygnYmFzZTY0JyksXG4gICAgICAgIHJlcUlkOiB7IGluYzogc2lub24uc3R1YigpLCB0b1N0cmluZzogc2lub24uc3R1YigpLnJldHVybnMoJ3Rlc3QtcmVxJykgfSBhcyBhbnksXG4gICAgICB9KTtcbiAgICB9IGNhdGNoIChlKSB7fVxuXG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKFxuICAgICAgaGFzaEZ1bmN0aW9uU3B5LmNhbGxDb3VudCxcbiAgICAgIDEsXG4gICAgICAnZ2V0SGFzaEZ1bmN0aW9uIG11c3QgYmUgY2FsbGVkIGZvciByZWd1bGFyIEVWTSB0eCAoc2VyaWFsaXplZFR4SGV4IGRvZXMgbm90IHN0YXJ0IHdpdGggMDAwMCknXG4gICAgKTtcbiAgfSk7XG5cbiAgLy8gUmVncmVzc2lvbiB0ZXN0IGZvciBDR0QtMTgxNSAvIERFRkktNjYxOiByZXNvbHZlRWZmZWN0aXZlVHhQYXJhbXMoKSBzcGVjaWFsLWNhc2VzIHdyYXAtbmF0aXZlXG4gIC8vIGFuZCB1bndyYXAtbmF0aXZlIHNvIHRoZSBuby1yZWNpcGllbnRzIGd1YXJkIGluIHZlcmlmeVRzc1RyYW5zYWN0aW9uIGRvZXNuJ3QgcmVqZWN0IHRoZW0uIFRoYXRcbiAgLy8gYnlwYXNzIGlzIHNlY3VyaXR5LXNlbnNpdGl2ZSAoaXQncyB3aGF0IGxldHMgYSBEZUZpIHZhdWx0IHdyYXAvdW53cmFwIHR4IHNraXAgcmVjaXBpZW50XG4gIC8vIHZlcmlmaWNhdGlvbiksIHNvIHBpbiBpdCB0aHJvdWdoIHRoZSByZWFsIHNpZ25SZXF1ZXN0QmFzZSgpIC0+IHJlc29sdmVFZmZlY3RpdmVUeFBhcmFtcygpIC0+XG4gIC8vIHZlcmlmeVRyYW5zYWN0aW9uKCkgd2lyaW5nIGluc3RlYWQgb2Ygb25seSB1bml0LXRlc3RpbmcgcmVzb2x2ZUVmZmVjdGl2ZVR4UGFyYW1zKCkgaW4gaXNvbGF0aW9uLlxuICAvLyBwZW5kaW5nQXBwcm92YWwuYXBwcm92ZSgpIC0+IHJlY3JlYXRlVHhSZXF1ZXN0KCkgLT4gc2lnblR4UmVxdWVzdCgpIGNhcnJpZXMgbm8gdHhQYXJhbXMgYXQgYWxsLFxuICAvLyBzbyBpbnRlbnRUeXBlIGlzIHRoZSBPTkxZIHNvdXJjZSBvZiB0aGUgdHlwZSBoZXJlIOKAlCBleGFjdGx5IHRoZSBwYXRoIHRoYXQgb25seSBldmVyIHNlZXMgdGhlXG4gIC8vIGtlYmFiLWNhc2Ugc3BlbGxpbmcgKCd3cmFwLW5hdGl2ZScgLyAndW53cmFwLW5hdGl2ZScpLCBuZXZlciB0aGUgY2FtZWxDYXNlICd3cmFwTmF0aXZlJy8ndW53cmFwTmF0aXZlJy5cbiAgWyd3cmFwLW5hdGl2ZScsICd1bndyYXAtbmF0aXZlJ10uZm9yRWFjaCgoaW50ZW50VHlwZSkgPT4ge1xuICAgIGl0KGBzaWduUmVxdWVzdEJhc2Ugc2hvdWxkIHZlcmlmeSBhIG5vLXR4UGFyYW1zICR7aW50ZW50VHlwZX0gaW50ZW50IHdpdGhvdXQgcmVxdWlyaW5nIHJlY2lwaWVudHNgLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBzZXJpYWxpemVkVHhIZXggPSAnZjg2YzgwODUwNGE4MTdjODAwODI1MjA4OTQnICsgJzAwJy5yZXBlYXQoMjApICsgJzgwODA4MDgwJztcbiAgICAgIGNvbnN0IHNpZ25hYmxlSGV4ID0gc2VyaWFsaXplZFR4SGV4O1xuICAgICAgY29uc3QgZGVyaXZhdGlvblBhdGggPSAnbS8wJztcblxuICAgICAgY29uc3QgbW9ja0JnV2l0aFBvc3QgPSB7fSBhcyBCaXRHb0Jhc2U7XG4gICAgICBtb2NrQmdXaXRoUG9zdC5nZXRFbnYgPSBzaW5vbi5zdHViKCkucmV0dXJucygndGVzdCcpO1xuICAgICAgbW9ja0JnV2l0aFBvc3Quc2V0UmVxdWVzdFRyYWNlciA9IHNpbm9uLnN0dWIoKTtcbiAgICAgIG1vY2tCZ1dpdGhQb3N0LmVuY3J5cHQgPSBzaW5vbi5zdHViKCkucmVzb2x2ZXMoJ2VuY3J5cHRlZCcpO1xuICAgICAgbW9ja0JnV2l0aFBvc3QuZGVjcnlwdCA9IHNpbm9uLnN0dWIoKS5yZXNvbHZlcygnZGVjcnlwdGVkJyk7XG4gICAgICBtb2NrQmdXaXRoUG9zdC5wb3N0ID0gc2lub24uc3R1YigpLnJldHVybnMoe1xuICAgICAgICBzZW5kOiBzaW5vbi5zdHViKCkucmV0dXJuc1RoaXMoKSxcbiAgICAgICAgc2V0OiBzaW5vbi5zdHViKCkucmV0dXJuc1RoaXMoKSxcbiAgICAgICAgcmVzdWx0OiBzaW5vbi5zdHViKCkucmVqZWN0cyhuZXcgRXJyb3IoJ21vY2s6IEhUVFAgbm90IGF2YWlsYWJsZScpKSxcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCB2ZXJpZnlUcmFuc2FjdGlvblNweSA9IHNpbm9uLnN0dWIoKS5yZXNvbHZlcyh0cnVlKTtcbiAgICAgIGNvbnN0IG1vY2tDb2luRm9yV3JhcCA9IHtcbiAgICAgICAgZ2V0SGFzaEZ1bmN0aW9uOiBzaW5vbi5zdHViKCkuY2FsbHNGYWtlKCgpID0+IGNyZWF0ZUtlY2Nha0hhc2goJ2tlY2NhazI1NicpIGFzIEhhc2gpLFxuICAgICAgICB2ZXJpZnlUcmFuc2FjdGlvbjogdmVyaWZ5VHJhbnNhY3Rpb25TcHksXG4gICAgICAgIGdldE1QQ0FsZ29yaXRobTogc2lub24uc3R1YigpLnJldHVybnMoJ2VjZHNhJyksXG4gICAgICAgIGdldENvbmZpZzogc2lub24uc3R1YigpLnJldHVybnMoeyBmYW1pbHk6ICdodGV0aCcgfSksXG4gICAgICB9IGFzIHVua25vd24gYXMgSUJhc2VDb2luO1xuXG4gICAgICBjb25zdCBtb2NrV2FsbGV0ID0ge1xuICAgICAgICBpZDogc2lub24uc3R1YigpLnJldHVybnMod2FsbGV0SUQpLFxuICAgICAgICBtdWx0aXNpZ1R5cGU6IHNpbm9uLnN0dWIoKS5yZXR1cm5zKCd0c3MnKSxcbiAgICAgICAgbXVsdGlzaWdUeXBlVmVyc2lvbjogc2lub24uc3R1YigpLnJldHVybnMoJ01QQ3YyJyksXG4gICAgICB9O1xuXG4gICAgICBjb25zdCB3cmFwVXRpbHMgPSBuZXcgRWNkc2FNUEN2MlV0aWxzKG1vY2tCZ1dpdGhQb3N0LCBtb2NrQ29pbkZvcldyYXAsIG1vY2tXYWxsZXQgYXMgYW55KTtcbiAgICAgIHNpbm9uLnN0dWIod3JhcFV0aWxzIGFzIGFueSwgJ3BpY2tCaXRnb1B1YkdwZ0tleUZvclNpZ25pbmcnKS5yZXNvbHZlcyhiaXRnb0dwZ0tleS5wdWJsaWMpO1xuXG4gICAgICAvLyBObyByZWNpcGllbnRzIGFueXdoZXJlIChuZWl0aGVyIHR4UGFyYW1zLnJlY2lwaWVudHMgbm9yIGludGVudC5yZWNpcGllbnRzKSDigJQgdGhlIHdyYXAtbmF0aXZlL1xuICAgICAgLy8gdW53cmFwLW5hdGl2ZSBjYWxsZGF0YSBpcyBidWlsdCBzZXJ2ZXItc2lkZSBmcm9tIGRlZmlQYXJhbXMsIHBlciBEZWZpVmF1bHQuc2VuZFdyYXBJbnRlbnQuXG4gICAgICBjb25zdCB0eFJlcXVlc3QgPSB7XG4gICAgICAgIHR4UmVxdWVzdElkOiBgd3JhcC1uYXRpdmUtdGVzdC0ke2ludGVudFR5cGV9YCxcbiAgICAgICAgYXBpVmVyc2lvbjogJ2Z1bGwnLFxuICAgICAgICB3YWxsZXRJZDogd2FsbGV0SUQsXG4gICAgICAgIGludGVudDogeyBpbnRlbnRUeXBlLCBkZWZpUGFyYW1zOiB7IHZhdWx0SWQ6ICd2bHQtZ2FsYXh5LXdldGgnLCBhbW91bnQ6ICcxMDAwMDAwMDAwMDAwMDAwMDAwJyB9IH0sXG4gICAgICAgIHRyYW5zYWN0aW9uczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHVuc2lnbmVkVHg6IHsgZGVyaXZhdGlvblBhdGgsIHNpZ25hYmxlSGV4LCBzZXJpYWxpemVkVHhIZXggfSxcbiAgICAgICAgICAgIHNpZ25hdHVyZVNoYXJlczogW10sXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgIH0gYXMgdW5rbm93biBhcyBUeFJlcXVlc3Q7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IHdyYXBVdGlscy5zaWduVHhSZXF1ZXN0KHtcbiAgICAgICAgICB0eFJlcXVlc3QsXG4gICAgICAgICAgLy8gTm8gdHhQYXJhbXMgYXQgYWxsIOKAlCBtaXJyb3JzIHBlbmRpbmdBcHByb3ZhbC5hcHByb3ZlKCkgLT4gcmVjcmVhdGVUeFJlcXVlc3QoKSAtPlxuICAgICAgICAgIC8vIHNpZ25UeFJlcXVlc3QoKSwgdGhlIG9uZSBzaWduaW5nIHBhdGggdGhhdCBvbmx5IGV2ZXIgc2VlcyB0aGUga2ViYWItY2FzZSBpbnRlbnRUeXBlLlxuICAgICAgICAgIHR4UGFyYW1zOiB1bmRlZmluZWQsXG4gICAgICAgICAgcHJ2OiB1c2VyU2hhcmUudG9TdHJpbmcoJ2Jhc2U2NCcpLFxuICAgICAgICAgIHJlcUlkOiB7IGluYzogc2lub24uc3R1YigpLCB0b1N0cmluZzogc2lub24uc3R1YigpLnJldHVybnMoJ3Rlc3QtcmVxJykgfSBhcyBhbnksXG4gICAgICAgIH0pO1xuICAgICAgfSBjYXRjaCAoZSkge31cblxuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKFxuICAgICAgICB2ZXJpZnlUcmFuc2FjdGlvblNweS5jYWxsQ291bnQsXG4gICAgICAgIDEsXG4gICAgICAgICd2ZXJpZnlUcmFuc2FjdGlvbiBtdXN0IGJlIHJlYWNoZWQ6IHJlc29sdmVFZmZlY3RpdmVUeFBhcmFtcyBtdXN0IG5vdCB0aHJvdyBmb3IgYSBuby1yZWNpcGllbnRzICcgK1xuICAgICAgICAgIGAke2ludGVudFR5cGV9IGludGVudGBcbiAgICAgICk7XG4gICAgICBjb25zdCB2ZXJpZnlDYWxsQXJncyA9IHZlcmlmeVRyYW5zYWN0aW9uU3B5LmZpcnN0Q2FsbC5hcmdzWzBdO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHZlcmlmeUNhbGxBcmdzLnR4UGFyYW1zLnR5cGUsIGludGVudFR5cGUpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHZlcmlmeUNhbGxBcmdzLnR4UGFyYW1zLnJlY2lwaWVudHMsIHVuZGVmaW5lZCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgc3RpbGwgYXBwbHkga2VjY2FrMjU2IGZvciByZWd1bGFyIEZMUiBFVk0gdHJhbnNhY3Rpb25zJywgYXN5bmMgKCkgPT4ge1xuICAgIC8vIFJlZ3VsYXIgRVZNIHRyYW5zYWN0aW9uIG9uIEZMUiAoZS5nLiB0b2tlbiB0cmFuc2Zlciwgbm90IGNyb3NzLWNoYWluKS5cbiAgICAvLyBzZXJpYWxpemVkVHhIZXggc3RhcnRzIHdpdGggJ2Y4JyAoUkxQIHByZWZpeCksIE5PVCAnMDAwMCcuXG4gICAgLy8gVGhlIFNESyBtdXN0IGFwcGx5IGtlY2NhazI1NiBhcyB0aGUgaGFzaCBmdW5jdGlvbiDigJQgc3RhbmRhcmQgRVZNIHBhdGguXG4gICAgLy8gVXNlIHZhbGlkIGhleCBmb3Igc2lnbmFibGVIZXggKHVubGlrZSB0aGUgcHJlLWV4aXN0aW5nICd0ZXN0TWVzc2FnZScgcGF0dGVyblxuICAgIC8vIGluIGVhcmxpZXIgdGVzdHMpIHNvIGtlY2NhazI1NiBvcGVyYXRlcyBvbiBhIHJlYWxpc3RpYyBieXRlIGJ1ZmZlci5cbiAgICBjb25zdCBzZXJpYWxpemVkVHhIZXggPSAnZjg2YzgwODUwNGE4MTdjODAwODI1MjA4OTQnICsgJzAwJy5yZXBlYXQoMjApICsgJzgwODA4MDgwJztcbiAgICBjb25zdCBzaWduYWJsZUhleCA9IHNlcmlhbGl6ZWRUeEhleDsgLy8gSW4gRVZNLCBzaWduYWJsZUhleCBpcyB0aGUgUkxQLWVuY29kZWQgdW5zaWduZWQgdHhcbiAgICBjb25zdCBkZXJpdmF0aW9uUGF0aCA9ICdtLzAnO1xuXG4gICAgLy8gVmVyaWZ5IGZpeHR1cmUgZG9lcyBOT1QgdHJpZ2dlciB0aGUgQXZhbGFuY2hlIGRldGVjdGlvblxuICAgIGFzc2VydC5vayghc2VyaWFsaXplZFR4SGV4LnN0YXJ0c1dpdGgoJzAwMDAnKSwgJ0VWTSB0eCBtdXN0IG5vdCBzdGFydCB3aXRoIEF2YWxhbmNoZSBwcmVmaXgnKTtcblxuICAgIC8vIHJvdW5kIDFcbiAgICBjb25zdCByZXFNUEN2MlNpZ25pbmdSb3VuZDEgPSB7XG4gICAgICB0eFJlcXVlc3Q6IHtcbiAgICAgICAgdHhSZXF1ZXN0SWQ6ICdmbHItZXZtLXRyYW5zZmVyJyxcbiAgICAgICAgYXBpVmVyc2lvbjogJ2Z1bGwnLFxuICAgICAgICB3YWxsZXRJZDogd2FsbGV0SUQsXG4gICAgICAgIHRyYW5zYWN0aW9uczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHVuc2lnbmVkVHg6IHtcbiAgICAgICAgICAgICAgZGVyaXZhdGlvblBhdGgsXG4gICAgICAgICAgICAgIHNpZ25hYmxlSGV4LFxuICAgICAgICAgICAgICBzZXJpYWxpemVkVHhIZXgsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc2lnbmF0dXJlU2hhcmVzOiBbXSxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgfSxcbiAgICAgIHBydjogdXNlclNoYXJlLnRvU3RyaW5nKCdiYXNlNjQnKSxcbiAgICAgIHdhbGxldFBhc3NwaHJhc2UsXG4gICAgfTtcblxuICAgIGNvbnN0IHJlc01QQ3YyU2lnbmluZ1JvdW5kMSA9IGF3YWl0IGVjZHNhTVBDdjJVdGlscy5jcmVhdGVPZmZsaW5lUm91bmQxU2hhcmUocmVxTVBDdjJTaWduaW5nUm91bmQxIGFzIGFueSk7XG4gICAgcmVzTVBDdjJTaWduaW5nUm91bmQxLnNob3VsZC5oYXZlLnByb3BlcnR5KCdzaWduYXR1cmVTaGFyZVJvdW5kMScpO1xuICAgIHJlc01QQ3YyU2lnbmluZ1JvdW5kMS5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgnZW5jcnlwdGVkUm91bmQxU2Vzc2lvbicpO1xuICAgIHJlc01QQ3YyU2lnbmluZ1JvdW5kMS5zaG91bGQuaGF2ZS5wcm9wZXJ0eSgnZW5jcnlwdGVkVXNlckdwZ1BydktleScpO1xuXG4gICAgY29uc3QgZW5jcnlwdGVkUm91bmQxU2Vzc2lvbiA9IHJlc01QQ3YyU2lnbmluZ1JvdW5kMS5lbmNyeXB0ZWRSb3VuZDFTZXNzaW9uO1xuICAgIGNvbnN0IGVuY3J5cHRlZFVzZXJHcGdQcnZLZXkgPSByZXNNUEN2MlNpZ25pbmdSb3VuZDEuZW5jcnlwdGVkVXNlckdwZ1BydktleTtcblxuICAgIC8vIEJpdEdvIHBhcnR5IHVzZXMga2VjY2FrMjU2KHNpZ25hYmxlSGV4KSDigJQgc3RhbmRhcmQgRVZNIHBhdGguXG4gICAgLy8gQm90aCBTREsgYW5kIFdQL0hTTSBhcHBseSBrZWNjYWsyNTYgZm9yIHJlZ3VsYXIgRVZNIHRyYW5zYWN0aW9ucy5cbiAgICBjb25zdCBoYXNoQnVmZmVyID0gY3JlYXRlS2VjY2FrSGFzaCgna2VjY2FrMjU2JykudXBkYXRlKEJ1ZmZlci5mcm9tKHNpZ25hYmxlSGV4LCAnaGV4JykpLmRpZ2VzdCgpO1xuICAgIGNvbnN0IGJpdGdvU2Vzc2lvbiA9IG5ldyBEa2xzRHNnLkRzZyhiaXRnb1NoYXJlLCAyLCBkZXJpdmF0aW9uUGF0aCwgaGFzaEJ1ZmZlcik7XG5cbiAgICBjb25zdCB0eFJlcXVlc3RSb3VuZDEgPSBhd2FpdCBzaWduQml0Z29NUEN2MlJvdW5kMShcbiAgICAgIGJpdGdvU2Vzc2lvbixcbiAgICAgIHJlcU1QQ3YyU2lnbmluZ1JvdW5kMS50eFJlcXVlc3QgYXMgYW55LFxuICAgICAgcmVzTVBDdjJTaWduaW5nUm91bmQxLnNpZ25hdHVyZVNoYXJlUm91bmQxLFxuICAgICAgcmVzTVBDdjJTaWduaW5nUm91bmQxLnVzZXJHcGdQdWJLZXlcbiAgICApO1xuICAgIGFzc2VydC5vayhcbiAgICAgIHR4UmVxdWVzdFJvdW5kMS50cmFuc2FjdGlvbnMgJiZcbiAgICAgICAgdHhSZXF1ZXN0Um91bmQxLnRyYW5zYWN0aW9ucy5sZW5ndGggPT09IDEgJiZcbiAgICAgICAgdHhSZXF1ZXN0Um91bmQxLnRyYW5zYWN0aW9uc1swXS5zaWduYXR1cmVTaGFyZXMubGVuZ3RoID09PSAyXG4gICAgKTtcblxuICAgIC8vIHJvdW5kIDJcbiAgICBjb25zdCByZXFNUEN2MlNpZ25pbmdSb3VuZDIgPSB7XG4gICAgICAuLi5yZXFNUEN2MlNpZ25pbmdSb3VuZDEsXG4gICAgICB0eFJlcXVlc3Q6IHR4UmVxdWVzdFJvdW5kMSxcbiAgICAgIGVuY3J5cHRlZFJvdW5kMVNlc3Npb24sXG4gICAgICBlbmNyeXB0ZWRVc2VyR3BnUHJ2S2V5LFxuICAgICAgYml0Z29QdWJsaWNHcGdLZXk6IGJpdGdvR3BnS2V5LnB1YmxpYyxcbiAgICB9O1xuXG4gICAgY29uc3QgcmVzTVBDdjJTaWduaW5nUm91bmQyID0gYXdhaXQgZWNkc2FNUEN2MlV0aWxzLmNyZWF0ZU9mZmxpbmVSb3VuZDJTaGFyZShyZXFNUEN2MlNpZ25pbmdSb3VuZDIgYXMgYW55KTtcbiAgICByZXNNUEN2MlNpZ25pbmdSb3VuZDIuc2hvdWxkLmhhdmUucHJvcGVydHkoJ3NpZ25hdHVyZVNoYXJlUm91bmQyJyk7XG4gICAgcmVzTVBDdjJTaWduaW5nUm91bmQyLnNob3VsZC5oYXZlLnByb3BlcnR5KCdlbmNyeXB0ZWRSb3VuZDJTZXNzaW9uJyk7XG5cbiAgICBjb25zdCBlbmNyeXB0ZWRSb3VuZDJTZXNzaW9uID0gcmVzTVBDdjJTaWduaW5nUm91bmQyLmVuY3J5cHRlZFJvdW5kMlNlc3Npb247XG5cbiAgICBjb25zdCB7IHR4UmVxdWVzdDogdHhSZXF1ZXN0Um91bmQyLCBiaXRnb01zZzQgfSA9IGF3YWl0IHNpZ25CaXRnb01QQ3YyUm91bmQyKFxuICAgICAgYml0Z29TZXNzaW9uLFxuICAgICAgcmVxTVBDdjJTaWduaW5nUm91bmQyLnR4UmVxdWVzdCxcbiAgICAgIHJlc01QQ3YyU2lnbmluZ1JvdW5kMi5zaWduYXR1cmVTaGFyZVJvdW5kMixcbiAgICAgIHJlc01QQ3YyU2lnbmluZ1JvdW5kMS51c2VyR3BnUHViS2V5XG4gICAgKTtcbiAgICBhc3NlcnQub2soXG4gICAgICB0eFJlcXVlc3RSb3VuZDIudHJhbnNhY3Rpb25zICYmXG4gICAgICAgIHR4UmVxdWVzdFJvdW5kMi50cmFuc2FjdGlvbnMubGVuZ3RoID09PSAxICYmXG4gICAgICAgIHR4UmVxdWVzdFJvdW5kMi50cmFuc2FjdGlvbnNbMF0uc2lnbmF0dXJlU2hhcmVzLmxlbmd0aCA9PT0gNFxuICAgICk7XG4gICAgYml0Z29Nc2c0LnNob3VsZC5oYXZlLnByb3BlcnR5KCdzaWduYXR1cmVSJyk7XG5cbiAgICAvLyByb3VuZCAzXG4gICAgY29uc3QgcmVxTVBDdjJTaWduaW5nUm91bmQzID0ge1xuICAgICAgLi4ucmVxTVBDdjJTaWduaW5nUm91bmQyLFxuICAgICAgdHhSZXF1ZXN0OiB0eFJlcXVlc3RSb3VuZDIsXG4gICAgICBlbmNyeXB0ZWRSb3VuZDFTZXNzaW9uOiBudWxsLFxuICAgICAgZW5jcnlwdGVkUm91bmQyU2Vzc2lvbixcbiAgICB9O1xuXG4gICAgY29uc3QgcmVzTVBDdjJTaWduaW5nUm91bmQzID0gYXdhaXQgZWNkc2FNUEN2MlV0aWxzLmNyZWF0ZU9mZmxpbmVSb3VuZDNTaGFyZShyZXFNUEN2MlNpZ25pbmdSb3VuZDMgYXMgYW55KTtcbiAgICByZXNNUEN2MlNpZ25pbmdSb3VuZDMuc2hvdWxkLmhhdmUucHJvcGVydHkoJ3NpZ25hdHVyZVNoYXJlUm91bmQzJyk7XG5cbiAgICBjb25zdCB7IHVzZXJNc2c0IH0gPSBhd2FpdCBzaWduQml0Z29NUEN2MlJvdW5kMyhcbiAgICAgIGJpdGdvU2Vzc2lvbixcbiAgICAgIHJlc01QQ3YyU2lnbmluZ1JvdW5kMy5zaWduYXR1cmVTaGFyZVJvdW5kMyxcbiAgICAgIHJlc01QQ3YyU2lnbmluZ1JvdW5kMS51c2VyR3BnUHViS2V5XG4gICAgKTtcblxuICAgIGFzc2VydC5vayh1c2VyTXNnNC5kYXRhLm1zZzQuc2lnbmF0dXJlUiA9PT0gYml0Z29Nc2c0LnNpZ25hdHVyZVIsICdVc2VyIGFuZCBCaXRHbyBzaWduYXR1cmVzUiBkbyBub3QgbWF0Y2gnKTtcblxuICAgIGNvbnN0IGRlc2VyaWFsaXplZEJpdGdvTXNnNCA9IERrbHNUeXBlcy5kZXNlcmlhbGl6ZU1lc3NhZ2VzKHtcbiAgICAgIHAycE1lc3NhZ2VzOiBbXSxcbiAgICAgIGJyb2FkY2FzdE1lc3NhZ2VzOiBbYml0Z29Nc2c0XSxcbiAgICB9KTtcblxuICAgIGNvbnN0IGRlc2VyaWFsaXplZFVzZXJNc2c0ID0gRGtsc1R5cGVzLmRlc2VyaWFsaXplTWVzc2FnZXMoe1xuICAgICAgcDJwTWVzc2FnZXM6IFtdLFxuICAgICAgYnJvYWRjYXN0TWVzc2FnZXM6IFtcbiAgICAgICAge1xuICAgICAgICAgIGZyb206IHVzZXJNc2c0LmRhdGEubXNnNC5mcm9tLFxuICAgICAgICAgIHBheWxvYWQ6IHVzZXJNc2c0LmRhdGEubXNnNC5tZXNzYWdlLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9KTtcblxuICAgIGNvbnN0IGNvbWJpbmVkU2lnVXNpbmdVdGlsID0gRGtsc1V0aWxzLmNvbWJpbmVQYXJ0aWFsU2lnbmF0dXJlcyhcbiAgICAgIFtkZXNlcmlhbGl6ZWRVc2VyTXNnNC5icm9hZGNhc3RNZXNzYWdlc1swXS5wYXlsb2FkLCBkZXNlcmlhbGl6ZWRCaXRnb01zZzQuYnJvYWRjYXN0TWVzc2FnZXNbMF0ucGF5bG9hZF0sXG4gICAgICBCdWZmZXIuZnJvbSh1c2VyTXNnNC5kYXRhLm1zZzQuc2lnbmF0dXJlUiwgJ2Jhc2U2NCcpLnRvU3RyaW5nKCdoZXgnKVxuICAgICk7XG5cbiAgICAvLyBWZXJpZnkgd2l0aCBzaG91bGRIYXNoPXRydWUgYW5kIGtlY2NhazI1NiDigJQgc3RhbmRhcmQgRVZNIHZlcmlmaWNhdGlvblxuICAgIGNvbnN0IGNvbnZlcnRlZFNpZ25hdHVyZSA9IERrbHNVdGlscy52ZXJpZnlBbmRDb252ZXJ0RGtsc1NpZ25hdHVyZShcbiAgICAgIEJ1ZmZlci5mcm9tKHNpZ25hYmxlSGV4LCAnaGV4JyksXG4gICAgICBjb21iaW5lZFNpZ1VzaW5nVXRpbCxcbiAgICAgIERrbHNUeXBlcy5nZXRDb21tb25LZXljaGFpbih1c2VyU2hhcmUpLFxuICAgICAgZGVyaXZhdGlvblBhdGgsXG4gICAgICBjcmVhdGVLZWNjYWtIYXNoKCdrZWNjYWsyNTYnKSBhcyBIYXNoXG4gICAgKTtcbiAgICBhc3NlcnQub2soY29udmVydGVkU2lnbmF0dXJlLCAnRVZNIHNpZ25hdHVyZSB3aXRoIHNlcmlhbGl6ZWRUeEhleCBpcyBub3QgdmFsaWQnKTtcbiAgICBjb25zdCBzaWdQYXJ0cyA9IGNvbnZlcnRlZFNpZ25hdHVyZS5zcGxpdCgnOicpO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChzaWdQYXJ0cy5sZW5ndGgsIDQsICdTaWduYXR1cmUgbXVzdCBiZSByZWNpZDpSOlM6cHVia2V5IGZvcm1hdCcpO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChzaWdQYXJ0c1sxXS5sZW5ndGgsIDY0LCAnU2lnbmF0dXJlIFIgbXVzdCBiZSAzMiBieXRlcyBoZXgnKTtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwoc2lnUGFydHNbMl0ubGVuZ3RoLCA2NCwgJ1NpZ25hdHVyZSBTIG11c3QgYmUgMzIgYnl0ZXMgaGV4Jyk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdjcmVhdGVPZmZsaW5lUm91bmQxU2hhcmUgYW5kIGNyZWF0ZU9mZmxpbmVSb3VuZDJTaGFyZSAtIGVuY3J5cHRpb25WZXJzaW9uOiAxIGluIHYxIHBhdGgnLCBhc3luYyAoKSA9PiB7XG4gICAgbGV0IGVjZHNhTVBDdjJVdGlsc1dpdGhTcHk6IEVjZHNhTVBDdjJVdGlscztcbiAgICBsZXQgZW5jcnlwdEFzeW5jU3B5OiBzaW5vbi5TaW5vblN0dWI7XG5cbiAgICBiZWZvcmUoYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgbW9ja0JnID0ge30gYXMgQml0R29CYXNlO1xuICAgICAgbW9ja0JnLmdldEVudiA9IHNpbm9uLnN0dWIoKS5yZXR1cm5zKCd0ZXN0Jyk7XG4gICAgICBjb25zdCBlbmNyeXB0SW1wbCA9IChwYXJhbXM6IHsgcGFzc3dvcmQ6IHN0cmluZzsgaW5wdXQ6IHN0cmluZzsgYWRhdGE/OiBzdHJpbmcgfSkgPT4ge1xuICAgICAgICBjb25zdCBzYWx0ID0gcmFuZG9tQnl0ZXMoOCk7XG4gICAgICAgIGNvbnN0IGl2ID0gcmFuZG9tQnl0ZXMoMTYpO1xuICAgICAgICByZXR1cm4gc2pjbC5lbmNyeXB0KHBhcmFtcy5wYXNzd29yZCwgcGFyYW1zLmlucHV0LCB7XG4gICAgICAgICAgc2FsdDogW2J5dGVzVG9Xb3JkKHNhbHQuc3ViYXJyYXkoMCwgNCkpLCBieXRlc1RvV29yZChzYWx0LnN1YmFycmF5KDQpKV0sXG4gICAgICAgICAgaXY6IFtcbiAgICAgICAgICAgIGJ5dGVzVG9Xb3JkKGl2LnN1YmFycmF5KDAsIDQpKSxcbiAgICAgICAgICAgIGJ5dGVzVG9Xb3JkKGl2LnN1YmFycmF5KDQsIDgpKSxcbiAgICAgICAgICAgIGJ5dGVzVG9Xb3JkKGl2LnN1YmFycmF5KDgsIDEyKSksXG4gICAgICAgICAgICBieXRlc1RvV29yZChpdi5zdWJhcnJheSgxMiwgMTYpKSxcbiAgICAgICAgICBdLFxuICAgICAgICAgIGFkYXRhOiBwYXJhbXMuYWRhdGEsXG4gICAgICAgIH0pO1xuICAgICAgfTtcbiAgICAgIGVuY3J5cHRBc3luY1NweSA9IHNpbm9uLnN0dWIoKS5jYWxsc0Zha2UoYXN5bmMgKHBhcmFtcykgPT4gZW5jcnlwdEltcGwocGFyYW1zKSk7XG4gICAgICBtb2NrQmcuZW5jcnlwdCA9IHNpbm9uLnN0dWIoKS5jYWxsc0Zha2UoZW5jcnlwdEltcGwpO1xuICAgICAgbW9ja0JnLmVuY3J5cHQgPSBlbmNyeXB0QXN5bmNTcHk7XG4gICAgICBtb2NrQmcuZGVjcnlwdCA9IHNpbm9uLnN0dWIoKS5jYWxsc0Zha2UoKHBhcmFtcykgPT4gc2pjbC5kZWNyeXB0KHBhcmFtcy5wYXNzd29yZCwgcGFyYW1zLmlucHV0KSk7XG4gICAgICBtb2NrQmcuZGVjcnlwdCA9IHNpbm9uLnN0dWIoKS5jYWxsc0Zha2UoYXN5bmMgKHBhcmFtcykgPT4gc2pjbC5kZWNyeXB0KHBhcmFtcy5wYXNzd29yZCwgcGFyYW1zLmlucHV0KSk7XG5cbiAgICAgIGNvbnN0IG1vY2tDb2luID0ge30gYXMgSUJhc2VDb2luO1xuICAgICAgbW9ja0NvaW4uZ2V0SGFzaEZ1bmN0aW9uID0gc2lub24uc3R1YigpLmNhbGxzRmFrZSgoKSA9PiBjcmVhdGVLZWNjYWtIYXNoKCdrZWNjYWsyNTYnKSBhcyBIYXNoKTtcbiAgICAgIG1vY2tDb2luLmlzU2lnbmFibGVQcmVIYXNoZWQgPSAodW5zaWduZWRUeCkgPT4gdW5zaWduZWRUeC5zZXJpYWxpemVkVHhIZXg/LnN0YXJ0c1dpdGgoJzAwMDAnKSA/PyBmYWxzZTtcbiAgICAgIGVjZHNhTVBDdjJVdGlsc1dpdGhTcHkgPSBuZXcgRWNkc2FNUEN2MlV0aWxzKG1vY2tCZywgbW9ja0NvaW4pO1xuICAgIH0pO1xuXG4gICAgaXQoJ2NyZWF0ZU9mZmxpbmVSb3VuZDFTaGFyZSB1c2VzIGVuY3J5cHRpb25WZXJzaW9uOiAxIGluIHYxIChub24tdjIgZW52ZWxvcGUpIHBhdGgnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCB0eFJlcXVlc3QgPSB7XG4gICAgICAgIHR4UmVxdWVzdElkOiAncmVxLWlkJyxcbiAgICAgICAgd2FsbGV0SWQ6IHdhbGxldElELFxuICAgICAgICB0cmFuc2FjdGlvbnM6IFt7IHVuc2lnbmVkVHg6IHsgc2lnbmFibGVIZXg6ICdkZWFkYmVlZjAxJywgZGVyaXZhdGlvblBhdGg6ICdtLzAnLCBzZXJpYWxpemVkVHhIZXg6ICcnIH0gfV0sXG4gICAgICAgIGFwaVZlcnNpb246ICdmdWxsJyxcbiAgICAgIH0gYXMgYW55O1xuXG4gICAgICBlbmNyeXB0QXN5bmNTcHkucmVzZXRIaXN0b3J5KCk7XG5cbiAgICAgIGF3YWl0IGVjZHNhTVBDdjJVdGlsc1dpdGhTcHkuY3JlYXRlT2ZmbGluZVJvdW5kMVNoYXJlKHtcbiAgICAgICAgdHhSZXF1ZXN0LFxuICAgICAgICBwcnY6IEJ1ZmZlci5mcm9tKHVzZXJTaGFyZSkudG9TdHJpbmcoJ2Jhc2U2NCcpLFxuICAgICAgICB3YWxsZXRQYXNzcGhyYXNlLFxuICAgICAgICBlbmNyeXB0ZWRQcnY6IHVuZGVmaW5lZCxcbiAgICAgIH0pO1xuXG4gICAgICBhc3NlcnQub2soZW5jcnlwdEFzeW5jU3B5LmNhbGxlZCwgJ2VuY3J5cHQgc2hvdWxkIGJlIGNhbGxlZCBpbiB2MSBwYXRoJyk7XG4gICAgICBmb3IgKGNvbnN0IGNhbGwgb2YgZW5jcnlwdEFzeW5jU3B5LmdldENhbGxzKCkpIHtcbiAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKFxuICAgICAgICAgIGNhbGwuYXJnc1swXS5lbmNyeXB0aW9uVmVyc2lvbixcbiAgICAgICAgICAxLFxuICAgICAgICAgICdlbmNyeXB0aW9uVmVyc2lvbiBzaG91bGQgYmUgaGFyZGNvZGVkIHRvIDEgaW4gdGhlIHYxIHNpZ25pbmcgc2Vzc2lvbiBwYXRoJ1xuICAgICAgICApO1xuICAgICAgfVxuICAgIH0pO1xuICB9KTtcbn0pO1xuXG5mdW5jdGlvbiBieXRlc1RvV29yZChieXRlcz86IFVpbnQ4QXJyYXkgfCBudW1iZXJbXSk6IG51bWJlciB7XG4gIGlmICghKGJ5dGVzIGluc3RhbmNlb2YgVWludDhBcnJheSkgfHwgYnl0ZXMubGVuZ3RoICE9PSA0KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdieXRlcyBtdXN0IGJlIGEgVWludDhBcnJheSB3aXRoIGxlbmd0aCA0Jyk7XG4gIH1cblxuICByZXR1cm4gYnl0ZXMucmVkdWNlKChudW0sIGJ5dGUpID0+IG51bSAqIDB4MTAwICsgYnl0ZSwgMCk7XG59XG5cbmZ1bmN0aW9uIGdldFVzZXJQYXJ0eUdwZ0tleVB1YmxpYyh1c2VyUHViS2V5OiBzdHJpbmcpOiBEa2xzVHlwZXMuUGFydHlHcGdLZXkge1xuICByZXR1cm4ge1xuICAgIHBhcnR5SWQ6IDAsXG4gICAgZ3BnS2V5OiB1c2VyUHViS2V5LFxuICB9O1xufVxuXG5mdW5jdGlvbiBnZXRCaXRHb1BhcnR5R3BnS2V5UHJ2KGJpdGdvUHJ2S2V5OiBzdHJpbmcpOiBEa2xzVHlwZXMuUGFydHlHcGdLZXkge1xuICByZXR1cm4ge1xuICAgIHBhcnR5SWQ6IDIsXG4gICAgZ3BnS2V5OiBiaXRnb1BydktleSxcbiAgfTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gc2lnbkJpdGdvTVBDdjJSb3VuZDEoXG4gIGJpdGdvU2Vzc2lvbjogRGtsc0RzZy5Ec2csXG4gIHR4UmVxdWVzdDogVHhSZXF1ZXN0LFxuICB1c2VyU2hhcmU6IFNpZ25hdHVyZVNoYXJlUmVjb3JkLFxuICB1c2VyR1BHUHViS2V5OiBzdHJpbmdcbik6IFByb21pc2U8VHhSZXF1ZXN0PiB7XG4gIGFzc2VydC5vayhcbiAgICB0eFJlcXVlc3QudHJhbnNhY3Rpb25zICYmIHR4UmVxdWVzdC50cmFuc2FjdGlvbnMubGVuZ3RoID09PSAxLFxuICAgICd0eFJlcXVlc3QudHJhbnNhY3Rpb25zIGlzIG5vdCBhbiBhcnJheSBvZiBsZW5ndGggMSdcbiAgKTtcbiAgdHhSZXF1ZXN0LnRyYW5zYWN0aW9uc1swXS5zaWduYXR1cmVTaGFyZXMucHVzaCh1c2VyU2hhcmUpO1xuICAvLyBEbyB0aGUgYWN0dWFsIHNpZ25pbmcgb24gQml0R28ncyBzaWRlIGJhc2VkIG9uIFVzZXIncyBtZXNzYWdlc1xuICBjb25zdCBzaWduYXR1cmVTaGFyZSA9IEpTT04ucGFyc2UodXNlclNoYXJlLnNoYXJlKSBhcyBNUEN2MlNpZ25hdHVyZVNoYXJlUm91bmQxSW5wdXQ7XG4gIGNvbnN0IGRlc2VyaWFsaXplZE1lc3NhZ2VzID0gRGtsc1R5cGVzLmRlc2VyaWFsaXplTWVzc2FnZXMoe1xuICAgIHAycE1lc3NhZ2VzOiBbXSxcbiAgICBicm9hZGNhc3RNZXNzYWdlczogW1xuICAgICAge1xuICAgICAgICBmcm9tOiBzaWduYXR1cmVTaGFyZS5kYXRhLm1zZzEuZnJvbSxcbiAgICAgICAgcGF5bG9hZDogc2lnbmF0dXJlU2hhcmUuZGF0YS5tc2cxLm1lc3NhZ2UsXG4gICAgICB9LFxuICAgIF0sXG4gIH0pO1xuICBjb25zdCBiaXRnb1RvVXNlclJvdW5kMUJyb2FkY2FzdE1zZyA9IGF3YWl0IGJpdGdvU2Vzc2lvbi5pbml0KCk7XG4gIGNvbnN0IGJpdGdvVG9Vc2VyUm91bmQyTXNnID0gYml0Z29TZXNzaW9uLmhhbmRsZUluY29taW5nTWVzc2FnZXMoe1xuICAgIHAycE1lc3NhZ2VzOiBbXSxcbiAgICBicm9hZGNhc3RNZXNzYWdlczogZGVzZXJpYWxpemVkTWVzc2FnZXMuYnJvYWRjYXN0TWVzc2FnZXMsXG4gIH0pO1xuICBjb25zdCBzZXJpYWxpemVkQml0R29Ub1VzZXJSb3VuZDFBbmQyTXNncyA9IERrbHNUeXBlcy5zZXJpYWxpemVNZXNzYWdlcyh7XG4gICAgcDJwTWVzc2FnZXM6IGJpdGdvVG9Vc2VyUm91bmQyTXNnLnAycE1lc3NhZ2VzLFxuICAgIGJyb2FkY2FzdE1lc3NhZ2VzOiBbYml0Z29Ub1VzZXJSb3VuZDFCcm9hZGNhc3RNc2ddLFxuICB9KTtcblxuICBjb25zdCBhdXRoRW5jTWVzc2FnZXMgPSBhd2FpdCBEa2xzQ29tbXMuZW5jcnlwdEFuZEF1dGhPdXRnb2luZ01lc3NhZ2VzKFxuICAgIHNlcmlhbGl6ZWRCaXRHb1RvVXNlclJvdW5kMUFuZDJNc2dzLFxuICAgIFtnZXRVc2VyUGFydHlHcGdLZXlQdWJsaWModXNlckdQR1B1YktleSldLFxuICAgIFtnZXRCaXRHb1BhcnR5R3BnS2V5UHJ2KGJpdGdvR3BnS2V5LnByaXZhdGUpXVxuICApO1xuXG4gIGNvbnN0IGJpdGdvVG9Vc2VyU2lnbmF0dXJlU2hhcmU6IE1QQ3YyU2lnbmF0dXJlU2hhcmVSb3VuZDFPdXRwdXQgPSB7XG4gICAgdHlwZTogJ3JvdW5kMU91dHB1dCcsXG4gICAgZGF0YToge1xuICAgICAgbXNnMToge1xuICAgICAgICBmcm9tOiBhdXRoRW5jTWVzc2FnZXMuYnJvYWRjYXN0TWVzc2FnZXNbMF0uZnJvbSBhcyBNUEN2MlBhcnR5RnJvbVN0cmluZ09yTnVtYmVyLFxuICAgICAgICBzaWduYXR1cmU6IGF1dGhFbmNNZXNzYWdlcy5icm9hZGNhc3RNZXNzYWdlc1swXS5wYXlsb2FkLnNpZ25hdHVyZSxcbiAgICAgICAgbWVzc2FnZTogYXV0aEVuY01lc3NhZ2VzLmJyb2FkY2FzdE1lc3NhZ2VzWzBdLnBheWxvYWQubWVzc2FnZSxcbiAgICAgIH0sXG4gICAgICBtc2cyOiB7XG4gICAgICAgIGZyb206IGF1dGhFbmNNZXNzYWdlcy5wMnBNZXNzYWdlc1swXS5mcm9tIGFzIE1QQ3YyUGFydHlGcm9tU3RyaW5nT3JOdW1iZXIsXG4gICAgICAgIHRvOiBhdXRoRW5jTWVzc2FnZXMucDJwTWVzc2FnZXNbMF0udG8gYXMgTVBDdjJQYXJ0eUZyb21TdHJpbmdPck51bWJlcixcbiAgICAgICAgZW5jcnlwdGVkTWVzc2FnZTogYXV0aEVuY01lc3NhZ2VzLnAycE1lc3NhZ2VzWzBdLnBheWxvYWQuZW5jcnlwdGVkTWVzc2FnZSxcbiAgICAgICAgc2lnbmF0dXJlOiBhdXRoRW5jTWVzc2FnZXMucDJwTWVzc2FnZXNbMF0ucGF5bG9hZC5zaWduYXR1cmUsXG4gICAgICB9LFxuICAgIH0sXG4gIH07XG4gIHR4UmVxdWVzdC50cmFuc2FjdGlvbnNbMF0uc2lnbmF0dXJlU2hhcmVzLnB1c2goe1xuICAgIGZyb206IFNpZ25hdHVyZVNoYXJlVHlwZS5CSVRHTyxcbiAgICB0bzogU2lnbmF0dXJlU2hhcmVUeXBlLlVTRVIsXG4gICAgc2hhcmU6IEpTT04uc3RyaW5naWZ5KGJpdGdvVG9Vc2VyU2lnbmF0dXJlU2hhcmUpLFxuICB9KTtcbiAgcmV0dXJuIHR4UmVxdWVzdDtcbn1cblxuYXN5bmMgZnVuY3Rpb24gc2lnbkJpdGdvTVBDdjJSb3VuZDIoXG4gIGJpdGdvU2Vzc2lvbjogRGtsc0RzZy5Ec2csXG4gIHR4UmVxdWVzdDogVHhSZXF1ZXN0LFxuICB1c2VyU2hhcmU6IFNpZ25hdHVyZVNoYXJlUmVjb3JkLFxuICB1c2VyR1BHUHViS2V5OiBzdHJpbmdcbik6IFByb21pc2U8eyB0eFJlcXVlc3Q6IFR4UmVxdWVzdDsgYml0Z29Nc2c0OiBEa2xzVHlwZXMuU2VyaWFsaXplZEJyb2FkY2FzdE1lc3NhZ2UgfT4ge1xuICBhc3NlcnQub2soXG4gICAgdHhSZXF1ZXN0LnRyYW5zYWN0aW9ucyAmJiB0eFJlcXVlc3QudHJhbnNhY3Rpb25zLmxlbmd0aCA9PT0gMSxcbiAgICAndHhSZXF1ZXN0LnRyYW5zYWN0aW9ucyBpcyBub3QgYW4gYXJyYXkgb2YgbGVuZ3RoIDEnXG4gICk7XG4gIHR4UmVxdWVzdC50cmFuc2FjdGlvbnNbMF0uc2lnbmF0dXJlU2hhcmVzLnB1c2godXNlclNoYXJlKTtcblxuICAvLyBEbyB0aGUgYWN0dWFsIHNpZ25pbmcgb24gQml0R28ncyBzaWRlIGJhc2VkIG9uIFVzZXIncyBtZXNzYWdlc1xuICBjb25zdCBwYXJzZWRTaWduYXR1cmVTaGFyZSA9IEpTT04ucGFyc2UodXNlclNoYXJlLnNoYXJlKSBhcyBNUEN2MlNpZ25hdHVyZVNoYXJlUm91bmQySW5wdXQ7XG4gIGNvbnN0IHNlcmlhbGl6ZWRNZXNzYWdlcyA9IGF3YWl0IERrbHNDb21tcy5kZWNyeXB0QW5kVmVyaWZ5SW5jb21pbmdNZXNzYWdlcyhcbiAgICB7XG4gICAgICBwMnBNZXNzYWdlczogW1xuICAgICAgICB7XG4gICAgICAgICAgZnJvbTogcGFyc2VkU2lnbmF0dXJlU2hhcmUuZGF0YS5tc2cyLmZyb20sXG4gICAgICAgICAgdG86IHBhcnNlZFNpZ25hdHVyZVNoYXJlLmRhdGEubXNnMi50byxcbiAgICAgICAgICBwYXlsb2FkOiB7XG4gICAgICAgICAgICBlbmNyeXB0ZWRNZXNzYWdlOiBwYXJzZWRTaWduYXR1cmVTaGFyZS5kYXRhLm1zZzIuZW5jcnlwdGVkTWVzc2FnZSxcbiAgICAgICAgICAgIHNpZ25hdHVyZTogcGFyc2VkU2lnbmF0dXJlU2hhcmUuZGF0YS5tc2cyLnNpZ25hdHVyZSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgZnJvbTogcGFyc2VkU2lnbmF0dXJlU2hhcmUuZGF0YS5tc2czLmZyb20sXG4gICAgICAgICAgdG86IHBhcnNlZFNpZ25hdHVyZVNoYXJlLmRhdGEubXNnMy50byxcbiAgICAgICAgICBwYXlsb2FkOiB7XG4gICAgICAgICAgICBlbmNyeXB0ZWRNZXNzYWdlOiBwYXJzZWRTaWduYXR1cmVTaGFyZS5kYXRhLm1zZzMuZW5jcnlwdGVkTWVzc2FnZSxcbiAgICAgICAgICAgIHNpZ25hdHVyZTogcGFyc2VkU2lnbmF0dXJlU2hhcmUuZGF0YS5tc2czLnNpZ25hdHVyZSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICAgIGJyb2FkY2FzdE1lc3NhZ2VzOiBbXSxcbiAgICB9LFxuICAgIFtnZXRVc2VyUGFydHlHcGdLZXlQdWJsaWModXNlckdQR1B1YktleSldLFxuICAgIFtnZXRCaXRHb1BhcnR5R3BnS2V5UHJ2KGJpdGdvR3BnS2V5LnByaXZhdGUpXVxuICApO1xuICBjb25zdCBkZXNlcmlhbGl6ZWRNZXNzYWdlczIgPSBEa2xzVHlwZXMuZGVzZXJpYWxpemVNZXNzYWdlcyh7XG4gICAgcDJwTWVzc2FnZXM6IFtzZXJpYWxpemVkTWVzc2FnZXMucDJwTWVzc2FnZXNbMF1dLFxuICAgIGJyb2FkY2FzdE1lc3NhZ2VzOiBbXSxcbiAgfSk7XG5cbiAgY29uc3QgYml0Z29Ub1VzZXJSb3VuZDNNc2cgPSBiaXRnb1Nlc3Npb24uaGFuZGxlSW5jb21pbmdNZXNzYWdlcyhkZXNlcmlhbGl6ZWRNZXNzYWdlczIpO1xuICBjb25zdCBzZXJpYWxpemVkQml0R29Ub1VzZXJSb3VuZDNNc2dzID0gRGtsc1R5cGVzLnNlcmlhbGl6ZU1lc3NhZ2VzKGJpdGdvVG9Vc2VyUm91bmQzTXNnKTtcblxuICBjb25zdCBhdXRoRW5jTWVzc2FnZXMgPSBhd2FpdCBEa2xzQ29tbXMuZW5jcnlwdEFuZEF1dGhPdXRnb2luZ01lc3NhZ2VzKFxuICAgIHNlcmlhbGl6ZWRCaXRHb1RvVXNlclJvdW5kM01zZ3MsXG4gICAgW2dldFVzZXJQYXJ0eUdwZ0tleVB1YmxpYyh1c2VyR1BHUHViS2V5KV0sXG4gICAgW2dldEJpdEdvUGFydHlHcGdLZXlQcnYoYml0Z29HcGdLZXkucHJpdmF0ZSldXG4gICk7XG5cbiAgY29uc3QgYml0Z29Ub1VzZXJTaWduYXR1cmVTaGFyZTogTVBDdjJTaWduYXR1cmVTaGFyZVJvdW5kMk91dHB1dCA9IHtcbiAgICB0eXBlOiAncm91bmQyT3V0cHV0JyxcbiAgICBkYXRhOiB7XG4gICAgICBtc2czOiB7XG4gICAgICAgIGZyb206IGF1dGhFbmNNZXNzYWdlcy5wMnBNZXNzYWdlc1swXS5mcm9tIGFzIE1QQ3YyUGFydHlGcm9tU3RyaW5nT3JOdW1iZXIsXG4gICAgICAgIHRvOiBhdXRoRW5jTWVzc2FnZXMucDJwTWVzc2FnZXNbMF0udG8gYXMgTVBDdjJQYXJ0eUZyb21TdHJpbmdPck51bWJlcixcbiAgICAgICAgZW5jcnlwdGVkTWVzc2FnZTogYXV0aEVuY01lc3NhZ2VzLnAycE1lc3NhZ2VzWzBdLnBheWxvYWQuZW5jcnlwdGVkTWVzc2FnZSxcbiAgICAgICAgc2lnbmF0dXJlOiBhdXRoRW5jTWVzc2FnZXMucDJwTWVzc2FnZXNbMF0ucGF5bG9hZC5zaWduYXR1cmUsXG4gICAgICB9LFxuICAgIH0sXG4gIH07XG5cbiAgLy8gaGFuZGxpbmcgdXNlciBtc2czIGJ1dCBub3QgcmV0dXJuaW5nIGJpdGdvIG1zZzQgc2luY2UgaXRzIHN0b3JlZCBvbiBiaXRnbyBzaWRlIG9ubHlcbiAgY29uc3QgZGVzZXJpYWxpemVkTWVzc2FnZXMzID0gRGtsc1R5cGVzLmRlc2VyaWFsaXplTWVzc2FnZXMoe1xuICAgIHAycE1lc3NhZ2VzOiBbc2VyaWFsaXplZE1lc3NhZ2VzLnAycE1lc3NhZ2VzWzFdXSxcbiAgICBicm9hZGNhc3RNZXNzYWdlczogW10sXG4gIH0pO1xuICBjb25zdCBkZXNlcmlhbGl6ZWRCaXRnb01zZzQgPSBiaXRnb1Nlc3Npb24uaGFuZGxlSW5jb21pbmdNZXNzYWdlcyhkZXNlcmlhbGl6ZWRNZXNzYWdlczMpO1xuICBjb25zdCBzZXJpYWxpemVkQml0R29Ub1VzZXJSb3VuZDRNc2dzID0gRGtsc1R5cGVzLnNlcmlhbGl6ZU1lc3NhZ2VzKGRlc2VyaWFsaXplZEJpdGdvTXNnNCk7XG5cbiAgdHhSZXF1ZXN0LnRyYW5zYWN0aW9uc1swXS5zaWduYXR1cmVTaGFyZXMucHVzaCh7XG4gICAgZnJvbTogU2lnbmF0dXJlU2hhcmVUeXBlLkJJVEdPLFxuICAgIHRvOiBTaWduYXR1cmVTaGFyZVR5cGUuVVNFUixcbiAgICBzaGFyZTogSlNPTi5zdHJpbmdpZnkoYml0Z29Ub1VzZXJTaWduYXR1cmVTaGFyZSksXG4gIH0pO1xuICByZXR1cm4geyB0eFJlcXVlc3QsIGJpdGdvTXNnNDogc2VyaWFsaXplZEJpdEdvVG9Vc2VyUm91bmQ0TXNncy5icm9hZGNhc3RNZXNzYWdlc1swXSB9O1xufVxuXG5hc3luYyBmdW5jdGlvbiBzaWduQml0Z29NUEN2MlJvdW5kMyhcbiAgYml0Z29TZXNzaW9uOiBEa2xzRHNnLkRzZyxcbiAgdXNlclNoYXJlOiBTaWduYXR1cmVTaGFyZVJlY29yZCxcbiAgdXNlckdQR1B1YktleTogc3RyaW5nXG4pOiBQcm9taXNlPHsgdXNlck1zZzQ6IE1QQ3YyU2lnbmF0dXJlU2hhcmVSb3VuZDNJbnB1dCB9PiB7XG4gIGNvbnN0IHBhcnNlZFNpZ25hdHVyZVNoYXJlID0gSlNPTi5wYXJzZSh1c2VyU2hhcmUuc2hhcmUpIGFzIE1QQ3YyU2lnbmF0dXJlU2hhcmVSb3VuZDNJbnB1dDtcbiAgY29uc3QgbXNnNCA9IHBhcnNlZFNpZ25hdHVyZVNoYXJlLmRhdGEubXNnNDtcbiAgY29uc3Qgc2lnbmF0dXJlUkF1dGhNZXNzYWdlID1cbiAgICBtc2c0LnNpZ25hdHVyZVIgJiYgbXNnNC5zaWduYXR1cmVSU2lnbmF0dXJlXG4gICAgICA/IHsgbWVzc2FnZTogbXNnNC5zaWduYXR1cmVSLCBzaWduYXR1cmU6IG1zZzQuc2lnbmF0dXJlUlNpZ25hdHVyZSB9XG4gICAgICA6IHVuZGVmaW5lZDtcbiAgY29uc3Qgc2VyaWFsaXplZE1lc3NhZ2VzID0gYXdhaXQgRGtsc0NvbW1zLmRlY3J5cHRBbmRWZXJpZnlJbmNvbWluZ01lc3NhZ2VzKFxuICAgIHtcbiAgICAgIHAycE1lc3NhZ2VzOiBbXSxcbiAgICAgIGJyb2FkY2FzdE1lc3NhZ2VzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBmcm9tOiBtc2c0LmZyb20sXG4gICAgICAgICAgcGF5bG9hZDoge1xuICAgICAgICAgICAgbWVzc2FnZTogbXNnNC5tZXNzYWdlLFxuICAgICAgICAgICAgc2lnbmF0dXJlOiBtc2c0LnNpZ25hdHVyZSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHNpZ25hdHVyZVI6IHNpZ25hdHVyZVJBdXRoTWVzc2FnZSxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfSxcbiAgICBbZ2V0VXNlclBhcnR5R3BnS2V5UHVibGljKHVzZXJHUEdQdWJLZXkpXSxcbiAgICBbZ2V0Qml0R29QYXJ0eUdwZ0tleVBydihiaXRnb0dwZ0tleS5wcml2YXRlKV1cbiAgKTtcbiAgY29uc3QgZGVzZXJpYWxpemVkTWVzc2FnZXMgPSBEa2xzVHlwZXMuZGVzZXJpYWxpemVNZXNzYWdlcyh7XG4gICAgcDJwTWVzc2FnZXM6IFtdLFxuICAgIGJyb2FkY2FzdE1lc3NhZ2VzOiBbc2VyaWFsaXplZE1lc3NhZ2VzLmJyb2FkY2FzdE1lc3NhZ2VzWzBdXSxcbiAgfSk7XG4gIGJpdGdvU2Vzc2lvbi5oYW5kbGVJbmNvbWluZ01lc3NhZ2VzKGRlc2VyaWFsaXplZE1lc3NhZ2VzKTtcblxuICByZXR1cm4ge1xuICAgIHVzZXJNc2c0OiBwYXJzZWRTaWduYXR1cmVTaGFyZSxcbiAgfTtcbn1cblxuZGVzY3JpYmUoJ0VjZHNhTVBDdjJVdGlscy5jcmVhdGVLZXljaGFpbnNXaXRoRXh0ZXJuYWxTaWduZXInLCBmdW5jdGlvbiAoKSB7XG4gIGxldCB1dGlsczogRWNkc2FNUEN2MlV0aWxzO1xuICBsZXQgY2FsbGJhY2tzOiBFY2RzYU1QQ3YyS2V5R2VuQ2FsbGJhY2tzO1xuICBjb25zdCBlbnRlcnByaXNlID0gJ2VudGVycHJpc2UtaWQnO1xuICBjb25zdCBzZXNzaW9uSWQgPSAnc2Vzc2lvbi0wMDEnO1xuICBjb25zdCBjb21tb25LZXljaGFpbiA9ICdjb21tb24ta2V5Y2hhaW4tYWJjJztcblxuICBjb25zdCBlbXB0eU1lc3NhZ2VzOiBEa2xzVHlwZXMuQXV0aEVuY01lc3NhZ2VzID0geyBicm9hZGNhc3RNZXNzYWdlczogW10sIHAycE1lc3NhZ2VzOiBbXSB9O1xuICBjb25zdCB1c2VyU3RhdGUgPSB7IGVuY3J5cHRlZERhdGE6ICd1LWRhdGEnLCBlbmNyeXB0ZWREYXRhS2V5OiAndS1kYXRhLWtleScgfTtcbiAgY29uc3QgYmFja3VwU3RhdGUgPSB7IGVuY3J5cHRlZERhdGE6ICdiLWRhdGEnLCBlbmNyeXB0ZWREYXRhS2V5OiAnYi1kYXRhLWtleScgfTtcbiAgY29uc3QgYml0Z29Nc2cxOiBNUEN2MkJyb2FkY2FzdE1lc3NhZ2UgPSB7IGZyb206IDIsIG1lc3NhZ2U6ICdtc2cxJywgc2lnbmF0dXJlOiAnc2lnMScgfTtcbiAgY29uc3QgYml0Z29Ub1VzZXJNc2cyOiBNUEN2MlAyUE1lc3NhZ2UgPSB7IGZyb206IDIsIHRvOiAwLCBlbmNyeXB0ZWRNZXNzYWdlOiAndTInLCBzaWduYXR1cmU6ICdzdTInIH07XG4gIGNvbnN0IGJpdGdvVG9CYWNrdXBNc2cyOiBNUEN2MlAyUE1lc3NhZ2UgPSB7IGZyb206IDIsIHRvOiAxLCBlbmNyeXB0ZWRNZXNzYWdlOiAnYjInLCBzaWduYXR1cmU6ICdzYjInIH07XG4gIGNvbnN0IGJpdGdvVG9Vc2VyTXNnMzogTVBDdjJQMlBNZXNzYWdlID0geyBmcm9tOiAyLCB0bzogMCwgZW5jcnlwdGVkTWVzc2FnZTogJ3UzJywgc2lnbmF0dXJlOiAnc3UzJyB9O1xuICBjb25zdCBiaXRnb1RvQmFja3VwTXNnMzogTVBDdjJQMlBNZXNzYWdlID0geyBmcm9tOiAyLCB0bzogMSwgZW5jcnlwdGVkTWVzc2FnZTogJ2IzJywgc2lnbmF0dXJlOiAnc2IzJyB9O1xuICBjb25zdCBiaXRnb01zZzQ6IE1QQ3YyQnJvYWRjYXN0TWVzc2FnZSA9IHsgZnJvbTogMiwgbWVzc2FnZTogJ21zZzQnLCBzaWduYXR1cmU6ICdzaWc0JyB9O1xuXG4gIGJlZm9yZUVhY2goZnVuY3Rpb24gKCkge1xuICAgIGNhbGxiYWNrcyA9IHtcbiAgICAgIGluaXRpYWxpemVDYWxsYmFjazogc2lub24uc3R1YigpLnJlc29sdmVzKHtcbiAgICAgICAgdXNlckdwZ1B1YmxpY0tleTogJ3VzZXItZ3BnLXB1YicsXG4gICAgICAgIGJhY2t1cEdwZ1B1YmxpY0tleTogJ2JhY2t1cC1ncGctcHViJyxcbiAgICAgICAgcm91bmQxTWVzc2FnZXM6IGVtcHR5TWVzc2FnZXMsXG4gICAgICAgIHVzZXJTdGF0ZSxcbiAgICAgICAgYmFja3VwU3RhdGUsXG4gICAgICB9KSxcbiAgICAgIHJvdW5kMkNhbGxiYWNrOiBzaW5vbi5zdHViKCkucmVzb2x2ZXMoeyByb3VuZDJNZXNzYWdlczogZW1wdHlNZXNzYWdlcywgdXNlclN0YXRlLCBiYWNrdXBTdGF0ZSB9KSxcbiAgICAgIHJvdW5kM0NhbGxiYWNrOiBzaW5vbi5zdHViKCkucmVzb2x2ZXMoeyByb3VuZDNNZXNzYWdlczogZW1wdHlNZXNzYWdlcywgdXNlclN0YXRlLCBiYWNrdXBTdGF0ZSB9KSxcbiAgICAgIGZpbmFsaXplQ2FsbGJhY2s6IHNpbm9uLnN0dWIoKS5yZXNvbHZlcyh7IGNvbW1vbktleWNoYWluIH0pLFxuICAgIH07XG5cbiAgICBjb25zdCBtb2NrQml0R28gPSB7XG4gICAgICBnZXRFbnY6IHNpbm9uLnN0dWIoKS5yZXR1cm5zKCdkZXYnKSxcbiAgICB9IGFzIGFueTtcblxuICAgIGNvbnN0IG1vY2tLZXljaGFpbnMgPSB7XG4gICAgICBhZGQ6IHNpbm9uXG4gICAgICAgIC5zdHViKClcbiAgICAgICAgLmNhbGxzRmFrZSgocGFyYW1zOiBhbnkpID0+IFByb21pc2UucmVzb2x2ZSh7IGlkOiBgJHtwYXJhbXMuc291cmNlfS1rZXktaWRgLCBjb21tb25LZXljaGFpbiwgaXNNUEN2MjogdHJ1ZSB9KSksXG4gICAgICBjcmVhdGVCaXRHbzogc2lub24uc3R1YigpLnJlc29sdmVzKHsgaWQ6ICdiaXRnby1rZXktaWQnLCBjb21tb25LZXljaGFpbiwgaXNNUEN2MjogdHJ1ZSB9KSxcbiAgICB9O1xuXG4gICAgY29uc3QgbW9ja0NvaW4gPSB7XG4gICAgICBrZXljaGFpbnM6IHNpbm9uLnN0dWIoKS5yZXR1cm5zKG1vY2tLZXljaGFpbnMpLFxuICAgIH0gYXMgYW55O1xuXG4gICAgdXRpbHMgPSBuZXcgRWNkc2FNUEN2MlV0aWxzKG1vY2tCaXRHbywgbW9ja0NvaW4pO1xuXG4gICAgc2lub24uc3R1Yih1dGlscywgJ2dldEJpdGdvR3BnUHVia2V5QmFzZWRPbkZlYXR1cmVGbGFncycgYXMgYW55KS5yZXNvbHZlcyh7IG1wY3YyUHVibGljS2V5OiBudWxsIH0pO1xuICAgICh1dGlscyBhcyBhbnkpLmJpdGdvTVBDdjJQdWJsaWNHcGdLZXkgPSB7IGFybW9yOiAoKSA9PiAnLS0tLS1CRUdJTiBQR1AgUFVCTElDIEtFWSBCTE9DSy0tLS0tXFxuJyB9O1xuXG4gICAgc2lub24uc3R1Yih1dGlscywgJ3NlbmRLZXlHZW5lcmF0aW9uUm91bmQxJykucmVzb2x2ZXMoe1xuICAgICAgc2Vzc2lvbklkOiBzZXNzaW9uSWQgYXMgYW55LFxuICAgICAgd2FsbGV0R3BnUHViS2V5U2lnczogJ3NpZ3MnIGFzIGFueSxcbiAgICAgIGJpdGdvTXNnMSxcbiAgICAgIGJpdGdvVG9Vc2VyTXNnMixcbiAgICAgIGJpdGdvVG9CYWNrdXBNc2cyLFxuICAgIH0pO1xuICAgIHNpbm9uLnN0dWIodXRpbHMsICdzZW5kS2V5R2VuZXJhdGlvblJvdW5kMicpLnJlc29sdmVzKHtcbiAgICAgIHNlc3Npb25JZDogc2Vzc2lvbklkIGFzIGFueSxcbiAgICAgIGJpdGdvQ29tbWl0bWVudDI6ICdjb21taXRtZW50MicgYXMgYW55LFxuICAgICAgYml0Z29Ub1VzZXJNc2czLFxuICAgICAgYml0Z29Ub0JhY2t1cE1zZzMsXG4gICAgfSk7XG4gICAgc2lub24uc3R1Yih1dGlscywgJ3NlbmRLZXlHZW5lcmF0aW9uUm91bmQzJykucmVzb2x2ZXMoe1xuICAgICAgc2Vzc2lvbklkOiBzZXNzaW9uSWQgYXMgYW55LFxuICAgICAgYml0Z29Nc2c0LFxuICAgICAgY29tbW9uS2V5Y2hhaW46IGNvbW1vbktleWNoYWluIGFzIGFueSxcbiAgICB9KTtcbiAgICBzaW5vbi5zdHViKHV0aWxzIGFzIGFueSwgJ2FkZEJpdGdvS2V5Y2hhaW4nKS5yZXNvbHZlcyh7IGlkOiAnYml0Z28ta2V5LWlkJywgY29tbW9uS2V5Y2hhaW4sIGlzTVBDdjI6IHRydWUgfSk7XG4gIH0pO1xuXG4gIGFmdGVyRWFjaChmdW5jdGlvbiAoKSB7XG4gICAgc2lub24ucmVzdG9yZSgpO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIGludm9rZSBjYWxsYmFja3MgaW4gb3JkZXIgYW5kIHJldHVybiBrZXljaGFpbnMnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3Qga2V5Y2hhaW5zID0gYXdhaXQgdXRpbHMuY3JlYXRlS2V5Y2hhaW5zV2l0aEV4dGVybmFsU2lnbmVyKHsgZW50ZXJwcmlzZSwgY2FsbGJhY2tzIH0pO1xuXG4gICAgYXNzZXJ0Lm9rKGtleWNoYWlucy51c2VyS2V5Y2hhaW4pO1xuICAgIGFzc2VydC5vayhrZXljaGFpbnMuYmFja3VwS2V5Y2hhaW4pO1xuICAgIGFzc2VydC5vayhrZXljaGFpbnMuYml0Z29LZXljaGFpbik7XG5cbiAgICBzaW5vbi5hc3NlcnQuY2FsbGVkT25jZShjYWxsYmFja3MuaW5pdGlhbGl6ZUNhbGxiYWNrIGFzIHNpbm9uLlNpbm9uU3R1Yik7XG4gICAgc2lub24uYXNzZXJ0LmNhbGxlZE9uY2UoY2FsbGJhY2tzLnJvdW5kMkNhbGxiYWNrIGFzIHNpbm9uLlNpbm9uU3R1Yik7XG4gICAgc2lub24uYXNzZXJ0LmNhbGxlZE9uY2UoY2FsbGJhY2tzLnJvdW5kM0NhbGxiYWNrIGFzIHNpbm9uLlNpbm9uU3R1Yik7XG4gICAgc2lub24uYXNzZXJ0LmNhbGxlZE9uY2UoY2FsbGJhY2tzLmZpbmFsaXplQ2FsbGJhY2sgYXMgc2lub24uU2lub25TdHViKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBwYXNzIHJvdW5kMSByZXNwb25zZSBhbmQgc3RhdGUgdG8gcm91bmQyQ2FsbGJhY2snLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgYXdhaXQgdXRpbHMuY3JlYXRlS2V5Y2hhaW5zV2l0aEV4dGVybmFsU2lnbmVyKHsgZW50ZXJwcmlzZSwgY2FsbGJhY2tzIH0pO1xuXG4gICAgY29uc3Qgcm91bmQyQXJncyA9IChjYWxsYmFja3Mucm91bmQyQ2FsbGJhY2sgYXMgc2lub24uU2lub25TdHViKS5maXJzdENhbGwuYXJnc1swXTtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwocm91bmQyQXJncy5zZXNzaW9uSWQsIHNlc3Npb25JZCk7XG4gICAgYXNzZXJ0LmRlZXBTdHJpY3RFcXVhbChyb3VuZDJBcmdzLmJpdGdvTXNnMSwgYml0Z29Nc2cxKTtcbiAgICBhc3NlcnQuZGVlcFN0cmljdEVxdWFsKHJvdW5kMkFyZ3MuYml0Z29Ub1VzZXJNc2cyLCBiaXRnb1RvVXNlck1zZzIpO1xuICAgIGFzc2VydC5kZWVwU3RyaWN0RXF1YWwocm91bmQyQXJncy5iaXRnb1RvQmFja3VwTXNnMiwgYml0Z29Ub0JhY2t1cE1zZzIpO1xuICAgIGFzc2VydC5kZWVwU3RyaWN0RXF1YWwocm91bmQyQXJncy51c2VyU3RhdGUsIHVzZXJTdGF0ZSk7XG4gICAgYXNzZXJ0LmRlZXBTdHJpY3RFcXVhbChyb3VuZDJBcmdzLmJhY2t1cFN0YXRlLCBiYWNrdXBTdGF0ZSk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgcGFzcyByb3VuZDIgcmVzcG9uc2UgYW5kIHRocmVhZGVkIHN0YXRlIHRvIHJvdW5kM0NhbGxiYWNrJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIGF3YWl0IHV0aWxzLmNyZWF0ZUtleWNoYWluc1dpdGhFeHRlcm5hbFNpZ25lcih7IGVudGVycHJpc2UsIGNhbGxiYWNrcyB9KTtcblxuICAgIGNvbnN0IHJvdW5kM0FyZ3MgPSAoY2FsbGJhY2tzLnJvdW5kM0NhbGxiYWNrIGFzIHNpbm9uLlNpbm9uU3R1YikuZmlyc3RDYWxsLmFyZ3NbMF07XG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKHJvdW5kM0FyZ3Muc2Vzc2lvbklkLCBzZXNzaW9uSWQpO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChyb3VuZDNBcmdzLmJpdGdvQ29tbWl0bWVudDIsICdjb21taXRtZW50MicpO1xuICAgIGFzc2VydC5kZWVwU3RyaWN0RXF1YWwocm91bmQzQXJncy5iaXRnb1RvVXNlck1zZzMsIGJpdGdvVG9Vc2VyTXNnMyk7XG4gICAgYXNzZXJ0LmRlZXBTdHJpY3RFcXVhbChyb3VuZDNBcmdzLmJpdGdvVG9CYWNrdXBNc2czLCBiaXRnb1RvQmFja3VwTXNnMyk7XG4gICAgYXNzZXJ0LmRlZXBTdHJpY3RFcXVhbChyb3VuZDNBcmdzLnVzZXJTdGF0ZSwgdXNlclN0YXRlKTtcbiAgICBhc3NlcnQuZGVlcFN0cmljdEVxdWFsKHJvdW5kM0FyZ3MuYmFja3VwU3RhdGUsIGJhY2t1cFN0YXRlKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCBwYXNzIHJvdW5kMyByZXNwb25zZSBhbmQgYml0Z29Db21tb25LZXljaGFpbiB0byBmaW5hbGl6ZUNhbGxiYWNrJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIGF3YWl0IHV0aWxzLmNyZWF0ZUtleWNoYWluc1dpdGhFeHRlcm5hbFNpZ25lcih7IGVudGVycHJpc2UsIGNhbGxiYWNrcyB9KTtcblxuICAgIGNvbnN0IGZpbmFsaXplQXJncyA9IChjYWxsYmFja3MuZmluYWxpemVDYWxsYmFjayBhcyBzaW5vbi5TaW5vblN0dWIpLmZpcnN0Q2FsbC5hcmdzWzBdO1xuICAgIGFzc2VydC5zdHJpY3RFcXVhbChmaW5hbGl6ZUFyZ3Muc2Vzc2lvbklkLCBzZXNzaW9uSWQpO1xuICAgIGFzc2VydC5kZWVwU3RyaWN0RXF1YWwoZmluYWxpemVBcmdzLmJpdGdvTXNnNCwgYml0Z29Nc2c0KTtcbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwoZmluYWxpemVBcmdzLmJpdGdvQ29tbW9uS2V5Y2hhaW4sIGNvbW1vbktleWNoYWluKTtcbiAgICBhc3NlcnQuZGVlcFN0cmljdEVxdWFsKGZpbmFsaXplQXJncy51c2VyU3RhdGUsIHVzZXJTdGF0ZSk7XG4gICAgYXNzZXJ0LmRlZXBTdHJpY3RFcXVhbChmaW5hbGl6ZUFyZ3MuYmFja3VwU3RhdGUsIGJhY2t1cFN0YXRlKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCByZWplY3Qgd2hlbiBmaW5hbGl6ZUNhbGxiYWNrIHJldHVybnMgbWlzbWF0Y2hlZCBjb21tb25LZXljaGFpbicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAoY2FsbGJhY2tzLmZpbmFsaXplQ2FsbGJhY2sgYXMgc2lub24uU2lub25TdHViKS5yZXNvbHZlcyh7IGNvbW1vbktleWNoYWluOiAnZGlmZmVyZW50LWtleWNoYWluJyB9KTtcblxuICAgIGF3YWl0IGFzc2VydC5yZWplY3RzKFxuICAgICAgKCkgPT4gdXRpbHMuY3JlYXRlS2V5Y2hhaW5zV2l0aEV4dGVybmFsU2lnbmVyKHsgZW50ZXJwcmlzZSwgY2FsbGJhY2tzIH0pLFxuICAgICAgL0NvbW1vbiBrZXljaGFpbnMgZG8gbm90IG1hdGNoL1xuICAgICk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgcmVqZWN0IHdoZW4gcm91bmQyIHJldHVybnMgbWlzbWF0Y2hlZCBzZXNzaW9uSWQnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgKHV0aWxzLnNlbmRLZXlHZW5lcmF0aW9uUm91bmQyIGFzIHNpbm9uLlNpbm9uU3R1YikucmVzb2x2ZXMoe1xuICAgICAgc2Vzc2lvbklkOiAnZGlmZmVyZW50LXNlc3Npb24nIGFzIGFueSxcbiAgICAgIGJpdGdvQ29tbWl0bWVudDI6ICdjb21taXRtZW50MicgYXMgYW55LFxuICAgICAgYml0Z29Ub1VzZXJNc2czLFxuICAgICAgYml0Z29Ub0JhY2t1cE1zZzMsXG4gICAgfSk7XG5cbiAgICBhd2FpdCBhc3NlcnQucmVqZWN0cyhcbiAgICAgICgpID0+IHV0aWxzLmNyZWF0ZUtleWNoYWluc1dpdGhFeHRlcm5hbFNpZ25lcih7IGVudGVycHJpc2UsIGNhbGxiYWNrcyB9KSxcbiAgICAgIC9TZXNzaW9uIElEIG1pc21hdGNoIGFmdGVyIHJvdW5kIDIvXG4gICAgKTtcbiAgfSk7XG59KTtcbiJdfQ==
|