• 🏆 Texturing Contest #33 is OPEN! Contestants must re-texture a SD unit model found in-game (Warcraft 3 Classic), recreating the unit into a peaceful NPC version. 🔗Click here to enter!
  • It's time for the first HD Modeling Contest of 2024. Join the theme discussion for Hive's HD Modeling Contest #6! Click here to post your idea!

Blazing Phoenix v.01

This bundle is marked as useful / simple. Simplicity is bliss, low effort and/or may contain minor bugs.
This is the first time I post a spell that 100% created by me. Pls give credit if use or edit, feel free to comment because i'm still newbie :D.

Description: A legendary skill from Ancient War II that almost kill every enemey in one shot. The caster gather a mysterious force of fire in his hand, then release the force by shooting it. The phoenix will born form the force and fly foward followed by destructive lava and fire that burn enemy.

I recommended you to use this spell as a ultimate if you use this on a Hero-type map.
Thanks for everyone who help me fixing this spell especially Magtheridon96!!
Update 2 April: Trigger change, description change

Initialization
Events
Map initialization
Conditions
Actions
Set max_index = 20
Trigger - Turn off Blazing Fire <gen>[/trigger]
  • Blazing Cast
    • Events
      • Unit - A unit Starts the effect of an ability
    • Conditions
      • (Ability being cast) Equal to Blazing Phoenix
    • Actions
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • index Greater than or equal to max_index
        • Then - Actions
          • Set index = 0
        • Else - Actions
      • Set index = (index + 1)
      • Set boolean[index] = True
      • Set Blazing_hero[index] = (Triggering unit)
      • Set Blazing_point1[index] = (Position of Blazing_hero[index])
      • Set Blazing_point2[index] = (Blazing_point1[index] offset by 2000.00 towards (Facing of Blazing_hero[index]) degrees)
      • Unit - Create 1 Dummy_ball for (Owner of Blazing_hero[index]) at Blazing_point1[index] facing Default building facing degrees
      • Set Blazing_dummy_ball[index] = (Last created unit)
      • Unit - Add a 4.00 second Generic expiration timer to Blazing_dummy_ball[index]
      • Unit - Add Dummy_avatar to Blazing_dummy_ball[index]
      • Unit - Order Blazing_dummy_ball[index] to Human Mountain King - Activate Avatar
      • Set counter[index] = 80
      • Trigger - Turn on Blazing Fire <gen>
      • Trigger - Turn on Blazing Off <gen>
  • Blazing Fire
    • Events
      • Time - Every 0.10 seconds of game time
    • Conditions
    • Actions
      • For each (Integer index) from 1 to max_index, do (Actions)
        • Loop - Actions
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • boolean[index] Equal to True
            • Then - Actions
              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                • If - Conditions
                  • counter[index] Equal to 50
                • Then - Actions
                  • Unit - Create 1 Phoenix Spirit for (Owner of Blazing_hero[index]) at Blazing_point1[index] facing Default building facing degrees
                  • Set Blazing_dummy_phoenix[index] = (Last created unit)
                  • Unit - Add a 5.00 second Generic expiration timer to Blazing_dummy_phoenix[index]
                  • Unit - Order Blazing_dummy_phoenix[index] to Move To Blazing_point2[index]
                  • Unit - Create 1 InvisibleCaster for (Owner of Blazing_hero[index]) at Blazing_point1[index] facing Default building facing degrees
                  • Set Invisible_caster[index] = (Last created unit)
                  • Unit - Add a 5.00 second Generic expiration timer to Invisible_caster[index]
                • Else - Actions
              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                • If - Conditions
                  • counter[index] Less than 50
                • Then - Actions
                  • Set Blazing_point3[index] = (Position of Blazing_dummy_phoenix[index])
                  • Unit - Order Invisible_caster[index] to Human Blood Mage - Flame Strike Blazing_point3[index]
                  • Custom script: call RemoveLocation(udg_Blazing_point3[udg_index])
                • Else - Actions
              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                • If - Conditions
                  • counter[index] Less than or equal to 0
                • Then - Actions
                  • Set boolean[index] = False
                  • Custom script: call RemoveLocation(udg_Blazing_point1[udg_index])
                  • Custom script: call RemoveLocation(udg_Blazing_point2[udg_index])
                • Else - Actions
              • Set counter[index] = (counter[index] - 1)
            • Else - Actions
  • Blazing Off
    • Events
      • Unit - A unit Dies
    • Conditions
    • Actions
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • (Triggering unit) Equal to Invisible_caster[index]
        • Then - Actions
          • Trigger - Turn off Blazing Fire <gen>
          • Trigger - Turn off Blazing Off <gen>
        • Else - Actions






