Commit
·
77f462c
1
Parent(s):
eab01cb
update
Browse files- test.ipynb +0 -262
test.ipynb
DELETED
@@ -1,262 +0,0 @@
|
|
1 |
-
{
|
2 |
-
"cells": [
|
3 |
-
{
|
4 |
-
"cell_type": "code",
|
5 |
-
"execution_count": 1,
|
6 |
-
"id": "initial_id",
|
7 |
-
"metadata": {
|
8 |
-
"collapsed": true,
|
9 |
-
"ExecuteTime": {
|
10 |
-
"end_time": "2025-02-12T16:27:33.281081Z",
|
11 |
-
"start_time": "2025-02-12T16:27:33.276138Z"
|
12 |
-
}
|
13 |
-
},
|
14 |
-
"outputs": [],
|
15 |
-
"source": [
|
16 |
-
"profile = {\n",
|
17 |
-
" \"main_profile\": {\n",
|
18 |
-
" \"VISION\": {\n",
|
19 |
-
" \"score\": \"56\",\n",
|
20 |
-
" \"summary\": \"Sees the ‘big picture’ and maintains line of sight\"\n",
|
21 |
-
" },\n",
|
22 |
-
" \"INTEGRITY\": {\n",
|
23 |
-
" \"score\": \"39\",\n",
|
24 |
-
" \"summary\": \"Genuine, honest and straightforward. Authentic\"\n",
|
25 |
-
" },\n",
|
26 |
-
" \"AUTHORITY\": {\n",
|
27 |
-
" \"score\": \"78\",\n",
|
28 |
-
" \"summary\": \"Takes charge of situations; controls and directs\"\n",
|
29 |
-
" },\n",
|
30 |
-
" \"INFLUENCE\": {\n",
|
31 |
-
" \"score\": \"77\",\n",
|
32 |
-
" \"summary\": \"Affects how others think and feel without control or direction\"\n",
|
33 |
-
" },\n",
|
34 |
-
" \"IDEATION\": {\n",
|
35 |
-
" \"score\": \"86\",\n",
|
36 |
-
" \"summary\": \"Generates original and/or innovative ideas; makes unexpected connections\"\n",
|
37 |
-
" },\n",
|
38 |
-
" \"OPPORTUNISM\": {\n",
|
39 |
-
" \"score\": \"68\",\n",
|
40 |
-
" \"summary\": \"Alert to opportunity; prepared to seize opportunities\"\n",
|
41 |
-
" },\n",
|
42 |
-
" \"CONFIDENCE\": {\n",
|
43 |
-
" \"score\": \"85\",\n",
|
44 |
-
" \"summary\": \"Self-belief/confidence across different domains\"\n",
|
45 |
-
" },\n",
|
46 |
-
" \"Proactivity\": {\n",
|
47 |
-
" \"score\": \"75\",\n",
|
48 |
-
" \"summary\": \"Strong desire to accomplish goals. Propensity to act decisively and get things done.\"\n",
|
49 |
-
" },\n",
|
50 |
-
" \"DISCIPLINE\": {\n",
|
51 |
-
" \"score\": \"78\",\n",
|
52 |
-
" \"summary\": \"Planned rather than spontaneous behaviour. Attention to detail and accuracy. Organises and plans to achieve goals\"\n",
|
53 |
-
" },\n",
|
54 |
-
" \"AGILITY\": {\n",
|
55 |
-
" \"score\": \"68\",\n",
|
56 |
-
" \"summary\": \"Switches easily between different cognitive processes. Comfortable with ill-defined problems and situations. Adaptable and constructive.\"\n",
|
57 |
-
" },\n",
|
58 |
-
" \"RESILIENCE\": {\n",
|
59 |
-
" \"score\": \"87\",\n",
|
60 |
-
" \"summary\": \"Remains calm and optimistic under pressure. Perseveres in the face of adversity. Recovers from setbacks.\"\n",
|
61 |
-
" }\n",
|
62 |
-
" },\n",
|
63 |
-
" \"red_flag\": {\n",
|
64 |
-
" \"PROUD\": {\n",
|
65 |
-
" \"score\": \"69\",\n",
|
66 |
-
" \"summary\": \"Conceit and self-importance. Overestimation of knowledge and/or ability in respect of tasks. Misplaced belief in unique or exceptional abilities\"\n",
|
67 |
-
" },\n",
|
68 |
-
" \"UNPREDICTABLE\": {\n",
|
69 |
-
" \"score\": \"87\",\n",
|
70 |
-
" \"summary\": \"Given to sudden changes of mood, behaviour or direction. Given to unconventional or strange behaviour or beliefs. Difficult to predict and/or surprising.\"\n",
|
71 |
-
" },\n",
|
72 |
-
" \"FORCEFUL\": {\n",
|
73 |
-
" \"score\": \"77\",\n",
|
74 |
-
" \"summary\": \"Forceful, insistent, domineering. Hostile and argumentative. Unyielding in the face of evidence or argument.\"\n",
|
75 |
-
" },\n",
|
76 |
-
" \"CALCULATING\": {\n",
|
77 |
-
" \"score\": \"99\",\n",
|
78 |
-
" \"summary\": \"Deliberate deceitfulness in the pursuit on one’s interest; acting in bad faith. Ruthless pursuit of own interests regardless of considerations of right or wrong. General distrust of the motives of others; attribution of bad faith.\"\n",
|
79 |
-
" }\n",
|
80 |
-
" },\n",
|
81 |
-
" \"motivation\": {\n",
|
82 |
-
" \"Purpose\": {\n",
|
83 |
-
" \"score\": \"50\",\n",
|
84 |
-
" \"summary\": \"The sense of meaningfulness and direction in one\\\"s work or activities. It is the intrinsic motivation derived from believing that one’s efforts contribute to a larger goal or vision.\"\n",
|
85 |
-
" },\n",
|
86 |
-
" \"Mastery\": {\n",
|
87 |
-
" \"score\": \"26\",\n",
|
88 |
-
" \"summary\": \"The drive to improve and excel in a skill or field. It reflects the desire to gain expertise, proficiency, and competence through learning and practice.\"\n",
|
89 |
-
" },\n",
|
90 |
-
" \"Ownership\": {\n",
|
91 |
-
" \"score\": \"76\",\n",
|
92 |
-
" \"summary\": \"The feeling of responsibility and control over one’s work or tasks. It involves having a personal stake in outcomes and the autonomy to make decisions.\"\n",
|
93 |
-
" },\n",
|
94 |
-
" \"Connection\": {\n",
|
95 |
-
" \"score\": \"98\",\n",
|
96 |
-
" \"summary\": \"The sense of belonging and interpersonal relationships within a group or organization. It includes feeling valued, understood, and supported by others.\"\n",
|
97 |
-
" },\n",
|
98 |
-
" \"Reward\": {\n",
|
99 |
-
" \"score\": \"88\",\n",
|
100 |
-
" \"summary\": \"The external incentives and recognition received for one’s efforts. It encompasses financial compensation, bonuses, promotions, and other tangible benefits.\"\n",
|
101 |
-
" },\n",
|
102 |
-
" \"Power\": {\n",
|
103 |
-
" \"score\": \"68\",\n",
|
104 |
-
" \"summary\": \"The capacity to influence others and effect change. It relates to having authority, control, and the ability to shape decisions and outcomes within an organization or group.\"\n",
|
105 |
-
" }\n",
|
106 |
-
" },\n",
|
107 |
-
" \"bio_information\": {\n",
|
108 |
-
" \"Name\": \"Pierre\",\n",
|
109 |
-
" \"Gender\": \"Male\",\n",
|
110 |
-
" \"Age\": 42,\n",
|
111 |
-
" \"Nationality\": \"French\",\n",
|
112 |
-
" \"Role\": \"Chief Executive\",\n",
|
113 |
-
" \"Years_in_role\": 2,\n",
|
114 |
-
" \"Years_in_comparable_role\": 8\n",
|
115 |
-
" }\n",
|
116 |
-
"}"
|
117 |
-
]
|
118 |
-
},
|
119 |
-
{
|
120 |
-
"cell_type": "code",
|
121 |
-
"outputs": [
|
122 |
-
{
|
123 |
-
"name": "stdout",
|
124 |
-
"output_type": "stream",
|
125 |
-
"text": [
|
126 |
-
"strength ['Authority (78) - Strength', 'Influence (77) - Strength', 'Ideation (86) - Strength', 'Opportunism (68) - Strength', 'Confidence (85) - Strength', 'Proactivity (75) - Strength', 'Discipline (78) - Strength', 'Agility (68) - Strength', 'Resilience (87) - Strength']\n",
|
127 |
-
"areas_for_development ['Vision (56) - Area to Improve', 'Integrity (39) - Area to Improve']\n"
|
128 |
-
]
|
129 |
-
},
|
130 |
-
{
|
131 |
-
"data": {
|
132 |
-
"text/plain": "[{'role': 'system',\n 'content': 'Analyze {{INDIVIDUAL_NAME}}\\'s profile in ### Bio Information ###, ## Main Profile ###, ### Red Flags Profile ###, and answer the ### Questions ### based on the ### Descriptions ### below with around 800 words length. The score will be LOW (0-33.33), AVERAGE (33.34-66.66), HIGH (66.67-100).\", Ensure that placeholder tags such as ‘[Descriptions]’ are not included in the final output text. Use natural language only.'},\n {'role': 'user',\n 'content': 'Analyze Pierre\\'s profile in ### Bio Information ###, ## Main Profile ###, ### Red Flags Profile ###, and answer the ### Questions ### based on the ### Descriptions ### below with around 800 words length. The score will be LOW (0-33.33), AVERAGE (33.34-66.66), HIGH (66.67-100).\", Ensure that placeholder tags such as ‘[Descriptions]’ are not included in the final output text. Use natural language only.\\n### Descriptions ###\\n#### Main Profile Descriptions ####\\nVISION: Sees the ‘big picture’ and maintains line of sight. Alignment of goals and actions.\\nAUTHORITY: Takes charge of situations; controls and directs.\\nINTEGRITY: Genuine, honest and straightforward. Authentic.\\nINFLUENCE: Affects how others think and feel without control or direction.\\nIDEATION: Generates original and/or innovative ideas; makes unexpected connections.\\nOPPORTUNISM: Alert to opportunity; prepared to seize opportunities.\\nCONFIDENCE: Self-belief/confidence across different domains.\\nPROACTIVITY: Strong desire to accomplish goals, Propensity to act decisively and get things done; proactive rather than reactive.\\nDISCIPLINE: Planned rather than spontaneous behavior, Attention to detail and accuracy, Organises and plans to achieve goals.\\nAGILITY: Switches easily between different cognitive processes, Comfortable with ill-defined problems and situations, Adaptable and constructive.\\nRESILIENCE: Remains calm and optimistic under pressure, Perseveres in the face of adversity, Recovers from setbacks.\\n#### Red Flag Descriptions ####\\nHUBRIS: Conceit and self-importance, Overestimation of knowledge and/or ability in respect of tasks, Misplaced belief in unique or exceptional abilities. Need and seek attention, flattery and affirmation. Unable to recognise and/or understand the feelings and needs of others. Expectation of special treatment\\nMERCURIAL: Given to sudden changes of mood, behaviour or direction, Given to unconventional or strange behaviour or beliefs, Difficult to predict and/or surprising.\\nDOMINANT: Forceful, insistent, domineering, Hostile and argumentative, Unyielding in the face of evidence or argument.\\nMACHIAVELLIAN: Deliberate deceitfulness in the pursuit on one’s interest; acting in bad faith, Ruthless pursuit of own interests regardless of considerations of right or wrong, General distrust of the motives of others; attribution of bad faith.\\n#### Motivation Descriptions ####\\nPURPOSE: The sense of meaningfulness and direction in one\\'s work or activities. It is the intrinsic motivation derived from believing that one’s efforts contribute to a larger goal or vision.\\nMASTERY: The drive to improve and excel in a skill or field. It reflects the desire to gain expertise, proficiency, and competence through learning and practice.\\nOWNERSHIP: The feeling of responsibility and control over one’s work or tasks. It involves having a personal stake in outcomes and the autonomy to make decisions.\\nCONNECTION: The sense of belonging and interpersonal relationships within a group or organization. It includes feeling valued, understood, and supported by others.\\nREWARD: The external incentives and recognition received for one’s efforts. It encompasses financial compensation, bonuses, promotions, and other tangible benefits.\\nPOWER: The capacity to influence others and effect change. It relates to having authority, control, and the ability to shape decisions and outcomes within an organization or group.\\n\\n### Bio Information of Pierre ###\\n- Name: Pierre\\n- Gender: Male\\n- Age: 42\\n- Nationality: French\\n- Role: Chief Executive\\n- Years In Role: 2\\n- Years In Comparable Role: 8\\n### Main Profile ###\\n{{PROFILE}}\\n### Red Flags Profile ###\\n- Proud: 69\\n- Unpredictable: 87\\n- Forceful: 77\\n- Calculating: 99\\n### Motivation Profile ###\\n- Purpose: 50\\n- Mastery: 26\\n- Ownership: 76\\n- Connection: 98\\n- Reward: 88\\n- Power: 68\\n### Questions ###\\n1. Write an overall short summary (1-2 paragraphs and around 200-300 words) with the title: \"Profile summary (You)\" of the profile consider different traits and scores of that individual. When answering this question, address the individual directly using \\'you\\' instead of their name.\\n2. Analyze only the Main Profile and Red Flags Profile. Ensure that all traits are mentioned. Identify key strengths, weaknesses (areas for development), and potential risks (In Bullet Points with headers, traits should be displayed with the level of score, for example: Vision (High) and Influence (Average), and a one line summary with a focus on the the trait scores and their implications in the professional context. Do not output scores) with the title: \"STRENGTHS\", \"AREAS FOR DEVELOPMENT\" and \"RISKS\". In the ‘STRENGTHS’ section, include only traits with scores equal to or greater than 67. If no traits have scores greater than or equal to 67, include traits with scores equal to or greater than 50. In the ‘AREAS FOR DEVELOPMENT’ section, include only traits with scores lower than 50. The ‘RISKS’ section should only be included if any Red Flag traits have HIGH scores (greater than 67). If no Red Flag traits have HIGH scores, omit the ‘RISKS’ section. When answering this question, address the individual directly using ‘you’. Ensure that traits in the ‘STRENGTHS’ section are ordered from highest to lowest score, and traits in the ‘AREAS FOR DEVELOPMENT’ section are ordered from lowest to highest score. If the individual has a lower overall score, consider adding a section for ‘Relative Strengths,’ but only if the overall profile supports it.\\n3. Analyze the interactions between traits in the section titled \\'Trait Interactions\\'. In this section, explore how certain traits interact with others (e.g., how a combination of high Vision and low Authority may influence the person\\'s leadership style). Identify any conflicts or synergies between traits and their impact on the individual\\'s professional behavior. Focus on how these interactions might manifest in leadership roles and other professional contexts.\\n4. Analyze only the Motivation profile (In Bullet Points with headers (High Motivation, Average Motivation, Low Motivation), each header should contain the trait analysis Reward, Connection, etc. traits should be displayed with the level of score, for example: Vision (High) and Influence (Average)) with the title: \"Motivation (You)\". When answering this question, address the individual directly using \\'you\\'.\\n5. Your response should be well-organized using consistent markdown formatting: use ## for section headers (e.g., ## Profile summary), ### for trait-specific sub-headings (e.g., ### Vision (High)), write paragraphs of text instead of bullet points. Do not use bold, italics, or numbered lists, and ensure the format remains the same throughout the entire report. Avoid writing a conclusion.\\nYour response for each question should be in-depth, professional, and organized under clear headings, with each point supported by specific examples from the Pierre\\'s profiles. Provide the individual with at least 5 points for each question. Do not include a conclusion.'}]"
|
133 |
-
},
|
134 |
-
"execution_count": 3,
|
135 |
-
"metadata": {},
|
136 |
-
"output_type": "execute_result"
|
137 |
-
}
|
138 |
-
],
|
139 |
-
"source": [
|
140 |
-
"import json\n",
|
141 |
-
"\n",
|
142 |
-
"\n",
|
143 |
-
"def classify_traits(profile):\n",
|
144 |
-
" main_profile = profile['main_profile']\n",
|
145 |
-
" strengths = []\n",
|
146 |
-
" areas_for_development = []\n",
|
147 |
-
"\n",
|
148 |
-
" # Check if any trait has a score >= 67\n",
|
149 |
-
" if any(int(details['score']) >= 67 for details in main_profile.values()):\n",
|
150 |
-
" for trait, details in main_profile.items():\n",
|
151 |
-
" if int(details['score']) >= 67:\n",
|
152 |
-
" strengths.append(f\"{trait.title()} ({details['score']}) - Strength\")\n",
|
153 |
-
" else:\n",
|
154 |
-
" areas_for_development.append(f\"{trait.title()} ({details['score']}) - Area to Improve\")\n",
|
155 |
-
" # Check if no trait has a score >= 67 but some have a score >= 50\n",
|
156 |
-
" elif any(int(details['score']) >= 50 for details in main_profile.values()):\n",
|
157 |
-
" for trait, details in main_profile.items():\n",
|
158 |
-
" if int(details['score']) >= 50:\n",
|
159 |
-
" strengths.append(f\"{trait.title()} ({details['score']}) - Strength\")\n",
|
160 |
-
" else:\n",
|
161 |
-
" areas_for_development.append(f\"{trait.title()} ({details['score']}) - Area to Improve\")\n",
|
162 |
-
" # If no trait has a score >= 50\n",
|
163 |
-
" else:\n",
|
164 |
-
" for trait, details in main_profile.items():\n",
|
165 |
-
" areas_for_development.append(f\"{trait.title()} ({details['score']}) - Area to Improve\")\n",
|
166 |
-
"\n",
|
167 |
-
" return strengths, areas_for_development\n",
|
168 |
-
"\n",
|
169 |
-
"def generate_prompt_from_profile(profile, version=\"TestTakersSummary\"):\n",
|
170 |
-
" with open('prompts.json') as f:\n",
|
171 |
-
" prompt_sets = json.load(f)['Prompts']\n",
|
172 |
-
" prompt_templates = prompt_sets[version]\n",
|
173 |
-
"\n",
|
174 |
-
" try:\n",
|
175 |
-
" # Fetching profile data\n",
|
176 |
-
" individual_name = profile['bio_information'].get('Name', 'the individual')\n",
|
177 |
-
"\n",
|
178 |
-
" # Classify traits\n",
|
179 |
-
" strengths, areas_for_development = classify_traits(profile)\n",
|
180 |
-
"\n",
|
181 |
-
" print(\"strength\", strengths)\n",
|
182 |
-
"\n",
|
183 |
-
" print(\"areas_for_development\", areas_for_development)\n",
|
184 |
-
"\n",
|
185 |
-
" # Generating bio, profile, and red flags sections\n",
|
186 |
-
" bio_section = \"\\n\".join(\n",
|
187 |
-
" [f\"- {k.replace('_', ' ').title()}: {v}\" for k, v in profile['bio_information'].items()])\n",
|
188 |
-
" strengths_section = \"\\n\".join(strengths)\n",
|
189 |
-
" areas_for_development_section = \"\\n\".join(areas_for_development)\n",
|
190 |
-
" red_flags_section = \"\\n\".join(\n",
|
191 |
-
" [f\"- {trait.title()}: {details['score']}\" for trait, details in\n",
|
192 |
-
" profile['red_flag'].items()])\n",
|
193 |
-
" motivation_section = \"\\n\".join(\n",
|
194 |
-
" [f\"- {trait.title()}: {details['score']}\" for trait, details in\n",
|
195 |
-
" profile['motivation'].items()])\n",
|
196 |
-
"\n",
|
197 |
-
" # Replacing placeholders in the prompts\n",
|
198 |
-
" prompts = [\n",
|
199 |
-
" x.replace('{{INDIVIDUAL_NAME}}', individual_name)\n",
|
200 |
-
" .replace('{{BIO}}', bio_section)\n",
|
201 |
-
" .replace('{{STRENGTHS}}', strengths_section)\n",
|
202 |
-
" .replace('{{AREAS_FOR_DEVELOPMENT}}', areas_for_development_section)\n",
|
203 |
-
" .replace('{{REDFLAGS_PROFILE}}', red_flags_section)\n",
|
204 |
-
" .replace('{{MOTIVATION_PROFILE}}', motivation_section) for x in prompt_templates]\n",
|
205 |
-
"\n",
|
206 |
-
" # Compiling final prompt\n",
|
207 |
-
" prompt = \"\\n\".join(prompts)\n",
|
208 |
-
"\n",
|
209 |
-
" except KeyError as e:\n",
|
210 |
-
" return [{\"role\": \"system\", \"content\": f\"Error processing profile data: missing {str(e)}\"}]\n",
|
211 |
-
"\n",
|
212 |
-
" message = [\n",
|
213 |
-
" {\"role\": \"system\", \"content\": prompt_sets[version][0]},\n",
|
214 |
-
" {\"role\": \"user\", \"content\": prompt}\n",
|
215 |
-
" ]\n",
|
216 |
-
"\n",
|
217 |
-
" return message\n",
|
218 |
-
"\n",
|
219 |
-
"generate_prompt_from_profile(profile)"
|
220 |
-
],
|
221 |
-
"metadata": {
|
222 |
-
"collapsed": false,
|
223 |
-
"ExecuteTime": {
|
224 |
-
"end_time": "2025-02-12T16:37:40.706214Z",
|
225 |
-
"start_time": "2025-02-12T16:37:40.697907Z"
|
226 |
-
}
|
227 |
-
},
|
228 |
-
"id": "f956b57c1f413fca",
|
229 |
-
"execution_count": 3
|
230 |
-
},
|
231 |
-
{
|
232 |
-
"cell_type": "code",
|
233 |
-
"outputs": [],
|
234 |
-
"source": [],
|
235 |
-
"metadata": {
|
236 |
-
"collapsed": false
|
237 |
-
},
|
238 |
-
"id": "fc6f526d18c3b789"
|
239 |
-
}
|
240 |
-
],
|
241 |
-
"metadata": {
|
242 |
-
"kernelspec": {
|
243 |
-
"display_name": "Python 3",
|
244 |
-
"language": "python",
|
245 |
-
"name": "python3"
|
246 |
-
},
|
247 |
-
"language_info": {
|
248 |
-
"codemirror_mode": {
|
249 |
-
"name": "ipython",
|
250 |
-
"version": 2
|
251 |
-
},
|
252 |
-
"file_extension": ".py",
|
253 |
-
"mimetype": "text/x-python",
|
254 |
-
"name": "python",
|
255 |
-
"nbconvert_exporter": "python",
|
256 |
-
"pygments_lexer": "ipython2",
|
257 |
-
"version": "2.7.6"
|
258 |
-
}
|
259 |
-
},
|
260 |
-
"nbformat": 4,
|
261 |
-
"nbformat_minor": 5
|
262 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|