vanilla-wow-addons – Blame information for rev 1
?pathlinks?
Rev | Author | Line No. | Line |
---|---|---|---|
1 | office | 1 | --[[ |
2 | Healers Assist by Kiki of European Cho'gall (Alliance) |
||
3 | Configuration module |
||
4 | |||
5 | ]] |
||
6 | |||
7 | |||
8 | --------------- Saved variables --------------- |
||
9 | HA_Config = {}; |
||
10 | -- -= Global =- |
||
11 | -- ButtonPosition : Position of Minimap button |
||
12 | -- Auto : Auto open window in group or raid |
||
13 | -- GrowUpwards : If true, HA's main window will grow upwards |
||
14 | -- UseEstimatedHealth : Use estimated health value, base on WOUNDS/HEALS of raid members (should be more accurate than without it) |
||
15 | |||
16 | -- -= Healers =- |
||
17 | -- ShowInstants : Show instant spells in the Spell column |
||
18 | -- ShowHoT : Show HoTs in the Spell column |
||
19 | -- KeepValue : Nombre of seconds to keep showing a successfull spell |
||
20 | -- HealersClasses[] : Healing classes to show in Healers window |
||
21 | -- AllowSpellRequest[] : Spell you don't automatically deny requests for |
||
22 | -- HealersLines : Number of lines you want to see (from 1 to 10) |
||
23 | -- HealersCollapsed : True if Healers list is collapsed |
||
24 | -- NotifyRegen : True if you want to be informed when a healer goes into regen mode |
||
25 | |||
26 | -- -= Emergency =- |
||
27 | -- MinEmergencyPercent : Min percent value for showing a raider in Emergency list |
||
28 | -- EmergencyGroups[] : Groups to show in emergency window (Raid only) |
||
29 | -- EmergencyClasses[] : Classes to show in emergency window |
||
30 | -- EmergLines : Number of lines you want to see (from 1 to 6) |
||
31 | -- FilterRange : True if range filtering is active (30yards) |
||
32 | |||
33 | -- -= Plugins =- |
||
34 | -- PluginOrder[] : The order to load and call plugins |
||
35 | -- PluginAuto[] : Array of the auto loaded plugins |
||
36 | |||
37 | --------------- UI buttons --------------- |
||
38 | |||
39 | _HA_CONFIG_SLIDER_MINIMAP_INDEX = 1; |
||
40 | _HA_CONFIG_SLIDER_KEEPVALUE_INDEX = 2; |
||
41 | _HA_CONFIG_SLIDER_MINHEALTHPERCENT_INDEX = 3; |
||
42 | _HA_CONFIG_SLIDER_HEALERLINES_INDEX = 4; |
||
43 | _HA_CONFIG_SLIDER_EMERGLINES_INDEX = 5; |
||
44 | _HA_CONFIG_SLIDER_SCALE_INDEX = 6; |
||
45 | _HA_CONFIG_SLIDER_ALPHA_INDEX = 7; |
||
46 | _HA_CONFIG_SLIDER_GUI_REFRESH_INDEX = 8; |
||
47 | _HA_CONFIG_SLIDER_BACKDROP_ALPHA_INDEX = 9; |
||
48 | |||
49 | HA_Conf_Sliders = {}; |
||
50 | HA_Conf_Sliders[_HA_CONFIG_SLIDER_MINIMAP_INDEX] = { var="ButtonPosition", text=HA_GUI_MINIMAP_TITLE, low="0", high="360", min=0, max=360 }; |
||
51 | HA_Conf_Sliders[_HA_CONFIG_SLIDER_KEEPVALUE_INDEX] = { var="KeepValue", text=HA_GUI_HEALOPT_KEEP_SPELL_TITLE, low=HA_GUI_HEALOPT_KEEP_SPELL_SHORT, high=HA_GUI_HEALOPT_KEEP_SPELL_LONG, min=0, max=10 }; |
||
52 | HA_Conf_Sliders[_HA_CONFIG_SLIDER_MINHEALTHPERCENT_INDEX] = { var="MinEmergencyPercent", text=HA_GUI_EMERGOPT_MIN_HEALTH_TITLE, low=LOW, high=HIGH, min=0, max=100 }; |
||
53 | HA_Conf_Sliders[_HA_CONFIG_SLIDER_HEALERLINES_INDEX] = { var="HealersLines", text=HA_GUI_HEALOPT_LINES_TITLE, low="1", high="16", min=1, max=16 }; |
||
54 | HA_Conf_Sliders[_HA_CONFIG_SLIDER_EMERGLINES_INDEX] = { var="EmergLines", text=HA_GUI_EMERGOPT_LINES_TITLE, low="0", high="6", min=0, max=6 }; |
||
55 | HA_Conf_Sliders[_HA_CONFIG_SLIDER_SCALE_INDEX] = { var="Scale", text=HA_GUI_SCALE_TITLE, low="30%", high="150%", min=30, max=150 }; |
||
56 | HA_Conf_Sliders[_HA_CONFIG_SLIDER_ALPHA_INDEX] = { var="Alpha", text=HA_GUI_ALPHA_TITLE, low="0%", high="100%", min=0, max=100 }; |
||
57 | HA_Conf_Sliders[_HA_CONFIG_SLIDER_GUI_REFRESH_INDEX] = { var="GUIRefresh", text=HA_GUI_GUI_REFRESH_TITLE, low="100 msec", high="1 sec", min=100, max=1000 }; |
||
58 | HA_Conf_Sliders[_HA_CONFIG_SLIDER_BACKDROP_ALPHA_INDEX] = { var="BackdropAlpha", text=HA_GUI_BACKDROP_ALPHA_TITLE, low="0%", high="100%", min=0, max=100 }; |
||
59 | |||
60 | HA_Conf_CheckButtons = {}; |
||
61 | HA_Conf_CheckButtons[1] = { var = "Auto", text = HA_GUI_AUTO_OPEN }; |
||
62 | HA_Conf_CheckButtons[3] = { var = "UseEstimatedHealth", text = HA_GUI_REALTIME_LIFE_UPDATES }; |
||
63 | |||
64 | HA_Conf_CheckButtons[21] = { var = "HealersClasses", subvar = HA_ClassesID["DRUID"], text = HA_GUI_HEALOPT_CLASSES_DRUID }; |
||
65 | HA_Conf_CheckButtons[22] = { var = "HealersClasses", subvar = HA_ClassesID["PRIEST"], text = HA_GUI_HEALOPT_CLASSES_PRIEST }; |
||
66 | HA_Conf_CheckButtons[23] = { var = "HealersClasses", subvar = HA_ClassesID["PALADIN"], text = HA_GUI_HEALOPT_CLASSES_PALA_SHAM }; |
||
67 | HA_Conf_CheckButtons[25] = { var = "ShowInstants", text = HA_GUI_HEALOPT_SHOW_INSTANTS }; |
||
68 | HA_Conf_CheckButtons[26] = { var = "ShowHoT", text = HA_GUI_HEALOPT_SHOW_HOTS }; |
||
69 | HA_Conf_CheckButtons[27] = { var = "GrowUpwards", text = HA_GUI_HEALOPT_GROW_UPWARDS }; |
||
70 | HA_Conf_CheckButtons[28] = { var = "NotifyRegen", text = HA_GUI_HEALOPT_NOTIFY_REGEN }; |
||
71 | HA_Conf_CheckButtons[29] = { var = "FilterRange", text = HA_GUI_EMERGOPT_FILTER_RANGE }; |
||
72 | |||
73 | HA_Conf_CheckButtons[31] = { var = "AllowSpellRequest", subvar = HA_INNERVATE, text = HA_INNERVATE }; |
||
74 | HA_Conf_CheckButtons[32] = { var = "AllowSpellRequest", subvar = HA_REBIRTH, text = HA_REBIRTH }; |
||
75 | HA_Conf_CheckButtons[33] = { var = "AllowSpellRequest", subvar = HA_DIVINE_INTERVENTION, text = HA_DIVINE_INTERVENTION }; |
||
76 | HA_Conf_CheckButtons[34] = { var = "AllowSpellRequest", subvar = HA_LIGHTWELL, text = HA_LIGHTWELL }; |
||
77 | HA_Conf_CheckButtons[35] = { var = "AllowSpellRequest", subvar = HA_MANA_TIDE, text = HA_MANA_TIDE }; |
||
78 | HA_Conf_CheckButtons[36] = { var = "AllowSpellRequest", subvar = HA_POWER_INFUSION, text = HA_POWER_INFUSION }; |
||
79 | --HA_Conf_CheckButtons[37] = { var = "AllowSpellRequest", subvar = nil, text = nil }; |
||
80 | HA_Conf_CheckButtons[38] = { var = "AllowSpellRequest", subvar = HA_BLESSING_OF_PROTECTION, text = HA_BLESSING_OF_PROTECTION }; |
||
81 | --HA_Conf_CheckButtons[39] = { var = "AllowSpellRequest", subvar = nil, text = nil }; |
||
82 | |||
83 | |||
84 | HA_Conf_CheckButtons[41] = { var = "EmergencyGroups", subvar=1, text = HA_GUI_EMERGOPT_GRPS_G1 }; |
||
85 | HA_Conf_CheckButtons[42] = { var = "EmergencyGroups", subvar=2, text = HA_GUI_EMERGOPT_GRPS_G2 }; |
||
86 | HA_Conf_CheckButtons[43] = { var = "EmergencyGroups", subvar=3, text = HA_GUI_EMERGOPT_GRPS_G3 }; |
||
87 | HA_Conf_CheckButtons[44] = { var = "EmergencyGroups", subvar=4, text = HA_GUI_EMERGOPT_GRPS_G4 }; |
||
88 | HA_Conf_CheckButtons[45] = { var = "EmergencyGroups", subvar=5, text = HA_GUI_EMERGOPT_GRPS_G5 }; |
||
89 | HA_Conf_CheckButtons[46] = { var = "EmergencyGroups", subvar=6, text = HA_GUI_EMERGOPT_GRPS_G6 }; |
||
90 | HA_Conf_CheckButtons[47] = { var = "EmergencyGroups", subvar=7, text = HA_GUI_EMERGOPT_GRPS_G7 }; |
||
91 | HA_Conf_CheckButtons[48] = { var = "EmergencyGroups", subvar=8, text = HA_GUI_EMERGOPT_GRPS_G8 }; |
||
92 | |||
93 | HA_Conf_CheckButtons[61] = { var = "EmergencyClasses", subvar = HA_ClassesID["DRUID"], text = HA_GUI_EMERGOPT_CLASSES_DRUID }; |
||
94 | HA_Conf_CheckButtons[62] = { var = "EmergencyClasses", subvar = HA_ClassesID["HUNTER"], text = HA_GUI_EMERGOPT_CLASSES_HUNTER }; |
||
95 | HA_Conf_CheckButtons[63] = { var = "EmergencyClasses", subvar = HA_ClassesID["MAGE"], text = HA_GUI_EMERGOPT_CLASSES_MAGE }; |
||
96 | HA_Conf_CheckButtons[64] = { var = "EmergencyClasses", subvar = HA_ClassesID["PRIEST"], text = HA_GUI_EMERGOPT_CLASSES_PRIEST }; |
||
97 | HA_Conf_CheckButtons[65] = { var = "EmergencyClasses", subvar = HA_ClassesID["ROGUE"], text = HA_GUI_EMERGOPT_CLASSES_ROGUE }; |
||
98 | HA_Conf_CheckButtons[66] = { var = "EmergencyClasses", subvar = HA_ClassesID["WARLOCK"], text = HA_GUI_EMERGOPT_CLASSES_WARLOCK }; |
||
99 | HA_Conf_CheckButtons[67] = { var = "EmergencyClasses", subvar = HA_ClassesID["WARRIOR"], text = HA_GUI_EMERGOPT_CLASSES_WARRIOR }; |
||
100 | HA_Conf_CheckButtons[68] = { var = "EmergencyClasses", subvar = HA_ClassesID["PALADIN"], text = HA_GUI_EMERGOPT_CLASSES_PALA_SHAM }; |
||
101 | |||
102 | |||
103 | --------------- Shared variables --------------- |
||
104 | |||
105 | --------------- Local variables --------------- |
||
106 | |||
107 | |||
108 | --------------- Internal functions --------------- |
||
109 | |||
110 | --------------- XML functions --------------- |
||
111 | |||
112 | function HA_MoveMinimapButton() |
||
113 | HAMinimapButton:SetPoint("TOPLEFT", "Minimap", "TOPLEFT", 48 - (80 * cos(HA_Config.ButtonPosition)), (80 * sin(HA_Config.ButtonPosition)) - 52); |
||
114 | end |
||
115 | |||
116 | function HA_Toggle() |
||
117 | if(HealersAssistMainFrame:IsVisible()) |
||
118 | then |
||
119 | HealersAssistMainFrame:Hide(); |
||
120 | else |
||
121 | HealersAssistMainFrame:Show(); |
||
122 | end |
||
123 | end |
||
124 | |||
125 | function HA_ToggleDropDown() |
||
126 | if(TitanPanelFrame_OnLoad ~= nil) |
||
127 | then |
||
128 | HA_DropDown.point = "TOPRIGHT"; |
||
129 | HA_DropDown.relativePoint = "TOPLEFT"; |
||
130 | else |
||
131 | HA_DropDown.point = "TOPLEFT"; |
||
132 | HA_DropDown.relativePoint = "TOPLEFT"; |
||
133 | end |
||
134 | HA_DropDown.relativeTo="HAMinimapButton"; |
||
135 | ToggleDropDownMenu(1, nil, HA_DropDown); |
||
136 | end |
||
137 | |||
138 | function HA_DropDown_OnLoad() |
||
139 | UIDropDownMenu_Initialize(this, HA_DropDown_Initialize, "MENU"); |
||
140 | end |
||
141 | |||
142 | function HA_DropDown_Initialize() |
||
143 | local dropdown; |
||
144 | if ( UIDROPDOWNMENU_OPEN_MENU ) then |
||
145 | dropdown = getglobal(UIDROPDOWNMENU_OPEN_MENU); |
||
146 | else |
||
147 | dropdown = this; |
||
148 | end |
||
149 | HA_DropDown_InitButtons(); |
||
150 | end |
||
151 | |||
152 | function HA_DropDown_InitButtons() |
||
153 | local info = {}; |
||
154 | |||
155 | info.text = "HA Options"; |
||
156 | info.isTitle = 1; |
||
157 | info.justifyH = "CENTER"; |
||
158 | info.notCheckable = 1; |
||
159 | UIDropDownMenu_AddButton(info); |
||
160 | |||
161 | info = { }; |
||
162 | info.text = HA_GUI_SUBMENU_OPEN_OPTIONS; |
||
163 | info.notCheckable = 1; |
||
164 | info.func = HA_ToggleOption; |
||
165 | UIDropDownMenu_AddButton(info); |
||
166 | |||
167 | info = { }; |
||
168 | if(HA_Config.Lock) |
||
169 | then |
||
170 | info.text = HA_GUI_SUBMENU_UNLOCK; |
||
171 | else |
||
172 | info.text = HA_GUI_SUBMENU_LOCK; |
||
173 | end |
||
174 | info.notCheckable = 1; |
||
175 | info.func = HA_ToggleLock; |
||
176 | UIDropDownMenu_AddButton(info); |
||
177 | end |
||
178 | |||
179 | function HA_ToggleOption() |
||
180 | if(HAConfFrame:IsVisible()) |
||
181 | then |
||
182 | HAConfFrame:Hide(); |
||
183 | else |
||
184 | HAConfFrame:Show(); |
||
185 | end |
||
186 | end |
||
187 | |||
188 | function HA_ToggleLock() |
||
189 | if(HA_Config.Lock) |
||
190 | then |
||
191 | HA_Config.Lock = nil; |
||
192 | else |
||
193 | HA_Config.Lock = true; |
||
194 | end |
||
195 | HA_SetNewLock(false); |
||
196 | end |
||
197 | |||
198 | function HA_Config_SetNewSliderValue(slider) |
||
199 | local id = slider:GetParent():GetID(); |
||
200 | local value = HA_Conf_Sliders[id]; |
||
201 | HA_Config[value.var] = slider:GetValue(); |
||
202 | |||
203 | if(id == _HA_CONFIG_SLIDER_MINIMAP_INDEX) -- Check dependencies |
||
204 | then |
||
205 | HA_MoveMinimapButton(); |
||
206 | elseif(id == _HA_CONFIG_SLIDER_KEEPVALUE_INDEX) |
||
207 | then |
||
208 | getglobal("HAConfFrameSlider".._HA_CONFIG_SLIDER_KEEPVALUE_INDEX.."SliderTitle"):SetText(HA_GUI_HEALOPT_KEEP_SPELL_TITLE..HA_Config[value.var].."sec"); |
||
209 | elseif(id == _HA_CONFIG_SLIDER_MINHEALTHPERCENT_INDEX) |
||
210 | then |
||
211 | getglobal("HAConfFrameSlider".._HA_CONFIG_SLIDER_MINHEALTHPERCENT_INDEX.."SliderTitle"):SetText(HA_GUI_EMERGOPT_MIN_HEALTH_TITLE..HA_Config[value.var].."%"); |
||
212 | elseif(id == _HA_CONFIG_SLIDER_HEALERLINES_INDEX) |
||
213 | then |
||
214 | getglobal("HAConfFrameSlider".._HA_CONFIG_SLIDER_HEALERLINES_INDEX.."SliderTitle"):SetText(HA_GUI_HEALOPT_LINES_TITLE..HA_Config[value.var]); |
||
215 | HA_SetWidgetSizeAndPosition(); |
||
216 | elseif(id == _HA_CONFIG_SLIDER_EMERGLINES_INDEX) |
||
217 | then |
||
218 | getglobal("HAConfFrameSlider".._HA_CONFIG_SLIDER_EMERGLINES_INDEX.."SliderTitle"):SetText(HA_GUI_EMERGOPT_LINES_TITLE..HA_Config[value.var]); |
||
219 | HA_SetWidgetSizeAndPosition(); |
||
220 | elseif(id == _HA_CONFIG_SLIDER_SCALE_INDEX) |
||
221 | then |
||
222 | getglobal("HAConfFrameSlider".._HA_CONFIG_SLIDER_SCALE_INDEX.."SliderTitle"):SetText(HA_GUI_SCALE_TITLE..HA_Config[value.var].."%"); |
||
223 | HA_SetWidgetSizeAndPosition(); |
||
224 | elseif(id == _HA_CONFIG_SLIDER_ALPHA_INDEX) |
||
225 | then |
||
226 | getglobal("HAConfFrameSlider".._HA_CONFIG_SLIDER_ALPHA_INDEX.."SliderTitle"):SetText(HA_GUI_ALPHA_TITLE..HA_Config[value.var].."%"); |
||
227 | HA_SetWidgetSizeAndPosition(); |
||
228 | elseif(id == _HA_CONFIG_SLIDER_GUI_REFRESH_INDEX) |
||
229 | then |
||
230 | getglobal("HAConfFrameSlider".._HA_CONFIG_SLIDER_GUI_REFRESH_INDEX.."SliderTitle"):SetText(HA_GUI_GUI_REFRESH_TITLE..HA_Config[value.var].." msec"); |
||
231 | HA_SetWidgetSizeAndPosition(); |
||
232 | elseif(id == _HA_CONFIG_SLIDER_BACKDROP_ALPHA_INDEX) |
||
233 | then |
||
234 | getglobal("HAConfFrameSlider".._HA_CONFIG_SLIDER_BACKDROP_ALPHA_INDEX.."SliderTitle"):SetText(HA_GUI_BACKDROP_ALPHA_TITLE..HA_Config[value.var].."%"); |
||
235 | HA_SetWidgetSizeAndPosition(); |
||
236 | end |
||
237 | end |
||
238 | |||
239 | function HA_Config_SetNewCheckState(button) |
||
240 | local new_state = false; |
||
241 | if(button:GetChecked()) |
||
242 | then |
||
243 | new_state = true; |
||
244 | end |
||
245 | local id = button:GetID(); |
||
246 | local value = HA_Conf_CheckButtons[id]; |
||
247 | if(value.subvar) |
||
248 | then |
||
249 | HA_Config[value.var][value.subvar] = new_state; |
||
250 | else |
||
251 | HA_Config[value.var] = new_state; |
||
252 | end |
||
253 | end |
||
254 | |||
255 | function HA_Config_OnLoad() |
||
256 | end |
||
257 | |||
258 | function HA_Config_Menu_OnShow() |
||
259 | -- Debug |
||
260 | if(HA_Config.Debug) |
||
261 | then |
||
262 | HA_Conf_Sliders[_HA_CONFIG_SLIDER_MINHEALTHPERCENT_INDEX].max=101; |
||
263 | end |
||
264 | |||
265 | -- Check buttons |
||
266 | local button, string, checked; |
||
267 | for index, value in HA_Conf_CheckButtons |
||
268 | do |
||
269 | button = getglobal("HAConfFrameCheckButton"..index); |
||
270 | string = getglobal("HAConfFrameCheckButton"..index.."Text"); |
||
271 | checked = nil; |
||
272 | if(value.subvar) |
||
273 | then |
||
274 | checked = HA_Config[value.var][value.subvar]; |
||
275 | else |
||
276 | checked = HA_Config[value.var]; |
||
277 | end |
||
278 | button:SetChecked(checked); |
||
279 | string:SetText(value.text); |
||
280 | end |
||
281 | -- Sliders |
||
282 | local slider, string, low, high; |
||
283 | for index, value in HA_Conf_Sliders |
||
284 | do |
||
285 | slider = getglobal("HAConfFrameSlider"..index.."Slider"); |
||
286 | string = getglobal("HAConfFrameSlider"..index.."SliderTitle"); |
||
287 | low = getglobal("HAConfFrameSlider"..index.."SliderLow"); |
||
288 | high = getglobal("HAConfFrameSlider"..index.."SliderHigh"); |
||
289 | slider:SetMinMaxValues(value.min,value.max); |
||
290 | slider:SetValueStep(1); |
||
291 | slider:SetValue(HA_Config[value.var]); |
||
292 | string:SetText(value.text); |
||
293 | low:SetText(value.low); |
||
294 | high:SetText(value.high); |
||
295 | HA_Config_SetNewSliderValue(slider); |
||
296 | end |
||
297 | end |
||
298 | |||
299 | function HA_Config_General_OnShow() |
||
300 | HA_Config_Menu_OnShow(); |
||
301 | end |
||
302 | |||
303 | function HA_Config_Healers_OnShow() |
||
304 | HA_Config_Menu_OnShow(); |
||
305 | -- Check if RequestSpells are known |
||
306 | for i=31,39 |
||
307 | do |
||
308 | if(HA_Conf_CheckButtons[i] and HA_SpellCooldowns[HA_Conf_CheckButtons[i].subvar] == nil) -- Not available |
||
309 | then |
||
310 | getglobal("HAConfFrameCheckButton"..i):Disable(); |
||
311 | getglobal("HAConfFrameCheckButton"..i.."Text"):SetTextColor(0.6,0.6,0.6); |
||
312 | end |
||
313 | end |
||
314 | end |
||
315 | |||
316 | function HA_Config_Emergency_OnShow() |
||
317 | HA_Config_Menu_OnShow(); |
||
318 | end |
||
319 | |||
320 | function HA_Config_Plugins_OnShow() |
||
321 | HA_Config_Menu_OnShow(); |
||
322 | HA_Config_Plugins_UpdateList(); |
||
323 | end |
||
324 | |||
325 | function HA_Config_OnShow() |
||
326 | end |
||
327 | |||
328 | -------- HELP ------ |
||
329 | function HA_Help_SetTooltip() |
||
330 | local uiX, uiY = UIParent:GetCenter(); |
||
331 | local thisX, thisY = this:GetCenter(); |
||
332 | |||
333 | local anchor = ""; |
||
334 | if ( thisY > uiY ) then |
||
335 | anchor = "BOTTOM"; |
||
336 | else |
||
337 | anchor = "TOP"; |
||
338 | end |
||
339 | |||
340 | if ( thisX < uiX ) then |
||
341 | if ( anchor == "TOP" ) then |
||
342 | anchor = "TOPLEFT"; |
||
343 | else |
||
344 | anchor = "BOTTOMRIGHT"; |
||
345 | end |
||
346 | else |
||
347 | if ( anchor == "TOP" ) then |
||
348 | anchor = "TOPRIGHT"; |
||
349 | else |
||
350 | anchor = "BOTTOMLEFT"; |
||
351 | end |
||
352 | end |
||
353 | GameTooltip:SetOwner(this, "ANCHOR_" .. anchor); |
||
354 | end |
||
355 | |||
356 | function HA_Help_LoadText() |
||
357 | local texts = { |
||
358 | HA_HELP_CHAN_OPT, |
||
359 | HA_HELP_HEAL_OPT, |
||
360 | HA_HELP_EMERG_OPT, |
||
361 | }; |
||
362 | |||
363 | this.text = texts[this:GetID()]; |
||
364 | end |
||
365 |