Keywords:
blazing, phoenix, fire, flame, xokelat, ultimate
Contents

Blazing Phoenix v.01 (Map)

Reviews
12.12 IcemanBo: For long time as NeedsFix. Rejected. 15:09, 1st Jun 2011 Maker: You loop from 1 to 20 regardless of how many spell instances there are. The spell spams too many effects. The triggers are never turned off, and Blazing Fire and...

Moderator

M

Moderator

12.12
IcemanBo: For long time as NeedsFix. Rejected.

15:09, 1st Jun 2011
Maker:
You loop from 1 to 20 regardless of how many spell instances there are.
The spell spams too many effects.
The triggers are never turned off, and Blazing Fire and Blazing Off triggers should be initially off.
The if/then/else structure should be reorganized.
 
Level 4
Joined
Nov 25, 2010
Messages
59
@Axarion I want to make an effect like the archer holding his attack position with some red energy force on his arm so i try to reset his animation speed and pause it. The wait I use because i want to make the energy bigger & bigger and then explode as a phoenix..

i have no idea, what should i do? thanks
 
You turn off the loop at map init ....
Why?
Just set it to "Initially Off"
You shouldn't use waits here
Pausing units could bug
Instead of waits, you could create a loop trigger with a counter array (indexed)
The counter will keep decreasing with each instance and when it reaches 0, the loop will turn off :D
 
This isn't MUI (cannot be casted by more then one unit at one time), uses waits, is extremely simple (in my opinion). Because it isn't MUI for me thats like -2/5 and the waits.. well thats about -1/5. So I guess I'll give you 2/5, if you improve this I won't vote for rejection. I'll also change my 2/5 to something higher.
Keep making spells though ;p
 
Thanks dude, but idk how to create a counter array... sorry. Btw, instead of pausing units, what can i do? increasing casting time?

I'll teach you step by step
For now, just create an integer variable (not array)
In the cast trigger, set the integer to 50
In the loop, create an if/then/else action.
If the integer is less than or equal to 0, then the loop is turned off
Else, you order the unit to do wtvr
After the if/then/else action, set the integer to itself + 1
  • Set integer = (integer + 1)
The counter is equal to 50 because apparently, you want the duration to
be 5 seconds, and the loop runs every 0.10 seconds.
5 seconds / 0.10 seconds = 50 :D
When you wanna change the duration and the periodic event in
the loop, then dont forget to change the duration.

Your spell is one step closer to being MUI

Remove the wait:
  • Wait 0.02 seconds
Now, to remove this one:
  • Wait 3.00 seconds
We have to go back to the first step.
Your spell duration is a total of 8 seconds.
The loop actions arent supposed to run when the spell begins, instead,
you want them to run 3.00 seconds after.
This is why we have to move the Set the integer to 80 (The total spell time)
Also, we have to change the condition for the if/then/else thing to
If Integer is equal to 50 or less than, the action will be executed
We will have to create a new if/then/else action to manage turning off the loop

If The integer is equal to 0 or less, then the trigger will turn off

For what happens after 3 seconds,
we create an action in the loop that checks if integer is only equal to 50.
It will execute the actions, then it will continue to execute every 0.10
seconds and decreasing integer by 1 (At the end of the trigger) until it
reaches 50 after 3 seconds. Then it will continuously order the unit to
do wtvr until it reaches 0, which will cause the loop to turn off, and then
the locations will be removed (not in the cast trigger)

Also, you leak here:
  • Unit - Order Invisible_caster to Human Blood Mage - Flame Strike (Position of Blazing_dummy_phoenix)
