1 | ;
|
2 | Object.defineProperty(exports, "__esModule", { value: true });
|
3 | exports.monteCarloPI = exports.getEnv = exports.allocate = exports.returnsError = exports.customError = exports.processExit = exports.consoleInfo = exports.consoleError = exports.consoleWarn = exports.consoleLog = exports.optionalArg = exports.infiniteLoop = exports.spin = exports.timer = exports.rejected = exports.emptyReject = exports.path = exports.async = exports.delayReject = exports.sleep = exports.noargs = exports.error = exports.concat = exports.fact = exports.hello = exports.asyncArrow = exports.arrow = exports.identitySet = exports.identityMap = exports.identityBigUint64 = exports.identityBigInt64 = exports.identityFloat64 = exports.identityFloat32 = exports.identityUint32 = exports.identityInt32 = exports.identityUint16 = exports.identityInt16 = exports.identityUint8Clamped = exports.identityUint8 = exports.identityInt8 = exports.identityArrayString = exports.identityArrayNum = exports.identityObject = exports.identityNull = exports.identityUndefined = exports.identityBool = exports.identityNum = exports.identityString = exports.empty = exports.test = void 0;
|
4 | exports.classReturn = exports.identityClass = exports.Cls = exports.identityDate = exports.identityBuffer = exports.functionReturn = exports.identityFunction = exports.promiseArg = exports.asyncGeneratorError = exports.asyncGeneratorDelay = exports.generateThenInfiniteLoop = exports.asyncGenerator = exports.generator = void 0;
|
5 | function test() {
|
6 | return "Successfully called test function.";
|
7 | }
|
8 | exports.test = test;
|
9 | function empty() { }
|
10 | exports.empty = empty;
|
11 | function identityString(name) {
|
12 | return name;
|
13 | }
|
14 | exports.identityString = identityString;
|
15 | function identityNum(n) {
|
16 | return n;
|
17 | }
|
18 | exports.identityNum = identityNum;
|
19 | function identityBool(b) {
|
20 | return b;
|
21 | }
|
22 | exports.identityBool = identityBool;
|
23 | function identityUndefined(u) {
|
24 | return u;
|
25 | }
|
26 | exports.identityUndefined = identityUndefined;
|
27 | function identityNull(n) {
|
28 | return n;
|
29 | }
|
30 | exports.identityNull = identityNull;
|
31 | function identityObject(o) {
|
32 | return o;
|
33 | }
|
34 | exports.identityObject = identityObject;
|
35 | function identityArrayNum(n) {
|
36 | return n;
|
37 | }
|
38 | exports.identityArrayNum = identityArrayNum;
|
39 | function identityArrayString(s) {
|
40 | return s;
|
41 | }
|
42 | exports.identityArrayString = identityArrayString;
|
43 | function identityInt8(a) {
|
44 | return a;
|
45 | }
|
46 | exports.identityInt8 = identityInt8;
|
47 | function identityUint8(a) {
|
48 | return a;
|
49 | }
|
50 | exports.identityUint8 = identityUint8;
|
51 | function identityUint8Clamped(a) {
|
52 | return a;
|
53 | }
|
54 | exports.identityUint8Clamped = identityUint8Clamped;
|
55 | function identityInt16(a) {
|
56 | return a;
|
57 | }
|
58 | exports.identityInt16 = identityInt16;
|
59 | function identityUint16(a) {
|
60 | return a;
|
61 | }
|
62 | exports.identityUint16 = identityUint16;
|
63 | function identityInt32(a) {
|
64 | return a;
|
65 | }
|
66 | exports.identityInt32 = identityInt32;
|
67 | function identityUint32(a) {
|
68 | return a;
|
69 | }
|
70 | exports.identityUint32 = identityUint32;
|
71 | function identityFloat32(a) {
|
72 | return a;
|
73 | }
|
74 | exports.identityFloat32 = identityFloat32;
|
75 | function identityFloat64(a) {
|
76 | return a;
|
77 | }
|
78 | exports.identityFloat64 = identityFloat64;
|
79 | function identityBigInt64(a) {
|
80 | return a;
|
81 | }
|
82 | exports.identityBigInt64 = identityBigInt64;
|
83 | function identityBigUint64(a) {
|
84 | return a;
|
85 | }
|
86 | exports.identityBigUint64 = identityBigUint64;
|
87 | function identityMap(m) {
|
88 | return m;
|
89 | }
|
90 | exports.identityMap = identityMap;
|
91 | function identitySet(s) {
|
92 | return s;
|
93 | }
|
94 | exports.identitySet = identitySet;
|
95 | const arrow = (str) => str;
|
96 | exports.arrow = arrow;
|
97 | const asyncArrow = async (str) => str;
|
98 | exports.asyncArrow = asyncArrow;
|
99 | function hello(name) {
|
100 | return `Hello ${name}!`;
|
101 | }
|
102 | exports.hello = hello;
|
103 | function fact(n) {
|
104 | return n <= 1 ? 1 : n * fact(n - 1);
|
105 | }
|
106 | exports.fact = fact;
|
107 | function concat(a, b) {
|
108 | return a + b;
|
109 | }
|
110 | exports.concat = concat;
|
111 | function error(a) {
|
112 | throw new Error(`Expected error. Arg: ${a}`);
|
113 | }
|
114 | exports.error = error;
|
115 | function noargs() {
|
116 | return "called function with no args.";
|
117 | }
|
118 | exports.noargs = noargs;
|
119 | function sleep(ms) {
|
120 | return new Promise(resolve => setTimeout(resolve, ms));
|
121 | }
|
122 | exports.sleep = sleep;
|
123 | function delayReject(ms) {
|
124 | return new Promise((_, reject) => setTimeout(reject, ms));
|
125 | }
|
126 | exports.delayReject = delayReject;
|
127 | async function async() {
|
128 | await sleep(200);
|
129 | return "async function: success";
|
130 | }
|
131 | exports.async = async;
|
132 | function path() {
|
133 | return sleep(200).then(() => process.env.PATH || "no PATH variable");
|
134 | }
|
135 | exports.path = path;
|
136 | function emptyReject() {
|
137 | return Promise.reject();
|
138 | }
|
139 | exports.emptyReject = emptyReject;
|
140 | function rejected() {
|
141 | return Promise.reject("intentionally rejected");
|
142 | }
|
143 | exports.rejected = rejected;
|
144 | async function timer(delayMs) {
|
145 | const start = Date.now();
|
146 | await sleep(delayMs);
|
147 | const end = Date.now();
|
148 | return { start, end };
|
149 | }
|
150 | exports.timer = timer;
|
151 | function spin(ms) {
|
152 | const start = Date.now();
|
153 | while (true) {
|
154 | if (Date.now() - start >= ms) {
|
155 | break;
|
156 | }
|
157 | }
|
158 | const end = Date.now();
|
159 | return { start, end };
|
160 | }
|
161 | exports.spin = spin;
|
162 | function infiniteLoop() {
|
163 | while (true) { }
|
164 | }
|
165 | exports.infiniteLoop = infiniteLoop;
|
166 | function optionalArg(arg) {
|
167 | return arg ? arg : "No arg";
|
168 | }
|
169 | exports.optionalArg = optionalArg;
|
170 | function consoleLog(str) {
|
171 | console.log(str);
|
172 | }
|
173 | exports.consoleLog = consoleLog;
|
174 | function consoleWarn(str) {
|
175 | console.warn(str);
|
176 | }
|
177 | exports.consoleWarn = consoleWarn;
|
178 | function consoleError(str) {
|
179 | console.error(str);
|
180 | }
|
181 | exports.consoleError = consoleError;
|
182 | function consoleInfo(str) {
|
183 | console.info(str);
|
184 | }
|
185 | exports.consoleInfo = consoleInfo;
|
186 | function processExit(code) {
|
187 | process.exit(code);
|
188 | }
|
189 | exports.processExit = processExit;
|
190 | class CustomError extends Error {
|
191 | constructor(message, custom) {
|
192 | super(message);
|
193 | this.custom = custom;
|
194 | }
|
195 | }
|
196 | function customError() {
|
197 | throw new CustomError("custom error message", "custom value");
|
198 | }
|
199 | exports.customError = customError;
|
200 | function returnsError() {
|
201 | return new Error("a returned non-thrown error");
|
202 | }
|
203 | exports.returnsError = returnsError;
|
204 | async function allocate(bytes) {
|
205 | const array = new Array(bytes / 8);
|
206 | const elems = array.length;
|
207 | for (let i = 0; i < elems; i++) {
|
208 | array[i] = i;
|
209 | }
|
210 | console.log(`allocated: %O`, { bytes, elems });
|
211 | console.log(`post allocate memory usage: %O`, process.memoryUsage());
|
212 | await sleep(1000);
|
213 | console.log(`Returning from allocate`);
|
214 | return { bytes, elems };
|
215 | }
|
216 | exports.allocate = allocate;
|
217 | function getEnv(key) {
|
218 | return process.env[key];
|
219 | }
|
220 | exports.getEnv = getEnv;
|
221 | function monteCarloPI(samples) {
|
222 | let inside = 0;
|
223 | for (let n = 0; n < samples; n++) {
|
224 | const [x, y] = [Math.random(), Math.random()];
|
225 | if (x ** 2 + y ** 2 <= 1) {
|
226 | inside++;
|
227 | }
|
228 | }
|
229 | return {
|
230 | inside,
|
231 | samples
|
232 | };
|
233 | }
|
234 | exports.monteCarloPI = monteCarloPI;
|
235 | function* generator(args) {
|
236 | yield* args;
|
237 | }
|
238 | exports.generator = generator;
|
239 | async function* asyncGenerator(args) {
|
240 | yield* args;
|
241 | }
|
242 | exports.asyncGenerator = asyncGenerator;
|
243 | async function* generateThenInfiniteLoop(arg) {
|
244 | yield arg;
|
245 | while (true) { }
|
246 | }
|
247 | exports.generateThenInfiniteLoop = generateThenInfiniteLoop;
|
248 | async function* asyncGeneratorDelay(args, delay) {
|
249 | for (const arg of args) {
|
250 | await sleep(delay);
|
251 | yield arg;
|
252 | }
|
253 | }
|
254 | exports.asyncGeneratorDelay = asyncGeneratorDelay;
|
255 | async function* asyncGeneratorError(msg) {
|
256 | yield 1;
|
257 | throw new Error(msg);
|
258 | }
|
259 | exports.asyncGeneratorError = asyncGeneratorError;
|
260 | /**
|
261 | * Not supported.
|
262 | * @remarks
|
263 | * Examples of functions arguments or return values that are not supported.
|
264 | */
|
265 | function promiseArg(promise) {
|
266 | return promise;
|
267 | }
|
268 | exports.promiseArg = promiseArg;
|
269 | function identityFunction(fn) {
|
270 | return fn;
|
271 | }
|
272 | exports.identityFunction = identityFunction;
|
273 | function functionReturn() {
|
274 | return () => {
|
275 | console.log("returned a function");
|
276 | };
|
277 | }
|
278 | exports.functionReturn = functionReturn;
|
279 | function identityBuffer(buf) {
|
280 | return buf;
|
281 | }
|
282 | exports.identityBuffer = identityBuffer;
|
283 | function identityDate(arg) {
|
284 | return arg;
|
285 | }
|
286 | exports.identityDate = identityDate;
|
287 | class Cls {
|
288 | constructor() { }
|
289 | }
|
290 | exports.Cls = Cls;
|
291 | function identityClass(arg) {
|
292 | return arg;
|
293 | }
|
294 | exports.identityClass = identityClass;
|
295 | function classReturn() {
|
296 | return new Cls();
|
297 | }
|
298 | exports.classReturn = classReturn;
|
299 | //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnVuY3Rpb25zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vdGVzdC9maXh0dXJlcy9mdW5jdGlvbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLFNBQWdCLElBQUk7SUFDaEIsT0FBTyxvQ0FBb0MsQ0FBQztBQUNoRCxDQUFDO0FBRkQsb0JBRUM7QUFFRCxTQUFnQixLQUFLLEtBQUksQ0FBQztBQUExQixzQkFBMEI7QUFFMUIsU0FBZ0IsY0FBYyxDQUFDLElBQVk7SUFDdkMsT0FBTyxJQUFJLENBQUM7QUFDaEIsQ0FBQztBQUZELHdDQUVDO0FBQ0QsU0FBZ0IsV0FBVyxDQUFDLENBQVM7SUFDakMsT0FBTyxDQUFDLENBQUM7QUFDYixDQUFDO0FBRkQsa0NBRUM7QUFDRCxTQUFnQixZQUFZLENBQUMsQ0FBVTtJQUNuQyxPQUFPLENBQUMsQ0FBQztBQUNiLENBQUM7QUFGRCxvQ0FFQztBQUNELFNBQWdCLGlCQUFpQixDQUFDLENBQVk7SUFDMUMsT0FBTyxDQUFDLENBQUM7QUFDYixDQUFDO0FBRkQsOENBRUM7QUFDRCxTQUFnQixZQUFZLENBQUMsQ0FBTztJQUNoQyxPQUFPLENBQUMsQ0FBQztBQUNiLENBQUM7QUFGRCxvQ0FFQztBQUNELFNBQWdCLGNBQWMsQ0FBQyxDQUFTO0lBQ3BDLE9BQU8sQ0FBQyxDQUFDO0FBQ2IsQ0FBQztBQUZELHdDQUVDO0FBQ0QsU0FBZ0IsZ0JBQWdCLENBQUMsQ0FBVztJQUN4QyxPQUFPLENBQUMsQ0FBQztBQUNiLENBQUM7QUFGRCw0Q0FFQztBQUNELFNBQWdCLG1CQUFtQixDQUFDLENBQVc7SUFDM0MsT0FBTyxDQUFDLENBQUM7QUFDYixDQUFDO0FBRkQsa0RBRUM7QUFDRCxTQUFnQixZQUFZLENBQUMsQ0FBWTtJQUNyQyxPQUFPLENBQUMsQ0FBQztBQUNiLENBQUM7QUFGRCxvQ0FFQztBQUNELFNBQWdCLGFBQWEsQ0FBQyxDQUFhO0lBQ3ZDLE9BQU8sQ0FBQyxDQUFDO0FBQ2Is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QUMsR0FBVztJQUN0QyxPQUFPLEdBQUcsQ0FBQztBQUNmLENBQUM7QUFGRCx3Q0FFQztBQUVELFNBQWdCLFlBQVksQ0FBQyxHQUFTO0lBQ2xDLE9BQU8sR0FBRyxDQUFDO0FBQ2YsQ0FBQztBQUZELG9DQUVDO0FBRUQsTUFBYSxHQUFHO0lBQ1osZ0JBQWUsQ0FBQztDQUNuQjtBQUZELGtCQUVDO0FBRUQsU0FBZ0IsYUFBYSxDQUFDLEdBQVE7SUFDbEMsT0FBTyxHQUFHLENBQUM7QUFDZixDQUFDO0FBRkQsc0NBRUM7QUFFRCxTQUFnQixXQUFXO0lBQ3ZCLE9BQU8sSUFBSSxHQUFHLEVBQUUsQ0FBQztBQUNyQixDQUFDO0FBRkQsa0NBRUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZnVuY3Rpb24gdGVzdCgpIHtcbiAgICByZXR1cm4gXCJTdWNjZXNzZnVsbHkgY2FsbGVkIHRlc3QgZnVuY3Rpb24uXCI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlbXB0eSgpIHt9XG5cbmV4cG9ydCBmdW5jdGlvbiBpZGVudGl0eVN0cmluZyhuYW1lOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gbmFtZTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpZGVudGl0eU51bShuOiBudW1iZXIpIHtcbiAgICByZXR1cm4gbjtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpZGVudGl0eUJvb2woYjogYm9vbGVhbikge1xuICAgIHJldHVybiBiO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlkZW50aXR5VW5kZWZpbmVkKHU6IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiB1O1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlkZW50aXR5TnVsbChuOiBudWxsKSB7XG4gICAgcmV0dXJuIG47XG59XG5leHBvcnQgZnVuY3Rpb24gaWRlbnRpdHlPYmplY3Qobzogb2JqZWN0KSB7XG4gICAgcmV0dXJuIG87XG59XG5leHBvcnQgZnVuY3Rpb24gaWRlbnRpdHlBcnJheU51bShuOiBudW1iZXJbXSkge1xuICAgIHJldHVybiBuO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlkZW50aXR5QXJyYXlTdHJpbmcoczogc3RyaW5nW10pIHtcbiAgICByZXR1cm4gcztcbn1cbmV4cG9ydCBmdW5jdGlvbiBpZGVudGl0eUludDgoYTogSW50OEFycmF5KSB7XG4gICAgcmV0dXJuIGE7XG59XG5leHBvcnQgZnVuY3Rpb24gaWRlbnRpdHlVaW50OChhOiBVaW50OEFycmF5KSB7XG4gICAgcmV0dXJuIGE7XG59XG5leHBvcnQgZnVuY3Rpb24gaWRlbnRpdHlVaW50OENsYW1wZWQoYTogVWludDhDbGFtcGVkQXJyYXkpIHtcbiAgICByZXR1cm4gYTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpZGVudGl0eUludDE2KGE6IEludDE2QXJyYXkpIHtcbiAgICByZXR1cm4gYTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpZGVudGl0eVVpbnQxNihhOiBVaW50MTZBcnJheSkge1xuICAgIHJldHVybiBhO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlkZW50aXR5SW50MzIoYTogSW50MzJBcnJheSkge1xuICAgIHJldHVybiBhO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlkZW50aXR5VWludDMyKGE6IFVpbnQzMkFycmF5KSB7XG4gICAgcmV0dXJuIGE7XG59XG5leHBvcnQgZnVuY3Rpb24gaWRlbnRpdHlGbG9hdDMyKGE6IEZsb2F0MzJBcnJheSkge1xuICAgIHJldHVybiBhO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlkZW50aXR5RmxvYXQ2NChhOiBGbG9hdDY0QXJyYXkpIHtcbiAgICByZXR1cm4gYTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpZGVudGl0eUJpZ0ludDY0KGE6IEJpZ0ludDY0QXJyYXkpIHtcbiAgICByZXR1cm4gYTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpZGVudGl0eUJpZ1VpbnQ2NChhOiBCaWdVaW50NjRBcnJheSkge1xuICAgIHJldHVybiBhO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlkZW50aXR5TWFwKG06IE1hcDxudW1iZXIsIG51bWJlcj4pIHtcbiAgICByZXR1cm4gbTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpZGVudGl0eVNldChzOiBTZXQ8bnVtYmVyPikge1xuICAgIHJldHVybiBzO1xufVxuXG5leHBvcnQgY29uc3QgYXJyb3cgPSAoc3RyOiBzdHJpbmcpID0+IHN0cjtcblxuZXhwb3J0IGNvbnN0IGFzeW5jQXJyb3cgPSBhc3luYyAoc3RyOiBzdHJpbmcpID0+IHN0cjtcblxuZXhwb3J0IGZ1bmN0aW9uIGhlbGxvKG5hbWU6IHN0cmluZykge1xuICAgIHJldHVybiBgSGVsbG8gJHtuYW1lfSFgO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZmFjdChuOiBudW1iZXIpOiBudW1iZXIge1xuICAgIHJldHVybiBuIDw9IDEgPyAxIDogbiAqIGZhY3QobiAtIDEpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29uY2F0KGE6IHN0cmluZywgYjogc3RyaW5nKSB7XG4gICAgcmV0dXJuIGEgKyBiO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXJyb3IoYTogc3RyaW5nKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCBlcnJvci4gQXJnOiAke2F9YCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBub2FyZ3MoKSB7XG4gICAgcmV0dXJuIFwiY2FsbGVkIGZ1bmN0aW9uIHdpdGggbm8gYXJncy5cIjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNsZWVwKG1zOiBudW1iZXIpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2U8dm9pZD4ocmVzb2x2ZSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIG1zKSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZWxheVJlamVjdChtczogbnVtYmVyKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChfLCByZWplY3QpID0+IHNldFRpbWVvdXQocmVqZWN0LCBtcykpO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYXN5bmMoKSB7XG4gICAgYXdhaXQgc2xlZXAoMjAwKTtcbiAgICByZXR1cm4gXCJhc3luYyBmdW5jdGlvbjogc3VjY2Vzc1wiO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGF0aCgpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIHJldHVybiBzbGVlcCgyMDApLnRoZW4oKCkgPT4gcHJvY2Vzcy5lbnYuUEFUSCB8fCBcIm5vIFBBVEggdmFyaWFibGVcIik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlbXB0eVJlamVjdCgpIHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlamVjdGVkKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiBQcm9taXNlLnJlamVjdChcImludGVudGlvbmFsbHkgcmVqZWN0ZWRcIik7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVGltaW5nIHtcbiAgICBzdGFydDogbnVtYmVyO1xuICAgIGVuZDogbnVtYmVyO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gdGltZXIoZGVsYXlNczogbnVtYmVyKTogUHJvbWlzZTxUaW1pbmc+IHtcbiAgICBjb25zdCBzdGFydCA9IERhdGUubm93KCk7XG4gICAgYXdhaXQgc2xlZXAoZGVsYXlNcyk7XG4gICAgY29uc3QgZW5kID0gRGF0ZS5ub3coKTtcbiAgICByZXR1cm4geyBzdGFydCwgZW5kIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzcGluKG1zOiBudW1iZXIpOiBUaW1pbmcge1xuICAgIGNvbnN0IHN0YXJ0ID0gRGF0ZS5ub3coKTtcbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICBpZiAoRGF0ZS5ub3coKSAtIHN0YXJ0ID49IG1zKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cbiAgICBjb25zdCBlbmQgPSBEYXRlLm5vdygpO1xuICAgIHJldHVybiB7IHN0YXJ0LCBlbmQgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGluZmluaXRlTG9vcCgpIHtcbiAgICB3aGlsZSAodHJ1ZSkge31cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG9wdGlvbmFsQXJnKGFyZz86IHN0cmluZykge1xuICAgIHJldHVybiBhcmcgPyBhcmcgOiBcIk5vIGFyZ1wiO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29uc29sZUxvZyhzdHI6IHN0cmluZykge1xuICAgIGNvbnNvbGUubG9nKHN0cik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb25zb2xlV2FybihzdHI6IHN0cmluZykge1xuICAgIGNvbnNvbGUud2FybihzdHIpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29uc29sZUVycm9yKHN0cjogc3RyaW5nKSB7XG4gICAgY29uc29sZS5lcnJvcihzdHIpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29uc29sZUluZm8oc3RyOiBzdHJpbmcpIHtcbiAgICBjb25zb2xlLmluZm8oc3RyKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb2Nlc3NFeGl0KGNvZGU/OiBudW1iZXIpIHtcbiAgICBwcm9jZXNzLmV4aXQoY29kZSk7XG59XG5cbmNsYXNzIEN1c3RvbUVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICAgIGNvbnN0cnVjdG9yKG1lc3NhZ2U6IHN0cmluZywgcHVibGljIGN1c3RvbTogc3RyaW5nKSB7XG4gICAgICAgIHN1cGVyKG1lc3NhZ2UpO1xuICAgIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGN1c3RvbUVycm9yKCkge1xuICAgIHRocm93IG5ldyBDdXN0b21FcnJvcihcImN1c3RvbSBlcnJvciBtZXNzYWdlXCIsIFwiY3VzdG9tIHZhbHVlXCIpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmV0dXJuc0Vycm9yKCkge1xuICAgIHJldHVybiBuZXcgRXJyb3IoXCJhIHJldHVybmVkIG5vbi10aHJvd24gZXJyb3JcIik7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBhbGxvY2F0ZShieXRlczogbnVtYmVyKSB7XG4gICAgY29uc3QgYXJyYXkgPSBuZXcgQXJyYXkoYnl0ZXMgLyA4KTtcbiAgICBjb25zdCBlbGVtcyA9IGFycmF5Lmxlbmd0aDtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGVsZW1zOyBpKyspIHtcbiAgICAgICAgYXJyYXlbaV0gPSBpO1xuICAgIH1cbiAgICBjb25zb2xlLmxvZyhgYWxsb2NhdGVkOiAlT2AsIHsgYnl0ZXMsIGVsZW1zIH0pO1xuICAgIGNvbnNvbGUubG9nKGBwb3N0IGFsbG9jYXRlIG1lbW9yeSB1c2FnZTogJU9gLCBwcm9jZXNzLm1lbW9yeVVzYWdlKCkpO1xuICAgIGF3YWl0IHNsZWVwKDEwMDApO1xuICAgIGNvbnNvbGUubG9nKGBSZXR1cm5pbmcgZnJvbSBhbGxvY2F0ZWApO1xuICAgIHJldHVybiB7IGJ5dGVzLCBlbGVtcyB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RW52KGtleTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHByb2Nlc3MuZW52W2tleV07XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTW9udGVDYXJsb1JldHVybiB7XG4gICAgaW5zaWRlOiBudW1iZXI7XG4gICAgc2FtcGxlczogbnVtYmVyO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbW9udGVDYXJsb1BJKHNhbXBsZXM6IG51bWJlcik6IE1vbnRlQ2FybG9SZXR1cm4ge1xuICAgIGxldCBpbnNpZGUgPSAwO1xuICAgIGZvciAobGV0IG4gPSAwOyBuIDwgc2FtcGxlczsgbisrKSB7XG4gICAgICAgIGNvbnN0IFt4LCB5XSA9IFtNYXRoLnJhbmRvbSgpLCBNYXRoLnJhbmRvbSgpXTtcbiAgICAgICAgaWYgKHggKiogMiArIHkgKiogMiA8PSAxKSB7XG4gICAgICAgICAgICBpbnNpZGUrKztcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgICBpbnNpZGUsXG4gICAgICAgIHNhbXBsZXNcbiAgICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24qIGdlbmVyYXRvcihhcmdzOiBzdHJpbmdbXSkge1xuICAgIHlpZWxkKiBhcmdzO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24qIGFzeW5jR2VuZXJhdG9yKGFyZ3M6IHN0cmluZ1tdKSB7XG4gICAgeWllbGQqIGFyZ3M7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiogZ2VuZXJhdGVUaGVuSW5maW5pdGVMb29wKGFyZzogc3RyaW5nKSB7XG4gICAgeWllbGQgYXJnO1xuICAgIHdoaWxlICh0cnVlKSB7fVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24qIGFzeW5jR2VuZXJhdG9yRGVsYXkoYXJnczogc3RyaW5nW10sIGRlbGF5OiBudW1iZXIpIHtcbiAgICBmb3IgKGNvbnN0IGFyZyBvZiBhcmdzKSB7XG4gICAgICAgIGF3YWl0IHNsZWVwKGRlbGF5KTtcbiAgICAgICAgeWllbGQgYXJnO1xuICAgIH1cbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uKiBhc3luY0dlbmVyYXRvckVycm9yKG1zZzogc3RyaW5nKSB7XG4gICAgeWllbGQgMTtcbiAgICB0aHJvdyBuZXcgRXJyb3IobXNnKTtcbn1cblxuLyoqXG4gKiBOb3Qgc3VwcG9ydGVkLlxuICogQHJlbWFya3NcbiAqIEV4YW1wbGVzIG9mIGZ1bmN0aW9ucyBhcmd1bWVudHMgb3IgcmV0dXJuIHZhbHVlcyB0aGF0IGFyZSBub3Qgc3VwcG9ydGVkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcHJvbWlzZUFyZyhwcm9taXNlOiBQcm9taXNlPGFueT4pIHtcbiAgICByZXR1cm4gcHJvbWlzZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlkZW50aXR5RnVuY3Rpb24oZm46ICgpID0+IHZvaWQpIHtcbiAgICByZXR1cm4gZm47XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmdW5jdGlvblJldHVybigpIHtcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICBjb25zb2xlLmxvZyhcInJldHVybmVkIGEgZnVuY3Rpb25cIik7XG4gICAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlkZW50aXR5QnVmZmVyKGJ1ZjogQnVmZmVyKSB7XG4gICAgcmV0dXJuIGJ1Zjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlkZW50aXR5RGF0ZShhcmc6IERhdGUpIHtcbiAgICByZXR1cm4gYXJnO1xufVxuXG5leHBvcnQgY2xhc3MgQ2xzIHtcbiAgICBjb25zdHJ1Y3RvcigpIHt9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpZGVudGl0eUNsYXNzKGFyZzogQ2xzKSB7XG4gICAgcmV0dXJuIGFyZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNsYXNzUmV0dXJuKCkge1xuICAgIHJldHVybiBuZXcgQ2xzKCk7XG59XG4iXX0= |
\ | No newline at end of file |