bytefun-ai-mcp 1.2.0 → 1.2.2

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 CHANGED
@@ -13,14 +13,32 @@ server.setRequestHandler(ListToolsRequestSchema, async () => {
13
13
  return {
14
14
  tools: [
15
15
  {
16
- name: 'optimize_code_prompt',
17
- description: 'Optimize prompt for TypeScript code development by adding code development rules and marking user input',
16
+ name: 'optimize_pageList_prompt',
17
+ description: 'Optimize prompt for listing required pages by analyzing user requirements and generating comprehensive page lists',
18
18
  inputSchema: {
19
19
  type: 'object',
20
20
  properties: {
21
21
  user_input: {
22
22
  type: 'string',
23
- description: 'User input prompt that needs to be optimized for code development'
23
+ description: 'User input prompt that needs to be optimized for page list analysis'
24
+ }
25
+ },
26
+ required: ['user_input']
27
+ }
28
+ },
29
+ {
30
+ name: 'optimize_product_design_prompt',
31
+ description: 'Optimize prompt for product design document generation based on page list analysis',
32
+ inputSchema: {
33
+ type: 'object',
34
+ properties: {
35
+ user_input: {
36
+ type: 'string',
37
+ description: 'User input prompt that needs to be optimized for product design documentation'
38
+ },
39
+ page_list: {
40
+ type: 'string',
41
+ description: 'Optional page list result from optimize_pageList_prompt to be included in product design'
24
42
  }
25
43
  },
26
44
  required: ['user_input']
@@ -35,20 +53,24 @@ server.setRequestHandler(ListToolsRequestSchema, async () => {
35
53
  user_input: {
36
54
  type: 'string',
37
55
  description: 'User input prompt that needs to be optimized for UI design'
56
+ },
57
+ page_list: {
58
+ type: 'string',
59
+ description: 'Optional page list result to be included in UI design'
38
60
  }
39
61
  },
40
62
  required: ['user_input']
41
63
  }
42
64
  },
43
65
  {
44
- name: 'optimize_pageList_prompt',
45
- description: 'Optimize prompt for listing required pages by analyzing user requirements and generating comprehensive page lists',
66
+ name: 'optimize_code_prompt',
67
+ description: 'Optimize prompt for TypeScript code development by adding code development rules and marking user input',
46
68
  inputSchema: {
47
69
  type: 'object',
48
70
  properties: {
49
71
  user_input: {
50
72
  type: 'string',
51
- description: 'User input prompt that needs to be optimized for page list analysis'
73
+ description: 'User input prompt that needs to be optimized for code development'
52
74
  }
53
75
  },
54
76
  required: ['user_input']
@@ -65,18 +87,28 @@ server.setRequestHandler(CallToolRequestSchema, async (request) => {
65
87
  }
66
88
  try {
67
89
  switch (name) {
68
- case 'optimize_code_prompt':
69
- const optimizedCodePrompt = await promptOptimizer.optimizeCodePrompt(args.user_input);
90
+ case 'optimize_pageList_prompt':
91
+ const optimizedPageListPrompt = await promptOptimizer.optimizePageListPrompt(args.user_input);
70
92
  return {
71
93
  content: [
72
94
  {
73
95
  type: 'text',
74
- text: optimizedCodePrompt
96
+ text: optimizedPageListPrompt
97
+ }
98
+ ]
99
+ };
100
+ case 'optimize_product_design_prompt':
101
+ const optimizedProductDesignPrompt = await promptOptimizer.optimizeProductDesignPrompt(args.user_input, args.page_list);
102
+ return {
103
+ content: [
104
+ {
105
+ type: 'text',
106
+ text: optimizedProductDesignPrompt
75
107
  }
76
108
  ]
77
109
  };
78
110
  case 'optimize_ui_design_prompt':
79
- const optimizedUIPrompt = await promptOptimizer.optimizeUIDesignPrompt(args.user_input);
111
+ const optimizedUIPrompt = await promptOptimizer.optimizeUIDesignPrompt(args.user_input, args.page_list);
80
112
  return {
81
113
  content: [
82
114
  {
@@ -85,13 +117,13 @@ server.setRequestHandler(CallToolRequestSchema, async (request) => {
85
117
  }
86
118
  ]
87
119
  };
88
- case 'optimize_pageList_prompt':
89
- const optimizedPageListPrompt = await promptOptimizer.optimizePageListPrompt(args.user_input);
120
+ case 'optimize_code_prompt':
121
+ const optimizedCodePrompt = await promptOptimizer.optimizeCodePrompt(args.user_input);
90
122
  return {
91
123
  content: [
92
124
  {
93
125
  type: 'text',
94
- text: optimizedPageListPrompt
126
+ text: optimizedCodePrompt
95
127
  }
96
128
  ]
97
129
  };
@@ -117,4 +149,4 @@ async function main() {
117
149
  console.error('ByteFun AI Prompt MCP server running on stdio');
118
150
  }
119
151
  main().catch(console.error);
120
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUVBLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUNuRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUNqRixPQUFPLEVBQ0wscUJBQXFCLEVBQ3JCLHNCQUFzQixHQUV2QixNQUFNLG9DQUFvQyxDQUFDO0FBQzVDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUV4RCxNQUFNLE1BQU0sR0FBRyxJQUFJLE1BQU0sQ0FDdkI7SUFDRSxJQUFJLEVBQUUsbUJBQW1CO0lBQ3pCLE9BQU8sRUFBRSxPQUFPO0NBQ2pCLENBQ0YsQ0FBQztBQUVGLE1BQU0sZUFBZSxHQUFHLElBQUksZUFBZSxFQUFFLENBQUM7QUFFOUMsdUJBQXVCO0FBQ3ZCLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxzQkFBc0IsRUFBRSxLQUFLLElBQUksRUFBRTtJQUMxRCxPQUFPO1FBQ0wsS0FBSyxFQUFFO1lBQ0w7Z0JBQ0UsSUFBSSxFQUFFLHNCQUFzQjtnQkFDNUIsV0FBVyxFQUFFLHlHQUF5RztnQkFDdEgsV0FBVyxFQUFFO29CQUNYLElBQUksRUFBRSxRQUFRO29CQUNkLFVBQVUsRUFBRTt3QkFDVixVQUFVLEVBQUU7NEJBQ1YsSUFBSSxFQUFFLFFBQVE7NEJBQ2QsV0FBVyxFQUFFLG1FQUFtRTt5QkFDakY7cUJBQ0Y7b0JBQ0QsUUFBUSxFQUFFLENBQUMsWUFBWSxDQUFDO2lCQUN6QjthQUNGO1lBQ0Q7Z0JBQ0UsSUFBSSxFQUFFLDJCQUEyQjtnQkFDakMsV0FBVyxFQUFFLGdGQUFnRjtnQkFDN0YsV0FBVyxFQUFFO29CQUNYLElBQUksRUFBRSxRQUFRO29CQUNkLFVBQVUsRUFBRTt3QkFDVixVQUFVLEVBQUU7NEJBQ1YsSUFBSSxFQUFFLFFBQVE7NEJBQ2QsV0FBVyxFQUFF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QG1vZGVsY29udGV4dHByb3RvY29sL3Nkay9zZXJ2ZXIvaW5kZXguanMnO1xuaW1wb3J0IHsgU3RkaW9TZXJ2ZXJUcmFuc3BvcnQgfSBmcm9tICdAbW9kZWxjb250ZXh0cHJvdG9jb2wvc2RrL3NlcnZlci9zdGRpby5qcyc7XG5pbXBvcnQge1xuICBDYWxsVG9vbFJlcXVlc3RTY2hlbWEsXG4gIExpc3RUb29sc1JlcXVlc3RTY2hlbWEsXG4gIFRvb2wsXG59IGZyb20gJ0Btb2RlbGNvbnRleHRwcm90b2NvbC9zZGsvdHlwZXMuanMnO1xuaW1wb3J0IHsgUHJvbXB0T3B0aW1pemVyIH0gZnJvbSAnLi9wcm9tcHQtb3B0aW1pemVyLmpzJztcblxuY29uc3Qgc2VydmVyID0gbmV3IFNlcnZlcihcbiAge1xuICAgIG5hbWU6ICdieXRlZnVuLWFpLXByb21wdCcsXG4gICAgdmVyc2lvbjogJzEuMC4wJyxcbiAgfVxuKTtcblxuY29uc3QgcHJvbXB0T3B0aW1pemVyID0gbmV3IFByb21wdE9wdGltaXplcigpO1xuXG4vLyBMaXN0IGF2YWlsYWJsZSB0b29sc1xuc2VydmVyLnNldFJlcXVlc3RIYW5kbGVyKExpc3RUb29sc1JlcXVlc3RTY2hlbWEsIGFzeW5jICgpID0+IHtcbiAgcmV0dXJuIHtcbiAgICB0b29sczogW1xuICAgICAge1xuICAgICAgICBuYW1lOiAnb3B0aW1pemVfY29kZV9wcm9tcHQnLFxuICAgICAgICBkZXNjcmlwdGlvbjogJ09wdGltaXplIHByb21wdCBmb3IgVHlwZVNjcmlwdCBjb2RlIGRldmVsb3BtZW50IGJ5IGFkZGluZyBjb2RlIGRldmVsb3BtZW50IHJ1bGVzIGFuZCBtYXJraW5nIHVzZXIgaW5wdXQnLFxuICAgICAgICBpbnB1dFNjaGVtYToge1xuICAgICAgICAgIHR5cGU6ICdvYmplY3QnLFxuICAgICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIHVzZXJfaW5wdXQ6IHtcbiAgICAgICAgICAgICAgdHlwZTogJ3N0cmluZycsXG4gICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnVXNlciBpbnB1dCBwcm9tcHQgdGhhdCBuZWVkcyB0byBiZSBvcHRpbWl6ZWQgZm9yIGNvZGUgZGV2ZWxvcG1lbnQnXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICByZXF1aXJlZDogWyd1c2VyX2lucHV0J11cbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ29wdGltaXplX3VpX2Rlc2lnbl9wcm9tcHQnLFxuICAgICAgICBkZXNjcmlwdGlvbjogJ09wdGltaXplIHByb21wdCBmb3IgVUkgZGVzaWduIGJ5IGFkZGluZyBVSSBkZXNpZ24gcnVsZXMgYW5kIG1hcmtpbmcgdXNlciBpbnB1dCcsXG4gICAgICAgIGlucHV0U2NoZW1hOiB7XG4gICAgICAgICAgdHlwZTogJ29iamVjdCcsXG4gICAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgICAgdXNlcl9pbnB1dDoge1xuICAgICAgICAgICAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICAgICAgICAgICAgZGVzY3JpcHRpb246ICdVc2VyIGlucHV0IHByb21wdCB0aGF0IG5lZWRzIHRvIGJlIG9wdGltaXplZCBmb3IgVUkgZGVzaWduJ1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgcmVxdWlyZWQ6IFsndXNlcl9pbnB1dCddXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdvcHRpbWl6ZV9wYWdlTGlzdF9wcm9tcHQnLFxuICAgICAgICBkZXNjcmlwdGlvbjogJ09wdGltaXplIHByb21wdCBmb3IgbGlzdGluZyByZXF1aXJlZCBwYWdlcyBieSBhbmFseXppbmcgdXNlciByZXF1aXJlbWVudHMgYW5kIGdlbmVyYXRpbmcgY29tcHJlaGVuc2l2ZSBwYWdlIGxpc3RzJyxcbiAgICAgICAgaW5wdXRTY2hlbWE6IHtcbiAgICAgICAgICB0eXBlOiAnb2JqZWN0JyxcbiAgICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICB1c2VyX2lucHV0OiB7XG4gICAgICAgICAgICAgIHR5cGU6ICdzdHJpbmcnLFxuICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogJ1VzZXIgaW5wdXQgcHJvbXB0IHRoYXQgbmVlZHMgdG8gYmUgb3B0aW1pemVkIGZvciBwYWdlIGxpc3QgYW5hbHlzaXMnXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICByZXF1aXJlZDogWyd1c2VyX2lucHV0J11cbiAgICAgICAgfVxuICAgICAgfVxuICAgIF0gYXMgVG9vbFtdXG4gIH07XG59KTtcblxuLy8gSGFuZGxlIHRvb2wgY2FsbHNcbnNlcnZlci5zZXRSZXF1ZXN0SGFuZGxlcihDYWxsVG9vbFJlcXVlc3RTY2hlbWEsIGFzeW5jIChyZXF1ZXN0KSA9PiB7XG4gIGNvbnN0IHsgbmFtZSwgYXJndW1lbnRzOiBhcmdzIH0gPSByZXF1ZXN0LnBhcmFtcztcblxuICBpZiAoIWFyZ3MpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ01pc3NpbmcgYXJndW1lbnRzJyk7XG4gIH1cblxuICB0cnkge1xuICAgIHN3aXRjaCAobmFtZSkge1xuICAgICAgY2FzZSAnb3B0aW1pemVfY29kZV9wcm9tcHQnOlxuICAgICAgICBjb25zdCBvcHRpbWl6ZWRDb2RlUHJvbXB0ID0gYXdhaXQgcHJvbXB0T3B0aW1pemVyLm9wdGltaXplQ29kZVByb21wdChhcmdzLnVzZXJfaW5wdXQgYXMgc3RyaW5nKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBjb250ZW50OiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHR5cGU6ICd0ZXh0JyxcbiAgICAgICAgICAgICAgdGV4dDogb3B0aW1pemVkQ29kZVByb21wdFxuICAgICAgICAgICAgfVxuICAgICAgICAgIF1cbiAgICAgICAgfTtcblxuICAgICAgY2FzZSAnb3B0aW1pemVfdWlfZGVzaWduX3Byb21wdCc6XG4gICAgICAgIGNvbnN0IG9wdGltaXplZFVJUHJvbXB0ID0gYXdhaXQgcHJvbXB0T3B0aW1pemVyLm9wdGltaXplVUlEZXNpZ25Qcm9tcHQoYXJncy51c2VyX2lucHV0IGFzIHN0cmluZyk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgY29udGVudDogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICB0eXBlOiAndGV4dCcsXG4gICAgICAgICAgICAgIHRleHQ6IG9wdGltaXplZFVJUHJvbXB0XG4gICAgICAgICAgICB9XG4gICAgICAgICAgXVxuICAgICAgICB9O1xuXG4gICAgICBjYXNlICdvcHRpbWl6ZV9wYWdlTGlzdF9wcm9tcHQnOlxuICAgICAgICBjb25zdCBvcHRpbWl6ZWRQYWdlTGlzdFByb21wdCA9IGF3YWl0IHByb21wdE9wdGltaXplci5vcHRpbWl6ZVBhZ2VMaXN0UHJvbXB0KGFyZ3MudXNlcl9pbnB1dCBhcyBzdHJpbmcpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGNvbnRlbnQ6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgdHlwZTogJ3RleHQnLFxuICAgICAgICAgICAgICB0ZXh0OiBvcHRpbWl6ZWRQYWdlTGlzdFByb21wdFxuICAgICAgICAgICAgfVxuICAgICAgICAgIF1cbiAgICAgICAgfTtcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIHRvb2w6ICR7bmFtZX1gKTtcbiAgICB9XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGNvbnRlbnQ6IFtcbiAgICAgICAge1xuICAgICAgICAgIHR5cGU6ICd0ZXh0JyxcbiAgICAgICAgICB0ZXh0OiBgRXJyb3I6ICR7ZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoZXJyb3IpfWBcbiAgICAgICAgfVxuICAgICAgXSxcbiAgICAgIGlzRXJyb3I6IHRydWVcbiAgICB9O1xuICB9XG59KTtcblxuYXN5bmMgZnVuY3Rpb24gbWFpbigpIHtcbiAgY29uc3QgdHJhbnNwb3J0ID0gbmV3IFN0ZGlvU2VydmVyVHJhbnNwb3J0KCk7XG4gIGF3YWl0IHNlcnZlci5jb25uZWN0KHRyYW5zcG9ydCk7XG4gIGNvbnNvbGUuZXJyb3IoJ0J5dGVGdW4gQUkgUHJvbXB0IE1DUCBzZXJ2ZXIgcnVubmluZyBvbiBzdGRpbycpO1xufVxuXG5tYWluKCkuY2F0Y2goY29uc29sZS5lcnJvcik7ICJdfQ==
152
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUVBLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUNuRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUNqRixPQUFPLEVBQ0wscUJBQXFCLEVBQ3JCLHNCQUFzQixHQUV2QixNQUFNLG9DQUFvQyxDQUFDO0FBQzVDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUV4RCxNQUFNLE1BQU0sR0FBRyxJQUFJLE1BQU0sQ0FDdkI7SUFDRSxJQUFJLEVBQUUsbUJBQW1CO0lBQ3pCLE9BQU8sRUFBRSxPQUFPO0NBQ2pCLENBQ0YsQ0FBQztBQUVGLE1BQU0sZUFBZSxHQUFHLElBQUksZUFBZSxFQUFFLENBQUM7QUFFOUMsdUJBQXVCO0FBQ3ZCLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxzQkFBc0IsRUFBRSxLQUFLLElBQUksRUFBRTtJQUMxRCxPQUFPO1FBQ0wsS0FBSyxFQUFFO1lBQ0w7Z0JBQ0UsSUFBSSxFQUFFLDBCQUEwQjtnQkFDaEMsV0FBVyxFQUFFLG1IQUFtSDtnQkFDaEksV0FBVyxFQUFFO29CQUNYLElBQUksRUFBRSxRQUFRO29CQUNkLFVBQVUsRUFBRTt3QkFDVixVQUFVLEVBQUU7NEJBQ1YsSUFBSSxFQUFFLFFBQVE7NEJBQ2QsV0FBVyxFQUFFLHFFQUFxRTt5QkFDbkY7cUJBQ0Y7b0JBQ0QsUUFBUSxFQUFFLENBQUMsWUFBWSxDQUFDO2lCQUN6QjthQUNGO1lBQ0Q7Z0JBQ0UsSUFBSSxFQUFFLGdDQUFnQztnQkFDdEMsV0FBVyxFQUFFLG9GQUFvRjtnQkFDakcsV0FBVyxFQUFFO29CQUNYLElBQUksRUFBRSxRQUFRO29CQUNkLFVBQVUsRUFBRTt3QkFDVixVQUFVLEVBQUU7NEJBQ1YsSUFBSSxFQUFFLFFBQVE7NEJBQ2QsV0FBVyxFQUFF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S0FBSyxDQUFDLGlCQUFpQixJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQzdDLENBQUM7SUFDSCxDQUFDO0lBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztRQUNmLE9BQU87WUFDTCxPQUFPLEVBQUU7Z0JBQ1A7b0JBQ0UsSUFBSSxFQUFFLE1BQU07b0JBQ1osSUFBSSxFQUFFLFVBQVUsS0FBSyxZQUFZLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFO2lCQUN6RTthQUNGO1lBQ0QsT0FBTyxFQUFFLElBQUk7U0FDZCxDQUFDO0lBQ0osQ0FBQztBQUNILENBQUMsQ0FBQyxDQUFDO0FBRUgsS0FBSyxVQUFVLElBQUk7SUFDakIsTUFBTSxTQUFTLEdBQUcsSUFBSSxvQkFBb0IsRUFBRSxDQUFDO0lBQzdDLE1BQU0sTUFBTSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUNoQyxPQUFPLENBQUMsS0FBSyxDQUFDLCtDQUErQyxDQUFDLENBQUM7QUFDakUsQ0FBQztBQUVELElBQUksRUFBRSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIjIS91c3IvYmluL2VudiBub2RlXG5cbmltcG9ydCB7IFNlcnZlciB9IGZyb20gJ0Btb2RlbGNvbnRleHRwcm90b2NvbC9zZGsvc2VydmVyL2luZGV4LmpzJztcbmltcG9ydCB7IFN0ZGlvU2VydmVyVHJhbnNwb3J0IH0gZnJvbSAnQG1vZGVsY29udGV4dHByb3RvY29sL3Nkay9zZXJ2ZXIvc3RkaW8uanMnO1xuaW1wb3J0IHtcbiAgQ2FsbFRvb2xSZXF1ZXN0U2NoZW1hLFxuICBMaXN0VG9vbHNSZXF1ZXN0U2NoZW1hLFxuICBUb29sLFxufSBmcm9tICdAbW9kZWxjb250ZXh0cHJvdG9jb2wvc2RrL3R5cGVzLmpzJztcbmltcG9ydCB7IFByb21wdE9wdGltaXplciB9IGZyb20gJy4vcHJvbXB0LW9wdGltaXplci5qcyc7XG5cbmNvbnN0IHNlcnZlciA9IG5ldyBTZXJ2ZXIoXG4gIHtcbiAgICBuYW1lOiAnYnl0ZWZ1bi1haS1wcm9tcHQnLFxuICAgIHZlcnNpb246ICcxLjAuMCcsXG4gIH1cbik7XG5cbmNvbnN0IHByb21wdE9wdGltaXplciA9IG5ldyBQcm9tcHRPcHRpbWl6ZXIoKTtcblxuLy8gTGlzdCBhdmFpbGFibGUgdG9vbHNcbnNlcnZlci5zZXRSZXF1ZXN0SGFuZGxlcihMaXN0VG9vbHNSZXF1ZXN0U2NoZW1hLCBhc3luYyAoKSA9PiB7XG4gIHJldHVybiB7XG4gICAgdG9vbHM6IFtcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ29wdGltaXplX3BhZ2VMaXN0X3Byb21wdCcsXG4gICAgICAgIGRlc2NyaXB0aW9uOiAnT3B0aW1pemUgcHJvbXB0IGZvciBsaXN0aW5nIHJlcXVpcmVkIHBhZ2VzIGJ5IGFuYWx5emluZyB1c2VyIHJlcXVpcmVtZW50cyBhbmQgZ2VuZXJhdGluZyBjb21wcmVoZW5zaXZlIHBhZ2UgbGlzdHMnLFxuICAgICAgICBpbnB1dFNjaGVtYToge1xuICAgICAgICAgIHR5cGU6ICdvYmplY3QnLFxuICAgICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIHVzZXJfaW5wdXQ6IHtcbiAgICAgICAgICAgICAgdHlwZTogJ3N0cmluZycsXG4gICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnVXNlciBpbnB1dCBwcm9tcHQgdGhhdCBuZWVkcyB0byBiZSBvcHRpbWl6ZWQgZm9yIHBhZ2UgbGlzdCBhbmFseXNpcydcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIHJlcXVpcmVkOiBbJ3VzZXJfaW5wdXQnXVxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBuYW1lOiAnb3B0aW1pemVfcHJvZHVjdF9kZXNpZ25fcHJvbXB0JyxcbiAgICAgICAgZGVzY3JpcHRpb246ICdPcHRpbWl6ZSBwcm9tcHQgZm9yIHByb2R1Y3QgZGVzaWduIGRvY3VtZW50IGdlbmVyYXRpb24gYmFzZWQgb24gcGFnZSBsaXN0IGFuYWx5c2lzJyxcbiAgICAgICAgaW5wdXRTY2hlbWE6IHtcbiAgICAgICAgICB0eXBlOiAnb2JqZWN0JyxcbiAgICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICB1c2VyX2lucHV0OiB7XG4gICAgICAgICAgICAgIHR5cGU6ICdzdHJpbmcnLFxuICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogJ1VzZXIgaW5wdXQgcHJvbXB0IHRoYXQgbmVlZHMgdG8gYmUgb3B0aW1pemVkIGZvciBwcm9kdWN0IGRlc2lnbiBkb2N1bWVudGF0aW9uJ1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHBhZ2VfbGlzdDoge1xuICAgICAgICAgICAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICAgICAgICAgICAgZGVzY3JpcHRpb246ICdPcHRpb25hbCBwYWdlIGxpc3QgcmVzdWx0IGZyb20gb3B0aW1pemVfcGFnZUxpc3RfcHJvbXB0IHRvIGJlIGluY2x1ZGVkIGluIHByb2R1Y3QgZGVzaWduJ1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgcmVxdWlyZWQ6IFsndXNlcl9pbnB1dCddXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdvcHRpbWl6ZV91aV9kZXNpZ25fcHJvbXB0JyxcbiAgICAgICAgZGVzY3JpcHRpb246ICdPcHRpbWl6ZSBwcm9tcHQgZm9yIFVJIGRlc2lnbiBieSBhZGRpbmcgVUkgZGVzaWduIHJ1bGVzIGFuZCBtYXJraW5nIHVzZXIgaW5wdXQnLFxuICAgICAgICBpbnB1dFNjaGVtYToge1xuICAgICAgICAgIHR5cGU6ICdvYmplY3QnLFxuICAgICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIHVzZXJfaW5wdXQ6IHtcbiAgICAgICAgICAgICAgdHlwZTogJ3N0cmluZycsXG4gICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnVXNlciBpbnB1dCBwcm9tcHQgdGhhdCBuZWVkcyB0byBiZSBvcHRpbWl6ZWQgZm9yIFVJIGRlc2lnbidcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBwYWdlX2xpc3Q6IHtcbiAgICAgICAgICAgICAgdHlwZTogJ3N0cmluZycsXG4gICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnT3B0aW9uYWwgcGFnZSBsaXN0IHJlc3VsdCB0byBiZSBpbmNsdWRlZCBpbiBVSSBkZXNpZ24nXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICByZXF1aXJlZDogWyd1c2VyX2lucHV0J11cbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ29wdGltaXplX2NvZGVfcHJvbXB0JyxcbiAgICAgICAgZGVzY3JpcHRpb246ICdPcHRpbWl6ZSBwcm9tcHQgZm9yIFR5cGVTY3JpcHQgY29kZSBkZXZlbG9wbWVudCBieSBhZGRpbmcgY29kZSBkZXZlbG9wbWVudCBydWxlcyBhbmQgbWFya2luZyB1c2VyIGlucHV0JyxcbiAgICAgICAgaW5wdXRTY2hlbWE6IHtcbiAgICAgICAgICB0eXBlOiAnb2JqZWN0JyxcbiAgICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICB1c2VyX2lucHV0OiB7XG4gICAgICAgICAgICAgIHR5cGU6ICdzdHJpbmcnLFxuICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogJ1VzZXIgaW5wdXQgcHJvbXB0IHRoYXQgbmVlZHMgdG8gYmUgb3B0aW1pemVkIGZvciBjb2RlIGRldmVsb3BtZW50J1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgcmVxdWlyZWQ6IFsndXNlcl9pbnB1dCddXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICBdIGFzIFRvb2xbXVxuICB9O1xufSk7XG5cbi8vIEhhbmRsZSB0b29sIGNhbGxzXG5zZXJ2ZXIuc2V0UmVxdWVzdEhhbmRsZXIoQ2FsbFRvb2xSZXF1ZXN0U2NoZW1hLCBhc3luYyAocmVxdWVzdCkgPT4ge1xuICBjb25zdCB7IG5hbWUsIGFyZ3VtZW50czogYXJncyB9ID0gcmVxdWVzdC5wYXJhbXM7XG5cbiAgaWYgKCFhcmdzKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdNaXNzaW5nIGFyZ3VtZW50cycpO1xuICB9XG5cbiAgdHJ5IHtcbiAgICBzd2l0Y2ggKG5hbWUpIHtcbiAgICAgIGNhc2UgJ29wdGltaXplX3BhZ2VMaXN0X3Byb21wdCc6XG4gICAgICAgIGNvbnN0IG9wdGltaXplZFBhZ2VMaXN0UHJvbXB0ID0gYXdhaXQgcHJvbXB0T3B0aW1pemVyLm9wdGltaXplUGFnZUxpc3RQcm9tcHQoYXJncy51c2VyX2lucHV0IGFzIHN0cmluZyk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgY29udGVudDogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICB0eXBlOiAndGV4dCcsXG4gICAgICAgICAgICAgIHRleHQ6IG9wdGltaXplZFBhZ2VMaXN0UHJvbXB0XG4gICAgICAgICAgICB9XG4gICAgICAgICAgXVxuICAgICAgICB9O1xuXG4gICAgICBjYXNlICdvcHRpbWl6ZV9wcm9kdWN0X2Rlc2lnbl9wcm9tcHQnOlxuICAgICAgICBjb25zdCBvcHRpbWl6ZWRQcm9kdWN0RGVzaWduUHJvbXB0ID0gYXdhaXQgcHJvbXB0T3B0aW1pemVyLm9wdGltaXplUHJvZHVjdERlc2lnblByb21wdChcbiAgICAgICAgICBhcmdzLnVzZXJfaW5wdXQgYXMgc3RyaW5nLFxuICAgICAgICAgIGFyZ3MucGFnZV9saXN0IGFzIHN0cmluZ1xuICAgICAgICApO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGNvbnRlbnQ6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgdHlwZTogJ3RleHQnLFxuICAgICAgICAgICAgICB0ZXh0OiBvcHRpbWl6ZWRQcm9kdWN0RGVzaWduUHJvbXB0XG4gICAgICAgICAgICB9XG4gICAgICAgICAgXVxuICAgICAgICB9O1xuXG4gICAgICBjYXNlICdvcHRpbWl6ZV91aV9kZXNpZ25fcHJvbXB0JzpcbiAgICAgICAgY29uc3Qgb3B0aW1pemVkVUlQcm9tcHQgPSBhd2FpdCBwcm9tcHRPcHRpbWl6ZXIub3B0aW1pemVVSURlc2lnblByb21wdChcbiAgICAgICAgICBhcmdzLnVzZXJfaW5wdXQgYXMgc3RyaW5nLFxuICAgICAgICAgIGFyZ3MucGFnZV9saXN0IGFzIHN0cmluZ1xuICAgICAgICApO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGNvbnRlbnQ6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgdHlwZTogJ3RleHQnLFxuICAgICAgICAgICAgICB0ZXh0OiBvcHRpbWl6ZWRVSVByb21wdFxuICAgICAgICAgICAgfVxuICAgICAgICAgIF1cbiAgICAgICAgfTtcblxuICAgICAgY2FzZSAnb3B0aW1pemVfY29kZV9wcm9tcHQnOlxuICAgICAgICBjb25zdCBvcHRpbWl6ZWRDb2RlUHJvbXB0ID0gYXdhaXQgcHJvbXB0T3B0aW1pemVyLm9wdGltaXplQ29kZVByb21wdChhcmdzLnVzZXJfaW5wdXQgYXMgc3RyaW5nKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBjb250ZW50OiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHR5cGU6ICd0ZXh0JyxcbiAgICAgICAgICAgICAgdGV4dDogb3B0aW1pemVkQ29kZVByb21wdFxuICAgICAgICAgICAgfVxuICAgICAgICAgIF1cbiAgICAgICAgfTtcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIHRvb2w6ICR7bmFtZX1gKTtcbiAgICB9XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGNvbnRlbnQ6IFtcbiAgICAgICAge1xuICAgICAgICAgIHR5cGU6ICd0ZXh0JyxcbiAgICAgICAgICB0ZXh0OiBgRXJyb3I6ICR7ZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoZXJyb3IpfWBcbiAgICAgICAgfVxuICAgICAgXSxcbiAgICAgIGlzRXJyb3I6IHRydWVcbiAgICB9O1xuICB9XG59KTtcblxuYXN5bmMgZnVuY3Rpb24gbWFpbigpIHtcbiAgY29uc3QgdHJhbnNwb3J0ID0gbmV3IFN0ZGlvU2VydmVyVHJhbnNwb3J0KCk7XG4gIGF3YWl0IHNlcnZlci5jb25uZWN0KHRyYW5zcG9ydCk7XG4gIGNvbnNvbGUuZXJyb3IoJ0J5dGVGdW4gQUkgUHJvbXB0IE1DUCBzZXJ2ZXIgcnVubmluZyBvbiBzdGRpbycpO1xufVxuXG5tYWluKCkuY2F0Y2goY29uc29sZS5lcnJvcik7ICJdfQ==
@@ -2,37 +2,75 @@
2
2
  * ByteFun AI MCP 提示词优化器
3
3
  *
4
4
  * 重要说明:
5
- * - 本类提供三个独立的优化工具和复合调用链功能
5
+ * - 本类提供四个独立的优化工具和复合调用链功能
6
6
  * - 每个单一工具处理不同类型的需求,复合工具支持多个工具的组合调用
7
7
  *
8
8
  * 单一工具使用方式:
9
- * 1. UI设计需求 → 调用 optimizeUIDesignPrompt()
10
- * 2. 代码开发需求 → 调用 optimizeCodePrompt()
9
+ * 1. 页面列表分析需求 → 调用 optimizePageListPrompt()
10
+ * 2. 产品需求设计需求 → 调用 optimizeProductDesignPrompt()
11
+ * 3. UI设计需求 → 调用 optimizeUIDesignPrompt()
12
+ * 4. 代码开发需求 → 调用 optimizeCodePrompt()
11
13
  *
12
14
  * 复合工具使用方式:
13
- * 1. UI设计 + 代码编写 → 调用 optimizeUIDesignAndCodePrompt()
14
- * 2. 列出所需页面列表 + UI设计 → 调用 optimizePageListAndUIDesignPrompt()
15
- * 3. 列出所需页面列表 + UI设计 + 代码编写 → 调用 optimizeFullWorkflowPrompt()
15
+ * 1. 页面列表 + 产品设计 → 调用 optimizePageListAndProductDesignPrompt()
16
+ * 2. 页面列表 + 产品设计 + UI设计 → 调用 optimizePageListProductDesignAndUIPrompt()
17
+ * 3. 页面列表 + 产品设计 + UI设计 + 代码编写 → 调用 optimizeFullWorkflowWithProductDesignPrompt()
18
+ * 4. UI设计 + 代码编写 → 调用 optimizeUIDesignAndCodePrompt()
19
+ * 5. 列出所需页面列表 + UI设计 → 调用 optimizePageListAndUIDesignPrompt()
20
+ * 6. 列出所需页面列表 + UI设计 + 代码编写 → 调用 optimizeFullWorkflowPrompt()
16
21
  */
17
22
  export declare class PromptOptimizer {
18
23
  private readonly pageListPromptTemplate;
24
+ private readonly productDesignPromptTemplate;
19
25
  private readonly codePromptTemplate;
20
26
  private readonly uiDesignPromptTemplate;
21
27
  /**
22
28
  * 优化列出所需页面列表提示词
23
- * 注意:此方法专门处理页面列表分析需求,输出结果供UI设计使用
29
+ * 注意:此方法专门处理页面列表分析需求,输出结果供产品设计和UI设计使用
24
30
  */
25
31
  optimizePageListPrompt(userInput: string): Promise<string>;
32
+ /**
33
+ * 优化产品需求设计提示词
34
+ * 注意:此方法专门处理产品需求文档生成,需要基于页面列表结果
35
+ */
36
+ optimizeProductDesignPrompt(userInput: string, pageList?: string): Promise<string>;
26
37
  /**
27
38
  * 优化代码开发提示词
28
- * 注意:此方法专门处理代码开发相关需求,不会自动处理UI设计或原型设计内容
39
+ * 注意:此方法专门处理代码开发相关需求,会参考产品需求文档
29
40
  */
30
41
  optimizeCodePrompt(userInput: string): Promise<string>;
31
42
  /**
32
43
  * 优化UI设计提示词
33
- * 注意:此方法专门处理UI设计相关需求,不会自动处理代码开发或原型设计内容
44
+ * 注意:此方法专门处理UI设计相关需求,会参考产品需求文档
34
45
  */
35
46
  optimizeUIDesignPrompt(userInput: string, pageList?: string): Promise<string>;
47
+ /**
48
+ * 复合工具:页面列表 + 产品设计
49
+ * 先分析页面列表,然后基于页面列表生成产品需求文档
50
+ */
51
+ optimizePageListAndProductDesignPrompt(userInput: string): Promise<{
52
+ pageListPrompt: string;
53
+ productDesignPrompt: string;
54
+ }>;
55
+ /**
56
+ * 复合工具:页面列表 + 产品设计 + UI设计
57
+ * 完整的设计流程:页面列表分析 → 产品需求设计 → UI设计
58
+ */
59
+ optimizePageListProductDesignAndUIPrompt(userInput: string): Promise<{
60
+ pageListPrompt: string;
61
+ productDesignPrompt: string;
62
+ uiDesignPrompt: string;
63
+ }>;
64
+ /**
65
+ * 复合工具:页面列表 + 产品设计 + UI设计 + 代码编写
66
+ * 完整的开发流程:页面列表分析 → 产品需求设计 → UI设计 → 代码开发
67
+ */
68
+ optimizeFullWorkflowWithProductDesignPrompt(userInput: string): Promise<{
69
+ pageListPrompt: string;
70
+ productDesignPrompt: string;
71
+ uiDesignPrompt: string;
72
+ codePrompt: string;
73
+ }>;
36
74
  /**
37
75
  * 复合工具:UI设计 + 代码编写
38
76
  * 先进行UI设计,然后进行代码开发
@@ -58,6 +96,11 @@ export declare class PromptOptimizer {
58
96
  uiDesignPrompt: string;
59
97
  codePrompt: string;
60
98
  }>;
99
+ /**
100
+ * 基于页面列表结果生成产品需求设计提示词
101
+ * 此方法用于在获得页面列表结果后,生成包含页面列表信息的产品设计提示词
102
+ */
103
+ generateProductDesignPromptWithPageList(userInput: string, pageListResult: string): Promise<string>;
61
104
  /**
62
105
  * 基于页面列表结果生成UI设计提示词
63
106
  * 此方法用于在获得页面列表结果后,生成包含页面列表信息的UI设计提示词
@@ -1 +1 @@
1
- {"version":3,"file":"prompt-optimizer.d.ts","sourceRoot":"","sources":["../src/prompt-optimizer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AACH,qBAAa,eAAe;IAC1B,OAAO,CAAC,QAAQ,CAAC,sBAAsB,CAwGQ;IAE/C,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CA6FlC;IAED,OAAO,CAAC,QAAQ,CAAC,sBAAsB,CAyLvC;IAEA;;;OAGG;IACG,sBAAsB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAOhE;;;OAGG;IACG,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAO5D;;;OAGG;IACG,sBAAsB,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAqBnF;;;OAGG;IACG,6BAA6B,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC;QAAC,cAAc,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAC,CAAC;IAU7G;;;OAGG;IACG,iCAAiC,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC;QAAC,cAAc,EAAE,MAAM,CAAC;QAAC,cAAc,EAAE,MAAM,CAAA;KAAC,CAAC;IAWrH;;;OAGG;IACG,0BAA0B,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC;QAAC,cAAc,EAAE,MAAM,CAAC;QAAC,cAAc,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAC,CAAC;IAalI;;;OAGG;IACG,kCAAkC,CAAC,SAAS,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;CAGrG"}
1
+ {"version":3,"file":"prompt-optimizer.d.ts","sourceRoot":"","sources":["../src/prompt-optimizer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,qBAAa,eAAe;IAC1B,OAAO,CAAC,QAAQ,CAAC,sBAAsB,CA6GQ;IAE/C,OAAO,CAAC,QAAQ,CAAC,2BAA2B,CA2HF;IAE1C,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAiGlC;IAED,OAAO,CAAC,QAAQ,CAAC,sBAAsB,CAkMvC;IAEA;;;OAGG;IACG,sBAAsB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAOhE;;;OAGG;IACG,2BAA2B,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAqBxF;;;OAGG;IACG,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAO5D;;;OAGG;IACG,sBAAsB,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAqBnF;;;OAGG;IACG,sCAAsC,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC;QAAC,cAAc,EAAE,MAAM,CAAC;QAAC,mBAAmB,EAAE,MAAM,CAAA;KAAC,CAAC;IAU/H;;;OAGG;IACG,wCAAwC,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC;QAAC,cAAc,EAAE,MAAM,CAAC;QAAC,mBAAmB,EAAE,MAAM,CAAC;QAAC,cAAc,EAAE,MAAM,CAAA;KAAC,CAAC;IAYzJ;;;OAGG;IACG,2CAA2C,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC;QAAC,cAAc,EAAE,MAAM,CAAC;QAAC,mBAAmB,EAAE,MAAM,CAAC;QAAC,cAAc,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAC,CAAC;IAchL;;;OAGG;IACG,6BAA6B,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC;QAAC,cAAc,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAC,CAAC;IAU7G;;;OAGG;IACG,iCAAiC,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC;QAAC,cAAc,EAAE,MAAM,CAAC;QAAC,cAAc,EAAE,MAAM,CAAA;KAAC,CAAC;IAWrH;;;OAGG;IACG,0BAA0B,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC;QAAC,cAAc,EAAE,MAAM,CAAC;QAAC,cAAc,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAC,CAAC;IAalI;;;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;CAGrG"}
@@ -2,17 +2,22 @@
2
2
  * ByteFun AI MCP 提示词优化器
3
3
  *
4
4
  * 重要说明:
5
- * - 本类提供三个独立的优化工具和复合调用链功能
5
+ * - 本类提供四个独立的优化工具和复合调用链功能
6
6
  * - 每个单一工具处理不同类型的需求,复合工具支持多个工具的组合调用
7
7
  *
8
8
  * 单一工具使用方式:
9
- * 1. UI设计需求 → 调用 optimizeUIDesignPrompt()
10
- * 2. 代码开发需求 → 调用 optimizeCodePrompt()
9
+ * 1. 页面列表分析需求 → 调用 optimizePageListPrompt()
10
+ * 2. 产品需求设计需求 → 调用 optimizeProductDesignPrompt()
11
+ * 3. UI设计需求 → 调用 optimizeUIDesignPrompt()
12
+ * 4. 代码开发需求 → 调用 optimizeCodePrompt()
11
13
  *
12
14
  * 复合工具使用方式:
13
- * 1. UI设计 + 代码编写 → 调用 optimizeUIDesignAndCodePrompt()
14
- * 2. 列出所需页面列表 + UI设计 → 调用 optimizePageListAndUIDesignPrompt()
15
- * 3. 列出所需页面列表 + UI设计 + 代码编写 → 调用 optimizeFullWorkflowPrompt()
15
+ * 1. 页面列表 + 产品设计 → 调用 optimizePageListAndProductDesignPrompt()
16
+ * 2. 页面列表 + 产品设计 + UI设计 → 调用 optimizePageListProductDesignAndUIPrompt()
17
+ * 3. 页面列表 + 产品设计 + UI设计 + 代码编写 → 调用 optimizeFullWorkflowWithProductDesignPrompt()
18
+ * 4. UI设计 + 代码编写 → 调用 optimizeUIDesignAndCodePrompt()
19
+ * 5. 列出所需页面列表 + UI设计 → 调用 optimizePageListAndUIDesignPrompt()
20
+ * 6. 列出所需页面列表 + UI设计 + 代码编写 → 调用 optimizeFullWorkflowPrompt()
16
21
  */
17
22
  export class PromptOptimizer {
18
23
  pageListPromptTemplate = `# 你是APP产品经理专家,现在需要你根据用户输入的需求描述,遵循"分析规则"分析出所需要的完整的页面列表。
@@ -20,6 +25,11 @@ export class PromptOptimizer {
20
25
  ## 分析规则
21
26
  以下方法论分为多个步骤,重点突出"逐页面元素→可点→跳转"分析思路。
22
27
 
28
+ ## 重点注意
29
+ - 开始设计之前要先查看当前工程目录下的.bytefun/uiDesignState.md文件(如果存在),了解之前的设计进度和状况,以便更好地理解上下文和继续设计工作。
30
+ - 如果发现.bytefun/uiDesignState.md文件不存在,则说明之前没有设计过,需要从零开始设计。
31
+ - 如果发现.bytefun/uiDesignState.md文件存在,则说明之前已经设计过,需要看下 是否同一个APP或者网站,如果是同一个那就不需要重新分析pageList,而且根据之前的设计进度和状况,继续设计工作,如果不是同一个APP或者网站,则需要删除.bytefun/uiDesignState.md文件,然后从零开始设计。
32
+
23
33
  ## 一、模块拆解与初步列出页面列表
24
34
 
25
35
  1. **拆解核心业务模块**
@@ -120,8 +130,136 @@ export class PromptOptimizer {
120
130
  > 4. 通过多轮闭环校验,确保没有遗漏。
121
131
 
122
132
  这样,每次绘制一个页面原型,都能生成一份完整的"元素交互跳转表",为UI设计环节提供明确参考。`;
133
+ productDesignPromptTemplate = `# 你是产品经理和UI设计师专家,然后需要分析用户需求描述,然后根据'通用需求文档模板',输出一份实现用户需求描述的需求文档。
134
+
135
+ ## 通用需求文档模板
136
+
137
+ ---
138
+
139
+ ### 1. 文档说明
140
+
141
+ * **文档目的**:简要说明本需求文档的用途和适用范围。
142
+ * **版本记录**:
143
+
144
+ \`\`\`
145
+ | 版本号 | 日期 | 作者 | 修改内容 |
146
+ | ------ | ---------- | ---- | -------- |
147
+ | 1.0 | YYYY-MM-DD | XX | 初始版本 |
148
+ \`\`\`
149
+ * **读者对象**:产品经理、研发、测试、设计等相关角色。
150
+ * **术语说明**:列出文档中出现的专业术语或缩写,并做简要解释。
151
+
152
+ ---
153
+
154
+ ### 2. 整体概览
155
+
156
+ 1. **项目背景与定位**
157
+
158
+ * 说明 APP 面向的目标用户和核心价值、业务场景。
159
+
160
+ ---
161
+
162
+ ### 3. 页面列表(按展示顺序)
163
+
164
+ 不需要自己分析功能模块和页面列表,你直接根据第一步列出所需页面列表\`optimize_pageList_prompt\`得出的所有模块和页面列表,先列出所有页面名称、所属模块、简要说明与跳转入口,按以下示例格式写出来。
165
+ 。示例格式:
166
+
167
+ \`\`\`
168
+ | 序号 | 页面名称 | 模块 | 简要说明 | 跳转入口 |
169
+ | ---- | ------------ | ------ | ------------------------------ | --------------------- |
170
+ | 1 | 闪屏页 | 公共 | 启动时展示 Logo/动画,持续若干秒 | APP 启动 |
171
+ | 2 | 新手引导页 | 公共 | 首次安装引导用户了解核心功能 | 闪屏页(首次打开) |
172
+ | 3 | 登录页 | 用户 | 用户输入账号信息完成认证 | 首次启动判断/拦截跳转 |
173
+ | 4 | 首页 | 首页 | 展示 Banner、快捷入口、推荐列表 | 登录/新手引导后或游客模式 |
174
+ | … | … | … | … | … |
175
+ \`\`\`
176
+
177
+ > **注意**:跳转入口需列出所有可能触发该页面的来源。
178
+
179
+ ---
180
+
181
+ ### 4. 逐页详细需求
182
+
183
+ 按"页面列表"中顺序,依次展开每个页面的以下内容。每个页面一节,建议使用二级或三级标题。
184
+
185
+ #### 4.X 页面名称(示例:闪屏页)
186
+
187
+ 1. **页面概述**
188
+
189
+ * 功能定位、何时展示、特殊说明。
190
+
191
+ 2. **跳转关系**
192
+
193
+ * **来源**:列出所有可能跳转到本页的入口场景。
194
+ * **目标**:本页完成后跳转到哪些页面、在何种条件下跳转。
195
+
196
+ 3. **UI 组件清单**
197
+
198
+ * 列出本页所有可视组件及其层级(如:背景、Logo、按钮、文本、动画控件等)。
199
+ * 如果有多个交互区域,可用子列表标明。
200
+
201
+ 4. **交互逻辑**
202
+
203
+ * 对每个 UI 组件的行为描述:
204
+
205
+ * 点击/滑动/输入/焦点变化 等交互方式会触发什么反馈。
206
+ * 如有倒计时、动画播放等异步行为,要说明触发时机和结束逻辑。
207
+
208
+ 5. **业务逻辑**
209
+
210
+ * 需要调用的后端接口(接口地址、请求方式、主要请求参数、返回关键字段)。
211
+ * 数据检查/校验规则,包括前端校验和后端返回的错误处理。
212
+ * 本地存储与缓存:哪些数据保存在本地(Token、用户偏好、本地标记等)。
213
+
214
+ 6. **数据来源与更新**
215
+
216
+ * 静态数据:如果页面内容为静态资源,列出资源位置(如本地图片、配置文件)。
217
+ * 动态数据:接口返回数据字段说明、数据刷新/拉取时机(如下拉刷新、定时刷新)。
218
+
219
+ 7. **特殊状态 & 异常处理**
220
+
221
+ * **加载中态**:当请求未返回时的展示效果(转圈动画、骨架屏等)。
222
+ * **空状态**:无数据时的占位图/文案。
223
+ * **错误状态**:网络异常、接口失败、数据解析异常时的弹窗或提示文案。
224
+
225
+ 8. **与其他页面的数据/逻辑关系**
226
+
227
+ * 本页如何接收来自上一个页面的参数(如通过路由、Intent、回调)。
228
+ * 本页操作成功后如何传递数据给下一个页面或对全局状态进行更新。
229
+
230
+ 9. **埋点 & 统计(如适用)**
231
+
232
+ * 列出本页需埋点的事件名称及触发时机(如"页面展示"、"按钮点击"、"表单提交成功/失败"等)。
233
+ * 参数说明:上报哪些指标(按钮 ID、页面停留时长、错误码等)。
234
+
235
+ ---
236
+
237
+ ### 5. 全局跳转流程 & 数据流
238
+
239
+ * **流程图或文字说明**:可在本章用文字或附图方式,概括主要页面间的跳转顺序与数据传递逻辑。例如:
240
+
241
+ 1. 闪屏页 →(首次打开)新手引导页 → 登录/首页
242
+ 2. 首页 → 搜索页 → 详情页 → 购物车/支付页
243
+ 3. 任意需要授权页面 → 若未登录→ 登录页 → 返回原页面
244
+
245
+ * **全局共享数据说明**:
246
+
247
+ * 用户登录态(accessToken、refreshToken)
248
+ * 用户信息(userId、昵称、头像、本地偏好等)
249
+ * 购物车状态、未读消息数、APP 配置开关等
250
+
251
+ ### 6. 需求文档写入
252
+ - 生成的需求文档写入到当前工程目录下面的doc文件夹下面的XXXProductDesign.md,其中XXX是根据用户需求描述来命名。
253
+
254
+ ### 7. 完成确认
255
+ - 当产品需求文档写入完成后,必须告知用户:"✅ **产品需求文档已完成!**请您先查看 doc/XXXProductDesign.md 文件,仔细阅读需求文档内容,确认是否有需要修改的地方。如果有修改意见,请告诉我具体的修改要求。确认需求文档无问题或修改完毕后,请告诉我可以进行下一步的UI设计工作。"
256
+ - 在用户确认需求文档无问题或完成修改后,才能继续进行后续的UI设计或代码开发工作。`;
123
257
  codePromptTemplate = `# 你是typescript代码专家,根据'规则'、'例子'和用户输入的需求描述,完成代码开发
124
258
 
259
+ ## 重要说明
260
+ - 在开始代码开发之前,必须先查看当前工程目录下的doc文件夹中的产品需求文档(如XXXProductDesign.md),严格按照需求文档中的页面定义、交互逻辑、业务逻辑进行代码开发。
261
+ - 如果发现需求文档不存在,则按照用户需求描述进行开发。如果需求文档存在,则严格按照需求文档的规范进行开发,不得偏离需求文档的定义。
262
+
125
263
  ## 项目框架描述
126
264
  - 整个项目框架分为程序入口Application.ts、程序全局静态变量StaticData.ts、所有页面page文件夹、UI组件库uilib文件夹、后端接口AllBackEndApi.ts、唯一的能力方法AllFunction.ts。
127
265
  - 这是一个新型开发框架,UI界面已经使用可视化工具生成了所有的静态的UI页面了,然后你需要使用ts代码开发业务逻辑与UI交互逻辑,因此编写ts代码只需要按照用户需求描述完成业务逻辑与UI交互的开发。
@@ -216,6 +354,10 @@ export default class HomePageData {
216
354
  }`;
217
355
  uiDesignPromptTemplate = `# 你是一名资深UI/UX设计专家和前端开发专家,拥有丰富的应用设计经验,精通苹果人机界面设计指南。你的任务是根据'用户需求描述'帮助我完成一个iOS App的原型设计,现在需要根据'生成规则'和'需求描述'来生成静态html代码,并按照'写入文件规则'将生成html写到html文件。
218
356
 
357
+ ## 重要说明
358
+ - 在开始UI设计之前,必须先查看当前工程目录下的doc文件夹中的产品需求文档(如XXXProductDesign.md),严格按照需求文档中的页面定义、UI组件清单、交互逻辑进行设计。
359
+ - 如果发现需求文档不存在,则按照用户需求描述进行设计。如果需求文档存在,则严格按照需求文档的页面列表和详细需求进行设计,不得偏离需求文档的定义。
360
+
219
361
  ## 请按照以下要求输出一套完整的高质量APP原型图:
220
362
 
221
363
  1. 设计目标
@@ -390,6 +532,7 @@ export default class HomePageData {
390
532
  - 每一次开始设计之前都要先查看当前工程目录下的.bytefun/html文件夹里面是否有已经设计好的页面,如果有就不需要重新设计,直接使用已经设计好的页面,然后开始下一个页面的UI设计。
391
533
  - 每一次开始设计页面时,必须先阅读当前工程目录下的.bytefun/uiDesignState.md文件(如果存在),了解当前的设计进度和状况,以便更好地理解上下文和继续设计工作。
392
534
  - 每一次设计完一个页面后,将当前进度和当前状况用200字总结并写入.bytefun/uiDesignState.md文件中。总结内容应包括:已完成的页面数量和名称、当前正在进行的工作、遇到的问题或注意事项、下一步的设计计划等。这样可以让AI大模型在后续工作中更加了解当前状态上下文,从而执行得更加准确。
535
+ - 开始UI设计之前,需要先创建index.html文件,然后根据pageList把所有页面先定义写入index.html文件里面,然后开始第一个页面的UI设计。
393
536
  - viewPager轮播组件节点绝对不允许设置'overflow: hidden'。
394
537
  - 第一步你得先充分理解'用户输入描述'的内容,然后分析得出一个正确而且全面的页面列表,不能漏掉一些页面,必须按要求把所有页面都进行高保真设计,你需要输出分析结果:总共多少个页面,分别是哪些页面。
395
538
  - 必须是高保真的设计稿,不得使用原型设计那一套进行,必须要高保真的UI设计稿规则来设计,我希望这些界面是需要能直接拿去进行开发的。
@@ -397,22 +540,48 @@ export default class HomePageData {
397
540
  - 设计的页面较多时,绝对不能以由于时间关系的原因而快速简单设计,这是绝对不允许的,必须要以高质量高保真的原则来设计每一个页面,也不能中途停止。
398
541
  - 当所有用户需求的页面都已完成设计后,需要删除.bytefun/codeState.md和.bytefun/uiDesignState.md这两个状态文件,以免影响用户下一次新的需求实现。
399
542
 
543
+ ## UI设计完成确认
544
+ - 当所有页面的UI设计都完成后,必须告知用户:"✅ **UI设计工作已完成!**所有页面的设计稿已保存在 .bytefun/html/ 目录下,您可以通过打开 index.html 文件来预览所有页面的设计效果。请您仔细查看设计稿,确认是否有需要修改的地方。如果有修改意见,请告诉我具体的修改要求。确认UI设计无问题或修改完毕后,如果还需要进行代码开发工作,请告诉我可以开始代码编写。"
545
+ - 在用户确认UI设计无问题或完成修改后,才能继续进行后续的代码开发工作。
546
+
400
547
  ## 写入文件规则
401
548
  - 所有html文件写入工程根目录下面的.bytefun/html文件夹里面的,每个html文件里只将html+css的代码写入,其他任何注释、解释、澄清、总结等文字不得写入该文件。
402
549
  `;
403
550
  /**
404
551
  * 优化列出所需页面列表提示词
405
- * 注意:此方法专门处理页面列表分析需求,输出结果供UI设计使用
552
+ * 注意:此方法专门处理页面列表分析需求,输出结果供产品设计和UI设计使用
406
553
  */
407
554
  async optimizePageListPrompt(userInput) {
408
555
  return `${this.pageListPromptTemplate}
409
556
 
557
+ # 用户需求描述
558
+ ${userInput}`;
559
+ }
560
+ /**
561
+ * 优化产品需求设计提示词
562
+ * 注意:此方法专门处理产品需求文档生成,需要基于页面列表结果
563
+ */
564
+ async optimizeProductDesignPrompt(userInput, pageList) {
565
+ let prompt = this.productDesignPromptTemplate;
566
+ if (pageList) {
567
+ prompt += `
568
+
569
+ # 页面列表参考
570
+ ${pageList}
571
+
572
+ ## 重要说明
573
+ - 请严格按照上述页面列表来编写需求文档的"页面列表"部分
574
+ - 在"逐页详细需求"部分,需要对每个页面进行详细的需求描述
575
+ - 确保页面列表和详细需求保持一致`;
576
+ }
577
+ return `${prompt}
578
+
410
579
  # 用户需求描述
411
580
  ${userInput}`;
412
581
  }
413
582
  /**
414
583
  * 优化代码开发提示词
415
- * 注意:此方法专门处理代码开发相关需求,不会自动处理UI设计或原型设计内容
584
+ * 注意:此方法专门处理代码开发相关需求,会参考产品需求文档
416
585
  */
417
586
  async optimizeCodePrompt(userInput) {
418
587
  return `${this.codePromptTemplate}
@@ -422,7 +591,7 @@ ${userInput}`;
422
591
  }
423
592
  /**
424
593
  * 优化UI设计提示词
425
- * 注意:此方法专门处理UI设计相关需求,不会自动处理代码开发或原型设计内容
594
+ * 注意:此方法专门处理UI设计相关需求,会参考产品需求文档
426
595
  */
427
596
  async optimizeUIDesignPrompt(userInput, pageList) {
428
597
  let prompt = this.uiDesignPromptTemplate;
@@ -442,6 +611,48 @@ ${pageList}
442
611
  # 用户需求描述
443
612
  ${userInput}`;
444
613
  }
614
+ /**
615
+ * 复合工具:页面列表 + 产品设计
616
+ * 先分析页面列表,然后基于页面列表生成产品需求文档
617
+ */
618
+ async optimizePageListAndProductDesignPrompt(userInput) {
619
+ const pageListPrompt = await this.optimizePageListPrompt(userInput);
620
+ const productDesignPrompt = await this.optimizeProductDesignPrompt(userInput);
621
+ return {
622
+ pageListPrompt,
623
+ productDesignPrompt
624
+ };
625
+ }
626
+ /**
627
+ * 复合工具:页面列表 + 产品设计 + UI设计
628
+ * 完整的设计流程:页面列表分析 → 产品需求设计 → UI设计
629
+ */
630
+ async optimizePageListProductDesignAndUIPrompt(userInput) {
631
+ const pageListPrompt = await this.optimizePageListPrompt(userInput);
632
+ const productDesignPrompt = await this.optimizeProductDesignPrompt(userInput);
633
+ const uiDesignPrompt = await this.optimizeUIDesignPrompt(userInput);
634
+ return {
635
+ pageListPrompt,
636
+ productDesignPrompt,
637
+ uiDesignPrompt
638
+ };
639
+ }
640
+ /**
641
+ * 复合工具:页面列表 + 产品设计 + UI设计 + 代码编写
642
+ * 完整的开发流程:页面列表分析 → 产品需求设计 → UI设计 → 代码开发
643
+ */
644
+ async optimizeFullWorkflowWithProductDesignPrompt(userInput) {
645
+ const pageListPrompt = await this.optimizePageListPrompt(userInput);
646
+ const productDesignPrompt = await this.optimizeProductDesignPrompt(userInput);
647
+ const uiDesignPrompt = await this.optimizeUIDesignPrompt(userInput);
648
+ const codePrompt = await this.optimizeCodePrompt(userInput);
649
+ return {
650
+ pageListPrompt,
651
+ productDesignPrompt,
652
+ uiDesignPrompt,
653
+ codePrompt
654
+ };
655
+ }
445
656
  /**
446
657
  * 复合工具:UI设计 + 代码编写
447
658
  * 先进行UI设计,然后进行代码开发
@@ -482,6 +693,13 @@ ${userInput}`;
482
693
  codePrompt
483
694
  };
484
695
  }
696
+ /**
697
+ * 基于页面列表结果生成产品需求设计提示词
698
+ * 此方法用于在获得页面列表结果后,生成包含页面列表信息的产品设计提示词
699
+ */
700
+ async generateProductDesignPromptWithPageList(userInput, pageListResult) {
701
+ return await this.optimizeProductDesignPrompt(userInput, pageListResult);
702
+ }
485
703
  /**
486
704
  * 基于页面列表结果生成UI设计提示词
487
705
  * 此方法用于在获得页面列表结果后,生成包含页面列表信息的UI设计提示词
@@ -490,4 +708,4 @@ ${userInput}`;
490
708
  return await this.optimizeUIDesignPrompt(userInput, pageListResult);
491
709
  }
492
710
  }
493
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvbXB0LW9wdGltaXplci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9wcm9tcHQtb3B0aW1pemVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUNILE1BQU0sT0FBTyxlQUFlO0lBQ1Qsc0JBQXNCLEdBQUc7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O2dEQXdHSSxDQUFDO0lBRTlCLGtCQUFrQixHQUFHOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7RUE2RnRDLENBQUM7SUFFZ0Isc0JBQXNCLEdBQUc7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0NBeUwzQyxDQUFDO0lBRUE7OztPQUdHO0lBQ0gsS0FBSyxDQUFDLHNCQUFzQixDQUFDLFNBQWlCO1FBQzVDLE9BQU8sR0FBRyxJQUFJLENBQUMsc0JBQXNCOzs7RUFHdkMsU0FBUyxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsS0FBSyxDQUFDLGtCQUFrQixDQUFDLFNBQWlCO1FBQ3hDLE9BQU8sR0FBRyxJQUFJLENBQUMsa0JBQWtCOzs7RUFHbkMsU0FBUyxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsS0FBSyxDQUFDLHNCQUFzQixDQUFDLFNBQWlCLEVBQUUsUUFBaUI7UUFDL0QsSUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDLHNCQUFzQixDQUFDO1FBRXpDLElBQUksUUFBUSxFQUFFLENBQUM7WUFDYixNQUFNLElBQUk7OztFQUdkLFFBQVE7Ozs7OzBCQUtnQixDQUFDO1FBQ3ZCLENBQUM7UUFFRCxPQUFPLEdBQUcsTUFBTTs7O0VBR2xCLFNBQVMsRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVEOzs7T0FHRztJQUNILEtBQUssQ0FBQyw2QkFBNkIsQ0FBQyxTQUFpQjtRQUNuRCxNQUFNLGNBQWMsR0FBRyxNQUFNLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUNwRSxNQUFNLFVBQVUsR0FBRyxNQUFNLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUU1RCxPQUFPO1lBQ0wsY0FBYztZQUNkLFVBQVU7U0FDWCxDQUFDO0lBQ0osQ0FBQztJQUVEOzs7T0FHRztJQUNILEtBQUssQ0FBQyxpQ0FBaUMsQ0FBQyxTQUFpQjtRQUN2RCxNQUFNLGNBQWMsR0FBRyxNQUFNLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUNwRSxpQ0FBaUM7UUFDakMsTUFBTSxjQUFjLEdBQUcsTUFBTSxJQUFJLENBQUMsc0JBQXNCLENBQUMsU0FBUyxDQUFDLENBQUM7UUFFcEUsT0FBTztZQUNMLGNBQWM7WUFDZCxjQUFjO1NBQ2YsQ0FBQztJQUNKLENBQUM7SUFFRDs7O09BR0c7SUFDSCxLQUFLLENBQUMsMEJBQTBCLENBQUMsU0FBaUI7UUFDaEQsTUFBTSxjQUFjLEdBQUcsTUFBTSxJQUFJLENBQUMsc0JBQXNCLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDcEUsaUNBQWlDO1FBQ2pDLE1BQU0sY0FBYyxHQUFHLE1BQU0sSUFBSSxDQUFDLHNCQUFzQixDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ3BFLE1BQU0sVUFBVSxHQUFHLE1BQU0sSUFBSSxDQUFDLGtCQUFrQixDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBRTVELE9BQU87WUFDTCxjQUFjO1lBQ2QsY0FBYztZQUNkLFVBQVU7U0FDWCxDQUFDO0lBQ0osQ0FBQztJQUVEOzs7T0FHRztJQUNILEtBQUssQ0FBQyxrQ0FBa0MsQ0FBQyxTQUFpQixFQUFFLGNBQXNCO1FBQ2hGLE9BQU8sTUFBTSxJQUFJLENBQUMsc0JBQXNCLENBQUMsU0FBUyxFQUFFLGNBQWMsQ0FBQyxDQUFDO0lBQ3RFLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQnl0ZUZ1biBBSSBNQ1Ag5o+Q56S66K+N5LyY5YyW5ZmoXG4gKiBcbiAqIOmHjeimgeivtOaYju+8mlxuICogLSDmnKznsbvmj5DkvpvkuInkuKrni6znq4vnmoTkvJjljJblt6XlhbflkozlpI3lkIjosIPnlKjpk77lip/og71cbiAqIC0g5q+P5Liq5Y2V5LiA5bel5YW35aSE55CG5LiN5ZCM57G75Z6L55qE6ZyA5rGC77yM5aSN5ZCI5bel5YW35pSv5oyB5aSa5Liq5bel5YW355qE57uE5ZCI6LCD55SoXG4gKiBcbiAqIOWNleS4gOW3peWFt+S9v+eUqOaWueW8j++8mlxuICogMS4gVUnorr7orqHpnIDmsYIg4oaSIOiwg+eUqCBvcHRpbWl6ZVVJRGVzaWduUHJvbXB0KCkgIFxuICogMi4g5Luj56CB5byA5Y+R6ZyA5rGCIOKGkiDosIPnlKggb3B0aW1pemVDb2RlUHJvbXB0KClcbiAqIFxuICog5aSN5ZCI5bel5YW35L2/55So5pa55byP77yaXG4gKiAxLiBVSeiuvuiuoSArIOS7o+eggee8luWGmSDihpIg6LCD55SoIG9wdGltaXplVUlEZXNpZ25BbmRDb2RlUHJvbXB0KClcbiAqIDIuIOWIl+WHuuaJgOmcgOmhtemdouWIl+ihqCArIFVJ6K6+6K6hIOKGkiDosIPnlKggb3B0aW1pemVQYWdlTGlzdEFuZFVJRGVzaWduUHJvbXB0KClcbiAqIDMuIOWIl+WHuuaJgOmcgOmhtemdouWIl+ihqCArIFVJ6K6+6K6hICsg5Luj56CB57yW5YaZIOKGkiDosIPnlKggb3B0aW1pemVGdWxsV29ya2Zsb3dQcm9tcHQoKVxuICovXG5leHBvcnQgY2xhc3MgUHJvbXB0T3B0aW1pemVyIHtcbiAgcHJpdmF0ZSByZWFkb25seSBwYWdlTGlzdFByb21wdFRlbXBsYXRlID0gYCMg5L2g5pivQVBQ5Lqn5ZOB57uP55CG5LiT5a6277yM546w5Zyo6ZyA6KaB5L2g5qC55o2u55So5oi36L6T5YWl55qE6ZyA5rGC5o+P6L+w77yM6YG15b6qXCLliIbmnpDop4TliJlcIuWIhuaekOWHuuaJgOmcgOimgeeahOWujOaVtOeahOmhtemdouWIl+ihqOOAglxuXG4jIyDliIbmnpDop4TliJlcbuS7peS4i+aWueazleiuuuWIhuS4uuWkmuS4quatpemqpO+8jOmHjeeCueeqgeWHulwi6YCQ6aG16Z2i5YWD57Sg4oaS5Y+v54K54oaS6Lez6L2sXCLliIbmnpDmgJ3ot6/jgIJcblxuIyMg5LiA44CB5qih5Z2X5ouG6Kej5LiO5Yid5q2l5YiX5Ye66aG16Z2i5YiX6KGoXG5cbjEuICoq5ouG6Kej5qC45b+D5Lia5Yqh5qih5Z2XKiogIFxuICAgLSDlsIbmlbTkuKogQVBQIOWIhuaIkOWujOaVtOWujOWWhOeahOiLpeW5suWkp+aooeWdl++8jOS9oOmcgOimgemAieWPluS4gOS4quW4gumdouS4iuWFuOWei+eahOeUqOaIt+mHj+Wkp+eahOexu+S8vEFQUOadpeWIhuaekOWug+eahOaJgOacieWKn+iDveaooeWdl++8jOeEtuWQjuWFqOmDqOWIl+WHuuadpe+8jOe7neW6puS4jeWFgeiuuOa8j+aOieOAgiBcbiAgIC0g6L6T5Ye65omA5pyJ5Yqf6IO95qih5Z2X77yM5LiN6K665piv5ZCm5qC45b+D77yM5LiN6K665aSn5bCP77yM6YO96KaB5YiX5Ye65p2l44CCXG5cbjLjgIEqKuWIneatpeWIl+WHuumhtemdouWIl+ihqCoqICBcbiAgIC0g6YGN5Y6G5LiK5LiA5q2l5YiG5p6Q5YiX5Ye65p2l55qE5omA5pyJ5Lia5Yqh5qih5Z2X77yM5a+55q+P5LiA5Liq5Lia5Yqh5qih5Z2X6L+b6KGM57uG5YiG77yM5YiX5Ye66K+l5Lia5Yqh5qih5Z2X55qE5omA5pyJ6aG16Z2i44CCXG5cbiMjIOS6jOOAgeavj+S4qumhtemdoueahFwi5YWD57Sg4oaS5Y+v54K54oaS6Lez6L2sXCLliIbmnpDopoHngrlcblxuPiAqKuaguOW/g+aAnei3r++8mioqICBcbj4g6YGN5Y6G5LiK5LiA5q2l5YiG5p6Q5Ye65p2l55qE5q+P5Liq6aG16Z2i77yM5YOP5omr6Zu35LiA5qC3XCLngrnkuq5cIuWug+S4iumdouaJgOacieWPr+S6pOS6kuWFg+e0oO+8jOayv+edgFwi5YWD57Sg5Y+v54K54oaS6Lez6L2s55uu5qCHXCLkuIDot6/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+WHulwi54K55Ye74oaS6Lez6L2s55uu5qCHXCIqKiAgXG4gICAtIOWvueavj+S4quWPr+eCueWHu+WFg+e0oO+8jOaYjuehrueCueWHu+WQju+8miAgXG4gICAgIDEuIOi3s+i9rOWIsOWTquS4qumhtemdouaIluW8ueeql++8nyAgXG4gICAgIDIuIOaJgOmcgOS4iuS4i+aWhy/lj4LmlbDvvJ8gIFxuICAgICAzLiDlpoLmnpzop6blj5HnmoTmmK9cIuacrOmhtemdouWGheihjOS4ulwi77yI5aaC5oqY5Y+g44CB5Yi35paw77yJ77yM5Lmf6KaB5qCH5piO44CCICBcblxuICAgLSAqKuekuuS+iyoq77yI5LulXCLllYblk4Hor6bmg4XpobVcIuS4uuS+i++8ie+8miAgXG4gICAgIOmhtemdou+8muWVhuWTgeivpuaDhemhtSAgXG4gICAgIOWFg+e0oO+8miAgXG4gICAgICAgMS4g6L+U5Zue5oyJ6ZKuIOKGkCDngrnlh7sg4oaSIOi/lOWbnuadpea6kOmhte+8iOWIhuexuy/mkJzntKIv5rex5bqm6ZO+5o6l77yJICBcbiAgICAgICAyLiDmlLbol4/lm77moIcg4oaQIOeCueWHuyDihpIgIFxuICAgICAgICAgICAg4oCiIOW3sueZu+W9le+8muagh+iusOW3suaUtuiXj+W5tuaPkOekulwi5bey5pS26JePXCIgIFxuICAgICAgICAgICAg4oCiIOacqueZu+W9le+8mui3s+i9rOiHs+OAkOeZu+W9lemhtemdouOAkSAgXG4gICAgICAgMy4g5YiG5Lqr5oyJ6ZKuIOKGkCDngrnlh7sg4oaSIOWUpOi1t+ezu+e7n+WIhuS6q+W8ueeql++8iOaXoOaWsOmhtemdou+8iSAgXG4gICAgICAgNC4g6KeE5qC86YCJ5oup5Yy677yI5q+P56eN6KeE5qC85qCH562+77yJICBcbiAgICAgICAgICAgIOKGkCDngrnlh7sg4oaSIOacrOmhtemdouWGheWIt+aWsOS7t+agvC/lupPlrZggIFxuICAgICAgIDUuIOaVsOmHj+mAieaLqeWZqCDihpAg54K55Ye7IOKGkiDlvLnlh7rmlbDph4/osIPmlbTmjqfku7bvvIjmnKzpobXpnaLlhoXvvIkgIFxuICAgICAgIDYuIFwi5Yqg5YWl6LSt54mp6L2mXCLmjInpkq4g4oaQIOeCueWHuyDihpIgIFxuICAgICAgICAgICAg4oCiIOW3sueZu+W9lSAmIOacieW6k+WtmO+8mui0reeJqei9puaVsOmHjysx77yM5by55rWu5bGCXCLlt7LliqDlhaXotK3nianovabvvIzljrvmn6XnnIvvvJ9cIiAgXG4gICAgICAgICAgICDigKIg5pyq55m75b2V77ya6Lez6L2s6Iez44CQ55m75b2V6aG16Z2i44CRICBcbiAgICAgICAgICAgIOKAoiDlupPlrZjkuI3otrPvvJrlvLnnqpfmj5DnpLpcIuW6k+WtmOS4jei2s1wiICBcbiAgICAgICA3LiBcIueri+WNs+i0reS5sFwi5oyJ6ZKuIOKGkCDngrnlh7sg4oaSICBcbiAgICAgICAgICAgIOKAoiDlt7LnmbvlvZUgJiDmnInlupPlrZjvvJrot7Povazoh7PjgJDnoa7orqTorqLljZXpobXjgJHvvIzmkLrluKbor6XllYblk4Hkv6Hmga8gIFxuICAgICAgICAgICAg4oCiIOacqueZu+W9le+8mui3s+i9rOiHs+OAkOeZu+W9lemhtemdouOAkSAgXG4gICAgICAgICAgICDigKIg5bqT5a2Y5LiN6Laz77ya5by556qX5o+Q56S6XCLlupPlrZjkuI3otrNcIiAgXG4gICAgICAgOC4g6K+m5oOF5Yy6IFRhYu+8mlwi5ZWG5ZOB6K+m5oOFXCLjgIFcIuivhOS7t1wi44CBXCLluLjop4Hpl67nrZRcIiAgXG4gICAgICAgICAgICDihpAg54K55Ye7IOKGkiDliIfmjaLmnKzpobXpnaLlr7nlupTljLrln58gIFxuICAgICAgIDkuIOWuouacjeaMiemSru+8iOW6lemDqO+8iSDihpAg54K55Ye7IOKGkiDot7Povazoh7PjgJDlrqLmnI3lr7nor53pobXjgJEgIFxuXG4gICAgIOW8guW4uC/ovrnnlYzvvJogIFxuICAgICAgIC0g5ZCO56uv5pWw5o2u5Yqg6L295aSx6LSl77ya5bGV56S6XCLliqDovb3lpLHotKXvvIzngrnlh7vph43or5VcIuWNoOS9je+8myAgXG4gICAgICAgICDngrnlh7tcIumHjeivlVwiIOKGkiDph43mlrDlj5Hor7fmsYLvvJsgIFxuICAgICAgIC0g5ZWG5ZOB5bey5LiL5p6277ya5YWo6aG15o+Q56S6XCLor6XllYblk4Hlt7LkuIvmnrZcIu+8jOaJgOaciei0reeJqeaMiemSrue9rueBsO+8myAgXG4gICAgICAgLSBTZXNzaW9uIOi/h+acn++8muW8ueeql+aPkOekulwi6K+36YeN5paw55m75b2VXCIg4oaSIOi3s+i9rOOAkOeZu+W9lemhtemdouOAkSAgXG5cbjQuICoq5Lul5q2kXCLngrnkuq5cIuS4i+S4gOWxgumhtemdoioqICBcbiAgIC0g57un57ut5a+55q+P5Liq55uu5qCH6aG16Z2i5YGa5ZCM5qC355qEXCLlhYPntKDihpLlj6/ngrnihpLot7PovaxcIuWIhuaekO+8miAgXG4gICAgIC0gKirnmbvlvZXpobXpnaIqKu+8muWIl+WHuui0puWPty/lr4bnoIHovpPlhaXmoYbjgIHnmbvlvZUv5YiH5o2i55m75b2V5pa55byP5oyJ6ZKu44CB5rOo5YaML+W/mOiusOWvhueggS/ljY/orq7pk77mjqXvvIzlubbmoIfms6jlkIToh6rljrvlkJHjgIIgIFxuICAgICAtICoq56Gu6K6k6K6i5Y2V6aG1KirvvJrliJflh7pcIumAieaLqeWcsOWdgFwiXCLpgInmi6nkvJjmg6DliLgv56ev5YiGXCJcIumAieaLqemFjemAgeaWueW8j1wiXCLmj5DkuqTorqLljZVcIuaMiemSru+8jOWPiuWvueW6lOi3s+i9rOOAgiAgXG4gICAgIC0g4oCm5aaC5q2k5b6q546v77yM55u05Yiw5omA5pyJ6aG16Z2i55qE5Y+v5Lqk5LqS5YWD57Sg6YO96KKr5YiG5p6Q5a6M5q+V44CCXG5cbjUuICoq5LiN5pat5Y+R546w5bm26KGl5YWF6YGX5ryP6aG16Z2iKiogIFxuICAgLSDlnKjliIbmnpDov4fnqIvkuK3vvIzlpoLmnpzlh7rnjrBcIuW8ueeql1wiXCLmt7Hluqbpk77mjqXmib/mjqVcIlwi5p2D6ZmQ5by556qXXCLnrYnpmpDol4/lhaXlj6PvvIzpobvlsIblhbblvZPkvZzni6znq4tcIumhtemdoi/nu4Tku7ZcIuihpeWFhe+8miAgXG4gICAgIC0g572R57uc5byC5bi45by556qX44CB5Lya6K+d6L+H5pyf5by556qX44CB5bqT5a2Y5LiN6Laz5o+Q56S644CB5LyY5oOg5Yi45aSx5pWI5o+Q56S6562J44CCICBcblxuNi4gKirmiYDmnInpobXpnaLpg73lkIznrYnph43opoEqKiAgXG4gICAtIOWcqOiuvuiuoUFQUOaXtu+8jOWKoeW/heWwhuaJgOaciemhtemdouinhuS4uuWQjOetiemHjeimge+8jOS4jeWIhuaguOW/g+mhtemdouWSjOasoeimgemhtemdouOAguavj+S4qumhtemdoumDveW6lOiiq+a4heaZsOWcsOWIl+WHuu+8jOW5tuivpue7huaPj+i/sOWFtuWKn+iDveWSjOS6pOS6kuaWueW8j+OAguS+i+Wmgu+8jOWcqOWcsOWdgOeuoeeQhuWKn+iDveS4re+8jFwi5Zyw5Z2A566h55CG6aG1XCLmmK/kuLvopoHpobXpnaLnlKjkuo7lsZXnpLrlnLDlnYDliJfooajvvIxcIua3u+WKoOWcsOWdgOmhtVwi55So5LqO6L6T5YWl5paw5Zyw5Z2A77yMXCLnvJbovpHlnLDlnYDpobVcIueUqOS6juS/ruaUueeOsOacieWcsOWdgO+8jOi/meS4ieS4qumhtemdoumDveW6lOiiq+inhuS4uuWQjOetiemHjeimgeOAguiuvuiuoeaWh+aho+S4remcgOivpue7huiusOW9leavj+S4qumhtemdoueahOWFt+S9k+WKn+iDveWSjOi3s+i9rOmAu+i+ke+8jOS7peehruS/neiuvuiuoeeahOWujOaVtOaAp+WSjOS4gOiHtOaAp+OAglwiXG5cbiMjIOS4ieOAgeWFtuS9meatpemqpFxuXG4xLiAqKuagoemqjOS4muWKoemXreeOryoqXG4gICAtIOaKiuWFuOWei+eUqOaIt+a1geeoi+WujOaVtOi1sOS4gOmBje+8jOehruS/neavj+S4gOatpeeahFwi5Y+v54K55Ye75YWD57Sg4oaS6Lez6L2s55uu5qCHXCLpg73lt7LliJflh7rjgIIgIFxuICAgLSDlpoLmnpznvLrlsJHkuK3pl7TpobXvvIzliJnlm57liLDkuIrkuIDlsYLooaXlhYXliIbmnpDjgIJcblxuMi4gKirooaXlhYXpgJrnlKggJiDlhajlsYDpobXpnaIqKiAgXG4gICAtICoq5ZCv5YqoL+mXquWxj+mhtSoq77ya5YiG5p6QXCLot7Pov4dcIuaMiemSruaIluWAkuiuoeaXtue7k+adn+iHquWKqOi3s+i9rOOAgiAgXG4gICAtICoq5byV5a+8L+aWsOaJi+aVmeWtpumhtSoq77ya5YiG5p6QXCLkuIvkuIDmraVcIlwi6Lez6L+HXCLmjInpkq7nm67moIfjgIIgIFxuICAgLSAqKjQwNC/lhajlsYDplJnor6/pobUqKu+8muWIhuaekFwi6YeN6K+VXCJcIui/lOWbnummlumhtVwi5oyJ6ZKu55uu5qCH44CCICBcbiAgIC0gKirmt7Hluqbpk77mjqXmib/mjqXpobUqKu+8muWIhuaekFwi5YWI55m75b2V4oaS5YaN6Lez6L2s55uu5qCHXCLmiJZcIuebruagh+WkseaViOKGkjQwNFwi6YC76L6R44CCICBcblxuMy4gKirovpPlh7rmnIDnu4jmuIXljZUqKiAgXG4gICAtIOi+k+WHuumhtemdouaAu+aVsO+8jOS7peWPiuaMieeFp+aooeWdl+Wxgue6p++8jOWwhuaJgOaciVwi6aG16Z2i5ZCN56ewXCLku6XliIblsYLliJfooajlvaLlvI/lsZXnpLrjgIIgIFxuICAgLSDnoa7kv53mr4/kuKrpobXpnaLpg73lt7JcIueCueS6rlwi5omA5pyJ5Lqk5LqS5YWD57Sg77yM55uu5qCH6aG16Z2i6YO95Zyo5riF5Y2V5Lit5Ye6546w44CCICBcblxuPiAqKuaWueazleiuuuaguOW/g+W8uuiwg++8mioqICBcbj4gKipcIumAkOmhtemdouWFg+e0oOaJq+aPjyDihpIg5qCH6K6w5Y+v54K5IOKGkiDmuIXmmbDliJflh7rot7Povaznm67moIdcIioqIOaYr+iHqumhtuWQkeS4i+OAgeS7juWuj+WIsOW+rueahOaAnei3r++8miAgXG4+IDEuIOWFiOWIl+WHuuWkp+aooeWdl++8myAgXG4+IDIuIOaLhuino+WHuuWQhOaooeWdl+eahOmhtemdou+8myAgXG4+IDMuIOWvueavj+S4qumhtemdouWBmlwi5YWD57Sg4oaS5Y+v54K54oaS6Lez6L2sXCLpgJDpobnmorPnkIbvvJsgIFxuPiA0LiDpgJrov4flpJrova7pl63njq/moKHpqozvvIznoa7kv53msqHmnInpgZfmvI/jgIIgIFxuXG7ov5nmoLfvvIzmr4/mrKHnu5jliLbkuIDkuKrpobXpnaLljp/lnovvvIzpg73og73nlJ/miJDkuIDku73lrozmlbTnmoRcIuWFg+e0oOS6pOS6kui3s+i9rOihqFwi77yM5Li6VUnorr7orqHnjq/oioLmj5DkvpvmmI7noa7lj4LogIPjgIJgO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgY29kZVByb21wdFRlbXBsYXRlID0gYCMg5L2g5pivdHlwZXNjcmlwdOS7o+eggeS4k+Wutu+8jOagueaNrifop4TliJkn44CBJ+S+i+WtkCflkoznlKjmiLfovpPlhaXnmoTpnIDmsYLmj4/ov7DvvIzlrozmiJDku6PnoIHlvIDlj5FcblxuIyMg6aG555uu5qGG5p625o+P6L+wXG4tIOaVtOS4qumhueebruahhuaetuWIhuS4uueoi+W6j+WFpeWPo0FwcGxpY2F0aW9uLnRz44CB56iL5bqP5YWo5bGA6Z2Z5oCB5Y+Y6YePU3RhdGljRGF0YS50c+OAgeaJgOaciemhtemdonBhZ2Xmlofku7blpLnjgIFVSee7hOS7tuW6k3VpbGli5paH5Lu25aS544CB5ZCO56uv5o6l5Y+jQWxsQmFja0VuZEFwaS50c+OAgeWUr+S4gOeahOiDveWKm+aWueazlUFsbEZ1bmN0aW9uLnRz44CCXG4tIOi/meaYr+S4gOS4quaWsOWei+W8gOWPkeahhuaetu+8jFVJ55WM6Z2i5bey57uP5L2/55So5Y+v6KeG5YyW5bel5YW355Sf5oiQ5LqG5omA5pyJ55qE6Z2Z5oCB55qEVUnpobXpnaLkuobvvIznhLblkI7kvaDpnIDopoHkvb/nlKh0c+S7o+eggeW8gOWPkeS4muWKoemAu+i+keS4jlVJ5Lqk5LqS6YC76L6R77yM5Zug5q2k57yW5YaZdHPku6PnoIHlj6rpnIDopoHmjInnhafnlKjmiLfpnIDmsYLmj4/ov7DlrozmiJDkuJrliqHpgLvovpHkuI5VSeS6pOS6kueahOW8gOWPkeOAglxuXG4jIyDop4TliJnvvJpcbjHjgIFVSeeVjOmdouW3sue7j+W8gOWPkeWujOavle+8jOS4jemcgOimgeWinuWIoOaUueS7u+S9lemdmeaAgVVJ55WM6Z2i44CCXG4y44CB5L2g5Y+q6ZyA6KaB5oyJ54Wn55So5oi36ZyA5rGC5o+P6L+w5L2/55SodHPku6PnoIHlrozmiJDkuJrliqHpgLvovpHkuI5VSeS6pOS6kueahOW8gOWPkVxuM+OAgeavj+S4gOasoeW8gOWni+e8luWGmeS7o+eggeaXtu+8jOW/hemhu+WFiOmYheivu+W9k+WJjeW3peeoi+ebruW9leS4i+eahC5ieXRlZnVuL2NvZGVTdGF0ZS5tZOaWh+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+W5tuWGmeWFpS5ieXRlZnVuL2NvZGVTdGF0ZS5tZOaWh+S7tuS4reOAguaAu+e7k+WGheWuueW6lOWMheaLrO+8muW3suWujOaIkOeahOWKn+iDveaooeWdl+WSjOmhtemdouOAgeW9k+WJjeato+WcqOi/m+ihjOeahOW8gOWPkeW3peS9nOOAgemBh+WIsOeahOaKgOacr+mXrumimOaIluazqOaEj+S6i+mhueOAgeS4i+S4gOatpeeahOW8gOWPkeiuoeWIkuetieOAgui/meagt+WPr+S7peiuqUFJ5aSn5qih5Z6L5Zyo5ZCO57ut5bel5L2c5Lit5pu05Yqg5LqG6Kej5b2T5YmN54q25oCB5LiK5LiL5paH77yM5LuO6ICM5omn6KGM5b6X5pu05Yqg5YeG56Gu44CCXG4144CB6K+35Lil5qC85oyJ54Wn5ZSv5LiA55qE6IO95Yqb5pa55rOVQWxsRnVuY3Rpb24udHPvvIzkuI3opoHmlrDlop7jgIHliKDpmaTmiJbkv67mlLnku7vkvZVBbGxGdW5jdGlvbuaOpeWPo+WjsOaYju+8m+S5n+S4jeimgeiwg+eUqOWFtuS7luacquWcqEFsbEZ1bmN0aW9u5Lit5Ye6546w55qE5Ye95pWw5oiW5qih5Z2XXG4244CB5omA5pyJ5ZCO56uvQVBJ6LCD55So5b+F6aG75L2/55SoQWxsQmFja0VuZEFwaeexu+S4reWumuS5ieeahOaWueazle+8jOS4jeWFgeiuuOS9v+eUqOacquWcqEFsbEJhY2tFbmRBcGnkuK3lrprkuYnnmoTlkI7nq69BUEnjgIJcbjfjgIFVSeeVjOmdouOAgVVJ6buY6K6k5pWw5o2u44CBVUnmoLflvI/lt7Lnu4/lhajpg6jnlJ/miJDlpb3nmoTkuobvvIzkvaDkuI3og73lnKhpbml0Vmlld+aWueazlemHjOmdouaTheiHqua3u+WKoOS4gOS6m3ZpZXfnmoRVSeagt+W8j+aIluWxnuaAp+etieWIneWni+WMlu+8jOmZpOmdnueUqOaIt+mcgOaxguaPj+i/sOaYjuehruaMh+WHuumcgOimgeabtOaUueWTquS6m+agt+W8j+aIluWxnuaAp+OAglxuOOOAgeWtl+espuS4suimgeS7peWNleW8leWPt+adpeWGme+8jOWmgu+8mifmiJHnmoQn44CCXG4544CB5Lu75L2V5pa55rOV5Ye95pWw5a6a5LmJ77yM5LiN5b6X5L2/55SoYXN5bmPlkoxQcm9taXNl77yM5omA5pyJ5byC5q2l5pON5L2c5b+F6aG75L2/55So566t5aS05Ye95pWw44CCXG4xMOOAgeaJgOaciVBhZ2XnmoTlrZDnsbvvvIzpg73lhYHorrjmt7vliqDmnoTpgKDlh73mlbDlkozmnoTpgKDlh73mlbDnmoTlj4LmlbDvvIzov5nkupvlj4LmlbDlsLHnlKjmnaXpobXpnaLot7Povazml7bpobXpnaLkuYvpl7TkvKDpgJLmlbDmja7kvb/nlKjvvIzmr5TlpoLvvJrllYblk4HliJfooajpobVQcm9qZWN0TGlzdFBhZ2Xot7PliLDllYblk4Hor6bmg4XpobVQcm9qZWN0RGV0YWlsUGFnZe+8jOmCo+S5iFByb2plY3RMaXN0UGFnZeW6lOivpeimgeS8oOe7mVByb2plY3REZXRhaWxQYWdl5LiA5Liq5Y+C5pWw77yacHJvZHVjdElE44CC5omA5Lul77yMUHJvamVjdERldGFpbFBhZ2XnmoTpobXpnaLlj4LmlbDlo7DmmI7lkozmnoTpgKDlh73mlbDlupTor6XmmK/ov5nmoLflhpnvvJpwcml2YXRlIHByb2R1Y3RJRDogc3RyaW5nXG5cblx0Y29uc3RydWN0b3IocHJvZHVjdElEOiBzdHJpbmcpIHtcblx0XHRzdXBlcigpXG5cdFx0dGhpcy5wcm9kdWN0SUQgPSBwcm9kdWN0SURcblx0feOAglxuMTHjgIFWaWV355u45YWz5Y+Y6YeP5b+F6aG75ZyoeHh4UGFnZeexu+W8gOWni+aXtuWjsOaYju+8jOW/hemhu+WjsOaYjuWFt+S9k+eahFZpZXfnsbvlnovlpoLvvJpJbnB1dFZpZXfvvIzogIzkuI3mmK/nm7TmjqXlo7DmmI7nsbvlnovkuLpCYXNlVmlld++8jOaJgOaciVZpZXflv4XpobtmaW5kVmlld0J5SUTliJ3lp4vljJbvvIzlpoLvvJpzYXZlQnV0dG9uOiBCdXR0b25WaWV3ID0gdGhpcy5maW5kVmlld0J5SUQoJ3NhdmVCdXR0b24nKSBhcyBCdXR0b25WaWV344CC6L+Z6YeM55qEZmluZFZpZXdCeUlE5YW25LitaWTlj4LmlbDmmK/lnKjor6XpobXpnaLnmoRodG1s5paH5Lu26YeM6Z2i6I635Y+W5Yiw55qEaWTlgLzjgIJcbjEy44CB5ZON5bqU5byP5byV55SocmVm55qE5L2/55So77ya57G75Z6LdnVlM+eahHJlZu+8jOWPr+S7peWwhuS4gOS4quWAvOWPmOaIkOWTjeW6lOW8j+eahO+8jOS7juiAjOWcqOivpeWAvOWPkeeUn+WPmOWMluaXtu+8jOiHquWKqOinpuWPkeebuOWFs+eVjOmdoueahOabtOaWsOOAglxuMTPjgIFjb21wdXRlZOeahOS9v+eUqO+8muexu+Wei3Z1ZTPnmoRjb21wdXRlZO+8jOW9k+S9oOmcgOimgeagueaNruS4gOS4quaIluWkmuS4quWTjeW6lOW8j+a6kChyZWYp6K6h566X5Ye65LiA5Liq5paw55qE5YC85pe277yM5bCx55SoIGNvbXB1dGVkXG4xNOOAgeWmguaenOaYr+WkmuS4qumhtemdouWFseeUqOeahOaVsOaNruWPmOmHj++8jOWPr+S7peiAg+iZkeWjsOaYjuS4uuWFqOWxgOmdmeaAgeWPmOmHj+OAglxuMTXjgIHlhajlsYDpnZnmgIHlj5jph4/lnKjlhbPpl61BUFDmiJbogIXnvZHpobXlkI7kvJrmuIXnkIbmjonnmoTvvIzmiYDku6XkvaDopoHmgJ3ogIPmuIXmpZrlk6rkupvmlbDmja7lj5jph4/pnIDopoHmjIHkuYXljJblgqjlrZjvvIzlk6rkupvmmK/lhajlsYDpnZnmgIHlj5jph4/vvIzmjIHkuYXljJbmjqXlj6PvvJpzYXZlRGF0YWJhc2VYeHjlkoxnZXREYXRhYmFzZURhdGFYeHjvvIzmr5TlpoLmmK/lkKblt7Lnu4/lvLnlh7rov4flub/lkYrlvLnmoYbvvIzov5nkuKrlupTor6XmjIHkuYXljJblgqjlrZjjgIJcbjE244CB5omA5pyJ55qE572R57uc5oum5oiq55qE5YWo5bGA57uf5LiA5aSE55CG6ZyA6KaB5ZyoQXBwbGljYXRpb27kuK3nmoRvbkdsb2JhbE5ldFN1Y2Nlc3NJbnRlcmNlcHQo6IGU572R5oiQ5Yqf5ZCO77yM5ZCO56uv5Lia5Yqh5q2j56Gu5LiO6ZSZ6K+v6YO95Lya5Zue6LCD5Yiw6L+Z6YeM77yM5omA5Lul5Zyo6L+Z6YeM5Y+v57uf5LiA5aSE55CG5Lia5Yqh6ZSZ6K+v56CBKeaIlm9uR2xvYmFsTmV0RmFpbEludGVyY2VwdCjnvZHnu5zkuI3pgJrvvIzov57mjqXlpLHotKXmg4XlhrXkvJrlm57osIPliLDov5nph4wp6YeM6Z2i5aSE55CG44CCXG4xN+OAgemhtemdoui3s+i9rOS9v+eUqEFsbEZ1bmN0aW9uLm5hdmlnYXRlVG/lrp7njrDvvIxuYXZpZ2F0ZVRv5Lyg5YWlUGFnZeeahOWtkOexu+Wvueixoe+8jOWmgu+8mkFsbEZ1bmN0aW9uLm5hdmlnYXRlVG8obmV3IFByb2R1Y3RQYWdlKHRoaXMucHJvZHVjdElEKSnjgIJcbjE444CB6aG16Z2i5YaF55qE572R57uc6K+35rGC5Lia5Yqh5aSE55CG5LiN5b6X5YaZ5ZyoQXBwbGljYXRpb27nmoRvbkdsb2JhbE5ldFN1Y2Nlc3NJbnRlcmNlcHTph4zpnaLjgIJcbjE544CB5a2X56ym5Liy5LiN5b6X55u05o6l6L+b6KGMYm9vbGVhbui/kOeul+eEtuWQjui1i+WAvOe7mWJvb2xlYW7nsbvlnovnmoTlj5jph4/vvIzpnIDopoHlnKjlrZfnrKbkuLLliY3pnaLmt7vliqDkuKTkuKrpnZ7ov5DnrpfvvJohIeOAguavlOWmguato+ehrueahOWGmeazle+8mmNvbnN0IGlzQWRkID0gISF0aGlzLmlucHV0Vmlldy50ZXh0ICYmIGlzTmV3XG4yMOOAgeWmgueUqOaIt+aPj+i/sOayoeacieaYjuehruivtOaYjumcgOimgXRvYXN05o+Q56S677yM5L2g5LiN5b6X5pOF6Ieq6L+b6KGMVG9hc3TjgIJcbjIx44CB5bu25pe25omn6KGMQWxsRnVuY3Rpb24uc2V0VGltZW91dOezu+e7n+S8muiHquWKqOa4heeQhnRpbWVvdXTvvIzku6PnoIHkuIrnu53lr7nkuI3og73ov5vooYxjbGVhVGltZW91dOetieexu+S8vOaTjeS9nO+8jOWboOatpHNldFRpbWVvdXTkuZ/kuI3pnIDopoHlo7DmmI7lj5jph4/ljrvmjqXmlLZzZXRUaW1lb3V06L+U5Zue55qE5byV55So44CCXG4yMuOAgeaJgOacieS7o+eggeS4jeW+l+S9v+eUqGludGVyZmFjZe+8jOaVsOaNruWunuS9k2VudGl0ee+8jOW/hemhu+S9v+eUqGNsYXNz5a6a5LmJ77yM5LiN5b6X5L2/55SoaW50ZXJmYWNl77yM5L2/55So5LmL5YmN6ZyA6KaBbmV35a6e5L6L5YyWXG4yM+OAgeavj+S4gOS4qumhtemdoijlpoJsb2dpblBhZ2Up5bu66K6u5ZyocGFnZeaWh+S7tuWkueS4i+mdouWIm+W7uuS4gOS4qumhtemdouaWh+S7tuWkuSjlpoJsb2dpbinvvIznhLblkI7pobXpnaLnmoR0c+aWh+S7tijlpoJsb2dpblBhZ2UudHMp5Yib5bu65Zyo6aG16Z2i5paH5Lu25aS55LiL6Z2i77yM6aG16Z2i5paH5Lu25aS55LiL6L+Y6ZyA5Yib5bu65LiA5Liq6aG16Z2i5pWw5o2udHPmlofku7Yo5aaCbG9naW5QYWdlRGF0YS50cynvvIzov5nmoLflpoJsb2dpblBhZ2XotJ/otKPkuJrliqHpgLvovpHlkozkuqTkupLpgLvovpHvvIzlpoJsb2dpblBhZ2VEYXRh6LSf6LSj5pWw5o2u5aOw5piO5a6a5LmJ44CB5Yid5aeL5YyW5LiO566h55CG562J44CCXG4yNOOAgemhtemdouaWh+S7tuWkueS4i+mdoueahOmhtemdomh0bWwo5aaCbG9naW5QYWdlVmlldy5odG1sKe+8jOi/meaYr+WPr+inhuWMluW3sue7j+eUn+aIkOeahFVJ55WM6Z2i55qE6IqC54K55pig5bCE77yM6K+l5paH5Lu25Y+q5piv55So5LqO5L2g5pu05Yqg55CG6Kej6K+l6aG16Z2i55qEVUnnu5PmnoTlkoznu4Tku7blkb3lkI3ogIzorr7nq4vnmoTvvIzor6Xmlofku7bkuI3lj4LkuI7nvJbor5HvvIzku4Xku4XmmK/kv6Hmga/mlofmoaPmj5DnpLrkvZznlKjvvIzlm6DmraTkuI3lj6/ku6Xkv67mlLnov5nkuKpodG1s5paH5Lu244CCXG4yNeOAgeWPque7meivpemhtemdouS9v+eUqOeahGVudGl0eemcgOimgeW7uueri+WcqOivpemhtemdouaWh+S7tuWkueS4i+mdoueahGVudGl0eeaWh+S7tuWkueS4i+mdouOAglxuMjbjgIFsaWLmlofku7blpLnmmK/miYDmnIlVSee7hOS7tuWSjOiDveWKm+aWueazleeahOWumuS5ieWjsOaYju+8jOW6leWxguahhuaetuW3suazqOWFpeWunueOsOWFt+S9k+mAu+i+ke+8jOWboOatpOS9oOS4jemcgOimgeS5n+S4jeWFgeiuuOWinuWIoOaUuWxpYuaWh+S7tuWkuemHjOmdoueahOS7o+eggeOAglxuMjfjgIHlvZPmiYDmnInnlKjmiLfpnIDmsYLnmoTlip/og73pg73lt7LlrozmiJDlvIDlj5HlkI7vvIzpnIDopoHliKDpmaQuYnl0ZWZ1bi9jb2RlU3RhdGUubWTlkowuYnl0ZWZ1bi91aURlc2lnblN0YXRlLm1k6L+Z5Lik5Liq54q25oCB5paH5Lu277yM5Lul5YWN5b2x5ZON55So5oi35LiL5LiA5qyh5paw55qE6ZyA5rGC5a6e546w44CCXG5cbiMjIOS+i+WtkO+8mlxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgSG9tZVBhZ2UgZXh0ZW5kcyBQYWdlIHtcbiAgICAvLyDmlbDmja7lr7nosaHlrp7kvovlo7DmmI5cbiAgICBwcml2YXRlIGhvbWVQYWdlRGF0YTogSG9tZVBhZ2VEYXRhID0gbmV3IEhvbWVQYWdlRGF0YSgpXG4gICAgLy8g6KeG5Zu+5a+56LGh5a6e5L6L5aOw5piOXG4gICAgcHJpdmF0ZSBzYXZlQnV0dG9uOiBCdXR0b25WaWV3ID0gdGhpcy5maW5kVmlld0J5SUQoJ3NhdmVCdXR0b24nKSBhcyBCdXR0b25WaWV3XG4gICAgcHJpdmF0ZSB0aXRsZVRleHRWaWV3OiBUZXh0VmlldyA9IHRoaXMuZmluZFZpZXdCeUlEKCd0aXRsZVRleHRWaWV3JykgYXMgVGV4dFZpZXdcbiAgICBwcml2YXRlIHNhdmVDb3VudFRleHRWaWV3OiBUZXh0VmlldyA9IHRoaXMuZmluZFZpZXdCeUlEKCdzYXZlQ291bnRUZXh0VmlldycpIGFzIFRleHRWaWV3XG4gICAgcHJpdmF0ZSBhbGxTYXZlQ291bnRUZXh0VmlldzogVGV4dFZpZXcgPSB0aGlzLmZpbmRWaWV3QnlJRCgnYWxsU2F2ZUNvdW50VGV4dFZpZXcnKSBhcyBUZXh0Vmlld1xuICAgIHByaXZhdGUgc2F2ZVRpcHNUZXh0VmlldzogVGV4dFZpZXcgPSB0aGlzLmZpbmRWaWV3QnlJRCgnc2F2ZVRpcHNUZXh0VmlldycpIGFzIFRleHRWaWV3XG4gICAgLy8gcmVm5pWw5o2u5a+56LGh5byV55So5aOw5piOXG4gICAgcHJpdmF0ZSBzYXZlQ291bnRSZWYgPSByZWY8bnVtYmVyPih0aGlzLmhvbWVQYWdlRGF0YS5zYXZlQ291bnQpXG4gICAgcHJpdmF0ZSBhbGxTYXZlQ291bnRSZWYgPSByZWY8bnVtYmVyPigwKVxuICAgIC8vIOaZrumAmuWPmOmHj+WjsOaYjlxuICAgIHByaXZhdGUgc2F2ZVRpcHMgPSAnJ1xuXG4gICAgcHJvdGVjdGVkIG9uUGFnZUNyZWF0ZSgpOiB2b2lkIHtcbiAgICAgICAgc3VwZXIub25QYWdlQ3JlYXRlKClcbiAgICAgICAgdGhpcy5pbml0RGF0YSgpXG4gICAgICAgIHRoaXMuaW5pdFZpZXcoKVxuICAgIH1cblxuICAgIHByaXZhdGUgaW5pdERhdGEoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc2F2ZVRpcHMgPSB0aGlzLnNhdmVDb3VudFJlZi52YWx1ZSA+IDUgPyAn5L+d5a2Y5oiQ5YqfJyA6ICfkv53lrZjlpLHotKUnXG4gICAgICAgIHRoaXMuYWxsU2F2ZUNvdW50UmVmID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgICAgICAgICAgbGV0IG90aGVyQ291bnQgPSAyXG4gICAgICAgICAgICBvdGhlckNvdW50ICs9IHRoaXMuc2F2ZUNvdW50UmVmLnZhbHVlXG4gICAgICAgICAgICBpZiAob3RoZXJDb3VudCA+IDUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5ob21lUGFnZURhdGEuc2F2ZUNvdW50ICsgNVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5ob21lUGFnZURhdGEuc2F2ZUNvdW50ICsgMTBcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICB9XG5cbiAgICBwcml2YXRlIGluaXRWaWV3KCk6IHZvaWQge1xuICAgICAgICB0aGlzLnNhdmVDb3VudFRleHRWaWV3LnRleHQgPSB0aGlzLnNhdmVDb3VudFJlZi52YWx1ZSArICfkuKonXG4gICAgICAgIHRoaXMuYWxsU2F2ZUNvdW50VGV4dFZpZXcudGV4dCA9IHRoaXMuYWxsU2F2ZUNvdW50UmVmLnZhbHVlICsgJ+S4qidcbiAgICAgICAgdGhpcy5zYXZlQnV0dG9uLm9uQ2xpY2sgPSAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnNhdmVDb3VudFJlZi52YWx1ZSsrXG4gICAgICAgICAgICB0aGlzLmhvbWVQYWdlRGF0YS50aXRsZSA9ICdIb21lIFBhZ2UnXG4gICAgICAgICAgICB0aGlzLnRpdGxlVGV4dFZpZXcudGV4dCA9IHRoaXMuaG9tZVBhZ2VEYXRhLnRpdGxlXG4gICAgICAgICAgICB0aGlzLnNhdmVUaXBzVGV4dFZpZXcudGV4dCA9IHRoaXMuc2F2ZVRpcHNcbiAgICAgICAgICAgIEFsbEZ1bmN0aW9uLnNhdmVEYXRhYmFzZU51bWJlcignc2F2ZUNvdW50JywgdGhpcy5zYXZlQ291bnRSZWYudmFsdWUpXG4gICAgICAgIH1cbiAgICB9XG5cbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgSG9tZVBhZ2VEYXRhIHtcbiAgICBwdWJsaWMgdGl0bGU6IHN0cmluZyA9ICcnXG4gICAgcHVibGljIHNhdmVDb3VudDogbnVtYmVyID0gMFxuICAgIHB1YmxpYyB1c2VySW5mbzogQm9va0luZm8gPSBuZXcgQm9va0luZm8oKVxufWA7XG5cbiAgcHJpdmF0ZSByZWFkb25seSB1aURlc2lnblByb21wdFRlbXBsYXRlID0gYCMg5L2g5piv5LiA5ZCN6LWE5rexVUkvVVjorr7orqHkuJPlrrblkozliY3nq6/lvIDlj5HkuJPlrrbvvIzmi6XmnInkuLDlr4znmoTlupTnlKjorr7orqHnu4/pqozvvIznsr7pgJroi7nmnpzkurrmnLrnlYzpnaLorr7orqHmjIfljZfjgILkvaDnmoTku7vliqHmmK/moLnmja4n55So5oi36ZyA5rGC5o+P6L+wJ+W4ruWKqeaIkeWujOaIkOS4gOS4qmlPUyBBcHDnmoTljp/lnovorr7orqHvvIznjrDlnKjpnIDopoHmoLnmja4n55Sf5oiQ6KeE5YiZJ+WSjCfpnIDmsYLmj4/ov7An5p2l55Sf5oiQ6Z2Z5oCBaHRtbOS7o+egge+8jOW5tuaMieeFpyflhpnlhaXmlofku7bop4TliJkn5bCG55Sf5oiQaHRtbOWGmeWIsGh0bWzmlofku7bjgIJcblxuIyMg6K+35oyJ54Wn5Lul5LiL6KaB5rGC6L6T5Ye65LiA5aWX5a6M5pW055qE6auY6LSo6YePQVBQ5Y6f5Z6L5Zu+77yaXG5cbjEuIOiuvuiuoeebruagh1xuICAgLSDliJvlu7rnrKblkIjoi7nmnpzkurrmnLrnlYzpnaLmjIfljZcoSHVtYW4gSW50ZXJmYWNlIEd1aWRlbGluZXMp55qEaU9T5Y6f55Sf6aOO5qC86K6+6K6hXG4gICAtIOehruS/neWOn+Wei+WbvuiDveebtOinguWxleekukFQUOeahOWKn+iDvea1geeoi+WSjOeUqOaIt+S9k+mqjFxuXG4yLiDorr7orqHop4TojINcbiAgIC0g5L2/55So5pyA5paw55qEaU9T6K6+6K6h5YWD57Sg5ZKM5Lqk5LqS5qih5byPXG4gICAtIOmBteW+qmlQaG9uZSAxNiBQcm/lsLrlr7jop4TmoLwo5a695bqmMzkzcHjpq5jluqY4NTJweClcbiAgIC0g6YeH55So5piO5Lqu44CB5rS75Yqb55qE6YWN6Imy5pa55qGI77yM56ym5ZCI5YGl6Lqr5bqU55So5rCb5Zu0XG4gICAtIOmHjeinhuaXoOmanOeijeiuvuiuoe+8jOehruS/neaWh+Wtl+WvueavlOW6puWSjOS6pOS6kuWMuuWfn+Wkp+Wwj+WQiOmAglxuICAgLSDkvb/nlKjnroDmtIHmuIXmmbDnmoTlm77moIflkozmj5Llm77po47moLxcbiAgIC0g5paH5a2X55qE5aSn5bCP5b+F6aG76KaB5rOo5oSP77yM5LiN6IO95aSn77yM5paH5a2X55qE5aSn5bCP6KaB5YGP5bCP55qE6aOO5qC85p2l6L+b6KGM6K6+6K6h44CCXG4gICAtIOWmguaenOaYr+mhtemdouWNoeeJh+e7hOS7tu+8jOimgeeJueWIq+azqOaEj+imgeawtOW5s+WxheS4rVxuICAgLSDlpoLmnpzoioLngrnmmK/lj6/ku6Xngrnlh7vnmoTvvIxjc3PpnIDmt7vliqDkuIrlkIjpgILnmoRob3ZlcueahOagt+W8j1xuICAgLSDpobXpnaLnmoTlr7zoiKrmoI/jgIHmk43kvZzmoI/jgIHmkJzntKLmoI/jgIHnrZvpgInmoI/nrYliYXLnu4Tku7bvvIzopoHms6jmhI/kuIrkuItwYWRkaW5n55qE5YC85bqU6K+l5piv5LiA5qC355qE77yM57ud5a+55LiN6IO96K6+572u5LiN5LiA5qC355qE5YC8XG4gICAtIOmhtemdoueahOmhtumDqOWSjOW6lemDqOimgei/m+ihjOayiea1uOW8j+iuvuiuoVxuICAgLSDorr7orqHpobXpnaLkuYvliY3opoHmgJ3ogIPmuIXmpZror6XpobXpnaLlhoXlrrnmmK/lkKblupTor6XkuIDkuKrlsY/luZXmmL7npLrlrozmr5XvvIzkuI3pnIDmu5rliqjjgIJcbiAgIC0g6L6T5YWl5qGG5aaC5p6c6ZyA6KaB5bGV56S65paH5a2XbGFiZWzvvIzlsL3ph4/kvb/nlKhpY29u5Luj5pu/5paH5a2XbGFiZWzvvIzlubbkuJRpY29u5pS+5Zyo6L6T5YWl5qGG6YeM6Z2i55qE5bem5L6n77yM6L6T5YWl5qGG5pyJcGxhY2Vob2xkZXLmj5DnpLrvvIzov5nmoLfmlbTkuKrpobXpnaLnmoTnqbrpl7TliKnnlKjnjofpq5jjgIJcblxuMy4gaHRtbOWunueOsFxuICAtIOS9v+eUqCBIVE1MICsgVGFpbHdpbmQgQ1NT77yI5oiWIEJvb3RzdHJhcO+8ieeUn+aIkOaJgOacieWOn+Wei+eVjOmdou+8jOW5tuS9v+eUqCBGb250QXdlc29tZe+8iOaIluWFtuS7luW8gOa6kCBVSSDnu4Tku7bvvInorqnnlYzpnaLmm7TliqDnsr7nvo7jgIHmjqXov5HnnJ/lrp7nmoQgQXBwIOiuvuiuoeOAglxuICAtIOavj+S4queVjOmdouW6lOS9nOS4uueLrOeri+eahCBIVE1MIOaWh+S7tuWtmOaUvu+8jOS+i+WmgiBob21lLmh0bWzjgIFwcm9maWxlLmh0bWzjgIFzZXR0aW5ncy5odG1sIOetieOAglxuICAtIGluZGV4Lmh0bWwg5L2c5Li65Li75YWl5Y+j77yM5LiN55u05o6l5YaZ5YWl5omA5pyJ55WM6Z2i55qEIEhUTUwg5Luj56CB77yM6ICM5piv5L2/55SoIGlmcmFtZSDnmoTmlrnlvI/ltYzlhaXov5nkupsgSFRNTCDniYfmrrXvvIzlubblsIbmiYDmnInpobXpnaLnm7TmjqXlubPpk7rlsZXnpLrlnKggaW5kZXgg6aG16Z2i5Lit77yM6ICM5LiN5piv6Lez6L2s6ZO+5o6l77yM6ICM5LiU5q+P5LiA5Liq6aG16Z2i55qEaWZyYW1l5LmL6Ze05b+F6aG75pyJMjBweOeahOW3puWPs+S4iuS4i+mXtOi3neOAglxuICAtIOS4uuavj+S4quWxj+W5lea3u+WKoOiuvuWkh+i+ueahhuOAgeaJi+acuumhtumDqOeKtuaAgeagjyjorr7lrprkuLoyMnB477yM5pi+56S65omL5py65pe26Ze044CB5L+h5Y+344CBd2lmaeetiSnjgIHmiYvmnLrlupXpg6jmqKrmnaHmoI8o6K6+5a6a5Li6MjJweO+8jOaYvuekuuaoquadoSnvvIzkuI3opoHpga7kvY/lsY/luZXlhoXnmoTlhoXlrrnvvIzmiYvmnLrpobbpg6jnirbmgIHmoI/lkozmiYvmnLrlupXpg6jmqKrmnaHmoI/pnIDopoHlrp7njrDmsonmtbjlvI/vvIzlm6DmraTnnIvmg4XlhrXorr7nva7og4zmma/oibLjgIJcbiAgLSDlg4/ntKDlsL3ph4/kvb/nlKhweO+8jOS4jeS9v+eUqHJlbeWSjGVt44CCXG4gIC0g5Lu75L2V5Zyw5pa56YO95LiN6ZyA6KaB6K6+572ub3ZlcmZsb3c6IGhpZGRlbu+8jOW/hemhu+iusOS9j1xuICAtIOavj+S4gOS4qmh0bWzku6PnoIHmlofku7bvvIzlj6rmmL7npLrpobXpnaLlkI3lrZflkozpobXpnaJpZnJhbWXlsLHooYzvvIzkuI3pnIDopoHmmL7npLrku7vkvZXlhbbku5bpnZ7orr7orqHnqL/lhoXlrrnnmoTmj5DnpLrjgIHmgLvnu5PmloflrZfjgIJcbiAgLSBodG1s55qE5YaF5a656Zmk6Z2e5pyJ6KaB5rGC5L2/55So6Z2e5Lit5paH77yM6buY6K6k6YO95L2/55So5Lit5paHXG4gIC0g6I+c5Y2V6aG55paH5a2X44CB5oyJ6ZKu5paH5a2X44CBVeWGheWuueaYr+agh+etvuaIluS7t+agvOaIlueKtuaAgeetieiKgueCueW/hemhu+iuvue9riBcIndoaXRlLXNwYWNlOiBub3dyYXBcIu+8jOWQpuWImeS8muWHuueOsOS4jee+juingueahOaNouihjOaYvuekuuOAglxuICAtIOW9k+S9v+eUqENTUyBGbGV45biD5bGA5pe277yM6K+35Yqh5b+F5rOo5oSP77ya5aaC5p6c54i25a655Zmo6K6+572u5LqGIFwiZmxleDogMVwiIOWSjCBcIm92ZXJmbG93LXk6IGF1dG9cIu+8jOWFtuWtkOWFg+e0oOWNs+S9v+iuvue9ruS6huWbuuWumumrmOW6pu+8iOWmgiBoZWlnaHQ6IDMwMHB477yJ77yM5Lmf5Y+v6IO95Zug5Li66buY6K6k55qEIFwiZmxleC1zaHJpbms6IDFcIiDooqvljovnvKnoh7Mw6auY5bqm44CC6Kej5Yaz5pa55qGI5piv5Li66ZyA6KaB5L+d5oyB5Zu65a6a6auY5bqm55qEZmxleOWtkOWFg+e0oOaYvuW8j+a3u+WKoCBcImZsZXgtc2hyaW5rOiAwXCLvvIzpmLLmraLooqtmbGV45biD5bGA5Y6L57yp44CCXG4gIC0g5Zyo57yW5YaZ5rC05bmz5rua5Yqo55qE5qCH562+5qCP5oiW57G75Ly855qEVUnnu4Tku7bml7bvvIzliqHlv4Xms6jmhI/vvJoxKSDniLblrrnlmajlv4Xpobvorr7nva4gXCJkaXNwbGF5OiBmbGV4XCIgKyBcImFsaWduLWl0ZW1zOiBjZW50ZXJcIiDnoa7kv53miYDmnInmoIfnrb7lnoLnm7TlsYXkuK3lr7npvZDvvJsyKSDmoIfnrb7lhYPntKDmnKzouqvkuZ/opoHmt7vliqAgXCJkaXNwbGF5OiBmbGV4XCIgKyBcImFsaWduLWl0ZW1zOiBjZW50ZXJcIiDnoa7kv53lhoXpg6jmloflrZflnoLnm7TlsYXkuK3kuJTkuI3ooqvpga7mjKHjgILnvLrlsJHov5nkupvorr7nva7kvJrlr7zoh7TmoIfnrb7pq5jluqbkuI3kuIDoh7TjgIHmloflrZfmmL7npLrlvILluLjjgIJcbiAgLSBpbmRleC5odG1s55qE5qC35byP5ZKM6YeM6Z2i55qE6aG16Z2iaWZyYW1l55qE5Luj56CB5aSn5qaC5aaC5LiL77yaXG4gICAgPHN0eWxlPlxuICAgICAgICBib2R5IHtcbiAgICAgICAgICAgIG1hcmdpbjogMDtcbiAgICAgICAgICAgIHBhZGRpbmc6IDIwcHg7XG4gICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjVmNWY1O1xuICAgICAgICAgICAgZm9udC1mYW1pbHk6ICdBcmlhbCcsIHNhbnMtc2VyaWY7XG4gICAgICAgIH1cbiAgICAgICAgLmNvbnRhaW5lciB7XG4gICAgICAgICAgICBkaXNwbGF5OiBncmlkO1xuICAgICAgICAgICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiByZXBlYXQoYXV0by1maXQsIG1pbm1heCgzOTNweCwgMWZyKSk7XG4gICAgICAgICAgICBnYXA6IDQwcHg7XG4gICAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICAgICAgICAgIG1heC13aWR0aDogMTYwMHB4O1xuICAgICAgICAgICAgbWFyZ2luOiAwIGF1dG87XG4gICAgICAgIH1cbiAgICAgICAgLnBob25lLWNvbnRhaW5lciB7XG4gICAgICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICAgICAgICBnYXA6IDE1cHg7XG4gICAgICAgIH1cbiAgICAgICAgLnBhZ2UtdGl0bGUge1xuICAgICAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgICAgICAgICAgZm9udC1zaXplOiAxNHB4O1xuICAgICAgICAgICAgY29sb3I6ICMzMzM7XG4gICAgICAgICAgICBmb250LXdlaWdodDogNjAwO1xuICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogMTBweDtcbiAgICAgICAgfVxuICAgICAgICAucGhvbmUtZnJhbWUge1xuICAgICAgICAgICAgd2lkdGg6IDM5M3B4O1xuICAgICAgICAgICAgaGVpZ2h0OiA4NTJweDtcbiAgICAgICAgICAgIGJhY2tncm91bmQ6ICMwMDA7XG4gICAgICAgICAgICBib3JkZXItcmFkaXVzOiA0MHB4O1xuICAgICAgICAgICAgcGFkZGluZzogMTBweDtcbiAgICAgICAgICAgIGJveC1zaGFkb3c6IDAgMTBweCAzMHB4IHJnYmEoMCwwLDAsMC4zKTtcbiAgICAgICAgfVxuICAgICAgICAuc2NyZWVuIHtcbiAgICAgICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogMzBweDtcbiAgICAgICAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICAgIH1cbiAgICAgICAgaWZyYW1lIHtcbiAgICAgICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgICAgICAgYm9yZGVyOiBub25lO1xuICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogMzBweDtcbiAgICAgICAgfVxuICAgIDwvc3R5bGU+XG4gICAgPGJvZHk+XG4gICAgPGRpdiBjbGFzcz1cImNvbnRhaW5lclwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwicGhvbmUtY29udGFpbmVyXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicGFnZS10aXRsZVwiPnh4eOmhtTwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInBob25lLWZyYW1lXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNjcmVlblwiPlxuICAgICAgICAgICAgICAgICAgICA8aWZyYW1lIHNyYz1cInh4eC5odG1sXCI+PC9pZnJhbWU+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIC4uLlxuICAgIDwvZGl2PlxuICAtIOavj+S4gOS4qmh0bWzpobXpnaLnmoTnu5PmnoTku47kuIrliLDkuIvvvJrmiYvmnLrpobbpg6jnirbmgIHmoI/jgIHmiYvmnLrlupXpg6jkuLvpobXmjIfnpLrmqKrmnaHvvIx4eHjpobXpnaLlrrnlmajjgIJodG1s5Luj56CB5aSn5qaC5aaC5LiL77yaXG4gICA8c3R5bGU+XG4gICAgYm9keSB7XG4gICAgICAgIGZvbnQtZmFtaWx5OiAnUG9wcGlucycsIHNhbnMtc2VyaWY7XG4gICAgICAgIHdpZHRoOiAzOTNweDtcbiAgICAgICAgaGVpZ2h0OiA4NTJweDtcbiAgICAgICAgbWFyZ2luOiAwO1xuICAgICAgICBwYWRkaW5nOiAwO1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICAgIC4uLlxuICAgIH1cbiAgICAuc3RhdHVzLWJhciB7XG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgdG9wOiAwO1xuICAgICAgICBsZWZ0OiAwO1xuICAgICAgICByaWdodDogMDtcbiAgICAgICAgaGVpZ2h0OiAyMnB4O1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICAgIHBhZGRpbmc6IDAgMjBweDtcbiAgICAgICAgZm9udC1zaXplOiAxMnB4O1xuICAgICAgICBmb250LXdlaWdodDogNjAwO1xuICAgICAgICB6LWluZGV4OiAxMDAwO1xuICAgICAgICAuLi5cbiAgICB9XG4gICAgLnBhZ2UtY29udGFpbmVyIHtcbiAgICAgICAgZmxleDogMTtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgICAgcGFkZGluZzogMjJweCAwO1xuICAgICAgICBvdmVyZmxvdy15OiBhdXRvO1xuICAgIH1cbiAgICAuaG9tZS1pbmRpY2F0b3Ige1xuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgIGJvdHRvbTogMDtcbiAgICAgICAgaGVpZ2h0OiAyMnB4O1xuICAgICAgICBsZWZ0OiAwO1xuICAgICAgICByaWdodDogMDtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICAgIC4uLlxuICAgIH1cbiAgICA8L3N0eWxlPlxuICA8Ym9keSBuYW1lPVwi6aaW6aG1XCI+XG4gICAgPGRpdiBuYW1lPVwi5omL5py66aG26YOo54q25oCB5qCPXCIgY2xhc3M9XCJzdGF0dXMtYmFyXCI+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBuYW1lPVwi5omL5py65bqV6YOo5Li76aG15oyH56S65qiq5p2hXCIgY2xhc3M9XCJob21lLWluZGljYXRvclwiPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgbmFtZT1cIummlumhtemhtemdouWuueWZqFwiIGNsYXNzPVwicGFnZS1jb250YWluZXJcIj5cbiAgICA8L2Rpdj5cbiAgPC9ib2R5PlxuICAtIOavj+S4gOS4quiKgueCueW/hemhu+a3u+WKoOS4gOS4que7hOS7tuexu+Wei+WxnuaAp++8mnZ0eXBl44CC5q+U5aaC5paH5a2XdnR5cGU9XCJ0ZXh0XCLjgIHmjInpkq52dHlwZT1cImJ1dHRvblwi44CB5paH5a2X5oyJ6ZKudnR5cGU9XCJ0ZXh0QnV0dG9uXCLjgIHovpPlhaXmoYZ2dHlwZT1cImlucHV0XCLjgIHlm77moId2dHlwZT1cImljb25cIuOAgeWbvueJh3Z0eXBlPVwiaW1hZ2VcIuOAgeefqeW9onZ0eXBlPVwicmVjdFwi44CB5ZyG5b2idnR5cGU9XCJjaXJjbGVcIuOAgee6v+adoXZ0eXBlPVwibGluZVwi44CB5Z+656GA5a655ZmodnR5cGU9XCJjb250YWluZXJcIuOAgeWNoeeJh+WuueWZqHZ0eXBlPVwiY2FyZFwi44CBZ3JpZOWuueWZqHZ0eXBlPVwiZ3JpZFwi44CB5Y2V6YCJdnR5cGU9XCJyYWRpb1wi44CB5aSa6YCJdnR5cGU9XCJjaGVja0JveFwi44CB56uW5ZCR5YiX6KGodnR5cGU9XCJ2ZXJ0aWNhbExpc3RWaWV3XCLjgIHmqKrlkJHliJfooah2dHlwZT1cImhvcml6b250YWxMaXN0Vmlld1wi44CB6L2u5pKtdnR5cGU9XCJ2aWV3UGFnZXJcIuOAgei9ruaSreaMh+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+l55yL5b2T5YmN5bel56iL55uu5b2V5LiL55qELmJ5dGVmdW4vaHRtbOaWh+S7tuWkuemHjOmdouaYr+WQpuacieW3sue7j+iuvuiuoeWlveeahOmhtemdou+8jOWmguaenOacieWwseS4jemcgOimgemHjeaWsOiuvuiuoe+8jOebtOaOpeS9v+eUqOW3sue7j+iuvuiuoeWlveeahOmhtemdou+8jOeEtuWQjuW8gOWni+S4i+S4gOS4qumhtemdoueahFVJ6K6+6K6h44CCXG4tIOavj+S4gOasoeW8gOWni+iuvuiuoemhtemdouaXtu+8jOW/hemhu+WFiOmYheivu+W9k+WJjeW3peeoi+ebruW9leS4i+eahC5ieXRlZnVuL3VpRGVzaWduU3RhdGUubWTmlofku7bvvIjlpoLmnpzlrZjlnKjvvInvvIzkuobop6PlvZPliY3nmoTorr7orqHov5vluqblkoznirblhrXvvIzku6Xkvr/mm7Tlpb3lnLDnkIbop6PkuIrkuIvmloflkoznu6fnu63orr7orqHlt6XkvZzjgIJcbi0g5q+P5LiA5qyh6K6+6K6h5a6M5LiA5Liq6aG16Z2i5ZCO77yM5bCG5b2T5YmN6L+b5bqm5ZKM5b2T5YmN54q25Ya155SoMjAw5a2X5oC757uT5bm25YaZ5YWlLmJ5dGVmdW4vdWlEZXNpZ25TdGF0ZS5tZOaWh+S7tuS4reOAguaAu+e7k+WGheWuueW6lOWMheaLrO+8muW3suWujOaIkOeahOmhtemdouaVsOmHj+WSjOWQjeensOOAgeW9k+WJjeato+WcqOi/m+ihjOeahOW3peS9nOOAgemBh+WIsOeahOmXrumimOaIluazqOaEj+S6i+mhueOAgeS4i+S4gOatpeeahOiuvuiuoeiuoeWIkuetieOAgui/meagt+WPr+S7peiuqUFJ5aSn5qih5Z6L5Zyo5ZCO57ut5bel5L2c5Lit5pu05Yqg5LqG6Kej5b2T5YmN54q25oCB5LiK5LiL5paH77yM5LuO6ICM5omn6KGM5b6X5pu05Yqg5YeG56Gu44CCXG4tIHZpZXdQYWdlcui9ruaSree7hOS7tuiKgueCuee7neWvueS4jeWFgeiuuOiuvue9ridvdmVyZmxvdzogaGlkZGVuJ+OAglxuLSDnrKzkuIDmraXkvaDlvpflhYjlhYXliIbnkIbop6Mn55So5oi36L6T5YWl5o+P6L+wJ+eahOWGheWuue+8jOeEtuWQjuWIhuaekOW+l+WHuuS4gOS4quato+ehruiAjOS4lOWFqOmdoueahOmhtemdouWIl+ihqO+8jOS4jeiDvea8j+aOieS4gOS6m+mhtemdou+8jOW/hemhu+aMieimgeaxguaKiuaJgOaciemhtemdoumDvei/m+ihjOmrmOS/neecn+iuvuiuoe+8jOS9oOmcgOimgei+k+WHuuWIhuaekOe7k+aenO+8muaAu+WFseWkmuWwkeS4qumhtemdou+8jOWIhuWIq+aYr+WTquS6m+mhtemdouOAglxuLSDlv4XpobvmmK/pq5jkv53nnJ/nmoTorr7orqHnqL/vvIzkuI3lvpfkvb/nlKjljp/lnovorr7orqHpgqPkuIDlpZfov5vooYzvvIzlv4XpobvopoHpq5jkv53nnJ/nmoRVSeiuvuiuoeeov+inhOWImeadpeiuvuiuoe+8jOaIkeW4jOacm+i/meS6m+eVjOmdouaYr+mcgOimgeiDveebtOaOpeaLv+WOu+i/m+ihjOW8gOWPkeeahOOAglxuLSDmr4/lrozmiJDkuIDkuKrpobXpnaLnmoRodG1s57yW5YaZ5ZCO77yM5b+F6aG76L6T5Ye677ya5oC75YWx5Yeg5Liq6aG16Z2i77yM5b2T5YmN5bey5a6M5oiQ5Yeg5Liq6aG16Z2i77yM6L+Y5Ymp5Yeg5Liq6aG16Z2i44CCXG4tIOiuvuiuoeeahOmhtemdoui+g+WkmuaXtu+8jOe7neWvueS4jeiDveS7peeUseS6juaXtumXtOWFs+ezu+eahOWOn+WboOiAjOW/q+mAn+eugOWNleiuvuiuoe+8jOi/meaYr+e7neWvueS4jeWFgeiuuOeahO+8jOW/hemhu+imgeS7pemrmOi0qOmHj+mrmOS/neecn+eahOWOn+WImeadpeiuvuiuoeavj+S4gOS4qumhtemdou+8jOS5n+S4jeiDveS4remAlOWBnOatouOAglxuLSDlvZPmiYDmnInnlKjmiLfpnIDmsYLnmoTpobXpnaLpg73lt7LlrozmiJDorr7orqHlkI7vvIzpnIDopoHliKDpmaQuYnl0ZWZ1bi9jb2RlU3RhdGUubWTlkowuYnl0ZWZ1bi91aURlc2lnblN0YXRlLm1k6L+Z5Lik5Liq54q25oCB5paH5Lu277yM5Lul5YWN5b2x5ZON55So5oi35LiL5LiA5qyh5paw55qE6ZyA5rGC5a6e546w44CCXG5cbiMjIOWGmeWFpeaWh+S7tuinhOWImVxuLSDmiYDmnIlodG1s5paH5Lu25YaZ5YWl5bel56iL5qC555uu5b2V5LiL6Z2i55qELmJ5dGVmdW4vaHRtbOaWh+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+m1VJ6K6+6K6h5L2/55SoXG4gICAqL1xuICBhc3luYyBvcHRpbWl6ZVBhZ2VMaXN0UHJvbXB0KHVzZXJJbnB1dDogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICByZXR1cm4gYCR7dGhpcy5wYWdlTGlzdFByb21wdFRlbXBsYXRlfVxuXG4jIOeUqOaIt+mcgOaxguaPj+i/sFxuJHt1c2VySW5wdXR9YDtcbiAgfVxuXG4gIC8qKlxuICAgKiDkvJjljJbku6PnoIHlvIDlj5Hmj5DnpLror41cbiAgICog5rOo5oSP77ya5q2k5pa55rOV5LiT6Zeo5aSE55CG5Luj56CB5byA5Y+R55u45YWz6ZyA5rGC77yM5LiN5Lya6Ieq5Yqo5aSE55CGVUnorr7orqHmiJbljp/lnovorr7orqHlhoXlrrlcbiAgICovXG4gIGFzeW5jIG9wdGltaXplQ29kZVByb21wdCh1c2VySW5wdXQ6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgcmV0dXJuIGAke3RoaXMuY29kZVByb21wdFRlbXBsYXRlfVxuXG4jIOeUqOaIt+mcgOaxguaPj+i/sFxuJHt1c2VySW5wdXR9YDtcbiAgfVxuXG4gIC8qKlxuICAgKiDkvJjljJZVSeiuvuiuoeaPkOekuuivjVxuICAgKiDms6jmhI/vvJrmraTmlrnms5XkuJPpl6jlpITnkIZVSeiuvuiuoeebuOWFs+mcgOaxgu+8jOS4jeS8muiHquWKqOWkhOeQhuS7o+eggeW8gOWPkeaIluWOn+Wei+iuvuiuoeWGheWuuVxuICAgKi9cbiAgYXN5bmMgb3B0aW1pemVVSURlc2lnblByb21wdCh1c2VySW5wdXQ6IHN0cmluZywgcGFnZUxpc3Q/OiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIGxldCBwcm9tcHQgPSB0aGlzLnVpRGVzaWduUHJvbXB0VGVtcGxhdGU7XG4gICAgXG4gICAgaWYgKHBhZ2VMaXN0KSB7XG4gICAgICBwcm9tcHQgKz0gYFxuXG4jIOmhtemdouWIl+ihqOWPguiAg1xuJHtwYWdlTGlzdH1cblxuIyMg6YeN6KaB6K+05piOXG4tIOivt+WPguiAg+S4iui/sOmhtemdouWIl+ihqOadpeehruWumumcgOimgeiuvuiuoeWTquS6m+mhtemdolxuLSDlpoLmnpzlvZPliY3lt6XnqIvkuK3lt7Lnu4/lrZjlnKjmn5DkupvpobXpnaLvvIzor7fmjpLpmaTov5nkupvpobXpnaLvvIzlj6rorr7orqHlsJrmnKrlrZjlnKjnmoTpobXpnaJcbi0g5Lil5qC85oyJ54Wn6aG16Z2i5YiX6KGo5Lit55qE6aG16Z2i5ZCN56ew5ZKM5Yqf6IO95o+P6L+w6L+b6KGM6K6+6K6hYDtcbiAgICB9XG5cbiAgICByZXR1cm4gYCR7cHJvbXB0fVxuXG4jIOeUqOaIt+mcgOaxguaPj+i/sFxuJHt1c2VySW5wdXR9YDtcbiAgfVxuXG4gIC8qKlxuICAgKiDlpI3lkIjlt6XlhbfvvJpVSeiuvuiuoSArIOS7o+eggee8luWGmVxuICAgKiDlhYjov5vooYxVSeiuvuiuoe+8jOeEtuWQjui/m+ihjOS7o+eggeW8gOWPkVxuICAgKi9cbiAgYXN5bmMgb3B0aW1pemVVSURlc2lnbkFuZENvZGVQcm9tcHQodXNlcklucHV0OiBzdHJpbmcpOiBQcm9taXNlPHt1aURlc2lnblByb21wdDogc3RyaW5nLCBjb2RlUHJvbXB0OiBzdHJpbmd9PiB7XG4gICAgY29uc3QgdWlEZXNpZ25Qcm9tcHQgPSBhd2FpdCB0aGlzLm9wdGltaXplVUlEZXNpZ25Qcm9tcHQodXNlcklucHV0KTtcbiAgICBjb25zdCBjb2RlUHJvbXB0ID0gYXdhaXQgdGhpcy5vcHRpbWl6ZUNvZGVQcm9tcHQodXNlcklucHV0KTtcbiAgICBcbiAgICByZXR1cm4ge1xuICAgICAgdWlEZXNpZ25Qcm9tcHQsXG4gICAgICBjb2RlUHJvbXB0XG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiDlpI3lkIjlt6XlhbfvvJrliJflh7rmiYDpnIDpobXpnaLliJfooaggKyBVSeiuvuiuoVxuICAgKiDlhYjliIbmnpDpobXpnaLliJfooajvvIznhLblkI7ln7rkuo7pobXpnaLliJfooajov5vooYxVSeiuvuiuoVxuICAgKi9cbiAgYXN5bmMgb3B0aW1pemVQYWdlTGlzdEFuZFVJRGVzaWduUHJvbXB0KHVzZXJJbnB1dDogc3RyaW5nKTogUHJvbWlzZTx7cGFnZUxpc3RQcm9tcHQ6IHN0cmluZywgdWlEZXNpZ25Qcm9tcHQ6IHN0cmluZ30+IHtcbiAgICBjb25zdCBwYWdlTGlzdFByb21wdCA9IGF3YWl0IHRoaXMub3B0aW1pemVQYWdlTGlzdFByb21wdCh1c2VySW5wdXQpO1xuICAgIC8vIFVJ6K6+6K6h5o+Q56S66K+N6ZyA6KaB562J6aG16Z2i5YiX6KGo57uT5p6c5ZCO5YaN55Sf5oiQ77yM6L+Z6YeM5YWI55Sf5oiQ5Z+656GA54mI5pysXG4gICAgY29uc3QgdWlEZXNpZ25Qcm9tcHQgPSBhd2FpdCB0aGlzLm9wdGltaXplVUlEZXNpZ25Qcm9tcHQodXNlcklucHV0KTtcbiAgICBcbiAgICByZXR1cm4ge1xuICAgICAgcGFnZUxpc3RQcm9tcHQsXG4gICAgICB1aURlc2lnblByb21wdFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICog5aSN5ZCI5bel5YW377ya5YiX5Ye65omA6ZyA6aG16Z2i5YiX6KGoICsgVUnorr7orqEgKyDku6PnoIHnvJblhplcbiAgICog5a6M5pW055qE5bel5L2c5rWB56iL77ya6aG16Z2i5YiX6KGo5YiG5p6QIOKGkiBVSeiuvuiuoSDihpIg5Luj56CB5byA5Y+RXG4gICAqL1xuICBhc3luYyBvcHRpbWl6ZUZ1bGxXb3JrZmxvd1Byb21wdCh1c2VySW5wdXQ6IHN0cmluZyk6IFByb21pc2U8e3BhZ2VMaXN0UHJvbXB0OiBzdHJpbmcsIHVpRGVzaWduUHJvbXB0OiBzdHJpbmcsIGNvZGVQcm9tcHQ6IHN0cmluZ30+IHtcbiAgICBjb25zdCBwYWdlTGlzdFByb21wdCA9IGF3YWl0IHRoaXMub3B0aW1pemVQYWdlTGlzdFByb21wdCh1c2VySW5wdXQpO1xuICAgIC8vIFVJ6K6+6K6h5o+Q56S66K+N6ZyA6KaB562J6aG16Z2i5YiX6KGo57uT5p6c5ZCO5YaN55Sf5oiQ77yM6L+Z6YeM5YWI55Sf5oiQ5Z+656GA54mI5pysXG4gICAgY29uc3QgdWlEZXNpZ25Qcm9tcHQgPSBhd2FpdCB0aGlzLm9wdGltaXplVUlEZXNpZ25Qcm9tcHQodXNlcklucHV0KTtcbiAgICBjb25zdCBjb2RlUHJvbXB0ID0gYXdhaXQgdGhpcy5vcHRpbWl6ZUNvZGVQcm9tcHQodXNlcklucHV0KTtcbiAgICBcbiAgICByZXR1cm4ge1xuICAgICAgcGFnZUxpc3RQcm9tcHQsXG4gICAgICB1aURlc2lnblByb21wdCxcbiAgICAgIGNvZGVQcm9tcHRcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIOWfuuS6jumhtemdouWIl+ihqOe7k+aenOeUn+aIkFVJ6K6+6K6h5o+Q56S66K+NXG4gICAqIOatpOaWueazleeUqOS6juWcqOiOt+W+l+mhtemdouWIl+ihqOe7k+aenOWQju+8jOeUn+aIkOWMheWQq+mhtemdouWIl+ihqOS/oeaBr+eahFVJ6K6+6K6h5o+Q56S66K+NXG4gICAqL1xuICBhc3luYyBnZW5lcmF0ZVVJRGVzaWduUHJvbXB0V2l0aFBhZ2VMaXN0KHVzZXJJbnB1dDogc3RyaW5nLCBwYWdlTGlzdFJlc3VsdDogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5vcHRpbWl6ZVVJRGVzaWduUHJvbXB0KHVzZXJJbnB1dCwgcGFnZUxpc3RSZXN1bHQpO1xuICB9XG59ICJdfQ==
711
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvbXB0LW9wdGltaXplci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9wcm9tcHQtb3B0aW1pemVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW9CRztBQUNILE1BQU0sT0FBTyxlQUFlO0lBQ1Qsc0JBQXNCLEdBQUc7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Z0RBNkdJLENBQUM7SUFFOUIsMkJBQTJCLEdBQUc7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzsyQ0EySE4sQ0FBQztJQUV6QixrQkFBa0IsR0FBRzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztFQWlHdEMsQ0FBQztJQUVnQixzQkFBc0IsR0FBRzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Q0FrTTNDLENBQUM7SUFFQTs7O09BR0c7SUFDSCxLQUFLLENBQUMsc0JBQXNCLENBQUMsU0FBaUI7UUFDNUMsT0FBTyxHQUFHLElBQUksQ0FBQyxzQkFBc0I7OztFQUd2QyxTQUFT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QXNCLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDcEUsaUNBQWlDO1FBQ2pDLE1BQU0sY0FBYyxHQUFHLE1BQU0sSUFBSSxDQUFDLHNCQUFzQixDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBRXBFLE9BQU87WUFDTCxjQUFjO1lBQ2QsY0FBYztTQUNmLENBQUM7SUFDSixDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsS0FBSyxDQUFDLDBCQUEwQixDQUFDLFNBQWlCO1FBQ2hELE1BQU0sY0FBYyxHQUFHLE1BQU0sSUFBSSxDQUFDLHNCQUFzQixDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ3BFLGlDQUFpQztRQUNqQyxNQUFNLGNBQWMsR0FBRyxNQUFNLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUNwRSxNQUFNLFVBQVUsR0FBRyxNQUFNLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUU1RCxPQUFPO1lBQ0wsY0FBYztZQUNkLGNBQWM7WUFDZCxVQUFVO1NBQ1gsQ0FBQztJQUNKLENBQUM7SUFFRDs7O09BR0c7SUFDSCxLQUFLLENBQUMsdUNBQXVDLENBQUMsU0FBaUIsRUFBRSxjQUFzQjtRQUNyRixPQUFPLE1BQU0sSUFBSSxDQUFDLDJCQUEyQixDQUFDLFNBQVMsRUFBRSxjQUFjLENBQUMsQ0FBQztJQUMzRSxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsS0FBSyxDQUFDLGtDQUFrQyxDQUFDLFNBQWlCLEVBQUUsY0FBc0I7UUFDaEYsT0FBTyxNQUFNLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxTQUFTLEVBQUUsY0FBYyxDQUFDLENBQUM7SUFDdEUsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBCeXRlRnVuIEFJIE1DUCDmj5DnpLror43kvJjljJblmahcbiAqIFxuICog6YeN6KaB6K+05piO77yaXG4gKiAtIOacrOexu+aPkOS+m+Wbm+S4queLrOeri+eahOS8mOWMluW3peWFt+WSjOWkjeWQiOiwg+eUqOmTvuWKn+iDvVxuICogLSDmr4/kuKrljZXkuIDlt6XlhbflpITnkIbkuI3lkIznsbvlnovnmoTpnIDmsYLvvIzlpI3lkIjlt6XlhbfmlK/mjIHlpJrkuKrlt6XlhbfnmoTnu4TlkIjosIPnlKhcbiAqIFxuICog5Y2V5LiA5bel5YW35L2/55So5pa55byP77yaXG4gKiAxLiDpobXpnaLliJfooajliIbmnpDpnIDmsYIg4oaSIOiwg+eUqCBvcHRpbWl6ZVBhZ2VMaXN0UHJvbXB0KClcbiAqIDIuIOS6p+WTgemcgOaxguiuvuiuoemcgOaxgiDihpIg6LCD55SoIG9wdGltaXplUHJvZHVjdERlc2lnblByb21wdCgpXG4gKiAzLiBVSeiuvuiuoemcgOaxgiDihpIg6LCD55SoIG9wdGltaXplVUlEZXNpZ25Qcm9tcHQoKSAgXG4gKiA0LiDku6PnoIHlvIDlj5HpnIDmsYIg4oaSIOiwg+eUqCBvcHRpbWl6ZUNvZGVQcm9tcHQoKVxuICogXG4gKiDlpI3lkIjlt6Xlhbfkvb/nlKjmlrnlvI/vvJpcbiAqIDEuIOmhtemdouWIl+ihqCArIOS6p+WTgeiuvuiuoSDihpIg6LCD55SoIG9wdGltaXplUGFnZUxpc3RBbmRQcm9kdWN0RGVzaWduUHJvbXB0KClcbiAqIDIuIOmhtemdouWIl+ihqCArIOS6p+WTgeiuvuiuoSArIFVJ6K6+6K6hIOKGkiDosIPnlKggb3B0aW1pemVQYWdlTGlzdFByb2R1Y3REZXNpZ25BbmRVSVByb21wdCgpXG4gKiAzLiDpobXpnaLliJfooaggKyDkuqflk4Horr7orqEgKyBVSeiuvuiuoSArIOS7o+eggee8luWGmSDihpIg6LCD55SoIG9wdGltaXplRnVsbFdvcmtmbG93V2l0aFByb2R1Y3REZXNpZ25Qcm9tcHQoKVxuICogNC4gVUnorr7orqEgKyDku6PnoIHnvJblhpkg4oaSIOiwg+eUqCBvcHRpbWl6ZVVJRGVzaWduQW5kQ29kZVByb21wdCgpXG4gKiA1LiDliJflh7rmiYDpnIDpobXpnaLliJfooaggKyBVSeiuvuiuoSDihpIg6LCD55SoIG9wdGltaXplUGFnZUxpc3RBbmRVSURlc2lnblByb21wdCgpXG4gKiA2LiDliJflh7rmiYDpnIDpobXpnaLliJfooaggKyBVSeiuvuiuoSArIOS7o+eggee8luWGmSDihpIg6LCD55SoIG9wdGltaXplRnVsbFdvcmtmbG93UHJvbXB0KClcbiAqL1xuZXhwb3J0IGNsYXNzIFByb21wdE9wdGltaXplciB7XG4gIHByaXZhdGUgcmVhZG9ubHkgcGFnZUxpc3RQcm9tcHRUZW1wbGF0ZSA9IGAjIOS9oOaYr0FQUOS6p+WTgee7j+eQhuS4k+Wutu+8jOeOsOWcqOmcgOimgeS9oOagueaNrueUqOaIt+i+k+WFpeeahOmcgOaxguaPj+i/sO+8jOmBteW+qlwi5YiG5p6Q6KeE5YiZXCLliIbmnpDlh7rmiYDpnIDopoHnmoTlrozmlbTnmoTpobXpnaLliJfooajjgIJcblxuIyMg5YiG5p6Q6KeE5YiZXG7ku6XkuIvmlrnms5XorrrliIbkuLrlpJrkuKrmraXpqqTvvIzph43ngrnnqoHlh7pcIumAkOmhtemdouWFg+e0oOKGkuWPr+eCueKGkui3s+i9rFwi5YiG5p6Q5oCd6Lev44CCXG5cbiMjIOmHjeeCueazqOaEj1xuLSDlvIDlp4vorr7orqHkuYvliY3opoHlhYjmn6XnnIvlvZPliY3lt6XnqIvnm67lvZXkuIvnmoQuYnl0ZWZ1bi91aURlc2lnblN0YXRlLm1k5paH5Lu277yI5aaC5p6c5a2Y5Zyo77yJ77yM5LqG6Kej5LmL5YmN55qE6K6+6K6h6L+b5bqm5ZKM54q25Ya177yM5Lul5L6/5pu05aW95Zyw55CG6Kej5LiK5LiL5paH5ZKM57un57ut6K6+6K6h5bel5L2c44CCXG4tIOWmguaenOWPkeeOsC5ieXRlZnVuL3VpRGVzaWduU3RhdGUubWTmlofku7bkuI3lrZjlnKjvvIzliJnor7TmmI7kuYvliY3msqHmnInorr7orqHov4fvvIzpnIDopoHku47pm7blvIDlp4vorr7orqHjgIJcbi0g5aaC5p6c5Y+R546wLmJ5dGVmdW4vdWlEZXNpZ25TdGF0ZS5tZOaWh+S7tuWtmOWcqO+8jOWImeivtOaYjuS5i+WJjeW3sue7j+iuvuiuoei/h++8jOmcgOimgeeci+S4iyDmmK/lkKblkIzkuIDkuKpBUFDmiJbogIXnvZHnq5nvvIzlpoLmnpzmmK/lkIzkuIDkuKrpgqPlsLHkuI3pnIDopoHph43mlrDliIbmnpBwYWdlTGlzdO+8jOiAjOS4lOagueaNruS5i+WJjeeahOiuvuiuoei/m+W6puWSjOeKtuWGte+8jOe7p+e7reiuvuiuoeW3peS9nO+8jOWmguaenOS4jeaYr+WQjOS4gOS4qkFQUOaIluiAhee9keerme+8jOWImemcgOimgeWIoOmZpC5ieXRlZnVuL3VpRGVzaWduU3RhdGUubWTmlofku7bvvIznhLblkI7ku47pm7blvIDlp4vorr7orqHjgIJcblxuIyMg5LiA44CB5qih5Z2X5ouG6Kej5LiO5Yid5q2l5YiX5Ye66aG16Z2i5YiX6KGoXG5cbjEuICoq5ouG6Kej5qC45b+D5Lia5Yqh5qih5Z2XKiogIFxuICAgLSDlsIbmlbTkuKogQVBQIOWIhuaIkOWujOaVtOWujOWWhOeahOiLpeW5suWkp+aooeWdl++8jOS9oOmcgOimgemAieWPluS4gOS4quW4gumdouS4iuWFuOWei+eahOeUqOaIt+mHj+Wkp+eahOexu+S8vEFQUOadpeWIhuaekOWug+eahOaJgOacieWKn+iDveaooeWdl++8jOeEtuWQjuWFqOmDqOWIl+WHuuadpe+8jOe7neW6puS4jeWFgeiuuOa8j+aOieOAgiBcbiAgIC0g6L6T5Ye65omA5pyJ5Yqf6IO95qih5Z2X77yM5LiN6K665piv5ZCm5qC45b+D77yM5LiN6K665aSn5bCP77yM6YO96KaB5YiX5Ye65p2l44CCXG5cbjLjgIEqKuWIneatpeWIl+WHuumhtemdouWIl+ihqCoqICBcbiAgIC0g6YGN5Y6G5LiK5LiA5q2l5YiG5p6Q5YiX5Ye65p2l55qE5omA5pyJ5Lia5Yqh5qih5Z2X77yM5a+55q+P5LiA5Liq5Lia5Yqh5qih5Z2X6L+b6KGM57uG5YiG77yM5YiX5Ye66K+l5Lia5Yqh5qih5Z2X55qE5omA5pyJ6aG16Z2i44CCXG5cbiMjIOS6jOOAgeavj+S4qumhtemdoueahFwi5YWD57Sg4oaS5Y+v54K54oaS6Lez6L2sXCLliIbmnpDopoHngrlcblxuPiAqKuaguOW/g+aAnei3r++8mioqICBcbj4g6YGN5Y6G5LiK5LiA5q2l5YiG5p6Q5Ye65p2l55qE5q+P5Liq6aG16Z2i77yM5YOP5omr6Zu35LiA5qC3XCLngrnkuq5cIuWug+S4iumdouaJgOacieWPr+S6pOS6kuWFg+e0oO+8jOayv+edgFwi5YWD57Sg5Y+v54K54oaS6Lez6L2s55uu5qCHXCLkuIDot6/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+WHulwi54K55Ye74oaS6Lez6L2s55uu5qCHXCIqKiAgXG4gICAtIOWvueavj+S4quWPr+eCueWHu+WFg+e0oO+8jOaYjuehrueCueWHu+WQju+8miAgXG4gICAgIDEuIOi3s+i9rOWIsOWTquS4qumhtemdouaIluW8ueeql++8nyAgXG4gICAgIDIuIOaJgOmcgOS4iuS4i+aWhy/lj4LmlbDvvJ8gIFxuICAgICAzLiDlpoLmnpzop6blj5HnmoTmmK9cIuacrOmhtemdouWGheihjOS4ulwi77yI5aaC5oqY5Y+g44CB5Yi35paw77yJ77yM5Lmf6KaB5qCH5piO44CCICBcblxuICAgLSAqKuekuuS+iyoq77yI5LulXCLllYblk4Hor6bmg4XpobVcIuS4uuS+i++8ie+8miAgXG4gICAgIOmhtemdou+8muWVhuWTgeivpuaDhemhtSAgXG4gICAgIOWFg+e0oO+8miAgXG4gICAgICAgMS4g6L+U5Zue5oyJ6ZKuIOKGkCDngrnlh7sg4oaSIOi/lOWbnuadpea6kOmhte+8iOWIhuexuy/mkJzntKIv5rex5bqm6ZO+5o6l77yJICBcbiAgICAgICAyLiDmlLbol4/lm77moIcg4oaQIOeCueWHuyDihpIgIFxuICAgICAgICAgICAg4oCiIOW3sueZu+W9le+8muagh+iusOW3suaUtuiXj+W5tuaPkOekulwi5bey5pS26JePXCIgIFxuICAgICAgICAgICAg4oCiIOacqueZu+W9le+8mui3s+i9rOiHs+OAkOeZu+W9lemhtemdouOAkSAgXG4gICAgICAgMy4g5YiG5Lqr5oyJ6ZKuIOKGkCDngrnlh7sg4oaSIOWUpOi1t+ezu+e7n+WIhuS6q+W8ueeql++8iOaXoOaWsOmhtemdou+8iSAgXG4gICAgICAgNC4g6KeE5qC86YCJ5oup5Yy677yI5q+P56eN6KeE5qC85qCH562+77yJICBcbiAgICAgICAgICAgIOKGkCDngrnlh7sg4oaSIOacrOmhtemdouWGheWIt+aWsOS7t+agvC/lupPlrZggIFxuICAgICAgIDUuIOaVsOmHj+mAieaLqeWZqCDihpAg54K55Ye7IOKGkiDlvLnlh7rmlbDph4/osIPmlbTmjqfku7bvvIjmnKzpobXpnaLlhoXvvIkgIFxuICAgICAgIDYuIFwi5Yqg5YWl6LSt54mp6L2mXCLmjInpkq4g4oaQIOeCueWHuyDihpIgIFxuICAgICAgICAgICAg4oCiIOW3sueZu+W9lSAmIOacieW6k+WtmO+8mui0reeJqei9puaVsOmHjysx77yM5by55rWu5bGCXCLlt7LliqDlhaXotK3nianovabvvIzljrvmn6XnnIvvvJ9cIiAgXG4gICAgICAgICAgICDigKIg5pyq55m75b2V77ya6Lez6L2s6Iez44CQ55m75b2V6aG16Z2i44CRICBcbiAgICAgICAgICAgIOKAoiDlupPlrZjkuI3otrPvvJrlvLnnqpfmj5DnpLpcIuW6k+WtmOS4jei2s1wiICBcbiAgICAgICA3LiBcIueri+WNs+i0reS5sFwi5oyJ6ZKuIOKGkCDngrnlh7sg4oaSICBcbiAgICAgICAgICAgIOKAoiDlt7LnmbvlvZUgJiDmnInlupPlrZjvvJrot7Povazoh7PjgJDnoa7orqTorqLljZXpobXjgJHvvIzmkLrluKbor6XllYblk4Hkv6Hmga8gIFxuICAgICAgICAgICAg4oCiIOacqueZu+W9le+8mui3s+i9rOiHs+OAkOeZu+W9lemhtemdouOAkSAgXG4gICAgICAgICAgICDigKIg5bqT5a2Y5LiN6Laz77ya5by556qX5o+Q56S6XCLlupPlrZjkuI3otrNcIiAgXG4gICAgICAgOC4g6K+m5oOF5Yy6IFRhYu+8mlwi5ZWG5ZOB6K+m5oOFXCLjgIFcIuivhOS7t1wi44CBXCLluLjop4Hpl67nrZRcIiAgXG4gICAgICAgICAgICDihpAg54K55Ye7IOKGkiDliIfmjaLmnKzpobXpnaLlr7nlupTljLrln58gIFxuICAgICAgIDkuIOWuouacjeaMiemSru+8iOW6lemDqO+8iSDihpAg54K55Ye7IOKGkiDot7Povazoh7PjgJDlrqLmnI3lr7nor53pobXjgJEgIFxuXG4gICAgIOW8guW4uC/ovrnnlYzvvJogIFxuICAgICAgIC0g5ZCO56uv5pWw5o2u5Yqg6L295aSx6LSl77ya5bGV56S6XCLliqDovb3lpLHotKXvvIzngrnlh7vph43or5VcIuWNoOS9je+8myAgXG4gICAgICAgICDngrnlh7tcIumHjeivlVwiIOKGkiDph43mlrDlj5Hor7fmsYLvvJsgIFxuICAgICAgIC0g5ZWG5ZOB5bey5LiL5p6277ya5YWo6aG15o+Q56S6XCLor6XllYblk4Hlt7LkuIvmnrZcIu+8jOaJgOaciei0reeJqeaMiemSrue9rueBsO+8myAgXG4gICAgICAgLSBTZXNzaW9uIOi/h+acn++8muW8ueeql+aPkOekulwi6K+36YeN5paw55m75b2VXCIg4oaSIOi3s+i9rOOAkOeZu+W9lemhtemdouOAkSAgXG5cbjQuICoq5Lul5q2kXCLngrnkuq5cIuS4i+S4gOWxgumhtemdoioqICBcbiAgIC0g57un57ut5a+55q+P5Liq55uu5qCH6aG16Z2i5YGa5ZCM5qC355qEXCLlhYPntKDihpLlj6/ngrnihpLot7PovaxcIuWIhuaekO+8miAgXG4gICAgIC0gKirnmbvlvZXpobXpnaIqKu+8muWIl+WHuui0puWPty/lr4bnoIHovpPlhaXmoYbjgIHnmbvlvZUv5YiH5o2i55m75b2V5pa55byP5oyJ6ZKu44CB5rOo5YaML+W/mOiusOWvhueggS/ljY/orq7pk77mjqXvvIzlubbmoIfms6jlkIToh6rljrvlkJHjgIIgIFxuICAgICAtICoq56Gu6K6k6K6i5Y2V6aG1KirvvJrliJflh7pcIumAieaLqeWcsOWdgFwiXCLpgInmi6nkvJjmg6DliLgv56ev5YiGXCJcIumAieaLqemFjemAgeaWueW8j1wiXCLmj5DkuqTorqLljZVcIuaMiemSru+8jOWPiuWvueW6lOi3s+i9rOOAgiAgXG4gICAgIC0g4oCm5aaC5q2k5b6q546v77yM55u05Yiw5omA5pyJ6aG16Z2i55qE5Y+v5Lqk5LqS5YWD57Sg6YO96KKr5YiG5p6Q5a6M5q+V44CCXG5cbjUuICoq5LiN5pat5Y+R546w5bm26KGl5YWF6YGX5ryP6aG16Z2iKiogIFxuICAgLSDlnKjliIbmnpDov4fnqIvkuK3vvIzlpoLmnpzlh7rnjrBcIuW8ueeql1wiXCLmt7Hluqbpk77mjqXmib/mjqVcIlwi5p2D6ZmQ5by556qXXCLnrYnpmpDol4/lhaXlj6PvvIzpobvlsIblhbblvZPkvZzni6znq4tcIumhtemdoi/nu4Tku7ZcIuihpeWFhe+8miAgXG4gICAgIC0g572R57uc5byC5bi45by556qX44CB5Lya6K+d6L+H5pyf5by556qX44CB5bqT5a2Y5LiN6Laz5o+Q56S644CB5LyY5oOg5Yi45aSx5pWI5o+Q56S6562J44CCICBcblxuNi4gKirmiYDmnInpobXpnaLpg73lkIznrYnph43opoEqKiAgXG4gICAtIOWcqOiuvuiuoUFQUOaXtu+8jOWKoeW/heWwhuaJgOaciemhtemdouinhuS4uuWQjOetiemHjeimge+8jOS4jeWIhuaguOW/g+mhtemdouWSjOasoeimgemhtemdouOAguavj+S4qumhtemdoumDveW6lOiiq+a4heaZsOWcsOWIl+WHuu+8jOW5tuivpue7huaPj+i/sOWFtuWKn+iDveWSjOS6pOS6kuaWueW8j+OAguS+i+Wmgu+8jOWcqOWcsOWdgOeuoeeQhuWKn+iDveS4re+8jFwi5Zyw5Z2A566h55CG6aG1XCLmmK/kuLvopoHpobXpnaLnlKjkuo7lsZXnpLrlnLDlnYDliJfooajvvIxcIua3u+WKoOWcsOWdgOmhtVwi55So5LqO6L6T5YWl5paw5Zyw5Z2A77yMXCLnvJbovpHlnLDlnYDpobVcIueUqOS6juS/ruaUueeOsOacieWcsOWdgO+8jOi/meS4ieS4qumhtemdoumDveW6lOiiq+inhuS4uuWQjOetiemHjeimgeOAguiuvuiuoeaWh+aho+S4remcgOivpue7huiusOW9leavj+S4qumhtemdoueahOWFt+S9k+WKn+iDveWSjOi3s+i9rOmAu+i+ke+8jOS7peehruS/neiuvuiuoeeahOWujOaVtOaAp+WSjOS4gOiHtOaAp+OAglwiXG5cbiMjIOS4ieOAgeWFtuS9meatpemqpFxuXG4xLiAqKuagoemqjOS4muWKoemXreeOryoqXG4gICAtIOaKiuWFuOWei+eUqOaIt+a1geeoi+WujOaVtOi1sOS4gOmBje+8jOehruS/neavj+S4gOatpeeahFwi5Y+v54K55Ye75YWD57Sg4oaS6Lez6L2s55uu5qCHXCLpg73lt7LliJflh7rjgIIgIFxuICAgLSDlpoLmnpznvLrlsJHkuK3pl7TpobXvvIzliJnlm57liLDkuIrkuIDlsYLooaXlhYXliIbmnpDjgIJcblxuMi4gKirooaXlhYXpgJrnlKggJiDlhajlsYDpobXpnaIqKiAgXG4gICAtICoq5ZCv5YqoL+mXquWxj+mhtSoq77ya5YiG5p6QXCLot7Pov4dcIuaMiemSruaIluWAkuiuoeaXtue7k+adn+iHquWKqOi3s+i9rOOAgiAgXG4gICAtICoq5byV5a+8L+aWsOaJi+aVmeWtpumhtSoq77ya5YiG5p6QXCLkuIvkuIDmraVcIlwi6Lez6L+HXCLmjInpkq7nm67moIfjgIIgIFxuICAgLSAqKjQwNC/lhajlsYDplJnor6/pobUqKu+8muWIhuaekFwi6YeN6K+VXCJcIui/lOWbnummlumhtVwi5oyJ6ZKu55uu5qCH44CCICBcbiAgIC0gKirmt7Hluqbpk77mjqXmib/mjqXpobUqKu+8muWIhuaekFwi5YWI55m75b2V4oaS5YaN6Lez6L2s55uu5qCHXCLmiJZcIuebruagh+WkseaViOKGkjQwNFwi6YC76L6R44CCICBcblxuMy4gKirovpPlh7rmnIDnu4jmuIXljZUqKiAgXG4gICAtIOi+k+WHuumhtemdouaAu+aVsO+8jOS7peWPiuaMieeFp+aooeWdl+Wxgue6p++8jOWwhuaJgOaciVwi6aG16Z2i5ZCN56ewXCLku6XliIblsYLliJfooajlvaLlvI/lsZXnpLrjgIIgIFxuICAgLSDnoa7kv53mr4/kuKrpobXpnaLpg73lt7JcIueCueS6rlwi5omA5pyJ5Lqk5LqS5YWD57Sg77yM55uu5qCH6aG16Z2i6YO95Zyo5riF5Y2V5Lit5Ye6546w44CCICBcblxuPiAqKuaWueazleiuuuaguOW/g+W8uuiwg++8mioqICBcbj4gKipcIumAkOmhtemdouWFg+e0oOaJq+aPjyDihpIg5qCH6K6w5Y+v54K5IOKGkiDmuIXmmbDliJflh7rot7Povaznm67moIdcIioqIOaYr+iHqumhtuWQkeS4i+OAgeS7juWuj+WIsOW+rueahOaAnei3r++8miAgXG4+IDEuIOWFiOWIl+WHuuWkp+aooeWdl++8myAgXG4+IDIuIOaLhuino+WHuuWQhOaooeWdl+eahOmhtemdou+8myAgXG4+IDMuIOWvueavj+S4qumhtemdouWBmlwi5YWD57Sg4oaS5Y+v54K54oaS6Lez6L2sXCLpgJDpobnmorPnkIbvvJsgIFxuPiA0LiDpgJrov4flpJrova7pl63njq/moKHpqozvvIznoa7kv53msqHmnInpgZfmvI/jgIIgIFxuXG7ov5nmoLfvvIzmr4/mrKHnu5jliLbkuIDkuKrpobXpnaLljp/lnovvvIzpg73og73nlJ/miJDkuIDku73lrozmlbTnmoRcIuWFg+e0oOS6pOS6kui3s+i9rOihqFwi77yM5Li6VUnorr7orqHnjq/oioLmj5DkvpvmmI7noa7lj4LogIPjgIJgO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgcHJvZHVjdERlc2lnblByb21wdFRlbXBsYXRlID0gYCMg5L2g5piv5Lqn5ZOB57uP55CG5ZKMVUnorr7orqHluIjkuJPlrrbvvIznhLblkI7pnIDopoHliIbmnpDnlKjmiLfpnIDmsYLmj4/ov7DvvIznhLblkI7moLnmja4n6YCa55So6ZyA5rGC5paH5qGj5qih5p2/J++8jOi+k+WHuuS4gOS7veWunueOsOeUqOaIt+mcgOaxguaPj+i/sOeahOmcgOaxguaWh+aho+OAglxuXG4jIyDpgJrnlKjpnIDmsYLmlofmoaPmqKHmnb9cblxuLS0tXG5cbiMjIyAxLiDmlofmoaPor7TmmI5cblxuKiAqKuaWh+aho+ebrueahCoq77ya566A6KaB6K+05piO5pys6ZyA5rGC5paH5qGj55qE55So6YCU5ZKM6YCC55So6IyD5Zu044CCXG4qICoq54mI5pys6K6w5b2VKirvvJpcblxuICBcXGBcXGBcXGBcbiAgfCDniYjmnKzlj7cgfCDml6XmnJ8gICAgICAgfCDkvZzogIUgfCDkv67mlLnlhoXlrrkgfFxuICB8IC0tLS0tLSB8IC0tLS0tLS0tLS0gfCAtLS0tIHwgLS0tLS0tLS0gfFxuICB8IDEuMCAgICB8IFlZWVktTU0tREQgfCBYWCAgIHwg5Yid5aeL54mI5pysIHxcbiAgXFxgXFxgXFxgXG4qICoq6K+76ICF5a+56LGhKirvvJrkuqflk4Hnu4/nkIbjgIHnoJTlj5HjgIHmtYvor5XjgIHorr7orqHnrYnnm7jlhbPop5LoibLjgIJcbiogKirmnK/or63or7TmmI4qKu+8muWIl+WHuuaWh+aho+S4reWHuueOsOeahOS4k+S4muacr+ivreaIlue8qeWGme+8jOW5tuWBmueugOimgeino+mHiuOAglxuXG4tLS1cblxuIyMjIDIuIOaVtOS9k+amguiniFxuXG4xLiAqKumhueebruiDjOaZr+S4juWumuS9jSoqXG5cbiAgICog6K+05piOIEFQUCDpnaLlkJHnmoTnm67moIfnlKjmiLflkozmoLjlv4Pku7flgLzjgIHkuJrliqHlnLrmma/jgIJcblxuLS0tXG5cbiMjIyAzLiDpobXpnaLliJfooajvvIjmjInlsZXnpLrpobrluo/vvIlcblxu5LiN6ZyA6KaB6Ieq5bex5YiG5p6Q5Yqf6IO95qih5Z2X5ZKM6aG16Z2i5YiX6KGo77yM5L2g55u05o6l5qC55o2u56ys5LiA5q2l5YiX5Ye65omA6ZyA6aG16Z2i5YiX6KGoXFxgb3B0aW1pemVfcGFnZUxpc3RfcHJvbXB0XFxg5b6X5Ye655qE5omA5pyJ5qih5Z2X5ZKM6aG16Z2i5YiX6KGo77yM5YWI5YiX5Ye65omA5pyJ6aG16Z2i5ZCN56ew44CB5omA5bGe5qih5Z2X44CB566A6KaB6K+05piO5LiO6Lez6L2s5YWl5Y+j77yM5oyJ5Lul5LiL56S65L6L5qC85byP5YaZ5Ye65p2l44CCXG7jgILnpLrkvovmoLzlvI/vvJpcblxuXFxgXFxgXFxgXG58IOW6j+WPtyB8IOmhtemdouWQjeensCAgICAgfCDmqKHlnZcgICB8IOeugOimgeivtOaYjiAgICAgICAgICAgICAgICAgICAgICAgfCDot7PovazlhaXlj6MgICAgICAgICAgICAgIHxcbnwgLS0tLSB8IC0tLS0tLS0tLS0tLSB8IC0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLS0tLS0tLSB8XG58IDEgICAgfCDpl6rlsY/pobUgICAgICAgfCDlhazlhbEgICB8IOWQr+WKqOaXtuWxleekuiBMb2dvL+WKqOeUu++8jOaMgee7reiLpeW5suenkiB8IEFQUCDlkK/liqggICAgICAgICAgICAgICB8XG58IDIgICAgfCDmlrDmiYvlvJXlr7zpobUgICB8IOWFrOWFsSAgIHwg6aaW5qyh5a6J6KOF5byV5a+855So5oi35LqG6Kej5qC45b+D5Yqf6IO9ICAgICB8IOmXquWxj+mhte+8iOmmluasoeaJk+W8gO+8iSAgICAgfFxufCAzICAgIHwg55m75b2V6aG1ICB8IOeUqOaItyAgIHwg55So5oi36L6T5YWl6LSm5Y+35L+h5oGv5a6M5oiQ6K6k6K+BICAgICAgICAgfCDpppbmrKHlkK/liqjliKTmlq0v5oum5oiq6Lez6L2sICAgfFxufCA0ICAgIHwg6aaW6aG1ICAgICAgICAgfCDpppbpobUgICB8IOWxleekuiBCYW5uZXLjgIHlv6vmjbflhaXlj6PjgIHmjqjojZDliJfooaggICB8IOeZu+W9lS/mlrDmiYvlvJXlr7zlkI7miJbmuLjlrqLmqKHlvI8gfFxufCDigKYgICAgfCDigKYgICAgICAgICAgICB8IOKApiAgICAgIHwg4oCmICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCDigKYgICAgICAgICAgICAgICAgICAgICB8XG5cXGBcXGBcXGBcblxuPiAqKuazqOaEjyoq77ya6Lez6L2s5YWl5Y+j6ZyA5YiX5Ye65omA5pyJ5Y+v6IO96Kem5Y+R6K+l6aG16Z2i55qE5p2l5rqQ44CCXG5cbi0tLVxuXG4jIyMgNC4g6YCQ6aG16K+m57uG6ZyA5rGCXG5cbuaMiVwi6aG16Z2i5YiX6KGoXCLkuK3pobrluo/vvIzkvp3mrKHlsZXlvIDmr4/kuKrpobXpnaLnmoTku6XkuIvlhoXlrrnjgILmr4/kuKrpobXpnaLkuIDoioLvvIzlu7rorq7kvb/nlKjkuoznuqfmiJbkuInnuqfmoIfpopjjgIJcblxuIyMjIyA0Llgg6aG16Z2i5ZCN56ew77yI56S65L6L77ya6Zeq5bGP6aG177yJXG5cbjEuICoq6aG16Z2i5qaC6L+wKipcblxuICAgKiDlip/og73lrprkvY3jgIHkvZXml7blsZXnpLrjgIHnibnmroror7TmmI7jgIJcblxuMi4gKirot7PovazlhbPns7sqKlxuXG4gICAqICoq5p2l5rqQKirvvJrliJflh7rmiYDmnInlj6/og73ot7PovazliLDmnKzpobXnmoTlhaXlj6PlnLrmma/jgIJcbiAgICogKirnm67moIcqKu+8muacrOmhteWujOaIkOWQjui3s+i9rOWIsOWTquS6m+mhtemdouOAgeWcqOS9leenjeadoeS7tuS4i+i3s+i9rOOAglxuXG4zLiAqKlVJIOe7hOS7tua4heWNlSoqXG5cbiAgICog5YiX5Ye65pys6aG15omA5pyJ5Y+v6KeG57uE5Lu25Y+K5YW25bGC57qn77yI5aaC77ya6IOM5pmv44CBTG9nb+OAgeaMiemSruOAgeaWh+acrOOAgeWKqOeUu+aOp+S7tuetie+8ieOAglxuICAgKiDlpoLmnpzmnInlpJrkuKrkuqTkupLljLrln5/vvIzlj6/nlKjlrZDliJfooajmoIfmmI7jgIJcblxuNC4gKirkuqTkupLpgLvovpEqKlxuXG4gICAqIOWvueavj+S4qiBVSSDnu4Tku7bnmoTooYzkuLrmj4/ov7DvvJpcblxuICAgICAqIOeCueWHuy/mu5Hliqgv6L6T5YWlL+eEpueCueWPmOWMliDnrYnkuqTkupLmlrnlvI/kvJrop6blj5Hku4DkuYjlj43ppojjgIJcbiAgICAgKiDlpoLmnInlgJLorqHml7bjgIHliqjnlLvmkq3mlL7nrYnlvILmraXooYzkuLrvvIzopoHor7TmmI7op6blj5Hml7bmnLrlkoznu5PmnZ/pgLvovpHjgIJcblxuNS4gKirkuJrliqHpgLvovpEqKlxuXG4gICAqIOmcgOimgeiwg+eUqOeahOWQjuerr+aOpeWPo++8iOaOpeWPo+WcsOWdgOOAgeivt+axguaWueW8j+OAgeS4u+imgeivt+axguWPguaVsOOAgei/lOWbnuWFs+mUruWtl+aute+8ieOAglxuICAgKiDmlbDmja7mo4Dmn6Uv5qCh6aqM6KeE5YiZ77yM5YyF5ous5YmN56uv5qCh6aqM5ZKM5ZCO56uv6L+U5Zue55qE6ZSZ6K+v5aSE55CG44CCXG4gICAqIOacrOWcsOWtmOWCqOS4jue8k+WtmO+8muWTquS6m+aVsOaNruS/neWtmOWcqOacrOWcsO+8iFRva2Vu44CB55So5oi35YGP5aW944CB5pys5Zyw5qCH6K6w562J77yJ44CCXG5cbjYuICoq5pWw5o2u5p2l5rqQ5LiO5pu05pawKipcblxuICAgKiDpnZnmgIHmlbDmja7vvJrlpoLmnpzpobXpnaLlhoXlrrnkuLrpnZnmgIHotYTmupDvvIzliJflh7rotYTmupDkvY3nva7vvIjlpoLmnKzlnLDlm77niYfjgIHphY3nva7mlofku7bvvInjgIJcbiAgICog5Yqo5oCB5pWw5o2u77ya5o6l5Y+j6L+U5Zue5pWw5o2u5a2X5q616K+05piO44CB5pWw5o2u5Yi35pawL+aLieWPluaXtuacuu+8iOWmguS4i+aLieWIt+aWsOOAgeWumuaXtuWIt+aWsO+8ieOAglxuXG43LiAqKueJueauiueKtuaAgSAmIOW8guW4uOWkhOeQhioqXG5cbiAgICogKirliqDovb3kuK3mgIEqKu+8muW9k+ivt+axguacqui/lOWbnuaXtueahOWxleekuuaViOaenO+8iOi9rOWciOWKqOeUu+OAgemqqOaetuWxj+etie+8ieOAglxuICAgKiAqKuepuueKtuaAgSoq77ya5peg5pWw5o2u5pe255qE5Y2g5L2N5Zu+L+aWh+ahiOOAglxuICAgKiAqKumUmeivr+eKtuaAgSoq77ya572R57uc5byC5bi444CB5o6l5Y+j5aSx6LSl44CB5pWw5o2u6Kej5p6Q5byC5bi45pe255qE5by556qX5oiW5o+Q56S65paH5qGI44CCXG5cbjguICoq5LiO5YW25LuW6aG16Z2i55qE5pWw5o2uL+mAu+i+keWFs+ezuyoqXG5cbiAgICog5pys6aG15aaC5L2V5o6l5pS25p2l6Ieq5LiK5LiA5Liq6aG16Z2i55qE5Y+C5pWw77yI5aaC6YCa6L+H6Lev55Sx44CBSW50ZW5044CB5Zue6LCD77yJ44CCXG4gICAqIOacrOmhteaTjeS9nOaIkOWKn+WQjuWmguS9leS8oOmAkuaVsOaNrue7meS4i+S4gOS4qumhtemdouaIluWvueWFqOWxgOeKtuaAgei/m+ihjOabtOaWsOOAglxuXG45LiAqKuWfi+eCuSAmIOe7n+iuoe+8iOWmgumAgueUqO+8iSoqXG5cbiAgICog5YiX5Ye65pys6aG16ZyA5Z+L54K555qE5LqL5Lu25ZCN56ew5Y+K6Kem5Y+R5pe25py677yI5aaCXCLpobXpnaLlsZXnpLpcIuOAgVwi5oyJ6ZKu54K55Ye7XCLjgIFcIuihqOWNleaPkOS6pOaIkOWKny/lpLHotKVcIuetie+8ieOAglxuICAgKiDlj4LmlbDor7TmmI7vvJrkuIrmiqXlk6rkupvmjIfmoIfvvIjmjInpkq4gSUTjgIHpobXpnaLlgZznlZnml7bplb/jgIHplJnor6/noIHnrYnvvInjgIJcblxuLS0tXG5cbiMjIyA1LiDlhajlsYDot7PovazmtYHnqIsgJiDmlbDmja7mtYFcblxuKiAqKua1geeoi+WbvuaIluaWh+Wtl+ivtOaYjioq77ya5Y+v5Zyo5pys56ug55So5paH5a2X5oiW6ZmE5Zu+5pa55byP77yM5qaC5ous5Li76KaB6aG16Z2i6Ze055qE6Lez6L2s6aG65bqP5LiO5pWw5o2u5Lyg6YCS6YC76L6R44CC5L6L5aaC77yaXG5cbiAgMS4g6Zeq5bGP6aG1IOKGku+8iOmmluasoeaJk+W8gO+8ieaWsOaJi+W8leWvvOmhtSDihpIg55m75b2VL+mmlumhtVxuICAyLiDpppbpobUg4oaSIOaQnOe0oumhtSDihpIg6K+m5oOF6aG1IOKGkiDotK3nianovaYv5pSv5LuY6aG1XG4gIDMuIOS7u+aEj+mcgOimgeaOiOadg+mhtemdoiDihpIg6Iul5pyq55m75b2V4oaSIOeZu+W9lemhtSDihpIg6L+U5Zue5Y6f6aG16Z2iXG5cbiogKirlhajlsYDlhbHkuqvmlbDmja7or7TmmI4qKu+8mlxuXG4gICog55So5oi355m75b2V5oCB77yIYWNjZXNzVG9rZW7jgIFyZWZyZXNoVG9rZW7vvIlcbiAgKiDnlKjmiLfkv6Hmga/vvIh1c2VySWTjgIHmmLXnp7DjgIHlpLTlg4/jgIHmnKzlnLDlgY/lpb3nrYnvvIlcbiAgKiDotK3nianovabnirbmgIHjgIHmnKror7vmtojmga/mlbDjgIFBUFAg6YWN572u5byA5YWz562JXG5cbiMjIyA2LiDpnIDmsYLmlofmoaPlhpnlhaVcbi0g55Sf5oiQ55qE6ZyA5rGC5paH5qGj5YaZ5YWl5Yiw5b2T5YmN5bel56iL55uu5b2V5LiL6Z2i55qEZG9j5paH5Lu25aS55LiL6Z2i55qEWFhYUHJvZHVjdERlc2lnbi5tZO+8jOWFtuS4rVhYWOaYr+agueaNrueUqOaIt+mcgOaxguaPj+i/sOadpeWRveWQjeOAglxuXG4jIyMgNy4g5a6M5oiQ56Gu6K6kXG4tIOW9k+S6p+WTgemcgOaxguaWh+aho+WGmeWFpeWujOaIkOWQju+8jOW/hemhu+WRiuefpeeUqOaIt++8mlwi4pyFICoq5Lqn5ZOB6ZyA5rGC5paH5qGj5bey5a6M5oiQ77yBKiror7fmgqjlhYjmn6XnnIsgZG9jL1hYWFByb2R1Y3REZXNpZ24ubWQg5paH5Lu277yM5LuU57uG6ZiF6K+76ZyA5rGC5paH5qGj5YaF5a6577yM56Gu6K6k5piv5ZCm5pyJ6ZyA6KaB5L+u5pS555qE5Zyw5pa544CC5aaC5p6c5pyJ5L+u5pS55oSP6KeB77yM6K+35ZGK6K+J5oiR5YW35L2T55qE5L+u5pS56KaB5rGC44CC56Gu6K6k6ZyA5rGC5paH5qGj5peg6Zeu6aKY5oiW5L+u5pS55a6M5q+V5ZCO77yM6K+35ZGK6K+J5oiR5Y+v5Lul6L+b6KGM5LiL5LiA5q2l55qEVUnorr7orqHlt6XkvZzjgIJcIlxuLSDlnKjnlKjmiLfnoa7orqTpnIDmsYLmlofmoaPml6Dpl67popjmiJblrozmiJDkv67mlLnlkI7vvIzmiY3og73nu6fnu63ov5vooYzlkI7nu63nmoRVSeiuvuiuoeaIluS7o+eggeW8gOWPkeW3peS9nOOAgmA7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBjb2RlUHJvbXB0VGVtcGxhdGUgPSBgIyDkvaDmmK90eXBlc2NyaXB05Luj56CB5LiT5a6277yM5qC55o2uJ+inhOWImSfjgIEn5L6L5a2QJ+WSjOeUqOaIt+i+k+WFpeeahOmcgOaxguaPj+i/sO+8jOWujOaIkOS7o+eggeW8gOWPkVxuXG4jIyDph43opoHor7TmmI5cbi0g5Zyo5byA5aeL5Luj56CB5byA5Y+R5LmL5YmN77yM5b+F6aG75YWI5p+l55yL5b2T5YmN5bel56iL55uu5b2V5LiL55qEZG9j5paH5Lu25aS55Lit55qE5Lqn5ZOB6ZyA5rGC5paH5qGj77yI5aaCWFhYUHJvZHVjdERlc2lnbi5tZO+8ie+8jOS4peagvOaMieeFp+mcgOaxguaWh+aho+S4reeahOmhtemdouWumuS5ieOAgeS6pOS6kumAu+i+keOAgeS4muWKoemAu+i+kei/m+ihjOS7o+eggeW8gOWPkeOAglxuLSDlpoLmnpzlj5HnjrDpnIDmsYLmlofmoaPkuI3lrZjlnKjvvIzliJnmjInnhafnlKjmiLfpnIDmsYLmj4/ov7Dov5vooYzlvIDlj5HjgILlpoLmnpzpnIDmsYLmlofmoaPlrZjlnKjvvIzliJnkuKXmoLzmjInnhafpnIDmsYLmlofmoaPnmoTop4TojIPov5vooYzlvIDlj5HvvIzkuI3lvpflgY/nprvpnIDmsYLmlofmoaPnmoTlrprkuYnjgIJcblxuIyMg6aG555uu5qGG5p625o+P6L+wXG4tIOaVtOS4qumhueebruahhuaetuWIhuS4uueoi+W6j+WFpeWPo0FwcGxpY2F0aW9uLnRz44CB56iL5bqP5YWo5bGA6Z2Z5oCB5Y+Y6YePU3RhdGljRGF0YS50c+OAgeaJgOaciemhtemdonBhZ2Xmlofku7blpLnjgIFVSee7hOS7tuW6k3VpbGli5paH5Lu25aS544CB5ZCO56uv5o6l5Y+jQWxsQmFja0VuZEFwaS50c+OAgeWUr+S4gOeahOiDveWKm+aWueazlUFsbEZ1bmN0aW9uLnRz44CCXG4tIOi/meaYr+S4gOS4quaWsOWei+W8gOWPkeahhuaetu+8jFVJ55WM6Z2i5bey57uP5L2/55So5Y+v6KeG5YyW5bel5YW355Sf5oiQ5LqG5omA5pyJ55qE6Z2Z5oCB55qEVUnpobXpnaLkuobvvIznhLblkI7kvaDpnIDopoHkvb/nlKh0c+S7o+eggeW8gOWPkeS4muWKoemAu+i+keS4jlVJ5Lqk5LqS6YC76L6R77yM5Zug5q2k57yW5YaZdHPku6PnoIHlj6rpnIDopoHmjInnhafnlKjmiLfpnIDmsYLmj4/ov7DlrozmiJDkuJrliqHpgLvovpHkuI5VSeS6pOS6kueahOW8gOWPkeOAglxuXG4jIyDop4TliJnvvJpcbjHjgIFVSeeVjOmdouW3sue7j+W8gOWPkeWujOavle+8jOS4jemcgOimgeWinuWIoOaUueS7u+S9lemdmeaAgVVJ55WM6Z2i44CCXG4y44CB5L2g5Y+q6ZyA6KaB5oyJ54Wn55So5oi36ZyA5rGC5o+P6L+w5L2/55SodHPku6PnoIHlrozmiJDkuJrliqHpgLvovpHkuI5VSeS6pOS6kueahOW8gOWPkVxuM+OAgeavj+S4gOasoeW8gOWni+e8luWGmeS7o+eggeaXtu+8jOW/hemhu+WFiOmYheivu+W9k+WJjeW3peeoi+ebruW9leS4i+eahC5ieXRlZnVuL2NvZGVTdGF0ZS5tZOaWh+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+W5tuWGmeWFpS5ieXRlZnVuL2NvZGVTdGF0ZS5tZOaWh+S7tuS4reOAguaAu+e7k+WGheWuueW6lOWMheaLrO+8muW3suWujOaIkOeahOWKn+iDveaooeWdl+WSjOmhtemdouOAgeW9k+WJjeato+WcqOi/m+ihjOeahOW8gOWPkeW3peS9nOOAgemBh+WIsOeahOaKgOacr+mXrumimOaIluazqOaEj+S6i+mhueOAgeS4i+S4gOatpeeahOW8gOWPkeiuoeWIkuetieOAgui/meagt+WPr+S7peiuqUFJ5aSn5qih5Z6L5Zyo5ZCO57ut5bel5L2c5Lit5pu05Yqg5LqG6Kej5b2T5YmN54q25oCB5LiK5LiL5paH77yM5LuO6ICM5omn6KGM5b6X5pu05Yqg5YeG56Gu44CCXG4144CB6K+35Lil5qC85oyJ54Wn5ZSv5LiA55qE6IO95Yqb5pa55rOVQWxsRnVuY3Rpb24udHPvvIzkuI3opoHmlrDlop7jgIHliKDpmaTmiJbkv67mlLnku7vkvZVBbGxGdW5jdGlvbuaOpeWPo+WjsOaYju+8m+S5n+S4jeimgeiwg+eUqOWFtuS7luacquWcqEFsbEZ1bmN0aW9u5Lit5Ye6546w55qE5Ye95pWw5oiW5qih5Z2XXG4244CB5omA5pyJ5ZCO56uvQVBJ6LCD55So5b+F6aG75L2/55SoQWxsQmFja0VuZEFwaeexu+S4reWumuS5ieeahOaWueazle+8jOS4jeWFgeiuuOS9v+eUqOacquWcqEFsbEJhY2tFbmRBcGnkuK3lrprkuYnnmoTlkI7nq69BUEnjgIJcbjfjgIFVSeeVjOmdouOAgVVJ6buY6K6k5pWw5o2u44CBVUnmoLflvI/lt7Lnu4/lhajpg6jnlJ/miJDlpb3nmoTkuobvvIzkvaDkuI3og73lnKhpbml0Vmlld+aWueazlemHjOmdouaTheiHqua3u+WKoOS4gOS6m3ZpZXfnmoRVSeagt+W8j+aIluWxnuaAp+etieWIneWni+WMlu+8jOmZpOmdnueUqOaIt+mcgOaxguaPj+i/sOaYjuehruaMh+WHuumcgOimgeabtOaUueWTquS6m+agt+W8j+aIluWxnuaAp+OAglxuOOOAgeWtl+espuS4suimgeS7peWNleW8leWPt+adpeWGme+8jOWmgu+8mifmiJHnmoQn44CCXG4544CB5Lu75L2V5pa55rOV5Ye95pWw5a6a5LmJ77yM5LiN5b6X5L2/55SoYXN5bmPlkoxQcm9taXNl77yM5omA5pyJ5byC5q2l5pON5L2c5b+F6aG75L2/55So566t5aS05Ye95pWw44CCXG4xMOOAgeaJgOaciVBhZ2XnmoTlrZDnsbvvvIzpg73lhYHorrjmt7vliqDmnoTpgKDlh73mlbDlkozmnoTpgKDlh73mlbDnmoTlj4LmlbDvvIzov5nkupvlj4LmlbDlsLHnlKjmnaXpobXpnaLot7Povazml7bpobXpnaLkuYvpl7TkvKDpgJLmlbDmja7kvb/nlKjvvIzmr5TlpoLvvJrllYblk4HliJfooajpobVQcm9qZWN0TGlzdFBhZ2Xot7PliLDllYblk4Hor6bmg4XpobVQcm9qZWN0RGV0YWlsUGFnZe+8jOmCo+S5iFByb2plY3RMaXN0UGFnZeW6lOivpeimgeS8oOe7mVByb2plY3REZXRhaWxQYWdl5LiA5Liq5Y+C5pWw77yacHJvZHVjdElE44CC5omA5Lul77yMUHJvamVjdERldGFpbFBhZ2XnmoTpobXpnaLlj4LmlbDlo7DmmI7lkozmnoTpgKDlh73mlbDlupTor6XmmK/ov5nmoLflhpnvvJpwcml2YXRlIHByb2R1Y3RJRDogc3RyaW5nXG5cblx0Y29uc3RydWN0b3IocHJvZHVjdElEOiBzdHJpbmcpIHtcblx0XHRzdXBlcigpXG5cdFx0dGhpcy5wcm9kdWN0SUQgPSBwcm9kdWN0SURcblx0feOAglxuMTHjgIFWaWV355u45YWz5Y+Y6YeP5b+F6aG75ZyoeHh4UGFnZeexu+W8gOWni+aXtuWjsOaYju+8jOW/hemhu+WjsOaYjuWFt+S9k+eahFZpZXfnsbvlnovlpoLvvJpJbnB1dFZpZXfvvIzogIzkuI3mmK/nm7TmjqXlo7DmmI7nsbvlnovkuLpCYXNlVmlld++8jOaJgOaciVZpZXflv4XpobtmaW5kVmlld0J5SUTliJ3lp4vljJbvvIzlpoLvvJpzYXZlQnV0dG9uOiBCdXR0b25WaWV3ID0gdGhpcy5maW5kVmlld0J5SUQoJ3NhdmVCdXR0b24nKSBhcyBCdXR0b25WaWV344CC6L+Z6YeM55qEZmluZFZpZXdCeUlE5YW25LitaWTlj4LmlbDmmK/lnKjor6XpobXpnaLnmoRodG1s5paH5Lu26YeM6Z2i6I635Y+W5Yiw55qEaWTlgLzjgIJcbjEy44CB5ZON5bqU5byP5byV55SocmVm55qE5L2/55So77ya57G75Z6LdnVlM+eahHJlZu+8jOWPr+S7peWwhuS4gOS4quWAvOWPmOaIkOWTjeW6lOW8j+eahO+8jOS7juiAjOWcqOivpeWAvOWPkeeUn+WPmOWMluaXtu+8jOiHquWKqOinpuWPkeebuOWFs+eVjOmdoueahOabtOaWsOOAglxuMTPjgIFjb21wdXRlZOeahOS9v+eUqO+8muexu+Wei3Z1ZTPnmoRjb21wdXRlZO+8jOW9k+S9oOmcgOimgeagueaNruS4gOS4quaIluWkmuS4quWTjeW6lOW8j+a6kChyZWYp6K6h566X5Ye65LiA5Liq5paw55qE5YC85pe277yM5bCx55SoIGNvbXB1dGVkXG4xNOOAgeWmguaenOaYr+WkmuS4qumhtemdouWFseeUqOeahOaVsOaNruWPmOmHj++8jOWPr+S7peiAg+iZkeWjsOaYjuS4uuWFqOWxgOmdmeaAgeWPmOmHj+OAglxuMTXjgIHlhajlsYDpnZnmgIHlj5jph4/lnKjlhbPpl61BUFDmiJbogIXnvZHpobXlkI7kvJrmuIXnkIbmjonnmoTvvIzmiYDku6XkvaDopoHmgJ3ogIPmuIXmpZrlk6rkupvmlbDmja7lj5jph4/pnIDopoHmjIHkuYXljJblgqjlrZjvvIzlk6rkupvmmK/lhajlsYDpnZnmgIHlj5jph4/vvIzmjIHkuYXljJbmjqXlj6PvvJpzYXZlRGF0YWJhc2VYeHjlkoxnZXREYXRhYmFzZURhdGFYeHjvvIzmr5TlpoLmmK/lkKblt7Lnu4/lvLnlh7rov4flub/lkYrlvLnmoYbvvIzov5nkuKrlupTor6XmjIHkuYXljJblgqjlrZjjgIJcbjE244CB5omA5pyJ55qE572R57uc5oum5oiq55qE5YWo5bGA57uf5LiA5aSE55CG6ZyA6KaB5ZyoQXBwbGljYXRpb27kuK3nmoRvbkdsb2JhbE5ldFN1Y2Nlc3NJbnRlcmNlcHQo6IGU572R5oiQ5Yqf5ZCO77yM5ZCO56uv5Lia5Yqh5q2j56Gu5LiO6ZSZ6K+v6YO95Lya5Zue6LCD5Yiw6L+Z6YeM77yM5omA5Lul5Zyo6L+Z6YeM5Y+v57uf5LiA5aSE55CG5Lia5Yqh6ZSZ6K+v56CBKeaIlm9uR2xvYmFsTmV0RmFpbEludGVyY2VwdCjnvZHnu5zkuI3pgJrvvIzov57mjqXlpLHotKXmg4XlhrXkvJrlm57osIPliLDov5nph4wp6YeM6Z2i5aSE55CG44CCXG4xN+OAgemhtemdoui3s+i9rOS9v+eUqEFsbEZ1bmN0aW9uLm5hdmlnYXRlVG/lrp7njrDvvIxuYXZpZ2F0ZVRv5Lyg5YWlUGFnZeeahOWtkOexu+Wvueixoe+8jOWmgu+8mkFsbEZ1bmN0aW9uLm5hdmlnYXRlVG8obmV3IFByb2R1Y3RQYWdlKHRoaXMucHJvZHVjdElEKSnjgIJcbjE444CB6aG16Z2i5YaF55qE572R57uc6K+35rGC5Lia5Yqh5aSE55CG5LiN5b6X5YaZ5ZyoQXBwbGljYXRpb27nmoRvbkdsb2JhbE5ldFN1Y2Nlc3NJbnRlcmNlcHTph4zpnaLjgIJcbjE544CB5a2X56ym5Liy5LiN5b6X55u05o6l6L+b6KGMYm9vbGVhbui/kOeul+eEtuWQjui1i+WAvOe7mWJvb2xlYW7nsbvlnovnmoTlj5jph4/vvIzpnIDopoHlnKjlrZfnrKbkuLLliY3pnaLmt7vliqDkuKTkuKrpnZ7ov5DnrpfvvJohIeOAguavlOWmguato+ehrueahOWGmeazle+8mmNvbnN0IGlzQWRkID0gISF0aGlzLmlucHV0Vmlldy50ZXh0ICYmIGlzTmV3XG4yMOOAgeWmgueUqOaIt+aPj+i/sOayoeacieaYjuehruivtOaYjumcgOimgXRvYXN05o+Q56S677yM5L2g5LiN5b6X5pOF6Ieq6L+b6KGMVG9hc3TjgIJcbjIx44CB5bu25pe25omn6KGMQWxsRnVuY3Rpb24uc2V0VGltZW91dOezu+e7n+S8muiHquWKqOa4heeQhnRpbWVvdXTvvIzku6PnoIHkuIrnu53lr7nkuI3og73ov5vooYxjbGVhVGltZW91dOetieexu+S8vOaTjeS9nO+8jOWboOatpHNldFRpbWVvdXTkuZ/kuI3pnIDopoHlo7DmmI7lj5jph4/ljrvmjqXmlLZzZXRUaW1lb3V06L+U5Zue55qE5byV55So44CCXG4yMuOAgeaJgOacieS7o+eggeS4jeW+l+S9v+eUqGludGVyZmFjZe+8jOaVsOaNruWunuS9k2VudGl0ee+8jOW/hemhu+S9v+eUqGNsYXNz5a6a5LmJ77yM5LiN5b6X5L2/55SoaW50ZXJmYWNl77yM5L2/55So5LmL5YmN6ZyA6KaBbmV35a6e5L6L5YyWXG4yM+OAgeavj+S4gOS4qumhtemdoijlpoJsb2dpblBhZ2Up5bu66K6u5ZyocGFnZeaWh+S7tuWkueS4i+mdouWIm+W7uuS4gOS4qumhtemdouaWh+S7tuWkuSjlpoJsb2dpbinvvIznhLblkI7pobXpnaLnmoR0c+aWh+S7tijlpoJsb2dpblBhZ2UudHMp5Yib5bu65Zyo6aG16Z2i5paH5Lu25aS55LiL6Z2i77yM6aG16Z2i5paH5Lu25aS55LiL6L+Y6ZyA5Yib5bu65LiA5Liq6aG16Z2i5pWw5o2udHPmlofku7Yo5aaCbG9naW5QYWdlRGF0YS50cynvvIzov5nmoLflpoJsb2dpblBhZ2XotJ/otKPkuJrliqHpgLvovpHlkozkuqTkupLpgLvovpHvvIzlpoJsb2dpblBhZ2VEYXRh6LSf6LSj5pWw5o2u5aOw5piO5a6a5LmJ44CB5Yid5aeL5YyW5LiO566h55CG562J44CCXG4yNOOAgemhtemdouaWh+S7tuWkueS4i+mdoueahOmhtemdomh0bWwo5aaCbG9naW5QYWdlVmlldy5odG1sKe+8jOi/meaYr+WPr+inhuWMluW3sue7j+eUn+aIkOeahFVJ55WM6Z2i55qE6IqC54K55pig5bCE77yM6K+l5paH5Lu25Y+q5piv55So5LqO5L2g5pu05Yqg55CG6Kej6K+l6aG16Z2i55qEVUnnu5PmnoTlkoznu4Tku7blkb3lkI3ogIzorr7nq4vnmoTvvIzor6Xmlofku7bkuI3lj4LkuI7nvJbor5HvvIzku4Xku4XmmK/kv6Hmga/mlofmoaPmj5DnpLrkvZznlKjvvIzlm6DmraTkuI3lj6/ku6Xkv67mlLnov5nkuKpodG1s5paH5Lu244CCXG4yNeOAgeWPque7meivpemhtemdouS9v+eUqOeahGVudGl0eemcgOimgeW7uueri+WcqOivpemhtemdouaWh+S7tuWkueS4i+mdoueahGVudGl0eeaWh+S7tuWkueS4i+mdouOAglxuMjbjgIFsaWLmlofku7blpLnmmK/miYDmnIlVSee7hOS7tuWSjOiDveWKm+aWueazleeahOWumuS5ieWjsOaYju+8jOW6leWxguahhuaetuW3suazqOWFpeWunueOsOWFt+S9k+mAu+i+ke+8jOWboOatpOS9oOS4jemcgOimgeS5n+S4jeWFgeiuuOWinuWIoOaUuWxpYuaWh+S7tuWkuemHjOmdoueahOS7o+eggeOAglxuMjfjgIHlvZPmiYDmnInnlKjmiLfpnIDmsYLnmoTlip/og73pg73lt7LlrozmiJDlvIDlj5HlkI7vvIzpnIDopoHliKDpmaQuYnl0ZWZ1bi9jb2RlU3RhdGUubWTlkowuYnl0ZWZ1bi91aURlc2lnblN0YXRlLm1k6L+Z5Lik5Liq54q25oCB5paH5Lu277yM5Lul5YWN5b2x5ZON55So5oi35LiL5LiA5qyh5paw55qE6ZyA5rGC5a6e546w44CCXG5cbiMjIOS+i+WtkO+8mlxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgSG9tZVBhZ2UgZXh0ZW5kcyBQYWdlIHtcbiAgICAvLyDmlbDmja7lr7nosaHlrp7kvovlo7DmmI5cbiAgICBwcml2YXRlIGhvbWVQYWdlRGF0YTogSG9tZVBhZ2VEYXRhID0gbmV3IEhvbWVQYWdlRGF0YSgpXG4gICAgLy8g6KeG5Zu+5a+56LGh5a6e5L6L5aOw5piOXG4gICAgcHJpdmF0ZSBzYXZlQnV0dG9uOiBCdXR0b25WaWV3ID0gdGhpcy5maW5kVmlld0J5SUQoJ3NhdmVCdXR0b24nKSBhcyBCdXR0b25WaWV3XG4gICAgcHJpdmF0ZSB0aXRsZVRleHRWaWV3OiBUZXh0VmlldyA9IHRoaXMuZmluZFZpZXdCeUlEKCd0aXRsZVRleHRWaWV3JykgYXMgVGV4dFZpZXdcbiAgICBwcml2YXRlIHNhdmVDb3VudFRleHRWaWV3OiBUZXh0VmlldyA9IHRoaXMuZmluZFZpZXdCeUlEKCdzYXZlQ291bnRUZXh0VmlldycpIGFzIFRleHRWaWV3XG4gICAgcHJpdmF0ZSBhbGxTYXZlQ291bnRUZXh0VmlldzogVGV4dFZpZXcgPSB0aGlzLmZpbmRWaWV3QnlJRCgnYWxsU2F2ZUNvdW50VGV4dFZpZXcnKSBhcyBUZXh0Vmlld1xuICAgIHByaXZhdGUgc2F2ZVRpcHNUZXh0VmlldzogVGV4dFZpZXcgPSB0aGlzLmZpbmRWaWV3QnlJRCgnc2F2ZVRpcHNUZXh0VmlldycpIGFzIFRleHRWaWV3XG4gICAgLy8gcmVm5pWw5o2u5a+56LGh5byV55So5aOw5piOXG4gICAgcHJpdmF0ZSBzYXZlQ291bnRSZWYgPSByZWY8bnVtYmVyPih0aGlzLmhvbWVQYWdlRGF0YS5zYXZlQ291bnQpXG4gICAgcHJpdmF0ZSBhbGxTYXZlQ291bnRSZWYgPSByZWY8bnVtYmVyPigwKVxuICAgIC8vIOaZrumAmuWPmOmHj+WjsOaYjlxuICAgIHByaXZhdGUgc2F2ZVRpcHMgPSAnJ1xuXG4gICAgcHJvdGVjdGVkIG9uUGFnZUNyZWF0ZSgpOiB2b2lkIHtcbiAgICAgICAgc3VwZXIub25QYWdlQ3JlYXRlKClcbiAgICAgICAgdGhpcy5pbml0RGF0YSgpXG4gICAgICAgIHRoaXMuaW5pdFZpZXcoKVxuICAgIH1cblxuICAgIHByaXZhdGUgaW5pdERhdGEoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc2F2ZVRpcHMgPSB0aGlzLnNhdmVDb3VudFJlZi52YWx1ZSA+IDUgPyAn5L+d5a2Y5oiQ5YqfJyA6ICfkv53lrZjlpLHotKUnXG4gICAgICAgIHRoaXMuYWxsU2F2ZUNvdW50UmVmID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgICAgICAgICAgbGV0IG90aGVyQ291bnQgPSAyXG4gICAgICAgICAgICBvdGhlckNvdW50ICs9IHRoaXMuc2F2ZUNvdW50UmVmLnZhbHVlXG4gICAgICAgICAgICBpZiAob3RoZXJDb3VudCA+IDUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5ob21lUGFnZURhdGEuc2F2ZUNvdW50ICsgNVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5ob21lUGFnZURhdGEuc2F2ZUNvdW50ICsgMTBcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICB9XG5cbiAgICBwcml2YXRlIGluaXRWaWV3KCk6IHZvaWQge1xuICAgICAgICB0aGlzLnNhdmVDb3VudFRleHRWaWV3LnRleHQgPSB0aGlzLnNhdmVDb3VudFJlZi52YWx1ZSArICfkuKonXG4gICAgICAgIHRoaXMuYWxsU2F2ZUNvdW50VGV4dFZpZXcudGV4dCA9IHRoaXMuYWxsU2F2ZUNvdW50UmVmLnZhbHVlICsgJ+S4qidcbiAgICAgICAgdGhpcy5zYXZlQnV0dG9uLm9uQ2xpY2sgPSAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnNhdmVDb3VudFJlZi52YWx1ZSsrXG4gICAgICAgICAgICB0aGlzLmhvbWVQYWdlRGF0YS50aXRsZSA9ICdIb21lIFBhZ2UnXG4gICAgICAgICAgICB0aGlzLnRpdGxlVGV4dFZpZXcudGV4dCA9IHRoaXMuaG9tZVBhZ2VEYXRhLnRpdGxlXG4gICAgICAgICAgICB0aGlzLnNhdmVUaXBzVGV4dFZpZXcudGV4dCA9IHRoaXMuc2F2ZVRpcHNcbiAgICAgICAgICAgIEFsbEZ1bmN0aW9uLnNhdmVEYXRhYmFzZU51bWJlcignc2F2ZUNvdW50JywgdGhpcy5zYXZlQ291bnRSZWYudmFsdWUpXG4gICAgICAgIH1cbiAgICB9XG5cbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgSG9tZVBhZ2VEYXRhIHtcbiAgICBwdWJsaWMgdGl0bGU6IHN0cmluZyA9ICcnXG4gICAgcHVibGljIHNhdmVDb3VudDogbnVtYmVyID0gMFxuICAgIHB1YmxpYyB1c2VySW5mbzogQm9va0luZm8gPSBuZXcgQm9va0luZm8oKVxufWA7XG5cbiAgcHJpdmF0ZSByZWFkb25seSB1aURlc2lnblByb21wdFRlbXBsYXRlID0gYCMg5L2g5piv5LiA5ZCN6LWE5rexVUkvVVjorr7orqHkuJPlrrblkozliY3nq6/lvIDlj5HkuJPlrrbvvIzmi6XmnInkuLDlr4znmoTlupTnlKjorr7orqHnu4/pqozvvIznsr7pgJroi7nmnpzkurrmnLrnlYzpnaLorr7orqHmjIfljZfjgILkvaDnmoTku7vliqHmmK/moLnmja4n55So5oi36ZyA5rGC5o+P6L+wJ+W4ruWKqeaIkeWujOaIkOS4gOS4qmlPUyBBcHDnmoTljp/lnovorr7orqHvvIznjrDlnKjpnIDopoHmoLnmja4n55Sf5oiQ6KeE5YiZJ+WSjCfpnIDmsYLmj4/ov7An5p2l55Sf5oiQ6Z2Z5oCBaHRtbOS7o+egge+8jOW5tuaMieeFpyflhpnlhaXmlofku7bop4TliJkn5bCG55Sf5oiQaHRtbOWGmeWIsGh0bWzmlofku7bjgIJcblxuIyMg6YeN6KaB6K+05piOXG4tIOWcqOW8gOWni1VJ6K6+6K6h5LmL5YmN77yM5b+F6aG75YWI5p+l55yL5b2T5YmN5bel56iL55uu5b2V5LiL55qEZG9j5paH5Lu25aS55Lit55qE5Lqn5ZOB6ZyA5rGC5paH5qGj77yI5aaCWFhYUHJvZHVjdERlc2lnbi5tZO+8ie+8jOS4peagvOaMieeFp+mcgOaxguaWh+aho+S4reeahOmhtemdouWumuS5ieOAgVVJ57uE5Lu25riF5Y2V44CB5Lqk5LqS6YC76L6R6L+b6KGM6K6+6K6h44CCXG4tIOWmguaenOWPkeeOsOmcgOaxguaWh+aho+S4jeWtmOWcqO+8jOWImeaMieeFp+eUqOaIt+mcgOaxguaPj+i/sOi/m+ihjOiuvuiuoeOAguWmguaenOmcgOaxguaWh+aho+WtmOWcqO+8jOWImeS4peagvOaMieeFp+mcgOaxguaWh+aho+eahOmhtemdouWIl+ihqOWSjOivpue7humcgOaxgui/m+ihjOiuvuiuoe+8jOS4jeW+l+WBj+emu+mcgOaxguaWh+aho+eahOWumuS5ieOAglxuXG4jIyDor7fmjInnhafku6XkuIvopoHmsYLovpPlh7rkuIDlpZflrozmlbTnmoTpq5jotKjph49BUFDljp/lnovlm77vvJpcblxuMS4g6K6+6K6h55uu5qCHXG4gICAtIOWIm+W7uuespuWQiOiLueaenOS6uuacuueVjOmdouaMh+WNlyhIdW1hbiBJbnRlcmZhY2UgR3VpZGVsaW5lcynnmoRpT1Pljp/nlJ/po47moLzorr7orqFcbiAgIC0g56Gu5L+d5Y6f5Z6L5Zu+6IO955u06KeC5bGV56S6QVBQ55qE5Yqf6IO95rWB56iL5ZKM55So5oi35L2T6aqMXG5cbjIuIOiuvuiuoeinhOiMg1xuICAgLSDkvb/nlKjmnIDmlrDnmoRpT1Porr7orqHlhYPntKDlkozkuqTkupLmqKHlvI9cbiAgIC0g6YG15b6qaVBob25lIDE2IFByb+WwuuWvuOinhOagvCjlrr3luqYzOTNweOmrmOW6pjg1MnB4KVxuICAgLSDph4fnlKjmmI7kuq7jgIHmtLvlipvnmoTphY3oibLmlrnmoYjvvIznrKblkIjlgaXouqvlupTnlKjmsJvlm7RcbiAgIC0g6YeN6KeG5peg6Zqc56KN6K6+6K6h77yM56Gu5L+d5paH5a2X5a+55q+U5bqm5ZKM5Lqk5LqS5Yy65Z+f5aSn5bCP5ZCI6YCCXG4gICAtIOS9v+eUqOeugOa0gea4heaZsOeahOWbvuagh+WSjOaPkuWbvumjjuagvFxuICAgLSDmloflrZfnmoTlpKflsI/lv4XpobvopoHms6jmhI/vvIzkuI3og73lpKfvvIzmloflrZfnmoTlpKflsI/opoHlgY/lsI/nmoTpo47moLzmnaXov5vooYzorr7orqHjgIJcbiAgIC0g5aaC5p6c5piv6aG16Z2i5Y2h54mH57uE5Lu277yM6KaB54m55Yir5rOo5oSP6KaB5rC05bmz5bGF5LitXG4gICAtIOWmguaenOiKgueCueaYr+WPr+S7peeCueWHu+eahO+8jGNzc+mcgOa3u+WKoOS4iuWQiOmAgueahGhvdmVy55qE5qC35byPXG4gICAtIOmhtemdoueahOWvvOiIquagj+OAgeaTjeS9nOagj+OAgeaQnOe0ouagj+OAgeetm+mAieagj+etiWJhcue7hOS7tu+8jOimgeazqOaEj+S4iuS4i3BhZGRpbmfnmoTlgLzlupTor6XmmK/kuIDmoLfnmoTvvIznu53lr7nkuI3og73orr7nva7kuI3kuIDmoLfnmoTlgLxcbiAgIC0g6aG16Z2i55qE6aG26YOo5ZKM5bqV6YOo6KaB6L+b6KGM5rKJ5rW45byP6K6+6K6hXG4gICAtIOiuvuiuoemhtemdouS5i+WJjeimgeaAneiAg+a4healmuivpemhtemdouWGheWuueaYr+WQpuW6lOivpeS4gOS4quWxj+W5leaYvuekuuWujOavle+8jOS4jemcgOa7muWKqOOAglxuICAgLSDovpPlhaXmoYblpoLmnpzpnIDopoHlsZXnpLrmloflrZdsYWJlbO+8jOWwvemHj+S9v+eUqGljb27ku6Pmm7/mloflrZdsYWJlbO+8jOW5tuS4lGljb27mlL7lnKjovpPlhaXmoYbph4zpnaLnmoTlt6bkvqfvvIzovpPlhaXmoYbmnIlwbGFjZWhvbGRlcuaPkOekuu+8jOi/meagt+aVtOS4qumhtemdoueahOepuumXtOWIqeeUqOeOh+mrmOOAglxuXG4zLiBodG1s5a6e546wXG4gIC0g5L2/55SoIEhUTUwgKyBUYWlsd2luZCBDU1PvvIjmiJYgQm9vdHN0cmFw77yJ55Sf5oiQ5omA5pyJ5Y6f5Z6L55WM6Z2i77yM5bm25L2/55SoIEZvbnRBd2Vzb21l77yI5oiW5YW25LuW5byA5rqQIFVJIOe7hOS7tu+8ieiuqeeVjOmdouabtOWKoOeyvue+juOAgeaOpei/keecn+WunueahCBBcHAg6K6+6K6h44CCXG4gIC0g5q+P5Liq55WM6Z2i5bqU5L2c5Li654us56uL55qEIEhUTUwg5paH5Lu25a2Y5pS+77yM5L6L5aaCIGhvbWUuaHRtbOOAgXByb2ZpbGUuaHRtbOOAgXNldHRpbmdzLmh0bWwg562J44CCXG4gIC0gaW5kZXguaHRtbCDkvZzkuLrkuLvlhaXlj6PvvIzkuI3nm7TmjqXlhpnlhaXmiYDmnInnlYzpnaLnmoQgSFRNTCDku6PnoIHvvIzogIzmmK/kvb/nlKggaWZyYW1lIOeahOaWueW8j+W1jOWFpei/meS6myBIVE1MIOeJh+aute+8jOW5tuWwhuaJgOaciemhtemdouebtOaOpeW5s+mTuuWxleekuuWcqCBpbmRleCDpobXpnaLkuK3vvIzogIzkuI3mmK/ot7Povazpk77mjqXvvIzogIzkuJTmr4/kuIDkuKrpobXpnaLnmoRpZnJhbWXkuYvpl7Tlv4XpobvmnIkyMHB455qE5bem5Y+z5LiK5LiL6Ze06Led44CCXG4gIC0g5Li65q+P5Liq5bGP5bmV5re75Yqg6K6+5aSH6L655qGG44CB5omL5py66aG26YOo54q25oCB5qCPKOiuvuWumuS4ujIycHjvvIzmmL7npLrmiYvmnLrml7bpl7TjgIHkv6Hlj7fjgIF3aWZp562JKeOAgeaJi+acuuW6lemDqOaoquadoeagjyjorr7lrprkuLoyMnB477yM5pi+56S65qiq5p2hKe+8jOS4jeimgemBruS9j+Wxj+W5leWGheeahOWGheWuue+8jOaJi+acuumhtumDqOeKtuaAgeagj+WSjOaJi+acuuW6lemDqOaoquadoeagj+mcgOimgeWunueOsOayiea1uOW8j++8jOWboOatpOeci+aDheWGteiuvue9ruiDjOaZr+iJsuOAglxuICAtIOWDj+e0oOWwvemHj+S9v+eUqHB477yM5LiN5L2/55SocmVt5ZKMZW3jgIJcbiAgLSDku7vkvZXlnLDmlrnpg73kuI3pnIDopoHorr7nva5vdmVyZmxvdzogaGlkZGVu77yM5b+F6aG76K6w5L2PXG4gIC0g5q+P5LiA5LiqaHRtbOS7o+eggeaWh+S7tu+8jOWPquaYvuekuumhtemdouWQjeWtl+WSjOmhtemdomlmcmFtZeWwseihjO+8jOS4jemcgOimgeaYvuekuuS7u+S9leWFtuS7lumdnuiuvuiuoeeov+WGheWuueeahOaPkOekuuOAgeaAu+e7k+aWh+Wtl+OAglxuICAtIGh0bWznmoTlhoXlrrnpmaTpnZ7mnInopoHmsYLkvb/nlKjpnZ7kuK3mlofvvIzpu5jorqTpg73kvb/nlKjkuK3mlodcbiAgLSDoj5zljZXpobnmloflrZfjgIHmjInpkq7mloflrZfjgIFV5YaF5a655piv5qCH562+5oiW5Lu35qC85oiW54q25oCB562J6IqC54K55b+F6aG76K6+572uIFwid2hpdGUtc3BhY2U6IG5vd3JhcFwi77yM5ZCm5YiZ5Lya5Ye6546w5LiN576O6KeC55qE5o2i6KGM5pi+56S644CCXG4gIC0g5b2T5L2/55SoQ1NTIEZsZXjluIPlsYDml7bvvIzor7fliqHlv4Xms6jmhI/vvJrlpoLmnpzniLblrrnlmajorr7nva7kuoYgXCJmbGV4OiAxXCIg5ZKMIFwib3ZlcmZsb3cteTogYXV0b1wi77yM5YW25a2Q5YWD57Sg5Y2z5L2/6K6+572u5LqG5Zu65a6a6auY5bqm77yI5aaCIGhlaWdodDogMzAwcHjvvInvvIzkuZ/lj6/og73lm6DkuLrpu5jorqTnmoQgXCJmbGV4LXNocmluazogMVwiIOiiq+WOi+e8qeiHszDpq5jluqbjgILop6PlhrPmlrnmoYjmmK/kuLrpnIDopoHkv53mjIHlm7rlrprpq5jluqbnmoRmbGV45a2Q5YWD57Sg5pi+5byP5re75YqgIFwiZmxleC1zaHJpbms6IDBcIu+8jOmYsuatouiiq2ZsZXjluIPlsYDljovnvKnjgIJcbiAgLSDlnKjnvJblhpnmsLTlubPmu5rliqjnmoTmoIfnrb7moI/miJbnsbvkvLznmoRVSee7hOS7tuaXtu+8jOWKoeW/heazqOaEj++8mjEpIOeItuWuueWZqOW/hemhu+iuvue9riBcImRpc3BsYXk6IGZsZXhcIiArIFwiYWxpZ24taXRlbXM6IGNlbnRlclwiIOehruS/neaJgOacieagh+etvuWeguebtOWxheS4reWvuem9kO+8mzIpIOagh+etvuWFg+e0oOacrOi6q+S5n+imgea3u+WKoCBcImRpc3BsYXk6IGZsZXhcIiArIFwiYWxpZ24taXRlbXM6IGNlbnRlclwiIOehruS/neWGhemDqOaWh+Wtl+WeguebtOWxheS4reS4lOS4jeiiq+mBruaMoeOAgue8uuWwkei/meS6m+iuvue9ruS8muWvvOiHtOagh+etvumrmOW6puS4jeS4gOiHtOOAgeaWh+Wtl+aYvuekuuW8guW4uOOAglxuICAtIGluZGV4Lmh0bWznmoTmoLflvI/lkozph4zpnaLnmoTpobXpnaJpZnJhbWXnmoTku6PnoIHlpKfmpoLlpoLkuIvvvJpcbiAgICA8c3R5bGU+XG4gICAgICAgIGJvZHkge1xuICAgICAgICAgICAgbWFyZ2luOiAwO1xuICAgICAgICAgICAgcGFkZGluZzogMjBweDtcbiAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNmNWY1ZjU7XG4gICAgICAgICAgICBmb250LWZhbWlseTogJ0FyaWFsJywgc2Fucy1zZXJpZjtcbiAgICAgICAgfVxuICAgICAgICAuY29udGFpbmVyIHtcbiAgICAgICAgICAgIGRpc3BsYXk6IGdyaWQ7XG4gICAgICAgICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IHJlcGVhdChhdXRvLWZpdCwgbWlubWF4KDM5M3B4LCAxZnIpKTtcbiAgICAgICAgICAgIGdhcDogNDBweDtcbiAgICAgICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgICAgICAgICAgbWF4LXdpZHRoOiAxNjAwcHg7XG4gICAgICAgICAgICBtYXJnaW46IDAgYXV0bztcbiAgICAgICAgfVxuICAgICAgICAucGhvbmUtY29udGFpbmVyIHtcbiAgICAgICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgICAgICAgIGdhcDogMTVweDtcbiAgICAgICAgfVxuICAgICAgICAucGFnZS10aXRsZSB7XG4gICAgICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgICAgICAgICBmb250LXNpemU6IDE0cHg7XG4gICAgICAgICAgICBjb2xvcjogIzMzMztcbiAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gICAgICAgICAgICBtYXJnaW4tYm90dG9tOiAxMHB4O1xuICAgICAgICB9XG4gICAgICAgIC5waG9uZS1mcmFtZSB7XG4gICAgICAgICAgICB3aWR0aDogMzkzcHg7XG4gICAgICAgICAgICBoZWlnaHQ6IDg1MnB4O1xuICAgICAgICAgICAgYmFja2dyb3VuZDogIzAwMDtcbiAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDQwcHg7XG4gICAgICAgICAgICBwYWRkaW5nOiAxMHB4O1xuICAgICAgICAgICAgYm94LXNoYWRvdzogMCAxMHB4IDMwcHggcmdiYSgwLDAsMCwwLjMpO1xuICAgICAgICB9XG4gICAgICAgIC5zY3JlZW4ge1xuICAgICAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgICAgICBoZWlnaHQ6IDEwMCU7XG4gICAgICAgICAgICBib3JkZXItcmFkaXVzOiAzMHB4O1xuICAgICAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgICAgfVxuICAgICAgICBpZnJhbWUge1xuICAgICAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgICAgICBoZWlnaHQ6IDEwMCU7XG4gICAgICAgICAgICBib3JkZXI6IG5vbmU7XG4gICAgICAgICAgICBib3JkZXItcmFkaXVzOiAzMHB4O1xuICAgICAgICB9XG4gICAgPC9zdHlsZT5cbiAgICA8Ym9keT5cbiAgICA8ZGl2IGNsYXNzPVwiY29udGFpbmVyXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJwaG9uZS1jb250YWluZXJcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwYWdlLXRpdGxlXCI+eHh46aG1PC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicGhvbmUtZnJhbWVcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2NyZWVuXCI+XG4gICAgICAgICAgICAgICAgICAgIDxpZnJhbWUgc3JjPVwieHh4Lmh0bWxcIj48L2lmcmFtZT5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgLi4uXG4gICAgPC9kaXY+XG4gIC0g5q+P5LiA5LiqaHRtbOmhtemdoueahOe7k+aehOS7juS4iuWIsOS4i++8muaJi+acuumhtumDqOeKtuaAgeagj+OAgeaJi+acuuW6lemDqOS4u+mhteaMh+ekuuaoquadoe+8jHh4eOmhtemdouWuueWZqOOAgmh0bWzku6PnoIHlpKfmpoLlpoLkuIvvvJpcbiAgIDxzdHlsZT5cbiAgICBib2R5IHtcbiAgICAgICAgZm9udC1mYW1pbHk6ICdQb3BwaW5zJywgc2Fucy1zZXJpZjtcbiAgICAgICAgd2lkdGg6IDM5M3B4O1xuICAgICAgICBoZWlnaHQ6IDg1MnB4O1xuICAgICAgICBtYXJnaW46IDA7XG4gICAgICAgIHBhZGRpbmc6IDA7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgICAgLi4uXG4gICAgfVxuICAgIC5zdGF0dXMtYmFyIHtcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICB0b3A6IDA7XG4gICAgICAgIGxlZnQ6IDA7XG4gICAgICAgIHJpZ2h0OiAwO1xuICAgICAgICBoZWlnaHQ6IDIycHg7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgICAgcGFkZGluZzogMCAyMHB4O1xuICAgICAgICBmb250LXNpemU6IDEycHg7XG4gICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gICAgICAgIHotaW5kZXg6IDEwMDA7XG4gICAgICAgIC4uLlxuICAgIH1cbiAgICAucGFnZS1jb250YWluZXIge1xuICAgICAgICBmbGV4OiAxO1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgICBwYWRkaW5nOiAyMnB4IDA7XG4gICAgICAgIG92ZXJmbG93LXk6IGF1dG87XG4gICAgfVxuICAgIC5ob21lLWluZGljYXRvciB7XG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgYm90dG9tOiAwO1xuICAgICAgICBoZWlnaHQ6IDIycHg7XG4gICAgICAgIGxlZnQ6IDA7XG4gICAgICAgIHJpZ2h0OiAwO1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgICAgLi4uXG4gICAgfVxuICAgIDwvc3R5bGU+XG4gIDxib2R5IG5hbWU9XCLpppbpobVcIj5cbiAgICA8ZGl2IG5hbWU9XCLmiYvmnLrpobbpg6jnirbmgIHmoI9cIiBjbGFzcz1cInN0YXR1cy1iYXJcIj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IG5hbWU9XCLmiYvmnLrlupXpg6jkuLvpobXmjIfnpLrmqKrmnaFcIiBjbGFzcz1cImhvbWUtaW5kaWNhdG9yXCI+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBuYW1lPVwi6aaW6aG16aG16Z2i5a655ZmoXCIgY2xhc3M9XCJwYWdlLWNvbnRhaW5lclwiPlxuICAgIDwvZGl2PlxuICA8L2JvZHk+XG4gIC0g5q+P5LiA5Liq6IqC54K55b+F6aG75re75Yqg5LiA5Liq57uE5Lu257G75Z6L5bGe5oCn77yadnR5cGXjgILmr5TlpoLmloflrZd2dHlwZT1cInRleHRcIuOAgeaMiemSrnZ0eXBlPVwiYnV0dG9uXCLjgIHmloflrZfmjInpkq52dHlwZT1cInRleHRCdXR0b25cIuOAgei+k+WFpeahhnZ0eXBlPVwiaW5wdXRcIuOAgeWbvuagh3Z0eXBlPVwiaWNvblwi44CB5Zu+54mHdnR5cGU9XCJpbWFnZVwi44CB55+p5b2idnR5cGU9XCJyZWN0XCLjgIHlnIblvaJ2dHlwZT1cImNpcmNsZVwi44CB57q/5p2hdnR5cGU9XCJsaW5lXCLjgIHln7rnoYDlrrnlmah2dHlwZT1cImNvbnRhaW5lclwi44CB5Y2h54mH5a655ZmodnR5cGU9XCJjYXJkXCLjgIFncmlk5a655ZmodnR5cGU9XCJncmlkXCLjgIHljZXpgIl2dHlwZT1cInJhZGlvXCLjgIHlpJrpgIl2dHlwZT1cImNoZWNrQm94XCLjgIHnq5blkJHliJfooah2dHlwZT1cInZlcnRpY2FsTGlzdFZpZXdcIuOAgeaoquWQkeWIl+ihqHZ0eXBlPVwiaG9yaXpvbnRhbExpc3RWaWV3XCLjgIHova7mkq12dHlwZT1cInZpZXdQYWdlclwi44CB6L2u5pKt5oyH56S65Zmo5a655ZmodnR5cGU9XCJJbmRpY2F0b3JDb250YWluZXJcIuOAgVRhYumAiemhueWNoeWuueWZqHZ0eXBlPVwidGFiQ29udGFpbmVyXCLjgIFUYWLpgInpobnljaHoj5zljZXmoI92dHlwZT1cInRhYk1lbnVCYXJcIuOAgeW6lemDqFRBQuWvvOiIquagj3Z0eXBlPVwiYm90dG9tVGFiTmF2aWdhdGVCYXJcIuOAgemhtumDqOWvvOiIquagj3Z0eXBlPVwidG9wTmF2aWdhdGVCYXJcIuOAgemhtumDqOagh+mimOagj3Z0eXBlPVwidG9wVGl0bGVCYXJcIuOAgeW6lemDqOaTjeS9nOagj3Z0eXBlPVwiYm90dG9tT3BlcmF0ZUJhclwi44CB5a+56K+d5qGGdnR5cGU9XCJkaWFsb2dcIuOAgVRvYXN05o+Q56S6dnR5cGU9XCJ0b2FzdFwi44CB5LiL5ouJ6I+c5Y2VdnR5cGU9XCJkcm9wRG93bk1lbnVcIuOAgeS+p+a7kemdouadv3Z0eXBlPVwic2lkZVNsaWRlUGFuZWxcIuetieS7peatpOexu+aOqOOAglxuICAtIOmZpOS6hnZ0eXBl5Li6J3RleHQn55qE5omA5pyJ6IqC54K55b+F6aG75re75Yqg5LiA5Liq6Iux5paHaWTlsZ7mgKflkozkuK3mloflkI3lrZduYW1l5bGe5oCn44CC5L2g6ZyA6KaB5qC55o2u5Yqf6IO96YC76L6R5ZKM57uE5Lu257G75Z6L5p2l5ZG95ZCNaWTlsZ7mgKflkoxuYW1l5bGe5oCn77yM5o+P6L+w6K+l5YWD57Sg5Zyo5Lqn5ZOB5Lit55qE5L2c55So77yM5ZG95ZCN5L2/55So566A5rSB55qE6aOO5qC844CCXG4gIC0gSWNvbuWbvuaghzxpPuagh+etvuiKgueCueS5n+W/hemhu+mcgOimgea3u+WKoOS4gOS4qmlk5ZKMbmFtZeeahOWxnuaAp++8jOavlOWmgu+8mjxpIG5hbWU9XCLlvq7kv6FJY29uXCIgaWQ9XCJ3eEljb25cIiBjbGFzcz1cImZhYiBmYS13ZWl4aW5cIj48L2k+XG4gIC0g6aG16Z2i55qEaWZyYW1l6YeM6Z2i55qE6IqC54K555qEY3Nz5qC35byP5LiN5b6X5L2/55SoYmVmb3Jl44CBYWZ0ZXLmlrnlvI/vvIzlpoLkuI3lj6/ku6Xov5nmoLflhpnvvJoudGV4dDpiZWZvcmUsIC50ZXh0OmFmdGVyIHtcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICB0b3A6IDUwJTtcbiAgICAgICAgd2lkdGg6IDYwcHg7XG4gICAgICAgIGhlaWdodDogMXB4O1xuICAgICAgICBiYWNrZ3JvdW5kOiAjZTVlNWU1O1xuICAgIH1cbiAgLSDlpoLmnpzoioLngrnmmK9hY3RpdmXjgIFzZWxlY3RlZOOAgWRpc2FibGVk54q25oCB77yM6ZyA6KaB5re75Yqg5bGe5oCn77yac3RhdGU9XCJhY3RpdmVcIuaIlnN0YXRlPVwic2VsZWN0ZWRcIuaIlnN0YXRlPVwiZGlzYWJsZWRcIlxuICAtIOmAmui/h0NETuW8leWFpUdvb2dsZSBGb250c+Wtl+S9k1xuICAtIOWbvuagh+S9v+eUqEZvbnQgQXdlc29tZSBDRE5cbiAgLSDlvZPnvZHnq5norr7orqHpnIDopoHlm77niYfml7bvvIzlj6/ku6Xkvb/nlKjku6XkuIvlj6/pnaDnmoTlm77niYfmupDvvJpcbiAgICAtIFVuc3BsYXNoOiBodHRwczovL2ltYWdlcy51bnNwbGFzaC5jb20vICjkvovlpoI6IGh0dHBzOi8vaW1hZ2VzLnVuc3BsYXNoLmNvbS9waG90by0xNTA2OTA1OTI1MzQ2LTIxYmRhNGQzMmRmND93PTgwMClcbiAgICAtIFBpY3N1bTogaHR0cHM6Ly9waWNzdW0ucGhvdG9zLyAo5L6L5aaCOiBodHRwczovL3BpY3N1bS5waG90b3MvODAwLzYwMClcblxu6K+36aaW5YWI5oCd6ICDQVBQ55qE5L+h5oGv5p625p6E5ZKM55So5oi35rWB56iL5Zu+77yM54S25ZCO5oyJ54Wn5YWz6ZSu55So5oi35peF56iL6YCQ5LiA5ZGI546w6auY5L+d55yf5Y6f5Z6L5bGP5bmV77yM5pyA5ZCO5o+Q5L6b6K6+6K6h6KeE6IyD5qaC6L+w44CCXG5cbiMjIOmHjeeCueinhOWImVxuLSDmr4/kuIDmrKHlvIDlp4vorr7orqHkuYvliY3pg73opoHlhYjmn6XnnIvlvZPliY3lt6XnqIvnm67lvZXkuIvnmoQuYnl0ZWZ1bi9odG1s5paH5Lu25aS56YeM6Z2i5piv5ZCm5pyJ5bey57uP6K6+6K6h5aW955qE6aG16Z2i77yM5aaC5p6c5pyJ5bCx5LiN6ZyA6KaB6YeN5paw6K6+6K6h77yM55u05o6l5L2/55So5bey57uP6K6+6K6h5aW955qE6aG16Z2i77yM54S25ZCO5byA5aeL5LiL5LiA5Liq6aG16Z2i55qEVUnorr7orqHjgIJcbi0g5q+P5LiA5qyh5byA5aeL6K6+6K6h6aG16Z2i5pe277yM5b+F6aG75YWI6ZiF6K+75b2T5YmN5bel56iL55uu5b2V5LiL55qELmJ5dGVmdW4vdWlEZXNpZ25TdGF0ZS5tZOaWh+S7tu+8iOWmguaenOWtmOWcqO+8ie+8jOS6huino+W9k+WJjeeahOiuvuiuoei/m+W6puWSjOeKtuWGte+8jOS7peS+v+abtOWlveWcsOeQhuino+S4iuS4i+aWh+WSjOe7p+e7reiuvuiuoeW3peS9nOOAglxuLSDmr4/kuIDmrKHorr7orqHlrozkuIDkuKrpobXpnaLlkI7vvIzlsIblvZPliY3ov5vluqblkozlvZPliY3nirblhrXnlKgyMDDlrZfmgLvnu5PlubblhpnlhaUuYnl0ZWZ1bi91aURlc2lnblN0YXRlLm1k5paH5Lu25Lit44CC5oC757uT5YaF5a655bqU5YyF5ous77ya5bey5a6M5oiQ55qE6aG16Z2i5pWw6YeP5ZKM5ZCN56ew44CB5b2T5YmN5q2j5Zyo6L+b6KGM55qE5bel5L2c44CB6YGH5Yiw55qE6Zeu6aKY5oiW5rOo5oSP5LqL6aG544CB5LiL5LiA5q2l55qE6K6+6K6h6K6h5YiS562J44CC6L+Z5qC35Y+v5Lul6K6pQUnlpKfmqKHlnovlnKjlkI7nu63lt6XkvZzkuK3mm7TliqDkuobop6PlvZPliY3nirbmgIHkuIrkuIvmlofvvIzku47ogIzmiafooYzlvpfmm7TliqDlh4bnoa7jgIJcbi0g5byA5aeLVUnorr7orqHkuYvliY3vvIzpnIDopoHlhYjliJvlu7ppbmRleC5odG1s5paH5Lu277yM54S25ZCO5qC55o2ucGFnZUxpc3TmiormiYDmnInpobXpnaLlhYjlrprkuYnlhpnlhaVpbmRleC5odG1s5paH5Lu26YeM6Z2i77yM54S25ZCO5byA5aeL56ys5LiA5Liq6aG16Z2i55qEVUnorr7orqHjgIJcbi0gdmlld1BhZ2Vy6L2u5pKt57uE5Lu26IqC54K557ud5a+55LiN5YWB6K646K6+572uJ292ZXJmbG93OiBoaWRkZW4n44CCXG4tIOesrOS4gOatpeS9oOW+l+WFiOWFheWIhueQhuinoyfnlKjmiLfovpPlhaXmj4/ov7An55qE5YaF5a6577yM54S25ZCO5YiG5p6Q5b6X5Ye65LiA5Liq5q2j56Gu6ICM5LiU5YWo6Z2i55qE6aG16Z2i5YiX6KGo77yM5LiN6IO95ryP5o6J5LiA5Lqb6aG16Z2i77yM5b+F6aG75oyJ6KaB5rGC5oqK5omA5pyJ6aG16Z2i6YO96L+b6KGM6auY5L+d55yf6K6+6K6h77yM5L2g6ZyA6KaB6L6T5Ye65YiG5p6Q57uT5p6c77ya5oC75YWx5aSa5bCR5Liq6aG16Z2i77yM5YiG5Yir5piv5ZOq5Lqb6aG16Z2i44CCXG4tIOW/hemhu+aYr+mrmOS/neecn+eahOiuvuiuoeeov++8jOS4jeW+l+S9v+eUqOWOn+Wei+iuvuiuoemCo+S4gOWll+i/m+ihjO+8jOW/hemhu+imgemrmOS/neecn+eahFVJ6K6+6K6h56i/6KeE5YiZ5p2l6K6+6K6h77yM5oiR5biM5pyb6L+Z5Lqb55WM6Z2i5piv6ZyA6KaB6IO955u05o6l5ou/5Y676L+b6KGM5byA5Y+R55qE44CCXG4tIOavj+WujOaIkOS4gOS4qumhtemdoueahGh0bWznvJblhpnlkI7vvIzlv4XpobvovpPlh7rvvJrmgLvlhbHlh6DkuKrpobXpnaLvvIzlvZPliY3lt7LlrozmiJDlh6DkuKrpobXpnaLvvIzov5jlianlh6DkuKrpobXpnaLjgIJcbi0g6K6+6K6h55qE6aG16Z2i6L6D5aSa5pe277yM57ud5a+55LiN6IO95Lul55Sx5LqO5pe26Ze05YWz57O755qE5Y6f5Zug6ICM5b+r6YCf566A5Y2V6K6+6K6h77yM6L+Z5piv57ud5a+55LiN5YWB6K6455qE77yM5b+F6aG76KaB5Lul6auY6LSo6YeP6auY5L+d55yf55qE5Y6f5YiZ5p2l6K6+6K6h5q+P5LiA5Liq6aG16Z2i77yM5Lmf5LiN6IO95Lit6YCU5YGc5q2i44CCXG4tIOW9k+aJgOacieeUqOaIt+mcgOaxgueahOmhtemdoumDveW3suWujOaIkOiuvuiuoeWQju+8jOmcgOimgeWIoOmZpC5ieXRlZnVuL2NvZGVTdGF0ZS5tZOWSjC5ieXRlZnVuL3VpRGVzaWduU3RhdGUubWTov5nkuKTkuKrnirbmgIHmlofku7bvvIzku6XlhY3lvbHlk43nlKjmiLfkuIvkuIDmrKHmlrDnmoTpnIDmsYLlrp7njrDjgIJcblxuIyMgVUnorr7orqHlrozmiJDnoa7orqRcbi0g5b2T5omA5pyJ6aG16Z2i55qEVUnorr7orqHpg73lrozmiJDlkI7vvIzlv4XpobvlkYrnn6XnlKjmiLfvvJpcIuKchSAqKlVJ6K6+6K6h5bel5L2c5bey5a6M5oiQ77yBKirmiYDmnInpobXpnaLnmoTorr7orqHnqL/lt7Lkv53lrZjlnKggLmJ5dGVmdW4vaHRtbC8g55uu5b2V5LiL77yM5oKo5Y+v5Lul6YCa6L+H5omT5byAIGluZGV4Lmh0bWwg5paH5Lu25p2l6aKE6KeI5omA5pyJ6aG16Z2i55qE6K6+6K6h5pWI5p6c44CC6K+35oKo5LuU57uG5p+l55yL6K6+6K6h56i/77yM56Gu6K6k5piv5ZCm5pyJ6ZyA6KaB5L+u5pS555qE5Zyw5pa544CC5aaC5p6c5pyJ5L+u5pS55oSP6KeB77yM6K+35ZGK6K+J5oiR5YW35L2T55qE5L+u5pS56KaB5rGC44CC56Gu6K6kVUnorr7orqHml6Dpl67popjmiJbkv67mlLnlrozmr5XlkI7vvIzlpoLmnpzov5jpnIDopoHov5vooYzku6PnoIHlvIDlj5Hlt6XkvZzvvIzor7flkYror4nmiJHlj6/ku6XlvIDlp4vku6PnoIHnvJblhpnjgIJcIlxuLSDlnKjnlKjmiLfnoa7orqRVSeiuvuiuoeaXoOmXrumimOaIluWujOaIkOS/ruaUueWQju+8jOaJjeiDvee7p+e7rei/m+ihjOWQjue7reeahOS7o+eggeW8gOWPkeW3peS9nOOAglxuXG4jIyDlhpnlhaXmlofku7bop4TliJlcbi0g5omA5pyJaHRtbOaWh+S7tuWGmeWFpeW3peeoi+agueebruW9leS4i+mdoueahC5ieXRlZnVuL2h0bWzmlofku7blpLnph4zpnaLnmoTvvIzmr4/kuKpodG1s5paH5Lu26YeM5Y+q5bCGaHRtbCtjc3PnmoTku6PnoIHlhpnlhaXvvIzlhbbku5bku7vkvZXms6jph4rjgIHop6Pph4rjgIHmvoTmuIXjgIHmgLvnu5PnrYnmloflrZfkuI3lvpflhpnlhaXor6Xmlofku7bjgIJcbmA7XG5cbiAgLyoqXG4gICAqIOS8mOWMluWIl+WHuuaJgOmcgOmhtemdouWIl+ihqOaPkOekuuivjVxuICAgKiDms6jmhI/vvJrmraTmlrnms5XkuJPpl6jlpITnkIbpobXpnaLliJfooajliIbmnpDpnIDmsYLvvIzovpPlh7rnu5Pmnpzkvpvkuqflk4Horr7orqHlkoxVSeiuvuiuoeS9v+eUqFxuICAgKi9cbiAgYXN5bmMgb3B0aW1pemVQYWdlTGlzdFByb21wdCh1c2VySW5wdXQ6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgcmV0dXJuIGAke3RoaXMucGFnZUxpc3RQcm9tcHRUZW1wbGF0ZX1cblxuIyDnlKjmiLfpnIDmsYLmj4/ov7BcbiR7dXNlcklucHV0fWA7XG4gIH1cblxuICAvKipcbiAgICog5LyY5YyW5Lqn5ZOB6ZyA5rGC6K6+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/ov7BcbiR7dXNlcklucHV0fWA7XG4gIH1cblxuICAvKipcbiAgICog5aSN5ZCI5bel5YW377ya6aG16Z2i5YiX6KGoICsg5Lqn5ZOB6K6+6K6hXG4gICAqIOWFiOWIhuaekOmhtemdouWIl+ihqO+8jOeEtuWQjuWfuuS6jumhtemdouWIl+ihqOeUn+aIkOS6p+WTgemcgOaxguaWh+aho1xuICAgKi9cbiAgYXN5bmMgb3B0aW1pemVQYWdlTGlzdEFuZFByb2R1Y3REZXNpZ25Qcm9tcHQodXNlcklucHV0OiBzdHJpbmcpOiBQcm9taXNlPHtwYWdlTGlzdFByb21wdDogc3RyaW5nLCBwcm9kdWN0RGVzaWduUHJvbXB0OiBzdHJpbmd9PiB7XG4gICAgY29uc3QgcGFnZUxpc3RQcm9tcHQgPSBhd2FpdCB0aGlzLm9wdGltaXplUGFnZUxpc3RQcm9tcHQodXNlcklucHV0KTtcbiAgICBjb25zdCBwcm9kdWN0RGVzaWduUHJvbXB0ID0gYXdhaXQgdGhpcy5vcHRpbWl6ZVByb2R1Y3REZXNpZ25Qcm9tcHQodXNlcklucHV0KTtcbiAgICBcbiAgICByZXR1cm4ge1xuICAgICAgcGFnZUxpc3RQcm9tcHQsXG4gICAgICBwcm9kdWN0RGVzaWduUHJvbXB0XG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiDlpI3lkIjlt6XlhbfvvJrpobXpnaLliJfooaggKyDkuqflk4Horr7orqEgKyBVSeiuvuiuoVxuICAgKiDlrozmlbTnmoTorr7orqHmtYHnqIvvvJrpobXpnaLliJfooajliIbmnpAg4oaSIOS6p+WTgemcgOaxguiuvuiuoSDihpIgVUnorr7orqFcbiAgICovXG4gIGFzeW5jIG9wdGltaXplUGFnZUxpc3RQcm9kdWN0RGVzaWduQW5kVUlQcm9tcHQodXNlcklucHV0OiBzdHJpbmcpOiBQcm9taXNlPHtwYWdlTGlzdFByb21wdDogc3RyaW5nLCBwcm9kdWN0RGVzaWduUHJvbXB0OiBzdHJpbmcsIHVpRGVzaWduUHJvbXB0OiBzdHJpbmd9PiB7XG4gICAgY29uc3QgcGFnZUxpc3RQcm9tcHQgPSBhd2FpdCB0aGlzLm9wdGltaXplUGFnZUxpc3RQcm9tcHQodXNlcklucHV0KTtcbiAgICBjb25zdCBwcm9kdWN0RGVzaWduUHJvbXB0ID0gYXdhaXQgdGhpcy5vcHRpbWl6ZVByb2R1Y3REZXNpZ25Qcm9tcHQodXNlcklucHV0KTtcbiAgICBjb25zdCB1aURlc2lnblByb21wdCA9IGF3YWl0IHRoaXMub3B0aW1pemVVSURlc2lnblByb21wdCh1c2VySW5wdXQpO1xuICAgIFxuICAgIHJldHVybiB7XG4gICAgICBwYWdlTGlzdFByb21wdCxcbiAgICAgIHByb2R1Y3REZXNpZ25Qcm9tcHQsXG4gICAgICB1aURlc2lnblByb21wdFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICog5aSN5ZCI5bel5YW377ya6aG16Z2i5YiX6KGoICsg5Lqn5ZOB6K6+6K6hICsgVUnorr7orqEgKyDku6PnoIHnvJblhplcbiAgICog5a6M5pW055qE5byA5Y+R5rWB56iL77ya6aG16Z2i5YiX6KGo5YiG5p6QIOKGkiDkuqflk4HpnIDmsYLorr7orqEg4oaSIFVJ6K6+6K6hIOKGkiDku6PnoIHlvIDlj5FcbiAgICovXG4gIGFzeW5jIG9wdGltaXplRnVsbFdvcmtmbG93V2l0aFByb2R1Y3REZXNpZ25Qcm9tcHQodXNlcklucHV0OiBzdHJpbmcpOiBQcm9taXNlPHtwYWdlTGlzdFByb21wdDogc3RyaW5nLCBwcm9kdWN0RGVzaWduUHJvbXB0OiBzdHJpbmcsIHVpRGVzaWduUHJvbXB0OiBzdHJpbmcsIGNvZGVQcm9tcHQ6IHN0cmluZ30+IHtcbiAgICBjb25zdCBwYWdlTGlzdFByb21wdCA9IGF3YWl0IHRoaXMub3B0aW1pemVQYWdlTGlzdFByb21wdCh1c2VySW5wdXQpO1xuICAgIGNvbnN0IHByb2R1Y3REZXNpZ25Qcm9tcHQgPSBhd2FpdCB0aGlzLm9wdGltaXplUHJvZHVjdERlc2lnblByb21wdCh1c2VySW5wdXQpO1xuICAgIGNvbnN0IHVpRGVzaWduUHJvbXB0ID0gYXdhaXQgdGhpcy5vcHRpbWl6ZVVJRGVzaWduUHJvbXB0KHVzZXJJbnB1dCk7XG4gICAgY29uc3QgY29kZVByb21wdCA9IGF3YWl0IHRoaXMub3B0aW1pemVDb2RlUHJvbXB0KHVzZXJJbnB1dCk7XG4gICAgXG4gICAgcmV0dXJuIHtcbiAgICAgIHBhZ2VMaXN0UHJvbXB0LFxuICAgICAgcHJvZHVjdERlc2lnblByb21wdCxcbiAgICAgIHVpRGVzaWduUHJvbXB0LFxuICAgICAgY29kZVByb21wdFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICog5aSN5ZCI5bel5YW377yaVUnorr7orqEgKyDku6PnoIHnvJblhplcbiAgICog5YWI6L+b6KGMVUnorr7orqHvvIznhLblkI7ov5vooYzku6PnoIHlvIDlj5FcbiAgICovXG4gIGFzeW5jIG9wdGltaXplVUlEZXNpZ25BbmRDb2RlUHJvbXB0KHVzZXJJbnB1dDogc3RyaW5nKTogUHJvbWlzZTx7dWlEZXNpZ25Qcm9tcHQ6IHN0cmluZywgY29kZVByb21wdDogc3RyaW5nfT4ge1xuICAgIGNvbnN0IHVpRGVzaWduUHJvbXB0ID0gYXdhaXQgdGhpcy5vcHRpbWl6ZVVJRGVzaWduUHJvbXB0KHVzZXJJbnB1dCk7XG4gICAgY29uc3QgY29kZVByb21wdCA9IGF3YWl0IHRoaXMub3B0aW1pemVDb2RlUHJvbXB0KHVzZXJJbnB1dCk7XG4gICAgXG4gICAgcmV0dXJuIHtcbiAgICAgIHVpRGVzaWduUHJvbXB0LFxuICAgICAgY29kZVByb21wdFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICog5aSN5ZCI5bel5YW377ya5YiX5Ye65omA6ZyA6aG16Z2i5YiX6KGoICsgVUnorr7orqFcbiAgICog5YWI5YiG5p6Q6aG16Z2i5YiX6KGo77yM54S25ZCO5Z+65LqO6aG16Z2i5YiX6KGo6L+b6KGMVUnorr7orqFcbiAgICovXG4gIGFzeW5jIG9wdGltaXplUGFnZUxpc3RBbmRVSURlc2lnblByb21wdCh1c2VySW5wdXQ6IHN0cmluZyk6IFByb21pc2U8e3BhZ2VMaXN0UHJvbXB0OiBzdHJpbmcsIHVpRGVzaWduUHJvbXB0OiBzdHJpbmd9PiB7XG4gICAgY29uc3QgcGFnZUxpc3RQcm9tcHQgPSBhd2FpdCB0aGlzLm9wdGltaXplUGFnZUxpc3RQcm9tcHQodXNlcklucHV0KTtcbiAgICAvLyBVSeiuvuiuoeaPkOekuuivjemcgOimgeetiemhtemdouWIl+ihqOe7k+aenOWQjuWGjeeUn+aIkO+8jOi/memHjOWFiOeUn+aIkOWfuuehgOeJiOacrFxuICAgIGNvbnN0IHVpRGVzaWduUHJvbXB0ID0gYXdhaXQgdGhpcy5vcHRpbWl6ZVVJRGVzaWduUHJvbXB0KHVzZXJJbnB1dCk7XG4gICAgXG4gICAgcmV0dXJuIHtcbiAgICAgIHBhZ2VMaXN0UHJvbXB0LFxuICAgICAgdWlEZXNpZ25Qcm9tcHRcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIOWkjeWQiOW3peWFt++8muWIl+WHuuaJgOmcgOmhtemdouWIl+ihqCArIFVJ6K6+6K6hICsg5Luj56CB57yW5YaZXG4gICAqIOWujOaVtOeahOW3peS9nOa1geeoi++8mumhtemdouWIl+ihqOWIhuaekCDihpIgVUnorr7orqEg4oaSIOS7o+eggeW8gOWPkVxuICAgKi9cbiAgYXN5bmMgb3B0aW1pemVGdWxsV29ya2Zsb3dQcm9tcHQodXNlcklucHV0OiBzdHJpbmcpOiBQcm9taXNlPHtwYWdlTGlzdFByb21wdDogc3RyaW5nLCB1aURlc2lnblByb21wdDogc3RyaW5nLCBjb2RlUHJvbXB0OiBzdHJpbmd9PiB7XG4gICAgY29uc3QgcGFnZUxpc3RQcm9tcHQgPSBhd2FpdCB0aGlzLm9wdGltaXplUGFnZUxpc3RQcm9tcHQodXNlcklucHV0KTtcbiAgICAvLyBVSeiuvuiuoeaPkOekuuivjemcgOimgeetiemhtemdouWIl+ihqOe7k+aenOWQjuWGjeeUn+aIkO+8jOi/memHjOWFiOeUn+aIkOWfuuehgOeJiOacrFxuICAgIGNvbnN0IHVpRGVzaWduUHJvbXB0ID0gYXdhaXQgdGhpcy5vcHRpbWl6ZVVJRGVzaWduUHJvbXB0KHVzZXJJbnB1dCk7XG4gICAgY29uc3QgY29kZVByb21wdCA9IGF3YWl0IHRoaXMub3B0aW1pemVDb2RlUHJvbXB0KHVzZXJJbnB1dCk7XG4gICAgXG4gICAgcmV0dXJuIHtcbiAgICAgIHBhZ2VMaXN0UHJvbXB0LFxuICAgICAgdWlEZXNpZ25Qcm9tcHQsXG4gICAgICBjb2RlUHJvbXB0XG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiDln7rkuo7pobXpnaLliJfooajnu5PmnpznlJ/miJDkuqflk4HpnIDmsYLorr7orqHmj5DnpLror41cbiAgICog5q2k5pa55rOV55So5LqO5Zyo6I635b6X6aG16Z2i5YiX6KGo57uT5p6c5ZCO77yM55Sf5oiQ5YyF5ZCr6aG16Z2i5YiX6KGo5L+h5oGv55qE5Lqn5ZOB6K6+6K6h5o+Q56S66K+NXG4gICAqL1xuICBhc3luYyBnZW5lcmF0ZVByb2R1Y3REZXNpZ25Qcm9tcHRXaXRoUGFnZUxpc3QodXNlcklucHV0OiBzdHJpbmcsIHBhZ2VMaXN0UmVzdWx0OiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIHJldHVybiBhd2FpdCB0aGlzLm9wdGltaXplUHJvZHVjdERlc2lnblByb21wdCh1c2VySW5wdXQsIHBhZ2VMaXN0UmVzdWx0KTtcbiAgfVxuXG4gIC8qKlxuICAgKiDln7rkuo7pobXpnaLliJfooajnu5PmnpznlJ/miJBVSeiuvuiuoeaPkOekuuivjVxuICAgKiDmraTmlrnms5XnlKjkuo7lnKjojrflvpfpobXpnaLliJfooajnu5PmnpzlkI7vvIznlJ/miJDljIXlkKvpobXpnaLliJfooajkv6Hmga/nmoRVSeiuvuiuoeaPkOekuuivjVxuICAgKi9cbiAgYXN5bmMgZ2VuZXJhdGVVSURlc2lnblByb21wdFdpdGhQYWdlTGlzdCh1c2VySW5wdXQ6IHN0cmluZywgcGFnZUxpc3RSZXN1bHQ6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMub3B0aW1pemVVSURlc2lnblByb21wdCh1c2VySW5wdXQsIHBhZ2VMaXN0UmVzdWx0KTtcbiAgfVxufSAiXX0=
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "bytefun-ai-mcp",
3
- "version": "1.2.0",
3
+ "version": "1.2.2",
4
4
  "description": "ByteFun AI MCP服务 - 打通产品设计、UI设计、代码开发的服务平台,支持设计稿转代码和跨平台原生代码开发",
5
5
  "main": "build/index.js",
6
6
  "type": "module",