Position of Blazing_dummy_phoenix


After you do this, upload your spell, then it'll be easier to show you how to make it MUI


This way, your spell will work fine.

----------------------------------------
how to make it MUI:

Create a new integer variable and call it "index"
Create a new integer variable and call it "max_index"
Create a new integer (array) variable and call it "boolean"

Array all your variables except index and max_index
(NOTE: This will reset most of your actions, but recovery is simple)
All the variable should be arrayed with "index" like this:

  • Set Blazing_hero[index] = (Triggering Unit)
Set Max_index to 20 or 30 at Map initialization

Create an if then else action in the cast trigger that checks if index is
greater than or equal to max_index

If it is, then Set Index to 0

After the if then else thing, create an action that increases index by 1

  • Set index = (index + 1)
Then, set The boolean to true

In the loop trigger, create a For each integer variable action:
For each "index" from 1 to Max_index

Then create an if/then/else action in the For each integer variable thing that checks if
boolean equals true. If yes, then it will execute each action

But, in the part that says if integer = 0, remove the "turn off trigger" thing and add this:

  • Set Boolean = False
Create another trigger that waits until the variable "integer" (the one that decreases by 1
with each instance of the loop)

It checks if the variable "integer[index]" equals 0 (This works since index is refering to the
last instance and thus it corresponds to the data of the last cast. Thus ... wtvr This works :D)

Then it will turn off the loop trigger. (This trigger that you just created should be initially off.
It will turned on in the cast trigger AFTER you set "integer" to 80)

Btw, if i didnt mention this before, at the end of the cast trigger, we turn on
the loop trigger.

Congratulations :D
Your spell is MUI :D

Give yourself a pat on the back :ap:

----------------------------------------------------------------------------------------------
Instead of pausing the hero, make the spell channeling by basing it off of "Channel"

Set the "Follow Through Time" to 3 seconds and specify the animation you want the hero to play
in the top.

Also, set the Options to: Visible
And make the spell "instant"

Set "Disable Other Abilities" to false
And make sure "Art duration" is equal to about 1.3 seconds (Average Attack animation time)
Animation speed is set in the triggers btw.

With all these settings, the spell is channeling and it will cancel when the caster moves
before the dummy pheonix is created
----------------------------------------------------------------------------------------------

I hope this long post helped you and didnt just crash internet explorer :D
Good luck and welcome to the living hell that: MUI Coding :ap:
 
Last edited:
Level 4
Joined
Nov 25, 2010
Messages
59
thanks for all support, im trying to do what magtheridon says.

