@bitgo-beta/sdk-core 8.2.1-beta.1891 → 8.2.1-beta.1892
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/src/bitgo/baseCoin/baseCoin.d.ts +1 -3
- package/dist/src/bitgo/baseCoin/baseCoin.d.ts.map +1 -1
- package/dist/src/bitgo/baseCoin/baseCoin.js +3 -17
- package/dist/src/bitgo/baseCoin/iBaseCoin.d.ts +1 -2
- package/dist/src/bitgo/baseCoin/iBaseCoin.d.ts.map +1 -1
- package/dist/src/bitgo/baseCoin/iBaseCoin.js +1 -1
- package/dist/src/bitgo/bitgoBase.d.ts +3 -6
- package/dist/src/bitgo/bitgoBase.d.ts.map +1 -1
- package/dist/src/bitgo/bitgoBase.js +1 -1
- package/dist/src/bitgo/internal/keycard.d.ts +9 -18
- package/dist/src/bitgo/internal/keycard.d.ts.map +1 -1
- package/dist/src/bitgo/internal/keycard.js +8 -56
- package/dist/src/bitgo/keychain/decryptKeychain.d.ts +2 -12
- package/dist/src/bitgo/keychain/decryptKeychain.d.ts.map +1 -1
- package/dist/src/bitgo/keychain/decryptKeychain.js +6 -37
- package/dist/src/bitgo/keychain/iKeychains.d.ts +1 -2
- package/dist/src/bitgo/keychain/iKeychains.d.ts.map +1 -1
- package/dist/src/bitgo/keychain/iKeychains.js +1 -1
- package/dist/src/bitgo/keychain/keychains.d.ts +1 -12
- package/dist/src/bitgo/keychain/keychains.d.ts.map +1 -1
- package/dist/src/bitgo/keychain/keychains.js +16 -44
- package/dist/src/bitgo/recovery/initiate.d.ts +2 -15
- package/dist/src/bitgo/recovery/initiate.d.ts.map +1 -1
- package/dist/src/bitgo/recovery/initiate.js +7 -47
- package/dist/src/bitgo/trading/tradingAccount.js +2 -2
- package/dist/src/bitgo/utils/tss/baseTSSUtils.d.ts.map +1 -1
- package/dist/src/bitgo/utils/tss/baseTSSUtils.js +5 -5
- package/dist/src/bitgo/utils/tss/ecdsa/ecdsa.js +7 -7
- package/dist/src/bitgo/utils/tss/ecdsa/ecdsaMPCv2.d.ts +4 -8
- package/dist/src/bitgo/utils/tss/ecdsa/ecdsaMPCv2.d.ts.map +1 -1
- package/dist/src/bitgo/utils/tss/ecdsa/ecdsaMPCv2.js +20 -103
- package/dist/src/bitgo/utils/tss/eddsa/eddsa.d.ts.map +1 -1
- package/dist/src/bitgo/utils/tss/eddsa/eddsa.js +9 -18
- package/dist/src/bitgo/utils/tss/eddsa/eddsaMPCv2.d.ts +1 -1
- package/dist/src/bitgo/utils/tss/eddsa/eddsaMPCv2.d.ts.map +1 -1
- package/dist/src/bitgo/utils/tss/eddsa/eddsaMPCv2.js +18 -37
- package/dist/src/bitgo/wallet/iWallet.d.ts +2 -4
- package/dist/src/bitgo/wallet/iWallet.d.ts.map +1 -1
- package/dist/src/bitgo/wallet/iWallet.js +1 -1
- package/dist/src/bitgo/wallet/wallet.d.ts +8 -21
- package/dist/src/bitgo/wallet/wallet.d.ts.map +1 -1
- package/dist/src/bitgo/wallet/wallet.js +23 -112
- package/dist/src/bitgo/wallet/wallets.js +24 -24
- package/dist/test/unit/bitgo/recovery/initiate.js +18 -89
- package/dist/test/unit/bitgo/trading/tradingAccount.js +5 -5
- package/dist/test/unit/bitgo/utils/tss/baseTSSUtils.js +14 -14
- package/dist/test/unit/bitgo/utils/tss/ecdsa/ecdsaMPCv2.js +10 -10
- package/dist/test/unit/bitgo/utils/tss/eddsa/eddsaMPCv2.js +20 -51
- package/dist/test/unit/bitgo/wallet/ofcWalletSignTransaction.js +4 -4
- package/dist/test/unit/bitgo/wallet/walletsEncryptionVersion.js +16 -16
- package/dist/test/unit/bitgo/wallet/walletsWebauthn.js +2 -5
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +8 -8
|
@@ -98,11 +98,11 @@ describe('Base TSS Utils', function () {
|
|
|
98
98
|
mockBg.encrypt = sinon
|
|
99
99
|
.stub()
|
|
100
100
|
.callsFake((params) => encryptWithSjcl(params.password ?? '', params.input, params.adata));
|
|
101
|
-
mockBg.
|
|
101
|
+
mockBg.encrypt = sinon
|
|
102
102
|
.stub()
|
|
103
103
|
.callsFake(async (params) => encryptWithSjcl(params.password ?? '', params.input, params.adata));
|
|
104
104
|
mockBg.decrypt = sinon.stub().callsFake((params) => sjcl.decrypt(params.password ?? '', params.input));
|
|
105
|
-
mockBg.
|
|
105
|
+
mockBg.decrypt = decryptAsyncStub;
|
|
106
106
|
mockBitgo = mockBg;
|
|
107
107
|
const mockCoin = {};
|
|
108
108
|
mockCoin.getHashFunction = sinon.stub().callsFake(() => (0, keccak_1.default)('keccak256'));
|
|
@@ -157,22 +157,22 @@ describe('Base TSS Utils', function () {
|
|
|
157
157
|
});
|
|
158
158
|
});
|
|
159
159
|
describe('validateAdata', function () {
|
|
160
|
-
it('passes when adata matches with domain separator', function () {
|
|
160
|
+
it('passes when adata matches with domain separator', async function () {
|
|
161
161
|
const adata = 'test-value';
|
|
162
|
-
const cyphertext = mockBitgo.encrypt({
|
|
162
|
+
const cyphertext = await mockBitgo.encrypt({
|
|
163
163
|
input: 'secret',
|
|
164
164
|
password: walletPassphrase,
|
|
165
165
|
adata: `${roundOneDomainSeparator}:${adata}`,
|
|
166
166
|
});
|
|
167
167
|
assert.doesNotThrow(() => baseTssUtils.validateAdataForTest(adata, cyphertext, roundOneDomainSeparator));
|
|
168
168
|
});
|
|
169
|
-
it('passes when adata matches without domain separator', function () {
|
|
169
|
+
it('passes when adata matches without domain separator', async function () {
|
|
170
170
|
const adata = 'test-value';
|
|
171
|
-
const cyphertext = mockBitgo.encrypt({ input: 'secret', password: walletPassphrase, adata });
|
|
171
|
+
const cyphertext = await mockBitgo.encrypt({ input: 'secret', password: walletPassphrase, adata });
|
|
172
172
|
assert.doesNotThrow(() => baseTssUtils.validateAdataForTest(adata, cyphertext, roundOneDomainSeparator));
|
|
173
173
|
});
|
|
174
|
-
it('throws when adata does not match', function () {
|
|
175
|
-
const cyphertext = mockBitgo.encrypt({
|
|
174
|
+
it('throws when adata does not match', async function () {
|
|
175
|
+
const cyphertext = await mockBitgo.encrypt({
|
|
176
176
|
input: 'secret',
|
|
177
177
|
password: walletPassphrase,
|
|
178
178
|
adata: `${roundOneDomainSeparator}:correct`,
|
|
@@ -185,7 +185,7 @@ describe('Base TSS Utils', function () {
|
|
|
185
185
|
});
|
|
186
186
|
describe('getBitgoAndUserGpgKeys', function () {
|
|
187
187
|
it('decrypts v1 SJCL envelope without adata and skips validation', async function () {
|
|
188
|
-
const encryptedUserGpgPrvKey = mockBitgo.encrypt({
|
|
188
|
+
const encryptedUserGpgPrvKey = await mockBitgo.encrypt({
|
|
189
189
|
input: userGpgKeyPair.privateKey,
|
|
190
190
|
password: walletPassphrase,
|
|
191
191
|
});
|
|
@@ -195,7 +195,7 @@ describe('Base TSS Utils', function () {
|
|
|
195
195
|
});
|
|
196
196
|
it('decrypts v1 SJCL envelope with matching adata', async function () {
|
|
197
197
|
const adata = 'test-adata';
|
|
198
|
-
const encryptedUserGpgPrvKey = mockBitgo.encrypt({
|
|
198
|
+
const encryptedUserGpgPrvKey = await mockBitgo.encrypt({
|
|
199
199
|
input: userGpgKeyPair.privateKey,
|
|
200
200
|
password: walletPassphrase,
|
|
201
201
|
adata: `${signingUserGpgKeyDomainSeparator}:${adata}`,
|
|
@@ -204,9 +204,9 @@ describe('Base TSS Utils', function () {
|
|
|
204
204
|
assert.ok(result.bitgoGpgKey);
|
|
205
205
|
assert.equal(result.userGpgPrvKey.isPrivate(), true);
|
|
206
206
|
});
|
|
207
|
-
it('decrypts via
|
|
207
|
+
it('decrypts via decrypt and returns GPG keys', async function () {
|
|
208
208
|
const adata = 'test-adata';
|
|
209
|
-
// Use a fake v2 envelope (v:2) so isV2Envelope returns true and
|
|
209
|
+
// Use a fake v2 envelope (v:2) so isV2Envelope returns true and decrypt is called.
|
|
210
210
|
// The stub extracts plaintext directly from this fake format.
|
|
211
211
|
const encryptedUserGpgPrvKey = JSON.stringify({
|
|
212
212
|
v: 2,
|
|
@@ -219,7 +219,7 @@ describe('Base TSS Utils', function () {
|
|
|
219
219
|
assert.equal(result.userGpgPrvKey.isPrivate(), true);
|
|
220
220
|
});
|
|
221
221
|
it('throws when adata does not match', async function () {
|
|
222
|
-
const encryptedUserGpgPrvKey = mockBitgo.encrypt({
|
|
222
|
+
const encryptedUserGpgPrvKey = await mockBitgo.encrypt({
|
|
223
223
|
input: userGpgKeyPair.privateKey,
|
|
224
224
|
password: walletPassphrase,
|
|
225
225
|
adata: `${signingUserGpgKeyDomainSeparator}:correct-adata`,
|
|
@@ -396,4 +396,4 @@ function bytesToWord(bytes) {
|
|
|
396
396
|
}
|
|
397
397
|
return bytes.reduce((num, byte) => num * 0x100 + byte, 0);
|
|
398
398
|
}
|
|
399
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZVRTU1V0aWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGVzdC91bml0L2JpdGdvL3V0aWxzL3Rzcy9iYXNlVFNTVXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSwrQ0FBaUM7QUFDakMsbUNBQTJDO0FBQzNDLG9EQUFzQztBQUN0QyxpREFBbUM7QUFDbkMsNkNBQStCO0FBQy9CLHVEQUF5QztBQUN6Qyx5REFBb0Q7QUFFcEQsNENBQThHO0FBQzlHLG1HQUEyRTtBQVkzRSxNQUFNLGdCQUFpQixTQUFRLHNCQUFvQjtJQUNqRCxzQ0FBc0MsQ0FDcEMsU0FBb0IsRUFDcEIsMEJBQW1DO1FBRW5DLE9BQU8sSUFBSSxDQUFDLCtCQUErQixDQUFDLFNBQVMsRUFBRSwwQkFBMEIsQ0FBQyxDQUFDO0lBQ3JGLENBQUM7SUFFRCxvQkFBb0IsQ0FBQyxLQUFhLEVBQUUsVUFBa0IsRUFBRSxvQkFBNEI7UUFDbEYsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsVUFBVSxFQUFFLG9CQUFvQixDQUFDLENBQUM7SUFDOUQsQ0FBQztJQUVELDZCQUE2QixDQUMzQixpQkFBeUIsRUFDekIsc0JBQThCLEVBQzlCLGdCQUF3QixFQUN4QixLQUFhLEVBQ2IseUJBQWlDO1FBRWpDLE9BQU8sSUFBSSxDQUFDLHNCQUFzQixDQUNoQyxpQkFBaUIsRUFDakIsc0JBQXNCLEVBQ3RCLGdCQUFnQixFQUNoQixLQUFLLEVBQ0wseUJBQXlCLENBQzFCLENBQUM7SUFDSixDQUFDO0NBQ0Y7QUFFRCxRQUFRLENBQUMsZ0JBQWdCLEVBQUU7SUFDekIsTUFBTSxnQkFBZ0IsR0FBRyxlQUFlLENBQUM7SUFDekMsTUFBTSxnQ0FBZ0MsR0FBRyw4QkFBOEIsQ0FBQztJQUN4RSxNQUFNLHVCQUF1QixHQUFHLDhCQUE4QixDQUFDO0lBRS9ELElBQUksWUFBOEIs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LENBQUMsR0FBRyxHQUFHLEtBQUssR0FBRyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDNUQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGFzc2VydCBmcm9tICdhc3NlcnQnO1xuaW1wb3J0IHsgSGFzaCwgcmFuZG9tQnl0ZXMgfSBmcm9tICdjcnlwdG8nO1xuaW1wb3J0IGNyZWF0ZUtlY2Nha0hhc2ggZnJvbSAna2VjY2FrJztcbmltcG9ydCAqIGFzIG9wZW5wZ3AgZnJvbSAnb3BlbnBncCc7XG5pbXBvcnQgKiBhcyBzaW5vbiBmcm9tICdzaW5vbic7XG5pbXBvcnQgKiBhcyBzamNsIGZyb20gJ0BiaXRnby1iZXRhL3NqY2wnO1xuaW1wb3J0IHsgRGtsc1V0aWxzIH0gZnJvbSAnQGJpdGdvLWJldGEvc2RrLWxpYi1tcGMnO1xuXG5pbXBvcnQgeyBCaXRHb0Jhc2UsIEVjZHNhTVBDdjJVdGlscywgSUJhc2VDb2luLCBJV2FsbGV0LCBSZXF1ZXN0VHJhY2VyLCBUeFJlcXVlc3QgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi9zcmMnO1xuaW1wb3J0IEJhc2VUc3NVdGlscyBmcm9tICcuLi8uLi8uLi8uLi8uLi9zcmMvYml0Z28vdXRpbHMvdHNzL2Jhc2VUU1NVdGlscyc7XG5cbnR5cGUgQml0Z29HcGdLZXlQYWlyID0gb3BlbnBncC5TZXJpYWxpemVkS2V5UGFpcjxzdHJpbmc+ICYgeyByZXZvY2F0aW9uQ2VydGlmaWNhdGU6IHN0cmluZyB9O1xudHlwZSBUeFJlcXVlc3RUcmFuc2FjdGlvbiA9IE5vbk51bGxhYmxlPFR4UmVxdWVzdFsndHJhbnNhY3Rpb25zJ10+W251bWJlcl07XG50eXBlIFVuc2lnbmVkVHJhbnNhY3Rpb24gPSBUeFJlcXVlc3RUcmFuc2FjdGlvblsndW5zaWduZWRUeCddO1xudHlwZSBTaWduYWJsZUhleEFuZERlcml2YXRpb25QYXRoID0ge1xuICBzaWduYWJsZUhleDogc3RyaW5nO1xuICBkZXJpdmF0aW9uUGF0aDogc3RyaW5nO1xuICBzZXJpYWxpemVkVHhIZXg6IHN0cmluZyB8IHVuZGVmaW5lZDtcbn07XG50eXBlIERlY3J5cHRlZEdwZ0tleXMgPSB7IGJpdGdvR3BnS2V5OiBvcGVucGdwLktleTsgdXNlckdwZ1BydktleTogb3BlbnBncC5Qcml2YXRlS2V5IH07XG5cbmNsYXNzIFRlc3RCYXNlVHNzVXRpbHMgZXh0ZW5kcyBCYXNlVHNzVXRpbHM8QnVmZmVyPiB7XG4gIGdldFNpZ25hYmxlSGV4QW5kRGVyaXZhdGlvblBhdGhGb3JUZXN0KFxuICAgIHR4UmVxdWVzdDogVHhSZXF1ZXN0LFxuICAgIG1pc3NpbmdUcmFuc2FjdGlvbnNNZXNzYWdlPzogc3RyaW5nXG4gICk6IFNpZ25hYmxlSGV4QW5kRGVyaXZhdGlvblBhdGgge1xuICAgIHJldHVybiB0aGlzLmdldFNpZ25hYmxlSGV4QW5kRGVyaXZhdGlvblBhdGgodHhSZXF1ZXN0LCBtaXNzaW5nVHJhbnNhY3Rpb25zTWVzc2FnZSk7XG4gIH1cblxuICB2YWxpZGF0ZUFkYXRhRm9yVGVzdChhZGF0YTogc3RyaW5nLCBjeXBoZXJ0ZXh0OiBzdHJpbmcsIHJvdW5kRG9tYWluU2VwYXJhdG9yOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLnZhbGlkYXRlQWRhdGEoYWRhdGEsIGN5cGhlcnRleHQsIHJvdW5kRG9tYWluU2VwYXJhdG9yKTtcbiAgfVxuXG4gIGdldEJpdGdvQW5kVXNlckdwZ0tleXNGb3JUZXN0KFxuICAgIGJpdGdvUHVibGljR3BnS2V5OiBzdHJpbmcsXG4gICAgZW5jcnlwdGVkVXNlckdwZ1BydktleTogc3RyaW5nLFxuICAgIHdhbGxldFBhc3NwaHJhc2U6IHN0cmluZyxcbiAgICBhZGF0YTogc3RyaW5nLFxuICAgIHVzZXJHcGdLZXlEb21haW5TZXBhcmF0b3I6IHN0cmluZ1xuICApOiBQcm9taXNlPERlY3J5cHRlZEdwZ0tleXM+IHtcbiAgICByZXR1cm4gdGhpcy5nZXRCaXRnb0FuZFVzZXJHcGdLZXlzKFxuICAgICAgYml0Z29QdWJsaWNHcGdLZXksXG4gICAgICBlbmNyeXB0ZWRVc2VyR3BnUHJ2S2V5LFxuICAgICAgd2FsbGV0UGFzc3BocmFzZSxcbiAgICAgIGFkYXRhLFxuICAgICAgdXNlckdwZ0tleURvbWFpblNlcGFyYXRvclxuICAgICk7XG4gIH1cbn1cblxuZGVzY3JpYmUoJ0Jhc2UgVFNTIFV0aWxzJywgZnVuY3Rpb24gKCkge1xuICBjb25zdCB3YWxsZXRQYXNzcGhyYXNlID0gJ3Rlc3QtcGFzc3dvcmQnO1xuICBjb25zdCBzaWduaW5nVXNlckdwZ0tleURvbWFpblNlcGFyYXRvciA9ICdNUFNfRFNHX1NJR05JTkdfVVNFUl9HUEdfS0VZJztcbiAgY29uc3Qgcm91bmRPbmVEb21haW5TZXBhcmF0b3IgPSAnTVBTX0RTR19TSUdOSU5HX1JPVU5EMV9TVEFURSc7XG5cbiAgbGV0IGJhc2VUc3NVdGlsczogVGVzdEJhc2VUc3NVdGlscztcbiAgbGV0IGVjZHNhTVBDdjJVdGlsczogRWNkc2FNUEN2MlV0aWxzO1xuICBsZXQgbW9ja0JpdGdvOiBCaXRHb0Jhc2U7XG4gIGxldCBkZWNyeXB0QXN5bmNTdHViOiBzaW5vbi5TaW5vblN0dWI7XG4gIGxldCBiaXRnb0dwZ0tleVBhaXI6IEJpdGdvR3BnS2V5UGFpcjtcbiAgbGV0IHVzZXJHcGdLZXlQYWlyOiBCaXRnb0dwZ0tleVBhaXI7XG4gIGxldCB1c2VyU2hhcmU6IEJ1ZmZlcjtcblxuICBiZWZvcmUoYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIG9wZW5wZ3AuY29uZmlnLnJlamVjdEN1cnZlcyA9IG5ldyBTZXQoKTtcbiAgICBiaXRnb0dwZ0tleVBhaXIgPSBhd2FpdCBvcGVucGdwLmdlbmVyYXRlS2V5KHtcbiAgICAgIHVzZXJJRHM6IFt7IG5hbWU6ICdiaXRnbycsIGVtYWlsOiAnYml0Z29AdGVzdC5jb20nIH1dLFxuICAgICAgY3VydmU6ICdlZDI1NTE5JyxcbiAgICAgIGZvcm1hdDogJ2FybW9yZWQnLFxuICAgIH0pO1xuICAgIHVzZXJHcGdLZXlQYWlyID0gYXdhaXQgb3BlbnBncC5nZW5lcmF0ZUtleSh7XG4gICAgICB1c2VySURzOiBbeyBuYW1lOiAndXNlcicsIGVtYWlsOiAndXNlckB0ZXN0LmNvbScgfV0sXG4gICAgICBjdXJ2ZTogJ2VkMjU1MTknLFxuICAgICAgZm9ybWF0OiAnYXJtb3JlZCcsXG4gICAgfSk7XG5cbiAgICBjb25zdCBbdXNlckRrZ1Nlc3Npb25dID0gYXdhaXQgRGtsc1V0aWxzLmdlbmVyYXRlREtHS2V5U2hhcmVzKCk7XG4gICAgdXNlclNoYXJlID0gdXNlckRrZ1Nlc3Npb24uZ2V0S2V5U2hhcmUoKTtcbiAgfSk7XG5cbiAgYmVmb3JlRWFjaChmdW5jdGlvbiAoKSB7XG4gICAgZGVjcnlwdEFzeW5jU3R1YiA9IHNpbm9uLnN0dWIoKS5jYWxsc0Zha2UoYXN5bmMgKHsgaW5wdXQsIHBhc3N3b3JkIH06IFBhcmFtZXRlcnM8Qml0R29CYXNlWydkZWNyeXB0QXN5bmMnXT5bMF0pID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHBhcnNlZCA9IEpTT04ucGFyc2UoaW5wdXQpO1xuICAgICAgICBpZiAocGFyc2VkLnYgPT09IDIgJiYgcGFyc2VkLnBsYWludGV4dCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgcmV0dXJuIHBhcnNlZC5wbGFpbnRleHQ7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2gge31cbiAgICAgIHJldHVybiBzamNsLmRlY3J5cHQocGFzc3dvcmQgPz8gJycsIGlucHV0KTtcbiAgICB9KTtcblxuICAgIGNvbnN0IG1vY2tCZyA9IHt9IGFzIEJpdEdvQmFzZTtcbiAgICBtb2NrQmcuZ2V0RW52ID0gc2lub24uc3R1YigpLnJldHVybnMoJ3Rlc3QnKTtcbiAgICBtb2NrQmcuZW5jcnlwdCA9IHNpbm9uXG4gICAgICAuc3R1YigpXG4gICAgICAuY2FsbHNGYWtlKChwYXJhbXMpID0+IGVuY3J5cHRXaXRoU2pjbChwYXJhbXMucGFzc3dvcmQgPz8gJycsIHBhcmFtcy5pbnB1dCwgcGFyYW1zLmFkYXRhKSk7XG4gICAgbW9ja0JnLmVuY3J5cHRBc3luYyA9IHNpbm9uXG4gICAgICAuc3R1YigpXG4gICAgICAuY2FsbHNGYWtlKGFzeW5jIChwYXJhbXMpID0+IGVuY3J5cHRXaXRoU2pjbChwYXJhbXMucGFzc3dvcmQgPz8gJycsIHBhcmFtcy5pbnB1dCwgcGFyYW1zLmFkYXRhKSk7XG4gICAgbW9ja0JnLmRlY3J5cHQgPSBzaW5vbi5zdHViKCkuY2FsbHNGYWtlKChwYXJhbXMpID0+IHNqY2wuZGVjcnlwdChwYXJhbXMucGFzc3dvcmQgPz8gJycsIHBhcmFtcy5pbnB1dCkpO1xuICAgIG1vY2tCZy5kZWNyeXB0QXN5bmMgPSBkZWNyeXB0QXN5bmNTdHViO1xuICAgIG1vY2tCaXRnbyA9IG1vY2tCZztcblxuICAgIGNvbnN0IG1vY2tDb2luID0ge30gYXMgSUJhc2VDb2luO1xuICAgIG1vY2tDb2luLmdldEhhc2hGdW5jdGlvbiA9IHNpbm9uLnN0dWIoKS5jYWxsc0Zha2UoKCkgPT4gY3JlYXRlS2VjY2FrSGFzaCgna2VjY2FrMjU2JykgYXMgSGFzaCk7XG5cbiAgICBiYXNlVHNzVXRpbHMgPSBuZXcgVGVzdEJhc2VUc3NVdGlscyhtb2NrQml0Z28sIG1vY2tDb2luKTtcbiAgICBlY2RzYU1QQ3YyVXRpbHMgPSBuZXcgRWNkc2FNUEN2MlV0aWxzKG1vY2tCaXRnbywgbW9ja0NvaW4pO1xuICB9KTtcblxuICBkZXNjcmliZSgnZ2V0U2lnbmFibGVIZXhBbmREZXJpdmF0aW9uUGF0aCcsIGZ1bmN0aW9uICgpIHtcbiAgICBpdCgnZXh0cmFjdHMgc2lnbmFibGVIZXggYW5kIGRlcml2YXRpb25QYXRoIGZyb20gYSB2YWxpZCB0eFJlcXVlc3QnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB0eFJlcXVlc3QgPSBidWlsZFR4UmVxdWVzdCh7XG4gICAgICAgIHRyYW5zYWN0aW9uczogW1xuICAgICAgICAgIGJ1aWxkVHJhbnNhY3Rpb24oe1xuICAgICAgICAgICAgdW5zaWduZWRUeDogYnVpbGRVbnNpZ25lZFRyYW5zYWN0aW9uKHsgc2lnbmFibGVIZXg6ICdkZWFkYmVlZicsIGRlcml2YXRpb25QYXRoOiAnbS8wLzAnIH0pLFxuICAgICAgICAgIH0pLFxuICAgICAgICBdLFxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IHJlc3VsdCA9IGJhc2VUc3NVdGlscy5nZXRTaWduYWJsZUhleEFuZERlcml2YXRpb25QYXRoRm9yVGVzdCh0eFJlcXVlc3QpO1xuICAgICAgYXNzZXJ0LmVxdWFsKHJlc3VsdC5zaWduYWJsZUhleCwgJ2RlYWRiZWVmJyk7XG4gICAgICBhc3NlcnQuZXF1YWwocmVzdWx0LmRlcml2YXRpb25QYXRoLCAnbS8wLzAnKTtcbiAgICB9KTtcblxuICAgIGl0KCd0aHJvd3Mgd2hlbiB0cmFuc2FjdGlvbnMgZmllbGQgaXMgbWlzc2luZycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGFzc2VydC50aHJvd3MoXG4gICAgICAgICgpID0+IGJhc2VUc3NVdGlscy5nZXRTaWduYWJsZUhleEFuZERlcml2YXRpb25QYXRoRm9yVGVzdChidWlsZFR4UmVxdWVzdFdpdGhvdXRUcmFuc2FjdGlvbnMoKSksXG4gICAgICAgIC9jcmVhdGVPZmZsaW5lU2hhcmUgcmVxdWlyZXMgZXhhY3RseSBvbmUgdHJhbnNhY3Rpb24gaW4gdHhSZXF1ZXN0L1xuICAgICAgKTtcbiAgICB9KTtcblxuICAgIGl0KCd0aHJvd3Mgd2hlbiB0cmFuc2FjdGlvbnMgYXJyYXkgaXMgZW1wdHknLCBmdW5jdGlvbiAoKSB7XG4gICAgICBhc3NlcnQudGhyb3dzKFxuICAgICAgICAoKSA9PiBiYXNlVHNzVXRpbHMuZ2V0U2lnbmFibGVIZXhBbmREZXJpdmF0aW9uUGF0aEZvclRlc3QoYnVpbGRUeFJlcXVlc3QoeyB0cmFuc2FjdGlvbnM6IFtdIH0pKSxcbiAgICAgICAgL2NyZWF0ZU9mZmxpbmVTaGFyZSByZXF1aXJlcyBleGFjdGx5IG9uZSB0cmFuc2FjdGlvbiBpbiB0eFJlcXVlc3QvXG4gICAgICApO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Rocm93cyB3aGVuIHRyYW5zYWN0aW9ucyBhcnJheSBoYXMgbW9yZSB0aGFuIG9uZSBlbGVtZW50JywgZnVuY3Rpb24gKCkge1xuICAgICAgYXNzZXJ0LnRocm93cyhcbiAgICAgICAgKCkgPT5cbiAgICAgICAgICBiYXNlVHNzVXRpbHMuZ2V0U2lnbmFibGVIZXhBbmREZXJpdmF0aW9uUGF0aEZvclRlc3QoXG4gICAgICAgICAgICBidWlsZFR4UmVxdWVzdCh7XG4gICAgICAgICAgICAgIHRyYW5zYWN0aW9uczogW1xuICAgICAgICAgICAgICAgIGJ1aWxkVHJhbnNhY3Rpb24oe1xuICAgICAgICAgICAgICAgICAgdW5zaWduZWRUeDogYnVpbGRVbnNpZ25lZFRyYW5zYWN0aW9uKHsgc2lnbmFibGVIZXg6ICdhYWEnLCBkZXJpdmF0aW9uUGF0aDogJ20vMCcgfSksXG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgYnVpbGRUcmFuc2FjdGlvbih7XG4gICAgICAgICAgICAgICAgICB1bnNpZ25lZFR4OiBidWlsZFVuc2lnbmVkVHJhbnNhY3Rpb24oeyBzaWduYWJsZUhleDogJ2JiYicsIGRlcml2YXRpb25QYXRoOiAnbS8xJyB9KSxcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgKSxcbiAgICAgICAgL2NyZWF0ZU9mZmxpbmVTaGFyZSByZXF1aXJlcyBleGFjdGx5IG9uZSB0cmFuc2FjdGlvbiBpbiB0eFJlcXVlc3QvXG4gICAgICApO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Rocm93cyB3aGVuIHVuc2lnbmVkVHggaXMgbWlzc2luZycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgSW50ZW50aW9uYWxseSBtYWxmb3JtZWQgdG8gZXhlcmNpc2UgdGhlIHJ1bnRpbWUgZ3VhcmQuXG4gICAgICBjb25zdCBub1Vuc2lnbmVkVHg6IFR4UmVxdWVzdFRyYW5zYWN0aW9uID0geyBzdGF0ZTogJ3BlbmRpbmdTaWduYXR1cmUnLCBzaWduYXR1cmVTaGFyZXM6IFtdIH07XG4gICAgICBhc3NlcnQudGhyb3dzKFxuICAgICAgICAoKSA9PiBiYXNlVHNzVXRpbHMuZ2V0U2lnbmFibGVIZXhBbmREZXJpdmF0aW9uUGF0aEZvclRlc3QoYnVpbGRUeFJlcXVlc3QoeyB0cmFuc2FjdGlvbnM6IFtub1Vuc2lnbmVkVHhdIH0pKSxcbiAgICAgICAgL01pc3NpbmcgdW5zaWduZWRUeCBpbiB0cmFuc2FjdGlvbnMvXG4gICAgICApO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Rocm93cyB3aGVuIHNpZ25hYmxlSGV4IGlzIG1pc3NpbmcnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIEludGVudGlvbmFsbHkgbWFsZm9ybWVkIHRvIGV4ZXJjaXNlIHRoZSBydW50aW1lIGd1YXJkLlxuICAgICAgY29uc3Qgbm9TaWduYWJsZUhleDogVW5zaWduZWRUcmFuc2FjdGlvbiA9IHsgc2VyaWFsaXplZFR4SGV4OiAnYWFiYmNjZGQnLCBkZXJpdmF0aW9uUGF0aDogJ20vMCcgfTtcbiAgICAgIGFzc2VydC50aHJvd3MoXG4gICAgICAgICgpID0+XG4gICAgICAgICAgYmFzZVRzc1V0aWxzLmdldFNpZ25hYmxlSGV4QW5kRGVyaXZhdGlvblBhdGhGb3JUZXN0KFxuICAgICAgICAgICAgYnVpbGRUeFJlcXVlc3QoeyB0cmFuc2FjdGlvbnM6IFtidWlsZFRyYW5zYWN0aW9uKHsgdW5zaWduZWRUeDogbm9TaWduYWJsZUhleCB9KV0gfSlcbiAgICAgICAgICApLFxuICAgICAgICAvTWlzc2luZyBzaWduYWJsZUhleCBpbiB1bnNpZ25lZFR4L1xuICAgICAgKTtcbiAgICB9KTtcblxuICAgIGl0KCd0aHJvd3Mgd2hlbiBkZXJpdmF0aW9uUGF0aCBpcyBtaXNzaW5nJywgZnVuY3Rpb24gKCkge1xuICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciBJbnRlbnRpb25hbGx5IG1hbGZvcm1lZCB0byBleGVyY2lzZSB0aGUgcnVudGltZSBndWFyZC5cbiAgICAgIGNvbnN0IG5vRGVyaXZhdGlvblBhdGg6IFVuc2lnbmVkVHJhbnNhY3Rpb24gPSB7IHNlcmlhbGl6ZWRUeEhleDogJ2FhYmJjY2RkJywgc2lnbmFibGVIZXg6ICdkZWFkYmVlZicgfTtcbiAgICAgIGFzc2VydC50aHJvd3MoXG4gICAgICAgICgpID0+XG4gICAgICAgICAgYmFzZVRzc1V0aWxzLmdldFNpZ25hYmxlSGV4QW5kRGVyaXZhdGlvblBhdGhGb3JUZXN0KFxuICAgICAgICAgICAgYnVpbGRUeFJlcXVlc3QoeyB0cmFuc2FjdGlvbnM6IFtidWlsZFRyYW5zYWN0aW9uKHsgdW5zaWduZWRUeDogbm9EZXJpdmF0aW9uUGF0aCB9KV0gfSlcbiAgICAgICAgICApLFxuICAgICAgICAvTWlzc2luZyBkZXJpdmF0aW9uUGF0aCBpbiB1bnNpZ25lZFR4L1xuICAgICAgKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ3ZhbGlkYXRlQWRhdGEnLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ3Bhc3NlcyB3aGVuIGFkYXRhIG1hdGNoZXMgd2l0aCBkb21haW4gc2VwYXJhdG9yJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgYWRhdGEgPSAndGVzdC12YWx1ZSc7XG4gICAgICBjb25zdCBjeXBoZXJ0ZXh0ID0gbW9ja0JpdGdvLmVuY3J5cHQoe1xuICAgICAgICBpbnB1dDogJ3NlY3JldCcsXG4gICAgICAgIHBhc3N3b3JkOiB3YWxsZXRQYXNzcGhyYXNlLFxuICAgICAgICBhZGF0YTogYCR7cm91bmRPbmVEb21haW5TZXBhcmF0b3J9OiR7YWRhdGF9YCxcbiAgICAgIH0pO1xuICAgICAgYXNzZXJ0LmRvZXNOb3RUaHJvdygoKSA9PiBiYXNlVHNzVXRpbHMudmFsaWRhdGVBZGF0YUZvclRlc3QoYWRhdGEsIGN5cGhlcnRleHQsIHJvdW5kT25lRG9tYWluU2VwYXJhdG9yKSk7XG4gICAgfSk7XG5cbiAgICBpdCgncGFzc2VzIHdoZW4gYWRhdGEgbWF0Y2hlcyB3aXRob3V0IGRvbWFpbiBzZXBhcmF0b3InLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBhZGF0YSA9ICd0ZXN0LXZhbHVlJztcbiAgICAgIGNvbnN0IGN5cGhlcnRleHQgPSBtb2NrQml0Z28uZW5jcnlwdCh7IGlucHV0OiAnc2VjcmV0JywgcGFzc3dvcmQ6IHdhbGxldFBhc3NwaHJhc2UsIGFkYXRhIH0pO1xuICAgICAgYXNzZXJ0LmRvZXNOb3RUaHJvdygoKSA9PiBiYXNlVHNzVXRpbHMudmFsaWRhdGVBZGF0YUZvclRlc3QoYWRhdGEsIGN5cGhlcnRleHQsIHJvdW5kT25lRG9tYWluU2VwYXJhdG9yKSk7XG4gICAgfSk7XG5cbiAgICBpdCgndGhyb3dzIHdoZW4gYWRhdGEgZG9lcyBub3QgbWF0Y2gnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBjeXBoZXJ0ZXh0ID0gbW9ja0JpdGdvLmVuY3J5cHQoe1xuICAgICAgICBpbnB1dDogJ3NlY3JldCcsXG4gICAgICAgIHBhc3N3b3JkOiB3YWxsZXRQYXNzcGhyYXNlLFxuICAgICAgICBhZGF0YTogYCR7cm91bmRPbmVEb21haW5TZXBhcmF0b3J9OmNvcnJlY3RgLFxuICAgICAgfSk7XG4gICAgICBhc3NlcnQudGhyb3dzKFxuICAgICAgICAoKSA9PiBiYXNlVHNzVXRpbHMudmFsaWRhdGVBZGF0YUZvclRlc3QoJ3dyb25nJywgY3lwaGVydGV4dCwgcm91bmRPbmVEb21haW5TZXBhcmF0b3IpLFxuICAgICAgICAvQWRhdGEgZG9lcyBub3QgbWF0Y2ggY3lwaGVydGV4dCBhZGF0YS9cbiAgICAgICk7XG4gICAgfSk7XG5cbiAgICBpdCgndGhyb3dzIHdoZW4gY3lwaGVydGV4dCBpcyBub3QgdmFsaWQgSlNPTicsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGFzc2VydC50aHJvd3MoXG4gICAgICAgICgpID0+IGJhc2VUc3NVdGlscy52YWxpZGF0ZUFkYXRhRm9yVGVzdCgnYWRhdGEnLCAnbm90LWpzb24nLCByb3VuZE9uZURvbWFpblNlcGFyYXRvciksXG4gICAgICAgIC9GYWlsZWQgdG8gcGFyc2UgY3lwaGVydGV4dCB0byBKU09OL1xuICAgICAgKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2dldEJpdGdvQW5kVXNlckdwZ0tleXMnLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ2RlY3J5cHRzIHYxIFNKQ0wgZW52ZWxvcGUgd2l0aG91dCBhZGF0YSBhbmQgc2tpcHMgdmFsaWRhdGlvbicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGVuY3J5cHRlZFVzZXJHcGdQcnZLZXkgPSBtb2NrQml0Z28uZW5jcnlwdCh7XG4gICAgICAgIGlucHV0OiB1c2VyR3BnS2V5UGFpci5wcml2YXRlS2V5LFxuICAgICAgICBwYXNzd29yZDogd2FsbGV0UGFzc3BocmFzZSxcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBiYXNlVHNzVXRpbHMuZ2V0Qml0Z29BbmRVc2VyR3BnS2V5c0ZvclRlc3QoXG4gICAgICAgIGJpdGdvR3BnS2V5UGFpci5wdWJsaWNLZXksXG4gICAgICAgIGVuY3J5cHRlZFVzZXJHcGdQcnZLZXksXG4gICAgICAgIHdhbGxldFBhc3NwaHJhc2UsXG4gICAgICAgICcnLFxuICAgICAgICBzaWduaW5nVXNlckdwZ0tleURvbWFpblNlcGFyYXRvclxuICAgICAgKTtcblxuICAgICAgYXNzZXJ0Lm9rKHJlc3VsdC5iaXRnb0dwZ0tleSk7XG4gICAgICBhc3NlcnQuZXF1YWwocmVzdWx0LnVzZXJHcGdQcnZLZXkuaXNQcml2YXRlKCksIHRydWUpO1xuICAgIH0pO1xuXG4gICAgaXQoJ2RlY3J5cHRzIHYxIFNKQ0wgZW52ZWxvcGUgd2l0aCBtYXRjaGluZyBhZGF0YScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGFkYXRhID0gJ3Rlc3QtYWRhdGEnO1xuICAgICAgY29uc3QgZW5jcnlwdGVkVXNlckdwZ1BydktleSA9IG1vY2tCaXRnby5lbmNyeXB0KHtcbiAgICAgICAgaW5wdXQ6IHVzZXJHcGdLZXlQYWlyLnByaXZhdGVLZXksXG4gICAgICAgIHBhc3N3b3JkOiB3YWxsZXRQYXNzcGhyYXNlLFxuICAgICAgICBhZGF0YTogYCR7c2lnbmluZ1VzZXJHcGdLZXlEb21haW5TZXBhcmF0b3J9OiR7YWRhdGF9YCxcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBiYXNlVHNzVXRpbHMuZ2V0Qml0Z29BbmRVc2VyR3BnS2V5c0ZvclRlc3QoXG4gICAgICAgIGJpdGdvR3BnS2V5UGFpci5wdWJsaWNLZXksXG4gICAgICAgIGVuY3J5cHRlZFVzZXJHcGdQcnZLZXksXG4gICAgICAgIHdhbGxldFBhc3NwaHJhc2UsXG4gICAgICAgIGFkYXRhLFxuICAgICAgICBzaWduaW5nVXNlckdwZ0tleURvbWFpblNlcGFyYXRvclxuICAgICAgKTtcblxuICAgICAgYXNzZXJ0Lm9rKHJlc3VsdC5iaXRnb0dwZ0tleSk7XG4gICAgICBhc3NlcnQuZXF1YWwocmVzdWx0LnVzZXJHcGdQcnZLZXkuaXNQcml2YXRlKCksIHRydWUpO1xuICAgIH0pO1xuXG4gICAgaXQoJ2RlY3J5cHRzIHZpYSBkZWNyeXB0QXN5bmMgYW5kIHJldHVybnMgR1BHIGtleXMnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBhZGF0YSA9ICd0ZXN0LWFkYXRhJztcbiAgICAgIC8vIFVzZSBhIGZha2UgdjIgZW52ZWxvcGUgKHY6Mikgc28gaXNWMkVudmVsb3BlIHJldHVybnMgdHJ1ZSBhbmQgZGVjcnlwdEFzeW5jIGlzIGNhbGxlZC5cbiAgICAgIC8vIFRoZSBzdHViIGV4dHJhY3RzIHBsYWludGV4dCBkaXJlY3RseSBmcm9tIHRoaXMgZmFrZSBmb3JtYXQuXG4gICAgICBjb25zdCBlbmNyeXB0ZWRVc2VyR3BnUHJ2S2V5ID0gSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICB2OiAyLFxuICAgICAgICBhZGF0YTogYCR7c2lnbmluZ1VzZXJHcGdLZXlEb21haW5TZXBhcmF0b3J9OiR7YWRhdGF9YCxcbiAgICAgICAgcGxhaW50ZXh0OiB1c2VyR3BnS2V5UGFpci5wcml2YXRlS2V5LFxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGJhc2VUc3NVdGlscy5nZXRCaXRnb0FuZFVzZXJHcGdLZXlzRm9yVGVzdChcbiAgICAgICAgYml0Z29HcGdLZXlQYWlyLnB1YmxpY0tleSxcbiAgICAgICAgZW5jcnlwdGVkVXNlckdwZ1BydktleSxcbiAgICAgICAgd2FsbGV0UGFzc3BocmFzZSxcbiAgICAgICAgYWRhdGEsXG4gICAgICAgIHNpZ25pbmdVc2VyR3BnS2V5RG9tYWluU2VwYXJhdG9yXG4gICAgICApO1xuXG4gICAgICBzaW5vbi5hc3NlcnQuY2FsbGVkT25jZShkZWNyeXB0QXN5bmNTdHViKTtcbiAgICAgIGFzc2VydC5vayhyZXN1bHQuYml0Z29HcGdLZXkpO1xuICAgICAgYXNzZXJ0LmVxdWFsKHJlc3VsdC51c2VyR3BnUHJ2S2V5LmlzUHJpdmF0ZSgpLCB0cnVlKTtcbiAgICB9KTtcblxuICAgIGl0KCd0aHJvd3Mgd2hlbiBhZGF0YSBkb2VzIG5vdCBtYXRjaCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGVuY3J5cHRlZFVzZXJHcGdQcnZLZXkgPSBtb2NrQml0Z28uZW5jcnlwdCh7XG4gICAgICAgIGlucHV0OiB1c2VyR3BnS2V5UGFpci5wcml2YXRlS2V5LFxuICAgICAgICBwYXNzd29yZDogd2FsbGV0UGFzc3BocmFzZSxcbiAgICAgICAgYWRhdGE6IGAke3NpZ25pbmdVc2VyR3BnS2V5RG9tYWluU2VwYXJhdG9yfTpjb3JyZWN0LWFkYXRhYCxcbiAgICAgIH0pO1xuXG4gICAgICBhd2FpdCBhc3NlcnQucmVqZWN0cyhcbiAgICAgICAgYmFzZVRzc1V0aWxzLmdldEJpdGdvQW5kVXNlckdwZ0tleXNGb3JUZXN0KFxuICAgICAgICAgIGJpdGdvR3BnS2V5UGFpci5wdWJsaWNLZXksXG4gICAgICAgICAgZW5jcnlwdGVkVXNlckdwZ1BydktleSxcbiAgICAgICAgICB3YWxsZXRQYXNzcGhyYXNlLFxuICAgICAgICAgICd3cm9uZy1hZGF0YScsXG4gICAgICAgICAgc2lnbmluZ1VzZXJHcGdLZXlEb21haW5TZXBhcmF0b3JcbiAgICAgICAgKSxcbiAgICAgICAgL0FkYXRhIGRvZXMgbm90IG1hdGNoIGN5cGhlcnRleHQgYWRhdGEvXG4gICAgICApO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Rocm93cyB3aGVuIGN5cGhlcnRleHQgaXMgbm90IHZhbGlkIEpTT04nLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBhd2FpdCBhc3NlcnQucmVqZWN0cyhcbiAgICAgICAgYmFzZVRzc1V0aWxzLmdldEJpdGdvQW5kVXNlckdwZ0tleXNGb3JUZXN0KFxuICAgICAgICAgIGJpdGdvR3BnS2V5UGFpci5wdWJsaWNLZXksXG4gICAgICAgICAgJ25vdC12YWxpZC1qc29uJyxcbiAgICAgICAgICB3YWxsZXRQYXNzcGhyYXNlLFxuICAgICAgICAgICd0ZXN0LWFkYXRhJyxcbiAgICAgICAgICBzaWduaW5nVXNlckdwZ0tleURvbWFpblNlcGFyYXRvclxuICAgICAgICApLFxuICAgICAgICAvanNvbiBkZWNvZGV8RmFpbGVkIHRvIHBhcnNlIGN5cGhlcnRleHQgdG8gSlNPTi9cbiAgICAgICk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdyZWNyZWF0ZVR4UmVxdWVzdCcsIGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBtYWtlV2FsbGV0KG11bHRpc2lnVHlwZVZlcnNpb246ICdNUEN2MicgfCB1bmRlZmluZWQpOiBJV2FsbGV0IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGlkOiBzaW5vbi5zdHViKCkucmV0dXJucygnd2FsbGV0LWlkJyksXG4gICAgICAgIG11bHRpc2lnVHlwZVZlcnNpb246IHNpbm9uLnN0dWIoKS5yZXR1cm5zKG11bHRpc2lnVHlwZVZlcnNpb24pLFxuICAgICAgfSBhcyB1bmtub3duIGFzIElXYWxsZXQ7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbWFrZUNvaW4obXBjQWxnb3JpdGhtOiAnZWRkc2EnIHwgJ2VjZHNhJywgY2hhaW4gPSAndHNvbCcpOiBJQmFzZUNvaW4ge1xuICAgICAgY29uc3QgY29pbiA9IHt9IGFzIElCYXNlQ29pbjtcbiAgICAgIGNvaW4uZ2V0SGFzaEZ1bmN0aW9uID0gc2lub24uc3R1YigpO1xuICAgICAgY29pbi5nZXRNUENBbGdvcml0aG0gPSBzaW5vbi5zdHViKCkucmV0dXJucyhtcGNBbGdvcml0aG0pO1xuICAgICAgY29pbi5nZXRDaGFpbiA9IHNpbm9uLnN0dWIoKS5yZXR1cm5zKGNoYWluKTtcbiAgICAgIHJldHVybiBjb2luO1xuICAgIH1cblxuICAgIGl0KCdkZXJpdmVzIHR4UGFyYW1zIGZyb20gaW50ZW50IGZvciBFZERTQSBNUEN2MiB3YWxsZXRzJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgdHhSZXF1ZXN0SWQgPSAndHgtcmVxLWlkLTEnO1xuICAgICAgY29uc3QgcmVxSWQgPSBuZXcgUmVxdWVzdFRyYWNlcigpO1xuICAgICAgY29uc3QgdHhSZXF1ZXN0ID0gYnVpbGRUeFJlcXVlc3Qoe1xuICAgICAgICB0eFJlcXVlc3RJZCxcbiAgICAgICAgaW50ZW50OiB7XG4gICAgICAgICAgaW50ZW50VHlwZTogJ3BheW1lbnQnLFxuICAgICAgICAgIHJlY2lwaWVudHM6IFt7IGFkZHJlc3M6IHsgYWRkcmVzczogJ3NvbEFkZHIxJyB9LCBhbW91bnQ6IHsgdmFsdWU6ICc1MDAwMDAwJywgc3ltYm9sOiAndHNvbCcgfSB9XSxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCB1dGlscyA9IG5ldyBUZXN0QmFzZVRzc1V0aWxzKG1vY2tCaXRnbywgbWFrZUNvaW4oJ2VkZHNhJyksIG1ha2VXYWxsZXQoJ01QQ3YyJykpO1xuICAgICAgc2lub24uc3R1Yih1dGlscywgJ2RlbGV0ZVNpZ25hdHVyZVNoYXJlcycpLnJlc29sdmVzKCk7XG4gICAgICBzaW5vbi5zdHViKHV0aWxzLCAnZ2V0VHhSZXF1ZXN0JykucmVzb2x2ZXModHhSZXF1ZXN0KTtcbiAgICAgIGNvbnN0IHNpZ25UeFJlcXVlc3RTdHViID0gc2lub24uc3R1Yih1dGlscywgJ3NpZ25UeFJlcXVlc3QnKS5yZXNvbHZlcyh0eFJlcXVlc3QpO1xuXG4gICAgICBhd2FpdCB1dGlscy5yZWNyZWF0ZVR4UmVxdWVzdCh0eFJlcXVlc3RJZCwgJ3BydicsIHJlcUlkKTtcblxuICAgICAgLy8gTmF0aXZlIFNPTDogc3ltYm9sIGVxdWFscyB0aGUgY2hhaW4gbmFtZSwgc28gdG9rZW5OYW1lIG11c3QgYmUgb21pdHRlZFxuICAgICAgYXNzZXJ0LmRlZXBTdHJpY3RFcXVhbChzaWduVHhSZXF1ZXN0U3R1Yi5maXJzdENhbGwuYXJnc1swXS50eFBhcmFtcywge1xuICAgICAgICByZWNpcGllbnRzOiBbeyBhZGRyZXNzOiAnc29sQWRkcjEnLCBhbW91bnQ6ICc1MDAwMDAwJyB9XSxcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3NldHMgdG9rZW5OYW1lIGZvciBTUEwgdG9rZW5zIChzeW1ib2wgZGlmZmVycyBmcm9tIGNoYWluIG5hbWUpJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgdHhSZXF1ZXN0SWQgPSAndHgtcmVxLWlkLXNwbCc7XG4gICAgICBjb25zdCByZXFJZCA9IG5ldyBSZXF1ZXN0VHJhY2VyKCk7XG4gICAgICBjb25zdCB0eFJlcXVlc3QgPSBidWlsZFR4UmVxdWVzdCh7XG4gICAgICAgIHR4UmVxdWVzdElkLFxuICAgICAgICBpbnRlbnQ6IHtcbiAgICAgICAgICBpbnRlbnRUeXBlOiAncGF5bWVudCcsXG4gICAgICAgICAgcmVjaXBpZW50czogW3sgYWRkcmVzczogeyBhZGRyZXNzOiAnc3BsQWRkcjEnIH0sIGFtb3VudDogeyB2YWx1ZTogJzEwMDAnLCBzeW1ib2w6ICd0c29sOnVzZGMnIH0gfV0sXG4gICAgICAgIH0sXG4gICAgICB9KTtcblxuICAgICAgY29uc3QgdXRpbHMgPSBuZXcgVGVzdEJhc2VUc3NVdGlscyhtb2NrQml0Z28sIG1ha2VDb2luKCdlZGRzYScsICd0c29sJyksIG1ha2VXYWxsZXQoJ01QQ3YyJykpO1xuICAgICAgc2lub24uc3R1Yih1dGlscywgJ2RlbGV0ZVNpZ25hdHVyZVNoYXJlcycpLnJlc29sdmVzKCk7XG4gICAgICBzaW5vbi5zdHViKHV0aWxzLCAnZ2V0VHhSZXF1ZXN0JykucmVzb2x2ZXModHhSZXF1ZXN0KTtcbiAgICAgIGNvbnN0IHNpZ25UeFJlcXVlc3RTdHViID0gc2lub24uc3R1Yih1dGlscywgJ3NpZ25UeFJlcXVlc3QnKS5yZXNvbHZlcyh0eFJlcXVlc3QpO1xuXG4gICAgICBhd2FpdCB1dGlscy5yZWNyZWF0ZVR4UmVxdWVzdCh0eFJlcXVlc3RJZCwgJ3BydicsIHJlcUlkKTtcblxuICAgICAgLy8gU1BMIHRva2VuOiBzeW1ib2wgZGlmZmVycyBmcm9tIGNoYWluIG5hbWUsIHNvIHRva2VuTmFtZSBtdXN0IGJlIHNldFxuICAgICAgYXNzZXJ0LmRlZXBTdHJpY3RFcXVhbChzaWduVHhSZXF1ZXN0U3R1Yi5maXJzdENhbGwuYXJnc1swXS50eFBhcmFtcywge1xuICAgICAgICByZWNpcGllbnRzOiBbeyBhZGRyZXNzOiAnc3BsQWRkcjEnLCBhbW91bnQ6ICcxMDAwJywgdG9rZW5OYW1lOiAndHNvbDp1c2RjJyB9XSxcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Bhc3NlcyB1bmRlZmluZWQgdHhQYXJhbXMgZm9yIEVkRFNBIE1QQ3YyIHdoZW4gaW50ZW50IGhhcyBubyByZWNpcGllbnRzJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgdHhSZXF1ZXN0SWQgPSAndHgtcmVxLWlkLTInO1xuICAgICAgY29uc3QgcmVxSWQgPSBuZXcgUmVxdWVzdFRyYWNlcigpO1xuICAgICAgY29uc3QgdHhSZXF1ZXN0ID0gYnVpbGRUeFJlcXVlc3QoeyB0eFJlcXVlc3RJZCwgaW50ZW50OiB7IGludGVudFR5cGU6ICdlbmFibGVUb2tlbicgfSB9KTtcblxuICAgICAgY29uc3QgdXRpbHMgPSBuZXcgVGVzdEJhc2VUc3NVdGlscyhtb2NrQml0Z28sIG1ha2VDb2luKCdlZGRzYScpLCBtYWtlV2FsbGV0KCdNUEN2MicpKTtcbiAgICAgIHNpbm9uLnN0dWIodXRpbHMsICdkZWxldGVTaWduYXR1cmVTaGFyZXMnKS5yZXNvbHZlcygpO1xuICAgICAgc2lub24uc3R1Yih1dGlscywgJ2dldFR4UmVxdWVzdCcpLnJlc29sdmVzKHR4UmVxdWVzdCk7XG4gICAgICBjb25zdCBzaWduVHhSZXF1ZXN0U3R1YiA9IHNpbm9uLnN0dWIodXRpbHMsICdzaWduVHhSZXF1ZXN0JykucmVzb2x2ZXModHhSZXF1ZXN0KTtcblxuICAgICAgYXdhaXQgdXRpbHMucmVjcmVhdGVUeFJlcXVlc3QodHhSZXF1ZXN0SWQsICdwcnYnLCByZXFJZCk7XG5cbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChzaWduVHhSZXF1ZXN0U3R1Yi5maXJzdENhbGwuYXJnc1swXS50eFBhcmFtcywgdW5kZWZpbmVkKTtcbiAgICB9KTtcblxuICAgIGl0KCdwYXNzZXMgdW5kZWZpbmVkIHR4UGFyYW1zIGZvciBFQ0RTQSBNUEN2MiB3YWxsZXRzIChndWFyZCBkb2VzIG5vdCBhcHBseSknLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB0eFJlcXVlc3RJZCA9ICd0eC1yZXEtaWQtMyc7XG4gICAgICBjb25zdCByZXFJZCA9IG5ldyBSZXF1ZXN0VHJhY2VyKCk7XG4gICAgICBjb25zdCB0eFJlcXVlc3QgPSBidWlsZFR4UmVxdWVzdCh7XG4gICAgICAgIHR4UmVxdWVzdElkLFxuICAgICAgICBpbnRlbnQ6IHtcbiAgICAgICAgICBpbnRlbnRUeXBlOiAncGF5bWVudCcsXG4gICAgICAgICAgcmVjaXBpZW50czogW3sgYWRkcmVzczogeyBhZGRyZXNzOiAnZXRoQWRkcjEnIH0sIGFtb3VudDogeyB2YWx1ZTogJzEwMDAwMDAnLCBzeW1ib2w6ICdldGgnIH0gfV0sXG4gICAgICAgIH0sXG4gICAgICB9KTtcblxuICAgICAgY29uc3QgdXRpbHMgPSBuZXcgVGVzdEJhc2VUc3NVdGlscyhtb2NrQml0Z28sIG1ha2VDb2luKCdlY2RzYScpLCBtYWtlV2FsbGV0KCdNUEN2MicpKTtcbiAgICAgIHNpbm9uLnN0dWIodXRpbHMsICdkZWxldGVTaWduYXR1cmVTaGFyZXMnKS5yZXNvbHZlcygpO1xuICAgICAgc2lub24uc3R1Yih1dGlscywgJ2dldFR4UmVxdWVzdCcpLnJlc29sdmVzKHR4UmVxdWVzdCk7XG4gICAgICBjb25zdCBzaWduVHhSZXF1ZXN0U3R1YiA9IHNpbm9uLnN0dWIodXRpbHMsICdzaWduVHhSZXF1ZXN0JykucmVzb2x2ZXModHhSZXF1ZXN0KTtcblxuICAgICAgYXdhaXQgdXRpbHMucmVjcmVhdGVUeFJlcXVlc3QodHhSZXF1ZXN0SWQsICdwcnYnLCByZXFJZCk7XG5cbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChzaWduVHhSZXF1ZXN0U3R1Yi5maXJzdENhbGwuYXJnc1swXS50eFBhcmFtcywgdW5kZWZpbmVkKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ0VDRFNBIE1QQyB2MiBkZWxlZ2F0ZWQgdHhSZXF1ZXN0IHBhcnNpbmcnLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ2dldEhhc2hTdHJpbmdBbmREZXJpdmF0aW9uUGF0aCBwcm9kdWNlcyB0aGUgY29ycmVjdCBoYXNoQnVmZmVyIGFuZCBkZXJpdmF0aW9uUGF0aCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHNpZ25hYmxlSGV4ID0gJ2RlYWRiZWVmJztcbiAgICAgIGNvbnN0IGRlcml2YXRpb25QYXRoID0gJ20vMCc7XG4gICAgICBjb25zdCB0eFJlcXVlc3QgPSBidWlsZFR4UmVxdWVzdCh7XG4gICAgICAgIHRyYW5zYWN0aW9uczogW2J1aWxkVHJhbnNhY3Rpb24oeyB1bnNpZ25lZFR4OiBidWlsZFVuc2lnbmVkVHJhbnNhY3Rpb24oeyBzaWduYWJsZUhleCwgZGVyaXZhdGlvblBhdGggfSkgfSldLFxuICAgICAgfSk7XG4gICAgICBjb25zdCBleHBlY3RlZEhhc2hCdWZmZXIgPSBjcmVhdGVLZWNjYWtIYXNoKCdrZWNjYWsyNTYnKS51cGRhdGUoQnVmZmVyLmZyb20oc2lnbmFibGVIZXgsICdoZXgnKSkuZGlnZXN0KCk7XG5cbiAgICAgIGNvbnN0IHsgZW5jcnlwdGVkUm91bmQxU2Vzc2lvbiB9ID0gYXdhaXQgZWNkc2FNUEN2MlV0aWxzLmNyZWF0ZU9mZmxpbmVSb3VuZDFTaGFyZSh7XG4gICAgICAgIHR4UmVxdWVzdCxcbiAgICAgICAgcHJ2OiB1c2VyU2hhcmUudG9TdHJpbmcoJ2Jhc2U2NCcpLFxuICAgICAgICB3YWxsZXRQYXNzcGhyYXNlLFxuICAgICAgfSk7XG5cbiAgICAgIC8vIFRoZSByb3VuZC0xIHNlc3Npb24gaXMgZW5jcnlwdGVkIHdpdGggYWRhdGEgPSBcIkRLTFMyM19TSUdOSU5HX1JPVU5EMV9TVEFURTo8aGFzaD46PGRlcml2YXRpb25QYXRoPlwiLFxuICAgICAgLy8gd2hpY2ggcHJvdmVzIGdldEhhc2hTdHJpbmdBbmREZXJpdmF0aW9uUGF0aCBwcm9kdWNlZCB0aGUgcmlnaHQgdmFsdWVzIGFmdGVyIHRoZSBkZWxlZ2F0aW9uIHJlZmFjdG9yLlxuICAgICAgY29uc3QgeyBhZGF0YSB9ID0gSlNPTi5wYXJzZShlbmNyeXB0ZWRSb3VuZDFTZXNzaW9uKSBhcyB7IGFkYXRhPzogc3RyaW5nIH07XG4gICAgICBhc3NlcnQuZXF1YWwoXG4gICAgICAgIGFkYXRhID09PSB1bmRlZmluZWQgPyBhZGF0YSA6IGRlY29kZVVSSUNvbXBvbmVudChhZGF0YSksXG4gICAgICAgIGBES0xTMjNfU0lHTklOR19ST1VORDFfU1RBVEU6JHtleHBlY3RlZEhhc2hCdWZmZXIudG9TdHJpbmcoJ2hleCcpfToke2Rlcml2YXRpb25QYXRofWBcbiAgICAgICk7XG4gICAgfSk7XG5cbiAgICBpdCgncHJvcGFnYXRlcyB0aGUgYmFzZSB1bnNpZ25lZFR4IGd1YXJkIHRocm91Z2ggdGhlIEVDRFNBIHJvdXRlJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciBJbnRlbnRpb25hbGx5IG1hbGZvcm1lZCB0byBleGVyY2lzZSB0aGUgcnVudGltZSBndWFyZC5cbiAgICAgIGNvbnN0IG5vVW5zaWduZWRUeDogVHhSZXF1ZXN0VHJhbnNhY3Rpb24gPSB7IHN0YXRlOiAncGVuZGluZ1NpZ25hdHVyZScsIHNpZ25hdHVyZVNoYXJlczogW10gfTtcbiAgICAgIGF3YWl0IGFzc2VydC5yZWplY3RzKFxuICAgICAgICBlY2RzYU1QQ3YyVXRpbHMuY3JlYXRlT2ZmbGluZVJvdW5kMVNoYXJlKHtcbiAgICAgICAgICB0eFJlcXVlc3Q6IGJ1aWxkVHhSZXF1ZXN0KHsgdHJhbnNhY3Rpb25zOiBbbm9VbnNpZ25lZFR4XSB9KSxcbiAgICAgICAgICBwcnY6ICd1bnVzZWQnLFxuICAgICAgICAgIHdhbGxldFBhc3NwaHJhc2UsXG4gICAgICAgIH0pLFxuICAgICAgICAvTWlzc2luZyB1bnNpZ25lZFR4IGluIHRyYW5zYWN0aW9ucy9cbiAgICAgICk7XG4gICAgfSk7XG4gIH0pO1xufSk7XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gRml4dHVyZSBidWlsZGVyc1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbmZ1bmN0aW9uIGJ1aWxkVHhSZXF1ZXN0KG92ZXJyaWRlczogUGFydGlhbDxUeFJlcXVlc3Q+ID0ge30pOiBUeFJlcXVlc3Qge1xuICByZXR1cm4ge1xuICAgIHR4UmVxdWVzdElkOiAndHgtcmVxdWVzdC1pZCcsXG4gICAgd2FsbGV0SWQ6ICd3YWxsZXQtaWQnLFxuICAgIHdhbGxldFR5cGU6ICdob3QnLFxuICAgIHZlcnNpb246IDEsXG4gICAgc3RhdGU6ICdpbml0aWFsaXplZCcsXG4gICAgZGF0ZTogbmV3IERhdGUoMCkudG9JU09TdHJpbmcoKSxcbiAgICB1c2VySWQ6ICd1c2VyLWlkJyxcbiAgICBpbnRlbnQ6IHt9LFxuICAgIHBvbGljaWVzQ2hlY2tlZDogdHJ1ZSxcbiAgICB1bnNpZ25lZFR4czogW10sXG4gICAgdHJhbnNhY3Rpb25zOiBbYnVpbGRUcmFuc2FjdGlvbigpXSxcbiAgICBsYXRlc3Q6IHRydWUsXG4gICAgLi4ub3ZlcnJpZGVzLFxuICB9O1xufVxuXG5mdW5jdGlvbiBidWlsZFR4UmVxdWVzdFdpdGhvdXRUcmFuc2FjdGlvbnMoKTogVHhSZXF1ZXN0IHtcbiAgY29uc3QgdHhSZXF1ZXN0ID0gYnVpbGRUeFJlcXVlc3QoKTtcbiAgZGVsZXRlIHR4UmVxdWVzdC50cmFuc2FjdGlvbnM7XG4gIHJldHVybiB0eFJlcXVlc3Q7XG59XG5cbmZ1bmN0aW9uIGJ1aWxkVHJhbnNhY3Rpb24ob3ZlcnJpZGVzOiBQYXJ0aWFsPFR4UmVxdWVzdFRyYW5zYWN0aW9uPiA9IHt9KTogVHhSZXF1ZXN0VHJhbnNhY3Rpb24ge1xuICByZXR1cm4geyBzdGF0ZTogJ3BlbmRpbmdTaWduYXR1cmUnLCB1bnNpZ25lZFR4OiBidWlsZFVuc2lnbmVkVHJhbnNhY3Rpb24oKSwgc2lnbmF0dXJlU2hhcmVzOiBbXSwgLi4ub3ZlcnJpZGVzIH07XG59XG5cbmZ1bmN0aW9uIGJ1aWxkVW5zaWduZWRUcmFuc2FjdGlvbihvdmVycmlkZXM6IFBhcnRpYWw8VW5zaWduZWRUcmFuc2FjdGlvbj4gPSB7fSk6IFVuc2lnbmVkVHJhbnNhY3Rpb24ge1xuICByZXR1cm4geyBzZXJpYWxpemVkVHhIZXg6ICdhYWJiY2NkZCcsIHNpZ25hYmxlSGV4OiAnZGVhZGJlZWYnLCBkZXJpdmF0aW9uUGF0aDogJ20vMCcsIC4uLm92ZXJyaWRlcyB9O1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIEVuY3J5cHRpb24gaGVscGVycyAobWlycm9ycyB0aGUgZWNkc2FNUEN2MiB0ZXN0IHBhdHRlcm4pXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuZnVuY3Rpb24gZW5jcnlwdFdpdGhTamNsKHBhc3N3b3JkOiBzdHJpbmcsIGlucHV0OiBzdHJpbmcsIGFkYXRhPzogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3Qgc2FsdCA9IHJhbmRvbUJ5dGVzKDgpO1xuICBjb25zdCBpdiA9IHJhbmRvbUJ5dGVzKDE2KTtcbiAgcmV0dXJuIHNqY2wuZW5jcnlwdChwYXNzd29yZCwgaW5wdXQsIHtcbiAgICBzYWx0OiBbYnl0ZXNUb1dvcmQoc2FsdC5zdWJhcnJheSgwLCA0KSksIGJ5dGVzVG9Xb3JkKHNhbHQuc3ViYXJyYXkoNCkpXSxcbiAgICBpdjogW1xuICAgICAgYnl0ZXNUb1dvcmQoaXYuc3ViYXJyYXkoMCwgNCkpLFxuICAgICAgYnl0ZXNUb1dvcmQoaXYuc3ViYXJyYXkoNCwgOCkpLFxuICAgICAgYnl0ZXNUb1dvcmQoaXYuc3ViYXJyYXkoOCwgMTIpKSxcbiAgICAgIGJ5dGVzVG9Xb3JkKGl2LnN1YmFycmF5KDEyLCAxNikpLFxuICAgIF0sXG4gICAgLi4uKGFkYXRhICE9PSB1bmRlZmluZWQgPyB7IGFkYXRhIH0gOiB7fSksXG4gIH0pO1xufVxuXG5mdW5jdGlvbiBieXRlc1RvV29yZChieXRlczogVWludDhBcnJheSk6IG51bWJlciB7XG4gIGlmIChieXRlcy5sZW5ndGggIT09IDQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2J5dGVzIG11c3QgaGF2ZSBsZW5ndGggNCcpO1xuICB9XG4gIHJldHVybiBieXRlcy5yZWR1Y2UoKG51bSwgYnl0ZSkgPT4gbnVtICogMHgxMDAgKyBieXRlLCAwKTtcbn1cbiJdfQ==
|
|
399
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZVRTU1V0aWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGVzdC91bml0L2JpdGdvL3V0aWxzL3Rzcy9iYXNlVFNTVXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSwrQ0FBaUM7QUFDakMsbUNBQTJDO0FBQzNDLG9EQUFzQztBQUN0QyxpREFBbUM7QUFDbkMsNkNBQStCO0FBQy9CLHVEQUF5QztBQUN6Qyx5REFBb0Q7QUFFcEQsNENBQThHO0FBQzlHLG1HQUEyRTtBQVkzRSxNQUFNLGdCQUFpQixTQUFRLHNCQUFvQjtJQUNqRCxzQ0FBc0MsQ0FDcEMsU0FBb0IsRUFDcEIsMEJBQW1DO1FBRW5DLE9BQU8sSUFBSSxDQUFDLCtCQUErQixDQUFDLFNBQVMsRUFBRSwwQkFBMEIsQ0FBQyxDQUFDO0lBQ3JGLENBQUM7SUFFRCxvQkFBb0IsQ0FBQyxLQUFhLEVBQUUsVUFBa0IsRUFBRSxvQkFBNEI7UUFDbEYsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsVUFBVSxFQUFFLG9CQUFvQixDQUFDLENBQUM7SUFDOUQsQ0FBQztJQUVELDZCQUE2QixDQUMzQixpQkFBeUIsRUFDekIsc0JBQThCLEVBQzlCLGdCQUF3QixFQUN4QixLQUFhLEVBQ2IseUJBQWlDO1FBRWpDLE9BQU8sSUFBSSxDQUFDLHNCQUFzQixDQUNoQyxpQkFBaUIsRUFDakIsc0JBQXNCLEVBQ3RCLGdCQUFnQixFQUNoQixLQUFLLEVBQ0wseUJBQXlCLENBQzFCLENBQUM7SUFDSixDQUFDO0NBQ0Y7QUFFRCxRQUFRLENBQUMsZ0JBQWdCLEVBQUU7SUFDekIsTUFBTSxnQkFBZ0IsR0FBRyxlQUFlLENBQUM7SUFDekMsTUFBTSxnQ0FBZ0MsR0FBRyw4QkFBOEIsQ0FBQztJQUN4RSxNQUFNLHVCQUF1QixHQUFHLDhCQUE4QixDQUFDO0lBRS9ELElBQUksWUFBOEIs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LENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsR0FBRyxHQUFHLEtBQUssR0FBRyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDNUQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGFzc2VydCBmcm9tICdhc3NlcnQnO1xuaW1wb3J0IHsgSGFzaCwgcmFuZG9tQnl0ZXMgfSBmcm9tICdjcnlwdG8nO1xuaW1wb3J0IGNyZWF0ZUtlY2Nha0hhc2ggZnJvbSAna2VjY2FrJztcbmltcG9ydCAqIGFzIG9wZW5wZ3AgZnJvbSAnb3BlbnBncCc7XG5pbXBvcnQgKiBhcyBzaW5vbiBmcm9tICdzaW5vbic7XG5pbXBvcnQgKiBhcyBzamNsIGZyb20gJ0BiaXRnby1iZXRhL3NqY2wnO1xuaW1wb3J0IHsgRGtsc1V0aWxzIH0gZnJvbSAnQGJpdGdvLWJldGEvc2RrLWxpYi1tcGMnO1xuXG5pbXBvcnQgeyBCaXRHb0Jhc2UsIEVjZHNhTVBDdjJVdGlscywgSUJhc2VDb2luLCBJV2FsbGV0LCBSZXF1ZXN0VHJhY2VyLCBUeFJlcXVlc3QgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi9zcmMnO1xuaW1wb3J0IEJhc2VUc3NVdGlscyBmcm9tICcuLi8uLi8uLi8uLi8uLi9zcmMvYml0Z28vdXRpbHMvdHNzL2Jhc2VUU1NVdGlscyc7XG5cbnR5cGUgQml0Z29HcGdLZXlQYWlyID0gb3BlbnBncC5TZXJpYWxpemVkS2V5UGFpcjxzdHJpbmc+ICYgeyByZXZvY2F0aW9uQ2VydGlmaWNhdGU6IHN0cmluZyB9O1xudHlwZSBUeFJlcXVlc3RUcmFuc2FjdGlvbiA9IE5vbk51bGxhYmxlPFR4UmVxdWVzdFsndHJhbnNhY3Rpb25zJ10+W251bWJlcl07XG50eXBlIFVuc2lnbmVkVHJhbnNhY3Rpb24gPSBUeFJlcXVlc3RUcmFuc2FjdGlvblsndW5zaWduZWRUeCddO1xudHlwZSBTaWduYWJsZUhleEFuZERlcml2YXRpb25QYXRoID0ge1xuICBzaWduYWJsZUhleDogc3RyaW5nO1xuICBkZXJpdmF0aW9uUGF0aDogc3RyaW5nO1xuICBzZXJpYWxpemVkVHhIZXg6IHN0cmluZyB8IHVuZGVmaW5lZDtcbn07XG50eXBlIERlY3J5cHRlZEdwZ0tleXMgPSB7IGJpdGdvR3BnS2V5OiBvcGVucGdwLktleTsgdXNlckdwZ1BydktleTogb3BlbnBncC5Qcml2YXRlS2V5IH07XG5cbmNsYXNzIFRlc3RCYXNlVHNzVXRpbHMgZXh0ZW5kcyBCYXNlVHNzVXRpbHM8QnVmZmVyPiB7XG4gIGdldFNpZ25hYmxlSGV4QW5kRGVyaXZhdGlvblBhdGhGb3JUZXN0KFxuICAgIHR4UmVxdWVzdDogVHhSZXF1ZXN0LFxuICAgIG1pc3NpbmdUcmFuc2FjdGlvbnNNZXNzYWdlPzogc3RyaW5nXG4gICk6IFNpZ25hYmxlSGV4QW5kRGVyaXZhdGlvblBhdGgge1xuICAgIHJldHVybiB0aGlzLmdldFNpZ25hYmxlSGV4QW5kRGVyaXZhdGlvblBhdGgodHhSZXF1ZXN0LCBtaXNzaW5nVHJhbnNhY3Rpb25zTWVzc2FnZSk7XG4gIH1cblxuICB2YWxpZGF0ZUFkYXRhRm9yVGVzdChhZGF0YTogc3RyaW5nLCBjeXBoZXJ0ZXh0OiBzdHJpbmcsIHJvdW5kRG9tYWluU2VwYXJhdG9yOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLnZhbGlkYXRlQWRhdGEoYWRhdGEsIGN5cGhlcnRleHQsIHJvdW5kRG9tYWluU2VwYXJhdG9yKTtcbiAgfVxuXG4gIGdldEJpdGdvQW5kVXNlckdwZ0tleXNGb3JUZXN0KFxuICAgIGJpdGdvUHVibGljR3BnS2V5OiBzdHJpbmcsXG4gICAgZW5jcnlwdGVkVXNlckdwZ1BydktleTogc3RyaW5nLFxuICAgIHdhbGxldFBhc3NwaHJhc2U6IHN0cmluZyxcbiAgICBhZGF0YTogc3RyaW5nLFxuICAgIHVzZXJHcGdLZXlEb21haW5TZXBhcmF0b3I6IHN0cmluZ1xuICApOiBQcm9taXNlPERlY3J5cHRlZEdwZ0tleXM+IHtcbiAgICByZXR1cm4gdGhpcy5nZXRCaXRnb0FuZFVzZXJHcGdLZXlzKFxuICAgICAgYml0Z29QdWJsaWNHcGdLZXksXG4gICAgICBlbmNyeXB0ZWRVc2VyR3BnUHJ2S2V5LFxuICAgICAgd2FsbGV0UGFzc3BocmFzZSxcbiAgICAgIGFkYXRhLFxuICAgICAgdXNlckdwZ0tleURvbWFpblNlcGFyYXRvclxuICAgICk7XG4gIH1cbn1cblxuZGVzY3JpYmUoJ0Jhc2UgVFNTIFV0aWxzJywgZnVuY3Rpb24gKCkge1xuICBjb25zdCB3YWxsZXRQYXNzcGhyYXNlID0gJ3Rlc3QtcGFzc3dvcmQnO1xuICBjb25zdCBzaWduaW5nVXNlckdwZ0tleURvbWFpblNlcGFyYXRvciA9ICdNUFNfRFNHX1NJR05JTkdfVVNFUl9HUEdfS0VZJztcbiAgY29uc3Qgcm91bmRPbmVEb21haW5TZXBhcmF0b3IgPSAnTVBTX0RTR19TSUdOSU5HX1JPVU5EMV9TVEFURSc7XG5cbiAgbGV0IGJhc2VUc3NVdGlsczogVGVzdEJhc2VUc3NVdGlscztcbiAgbGV0IGVjZHNhTVBDdjJVdGlsczogRWNkc2FNUEN2MlV0aWxzO1xuICBsZXQgbW9ja0JpdGdvOiBCaXRHb0Jhc2U7XG4gIGxldCBkZWNyeXB0QXN5bmNTdHViOiBzaW5vbi5TaW5vblN0dWI7XG4gIGxldCBiaXRnb0dwZ0tleVBhaXI6IEJpdGdvR3BnS2V5UGFpcjtcbiAgbGV0IHVzZXJHcGdLZXlQYWlyOiBCaXRnb0dwZ0tleVBhaXI7XG4gIGxldCB1c2VyU2hhcmU6IEJ1ZmZlcjtcblxuICBiZWZvcmUoYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgIG9wZW5wZ3AuY29uZmlnLnJlamVjdEN1cnZlcyA9IG5ldyBTZXQoKTtcbiAgICBiaXRnb0dwZ0tleVBhaXIgPSBhd2FpdCBvcGVucGdwLmdlbmVyYXRlS2V5KHtcbiAgICAgIHVzZXJJRHM6IFt7IG5hbWU6ICdiaXRnbycsIGVtYWlsOiAnYml0Z29AdGVzdC5jb20nIH1dLFxuICAgICAgY3VydmU6ICdlZDI1NTE5JyxcbiAgICAgIGZvcm1hdDogJ2FybW9yZWQnLFxuICAgIH0pO1xuICAgIHVzZXJHcGdLZXlQYWlyID0gYXdhaXQgb3BlbnBncC5nZW5lcmF0ZUtleSh7XG4gICAgICB1c2VySURzOiBbeyBuYW1lOiAndXNlcicsIGVtYWlsOiAndXNlckB0ZXN0LmNvbScgfV0sXG4gICAgICBjdXJ2ZTogJ2VkMjU1MTknLFxuICAgICAgZm9ybWF0OiAnYXJtb3JlZCcsXG4gICAgfSk7XG5cbiAgICBjb25zdCBbdXNlckRrZ1Nlc3Npb25dID0gYXdhaXQgRGtsc1V0aWxzLmdlbmVyYXRlREtHS2V5U2hhcmVzKCk7XG4gICAgdXNlclNoYXJlID0gdXNlckRrZ1Nlc3Npb24uZ2V0S2V5U2hhcmUoKTtcbiAgfSk7XG5cbiAgYmVmb3JlRWFjaChmdW5jdGlvbiAoKSB7XG4gICAgZGVjcnlwdEFzeW5jU3R1YiA9IHNpbm9uLnN0dWIoKS5jYWxsc0Zha2UoYXN5bmMgKHsgaW5wdXQsIHBhc3N3b3JkIH06IFBhcmFtZXRlcnM8Qml0R29CYXNlWydkZWNyeXB0J10+WzBdKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBwYXJzZWQgPSBKU09OLnBhcnNlKGlucHV0KTtcbiAgICAgICAgaWYgKHBhcnNlZC52ID09PSAyICYmIHBhcnNlZC5wbGFpbnRleHQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHJldHVybiBwYXJzZWQucGxhaW50ZXh0O1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIHt9XG4gICAgICByZXR1cm4gc2pjbC5kZWNyeXB0KHBhc3N3b3JkID8/ICcnLCBpbnB1dCk7XG4gICAgfSk7XG5cbiAgICBjb25zdCBtb2NrQmcgPSB7fSBhcyBCaXRHb0Jhc2U7XG4gICAgbW9ja0JnLmdldEVudiA9IHNpbm9uLnN0dWIoKS5yZXR1cm5zKCd0ZXN0Jyk7XG4gICAgbW9ja0JnLmVuY3J5cHQgPSBzaW5vblxuICAgICAgLnN0dWIoKVxuICAgICAgLmNhbGxzRmFrZSgocGFyYW1zKSA9PiBlbmNyeXB0V2l0aFNqY2wocGFyYW1zLnBhc3N3b3JkID8/ICcnLCBwYXJhbXMuaW5wdXQsIHBhcmFtcy5hZGF0YSkpO1xuICAgIG1vY2tCZy5lbmNyeXB0ID0gc2lub25cbiAgICAgIC5zdHViKClcbiAgICAgIC5jYWxsc0Zha2UoYXN5bmMgKHBhcmFtcykgPT4gZW5jcnlwdFdpdGhTamNsKHBhcmFtcy5wYXNzd29yZCA/PyAnJywgcGFyYW1zLmlucHV0LCBwYXJhbXMuYWRhdGEpKTtcbiAgICBtb2NrQmcuZGVjcnlwdCA9IHNpbm9uLnN0dWIoKS5jYWxsc0Zha2UoKHBhcmFtcykgPT4gc2pjbC5kZWNyeXB0KHBhcmFtcy5wYXNzd29yZCA/PyAnJywgcGFyYW1zLmlucHV0KSk7XG4gICAgbW9ja0JnLmRlY3J5cHQgPSBkZWNyeXB0QXN5bmNTdHViO1xuICAgIG1vY2tCaXRnbyA9IG1vY2tCZztcblxuICAgIGNvbnN0IG1vY2tDb2luID0ge30gYXMgSUJhc2VDb2luO1xuICAgIG1vY2tDb2luLmdldEhhc2hGdW5jdGlvbiA9IHNpbm9uLnN0dWIoKS5jYWxsc0Zha2UoKCkgPT4gY3JlYXRlS2VjY2FrSGFzaCgna2VjY2FrMjU2JykgYXMgSGFzaCk7XG5cbiAgICBiYXNlVHNzVXRpbHMgPSBuZXcgVGVzdEJhc2VUc3NVdGlscyhtb2NrQml0Z28sIG1vY2tDb2luKTtcbiAgICBlY2RzYU1QQ3YyVXRpbHMgPSBuZXcgRWNkc2FNUEN2MlV0aWxzKG1vY2tCaXRnbywgbW9ja0NvaW4pO1xuICB9KTtcblxuICBkZXNjcmliZSgnZ2V0U2lnbmFibGVIZXhBbmREZXJpdmF0aW9uUGF0aCcsIGZ1bmN0aW9uICgpIHtcbiAgICBpdCgnZXh0cmFjdHMgc2lnbmFibGVIZXggYW5kIGRlcml2YXRpb25QYXRoIGZyb20gYSB2YWxpZCB0eFJlcXVlc3QnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB0eFJlcXVlc3QgPSBidWlsZFR4UmVxdWVzdCh7XG4gICAgICAgIHRyYW5zYWN0aW9uczogW1xuICAgICAgICAgIGJ1aWxkVHJhbnNhY3Rpb24oe1xuICAgICAgICAgICAgdW5zaWduZWRUeDogYnVpbGRVbnNpZ25lZFRyYW5zYWN0aW9uKHsgc2lnbmFibGVIZXg6ICdkZWFkYmVlZicsIGRlcml2YXRpb25QYXRoOiAnbS8wLzAnIH0pLFxuICAgICAgICAgIH0pLFxuICAgICAgICBdLFxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IHJlc3VsdCA9IGJhc2VUc3NVdGlscy5nZXRTaWduYWJsZUhleEFuZERlcml2YXRpb25QYXRoRm9yVGVzdCh0eFJlcXVlc3QpO1xuICAgICAgYXNzZXJ0LmVxdWFsKHJlc3VsdC5zaWduYWJsZUhleCwgJ2RlYWRiZWVmJyk7XG4gICAgICBhc3NlcnQuZXF1YWwocmVzdWx0LmRlcml2YXRpb25QYXRoLCAnbS8wLzAnKTtcbiAgICB9KTtcblxuICAgIGl0KCd0aHJvd3Mgd2hlbiB0cmFuc2FjdGlvbnMgZmllbGQgaXMgbWlzc2luZycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGFzc2VydC50aHJvd3MoXG4gICAgICAgICgpID0+IGJhc2VUc3NVdGlscy5nZXRTaWduYWJsZUhleEFuZERlcml2YXRpb25QYXRoRm9yVGVzdChidWlsZFR4UmVxdWVzdFdpdGhvdXRUcmFuc2FjdGlvbnMoKSksXG4gICAgICAgIC9jcmVhdGVPZmZsaW5lU2hhcmUgcmVxdWlyZXMgZXhhY3RseSBvbmUgdHJhbnNhY3Rpb24gaW4gdHhSZXF1ZXN0L1xuICAgICAgKTtcbiAgICB9KTtcblxuICAgIGl0KCd0aHJvd3Mgd2hlbiB0cmFuc2FjdGlvbnMgYXJyYXkgaXMgZW1wdHknLCBmdW5jdGlvbiAoKSB7XG4gICAgICBhc3NlcnQudGhyb3dzKFxuICAgICAgICAoKSA9PiBiYXNlVHNzVXRpbHMuZ2V0U2lnbmFibGVIZXhBbmREZXJpdmF0aW9uUGF0aEZvclRlc3QoYnVpbGRUeFJlcXVlc3QoeyB0cmFuc2FjdGlvbnM6IFtdIH0pKSxcbiAgICAgICAgL2NyZWF0ZU9mZmxpbmVTaGFyZSByZXF1aXJlcyBleGFjdGx5IG9uZSB0cmFuc2FjdGlvbiBpbiB0eFJlcXVlc3QvXG4gICAgICApO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Rocm93cyB3aGVuIHRyYW5zYWN0aW9ucyBhcnJheSBoYXMgbW9yZSB0aGFuIG9uZSBlbGVtZW50JywgZnVuY3Rpb24gKCkge1xuICAgICAgYXNzZXJ0LnRocm93cyhcbiAgICAgICAgKCkgPT5cbiAgICAgICAgICBiYXNlVHNzVXRpbHMuZ2V0U2lnbmFibGVIZXhBbmREZXJpdmF0aW9uUGF0aEZvclRlc3QoXG4gICAgICAgICAgICBidWlsZFR4UmVxdWVzdCh7XG4gICAgICAgICAgICAgIHRyYW5zYWN0aW9uczogW1xuICAgICAgICAgICAgICAgIGJ1aWxkVHJhbnNhY3Rpb24oe1xuICAgICAgICAgICAgICAgICAgdW5zaWduZWRUeDogYnVpbGRVbnNpZ25lZFRyYW5zYWN0aW9uKHsgc2lnbmFibGVIZXg6ICdhYWEnLCBkZXJpdmF0aW9uUGF0aDogJ20vMCcgfSksXG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgYnVpbGRUcmFuc2FjdGlvbih7XG4gICAgICAgICAgICAgICAgICB1bnNpZ25lZFR4OiBidWlsZFVuc2lnbmVkVHJhbnNhY3Rpb24oeyBzaWduYWJsZUhleDogJ2JiYicsIGRlcml2YXRpb25QYXRoOiAnbS8xJyB9KSxcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgKSxcbiAgICAgICAgL2NyZWF0ZU9mZmxpbmVTaGFyZSByZXF1aXJlcyBleGFjdGx5IG9uZSB0cmFuc2FjdGlvbiBpbiB0eFJlcXVlc3QvXG4gICAgICApO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Rocm93cyB3aGVuIHVuc2lnbmVkVHggaXMgbWlzc2luZycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgSW50ZW50aW9uYWxseSBtYWxmb3JtZWQgdG8gZXhlcmNpc2UgdGhlIHJ1bnRpbWUgZ3VhcmQuXG4gICAgICBjb25zdCBub1Vuc2lnbmVkVHg6IFR4UmVxdWVzdFRyYW5zYWN0aW9uID0geyBzdGF0ZTogJ3BlbmRpbmdTaWduYXR1cmUnLCBzaWduYXR1cmVTaGFyZXM6IFtdIH07XG4gICAgICBhc3NlcnQudGhyb3dzKFxuICAgICAgICAoKSA9PiBiYXNlVHNzVXRpbHMuZ2V0U2lnbmFibGVIZXhBbmREZXJpdmF0aW9uUGF0aEZvclRlc3QoYnVpbGRUeFJlcXVlc3QoeyB0cmFuc2FjdGlvbnM6IFtub1Vuc2lnbmVkVHhdIH0pKSxcbiAgICAgICAgL01pc3NpbmcgdW5zaWduZWRUeCBpbiB0cmFuc2FjdGlvbnMvXG4gICAgICApO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Rocm93cyB3aGVuIHNpZ25hYmxlSGV4IGlzIG1pc3NpbmcnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIEludGVudGlvbmFsbHkgbWFsZm9ybWVkIHRvIGV4ZXJjaXNlIHRoZSBydW50aW1lIGd1YXJkLlxuICAgICAgY29uc3Qgbm9TaWduYWJsZUhleDogVW5zaWduZWRUcmFuc2FjdGlvbiA9IHsgc2VyaWFsaXplZFR4SGV4OiAnYWFiYmNjZGQnLCBkZXJpdmF0aW9uUGF0aDogJ20vMCcgfTtcbiAgICAgIGFzc2VydC50aHJvd3MoXG4gICAgICAgICgpID0+XG4gICAgICAgICAgYmFzZVRzc1V0aWxzLmdldFNpZ25hYmxlSGV4QW5kRGVyaXZhdGlvblBhdGhGb3JUZXN0KFxuICAgICAgICAgICAgYnVpbGRUeFJlcXVlc3QoeyB0cmFuc2FjdGlvbnM6IFtidWlsZFRyYW5zYWN0aW9uKHsgdW5zaWduZWRUeDogbm9TaWduYWJsZUhleCB9KV0gfSlcbiAgICAgICAgICApLFxuICAgICAgICAvTWlzc2luZyBzaWduYWJsZUhleCBpbiB1bnNpZ25lZFR4L1xuICAgICAgKTtcbiAgICB9KTtcblxuICAgIGl0KCd0aHJvd3Mgd2hlbiBkZXJpdmF0aW9uUGF0aCBpcyBtaXNzaW5nJywgZnVuY3Rpb24gKCkge1xuICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciBJbnRlbnRpb25hbGx5IG1hbGZvcm1lZCB0byBleGVyY2lzZSB0aGUgcnVudGltZSBndWFyZC5cbiAgICAgIGNvbnN0IG5vRGVyaXZhdGlvblBhdGg6IFVuc2lnbmVkVHJhbnNhY3Rpb24gPSB7IHNlcmlhbGl6ZWRUeEhleDogJ2FhYmJjY2RkJywgc2lnbmFibGVIZXg6ICdkZWFkYmVlZicgfTtcbiAgICAgIGFzc2VydC50aHJvd3MoXG4gICAgICAgICgpID0+XG4gICAgICAgICAgYmFzZVRzc1V0aWxzLmdldFNpZ25hYmxlSGV4QW5kRGVyaXZhdGlvblBhdGhGb3JUZXN0KFxuICAgICAgICAgICAgYnVpbGRUeFJlcXVlc3QoeyB0cmFuc2FjdGlvbnM6IFtidWlsZFRyYW5zYWN0aW9uKHsgdW5zaWduZWRUeDogbm9EZXJpdmF0aW9uUGF0aCB9KV0gfSlcbiAgICAgICAgICApLFxuICAgICAgICAvTWlzc2luZyBkZXJpdmF0aW9uUGF0aCBpbiB1bnNpZ25lZFR4L1xuICAgICAgKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ3ZhbGlkYXRlQWRhdGEnLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ3Bhc3NlcyB3aGVuIGFkYXRhIG1hdGNoZXMgd2l0aCBkb21haW4gc2VwYXJhdG9yJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgYWRhdGEgPSAndGVzdC12YWx1ZSc7XG4gICAgICBjb25zdCBjeXBoZXJ0ZXh0ID0gYXdhaXQgbW9ja0JpdGdvLmVuY3J5cHQoe1xuICAgICAgICBpbnB1dDogJ3NlY3JldCcsXG4gICAgICAgIHBhc3N3b3JkOiB3YWxsZXRQYXNzcGhyYXNlLFxuICAgICAgICBhZGF0YTogYCR7cm91bmRPbmVEb21haW5TZXBhcmF0b3J9OiR7YWRhdGF9YCxcbiAgICAgIH0pO1xuICAgICAgYXNzZXJ0LmRvZXNOb3RUaHJvdygoKSA9PiBiYXNlVHNzVXRpbHMudmFsaWRhdGVBZGF0YUZvclRlc3QoYWRhdGEsIGN5cGhlcnRleHQsIHJvdW5kT25lRG9tYWluU2VwYXJhdG9yKSk7XG4gICAgfSk7XG5cbiAgICBpdCgncGFzc2VzIHdoZW4gYWRhdGEgbWF0Y2hlcyB3aXRob3V0IGRvbWFpbiBzZXBhcmF0b3InLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBhZGF0YSA9ICd0ZXN0LXZhbHVlJztcbiAgICAgIGNvbnN0IGN5cGhlcnRleHQgPSBhd2FpdCBtb2NrQml0Z28uZW5jcnlwdCh7IGlucHV0OiAnc2VjcmV0JywgcGFzc3dvcmQ6IHdhbGxldFBhc3NwaHJhc2UsIGFkYXRhIH0pO1xuICAgICAgYXNzZXJ0LmRvZXNOb3RUaHJvdygoKSA9PiBiYXNlVHNzVXRpbHMudmFsaWRhdGVBZGF0YUZvclRlc3QoYWRhdGEsIGN5cGhlcnRleHQsIHJvdW5kT25lRG9tYWluU2VwYXJhdG9yKSk7XG4gICAgfSk7XG5cbiAgICBpdCgndGhyb3dzIHdoZW4gYWRhdGEgZG9lcyBub3QgbWF0Y2gnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBjeXBoZXJ0ZXh0ID0gYXdhaXQgbW9ja0JpdGdvLmVuY3J5cHQoe1xuICAgICAgICBpbnB1dDogJ3NlY3JldCcsXG4gICAgICAgIHBhc3N3b3JkOiB3YWxsZXRQYXNzcGhyYXNlLFxuICAgICAgICBhZGF0YTogYCR7cm91bmRPbmVEb21haW5TZXBhcmF0b3J9OmNvcnJlY3RgLFxuICAgICAgfSk7XG4gICAgICBhc3NlcnQudGhyb3dzKFxuICAgICAgICAoKSA9PiBiYXNlVHNzVXRpbHMudmFsaWRhdGVBZGF0YUZvclRlc3QoJ3dyb25nJywgY3lwaGVydGV4dCwgcm91bmRPbmVEb21haW5TZXBhcmF0b3IpLFxuICAgICAgICAvQWRhdGEgZG9lcyBub3QgbWF0Y2ggY3lwaGVydGV4dCBhZGF0YS9cbiAgICAgICk7XG4gICAgfSk7XG5cbiAgICBpdCgndGhyb3dzIHdoZW4gY3lwaGVydGV4dCBpcyBub3QgdmFsaWQgSlNPTicsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGFzc2VydC50aHJvd3MoXG4gICAgICAgICgpID0+IGJhc2VUc3NVdGlscy52YWxpZGF0ZUFkYXRhRm9yVGVzdCgnYWRhdGEnLCAnbm90LWpzb24nLCByb3VuZE9uZURvbWFpblNlcGFyYXRvciksXG4gICAgICAgIC9GYWlsZWQgdG8gcGFyc2UgY3lwaGVydGV4dCB0byBKU09OL1xuICAgICAgKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2dldEJpdGdvQW5kVXNlckdwZ0tleXMnLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ2RlY3J5cHRzIHYxIFNKQ0wgZW52ZWxvcGUgd2l0aG91dCBhZGF0YSBhbmQgc2tpcHMgdmFsaWRhdGlvbicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGVuY3J5cHRlZFVzZXJHcGdQcnZLZXkgPSBhd2FpdCBtb2NrQml0Z28uZW5jcnlwdCh7XG4gICAgICAgIGlucHV0OiB1c2VyR3BnS2V5UGFpci5wcml2YXRlS2V5LFxuICAgICAgICBwYXNzd29yZDogd2FsbGV0UGFzc3BocmFzZSxcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBiYXNlVHNzVXRpbHMuZ2V0Qml0Z29BbmRVc2VyR3BnS2V5c0ZvclRlc3QoXG4gICAgICAgIGJpdGdvR3BnS2V5UGFpci5wdWJsaWNLZXksXG4gICAgICAgIGVuY3J5cHRlZFVzZXJHcGdQcnZLZXksXG4gICAgICAgIHdhbGxldFBhc3NwaHJhc2UsXG4gICAgICAgICcnLFxuICAgICAgICBzaWduaW5nVXNlckdwZ0tleURvbWFpblNlcGFyYXRvclxuICAgICAgKTtcblxuICAgICAgYXNzZXJ0Lm9rKHJlc3VsdC5iaXRnb0dwZ0tleSk7XG4gICAgICBhc3NlcnQuZXF1YWwocmVzdWx0LnVzZXJHcGdQcnZLZXkuaXNQcml2YXRlKCksIHRydWUpO1xuICAgIH0pO1xuXG4gICAgaXQoJ2RlY3J5cHRzIHYxIFNKQ0wgZW52ZWxvcGUgd2l0aCBtYXRjaGluZyBhZGF0YScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGFkYXRhID0gJ3Rlc3QtYWRhdGEnO1xuICAgICAgY29uc3QgZW5jcnlwdGVkVXNlckdwZ1BydktleSA9IGF3YWl0IG1vY2tCaXRnby5lbmNyeXB0KHtcbiAgICAgICAgaW5wdXQ6IHVzZXJHcGdLZXlQYWlyLnByaXZhdGVLZXksXG4gICAgICAgIHBhc3N3b3JkOiB3YWxsZXRQYXNzcGhyYXNlLFxuICAgICAgICBhZGF0YTogYCR7c2lnbmluZ1VzZXJHcGdLZXlEb21haW5TZXBhcmF0b3J9OiR7YWRhdGF9YCxcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBiYXNlVHNzVXRpbHMuZ2V0Qml0Z29BbmRVc2VyR3BnS2V5c0ZvclRlc3QoXG4gICAgICAgIGJpdGdvR3BnS2V5UGFpci5wdWJsaWNLZXksXG4gICAgICAgIGVuY3J5cHRlZFVzZXJHcGdQcnZLZXksXG4gICAgICAgIHdhbGxldFBhc3NwaHJhc2UsXG4gICAgICAgIGFkYXRhLFxuICAgICAgICBzaWduaW5nVXNlckdwZ0tleURvbWFpblNlcGFyYXRvclxuICAgICAgKTtcblxuICAgICAgYXNzZXJ0Lm9rKHJlc3VsdC5iaXRnb0dwZ0tleSk7XG4gICAgICBhc3NlcnQuZXF1YWwocmVzdWx0LnVzZXJHcGdQcnZLZXkuaXNQcml2YXRlKCksIHRydWUpO1xuICAgIH0pO1xuXG4gICAgaXQoJ2RlY3J5cHRzIHZpYSBkZWNyeXB0IGFuZCByZXR1cm5zIEdQRyBrZXlzJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgYWRhdGEgPSAndGVzdC1hZGF0YSc7XG4gICAgICAvLyBVc2UgYSBmYWtlIHYyIGVudmVsb3BlICh2OjIpIHNvIGlzVjJFbnZlbG9wZSByZXR1cm5zIHRydWUgYW5kIGRlY3J5cHQgaXMgY2FsbGVkLlxuICAgICAgLy8gVGhlIHN0dWIgZXh0cmFjdHMgcGxhaW50ZXh0IGRpcmVjdGx5IGZyb20gdGhpcyBmYWtlIGZvcm1hdC5cbiAgICAgIGNvbnN0IGVuY3J5cHRlZFVzZXJHcGdQcnZLZXkgPSBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgIHY6IDIsXG4gICAgICAgIGFkYXRhOiBgJHtzaWduaW5nVXNlckdwZ0tleURvbWFpblNlcGFyYXRvcn06JHthZGF0YX1gLFxuICAgICAgICBwbGFpbnRleHQ6IHVzZXJHcGdLZXlQYWlyLnByaXZhdGVLZXksXG4gICAgICB9KTtcblxuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgYmFzZVRzc1V0aWxzLmdldEJpdGdvQW5kVXNlckdwZ0tleXNGb3JUZXN0KFxuICAgICAgICBiaXRnb0dwZ0tleVBhaXIucHVibGljS2V5LFxuICAgICAgICBlbmNyeXB0ZWRVc2VyR3BnUHJ2S2V5LFxuICAgICAgICB3YWxsZXRQYXNzcGhyYXNlLFxuICAgICAgICBhZGF0YSxcbiAgICAgICAgc2lnbmluZ1VzZXJHcGdLZXlEb21haW5TZXBhcmF0b3JcbiAgICAgICk7XG5cbiAgICAgIHNpbm9uLmFzc2VydC5jYWxsZWRPbmNlKGRlY3J5cHRBc3luY1N0dWIpO1xuICAgICAgYXNzZXJ0Lm9rKHJlc3VsdC5iaXRnb0dwZ0tleSk7XG4gICAgICBhc3NlcnQuZXF1YWwocmVzdWx0LnVzZXJHcGdQcnZLZXkuaXNQcml2YXRlKCksIHRydWUpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Rocm93cyB3aGVuIGFkYXRhIGRvZXMgbm90IG1hdGNoJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgZW5jcnlwdGVkVXNlckdwZ1BydktleSA9IGF3YWl0IG1vY2tCaXRnby5lbmNyeXB0KHtcbiAgICAgICAgaW5wdXQ6IHVzZXJHcGdLZXlQYWlyLnByaXZhdGVLZXksXG4gICAgICAgIHBhc3N3b3JkOiB3YWxsZXRQYXNzcGhyYXNlLFxuICAgICAgICBhZGF0YTogYCR7c2lnbmluZ1VzZXJHcGdLZXlEb21haW5TZXBhcmF0b3J9OmNvcnJlY3QtYWRhdGFgLFxuICAgICAgfSk7XG5cbiAgICAgIGF3YWl0IGFzc2VydC5yZWplY3RzKFxuICAgICAgICBiYXNlVHNzVXRpbHMuZ2V0Qml0Z29BbmRVc2VyR3BnS2V5c0ZvclRlc3QoXG4gICAgICAgICAgYml0Z29HcGdLZXlQYWlyLnB1YmxpY0tleSxcbiAgICAgICAgICBlbmNyeXB0ZWRVc2VyR3BnUHJ2S2V5LFxuICAgICAgICAgIHdhbGxldFBhc3NwaHJhc2UsXG4gICAgICAgICAgJ3dyb25nLWFkYXRhJyxcbiAgICAgICAgICBzaWduaW5nVXNlckdwZ0tleURvbWFpblNlcGFyYXRvclxuICAgICAgICApLFxuICAgICAgICAvQWRhdGEgZG9lcyBub3QgbWF0Y2ggY3lwaGVydGV4dCBhZGF0YS9cbiAgICAgICk7XG4gICAgfSk7XG5cbiAgICBpdCgndGhyb3dzIHdoZW4gY3lwaGVydGV4dCBpcyBub3QgdmFsaWQgSlNPTicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGF3YWl0IGFzc2VydC5yZWplY3RzKFxuICAgICAgICBiYXNlVHNzVXRpbHMuZ2V0Qml0Z29BbmRVc2VyR3BnS2V5c0ZvclRlc3QoXG4gICAgICAgICAgYml0Z29HcGdLZXlQYWlyLnB1YmxpY0tleSxcbiAgICAgICAgICAnbm90LXZhbGlkLWpzb24nLFxuICAgICAgICAgIHdhbGxldFBhc3NwaHJhc2UsXG4gICAgICAgICAgJ3Rlc3QtYWRhdGEnLFxuICAgICAgICAgIHNpZ25pbmdVc2VyR3BnS2V5RG9tYWluU2VwYXJhdG9yXG4gICAgICAgICksXG4gICAgICAgIC9qc29uIGRlY29kZXxGYWlsZWQgdG8gcGFyc2UgY3lwaGVydGV4dCB0byBKU09OL1xuICAgICAgKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ3JlY3JlYXRlVHhSZXF1ZXN0JywgZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIG1ha2VXYWxsZXQobXVsdGlzaWdUeXBlVmVyc2lvbjogJ01QQ3YyJyB8IHVuZGVmaW5lZCk6IElXYWxsZXQge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaWQ6IHNpbm9uLnN0dWIoKS5yZXR1cm5zKCd3YWxsZXQtaWQnKSxcbiAgICAgICAgbXVsdGlzaWdUeXBlVmVyc2lvbjogc2lub24uc3R1YigpLnJldHVybnMobXVsdGlzaWdUeXBlVmVyc2lvbiksXG4gICAgICB9IGFzIHVua25vd24gYXMgSVdhbGxldDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtYWtlQ29pbihtcGNBbGdvcml0aG06ICdlZGRzYScgfCAnZWNkc2EnLCBjaGFpbiA9ICd0c29sJyk6IElCYXNlQ29pbiB7XG4gICAgICBjb25zdCBjb2luID0ge30gYXMgSUJhc2VDb2luO1xuICAgICAgY29pbi5nZXRIYXNoRnVuY3Rpb24gPSBzaW5vbi5zdHViKCk7XG4gICAgICBjb2luLmdldE1QQ0FsZ29yaXRobSA9IHNpbm9uLnN0dWIoKS5yZXR1cm5zKG1wY0FsZ29yaXRobSk7XG4gICAgICBjb2luLmdldENoYWluID0gc2lub24uc3R1YigpLnJldHVybnMoY2hhaW4pO1xuICAgICAgcmV0dXJuIGNvaW47XG4gICAgfVxuXG4gICAgaXQoJ2Rlcml2ZXMgdHhQYXJhbXMgZnJvbSBpbnRlbnQgZm9yIEVkRFNBIE1QQ3YyIHdhbGxldHMnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB0eFJlcXVlc3RJZCA9ICd0eC1yZXEtaWQtMSc7XG4gICAgICBjb25zdCByZXFJZCA9IG5ldyBSZXF1ZXN0VHJhY2VyKCk7XG4gICAgICBjb25zdCB0eFJlcXVlc3QgPSBidWlsZFR4UmVxdWVzdCh7XG4gICAgICAgIHR4UmVxdWVzdElkLFxuICAgICAgICBpbnRlbnQ6IHtcbiAgICAgICAgICBpbnRlbnRUeXBlOiAncGF5bWVudCcsXG4gICAgICAgICAgcmVjaXBpZW50czogW3sgYWRkcmVzczogeyBhZGRyZXNzOiAnc29sQWRkcjEnIH0sIGFtb3VudDogeyB2YWx1ZTogJzUwMDAwMDAnLCBzeW1ib2w6ICd0c29sJyB9IH1dLFxuICAgICAgICB9LFxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IHV0aWxzID0gbmV3IFRlc3RCYXNlVHNzVXRpbHMobW9ja0JpdGdvLCBtYWtlQ29pbignZWRkc2EnKSwgbWFrZVdhbGxldCgnTVBDdjInKSk7XG4gICAgICBzaW5vbi5zdHViKHV0aWxzLCAnZGVsZXRlU2lnbmF0dXJlU2hhcmVzJykucmVzb2x2ZXMoKTtcbiAgICAgIHNpbm9uLnN0dWIodXRpbHMsICdnZXRUeFJlcXVlc3QnKS5yZXNvbHZlcyh0eFJlcXVlc3QpO1xuICAgICAgY29uc3Qgc2lnblR4UmVxdWVzdFN0dWIgPSBzaW5vbi5zdHViKHV0aWxzLCAnc2lnblR4UmVxdWVzdCcpLnJlc29sdmVzKHR4UmVxdWVzdCk7XG5cbiAgICAgIGF3YWl0IHV0aWxzLnJlY3JlYXRlVHhSZXF1ZXN0KHR4UmVxdWVzdElkLCAncHJ2JywgcmVxSWQpO1xuXG4gICAgICAvLyBOYXRpdmUgU09MOiBzeW1ib2wgZXF1YWxzIHRoZSBjaGFpbiBuYW1lLCBzbyB0b2tlbk5hbWUgbXVzdCBiZSBvbWl0dGVkXG4gICAgICBhc3NlcnQuZGVlcFN0cmljdEVxdWFsKHNpZ25UeFJlcXVlc3RTdHViLmZpcnN0Q2FsbC5hcmdzWzBdLnR4UGFyYW1zLCB7XG4gICAgICAgIHJlY2lwaWVudHM6IFt7IGFkZHJlc3M6ICdzb2xBZGRyMScsIGFtb3VudDogJzUwMDAwMDAnIH1dLFxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2V0cyB0b2tlbk5hbWUgZm9yIFNQTCB0b2tlbnMgKHN5bWJvbCBkaWZmZXJzIGZyb20gY2hhaW4gbmFtZSknLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB0eFJlcXVlc3RJZCA9ICd0eC1yZXEtaWQtc3BsJztcbiAgICAgIGNvbnN0IHJlcUlkID0gbmV3IFJlcXVlc3RUcmFjZXIoKTtcbiAgICAgIGNvbnN0IHR4UmVxdWVzdCA9IGJ1aWxkVHhSZXF1ZXN0KHtcbiAgICAgICAgdHhSZXF1ZXN0SWQsXG4gICAgICAgIGludGVudDoge1xuICAgICAgICAgIGludGVudFR5cGU6ICdwYXltZW50JyxcbiAgICAgICAgICByZWNpcGllbnRzOiBbeyBhZGRyZXNzOiB7IGFkZHJlc3M6ICdzcGxBZGRyMScgfSwgYW1vdW50OiB7IHZhbHVlOiAnMTAwMCcsIHN5bWJvbDogJ3Rzb2w6dXNkYycgfSB9XSxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCB1dGlscyA9IG5ldyBUZXN0QmFzZVRzc1V0aWxzKG1vY2tCaXRnbywgbWFrZUNvaW4oJ2VkZHNhJywgJ3Rzb2wnKSwgbWFrZVdhbGxldCgnTVBDdjInKSk7XG4gICAgICBzaW5vbi5zdHViKHV0aWxzLCAnZGVsZXRlU2lnbmF0dXJlU2hhcmVzJykucmVzb2x2ZXMoKTtcbiAgICAgIHNpbm9uLnN0dWIodXRpbHMsICdnZXRUeFJlcXVlc3QnKS5yZXNvbHZlcyh0eFJlcXVlc3QpO1xuICAgICAgY29uc3Qgc2lnblR4UmVxdWVzdFN0dWIgPSBzaW5vbi5zdHViKHV0aWxzLCAnc2lnblR4UmVxdWVzdCcpLnJlc29sdmVzKHR4UmVxdWVzdCk7XG5cbiAgICAgIGF3YWl0IHV0aWxzLnJlY3JlYXRlVHhSZXF1ZXN0KHR4UmVxdWVzdElkLCAncHJ2JywgcmVxSWQpO1xuXG4gICAgICAvLyBTUEwgdG9rZW46IHN5bWJvbCBkaWZmZXJzIGZyb20gY2hhaW4gbmFtZSwgc28gdG9rZW5OYW1lIG11c3QgYmUgc2V0XG4gICAgICBhc3NlcnQuZGVlcFN0cmljdEVxdWFsKHNpZ25UeFJlcXVlc3RTdHViLmZpcnN0Q2FsbC5hcmdzWzBdLnR4UGFyYW1zLCB7XG4gICAgICAgIHJlY2lwaWVudHM6IFt7IGFkZHJlc3M6ICdzcGxBZGRyMScsIGFtb3VudDogJzEwMDAnLCB0b2tlbk5hbWU6ICd0c29sOnVzZGMnIH1dLFxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBpdCgncGFzc2VzIHVuZGVmaW5lZCB0eFBhcmFtcyBmb3IgRWREU0EgTVBDdjIgd2hlbiBpbnRlbnQgaGFzIG5vIHJlY2lwaWVudHMnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB0eFJlcXVlc3RJZCA9ICd0eC1yZXEtaWQtMic7XG4gICAgICBjb25zdCByZXFJZCA9IG5ldyBSZXF1ZXN0VHJhY2VyKCk7XG4gICAgICBjb25zdCB0eFJlcXVlc3QgPSBidWlsZFR4UmVxdWVzdCh7IHR4UmVxdWVzdElkLCBpbnRlbnQ6IHsgaW50ZW50VHlwZTogJ2VuYWJsZVRva2VuJyB9IH0pO1xuXG4gICAgICBjb25zdCB1dGlscyA9IG5ldyBUZXN0QmFzZVRzc1V0aWxzKG1vY2tCaXRnbywgbWFrZUNvaW4oJ2VkZHNhJyksIG1ha2VXYWxsZXQoJ01QQ3YyJykpO1xuICAgICAgc2lub24uc3R1Yih1dGlscywgJ2RlbGV0ZVNpZ25hdHVyZVNoYXJlcycpLnJlc29sdmVzKCk7XG4gICAgICBzaW5vbi5zdHViKHV0aWxzLCAnZ2V0VHhSZXF1ZXN0JykucmVzb2x2ZXModHhSZXF1ZXN0KTtcbiAgICAgIGNvbnN0IHNpZ25UeFJlcXVlc3RTdHViID0gc2lub24uc3R1Yih1dGlscywgJ3NpZ25UeFJlcXVlc3QnKS5yZXNvbHZlcyh0eFJlcXVlc3QpO1xuXG4gICAgICBhd2FpdCB1dGlscy5yZWNyZWF0ZVR4UmVxdWVzdCh0eFJlcXVlc3RJZCwgJ3BydicsIHJlcUlkKTtcblxuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHNpZ25UeFJlcXVlc3RTdHViLmZpcnN0Q2FsbC5hcmdzWzBdLnR4UGFyYW1zLCB1bmRlZmluZWQpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Bhc3NlcyB1bmRlZmluZWQgdHhQYXJhbXMgZm9yIEVDRFNBIE1QQ3YyIHdhbGxldHMgKGd1YXJkIGRvZXMgbm90IGFwcGx5KScsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHR4UmVxdWVzdElkID0gJ3R4LXJlcS1pZC0zJztcbiAgICAgIGNvbnN0IHJlcUlkID0gbmV3IFJlcXVlc3RUcmFjZXIoKTtcbiAgICAgIGNvbnN0IHR4UmVxdWVzdCA9IGJ1aWxkVHhSZXF1ZXN0KHtcbiAgICAgICAgdHhSZXF1ZXN0SWQsXG4gICAgICAgIGludGVudDoge1xuICAgICAgICAgIGludGVudFR5cGU6ICdwYXltZW50JyxcbiAgICAgICAgICByZWNpcGllbnRzOiBbeyBhZGRyZXNzOiB7IGFkZHJlc3M6ICdldGhBZGRyMScgfSwgYW1vdW50OiB7IHZhbHVlOiAnMTAwMDAwMCcsIHN5bWJvbDogJ2V0aCcgfSB9XSxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCB1dGlscyA9IG5ldyBUZXN0QmFzZVRzc1V0aWxzKG1vY2tCaXRnbywgbWFrZUNvaW4oJ2VjZHNhJyksIG1ha2VXYWxsZXQoJ01QQ3YyJykpO1xuICAgICAgc2lub24uc3R1Yih1dGlscywgJ2RlbGV0ZVNpZ25hdHVyZVNoYXJlcycpLnJlc29sdmVzKCk7XG4gICAgICBzaW5vbi5zdHViKHV0aWxzLCAnZ2V0VHhSZXF1ZXN0JykucmVzb2x2ZXModHhSZXF1ZXN0KTtcbiAgICAgIGNvbnN0IHNpZ25UeFJlcXVlc3RTdHViID0gc2lub24uc3R1Yih1dGlscywgJ3NpZ25UeFJlcXVlc3QnKS5yZXNvbHZlcyh0eFJlcXVlc3QpO1xuXG4gICAgICBhd2FpdCB1dGlscy5yZWNyZWF0ZVR4UmVxdWVzdCh0eFJlcXVlc3RJZCwgJ3BydicsIHJlcUlkKTtcblxuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHNpZ25UeFJlcXVlc3RTdHViLmZpcnN0Q2FsbC5hcmdzWzBdLnR4UGFyYW1zLCB1bmRlZmluZWQpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnRUNEU0EgTVBDIHYyIGRlbGVnYXRlZCB0eFJlcXVlc3QgcGFyc2luZycsIGZ1bmN0aW9uICgpIHtcbiAgICBpdCgnZ2V0SGFzaFN0cmluZ0FuZERlcml2YXRpb25QYXRoIHByb2R1Y2VzIHRoZSBjb3JyZWN0IGhhc2hCdWZmZXIgYW5kIGRlcml2YXRpb25QYXRoJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3Qgc2lnbmFibGVIZXggPSAnZGVhZGJlZWYnO1xuICAgICAgY29uc3QgZGVyaXZhdGlvblBhdGggPSAnbS8wJztcbiAgICAgIGNvbnN0IHR4UmVxdWVzdCA9IGJ1aWxkVHhSZXF1ZXN0KHtcbiAgICAgICAgdHJhbnNhY3Rpb25zOiBbYnVpbGRUcmFuc2FjdGlvbih7IHVuc2lnbmVkVHg6IGJ1aWxkVW5zaWduZWRUcmFuc2FjdGlvbih7IHNpZ25hYmxlSGV4LCBkZXJpdmF0aW9uUGF0aCB9KSB9KV0sXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGV4cGVjdGVkSGFzaEJ1ZmZlciA9IGNyZWF0ZUtlY2Nha0hhc2goJ2tlY2NhazI1NicpLnVwZGF0ZShCdWZmZXIuZnJvbShzaWduYWJsZUhleCwgJ2hleCcpKS5kaWdlc3QoKTtcblxuICAgICAgY29uc3QgeyBlbmNyeXB0ZWRSb3VuZDFTZXNzaW9uIH0gPSBhd2FpdCBlY2RzYU1QQ3YyVXRpbHMuY3JlYXRlT2ZmbGluZVJvdW5kMVNoYXJlKHtcbiAgICAgICAgdHhSZXF1ZXN0LFxuICAgICAgICBwcnY6IHVzZXJTaGFyZS50b1N0cmluZygnYmFzZTY0JyksXG4gICAgICAgIHdhbGxldFBhc3NwaHJhc2UsXG4gICAgICB9KTtcblxuICAgICAgLy8gVGhlIHJvdW5kLTEgc2Vzc2lvbiBpcyBlbmNyeXB0ZWQgd2l0aCBhZGF0YSA9IFwiREtMUzIzX1NJR05JTkdfUk9VTkQxX1NUQVRFOjxoYXNoPjo8ZGVyaXZhdGlvblBhdGg+XCIsXG4gICAgICAvLyB3aGljaCBwcm92ZXMgZ2V0SGFzaFN0cmluZ0FuZERlcml2YXRpb25QYXRoIHByb2R1Y2VkIHRoZSByaWdodCB2YWx1ZXMgYWZ0ZXIgdGhlIGRlbGVnYXRpb24gcmVmYWN0b3IuXG4gICAgICBjb25zdCB7IGFkYXRhIH0gPSBKU09OLnBhcnNlKGVuY3J5cHRlZFJvdW5kMVNlc3Npb24pIGFzIHsgYWRhdGE/OiBzdHJpbmcgfTtcbiAgICAgIGFzc2VydC5lcXVhbChcbiAgICAgICAgYWRhdGEgPT09IHVuZGVmaW5lZCA/IGFkYXRhIDogZGVjb2RlVVJJQ29tcG9uZW50KGFkYXRhKSxcbiAgICAgICAgYERLTFMyM19TSUdOSU5HX1JPVU5EMV9TVEFURToke2V4cGVjdGVkSGFzaEJ1ZmZlci50b1N0cmluZygnaGV4Jyl9OiR7ZGVyaXZhdGlvblBhdGh9YFxuICAgICAgKTtcbiAgICB9KTtcblxuICAgIGl0KCdwcm9wYWdhdGVzIHRoZSBiYXNlIHVuc2lnbmVkVHggZ3VhcmQgdGhyb3VnaCB0aGUgRUNEU0Egcm91dGUnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIEludGVudGlvbmFsbHkgbWFsZm9ybWVkIHRvIGV4ZXJjaXNlIHRoZSBydW50aW1lIGd1YXJkLlxuICAgICAgY29uc3Qgbm9VbnNpZ25lZFR4OiBUeFJlcXVlc3RUcmFuc2FjdGlvbiA9IHsgc3RhdGU6ICdwZW5kaW5nU2lnbmF0dXJlJywgc2lnbmF0dXJlU2hhcmVzOiBbXSB9O1xuICAgICAgYXdhaXQgYXNzZXJ0LnJlamVjdHMoXG4gICAgICAgIGVjZHNhTVBDdjJVdGlscy5jcmVhdGVPZmZsaW5lUm91bmQxU2hhcmUoe1xuICAgICAgICAgIHR4UmVxdWVzdDogYnVpbGRUeFJlcXVlc3QoeyB0cmFuc2FjdGlvbnM6IFtub1Vuc2lnbmVkVHhdIH0pLFxuICAgICAgICAgIHBydjogJ3VudXNlZCcsXG4gICAgICAgICAgd2FsbGV0UGFzc3BocmFzZSxcbiAgICAgICAgfSksXG4gICAgICAgIC9NaXNzaW5nIHVuc2lnbmVkVHggaW4gdHJhbnNhY3Rpb25zL1xuICAgICAgKTtcbiAgICB9KTtcbiAgfSk7XG59KTtcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBGaXh0dXJlIGJ1aWxkZXJzXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuZnVuY3Rpb24gYnVpbGRUeFJlcXVlc3Qob3ZlcnJpZGVzOiBQYXJ0aWFsPFR4UmVxdWVzdD4gPSB7fSk6IFR4UmVxdWVzdCB7XG4gIHJldHVybiB7XG4gICAgdHhSZXF1ZXN0SWQ6ICd0eC1yZXF1ZXN0LWlkJyxcbiAgICB3YWxsZXRJZDogJ3dhbGxldC1pZCcsXG4gICAgd2FsbGV0VHlwZTogJ2hvdCcsXG4gICAgdmVyc2lvbjogMSxcbiAgICBzdGF0ZTogJ2luaXRpYWxpemVkJyxcbiAgICBkYXRlOiBuZXcgRGF0ZSgwKS50b0lTT1N0cmluZygpLFxuICAgIHVzZXJJZDogJ3VzZXItaWQnLFxuICAgIGludGVudDoge30sXG4gICAgcG9saWNpZXNDaGVja2VkOiB0cnVlLFxuICAgIHVuc2lnbmVkVHhzOiBbXSxcbiAgICB0cmFuc2FjdGlvbnM6IFtidWlsZFRyYW5zYWN0aW9uKCldLFxuICAgIGxhdGVzdDogdHJ1ZSxcbiAgICAuLi5vdmVycmlkZXMsXG4gIH07XG59XG5cbmZ1bmN0aW9uIGJ1aWxkVHhSZXF1ZXN0V2l0aG91dFRyYW5zYWN0aW9ucygpOiBUeFJlcXVlc3Qge1xuICBjb25zdCB0eFJlcXVlc3QgPSBidWlsZFR4UmVxdWVzdCgpO1xuICBkZWxldGUgdHhSZXF1ZXN0LnRyYW5zYWN0aW9ucztcbiAgcmV0dXJuIHR4UmVxdWVzdDtcbn1cblxuZnVuY3Rpb24gYnVpbGRUcmFuc2FjdGlvbihvdmVycmlkZXM6IFBhcnRpYWw8VHhSZXF1ZXN0VHJhbnNhY3Rpb24+ID0ge30pOiBUeFJlcXVlc3RUcmFuc2FjdGlvbiB7XG4gIHJldHVybiB7IHN0YXRlOiAncGVuZGluZ1NpZ25hdHVyZScsIHVuc2lnbmVkVHg6IGJ1aWxkVW5zaWduZWRUcmFuc2FjdGlvbigpLCBzaWduYXR1cmVTaGFyZXM6IFtdLCAuLi5vdmVycmlkZXMgfTtcbn1cblxuZnVuY3Rpb24gYnVpbGRVbnNpZ25lZFRyYW5zYWN0aW9uKG92ZXJyaWRlczogUGFydGlhbDxVbnNpZ25lZFRyYW5zYWN0aW9uPiA9IHt9KTogVW5zaWduZWRUcmFuc2FjdGlvbiB7XG4gIHJldHVybiB7IHNlcmlhbGl6ZWRUeEhleDogJ2FhYmJjY2RkJywgc2lnbmFibGVIZXg6ICdkZWFkYmVlZicsIGRlcml2YXRpb25QYXRoOiAnbS8wJywgLi4ub3ZlcnJpZGVzIH07XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gRW5jcnlwdGlvbiBoZWxwZXJzIChtaXJyb3JzIHRoZSBlY2RzYU1QQ3YyIHRlc3QgcGF0dGVybilcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5mdW5jdGlvbiBlbmNyeXB0V2l0aFNqY2wocGFzc3dvcmQ6IHN0cmluZywgaW5wdXQ6IHN0cmluZywgYWRhdGE/OiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCBzYWx0ID0gcmFuZG9tQnl0ZXMoOCk7XG4gIGNvbnN0IGl2ID0gcmFuZG9tQnl0ZXMoMTYpO1xuICByZXR1cm4gc2pjbC5lbmNyeXB0KHBhc3N3b3JkLCBpbnB1dCwge1xuICAgIHNhbHQ6IFtieXRlc1RvV29yZChzYWx0LnN1YmFycmF5KDAsIDQpKSwgYnl0ZXNUb1dvcmQoc2FsdC5zdWJhcnJheSg0KSldLFxuICAgIGl2OiBbXG4gICAgICBieXRlc1RvV29yZChpdi5zdWJhcnJheSgwLCA0KSksXG4gICAgICBieXRlc1RvV29yZChpdi5zdWJhcnJheSg0LCA4KSksXG4gICAgICBieXRlc1RvV29yZChpdi5zdWJhcnJheSg4LCAxMikpLFxuICAgICAgYnl0ZXNUb1dvcmQoaXYuc3ViYXJyYXkoMTIsIDE2KSksXG4gICAgXSxcbiAgICAuLi4oYWRhdGEgIT09IHVuZGVmaW5lZCA/IHsgYWRhdGEgfSA6IHt9KSxcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGJ5dGVzVG9Xb3JkKGJ5dGVzOiBVaW50OEFycmF5KTogbnVtYmVyIHtcbiAgaWYgKGJ5dGVzLmxlbmd0aCAhPT0gNCkge1xuICAgIHRocm93IG5ldyBFcnJvcignYnl0ZXMgbXVzdCBoYXZlIGxlbmd0aCA0Jyk7XG4gIH1cbiAgcmV0dXJuIGJ5dGVzLnJlZHVjZSgobnVtLCBieXRlKSA9PiBudW0gKiAweDEwMCArIGJ5dGUsIDApO1xufVxuIl19
|