n8n-nodes-qiniu-ai 0.2.0 → 0.3.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.
|
@@ -444,22 +444,105 @@ async function handleAgent(context, client, itemIndex) {
|
|
|
444
444
|
const model = context.getNodeParameter('model', itemIndex);
|
|
445
445
|
const prompt = context.getNodeParameter('prompt', itemIndex);
|
|
446
446
|
const systemMessage = context.getNodeParameter('systemMessage', itemIndex, '');
|
|
447
|
+
const builtinTools = context.getNodeParameter('builtinTools', itemIndex, []);
|
|
448
|
+
const autoExecuteTools = context.getNodeParameter('autoExecuteTools', itemIndex, true);
|
|
447
449
|
const options = context.getNodeParameter('options', itemIndex, {});
|
|
448
|
-
//
|
|
449
|
-
|
|
450
|
+
// Build tools record
|
|
451
|
+
const toolsRecord = {};
|
|
452
|
+
// Register built-in tools
|
|
453
|
+
if (builtinTools.includes('webSearch')) {
|
|
454
|
+
toolsRecord['web_search'] = {
|
|
455
|
+
description: 'Search the web for information. Use this to find current information.',
|
|
456
|
+
parameters: {
|
|
457
|
+
type: 'object',
|
|
458
|
+
properties: {
|
|
459
|
+
query: { type: 'string', description: 'The search query' },
|
|
460
|
+
},
|
|
461
|
+
required: ['query'],
|
|
462
|
+
},
|
|
463
|
+
execute: async (args) => {
|
|
464
|
+
const results = await client.sys.search({ query: args.query });
|
|
465
|
+
return { results: results?.slice(0, 5) || [] };
|
|
466
|
+
},
|
|
467
|
+
};
|
|
468
|
+
}
|
|
469
|
+
if (builtinTools.includes('ocr')) {
|
|
470
|
+
toolsRecord['ocr'] = {
|
|
471
|
+
description: 'Extract text from an image URL using OCR.',
|
|
472
|
+
parameters: {
|
|
473
|
+
type: 'object',
|
|
474
|
+
properties: {
|
|
475
|
+
url: { type: 'string', description: 'The image URL to extract text from' },
|
|
476
|
+
},
|
|
477
|
+
required: ['url'],
|
|
478
|
+
},
|
|
479
|
+
execute: async (args) => {
|
|
480
|
+
const result = await client.ocr.detect({ url: args.url });
|
|
481
|
+
return result;
|
|
482
|
+
},
|
|
483
|
+
};
|
|
484
|
+
}
|
|
485
|
+
if (builtinTools.includes('imageGenerate')) {
|
|
486
|
+
toolsRecord['generate_image'] = {
|
|
487
|
+
description: 'Generate an image from a text prompt.',
|
|
488
|
+
parameters: {
|
|
489
|
+
type: 'object',
|
|
490
|
+
properties: {
|
|
491
|
+
prompt: { type: 'string', description: 'Description of the image to generate' },
|
|
492
|
+
},
|
|
493
|
+
required: ['prompt'],
|
|
494
|
+
},
|
|
495
|
+
execute: async (args) => {
|
|
496
|
+
const createResult = await client.image.generate({
|
|
497
|
+
model: 'kling-v2-1',
|
|
498
|
+
prompt: args.prompt,
|
|
499
|
+
});
|
|
500
|
+
const result = await client.image.waitForResult(createResult);
|
|
501
|
+
return {
|
|
502
|
+
images: result.data?.map((d) => d.url || d.b64_json?.substring(0, 100) + '...') || [],
|
|
503
|
+
};
|
|
504
|
+
},
|
|
505
|
+
};
|
|
506
|
+
}
|
|
507
|
+
if (builtinTools.includes('videoGenerate')) {
|
|
508
|
+
toolsRecord['generate_video'] = {
|
|
509
|
+
description: 'Generate a video from a text prompt.',
|
|
510
|
+
parameters: {
|
|
511
|
+
type: 'object',
|
|
512
|
+
properties: {
|
|
513
|
+
prompt: { type: 'string', description: 'Description of the video to generate' },
|
|
514
|
+
},
|
|
515
|
+
required: ['prompt'],
|
|
516
|
+
},
|
|
517
|
+
execute: async (args) => {
|
|
518
|
+
const task = await client.video.create({
|
|
519
|
+
model: 'kling-video-o1',
|
|
520
|
+
prompt: args.prompt,
|
|
521
|
+
duration: '5',
|
|
522
|
+
aspect_ratio: '16:9',
|
|
523
|
+
});
|
|
524
|
+
const result = await client.video.waitForCompletion(task.id);
|
|
525
|
+
return {
|
|
526
|
+
id: result.id,
|
|
527
|
+
status: result.status,
|
|
528
|
+
videos: result.task_result?.videos || [],
|
|
529
|
+
};
|
|
530
|
+
},
|
|
531
|
+
};
|
|
532
|
+
}
|
|
533
|
+
// Parse user-defined tools
|
|
450
534
|
if (options.tools) {
|
|
451
535
|
try {
|
|
452
536
|
const toolsArray = JSON.parse(options.tools);
|
|
453
537
|
if (Array.isArray(toolsArray) && toolsArray.length > 0) {
|
|
454
|
-
toolsRecord = {};
|
|
455
538
|
for (const tool of toolsArray) {
|
|
456
539
|
if (tool.function?.name) {
|
|
457
540
|
toolsRecord[tool.function.name] = {
|
|
458
541
|
description: tool.function.description || '',
|
|
459
542
|
parameters: tool.function.parameters || {},
|
|
460
543
|
execute: async (_args) => {
|
|
461
|
-
//
|
|
462
|
-
return { result: 'Tool
|
|
544
|
+
// User-defined tools return placeholder for manual execution
|
|
545
|
+
return { result: 'Tool executed. Process the result in subsequent workflow steps.' };
|
|
463
546
|
},
|
|
464
547
|
};
|
|
465
548
|
}
|
|
@@ -470,6 +553,23 @@ async function handleAgent(context, client, itemIndex) {
|
|
|
470
553
|
throw new n8n_workflow_1.NodeOperationError(context.getNode(), 'Invalid tools JSON format', { itemIndex });
|
|
471
554
|
}
|
|
472
555
|
}
|
|
556
|
+
// Execute with AgentGraph if auto-execute is enabled and there are tools
|
|
557
|
+
const hasTools = Object.keys(toolsRecord).length > 0;
|
|
558
|
+
// Initialize Checkpointer if configured
|
|
559
|
+
// Note: Checkpointer integration requires AgentGraph directly, not generateTextWithGraph
|
|
560
|
+
// This is a placeholder for future full implementation
|
|
561
|
+
let checkpointerInfo = null;
|
|
562
|
+
if (options.checkpointerType && options.checkpointerType !== 'none') {
|
|
563
|
+
if (options.checkpointerType === 'memory') {
|
|
564
|
+
checkpointerInfo = 'memory';
|
|
565
|
+
}
|
|
566
|
+
else if (options.checkpointerType === 'redis') {
|
|
567
|
+
checkpointerInfo = `redis:${options.checkpointerConnection || 'not-configured'}`;
|
|
568
|
+
}
|
|
569
|
+
else if (options.checkpointerType === 'postgres') {
|
|
570
|
+
checkpointerInfo = `postgres:${options.checkpointerConnection || 'not-configured'}`;
|
|
571
|
+
}
|
|
572
|
+
}
|
|
473
573
|
const result = await (0, qiniu_ai_sdk_1.generateTextWithGraph)({
|
|
474
574
|
client,
|
|
475
575
|
model,
|
|
@@ -478,10 +578,11 @@ async function handleAgent(context, client, itemIndex) {
|
|
|
478
578
|
maxContextTokens: options.maxContextTokens || 32000,
|
|
479
579
|
maxSteps: options.maxSteps || 10,
|
|
480
580
|
temperature: options.temperature,
|
|
481
|
-
tools: toolsRecord,
|
|
581
|
+
tools: hasTools && autoExecuteTools ? toolsRecord : undefined,
|
|
482
582
|
});
|
|
483
583
|
return {
|
|
484
584
|
content: result.text || '',
|
|
585
|
+
reasoning: result.reasoning || '',
|
|
485
586
|
steps: result.steps?.map((step) => ({
|
|
486
587
|
type: step.type,
|
|
487
588
|
toolName: step.toolName,
|
|
@@ -489,6 +590,9 @@ async function handleAgent(context, client, itemIndex) {
|
|
|
489
590
|
toolResult: step.toolResult,
|
|
490
591
|
text: step.text,
|
|
491
592
|
})) || [],
|
|
593
|
+
toolsExecuted: result.steps?.filter((s) => s.type === 'tool_call').length || 0,
|
|
594
|
+
threadId: options.threadId || null,
|
|
595
|
+
checkpointer: checkpointerInfo,
|
|
492
596
|
usage: result.usage
|
|
493
597
|
? {
|
|
494
598
|
promptTokens: result.usage.prompt_tokens,
|
|
@@ -592,4 +696,4 @@ async function handleTools(context, client, itemIndex) {
|
|
|
592
696
|
}
|
|
593
697
|
throw new n8n_workflow_1.NodeOperationError(context.getNode(), `Unknown tools operation: ${operation}`, { itemIndex });
|
|
594
698
|
}
|
|
595
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUWluaXVBaS5ub2RlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vbm9kZXMvUWluaXVBaS9RaW5pdUFpLm5vZGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsK0NBUXNCO0FBRXRCLHdEQUFpRjtBQUVqRixvRUFBNEU7QUFDNUUsc0VBQStFO0FBQy9FLHNFQUErRTtBQUMvRSxzRUFBK0U7QUFDL0Usc0VBQStFO0FBQy9FLHNFQUErRTtBQUUvRSxNQUFhLE9BQU87SUFBcEI7UUFDSSxnQkFBVyxHQUF5QjtZQUNoQyxXQUFXLEVBQUUsVUFBVTtZQUN2QixJQUFJLEVBQUUsU0FBUztZQUNmLElBQUksRUFBRSxnQkFBZ0I7WUFDdEIsS0FBSyxFQUFFLENBQUMsV0FBVyxDQUFDO1lBQ3BCLE9BQU8sRUFBRSxDQUFDO1lBQ1YsUUFBUSxFQUFFLDhEQUE4RDtZQUN4RSxXQUFXLEVBQUUsc0VBQXNFO1lBQ25GLFFBQVEsRUFBRTtnQkFDTixJQUFJLEVBQUUsVUFBVTthQUNuQjtZQUNELE1BQU0sRUFBRSxDQUFDLE1BQU0sQ0FBQztZQUNoQixPQUFPLEVBQUUsQ0FBQyxNQUFNLENBQUM7WUFDakIsV0FBVyxFQUFFO2dCQUNUO29CQUNJLElBQUksRUFBRSxZQUFZO29CQUNsQixRQUFRLEVBQUUsSUFBSTtpQkFDakI7YUFDSjtZQUNELFVBQVUsRUFBRTtnQkFDUixXQUFXO2dCQUNYO29CQUNJLFdBQVcsRUFBRSxVQUFVO29CQUN2QixJQUFJLEVBQUUsVUFBVTtvQkFDaEIsSUFBSSxFQUFFLFNBQVM7b0JBQ2YsZ0JBQWdCLEVBQUUsSUFBSTtvQkFDdEIsT0FBTyxFQUFFO3dCQUNMOzRCQUNJLElBQUksRUFBRSxNQUFNOzRCQUNaLEtBQUssRUFBRSxNQUFNOzRCQUNiLFdBQVcsRUFBRSwyQkFBMkI7eUJBQzNDO3dCQUNEOzRCQUNJLElBQUksRUFBRSxPQUFPOzRCQUNiLEtBQUssRUFBRSxPQUFPOzRCQUNkLFdBQVcsRUFBRSx5QkFB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LENBQUMsU0FBUyxFQUFFLGtCQUFrQixDQUFDLENBQUM7WUFDbkYsTUFBTSxNQUFNLEdBQUcsTUFBTSxPQUFPLENBQUMsT0FBTyxDQUFDLG1CQUFtQixDQUFDLFNBQVMsRUFBRSxrQkFBa0IsQ0FBQyxDQUFDO1lBQ3hGLE1BQU0sUUFBUSxHQUFHLFVBQVUsQ0FBQyxRQUFRLElBQUksV0FBVyxDQUFDO1lBQ3BELE1BQU0sVUFBVSxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDN0MsOENBQThDO1lBQzlDLFNBQVMsR0FBRyxFQUFFLEtBQUssRUFBRSxRQUFRLFFBQVEsV0FBVyxVQUFVLEVBQUUsRUFBRSxDQUFDO1FBQ25FLENBQUM7UUFFRCxNQUFNLE1BQU0sR0FBRyxNQUFNLE1BQU0sQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBRWxELE9BQU87WUFDSCxJQUFJLEVBQUUsTUFBTSxDQUFDLElBQUksSUFBSSxFQUFFO1lBQ3ZCLE1BQU0sRUFBRSxNQUFNLENBQUMsTUFBTSxJQUFJLEVBQUU7WUFDM0IsSUFBSSxFQUFFLE1BQWdDO1NBQ3pDLENBQUM7SUFDTixDQUFDO0lBRUQsTUFBTSxJQUFJLGlDQUFrQixDQUN4QixPQUFPLENBQUMsT0FBTyxFQUFFLEVBQ2pCLDRCQUE0QixTQUFTLEVBQUUsRUFDdkMsRUFBRSxTQUFTLEVBQUUsQ0FDaEIsQ0FBQztBQUNOLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIElFeGVjdXRlRnVuY3Rpb25zLFxuICAgIElOb2RlRXhlY3V0aW9uRGF0YSxcbiAgICBJTm9kZVR5cGUsXG4gICAgSU5vZGVUeXBlRGVzY3JpcHRpb24sXG4gICAgTm9kZU9wZXJhdGlvbkVycm9yLFxuICAgIElEYXRhT2JqZWN0LFxuICAgIElCaW5hcnlLZXlEYXRhLFxufSBmcm9tICduOG4td29ya2Zsb3cnO1xuXG5pbXBvcnQgeyBRaW5pdUFJLCBnZW5lcmF0ZVRleHRXaXRoR3JhcGgsIEFQSUVycm9yIH0gZnJvbSAnQGJvd2VucXQvcWluaXUtYWktc2RrJztcblxuaW1wb3J0IHsgY2hhdE9wZXJhdGlvbnMsIGNoYXRGaWVsZHMgfSBmcm9tICcuL2Rlc2NyaXB0aW9ucy9DaGF0RGVzY3JpcHRpb24nO1xuaW1wb3J0IHsgaW1hZ2VPcGVyYXRpb25zLCBpbWFnZUZpZWxkcyB9IGZyb20gJy4vZGVzY3JpcHRpb25zL0ltYWdlRGVzY3JpcHRpb24nO1xuaW1wb3J0IHsgdmlkZW9PcGVyYXRpb25zLCB2aWRlb0ZpZWxkcyB9IGZyb20gJy4vZGVzY3JpcHRpb25zL1ZpZGVvRGVzY3JpcHRpb24nO1xuaW1wb3J0IHsgYWdlbnRPcGVyYXRpb25zLCBhZ2VudEZpZWxkcyB9IGZyb20gJy4vZGVzY3JpcHRpb25zL0FnZW50RGVzY3JpcHRpb24nO1xuaW1wb3J0IHsgYXVkaW9PcGVyYXRpb25zLCBhdWRpb0ZpZWxkcyB9IGZyb20gJy4vZGVzY3JpcHRpb25zL0F1ZGlvRGVzY3JpcHRpb24nO1xuaW1wb3J0IHsgdG9vbHNPcGVyYXRpb25zLCB0b29sc0ZpZWxkcyB9IGZyb20gJy4vZGVzY3JpcHRpb25zL1Rvb2xzRGVzY3JpcHRpb24nO1xuXG5leHBvcnQgY2xhc3MgUWluaXVBaSBpbXBsZW1lbnRzIElOb2RlVHlwZSB7XG4gICAgZGVzY3JpcHRpb246IElOb2RlVHlwZURlc2NyaXB0aW9uID0ge1xuICAgICAgICBkaXNwbGF5TmFtZTogJ1Fpbml1IEFJJyxcbiAgICAgICAgbmFtZTogJ3Fpbml1QWknLFxuICAgICAgICBpY29uOiAnZmlsZTpxaW5pdS5zdmcnLFxuICAgICAgICBncm91cDogWyd0cmFuc2Zvcm0nXSxcbiAgICAgICAgdmVyc2lvbjogMSxcbiAgICAgICAgc3VidGl0bGU6ICc9e3skcGFyYW1ldGVyW1wib3BlcmF0aW9uXCJdICsgXCI6IFwiICsgJHBhcmFtZXRlcltcInJlc291cmNlXCJdfX0nLFxuICAgICAgICBkZXNjcmlwdGlvbjogJ0ludGVyYWN0IHdpdGggUWluaXUgQUkgc2VydmljZXMgLSBDaGF0LCBJbWFnZSwgVmlkZW8sIEFnZW50IGFuZCBtb3JlJyxcbiAgICAgICAgZGVmYXVsdHM6IHtcbiAgICAgICAgICAgIG5hbWU6ICdRaW5pdSBBSScsXG4gICAgICAgIH0sXG4gICAgICAgIGlucHV0czogWydtYWluJ10sXG4gICAgICAgIG91dHB1dHM6IFsnbWFpbiddLFxuICAgICAgICBjcmVkZW50aWFsczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG5hbWU6ICdxaW5pdUFpQXBpJyxcbiAgICAgICAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICAgIHByb3BlcnRpZXM6IFtcbiAgICAgICAgICAgIC8vIFJlc291cmNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZGlzcGxheU5hbWU6ICdSZXNvdXJjZScsXG4gICAgICAgICAgICAgICAgbmFtZTogJ3Jlc291cmNlJyxcbiAgICAgICAgICAgICAgICB0eXBlOiAnb3B0aW9ucycsXG4gICAgICAgICAgICAgICAgbm9EYXRhRXhwcmVzc2lvbjogdHJ1ZSxcbiAgICAgICAgICAgICAgICBvcHRpb25zOiBbXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICdDaGF0JyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiAnY2hhdCcsXG4gICAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogJ0dlbmVyYXRlIGNoYXQgY29tcGxldGlvbnMnLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiAnSW1hZ2UnLFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6ICdpbWFnZScsXG4gICAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogJ0dlbmVyYXRlIG9yIGVkaXQgaW1hZ2VzJyxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogJ1ZpZGVvJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiAndmlkZW8nLFxuICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb246ICdHZW5lcmF0ZSB2aWRlb3MnLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiAnQWdlbnQnLFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6ICdhZ2VudCcsXG4gICAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogJ1J1biBBSSBhZ2VudCB3aXRoIHRvb2xzIGFuZCBtZW1vcnknLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiAnQXVkaW8nLFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6ICdhdWRpbycsXG4gICAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogJ1RleHQtdG8tU3BlZWNoIGFuZCBTcGVlY2gtdG8tVGV4dCcsXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICdUb29scycsXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogJ3Rvb2xzJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnV2ViIFNlYXJjaCwgT0NSIGFuZCBtb3JlJyxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6ICdjaGF0JyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAvLyBPcGVyYXRpb25zIGFuZCBmaWVsZHNcbiAgICAgICAgICAgIC4uLmNoYXRPcGVyYXRpb25zLFxuICAgICAgICAgICAgLi4uY2hhdEZpZWxkcyxcbiAgICAgICAgICAgIC4uLmltYWdlT3BlcmF0aW9ucyxcbiAgICAgICAgICAgIC4uLmltYWdlRmllbGRzLFxuICAgICAgICAgICAgLi4udmlkZW9PcGVyYXRpb25zLFxuICAgICAgICAgICAgLi4udmlkZW9GaWVsZHMsXG4gICAgICAgICAgICAuLi5hZ2VudE9wZXJhdGlvbnMsXG4gICAgICAgICAgICAuLi5hZ2VudEZpZWxkcyxcbiAgICAgICAgICAgIC4uLmF1ZGlvT3BlcmF0aW9ucyxcbiAgICAgICAgICAgIC4uLmF1ZGlvRmllbGRzLFxuICAgICAgICAgICAgLi4udG9vbHNPcGVyYXRpb25zLFxuICAgICAgICAgICAgLi4udG9vbHNGaWVsZHMsXG4gICAgICAgIF0sXG4gICAgfTtcblxuICAgIGFzeW5jIGV4ZWN1dGUodGhpczogSUV4ZWN1dGVGdW5jdGlvbnMpOiBQcm9taXNlPElOb2RlRXhlY3V0aW9uRGF0YVtdW10+IHtcbiAgICAgICAgY29uc3QgaXRlbXMgPSB0aGlzLmdldElucHV0RGF0YSgpO1xuICAgICAgICBjb25zdCByZXR1cm5EYXRhOiBJTm9kZUV4ZWN1dGlvbkRhdGFbXSA9IFtdO1xuXG4gICAgICAgIC8vIEdldCBjcmVkZW50aWFsc1xuICAgICAgICBjb25zdCBjcmVkZW50aWFscyA9IGF3YWl0IHRoaXMuZ2V0Q3JlZGVudGlhbHMoJ3Fpbml1QWlBcGknKTtcbiAgICAgICAgY29uc3QgYXBpS2V5ID0gY3JlZGVudGlhbHMuYXBpS2V5IGFzIHN0cmluZztcbiAgICAgICAgY29uc3QgYmFzZVVybCA9IChjcmVkZW50aWFscy5iYXNlVXJsIGFzIHN0cmluZykgfHwgJ2h0dHBzOi8vYXBpLnFuYWlnYy5jb20vdjEnO1xuXG4gICAgICAgIC8vIEluaXRpYWxpemUgY2xpZW50XG4gICAgICAgIGNvbnN0IGNsaWVudCA9IG5ldyBRaW5pdUFJKHsgYXBpS2V5LCBiYXNlVXJsIH0pO1xuXG4gICAgICAgIGNvbnN0IHJlc291cmNlID0gdGhpcy5nZXROb2RlUGFyYW1ldGVyKCdyZXNvdXJjZScsIDApIGFzIHN0cmluZztcblxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGl0ZW1zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGxldCByZXN1bHQ6IElEYXRhT2JqZWN0O1xuXG4gICAgICAgICAgICAgICAgLy8gUm91dGUgdG8gYXBwcm9wcmlhdGUgaGFuZGxlclxuICAgICAgICAgICAgICAgIGlmIChyZXNvdXJjZSA9PT0gJ2NoYXQnKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IGF3YWl0IGhhbmRsZUNoYXQodGhpcywgY2xpZW50LCBpKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHJlc291cmNlID09PSAnaW1hZ2UnKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIEltYWdlIG5lZWRzIHNwZWNpYWwgaGFuZGxpbmcgZm9yIGJpbmFyeSBvdXRwdXRcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaW1hZ2VSZXN1bHQgPSBhd2FpdCBoYW5kbGVJbWFnZSh0aGlzLCBjbGllbnQsIGkpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm5EYXRhLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAganNvbjogaW1hZ2VSZXN1bHQuanNvbixcbiAgICAgICAgICAgICAgICAgICAgICAgIGJpbmFyeTogaW1hZ2VSZXN1bHQuYmluYXJ5LFxuICAgICAgICAgICAgICAgICAgICAgICAgcGFpcmVkSXRlbTogeyBpdGVtOiBpIH0sXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHJlc291cmNlID09PSAndmlkZW8nKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IGF3YWl0IGhhbmRsZVZpZGVvKHRoaXMsIGNsaWVudCwgaSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChyZXNvdXJjZSA9PT0gJ2FnZW50Jykge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBhd2FpdCBoYW5kbGVBZ2VudCh0aGlzLCBjbGllbnQsIGkpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocmVzb3VyY2UgPT09ICdhdWRpbycpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gYXdhaXQgaGFuZGxlQXVkaW8odGhpcywgY2xpZW50LCBpKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHJlc291cmNlID09PSAndG9vbHMnKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IGF3YWl0IGhhbmRsZVRvb2xzKHRoaXMsIGNsaWVudCwgaSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IE5vZGVPcGVyYXRpb25FcnJvcihcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZ2V0Tm9kZSgpLFxuICAgICAgICAgICAgICAgICAgICAgICAgYFVua25vd24gcmVzb3VyY2U6ICR7cmVzb3VyY2V9YCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHsgaXRlbUluZGV4OiBpIH1cbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByZXR1cm5EYXRhLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICBqc29uOiByZXN1bHQsXG4gICAgICAgICAgICAgICAgICAgIHBhaXJlZEl0ZW06IHsgaXRlbTogaSB9LFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBBUElFcnJvcikge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgTm9kZU9wZXJhdGlvbkVycm9yKFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5nZXROb2RlKCksXG4gICAgICAgICAgICAgICAgICAgICAgICBgUWluaXUgQUkgQVBJIEVycm9yOiAke2Vycm9yLm1lc3NhZ2V9YCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtSW5kZXg6IGksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb246IGBTdGF0dXM6ICR7ZXJyb3Iuc3RhdHVzfSwgQ29kZTogJHsoZXJyb3IgYXMgYW55KS5jb2RlIHx8ICd1bmtub3duJ31gLFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBbcmV0dXJuRGF0YV07XG4gICAgfVxufVxuXG4vLyBDaGF0IGhhbmRsZXJcbmFzeW5jIGZ1bmN0aW9uIGhhbmRsZUNoYXQoXG4gICAgY29udGV4dDogSUV4ZWN1dGVGdW5jdGlvbnMsXG4gICAgY2xpZW50OiBRaW5pdUFJLFxuICAgIGl0ZW1JbmRleDogbnVtYmVyXG4pOiBQcm9taXNlPElEYXRhT2JqZWN0PiB7XG4gICAgY29uc3QgbW9kZWwgPSBjb250ZXh0LmdldE5vZGVQYXJhbWV0ZXIoJ21vZGVsJywgaXRlbUluZGV4KSBhcyBzdHJpbmc7XG4gICAgY29uc3QgaW5wdXRUeXBlID0gY29udGV4dC5nZXROb2RlUGFyYW1ldGVyKCdpbnB1dFR5cGUnLCBpdGVtSW5kZXgpIGFzIHN0cmluZztcbiAgICBjb25zdCBvcHRpb25zID0gY29udGV4dC5nZXROb2RlUGFyYW1ldGVyKCdvcHRpb25zJywgaXRlbUluZGV4LCB7fSkgYXMge1xuICAgICAgICB0ZW1wZXJhdHVyZT86IG51bWJlcjtcbiAgICAgICAgbWF4VG9rZW5zPzogbnVtYmVyO1xuICAgICAgICBqc29uTW9kZT86IGJvb2xlYW47XG4gICAgICAgIHRvcFA/OiBudW1iZXI7XG4gICAgfTtcblxuICAgIC8vIEJ1aWxkIG1lc3NhZ2VzXG4gICAgbGV0IG1lc3NhZ2VzOiBBcnJheTx7IHJvbGU6IHN0cmluZzsgY29udGVudDogc3RyaW5nIH0+ID0gW107XG5cbiAgICBpZiAoaW5wdXRUeXBlID09PSAnc2ltcGxlJykge1xuICAgICAgICBjb25zdCBwcm9tcHQgPSBjb250ZXh0LmdldE5vZGVQYXJhbWV0ZXIoJ3Byb21wdCcsIGl0ZW1JbmRleCkgYXMgc3RyaW5nO1xuICAgICAgICBjb25zdCBzeXN0ZW1NZXNzYWdlID0gY29udGV4dC5nZXROb2RlUGFyYW1ldGVyKCdzeXN0ZW1NZXNzYWdlJywgaXRlbUluZGV4LCAnJykgYXMgc3RyaW5nO1xuXG4gICAgICAgIGlmIChzeXN0ZW1NZXNzYWdlKSB7XG4gICAgICAgICAgICBtZXNzYWdlcy5wdXNoKHsgcm9sZTogJ3N5c3RlbScsIGNvbnRlbnQ6IHN5c3RlbU1lc3NhZ2UgfSk7XG4gICAgICAgIH1cbiAgICAgICAgbWVzc2FnZXMucHVzaCh7IHJvbGU6ICd1c2VyJywgY29udGVudDogcHJvbXB0IH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IG1lc3NhZ2VzRGF0YSA9IGNvbnRleHQuZ2V0Tm9kZVBhcmFtZXRlcignbWVzc2FnZXMnLCBpdGVtSW5kZXgpIGFzIHtcbiAgICAgICAgICAgIG1lc3NhZ2VWYWx1ZXM/OiBBcnJheTx7IHJvbGU6IHN0cmluZzsgY29udGVudDogc3RyaW5nIH0+O1xuICAgICAgICB9O1xuICAgICAgICBtZXNzYWdlcyA9IG1lc3NhZ2VzRGF0YS5tZXNzYWdlVmFsdWVzIHx8IFtdO1xuICAgIH1cblxuICAgIC8vIENhbGwgQVBJXG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBjbGllbnQuY2hhdC5jcmVhdGUoe1xuICAgICAgICBtb2RlbCxcbiAgICAgICAgbWVzc2FnZXM6IG1lc3NhZ2VzIGFzIGFueSxcbiAgICAgICAgdGVtcGVyYXR1cmU6IG9wdGlvbnMudGVtcGVyYXR1cmUsXG4gICAgICAgIG1heF90b2tlbnM6IG9wdGlvbnMubWF4VG9rZW5zLFxuICAgICAgICB0b3BfcDogb3B0aW9ucy50b3BQLFxuICAgICAgICByZXNwb25zZV9mb3JtYXQ6IG9wdGlvbnMuanNvbk1vZGUgPyB7IHR5cGU6ICdqc29uX29iamVjdCcgfSA6IHVuZGVmaW5lZCxcbiAgICB9KTtcblxuICAgIC8vIE5vcm1hbGl6ZSBvdXRwdXRcbiAgICBjb25zdCBjaG9pY2UgPSByZXNwb25zZS5jaG9pY2VzPy5bMF07XG4gICAgcmV0dXJuIHtcbiAgICAgICAgY29udGVudDogY2hvaWNlPy5tZXNzYWdlPy5jb250ZW50IHx8ICcnLFxuICAgICAgICByb2xlOiBjaG9pY2U/Lm1lc3NhZ2U/LnJvbGUgfHwgJ2Fzc2lzdGFudCcsXG4gICAgICAgIGZpbmlzaFJlYXNvbjogY2hvaWNlPy5maW5pc2hfcmVhc29uIHx8IG51bGwsXG4gICAgICAgIHVzYWdlOiByZXNwb25zZS51c2FnZVxuICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgICAgcHJvbXB0VG9rZW5zOiByZXNwb25zZS51c2FnZS5wcm9tcHRfdG9rZW5zLFxuICAgICAgICAgICAgICAgIGNvbXBsZXRpb25Ub2tlbnM6IHJlc3BvbnNlLnVzYWdlLmNvbXBsZXRpb25fdG9rZW5zLFxuICAgICAgICAgICAgICAgIHRvdGFsVG9rZW5zOiByZXNwb25zZS51c2FnZS50b3RhbF90b2tlbnMsXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICA6IG51bGwsXG4gICAgICAgIF9yYXc6IHJlc3BvbnNlIGFzIHVua25vd24gYXMgSURhdGFPYmplY3QsXG4gICAgfTtcbn1cblxuLy8gSW1hZ2UgaGFuZGxlciAtIHJldHVybnMgeyBqc29uLCBiaW5hcnkgfSBmb3IgcHJvcGVyIG44biBiaW5hcnkgZGF0YSBoYW5kbGluZ1xuYXN5bmMgZnVuY3Rpb24gaGFuZGxlSW1hZ2UoXG4gICAgY29udGV4dDogSUV4ZWN1dGVGdW5jdGlvbnMsXG4gICAgY2xpZW50OiBRaW5pdUFJLFxuICAgIGl0ZW1JbmRleDogbnVtYmVyXG4pOiBQcm9taXNlPHsganNvbjogSURhdGFPYmplY3Q7IGJpbmFyeT86IElCaW5hcnlLZXlEYXRhIH0+IHtcbiAgICBjb25zdCBvcGVyYXRpb24gPSBjb250ZXh0LmdldE5vZGVQYXJhbWV0ZXIoJ29wZXJhdGlvbicsIGl0ZW1JbmRleCkgYXMgc3RyaW5nO1xuICAgIGNvbnN0IG1vZGVsID0gY29udGV4dC5nZXROb2RlUGFyYW1ldGVyKCdtb2RlbCcsIGl0ZW1JbmRleCkgYXMgc3RyaW5nO1xuICAgIGNvbnN0IHByb21wdCA9IGNvbnRleHQuZ2V0Tm9kZVBhcmFtZXRlcigncHJvbXB0JywgaXRlbUluZGV4KSBhcyBzdHJpbmc7XG4gICAgY29uc3Qgd2FpdEZvckNvbXBsZXRpb24gPSBjb250ZXh0LmdldE5vZGVQYXJhbWV0ZXIoJ3dhaXRGb3JDb21wbGV0aW9uJywgaXRlbUluZGV4LCB0cnVlKSBhcyBib29sZWFuO1xuICAgIGNvbnN0IG9wdGlvbnMgPSBjb250ZXh0LmdldE5vZGVQYXJhbWV0ZXIoJ29wdGlvbnMnLCBpdGVtSW5kZXgsIHt9KSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcblxuICAgIGNvbnN0IHBhcmFtczogYW55ID0ge1xuICAgICAgICBtb2RlbCxcbiAgICAgICAgcHJvbXB0LFxuICAgICAgICBuZWdhdGl2ZV9wcm9tcHQ6IG9wdGlvbnMubmVnYXRpdmVQcm9tcHQsXG4gICAgICAgIGFzcGVjdF9yYXRpbzogb3B0aW9ucy5hc3BlY3RSYXRpbyxcbiAgICAgICAgbjogb3B0aW9ucy5uLFxuICAgIH07XG5cbiAgICBpZiAob3BlcmF0aW9uID09PSAnZWRpdCcpIHtcbiAgICAgICAgY29uc3QgcmVmZXJlbmNlVXJsID0gY29udGV4dC5nZXROb2RlUGFyYW1ldGVyKCdyZWZlcmVuY2VJbWFnZVVybCcsIGl0ZW1JbmRleCwgJycpIGFzIHN0cmluZztcbiAgICAgICAgaWYgKHJlZmVyZW5jZVVybCkge1xuICAgICAgICAgICAgcGFyYW1zLmltYWdlX3VybCA9IHJlZmVyZW5jZVVybDtcbiAgICAgICAgfVxuICAgICAgICBpZiAob3B0aW9ucy5tYXNrKSB7XG4gICAgICAgICAgICBwYXJhbXMubWFzayA9IG9wdGlvbnMubWFzaztcbiAgICAgICAgfVxuICAgICAgICBwYXJhbXMuc3RyZW5ndGggPSBvcHRpb25zLnN0cmVuZ3RoO1xuICAgICAgICBwYXJhbXMuaW1hZ2VfcmVmZXJlbmNlID0gb3B0aW9ucy5pbWFnZVJlZmVyZW5jZTtcbiAgICB9XG5cbiAgICAvLyBIYW5kbGUgaW1hZ2VfY29uZmlnXG4gICAgaWYgKG9wdGlvbnMuaW1hZ2VTaXplKSB7XG4gICAgICAgIHBhcmFtcy5pbWFnZV9jb25maWcgPSB7IGltYWdlX3NpemU6IG9wdGlvbnMuaW1hZ2VTaXplIH07XG4gICAgfVxuXG4gICAgLy8gQWR2YW5jZWQgaW1hZ2UgcmVmZXJlbmNlcyAoZ2VuZXJhdGUgb25seSlcbiAgICBpZiAob3BlcmF0aW9uID09PSAnZ2VuZXJhdGUnKSB7XG4gICAgICAgIGNvbnN0IHN1YmplY3RJbWFnZVVybHMgPSBjb250ZXh0LmdldE5vZGVQYXJhbWV0ZXIoJ3N1YmplY3RJbWFnZVVybHMnLCBpdGVtSW5kZXgsICcnKSBhcyBzdHJpbmc7XG4gICAgICAgIGNvbnN0IHNjZW5lSW1hZ2VVcmwgPSBjb250ZXh0LmdldE5vZGVQYXJhbWV0ZXIoJ3NjZW5lSW1hZ2VVcmwnLCBpdGVtSW5kZXgsICcnKSBhcyBzdHJpbmc7XG4gICAgICAgIGNvbnN0IHN0eWxlSW1hZ2VVcmwgPSBjb250ZXh0LmdldE5vZGVQYXJhbWV0ZXIoJ3N0eWxlSW1hZ2VVcmwnLCBpdGVtSW5kZXgsICcnKSBhcyBzdHJpbmc7XG5cbiAgICAgICAgLy8gU3ViamVjdCByZWZlcmVuY2UgaW1hZ2VzXG4gICAgICAgIGlmIChzdWJqZWN0SW1hZ2VVcmxzKSB7XG4gICAgICAgICAgICBjb25zdCB1cmxzID0gc3ViamVjdEltYWdlVXJscy5zcGxpdCgnLCcpLm1hcCh1ID0+IHUudHJpbSgpKS5maWx0ZXIodSA9PiB1KTtcbiAgICAgICAgICAgIGlmICh1cmxzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICBwYXJhbXMuc3ViamVjdF9pbWFnZV9saXN0ID0gdXJscy5tYXAoaW1hZ2UgPT4gKHsgaW1hZ2UsIGltYWdlX3R5cGU6ICdzdWJqZWN0JyB9KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBTY2VuZSByZWZlcmVuY2UgaW1hZ2VcbiAgICAgICAgaWYgKHNjZW5lSW1hZ2VVcmwpIHtcbiAgICAgICAgICAgIHBhcmFtcy5zY2VuZV9pbWFnZSA9IHsgaW1hZ2U6IHNjZW5lSW1hZ2VVcmwgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFN0eWxlIHJlZmVyZW5jZSBpbWFnZVxuICAgICAgICBpZiAoc3R5bGVJbWFnZVVybCkge1xuICAgICAgICAgICAgcGFyYW1zLnN0eWxlX2ltYWdlID0geyBpbWFnZTogc3R5bGVJbWFnZVVybCB9O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgbGV0IHJlc3VsdDogYW55O1xuICAgIGlmIChvcGVyYXRpb24gPT09ICdnZW5lcmF0ZScpIHtcbiAgICAgICAgY29uc3QgY3JlYXRlUmVzdWx0ID0gYXdhaXQgY2xpZW50LmltYWdlLmdlbmVyYXRlKHBhcmFtcyk7XG4gICAgICAgIGlmICh3YWl0Rm9yQ29tcGxldGlvbikge1xuICAgICAgICAgICAgcmVzdWx0ID0gYXdhaXQgY2xpZW50LmltYWdlLndhaXRGb3JSZXN1bHQoY3JlYXRlUmVzdWx0KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlc3VsdCA9IGNyZWF0ZVJlc3VsdDtcbiAgICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc3VsdCA9IGF3YWl0IGNsaWVudC5pbWFnZS5lZGl0KHBhcmFtcyk7XG4gICAgfVxuXG4gICAgLy8gQnVpbGQgYmluYXJ5IGRhdGEgZnJvbSBiYXNlNjQgaW1hZ2VzXG4gICAgY29uc3QgYmluYXJ5OiBJQmluYXJ5S2V5RGF0YSA9IHt9O1xuICAgIGNvbnN0IGltYWdlczogYW55W10gPSBbXTtcblxuICAgIGlmIChyZXN1bHQuZGF0YSAmJiBBcnJheS5pc0FycmF5KHJlc3VsdC5kYXRhKSkge1xuICAgICAgICBmb3IgKGxldCBpZHggPSAwOyBpZHggPCByZXN1bHQuZGF0YS5sZW5ndGg7IGlkeCsrKSB7XG4gICAgICAgICAgICBjb25zdCBpbWcgPSByZXN1bHQuZGF0YVtpZHhdO1xuICAgICAgICAgICAgaW1hZ2VzLnB1c2goe1xuICAgICAgICAgICAgICAgIHVybDogaW1nLnVybCB8fCB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgaW5kZXg6IGltZy5pbmRleCxcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAvLyBDb252ZXJ0IGJhc2U2NCB0byBiaW5hcnkgZGF0YSBmb3IgZG93bnN0cmVhbSB1c2FnZVxuICAgICAgICAgICAgaWYgKGltZy5iNjRfanNvbikge1xuICAgICAgICAgICAgICAgIGNvbnN0IGJ1ZmZlciA9IEJ1ZmZlci5mcm9tKGltZy5iNjRfanNvbiwgJ2Jhc2U2NCcpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGJpbmFyeUtleSA9IGlkeCA9PT0gMCA/ICdkYXRhJyA6IGBkYXRhXyR7aWR4fWA7XG4gICAgICAgICAgICAgICAgYmluYXJ5W2JpbmFyeUtleV0gPSBhd2FpdCBjb250ZXh0LmhlbHBlcnMucHJlcGFyZUJpbmFyeURhdGEoXG4gICAgICAgICAgICAgICAgICAgIGJ1ZmZlcixcbiAgICAgICAgICAgICAgICAgICAgYGltYWdlXyR7aWR4fS4ke3Jlc3VsdC5vdXRwdXRfZm9ybWF0IHx8ICdwbmcnfWAsXG4gICAgICAgICAgICAgICAgICAgIGBpbWFnZS8ke3Jlc3VsdC5vdXRwdXRfZm9ybWF0IHx8ICdwbmcnfWBcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgICAganNvbjoge1xuICAgICAgICAgICAgaW1hZ2VzLFxuICAgICAgICAgICAgc3RhdHVzOiByZXN1bHQuc3RhdHVzIHx8ICd1bmtub3duJyxcbiAgICAgICAgICAgIHRhc2tJZDogcmVzdWx0LnRhc2tfaWQsXG4gICAgICAgICAgICBpc1N5bmM6IHJlc3VsdC5pc1N5bmMsXG4gICAgICAgICAgICBpbWFnZUNvdW50OiBpbWFnZXMubGVuZ3RoLFxuICAgICAgICAgICAgX3JhdzogcmVzdWx0LFxuICAgICAgICB9LFxuICAgICAgICBiaW5hcnk6IE9iamVjdC5rZXlzKGJpbmFyeSkubGVuZ3RoID4gMCA/IGJpbmFyeSA6IHVuZGVmaW5lZCxcbiAgICB9O1xufVxuXG4vLyBWaWRlbyBoYW5kbGVyXG5hc3luYyBmdW5jdGlvbiBoYW5kbGVWaWRlbyhcbiAgICBjb250ZXh0OiBJRXhlY3V0ZUZ1bmN0aW9ucyxcbiAgICBjbGllbnQ6IFFpbml1QUksXG4gICAgaXRlbUluZGV4OiBudW1iZXJcbik6IFByb21pc2U8SURhdGFPYmplY3Q+IHtcbiAgICBjb25zdCBvcGVyYXRpb24gPSBjb250ZXh0LmdldE5vZGVQYXJhbWV0ZXIoJ29wZXJhdGlvbicsIGl0ZW1JbmRleCkgYXMgc3RyaW5nO1xuXG4gICAgaWYgKG9wZXJhdGlvbiA9PT0gJ2dldFN0YXR1cycpIHtcbiAgICAgICAgY29uc3QgdGFza0lkID0gY29udGV4dC5nZXROb2RlUGFyYW1ldGVyKCd0YXNrSWQnLCBpdGVtSW5kZXgpIGFzIHN0cmluZztcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgY2xpZW50LnZpZGVvLmdldCh0YXNrSWQpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgaWQ6IHJlc3VsdC5pZCxcbiAgICAgICAgICAgIHN0YXR1czogcmVzdWx0LnN0YXR1cyxcbiAgICAgICAgICAgIHZpZGVvczogcmVzdWx0LnRhc2tfcmVzdWx0Py52aWRlb3MgfHwgW10sXG4gICAgICAgICAgICBtZXNzYWdlOiByZXN1bHQubWVzc2FnZSxcbiAgICAgICAgICAgIF9yYXc6IHJlc3VsdCBhcyB1bmtub3duIGFzIElEYXRhT2JqZWN0LFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIGlmIChvcGVyYXRpb24gPT09ICdyZW1peCcpIHtcbiAgICAgICAgY29uc3Qgc291cmNlVmlkZW9JZCA9IGNvbnRleHQuZ2V0Tm9kZVBhcmFtZXRlcignc291cmNlVmlkZW9JZCcsIGl0ZW1JbmRleCkgYXMgc3RyaW5nO1xuICAgICAgICBjb25zdCByZW1peFByb21wdCA9IGNvbnRleHQuZ2V0Tm9kZVBhcmFtZXRlcigncmVtaXhQcm9tcHQnLCBpdGVtSW5kZXgsICcnKSBhcyBzdHJpbmc7XG4gICAgICAgIGNvbnN0IHdhaXRGb3JDb21wbGV0aW9uID0gY29udGV4dC5nZXROb2RlUGFyYW1ldGVyKCd3YWl0Rm9yQ29tcGxldGlvbicsIGl0ZW1JbmRleCwgdHJ1ZSkgYXMgYm9vbGVhbjtcbiAgICAgICAgY29uc3QgcmVtaXhPcHRpb25zID0gY29udGV4dC5nZXROb2RlUGFyYW1ldGVyKCdyZW1peE9wdGlvbnMnLCBpdGVtSW5kZXgsIHt9KSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcblxuICAgICAgICBjb25zdCByZW1peFBhcmFtczogYW55ID0ge307XG4gICAgICAgIGlmIChyZW1peFByb21wdCkgcmVtaXhQYXJhbXMucHJvbXB0ID0gcmVtaXhQcm9tcHQ7XG4gICAgICAgIGlmIChyZW1peE9wdGlvbnMuZHVyYXRpb24pIHJlbWl4UGFyYW1zLmR1cmF0aW9uID0gcmVtaXhPcHRpb25zLmR1cmF0aW9uO1xuICAgICAgICBpZiAocmVtaXhPcHRpb25zLm1vZGUpIHJlbWl4UGFyYW1zLm1vZGUgPSByZW1peE9wdGlvbnMubW9kZTtcbiAgICAgICAgaWYgKHJlbWl4T3B0aW9ucy5uZWdhdGl2ZVByb21wdCkgcmVtaXhQYXJhbXMubmVnYXRpdmVfcHJvbXB0ID0gcmVtaXhPcHRpb25zLm5lZ2F0aXZlUHJvbXB0O1xuXG4gICAgICAgIGNvbnN0IHRhc2sgPSBhd2FpdCBjbGllbnQudmlkZW8ucmVtaXgoc291cmNlVmlkZW9JZCwgcmVtaXhQYXJhbXMpO1xuXG4gICAgICAgIGlmICh3YWl0Rm9yQ29tcGxldGlvbikge1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgY2xpZW50LnZpZGVvLndhaXRGb3JDb21wbGV0aW9uKHRhc2suaWQpO1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBpZDogcmVzdWx0LmlkLFxuICAgICAgICAgICAgICAgIHN0YXR1czogcmVzdWx0LnN0YXR1cyxcbiAgICAgICAgICAgICAgICB2aWRlb3M6IHJlc3VsdC50YXNrX3Jlc3VsdD8udmlkZW9zIHx8IFtdLFxuICAgICAgICAgICAgICAgIF9yYXc6IHJlc3VsdCBhcyB1bmtub3duIGFzIElEYXRhT2JqZWN0LFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBpZDogdGFzay5pZCxcbiAgICAgICAgICAgIHN0YXR1czogJ3Byb2Nlc3NpbmcnLFxuICAgICAgICAgICAgX3JhdzogdGFzayxcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvLyBHZW5lcmF0ZVxuICAgIGNvbnN0IG1vZGVsID0gY29udGV4dC5nZXROb2RlUGFyYW1ldGVyKCdtb2RlbCcsIGl0ZW1JbmRleCkgYXMgc3RyaW5nO1xuICAgIGNvbnN0IHByb21wdCA9IGNvbnRleHQuZ2V0Tm9kZVBhcmFtZXRlcigncHJvbXB0JywgaXRlbUluZGV4KSBhcyBzdHJpbmc7XG4gICAgY29uc3Qgd2FpdEZvckNvbXBsZXRpb24gPSBjb250ZXh0LmdldE5vZGVQYXJhbWV0ZXIoJ3dhaXRGb3JDb21wbGV0aW9uJywgaXRlbUluZGV4LCB0cnVlKSBhcyBib29sZWFuO1xuICAgIGNvbnN0IGZpcnN0RnJhbWVVcmwgPSBjb250ZXh0LmdldE5vZGVQYXJhbWV0ZXIoJ2ZpcnN0RnJhbWVVcmwnLCBpdGVtSW5kZXgsICcnKSBhcyBzdHJpbmc7XG4gICAgY29uc3QgZmlyc3RGcmFtZUJpbmFyeVByb3BlcnR5ID0gY29udGV4dC5nZXROb2RlUGFyYW1ldGVyKCdmaXJzdEZyYW1lQmluYXJ5UHJvcGVydHknLCBpdGVtSW5kZXgsICcnKSBhcyBzdHJpbmc7XG4gICAgY29uc3QgbGFzdEZyYW1lVXJsID0gY29udGV4dC5nZXROb2RlUGFyYW1ldGVyKCdsYXN0RnJhbWVVcmwnLCBpdGVtSW5kZXgsICcnKSBhcyBzdHJpbmc7XG4gICAgY29uc3QgbGFzdEZyYW1lQmluYXJ5UHJvcGVydHkgPSBjb250ZXh0LmdldE5vZGVQYXJhbWV0ZXIoJ2xhc3RGcmFtZUJpbmFyeVByb3BlcnR5JywgaXRlbUluZGV4LCAnJykgYXMgc3RyaW5nO1xuICAgIGNvbnN0IGFzcGVjdFJhdGlvID0gY29udGV4dC5nZXROb2RlUGFyYW1ldGVyKCdhc3BlY3RSYXRpbycsIGl0ZW1JbmRleCwgJzE2OjknKSBhcyBzdHJpbmc7XG4gICAgY29uc3Qgb3B0aW9ucyA9IGNvbnRleHQuZ2V0Tm9kZVBhcmFtZXRlcignb3B0aW9ucycsIGl0ZW1JbmRleCwge30pIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuXG4gICAgY29uc3QgcGFyYW1zOiBhbnkgPSB7XG4gICAgICAgIG1vZGVsLFxuICAgICAgICBwcm9tcHQsXG4gICAgICAgIG5lZ2F0aXZlX3Byb21wdDogb3B0aW9ucy5uZWdhdGl2ZVByb21wdCxcbiAgICAgICAgYXNwZWN0X3JhdGlvOiBhc3BlY3RSYXRpbyxcbiAgICB9O1xuXG4gICAgLy8gRnJhbWUgY29udHJvbCAtIHN1cHBvcnQgYm90aCBVUkwgYW5kIEJpbmFyeSBEYXRhXG4gICAgY29uc3QgZnJhbWVzOiBhbnkgPSB7fTtcblxuICAgIC8vIEZpcnN0IGZyYW1lXG4gICAgaWYgKGZpcnN0RnJhbWVVcmwpIHtcbiAgICAgICAgZnJhbWVzLmZpcnN0ID0geyB1cmw6IGZpcnN0RnJhbWVVcmwgfTtcbiAgICB9IGVsc2UgaWYgKGZpcnN0RnJhbWVCaW5hcnlQcm9wZXJ0eSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgYnVmZmVyID0gYXdhaXQgY29udGV4dC5oZWxwZXJzLmdldEJpbmFyeURhdGFCdWZmZXIoaXRlbUluZGV4LCBmaXJzdEZyYW1lQmluYXJ5UHJvcGVydHkpO1xuICAgICAgICAgICAgZnJhbWVzLmZpcnN0ID0geyBiYXNlNjQ6IGJ1ZmZlci50b1N0cmluZygnYmFzZTY0JykgfTtcbiAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgICAvLyBCaW5hcnkgZGF0YSBub3QgZm91bmQsIHNraXBcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIExhc3QgZnJhbWVcbiAgICBpZiAobGFzdEZyYW1lVXJsKSB7XG4gICAgICAgIGZyYW1lcy5sYXN0ID0geyB1cmw6IGxhc3RGcmFtZVVybCB9O1xuICAgIH0gZWxzZSBpZiAobGFzdEZyYW1lQmluYXJ5UHJvcGVydHkpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IGJ1ZmZlciA9IGF3YWl0IGNvbnRleHQuaGVscGVycy5nZXRCaW5hcnlEYXRhQnVmZmVyKGl0ZW1JbmRleCwgbGFzdEZyYW1lQmluYXJ5UHJvcGVydHkpO1xuICAgICAgICAgICAgZnJhbWVzLmxhc3QgPSB7IGJhc2U2NDogYnVmZmVyLnRvU3RyaW5nKCdiYXNlNjQnKSB9O1xuICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAgIC8vIEJpbmFyeSBkYXRhIG5vdCBmb3VuZCwgc2tpcFxuICAgICAgICB9XG4gICAgfVxuXG4gICAgaWYgKE9iamVjdC5rZXlzKGZyYW1lcykubGVuZ3RoID4gMCkge1xuICAgICAgICBwYXJhbXMuZnJhbWVzID0gZnJhbWVzO1xuICAgIH1cblxuICAgIC8vIFZpZGVvIHJlZmVyZW5jZSAodmlkZW9fbGlzdCkgZm9yIHZpZGVvLXRvLXZpZGVvIGdlbmVyYXRpb25cbiAgICBjb25zdCB2aWRlb1JlZmVyZW5jZVVybCA9IGNvbnRleHQuZ2V0Tm9kZVBhcmFtZXRlcigndmlkZW9SZWZlcmVuY2VVcmwnLCBpdGVtSW5kZXgsICcnKSBhcyBzdHJpbmc7XG4gICAgY29uc3Qga2VlcE9yaWdpbmFsU291bmQgPSBjb250ZXh0LmdldE5vZGVQYXJhbWV0ZXIoJ2tlZXBPcmlnaW5hbFNvdW5kJywgaXRlbUluZGV4LCBmYWxzZSkgYXMgYm9vbGVhbjtcbiAgICBpZiAodmlkZW9SZWZlcmVuY2VVcmwpIHtcbiAgICAgICAgcGFyYW1zLnZpZGVvX2xpc3QgPSBbe1xuICAgICAgICAgICAgdmlkZW9fdXJsOiB2aWRlb1JlZmVyZW5jZVVybCxcbiAgICAgICAgICAgIGtlZXBfb3JpZ2luYWxfc291bmQ6IGtlZXBPcmlnaW5hbFNvdW5kID8gJ3llcycgOiAnbm8nLFxuICAgICAgICB9XTtcbiAgICB9XG5cbiAgICAvLyBNb2RlbC1zcGVjaWZpYyBvcHRpb25zXG4gICAgaWYgKG1vZGVsLmluY2x1ZGVzKCdrbGluZycpKSB7XG4gICAgICAgIGNvbnN0IGtsaW5nT3B0aW9ucyA9IGNvbnRleHQuZ2V0Tm9kZVBhcmFtZXRlcigna2xpbmdPcHRpb25zJywgaXRlbUluZGV4LCB7fSkgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgICAgIC8vIER1cmF0aW9uIGlzIHJlcXVpcmVkIGZvciBLbGluZyAtIGRlZmF1bHQgdG8gNSBzZWNvbmRzXG4gICAgICAgIHBhcmFtcy5kdXJhdGlvbiA9IGtsaW5nT3B0aW9ucy5kdXJhdGlvbiB8fCAnNSc7XG4gICAgICAgIGlmIChrbGluZ09wdGlvbnMubW9kZSkgcGFyYW1zLm1vZGUgPSBrbGluZ09wdGlvbnMubW9kZTtcbiAgICAgICAgaWYgKGtsaW5nT3B0aW9ucy5jZmdTY2FsZSkgcGFyYW1zLmNmZ19zY2FsZSA9IGtsaW5nT3B0aW9ucy5jZmdTY2FsZTtcblxuICAgICAgICAvLyBVc2Ugc2l6ZSBmcm9tIG9wdGlvbnMsIG9yIGRlcml2ZSBmcm9tIGFzcGVjdF9yYXRpbyAod29ya2Fyb3VuZCBmb3IgU0RLIGJ1ZylcbiAgICAgICAgaWYgKGtsaW5nT3B0aW9ucy5zaXplKSB7XG4gICAgICAgICAgICBwYXJhbXMuc2l6ZSA9IGtsaW5nT3B0aW9ucy5zaXplO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gTWFwIGFzcGVjdF9yYXRpbyB0byBkZWZhdWx0IHNpemUgZm9yIEtsaW5nIEFQSVxuICAgICAgICAgICAgY29uc3Qgc2l6ZU1hcDogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHtcbiAgICAgICAgICAgICAgICAnMTY6OSc6ICcxOTIwOjEwODAnLFxuICAgICAgICAgICAgICAgICc5OjE2JzogJzEwODA6MTkyMCcsXG4gICAgICAgICAgICAgICAgJzE6MSc6ICcxMDgwOjEwODAnLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHBhcmFtcy5zaXplID0gc2l6ZU1hcFthc3BlY3RSYXRpb10gfHwgJzE5MjA6MTA4MCc7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAobW9kZWwuaW5jbHVkZXMoJ3ZlbycpKSB7XG4gICAgICAgIGNvbnN0IHZlb09wdGlvbnMgPSBjb250ZXh0LmdldE5vZGVQYXJhbWV0ZXIoJ3Zlb09wdGlvbnMnLCBpdGVtSW5kZXgsIHt9KSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICAgICAgLy8gRHVyYXRpb25TZWNvbmRzIGlzIHJlcXVpcmVkIGZvciBWZW8gLSBmaXhlZCBhdCA4IHNlY29uZHNcbiAgICAgICAgcGFyYW1zLmR1cmF0aW9uID0gdmVvT3B0aW9ucy5kdXJhdGlvbiB8fCA4O1xuICAgICAgICBpZiAodmVvT3B0aW9ucy5nZW5lcmF0ZUF1ZGlvICE9PSB1bmRlZmluZWQpIHBhcmFtcy5nZW5lcmF0ZV9hdWRpbyA9IHZlb09wdGlvbnMuZ2VuZXJhdGVBdWRpbztcbiAgICAgICAgaWYgKHZlb09wdGlvbnMucmVzb2x1dGlvbikgcGFyYW1zLnJlc29sdXRpb24gPSB2ZW9PcHRpb25zLnJlc29sdXRpb247XG4gICAgICAgIGlmICh2ZW9PcHRpb25zLnNhbXBsZUNvdW50KSBwYXJhbXMuc2FtcGxlX2NvdW50ID0gdmVvT3B0aW9ucy5zYW1wbGVDb3VudDtcbiAgICAgICAgaWYgKHZlb09wdGlvbnMucGVyc29uR2VuZXJhdGlvbikgcGFyYW1zLnBlcnNvbl9nZW5lcmF0aW9uID0gdmVvT3B0aW9ucy5wZXJzb25HZW5lcmF0aW9uO1xuICAgICAgICBpZiAodmVvT3B0aW9ucy5zZWVkKSBwYXJhbXMuc2VlZCA9IHZlb09wdGlvbnMuc2VlZDtcbiAgICB9XG5cbiAgICBjb25zdCB0YXNrID0gYXdhaXQgY2xpZW50LnZpZGVvLmNyZWF0ZShwYXJhbXMpO1xuXG4gICAgaWYgKHdhaXRGb3JDb21wbGV0aW9uKSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGNsaWVudC52aWRlby53YWl0Rm9yQ29tcGxldGlvbih0YXNrLmlkKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGlkOiByZXN1bHQuaWQsXG4gICAgICAgICAgICBzdGF0dXM6IHJlc3VsdC5zdGF0dXMsXG4gICAgICAgICAgICB2aWRlb3M6IHJlc3VsdC50YXNrX3Jlc3VsdD8udmlkZW9zIHx8IFtdLFxuICAgICAgICAgICAgX3JhdzogcmVzdWx0IGFzIHVua25vd24gYXMgSURhdGFPYmplY3QsXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgICAgaWQ6IHRhc2suaWQsXG4gICAgICAgIHN0YXR1czogJ3Byb2Nlc3NpbmcnLFxuICAgICAgICBfcmF3OiB0YXNrLFxuICAgIH07XG59XG5cbi8vIEFnZW50IGhhbmRsZXJcbmFzeW5jIGZ1bmN0aW9uIGhhbmRsZUFnZW50KFxuICAgIGNvbnRleHQ6IElFeGVjdXRlRnVuY3Rpb25zLFxuICAgIGNsaWVudDogUWluaXVBSSxcbiAgICBpdGVtSW5kZXg6IG51bWJlclxuKTogUHJvbWlzZTxJRGF0YU9iamVjdD4ge1xuICAgIGNvbnN0IG1vZGVsID0gY29udGV4dC5nZXROb2RlUGFyYW1ldGVyKCdtb2RlbCcsIGl0ZW1JbmRleCkgYXMgc3RyaW5nO1xuICAgIGNvbnN0IHByb21wdCA9IGNvbnRleHQuZ2V0Tm9kZVBhcmFtZXRlcigncHJvbXB0JywgaXRlbUluZGV4KSBhcyBzdHJpbmc7XG4gICAgY29uc3Qgc3lzdGVtTWVzc2FnZSA9IGNvbnRleHQuZ2V0Tm9kZVBhcmFtZXRlcignc3lzdGVtTWVzc2FnZScsIGl0ZW1JbmRleCwgJycpIGFzIHN0cmluZztcbiAgICBjb25zdCBvcHRpb25zID0gY29udGV4dC5nZXROb2RlUGFyYW1ldGVyKCdvcHRpb25zJywgaXRlbUluZGV4LCB7fSkgYXMge1xuICAgICAgICBtYXhDb250ZXh0VG9rZW5zPzogbnVtYmVyO1xuICAgICAgICBtYXhTdGVwcz86IG51bWJlcjtcbiAgICAgICAgdGhyZWFkSWQ/OiBzdHJpbmc7XG4gICAgICAgIHRvb2xzPzogc3RyaW5nO1xuICAgICAgICB0ZW1wZXJhdHVyZT86IG51bWJlcjtcbiAgICB9O1xuXG4gICAgLy8gUGFyc2UgdG9vbHMgLSBjb252ZXJ0IGFycmF5IHRvIFJlY29yZDxzdHJpbmcsIFRvb2w+XG4gICAgbGV0IHRvb2xzUmVjb3JkOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkO1xuICAgIGlmIChvcHRpb25zLnRvb2xzKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCB0b29sc0FycmF5ID0gSlNPTi5wYXJzZShvcHRpb25zLnRvb2xzKTtcbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHRvb2xzQXJyYXkpICYmIHRvb2xzQXJyYXkubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIHRvb2xzUmVjb3JkID0ge307XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCB0b29sIG9mIHRvb2xzQXJyYXkpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRvb2wuZnVuY3Rpb24/Lm5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRvb2xzUmVjb3JkW3Rvb2wuZnVuY3Rpb24ubmFtZV0gPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb246IHRvb2wuZnVuY3Rpb24uZGVzY3JpcHRpb24gfHwgJycsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVyczogdG9vbC5mdW5jdGlvbi5wYXJhbWV0ZXJzIHx8IHt9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWN1dGU6IGFzeW5jIChfYXJnczogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRvb2xzIGV4ZWN1dGVkIGJ5IHRoZSBhZ2VudCAtIHdlIHJldHVybiBhIHBsYWNlaG9sZGVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7IHJlc3VsdDogJ1Rvb2wgZXhlY3V0aW9uIG5vdCBpbXBsZW1lbnRlZCBpbiBuOG4gbm9kZScgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgTm9kZU9wZXJhdGlvbkVycm9yKFxuICAgICAgICAgICAgICAgIGNvbnRleHQuZ2V0Tm9kZSgpLFxuICAgICAgICAgICAgICAgICdJbnZhbGlkIHRvb2xzIEpTT04gZm9ybWF0JyxcbiAgICAgICAgICAgICAgICB7IGl0ZW1JbmRleCB9XG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZ2VuZXJhdGVUZXh0V2l0aEdyYXBoKHtcbiAgICAgICAgY2xpZW50LFxuICAgICAgICBtb2RlbCxcbiAgICAgICAgcHJvbXB0LFxuICAgICAgICBzeXN0ZW06IHN5c3RlbU1lc3NhZ2UgfHwgdW5kZWZpbmVkLFxuICAgICAgICBtYXhDb250ZXh0VG9rZW5zOiBvcHRpb25zLm1heENvbnRleHRUb2tlbnMgfHwgMzIwMDAsXG4gICAgICAgIG1heFN0ZXBzOiBvcHRpb25zLm1heFN0ZXBzIHx8IDEwLFxuICAgICAgICB0ZW1wZXJhdHVyZTogb3B0aW9ucy50ZW1wZXJhdHVyZSxcbiAgICAgICAgdG9vbHM6IHRvb2xzUmVjb3JkLFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgICAgY29udGVudDogcmVzdWx0LnRleHQgfHwgJycsXG4gICAgICAgIHN0ZXBzOiByZXN1bHQuc3RlcHM/Lm1hcCgoc3RlcDogYW55KSA9PiAoe1xuICAgICAgICAgICAgdHlwZTogc3RlcC50eXBlLFxuICAgICAgICAgICAgdG9vbE5hbWU6IHN0ZXAudG9vbE5hbWUsXG4gICAgICAgICAgICB0b29sQXJnczogc3RlcC50b29sQXJncyxcbiAgICAgICAgICAgIHRvb2xSZXN1bHQ6IHN0ZXAudG9vbFJlc3VsdCxcbiAgICAgICAgICAgIHRleHQ6IHN0ZXAudGV4dCxcbiAgICAgICAgfSkpIHx8IFtdLFxuICAgICAgICB1c2FnZTogcmVzdWx0LnVzYWdlXG4gICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICBwcm9tcHRUb2tlbnM6IHJlc3VsdC51c2FnZS5wcm9tcHRfdG9rZW5zLFxuICAgICAgICAgICAgICAgIGNvbXBsZXRpb25Ub2tlbnM6IHJlc3VsdC51c2FnZS5jb21wbGV0aW9uX3Rva2VucyxcbiAgICAgICAgICAgICAgICB0b3RhbFRva2VuczogcmVzdWx0LnVzYWdlLnRvdGFsX3Rva2VucyxcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDogbnVsbCxcbiAgICAgICAgX3JhdzogcmVzdWx0IGFzIHVua25vd24gYXMgSURhdGFPYmplY3QsXG4gICAgfTtcbn1cblxuLy8gQXVkaW8gaGFuZGxlclxuYXN5bmMgZnVuY3Rpb24gaGFuZGxlQXVkaW8oXG4gICAgY29udGV4dDogSUV4ZWN1dGVGdW5jdGlvbnMsXG4gICAgY2xpZW50OiBRaW5pdUFJLFxuICAgIGl0ZW1JbmRleDogbnVtYmVyXG4pOiBQcm9taXNlPElEYXRhT2JqZWN0PiB7XG4gICAgY29uc3Qgb3BlcmF0aW9uID0gY29udGV4dC5nZXROb2RlUGFyYW1ldGVyKCdvcGVyYXRpb24nLCBpdGVtSW5kZXgpIGFzIHN0cmluZztcblxuICAgIGlmIChvcGVyYXRpb24gPT09ICd0ZXh0VG9TcGVlY2gnKSB7XG4gICAgICAgIGNvbnN0IHRleHQgPSBjb250ZXh0LmdldE5vZGVQYXJhbWV0ZXIoJ3RleHQnLCBpdGVtSW5kZXgpIGFzIHN0cmluZztcbiAgICAgICAgY29uc3Qgdm9pY2UgPSBjb250ZXh0LmdldE5vZGVQYXJhbWV0ZXIoJ3ZvaWNlJywgaXRlbUluZGV4KSBhcyBzdHJpbmc7XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSBjb250ZXh0LmdldE5vZGVQYXJhbWV0ZXIoJ29wdGlvbnMnLCBpdGVtSW5kZXgsIHt9KSBhcyB7XG4gICAgICAgICAgICBlbmNvZGluZz86IHN0cmluZztcbiAgICAgICAgICAgIHNwZWVkUmF0aW8/OiBudW1iZXI7XG4gICAgICAgICAgICB2b2x1bWU/OiBudW1iZXI7XG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgY2xpZW50LnR0cy5zeW50aGVzaXplKHtcbiAgICAgICAgICAgIHRleHQsXG4gICAgICAgICAgICB2b2ljZV90eXBlOiB2b2ljZSxcbiAgICAgICAgICAgIGVuY29kaW5nOiBvcHRpb25zLmVuY29kaW5nIGFzIGFueSxcbiAgICAgICAgICAgIHNwZWVkX3JhdGlvOiBvcHRpb25zLnNwZWVkUmF0aW8sXG4gICAgICAgICAgICB2b2x1bWU6IG9wdGlvbnMudm9sdW1lLFxuICAgICAgICB9KTtcblxuICAgICAgICAvLyBSZXR1cm4gYXVkaW8gYXMgYmluYXJ5IGRhdGFcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGF1ZGlvOiByZXN1bHQuYXVkaW8sXG4gICAgICAgICAgICBkdXJhdGlvbjogcmVzdWx0LmR1cmF0aW9uLFxuICAgICAgICAgICAgX3JhdzogcmVzdWx0IGFzIHVua25vd24gYXMgSURhdGFPYmplY3QsXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgaWYgKG9wZXJhdGlvbiA9PT0gJ3NwZWVjaFRvVGV4dCcpIHtcbiAgICAgICAgY29uc3QgYmluYXJ5UHJvcGVydHlOYW1lID0gY29udGV4dC5nZXROb2RlUGFyYW1ldGVyKCdiaW5hcnlQcm9wZXJ0eU5hbWUnLCBpdGVtSW5kZXgpIGFzIHN0cmluZztcbiAgICAgICAgY29uc3QgYXVkaW9Gb3JtYXQgPSBjb250ZXh0LmdldE5vZGVQYXJhbWV0ZXIoJ2F1ZGlvRm9ybWF0JywgaXRlbUluZGV4KSBhcyBzdHJpbmc7XG5cbiAgICAgICAgLy8gR2V0IGJpbmFyeSBkYXRhXG4gICAgICAgIGNvbnRleHQuaGVscGVycy5hc3NlcnRCaW5hcnlEYXRhKGl0ZW1JbmRleCwgYmluYXJ5UHJvcGVydHlOYW1lKTtcbiAgICAgICAgY29uc3QgYnVmZmVyID0gYXdhaXQgY29udGV4dC5oZWxwZXJzLmdldEJpbmFyeURhdGFCdWZmZXIoaXRlbUluZGV4LCBiaW5hcnlQcm9wZXJ0eU5hbWUpO1xuICAgICAgICBjb25zdCBiYXNlNjRBdWRpbyA9IGJ1ZmZlci50b1N0cmluZygnYmFzZTY0Jyk7XG5cbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgY2xpZW50LmFzci50cmFuc2NyaWJlKHtcbiAgICAgICAgICAgIGF1ZGlvOiB7XG4gICAgICAgICAgICAgICAgZm9ybWF0OiBhdWRpb0Zvcm1hdCBhcyBhbnksXG4gICAgICAgICAgICAgICAgZGF0YTogYmFzZTY0QXVkaW8sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdGV4dDogcmVzdWx0LnRleHQgfHwgJycsXG4gICAgICAgICAgICB3b3JkczogcmVzdWx0LndvcmRzIHx8IFtdLFxuICAgICAgICAgICAgX3JhdzogcmVzdWx0IGFzIHVua25vd24gYXMgSURhdGFPYmplY3QsXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgdGhyb3cgbmV3IE5vZGVPcGVyYXRpb25FcnJvcihcbiAgICAgICAgY29udGV4dC5nZXROb2RlKCksXG4gICAgICAgIGBVbmtub3duIGF1ZGlvIG9wZXJhdGlvbjogJHtvcGVyYXRpb259YCxcbiAgICAgICAgeyBpdGVtSW5kZXggfVxuICAgICk7XG59XG5cbi8vIFRvb2xzIGhhbmRsZXJcbmFzeW5jIGZ1bmN0aW9uIGhhbmRsZVRvb2xzKFxuICAgIGNvbnRleHQ6IElFeGVjdXRlRnVuY3Rpb25zLFxuICAgIGNsaWVudDogUWluaXVBSSxcbiAgICBpdGVtSW5kZXg6IG51bWJlclxuKTogUHJvbWlzZTxJRGF0YU9iamVjdD4ge1xuICAgIGNvbnN0IG9wZXJhdGlvbiA9IGNvbnRleHQuZ2V0Tm9kZVBhcmFtZXRlcignb3BlcmF0aW9uJywgaXRlbUluZGV4KSBhcyBzdHJpbmc7XG5cbiAgICBpZiAob3BlcmF0aW9uID09PSAnd2ViU2VhcmNoJykge1xuICAgICAgICBjb25zdCBxdWVyeSA9IGNvbnRleHQuZ2V0Tm9kZVBhcmFtZXRlcigncXVlcnknLCBpdGVtSW5kZXgpIGFzIHN0cmluZztcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IGNvbnRleHQuZ2V0Tm9kZVBhcmFtZXRlcignb3B0aW9ucycsIGl0ZW1JbmRleCwge30pIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuXG4gICAgICAgIGNvbnN0IHNlYXJjaFBhcmFtczoge1xuICAgICAgICAgICAgcXVlcnk6IHN0cmluZztcbiAgICAgICAgICAgIG1heF9yZXN1bHRzPzogbnVtYmVyO1xuICAgICAgICAgICAgc2VhcmNoX3R5cGU/OiAnd2ViJyB8ICduZXdzJztcbiAgICAgICAgICAgIHRpbWVfZmlsdGVyPzogJ2RheScgfCAnd2VlaycgfCAnbW9udGgnIHwgJ3llYXInO1xuICAgICAgICAgICAgc2l0ZV9maWx0ZXI/OiBzdHJpbmdbXTtcbiAgICAgICAgfSA9IHsgcXVlcnkgfTtcblxuICAgICAgICBpZiAob3B0aW9ucy5tYXhSZXN1bHRzKSBzZWFyY2hQYXJhbXMubWF4X3Jlc3VsdHMgPSBvcHRpb25zLm1heFJlc3VsdHMgYXMgbnVtYmVyO1xuICAgICAgICBpZiAob3B0aW9ucy5zZWFyY2hUeXBlKSBzZWFyY2hQYXJhbXMuc2VhcmNoX3R5cGUgPSBvcHRpb25zLnNlYXJjaFR5cGUgYXMgJ3dlYicgfCAnbmV3cyc7XG4gICAgICAgIGlmIChvcHRpb25zLnRpbWVGaWx0ZXIpIHNlYXJjaFBhcmFtcy50aW1lX2ZpbHRlciA9IG9wdGlvbnMudGltZUZpbHRlciBhcyAnZGF5JyB8ICd3ZWVrJyB8ICdtb250aCcgfCAneWVhcic7XG4gICAgICAgIGlmIChvcHRpb25zLnNpdGVGaWx0ZXIpIHtcbiAgICAgICAgICAgIGNvbnN0IHNpdGVzID0gKG9wdGlvbnMuc2l0ZUZpbHRlciBhcyBzdHJpbmcpLnNwbGl0KCcsJykubWFwKHMgPT4gcy50cmltKCkpLmZpbHRlcihzID0+IHMpO1xuICAgICAgICAgICAgaWYgKHNpdGVzLmxlbmd0aCA+IDApIHNlYXJjaFBhcmFtcy5zaXRlX2ZpbHRlciA9IHNpdGVzO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcmVzdWx0cyA9IGF3YWl0IGNsaWVudC5zeXMuc2VhcmNoKHNlYXJjaFBhcmFtcyk7XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHJlc3VsdHM6IHJlc3VsdHMgfHwgW10sXG4gICAgICAgICAgICBxdWVyeSxcbiAgICAgICAgICAgIF9yYXc6IHJlc3VsdHMgYXMgdW5rbm93biBhcyBJRGF0YU9iamVjdCxcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBpZiAob3BlcmF0aW9uID09PSAnb2NyJykge1xuICAgICAgICBjb25zdCBpbWFnZVVybCA9IGNvbnRleHQuZ2V0Tm9kZVBhcmFtZXRlcignaW1hZ2VVcmwnLCBpdGVtSW5kZXgsICcnKSBhcyBzdHJpbmc7XG4gICAgICAgIGNvbnN0IGJpbmFyeVByb3BlcnR5TmFtZSA9IGNvbnRleHQuZ2V0Tm9kZVBhcmFtZXRlcignYmluYXJ5UHJvcGVydHlOYW1lJywgaXRlbUluZGV4LCAnZGF0YScpIGFzIHN0cmluZztcblxuICAgICAgICBsZXQgb2NyUGFyYW1zOiB7IHVybD86IHN0cmluZzsgaW1hZ2U/OiBzdHJpbmcgfTtcblxuICAgICAgICBpZiAoaW1hZ2VVcmwpIHtcbiAgICAgICAgICAgIC8vIFVzZSBVUkwgZGlyZWN0bHlcbiAgICAgICAgICAgIG9jclBhcmFtcyA9IHsgdXJsOiBpbWFnZVVybCB9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gR2V0IGZyb20gYmluYXJ5IGFuZCBjcmVhdGUgZGF0YSBVUkxcbiAgICAgICAgICAgIGNvbnN0IGJpbmFyeURhdGEgPSBjb250ZXh0LmhlbHBlcnMuYXNzZXJ0QmluYXJ5RGF0YShpdGVtSW5kZXgsIGJpbmFyeVByb3BlcnR5TmFtZSk7XG4gICAgICAgICAgICBjb25zdCBidWZmZXIgPSBhd2FpdCBjb250ZXh0LmhlbHBlcnMuZ2V0QmluYXJ5RGF0YUJ1ZmZlcihpdGVtSW5kZXgsIGJpbmFyeVByb3BlcnR5TmFtZSk7XG4gICAgICAgICAgICBjb25zdCBtaW1lVHlwZSA9IGJpbmFyeURhdGEubWltZVR5cGUgfHwgJ2ltYWdlL3BuZyc7XG4gICAgICAgICAgICBjb25zdCBiYXNlNjREYXRhID0gYnVmZmVyLnRvU3RyaW5nKCdiYXNlNjQnKTtcbiAgICAgICAgICAgIC8vIEZvcm1hdDogZGF0YTppbWFnZS9wbmc7YmFzZTY0LDxiYXNlNjRfZGF0YT5cbiAgICAgICAgICAgIG9jclBhcmFtcyA9IHsgaW1hZ2U6IGBkYXRhOiR7bWltZVR5cGV9O2Jhc2U2NCwke2Jhc2U2NERhdGF9YCB9O1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgY2xpZW50Lm9jci5kZXRlY3Qob2NyUGFyYW1zKTtcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdGV4dDogcmVzdWx0LnRleHQgfHwgJycsXG4gICAgICAgICAgICBibG9ja3M6IHJlc3VsdC5ibG9ja3MgfHwgW10sXG4gICAgICAgICAgICBfcmF3OiByZXN1bHQgYXMgdW5rbm93biBhcyBJRGF0YU9iamVjdCxcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICB0aHJvdyBuZXcgTm9kZU9wZXJhdGlvbkVycm9yKFxuICAgICAgICBjb250ZXh0LmdldE5vZGUoKSxcbiAgICAgICAgYFVua25vd24gdG9vbHMgb3BlcmF0aW9uOiAke29wZXJhdGlvbn1gLFxuICAgICAgICB7IGl0ZW1JbmRleCB9XG4gICAgKTtcbn1cbiJdfQ==
|
|
699
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUWluaXVBaS5ub2RlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vbm9kZXMvUWluaXVBaS9RaW5pdUFpLm5vZGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsK0NBUXNCO0FBRXRCLHdEQUFpRjtBQUVqRixvRUFBNEU7QUFDNUUsc0VBQStFO0FBQy9FLHNFQUErRTtBQUMvRSxzRUFBK0U7QUFDL0Usc0VBQStFO0FBQy9FLHNFQUErRTtBQUUvRSxNQUFhLE9BQU87SUFBcEI7UUFDSSxnQkFBVyxHQUF5QjtZQUNoQyxXQUFXLEVBQUUsVUFBVTtZQUN2QixJQUFJLEVBQUUsU0FBUztZQUNmLElBQUksRUFBRSxnQkFBZ0I7WUFDdEIsS0FBSyxFQUFFLENBQUMsV0FBVyxDQUFDO1lBQ3BCLE9BQU8sRUFBRSxDQUFDO1lBQ1YsUUFBUSxFQUFFLDhEQUE4RDtZQUN4RSxXQUFXLEVBQUUsc0VBQXNFO1lBQ25GLFFBQVEsRUFBRTtnQkFDTixJQUFJLEVBQUUsVUFBVTthQUNuQjtZQUNELE1BQU0sRUFBRSxDQUFDLE1BQU0sQ0FBQztZQUNoQixPQUFPLEVBQUUsQ0FBQyxNQUFNLENBQUM7WUFDakIsV0FBVyxFQUFFO2dCQUNUO29CQUNJLElBQUksRUFBRSxZQUFZO29CQUNsQixRQUFRLEVBQUUsSUFBSTtpQkFDakI7YUFDSjtZQUNELFVBQVUsRUFBRTtnQkFDUixXQUFXO2dCQUNYO29CQUNJLFdBQVcsRUFBRSxVQUFVO29CQUN2QixJQUFJLEVBQUUsVUFBVTtvQkFDaEIsSUFBSSxFQUFFLFNBQVM7b0JBQ2YsZ0JBQWdCLEVBQUUsSUFBSTtvQkFDdEIsT0FBTyxFQUFFO3dCQUNMOzRCQUNJLElBQUksRUFBRSxNQUFNOzRCQUNaLEtBQUssRUFBRSxNQUFNOzRCQUNiLFdBQVcsRUFBRSwyQkFBMkI7eUJBQzNDO3dCQUNEOzRCQUNJLElBQUksRUFBRSxPQUFPOzRCQUNiLEtBQUssRUFBRSxPQUFPOzRCQUNkLFdBQVcsRUFBRSx5QkFB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LENBQUMsUUFBUSxJQUFJLFdBQVcsQ0FBQztZQUNwRCxNQUFNLFVBQVUsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQzdDLDhDQUE4QztZQUM5QyxTQUFTLEdBQUcsRUFBRSxLQUFLLEVBQUUsUUFBUSxRQUFRLFdBQVcsVUFBVSxFQUFFLEVBQUUsQ0FBQztRQUNuRSxDQUFDO1FBRUQsTUFBTSxNQUFNLEdBQUcsTUFBTSxNQUFNLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUVsRCxPQUFPO1lBQ0gsSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUFJLElBQUksRUFBRTtZQUN2QixNQUFNLEVBQUUsTUFBTSxDQUFDLE1BQU0sSUFBSSxFQUFFO1lBQzNCLElBQUksRUFBRSxNQUFnQztTQUN6QyxDQUFDO0lBQ04sQ0FBQztJQUVELE1BQU0sSUFBSSxpQ0FBa0IsQ0FDeEIsT0FBTyxDQUFDLE9BQU8sRUFBRSxFQUNqQiw0QkFBNEIsU0FBUyxFQUFFLEVBQ3ZDLEVBQUUsU0FBUyxFQUFFLENBQ2hCLENBQUM7QUFDTixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBJRXhlY3V0ZUZ1bmN0aW9ucyxcbiAgICBJTm9kZUV4ZWN1dGlvbkRhdGEsXG4gICAgSU5vZGVUeXBlLFxuICAgIElOb2RlVHlwZURlc2NyaXB0aW9uLFxuICAgIE5vZGVPcGVyYXRpb25FcnJvcixcbiAgICBJRGF0YU9iamVjdCxcbiAgICBJQmluYXJ5S2V5RGF0YSxcbn0gZnJvbSAnbjhuLXdvcmtmbG93JztcblxuaW1wb3J0IHsgUWluaXVBSSwgZ2VuZXJhdGVUZXh0V2l0aEdyYXBoLCBBUElFcnJvciB9IGZyb20gJ0Bib3dlbnF0L3Fpbml1LWFpLXNkayc7XG5cbmltcG9ydCB7IGNoYXRPcGVyYXRpb25zLCBjaGF0RmllbGRzIH0gZnJvbSAnLi9kZXNjcmlwdGlvbnMvQ2hhdERlc2NyaXB0aW9uJztcbmltcG9ydCB7IGltYWdlT3BlcmF0aW9ucywgaW1hZ2VGaWVsZHMgfSBmcm9tICcuL2Rlc2NyaXB0aW9ucy9JbWFnZURlc2NyaXB0aW9uJztcbmltcG9ydCB7IHZpZGVvT3BlcmF0aW9ucywgdmlkZW9GaWVsZHMgfSBmcm9tICcuL2Rlc2NyaXB0aW9ucy9WaWRlb0Rlc2NyaXB0aW9uJztcbmltcG9ydCB7IGFnZW50T3BlcmF0aW9ucywgYWdlbnRGaWVsZHMgfSBmcm9tICcuL2Rlc2NyaXB0aW9ucy9BZ2VudERlc2NyaXB0aW9uJztcbmltcG9ydCB7IGF1ZGlvT3BlcmF0aW9ucywgYXVkaW9GaWVsZHMgfSBmcm9tICcuL2Rlc2NyaXB0aW9ucy9BdWRpb0Rlc2NyaXB0aW9uJztcbmltcG9ydCB7IHRvb2xzT3BlcmF0aW9ucywgdG9vbHNGaWVsZHMgfSBmcm9tICcuL2Rlc2NyaXB0aW9ucy9Ub29sc0Rlc2NyaXB0aW9uJztcblxuZXhwb3J0IGNsYXNzIFFpbml1QWkgaW1wbGVtZW50cyBJTm9kZVR5cGUge1xuICAgIGRlc2NyaXB0aW9uOiBJTm9kZVR5cGVEZXNjcmlwdGlvbiA9IHtcbiAgICAgICAgZGlzcGxheU5hbWU6ICdRaW5pdSBBSScsXG4gICAgICAgIG5hbWU6ICdxaW5pdUFpJyxcbiAgICAgICAgaWNvbjogJ2ZpbGU6cWluaXUuc3ZnJyxcbiAgICAgICAgZ3JvdXA6IFsndHJhbnNmb3JtJ10sXG4gICAgICAgIHZlcnNpb246IDEsXG4gICAgICAgIHN1YnRpdGxlOiAnPXt7JHBhcmFtZXRlcltcIm9wZXJhdGlvblwiXSArIFwiOiBcIiArICRwYXJhbWV0ZXJbXCJyZXNvdXJjZVwiXX19JyxcbiAgICAgICAgZGVzY3JpcHRpb246ICdJbnRlcmFjdCB3aXRoIFFpbml1IEFJIHNlcnZpY2VzIC0gQ2hhdCwgSW1hZ2UsIFZpZGVvLCBBZ2VudCBhbmQgbW9yZScsXG4gICAgICAgIGRlZmF1bHRzOiB7XG4gICAgICAgICAgICBuYW1lOiAnUWluaXUgQUknLFxuICAgICAgICB9LFxuICAgICAgICBpbnB1dHM6IFsnbWFpbiddLFxuICAgICAgICBvdXRwdXRzOiBbJ21haW4nXSxcbiAgICAgICAgY3JlZGVudGlhbHM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAncWluaXVBaUFwaScsXG4gICAgICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgICBwcm9wZXJ0aWVzOiBbXG4gICAgICAgICAgICAvLyBSZXNvdXJjZVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGRpc3BsYXlOYW1lOiAnUmVzb3VyY2UnLFxuICAgICAgICAgICAgICAgIG5hbWU6ICdyZXNvdXJjZScsXG4gICAgICAgICAgICAgICAgdHlwZTogJ29wdGlvbnMnLFxuICAgICAgICAgICAgICAgIG5vRGF0YUV4cHJlc3Npb246IHRydWUsXG4gICAgICAgICAgICAgICAgb3B0aW9uczogW1xuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiAnQ2hhdCcsXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogJ2NoYXQnLFxuICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb246ICdHZW5lcmF0ZSBjaGF0IGNvbXBsZXRpb25zJyxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogJ0ltYWdlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiAnaW1hZ2UnLFxuICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb246ICdHZW5lcmF0ZSBvciBlZGl0IGltYWdlcycsXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICdWaWRlbycsXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogJ3ZpZGVvJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnR2VuZXJhdGUgdmlkZW9zJyxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogJ0FnZW50JyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiAnYWdlbnQnLFxuICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb246ICdSdW4gQUkgYWdlbnQgd2l0aCB0b29scyBhbmQgbWVtb3J5JyxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogJ0F1ZGlvJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiAnYXVkaW8nLFxuICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb246ICdUZXh0LXRvLVNwZWVjaCBhbmQgU3BlZWNoLXRvLVRleHQnLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiAnVG9vbHMnLFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6ICd0b29scycsXG4gICAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogJ1dlYiBTZWFyY2gsIE9DUiBhbmQgbW9yZScsXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICBkZWZhdWx0OiAnY2hhdCcsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgLy8gT3BlcmF0aW9ucyBhbmQgZmllbGRzXG4gICAgICAgICAgICAuLi5jaGF0T3BlcmF0aW9ucyxcbiAgICAgICAgICAgIC4uLmNoYXRGaWVsZHMsXG4gICAgICAgICAgICAuLi5pbWFnZU9wZXJhdGlvbnMsXG4gICAgICAgICAgICAuLi5pbWFnZUZpZWxkcyxcbiAgICAgICAgICAgIC4uLnZpZGVvT3BlcmF0aW9ucyxcbiAgICAgICAgICAgIC4uLnZpZGVvRmllbGRzLFxuICAgICAgICAgICAgLi4uYWdlbnRPcGVyYXRpb25zLFxuICAgICAgICAgICAgLi4uYWdlbnRGaWVsZHMsXG4gICAgICAgICAgICAuLi5hdWRpb09wZXJhdGlvbnMsXG4gICAgICAgICAgICAuLi5hdWRpb0ZpZWxkcyxcbiAgICAgICAgICAgIC4uLnRvb2xzT3BlcmF0aW9ucyxcbiAgICAgICAgICAgIC4uLnRvb2xzRmllbGRzLFxuICAgICAgICBdLFxuICAgIH07XG5cbiAgICBhc3luYyBleGVjdXRlKHRoaXM6IElFeGVjdXRlRnVuY3Rpb25zKTogUHJvbWlzZTxJTm9kZUV4ZWN1dGlvbkRhdGFbXVtdPiB7XG4gICAgICAgIGNvbnN0IGl0ZW1zID0gdGhpcy5nZXRJbnB1dERhdGEoKTtcbiAgICAgICAgY29uc3QgcmV0dXJuRGF0YTogSU5vZGVFeGVjdXRpb25EYXRhW10gPSBbXTtcblxuICAgICAgICAvLyBHZXQgY3JlZGVudGlhbHNcbiAgICAgICAgY29uc3QgY3JlZGVudGlhbHMgPSBhd2FpdCB0aGlzLmdldENyZWRlbnRpYWxzKCdxaW5pdUFpQXBpJyk7XG4gICAgICAgIGNvbnN0IGFwaUtleSA9IGNyZWRlbnRpYWxzLmFwaUtleSBhcyBzdHJpbmc7XG4gICAgICAgIGNvbnN0IGJhc2VVcmwgPSAoY3JlZGVudGlhbHMuYmFzZVVybCBhcyBzdHJpbmcpIHx8ICdodHRwczovL2FwaS5xbmFpZ2MuY29tL3YxJztcblxuICAgICAgICAvLyBJbml0aWFsaXplIGNsaWVudFxuICAgICAgICBjb25zdCBjbGllbnQgPSBuZXcgUWluaXVBSSh7IGFwaUtleSwgYmFzZVVybCB9KTtcblxuICAgICAgICBjb25zdCByZXNvdXJjZSA9IHRoaXMuZ2V0Tm9kZVBhcmFtZXRlcigncmVzb3VyY2UnLCAwKSBhcyBzdHJpbmc7XG5cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpdGVtcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBsZXQgcmVzdWx0OiBJRGF0YU9iamVjdDtcblxuICAgICAgICAgICAgICAgIC8vIFJvdXRlIHRvIGFwcHJvcHJpYXRlIGhhbmRsZXJcbiAgICAgICAgICAgICAgICBpZiAocmVzb3VyY2UgPT09ICdjaGF0Jykge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBhd2FpdCBoYW5kbGVDaGF0KHRoaXMsIGNsaWVudCwgaSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChyZXNvdXJjZSA9PT0gJ2ltYWdlJykge1xuICAgICAgICAgICAgICAgICAgICAvLyBJbWFnZSBuZWVkcyBzcGVjaWFsIGhhbmRsaW5nIGZvciBiaW5hcnkgb3V0cHV0XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGltYWdlUmVzdWx0ID0gYXdhaXQgaGFuZGxlSW1hZ2UodGhpcywgY2xpZW50LCBpKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuRGF0YS5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGpzb246IGltYWdlUmVzdWx0Lmpzb24sXG4gICAgICAgICAgICAgICAgICAgICAgICBiaW5hcnk6IGltYWdlUmVzdWx0LmJpbmFyeSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhaXJlZEl0ZW06IHsgaXRlbTogaSB9LFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChyZXNvdXJjZSA9PT0gJ3ZpZGVvJykge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBhd2FpdCBoYW5kbGVWaWRlbyh0aGlzLCBjbGllbnQsIGkpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocmVzb3VyY2UgPT09ICdhZ2VudCcpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gYXdhaXQgaGFuZGxlQWdlbnQodGhpcywgY2xpZW50LCBpKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHJlc291cmNlID09PSAnYXVkaW8nKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IGF3YWl0IGhhbmRsZUF1ZGlvKHRoaXMsIGNsaWVudCwgaSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChyZXNvdXJjZSA9PT0gJ3Rvb2xzJykge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBhd2FpdCBoYW5kbGVUb29scyh0aGlzLCBjbGllbnQsIGkpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBOb2RlT3BlcmF0aW9uRXJyb3IoXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmdldE5vZGUoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGBVbmtub3duIHJlc291cmNlOiAke3Jlc291cmNlfWAsXG4gICAgICAgICAgICAgICAgICAgICAgICB7IGl0ZW1JbmRleDogaSB9XG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmV0dXJuRGF0YS5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAganNvbjogcmVzdWx0LFxuICAgICAgICAgICAgICAgICAgICBwYWlyZWRJdGVtOiB7IGl0ZW06IGkgfSxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgQVBJRXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IE5vZGVPcGVyYXRpb25FcnJvcihcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZ2V0Tm9kZSgpLFxuICAgICAgICAgICAgICAgICAgICAgICAgYFFpbml1IEFJIEFQSSBFcnJvcjogJHtlcnJvci5tZXNzYWdlfWAsXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbUluZGV4OiBpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBgU3RhdHVzOiAke2Vycm9yLnN0YXR1c30sIENvZGU6ICR7KGVycm9yIGFzIGFueSkuY29kZSB8fCAndW5rbm93bid9YCxcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gW3JldHVybkRhdGFdO1xuICAgIH1cbn1cblxuLy8gQ2hhdCBoYW5kbGVyXG5hc3luYyBmdW5jdGlvbiBoYW5kbGVDaGF0KFxuICAgIGNvbnRleHQ6IElFeGVjdXRlRnVuY3Rpb25zLFxuICAgIGNsaWVudDogUWluaXVBSSxcbiAgICBpdGVtSW5kZXg6IG51bWJlclxuKTogUHJvbWlzZTxJRGF0YU9iamVjdD4ge1xuICAgIGNvbnN0IG1vZGVsID0gY29udGV4dC5nZXROb2RlUGFyYW1ldGVyKCdtb2RlbCcsIGl0ZW1JbmRleCkgYXMgc3RyaW5nO1xuICAgIGNvbnN0IGlucHV0VHlwZSA9IGNvbnRleHQuZ2V0Tm9kZVBhcmFtZXRlcignaW5wdXRUeXBlJywgaXRlbUluZGV4KSBhcyBzdHJpbmc7XG4gICAgY29uc3Qgb3B0aW9ucyA9IGNvbnRleHQuZ2V0Tm9kZVBhcmFtZXRlcignb3B0aW9ucycsIGl0ZW1JbmRleCwge30pIGFzIHtcbiAgICAgICAgdGVtcGVyYXR1cmU/OiBudW1iZXI7XG4gICAgICAgIG1heFRva2Vucz86IG51bWJlcjtcbiAgICAgICAganNvbk1vZGU/OiBib29sZWFuO1xuICAgICAgICB0b3BQPzogbnVtYmVyO1xuICAgIH07XG5cbiAgICAvLyBCdWlsZCBtZXNzYWdlc1xuICAgIGxldCBtZXNzYWdlczogQXJyYXk8eyByb2xlOiBzdHJpbmc7IGNvbnRlbnQ6IHN0cmluZyB9PiA9IFtdO1xuXG4gICAgaWYgKGlucHV0VHlwZSA9PT0gJ3NpbXBsZScpIHtcbiAgICAgICAgY29uc3QgcHJvbXB0ID0gY29udGV4dC5nZXROb2RlUGFyYW1ldGVyKCdwcm9tcHQnLCBpdGVtSW5kZXgpIGFzIHN0cmluZztcbiAgICAgICAgY29uc3Qgc3lzdGVtTWVzc2FnZSA9IGNvbnRleHQuZ2V0Tm9kZVBhcmFtZXRlcignc3lzdGVtTWVzc2FnZScsIGl0ZW1JbmRleCwgJycpIGFzIHN0cmluZztcblxuICAgICAgICBpZiAoc3lzdGVtTWVzc2FnZSkge1xuICAgICAgICAgICAgbWVzc2FnZXMucHVzaCh7IHJvbGU6ICdzeXN0ZW0nLCBjb250ZW50OiBzeXN0ZW1NZXNzYWdlIH0pO1xuICAgICAgICB9XG4gICAgICAgIG1lc3NhZ2VzLnB1c2goeyByb2xlOiAndXNlcicsIGNvbnRlbnQ6IHByb21wdCB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBtZXNzYWdlc0RhdGEgPSBjb250ZXh0LmdldE5vZGVQYXJhbWV0ZXIoJ21lc3NhZ2VzJywgaXRlbUluZGV4KSBhcyB7XG4gICAgICAgICAgICBtZXNzYWdlVmFsdWVzPzogQXJyYXk8eyByb2xlOiBzdHJpbmc7IGNvbnRlbnQ6IHN0cmluZyB9PjtcbiAgICAgICAgfTtcbiAgICAgICAgbWVzc2FnZXMgPSBtZXNzYWdlc0RhdGEubWVzc2FnZVZhbHVlcyB8fCBbXTtcbiAgICB9XG5cbiAgICAvLyBDYWxsIEFQSVxuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgY2xpZW50LmNoYXQuY3JlYXRlKHtcbiAgICAgICAgbW9kZWwsXG4gICAgICAgIG1lc3NhZ2VzOiBtZXNzYWdlcyBhcyBhbnksXG4gICAgICAgIHRlbXBlcmF0dXJlOiBvcHRpb25zLnRlbXBlcmF0dXJlLFxuICAgICAgICBtYXhfdG9rZW5zOiBvcHRpb25zLm1heFRva2VucyxcbiAgICAgICAgdG9wX3A6IG9wdGlvbnMudG9wUCxcbiAgICAgICAgcmVzcG9uc2VfZm9ybWF0OiBvcHRpb25zLmpzb25Nb2RlID8geyB0eXBlOiAnanNvbl9vYmplY3QnIH0gOiB1bmRlZmluZWQsXG4gICAgfSk7XG5cbiAgICAvLyBOb3JtYWxpemUgb3V0cHV0XG4gICAgY29uc3QgY2hvaWNlID0gcmVzcG9uc2UuY2hvaWNlcz8uWzBdO1xuICAgIHJldHVybiB7XG4gICAgICAgIGNvbnRlbnQ6IGNob2ljZT8ubWVzc2FnZT8uY29udGVudCB8fCAnJyxcbiAgICAgICAgcm9sZTogY2hvaWNlPy5tZXNzYWdlPy5yb2xlIHx8ICdhc3Npc3RhbnQnLFxuICAgICAgICBmaW5pc2hSZWFzb246IGNob2ljZT8uZmluaXNoX3JlYXNvbiB8fCBudWxsLFxuICAgICAgICB1c2FnZTogcmVzcG9uc2UudXNhZ2VcbiAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgIHByb21wdFRva2VuczogcmVzcG9uc2UudXNhZ2UucHJvbXB0X3Rva2VucyxcbiAgICAgICAgICAgICAgICBjb21wbGV0aW9uVG9rZW5zOiByZXNwb25zZS51c2FnZS5jb21wbGV0aW9uX3Rva2VucyxcbiAgICAgICAgICAgICAgICB0b3RhbFRva2VuczogcmVzcG9uc2UudXNhZ2UudG90YWxfdG9rZW5zLFxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgOiBudWxsLFxuICAgICAgICBfcmF3OiByZXNwb25zZSBhcyB1bmtub3duIGFzIElEYXRhT2JqZWN0LFxuICAgIH07XG59XG5cbi8vIEltYWdlIGhhbmRsZXIgLSByZXR1cm5zIHsganNvbiwgYmluYXJ5IH0gZm9yIHByb3BlciBuOG4gYmluYXJ5IGRhdGEgaGFuZGxpbmdcbmFzeW5jIGZ1bmN0aW9uIGhhbmRsZUltYWdlKFxuICAgIGNvbnRleHQ6IElFeGVjdXRlRnVuY3Rpb25zLFxuICAgIGNsaWVudDogUWluaXVBSSxcbiAgICBpdGVtSW5kZXg6IG51bWJlclxuKTogUHJvbWlzZTx7IGpzb246IElEYXRhT2JqZWN0OyBiaW5hcnk/OiBJQmluYXJ5S2V5RGF0YSB9PiB7XG4gICAgY29uc3Qgb3BlcmF0aW9uID0gY29udGV4dC5nZXROb2RlUGFyYW1ldGVyKCdvcGVyYXRpb24nLCBpdGVtSW5kZXgpIGFzIHN0cmluZztcbiAgICBjb25zdCBtb2RlbCA9IGNvbnRleHQuZ2V0Tm9kZVBhcmFtZXRlcignbW9kZWwnLCBpdGVtSW5kZXgpIGFzIHN0cmluZztcbiAgICBjb25zdCBwcm9tcHQgPSBjb250ZXh0LmdldE5vZGVQYXJhbWV0ZXIoJ3Byb21wdCcsIGl0ZW1JbmRleCkgYXMgc3RyaW5nO1xuICAgIGNvbnN0IHdhaXRGb3JDb21wbGV0aW9uID0gY29udGV4dC5nZXROb2RlUGFyYW1ldGVyKCd3YWl0Rm9yQ29tcGxldGlvbicsIGl0ZW1JbmRleCwgdHJ1ZSkgYXMgYm9vbGVhbjtcbiAgICBjb25zdCBvcHRpb25zID0gY29udGV4dC5nZXROb2RlUGFyYW1ldGVyKCdvcHRpb25zJywgaXRlbUluZGV4LCB7fSkgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG5cbiAgICBjb25zdCBwYXJhbXM6IGFueSA9IHtcbiAgICAgICAgbW9kZWwsXG4gICAgICAgIHByb21wdCxcbiAgICAgICAgbmVnYXRpdmVfcHJvbXB0OiBvcHRpb25zLm5lZ2F0aXZlUHJvbXB0LFxuICAgICAgICBhc3BlY3RfcmF0aW86IG9wdGlvbnMuYXNwZWN0UmF0aW8sXG4gICAgICAgIG46IG9wdGlvbnMubixcbiAgICB9O1xuXG4gICAgaWYgKG9wZXJhdGlvbiA9PT0gJ2VkaXQnKSB7XG4gICAgICAgIGNvbnN0IHJlZmVyZW5jZVVybCA9IGNvbnRleHQuZ2V0Tm9kZVBhcmFtZXRlcigncmVmZXJlbmNlSW1hZ2VVcmwnLCBpdGVtSW5kZXgsICcnKSBhcyBzdHJpbmc7XG4gICAgICAgIGlmIChyZWZlcmVuY2VVcmwpIHtcbiAgICAgICAgICAgIHBhcmFtcy5pbWFnZV91cmwgPSByZWZlcmVuY2VVcmw7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9wdGlvbnMubWFzaykge1xuICAgICAgICAgICAgcGFyYW1zLm1hc2sgPSBvcHRpb25zLm1hc2s7XG4gICAgICAgIH1cbiAgICAgICAgcGFyYW1zLnN0cmVuZ3RoID0gb3B0aW9ucy5zdHJlbmd0aDtcbiAgICAgICAgcGFyYW1zLmltYWdlX3JlZmVyZW5jZSA9IG9wdGlvbnMuaW1hZ2VSZWZlcmVuY2U7XG4gICAgfVxuXG4gICAgLy8gSGFuZGxlIGltYWdlX2NvbmZpZ1xuICAgIGlmIChvcHRpb25zLmltYWdlU2l6ZSkge1xuICAgICAgICBwYXJhbXMuaW1hZ2VfY29uZmlnID0geyBpbWFnZV9zaXplOiBvcHRpb25zLmltYWdlU2l6ZSB9O1xuICAgIH1cblxuICAgIC8vIEFkdmFuY2VkIGltYWdlIHJlZmVyZW5jZXMgKGdlbmVyYXRlIG9ubHkpXG4gICAgaWYgKG9wZXJhdGlvbiA9PT0gJ2dlbmVyYXRlJykge1xuICAgICAgICBjb25zdCBzdWJqZWN0SW1hZ2VVcmxzID0gY29udGV4dC5nZXROb2RlUGFyYW1ldGVyKCdzdWJqZWN0SW1hZ2VVcmxzJywgaXRlbUluZGV4LCAnJykgYXMgc3RyaW5nO1xuICAgICAgICBjb25zdCBzY2VuZUltYWdlVXJsID0gY29udGV4dC5nZXROb2RlUGFyYW1ldGVyKCdzY2VuZUltYWdlVXJsJywgaXRlbUluZGV4LCAnJykgYXMgc3RyaW5nO1xuICAgICAgICBjb25zdCBzdHlsZUltYWdlVXJsID0gY29udGV4dC5nZXROb2RlUGFyYW1ldGVyKCdzdHlsZUltYWdlVXJsJywgaXRlbUluZGV4LCAnJykgYXMgc3RyaW5nO1xuXG4gICAgICAgIC8vIFN1YmplY3QgcmVmZXJlbmNlIGltYWdlc1xuICAgICAgICBpZiAoc3ViamVjdEltYWdlVXJscykge1xuICAgICAgICAgICAgY29uc3QgdXJscyA9IHN1YmplY3RJbWFnZVVybHMuc3BsaXQoJywnKS5tYXAodSA9PiB1LnRyaW0oKSkuZmlsdGVyKHUgPT4gdSk7XG4gICAgICAgICAgICBpZiAodXJscy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgcGFyYW1zLnN1YmplY3RfaW1hZ2VfbGlzdCA9IHVybHMubWFwKGltYWdlID0+ICh7IGltYWdlLCBpbWFnZV90eXBlOiAnc3ViamVjdCcgfSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gU2NlbmUgcmVmZXJlbmNlIGltYWdlXG4gICAgICAgIGlmIChzY2VuZUltYWdlVXJsKSB7XG4gICAgICAgICAgICBwYXJhbXMuc2NlbmVfaW1hZ2UgPSB7IGltYWdlOiBzY2VuZUltYWdlVXJsIH07XG4gICAgICAgIH1cblxuICAgICAgICAvLyBTdHlsZSByZWZlcmVuY2UgaW1hZ2VcbiAgICAgICAgaWYgKHN0eWxlSW1hZ2VVcmwpIHtcbiAgICAgICAgICAgIHBhcmFtcy5zdHlsZV9pbWFnZSA9IHsgaW1hZ2U6IHN0eWxlSW1hZ2VVcmwgfTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGxldCByZXN1bHQ6IGFueTtcbiAgICBpZiAob3BlcmF0aW9uID09PSAnZ2VuZXJhdGUnKSB7XG4gICAgICAgIGNvbnN0IGNyZWF0ZVJlc3VsdCA9IGF3YWl0IGNsaWVudC5pbWFnZS5nZW5lcmF0ZShwYXJhbXMpO1xuICAgICAgICBpZiAod2FpdEZvckNvbXBsZXRpb24pIHtcbiAgICAgICAgICAgIHJlc3VsdCA9IGF3YWl0IGNsaWVudC5pbWFnZS53YWl0Rm9yUmVzdWx0KGNyZWF0ZVJlc3VsdCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXN1bHQgPSBjcmVhdGVSZXN1bHQ7XG4gICAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgICByZXN1bHQgPSBhd2FpdCBjbGllbnQuaW1hZ2UuZWRpdChwYXJhbXMpO1xuICAgIH1cblxuICAgIC8vIEJ1aWxkIGJpbmFyeSBkYXRhIGZyb20gYmFzZTY0IGltYWdlc1xuICAgIGNvbnN0IGJpbmFyeTogSUJpbmFyeUtleURhdGEgPSB7fTtcbiAgICBjb25zdCBpbWFnZXM6IGFueVtdID0gW107XG5cbiAgICBpZiAocmVzdWx0LmRhdGEgJiYgQXJyYXkuaXNBcnJheShyZXN1bHQuZGF0YSkpIHtcbiAgICAgICAgZm9yIChsZXQgaWR4ID0gMDsgaWR4IDwgcmVzdWx0LmRhdGEubGVuZ3RoOyBpZHgrKykge1xuICAgICAgICAgICAgY29uc3QgaW1nID0gcmVzdWx0LmRhdGFbaWR4XTtcbiAgICAgICAgICAgIGltYWdlcy5wdXNoKHtcbiAgICAgICAgICAgICAgICB1cmw6IGltZy51cmwgfHwgdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgIGluZGV4OiBpbWcuaW5kZXgsXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgLy8gQ29udmVydCBiYXNlNjQgdG8gYmluYXJ5IGRhdGEgZm9yIGRvd25zdHJlYW0gdXNhZ2VcbiAgICAgICAgICAgIGlmIChpbWcuYjY0X2pzb24pIHtcbiAgICAgICAgICAgICAgICBjb25zdCBidWZmZXIgPSBCdWZmZXIuZnJvbShpbWcuYjY0X2pzb24sICdiYXNlNjQnKTtcbiAgICAgICAgICAgICAgICBjb25zdCBiaW5hcnlLZXkgPSBpZHggPT09IDAgPyAnZGF0YScgOiBgZGF0YV8ke2lkeH1gO1xuICAgICAgICAgICAgICAgIGJpbmFyeVtiaW5hcnlLZXldID0gYXdhaXQgY29udGV4dC5oZWxwZXJzLnByZXBhcmVCaW5hcnlEYXRhKFxuICAgICAgICAgICAgICAgICAgICBidWZmZXIsXG4gICAgICAgICAgICAgICAgICAgIGBpbWFnZV8ke2lkeH0uJHtyZXN1bHQub3V0cHV0X2Zvcm1hdCB8fCAncG5nJ31gLFxuICAgICAgICAgICAgICAgICAgICBgaW1hZ2UvJHtyZXN1bHQub3V0cHV0X2Zvcm1hdCB8fCAncG5nJ31gXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICAgIGpzb246IHtcbiAgICAgICAgICAgIGltYWdlcyxcbiAgICAgICAgICAgIHN0YXR1czogcmVzdWx0LnN0YXR1cyB8fCAndW5rbm93bicsXG4gICAgICAgICAgICB0YXNrSWQ6IHJlc3VsdC50YXNrX2lkLFxuICAgICAgICAgICAgaXNTeW5jOiByZXN1bHQuaXNTeW5jLFxuICAgICAgICAgICAgaW1hZ2VDb3VudDogaW1hZ2VzLmxlbmd0aCxcbiAgICAgICAgICAgIF9yYXc6IHJlc3VsdCxcbiAgICAgICAgfSxcbiAgICAgICAgYmluYXJ5OiBPYmplY3Qua2V5cyhiaW5hcnkpLmxlbmd0aCA+IDAgPyBiaW5hcnkgOiB1bmRlZmluZWQsXG4gICAgfTtcbn1cblxuLy8gVmlkZW8gaGFuZGxlclxuYXN5bmMgZnVuY3Rpb24gaGFuZGxlVmlkZW8oXG4gICAgY29udGV4dDogSUV4ZWN1dGVGdW5jdGlvbnMsXG4gICAgY2xpZW50OiBRaW5pdUFJLFxuICAgIGl0ZW1JbmRleDogbnVtYmVyXG4pOiBQcm9taXNlPElEYXRhT2JqZWN0PiB7XG4gICAgY29uc3Qgb3BlcmF0aW9uID0gY29udGV4dC5nZXROb2RlUGFyYW1ldGVyKCdvcGVyYXRpb24nLCBpdGVtSW5kZXgpIGFzIHN0cmluZztcblxuICAgIGlmIChvcGVyYXRpb24gPT09ICdnZXRTdGF0dXMnKSB7XG4gICAgICAgIGNvbnN0IHRhc2tJZCA9IGNvbnRleHQuZ2V0Tm9kZVBhcmFtZXRlcigndGFza0lkJywgaXRlbUluZGV4KSBhcyBzdHJpbmc7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGNsaWVudC52aWRlby5nZXQodGFza0lkKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGlkOiByZXN1bHQuaWQsXG4gICAgICAgICAgICBzdGF0dXM6IHJlc3VsdC5zdGF0dXMsXG4gICAgICAgICAgICB2aWRlb3M6IHJlc3VsdC50YXNrX3Jlc3VsdD8udmlkZW9zIHx8IFtdLFxuICAgICAgICAgICAgbWVzc2FnZTogcmVzdWx0Lm1lc3NhZ2UsXG4gICAgICAgICAgICBfcmF3OiByZXN1bHQgYXMgdW5rbm93biBhcyBJRGF0YU9iamVjdCxcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBpZiAob3BlcmF0aW9uID09PSAncmVtaXgnKSB7XG4gICAgICAgIGNvbnN0IHNvdXJjZVZpZGVvSWQgPSBjb250ZXh0LmdldE5vZGVQYXJhbWV0ZXIoJ3NvdXJjZVZpZGVvSWQnLCBpdGVtSW5kZXgpIGFzIHN0cmluZztcbiAgICAgICAgY29uc3QgcmVtaXhQcm9tcHQgPSBjb250ZXh0LmdldE5vZGVQYXJhbWV0ZXIoJ3JlbWl4UHJvbXB0JywgaXRlbUluZGV4LCAnJykgYXMgc3RyaW5nO1xuICAgICAgICBjb25zdCB3YWl0Rm9yQ29tcGxldGlvbiA9IGNvbnRleHQuZ2V0Tm9kZVBhcmFtZXRlcignd2FpdEZvckNvbXBsZXRpb24nLCBpdGVtSW5kZXgsIHRydWUpIGFzIGJvb2xlYW47XG4gICAgICAgIGNvbnN0IHJlbWl4T3B0aW9ucyA9IGNvbnRleHQuZ2V0Tm9kZVBhcmFtZXRlcigncmVtaXhPcHRpb25zJywgaXRlbUluZGV4LCB7fSkgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG5cbiAgICAgICAgY29uc3QgcmVtaXhQYXJhbXM6IGFueSA9IHt9O1xuICAgICAgICBpZiAocmVtaXhQcm9tcHQpIHJlbWl4UGFyYW1zLnByb21wdCA9IHJlbWl4UHJvbXB0O1xuICAgICAgICBpZiAocmVtaXhPcHRpb25zLmR1cmF0aW9uKSByZW1peFBhcmFtcy5kdXJhdGlvbiA9IHJlbWl4T3B0aW9ucy5kdXJhdGlvbjtcbiAgICAgICAgaWYgKHJlbWl4T3B0aW9ucy5tb2RlKSByZW1peFBhcmFtcy5tb2RlID0gcmVtaXhPcHRpb25zLm1vZGU7XG4gICAgICAgIGlmIChyZW1peE9wdGlvbnMubmVnYXRpdmVQcm9tcHQpIHJlbWl4UGFyYW1zLm5lZ2F0aXZlX3Byb21wdCA9IHJlbWl4T3B0aW9ucy5uZWdhdGl2ZVByb21wdDtcblxuICAgICAgICBjb25zdCB0YXNrID0gYXdhaXQgY2xpZW50LnZpZGVvLnJlbWl4KHNvdXJjZVZpZGVvSWQsIHJlbWl4UGFyYW1zKTtcblxuICAgICAgICBpZiAod2FpdEZvckNvbXBsZXRpb24pIHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGNsaWVudC52aWRlby53YWl0Rm9yQ29tcGxldGlvbih0YXNrLmlkKTtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgaWQ6IHJlc3VsdC5pZCxcbiAgICAgICAgICAgICAgICBzdGF0dXM6IHJlc3VsdC5zdGF0dXMsXG4gICAgICAgICAgICAgICAgdmlkZW9zOiByZXN1bHQudGFza19yZXN1bHQ/LnZpZGVvcyB8fCBbXSxcbiAgICAgICAgICAgICAgICBfcmF3OiByZXN1bHQgYXMgdW5rbm93biBhcyBJRGF0YU9iamVjdCxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgaWQ6IHRhc2suaWQsXG4gICAgICAgICAgICBzdGF0dXM6ICdwcm9jZXNzaW5nJyxcbiAgICAgICAgICAgIF9yYXc6IHRhc2ssXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLy8gR2VuZXJhdGVcbiAgICBjb25zdCBtb2RlbCA9IGNvbnRleHQuZ2V0Tm9kZVBhcmFtZXRlcignbW9kZWwnLCBpdGVtSW5kZXgpIGFzIHN0cmluZztcbiAgICBjb25zdCBwcm9tcHQgPSBjb250ZXh0LmdldE5vZGVQYXJhbWV0ZXIoJ3Byb21wdCcsIGl0ZW1JbmRleCkgYXMgc3RyaW5nO1xuICAgIGNvbnN0IHdhaXRGb3JDb21wbGV0aW9uID0gY29udGV4dC5nZXROb2RlUGFyYW1ldGVyKCd3YWl0Rm9yQ29tcGxldGlvbicsIGl0ZW1JbmRleCwgdHJ1ZSkgYXMgYm9vbGVhbjtcbiAgICBjb25zdCBmaXJzdEZyYW1lVXJsID0gY29udGV4dC5nZXROb2RlUGFyYW1ldGVyKCdmaXJzdEZyYW1lVXJsJywgaXRlbUluZGV4LCAnJykgYXMgc3RyaW5nO1xuICAgIGNvbnN0IGZpcnN0RnJhbWVCaW5hcnlQcm9wZXJ0eSA9IGNvbnRleHQuZ2V0Tm9kZVBhcmFtZXRlcignZmlyc3RGcmFtZUJpbmFyeVByb3BlcnR5JywgaXRlbUluZGV4LCAnJykgYXMgc3RyaW5nO1xuICAgIGNvbnN0IGxhc3RGcmFtZVVybCA9IGNvbnRleHQuZ2V0Tm9kZVBhcmFtZXRlcignbGFzdEZyYW1lVXJsJywgaXRlbUluZGV4LCAnJykgYXMgc3RyaW5nO1xuICAgIGNvbnN0IGxhc3RGcmFtZUJpbmFyeVByb3BlcnR5ID0gY29udGV4dC5nZXROb2RlUGFyYW1ldGVyKCdsYXN0RnJhbWVCaW5hcnlQcm9wZXJ0eScsIGl0ZW1JbmRleCwgJycpIGFzIHN0cmluZztcbiAgICBjb25zdCBhc3BlY3RSYXRpbyA9IGNvbnRleHQuZ2V0Tm9kZVBhcmFtZXRlcignYXNwZWN0UmF0aW8nLCBpdGVtSW5kZXgsICcxNjo5JykgYXMgc3RyaW5nO1xuICAgIGNvbnN0IG9wdGlvbnMgPSBjb250ZXh0LmdldE5vZGVQYXJhbWV0ZXIoJ29wdGlvbnMnLCBpdGVtSW5kZXgsIHt9KSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcblxuICAgIGNvbnN0IHBhcmFtczogYW55ID0ge1xuICAgICAgICBtb2RlbCxcbiAgICAgICAgcHJvbXB0LFxuICAgICAgICBuZWdhdGl2ZV9wcm9tcHQ6IG9wdGlvbnMubmVnYXRpdmVQcm9tcHQsXG4gICAgICAgIGFzcGVjdF9yYXRpbzogYXNwZWN0UmF0aW8sXG4gICAgfTtcblxuICAgIC8vIEZyYW1lIGNvbnRyb2wgLSBzdXBwb3J0IGJvdGggVVJMIGFuZCBCaW5hcnkgRGF0YVxuICAgIGNvbnN0IGZyYW1lczogYW55ID0ge307XG5cbiAgICAvLyBGaXJzdCBmcmFtZVxuICAgIGlmIChmaXJzdEZyYW1lVXJsKSB7XG4gICAgICAgIGZyYW1lcy5maXJzdCA9IHsgdXJsOiBmaXJzdEZyYW1lVXJsIH07XG4gICAgfSBlbHNlIGlmIChmaXJzdEZyYW1lQmluYXJ5UHJvcGVydHkpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IGJ1ZmZlciA9IGF3YWl0IGNvbnRleHQuaGVscGVycy5nZXRCaW5hcnlEYXRhQnVmZmVyKGl0ZW1JbmRleCwgZmlyc3RGcmFtZUJpbmFyeVByb3BlcnR5KTtcbiAgICAgICAgICAgIGZyYW1lcy5maXJzdCA9IHsgYmFzZTY0OiBidWZmZXIudG9TdHJpbmcoJ2Jhc2U2NCcpIH07XG4gICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgICAgLy8gQmluYXJ5IGRhdGEgbm90IGZvdW5kLCBza2lwXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBMYXN0IGZyYW1lXG4gICAgaWYgKGxhc3RGcmFtZVVybCkge1xuICAgICAgICBmcmFtZXMubGFzdCA9IHsgdXJsOiBsYXN0RnJhbWVVcmwgfTtcbiAgICB9IGVsc2UgaWYgKGxhc3RGcmFtZUJpbmFyeVByb3BlcnR5KSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBidWZmZXIgPSBhd2FpdCBjb250ZXh0LmhlbHBlcnMuZ2V0QmluYXJ5RGF0YUJ1ZmZlcihpdGVtSW5kZXgsIGxhc3RGcmFtZUJpbmFyeVByb3BlcnR5KTtcbiAgICAgICAgICAgIGZyYW1lcy5sYXN0ID0geyBiYXNlNjQ6IGJ1ZmZlci50b1N0cmluZygnYmFzZTY0JykgfTtcbiAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgICAvLyBCaW5hcnkgZGF0YSBub3QgZm91bmQsIHNraXBcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlmIChPYmplY3Qua2V5cyhmcmFtZXMpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgcGFyYW1zLmZyYW1lcyA9IGZyYW1lcztcbiAgICB9XG5cbiAgICAvLyBWaWRlbyByZWZlcmVuY2UgKHZpZGVvX2xpc3QpIGZvciB2aWRlby10by12aWRlbyBnZW5lcmF0aW9uXG4gICAgY29uc3QgdmlkZW9SZWZlcmVuY2VVcmwgPSBjb250ZXh0LmdldE5vZGVQYXJhbWV0ZXIoJ3ZpZGVvUmVmZXJlbmNlVXJsJywgaXRlbUluZGV4LCAnJykgYXMgc3RyaW5nO1xuICAgIGNvbnN0IGtlZXBPcmlnaW5hbFNvdW5kID0gY29udGV4dC5nZXROb2RlUGFyYW1ldGVyKCdrZWVwT3JpZ2luYWxTb3VuZCcsIGl0ZW1JbmRleCwgZmFsc2UpIGFzIGJvb2xlYW47XG4gICAgaWYgKHZpZGVvUmVmZXJlbmNlVXJsKSB7XG4gICAgICAgIHBhcmFtcy52aWRlb19saXN0ID0gW3tcbiAgICAgICAgICAgIHZpZGVvX3VybDogdmlkZW9SZWZlcmVuY2VVcmwsXG4gICAgICAgICAgICBrZWVwX29yaWdpbmFsX3NvdW5kOiBrZWVwT3JpZ2luYWxTb3VuZCA/ICd5ZXMnIDogJ25vJyxcbiAgICAgICAgfV07XG4gICAgfVxuXG4gICAgLy8gTW9kZWwtc3BlY2lmaWMgb3B0aW9uc1xuICAgIGlmIChtb2RlbC5pbmNsdWRlcygna2xpbmcnKSkge1xuICAgICAgICBjb25zdCBrbGluZ09wdGlvbnMgPSBjb250ZXh0LmdldE5vZGVQYXJhbWV0ZXIoJ2tsaW5nT3B0aW9ucycsIGl0ZW1JbmRleCwge30pIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgICAgICAvLyBEdXJhdGlvbiBpcyByZXF1aXJlZCBmb3IgS2xpbmcgLSBkZWZhdWx0IHRvIDUgc2Vjb25kc1xuICAgICAgICBwYXJhbXMuZHVyYXRpb24gPSBrbGluZ09wdGlvbnMuZHVyYXRpb24gfHwgJzUnO1xuICAgICAgICBpZiAoa2xpbmdPcHRpb25zLm1vZGUpIHBhcmFtcy5tb2RlID0ga2xpbmdPcHRpb25zLm1vZGU7XG4gICAgICAgIGlmIChrbGluZ09wdGlvbnMuY2ZnU2NhbGUpIHBhcmFtcy5jZmdfc2NhbGUgPSBrbGluZ09wdGlvbnMuY2ZnU2NhbGU7XG5cbiAgICAgICAgLy8gVXNlIHNpemUgZnJvbSBvcHRpb25zLCBvciBkZXJpdmUgZnJvbSBhc3BlY3RfcmF0aW8gKHdvcmthcm91bmQgZm9yIFNESyBidWcpXG4gICAgICAgIGlmIChrbGluZ09wdGlvbnMuc2l6ZSkge1xuICAgICAgICAgICAgcGFyYW1zLnNpemUgPSBrbGluZ09wdGlvbnMuc2l6ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIE1hcCBhc3BlY3RfcmF0aW8gdG8gZGVmYXVsdCBzaXplIGZvciBLbGluZyBBUElcbiAgICAgICAgICAgIGNvbnN0IHNpemVNYXA6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XG4gICAgICAgICAgICAgICAgJzE2OjknOiAnMTkyMDoxMDgwJyxcbiAgICAgICAgICAgICAgICAnOToxNic6ICcxMDgwOjE5MjAnLFxuICAgICAgICAgICAgICAgICcxOjEnOiAnMTA4MDoxMDgwJyxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBwYXJhbXMuc2l6ZSA9IHNpemVNYXBbYXNwZWN0UmF0aW9dIHx8ICcxOTIwOjEwODAnO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaWYgKG1vZGVsLmluY2x1ZGVzKCd2ZW8nKSkge1xuICAgICAgICBjb25zdCB2ZW9PcHRpb25zID0gY29udGV4dC5nZXROb2RlUGFyYW1ldGVyKCd2ZW9PcHRpb25zJywgaXRlbUluZGV4LCB7fSkgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgICAgIC8vIER1cmF0aW9uU2Vjb25kcyBpcyByZXF1aXJlZCBmb3IgVmVvIC0gZml4ZWQgYXQgOCBzZWNvbmRzXG4gICAgICAgIHBhcmFtcy5kdXJhdGlvbiA9IHZlb09wdGlvbnMuZHVyYXRpb24gfHwgODtcbiAgICAgICAgaWYgKHZlb09wdGlvbnMuZ2VuZXJhdGVBdWRpbyAhPT0gdW5kZWZpbmVkKSBwYXJhbXMuZ2VuZXJhdGVfYXVkaW8gPSB2ZW9PcHRpb25zLmdlbmVyYXRlQXVkaW87XG4gICAgICAgIGlmICh2ZW9PcHRpb25zLnJlc29sdXRpb24pIHBhcmFtcy5yZXNvbHV0aW9uID0gdmVvT3B0aW9ucy5yZXNvbHV0aW9uO1xuICAgICAgICBpZiAodmVvT3B0aW9ucy5zYW1wbGVDb3VudCkgcGFyYW1zLnNhbXBsZV9jb3VudCA9IHZlb09wdGlvbnMuc2FtcGxlQ291bnQ7XG4gICAgICAgIGlmICh2ZW9PcHRpb25zLnBlcnNvbkdlbmVyYXRpb24pIHBhcmFtcy5wZXJzb25fZ2VuZXJhdGlvbiA9IHZlb09wdGlvbnMucGVyc29uR2VuZXJhdGlvbjtcbiAgICAgICAgaWYgKHZlb09wdGlvbnMuc2VlZCkgcGFyYW1zLnNlZWQgPSB2ZW9PcHRpb25zLnNlZWQ7XG4gICAgfVxuXG4gICAgY29uc3QgdGFzayA9IGF3YWl0IGNsaWVudC52aWRlby5jcmVhdGUocGFyYW1zKTtcblxuICAgIGlmICh3YWl0Rm9yQ29tcGxldGlvbikge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBjbGllbnQudmlkZW8ud2FpdEZvckNvbXBsZXRpb24odGFzay5pZCk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBpZDogcmVzdWx0LmlkLFxuICAgICAgICAgICAgc3RhdHVzOiByZXN1bHQuc3RhdHVzLFxuICAgICAgICAgICAgdmlkZW9zOiByZXN1bHQudGFza19yZXN1bHQ/LnZpZGVvcyB8fCBbXSxcbiAgICAgICAgICAgIF9yYXc6IHJlc3VsdCBhcyB1bmtub3duIGFzIElEYXRhT2JqZWN0LFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICAgIGlkOiB0YXNrLmlkLFxuICAgICAgICBzdGF0dXM6ICdwcm9jZXNzaW5nJyxcbiAgICAgICAgX3JhdzogdGFzayxcbiAgICB9O1xufVxuXG4vLyBBZ2VudCBoYW5kbGVyXG5hc3luYyBmdW5jdGlvbiBoYW5kbGVBZ2VudChcbiAgICBjb250ZXh0OiBJRXhlY3V0ZUZ1bmN0aW9ucyxcbiAgICBjbGllbnQ6IFFpbml1QUksXG4gICAgaXRlbUluZGV4OiBudW1iZXJcbik6IFByb21pc2U8SURhdGFPYmplY3Q+IHtcbiAgICBjb25zdCBtb2RlbCA9IGNvbnRleHQuZ2V0Tm9kZVBhcmFtZXRlcignbW9kZWwnLCBpdGVtSW5kZXgpIGFzIHN0cmluZztcbiAgICBjb25zdCBwcm9tcHQgPSBjb250ZXh0LmdldE5vZGVQYXJhbWV0ZXIoJ3Byb21wdCcsIGl0ZW1JbmRleCkgYXMgc3RyaW5nO1xuICAgIGNvbnN0IHN5c3RlbU1lc3NhZ2UgPSBjb250ZXh0LmdldE5vZGVQYXJhbWV0ZXIoJ3N5c3RlbU1lc3NhZ2UnLCBpdGVtSW5kZXgsICcnKSBhcyBzdHJpbmc7XG4gICAgY29uc3QgYnVpbHRpblRvb2xzID0gY29udGV4dC5nZXROb2RlUGFyYW1ldGVyKCdidWlsdGluVG9vbHMnLCBpdGVtSW5kZXgsIFtdKSBhcyBzdHJpbmdbXTtcbiAgICBjb25zdCBhdXRvRXhlY3V0ZVRvb2xzID0gY29udGV4dC5nZXROb2RlUGFyYW1ldGVyKCdhdXRvRXhlY3V0ZVRvb2xzJywgaXRlbUluZGV4LCB0cnVlKSBhcyBib29sZWFuO1xuICAgIGNvbnN0IG9wdGlvbnMgPSBjb250ZXh0LmdldE5vZGVQYXJhbWV0ZXIoJ29wdGlvbnMnLCBpdGVtSW5kZXgsIHt9KSBhcyB7XG4gICAgICAgIG1heENvbnRleHRUb2tlbnM/OiBudW1iZXI7XG4gICAgICAgIG1heFN0ZXBzPzogbnVtYmVyO1xuICAgICAgICB0aHJlYWRJZD86IHN0cmluZztcbiAgICAgICAgdG9vbHM/OiBzdHJpbmc7XG4gICAgICAgIHRlbXBlcmF0dXJlPzogbnVtYmVyO1xuICAgICAgICBjaGVja3BvaW50ZXJUeXBlPzogJ25vbmUnIHwgJ21lbW9yeScgfCAncmVkaXMnIHwgJ3Bvc3RncmVzJztcbiAgICAgICAgY2hlY2twb2ludGVyQ29ubmVjdGlvbj86IHN0cmluZztcbiAgICB9O1xuXG4gICAgLy8gQnVpbGQgdG9vbHMgcmVjb3JkXG4gICAgY29uc3QgdG9vbHNSZWNvcmQ6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7fTtcblxuICAgIC8vIFJlZ2lzdGVyIGJ1aWx0LWluIHRvb2xzXG4gICAgaWYgKGJ1aWx0aW5Ub29scy5pbmNsdWRlcygnd2ViU2VhcmNoJykpIHtcbiAgICAgICAgdG9vbHNSZWNvcmRbJ3dlYl9zZWFyY2gnXSA9IHtcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnU2VhcmNoIHRoZSB3ZWIgZm9yIGluZm9ybWF0aW9uLiBVc2UgdGhpcyB0byBmaW5kIGN1cnJlbnQgaW5mb3JtYXRpb24uJyxcbiAgICAgICAgICAgIHBhcmFtZXRlcnM6IHtcbiAgICAgICAgICAgICAgICB0eXBlOiAnb2JqZWN0JyxcbiAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICAgICAgICAgIHF1ZXJ5OiB7IHR5cGU6ICdzdHJpbmcnLCBkZXNjcmlwdGlvbjogJ1RoZSBzZWFyY2ggcXVlcnknIH0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICByZXF1aXJlZDogWydxdWVyeSddLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGV4ZWN1dGU6IGFzeW5jIChhcmdzOiB7IHF1ZXJ5OiBzdHJpbmcgfSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdHMgPSBhd2FpdCBjbGllbnQuc3lzLnNlYXJjaCh7IHF1ZXJ5OiBhcmdzLnF1ZXJ5IH0pO1xuICAgICAgICAgICAgICAgIHJldHVybiB7IHJlc3VsdHM6IHJlc3VsdHM/LnNsaWNlKDAsIDUpIHx8IFtdIH07XG4gICAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIGlmIChidWlsdGluVG9vbHMuaW5jbHVkZXMoJ29jcicpKSB7XG4gICAgICAgIHRvb2xzUmVjb3JkWydvY3InXSA9IHtcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnRXh0cmFjdCB0ZXh0IGZyb20gYW4gaW1hZ2UgVVJMIHVzaW5nIE9DUi4nLFxuICAgICAgICAgICAgcGFyYW1ldGVyczoge1xuICAgICAgICAgICAgICAgIHR5cGU6ICdvYmplY3QnLFxuICAgICAgICAgICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgICAgICAgICAgdXJsOiB7IHR5cGU6ICdzdHJpbmcnLCBkZXNjcmlwdGlvbjogJ1RoZSBpbWFnZSBVUkwgdG8gZXh0cmFjdCB0ZXh0IGZyb20nIH0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICByZXF1aXJlZDogWyd1cmwnXSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBleGVjdXRlOiBhc3luYyAoYXJnczogeyB1cmw6IHN0cmluZyB9KSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgY2xpZW50Lm9jci5kZXRlY3QoeyB1cmw6IGFyZ3MudXJsIH0pO1xuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIGlmIChidWlsdGluVG9vbHMuaW5jbHVkZXMoJ2ltYWdlR2VuZXJhdGUnKSkge1xuICAgICAgICB0b29sc1JlY29yZFsnZ2VuZXJhdGVfaW1hZ2UnXSA9IHtcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnR2VuZXJhdGUgYW4gaW1hZ2UgZnJvbSBhIHRleHQgcHJvbXB0LicsXG4gICAgICAgICAgICBwYXJhbWV0ZXJzOiB7XG4gICAgICAgICAgICAgICAgdHlwZTogJ29iamVjdCcsXG4gICAgICAgICAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgICAgICAgICAgICBwcm9tcHQ6IHsgdHlwZTogJ3N0cmluZycsIGRlc2NyaXB0aW9uOiAnRGVzY3JpcHRpb24gb2YgdGhlIGltYWdlIHRvIGdlbmVyYXRlJyB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgcmVxdWlyZWQ6IFsncHJvbXB0J10sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZXhlY3V0ZTogYXN5bmMgKGFyZ3M6IHsgcHJvbXB0OiBzdHJpbmcgfSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNyZWF0ZVJlc3VsdCA9IGF3YWl0IGNsaWVudC5pbWFnZS5nZW5lcmF0ZSh7XG4gICAgICAgICAgICAgICAgICAgIG1vZGVsOiAna2xpbmctdjItMScsXG4gICAgICAgICAgICAgICAgICAgIHByb21wdDogYXJncy5wcm9tcHQsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgY2xpZW50LmltYWdlLndhaXRGb3JSZXN1bHQoY3JlYXRlUmVzdWx0KTtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICBpbWFnZXM6IHJlc3VsdC5kYXRhPy5tYXAoKGQ6IGFueSkgPT4gZC51cmwgfHwgZC5iNjRfanNvbj8uc3Vic3RyaW5nKDAsIDEwMCkgKyAnLi4uJykgfHwgW10sXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgaWYgKGJ1aWx0aW5Ub29scy5pbmNsdWRlcygndmlkZW9HZW5lcmF0ZScpKSB7XG4gICAgICAgIHRvb2xzUmVjb3JkWydnZW5lcmF0ZV92aWRlbyddID0ge1xuICAgICAgICAgICAgZGVzY3JpcHRpb246ICdHZW5lcmF0ZSBhIHZpZGVvIGZyb20gYSB0ZXh0IHByb21wdC4nLFxuICAgICAgICAgICAgcGFyYW1ldGVyczoge1xuICAgICAgICAgICAgICAgIHR5cGU6ICdvYmplY3QnLFxuICAgICAgICAgICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgICAgICAgICAgcHJvbXB0OiB7IHR5cGU6ICdzdHJpbmcnLCBkZXNjcmlwdGlvbjogJ0Rlc2NyaXB0aW9uIG9mIHRoZSB2aWRlbyB0byBnZW5lcmF0ZScgfSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHJlcXVpcmVkOiBbJ3Byb21wdCddLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGV4ZWN1dGU6IGFzeW5jIChhcmdzOiB7IHByb21wdDogc3RyaW5nIH0pID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCB0YXNrID0gYXdhaXQgY2xpZW50LnZpZGVvLmNyZWF0ZSh7XG4gICAgICAgICAgICAgICAgICAgIG1vZGVsOiAna2xpbmctdmlkZW8tbzEnLFxuICAgICAgICAgICAgICAgICAgICBwcm9tcHQ6IGFyZ3MucHJvbXB0LFxuICAgICAgICAgICAgICAgICAgICBkdXJhdGlvbjogJzUnLFxuICAgICAgICAgICAgICAgICAgICBhc3BlY3RfcmF0aW86ICcxNjo5JyxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBjbGllbnQudmlkZW8ud2FpdEZvckNvbXBsZXRpb24odGFzay5pZCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgaWQ6IHJlc3VsdC5pZCxcbiAgICAgICAgICAgICAgICAgICAgc3RhdHVzOiByZXN1bHQuc3RhdHVzLFxuICAgICAgICAgICAgICAgICAgICB2aWRlb3M6IHJlc3VsdC50YXNrX3Jlc3VsdD8udmlkZW9zIHx8IFtdLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIC8vIFBhcnNlIHVzZXItZGVmaW5lZCB0b29sc1xuICAgIGlmIChvcHRpb25zLnRvb2xzKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCB0b29sc0FycmF5ID0gSlNPTi5wYXJzZShvcHRpb25zLnRvb2xzKTtcbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHRvb2xzQXJyYXkpICYmIHRvb2xzQXJyYXkubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgdG9vbCBvZiB0b29sc0FycmF5KSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0b29sLmZ1bmN0aW9uPy5uYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0b29sc1JlY29yZFt0b29sLmZ1bmN0aW9uLm5hbWVdID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiB0b29sLmZ1bmN0aW9uLmRlc2NyaXB0aW9uIHx8ICcnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtZXRlcnM6IHRvb2wuZnVuY3Rpb24ucGFyYW1ldGVycyB8fCB7fSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGVjdXRlOiBhc3luYyAoX2FyZ3M6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBVc2VyLWRlZmluZWQgdG9vbHMgcmV0dXJuIHBsYWNlaG9sZGVyIGZvciBtYW51YWwgZXhlY3V0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7IHJlc3VsdDogJ1Rvb2wgZXhlY3V0ZWQuIFByb2Nlc3MgdGhlIHJlc3VsdCBpbiBzdWJzZXF1ZW50IHdvcmtmbG93IHN0ZXBzLicgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgTm9kZU9wZXJhdGlvbkVycm9yKFxuICAgICAgICAgICAgICAgIGNvbnRleHQuZ2V0Tm9kZSgpLFxuICAgICAgICAgICAgICAgICdJbnZhbGlkIHRvb2xzIEpTT04gZm9ybWF0JyxcbiAgICAgICAgICAgICAgICB7IGl0ZW1JbmRleCB9XG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gRXhlY3V0ZSB3aXRoIEFnZW50R3JhcGggaWYgYXV0by1leGVjdXRlIGlzIGVuYWJsZWQgYW5kIHRoZXJlIGFyZSB0b29sc1xuICAgIGNvbnN0IGhhc1Rvb2xzID0gT2JqZWN0LmtleXModG9vbHNSZWNvcmQpLmxlbmd0aCA+IDA7XG5cbiAgICAvLyBJbml0aWFsaXplIENoZWNrcG9pbnRlciBpZiBjb25maWd1cmVkXG4gICAgLy8gTm90ZTogQ2hlY2twb2ludGVyIGludGVncmF0aW9uIHJlcXVpcmVzIEFnZW50R3JhcGggZGlyZWN0bHksIG5vdCBnZW5lcmF0ZVRleHRXaXRoR3JhcGhcbiAgICAvLyBUaGlzIGlzIGEgcGxhY2Vob2xkZXIgZm9yIGZ1dHVyZSBmdWxsIGltcGxlbWVudGF0aW9uXG4gICAgbGV0IGNoZWNrcG9pbnRlckluZm86IHN0cmluZyB8IG51bGwgPSBudWxsO1xuICAgIGlmIChvcHRpb25zLmNoZWNrcG9pbnRlclR5cGUgJiYgb3B0aW9ucy5jaGVja3BvaW50ZXJUeXBlICE9PSAnbm9uZScpIHtcbiAgICAgICAgaWYgKG9wdGlvbnMuY2hlY2twb2ludGVyVHlwZSA9PT0gJ21lbW9yeScpIHtcbiAgICAgICAgICAgIGNoZWNrcG9pbnRlckluZm8gPSAnbWVtb3J5JztcbiAgICAgICAgfSBlbHNlIGlmIChvcHRpb25zLmNoZWNrcG9pbnRlclR5cGUgPT09ICdyZWRpcycpIHtcbiAgICAgICAgICAgIGNoZWNrcG9pbnRlckluZm8gPSBgcmVkaXM6JHtvcHRpb25zLmNoZWNrcG9pbnRlckNvbm5lY3Rpb24gfHwgJ25vdC1jb25maWd1cmVkJ31gO1xuICAgICAgICB9IGVsc2UgaWYgKG9wdGlvbnMuY2hlY2twb2ludGVyVHlwZSA9PT0gJ3Bvc3RncmVzJykge1xuICAgICAgICAgICAgY2hlY2twb2ludGVySW5mbyA9IGBwb3N0Z3Jlczoke29wdGlvbnMuY2hlY2twb2ludGVyQ29ubmVjdGlvbiB8fCAnbm90LWNvbmZpZ3VyZWQnfWA7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBnZW5lcmF0ZVRleHRXaXRoR3JhcGgoe1xuICAgICAgICBjbGllbnQsXG4gICAgICAgIG1vZGVsLFxuICAgICAgICBwcm9tcHQsXG4gICAgICAgIHN5c3RlbTogc3lzdGVtTWVzc2FnZSB8fCB1bmRlZmluZWQsXG4gICAgICAgIG1heENvbnRleHRUb2tlbnM6IG9wdGlvbnMubWF4Q29udGV4dFRva2VucyB8fCAzMjAwMCxcbiAgICAgICAgbWF4U3RlcHM6IG9wdGlvbnMubWF4U3RlcHMgfHwgMTAsXG4gICAgICAgIHRlbXBlcmF0dXJlOiBvcHRpb25zLnRlbXBlcmF0dXJlLFxuICAgICAgICB0b29sczogaGFzVG9vbHMgJiYgYXV0b0V4ZWN1dGVUb29scyA/IHRvb2xzUmVjb3JkIDogdW5kZWZpbmVkLFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgICAgY29udGVudDogcmVzdWx0LnRleHQgfHwgJycsXG4gICAgICAgIHJlYXNvbmluZzogcmVzdWx0LnJlYXNvbmluZyB8fCAnJyxcbiAgICAgICAgc3RlcHM6IHJlc3VsdC5zdGVwcz8ubWFwKChzdGVwOiBhbnkpID0+ICh7XG4gICAgICAgICAgICB0eXBlOiBzdGVwLnR5cGUsXG4gICAgICAgICAgICB0b29sTmFtZTogc3RlcC50b29sTmFtZSxcbiAgICAgICAgICAgIHRvb2xBcmdzOiBzdGVwLnRvb2xBcmdzLFxuICAgICAgICAgICAgdG9vbFJlc3VsdDogc3RlcC50b29sUmVzdWx0LFxuICAgICAgICAgICAgdGV4dDogc3RlcC50ZXh0LFxuICAgICAgICB9KSkgfHwgW10sXG4gICAgICAgIHRvb2xzRXhlY3V0ZWQ6IHJlc3VsdC5zdGVwcz8uZmlsdGVyKChzOiBhbnkpID0+IHMudHlwZSA9PT0gJ3Rvb2xfY2FsbCcpLmxlbmd0aCB8fCAwLFxuICAgICAgICB0aHJlYWRJZDogb3B0aW9ucy50aHJlYWRJZCB8fCBudWxsLFxuICAgICAgICBjaGVja3BvaW50ZXI6IGNoZWNrcG9pbnRlckluZm8sXG4gICAgICAgIHVzYWdlOiByZXN1bHQudXNhZ2VcbiAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgIHByb21wdFRva2VuczogcmVzdWx0LnVzYWdlLnByb21wdF90b2tlbnMsXG4gICAgICAgICAgICAgICAgY29tcGxldGlvblRva2VuczogcmVzdWx0LnVzYWdlLmNvbXBsZXRpb25fdG9rZW5zLFxuICAgICAgICAgICAgICAgIHRvdGFsVG9rZW5zOiByZXN1bHQudXNhZ2UudG90YWxfdG9rZW5zLFxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgOiBudWxsLFxuICAgICAgICBfcmF3OiByZXN1bHQgYXMgdW5rbm93biBhcyBJRGF0YU9iamVjdCxcbiAgICB9O1xufVxuXG4vLyBBdWRpbyBoYW5kbGVyXG5hc3luYyBmdW5jdGlvbiBoYW5kbGVBdWRpbyhcbiAgICBjb250ZXh0OiBJRXhlY3V0ZUZ1bmN0aW9ucyxcbiAgICBjbGllbnQ6IFFpbml1QUksXG4gICAgaXRlbUluZGV4OiBudW1iZXJcbik6IFByb21pc2U8SURhdGFPYmplY3Q+IHtcbiAgICBjb25zdCBvcGVyYXRpb24gPSBjb250ZXh0LmdldE5vZGVQYXJhbWV0ZXIoJ29wZXJhdGlvbicsIGl0ZW1JbmRleCkgYXMgc3RyaW5nO1xuXG4gICAgaWYgKG9wZXJhdGlvbiA9PT0gJ3RleHRUb1NwZWVjaCcpIHtcbiAgICAgICAgY29uc3QgdGV4dCA9IGNvbnRleHQuZ2V0Tm9kZVBhcmFtZXRlcigndGV4dCcsIGl0ZW1JbmRleCkgYXMgc3RyaW5nO1xuICAgICAgICBjb25zdCB2b2ljZSA9IGNvbnRleHQuZ2V0Tm9kZVBhcmFtZXRlcigndm9pY2UnLCBpdGVtSW5kZXgpIGFzIHN0cmluZztcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IGNvbnRleHQuZ2V0Tm9kZVBhcmFtZXRlcignb3B0aW9ucycsIGl0ZW1JbmRleCwge30pIGFzIHtcbiAgICAgICAgICAgIGVuY29kaW5nPzogc3RyaW5nO1xuICAgICAgICAgICAgc3BlZWRSYXRpbz86IG51bWJlcjtcbiAgICAgICAgICAgIHZvbHVtZT86IG51bWJlcjtcbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBjbGllbnQudHRzLnN5bnRoZXNpemUoe1xuICAgICAgICAgICAgdGV4dCxcbiAgICAgICAgICAgIHZvaWNlX3R5cGU6IHZvaWNlLFxuICAgICAgICAgICAgZW5jb2Rpbmc6IG9wdGlvbnMuZW5jb2RpbmcgYXMgYW55LFxuICAgICAgICAgICAgc3BlZWRfcmF0aW86IG9wdGlvbnMuc3BlZWRSYXRpbyxcbiAgICAgICAgICAgIHZvbHVtZTogb3B0aW9ucy52b2x1bWUsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIFJldHVybiBhdWRpbyBhcyBiaW5hcnkgZGF0YVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgYXVkaW86IHJlc3VsdC5hdWRpbyxcbiAgICAgICAgICAgIGR1cmF0aW9uOiByZXN1bHQuZHVyYXRpb24sXG4gICAgICAgICAgICBfcmF3OiByZXN1bHQgYXMgdW5rbm93biBhcyBJRGF0YU9iamVjdCxcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBpZiAob3BlcmF0aW9uID09PSAnc3BlZWNoVG9UZXh0Jykge1xuICAgICAgICBjb25zdCBiaW5hcnlQcm9wZXJ0eU5hbWUgPSBjb250ZXh0LmdldE5vZGVQYXJhbWV0ZXIoJ2JpbmFyeVByb3BlcnR5TmFtZScsIGl0ZW1JbmRleCkgYXMgc3RyaW5nO1xuICAgICAgICBjb25zdCBhdWRpb0Zvcm1hdCA9IGNvbnRleHQuZ2V0Tm9kZVBhcmFtZXRlcignYXVkaW9Gb3JtYXQnLCBpdGVtSW5kZXgpIGFzIHN0cmluZztcblxuICAgICAgICAvLyBHZXQgYmluYXJ5IGRhdGFcbiAgICAgICAgY29udGV4dC5oZWxwZXJzLmFzc2VydEJpbmFyeURhdGEoaXRlbUluZGV4LCBiaW5hcnlQcm9wZXJ0eU5hbWUpO1xuICAgICAgICBjb25zdCBidWZmZXIgPSBhd2FpdCBjb250ZXh0LmhlbHBlcnMuZ2V0QmluYXJ5RGF0YUJ1ZmZlcihpdGVtSW5kZXgsIGJpbmFyeVByb3BlcnR5TmFtZSk7XG4gICAgICAgIGNvbnN0IGJhc2U2NEF1ZGlvID0gYnVmZmVyLnRvU3RyaW5nKCdiYXNlNjQnKTtcblxuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBjbGllbnQuYXNyLnRyYW5zY3JpYmUoe1xuICAgICAgICAgICAgYXVkaW86IHtcbiAgICAgICAgICAgICAgICBmb3JtYXQ6IGF1ZGlvRm9ybWF0IGFzIGFueSxcbiAgICAgICAgICAgICAgICBkYXRhOiBiYXNlNjRBdWRpbyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0ZXh0OiByZXN1bHQudGV4dCB8fCAnJyxcbiAgICAgICAgICAgIHdvcmRzOiByZXN1bHQud29yZHMgfHwgW10sXG4gICAgICAgICAgICBfcmF3OiByZXN1bHQgYXMgdW5rbm93biBhcyBJRGF0YU9iamVjdCxcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICB0aHJvdyBuZXcgTm9kZU9wZXJhdGlvbkVycm9yKFxuICAgICAgICBjb250ZXh0LmdldE5vZGUoKSxcbiAgICAgICAgYFVua25vd24gYXVkaW8gb3BlcmF0aW9uOiAke29wZXJhdGlvbn1gLFxuICAgICAgICB7IGl0ZW1JbmRleCB9XG4gICAgKTtcbn1cblxuLy8gVG9vbHMgaGFuZGxlclxuYXN5bmMgZnVuY3Rpb24gaGFuZGxlVG9vbHMoXG4gICAgY29udGV4dDogSUV4ZWN1dGVGdW5jdGlvbnMsXG4gICAgY2xpZW50OiBRaW5pdUFJLFxuICAgIGl0ZW1JbmRleDogbnVtYmVyXG4pOiBQcm9taXNlPElEYXRhT2JqZWN0PiB7XG4gICAgY29uc3Qgb3BlcmF0aW9uID0gY29udGV4dC5nZXROb2RlUGFyYW1ldGVyKCdvcGVyYXRpb24nLCBpdGVtSW5kZXgpIGFzIHN0cmluZztcblxuICAgIGlmIChvcGVyYXRpb24gPT09ICd3ZWJTZWFyY2gnKSB7XG4gICAgICAgIGNvbnN0IHF1ZXJ5ID0gY29udGV4dC5nZXROb2RlUGFyYW1ldGVyKCdxdWVyeScsIGl0ZW1JbmRleCkgYXMgc3RyaW5nO1xuICAgICAgICBjb25zdCBvcHRpb25zID0gY29udGV4dC5nZXROb2RlUGFyYW1ldGVyKCdvcHRpb25zJywgaXRlbUluZGV4LCB7fSkgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG5cbiAgICAgICAgY29uc3Qgc2VhcmNoUGFyYW1zOiB7XG4gICAgICAgICAgICBxdWVyeTogc3RyaW5nO1xuICAgICAgICAgICAgbWF4X3Jlc3VsdHM/OiBudW1iZXI7XG4gICAgICAgICAgICBzZWFyY2hfdHlwZT86ICd3ZWInIHwgJ25ld3MnO1xuICAgICAgICAgICAgdGltZV9maWx0ZXI/OiAnZGF5JyB8ICd3ZWVrJyB8ICdtb250aCcgfCAneWVhcic7XG4gICAgICAgICAgICBzaXRlX2ZpbHRlcj86IHN0cmluZ1tdO1xuICAgICAgICB9ID0geyBxdWVyeSB9O1xuXG4gICAgICAgIGlmIChvcHRpb25zLm1heFJlc3VsdHMpIHNlYXJjaFBhcmFtcy5tYXhfcmVzdWx0cyA9IG9wdGlvbnMubWF4UmVzdWx0cyBhcyBudW1iZXI7XG4gICAgICAgIGlmIChvcHRpb25zLnNlYXJjaFR5cGUpIHNlYXJjaFBhcmFtcy5zZWFyY2hfdHlwZSA9IG9wdGlvbnMuc2VhcmNoVHlwZSBhcyAnd2ViJyB8ICduZXdzJztcbiAgICAgICAgaWYgKG9wdGlvbnMudGltZUZpbHRlcikgc2VhcmNoUGFyYW1zLnRpbWVfZmlsdGVyID0gb3B0aW9ucy50aW1lRmlsdGVyIGFzICdkYXknIHwgJ3dlZWsnIHwgJ21vbnRoJyB8ICd5ZWFyJztcbiAgICAgICAgaWYgKG9wdGlvbnMuc2l0ZUZpbHRlcikge1xuICAgICAgICAgICAgY29uc3Qgc2l0ZXMgPSAob3B0aW9ucy5zaXRlRmlsdGVyIGFzIHN0cmluZykuc3BsaXQoJywnKS5tYXAocyA9PiBzLnRyaW0oKSkuZmlsdGVyKHMgPT4gcyk7XG4gICAgICAgICAgICBpZiAoc2l0ZXMubGVuZ3RoID4gMCkgc2VhcmNoUGFyYW1zLnNpdGVfZmlsdGVyID0gc2l0ZXM7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCByZXN1bHRzID0gYXdhaXQgY2xpZW50LnN5cy5zZWFyY2goc2VhcmNoUGFyYW1zKTtcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgcmVzdWx0czogcmVzdWx0cyB8fCBbXSxcbiAgICAgICAgICAgIHF1ZXJ5LFxuICAgICAgICAgICAgX3JhdzogcmVzdWx0cyBhcyB1bmtub3duIGFzIElEYXRhT2JqZWN0LFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIGlmIChvcGVyYXRpb24gPT09ICdvY3InKSB7XG4gICAgICAgIGNvbnN0IGltYWdlVXJsID0gY29udGV4dC5nZXROb2RlUGFyYW1ldGVyKCdpbWFnZVVybCcsIGl0ZW1JbmRleCwgJycpIGFzIHN0cmluZztcbiAgICAgICAgY29uc3QgYmluYXJ5UHJvcGVydHlOYW1lID0gY29udGV4dC5nZXROb2RlUGFyYW1ldGVyKCdiaW5hcnlQcm9wZXJ0eU5hbWUnLCBpdGVtSW5kZXgsICdkYXRhJykgYXMgc3RyaW5nO1xuXG4gICAgICAgIGxldCBvY3JQYXJhbXM6IHsgdXJsPzogc3RyaW5nOyBpbWFnZT86IHN0cmluZyB9O1xuXG4gICAgICAgIGlmIChpbWFnZVVybCkge1xuICAgICAgICAgICAgLy8gVXNlIFVSTCBkaXJlY3RseVxuICAgICAgICAgICAgb2NyUGFyYW1zID0geyB1cmw6IGltYWdlVXJsIH07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBHZXQgZnJvbSBiaW5hcnkgYW5kIGNyZWF0ZSBkYXRhIFVSTFxuICAgICAgICAgICAgY29uc3QgYmluYXJ5RGF0YSA9IGNvbnRleHQuaGVscGVycy5hc3NlcnRCaW5hcnlEYXRhKGl0ZW1JbmRleCwgYmluYXJ5UHJvcGVydHlOYW1lKTtcbiAgICAgICAgICAgIGNvbnN0IGJ1ZmZlciA9IGF3YWl0IGNvbnRleHQuaGVscGVycy5nZXRCaW5hcnlEYXRhQnVmZmVyKGl0ZW1JbmRleCwgYmluYXJ5UHJvcGVydHlOYW1lKTtcbiAgICAgICAgICAgIGNvbnN0IG1pbWVUeXBlID0gYmluYXJ5RGF0YS5taW1lVHlwZSB8fCAnaW1hZ2UvcG5nJztcbiAgICAgICAgICAgIGNvbnN0IGJhc2U2NERhdGEgPSBidWZmZXIudG9TdHJpbmcoJ2Jhc2U2NCcpO1xuICAgICAgICAgICAgLy8gRm9ybWF0OiBkYXRhOmltYWdlL3BuZztiYXNlNjQsPGJhc2U2NF9kYXRhPlxuICAgICAgICAgICAgb2NyUGFyYW1zID0geyBpbWFnZTogYGRhdGE6JHttaW1lVHlwZX07YmFzZTY0LCR7YmFzZTY0RGF0YX1gIH07XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBjbGllbnQub2NyLmRldGVjdChvY3JQYXJhbXMpO1xuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0ZXh0OiByZXN1bHQudGV4dCB8fCAnJyxcbiAgICAgICAgICAgIGJsb2NrczogcmVzdWx0LmJsb2NrcyB8fCBbXSxcbiAgICAgICAgICAgIF9yYXc6IHJlc3VsdCBhcyB1bmtub3duIGFzIElEYXRhT2JqZWN0LFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHRocm93IG5ldyBOb2RlT3BlcmF0aW9uRXJyb3IoXG4gICAgICAgIGNvbnRleHQuZ2V0Tm9kZSgpLFxuICAgICAgICBgVW5rbm93biB0b29scyBvcGVyYXRpb246ICR7b3BlcmF0aW9ufWAsXG4gICAgICAgIHsgaXRlbUluZGV4IH1cbiAgICApO1xufVxuIl19
|
|
@@ -73,6 +73,54 @@ exports.agentFields = [
|
|
|
73
73
|
default: '',
|
|
74
74
|
description: 'Agent persona and instructions',
|
|
75
75
|
},
|
|
76
|
+
// Built-in Tools
|
|
77
|
+
{
|
|
78
|
+
displayName: 'Built-in Tools',
|
|
79
|
+
name: 'builtinTools',
|
|
80
|
+
type: 'multiOptions',
|
|
81
|
+
displayOptions: {
|
|
82
|
+
show: {
|
|
83
|
+
resource: ['agent'],
|
|
84
|
+
},
|
|
85
|
+
},
|
|
86
|
+
options: [
|
|
87
|
+
{
|
|
88
|
+
name: 'Web Search',
|
|
89
|
+
value: 'webSearch',
|
|
90
|
+
description: 'Search the web for information',
|
|
91
|
+
},
|
|
92
|
+
{
|
|
93
|
+
name: 'OCR',
|
|
94
|
+
value: 'ocr',
|
|
95
|
+
description: 'Extract text from images',
|
|
96
|
+
},
|
|
97
|
+
{
|
|
98
|
+
name: 'Image Generate',
|
|
99
|
+
value: 'imageGenerate',
|
|
100
|
+
description: 'Generate images from text prompts',
|
|
101
|
+
},
|
|
102
|
+
{
|
|
103
|
+
name: 'Video Generate',
|
|
104
|
+
value: 'videoGenerate',
|
|
105
|
+
description: 'Generate videos from text prompts',
|
|
106
|
+
},
|
|
107
|
+
],
|
|
108
|
+
default: [],
|
|
109
|
+
description: 'Built-in tools that the agent can use automatically',
|
|
110
|
+
},
|
|
111
|
+
// Auto Execute Tools
|
|
112
|
+
{
|
|
113
|
+
displayName: 'Auto Execute Tools',
|
|
114
|
+
name: 'autoExecuteTools',
|
|
115
|
+
type: 'boolean',
|
|
116
|
+
displayOptions: {
|
|
117
|
+
show: {
|
|
118
|
+
resource: ['agent'],
|
|
119
|
+
},
|
|
120
|
+
},
|
|
121
|
+
default: true,
|
|
122
|
+
description: 'Automatically execute tool calls and return results (ReAct loop)',
|
|
123
|
+
},
|
|
76
124
|
// Options
|
|
77
125
|
{
|
|
78
126
|
displayName: 'Options',
|
|
@@ -133,7 +181,36 @@ exports.agentFields = [
|
|
|
133
181
|
default: 0.7,
|
|
134
182
|
description: 'Controls randomness',
|
|
135
183
|
},
|
|
184
|
+
{
|
|
185
|
+
displayName: 'Checkpointer Type',
|
|
186
|
+
name: 'checkpointerType',
|
|
187
|
+
type: 'options',
|
|
188
|
+
options: [
|
|
189
|
+
{ name: 'None', value: 'none' },
|
|
190
|
+
{ name: 'Memory', value: 'memory' },
|
|
191
|
+
{ name: 'Redis', value: 'redis' },
|
|
192
|
+
{ name: 'PostgreSQL', value: 'postgres' },
|
|
193
|
+
],
|
|
194
|
+
default: 'none',
|
|
195
|
+
description: 'Type of state persistence for multi-turn conversations',
|
|
196
|
+
},
|
|
197
|
+
{
|
|
198
|
+
displayName: 'Checkpointer Connection String',
|
|
199
|
+
name: 'checkpointerConnection',
|
|
200
|
+
type: 'string',
|
|
201
|
+
typeOptions: {
|
|
202
|
+
password: true,
|
|
203
|
+
},
|
|
204
|
+
displayOptions: {
|
|
205
|
+
show: {
|
|
206
|
+
checkpointerType: ['redis', 'postgres'],
|
|
207
|
+
},
|
|
208
|
+
},
|
|
209
|
+
default: '',
|
|
210
|
+
placeholder: 'redis://localhost:6379 or postgresql://user:pass@localhost:5432/db',
|
|
211
|
+
description: 'Connection string for the checkpointer backend',
|
|
212
|
+
},
|
|
136
213
|
],
|
|
137
214
|
},
|
|
138
215
|
];
|
|
139
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQWdlbnREZXNjcmlwdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL25vZGVzL1Fpbml1QWkvZGVzY3JpcHRpb25zL0FnZW50RGVzY3JpcHRpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQ0EsNENBQWtEO0FBRXJDLFFBQUEsZUFBZSxHQUFzQjtJQUM5QztRQUNJLFdBQVcsRUFBRSxXQUFXO1FBQ3hCLElBQUksRUFBRSxXQUFXO1FBQ2pCLElBQUksRUFBRSxTQUFTO1FBQ2YsZ0JBQWdCLEVBQUUsSUFBSTtRQUN0QixjQUFjLEVBQUU7WUFDWixJQUFJLEVBQUU7Z0JBQ0YsUUFBUSxFQUFFLENBQUMsT0FBTyxDQUFDO2FBQ3RCO1NBQ0o7UUFDRCxPQUFPLEVBQUU7WUFDTDtnQkFDSSxJQUFJLEVBQUUsV0FBVztnQkFDakIsS0FBSyxFQUFFLFVBQVU7Z0JBQ2pCLFdBQVcsRUFBRSwyQ0FBMkM7Z0JBQ3hELE1BQU0sRUFBRSxjQUFjO2FBQ3pCO1NBQ0o7UUFDRCxPQUFPLEVBQUUsVUFBVTtLQUN0QjtDQUNKLENBQUM7QUFFVyxRQUFBLFdBQVcsR0FBc0I7SUFDMUMsUUFBUTtJQUNSO1FBQ0ksV0FBVyxFQUFFLE9BQU87UUFDcEIsSUFBSSxFQUFFLE9BQU87UUFDYixJQUFJLEVBQUUsU0FBUztRQUNmLFFBQVEsRUFBRSxJQUFJO1FBQ2QsY0FBYyxFQUFFO1lBQ1osSUFBSSxFQUFFO2dCQUNGLFFBQVEsRUFBRSxDQUFDLE9BQU8sQ0FBQzthQUN0QjtTQUNKO1FBQ0QsT0FBTyxFQUFFLDhCQUFrQjtRQUMzQixPQUFPLEVBQUUsV0FBVztRQUNwQixXQUFXLEVBQUUsZ0NBQWdDO0tBQ2hEO0lBQ0QsU0FBUztJQUNUO1FBQ0ksV0FBVyxFQUFFLFFBQVE7UUFDckIsSUFBSSxFQUFFLFFBQVE7UUFDZCxJQUFJLEVBQUUsUUFBUTtRQUNkLFdBQVcsRUFBRTtZQUNULElBQUksRUFBRSxDQUFDO1NBQ1Y7UUFDRCxRQUFRLEVBQUUsSUFBSTtRQUNkLGNBQWMsRUFBRTtZQUNaLElBQUksRUFBRTtnQkFDRixRQUFRLEVBQUUsQ0FBQyxPQUFPLENBQUM7YUFDdEI7U0FDSjtRQUNELE9BQU8sRUFBRSxFQUFFO1FBQ1gsV0FBVyxFQUFFLHNDQUFzQztLQUN0RDtJQUNELGlCQUFpQjtJQUNqQjtRQUNJLFdBQVcsRUFBRSxnQkFBZ0I7UUFDN0IsSUFBSSxFQUFFLGVBQWU7UUFDckIsSUFBSSxFQUFFLFFBQVE7UUFDZCxXQUFXLEVBQUU7WUFDVCxJQUFJLEVBQUUsQ0FBQztTQUNWO1FBQ0QsY0FBYyxFQUFFO1lBQ1osSUFBSSxFQUFFO2dCQUNGLFFBQVEsRUFBRSxDQUFDLE9BQU8sQ0FBQzthQUN0QjtTQUNKO1FBQ0QsT0FBTyxFQUFFLEVBQUU7UUFDWCxXQUFXLEVBQUUsZ0NBQWdDO0tBQ2hEO0lBQ0QsVUFBVTtJQUNWO1FBQ0ksV0FBVyxFQUFFLFNBQVM7UUFDdEIsSUFBSSxFQUFFLFNBQVM7UUFDZixJQUFJLEVBQUUsWUFBWTtRQUNsQixXQUFXLEVBQUUsWUFBWTtRQUN6QixjQUFjLEVBQUU7WUFDWixJQUFJLEVBQUU7Z0JBQ0YsUUFBUSxFQUFFLENBQUMsT0FBTyxDQUFDO2FBQ3RCO1NBQ0o7UUFDRCxPQUFPLEVBQUUsRUFBRTtRQUNYLE9BQU8sRUFBRTtZQUNMO2dCQUNJLFdBQVcsRUFBRSxvQkFBb0I7Z0JBQ2pDLElBQUksRUFBRSxrQkFBa0I7Z0JBQ3hCLElBQUksRUFBRSxRQUFRO2dCQUNkLFdBQVcsRUFBRTtvQkFDVCxRQUFRLEVBQUUsSUFBSTtpQkFDakI7Z0JBQ0QsT0FBTyxFQUFFLEtBQUs7Z0JBQ2QsV0FBVyxFQUFFLDBEQUEwRDthQUMxRTtZQUNEO2dCQUNJLFdBQVcsRUFBRSxXQUFXO2dCQUN4QixJQUFJLEVBQUUsVUFBVTtnQkFDaEIsSUFBSSxFQUFFLFFBQVE7Z0JBQ2QsV0FBVyxFQUFFO29CQUNULFFBQVEsRUFBRSxDQUFDO29CQUNYLFFBQVEsRUFBRSxFQUFFO2lCQUNmO2dCQUNELE9BQU8sRUFBRSxFQUFFO2dCQUNYLFdBQVcsRUFBRSx5REFBeUQ7YUFDekU7WUFDRDtnQkFDSSxXQUFXLEVBQUUsV0FBVztnQkFDeEIsSUFBSSxFQUFFLFVBQVU7Z0JBQ2hCLElBQUksRUFBRSxRQUFRO2dCQUNkLE9BQU8sRUFBRSxFQUFFO2dCQUNYLFdBQVcsRUFBRSxnRUFBZ0U7YUFDaEY7WUFDRDtnQkFDSSxXQUFXLEVBQUUsY0FBYztnQkFDM0IsSUFBSSxFQUFFLE9BQU87Z0JBQ2IsSUFBSSxFQUFFLE1BQU07Z0JBQ1osT0FBTyxFQUFFLElBQUk7Z0JBQ2IsV0FBVyxFQUFFLHFEQUFxRDthQUNyRTtZQUNEO2dCQUNJLFdBQVcsRUFBRSxhQUFhO2dCQUMxQixJQUFJLEVBQUUsYUFBYTtnQkFDbkIsSUFBSSxFQUFFLFFBQVE7Z0JBQ2QsV0FBVyxFQUFFO29CQUNULFFBQVEsRUFBRSxDQUFDO29CQUNYLFFBQVEsRUFBRSxDQUFDO29CQUNYLGVBQWUsRUFBRSxDQUFDO2lCQUNyQjtnQkFDRCxPQUFPLEVBQUUsR0FBRztnQkFDWixXQUFXLEVBQUUscUJBQXFCO2FBQ3JDO1NBQ0o7S0FDSjtDQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJTm9kZVByb3BlcnRpZXMgfSBmcm9tICduOG4td29ya2Zsb3cnO1xuaW1wb3J0IHsgQ0hBVF9NT0RFTF9PUFRJT05TIH0gZnJvbSAnLi4vY29uc3RhbnRzJztcblxuZXhwb3J0IGNvbnN0IGFnZW50T3BlcmF0aW9uczogSU5vZGVQcm9wZXJ0aWVzW10gPSBbXG4gICAge1xuICAgICAgICBkaXNwbGF5TmFtZTogJ09wZXJhdGlvbicsXG4gICAgICAgIG5hbWU6ICdvcGVyYXRpb24nLFxuICAgICAgICB0eXBlOiAnb3B0aW9ucycsXG4gICAgICAgIG5vRGF0YUV4cHJlc3Npb246IHRydWUsXG4gICAgICAgIGRpc3BsYXlPcHRpb25zOiB7XG4gICAgICAgICAgICBzaG93OiB7XG4gICAgICAgICAgICAgICAgcmVzb3VyY2U6IFsnYWdlbnQnXSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIG9wdGlvbnM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnUnVuIEdyYXBoJyxcbiAgICAgICAgICAgICAgICB2YWx1ZTogJ3J1bkdyYXBoJyxcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogJ0V4ZWN1dGUgYW4gQUkgYWdlbnQgd2l0aCB0b29scyBhbmQgbWVtb3J5JyxcbiAgICAgICAgICAgICAgICBhY3Rpb246ICdSdW4gQUkgYWdlbnQnLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgICAgZGVmYXVsdDogJ3J1bkdyYXBoJyxcbiAgICB9LFxuXTtcblxuZXhwb3J0IGNvbnN0IGFnZW50RmllbGRzOiBJTm9kZVByb3BlcnRpZXNbXSA9IFtcbiAgICAvLyBNb2RlbFxuICAgIHtcbiAgICAgICAgZGlzcGxheU5hbWU6ICdNb2RlbCcsXG4gICAgICAgIG5hbWU6ICdtb2RlbCcsXG4gICAgICAgIHR5cGU6ICdvcHRpb25zJyxcbiAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgIGRpc3BsYXlPcHRpb25zOiB7XG4gICAgICAgICAgICBzaG93OiB7XG4gICAgICAgICAgICAgICAgcmVzb3VyY2U6IFsnYWdlbnQnXSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIG9wdGlvbnM6IENIQVRfTU9ERUxfT1BUSU9OUyxcbiAgICAgICAgZGVmYXVsdDogJ3F3ZW4zLW1heCcsXG4gICAgICAgIGRlc2NyaXB0aW9uOiAnVGhlIG1vZGVsIHRvIHVzZSBmb3IgdGhlIGFnZW50JyxcbiAgICB9LFxuICAgIC8vIFByb21wdFxuICAgIHtcbiAgICAgICAgZGlzcGxheU5hbWU6ICdQcm9tcHQnLFxuICAgICAgICBuYW1lOiAncHJvbXB0JyxcbiAgICAgICAgdHlwZTogJ3N0cmluZycsXG4gICAgICAgIHR5cGVPcHRpb25zOiB7XG4gICAgICAgICAgICByb3dzOiA0LFxuICAgICAgICB9LFxuICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgZGlzcGxheU9wdGlvbnM6IHtcbiAgICAgICAgICAgIHNob3c6IHtcbiAgICAgICAgICAgICAgICByZXNvdXJjZTogWydhZ2VudCddLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgZGVmYXVsdDogJycsXG4gICAgICAgIGRlc2NyaXB0aW9uOiAnVGhlIHVzZXIgZ29hbCBvciBxdWVyeSBmb3IgdGhlIGFnZW50JyxcbiAgICB9LFxuICAgIC8vIFN5c3RlbSBNZXNzYWdlXG4gICAge1xuICAgICAgICBkaXNwbGF5TmFtZTogJ1N5c3RlbSBNZXNzYWdlJyxcbiAgICAgICAgbmFtZTogJ3N5c3RlbU1lc3NhZ2UnLFxuICAgICAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICAgICAgdHlwZU9wdGlvbnM6IHtcbiAgICAgICAgICAgIHJvd3M6IDQsXG4gICAgICAgIH0sXG4gICAgICAgIGRpc3BsYXlPcHRpb25zOiB7XG4gICAgICAgICAgICBzaG93OiB7XG4gICAgICAgICAgICAgICAgcmVzb3VyY2U6IFsnYWdlbnQnXSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIGRlZmF1bHQ6ICcnLFxuICAgICAgICBkZXNjcmlwdGlvbjogJ0FnZW50IHBlcnNvbmEgYW5kIGluc3RydWN0aW9ucycsXG4gICAgfSxcbiAgICAvLyBPcHRpb25zXG4gICAge1xuICAgICAgICBkaXNwbGF5TmFtZTogJ09wdGlvbnMnLFxuICAgICAgICBuYW1lOiAnb3B0aW9ucycsXG4gICAgICAgIHR5cGU6ICdjb2xsZWN0aW9uJyxcbiAgICAgICAgcGxhY2Vob2xkZXI6ICdBZGQgT3B0aW9uJyxcbiAgICAgICAgZGlzcGxheU9wdGlvbnM6IHtcbiAgICAgICAgICAgIHNob3c6IHtcbiAgICAgICAgICAgICAgICByZXNvdXJjZTogWydhZ2VudCddLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgZGVmYXVsdDoge30sXG4gICAgICAgIG9wdGlvbnM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBkaXNwbGF5TmFtZTogJ01heCBDb250ZXh0IFRva2VucycsXG4gICAgICAgICAgICAgICAgbmFtZTogJ21heENvbnRleHRUb2tlbnMnLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdudW1iZXInLFxuICAgICAgICAgICAgICAgIHR5cGVPcHRpb25zOiB7XG4gICAgICAgICAgICAgICAgICAgIG1pblZhbHVlOiAxMDAwLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgZGVmYXVsdDogMzIwMDAsXG4gICAgICAgICAgICAgICAgZGVzY3JpcHRpb246ICdNYXhpbXVtIGNvbnRleHQgdG9rZW5zIChTREsgYXV0by1jb21wYWN0cyB3aGVuIGV4Y2VlZGVkKScsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGRpc3BsYXlOYW1lOiAnTWF4IFN0ZXBzJyxcbiAgICAgICAgICAgICAgICBuYW1lOiAnbWF4U3RlcHMnLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdudW1iZXInLFxuICAgICAgICAgICAgICAgIHR5cGVPcHRpb25zOiB7XG4gICAgICAgICAgICAgICAgICAgIG1pblZhbHVlOiAxLFxuICAgICAgICAgICAgICAgICAgICBtYXhWYWx1ZTogNTAsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBkZWZhdWx0OiAxMCxcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogJ01heGltdW0gbnVtYmVyIG9mIGFnZW50IHN0ZXBzIChwcmV2ZW50cyBpbmZpbml0ZSBsb29wcyknLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBkaXNwbGF5TmFtZTogJ1RocmVhZCBJRCcsXG4gICAgICAgICAgICAgICAgbmFtZTogJ3RocmVhZElkJyxcbiAgICAgICAgICAgICAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICAgICAgICAgICAgICBkZWZhdWx0OiAnJyxcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogJ1Nlc3Npb24gSUQgZm9yIG1lbW9yeSBjb250aW51aXR5IChsZWF2ZSBlbXB0eSBmb3IgbmV3IHNlc3Npb24pJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZGlzcGxheU5hbWU6ICdUb29scyAoSlNPTiknLFxuICAgICAgICAgICAgICAgIG5hbWU6ICd0b29scycsXG4gICAgICAgICAgICAgICAgdHlwZTogJ2pzb24nLFxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6ICdbXScsXG4gICAgICAgICAgICAgICAgZGVzY3JpcHRpb246ICdBcnJheSBvZiB0b29sIGRlZmluaXRpb25zIGluIE9wZW5BSSBmdW5jdGlvbiBmb3JtYXQnLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBkaXNwbGF5TmFtZTogJ1RlbXBlcmF0dXJlJyxcbiAgICAgICAgICAgICAgICBuYW1lOiAndGVtcGVyYXR1cmUnLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdudW1iZXInLFxuICAgICAgICAgICAgICAgIHR5cGVPcHRpb25zOiB7XG4gICAgICAgICAgICAgICAgICAgIG1pblZhbHVlOiAwLFxuICAgICAgICAgICAgICAgICAgICBtYXhWYWx1ZTogMixcbiAgICAgICAgICAgICAgICAgICAgbnVtYmVyUHJlY2lzaW9uOiAxLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgZGVmYXVsdDogMC43LFxuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnQ29udHJvbHMgcmFuZG9tbmVzcycsXG4gICAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgIH0sXG5dO1xuIl19
|
|
216
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQWdlbnREZXNjcmlwdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL25vZGVzL1Fpbml1QWkvZGVzY3JpcHRpb25zL0FnZW50RGVzY3JpcHRpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQ0EsNENBQWtEO0FBRXJDLFFBQUEsZUFBZSxHQUFzQjtJQUM5QztRQUNJLFdBQVcsRUFBRSxXQUFXO1FBQ3hCLElBQUksRUFBRSxXQUFXO1FBQ2pCLElBQUksRUFBRSxTQUFTO1FBQ2YsZ0JBQWdCLEVBQUUsSUFBSTtRQUN0QixjQUFjLEVBQUU7WUFDWixJQUFJLEVBQUU7Z0JBQ0YsUUFBUSxFQUFFLENBQUMsT0FBTyxDQUFDO2FBQ3RCO1NBQ0o7UUFDRCxPQUFPLEVBQUU7WUFDTDtnQkFDSSxJQUFJLEVBQUUsV0FBVztnQkFDakIsS0FBSyxFQUFFLFVBQVU7Z0JBQ2pCLFdBQVcsRUFBRSwyQ0FBMkM7Z0JBQ3hELE1BQU0sRUFBRSxjQUFjO2FBQ3pCO1NBQ0o7UUFDRCxPQUFPLEVBQUUsVUFBVTtLQUN0QjtDQUNKLENBQUM7QUFFVyxRQUFBLFdBQVcsR0FBc0I7SUFDMUMsUUFBUTtJQUNSO1FBQ0ksV0FBVyxFQUFFLE9BQU87UUFDcEIsSUFBSSxFQUFFLE9BQU87UUFDYixJQUFJLEVBQUUsU0FBUztRQUNmLFFBQVEsRUFBRSxJQUFJO1FBQ2QsY0FBYyxFQUFFO1lBQ1osSUFBSSxFQUFFO2dCQUNGLFFBQVEsRUFBRSxDQUFDLE9BQU8sQ0FBQzthQUN0QjtTQUNKO1FBQ0QsT0FBTyxFQUFFLDhCQUFrQjtRQUMzQixPQUFPLEVBQUUsV0FBVztRQUNwQixXQUFXLEVBQUUsZ0NBQWdDO0tBQ2hEO0lBQ0QsU0FBUztJQUNUO1FBQ0ksV0FBVyxFQUFFLFFBQVE7UUFDckIsSUFBSSxFQUFFLFFBQVE7UUFDZCxJQUFJLEVBQUUsUUFBUTtRQUNkLFdBQVcsRUFBRTtZQUNULElBQUksRUFBRSxDQUFDO1NBQ1Y7UUFDRCxRQUFRLEVB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V0FBVyxFQUFFLG9FQUFvRTtnQkFDakYsV0FBVyxFQUFFLGdEQUFnRDthQUNoRTtTQUNKO0tBQ0o7Q0FDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSU5vZGVQcm9wZXJ0aWVzIH0gZnJvbSAnbjhuLXdvcmtmbG93JztcbmltcG9ydCB7IENIQVRfTU9ERUxfT1BUSU9OUyB9IGZyb20gJy4uL2NvbnN0YW50cyc7XG5cbmV4cG9ydCBjb25zdCBhZ2VudE9wZXJhdGlvbnM6IElOb2RlUHJvcGVydGllc1tdID0gW1xuICAgIHtcbiAgICAgICAgZGlzcGxheU5hbWU6ICdPcGVyYXRpb24nLFxuICAgICAgICBuYW1lOiAnb3BlcmF0aW9uJyxcbiAgICAgICAgdHlwZTogJ29wdGlvbnMnLFxuICAgICAgICBub0RhdGFFeHByZXNzaW9uOiB0cnVlLFxuICAgICAgICBkaXNwbGF5T3B0aW9uczoge1xuICAgICAgICAgICAgc2hvdzoge1xuICAgICAgICAgICAgICAgIHJlc291cmNlOiBbJ2FnZW50J10sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICBvcHRpb25zOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ1J1biBHcmFwaCcsXG4gICAgICAgICAgICAgICAgdmFsdWU6ICdydW5HcmFwaCcsXG4gICAgICAgICAgICAgICAgZGVzY3JpcHRpb246ICdFeGVjdXRlIGFuIEFJIGFnZW50IHdpdGggdG9vbHMgYW5kIG1lbW9yeScsXG4gICAgICAgICAgICAgICAgYWN0aW9uOiAnUnVuIEFJIGFnZW50JyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICAgIGRlZmF1bHQ6ICdydW5HcmFwaCcsXG4gICAgfSxcbl07XG5cbmV4cG9ydCBjb25zdCBhZ2VudEZpZWxkczogSU5vZGVQcm9wZXJ0aWVzW10gPSBbXG4gICAgLy8gTW9kZWxcbiAgICB7XG4gICAgICAgIGRpc3BsYXlOYW1lOiAnTW9kZWwnLFxuICAgICAgICBuYW1lOiAnbW9kZWwnLFxuICAgICAgICB0eXBlOiAnb3B0aW9ucycsXG4gICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICBkaXNwbGF5T3B0aW9uczoge1xuICAgICAgICAgICAgc2hvdzoge1xuICAgICAgICAgICAgICAgIHJlc291cmNlOiBbJ2FnZW50J10sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICBvcHRpb25zOiBDSEFUX01PREVMX09QVElPTlMsXG4gICAgICAgIGRlZmF1bHQ6ICdxd2VuMy1tYXgnLFxuICAgICAgICBkZXNjcmlwdGlvbjogJ1RoZSBtb2RlbCB0byB1c2UgZm9yIHRoZSBhZ2VudCcsXG4gICAgfSxcbiAgICAvLyBQcm9tcHRcbiAgICB7XG4gICAgICAgIGRpc3BsYXlOYW1lOiAnUHJvbXB0JyxcbiAgICAgICAgbmFtZTogJ3Byb21wdCcsXG4gICAgICAgIHR5cGU6ICdzdHJpbmcnLFxuICAgICAgICB0eXBlT3B0aW9uczoge1xuICAgICAgICAgICAgcm93czogNCxcbiAgICAgICAgfSxcbiAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgIGRpc3BsYXlPcHRpb25zOiB7XG4gICAgICAgICAgICBzaG93OiB7XG4gICAgICAgICAgICAgICAgcmVzb3VyY2U6IFsnYWdlbnQnXSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIGRlZmF1bHQ6ICcnLFxuICAgICAgICBkZXNjcmlwdGlvbjogJ1RoZSB1c2VyIGdvYWwgb3IgcXVlcnkgZm9yIHRoZSBhZ2VudCcsXG4gICAgfSxcbiAgICAvLyBTeXN0ZW0gTWVzc2FnZVxuICAgIHtcbiAgICAgICAgZGlzcGxheU5hbWU6ICdTeXN0ZW0gTWVzc2FnZScsXG4gICAgICAgIG5hbWU6ICdzeXN0ZW1NZXNzYWdlJyxcbiAgICAgICAgdHlwZTogJ3N0cmluZycsXG4gICAgICAgIHR5cGVPcHRpb25zOiB7XG4gICAgICAgICAgICByb3dzOiA0LFxuICAgICAgICB9LFxuICAgICAgICBkaXNwbGF5T3B0aW9uczoge1xuICAgICAgICAgICAgc2hvdzoge1xuICAgICAgICAgICAgICAgIHJlc291cmNlOiBbJ2FnZW50J10sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICBkZWZhdWx0OiAnJyxcbiAgICAgICAgZGVzY3JpcHRpb246ICdBZ2VudCBwZXJzb25hIGFuZCBpbnN0cnVjdGlvbnMnLFxuICAgIH0sXG4gICAgLy8gQnVpbHQtaW4gVG9vbHNcbiAgICB7XG4gICAgICAgIGRpc3BsYXlOYW1lOiAnQnVpbHQtaW4gVG9vbHMnLFxuICAgICAgICBuYW1lOiAnYnVpbHRpblRvb2xzJyxcbiAgICAgICAgdHlwZTogJ211bHRpT3B0aW9ucycsXG4gICAgICAgIGRpc3BsYXlPcHRpb25zOiB7XG4gICAgICAgICAgICBzaG93OiB7XG4gICAgICAgICAgICAgICAgcmVzb3VyY2U6IFsnYWdlbnQnXSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIG9wdGlvbnM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnV2ViIFNlYXJjaCcsXG4gICAgICAgICAgICAgICAgdmFsdWU6ICd3ZWJTZWFyY2gnLFxuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnU2VhcmNoIHRoZSB3ZWIgZm9yIGluZm9ybWF0aW9uJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ09DUicsXG4gICAgICAgICAgICAgICAgdmFsdWU6ICdvY3InLFxuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnRXh0cmFjdCB0ZXh0IGZyb20gaW1hZ2VzJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ0ltYWdlIEdlbmVyYXRlJyxcbiAgICAgICAgICAgICAgICB2YWx1ZTogJ2ltYWdlR2VuZXJhdGUnLFxuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnR2VuZXJhdGUgaW1hZ2VzIGZyb20gdGV4dCBwcm9tcHRzJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ1ZpZGVvIEdlbmVyYXRlJyxcbiAgICAgICAgICAgICAgICB2YWx1ZTogJ3ZpZGVvR2VuZXJhdGUnLFxuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnR2VuZXJhdGUgdmlkZW9zIGZyb20gdGV4dCBwcm9tcHRzJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICAgIGRlZmF1bHQ6IFtdLFxuICAgICAgICBkZXNjcmlwdGlvbjogJ0J1aWx0LWluIHRvb2xzIHRoYXQgdGhlIGFnZW50IGNhbiB1c2UgYXV0b21hdGljYWxseScsXG4gICAgfSxcbiAgICAvLyBBdXRvIEV4ZWN1dGUgVG9vbHNcbiAgICB7XG4gICAgICAgIGRpc3BsYXlOYW1lOiAnQXV0byBFeGVjdXRlIFRvb2xzJyxcbiAgICAgICAgbmFtZTogJ2F1dG9FeGVjdXRlVG9vbHMnLFxuICAgICAgICB0eXBlOiAnYm9vbGVhbicsXG4gICAgICAgIGRpc3BsYXlPcHRpb25zOiB7XG4gICAgICAgICAgICBzaG93OiB7XG4gICAgICAgICAgICAgICAgcmVzb3VyY2U6IFsnYWdlbnQnXSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIGRlZmF1bHQ6IHRydWUsXG4gICAgICAgIGRlc2NyaXB0aW9uOiAnQXV0b21hdGljYWxseSBleGVjdXRlIHRvb2wgY2FsbHMgYW5kIHJldHVybiByZXN1bHRzIChSZUFjdCBsb29wKScsXG4gICAgfSxcbiAgICAvLyBPcHRpb25zXG4gICAge1xuICAgICAgICBkaXNwbGF5TmFtZTogJ09wdGlvbnMnLFxuICAgICAgICBuYW1lOiAnb3B0aW9ucycsXG4gICAgICAgIHR5cGU6ICdjb2xsZWN0aW9uJyxcbiAgICAgICAgcGxhY2Vob2xkZXI6ICdBZGQgT3B0aW9uJyxcbiAgICAgICAgZGlzcGxheU9wdGlvbnM6IHtcbiAgICAgICAgICAgIHNob3c6IHtcbiAgICAgICAgICAgICAgICByZXNvdXJjZTogWydhZ2VudCddLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgZGVmYXVsdDoge30sXG4gICAgICAgIG9wdGlvbnM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBkaXNwbGF5TmFtZTogJ01heCBDb250ZXh0IFRva2VucycsXG4gICAgICAgICAgICAgICAgbmFtZTogJ21heENvbnRleHRUb2tlbnMnLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdudW1iZXInLFxuICAgICAgICAgICAgICAgIHR5cGVPcHRpb25zOiB7XG4gICAgICAgICAgICAgICAgICAgIG1pblZhbHVlOiAxMDAwLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgZGVmYXVsdDogMzIwMDAsXG4gICAgICAgICAgICAgICAgZGVzY3JpcHRpb246ICdNYXhpbXVtIGNvbnRleHQgdG9rZW5zIChTREsgYXV0by1jb21wYWN0cyB3aGVuIGV4Y2VlZGVkKScsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGRpc3BsYXlOYW1lOiAnTWF4IFN0ZXBzJyxcbiAgICAgICAgICAgICAgICBuYW1lOiAnbWF4U3RlcHMnLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdudW1iZXInLFxuICAgICAgICAgICAgICAgIHR5cGVPcHRpb25zOiB7XG4gICAgICAgICAgICAgICAgICAgIG1pblZhbHVlOiAxLFxuICAgICAgICAgICAgICAgICAgICBtYXhWYWx1ZTogNTAsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBkZWZhdWx0OiAxMCxcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogJ01heGltdW0gbnVtYmVyIG9mIGFnZW50IHN0ZXBzIChwcmV2ZW50cyBpbmZpbml0ZSBsb29wcyknLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBkaXNwbGF5TmFtZTogJ1RocmVhZCBJRCcsXG4gICAgICAgICAgICAgICAgbmFtZTogJ3RocmVhZElkJyxcbiAgICAgICAgICAgICAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICAgICAgICAgICAgICBkZWZhdWx0OiAnJyxcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogJ1Nlc3Npb24gSUQgZm9yIG1lbW9yeSBjb250aW51aXR5IChsZWF2ZSBlbXB0eSBmb3IgbmV3IHNlc3Npb24pJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZGlzcGxheU5hbWU6ICdUb29scyAoSlNPTiknLFxuICAgICAgICAgICAgICAgIG5hbWU6ICd0b29scycsXG4gICAgICAgICAgICAgICAgdHlwZTogJ2pzb24nLFxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6ICdbXScsXG4gICAgICAgICAgICAgICAgZGVzY3JpcHRpb246ICdBcnJheSBvZiB0b29sIGRlZmluaXRpb25zIGluIE9wZW5BSSBmdW5jdGlvbiBmb3JtYXQnLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBkaXNwbGF5TmFtZTogJ1RlbXBlcmF0dXJlJyxcbiAgICAgICAgICAgICAgICBuYW1lOiAndGVtcGVyYXR1cmUnLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdudW1iZXInLFxuICAgICAgICAgICAgICAgIHR5cGVPcHRpb25zOiB7XG4gICAgICAgICAgICAgICAgICAgIG1pblZhbHVlOiAwLFxuICAgICAgICAgICAgICAgICAgICBtYXhWYWx1ZTogMixcbiAgICAgICAgICAgICAgICAgICAgbnVtYmVyUHJlY2lzaW9uOiAxLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgZGVmYXVsdDogMC43LFxuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnQ29udHJvbHMgcmFuZG9tbmVzcycsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGRpc3BsYXlOYW1lOiAnQ2hlY2twb2ludGVyIFR5cGUnLFxuICAgICAgICAgICAgICAgIG5hbWU6ICdjaGVja3BvaW50ZXJUeXBlJyxcbiAgICAgICAgICAgICAgICB0eXBlOiAnb3B0aW9ucycsXG4gICAgICAgICAgICAgICAgb3B0aW9uczogW1xuICAgICAgICAgICAgICAgICAgICB7IG5hbWU6ICdOb25lJywgdmFsdWU6ICdub25lJyB9LFxuICAgICAgICAgICAgICAgICAgICB7IG5hbWU6ICdNZW1vcnknLCB2YWx1ZTogJ21lbW9yeScgfSxcbiAgICAgICAgICAgICAgICAgICAgeyBuYW1lOiAnUmVkaXMnLCB2YWx1ZTogJ3JlZGlzJyB9LFxuICAgICAgICAgICAgICAgICAgICB7IG5hbWU6ICdQb3N0Z3JlU1FMJywgdmFsdWU6ICdwb3N0Z3JlcycgfSxcbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6ICdub25lJyxcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogJ1R5cGUgb2Ygc3RhdGUgcGVyc2lzdGVuY2UgZm9yIG11bHRpLXR1cm4gY29udmVyc2F0aW9ucycsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGRpc3BsYXlOYW1lOiAnQ2hlY2twb2ludGVyIENvbm5lY3Rpb24gU3RyaW5nJyxcbiAgICAgICAgICAgICAgICBuYW1lOiAnY2hlY2twb2ludGVyQ29ubmVjdGlvbicsXG4gICAgICAgICAgICAgICAgdHlwZTogJ3N0cmluZycsXG4gICAgICAgICAgICAgICAgdHlwZU9wdGlvbnM6IHtcbiAgICAgICAgICAgICAgICAgICAgcGFzc3dvcmQ6IHRydWUsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBkaXNwbGF5T3B0aW9uczoge1xuICAgICAgICAgICAgICAgICAgICBzaG93OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjaGVja3BvaW50ZXJUeXBlOiBbJ3JlZGlzJywgJ3Bvc3RncmVzJ10sXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBkZWZhdWx0OiAnJyxcbiAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcjogJ3JlZGlzOi8vbG9jYWxob3N0OjYzNzkgb3IgcG9zdGdyZXNxbDovL3VzZXI6cGFzc0Bsb2NhbGhvc3Q6NTQzMi9kYicsXG4gICAgICAgICAgICAgICAgZGVzY3JpcHRpb246ICdDb25uZWN0aW9uIHN0cmluZyBmb3IgdGhlIGNoZWNrcG9pbnRlciBiYWNrZW5kJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgfSxcbl07XG4iXX0=
|