@Magtheridon : i create
  • For each (Integer A) from 1 to 10, do (Actions)
    • Loop - Actions
      • If (Integer Less than or equal to 0) then do (Animation - Play Blazing_hero's attack animation) else do (Do nothing)
      • Unit - Pause Blazing_hero
      • Unit - Create 1 Dummy_ball for (Owner of Blazing_hero) at Blazing_point[2] facing Default building facing degrees
      • Set Blazing_dummy_ball = (Last created unit)
      • Unit - Add a 4.00 second Generic expiration timer to Blazing_dummy_ball
      • Unit - Add Dummy_avatar to Blazing_dummy_ball
      • Unit - Order Blazing_dummy_ball to Human Mountain King - Activate Avatar
      • Wait 3.00 seconds
      • Unit - Unpause Blazing_hero
      • Animation - Play Blazing_hero's attack animation
      • Unit - Create 1 Phoenix Spirit for (Owner of Blazing_hero) at Blazing_point[2] facing Default building facing degrees
      • Set Blazing_dummy_phoenix = (Last created unit)
      • Unit - Add a 5.00 second Generic expiration timer to Blazing_dummy_phoenix
      • Unit - Order Blazing_dummy_phoenix to Move To Blazing_point[3]
      • Unit - Create 1 InvisibleCaster for (Owner of Blazing_hero) at Blazing_point[2] facing Default building facing degrees
      • Set Invisible_caster = (Last created unit)
      • Unit - Add a 5.00 second Generic expiration timer to Invisible_caster
      • Trigger - Turn on Blazing Fire <gen>
Is it right?? So all the action will be loop and i'll just put
  • set integer = (integer +1)
? Sorry newbies
 
*Face Palm*

--------
I will edit this post within 10 minutes.
--------
Your code should look something like this:
  • Blazing Cast
    • Events
      • Unit - A unit Starts the effect of an ability
    • Conditions
      • (Ability being cast) Equal to Blazing Pheonix FIXED
    • Actions
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • Blazing_Index Greater than or equal to Blazing_Max_Index
        • Then - Actions
          • Set Blazing_Index = 0
        • Else - Actions
      • Set Blazing_Index = (Blazing_Index + 1)
      • Set Blazing_Boolean[Blazing_Index] = True
      • Set Blazing_Caster[Blazing_Index] = (Triggering unit)
      • Set Blazing_Point1[Blazing_Index] = (Position of Blazing_Caster[Blazing_Index])
      • Set Blazing_TargetLoc[Blazing_Index] = (Target point of ability being cast)
      • Set Blazing_Angle[Blazing_Index] = (Angle from Blazing_Point1[Blazing_Index] to Blazing_TargetLoc[Blazing_Index])
      • Set Blazing_Point2[Blazing_Index] = (Blazing_Point1[Blazing_Index] offset by 1500.00 towards Blazing_Angle[Blazing_Index] degrees)
      • Unit - Create 1 Dummy_ball for (Triggering player) at Blazing_Point1[Blazing_Index] facing Default building facing degrees
      • Set Blazing_DummyBall[Blazing_Index] = (Last created unit)
      • Unit - Add a 4.00 second Generic expiration timer to Blazing_DummyBall[Blazing_Index]
      • Unit - Add Dummy_avatar to Blazing_DummyBall[Blazing_Index]
      • Unit - Order Blazing_DummyBall[Blazing_Index] to Human Mountain King - Activate Avatar
      • Set Blazing_Counter[Blazing_Index] = 80
      • Trigger - Turn on Blazing Loop <gen>
      • Trigger - Turn on Blazing Off <gen>
  • Blazing Loop
    • Events
      • Time - Every 0.10 seconds of game time
    • Conditions
    • Actions
      • For each (Integer Blazing_Index) from 1 to Blazing_Max_Index, do (Actions)
        • Loop - Actions
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • Blazing_Boolean[Blazing_Index] Equal to True
            • Then - Actions
              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                • If - Conditions
                  • Blazing_Counter[Blazing_Index] Equal to 50
                • Then - Actions
                  • Unit - Create 1 Phoenix Spirit for (Triggering player) at Blazing_Point1[Blazing_Index] facing Blazing_Angle[Blazing_Index] degrees
                  • Set Blazing_DummyPhoenix[Blazing_Index] = (Last created unit)
                  • Unit - Add a 5.00 second Generic expiration timer to Blazing_DummyPhoenix[Blazing_Index]
                  • Unit - Order Blazing_DummyPhoenix[Blazing_Index] to Move To Blazing_Point2[Blazing_Index]
                  • Unit - Create 1 InvisibleCaster for (Triggering player) at Blazing_Point1[Blazing_Index] facing Default building facing degrees
                  • Set Blazing_Dummy[Blazing_Index] = (Last created unit)
                  • Unit - Add a 5.00 second Generic expiration timer to Blazing_Dummy[Blazing_Index]
                • Else - Actions
              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                • If - Conditions
                  • Blazing_Counter[Blazing_Index] Less than 50
                • Then - Actions
                  • Set Blazing_Point3[Blazing_Index] = (Position of Blazing_DummyPhoenix[Blazing_Index])
                  • Unit - Order Blazing_Dummy[Blazing_Index] to Human Blood Mage - Flame Strike Blazing_Point3[Blazing_Index]
                  • Custom script: call RemoveLocation(udg_Blazing_Point3[udg_Blazing_Index])
                • Else - Actions
              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                • If - Conditions
                  • Blazing_Counter[Blazing_Index] Less than or equal to 0
                • Then - Actions
                  • Set Blazing_Boolean[Blazing_Index] = False
                  • Custom script: call RemoveLocation(udg_Blazing_Point1[udg_Blazing_Index])
                  • Custom script: call RemoveLocation(udg_Blazing_Point2[udg_Blazing_Index])
                • Else - Actions
              • Set Blazing_Counter[Blazing_Index] = (Blazing_Counter[Blazing_Index] - 1)
            • Else - Actions
  • Blazing Off
    • Events
      • Unit - A unit Dies
    • Conditions
    • Actions
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • (Triggering unit) Equal to Blazing_Dummy[Blazing_Index]
        • Then - Actions
          • Trigger - Turn off Blazing Loop <gen>
          • Trigger - Turn off Blazing Off <gen>
        • Else - Actions
I leaked Blazing_TargetLoc lol
Sorry bout that
I dont have time to fix it
 
Last edited:
Level 4
Joined
Nov 25, 2010
Messages
59
  • Blazing Cast
    • Events
      • Unit - A unit Starts the effect of an ability
    • Conditions
      • (Ability being cast) Equal to Blazing Phoenix
    • Actions
      • Set Blazing_hero = (Triggering unit)
      • Set Blazing_point[1] = (Position of Blazing_hero)
      • Set Blazing_point[2] = (Blazing_point[1] offset by 20.00 towards (Facing of Blazing_hero) degrees)
      • Set Blazing_point[3] = (Blazing_point[1] offset by 15000.00 towards (Facing of Blazing_hero) degrees)
      • Set Integer = 80
      • For each (Integer A) from 1 to 10, do (Actions)
        • Loop - Actions
          • If (Integer Equal to 50) then do (Animation - Play Blazing_hero's attack animation) else do (Do nothing)
          • Set Integer = (Integer + 1)
      • Unit - Create 1 Dummy_ball for (Owner of Blazing_hero) at Blazing_point[2] facing Default building facing degrees
      • Set Blazing_dummy_ball = (Last created unit)
      • Unit - Add a 4.00 second Generic expiration timer to Blazing_dummy_ball
      • Unit - Add Dummy_avatar to Blazing_dummy_ball
      • Unit - Order Blazing_dummy_ball to Human Mountain King - Activate Avatar
      • If (Integer Less than or equal to 0) then do (Trigger - Turn off (This trigger)) else do (Do nothing)
      • Animation - Play Blazing_hero's attack animation
      • Unit - Create 1 Phoenix Spirit for (Owner of Blazing_hero) at Blazing_point[2] facing Default building facing degrees
      • Set Blazing_dummy_phoenix = (Last created unit)
      • Unit - Add a 5.00 second Generic expiration timer to Blazing_dummy_phoenix
      • Unit - Order Blazing_dummy_phoenix to Move To Blazing_point[3]
      • Unit - Create 1 InvisibleCaster for (Owner of Blazing_hero) at Blazing_point[2] facing Default building facing degrees
      • Set Invisible_caster = (Last created unit)
      • Unit - Add a 5.00 second Generic expiration timer to Invisible_caster
      • Trigger - Turn on Blazing Fire <gen>
      • Custom script: call RemoveLocation(udg_Blazing_point[1])
      • Custom script: call RemoveLocation(udg_Blazing_point[2])
      • Custom script: call RemoveLocation(udg_Blazing_point[3])
My head gonna explode!! Well, then we do nothing in the Blazing Fire trigger right? or wrong?? BTW, how we set the boolean = true ,because you said above that boolean is array...
 
Last edited:
One more thing. I gave you a bad and inefficient indexing system since i saw you
were a beginner. Now that you actually posted a working MUI leakless spell, I
think you're ready for a much better indexing system. Go to the spells section
and search "Rmx". He has some awesome guides for GUI/MUI spells, indexing, recycling
indexes dynamically, etc...

I really recommend downloading the Guide for GUI/MUI.
It's awesome!
I learned how to make a pretty good index recycling system with it.
Trust me on this.
Sorry, i can't give a link. :(
 
xokelat you should be jumping up and down for people like Magtheridon96 I mean look how long he took to post this:
I'll teach you step by step
For now, just create an integer variable (not array)
In the cast trigger, set the integer to 50
In the loop, create an if/then/else action.
If the integer is less than or equal to 0, then the loop is turned off
Else, you order the unit to do wtvr
After the if/then/else action, set the integer to itself + 1
  • Set integer = (integer + 1)
The counter is equal to 50 because apparently, you want the duration to
be 5 seconds, and the loop runs every 0.10 seconds.
5 seconds / 0.10 seconds = 50 :D
When you wanna change the duration and the periodic event in
the loop, then dont forget to change the duration.

Your spell is one step closer to being MUI

Remove the wait:
  • Wait 0.02 seconds
Now, to remove this one:
  • Wait 3.00 seconds
We have to go back to the first step.
Your spell duration is a total of 8 seconds.
The loop actions arent supposed to run when the spell begins, instead,
you want them to run 3.00 seconds after.
This is why we have to move the Set the integer to 80 (The total spell time)
Also, we have to change the condition for the if/then/else thing to
If Integer is equal to 50 or less than, the action will be executed
We will have to create a new if/then/else action to manage turning off the loop

If The integer is equal to 0 or less, then the trigger will turn off

For what happens after 3 seconds,
we create an action in the loop that checks if integer is only equal to 50.
It will execute the actions, then it will continue to execute every 0.10
seconds and decreasing integer by 1 (At the end of the trigger) until it
reaches 50 after 3 seconds. Then it will continuously order the unit to
do wtvr until it reaches 0, which will cause the loop to turn off, and then
the locations will be removed (not in the cast trigger)

Also, you leak here:
  • Unit - Order Invisible_caster to Human Blood Mage - Flame Strike (Position of Blazing_dummy_phoenix)
Position of Blazing_dummy_phoenix


After you do this, upload your spell, then it'll be easier to show you how to make it MUI


This way, your spell will work fine.

----------------------------------------
how to make it MUI:

Create a new integer variable and call it "index"
Create a new integer variable and call it "max_index"
Create a new integer (array) variable and call it "boolean"

Array all your variables except index and max_index
(NOTE: This will reset most of your actions, but recovery is simple)
All the variable should be arrayed with "index" like this:

  • Set Blazing_hero[index] = (Triggering Unit)
Set Max_index to 20 or 30 at Map initialization

Create an if then else action in the cast trigger that checks if index is
greater than or equal to max_index

If it is, then Set Index to 0

After the if then else thing, create an action that increases index by 1

  • Set index = (index + 1)
Then, set The boolean to true

In the loop trigger, create a For each integer variable action:
For each "index" from 1 to Max_index

Then create an if/then/else action in the For each integer variable thing that checks if
boolean equals true. If yes, then it will execute each action

But, in the part that says if integer = 0, remove the "turn off trigger" thing and add this:

  • Set Boolean = False
Create another trigger that waits until the variable "integer" (the one that decreases by 1
with each instance of the loop)

It checks if the variable "integer[index]" equals 0 (This works since index is refering to the
last instance and thus it corresponds to the data of the last cast. Thus ... wtvr This works :D)

Then it will turn off the loop trigger. (This trigger that you just created should be initially off.
It will turned on in the cast trigger AFTER you set "integer" to 80)

Btw, if i didnt mention this before, at the end of the cast trigger, we turn on
the loop trigger.

Congratulations :D
Your spell is MUI :D

Give yourself a pat on the back :ap:

----------------------------------------------------------------------------------------------
Instead of pausing the hero, make the spell channeling by basing it off of "Channel"

Set the "Follow Through Time" to 3 seconds and specify the animation you want the hero to play
in the top.

Also, set the Options to: Visible
And make the spell "instant"

Set "Disable Other Abilities" to false
And make sure "Art duration" is equal to about 1.3 seconds (Average Attack animation time)
Animation speed is set in the triggers btw.

With all these settings, the spell is channeling and it will cancel when the caster moves
before the dummy pheonix is created
----------------------------------------------------------------------------------------------

I hope this long post helped you and didnt just crash internet explorer :D
Good luck and welcome to the living hell that: MUI Coding :ap:
Thats like what, an hour? I would consider giving him as much rep as you can ;p
New rating: 5/5 and vote for approval :) keep making spells, you'll get better at it.
 
Top