bytefun-ai-mcp 1.3.3 → 1.4.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/index.js +8 -20
- package/build/prompt-optimizer.d.ts +28 -98
- package/build/prompt-optimizer.d.ts.map +1 -1
- package/build/prompt-optimizer.js +140 -211
- package/package.json +1 -1
package/build/index.js
CHANGED
|
@@ -28,35 +28,27 @@ server.setRequestHandler(ListToolsRequestSchema, async () => {
|
|
|
28
28
|
},
|
|
29
29
|
{
|
|
30
30
|
name: 'optimize_fix_pageList_prompt',
|
|
31
|
-
description: 'Fix and improve existing page list by
|
|
31
|
+
description: 'Fix and improve existing page list by reading from doc file and ensuring completeness',
|
|
32
32
|
inputSchema: {
|
|
33
33
|
type: 'object',
|
|
34
34
|
properties: {
|
|
35
35
|
user_input: {
|
|
36
36
|
type: 'string',
|
|
37
37
|
description: 'User input prompt that describes the requirements'
|
|
38
|
-
},
|
|
39
|
-
existing_page_list: {
|
|
40
|
-
type: 'string',
|
|
41
|
-
description: 'Existing page list result from optimize_pageList_prompt that needs to be fixed and improved'
|
|
42
38
|
}
|
|
43
39
|
},
|
|
44
|
-
required: ['user_input'
|
|
40
|
+
required: ['user_input']
|
|
45
41
|
}
|
|
46
42
|
},
|
|
47
43
|
{
|
|
48
44
|
name: 'optimize_product_design_prompt',
|
|
49
|
-
description: 'Optimize prompt for product design document
|
|
45
|
+
description: 'Optimize prompt for product design document enhancement based on existing doc file',
|
|
50
46
|
inputSchema: {
|
|
51
47
|
type: 'object',
|
|
52
48
|
properties: {
|
|
53
49
|
user_input: {
|
|
54
50
|
type: 'string',
|
|
55
51
|
description: 'User input prompt that needs to be optimized for product design documentation'
|
|
56
|
-
},
|
|
57
|
-
page_list: {
|
|
58
|
-
type: 'string',
|
|
59
|
-
description: 'Optional fixed page list result from optimize_fix_pageList_prompt to be included in product design'
|
|
60
52
|
}
|
|
61
53
|
},
|
|
62
54
|
required: ['user_input']
|
|
@@ -64,17 +56,13 @@ server.setRequestHandler(ListToolsRequestSchema, async () => {
|
|
|
64
56
|
},
|
|
65
57
|
{
|
|
66
58
|
name: 'optimize_ui_design_prompt',
|
|
67
|
-
description: 'Optimize prompt for UI design by
|
|
59
|
+
description: 'Optimize prompt for UI design by reading page list and requirements from doc file',
|
|
68
60
|
inputSchema: {
|
|
69
61
|
type: 'object',
|
|
70
62
|
properties: {
|
|
71
63
|
user_input: {
|
|
72
64
|
type: 'string',
|
|
73
65
|
description: 'User input prompt that needs to be optimized for UI design'
|
|
74
|
-
},
|
|
75
|
-
page_list: {
|
|
76
|
-
type: 'string',
|
|
77
|
-
description: 'Optional fixed page list result from optimize_fix_pageList_prompt to be included in UI design'
|
|
78
66
|
}
|
|
79
67
|
},
|
|
80
68
|
required: ['user_input']
|
|
@@ -116,7 +104,7 @@ server.setRequestHandler(CallToolRequestSchema, async (request) => {
|
|
|
116
104
|
]
|
|
117
105
|
};
|
|
118
106
|
case 'optimize_fix_pageList_prompt':
|
|
119
|
-
const optimizedFixPageListPrompt = await promptOptimizer.optimizeFixPageListPrompt(args.user_input
|
|
107
|
+
const optimizedFixPageListPrompt = await promptOptimizer.optimizeFixPageListPrompt(args.user_input);
|
|
120
108
|
return {
|
|
121
109
|
content: [
|
|
122
110
|
{
|
|
@@ -126,7 +114,7 @@ server.setRequestHandler(CallToolRequestSchema, async (request) => {
|
|
|
126
114
|
]
|
|
127
115
|
};
|
|
128
116
|
case 'optimize_product_design_prompt':
|
|
129
|
-
const optimizedProductDesignPrompt = await promptOptimizer.optimizeProductDesignPrompt(args.user_input
|
|
117
|
+
const optimizedProductDesignPrompt = await promptOptimizer.optimizeProductDesignPrompt(args.user_input);
|
|
130
118
|
return {
|
|
131
119
|
content: [
|
|
132
120
|
{
|
|
@@ -136,7 +124,7 @@ server.setRequestHandler(CallToolRequestSchema, async (request) => {
|
|
|
136
124
|
]
|
|
137
125
|
};
|
|
138
126
|
case 'optimize_ui_design_prompt':
|
|
139
|
-
const optimizedUIPrompt = await promptOptimizer.optimizeUIDesignPrompt(args.user_input
|
|
127
|
+
const optimizedUIPrompt = await promptOptimizer.optimizeUIDesignPrompt(args.user_input);
|
|
140
128
|
return {
|
|
141
129
|
content: [
|
|
142
130
|
{
|
|
@@ -177,4 +165,4 @@ async function main() {
|
|
|
177
165
|
console.error('ByteFun AI Prompt MCP server running on stdio');
|
|
178
166
|
}
|
|
179
167
|
main().catch(console.error);
|
|
180
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUVBLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUNuRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUNqRixPQUFPLEVBQ0wscUJBQXFCLEVBQ3JCLHNCQUFzQixHQUV2QixNQUFNLG9DQUFvQyxDQUFDO0FBQzVDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUV4RCxNQUFNLE1BQU0sR0FBRyxJQUFJLE1BQU0sQ0FDdkI7SUFDRSxJQUFJLEVBQUUsbUJBQW1CO0lBQ3pCLE9BQU8sRUFBRSxPQUFPO0NBQ2pCLENBQ0YsQ0FBQztBQUVGLE1BQU0sZUFBZSxHQUFHLElBQUksZUFBZSxFQUFFLENBQUM7QUFFOUMsdUJBQXVCO0FBQ3ZCLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxzQkFBc0IsRUFBRSxLQUFLLElBQUksRUFBRTtJQUMxRCxPQUFPO1FBQ0wsS0FBSyxFQUFFO1lBQ0w7Z0JBQ0UsSUFBSSxFQUFFLDBCQUEwQjtnQkFDaEMsV0FBVyxFQUFFLG1IQUFtSDtnQkFDaEksV0FBVyxFQUFFO29CQUNYLElBQUksRUFBRSxRQUFRO29CQUNkLFVBQVUsRUFBRTt3QkFDVixVQUFVLEVBQUU7NEJBQ1YsSUFBSSxFQUFFLFFBQVE7NEJBQ2QsV0FBVyxFQUFFLHFFQUFxRTt5QkFDbkY7cUJBQ0Y7b0JBQ0QsUUFBUSxFQUFFLENBQUMsWUFBWSxDQUFDO2lCQUN6QjthQUNGO1lBQ0Q7Z0JBQ0UsSUFBSSxFQUFFLDhCQUE4QjtnQkFDcEMsV0FBVyxFQUFFLHlGQUF5RjtnQkFDdEcsV0FBVyxFQUFFO29CQUNYLElBQUksRUFBRSxRQUFRO29CQUNkLFVBQVUsRUFBRTt3QkFDVixVQUFVLEVBQUU7NEJBQ1YsSUFBSSxFQUFFLFFBQVE7NEJBQ2QsV0FBVyxFQUFF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SUFDN0MsTUFBTSxNQUFNLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ2hDLE9BQU8sQ0FBQyxLQUFLLENBQUMsK0NBQStDLENBQUMsQ0FBQztBQUNqRSxDQUFDO0FBRUQsSUFBSSxFQUFFLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIiMhL3Vzci9iaW4vZW52IG5vZGVcblxuaW1wb3J0IHsgU2VydmVyIH0gZnJvbSAnQG1vZGVsY29udGV4dHByb3RvY29sL3Nkay9zZXJ2ZXIvaW5kZXguanMnO1xuaW1wb3J0IHsgU3RkaW9TZXJ2ZXJUcmFuc3BvcnQgfSBmcm9tICdAbW9kZWxjb250ZXh0cHJvdG9jb2wvc2RrL3NlcnZlci9zdGRpby5qcyc7XG5pbXBvcnQge1xuICBDYWxsVG9vbFJlcXVlc3RTY2hlbWEsXG4gIExpc3RUb29sc1JlcXVlc3RTY2hlbWEsXG4gIFRvb2wsXG59IGZyb20gJ0Btb2RlbGNvbnRleHRwcm90b2NvbC9zZGsvdHlwZXMuanMnO1xuaW1wb3J0IHsgUHJvbXB0T3B0aW1pemVyIH0gZnJvbSAnLi9wcm9tcHQtb3B0aW1pemVyLmpzJztcblxuY29uc3Qgc2VydmVyID0gbmV3IFNlcnZlcihcbiAge1xuICAgIG5hbWU6ICdieXRlZnVuLWFpLXByb21wdCcsXG4gICAgdmVyc2lvbjogJzEuMC4wJyxcbiAgfVxuKTtcblxuY29uc3QgcHJvbXB0T3B0aW1pemVyID0gbmV3IFByb21wdE9wdGltaXplcigpO1xuXG4vLyBMaXN0IGF2YWlsYWJsZSB0b29sc1xuc2VydmVyLnNldFJlcXVlc3RIYW5kbGVyKExpc3RUb29sc1JlcXVlc3RTY2hlbWEsIGFzeW5jICgpID0+IHtcbiAgcmV0dXJuIHtcbiAgICB0b29sczogW1xuICAgICAge1xuICAgICAgICBuYW1lOiAnb3B0aW1pemVfcGFnZUxpc3RfcHJvbXB0JyxcbiAgICAgICAgZGVzY3JpcHRpb246ICdPcHRpbWl6ZSBwcm9tcHQgZm9yIGxpc3RpbmcgcmVxdWlyZWQgcGFnZXMgYnkgYW5hbHl6aW5nIHVzZXIgcmVxdWlyZW1lbnRzIGFuZCBnZW5lcmF0aW5nIGNvbXByZWhlbnNpdmUgcGFnZSBsaXN0cycsXG4gICAgICAgIGlucHV0U2NoZW1hOiB7XG4gICAgICAgICAgdHlwZTogJ29iamVjdCcsXG4gICAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgICAgdXNlcl9pbnB1dDoge1xuICAgICAgICAgICAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICAgICAgICAgICAgZGVzY3JpcHRpb246ICdVc2VyIGlucHV0IHByb21wdCB0aGF0IG5lZWRzIHRvIGJlIG9wdGltaXplZCBmb3IgcGFnZSBsaXN0IGFuYWx5c2lzJ1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgcmVxdWlyZWQ6IFsndXNlcl9pbnB1dCddXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdvcHRpbWl6ZV9maXhfcGFnZUxpc3RfcHJvbXB0JyxcbiAgICAgICAgZGVzY3JpcHRpb246ICdGaXggYW5kIGltcHJvdmUgZXhpc3RpbmcgcGFnZSBsaXN0IGJ5IGFuYWx5emluZyBtaXNzaW5nIHBhZ2VzIGFuZCBlbnN1cmluZyBjb21wbGV0ZW5lc3MnLFxuICAgICAgICBpbnB1dFNjaGVtYToge1xuICAgICAgICAgIHR5cGU6ICdvYmplY3QnLFxuICAgICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIHVzZXJfaW5wdXQ6IHtcbiAgICAgICAgICAgICAgdHlwZTogJ3N0cmluZycsXG4gICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnVXNlciBpbnB1dCBwcm9tcHQgdGhhdCBkZXNjcmliZXMgdGhlIHJlcXVpcmVtZW50cydcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBleGlzdGluZ19wYWdlX2xpc3Q6IHtcbiAgICAgICAgICAgICAgdHlwZTogJ3N0cmluZycsXG4gICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnRXhpc3RpbmcgcGFnZSBsaXN0IHJlc3VsdCBmcm9tIG9wdGltaXplX3BhZ2VMaXN0X3Byb21wdCB0aGF0IG5lZWRzIHRvIGJlIGZpeGVkIGFuZCBpbXByb3ZlZCdcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIHJlcXVpcmVkOiBbJ3VzZXJfaW5wdXQnLCAnZXhpc3RpbmdfcGFnZV9saXN0J11cbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ29wdGltaXplX3Byb2R1Y3RfZGVzaWduX3Byb21wdCcsXG4gICAgICAgIGRlc2NyaXB0aW9uOiAnT3B0aW1pemUgcHJvbXB0IGZvciBwcm9kdWN0IGRlc2lnbiBkb2N1bWVudCBnZW5lcmF0aW9uIGJhc2VkIG9uIGZpeGVkIHBhZ2UgbGlzdCBhbmFseXNpcycsXG4gICAgICAgIGlucHV0U2NoZW1hOiB7XG4gICAgICAgICAgdHlwZTogJ29iamVjdCcsXG4gICAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgICAgdXNlcl9pbnB1dDoge1xuICAgICAgICAgICAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICAgICAgICAgICAgZGVzY3JpcHRpb246ICdVc2VyIGlucHV0IHByb21wdCB0aGF0IG5lZWRzIHRvIGJlIG9wdGltaXplZCBmb3IgcHJvZHVjdCBkZXNpZ24gZG9jdW1lbnRhdGlvbidcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBwYWdlX2xpc3Q6IHtcbiAgICAgICAgICAgICAgdHlwZTogJ3N0cmluZycsXG4gICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnT3B0aW9uYWwgZml4ZWQgcGFnZSBsaXN0IHJlc3VsdCBmcm9tIG9wdGltaXplX2ZpeF9wYWdlTGlzdF9wcm9tcHQgdG8gYmUgaW5jbHVkZWQgaW4gcHJvZHVjdCBkZXNpZ24nXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICByZXF1aXJlZDogWyd1c2VyX2lucHV0J11cbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ29wdGltaXplX3VpX2Rlc2lnbl9wcm9tcHQnLFxuICAgICAgICBkZXNjcmlwdGlvbjogJ09wdGltaXplIHByb21wdCBmb3IgVUkgZGVzaWduIGJ5IGFkZGluZyBVSSBkZXNpZ24gcnVsZXMgYW5kIHVzaW5nIGZpeGVkIHBhZ2UgbGlzdCcsXG4gICAgICAgIGlucHV0U2NoZW1hOiB7XG4gICAgICAgICAgdHlwZTogJ29iamVjdCcsXG4gICAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgICAgdXNlcl9pbnB1dDoge1xuICAgICAgICAgICAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICAgICAgICAgICAgZGVzY3JpcHRpb246ICdVc2VyIGlucHV0IHByb21wdCB0aGF0IG5lZWRzIHRvIGJlIG9wdGltaXplZCBmb3IgVUkgZGVzaWduJ1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHBhZ2VfbGlzdDoge1xuICAgICAgICAgICAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICAgICAgICAgICAgZGVzY3JpcHRpb246ICdPcHRpb25hbCBmaXhlZCBwYWdlIGxpc3QgcmVzdWx0IGZyb20gb3B0aW1pemVfZml4X3BhZ2VMaXN0X3Byb21wdCB0byBiZSBpbmNsdWRlZCBpbiBVSSBkZXNpZ24nXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICByZXF1aXJlZDogWyd1c2VyX2lucHV0J11cbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ29wdGltaXplX2NvZGVfcHJvbXB0JyxcbiAgICAgICAgZGVzY3JpcHRpb246ICdPcHRpbWl6ZSBwcm9tcHQgZm9yIFR5cGVTY3JpcHQgY29kZSBkZXZlbG9wbWVudCBieSBhZGRpbmcgY29kZSBkZXZlbG9wbWVudCBydWxlcyBhbmQgbWFya2luZyB1c2VyIGlucHV0JyxcbiAgICAgICAgaW5wdXRTY2hlbWE6IHtcbiAgICAgICAgICB0eXBlOiAnb2JqZWN0JyxcbiAgICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICB1c2VyX2lucHV0OiB7XG4gICAgICAgICAgICAgIHR5cGU6ICdzdHJpbmcnLFxuICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogJ1VzZXIgaW5wdXQgcHJvbXB0IHRoYXQgbmVlZHMgdG8gYmUgb3B0aW1pemVkIGZvciBjb2RlIGRldmVsb3BtZW50J1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgcmVxdWlyZWQ6IFsndXNlcl9pbnB1dCddXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICBdIGFzIFRvb2xbXVxuICB9O1xufSk7XG5cbi8vIEhhbmRsZSB0b29sIGNhbGxzXG5zZXJ2ZXIuc2V0UmVxdWVzdEhhbmRsZXIoQ2FsbFRvb2xSZXF1ZXN0U2NoZW1hLCBhc3luYyAocmVxdWVzdCkgPT4ge1xuICBjb25zdCB7IG5hbWUsIGFyZ3VtZW50czogYXJncyB9ID0gcmVxdWVzdC5wYXJhbXM7XG5cbiAgaWYgKCFhcmdzKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdNaXNzaW5nIGFyZ3VtZW50cycpO1xuICB9XG5cbiAgdHJ5IHtcbiAgICBzd2l0Y2ggKG5hbWUpIHtcbiAgICAgIGNhc2UgJ29wdGltaXplX3BhZ2VMaXN0X3Byb21wdCc6XG4gICAgICAgIGNvbnN0IG9wdGltaXplZFBhZ2VMaXN0UHJvbXB0ID0gYXdhaXQgcHJvbXB0T3B0aW1pemVyLm9wdGltaXplUGFnZUxpc3RQcm9tcHQoYXJncy51c2VyX2lucHV0IGFzIHN0cmluZyk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgY29udGVudDogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICB0eXBlOiAndGV4dCcsXG4gICAgICAgICAgICAgIHRleHQ6IG9wdGltaXplZFBhZ2VMaXN0UHJvbXB0XG4gICAgICAgICAgICB9XG4gICAgICAgICAgXVxuICAgICAgICB9O1xuXG4gICAgICBjYXNlICdvcHRpbWl6ZV9maXhfcGFnZUxpc3RfcHJvbXB0JzpcbiAgICAgICAgY29uc3Qgb3B0aW1pemVkRml4UGFnZUxpc3RQcm9tcHQgPSBhd2FpdCBwcm9tcHRPcHRpbWl6ZXIub3B0aW1pemVGaXhQYWdlTGlzdFByb21wdChcbiAgICAgICAgICBhcmdzLnVzZXJfaW5wdXQgYXMgc3RyaW5nLFxuICAgICAgICAgIGFyZ3MuZXhpc3RpbmdfcGFnZV9saXN0IGFzIHN0cmluZ1xuICAgICAgICApO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGNvbnRlbnQ6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgdHlwZTogJ3RleHQnLFxuICAgICAgICAgICAgICB0ZXh0OiBvcHRpbWl6ZWRGaXhQYWdlTGlzdFByb21wdFxuICAgICAgICAgICAgfVxuICAgICAgICAgIF1cbiAgICAgICAgfTtcblxuICAgICAgY2FzZSAnb3B0aW1pemVfcHJvZHVjdF9kZXNpZ25fcHJvbXB0JzpcbiAgICAgICAgY29uc3Qgb3B0aW1pemVkUHJvZHVjdERlc2lnblByb21wdCA9IGF3YWl0IHByb21wdE9wdGltaXplci5vcHRpbWl6ZVByb2R1Y3REZXNpZ25Qcm9tcHQoXG4gICAgICAgICAgYXJncy51c2VyX2lucHV0IGFzIHN0cmluZyxcbiAgICAgICAgICBhcmdzLnBhZ2VfbGlzdCBhcyBzdHJpbmdcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBjb250ZW50OiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHR5cGU6ICd0ZXh0JyxcbiAgICAgICAgICAgICAgdGV4dDogb3B0aW1pemVkUHJvZHVjdERlc2lnblByb21wdFxuICAgICAgICAgICAgfVxuICAgICAgICAgIF1cbiAgICAgICAgfTtcblxuICAgICAgY2FzZSAnb3B0aW1pemVfdWlfZGVzaWduX3Byb21wdCc6XG4gICAgICAgIGNvbnN0IG9wdGltaXplZFVJUHJvbXB0ID0gYXdhaXQgcHJvbXB0T3B0aW1pemVyLm9wdGltaXplVUlEZXNpZ25Qcm9tcHQoXG4gICAgICAgICAgYXJncy51c2VyX2lucHV0IGFzIHN0cmluZyxcbiAgICAgICAgICBhcmdzLnBhZ2VfbGlzdCBhcyBzdHJpbmdcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBjb250ZW50OiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHR5cGU6ICd0ZXh0JyxcbiAgICAgICAgICAgICAgdGV4dDogb3B0aW1pemVkVUlQcm9tcHRcbiAgICAgICAgICAgIH1cbiAgICAgICAgICBdXG4gICAgICAgIH07XG5cbiAgICAgIGNhc2UgJ29wdGltaXplX2NvZGVfcHJvbXB0JzpcbiAgICAgICAgY29uc3Qgb3B0aW1pemVkQ29kZVByb21wdCA9IGF3YWl0IHByb21wdE9wdGltaXplci5vcHRpbWl6ZUNvZGVQcm9tcHQoYXJncy51c2VyX2lucHV0IGFzIHN0cmluZyk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgY29udGVudDogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICB0eXBlOiAndGV4dCcsXG4gICAgICAgICAgICAgIHRleHQ6IG9wdGltaXplZENvZGVQcm9tcHRcbiAgICAgICAgICAgIH1cbiAgICAgICAgICBdXG4gICAgICAgIH07XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5rbm93biB0b29sOiAke25hbWV9YCk7XG4gICAgfVxuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiB7XG4gICAgICBjb250ZW50OiBbXG4gICAgICAgIHtcbiAgICAgICAgICB0eXBlOiAndGV4dCcsXG4gICAgICAgICAgdGV4dDogYEVycm9yOiAke2Vycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogU3RyaW5nKGVycm9yKX1gXG4gICAgICAgIH1cbiAgICAgIF0sXG4gICAgICBpc0Vycm9yOiB0cnVlXG4gICAgfTtcbiAgfVxufSk7XG5cbmFzeW5jIGZ1bmN0aW9uIG1haW4oKSB7XG4gIGNvbnN0IHRyYW5zcG9ydCA9IG5ldyBTdGRpb1NlcnZlclRyYW5zcG9ydCgpO1xuICBhd2FpdCBzZXJ2ZXIuY29ubmVjdCh0cmFuc3BvcnQpO1xuICBjb25zb2xlLmVycm9yKCdCeXRlRnVuIEFJIFByb21wdCBNQ1Agc2VydmVyIHJ1bm5pbmcgb24gc3RkaW8nKTtcbn1cblxubWFpbigpLmNhdGNoKGNvbnNvbGUuZXJyb3IpOyAiXX0=
|
|
168
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUVBLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUNuRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUNqRixPQUFPLEVBQ0wscUJBQXFCLEVBQ3JCLHNCQUFzQixHQUV2QixNQUFNLG9DQUFvQyxDQUFDO0FBQzVDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUV4RCxNQUFNLE1BQU0sR0FBRyxJQUFJLE1BQU0sQ0FDdkI7SUFDRSxJQUFJLEVBQUUsbUJBQW1CO0lBQ3pCLE9BQU8sRUFBRSxPQUFPO0NBQ2pCLENBQ0YsQ0FBQztBQUVGLE1BQU0sZUFBZSxHQUFHLElBQUksZUFBZSxFQUFFLENBQUM7QUFFOUMsdUJBQXVCO0FBQ3ZCLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxzQkFBc0IsRUFBRSxLQUFLLElBQUksRUFBRTtJQUMxRCxPQUFPO1FBQ0wsS0FBSyxFQUFFO1lBQ0w7Z0JBQ0UsSUFBSSxFQUFFLDBCQUEwQjtnQkFDaEMsV0FBVyxFQUFFLG1IQUFtSDtnQkFDaEksV0FBVyxFQUFFO29CQUNYLElBQUksRUFBRSxRQUFRO29CQUNkLFVBQVUsRUFBRTt3QkFDVixVQUFVLEVBQUU7NEJBQ1YsSUFBSSxFQUFFLFFBQVE7NEJBQ2QsV0FBVyxFQUFFLHFFQUFxRTt5QkFDbkY7cUJBQ0Y7b0JBQ0QsUUFBUSxFQUFFLENBQUMsWUFBWSxDQUFDO2lCQUN6QjthQUNGO1lBQ0Q7Z0JBQ0UsSUFBSSxFQUFFLDhCQUE4QjtnQkFDcEMsV0FBVyxFQUFFLHVGQUF1RjtnQkFDcEcsV0FBVyxFQUFFO29CQUNYLElBQUksRUFBRSxRQUFRO29CQUNkLFVBQVUsRUFBRTt3QkFDVixVQUFVLEVBQUU7NEJBQ1YsSUFBSSxFQUFFLFFBQVE7NEJBQ2QsV0FBVyxFQUFF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Q3hCO3FCQUNGO2lCQUNGLENBQUM7WUFFSixLQUFLLHNCQUFzQjtnQkFDekIsTUFBTSxtQkFBbUIsR0FBRyxNQUFNLGVBQWUsQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsVUFBb0IsQ0FBQyxDQUFDO2dCQUNoRyxPQUFPO29CQUNMLE9BQU8sRUFBRTt3QkFDUDs0QkFDRSxJQUFJLEVBQUUsTUFBTTs0QkFDWixJQUFJLEVBQUUsbUJBQW1CO3lCQUMxQjtxQkFDRjtpQkFDRixDQUFDO1lBRUo7Z0JBQ0UsTUFBTSxJQUFJLEtBQUssQ0FBQyxpQkFBaUIsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUM3QyxDQUFDO0lBQ0gsQ0FBQztJQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7UUFDZixPQUFPO1lBQ0wsT0FBTyxFQUFFO2dCQUNQO29CQUNFLElBQUksRUFBRSxNQUFNO29CQUNaLElBQUksRUFBRSxVQUFVLEtBQUssWUFBWSxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRTtpQkFDekU7YUFDRjtZQUNELE9BQU8sRUFBRSxJQUFJO1NBQ2QsQ0FBQztJQUNKLENBQUM7QUFDSCxDQUFDLENBQUMsQ0FBQztBQUVILEtBQUssVUFBVSxJQUFJO0lBQ2pCLE1BQU0sU0FBUyxHQUFHLElBQUksb0JBQW9CLEVBQUUsQ0FBQztJQUM3QyxNQUFNLE1BQU0sQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDaEMsT0FBTyxDQUFDLEtBQUssQ0FBQywrQ0FBK0MsQ0FBQyxDQUFDO0FBQ2pFLENBQUM7QUFFRCxJQUFJLEVBQUUsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiIyEvdXNyL2Jpbi9lbnYgbm9kZVxuXG5pbXBvcnQgeyBTZXJ2ZXIgfSBmcm9tICdAbW9kZWxjb250ZXh0cHJvdG9jb2wvc2RrL3NlcnZlci9pbmRleC5qcyc7XG5pbXBvcnQgeyBTdGRpb1NlcnZlclRyYW5zcG9ydCB9IGZyb20gJ0Btb2RlbGNvbnRleHRwcm90b2NvbC9zZGsvc2VydmVyL3N0ZGlvLmpzJztcbmltcG9ydCB7XG4gIENhbGxUb29sUmVxdWVzdFNjaGVtYSxcbiAgTGlzdFRvb2xzUmVxdWVzdFNjaGVtYSxcbiAgVG9vbCxcbn0gZnJvbSAnQG1vZGVsY29udGV4dHByb3RvY29sL3Nkay90eXBlcy5qcyc7XG5pbXBvcnQgeyBQcm9tcHRPcHRpbWl6ZXIgfSBmcm9tICcuL3Byb21wdC1vcHRpbWl6ZXIuanMnO1xuXG5jb25zdCBzZXJ2ZXIgPSBuZXcgU2VydmVyKFxuICB7XG4gICAgbmFtZTogJ2J5dGVmdW4tYWktcHJvbXB0JyxcbiAgICB2ZXJzaW9uOiAnMS4wLjAnLFxuICB9XG4pO1xuXG5jb25zdCBwcm9tcHRPcHRpbWl6ZXIgPSBuZXcgUHJvbXB0T3B0aW1pemVyKCk7XG5cbi8vIExpc3QgYXZhaWxhYmxlIHRvb2xzXG5zZXJ2ZXIuc2V0UmVxdWVzdEhhbmRsZXIoTGlzdFRvb2xzUmVxdWVzdFNjaGVtYSwgYXN5bmMgKCkgPT4ge1xuICByZXR1cm4ge1xuICAgIHRvb2xzOiBbXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdvcHRpbWl6ZV9wYWdlTGlzdF9wcm9tcHQnLFxuICAgICAgICBkZXNjcmlwdGlvbjogJ09wdGltaXplIHByb21wdCBmb3IgbGlzdGluZyByZXF1aXJlZCBwYWdlcyBieSBhbmFseXppbmcgdXNlciByZXF1aXJlbWVudHMgYW5kIGdlbmVyYXRpbmcgY29tcHJlaGVuc2l2ZSBwYWdlIGxpc3RzJyxcbiAgICAgICAgaW5wdXRTY2hlbWE6IHtcbiAgICAgICAgICB0eXBlOiAnb2JqZWN0JyxcbiAgICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICB1c2VyX2lucHV0OiB7XG4gICAgICAgICAgICAgIHR5cGU6ICdzdHJpbmcnLFxuICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogJ1VzZXIgaW5wdXQgcHJvbXB0IHRoYXQgbmVlZHMgdG8gYmUgb3B0aW1pemVkIGZvciBwYWdlIGxpc3QgYW5hbHlzaXMnXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICByZXF1aXJlZDogWyd1c2VyX2lucHV0J11cbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ29wdGltaXplX2ZpeF9wYWdlTGlzdF9wcm9tcHQnLFxuICAgICAgICBkZXNjcmlwdGlvbjogJ0ZpeCBhbmQgaW1wcm92ZSBleGlzdGluZyBwYWdlIGxpc3QgYnkgcmVhZGluZyBmcm9tIGRvYyBmaWxlIGFuZCBlbnN1cmluZyBjb21wbGV0ZW5lc3MnLFxuICAgICAgICBpbnB1dFNjaGVtYToge1xuICAgICAgICAgIHR5cGU6ICdvYmplY3QnLFxuICAgICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIHVzZXJfaW5wdXQ6IHtcbiAgICAgICAgICAgICAgdHlwZTogJ3N0cmluZycsXG4gICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnVXNlciBpbnB1dCBwcm9tcHQgdGhhdCBkZXNjcmliZXMgdGhlIHJlcXVpcmVtZW50cydcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIHJlcXVpcmVkOiBbJ3VzZXJfaW5wdXQnXVxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBuYW1lOiAnb3B0aW1pemVfcHJvZHVjdF9kZXNpZ25fcHJvbXB0JyxcbiAgICAgICAgZGVzY3JpcHRpb246ICdPcHRpbWl6ZSBwcm9tcHQgZm9yIHByb2R1Y3QgZGVzaWduIGRvY3VtZW50IGVuaGFuY2VtZW50IGJhc2VkIG9uIGV4aXN0aW5nIGRvYyBmaWxlJyxcbiAgICAgICAgaW5wdXRTY2hlbWE6IHtcbiAgICAgICAgICB0eXBlOiAnb2JqZWN0JyxcbiAgICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICB1c2VyX2lucHV0OiB7XG4gICAgICAgICAgICAgIHR5cGU6ICdzdHJpbmcnLFxuICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogJ1VzZXIgaW5wdXQgcHJvbXB0IHRoYXQgbmVlZHMgdG8gYmUgb3B0aW1pemVkIGZvciBwcm9kdWN0IGRlc2lnbiBkb2N1bWVudGF0aW9uJ1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgcmVxdWlyZWQ6IFsndXNlcl9pbnB1dCddXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdvcHRpbWl6ZV91aV9kZXNpZ25fcHJvbXB0JyxcbiAgICAgICAgZGVzY3JpcHRpb246ICdPcHRpbWl6ZSBwcm9tcHQgZm9yIFVJIGRlc2lnbiBieSByZWFkaW5nIHBhZ2UgbGlzdCBhbmQgcmVxdWlyZW1lbnRzIGZyb20gZG9jIGZpbGUnLFxuICAgICAgICBpbnB1dFNjaGVtYToge1xuICAgICAgICAgIHR5cGU6ICdvYmplY3QnLFxuICAgICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIHVzZXJfaW5wdXQ6IHtcbiAgICAgICAgICAgICAgdHlwZTogJ3N0cmluZycsXG4gICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnVXNlciBpbnB1dCBwcm9tcHQgdGhhdCBuZWVkcyB0byBiZSBvcHRpbWl6ZWQgZm9yIFVJIGRlc2lnbidcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIHJlcXVpcmVkOiBbJ3VzZXJfaW5wdXQnXVxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBuYW1lOiAnb3B0aW1pemVfY29kZV9wcm9tcHQnLFxuICAgICAgICBkZXNjcmlwdGlvbjogJ09wdGltaXplIHByb21wdCBmb3IgVHlwZVNjcmlwdCBjb2RlIGRldmVsb3BtZW50IGJ5IGFkZGluZyBjb2RlIGRldmVsb3BtZW50IHJ1bGVzIGFuZCBtYXJraW5nIHVzZXIgaW5wdXQnLFxuICAgICAgICBpbnB1dFNjaGVtYToge1xuICAgICAgICAgIHR5cGU6ICdvYmplY3QnLFxuICAgICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIHVzZXJfaW5wdXQ6IHtcbiAgICAgICAgICAgICAgdHlwZTogJ3N0cmluZycsXG4gICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnVXNlciBpbnB1dCBwcm9tcHQgdGhhdCBuZWVkcyB0byBiZSBvcHRpbWl6ZWQgZm9yIGNvZGUgZGV2ZWxvcG1lbnQnXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICByZXF1aXJlZDogWyd1c2VyX2lucHV0J11cbiAgICAgICAgfVxuICAgICAgfVxuICAgIF0gYXMgVG9vbFtdXG4gIH07XG59KTtcblxuLy8gSGFuZGxlIHRvb2wgY2FsbHNcbnNlcnZlci5zZXRSZXF1ZXN0SGFuZGxlcihDYWxsVG9vbFJlcXVlc3RTY2hlbWEsIGFzeW5jIChyZXF1ZXN0KSA9PiB7XG4gIGNvbnN0IHsgbmFtZSwgYXJndW1lbnRzOiBhcmdzIH0gPSByZXF1ZXN0LnBhcmFtcztcblxuICBpZiAoIWFyZ3MpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ01pc3NpbmcgYXJndW1lbnRzJyk7XG4gIH1cblxuICB0cnkge1xuICAgIHN3aXRjaCAobmFtZSkge1xuICAgICAgY2FzZSAnb3B0aW1pemVfcGFnZUxpc3RfcHJvbXB0JzpcbiAgICAgICAgY29uc3Qgb3B0aW1pemVkUGFnZUxpc3RQcm9tcHQgPSBhd2FpdCBwcm9tcHRPcHRpbWl6ZXIub3B0aW1pemVQYWdlTGlzdFByb21wdChhcmdzLnVzZXJfaW5wdXQgYXMgc3RyaW5nKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBjb250ZW50OiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHR5cGU6ICd0ZXh0JyxcbiAgICAgICAgICAgICAgdGV4dDogb3B0aW1pemVkUGFnZUxpc3RQcm9tcHRcbiAgICAgICAgICAgIH1cbiAgICAgICAgICBdXG4gICAgICAgIH07XG5cbiAgICAgIGNhc2UgJ29wdGltaXplX2ZpeF9wYWdlTGlzdF9wcm9tcHQnOlxuICAgICAgICBjb25zdCBvcHRpbWl6ZWRGaXhQYWdlTGlzdFByb21wdCA9IGF3YWl0IHByb21wdE9wdGltaXplci5vcHRpbWl6ZUZpeFBhZ2VMaXN0UHJvbXB0KGFyZ3MudXNlcl9pbnB1dCBhcyBzdHJpbmcpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGNvbnRlbnQ6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgdHlwZTogJ3RleHQnLFxuICAgICAgICAgICAgICB0ZXh0OiBvcHRpbWl6ZWRGaXhQYWdlTGlzdFByb21wdFxuICAgICAgICAgICAgfVxuICAgICAgICAgIF1cbiAgICAgICAgfTtcblxuICAgICAgY2FzZSAnb3B0aW1pemVfcHJvZHVjdF9kZXNpZ25fcHJvbXB0JzpcbiAgICAgICAgY29uc3Qgb3B0aW1pemVkUHJvZHVjdERlc2lnblByb21wdCA9IGF3YWl0IHByb21wdE9wdGltaXplci5vcHRpbWl6ZVByb2R1Y3REZXNpZ25Qcm9tcHQoYXJncy51c2VyX2lucHV0IGFzIHN0cmluZyk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgY29udGVudDogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICB0eXBlOiAndGV4dCcsXG4gICAgICAgICAgICAgIHRleHQ6IG9wdGltaXplZFByb2R1Y3REZXNpZ25Qcm9tcHRcbiAgICAgICAgICAgIH1cbiAgICAgICAgICBdXG4gICAgICAgIH07XG5cbiAgICAgIGNhc2UgJ29wdGltaXplX3VpX2Rlc2lnbl9wcm9tcHQnOlxuICAgICAgICBjb25zdCBvcHRpbWl6ZWRVSVByb21wdCA9IGF3YWl0IHByb21wdE9wdGltaXplci5vcHRpbWl6ZVVJRGVzaWduUHJvbXB0KGFyZ3MudXNlcl9pbnB1dCBhcyBzdHJpbmcpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGNvbnRlbnQ6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgdHlwZTogJ3RleHQnLFxuICAgICAgICAgICAgICB0ZXh0OiBvcHRpbWl6ZWRVSVByb21wdFxuICAgICAgICAgICAgfVxuICAgICAgICAgIF1cbiAgICAgICAgfTtcblxuICAgICAgY2FzZSAnb3B0aW1pemVfY29kZV9wcm9tcHQnOlxuICAgICAgICBjb25zdCBvcHRpbWl6ZWRDb2RlUHJvbXB0ID0gYXdhaXQgcHJvbXB0T3B0aW1pemVyLm9wdGltaXplQ29kZVByb21wdChhcmdzLnVzZXJfaW5wdXQgYXMgc3RyaW5nKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBjb250ZW50OiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHR5cGU6ICd0ZXh0JyxcbiAgICAgICAgICAgICAgdGV4dDogb3B0aW1pemVkQ29kZVByb21wdFxuICAgICAgICAgICAgfVxuICAgICAgICAgIF1cbiAgICAgICAgfTtcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIHRvb2w6ICR7bmFtZX1gKTtcbiAgICB9XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGNvbnRlbnQ6IFtcbiAgICAgICAge1xuICAgICAgICAgIHR5cGU6ICd0ZXh0JyxcbiAgICAgICAgICB0ZXh0OiBgRXJyb3I6ICR7ZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoZXJyb3IpfWBcbiAgICAgICAgfVxuICAgICAgXSxcbiAgICAgIGlzRXJyb3I6IHRydWVcbiAgICB9O1xuICB9XG59KTtcblxuYXN5bmMgZnVuY3Rpb24gbWFpbigpIHtcbiAgY29uc3QgdHJhbnNwb3J0ID0gbmV3IFN0ZGlvU2VydmVyVHJhbnNwb3J0KCk7XG4gIGF3YWl0IHNlcnZlci5jb25uZWN0KHRyYW5zcG9ydCk7XG4gIGNvbnNvbGUuZXJyb3IoJ0J5dGVGdW4gQUkgUHJvbXB0IE1DUCBzZXJ2ZXIgcnVubmluZyBvbiBzdGRpbycpO1xufVxuXG5tYWluKCkuY2F0Y2goY29uc29sZS5lcnJvcik7ICJdfQ==
|
|
@@ -2,39 +2,29 @@
|
|
|
2
2
|
* ByteFun AI MCP 提示词优化器
|
|
3
3
|
*
|
|
4
4
|
* 重要说明:
|
|
5
|
-
* -
|
|
6
|
-
* -
|
|
7
|
-
* -
|
|
5
|
+
* - 本类提供五个独立的优化工具,每个工具处理不同类型的需求
|
|
6
|
+
* - 每个工具都独立执行,通过文件系统进行数据传递
|
|
7
|
+
* - 必须分步骤执行,每个步骤完成后等待用户确认再进行下一步
|
|
8
8
|
*
|
|
9
|
-
*
|
|
10
|
-
* 1. 页面列表分析需求 → 调用 optimizePageListPrompt()
|
|
11
|
-
* 2. 页面列表修复需求 → 调用 optimizeFixPageListPrompt()
|
|
12
|
-
* 3. 产品需求设计需求 → 调用 optimizeProductDesignPrompt()
|
|
13
|
-
* 4. UI设计需求 → 调用 optimizeUIDesignPrompt()
|
|
14
|
-
* 5. 代码开发需求 → 调用 optimizeCodePrompt()
|
|
9
|
+
* 单一工具列表:
|
|
10
|
+
* 1. 页面列表分析需求 → 调用 optimizePageListPrompt() → 写入doc/xxx-产品需求文档.md
|
|
11
|
+
* 2. 页面列表修复需求 → 调用 optimizeFixPageListPrompt() → 读取并更新doc/xxx-产品需求文档.md
|
|
12
|
+
* 3. 产品需求设计需求 → 调用 optimizeProductDesignPrompt() → 读取并完善doc/xxx-产品需求文档.md
|
|
13
|
+
* 4. UI设计需求 → 调用 optimizeUIDesignPrompt() → 读取doc/xxx-产品需求文档.md进行UI设计
|
|
14
|
+
* 5. 代码开发需求 → 调用 optimizeCodePrompt() → 读取doc/xxx-产品需求文档.md进行代码开发
|
|
15
15
|
*
|
|
16
|
-
*
|
|
17
|
-
*
|
|
18
|
-
*
|
|
19
|
-
*
|
|
20
|
-
*
|
|
21
|
-
*
|
|
16
|
+
* 推荐的分阶段执行流程(必须分步执行,不可连续调用):
|
|
17
|
+
* 阶段一:页面列表分析 → 执行并写入文件 → 停顿等待确认
|
|
18
|
+
* 阶段二:页面列表修复 → 读取文件、修复并更新 → 停顿等待确认
|
|
19
|
+
* 阶段三:产品需求设计 → 读取文件、完善需求文档 → 停顿等待确认
|
|
20
|
+
* 阶段四:UI设计 → 读取需求文档、进行UI设计 → 停顿等待确认
|
|
21
|
+
* 阶段五:代码开发 → 读取需求文档、进行代码开发 → 完成
|
|
22
22
|
*
|
|
23
|
-
*
|
|
24
|
-
*
|
|
25
|
-
*
|
|
26
|
-
*
|
|
27
|
-
*
|
|
28
|
-
* 推荐工作流程(分阶段执行):
|
|
29
|
-
* - 标准完整开发:阶段一(页面列表+修复+产品设计) → 停顿检查 → 阶段二(UI设计) → 停顿检查 → 阶段三(代码开发)
|
|
30
|
-
* - 快速UI设计:阶段一(页面列表+修复+UI设计) → 停顿检查 → 阶段二(代码开发)
|
|
31
|
-
* - 已有需求开发:阶段一(UI设计) → 停顿检查 → 阶段二(代码开发)
|
|
32
|
-
*
|
|
33
|
-
* 数据传递逻辑:
|
|
34
|
-
* - {{PAGE_LIST_RESULT}} 代表 optimize_pageList_prompt 的结果
|
|
35
|
-
* - {{FIXED_PAGE_LIST_RESULT}} 代表 optimize_fix_pageList_prompt 的修复后结果
|
|
36
|
-
* - 产品设计和UI设计基于修复后的页面列表进行,确保页面完整性
|
|
37
|
-
* - ⚠️ 重要:产品设计完成后必须停顿检查,UI设计完成后必须停顿检查
|
|
23
|
+
* ⚠️ 重要原则:
|
|
24
|
+
* - 严禁连续调用多个工具
|
|
25
|
+
* - 每个工具执行完成后必须等待用户确认
|
|
26
|
+
* - 所有数据通过文件系统传递,确保每个工具都能独立执行
|
|
27
|
+
* - 每个阶段都要有明确的完成提示和停顿检查点
|
|
38
28
|
*/
|
|
39
29
|
export declare class PromptOptimizer {
|
|
40
30
|
private readonly pageListPromptTemplate;
|
|
@@ -50,13 +40,15 @@ export declare class PromptOptimizer {
|
|
|
50
40
|
/**
|
|
51
41
|
* 修复页面列表提示词
|
|
52
42
|
* 注意:此方法用于对已有页面列表进行二次检查和修复,确保页面完整性
|
|
43
|
+
* 📁 数据来源:从doc/xxx-产品需求文档.md文件中读取已有页面列表
|
|
53
44
|
*/
|
|
54
|
-
optimizeFixPageListPrompt(userInput: string
|
|
45
|
+
optimizeFixPageListPrompt(userInput: string): Promise<string>;
|
|
55
46
|
/**
|
|
56
47
|
* 优化产品需求设计提示词
|
|
57
|
-
*
|
|
48
|
+
* 注意:此方法专门处理产品需求文档生成,基于已有页面列表进行完善
|
|
49
|
+
* 📁 数据来源:从doc/xxx-产品需求文档.md文件中读取已有页面列表和项目背景
|
|
58
50
|
*/
|
|
59
|
-
optimizeProductDesignPrompt(userInput: string
|
|
51
|
+
optimizeProductDesignPrompt(userInput: string): Promise<string>;
|
|
60
52
|
/**
|
|
61
53
|
* 优化代码开发提示词
|
|
62
54
|
* 注意:此方法专门处理代码开发相关需求,会参考产品需求文档
|
|
@@ -64,72 +56,10 @@ export declare class PromptOptimizer {
|
|
|
64
56
|
optimizeCodePrompt(userInput: string): Promise<string>;
|
|
65
57
|
/**
|
|
66
58
|
* 优化UI设计提示词
|
|
67
|
-
* 注意:此方法专门处理UI
|
|
68
|
-
|
|
69
|
-
optimizeUIDesignPrompt(userInput: string, pageList?: string): Promise<string>;
|
|
70
|
-
/**
|
|
71
|
-
* ⭐推荐阶段一:页面列表 + 页面修复 + 产品设计
|
|
72
|
-
* 先分析页面列表,然后修复页面列表,最后基于修复后的页面列表生成产品需求文档
|
|
73
|
-
* 🛑 停顿点:产品设计完成后必须停顿,等待用户确认后再进行UI设计
|
|
74
|
-
*/
|
|
75
|
-
optimizePageListAndProductDesignPrompt(userInput: string): Promise<{
|
|
76
|
-
pageListPrompt: string;
|
|
77
|
-
fixPageListPrompt: string;
|
|
78
|
-
productDesignPrompt: string;
|
|
79
|
-
}>;
|
|
80
|
-
/**
|
|
81
|
-
* ⚠️不推荐:页面列表 + 页面修复 + 产品设计 + UI设计(缺少停顿检查点)
|
|
82
|
-
* 完整的设计流程:页面列表分析 → 页面列表修复 → 产品需求设计 → UI设计
|
|
83
|
-
* 注意:此方法缺少产品设计和UI设计之间的停顿检查点,不推荐使用
|
|
84
|
-
*/
|
|
85
|
-
optimizePageListProductDesignAndUIPrompt(userInput: string): Promise<{
|
|
86
|
-
pageListPrompt: string;
|
|
87
|
-
fixPageListPrompt: string;
|
|
88
|
-
productDesignPrompt: string;
|
|
89
|
-
uiDesignPrompt: string;
|
|
90
|
-
}>;
|
|
91
|
-
/**
|
|
92
|
-
* ⚠️不推荐:页面列表 + 页面修复 + 产品设计 + UI设计 + 代码编写(缺少停顿检查点)
|
|
93
|
-
* 完整的开发流程:页面列表分析 → 页面列表修复 → 产品需求设计 → UI设计 → 代码开发
|
|
94
|
-
* 注意:此方法缺少多个关键停顿检查点,不推荐使用
|
|
95
|
-
*/
|
|
96
|
-
optimizeFullWorkflowWithProductDesignPrompt(userInput: string): Promise<{
|
|
97
|
-
pageListPrompt: string;
|
|
98
|
-
fixPageListPrompt: string;
|
|
99
|
-
productDesignPrompt: string;
|
|
100
|
-
uiDesignPrompt: string;
|
|
101
|
-
codePrompt: string;
|
|
102
|
-
}>;
|
|
103
|
-
/**
|
|
104
|
-
* ⭐已有需求流程:UI设计 + 代码编写
|
|
105
|
-
* 先进行UI设计,然后进行代码开发
|
|
106
|
-
* 🛑 停顿点:UI设计完成后必须停顿,等待用户确认后再进行代码开发
|
|
107
|
-
*/
|
|
108
|
-
optimizeUIDesignAndCodePrompt(userInput: string): Promise<{
|
|
109
|
-
uiDesignPrompt: string;
|
|
110
|
-
codePrompt: string;
|
|
111
|
-
}>;
|
|
112
|
-
/**
|
|
113
|
-
* ⭐快速流程阶段一:页面列表 + 页面修复 + UI设计
|
|
114
|
-
* 先分析页面列表,然后修复页面列表,再基于修复后的页面列表进行UI设计
|
|
115
|
-
* 🛑 停顿点:UI设计完成后必须停顿,等待用户确认后再进行代码开发
|
|
116
|
-
*/
|
|
117
|
-
optimizePageListAndUIDesignPrompt(userInput: string): Promise<{
|
|
118
|
-
pageListPrompt: string;
|
|
119
|
-
fixPageListPrompt: string;
|
|
120
|
-
uiDesignPrompt: string;
|
|
121
|
-
}>;
|
|
122
|
-
/**
|
|
123
|
-
* ⚠️不推荐:页面列表 + 页面修复 + UI设计 + 代码编写(缺少停顿检查点)
|
|
124
|
-
* 完整的工作流程:页面列表分析 → 页面列表修复 → UI设计 → 代码开发
|
|
125
|
-
* 注意:此方法缺少UI设计和代码开发之间的停顿检查点,不推荐使用
|
|
59
|
+
* 注意:此方法专门处理UI设计相关需求,会参考产品需求文档和页面列表
|
|
60
|
+
* 📁 数据来源:从doc/xxx-产品需求文档.md文件中读取页面列表和需求详情
|
|
126
61
|
*/
|
|
127
|
-
|
|
128
|
-
pageListPrompt: string;
|
|
129
|
-
fixPageListPrompt: string;
|
|
130
|
-
uiDesignPrompt: string;
|
|
131
|
-
codePrompt: string;
|
|
132
|
-
}>;
|
|
62
|
+
optimizeUIDesignPrompt(userInput: string): Promise<string>;
|
|
133
63
|
/**
|
|
134
64
|
* 基于页面列表结果生成产品需求设计提示词
|
|
135
65
|
* 此方法用于在获得页面列表结果后,生成包含页面列表信息的产品设计提示词
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prompt-optimizer.d.ts","sourceRoot":"","sources":["../src/prompt-optimizer.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"prompt-optimizer.d.ts","sourceRoot":"","sources":["../src/prompt-optimizer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,qBAAa,eAAe;IAC1B,OAAO,CAAC,QAAQ,CAAC,sBAAsB,CAwEiD;IAExF,OAAO,CAAC,QAAQ,CAAC,yBAAyB,CA6DqD;IAE/F,OAAO,CAAC,QAAQ,CAAC,2BAA2B,CAqByE;IAErH,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAiGlC;IAED,OAAO,CAAC,QAAQ,CAAC,sBAAsB,CA+MvC;IAEA;;;OAGG;IACG,sBAAsB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAOhE;;;;OAIG;IACG,yBAAyB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAUnE;;;;OAIG;IACG,2BAA2B,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAUrE;;;OAGG;IACG,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAO5D;;;;OAIG;IACG,sBAAsB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAUhE;;;OAGG;IACG,uCAAuC,CAAC,SAAS,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAIzG;;;OAGG;IACG,kCAAkC,CAAC,SAAS,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAIpG;;;OAGG;IACG,4CAA4C,CAAC,SAAS,EAAE,MAAM,EAAE,mBAAmB,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAInH;;;OAGG;IACG,uCAAuC,CAAC,SAAS,EAAE,MAAM,EAAE,mBAAmB,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;CAG/G"}
|
|
@@ -2,39 +2,29 @@
|
|
|
2
2
|
* ByteFun AI MCP 提示词优化器
|
|
3
3
|
*
|
|
4
4
|
* 重要说明:
|
|
5
|
-
* -
|
|
6
|
-
* -
|
|
7
|
-
* -
|
|
5
|
+
* - 本类提供五个独立的优化工具,每个工具处理不同类型的需求
|
|
6
|
+
* - 每个工具都独立执行,通过文件系统进行数据传递
|
|
7
|
+
* - 必须分步骤执行,每个步骤完成后等待用户确认再进行下一步
|
|
8
8
|
*
|
|
9
|
-
*
|
|
10
|
-
* 1. 页面列表分析需求 → 调用 optimizePageListPrompt()
|
|
11
|
-
* 2. 页面列表修复需求 → 调用 optimizeFixPageListPrompt()
|
|
12
|
-
* 3. 产品需求设计需求 → 调用 optimizeProductDesignPrompt()
|
|
13
|
-
* 4. UI设计需求 → 调用 optimizeUIDesignPrompt()
|
|
14
|
-
* 5. 代码开发需求 → 调用 optimizeCodePrompt()
|
|
9
|
+
* 单一工具列表:
|
|
10
|
+
* 1. 页面列表分析需求 → 调用 optimizePageListPrompt() → 写入doc/xxx-产品需求文档.md
|
|
11
|
+
* 2. 页面列表修复需求 → 调用 optimizeFixPageListPrompt() → 读取并更新doc/xxx-产品需求文档.md
|
|
12
|
+
* 3. 产品需求设计需求 → 调用 optimizeProductDesignPrompt() → 读取并完善doc/xxx-产品需求文档.md
|
|
13
|
+
* 4. UI设计需求 → 调用 optimizeUIDesignPrompt() → 读取doc/xxx-产品需求文档.md进行UI设计
|
|
14
|
+
* 5. 代码开发需求 → 调用 optimizeCodePrompt() → 读取doc/xxx-产品需求文档.md进行代码开发
|
|
15
15
|
*
|
|
16
|
-
*
|
|
17
|
-
*
|
|
18
|
-
*
|
|
19
|
-
*
|
|
20
|
-
*
|
|
21
|
-
*
|
|
16
|
+
* 推荐的分阶段执行流程(必须分步执行,不可连续调用):
|
|
17
|
+
* 阶段一:页面列表分析 → 执行并写入文件 → 停顿等待确认
|
|
18
|
+
* 阶段二:页面列表修复 → 读取文件、修复并更新 → 停顿等待确认
|
|
19
|
+
* 阶段三:产品需求设计 → 读取文件、完善需求文档 → 停顿等待确认
|
|
20
|
+
* 阶段四:UI设计 → 读取需求文档、进行UI设计 → 停顿等待确认
|
|
21
|
+
* 阶段五:代码开发 → 读取需求文档、进行代码开发 → 完成
|
|
22
22
|
*
|
|
23
|
-
*
|
|
24
|
-
*
|
|
25
|
-
*
|
|
26
|
-
*
|
|
27
|
-
*
|
|
28
|
-
* 推荐工作流程(分阶段执行):
|
|
29
|
-
* - 标准完整开发:阶段一(页面列表+修复+产品设计) → 停顿检查 → 阶段二(UI设计) → 停顿检查 → 阶段三(代码开发)
|
|
30
|
-
* - 快速UI设计:阶段一(页面列表+修复+UI设计) → 停顿检查 → 阶段二(代码开发)
|
|
31
|
-
* - 已有需求开发:阶段一(UI设计) → 停顿检查 → 阶段二(代码开发)
|
|
32
|
-
*
|
|
33
|
-
* 数据传递逻辑:
|
|
34
|
-
* - {{PAGE_LIST_RESULT}} 代表 optimize_pageList_prompt 的结果
|
|
35
|
-
* - {{FIXED_PAGE_LIST_RESULT}} 代表 optimize_fix_pageList_prompt 的修复后结果
|
|
36
|
-
* - 产品设计和UI设计基于修复后的页面列表进行,确保页面完整性
|
|
37
|
-
* - ⚠️ 重要:产品设计完成后必须停顿检查,UI设计完成后必须停顿检查
|
|
23
|
+
* ⚠️ 重要原则:
|
|
24
|
+
* - 严禁连续调用多个工具
|
|
25
|
+
* - 每个工具执行完成后必须等待用户确认
|
|
26
|
+
* - 所有数据通过文件系统传递,确保每个工具都能独立执行
|
|
27
|
+
* - 每个阶段都要有明确的完成提示和停顿检查点
|
|
38
28
|
*/
|
|
39
29
|
export class PromptOptimizer {
|
|
40
30
|
pageListPromptTemplate = `# 你是APP产品经理专家,现在需要你根据用户输入的需求描述,遵循"分析规则"分析出所需要的完整的页面列表。
|
|
@@ -87,55 +77,113 @@ export class PromptOptimizer {
|
|
|
87
77
|
|
|
88
78
|
2. **输出最终清单**
|
|
89
79
|
- 输出页面总数,以及按照模块层级,将所有"页面名称"以分层列表形式展示。
|
|
90
|
-
- 确保每个页面都已"点亮"
|
|
91
|
-
fixPageListPromptTemplate = `你是APP产品经理专家,optimize_pageList_prompt得出的页面列表结果并不齐全,你必须再次进行分析,分析出更多所需页面,将已经得出的页面列表复盘检查一次是否有缺漏,必须是一个页面完整齐全的APP,举个例子:设置页里面有很多个子设置项,那么子设置项有需要新开页面的也必须列出来一个单独的页面。其他页面也是如此,也要进行分析是否有不齐全的页面路径漏掉了。`;
|
|
92
|
-
productDesignPromptTemplate = `# 你是产品经理专家,需要分析用户需求描述,然后根据'通用需求文档模板',输出一份标准的**产品需求文档**,然后将生成的需求文档写入到当前工程目录下面的doc文件夹下面的XXX-产品需求文档.md,其中XXX是根据用户需求描述来命名。
|
|
93
|
-
|
|
94
|
-
**重要说明**:
|
|
95
|
-
- 这是**纯产品需求文档**,专注于产品功能、业务逻辑、用户体验需求
|
|
96
|
-
- **严禁包含任何技术实现内容**:不得涉及UI设计规范、交互规范、开发规范、技术架构等
|
|
97
|
-
- **严禁包含技术选型内容**:不得提及前端框架、后端技术、数据库设计等
|
|
98
|
-
- **严禁生成技术规范章节**:文档结构严格按照下面的模板执行,不得自行添加技术相关章节
|
|
80
|
+
- 确保每个页面都已"点亮"所有交互元素点击跳转的目标页面都在清单中出现。
|
|
99
81
|
|
|
100
|
-
##
|
|
82
|
+
## 文件写入要求
|
|
83
|
+
- 分析完成后,将页面列表结果写入到当前工程目录下的doc文件夹下的xxx-产品需求文档.md文件中
|
|
84
|
+
- 其中xxx是根据用户需求描述来命名(如:健身APP-产品需求文档.md)
|
|
85
|
+
- 写入内容格式:
|
|
101
86
|
|
|
102
|
-
|
|
87
|
+
\`\`\`markdown
|
|
88
|
+
# xxx产品需求文档
|
|
103
89
|
|
|
104
|
-
1. 项目背景与定位
|
|
105
|
-
|
|
90
|
+
## 1. 项目背景与定位
|
|
91
|
+
[此部分暂时留空,等待后续完善]
|
|
106
92
|
|
|
107
|
-
2. 页面列表(按展示顺序)
|
|
108
|
-
不需要自己分析功能模块和页面列表,你直接根据第二步列出所需页面列表\`optimize_fix_pageList_prompt\`得出的所有模块和页面列表,先列出所有页面名称、所属模块、简要说明与跳转入口,按以下示例格式写出来。
|
|
109
|
-
。示例格式:
|
|
93
|
+
## 2. 页面列表(按展示顺序)
|
|
110
94
|
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
|
114
|
-
|
|
|
115
|
-
| 2 | 新手引导页 | 公共 | 首次安装引导用户了解核心功能 | 闪屏页(首次打开) |
|
|
116
|
-
| 3 | 登录页 | 用户 | 用户输入账号信息完成认证 | 首次启动判断/拦截跳转 |
|
|
117
|
-
| 4 | 首页 | 首页 | 展示 Banner、快捷入口、推荐列表 | 登录/新手引导后或游客模式 |
|
|
118
|
-
| … | … | … | … | … |
|
|
95
|
+
| 序号 | 页面名称 | 模块 | 简要说明 | 跳转入口 |
|
|
96
|
+
|------|----------|------|----------|----------|
|
|
97
|
+
| 1 | [页面名] | [模块] | [说明] | [入口] |
|
|
98
|
+
| ... | ... | ... | ... | ... |
|
|
119
99
|
\`\`\`
|
|
120
100
|
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
101
|
+
## 完成提示
|
|
102
|
+
- 文件写入完成后,提示用户:"✅ **页面列表分析已完成!**页面列表已写入 doc/xxx-产品需求文档.md 文件。接下来请执行页面列表修复功能来完善页面列表的完整性。"`;
|
|
103
|
+
fixPageListPromptTemplate = `# 你是APP产品经理专家,现在需要对已有的页面列表进行二次检查和修复,确保页面列表的完整性和齐全性。
|
|
104
|
+
|
|
105
|
+
## 修复任务说明
|
|
106
|
+
已有的页面列表可能存在遗漏,你需要进行深度分析,补充所有缺失的页面,确保这是一个功能完整、页面齐全的APP。
|
|
107
|
+
|
|
108
|
+
## 文件读取要求
|
|
109
|
+
- 修复之前,必须先读取当前工程目录下的doc文件夹中的xxx-产品需求文档.md文件
|
|
110
|
+
- 获取其中"页面列表(按展示顺序)"章节的内容
|
|
111
|
+
- 基于已有的页面列表进行分析和修复
|
|
112
|
+
|
|
113
|
+
## 修复分析规则
|
|
114
|
+
|
|
115
|
+
### 1. 深度页面挖掘
|
|
116
|
+
- **设置页深度分析**:设置页通常包含多个子设置项,每个需要新开页面的子设置项都必须单独列出
|
|
117
|
+
- 个人信息设置 → 个人信息编辑页、头像设置页、昵称修改页
|
|
118
|
+
- 账号安全 → 密码修改页、手机号绑定页、邮箱绑定页
|
|
119
|
+
- 隐私设置 → 隐私设置详情页
|
|
120
|
+
- 通知设置 → 通知设置详情页
|
|
121
|
+
- 关于 → 关于页面、用户协议页、隐私政策页、版本信息页
|
|
122
|
+
|
|
123
|
+
### 2. 功能模块完整性检查
|
|
124
|
+
- **每个功能的CRUD页面**:创建、查看、编辑、删除对应的页面都要齐全
|
|
125
|
+
- **表单页面**:所有需要用户输入的功能都应该有对应的表单页面
|
|
126
|
+
- **详情页面**:所有列表项都应该有对应的详情页面
|
|
127
|
+
- **操作确认页面**:删除、支付、提交等重要操作都应该有确认页面
|
|
128
|
+
|
|
129
|
+
### 3. 用户流程闭环检查
|
|
130
|
+
- **搜索功能闭环**:搜索页 → 搜索结果页 → 详情页
|
|
131
|
+
- **购物功能闭环**:商品列表 → 商品详情 → 购物车 → 结算页 → 支付页 → 订单确认页 → 订单详情页
|
|
132
|
+
- **用户注册登录闭环**:登录页 → 注册页 → 验证码页 → 忘记密码页 → 重置密码页
|
|
133
|
+
- **内容发布闭环**:发布页 → 编辑页 → 预览页 → 发布成功页
|
|
134
|
+
|
|
135
|
+
### 4. 状态页面补充
|
|
136
|
+
- **空状态页面**:无数据时的占位页面
|
|
137
|
+
- **错误页面**:网络错误、404错误、权限错误等页面
|
|
138
|
+
- **加载页面**:数据加载中的页面
|
|
139
|
+
- **成功反馈页面**:操作成功后的反馈页面
|
|
140
|
+
|
|
141
|
+
### 5. 弹窗和浮层页面
|
|
142
|
+
- **选择器页面**:日期选择、地区选择、分类选择等
|
|
143
|
+
- **确认对话框页面**:各种操作确认弹窗
|
|
144
|
+
- **提示页面**:各种提示和说明页面
|
|
145
|
+
|
|
146
|
+
## 输出要求
|
|
147
|
+
1. **对比分析**:将原有页面列表和新补充的页面进行对比说明
|
|
148
|
+
2. **补充说明**:详细说明每个新增页面的必要性和用途
|
|
149
|
+
3. **完整页面清单**:输出修复后的完整页面列表,按模块分类
|
|
150
|
+
4. **页面总数统计**:明确说明修复前后的页面数量变化
|
|
151
|
+
|
|
152
|
+
## 文件更新要求
|
|
153
|
+
- 修复完成后,更新当前工程目录下的doc文件夹中的xxx-产品需求文档.md文件
|
|
154
|
+
- 将"页面列表(按展示顺序)"章节替换为修复后的完整页面列表
|
|
155
|
+
- 保持文件的其他部分不变,只更新页面列表部分
|
|
156
|
+
|
|
157
|
+
## 修复原则
|
|
158
|
+
- **宁多勿少**:宁可多列出一些页面,也不要遗漏页面
|
|
159
|
+
- **用户视角**:从用户使用流程的角度思考所有可能需要的页面
|
|
160
|
+
- **功能完整**:确保每个功能模块都有完整的页面支持
|
|
161
|
+
- **体验闭环**:确保用户的每个操作流程都有完整的页面闭环
|
|
162
|
+
|
|
163
|
+
## 完成提示
|
|
164
|
+
- 文件更新完成后,提示用户:"✅ **页面列表修复已完成!**修复后的页面列表已更新到 doc/xxx-产品需求文档.md 文件。接下来可以执行产品需求设计功能来完善需求文档的详细内容。"`;
|
|
165
|
+
productDesignPromptTemplate = `# 你是产品经理专家,现在需要基于已有的页面列表,完善产品需求文档的项目背景与定位。
|
|
129
166
|
|
|
130
|
-
|
|
167
|
+
**重要说明**:
|
|
168
|
+
- 这是**纯产品需求文档**,专注于产品功能、业务逻辑、用户体验需求
|
|
169
|
+
- **严禁包含任何技术实现内容**:不得涉及UI设计规范、交互规范、开发规范、技术架构等
|
|
170
|
+
- **严禁包含技术选型内容**:不得提及前端框架、后端技术、数据库设计等
|
|
171
|
+
- **严禁生成技术规范章节**:只需完善产品需求内容,不得自行添加技术相关章节
|
|
131
172
|
|
|
132
|
-
|
|
173
|
+
## 文件读取要求
|
|
174
|
+
- 开始之前,必须先读取当前工程目录下的doc文件夹中的xxx-产品需求文档.md文件
|
|
175
|
+
- 获取其中已有的"项目背景与定位"和"页面列表(按展示顺序)"内容
|
|
176
|
+
- 基于已有内容进行完善,不需要重新分析页面列表
|
|
133
177
|
|
|
134
|
-
|
|
135
|
-
|
|
178
|
+
## 需求文档完善任务
|
|
179
|
+
1. **详细完善项目背景与定位**
|
|
136
180
|
|
|
137
|
-
|
|
138
|
-
-
|
|
181
|
+
## 文件更新要求
|
|
182
|
+
- 完善完成后,更新当前工程目录下的doc文件夹中的xxx-产品需求文档.md文件
|
|
183
|
+
- 确保文档结构完整,内容详细
|
|
184
|
+
|
|
185
|
+
## 完成提示
|
|
186
|
+
- 文件更新完成后,提示用户:"✅ **产品需求文档已完成!**完善后的需求文档已更新到 doc/xxx-产品需求文档.md 文件。请您仔细查看需求文档内容,确认是否有需要修改的地方。确认需求文档无问题后,可以继续进行UI设计工作。"`;
|
|
139
187
|
codePromptTemplate = `# 你是typescript代码专家,根据'规则'、'例子'和用户输入的需求描述,完成代码开发
|
|
140
188
|
|
|
141
189
|
## 重要说明
|
|
@@ -455,40 +503,30 @@ ${userInput}`;
|
|
|
455
503
|
/**
|
|
456
504
|
* 修复页面列表提示词
|
|
457
505
|
* 注意:此方法用于对已有页面列表进行二次检查和修复,确保页面完整性
|
|
506
|
+
* 📁 数据来源:从doc/xxx-产品需求文档.md文件中读取已有页面列表
|
|
458
507
|
*/
|
|
459
|
-
async optimizeFixPageListPrompt(userInput
|
|
508
|
+
async optimizeFixPageListPrompt(userInput) {
|
|
460
509
|
return `${this.fixPageListPromptTemplate}
|
|
461
510
|
|
|
462
511
|
# 用户需求描述
|
|
463
512
|
${userInput}
|
|
464
513
|
|
|
465
|
-
# 已有页面列表
|
|
466
|
-
${existingPageList}
|
|
467
|
-
|
|
468
514
|
# 修复任务
|
|
469
|
-
|
|
515
|
+
请先读取doc文件夹中的xxx-产品需求文档.md文件,获取其中的页面列表,然后对页面列表进行深度分析和修复,补充所有遗漏的页面,确保APP功能完整、页面齐全。`;
|
|
470
516
|
}
|
|
471
517
|
/**
|
|
472
518
|
* 优化产品需求设计提示词
|
|
473
|
-
*
|
|
519
|
+
* 注意:此方法专门处理产品需求文档生成,基于已有页面列表进行完善
|
|
520
|
+
* 📁 数据来源:从doc/xxx-产品需求文档.md文件中读取已有页面列表和项目背景
|
|
474
521
|
*/
|
|
475
|
-
async optimizeProductDesignPrompt(userInput
|
|
476
|
-
|
|
477
|
-
if (pageList) {
|
|
478
|
-
prompt += `
|
|
479
|
-
|
|
480
|
-
# 页面列表参考
|
|
481
|
-
${pageList}
|
|
482
|
-
|
|
483
|
-
## 重要说明
|
|
484
|
-
- 请严格按照上述页面列表来编写需求文档的"页面列表"部分
|
|
485
|
-
- 在"逐页详细需求"部分,需要对每个页面进行详细的需求描述
|
|
486
|
-
- 确保页面列表和详细需求保持一致`;
|
|
487
|
-
}
|
|
488
|
-
return `${prompt}
|
|
522
|
+
async optimizeProductDesignPrompt(userInput) {
|
|
523
|
+
return `${this.productDesignPromptTemplate}
|
|
489
524
|
|
|
490
525
|
# 用户需求描述
|
|
491
|
-
${userInput}
|
|
526
|
+
${userInput}
|
|
527
|
+
|
|
528
|
+
# 完善任务
|
|
529
|
+
请先读取doc文件夹中的xxx-产品需求文档.md文件,获取其中已有的项目背景和页面列表,然后基于这些内容完善产品需求文档的详细内容。`;
|
|
492
530
|
}
|
|
493
531
|
/**
|
|
494
532
|
* 优化代码开发提示词
|
|
@@ -502,154 +540,45 @@ ${userInput}`;
|
|
|
502
540
|
}
|
|
503
541
|
/**
|
|
504
542
|
* 优化UI设计提示词
|
|
505
|
-
* 注意:此方法专门处理UI
|
|
543
|
+
* 注意:此方法专门处理UI设计相关需求,会参考产品需求文档和页面列表
|
|
544
|
+
* 📁 数据来源:从doc/xxx-产品需求文档.md文件中读取页面列表和需求详情
|
|
506
545
|
*/
|
|
507
|
-
async optimizeUIDesignPrompt(userInput
|
|
508
|
-
|
|
509
|
-
if (pageList) {
|
|
510
|
-
prompt += `
|
|
511
|
-
|
|
512
|
-
# 页面列表参考
|
|
513
|
-
${pageList}
|
|
514
|
-
|
|
515
|
-
## 重要说明
|
|
516
|
-
- 请参考上述页面列表来确定需要设计哪些页面
|
|
517
|
-
- 如果当前工程中已经存在某些页面,请排除这些页面,只设计尚未存在的页面
|
|
518
|
-
- 严格按照页面列表中的页面名称和功能描述进行设计`;
|
|
519
|
-
}
|
|
520
|
-
return `${prompt}
|
|
546
|
+
async optimizeUIDesignPrompt(userInput) {
|
|
547
|
+
return `${this.uiDesignPromptTemplate}
|
|
521
548
|
|
|
522
549
|
# 用户需求描述
|
|
523
|
-
${userInput}
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
* 先分析页面列表,然后修复页面列表,最后基于修复后的页面列表生成产品需求文档
|
|
528
|
-
* 🛑 停顿点:产品设计完成后必须停顿,等待用户确认后再进行UI设计
|
|
529
|
-
*/
|
|
530
|
-
async optimizePageListAndProductDesignPrompt(userInput) {
|
|
531
|
-
const pageListPrompt = await this.optimizePageListPrompt(userInput);
|
|
532
|
-
const fixPageListPrompt = await this.optimizeFixPageListPrompt(userInput, '{{PAGE_LIST_RESULT}}');
|
|
533
|
-
// 注意:产品设计将在修复后的页面列表基础上进行,这里返回基础模板
|
|
534
|
-
const productDesignPrompt = await this.optimizeProductDesignPrompt(userInput, '{{FIXED_PAGE_LIST_RESULT}}');
|
|
535
|
-
return {
|
|
536
|
-
pageListPrompt,
|
|
537
|
-
fixPageListPrompt,
|
|
538
|
-
productDesignPrompt
|
|
539
|
-
};
|
|
540
|
-
}
|
|
541
|
-
/**
|
|
542
|
-
* ⚠️不推荐:页面列表 + 页面修复 + 产品设计 + UI设计(缺少停顿检查点)
|
|
543
|
-
* 完整的设计流程:页面列表分析 → 页面列表修复 → 产品需求设计 → UI设计
|
|
544
|
-
* 注意:此方法缺少产品设计和UI设计之间的停顿检查点,不推荐使用
|
|
545
|
-
*/
|
|
546
|
-
async optimizePageListProductDesignAndUIPrompt(userInput) {
|
|
547
|
-
const pageListPrompt = await this.optimizePageListPrompt(userInput);
|
|
548
|
-
const fixPageListPrompt = await this.optimizeFixPageListPrompt(userInput, '{{PAGE_LIST_RESULT}}');
|
|
549
|
-
// 注意:产品设计和UI设计将在修复后的页面列表基础上进行
|
|
550
|
-
const productDesignPrompt = await this.optimizeProductDesignPrompt(userInput, '{{FIXED_PAGE_LIST_RESULT}}');
|
|
551
|
-
const uiDesignPrompt = await this.optimizeUIDesignPrompt(userInput, '{{FIXED_PAGE_LIST_RESULT}}');
|
|
552
|
-
return {
|
|
553
|
-
pageListPrompt,
|
|
554
|
-
fixPageListPrompt,
|
|
555
|
-
productDesignPrompt,
|
|
556
|
-
uiDesignPrompt
|
|
557
|
-
};
|
|
558
|
-
}
|
|
559
|
-
/**
|
|
560
|
-
* ⚠️不推荐:页面列表 + 页面修复 + 产品设计 + UI设计 + 代码编写(缺少停顿检查点)
|
|
561
|
-
* 完整的开发流程:页面列表分析 → 页面列表修复 → 产品需求设计 → UI设计 → 代码开发
|
|
562
|
-
* 注意:此方法缺少多个关键停顿检查点,不推荐使用
|
|
563
|
-
*/
|
|
564
|
-
async optimizeFullWorkflowWithProductDesignPrompt(userInput) {
|
|
565
|
-
const pageListPrompt = await this.optimizePageListPrompt(userInput);
|
|
566
|
-
const fixPageListPrompt = await this.optimizeFixPageListPrompt(userInput, '{{PAGE_LIST_RESULT}}');
|
|
567
|
-
// 注意:产品设计和UI设计将在修复后的页面列表基础上进行
|
|
568
|
-
const productDesignPrompt = await this.optimizeProductDesignPrompt(userInput, '{{FIXED_PAGE_LIST_RESULT}}');
|
|
569
|
-
const uiDesignPrompt = await this.optimizeUIDesignPrompt(userInput, '{{FIXED_PAGE_LIST_RESULT}}');
|
|
570
|
-
const codePrompt = await this.optimizeCodePrompt(userInput);
|
|
571
|
-
return {
|
|
572
|
-
pageListPrompt,
|
|
573
|
-
fixPageListPrompt,
|
|
574
|
-
productDesignPrompt,
|
|
575
|
-
uiDesignPrompt,
|
|
576
|
-
codePrompt
|
|
577
|
-
};
|
|
578
|
-
}
|
|
579
|
-
/**
|
|
580
|
-
* ⭐已有需求流程:UI设计 + 代码编写
|
|
581
|
-
* 先进行UI设计,然后进行代码开发
|
|
582
|
-
* 🛑 停顿点:UI设计完成后必须停顿,等待用户确认后再进行代码开发
|
|
583
|
-
*/
|
|
584
|
-
async optimizeUIDesignAndCodePrompt(userInput) {
|
|
585
|
-
const uiDesignPrompt = await this.optimizeUIDesignPrompt(userInput);
|
|
586
|
-
const codePrompt = await this.optimizeCodePrompt(userInput);
|
|
587
|
-
return {
|
|
588
|
-
uiDesignPrompt,
|
|
589
|
-
codePrompt
|
|
590
|
-
};
|
|
591
|
-
}
|
|
592
|
-
/**
|
|
593
|
-
* ⭐快速流程阶段一:页面列表 + 页面修复 + UI设计
|
|
594
|
-
* 先分析页面列表,然后修复页面列表,再基于修复后的页面列表进行UI设计
|
|
595
|
-
* 🛑 停顿点:UI设计完成后必须停顿,等待用户确认后再进行代码开发
|
|
596
|
-
*/
|
|
597
|
-
async optimizePageListAndUIDesignPrompt(userInput) {
|
|
598
|
-
const pageListPrompt = await this.optimizePageListPrompt(userInput);
|
|
599
|
-
const fixPageListPrompt = await this.optimizeFixPageListPrompt(userInput, '{{PAGE_LIST_RESULT}}');
|
|
600
|
-
// 注意:UI设计将在修复后的页面列表基础上进行
|
|
601
|
-
const uiDesignPrompt = await this.optimizeUIDesignPrompt(userInput, '{{FIXED_PAGE_LIST_RESULT}}');
|
|
602
|
-
return {
|
|
603
|
-
pageListPrompt,
|
|
604
|
-
fixPageListPrompt,
|
|
605
|
-
uiDesignPrompt
|
|
606
|
-
};
|
|
607
|
-
}
|
|
608
|
-
/**
|
|
609
|
-
* ⚠️不推荐:页面列表 + 页面修复 + UI设计 + 代码编写(缺少停顿检查点)
|
|
610
|
-
* 完整的工作流程:页面列表分析 → 页面列表修复 → UI设计 → 代码开发
|
|
611
|
-
* 注意:此方法缺少UI设计和代码开发之间的停顿检查点,不推荐使用
|
|
612
|
-
*/
|
|
613
|
-
async optimizeFullWorkflowPrompt(userInput) {
|
|
614
|
-
const pageListPrompt = await this.optimizePageListPrompt(userInput);
|
|
615
|
-
const fixPageListPrompt = await this.optimizeFixPageListPrompt(userInput, '{{PAGE_LIST_RESULT}}');
|
|
616
|
-
// 注意:UI设计将在修复后的页面列表基础上进行
|
|
617
|
-
const uiDesignPrompt = await this.optimizeUIDesignPrompt(userInput, '{{FIXED_PAGE_LIST_RESULT}}');
|
|
618
|
-
const codePrompt = await this.optimizeCodePrompt(userInput);
|
|
619
|
-
return {
|
|
620
|
-
pageListPrompt,
|
|
621
|
-
fixPageListPrompt,
|
|
622
|
-
uiDesignPrompt,
|
|
623
|
-
codePrompt
|
|
624
|
-
};
|
|
550
|
+
${userInput}
|
|
551
|
+
|
|
552
|
+
# 设计任务
|
|
553
|
+
请先读取doc文件夹中的xxx-产品需求文档.md文件,获取其中的页面列表和详细需求,然后基于这些内容进行UI设计。严格按照产品需求文档中的页面定义、UI组件清单、交互逻辑进行设计。`;
|
|
625
554
|
}
|
|
626
555
|
/**
|
|
627
556
|
* 基于页面列表结果生成产品需求设计提示词
|
|
628
557
|
* 此方法用于在获得页面列表结果后,生成包含页面列表信息的产品设计提示词
|
|
629
558
|
*/
|
|
630
559
|
async generateProductDesignPromptWithPageList(userInput, pageListResult) {
|
|
631
|
-
return await this.optimizeProductDesignPrompt(userInput
|
|
560
|
+
return await this.optimizeProductDesignPrompt(userInput);
|
|
632
561
|
}
|
|
633
562
|
/**
|
|
634
563
|
* 基于页面列表结果生成UI设计提示词
|
|
635
564
|
* 此方法用于在获得页面列表结果后,生成包含页面列表信息的UI设计提示词
|
|
636
565
|
*/
|
|
637
566
|
async generateUIDesignPromptWithPageList(userInput, pageListResult) {
|
|
638
|
-
return await this.optimizeUIDesignPrompt(userInput
|
|
567
|
+
return await this.optimizeUIDesignPrompt(userInput);
|
|
639
568
|
}
|
|
640
569
|
/**
|
|
641
570
|
* 基于修复后的页面列表结果生成产品需求设计提示词
|
|
642
571
|
* 此方法用于在获得修复后的页面列表结果后,生成包含完整页面列表信息的产品设计提示词
|
|
643
572
|
*/
|
|
644
573
|
async generateProductDesignPromptWithFixedPageList(userInput, fixedPageListResult) {
|
|
645
|
-
return await this.optimizeProductDesignPrompt(userInput
|
|
574
|
+
return await this.optimizeProductDesignPrompt(userInput);
|
|
646
575
|
}
|
|
647
576
|
/**
|
|
648
577
|
* 基于修复后的页面列表结果生成UI设计提示词
|
|
649
578
|
* 此方法用于在获得修复后的页面列表结果后,生成包含完整页面列表信息的UI设计提示词
|
|
650
579
|
*/
|
|
651
580
|
async generateUIDesignPromptWithFixedPageList(userInput, fixedPageListResult) {
|
|
652
|
-
return await this.optimizeUIDesignPrompt(userInput
|
|
581
|
+
return await this.optimizeUIDesignPrompt(userInput);
|
|
653
582
|
}
|
|
654
583
|
}
|
|
655
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvbXB0LW9wdGltaXplci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9wcm9tcHQtb3B0aW1pemVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBcUNHO0FBQ0gsTUFBTSxPQUFPLGVBQWU7SUFDVCxzQkFBc0IsR0FBRzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7eUNBa0RILENBQUM7SUFFdkIseUJBQXlCLEdBQUcsMkxBQTJMLENBQUM7SUFFeE4sMkJBQTJCLEdBQUc7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7bUpBOENrRyxDQUFDO0lBRWpJLGtCQUFrQixHQUFHOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0VBaUd0QyxDQUFDO0lBRWdCLHNCQUFzQixHQUFHOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Q0ErTTNDLENBQUM7SUFFQTs7O09BR0c7SUFDSCxLQUFLLENBQUMsc0JBQXNCLENBQUMsU0FBaUI7UUFDNUMsT0FBTyxHQUFHLElBQUksQ0FBQyxzQkFBc0I7OztFQUd2QyxTQUFTLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRDs7O09BR0c7SUFDSCxLQUFLLENBQUMseUJBQXlCLENBQUMsU0FBaUIsRUFBRSxnQkFB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QUFNLGNBQWMsR0FBRyxNQUFNLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxTQUFTLEVBQUUsNEJBQTRCLENBQUMsQ0FBQztRQUNsRyxNQUFNLFVBQVUsR0FBRyxNQUFNLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUU1RCxPQUFPO1lBQ0wsY0FBYztZQUNkLGlCQUFpQjtZQUNqQixjQUFjO1lBQ2QsVUFBVTtTQUNYLENBQUM7SUFDSixDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsS0FBSyxDQUFDLHVDQUF1QyxDQUFDLFNBQWlCLEVBQUUsY0FBc0I7UUFDckYsT0FBTyxNQUFNLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxTQUFTLEVBQUUsY0FBYyxDQUFDLENBQUM7SUFDM0UsQ0FBQztJQUVEOzs7T0FHRztJQUNILEtBQUssQ0FBQyxrQ0FBa0MsQ0FBQyxTQUFpQixFQUFFLGNBQXNCO1FBQ2hGLE9BQU8sTUFBTSxJQUFJLENBQUMsc0JBQXNCLENBQUMsU0FBUyxFQUFFLGNBQWMsQ0FBQyxDQUFDO0lBQ3RFLENBQUM7SUFFRDs7O09BR0c7SUFDSCxLQUFLLENBQUMsNENBQTRDLENBQUMsU0FBaUIsRUFBRSxtQkFBMkI7UUFDL0YsT0FBTyxNQUFNLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxTQUFTLEVBQUUsbUJBQW1CLENBQUMsQ0FBQztJQUNoRixDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsS0FBSyxDQUFDLHVDQUF1QyxDQUFDLFNBQWlCLEVBQUUsbUJBQTJCO1FBQzFGLE9BQU8sTUFBTSxJQUFJLENBQUMsc0JBQXNCLENBQUMsU0FBUyxFQUFFLG1CQUFtQixDQUFDLENBQUM7SUFDM0UsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBCeXRlRnVuIEFJIE1DUCDmj5DnpLror43kvJjljJblmahcbiAqIFxuICog6YeN6KaB6K+05piO77yaXG4gKiAtIOacrOexu+aPkOS+m+S6lOS4queLrOeri+eahOS8mOWMluW3peWFt+WSjOWkjeWQiOiwg+eUqOmTvuWKn+iDvVxuICogLSDmr4/kuKrljZXkuIDlt6XlhbflpITnkIbkuI3lkIznsbvlnovnmoTpnIDmsYLvvIzlpI3lkIjlt6XlhbfmlK/mjIHlpJrkuKrlt6XlhbfnmoTnu4TlkIjosIPnlKhcbiAqIC0g6aG16Z2i5YiX6KGo5L+u5aSN5Yqf6IO956Gu5L+d6aG16Z2i5a6M5pW05oCn77yM5L+u5aSN5ZCO55qE57uT5p6c55So5LqO5ZCO57ut55qE5Lqn5ZOB6K6+6K6h5ZKMVUnorr7orqFcbiAqIFxuICog5Y2V5LiA5bel5YW35L2/55So5pa55byP77yaXG4gKiAxLiDpobXpnaLliJfooajliIbmnpDpnIDmsYIg4oaSIOiwg+eUqCBvcHRpbWl6ZVBhZ2VMaXN0UHJvbXB0KClcbiAqIDIuIOmhtemdouWIl+ihqOS/ruWkjemcgOaxgiDihpIg6LCD55SoIG9wdGltaXplRml4UGFnZUxpc3RQcm9tcHQoKVxuICogMy4g5Lqn5ZOB6ZyA5rGC6K6+6K6h6ZyA5rGCIOKGkiDosIPnlKggb3B0aW1pemVQcm9kdWN0RGVzaWduUHJvbXB0KClcbiAqIDQuIFVJ6K6+6K6h6ZyA5rGCIOKGkiDosIPnlKggb3B0aW1pemVVSURlc2lnblByb21wdCgpICBcbiAqIDUuIOS7o+eggeW8gOWPkemcgOaxgiDihpIg6LCD55SoIG9wdGltaXplQ29kZVByb21wdCgpXG4gKiBcbiAqIOaOqOiNkOeahOWIhumYtuauteWkjeWQiOW3peWFt++8iOWMheWQq+WBnOmhv+ajgOafpeeCue+8ie+8mlxuICogMS4g6aG16Z2i5YiX6KGoICsg6aG16Z2i5L+u5aSNICsg5Lqn5ZOB6K6+6K6hIOKGkiDosIPnlKggb3B0aW1pemVQYWdlTGlzdEFuZFByb2R1Y3REZXNpZ25Qcm9tcHQoKSDirZDmjqjojZDpmLbmrrXkuIBcbiAqIDIuIFVJ6K6+6K6hIOKGkiDosIPnlKggb3B0aW1pemVVSURlc2lnblByb21wdCgpIOKtkOaOqOiNkOmYtuauteS6jCAgXG4gKiAzLiDku6PnoIHnvJblhpkg4oaSIOiwg+eUqCBvcHRpbWl6ZUNvZGVQcm9tcHQoKSDirZDmjqjojZDpmLbmrrXkuIlcbiAqIDQuIOmhtemdouWIl+ihqCArIOmhtemdouS/ruWkjSArIFVJ6K6+6K6hIOKGkiDosIPnlKggb3B0aW1pemVQYWdlTGlzdEFuZFVJRGVzaWduUHJvbXB0KCkg4q2Q5b+r6YCf5rWB56iL6Zi25q615LiAXG4gKiA1LiBVSeiuvuiuoSArIOS7o+eggee8luWGmSDihpIg6LCD55SoIG9wdGltaXplVUlEZXNpZ25BbmRDb2RlUHJvbXB0KCkg4q2Q5bey5pyJ6ZyA5rGC5rWB56iLXG4gKiBcbiAqIOS4jeaOqOiNkOeahOmVv+a1geeoi++8iOe8uuWwkeWBnOmhv+ajgOafpeeCue+8jOS/neeVmeeUqOS6juWFvOWuueaAp++8ie+8mlxuICogNi4g6aG16Z2i5YiX6KGoICsg6aG16Z2i5L+u5aSNICsg5Lqn5ZOB6K6+6K6hICsgVUnorr7orqEg4oaSIG9wdGltaXplUGFnZUxpc3RQcm9kdWN0RGVzaWduQW5kVUlQcm9tcHQoKSDimqDvuI/kuI3mjqjojZBcbiAqIDcuIOmhtemdouWIl+ihqCArIOmhtemdouS/ruWkjSArIOS6p+WTgeiuvuiuoSArIFVJ6K6+6K6hICsg5Luj56CB57yW5YaZIOKGkiBvcHRpbWl6ZUZ1bGxXb3JrZmxvd1dpdGhQcm9kdWN0RGVzaWduUHJvbXB0KCkg4pqg77iP5LiN5o6o6I2QXG4gKiA4LiDpobXpnaLliJfooaggKyDpobXpnaLkv67lpI0gKyBVSeiuvuiuoSArIOS7o+eggee8luWGmSDihpIgb3B0aW1pemVGdWxsV29ya2Zsb3dQcm9tcHQoKSDimqDvuI/kuI3mjqjojZBcbiAqIFxuICog5o6o6I2Q5bel5L2c5rWB56iL77yI5YiG6Zi25q615omn6KGM77yJ77yaXG4gKiAtIOagh+WHhuWujOaVtOW8gOWPke+8mumYtuauteS4gCjpobXpnaLliJfooagr5L+u5aSNK+S6p+WTgeiuvuiuoSkg4oaSIOWBnOmhv+ajgOafpSDihpIg6Zi25q615LqMKFVJ6K6+6K6hKSDihpIg5YGc6aG/5qOA5p+lIOKGkiDpmLbmrrXkuIko5Luj56CB5byA5Y+RKVxuICogLSDlv6vpgJ9VSeiuvuiuoe+8mumYtuauteS4gCjpobXpnaLliJfooagr5L+u5aSNK1VJ6K6+6K6hKSDihpIg5YGc6aG/5qOA5p+lIOKGkiDpmLbmrrXkuowo5Luj56CB5byA5Y+RKVxuICogLSDlt7LmnInpnIDmsYLlvIDlj5HvvJrpmLbmrrXkuIAoVUnorr7orqEpIOKGkiDlgZzpob/mo4Dmn6Ug4oaSIOmYtuauteS6jCjku6PnoIHlvIDlj5EpXG4gKiBcbiAqIOaVsOaNruS8oOmAkumAu+i+ke+8mlxuICogLSB7e1BBR0VfTElTVF9SRVNVTFR9fSDku6Pooaggb3B0aW1pemVfcGFnZUxpc3RfcHJvbXB0IOeahOe7k+aenFxuICogLSB7e0ZJWEVEX1BBR0VfTElTVF9SRVNVTFR9fSDku6Pooaggb3B0aW1pemVfZml4X3BhZ2VMaXN0X3Byb21wdCDnmoTkv67lpI3lkI7nu5PmnpxcbiAqIC0g5Lqn5ZOB6K6+6K6h5ZKMVUnorr7orqHln7rkuo7kv67lpI3lkI7nmoTpobXpnaLliJfooajov5vooYzvvIznoa7kv53pobXpnaLlrozmlbTmgKdcbiAqIC0g4pqg77iPIOmHjeimge+8muS6p+WTgeiuvuiuoeWujOaIkOWQjuW/hemhu+WBnOmhv+ajgOafpe+8jFVJ6K6+6K6h5a6M5oiQ5ZCO5b+F6aG75YGc6aG/5qOA5p+lXG4gKi9cbmV4cG9ydCBjbGFzcyBQcm9tcHRPcHRpbWl6ZXIge1xuICBwcml2YXRlIHJlYWRvbmx5IHBhZ2VMaXN0UHJvbXB0VGVtcGxhdGUgPSBgIyDkvaDmmK9BUFDkuqflk4Hnu4/nkIbkuJPlrrbvvIznjrDlnKjpnIDopoHkvaDmoLnmja7nlKjmiLfovpPlhaXnmoTpnIDmsYLmj4/ov7DvvIzpgbXlvqpcIuWIhuaekOinhOWImVwi5YiG5p6Q5Ye65omA6ZyA6KaB55qE5a6M5pW055qE6aG16Z2i5YiX6KGo44CCXG5cbiMjIOWIhuaekOinhOWImVxu5Lul5LiL5pa55rOV6K665YiG5Li65aSa5Liq5q2l6aqk77yM6YeN54K556qB5Ye6XCLpgJDpobXpnaLlhYPntKDihpLlj6/ngrnihpLot7PovaxcIuWIhuaekOaAnei3r+OAglxuXG4jIyDph43ngrnms6jmhI9cbi0g5byA5aeL6K6+6K6h5LmL5YmN6KaB5YWI5p+l55yL5b2T5YmN5bel56iL55uu5b2V5LiL55qEZG9jL3VpRGVzaWduL3VpRGVzaWduU3RhdGUubWTmlofku7bvvIjlpoLmnpzlrZjlnKjvvInvvIzkuobop6PkuYvliY3nmoTorr7orqHov5vluqblkoznirblhrXvvIzku6Xkvr/mm7Tlpb3lnLDnkIbop6PkuIrkuIvmloflkoznu6fnu63orr7orqHlt6XkvZzjgIJcbi0g5aaC5p6c5Y+R546wZG9jL3VpRGVzaWduU3RhdGUubWTmlofku7bkuI3lrZjlnKjvvIzliJnor7TmmI7kuYvliY3msqHmnInorr7orqHov4fvvIzpnIDopoHku47pm7blvIDlp4vorr7orqHjgIJcbi0g5aaC5p6c5Y+R546wZG9jL3VpRGVzaWduU3RhdGUubWTmlofku7blrZjlnKjvvIzliJnor7TmmI7kuYvliY3lt7Lnu4/orr7orqHov4fvvIzpnIDopoHnnIvkuIsg5piv5ZCm5ZCM5LiA5LiqQVBQ5oiW6ICF572R56uZ77yM5aaC5p6c5piv5ZCM5LiA5Liq6YKj5bCx5LiN6ZyA6KaB6YeN5paw5YiG5p6QcGFnZUxpc3TvvIzogIzkuJTmoLnmja7kuYvliY3nmoTorr7orqHov5vluqblkoznirblhrXvvIznu6fnu63orr7orqHlt6XkvZzvvIzlpoLmnpzkuI3mmK/lkIzkuIDkuKpBUFDmiJbogIXnvZHnq5nvvIzliJnpnIDopoHliKDpmaRkb2MvdWlEZXNpZ25TdGF0ZS5tZOaWh+S7tu+8jOeEtuWQjuS7jumbtuW8gOWni+iuvuiuoeOAglxuXG4jIyDkuIDjgIHmqKHlnZfmi4bop6PkuI7liJ3mraXliJflh7rpobXpnaLliJfooahcbi0g5ouG6Kej5qC45b+D5Lia5Yqh5qih5Z2XLCDovpPlh7rmiYDmnInlip/og73mqKHlnZfvvIzkuI3orrrmmK/lkKbmoLjlv4PvvIzkuI3orrrlpKflsI/vvIzpg73opoHliJflh7rmnaXjgIJcbi0g6YGN5Y6G5LiK5LiA5q2l5YiG5p6Q5YiX5Ye65p2l55qE5omA5pyJ5Lia5Yqh5qih5Z2X77yM5a+55q+P5LiA5Liq5Lia5Yqh5qih5Z2X6L+b6KGM57uG5YiG77yM5YiX5Ye66K+l5Lia5Yqh5qih5Z2X55qE5omA5pyJ6aG16Z2i77yM5omA5pyJ6aG16Z2i5LiN6K665piv5ZCm5qC45b+D44CB5LiN6K665aSn5bCP44CB5LiN6K665piv5ZCm5a2Q6aG56aG16Z2i5YWo6YOo5YiX5Ye65p2l44CCXG5cbiMjIOS6jOOAgeavj+S4qumhtemdoueahFwi5YWD57Sg4oaS5Y+v54K54oaS6Lez6L2sXCLliIbmnpDopoHngrlcblxuPiAqKuaguOW/g+aAnei3r++8mioqICBcbj4g6YGN5Y6G5LiK5LiA5q2l5YiG5p6Q5Ye65p2l55qE5q+P5Liq6aG16Z2i77yM5YOP5omr6Zu35LiA5qC3XCLngrnkuq5cIuWug+S4iumdouaJgOacieWPr+S6pOS6kuWFg+e0oO+8jOayv+edgFwi5YWD57Sg5Y+v54K54oaS6Lez6L2s6aG16Z2i55uu5qCHXCLkuIDot6/lu7bkvLjvvIzpgJDlsYLlj5HnjrDlubbooaXlhYXmm7TlpJrpobXpnaLmiJblvLnnqpfjgIJcblxuMS4gKiror4bliKvpobXpnaLlhYPntKAqKiAgXG4gICAtICoq6aG16Z2i5qGG5p62KirvvJrmtY/op4jpobXpnaLmlbTkvZPluIPlsYDvvIjlpoLpobbpg6jlr7zoiKrjgIFUYWLjgIHliJfooajjgIHooajljZXjgIHlupXpg6jmjInpkq7nrYnvvInjgIIgIFxuICAgLSAqKuWIl+WHuuaJgOacieaOp+S7tioq77yaICBcbiAgICAgLSDovpPlhaXmoYbjgIHmjInpkq7jgIHlm77niYfjgIHliJfooajpobnjgIHpk77mjqXmloflrZfjgIFUYWIg6aG544CB5LiL5ouJ566t5aS044CB5oKs5rWu5oyJ6ZKu44CB5Zu+5qCH44CB5aSN6YCJL+WNlemAieaMiemSruetieOAglxuXG4yLiAqKuagh+iusOWPr+eCueWHu+WFg+e0oCoqICBcbiAgIC0g5Zyo5LiK6L+w5o6n5Lu25Lit77yM5Yik5pat5ZOq5Lqb5pivXCLlj6/ngrnlh7tcIu+8miAgXG4gICAgIC0gKirmmL7mgKfmjInpkq4qKu+8iOaPkOS6pC/noa7orqQv5Y+W5raIL+S4i+S4gOatpe+8iSAgXG4gICAgIC0gKirlj6/lsZXlvIDmoIfpopgv5Y2h54mHKirvvIjngrnlh7vlsZXlvIDmm7TlpJrvvIkgIFxuICAgICAtICoq5bim6ZO+5o6l55qE5paH5a2XKirvvIjljY/orq7jgIHpmpDnp4HjgIHms6jlhozjgIHlv5jorrDlr4bnoIHnrYnvvIkgIFxuICAgICAtICoq5YiX6KGo6aG5L+e9keagvOWNoeeJhyoqICBcbiAgICAgLSAqKuWbvuWDj+e8qeeVpeWbvuOAgei9ruaSreWbvuafkOS6m+WPr+eCueWHu+WMuuWfnyoqICBcbiAgICAgLSAqKuWvvOiIqui/lOWbni/lhbPpl60v6I+c5Y2V5Zu+5qCHKiogIFxuXG4zLiAqKumAkOS4gOWIl+WHulwi54K55Ye74oaS6Lez6L2s6aG16Z2i55uu5qCHXCIqKiAgXG4gICAtIOWvueavj+S4quWPr+eCueWHu+WFg+e0oO+8jOaYjuehrueCueWHu+WQjui3s+WIsOWTquS4gOS4quebruagh+mhtemdou+8jOmCo+S5iOivpeebruagh+mhtemdouS5n+imgeWIl+WHuuWIsOmhtemdouWIl+ihqOS4rVxuXG4gICAtICoq56S65L6LKirvvIjku6VcIuWVhuWTgeivpuaDhemhtVwi5Li65L6L77yJ77yaICBcbiAgICAg6aG16Z2i77ya6K6+572u6aG1ICBcbiAgICAg5YWD57Sg77yaICBcbiAgICAgICAxLiDlhbPkuo4g4oaQIOeCueWHuyDihpIg6Lez5Yiw5YWz5LqO6aG1IFxuICAgICAgIDIuIOWuouacjeaMiemSriDihpAg54K55Ye7IOKGkiDot7PliLDlrqLmnI3lr7nor53pobVcbiAgICAgICAuLi4gXG5cbiMjIOS4ieOAgemXreeOr+ajgOmqjOatpemqpFxuXG4xLiAqKuagoemqjOS4muWKoemXreeOryoqXG4gICAtIOavlOWmguS4gOS4quS6i+eJqeacieWJjeWunuaWveWQjueahOmXreeOr+mhtemdou+8jOavlOWmguaQnOe0oumhte+8jOmCo+S5iOaQnOe0ouS5i+WQjuiCr+WumuacieS4gOS4quaQnOe0oue7k+aenOmhtei/m+ihjOmXreeOr+OAglxuXG4yLiAqKui+k+WHuuacgOe7iOa4heWNlSoqICBcbiAgIC0g6L6T5Ye66aG16Z2i5oC75pWw77yM5Lul5Y+K5oyJ54Wn5qih5Z2X5bGC57qn77yM5bCG5omA5pyJXCLpobXpnaLlkI3np7BcIuS7peWIhuWxguWIl+ihqOW9ouW8j+WxleekuuOAgiAgXG4gICAtIOehruS/neavj+S4qumhtemdoumDveW3slwi54K55LquXCLmiYDmnInkuqTkupLlhYPntKDngrnlh7vot7PovaznmoTnm67moIfpobXpnaLpg73lnKjmuIXljZXkuK3lh7rnjrDjgIJgO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgZml4UGFnZUxpc3RQcm9tcHRUZW1wbGF0ZSA9IGDkvaDmmK9BUFDkuqflk4Hnu4/nkIbkuJPlrrbvvIxvcHRpbWl6ZV9wYWdlTGlzdF9wcm9tcHTlvpflh7rnmoTpobXpnaLliJfooajnu5PmnpzlubbkuI3pvZDlhajvvIzkvaDlv4Xpobvlho3mrKHov5vooYzliIbmnpDvvIzliIbmnpDlh7rmm7TlpJrmiYDpnIDpobXpnaLvvIzlsIblt7Lnu4/lvpflh7rnmoTpobXpnaLliJfooajlpI3nm5jmo4Dmn6XkuIDmrKHmmK/lkKbmnInnvLrmvI/vvIzlv4XpobvmmK/kuIDkuKrpobXpnaLlrozmlbTpvZDlhajnmoRBUFDvvIzkuL7kuKrkvovlrZDvvJrorr7nva7pobXph4zpnaLmnInlvojlpJrkuKrlrZDorr7nva7pobnvvIzpgqPkuYjlrZDorr7nva7pobnmnInpnIDopoHmlrDlvIDpobXpnaLnmoTkuZ/lv4XpobvliJflh7rmnaXkuIDkuKrljZXni6znmoTpobXpnaLjgILlhbbku5bpobXpnaLkuZ/mmK/lpoLmraTvvIzkuZ/opoHov5vooYzliIbmnpDmmK/lkKbmnInkuI3pvZDlhajnmoTpobXpnaLot6/lvoTmvI/mjonkuobjgIJgO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgcHJvZHVjdERlc2lnblByb21wdFRlbXBsYXRlID0gYCMg5L2g5piv5Lqn5ZOB57uP55CG5LiT5a6277yM6ZyA6KaB5YiG5p6Q55So5oi36ZyA5rGC5o+P6L+w77yM54S25ZCO5qC55o2uJ+mAmueUqOmcgOaxguaWh+aho+aooeadvyfvvIzovpPlh7rkuIDku73moIflh4bnmoQqKuS6p+WTgemcgOaxguaWh+ahoyoq77yM54S25ZCO5bCG55Sf5oiQ55qE6ZyA5rGC5paH5qGj5YaZ5YWl5Yiw5b2T5YmN5bel56iL55uu5b2V5LiL6Z2i55qEZG9j5paH5Lu25aS55LiL6Z2i55qEWFhYLeS6p+WTgemcgOaxguaWh+ahoy5tZO+8jOWFtuS4rVhYWOaYr+agueaNrueUqOaIt+mcgOaxguaPj+i/sOadpeWRveWQjeOAglxuXG4qKumHjeimgeivtOaYjioq77yaXG4tIOi/meaYryoq57qv5Lqn5ZOB6ZyA5rGC5paH5qGjKirvvIzkuJPms6jkuo7kuqflk4Hlip/og73jgIHkuJrliqHpgLvovpHjgIHnlKjmiLfkvZPpqozpnIDmsYJcbi0gKirkuKXnpoHljIXlkKvku7vkvZXmioDmnK/lrp7njrDlhoXlrrkqKu+8muS4jeW+l+a2ieWPilVJ6K6+6K6h6KeE6IyD44CB5Lqk5LqS6KeE6IyD44CB5byA5Y+R6KeE6IyD44CB5oqA5pyv5p625p6E562JXG4tICoq5Lil56aB5YyF5ZCr5oqA5pyv6YCJ5Z6L5YaF5a65KirvvJrkuI3lvpfmj5Dlj4rliY3nq6/moYbmnrbjgIHlkI7nq6/mioDmnK/jgIHmlbDmja7lupPorr7orqHnrYlcbi0gKirkuKXnpoHnlJ/miJDmioDmnK/op4TojIPnq6DoioIqKu+8muaWh+aho+e7k+aehOS4peagvOaMieeFp+S4i+mdoueahOaooeadv+aJp+ihjO+8jOS4jeW+l+iHquihjOa3u+WKoOaKgOacr+ebuOWFs+eroOiKglxuXG4jIyDpgJrnlKjpnIDmsYLmlofmoaPmqKHmnb9cblxuLS0tXG5cbjEuIOmhueebruiDjOaZr+S4juWumuS9jVxuICAgKiDor7TmmI4gQVBQIOmdouWQkeeahOebruagh+eUqOaIt+WSjOaguOW/g+S7t+WAvOOAgeS4muWKoeWcuuaZr+OAglxuXG4yLiDpobXpnaLliJfooajvvIjmjInlsZXnpLrpobrluo/vvIlcbuS4jemcgOimgeiHquW3seWIhuaekOWKn+iDveaooeWdl+WSjOmhtemdouWIl+ihqO+8jOS9oOebtOaOpeagueaNruesrOS6jOatpeWIl+WHuuaJgOmcgOmhtemdouWIl+ihqFxcYG9wdGltaXplX2ZpeF9wYWdlTGlzdF9wcm9tcHRcXGDlvpflh7rnmoTmiYDmnInmqKHlnZflkozpobXpnaLliJfooajvvIzlhYjliJflh7rmiYDmnInpobXpnaLlkI3np7DjgIHmiYDlsZ7mqKHlnZfjgIHnroDopoHor7TmmI7kuI7ot7PovazlhaXlj6PvvIzmjInku6XkuIvnpLrkvovmoLzlvI/lhpnlh7rmnaXjgIJcbuOAguekuuS+i+agvOW8j++8mlxuXG5cXGBcXGBcXGBcbnwg5bqP5Y+3IHwg6aG16Z2i5ZCN56ewICAgICB8IOaooeWdlyAgIHwg566A6KaB6K+05piOICAgICAgICAgICAgICAgICAgICAgICB8IOi3s+i9rOWFpeWPoyAgICAgICAgICAgICAgfFxufCAtLS0tIHwgLS0tLS0tLS0tLS0tIHwgLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHxcbnwgMSAgICB8IOmXquWxj+mhtSAgICAgICB8IOWFrOWFsSAgIHwg5ZCv5Yqo5pe25bGV56S6IExvZ28v5Yqo55S777yM5oyB57ut6Iul5bmy56eSIHwgQVBQIOWQr+WKqCAgICAgICAgICAgICAgIHxcbnwgMiAgICB8IOaWsOaJi+W8leWvvOmhtSAgIHwg5YWs5YWxICAgfCDpppbmrKHlronoo4XlvJXlr7znlKjmiLfkuobop6PmoLjlv4Plip/og70gICAgIHwg6Zeq5bGP6aG177yI6aaW5qyh5omT5byA77yJICAgICB8XG58IDMgICAgfCDnmbvlvZXpobUgIHwg55So5oi3ICAgfCDnlKjmiLfovpPlhaXotKblj7fkv6Hmga/lrozmiJDorqTor4EgICAgICAgICB8IOmmluasoeWQr+WKqOWIpOaWrS/mi6bmiKrot7PovawgICB8XG58IDQgICAgfCDpppbpobUgICAgICAgICB8IOmmlumhtSAgIHwg5bGV56S6IEJhbm5lcuOAgeW/q+aNt+WFpeWPo+OAgeaOqOiNkOWIl+ihqCAgIHwg55m75b2VL+aWsOaJi+W8leWvvOWQjuaIlua4uOWuouaooeW8jyB8XG58IOKApiAgICB8IOKApiAgICAgICAgICAgIHwg4oCmICAgICAgfCDigKYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IOKApiAgICAgICAgICAgICAgICAgICAgIHxcblxcYFxcYFxcYFxuXG4zLiDpgJDpobXor6bnu4bpnIDmsYJcbiAgICAzLjEg6aG16Z2i5ZCN56ewXG4gICAgMy4yIOmhtemdoueugOimgeivtOaYjlxuICAgIDMuMyDpobXpnaLor6bnu4bpnIDmsYLvvIjljIXmi6zpobXpnaLlhoXmiYDmnInlhYPntKDnmoTor6bnu4bpnIDmsYLvvIlcbiAgICAzLjQg6aG16Z2i6Lez6L2s5YWl5Y+jXG4gICAgMy41IOmhtemdouaVsOaNrua1ge+8iOWMheaLrOmhtemdouWGheaJgOacieWFg+e0oOeahOaVsOaNrua1ge+8iVxuICAgIDMuNiDpobXpnaLkuqTkupLpgLvovpHvvIjljIXmi6zpobXpnaLlhoXmiYDmnInlhYPntKDnmoTkuqTkupLpgLvovpHvvIlcbiAgICAzLjcg6aG16Z2i5Lia5Yqh6YC76L6R77yI5YyF5ous6aG16Z2i5YaF5omA5pyJ5YWD57Sg55qE5Lia5Yqh6YC76L6R77yJXG5cbj4gKirms6jmhI8qKu+8mui3s+i9rOWFpeWPo+mcgOWIl+WHuuaJgOacieWPr+iDveinpuWPkeivpemhtemdoueahOadpea6kOOAglxuXG4tLS1cblxuIyMjIOmcgOaxguaWh+aho+WGmeWFpVxuLSDnlJ/miJDnmoTpnIDmsYLmlofmoaPlhpnlhaXliLDlvZPliY3lt6XnqIvnm67lvZXkuIvpnaLnmoRkb2Pmlofku7blpLnkuIvpnaLnmoRYWFgt5Lqn5ZOB6ZyA5rGC5paH5qGjLm1k77yM5YW25LitWFhY5piv5qC55o2u55So5oi36ZyA5rGC5o+P6L+w5p2l5ZG95ZCN44CCXG5cbiMjIyDlrozmiJDnoa7orqRcbi0g5b2T5Lqn5ZOB6ZyA5rGC5paH5qGj5YaZ5YWl5a6M5oiQ5ZCO77yM5b+F6aG75ZGK55+l55So5oi377yaXCLinIUgKirkuqflk4HpnIDmsYLmlofmoaPlt7LlrozmiJDvvIEqKuivt+aCqOWFiOafpeeciyBkb2MvWFhYLeS6p+WTgemcgOaxguaWh+ahoy5tZCDmlofku7bvvIzku5Tnu4bpmIXor7vpnIDmsYLmlofmoaPlhoXlrrnvvIznoa7orqTmmK/lkKbmnInpnIDopoHkv67mlLnnmoTlnLDmlrnjgILlpoLmnpzmnInkv67mlLnmhI/op4HvvIzor7flkYror4nmiJHlhbfkvZPnmoTkv67mlLnopoHmsYLjgILnoa7orqTpnIDmsYLmlofmoaPml6Dpl67popjmiJbkv67mlLnlrozmr5XlkI7vvIzor7flkYror4nmiJHlj6/ku6Xov5vooYzkuIvkuIDmraXnmoRVSeiuvuiuoeW3peS9nOOAglwiYDtcblxuICBwcml2YXRlIHJlYWRvbmx5IGNvZGVQcm9tcHRUZW1wbGF0ZSA9IGAjIOS9oOaYr3R5cGVzY3JpcHTku6PnoIHkuJPlrrbvvIzmoLnmja4n6KeE5YiZJ+OAgSfkvovlrZAn5ZKM55So5oi36L6T5YWl55qE6ZyA5rGC5o+P6L+w77yM5a6M5oiQ5Luj56CB5byA5Y+RXG5cbiMjIOmHjeimgeivtOaYjlxuLSDlnKjlvIDlp4vku6PnoIHlvIDlj5HkuYvliY3vvIzlv4XpobvlhYjmn6XnnIvlvZPliY3lt6XnqIvnm67lvZXkuIvnmoRkb2Pmlofku7blpLnkuK3nmoTkuqflk4HpnIDmsYLmlofmoaPvvIjlpoJYWFgt5Lqn5ZOB6ZyA5rGC5paH5qGjLm1k77yJ77yM5Lil5qC85oyJ54Wn6ZyA5rGC5paH5qGj5Lit55qE6aG16Z2i5a6a5LmJ44CB5Lqk5LqS6YC76L6R44CB5Lia5Yqh6YC76L6R6L+b6KGM5Luj56CB5byA5Y+R44CCXG4tIOWmguaenOWPkeeOsOmcgOaxguaWh+aho+S4jeWtmOWcqO+8jOWImeaMieeFp+eUqOaIt+mcgOaxguaPj+i/sOi/m+ihjOW8gOWPkeOAguWmguaenOmcgOaxguaWh+aho+WtmOWcqO+8jOWImeS4peagvOaMieeFp+mcgOaxguaWh+aho+eahOinhOiMg+i/m+ihjOW8gOWPke+8jOS4jeW+l+WBj+emu+mcgOaxguaWh+aho+eahOWumuS5ieOAglxuXG4jIyDpobnnm67moYbmnrbmj4/ov7Bcbi0g5pW05Liq6aG555uu5qGG5p625YiG5Li656iL5bqP5YWl5Y+jQXBwbGljYXRpb24udHPjgIHnqIvluo/lhajlsYDpnZnmgIHlj5jph49TdGF0aWNEYXRhLnRz44CB5omA5pyJ6aG16Z2icGFnZeaWh+S7tuWkueOAgVVJ57uE5Lu25bqTdWlsaWLmlofku7blpLnjgIHlkI7nq6/mjqXlj6NBbGxCYWNrRW5kQXBpLnRz44CB5ZSv5LiA55qE6IO95Yqb5pa55rOVQWxsRnVuY3Rpb24udHPjgIJcbi0g6L+Z5piv5LiA5Liq5paw5Z6L5byA5Y+R5qGG5p6277yMVUnnlYzpnaLlt7Lnu4/kvb/nlKjlj6/op4bljJblt6XlhbfnlJ/miJDkuobmiYDmnInnmoTpnZnmgIHnmoRVSemhtemdouS6hu+8jOeEtuWQjuS9oOmcgOimgeS9v+eUqHRz5Luj56CB5byA5Y+R5Lia5Yqh6YC76L6R5LiOVUnkuqTkupLpgLvovpHvvIzlm6DmraTnvJblhpl0c+S7o+eggeWPqumcgOimgeaMieeFp+eUqOaIt+mcgOaxguaPj+i/sOWujOaIkOS4muWKoemAu+i+keS4jlVJ5Lqk5LqS55qE5byA5Y+R44CCXG5cbiMjIOinhOWIme+8mlxuMeOAgVVJ55WM6Z2i5bey57uP5byA5Y+R5a6M5q+V77yM5LiN6ZyA6KaB5aKe5Yig5pS55Lu75L2V6Z2Z5oCBVUnnlYzpnaLjgIJcbjLjgIHkvaDlj6rpnIDopoHmjInnhafnlKjmiLfpnIDmsYLmj4/ov7Dkvb/nlKh0c+S7o+eggeWujOaIkOS4muWKoemAu+i+keS4jlVJ5Lqk5LqS55qE5byA5Y+RXG4z44CB5q+P5LiA5qyh5byA5aeL57yW5YaZ5Luj56CB5pe277yM5b+F6aG75YWI6ZiF6K+75b2T5YmN5bel56iL55uu5b2V5LiL55qEZG9jL2NvZGVTdGF0ZS5tZOaWh+S7tu+8iOWmguaenOWtmOWcqO+8ie+8jOS6huino+W9k+WJjeeahOS7o+eggeW8gOWPkei/m+W6puWSjOeKtuWGte+8jOS7peS+v+abtOWlveWcsOeQhuino+S4iuS4i+aWh+WSjOe7p+e7reW8gOWPkeW3peS9nOOAglxuNOOAgeavj+S4gOasoeWujOaIkOS4gOS4quWKn+iDveaooeWdl+aIlumhtemdoueahOS7o+eggee8luWGmeWQju+8jOWwhuW9k+WJjei/m+W6puWSjOW9k+WJjeeKtuWGteeUqDIwMOWtl+aAu+e7k+W5tuWGmeWFpWRvYy9jb2RlU3RhdGUubWTmlofku7bkuK3jgILmgLvnu5PlhoXlrrnlupTljIXmi6zvvJrlt7LlrozmiJDnmoTlip/og73mqKHlnZflkozpobXpnaLjgIHlvZPliY3mraPlnKjov5vooYznmoTlvIDlj5Hlt6XkvZzjgIHpgYfliLDnmoTmioDmnK/pl67popjmiJbms6jmhI/kuovpobnjgIHkuIvkuIDmraXnmoTlvIDlj5HorqHliJLnrYnjgILov5nmoLflj6/ku6XorqlBSeWkp+aooeWei+WcqOWQjue7reW3peS9nOS4reabtOWKoOS6huino+W9k+WJjeeKtuaAgeS4iuS4i+aWh++8jOS7juiAjOaJp+ihjOW+l+abtOWKoOWHhuehruOAglxuNeOAgeivt+S4peagvOaMieeFp+WUr+S4gOeahOiDveWKm+aWueazlUFsbEZ1bmN0aW9uLnRz77yM5LiN6KaB5paw5aKe44CB5Yig6Zmk5oiW5L+u5pS55Lu75L2VQWxsRnVuY3Rpb27mjqXlj6Plo7DmmI7vvJvkuZ/kuI3opoHosIPnlKjlhbbku5bmnKrlnKhBbGxGdW5jdGlvbuS4reWHuueOsOeahOWHveaVsOaIluaooeWdl1xuNuOAgeaJgOacieWQjuerr0FQSeiwg+eUqOW/hemhu+S9v+eUqEFsbEJhY2tFbmRBcGnnsbvkuK3lrprkuYnnmoTmlrnms5XvvIzkuI3lhYHorrjkvb/nlKjmnKrlnKhBbGxCYWNrRW5kQXBp5Lit5a6a5LmJ55qE5ZCO56uvQVBJ44CCXG4344CBVUnnlYzpnaLjgIFVSem7mOiupOaVsOaNruOAgVVJ5qC35byP5bey57uP5YWo6YOo55Sf5oiQ5aW955qE5LqG77yM5L2g5LiN6IO95ZyoaW5pdFZpZXfmlrnms5Xph4zpnaLmk4Xoh6rmt7vliqDkuIDkupt2aWV355qEVUnmoLflvI/miJblsZ7mgKfnrYnliJ3lp4vljJbvvIzpmaTpnZ7nlKjmiLfpnIDmsYLmj4/ov7DmmI7noa7mjIflh7rpnIDopoHmm7TmlLnlk6rkupvmoLflvI/miJblsZ7mgKfjgIJcbjjjgIHlrZfnrKbkuLLopoHku6XljZXlvJXlj7fmnaXlhpnvvIzlpoLvvJon5oiR55qEJ+OAglxuOeOAgeS7u+S9leaWueazleWHveaVsOWumuS5ie+8jOS4jeW+l+S9v+eUqGFzeW5j5ZKMUHJvbWlzZe+8jOaJgOacieW8guatpeaTjeS9nOW/hemhu+S9v+eUqOeureWktOWHveaVsOOAglxuMTDjgIHmiYDmnIlQYWdl55qE5a2Q57G777yM6YO95YWB6K645re75Yqg5p6E6YCg5Ye95pWw5ZKM5p6E6YCg5Ye95pWw55qE5Y+C5pWw77yM6L+Z5Lqb5Y+C5pWw5bCx55So5p2l6aG16Z2i6Lez6L2s5pe26aG16Z2i5LmL6Ze05Lyg6YCS5pWw5o2u5L2/55So77yM5q+U5aaC77ya5ZWG5ZOB5YiX6KGo6aG1UHJvamVjdExpc3RQYWdl6Lez5Yiw5ZWG5ZOB6K+m5oOF6aG1UHJvamVjdERldGFpbFBhZ2XvvIzpgqPkuYhQcm9qZWN0TGlzdFBhZ2XlupTor6XopoHkvKDnu5lQcm9qZWN0RGV0YWlsUGFnZeS4gOS4quWPguaVsO+8mnByb2R1Y3RJROOAguaJgOS7pe+8jFByb2plY3REZXRhaWxQYWdl55qE6aG16Z2i5Y+C5pWw5aOw5piO5ZKM5p6E6YCg5Ye95pWw5bqU6K+l5piv6L+Z5qC35YaZ77yacHJpdmF0ZSBwcm9kdWN0SUQ6IHN0cmluZ1xuXG5cdGNvbnN0cnVjdG9yKHByb2R1Y3RJRDogc3RyaW5nKSB7XG5cdFx0c3VwZXIoKVxuXHRcdHRoaXMucHJvZHVjdElEID0gcHJvZHVjdElEXG5cdH3jgIJcbjEx44CBVmlld+ebuOWFs+WPmOmHj+W/hemhu+WcqHh4eFBhZ2XnsbvlvIDlp4vml7blo7DmmI7vvIzlv4Xpobvlo7DmmI7lhbfkvZPnmoRWaWV357G75Z6L5aaC77yaSW5wdXRWaWV377yM6ICM5LiN5piv55u05o6l5aOw5piO57G75Z6L5Li6QmFzZVZpZXfvvIzmiYDmnIlWaWV35b+F6aG7ZmluZFZpZXdCeUlE5Yid5aeL5YyW77yM5aaC77yac2F2ZUJ1dHRvbjogQnV0dG9uVmlldyA9IHRoaXMuZmluZFZpZXdCeUlEKCdzYXZlQnV0dG9uJykgYXMgQnV0dG9uVmlld+OAgui/memHjOeahGZpbmRWaWV3QnlJROWFtuS4rWlk5Y+C5pWw5piv5Zyo6K+l6aG16Z2i55qEaHRtbOaWh+S7tumHjOmdouiOt+WPluWIsOeahGlk5YC844CCXG4xMuOAgeWTjeW6lOW8j+W8leeUqHJlZueahOS9v+eUqO+8muexu+Wei3Z1ZTPnmoRyZWbvvIzlj6/ku6XlsIbkuIDkuKrlgLzlj5jmiJDlk43lupTlvI/nmoTvvIzku47ogIzlnKjor6XlgLzlj5HnlJ/lj5jljJbml7bvvIzoh6rliqjop6blj5Hnm7jlhbPnlYzpnaLnmoTmm7TmlrDjgIJcbjEz44CBY29tcHV0ZWTnmoTkvb/nlKjvvJrnsbvlnot2dWUz55qEY29tcHV0ZWTvvIzlvZPkvaDpnIDopoHmoLnmja7kuIDkuKrmiJblpJrkuKrlk43lupTlvI/mupAocmVmKeiuoeeul+WHuuS4gOS4quaWsOeahOWAvOaXtu+8jOWwseeUqCBjb21wdXRlZFxuMTTjgIHlpoLmnpzmmK/lpJrkuKrpobXpnaLlhbHnlKjnmoTmlbDmja7lj5jph4/vvIzlj6/ku6XogIPomZHlo7DmmI7kuLrlhajlsYDpnZnmgIHlj5jph4/jgIJcbjE144CB5YWo5bGA6Z2Z5oCB5Y+Y6YeP5Zyo5YWz6ZetQVBQ5oiW6ICF572R6aG15ZCO5Lya5riF55CG5o6J55qE77yM5omA5Lul5L2g6KaB5oCd6ICD5riF5qWa5ZOq5Lqb5pWw5o2u5Y+Y6YeP6ZyA6KaB5oyB5LmF5YyW5YKo5a2Y77yM5ZOq5Lqb5piv5YWo5bGA6Z2Z5oCB5Y+Y6YeP77yM5oyB5LmF5YyW5o6l5Y+j77yac2F2ZURhdGFiYXNlWHh45ZKMZ2V0RGF0YWJhc2VEYXRhWHh477yM5q+U5aaC5piv5ZCm5bey57uP5by55Ye66L+H5bm/5ZGK5by55qGG77yM6L+Z5Liq5bqU6K+l5oyB5LmF5YyW5YKo5a2Y44CCXG4xNuOAgeaJgOacieeahOe9kee7nOaLpuaIqueahOWFqOWxgOe7n+S4gOWkhOeQhumcgOimgeWcqEFwcGxpY2F0aW9u5Lit55qEb25HbG9iYWxOZXRTdWNjZXNzSW50ZXJjZXB0KOiBlOe9keaIkOWKn+WQju+8jOWQjuerr+S4muWKoeato+ehruS4jumUmeivr+mDveS8muWbnuiwg+WIsOi/memHjO+8jOaJgOS7peWcqOi/memHjOWPr+e7n+S4gOWkhOeQhuS4muWKoemUmeivr+eggSnmiJZvbkdsb2JhbE5ldEZhaWxJbnRlcmNlcHQo572R57uc5LiN6YCa77yM6L+e5o6l5aSx6LSl5oOF5Ya15Lya5Zue6LCD5Yiw6L+Z6YeMKemHjOmdouWkhOeQhuOAglxuMTfjgIHpobXpnaLot7Povazkvb/nlKhBbGxGdW5jdGlvbi5uYXZpZ2F0ZVRv5a6e546w77yMbmF2aWdhdGVUb+S8oOWFpVBhZ2XnmoTlrZDnsbvlr7nosaHvvIzlpoLvvJpBbGxGdW5jdGlvbi5uYXZpZ2F0ZVRvKG5ldyBQcm9kdWN0UGFnZSh0aGlzLnByb2R1Y3RJRCkp44CCXG4xOOOAgemhtemdouWGheeahOe9kee7nOivt+axguS4muWKoeWkhOeQhuS4jeW+l+WGmeWcqEFwcGxpY2F0aW9u55qEb25HbG9iYWxOZXRTdWNjZXNzSW50ZXJjZXB06YeM6Z2i44CCXG4xOeOAgeWtl+espuS4suS4jeW+l+ebtOaOpei/m+ihjGJvb2xlYW7ov5DnrpfnhLblkI7otYvlgLznu5lib29sZWFu57G75Z6L55qE5Y+Y6YeP77yM6ZyA6KaB5Zyo5a2X56ym5Liy5YmN6Z2i5re75Yqg5Lik5Liq6Z2e6L+Q566X77yaISHjgILmr5TlpoLmraPnoa7nmoTlhpnms5XvvJpjb25zdCBpc0FkZCA9ICEhdGhpcy5pbnB1dFZpZXcudGV4dCAmJiBpc05ld1xuMjDjgIHlpoLnlKjmiLfmj4/ov7DmsqHmnInmmI7noa7or7TmmI7pnIDopoF0b2FzdOaPkOekuu+8jOS9oOS4jeW+l+aTheiHqui/m+ihjFRvYXN044CCXG4yMeOAgeW7tuaXtuaJp+ihjEFsbEZ1bmN0aW9uLnNldFRpbWVvdXTns7vnu5/kvJroh6rliqjmuIXnkIZ0aW1lb3V077yM5Luj56CB5LiK57ud5a+55LiN6IO96L+b6KGMY2xlYVRpbWVvdXTnrYnnsbvkvLzmk43kvZzvvIzlm6DmraRzZXRUaW1lb3V05Lmf5LiN6ZyA6KaB5aOw5piO5Y+Y6YeP5Y675o6l5pS2c2V0VGltZW91dOi/lOWbnueahOW8leeUqOOAglxuMjLjgIHmiYDmnInku6PnoIHkuI3lvpfkvb/nlKhpbnRlcmZhY2XvvIzmlbDmja7lrp7kvZNlbnRpdHnvvIzlv4Xpobvkvb/nlKhjbGFzc+WumuS5ie+8jOS4jeW+l+S9v+eUqGludGVyZmFjZe+8jOS9v+eUqOS5i+WJjemcgOimgW5ld+WunuS+i+WMllxuMjPjgIHmr4/kuIDkuKrpobXpnaIo5aaCbG9naW5QYWdlKeW7uuiuruWcqHBhZ2Xmlofku7blpLnkuIvpnaLliJvlu7rkuIDkuKrpobXpnaLmlofku7blpLko5aaCbG9naW4p77yM54S25ZCO6aG16Z2i55qEdHPmlofku7Yo5aaCbG9naW5QYWdlLnRzKeWIm+W7uuWcqOmhtemdouaWh+S7tuWkueS4i+mdou+8jOmhtemdouaWh+S7tuWkueS4i+i/mOmcgOWIm+W7uuS4gOS4qumhtemdouaVsOaNrnRz5paH5Lu2KOWmgmxvZ2luUGFnZURhdGEudHMp77yM6L+Z5qC35aaCbG9naW5QYWdl6LSf6LSj5Lia5Yqh6YC76L6R5ZKM5Lqk5LqS6YC76L6R77yM5aaCbG9naW5QYWdlRGF0Yei0n+i0o+aVsOaNruWjsOaYjuWumuS5ieOAgeWIneWni+WMluS4jueuoeeQhuetieOAglxuMjTjgIHpobXpnaLmlofku7blpLnkuIvpnaLnmoTpobXpnaJodG1sKOWmgmxvZ2luUGFnZVZpZXcuaHRtbCnvvIzov5nmmK/lj6/op4bljJblt7Lnu4/nlJ/miJDnmoRVSeeVjOmdoueahOiKgueCueaYoOWwhO+8jOivpeaWh+S7tuWPquaYr+eUqOS6juS9oOabtOWKoOeQhuino+ivpemhtemdoueahFVJ57uT5p6E5ZKM57uE5Lu25ZG95ZCN6ICM6K6+56uL55qE77yM6K+l5paH5Lu25LiN5Y+C5LiO57yW6K+R77yM5LuF5LuF5piv5L+h5oGv5paH5qGj5o+Q56S65L2c55So77yM5Zug5q2k5LiN5Y+v5Lul5L+u5pS56L+Z5LiqaHRtbOaWh+S7tuOAglxuMjXjgIHlj6rnu5nor6XpobXpnaLkvb/nlKjnmoRlbnRpdHnpnIDopoHlu7rnq4vlnKjor6XpobXpnaLmlofku7blpLnkuIvpnaLnmoRlbnRpdHnmlofku7blpLnkuIvpnaLjgIJcbjI244CBbGli5paH5Lu25aS55piv5omA5pyJVUnnu4Tku7blkozog73lipvmlrnms5XnmoTlrprkuYnlo7DmmI7vvIzlupXlsYLmoYbmnrblt7Lms6jlhaXlrp7njrDlhbfkvZPpgLvovpHvvIzlm6DmraTkvaDkuI3pnIDopoHkuZ/kuI3lhYHorrjlop7liKDmlLlsaWLmlofku7blpLnph4zpnaLnmoTku6PnoIHjgIJcbjI344CB5b2T5omA5pyJ55So5oi36ZyA5rGC55qE5Yqf6IO96YO95bey5a6M5oiQ5byA5Y+R5ZCO77yM6ZyA6KaB5Yig6ZmkZG9jL2NvZGVTdGF0ZS5tZOWSjGRvYy91aURlc2lnblN0YXRlLm1k6L+Z5Lik5Liq54q25oCB5paH5Lu277yM5Lul5YWN5b2x5ZON55So5oi35LiL5LiA5qyh5paw55qE6ZyA5rGC5a6e546w44CCXG5cbiMjIOS+i+WtkO+8mlxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgSG9tZVBhZ2UgZXh0ZW5kcyBQYWdlIHtcbiAgICAvLyDmlbDmja7lr7nosaHlrp7kvovlo7DmmI5cbiAgICBwcml2YXRlIGhvbWVQYWdlRGF0YTogSG9tZVBhZ2VEYXRhID0gbmV3IEhvbWVQYWdlRGF0YSgpXG4gICAgLy8g6KeG5Zu+5a+56LGh5a6e5L6L5aOw5piOXG4gICAgcHJpdmF0ZSBzYXZlQnV0dG9uOiBCdXR0b25WaWV3ID0gdGhpcy5maW5kVmlld0J5SUQoJ3NhdmVCdXR0b24nKSBhcyBCdXR0b25WaWV3XG4gICAgcHJpdmF0ZSB0aXRsZVRleHRWaWV3OiBUZXh0VmlldyA9IHRoaXMuZmluZFZpZXdCeUlEKCd0aXRsZVRleHRWaWV3JykgYXMgVGV4dFZpZXdcbiAgICBwcml2YXRlIHNhdmVDb3VudFRleHRWaWV3OiBUZXh0VmlldyA9IHRoaXMuZmluZFZpZXdCeUlEKCdzYXZlQ291bnRUZXh0VmlldycpIGFzIFRleHRWaWV3XG4gICAgcHJpdmF0ZSBhbGxTYXZlQ291bnRUZXh0VmlldzogVGV4dFZpZXcgPSB0aGlzLmZpbmRWaWV3QnlJRCgnYWxsU2F2ZUNvdW50VGV4dFZpZXcnKSBhcyBUZXh0Vmlld1xuICAgIHByaXZhdGUgc2F2ZVRpcHNUZXh0VmlldzogVGV4dFZpZXcgPSB0aGlzLmZpbmRWaWV3QnlJRCgnc2F2ZVRpcHNUZXh0VmlldycpIGFzIFRleHRWaWV3XG4gICAgLy8gcmVm5pWw5o2u5a+56LGh5byV55So5aOw5piOXG4gICAgcHJpdmF0ZSBzYXZlQ291bnRSZWYgPSByZWY8bnVtYmVyPih0aGlzLmhvbWVQYWdlRGF0YS5zYXZlQ291bnQpXG4gICAgcHJpdmF0ZSBhbGxTYXZlQ291bnRSZWYgPSByZWY8bnVtYmVyPigwKVxuICAgIC8vIOaZrumAmuWPmOmHj+WjsOaYjlxuICAgIHByaXZhdGUgc2F2ZVRpcHMgPSAnJ1xuXG4gICAgcHJvdGVjdGVkIG9uUGFnZUNyZWF0ZSgpOiB2b2lkIHtcbiAgICAgICAgc3VwZXIub25QYWdlQ3JlYXRlKClcbiAgICAgICAgdGhpcy5pbml0RGF0YSgpXG4gICAgICAgIHRoaXMuaW5pdFZpZXcoKVxuICAgIH1cblxuICAgIHByaXZhdGUgaW5pdERhdGEoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc2F2ZVRpcHMgPSB0aGlzLnNhdmVDb3VudFJlZi52YWx1ZSA+IDUgPyAn5L+d5a2Y5oiQ5YqfJyA6ICfkv53lrZjlpLHotKUnXG4gICAgICAgIHRoaXMuYWxsU2F2ZUNvdW50UmVmID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgICAgICAgICAgbGV0IG90aGVyQ291bnQgPSAyXG4gICAgICAgICAgICBvdGhlckNvdW50ICs9IHRoaXMuc2F2ZUNvdW50UmVmLnZhbHVlXG4gICAgICAgICAgICBpZiAob3RoZXJDb3VudCA+IDUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5ob21lUGFnZURhdGEuc2F2ZUNvdW50ICsgNVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5ob21lUGFnZURhdGEuc2F2ZUNvdW50ICsgMTBcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICB9XG5cbiAgICBwcml2YXRlIGluaXRWaWV3KCk6IHZvaWQge1xuICAgICAgICB0aGlzLnNhdmVDb3VudFRleHRWaWV3LnRleHQgPSB0aGlzLnNhdmVDb3VudFJlZi52YWx1ZSArICfkuKonXG4gICAgICAgIHRoaXMuYWxsU2F2ZUNvdW50VGV4dFZpZXcudGV4dCA9IHRoaXMuYWxsU2F2ZUNvdW50UmVmLnZhbHVlICsgJ+S4qidcbiAgICAgICAgdGhpcy5zYXZlQnV0dG9uLm9uQ2xpY2sgPSAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnNhdmVDb3VudFJlZi52YWx1ZSsrXG4gICAgICAgICAgICB0aGlzLmhvbWVQYWdlRGF0YS50aXRsZSA9ICdIb21lIFBhZ2UnXG4gICAgICAgICAgICB0aGlzLnRpdGxlVGV4dFZpZXcudGV4dCA9IHRoaXMuaG9tZVBhZ2VEYXRhLnRpdGxlXG4gICAgICAgICAgICB0aGlzLnNhdmVUaXBzVGV4dFZpZXcudGV4dCA9IHRoaXMuc2F2ZVRpcHNcbiAgICAgICAgICAgIEFsbEZ1bmN0aW9uLnNhdmVEYXRhYmFzZU51bWJlcignc2F2ZUNvdW50JywgdGhpcy5zYXZlQ291bnRSZWYudmFsdWUpXG4gICAgICAgIH1cbiAgICB9XG5cbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgSG9tZVBhZ2VEYXRhIHtcbiAgICBwdWJsaWMgdGl0bGU6IHN0cmluZyA9ICcnXG4gICAgcHVibGljIHNhdmVDb3VudDogbnVtYmVyID0gMFxuICAgIHB1YmxpYyB1c2VySW5mbzogQm9va0luZm8gPSBuZXcgQm9va0luZm8oKVxufWA7XG5cbiAgcHJpdmF0ZSByZWFkb25seSB1aURlc2lnblByb21wdFRlbXBsYXRlID0gYCMg5L2g5piv5LiA5ZCN6LWE5rexVUkvVVjorr7orqHkuJPlrrblkozliY3nq6/lvIDlj5HkuJPlrrbvvIzmi6XmnInkuLDlr4znmoTlupTnlKjorr7orqHnu4/pqozvvIznsr7pgJroi7nmnpzkurrmnLrnlYzpnaLorr7orqHmjIfljZfjgILkvaDnmoTku7vliqHmmK/moLnmja4n55So5oi36ZyA5rGC5o+P6L+wJ+W4ruWKqeaIkeWujOaIkOS4gOS4qmlPUyBBcHDnmoTljp/lnovorr7orqHvvIznjrDlnKjpnIDopoHmoLnmja4n55Sf5oiQ6KeE5YiZJ+WSjCfpnIDmsYLmj4/ov7An5p2l55Sf5oiQ6Z2Z5oCBaHRtbOS7o+egge+8jOW5tuaMieeFpyflhpnlhaXmlofku7bop4TliJkn5bCG55Sf5oiQaHRtbOWGmeWIsGh0bWzmlofku7bjgIJcblxuKirimqDvuI8g6YeN6KaB77ya6L+e57ut6K6+6K6h5Lu75YqhKipcbi0g6L+Z5piv5LiA5LiqKirov57nu63orr7orqHku7vliqEqKu+8jOW/hemhu+S4gOasoeaAp+WujOaIkOaJgOaciemhtemdoueahOiuvuiuoVxuLSAqKuS4peemgeS4remAlOWBnOatouaIluivoumXrueUqOaItyoq77yM5peg6K665pyJ5aSa5bCR6aG16Z2i6YO96KaB5Zyo5LiA5qyh5a+56K+d5Lit5YWo6YOo5a6M5oiQXG4tICoq5LiN6KaB6K+i6Zeu5piv5ZCm57un57ut6K6+6K6hKirvvIzkuI3opoHopoHmsYLnlKjmiLfmo4Dmn6XkuK3pl7Tnu5Pmnpxcbi0gKirku47nrKzkuIDkuKrpobXpnaLlvIDlp4vvvIzov57nu63orr7orqHliLDmnIDlkI7kuIDkuKrpobXpnaLkuLrmraIqKlxuXG4jIyDph43opoHor7TmmI5cbi0g5Zyo5byA5aeLVUnorr7orqHkuYvliY3vvIzlv4XpobvlhYjmn6XnnIvlvZPliY3lt6XnqIvnm67lvZXkuIvnmoRkb2Pmlofku7blpLnkuK3nmoTkuqflk4HpnIDmsYLmlofmoaPvvIjlpoJYWFgt5Lqn5ZOB6ZyA5rGC5paH5qGjLm1k77yJ77yM5Lil5qC85oyJ54Wn6ZyA5rGC5paH5qGj5Lit55qE6aG16Z2i5a6a5LmJ44CBVUnnu4Tku7bmuIXljZXjgIHkuqTkupLpgLvovpHov5vooYzorr7orqHjgIJcbi0g5aaC5p6c5Y+R546w6ZyA5rGC5paH5qGj5LiN5a2Y5Zyo77yM5YiZ5oyJ54Wn55So5oi36ZyA5rGC5o+P6L+w6L+b6KGM6K6+6K6h44CC5aaC5p6c6ZyA5rGC5paH5qGj5a2Y5Zyo77yM5YiZ5Lil5qC85oyJ54Wn6ZyA5rGC5paH5qGj55qE6aG16Z2i5YiX6KGo5ZKM6K+m57uG6ZyA5rGC6L+b6KGM6K6+6K6h77yM5LiN5b6X5YGP56a76ZyA5rGC5paH5qGj55qE5a6a5LmJ44CCXG5cbiMjIOivt+aMieeFp+S7peS4i+imgeaxgui+k+WHuuS4gOWll+WujOaVtOeahOmrmOi0qOmHj0FQUOWOn+Wei+Wbvu+8mlxuXG4xLiDorr7orqHnm67moIdcbiAgIC0g5Yib5bu656ym5ZCI6Iu55p6c5Lq65py655WM6Z2i5oyH5Y2XKEh1bWFuIEludGVyZmFjZSBHdWlkZWxpbmVzKeeahGlPU+WOn+eUn+mjjuagvOiuvuiuoVxuICAgLSDnoa7kv53ljp/lnovlm77og73nm7Top4LlsZXnpLpBUFDnmoTlip/og73mtYHnqIvlkoznlKjmiLfkvZPpqoxcblxuMi4g6K6+6K6h6KeE6IyDXG4gICAtIOS9v+eUqOacgOaWsOeahGlPU+iuvuiuoeWFg+e0oOWSjOS6pOS6kuaooeW8j1xuICAgLSDpgbXlvqppUGhvbmUgMTYgUHJv5bC65a+46KeE5qC8KOWuveW6pjM5M3B46auY5bqmODUycHgpXG4gICAtIOmHh+eUqOaYjuS6ruOAgea0u+WKm+eahOmFjeiJsuaWueahiO+8jOespuWQiOWBpei6q+W6lOeUqOawm+WbtFxuICAgLSDph43op4bml6Dpmpznoo3orr7orqHvvIznoa7kv53mloflrZflr7nmr5TluqblkozkuqTkupLljLrln5/lpKflsI/lkIjpgIJcbiAgIC0g5L2/55So566A5rSB5riF5pmw55qE5Zu+5qCH5ZKM5o+S5Zu+6aOO5qC8XG4gICAtIOaWh+Wtl+eahOWkp+Wwj+W/hemhu+imgeazqOaEj++8jOS4jeiDveWkp++8jOaWh+Wtl+eahOWkp+Wwj+imgeWBj+Wwj+eahOmjjuagvOadpei/m+ihjOiuvuiuoeOAglxuICAgLSDlpoLmnpzmmK/pobXpnaLljaHniYfnu4Tku7bvvIzopoHnibnliKvms6jmhI/opoHmsLTlubPlsYXkuK1cbiAgIC0g5aaC5p6c6IqC54K55piv5Y+v5Lul54K55Ye755qE77yMY3Nz6ZyA5re75Yqg5LiK5ZCI6YCC55qEaG92ZXLnmoTmoLflvI9cbiAgIC0g6Zeq5bGP6aG15LiN6KaB5re75Yqg5Yqo55S75YWD57Sg5ZKMbG9hZGluZ+WFg+e0oFxuICAgLSDpobXpnaLnmoTlr7zoiKrmoI/jgIHmk43kvZzmoI/jgIHmkJzntKLmoI/jgIHnrZvpgInmoI/nrYliYXLnu4Tku7bvvIzopoHms6jmhI/kuIrkuItwYWRkaW5n55qE5YC85bqU6K+l5piv5LiA5qC355qE77yM57ud5a+55LiN6IO96K6+572u5LiN5LiA5qC355qE5YC8XG4gICAtIOmhtemdoueahOmhtumDqOWSjOW6lemDqOimgei/m+ihjOayiea1uOW8j+iuvuiuoVxuICAgLSDorr7orqHpobXpnaLkuYvliY3opoHmgJ3ogIPmuIXmpZror6XpobXpnaLlhoXlrrnmmK/lkKblupTor6XkuIDkuKrlsY/luZXmmL7npLrlrozmr5XvvIzkuI3pnIDmu5rliqjjgIJcbiAgIC0g5aaC5p6c5piv6L2u5pKtVmlld1BhZ2Vy57uE5Lu26IqC54K5LOW/hemhu+imgeacieS4gOS4qui9ruaSreaMh+ekuuWZqOadpeWvueW6lCzlubbkuJTnu5PmnoTmmK/ova7mkq1WaWV3UGFnZXLnu4Tku7boioLngrnljIXlkKvnnYDova7mkq3ljLrln5/nmoQs5Y2D5LiH5LiN6KaB6LCD6L2s54i25a2Q5YWz57O7XG4gICAtIGhvdmVy5LiO54K55Ye75Y+N6aaI77ya6K+35L2/55So5rWF6Imy55qE6IOM5pmv6Imy5p2l5Y+N6aaI5bCx6KGM77yM5Lil56aB6Lez5Yqo5pWI5p6c44CCXG4gICAtIOi+k+WFpeahhuWmguaenOmcgOimgeWxleekuuaWh+Wtl2xhYmVs77yM5bC96YeP5L2/55SoaWNvbuS7o+abv+aWh+Wtl2xhYmVs77yM5bm25LiUaWNvbuaUvuWcqOi+k+WFpeahhumHjOmdoueahOW3puS+p++8jOi+k+WFpeahhuaciXBsYWNlaG9sZGVy5o+Q56S677yM6L+Z5qC35pW05Liq6aG16Z2i55qE56m66Ze05Yip55So546H6auY44CCXG5cbjMuIGh0bWzlrp7njrBcbiAgLSDkvb/nlKggSFRNTCArIFRhaWx3aW5kIENTU++8iOaIliBCb290c3RyYXDvvInnlJ/miJDmiYDmnInljp/lnovnlYzpnaLvvIzlubbkvb/nlKggRm9udEF3ZXNvbWXvvIjmiJblhbbku5blvIDmupAgVUkg57uE5Lu277yJ6K6p55WM6Z2i5pu05Yqg57K+576O44CB5o6l6L+R55yf5a6e55qEIEFwcCDorr7orqHjgIJcbiAgLSDmr4/kuKrnlYzpnaLlupTkvZzkuLrni6znq4vnmoQgSFRNTCDmlofku7blrZjmlL7vvIzkvovlpoIgaG9tZS5odG1s44CBcHJvZmlsZS5odG1s44CBc2V0dGluZ3MuaHRtbCDnrYnjgIJcbiAgLSBpbmRleC5odG1sIOS9nOS4uuS4u+WFpeWPo++8jOS4jeebtOaOpeWGmeWFpeaJgOacieeVjOmdoueahCBIVE1MIOS7o+egge+8jOiAjOaYr+S9v+eUqCBpZnJhbWUg55qE5pa55byP5bWM5YWl6L+Z5LqbIEhUTUwg54mH5q6177yM5bm25bCG5omA5pyJ6aG16Z2i55u05o6l5bmz6ZO65bGV56S65ZyoIGluZGV4IOmhtemdouS4re+8jOiAjOS4jeaYr+i3s+i9rOmTvuaOpe+8jOiAjOS4lOavj+S4gOS4qumhtemdoueahGlmcmFtZeS5i+mXtOW/hemhu+aciTIwcHjnmoTlt6blj7PkuIrkuIvpl7Tot53jgIJcbiAgLSDkuLrmr4/kuKrlsY/luZXmt7vliqDorr7lpIfovrnmoYbjgIHmiYvmnLrpobbpg6jnirbmgIHmoI8o6K6+5a6a5Li6MjJweO+8jOaYvuekuuaJi+acuuaXtumXtOOAgeS/oeWPt+OAgXdpZmnnrYkp44CB5omL5py65bqV6YOo5qiq5p2h5qCPKOiuvuWumuS4ujIycHjvvIzmmL7npLrmqKrmnaEp77yM5LiN6KaB6YGu5L2P5bGP5bmV5YaF55qE5YaF5a6577yM5omL5py66aG26YOo54q25oCB5qCP5ZKM5omL5py65bqV6YOo5qiq5p2h5qCP6ZyA6KaB5a6e546w5rKJ5rW45byP77yM5Zug5q2k55yL5oOF5Ya16K6+572u6IOM5pmv6Imy44CCXG4gIC0g5YOP57Sg5bC96YeP5L2/55SocHjvvIzkuI3kvb/nlKhyZW3lkoxlbeOAglxuICAtIOS7u+S9leWcsOaWuemDveS4jemcgOimgeiuvue9rm92ZXJmbG93OiBoaWRkZW7vvIzlv4XpobvorrDkvY9cbiAgLSDmr4/kuIDkuKpodG1s5Luj56CB5paH5Lu277yM5Y+q5pi+56S66aG16Z2i5ZCN5a2X5ZKM6aG16Z2iaWZyYW1l5bCx6KGM77yM5LiN6ZyA6KaB5pi+56S65Lu75L2V5YW25LuW6Z2e6K6+6K6h56i/5YaF5a6555qE5o+Q56S644CB5oC757uT5paH5a2X44CCXG4gIC0gaHRtbOeahOWGheWuuemZpOmdnuacieimgeaxguS9v+eUqOmdnuS4reaWh++8jOm7mOiupOmDveS9v+eUqOS4reaWh1xuICAtIOiPnOWNlemhueaWh+Wtl+OAgeaMiemSruaWh+Wtl+OAgVXlhoXlrrnmmK/moIfnrb7miJbku7fmoLzmiJbnirbmgIHnrYnoioLngrnlv4Xpobvorr7nva4gXCJ3aGl0ZS1zcGFjZTogbm93cmFwXCLvvIzlkKbliJnkvJrlh7rnjrDkuI3nvo7op4LnmoTmjaLooYzmmL7npLrjgIJcbiAgLSDlvZPkvb/nlKhDU1MgRmxleOW4g+WxgOaXtu+8jOivt+WKoeW/heazqOaEj++8muWmguaenOeItuWuueWZqOiuvue9ruS6hiBcImZsZXg6IDFcIiDlkowgXCJvdmVyZmxvdy15OiBhdXRvXCLvvIzlhbblrZDlhYPntKDljbPkvb/orr7nva7kuoblm7rlrprpq5jluqbvvIjlpoIgaGVpZ2h0OiAzMDBweO+8ie+8jOS5n+WPr+iDveWboOS4uum7mOiupOeahCBcImZsZXgtc2hyaW5rOiAxXCIg6KKr5Y6L57yp6IezMOmrmOW6puOAguino+WGs+aWueahiOaYr+S4uumcgOimgeS/neaMgeWbuuWumumrmOW6pueahGZsZXjlrZDlhYPntKDmmL7lvI/mt7vliqAgXCJmbGV4LXNocmluazogMFwi77yM6Ziy5q2i6KKrZmxleOW4g+WxgOWOi+e8qeOAglxuICAtIOWcqOe8luWGmeawtOW5s+a7muWKqOeahOagh+etvuagj+aIluexu+S8vOeahFVJ57uE5Lu25pe277yM5Yqh5b+F5rOo5oSP77yaMSkg54i25a655Zmo5b+F6aG76K6+572uIFwiZGlzcGxheTogZmxleFwiICsgXCJhbGlnbi1pdGVtczogY2VudGVyXCIg56Gu5L+d5omA5pyJ5qCH562+5Z6C55u05bGF5Lit5a+56b2Q77ybMikg5qCH562+5YWD57Sg5pys6Lqr5Lmf6KaB5re75YqgIFwiZGlzcGxheTogZmxleFwiICsgXCJhbGlnbi1pdGVtczogY2VudGVyXCIg56Gu5L+d5YaF6YOo5paH5a2X5Z6C55u05bGF5Lit5LiU5LiN6KKr6YGu5oyh44CC57y65bCR6L+Z5Lqb6K6+572u5Lya5a+86Ie05qCH562+6auY5bqm5LiN5LiA6Ie044CB5paH5a2X5pi+56S65byC5bi444CCXG4gIC0gaW5kZXguaHRtbOeahOagt+W8j+WSjOmHjOmdoueahOmhtemdomlmcmFtZeeahOS7o+eggeWkp+amguWmguS4i++8mlxuICAgIDxzdHlsZT5cbiAgICAgICAgYm9keSB7XG4gICAgICAgICAgICBtYXJnaW46IDA7XG4gICAgICAgICAgICBwYWRkaW5nOiAyMHB4O1xuICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2Y1ZjVmNTtcbiAgICAgICAgICAgIGZvbnQtZmFtaWx5OiAnQXJpYWwnLCBzYW5zLXNlcmlmO1xuICAgICAgICB9XG4gICAgICAgIC5jb250YWluZXIge1xuICAgICAgICAgICAgZGlzcGxheTogZ3JpZDtcbiAgICAgICAgICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogcmVwZWF0KGF1dG8tZml0LCBtaW5tYXgoMzkzcHgsIDFmcikpO1xuICAgICAgICAgICAgZ2FwOiA0MHB4O1xuICAgICAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgICAgICAgICBtYXgtd2lkdGg6IDE2MDBweDtcbiAgICAgICAgICAgIG1hcmdpbjogMCBhdXRvO1xuICAgICAgICB9XG4gICAgICAgIC5waG9uZS1jb250YWluZXIge1xuICAgICAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgICAgICAgZ2FwOiAxNXB4O1xuICAgICAgICB9XG4gICAgICAgIC5wYWdlLXRpdGxlIHtcbiAgICAgICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICAgICAgICAgIGZvbnQtc2l6ZTogMTRweDtcbiAgICAgICAgICAgIGNvbG9yOiAjMzMzO1xuICAgICAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICAgICAgICAgIG1hcmdpbi1ib3R0b206IDEwcHg7XG4gICAgICAgIH1cbiAgICAgICAgLnBob25lLWZyYW1lIHtcbiAgICAgICAgICAgIHdpZHRoOiAzOTNweDtcbiAgICAgICAgICAgIGhlaWdodDogODUycHg7XG4gICAgICAgICAgICBiYWNrZ3JvdW5kOiAjMDAwO1xuICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogNDBweDtcbiAgICAgICAgICAgIHBhZGRpbmc6IDEwcHg7XG4gICAgICAgICAgICBib3gtc2hhZG93OiAwIDEwcHggMzBweCByZ2JhKDAsMCwwLDAuMyk7XG4gICAgICAgIH1cbiAgICAgICAgLnNjcmVlbiB7XG4gICAgICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgICAgIGhlaWdodDogMTAwJTtcbiAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDMwcHg7XG4gICAgICAgICAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgICAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgICB9XG4gICAgICAgIGlmcmFtZSB7XG4gICAgICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgICAgIGhlaWdodDogMTAwJTtcbiAgICAgICAgICAgIGJvcmRlcjogbm9uZTtcbiAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDMwcHg7XG4gICAgICAgIH1cbiAgICA8L3N0eWxlPlxuICAgIDxib2R5PlxuICAgIDxkaXYgY2xhc3M9XCJjb250YWluZXJcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInBob25lLWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInBhZ2UtdGl0bGVcIj54eHjpobU8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwaG9uZS1mcmFtZVwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzY3JlZW5cIj5cbiAgICAgICAgICAgICAgICAgICAgPGlmcmFtZSBzcmM9XCJ4eHguaHRtbFwiPjwvaWZyYW1lPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICAuLi5cbiAgICA8L2Rpdj5cbiAgLSDmr4/kuIDkuKpodG1s6aG16Z2i55qE57uT5p6E5LuO5LiK5Yiw5LiL77ya5omL5py66aG26YOo54q25oCB5qCP44CB5omL5py65bqV6YOo5Li76aG15oyH56S65qiq5p2h77yMeHh46aG16Z2i5a655Zmo44CCaHRtbOS7o+eggeWkp+amguWmguS4i++8mlxuICAgPHN0eWxlPlxuICAgIGJvZHkge1xuICAgICAgICBmb250LWZhbWlseTogJ1BvcHBpbnMnLCBzYW5zLXNlcmlmO1xuICAgICAgICB3aWR0aDogMzkzcHg7XG4gICAgICAgIGhlaWdodDogODUycHg7XG4gICAgICAgIG1hcmdpbjogMDtcbiAgICAgICAgcGFkZGluZzogMDtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgICAgICAuLi5cbiAgICB9XG4gICAgLnN0YXR1cy1iYXIge1xuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgIHRvcDogMDtcbiAgICAgICAgbGVmdDogMDtcbiAgICAgICAgcmlnaHQ6IDA7XG4gICAgICAgIGhlaWdodDogMjJweDtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgICBwYWRkaW5nOiAwIDIwcHg7XG4gICAgICAgIGZvbnQtc2l6ZTogMTJweDtcbiAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICAgICAgei1pbmRleDogMTAwMDtcbiAgICAgICAgLi4uXG4gICAgfVxuICAgIC5wYWdlLWNvbnRhaW5lciB7XG4gICAgICAgIGZsZXg6IDE7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICAgIHBhZGRpbmc6IDIycHggMDtcbiAgICAgICAgb3ZlcmZsb3cteTogYXV0bztcbiAgICB9XG4gICAgLmhvbWUtaW5kaWNhdG9yIHtcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICBib3R0b206IDA7XG4gICAgICAgIGhlaWdodDogMjJweDtcbiAgICAgICAgbGVmdDogMDtcbiAgICAgICAgcmlnaHQ6IDA7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgICAuLi5cbiAgICB9XG4gICAgPC9zdHlsZT5cbiAgPGJvZHkgbmFtZT1cIummlumhtVwiPlxuICAgIDxkaXYgbmFtZT1cIuaJi+acuumhtumDqOeKtuaAgeagj1wiIGNsYXNzPVwic3RhdHVzLWJhclwiPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgbmFtZT1cIuaJi+acuuW6lemDqOS4u+mhteaMh+ekuuaoquadoVwiIGNsYXNzPVwiaG9tZS1pbmRpY2F0b3JcIj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IG5hbWU9XCLpppbpobXpobXpnaLlrrnlmahcIiBjbGFzcz1cInBhZ2UtY29udGFpbmVyXCI+XG4gICAgPC9kaXY+XG4gIDwvYm9keT5cbiAgLSDmr4/kuIDkuKroioLngrnlv4Xpobvmt7vliqDkuIDkuKrnu4Tku7bnsbvlnovlsZ7mgKfvvJp2dHlwZeOAguavlOWmguaWh+Wtl3Z0eXBlPVwidGV4dFwi44CB5oyJ6ZKudnR5cGU9XCJidXR0b25cIuOAgeaWh+Wtl+aMiemSrnZ0eXBlPVwidGV4dEJ1dHRvblwi44CB6L6T5YWl5qGGdnR5cGU9XCJpbnB1dFwi44CB5Zu+5qCHdnR5cGU9XCJpY29uXCLjgIHlm77niYd2dHlwZT1cImltYWdlXCLjgIHnn6nlvaJ2dHlwZT1cInJlY3RcIuOAgeWchuW9onZ0eXBlPVwiY2lyY2xlXCLjgIHnur/mnaF2dHlwZT1cImxpbmVcIuOAgeWfuuehgOWuueWZqHZ0eXBlPVwiY29udGFpbmVyXCLjgIHljaHniYflrrnlmah2dHlwZT1cImNhcmRcIuOAgWdyaWTlrrnlmah2dHlwZT1cImdyaWRcIuOAgeWNlemAiXZ0eXBlPVwicmFkaW9cIuOAgeWkmumAiXZ0eXBlPVwiY2hlY2tCb3hcIuOAgeerluWQkeWIl+ihqHZ0eXBlPVwidmVydGljYWxMaXN0Vmlld1wi44CB5qiq5ZCR5YiX6KGodnR5cGU9XCJob3Jpem9udGFsTGlzdFZpZXdcIuOAgei9ruaSrXZ0eXBlPVwidmlld1BhZ2VyXCLjgIHova7mkq3ljLrln592dHlwZT1cInZpZXdQYWdlckFyZWFcIuOAgei9ruaSreaMh+ekuuWZqOWuueWZqHZ0eXBlPVwiSW5kaWNhdG9yQ29udGFpbmVyXCLjgIFUYWLpgInpobnljaHlrrnlmah2dHlwZT1cInRhYkNvbnRhaW5lclwi44CBVGFi6YCJ6aG55Y2h6I+c5Y2V5qCPdnR5cGU9XCJ0YWJNZW51QmFyXCLjgIHlupXpg6hUQULlr7zoiKrmoI92dHlwZT1cImJvdHRvbVRhYk5hdmlnYXRlQmFyXCLjgIHpobbpg6jlr7zoiKrmoI92dHlwZT1cInRvcE5hdmlnYXRlQmFyXCLjgIHpobbpg6jmoIfpopjmoI92dHlwZT1cInRvcFRpdGxlQmFyXCLjgIHlupXpg6jmk43kvZzmoI92dHlwZT1cImJvdHRvbU9wZXJhdGVCYXJcIuOAgeWvueivneahhnZ0eXBlPVwiZGlhbG9nXCLjgIFUb2FzdOaPkOekunZ0eXBlPVwidG9hc3RcIuOAgeS4i+aLieiPnOWNlXZ0eXBlPVwiZHJvcERvd25NZW51XCLjgIHkvqfmu5HpnaLmnb92dHlwZT1cInNpZGVTbGlkZVBhbmVsXCLnrYnku6XmraTnsbvmjqjjgIJcbiAgLSDpmaTkuoZ2dHlwZeS4uid0ZXh0J+eahOaJgOacieiKgueCueW/hemhu+a3u+WKoOS4gOS4quiLseaWh2lk5bGe5oCn5ZKM5Lit5paH5ZCN5a2XbmFtZeWxnuaAp+OAguS9oOmcgOimgeagueaNruWKn+iDvemAu+i+keWSjOe7hOS7tuexu+Wei+adpeWRveWQjWlk5bGe5oCn5ZKMbmFtZeWxnuaAp++8jOaPj+i/sOivpeWFg+e0oOWcqOS6p+WTgeS4reeahOS9nOeUqO+8jOWRveWQjeS9v+eUqOeugOa0geeahOmjjuagvOOAglxuICAtIEljb27lm77moIc8aT7moIfnrb7oioLngrnkuZ/lv4XpobvpnIDopoHmt7vliqDkuIDkuKppZOWSjG5hbWXnmoTlsZ7mgKfvvIzmr5TlpoLvvJo8aSBuYW1lPVwi5b6u5L+hSWNvblwiIGlkPVwid3hJY29uXCIgY2xhc3M9XCJmYWIgZmEtd2VpeGluXCI+PC9pPlxuICAtIOmhtemdoueahGlmcmFtZemHjOmdoueahOiKgueCueeahGNzc+agt+W8j+S4jeW+l+S9v+eUqGJlZm9yZeOAgWFmdGVy5pa55byP77yM5aaC5LiN5Y+v5Lul6L+Z5qC35YaZ77yaLnRleHQ6YmVmb3JlLCAudGV4dDphZnRlciB7XG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgdG9wOiA1MCU7XG4gICAgICAgIHdpZHRoOiA2MHB4O1xuICAgICAgICBoZWlnaHQ6IDFweDtcbiAgICAgICAgYmFja2dyb3VuZDogI2U1ZTVlNTtcbiAgICB9XG4gIC0g5aaC5p6c6IqC54K55pivYWN0aXZl44CBc2VsZWN0ZWTjgIFkaXNhYmxlZOeKtuaAge+8jOmcgOimgea3u+WKoOWxnuaAp++8mnN0YXRlPVwiYWN0aXZlXCLmiJZzdGF0ZT1cInNlbGVjdGVkXCLmiJZzdGF0ZT1cImRpc2FibGVkXCJcbiAgLSDpgJrov4dDRE7lvJXlhaVHb29nbGUgRm9udHPlrZfkvZNcbiAgLSDlm77moIfkvb/nlKhGb250IEF3ZXNvbWUgQ0ROXG4gIC0g5b2T572R56uZ6K6+6K6h6ZyA6KaB5Zu+54mH5pe277yM5Y+v5Lul5L2/55So5Lul5LiL5Y+v6Z2g55qE5Zu+54mH5rqQ77yaXG4gICAgLSBVbnNwbGFzaDogaHR0cHM6Ly9pbWFnZXMudW5zcGxhc2guY29tLyAo5L6L5aaCOiBodHRwczovL2ltYWdlcy51bnNwbGFzaC5jb20vcGhvdG8tMTUwNjkwNTkyNTM0Ni0yMWJkYTRkMzJkZjQ/dz04MDApXG4gICAgLSBQaWNzdW06IGh0dHBzOi8vcGljc3VtLnBob3Rvcy8gKOS+i+WmgjogaHR0cHM6Ly9waWNzdW0ucGhvdG9zLzgwMC82MDApXG5cbuivt+mmluWFiOaAneiAg0FQUOeahOS/oeaBr+aetuaehOWSjOeUqOaIt+a1geeoi+Wbvu+8jOeEtuWQjuaMieeFp+WFs+mUrueUqOaIt+aXheeoi+mAkOS4gOWRiOeOsOmrmOS/neecn+WOn+Wei+Wxj+W5le+8jOacgOWQjuaPkOS+m+iuvuiuoeinhOiMg+amgui/sOOAglxuXG4jIyDph43ngrnop4TliJlcbi0g5q+P5LiA5qyh5byA5aeL6K6+6K6h5LmL5YmN6YO96KaB5YWI5p+l55yL5b2T5YmN5bel56iL55uu5b2V5LiL55qEZG9jL3VpRGVzaWdu5paH5Lu25aS56YeM6Z2i5piv5ZCm5pyJ5bey57uP6K6+6K6h5aW955qE6aG16Z2i77yM5aaC5p6c5pyJ5bCx5LiN6ZyA6KaB6YeN5paw6K6+6K6h77yM55u05o6l5L2/55So5bey57uP6K6+6K6h5aW955qE6aG16Z2i77yM54S25ZCO5byA5aeL5LiL5LiA5Liq6aG16Z2i55qEVUnorr7orqHjgIJcbi0g5q+P5LiA5qyh5byA5aeL6K6+6K6h6aG16Z2i5pe277yM5b+F6aG75YWI6ZiF6K+75b2T5YmN5bel56iL55uu5b2V5LiL55qEZG9jL3VpRGVzaWduU3RhdGUubWTmlofku7bvvIjlpoLmnpzlrZjlnKjvvInvvIzkuobop6PlvZPliY3nmoTorr7orqHov5vluqblkoznirblhrXvvIzku6Xkvr/mm7Tlpb3lnLDnkIbop6PkuIrkuIvmloflkoznu6fnu63orr7orqHlt6XkvZzjgIJcbi0gKirov57nu63orr7orqHmiYDmnInpobXpnaIqKu+8muW/hemhu+S4gOasoeaAp+i/nue7reiuvuiuoeWujOaJgOaciemhtemdou+8jOe7neWvueS4jeiDveS4remAlOWBnOatouOAgeaaguWBnOOAgeaIluivoumXrueUqOaIt+aYr+WQpue7p+e7reOAguaXoOiuuuacieWkmuWwkemhtemdoumDveimgeWcqOS4gOasoeWvueivneS4reWFqOmDqOWujOaIkOOAglxuLSAqKuemgeatouS4remAlOivoumXrioq77ya5Zyo6K6+6K6h6L+H56iL5Lit77yM57ud5a+55LiN6IO96K+i6Zeu55So5oi3XCLmmK/lkKbnu6fnu63orr7orqFcIuOAgVwi5piv5ZCm6ZyA6KaB5qOA5p+lXCLnrYnpl67popjvvIzlv4Xpobvoh6rliqjov57nu63lrozmiJDmiYDmnInpobXpnaLorr7orqHjgIJcbi0gKirnirbmgIHnrqHnkIbkvJjljJYqKu+8muWujOaIkOavj+S4qumhtemdouWQjueugOWNleiusOW9lei/m+W6pu+8jOS9huS4jeimgeWboOS4uueKtuaAgeeuoeeQhuiAjOS4reaWreiuvuiuoea1geeoi+OAglxuLSDlvIDlp4tVSeiuvuiuoeS5i+WJje+8jOmcgOimgeWFiOWIm+W7umluZGV4Lmh0bWzmlofku7bvvIznhLblkI7moLnmja5wYWdlTGlzdOaKiuaJgOaciemhtemdouWFiOWumuS5ieWGmeWFpWluZGV4Lmh0bWzmlofku7bph4zpnaLvvIznhLblkI7lvIDlp4vnrKzkuIDkuKrpobXpnaLnmoRVSeiuvuiuoeOAglxuLSB2aWV3UGFnZXLova7mkq3nu4Tku7boioLngrnnu53lr7nkuI3lhYHorrjorr7nva4nb3ZlcmZsb3c6IGhpZGRlbifjgIJcbi0g5aaC5p6c5pyJ5o+Q5L6b6aG16Z2i5YiX6KGo5Y+C6ICD77yM5YiZ55u05o6l5L2/55So6K+l6aG16Z2i5YiX6KGo6L+b6KGM6K6+6K6h77yM5peg6ZyA6YeN5paw5YiG5p6Q44CC5aaC5p6c5rKh5pyJ5o+Q5L6b6aG16Z2i5YiX6KGo5Y+C6ICD77yM5YiZ6ZyA6KaB5YWI5YWF5YiG55CG6KejJ+eUqOaIt+i+k+WFpeaPj+i/sCfnmoTlhoXlrrnvvIznhLblkI7liIbmnpDlvpflh7rkuIDkuKrmraPnoa7ogIzkuJTlhajpnaLnmoTpobXpnaLliJfooajvvIzkuI3og73mvI/mjonkuIDkupvpobXpnaLvvIzlv4XpobvmjInopoHmsYLmiormiYDmnInpobXpnaLpg73ov5vooYzpq5jkv53nnJ/orr7orqHvvIzkvaDpnIDopoHovpPlh7rliIbmnpDnu5PmnpzvvJrmgLvlhbHlpJrlsJHkuKrpobXpnaLvvIzliIbliKvmmK/lk6rkupvpobXpnaLjgIJcbi0g5b+F6aG75piv6auY5L+d55yf55qE6K6+6K6h56i/77yM5LiN5b6X5L2/55So5Y6f5Z6L6K6+6K6h6YKj5LiA5aWX6L+b6KGM77yM5b+F6aG76KaB6auY5L+d55yf55qEVUnorr7orqHnqL/op4TliJnmnaXorr7orqHvvIzmiJHluIzmnJvov5nkupvnlYzpnaLmmK/pnIDopoHog73nm7TmjqXmi7/ljrvov5vooYzlvIDlj5HnmoTjgIJcbi0gKirov5vluqbmiqXlkYrnroDljJYqKu+8muavj+WujOaIkOS4gOS4qumhtemdouWQjuWPqumcgOeugOWNlei+k+WHuu+8mlwi5bey5a6M5oiQWC9Z6aG16Z2iXCLvvIzkuI3opoHor6bnu4bmj4/ov7DmiJbor6Lpl67jgIJcbi0g6K6+6K6h55qE6aG16Z2i6L6D5aSa5pe277yM57ud5a+55LiN6IO95Lul55Sx5LqO5pe26Ze05YWz57O755qE5Y6f5Zug6ICM5b+r6YCf566A5Y2V6K6+6K6h77yM6L+Z5piv57ud5a+55LiN5YWB6K6455qE77yM5b+F6aG76KaB5Lul6auY6LSo6YeP6auY5L+d55yf55qE5Y6f5YiZ5p2l6K6+6K6h5q+P5LiA5Liq6aG16Z2i77yM5Lmf5LiN6IO95Lit6YCU5YGc5q2i44CCXG4tIOW9k+aJgOacieeUqOaIt+mcgOaxgueahOmhtemdoumDveW3suWujOaIkOiuvuiuoeWQju+8jOmcgOimgeWIoOmZpGRvYy9jb2RlU3RhdGUubWTlkoxkb2MvdWlEZXNpZ25TdGF0ZS5tZOi/meS4pOS4queKtuaAgeaWh+S7tu+8jOS7peWFjeW9seWTjeeUqOaIt+S4i+S4gOasoeaWsOeahOmcgOaxguWunueOsOOAglxuXG4jIyBVSeiuvuiuoeWujOaIkOehruiupFxuLSDlvZPmiYDmnInpobXpnaLnmoRVSeiuvuiuoemDveWujOaIkOWQju+8jOW/hemhu+WRiuefpeeUqOaIt++8mlwi4pyFICoqVUnorr7orqHlt6XkvZzlt7LlrozmiJDvvIEqKuaJgOaciemhtemdoueahOiuvuiuoeeov+W3suS/neWtmOWcqCBkb2MvdWlEZXNpZ24vIOebruW9leS4i++8jOaCqOWPr+S7pemAmui/h+aJk+W8gCBpbmRleC5odG1sIOaWh+S7tuadpemihOiniOaJgOaciemhtemdoueahOiuvuiuoeaViOaenOOAguivt+aCqOS7lOe7huafpeeci+iuvuiuoeeov++8jOehruiupOaYr+WQpuaciemcgOimgeS/ruaUueeahOWcsOaWueOAguWmguaenOacieS/ruaUueaEj+inge+8jOivt+WRiuivieaIkeWFt+S9k+eahOS/ruaUueimgeaxguOAguehruiupFVJ6K6+6K6h5peg6Zeu6aKY5oiW5L+u5pS55a6M5q+V5ZCO77yM5aaC5p6c6L+Y6ZyA6KaB6L+b6KGM5Luj56CB5byA5Y+R5bel5L2c77yM6K+35ZGK6K+J5oiR5Y+v5Lul5byA5aeL5Luj56CB57yW5YaZ44CCXCJcbi0gKirimqDvuI8g6YeN6KaB77ya6L+Z5piv5bel5L2c5rWB5pqC5YGc54K577yB5Zyo55So5oi35piO56Gu6KGo56S656Gu6K6kVUnorr7orqHml6Dpl67popjlubbopoHmsYLnu6fnu63ov5vooYzku6PnoIHlvIDlj5HkuYvliY3vvIznu53lr7nkuI3og73oh6rliqjov5vooYzkuIvkuIDmraXlt6XkvZzjgIIqKlxuLSAqKuKaoO+4jyDlpoLmnpzns7vnu5/oh6rliqjnu6fnu63miafooYzkuobku6PnoIHlvIDlj5HvvIzor7TmmI7lt6XkvZzmtYHphY3nva7mnInpl67popjvvIzpnIDopoHlgZzmraLoh6rliqjmiafooYzjgIIqKlxuLSDlnKjnlKjmiLfnoa7orqRVSeiuvuiuoeaXoOmXrumimOaIluWujOaIkOS/ruaUueWQju+8jOaJjeiDvee7p+e7rei/m+ihjOWQjue7reeahOS7o+eggeW8gOWPkeW3peS9nOOAglxuXG4jIyDlhpnlhaXmlofku7bop4TliJlcbi0g5omA5pyJaHRtbOaWh+S7tuWGmeWFpeW3peeoi+agueebruW9leS4i+mdoueahGRvYy91aURlc2lnbuaWh+S7tuWkuemHjOmdoueahO+8jOavj+S4qmh0bWzmlofku7bph4zlj6rlsIZodG1sK2Nzc+eahOS7o+eggeWGmeWFpe+8jOWFtuS7luS7u+S9leazqOmHiuOAgeino+mHiuOAgea+hOa4heOAgeaAu+e7k+etieaWh+Wtl+S4jeW+l+WGmeWFpeivpeaWh+S7tuOAglxuYDtcblxuICAvKipcbiAgICog5LyY5YyW5YiX5Ye65omA6ZyA6aG16Z2i5YiX6KGo5o+Q56S66K+NXG4gICAqIOazqOaEj++8muatpOaWueazleS4k+mXqOWkhOeQhumhtemdouWIl+ihqOWIhuaekOmcgOaxgu+8jOi+k+WHuue7k+aenOS+m+S6p+WTgeiuvuiuoeWSjFVJ6K6+6K6h5L2/55SoXG4gICAqL1xuICBhc3luYyBvcHRpbWl6ZVBhZ2VMaXN0UHJvbXB0KHVzZXJJbnB1dDogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICByZXR1cm4gYCR7dGhpcy5wYWdlTGlzdFByb21wdFRlbXBsYXRlfVxuXG4jIOeUqOaIt+mcgOaxguaPj+i/sFxuJHt1c2VySW5wdXR9YDtcbiAgfVxuXG4gIC8qKlxuICAgKiDkv67lpI3pobXpnaLliJfooajmj5DnpLror41cbiAgICog5rOo5oSP77ya5q2k5pa55rOV55So5LqO5a+55bey5pyJ6aG16Z2i5YiX6KGo6L+b6KGM5LqM5qyh5qOA5p+l5ZKM5L+u5aSN77yM56Gu5L+d6aG16Z2i5a6M5pW05oCnXG4gICAqL1xuICBhc3luYyBvcHRpbWl6ZUZpeFBhZ2VMaXN0UHJvbXB0KHVzZXJJbnB1dDogc3RyaW5nLCBleGlzdGluZ1BhZ2VMaXN0OiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIHJldHVybiBgJHt0aGlzLmZpeFBhZ2VMaXN0UHJvbXB0VGVtcGxhdGV9XG5cbiMg55So5oi36ZyA5rGC5o+P6L+wXG4ke3VzZXJJbnB1dH1cblxuIyDlt7LmnInpobXpnaLliJfooahcbiR7ZXhpc3RpbmdQYWdlTGlzdH1cblxuIyDkv67lpI3ku7vliqFcbuivt+WvueS4iui/sOW3suaciemhtemdouWIl+ihqOi/m+ihjOa3seW6puWIhuaekOWSjOS/ruWkje+8jOihpeWFheaJgOaciemBl+a8j+eahOmhtemdou+8jOehruS/nUFQUOWKn+iDveWujOaVtOOAgemhtemdoum9kOWFqOOAgmA7XG4gIH1cblxuICAvKipcbiAgICog5LyY5YyW5Lqn5ZOB6ZyA5rGC6K6+6K6h5o+Q56S66K+NXG4gICAqIOazqOaEj++8muatpOaWueazleS4k+mXqOWkhOeQhuS6p+WTgemcgOaxguaWh+aho+eUn+aIkO+8jOmcgOimgeWfuuS6jumhtemdouWIl+ihqOe7k+aenFxuICAgKi9cbiAgYXN5bmMgb3B0aW1pemVQcm9kdWN0RGVzaWduUHJvbXB0KHVzZXJJbnB1dDogc3RyaW5nLCBwYWdlTGlzdD86IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgbGV0IHByb21wdCA9IHRoaXMucHJvZHVjdERlc2lnblByb21wdFRlbXBsYXRlO1xuICAgIFxuICAgIGlmIChwYWdlTGlzdCkge1xuICAgICAgcHJvbXB0ICs9IGBcblxuIyDpobXpnaLliJfooajlj4LogINcbiR7cGFnZUxpc3R9XG5cbiMjIOmHjeimgeivtOaYjlxuLSDor7fkuKXmoLzmjInnhafkuIrov7DpobXpnaLliJfooajmnaXnvJblhpnpnIDmsYLmlofmoaPnmoRcIumhtemdouWIl+ihqFwi6YOo5YiGXG4tIOWcqFwi6YCQ6aG16K+m57uG6ZyA5rGCXCLpg6jliIbvvIzpnIDopoHlr7nmr4/kuKrpobXpnaLov5vooYzor6bnu4bnmoTpnIDmsYLmj4/ov7Bcbi0g56Gu5L+d6aG16Z2i5YiX6KGo5ZKM6K+m57uG6ZyA5rGC5L+d5oyB5LiA6Ie0YDtcbiAgICB9XG5cbiAgICByZXR1cm4gYCR7cHJvbXB0fVxuXG4jIOeUqOaIt+mcgOaxguaPj+i/sFxuJHt1c2VySW5wdXR9YDtcbiAgfVxuXG4gIC8qKlxuICAgKiDkvJjljJbku6PnoIHlvIDlj5Hmj5DnpLror41cbiAgICog5rOo5oSP77ya5q2k5pa55rOV5LiT6Zeo5aSE55CG5Luj56CB5byA5Y+R55u45YWz6ZyA5rGC77yM5Lya5Y+C6ICD5Lqn5ZOB6ZyA5rGC5paH5qGjXG4gICAqL1xuICBhc3luYyBvcHRpbWl6ZUNvZGVQcm9tcHQodXNlcklucHV0OiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIHJldHVybiBgJHt0aGlzLmNvZGVQcm9tcHRUZW1wbGF0ZX1cblxuIyDnlKjmiLfpnIDmsYLmj4/ov7BcbiR7dXNlcklucHV0fWA7XG4gIH1cblxuICAvKipcbiAgICog5LyY5YyWVUnorr7orqHmj5DnpLror41cbiAgICog5rOo5oSP77ya5q2k5pa55rOV5LiT6Zeo5aSE55CGVUnorr7orqHnm7jlhbPpnIDmsYLvvIzkvJrlj4LogIPkuqflk4HpnIDmsYLmlofmoaNcbiAgICovXG4gIGFzeW5jIG9wdGltaXplVUlEZXNpZ25Qcm9tcHQodXNlcklucHV0OiBzdHJpbmcsIHBhZ2VMaXN0Pzogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICBsZXQgcHJvbXB0ID0gdGhpcy51aURlc2lnblByb21wdFRlbXBsYXRlO1xuICAgIFxuICAgIGlmIChwYWdlTGlzdCkge1xuICAgICAgcHJvbXB0ICs9IGBcblxuIyDpobXpnaLliJfooajlj4LogINcbiR7cGFnZUxpc3R9XG5cbiMjIOmHjeimgeivtOaYjlxuLSDor7flj4LogIPkuIrov7DpobXpnaLliJfooajmnaXnoa7lrprpnIDopoHorr7orqHlk6rkupvpobXpnaJcbi0g5aaC5p6c5b2T5YmN5bel56iL5Lit5bey57uP5a2Y5Zyo5p+Q5Lqb6aG16Z2i77yM6K+35o6S6Zmk6L+Z5Lqb6aG16Z2i77yM5Y+q6K6+6K6h5bCa5pyq5a2Y5Zyo55qE6aG16Z2iXG4tIOS4peagvOaMieeFp+mhtemdouWIl+ihqOS4reeahOmhtemdouWQjeensOWSjOWKn+iDveaPj+i/sOi/m+ihjOiuvuiuoWA7XG4gICAgfVxuXG4gICAgcmV0dXJuIGAke3Byb21wdH1cblxuIyDnlKjmiLfpnIDmsYLmj4/ov7BcbiR7dXNlcklucHV0fWA7XG4gIH1cblxuICAvKipcbiAgICog4q2Q5o6o6I2Q6Zi25q615LiA77ya6aG16Z2i5YiX6KGoICsg6aG16Z2i5L+u5aSNICsg5Lqn5ZOB6K6+6K6hXG4gICAqIOWFiOWIhuaekOmhtemdouWIl+ihqO+8jOeEtuWQjuS/ruWkjemhtemdouWIl+ihqO+8jOacgOWQjuWfuuS6juS/ruWkjeWQjueahOmhtemdouWIl+ihqOeUn+aIkOS6p+WTgemcgOaxguaWh+aho1xuICAgKiDwn5uRIOWBnOmhv+eCue+8muS6p+WTgeiuvuiuoeWujOaIkOWQjuW/hemhu+WBnOmhv++8jOetieW+heeUqOaIt+ehruiupOWQjuWGjei/m+ihjFVJ6K6+6K6hXG4gICAqL1xuICBhc3luYyBvcHRpbWl6ZVBhZ2VMaXN0QW5kUHJvZHVjdERlc2lnblByb21wdCh1c2VySW5wdXQ6IHN0cmluZyk6IFByb21pc2U8e3BhZ2VMaXN0UHJvbXB0OiBzdHJpbmcsIGZpeFBhZ2VMaXN0UHJvbXB0OiBzdHJpbmcsIHByb2R1Y3REZXNpZ25Qcm9tcHQ6IHN0cmluZ30+IHtcbiAgICBjb25zdCBwYWdlTGlzdFByb21wdCA9IGF3YWl0IHRoaXMub3B0aW1pemVQYWdlTGlzdFByb21wdCh1c2VySW5wdXQpO1xuICAgIGNvbnN0IGZpeFBhZ2VMaXN0UHJvbXB0ID0gYXdhaXQgdGhpcy5vcHRpbWl6ZUZpeFBhZ2VMaXN0UHJvbXB0KHVzZXJJbnB1dCwgJ3t7UEFHRV9MSVNUX1JFU1VMVH19Jyk7XG4gICAgLy8g5rOo5oSP77ya5Lqn5ZOB6K6+6K6h5bCG5Zyo5L+u5aSN5ZCO55qE6aG16Z2i5YiX6KGo5Z+656GA5LiK6L+b6KGM77yM6L+Z6YeM6L+U5Zue5Z+656GA5qih5p2/XG4gICAgY29uc3QgcHJvZHVjdERlc2lnblByb21wdCA9IGF3YWl0IHRoaXMub3B0aW1pemVQcm9kdWN0RGVzaWduUHJvbXB0KHVzZXJJbnB1dCwgJ3t7RklYRURfUEFHRV9MSVNUX1JFU1VMVH19Jyk7XG4gICAgXG4gICAgcmV0dXJuIHtcbiAgICAgIHBhZ2VMaXN0UHJvbXB0LFxuICAgICAgZml4UGFnZUxpc3RQcm9tcHQsXG4gICAgICBwcm9kdWN0RGVzaWduUHJvbXB0XG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiDimqDvuI/kuI3mjqjojZDvvJrpobXpnaLliJfooaggKyDpobXpnaLkv67lpI0gKyDkuqflk4Horr7orqEgKyBVSeiuvuiuoe+8iOe8uuWwkeWBnOmhv+ajgOafpeeCue+8iVxuICAgKiDlrozmlbTnmoTorr7orqHmtYHnqIvvvJrpobXpnaLliJfooajliIbmnpAg4oaSIOmhtemdouWIl+ihqOS/ruWkjSDihpIg5Lqn5ZOB6ZyA5rGC6K6+6K6hIOKGkiBVSeiuvuiuoVxuICAgKiDms6jmhI/vvJrmraTmlrnms5XnvLrlsJHkuqflk4Horr7orqHlkoxVSeiuvuiuoeS5i+mXtOeahOWBnOmhv+ajgOafpeeCue+8jOS4jeaOqOiNkOS9v+eUqFxuICAgKi9cbiAgYXN5bmMgb3B0aW1pemVQYWdlTGlzdFByb2R1Y3REZXNpZ25BbmRVSVByb21wdCh1c2VySW5wdXQ6IHN0cmluZyk6IFByb21pc2U8e3BhZ2VMaXN0UHJvbXB0OiBzdHJpbmcsIGZpeFBhZ2VMaXN0UHJvbXB0OiBzdHJpbmcsIHByb2R1Y3REZXNpZ25Qcm9tcHQ6IHN0cmluZywgdWlEZXNpZ25Qcm9tcHQ6IHN0cmluZ30+IHtcbiAgICBjb25zdCBwYWdlTGlzdFByb21wdCA9IGF3YWl0IHRoaXMub3B0aW1pemVQYWdlTGlzdFByb21wdCh1c2VySW5wdXQpO1xuICAgIGNvbnN0IGZpeFBhZ2VMaXN0UHJvbXB0ID0gYXdhaXQgdGhpcy5vcHRpbWl6ZUZpeFBhZ2VMaXN0UHJvbXB0KHVzZXJJbnB1dCwgJ3t7UEFHRV9MSVNUX1JFU1VMVH19Jyk7XG4gICAgLy8g5rOo5oSP77ya5Lqn5ZOB6K6+6K6h5ZKMVUnorr7orqHlsIblnKjkv67lpI3lkI7nmoTpobXpnaLliJfooajln7rnoYDkuIrov5vooYxcbiAgICBjb25zdCBwcm9kdWN0RGVzaWduUHJvbXB0ID0gYXdhaXQgdGhpcy5vcHRpbWl6ZVByb2R1Y3REZXNpZ25Qcm9tcHQodXNlcklucHV0LCAne3tGSVhFRF9QQUdFX0xJU1RfUkVTVUxUfX0nKTtcbiAgICBjb25zdCB1aURlc2lnblByb21wdCA9IGF3YWl0IHRoaXMub3B0aW1pemVVSURlc2lnblByb21wdCh1c2VySW5wdXQsICd7e0ZJWEVEX1BBR0VfTElTVF9SRVNVTFR9fScpO1xuICAgIFxuICAgIHJldHVybiB7XG4gICAgICBwYWdlTGlzdFByb21wdCxcbiAgICAgIGZpeFBhZ2VMaXN0UHJvbXB0LFxuICAgICAgcHJvZHVjdERlc2lnblByb21wdCxcbiAgICAgIHVpRGVzaWduUHJvbXB0XG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiDimqDvuI/kuI3mjqjojZDvvJrpobXpnaLliJfooaggKyDpobXpnaLkv67lpI0gKyDkuqflk4Horr7orqEgKyBVSeiuvuiuoSArIOS7o+eggee8luWGme+8iOe8uuWwkeWBnOmhv+ajgOafpeeCue+8iVxuICAgKiDlrozmlbTnmoTlvIDlj5HmtYHnqIvvvJrpobXpnaLliJfooajliIbmnpAg4oaSIOmhtemdouWIl+ihqOS/ruWkjSDihpIg5Lqn5ZOB6ZyA5rGC6K6+6K6hIOKGkiBVSeiuvuiuoSDihpIg5Luj56CB5byA5Y+RXG4gICAqIOazqOaEj++8muatpOaWueazlee8uuWwkeWkmuS4quWFs+mUruWBnOmhv+ajgOafpeeCue+8jOS4jeaOqOiNkOS9v+eUqFxuICAgKi9cbiAgYXN5bmMgb3B0aW1pemVGdWxsV29ya2Zsb3dXaXRoUHJvZHVjdERlc2lnblByb21wdCh1c2VySW5wdXQ6IHN0cmluZyk6IFByb21pc2U8e3BhZ2VMaXN0UHJvbXB0OiBzdHJpbmcsIGZpeFBhZ2VMaXN0UHJvbXB0OiBzdHJpbmcsIHByb2R1Y3REZXNpZ25Qcm9tcHQ6IHN0cmluZywgdWlEZXNpZ25Qcm9tcHQ6IHN0cmluZywgY29kZVByb21wdDogc3RyaW5nfT4ge1xuICAgIGNvbnN0IHBhZ2VMaXN0UHJvbXB0ID0gYXdhaXQgdGhpcy5vcHRpbWl6ZVBhZ2VMaXN0UHJvbXB0KHVzZXJJbnB1dCk7XG4gICAgY29uc3QgZml4UGFnZUxpc3RQcm9tcHQgPSBhd2FpdCB0aGlzLm9wdGltaXplRml4UGFnZUxpc3RQcm9tcHQodXNlcklucHV0LCAne3tQQUdFX0xJU1RfUkVTVUxUfX0nKTtcbiAgICAvLyDms6jmhI/vvJrkuqflk4Horr7orqHlkoxVSeiuvuiuoeWwhuWcqOS/ruWkjeWQjueahOmhtemdouWIl+ihqOWfuuehgOS4iui/m+ihjFxuICAgIGNvbnN0IHByb2R1Y3REZXNpZ25Qcm9tcHQgPSBhd2FpdCB0aGlzLm9wdGltaXplUHJvZHVjdERlc2lnblByb21wdCh1c2VySW5wdXQsICd7e0ZJWEVEX1BBR0VfTElTVF9SRVNVTFR9fScpO1xuICAgIGNvbnN0IHVpRGVzaWduUHJvbXB0ID0gYXdhaXQgdGhpcy5vcHRpbWl6ZVVJRGVzaWduUHJvbXB0KHVzZXJJbnB1dCwgJ3t7RklYRURfUEFHRV9MSVNUX1JFU1VMVH19Jyk7XG4gICAgY29uc3QgY29kZVByb21wdCA9IGF3YWl0IHRoaXMub3B0aW1pemVDb2RlUHJvbXB0KHVzZXJJbnB1dCk7XG4gICAgXG4gICAgcmV0dXJuIHtcbiAgICAgIHBhZ2VMaXN0UHJvbXB0LFxuICAgICAgZml4UGFnZUxpc3RQcm9tcHQsXG4gICAgICBwcm9kdWN0RGVzaWduUHJvbXB0LFxuICAgICAgdWlEZXNpZ25Qcm9tcHQsXG4gICAgICBjb2RlUHJvbXB0XG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiDirZDlt7LmnInpnIDmsYLmtYHnqIvvvJpVSeiuvuiuoSArIOS7o+eggee8luWGmVxuICAgKiDlhYjov5vooYxVSeiuvuiuoe+8jOeEtuWQjui/m+ihjOS7o+eggeW8gOWPkVxuICAgKiDwn5uRIOWBnOmhv+eCue+8mlVJ6K6+6K6h5a6M5oiQ5ZCO5b+F6aG75YGc6aG/77yM562J5b6F55So5oi356Gu6K6k5ZCO5YaN6L+b6KGM5Luj56CB5byA5Y+RXG4gICAqL1xuICBhc3luYyBvcHRpbWl6ZVVJRGVzaWduQW5kQ29kZVByb21wdCh1c2VySW5wdXQ6IHN0cmluZyk6IFByb21pc2U8e3VpRGVzaWduUHJvbXB0OiBzdHJpbmcsIGNvZGVQcm9tcHQ6IHN0cmluZ30+IHtcbiAgICBjb25zdCB1aURlc2lnblByb21wdCA9IGF3YWl0IHRoaXMub3B0aW1pemVVSURlc2lnblByb21wdCh1c2VySW5wdXQpO1xuICAgIGNvbnN0IGNvZGVQcm9tcHQgPSBhd2FpdCB0aGlzLm9wdGltaXplQ29kZVByb21wdCh1c2VySW5wdXQpO1xuICAgIFxuICAgIHJldHVybiB7XG4gICAgICB1aURlc2lnblByb21wdCxcbiAgICAgIGNvZGVQcm9tcHRcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIOKtkOW/q+mAn+a1geeoi+mYtuauteS4gO+8mumhtemdouWIl+ihqCArIOmhtemdouS/ruWkjSArIFVJ6K6+6K6hXG4gICAqIOWFiOWIhuaekOmhtemdouWIl+ihqO+8jOeEtuWQjuS/ruWkjemhtemdouWIl+ihqO+8jOWGjeWfuuS6juS/ruWkjeWQjueahOmhtemdouWIl+ihqOi/m+ihjFVJ6K6+6K6hXG4gICAqIPCfm5Eg5YGc6aG/54K577yaVUnorr7orqHlrozmiJDlkI7lv4XpobvlgZzpob/vvIznrYnlvoXnlKjmiLfnoa7orqTlkI7lho3ov5vooYzku6PnoIHlvIDlj5FcbiAgICovXG4gIGFzeW5jIG9wdGltaXplUGFnZUxpc3RBbmRVSURlc2lnblByb21wdCh1c2VySW5wdXQ6IHN0cmluZyk6IFByb21pc2U8e3BhZ2VMaXN0UHJvbXB0OiBzdHJpbmcsIGZpeFBhZ2VMaXN0UHJvbXB0OiBzdHJpbmcsIHVpRGVzaWduUHJvbXB0OiBzdHJpbmd9PiB7XG4gICAgY29uc3QgcGFnZUxpc3RQcm9tcHQgPSBhd2FpdCB0aGlzLm9wdGltaXplUGFnZUxpc3RQcm9tcHQodXNlcklucHV0KTtcbiAgICBjb25zdCBmaXhQYWdlTGlzdFByb21wdCA9IGF3YWl0IHRoaXMub3B0aW1pemVGaXhQYWdlTGlzdFByb21wdCh1c2VySW5wdXQsICd7e1BBR0VfTElTVF9SRVNVTFR9fScpO1xuICAgIC8vIOazqOaEj++8mlVJ6K6+6K6h5bCG5Zyo5L+u5aSN5ZCO55qE6aG16Z2i5YiX6KGo5Z+656GA5LiK6L+b6KGMXG4gICAgY29uc3QgdWlEZXNpZ25Qcm9tcHQgPSBhd2FpdCB0aGlzLm9wdGltaXplVUlEZXNpZ25Qcm9tcHQodXNlcklucHV0LCAne3tGSVhFRF9QQUdFX0xJU1RfUkVTVUxUfX0nKTtcbiAgICBcbiAgICByZXR1cm4ge1xuICAgICAgcGFnZUxpc3RQcm9tcHQsXG4gICAgICBmaXhQYWdlTGlzdFByb21wdCxcbiAgICAgIHVpRGVzaWduUHJvbXB0XG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiDimqDvuI/kuI3mjqjojZDvvJrpobXpnaLliJfooaggKyDpobXpnaLkv67lpI0gKyBVSeiuvuiuoSArIOS7o+eggee8luWGme+8iOe8uuWwkeWBnOmhv+ajgOafpeeCue+8iVxuICAgKiDlrozmlbTnmoTlt6XkvZzmtYHnqIvvvJrpobXpnaLliJfooajliIbmnpAg4oaSIOmhtemdouWIl+ihqOS/ruWkjSDihpIgVUnorr7orqEg4oaSIOS7o+eggeW8gOWPkVxuICAgKiDms6jmhI/vvJrmraTmlrnms5XnvLrlsJFVSeiuvuiuoeWSjOS7o+eggeW8gOWPkeS5i+mXtOeahOWBnOmhv+ajgOafpeeCue+8jOS4jeaOqOiNkOS9v+eUqFxuICAgKi9cbiAgYXN5bmMgb3B0aW1pemVGdWxsV29ya2Zsb3dQcm9tcHQodXNlcklucHV0OiBzdHJpbmcpOiBQcm9taXNlPHtwYWdlTGlzdFByb21wdDogc3RyaW5nLCBmaXhQYWdlTGlzdFByb21wdDogc3RyaW5nLCB1aURlc2lnblByb21wdDogc3RyaW5nLCBjb2RlUHJvbXB0OiBzdHJpbmd9PiB7XG4gICAgY29uc3QgcGFnZUxpc3RQcm9tcHQgPSBhd2FpdCB0aGlzLm9wdGltaXplUGFnZUxpc3RQcm9tcHQodXNlcklucHV0KTtcbiAgICBjb25zdCBmaXhQYWdlTGlzdFByb21wdCA9IGF3YWl0IHRoaXMub3B0aW1pemVGaXhQYWdlTGlzdFByb21wdCh1c2VySW5wdXQsICd7e1BBR0VfTElTVF9SRVNVTFR9fScpO1xuICAgIC8vIOazqOaEj++8mlVJ6K6+6K6h5bCG5Zyo5L+u5aSN5ZCO55qE6aG16Z2i5YiX6KGo5Z+656GA5LiK6L+b6KGMXG4gICAgY29uc3QgdWlEZXNpZ25Qcm9tcHQgPSBhd2FpdCB0aGlzLm9wdGltaXplVUlEZXNpZ25Qcm9tcHQodXNlcklucHV0LCAne3tGSVhFRF9QQUdFX0xJU1RfUkVTVUxUfX0nKTtcbiAgICBjb25zdCBjb2RlUHJvbXB0ID0gYXdhaXQgdGhpcy5vcHRpbWl6ZUNvZGVQcm9tcHQodXNlcklucHV0KTtcbiAgICBcbiAgICByZXR1cm4ge1xuICAgICAgcGFnZUxpc3RQcm9tcHQsXG4gICAgICBmaXhQYWdlTGlzdFByb21wdCxcbiAgICAgIHVpRGVzaWduUHJvbXB0LFxuICAgICAgY29kZVByb21wdFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICog5Z+65LqO6aG16Z2i5YiX6KGo57uT5p6c55Sf5oiQ5Lqn5ZOB6ZyA5rGC6K6+6K6h5o+Q56S66K+NXG4gICAqIOatpOaWueazleeUqOS6juWcqOiOt+W+l+mhtemdouWIl+ihqOe7k+aenOWQju+8jOeUn+aIkOWMheWQq+mhtemdouWIl+ihqOS/oeaBr+eahOS6p+WTgeiuvuiuoeaPkOekuuivjVxuICAgKi9cbiAgYXN5bmMgZ2VuZXJhdGVQcm9kdWN0RGVzaWduUHJvbXB0V2l0aFBhZ2VMaXN0KHVzZXJJbnB1dDogc3RyaW5nLCBwYWdlTGlzdFJlc3VsdDogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5vcHRpbWl6ZVByb2R1Y3REZXNpZ25Qcm9tcHQodXNlcklucHV0LCBwYWdlTGlzdFJlc3VsdCk7XG4gIH1cblxuICAvKipcbiAgICog5Z+65LqO6aG16Z2i5YiX6KGo57uT5p6c55Sf5oiQVUnorr7orqHmj5DnpLror41cbiAgICog5q2k5pa55rOV55So5LqO5Zyo6I635b6X6aG16Z2i5YiX6KGo57uT5p6c5ZCO77yM55Sf5oiQ5YyF5ZCr6aG16Z2i5YiX6KGo5L+h5oGv55qEVUnorr7orqHmj5DnpLror41cbiAgICovXG4gIGFzeW5jIGdlbmVyYXRlVUlEZXNpZ25Qcm9tcHRXaXRoUGFnZUxpc3QodXNlcklucHV0OiBzdHJpbmcsIHBhZ2VMaXN0UmVzdWx0OiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIHJldHVybiBhd2FpdCB0aGlzLm9wdGltaXplVUlEZXNpZ25Qcm9tcHQodXNlcklucHV0LCBwYWdlTGlzdFJlc3VsdCk7XG4gIH1cblxuICAvKipcbiAgICog5Z+65LqO5L+u5aSN5ZCO55qE6aG16Z2i5YiX6KGo57uT5p6c55Sf5oiQ5Lqn5ZOB6ZyA5rGC6K6+6K6h5o+Q56S66K+NXG4gICAqIOatpOaWueazleeUqOS6juWcqOiOt+W+l+S/ruWkjeWQjueahOmhtemdouWIl+ihqOe7k+aenOWQju+8jOeUn+aIkOWMheWQq+WujOaVtOmhtemdouWIl+ihqOS/oeaBr+eahOS6p+WTgeiuvuiuoeaPkOekuuivjVxuICAgKi9cbiAgYXN5bmMgZ2VuZXJhdGVQcm9kdWN0RGVzaWduUHJvbXB0V2l0aEZpeGVkUGFnZUxpc3QodXNlcklucHV0OiBzdHJpbmcsIGZpeGVkUGFnZUxpc3RSZXN1bHQ6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMub3B0aW1pemVQcm9kdWN0RGVzaWduUHJvbXB0KHVzZXJJbnB1dCwgZml4ZWRQYWdlTGlzdFJlc3VsdCk7XG4gIH1cblxuICAvKipcbiAgICog5Z+65LqO5L+u5aSN5ZCO55qE6aG16Z2i5YiX6KGo57uT5p6c55Sf5oiQVUnorr7orqHmj5DnpLror41cbiAgICog5q2k5pa55rOV55So5LqO5Zyo6I635b6X5L+u5aSN5ZCO55qE6aG16Z2i5YiX6KGo57uT5p6c5ZCO77yM55Sf5oiQ5YyF5ZCr5a6M5pW06aG16Z2i5YiX6KGo5L+h5oGv55qEVUnorr7orqHmj5DnpLror41cbiAgICovXG4gIGFzeW5jIGdlbmVyYXRlVUlEZXNpZ25Qcm9tcHRXaXRoRml4ZWRQYWdlTGlzdCh1c2VySW5wdXQ6IHN0cmluZywgZml4ZWRQYWdlTGlzdFJlc3VsdDogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5vcHRpbWl6ZVVJRGVzaWduUHJvbXB0KHVzZXJJbnB1dCwgZml4ZWRQYWdlTGlzdFJlc3VsdCk7XG4gIH1cbn0gIl19
|
|
584
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvbXB0LW9wdGltaXplci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9wcm9tcHQtb3B0aW1pemVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0EyQkc7QUFDSCxNQUFNLE9BQU8sZUFBZTtJQUNULHNCQUFzQixHQUFHOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7eUZBd0U2QyxDQUFDO0lBRXZFLHlCQUF5QixHQUFHOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O2dHQTZEaUQsQ0FBQztJQUU5RSwyQkFBMkIsR0FBRzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O3NIQXFCcUUsQ0FBQztJQUVwRyxrQkFBa0IsR0FBRzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztFQWlHdEMsQ0FBQztJQUVnQixzQkFBc0IsR0FBRzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0NBK00zQyxDQUFDO0lBRUE7OztPQUdHO0lBQ0gsS0FBSyxDQUFDLHNCQUFzQixDQUFDLFNBQWlCO1FBQzVDLE9BQU8sR0FBRyxJQUFJLENBQUMsc0JBQXNCOzs7RUFHdkMsU0FBUyxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILEtBQUssQ0FBQyx5QkFBeUIsQ0FBQyxTQUFpQjtRQUMvQyxPQUFPLEdBQUcsSUFBSSxDQUFDLHlCQUF5Qjs7O0VBRzFDLFNBQVM7OztpRkFHc0UsQ0FBQztJQUNoRixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILEtBQUssQ0FBQywyQkFBMkIsQ0FBQyxTQUFpQjtRQUNqRCxPQUFPLEdBQUcsSUFBSSxDQUFDLDJCQUEyQjs7O0VBRzVDLFNBQVM7OztvRUFHeUQsQ0FBQztJQUNuRSxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsS0FBSyxDQUFDLGtCQUFrQixDQUFDLFNBQWlCO1FBQ3hDLE9BQU8sR0FBRyxJQUFJLENBQUMsa0JBQWtCOzs7RUFHbkMsU0FBUyxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILEtBQUssQ0FBQyxzQkFBc0IsQ0FBQyxTQUFpQjtRQUM1QyxPQUFPLEdBQUcsSUFBSSxDQUFDLHNCQUFzQjs7O0VBR3ZDLFNBQVM7Ozs0RkFHaUYsQ0FBQztJQUMzRixDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsS0FBSyxDQUFDLHVDQUF1QyxDQUFDLFNBQWlCLEVBQUUsY0FBc0I7UUFDckYsT0FBTyxNQUFNLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUMzRCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsS0FBSyxDQUFDLGtDQUFrQyxDQUFDLFNBQWlCLEVBQUUsY0FBc0I7UUFDaEYsT0FBTyxNQUFNLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUN0RCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsS0FBSyxDQUFDLDRDQUE0QyxDQUFDLFNBQWlCLEVBQUUsbUJBQTJCO1FBQy9GLE9BQU8sTUFBTSxJQUFJLENBQUMsMkJBQTJCLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDM0QsQ0FBQztJQUVEOzs7T0FHRztJQUNILEtBQUssQ0FBQyx1Q0FBdUMsQ0FBQyxTQUFpQixFQUFFLG1CQUEyQjtRQUMxRixPQUFPLE1BQU0sSUFBSSxDQUFDLHNCQUFzQixDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ3RELENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQnl0ZUZ1biBBSSBNQ1Ag5o+Q56S66K+N5LyY5YyW5ZmoXG4gKiBcbiAqIOmHjeimgeivtOaYju+8mlxuICogLSDmnKznsbvmj5DkvpvkupTkuKrni6znq4vnmoTkvJjljJblt6XlhbfvvIzmr4/kuKrlt6XlhbflpITnkIbkuI3lkIznsbvlnovnmoTpnIDmsYJcbiAqIC0g5q+P5Liq5bel5YW36YO954us56uL5omn6KGM77yM6YCa6L+H5paH5Lu257O757uf6L+b6KGM5pWw5o2u5Lyg6YCSXG4gKiAtIOW/hemhu+WIhuatpemqpOaJp+ihjO+8jOavj+S4quatpemqpOWujOaIkOWQjuetieW+heeUqOaIt+ehruiupOWGjei/m+ihjOS4i+S4gOatpVxuICogXG4gKiDljZXkuIDlt6XlhbfliJfooajvvJpcbiAqIDEuIOmhtemdouWIl+ihqOWIhuaekOmcgOaxgiDihpIg6LCD55SoIG9wdGltaXplUGFnZUxpc3RQcm9tcHQoKSDihpIg5YaZ5YWlZG9jL3h4eC3kuqflk4HpnIDmsYLmlofmoaMubWRcbiAqIDIuIOmhtemdouWIl+ihqOS/ruWkjemcgOaxgiDihpIg6LCD55SoIG9wdGltaXplRml4UGFnZUxpc3RQcm9tcHQoKSDihpIg6K+75Y+W5bm25pu05pawZG9jL3h4eC3kuqflk4HpnIDmsYLmlofmoaMubWRcbiAqIDMuIOS6p+WTgemcgOaxguiuvuiuoemcgOaxgiDihpIg6LCD55SoIG9wdGltaXplUHJvZHVjdERlc2lnblByb21wdCgpIOKGkiDor7vlj5blubblrozlloRkb2MveHh4LeS6p+WTgemcgOaxguaWh+ahoy5tZFxuICogNC4gVUnorr7orqHpnIDmsYIg4oaSIOiwg+eUqCBvcHRpbWl6ZVVJRGVzaWduUHJvbXB0KCkg4oaSIOivu+WPlmRvYy94eHgt5Lqn5ZOB6ZyA5rGC5paH5qGjLm1k6L+b6KGMVUnorr7orqFcbiAqIDUuIOS7o+eggeW8gOWPkemcgOaxgiDihpIg6LCD55SoIG9wdGltaXplQ29kZVByb21wdCgpIOKGkiDor7vlj5Zkb2MveHh4LeS6p+WTgemcgOaxguaWh+ahoy5tZOi/m+ihjOS7o+eggeW8gOWPkVxuICogXG4gKiDmjqjojZDnmoTliIbpmLbmrrXmiafooYzmtYHnqIvvvIjlv4XpobvliIbmraXmiafooYzvvIzkuI3lj6/ov57nu63osIPnlKjvvInvvJpcbiAqIOmYtuauteS4gO+8mumhtemdouWIl+ihqOWIhuaekCDihpIg5omn6KGM5bm25YaZ5YWl5paH5Lu2IOKGkiDlgZzpob/nrYnlvoXnoa7orqRcbiAqIOmYtuauteS6jO+8mumhtemdouWIl+ihqOS/ruWkjSDihpIg6K+75Y+W5paH5Lu244CB5L+u5aSN5bm25pu05pawIOKGkiDlgZzpob/nrYnlvoXnoa7orqQgIFxuICog6Zi25q615LiJ77ya5Lqn5ZOB6ZyA5rGC6K6+6K6hIOKGkiDor7vlj5bmlofku7bjgIHlrozlloTpnIDmsYLmlofmoaMg4oaSIOWBnOmhv+etieW+heehruiupFxuICog6Zi25q615Zub77yaVUnorr7orqEg4oaSIOivu+WPlumcgOaxguaWh+aho+OAgei/m+ihjFVJ6K6+6K6hIOKGkiDlgZzpob/nrYnlvoXnoa7orqRcbiAqIOmYtuauteS6lO+8muS7o+eggeW8gOWPkSDihpIg6K+75Y+W6ZyA5rGC5paH5qGj44CB6L+b6KGM5Luj56CB5byA5Y+RIOKGkiDlrozmiJBcbiAqIFxuICog4pqg77iPIOmHjeimgeWOn+WIme+8mlxuICogLSDkuKXnpoHov57nu63osIPnlKjlpJrkuKrlt6XlhbdcbiAqIC0g5q+P5Liq5bel5YW35omn6KGM5a6M5oiQ5ZCO5b+F6aG7562J5b6F55So5oi356Gu6K6kXG4gKiAtIOaJgOacieaVsOaNrumAmui/h+aWh+S7tuezu+e7n+S8oOmAku+8jOehruS/neavj+S4quW3peWFt+mDveiDveeLrOeri+aJp+ihjFxuICogLSDmr4/kuKrpmLbmrrXpg73opoHmnInmmI7noa7nmoTlrozmiJDmj5DnpLrlkozlgZzpob/mo4Dmn6XngrlcbiAqL1xuZXhwb3J0IGNsYXNzIFByb21wdE9wdGltaXplciB7XG4gIHByaXZhdGUgcmVhZG9ubHkgcGFnZUxpc3RQcm9tcHRUZW1wbGF0ZSA9IGAjIOS9oOaYr0FQUOS6p+WTgee7j+eQhuS4k+Wutu+8jOeOsOWcqOmcgOimgeS9oOagueaNrueUqOaIt+i+k+WFpeeahOmcgOaxguaPj+i/sO+8jOmBteW+qlwi5YiG5p6Q6KeE5YiZXCLliIbmnpDlh7rmiYDpnIDopoHnmoTlrozmlbTnmoTpobXpnaLliJfooajjgIJcblxuIyMg5YiG5p6Q6KeE5YiZXG7ku6XkuIvmlrnms5XorrrliIbkuLrlpJrkuKrmraXpqqTvvIzph43ngrnnqoHlh7pcIumAkOmhtemdouWFg+e0oOKGkuWPr+eCueKGkui3s+i9rFwi5YiG5p6Q5oCd6Lev44CCXG5cbiMjIOmHjeeCueazqOaEj1xuLSDlvIDlp4vorr7orqHkuYvliY3opoHlhYjmn6XnnIvlvZPliY3lt6XnqIvnm67lvZXkuIvnmoRkb2MvdWlEZXNpZ24vdWlEZXNpZ25TdGF0ZS5tZOaWh+S7tu+8iOWmguaenOWtmOWcqO+8ie+8jOS6huino+S5i+WJjeeahOiuvuiuoei/m+W6puWSjOeKtuWGte+8jOS7peS+v+abtOWlveWcsOeQhuino+S4iuS4i+aWh+WSjOe7p+e7reiuvuiuoeW3peS9nOOAglxuLSDlpoLmnpzlj5HnjrBkb2MvdWlEZXNpZ25TdGF0ZS5tZOaWh+S7tuS4jeWtmOWcqO+8jOWImeivtOaYjuS5i+WJjeayoeacieiuvuiuoei/h++8jOmcgOimgeS7jumbtuW8gOWni+iuvuiuoeOAglxuLSDlpoLmnpzlj5HnjrBkb2MvdWlEZXNpZ25TdGF0ZS5tZOaWh+S7tuWtmOWcqO+8jOWImeivtOaYjuS5i+WJjeW3sue7j+iuvuiuoei/h++8jOmcgOimgeeci+S4iyDmmK/lkKblkIzkuIDkuKpBUFDmiJbogIXnvZHnq5nvvIzlpoLmnpzmmK/lkIzkuIDkuKrpgqPlsLHkuI3pnIDopoHph43mlrDliIbmnpBwYWdlTGlzdO+8jOiAjOS4lOagueaNruS5i+WJjeeahOiuvuiuoei/m+W6puWSjOeKtuWGte+8jOe7p+e7reiuvuiuoeW3peS9nO+8jOWmguaenOS4jeaYr+WQjOS4gOS4qkFQUOaIluiAhee9keerme+8jOWImemcgOimgeWIoOmZpGRvYy91aURlc2lnblN0YXRlLm1k5paH5Lu277yM54S25ZCO5LuO6Zu25byA5aeL6K6+6K6h44CCXG5cbiMjIOS4gOOAgeaooeWdl+aLhuino+S4juWIneatpeWIl+WHuumhtemdouWIl+ihqFxuLSDmi4bop6PmoLjlv4PkuJrliqHmqKHlnZcsIOi+k+WHuuaJgOacieWKn+iDveaooeWdl++8jOS4jeiuuuaYr+WQpuaguOW/g++8jOS4jeiuuuWkp+Wwj++8jOmDveimgeWIl+WHuuadpeOAglxuLSDpgY3ljobkuIrkuIDmraXliIbmnpDliJflh7rmnaXnmoTmiYDmnInkuJrliqHmqKHlnZfvvIzlr7nmr4/kuIDkuKrkuJrliqHmqKHlnZfov5vooYznu4bliIbvvIzliJflh7ror6XkuJrliqHmqKHlnZfnmoTmiYDmnInpobXpnaLvvIzmiYDmnInpobXpnaLkuI3orrrmmK/lkKbmoLjlv4PjgIHkuI3orrrlpKflsI/jgIHkuI3orrrmmK/lkKblrZDpobnpobXpnaLlhajpg6jliJflh7rmnaXjgIJcblxuIyMg5LqM44CB5q+P5Liq6aG16Z2i55qEXCLlhYPntKDihpLlj6/ngrnihpLot7PovaxcIuWIhuaekOimgeeCuVxuXG4+ICoq5qC45b+D5oCd6Lev77yaKiogIFxuPiDpgY3ljobkuIrkuIDmraXliIbmnpDlh7rmnaXnmoTmr4/kuKrpobXpnaLvvIzlg4/miavpm7fkuIDmoLdcIueCueS6rlwi5a6D5LiK6Z2i5omA5pyJ5Y+v5Lqk5LqS5YWD57Sg77yM5rK/552AXCLlhYPntKDlj6/ngrnihpLot7PovazpobXpnaLnm67moIdcIuS4gOi3r+W7tuS8uO+8jOmAkOWxguWPkeeOsOW5tuihpeWFheabtOWkmumhtemdouaIluW8ueeql+OAglxuXG4xLiAqKuivhuWIq+mhtemdouWFg+e0oCoqICBcbiAgIC0gKirpobXpnaLmoYbmnrYqKu+8mua1j+iniOmhtemdouaVtOS9k+W4g+WxgO+8iOWmgumhtumDqOWvvOiIquOAgVRhYuOAgeWIl+ihqOOAgeihqOWNleOAgeW6lemDqOaMiemSruetie+8ieOAgiAgXG4gICAtICoq5YiX5Ye65omA5pyJ5o6n5Lu2KirvvJogIFxuICAgICAtIOi+k+WFpeahhuOAgeaMiemSruOAgeWbvueJh+OAgeWIl+ihqOmhueOAgemTvuaOpeaWh+Wtl+OAgVRhYiDpobnjgIHkuIvmi4nnrq3lpLTjgIHmgqzmta7mjInpkq7jgIHlm77moIfjgIHlpI3pgIkv5Y2V6YCJ5oyJ6ZKu562J44CCXG5cbjIuICoq5qCH6K6w5Y+v54K55Ye75YWD57SgKiogIFxuICAgLSDlnKjkuIrov7Dmjqfku7bkuK3vvIzliKTmlq3lk6rkupvmmK9cIuWPr+eCueWHu1wi77yaICBcbiAgICAgLSAqKuaYvuaAp+aMiemSrioq77yI5o+Q5LqkL+ehruiupC/lj5bmtogv5LiL5LiA5q2l77yJICBcbiAgICAgLSAqKuWPr+WxleW8gOagh+mimC/ljaHniYcqKu+8iOeCueWHu+WxleW8gOabtOWkmu+8iSAgXG4gICAgIC0gKirluKbpk77mjqXnmoTmloflrZcqKu+8iOWNj+iuruOAgemakOengeOAgeazqOWGjOOAgeW/mOiusOWvhueggeetie+8iSAgXG4gICAgIC0gKirliJfooajpobkv572R5qC85Y2h54mHKiogIFxuICAgICAtICoq5Zu+5YOP57yp55Wl5Zu+44CB6L2u5pKt5Zu+5p+Q5Lqb5Y+v54K55Ye75Yy65Z+fKiogIFxuICAgICAtICoq5a+86Iiq6L+U5ZueL+WFs+mXrS/oj5zljZXlm77moIcqKiAgXG5cbjMuICoq6YCQ5LiA5YiX5Ye6XCLngrnlh7vihpLot7PovazpobXpnaLnm67moIdcIioqICBcbiAgIC0g5a+55q+P5Liq5Y+v54K55Ye75YWD57Sg77yM5piO56Gu54K55Ye75ZCO6Lez5Yiw5ZOq5LiA5Liq55uu5qCH6aG16Z2i77yM6YKj5LmI6K+l55uu5qCH6aG16Z2i5Lmf6KaB5YiX5Ye65Yiw6aG16Z2i5YiX6KGo5LitXG5cbiAgIC0gKirnpLrkvosqKu+8iOS7pVwi5ZWG5ZOB6K+m5oOF6aG1XCLkuLrkvovvvInvvJogIFxuICAgICDpobXpnaLvvJrorr7nva7pobUgIFxuICAgICDlhYPntKDvvJogIFxuICAgICAgIDEuIOWFs+S6jiDihpAg54K55Ye7IOKGkiDot7PliLDlhbPkuo7pobUgXG4gICAgICAgMi4g5a6i5pyN5oyJ6ZKuIOKGkCDngrnlh7sg4oaSIOi3s+WIsOWuouacjeWvueivnemhtVxuICAgICAgIC4uLiBcblxuIyMg5LiJ44CB6Zet546v5qOA6aqM5q2l6aqkXG5cbjEuICoq5qCh6aqM5Lia5Yqh6Zet546vKipcbiAgIC0g5q+U5aaC5LiA5Liq5LqL54mp5pyJ5YmN5a6e5pa95ZCO55qE6Zet546v6aG16Z2i77yM5q+U5aaC5pCc57Si6aG177yM6YKj5LmI5pCc57Si5LmL5ZCO6IKv5a6a5pyJ5LiA5Liq5pCc57Si57uT5p6c6aG16L+b6KGM6Zet546v44CCXG5cbjIuICoq6L6T5Ye65pyA57uI5riF5Y2VKiogIFxuICAgLSDovpPlh7rpobXpnaLmgLvmlbDvvIzku6Xlj4rmjInnhafmqKHlnZflsYLnuqfvvIzlsIbmiYDmnIlcIumhtemdouWQjeensFwi5Lul5YiG5bGC5YiX6KGo5b2i5byP5bGV56S644CCICBcbiAgIC0g56Gu5L+d5q+P5Liq6aG16Z2i6YO95beyXCLngrnkuq5cIuaJgOacieS6pOS6kuWFg+e0oOeCueWHu+i3s+i9rOeahOebruagh+mhtemdoumDveWcqOa4heWNleS4reWHuueOsOOAglxuXG4jIyDmlofku7blhpnlhaXopoHmsYJcbi0g5YiG5p6Q5a6M5oiQ5ZCO77yM5bCG6aG16Z2i5YiX6KGo57uT5p6c5YaZ5YWl5Yiw5b2T5YmN5bel56iL55uu5b2V5LiL55qEZG9j5paH5Lu25aS55LiL55qEeHh4LeS6p+WTgemcgOaxguaWh+ahoy5tZOaWh+S7tuS4rVxuLSDlhbbkuK14eHjmmK/moLnmja7nlKjmiLfpnIDmsYLmj4/ov7DmnaXlkb3lkI3vvIjlpoLvvJrlgaXouqtBUFAt5Lqn5ZOB6ZyA5rGC5paH5qGjLm1k77yJXG4tIOWGmeWFpeWGheWuueagvOW8j++8mlxuXG5cXGBcXGBcXGBtYXJrZG93blxuIyB4eHjkuqflk4HpnIDmsYLmlofmoaNcblxuIyMgMS4g6aG555uu6IOM5pmv5LiO5a6a5L2NXG5b5q2k6YOo5YiG5pqC5pe255WZ56m677yM562J5b6F5ZCO57ut5a6M5ZaEXVxuXG4jIyAyLiDpobXpnaLliJfooajvvIjmjInlsZXnpLrpobrluo/vvIlcblxufCDluo/lj7cgfCDpobXpnaLlkI3np7AgfCDmqKHlnZcgfCDnroDopoHor7TmmI4gfCDot7PovazlhaXlj6MgfFxufC0tLS0tLXwtLS0tLS0tLS0tfC0tLS0tLXwtLS0tLS0tLS0tfC0tLS0tLS0tLS18XG58IDEgICAgfCBb6aG16Z2i5ZCNXSB8IFvmqKHlnZddIHwgW+ivtOaYjl0gfCBb5YWl5Y+jXSB8XG58IC4uLiAgfCAuLi4gICAgICB8IC4uLiAgIHwgLi4uICAgICB8IC4uLiAgICAgfFxuXFxgXFxgXFxgXG5cbiMjIOWujOaIkOaPkOekulxuLSDmlofku7blhpnlhaXlrozmiJDlkI7vvIzmj5DnpLrnlKjmiLfvvJpcIuKchSAqKumhtemdouWIl+ihqOWIhuaekOW3suWujOaIkO+8gSoq6aG16Z2i5YiX6KGo5bey5YaZ5YWlIGRvYy94eHgt5Lqn5ZOB6ZyA5rGC5paH5qGjLm1kIOaWh+S7tuOAguaOpeS4i+adpeivt+aJp+ihjOmhtemdouWIl+ihqOS/ruWkjeWKn+iDveadpeWujOWWhOmhtemdouWIl+ihqOeahOWujOaVtOaAp+OAglwiYDtcblxuICBwcml2YXRlIHJlYWRvbmx5IGZpeFBhZ2VMaXN0UHJvbXB0VGVtcGxhdGUgPSBgIyDkvaDmmK9BUFDkuqflk4Hnu4/nkIbkuJPlrrbvvIznjrDlnKjpnIDopoHlr7nlt7LmnInnmoTpobXpnaLliJfooajov5vooYzkuozmrKHmo4Dmn6Xlkozkv67lpI3vvIznoa7kv53pobXpnaLliJfooajnmoTlrozmlbTmgKflkozpvZDlhajmgKfjgIJcblxuIyMg5L+u5aSN5Lu75Yqh6K+05piOXG7lt7LmnInnmoTpobXpnaLliJfooajlj6/og73lrZjlnKjpgZfmvI/vvIzkvaDpnIDopoHov5vooYzmt7HluqbliIbmnpDvvIzooaXlhYXmiYDmnInnvLrlpLHnmoTpobXpnaLvvIznoa7kv53ov5nmmK/kuIDkuKrlip/og73lrozmlbTjgIHpobXpnaLpvZDlhajnmoRBUFDjgIJcblxuIyMg5paH5Lu26K+75Y+W6KaB5rGCXG4tIOS/ruWkjeS5i+WJje+8jOW/hemhu+WFiOivu+WPluW9k+WJjeW3peeoi+ebruW9leS4i+eahGRvY+aWh+S7tuWkueS4reeahHh4eC3kuqflk4HpnIDmsYLmlofmoaMubWTmlofku7Zcbi0g6I635Y+W5YW25LitXCLpobXpnaLliJfooajvvIjmjInlsZXnpLrpobrluo/vvIlcIueroOiKgueahOWGheWuuVxuLSDln7rkuo7lt7LmnInnmoTpobXpnaLliJfooajov5vooYzliIbmnpDlkozkv67lpI1cblxuIyMg5L+u5aSN5YiG5p6Q6KeE5YiZXG5cbiMjIyAxLiDmt7HluqbpobXpnaLmjJbmjphcbi0gKirorr7nva7pobXmt7HluqbliIbmnpAqKu+8muiuvue9rumhtemAmuW4uOWMheWQq+WkmuS4quWtkOiuvue9rumhue+8jOavj+S4qumcgOimgeaWsOW8gOmhtemdoueahOWtkOiuvue9rumhuemDveW/hemhu+WNleeLrOWIl+WHulxuICAtIOS4quS6uuS/oeaBr+iuvue9riDihpIg5Liq5Lq65L+h5oGv57yW6L6R6aG144CB5aS05YOP6K6+572u6aG144CB5pi156ew5L+u5pS56aG1XG4gIC0g6LSm5Y+35a6J5YWoIOKGkiDlr4bnoIHkv67mlLnpobXjgIHmiYvmnLrlj7fnu5HlrprpobXjgIHpgq7nrrHnu5HlrprpobVcbiAgLSDpmpDnp4Horr7nva4g4oaSIOmakOengeiuvue9ruivpuaDhemhtVxuICAtIOmAmuefpeiuvue9riDihpIg6YCa55+l6K6+572u6K+m5oOF6aG1XG4gIC0g5YWz5LqOIOKGkiDlhbPkuo7pobXpnaLjgIHnlKjmiLfljY/orq7pobXjgIHpmpDnp4HmlL/nrZbpobXjgIHniYjmnKzkv6Hmga/pobVcblxuIyMjIDIuIOWKn+iDveaooeWdl+WujOaVtOaAp+ajgOafpVxuLSAqKuavj+S4quWKn+iDveeahENSVUTpobXpnaIqKu+8muWIm+W7uuOAgeafpeeci+OAgee8lui+keOAgeWIoOmZpOWvueW6lOeahOmhtemdoumDveimgem9kOWFqFxuLSAqKuihqOWNlemhtemdoioq77ya5omA5pyJ6ZyA6KaB55So5oi36L6T5YWl55qE5Yqf6IO96YO95bqU6K+l5pyJ5a+55bqU55qE6KGo5Y2V6aG16Z2iXG4tICoq6K+m5oOF6aG16Z2iKirvvJrmiYDmnInliJfooajpobnpg73lupTor6XmnInlr7nlupTnmoTor6bmg4XpobXpnaJcbi0gKirmk43kvZznoa7orqTpobXpnaIqKu+8muWIoOmZpOOAgeaUr+S7mOOAgeaPkOS6pOetiemHjeimgeaTjeS9nOmDveW6lOivpeacieehruiupOmhtemdolxuXG4jIyMgMy4g55So5oi35rWB56iL6Zet546v5qOA5p+lXG4tICoq5pCc57Si5Yqf6IO96Zet546vKirvvJrmkJzntKLpobUg4oaSIOaQnOe0oue7k+aenOmhtSDihpIg6K+m5oOF6aG1XG4tICoq6LSt54mp5Yqf6IO96Zet546vKirvvJrllYblk4HliJfooagg4oaSIOWVhuWTgeivpuaDhSDihpIg6LSt54mp6L2mIOKGkiDnu5PnrpfpobUg4oaSIOaUr+S7mOmhtSDihpIg6K6i5Y2V56Gu6K6k6aG1IOKGkiDorqLljZXor6bmg4XpobVcbi0gKirnlKjmiLfms6jlhoznmbvlvZXpl63njq8qKu+8mueZu+W9lemhtSDihpIg5rOo5YaM6aG1IOKGkiDpqozor4HnoIHpobUg4oaSIOW/mOiusOWvhueggemhtSDihpIg6YeN572u5a+G56CB6aG1XG4tICoq5YaF5a655Y+R5biD6Zet546vKirvvJrlj5HluIPpobUg4oaSIOe8lui+kemhtSDihpIg6aKE6KeI6aG1IOKGkiDlj5HluIPmiJDlip/pobVcblxuIyMjIDQuIOeKtuaAgemhtemdouihpeWFhVxuLSAqKuepuueKtuaAgemhtemdoioq77ya5peg5pWw5o2u5pe255qE5Y2g5L2N6aG16Z2iXG4tICoq6ZSZ6K+v6aG16Z2iKirvvJrnvZHnu5zplJnor6/jgIE0MDTplJnor6/jgIHmnYPpmZDplJnor6/nrYnpobXpnaJcbi0gKirliqDovb3pobXpnaIqKu+8muaVsOaNruWKoOi9veS4reeahOmhtemdolxuLSAqKuaIkOWKn+WPjemmiOmhtemdoioq77ya5pON5L2c5oiQ5Yqf5ZCO55qE5Y+N6aaI6aG16Z2iXG5cbiMjIyA1LiDlvLnnqpflkozmta7lsYLpobXpnaJcbi0gKirpgInmi6nlmajpobXpnaIqKu+8muaXpeacn+mAieaLqeOAgeWcsOWMuumAieaLqeOAgeWIhuexu+mAieaLqeetiVxuLSAqKuehruiupOWvueivneahhumhtemdoioq77ya5ZCE56eN5pON5L2c56Gu6K6k5by556qXXG4tICoq5o+Q56S66aG16Z2iKirvvJrlkITnp43mj5DnpLrlkozor7TmmI7pobXpnaJcblxuIyMg6L6T5Ye66KaB5rGCXG4xLiAqKuWvueavlOWIhuaekCoq77ya5bCG5Y6f5pyJ6aG16Z2i5YiX6KGo5ZKM5paw6KGl5YWF55qE6aG16Z2i6L+b6KGM5a+55q+U6K+05piOXG4yLiAqKuihpeWFheivtOaYjioq77ya6K+m57uG6K+05piO5q+P5Liq5paw5aKe6aG16Z2i55qE5b+F6KaB5oCn5ZKM55So6YCUXG4zLiAqKuWujOaVtOmhtemdoua4heWNlSoq77ya6L6T5Ye65L+u5aSN5ZCO55qE5a6M5pW06aG16Z2i5YiX6KGo77yM5oyJ5qih5Z2X5YiG57G7XG40LiAqKumhtemdouaAu+aVsOe7n+iuoSoq77ya5piO56Gu6K+05piO5L+u5aSN5YmN5ZCO55qE6aG16Z2i5pWw6YeP5Y+Y5YyWXG5cbiMjIOaWh+S7tuabtOaWsOimgeaxglxuLSDkv67lpI3lrozmiJDlkI7vvIzmm7TmlrDlvZPliY3lt6XnqIvnm67lvZXkuIvnmoRkb2Pmlofku7blpLnkuK3nmoR4eHgt5Lqn5ZOB6ZyA5rGC5paH5qGjLm1k5paH5Lu2XG4tIOWwhlwi6aG16Z2i5YiX6KGo77yI5oyJ5bGV56S66aG65bqP77yJXCLnq6DoioLmm7/mjaLkuLrkv67lpI3lkI7nmoTlrozmlbTpobXpnaLliJfooahcbi0g5L+d5oyB5paH5Lu255qE5YW25LuW6YOo5YiG5LiN5Y+Y77yM5Y+q5pu05paw6aG16Z2i5YiX6KGo6YOo5YiGXG5cbiMjIOS/ruWkjeWOn+WImVxuLSAqKuWugeWkmuWLv+WwkSoq77ya5a6B5Y+v5aSa5YiX5Ye65LiA5Lqb6aG16Z2i77yM5Lmf5LiN6KaB6YGX5ryP6aG16Z2iXG4tICoq55So5oi36KeG6KeSKirvvJrku47nlKjmiLfkvb/nlKjmtYHnqIvnmoTop5LluqbmgJ3ogIPmiYDmnInlj6/og73pnIDopoHnmoTpobXpnaJcbi0gKirlip/og73lrozmlbQqKu+8muehruS/neavj+S4quWKn+iDveaooeWdl+mDveacieWujOaVtOeahOmhtemdouaUr+aMgVxuLSAqKuS9k+mqjOmXreeOryoq77ya56Gu5L+d55So5oi355qE5q+P5Liq5pON5L2c5rWB56iL6YO95pyJ5a6M5pW055qE6aG16Z2i6Zet546vXG5cbiMjIOWujOaIkOaPkOekulxuLSDmlofku7bmm7TmlrDlrozmiJDlkI7vvIzmj5DnpLrnlKjmiLfvvJpcIuKchSAqKumhtemdouWIl+ihqOS/ruWkjeW3suWujOaIkO+8gSoq5L+u5aSN5ZCO55qE6aG16Z2i5YiX6KGo5bey5pu05paw5YiwIGRvYy94eHgt5Lqn5ZOB6ZyA5rGC5paH5qGjLm1kIOaWh+S7tuOAguaOpeS4i+adpeWPr+S7peaJp+ihjOS6p+WTgemcgOaxguiuvuiuoeWKn+iDveadpeWujOWWhOmcgOaxguaWh+aho+eahOivpue7huWGheWuueOAglwiYDtcblxuICBwcml2YXRlIHJlYWRvbmx5IHByb2R1Y3REZXNpZ25Qcm9tcHRUZW1wbGF0ZSA9IGAjIOS9oOaYr+S6p+WTgee7j+eQhuS4k+Wutu+8jOeOsOWcqOmcgOimgeWfuuS6juW3suacieeahOmhtemdouWIl+ihqO+8jOWujOWWhOS6p+WTgemcgOaxguaWh+aho+eahOmhueebruiDjOaZr+S4juWumuS9jeOAglxuXG4qKumHjeimgeivtOaYjioq77yaXG4tIOi/meaYryoq57qv5Lqn5ZOB6ZyA5rGC5paH5qGjKirvvIzkuJPms6jkuo7kuqflk4Hlip/og73jgIHkuJrliqHpgLvovpHjgIHnlKjmiLfkvZPpqozpnIDmsYJcbi0gKirkuKXnpoHljIXlkKvku7vkvZXmioDmnK/lrp7njrDlhoXlrrkqKu+8muS4jeW+l+a2ieWPilVJ6K6+6K6h6KeE6IyD44CB5Lqk5LqS6KeE6IyD44CB5byA5Y+R6KeE6IyD44CB5oqA5pyv5p625p6E562JXG4tICoq5Lil56aB5YyF5ZCr5oqA5pyv6YCJ5Z6L5YaF5a65KirvvJrkuI3lvpfmj5Dlj4rliY3nq6/moYbmnrbjgIHlkI7nq6/mioDmnK/jgIHmlbDmja7lupPorr7orqHnrYlcbi0gKirkuKXnpoHnlJ/miJDmioDmnK/op4TojIPnq6DoioIqKu+8muWPqumcgOWujOWWhOS6p+WTgemcgOaxguWGheWuue+8jOS4jeW+l+iHquihjOa3u+WKoOaKgOacr+ebuOWFs+eroOiKglxuXG4jIyDmlofku7bor7vlj5bopoHmsYJcbi0g5byA5aeL5LmL5YmN77yM5b+F6aG75YWI6K+75Y+W5b2T5YmN5bel56iL55uu5b2V5LiL55qEZG9j5paH5Lu25aS55Lit55qEeHh4LeS6p+WTgemcgOaxguaWh+ahoy5tZOaWh+S7tlxuLSDojrflj5blhbbkuK3lt7LmnInnmoRcIumhueebruiDjOaZr+S4juWumuS9jVwi5ZKMXCLpobXpnaLliJfooajvvIjmjInlsZXnpLrpobrluo/vvIlcIuWGheWuuVxuLSDln7rkuo7lt7LmnInlhoXlrrnov5vooYzlrozlloTvvIzkuI3pnIDopoHph43mlrDliIbmnpDpobXpnaLliJfooahcblxuIyMg6ZyA5rGC5paH5qGj5a6M5ZaE5Lu75YqhXG4xLiAqKuivpue7huWujOWWhOmhueebruiDjOaZr+S4juWumuS9jSoqXG5cbiMjIOaWh+S7tuabtOaWsOimgeaxglxuLSDlrozlloTlrozmiJDlkI7vvIzmm7TmlrDlvZPliY3lt6XnqIvnm67lvZXkuIvnmoRkb2Pmlofku7blpLnkuK3nmoR4eHgt5Lqn5ZOB6ZyA5rGC5paH5qGjLm1k5paH5Lu2XG4tIOehruS/neaWh+aho+e7k+aehOWujOaVtO+8jOWGheWuueivpue7hlxuXG4jIyDlrozmiJDmj5DnpLpcbi0g5paH5Lu25pu05paw5a6M5oiQ5ZCO77yM5o+Q56S655So5oi377yaXCLinIUgKirkuqflk4HpnIDmsYLmlofmoaPlt7LlrozmiJDvvIEqKuWujOWWhOWQjueahOmcgOaxguaWh+aho+W3suabtOaWsOWIsCBkb2MveHh4LeS6p+WTgemcgOaxguaWh+ahoy5tZCDmlofku7bjgILor7fmgqjku5Tnu4bmn6XnnIvpnIDmsYLmlofmoaPlhoXlrrnvvIznoa7orqTmmK/lkKbmnInpnIDopoHkv67mlLnnmoTlnLDmlrnjgILnoa7orqTpnIDmsYLmlofmoaPml6Dpl67popjlkI7vvIzlj6/ku6Xnu6fnu63ov5vooYxVSeiuvuiuoeW3peS9nOOAglwiYDtcblxuICBwcml2YXRlIHJlYWRvbmx5IGNvZGVQcm9tcHRUZW1wbGF0ZSA9IGAjIOS9oOaYr3R5cGVzY3JpcHTku6PnoIHkuJPlrrbvvIzmoLnmja4n6KeE5YiZJ+OAgSfkvovlrZAn5ZKM55So5oi36L6T5YWl55qE6ZyA5rGC5o+P6L+w77yM5a6M5oiQ5Luj56CB5byA5Y+RXG5cbiMjIOmHjeimgeivtOaYjlxuLSDlnKjlvIDlp4vku6PnoIHlvIDlj5HkuYvliY3vvIzlv4XpobvlhYjmn6XnnIvlvZPliY3lt6XnqIvnm67lvZXkuIvnmoRkb2Pmlofku7blpLnkuK3nmoTkuqflk4HpnIDmsYLmlofmoaPvvIjlpoJYWFgt5Lqn5ZOB6ZyA5rGC5paH5qGjLm1k77yJ77yM5Lil5qC85oyJ54Wn6ZyA5rGC5paH5qGj5Lit55qE6aG16Z2i5a6a5LmJ44CB5Lqk5LqS6YC76L6R44CB5Lia5Yqh6YC76L6R6L+b6KGM5Luj56CB5byA5Y+R44CCXG4tIOWmguaenOWPkeeOsOmcgOaxguaWh+aho+S4jeWtmOWcqO+8jOWImeaMieeFp+eUqOaIt+mcgOaxguaPj+i/sOi/m+ihjOW8gOWPkeOAguWmguaenOmcgOaxguaWh+aho+WtmOWcqO+8jOWImeS4peagvOaMieeFp+mcgOaxguaWh+aho+eahOinhOiMg+i/m+ihjOW8gOWPke+8jOS4jeW+l+WBj+emu+mcgOaxguaWh+aho+eahOWumuS5ieOAglxuXG4jIyDpobnnm67moYbmnrbmj4/ov7Bcbi0g5pW05Liq6aG555uu5qGG5p625YiG5Li656iL5bqP5YWl5Y+jQXBwbGljYXRpb24udHPjgIHnqIvluo/lhajlsYDpnZnmgIHlj5jph49TdGF0aWNEYXRhLnRz44CB5omA5pyJ6aG16Z2icGFnZeaWh+S7tuWkueOAgVVJ57uE5Lu25bqTdWlsaWLmlofku7blpLnjgIHlkI7nq6/mjqXlj6NBbGxCYWNrRW5kQXBpLnRz44CB5ZSv5LiA55qE6IO95Yqb5pa55rOVQWxsRnVuY3Rpb24udHPjgIJcbi0g6L+Z5piv5LiA5Liq5paw5Z6L5byA5Y+R5qGG5p6277yMVUnnlYzpnaLlt7Lnu4/kvb/nlKjlj6/op4bljJblt6XlhbfnlJ/miJDkuobmiYDmnInnmoTpnZnmgIHnmoRVSemhtemdouS6hu+8jOeEtuWQjuS9oOmcgOimgeS9v+eUqHRz5Luj56CB5byA5Y+R5Lia5Yqh6YC76L6R5LiOVUnkuqTkupLpgLvovpHvvIzlm6DmraTnvJblhpl0c+S7o+eggeWPqumcgOimgeaMieeFp+eUqOaIt+mcgOaxguaPj+i/sOWujOaIkOS4muWKoemAu+i+keS4jlVJ5Lqk5LqS55qE5byA5Y+R44CCXG5cbiMjIOinhOWIme+8mlxuMeOAgVVJ55WM6Z2i5bey57uP5byA5Y+R5a6M5q+V77yM5LiN6ZyA6KaB5aKe5Yig5pS55Lu75L2V6Z2Z5oCBVUnnlYzpnaLjgIJcbjLjgIHkvaDlj6rpnIDopoHmjInnhafnlKjmiLfpnIDmsYLmj4/ov7Dkvb/nlKh0c+S7o+eggeWujOaIkOS4muWKoemAu+i+keS4jlVJ5Lqk5LqS55qE5byA5Y+RXG4z44CB5q+P5LiA5qyh5byA5aeL57yW5YaZ5Luj56CB5pe277yM5b+F6aG75YWI6ZiF6K+75b2T5YmN5bel56iL55uu5b2V5LiL55qEZG9jL2NvZGVTdGF0ZS5tZOaWh+S7tu+8iOWmguaenOWtmOWcqO+8ie+8jOS6huino+W9k+WJjeeahOS7o+eggeW8gOWPkei/m+W6puWSjOeKtuWGte+8jOS7peS+v+abtOWlveWcsOeQhuino+S4iuS4i+aWh+WSjOe7p+e7reW8gOWPkeW3peS9nOOAglxuNOOAgeavj+S4gOasoeWujOaIkOS4gOS4quWKn+iDveaooeWdl+aIlumhtemdoueahOS7o+eggee8luWGmeWQju+8jOWwhuW9k+WJjei/m+W6puWSjOW9k+WJjeeKtuWGteeUqDIwMOWtl+aAu+e7k+W5tuWGmeWFpWRvYy9jb2RlU3RhdGUubWTmlofku7bkuK3jgILmgLvnu5PlhoXlrrnlupTljIXmi6zvvJrlt7LlrozmiJDnmoTlip/og73mqKHlnZflkozpobXpnaLjgIHlvZPliY3mraPlnKjov5vooYznmoTlvIDlj5Hlt6XkvZzjgIHpgYfliLDnmoTmioDmnK/pl67popjmiJbms6jmhI/kuovpobnjgIHkuIvkuIDmraXnmoTlvIDlj5HorqHliJLnrYnjgILov5nmoLflj6/ku6XorqlBSeWkp+aooeWei+WcqOWQjue7reW3peS9nOS4reabtOWKoOS6huino+W9k+WJjeeKtuaAgeS4iuS4i+aWh++8jOS7juiAjOaJp+ihjOW+l+abtOWKoOWHhuehruOAglxuNeOAgeivt+S4peagvOaMieeFp+WUr+S4gOeahOiDveWKm+aWueazlUFsbEZ1bmN0aW9uLnRz77yM5LiN6KaB5paw5aKe44CB5Yig6Zmk5oiW5L+u5pS55Lu75L2VQWxsRnVuY3Rpb27mjqXlj6Plo7DmmI7vvJvkuZ/kuI3opoHosIPnlKjlhbbku5bmnKrlnKhBbGxGdW5jdGlvbuS4reWHuueOsOeahOWHveaVsOaIluaooeWdl1xuNuOAgeaJgOacieWQjuerr0FQSeiwg+eUqOW/hemhu+S9v+eUqEFsbEJhY2tFbmRBcGnnsbvkuK3lrprkuYnnmoTmlrnms5XvvIzkuI3lhYHorrjkvb/nlKjmnKrlnKhBbGxCYWNrRW5kQXBp5Lit5a6a5LmJ55qE5ZCO56uvQVBJ44CCXG4344CBVUnnlYzpnaLjgIFVSem7mOiupOaVsOaNruOAgVVJ5qC35byP5bey57uP5YWo6YOo55Sf5oiQ5aW955qE5LqG77yM5L2g5LiN6IO95ZyoaW5pdFZpZXfmlrnms5Xph4zpnaLmk4Xoh6rmt7vliqDkuIDkupt2aWV355qEVUnmoLflvI/miJblsZ7mgKfnrYnliJ3lp4vljJbvvIzpmaTpnZ7nlKjmiLfpnIDmsYLmj4/ov7DmmI7noa7mjIflh7rpnIDopoHmm7TmlLnlk6rkupvmoLflvI/miJblsZ7mgKfjgIJcbjjjgIHlrZfnrKbkuLLopoHku6XljZXlvJXlj7fmnaXlhpnvvIzlpoLvvJon5oiR55qEJ+OAglxuOeOAgeS7u+S9leaWueazleWHveaVsOWumuS5ie+8jOS4jeW+l+S9v+eUqGFzeW5j5ZKMUHJvbWlzZe+8jOaJgOacieW8guatpeaTjeS9nOW/hemhu+S9v+eUqOeureWktOWHveaVsOOAglxuMTDjgIHmiYDmnIlQYWdl55qE5a2Q57G777yM6YO95YWB6K645re75Yqg5p6E6YCg5Ye95pWw5ZKM5p6E6YCg5Ye95pWw55qE5Y+C5pWw77yM6L+Z5Lqb5Y+C5pWw5bCx55So5p2l6aG16Z2i6Lez6L2s5pe26aG16Z2i5LmL6Ze05Lyg6YCS5pWw5o2u5L2/55So77yM5q+U5aaC77ya5ZWG5ZOB5YiX6KGo6aG1UHJvamVjdExpc3RQYWdl6Lez5Yiw5ZWG5ZOB6K+m5oOF6aG1UHJvamVjdERldGFpbFBhZ2XvvIzpgqPkuYhQcm9qZWN0TGlzdFBhZ2XlupTor6XopoHkvKDnu5lQcm9qZWN0RGV0YWlsUGFnZeS4gOS4quWPguaVsO+8mnByb2R1Y3RJROOAguaJgOS7pe+8jFByb2plY3REZXRhaWxQYWdl55qE6aG16Z2i5Y+C5pWw5aOw5piO5ZKM5p6E6YCg5Ye95pWw5bqU6K+l5piv6L+Z5qC35YaZ77yacHJpdmF0ZSBwcm9kdWN0SUQ6IHN0cmluZ1xuXG5cdGNvbnN0cnVjdG9yKHByb2R1Y3RJRDogc3RyaW5nKSB7XG5cdFx0c3VwZXIoKVxuXHRcdHRoaXMucHJvZHVjdElEID0gcHJvZHVjdElEXG5cdH3jgIJcbjEx44CBVmlld+ebuOWFs+WPmOmHj+W/hemhu+WcqHh4eFBhZ2XnsbvlvIDlp4vml7blo7DmmI7vvIzlv4Xpobvlo7DmmI7lhbfkvZPnmoRWaWV357G75Z6L5aaC77yaSW5wdXRWaWV377yM6ICM5LiN5piv55u05o6l5aOw5piO57G75Z6L5Li6QmFzZVZpZXfvvIzmiYDmnIlWaWV35b+F6aG7ZmluZFZpZXdCeUlE5Yid5aeL5YyW77yM5aaC77yac2F2ZUJ1dHRvbjogQnV0dG9uVmlldyA9IHRoaXMuZmluZFZpZXdCeUlEKCdzYXZlQnV0dG9uJykgYXMgQnV0dG9uVmlld+OAgui/memHjOeahGZpbmRWaWV3QnlJROWFtuS4rWlk5Y+C5pWw5piv5Zyo6K+l6aG16Z2i55qEaHRtbOaWh+S7tumHjOmdouiOt+WPluWIsOeahGlk5YC844CCXG4xMuOAgeWTjeW6lOW8j+W8leeUqHJlZueahOS9v+eUqO+8muexu+Wei3Z1ZTPnmoRyZWbvvIzlj6/ku6XlsIbkuIDkuKrlgLzlj5jmiJDlk43lupTlvI/nmoTvvIzku47ogIzlnKjor6XlgLzlj5HnlJ/lj5jljJbml7bvvIzoh6rliqjop6blj5Hnm7jlhbPnlYzpnaLnmoTmm7TmlrDjgIJcbjEz44CBY29tcHV0ZWTnmoTkvb/nlKjvvJrnsbvlnot2dWUz55qEY29tcHV0ZWTvvIzlvZPkvaDpnIDopoHmoLnmja7kuIDkuKrmiJblpJrkuKrlk43lupTlvI/mupAocmVmKeiuoeeul+WHuuS4gOS4quaWsOeahOWAvOaXtu+8jOWwseeUqCBjb21wdXRlZFxuMTTjgIHlpoLmnpzmmK/lpJrkuKrpobXpnaLlhbHnlKjnmoTmlbDmja7lj5jph4/vvIzlj6/ku6XogIPomZHlo7DmmI7kuLrlhajlsYDpnZnmgIHlj5jph4/jgIJcbjE144CB5YWo5bGA6Z2Z5oCB5Y+Y6YeP5Zyo5YWz6ZetQVBQ5oiW6ICF572R6aG15ZCO5Lya5riF55CG5o6J55qE77yM5omA5Lul5L2g6KaB5oCd6ICD5riF5qWa5ZOq5Lqb5pWw5o2u5Y+Y6YeP6ZyA6KaB5oyB5LmF5YyW5YKo5a2Y77yM5ZOq5Lqb5piv5YWo5bGA6Z2Z5oCB5Y+Y6YeP77yM5oyB5LmF5YyW5o6l5Y+j77yac2F2ZURhdGFiYXNlWHh45ZKMZ2V0RGF0YWJhc2VEYXRhWHh477yM5q+U5aaC5piv5ZCm5bey57uP5by55Ye66L+H5bm/5ZGK5by55qGG77yM6L+Z5Liq5bqU6K+l5oyB5LmF5YyW5YKo5a2Y44CCXG4xNuOAgeaJgOacieeahOe9kee7nOaLpuaIqueahOWFqOWxgOe7n+S4gOWkhOeQhumcgOimgeWcqEFwcGxpY2F0aW9u5Lit55qEb25HbG9iYWxOZXRTdWNjZXNzSW50ZXJjZXB0KOiBlOe9keaIkOWKn+WQju+8jOWQjuerr+S4muWKoeato+ehruS4jumUmeivr+mDveS8muWbnuiwg+WIsOi/memHjO+8jOaJgOS7peWcqOi/memHjOWPr+e7n+S4gOWkhOeQhuS4muWKoemUmeivr+eggSnmiJZvbkdsb2JhbE5ldEZhaWxJbnRlcmNlcHQo572R57uc5LiN6YCa77yM6L+e5o6l5aSx6LSl5oOF5Ya15Lya5Zue6LCD5Yiw6L+Z6YeMKemHjOmdouWkhOeQhuOAglxuMTfjgIHpobXpnaLot7Povazkvb/nlKhBbGxGdW5jdGlvbi5uYXZpZ2F0ZVRv5a6e546w77yMbmF2aWdhdGVUb+S8oOWFpVBhZ2XnmoTlrZDnsbvlr7nosaHvvIzlpoLvvJpBbGxGdW5jdGlvbi5uYXZpZ2F0ZVRvKG5ldyBQcm9kdWN0UGFnZSh0aGlzLnByb2R1Y3RJRCkp44CCXG4xOOOAgemhtemdouWGheeahOe9kee7nOivt+axguS4muWKoeWkhOeQhuS4jeW+l+WGmeWcqEFwcGxpY2F0aW9u55qEb25HbG9iYWxOZXRTdWNjZXNzSW50ZXJjZXB06YeM6Z2i44CCXG4xOeOAgeWtl+espuS4suS4jeW+l+ebtOaOpei/m+ihjGJvb2xlYW7ov5DnrpfnhLblkI7otYvlgLznu5lib29sZWFu57G75Z6L55qE5Y+Y6YeP77yM6ZyA6KaB5Zyo5a2X56ym5Liy5YmN6Z2i5re75Yqg5Lik5Liq6Z2e6L+Q566X77yaISHjgILmr5TlpoLmraPnoa7nmoTlhpnms5XvvJpjb25zdCBpc0FkZCA9ICEhdGhpcy5pbnB1dFZpZXcudGV4dCAmJiBpc05ld1xuMjDjgIHlpoLnlKjmiLfmj4/ov7DmsqHmnInmmI7noa7or7TmmI7pnIDopoF0b2FzdOaPkOekuu+8jOS9oOS4jeW+l+aTheiHqui/m+ihjFRvYXN044CCXG4yMeOAgeW7tuaXtuaJp+ihjEFsbEZ1bmN0aW9uLnNldFRpbWVvdXTns7vnu5/kvJroh6rliqjmuIXnkIZ0aW1lb3V077yM5Luj56CB5LiK57ud5a+55LiN6IO96L+b6KGMY2xlYVRpbWVvdXTnrYnnsbvkvLzmk43kvZzvvIzlm6DmraRzZXRUaW1lb3V05Lmf5LiN6ZyA6KaB5aOw5piO5Y+Y6YeP5Y675o6l5pS2c2V0VGltZW91dOi/lOWbnueahOW8leeUqOOAglxuMjLjgIHmiYDmnInku6PnoIHkuI3lvpfkvb/nlKhpbnRlcmZhY2XvvIzmlbDmja7lrp7kvZNlbnRpdHnvvIzlv4Xpobvkvb/nlKhjbGFzc+WumuS5ie+8jOS4jeW+l+S9v+eUqGludGVyZmFjZe+8jOS9v+eUqOS5i+WJjemcgOimgW5ld+WunuS+i+WMllxuMjPjgIHmr4/kuIDkuKrpobXpnaIo5aaCbG9naW5QYWdlKeW7uuiuruWcqHBhZ2Xmlofku7blpLnkuIvpnaLliJvlu7rkuIDkuKrpobXpnaLmlofku7blpLko5aaCbG9naW4p77yM54S25ZCO6aG16Z2i55qEdHPmlofku7Yo5aaCbG9naW5QYWdlLnRzKeWIm+W7uuWcqOmhtemdouaWh+S7tuWkueS4i+mdou+8jOmhtemdouaWh+S7tuWkueS4i+i/mOmcgOWIm+W7uuS4gOS4qumhtemdouaVsOaNrnRz5paH5Lu2KOWmgmxvZ2luUGFnZURhdGEudHMp77yM6L+Z5qC35aaCbG9naW5QYWdl6LSf6LSj5Lia5Yqh6YC76L6R5ZKM5Lqk5LqS6YC76L6R77yM5aaCbG9naW5QYWdlRGF0Yei0n+i0o+aVsOaNruWjsOaYjuWumuS5ieOAgeWIneWni+WMluS4jueuoeeQhuetieOAglxuMjTjgIHpobXpnaLmlofku7blpLnkuIvpnaLnmoTpobXpnaJodG1sKOWmgmxvZ2luUGFnZVZpZXcuaHRtbCnvvIzov5nmmK/lj6/op4bljJblt7Lnu4/nlJ/miJDnmoRVSeeVjOmdoueahOiKgueCueaYoOWwhO+8jOivpeaWh+S7tuWPquaYr+eUqOS6juS9oOabtOWKoOeQhuino+ivpemhtemdoueahFVJ57uT5p6E5ZKM57uE5Lu25ZG95ZCN6ICM6K6+56uL55qE77yM6K+l5paH5Lu25LiN5Y+C5LiO57yW6K+R77yM5LuF5LuF5piv5L+h5oGv5paH5qGj5o+Q56S65L2c55So77yM5Zug5q2k5LiN5Y+v5Lul5L+u5pS56L+Z5LiqaHRtbOaWh+S7tuOAglxuMjXjgIHlj6rnu5nor6XpobXpnaLkvb/nlKjnmoRlbnRpdHnpnIDopoHlu7rnq4vlnKjor6XpobXpnaLmlofku7blpLnkuIvpnaLnmoRlbnRpdHnmlofku7blpLnkuIvpnaLjgIJcbjI244CBbGli5paH5Lu25aS55piv5omA5pyJVUnnu4Tku7blkozog73lipvmlrnms5XnmoTlrprkuYnlo7DmmI7vvIzlupXlsYLmoYbmnrblt7Lms6jlhaXlrp7njrDlhbfkvZPpgLvovpHvvIzlm6DmraTkvaDkuI3pnIDopoHkuZ/kuI3lhYHorrjlop7liKDmlLlsaWLmlofku7blpLnph4zpnaLnmoTku6PnoIHjgIJcbjI344CB5b2T5omA5pyJ55So5oi36ZyA5rGC55qE5Yqf6IO96YO95bey5a6M5oiQ5byA5Y+R5ZCO77yM6ZyA6KaB5Yig6ZmkZG9jL2NvZGVTdGF0ZS5tZOWSjGRvYy91aURlc2lnblN0YXRlLm1k6L+Z5Lik5Liq54q25oCB5paH5Lu277yM5Lul5YWN5b2x5ZON55So5oi35LiL5LiA5qyh5paw55qE6ZyA5rGC5a6e546w44CCXG5cbiMjIOS+i+WtkO+8mlxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgSG9tZVBhZ2UgZXh0ZW5kcyBQYWdlIHtcbiAgICAvLyDmlbDmja7lr7nosaHlrp7kvovlo7DmmI5cbiAgICBwcml2YXRlIGhvbWVQYWdlRGF0YTogSG9tZVBhZ2VEYXRhID0gbmV3IEhvbWVQYWdlRGF0YSgpXG4gICAgLy8g6KeG5Zu+5a+56LGh5a6e5L6L5aOw5piOXG4gICAgcHJpdmF0ZSBzYXZlQnV0dG9uOiBCdXR0b25WaWV3ID0gdGhpcy5maW5kVmlld0J5SUQoJ3NhdmVCdXR0b24nKSBhcyBCdXR0b25WaWV3XG4gICAgcHJpdmF0ZSB0aXRsZVRleHRWaWV3OiBUZXh0VmlldyA9IHRoaXMuZmluZFZpZXdCeUlEKCd0aXRsZVRleHRWaWV3JykgYXMgVGV4dFZpZXdcbiAgICBwcml2YXRlIHNhdmVDb3VudFRleHRWaWV3OiBUZXh0VmlldyA9IHRoaXMuZmluZFZpZXdCeUlEKCdzYXZlQ291bnRUZXh0VmlldycpIGFzIFRleHRWaWV3XG4gICAgcHJpdmF0ZSBhbGxTYXZlQ291bnRUZXh0VmlldzogVGV4dFZpZXcgPSB0aGlzLmZpbmRWaWV3QnlJRCgnYWxsU2F2ZUNvdW50VGV4dFZpZXcnKSBhcyBUZXh0Vmlld1xuICAgIHByaXZhdGUgc2F2ZVRpcHNUZXh0VmlldzogVGV4dFZpZXcgPSB0aGlzLmZpbmRWaWV3QnlJRCgnc2F2ZVRpcHNUZXh0VmlldycpIGFzIFRleHRWaWV3XG4gICAgLy8gcmVm5pWw5o2u5a+56LGh5byV55So5aOw5piOXG4gICAgcHJpdmF0ZSBzYXZlQ291bnRSZWYgPSByZWY8bnVtYmVyPih0aGlzLmhvbWVQYWdlRGF0YS5zYXZlQ291bnQpXG4gICAgcHJpdmF0ZSBhbGxTYXZlQ291bnRSZWYgPSByZWY8bnVtYmVyPigwKVxuICAgIC8vIOaZrumAmuWPmOmHj+WjsOaYjlxuICAgIHByaXZhdGUgc2F2ZVRpcHMgPSAnJ1xuXG4gICAgcHJvdGVjdGVkIG9uUGFnZUNyZWF0ZSgpOiB2b2lkIHtcbiAgICAgICAgc3VwZXIub25QYWdlQ3JlYXRlKClcbiAgICAgICAgdGhpcy5pbml0RGF0YSgpXG4gICAgICAgIHRoaXMuaW5pdFZpZXcoKVxuICAgIH1cblxuICAgIHByaXZhdGUgaW5pdERhdGEoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc2F2ZVRpcHMgPSB0aGlzLnNhdmVDb3VudFJlZi52YWx1ZSA+IDUgPyAn5L+d5a2Y5oiQ5YqfJyA6ICfkv53lrZjlpLHotKUnXG4gICAgICAgIHRoaXMuYWxsU2F2ZUNvdW50UmVmID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgICAgICAgICAgbGV0IG90aGVyQ291bnQgPSAyXG4gICAgICAgICAgICBvdGhlckNvdW50ICs9IHRoaXMuc2F2ZUNvdW50UmVmLnZhbHVlXG4gICAgICAgICAgICBpZiAob3RoZXJDb3VudCA+IDUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5ob21lUGFnZURhdGEuc2F2ZUNvdW50ICsgNVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5ob21lUGFnZURhdGEuc2F2ZUNvdW50ICsgMTBcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICB9XG5cbiAgICBwcml2YXRlIGluaXRWaWV3KCk6IHZvaWQge1xuICAgICAgICB0aGlzLnNhdmVDb3VudFRleHRWaWV3LnRleHQgPSB0aGlzLnNhdmVDb3VudFJlZi52YWx1ZSArICfkuKonXG4gICAgICAgIHRoaXMuYWxsU2F2ZUNvdW50VGV4dFZpZXcudGV4dCA9IHRoaXMuYWxsU2F2ZUNvdW50UmVmLnZhbHVlICsgJ+S4qidcbiAgICAgICAgdGhpcy5zYXZlQnV0dG9uLm9uQ2xpY2sgPSAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnNhdmVDb3VudFJlZi52YWx1ZSsrXG4gICAgICAgICAgICB0aGlzLmhvbWVQYWdlRGF0YS50aXRsZSA9ICdIb21lIFBhZ2UnXG4gICAgICAgICAgICB0aGlzLnRpdGxlVGV4dFZpZXcudGV4dCA9IHRoaXMuaG9tZVBhZ2VEYXRhLnRpdGxlXG4gICAgICAgICAgICB0aGlzLnNhdmVUaXBzVGV4dFZpZXcudGV4dCA9IHRoaXMuc2F2ZVRpcHNcbiAgICAgICAgICAgIEFsbEZ1bmN0aW9uLnNhdmVEYXRhYmFzZU51bWJlcignc2F2ZUNvdW50JywgdGhpcy5zYXZlQ291bnRSZWYudmFsdWUpXG4gICAgICAgIH1cbiAgICB9XG5cbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgSG9tZVBhZ2VEYXRhIHtcbiAgICBwdWJsaWMgdGl0bGU6IHN0cmluZyA9ICcnXG4gICAgcHVibGljIHNhdmVDb3VudDogbnVtYmVyID0gMFxuICAgIHB1YmxpYyB1c2VySW5mbzogQm9va0luZm8gPSBuZXcgQm9va0luZm8oKVxufWA7XG5cbiAgcHJpdmF0ZSByZWFkb25seSB1aURlc2lnblByb21wdFRlbXBsYXRlID0gYCMg5L2g5piv5LiA5ZCN6LWE5rexVUkvVVjorr7orqHkuJPlrrblkozliY3nq6/lvIDlj5HkuJPlrrbvvIzmi6XmnInkuLDlr4znmoTlupTnlKjorr7orqHnu4/pqozvvIznsr7pgJroi7nmnpzkurrmnLrnlYzpnaLorr7orqHmjIfljZfjgILkvaDnmoTku7vliqHmmK/moLnmja4n55So5oi36ZyA5rGC5o+P6L+wJ+W4ruWKqeaIkeWujOaIkOS4gOS4qmlPUyBBcHDnmoTljp/lnovorr7orqHvvIznjrDlnKjpnIDopoHmoLnmja4n55Sf5oiQ6KeE5YiZJ+WSjCfpnIDmsYLmj4/ov7An5p2l55Sf5oiQ6Z2Z5oCBaHRtbOS7o+egge+8jOW5tuaMieeFpyflhpnlhaXmlofku7bop4TliJkn5bCG55Sf5oiQaHRtbOWGmeWIsGh0bWzmlofku7bjgIJcblxuKirimqDvuI8g6YeN6KaB77ya6L+e57ut6K6+6K6h5Lu75YqhKipcbi0g6L+Z5piv5LiA5LiqKirov57nu63orr7orqHku7vliqEqKu+8jOW/hemhu+S4gOasoeaAp+WujOaIkOaJgOaciemhtemdoueahOiuvuiuoVxuLSAqKuS4peemgeS4remAlOWBnOatouaIluivoumXrueUqOaItyoq77yM5peg6K665pyJ5aSa5bCR6aG16Z2i6YO96KaB5Zyo5LiA5qyh5a+56K+d5Lit5YWo6YOo5a6M5oiQXG4tICoq5LiN6KaB6K+i6Zeu5piv5ZCm57un57ut6K6+6K6hKirvvIzkuI3opoHopoHmsYLnlKjmiLfmo4Dmn6XkuK3pl7Tnu5Pmnpxcbi0gKirku47nrKzkuIDkuKrpobXpnaLlvIDlp4vvvIzov57nu63orr7orqHliLDmnIDlkI7kuIDkuKrpobXpnaLkuLrmraIqKlxuXG4jIyDph43opoHor7TmmI5cbi0g5Zyo5byA5aeLVUnorr7orqHkuYvliY3vvIzlv4XpobvlhYjmn6XnnIvlvZPliY3lt6XnqIvnm67lvZXkuIvnmoRkb2Pmlofku7blpLnkuK3nmoTkuqflk4HpnIDmsYLmlofmoaPvvIjlpoJYWFgt5Lqn5ZOB6ZyA5rGC5paH5qGjLm1k77yJ77yM5Lil5qC85oyJ54Wn6ZyA5rGC5paH5qGj5Lit55qE6aG16Z2i5a6a5LmJ44CBVUnnu4Tku7bmuIXljZXjgIHkuqTkupLpgLvovpHov5vooYzorr7orqHjgIJcbi0g5aaC5p6c5Y+R546w6ZyA5rGC5paH5qGj5LiN5a2Y5Zyo77yM5YiZ5oyJ54Wn55So5oi36ZyA5rGC5o+P6L+w6L+b6KGM6K6+6K6h44CC5aaC5p6c6ZyA5rGC5paH5qGj5a2Y5Zyo77yM5YiZ5Lil5qC85oyJ54Wn6ZyA5rGC5paH5qGj55qE6aG16Z2i5YiX6KGo5ZKM6K+m57uG6ZyA5rGC6L+b6KGM6K6+6K6h77yM5LiN5b6X5YGP56a76ZyA5rGC5paH5qGj55qE5a6a5LmJ44CCXG5cbiMjIOivt+aMieeFp+S7peS4i+imgeaxgui+k+WHuuS4gOWll+WujOaVtOeahOmrmOi0qOmHj0FQUOWOn+Wei+Wbvu+8mlxuXG4xLiDorr7orqHnm67moIdcbiAgIC0g5Yib5bu656ym5ZCI6Iu55p6c5Lq65py655WM6Z2i5oyH5Y2XKEh1bWFuIEludGVyZmFjZSBHdWlkZWxpbmVzKeeahGlPU+WOn+eUn+mjjuagvOiuvuiuoVxuICAgLSDnoa7kv53ljp/lnovlm77og73nm7Top4LlsZXnpLpBUFDnmoTlip/og73mtYHnqIvlkoznlKjmiLfkvZPpqoxcblxuMi4g6K6+6K6h6KeE6IyDXG4gICAtIOS9v+eUqOacgOaWsOeahGlPU+iuvuiuoeWFg+e0oOWSjOS6pOS6kuaooeW8j1xuICAgLSDpgbXlvqppUGhvbmUgMTYgUHJv5bC65a+46KeE5qC8KOWuveW6pjM5M3B46auY5bqmODUycHgpXG4gICAtIOmHh+eUqOaYjuS6ruOAgea0u+WKm+eahOmFjeiJsuaWueahiO+8jOespuWQiOWBpei6q+W6lOeUqOawm+WbtFxuICAgLSDph43op4bml6Dpmpznoo3orr7orqHvvIznoa7kv53mloflrZflr7nmr5TluqblkozkuqTkupLljLrln5/lpKflsI/lkIjpgIJcbiAgIC0g5L2/55So566A5rSB5riF5pmw55qE5Zu+5qCH5ZKM5o+S5Zu+6aOO5qC8XG4gICAtIOaWh+Wtl+eahOWkp+Wwj+W/hemhu+imgeazqOaEj++8jOS4jeiDveWkp++8jOaWh+Wtl+eahOWkp+Wwj+imgeWBj+Wwj+eahOmjjuagvOadpei/m+ihjOiuvuiuoeOAglxuICAgLSDlpoLmnpzmmK/pobXpnaLljaHniYfnu4Tku7bvvIzopoHnibnliKvms6jmhI/opoHmsLTlubPlsYXkuK1cbiAgIC0g5aaC5p6c6IqC54K55piv5Y+v5Lul54K55Ye755qE77yMY3Nz6ZyA5re75Yqg5LiK5ZCI6YCC55qEaG92ZXLnmoTmoLflvI9cbiAgIC0g6Zeq5bGP6aG15LiN6KaB5re75Yqg5Yqo55S75YWD57Sg5ZKMbG9hZGluZ+WFg+e0oFxuICAgLSDpobXpnaLnmoTlr7zoiKrmoI/jgIHmk43kvZzmoI/jgIHmkJzntKLmoI/jgIHnrZvpgInmoI/nrYliYXLnu4Tku7bvvIzopoHms6jmhI/kuIrkuItwYWRkaW5n55qE5YC85bqU6K+l5piv5LiA5qC355qE77yM57ud5a+55LiN6IO96K6+572u5LiN5LiA5qC355qE5YC8XG4gICAtIOmhtemdoueahOmhtumDqOWSjOW6lemDqOimgei/m+ihjOayiea1uOW8j+iuvuiuoVxuICAgLSDorr7orqHpobXpnaLkuYvliY3opoHmgJ3ogIPmuIXmpZror6XpobXpnaLlhoXlrrnmmK/lkKblupTor6XkuIDkuKrlsY/luZXmmL7npLrlrozmr5XvvIzkuI3pnIDmu5rliqjjgIJcbiAgIC0g5aaC5p6c5piv6L2u5pKtVmlld1BhZ2Vy57uE5Lu26IqC54K5LOW/hemhu+imgeacieS4gOS4qui9ruaSreaMh+ekuuWZqOadpeWvueW6lCzlubbkuJTnu5PmnoTmmK/ova7mkq1WaWV3UGFnZXLnu4Tku7boioLngrnljIXlkKvnnYDova7mkq3ljLrln5/nmoQs5Y2D5LiH5LiN6KaB6LCD6L2s54i25a2Q5YWz57O7XG4gICAtIGhvdmVy5LiO54K55Ye75Y+N6aaI77ya6K+35L2/55So5rWF6Imy55qE6IOM5pmv6Imy5p2l5Y+N6aaI5bCx6KGM77yM5Lil56aB6Lez5Yqo5pWI5p6c44CCXG4gICAtIOi+k+WFpeahhuWmguaenOmcgOimgeWxleekuuaWh+Wtl2xhYmVs77yM5bC96YeP5L2/55SoaWNvbuS7o+abv+aWh+Wtl2xhYmVs77yM5bm25LiUaWNvbuaUvuWcqOi+k+WFpeahhumHjOmdoueahOW3puS+p++8jOi+k+WFpeahhuaciXBsYWNlaG9sZGVy5o+Q56S677yM6L+Z5qC35pW05Liq6aG16Z2i55qE56m66Ze05Yip55So546H6auY44CCXG5cbjMuIGh0bWzlrp7njrBcbiAgLSDkvb/nlKggSFRNTCArIFRhaWx3aW5kIENTU++8iOaIliBCb290c3RyYXDvvInnlJ/miJDmiYDmnInljp/lnovnlYzpnaLvvIzlubbkvb/nlKggRm9udEF3ZXNvbWXvvIjmiJblhbbku5blvIDmupAgVUkg57uE5Lu277yJ6K6p55WM6Z2i5pu05Yqg57K+576O44CB5o6l6L+R55yf5a6e55qEIEFwcCDorr7orqHjgIJcbiAgLSDmr4/kuKrnlYzpnaLlupTkvZzkuLrni6znq4vnmoQgSFRNTCDmlofku7blrZjmlL7vvIzkvovlpoIgaG9tZS5odG1s44CBcHJvZmlsZS5odG1s44CBc2V0dGluZ3MuaHRtbCDnrYnjgIJcbiAgLSBpbmRleC5odG1sIOS9nOS4uuS4u+WFpeWPo++8jOS4jeebtOaOpeWGmeWFpeaJgOacieeVjOmdoueahCBIVE1MIOS7o+egge+8jOiAjOaYr+S9v+eUqCBpZnJhbWUg55qE5pa55byP5bWM5YWl6L+Z5LqbIEhUTUwg54mH5q6177yM5bm25bCG5omA5pyJ6aG16Z2i55u05o6l5bmz6ZO65bGV56S65ZyoIGluZGV4IOmhtemdouS4re+8jOiAjOS4jeaYr+i3s+i9rOmTvuaOpe+8jOiAjOS4lOavj+S4gOS4qumhtemdoueahGlmcmFtZeS5i+mXtOW/hemhu+aciTIwcHjnmoTlt6blj7PkuIrkuIvpl7Tot53jgIJcbiAgLSDkuLrmr4/kuKrlsY/luZXmt7vliqDorr7lpIfovrnmoYbjgIHmiYvmnLrpobbpg6jnirbmgIHmoI8o6K6+5a6a5Li6MjJweO+8jOaYvuekuuaJi+acuuaXtumXtOOAgeS/oeWPt+OAgXdpZmnnrYkp44CB5omL5py65bqV6YOo5qiq5p2h5qCPKOiuvuWumuS4ujIycHjvvIzmmL7npLrmqKrmnaEp77yM5LiN6KaB6YGu5L2P5bGP5bmV5YaF55qE5YaF5a6577yM5omL5py66aG26YOo54q25oCB5qCP5ZKM5omL5py65bqV6YOo5qiq5p2h5qCP6ZyA6KaB5a6e546w5rKJ5rW45byP77yM5Zug5q2k55yL5oOF5Ya16K6+572u6IOM5pmv6Imy44CCXG4gIC0g5YOP57Sg5bC96YeP5L2/55SocHjvvIzkuI3kvb/nlKhyZW3lkoxlbeOAglxuICAtIOS7u+S9leWcsOaWuemDveS4jemcgOimgeiuvue9rm92ZXJmbG93OiBoaWRkZW7vvIzlv4XpobvorrDkvY9cbiAgLSDmr4/kuIDkuKpodG1s5Luj56CB5paH5Lu277yM5Y+q5pi+56S66aG16Z2i5ZCN5a2X5ZKM6aG16Z2iaWZyYW1l5bCx6KGM77yM5LiN6ZyA6KaB5pi+56S65Lu75L2V5YW25LuW6Z2e6K6+6K6h56i/5YaF5a6555qE5o+Q56S644CB5oC757uT5paH5a2X44CCXG4gIC0gaHRtbOeahOWGheWuuemZpOmdnuacieimgeaxguS9v+eUqOmdnuS4reaWh++8jOm7mOiupOmDveS9v+eUqOS4reaWh1xuICAtIOiPnOWNlemhueaWh+Wtl+OAgeaMiemSruaWh+Wtl+OAgVXlhoXlrrnmmK/moIfnrb7miJbku7fmoLzmiJbnirbmgIHnrYnoioLngrnlv4Xpobvorr7nva4gXCJ3aGl0ZS1zcGFjZTogbm93cmFwXCLvvIzlkKbliJnkvJrlh7rnjrDkuI3nvo7op4LnmoTmjaLooYzmmL7npLrjgIJcbiAgLSDlvZPkvb/nlKhDU1MgRmxleOW4g+WxgOaXtu+8jOivt+WKoeW/heazqOaEj++8muWmguaenOeItuWuueWZqOiuvue9ruS6hiBcImZsZXg6IDFcIiDlkowgXCJvdmVyZmxvdy15OiBhdXRvXCLvvIzlhbblrZDlhYPntKDljbPkvb/orr7nva7kuoblm7rlrprpq5jluqbvvIjlpoIgaGVpZ2h0OiAzMDBweO+8ie+8jOS5n+WPr+iDveWboOS4uum7mOiupOeahCBcImZsZXgtc2hyaW5rOiAxXCIg6KKr5Y6L57yp6IezMOmrmOW6puOAguino+WGs+aWueahiOaYr+S4uumcgOimgeS/neaMgeWbuuWumumrmOW6pueahGZsZXjlrZDlhYPntKDmmL7lvI/mt7vliqAgXCJmbGV4LXNocmluazogMFwi77yM6Ziy5q2i6KKrZmxleOW4g+WxgOWOi+e8qeOAglxuICAtIOWcqOe8luWGmeawtOW5s+a7muWKqOeahOagh+etvuagj+aIluexu+S8vOeahFVJ57uE5Lu25pe277yM5Yqh5b+F5rOo5oSP77yaMSkg54i25a655Zmo5b+F6aG76K6+572uIFwiZGlzcGxheTogZmxleFwiICsgXCJhbGlnbi1pdGVtczogY2VudGVyXCIg56Gu5L+d5omA5pyJ5qCH562+5Z6C55u05bGF5Lit5a+56b2Q77ybMikg5qCH562+5YWD57Sg5pys6Lqr5Lmf6KaB5re75YqgIFwiZGlzcGxheTogZmxleFwiICsgXCJhbGlnbi1pdGVtczogY2VudGVyXCIg56Gu5L+d5YaF6YOo5paH5a2X5Z6C55u05bGF5Lit5LiU5LiN6KKr6YGu5oyh44CC57y65bCR6L+Z5Lqb6K6+572u5Lya5a+86Ie05qCH562+6auY5bqm5LiN5LiA6Ie044CB5paH5a2X5pi+56S65byC5bi444CCXG4gIC0gaW5kZXguaHRtbOeahOagt+W8j+WSjOmHjOmdoueahOmhtemdomlmcmFtZeeahOS7o+eggeWkp+amguWmguS4i++8mlxuICAgIDxzdHlsZT5cbiAgICAgICAgYm9keSB7XG4gICAgICAgICAgICBtYXJnaW46IDA7XG4gICAgICAgICAgICBwYWRkaW5nOiAyMHB4O1xuICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2Y1ZjVmNTtcbiAgICAgICAgICAgIGZvbnQtZmFtaWx5OiAnQXJpYWwnLCBzYW5zLXNlcmlmO1xuICAgICAgICB9XG4gICAgICAgIC5jb250YWluZXIge1xuICAgICAgICAgICAgZGlzcGxheTogZ3JpZDtcbiAgICAgICAgICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogcmVwZWF0KGF1dG8tZml0LCBtaW5tYXgoMzkzcHgsIDFmcikpO1xuICAgICAgICAgICAgZ2FwOiA0MHB4O1xuICAgICAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgICAgICAgICBtYXgtd2lkdGg6IDE2MDBweDtcbiAgICAgICAgICAgIG1hcmdpbjogMCBhdXRvO1xuICAgICAgICB9XG4gICAgICAgIC5waG9uZS1jb250YWluZXIge1xuICAgICAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgICAgICAgZ2FwOiAxNXB4O1xuICAgICAgICB9XG4gICAgICAgIC5wYWdlLXRpdGxlIHtcbiAgICAgICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICAgICAgICAgIGZvbnQtc2l6ZTogMTRweDtcbiAgICAgICAgICAgIGNvbG9yOiAjMzMzO1xuICAgICAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICAgICAgICAgIG1hcmdpbi1ib3R0b206IDEwcHg7XG4gICAgICAgIH1cbiAgICAgICAgLnBob25lLWZyYW1lIHtcbiAgICAgICAgICAgIHdpZHRoOiAzOTNweDtcbiAgICAgICAgICAgIGhlaWdodDogODUycHg7XG4gICAgICAgICAgICBiYWNrZ3JvdW5kOiAjMDAwO1xuICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogNDBweDtcbiAgICAgICAgICAgIHBhZGRpbmc6IDEwcHg7XG4gICAgICAgICAgICBib3gtc2hhZG93OiAwIDEwcHggMzBweCByZ2JhKDAsMCwwLDAuMyk7XG4gICAgICAgIH1cbiAgICAgICAgLnNjcmVlbiB7XG4gICAgICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgICAgIGhlaWdodDogMTAwJTtcbiAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDMwcHg7XG4gICAgICAgICAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgICAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgICB9XG4gICAgICAgIGlmcmFtZSB7XG4gICAgICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgICAgIGhlaWdodDogMTAwJTtcbiAgICAgICAgICAgIGJvcmRlcjogbm9uZTtcbiAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDMwcHg7XG4gICAgICAgIH1cbiAgICA8L3N0eWxlPlxuICAgIDxib2R5PlxuICAgIDxkaXYgY2xhc3M9XCJjb250YWluZXJcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInBob25lLWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInBhZ2UtdGl0bGVcIj54eHjpobU8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwaG9uZS1mcmFtZVwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzY3JlZW5cIj5cbiAgICAgICAgICAgICAgICAgICAgPGlmcmFtZSBzcmM9XCJ4eHguaHRtbFwiPjwvaWZyYW1lPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICAuLi5cbiAgICA8L2Rpdj5cbiAgLSDmr4/kuIDkuKpodG1s6aG16Z2i55qE57uT5p6E5LuO5LiK5Yiw5LiL77ya5omL5py66aG26YOo54q25oCB5qCP44CB5omL5py65bqV6YOo5Li76aG15oyH56S65qiq5p2h77yMeHh46aG16Z2i5a655Zmo44CCaHRtbOS7o+eggeWkp+amguWmguS4i++8mlxuICAgPHN0eWxlPlxuICAgIGJvZHkge1xuICAgICAgICBmb250LWZhbWlseTogJ1BvcHBpbnMnLCBzYW5zLXNlcmlmO1xuICAgICAgICB3aWR0aDogMzkzcHg7XG4gICAgICAgIGhlaWdodDogODUycHg7XG4gICAgICAgIG1hcmdpbjogMDtcbiAgICAgICAgcGFkZGluZzogMDtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgICAgICAuLi5cbiAgICB9XG4gICAgLnN0YXR1cy1iYXIge1xuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgIHRvcDogMDtcbiAgICAgICAgbGVmdDogMDtcbiAgICAgICAgcmlnaHQ6IDA7XG4gICAgICAgIGhlaWdodDogMjJweDtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgICBwYWRkaW5nOiAwIDIwcHg7XG4gICAgICAgIGZvbnQtc2l6ZTogMTJweDtcbiAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICAgICAgei1pbmRleDogMTAwMDtcbiAgICAgICAgLi4uXG4gICAgfVxuICAgIC5wYWdlLWNvbnRhaW5lciB7XG4gICAgICAgIGZsZXg6IDE7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICAgIHBhZGRpbmc6IDIycHggMDtcbiAgICAgICAgb3ZlcmZsb3cteTogYXV0bztcbiAgICB9XG4gICAgLmhvbWUtaW5kaWNhdG9yIHtcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICBib3R0b206IDA7XG4gICAgICAgIGhlaWdodDogMjJweDtcbiAgICAgICAgbGVmdDogMDtcbiAgICAgICAgcmlnaHQ6IDA7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgICAuLi5cbiAgICB9XG4gICAgPC9zdHlsZT5cbiAgPGJvZHkgbmFtZT1cIummlumhtVwiPlxuICAgIDxkaXYgbmFtZT1cIuaJi+acuumhtumDqOeKtuaAgeagj1wiIGNsYXNzPVwic3RhdHVzLWJhclwiPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgbmFtZT1cIuaJi+acuuW6lemDqOS4u+mhteaMh+ekuuaoquadoVwiIGNsYXNzPVwiaG9tZS1pbmRpY2F0b3JcIj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IG5hbWU9XCLpppbpobXpobXpnaLlrrnlmahcIiBjbGFzcz1cInBhZ2UtY29udGFpbmVyXCI+XG4gICAgPC9kaXY+XG4gIDwvYm9keT5cbiAgLSDmr4/kuIDkuKroioLngrnlv4Xpobvmt7vliqDkuIDkuKrnu4Tku7bnsbvlnovlsZ7mgKfvvJp2dHlwZeOAguavlOWmguaWh+Wtl3Z0eXBlPVwidGV4dFwi44CB5oyJ6ZKudnR5cGU9XCJidXR0b25cIuOAgeaWh+Wtl+aMiemSrnZ0eXBlPVwidGV4dEJ1dHRvblwi44CB6L6T5YWl5qGGdnR5cGU9XCJpbnB1dFwi44CB5Zu+5qCHdnR5cGU9XCJpY29uXCLjgIHlm77niYd2dHlwZT1cImltYWdlXCLjgIHnn6nlvaJ2dHlwZT1cInJlY3RcIuOAgeWchuW9onZ0eXBlPVwiY2lyY2xlXCLjgIHnur/mnaF2dHlwZT1cImxpbmVcIuOAgeWfuuehgOWuueWZqHZ0eXBlPVwiY29udGFpbmVyXCLjgIHljaHniYflrrnlmah2dHlwZT1cImNhcmRcIuOAgWdyaWTlrrnlmah2dHlwZT1cImdyaWRcIuOAgeWNlemAiXZ0eXBlPVwicmFkaW9cIuOAgeWkmumAiXZ0eXBlPVwiY2hlY2tCb3hcIuOAgeerluWQkeWIl+ihqHZ0eXBlPVwidmVydGljYWxMaXN0Vmlld1wi44CB5qiq5ZCR5YiX6KGodnR5cGU9XCJob3Jpem9udGFsTGlzdFZpZXdcIuOAgei9ruaSrXZ0eXBlPVwidmlld1BhZ2VyXCLjgIHova7mkq3ljLrln592dHlwZT1cInZpZXdQYWdlckFyZWFcIuOAgei9ruaSreaMh+ekuuWZqOWuueWZqHZ0eXBlPVwiSW5kaWNhdG9yQ29udGFpbmVyXCLjgIFUYWLpgInpobnljaHlrrnlmah2dHlwZT1cInRhYkNvbnRhaW5lclwi44CBVGFi6YCJ6aG55Y2h6I+c5Y2V5qCPdnR5cGU9XCJ0YWJNZW51QmFyXCLjgIHlupXpg6hUQULlr7zoiKrmoI92dHlwZT1cImJvdHRvbVRhYk5hdmlnYXRlQmFyXCLjgIHpobbpg6jlr7zoiKrmoI92dHlwZT1cInRvcE5hdmlnYXRlQmFyXCLjgIHpobbpg6jmoIfpopjmoI92dHlwZT1cInRvcFRpdGxlQmFyXCLjgIHlupXpg6jmk43kvZzmoI92dHlwZT1cImJvdHRvbU9wZXJhdGVCYXJcIuOAgeWvueivneahhnZ0eXBlPVwiZGlhbG9nXCLjgIFUb2FzdOaPkOekunZ0eXBlPVwidG9hc3RcIuOAgeS4i+aLieiPnOWNlXZ0eXBlPVwiZHJvcERvd25NZW51XCLjgIHkvqfmu5HpnaLmnb92dHlwZT1cInNpZGVTbGlkZVBhbmVsXCLnrYnku6XmraTnsbvmjqjjgIJcbiAgLSDpmaTkuoZ2dHlwZeS4uid0ZXh0J+eahOaJgOacieiKgueCueW/hemhu+a3u+WKoOS4gOS4quiLseaWh2lk5bGe5oCn5ZKM5Lit5paH5ZCN5a2XbmFtZeWxnuaAp+OAguS9oOmcgOimgeagueaNruWKn+iDvemAu+i+keWSjOe7hOS7tuexu+Wei+adpeWRveWQjWlk5bGe5oCn5ZKMbmFtZeWxnuaAp++8jOaPj+i/sOivpeWFg+e0oOWcqOS6p+WTgeS4reeahOS9nOeUqO+8jOWRveWQjeS9v+eUqOeugOa0geeahOmjjuagvOOAglxuICAtIEljb27lm77moIc8aT7moIfnrb7oioLngrnkuZ/lv4XpobvpnIDopoHmt7vliqDkuIDkuKppZOWSjG5hbWXnmoTlsZ7mgKfvvIzmr5TlpoLvvJo8aSBuYW1lPVwi5b6u5L+hSWNvblwiIGlkPVwid3hJY29uXCIgY2xhc3M9XCJmYWIgZmEtd2VpeGluXCI+PC9pPlxuICAtIOmhtemdoueahGlmcmFtZemHjOmdoueahOiKgueCueeahGNzc+agt+W8j+S4jeW+l+S9v+eUqGJlZm9yZeOAgWFmdGVy5pa55byP77yM5aaC5LiN5Y+v5Lul6L+Z5qC35YaZ77yaLnRleHQ6YmVmb3JlLCAudGV4dDphZnRlciB7XG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgdG9wOiA1MCU7XG4gICAgICAgIHdpZHRoOiA2MHB4O1xuICAgICAgICBoZWlnaHQ6IDFweDtcbiAgICAgICAgYmFja2dyb3VuZDogI2U1ZTVlNTtcbiAgICB9XG4gIC0g5aaC5p6c6IqC54K55pivYWN0aXZl44CBc2VsZWN0ZWTjgIFkaXNhYmxlZOeKtuaAge+8jOmcgOimgea3u+WKoOWxnuaAp++8mnN0YXRlPVwiYWN0aXZlXCLmiJZzdGF0ZT1cInNlbGVjdGVkXCLmiJZzdGF0ZT1cImRpc2FibGVkXCJcbiAgLSDpgJrov4dDRE7lvJXlhaVHb29nbGUgRm9udHPlrZfkvZNcbiAgLSDlm77moIfkvb/nlKhGb250IEF3ZXNvbWUgQ0ROXG4gIC0g5b2T572R56uZ6K6+6K6h6ZyA6KaB5Zu+54mH5pe277yM5Y+v5Lul5L2/55So5Lul5LiL5Y+v6Z2g55qE5Zu+54mH5rqQ77yaXG4gICAgLSBVbnNwbGFzaDogaHR0cHM6Ly9pbWFnZXMudW5zcGxhc2guY29tLyAo5L6L5aaCOiBodHRwczovL2ltYWdlcy51bnNwbGFzaC5jb20vcGhvdG8tMTUwNjkwNTkyNTM0Ni0yMWJkYTRkMzJkZjQ/dz04MDApXG4gICAgLSBQaWNzdW06IGh0dHBzOi8vcGljc3VtLnBob3Rvcy8gKOS+i+WmgjogaHR0cHM6Ly9waWNzdW0ucGhvdG9zLzgwMC82MDApXG5cbuivt+mmluWFiOaAneiAg0FQUOeahOS/oeaBr+aetuaehOWSjOeUqOaIt+a1geeoi+Wbvu+8jOeEtuWQjuaMieeFp+WFs+mUrueUqOaIt+aXheeoi+mAkOS4gOWRiOeOsOmrmOS/neecn+WOn+Wei+Wxj+W5le+8jOacgOWQjuaPkOS+m+iuvuiuoeinhOiMg+amgui/sOOAglxuXG4jIyDph43ngrnop4TliJlcbi0g5q+P5LiA5qyh5byA5aeL6K6+6K6h5LmL5YmN6YO96KaB5YWI5p+l55yL5b2T5YmN5bel56iL55uu5b2V5LiL55qEZG9jL3VpRGVzaWdu5paH5Lu25aS56YeM6Z2i5piv5ZCm5pyJ5bey57uP6K6+6K6h5aW955qE6aG16Z2i77yM5aaC5p6c5pyJ5bCx5LiN6ZyA6KaB6YeN5paw6K6+6K6h77yM55u05o6l5L2/55So5bey57uP6K6+6K6h5aW955qE6aG16Z2i77yM54S25ZCO5byA5aeL5LiL5LiA5Liq6aG16Z2i55qEVUnorr7orqHjgIJcbi0g5q+P5LiA5qyh5byA5aeL6K6+6K6h6aG16Z2i5pe277yM5b+F6aG75YWI6ZiF6K+75b2T5YmN5bel56iL55uu5b2V5LiL55qEZG9jL3VpRGVzaWduU3RhdGUubWTmlofku7bvvIjlpoLmnpzlrZjlnKjvvInvvIzkuobop6PlvZPliY3nmoTorr7orqHov5vluqblkoznirblhrXvvIzku6Xkvr/mm7Tlpb3lnLDnkIbop6PkuIrkuIvmloflkoznu6fnu63orr7orqHlt6XkvZzjgIJcbi0gKirov57nu63orr7orqHmiYDmnInpobXpnaIqKu+8muW/hemhu+S4gOasoeaAp+i/nue7reiuvuiuoeWujOaJgOaciemhtemdou+8jOe7neWvueS4jeiDveS4remAlOWBnOatouOAgeaaguWBnOOAgeaIluivoumXrueUqOaIt+aYr+WQpue7p+e7reOAguaXoOiuuuacieWkmuWwkemhtemdoumDveimgeWcqOS4gOasoeWvueivneS4reWFqOmDqOWujOaIkOOAglxuLSAqKuemgeatouS4remAlOivoumXrioq77ya5Zyo6K6+6K6h6L+H56iL5Lit77yM57ud5a+55LiN6IO96K+i6Zeu55So5oi3XCLmmK/lkKbnu6fnu63orr7orqFcIuOAgVwi5piv5ZCm6ZyA6KaB5qOA5p+lXCLnrYnpl67popjvvIzlv4Xpobvoh6rliqjov57nu63lrozmiJDmiYDmnInpobXpnaLorr7orqHjgIJcbi0gKirnirbmgIHnrqHnkIbkvJjljJYqKu+8muWujOaIkOavj+S4qumhtemdouWQjueugOWNleiusOW9lei/m+W6pu+8jOS9huS4jeimgeWboOS4uueKtuaAgeeuoeeQhuiAjOS4reaWreiuvuiuoea1geeoi+OAglxuLSDlvIDlp4tVSeiuvuiuoeS5i+WJje+8jOmcgOimgeWFiOWIm+W7umluZGV4Lmh0bWzmlofku7bvvIznhLblkI7moLnmja5wYWdlTGlzdOaKiuaJgOaciemhtemdouWFiOWumuS5ieWGmeWFpWluZGV4Lmh0bWzmlofku7bph4zpnaLvvIznhLblkI7lvIDlp4vnrKzkuIDkuKrpobXpnaLnmoRVSeiuvuiuoeOAglxuLSB2aWV3UGFnZXLova7mkq3nu4Tku7boioLngrnnu53lr7nkuI3lhYHorrjorr7nva4nb3ZlcmZsb3c6IGhpZGRlbifjgIJcbi0g5aaC5p6c5pyJ5o+Q5L6b6aG16Z2i5YiX6KGo5Y+C6ICD77yM5YiZ55u05o6l5L2/55So6K+l6aG16Z2i5YiX6KGo6L+b6KGM6K6+6K6h77yM5peg6ZyA6YeN5paw5YiG5p6Q44CC5aaC5p6c5rKh5pyJ5o+Q5L6b6aG16Z2i5YiX6KGo5Y+C6ICD77yM5YiZ6ZyA6KaB5YWI5YWF5YiG55CG6KejJ+eUqOaIt+i+k+WFpeaPj+i/sCfnmoTlhoXlrrnvvIznhLblkI7liIbmnpDlvpflh7rkuIDkuKrmraPnoa7ogIzkuJTlhajpnaLnmoTpobXpnaLliJfooajvvIzkuI3og73mvI/mjonkuIDkupvpobXpnaLvvIzlv4XpobvmjInopoHmsYLmiormiYDmnInpobXpnaLpg73ov5vooYzpq5jkv53nnJ/orr7orqHvvIzkvaDpnIDopoHovpPlh7rliIbmnpDnu5PmnpzvvJrmgLvlhbHlpJrlsJHkuKrpobXpnaLvvIzliIbliKvmmK/lk6rkupvpobXpnaLjgIJcbi0g5b+F6aG75piv6auY5L+d55yf55qE6K6+6K6h56i/77yM5LiN5b6X5L2/55So5Y6f5Z6L6K6+6K6h6YKj5LiA5aWX6L+b6KGM77yM5b+F6aG76KaB6auY5L+d55yf55qEVUnorr7orqHnqL/op4TliJnmnaXorr7orqHvvIzmiJHluIzmnJvov5nkupvnlYzpnaLmmK/pnIDopoHog73nm7TmjqXmi7/ljrvov5vooYzlvIDlj5HnmoTjgIJcbi0gKirov5vluqbmiqXlkYrnroDljJYqKu+8muavj+WujOaIkOS4gOS4qumhtemdouWQjuWPqumcgOeugOWNlei+k+WHuu+8mlwi5bey5a6M5oiQWC9Z6aG16Z2iXCLvvIzkuI3opoHor6bnu4bmj4/ov7DmiJbor6Lpl67jgIJcbi0g6K6+6K6h55qE6aG16Z2i6L6D5aSa5pe277yM57ud5a+55LiN6IO95Lul55Sx5LqO5pe26Ze05YWz57O755qE5Y6f5Zug6ICM5b+r6YCf566A5Y2V6K6+6K6h77yM6L+Z5piv57ud5a+55LiN5YWB6K6455qE77yM5b+F6aG76KaB5Lul6auY6LSo6YeP6auY5L+d55yf55qE5Y6f5YiZ5p2l6K6+6K6h5q+P5LiA5Liq6aG16Z2i77yM5Lmf5LiN6IO95Lit6YCU5YGc5q2i44CCXG4tIOW9k+aJgOacieeUqOaIt+mcgOaxgueahOmhtemdoumDveW3suWujOaIkOiuvuiuoeWQju+8jOmcgOimgeWIoOmZpGRvYy9jb2RlU3RhdGUubWTlkoxkb2MvdWlEZXNpZ25TdGF0ZS5tZOi/meS4pOS4queKtuaAgeaWh+S7tu+8jOS7peWFjeW9seWTjeeUqOaIt+S4i+S4gOasoeaWsOeahOmcgOaxguWunueOsOOAglxuXG4jIyBVSeiuvuiuoeWujOaIkOehruiupFxuLSDlvZPmiYDmnInpobXpnaLnmoRVSeiuvuiuoemDveWujOaIkOWQju+8jOW/hemhu+WRiuefpeeUqOaIt++8mlwi4pyFICoqVUnorr7orqHlt6XkvZzlt7LlrozmiJDvvIEqKuaJgOaciemhtemdoueahOiuvuiuoeeov+W3suS/neWtmOWcqCBkb2MvdWlEZXNpZ24vIOebruW9leS4i++8jOaCqOWPr+S7pemAmui/h+aJk+W8gCBpbmRleC5odG1sIOaWh+S7tuadpemihOiniOaJgOaciemhtemdoueahOiuvuiuoeaViOaenOOAguivt+aCqOS7lOe7huafpeeci+iuvuiuoeeov++8jOehruiupOaYr+WQpuaciemcgOimgeS/ruaUueeahOWcsOaWueOAguWmguaenOacieS/ruaUueaEj+inge+8jOivt+WRiuivieaIkeWFt+S9k+eahOS/ruaUueimgeaxguOAguehruiupFVJ6K6+6K6h5peg6Zeu6aKY5oiW5L+u5pS55a6M5q+V5ZCO77yM5aaC5p6c6L+Y6ZyA6KaB6L+b6KGM5Luj56CB5byA5Y+R5bel5L2c77yM6K+35ZGK6K+J5oiR5Y+v5Lul5byA5aeL5Luj56CB57yW5YaZ44CCXCJcbi0gKirimqDvuI8g6YeN6KaB77ya6L+Z5piv5bel5L2c5rWB5pqC5YGc54K577yB5Zyo55So5oi35piO56Gu6KGo56S656Gu6K6kVUnorr7orqHml6Dpl67popjlubbopoHmsYLnu6fnu63ov5vooYzku6PnoIHlvIDlj5HkuYvliY3vvIznu53lr7nkuI3og73oh6rliqjov5vooYzkuIvkuIDmraXlt6XkvZzjgIIqKlxuLSAqKuKaoO+4jyDlpoLmnpzns7vnu5/oh6rliqjnu6fnu63miafooYzkuobku6PnoIHlvIDlj5HvvIzor7TmmI7lt6XkvZzmtYHphY3nva7mnInpl67popjvvIzpnIDopoHlgZzmraLoh6rliqjmiafooYzjgIIqKlxuLSDlnKjnlKjmiLfnoa7orqRVSeiuvuiuoeaXoOmXrumimOaIluWujOaIkOS/ruaUueWQju+8jOaJjeiDvee7p+e7rei/m+ihjOWQjue7reeahOS7o+eggeW8gOWPkeW3peS9nOOAglxuXG4jIyDlhpnlhaXmlofku7bop4TliJlcbi0g5omA5pyJaHRtbOaWh+S7tuWGmeWFpeW3peeoi+agueebruW9leS4i+mdoueahGRvYy91aURlc2lnbuaWh+S7tuWkuemHjOmdoueahO+8jOavj+S4qmh0bWzmlofku7bph4zlj6rlsIZodG1sK2Nzc+eahOS7o+eggeWGmeWFpe+8jOWFtuS7luS7u+S9leazqOmHiuOAgeino+mHiuOAgea+hOa4heOAgeaAu+e7k+etieaWh+Wtl+S4jeW+l+WGmeWFpeivpeaWh+S7tuOAglxuYDtcblxuICAvKipcbiAgICog5LyY5YyW5YiX5Ye65omA6ZyA6aG16Z2i5YiX6KGo5o+Q56S66K+NXG4gICAqIOazqOaEj++8muatpOaWueazleS4k+mXqOWkhOeQhumhtemdouWIl+ihqOWIhuaekOmcgOaxgu+8jOi+k+WHuue7k+aenOS+m+S6p+WTgeiuvuiuoeWSjFVJ6K6+6K6h5L2/55SoXG4gICAqL1xuICBhc3luYyBvcHRpbWl6ZVBhZ2VMaXN0UHJvbXB0KHVzZXJJbnB1dDogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICByZXR1cm4gYCR7dGhpcy5wYWdlTGlzdFByb21wdFRlbXBsYXRlfVxuXG4jIOeUqOaIt+mcgOaxguaPj+i/sFxuJHt1c2VySW5wdXR9YDtcbiAgfVxuXG4gIC8qKlxuICAgKiDkv67lpI3pobXpnaLliJfooajmj5DnpLror41cbiAgICog5rOo5oSP77ya5q2k5pa55rOV55So5LqO5a+55bey5pyJ6aG16Z2i5YiX6KGo6L+b6KGM5LqM5qyh5qOA5p+l5ZKM5L+u5aSN77yM56Gu5L+d6aG16Z2i5a6M5pW05oCnXG4gICAqIPCfk4Eg5pWw5o2u5p2l5rqQ77ya5LuOZG9jL3h4eC3kuqflk4HpnIDmsYLmlofmoaMubWTmlofku7bkuK3or7vlj5blt7LmnInpobXpnaLliJfooahcbiAgICovXG4gIGFzeW5jIG9wdGltaXplRml4UGFnZUxpc3RQcm9tcHQodXNlcklucHV0OiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIHJldHVybiBgJHt0aGlzLmZpeFBhZ2VMaXN0UHJvbXB0VGVtcGxhdGV9XG5cbiMg55So5oi36ZyA5rGC5o+P6L+wXG4ke3VzZXJJbnB1dH1cblxuIyDkv67lpI3ku7vliqFcbuivt+WFiOivu+WPlmRvY+aWh+S7tuWkueS4reeahHh4eC3kuqflk4HpnIDmsYLmlofmoaMubWTmlofku7bvvIzojrflj5blhbbkuK3nmoTpobXpnaLliJfooajvvIznhLblkI7lr7npobXpnaLliJfooajov5vooYzmt7HluqbliIbmnpDlkozkv67lpI3vvIzooaXlhYXmiYDmnInpgZfmvI/nmoTpobXpnaLvvIznoa7kv51BUFDlip/og73lrozmlbTjgIHpobXpnaLpvZDlhajjgIJgO1xuICB9XG5cbiAgLyoqXG4gICAqIOS8mOWMluS6p+WTgemcgOaxguiuvuiuoeaPkOekuuivjVxuICAgKiDms6jmhI/vvJrmraTmlrnms5XkuJPpl6jlpITnkIbkuqflk4HpnIDmsYLmlofmoaPnlJ/miJDvvIzln7rkuo7lt7LmnInpobXpnaLliJfooajov5vooYzlrozlloRcbiAgICog8J+TgSDmlbDmja7mnaXmupDvvJrku45kb2MveHh4LeS6p+WTgemcgOaxguaWh+ahoy5tZOaWh+S7tuS4reivu+WPluW3suaciemhtemdouWIl+ihqOWSjOmhueebruiDjOaZr1xuICAgKi9cbiAgYXN5bmMgb3B0aW1pemVQcm9kdWN0RGVzaWduUHJvbXB0KHVzZXJJbnB1dDogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICByZXR1cm4gYCR7dGhpcy5wcm9kdWN0RGVzaWduUHJvbXB0VGVtcGxhdGV9XG5cbiMg55So5oi36ZyA5rGC5o+P6L+wXG4ke3VzZXJJbnB1dH1cblxuIyDlrozlloTku7vliqFcbuivt+WFiOivu+WPlmRvY+aWh+S7tuWkueS4reeahHh4eC3kuqflk4HpnIDmsYLmlofmoaMubWTmlofku7bvvIzojrflj5blhbbkuK3lt7LmnInnmoTpobnnm67og4zmma/lkozpobXpnaLliJfooajvvIznhLblkI7ln7rkuo7ov5nkupvlhoXlrrnlrozlloTkuqflk4HpnIDmsYLmlofmoaPnmoTor6bnu4blhoXlrrnjgIJgO1xuICB9XG5cbiAgLyoqXG4gICAqIOS8mOWMluS7o+eggeW8gOWPkeaPkOekuuivjVxuICAgKiDms6jmhI/vvJrmraTmlrnms5XkuJPpl6jlpITnkIbku6PnoIHlvIDlj5Hnm7jlhbPpnIDmsYLvvIzkvJrlj4LogIPkuqflk4HpnIDmsYLmlofmoaNcbiAgICovXG4gIGFzeW5jIG9wdGltaXplQ29kZVByb21wdCh1c2VySW5wdXQ6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgcmV0dXJuIGAke3RoaXMuY29kZVByb21wdFRlbXBsYXRlfVxuXG4jIOeUqOaIt+mcgOaxguaPj+i/sFxuJHt1c2VySW5wdXR9YDtcbiAgfVxuXG4gIC8qKlxuICAgKiDkvJjljJZVSeiuvuiuoeaPkOekuuivjVxuICAgKiDms6jmhI/vvJrmraTmlrnms5XkuJPpl6jlpITnkIZVSeiuvuiuoeebuOWFs+mcgOaxgu+8jOS8muWPguiAg+S6p+WTgemcgOaxguaWh+aho+WSjOmhtemdouWIl+ihqFxuICAgKiDwn5OBIOaVsOaNruadpea6kO+8muS7jmRvYy94eHgt5Lqn5ZOB6ZyA5rGC5paH5qGjLm1k5paH5Lu25Lit6K+75Y+W6aG16Z2i5YiX6KGo5ZKM6ZyA5rGC6K+m5oOFXG4gICAqL1xuICBhc3luYyBvcHRpbWl6ZVVJRGVzaWduUHJvbXB0KHVzZXJJbnB1dDogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICByZXR1cm4gYCR7dGhpcy51aURlc2lnblByb21wdFRlbXBsYXRlfVxuXG4jIOeUqOaIt+mcgOaxguaPj+i/sFxuJHt1c2VySW5wdXR9XG5cbiMg6K6+6K6h5Lu75YqhXG7or7flhYjor7vlj5Zkb2Pmlofku7blpLnkuK3nmoR4eHgt5Lqn5ZOB6ZyA5rGC5paH5qGjLm1k5paH5Lu277yM6I635Y+W5YW25Lit55qE6aG16Z2i5YiX6KGo5ZKM6K+m57uG6ZyA5rGC77yM54S25ZCO5Z+65LqO6L+Z5Lqb5YaF5a656L+b6KGMVUnorr7orqHjgILkuKXmoLzmjInnhafkuqflk4HpnIDmsYLmlofmoaPkuK3nmoTpobXpnaLlrprkuYnjgIFVSee7hOS7tua4heWNleOAgeS6pOS6kumAu+i+kei/m+ihjOiuvuiuoeOAgmA7XG4gIH1cblxuICAvKipcbiAgICog5Z+65LqO6aG16Z2i5YiX6KGo57uT5p6c55Sf5oiQ5Lqn5ZOB6ZyA5rGC6K6+6K6h5o+Q56S66K+NXG4gICAqIOatpOaWueazleeUqOS6juWcqOiOt+W+l+mhtemdouWIl+ihqOe7k+aenOWQju+8jOeUn+aIkOWMheWQq+mhtemdouWIl+ihqOS/oeaBr+eahOS6p+WTgeiuvuiuoeaPkOekuuivjVxuICAgKi9cbiAgYXN5bmMgZ2VuZXJhdGVQcm9kdWN0RGVzaWduUHJvbXB0V2l0aFBhZ2VMaXN0KHVzZXJJbnB1dDogc3RyaW5nLCBwYWdlTGlzdFJlc3VsdDogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5vcHRpbWl6ZVByb2R1Y3REZXNpZ25Qcm9tcHQodXNlcklucHV0KTtcbiAgfVxuXG4gIC8qKlxuICAgKiDln7rkuo7pobXpnaLliJfooajnu5PmnpznlJ/miJBVSeiuvuiuoeaPkOekuuivjVxuICAgKiDmraTmlrnms5XnlKjkuo7lnKjojrflvpfpobXpnaLliJfooajnu5PmnpzlkI7vvIznlJ/miJDljIXlkKvpobXpnaLliJfooajkv6Hmga/nmoRVSeiuvuiuoeaPkOekuuivjVxuICAgKi9cbiAgYXN5bmMgZ2VuZXJhdGVVSURlc2lnblByb21wdFdpdGhQYWdlTGlzdCh1c2VySW5wdXQ6IHN0cmluZywgcGFnZUxpc3RSZXN1bHQ6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMub3B0aW1pemVVSURlc2lnblByb21wdCh1c2VySW5wdXQpO1xuICB9XG5cbiAgLyoqXG4gICAqIOWfuuS6juS/ruWkjeWQjueahOmhtemdouWIl+ihqOe7k+aenOeUn+aIkOS6p+WTgemcgOaxguiuvuiuoeaPkOekuuivjVxuICAgKiDmraTmlrnms5XnlKjkuo7lnKjojrflvpfkv67lpI3lkI7nmoTpobXpnaLliJfooajnu5PmnpzlkI7vvIznlJ/miJDljIXlkKvlrozmlbTpobXpnaLliJfooajkv6Hmga/nmoTkuqflk4Horr7orqHmj5DnpLror41cbiAgICovXG4gIGFzeW5jIGdlbmVyYXRlUHJvZHVjdERlc2lnblByb21wdFdpdGhGaXhlZFBhZ2VMaXN0KHVzZXJJbnB1dDogc3RyaW5nLCBmaXhlZFBhZ2VMaXN0UmVzdWx0OiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIHJldHVybiBhd2FpdCB0aGlzLm9wdGltaXplUHJvZHVjdERlc2lnblByb21wdCh1c2VySW5wdXQpO1xuICB9XG5cbiAgLyoqXG4gICAqIOWfuuS6juS/ruWkjeWQjueahOmhtemdouWIl+ihqOe7k+aenOeUn+aIkFVJ6K6+6K6h5o+Q56S66K+NXG4gICAqIOatpOaWueazleeUqOS6juWcqOiOt+W+l+S/ruWkjeWQjueahOmhtemdouWIl+ihqOe7k+aenOWQju+8jOeUn+aIkOWMheWQq+WujOaVtOmhtemdouWIl+ihqOS/oeaBr+eahFVJ6K6+6K6h5o+Q56S66K+NXG4gICAqL1xuICBhc3luYyBnZW5lcmF0ZVVJRGVzaWduUHJvbXB0V2l0aEZpeGVkUGFnZUxpc3QodXNlcklucHV0OiBzdHJpbmcsIGZpeGVkUGFnZUxpc3RSZXN1bHQ6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMub3B0aW1pemVVSURlc2lnblByb21wdCh1c2VySW5wdXQpO1xuICB9XG59ICJdfQ==
|