@witnet/sdk 1.1.5 → 1.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.env_witnet +13 -1
- package/dist/package.json +31 -24
- package/dist/src/bin/helpers.d.ts +59 -49
- package/dist/src/bin/helpers.d.ts.map +1 -1
- package/dist/src/bin/helpers.js +228 -229
- package/dist/src/index.d.ts +3 -4
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +4 -47
- package/dist/src/lib/crypto/account.d.ts +3 -3
- package/dist/src/lib/crypto/account.d.ts.map +1 -1
- package/dist/src/lib/crypto/account.js +31 -25
- package/dist/src/lib/crypto/coinbase.d.ts +4 -4
- package/dist/src/lib/crypto/coinbase.d.ts.map +1 -1
- package/dist/src/lib/crypto/coinbase.js +8 -13
- package/dist/src/lib/crypto/index.d.ts +7 -7
- package/dist/src/lib/crypto/index.d.ts.map +1 -1
- package/dist/src/lib/crypto/index.js +7 -30
- package/dist/src/lib/crypto/interfaces.d.ts +5 -5
- package/dist/src/lib/crypto/interfaces.d.ts.map +1 -1
- package/dist/src/lib/crypto/interfaces.js +2 -3
- package/dist/src/lib/crypto/payloads/DataRequestPayload.d.ts +5 -5
- package/dist/src/lib/crypto/payloads/DataRequestPayload.d.ts.map +1 -1
- package/dist/src/lib/crypto/payloads/DataRequestPayload.js +98 -85
- package/dist/src/lib/crypto/payloads/StakePayload.d.ts +3 -4
- package/dist/src/lib/crypto/payloads/StakePayload.d.ts.map +1 -1
- package/dist/src/lib/crypto/payloads/StakePayload.js +81 -71
- package/dist/src/lib/crypto/payloads/UnstakePayload.d.ts +4 -5
- package/dist/src/lib/crypto/payloads/UnstakePayload.d.ts.map +1 -1
- package/dist/src/lib/crypto/payloads/UnstakePayload.js +36 -43
- package/dist/src/lib/crypto/payloads/ValueTransferPayload.d.ts +3 -4
- package/dist/src/lib/crypto/payloads/ValueTransferPayload.d.ts.map +1 -1
- package/dist/src/lib/crypto/payloads/ValueTransferPayload.js +46 -48
- package/dist/src/lib/crypto/payloads.d.ts +5 -5
- package/dist/src/lib/crypto/payloads.d.ts.map +1 -1
- package/dist/src/lib/crypto/payloads.js +44 -45
- package/dist/src/lib/crypto/signer.d.ts +3 -3
- package/dist/src/lib/crypto/signer.d.ts.map +1 -1
- package/dist/src/lib/crypto/signer.js +45 -88
- package/dist/src/lib/crypto/transmitters/DataRequests.d.ts +6 -6
- package/dist/src/lib/crypto/transmitters/DataRequests.d.ts.map +1 -1
- package/dist/src/lib/crypto/transmitters/DataRequests.js +6 -10
- package/dist/src/lib/crypto/transmitters/StakeDeposits.d.ts +5 -5
- package/dist/src/lib/crypto/transmitters/StakeDeposits.d.ts.map +1 -1
- package/dist/src/lib/crypto/transmitters/StakeDeposits.js +7 -11
- package/dist/src/lib/crypto/transmitters/StakeWithdrawals.d.ts +6 -7
- package/dist/src/lib/crypto/transmitters/StakeWithdrawals.d.ts.map +1 -1
- package/dist/src/lib/crypto/transmitters/StakeWithdrawals.js +9 -13
- package/dist/src/lib/crypto/transmitters/ValueTransfers.d.ts +5 -5
- package/dist/src/lib/crypto/transmitters/ValueTransfers.d.ts.map +1 -1
- package/dist/src/lib/crypto/transmitters/ValueTransfers.js +6 -10
- package/dist/src/lib/crypto/transmitters.d.ts +6 -6
- package/dist/src/lib/crypto/transmitters.d.ts.map +1 -1
- package/dist/src/lib/crypto/transmitters.js +89 -76
- package/dist/src/lib/crypto/types.d.ts +1 -2
- package/dist/src/lib/crypto/types.d.ts.map +1 -1
- package/dist/src/lib/crypto/types.js +71 -67
- package/dist/src/lib/crypto/utils.d.ts +5 -5
- package/dist/src/lib/crypto/utils.d.ts.map +1 -1
- package/dist/src/lib/crypto/utils.js +48 -66
- package/dist/src/lib/crypto/wallet.d.ts +3 -3
- package/dist/src/lib/crypto/wallet.d.ts.map +1 -1
- package/dist/src/lib/crypto/wallet.js +72 -89
- package/dist/src/lib/index.d.ts +5 -4
- package/dist/src/lib/index.d.ts.map +1 -1
- package/dist/src/lib/index.js +6 -44
- package/dist/src/lib/radon/ccdr/eth.d.ts +1 -1
- package/dist/src/lib/radon/ccdr/eth.d.ts.map +1 -1
- package/dist/src/lib/radon/ccdr/eth.js +95 -83
- package/dist/src/lib/radon/ccdr/index.d.ts +2 -2
- package/dist/src/lib/radon/ccdr/index.d.ts.map +1 -1
- package/dist/src/lib/radon/ccdr/index.js +3 -39
- package/dist/src/lib/radon/ccdr/wit.d.ts +2 -2
- package/dist/src/lib/radon/ccdr/wit.d.ts.map +1 -1
- package/dist/src/lib/radon/ccdr/wit.js +17 -19
- package/dist/src/lib/radon/filters.d.ts.map +1 -1
- package/dist/src/lib/radon/filters.js +23 -19
- package/dist/src/lib/radon/index.d.ts +10 -11
- package/dist/src/lib/radon/index.d.ts.map +1 -1
- package/dist/src/lib/radon/index.js +205 -187
- package/dist/src/lib/radon/reducers.d.ts +2 -2
- package/dist/src/lib/radon/reducers.d.ts.map +1 -1
- package/dist/src/lib/radon/reducers.js +48 -34
- package/dist/src/lib/radon/types.d.ts +2 -2
- package/dist/src/lib/radon/types.d.ts.map +1 -1
- package/dist/src/lib/radon/types.js +80 -110
- package/dist/src/lib/radon/utils.d.ts +3 -3
- package/dist/src/lib/radon/utils.d.ts.map +1 -1
- package/dist/src/lib/radon/utils.js +49 -52
- package/dist/src/lib/rest/kermit.d.ts +20 -0
- package/dist/src/lib/rest/kermit.d.ts.map +1 -0
- package/dist/src/lib/rest/kermit.js +68 -0
- package/dist/src/lib/rest/types.d.ts +5 -0
- package/dist/src/lib/rest/types.d.ts.map +1 -0
- package/dist/src/lib/rest/types.js +2 -0
- package/dist/src/lib/rpc/index.d.ts +2 -2
- package/dist/src/lib/rpc/index.d.ts.map +1 -1
- package/dist/src/lib/rpc/index.js +3 -19
- package/dist/src/lib/rpc/nodes.d.ts +13 -13
- package/dist/src/lib/rpc/nodes.d.ts.map +1 -1
- package/dist/src/lib/rpc/nodes.js +69 -98
- package/dist/src/lib/rpc/provider.d.ts +4 -4
- package/dist/src/lib/rpc/provider.d.ts.map +1 -1
- package/dist/src/lib/rpc/provider.js +106 -122
- package/dist/src/lib/rpc/types.d.ts +2 -2
- package/dist/src/lib/rpc/types.d.ts.map +1 -1
- package/dist/src/lib/rpc/types.js +13 -16
- package/dist/src/lib/types.d.ts +5 -4
- package/dist/src/lib/types.d.ts.map +1 -1
- package/dist/src/lib/types.js +3 -9
- package/dist/src/lib/utils.d.ts +5 -5
- package/dist/src/lib/utils.d.ts.map +1 -1
- package/dist/src/lib/utils.js +40 -99
- package/dist/witnet/assets/index.cjs +6 -0
- package/dist/witnet/assets/index.d.cts +29 -0
- package/dist/witnet/assets/index.d.cts.map +1 -0
- package/dist/witnet/assets/modals/index.cjs +9 -0
- package/dist/witnet/assets/modals/index.d.cts +16 -0
- package/dist/witnet/assets/modals/index.d.cts.map +1 -0
- package/dist/witnet/assets/modals/web3/eth.cjs +23 -0
- package/dist/witnet/assets/modals/web3/eth.d.cts +4 -0
- package/dist/witnet/assets/modals/web3/eth.d.cts.map +1 -0
- package/dist/witnet/assets/modals/web3/ipfs.cjs +18 -0
- package/dist/witnet/assets/modals/web3/ipfs.d.cts +3 -0
- package/dist/witnet/assets/modals/web3/ipfs.d.cts.map +1 -0
- package/dist/witnet/assets/modals/web3/wit.cjs +24 -0
- package/dist/witnet/assets/modals/web3/wit.d.cts +3 -0
- package/dist/witnet/assets/modals/web3/wit.d.cts.map +1 -0
- package/dist/witnet/assets/requests.cjs +43 -0
- package/dist/witnet/assets/requests.d.cts +10 -0
- package/dist/witnet/assets/requests.d.cts.map +1 -0
- package/package.json +31 -24
- package/src/bin/bots/watcher.cjs +354 -0
- package/src/bin/cli/history.cjs +31 -0
- package/src/bin/cli/inspect.js +545 -471
- package/src/bin/cli/network.js +658 -557
- package/src/bin/cli/nodes.js +392 -332
- package/src/bin/cli/radon.js +1071 -844
- package/src/bin/cli/wallet.js +1317 -1074
- package/src/bin/helpers.js +969 -868
- package/src/bin/index.js +329 -0
- package/witnet/assets/_index.cjs +5 -0
- package/witnet/assets/_requests.cjs +25 -0
- package/witnet/assets/_sources.cjs +36 -0
- package/witnet/assets/_templates.cjs +36 -0
- package/witnet/assets/index.cjs +4 -0
- package/witnet/assets/modals/index.cjs +7 -0
- package/witnet/assets/modals/web3/eth.cjs +27 -0
- package/witnet/assets/modals/web3/ipfs.cjs +22 -0
- package/witnet/assets/modals/web3/wit.cjs +28 -0
- package/witnet/assets/requests.cjs +49 -0
- package/witnet/witnet copy.proto +457 -0
- package/witnet/witnet.proto +456 -0
- package/witnet/witnet_toolkit-1.6.7-x86_64-pc-windows-msvc.exe +0 -0
- package/witnet/witnet_toolkit-1.7.1-x86_64-pc-windows-msvc.exe +0 -0
- package/witnet/witnet_toolkit-2.0.0-rc.7-x86_64-pc-windows-msvc.exe +0 -0
- package/witnet/witnet_toolkit-2.0.2-x86_64-pc-windows-msvc.exe +0 -0
- package/witnet/witnet_toolkit-2.0.21-x86_64-pc-windows-msvc.exe +0 -0
- package/witnet/witnet_toolkit-2.0.7-x86_64-pc-windows-msvc.exe +0 -0
- package/witnet/witnet_toolkit-2.0.8-x86_64-pc-windows-msvc.exe +0 -0
- package/dist/witnet/assets/index.d.ts +0 -29
- package/dist/witnet/assets/index.d.ts.map +0 -1
- package/dist/witnet/assets/index.js +0 -6
- package/dist/witnet/assets/modals/index.d.ts +0 -16
- package/dist/witnet/assets/modals/index.d.ts.map +0 -1
- package/dist/witnet/assets/modals/index.js +0 -11
- package/dist/witnet/assets/modals/web3/eth.d.ts +0 -5
- package/dist/witnet/assets/modals/web3/eth.d.ts.map +0 -1
- package/dist/witnet/assets/modals/web3/eth.js +0 -26
- package/dist/witnet/assets/modals/web3/ipfs.d.ts +0 -4
- package/dist/witnet/assets/modals/web3/ipfs.d.ts.map +0 -1
- package/dist/witnet/assets/modals/web3/ipfs.js +0 -18
- package/dist/witnet/assets/modals/web3/wit.d.ts +0 -4
- package/dist/witnet/assets/modals/web3/wit.d.ts.map +0 -1
- package/dist/witnet/assets/modals/web3/wit.js +0 -17
- package/dist/witnet/assets/requests.d.ts +0 -11
- package/dist/witnet/assets/requests.d.ts.map +0 -1
- package/dist/witnet/assets/requests.js +0 -43
- package/src/bin/cli/history.js +0 -31
- package/src/bin/postinstall.js +0 -9
- package/src/bin/toolkit.js +0 -290
- package/witnet/assets/_index.js +0 -8
- package/witnet/assets/_requests.js +0 -25
- package/witnet/assets/_sources.js +0 -36
- package/witnet/assets/_templates.js +0 -36
- package/witnet/assets/index.js +0 -4
- package/witnet/assets/modals/index.js +0 -9
- package/witnet/assets/modals/web3/eth.js +0 -29
- package/witnet/assets/modals/web3/ipfs.js +0 -22
- package/witnet/assets/modals/web3/wit.js +0 -21
- package/witnet/assets/requests.js +0 -49
- /package/witnet/assets/modals/web3/{btc.js → btc.cjs} +0 -0
- /package/witnet/assets/modals/web3/{sol.js → sol.cjs} +0 -0
package/dist/src/bin/helpers.js
CHANGED
|
@@ -1,18 +1,19 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
const
|
|
8
|
-
const
|
|
1
|
+
import { exec } from "node:child_process";
|
|
2
|
+
import { createRequire } from "node:module";
|
|
3
|
+
import * as net from "node:net";
|
|
4
|
+
import * as os from "node:os";
|
|
5
|
+
import * as readline from "node:readline";
|
|
6
|
+
import moment from "moment";
|
|
7
|
+
const require = createRequire(import.meta.url);
|
|
8
|
+
export const colorstrip = (str) => str.replace(/[\u001b\u009b][[()#;?]*(?:[0-9]{1,4}(?:;[0-9]{0,4})*)?[0-9A-ORZcf-nqry=><]/g, "");
|
|
9
|
+
export const commas = (number) => {
|
|
9
10
|
const parts = number.toString().split(".");
|
|
10
11
|
const result = parts.length <= 1
|
|
11
12
|
? `${parts[0].replace(/\B(?=(\d{3})+(?!\d))/g, ",")}`
|
|
12
13
|
: `${parts[0].replace(/\B(?=(\d{3})+(?!\d))/g, ",")}.${parts[1]}`;
|
|
13
14
|
return result;
|
|
14
15
|
};
|
|
15
|
-
function toFixedTrunc(x, n) {
|
|
16
|
+
export function toFixedTrunc(x, n) {
|
|
16
17
|
const v = (typeof x === "string" ? x : x.toString()).split(".");
|
|
17
18
|
if (n <= 0)
|
|
18
19
|
return v[0];
|
|
@@ -23,8 +24,7 @@ function toFixedTrunc(x, n) {
|
|
|
23
24
|
f += "0";
|
|
24
25
|
return `${v[0]}.${f}`;
|
|
25
26
|
}
|
|
26
|
-
|
|
27
|
-
const whole_wits = (number, digits) => {
|
|
27
|
+
export const whole_wits = (number, digits) => {
|
|
28
28
|
const lookup = [
|
|
29
29
|
{ value: 1n, symbol: "pedros" },
|
|
30
30
|
{ value: 10n ** 6n, symbol: "mWits" },
|
|
@@ -33,10 +33,18 @@ const whole_wits = (number, digits) => {
|
|
|
33
33
|
{ value: 10n ** 15n, symbol: "MWits" },
|
|
34
34
|
];
|
|
35
35
|
// const regexp = /\.0+$|(?<=\.[0-9])0+$/
|
|
36
|
-
const item = lookup.findLast(item => number >= item.value);
|
|
37
|
-
const quotient = item
|
|
38
|
-
|
|
39
|
-
|
|
36
|
+
const item = lookup.findLast((item) => number >= item.value);
|
|
37
|
+
const quotient = item
|
|
38
|
+
? Number(BigInt(number) / item.value)
|
|
39
|
+
: number.toString();
|
|
40
|
+
const decimals = item
|
|
41
|
+
? (item.value + BigInt(number) - BigInt(quotient) * item.value)
|
|
42
|
+
.toString()
|
|
43
|
+
.slice(1)
|
|
44
|
+
: "";
|
|
45
|
+
return item
|
|
46
|
+
? `${commas(quotient)}${decimals !== "" ? `.${decimals.slice(0, digits)}` : ""} ${item.symbol}`
|
|
47
|
+
: "(no coins)";
|
|
40
48
|
};
|
|
41
49
|
const bblue = (str) => `\x1b[1;98;44m${str}\x1b[0;0;0m`;
|
|
42
50
|
const bcyan = (str) => `\x1b[38;46m${str}\x1b[0;0m`;
|
|
@@ -63,7 +71,34 @@ const normal = (str) => `\x1b[98m${str}\x1b[0m`;
|
|
|
63
71
|
const red = (str) => `\x1b[31m${str}\x1b[0m`;
|
|
64
72
|
const white = (str) => `\x1b[1;98m${str}\x1b[0m`;
|
|
65
73
|
const yellow = (str) => `\x1b[33m${str}\x1b[0m`;
|
|
66
|
-
|
|
74
|
+
export const colors = {
|
|
75
|
+
bblue,
|
|
76
|
+
bcyan,
|
|
77
|
+
bgreen,
|
|
78
|
+
bred,
|
|
79
|
+
bviolet,
|
|
80
|
+
lcyan,
|
|
81
|
+
lgray,
|
|
82
|
+
lgreen,
|
|
83
|
+
lmagenta,
|
|
84
|
+
lyellow,
|
|
85
|
+
mblue,
|
|
86
|
+
mcyan,
|
|
87
|
+
mgreen,
|
|
88
|
+
mmagenta,
|
|
89
|
+
mred,
|
|
90
|
+
myellow,
|
|
91
|
+
blue,
|
|
92
|
+
cyan,
|
|
93
|
+
gray,
|
|
94
|
+
green,
|
|
95
|
+
magenta,
|
|
96
|
+
normal,
|
|
97
|
+
red,
|
|
98
|
+
white,
|
|
99
|
+
yellow,
|
|
100
|
+
};
|
|
101
|
+
export function countLeaves(t, obj) {
|
|
67
102
|
if (!obj || typeof obj === "string")
|
|
68
103
|
return 0;
|
|
69
104
|
if (obj instanceof t)
|
|
@@ -73,10 +108,10 @@ function countLeaves(t, obj) {
|
|
|
73
108
|
else
|
|
74
109
|
return Object.values(obj).reduce((sum, item) => sum + countLeaves(t, item), 0);
|
|
75
110
|
}
|
|
76
|
-
function deleteExtraFlags(args) {
|
|
77
|
-
return args.filter(arg => !arg.startsWith("--"));
|
|
111
|
+
export function deleteExtraFlags(args) {
|
|
112
|
+
return args.filter((arg) => !arg.startsWith("--"));
|
|
78
113
|
}
|
|
79
|
-
function cmd(...command) {
|
|
114
|
+
export function cmd(...command) {
|
|
80
115
|
return new Promise((resolve, reject) => {
|
|
81
116
|
exec(command.join(" "), { maxBuffer: 1024 * 1024 * 10 }, (error, stdout, stderr) => {
|
|
82
117
|
if (error) {
|
|
@@ -89,8 +124,7 @@ function cmd(...command) {
|
|
|
89
124
|
});
|
|
90
125
|
});
|
|
91
126
|
}
|
|
92
|
-
|
|
93
|
-
async function execRadonBytecode(bytecode, ...flags) {
|
|
127
|
+
export async function execRadonBytecode(bytecode, ...flags) {
|
|
94
128
|
if (!isHexString(bytecode)) {
|
|
95
129
|
throw EvalError("invalid hex string");
|
|
96
130
|
}
|
|
@@ -109,10 +143,10 @@ async function execRadonBytecode(bytecode, ...flags) {
|
|
|
109
143
|
// })
|
|
110
144
|
}
|
|
111
145
|
}
|
|
112
|
-
function extractFromArgs(args, flags) {
|
|
146
|
+
export function extractFromArgs(args, flags) {
|
|
113
147
|
const curated = {};
|
|
114
148
|
if (args && flags) {
|
|
115
|
-
Object.keys(flags).forEach(flag => {
|
|
149
|
+
Object.keys(flags).forEach((flag) => {
|
|
116
150
|
const flagIndex = args.indexOf(`--${flag}`);
|
|
117
151
|
if (flagIndex >= 0) {
|
|
118
152
|
if (flags[flag].param) {
|
|
@@ -134,12 +168,12 @@ function extractFromArgs(args, flags) {
|
|
|
134
168
|
}
|
|
135
169
|
return [args, curated];
|
|
136
170
|
}
|
|
137
|
-
function fromHexString(hexString) {
|
|
171
|
+
export function fromHexString(hexString) {
|
|
138
172
|
if (hexString.startsWith("0x"))
|
|
139
173
|
hexString = hexString.slice(2);
|
|
140
174
|
return Uint8Array.from(hexString.match(/.{1,2}/g).map((byte) => parseInt(byte, 16)));
|
|
141
175
|
}
|
|
142
|
-
function ipIsPrivateOrLocalhost(ip) {
|
|
176
|
+
export function ipIsPrivateOrLocalhost(ip) {
|
|
143
177
|
if (ip.substring(0, 7) === "::ffff:") {
|
|
144
178
|
ip = ip.substring(7);
|
|
145
179
|
}
|
|
@@ -149,10 +183,12 @@ function ipIsPrivateOrLocalhost(ip) {
|
|
|
149
183
|
return true;
|
|
150
184
|
}
|
|
151
185
|
// 10.0.0.0 - 10.255.255.255 || 172.16.0.0 - 172.31.255.255 || 192.168.0.0 - 192.168.255.255
|
|
152
|
-
return /^(10)\.(.*)\.(.*)\.(.*)$/.test(ip) ||
|
|
186
|
+
return (/^(10)\.(.*)\.(.*)\.(.*)$/.test(ip) ||
|
|
187
|
+
/^(172)\.(1[6-9]|2[0-9]|3[0-1])\.(.*)\.(.*)$/.test(ip) ||
|
|
188
|
+
/^(192)\.(168)\.(.*)\.(.*)$/.test(ip));
|
|
153
189
|
}
|
|
154
190
|
// else: ip is IPv6
|
|
155
|
-
const firstWord = ip.split(":").find(el => !!el); // get first not empty word
|
|
191
|
+
const firstWord = ip.split(":").find((el) => !!el); // get first not empty word
|
|
156
192
|
// equivalent of 127.0.0.1 in IPv6
|
|
157
193
|
if (ip === "::1")
|
|
158
194
|
return true;
|
|
@@ -175,29 +211,33 @@ function ipIsPrivateOrLocalhost(ip) {
|
|
|
175
211
|
// Any other IP address is not Unique Local Address (ULA)
|
|
176
212
|
return false;
|
|
177
213
|
}
|
|
178
|
-
function isHexStringOfLength(str, length) {
|
|
179
|
-
return (isHexString(str) &&
|
|
214
|
+
export function isHexStringOfLength(str, length) {
|
|
215
|
+
return ((isHexString(str) &&
|
|
180
216
|
((str.startsWith("0x") && str.slice(2).length === length * 2) ||
|
|
181
|
-
str.length === length * 2)) ||
|
|
217
|
+
str.length === length * 2)) ||
|
|
218
|
+
isWildcard(str));
|
|
182
219
|
}
|
|
183
|
-
function isHexString(str) {
|
|
184
|
-
return (typeof str === "string" &&
|
|
220
|
+
export function isHexString(str) {
|
|
221
|
+
return ((typeof str === "string" &&
|
|
185
222
|
((str.startsWith("0x") && /^[a-fA-F0-9]+$/i.test(str.slice(2))) ||
|
|
186
|
-
/^[a-fA-F0-9]+$/i.test(str))) ||
|
|
223
|
+
/^[a-fA-F0-9]+$/i.test(str))) ||
|
|
224
|
+
isWildcard(str));
|
|
187
225
|
}
|
|
188
|
-
function toHexString(buffer, prefix0x = false) {
|
|
226
|
+
export function toHexString(buffer, prefix0x = false) {
|
|
189
227
|
if (buffer instanceof Uint8Array)
|
|
190
228
|
buffer = Buffer.from(buffer);
|
|
191
|
-
return (prefix0x ? "0x" : "") +
|
|
192
|
-
.
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
}
|
|
196
|
-
|
|
229
|
+
return ((prefix0x ? "0x" : "") +
|
|
230
|
+
Array.prototype.map
|
|
231
|
+
.call(buffer, (x) => `00${x.toString(16)}`.slice(-2))
|
|
232
|
+
.join("")
|
|
233
|
+
.match(/[a-fA-F0-9]{2}/g)
|
|
234
|
+
.join(""));
|
|
235
|
+
}
|
|
236
|
+
export function parseURL(url) {
|
|
197
237
|
try {
|
|
198
238
|
const parsedUrl = new URL(url);
|
|
199
239
|
return [
|
|
200
|
-
parsedUrl.protocol
|
|
240
|
+
`${parsedUrl.protocol}//`,
|
|
201
241
|
parsedUrl.host,
|
|
202
242
|
parsedUrl.pathname.slice(1),
|
|
203
243
|
parsedUrl.search.slice(1),
|
|
@@ -207,24 +247,24 @@ function parseURL(url) {
|
|
|
207
247
|
throw new TypeError(`Invalid URL was provided: ${url}`);
|
|
208
248
|
}
|
|
209
249
|
}
|
|
210
|
-
function showUsage(cmd, module) {
|
|
250
|
+
export function showUsage(cmd, module) {
|
|
211
251
|
showUsageHeadline(cmd);
|
|
212
252
|
showUsageOptions({ ...module?.flags });
|
|
213
253
|
showUsageFlags({ ...module?.flags });
|
|
214
254
|
showUsageRouter({ ...module?.router });
|
|
215
255
|
showUsageEnvars({ ...module?.envars });
|
|
216
256
|
}
|
|
217
|
-
function showUsageRouter(router) {
|
|
257
|
+
export function showUsageRouter(router) {
|
|
218
258
|
const cmds = Object.entries(router);
|
|
219
259
|
if (cmds.length > 0) {
|
|
220
260
|
console.info("\nSUBCOMMANDS:");
|
|
221
261
|
const maxLength = Math.max(...cmds.map(([cmd]) => cmd.length));
|
|
222
|
-
cmds.forEach(cmd => {
|
|
262
|
+
cmds.forEach((cmd) => {
|
|
223
263
|
console.info(" ", `${cmd[0]}${" ".repeat(maxLength - cmd[0].length)}`, " ", cmd[1].hint);
|
|
224
264
|
});
|
|
225
265
|
}
|
|
226
266
|
}
|
|
227
|
-
function showUsageError(cmd, subcmd, module, error, flags) {
|
|
267
|
+
export function showUsageError(cmd, subcmd, module, error, flags) {
|
|
228
268
|
showUsageSubcommand(cmd, subcmd, module, error);
|
|
229
269
|
if (error) {
|
|
230
270
|
console.info("\nERROR:");
|
|
@@ -232,11 +272,11 @@ function showUsageError(cmd, subcmd, module, error, flags) {
|
|
|
232
272
|
console.error(error);
|
|
233
273
|
}
|
|
234
274
|
else {
|
|
235
|
-
console.error(error?.stack?.split("\n")[0] || error);
|
|
275
|
+
console.error(colors.red(error?.stack?.split("\n")[0] || error));
|
|
236
276
|
}
|
|
237
277
|
}
|
|
238
278
|
}
|
|
239
|
-
function showUsageEnvars(envars) {
|
|
279
|
+
export function showUsageEnvars(envars) {
|
|
240
280
|
if (envars) {
|
|
241
281
|
envars = Object.entries(envars);
|
|
242
282
|
if (envars.length > 0) {
|
|
@@ -253,9 +293,11 @@ function showUsageEnvars(envars) {
|
|
|
253
293
|
}
|
|
254
294
|
}
|
|
255
295
|
}
|
|
256
|
-
function showUsageFlags(flags) {
|
|
296
|
+
export function showUsageFlags(flags) {
|
|
257
297
|
if (flags) {
|
|
258
|
-
flags = Object.entries(flags)
|
|
298
|
+
flags = Object.entries(flags)
|
|
299
|
+
.filter(([, flag]) => !flag?.param)
|
|
300
|
+
.sort(([a], [b]) => {
|
|
259
301
|
if (a < b)
|
|
260
302
|
return -1;
|
|
261
303
|
else if (a > b)
|
|
@@ -265,8 +307,10 @@ function showUsageFlags(flags) {
|
|
|
265
307
|
});
|
|
266
308
|
if (flags.length > 0) {
|
|
267
309
|
console.info("\nFLAGS:");
|
|
268
|
-
const maxLength = Math.max(...flags
|
|
269
|
-
|
|
310
|
+
const maxLength = Math.max(...flags
|
|
311
|
+
.filter(([, { hint }]) => hint)
|
|
312
|
+
.map(([key, { param }]) => param ? key.length + param.length + 3 : key.length));
|
|
313
|
+
flags.forEach((flag) => {
|
|
270
314
|
const str = `${flag[0]}${flag[1].param ? gray(` <${flag[1].param}>`) : ""}`;
|
|
271
315
|
if (flag[1].hint) {
|
|
272
316
|
console.info(" ", `--${str}${" ".repeat(maxLength - colorstrip(str).length)}`, " ", flag[1].hint);
|
|
@@ -275,7 +319,7 @@ function showUsageFlags(flags) {
|
|
|
275
319
|
}
|
|
276
320
|
}
|
|
277
321
|
}
|
|
278
|
-
function showUsageHeadline(cmd, subcmd, module) {
|
|
322
|
+
export function showUsageHeadline(cmd, subcmd, module) {
|
|
279
323
|
console.info("USAGE:");
|
|
280
324
|
if (subcmd) {
|
|
281
325
|
let params = module.router[subcmd]?.params;
|
|
@@ -283,26 +327,30 @@ function showUsageHeadline(cmd, subcmd, module) {
|
|
|
283
327
|
if (params) {
|
|
284
328
|
const optionalize = (str) => str.endsWith(" ...]")
|
|
285
329
|
? `[<${str.slice(1, -5)}> ...]`
|
|
286
|
-
:
|
|
330
|
+
: str[0] === "["
|
|
331
|
+
? `[<${str.slice(1, -1)}>]`
|
|
332
|
+
: `<${str}>`;
|
|
287
333
|
if (Array.isArray(params)) {
|
|
288
|
-
params = params.map(param => optionalize(param)).join(" ")
|
|
334
|
+
params = `${params.map((param) => optionalize(param)).join(" ")} `;
|
|
289
335
|
}
|
|
290
336
|
else {
|
|
291
337
|
params = optionalize(params);
|
|
292
338
|
}
|
|
293
339
|
}
|
|
294
|
-
console.info(` ${white(`npx witsdk ${cmd}`)} ${white(subcmd)} ${params ? green(params)
|
|
340
|
+
console.info(` ${colors.white(`npx witsdk ${cmd}`)} ${colors.white(subcmd)} ${params ? `${colors.green(params)} ` : ""}[OPTIONS] [FLAGS]`);
|
|
295
341
|
if (module?.router[subcmd]?.hint) {
|
|
296
342
|
console.info("\nDESCRIPTION:");
|
|
297
343
|
console.info(` ${module.router[subcmd].hint}`);
|
|
298
344
|
}
|
|
299
345
|
}
|
|
300
346
|
else {
|
|
301
|
-
console.info(` ${white(`npx witsdk ${cmd}`)} <SUBCOMMAND> ... [OPTIONS] [FLAGS]`);
|
|
347
|
+
console.info(` ${colors.white(`npx witsdk ${cmd}`)} <SUBCOMMAND> ... [OPTIONS] [FLAGS]`);
|
|
302
348
|
}
|
|
303
349
|
}
|
|
304
|
-
function showUsageOptions(options) {
|
|
305
|
-
options = Object.entries(options)
|
|
350
|
+
export function showUsageOptions(options) {
|
|
351
|
+
options = Object.entries(options)
|
|
352
|
+
.filter(([, option]) => option?.param)
|
|
353
|
+
.sort(([a], [b]) => {
|
|
306
354
|
if (a < b)
|
|
307
355
|
return -1;
|
|
308
356
|
else if (a > b)
|
|
@@ -313,9 +361,11 @@ function showUsageOptions(options) {
|
|
|
313
361
|
if (options.length > 0) {
|
|
314
362
|
console.info("\nOPTIONS:");
|
|
315
363
|
const maxLength = options
|
|
316
|
-
.map(option => option[1].param
|
|
317
|
-
.
|
|
318
|
-
|
|
364
|
+
.map((option) => option[1].param
|
|
365
|
+
? option[1].param.length + option[0].length + 3
|
|
366
|
+
: option[0].length)
|
|
367
|
+
.reduce((prev, curr) => (curr > prev ? curr : prev));
|
|
368
|
+
options.forEach((option) => {
|
|
319
369
|
if (option[1].hint) {
|
|
320
370
|
const str = `${option[0]}${option[1].param ? gray(` <${option[1].param}>`) : ""}`;
|
|
321
371
|
console.info(" ", `--${str}${" ".repeat(maxLength - colorstrip(str).length)}`, " ", option[1].hint);
|
|
@@ -323,39 +373,39 @@ function showUsageOptions(options) {
|
|
|
323
373
|
});
|
|
324
374
|
}
|
|
325
375
|
}
|
|
326
|
-
function showUsageSubcommand(cmd, subcmd, module) {
|
|
376
|
+
export function showUsageSubcommand(cmd, subcmd, module) {
|
|
327
377
|
showUsageHeadline(cmd, subcmd, module);
|
|
328
378
|
showUsageOptions({ ...module?.flags, ...module.router[subcmd]?.options });
|
|
329
379
|
showUsageFlags({ ...module?.flags, ...module.router[subcmd]?.options });
|
|
330
380
|
showUsageEnvars(module.router[subcmd]?.envars || module?.envars);
|
|
331
381
|
}
|
|
332
|
-
function showVersion() {
|
|
333
|
-
console.info(`${mcyan(`Witnet SDK v${require("../../package.json").version}`)}`);
|
|
382
|
+
export function showVersion() {
|
|
383
|
+
console.info(`${colors.mcyan(`Witnet SDK v${require("../../package.json").version}`)}`);
|
|
334
384
|
}
|
|
335
|
-
function getWildcardsCountFromString(str) {
|
|
385
|
+
export function getWildcardsCountFromString(str) {
|
|
336
386
|
let maxArgsIndex = 0;
|
|
337
|
-
if (str && typeof str ===
|
|
387
|
+
if (str && typeof str === "string") {
|
|
338
388
|
let match;
|
|
339
389
|
const regexp = /\\\d\\/g;
|
|
340
390
|
while ((match = regexp.exec(str)) !== null) {
|
|
341
|
-
const argsIndex = parseInt(match[0][1]) + 1;
|
|
391
|
+
const argsIndex = parseInt(match[0][1], 10) + 1;
|
|
342
392
|
if (argsIndex > maxArgsIndex)
|
|
343
393
|
maxArgsIndex = argsIndex;
|
|
344
394
|
}
|
|
345
395
|
}
|
|
346
396
|
return maxArgsIndex;
|
|
347
397
|
}
|
|
348
|
-
function checkRpcWildcards(wildcards) {
|
|
398
|
+
export function checkRpcWildcards(wildcards) {
|
|
349
399
|
if (typeof wildcards === "object") {
|
|
350
|
-
Object.values(wildcards).forEach(wildcard => {
|
|
400
|
+
Object.values(wildcards).forEach((wildcard) => {
|
|
351
401
|
if (Array.isArray(wildcard))
|
|
352
|
-
wildcard.forEach(item => checkRpcWildcards(item));
|
|
402
|
+
wildcard.forEach((item) => checkRpcWildcards(item));
|
|
353
403
|
else
|
|
354
404
|
checkRpcWildcards(wildcard);
|
|
355
405
|
});
|
|
356
406
|
}
|
|
357
407
|
else if (Array.isArray(wildcards)) {
|
|
358
|
-
wildcards.forEach(wildcard => checkRpcWildcards(wildcard));
|
|
408
|
+
wildcards.forEach((wildcard) => checkRpcWildcards(wildcard));
|
|
359
409
|
}
|
|
360
410
|
else if (typeof wildcards === "string") {
|
|
361
411
|
if (isWildcard(wildcards)) {
|
|
@@ -366,10 +416,10 @@ function checkRpcWildcards(wildcards) {
|
|
|
366
416
|
}
|
|
367
417
|
}
|
|
368
418
|
}
|
|
369
|
-
function isWildcard(str) {
|
|
419
|
+
export function isWildcard(str) {
|
|
370
420
|
return str.length === 3 && /\\\d\\/g.test(str);
|
|
371
421
|
}
|
|
372
|
-
function replaceWildcards(obj, args) {
|
|
422
|
+
export function replaceWildcards(obj, args) {
|
|
373
423
|
if (args.length > 10)
|
|
374
424
|
args = args.slice(0, 10);
|
|
375
425
|
if (obj && typeof obj === "string") {
|
|
@@ -379,7 +429,7 @@ function replaceWildcards(obj, args) {
|
|
|
379
429
|
}
|
|
380
430
|
}
|
|
381
431
|
else if (obj && Array.isArray(obj)) {
|
|
382
|
-
obj = obj.map(value => typeof value === "string" || Array.isArray(value)
|
|
432
|
+
obj = obj.map((value) => typeof value === "string" || Array.isArray(value)
|
|
383
433
|
? replaceWildcards(value, args)
|
|
384
434
|
: value);
|
|
385
435
|
}
|
|
@@ -388,7 +438,7 @@ function replaceWildcards(obj, args) {
|
|
|
388
438
|
}
|
|
389
439
|
return obj;
|
|
390
440
|
}
|
|
391
|
-
function replaceObjectWildcards(obj, args) {
|
|
441
|
+
export function replaceObjectWildcards(obj, args) {
|
|
392
442
|
return Object.fromEntries(Object.entries(obj).map(([key, value]) => {
|
|
393
443
|
for (let argIndex = 0; argIndex < args.length; argIndex++) {
|
|
394
444
|
const wildcard = `\\${argIndex}\\`;
|
|
@@ -398,7 +448,7 @@ function replaceObjectWildcards(obj, args) {
|
|
|
398
448
|
return [key, value];
|
|
399
449
|
}));
|
|
400
450
|
}
|
|
401
|
-
function spliceWildcard(obj, argIndex, argValue, argsCount) {
|
|
451
|
+
export function spliceWildcard(obj, argIndex, argValue, argsCount) {
|
|
402
452
|
if (obj && typeof obj === "string") {
|
|
403
453
|
const wildcard = `\\${argIndex}\\`;
|
|
404
454
|
obj = obj.replaceAll(wildcard, argValue);
|
|
@@ -407,13 +457,13 @@ function spliceWildcard(obj, argIndex, argValue, argsCount) {
|
|
|
407
457
|
}
|
|
408
458
|
}
|
|
409
459
|
else if (obj && Array.isArray(obj)) {
|
|
410
|
-
obj = obj.map(value => typeof value === "string" || Array.isArray(value)
|
|
460
|
+
obj = obj.map((value) => typeof value === "string" || Array.isArray(value)
|
|
411
461
|
? spliceWildcard(value, argIndex, argValue, argsCount)
|
|
412
462
|
: value);
|
|
413
463
|
}
|
|
414
464
|
return obj;
|
|
415
465
|
}
|
|
416
|
-
async function toolkitRun(settings, args) {
|
|
466
|
+
export async function toolkitRun(settings, args) {
|
|
417
467
|
const cmd = `${settings.paths.toolkitBinPath} ${args.join(" ")}`;
|
|
418
468
|
return new Promise((resolve, reject) => {
|
|
419
469
|
exec(cmd, { maxBuffer: 1024 * 1024 * 10 }, (error, stdout, stderr) => {
|
|
@@ -427,12 +477,12 @@ async function toolkitRun(settings, args) {
|
|
|
427
477
|
});
|
|
428
478
|
});
|
|
429
479
|
}
|
|
430
|
-
function toUpperCamelCase(str) {
|
|
431
|
-
return str
|
|
432
|
-
|
|
433
|
-
|
|
480
|
+
export function toUpperCamelCase(str) {
|
|
481
|
+
return str
|
|
482
|
+
.replace(/\b(\w)/g, (_match, capture) => capture.toUpperCase())
|
|
483
|
+
.replace(/\s+/g, "");
|
|
434
484
|
}
|
|
435
|
-
function toUtf16Bytes(str) {
|
|
485
|
+
export function toUtf16Bytes(str) {
|
|
436
486
|
const bytes = new Uint8Array(str.length * 2);
|
|
437
487
|
for (let i = 0; i < str.length; i++) {
|
|
438
488
|
const code = str.charCodeAt(i);
|
|
@@ -441,7 +491,7 @@ function toUtf16Bytes(str) {
|
|
|
441
491
|
}
|
|
442
492
|
return bytes;
|
|
443
493
|
}
|
|
444
|
-
function toUtf8Array(str) {
|
|
494
|
+
export function toUtf8Array(str) {
|
|
445
495
|
const utf8 = [];
|
|
446
496
|
for (let i = 0; i < str.length; i++) {
|
|
447
497
|
let charcode = str.charCodeAt(i);
|
|
@@ -453,19 +503,20 @@ function toUtf8Array(str) {
|
|
|
453
503
|
else if (charcode < 0xd800 || charcode >= 0xe000) {
|
|
454
504
|
utf8.push(0xe0 | (charcode >> 12), 0x80 | ((charcode >> 6) & 0x3f), 0x80 | (charcode & 0x3f));
|
|
455
505
|
}
|
|
456
|
-
else {
|
|
506
|
+
else {
|
|
507
|
+
// surrogate pair
|
|
457
508
|
i++;
|
|
458
509
|
// UTF-16 encodes 0x10000-0x10FFFF by
|
|
459
510
|
// subtracting 0x10000 and splitting the
|
|
460
511
|
// 20 bits of 0x0-0xFFFFF into two halves
|
|
461
|
-
charcode =
|
|
462
|
-
(str.charCodeAt(i) & 0x3ff));
|
|
512
|
+
charcode =
|
|
513
|
+
0x10000 + (((charcode & 0x3ff) << 10) | (str.charCodeAt(i) & 0x3ff));
|
|
463
514
|
utf8.push(0xf0 | (charcode >> 18), 0x80 | ((charcode >> 12) & 0x3f), 0x80 | ((charcode >> 6) & 0x3f), 0x80 | (charcode & 0x3f));
|
|
464
515
|
}
|
|
465
516
|
}
|
|
466
517
|
return utf8;
|
|
467
518
|
}
|
|
468
|
-
function utf8ArrayToStr(array) {
|
|
519
|
+
export function utf8ArrayToStr(array) {
|
|
469
520
|
const len = array.length;
|
|
470
521
|
let out = "";
|
|
471
522
|
let i = 0;
|
|
@@ -489,61 +540,67 @@ function utf8ArrayToStr(array) {
|
|
|
489
540
|
case 13:
|
|
490
541
|
// 110x xxxx 10xx xxxx
|
|
491
542
|
char2 = array[i++];
|
|
492
|
-
out += String.fromCharCode(((c &
|
|
543
|
+
out += String.fromCharCode(((c & 0x1f) << 6) | (char2 & 0x3f));
|
|
493
544
|
break;
|
|
494
545
|
case 14:
|
|
495
546
|
// 1110 xxxx 10xx xxxx 10xx xxxx
|
|
496
547
|
char2 = array[i++];
|
|
497
548
|
char3 = array[i++];
|
|
498
|
-
out += String.fromCharCode(((c &
|
|
499
|
-
((char2 & 0x3F) << 6) |
|
|
500
|
-
((char3 & 0x3F) << 0));
|
|
549
|
+
out += String.fromCharCode(((c & 0x0f) << 12) | ((char2 & 0x3f) << 6) | ((char3 & 0x3f) << 0));
|
|
501
550
|
break;
|
|
502
551
|
}
|
|
503
552
|
}
|
|
504
553
|
return out;
|
|
505
554
|
}
|
|
506
|
-
async function prompt(question) {
|
|
555
|
+
export async function prompt(question) {
|
|
507
556
|
const readlineInterface = readline.createInterface({
|
|
508
557
|
input: process.stdin,
|
|
509
558
|
output: process.stdout,
|
|
510
559
|
});
|
|
511
|
-
return new Promise((resolve,
|
|
560
|
+
return new Promise((resolve, _reject) => {
|
|
512
561
|
readlineInterface.question(`${question} `, (response) => {
|
|
513
562
|
readlineInterface.close();
|
|
514
563
|
resolve(response.trim());
|
|
515
564
|
});
|
|
516
565
|
});
|
|
517
566
|
}
|
|
518
|
-
function prompter(promise) {
|
|
567
|
+
export function prompter(promise) {
|
|
519
568
|
const loading = (() => {
|
|
520
569
|
const h = ["|", "/", "-", "\\"];
|
|
521
570
|
let i = 0;
|
|
522
571
|
return setInterval(() => {
|
|
523
|
-
i =
|
|
572
|
+
i = i > 3 ? 0 : i;
|
|
524
573
|
process.stdout.write(`\b\b${h[i]} `);
|
|
525
574
|
i++;
|
|
526
575
|
}, 50);
|
|
527
576
|
})();
|
|
528
|
-
return promise
|
|
529
|
-
.then(result => {
|
|
577
|
+
return promise.then((result) => {
|
|
530
578
|
clearInterval(loading);
|
|
531
579
|
process.stdout.write("\b\b");
|
|
532
580
|
return result;
|
|
533
581
|
});
|
|
534
582
|
}
|
|
535
|
-
function traceChecklists(checklists) {
|
|
583
|
+
export function traceChecklists(checklists) {
|
|
536
584
|
if (checklists && Object.keys(checklists).length > 0) {
|
|
537
|
-
const headlines = [
|
|
585
|
+
const headlines = [
|
|
586
|
+
"NODES",
|
|
587
|
+
...Object.keys(checklists).map((key) => `:${key}`),
|
|
588
|
+
];
|
|
538
589
|
checklists = Object.values(checklists);
|
|
539
590
|
const urls = Object.keys(checklists[0]);
|
|
540
|
-
const records = urls.map(url => {
|
|
541
|
-
const errors = checklists.filter(checklist => checklist[url] instanceof Error).length;
|
|
591
|
+
const records = urls.map((url) => {
|
|
592
|
+
const errors = checklists.filter((checklist) => checklist[url] instanceof Error).length;
|
|
542
593
|
return [
|
|
543
|
-
errors === checklists.length
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
|
|
594
|
+
errors === checklists.length
|
|
595
|
+
? colors.red(url)
|
|
596
|
+
: errors > 0
|
|
597
|
+
? colors.myellow(url)
|
|
598
|
+
: colors.mcyan(url),
|
|
599
|
+
...checklists.map((checklist) => checklist[url] instanceof Error
|
|
600
|
+
? colors.red(checklist[url])
|
|
601
|
+
: checklist[url] === true
|
|
602
|
+
? colors.lcyan("Aye")
|
|
603
|
+
: colors.cyan("Nay")),
|
|
547
604
|
];
|
|
548
605
|
});
|
|
549
606
|
traceTable(records, {
|
|
@@ -552,29 +609,33 @@ function traceChecklists(checklists) {
|
|
|
552
609
|
});
|
|
553
610
|
}
|
|
554
611
|
}
|
|
555
|
-
function traceHeader(headline, color = normal, indent = "") {
|
|
612
|
+
export function traceHeader(headline, color = normal, indent = "") {
|
|
556
613
|
console.info(`${indent}┌─${"─".repeat(headline.length)}─┐`);
|
|
557
614
|
console.info(`${indent}│ ${color(headline)} │`);
|
|
558
615
|
console.info(`${indent}└─${"─".repeat(headline.length)}─┘`);
|
|
559
616
|
}
|
|
560
|
-
function traceTable(records, options) {
|
|
561
|
-
const stringify = (data, humanizers, index) => humanizers
|
|
562
|
-
|
|
563
|
-
|
|
617
|
+
export function traceTable(records, options) {
|
|
618
|
+
const stringify = (data, humanizers, index) => humanizers?.[index]
|
|
619
|
+
? humanizers[index](data).toString()
|
|
620
|
+
: (data?.toString() ?? "");
|
|
621
|
+
const max = (a, b) => (a > b ? a : b);
|
|
622
|
+
const reduceMax = (numbers) => numbers.reduce((curr, prev) => (prev > curr ? prev : curr), 0);
|
|
564
623
|
if (!options)
|
|
565
624
|
options = {};
|
|
566
625
|
const indent = options?.indent || "";
|
|
567
|
-
const numColumns = reduceMax(records.map(record => record?.length || 1));
|
|
626
|
+
const numColumns = reduceMax(records.map((record) => record?.length || 1));
|
|
568
627
|
const maxColumnWidth = options?.maxColumnWidth || 80;
|
|
569
628
|
const table = transpose(records, numColumns);
|
|
570
|
-
options.widths =
|
|
571
|
-
|
|
572
|
-
|
|
573
|
-
|
|
574
|
-
|
|
575
|
-
|
|
576
|
-
|
|
577
|
-
|
|
629
|
+
options.widths =
|
|
630
|
+
options?.widths ||
|
|
631
|
+
table.map((column, index) => {
|
|
632
|
+
let maxWidth = reduceMax(column.map((field) => colorstrip(stringify(field, options?.humanizers, index)).length));
|
|
633
|
+
if (options?.headlines?.[index]) {
|
|
634
|
+
maxWidth = max(maxWidth, colorstrip(options.headlines[index].replaceAll(":", "")).length);
|
|
635
|
+
}
|
|
636
|
+
return Math.min(maxWidth, maxColumnWidth);
|
|
637
|
+
});
|
|
638
|
+
let headline = options.widths.map((maxWidth) => "─".repeat(maxWidth));
|
|
578
639
|
console.info(`${indent}┌─${headline.join("─┬─")}─┐`);
|
|
579
640
|
if (options?.headlines) {
|
|
580
641
|
headline = options.widths.map((maxWidth, index) => {
|
|
@@ -583,7 +644,7 @@ function traceTable(records, options) {
|
|
|
583
644
|
return `${white(caption)}${" ".repeat(maxWidth - captionLength)}`;
|
|
584
645
|
});
|
|
585
646
|
console.info(`${indent}│ ${headline.join(" │ ")} │`);
|
|
586
|
-
headline = options.widths.map(maxWidth => "─".repeat(maxWidth));
|
|
647
|
+
headline = options.widths.map((maxWidth) => "─".repeat(maxWidth));
|
|
587
648
|
console.info(`${indent}├─${headline.join("─┼─")}─┤`);
|
|
588
649
|
}
|
|
589
650
|
for (let i = 0; i < records.length; i++) {
|
|
@@ -591,15 +652,16 @@ function traceTable(records, options) {
|
|
|
591
652
|
for (let j = 0; j < numColumns; j++) {
|
|
592
653
|
let data = table[j][i];
|
|
593
654
|
let color;
|
|
594
|
-
if (options?.colors
|
|
655
|
+
if (options?.colors?.[j]) {
|
|
595
656
|
color = options.colors[j];
|
|
596
657
|
}
|
|
597
658
|
else {
|
|
598
|
-
color =
|
|
599
|
-
|
|
600
|
-
|
|
601
|
-
?
|
|
602
|
-
|
|
659
|
+
color =
|
|
660
|
+
typeof data === "string"
|
|
661
|
+
? green
|
|
662
|
+
: Number(data) === data && data % 1 !== 0 // is float number?
|
|
663
|
+
? yellow
|
|
664
|
+
: (x) => x;
|
|
603
665
|
}
|
|
604
666
|
data = stringify(data, options?.humanizers, j);
|
|
605
667
|
if (colorstrip(data).length > maxColumnWidth) {
|
|
@@ -619,17 +681,17 @@ function traceTable(records, options) {
|
|
|
619
681
|
}
|
|
620
682
|
console.info(`${indent}${line}│`);
|
|
621
683
|
}
|
|
622
|
-
headline = options.widths.map(maxWidth => "─".repeat(maxWidth));
|
|
684
|
+
headline = options.widths.map((maxWidth) => "─".repeat(maxWidth));
|
|
623
685
|
console.info(`${indent}└─${headline.join("─┴─")}─┘`);
|
|
624
686
|
}
|
|
625
687
|
function transpose(records, numColumns) {
|
|
626
688
|
const columns = [];
|
|
627
689
|
for (let index = 0; index < numColumns; index++) {
|
|
628
|
-
columns.push(records.map(row => row[index]));
|
|
690
|
+
columns.push(records.map((row) => row[index]));
|
|
629
691
|
}
|
|
630
692
|
return columns;
|
|
631
693
|
}
|
|
632
|
-
function txJsonReplacer(key, value) {
|
|
694
|
+
export function txJsonReplacer(key, value) {
|
|
633
695
|
switch (key) {
|
|
634
696
|
case "bytes":
|
|
635
697
|
case "der":
|
|
@@ -639,12 +701,12 @@ function txJsonReplacer(key, value) {
|
|
|
639
701
|
case "change":
|
|
640
702
|
case "fees":
|
|
641
703
|
case "value":
|
|
642
|
-
return parseInt(value) / 10 ** 9;
|
|
704
|
+
return parseInt(value, 10) / 10 ** 9;
|
|
643
705
|
default:
|
|
644
706
|
return value;
|
|
645
707
|
}
|
|
646
708
|
}
|
|
647
|
-
function txReceiptJsonReplacer(key, value) {
|
|
709
|
+
export function txReceiptJsonReplacer(key, value) {
|
|
648
710
|
switch (key) {
|
|
649
711
|
case "bytes":
|
|
650
712
|
case "der":
|
|
@@ -654,19 +716,19 @@ function txReceiptJsonReplacer(key, value) {
|
|
|
654
716
|
case "change":
|
|
655
717
|
case "fees":
|
|
656
718
|
case "value":
|
|
657
|
-
return parseInt(value?.pedros) / 10 ** 9;
|
|
719
|
+
return parseInt(value?.pedros, 10) / 10 ** 9;
|
|
658
720
|
case "timestamp":
|
|
659
721
|
return moment.unix(value).format("MMMM Do YYYY, h:mm:ss a");
|
|
660
722
|
default:
|
|
661
723
|
return value;
|
|
662
724
|
}
|
|
663
725
|
}
|
|
664
|
-
function traceTransactionOnCheckpoint(receipt) {
|
|
726
|
+
export function traceTransactionOnCheckpoint(receipt) {
|
|
665
727
|
if (receipt?.confirmations) {
|
|
666
728
|
console.info(` > Checkpoint #${commas(receipt.confirmations)}...`);
|
|
667
729
|
}
|
|
668
730
|
}
|
|
669
|
-
function traceTransactionOnStatusChange(receipt) {
|
|
731
|
+
export function traceTransactionOnStatusChange(receipt) {
|
|
670
732
|
const captions = {
|
|
671
733
|
pending: "Awaiting relay...",
|
|
672
734
|
// confirmed: "Transaction confirmed:",
|
|
@@ -678,52 +740,52 @@ function traceTransactionOnStatusChange(receipt) {
|
|
|
678
740
|
if (caption)
|
|
679
741
|
console.info(` > ${captions[receipt.status]}`);
|
|
680
742
|
if (["finalized", "confirmed"].includes(receipt.status)) {
|
|
681
|
-
console.info(` > Block hash: ${gray(receipt?.blockHash)}`);
|
|
682
|
-
console.info(` > Block miner: ${cyan(receipt?.blockMiner)}`);
|
|
683
|
-
console.info(` > Block epoch: ${white(commas(receipt?.blockEpoch))}`);
|
|
684
|
-
console.info(` > Included at: ${green(moment.unix(receipt?.blockTimestamp).format("MMMM Do YYYY, h:mm:ss a"))}`);
|
|
685
|
-
console.info(` > ${receipt.status[0].toUpperCase() + receipt.status.slice(1)} at: ${mgreen(moment.unix(receipt.timestamp).format("MMMM Do YYYY, h:mm:ss a"))}`);
|
|
743
|
+
console.info(` > Block hash: ${colors.gray(receipt?.blockHash)}`);
|
|
744
|
+
console.info(` > Block miner: ${colors.cyan(receipt?.blockMiner)}`);
|
|
745
|
+
console.info(` > Block epoch: ${colors.white(commas(receipt?.blockEpoch))}`);
|
|
746
|
+
console.info(` > Included at: ${colors.green(moment.unix(receipt?.blockTimestamp).format("MMMM Do YYYY, h:mm:ss a"))}`);
|
|
747
|
+
console.info(` > ${receipt.status[0].toUpperCase() + receipt.status.slice(1)} at: ${colors.mgreen(moment.unix(receipt.timestamp).format("MMMM Do YYYY, h:mm:ss a"))}`);
|
|
686
748
|
}
|
|
687
749
|
}
|
|
688
|
-
function traceTransactionReceipt(receipt) {
|
|
750
|
+
export function traceTransactionReceipt(receipt) {
|
|
689
751
|
const captions = {
|
|
690
752
|
DataRequest: " > DRT hash: ",
|
|
691
753
|
ValueTransfer: " > VTT hash: ",
|
|
692
754
|
};
|
|
693
|
-
console.info(`${captions[receipt.type] || " > TX hash: "}${white(receipt.hash)}`);
|
|
755
|
+
console.info(`${captions[receipt.type] || " > TX hash: "}${colors.white(receipt.hash)}`);
|
|
694
756
|
if (receipt?.droHash)
|
|
695
|
-
console.info(` > DRO hash: ${green(receipt.droHash)}`);
|
|
757
|
+
console.info(` > DRO hash: ${colors.green(receipt.droHash)}`);
|
|
696
758
|
if (receipt?.radHash)
|
|
697
|
-
console.info(` > RAD hash: ${mgreen(receipt.radHash)}`);
|
|
759
|
+
console.info(` > RAD hash: ${colors.mgreen(receipt.radHash)}`);
|
|
698
760
|
if (receipt?.droSLA)
|
|
699
761
|
console.info(` > SLA params: ${JSON.stringify(receipt.droSLA)}`);
|
|
700
762
|
if (receipt?.withdrawer) {
|
|
701
763
|
if (receipt?.validator) {
|
|
702
|
-
console.info(` > Validator: ${mcyan(receipt.validator)}`);
|
|
764
|
+
console.info(` > Validator: ${colors.mcyan(receipt.validator)}`);
|
|
703
765
|
}
|
|
704
|
-
console.info(` > Withdrawer: ${mmagenta(receipt.withdrawer)}`);
|
|
766
|
+
console.info(` > Withdrawer: ${colors.mmagenta(receipt.withdrawer)}`);
|
|
705
767
|
}
|
|
706
768
|
else {
|
|
707
769
|
const signers = Array.isArray(receipt.from) ? receipt.from : [receipt.from];
|
|
708
|
-
console.info(` > Signer/s: ${mmagenta(signers[0])}`);
|
|
709
|
-
signers.slice(1).forEach(signer => {
|
|
710
|
-
console.info(` ${mmagenta(signer)}`);
|
|
770
|
+
console.info(` > Signer/s: ${colors.mmagenta(signers[0])}`);
|
|
771
|
+
signers.slice(1).forEach((signer) => {
|
|
772
|
+
console.info(` ${colors.mmagenta(signer)}`);
|
|
711
773
|
});
|
|
712
774
|
}
|
|
713
775
|
if (receipt?.recipients) {
|
|
714
|
-
console.info(` > Recipient/s: ${mblue(receipt.recipients.filter((pkh, index, array) => index === array.indexOf(pkh)))}`);
|
|
776
|
+
console.info(` > Recipient/s: ${colors.mblue(receipt.recipients.filter((pkh, index, array) => index === array.indexOf(pkh)))}`);
|
|
715
777
|
}
|
|
716
778
|
if (receipt?.fees)
|
|
717
|
-
console.info(` > Network fee: ${yellow(receipt.fees.toString(2))}`);
|
|
779
|
+
console.info(` > Network fee: ${colors.yellow(receipt.fees.toString(2))}`);
|
|
718
780
|
if (receipt?.value)
|
|
719
|
-
console.info(` > Value: ${myellow(receipt.value.toString(2))}`);
|
|
781
|
+
console.info(` > Value: ${colors.myellow(receipt.value.toString(2))}`);
|
|
720
782
|
if (receipt?.weight)
|
|
721
|
-
console.info(` > Weight: ${mgreen(commas(receipt.weight))}`);
|
|
783
|
+
console.info(` > Weight: ${colors.mgreen(commas(receipt.weight))}`);
|
|
722
784
|
if (receipt?.witnesses) {
|
|
723
785
|
console.info(` > Witnesses: ${receipt.witnesses}`);
|
|
724
786
|
}
|
|
725
787
|
}
|
|
726
|
-
async function traceTransaction(transmitter, options) {
|
|
788
|
+
export async function traceTransaction(transmitter, options) {
|
|
727
789
|
const color = options?.color || ((x) => `\x1b[30;45m${x}\x1b[0m`);
|
|
728
790
|
let receipt = await transmitter.signTransaction(options, options?.reload);
|
|
729
791
|
if (options?.verbose) {
|
|
@@ -736,12 +798,14 @@ async function traceTransaction(transmitter, options) {
|
|
|
736
798
|
if (!options?.force) {
|
|
737
799
|
// prompt user confirmation
|
|
738
800
|
console.info();
|
|
739
|
-
const answer = await require("inquirer").createPromptModule()([
|
|
801
|
+
const answer = await require("inquirer").createPromptModule()([
|
|
802
|
+
{
|
|
740
803
|
message: "Send transaction?",
|
|
741
804
|
type: "confirm",
|
|
742
805
|
name: "continue",
|
|
743
806
|
default: false,
|
|
744
|
-
}
|
|
807
|
+
},
|
|
808
|
+
]);
|
|
745
809
|
if (!answer.continue) {
|
|
746
810
|
return receipt;
|
|
747
811
|
}
|
|
@@ -757,19 +821,22 @@ async function traceTransaction(transmitter, options) {
|
|
|
757
821
|
});
|
|
758
822
|
}
|
|
759
823
|
else {
|
|
760
|
-
const data = {
|
|
824
|
+
const data = {
|
|
825
|
+
status: receipt?.status,
|
|
826
|
+
timestamp: receipt?.timestamp || Math.floor(Date.now() / 1000),
|
|
827
|
+
};
|
|
761
828
|
console.info(data);
|
|
762
829
|
}
|
|
763
830
|
}
|
|
764
831
|
catch (err) {
|
|
765
832
|
if (err?.inFlight && err.inFlight) {
|
|
766
|
-
console.info(`\n${gray(JSON.stringify(err.inFligt?.message, txReceiptJsonReplacer))}`);
|
|
833
|
+
console.info(`\n${colors.gray(JSON.stringify(err.inFligt?.message, txReceiptJsonReplacer))}`);
|
|
767
834
|
}
|
|
768
835
|
throw err;
|
|
769
836
|
}
|
|
770
837
|
return receipt;
|
|
771
838
|
}
|
|
772
|
-
function unescapeSlashes(str) {
|
|
839
|
+
export function unescapeSlashes(str) {
|
|
773
840
|
// add another escaped slash if the string ends with an odd
|
|
774
841
|
// number of escaped slashes which will crash JSON.parse
|
|
775
842
|
let parsedStr = str.replace(/(^|[^\\])(\\\\)*\\$/, "$&\\");
|
|
@@ -779,77 +846,9 @@ function unescapeSlashes(str) {
|
|
|
779
846
|
try {
|
|
780
847
|
parsedStr = JSON.parse(`"${parsedStr}"`);
|
|
781
848
|
}
|
|
782
|
-
catch (
|
|
849
|
+
catch (_e) {
|
|
783
850
|
return str;
|
|
784
851
|
}
|
|
785
852
|
return parsedStr;
|
|
786
853
|
}
|
|
787
|
-
module.exports = {
|
|
788
|
-
colors: {
|
|
789
|
-
bblue,
|
|
790
|
-
bcyan,
|
|
791
|
-
bgreen,
|
|
792
|
-
blue,
|
|
793
|
-
bred,
|
|
794
|
-
bviolet,
|
|
795
|
-
cyan,
|
|
796
|
-
gray,
|
|
797
|
-
green,
|
|
798
|
-
magenta,
|
|
799
|
-
red,
|
|
800
|
-
white,
|
|
801
|
-
yellow,
|
|
802
|
-
normal,
|
|
803
|
-
lcyan,
|
|
804
|
-
lgray,
|
|
805
|
-
lgreen,
|
|
806
|
-
lmagenta,
|
|
807
|
-
lyellow,
|
|
808
|
-
mblue,
|
|
809
|
-
mcyan,
|
|
810
|
-
mgreen,
|
|
811
|
-
mmagenta,
|
|
812
|
-
mred,
|
|
813
|
-
myellow,
|
|
814
|
-
},
|
|
815
|
-
colorstrip,
|
|
816
|
-
commas,
|
|
817
|
-
whole_wits,
|
|
818
|
-
toFixedTrunc,
|
|
819
|
-
countLeaves,
|
|
820
|
-
execRadonBytecode,
|
|
821
|
-
deleteExtraFlags,
|
|
822
|
-
extractFromArgs,
|
|
823
|
-
fromHexString,
|
|
824
|
-
isHexString,
|
|
825
|
-
isHexStringOfLength,
|
|
826
|
-
toHexString,
|
|
827
|
-
parseURL,
|
|
828
|
-
ipIsPrivateOrLocalhost,
|
|
829
|
-
showUsage,
|
|
830
|
-
showUsageError,
|
|
831
|
-
showUsageSubcommand,
|
|
832
|
-
showVersion,
|
|
833
|
-
toolkitRun,
|
|
834
|
-
toUpperCamelCase,
|
|
835
|
-
toUtf16Bytes,
|
|
836
|
-
toUtf8Array,
|
|
837
|
-
utf8ArrayToStr,
|
|
838
|
-
prompt,
|
|
839
|
-
prompter,
|
|
840
|
-
traceChecklists,
|
|
841
|
-
traceHeader,
|
|
842
|
-
traceTable,
|
|
843
|
-
traceTransaction,
|
|
844
|
-
traceTransactionOnStatusChange,
|
|
845
|
-
traceTransactionOnCheckpoint,
|
|
846
|
-
traceTransactionReceipt,
|
|
847
|
-
checkRpcWildcards,
|
|
848
|
-
isWildcard,
|
|
849
|
-
getWildcardsCountFromString,
|
|
850
|
-
replaceWildcards,
|
|
851
|
-
spliceWildcard,
|
|
852
|
-
txJsonReplacer,
|
|
853
|
-
unescapeSlashes,
|
|
854
|
-
};
|
|
855
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVscGVycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9iaW4vaGVscGVycy5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsTUFBTSxFQUFFLElBQUksRUFBRSxHQUFHLE9BQU8sQ0FBQyxlQUFlLENBQUMsQ0FBQTtBQUN6QyxNQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUE7QUFDaEMsTUFBTSxHQUFHLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFBO0FBQzFCLE1BQU0sRUFBRSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQTtBQUN4QixNQUFNLFFBQVEsR0FBRyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUE7QUFFcEMsTUFBTSxVQUFVLEdBQUcsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQ3JDLDZFQUE2RSxFQUFFLEVBQUUsQ0FDbEYsQ0FBQTtBQUVELE1BQU0sTUFBTSxHQUFHLENBQUMsTUFBTSxFQUFFLEVBQUU7SUFDeEIsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQTtJQUMxQyxNQUFNLE1BQU0sR0FBRyxLQUFLLENBQUMsTUFBTSxJQUFJLENBQUM7UUFDOUIsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyx1QkFBdUIsRUFBRSxHQUFHLENBQUMsRUFBRTtRQUNyRCxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLHVCQUF1QixFQUFFLEdBQUcsQ0FBQyxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFBO0lBQ25FLE9BQU8sTUFBTSxDQUFBO0FBQ2YsQ0FBQyxDQUFBO0FBRUQsU0FBUyxZQUFZLENBQUUsQ0FBQyxFQUFFLENBQUM7SUFDekIsTUFBTSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFBO0lBQy9ELElBQUksQ0FBQyxJQUFJLENBQUM7UUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQTtJQUN2QixJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFBO0lBQ2xCLElBQUksQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDO1FBQUUsT0FBTyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFBO0lBQ3BELE9BQU8sQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDO1FBQUUsQ0FBQyxJQUFJLEdBQUcsQ0FBQTtJQUM3QixPQUFPLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFBO0FBQ3ZCLENBQUM7QUFBQSxDQUFDO0FBRUYsTUFBTSxVQUFVLEdBQUcsQ0FBQyxNQUFNLEVBQUUsTUFBTSxFQUFFLEVBQUU7SUFDcEMsTUFBTSxNQUFNLEdBQUc7UUFDYixFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRTtRQUMvQixFQUFFLEtBQUssRUFBRSxHQUFHLElBQUksRUFBRSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUU7UUFDckMsRUFBRSxLQUFLLEVBQUUsR0FBRyxJQUFJLEVBQUUsRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFO1FBQ3JDLEVBQUUsS0FBSyxFQUFFLEdBQUcsSUFBSSxHQUFHLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRTtRQUN0QyxFQUFFLEtBQUssRUFBRSxHQUFHLElBQUksR0FBRyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUU7S0FDdkMsQ0FBQTtJQUNELHlDQUF5QztJQUN6QyxNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQTtJQUMxRCxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLENBQUE7SUFDL0UsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUE7SUFDOUcsT0FBTyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFBO0FBQzVILENBQUMsQ0FBQTtBQUVELE1BQU0sS0FBSyxHQUFHLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxnQkFBZ0IsR0FBRyxhQUFhLENBQUE7QUFDdkQsTUFBTSxLQUFLLEdBQUcsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLGNBQWMsR0FBRyxXQUFXLENBQUE7QUFDbkQsTUFBTSxNQUFNLEdBQUcsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLGNBQWMsR0FBRyxXQUFXLENBQUE7QUFDcEQsTUFBTSxJQUFJLEdBQUcsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLGNBQWMsR0FBRyxXQUFXLENBQUE7QUFDbEQsTUFBTSxPQUFPLEdBQUcsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLGNBQWMsR0FBRyxXQUFXLENBQUE7QUFFckQsTUFBTSxLQUFLLEdBQUcsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLGFBQWEsR0FBRyxTQUFTLENBQUE7QUFDaEQsTUFBTSxLQUFLLEdBQUcsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLGFBQWEsR0FBRyxTQUFTLENBQUE7QUFDaEQsTUFBTSxNQUFNLEdBQUcsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLGFBQWEsR0FBRyxTQUFTLENBQUE7QUFDakQsTUFBTSxRQUFRLEdBQUcsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLGFBQWEsR0FBRyxTQUFTLENBQUE7QUFDbkQsTUFBTSxPQUFPLEdBQUcsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLGFBQWEsR0FBRyxTQUFTLENBQUE7QUFDbEQsTUFBTSxLQUFLLEdBQUcsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLFdBQVcsR0FBRyxTQUFTLENBQUE7QUFDOUMsTUFBTSxLQUFLLEdBQUcsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLFdBQVcsR0FBRyxTQUFTLENBQUE7QUFDOUMsTUFBTSxNQUFNLEdBQUcsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLFdBQVcsR0FBRyxTQUFTLENBQUE7QUFDL0MsTUFBTSxRQUFRLEdBQUcsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLGFBQWEsR0FBRyxTQUFTLENBQUE7QUFDbkQsTUFBTSxJQUFJLEdBQUcsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLFdBQVcsR0FBRyxTQUFTLENBQUE7QUFDN0MsTUFBTSxPQUFPLEdBQUcsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLFdBQVcsR0FBRyxTQUFTLENBQUE7QUFFaEQsTUFBTSxJQUFJLEdBQUcsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLFdBQVcsR0FBRyxTQUFTLENBQUE7QUFDN0MsTUFBTSxJQUFJLEdBQUcsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLFdBQVcsR0FBRyxTQUFTLENBQUE7QUFDN0MsTUFBTSxJQUFJLEdBQUcsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLFdBQVcsR0FBRyxTQUFTLENBQUE7QUFDN0MsTUFBTSxLQUFLLEdBQUcsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLFdBQVcsR0FBRyxTQUFTLENBQUE7QUFDOUMsTUFBTSxPQUFPLEdBQUcsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLGFBQWEsR0FBRyxTQUFTLENBQUE7QUFDbEQsTUFBTSxNQUFNLEdBQUcsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLFdBQVcsR0FBRyxTQUFTLENBQUE7QUFDL0MsTUFBTSxHQUFHLEdBQUcsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLFdBQVcsR0FBRyxTQUFTLENBQUE7QUFDNUMsTUFBTSxLQUFLLEdBQUcsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLGFBQWEsR0FBRyxTQUFTLENBQUE7QUFDaEQsTUFBTSxNQUFNLEdBQUcsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLFdBQVcsR0FBRyxTQUFTLENBQUE7QUFFL0MsU0FBUyxXQUFXLENBQUUsQ0FBQyxFQUFFLEdBQUc7SUFDMUIsSUFBSSxDQUFDLEdBQUcsSUFBSSxPQUFPLEdBQUcsS0FBSyxRQUFRO1FBQUUsT0FBTyxDQUFDLENBQUE7SUFDN0MsSUFBSSxHQUFHLFlBQVksQ0FBQztRQUFFLE9BQU8sQ0FBQyxDQUFBO0lBQzlCLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUM7UUFBRSxPQUFPLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxHQUFHLEdBQUcsV0FBVyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQTs7UUFDbEYsT0FBTyxNQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDLEdBQUcs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QUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQTtJQUM1SSxNQUFNLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBO0lBQ25DLE1BQU0sU0FBUyxHQUFHLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUE7SUFDM0YsSUFBSSxDQUFDLE9BQU87UUFBRSxPQUFPLEdBQUcsRUFBRSxDQUFBO0lBQzFCLE1BQU0sTUFBTSxHQUFHLE9BQU8sRUFBRSxNQUFNLElBQUksRUFBRSxDQUFBO0lBQ3BDLE1BQU0sVUFBVSxHQUFHLFNBQVMsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsTUFBTSxFQUFFLE1BQU0sSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFBO0lBQ3hFLE1BQU0sY0FBYyxHQUFHLE9BQU8sRUFBRSxjQUFjLElBQUksRUFBRSxDQUFBO0lBQ3BELE1BQU0sS0FBSyxHQUFHLFNBQVMsQ0FBQyxPQUFPLEVBQUUsVUFBVSxDQUFDLENBQUE7SUFDNUMsT0FBTyxDQUFDLE1BQU0sR0FBRyxPQUFPLEVBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLEVBQUU7UUFDOUQsSUFBSSxRQUFRLEdBQUcsU0FBUyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxPQUFPLEVB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QjtJQUMzQixnQkFBZ0I7SUFDaEIsY0FBYztJQUNkLGNBQWM7SUFDZCxlQUFlO0NBQ2hCLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJjb25zdCB7IGV4ZWMgfSA9IHJlcXVpcmUoXCJjaGlsZF9wcm9jZXNzXCIpXHJcbmNvbnN0IG1vbWVudCA9IHJlcXVpcmUoXCJtb21lbnRcIilcclxuY29uc3QgbmV0ID0gcmVxdWlyZShcIm5ldFwiKVxyXG5jb25zdCBvcyA9IHJlcXVpcmUoXCJvc1wiKVxyXG5jb25zdCByZWFkbGluZSA9IHJlcXVpcmUoXCJyZWFkbGluZVwiKVxyXG5cclxuY29uc3QgY29sb3JzdHJpcCA9IChzdHIpID0+IHN0ci5yZXBsYWNlKFxyXG4gIC9bXFx1MDAxYlxcdTAwOWJdW1soKSM7P10qKD86WzAtOV17MSw0fSg/OjtbMC05XXswLDR9KSopP1swLTlBLU9SWmNmLW5xcnk9PjxdL2csIFwiXCJcclxuKVxyXG5cclxuY29uc3QgY29tbWFzID0gKG51bWJlcikgPT4ge1xyXG4gIGNvbnN0IHBhcnRzID0gbnVtYmVyLnRvU3RyaW5nKCkuc3BsaXQoXCIuXCIpXHJcbiAgY29uc3QgcmVzdWx0ID0gcGFydHMubGVuZ3RoIDw9IDFcclxuICAgID8gYCR7cGFydHNbMF0ucmVwbGFjZSgvXFxCKD89KFxcZHszfSkrKD8hXFxkKSkvZywgXCIsXCIpfWBcclxuICAgIDogYCR7cGFydHNbMF0ucmVwbGFjZSgvXFxCKD89KFxcZHszfSkrKD8hXFxkKSkvZywgXCIsXCIpfS4ke3BhcnRzWzFdfWBcclxuICByZXR1cm4gcmVzdWx0XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHRvRml4ZWRUcnVuYyAoeCwgbikge1xyXG4gIGNvbnN0IHYgPSAodHlwZW9mIHggPT09IFwic3RyaW5nXCIgPyB4IDogeC50b1N0cmluZygpKS5zcGxpdChcIi5cIilcclxuICBpZiAobiA8PSAwKSByZXR1cm4gdlswXVxyXG4gIGxldCBmID0gdlsxXSB8fCBcIlwiXHJcbiAgaWYgKGYubGVuZ3RoID4gbikgcmV0dXJuIGAke3ZbMF19LiR7Zi5zdWJzdHIoMCwgbil9YFxyXG4gIHdoaWxlIChmLmxlbmd0aCA8IG4pIGYgKz0gXCIwXCJcclxuICByZXR1cm4gYCR7dlswXX0uJHtmfWBcclxufTtcclxuXHJcbmNvbnN0IHdob2xlX3dpdHMgPSAobnVtYmVyLCBkaWdpdHMpID0+IHtcclxuICBjb25zdCBsb29rdXAgPSBbXHJcbiAgICB7IHZhbHVlOiAxbiwgc3ltYm9sOiBcInBlZHJvc1wiIH0sXHJcbiAgICB7IHZhbHVlOiAxMG4gKiogNm4sIHN5bWJvbDogXCJtV2l0c1wiIH0sXHJcbiAgICB7IHZhbHVlOiAxMG4gKiogOW4sIHN5bWJvbDogXCIgV2l0c1wiIH0sXHJcbiAgICB7IHZhbHVlOiAxMG4gKiogMTJuLCBzeW1ib2w6IFwiS1dpdHNcIiB9LFxyXG4gICAgeyB2YWx1ZTogMTBuICoqIDE1biwgc3ltYm9sOiBcIk1XaXRzXCIgfSxcclxuICBdXHJcbiAgLy8gY29uc3QgcmVnZXhwID0gL1xcLjArJHwoPzw9XFwuWzAtOV0pMCskL1xyXG4gIGNvbnN0IGl0ZW0gPSBsb29rdXAuZmluZExhc3QoaXRlbSA9PiBudW1iZXIgPj0gaXRlbS52YWx1ZSlcclxuICBjb25zdCBxdW90aWVudCA9IGl0ZW0gPyBOdW1iZXIoQmlnSW50KG51bWJlcikgLyBpdGVtLnZhbHVlKSA6IG51bWJlci50b1N0cmluZygpXHJcbiAgY29uc3QgZGVjaW1hbHMgPSBpdGVtID8gKGl0ZW0udmFsdWUgKyBCaWdJbnQobnVtYmVyKSAtIEJpZ0ludChxdW90aWVudCkgKiBpdGVtLnZhbHVlKS50b1N0cmluZygpLnNsaWNlKDEpIDogXCJcIlxyXG4gIHJldHVybiBpdGVtID8gYCR7Y29tbWFzKHF1b3RpZW50KX0ke2RlY2ltYWxzICE9PSBcIlwiID8gYC4ke2RlY2ltYWxzLnNsaWNlKDAsIGRpZ2l0cyl9YCA6IFwiXCJ9ICR7aXRlbS5zeW1ib2x9YCA6IFwiKG5vIGNvaW5zKVwiXHJcbn1cclxuXHJcbmNvbnN0IGJibHVlID0gKHN0cikgPT4gYFxceDFiWzE7OTg7NDRtJHtzdHJ9XFx4MWJbMDswOzBtYFxyXG5jb25zdCBiY3lhbiA9IChzdHIpID0+IGBcXHgxYlszODs0Nm0ke3N0cn1cXHgxYlswOzBtYFxyXG5jb25zdCBiZ3JlZW4gPSAoc3RyKSA9PiBgXFx4MWJbMzA7NDJtJHtzdHJ9XFx4MWJbMDswbWBcclxuY29uc3QgYnJlZCA9IChzdHIpID0+IGBcXHgxYlszMDs0MW0ke3N0cn1cXHgxYlswOzBtYFxyXG5jb25zdCBidmlvbGV0ID0gKHN0cikgPT4gYFxceDFiWzMwOzQ1bSR7c3RyfVxceDFiWzA7MG1gXHJcblxyXG5jb25zdCBsY3lhbiA9IChzdHIpID0+IGBcXHgxYlsxOzk2bSR7c3RyfVxceDFiWzBtYFxyXG5jb25zdCBsZ3JheSA9IChzdHIpID0+IGBcXHgxYlsxOzkwbSR7c3RyfVxceDFiWzBtYFxyXG5jb25zdCBsZ3JlZW4gPSAoc3RyKSA9PiBgXFx4MWJbMTs5Mm0ke3N0cn1cXHgxYlswbWBcclxuY29uc3QgbG1hZ2VudGEgPSAoc3RyKSA9PiBgXFx4MWJbMTs5NW0ke3N0cn1cXHgxYlswbWBcclxuY29uc3QgbHllbGxvdyA9IChzdHIpID0+IGBcXHgxYlsxOzkzbSR7c3RyfVxceDFiWzBtYFxyXG5jb25zdCBtYmx1ZSA9IChzdHIpID0+IGBcXHgxYls5NG0ke3N0cn1cXHgxYlswbWBcclxuY29uc3QgbWN5YW4gPSAoc3RyKSA9PiBgXFx4MWJbOTZtJHtzdHJ9XFx4MWJbMG1gXHJcbmNvbnN0IG1ncmVlbiA9IChzdHIpID0+IGBcXHgxYls5Mm0ke3N0cn1cXHgxYlswbWBcclxuY29uc3QgbW1hZ2VudGEgPSAoc3RyKSA9PiBgXFx4MWJbMDs5NW0ke3N0cn1cXHgxYlswbWBcclxuY29uc3QgbXJlZCA9IChzdHIpID0+IGBcXHgxYls5MW0ke3N0cn1cXHgxYlswbWBcclxuY29uc3QgbXllbGxvdyA9IChzdHIpID0+IGBcXHgxYls5M20ke3N0cn1cXHgxYlswbWBcclxuXHJcbmNvbnN0IGJsdWUgPSAoc3RyKSA9PiBgXFx4MWJbMzRtJHtzdHJ9XFx4MWJbMG1gXHJcbmNvbnN0IGN5YW4gPSAoc3RyKSA9PiBgXFx4MWJbMzZtJHtzdHJ9XFx4MWJbMG1gXHJcbmNvbnN0IGdyYXkgPSAoc3RyKSA9PiBgXFx4MWJbOTBtJHtzdHJ9XFx4MWJbMG1gXHJcbmNvbnN0IGdyZWVuID0gKHN0cikgPT4gYFxceDFiWzMybSR7c3RyfVxceDFiWzBtYFxyXG5jb25zdCBtYWdlbnRhID0gKHN0cikgPT4gYFxceDFiWzA7MzVtJHtzdHJ9XFx4MWJbMG1gXHJcbmNvbnN0IG5vcm1hbCA9IChzdHIpID0+IGBcXHgxYls5OG0ke3N0cn1cXHgxYlswbWBcclxuY29uc3QgcmVkID0gKHN0cikgPT4gYFxceDFiWzMxbSR7c3RyfVxceDFiWzBtYFxyXG5jb25zdCB3aGl0ZSA9IChzdHIpID0+IGBcXHgxYlsxOzk4bSR7c3RyfVxceDFiWzBtYFxyXG5jb25zdCB5ZWxsb3cgPSAoc3RyKSA9PiBgXFx4MWJbMzNtJHtzdHJ9XFx4MWJbMG1gXHJcblxyXG5mdW5jdGlvbiBjb3VudExlYXZlcyAodCwgb2JqKSB7XHJcbiAgaWYgKCFvYmogfHwgdHlwZW9mIG9iaiA9PT0gXCJzdHJpbmdcIikgcmV0dXJuIDBcclxuICBpZiAob2JqIGluc3RhbmNlb2YgdCkgcmV0dXJuIDFcclxuICBpZiAoQXJyYXkuaXNBcnJheShvYmopKSByZXR1cm4gb2JqLnJlZHVjZSgoc3VtLCBpdGVtKSA9PiBzdW0gKyBjb3VudExlYXZlcyh0LCBpdGVtKSwgMClcclxuICBlbHNlIHJldHVybiBPYmplY3QudmFsdWVzKG9iaikucmVkdWNlKChzdW0sIGl0ZW0pID0+IHN1bSArIGNvdW50TGVhdmVzKHQsIGl0ZW0pLCAwKVxyXG59XHJcblxyXG5mdW5jdGlvbiBkZWxldGVFeHRyYUZsYWdzIChhcmdzKSB7XHJcbiAgcmV0dXJuIGFyZ3MuZmlsdGVyKGFyZyA9PiAhYXJnLnN0YXJ0c1dpdGgoXCItLVwiKSlcclxufVxyXG5cclxuZnVuY3Rpb24gY21kICguLi5jb21tYW5kKSB7XHJcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgIGV4ZWMoY29tbWFuZC5qb2luKFwiIFwiKSwgeyBtYXhCdWZmZXI6IDEwMjQgKiAxMDI0ICogMTAgfSwgKGVycm9yLCBzdGRvdXQsIHN0ZGVycikgPT4ge1xyXG4gICAgICBpZiAoZXJyb3IpIHtcclxuICAgICAgICByZWplY3QoZXJyb3IpXHJcbiAgICAgIH1cclxuICAgICAgaWYgKHN0ZGVycikge1xyXG4gICAgICAgIHJlamVjdChzdGRlcnIpXHJcbiAgICAgIH1cclxuICAgICAgcmVzb2x2ZShzdGRvdXQpXHJcbiAgICB9KVxyXG4gIH0pXHJcbn07XHJcblxyXG5hc3luYyBmdW5jdGlvbiBleGVjUmFkb25CeXRlY29kZSAoYnl0ZWNvZGUsIC4uLmZsYWdzKSB7XHJcbiAgaWYgKCFpc0hleFN0cmluZyhieXRlY29kZSkpIHtcclxuICAgIHRocm93IEV2YWxFcnJvcihcImludmFsaWQgaGV4IHN0cmluZ1wiKVxyXG4gIH0gZWxzZSB7XHJcbiAgICBjb25zdCBucHggPSBvcy50eXBlKCkgPT09IFwiV2luZG93c19OVFwiID8gXCJucHguY21kXCIgOiBcIm5weFwiXHJcbiAgICByZXR1cm4gY21kKG5weCwgXCJ3aXRzZGtcIiwgXCJyYWRvblwiLCBcImRyeS1ydW5cIiwgYnl0ZWNvZGUsIC4uLmZsYWdzKVxyXG4gICAgLy8gLmNhdGNoKChlcnIpID0+IHtcclxuICAgIC8vICAgICBsZXQgZXJyb3JNZXNzYWdlID0gZXJyLm1lc3NhZ2Uuc3BsaXQoJ1xcbicpLnNsaWNlKDEpLmpvaW4oJ1xcbicpLnRyaW0oKVxyXG4gICAgLy8gICAgIGNvbnN0IGVycm9yUmVnZXggPSAvLipeZXJyb3I6ICg/PG1lc3NhZ2U+LiopJC4qL2dtXHJcbiAgICAvLyAgICAgY29uc3QgbWF0Y2hlZCA9IGVycm9yUmVnZXguZXhlYyhlcnIubWVzc2FnZSlcclxuICAgIC8vICAgICBpZiAobWF0Y2hlZCkge1xyXG4gICAgLy8gICAgICAgICBlcnJvck1lc3NhZ2UgPSBtYXRjaGVkLmdyb3Vwcy5tZXNzYWdlXHJcbiAgICAvLyAgICAgfVxyXG4gICAgLy8gICAgIGNvbnNvbGUubG9nKGVycm9yTWVzc2FnZSB8fCBlcnIpXHJcbiAgICAvLyAgICAgY29uc29sZS5lcnJvcihlcnJvck1lc3NhZ2UgfHwgZXJyKVxyXG4gICAgLy8gfSlcclxuICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGV4dHJhY3RGcm9tQXJncyAoYXJncywgZmxhZ3MpIHtcclxuICBjb25zdCBjdXJhdGVkID0ge31cclxuICBpZiAoYXJncyAmJiBmbGFncykge1xyXG4gICAgT2JqZWN0LmtleXMoZmxhZ3MpLmZvckVhY2goZmxhZyA9PiB7XHJcbiAgICAgIGNvbnN0IGZsYWdJbmRleCA9IGFyZ3MuaW5kZXhPZihgLS0ke2ZsYWd9YClcclxuICAgICAgaWYgKGZsYWdJbmRleCA+PSAwKSB7XHJcbiAgICAgICAgaWYgKGZsYWdzW2ZsYWddLnBhcmFtKSB7XHJcbiAgICAgICAgICBjdXJhdGVkW2ZsYWddID0gYXJnc1tmbGFnSW5kZXhdXHJcbiAgICAgICAgICBpZiAoIWFyZ3NbZmxhZ0luZGV4ICsgMV0gfHwgYXJnc1tmbGFnSW5kZXggKyAxXS5zdGFydHNXaXRoKFwiLS1cIikpIHtcclxuICAgICAgICAgICAgdGhyb3cgRXJyb3IoYE1pc3NpbmcgcmVxdWlyZWQgcGFyYW1ldGVyIGZvciAtLSR7ZmxhZ31gKVxyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgY3VyYXRlZFtmbGFnXSA9IGFyZ3NbZmxhZ0luZGV4ICsgMV1cclxuICAgICAgICAgICAgYXJncy5zcGxpY2UoZmxhZ0luZGV4LCAyKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBjdXJhdGVkW2ZsYWddID0gdHJ1ZVxyXG4gICAgICAgICAgYXJncy5zcGxpY2UoZmxhZ0luZGV4LCAxKVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSlcclxuICB9XHJcbiAgcmV0dXJuIFthcmdzLCBjdXJhdGVkXVxyXG59XHJcblxyXG5mdW5jdGlvbiBmcm9tSGV4U3RyaW5nIChoZXhTdHJpbmcpIHtcclxuICBpZiAoaGV4U3RyaW5nLnN0YXJ0c1dpdGgoXCIweFwiKSkgaGV4U3RyaW5nID0gaGV4U3RyaW5nLnNsaWNlKDIpXHJcbiAgcmV0dXJuIFVpbnQ4QXJyYXkuZnJvbShoZXhTdHJpbmcubWF0Y2goLy57MSwyfS9nKS5tYXAoKGJ5dGUpID0+IHBhcnNlSW50KGJ5dGUsIDE2KSkpXHJcbn1cclxuXHJcbmZ1bmN0aW9uIGlwSXNQcml2YXRlT3JMb2NhbGhvc3QgKGlwKSB7XHJcbiAgaWYgKGlwLnN1YnN0cmluZygwLCA3KSA9PT0gXCI6OmZmZmY6XCIpIHsgaXAgPSBpcC5zdWJzdHJpbmcoNykgfVxyXG5cclxuICBpZiAobmV0LmlzSVB2NChpcCkpIHtcclxuICAgIC8vIGNoZWNrIGxvY2FsaG9zdFxyXG4gICAgaWYgKGlwID09PSBcIjEyNy4wLjAuMVwiKSB7IHJldHVybiB0cnVlIH1cclxuXHJcbiAgICAvLyAgICAgICAgIDEwLjAuMC4wIC0gMTAuMjU1LjI1NS4yNTUgICAgICAgIHx8ICAgMTcyLjE2LjAuMCAtIDE3Mi4zMS4yNTUuMjU1ICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAgICAxOTIuMTY4LjAuMCAtIDE5Mi4xNjguMjU1LjI1NVxyXG4gICAgcmV0dXJuIC9eKDEwKVxcLiguKilcXC4oLiopXFwuKC4qKSQvLnRlc3QoaXApIHx8IC9eKDE3MilcXC4oMVs2LTldfDJbMC05XXwzWzAtMV0pXFwuKC4qKVxcLiguKikkLy50ZXN0KGlwKSB8fCAvXigxOTIpXFwuKDE2OClcXC4oLiopXFwuKC4qKSQvLnRlc3QoaXApXHJcbiAgfVxyXG5cclxuICAvLyBlbHNlOiBpcCBpcyBJUHY2XHJcbiAgY29uc3QgZmlyc3RXb3JkID0gaXAuc3BsaXQoXCI6XCIpLmZpbmQoZWwgPT4gISFlbCkgLy8gZ2V0IGZpcnN0IG5vdCBlbXB0eSB3b3JkXHJcblxyXG4gIC8vIGVxdWl2YWxlbnQgb2YgMTI3LjAuMC4xIGluIElQdjZcclxuICBpZiAoaXAgPT09IFwiOjoxXCIpIHJldHVybiB0cnVlXHJcblxyXG4gIC8vIFRoZSBvcmlnaW5hbCBJUHY2IFNpdGUgTG9jYWwgYWRkcmVzc2VzIChmZWMwOjovMTApIGFyZSBkZXByZWNhdGVkLiBSYW5nZTogZmVjMCAtIGZlZmZcclxuICBlbHNlIGlmICgvXmZlW2MtZl1bMC1mXSQvLnRlc3QoZmlyc3RXb3JkKSkgcmV0dXJuIHRydWVcclxuXHJcbiAgLy8gVGhlc2UgZGF5cyBVbmlxdWUgTG9jYWwgQWRkcmVzc2VzIChVTEEpIGFyZSB1c2VkIGluIHBsYWNlIG9mIFNpdGUgTG9jYWwuXHJcbiAgLy8gUmFuZ2U6IGZjMDAgLSBmY2ZmXHJcbiAgZWxzZSBpZiAoL15mY1swLWZdezJ9JC8udGVzdChmaXJzdFdvcmQpKSByZXR1cm4gdHJ1ZVxyXG5cclxuICAvLyBSYW5nZTogZmQwMCAtIGZjZmZcclxuICBlbHNlIGlmICgvXmZkWzAtZl17Mn0kLy50ZXN0KGZpcnN0V29yZCkpIHJldHVybiB0cnVlXHJcblxyXG4gIC8vIExpbmsgbG9jYWwgYWRkcmVzc2VzIChwcmVmaXhlZCB3aXRoIGZlODApIGFyZSBub3Qgcm91dGFibGVcclxuICBlbHNlIGlmIChmaXJzdFdvcmQgPT09IFwiZmU4MFwiKSByZXR1cm4gdHJ1ZVxyXG5cclxuICAvLyBEaXNjYXJkIFByZWZpeFxyXG4gIGVsc2UgaWYgKGZpcnN0V29yZCA9PT0gXCIxMDBcIikgcmV0dXJuIHRydWVcclxuXHJcbiAgLy8gQW55IG90aGVyIElQIGFkZHJlc3MgaXMgbm90IFVuaXF1ZSBMb2NhbCBBZGRyZXNzIChVTEEpXHJcbiAgcmV0dXJuIGZhbHNlXHJcbn1cclxuXHJcbmZ1bmN0aW9uIGlzSGV4U3RyaW5nT2ZMZW5ndGggKHN0ciwgbGVuZ3RoKSB7XHJcbiAgcmV0dXJuIChpc0hleFN0cmluZyhzdHIpICYmXHJcbiAgICAgICAgKFxyXG4gICAgICAgICAgKHN0ci5zdGFydHNXaXRoKFwiMHhcIikgJiYgc3RyLnNsaWNlKDIpLmxlbmd0aCA9PT0gbGVuZ3RoICogMikgfHxcclxuICAgICAgICAgICAgc3RyLmxlbmd0aCA9PT0gbGVuZ3RoICogMlxyXG4gICAgICAgIClcclxuICApIHx8IGlzV2lsZGNhcmQoc3RyKVxyXG59XHJcblxyXG5mdW5jdGlvbiBpc0hleFN0cmluZyAoc3RyKSB7XHJcbiAgcmV0dXJuIChcclxuICAgIHR5cGVvZiBzdHIgPT09IFwic3RyaW5nXCIgJiZcclxuICAgICAgICAoXHJcbiAgICAgICAgICAoc3RyLnN0YXJ0c1dpdGgoXCIweFwiKSAmJiAvXlthLWZBLUYwLTldKyQvaS50ZXN0KHN0ci5zbGljZSgyKSkpIHx8XHJcbiAgICAgICAgICAgIC9eW2EtZkEtRjAtOV0rJC9pLnRlc3Qoc3RyKVxyXG4gICAgICAgIClcclxuICApIHx8IGlzV2lsZGNhcmQoc3RyKVxyXG59XHJcblxyXG5mdW5jdGlvbiB0b0hleFN0cmluZyAoYnVmZmVyLCBwcmVmaXgweCA9IGZhbHNlKSB7XHJcbiAgaWYgKGJ1ZmZlciBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpIGJ1ZmZlciA9IEJ1ZmZlci5mcm9tKGJ1ZmZlcilcclxuICByZXR1cm4gKHByZWZpeDB4ID8gXCIweFwiIDogXCJcIikgKyBBcnJheS5wcm90b3R5cGUubWFwLmNhbGwoYnVmZmVyLCB4ID0+IChcIjAwXCIgKyB4LnRvU3RyaW5nKDE2KSkuc2xpY2UoLTIpKVxyXG4gICAgLmpvaW4oXCJcIilcclxuICAgIC5tYXRjaCgvW2EtZkEtRjAtOV17Mn0vZylcclxuICAgIC5qb2luKFwiXCIpXHJcbn1cclxuXHJcbmZ1bmN0aW9uIHBhcnNlVVJMICh1cmwpIHtcclxuICB0cnkge1xyXG4gICAgY29uc3QgcGFyc2VkVXJsID0gbmV3IFVSTCh1cmwpXHJcbiAgICByZXR1cm4gW1xyXG4gICAgICBwYXJzZWRVcmwucHJvdG9jb2wgKyBcIi8vXCIsXHJcbiAgICAgIHBhcnNlZFVybC5ob3N0LFxyXG4gICAgICBwYXJzZWRVcmwucGF0aG5hbWUuc2xpY2UoMSksXHJcbiAgICAgIHBhcnNlZFVybC5zZWFyY2guc2xpY2UoMSksXHJcbiAgICBdXHJcbiAgfSBjYXRjaCB7XHJcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBJbnZhbGlkIFVSTCB3YXMgcHJvdmlkZWQ6ICR7dXJsfWApXHJcbiAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBzaG93VXNhZ2UgKGNtZCwgbW9kdWxlKSB7XHJcbiAgc2hvd1VzYWdlSGVhZGxpbmUoY21kKVxyXG4gIHNob3dVc2FnZU9wdGlvbnMoeyAuLi5tb2R1bGU/LmZsYWdzIH0pXHJcbiAgc2hvd1VzYWdlRmxhZ3MoeyAuLi5tb2R1bGU/LmZsYWdzIH0pXHJcbiAgc2hvd1VzYWdlUm91dGVyKHsgLi4ubW9kdWxlPy5yb3V0ZXIgfSlcclxuICBzaG93VXNhZ2VFbnZhcnMoeyAuLi5tb2R1bGU/LmVudmFycyB9KVxyXG59XHJcblxyXG5mdW5jdGlvbiBzaG93VXNhZ2VSb3V0ZXIgKHJvdXRlcikge1xyXG4gIGNvbnN0IGNtZHMgPSBPYmplY3QuZW50cmllcyhyb3V0ZXIpXHJcbiAgaWYgKGNtZHMubGVuZ3RoID4gMCkge1xyXG4gICAgY29uc29sZS5pbmZvKFwiXFxuU1VCQ09NTUFORFM6XCIpXHJcbiAgICBjb25zdCBtYXhMZW5ndGggPSBNYXRoLm1heCguLi5jbWRzLm1hcCgoW2NtZF0pID0+IGNtZC5sZW5ndGgpKVxyXG4gICAgY21kcy5mb3JFYWNoKGNtZCA9PiB7XHJcbiAgICAgIGNvbnNvbGUuaW5mbyhcIiAgXCIsIGAke2NtZFswXX0ke1wiIFwiLnJlcGVhdChtYXhMZW5ndGggLSBjbWRbMF0ubGVuZ3RoKX1gLCBcIiAgXCIsIGNtZFsxXS5oaW50KVxyXG4gICAgfSlcclxuICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHNob3dVc2FnZUVycm9yIChjbWQsIHN1YmNtZCwgbW9kdWxlLCBlcnJvciwgZmxhZ3MpIHtcclxuICBzaG93VXNhZ2VTdWJjb21tYW5kKGNtZCwgc3ViY21kLCBtb2R1bGUsIGVycm9yKVxyXG4gIGlmIChlcnJvcikge1xyXG4gICAgY29uc29sZS5pbmZvKFwiXFxuRVJST1I6XCIpXHJcbiAgICBpZiAoZmxhZ3M/LmRlYnVnKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zb2xlLmVycm9yKGVycm9yPy5zdGFjaz8uc3BsaXQoXCJcXG5cIilbMF0gfHwgZXJyb3IpXHJcbiAgICB9XHJcbiAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBzaG93VXNhZ2VFbnZhcnMgKGVudmFycykge1xyXG4gIGlmIChlbnZhcnMpIHtcclxuICAgIGVudmFycyA9IE9iamVjdC5lbnRyaWVzKGVudmFycylcclxuICAgIGlmIChlbnZhcnMubGVuZ3RoID4gMCkge1xyXG4gICAgICBjb25zb2xlLmluZm8oXCJcXG5FTlZBUlM6XCIpXHJcbiAgICAgIGNvbnN0IG1heFdpZHRoID0gTWF0aC5tYXgoLi4uZW52YXJzLm1hcCgoW2VudmFyXSkgPT4gZW52YXIubGVuZ3RoKSlcclxuICAgICAgZW52YXJzLmZvckVhY2goKFtlbnZhciwgaGludF0pID0+IHtcclxuICAgICAgICBpZiAoZW52YXIudG9VcHBlckNhc2UoKS5pbmRleE9mKFwiS0VZXCIpIDwgMCAmJiBwcm9jZXNzLmVudltlbnZhcl0pIHtcclxuICAgICAgICAgIGNvbnNvbGUuaW5mbyhcIiAgXCIsIGAke3llbGxvdyhlbnZhci50b1VwcGVyQ2FzZSgpKX0ke1wiIFwiLnJlcGVhdChtYXhXaWR0aCAtIGVudmFyLmxlbmd0aCl9YCwgYCA9PiBTZXR0bGVkIHRvIFwiJHtteWVsbG93KHByb2Nlc3MuZW52W2VudmFyXSl9XCJgKVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBjb25zb2xlLmluZm8oXCIgIFwiLCBgJHt5ZWxsb3coZW52YXIudG9VcHBlckNhc2UoKSl9JHtcIiBcIi5yZXBlYXQobWF4V2lkdGggLSBlbnZhci5sZW5ndGgpfWAsIGAgJHtoaW50fWApXHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgfVxyXG4gIH1cclxufVxyXG5cclxuZnVuY3Rpb24gc2hvd1VzYWdlRmxhZ3MgKGZsYWdzKSB7XHJcbiAgaWYgKGZsYWdzKSB7XHJcbiAgICBmbGFncyA9IE9iamVjdC5lbnRyaWVzKGZsYWdzKS5maWx0ZXIoKFssIGZsYWddKSA9PiAhZmxhZz8ucGFyYW0pLnNvcnQoKFthXSwgW2JdKSA9PiB7XHJcbiAgICAgIGlmIChhIDwgYikgcmV0dXJuIC0xXHJcbiAgICAgIGVsc2UgaWYgKGEgPiBiKSByZXR1cm4gMVxyXG4gICAgICBlbHNlIHJldHVybiAwXHJcbiAgICB9KVxyXG4gICAgaWYgKGZsYWdzLmxlbmd0aCA+IDApIHtcclxuICAgICAgY29uc29sZS5pbmZvKFwiXFxuRkxBR1M6XCIpXHJcbiAgICAgIGNvbnN0IG1heExlbmd0aCA9IE1hdGgubWF4KC4uLmZsYWdzLmZpbHRlcigoWywgeyBoaW50IH1dKSA9PiBoaW50KS5tYXAoKFtrZXksIHsgcGFyYW0gfV0pID0+IHBhcmFtID8ga2V5Lmxlbmd0aCArIHBhcmFtLmxlbmd0aCArIDMgOiBrZXkubGVuZ3RoKSlcclxuICAgICAgZmxhZ3MuZm9yRWFjaChmbGFnID0+IHtcclxuICAgICAgICBjb25zdCBzdHIgPSBgJHtmbGFnWzBdfSR7ZmxhZ1sxXS5wYXJhbSA/IGdyYXkoYCA8JHtmbGFnWzFdLnBhcmFtfT5gKSA6IFwiXCJ9YFxyXG4gICAgICAgIGlmIChmbGFnWzFdLmhpbnQpIHtcclxuICAgICAgICAgIGNvbnNvbGUuaW5mbyhcIiAgXCIsIGAtLSR7c3RyfSR7XCIgXCIucmVwZWF0KG1heExlbmd0aCAtIGNvbG9yc3RyaXAoc3RyKS5sZW5ndGgpfWAsIFwiICBcIiwgZmxhZ1sxXS5oaW50KVxyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICAgIH1cclxuICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHNob3dVc2FnZUhlYWRsaW5lIChjbWQsIHN1YmNtZCwgbW9kdWxlKSB7XHJcbiAgY29uc29sZS5pbmZvKFwiVVNBR0U6XCIpXHJcbiAgaWYgKHN1YmNtZCkge1xyXG4gICAgbGV0IHBhcmFtcyA9IG1vZHVsZS5yb3V0ZXJbc3ViY21kXT8ucGFyYW1zXHJcbiAgICAvLyBjb25zdCBvcHRpb25zID0gbW9kdWxlLnJvdXRlcltzdWJjbWRdPy5vcHRpb25zXHJcbiAgICBpZiAocGFyYW1zKSB7XHJcbiAgICAgIGNvbnN0IG9wdGlvbmFsaXplID0gKHN0cikgPT4gc3RyLmVuZHNXaXRoKFwiIC4uLl1cIilcclxuICAgICAgICA/IGBbPCR7c3RyLnNsaWNlKDEsIC01KX0+IC4uLl1gXHJcbiAgICAgICAgOiAoXHJcbiAgICAgICAgICBzdHJbMF0gPT09IFwiW1wiID8gYFs8JHtzdHIuc2xpY2UoMSwgLTEpfT5dYCA6IGA8JHtzdHJ9PmBcclxuICAgICAgICApXHJcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHBhcmFtcykpIHtcclxuICAgICAgICBwYXJhbXMgPSBwYXJhbXMubWFwKHBhcmFtID0+IG9wdGlvbmFsaXplKHBhcmFtKSkuam9pbihcIiBcIikgKyBcIiBcIlxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHBhcmFtcyA9IG9wdGlvbmFsaXplKHBhcmFtcylcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgY29uc29sZS5pbmZvKGAgICAke3doaXRlKGBucHggd2l0c2RrICR7Y21kfWApfSAke3doaXRlKHN1YmNtZCl9ICR7cGFyYW1zID8gZ3JlZW4ocGFyYW1zKSArIFwiIFwiIDogXCJcIn1bT1BUSU9OU10gW0ZMQUdTXWApXHJcbiAgICBpZiAobW9kdWxlPy5yb3V0ZXJbc3ViY21kXT8uaGludCkge1xyXG4gICAgICBjb25zb2xlLmluZm8oXCJcXG5ERVNDUklQVElPTjpcIilcclxuICAgICAgY29uc29sZS5pbmZvKGAgICAke21vZHVsZS5yb3V0ZXJbc3ViY21kXS5oaW50fWApXHJcbiAgICB9XHJcbiAgfSBlbHNlIHtcclxuICAgIGNvbnNvbGUuaW5mbyhgICAgJHt3aGl0ZShgbnB4IHdpdHNkayAke2NtZH1gKX0gPFNVQkNPTU1BTkQ+IC4uLiBbT1BUSU9OU10gW0ZMQUdTXWApXHJcbiAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBzaG93VXNhZ2VPcHRpb25zIChvcHRpb25zKSB7XHJcbiAgb3B0aW9ucyA9IE9iamVjdC5lbnRyaWVzKG9wdGlvbnMpLmZpbHRlcigoWywgb3B0aW9uXSkgPT4gb3B0aW9uPy5wYXJhbSkuc29ydCgoW2FdLCBbYl0pID0+IHtcclxuICAgIGlmIChhIDwgYikgcmV0dXJuIC0xXHJcbiAgICBlbHNlIGlmIChhID4gYikgcmV0dXJuIDFcclxuICAgIGVsc2UgcmV0dXJuIDBcclxuICB9KVxyXG4gIGlmIChvcHRpb25zLmxlbmd0aCA+IDApIHtcclxuICAgIGNvbnNvbGUuaW5mbyhcIlxcbk9QVElPTlM6XCIpXHJcbiAgICBjb25zdCBtYXhMZW5ndGggPSBvcHRpb25zXHJcbiAgICAgIC5tYXAob3B0aW9uID0+IG9wdGlvblsxXS5wYXJhbSA/IG9wdGlvblsxXS5wYXJhbS5sZW5ndGggKyBvcHRpb25bMF0ubGVuZ3RoICsgMyA6IG9wdGlvblswXS5sZW5ndGgpXHJcbiAgICAgIC5yZWR1Y2UoKHByZXYsIGN1cnIpID0+IGN1cnIgPiBwcmV2ID8gY3VyciA6IHByZXYpXHJcbiAgICBvcHRpb25zLmZvckVhY2gob3B0aW9uID0+IHtcclxuICAgICAgaWYgKG9wdGlvblsxXS5oaW50KSB7XHJcbiAgICAgICAgY29uc3Qgc3RyID0gYCR7b3B0aW9uWzBdfSR7b3B0aW9uWzFdLnBhcmFtID8gZ3JheShgIDwke29wdGlvblsxXS5wYXJhbX0+YCkgOiBcIlwifWBcclxuICAgICAgICBjb25zb2xlLmluZm8oXCIgIFwiLCBgLS0ke3N0cn0ke1wiIFwiLnJlcGVhdChtYXhMZW5ndGggLSBjb2xvcnN0cmlwKHN0cikubGVuZ3RoKX1gLCBcIiAgXCIsIG9wdGlvblsxXS5oaW50KVxyXG4gICAgICB9XHJcbiAgICB9KVxyXG4gIH1cclxufVxyXG5cclxuZnVuY3Rpb24gc2hvd1VzYWdlU3ViY29tbWFuZCAoY21kLCBzdWJjbWQsIG1vZHVsZSkge1xyXG4gIHNob3dVc2FnZUhlYWRsaW5lKGNtZCwgc3ViY21kLCBtb2R1bGUpXHJcbiAgc2hvd1VzYWdlT3B0aW9ucyh7IC4uLm1vZHVsZT8uZmxhZ3MsIC4uLm1vZHVsZS5yb3V0ZXJbc3ViY21kXT8ub3B0aW9ucyB9KVxyXG4gIHNob3dVc2FnZUZsYWdzKHsgLi4ubW9kdWxlPy5mbGFncywgLi4ubW9kdWxlLnJvdXRlcltzdWJjbWRdPy5vcHRpb25zIH0pXHJcbiAgc2hvd1VzYWdlRW52YXJzKG1vZHVsZS5yb3V0ZXJbc3ViY21kXT8uZW52YXJzIHx8IG1vZHVsZT8uZW52YXJzKVxyXG59XHJcblxyXG5mdW5jdGlvbiBzaG93VmVyc2lvbiAoKSB7XHJcbiAgY29uc29sZS5pbmZvKGAke21jeWFuKGBXaXRuZXQgU0RLIHYke3JlcXVpcmUoXCIuLi8uLi9wYWNrYWdlLmpzb25cIikudmVyc2lvbn1gKX1gKVxyXG59XHJcblxyXG5mdW5jdGlvbiBnZXRXaWxkY2FyZHNDb3VudEZyb21TdHJpbmcgKHN0cikge1xyXG4gIGxldCBtYXhBcmdzSW5kZXggPSAwXHJcbiAgaWYgKHN0ciAmJiB0eXBlb2Ygc3RyID09PSAnc3RyaW5nJykge1xyXG4gICAgbGV0IG1hdGNoXHJcbiAgICBjb25zdCByZWdleHAgPSAvXFxcXFxcZFxcXFwvZ1xyXG4gICAgd2hpbGUgKChtYXRjaCA9IHJlZ2V4cC5leGVjKHN0cikpICE9PSBudWxsKSB7XHJcbiAgICAgIGNvbnN0IGFyZ3NJbmRleCA9IHBhcnNlSW50KG1hdGNoWzBdWzFdKSArIDFcclxuICAgICAgaWYgKGFyZ3NJbmRleCA+IG1heEFyZ3NJbmRleCkgbWF4QXJnc0luZGV4ID0gYXJnc0luZGV4XHJcbiAgICB9XHJcbiAgfVxyXG4gIHJldHVybiBtYXhBcmdzSW5kZXhcclxufVxyXG5cclxuZnVuY3Rpb24gY2hlY2tScGNXaWxkY2FyZHMgKHdpbGRjYXJkcykge1xyXG4gIGlmICh0eXBlb2Ygd2lsZGNhcmRzID09PSBcIm9iamVjdFwiKSB7XHJcbiAgICBPYmplY3QudmFsdWVzKHdpbGRjYXJkcykuZm9yRWFjaCh3aWxkY2FyZCA9PiB7XHJcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHdpbGRjYXJkKSkgd2lsZGNhcmQuZm9yRWFjaChpdGVtID0+IGNoZWNrUnBjV2lsZGNhcmRzKGl0ZW0pKVxyXG4gICAgICBlbHNlIGNoZWNrUnBjV2lsZGNhcmRzKHdpbGRjYXJkKVxyXG4gICAgfSlcclxuICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkod2lsZGNhcmRzKSkge1xyXG4gICAgd2lsZGNhcmRzLmZvckVhY2god2lsZGNhcmQgPT4gY2hlY2tScGNXaWxkY2FyZHMod2lsZGNhcmQpKVxyXG4gIH0gZWxzZSBpZiAodHlwZW9mIHdpbGRjYXJkcyA9PT0gXCJzdHJpbmdcIikge1xyXG4gICAgaWYgKGlzV2lsZGNhcmQod2lsZGNhcmRzKSkge1xyXG4gICAgICBjb25zdCBjaGFyID0gd2lsZGNhcmRzLmNoYXJBdCgxKVxyXG4gICAgICBpZiAoY2hhciA8IFwiMFwiIHx8IGNoYXIgPiBcIjlcIikge1xyXG4gICAgICAgIHRocm93IEVycm9yKFwiUlBDOiB3aWxkY2FyZHMgbm90IGluIHJhbmdlIFswIC4uIDldXCIpXHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGlzV2lsZGNhcmQgKHN0cikge1xyXG4gIHJldHVybiBzdHIubGVuZ3RoID09PSAzICYmIC9cXFxcXFxkXFxcXC9nLnRlc3Qoc3RyKVxyXG59XHJcblxyXG5mdW5jdGlvbiByZXBsYWNlV2lsZGNhcmRzIChvYmosIGFyZ3MpIHtcclxuICBpZiAoYXJncy5sZW5ndGggPiAxMCkgYXJncyA9IGFyZ3Muc2xpY2UoMCwgMTApXHJcbiAgaWYgKG9iaiAmJiB0eXBlb2Ygb2JqID09PSBcInN0cmluZ1wiKSB7XHJcbiAgICBmb3IgKGxldCBhcmdJbmRleCA9IDA7IGFyZ0luZGV4IDwgYXJncy5sZW5ndGg7IGFyZ0luZGV4KyspIHtcclxuICAgICAgY29uc3Qgd2lsZGNhcmQgPSBgXFxcXCR7YXJnSW5kZXh9XFxcXGBcclxuICAgICAgb2JqID0gb2JqLnJlcGxhY2VBbGwod2lsZGNhcmQsIGFyZ3NbYXJnSW5kZXhdKVxyXG4gICAgfVxyXG4gIH0gZWxzZSBpZiAob2JqICYmIEFycmF5LmlzQXJyYXkob2JqKSkge1xyXG4gICAgb2JqID0gb2JqLm1hcCh2YWx1ZSA9PiB0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIgfHwgQXJyYXkuaXNBcnJheSh2YWx1ZSlcclxuICAgICAgPyByZXBsYWNlV2lsZGNhcmRzKHZhbHVlLCBhcmdzKVxyXG4gICAgICA6IHZhbHVlXHJcbiAgICApXHJcbiAgfSBlbHNlIGlmIChvYmogJiYgdHlwZW9mIG9iaiA9PT0gXCJvYmplY3RcIikge1xyXG4gICAgb2JqID0gcmVwbGFjZU9iamVjdFdpbGRjYXJkcyhvYmosIGFyZ3MpXHJcbiAgfVxyXG4gIHJldHVybiBvYmpcclxufVxyXG5cclxuZnVuY3Rpb24gcmVwbGFjZU9iamVjdFdpbGRjYXJkcyhvYmosIGFyZ3MpIHtcclxuICByZXR1cm4gT2JqZWN0LmZyb21FbnRyaWVzKFxyXG4gICAgT2JqZWN0LmVudHJpZXMob2JqKS5tYXAoKFtrZXksIHZhbHVlXSkgPT4ge1xyXG4gICAgICBmb3IgKGxldCBhcmdJbmRleCA9IDA7IGFyZ0luZGV4IDwgYXJncy5sZW5ndGg7IGFyZ0luZGV4ICsrKSB7XHJcbiAgICAgICAgY29uc3Qgd2lsZGNhcmQgPSBgXFxcXCR7YXJnSW5kZXh9XFxcXGBcclxuICAgICAgICBrZXkgPSBrZXkucmVwbGFjZUFsbCh3aWxkY2FyZCwgYXJnc1thcmdJbmRleF0pXHJcbiAgICAgICAgdmFsdWUgPSByZXBsYWNlV2lsZGNhcmRzKHZhbHVlLCBhcmdzKVxyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBba2V5LCB2YWx1ZV1cclxuICAgIH0pXHJcbiAgKVxyXG59XHJcblxyXG5mdW5jdGlvbiBzcGxpY2VXaWxkY2FyZCAob2JqLCBhcmdJbmRleCwgYXJnVmFsdWUsIGFyZ3NDb3VudCkge1xyXG4gIGlmIChvYmogJiYgdHlwZW9mIG9iaiA9PT0gXCJzdHJpbmdcIikge1xyXG4gICAgY29uc3Qgd2lsZGNhcmQgPSBgXFxcXCR7YXJnSW5kZXh9XFxcXGBcclxuICAgIG9iaiA9IG9iai5yZXBsYWNlQWxsKHdpbGRjYXJkLCBhcmdWYWx1ZSlcclxuICAgIGZvciAobGV0IGogPSBhcmdJbmRleCArIDE7IGogPCBhcmdzQ291bnQ7IGorKykge1xyXG4gICAgICBvYmogPSBvYmoucmVwbGFjZUFsbChgXFxcXCR7an1cXFxcYCwgYFxcXFwke2ogLSAxfVxcXFxgKVxyXG4gICAgfVxyXG4gIH0gZWxzZSBpZiAob2JqICYmIEFycmF5LmlzQXJyYXkob2JqKSkge1xyXG4gICAgb2JqID0gb2JqLm1hcCh2YWx1ZSA9PiB0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIgfHwgQXJyYXkuaXNBcnJheSh2YWx1ZSlcclxuICAgICAgPyBzcGxpY2VXaWxkY2FyZCh2YWx1ZSwgYXJnSW5kZXgsIGFyZ1ZhbHVlLCBhcmdzQ291bnQpXHJcbiAgICAgIDogdmFsdWVcclxuICAgIClcclxuICB9XHJcbiAgcmV0dXJuIG9ialxyXG59XHJcblxyXG5hc3luYyBmdW5jdGlvbiB0b29sa2l0UnVuIChzZXR0aW5ncywgYXJncykge1xyXG4gIGNvbnN0IGNtZCA9IGAke3NldHRpbmdzLnBhdGhzLnRvb2xraXRCaW5QYXRofSAke2FyZ3Muam9pbihcIiBcIil9YFxyXG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICBleGVjKGNtZCwgeyBtYXhCdWZmZXI6IDEwMjQgKiAxMDI0ICogMTAgfSwgKGVycm9yLCBzdGRvdXQsIHN0ZGVycikgPT4ge1xyXG4gICAgICBpZiAoZXJyb3IpIHtcclxuICAgICAgICByZWplY3QoZXJyb3IpXHJcbiAgICAgIH1cclxuICAgICAgaWYgKHN0ZGVycikge1xyXG4gICAgICAgIHJlamVjdChzdGRlcnIpXHJcbiAgICAgIH1cclxuICAgICAgcmVzb2x2ZShzdGRvdXQpXHJcbiAgICB9KVxyXG4gIH0pXHJcbn1cclxuXHJcbmZ1bmN0aW9uIHRvVXBwZXJDYW1lbENhc2UgKHN0cikge1xyXG4gIHJldHVybiBzdHIucmVwbGFjZSgvXFxiKFxcdykvZywgZnVuY3Rpb24gKG1hdGNoLCBjYXB0dXJlKSB7XHJcbiAgICByZXR1cm4gY2FwdHVyZS50b1VwcGVyQ2FzZSgpXHJcbiAgfSkucmVwbGFjZSgvXFxzKy9nLCBcIlwiKVxyXG59XHJcblxyXG5mdW5jdGlvbiB0b1V0ZjE2Qnl0ZXMoc3RyKSB7XHJcbiAgY29uc3QgYnl0ZXMgPSBuZXcgVWludDhBcnJheShzdHIubGVuZ3RoICogMik7XHJcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBzdHIubGVuZ3RoOyBpKyspIHtcclxuICAgIGNvbnN0IGNvZGUgPSBzdHIuY2hhckNvZGVBdChpKTtcclxuICAgIGJ5dGVzW2kgKiAyXSA9IGNvZGUgPj4gODtcclxuICAgIGJ5dGVzW2kgKiAyICsgMV0gPSBjb2RlICYgMHhmZjtcclxuICB9XHJcbiAgcmV0dXJuIGJ5dGVzO1xyXG59XHJcblxyXG5mdW5jdGlvbiB0b1V0ZjhBcnJheSAoc3RyKSB7XHJcbiAgY29uc3QgdXRmOCA9IFtdXHJcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBzdHIubGVuZ3RoOyBpKyspIHtcclxuICAgIGxldCBjaGFyY29kZSA9IHN0ci5jaGFyQ29kZUF0KGkpXHJcbiAgICBpZiAoY2hhcmNvZGUgPCAweDgwKSB1dGY4LnB1c2goY2hhcmNvZGUpXHJcbiAgICBlbHNlIGlmIChjaGFyY29kZSA8IDB4ODAwKSB7XHJcbiAgICAgIHV0ZjgucHVzaCgweGMwIHwgKGNoYXJjb2RlID4+IDYpLFxyXG4gICAgICAgIDB4ODAgfCAoY2hhcmNvZGUgJiAweDNmKSlcclxuICAgIH0gZWxzZSBpZiAoY2hhcmNvZGUgPCAweGQ4MDAgfHwgY2hhcmNvZGUgPj0gMHhlMDAwKSB7XHJcbiAgICAgIHV0ZjgucHVzaCgweGUwIHwgKGNoYXJjb2RlID4+IDEyKSxcclxuICAgICAgICAweDgwIHwgKChjaGFyY29kZSA+PiA2KSAmIDB4M2YpLFxyXG4gICAgICAgIDB4ODAgfCAoY2hhcmNvZGUgJiAweDNmKSlcclxuICAgIH0gZWxzZSB7IC8vIHN1cnJvZ2F0ZSBwYWlyXHJcbiAgICAgIGkrK1xyXG4gICAgICAvLyBVVEYtMTYgZW5jb2RlcyAweDEwMDAwLTB4MTBGRkZGIGJ5XHJcbiAgICAgIC8vIHN1YnRyYWN0aW5nIDB4MTAwMDAgYW5kIHNwbGl0dGluZyB0aGVcclxuICAgICAgLy8gMjAgYml0cyBvZiAweDAtMHhGRkZGRiBpbnRvIHR3byBoYWx2ZXNcclxuICAgICAgY2hhcmNvZGUgPSAweDEwMDAwICsgKCgoY2hhcmNvZGUgJiAweDNmZikgPDwgMTApIHxcclxuICAgICAgICAgICAgICAgIChzdHIuY2hhckNvZGVBdChpKSAmIDB4M2ZmKSlcclxuICAgICAgdXRmOC5wdXNoKDB4ZjAgfCAoY2hhcmNvZGUgPj4gMTgpLFxyXG4gICAgICAgIDB4ODAgfCAoKGNoYXJjb2RlID4+IDEyKSAmIDB4M2YpLFxyXG4gICAgICAgIDB4ODAgfCAoKGNoYXJjb2RlID4+IDYpICYgMHgzZiksXHJcbiAgICAgICAgMHg4MCB8IChjaGFyY29kZSAmIDB4M2YpKVxyXG4gICAgfVxyXG4gIH1cclxuICByZXR1cm4gdXRmOFxyXG59XHJcblxyXG5mdW5jdGlvbiB1dGY4QXJyYXlUb1N0ciAoYXJyYXkpIHtcclxuICBjb25zdCBsZW4gPSBhcnJheS5sZW5ndGhcclxuICBsZXQgb3V0ID0gXCJcIjsgbGV0IGkgPSAwOyBsZXQgY1xyXG4gIGxldCBjaGFyMiwgY2hhcjNcclxuICB3aGlsZSAoaSA8IGxlbikge1xyXG4gICAgYyA9IGFycmF5W2krK11cclxuICAgIHN3aXRjaCAoYyA+PiA0KSB7XHJcbiAgICAgIGNhc2UgMDogY2FzZSAxOiBjYXNlIDI6IGNhc2UgMzogY2FzZSA0OiBjYXNlIDU6IGNhc2UgNjogY2FzZSA3OlxyXG4gICAgICAgIC8vIDB4eHh4eHh4XHJcbiAgICAgICAgb3V0ICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoYylcclxuICAgICAgICBicmVha1xyXG4gICAgICBjYXNlIDEyOiBjYXNlIDEzOlxyXG4gICAgICAgIC8vIDExMHggeHh4eCAgIDEweHggeHh4eFxyXG4gICAgICAgIGNoYXIyID0gYXJyYXlbaSsrXVxyXG4gICAgICAgIG91dCArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKCgoYyAmIDB4MUYpIDw8IDYpIHwgKGNoYXIyICYgMHgzRikpXHJcbiAgICAgICAgYnJlYWtcclxuICAgICAgY2FzZSAxNDpcclxuICAgICAgICAvLyAxMTEwIHh4eHggIDEweHggeHh4eCAgMTB4eCB4eHh4XHJcbiAgICAgICAgY2hhcjIgPSBhcnJheVtpKytdXHJcbiAgICAgICAgY2hhcjMgPSBhcnJheVtpKytdXHJcbiAgICAgICAgb3V0ICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoKChjICYgMHgwRikgPDwgMTIpIHxcclxuICAgICAgICAgICAgICAgICAgICAoKGNoYXIyICYgMHgzRikgPDwgNikgfFxyXG4gICAgICAgICAgICAgICAgICAgICgoY2hhcjMgJiAweDNGKSA8PCAwKSlcclxuICAgICAgICBicmVha1xyXG4gICAgfVxyXG4gIH1cclxuICByZXR1cm4gb3V0XHJcbn1cclxuXHJcbmFzeW5jIGZ1bmN0aW9uIHByb21wdCAocXVlc3Rpb24pIHtcclxuICBjb25zdCByZWFkbGluZUludGVyZmFjZSA9IHJlYWRsaW5lLmNyZWF0ZUludGVyZmFjZSh7XHJcbiAgICBpbnB1dDogcHJvY2Vzcy5zdGRpbixcclxuICAgIG91dHB1dDogcHJvY2Vzcy5zdGRvdXQsXHJcbiAgfSlcclxuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgcmVhZGxpbmVJbnRlcmZhY2UucXVlc3Rpb24oYCR7cXVlc3Rpb259IGAsIChyZXNwb25zZSkgPT4ge1xyXG4gICAgICByZWFkbGluZUludGVyZmFjZS5jbG9zZSgpXHJcbiAgICAgIHJlc29sdmUocmVzcG9uc2UudHJpbSgpKVxyXG4gICAgfSlcclxuICB9KVxyXG59XHJcblxyXG5mdW5jdGlvbiBwcm9tcHRlciAocHJvbWlzZSkge1xyXG4gIGNvbnN0IGxvYWRpbmcgPSAoKCkgPT4ge1xyXG4gICAgY29uc3QgaCA9IFtcInxcIiwgXCIvXCIsIFwiLVwiLCBcIlxcXFxcIl1cclxuICAgIGxldCBpID0gMFxyXG4gICAgcmV0dXJuIHNldEludGVydmFsKCgpID0+IHtcclxuICAgICAgaSA9IChpID4gMykgPyAwIDogaVxyXG4gICAgICBwcm9jZXNzLnN0ZG91dC53cml0ZShgXFxiXFxiJHtoW2ldfSBgKVxyXG4gICAgICBpKytcclxuICAgIH0sIDUwKVxyXG4gIH0pKClcclxuICByZXR1cm4gcHJvbWlzZVxyXG4gICAgLnRoZW4ocmVzdWx0ID0+IHtcclxuICAgICAgY2xlYXJJbnRlcnZhbChsb2FkaW5nKVxyXG4gICAgICBwcm9jZXNzLnN0ZG91dC53cml0ZShcIlxcYlxcYlwiKVxyXG4gICAgICByZXR1cm4gcmVzdWx0XHJcbiAgICB9KVxyXG59XHJcblxyXG5mdW5jdGlvbiB0cmFjZUNoZWNrbGlzdHMgKGNoZWNrbGlzdHMpIHtcclxuICBpZiAoY2hlY2tsaXN0cyAmJiBPYmplY3Qua2V5cyhjaGVja2xpc3RzKS5sZW5ndGggPiAwKSB7XHJcbiAgICBjb25zdCBoZWFkbGluZXMgPSBbXCJOT0RFU1wiLCAuLi5PYmplY3Qua2V5cyhjaGVja2xpc3RzKS5tYXAoa2V5ID0+IGA6JHtrZXl9YCldXHJcbiAgICBjaGVja2xpc3RzID0gT2JqZWN0LnZhbHVlcyhjaGVja2xpc3RzKVxyXG4gICAgY29uc3QgdXJscyA9IE9iamVjdC5rZXlzKGNoZWNrbGlzdHNbMF0pXHJcbiAgICBjb25zdCByZWNvcmRzID0gdXJscy5tYXAodXJsID0+IHtcclxuICAgICAgY29uc3QgZXJyb3JzID0gY2hlY2tsaXN0cy5maWx0ZXIoY2hlY2tsaXN0ID0+IGNoZWNrbGlzdFt1cmxdIGluc3RhbmNlb2YgRXJyb3IpLmxlbmd0aFxyXG4gICAgICByZXR1cm4gW1xyXG4gICAgICAgIGVycm9ycyA9PT0gY2hlY2tsaXN0cy5sZW5ndGggPyByZWQodXJsKSA6IChlcnJvcnMgPiAwID8gbXllbGxvdyh1cmwpIDogbWN5YW4odXJsKSksXHJcbiAgICAgICAgLi4uY2hlY2tsaXN0cy5tYXAoY2hlY2tsaXN0ID0+IGNoZWNrbGlzdFt1cmxdIGluc3RhbmNlb2YgRXJyb3JcclxuICAgICAgICAgID8gcmVkKGNoZWNrbGlzdFt1cmxdKVxyXG4gICAgICAgICAgOiAoY2hlY2tsaXN0W3VybF0gPT09IHRydWUgPyBsY3lhbihcIkF5ZVwiKSA6IGN5YW4oXCJOYXlcIikpXHJcbiAgICAgICAgKSxcclxuICAgICAgXVxyXG4gICAgfSlcclxuICAgIHRyYWNlVGFibGUocmVjb3Jkcywge1xyXG4gICAgICBoZWFkbGluZXMsXHJcbiAgICAgIG1heENvbHVtbldpZHRoOiAzMSxcclxuICAgIH0pXHJcbiAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiB0cmFjZUhlYWRlciAoaGVhZGxpbmUsIGNvbG9yID0gbm9ybWFsLCBpbmRlbnQgPSBcIlwiLCkge1xyXG4gIGNvbnNvbGUuaW5mbyhgJHtpbmRlbnR94pSM4pSAJHtcIuKUgFwiLnJlcGVhdChoZWFkbGluZS5sZW5ndGgpfeKUgOKUkGApXHJcbiAgY29uc29sZS5pbmZvKGAke2luZGVudH3ilIIgJHtjb2xvcihoZWFkbGluZSl9IOKUgmApXHJcbiAgY29uc29sZS5pbmZvKGAke2luZGVudH3ilJTilIAke1wi4pSAXCIucmVwZWF0KGhlYWRsaW5lLmxlbmd0aCl94pSA4pSYYClcclxufVxyXG5cclxuZnVuY3Rpb24gdHJhY2VUYWJsZSAocmVjb3Jkcywgb3B0aW9ucykge1xyXG4gIGNvbnN0IHN0cmluZ2lmeSA9IChkYXRhLCBodW1hbml6ZXJzLCBpbmRleCkgPT4gaHVtYW5pemVycyAmJiBodW1hbml6ZXJzW2luZGV4XSA/IGh1bWFuaXplcnNbaW5kZXhdKGRhdGEpLnRvU3RyaW5nKCkgOiBkYXRhPy50b1N0cmluZygpID8/IFwiXCJcclxuICBjb25zdCBtYXggPSAoYSwgYikgPT4gYSA+IGIgPyBhIDogYlxyXG4gIGNvbnN0IHJlZHVjZU1heCA9IChudW1iZXJzKSA9PiBudW1iZXJzLnJlZHVjZSgoY3VyciwgcHJldikgPT4gcHJldiA+IGN1cnIgPyBwcmV2IDogY3VyciwgMClcclxuICBpZiAoIW9wdGlvbnMpIG9wdGlvbnMgPSB7fVxyXG4gIGNvbnN0IGluZGVudCA9IG9wdGlvbnM/LmluZGVudCB8fCBcIlwiXHJcbiAgY29uc3QgbnVtQ29sdW1ucyA9IHJlZHVjZU1heChyZWNvcmRzLm1hcChyZWNvcmQgPT4gcmVjb3JkPy5sZW5ndGggfHwgMSkpXHJcbiAgY29uc3QgbWF4Q29sdW1uV2lkdGggPSBvcHRpb25zPy5tYXhDb2x1bW5XaWR0aCB8fCA4MFxyXG4gIGNvbnN0IHRhYmxlID0gdHJhbnNwb3NlKHJlY29yZHMsIG51bUNvbHVtbnMpXHJcbiAgb3B0aW9ucy53aWR0aHMgPSBvcHRpb25zPy53aWR0aHMgfHwgdGFibGUubWFwKChjb2x1bW4sIGluZGV4KSA9PiB7XHJcbiAgICBsZXQgbWF4V2lkdGggPSByZWR1Y2VNYXgoY29sdW1uLm1hcChmaWVsZCA9PiBjb2xvcnN0cmlwKHN0cmluZ2lmeShmaWVsZCwgb3B0aW9ucz8uaHVtYW5pemVycywgaW5kZXgpKS5sZW5ndGgpKVxyXG4gICAgaWYgKG9wdGlvbnM/LmhlYWRsaW5lcyAmJiBvcHRpb25zLmhlYWRsaW5lc1tpbmRleF0pIHtcclxuICAgICAgbWF4V2lkdGggPSBtYXgobWF4V2lkdGgsIGNvbG9yc3RyaXAob3B0aW9ucy5oZWFkbGluZXNbaW5kZXhdLnJlcGxhY2VBbGwoXCI6XCIsIFwiXCIpKS5sZW5ndGgpXHJcbiAgICB9XHJcbiAgICByZXR1cm4gTWF0aC5taW4obWF4V2lkdGgsIG1heENvbHVtbldpZHRoKVxyXG4gIH0pXHJcbiAgbGV0IGhlYWRsaW5lID0gb3B0aW9ucy53aWR0aHMubWFwKG1heFdpZHRoID0+IFwi4pSAXCIucmVwZWF0KG1heFdpZHRoKSlcclxuICBjb25zb2xlLmluZm8oYCR7aW5kZW50feKUjOKUgCR7aGVhZGxpbmUuam9pbihcIuKUgOKUrOKUgFwiKX3ilIDilJBgKVxyXG4gIGlmIChvcHRpb25zPy5oZWFkbGluZXMpIHtcclxuICAgIGhlYWRsaW5lID0gb3B0aW9ucy53aWR0aHMubWFwKChtYXhXaWR0aCwgaW5kZXgpID0+IHtcclxuICAgICAgY29uc3QgY2FwdGlvbiA9IG9wdGlvbnMuaGVhZGxpbmVzW2luZGV4XS5yZXBsYWNlQWxsKFwiOlwiLCBcIlwiKVxyXG4gICAgICBjb25zdCBjYXB0aW9uTGVuZ3RoID0gY29sb3JzdHJpcChjYXB0aW9uKS5sZW5ndGhcclxuICAgICAgcmV0dXJuIGAke3doaXRlKGNhcHRpb24pfSR7XCIgXCIucmVwZWF0KG1heFdpZHRoIC0gY2FwdGlvbkxlbmd0aCl9YFxyXG4gICAgfSlcclxuICAgIGNvbnNvbGUuaW5mbyhgJHtpbmRlbnR94pSCICR7aGVhZGxpbmUuam9pbihcIiDilIIgXCIpfSDilIJgKVxyXG4gICAgaGVhZGxpbmUgPSBvcHRpb25zLndpZHRocy5tYXAobWF4V2lkdGggPT4gXCLilIBcIi5yZXBlYXQobWF4V2lkdGgpKVxyXG4gICAgY29uc29sZS5pbmZvKGAke2luZGVudH3ilJzilIAke2hlYWRsaW5lLmpvaW4oXCLilIDilLzilIBcIil94pSA4pSkYClcclxuICB9XHJcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCByZWNvcmRzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICBsZXQgbGluZSA9IFwiXCJcclxuICAgIGZvciAobGV0IGogPSAwOyBqIDwgbnVtQ29sdW1uczsgaisrKSB7XHJcbiAgICAgIGxldCBkYXRhID0gdGFibGVbal1baV1cclxuICAgICAgbGV0IGNvbG9yXHJcbiAgICAgIGlmIChvcHRpb25zPy5jb2xvcnMgJiYgb3B0aW9ucy5jb2xvcnNbal0pIHtcclxuICAgICAgICBjb2xvciA9IG9wdGlvbnMuY29sb3JzW2pdXHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgY29sb3IgPSB0eXBlb2YgZGF0YSA9PT0gXCJzdHJpbmdcIlxyXG4gICAgICAgICAgPyBncmVlblxyXG4gICAgICAgICAgOiAoTnVtYmVyKGRhdGEpID09PSBkYXRhICYmIGRhdGEgJSAxICE9PSAwIC8vIGlzIGZsb2F0IG51bWJlcj9cclxuICAgICAgICAgICAgPyB5ZWxsb3dcclxuICAgICAgICAgICAgOiAoeCkgPT4geFxyXG4gICAgICAgICAgKVxyXG4gICAgICB9XHJcbiAgICAgIGRhdGEgPSBzdHJpbmdpZnkoZGF0YSwgb3B0aW9ucz8uaHVtYW5pemVycywgailcclxuICAgICAgaWYgKGNvbG9yc3RyaXAoZGF0YSkubGVuZ3RoID4gbWF4Q29sdW1uV2lkdGgpIHtcclxuICAgICAgICB3aGlsZSAoY29sb3JzdHJpcChkYXRhKS5sZW5ndGggPiBtYXhDb2x1bW5XaWR0aCAtIDMpIHtcclxuICAgICAgICAgIGRhdGEgPSBkYXRhLnNsaWNlKDAsIC0xKVxyXG4gICAgICAgIH1cclxuICAgICAgICBkYXRhICs9IFwiLi4uXCJcclxuICAgICAgfVxyXG4gICAgICBjb25zdCBkYXRhTGVuZ3RoID0gY29sb3JzdHJpcChkYXRhKS5sZW5ndGhcclxuICAgICAgaWYgKG9wdGlvbnM/LmhlYWRsaW5lcyAmJiBvcHRpb25zLmhlYWRsaW5lc1tqXVswXSA9PT0gXCI6XCIpIHtcclxuICAgICAgICBkYXRhID0gYCR7Y29sb3IoZGF0YSl9JHtcIiBcIi5yZXBlYXQob3B0aW9ucy53aWR0aHNbal0gLSBkYXRhTGVuZ3RoKX1gXHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgZGF0YSA9IGAke1wiIFwiLnJlcGVhdChvcHRpb25zLndpZHRoc1tqXSAtIGRhdGFMZW5ndGgpfSR7Y29sb3IoZGF0YSl9YFxyXG4gICAgICB9XHJcbiAgICAgIGxpbmUgKz0gYOKUgiAke2RhdGF9IGBcclxuICAgIH1cclxuICAgIGNvbnNvbGUuaW5mbyhgJHtpbmRlbnR9JHtsaW5lfeKUgmApXHJcbiAgfVxyXG4gIGhlYWRsaW5lID0gb3B0aW9ucy53aWR0aHMubWFwKG1heFdpZHRoID0+IFwi4pSAXCIucmVwZWF0KG1heFdpZHRoKSlcclxuICBjb25zb2xlLmluZm8oYCR7aW5kZW50feKUlOKUgCR7aGVhZGxpbmUuam9pbihcIuKUgOKUtOKUgFwiKX3ilIDilJhgKVxyXG59XHJcblxyXG5mdW5jdGlvbiB0cmFuc3Bvc2UgKHJlY29yZHMsIG51bUNvbHVtbnMpIHtcclxuICBjb25zdCBjb2x1bW5zID0gW11cclxuICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgbnVtQ29sdW1uczsgaW5kZXgrKykge1xyXG4gICAgY29sdW1ucy5wdXNoKHJlY29yZHMubWFwKHJvdyA9PiByb3dbaW5kZXhdKSlcclxuICB9XHJcbiAgcmV0dXJuIGNvbHVtbnNcclxufVxyXG5cclxuZnVuY3Rpb24gdHhKc29uUmVwbGFjZXIgKGtleSwgdmFsdWUpIHtcclxuICBzd2l0Y2ggKGtleSkge1xyXG4gICAgY2FzZSBcImJ5dGVzXCI6XHJcbiAgICBjYXNlIFwiZGVyXCI6XHJcbiAgICAgIHJldHVybiB0b0hleFN0cmluZyh2YWx1ZSwgdHJ1ZSlcclxuICAgIGNhc2UgXCJ0eFwiOlxyXG4gICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkodmFsdWUsIHR4SnNvblJlcGxhY2VyKVxyXG4gICAgY2FzZSBcImNoYW5nZVwiOlxyXG4gICAgY2FzZSBcImZlZXNcIjpcclxuICAgIGNhc2UgXCJ2YWx1ZVwiOlxyXG4gICAgICByZXR1cm4gcGFyc2VJbnQodmFsdWUpIC8gMTAgKiogOVxyXG4gICAgZGVmYXVsdDpcclxuICAgICAgcmV0dXJuIHZhbHVlXHJcbiAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiB0eFJlY2VpcHRKc29uUmVwbGFjZXIgKGtleSwgdmFsdWUpIHtcclxuICBzd2l0Y2ggKGtleSkge1xyXG4gICAgY2FzZSBcImJ5dGVzXCI6XHJcbiAgICBjYXNlIFwiZGVyXCI6XHJcbiAgICAgIHJldHVybiB0b0hleFN0cmluZyh2YWx1ZSwgdHJ1ZSlcclxuICAgIGNhc2UgXCJ0eFwiOlxyXG4gICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkodmFsdWUsIHR4SnNvblJlcGxhY2VyKVxyXG4gICAgY2FzZSBcImNoYW5nZVwiOlxyXG4gICAgY2FzZSBcImZlZXNcIjpcclxuICAgIGNhc2UgXCJ2YWx1ZVwiOlxyXG4gICAgICByZXR1cm4gcGFyc2VJbnQodmFsdWU/LnBlZHJvcykgLyAxMCAqKiA5XHJcbiAgICBjYXNlIFwidGltZXN0YW1wXCI6XHJcbiAgICAgIHJldHVybiBtb21lbnQudW5peCh2YWx1ZSkuZm9ybWF0KFwiTU1NTSBEbyBZWVlZLCBoOm1tOnNzIGFcIilcclxuICAgIGRlZmF1bHQ6XHJcbiAgICAgIHJldHVybiB2YWx1ZVxyXG4gIH1cclxufVxyXG5cclxuZnVuY3Rpb24gdHJhY2VUcmFuc2FjdGlvbk9uQ2hlY2twb2ludCAocmVjZWlwdCkge1xyXG4gIGlmIChyZWNlaXB0Py5jb25maXJtYXRpb25zKSB7XHJcbiAgICBjb25zb2xlLmluZm8oYCA+IENoZWNrcG9pbnQgIyR7Y29tbWFzKHJlY2VpcHQuY29uZmlybWF0aW9ucyl9Li4uYClcclxuICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHRyYWNlVHJhbnNhY3Rpb25PblN0YXR1c0NoYW5nZSAocmVjZWlwdCkge1xyXG4gIGNvbnN0IGNhcHRpb25zID0ge1xyXG4gICAgcGVuZGluZzogXCJBd2FpdGluZyByZWxheS4uLlwiLFxyXG4gICAgLy8gY29uZmlybWVkOiBcIlRyYW5zYWN0aW9uIGNvbmZpcm1lZDpcIixcclxuICAgIC8vIGZpbmFsaXplZDogXCJUcmFuc2FjdGlvbiBmaW5hbGl6ZWQ6XCIsXHJcbiAgICByZWxheWVkOiBcIkF3YWl0aW5nIGluY2x1c2lvbi4uLlwiLFxyXG4gICAgbWluZWQ6IFwiQXdhaXRpbmcgY29uZmlybWF0aW9ucy4uLlwiLFxyXG4gIH1cclxuICBjb25zdCBjYXB0aW9uID0gY2FwdGlvbnNbcmVjZWlwdC5zdGF0dXNdXHJcbiAgaWYgKGNhcHRpb24pIGNvbnNvbGUuaW5mbyhgID4gJHtjYXB0aW9uc1tyZWNlaXB0LnN0YXR1c119YClcclxuICBpZiAoW1wiZmluYWxpemVkXCIsIFwiY29uZmlybWVkXCJdLmluY2x1ZGVzKHJlY2VpcHQuc3RhdHVzKSkge1xyXG4gICAgY29uc29sZS5pbmZvKGAgPiBCbG9jayBoYXNoOiAgICR7Z3JheShyZWNlaXB0Py5ibG9ja0hhc2gpfWApXHJcbiAgICBjb25zb2xlLmluZm8oYCA+IEJsb2NrIG1pbmVyOiAgJHtjeWFuKHJlY2VpcHQ/LmJsb2NrTWluZXIpfWApO1xyXG4gICAgY29uc29sZS5pbmZvKGAgPiBCbG9jayBlcG9jaDogICR7d2hpdGUoY29tbWFzKHJlY2VpcHQ/LmJsb2NrRXBvY2gpKX1gKVxyXG4gICAgY29uc29sZS5pbmZvKGAgPiBJbmNsdWRlZCBhdDogICR7Z3JlZW4obW9tZW50LnVuaXgocmVjZWlwdD8uYmxvY2tUaW1lc3RhbXApLmZvcm1hdChcIk1NTU0gRG8gWVlZWSwgaDptbTpzcyBhXCIpKX1gKVxyXG4gICAgY29uc29sZS5pbmZvKGAgPiAke3JlY2VpcHQuc3RhdHVzWzBdLnRvVXBwZXJDYXNlKCkgKyByZWNlaXB0LnN0YXR1cy5zbGljZSgxKX0gYXQ6ICR7bWdyZWVuKG1vbWVudC51bml4KHJlY2VpcHQudGltZXN0YW1wKS5mb3JtYXQoXCJNTU1NIERvIFlZWVksIGg6bW06c3MgYVwiKSl9YClcclxuICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHRyYWNlVHJhbnNhY3Rpb25SZWNlaXB0IChyZWNlaXB0KSB7XHJcbiAgY29uc3QgY2FwdGlvbnMgPSB7XHJcbiAgICBEYXRhUmVxdWVzdDogXCIgPiBEUlQgaGFzaDogICAgIFwiLFxyXG4gICAgVmFsdWVUcmFuc2ZlcjogXCIgPiBWVFQgaGFzaDogICAgIFwiLFxyXG4gIH1cclxuICBjb25zb2xlLmluZm8oYCR7Y2FwdGlvbnNbcmVjZWlwdC50eXBlXSB8fCBcIiA+IFRYIGhhc2g6ICAgICAgXCJ9JHt3aGl0ZShyZWNlaXB0Lmhhc2gpfWApXHJcbiAgaWYgKHJlY2VpcHQ/LmRyb0hhc2gpIGNvbnNvbGUuaW5mbyhgID4gRFJPIGhhc2g6ICAgICAke2dyZWVuKHJlY2VpcHQuZHJvSGFzaCl9YClcclxuICBpZiAocmVjZWlwdD8ucmFkSGFzaCkgY29uc29sZS5pbmZvKGAgPiBSQUQgaGFzaDogICAgICR7bWdyZWVuKHJlY2VpcHQucmFkSGFzaCl9YClcclxuICBpZiAocmVjZWlwdD8uZHJvU0xBKSBjb25zb2xlLmluZm8oYCA+IFNMQSBwYXJhbXM6ICAgJHtKU09OLnN0cmluZ2lmeShyZWNlaXB0LmRyb1NMQSl9YClcclxuICBpZiAocmVjZWlwdD8ud2l0aGRyYXdlcikge1xyXG4gICAgaWYgKHJlY2VpcHQ/LnZhbGlkYXRvcikge1xyXG4gICAgICBjb25zb2xlLmluZm8oYCA+IFZhbGlkYXRvcjogICAgJHttY3lhbihyZWNlaXB0LnZhbGlkYXRvcil9YClcclxuICAgIH1cclxuICAgIGNvbnNvbGUuaW5mbyhgID4gV2l0aGRyYXdlcjogICAke21tYWdlbnRhKHJlY2VpcHQud2l0aGRyYXdlcil9YClcclxuICB9IGVsc2Uge1xyXG4gICAgY29uc3Qgc2lnbmVycyA9IEFycmF5LmlzQXJyYXkocmVjZWlwdC5mcm9tKSA/IHJlY2VpcHQuZnJvbSA6IFtyZWNlaXB0LmZyb21dXHJcbiAgICBjb25zb2xlLmluZm8oYCA+IFNpZ25lci9zOiAgICAgJHttbWFnZW50YShzaWduZXJzWzBdKX1gKVxyXG4gICAgc2lnbmVycy5zbGljZSgxKS5mb3JFYWNoKHNpZ25lciA9PiB7XHJcbiAgICAgIGNvbnNvbGUuaW5mbyhgICAgICAgICAgICAgICAgICAke21tYWdlbnRhKHNpZ25lcil9YClcclxuICAgIH0pXHJcbiAgfVxyXG4gIGlmIChyZWNlaXB0Py5yZWNpcGllbnRzKSB7XHJcbiAgICBjb25zb2xlLmluZm8oYCA+IFJlY2lwaWVudC9zOiAgJHtcclxuICAgICAgbWJsdWUocmVjZWlwdC5yZWNpcGllbnRzLmZpbHRlcigocGtoLCBpbmRleCwgYXJyYXkpID0+IGluZGV4ID09PSBhcnJheS5pbmRleE9mKHBraCkpKVxyXG4gICAgfWApXHJcbiAgfVxyXG4gIGlmIChyZWNlaXB0Py5mZWVzKSBjb25zb2xlLmluZm8oYCA+IE5ldHdvcmsgZmVlOiAgJHt5ZWxsb3cocmVjZWlwdC5mZWVzLnRvU3RyaW5nKDIpKX1gKVxyXG4gIGlmIChyZWNlaXB0Py52YWx1ZSkgY29uc29sZS5pbmZvKGAgPiBWYWx1ZTogICAgICAgICR7bXllbGxvdyhyZWNlaXB0LnZhbHVlLnRvU3RyaW5nKDIpKX1gKVxyXG4gIGlmIChyZWNlaXB0Py53ZWlnaHQpIGNvbnNvbGUuaW5mbyhgID4gV2VpZ2h0OiAgICAgICAke21ncmVlbihjb21tYXMocmVjZWlwdC53ZWlnaHQpKX1gKVxyXG4gIGlmIChyZWNlaXB0Py53aXRuZXNzZXMpIHtcclxuICAgIGNvbnNvbGUuaW5mbyhgID4gV2l0bmVzc2VzOiAgICAke3JlY2VpcHQud2l0bmVzc2VzfWApXHJcbiAgfVxyXG59XHJcblxyXG5hc3luYyBmdW5jdGlvbiB0cmFjZVRyYW5zYWN0aW9uICh0cmFuc21pdHRlciwgb3B0aW9ucykge1xyXG4gIGNvbnN0IGNvbG9yID0gb3B0aW9ucz8uY29sb3IgfHwgKCh4KSA9PiBgXFx4MWJbMzA7NDVtJHt4fVxceDFiWzBtYClcclxuICBsZXQgcmVjZWlwdCA9IGF3YWl0IHRyYW5zbWl0dGVyLnNpZ25UcmFuc2FjdGlvbihvcHRpb25zLCBvcHRpb25zPy5yZWxvYWQpXHJcbiAgaWYgKG9wdGlvbnM/LnZlcmJvc2UpIHtcclxuICAgIGNvbnNvbGUuaW5mbyhcclxuICAgICAgYFxcbiR7Z3JheShKU09OLnN0cmluZ2lmeShyZWNlaXB0LnR4LCB0eEpzb25SZXBsYWNlcikpfWBcclxuICAgIClcclxuICB9XHJcbiAgaWYgKG9wdGlvbnM/LmhlYWRsaW5lKSB7XHJcbiAgICBjb25zb2xlLmluZm8oYFxcbiAke2NvbG9yKGAgICR7b3B0aW9ucy5oZWFkbGluZX0gIGApfVxcbmApXHJcbiAgfVxyXG4gIHRyYWNlVHJhbnNhY3Rpb25SZWNlaXB0KHJlY2VpcHQpXHJcbiAgaWYgKCFvcHRpb25zPy5mb3JjZSkge1xyXG4gICAgLy8gcHJvbXB0IHVzZXIgY29uZmlybWF0aW9uXHJcbiAgICBjb25zb2xlLmluZm8oKVxyXG4gICAgY29uc3QgYW5zd2VyID0gYXdhaXQgcmVxdWlyZShcImlucXVpcmVyXCIpLmNyZWF0ZVByb21wdE1vZHVsZSgpKFt7XHJcbiAgICAgIG1lc3NhZ2U6IFwiU2VuZCB0cmFuc2FjdGlvbj9cIixcclxuICAgICAgdHlwZTogXCJjb25maXJtXCIsXHJcbiAgICAgIG5hbWU6IFwiY29udGludWVcIixcclxuICAgICAgZGVmYXVsdDogZmFsc2UsXHJcbiAgICB9XSlcclxuICAgIGlmICghYW5zd2VyLmNvbnRpbnVlKSB7XHJcbiAgICAgIHJldHVybiByZWNlaXB0XHJcbiAgICB9XHJcbiAgfVxyXG4gIHRyeSB7XHJcbiAgICBjb25zb2xlLmluZm8oKVxyXG4gICAgcmVjZWlwdCA9IGF3YWl0IHRyYW5zbWl0dGVyLnNlbmRUcmFuc2FjdGlvbigpXHJcbiAgICBpZiAob3B0aW9ucz8uYXdhaXQgfHwgb3B0aW9ucz8uY29uZmlybWF0aW9ucyAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHJlY2VpcHQgPSBhd2FpdCB0cmFuc21pdHRlci5jb25maXJtVHJhbnNhY3Rpb24ocmVjZWlwdC5oYXNoLCB7XHJcbiAgICAgICAgY29uZmlybWF0aW9uczogb3B0aW9ucz8uY29uZmlybWF0aW9ucyB8fCAwLFxyXG4gICAgICAgIG9uQ2hlY2twb2ludDogdHJhY2VUcmFuc2FjdGlvbk9uQ2hlY2twb2ludCxcclxuICAgICAgICBvblN0YXR1c0NoYW5nZTogdHJhY2VUcmFuc2FjdGlvbk9uU3RhdHVzQ2hhbmdlLFxyXG4gICAgICB9KVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc3QgZGF0YSA9IHsgc3RhdHVzOiByZWNlaXB0Py5zdGF0dXMsIHRpbWVzdGFtcDogcmVjZWlwdD8udGltZXN0YW1wIHx8IE1hdGguZmxvb3IoRGF0ZS5ub3coKSAvIDEwMDApIH1cclxuICAgICAgY29uc29sZS5pbmZvKGRhdGEpXHJcbiAgICB9XHJcbiAgfSBjYXRjaCAoZXJyKSB7XHJcbiAgICBpZiAoZXJyPy5pbkZsaWdodCAmJiBlcnIuaW5GbGlnaHQpIHtcclxuICAgICAgY29uc29sZS5pbmZvKGBcXG4ke2dyYXkoSlNPTi5zdHJpbmdpZnkoZXJyLmluRmxpZ3Q/Lm1lc3NhZ2UsIHR4UmVjZWlwdEpzb25SZXBsYWNlcikpfWApXHJcbiAgICB9XHJcbiAgICB0aHJvdyBlcnJcclxuICB9XHJcbiAgcmV0dXJuIHJlY2VpcHRcclxufVxyXG5cclxuZnVuY3Rpb24gdW5lc2NhcGVTbGFzaGVzKHN0cikge1xyXG4gIC8vIGFkZCBhbm90aGVyIGVzY2FwZWQgc2xhc2ggaWYgdGhlIHN0cmluZyBlbmRzIHdpdGggYW4gb2RkXHJcbiAgLy8gbnVtYmVyIG9mIGVzY2FwZWQgc2xhc2hlcyB3aGljaCB3aWxsIGNyYXNoIEpTT04ucGFyc2VcclxuICBsZXQgcGFyc2VkU3RyID0gc3RyLnJlcGxhY2UoLyhefFteXFxcXF0pKFxcXFxcXFxcKSpcXFxcJC8sIFwiJCZcXFxcXCIpO1xyXG5cclxuICAvLyBlc2NhcGUgdW5lc2NhcGVkIGRvdWJsZSBxdW90ZXMgdG8gcHJldmVudCBlcnJvciB3aXRoXHJcbiAgLy8gYWRkZWQgZG91YmxlIHF1b3RlcyBpbiBqc29uIHN0cmluZ1xyXG4gIHBhcnNlZFN0ciA9IHBhcnNlZFN0ci5yZXBsYWNlKC8oXnxbXlxcXFxdKSgoXFxcXFxcXFwpKlwiKS9nLCBcIiQxXFxcXCQyXCIpO1xyXG5cclxuICB0cnkge1xyXG4gICAgcGFyc2VkU3RyID0gSlNPTi5wYXJzZShgXCIke3BhcnNlZFN0cn1cImApO1xyXG4gIH0gY2F0Y2goZSkge1xyXG4gICAgcmV0dXJuIHN0cjtcclxuICB9XHJcbiAgcmV0dXJuIHBhcnNlZFN0ciA7XHJcbn1cclxuXHJcbm1vZHVsZS5leHBvcnRzID0ge1xyXG4gIGNvbG9yczoge1xyXG4gICAgYmJsdWUsXHJcbiAgICBiY3lhbixcclxuICAgIGJncmVlbixcclxuICAgIGJsdWUsXHJcbiAgICBicmVkLFxyXG4gICAgYnZpb2xldCxcclxuICAgIGN5YW4sXHJcbiAgICBncmF5LFxyXG4gICAgZ3JlZW4sXHJcbiAgICBtYWdlbnRhLFxyXG4gICAgcmVkLFxyXG4gICAgd2hpdGUsXHJcbiAgICB5ZWxsb3csXHJcbiAgICBub3JtYWwsXHJcbiAgICBsY3lhbixcclxuICAgIGxncmF5LFxyXG4gICAgbGdyZWVuLFxyXG4gICAgbG1hZ2VudGEsXHJcbiAgICBseWVsbG93LFxyXG4gICAgbWJsdWUsXHJcbiAgICBtY3lhbixcclxuICAgIG1ncmVlbixcclxuICAgIG1tYWdlbnRhLFxyXG4gICAgbXJlZCxcclxuICAgIG15ZWxsb3csXHJcbiAgfSxcclxuICBjb2xvcnN0cmlwLFxyXG4gIGNvbW1hcyxcclxuICB3aG9sZV93aXRzLFxyXG4gIHRvRml4ZWRUcnVuYyxcclxuICBjb3VudExlYXZlcyxcclxuICBleGVjUmFkb25CeXRlY29kZSxcclxuICBkZWxldGVFeHRyYUZsYWdzLFxyXG4gIGV4dHJhY3RGcm9tQXJncyxcclxuICBmcm9tSGV4U3RyaW5nLFxyXG4gIGlzSGV4U3RyaW5nLFxyXG4gIGlzSGV4U3RyaW5nT2ZMZW5ndGgsXHJcbiAgdG9IZXhTdHJpbmcsXHJcbiAgcGFyc2VVUkwsXHJcbiAgaXBJc1ByaXZhdGVPckxvY2FsaG9zdCxcclxuICBzaG93VXNhZ2UsXHJcbiAgc2hvd1VzYWdlRXJyb3IsXHJcbiAgc2hvd1VzYWdlU3ViY29tbWFuZCxcclxuICBzaG93VmVyc2lvbixcclxuICB0b29sa2l0UnVuLFxyXG4gIHRvVXBwZXJDYW1lbENhc2UsXHJcbiAgdG9VdGYxNkJ5dGVzLFxyXG4gIHRvVXRmOEFycmF5LCAgXHJcbiAgdXRmOEFycmF5VG9TdHIsXHJcbiAgcHJvbXB0LFxyXG4gIHByb21wdGVyLFxyXG4gIHRyYWNlQ2hlY2tsaXN0cyxcclxuICB0cmFjZUhlYWRlcixcclxuICB0cmFjZVRhYmxlLFxyXG4gIHRyYWNlVHJhbnNhY3Rpb24sXHJcbiAgdHJhY2VUcmFuc2FjdGlvbk9uU3RhdHVzQ2hhbmdlLFxyXG4gIHRyYWNlVHJhbnNhY3Rpb25PbkNoZWNrcG9pbnQsXHJcbiAgdHJhY2VUcmFuc2FjdGlvblJlY2VpcHQsXHJcbiAgY2hlY2tScGNXaWxkY2FyZHMsXHJcbiAgaXNXaWxkY2FyZCxcclxuICBnZXRXaWxkY2FyZHNDb3VudEZyb21TdHJpbmcsXHJcbiAgcmVwbGFjZVdpbGRjYXJkcyxcclxuICBzcGxpY2VXaWxkY2FyZCxcclxuICB0eEpzb25SZXBsYWNlcixcclxuICB1bmVzY2FwZVNsYXNoZXMsXHJcbn1cclxuIl19
|
|
854
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVscGVycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9iaW4vaGVscGVycy5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDMUMsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUM1QyxPQUFPLEtBQUssR0FBRyxNQUFNLFVBQVUsQ0FBQztBQUNoQyxPQUFPLEtBQUssRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUM5QixPQUFPLEtBQUssUUFBUSxNQUFNLGVBQWUsQ0FBQztBQUMxQyxPQUFPLE1BQU0sTUFBTSxRQUFRLENBQUM7QUFFNUIsTUFBTSxPQUFPLEdBQUcsYUFBYSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7QUFFL0MsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFHLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FDakMsR0FBRyxDQUFDLE9BQU8sQ0FDViw2RUFBNkUsRUFDN0UsRUFBRSxDQUNGLENBQUM7QUFFSCxNQUFNLENBQUMsTUFBTSxNQUFNLEdBQUcsQ0FBQyxNQUFNLEVBQUUsRUFBRTtJQUNoQyxNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsUUFBUSxFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzNDLE1BQU0sTUFBTSxHQUNYLEtBQUssQ0FBQyxNQUFNLElBQUksQ0FBQztRQUNoQixDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLHVCQUF1QixFQUFFLEdBQUcsQ0FBQyxFQUFFO1FBQ3JELENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsdUJBQXVCLEVBQUUsR0FBRyxDQUFDLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7SUFDcEUsT0FBTyxNQUFNLENBQUM7QUFDZixDQUFD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QUFjLEdBQUcsV0FBVyxDQUFDO0FBQ3JELE1BQU0sSUFBSSxHQUFHLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxjQUFjLEdBQUcsV0FBVyxDQUFDO0FBQ25ELE1BQU0sT0FBTyxHQUFHLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxjQUFjLEdBQUcsV0FBVyxDQUFDO0FBRXRELE1BQU0sS0FBSyxHQUFHLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxhQUFhLEdBQUcsU0FBUyxDQUFDO0FBQ2pELE1BQU0sS0FBSyxHQUFHLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxhQUFhLEdBQUcsU0FBUyxDQUFDO0FBQ2pELE1BQU0sTUFBTSxHQUFHLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxhQUFhLEdBQUcsU0FBUyxDQUFDO0FBQ2xELE1BQU0sUUFBUSxHQUFHLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxhQUFhLEdBQUcsU0FBUyxDQUFDO0FBQ3BELE1BQU0sT0FBTyxHQUFHLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxhQUFhLEdBQUcsU0FBUyxDQUFDO0FBQ25ELE1BQU0sS0FBSyxHQUFHLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxXQUFXLEdBQUcsU0FBUyxDQUFDO0FBQy9DLE1BQU0sS0FBSyxHQUFHLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxXQUFXLEdBQUcsU0FBUyxDQUFDO0FBQy9DLE1BQU0sTUFBTSxHQUFHLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxXQUFXLEdBQUcsU0FBUyxDQUFDO0FBQ2hELE1BQU0sUUFBUSxHQUFHLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxhQUFhLEdBQUcsU0FBUyxDQUFDO0FBQ3BELE1BQU0sSUFBSSxHQUFHLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxXQUFXLEdBQUcsU0FBUyxDQUFDO0FBQzlDLE1BQU0sT0FBTyxHQUFHLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxXQUFXLEdBQUcsU0FBUyxDQUFDO0FBRWpELE1BQU0sSUFBSSxHQUFHLENB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QUFDO0lBQ0QsT0FBTyxPQUFPLENBQUM7QUFDaEIsQ0FBQztBQUVELE1BQU0sVUFBVSxlQUFlLENBQUMsR0FBRztJQUNsQywyREFBMkQ7SUFDM0Qsd0RBQXdEO0lBQ3hELElBQUksU0FBUyxHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUMscUJBQXFCLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFFM0QsdURBQXVEO0lBQ3ZELHFDQUFxQztJQUNyQyxTQUFTLEdBQUcsU0FBUyxDQUFDLE9BQU8sQ0FBQyxzQkFBc0IsRUFBRSxRQUFRLENBQUMsQ0FBQztJQUVoRSxJQUFJLENBQUM7UUFDSixTQUFTLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLFNBQVMsR0FBRyxDQUFDLENBQUM7SUFDMUMsQ0FBQztJQUFDLE9BQU8sRUFBRSxFQUFFLENBQUM7UUFDYixPQUFPLEdBQUcsQ0FBQztJQUNaLENBQUM7SUFDRCxPQUFPLFNBQVMsQ0FBQztBQUNsQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZXhlYyB9IGZyb20gXCJub2RlOmNoaWxkX3Byb2Nlc3NcIjtcclxuaW1wb3J0IHsgY3JlYXRlUmVxdWlyZSB9IGZyb20gXCJub2RlOm1vZHVsZVwiO1xyXG5pbXBvcnQgKiBhcyBuZXQgZnJvbSBcIm5vZGU6bmV0XCI7XHJcbmltcG9ydCAqIGFzIG9zIGZyb20gXCJub2RlOm9zXCI7XHJcbmltcG9ydCAqIGFzIHJlYWRsaW5lIGZyb20gXCJub2RlOnJlYWRsaW5lXCI7XHJcbmltcG9ydCBtb21lbnQgZnJvbSBcIm1vbWVudFwiO1xyXG5cclxuY29uc3QgcmVxdWlyZSA9IGNyZWF0ZVJlcXVpcmUoaW1wb3J0Lm1ldGEudXJsKTtcclxuXHJcbmV4cG9ydCBjb25zdCBjb2xvcnN0cmlwID0gKHN0cikgPT5cclxuXHRzdHIucmVwbGFjZShcclxuXHRcdC9bXFx1MDAxYlxcdTAwOWJdW1soKSM7P10qKD86WzAtOV17MSw0fSg/OjtbMC05XXswLDR9KSopP1swLTlBLU9SWmNmLW5xcnk9PjxdL2csXHJcblx0XHRcIlwiLFxyXG5cdCk7XHJcblxyXG5leHBvcnQgY29uc3QgY29tbWFzID0gKG51bWJlcikgPT4ge1xyXG5cdGNvbnN0IHBhcnRzID0gbnVtYmVyLnRvU3RyaW5nKCkuc3BsaXQoXCIuXCIpO1xyXG5cdGNvbnN0IHJlc3VsdCA9XHJcblx0XHRwYXJ0cy5sZW5ndGggPD0gMVxyXG5cdFx0XHQ/IGAke3BhcnRzWzBdLnJlcGxhY2UoL1xcQig/PShcXGR7M30pKyg/IVxcZCkpL2csIFwiLFwiKX1gXHJcblx0XHRcdDogYCR7cGFydHNbMF0ucmVwbGFjZSgvXFxCKD89KFxcZHszfSkrKD8hXFxkKSkvZywgXCIsXCIpfS4ke3BhcnRzWzFdfWA7XHJcblx0cmV0dXJuIHJlc3VsdDtcclxufTtcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiB0b0ZpeGVkVHJ1bmMoeCwgbikge1xyXG5cdGNvbnN0IHYgPSAodHlwZW9mIHggPT09IFwic3RyaW5nXCIgPyB4IDogeC50b1N0cmluZygpKS5zcGxpdChcIi5cIik7XHJcblx0aWYgKG4gPD0gMCkgcmV0dXJuIHZbMF07XHJcblx0bGV0IGYgPSB2WzFdIHx8IFwiXCI7XHJcblx0aWYgKGYubGVuZ3RoID4gbikgcmV0dXJuIGAke3ZbMF19LiR7Zi5zdWJzdHIoMCwgbil9YDtcclxuXHR3aGlsZSAoZi5sZW5ndGggPCBuKSBmICs9IFwiMFwiO1xyXG5cdHJldHVybiBgJHt2WzBdfS4ke2Z9YDtcclxufVxyXG5cclxuZXhwb3J0IGNvbnN0IHdob2xlX3dpdHMgPSAobnVtYmVyLCBkaWdpdHMpID0+IHtcclxuXHRjb25zdCBsb29rdXAgPSBbXHJcblx0XHR7IHZhbHVlOiAxbiwgc3ltYm9sOiBcInBlZHJvc1wiIH0sXHJcblx0XHR7IHZhbHVlOiAxMG4gKiogNm4sIHN5bWJvbDogXCJtV2l0c1wiIH0sXHJcblx0XHR7IHZhbHVlOiAxMG4gKiogOW4sIHN5bWJvbDogXCIgV2l0c1wiIH0sXHJcblx0XHR7IHZhbHVlOiAxMG4gKiogMTJuLCBzeW1ib2w6IFwiS1dpdHNcIiB9LFxyXG5cdFx0eyB2YWx1ZTogMTBuICoqIDE1biwgc3ltYm9sOiBcIk1XaXRzXCIgfSxcclxuXHRdO1xyXG5cdC8vIGNvbnN0IHJlZ2V4cCA9IC9cXC4wKyR8KD88PVxcLlswLTldKTArJC9cclxuXHRjb25zdCBpdGVtID0gbG9va3VwLmZpbmRMYXN0KChpdGVtKSA9PiBudW1iZXIgPj0gaXRlbS52YWx1ZSk7XHJcblx0Y29uc3QgcXVvdGllbnQgPSBpdGVtXHJcblx0XHQ/IE51bWJlcihCaWdJbnQobnVtYmVyKSAvIGl0ZW0udmFsdWUpXHJcblx0XHQ6IG51bWJlci50b1N0cmluZygpO1xyXG5cdGNvbnN0IGRlY2ltYWxzID0gaXRlbVxyXG5cdFx0PyAoaXRlbS52YWx1ZSArIEJpZ0ludChudW1iZXIpIC0gQmlnSW50KHF1b3RpZW50KSAqIGl0ZW0udmFsdWUpXHJcblx0XHRcdFx0LnRvU3RyaW5nKClcclxuXHRcdFx0XHQuc2xpY2UoMSlcclxuXHRcdDogXCJcIjtcclxuXHRyZXR1cm4gaXRlbVxyXG5cdFx0PyBgJHtjb21tYXMocXVvdGllbnQpfSR7ZGVjaW1hbHMgIT09IFwiXCIgPyBgLiR7ZGVjaW1hbHMuc2xpY2UoMCwgZGlnaXRzKX1gIDogXCJcIn0gJHtpdGVtLnN5bWJvbH1gXHJcblx0XHQ6IFwiKG5vIGNvaW5zKVwiO1xyXG59O1xyXG5cclxuY29uc3QgYmJsdWUgPSAoc3RyKSA9PiBgXFx4MWJbMTs5ODs0NG0ke3N0cn1cXHgxYlswOzA7MG1gO1xyXG5jb25zdCBiY3lhbiA9IChzdHIpID0+IGBcXHgxYlszODs0Nm0ke3N0cn1cXHgxYlswOzBtYDtcclxuY29uc3QgYmdyZWVuID0gKHN0cikgPT4gYFxceDFiWzMwOzQybSR7c3RyfVxceDFiWzA7MG1gO1xyXG5jb25zdCBicmVkID0gKHN0cikgPT4gYFxceDFiWzMwOzQxbSR7c3RyfVxceDFiWzA7MG1gO1xyXG5jb25zdCBidmlvbGV0ID0gKHN0cikgPT4gYFxceDFiWzMwOzQ1bSR7c3RyfVxceDFiWzA7MG1gO1xyXG5cclxuY29uc3QgbGN5YW4gPSAoc3RyKSA9PiBgXFx4MWJbMTs5Nm0ke3N0cn1cXHgxYlswbWA7XHJcbmNvbnN0IGxncmF5ID0gKHN0cikgPT4gYFxceDFiWzE7OTBtJHtzdHJ9XFx4MWJbMG1gO1xyXG5jb25zdCBsZ3JlZW4gPSAoc3RyKSA9PiBgXFx4MWJbMTs5Mm0ke3N0cn1cXHgxYlswbWA7XHJcbmNvbnN0IGxtYWdlbnRhID0gKHN0cikgPT4gYFxceDFiWzE7OTVtJHtzdHJ9XFx4MWJbMG1gO1xyXG5jb25zdCBseWVsbG93ID0gKHN0cikgPT4gYFxceDFiWzE7OTNtJHtzdHJ9XFx4MWJbMG1gO1xyXG5jb25zdCBtYmx1ZSA9IChzdHIpID0+IGBcXHgxYls5NG0ke3N0cn1cXHgxYlswbWA7XHJcbmNvbnN0IG1jeWFuID0gKHN0cikgPT4gYFxceDFiWzk2bSR7c3RyfVxceDFiWzBtYDtcclxuY29uc3QgbWdyZWVuID0gKHN0cikgPT4gYFxceDFiWzkybSR7c3RyfVxceDFiWzBtYDtcclxuY29uc3QgbW1hZ2VudGEgPSAoc3RyKSA9PiBgXFx4MWJbMDs5NW0ke3N0cn1cXHgxYlswbWA7XHJcbmNvbnN0IG1yZWQgPSAoc3RyKSA9PiBgXFx4MWJbOTFtJHtzdHJ9XFx4MWJbMG1gO1xyXG5jb25zdCBteWVsbG93ID0gKHN0cikgPT4gYFxceDFiWzkzbSR7c3RyfVxceDFiWzBtYDtcclxuXHJcbmNvbnN0IGJsdWUgPSAoc3RyKSA9PiBgXFx4MWJbMzRtJHtzdHJ9XFx4MWJbMG1gO1xyXG5jb25zdCBjeWFuID0gKHN0cikgPT4gYFxceDFiWzM2bSR7c3RyfVxceDFiWzBtYDtcclxuY29uc3QgZ3JheSA9IChzdHIpID0+IGBcXHgxYls5MG0ke3N0cn1cXHgxYlswbWA7XHJcbmNvbnN0IGdyZWVuID0gKHN0cikgPT4gYFxceDFiWzMybSR7c3RyfVxceDFiWzBtYDtcclxuY29uc3QgbWFnZW50YSA9IChzdHIpID0+IGBcXHgxYlswOzM1bSR7c3RyfVxceDFiWzBtYDtcclxuY29uc3Qgbm9ybWFsID0gKHN0cikgPT4gYFxceDFiWzk4bSR7c3RyfVxceDFiWzBtYDtcclxuY29uc3QgcmVkID0gKHN0cikgPT4gYFxceDFiWzMxbSR7c3RyfVxceDFiWzBtYDtcclxuY29uc3Qgd2hpdGUgPSAoc3RyKSA9PiBgXFx4MWJbMTs5OG0ke3N0cn1cXHgxYlswbWA7XHJcbmNvbnN0IHllbGxvdyA9IChzdHIpID0+IGBcXHgxYlszM20ke3N0cn1cXHgxYlswbWA7XHJcblxyXG5leHBvcnQgY29uc3QgY29sb3JzID0ge1xyXG5cdGJibHVlLFxyXG5cdGJjeWFuLFxyXG5cdGJncmVlbixcclxuXHRicmVkLFxyXG5cdGJ2aW9sZXQsXHJcblx0bGN5YW4sXHJcblx0bGdyYXksXHJcblx0bGdyZWVuLFxyXG5cdGxtYWdlbnRhLFxyXG5cdGx5ZWxsb3csXHJcblx0bWJsdWUsXHJcblx0bWN5YW4sXHJcblx0bWdyZWVuLFxyXG5cdG1tYWdlbnRhLFxyXG5cdG1yZWQsXHJcblx0bXllbGxvdyxcclxuXHRibHVlLFxyXG5cdGN5YW4sXHJcblx0Z3JheSxcclxuXHRncmVlbixcclxuXHRtYWdlbnRhLFxyXG5cdG5vcm1hbCxcclxuXHRyZWQsXHJcblx0d2hpdGUsXHJcblx0eWVsbG93LFxyXG59O1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGNvdW50TGVhdmVzKHQsIG9iaikge1xyXG5cdGlmICghb2JqIHx8IHR5cGVvZiBvYmogPT09IFwic3RyaW5nXCIpIHJldHVybiAwO1xyXG5cdGlmIChvYmogaW5zdGFuY2VvZiB0KSByZXR1cm4gMTtcclxuXHRpZiAoQXJyYXkuaXNBcnJheShvYmopKVxyXG5cdFx0cmV0dXJuIG9iai5yZWR1Y2UoKHN1bSwgaXRlbSkgPT4gc3VtICsgY291bnRMZWF2ZXModCwgaXRlbSksIDApO1xyXG5cdGVsc2VcclxuXHRcdHJldHVybiBPYmplY3QudmFsdWVzKG9iaikucmVkdWNlKFxyXG5cdFx0XHQoc3VtLCBpdGVtKSA9PiBzdW0gKyBjb3VudExlYXZlcyh0LCBpdGVtKSxcclxuXHRcdFx0MCxcclxuXHRcdCk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBkZWxldGVFeHRyYUZsYWdzKGFyZ3MpIHtcclxuXHRyZXR1cm4gYXJncy5maWx0ZXIoKGFyZykgPT4gIWFyZy5zdGFydHNXaXRoKFwiLS1cIikpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gY21kKC4uLmNvbW1hbmQpIHtcclxuXHRyZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG5cdFx0ZXhlYyhcclxuXHRcdFx0Y29tbWFuZC5qb2luKFwiIFwiKSxcclxuXHRcdFx0eyBtYXhCdWZmZXI6IDEwMjQgKiAxMDI0ICogMTAgfSxcclxuXHRcdFx0KGVycm9yLCBzdGRvdXQsIHN0ZGVycikgPT4ge1xyXG5cdFx0XHRcdGlmIChlcnJvcikge1xyXG5cdFx0XHRcdFx0cmVqZWN0KGVycm9yKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0aWYgKHN0ZGVycikge1xyXG5cdFx0XHRcdFx0cmVqZWN0KHN0ZGVycik7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdHJlc29sdmUoc3Rkb3V0KTtcclxuXHRcdFx0fSxcclxuXHRcdCk7XHJcblx0fSk7XHJcbn1cclxuXHJcbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBleGVjUmFkb25CeXRlY29kZShieXRlY29kZSwgLi4uZmxhZ3MpIHtcclxuXHRpZiAoIWlzSGV4U3RyaW5nKGJ5dGVjb2RlKSkge1xyXG5cdFx0dGhyb3cgRXZhbEVycm9yKFwiaW52YWxpZCBoZXggc3RyaW5nXCIpO1xyXG5cdH0gZWxzZSB7XHJcblx0XHRjb25zdCBucHggPSBvcy50eXBlKCkgPT09IFwiV2luZG93c19OVFwiID8gXCJucHguY21kXCIgOiBcIm5weFwiO1xyXG5cdFx0cmV0dXJuIGNtZChucHgsIFwid2l0c2RrXCIsIFwicmFkb25cIiwgXCJkcnktcnVuXCIsIGJ5dGVjb2RlLCAuLi5mbGFncyk7XHJcblx0XHQvLyAuY2F0Y2goKGVycikgPT4ge1xyXG5cdFx0Ly8gICAgIGxldCBlcnJvck1lc3NhZ2UgPSBlcnIubWVzc2FnZS5zcGxpdCgnXFxuJykuc2xpY2UoMSkuam9pbignXFxuJykudHJpbSgpXHJcblx0XHQvLyAgICAgY29uc3QgZXJyb3JSZWdleCA9IC8uKl5lcnJvcjogKD88bWVzc2FnZT4uKikkLiovZ21cclxuXHRcdC8vICAgICBjb25zdCBtYXRjaGVkID0gZXJyb3JSZWdleC5leGVjKGVyci5tZXNzYWdlKVxyXG5cdFx0Ly8gICAgIGlmIChtYXRjaGVkKSB7XHJcblx0XHQvLyAgICAgICAgIGVycm9yTWVzc2FnZSA9IG1hdGNoZWQuZ3JvdXBzLm1lc3NhZ2VcclxuXHRcdC8vICAgICB9XHJcblx0XHQvLyAgICAgY29uc29sZS5sb2coZXJyb3JNZXNzYWdlIHx8IGVycilcclxuXHRcdC8vICAgICBjb25zb2xlLmVycm9yKGVycm9yTWVzc2FnZSB8fCBlcnIpXHJcblx0XHQvLyB9KVxyXG5cdH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGV4dHJhY3RGcm9tQXJncyhhcmdzLCBmbGFncykge1xyXG5cdGNvbnN0IGN1cmF0ZWQgPSB7fTtcclxuXHRpZiAoYXJncyAmJiBmbGFncykge1xyXG5cdFx0T2JqZWN0LmtleXMoZmxhZ3MpLmZvckVhY2goKGZsYWcpID0+IHtcclxuXHRcdFx0Y29uc3QgZmxhZ0luZGV4ID0gYXJncy5pbmRleE9mKGAtLSR7ZmxhZ31gKTtcclxuXHRcdFx0aWYgKGZsYWdJbmRleCA+PSAwKSB7XHJcblx0XHRcdFx0aWYgKGZsYWdzW2ZsYWddLnBhcmFtKSB7XHJcblx0XHRcdFx0XHRjdXJhdGVkW2ZsYWddID0gYXJnc1tmbGFnSW5kZXhdO1xyXG5cdFx0XHRcdFx0aWYgKCFhcmdzW2ZsYWdJbmRleCArIDFdIHx8IGFyZ3NbZmxhZ0luZGV4ICsgMV0uc3RhcnRzV2l0aChcIi0tXCIpKSB7XHJcblx0XHRcdFx0XHRcdHRocm93IEVycm9yKGBNaXNzaW5nIHJlcXVpcmVkIHBhcmFtZXRlciBmb3IgLS0ke2ZsYWd9YCk7XHJcblx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRjdXJhdGVkW2ZsYWddID0gYXJnc1tmbGFnSW5kZXggKyAxXTtcclxuXHRcdFx0XHRcdFx0YXJncy5zcGxpY2UoZmxhZ0luZGV4LCAyKTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0Y3VyYXRlZFtmbGFnXSA9IHRydWU7XHJcblx0XHRcdFx0XHRhcmdzLnNwbGljZShmbGFnSW5kZXgsIDEpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fSk7XHJcblx0fVxyXG5cdHJldHVybiBbYXJncywgY3VyYXRlZF07XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBmcm9tSGV4U3RyaW5nKGhleFN0cmluZykge1xyXG5cdGlmIChoZXhTdHJpbmcuc3RhcnRzV2l0aChcIjB4XCIpKSBoZXhTdHJpbmcgPSBoZXhTdHJpbmcuc2xpY2UoMik7XHJcblx0cmV0dXJuIFVpbnQ4QXJyYXkuZnJvbShcclxuXHRcdGhleFN0cmluZy5tYXRjaCgvLnsxLDJ9L2cpLm1hcCgoYnl0ZSkgPT4gcGFyc2VJbnQoYnl0ZSwgMTYpKSxcclxuXHQpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gaXBJc1ByaXZhdGVPckxvY2FsaG9zdChpcCkge1xyXG5cdGlmIChpcC5zdWJzdHJpbmcoMCwgNykgPT09IFwiOjpmZmZmOlwiKSB7XHJcblx0XHRpcCA9IGlwLnN1YnN0cmluZyg3KTtcclxuXHR9XHJcblxyXG5cdGlmIChuZXQuaXNJUHY0KGlwKSkge1xyXG5cdFx0Ly8gY2hlY2sgbG9jYWxob3N0XHJcblx0XHRpZiAoaXAgPT09IFwiMTI3LjAuMC4xXCIpIHtcclxuXHRcdFx0cmV0dXJuIHRydWU7XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gICAgICAgICAxMC4wLjAuMCAtIDEwLjI1NS4yNTUuMjU1ICAgICAgICB8fCAgIDE3Mi4xNi4wLjAgLSAxNzIuMzEuMjU1LjI1NSAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgICAgMTkyLjE2OC4wLjAgLSAxOTIuMTY4LjI1NS4yNTVcclxuXHRcdHJldHVybiAoXHJcblx0XHRcdC9eKDEwKVxcLiguKilcXC4oLiopXFwuKC4qKSQvLnRlc3QoaXApIHx8XHJcblx0XHRcdC9eKDE3MilcXC4oMVs2LTldfDJbMC05XXwzWzAtMV0pXFwuKC4qKVxcLiguKikkLy50ZXN0KGlwKSB8fFxyXG5cdFx0XHQvXigxOTIpXFwuKDE2OClcXC4oLiopXFwuKC4qKSQvLnRlc3QoaXApXHJcblx0XHQpO1xyXG5cdH1cclxuXHJcblx0Ly8gZWxzZTogaXAgaXMgSVB2NlxyXG5cdGNvbnN0IGZpcnN0V29yZCA9IGlwLnNwbGl0KFwiOlwiKS5maW5kKChlbCkgPT4gISFlbCk7IC8vIGdldCBmaXJzdCBub3QgZW1wdHkgd29yZFxyXG5cclxuXHQvLyBlcXVpdmFsZW50IG9mIDEyNy4wLjAuMSBpbiBJUHY2XHJcblx0aWYgKGlwID09PSBcIjo6MVwiKSByZXR1cm4gdHJ1ZTtcclxuXHQvLyBUaGUgb3JpZ2luYWwgSVB2NiBTaXRlIExvY2FsIGFkZHJlc3NlcyAoZmVjMDo6LzEwKSBhcmUgZGVwcmVjYXRlZC4gUmFuZ2U6IGZlYzAgLSBmZWZmXHJcblx0ZWxzZSBpZiAoL15mZVtjLWZdWzAtZl0kLy50ZXN0KGZpcnN0V29yZCkpIHJldHVybiB0cnVlO1xyXG5cdC8vIFRoZXNlIGRheXMgVW5pcXVlIExvY2FsIEFkZHJlc3NlcyAoVUxBKSBhcmUgdXNlZCBpbiBwbGFjZSBvZiBTaXRlIExvY2FsLlxyXG5cdC8vIFJhbmdlOiBmYzAwIC0gZmNmZlxyXG5cdGVsc2UgaWYgKC9eZmNbMC1mXXsyfSQvLnRlc3QoZmlyc3RXb3JkKSkgcmV0dXJuIHRydWU7XHJcblx0Ly8gUmFuZ2U6IGZkMDAgLSBmY2ZmXHJcblx0ZWxzZSBpZiAoL15mZFswLWZdezJ9JC8udGVzdChmaXJzdFdvcmQpKSByZXR1cm4gdHJ1ZTtcclxuXHQvLyBMaW5rIGxvY2FsIGFkZHJlc3NlcyAocHJlZml4ZWQgd2l0aCBmZTgwKSBhcmUgbm90IHJvdXRhYmxlXHJcblx0ZWxzZSBpZiAoZmlyc3RXb3JkID09PSBcImZlODBcIikgcmV0dXJuIHRydWU7XHJcblx0Ly8gRGlzY2FyZCBQcmVmaXhcclxuXHRlbHNlIGlmIChmaXJzdFdvcmQgPT09IFwiMTAwXCIpIHJldHVybiB0cnVlO1xyXG5cclxuXHQvLyBBbnkgb3RoZXIgSVAgYWRkcmVzcyBpcyBub3QgVW5pcXVlIExvY2FsIEFkZHJlc3MgKFVMQSlcclxuXHRyZXR1cm4gZmFsc2U7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBpc0hleFN0cmluZ09mTGVuZ3RoKHN0ciwgbGVuZ3RoKSB7XHJcblx0cmV0dXJuIChcclxuXHRcdChpc0hleFN0cmluZyhzdHIpICYmXHJcblx0XHRcdCgoc3RyLnN0YXJ0c1dpdGgoXCIweFwiKSAmJiBzdHIuc2xpY2UoMikubGVuZ3RoID09PSBsZW5ndGggKiAyKSB8fFxyXG5cdFx0XHRcdHN0ci5sZW5ndGggPT09IGxlbmd0aCAqIDIpKSB8fFxyXG5cdFx0aXNXaWxkY2FyZChzdHIpXHJcblx0KTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGlzSGV4U3RyaW5nKHN0cikge1xyXG5cdHJldHVybiAoXHJcblx0XHQodHlwZW9mIHN0ciA9PT0gXCJzdHJpbmdcIiAmJlxyXG5cdFx0XHQoKHN0ci5zdGFydHNXaXRoKFwiMHhcIikgJiYgL15bYS1mQS1GMC05XSskL2kudGVzdChzdHIuc2xpY2UoMikpKSB8fFxyXG5cdFx0XHRcdC9eW2EtZkEtRjAtOV0rJC9pLnRlc3Qoc3RyKSkpIHx8XHJcblx0XHRpc1dpbGRjYXJkKHN0cilcclxuXHQpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gdG9IZXhTdHJpbmcoYnVmZmVyLCBwcmVmaXgweCA9IGZhbHNlKSB7XHJcblx0aWYgKGJ1ZmZlciBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpIGJ1ZmZlciA9IEJ1ZmZlci5mcm9tKGJ1ZmZlcik7XHJcblx0cmV0dXJuIChcclxuXHRcdChwcmVmaXgweCA/IFwiMHhcIiA6IFwiXCIpICtcclxuXHRcdEFycmF5LnByb3RvdHlwZS5tYXBcclxuXHRcdFx0LmNhbGwoYnVmZmVyLCAoeCkgPT4gYDAwJHt4LnRvU3RyaW5nKDE2KX1gLnNsaWNlKC0yKSlcclxuXHRcdFx0LmpvaW4oXCJcIilcclxuXHRcdFx0Lm1hdGNoKC9bYS1mQS1GMC05XXsyfS9nKVxyXG5cdFx0XHQuam9pbihcIlwiKVxyXG5cdCk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVVSTCh1cmwpIHtcclxuXHR0cnkge1xyXG5cdFx0Y29uc3QgcGFyc2VkVXJsID0gbmV3IFVSTCh1cmwpO1xyXG5cdFx0cmV0dXJuIFtcclxuXHRcdFx0YCR7cGFyc2VkVXJsLnByb3RvY29sfS8vYCxcclxuXHRcdFx0cGFyc2VkVXJsLmhvc3QsXHJcblx0XHRcdHBhcnNlZFVybC5wYXRobmFtZS5zbGljZSgxKSxcclxuXHRcdFx0cGFyc2VkVXJsLnNlYXJjaC5zbGljZSgxKSxcclxuXHRcdF07XHJcblx0fSBjYXRjaCB7XHJcblx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKGBJbnZhbGlkIFVSTCB3YXMgcHJvdmlkZWQ6ICR7dXJsfWApO1xyXG5cdH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHNob3dVc2FnZShjbWQsIG1vZHVsZSkge1xyXG5cdHNob3dVc2FnZUhlYWRsaW5lKGNtZCk7XHJcblx0c2hvd1VzYWdlT3B0aW9ucyh7IC4uLm1vZHVsZT8uZmxhZ3MgfSk7XHJcblx0c2hvd1VzYWdlRmxhZ3MoeyAuLi5tb2R1bGU/LmZsYWdzIH0pO1xyXG5cdHNob3dVc2FnZVJvdXRlcih7IC4uLm1vZHVsZT8ucm91dGVyIH0pO1xyXG5cdHNob3dVc2FnZUVudmFycyh7IC4uLm1vZHVsZT8uZW52YXJzIH0pO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gc2hvd1VzYWdlUm91dGVyKHJvdXRlcikge1xyXG5cdGNvbnN0IGNtZHMgPSBPYmplY3QuZW50cmllcyhyb3V0ZXIpO1xyXG5cdGlmIChjbWRzLmxlbmd0aCA+IDApIHtcclxuXHRcdGNvbnNvbGUuaW5mbyhcIlxcblNVQkNPTU1BTkRTOlwiKTtcclxuXHRcdGNvbnN0IG1heExlbmd0aCA9IE1hdGgubWF4KC4uLmNtZHMubWFwKChbY21kXSkgPT4gY21kLmxlbmd0aCkpO1xyXG5cdFx0Y21kcy5mb3JFYWNoKChjbWQpID0+IHtcclxuXHRcdFx0Y29uc29sZS5pbmZvKFxyXG5cdFx0XHRcdFwiICBcIixcclxuXHRcdFx0XHRgJHtjbWRbMF19JHtcIiBcIi5yZXBlYXQobWF4TGVuZ3RoIC0gY21kWzBdLmxlbmd0aCl9YCxcclxuXHRcdFx0XHRcIiAgXCIsXHJcblx0XHRcdFx0Y21kWzFdLmhpbnQsXHJcblx0XHRcdCk7XHJcblx0XHR9KTtcclxuXHR9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBzaG93VXNhZ2VFcnJvcihjbWQsIHN1YmNtZCwgbW9kdWxlLCBlcnJvciwgZmxhZ3MpIHtcclxuXHRzaG93VXNhZ2VTdWJjb21tYW5kKGNtZCwgc3ViY21kLCBtb2R1bGUsIGVycm9yKTtcclxuXHRpZiAoZXJyb3IpIHtcclxuXHRcdGNvbnNvbGUuaW5mbyhcIlxcbkVSUk9SOlwiKTtcclxuXHRcdGlmIChmbGFncz8uZGVidWcpIHtcclxuXHRcdFx0Y29uc29sZS5lcnJvcihlcnJvcik7XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHRjb25zb2xlLmVycm9yKGNvbG9ycy5yZWQoZXJyb3I/LnN0YWNrPy5zcGxpdChcIlxcblwiKVswXSB8fCBlcnJvcikpO1xyXG5cdFx0fVxyXG5cdH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHNob3dVc2FnZUVudmFycyhlbnZhcnMpIHtcclxuXHRpZiAoZW52YXJzKSB7XHJcblx0XHRlbnZhcnMgPSBPYmplY3QuZW50cmllcyhlbnZhcnMpO1xyXG5cdFx0aWYgKGVudmFycy5sZW5ndGggPiAwKSB7XHJcblx0XHRcdGNvbnNvbGUuaW5mbyhcIlxcbkVOVkFSUzpcIik7XHJcblx0XHRcdGNvbnN0IG1heFdpZHRoID0gTWF0aC5tYXgoLi4uZW52YXJzLm1hcCgoW2VudmFyXSkgPT4gZW52YXIubGVuZ3RoKSk7XHJcblx0XHRcdGVudmFycy5mb3JFYWNoKChbZW52YXIsIGhpbnRdKSA9PiB7XHJcblx0XHRcdFx0aWYgKGVudmFyLnRvVXBwZXJDYXNlKCkuaW5kZXhPZihcIktFWVwiKSA8IDAgJiYgcHJvY2Vzcy5lbnZbZW52YXJdKSB7XHJcblx0XHRcdFx0XHRjb25zb2xlLmluZm8oXHJcblx0XHRcdFx0XHRcdFwiICBcIixcclxuXHRcdFx0XHRcdFx0YCR7eWVsbG93KGVudmFyLnRvVXBwZXJDYXNlKCkpfSR7XCIgXCIucmVwZWF0KG1heFdpZHRoIC0gZW52YXIubGVuZ3RoKX1gLFxyXG5cdFx0XHRcdFx0XHRgID0+IFNldHRsZWQgdG8gXCIke215ZWxsb3cocHJvY2Vzcy5lbnZbZW52YXJdKX1cImAsXHJcblx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRjb25zb2xlLmluZm8oXHJcblx0XHRcdFx0XHRcdFwiICBcIixcclxuXHRcdFx0XHRcdFx0YCR7eWVsbG93KGVudmFyLnRvVXBwZXJDYXNlKCkpfSR7XCIgXCIucmVwZWF0KG1heFdpZHRoIC0gZW52YXIubGVuZ3RoKX1gLFxyXG5cdFx0XHRcdFx0XHRgICR7aGludH1gLFxyXG5cdFx0XHRcdFx0KTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH0pO1xyXG5cdFx0fVxyXG5cdH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHNob3dVc2FnZUZsYWdzKGZsYWdzKSB7XHJcblx0aWYgKGZsYWdzKSB7XHJcblx0XHRmbGFncyA9IE9iamVjdC5lbnRyaWVzKGZsYWdzKVxyXG5cdFx0XHQuZmlsdGVyKChbLCBmbGFnXSkgPT4gIWZsYWc/LnBhcmFtKVxyXG5cdFx0XHQuc29ydCgoW2FdLCBbYl0pID0+IHtcclxuXHRcdFx0XHRpZiAoYSA8IGIpIHJldHVybiAtMTtcclxuXHRcdFx0XHRlbHNlIGlmIChhID4gYikgcmV0dXJuIDE7XHJcblx0XHRcdFx0ZWxzZSByZXR1cm4gMDtcclxuXHRcdFx0fSk7XHJcblx0XHRpZiAoZmxhZ3MubGVuZ3RoID4gMCkge1xyXG5cdFx0XHRjb25zb2xlLmluZm8oXCJcXG5GTEFHUzpcIik7XHJcblx0XHRcdGNvbnN0IG1heExlbmd0aCA9IE1hdGgubWF4KFxyXG5cdFx0XHRcdC4uLmZsYWdzXHJcblx0XHRcdFx0XHQuZmlsdGVyKChbLCB7IGhpbnQgfV0pID0+IGhpbnQpXHJcblx0XHRcdFx0XHQubWFwKChba2V5LCB7IHBhcmFtIH1dKSA9PlxyXG5cdFx0XHRcdFx0XHRwYXJhbSA/IGtleS5sZW5ndGggKyBwYXJhbS5sZW5ndGggKyAzIDoga2V5Lmxlbmd0aCxcclxuXHRcdFx0XHRcdCksXHJcblx0XHRcdCk7XHJcblx0XHRcdGZsYWdzLmZvckVhY2goKGZsYWcpID0+IHtcclxuXHRcdFx0XHRjb25zdCBzdHIgPSBgJHtmbGFnWzBdfSR7ZmxhZ1sxXS5wYXJhbSA/IGdyYXkoYCA8JHtmbGFnWzFdLnBhcmFtfT5gKSA6IFwiXCJ9YDtcclxuXHRcdFx0XHRpZiAoZmxhZ1sxXS5oaW50KSB7XHJcblx0XHRcdFx0XHRjb25zb2xlLmluZm8oXHJcblx0XHRcdFx0XHRcdFwiICBcIixcclxuXHRcdFx0XHRcdFx0YC0tJHtzdHJ9JHtcIiBcIi5yZXBlYXQobWF4TGVuZ3RoIC0gY29sb3JzdHJpcChzdHIpLmxlbmd0aCl9YCxcclxuXHRcdFx0XHRcdFx0XCIgIFwiLFxyXG5cdFx0XHRcdFx0XHRmbGFnWzFdLmhpbnQsXHJcblx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSk7XHJcblx0XHR9XHJcblx0fVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gc2hvd1VzYWdlSGVhZGxpbmUoY21kLCBzdWJjbWQsIG1vZHVsZSkge1xyXG5cdGNvbnNvbGUuaW5mbyhcIlVTQUdFOlwiKTtcclxuXHRpZiAoc3ViY21kKSB7XHJcblx0XHRsZXQgcGFyYW1zID0gbW9kdWxlLnJvdXRlcltzdWJjbWRdPy5wYXJhbXM7XHJcblx0XHQvLyBjb25zdCBvcHRpb25zID0gbW9kdWxlLnJvdXRlcltzdWJjbWRdPy5vcHRpb25zXHJcblx0XHRpZiAocGFyYW1zKSB7XHJcblx0XHRcdGNvbnN0IG9wdGlvbmFsaXplID0gKHN0cikgPT5cclxuXHRcdFx0XHRzdHIuZW5kc1dpdGgoXCIgLi4uXVwiKVxyXG5cdFx0XHRcdFx0PyBgWzwke3N0ci5zbGljZSgxLCAtNSl9PiAuLi5dYFxyXG5cdFx0XHRcdFx0OiBzdHJbMF0gPT09IFwiW1wiXHJcblx0XHRcdFx0XHRcdD8gYFs8JHtzdHIuc2xpY2UoMSwgLTEpfT5dYFxyXG5cdFx0XHRcdFx0XHQ6IGA8JHtzdHJ9PmA7XHJcblx0XHRcdGlmIChBcnJheS5pc0FycmF5KHBhcmFtcykpIHtcclxuXHRcdFx0XHRwYXJhbXMgPSBgJHtwYXJhbXMubWFwKChwYXJhbSkgPT4gb3B0aW9uYWxpemUocGFyYW0pKS5qb2luKFwiIFwiKX0gYDtcclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRwYXJhbXMgPSBvcHRpb25hbGl6ZShwYXJhbXMpO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0XHRjb25zb2xlLmluZm8oXHJcblx0XHRcdGAgICAke2NvbG9ycy53aGl0ZShgbnB4IHdpdHNkayAke2NtZH1gKX0gJHtjb2xvcnMud2hpdGUoc3ViY21kKX0gJHtwYXJhbXMgPyBgJHtjb2xvcnMuZ3JlZW4ocGFyYW1zKX0gYCA6IFwiXCJ9W09QVElPTlNdIFtGTEFHU11gLFxyXG5cdFx0KTtcclxuXHRcdGlmIChtb2R1bGU/LnJvdXRlcltzdWJjbWRdPy5oaW50KSB7XHJcblx0XHRcdGNvbnNvbGUuaW5mbyhcIlxcbkRFU0NSSVBUSU9OOlwiKTtcclxuXHRcdFx0Y29uc29sZS5pbmZvKGAgICAke21vZHVsZS5yb3V0ZXJbc3ViY21kXS5oaW50fWApO1xyXG5cdFx0fVxyXG5cdH0gZWxzZSB7XHJcblx0XHRjb25zb2xlLmluZm8oXHJcblx0XHRcdGAgICAke2NvbG9ycy53aGl0ZShgbnB4IHdpdHNkayAke2NtZH1gKX0gPFNVQkNPTU1BTkQ+IC4uLiBbT1BUSU9OU10gW0ZMQUdTXWAsXHJcblx0XHQpO1xyXG5cdH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHNob3dVc2FnZU9wdGlvbnMob3B0aW9ucykge1xyXG5cdG9wdGlvbnMgPSBPYmplY3QuZW50cmllcyhvcHRpb25zKVxyXG5cdFx0LmZpbHRlcigoWywgb3B0aW9uXSkgPT4gb3B0aW9uPy5wYXJhbSlcclxuXHRcdC5zb3J0KChbYV0sIFtiXSkgPT4ge1xyXG5cdFx0XHRpZiAoYSA8IGIpIHJldHVybiAtMTtcclxuXHRcdFx0ZWxzZSBpZiAoYSA+IGIpIHJldHVybiAxO1xyXG5cdFx0XHRlbHNlIHJldHVybiAwO1xyXG5cdFx0fSk7XHJcblx0aWYgKG9wdGlvbnMubGVuZ3RoID4gMCkge1xyXG5cdFx0Y29uc29sZS5pbmZvKFwiXFxuT1BUSU9OUzpcIik7XHJcblx0XHRjb25zdCBtYXhMZW5ndGggPSBvcHRpb25zXHJcblx0XHRcdC5tYXAoKG9wdGlvbikgPT5cclxuXHRcdFx0XHRvcHRpb25bMV0ucGFyYW1cclxuXHRcdFx0XHRcdD8gb3B0aW9uWzFdLnBhcmFtLmxlbmd0aCArIG9wdGlvblswXS5sZW5ndGggKyAzXHJcblx0XHRcdFx0XHQ6IG9wdGlvblswXS5sZW5ndGgsXHJcblx0XHRcdClcclxuXHRcdFx0LnJlZHVjZSgocHJldiwgY3VycikgPT4gKGN1cnIgPiBwcmV2ID8gY3VyciA6IHByZXYpKTtcclxuXHRcdG9wdGlvbnMuZm9yRWFjaCgob3B0aW9uKSA9PiB7XHJcblx0XHRcdGlmIChvcHRpb25bMV0uaGludCkge1xyXG5cdFx0XHRcdGNvbnN0IHN0ciA9IGAke29wdGlvblswXX0ke29wdGlvblsxXS5wYXJhbSA/IGdyYXkoYCA8JHtvcHRpb25bMV0ucGFyYW19PmApIDogXCJcIn1gO1xyXG5cdFx0XHRcdGNvbnNvbGUuaW5mbyhcclxuXHRcdFx0XHRcdFwiICBcIixcclxuXHRcdFx0XHRcdGAtLSR7c3RyfSR7XCIgXCIucmVwZWF0KG1heExlbmd0aCAtIGNvbG9yc3RyaXAoc3RyKS5sZW5ndGgpfWAsXHJcblx0XHRcdFx0XHRcIiAgXCIsXHJcblx0XHRcdFx0XHRvcHRpb25bMV0uaGludCxcclxuXHRcdFx0XHQpO1xyXG5cdFx0XHR9XHJcblx0XHR9KTtcclxuXHR9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBzaG93VXNhZ2VTdWJjb21tYW5kKGNtZCwgc3ViY21kLCBtb2R1bGUpIHtcclxuXHRzaG93VXNhZ2VIZWFkbGluZShjbWQsIHN1YmNtZCwgbW9kdWxlKTtcclxuXHRzaG93VXNhZ2VPcHRpb25zKHsgLi4ubW9kdWxlPy5mbGFncywgLi4ubW9kdWxlLnJvdXRlcltzdWJjbWRdPy5vcHRpb25zIH0pO1xyXG5cdHNob3dVc2FnZUZsYWdzKHsgLi4ubW9kdWxlPy5mbGFncywgLi4ubW9kdWxlLnJvdXRlcltzdWJjbWRdPy5vcHRpb25zIH0pO1xyXG5cdHNob3dVc2FnZUVudmFycyhtb2R1bGUucm91dGVyW3N1YmNtZF0/LmVudmFycyB8fCBtb2R1bGU/LmVudmFycyk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBzaG93VmVyc2lvbigpIHtcclxuXHRjb25zb2xlLmluZm8oXHJcblx0XHRgJHtjb2xvcnMubWN5YW4oYFdpdG5ldCBTREsgdiR7cmVxdWlyZShcIi4uLy4uL3BhY2thZ2UuanNvblwiKS52ZXJzaW9ufWApfWAsXHJcblx0KTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdldFdpbGRjYXJkc0NvdW50RnJvbVN0cmluZyhzdHIpIHtcclxuXHRsZXQgbWF4QXJnc0luZGV4ID0gMDtcclxuXHRpZiAoc3RyICYmIHR5cGVvZiBzdHIgPT09IFwic3RyaW5nXCIpIHtcclxuXHRcdGxldCBtYXRjaDtcclxuXHRcdGNvbnN0IHJlZ2V4cCA9IC9cXFxcXFxkXFxcXC9nO1xyXG5cdFx0d2hpbGUgKChtYXRjaCA9IHJlZ2V4cC5leGVjKHN0cikpICE9PSBudWxsKSB7XHJcblx0XHRcdGNvbnN0IGFyZ3NJbmRleCA9IHBhcnNlSW50KG1hdGNoWzBdWzFdLCAxMCkgKyAxO1xyXG5cdFx0XHRpZiAoYXJnc0luZGV4ID4gbWF4QXJnc0luZGV4KSBtYXhBcmdzSW5kZXggPSBhcmdzSW5kZXg7XHJcblx0XHR9XHJcblx0fVxyXG5cdHJldHVybiBtYXhBcmdzSW5kZXg7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBjaGVja1JwY1dpbGRjYXJkcyh3aWxkY2FyZHMpIHtcclxuXHRpZiAodHlwZW9mIHdpbGRjYXJkcyA9PT0gXCJvYmplY3RcIikge1xyXG5cdFx0T2JqZWN0LnZhbHVlcyh3aWxkY2FyZHMpLmZvckVhY2goKHdpbGRjYXJkKSA9PiB7XHJcblx0XHRcdGlmIChBcnJheS5pc0FycmF5KHdpbGRjYXJkKSlcclxuXHRcdFx0XHR3aWxkY2FyZC5mb3JFYWNoKChpdGVtKSA9PiBjaGVja1JwY1dpbGRjYXJkcyhpdGVtKSk7XHJcblx0XHRcdGVsc2UgY2hlY2tScGNXaWxkY2FyZHMod2lsZGNhcmQpO1xyXG5cdFx0fSk7XHJcblx0fSBlbHNlIGlmIChBcnJheS5pc0FycmF5KHdpbGRjYXJkcykpIHtcclxuXHRcdHdpbGRjYXJkcy5mb3JFYWNoKCh3aWxkY2FyZCkgPT4gY2hlY2tScGNXaWxkY2FyZHMod2lsZGNhcmQpKTtcclxuXHR9IGVsc2UgaWYgKHR5cGVvZiB3aWxkY2FyZHMgPT09IFwic3RyaW5nXCIpIHtcclxuXHRcdGlmIChpc1dpbGRjYXJkKHdpbGRjYXJkcykpIHtcclxuXHRcdFx0Y29uc3QgY2hhciA9IHdpbGRjYXJkcy5jaGFyQXQoMSk7XHJcblx0XHRcdGlmIChjaGFyIDwgXCIwXCIgfHwgY2hhciA+IFwiOVwiKSB7XHJcblx0XHRcdFx0dGhyb3cgRXJyb3IoXCJSUEM6IHdpbGRjYXJkcyBub3QgaW4gcmFuZ2UgWzAgLi4gOV1cIik7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHR9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBpc1dpbGRjYXJkKHN0cikge1xyXG5cdHJldHVybiBzdHIubGVuZ3RoID09PSAzICYmIC9cXFxcXFxkXFxcXC9nLnRlc3Qoc3RyKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHJlcGxhY2VXaWxkY2FyZHMob2JqLCBhcmdzKSB7XHJcblx0aWYgKGFyZ3MubGVuZ3RoID4gMTApIGFyZ3MgPSBhcmdzLnNsaWNlKDAsIDEwKTtcclxuXHRpZiAob2JqICYmIHR5cGVvZiBvYmogPT09IFwic3RyaW5nXCIpIHtcclxuXHRcdGZvciAobGV0IGFyZ0luZGV4ID0gMDsgYXJnSW5kZXggPCBhcmdzLmxlbmd0aDsgYXJnSW5kZXgrKykge1xyXG5cdFx0XHRjb25zdCB3aWxkY2FyZCA9IGBcXFxcJHthcmdJbmRleH1cXFxcYDtcclxuXHRcdFx0b2JqID0gb2JqLnJlcGxhY2VBbGwod2lsZGNhcmQsIGFyZ3NbYXJnSW5kZXhdKTtcclxuXHRcdH1cclxuXHR9IGVsc2UgaWYgKG9iaiAmJiBBcnJheS5pc0FycmF5KG9iaikpIHtcclxuXHRcdG9iaiA9IG9iai5tYXAoKHZhbHVlKSA9PlxyXG5cdFx0XHR0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIgfHwgQXJyYXkuaXNBcnJheSh2YWx1ZSlcclxuXHRcdFx0XHQ/IHJlcGxhY2VXaWxkY2FyZHModmFsdWUsIGFyZ3MpXHJcblx0XHRcdFx0OiB2YWx1ZSxcclxuXHRcdCk7XHJcblx0fSBlbHNlIGlmIChvYmogJiYgdHlwZW9mIG9iaiA9PT0gXCJvYmplY3RcIikge1xyXG5cdFx0b2JqID0gcmVwbGFjZU9iamVjdFdpbGRjYXJkcyhvYmosIGFyZ3MpO1xyXG5cdH1cclxuXHRyZXR1cm4gb2JqO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gcmVwbGFjZU9iamVjdFdpbGRjYXJkcyhvYmosIGFyZ3MpIHtcclxuXHRyZXR1cm4gT2JqZWN0LmZyb21FbnRyaWVzKFxyXG5cdFx0T2JqZWN0LmVudHJpZXMob2JqKS5tYXAoKFtrZXksIHZhbHVlXSkgPT4ge1xyXG5cdFx0XHRmb3IgKGxldCBhcmdJbmRleCA9IDA7IGFyZ0luZGV4IDwgYXJncy5sZW5ndGg7IGFyZ0luZGV4KyspIHtcclxuXHRcdFx0XHRjb25zdCB3aWxkY2FyZCA9IGBcXFxcJHthcmdJbmRleH1cXFxcYDtcclxuXHRcdFx0XHRrZXkgPSBrZXkucmVwbGFjZUFsbCh3aWxkY2FyZCwgYXJnc1thcmdJbmRleF0pO1xyXG5cdFx0XHRcdHZhbHVlID0gcmVwbGFjZVdpbGRjYXJkcyh2YWx1ZSwgYXJncyk7XHJcblx0XHRcdH1cclxuXHRcdFx0cmV0dXJuIFtrZXksIHZhbHVlXTtcclxuXHRcdH0pLFxyXG5cdCk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBzcGxpY2VXaWxkY2FyZChvYmosIGFyZ0luZGV4LCBhcmdWYWx1ZSwgYXJnc0NvdW50KSB7XHJcblx0aWYgKG9iaiAmJiB0eXBlb2Ygb2JqID09PSBcInN0cmluZ1wiKSB7XHJcblx0XHRjb25zdCB3aWxkY2FyZCA9IGBcXFxcJHthcmdJbmRleH1cXFxcYDtcclxuXHRcdG9iaiA9IG9iai5yZXBsYWNlQWxsKHdpbGRjYXJkLCBhcmdWYWx1ZSk7XHJcblx0XHRmb3IgKGxldCBqID0gYXJnSW5kZXggKyAxOyBqIDwgYXJnc0NvdW50OyBqKyspIHtcclxuXHRcdFx0b2JqID0gb2JqLnJlcGxhY2VBbGwoYFxcXFwke2p9XFxcXGAsIGBcXFxcJHtqIC0gMX1cXFxcYCk7XHJcblx0XHR9XHJcblx0fSBlbHNlIGlmIChvYmogJiYgQXJyYXkuaXNBcnJheShvYmopKSB7XHJcblx0XHRvYmogPSBvYmoubWFwKCh2YWx1ZSkgPT5cclxuXHRcdFx0dHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiIHx8IEFycmF5LmlzQXJyYXkodmFsdWUpXHJcblx0XHRcdFx0PyBzcGxpY2VXaWxkY2FyZCh2YWx1ZSwgYXJnSW5kZXgsIGFyZ1ZhbHVlLCBhcmdzQ291bnQpXHJcblx0XHRcdFx0OiB2YWx1ZSxcclxuXHRcdCk7XHJcblx0fVxyXG5cdHJldHVybiBvYmo7XHJcbn1cclxuXHJcbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB0b29sa2l0UnVuKHNldHRpbmdzLCBhcmdzKSB7XHJcblx0Y29uc3QgY21kID0gYCR7c2V0dGluZ3MucGF0aHMudG9vbGtpdEJpblBhdGh9ICR7YXJncy5qb2luKFwiIFwiKX1gO1xyXG5cdHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcblx0XHRleGVjKGNtZCwgeyBtYXhCdWZmZXI6IDEwMjQgKiAxMDI0ICogMTAgfSwgKGVycm9yLCBzdGRvdXQsIHN0ZGVycikgPT4ge1xyXG5cdFx0XHRpZiAoZXJyb3IpIHtcclxuXHRcdFx0XHRyZWplY3QoZXJyb3IpO1xyXG5cdFx0XHR9XHJcblx0XHRcdGlmIChzdGRlcnIpIHtcclxuXHRcdFx0XHRyZWplY3Qoc3RkZXJyKTtcclxuXHRcdFx0fVxyXG5cdFx0XHRyZXNvbHZlKHN0ZG91dCk7XHJcblx0XHR9KTtcclxuXHR9KTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHRvVXBwZXJDYW1lbENhc2Uoc3RyKSB7XHJcblx0cmV0dXJuIHN0clxyXG5cdFx0LnJlcGxhY2UoL1xcYihcXHcpL2csIChfbWF0Y2gsIGNhcHR1cmUpID0+IGNhcHR1cmUudG9VcHBlckNhc2UoKSlcclxuXHRcdC5yZXBsYWNlKC9cXHMrL2csIFwiXCIpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gdG9VdGYxNkJ5dGVzKHN0cikge1xyXG5cdGNvbnN0IGJ5dGVzID0gbmV3IFVpbnQ4QXJyYXkoc3RyLmxlbmd0aCAqIDIpO1xyXG5cdGZvciAobGV0IGkgPSAwOyBpIDwgc3RyLmxlbmd0aDsgaSsrKSB7XHJcblx0XHRjb25zdCBjb2RlID0gc3RyLmNoYXJDb2RlQXQoaSk7XHJcblx0XHRieXRlc1tpICogMl0gPSBjb2RlID4+IDg7XHJcblx0XHRieXRlc1tpICogMiArIDFdID0gY29kZSAmIDB4ZmY7XHJcblx0fVxyXG5cdHJldHVybiBieXRlcztcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHRvVXRmOEFycmF5KHN0cikge1xyXG5cdGNvbnN0IHV0ZjggPSBbXTtcclxuXHRmb3IgKGxldCBpID0gMDsgaSA8IHN0ci5sZW5ndGg7IGkrKykge1xyXG5cdFx0bGV0IGNoYXJjb2RlID0gc3RyLmNoYXJDb2RlQXQoaSk7XHJcblx0XHRpZiAoY2hhcmNvZGUgPCAweDgwKSB1dGY4LnB1c2goY2hhcmNvZGUpO1xyXG5cdFx0ZWxzZSBpZiAoY2hhcmNvZGUgPCAweDgwMCkge1xyXG5cdFx0XHR1dGY4LnB1c2goMHhjMCB8IChjaGFyY29kZSA+PiA2KSwgMHg4MCB8IChjaGFyY29kZSAmIDB4M2YpKTtcclxuXHRcdH0gZWxzZSBpZiAoY2hhcmNvZGUgPCAweGQ4MDAgfHwgY2hhcmNvZGUgPj0gMHhlMDAwKSB7XHJcblx0XHRcdHV0ZjgucHVzaChcclxuXHRcdFx0XHQweGUwIHwgKGNoYXJjb2RlID4+IDEyKSxcclxuXHRcdFx0XHQweDgwIHwgKChjaGFyY29kZSA+PiA2KSAmIDB4M2YpLFxyXG5cdFx0XHRcdDB4ODAgfCAoY2hhcmNvZGUgJiAweDNmKSxcclxuXHRcdFx0KTtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdC8vIHN1cnJvZ2F0ZSBwYWlyXHJcblx0XHRcdGkrKztcclxuXHRcdFx0Ly8gVVRGLTE2IGVuY29kZXMgMHgxMDAwMC0weDEwRkZGRiBieVxyXG5cdFx0XHQvLyBzdWJ0cmFjdGluZyAweDEwMDAwIGFuZCBzcGxpdHRpbmcgdGhlXHJcblx0XHRcdC8vIDIwIGJpdHMgb2YgMHgwLTB4RkZGRkYgaW50byB0d28gaGFsdmVzXHJcblx0XHRcdGNoYXJjb2RlID1cclxuXHRcdFx0XHQweDEwMDAwICsgKCgoY2hhcmNvZGUgJiAweDNmZikgPDwgMTApIHwgKHN0ci5jaGFyQ29kZUF0KGkpICYgMHgzZmYpKTtcclxuXHRcdFx0dXRmOC5wdXNoKFxyXG5cdFx0XHRcdDB4ZjAgfCAoY2hhcmNvZGUgPj4gMTgpLFxyXG5cdFx0XHRcdDB4ODAgfCAoKGNoYXJjb2RlID4+IDEyKSAmIDB4M2YpLFxyXG5cdFx0XHRcdDB4ODAgfCAoKGNoYXJjb2RlID4+IDYpICYgMHgzZiksXHJcblx0XHRcdFx0MHg4MCB8IChjaGFyY29kZSAmIDB4M2YpLFxyXG5cdFx0XHQpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHRyZXR1cm4gdXRmODtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHV0ZjhBcnJheVRvU3RyKGFycmF5KSB7XHJcblx0Y29uc3QgbGVuID0gYXJyYXkubGVuZ3RoO1xyXG5cdGxldCBvdXQgPSBcIlwiO1xyXG5cdGxldCBpID0gMDtcclxuXHRsZXQgYztcclxuXHRsZXQgY2hhcjIsIGNoYXIzO1xyXG5cdHdoaWxlIChpIDwgbGVuKSB7XHJcblx0XHRjID0gYXJyYXlbaSsrXTtcclxuXHRcdHN3aXRjaCAoYyA+PiA0KSB7XHJcblx0XHRcdGNhc2UgMDpcclxuXHRcdFx0Y2FzZSAxOlxyXG5cdFx0XHRjYXNlIDI6XHJcblx0XHRcdGNhc2UgMzpcclxuXHRcdFx0Y2FzZSA0OlxyXG5cdFx0XHRjYXNlIDU6XHJcblx0XHRcdGNhc2UgNjpcclxuXHRcdFx0Y2FzZSA3OlxyXG5cdFx0XHRcdC8vIDB4eHh4eHh4XHJcblx0XHRcdFx0b3V0ICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoYyk7XHJcblx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdGNhc2UgMTI6XHJcblx0XHRcdGNhc2UgMTM6XHJcblx0XHRcdFx0Ly8gMTEweCB4eHh4ICAgMTB4eCB4eHh4XHJcblx0XHRcdFx0Y2hhcjIgPSBhcnJheVtpKytdO1xyXG5cdFx0XHRcdG91dCArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKCgoYyAmIDB4MWYpIDw8IDYpIHwgKGNoYXIyICYgMHgzZikpO1xyXG5cdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRjYXNlIDE0OlxyXG5cdFx0XHRcdC8vIDExMTAgeHh4eCAgMTB4eCB4eHh4ICAxMHh4IHh4eHhcclxuXHRcdFx0XHRjaGFyMiA9IGFycmF5W2krK107XHJcblx0XHRcdFx0Y2hhcjMgPSBhcnJheVtpKytdO1xyXG5cdFx0XHRcdG91dCArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKFxyXG5cdFx0XHRcdFx0KChjICYgMHgwZikgPDwgMTIpIHwgKChjaGFyMiAmIDB4M2YpIDw8IDYpIHwgKChjaGFyMyAmIDB4M2YpIDw8IDApLFxyXG5cdFx0XHRcdCk7XHJcblx0XHRcdFx0YnJlYWs7XHJcblx0XHR9XHJcblx0fVxyXG5cdHJldHVybiBvdXQ7XHJcbn1cclxuXHJcbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBwcm9tcHQocXVlc3Rpb24pIHtcclxuXHRjb25zdCByZWFkbGluZUludGVyZmFjZSA9IHJlYWRsaW5lLmNyZWF0ZUludGVyZmFjZSh7XHJcblx0XHRpbnB1dDogcHJvY2Vzcy5zdGRpbixcclxuXHRcdG91dHB1dDogcHJvY2Vzcy5zdGRvdXQsXHJcblx0fSk7XHJcblx0cmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCBfcmVqZWN0KSA9PiB7XHJcblx0XHRyZWFkbGluZUludGVyZmFjZS5xdWVzdGlvbihgJHtxdWVzdGlvbn0gYCwgKHJlc3BvbnNlKSA9PiB7XHJcblx0XHRcdHJlYWRsaW5lSW50ZXJmYWNlLmNsb3NlKCk7XHJcblx0XHRcdHJlc29sdmUocmVzcG9uc2UudHJpbSgpKTtcclxuXHRcdH0pO1xyXG5cdH0pO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gcHJvbXB0ZXIocHJvbWlzZSkge1xyXG5cdGNvbnN0IGxvYWRpbmcgPSAoKCkgPT4ge1xyXG5cdFx0Y29uc3QgaCA9IFtcInxcIiwgXCIvXCIsIFwiLVwiLCBcIlxcXFxcIl07XHJcblx0XHRsZXQgaSA9IDA7XHJcblx0XHRyZXR1cm4gc2V0SW50ZXJ2YWwoKCkgPT4ge1xyXG5cdFx0XHRpID0gaSA+IDMgPyAwIDogaTtcclxuXHRcdFx0cHJvY2Vzcy5zdGRvdXQud3JpdGUoYFxcYlxcYiR7aFtpXX0gYCk7XHJcblx0XHRcdGkrKztcclxuXHRcdH0sIDUwKTtcclxuXHR9KSgpO1xyXG5cdHJldHVybiBwcm9taXNlLnRoZW4oKHJlc3VsdCkgPT4ge1xyXG5cdFx0Y2xlYXJJbnRlcnZhbChsb2FkaW5nKTtcclxuXHRcdHByb2Nlc3Muc3Rkb3V0LndyaXRlKFwiXFxiXFxiXCIpO1xyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9KTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHRyYWNlQ2hlY2tsaXN0cyhjaGVja2xpc3RzKSB7XHJcblx0aWYgKGNoZWNrbGlzdHMgJiYgT2JqZWN0LmtleXMoY2hlY2tsaXN0cykubGVuZ3RoID4gMCkge1xyXG5cdFx0Y29uc3QgaGVhZGxpbmVzID0gW1xyXG5cdFx0XHRcIk5PREVTXCIsXHJcblx0XHRcdC4uLk9iamVjdC5rZXlzKGNoZWNrbGlzdHMpLm1hcCgoa2V5KSA9PiBgOiR7a2V5fWApLFxyXG5cdFx0XTtcclxuXHRcdGNoZWNrbGlzdHMgPSBPYmplY3QudmFsdWVzKGNoZWNrbGlzdHMpO1xyXG5cdFx0Y29uc3QgdXJscyA9IE9iamVjdC5rZXlzKGNoZWNrbGlzdHNbMF0pO1xyXG5cdFx0Y29uc3QgcmVjb3JkcyA9IHVybHMubWFwKCh1cmwpID0+IHtcclxuXHRcdFx0Y29uc3QgZXJyb3JzID0gY2hlY2tsaXN0cy5maWx0ZXIoXHJcblx0XHRcdFx0KGNoZWNrbGlzdCkgPT4gY2hlY2tsaXN0W3VybF0gaW5zdGFuY2VvZiBFcnJvcixcclxuXHRcdFx0KS5sZW5ndGg7XHJcblx0XHRcdHJldHVybiBbXHJcblx0XHRcdFx0ZXJyb3JzID09PSBjaGVja2xpc3RzLmxlbmd0aFxyXG5cdFx0XHRcdFx0PyBjb2xvcnMucmVkKHVybClcclxuXHRcdFx0XHRcdDogZXJyb3JzID4gMFxyXG5cdFx0XHRcdFx0XHQ/IGNvbG9ycy5teWVsbG93KHVybClcclxuXHRcdFx0XHRcdFx0OiBjb2xvcnMubWN5YW4odXJsKSxcclxuXHRcdFx0XHQuLi5jaGVja2xpc3RzLm1hcCgoY2hlY2tsaXN0KSA9PlxyXG5cdFx0XHRcdFx0Y2hlY2tsaXN0W3VybF0gaW5zdGFuY2VvZiBFcnJvclxyXG5cdFx0XHRcdFx0XHQ/IGNvbG9ycy5yZWQoY2hlY2tsaXN0W3VybF0pXHJcblx0XHRcdFx0XHRcdDogY2hlY2tsaXN0W3VybF0gPT09IHRydWVcclxuXHRcdFx0XHRcdFx0XHQ/IGNvbG9ycy5sY3lhbihcIkF5ZVwiKVxyXG5cdFx0XHRcdFx0XHRcdDogY29sb3JzLmN5YW4oXCJOYXlcIiksXHJcblx0XHRcdFx0KSxcclxuXHRcdFx0XTtcclxuXHRcdH0pO1xyXG5cdFx0dHJhY2VUYWJsZShyZWNvcmRzLCB7XHJcblx0XHRcdGhlYWRsaW5lcyxcclxuXHRcdFx0bWF4Q29sdW1uV2lkdGg6IDMxLFxyXG5cdFx0fSk7XHJcblx0fVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gdHJhY2VIZWFkZXIoaGVhZGxpbmUsIGNvbG9yID0gbm9ybWFsLCBpbmRlbnQgPSBcIlwiKSB7XHJcblx0Y29uc29sZS5pbmZvKGAke2luZGVudH3ilIzilIAke1wi4pSAXCIucmVwZWF0KGhlYWRsaW5lLmxlbmd0aCl94pSA4pSQYCk7XHJcblx0Y29uc29sZS5pbmZvKGAke2luZGVudH3ilIIgJHtjb2xvcihoZWFkbGluZSl9IOKUgmApO1xyXG5cdGNvbnNvbGUuaW5mbyhgJHtpbmRlbnR94pSU4pSAJHtcIuKUgFwiLnJlcGVhdChoZWFkbGluZS5sZW5ndGgpfeKUgOKUmGApO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gdHJhY2VUYWJsZShyZWNvcmRzLCBvcHRpb25zKSB7XHJcblx0Y29uc3Qgc3RyaW5naWZ5ID0gKGRhdGEsIGh1bWFuaXplcnMsIGluZGV4KSA9PlxyXG5cdFx0aHVtYW5pemVycz8uW2luZGV4XVxyXG5cdFx0XHQ/IGh1bWFuaXplcnNbaW5kZXhdKGRhdGEpLnRvU3RyaW5nKClcclxuXHRcdFx0OiAoZGF0YT8udG9TdHJpbmcoKSA/PyBcIlwiKTtcclxuXHRjb25zdCBtYXggPSAoYSwgYikgPT4gKGEgPiBiID8gYSA6IGIpO1xyXG5cdGNvbnN0IHJlZHVjZU1heCA9IChudW1iZXJzKSA9PlxyXG5cdFx0bnVtYmVycy5yZWR1Y2UoKGN1cnIsIHByZXYpID0+IChwcmV2ID4gY3VyciA/IHByZXYgOiBjdXJyKSwgMCk7XHJcblx0aWYgKCFvcHRpb25zKSBvcHRpb25zID0ge307XHJcblx0Y29uc3QgaW5kZW50ID0gb3B0aW9ucz8uaW5kZW50IHx8IFwiXCI7XHJcblx0Y29uc3QgbnVtQ29sdW1ucyA9IHJlZHVjZU1heChyZWNvcmRzLm1hcCgocmVjb3JkKSA9PiByZWNvcmQ/Lmxlbmd0aCB8fCAxKSk7XHJcblx0Y29uc3QgbWF4Q29sdW1uV2lkdGggPSBvcHRpb25zPy5tYXhDb2x1bW5XaWR0aCB8fCA4MDtcclxuXHRjb25zdCB0YWJsZSA9IHRyYW5zcG9zZShyZWNvcmRzLCBudW1Db2x1bW5zKTtcclxuXHRvcHRpb25zLndpZHRocyA9XHJcblx0XHRvcHRpb25zPy53aWR0aHMgfHxcclxuXHRcdHRhYmxlLm1hcCgoY29sdW1uLCBpbmRleCkgPT4ge1xyXG5cdFx0XHRsZXQgbWF4V2lkdGggPSByZWR1Y2VNYXgoXHJcblx0XHRcdFx0Y29sdW1uLm1hcChcclxuXHRcdFx0XHRcdChmaWVsZCkgPT5cclxuXHRcdFx0XHRcdFx0Y29sb3JzdHJpcChzdHJpbmdpZnkoZmllbGQsIG9wdGlvbnM/Lmh1bWFuaXplcnMsIGluZGV4KSkubGVuZ3RoLFxyXG5cdFx0XHRcdCksXHJcblx0XHRcdCk7XHJcblx0XHRcdGlmIChvcHRpb25zPy5oZWFkbGluZXM/LltpbmRleF0pIHtcclxuXHRcdFx0XHRtYXhXaWR0aCA9IG1heChcclxuXHRcdFx0XHRcdG1heFdpZHRoLFxyXG5cdFx0XHRcdFx0Y29sb3JzdHJpcChvcHRpb25zLmhlYWRsaW5lc1tpbmRleF0ucmVwbGFjZUFsbChcIjpcIiwgXCJcIikpLmxlbmd0aCxcclxuXHRcdFx0XHQpO1xyXG5cdFx0XHR9XHJcblx0XHRcdHJldHVybiBNYXRoLm1pbihtYXhXaWR0aCwgbWF4Q29sdW1uV2lkdGgpO1xyXG5cdFx0fSk7XHJcblx0bGV0IGhlYWRsaW5lID0gb3B0aW9ucy53aWR0aHMubWFwKChtYXhXaWR0aCkgPT4gXCLilIBcIi5yZXBlYXQobWF4V2lkdGgpKTtcclxuXHRjb25zb2xlLmluZm8oYCR7aW5kZW50feKUjOKUgCR7aGVhZGxpbmUuam9pbihcIuKUgOKUrOKUgFwiKX3ilIDilJBgKTtcclxuXHRpZiAob3B0aW9ucz8uaGVhZGxpbmVzKSB7XHJcblx0XHRoZWFkbGluZSA9IG9wdGlvbnMud2lkdGhzLm1hcCgobWF4V2lkdGgsIGluZGV4KSA9PiB7XHJcblx0XHRcdGNvbnN0IGNhcHRpb24gPSBvcHRpb25zLmhlYWRsaW5lc1tpbmRleF0ucmVwbGFjZUFsbChcIjpcIiwgXCJcIik7XHJcblx0XHRcdGNvbnN0IGNhcHRpb25MZW5ndGggPSBjb2xvcnN0cmlwKGNhcHRpb24pLmxlbmd0aDtcclxuXHRcdFx0cmV0dXJuIGAke3doaXRlKGNhcHRpb24pfSR7XCIgXCIucmVwZWF0KG1heFdpZHRoIC0gY2FwdGlvbkxlbmd0aCl9YDtcclxuXHRcdH0pO1xyXG5cdFx0Y29uc29sZS5pbmZvKGAke2luZGVudH3ilIIgJHtoZWFkbGluZS5qb2luKFwiIOKUgiBcIil9IOKUgmApO1xyXG5cdFx0aGVhZGxpbmUgPSBvcHRpb25zLndpZHRocy5tYXAoKG1heFdpZHRoKSA9PiBcIuKUgFwiLnJlcGVhdChtYXhXaWR0aCkpO1xyXG5cdFx0Y29uc29sZS5pbmZvKGAke2luZGVudH3ilJzilIAke2hlYWRsaW5lLmpvaW4oXCLilIDilLzilIBcIil94pSA4pSkYCk7XHJcblx0fVxyXG5cdGZvciAobGV0IGkgPSAwOyBpIDwgcmVjb3Jkcy5sZW5ndGg7IGkrKykge1xyXG5cdFx0bGV0IGxpbmUgPSBcIlwiO1xyXG5cdFx0Zm9yIChsZXQgaiA9IDA7IGogPCBudW1Db2x1bW5zOyBqKyspIHtcclxuXHRcdFx0bGV0IGRhdGEgPSB0YWJsZVtqXVtpXTtcclxuXHRcdFx0bGV0IGNvbG9yO1xyXG5cdFx0XHRpZiAob3B0aW9ucz8uY29sb3JzPy5bal0pIHtcclxuXHRcdFx0XHRjb2xvciA9IG9wdGlvbnMuY29sb3JzW2pdO1xyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdGNvbG9yID1cclxuXHRcdFx0XHRcdHR5cGVvZiBkYXRhID09PSBcInN0cmluZ1wiXHJcblx0XHRcdFx0XHRcdD8gZ3JlZW5cclxuXHRcdFx0XHRcdFx0OiBOdW1iZXIoZGF0YSkgPT09IGRhdGEgJiYgZGF0YSAlIDEgIT09IDAgLy8gaXMgZmxvYXQgbnVtYmVyP1xyXG5cdFx0XHRcdFx0XHRcdD8geWVsbG93XHJcblx0XHRcdFx0XHRcdFx0OiAoeCkgPT4geDtcclxuXHRcdFx0fVxyXG5cdFx0XHRkYXRhID0gc3RyaW5naWZ5KGRhdGEsIG9wdGlvbnM/Lmh1bWFuaXplcnMsIGopO1xyXG5cdFx0XHRpZiAoY29sb3JzdHJpcChkYXRhKS5sZW5ndGggPiBtYXhDb2x1bW5XaWR0aCkge1xyXG5cdFx0XHRcdHdoaWxlIChjb2xvcnN0cmlwKGRhdGEpLmxlbmd0aCA+IG1heENvbHVtbldpZHRoIC0gMykge1xyXG5cdFx0XHRcdFx0ZGF0YSA9IGRhdGEuc2xpY2UoMCwgLTEpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRkYXRhICs9IFwiLi4uXCI7XHJcblx0XHRcdH1cclxuXHRcdFx0Y29uc3QgZGF0YUxlbmd0aCA9IGNvbG9yc3RyaXAoZGF0YSkubGVuZ3RoO1xyXG5cdFx0XHRpZiAob3B0aW9ucz8uaGVhZGxpbmVzICYmIG9wdGlvbnMuaGVhZGxpbmVzW2pdWzBdID09PSBcIjpcIikge1xyXG5cdFx0XHRcdGRhdGEgPSBgJHtjb2xvcihkYXRhKX0ke1wiIFwiLnJlcGVhdChvcHRpb25zLndpZHRoc1tqXSAtIGRhdGFMZW5ndGgpfWA7XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0ZGF0YSA9IGAke1wiIFwiLnJlcGVhdChvcHRpb25zLndpZHRoc1tqXSAtIGRhdGFMZW5ndGgpfSR7Y29sb3IoZGF0YSl9YDtcclxuXHRcdFx0fVxyXG5cdFx0XHRsaW5lICs9IGDilIIgJHtkYXRhfSBgO1xyXG5cdFx0fVxyXG5cdFx0Y29uc29sZS5pbmZvKGAke2luZGVudH0ke2xpbmV94pSCYCk7XHJcblx0fVxyXG5cdGhlYWRsaW5lID0gb3B0aW9ucy53aWR0aHMubWFwKChtYXhXaWR0aCkgPT4gXCLilIBcIi5yZXBlYXQobWF4V2lkdGgpKTtcclxuXHRjb25zb2xlLmluZm8oYCR7aW5kZW50feKUlOKUgCR7aGVhZGxpbmUuam9pbihcIuKUgOKUtOKUgFwiKX3ilIDilJhgKTtcclxufVxyXG5cclxuZnVuY3Rpb24gdHJhbnNwb3NlKHJlY29yZHMsIG51bUNvbHVtbnMpIHtcclxuXHRjb25zdCBjb2x1bW5zID0gW107XHJcblx0Zm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IG51bUNvbHVtbnM7IGluZGV4KyspIHtcclxuXHRcdGNvbHVtbnMucHVzaChyZWNvcmRzLm1hcCgocm93KSA9PiByb3dbaW5kZXhdKSk7XHJcblx0fVxyXG5cdHJldHVybiBjb2x1bW5zO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gdHhKc29uUmVwbGFjZXIoa2V5LCB2YWx1ZSkge1xyXG5cdHN3aXRjaCAoa2V5KSB7XHJcblx0XHRjYXNlIFwiYnl0ZXNcIjpcclxuXHRcdGNhc2UgXCJkZXJcIjpcclxuXHRcdFx0cmV0dXJuIHRvSGV4U3RyaW5nKHZhbHVlLCB0cnVlKTtcclxuXHRcdGNhc2UgXCJ0eFwiOlxyXG5cdFx0XHRyZXR1cm4gSlNPTi5zdHJpbmdpZnkodmFsdWUsIHR4SnNvblJlcGxhY2VyKTtcclxuXHRcdGNhc2UgXCJjaGFuZ2VcIjpcclxuXHRcdGNhc2UgXCJmZWVzXCI6XHJcblx0XHRjYXNlIFwidmFsdWVcIjpcclxuXHRcdFx0cmV0dXJuIHBhcnNlSW50KHZhbHVlLCAxMCkgLyAxMCAqKiA5O1xyXG5cdFx0ZGVmYXVsdDpcclxuXHRcdFx0cmV0dXJuIHZhbHVlO1xyXG5cdH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHR4UmVjZWlwdEpzb25SZXBsYWNlcihrZXksIHZhbHVlKSB7XHJcblx0c3dpdGNoIChrZXkpIHtcclxuXHRcdGNhc2UgXCJieXRlc1wiOlxyXG5cdFx0Y2FzZSBcImRlclwiOlxyXG5cdFx0XHRyZXR1cm4gdG9IZXhTdHJpbmcodmFsdWUsIHRydWUpO1xyXG5cdFx0Y2FzZSBcInR4XCI6XHJcblx0XHRcdHJldHVybiBKU09OLnN0cmluZ2lmeSh2YWx1ZSwgdHhKc29uUmVwbGFjZXIpO1xyXG5cdFx0Y2FzZSBcImNoYW5nZVwiOlxyXG5cdFx0Y2FzZSBcImZlZXNcIjpcclxuXHRcdGNhc2UgXCJ2YWx1ZVwiOlxyXG5cdFx0XHRyZXR1cm4gcGFyc2VJbnQodmFsdWU/LnBlZHJvcywgMTApIC8gMTAgKiogOTtcclxuXHRcdGNhc2UgXCJ0aW1lc3RhbXBcIjpcclxuXHRcdFx0cmV0dXJuIG1vbWVudC51bml4KHZhbHVlKS5mb3JtYXQoXCJNTU1NIERvIFlZWVksIGg6bW06c3MgYVwiKTtcclxuXHRcdGRlZmF1bHQ6XHJcblx0XHRcdHJldHVybiB2YWx1ZTtcclxuXHR9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiB0cmFjZVRyYW5zYWN0aW9uT25DaGVja3BvaW50KHJlY2VpcHQpIHtcclxuXHRpZiAocmVjZWlwdD8uY29uZmlybWF0aW9ucykge1xyXG5cdFx0Y29uc29sZS5pbmZvKGAgPiBDaGVja3BvaW50ICMke2NvbW1hcyhyZWNlaXB0LmNvbmZpcm1hdGlvbnMpfS4uLmApO1xyXG5cdH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHRyYWNlVHJhbnNhY3Rpb25PblN0YXR1c0NoYW5nZShyZWNlaXB0KSB7XHJcblx0Y29uc3QgY2FwdGlvbnMgPSB7XHJcblx0XHRwZW5kaW5nOiBcIkF3YWl0aW5nIHJlbGF5Li4uXCIsXHJcblx0XHQvLyBjb25maXJtZWQ6IFwiVHJhbnNhY3Rpb24gY29uZmlybWVkOlwiLFxyXG5cdFx0Ly8gZmluYWxpemVkOiBcIlRyYW5zYWN0aW9uIGZpbmFsaXplZDpcIixcclxuXHRcdHJlbGF5ZWQ6IFwiQXdhaXRpbmcgaW5jbHVzaW9uLi4uXCIsXHJcblx0XHRtaW5lZDogXCJBd2FpdGluZyBjb25maXJtYXRpb25zLi4uXCIsXHJcblx0fTtcclxuXHRjb25zdCBjYXB0aW9uID0gY2FwdGlvbnNbcmVjZWlwdC5zdGF0dXNdO1xyXG5cdGlmIChjYXB0aW9uKSBjb25zb2xlLmluZm8oYCA+ICR7Y2FwdGlvbnNbcmVjZWlwdC5zdGF0dXNdfWApO1xyXG5cdGlmIChbXCJmaW5hbGl6ZWRcIiwgXCJjb25maXJtZWRcIl0uaW5jbHVkZXMocmVjZWlwdC5zdGF0dXMpKSB7XHJcblx0XHRjb25zb2xlLmluZm8oYCA+IEJsb2NrIGhhc2g6ICAgJHtjb2xvcnMuZ3JheShyZWNlaXB0Py5ibG9ja0hhc2gpfWApO1xyXG5cdFx0Y29uc29sZS5pbmZvKGAgPiBCbG9jayBtaW5lcjogICR7Y29sb3JzLmN5YW4ocmVjZWlwdD8uYmxvY2tNaW5lcil9YCk7XHJcblx0XHRjb25zb2xlLmluZm8oXHJcblx0XHRcdGAgPiBCbG9jayBlcG9jaDogICR7Y29sb3JzLndoaXRlKGNvbW1hcyhyZWNlaXB0Py5ibG9ja0Vwb2NoKSl9YCxcclxuXHRcdCk7XHJcblx0XHRjb25zb2xlLmluZm8oXHJcblx0XHRcdGAgPiBJbmNsdWRlZCBhdDogICR7Y29sb3JzLmdyZWVuKG1vbWVudC51bml4KHJlY2VpcHQ/LmJsb2NrVGltZXN0YW1wKS5mb3JtYXQoXCJNTU1NIERvIFlZWVksIGg6bW06c3MgYVwiKSl9YCxcclxuXHRcdCk7XHJcblx0XHRjb25zb2xlLmluZm8oXHJcblx0XHRcdGAgPiAke3JlY2VpcHQuc3RhdHVzWzBdLnRvVXBwZXJDYXNlKCkgKyByZWNlaXB0LnN0YXR1cy5zbGljZSgxKX0gYXQ6ICR7Y29sb3JzLm1ncmVlbihtb21lbnQudW5peChyZWNlaXB0LnRpbWVzdGFtcCkuZm9ybWF0KFwiTU1NTSBEbyBZWVlZLCBoOm1tOnNzIGFcIikpfWAsXHJcblx0XHQpO1xyXG5cdH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHRyYWNlVHJhbnNhY3Rpb25SZWNlaXB0KHJlY2VpcHQpIHtcclxuXHRjb25zdCBjYXB0aW9ucyA9IHtcclxuXHRcdERhdGFSZXF1ZXN0OiBcIiA+IERSVCBoYXNoOiAgICAgXCIsXHJcblx0XHRWYWx1ZVRyYW5zZmVyOiBcIiA+IFZUVCBoYXNoOiAgICAgXCIsXHJcblx0fTtcclxuXHRjb25zb2xlLmluZm8oXHJcblx0XHRgJHtjYXB0aW9uc1tyZWNlaXB0LnR5cGVdIHx8IFwiID4gVFggaGFzaDogICAgICBcIn0ke2NvbG9ycy53aGl0ZShyZWNlaXB0Lmhhc2gpfWAsXHJcblx0KTtcclxuXHRpZiAocmVjZWlwdD8uZHJvSGFzaClcclxuXHRcdGNvbnNvbGUuaW5mbyhgID4gRFJPIGhhc2g6ICAgICAke2NvbG9ycy5ncmVlbihyZWNlaXB0LmRyb0hhc2gpfWApO1xyXG5cdGlmIChyZWNlaXB0Py5yYWRIYXNoKVxyXG5cdFx0Y29uc29sZS5pbmZvKGAgPiBSQUQgaGFzaDogICAgICR7Y29sb3JzLm1ncmVlbihyZWNlaXB0LnJhZEhhc2gpfWApO1xyXG5cdGlmIChyZWNlaXB0Py5kcm9TTEEpXHJcblx0XHRjb25zb2xlLmluZm8oYCA+IFNMQSBwYXJhbXM6ICAgJHtKU09OLnN0cmluZ2lmeShyZWNlaXB0LmRyb1NMQSl9YCk7XHJcblx0aWYgKHJlY2VpcHQ/LndpdGhkcmF3ZXIpIHtcclxuXHRcdGlmIChyZWNlaXB0Py52YWxpZGF0b3IpIHtcclxuXHRcdFx0Y29uc29sZS5pbmZvKGAgPiBWYWxpZGF0b3I6ICAgICR7Y29sb3JzLm1jeWFuKHJlY2VpcHQudmFsaWRhdG9yKX1gKTtcclxuXHRcdH1cclxuXHRcdGNvbnNvbGUuaW5mbyhgID4gV2l0aGRyYXdlcjogICAke2NvbG9ycy5tbWFnZW50YShyZWNlaXB0LndpdGhkcmF3ZXIpfWApO1xyXG5cdH0gZWxzZSB7XHJcblx0XHRjb25zdCBzaWduZXJzID0gQXJyYXkuaXNBcnJheShyZWNlaXB0LmZyb20pID8gcmVjZWlwdC5mcm9tIDogW3JlY2VpcHQuZnJvbV07XHJcblx0XHRjb25zb2xlLmluZm8oYCA+IFNpZ25lci9zOiAgICAgJHtjb2xvcnMubW1hZ2VudGEoc2lnbmVyc1swXSl9YCk7XHJcblx0XHRzaWduZXJzLnNsaWNlKDEpLmZvckVhY2goKHNpZ25lcikgPT4ge1xyXG5cdFx0XHRjb25zb2xlLmluZm8oYCAgICAgICAgICAgICAgICAgJHtjb2xvcnMubW1hZ2VudGEoc2lnbmVyKX1gKTtcclxuXHRcdH0pO1xyXG5cdH1cclxuXHRpZiAocmVjZWlwdD8ucmVjaXBpZW50cykge1xyXG5cdFx0Y29uc29sZS5pbmZvKFxyXG5cdFx0XHRgID4gUmVjaXBpZW50L3M6ICAke2NvbG9ycy5tYmx1ZShcclxuXHRcdFx0XHRyZWNlaXB0LnJlY2lwaWVudHMuZmlsdGVyKFxyXG5cdFx0XHRcdFx0KHBraCwgaW5kZXgsIGFycmF5KSA9PiBpbmRleCA9PT0gYXJyYXkuaW5kZXhPZihwa2gpLFxyXG5cdFx0XHRcdCksXHJcblx0XHRcdCl9YCxcclxuXHRcdCk7XHJcblx0fVxyXG5cdGlmIChyZWNlaXB0Py5mZWVzKVxyXG5cdFx0Y29uc29sZS5pbmZvKGAgPiBOZXR3b3JrIGZlZTogICR7Y29sb3JzLnllbGxvdyhyZWNlaXB0LmZlZXMudG9TdHJpbmcoMikpfWApO1xyXG5cdGlmIChyZWNlaXB0Py52YWx1ZSlcclxuXHRcdGNvbnNvbGUuaW5mbyhcclxuXHRcdFx0YCA+IFZhbHVlOiAgICAgICAgJHtjb2xvcnMubXllbGxvdyhyZWNlaXB0LnZhbHVlLnRvU3RyaW5nKDIpKX1gLFxyXG5cdFx0KTtcclxuXHRpZiAocmVjZWlwdD8ud2VpZ2h0KVxyXG5cdFx0Y29uc29sZS5pbmZvKGAgPiBXZWlnaHQ6ICAgICAgICR7Y29sb3JzLm1ncmVlbihjb21tYXMocmVjZWlwdC53ZWlnaHQpKX1gKTtcclxuXHRpZiAocmVjZWlwdD8ud2l0bmVzc2VzKSB7XHJcblx0XHRjb25zb2xlLmluZm8oYCA+IFdpdG5lc3NlczogICAgJHtyZWNlaXB0LndpdG5lc3Nlc31gKTtcclxuXHR9XHJcbn1cclxuXHJcbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB0cmFjZVRyYW5zYWN0aW9uKHRyYW5zbWl0dGVyLCBvcHRpb25zKSB7XHJcblx0Y29uc3QgY29sb3IgPSBvcHRpb25zPy5jb2xvciB8fCAoKHgpID0+IGBcXHgxYlszMDs0NW0ke3h9XFx4MWJbMG1gKTtcclxuXHRsZXQgcmVjZWlwdCA9IGF3YWl0IHRyYW5zbWl0dGVyLnNpZ25UcmFuc2FjdGlvbihvcHRpb25zLCBvcHRpb25zPy5yZWxvYWQpO1xyXG5cdGlmIChvcHRpb25zPy52ZXJib3NlKSB7XHJcblx0XHRjb25zb2xlLmluZm8oYFxcbiR7Z3JheShKU09OLnN0cmluZ2lmeShyZWNlaXB0LnR4LCB0eEpzb25SZXBsYWNlcikpfWApO1xyXG5cdH1cclxuXHRpZiAob3B0aW9ucz8uaGVhZGxpbmUpIHtcclxuXHRcdGNvbnNvbGUuaW5mbyhgXFxuICR7Y29sb3IoYCAgJHtvcHRpb25zLmhlYWRsaW5lfSAgYCl9XFxuYCk7XHJcblx0fVxyXG5cdHRyYWNlVHJhbnNhY3Rpb25SZWNlaXB0KHJlY2VpcHQpO1xyXG5cdGlmICghb3B0aW9ucz8uZm9yY2UpIHtcclxuXHRcdC8vIHByb21wdCB1c2VyIGNvbmZpcm1hdGlvblxyXG5cdFx0Y29uc29sZS5pbmZvKCk7XHJcblx0XHRjb25zdCBhbnN3ZXIgPSBhd2FpdCByZXF1aXJlKFwiaW5xdWlyZXJcIikuY3JlYXRlUHJvbXB0TW9kdWxlKCkoW1xyXG5cdFx0XHR7XHJcblx0XHRcdFx0bWVzc2FnZTogXCJTZW5kIHRyYW5zYWN0aW9uP1wiLFxyXG5cdFx0XHRcdHR5cGU6IFwiY29uZmlybVwiLFxyXG5cdFx0XHRcdG5hbWU6IFwiY29udGludWVcIixcclxuXHRcdFx0XHRkZWZhdWx0OiBmYWxzZSxcclxuXHRcdFx0fSxcclxuXHRcdF0pO1xyXG5cdFx0aWYgKCFhbnN3ZXIuY29udGludWUpIHtcclxuXHRcdFx0cmV0dXJuIHJlY2VpcHQ7XHJcblx0XHR9XHJcblx0fVxyXG5cdHRyeSB7XHJcblx0XHRjb25zb2xlLmluZm8oKTtcclxuXHRcdHJlY2VpcHQgPSBhd2FpdCB0cmFuc21pdHRlci5zZW5kVHJhbnNhY3Rpb24oKTtcclxuXHRcdGlmIChvcHRpb25zPy5hd2FpdCB8fCBvcHRpb25zPy5jb25maXJtYXRpb25zICE9PSB1bmRlZmluZWQpIHtcclxuXHRcdFx0cmVjZWlwdCA9IGF3YWl0IHRyYW5zbWl0dGVyLmNvbmZpcm1UcmFuc2FjdGlvbihyZWNlaXB0Lmhhc2gsIHtcclxuXHRcdFx0XHRjb25maXJtYXRpb25zOiBvcHRpb25zPy5jb25maXJtYXRpb25zIHx8IDAsXHJcblx0XHRcdFx0b25DaGVja3BvaW50OiB0cmFjZVRyYW5zYWN0aW9uT25DaGVja3BvaW50LFxyXG5cdFx0XHRcdG9uU3RhdHVzQ2hhbmdlOiB0cmFjZVRyYW5zYWN0aW9uT25TdGF0dXNDaGFuZ2UsXHJcblx0XHRcdH0pO1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0Y29uc3QgZGF0YSA9IHtcclxuXHRcdFx0XHRzdGF0dXM6IHJlY2VpcHQ/LnN0YXR1cyxcclxuXHRcdFx0XHR0aW1lc3RhbXA6IHJlY2VpcHQ/LnRpbWVzdGFtcCB8fCBNYXRoLmZsb29yKERhdGUubm93KCkgLyAxMDAwKSxcclxuXHRcdFx0fTtcclxuXHRcdFx0Y29uc29sZS5pbmZvKGRhdGEpO1xyXG5cdFx0fVxyXG5cdH0gY2F0Y2ggKGVycikge1xyXG5cdFx0aWYgKGVycj8uaW5GbGlnaHQgJiYgZXJyLmluRmxpZ2h0KSB7XHJcblx0XHRcdGNvbnNvbGUuaW5mbyhcclxuXHRcdFx0XHRgXFxuJHtjb2xvcnMuZ3JheShKU09OLnN0cmluZ2lmeShlcnIuaW5GbGlndD8ubWVzc2FnZSwgdHhSZWNlaXB0SnNvblJlcGxhY2VyKSl9YCxcclxuXHRcdFx0KTtcclxuXHRcdH1cclxuXHRcdHRocm93IGVycjtcclxuXHR9XHJcblx0cmV0dXJuIHJlY2VpcHQ7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiB1bmVzY2FwZVNsYXNoZXMoc3RyKSB7XHJcblx0Ly8gYWRkIGFub3RoZXIgZXNjYXBlZCBzbGFzaCBpZiB0aGUgc3RyaW5nIGVuZHMgd2l0aCBhbiBvZGRcclxuXHQvLyBudW1iZXIgb2YgZXNjYXBlZCBzbGFzaGVzIHdoaWNoIHdpbGwgY3Jhc2ggSlNPTi5wYXJzZVxyXG5cdGxldCBwYXJzZWRTdHIgPSBzdHIucmVwbGFjZSgvKF58W15cXFxcXSkoXFxcXFxcXFwpKlxcXFwkLywgXCIkJlxcXFxcIik7XHJcblxyXG5cdC8vIGVzY2FwZSB1bmVzY2FwZWQgZG91YmxlIHF1b3RlcyB0byBwcmV2ZW50IGVycm9yIHdpdGhcclxuXHQvLyBhZGRlZCBkb3VibGUgcXVvdGVzIGluIGpzb24gc3RyaW5nXHJcblx0cGFyc2VkU3RyID0gcGFyc2VkU3RyLnJlcGxhY2UoLyhefFteXFxcXF0pKChcXFxcXFxcXCkqXCIpL2csIFwiJDFcXFxcJDJcIik7XHJcblxyXG5cdHRyeSB7XHJcblx0XHRwYXJzZWRTdHIgPSBKU09OLnBhcnNlKGBcIiR7cGFyc2VkU3RyfVwiYCk7XHJcblx0fSBjYXRjaCAoX2UpIHtcclxuXHRcdHJldHVybiBzdHI7XHJcblx0fVxyXG5cdHJldHVybiBwYXJzZWRTdHI7XHJcbn1cclxuIl19
|