1 | ;
|
2 | Object.defineProperty(exports, "__esModule", { value: true });
|
3 | const tslib_1 = require("tslib");
|
4 | // tslint:disable strict-type-predicates
|
5 | const client_common_1 = require("@neo-one/client-common");
|
6 | const utils_1 = require("@neo-one/utils");
|
7 | const bignumber_js_1 = tslib_1.__importDefault(require("bignumber.js"));
|
8 | const lodash_1 = tslib_1.__importDefault(require("lodash"));
|
9 | const errors_1 = require("./errors");
|
10 | exports.assertString = (name, param) => {
|
11 | if (param == undefined || typeof param !== 'string') {
|
12 | throw new errors_1.InvalidArgumentError('string', name, param);
|
13 | }
|
14 | return param;
|
15 | };
|
16 | exports.assertBoolean = (name, value) => {
|
17 | if (value == undefined || typeof value !== 'boolean') {
|
18 | throw new errors_1.InvalidArgumentError('boolean', name, value);
|
19 | }
|
20 | return value;
|
21 | };
|
22 | exports.assertNullableBoolean = (name, value) => {
|
23 | if (value == undefined) {
|
24 | return undefined;
|
25 | }
|
26 | return exports.assertBoolean(name, value);
|
27 | };
|
28 | exports.assertNumber = (name, value) => {
|
29 | if (value == undefined || typeof value !== 'number') {
|
30 | throw new errors_1.InvalidArgumentError('number', name, value);
|
31 | }
|
32 | return value;
|
33 | };
|
34 | exports.assertAddress = (name, addressIn) => {
|
35 | const address = exports.assertString(name, addressIn);
|
36 | try {
|
37 | client_common_1.addressToScriptHash(address);
|
38 | return address;
|
39 | }
|
40 | catch (_a) {
|
41 | try {
|
42 | return client_common_1.scriptHashToAddress(address);
|
43 | }
|
44 | catch (_b) {
|
45 | throw new errors_1.InvalidArgumentError('Address', name, address);
|
46 | }
|
47 | }
|
48 | };
|
49 | exports.assertHash256 = (name, hash) => {
|
50 | const value = exports.assertString(name, hash);
|
51 | try {
|
52 | return client_common_1.common.uInt256ToString(client_common_1.common.stringToUInt256(value));
|
53 | }
|
54 | catch (_a) {
|
55 | throw new errors_1.InvalidArgumentError('Hash256', name, value);
|
56 | }
|
57 | };
|
58 | exports.assertBuffer = (name, buffer) => {
|
59 | const value = exports.assertString(name, buffer);
|
60 | if (Buffer.from(value, 'hex').toString('hex') !== value.toLowerCase()) {
|
61 | throw new errors_1.InvalidArgumentError('Buffer', name, value);
|
62 | }
|
63 | return value;
|
64 | };
|
65 | exports.assertPublicKey = (name, publicKey) => {
|
66 | const value = exports.assertBuffer(name, publicKey);
|
67 | try {
|
68 | return client_common_1.common.ecPointToString(client_common_1.common.stringToECPoint(value));
|
69 | }
|
70 | catch (_a) {
|
71 | throw new errors_1.InvalidArgumentError('PublicKey', name, value);
|
72 | }
|
73 | };
|
74 | exports.assertBigNumber = (name, value) => {
|
75 | if (value == undefined || !bignumber_js_1.default.isBigNumber(value)) {
|
76 | throw new errors_1.InvalidArgumentError('BigNumber', name, value);
|
77 | }
|
78 | return value;
|
79 | };
|
80 | exports.assertNullableBigNumber = (name, value) => {
|
81 | if (value == undefined) {
|
82 | return undefined;
|
83 | }
|
84 | return exports.assertBigNumber(name, value);
|
85 | };
|
86 | exports.assertArray = (name, value) => {
|
87 | if (!Array.isArray(value)) {
|
88 | throw new errors_1.InvalidArgumentError('Array', name, value);
|
89 | }
|
90 | return value;
|
91 | };
|
92 | exports.assertNullableArray = (name, value) => {
|
93 | if (value == undefined) {
|
94 | return [];
|
95 | }
|
96 | return exports.assertArray(name, value);
|
97 | };
|
98 | exports.assertMap = (name, value) => {
|
99 | if (!(value instanceof Map)) {
|
100 | throw new errors_1.InvalidArgumentError('Map', name, value);
|
101 | }
|
102 | return value;
|
103 | };
|
104 | exports.assertObject = (name, value) => {
|
105 | if (!exports.isObject(value)) {
|
106 | throw new errors_1.InvalidArgumentError('Object', name, value);
|
107 | }
|
108 | return value;
|
109 | };
|
110 | exports.assertNullableMap = (name, value) => {
|
111 | if (value == undefined) {
|
112 | return new Map();
|
113 | }
|
114 | return exports.assertMap(name, value);
|
115 | };
|
116 | exports.isObject = (value) => value != undefined && typeof value === 'object';
|
117 | exports.assertProperty = (value, objectName, name, assertType) => {
|
118 | // tslint:disable-next-line no-any
|
119 | const valueAny = value;
|
120 | return assertType(`${objectName}.${name}`, valueAny[name]);
|
121 | };
|
122 | exports.assertUserAccountID = (name, value) => {
|
123 | if (!exports.isObject(value)) {
|
124 | throw new errors_1.InvalidArgumentError('UserAccountID', name, value);
|
125 | }
|
126 | return {
|
127 | network: exports.assertProperty(value, 'UserAccountID', 'network', exports.assertString),
|
128 | address: exports.assertProperty(value, 'UserAccountID', 'address', exports.assertAddress),
|
129 | };
|
130 | };
|
131 | exports.assertNullableUserAccountID = (name, value) => {
|
132 | if (value == undefined) {
|
133 | return undefined;
|
134 | }
|
135 | return exports.assertUserAccountID(name, value);
|
136 | };
|
137 | exports.assertUpdateAccountNameOptions = (name, value) => {
|
138 | if (!exports.isObject(value)) {
|
139 | throw new errors_1.InvalidArgumentError('UpdateAccountNameOptions', name, value);
|
140 | }
|
141 | return {
|
142 | id: exports.assertProperty(value, 'UpdateAccountNameOptions', 'id', exports.assertUserAccountID),
|
143 | name: exports.assertProperty(value, 'UpdateAccountNameOptions', 'name', exports.assertString),
|
144 | };
|
145 | };
|
146 | const ABI_TYPES = new Set([
|
147 | 'Signature',
|
148 | 'Boolean',
|
149 | 'Address',
|
150 | 'Hash256',
|
151 | 'Buffer',
|
152 | 'PublicKey',
|
153 | 'String',
|
154 | 'Array',
|
155 | 'Map',
|
156 | 'Object',
|
157 | 'Void',
|
158 | 'Integer',
|
159 | 'ForwardValue',
|
160 | ]);
|
161 | const assertABIType = (name, valueIn) => {
|
162 | const value = exports.assertString(name, valueIn);
|
163 | if (!ABI_TYPES.has(value)) {
|
164 | throw new errors_1.InvalidArgumentError('ABIType', name, value);
|
165 | }
|
166 | return value;
|
167 | };
|
168 | const assertABIProperties = (name, value) => {
|
169 | if (!exports.isObject(value)) {
|
170 | throw new errors_1.InvalidArgumentError('ABIReturn', name, value);
|
171 | }
|
172 | return lodash_1.default.fromPairs(Object.entries(value).map(([k, v]) => [exports.assertString(name, k), assertABIReturn(name, v)]));
|
173 | };
|
174 | const assertABIReturn = (name, value) => {
|
175 | if (!exports.isObject(value)) {
|
176 | throw new errors_1.InvalidArgumentError('ABIReturn', name, value);
|
177 | }
|
178 | const type = exports.assertProperty(value, 'ABIReturn', 'type', assertABIType);
|
179 | const optional = exports.assertProperty(value, 'ABIReturn', 'optional', exports.assertNullableBoolean);
|
180 | const forwardedValue = exports.assertProperty(value, 'ABIReturn', 'forwardedValue', exports.assertNullableBoolean);
|
181 | switch (type) {
|
182 | case 'Signature':
|
183 | return { type, optional, forwardedValue };
|
184 | case 'Boolean':
|
185 | return { type, optional, forwardedValue };
|
186 | case 'Address':
|
187 | return { type, optional, forwardedValue };
|
188 | case 'Hash256':
|
189 | return { type, optional, forwardedValue };
|
190 | case 'Buffer':
|
191 | return { type, optional, forwardedValue };
|
192 | case 'PublicKey':
|
193 | return { type, optional, forwardedValue };
|
194 | case 'String':
|
195 | return { type, optional, forwardedValue };
|
196 | case 'Array':
|
197 | return { type, value: exports.assertProperty(value, 'ABIReturn', 'value', assertABIReturn), optional, forwardedValue };
|
198 | case 'Map':
|
199 | return {
|
200 | type,
|
201 | key: exports.assertProperty(value, 'ABIReturn', 'key', assertABIReturn),
|
202 | value: exports.assertProperty(value, 'ABIReturn', 'value', assertABIReturn),
|
203 | optional,
|
204 | forwardedValue,
|
205 | };
|
206 | case 'Object':
|
207 | return {
|
208 | type,
|
209 | properties: exports.assertProperty(value, 'ABIReturn', 'properties', assertABIProperties),
|
210 | optional,
|
211 | forwardedValue,
|
212 | };
|
213 | case 'Void':
|
214 | return { type, optional, forwardedValue };
|
215 | case 'Integer':
|
216 | return { type, decimals: exports.assertProperty(value, 'ABIReturn', 'decimals', exports.assertNumber), optional, forwardedValue };
|
217 | case 'ForwardValue':
|
218 | return { type, optional, forwardedValue };
|
219 | default:
|
220 | /* istanbul ignore next */
|
221 | utils_1.utils.assertNever(type);
|
222 | /* istanbul ignore next */
|
223 | throw new Error('For TS');
|
224 | }
|
225 | };
|
226 | const assertABIDefaultType = (name, valueIn) => {
|
227 | const value = exports.assertString(name, valueIn);
|
228 | switch (value) {
|
229 | case 'sender':
|
230 | return 'sender';
|
231 | default:
|
232 | throw new errors_1.InvalidArgumentError('ABIDefaultType', name, value);
|
233 | }
|
234 | };
|
235 | const assertNullableABIDefault = (name, value) => {
|
236 | if (value == undefined) {
|
237 | return undefined;
|
238 | }
|
239 | if (!exports.isObject(value)) {
|
240 | throw new errors_1.InvalidArgumentError('ABIDefault', name, value);
|
241 | }
|
242 | const type = exports.assertProperty(value, 'ABIDefault', 'type', assertABIDefaultType);
|
243 | switch (type) {
|
244 | case 'sender':
|
245 | return { type: 'sender' };
|
246 | default:
|
247 | throw new errors_1.InvalidArgumentError('ABIDefaultType', name, value);
|
248 | }
|
249 | };
|
250 | const assertABIParameter = (propName, value) => {
|
251 | if (!exports.isObject(value)) {
|
252 | throw new errors_1.InvalidArgumentError('ABIParameter', propName, value);
|
253 | }
|
254 | const type = exports.assertProperty(value, 'ABIParameter', 'type', assertABIType);
|
255 | const name = exports.assertProperty(value, 'ABIParameter', 'name', exports.assertString);
|
256 | const optional = exports.assertProperty(value, 'ABIParameter', 'optional', exports.assertNullableBoolean);
|
257 | const rest = exports.assertProperty(value, 'ABIParameter', 'rest', exports.assertNullableBoolean);
|
258 | const defaultValue = exports.assertProperty(value, 'ABIParameter', 'default', assertNullableABIDefault);
|
259 | const forwardedValue = exports.assertProperty(value, 'ABIParameter', 'forwardedValue', exports.assertNullableBoolean);
|
260 | switch (type) {
|
261 | case 'Signature':
|
262 | return { type, name, optional, default: defaultValue, forwardedValue, rest };
|
263 | case 'Boolean':
|
264 | return { type, name, optional, default: defaultValue, forwardedValue, rest };
|
265 | case 'Address':
|
266 | return { type, name, optional, default: defaultValue, forwardedValue, rest };
|
267 | case 'Hash256':
|
268 | return { type, name, optional, default: defaultValue, forwardedValue, rest };
|
269 | case 'Buffer':
|
270 | return { type, name, optional, default: defaultValue, forwardedValue, rest };
|
271 | case 'PublicKey':
|
272 | return { type, name, optional, default: defaultValue, forwardedValue, rest };
|
273 | case 'String':
|
274 | return { type, name, optional, default: defaultValue, forwardedValue, rest };
|
275 | case 'Array':
|
276 | return {
|
277 | type,
|
278 | name,
|
279 | optional,
|
280 | default: defaultValue,
|
281 | value: exports.assertProperty(value, 'ABIParameter', 'value', assertABIReturn),
|
282 | forwardedValue,
|
283 | rest,
|
284 | };
|
285 | case 'Map':
|
286 | return {
|
287 | type,
|
288 | name,
|
289 | optional,
|
290 | default: defaultValue,
|
291 | key: exports.assertProperty(value, 'ABIParameter', 'key', assertABIReturn),
|
292 | value: exports.assertProperty(value, 'ABIParameter', 'value', assertABIReturn),
|
293 | forwardedValue,
|
294 | rest,
|
295 | };
|
296 | case 'Object':
|
297 | return {
|
298 | type,
|
299 | name,
|
300 | optional,
|
301 | default: defaultValue,
|
302 | properties: exports.assertProperty(value, 'ABIParameter', 'properties', assertABIProperties),
|
303 | forwardedValue,
|
304 | rest,
|
305 | };
|
306 | case 'Void':
|
307 | return { type, name, optional, default: defaultValue, forwardedValue, rest };
|
308 | case 'Integer':
|
309 | return {
|
310 | type,
|
311 | name,
|
312 | optional,
|
313 | default: defaultValue,
|
314 | decimals: exports.assertProperty(value, 'ABIParameter', 'decimals', exports.assertNumber),
|
315 | forwardedValue,
|
316 | };
|
317 | case 'ForwardValue':
|
318 | return { type, name, optional, default: defaultValue, forwardedValue, rest };
|
319 | default:
|
320 | /* istanbul ignore next */
|
321 | utils_1.utils.assertNever(type);
|
322 | /* istanbul ignore next */
|
323 | throw new Error('For TS');
|
324 | }
|
325 | };
|
326 | const assertABIFunction = (name, value) => {
|
327 | if (!exports.isObject(value)) {
|
328 | throw new errors_1.InvalidArgumentError('ABIFunction', name, value);
|
329 | }
|
330 | return {
|
331 | name: exports.assertProperty(value, 'ABIFunction', 'name', exports.assertString),
|
332 | parameters: exports.assertProperty(value, 'ABIFunction', 'parameters', exports.assertNullableArray).map((parameter) => assertABIParameter('ABIFunction.parameters', parameter)),
|
333 | returnType: exports.assertProperty(value, 'ABIFunction', 'returnType', assertABIReturn),
|
334 | constant: exports.assertProperty(value, 'ABIFunction', 'constant', exports.assertNullableBoolean),
|
335 | send: exports.assertProperty(value, 'ABIFunction', 'send', exports.assertNullableBoolean),
|
336 | sendUnsafe: exports.assertProperty(value, 'ABIFunction', 'sendUnsafe', exports.assertNullableBoolean),
|
337 | receive: exports.assertProperty(value, 'ABIFunction', 'receive', exports.assertNullableBoolean),
|
338 | claim: exports.assertProperty(value, 'ABIFunction', 'claim', exports.assertNullableBoolean),
|
339 | refundAssets: exports.assertProperty(value, 'ABIFunction', 'refundAssets', exports.assertNullableBoolean),
|
340 | completeSend: exports.assertProperty(value, 'ABIFunction', 'completeSend', exports.assertNullableBoolean),
|
341 | };
|
342 | };
|
343 | const assertABIEvent = (name, value) => {
|
344 | if (!exports.isObject(value)) {
|
345 | throw new errors_1.InvalidArgumentError('ABIEvent', name, value);
|
346 | }
|
347 | return {
|
348 | name: exports.assertProperty(value, 'ABIEvent', 'name', exports.assertString),
|
349 | parameters: exports.assertProperty(value, 'ABIEvent', 'parameters', exports.assertNullableArray).map((parameter) => assertABIParameter('ABIEvent.parameters', parameter)),
|
350 | };
|
351 | };
|
352 | exports.assertABI = (name, value) => {
|
353 | if (!exports.isObject(value)) {
|
354 | throw new errors_1.InvalidArgumentError('ABI', name, value);
|
355 | }
|
356 | return {
|
357 | functions: exports.assertProperty(value, 'ABI', 'functions', exports.assertNullableArray).map((func) => assertABIFunction('ABI.functions', func)),
|
358 | events: exports.assertProperty(value, 'ABI', 'events', exports.assertNullableArray).map((func) => assertABIEvent('ABI.events', func)),
|
359 | };
|
360 | };
|
361 | const assertSmartContractNetworkDefinition = (name, value) => {
|
362 | if (!exports.isObject(value)) {
|
363 | throw new errors_1.InvalidArgumentError('SmartContractNetworkDefinition', name, value);
|
364 | }
|
365 | return {
|
366 | address: exports.assertProperty(value, 'SmartContractNetworkDefinition', 'address', exports.assertAddress),
|
367 | };
|
368 | };
|
369 | const assertSmartContractNetworksDefinition = (name, value) => {
|
370 | if (!exports.isObject(value)) {
|
371 | throw new errors_1.InvalidArgumentError('SmartContractNetworksDefinition', name, value);
|
372 | }
|
373 | return lodash_1.default.mapValues(value, (val) => assertSmartContractNetworkDefinition('SmartContractNetworksDefinition', val));
|
374 | };
|
375 | // tslint:disable-next-line no-any
|
376 | const isPromise = (value) =>
|
377 | // tslint:disable-next-line no-any
|
378 | typeof value === 'object' && value.then !== undefined;
|
379 | exports.assertSourceMaps = (name, value) => {
|
380 | if (value == undefined) {
|
381 | return undefined;
|
382 | }
|
383 | if (!isPromise(value)) {
|
384 | throw new errors_1.InvalidArgumentError('SourceMaps', name, value);
|
385 | }
|
386 | return value;
|
387 | };
|
388 | exports.assertSmartContractDefinition = (name, value) => {
|
389 | if (!exports.isObject(value)) {
|
390 | throw new errors_1.InvalidArgumentError('SmartContractDefinition', name, value);
|
391 | }
|
392 | return {
|
393 | networks: exports.assertProperty(value, 'SmartContractDefinition', 'networks', assertSmartContractNetworksDefinition),
|
394 | abi: exports.assertProperty(value, 'SmartContractDefinition', 'abi', exports.assertABI),
|
395 | sourceMaps: exports.assertProperty(value, 'SmartContractDefinition', 'sourceMaps', exports.assertSourceMaps),
|
396 | };
|
397 | };
|
398 | const assertScriptBuilderParam = (name, value) => {
|
399 | if (value == undefined) {
|
400 | throw new errors_1.InvalidArgumentError('ScriptBuilderParam', name, value);
|
401 | }
|
402 | // tslint:disable-next-line no-any
|
403 | return value;
|
404 | };
|
405 | const assertNullableScriptBuilderParam = (name, value) => {
|
406 | if (value == undefined) {
|
407 | return undefined;
|
408 | }
|
409 | return assertScriptBuilderParam(name, value);
|
410 | };
|
411 | const assertParam = (name, value) => {
|
412 | if (value == undefined) {
|
413 | throw new errors_1.InvalidArgumentError('Param', name, value);
|
414 | }
|
415 | // tslint:disable-next-line no-any
|
416 | return value;
|
417 | };
|
418 | const assertNullableParam = (name, value) => {
|
419 | if (value == undefined) {
|
420 | return undefined;
|
421 | }
|
422 | return assertParam(name, value);
|
423 | };
|
424 | exports.assertForwardValue = (name, value) => {
|
425 | if (!exports.isObject(value)) {
|
426 | throw new errors_1.InvalidArgumentError('ForwardValue', name, value);
|
427 | }
|
428 | return {
|
429 | name: exports.assertProperty(value, 'ForwardValue', 'name', exports.assertString),
|
430 | converted: exports.assertProperty(value, 'ForwardValue', 'converted', assertNullableScriptBuilderParam),
|
431 | param: exports.assertProperty(value, 'ForwardValue', 'param', assertNullableParam),
|
432 | };
|
433 | };
|
434 | exports.assertTransfer = (name, value) => {
|
435 | if (!exports.isObject(value)) {
|
436 | throw new errors_1.InvalidArgumentError('Transfer', name, value);
|
437 | }
|
438 | return {
|
439 | amount: exports.assertProperty(value, 'Transfer', 'amount', exports.assertBigNumber),
|
440 | asset: exports.assertProperty(value, 'Transfer', 'asset', exports.assertHash256),
|
441 | to: exports.assertProperty(value, 'Transfer', 'to', exports.assertAddress),
|
442 | };
|
443 | };
|
444 | exports.assertPrivateKey = (name, valueIn) => {
|
445 | const value = exports.assertString(name, valueIn);
|
446 | try {
|
447 | client_common_1.privateKeyToPublicKey(value);
|
448 | return value;
|
449 | }
|
450 | catch (_a) {
|
451 | try {
|
452 | return client_common_1.wifToPrivateKey(value);
|
453 | }
|
454 | catch (_b) {
|
455 | throw new errors_1.InvalidArgumentError('PrivateKey', name, value);
|
456 | }
|
457 | }
|
458 | };
|
459 | exports.assertTransfers = (name, valueIn) => {
|
460 | const value = exports.assertArray(name, valueIn);
|
461 | return value.map((val) => exports.assertTransfer(name, val));
|
462 | };
|
463 | const assertAttributeUsage = (name, valueIn) => {
|
464 | const value = exports.assertString(name, valueIn);
|
465 | try {
|
466 | return client_common_1.assertAttributeUsageJSON(value);
|
467 | }
|
468 | catch (_a) {
|
469 | throw new errors_1.InvalidArgumentError('AttributeUsage', name, value);
|
470 | }
|
471 | };
|
472 | exports.assertAttribute = (name, attribute) => {
|
473 | if (!exports.isObject(attribute)) {
|
474 | throw new errors_1.InvalidArgumentError('Attribute', name, attribute);
|
475 | }
|
476 | const usage = exports.assertProperty(attribute, 'Attribute', 'usage', assertAttributeUsage);
|
477 | switch (usage) {
|
478 | case 'ContractHash':
|
479 | case 'Vote':
|
480 | case 'Hash1':
|
481 | case 'Hash2':
|
482 | case 'Hash3':
|
483 | case 'Hash4':
|
484 | case 'Hash5':
|
485 | case 'Hash6':
|
486 | case 'Hash7':
|
487 | case 'Hash8':
|
488 | case 'Hash9':
|
489 | case 'Hash10':
|
490 | case 'Hash11':
|
491 | case 'Hash12':
|
492 | case 'Hash13':
|
493 | case 'Hash14':
|
494 | case 'Hash15':
|
495 | return {
|
496 | usage,
|
497 | data: exports.assertProperty(attribute, 'Attribute', 'data', exports.assertHash256),
|
498 | };
|
499 | case 'Script':
|
500 | return {
|
501 | usage,
|
502 | data: exports.assertProperty(attribute, 'Attribute', 'data', exports.assertAddress),
|
503 | };
|
504 | case 'ECDH02':
|
505 | case 'ECDH03':
|
506 | return {
|
507 | usage,
|
508 | data: exports.assertProperty(attribute, 'Attribute', 'data', exports.assertPublicKey),
|
509 | };
|
510 | case 'DescriptionUrl':
|
511 | case 'Description':
|
512 | case 'Remark':
|
513 | case 'Remark1':
|
514 | case 'Remark2':
|
515 | case 'Remark3':
|
516 | case 'Remark4':
|
517 | case 'Remark5':
|
518 | case 'Remark6':
|
519 | case 'Remark7':
|
520 | case 'Remark8':
|
521 | case 'Remark9':
|
522 | case 'Remark10':
|
523 | case 'Remark11':
|
524 | case 'Remark12':
|
525 | case 'Remark13':
|
526 | case 'Remark14':
|
527 | case 'Remark15':
|
528 | return {
|
529 | usage,
|
530 | data: exports.assertProperty(attribute, 'Attribute', 'data', exports.assertBuffer),
|
531 | };
|
532 | default:
|
533 | /* istanbul ignore next */
|
534 | utils_1.utils.assertNever(usage);
|
535 | /* istanbul ignore next */
|
536 | throw new Error('For TS');
|
537 | }
|
538 | };
|
539 | exports.assertTransactionOptions = (name, options) => {
|
540 | if (options == undefined) {
|
541 | return {};
|
542 | }
|
543 | if (!exports.isObject(options)) {
|
544 | throw new errors_1.InvalidArgumentError('TransactionOptions', name, options);
|
545 | }
|
546 | return {
|
547 | from: exports.assertProperty(options, 'TransactionOptions', 'from', exports.assertNullableUserAccountID),
|
548 | attributes: exports.assertProperty(options, 'TransactionOptions', 'attributes', exports.assertNullableArray).map((value) => exports.assertAttribute('TransactionOption.attributes', value)),
|
549 | networkFee: exports.assertProperty(options, 'TransactionOptions', 'networkFee', exports.assertNullableBigNumber),
|
550 | systemFee: exports.assertProperty(options, 'TransactionOptions', 'systemFee', exports.assertNullableBigNumber),
|
551 | // tslint:disable-next-line no-any
|
552 | monitor: options.monitor,
|
553 | };
|
554 | };
|
555 |
|
556 | //# sourceMappingURL=data:application/json;charset=utf8;base64,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VUFBVSxFQUFFLHNCQUFjLENBQUMsT0FBTyxFQUFFLG9CQUFvQixFQUFFLFlBQVksRUFBRSwyQkFBbUIsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQ3pHLHVCQUFlLENBQUMsOEJBQThCLEVBQUUsS0FBSyxDQUFDLENBQ3ZEO1FBQ0QsVUFBVSxFQUFFLHNCQUFjLENBQUMsT0FBTyxFQUFFLG9CQUFvQixFQUFFLFlBQVksRUFBRSwrQkFBdUIsQ0FBQztRQUNoRyxTQUFTLEVBQUUsc0JBQWMsQ0FBQyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsV0FBVyxFQUFFLCtCQUF1QixDQUFDO1FBQzlGLGtDQUFrQztRQUNsQyxPQUFPLEVBQUcsT0FBZSxDQUFDLE9BQU87S0FDbEMsQ0FBQztBQUNKLENBQUMsQ0FBQyIsImZpbGUiOiJuZW8tb25lLWNsaWVudC1jb3JlL3NyYy9hcmdzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gdHNsaW50OmRpc2FibGUgc3RyaWN0LXR5cGUtcHJlZGljYXRlc1xuaW1wb3J0IHtcbiAgQUJJLFxuICBBQklEZWZhdWx0LFxuICBBQklEZWZhdWx0VHlwZSxcbiAgQUJJRXZlbnQsXG4gIEFCSUZ1bmN0aW9uLFxuICBBQklQYXJhbWV0ZXIsXG4gIEFCSVJldHVybixcbiAgQWRkcmVzc1N0cmluZyxcbiAgYWRkcmVzc1RvU2NyaXB0SGFzaCxcbiAgYXNzZXJ0QXR0cmlidXRlVXNhZ2VKU09OLFxuICBBdHRyaWJ1dGUsXG4gIEF0dHJpYnV0ZVVzYWdlLFxuICBCdWZmZXJTdHJpbmcsXG4gIGNvbW1vbixcbiAgRm9yd2FyZFZhbHVlLFxuICBIYXNoMjU2U3RyaW5nLFxuICBQYXJhbSxcbiAgUHJpdmF0ZUtleVN0cmluZyxcbiAgcHJpdmF0ZUtleVRvUHVibGljS2V5LFxuICBQdWJsaWNLZXlTdHJpbmcsXG4gIFNjcmlwdEJ1aWxkZXJQYXJhbSxcbiAgc2NyaXB0SGFzaFRvQWRkcmVzcyxcbiAgU21hcnRDb250cmFjdERlZmluaXRpb24sXG4gIFNtYXJ0Q29udHJhY3ROZXR3b3JrRGVmaW5pdGlvbixcbiAgU21hcnRDb250cmFjdE5ldHdvcmtzRGVmaW5pdGlvbixcbiAgU291cmNlTWFwcyxcbiAgVHJhbnNhY3Rpb25PcHRpb25zLFxuICBUcmFuc2ZlcixcbiAgVXBkYXRlQWNjb3VudE5hbWVPcHRpb25zLFxuICBVc2VyQWNjb3VudElELFxuICB3aWZUb1ByaXZhdGVLZXksXG59IGZyb20gJ0BuZW8tb25lL2NsaWVudC1jb21tb24nO1xuaW1wb3J0IHsgdXRpbHMgfSBmcm9tICdAbmVvLW9uZS91dGlscyc7XG5pbXBvcnQgQmlnTnVtYmVyIGZyb20gJ2JpZ251bWJlci5qcyc7XG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgSW52YWxpZEFyZ3VtZW50RXJyb3IgfSBmcm9tICcuL2Vycm9ycyc7XG5cbmV4cG9ydCBjb25zdCBhc3NlcnRTdHJpbmcgPSAobmFtZTogc3RyaW5nLCBwYXJhbT86IHVua25vd24pOiBzdHJpbmcgPT4ge1xuICBpZiAocGFyYW0gPT0gdW5kZWZpbmVkIHx8IHR5cGVvZiBwYXJhbSAhPT0gJ3N0cmluZycpIHtcbiAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ3N0cmluZycsIG5hbWUsIHBhcmFtKTtcbiAgfVxuXG4gIHJldHVybiBwYXJhbTtcbn07XG5cbmV4cG9ydCBjb25zdCBhc3NlcnRCb29sZWFuID0gKG5hbWU6IHN0cmluZywgdmFsdWU/OiB1bmtub3duKTogYm9vbGVhbiA9PiB7XG4gIGlmICh2YWx1ZSA9PSB1bmRlZmluZWQgfHwgdHlwZW9mIHZhbHVlICE9PSAnYm9vbGVhbicpIHtcbiAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2Jvb2xlYW4nLCBuYW1lLCB2YWx1ZSk7XG4gIH1cblxuICByZXR1cm4gdmFsdWU7XG59O1xuXG5leHBvcnQgY29uc3QgYXNzZXJ0TnVsbGFibGVCb29sZWFuID0gKG5hbWU6IHN0cmluZywgdmFsdWU/OiB1bmtub3duKTogYm9vbGVhbiB8IHVuZGVmaW5lZCA9PiB7XG4gIGlmICh2YWx1ZSA9PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgcmV0dXJuIGFzc2VydEJvb2xlYW4obmFtZSwgdmFsdWUpO1xufTtcblxuZXhwb3J0IGNvbnN0IGFzc2VydE51bWJlciA9IChuYW1lOiBzdHJpbmcsIHZhbHVlPzogdW5rbm93bik6IG51bWJlciA9PiB7XG4gIGlmICh2YWx1ZSA9PSB1bmRlZmluZWQgfHwgdHlwZW9mIHZhbHVlICE9PSAnbnVtYmVyJykge1xuICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignbnVtYmVyJywgbmFtZSwgdmFsdWUpO1xuICB9XG5cbiAgcmV0dXJuIHZhbHVlO1xufTtcblxuZXhwb3J0IGNvbnN0IGFzc2VydEFkZHJlc3MgPSAobmFtZTogc3RyaW5nLCBhZGRyZXNzSW4/OiB1bmtub3duKTogQWRkcmVzc1N0cmluZyA9PiB7XG4gIGNvbnN0IGFkZHJlc3MgPSBhc3NlcnRTdHJpbmcobmFtZSwgYWRkcmVzc0luKTtcblxuICB0cnkge1xuICAgIGFkZHJlc3NUb1NjcmlwdEhhc2goYWRkcmVzcyk7XG5cbiAgICByZXR1cm4gYWRkcmVzcztcbiAgfSBjYXRjaCB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBzY3JpcHRIYXNoVG9BZGRyZXNzKGFkZHJlc3MpO1xuICAgIH0gY2F0Y2gge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdBZGRyZXNzJywgbmFtZSwgYWRkcmVzcyk7XG4gICAgfVxuICB9XG59O1xuXG5leHBvcnQgY29uc3QgYXNzZXJ0SGFzaDI1NiA9IChuYW1lOiBzdHJpbmcsIGhhc2g/OiB1bmtub3duKTogSGFzaDI1NlN0cmluZyA9PiB7XG4gIGNvbnN0IHZhbHVlID0gYXNzZXJ0U3RyaW5nKG5hbWUsIGhhc2gpO1xuXG4gIHRyeSB7XG4gICAgcmV0dXJuIGNvbW1vbi51SW50MjU2VG9TdHJpbmcoY29tbW9uLnN0cmluZ1RvVUludDI1Nih2YWx1ZSkpO1xuICB9IGNhdGNoIHtcbiAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ0hhc2gyNTYnLCBuYW1lLCB2YWx1ZSk7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBhc3NlcnRCdWZmZXIgPSAobmFtZTogc3RyaW5nLCBidWZmZXI/OiB1bmtub3duKTogQnVmZmVyU3RyaW5nID0+IHtcbiAgY29uc3QgdmFsdWUgPSBhc3NlcnRTdHJpbmcobmFtZSwgYnVmZmVyKTtcbiAgaWYgKEJ1ZmZlci5mcm9tKHZhbHVlLCAnaGV4JykudG9TdHJpbmcoJ2hleCcpICE9PSB2YWx1ZS50b0xvd2VyQ2FzZSgpKSB7XG4gICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdCdWZmZXInLCBuYW1lLCB2YWx1ZSk7XG4gIH1cblxuICByZXR1cm4gdmFsdWU7XG59O1xuXG5leHBvcnQgY29uc3QgYXNzZXJ0UHVibGljS2V5ID0gKG5hbWU6IHN0cmluZywgcHVibGljS2V5PzogdW5rbm93bik6IFB1YmxpY0tleVN0cmluZyA9PiB7XG4gIGNvbnN0IHZhbHVlID0gYXNzZXJ0QnVmZmVyKG5hbWUsIHB1YmxpY0tleSk7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGNvbW1vbi5lY1BvaW50VG9TdHJpbmcoY29tbW9uLnN0cmluZ1RvRUNQb2ludCh2YWx1ZSkpO1xuICB9IGNhdGNoIHtcbiAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ1B1YmxpY0tleScsIG5hbWUsIHZhbHVlKTtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGFzc2VydEJpZ051bWJlciA9IChuYW1lOiBzdHJpbmcsIHZhbHVlPzogdW5rbm93bik6IEJpZ051bWJlciA9PiB7XG4gIGlmICh2YWx1ZSA9PSB1bmRlZmluZWQgfHwgIUJpZ051bWJlci5pc0JpZ051bWJlcih2YWx1ZSkpIHtcbiAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ0JpZ051bWJlcicsIG5hbWUsIHZhbHVlKTtcbiAgfVxuXG4gIHJldHVybiB2YWx1ZTtcbn07XG5cbmV4cG9ydCBjb25zdCBhc3NlcnROdWxsYWJsZUJpZ051bWJlciA9IChuYW1lOiBzdHJpbmcsIHZhbHVlPzogdW5rbm93bik6IEJpZ051bWJlciB8IHVuZGVmaW5lZCA9PiB7XG4gIGlmICh2YWx1ZSA9PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgcmV0dXJuIGFzc2VydEJpZ051bWJlcihuYW1lLCB2YWx1ZSk7XG59O1xuXG5leHBvcnQgY29uc3QgYXNzZXJ0QXJyYXkgPSAobmFtZTogc3RyaW5nLCB2YWx1ZT86IHVua25vd24pOiByZWFkb25seSB1bmtub3duW10gPT4ge1xuICBpZiAoIUFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdBcnJheScsIG5hbWUsIHZhbHVlKTtcbiAgfVxuXG4gIHJldHVybiB2YWx1ZTtcbn07XG5cbmV4cG9ydCBjb25zdCBhc3NlcnROdWxsYWJsZUFycmF5ID0gKG5hbWU6IHN0cmluZywgdmFsdWU/OiB1bmtub3duKTogcmVhZG9ubHkgdW5rbm93bltdID0+IHtcbiAgaWYgKHZhbHVlID09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIHJldHVybiBhc3NlcnRBcnJheShuYW1lLCB2YWx1ZSk7XG59O1xuXG5leHBvcnQgY29uc3QgYXNzZXJ0TWFwID0gKG5hbWU6IHN0cmluZywgdmFsdWU/OiB1bmtub3duKTogUmVhZG9ubHlNYXA8dW5rbm93biwgdW5rbm93bj4gPT4ge1xuICBpZiAoISh2YWx1ZSBpbnN0YW5jZW9mIE1hcCkpIHtcbiAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ01hcCcsIG5hbWUsIHZhbHVlKTtcbiAgfVxuXG4gIHJldHVybiB2YWx1ZTtcbn07XG5cbmV4cG9ydCBjb25zdCBhc3NlcnRPYmplY3QgPSAobmFtZTogc3RyaW5nLCB2YWx1ZT86IHVua25vd24pOiB7IHJlYWRvbmx5IFtrZXk6IHN0cmluZ106IHVua25vd24gfSA9PiB7XG4gIGlmICghaXNPYmplY3QodmFsdWUpKSB7XG4gICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdPYmplY3QnLCBuYW1lLCB2YWx1ZSk7XG4gIH1cblxuICByZXR1cm4gdmFsdWUgYXMgeyByZWFkb25seSBba2V5OiBzdHJpbmddOiB1bmtub3duIH07XG59O1xuXG5leHBvcnQgY29uc3QgYXNzZXJ0TnVsbGFibGVNYXAgPSAobmFtZTogc3RyaW5nLCB2YWx1ZT86IHVua25vd24pOiBSZWFkb25seU1hcDx1bmtub3duLCB1bmtub3duPiA9PiB7XG4gIGlmICh2YWx1ZSA9PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gbmV3IE1hcCgpO1xuICB9XG5cbiAgcmV0dXJuIGFzc2VydE1hcChuYW1lLCB2YWx1ZSk7XG59O1xuXG5leHBvcnQgY29uc3QgaXNPYmplY3QgPSAodmFsdWU/OiB1bmtub3duKTogdmFsdWUgaXMgb2JqZWN0ID0+IHZhbHVlICE9IHVuZGVmaW5lZCAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnO1xuZXhwb3J0IGNvbnN0IGFzc2VydFByb3BlcnR5ID0gPFQsIE5hbWUgZXh0ZW5kcyBzdHJpbmcsIFA+KFxuICB2YWx1ZTogVCxcbiAgb2JqZWN0TmFtZTogc3RyaW5nLFxuICBuYW1lOiBOYW1lLFxuICBhc3NlcnRUeXBlOiAobmFtZTogc3RyaW5nLCB2PzogdW5rbm93bikgPT4gUCxcbik6IFAgPT4ge1xuICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmUgbm8tYW55XG4gIGNvbnN0IHZhbHVlQW55OiBhbnkgPSB2YWx1ZTtcblxuICByZXR1cm4gYXNzZXJ0VHlwZShgJHtvYmplY3ROYW1lfS4ke25hbWV9YCwgdmFsdWVBbnlbbmFtZV0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGFzc2VydFVzZXJBY2NvdW50SUQgPSAobmFtZTogc3RyaW5nLCB2YWx1ZT86IHVua25vd24pOiBVc2VyQWNjb3VudElEID0+IHtcbiAgaWYgKCFpc09iamVjdCh2YWx1ZSkpIHtcbiAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ1VzZXJBY2NvdW50SUQnLCBuYW1lLCB2YWx1ZSk7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIG5ldHdvcms6IGFzc2VydFByb3BlcnR5KHZhbHVlLCAnVXNlckFjY291bnRJRCcsICduZXR3b3JrJywgYXNzZXJ0U3RyaW5nKSxcbiAgICBhZGRyZXNzOiBhc3NlcnRQcm9wZXJ0eSh2YWx1ZSwgJ1VzZXJBY2NvdW50SUQnLCAnYWRkcmVzcycsIGFzc2VydEFkZHJlc3MpLFxuICB9O1xufTtcblxuZXhwb3J0IGNvbnN0IGFzc2VydE51bGxhYmxlVXNlckFjY291bnRJRCA9IChuYW1lOiBzdHJpbmcsIHZhbHVlPzogdW5rbm93bik6IFVzZXJBY2NvdW50SUQgfCB1bmRlZmluZWQgPT4ge1xuICBpZiAodmFsdWUgPT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIHJldHVybiBhc3NlcnRVc2VyQWNjb3VudElEKG5hbWUsIHZhbHVlKTtcbn07XG5cbmV4cG9ydCBjb25zdCBhc3NlcnRVcGRhdGVBY2NvdW50TmFtZU9wdGlvbnMgPSAobmFtZTogc3RyaW5nLCB2YWx1ZT86IHVua25vd24pOiBVcGRhdGVBY2NvdW50TmFtZU9wdGlvbnMgPT4ge1xuICBpZiAoIWlzT2JqZWN0KHZhbHVlKSkge1xuICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignVXBkYXRlQWNjb3VudE5hbWVPcHRpb25zJywgbmFtZSwgdmFsdWUpO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBpZDogYXNzZXJ0UHJvcGVydHkodmFsdWUsICdVcGRhdGVBY2NvdW50TmFtZU9wdGlvbnMnLCAnaWQnLCBhc3NlcnRVc2VyQWNjb3VudElEKSxcbiAgICBuYW1lOiBhc3NlcnRQcm9wZXJ0eSh2YWx1ZSwgJ1VwZGF0ZUFjY291bnROYW1lT3B0aW9ucycsICduYW1lJywgYXNzZXJ0U3RyaW5nKSxcbiAgfTtcbn07XG5cbmNvbnN0IEFCSV9UWVBFUyA9IG5ldyBTZXQoW1xuICAnU2lnbmF0dXJlJyxcbiAgJ0Jvb2xlYW4nLFxuICAnQWRkcmVzcycsXG4gICdIYXNoMjU2JyxcbiAgJ0J1ZmZlcicsXG4gICdQdWJsaWNLZXknLFxuICAnU3RyaW5nJyxcbiAgJ0FycmF5JyxcbiAgJ01hcCcsXG4gICdPYmplY3QnLFxuICAnVm9pZCcsXG4gICdJbnRlZ2VyJyxcbiAgJ0ZvcndhcmRWYWx1ZScsXG5dKTtcblxuY29uc3QgYXNzZXJ0QUJJVHlwZSA9IChuYW1lOiBzdHJpbmcsIHZhbHVlSW4/OiB1bmtub3duKTogQUJJUmV0dXJuWyd0eXBlJ10gPT4ge1xuICBjb25zdCB2YWx1ZSA9IGFzc2VydFN0cmluZyhuYW1lLCB2YWx1ZUluKTtcblxuICBpZiAoIUFCSV9UWVBFUy5oYXModmFsdWUpKSB7XG4gICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdBQklUeXBlJywgbmFtZSwgdmFsdWUpO1xuICB9XG5cbiAgcmV0dXJuIHZhbHVlIGFzIEFCSVJldHVyblsndHlwZSddO1xufTtcblxuY29uc3QgYXNzZXJ0QUJJUHJvcGVydGllcyA9IChuYW1lOiBzdHJpbmcsIHZhbHVlPzogdW5rbm93bik6IHsgcmVhZG9ubHkgW2tleTogc3RyaW5nXTogQUJJUmV0dXJuIH0gPT4ge1xuICBpZiAoIWlzT2JqZWN0KHZhbHVlKSkge1xuICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignQUJJUmV0dXJuJywgbmFtZSwgdmFsdWUpO1xuICB9XG5cbiAgcmV0dXJuIF8uZnJvbVBhaXJzKE9iamVjdC5lbnRyaWVzKHZhbHVlKS5tYXAoKFtrLCB2XSkgPT4gW2Fzc2VydFN0cmluZyhuYW1lLCBrKSwgYXNzZXJ0QUJJUmV0dXJuKG5hbWUsIHYpXSkpO1xufTtcblxuY29uc3QgYXNzZXJ0QUJJUmV0dXJuID0gKG5hbWU6IHN0cmluZywgdmFsdWU/OiB1bmtub3duKTogQUJJUmV0dXJuID0+IHtcbiAgaWYgKCFpc09iamVjdCh2YWx1ZSkpIHtcbiAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ0FCSVJldHVybicsIG5hbWUsIHZhbHVlKTtcbiAgfVxuXG4gIGNvbnN0IHR5cGUgPSBhc3NlcnRQcm9wZXJ0eSh2YWx1ZSwgJ0FCSVJldHVybicsICd0eXBlJywgYXNzZXJ0QUJJVHlwZSk7XG4gIGNvbnN0IG9wdGlvbmFsID0gYXNzZXJ0UHJvcGVydHkodmFsdWUsICdBQklSZXR1cm4nLCAnb3B0aW9uYWwnLCBhc3NlcnROdWxsYWJsZUJvb2xlYW4pO1xuICBjb25zdCBmb3J3YXJkZWRWYWx1ZSA9IGFzc2VydFByb3BlcnR5KHZhbHVlLCAnQUJJUmV0dXJuJywgJ2ZvcndhcmRlZFZhbHVlJywgYXNzZXJ0TnVsbGFibGVCb29sZWFuKTtcbiAgc3dpdGNoICh0eXBlKSB7XG4gICAgY2FzZSAnU2lnbmF0dXJlJzpcbiAgICAgIHJldHVybiB7IHR5cGUsIG9wdGlvbmFsLCBmb3J3YXJkZWRWYWx1ZSB9O1xuICAgIGNhc2UgJ0Jvb2xlYW4nOlxuICAgICAgcmV0dXJuIHsgdHlwZSwgb3B0aW9uYWwsIGZvcndhcmRlZFZhbHVlIH07XG4gICAgY2FzZSAnQWRkcmVzcyc6XG4gICAgICByZXR1cm4geyB0eXBlLCBvcHRpb25hbCwgZm9yd2FyZGVkVmFsdWUgfTtcbiAgICBjYXNlICdIYXNoMjU2JzpcbiAgICAgIHJldHVybiB7IHR5cGUsIG9wdGlvbmFsLCBmb3J3YXJkZWRWYWx1ZSB9O1xuICAgIGNhc2UgJ0J1ZmZlcic6XG4gICAgICByZXR1cm4geyB0eXBlLCBvcHRpb25hbCwgZm9yd2FyZGVkVmFsdWUgfTtcbiAgICBjYXNlICdQdWJsaWNLZXknOlxuICAgICAgcmV0dXJuIHsgdHlwZSwgb3B0aW9uYWwsIGZvcndhcmRlZFZhbHVlIH07XG4gICAgY2FzZSAnU3RyaW5nJzpcbiAgICAgIHJldHVybiB7IHR5cGUsIG9wdGlvbmFsLCBmb3J3YXJkZWRWYWx1ZSB9O1xuICAgIGNhc2UgJ0FycmF5JzpcbiAgICAgIHJldHVybiB7IHR5cGUsIHZhbHVlOiBhc3NlcnRQcm9wZXJ0eSh2YWx1ZSwgJ0FCSVJldHVybicsICd2YWx1ZScsIGFzc2VydEFCSVJldHVybiksIG9wdGlvbmFsLCBmb3J3YXJkZWRWYWx1ZSB9O1xuICAgIGNhc2UgJ01hcCc6XG4gICAgICByZXR1cm4ge1xuICAgICAgICB0eXBlLFxuICAgICAgICBrZXk6IGFzc2VydFByb3BlcnR5KHZhbHVlLCAnQUJJUmV0dXJuJywgJ2tleScsIGFzc2VydEFCSVJldHVybiksXG4gICAgICAgIHZhbHVlOiBhc3NlcnRQcm9wZXJ0eSh2YWx1ZSwgJ0FCSVJldHVybicsICd2YWx1ZScsIGFzc2VydEFCSVJldHVybiksXG4gICAgICAgIG9wdGlvbmFsLFxuICAgICAgICBmb3J3YXJkZWRWYWx1ZSxcbiAgICAgIH07XG4gICAgY2FzZSAnT2JqZWN0JzpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHR5cGUsXG4gICAgICAgIHByb3BlcnRpZXM6IGFzc2VydFByb3BlcnR5KHZhbHVlLCAnQUJJUmV0dXJuJywgJ3Byb3BlcnRpZXMnLCBhc3NlcnRBQklQcm9wZXJ0aWVzKSxcbiAgICAgICAgb3B0aW9uYWwsXG4gICAgICAgIGZvcndhcmRlZFZhbHVlLFxuICAgICAgfTtcbiAgICBjYXNlICdWb2lkJzpcbiAgICAgIHJldHVybiB7IHR5cGUsIG9wdGlvbmFsLCBmb3J3YXJkZWRWYWx1ZSB9O1xuICAgIGNhc2UgJ0ludGVnZXInOlxuICAgICAgcmV0dXJuIHsgdHlwZSwgZGVjaW1hbHM6IGFzc2VydFByb3BlcnR5KHZhbHVlLCAnQUJJUmV0dXJuJywgJ2RlY2ltYWxzJywgYXNzZXJ0TnVtYmVyKSwgb3B0aW9uYWwsIGZvcndhcmRlZFZhbHVlIH07XG4gICAgY2FzZSAnRm9yd2FyZFZhbHVlJzpcbiAgICAgIHJldHVybiB7IHR5cGUsIG9wdGlvbmFsLCBmb3J3YXJkZWRWYWx1ZSB9O1xuICAgIGRlZmF1bHQ6XG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgICAgdXRpbHMuYXNzZXJ0TmV2ZXIodHlwZSk7XG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdGb3IgVFMnKTtcbiAgfVxufTtcblxuY29uc3QgYXNzZXJ0QUJJRGVmYXVsdFR5cGUgPSAobmFtZTogc3RyaW5nLCB2YWx1ZUluPzogdW5rbm93bik6IEFCSURlZmF1bHRUeXBlID0+IHtcbiAgY29uc3QgdmFsdWUgPSBhc3NlcnRTdHJpbmcobmFtZSwgdmFsdWVJbik7XG4gIHN3aXRjaCAodmFsdWUpIHtcbiAgICBjYXNlICdzZW5kZXInOlxuICAgICAgcmV0dXJuICdzZW5kZXInO1xuICAgIGRlZmF1bHQ6XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ0FCSURlZmF1bHRUeXBlJywgbmFtZSwgdmFsdWUpO1xuICB9XG59O1xuXG5jb25zdCBhc3NlcnROdWxsYWJsZUFCSURlZmF1bHQgPSAobmFtZTogc3RyaW5nLCB2YWx1ZT86IHVua25vd24pOiBBQklEZWZhdWx0IHwgdW5kZWZpbmVkID0+IHtcbiAgaWYgKHZhbHVlID09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBpZiAoIWlzT2JqZWN0KHZhbHVlKSkge1xuICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignQUJJRGVmYXVsdCcsIG5hbWUsIHZhbHVlKTtcbiAgfVxuXG4gIGNvbnN0IHR5cGUgPSBhc3NlcnRQcm9wZXJ0eSh2YWx1ZSwgJ0FCSURlZmF1bHQnLCAndHlwZScsIGFzc2VydEFCSURlZmF1bHRUeXBlKTtcbiAgc3dpdGNoICh0eXBlKSB7XG4gICAgY2FzZSAnc2VuZGVyJzpcbiAgICAgIHJldHVybiB7IHR5cGU6ICdzZW5kZXInIH07XG4gICAgZGVmYXVsdDpcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignQUJJRGVmYXVsdFR5cGUnLCBuYW1lLCB2YWx1ZSk7XG4gIH1cbn07XG5cbmNvbnN0IGFzc2VydEFCSVBhcmFtZXRlciA9IChwcm9wTmFtZTogc3RyaW5nLCB2YWx1ZT86IHVua25vd24pOiBBQklQYXJhbWV0ZXIgPT4ge1xuICBpZiAoIWlzT2JqZWN0KHZhbHVlKSkge1xuICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignQUJJUGFyYW1ldGVyJywgcHJvcE5hbWUsIHZhbHVlKTtcbiAgfVxuXG4gIGNvbnN0IHR5cGUgPSBhc3NlcnRQcm9wZXJ0eSh2YWx1ZSwgJ0FCSVBhcmFtZXRlcicsICd0eXBlJywgYXNzZXJ0QUJJVHlwZSk7XG4gIGNvbnN0IG5hbWUgPSBhc3NlcnRQcm9wZXJ0eSh2YWx1ZSwgJ0FCSVBhcmFtZXRlcicsICduYW1lJywgYXNzZXJ0U3RyaW5nKTtcbiAgY29uc3Qgb3B0aW9uYWwgPSBhc3NlcnRQcm9wZXJ0eSh2YWx1ZSwgJ0FCSVBhcmFtZXRlcicsICdvcHRpb25hbCcsIGFzc2VydE51bGxhYmxlQm9vbGVhbik7XG4gIGNvbnN0IHJlc3QgPSBhc3NlcnRQcm9wZXJ0eSh2YWx1ZSwgJ0FCSVBhcmFtZXRlcicsICdyZXN0JywgYXNzZXJ0TnVsbGFibGVCb29sZWFuKTtcbiAgY29uc3QgZGVmYXVsdFZhbHVlID0gYXNzZXJ0UHJvcGVydHkodmFsdWUsICdBQklQYXJhbWV0ZXInLCAnZGVmYXVsdCcsIGFzc2VydE51bGxhYmxlQUJJRGVmYXVsdCk7XG4gIGNvbnN0IGZvcndhcmRlZFZhbHVlID0gYXNzZXJ0UHJvcGVydHkodmFsdWUsICdBQklQYXJhbWV0ZXInLCAnZm9yd2FyZGVkVmFsdWUnLCBhc3NlcnROdWxsYWJsZUJvb2xlYW4pO1xuXG4gIHN3aXRjaCAodHlwZSkge1xuICAgIGNhc2UgJ1NpZ25hdHVyZSc6XG4gICAgICByZXR1cm4geyB0eXBlLCBuYW1lLCBvcHRpb25hbCwgZGVmYXVsdDogZGVmYXVsdFZhbHVlLCBmb3J3YXJkZWRWYWx1ZSwgcmVzdCB9O1xuICAgIGNhc2UgJ0Jvb2xlYW4nOlxuICAgICAgcmV0dXJuIHsgdHlwZSwgbmFtZSwgb3B0aW9uYWwsIGRlZmF1bHQ6IGRlZmF1bHRWYWx1ZSwgZm9yd2FyZGVkVmFsdWUsIHJlc3QgfTtcbiAgICBjYXNlICdBZGRyZXNzJzpcbiAgICAgIHJldHVybiB7IHR5cGUsIG5hbWUsIG9wdGlvbmFsLCBkZWZhdWx0OiBkZWZhdWx0VmFsdWUsIGZvcndhcmRlZFZhbHVlLCByZXN0IH07XG4gICAgY2FzZSAnSGFzaDI1Nic6XG4gICAgICByZXR1cm4geyB0eXBlLCBuYW1lLCBvcHRpb25hbCwgZGVmYXVsdDogZGVmYXVsdFZhbHVlLCBmb3J3YXJkZWRWYWx1ZSwgcmVzdCB9O1xuICAgIGNhc2UgJ0J1ZmZlcic6XG4gICAgICByZXR1cm4geyB0eXBlLCBuYW1lLCBvcHRpb25hbCwgZGVmYXVsdDogZGVmYXVsdFZhbHVlLCBmb3J3YXJkZWRWYWx1ZSwgcmVzdCB9O1xuICAgIGNhc2UgJ1B1YmxpY0tleSc6XG4gICAgICByZXR1cm4geyB0eXBlLCBuYW1lLCBvcHRpb25hbCwgZGVmYXVsdDogZGVmYXVsdFZhbHVlLCBmb3J3YXJkZWRWYWx1ZSwgcmVzdCB9O1xuICAgIGNhc2UgJ1N0cmluZyc6XG4gICAgICByZXR1cm4geyB0eXBlLCBuYW1lLCBvcHRpb25hbCwgZGVmYXVsdDogZGVmYXVsdFZhbHVlLCBmb3J3YXJkZWRWYWx1ZSwgcmVzdCB9O1xuICAgIGNhc2UgJ0FycmF5JzpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHR5cGUsXG4gICAgICAgIG5hbWUsXG4gICAgICAgIG9wdGlvbmFsLFxuICAgICAgICBkZWZhdWx0OiBkZWZhdWx0VmFsdWUsXG4gICAgICAgIHZhbHVlOiBhc3NlcnRQcm9wZXJ0eSh2YWx1ZSwgJ0FCSVBhcmFtZXRlcicsICd2YWx1ZScsIGFzc2VydEFCSVJldHVybiksXG4gICAgICAgIGZvcndhcmRlZFZhbHVlLFxuICAgICAgICByZXN0LFxuICAgICAgfTtcbiAgICBjYXNlICdNYXAnOlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdHlwZSxcbiAgICAgICAgbmFtZSxcbiAgICAgICAgb3B0aW9uYWwsXG4gICAgICAgIGRlZmF1bHQ6IGRlZmF1bHRWYWx1ZSxcbiAgICAgICAga2V5OiBhc3NlcnRQcm9wZXJ0eSh2YWx1ZSwgJ0FCSVBhcmFtZXRlcicsICdrZXknLCBhc3NlcnRBQklSZXR1cm4pLFxuICAgICAgICB2YWx1ZTogYXNzZXJ0UHJvcGVydHkodmFsdWUsICdBQklQYXJhbWV0ZXInLCAndmFsdWUnLCBhc3NlcnRBQklSZXR1cm4pLFxuICAgICAgICBmb3J3YXJkZWRWYWx1ZSxcbiAgICAgICAgcmVzdCxcbiAgICAgIH07XG4gICAgY2FzZSAnT2JqZWN0JzpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHR5cGUsXG4gICAgICAgIG5hbWUsXG4gICAgICAgIG9wdGlvbmFsLFxuICAgICAgICBkZWZhdWx0OiBkZWZhdWx0VmFsdWUsXG4gICAgICAgIHByb3BlcnRpZXM6IGFzc2VydFByb3BlcnR5KHZhbHVlLCAnQUJJUGFyYW1ldGVyJywgJ3Byb3BlcnRpZXMnLCBhc3NlcnRBQklQcm9wZXJ0aWVzKSxcbiAgICAgICAgZm9yd2FyZGVkVmFsdWUsXG4gICAgICAgIHJlc3QsXG4gICAgICB9O1xuICAgIGNhc2UgJ1ZvaWQnOlxuICAgICAgcmV0dXJuIHsgdHlwZSwgbmFtZSwgb3B0aW9uYWwsIGRlZmF1bHQ6IGRlZmF1bHRWYWx1ZSwgZm9yd2FyZGVkVmFsdWUsIHJlc3QgfTtcbiAgICBjYXNlICdJbnRlZ2VyJzpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHR5cGUsXG4gICAgICAgIG5hbWUsXG4gICAgICAgIG9wdGlvbmFsLFxuICAgICAgICBkZWZhdWx0OiBkZWZhdWx0VmFsdWUsXG4gICAgICAgIGRlY2ltYWxzOiBhc3NlcnRQcm9wZXJ0eSh2YWx1ZSwgJ0FCSVBhcmFtZXRlcicsICdkZWNpbWFscycsIGFzc2VydE51bWJlciksXG4gICAgICAgIGZvcndhcmRlZFZhbHVlLFxuICAgICAgfTtcbiAgICBjYXNlICdGb3J3YXJkVmFsdWUnOlxuICAgICAgcmV0dXJuIHsgdHlwZSwgbmFtZSwgb3B0aW9uYWwsIGRlZmF1bHQ6IGRlZmF1bHRWYWx1ZSwgZm9yd2FyZGVkVmFsdWUsIHJlc3QgfTtcbiAgICBkZWZhdWx0OlxuICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICAgIHV0aWxzLmFzc2VydE5ldmVyKHR5cGUpO1xuICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICAgIHRocm93IG5ldyBFcnJvcignRm9yIFRTJyk7XG4gIH1cbn07XG5cbmNvbnN0IGFzc2VydEFCSUZ1bmN0aW9uID0gKG5hbWU6IHN0cmluZywgdmFsdWU/OiB1bmtub3duKTogQUJJRnVuY3Rpb24gPT4ge1xuICBpZiAoIWlzT2JqZWN0KHZhbHVlKSkge1xuICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignQUJJRnVuY3Rpb24nLCBuYW1lLCB2YWx1ZSk7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIG5hbWU6IGFzc2VydFByb3BlcnR5KHZhbHVlLCAnQUJJRnVuY3Rpb24nLCAnbmFtZScsIGFzc2VydFN0cmluZyksXG4gICAgcGFyYW1ldGVyczogYXNzZXJ0UHJvcGVydHkodmFsdWUsICdBQklGdW5jdGlvbicsICdwYXJhbWV0ZXJzJywgYXNzZXJ0TnVsbGFibGVBcnJheSkubWFwKChwYXJhbWV0ZXIpID0+XG4gICAgICBhc3NlcnRBQklQYXJhbWV0ZXIoJ0FCSUZ1bmN0aW9uLnBhcmFtZXRlcnMnLCBwYXJhbWV0ZXIpLFxuICAgICksXG4gICAgcmV0dXJuVHlwZTogYXNzZXJ0UHJvcGVydHkodmFsdWUsICdBQklGdW5jdGlvbicsICdyZXR1cm5UeXBlJywgYXNzZXJ0QUJJUmV0dXJuKSxcbiAgICBjb25zdGFudDogYXNzZXJ0UHJvcGVydHkodmFsdWUsICdBQklGdW5jdGlvbicsICdjb25zdGFudCcsIGFzc2VydE51bGxhYmxlQm9vbGVhbiksXG4gICAgc2VuZDogYXNzZXJ0UHJvcGVydHkodmFsdWUsICdBQklGdW5jdGlvbicsICdzZW5kJywgYXNzZXJ0TnVsbGFibGVCb29sZWFuKSxcbiAgICBzZW5kVW5zYWZlOiBhc3NlcnRQcm9wZXJ0eSh2YWx1ZSwgJ0FCSUZ1bmN0aW9uJywgJ3NlbmRVbnNhZmUnLCBhc3NlcnROdWxsYWJsZUJvb2xlYW4pLFxuICAgIHJlY2VpdmU6IGFzc2VydFByb3BlcnR5KHZhbHVlLCAnQUJJRnVuY3Rpb24nLCAncmVjZWl2ZScsIGFzc2VydE51bGxhYmxlQm9vbGVhbiksXG4gICAgY2xhaW06IGFzc2VydFByb3BlcnR5KHZhbHVlLCAnQUJJRnVuY3Rpb24nLCAnY2xhaW0nLCBhc3NlcnROdWxsYWJsZUJvb2xlYW4pLFxuICAgIHJlZnVuZEFzc2V0czogYXNzZXJ0UHJvcGVydHkodmFsdWUsICdBQklGdW5jdGlvbicsICdyZWZ1bmRBc3NldHMnLCBhc3NlcnROdWxsYWJsZUJvb2xlYW4pLFxuICAgIGNvbXBsZXRlU2VuZDogYXNzZXJ0UHJvcGVydHkodmFsdWUsICdBQklGdW5jdGlvbicsICdjb21wbGV0ZVNlbmQnLCBhc3NlcnROdWxsYWJsZUJvb2xlYW4pLFxuICB9O1xufTtcblxuY29uc3QgYXNzZXJ0QUJJRXZlbnQgPSAobmFtZTogc3RyaW5nLCB2YWx1ZT86IHVua25vd24pOiBBQklFdmVudCA9PiB7XG4gIGlmICghaXNPYmplY3QodmFsdWUpKSB7XG4gICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdBQklFdmVudCcsIG5hbWUsIHZhbHVlKTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgbmFtZTogYXNzZXJ0UHJvcGVydHkodmFsdWUsICdBQklFdmVudCcsICduYW1lJywgYXNzZXJ0U3RyaW5nKSxcbiAgICBwYXJhbWV0ZXJzOiBhc3NlcnRQcm9wZXJ0eSh2YWx1ZSwgJ0FCSUV2ZW50JywgJ3BhcmFtZXRlcnMnLCBhc3NlcnROdWxsYWJsZUFycmF5KS5tYXAoKHBhcmFtZXRlcikgPT5cbiAgICAgIGFzc2VydEFCSVBhcmFtZXRlcignQUJJRXZlbnQucGFyYW1ldGVycycsIHBhcmFtZXRlciksXG4gICAgKSxcbiAgfTtcbn07XG5cbmV4cG9ydCBjb25zdCBhc3NlcnRBQkkgPSAobmFtZTogc3RyaW5nLCB2YWx1ZT86IHVua25vd24pOiBBQkkgPT4ge1xuICBpZiAoIWlzT2JqZWN0KHZhbHVlKSkge1xuICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignQUJJJywgbmFtZSwgdmFsdWUpO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBmdW5jdGlvbnM6IGFzc2VydFByb3BlcnR5KHZhbHVlLCAnQUJJJywgJ2Z1bmN0aW9ucycsIGFzc2VydE51bGxhYmxlQXJyYXkpLm1hcCgoZnVuYykgPT5cbiAgICAgIGFzc2VydEFCSUZ1bmN0aW9uKCdBQkkuZnVuY3Rpb25zJywgZnVuYyksXG4gICAgKSxcbiAgICBldmVudHM6IGFzc2VydFByb3BlcnR5KHZhbHVlLCAnQUJJJywgJ2V2ZW50cycsIGFzc2VydE51bGxhYmxlQXJyYXkpLm1hcCgoZnVuYykgPT5cbiAgICAgIGFzc2VydEFCSUV2ZW50KCdBQkkuZXZlbnRzJywgZnVuYyksXG4gICAgKSxcbiAgfTtcbn07XG5cbmNvbnN0IGFzc2VydFNtYXJ0Q29udHJhY3ROZXR3b3JrRGVmaW5pdGlvbiA9IChuYW1lOiBzdHJpbmcsIHZhbHVlPzogdW5rbm93bik6IFNtYXJ0Q29udHJhY3ROZXR3b3JrRGVmaW5pdGlvbiA9PiB7XG4gIGlmICghaXNPYmplY3QodmFsdWUpKSB7XG4gICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdTbWFydENvbnRyYWN0TmV0d29ya0RlZmluaXRpb24nLCBuYW1lLCB2YWx1ZSk7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGFkZHJlc3M6IGFzc2VydFByb3BlcnR5KHZhbHVlLCAnU21hcnRDb250cmFjdE5ldHdvcmtEZWZpbml0aW9uJywgJ2FkZHJlc3MnLCBhc3NlcnRBZGRyZXNzKSxcbiAgfTtcbn07XG5cbmNvbnN0IGFzc2VydFNtYXJ0Q29udHJhY3ROZXR3b3Jrc0RlZmluaXRpb24gPSAobmFtZTogc3RyaW5nLCB2YWx1ZT86IHVua25vd24pOiBTbWFydENvbnRyYWN0TmV0d29ya3NEZWZpbml0aW9uID0+IHtcbiAgaWYgKCFpc09iamVjdCh2YWx1ZSkpIHtcbiAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ1NtYXJ0Q29udHJhY3ROZXR3b3Jrc0RlZmluaXRpb24nLCBuYW1lLCB2YWx1ZSk7XG4gIH1cblxuICByZXR1cm4gXy5tYXBWYWx1ZXModmFsdWUsICh2YWwpID0+XG4gICAgYXNzZXJ0U21hcnRDb250cmFjdE5ldHdvcmtEZWZpbml0aW9uKCdTbWFydENvbnRyYWN0TmV0d29ya3NEZWZpbml0aW9uJywgdmFsKSxcbiAgKSBhcyBTbWFydENvbnRyYWN0TmV0d29ya3NEZWZpbml0aW9uO1xufTtcblxuLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lIG5vLWFueVxuY29uc3QgaXNQcm9taXNlID0gKHZhbHVlOiB1bmtub3duKTogdmFsdWUgaXMgUHJvbWlzZTxhbnk+ID0+XG4gIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZSBuby1hbnlcbiAgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiAodmFsdWUgYXMgYW55KS50aGVuICE9PSB1bmRlZmluZWQ7XG5cbmV4cG9ydCBjb25zdCBhc3NlcnRTb3VyY2VNYXBzID0gKG5hbWU6IHN0cmluZywgdmFsdWU/OiB1bmtub3duKTogUHJvbWlzZTxTb3VyY2VNYXBzPiB8IHVuZGVmaW5lZCA9PiB7XG4gIGlmICh2YWx1ZSA9PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgaWYgKCFpc1Byb21pc2UodmFsdWUpKSB7XG4gICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdTb3VyY2VNYXBzJywgbmFtZSwgdmFsdWUpO1xuICB9XG5cbiAgcmV0dXJuIHZhbHVlO1xufTtcblxuZXhwb3J0IGNvbnN0IGFzc2VydFNtYXJ0Q29udHJhY3REZWZpbml0aW9uID0gKG5hbWU6IHN0cmluZywgdmFsdWU/OiB1bmtub3duKTogU21hcnRDb250cmFjdERlZmluaXRpb24gPT4ge1xuICBpZiAoIWlzT2JqZWN0KHZhbHVlKSkge1xuICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignU21hcnRDb250cmFjdERlZmluaXRpb24nLCBuYW1lLCB2YWx1ZSk7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIG5ldHdvcmtzOiBhc3NlcnRQcm9wZXJ0eSh2YWx1ZSwgJ1NtYXJ0Q29udHJhY3REZWZpbml0aW9uJywgJ25ldHdvcmtzJywgYXNzZXJ0U21hcnRDb250cmFjdE5ldHdvcmtzRGVmaW5pdGlvbiksXG4gICAgYWJpOiBhc3NlcnRQcm9wZXJ0eSh2YWx1ZSwgJ1NtYXJ0Q29udHJhY3REZWZpbml0aW9uJywgJ2FiaScsIGFzc2VydEFCSSksXG4gICAgc291cmNlTWFwczogYXNzZXJ0UHJvcGVydHkodmFsdWUsICdTbWFydENvbnRyYWN0RGVmaW5pdGlvbicsICdzb3VyY2VNYXBzJywgYXNzZXJ0U291cmNlTWFwcyksXG4gIH07XG59O1xuXG5jb25zdCBhc3NlcnRTY3JpcHRCdWlsZGVyUGFyYW0gPSAobmFtZTogc3RyaW5nLCB2YWx1ZT86IHVua25vd24pOiBTY3JpcHRCdWlsZGVyUGFyYW0gPT4ge1xuICBpZiAodmFsdWUgPT0gdW5kZWZpbmVkKSB7XG4gICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdTY3JpcHRCdWlsZGVyUGFyYW0nLCBuYW1lLCB2YWx1ZSk7XG4gIH1cblxuICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmUgbm8tYW55XG4gIHJldHVybiB2YWx1ZSBhcyBhbnk7XG59O1xuXG5jb25zdCBhc3NlcnROdWxsYWJsZVNjcmlwdEJ1aWxkZXJQYXJhbSA9IChuYW1lOiBzdHJpbmcsIHZhbHVlPzogdW5rbm93bik6IFNjcmlwdEJ1aWxkZXJQYXJhbSB8IHVuZGVmaW5lZCA9PiB7XG4gIGlmICh2YWx1ZSA9PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgcmV0dXJuIGFzc2VydFNjcmlwdEJ1aWxkZXJQYXJhbShuYW1lLCB2YWx1ZSk7XG59O1xuXG5jb25zdCBhc3NlcnRQYXJhbSA9IChuYW1lOiBzdHJpbmcsIHZhbHVlPzogdW5rbm93bik6IFBhcmFtID0+IHtcbiAgaWYgKHZhbHVlID09IHVuZGVmaW5lZCkge1xuICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignUGFyYW0nLCBuYW1lLCB2YWx1ZSk7XG4gIH1cblxuICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmUgbm8tYW55XG4gIHJldHVybiB2YWx1ZSBhcyBhbnk7XG59O1xuXG5jb25zdCBhc3NlcnROdWxsYWJsZVBhcmFtID0gKG5hbWU6IHN0cmluZywgdmFsdWU/OiB1bmtub3duKTogUGFyYW0gfCB1bmRlZmluZWQgPT4ge1xuICBpZiAodmFsdWUgPT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIHJldHVybiBhc3NlcnRQYXJhbShuYW1lLCB2YWx1ZSk7XG59O1xuXG5leHBvcnQgY29uc3QgYXNzZXJ0Rm9yd2FyZFZhbHVlID0gKG5hbWU6IHN0cmluZywgdmFsdWU/OiB1bmtub3duKTogRm9yd2FyZFZhbHVlID0+IHtcbiAgaWYgKCFpc09iamVjdCh2YWx1ZSkpIHtcbiAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ0ZvcndhcmRWYWx1ZScsIG5hbWUsIHZhbHVlKTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgbmFtZTogYXNzZXJ0UHJvcGVydHkodmFsdWUsICdGb3J3YXJkVmFsdWUnLCAnbmFtZScsIGFzc2VydFN0cmluZyksXG4gICAgY29udmVydGVkOiBhc3NlcnRQcm9wZXJ0eSh2YWx1ZSwgJ0ZvcndhcmRWYWx1ZScsICdjb252ZXJ0ZWQnLCBhc3NlcnROdWxsYWJsZVNjcmlwdEJ1aWxkZXJQYXJhbSksXG4gICAgcGFyYW06IGFzc2VydFByb3BlcnR5KHZhbHVlLCAnRm9yd2FyZFZhbHVlJywgJ3BhcmFtJywgYXNzZXJ0TnVsbGFibGVQYXJhbSksXG4gICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lIG5vLWFueVxuICB9IGFzIGFueTtcbn07XG5cbmV4cG9ydCBjb25zdCBhc3NlcnRUcmFuc2ZlciA9IChuYW1lOiBzdHJpbmcsIHZhbHVlPzogdW5rbm93bik6IFRyYW5zZmVyID0+IHtcbiAgaWYgKCFpc09iamVjdCh2YWx1ZSkpIHtcbiAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ1RyYW5zZmVyJywgbmFtZSwgdmFsdWUpO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBhbW91bnQ6IGFzc2VydFByb3BlcnR5KHZhbHVlLCAnVHJhbnNmZXInLCAnYW1vdW50JywgYXNzZXJ0QmlnTnVtYmVyKSxcbiAgICBhc3NldDogYXNzZXJ0UHJvcGVydHkodmFsdWUsICdUcmFuc2ZlcicsICdhc3NldCcsIGFzc2VydEhhc2gyNTYpLFxuICAgIHRvOiBhc3NlcnRQcm9wZXJ0eSh2YWx1ZSwgJ1RyYW5zZmVyJywgJ3RvJywgYXNzZXJ0QWRkcmVzcyksXG4gIH07XG59O1xuXG5leHBvcnQgY29uc3QgYXNzZXJ0UHJpdmF0ZUtleSA9IChuYW1lOiBzdHJpbmcsIHZhbHVlSW4/OiB1bmtub3duKTogUHJpdmF0ZUtleVN0cmluZyA9PiB7XG4gIGNvbnN0IHZhbHVlID0gYXNzZXJ0U3RyaW5nKG5hbWUsIHZhbHVlSW4pO1xuICB0cnkge1xuICAgIHByaXZhdGVLZXlUb1B1YmxpY0tleSh2YWx1ZSk7XG5cbiAgICByZXR1cm4gdmFsdWU7XG4gIH0gY2F0Y2gge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gd2lmVG9Qcml2YXRlS2V5KHZhbHVlKTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignUHJpdmF0ZUtleScsIG5hbWUsIHZhbHVlKTtcbiAgICB9XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBhc3NlcnRUcmFuc2ZlcnMgPSAobmFtZTogc3RyaW5nLCB2YWx1ZUluPzogdW5rbm93bik6IHJlYWRvbmx5IFRyYW5zZmVyW10gPT4ge1xuICBjb25zdCB2YWx1ZSA9IGFzc2VydEFycmF5KG5hbWUsIHZhbHVlSW4pO1xuXG4gIHJldHVybiB2YWx1ZS5tYXAoKHZhbCkgPT4gYXNzZXJ0VHJhbnNmZXIobmFtZSwgdmFsKSk7XG59O1xuXG5jb25zdCBhc3NlcnRBdHRyaWJ1dGVVc2FnZSA9IChuYW1lOiBzdHJpbmcsIHZhbHVlSW4/OiB1bmtub3duKTogQXR0cmlidXRlVXNhZ2UgPT4ge1xuICBjb25zdCB2YWx1ZSA9IGFzc2VydFN0cmluZyhuYW1lLCB2YWx1ZUluKTtcbiAgdHJ5IHtcbiAgICByZXR1cm4gYXNzZXJ0QXR0cmlidXRlVXNhZ2VKU09OKHZhbHVlKTtcbiAgfSBjYXRjaCB7XG4gICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdBdHRyaWJ1dGVVc2FnZScsIG5hbWUsIHZhbHVlKTtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGFzc2VydEF0dHJpYnV0ZSA9IChuYW1lOiBzdHJpbmcsIGF0dHJpYnV0ZT86IHVua25vd24pOiBBdHRyaWJ1dGUgPT4ge1xuICBpZiAoIWlzT2JqZWN0KGF0dHJpYnV0ZSkpIHtcbiAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ0F0dHJpYnV0ZScsIG5hbWUsIGF0dHJpYnV0ZSk7XG4gIH1cblxuICBjb25zdCB1c2FnZSA9IGFzc2VydFByb3BlcnR5KGF0dHJpYnV0ZSwgJ0F0dHJpYnV0ZScsICd1c2FnZScsIGFzc2VydEF0dHJpYnV0ZVVzYWdlKTtcbiAgc3dpdGNoICh1c2FnZSkge1xuICAgIGNhc2UgJ0NvbnRyYWN0SGFzaCc6XG4gICAgY2FzZSAnVm90ZSc6XG4gICAgY2FzZSAnSGFzaDEnOlxuICAgIGNhc2UgJ0hhc2gyJzpcbiAgICBjYXNlICdIYXNoMyc6XG4gICAgY2FzZSAnSGFzaDQnOlxuICAgIGNhc2UgJ0hhc2g1JzpcbiAgICBjYXNlICdIYXNoNic6XG4gICAgY2FzZSAnSGFzaDcnOlxuICAgIGNhc2UgJ0hhc2g4JzpcbiAgICBjYXNlICdIYXNoOSc6XG4gICAgY2FzZSAnSGFzaDEwJzpcbiAgICBjYXNlICdIYXNoMTEnOlxuICAgIGNhc2UgJ0hhc2gxMic6XG4gICAgY2FzZSAnSGFzaDEzJzpcbiAgICBjYXNlICdIYXNoMTQnOlxuICAgIGNhc2UgJ0hhc2gxNSc6XG4gICAgICByZXR1cm4ge1xuICAgICAgICB1c2FnZSxcbiAgICAgICAgZGF0YTogYXNzZXJ0UHJvcGVydHkoYXR0cmlidXRlLCAnQXR0cmlidXRlJywgJ2RhdGEnLCBhc3NlcnRIYXNoMjU2KSxcbiAgICAgIH07XG4gICAgY2FzZSAnU2NyaXB0JzpcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHVzYWdlLFxuICAgICAgICBkYXRhOiBhc3NlcnRQcm9wZXJ0eShhdHRyaWJ1dGUsICdBdHRyaWJ1dGUnLCAnZGF0YScsIGFzc2VydEFkZHJlc3MpLFxuICAgICAgfTtcbiAgICBjYXNlICdFQ0RIMDInOlxuICAgIGNhc2UgJ0VDREgwMyc6XG4gICAgICByZXR1cm4ge1xuICAgICAgICB1c2FnZSxcbiAgICAgICAgZGF0YTogYXNzZXJ0UHJvcGVydHkoYXR0cmlidXRlLCAnQXR0cmlidXRlJywgJ2RhdGEnLCBhc3NlcnRQdWJsaWNLZXkpLFxuICAgICAgfTtcbiAgICBjYXNlICdEZXNjcmlwdGlvblVybCc6XG4gICAgY2FzZSAnRGVzY3JpcHRpb24nOlxuICAgIGNhc2UgJ1JlbWFyayc6XG4gICAgY2FzZSAnUmVtYXJrMSc6XG4gICAgY2FzZSAnUmVtYXJrMic6XG4gICAgY2FzZSAnUmVtYXJrMyc6XG4gICAgY2FzZSAnUmVtYXJrNCc6XG4gICAgY2FzZSAnUmVtYXJrNSc6XG4gICAgY2FzZSAnUmVtYXJrNic6XG4gICAgY2FzZSAnUmVtYXJrNyc6XG4gICAgY2FzZSAnUmVtYXJrOCc6XG4gICAgY2FzZSAnUmVtYXJrOSc6XG4gICAgY2FzZSAnUmVtYXJrMTAnOlxuICAgIGNhc2UgJ1JlbWFyazExJzpcbiAgICBjYXNlICdSZW1hcmsxMic6XG4gICAgY2FzZSAnUmVtYXJrMTMnOlxuICAgIGNhc2UgJ1JlbWFyazE0JzpcbiAgICBjYXNlICdSZW1hcmsxNSc6XG4gICAgICByZXR1cm4ge1xuICAgICAgICB1c2FnZSxcbiAgICAgICAgZGF0YTogYXNzZXJ0UHJvcGVydHkoYXR0cmlidXRlLCAnQXR0cmlidXRlJywgJ2RhdGEnLCBhc3NlcnRCdWZmZXIpLFxuICAgICAgfTtcbiAgICBkZWZhdWx0OlxuICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICAgIHV0aWxzLmFzc2VydE5ldmVyKHVzYWdlKTtcbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZvciBUUycpO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgYXNzZXJ0VHJhbnNhY3Rpb25PcHRpb25zID0gKG5hbWU6IHN0cmluZywgb3B0aW9ucz86IHVua25vd24pOiBUcmFuc2FjdGlvbk9wdGlvbnMgPT4ge1xuICBpZiAob3B0aW9ucyA9PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4ge307XG4gIH1cblxuICBpZiAoIWlzT2JqZWN0KG9wdGlvbnMpKSB7XG4gICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdUcmFuc2FjdGlvbk9wdGlvbnMnLCBuYW1lLCBvcHRpb25zKTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgZnJvbTogYXNzZXJ0UHJvcGVydHkob3B0aW9ucywgJ1RyYW5zYWN0aW9uT3B0aW9ucycsICdmcm9tJywgYXNzZXJ0TnVsbGFibGVVc2VyQWNjb3VudElEKSxcbiAgICBhdHRyaWJ1dGVzOiBhc3NlcnRQcm9wZXJ0eShvcHRpb25zLCAnVHJhbnNhY3Rpb25PcHRpb25zJywgJ2F0dHJpYnV0ZXMnLCBhc3NlcnROdWxsYWJsZUFycmF5KS5tYXAoKHZhbHVlKSA9PlxuICAgICAgYXNzZXJ0QXR0cmlidXRlKCdUcmFuc2FjdGlvbk9wdGlvbi5hdHRyaWJ1dGVzJywgdmFsdWUpLFxuICAgICksXG4gICAgbmV0d29ya0ZlZTogYXNzZXJ0UHJvcGVydHkob3B0aW9ucywgJ1RyYW5zYWN0aW9uT3B0aW9ucycsICduZXR3b3JrRmVlJywgYXNzZXJ0TnVsbGFibGVCaWdOdW1iZXIpLFxuICAgIHN5c3RlbUZlZTogYXNzZXJ0UHJvcGVydHkob3B0aW9ucywgJ1RyYW5zYWN0aW9uT3B0aW9ucycsICdzeXN0ZW1GZWUnLCBhc3NlcnROdWxsYWJsZUJpZ051bWJlciksXG4gICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lIG5vLWFueVxuICAgIG1vbml0b3I6IChvcHRpb25zIGFzIGFueSkubW9uaXRvcixcbiAgfTtcbn07XG4iXX0=
|