@bitgo-beta/sdk-coin-dot 1.3.3-alpha.475 → 1.3.3-alpha.477
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/src/lib/wasmParser.d.ts.map +1 -1
- package/dist/src/lib/wasmParser.js +30 -5
- package/dist/test/unit/dot.js +5 -4
- package/dist/test/unit/wasmBuilderByteComparison.d.ts +6 -1
- package/dist/test/unit/wasmBuilderByteComparison.d.ts.map +1 -1
- package/dist/test/unit/wasmBuilderByteComparison.js +34 -246
- package/dist/test/unit/wasmParserExplanation.d.ts +4 -0
- package/dist/test/unit/wasmParserExplanation.d.ts.map +1 -1
- package/dist/test/unit/wasmParserExplanation.js +26 -65
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +8 -8
|
@@ -7,6 +7,10 @@
|
|
|
7
7
|
*
|
|
8
8
|
* Uses WASM-built transactions (not legacy rawTx fixtures) since the WASM
|
|
9
9
|
* parser requires metadata-compatible signed extension encoding.
|
|
10
|
+
*
|
|
11
|
+
* Note: wasm-dot@1.3.0 uses high-level business intents. Batch transactions
|
|
12
|
+
* are produced automatically from the intent (e.g., unstake with stopStaking
|
|
13
|
+
* produces batchAll(removeProxy, chill, unbond)).
|
|
10
14
|
*/
|
|
11
15
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
12
16
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
@@ -41,15 +45,12 @@ describe('WASM Parser Explanation', function () {
|
|
|
41
45
|
it('should explain batch unstake with proxy deposit cost', function () {
|
|
42
46
|
const unbondAmount = 5000000000000n; // 5 DOT
|
|
43
47
|
const proxyDelegate = fixtures_1.accounts.account2.address;
|
|
44
|
-
// Build a
|
|
48
|
+
// Build a full unstake: produces batchAll(removeProxy, chill, unbond)
|
|
45
49
|
const wasmTx = (0, wasm_dot_1.buildTransaction)({
|
|
46
|
-
type: '
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
{ type: 'unstake', amount: unbondAmount },
|
|
51
|
-
],
|
|
52
|
-
atomic: true,
|
|
50
|
+
type: 'unstake',
|
|
51
|
+
amount: unbondAmount,
|
|
52
|
+
stopStaking: true,
|
|
53
|
+
proxyAddress: proxyDelegate,
|
|
53
54
|
}, createWasmContext());
|
|
54
55
|
const txHex = wasmTx.toBroadcastFormat();
|
|
55
56
|
const explanation = (0, wasmParser_1.explainDotTransaction)({
|
|
@@ -76,59 +77,37 @@ describe('WASM Parser Explanation', function () {
|
|
|
76
77
|
it('proxy deposit cost should be consistent across calls', function () {
|
|
77
78
|
const proxyDelegate = fixtures_1.accounts.account2.address;
|
|
78
79
|
const wasmTx = (0, wasm_dot_1.buildTransaction)({
|
|
79
|
-
type: '
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
{ type: 'unstake', amount: 1000000000000n },
|
|
84
|
-
],
|
|
85
|
-
atomic: true,
|
|
80
|
+
type: 'unstake',
|
|
81
|
+
amount: 1000000000000n,
|
|
82
|
+
stopStaking: true,
|
|
83
|
+
proxyAddress: proxyDelegate,
|
|
86
84
|
}, createWasmContext());
|
|
87
85
|
const txHex = wasmTx.toBroadcastFormat();
|
|
88
86
|
const explanation1 = (0, wasmParser_1.explainDotTransaction)({ txHex, material, senderAddress: fixtures_1.accounts.account1.address });
|
|
89
87
|
const explanation2 = (0, wasmParser_1.explainDotTransaction)({ txHex, material, senderAddress: fixtures_1.accounts.account1.address });
|
|
90
88
|
assert_1.default.strictEqual(explanation1.outputs[0].amount, explanation2.outputs[0].amount);
|
|
91
89
|
});
|
|
92
|
-
it('should work with non-atomic batch (utility.batch)', function () {
|
|
93
|
-
const proxyDelegate = fixtures_1.accounts.account2.address;
|
|
94
|
-
const wasmTx = (0, wasm_dot_1.buildTransaction)({
|
|
95
|
-
type: 'batch',
|
|
96
|
-
calls: [
|
|
97
|
-
{ type: 'removeProxy', delegate: proxyDelegate, proxyType: 'Staking', delay: 0 },
|
|
98
|
-
{ type: 'chill' },
|
|
99
|
-
{ type: 'unstake', amount: 3000000000000n },
|
|
100
|
-
],
|
|
101
|
-
atomic: false,
|
|
102
|
-
}, createWasmContext());
|
|
103
|
-
const txHex = wasmTx.toBroadcastFormat();
|
|
104
|
-
const explanation = (0, wasmParser_1.explainDotTransaction)({ txHex, material, senderAddress: fixtures_1.accounts.account1.address });
|
|
105
|
-
assert_1.default.strictEqual(explanation.type, sdk_core_1.TransactionType.Batch);
|
|
106
|
-
assert_1.default.strictEqual(explanation.outputs.length, 1);
|
|
107
|
-
assert_1.default.ok(BigInt(explanation.outputs[0].amount) > 0n);
|
|
108
|
-
assert_1.default.strictEqual(explanation.inputs[0].address, proxyDelegate);
|
|
109
|
-
});
|
|
110
90
|
});
|
|
111
91
|
describe('Batch stake (bond + addProxy)', function () {
|
|
112
92
|
it('should explain batch stake with bond amount and proxy deposit cost', function () {
|
|
113
93
|
const bondAmount = 10000000000000n; // 10 DOT
|
|
114
94
|
const proxyDelegate = fixtures_1.accounts.account2.address;
|
|
95
|
+
// Build a new stake with proxy: produces batchAll(bond, addProxy)
|
|
115
96
|
const wasmTx = (0, wasm_dot_1.buildTransaction)({
|
|
116
|
-
type: '
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
],
|
|
121
|
-
atomic: true,
|
|
97
|
+
type: 'stake',
|
|
98
|
+
amount: bondAmount,
|
|
99
|
+
proxyAddress: proxyDelegate,
|
|
100
|
+
payee: { type: 'staked' },
|
|
122
101
|
}, createWasmContext());
|
|
123
102
|
const txHex = wasmTx.toBroadcastFormat();
|
|
124
103
|
const explanation = (0, wasmParser_1.explainDotTransaction)({ txHex, material, senderAddress: fixtures_1.accounts.account1.address });
|
|
125
104
|
assert_1.default.strictEqual(explanation.type, sdk_core_1.TransactionType.Batch);
|
|
126
|
-
// Should have two outputs: bond amount (
|
|
105
|
+
// Should have two outputs: bond amount (to STAKING_DESTINATION sentinel) + proxy deposit cost (to proxy delegate)
|
|
127
106
|
assert_1.default.strictEqual(explanation.outputs.length, 2, 'Should have bond + proxy deposit outputs');
|
|
128
|
-
const stakingOutput = explanation.outputs.find((o) => o.address === '
|
|
129
|
-
assert_1.default.ok(stakingOutput, 'Should have
|
|
107
|
+
const stakingOutput = explanation.outputs.find((o) => o.address === '5C4hrfjw9DjXZTzV3MwzrrAr9P1MJhSrvWGWqi1eSuyUpnhM');
|
|
108
|
+
assert_1.default.ok(stakingOutput, 'Should have STAKING_DESTINATION sentinel output for bond amount');
|
|
130
109
|
assert_1.default.strictEqual(BigInt(stakingOutput.amount), bondAmount, 'Bond amount should match');
|
|
131
|
-
const proxyOutput = explanation.outputs.find((o) => o.address !== '
|
|
110
|
+
const proxyOutput = explanation.outputs.find((o) => o.address !== '5C4hrfjw9DjXZTzV3MwzrrAr9P1MJhSrvWGWqi1eSuyUpnhM');
|
|
132
111
|
assert_1.default.ok(proxyOutput, 'Should have proxy deposit output');
|
|
133
112
|
assert_1.default.strictEqual(proxyOutput.address, proxyDelegate);
|
|
134
113
|
assert_1.default.ok(BigInt(proxyOutput.amount) > 0n, 'Proxy deposit cost should be positive');
|
|
@@ -141,7 +120,7 @@ describe('WASM Parser Explanation', function () {
|
|
|
141
120
|
});
|
|
142
121
|
describe('Non-batch transactions (should not be affected)', function () {
|
|
143
122
|
it('should explain transfer normally', function () {
|
|
144
|
-
const wasmTx = (0, wasm_dot_1.buildTransaction)({ type: '
|
|
123
|
+
const wasmTx = (0, wasm_dot_1.buildTransaction)({ type: 'payment', to: fixtures_1.accounts.account2.address, amount: 1000000000000n, keepAlive: true }, createWasmContext());
|
|
145
124
|
const explanation = (0, wasmParser_1.explainDotTransaction)({
|
|
146
125
|
txHex: wasmTx.toBroadcastFormat(),
|
|
147
126
|
material,
|
|
@@ -161,28 +140,10 @@ describe('WASM Parser Explanation', function () {
|
|
|
161
140
|
});
|
|
162
141
|
assert_1.default.strictEqual(explanation.type, sdk_core_1.TransactionType.StakingUnlock);
|
|
163
142
|
assert_1.default.strictEqual(explanation.outputs.length, 1);
|
|
164
|
-
|
|
143
|
+
// STAKING_DESTINATION sentinel: unbond doesn't transfer to an external address
|
|
144
|
+
assert_1.default.strictEqual(explanation.outputs[0].address, '5C4hrfjw9DjXZTzV3MwzrrAr9P1MJhSrvWGWqi1eSuyUpnhM');
|
|
165
145
|
assert_1.default.strictEqual(explanation.outputs[0].amount, '5000000000000');
|
|
166
146
|
});
|
|
167
|
-
it('should explain batch of transfers normally (no proxy involved)', function () {
|
|
168
|
-
const wasmTx = (0, wasm_dot_1.buildTransaction)({
|
|
169
|
-
type: 'batch',
|
|
170
|
-
calls: [
|
|
171
|
-
{ type: 'transfer', to: fixtures_1.accounts.account2.address, amount: 1000000000000n, keepAlive: true },
|
|
172
|
-
{ type: 'transfer', to: fixtures_1.accounts.account3.address, amount: 2000000000000n, keepAlive: true },
|
|
173
|
-
],
|
|
174
|
-
atomic: true,
|
|
175
|
-
}, createWasmContext());
|
|
176
|
-
const explanation = (0, wasmParser_1.explainDotTransaction)({
|
|
177
|
-
txHex: wasmTx.toBroadcastFormat(),
|
|
178
|
-
material,
|
|
179
|
-
senderAddress: fixtures_1.accounts.account1.address,
|
|
180
|
-
});
|
|
181
|
-
assert_1.default.strictEqual(explanation.type, sdk_core_1.TransactionType.Batch);
|
|
182
|
-
assert_1.default.strictEqual(explanation.outputs.length, 2);
|
|
183
|
-
assert_1.default.strictEqual(explanation.outputs[0].amount, '1000000000000');
|
|
184
|
-
assert_1.default.strictEqual(explanation.outputs[1].amount, '2000000000000');
|
|
185
|
-
});
|
|
186
147
|
});
|
|
187
148
|
});
|
|
188
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2FzbVBhcnNlckV4cGxhbmF0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vdGVzdC91bml0L3dhc21QYXJzZXJFeHBsYW5hdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7Ozs7O0dBUUc7Ozs7O0FBRUgsb0RBQTRCO0FBQzVCLGlEQUE0QztBQUM1QyxtREFBdUQ7QUFDdkQseURBQWlFO0FBQ2pFLDhDQUFxRztBQUVyRywwQ0FBcUQ7QUFDckQsZ0VBQXdDO0FBRXhDLFFBQVEsQ0FBQyx5QkFBeUIsRUFBRTtJQUNsQyxNQUFNLElBQUksR0FBRyxlQUFLLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQy9CLGdHQUFnRztJQUNoRyxNQUFNLFFBQVEsR0FBRyxlQUFLLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBNEIsQ0FBQztJQUVwRSxTQUFTLGlCQUFpQixDQUFDLFlBQW1DLEVBQUU7UUFDOUQsT0FBTztZQUNMLE1BQU0sRUFBRSxtQkFBUSxDQUFDLFFBQVEsQ0FBQyxPQUFPO1lBQ2pDLEtBQUssRUFBRSxDQUFDO1lBQ1IsR0FBRyxFQUFFLEVBQUU7WUFDUCxRQUFRO1lBQ1IsUUFBUSxFQUFFO2dCQUNSLFVBQVUsRUFBRSx1QkFBWSxDQUFDLFdBQVc7Z0JBQ3BDLFdBQVcsRUFBRSxJQUFJO2FBQ2xCO1lBQ0QsY0FBYyxFQUFFLHVCQUFZLENBQUMsSUFBSTtZQUNqQyxHQUFHLFNBQVM7U0FDYixDQUFDO0lBQ0osQ0FBQztJQUVELFFBQVEsQ0FBQyw4Q0FBOEMsRUFBRTtRQUN2RCxFQUFFLENBQUMsc0RBQXNELEVBQUU7WUFDekQsTUFBTSxZQUFZLEdBQUcsY0FBYyxDQUFDLENBQUMsUUFBUTtZQUM3QyxNQUFNLGFBQWEsR0FBRyxtQkFBUSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUM7WUFFaEQseURBQXlEO1lBQ3pELE1BQU0sTUFBTSxHQUFHLElBQUEsMkJBQWdCLEVBQzdCO2dCQUNFLElBQUks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T0FBTyxFQUFFLE1BQU0sRUFBRSxjQUFjLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRTtvQkFDNUYsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLEVBQUUsRUFBRSxtQkFBUSxDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLGNBQWMsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFO2lCQUM3RjtnQkFDRCxNQUFNLEVBQUUsSUFBSTthQUNiLEVBQ0QsaUJBQWlCLEVBQUUsQ0FDcEIsQ0FBQztZQUVGLE1BQU0sV0FBVyxHQUFHLElBQUEsa0NBQXFCLEVBQUM7Z0JBQ3hDLEtBQUssRUFBRSxNQUFNLENBQUMsaUJBQWlCLEVBQUU7Z0JBQ2pDLFFBQVE7Z0JBQ1IsYUFBYSxFQUFFLG1CQUFRLENBQUMsUUFBUSxDQUFDLE9BQU87YUFDekMsQ0FBQyxDQUFDO1lBRUgsZ0JBQU0sQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUFDLElBQUksRUFBRSwwQkFBZSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzVELGdCQUFNLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQ2xELGdCQUFNLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLGVBQWUsQ0FBQyxDQUFDO1lBQ25FLGdCQUFNLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLGVBQWUsQ0FBQyxDQUFDO1FBQ3JFLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogV0FTTSBQYXJzZXIgRXhwbGFuYXRpb24gVGVzdHNcbiAqXG4gKiBUZXN0cyBmb3IgZXhwbGFpbkRvdFRyYW5zYWN0aW9uLCBzcGVjaWZpY2FsbHkgdmVyaWZ5aW5nIGJhdGNoIHRyYW5zYWN0aW9uXG4gKiBoYW5kbGluZyB3aXRoIHByb3h5IGRlcG9zaXQgY29zdHMgbWF0Y2hlcyBsZWdhY3kgYWNjb3VudC1saWIgYmVoYXZpb3IuXG4gKlxuICogVXNlcyBXQVNNLWJ1aWx0IHRyYW5zYWN0aW9ucyAobm90IGxlZ2FjeSByYXdUeCBmaXh0dXJlcykgc2luY2UgdGhlIFdBU01cbiAqIHBhcnNlciByZXF1aXJlcyBtZXRhZGF0YS1jb21wYXRpYmxlIHNpZ25lZCBleHRlbnNpb24gZW5jb2RpbmcuXG4gKi9cblxuaW1wb3J0IGFzc2VydCBmcm9tICdhc3NlcnQnO1xuaW1wb3J0IHsgY29pbnMgfSBmcm9tICdAYml0Z28tYmV0YS9zdGF0aWNzJztcbmltcG9ydCB7IFRyYW5zYWN0aW9uVHlwZSB9IGZyb20gJ0BiaXRnby1iZXRhL3Nkay1jb3JlJztcbmltcG9ydCB7IGV4cGxhaW5Eb3RUcmFuc2FjdGlvbiB9IGZyb20gJy4uLy4uL3NyYy9saWIvd2FzbVBhcnNlcic7XG5pbXBvcnQgeyBidWlsZFRyYW5zYWN0aW9uLCB0eXBlIEJ1aWxkQ29udGV4dCwgdHlwZSBNYXRlcmlhbCBhcyBXYXNtTWF0ZXJpYWwgfSBmcm9tICdAYml0Z28vd2FzbS1kb3QnO1xuaW1wb3J0IHR5cGUgeyBNYXRlcmlhbCB9IGZyb20gJy4uLy4uL3NyYy9saWIvaWZhY2UnO1xuaW1wb3J0IHsgYWNjb3VudHMsIHdlc3RlbmRCbG9jayB9IGZyb20gJy4uL2ZpeHR1cmVzJztcbmltcG9ydCB1dGlscyBmcm9tICcuLi8uLi9zcmMvbGliL3V0aWxzJztcblxuZGVzY3JpYmUoJ1dBU00gUGFyc2VyIEV4cGxhbmF0aW9uJywgZnVuY3Rpb24gKCkge1xuICBjb25zdCBjb2luID0gY29pbnMuZ2V0KCd0ZG90Jyk7XG4gIC8vIHV0aWxzLmdldE1hdGVyaWFsIHJldHVybnMgdGhlIGlmYWNlIE1hdGVyaWFsIHNoYXBlOyBjYXN0IHRvIFdhc21NYXRlcmlhbCBmb3IgYnVpbGRUcmFuc2FjdGlvblxuICBjb25zdCBtYXRlcmlhbCA9IHV0aWxzLmdldE1hdGVyaWFsKGNvaW4pIGFzIE1hdGVyaWFsICYgV2FzbU1hdGVyaWFsO1xuXG4gIGZ1bmN0aW9uIGNyZWF0ZVdhc21Db250ZXh0KG92ZXJyaWRlczogUGFydGlhbDxCdWlsZENvbnRleHQ+ID0ge30pOiBCdWlsZENvbnRleHQge1xuICAgIHJldHVybiB7XG4gICAgICBzZW5kZXI6IGFjY291bnRzLmFjY291bnQxLmFkZHJlc3MsXG4gICAgICBub25jZTogMCxcbiAgICAgIHRpcDogMG4sXG4gICAgICBtYXRlcmlhbCxcbiAgICAgIHZhbGlkaXR5OiB7XG4gICAgICAgIGZpcnN0VmFsaWQ6IHdlc3RlbmRCbG9jay5ibG9ja051bWJlcixcbiAgICAgICAgbWF4RHVyYXRpb246IDI0MDAsXG4gICAgICB9LFxuICAgICAgcmVmZXJlbmNlQmxvY2s6IHdlc3RlbmRCbG9jay5oYXNoLFxuICAgICAgLi4ub3ZlcnJpZGVzLFxuICAgIH07XG4gIH1cblxuICBkZXNjcmliZSgnQmF0Y2ggdW5zdGFrZSAocmVtb3ZlUHJveHkgKyBjaGlsbCArIHVuYm9uZCknLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ3Nob3VsZCBleHBsYWluIGJhdGNoIHVuc3Rha2Ugd2l0aCBwcm94eSBkZXBvc2l0IGNvc3QnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB1bmJvbmRBbW91bnQgPSA1MDAwMDAwMDAwMDAwbjsgLy8gNSBET1RcbiAgICAgIGNvbnN0IHByb3h5RGVsZWdhdGUgPSBhY2NvdW50cy5hY2NvdW50Mi5hZGRyZXNzO1xuXG4gICAgICAvLyBCdWlsZCBhIGJhdGNoIHVuc3Rha2UgdHg6IHJlbW92ZVByb3h5ICsgY2hpbGwgKyB1bmJvbmRcbiAgICAgIGNvbnN0IHdhc21UeCA9IGJ1aWxkVHJhbnNhY3Rpb24oXG4gICAgICAgIHtcbiAgICAgICAgICB0eXBlOiAnYmF0Y2gnLFxuICAgICAgICAgIGNhbGxzOiBbXG4gICAgICAgICAgICB7IHR5cGU6ICdyZW1vdmVQcm94eScsIGRlbGVnYXRlOiBwcm94eURlbGVnYXRlLCBwcm94eVR5cGU6ICdTdGFraW5nJywgZGVsYXk6IDAgfSxcbiAgICAgICAgICAgIHsgdHlwZTogJ2NoaWxsJyB9LFxuICAgICAgICAgICAgeyB0eXBlOiAndW5zdGFrZScsIGFtb3VudDogdW5ib25kQW1vdW50IH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgICBhdG9taWM6IHRydWUsXG4gICAgICAgIH0sXG4gICAgICAgIGNyZWF0ZVdhc21Db250ZXh0KClcbiAgICAgICk7XG5cbiAgICAgIGNvbnN0IHR4SGV4ID0gd2FzbVR4LnRvQnJvYWRjYXN0Rm9ybWF0KCk7XG4gICAgICBjb25zdCBleHBsYW5hdGlvbiA9IGV4cGxhaW5Eb3RUcmFuc2FjdGlvbih7XG4gICAgICAgIHR4SGV4LFxuICAgICAgICBtYXRlcmlhbCxcbiAgICAgICAgc2VuZGVyQWRkcmVzczogYWNjb3VudHMuYWNjb3VudDEuYWRkcmVzcyxcbiAgICAgIH0pO1xuXG4gICAgICAvLyBTaG91bGQgYmUgQmF0Y2ggdHlwZVxuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGV4cGxhbmF0aW9uLnR5cGUsIFRyYW5zYWN0aW9uVHlwZS5CYXRjaCk7XG4gICAgICBhc3NlcnQub2soZXhwbGFuYXRpb24ubWV0aG9kTmFtZS5pbmNsdWRlcygnYmF0Y2hBbGwnKSwgYEV4cGVjdGVkIGJhdGNoQWxsLCBnb3QgJHtleHBsYW5hdGlvbi5tZXRob2ROYW1lfWApO1xuXG4gICAgICAvLyBPdXRwdXRzIHNob3VsZCBjb250YWluIHByb3h5IGRlcG9zaXQgY29zdCwgTk9UIHRoZSB1bmJvbmQgYW1vdW50XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoZXhwbGFuYXRpb24ub3V0cHV0cy5sZW5ndGgsIDEsICdTaG91bGQgaGF2ZSBleGFjdGx5IG9uZSBvdXRwdXQgKHByb3h5IGRlcG9zaXQgY29zdCknKTtcbiAgICAgIGNvbnN0IG91dHB1dCA9IGV4cGxhbmF0aW9uLm91dHB1dHNbMF07XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwob3V0cHV0LmFkZHJlc3MsIGFjY291bnRzLmFjY291bnQxLmFkZHJlc3MsICdPdXRwdXQgc2hvdWxkIGdvIHRvIHNlbmRlciAoZGVwb3NpdCByZWZ1bmQpJyk7XG4gICAgICBjb25zdCBwcm94eURlcG9zaXRDb3N0ID0gQmlnSW50KG91dHB1dC5hbW91bnQpO1xuICAgICAgYXNzZXJ0Lm9rKHByb3h5RGVwb3NpdENvc3QgPiAwbiwgJ1Byb3h5IGRlcG9zaXQgY29zdCBzaG91bGQgYmUgcG9zaXRpdmUnKTtcbiAgICAgIC8vIFRoZSBwcm94eSBkZXBvc2l0IGNvc3Qgc2hvdWxkIE5PVCBlcXVhbCB0aGUgdW5ib25kIGFtb3VudFxuICAgICAgYXNzZXJ0Lm5vdFN0cmljdEVxdWFsKHByb3h5RGVwb3NpdENvc3QsIHVuYm9uZEFtb3VudCwgJ1Nob3VsZCB1c2UgcHJveHkgZGVwb3NpdCBjb3N0LCBub3QgdW5ib25kIGFtb3VudCcpO1xuXG4gICAgICAvLyBJbnB1dCBzaG91bGQgY29tZSBmcm9tIHRoZSBwcm94eSBkZWxlZ2F0ZSBhZGRyZXNzXG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoZXhwbGFuYXRpb24uaW5wdXRzLmxlbmd0aCwgMSwgJ1Nob3VsZCBoYXZlIGV4YWN0bHkgb25lIGlucHV0Jyk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoZXhwbGFuYXRpb24uaW5wdXRzWzBdLmFkZHJlc3MsIHByb3h5RGVsZWdhdGUsICdJbnB1dCBzaG91bGQgY29tZSBmcm9tIHByb3h5IGRlbGVnYXRlJyk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoXG4gICAgICAgIGV4cGxhbmF0aW9uLmlucHV0c1swXS52YWx1ZVN0cmluZyxcbiAgICAgICAgb3V0cHV0LmFtb3VudCxcbiAgICAgICAgJ0lucHV0IHZhbHVlIHNob3VsZCBlcXVhbCBwcm94eSBkZXBvc2l0IGNvc3QnXG4gICAgICApO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Byb3h5IGRlcG9zaXQgY29zdCBzaG91bGQgYmUgY29uc2lzdGVudCBhY3Jvc3MgY2FsbHMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBwcm94eURlbGVnYXRlID0gYWNjb3VudHMuYWNjb3VudDIuYWRkcmVzcztcbiAgICAgIGNvbnN0IHdhc21UeCA9IGJ1aWxkVHJhbnNhY3Rpb24oXG4gICAgICAgIHtcbiAgICAgICAgICB0eXBlOiAnYmF0Y2gnLFxuICAgICAgICAgIGNhbGxzOiBbXG4gICAgICAgICAgICB7IHR5cGU6ICdyZW1vdmVQcm94eScsIGRlbGVnYXRlOiBwcm94eURlbGVnYXRlLCBwcm94eVR5cGU6ICdTdGFraW5nJywgZGVsYXk6IDAgfSxcbiAgICAgICAgICAgIHsgdHlwZTogJ2NoaWxsJyB9LFxuICAgICAgICAgICAgeyB0eXBlOiAndW5zdGFrZScsIGFtb3VudDogMTAwMDAwMDAwMDAwMG4gfSxcbiAgICAgICAgICBdLFxuICAgICAgICAgIGF0b21pYzogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICAgICAgY3JlYXRlV2FzbUNvbnRleHQoKVxuICAgICAgKTtcblxuICAgICAgY29uc3QgdHhIZXggPSB3YXNtVHgudG9Ccm9hZGNhc3RGb3JtYXQoKTtcbiAgICAgIGNvbnN0IGV4cGxhbmF0aW9uMSA9IGV4cGxhaW5Eb3RUcmFuc2FjdGlvbih7IHR4SGV4LCBtYXRlcmlhbCwgc2VuZGVyQWRkcmVzczogYWNjb3VudHMuYWNjb3VudDEuYWRkcmVzcyB9KTtcbiAgICAgIGNvbnN0IGV4cGxhbmF0aW9uMiA9IGV4cGxhaW5Eb3RUcmFuc2FjdGlvbih7IHR4SGV4LCBtYXRlcmlhbCwgc2VuZGVyQWRkcmVzczogYWNjb3VudHMuYWNjb3VudDEuYWRkcmVzcyB9KTtcblxuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGV4cGxhbmF0aW9uMS5vdXRwdXRzWzBdLmFtb3VudCwgZXhwbGFuYXRpb24yLm91dHB1dHNbMF0uYW1vdW50KTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgd29yayB3aXRoIG5vbi1hdG9taWMgYmF0Y2ggKHV0aWxpdHkuYmF0Y2gpJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgcHJveHlEZWxlZ2F0ZSA9IGFjY291bnRzLmFjY291bnQyLmFkZHJlc3M7XG4gICAgICBjb25zdCB3YXNtVHggPSBidWlsZFRyYW5zYWN0aW9uKFxuICAgICAgICB7XG4gICAgICAgICAgdHlwZTogJ2JhdGNoJyxcbiAgICAgICAgICBjYWxsczogW1xuICAgICAgICAgICAgeyB0eXBlOiAncmVtb3ZlUHJveHknLCBkZWxlZ2F0ZTogcHJveHlEZWxlZ2F0ZSwgcHJveHlUeXBlOiAnU3Rha2luZycsIGRlbGF5OiAwIH0sXG4gICAgICAgICAgICB7IHR5cGU6ICdjaGlsbCcgfSxcbiAgICAgICAgICAgIHsgdHlwZTogJ3Vuc3Rha2UnLCBhbW91bnQ6IDMwMDAwMDAwMDAwMDBuIH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgICBhdG9taWM6IGZhbHNlLFxuICAgICAgICB9LFxuICAgICAgICBjcmVhdGVXYXNtQ29udGV4dCgpXG4gICAgICApO1xuXG4gICAgICBjb25zdCB0eEhleCA9IHdhc21UeC50b0Jyb2FkY2FzdEZvcm1hdCgpO1xuICAgICAgY29uc3QgZXhwbGFuYXRpb24gPSBleHBsYWluRG90VHJhbnNhY3Rpb24oeyB0eEhleCwgbWF0ZXJpYWwsIHNlbmRlckFkZHJlc3M6IGFjY291bnRzLmFjY291bnQxLmFkZHJlc3MgfSk7XG5cbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChleHBsYW5hdGlvbi50eXBlLCBUcmFuc2FjdGlvblR5cGUuQmF0Y2gpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGV4cGxhbmF0aW9uLm91dHB1dHMubGVuZ3RoLCAxKTtcbiAgICAgIGFzc2VydC5vayhCaWdJbnQoZXhwbGFuYXRpb24ub3V0cHV0c1swXS5hbW91bnQpID4gMG4pO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGV4cGxhbmF0aW9uLmlucHV0c1swXS5hZGRyZXNzLCBwcm94eURlbGVnYXRlKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ0JhdGNoIHN0YWtlIChib25kICsgYWRkUHJveHkpJywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdzaG91bGQgZXhwbGFpbiBiYXRjaCBzdGFrZSB3aXRoIGJvbmQgYW1vdW50IGFuZCBwcm94eSBkZXBvc2l0IGNvc3QnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBib25kQW1vdW50ID0gMTAwMDAwMDAwMDAwMDBuOyAvLyAxMCBET1RcbiAgICAgIGNvbnN0IHByb3h5RGVsZWdhdGUgPSBhY2NvdW50cy5hY2NvdW50Mi5hZGRyZXNzO1xuXG4gICAgICBjb25zdCB3YXNtVHggPSBidWlsZFRyYW5zYWN0aW9uKFxuICAgICAgICB7XG4gICAgICAgICAgdHlwZTogJ2JhdGNoJyxcbiAgICAgICAgICBjYWxsczogW1xuICAgICAgICAgICAgeyB0eXBlOiAnc3Rha2UnLCBhbW91bnQ6IGJvbmRBbW91bnQsIHBheWVlOiB7IHR5cGU6ICdzdGFrZWQnIH0gfSxcbiAgICAgICAgICAgIHsgdHlwZTogJ2FkZFByb3h5JywgZGVsZWdhdGU6IHByb3h5RGVsZWdhdGUsIHByb3h5VHlwZTogJ1N0YWtpbmcnLCBkZWxheTogMCB9LFxuICAgICAgICAgIF0sXG4gICAgICAgICAgYXRvbWljOiB0cnVlLFxuICAgICAgICB9LFxuICAgICAgICBjcmVhdGVXYXNtQ29udGV4dCgpXG4gICAgICApO1xuXG4gICAgICBjb25zdCB0eEhleCA9IHdhc21UeC50b0Jyb2FkY2FzdEZvcm1hdCgpO1xuICAgICAgY29uc3QgZXhwbGFuYXRpb24gPSBleHBsYWluRG90VHJhbnNhY3Rpb24oeyB0eEhleCwgbWF0ZXJpYWwsIHNlbmRlckFkZHJlc3M6IGFjY291bnRzLmFjY291bnQxLmFkZHJlc3MgfSk7XG5cbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChleHBsYW5hdGlvbi50eXBlLCBUcmFuc2FjdGlvblR5cGUuQmF0Y2gpO1xuXG4gICAgICAvLyBTaG91bGQgaGF2ZSB0d28gb3V0cHV0czogYm9uZCBhbW91bnQgKFNUQUtJTkcpICsgcHJveHkgZGVwb3NpdCBjb3N0ICh0byBwcm94eSBkZWxlZ2F0ZSlcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChleHBsYW5hdGlvbi5vdXRwdXRzLmxlbmd0aCwgMiwgJ1Nob3VsZCBoYXZlIGJvbmQgKyBwcm94eSBkZXBvc2l0IG91dHB1dHMnKTtcblxuICAgICAgY29uc3Qgc3Rha2luZ091dHB1dCA9IGV4cGxhbmF0aW9uLm91dHB1dHMuZmluZCgobykgPT4gby5hZGRyZXNzID09PSAnU1RBS0lORycpO1xuICAgICAgYXNzZXJ0Lm9rKHN0YWtpbmdPdXRwdXQsICdTaG91bGQgaGF2ZSBTVEFLSU5HIG91dHB1dCBmb3IgYm9uZCBhbW91bnQnKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChCaWdJbnQoc3Rha2luZ091dHB1dCEuYW1vdW50KSwgYm9uZEFtb3VudCwgJ0JvbmQgYW1vdW50IHNob3VsZCBtYXRjaCcpO1xuXG4gICAgICBjb25zdCBwcm94eU91dHB1dCA9IGV4cGxhbmF0aW9uLm91dHB1dHMuZmluZCgobykgPT4gby5hZGRyZXNzICE9PSAnU1RBS0lORycpO1xuICAgICAgYXNzZXJ0Lm9rKHByb3h5T3V0cHV0LCAnU2hvdWxkIGhhdmUgcHJveHkgZGVwb3NpdCBvdXRwdXQnKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChwcm94eU91dHB1dCEuYWRkcmVzcywgcHJveHlEZWxlZ2F0ZSk7XG4gICAgICBhc3NlcnQub2soQmlnSW50KHByb3h5T3V0cHV0IS5hbW91bnQpID4gMG4sICdQcm94eSBkZXBvc2l0IGNvc3Qgc2hvdWxkIGJlIHBvc2l0aXZlJyk7XG5cbiAgICAgIC8vIEFsbCBpbnB1dHMgc2hvdWxkIGNvbWUgZnJvbSBzZW5kZXJcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChleHBsYW5hdGlvbi5pbnB1dHMubGVuZ3RoLCAyKTtcbiAgICAgIGZvciAoY29uc3QgaW5wdXQgb2YgZXhwbGFuYXRpb24uaW5wdXRzKSB7XG4gICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChpbnB1dC5hZGRyZXNzLCBhY2NvdW50cy5hY2NvdW50MS5hZGRyZXNzKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ05vbi1iYXRjaCB0cmFuc2FjdGlvbnMgKHNob3VsZCBub3QgYmUgYWZmZWN0ZWQpJywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdzaG91bGQgZXhwbGFpbiB0cmFuc2ZlciBub3JtYWxseScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHdhc21UeCA9IGJ1aWxkVHJhbnNhY3Rpb24oXG4gICAgICAgIHsgdHlwZTogJ3RyYW5zZmVyJywgdG86IGFjY291bnRzLmFjY291bnQyLmFkZHJlc3MsIGFtb3VudDogMTAwMDAwMDAwMDAwMG4sIGtlZXBBbGl2ZTogdHJ1ZSB9LFxuICAgICAgICBjcmVhdGVXYXNtQ29udGV4dCgpXG4gICAgICApO1xuXG4gICAgICBjb25zdCBleHBsYW5hdGlvbiA9IGV4cGxhaW5Eb3RUcmFuc2FjdGlvbih7XG4gICAgICAgIHR4SGV4OiB3YXNtVHgudG9Ccm9hZGNhc3RGb3JtYXQoKSxcbiAgICAgICAgbWF0ZXJpYWwsXG4gICAgICAgIHNlbmRlckFkZHJlc3M6IGFjY291bnRzLmFjY291bnQxLmFkZHJlc3MsXG4gICAgICB9KTtcblxuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGV4cGxhbmF0aW9uLnR5cGUsIFRyYW5zYWN0aW9uVHlwZS5TZW5kKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChleHBsYW5hdGlvbi5vdXRwdXRzLmxlbmd0aCwgMSk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoZXhwbGFuYXRpb24ub3V0cHV0c1swXS5hZGRyZXNzLCBhY2NvdW50cy5hY2NvdW50Mi5hZGRyZXNzKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChleHBsYW5hdGlvbi5vdXRwdXRzWzBdLmFtb3VudCwgJzEwMDAwMDAwMDAwMDAnKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZXhwbGFpbiBzaW5nbGUgdW5zdGFrZSAodW5ib25kKSBub3JtYWxseScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHdhc21UeCA9IGJ1aWxkVHJhbnNhY3Rpb24oeyB0eXBlOiAndW5zdGFrZScsIGFtb3VudDogNTAwMDAwMDAwMDAwMG4gfSwgY3JlYXRlV2FzbUNvbnRleHQoKSk7XG5cbiAgICAgIGNvbnN0IGV4cGxhbmF0aW9uID0gZXhwbGFpbkRvdFRyYW5zYWN0aW9uKHtcbiAgICAgICAgdHhIZXg6IHdhc21UeC50b0Jyb2FkY2FzdEZvcm1hdCgpLFxuICAgICAgICBtYXRlcmlhbCxcbiAgICAgICAgc2VuZGVyQWRkcmVzczogYWNjb3VudHMuYWNjb3VudDEuYWRkcmVzcyxcbiAgICAgIH0pO1xuXG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoZXhwbGFuYXRpb24udHlwZSwgVHJhbnNhY3Rpb25UeXBlLlN0YWtpbmdVbmxvY2spO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGV4cGxhbmF0aW9uLm91dHB1dHMubGVuZ3RoLCAxKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChleHBsYW5hdGlvbi5vdXRwdXRzWzBdLmFkZHJlc3MsICdTVEFLSU5HJyk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoZXhwbGFuYXRpb24ub3V0cHV0c1swXS5hbW91bnQsICc1MDAwMDAwMDAwMDAwJyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGV4cGxhaW4gYmF0Y2ggb2YgdHJhbnNmZXJzIG5vcm1hbGx5IChubyBwcm94eSBpbnZvbHZlZCknLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB3YXNtVHggPSBidWlsZFRyYW5zYWN0aW9uKFxuICAgICAgICB7XG4gICAgICAgICAgdHlwZTogJ2JhdGNoJyxcbiAgICAgICAgICBjYWxsczogW1xuICAgICAgICAgICAgeyB0eXBlOiAndHJhbnNmZXInLCB0bzogYWNjb3VudHMuYWNjb3VudDIuYWRkcmVzcywgYW1vdW50OiAxMDAwMDAwMDAwMDAwbiwga2VlcEFsaXZlOiB0cnVlIH0sXG4gICAgICAgICAgICB7IHR5cGU6ICd0cmFuc2ZlcicsIHRvOiBhY2NvdW50cy5hY2NvdW50My5hZGRyZXNzLCBhbW91bnQ6IDIwMDAwMDAwMDAwMDBuLCBrZWVwQWxpdmU6IHRydWUgfSxcbiAgICAgICAgICBdLFxuICAgICAgICAgIGF0b21pYzogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICAgICAgY3JlYXRlV2FzbUNvbnRleHQoKVxuICAgICAgKTtcblxuICAgICAgY29uc3QgZXhwbGFuYXRpb24gPSBleHBsYWluRG90VHJhbnNhY3Rpb24oe1xuICAgICAgICB0eEhleDogd2FzbVR4LnRvQnJvYWRjYXN0Rm9ybWF0KCksXG4gICAgICAgIG1hdGVyaWFsLFxuICAgICAgICBzZW5kZXJBZGRyZXNzOiBhY2NvdW50cy5hY2NvdW50MS5hZGRyZXNzLFxuICAgICAgfSk7XG5cbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChleHBsYW5hdGlvbi50eXBlLCBUcmFuc2FjdGlvblR5cGUuQmF0Y2gpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGV4cGxhbmF0aW9uLm91dHB1dHMubGVuZ3RoLCAyKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChleHBsYW5hdGlvbi5vdXRwdXRzWzBdLmFtb3VudCwgJzEwMDAwMDAwMDAwMDAnKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChleHBsYW5hdGlvbi5vdXRwdXRzWzFdLmFtb3VudCwgJzIwMDAwMDAwMDAwMDAnKTtcbiAgICB9KTtcbiAgfSk7XG59KTtcbiJdfQ==
|
|
149
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2FzbVBhcnNlckV4cGxhbmF0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vdGVzdC91bml0L3dhc21QYXJzZXJFeHBsYW5hdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7Ozs7Ozs7OztHQVlHOzs7OztBQUVILG9EQUE0QjtBQUM1QixpREFBNEM7QUFDNUMsbURBQXVEO0FBQ3ZELHlEQUFpRTtBQUNqRSw4Q0FBcUc7QUFFckcsMENBQXFEO0FBQ3JELGdFQUF3QztBQUV4QyxRQUFRLENBQUMseUJBQXlCLEVBQUU7SUFDbEMsTUFBTSxJQUFJLEdBQUcsZUFBSyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUMvQixnR0FBZ0c7SUFDaEcsTUFBTSxRQUFRLEdBQUcsZUFBSyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQTRCLENBQUM7SUFFcEUsU0FBUyxpQkFBaUIsQ0FBQyxZQUFtQyxFQUFFO1FBQzlELE9BQU87WUFDTCxNQUFNLEVBQUUsbUJBQVEsQ0FBQyxRQUFRLENBQUMsT0FBTztZQUNqQyxLQUFLLEVBQUUsQ0FBQztZQUNSLEdBQUcsRUFBRSxFQUFFO1lBQ1AsUUFBUTtZQUNSLFFBQVEsRUFBRTtnQkFDUixVQUFVLEVBQUUsdUJBQVksQ0FBQyxXQUFXO2dCQUNwQyxXQUFXLEVBQUUsSUFBSTthQUNsQjtZQUNELGNBQWMsRUFBRSx1QkFBWSxDQUFDLElBQUk7WUFDakMsR0FBRyxTQUFTO1NBQ2IsQ0FBQztJQUNKLENBQUM7SUFFRCxRQUFRLENBQUMsOENBQThDLEVBQUU7UUFDdkQsRUFBRSxDQUFDLHNEQUFzRCxFQUFFO1lBQ3pELE1BQU0sWUFBWSxHQUFHLGNBQWMsQ0FBQyxDQUFDLFFBQVE7WUFDN0MsTUFBTSxhQUFhLEdBQUcsbUJBQVEsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDO1lBRWhELHNFQUFzRTtZQUN0RSxNQUFNLE1BQU0sR0FBRyxJQUFBLDJCQUFnQixFQUM3QjtnQkFDRSxJ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LElBQUksRUFBRSwwQkFBZSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1lBQ3BFLGdCQUFNLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQ2xELCtFQUErRTtZQUMvRSxnQkFBTSxDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sRUFBRSxrREFBa0QsQ0FBQyxDQUFDO1lBQ3ZHLGdCQUFNLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLGVBQWUsQ0FBQyxDQUFDO1FBQ3JFLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogV0FTTSBQYXJzZXIgRXhwbGFuYXRpb24gVGVzdHNcbiAqXG4gKiBUZXN0cyBmb3IgZXhwbGFpbkRvdFRyYW5zYWN0aW9uLCBzcGVjaWZpY2FsbHkgdmVyaWZ5aW5nIGJhdGNoIHRyYW5zYWN0aW9uXG4gKiBoYW5kbGluZyB3aXRoIHByb3h5IGRlcG9zaXQgY29zdHMgbWF0Y2hlcyBsZWdhY3kgYWNjb3VudC1saWIgYmVoYXZpb3IuXG4gKlxuICogVXNlcyBXQVNNLWJ1aWx0IHRyYW5zYWN0aW9ucyAobm90IGxlZ2FjeSByYXdUeCBmaXh0dXJlcykgc2luY2UgdGhlIFdBU01cbiAqIHBhcnNlciByZXF1aXJlcyBtZXRhZGF0YS1jb21wYXRpYmxlIHNpZ25lZCBleHRlbnNpb24gZW5jb2RpbmcuXG4gKlxuICogTm90ZTogd2FzbS1kb3RAMS4zLjAgdXNlcyBoaWdoLWxldmVsIGJ1c2luZXNzIGludGVudHMuIEJhdGNoIHRyYW5zYWN0aW9uc1xuICogYXJlIHByb2R1Y2VkIGF1dG9tYXRpY2FsbHkgZnJvbSB0aGUgaW50ZW50IChlLmcuLCB1bnN0YWtlIHdpdGggc3RvcFN0YWtpbmdcbiAqIHByb2R1Y2VzIGJhdGNoQWxsKHJlbW92ZVByb3h5LCBjaGlsbCwgdW5ib25kKSkuXG4gKi9cblxuaW1wb3J0IGFzc2VydCBmcm9tICdhc3NlcnQnO1xuaW1wb3J0IHsgY29pbnMgfSBmcm9tICdAYml0Z28tYmV0YS9zdGF0aWNzJztcbmltcG9ydCB7IFRyYW5zYWN0aW9uVHlwZSB9IGZyb20gJ0BiaXRnby1iZXRhL3Nkay1jb3JlJztcbmltcG9ydCB7IGV4cGxhaW5Eb3RUcmFuc2FjdGlvbiB9IGZyb20gJy4uLy4uL3NyYy9saWIvd2FzbVBhcnNlcic7XG5pbXBvcnQgeyBidWlsZFRyYW5zYWN0aW9uLCB0eXBlIEJ1aWxkQ29udGV4dCwgdHlwZSBNYXRlcmlhbCBhcyBXYXNtTWF0ZXJpYWwgfSBmcm9tICdAYml0Z28vd2FzbS1kb3QnO1xuaW1wb3J0IHR5cGUgeyBNYXRlcmlhbCB9IGZyb20gJy4uLy4uL3NyYy9saWIvaWZhY2UnO1xuaW1wb3J0IHsgYWNjb3VudHMsIHdlc3RlbmRCbG9jayB9IGZyb20gJy4uL2ZpeHR1cmVzJztcbmltcG9ydCB1dGlscyBmcm9tICcuLi8uLi9zcmMvbGliL3V0aWxzJztcblxuZGVzY3JpYmUoJ1dBU00gUGFyc2VyIEV4cGxhbmF0aW9uJywgZnVuY3Rpb24gKCkge1xuICBjb25zdCBjb2luID0gY29pbnMuZ2V0KCd0ZG90Jyk7XG4gIC8vIHV0aWxzLmdldE1hdGVyaWFsIHJldHVybnMgdGhlIGlmYWNlIE1hdGVyaWFsIHNoYXBlOyBjYXN0IHRvIFdhc21NYXRlcmlhbCBmb3IgYnVpbGRUcmFuc2FjdGlvblxuICBjb25zdCBtYXRlcmlhbCA9IHV0aWxzLmdldE1hdGVyaWFsKGNvaW4pIGFzIE1hdGVyaWFsICYgV2FzbU1hdGVyaWFsO1xuXG4gIGZ1bmN0aW9uIGNyZWF0ZVdhc21Db250ZXh0KG92ZXJyaWRlczogUGFydGlhbDxCdWlsZENvbnRleHQ+ID0ge30pOiBCdWlsZENvbnRleHQge1xuICAgIHJldHVybiB7XG4gICAgICBzZW5kZXI6IGFjY291bnRzLmFjY291bnQxLmFkZHJlc3MsXG4gICAgICBub25jZTogMCxcbiAgICAgIHRpcDogMG4sXG4gICAgICBtYXRlcmlhbCxcbiAgICAgIHZhbGlkaXR5OiB7XG4gICAgICAgIGZpcnN0VmFsaWQ6IHdlc3RlbmRCbG9jay5ibG9ja051bWJlcixcbiAgICAgICAgbWF4RHVyYXRpb246IDI0MDAsXG4gICAgICB9LFxuICAgICAgcmVmZXJlbmNlQmxvY2s6IHdlc3RlbmRCbG9jay5oYXNoLFxuICAgICAgLi4ub3ZlcnJpZGVzLFxuICAgIH07XG4gIH1cblxuICBkZXNjcmliZSgnQmF0Y2ggdW5zdGFrZSAocmVtb3ZlUHJveHkgKyBjaGlsbCArIHVuYm9uZCknLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ3Nob3VsZCBleHBsYWluIGJhdGNoIHVuc3Rha2Ugd2l0aCBwcm94eSBkZXBvc2l0IGNvc3QnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB1bmJvbmRBbW91bnQgPSA1MDAwMDAwMDAwMDAwbjsgLy8gNSBET1RcbiAgICAgIGNvbnN0IHByb3h5RGVsZWdhdGUgPSBhY2NvdW50cy5hY2NvdW50Mi5hZGRyZXNzO1xuXG4gICAgICAvLyBCdWlsZCBhIGZ1bGwgdW5zdGFrZTogcHJvZHVjZXMgYmF0Y2hBbGwocmVtb3ZlUHJveHksIGNoaWxsLCB1bmJvbmQpXG4gICAgICBjb25zdCB3YXNtVHggPSBidWlsZFRyYW5zYWN0aW9uKFxuICAgICAgICB7XG4gICAgICAgICAgdHlwZTogJ3Vuc3Rha2UnLFxuICAgICAgICAgIGFtb3VudDogdW5ib25kQW1vdW50LFxuICAgICAgICAgIHN0b3BTdGFraW5nOiB0cnVlLFxuICAgICAgICAgIHByb3h5QWRkcmVzczogcHJveHlEZWxlZ2F0ZSxcbiAgICAgICAgfSxcbiAgICAgICAgY3JlYXRlV2FzbUNvbnRleHQoKVxuICAgICAgKTtcblxuICAgICAgY29uc3QgdHhIZXggPSB3YXNtVHgudG9Ccm9hZGNhc3RGb3JtYXQoKTtcbiAgICAgIGNvbnN0IGV4cGxhbmF0aW9uID0gZXhwbGFpbkRvdFRyYW5zYWN0aW9uKHtcbiAgICAgICAgdHhIZXgsXG4gICAgICAgIG1hdGVyaWFsLFxuICAgICAgICBzZW5kZXJBZGRyZXNzOiBhY2NvdW50cy5hY2NvdW50MS5hZGRyZXNzLFxuICAgICAgfSk7XG5cbiAgICAgIC8vIFNob3VsZCBiZSBCYXRjaCB0eXBlXG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoZXhwbGFuYXRpb24udHlwZSwgVHJhbnNhY3Rpb25UeXBlLkJhdGNoKTtcbiAgICAgIGFzc2VydC5vayhleHBsYW5hdGlvbi5tZXRob2ROYW1lLmluY2x1ZGVzKCdiYXRjaEFsbCcpLCBgRXhwZWN0ZWQgYmF0Y2hBbGwsIGdvdCAke2V4cGxhbmF0aW9uLm1ldGhvZE5hbWV9YCk7XG5cbiAgICAgIC8vIE91dHB1dHMgc2hvdWxkIGNvbnRhaW4gcHJveHkgZGVwb3NpdCBjb3N0LCBOT1QgdGhlIHVuYm9uZCBhbW91bnRcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChleHBsYW5hdGlvbi5vdXRwdXRzLmxlbmd0aCwgMSwgJ1Nob3VsZCBoYXZlIGV4YWN0bHkgb25lIG91dHB1dCAocHJveHkgZGVwb3NpdCBjb3N0KScpO1xuICAgICAgY29uc3Qgb3V0cHV0ID0gZXhwbGFuYXRpb24ub3V0cHV0c1swXTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChvdXRwdXQuYWRkcmVzcywgYWNjb3VudHMuYWNjb3VudDEuYWRkcmVzcywgJ091dHB1dCBzaG91bGQgZ28gdG8gc2VuZGVyIChkZXBvc2l0IHJlZnVuZCknKTtcbiAgICAgIGNvbnN0IHByb3h5RGVwb3NpdENvc3QgPSBCaWdJbnQob3V0cHV0LmFtb3VudCk7XG4gICAgICBhc3NlcnQub2socHJveHlEZXBvc2l0Q29zdCA+IDBuLCAnUHJveHkgZGVwb3NpdCBjb3N0IHNob3VsZCBiZSBwb3NpdGl2ZScpO1xuICAgICAgLy8gVGhlIHByb3h5IGRlcG9zaXQgY29zdCBzaG91bGQgTk9UIGVxdWFsIHRoZSB1bmJvbmQgYW1vdW50XG4gICAgICBhc3NlcnQubm90U3RyaWN0RXF1YWwocHJveHlEZXBvc2l0Q29zdCwgdW5ib25kQW1vdW50LCAnU2hvdWxkIHVzZSBwcm94eSBkZXBvc2l0IGNvc3QsIG5vdCB1bmJvbmQgYW1vdW50Jyk7XG5cbiAgICAgIC8vIElucHV0IHNob3VsZCBjb21lIGZyb20gdGhlIHByb3h5IGRlbGVnYXRlIGFkZHJlc3NcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChleHBsYW5hdGlvbi5pbnB1dHMubGVuZ3RoLCAxLCAnU2hvdWxkIGhhdmUgZXhhY3RseSBvbmUgaW5wdXQnKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChleHBsYW5hdGlvbi5pbnB1dHNbMF0uYWRkcmVzcywgcHJveHlEZWxlZ2F0ZSwgJ0lucHV0IHNob3VsZCBjb21lIGZyb20gcHJveHkgZGVsZWdhdGUnKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChcbiAgICAgICAgZXhwbGFuYXRpb24uaW5wdXRzWzBdLnZhbHVlU3RyaW5nLFxuICAgICAgICBvdXRwdXQuYW1vdW50LFxuICAgICAgICAnSW5wdXQgdmFsdWUgc2hvdWxkIGVxdWFsIHByb3h5IGRlcG9zaXQgY29zdCdcbiAgICAgICk7XG4gICAgfSk7XG5cbiAgICBpdCgncHJveHkgZGVwb3NpdCBjb3N0IHNob3VsZCBiZSBjb25zaXN0ZW50IGFjcm9zcyBjYWxscycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHByb3h5RGVsZWdhdGUgPSBhY2NvdW50cy5hY2NvdW50Mi5hZGRyZXNzO1xuICAgICAgY29uc3Qgd2FzbVR4ID0gYnVpbGRUcmFuc2FjdGlvbihcbiAgICAgICAge1xuICAgICAgICAgIHR5cGU6ICd1bnN0YWtlJyxcbiAgICAgICAgICBhbW91bnQ6IDEwMDAwMDAwMDAwMDBuLFxuICAgICAgICAgIHN0b3BTdGFraW5nOiB0cnVlLFxuICAgICAgICAgIHByb3h5QWRkcmVzczogcHJveHlEZWxlZ2F0ZSxcbiAgICAgICAgfSxcbiAgICAgICAgY3JlYXRlV2FzbUNvbnRleHQoKVxuICAgICAgKTtcblxuICAgICAgY29uc3QgdHhIZXggPSB3YXNtVHgudG9Ccm9hZGNhc3RGb3JtYXQoKTtcbiAgICAgIGNvbnN0IGV4cGxhbmF0aW9uMSA9IGV4cGxhaW5Eb3RUcmFuc2FjdGlvbih7IHR4SGV4LCBtYXRlcmlhbCwgc2VuZGVyQWRkcmVzczogYWNjb3VudHMuYWNjb3VudDEuYWRkcmVzcyB9KTtcbiAgICAgIGNvbnN0IGV4cGxhbmF0aW9uMiA9IGV4cGxhaW5Eb3RUcmFuc2FjdGlvbih7IHR4SGV4LCBtYXRlcmlhbCwgc2VuZGVyQWRkcmVzczogYWNjb3VudHMuYWNjb3VudDEuYWRkcmVzcyB9KTtcblxuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGV4cGxhbmF0aW9uMS5vdXRwdXRzWzBdLmFtb3VudCwgZXhwbGFuYXRpb24yLm91dHB1dHNbMF0uYW1vdW50KTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ0JhdGNoIHN0YWtlIChib25kICsgYWRkUHJveHkpJywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdzaG91bGQgZXhwbGFpbiBiYXRjaCBzdGFrZSB3aXRoIGJvbmQgYW1vdW50IGFuZCBwcm94eSBkZXBvc2l0IGNvc3QnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBib25kQW1vdW50ID0gMTAwMDAwMDAwMDAwMDBuOyAvLyAxMCBET1RcbiAgICAgIGNvbnN0IHByb3h5RGVsZWdhdGUgPSBhY2NvdW50cy5hY2NvdW50Mi5hZGRyZXNzO1xuXG4gICAgICAvLyBCdWlsZCBhIG5ldyBzdGFrZSB3aXRoIHByb3h5OiBwcm9kdWNlcyBiYXRjaEFsbChib25kLCBhZGRQcm94eSlcbiAgICAgIGNvbnN0IHdhc21UeCA9IGJ1aWxkVHJhbnNhY3Rpb24oXG4gICAgICAgIHtcbiAgICAgICAgICB0eXBlOiAnc3Rha2UnLFxuICAgICAgICAgIGFtb3VudDogYm9uZEFtb3VudCxcbiAgICAgICAgICBwcm94eUFkZHJlc3M6IHByb3h5RGVsZWdhdGUsXG4gICAgICAgICAgcGF5ZWU6IHsgdHlwZTogJ3N0YWtlZCcgfSxcbiAgICAgICAgfSxcbiAgICAgICAgY3JlYXRlV2FzbUNvbnRleHQoKVxuICAgICAgKTtcblxuICAgICAgY29uc3QgdHhIZXggPSB3YXNtVHgudG9Ccm9hZGNhc3RGb3JtYXQoKTtcbiAgICAgIGNvbnN0IGV4cGxhbmF0aW9uID0gZXhwbGFpbkRvdFRyYW5zYWN0aW9uKHsgdHhIZXgsIG1hdGVyaWFsLCBzZW5kZXJBZGRyZXNzOiBhY2NvdW50cy5hY2NvdW50MS5hZGRyZXNzIH0pO1xuXG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoZXhwbGFuYXRpb24udHlwZSwgVHJhbnNhY3Rpb25UeXBlLkJhdGNoKTtcblxuICAgICAgLy8gU2hvdWxkIGhhdmUgdHdvIG91dHB1dHM6IGJvbmQgYW1vdW50ICh0byBTVEFLSU5HX0RFU1RJTkFUSU9OIHNlbnRpbmVsKSArIHByb3h5IGRlcG9zaXQgY29zdCAodG8gcHJveHkgZGVsZWdhdGUpXG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoZXhwbGFuYXRpb24ub3V0cHV0cy5sZW5ndGgsIDIsICdTaG91bGQgaGF2ZSBib25kICsgcHJveHkgZGVwb3NpdCBvdXRwdXRzJyk7XG5cbiAgICAgIGNvbnN0IHN0YWtpbmdPdXRwdXQgPSBleHBsYW5hdGlvbi5vdXRwdXRzLmZpbmQoXG4gICAgICAgIChvKSA9PiBvLmFkZHJlc3MgPT09ICc1QzRocmZqdzlEalhaVHpWM013enJyQXI5UDFNSmhTcnZXR1dxaTFlU3V5VXBuaE0nXG4gICAgICApO1xuICAgICAgYXNzZXJ0Lm9rKHN0YWtpbmdPdXRwdXQsICdTaG91bGQgaGF2ZSBTVEFLSU5HX0RFU1RJTkFUSU9OIHNlbnRpbmVsIG91dHB1dCBmb3IgYm9uZCBhbW91bnQnKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChCaWdJbnQoc3Rha2luZ091dHB1dCEuYW1vdW50KSwgYm9uZEFtb3VudCwgJ0JvbmQgYW1vdW50IHNob3VsZCBtYXRjaCcpO1xuXG4gICAgICBjb25zdCBwcm94eU91dHB1dCA9IGV4cGxhbmF0aW9uLm91dHB1dHMuZmluZChcbiAgICAgICAgKG8pID0+IG8uYWRkcmVzcyAhPT0gJzVDNGhyZmp3OURqWFpUelYzTXd6cnJBcjlQMU1KaFNydldHV3FpMWVTdXlVcG5oTSdcbiAgICAgICk7XG4gICAgICBhc3NlcnQub2socHJveHlPdXRwdXQsICdTaG91bGQgaGF2ZSBwcm94eSBkZXBvc2l0IG91dHB1dCcpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHByb3h5T3V0cHV0IS5hZGRyZXNzLCBwcm94eURlbGVnYXRlKTtcbiAgICAgIGFzc2VydC5vayhCaWdJbnQocHJveHlPdXRwdXQhLmFtb3VudCkgPiAwbiwgJ1Byb3h5IGRlcG9zaXQgY29zdCBzaG91bGQgYmUgcG9zaXRpdmUnKTtcblxuICAgICAgLy8gQWxsIGlucHV0cyBzaG91bGQgY29tZSBmcm9tIHNlbmRlclxuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGV4cGxhbmF0aW9uLmlucHV0cy5sZW5ndGgsIDIpO1xuICAgICAgZm9yIChjb25zdCBpbnB1dCBvZiBleHBsYW5hdGlvbi5pbnB1dHMpIHtcbiAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGlucHV0LmFkZHJlc3MsIGFjY291bnRzLmFjY291bnQxLmFkZHJlc3MpO1xuICAgICAgfVxuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnTm9uLWJhdGNoIHRyYW5zYWN0aW9ucyAoc2hvdWxkIG5vdCBiZSBhZmZlY3RlZCknLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ3Nob3VsZCBleHBsYWluIHRyYW5zZmVyIG5vcm1hbGx5JywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3Qgd2FzbVR4ID0gYnVpbGRUcmFuc2FjdGlvbihcbiAgICAgICAgeyB0eXBlOiAncGF5bWVudCcsIHRvOiBhY2NvdW50cy5hY2NvdW50Mi5hZGRyZXNzLCBhbW91bnQ6IDEwMDAwMDAwMDAwMDBuLCBrZWVwQWxpdmU6IHRydWUgfSxcbiAgICAgICAgY3JlYXRlV2FzbUNvbnRleHQoKVxuICAgICAgKTtcblxuICAgICAgY29uc3QgZXhwbGFuYXRpb24gPSBleHBsYWluRG90VHJhbnNhY3Rpb24oe1xuICAgICAgICB0eEhleDogd2FzbVR4LnRvQnJvYWRjYXN0Rm9ybWF0KCksXG4gICAgICAgIG1hdGVyaWFsLFxuICAgICAgICBzZW5kZXJBZGRyZXNzOiBhY2NvdW50cy5hY2NvdW50MS5hZGRyZXNzLFxuICAgICAgfSk7XG5cbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChleHBsYW5hdGlvbi50eXBlLCBUcmFuc2FjdGlvblR5cGUuU2VuZCk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoZXhwbGFuYXRpb24ub3V0cHV0cy5sZW5ndGgsIDEpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGV4cGxhbmF0aW9uLm91dHB1dHNbMF0uYWRkcmVzcywgYWNjb3VudHMuYWNjb3VudDIuYWRkcmVzcyk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoZXhwbGFuYXRpb24ub3V0cHV0c1swXS5hbW91bnQsICcxMDAwMDAwMDAwMDAwJyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGV4cGxhaW4gc2luZ2xlIHVuc3Rha2UgKHVuYm9uZCkgbm9ybWFsbHknLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB3YXNtVHggPSBidWlsZFRyYW5zYWN0aW9uKHsgdHlwZTogJ3Vuc3Rha2UnLCBhbW91bnQ6IDUwMDAwMDAwMDAwMDBuIH0sIGNyZWF0ZVdhc21Db250ZXh0KCkpO1xuXG4gICAgICBjb25zdCBleHBsYW5hdGlvbiA9IGV4cGxhaW5Eb3RUcmFuc2FjdGlvbih7XG4gICAgICAgIHR4SGV4OiB3YXNtVHgudG9Ccm9hZGNhc3RGb3JtYXQoKSxcbiAgICAgICAgbWF0ZXJpYWwsXG4gICAgICAgIHNlbmRlckFkZHJlc3M6IGFjY291bnRzLmFjY291bnQxLmFkZHJlc3MsXG4gICAgICB9KTtcblxuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGV4cGxhbmF0aW9uLnR5cGUsIFRyYW5zYWN0aW9uVHlwZS5TdGFraW5nVW5sb2NrKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChleHBsYW5hdGlvbi5vdXRwdXRzLmxlbmd0aCwgMSk7XG4gICAgICAvLyBTVEFLSU5HX0RFU1RJTkFUSU9OIHNlbnRpbmVsOiB1bmJvbmQgZG9lc24ndCB0cmFuc2ZlciB0byBhbiBleHRlcm5hbCBhZGRyZXNzXG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoZXhwbGFuYXRpb24ub3V0cHV0c1swXS5hZGRyZXNzLCAnNUM0aHJmanc5RGpYWlR6VjNNd3pyckFyOVAxTUpoU3J2V0dXcWkxZVN1eVVwbmhNJyk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoZXhwbGFuYXRpb24ub3V0cHV0c1swXS5hbW91bnQsICc1MDAwMDAwMDAwMDAwJyk7XG4gICAgfSk7XG4gIH0pO1xufSk7XG4iXX0=
|