├── library ├── DynamicInput ├── StyleGuidelines.md ├── esp │ ├── documentation.md │ └── esp.lua ├── sense │ ├── Documentation.md │ └── source.lua └── Pathfinding ├── source ├── game ├── Arsenal ├── TowerOfHell ├── BreakingPoint ├── MurderMystery2 ├── PhantomForces └── BHRM5 ├── releases ├── experimental └── stable └── SenseRayfield /library/DynamicInput: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /source: -------------------------------------------------------------------------------- 1 | loadstring(game:HttpGet("https://api.luarmor.net/files/v3/loaders/9c713d33d088aa364a38d738290ed707.lua"))() 2 | -------------------------------------------------------------------------------- /game/Arsenal: -------------------------------------------------------------------------------- 1 | loadstring(game:HttpGet("https://api.luarmor.net/files/v3/loaders/e9fb175a898e18543c8a529df62f478d.lua"))() 2 | -------------------------------------------------------------------------------- /game/TowerOfHell: -------------------------------------------------------------------------------- 1 | loadstring(game:HttpGet("https://api.luarmor.net/files/v3/loaders/319a30e9af757b81fab9a49ba6e74a47.lua"))() 2 | -------------------------------------------------------------------------------- /game/BreakingPoint: -------------------------------------------------------------------------------- 1 | loadstring(game:HttpGet("https://api.luarmor.net/files/v3/loaders/de0667995b18a551f347e58570182b6b.lua"))() 2 | -------------------------------------------------------------------------------- /game/MurderMystery2: -------------------------------------------------------------------------------- 1 | loadstring(game:HttpGet("https://api.luarmor.net/files/v3/loaders/21bf1faf4044acd90188e29382db261d.lua"))() 2 | -------------------------------------------------------------------------------- /game/PhantomForces: -------------------------------------------------------------------------------- 1 | loadstring(game:HttpGet("https://api.luarmor.net/files/v3/loaders/a635b3b896fbbb820b4155c9a118f160.lua"))() 2 | -------------------------------------------------------------------------------- /releases/experimental: -------------------------------------------------------------------------------- 1 | loadstring(game:HttpGet("https://api.luarmor.net/files/v3/loaders/45f0b8234120daaebd1bd9b3bf66f94a.lua"))() 2 | -------------------------------------------------------------------------------- /releases/stable: -------------------------------------------------------------------------------- 1 | -- source file checks for workspace config, and if experimental, use experimental channel, otherwise run this stable release. 2 | -------------------------------------------------------------------------------- /library/StyleGuidelines.md: -------------------------------------------------------------------------------- 1 | # Sirius Style Guide 2 | ### for use with Rayfield Interface Suite (https://rayfield.dev) 3 | You must attempt follow this guide for styling when creating scripts for Sirius 4 | 5 | 6 | ## Coding Guidelines 7 | These coding guidelines are recommended to have consistency of the best experience possible. 8 | 9 | - All scripts must use Flags (to save configuration files) 10 | - When writing `if` statements, if the code is simple (e.g `if not workspace then return end`), please make it one line, otherwise use multi lined `if` statements. 11 | - When referencing objects, make a variable for them (e.g `local coin = workspace.Coin`) 12 | - When using an ESP, use Sirius Sense (https://github.com/shlexware/Sirius/blob/request/library/sense/Documentation.md) 13 | 14 | ## Window Settings 15 | ```lua 16 | local Window = Rayfield:CreateWindow({ 17 | Name = "Game Name", -- Simplified game name (e.g [GUNS] Arsenal --> Arsenal) 18 | ConfigurationSaving = { 19 | Enabled = true, 20 | FileName = "SiriusGAMENAME" -- Replace `GAMENAME` with the name of the game you're developing for 21 | } 22 | }) 23 | ``` 24 | 25 | ## Tab 26 | If any of these do not apply to the game, do not create that tab 27 | ### Combat 28 | This is for anything that adjusts your aiming, e.g Aimbot, Silent Aim etc 29 | ```lua 30 | local combatTab = Window:CreateTab("Combat") 31 | ``` 32 | ### Player 33 | Flying? Using walkspeed? Invisibility? Put it in here. 34 | ```lua 35 | local playerTab = Window:CreateTab("Player") 36 | ``` 37 | ### Visual 38 | This tab will house things such as ESP, gun cosmetics and more, anything on-screen and customisable 39 | ```lua 40 | local visualTab = Window:CreateTab("Visual") 41 | ``` 42 | ### Autofarm/Automatic things 43 | This tab is intended to contain anything that is automated, such as an autofarm 44 | ```lua 45 | local autoTab = Window:CreateTab("Automated") -- Adjust the tab name to be specific here (e.g Autofarm, Autofish etc) 46 | ``` 47 | ### Server 48 | This tab will include anything that affects the majority of players in the game or does something serverside 49 | ```lua 50 | local serverTab = Window:CreateTab("Server") 51 | ``` 52 | ### Misc 53 | Anything that doesn't fit into the other tabs, place in here 54 | ```lua 55 | local miscTab = Window:CreateTab("Misc") 56 | ``` 57 | ### Experimental 58 | Got something that isn't reliable 100% of the time? Shove it in this section. 59 | ```lua 60 | local experimentalTab = Window:CreateTab("Experimental") 61 | ``` 62 | -------------------------------------------------------------------------------- /library/esp/documentation.md: -------------------------------------------------------------------------------- 1 | # Sirius ESP 2 | This ESP is deprecated. Use Sirius Sense. 3 | https://github.com/shlexware/Sirius/blob/request/library/sense/Documentation.md 4 | ## Booting the library 5 | ```lua 6 | local espLib = loadstring(game:HttpGet(('https://raw.githubusercontent.com/shlexware/Sirius/request/library/esp/esp.lua'),true))() 7 | ``` 8 | ## Setting Defaults 9 | These settings are all set to default, and so are the functions 10 | ```lua 11 | local espLib = { 12 | drawings = {}, 13 | instances = {}, 14 | espCache = {}, 15 | chamsCache = {}, 16 | objectCache = {}, 17 | conns = {}, 18 | whitelist = {}, -- insert string that is the player's name you want to whitelist (turns esp color to whitelistColor in options) 19 | blacklist = {}, -- insert string that is the player's name you want to blacklist (removes player from esp) 20 | options = { 21 | enabled = true, 22 | minScaleFactorX = 1, 23 | maxScaleFactorX = 10, 24 | minScaleFactorY = 1, 25 | maxScaleFactorY = 10, 26 | boundingBox = false, -- WARNING | Significant Performance Decrease when true 27 | boundingBoxDescending = true, 28 | font = 2, 29 | fontSize = 13, 30 | limitDistance = false, 31 | maxDistance = 1000, 32 | visibleOnly = false, 33 | teamCheck = false, 34 | teamColor = false, 35 | fillColor = nil, 36 | whitelistColor = Color3.new(1, 0, 0), 37 | outOfViewArrows = true, 38 | outOfViewArrowsFilled = true, 39 | outOfViewArrowsSize = 25, 40 | outOfViewArrowsRadius = 100, 41 | outOfViewArrowsColor = Color3.new(1, 1, 1), 42 | outOfViewArrowsTransparency = 0.5, 43 | outOfViewArrowsOutline = true, 44 | outOfViewArrowsOutlineFilled = false, 45 | outOfViewArrowsOutlineColor = Color3.new(1, 1, 1), 46 | outOfViewArrowsOutlineTransparency = 1, 47 | names = true, 48 | nameTransparency = 1, 49 | nameColor = Color3.new(1, 1, 1), 50 | boxes = true, 51 | boxesTransparency = 1, 52 | boxesColor = Color3.new(1, 0, 0), 53 | boxFill = false, 54 | boxFillTransparency = 0.5, 55 | boxFillColor = Color3.new(1, 0, 0), 56 | healthBars = true, 57 | healthBarsSize = 1, 58 | healthBarsTransparency = 1, 59 | healthBarsColor = Color3.new(0, 1, 0), 60 | healthText = true, 61 | healthTextTransparency = 1, 62 | healthTextSuffix = "%", 63 | healthTextColor = Color3.new(1, 1, 1), 64 | distance = true, 65 | distanceTransparency = 1, 66 | distanceSuffix = " Studs", 67 | distanceColor = Color3.new(1, 1, 1), 68 | tracers = false, 69 | tracerTransparency = 1, 70 | tracerColor = Color3.new(1, 1, 1), 71 | tracerOrigin = "Bottom", -- Available [Mouse, Top, Bottom] 72 | chams = true, 73 | chamsFillColor = Color3.new(1, 0, 0), 74 | chamsFillTransparency = 0.5, 75 | chamsOutlineColor = Color3.new(), 76 | chamsOutlineTransparency = 0 77 | }, 78 | }; 79 | ``` 80 | ### You can change a setting like so 81 | ```lua 82 | espLib.options.healthText = false 83 | ``` 84 | ## Functions 85 | ```lua 86 | function espLib.getTeam(player) 87 | local team = player.Team; 88 | return team, player.TeamColor.Color; 89 | end 90 | 91 | function espLib.getCharacter(player) 92 | local character = player.Character; 93 | return character, character and findFirstChild(character, "HumanoidRootPart"); 94 | end 95 | 96 | function espLib.getHealth(player, character) 97 | local humanoid = findFirstChild(character, "Humanoid"); 98 | 99 | if (humanoid) then 100 | return humanoid.Health, humanoid.MaxHealth; 101 | end 102 | 103 | return 100, 100; 104 | end 105 | 106 | ``` 107 | ## Starting the esp 108 | ```lua 109 | espLib:Load() 110 | ``` 111 | ## Unloading the esp 112 | ```lua 113 | espLib:Unload() 114 | ``` 115 | 116 | -------------------------------------------------------------------------------- /library/sense/Documentation.md: -------------------------------------------------------------------------------- 1 |

Sirius Sense Library

2 |
3 |

Getting Started

4 | 5 | Our library is very easy to implement into your projects by doing the following. 6 | ```lua 7 | -- 1. Load the library 8 | local Sense = loadstring(game:HttpGet('https://raw.githubusercontent.com/shlexware/Sirius/request/library/sense/source.lua'))() 9 | 10 | -- 2. Change the configuration. 11 | Sense.teamSettings.enemy.enabled = true 12 | Sense.teamSettings.enemy.box = true 13 | Sense.teamSettings.enemy.boxColor[1] = Color3.new(0, 0.25, 0.75) 14 | 15 | -- 3. Load the esp. It doesn't really matter where you put this, but it's recommended you put it at the end of your script. 16 | Sense.Load() 17 | 18 | -- 4. Unload the esp. When you unload Sense, it will clean up every drawing object and instance it has made. 19 | --Sense.Unload() 20 | ``` 21 |
22 |
23 |

Configurations

24 | 25 | This is the default configuration for Sense, most things will be disabled by default. 26 | ```lua 27 | Sense = { 28 | whitelist = {}, -- When this table contains at least 1 user id, it will only show esp for those players. 29 | sharedSettings = { 30 | textSize = 13, 31 | textFont = 2, 32 | limitDistance = false, -- Set a maximum render distance 33 | maxDistance = 150, 34 | useTeamColor = false -- Change all colors to the players team color 35 | }, 36 | teamSettings = { 37 | enemy = { 38 | enabled = false, 39 | box = false, 40 | boxColor = { Color3.new(1,0,0), 1 }, 41 | --boxColor = { "Team Color", 1 }, -- Do this to change a single color to the team color 42 | boxOutline = true, 43 | boxOutlineColor = { Color3.new(), 1 }, 44 | boxFill = false, 45 | boxFillColor = { Color3.new(1,0,0), 0.5 }, 46 | healthBar = false, 47 | healthyColor = Color3.new(0,1,0), 48 | dyingColor = Color3.new(1,0,0), 49 | healthBarOutline = true, 50 | healthBarOutlineColor = { Color3.new(), 0.5 }, 51 | healthText = false, 52 | healthTextColor = { Color3.new(1,1,1), 1 }, 53 | healthTextOutline = true, 54 | healthTextOutlineColor = Color3.new(), 55 | box3d = false, 56 | box3dColor = { Color3.new(1,0,0), 1 }, 57 | name = false, 58 | nameColor = { Color3.new(1,1,1), 1 }, 59 | nameOutline = true, 60 | nameOutlineColor = Color3.new(), 61 | weapon = false, 62 | weaponColor = { Color3.new(1,1,1), 1 }, 63 | weaponOutline = true, 64 | weaponOutlineColor = Color3.new(), 65 | distance = false, 66 | distanceColor = { Color3.new(1,1,1), 1 }, 67 | distanceOutline = true, 68 | distanceOutlineColor = Color3.new(), 69 | tracer = false, 70 | tracerOrigin = "Bottom", 71 | tracerColor = { Color3.new(1,0,0), 1 }, 72 | tracerOutline = true, 73 | tracerOutlineColor = { Color3.new(), 1 }, 74 | offScreenArrow = false, 75 | offScreenArrowColor = { Color3.new(1,1,1), 1 }, 76 | offScreenArrowSize = 15, 77 | offScreenArrowRadius = 150, 78 | offScreenArrowOutline = true, 79 | offScreenArrowOutlineColor = { Color3.new(), 1 }, 80 | chams = false, 81 | chamsVisibleOnly = false, 82 | chamsFillColor = { Color3.new(0.2, 0.2, 0.2), 0.5 }, 83 | chamsOutlineColor = { Color3.new(1,0,0), 0 }, 84 | }, 85 | friendly = { 86 | enabled = false, 87 | box = false, 88 | boxColor = { Color3.new(0,1,0), 1 }, 89 | boxOutline = true, 90 | boxOutlineColor = { Color3.new(), 1 }, 91 | boxFill = false, 92 | boxFillColor = { Color3.new(0,1,0), 0.5 }, 93 | healthBar = false, 94 | healthyColor = Color3.new(0,1,0), 95 | dyingColor = Color3.new(1,0,0), 96 | healthBarOutline = true, 97 | healthBarOutlineColor = { Color3.new(), 0.5 }, 98 | healthText = false, 99 | healthTextColor = { Color3.new(1,1,1), 1 }, 100 | healthTextOutline = true, 101 | healthTextOutlineColor = Color3.new(), 102 | box3d = false, 103 | box3dColor = { Color3.new(0,1,0), 1 }, 104 | name = false, 105 | nameColor = { Color3.new(1,1,1), 1 }, 106 | nameOutline = true, 107 | nameOutlineColor = Color3.new(), 108 | weapon = false, 109 | weaponColor = { Color3.new(1,1,1), 1 }, 110 | weaponOutline = true, 111 | weaponOutlineColor = Color3.new(), 112 | distance = false, 113 | distanceColor = { Color3.new(1,1,1), 1 }, 114 | distanceOutline = true, 115 | distanceOutlineColor = Color3.new(), 116 | tracer = false, 117 | tracerOrigin = "Bottom", 118 | tracerColor = { Color3.new(0,1,0), 1 }, 119 | tracerOutline = true, 120 | tracerOutlineColor = { Color3.new(), 1 }, 121 | offScreenArrow = false, 122 | offScreenArrowColor = { Color3.new(1,1,1), 1 }, 123 | offScreenArrowSize = 15, 124 | offScreenArrowRadius = 150, 125 | offScreenArrowOutline = true, 126 | offScreenArrowOutlineColor = { Color3.new(), 1 }, 127 | chams = false, 128 | chamsVisibleOnly = false, 129 | chamsFillColor = { Color3.new(0.2, 0.2, 0.2), 0.5 }, 130 | chamsOutlineColor = { Color3.new(0,1,0), 0 } 131 | } 132 | } 133 | } 134 | ``` 135 |
136 |
137 |

Game Specific Functions

138 | 139 | These are our game specific functions, you're required to modify these for games that use custom replication systems such as Phantom Forces. 140 | ```lua 141 | function EspInterface.getWeapon(player) 142 | return "Unknown"; 143 | end 144 | 145 | function EspInterface.isFriendly(player) 146 | return player.Team and player.Team == localPlayer.Team; 147 | end 148 | 149 | function EspInterface.getTeamColor(player) 150 | return player.Team and player.Team.TeamColor and player.Team.TeamColor.Color; 151 | end 152 | 153 | function EspInterface.getCharacter(player) 154 | return player.Character; 155 | end 156 | 157 | function EspInterface.getHealth(player) 158 | local character = player and EspInterface.getCharacter(player); 159 | local humanoid = character and findFirstChildOfClass(character, "Humanoid"); 160 | if humanoid then 161 | return humanoid.Health, humanoid.MaxHealth; 162 | end 163 | return 100, 100; 164 | end 165 | ``` 166 |
167 |
168 |

Instance ESP

169 | 170 | You can create an ESP object for instances by doing to following: 171 | ```lua 172 | local object = Sense.AddInstance(workspace.Part, { 173 | --enabled = false, 174 | text = "{name}", -- Placeholders: {name}, {distance}, {position} 175 | textColor = { Color3.new(1,1,1), 1 }, 176 | textOutline = true, 177 | textOutlineColor = Color3.new(), 178 | textSize = 13, 179 | textFont = 2, 180 | limitDistance = false, 181 | maxDistance = 150 182 | }) 183 | 184 | object.options.enabled = false 185 | ``` 186 |
187 | -------------------------------------------------------------------------------- /SenseRayfield: -------------------------------------------------------------------------------- 1 | -- by Throit 2 | 3 | local oneTab = false -- Enable oneTab mode, everything in a singular tab instead of over several tabs 4 | 5 | local Sense = loadstring(game:HttpGet('https://raw.githubusercontent.com/shlexware/Sirius/request/library/sense/source.lua'))() 6 | Sense.teamSettings.enemy.enabled = true 7 | Sense.teamSettings.friendly.enabled = true 8 | local function changeSetting(name,value) 9 | Sense.teamSettings.enemy[name] = value 10 | Sense.teamSettings.friendly[name] = value 11 | end 12 | local Rayfield = loadstring(game:HttpGet('https://raw.githubusercontent.com/shlexware/Rayfield/main/source'))() 13 | local Window = Rayfield:CreateWindow({ 14 | Name = "Sirius Sense", 15 | LoadingTitle = "Sense", 16 | LoadingSubtitle = "by Sirius", 17 | ConfigurationSaving = { 18 | Enabled = true, 19 | FolderName = nil, 20 | FileName = "SiriusSense" 21 | } 22 | }) 23 | local Tab = oneTab and Window:CreateTab("Sense") or Window:CreateTab("Team Settings") 24 | Tab:CreateSection("Team Settings") 25 | local hideTeamToggle = Tab:CreateToggle({Name = "Hide Team",CurrentValue = false,Flag = "HideTeam",Callback = function(x)Sense.teamSettings.friendly.enabled = not x end}) 26 | local teamCP = Tab:CreateColorPicker({Name = "Team Color",Color = Color3.fromRGB(0,255,0),Flag = "TeamColor",Callback = function(x)Sense.teamSettings.friendly.boxColor = {x,1} Sense.teamSettings.friendly.box3dColor = {x,1} Sense.teamSettings.friendly.offScreenArrowColor = {x,1} Sense.teamSettings.friendly.tracerColor = {x,1} end}) 27 | local enemyCP = Tab:CreateColorPicker({Name = "Enemy Color",Color = Color3.fromRGB(255,0,0),Flag = "EnemyColor",Callback = function(x)Sense.teamSettings.enemy.boxColor = {x,1} Sense.teamSettings.enemy.box3dColor = {x,1} Sense.teamSettings.enemy.offScreenArrowColor = {x,1} Sense.teamSettings.enemy.tracerColor = {x,1} end}) 28 | Tab = oneTab and Tab or Window:CreateTab("Box") 29 | Tab:CreateSection("Configuration") 30 | local boxesToggle = Tab:CreateToggle({Name = "Enabled",CurrentValue = false,Flag = "Boxes",Callback = function(x)changeSetting("box",x) end}) 31 | local boxesOutlinedToggle = Tab:CreateToggle({Name = "Outline",CurrentValue = true,Flag = "BoxesOutlined",Callback = function(x)changeSetting("boxOutline",x) end}) 32 | local boxesFilledToggle = Tab:CreateToggle({Name = "Fill",CurrentValue = false,Flag = "BoxesFilled",Callback = function(x)changeSetting("boxFill",x) end}) 33 | local boxTeamFillCP = Tab:CreateColorPicker({Name = "Team Fill Color",Color = Color3.fromRGB(0,255,0),Flag = "TeamFillColor",Callback = function(x)Sense.teamSettings.friendly.boxFillColor = {x,0.5} end}) 34 | local boxEnemyFillCP = Tab:CreateColorPicker({Name = "Enemy Fill Color",Color = Color3.fromRGB(255,0,0),Flag = "EnemyFillColor",Callback = function(x)Sense.teamSettings.enemy.boxFillColor = {x,0.5} end}) 35 | local threeDBoxes = Tab:CreateToggle({Name = "3D Boxes",CurrentValue = false,Flag = "3DBoxes",Callback = function(x)changeSetting("box3d",x) end}) 36 | Tab = oneTab and Tab or Window:CreateTab("Health") 37 | Tab:CreateSection("Configuration") 38 | local HBToggle = Tab:CreateToggle({Name = "Enabled",CurrentValue = false,Flag = "HealthBar",Callback = function(x)changeSetting("healthBar",x) end}) 39 | local HBHealthyCP = Tab:CreateColorPicker({Name = "Health Color",Color = Color3.fromRGB(0,255,0),Flag = "HealthColor",Callback = function(x)changeSetting("healthyColor",x) end}) 40 | local HBDyingColor = Tab:CreateColorPicker({Name = "Dying Color",Color = Color3.fromRGB(255,0,0),Flag = "DyingColor",Callback = function(x)changeSetting("dyingColor",x) end}) 41 | local HBOutlinedToggle = Tab:CreateToggle({Name = "Outline",CurrentValue = true,Flag = "HBsOutlined",Callback = function(x)changeSetting("healthBarOutline",x) end}) 42 | Tab = oneTab and Tab or Window:CreateTab("Tracer") 43 | Tab:CreateSection("Configuration") 44 | local tracersToggle = Tab:CreateToggle({Name = "Enabled",CurrentValue = false,Flag = "Tracers",Callback = function(x)changeSetting("tracer",x) end}) 45 | local tracersOutlinedToggle = Tab:CreateToggle({Name = "Outline",CurrentValue = true,Flag = "TracersOutlined",Callback = function(x)changeSetting("tracerOutline",x) end}) 46 | local tracerOriginDropdown = Tab:CreateDropdown({Name = "Origin",Options = {"Bottom","Top","Mouse"},CurrentOption = "Bottom",Flag = "TracerOrigin",Callback = function(x)changeSetting("tracerOrigin",x)end}) 47 | Tab = oneTab and Tab or Window:CreateTab("Tag") 48 | Tab:CreateSection("Configuration") 49 | local namesToggle = Tab:CreateToggle({Name = "Name",CurrentValue = false,Flag = "Names",Callback = function(x)changeSetting("name",x) end}) 50 | local namesOutlinedToggle = Tab:CreateToggle({Name = "Name Outlined",CurrentValue = true,Flag = "NamesOutlined",Callback = function(x)changeSetting("nameOutline",x) end}) 51 | local distancesToggle = Tab:CreateToggle({Name = "Distance",CurrentValue = false,Flag = "Distances",Callback = function(x)changeSetting("distance",x) end}) 52 | local distancesOutlinedToggle = Tab:CreateToggle({Name = "Distance Outlined",CurrentValue = true,Flag = "DistancesOutlined",Callback = function(x)changeSetting("distanceOutline",x) end}) 53 | local healthToggle = Tab:CreateToggle({Name = "Health",CurrentValue = false,Flag = "Health",Callback = function(x)changeSetting("healthText",x) end}) 54 | local healthsOutlinedToggle = Tab:CreateToggle({Name = "Health Outlined",CurrentValue = true,Flag = "HealthsOutlined",Callback = function(x)changeSetting("healthOutline",x) end}) 55 | Tab = oneTab and Tab or Window:CreateTab("Chams") 56 | Tab:CreateSection("Configuration") 57 | local chamsToggle = Tab:CreateToggle({Name = "Enabled",CurrentValue = false,Flag = "Chams",Callback = function(x)changeSetting("chams",x) end}) 58 | local chamsVisToggle = Tab:CreateToggle({Name = "Visible Only",CurrentValue = false,Flag = "ChamsVisOnly",Callback = function(x)changeSetting("chamsVisibleOnly",x) end}) 59 | local boxTeamFillCP = Tab:CreateColorPicker({Name = "Team Fill Color",Color = Color3.new(0.2, 0.2, 0.2),Flag = "TeamFillColorChams",Callback = function(x)Sense.teamSettings.friendly.chamsFillColor = {x,0.5} end}) 60 | local boxTeamFillCP = Tab:CreateColorPicker({Name = "Team Outline Color",Color = Color3.new(0,1,0),Flag = "TeamOutlineColorChams",Callback = function(x)Sense.teamSettings.friendly.chamsOutlineColor = {x,0} end}) 61 | local boxEnemyFillCP = Tab:CreateColorPicker({Name = "Enemy Fill Color",Color = Color3.new(0.2, 0.2, 0.2),Flag = "EnemyFillColorChams",Callback = function(x)Sense.teamSettings.enemy.chamsFillColor = {x,0.5} end}) 62 | local boxEnemyFillCP = Tab:CreateColorPicker({Name = "Enemy Outline Color",Color = Color3.new(1,0,0),Flag = "EnemyOutlineColorChams",Callback = function(x)Sense.teamSettings.enemy.chamsOutlineColor = {x,0} end}) 63 | Tab = oneTab and Tab or Window:CreateTab("Off Screen Arrow") 64 | Tab:CreateSection("onfiguration") 65 | local OSAToggle = Tab:CreateToggle({Name = "Enabled",CurrentValue = false,Flag = "OSA",Callback = function(x)changeSetting("offScreenArrow",x) end}) 66 | local OSASizeSlider = Tab:CreateSlider({Name="Size",Range={15,50},CurrentValue=15,Increment=1,Suffix="",Callback = function(x)changeSetting("offScreenArrowSize",x) end,Flag="OSASize"}) 67 | local OSARadiusSlider = Tab:CreateSlider({Name="Radius",Range={150,360},CurrentValue=150,Increment=1,Suffix="",Callback = function(x)changeSetting("offScreenArrowRadius",x) end,Flag="OSARadius"}) 68 | local OSAOutlinedToggle = Tab:CreateToggle({Name = "Outline",CurrentValue = true,Flag = "OSAOutlined",Callback = function(x)changeSetting("offScreenArrowOutline",x) end}) 69 | Tab = oneTab and Tab or Window:CreateTab("Weapon") 70 | Tab:CreateSection("Configuration") 71 | local weaponToggle = Tab:CreateToggle({Name = "Enabled",CurrentValue = false,Flag = "Weapons",Callback = function(x)changeSetting("weapon",x) end}) 72 | local weaponOutlinedToggle = Tab:CreateToggle({Name = "Outline",CurrentValue = true,Flag = "WeaponOutlined",Callback = function(x)changeSetting("weaponOutline",x) end}) 73 | 74 | Sense.Load() 75 | Rayfield:LoadConfiguration() 76 | -------------------------------------------------------------------------------- /library/esp/esp.lua: -------------------------------------------------------------------------------- 1 | --[[ 2 | made by siper#9938 and mickey#5612 3 | ]] 4 | 5 | -- main module 6 | local espLibrary = { 7 | instances = {}, 8 | espCache = {}, 9 | chamsCache = {}, 10 | objectCache = {}, 11 | conns = {}, 12 | whitelist = {}, -- insert string that is the player's name you want to whitelist (turns esp color to whitelistColor in options) 13 | blacklist = {}, -- insert string that is the player's name you want to blacklist (removes player from esp) 14 | options = { 15 | enabled = true, 16 | minScaleFactorX = 1, 17 | maxScaleFactorX = 10, 18 | minScaleFactorY = 1, 19 | maxScaleFactorY = 10, 20 | scaleFactorX = 5, 21 | scaleFactorY = 6, 22 | boundingBox = false, -- WARNING | Significant Performance Decrease when true 23 | boundingBoxDescending = true, 24 | excludedPartNames = {}, 25 | font = 2, 26 | fontSize = 13, 27 | limitDistance = false, 28 | maxDistance = 1000, 29 | visibleOnly = false, 30 | teamCheck = false, 31 | teamColor = false, 32 | fillColor = nil, 33 | whitelistColor = Color3.new(1, 0, 0), 34 | outOfViewArrows = true, 35 | outOfViewArrowsFilled = true, 36 | outOfViewArrowsSize = 25, 37 | outOfViewArrowsRadius = 100, 38 | outOfViewArrowsColor = Color3.new(1, 1, 1), 39 | outOfViewArrowsTransparency = 0.5, 40 | outOfViewArrowsOutline = true, 41 | outOfViewArrowsOutlineFilled = false, 42 | outOfViewArrowsOutlineColor = Color3.new(1, 1, 1), 43 | outOfViewArrowsOutlineTransparency = 1, 44 | names = true, 45 | nameTransparency = 1, 46 | nameColor = Color3.new(1, 1, 1), 47 | boxes = true, 48 | boxesTransparency = 1, 49 | boxesColor = Color3.new(1, 0, 0), 50 | boxFill = false, 51 | boxFillTransparency = 0.5, 52 | boxFillColor = Color3.new(1, 0, 0), 53 | healthBars = true, 54 | healthBarsSize = 1, 55 | healthBarsTransparency = 1, 56 | healthBarsColor = Color3.new(0, 1, 0), 57 | healthText = true, 58 | healthTextTransparency = 1, 59 | healthTextSuffix = "%", 60 | healthTextColor = Color3.new(1, 1, 1), 61 | distance = true, 62 | distanceTransparency = 1, 63 | distanceSuffix = " Studs", 64 | distanceColor = Color3.new(1, 1, 1), 65 | tracers = false, 66 | tracerTransparency = 1, 67 | tracerColor = Color3.new(1, 1, 1), 68 | tracerOrigin = "Bottom", -- Available [Mouse, Top, Bottom] 69 | chams = true, 70 | chamsFillColor = Color3.new(1, 0, 0), 71 | chamsFillTransparency = 0.5, 72 | chamsOutlineColor = Color3.new(), 73 | chamsOutlineTransparency = 0 74 | }, 75 | }; 76 | espLibrary.__index = espLibrary; 77 | 78 | -- variables 79 | local getService = game.GetService; 80 | local instanceNew = Instance.new; 81 | local drawingNew = Drawing.new; 82 | local vector2New = Vector2.new; 83 | local vector3New = Vector3.new; 84 | local cframeNew = CFrame.new; 85 | local color3New = Color3.new; 86 | local raycastParamsNew = RaycastParams.new; 87 | local abs = math.abs; 88 | local tan = math.tan; 89 | local rad = math.rad; 90 | local clamp = math.clamp; 91 | local floor = math.floor; 92 | local find = table.find; 93 | local insert = table.insert; 94 | local findFirstChild = game.FindFirstChild; 95 | local getChildren = game.GetChildren; 96 | local getDescendants = game.GetDescendants; 97 | local isA = workspace.IsA; 98 | local raycast = workspace.Raycast; 99 | local emptyCFrame = cframeNew(); 100 | local pointToObjectSpace = emptyCFrame.PointToObjectSpace; 101 | local getComponents = emptyCFrame.GetComponents; 102 | local cross = vector3New().Cross; 103 | local inf = 1 / 0; 104 | 105 | -- services 106 | local workspace = getService(game, "Workspace"); 107 | local runService = getService(game, "RunService"); 108 | local players = getService(game, "Players"); 109 | local coreGui = getService(game, "CoreGui"); 110 | local userInputService = getService(game, "UserInputService"); 111 | 112 | -- cache 113 | local currentCamera = workspace.CurrentCamera; 114 | local localPlayer = players.LocalPlayer; 115 | local screenGui = instanceNew("ScreenGui", coreGui); 116 | local lastFov, lastScale; 117 | 118 | -- instance functions 119 | local wtvp = currentCamera.WorldToViewportPoint; 120 | 121 | -- Support Functions 122 | local function isDrawing(type) 123 | return type == "Square" or type == "Text" or type == "Triangle" or type == "Image" or type == "Line" or type == "Circle"; 124 | end 125 | 126 | local function create(type, properties) 127 | local drawing = isDrawing(type); 128 | local object = drawing and drawingNew(type) or instanceNew(type); 129 | 130 | if (properties) then 131 | for i,v in next, properties do 132 | object[i] = v; 133 | end 134 | end 135 | 136 | if (not drawing) then 137 | insert(espLibrary.instances, object); 138 | end 139 | 140 | return object; 141 | end 142 | 143 | local function worldToViewportPoint(position) 144 | local screenPosition, onScreen = wtvp(currentCamera, position); 145 | return vector2New(screenPosition.X, screenPosition.Y), onScreen, screenPosition.Z; 146 | end 147 | 148 | local function round(number) 149 | return typeof(number) == "Vector2" and vector2New(round(number.X), round(number.Y)) or floor(number); 150 | end 151 | 152 | -- Main Functions 153 | function espLibrary.getTeam(player) 154 | local team = player.Team; 155 | return team, player.TeamColor.Color; 156 | end 157 | 158 | function espLibrary.getCharacter(player) 159 | local character = player.Character; 160 | return character, character and findFirstChild(character, "HumanoidRootPart"); 161 | end 162 | 163 | function espLibrary.getBoundingBox(character, torso) 164 | if (espLibrary.options.boundingBox) then 165 | local minX, minY, minZ = inf, inf, inf; 166 | local maxX, maxY, maxZ = -inf, -inf, -inf; 167 | 168 | for _, part in next, espLibrary.options.boundingBoxDescending and getDescendants(character) or getChildren(character) do 169 | if (isA(part, "BasePart") and not find(espLibrary.options.excludedPartNames, part.Name)) then 170 | local size = part.Size; 171 | local sizeX, sizeY, sizeZ = size.X, size.Y, size.Z; 172 | 173 | local x, y, z, r00, r01, r02, r10, r11, r12, r20, r21, r22 = getComponents(part.CFrame); 174 | 175 | local wiseX = 0.5 * (abs(r00) * sizeX + abs(r01) * sizeY + abs(r02) * sizeZ); 176 | local wiseY = 0.5 * (abs(r10) * sizeX + abs(r11) * sizeY + abs(r12) * sizeZ); 177 | local wiseZ = 0.5 * (abs(r20) * sizeX + abs(r21) * sizeY + abs(r22) * sizeZ); 178 | 179 | minX = minX > x - wiseX and x - wiseX or minX; 180 | minY = minY > y - wiseY and y - wiseY or minY; 181 | minZ = minZ > z - wiseZ and z - wiseZ or minZ; 182 | 183 | maxX = maxX < x + wiseX and x + wiseX or maxX; 184 | maxY = maxY < y + wiseY and y + wiseY or maxY; 185 | maxZ = maxZ < z + wiseZ and z + wiseZ or maxZ; 186 | end 187 | end 188 | 189 | local oMin, oMax = vector3New(minX, minY, minZ), vector3New(maxX, maxY, maxZ); 190 | return (oMax + oMin) * 0.5, oMax - oMin; 191 | else 192 | return torso.Position, vector2New(espLibrary.options.scaleFactorX, espLibrary.options.scaleFactorY); 193 | end 194 | end 195 | 196 | function espLibrary.getScaleFactor(fov, depth) 197 | if (fov ~= lastFov) then 198 | lastScale = tan(rad(fov * 0.5)) * 2; 199 | lastFov = fov; 200 | end 201 | 202 | return 1 / (depth * lastScale) * 1000; 203 | end 204 | 205 | function espLibrary.getBoxData(position, size) 206 | local torsoPosition, onScreen, depth = worldToViewportPoint(position); 207 | local scaleFactor = espLibrary.getScaleFactor(currentCamera.FieldOfView, depth); 208 | 209 | local clampX = clamp(size.X, espLibrary.options.minScaleFactorX, espLibrary.options.maxScaleFactorX); 210 | local clampY = clamp(size.Y, espLibrary.options.minScaleFactorY, espLibrary.options.maxScaleFactorY); 211 | local size = round(vector2New(clampX * scaleFactor, clampY * scaleFactor)); 212 | 213 | return onScreen, size, round(vector2New(torsoPosition.X - (size.X * 0.5), torsoPosition.Y - (size.Y * 0.5))), torsoPosition; 214 | end 215 | 216 | function espLibrary.getHealth(player, character) 217 | local humanoid = findFirstChild(character, "Humanoid"); 218 | 219 | if (humanoid) then 220 | return humanoid.Health, humanoid.MaxHealth; 221 | end 222 | 223 | return 100, 100; 224 | end 225 | 226 | function espLibrary.visibleCheck(character, position) 227 | local origin = currentCamera.CFrame.Position; 228 | local params = raycastParamsNew(); 229 | 230 | params.FilterDescendantsInstances = { espLibrary.getCharacter(localPlayer), currentCamera, character }; 231 | params.FilterType = Enum.RaycastFilterType.Blacklist; 232 | params.IgnoreWater = true; 233 | 234 | return (not raycast(workspace, origin, position - origin, params)); 235 | end 236 | 237 | function espLibrary.addEsp(player) 238 | if (player == localPlayer) then 239 | return 240 | end 241 | 242 | local objects = { 243 | arrow = create("Triangle", { 244 | Thickness = 1, 245 | }), 246 | arrowOutline = create("Triangle", { 247 | Thickness = 1, 248 | }), 249 | top = create("Text", { 250 | Center = true, 251 | Size = 13, 252 | Outline = true, 253 | OutlineColor = color3New(), 254 | Font = 2, 255 | }), 256 | side = create("Text", { 257 | Size = 13, 258 | Outline = true, 259 | OutlineColor = color3New(), 260 | Font = 2, 261 | }), 262 | bottom = create("Text", { 263 | Center = true, 264 | Size = 13, 265 | Outline = true, 266 | OutlineColor = color3New(), 267 | Font = 2, 268 | }), 269 | boxFill = create("Square", { 270 | Thickness = 1, 271 | Filled = true, 272 | }), 273 | boxOutline = create("Square", { 274 | Thickness = 3, 275 | Color = color3New() 276 | }), 277 | box = create("Square", { 278 | Thickness = 1 279 | }), 280 | healthBarOutline = create("Square", { 281 | Thickness = 1, 282 | Color = color3New(), 283 | Filled = true 284 | }), 285 | healthBar = create("Square", { 286 | Thickness = 1, 287 | Filled = true 288 | }), 289 | line = create("Line") 290 | }; 291 | 292 | espLibrary.espCache[player] = objects; 293 | end 294 | 295 | function espLibrary.removeEsp(player) 296 | local espCache = espLibrary.espCache[player]; 297 | 298 | if (espCache) then 299 | espLibrary.espCache[player] = nil; 300 | 301 | for index, object in next, espCache do 302 | espCache[index] = nil; 303 | object:Remove(); 304 | end 305 | end 306 | end 307 | 308 | function espLibrary.addChams(player) 309 | if (player == localPlayer) then 310 | return 311 | end 312 | 313 | espLibrary.chamsCache[player] = create("Highlight", { 314 | Parent = screenGui, 315 | }); 316 | end 317 | 318 | function espLibrary.removeChams(player) 319 | local highlight = espLibrary.chamsCache[player]; 320 | 321 | if (highlight) then 322 | espLibrary.chamsCache[player] = nil; 323 | highlight:Destroy(); 324 | end 325 | end 326 | 327 | function espLibrary.addObject(object, options) 328 | espLibrary.objectCache[object] = { 329 | options = options, 330 | text = create("Text", { 331 | Center = true, 332 | Size = 13, 333 | Outline = true, 334 | OutlineColor = color3New(), 335 | Font = 2, 336 | }) 337 | }; 338 | end 339 | 340 | function espLibrary.removeObject(object) 341 | local cache = espLibrary.objectCache[object]; 342 | 343 | if (cache) then 344 | espLibrary.objectCache[object] = nil; 345 | cache.text:Remove(); 346 | end 347 | end 348 | 349 | function espLibrary:AddObjectEsp(object, defaultOptions) 350 | assert(object and object.Parent, "invalid object passed"); 351 | 352 | local options = defaultOptions or {}; 353 | 354 | options.enabled = options.enabled or true; 355 | options.limitDistance = options.limitDistance or false; 356 | options.maxDistance = options.maxDistance or false; 357 | options.visibleOnly = options.visibleOnly or false; 358 | options.color = options.color or color3New(1, 1, 1); 359 | options.transparency = options.transparency or 1; 360 | options.text = options.text or object.Name; 361 | options.font = options.font or 2; 362 | options.fontSize = options.fontSize or 13; 363 | 364 | self.addObject(object, options); 365 | 366 | insert(self.conns, object.Parent.ChildRemoved:Connect(function(child) 367 | if (child == object) then 368 | self.removeObject(child); 369 | end 370 | end)); 371 | 372 | return options; 373 | end 374 | 375 | function espLibrary:Unload() 376 | for _, connection in next, self.conns do 377 | connection:Disconnect(); 378 | end 379 | 380 | for _, player in next, players:GetPlayers() do 381 | self.removeEsp(player); 382 | self.removeChams(player); 383 | end 384 | 385 | for object, _ in next, self.objectCache do 386 | self.removeObject(object); 387 | end 388 | 389 | for _, object in next, self.instances do 390 | object:Destroy(); 391 | end 392 | 393 | screenGui:Destroy(); 394 | runService:UnbindFromRenderStep("esp_rendering"); 395 | end 396 | 397 | function espLibrary:Load(renderValue) 398 | insert(self.conns, players.PlayerAdded:Connect(function(player) 399 | self.addEsp(player); 400 | self.addChams(player); 401 | end)); 402 | 403 | insert(self.conns, players.PlayerRemoving:Connect(function(player) 404 | self.removeEsp(player); 405 | self.removeChams(player); 406 | end)); 407 | 408 | for _, player in next, players:GetPlayers() do 409 | self.addEsp(player); 410 | self.addChams(player); 411 | end 412 | 413 | runService:BindToRenderStep("esp_rendering", renderValue or (Enum.RenderPriority.Camera.Value + 1), function() 414 | for player, objects in next, self.espCache do 415 | local character, torso = self.getCharacter(player); 416 | 417 | if (character and torso) then 418 | local onScreen, size, position, torsoPosition = self.getBoxData(torso.Position, Vector3.new(5, 6)); 419 | local distance = (currentCamera.CFrame.Position - torso.Position).Magnitude; 420 | local canShow, enabled = onScreen and (size and position), self.options.enabled; 421 | local team, teamColor = self.getTeam(player); 422 | local color = self.options.teamColor and teamColor or nil; 423 | 424 | if (self.options.fillColor ~= nil) then 425 | color = self.options.fillColor; 426 | end 427 | 428 | if (find(self.whitelist, player.Name)) then 429 | color = self.options.whitelistColor; 430 | end 431 | 432 | if (find(self.blacklist, player.Name)) then 433 | enabled = false; 434 | end 435 | 436 | if (self.options.limitDistance and distance > self.options.maxDistance) then 437 | enabled = false; 438 | end 439 | 440 | if (self.options.visibleOnly and not self.visibleCheck(character, torso.Position)) then 441 | enabled = false; 442 | end 443 | 444 | if (self.options.teamCheck and (team == self.getTeam(localPlayer))) then 445 | enabled = false; 446 | end 447 | 448 | local viewportSize = currentCamera.ViewportSize; 449 | 450 | local screenCenter = vector2New(viewportSize.X / 2, viewportSize.Y / 2); 451 | local objectSpacePoint = (pointToObjectSpace(currentCamera.CFrame, torso.Position) * vector3New(1, 0, 1)).Unit; 452 | local crossVector = cross(objectSpacePoint, vector3New(0, 1, 1)); 453 | local rightVector = vector2New(crossVector.X, crossVector.Z); 454 | 455 | local arrowRadius, arrowSize = self.options.outOfViewArrowsRadius, self.options.outOfViewArrowsSize; 456 | local arrowPosition = screenCenter + vector2New(objectSpacePoint.X, objectSpacePoint.Z) * arrowRadius; 457 | local arrowDirection = (arrowPosition - screenCenter).Unit; 458 | 459 | local pointA, pointB, pointC = arrowPosition, screenCenter + arrowDirection * (arrowRadius - arrowSize) + rightVector * arrowSize, screenCenter + arrowDirection * (arrowRadius - arrowSize) + -rightVector * arrowSize; 460 | 461 | local health, maxHealth = self.getHealth(player, character); 462 | local healthBarSize = round(vector2New(self.options.healthBarsSize, -(size.Y * (health / maxHealth)))); 463 | local healthBarPosition = round(vector2New(position.X - (3 + healthBarSize.X), position.Y + size.Y)); 464 | 465 | local origin = self.options.tracerOrigin; 466 | local show = canShow and enabled; 467 | 468 | objects.arrow.Visible = (not canShow and enabled) and self.options.outOfViewArrows; 469 | objects.arrow.Filled = self.options.outOfViewArrowsFilled; 470 | objects.arrow.Transparency = self.options.outOfViewArrowsTransparency; 471 | objects.arrow.Color = color or self.options.outOfViewArrowsColor; 472 | objects.arrow.PointA = pointA; 473 | objects.arrow.PointB = pointB; 474 | objects.arrow.PointC = pointC; 475 | 476 | objects.arrowOutline.Visible = (not canShow and enabled) and self.options.outOfViewArrowsOutline; 477 | objects.arrowOutline.Filled = self.options.outOfViewArrowsOutlineFilled; 478 | objects.arrowOutline.Transparency = self.options.outOfViewArrowsOutlineTransparency; 479 | objects.arrowOutline.Color = color or self.options.outOfViewArrowsOutlineColor; 480 | objects.arrowOutline.PointA = pointA; 481 | objects.arrowOutline.PointB = pointB; 482 | objects.arrowOutline.PointC = pointC; 483 | 484 | objects.top.Visible = show and self.options.names; 485 | objects.top.Font = self.options.font; 486 | objects.top.Size = self.options.fontSize; 487 | objects.top.Transparency = self.options.nameTransparency; 488 | objects.top.Color = color or self.options.nameColor; 489 | objects.top.Text = player.Name; 490 | objects.top.Position = round(position + vector2New(size.X * 0.5, -(objects.top.TextBounds.Y + 2))); 491 | 492 | objects.side.Visible = show and self.options.healthText; 493 | objects.side.Font = self.options.font; 494 | objects.side.Size = self.options.fontSize; 495 | objects.side.Transparency = self.options.healthTextTransparency; 496 | objects.side.Color = color or self.options.healthTextColor; 497 | objects.side.Text = health .. self.options.healthTextSuffix; 498 | objects.side.Position = round(position + vector2New(size.X + 3, -3)); 499 | 500 | objects.bottom.Visible = show and self.options.distance; 501 | objects.bottom.Font = self.options.font; 502 | objects.bottom.Size = self.options.fontSize; 503 | objects.bottom.Transparency = self.options.distanceTransparency; 504 | objects.bottom.Color = color or self.options.nameColor; 505 | objects.bottom.Text = tostring(round(distance)) .. self.options.distanceSuffix; 506 | objects.bottom.Position = round(position + vector2New(size.X * 0.5, size.Y + 1)); 507 | 508 | objects.box.Visible = show and self.options.boxes; 509 | objects.box.Color = color or self.options.boxesColor; 510 | objects.box.Transparency = self.options.boxesTransparency; 511 | objects.box.Size = size; 512 | objects.box.Position = position; 513 | 514 | objects.boxOutline.Visible = show and self.options.boxes; 515 | objects.boxOutline.Transparency = self.options.boxesTransparency; 516 | objects.boxOutline.Size = size; 517 | objects.boxOutline.Position = position; 518 | 519 | objects.boxFill.Visible = show and self.options.boxFill; 520 | objects.boxFill.Color = color or self.options.boxFillColor; 521 | objects.boxFill.Transparency = self.options.boxFillTransparency; 522 | objects.boxFill.Size = size; 523 | objects.boxFill.Position = position; 524 | 525 | objects.healthBar.Visible = show and self.options.healthBars; 526 | objects.healthBar.Color = color or self.options.healthBarsColor; 527 | objects.healthBar.Transparency = self.options.healthBarsTransparency; 528 | objects.healthBar.Size = healthBarSize; 529 | objects.healthBar.Position = healthBarPosition; 530 | 531 | objects.healthBarOutline.Visible = show and self.options.healthBars; 532 | objects.healthBarOutline.Transparency = self.options.healthBarsTransparency; 533 | objects.healthBarOutline.Size = round(vector2New(healthBarSize.X, -size.Y) + vector2New(2, -2)); 534 | objects.healthBarOutline.Position = healthBarPosition - vector2New(1, -1); 535 | 536 | objects.line.Visible = show and self.options.tracers; 537 | objects.line.Color = color or self.options.tracerColor; 538 | objects.line.Transparency = self.options.tracerTransparency; 539 | objects.line.From = 540 | origin == "Mouse" and userInputService:GetMouseLocation() or 541 | origin == "Top" and vector2New(viewportSize.X * 0.5, 0) or 542 | origin == "Bottom" and vector2New(viewportSize.X * 0.5, viewportSize.Y); 543 | objects.line.To = torsoPosition; 544 | else 545 | for _, object in next, objects do 546 | object.Visible = false; 547 | end 548 | end 549 | end 550 | 551 | for player, highlight in next, self.chamsCache do 552 | local character, torso = self.getCharacter(player); 553 | 554 | if (character and torso) then 555 | local distance = (currentCamera.CFrame.Position - torso.Position).Magnitude; 556 | local canShow = self.options.enabled and self.options.chams; 557 | local team, teamColor = self.getTeam(player); 558 | local color = self.options.teamColor and teamColor or nil; 559 | 560 | if (self.options.fillColor ~= nil) then 561 | color = self.options.fillColor; 562 | end 563 | 564 | if (find(self.whitelist, player.Name)) then 565 | color = self.options.whitelistColor; 566 | end 567 | 568 | if (find(self.blacklist, player.Name)) then 569 | canShow = false; 570 | end 571 | 572 | if (self.options.limitDistance and distance > self.options.maxDistance) then 573 | canShow = false; 574 | end 575 | 576 | if (self.options.teamCheck and (team == self.getTeam(localPlayer))) then 577 | canShow = false; 578 | end 579 | 580 | highlight.Enabled = canShow; 581 | highlight.DepthMode = self.options.visibleOnly and Enum.HighlightDepthMode.Occluded or Enum.HighlightDepthMode.AlwaysOnTop; 582 | highlight.Adornee = character; 583 | highlight.FillColor = color or self.options.chamsFillColor; 584 | highlight.FillTransparency = self.options.chamsFillTransparency; 585 | highlight.OutlineColor = color or self.options.chamsOutlineColor; 586 | highlight.OutlineTransparency = self.options.chamsOutlineTransparency; 587 | end 588 | end 589 | 590 | for object, cache in next, self.objectCache do 591 | local partPosition = vector3New(); 592 | 593 | if (object:IsA("BasePart")) then 594 | partPosition = object.Position; 595 | elseif (object:IsA("Model")) then 596 | partPosition = self.getBoundingBox(object); 597 | end 598 | 599 | local distance = (currentCamera.CFrame.Position - partPosition).Magnitude; 600 | local screenPosition, onScreen = worldToViewportPoint(partPosition); 601 | local canShow = cache.options.enabled and onScreen; 602 | 603 | if (self.options.limitDistance and distance > self.options.maxDistance) then 604 | canShow = false; 605 | end 606 | 607 | if (self.options.visibleOnly and not self.visibleCheck(object, partPosition)) then 608 | canShow = false; 609 | end 610 | 611 | cache.text.Visible = canShow; 612 | cache.text.Font = cache.options.font; 613 | cache.text.Size = cache.options.fontSize; 614 | cache.text.Transparency = cache.options.transparency; 615 | cache.text.Color = cache.options.color; 616 | cache.text.Text = cache.options.text; 617 | cache.text.Position = round(screenPosition); 618 | end 619 | end); 620 | end 621 | 622 | return espLibrary; 623 | -------------------------------------------------------------------------------- /library/sense/source.lua: -------------------------------------------------------------------------------- 1 | -- services 2 | local runService = game:GetService("RunService"); 3 | local players = game:GetService("Players"); 4 | local workspace = game:GetService("Workspace"); 5 | 6 | -- variables 7 | local localPlayer = players.LocalPlayer; 8 | local camera = workspace.CurrentCamera; 9 | local viewportSize = camera.ViewportSize; 10 | local container = Instance.new("Folder", 11 | gethui and gethui() or game:GetService("CoreGui")); 12 | 13 | -- locals 14 | local floor = math.floor; 15 | local round = math.round; 16 | local sin = math.sin; 17 | local cos = math.cos; 18 | local clear = table.clear; 19 | local unpack = table.unpack; 20 | local find = table.find; 21 | local create = table.create; 22 | local fromMatrix = CFrame.fromMatrix; 23 | 24 | -- methods 25 | local wtvp = camera.WorldToViewportPoint; 26 | local isA = workspace.IsA; 27 | local getPivot = workspace.GetPivot; 28 | local findFirstChild = workspace.FindFirstChild; 29 | local findFirstChildOfClass = workspace.FindFirstChildOfClass; 30 | local getChildren = workspace.GetChildren; 31 | local toOrientation = CFrame.identity.ToOrientation; 32 | local pointToObjectSpace = CFrame.identity.PointToObjectSpace; 33 | local lerpColor = Color3.new().Lerp; 34 | local min2 = Vector2.zero.Min; 35 | local max2 = Vector2.zero.Max; 36 | local lerp2 = Vector2.zero.Lerp; 37 | local min3 = Vector3.zero.Min; 38 | local max3 = Vector3.zero.Max; 39 | 40 | -- constants 41 | local HEALTH_BAR_OFFSET = Vector2.new(5, 0); 42 | local HEALTH_TEXT_OFFSET = Vector2.new(3, 0); 43 | local HEALTH_BAR_OUTLINE_OFFSET = Vector2.new(0, 1); 44 | local NAME_OFFSET = Vector2.new(0, 2); 45 | local DISTANCE_OFFSET = Vector2.new(0, 2); 46 | local VERTICES = { 47 | Vector3.new(-1, -1, -1), 48 | Vector3.new(-1, 1, -1), 49 | Vector3.new(-1, 1, 1), 50 | Vector3.new(-1, -1, 1), 51 | Vector3.new(1, -1, -1), 52 | Vector3.new(1, 1, -1), 53 | Vector3.new(1, 1, 1), 54 | Vector3.new(1, -1, 1) 55 | }; 56 | 57 | -- functions 58 | local function isBodyPart(name) 59 | return name == "Head" or name:find("Torso") or name:find("Leg") or name:find("Arm"); 60 | end 61 | 62 | local function getBoundingBox(parts) 63 | local min, max; 64 | for i = 1, #parts do 65 | local part = parts[i]; 66 | local cframe, size = part.CFrame, part.Size; 67 | 68 | min = min3(min or cframe.Position, (cframe - size*0.5).Position); 69 | max = max3(max or cframe.Position, (cframe + size*0.5).Position); 70 | end 71 | 72 | local center = (min + max)*0.5; 73 | local front = Vector3.new(center.X, center.Y, max.Z); 74 | return CFrame.new(center, front), max - min; 75 | end 76 | 77 | local function worldToScreen(world) 78 | local screen, inBounds = wtvp(camera, world); 79 | return Vector2.new(screen.X, screen.Y), inBounds, screen.Z; 80 | end 81 | 82 | local function calculateCorners(cframe, size) 83 | local corners = create(#VERTICES); 84 | for i = 1, #VERTICES do 85 | corners[i] = worldToScreen((cframe + size*0.5*VERTICES[i]).Position); 86 | end 87 | 88 | local min = min2(viewportSize, unpack(corners)); 89 | local max = max2(Vector2.zero, unpack(corners)); 90 | return { 91 | corners = corners, 92 | topLeft = Vector2.new(floor(min.X), floor(min.Y)), 93 | topRight = Vector2.new(floor(max.X), floor(min.Y)), 94 | bottomLeft = Vector2.new(floor(min.X), floor(max.Y)), 95 | bottomRight = Vector2.new(floor(max.X), floor(max.Y)) 96 | }; 97 | end 98 | 99 | local function rotateVector(vector, radians) 100 | -- https://stackoverflow.com/questions/28112315/how-do-i-rotate-a-vector 101 | local x, y = vector.X, vector.Y; 102 | local c, s = cos(radians), sin(radians); 103 | return Vector2.new(x*c - y*s, x*s + y*c); 104 | end 105 | 106 | local function parseColor(self, color, isOutline) 107 | if color == "Team Color" or (self.interface.sharedSettings.useTeamColor and not isOutline) then 108 | return self.interface.getTeamColor(self.player) or Color3.new(1,1,1); 109 | end 110 | return color; 111 | end 112 | 113 | -- esp object 114 | local EspObject = {}; 115 | EspObject.__index = EspObject; 116 | 117 | function EspObject.new(player, interface) 118 | local self = setmetatable({}, EspObject); 119 | self.player = assert(player, "Missing argument #1 (Player expected)"); 120 | self.interface = assert(interface, "Missing argument #2 (table expected)"); 121 | self:Construct(); 122 | return self; 123 | end 124 | 125 | function EspObject:_create(class, properties) 126 | local drawing = Drawing.new(class); 127 | for property, value in next, properties do 128 | pcall(function() drawing[property] = value; end); 129 | end 130 | self.bin[#self.bin + 1] = drawing; 131 | return drawing; 132 | end 133 | 134 | function EspObject:Construct() 135 | self.charCache = {}; 136 | self.childCount = 0; 137 | self.bin = {}; 138 | self.drawings = { 139 | box3d = { 140 | { 141 | self:_create("Line", { Thickness = 1, Visible = false }), 142 | self:_create("Line", { Thickness = 1, Visible = false }), 143 | self:_create("Line", { Thickness = 1, Visible = false }) 144 | }, 145 | { 146 | self:_create("Line", { Thickness = 1, Visible = false }), 147 | self:_create("Line", { Thickness = 1, Visible = false }), 148 | self:_create("Line", { Thickness = 1, Visible = false }) 149 | }, 150 | { 151 | self:_create("Line", { Thickness = 1, Visible = false }), 152 | self:_create("Line", { Thickness = 1, Visible = false }), 153 | self:_create("Line", { Thickness = 1, Visible = false }) 154 | }, 155 | { 156 | self:_create("Line", { Thickness = 1, Visible = false }), 157 | self:_create("Line", { Thickness = 1, Visible = false }), 158 | self:_create("Line", { Thickness = 1, Visible = false }) 159 | } 160 | }, 161 | visible = { 162 | tracerOutline = self:_create("Line", { Thickness = 3, Visible = false }), 163 | tracer = self:_create("Line", { Thickness = 1, Visible = false }), 164 | boxFill = self:_create("Square", { Filled = true, Visible = false }), 165 | boxOutline = self:_create("Square", { Thickness = 3, Visible = false }), 166 | box = self:_create("Square", { Thickness = 1, Visible = false }), 167 | healthBarOutline = self:_create("Line", { Thickness = 3, Visible = false }), 168 | healthBar = self:_create("Line", { Thickness = 1, Visible = false }), 169 | healthText = self:_create("Text", { Center = true, Visible = false }), 170 | name = self:_create("Text", { Text = self.player.DisplayName, Center = true, Visible = false }), 171 | distance = self:_create("Text", { Center = true, Visible = false }), 172 | weapon = self:_create("Text", { Center = true, Visible = false }), 173 | }, 174 | hidden = { 175 | arrowOutline = self:_create("Triangle", { Thickness = 3, Visible = false }), 176 | arrow = self:_create("Triangle", { Filled = true, Visible = false }) 177 | } 178 | }; 179 | 180 | self.renderConnection = runService.Heartbeat:Connect(function(deltaTime) 181 | self:Update(deltaTime); 182 | self:Render(deltaTime); 183 | end); 184 | end 185 | 186 | function EspObject:Destruct() 187 | self.renderConnection:Disconnect(); 188 | 189 | for i = 1, #self.bin do 190 | self.bin[i]:Remove(); 191 | end 192 | 193 | clear(self); 194 | end 195 | 196 | function EspObject:Update() 197 | local interface = self.interface; 198 | 199 | self.options = interface.teamSettings[interface.isFriendly(self.player) and "friendly" or "enemy"]; 200 | self.character = interface.getCharacter(self.player); 201 | self.health, self.maxHealth = interface.getHealth(self.player); 202 | self.weapon = interface.getWeapon(self.player); 203 | self.enabled = self.options.enabled and self.character and not 204 | (#interface.whitelist > 0 and not find(interface.whitelist, self.player.UserId)); 205 | 206 | local head = self.enabled and findFirstChild(self.character, "Head"); 207 | if not head then 208 | self.charCache = {}; 209 | self.onScreen = false; 210 | return; 211 | end 212 | 213 | local _, onScreen, depth = worldToScreen(head.Position); 214 | self.onScreen = onScreen; 215 | self.distance = depth; 216 | 217 | if interface.sharedSettings.limitDistance and depth > interface.sharedSettings.maxDistance then 218 | self.onScreen = false; 219 | end 220 | 221 | if self.onScreen then 222 | local cache = self.charCache; 223 | local children = getChildren(self.character); 224 | if not cache[1] or self.childCount ~= #children then 225 | clear(cache); 226 | 227 | for i = 1, #children do 228 | local part = children[i]; 229 | if isA(part, "BasePart") and isBodyPart(part.Name) then 230 | cache[#cache + 1] = part; 231 | end 232 | end 233 | 234 | self.childCount = #children; 235 | end 236 | 237 | self.corners = calculateCorners(getBoundingBox(cache)); 238 | elseif self.options.offScreenArrow then 239 | local cframe = camera.CFrame; 240 | local flat = fromMatrix(cframe.Position, cframe.RightVector, Vector3.yAxis); 241 | local objectSpace = pointToObjectSpace(flat, head.Position); 242 | self.direction = Vector2.new(objectSpace.X, objectSpace.Z).Unit; 243 | end 244 | end 245 | 246 | function EspObject:Render() 247 | local onScreen = self.onScreen or false; 248 | local enabled = self.enabled or false; 249 | local visible = self.drawings.visible; 250 | local hidden = self.drawings.hidden; 251 | local box3d = self.drawings.box3d; 252 | local interface = self.interface; 253 | local options = self.options; 254 | local corners = self.corners; 255 | 256 | visible.box.Visible = enabled and onScreen and options.box; 257 | visible.boxOutline.Visible = visible.box.Visible and options.boxOutline; 258 | if visible.box.Visible then 259 | local box = visible.box; 260 | box.Position = corners.topLeft; 261 | box.Size = corners.bottomRight - corners.topLeft; 262 | box.Color = parseColor(self, options.boxColor[1]); 263 | box.Transparency = options.boxColor[2]; 264 | 265 | local boxOutline = visible.boxOutline; 266 | boxOutline.Position = box.Position; 267 | boxOutline.Size = box.Size; 268 | boxOutline.Color = parseColor(self, options.boxOutlineColor[1], true); 269 | boxOutline.Transparency = options.boxOutlineColor[2]; 270 | end 271 | 272 | visible.boxFill.Visible = enabled and onScreen and options.boxFill; 273 | if visible.boxFill.Visible then 274 | local boxFill = visible.boxFill; 275 | boxFill.Position = corners.topLeft; 276 | boxFill.Size = corners.bottomRight - corners.topLeft; 277 | boxFill.Color = parseColor(self, options.boxFillColor[1]); 278 | boxFill.Transparency = options.boxFillColor[2]; 279 | end 280 | 281 | visible.healthBar.Visible = enabled and onScreen and options.healthBar; 282 | visible.healthBarOutline.Visible = visible.healthBar.Visible and options.healthBarOutline; 283 | if visible.healthBar.Visible then 284 | local barFrom = corners.topLeft - HEALTH_BAR_OFFSET; 285 | local barTo = corners.bottomLeft - HEALTH_BAR_OFFSET; 286 | 287 | local healthBar = visible.healthBar; 288 | healthBar.To = barTo; 289 | healthBar.From = lerp2(barTo, barFrom, self.health/self.maxHealth); 290 | healthBar.Color = lerpColor(options.dyingColor, options.healthyColor, self.health/self.maxHealth); 291 | 292 | local healthBarOutline = visible.healthBarOutline; 293 | healthBarOutline.To = barTo + HEALTH_BAR_OUTLINE_OFFSET; 294 | healthBarOutline.From = barFrom - HEALTH_BAR_OUTLINE_OFFSET; 295 | healthBarOutline.Color = parseColor(self, options.healthBarOutlineColor[1], true); 296 | healthBarOutline.Transparency = options.healthBarOutlineColor[2]; 297 | end 298 | 299 | visible.healthText.Visible = enabled and onScreen and options.healthText; 300 | if visible.healthText.Visible then 301 | local barFrom = corners.topLeft - HEALTH_BAR_OFFSET; 302 | local barTo = corners.bottomLeft - HEALTH_BAR_OFFSET; 303 | 304 | local healthText = visible.healthText; 305 | healthText.Text = round(self.health) .. "hp"; 306 | healthText.Size = interface.sharedSettings.textSize; 307 | healthText.Font = interface.sharedSettings.textFont; 308 | healthText.Color = parseColor(self, options.healthTextColor[1]); 309 | healthText.Transparency = options.healthTextColor[2]; 310 | healthText.Outline = options.healthTextOutline; 311 | healthText.OutlineColor = parseColor(self, options.healthTextOutlineColor, true); 312 | healthText.Position = lerp2(barTo, barFrom, self.health/self.maxHealth) - healthText.TextBounds*0.5 - HEALTH_TEXT_OFFSET; 313 | end 314 | 315 | visible.name.Visible = enabled and onScreen and options.name; 316 | if visible.name.Visible then 317 | local name = visible.name; 318 | name.Size = interface.sharedSettings.textSize; 319 | name.Font = interface.sharedSettings.textFont; 320 | name.Color = parseColor(self, options.nameColor[1]); 321 | name.Transparency = options.nameColor[2]; 322 | name.Outline = options.nameOutline; 323 | name.OutlineColor = parseColor(self, options.nameOutlineColor, true); 324 | name.Position = (corners.topLeft + corners.topRight)*0.5 - Vector2.yAxis*name.TextBounds.Y - NAME_OFFSET; 325 | end 326 | 327 | visible.distance.Visible = enabled and onScreen and self.distance and options.distance; 328 | if visible.distance.Visible then 329 | local distance = visible.distance; 330 | distance.Text = round(self.distance) .. " studs"; 331 | distance.Size = interface.sharedSettings.textSize; 332 | distance.Font = interface.sharedSettings.textFont; 333 | distance.Color = parseColor(self, options.distanceColor[1]); 334 | distance.Transparency = options.distanceColor[2]; 335 | distance.Outline = options.distanceOutline; 336 | distance.OutlineColor = parseColor(self, options.distanceOutlineColor, true); 337 | distance.Position = (corners.bottomLeft + corners.bottomRight)*0.5 + DISTANCE_OFFSET; 338 | end 339 | 340 | visible.weapon.Visible = enabled and onScreen and options.weapon; 341 | if visible.weapon.Visible then 342 | local weapon = visible.weapon; 343 | weapon.Text = self.weapon; 344 | weapon.Size = interface.sharedSettings.textSize; 345 | weapon.Font = interface.sharedSettings.textFont; 346 | weapon.Color = parseColor(self, options.weaponColor[1]); 347 | weapon.Transparency = options.weaponColor[2]; 348 | weapon.Outline = options.weaponOutline; 349 | weapon.OutlineColor = parseColor(self, options.weaponOutlineColor, true); 350 | weapon.Position = 351 | (corners.bottomLeft + corners.bottomRight)*0.5 + 352 | (visible.distance.Visible and DISTANCE_OFFSET + Vector2.yAxis*visible.distance.TextBounds.Y or Vector2.zero); 353 | end 354 | 355 | visible.tracer.Visible = enabled and onScreen and options.tracer; 356 | visible.tracerOutline.Visible = visible.tracer.Visible and options.tracerOutline; 357 | if visible.tracer.Visible then 358 | local tracer = visible.tracer; 359 | tracer.Color = parseColor(self, options.tracerColor[1]); 360 | tracer.Transparency = options.tracerColor[2]; 361 | tracer.To = (corners.bottomLeft + corners.bottomRight)*0.5; 362 | tracer.From = 363 | options.tracerOrigin == "Middle" and viewportSize*0.5 or 364 | options.tracerOrigin == "Top" and viewportSize*Vector2.new(0.5, 0) or 365 | options.tracerOrigin == "Bottom" and viewportSize*Vector2.new(0.5, 1); 366 | 367 | local tracerOutline = visible.tracerOutline; 368 | tracerOutline.Color = parseColor(self, options.tracerOutlineColor[1], true); 369 | tracerOutline.Transparency = options.tracerOutlineColor[2]; 370 | tracerOutline.To = tracer.To; 371 | tracerOutline.From = tracer.From; 372 | end 373 | 374 | hidden.arrow.Visible = enabled and (not onScreen) and options.offScreenArrow; 375 | hidden.arrowOutline.Visible = hidden.arrow.Visible and options.offScreenArrowOutline; 376 | if hidden.arrow.Visible and self.direction then 377 | local arrow = hidden.arrow; 378 | arrow.PointA = min2(max2(viewportSize*0.5 + self.direction*options.offScreenArrowRadius, Vector2.one*25), viewportSize - Vector2.one*25); 379 | arrow.PointB = arrow.PointA - rotateVector(self.direction, 0.45)*options.offScreenArrowSize; 380 | arrow.PointC = arrow.PointA - rotateVector(self.direction, -0.45)*options.offScreenArrowSize; 381 | arrow.Color = parseColor(self, options.offScreenArrowColor[1]); 382 | arrow.Transparency = options.offScreenArrowColor[2]; 383 | 384 | local arrowOutline = hidden.arrowOutline; 385 | arrowOutline.PointA = arrow.PointA; 386 | arrowOutline.PointB = arrow.PointB; 387 | arrowOutline.PointC = arrow.PointC; 388 | arrowOutline.Color = parseColor(self, options.offScreenArrowOutlineColor[1], true); 389 | arrowOutline.Transparency = options.offScreenArrowOutlineColor[2]; 390 | end 391 | 392 | local box3dEnabled = enabled and onScreen and options.box3d; 393 | for i = 1, #box3d do 394 | local face = box3d[i]; 395 | for i2 = 1, #face do 396 | local line = face[i2]; 397 | line.Visible = box3dEnabled; 398 | line.Color = parseColor(self, options.box3dColor[1]); 399 | line.Transparency = options.box3dColor[2]; 400 | end 401 | 402 | if box3dEnabled then 403 | local line1 = face[1]; 404 | line1.From = corners.corners[i]; 405 | line1.To = corners.corners[i == 4 and 1 or i+1]; 406 | 407 | local line2 = face[2]; 408 | line2.From = corners.corners[i == 4 and 1 or i+1]; 409 | line2.To = corners.corners[i == 4 and 5 or i+5]; 410 | 411 | local line3 = face[3]; 412 | line3.From = corners.corners[i == 4 and 5 or i+5]; 413 | line3.To = corners.corners[i == 4 and 8 or i+4]; 414 | end 415 | end 416 | end 417 | 418 | -- cham object 419 | local ChamObject = {}; 420 | ChamObject.__index = ChamObject; 421 | 422 | function ChamObject.new(player, interface) 423 | local self = setmetatable({}, ChamObject); 424 | self.player = assert(player, "Missing argument #1 (Player expected)"); 425 | self.interface = assert(interface, "Missing argument #2 (table expected)"); 426 | self:Construct(); 427 | return self; 428 | end 429 | 430 | function ChamObject:Construct() 431 | self.highlight = Instance.new("Highlight", container); 432 | self.updateConnection = runService.Heartbeat:Connect(function() 433 | self:Update(); 434 | end); 435 | end 436 | 437 | function ChamObject:Destruct() 438 | self.updateConnection:Disconnect(); 439 | self.highlight:Destroy(); 440 | 441 | clear(self); 442 | end 443 | 444 | function ChamObject:Update() 445 | local highlight = self.highlight; 446 | local interface = self.interface; 447 | local character = interface.getCharacter(self.player); 448 | local options = interface.teamSettings[interface.isFriendly(self.player) and "friendly" or "enemy"]; 449 | local enabled = options.enabled and character and not 450 | (#interface.whitelist > 0 and not find(interface.whitelist, self.player.UserId)); 451 | 452 | highlight.Enabled = enabled and options.chams; 453 | if highlight.Enabled then 454 | highlight.Adornee = character; 455 | highlight.FillColor = parseColor(self, options.chamsFillColor[1]); 456 | highlight.FillTransparency = options.chamsFillColor[2]; 457 | highlight.OutlineColor = parseColor(self, options.chamsOutlineColor[1], true); 458 | highlight.OutlineTransparency = options.chamsOutlineColor[2]; 459 | highlight.DepthMode = options.chamsVisibleOnly and "Occluded" or "AlwaysOnTop"; 460 | end 461 | end 462 | 463 | -- instance class 464 | local InstanceObject = {}; 465 | InstanceObject.__index = InstanceObject; 466 | 467 | function InstanceObject.new(instance, options) 468 | local self = setmetatable({}, InstanceObject); 469 | self.instance = assert(instance, "Missing argument #1 (Instance Expected)"); 470 | self.options = assert(options, "Missing argument #2 (table expected)"); 471 | self:Construct(); 472 | return self; 473 | end 474 | 475 | function InstanceObject:Construct() 476 | local options = self.options; 477 | options.enabled = options.enabled == nil and true or options.enabled; 478 | options.text = options.text or "{name}"; 479 | options.textColor = options.textColor or { Color3.new(1,1,1), 1 }; 480 | options.textOutline = options.textOutline == nil and true or options.textOutline; 481 | options.textOutlineColor = options.textOutlineColor or Color3.new(); 482 | options.textSize = options.textSize or 13; 483 | options.textFont = options.textFont or 2; 484 | options.limitDistance = options.limitDistance or false; 485 | options.maxDistance = options.maxDistance or 150; 486 | 487 | self.text = Drawing.new("Text"); 488 | self.text.Center = true; 489 | 490 | self.renderConnection = runService.Heartbeat:Connect(function(deltaTime) 491 | self:Render(deltaTime); 492 | end); 493 | end 494 | 495 | function InstanceObject:Destruct() 496 | self.renderConnection:Disconnect(); 497 | self.text:Remove(); 498 | end 499 | 500 | function InstanceObject:Render() 501 | local instance = self.instance; 502 | if not instance or not instance.Parent then 503 | return self:Destruct(); 504 | end 505 | 506 | local text = self.text; 507 | local options = self.options; 508 | if not options.enabled then 509 | text.Visible = false; 510 | return; 511 | end 512 | 513 | local world = getPivot(instance).Position; 514 | local position, visible, depth = worldToScreen(world); 515 | if options.limitDistance and depth > options.maxDistance then 516 | visible = false; 517 | end 518 | 519 | text.Visible = visible; 520 | if text.Visible then 521 | text.Position = position; 522 | text.Color = options.textColor[1]; 523 | text.Transparency = options.textColor[2]; 524 | text.Outline = options.textOutline; 525 | text.OutlineColor = options.textOutlineColor; 526 | text.Size = options.textSize; 527 | text.Font = options.textFont; 528 | text.Text = options.text 529 | :gsub("{name}", instance.Name) 530 | :gsub("{distance}", round(depth)) 531 | :gsub("{position}", tostring(world)); 532 | end 533 | end 534 | 535 | -- interface 536 | local EspInterface = { 537 | _hasLoaded = false, 538 | _objectCache = {}, 539 | whitelist = {}, 540 | sharedSettings = { 541 | textSize = 13, 542 | textFont = 2, 543 | limitDistance = false, 544 | maxDistance = 150, 545 | useTeamColor = false 546 | }, 547 | teamSettings = { 548 | enemy = { 549 | enabled = false, 550 | box = false, 551 | boxColor = { Color3.new(1,0,0), 1 }, 552 | boxOutline = true, 553 | boxOutlineColor = { Color3.new(), 1 }, 554 | boxFill = false, 555 | boxFillColor = { Color3.new(1,0,0), 0.5 }, 556 | healthBar = false, 557 | healthyColor = Color3.new(0,1,0), 558 | dyingColor = Color3.new(1,0,0), 559 | healthBarOutline = true, 560 | healthBarOutlineColor = { Color3.new(), 0.5 }, 561 | healthText = false, 562 | healthTextColor = { Color3.new(1,1,1), 1 }, 563 | healthTextOutline = true, 564 | healthTextOutlineColor = Color3.new(), 565 | box3d = false, 566 | box3dColor = { Color3.new(1,0,0), 1 }, 567 | name = false, 568 | nameColor = { Color3.new(1,1,1), 1 }, 569 | nameOutline = true, 570 | nameOutlineColor = Color3.new(), 571 | weapon = false, 572 | weaponColor = { Color3.new(1,1,1), 1 }, 573 | weaponOutline = true, 574 | weaponOutlineColor = Color3.new(), 575 | distance = false, 576 | distanceColor = { Color3.new(1,1,1), 1 }, 577 | distanceOutline = true, 578 | distanceOutlineColor = Color3.new(), 579 | tracer = false, 580 | tracerOrigin = "Bottom", 581 | tracerColor = { Color3.new(1,0,0), 1 }, 582 | tracerOutline = true, 583 | tracerOutlineColor = { Color3.new(), 1 }, 584 | offScreenArrow = false, 585 | offScreenArrowColor = { Color3.new(1,1,1), 1 }, 586 | offScreenArrowSize = 15, 587 | offScreenArrowRadius = 150, 588 | offScreenArrowOutline = true, 589 | offScreenArrowOutlineColor = { Color3.new(), 1 }, 590 | chams = false, 591 | chamsVisibleOnly = false, 592 | chamsFillColor = { Color3.new(0.2, 0.2, 0.2), 0.5 }, 593 | chamsOutlineColor = { Color3.new(1,0,0), 0 }, 594 | }, 595 | friendly = { 596 | enabled = false, 597 | box = false, 598 | boxColor = { Color3.new(0,1,0), 1 }, 599 | boxOutline = true, 600 | boxOutlineColor = { Color3.new(), 1 }, 601 | boxFill = false, 602 | boxFillColor = { Color3.new(0,1,0), 0.5 }, 603 | healthBar = false, 604 | healthyColor = Color3.new(0,1,0), 605 | dyingColor = Color3.new(1,0,0), 606 | healthBarOutline = true, 607 | healthBarOutlineColor = { Color3.new(), 0.5 }, 608 | healthText = false, 609 | healthTextColor = { Color3.new(1,1,1), 1 }, 610 | healthTextOutline = true, 611 | healthTextOutlineColor = Color3.new(), 612 | box3d = false, 613 | box3dColor = { Color3.new(0,1,0), 1 }, 614 | name = false, 615 | nameColor = { Color3.new(1,1,1), 1 }, 616 | nameOutline = true, 617 | nameOutlineColor = Color3.new(), 618 | weapon = false, 619 | weaponColor = { Color3.new(1,1,1), 1 }, 620 | weaponOutline = true, 621 | weaponOutlineColor = Color3.new(), 622 | distance = false, 623 | distanceColor = { Color3.new(1,1,1), 1 }, 624 | distanceOutline = true, 625 | distanceOutlineColor = Color3.new(), 626 | tracer = false, 627 | tracerOrigin = "Bottom", 628 | tracerColor = { Color3.new(0,1,0), 1 }, 629 | tracerOutline = true, 630 | tracerOutlineColor = { Color3.new(), 1 }, 631 | offScreenArrow = false, 632 | offScreenArrowColor = { Color3.new(1,1,1), 1 }, 633 | offScreenArrowSize = 15, 634 | offScreenArrowRadius = 150, 635 | offScreenArrowOutline = true, 636 | offScreenArrowOutlineColor = { Color3.new(), 1 }, 637 | chams = false, 638 | chamsVisibleOnly = false, 639 | chamsFillColor = { Color3.new(0.2, 0.2, 0.2), 0.5 }, 640 | chamsOutlineColor = { Color3.new(0,1,0), 0 } 641 | } 642 | } 643 | }; 644 | 645 | function EspInterface.AddInstance(instance, options) 646 | local cache = EspInterface._objectCache; 647 | if cache[instance] then 648 | warn("Instance handler already exists."); 649 | else 650 | cache[instance] = { InstanceObject.new(instance, options) }; 651 | end 652 | return cache[instance][1]; 653 | end 654 | 655 | function EspInterface.Load() 656 | assert(not EspInterface._hasLoaded, "Esp has already been loaded."); 657 | 658 | local function createObject(player) 659 | EspInterface._objectCache[player] = { 660 | EspObject.new(player, EspInterface), 661 | ChamObject.new(player, EspInterface) 662 | }; 663 | end 664 | 665 | local function removeObject(player) 666 | local object = EspInterface._objectCache[player]; 667 | if object then 668 | for i = 1, #object do 669 | object[i]:Destruct(); 670 | end 671 | EspInterface._objectCache[player] = nil; 672 | end 673 | end 674 | 675 | local plrs = players:GetPlayers(); 676 | for i = 2, #plrs do 677 | createObject(plrs[i]); 678 | end 679 | 680 | EspInterface.playerAdded = players.PlayerAdded:Connect(createObject); 681 | EspInterface.playerRemoving = players.PlayerRemoving:Connect(removeObject); 682 | EspInterface._hasLoaded = true; 683 | end 684 | 685 | function EspInterface.Unload() 686 | assert(EspInterface._hasLoaded, "Esp has not been loaded yet."); 687 | 688 | for index, object in next, EspInterface._objectCache do 689 | for i = 1, #object do 690 | object[i]:Destruct(); 691 | end 692 | EspInterface._objectCache[index] = nil; 693 | end 694 | 695 | EspInterface.playerAdded:Disconnect(); 696 | EspInterface.playerRemoving:Disconnect(); 697 | EspInterface._hasLoaded = false; 698 | end 699 | 700 | -- game specific functions 701 | function EspInterface.getWeapon(player) 702 | return "Unknown"; 703 | end 704 | 705 | function EspInterface.isFriendly(player) 706 | return player.Team and player.Team == localPlayer.Team; 707 | end 708 | 709 | function EspInterface.getTeamColor(player) 710 | return player.Team and player.Team.TeamColor and player.Team.TeamColor.Color; 711 | end 712 | 713 | function EspInterface.getCharacter(player) 714 | return player.Character; 715 | end 716 | 717 | function EspInterface.getHealth(player) 718 | local character = player and EspInterface.getCharacter(player); 719 | local humanoid = character and findFirstChildOfClass(character, "Humanoid"); 720 | if humanoid then 721 | return humanoid.Health, humanoid.MaxHealth; 722 | end 723 | return 100, 100; 724 | end 725 | 726 | return EspInterface; 727 | -------------------------------------------------------------------------------- /library/Pathfinding: -------------------------------------------------------------------------------- 1 | -- This file was generated using Luraph Obfuscator v13.4.6 2 | -- fi 3 | return(function(WN,MN,YN,zN,ON,tN,bN,FM,yN,hN,iN,AN,uN,TN,jN,RN,DN,PN,rN,XN,QN,ZN,NN,LM,fN,oM,HN,aN,eN,pN,cN,nM,IN,BN,EN,SN,qN,CN,xN,gN,lN,GN,dN,kN,wN,KN,VN,UN,JN,sM,...)local b,l=aN[NN],pN;local i,mN,k,d,S,I,e,y,T,c=uN,6,gN,gN,gN,gN,gN,gN,gN,gN;local n,o,L,F=rN,CN,HN,xN;local u=(fN);local t,J=tN,(JN);local a,N,p=aN[lN],iN,(aN[kN]);local g,r=dN,SN;local C,H=IN[eN],(yN);local s,v,m=cN,qN,MN;repeat if not(mN<=4)then if not(mN<=6)then if not(mN<=7)then do if mN~=8 then y=g(a(y,5),jN,function(O9)do if N(O9,2)~=72 then local CV=(0);local bV=gN;repeat do if CV~=0 then if not(T)then return bV;else local e1=u(bV,T);local r1=1;while(YN)do if r1==0 then do return e1;end;else T=gN;do r1=0;end;end;end;end;CV=2;else bV=p(L(O9,16));CV=1;continue;end;end;until CV>1;else local fS=(0);while(YN)do if fS~=0 then return XN;else T=L(a(O9,1,1));fS=1;end;end;end;end;end);mN=0;do continue;end;else mN=2;end;end;else mN=3;end;else if mN==5 then do S=1;end;mN=4;continue;else do k=i();end;mN=7;do continue;end;end;end;else if not(mN<=1)then do if not(mN<=2)then if mN~=3 then mN=8;else do d={};end;do mN=5;end;continue;end;else y=wN;mN=1;continue;end;end;else if mN~=0 then do mN=9;end;else c=function()local LA=N(y,S,S);local rA=(1);do repeat if rA~=0 then S=S+1;rA=0;continue;else return LA;end;until(RN);end;end;mN=10;continue;end;end;end;until mN==10;mN=0;local q,M=gN,(gN);repeat if mN~=0 then M=2147483648;do mN=2;end;continue;else q=function()local Qz,sz,kz=0,gN,gN;repeat if not(Qz<=0)then if Qz~=1 then S=kz;Qz=1;continue;else return sz;end;else sz,kz=b(GN,y,S);Qz=2;continue;end;until(RN);end;mN=1;continue;end;until mN>=2;local R,w=gN,(gN);do for Sr=0,1 do if Sr==0 then do R=WN;end;continue;else w=2^52;end;end;end;local j,G,W,K=R-1,gN,gN,gN;do for LR=0,3 do if not(LR<=1)then if LR~=2 then K=function()local HB,GB,uB=1,gN,gN;do repeat do if not(HB<=0)then if HB~=1 then do S=uB;end;do HB=0;end;else do GB,uB=b(KN,y,S);end;HB=2;continue;end;else return GB;end;end;until(RN);end;end;else W=function(hk,zk,Tk)local Ok,pk=1,gN;while Ok<2 do if Ok==0 then do pk=pk-pk%1;end;do Ok=2;end;else do pk=(hk/G[zk])%G[Tk];end;do Ok=0;end;end;end;return pk;end;do continue;end;end;else do if LR~=0 then do local ye=(gN);local We=(0);do repeat if We~=0 then for iS=1,31 do local oS=1;while(YN)do if oS~=0 then do(G)[iS]=ye;end;do oS=0;end;continue;else do ye=ye*2;end;break;end;end;end;We=2;else do ye=2;end;We=1;continue;end;until We==2;end;end;continue;else G={[0]=1};do continue;end;end;end;end;end;end;local U,P=gN,(gN);for oS=0,1 do do if oS~=0 then P=PN;continue;else do U=function()local AP=0;local tP,qP=gN,gN;while AP~=2 do if AP~=0 then S=qP;AP=2;continue;else tP,qP=b(UN,y,S);AP=1;end;end;return tP;end;end;end;end;end;local D,z=DN[zN],hN;local h,V,B=VN,DN[BN],(ZN);mN=4;local A,Q,O,E,nN,oN=gN,gN,gN,gN,gN,gN;repeat if not(mN<=3)then do if not(mN<=5)then if not(mN<=6)then if mN~=7 then do for Fv=1,c()do local Nv=(gN);do for kE=0,2 do if not(kE<=0)then if kE==1 then(O)[Fv-1]=Nv;continue;else for B1=1,c()do local A1,D1,x1=3,gN,gN;do while A1~=4 do if A1<=1 then do if A1~=0 then do Nv[x1]=W(D1,0,4);end;do A1=2;end;else x1=(B1-1)*2;A1=1;end;end;else if A1==2 then do Nv[x1+1]=W(D1,4,4);end;A1=4;continue;else D1=c();A1=0;end;end;end;end;end;end;else Nv={};continue;end;end;end;end;end;mN=5;continue;else Q=function(cH)local lH,pH,dH=4,gN,(gN);while(YN)do if not(lH<=1)then if lH<=2 then dH=XN;lH=0;do continue;end;else if lH~=3 then pH=q();lH=2;continue;else S=S+pH;lH=1;do continue;end;end;end;else if lH~=0 then return dH;else for ab=1,pH,ON do local Cb=(0);local Jb=gN;local mb=ab+7997-1;while(YN)do if not(Cb<=1)then if Cb~=2 then for vn=1,#Jb do Jb[vn]=P(Jb[vn],I);I=(cH*I+179)%256;end;Cb=1;else Jb={N(y,S+ab-1,S+mb-1)};Cb=3;end;else if Cb~=0 then dH=dH..p(J(Jb));do break;end;else do if not(mb>pH)then else mb=pH;end;end;Cb=2;end;end;end;end;lH=3;continue;end;end;end;end;mN=2;continue;end;else do e=c();end;mN=0;do continue;end;end;else if mN~=4 then E=function(...)return o(QN,...),{...};end;mN=3;do continue;end;else A=function(y6)local a6,i6,M6,O6,P6=gN,gN,gN,gN,gN;local T6=(1);do while(YN)do do if not(T6<=2)then if not(T6<=3)then if T6==4 then M6=P(a6[2],e);T6=3;continue;else do e=(AN*e+y6)%256;end;do break;end;end;else O6=P(a6[3],e);T6=0;end;else do if T6<=0 then P6=P(a6[4],e);T6=5;else if T6==1 then a6={N(y,S,S+3)};T6=2;else do i6=P(a6[1],e);end;T6=4;end;end;end;end;end;end;end;do T6=0;end;repeat if T6~=0 then return P6*16777216+O6*65536+M6*256+i6;else do S=S+4;end;do T6=1;end;end;until(RN);end;mN=7;end;end;end;else do if mN<=1 then do if mN~=0 then oN=1;mN=9;continue;else O={};mN=8;do continue;end;end;end;else if mN==2 then I=c();mN=6;else nN={};mN=1;continue;end;end;end;end;until mN>8;local LN,FN=gN,(gN);do for IT=0,2 do do if IT<=0 then LN={};do continue;end;else if IT~=1 then function FN(J1,B1,k1)local d1=(J1[1]);local t1=J1[8];local z1=J1[6];local w1,n1=J1[3],J1[7];local r1,x1,m1=J1[2],J1[5],(J1[9]);local f1=(H({},{__mode=EN}));local R1=gN;if z1==1 then R1=function(...)local ry=({});local Qy,oy=0,1;local dy=i();local uy=((dy==k and B1 or dy));local Ky,jy=E(...);Ky=Ky-1;for c0=0,Ky do if not(n1>c0)then do break;end;else ry[c0]=jy[c0+1];end;end;LN[1]=J1;LN[2]=ry;if not m1 then jy=gN;elseif not(t1)then else ry[n1]={[nM]=Ky>=n1 and Ky-n1+1 or 0,J(jy,n1+1,Ky+1)};end;do if uy~=dy then l(R1,uy);end;end;while true do local ef=(d1[oy]);local cf=ef[4];oy=oy+1;do if not(cf<52)then if not(cf>=78)then if cf<65 then if not(cf<58)then if not(cf>=61)then do if not(cf<59)then if cf~=60 then local B4=(ef[7]);(ry[B4])(ry[B4+1],ry[B4+2]);do Qy=B4-1;end;else(LN)[ef[9]]=ry[ef[7]];end;else(uy)[ef[5]]=ry[ef[7]];end;end;else do if cf<63 then if cf~=62 then do ry[ef[7]]=ry[ef[9]]==ry[ef[8]];end;else local js=(ef[7]);local Rs=(ry[js+2]);local ns=ry[js]+Rs;ry[js]=ns;do if not(Rs>0)then if not(ns>=ry[js+1])then else oy=ef[2];(ry)[js+3]=ns;end;else if ns<=ry[js+1]then oy=ef[2];(ry)[js+3]=ns;end;end;end;end;else do if cf~=64 then if ef[6]==ry[ef[8]]then else do oy=oy+1;end;end;else(ry)[ef[7]]=V(ry[ef[9]],ry[ef[8]]);end;end;end;end;end;else if not(cf<55)then if not(cf<56)then do if cf~=57 then(ry)[ef[7]]={};else ry[ef[7]]=V(ef[6],ef[1]);end;end;else if not(not(ef[6]=53)then local s9,Z9=w1[ef[2]],gN;local S9=s9[4];if not(S9>0)then else Z9={};for DT=0,S9-1 do local rT=(d1[oy]);local qT=rT[4];if qT~=91 then Z9[DT]=k1[rT[9]];else do Z9[DT]={ry,rT[9]};end;end;do oy=oy+1;end;end;(C)(f1,Z9);end;ry[ef[7]]=FN(s9,uy,Z9);else if cf==54 then if not(not ry[ef[7]])then else oy=oy+1;end;else local cc=(ry[ef[9]]);local zc=(ry[ef[8]]);local Pc=ef[7];ry[Pc+1]=cc;ry[Pc]=cc[zc];end;end;end;end;end;else if not(cf<71)then if not(cf>=74)then do if not(cf<72)then if cf==73 then if ef[8]==243 then oy=oy-1;(d1)[oy]={[7]=(ef[7]-191)%256,[9]=(ef[9]-191)%LM,[4]=3};elseif ef[8]~=238 then ry[ef[7]]=not ry[ef[9]];else do oy=oy-1;end;d1[oy]={[7]=(ef[7]-119)%256,[9]=(ef[9]-119)%256,[4]=40};end;else local y7=(ef[7]);ry[y7]=ry[y7](ry[y7+1],ry[y7+2]);Qy=y7;end;else ry[ef[7]]=ef[5];end;end;else if not(cf>=76)then do if cf~=75 then local Ls=(k1[ef[9]]);ry[ef[7]]=Ls[1][Ls[2]];else Qy=ef[7];(ry)[Qy]=ry[Qy]();end;end;else do if cf~=77 then do ry[ef[7]]=ry[ef[9]]/ry[ef[8]];end;else(ry)[ef[7]]=ef[6]=68)then if cf>=66 then if cf~=67 then do ry[ef[7]]=ef[6]-ef[1];end;else if ef[8]==245 then do oy=oy-1;end;(d1)[oy]={[7]=(ef[7]-221)%256,[9]=(ef[9]-221)%256,[4]=91};elseif ef[8]==71 then do oy=oy-1;end;(d1)[oy]={[9]=(ef[9]-251)%256,[7]=(ef[7]-251)%256,[4]=40};elseif ef[8]~=29 then do ry[ef[7]]=-ry[ef[9]];end;else oy=oy-1;(d1)[oy]={[9]=(ef[9]-10)%256,[7]=(ef[7]-10)%256,[4]=4};end;end;else(ry)[ef[7]]=z(ef[6],ef[1]);end;else if not(cf>=69)then if ry[ef[7]]then do oy=oy+1;end;end;else if cf~=70 then local m_=(ry[ef[9]]);do if not(not m_)then do ry[ef[7]]=m_;end;else oy=oy+1;end;end;else local Bj=ef[7];local Mj,Cj=Bj+1,Bj+2;do(ry)[Bj]=0+ry[Bj];end;ry[Mj]=0+ry[Mj];(ry)[Cj]=0+ry[Cj];do(ry)[Bj]=ry[Bj]-ry[Cj];end;oy=ef[2];end;end;end;end;end;end;else if not(cf<91)then if not(cf<98)then do if not(cf>=101)then do if not(cf<99)then if cf~=100 then local KZ=(ef[7]);ry[KZ]=ry[KZ](J(ry,KZ+1,Qy));Qy=KZ;else(ry)[ef[7]]=ry[ef[9]]^ry[ef[8]];end;else local PH=(ef[7]);ry[PH](ry[PH+1]);do Qy=PH-1;end;end;end;else do if not(cf>=103)then if cf==oM then(ry)[ef[7]]=ef[6]/ef[1];else local Cc=ef[7];ry[Cc](J(ry,Cc+1,Qy));Qy=Cc-1;end;else if cf==104 then local yl=ef[6]/ef[1];(ry)[ef[7]]=yl-yl%1;else local d9,C9=ef[7],(ef[8]-1)*50;for a5=1,ef[9]do do(ry[d9])[C9+a5]=ry[d9+a5];end;end;end;end;end;end;end;else if not(cf<94)then if not(cf>=96)then if cf~=95 then if ef[8]~=204 then do(ry)[ef[7]]=jy[n1+1];end;else oy=oy-1;(d1)[oy]={[4]=54,[7]=(ef[7]-24)%256,[8]=(ef[9]-24)%256};end;else ry[ef[7]]=D(ry[ef[9]],ef[1]);end;else if cf~=97 then local Sb=ef[9];local ib=ry[Sb];do for Pl=Sb+1,ef[8]do ib=ib..ry[Pl];end;end;ry[ef[7]]=ib;else ry[ef[7]]=LN[ef[9]];end;end;else if not(cf<92)then if cf==93 then(ry)[ef[7]]=z(ry[ef[9]],ef[1]);else(ry[ef[7]])[ry[ef[9]]]=ry[ef[8]];end;else ry[ef[7]]=ry[ef[9]];end;end;end;else if cf<84 then if not(cf>=81)then if cf<79 then if not(ry[ef[9]]<=ef[1])then else do oy=oy+1;end;end;else if cf~=80 then(ry)[ef[7]]=RN;else if ef[6]==ef[1]then else do oy=oy+1;end;end;end;end;else if cf>=82 then if cf~=83 then ry[ef[7]]=ef[6]+ef[1];else local n_=(ef[7]);Qy=n_+ef[9]-1;ry[n_](J(ry,n_+1,Qy));Qy=n_-1;end;else ry[ef[7]]=uy[ef[5]];end;end;else if not(cf>=87)then if not(cf<85)then if cf~=86 then ry[ef[7]]=ry[ef[9]]+ry[ef[8]];else local dY=ry[ef[9]]/ry[ef[8]];do(ry)[ef[7]]=dY-dY%1;end;end;else(ry)[ef[7]]=ry[ef[9]]>ef[1];end;else do if cf>=89 then if cf~=90 then local o0=(ry[ef[9]]);local i0=ef[7];ry[i0+1]=o0;do(ry)[i0]=o0[ef[1]];end;else ry[ef[7]]=B(ry[ef[9]],ef[1]);end;else if cf~=88 then ry[ef[7]]=ry[ef[9]][ry[ef[8]]];else local vk=k1[ef[9]];vk[1][vk[2]]=ry[ef[7]];end;end;end;end;end;end;end;else do if cf<26 then do if not(cf>=13)then if not(cf>=6)then if not(cf<3)then if not(cf>=4)then if ef[8]==105 then do oy=oy-1;end;do(d1)[oy]={[4]=2,[7]=(ef[7]-20)%256,[9]=(ef[9]-20)%256};end;elseif ef[8]~=48 then do(ry)[ef[7]]=#ry[ef[9]];end;else oy=oy-1;do d1[oy]={[4]=18,[7]=(ef[7]-146)%256,[9]=(ef[9]-146)%256};end;end;else if cf==5 then Qy=ef[7];(ry[Qy])();Qy=Qy-1;else if ef[8]~=168 then repeat local WR,PR=f1,(ry);if not(#WR>0)then else local Ie={};for GE,BE in t,WR do for ig,bg in t,BE do if not(bg[1]==PR and bg[2]>=0)then else local Zy=bg[2];do if not(not Ie[Zy])then else(Ie)[Zy]={PR[Zy]};end;end;(bg)[1]=Ie[Zy];bg[2]=1;end;end;end;end;until YN;local Ux=(ef[7]);return J(ry,Ux,Ux+ef[9]-2);else oy=oy-1;(d1)[oy]={[7]=(ef[7]-231)%256,[4]=2,[9]=(ef[9]-231)%256};end;end;end;else if not(cf>=1)then(ry)[ef[7]]=ef[5];else do if cf==2 then repeat local ET,dT=f1,ry;if not(#ET>0)then else local Sk={};for GA,lA in t,ET do for tB,hB in t,lA do do if not(hB[1]==dT and hB[2]>=0)then else local E9=hB[2];if not(not Sk[E9])then else Sk[E9]={dT[E9]};end;do(hB)[1]=Sk[E9];end;hB[2]=1;end;end;end;end;end;until YN;return;else do ry[ef[7]]=ry[ef[9]]<=ry[ef[8]];end;end;end;end;end;else if cf<9 then if not(cf<7)then do if cf==8 then(ry[ef[7]])[ef[6]]=ry[ef[8]];else(ry)[ef[7]]=ry[ef[9]]%ry[ef[8]];end;end;else if ef[8]~=170 then do for zM=ef[7],ef[9]do ry[zM]=gN;end;end;else oy=oy-1;(d1)[oy]={[9]=(ef[9]-61)%256,[4]=91,[7]=(ef[7]-61)%256};end;end;else if not(cf<11)then if cf==12 then ry[ef[7]]=ef[6]%ry[ef[8]];else do ry[ef[7]]=ry[ef[9]]~=ef[1];end;end;else if cf~=10 then local Z6=(ef[7]);local S6,z6=Z6+2,Z6+3;local U6={ry[Z6](ry[Z6+1],ry[S6])};do for SM=1,ef[8]do do(ry)[S6+SM]=U6[SM];end;end;end;local F6=ry[z6];if F6==gN then do oy=oy+1;end;else(ry)[S6]=F6;end;else ry[ef[7]]=ry[ef[9]]~=ry[ef[8]];end;end;end;end;else if not(cf>=19)then if not(cf<16)then if not(cf>=17)then ry[ef[7]]=ry[ef[9]]-ry[ef[8]];else do if cf~=18 then local AJ,vJ=ef[7],(ef[9]);do Qy=AJ+vJ-1;end;repeat local yT,LT=f1,(ry);do if not(#yT>0)then else local W2={};do for Hi,ri in t,yT do for XV,BV in t,ri do do if not(BV[1]==LT and BV[2]>=0)then else local LH=(BV[2]);if not(not W2[LH])then else W2[LH]={LT[LH]};end;do BV[1]=W2[LH];end;do(BV)[2]=1;end;end;end;end;end;end;end;end;until YN;return ry[AJ](J(ry,AJ+1,Qy));else if ef[8]==219 then oy=oy-1;d1[oy]={[4]=4,[9]=(ef[9]-6)%256,[7]=(ef[7]-6)%256};else local JX=(Ky-n1);local zX=ef[7];if not(JX<0)then else do JX=-1;end;end;for im=zX,zX+JX do do ry[im]=jy[n1+(im-zX)+1];end;end;Qy=zX+JX;end;end;end;end;else do if not(cf>=14)then(ry)[ef[7]]=ry[ef[9]]ry[ef[8]];end;end;end;end;else if not(cf>=22)then if not(cf>=20)then(ry)[ef[7]]=ry[ef[9]][ef[1]];else if cf~=21 then repeat local RQ,gQ=f1,ry;do if#RQ>0 then local Tf={};do for tf,rf in t,RQ do for y3,F3 in t,rf do if not(F3[1]==gQ and F3[2]>=0)then else local e4=(F3[2]);if not(not Tf[e4])then else(Tf)[e4]={gQ[e4]};end;F3[1]=Tf[e4];F3[2]=1;end;end;end;end;end;end;until YN;local Ij=ef[7];return ry[Ij](J(ry,Ij+1,Qy));else(ry)[ef[7]]=gN;end;end;else if not(cf<24)then if cf==25 then repeat local So,qo,eo=f1,ry,(ef[7]);do if not(#So>0)then else local t9={};for BM,NM in t,So do for bu,du in t,NM do if not(du[1]==qo and du[2]>=eo)then else local V1=du[2];if not t9[V1]then(t9)[V1]={qo[V1]};end;du[1]=t9[V1];(du)[2]=1;end;end;end;end;end;until YN;else do if not(not(ef[6]<=ef[1]))then else oy=oy+1;end;end;end;else if cf==23 then if not(not(ef[6]<=ry[ef[8]]))then else oy=oy+1;end;else do ry[ef[7]]=ry[ef[9]]/ef[1];end;end;end;end;end;end;end;else do if not(cf<39)then if not(cf<45)then if not(cf>=48)then if cf<46 then repeat local t5,X5=f1,(ry);if not(#t5>0)then else local On=({});for Ov,Ev in t,t5 do do for Km,Am in t,Ev do do if not(Am[1]==X5 and Am[2]>=0)then else local x2=Am[2];do if not(not On[x2])then else(On)[x2]={X5[x2]};end;end;(Am)[1]=On[x2];(Am)[2]=1;end;end;end;end;end;end;until YN;do return ry[ef[7]]();end;else if cf~=47 then if ry[ef[9]]==ef[1]then else do oy=oy+1;end;end;else ry[ef[7]]=YN;end;end;else if not(cf>=50)then if cf~=49 then do(ry)[ef[7]]=ry[ef[9]]*ry[ef[8]];end;else(ry)[ef[7]]=P(ry[ef[9]],ry[ef[8]]);end;else if cf~=51 then ry[ef[7]]=ry[ef[9]]<=ef[1];else ry[ef[7]][ef[6]]=ef[1];end;end;end;else do if not(cf>=42)then if not(cf<40)then if cf==41 then ry[ef[7]]=ef[6]~=ry[ef[8]];else if ef[8]~=175 then repeat local NI,HI=f1,(ry);if#NI>0 then local QT={};do for mm,Nm in t,NI do do for tb,Db in t,Nm do if not(Db[1]==HI and Db[2]>=0)then else local Yt=(Db[2]);do if not(not QT[Yt])then else(QT)[Yt]={HI[Yt]};end;end;(Db)[1]=QT[Yt];(Db)[2]=1;end;end;end;end;end;end;until YN;do return J(ry,ef[7],Qy);end;else oy=oy-1;do d1[oy]={[7]=(ef[7]-132)%256,[8]=(ef[9]-132)%256,[4]=9};end;end;end;else ry[ef[7]]=ef[6]>ef[1];end;else do if not(cf<43)then do if cf==44 then if ry[ef[9]]==ry[ef[8]]then else oy=oy+1;end;else if ry[ef[9]]==ry[ef[8]]then oy=oy+1;end;end;end;else local Ou=(ef[9]);ry[ef[7]]=ry[Ou]..ry[Ou+1];end;end;end;end;end;else if cf>=32 then if cf>=35 then if not(cf>=37)then if cf==36 then if ry[ef[9]]~=ef[1]then else do oy=oy+1;end;end;else ry[ef[7]]=ry[ef[9]]>ry[ef[8]];end;else if cf==38 then local EC=ef[7];ry[EC]=ry[EC](ry[EC+1]);Qy=EC;else ry[ef[7]]=ry[ef[9]]+ef[1];end;end;else do if not(cf>=33)then do(ry)[ef[7]]={J({},1,ef[9])};end;else if cf~=34 then(ry)[ef[7]]=ry[ef[9]]>=ry[ef[8]];else oy=ef[2];end;end;end;end;else if not(cf<29)then if not(cf>=30)then ry[ef[7]]=B(ef[6],ry[ef[8]]);else if cf~=31 then(ry)[ef[7]]=ry[ef[9]]=27)then(ry[ef[7]])[ry[ef[9]]]=ef[1];else if cf==28 then ry[ef[7]]=ef[6]<=ry[ef[8]];else local A1,p1,X1=ef[7],ef[9],ef[8];if p1==0 then else Qy=A1+p1-1;end;local N1,L1=gN,(gN);if p1==1 then N1,L1=E(ry[A1]());else N1,L1=E(ry[A1](J(ry,A1+1,Qy)));end;do if X1==1 then do Qy=A1-1;end;else if X1==0 then N1=N1+A1-1;do Qy=N1;end;else N1=A1+X1-2;Qy=N1+1;end;local GG=0;for Pc=A1,N1 do GG=GG+1;(ry)[Pc]=L1[GG];end;end;end;end;end;end;end;end;end;end;end;end;end;end;end;else R1=function(...)local Gj=0;local fj=1;local ij={};local Bj=(i());local wj=(Bj==k and B1 or Bj);local Fj,Pj=E(...);Fj=Fj-1;for fw=0,Fj do if not(n1>fw)then do break;end;else(ij)[fw]=Pj[fw+1];end;end;do LN[1]=J1;end;do(LN)[2]=ij;end;if not m1 then Pj=gN;elseif not(t1)then else(ij)[n1]={[nM]=Fj>=n1 and Fj-n1+1 or 0,J(Pj,n1+1,Fj+1)};end;if wj==Bj then else(l)(R1,wj);end;while true do local Jq=d1[fj];local Wq=Jq[4];fj=fj+1;return(function(w,m,...)local i={__index=function(j,q)if not rawget(j,q)then rawset(j,q,setmetatable({},{__index=function(G,L)if not rawget(G,L)then rawset(G,L,{});end;return rawget(G,L);end}));end;return rawget(j,q);end};local J={space={Vector3.new(1,0,0),Vector3.new(-1.0,0,0),Vector3.new(0,1,0),Vector3.new(0,-1.0,0),Vector3.new(0,0,1),Vector3.new(0,0,-1.0)},diagonal={Vector3.new(1,0,1),Vector3.new(1,0,-1.0),Vector3.new(-1.0,0,1),Vector3.new(-1.0,0,-1.0),Vector3.new(1,1,0),Vector3.new(1,-1.0,0),Vector3.new(-1.0,1,0),Vector3.new(-1.0,-1.0,0),Vector3.new(0,1,1),Vector3.new(0,-1.0,1),Vector3.new(0,1,-1.0),Vector3.new(0,-1.0,-1.0)},bodydiagonal={Vector3.new(1,1,1),Vector3.new(1,-1.0,1),Vector3.new(-1.0,1,1),Vector3.new(-1.0,-1.0,1),Vector3.new(1,1,-1.0),Vector3.new(1,-1.0,-1.0),Vector3.new(-1.0,1,-1.0),Vector3.new(-1.0,-1.0,-1.0)}};local U=game:GetService("Workspace");local R=RaycastParams.new();local Q=table.insert;R.FilterType=Enum.RaycastFilterType.Blacklist;do local n=m[0][1][m[0][2]];function n:distance(L,F)local y,b,x=L.X,L.Y,L.Z;local d,k,V=F.X,F.Y,F.Z;return((y-d)^2+(b-k)^2+(x-V)^2)^0.5;end;end;do local O=m[0][1][m[0][2]];function O:findpart(v,s)return U:Raycast(v,s-v,R);end;end;do local f=m[0][1][m[0][2]];function f:findpath(l,C,n,O)local A={space=m[0][1][m[0][2]].interval,diagonal=1.4142135623730951*m[0][1][m[0][2]].interval,bodydiagonal=1.7320508075688772*m[0][1][m[0][2]].interval};local N=setmetatable({},i);local M=tick()+m[0][1][m[0][2]].maxtime;local a=tick();local W,c;R.FilterDescendantsInstances=m[0][1][m[0][2]].ignorelist;N[0][0][0]={hcost=self:distance(l,C),offset=Vector3.new(),scanned=false,position=l,lastnode=nil,gcost=0};N[0][0][0].fcost=N[0][0][0].hcost;while tick()=O then for y,k in next,J do for T,I in next,k do I=I*A.space;local r=N[E+I.X][p+I.Y][u+I.Z];local B=V.position+I;if not self:findpart(V.position,B)then if r then if r.gcost>V.gcost+A[y]then r.gcost=V.gcost+A[y];r.fcost=r.gcost+r.hcost;r.lastnode=V;end;else N[E+I.X][p+I.Y][u+I.Z]={gcost=V.gcost+A[y],lastnode=V,position=B,scanned=false};local z=N[E+I.X][p+I.Y][u+I.Z];z.hcost=self:distance(z.position,C);z.fcost=z.hcost+z.gcost;end;end;end;end;V.scanned=true;else local L=V.hcost<=O;W={};while V.lastnode do Q(W,1,V.position);V=V.lastnode;end;Q(W,1,l);V=N[E][p][u];if m[0][1][m[0][2]].performance then local d=(C-V.position).Unit*A.space;local K=self:distance(V.position,C);c=V.gcost+K;for P=1,math.floor(K/A.space)do Q(W,V.position+d*P);end;else local P={l};if not L then Q(W,C);end;for K=3,#W do if self:findpart(P[#P],W[K])then Q(P,W[K-1]);end;end;Q(P,L and W[#W]or C);W={};c=0;for v=2,#P do local D=P[v-1];local I=P[v];local B=(I-D).Unit*n;local e=self:distance(D,I);c=c+e;for x=1,math.floor(e/n)do Q(W,D+B*x);end;Q(W,I);end;end;M=tick();break;end;else M=tick();break;end;end;return W,c,M-a;end;end;end)(ij,k1,...);end;end;end;(l)(R1,B1);do return R1;end;end;else end;end;end;end;end;mN=0;local sN,vN=gN,(gN);do repeat do if not(mN<=1)then if not(mN<=2)then if mN~=3 then return FN(vN,k,gN)(...);else nN=gN;mN=4;end;else(LN)[4]=nN;mN=3;do continue;end;end;else if mN~=0 then vN=sN();mN=2;else function sN()local f8,j8,C8,z8,Z8,M8,A8,H8={{},gN,{},gN,{},gN,gN,gN,gN},5,gN,gN,gN,gN,gN,gN;repeat if not(j8<=3)then if j8<=5 then do if j8~=4 then do C8={};end;j8=3;else A8=c();do j8=8;end;end;end;else if not(j8<=6)then if j8==7 then do Z8=1;end;j8=2;else H8=c()~=0;j8=6;end;else do for qw=1,M8 do local lw,Ew=gN,gN;local Uw=1;do repeat if Uw~=0 then do Uw=0;end;else Ew=c();Uw=2;continue;end;until Uw==2;end;Uw=0;do while Uw~=3 do do if not(Uw<=0)then if Uw~=1 then if Ew==75 then lw=K();elseif Ew==104 then lw=RN;elseif Ew==237 then lw=YN;elseif Ew==95 then lw=a(Q(A8),U()+q());elseif Ew==137 then do lw=q();end;elseif Ew==167 then lw=U();elseif Ew==FM then lw=a(Q(A8),4);elseif Ew==113 then lw=K();elseif Ew~=115 then else lw=K();end;Uw=3;else if Ew==75 then do lw=K();end;elseif Ew==104 then lw=RN;elseif Ew==237 then lw=YN;elseif Ew==95 then lw=a(Q(A8),U()+q());elseif Ew==137 then lw=q();elseif Ew==167 then do lw=U();end;elseif Ew==218 then lw=a(Q(A8),4);elseif Ew==113 then lw=K();elseif Ew~=115 then else do lw=K();end;end;Uw=0;end;else if Ew==75 then lw=K();elseif Ew==104 then lw=RN;elseif Ew==237 then do lw=YN;end;elseif Ew==95 then lw=a(Q(A8),U()+q());elseif Ew==137 then lw=q();elseif Ew==167 then lw=U();elseif Ew==218 then lw=a(Q(A8),4);elseif Ew==113 then lw=K();elseif Ew==115 then lw=K();end;Uw=3;end;end;end;end;(C8)[qw-1]=Z8;local dw=({lw,{}});Uw=0;while Uw<3 do if Uw<=0 then(z8)[Z8]=dw;do Uw=2;end;continue;else do if Uw~=1 then Z8=Z8+1;Uw=1;continue;else if not(H8)then else(nN)[oN]=dw;oN=oN+1;end;Uw=3;continue;end;end;end;end;end;end;j8=9;end;end;else if not(j8<=1)then if j8~=2 then z8={};j8=7;else(f8)[6]=c();do j8=1;end;end;else if j8==0 then M8=q()-133718;j8=4;else(f8)[2]=c();j8=0;continue;end;end;end;until j8==9;do j8=4;end;local i8,V8=gN,gN;do while(YN)do if not(j8<=2)then if j8<=4 then if j8~=3 then i8=q();do j8=2;end;else f8[4]=c();j8=6;continue;end;else if j8~=5 then f8[17]=c();j8=0;else f8[18]=c();j8=1;continue;end;end;else do if not(j8<=0)then if j8==1 then do f8[10]=c();end;j8=3;else do for lL=1,i8 do(f8[3])[lL-1]=sN();end;end;j8=5;continue;end;else V8=c();break;end;end;end;end;end;(f8)[9]=W(V8,1,1)~=0;f8[8]=W(V8,2,1)~=0;do(f8)[19]=q();end;local l8=q()-133716;local L8=(c());for xB=1,l8 do local cB,JB=gN,(gN);for eH=0,1 do if eH~=0 then JB=A(L8);do continue;end;else do cB={gN,gN,gN,gN,gN,gN,gN,gN,gN,gN};end;continue;end;end;local IB=(14);do while IB<=16 do if not(IB<=7)then if IB<=11 then if not(IB<=9)then if IB~=10 then(cB)[2]=W(JB,14,18);IB=12;continue;else cB[20]=W(JB,9,18);do IB=16;end;end;else if IB~=8 then(cB)[4]=c();do IB=15;end;else cB[4]=c();IB=9;end;end;else if not(IB<=13)then do if IB<=14 then do cB[9]=W(JB,14,9);end;IB=5;do continue;end;else if IB~=15 then do(cB)[8]=W(JB,23,9);end;IB=11;else(cB)[4]=c();IB=0;continue;end;end;end;else if IB~=12 then do(cB)[20]=W(JB,20,12);end;do IB=6;end;else cB[11]=W(JB,19,7);IB=6;end;end;end;else if not(IB<=3)then do if not(IB<=5)then if IB~=6 then cB[4]=c();IB=6;else do(cB)[8]=W(JB,23,9);end;IB=17;end;else if IB~=4 then cB[20]=W(JB,20,12);IB=3;else(cB)[20]=W(JB,20,12);IB=2;end;end;end;else if not(IB<=1)then do if IB~=2 then do cB[20]=W(JB,9,18);end;IB=15;do continue;end;else cB[7]=W(JB,6,8);IB=6;end;end;else if IB~=0 then do cB[4]=c();end;IB=5;else cB[7]=W(JB,6,8);IB=11;end;end;end;end;end;end;do(f8[1])[xB]=cB;end;end;local b8=(O[f8[6]]);for jn=1,l8 do local gn=(f8[1][jn]);local zn=b8[gn[4]];local Cn=zn==9;do if(zn==15 or Cn)and gn[9]>255 then local YT=gN;for nl=0,1 do if nl~=0 then YT=C8[gn[9]-256];else(gn)[3]=YN;do continue;end;end;end;local sT=(z8[YT]);do if not(sT)then else local b9,v9=0,gN;while b9<=2 do if not(b9<=0)then if b9~=1 then v9=sT[2];b9=1;else do v9[#v9+1]={gn,6};end;b9=3;continue;end;else do gn[6]=sT[1];end;b9=2;continue;end;end;end;end;end;end;do for Vp=0,2 do if not(Vp<=0)then do if Vp~=1 then if zn~=3 then else gn[2]=jn+(gn[2]-sM)+1;end;continue;else if zn~=4 then else local AM,bM=gN,gN;do for A7=0,2 do if not(A7<=0)then if A7~=1 then if not(bM)then else(gn)[5]=bM[1];local Be=(gN);for Dm=0,1 do if Dm~=0 then Be[#Be+1]={gn,5};else do Be=bM[2];end;continue;end;end;end;do continue;end;else bM=z8[AM];end;else AM=C8[gn[2]];end;end;end;end;end;end;else if not((zn==2 or Cn)and gn[8]>255)then else(gn)[10]=YN;local lM,GM=C8[gn[8]-256],(1);local kM=gN;do while GM<2 do if GM~=0 then kM=z8[lM];GM=0;do continue;end;else if not(kM)then else local NG=(gN);for j6=0,2 do do if not(j6<=0)then if j6~=1 then do(NG)[#NG+1]={gn,1};end;do continue;end;else do NG=kM[2];end;end;else do(gn)[1]=kM[1];end;do continue;end;end;end;end;end;GM=2;end;end;end;end;continue;end;end;end;end;do f8[12]=c();end;j8=1;while(YN)do do if not(j8<=0)then do if j8~=1 then f8[7]=c();j8=0;continue;else f8[13]=q();j8=2;continue;end;end;else return f8;end;end;end;end;mN=1;do continue;end;end;end;end;until(RN);end;end)(4294967296,error,true,"\98\97\110\100",7997,next,rawget,218,setmetatable,bit32.bor,string.byte,221,getfenv,rawset,"\46\46",false,bit32,bit32.bxor,assert,"","\35",bit32.rshift,"\117\110\112\97\99\107",256,string.rep,102,tonumber,string,"\105\110\115\101\114\116",setfenv,type,"\110",table,"\108\115\104\105\102\116","\118",string.match,tostring,select,pcall,nil,"\115\117\98","\60\73\52",string.gsub,"\99\104\97\114","LPH>0BE902010035942H0090093H99092000992H0999099093993H902H092H99202H90049093990900432H00990949099929200999902H003H090102570A0200ED7571F73D6HFF023H0001035D0A0200C148A76H0014C0DA0A3H000BFE310A1C27FDEE409ADA0E3H00C93CEFEA1BC8A07D8CAF3754DD7FA76H0024C0DA0B3H00D3C6F9E0F5A1BEF31584BF46DA0D3H0004B7AA79FB82BFFA294061B388014H0012560A0200D95H0072BF018B00CA84F84A550A0200DFE9A92HE9006F94795F0B00BC7100D002B7DBDE49760A0200730484038422E7A7E067222HDED95E222H1918193408882H08512H5B595B0002C23A73202DAD1659208CB8759732CF15012609E6A8BD120CC10BE55906D0C06BF73AC327BAF954CA8FD92A1C151977BB1B142H6D1303B7494EFB412HEEED6E2229D0D3BD04589A1B9643EB3HAB5B2H12ED6D22FD2HBD7D332HDC1D5D331F3H5F3876F6B7760851D191D333203H60344H535B2H5A9A1A052HE5189A223H2426382H877AF82293F82BE0210001388D0A020019004671017H0071FF7H00DA083H009BD699D0D6F099C5DA093H0053CED16E0EFD5E7D7FDA073H00C6099478DD09F5DA063H00C3BE417EBA0ADA083H009D087BE926E0FE04DA073H00D58033DAC88C2A68DA063H006A0DF885CF8571027H00718H00DA0A3H00740762271FCCF2448DD1DA073H005A7DE804C9351071C37H00DA083H007752B51070EFFDB0DA083H002F4AED8794F5BC36DA073H00E742250FDC1B70DA083H00CC9F3A02974B194EDA093H00445732FB359E0C14CEDA0A3H000F2ACDE7F40FC750A25ADA073H000530633C98D81ADA0E3H001A3DA878236B56527C014CBA2034DA0B3H009CEF0AF2C7E829E777C676DA0D3H00E51043619EE23A8D74E69F5381DA073H000417F23B65CB5ADA073H00317CCF89E52H19DA4H00DA0E3H002669F4D8BDA895577FD50D5DB698DA083H0068DB1686BB9AA759DA093H00E0930E7233C1A90C2C71DD7H00DA0B3H004B06498B3187F7834AB1CFDA0B3H004C1FBAA927C882CBADB9D571E8036H00DA0F3H0015C0739D9448E2CF39595F874BD822DA083H00A285B0BC810C439BDA0E3H009ABD28F7BFF7C1D3F793C93DABB5DA113H001C6F8A733626FC21B143A94CCBF9B34B51DA093H00DF7A9D7B0FC410EAF0DA093H0072D5806CF1D29D2306DA0B3H000DF8EBD2861A720F2715D171D37H00DA083H009E21ECD23B098B33DA0F3H009659641037C10D76FAF0A84E2881BDDA083H00CB86C9278B2C4436DA083H00837E01A8FA5828AFDA073H003B76392D3954FADA083H0040F36E2EE36E4EA9DA0C3H00B8AB66DD46A6416052023D8ADA123H00AC7F1A51C96822754D59771145B5273FF98BDA0D3H000AAD98D419FD7BD47697792D597100016H00DA093H00C18C5F887CFF9C538D073H000109650A0200BD00DA073H0004A7FE5FBD3581DA073H008DCC4F714971F7DA0B3H006AF5949E7D7F39D9932F3BDA0C3H009F16F1D3BB15B750186DAB8BDA4H00718H00DA0E3H00FB022D808648A45446ECFCDAF24ADA0A3H00A9784B7C8D1D4D57FCB3DA0B3H00739A652A86531C7FF343B9DA073H000C8F460F25B3D9DA0E3H0035D4372D3CEA9957F3E8B33F5F85DA073H0013BA050AE6337CDA123H00283B42014D5C126D190DAFB191B10787DDEFDA0B3H00523DBC1317A274DFB3CBE1DA093H00277EB93BB4177F2FAA4H000B7203530006CACB589A0A020037FE7EF37E227D3D70FD222H202DA022D797D6D734D212D1D25181018381009414ADE620FBBBC18D2026A1705C258536CBAA22086843B3451FD02C96463AA45CBE27498BC0C7323C997CF0498368D7A54D4E87ABEF464DF438C5672H7079F02227A627E708A262A42H22D150D39333E4A4E16422CB8ACB09087677F7B40855D5AB2A2258595898086FEF921022CA8A2H0A4A3HD959222H4C8F8C5153D393101B3H9E1E222HDDB49D0600C140C63837F62HF744B2602CD036612062A10834B4C84B222H5B2H1B4A86C686062225E4A5E608E828129722BF08C80543DA5A21A522296DEA67431C1D1EDD08E32261A1336EAE931122EDAC6F2C08D05153110807C7F8782282C3034308F130723008840479FB226B3H2B28163H564A353H75442H3839B8228F0F75F0226A2A2HAA4A3HF979222HEC2F2C5173F32H33112H7E2H3E4A3HBD3D2220A0636051D760A06D431292EF6D22C1812HC102EA6CE5122B2H01085C0A02002500DA043H008611287C71FF7H00A73H00205FA00242DA083H007A55FC6F5C30FEF771017H00719H003H00763506DB00F86E2F29960A0200FBD494DF54222HFFF47F221EDE149E222HE1E0E13438B82H38515393525300A2221AD0202HD5EEA3205CFA1B1550A772F43E06E6252H4E22C96AD10504C095FF03457B08CCA5062A48F3E9497D976F1040E4A4E364224F8F2HCF5BAE6E51D1223149864B433HC8486223E3DC5C22723H324425E52CA522EC2C119322B7F6B6B75836F6F7F658599958D9222H90D1D000CB3H8B44BA8DFCE0114D8DCCCD00F4340B8B225FDF9E9F003E7F3F3E002H817CFE22D8983H58B3732HF35882022HC2513H75F522BC7C2HFC5187477DF822C6C72H864A29A82HA95BA02HE1E35C1B9BA5243E2H8A71F5224H1D4A3H0484226FEF2H6F518E3HCE002H512HD100E83H6844C38041C1615292525348C5053ABA222H4C0D0C00173H5744D6E535CE0D79B92HF90030F0F1F000EB3H2B449AF770AC4D2D6D9612461494EB6B22FF06056B0485A1A5D952000106560A0200915H005CA5010803F7B80E58720A02002F5E9E5BDE2255D550D52290D09510222H7F7E7F34D2922HD25179F92H79002HA49CD520C383F9B4208695DF4B3A5D8102EA607810FF6B5987D3BF363AFAE77A684581EA4DF6044CF79EF7014B55B5A7162EE2ADE83465E564E522209FDE2H430F4A8A3B03222H2322158988098936F4E8F4BA3493F6774B03563HD6146D3HED4A3HC8482257972HD7510A3HCA5B91D16CEE2268C8680F392H0102560A0200D55H0024D1003C00E2DF003F650A02009B5CDC5FDC2207470487222HA6A52622E9292HE934C0802HC0515BDB2H5B002AAA1258202HDDE6A820E4612C8842EF573C2060EEFA893E39D13AA0903688C58ED449834C442A06B29DBD604605650488406C2C2H6C02552153E11C000103560A0200195H008111003D0348533F55660A020025D757D45722C080C340222HE5E66522D696D7D634E3A32HE3511C9C2H1C002H516823201292296520EF0FBA7460785B3FAB03BDCBC5885F0E598A44407B07347F51D4591FBF5A3H69E9220AF3F09E04C73H8712F03HB0285CC831C67A00010B5A0A0200810071017H00DA093H00A25588480B4D31644EDA0B3H00ED20D374D89BFAA3F0D907DA043H009E5184144H00054C01AA03AB2H3E3F930A02000315551E95222H242FA42217D71D9722DE9EDFDE34A9E92HA951E8A8E9E8004BCBF339202HC279B7203D589A6B17EC173E551BBF42530852662976DC5C11C529585DF03A17A33E73B3A4FF424ACA4DCA22E5A72HE52F34B736D912A73H674A3HEE6E22B9392H7951B8382H782D9BDB2H9B02D210D2D3483H4DCD227CFE3D7C060F0D2H0F442HF6FE7622612160E122C0422HC0513HC343225A182H5A51352HA4E006843DF33E43B7774BC822FE3E04812289C8494A573H0888222BAA2HEB512HE262E12B1DDD199D220C8CF07322DF8142284946A3221E03B131B1311F903H50001353139322EA3H6A3885C57BFA22D4952HD4513H0787220E4F2H0E5159D82H1900D8992H98443B45E9041CF254D6EA03EDECEDEC63DC9D2H9C00EFAE2HAF44562099ED472HC1FE7E4620A0199F3E63E3971C2283F3FB14432H0103560A0200595H00609B008003BF55B968650A02007B2H7A79FA22CD0DCF4D2274F476F4222H9F9E9F34BEFE2HBE5181012H8100D818E0AB202HF3C885204272AFFB34F51F55B743FCC17B0364476407270B869838136169665FFD1DA0C44478035B85462C490A4A2H0A02CE313CF24B00F74A009102CB8D927BA90C0200311DDD249D223ABA03BA2243037AC3222H080B08342H191F1951C606C1C6001F9F276F20F4744F8120550B059B49928DBE770ABBA2EB0318A0456F0B68914689A0465E81CB680F17572197228CC7070C5B8D4D850D22EA2B559043F37A2H332D387833B22489C9DC09222H762FF622CF04080F00E43E3F7106C5FEFF3C49C20249534EAB2BFA2B222HD0D15022412HCBD5212HCEBB4E2207478C81243CBCC04322FD3DFA7D229AD62H9A00232F2H2344E89E050360792HE2AC06A66A2H2600FF33FC7F46940C460106757CBDB55B722H7872159B911B9B36C048F2773F2H310BB122FED5DF2928F7B7CF77222H6C6BEC222D2EEF17430A06464A15531F931336989187E11E2H6927E92216DDD5D65B2HEF1190228488B8043E256574A522626E64A23E8B0B0F0B22B0792H300021A82HA1446E4651E213679E529E499CD62H9C005D549D5D463AF02HFA442H035283222HC84948225989DFBF5E8646BD06222HDFF25F22342HBEA00A95D5C2152212D051A8437B3B810422A06B2H604F11D1EF6E229ED42HDE442HD7E65722CC8C844C224D4A2H4D38AAAD2HAA44F338A73A09B8FFF9F820C92H4E4900B6312H3644CFB772AE1924A32HE42FC5022H054482F738F2566B63686B0090982H904441854AD235CE462H8E34C707C447223CF47CFB387DB52HBD44DA3898F13723EBAEF20828A822A82279F1FCA80826AEA0F7087FF7783B33145D15143475F57D755B327232B2229B131A4A082HC0C74022B1782HF1342H3E373E5BB777B137226C2BAD2C67AD2A2H2D38CA0D2H0A3813D42HD34498DFA39C4129212H2938D65E949600EFA72HAF44C4293EB76665AD2HE534E2622HE25B4BCB4D4B5B2HF0F6F05B612167615BEE2EEBEE5BA767A1A75B5CDCAB23225DD5D48C087A72FEAB08034B87D208880888082219902H994446C6A439229FDF9C1F22B4FC3765082H55AD2A22529AD483082H3BCD4422A06925205BD1512CAE225E56DF8F082H976BE8224CC4C69D08CD45411C086AAA95152273FBF7A2087830FFA90809C9F476222HF6D776224FDE89E95EA42479DB22C505DA45222H42C2CF132BEB21AB2210D72H500001462H4144CEC03B080C07C02H8700BCBB8E3C46FD7B2H7D389A1C2H1A44E360E25434282EEBE800797E7A79002HA65BD9223F7C7D7F515497DCD4513H35B52272F1F4F251DBD8101B513H80002271B2B7B151FE3AFD671337332H772FACE82HEC442D829970504A0EC952133H931322981C1E1851296DE2E90096522H5644EFE20B161904012H0434A5E5A1A55BA222A6A25B0BCB0F0B5BF035B09B613H21A122EEABA8AE51E762E6CF61DCD91F1C009D582H5D44FAA43BFA3A83858B8300484E2H484419B25A834746C00C06002H5FA9202274343E34513H15952212525452512HBBFB701360E0EAE05191516EEE222HDE5EDD1397575D57513H4CCC220DCDCBCD512HEA2ABC133H73F322B8787E7851C9082HC951B6B73739133H4FCF226465626451C5848C855182430902513HEB6B229011161051C1800C01513H0E8E2287464147517C7E7D7C513H3DBD22DAD8DCDA5123E16B63513HA82822793B3F3951E6E46C6651FF3D3B3F5194179294512HF51A8A222HB2B8B251DB9B30A422C04A49405B71B3C80B43BE752HBE5B773C33375BECE7ACAD4B2D66A4AD008A412H8A1B3H53D322D8D3AFD80669A3A9A8633H169622EF65282F0684DEDD9106E5AFE5653B3H62E2224B41B5CB0670F068F02221A0609B436EAE63EE222767EC58221C56D5DC5B1D2H161D153AFAC44522C34940435B0888F6772259132H194FC60638B9225F55151F15343D74F43B3HD55522D21B7312067BB22HBB38A0605FDF22515B2H51381E5EE36122178E0742064CD51459062H8D70F222EA6A61F92B3373F54C222H3826B822090381895BF63C2H762D8F068F0F09246419A4222H4552C522C2D9D89706AB6B17D422D0516AAA43C1013EBE228E17D69B06C78E0706263H3CBC223DF4CBFD069A5A131B242363985C2268A87EE822F9ACE5AC06266626A6227F32F5FF5B549455D422B5F576CA2232B6F008431B0794CE060040FE7F22313CB73A307E73F37255F7FA7A6D0E6CAC9013226D707138060A874A4B48535E9E1831D8151E8257E962E4732AD6962BA9226F2E6E9543042H8E9055E52H2F3130E2E828364C8B80819F64F0FA3A2607212H2BB410AEF7377B06672HEDF33D1C962H9C44DD9DC45D222HFA3B8522C342827943C80877B7225950CD593E2H863EF922DF9A5BA543F479B4B5483H95152292DF95D2063B36F6703160A09F1F22519C970B573HDE5E2297DAD1D751CCC041D65C0D40CB4630EAE727A655F373F373222HF8418722C9D5461C0636B636B6228F8242550EE459609E430545FB7A22024F88825B6BEB911422102H9A84232H81B801224E45848E43C7470AB8227CF92HFC44BDFD0CC2222H5AEC2522E3EF2HE33868642H2800792HA2EC0626AA2HE6007FB32HBF44947E3BBB2235B9C60A4632B523B23E2H5BE22422C080CB5424F131408E223EFE97412277BCB7B6092CAC3EAC222DADD95222CA032H0A289313DAC72C2H586AD82229A9CE562296D62H96022F26A6AF15C44DC4443665BE81973F62EBE30B3C4B0BB53422303BFA760BA16A2H6144EE2E2B9122A7E750D8222H5CF12322DD448DC8063A63A2EF06C349C3C2263H8808229913A2992H06464CC62E9F1F7EE0222H74D60B22951E2H552F52992H9244BBF8AE3A43E022A35A43D11178AE225ED52H9E2F579C2H97448C807500118D141658066A31733F0633FA38A45C2HB81EC7228982020915F6B6FD73248F0F2EF022A4E4A72422454F40D1573H42C222AB212D2B51902HDAD0133H41C1228E44484E51870C0D02133HBC3C227D767B7D519A80084F06A3635CDC2228EA6A924339F2797826A6E65DD9227FBFD70022540DCD810635F5CA4A22722HF8E61E9B112H1B4480C0A50022B1F15ACE22FEF676F2552H7775F722ECE46AE130ED2D1392228AB57DB043D35B95935B18901819263HE96922569E545606EFA9697F5C0484F97B22A5AD2D3F0E62A4AAA25B0B4BE07422B07D3C30133H21A122AEA3A8AE5127AAEBE2133H1C9C221D505B5D51BABEF8004383CE8E985C4808A2372219B1442E49865C1F53069F1DDE254334F435B422551E1215009210D32843FBBBFB7B22A0A2619A4391516CEE221E1555492AD75DD657534C8C4CCC228D46CDCC262AEAD55522B331F2094378F870F822098848B343B62HBCA35C4F0F4ECF222426E51E43C58E82850042092H02442B7A05DB61101B9B062A0181FB7E228E2H041A573H47C722FC767A7C513D2H37285C1AD3975A33A33B77360668E12HA800B9B0393826A62HEFED133H3FBF22549D929451F57FFC66133HB23222DBD1DDDB5100CAC9D9133H71F122FEB4B8BE51B77D3E375BAC6C53D3226D67A4AD5B8A81808A5B2H5350D322581959A24369E828D3431654976C432FEFDB5022448F2HC41B3H65E522E2295062064BC14BCB653H70F022616B81E106AE2FEF1443E72H2D275BDC9CDE5C229DD79D1D3BFAA3226F064341C23943084302085B99D399193B3HC646229F55651F06B434FD722ED59500AA221292129222FBE1A2EE06606AAAB62A5111A32E222H1EA96122D75F1D971A0C4CCD73224D840D8A382AE3A7FB08F37A792008F871742B0889C983092276BC7677484F2H050F5BE465A55E4345C542C522C2892HC21BABEBAF2B2290DA2HD03881CB2HC1448EB898E429C72H1E52062H3CC143223D74BAEE085A53DB8908E32H6A300868A89717223930BDEA08E6AF6235083F76BCEC08941D15470875BCF3A608B23B3761085BD2DD8808C049C78433317132B1223E747E7F633HF777222CE67C6C06EDE76C6D344A08CB304353490A4606985867E722E9A369684856DC2HD6442HEF6C90222H84860422E52H2F255B6260A358438BCB7CF42270B1884A43A1E156DE22AE272F2E342HE71398225CD5D88F08DD5D2AA222FA3A45852283DA1A5606482HC2DC01D91926A622068C2H8644DF1F35A022B474C0CB229555EFEA221219D9D215BB70FB7B36E0A6D6213C91DA1A115BDE9E20A12257946FAD430C97D799060DC14D4C263HAA2A22B37F84F30678B3F4F85B49893E362276D3A467190001E9003702FDCBD4636D0A0200012H3635B6229F5F9D1F2244C446C422B575B4B5344H4251FBBB2HFB00B07088C020F1314B87204EF6E7B503176F112D095C63B0FD042D995A3D5FDA5562025BB3F174DC01C8882HC834A9E929A9053HE666228F0FC78F064H74344H253A4HF251AB3HEB3AA03HE0124H611B7E63A3C949D5BD5F765900","\60\105\56",bit32.bnot,"\60\100",unpack,131071,...); 4 | -------------------------------------------------------------------------------- /game/BHRM5: -------------------------------------------------------------------------------- 1 | -- // Protected by luaGuard - Security Level lite 2 | 3 | -- This file was generated using Luraph Obfuscator v13.5.9 4 | 5 | return(function(gG,xG,IG,JG,KG,uG,dG,cG,kG,PG,sG,FB,wG,LG,VG,DG,qG,nG,NG,iG,YG,ZG,vG,HG,eG,TG,hG,pG,CG,SG,GG,oG,yG,EG,bG,lG,UG,rG,j,...)local jB,zG=nil,(nil);local XB=0;while XB<=1 do if XB==0X0 then jB=794982748;do XB=1;end;continue;else zG=1397753728;do XB=0x2;end;end;end;local OG=0x26Aa9F5c;XB=1;local AG,aG,tG=nil,nil,nil;while FB(0,nil,nil,XB,jB,XB,tG,143.36853265277142,aG,55,XB)~=0X003 do if FB(1,XB,0)then aG=0X035e155Bc;XB=2;do continue;end;else if FB(0X2,XB,0X1)then AG=0X40362C82;do XB=0X0;end;else tG=248029903;XB=0X00003;continue;end;end;end;local F=select;XB=1;local g,M,W=nil,nil,(nil);while FB(0x03,XB,3)do if XB<=0 then M=EG;XB=0x2;else do if XB~=0x1 then do W=rG;end;XB=3;continue;else g=cG;XB=0x00;end;end;end;end;local Q=error;XB=0X1;local B,y,E,P,t=nil,nil,nil,nil,nil;do repeat if not(XB<=1)then if XB<=0X2 then P=oG.unpack;XB=3;do continue;end;else if not(FB(2,XB,3))then E=UG;do XB=2;end;else t={0X5,2,0X3};XB=5;end;end;else if XB~=0 then do B=uG;end;XB=0;else do y={[0X0]=(setmetatable({},{__pow=function(H6,K6)return K6;end})^1)};end;XB=4;continue;end;end;until FB(0X4,nil,nil,{},XB,g,67,aG,{},B,t,zG,XB)>0x4;end;XB=0X3;local d,u,o,H=nil,nil,nil,nil;do while 0.2513304737568226 do do if XB<=1 then if FB(0X2,XB,0x0000)then H=CG;break;else o=eG;XB=0;end;else if XB==0X2 then u=HG;XB=1;else do d=KG;end;XB=2;end;end;end;end;end;local K,MG=rawget,{};local Z=getfenv;XB=0x001;local c,w,C,Y,x=nil,nil,nil,nil,(nil);while FB(6,FB(5,nil,nil,46,y,o,{},0X3d,{},XB),0X5)do if FB(0X1,XB,0X1)then if XB==0 then Y=2147483648;XB=2;else c=oG.char;XB=0X04;end;else if not(FB(0X00001,XB,0x2))then if not(FB(2,XB,0X3))then w=wG;XB=3;else C=xG;XB=0x0;end;else x=PG;XB=0X0005;continue;end;end;end;local f=(tostring);XB=7;local T,i,v,fG,r,m,S,l,p,b,V=nil,nil,nil,nil,nil,nil,nil,nil,nil,nil,nil;while XB~=0xD do if XB<=5 then if not(XB<=2)then if FB(1,XB,3)then XB=0X0;do continue;end;else if XB~=0X0004 then do XB=0XB;end;else m=iG;XB=5;continue;end;end;else if not(FB(1,XB,0))then if not(FB(0x2,XB,0x0001))then b=0X100000000;do XB=0X1;end;else V=FB(0,nil,nil,732.5638998506787,{},b,zG,fG,KG,t)-0X001;XB=13;continue;end;else v="LPH&5DA60025FC6B5B7F0270FF071C15562H00A9494BF15C6HFF0B883H007E69971C2F05C057BB731D562H0005C79C0C3H005DAC1A6F4F50253C6C6D48579C0D3H000908C8090BDF78668C0F6DF31A9C063H00248F5E5D7CE39C073H00BA7DEE0110F8579C293H00DB224FFF2HCD43BC024F3748B7F6311C7DB3D4C50E8CA87C9EAC73AD6DFD76081CA966AD59D94F32C09C063H002AADC2451E2D9C063H00F08B7F9B4B619C093H00E659CA2CD3F577FA399C063H00E140A17943D10C883H00833F64299002B048CF7714562H00B17509883H00F71718550096AF6CC67B3D0049C3AE2H000F0C2H000F092A0F0B2H000F092A0F0A2H000F092A0F042H000F04520F012H000F02260F022H000F02060FE0012H002H0F440FEA012H002H0F440F3522BE012H0F2A0F646DDC012H0F590F8801E201572H0F480FB901CF01B2012H0F130FF30168052H0F0D0F3H002H0F3B0F3H002H0F280FFB01FA019F012H0F1FBF000544AA20000A9775660631562H00B1999C043H005F8AD3419C083H006BD66B85F6B871F49C053H00836EFB032E9C073H00BA7558E30DED909C0C3H00A75215BD77DD49A8389D5DEA9C0C3H00CB36048BA596B306A9D77AAD9C083H00EF1AEC9D399AC5F0F15H0085CAC09C093H0007B2B10F0CDDF2A0359C093H004A055B45E967B70A8D9C033H001DE82H9C0E3H002EA99DFC61DBD9826F386E8F072H9C053H001873B9A8F0F14H0080E0CAC09C443H007FAA2C8A70324F6CE35DA57EAD4C80C37D45A8F0E76DB199ADA73026B7875EA0D531214D2BAE13B728D7B6A1B7415E9F6C863771E8EDBD9229206BA82D4C8DBAD222AC0E9C0C3H004BB6B92DAEBB438A6C218D1DF14H008064CAC09C093H006F9A82A7793B95E10C9C0A3H00326DB45AD042170C137D9C063H00D0AB6DA5A32HF14H00807CCAC09C033H00629D5F9C083H00C3AE1FB63FC53DB39C063H00DB4678735A0D9C063H00CD98241D0F729C0D3H00FF2A7ECC0ED87D5D780EBFEB4FF15H00F49FC09C063H000E896C7BC94D9C063H00603BBA52BC9609883H00812B265A00A49E192C4D88005917AF2H000F602H000F092A0F5F2H000F092A0F5E2H000F092A0F042H000F04520F0A2H000F02260F1E2H000F02060FE0012H002H0F440FE9012H002H0F440F3505A5012H0F490FD1012H2B2H0F250FAD0189013H0F260FEF0120632H0F130F66D9012B2H0F130FDB01ED013C2H0F330F01E701E3012H0F510F6DAB01CE012H0F230F1EE901164H0F96014F672H0F1F0F4E2H000F092A0F0907000F02060F102H000F092A0F0006002H0F400F04061A2H02220F3H000F092A0F0B06142H02220F0007000F02260F2H0716020F370F0907000F09180F202H000F092A0F3H002H0F2B0F0108182H02220F0E2H000F092A0F1909000F02062H0F2H000F092A0F2H0705020F470F0609002H0F560F042H000F092A0F1606070F022F0F1307000F02260F2H070F020F470FF73HFF0F2H000F092A0F0007002H0F270F012H000F092A0FE90107002H0F1F0F0706002H0F560F052H000F092A0F1708060F022F0F062H000F092A0F0008002H0F280F0007002H0F270FEF3HFF0F2H000F092A0F7375A2012H0F570F0008002H0F400F052H000F092A0F0007002H0F350F0008002H0F4B0F0D0BCB012H0F550F0708002H0F560FF53HFF0F2H000F092A0F0C08000F022F0FE13HFF0F2H000F092A0FD53HFF0F2H000F092A0FD63HFF0F05000F09180F052H000F092A0F0205000F02260F2H0511020F370F012H000F092A0F0A05000F02260FF93HFF0F2H000F092A0F3H000F092A0F1105000F02260FCD3HFF0F2H000F092A0F0608000F02060F3H000F092A0F1C09000F02060F2H00092H0F430F042H000F092A0F1B04000F02060F0E2H000F092A0FEE3HFF0F05000F09030F122H000F092A0F0E01000F02060F042H000F092A0F1003000F02060F0704000F02060F0205000F02260FF83HFF0F2H000F092A0F0D02000F02060FFA3HFF0F2H000F092A0F0801000F02060F0A02000F02060F2H03000F02060FF03HFF0F2H000F092A0F1505000F02060F2H06000F02060F1507000F02060FE73HFF0F2H000F092A0F122H000F02060FF63HFF0F2H000F092A0FDC3HFF0F2H000F092A76002665E723750263DFCD5514562H006D8C09883H004FDF354B00489CFC1B6AF3002BC5AE2H000F0E2H000F092A0F0D2H000F092A0F0C2H000F092A0F042H000F04520F012H000F02260F022H000F02060FE2012H002H0F440FE8012H002H0F440F8701F1011B2H0F3F0F4D26532H0F580F5274AF012H0F170F349701C6012H0F130FCF014B362H0F460F33EA01E6012H0F200FAF01BC01792H0F130F3H002H0F3B0F3H002H0F280F3H002H0F2B1402A1A28418002133BF88461600C601AF2H000F102H000F092A2H0F2H000F092A0F0E2H000F092A0F072H000F04520F0A2H000F02260F0B2H000F02060FE6012H002H0F440FEE012H002H0F440FDB01C201C9012H0F4D0F3129462H0F490FA101408C012H0F440F6029FA012H0F440FC201F501ED012H0F0D0F5113032H0F560F344486012H0F4E0FFC01647E2H0F560FEB0161192H0F520F012H000F04520F0001002H0F560F0001002H0F380F012H000F092A0FA12H01002H0F1F0F2301000F09030F062H000F092A0F0502000F02260F0608CB012H0F550F0002002H0F350F3H000F092A09021D03020F1A0F022H000F092A0FF93HFF0F2H000F092A0F012H000F092A0F012H000F092A0FFB01FA019F012H0F1F0F01032H020F370F012H000F092A0F0A03000F02260F1403000F09030F172H000F092A0F0002002H0F4B0F3H000F092A0F022H002H0F560F0802000F02260F012H000F092A0F0A02000F02260F2H0207020F370F012H000F092A0F0A02000F02260F2H0201020F370F012H000F092A0F0A02000F02260F2H0206020F470F2H04000F02060F3H000F092A0F0002002H0F010FE93HFF0F2H000F092A0F0705CB012H0F550FED3HFF0F2H000F092A0F0002002H0F4B0F0706CB012H0F550F2H02000F04520FFA3HFF0F2H000F092A0F0002000F04520F0705CB012H0F550F0002002H0F4B0F706EA2012H0F570F0002000F02260F01032H020F370F012H000F092A0F0A03000F02260F0002002H0F350F012H000F092A0F6C02002H0F1F0F0002002H0F380F0003002H0F4B0F0301002H0F560F7071A2012H0F570F0003002H0F283300ED49A278C238687842304B562H00F1004B027H009C063H00F2ADE74CD2CD9C0A3H00049FD59315790598D3F99C083H0022DD8B2C808A55BB9C083H00BAF5F32FF468A2804B8H009C093H00520D472C2H77009A929C073H0025B0FFD75390729C053H00823D3AC63E9C0A3H0049945B753B95D684045E4BC97H009C083H0047B21F19A4191CB09C0C3H005F4ADA4F8573E6351986F8D09C063H0003AEDD8DFF1F9C0E3H00B5406823B5E1C2662HAC52BCB5419C073H00BFAABA2F2A12954BE8036H009C073H00BCD71DA2780C799C053H00095481B3799C103H00A07BF80FC13D5A085CB81762BE1200189C0C3H00D0AB890E6858D1291AAA000E4BE57H009C073H00B44F571474B86E9C113H00814C0BB3FEEC9F2HF7811B0FC3596553D59C073H007C975DE2A556A24B00016H009C0A3H00C914F0C5B60F550580D85A9C083H00C732838D3E2H9C369C4H009C0A3H00DFCA71FF18E263B599059C0D3H001D28DC7144117B9B41A1F9AA249C083H000C27E02C2FC03B2D9C0B3H00A43F5E1791A893135D34A99C063H007D8881F7FDB19C0D3H006F5AF6558954C402F39EC4D6769C063H00BEB95BC0E6A04BFF7H009C073H00502B32B4FEC2459C063H00DDE81CB18C459C063H00CFBA96E83AF49C063H0001CC8937756C9C073H00731E463B8C9F479C0E3H00B08BD154887AE74929D72F2BF84A4B417H00E84B017H009C0D3H001A558CD288044822D40416B61A9C073H0079C42F29E47C879C073H001691032886F4DE9C073H0003AEDA98E11BD39C093H00401B24AEE3CB77ACB69C083H0033DE867BDCCB891C9C073H004B76AEE3BA2D999C063H0008632H67328010883H001179D20BEE03AA5D264D14562H00B10009882H000353E3CE69001C00677011810056C5AE2H000F0E2H000F092A0F0D2H000F092A0F0C2H000F092A0F052H000F04520F012H000F02260F022H000F02060FE6012H002H0F440FEB012H002H0F440F2420702H0F0A0F4EB201A0012H0F090FD10122082H0F180F07DB01142H0F240F02AD01E1012H0F130FF001AB0196012H0F090F8E017FAB012H0F050F95019601B5012H0F280F090A7C2H0F280FFB01FA019F012H0F1FD3000F0CBA0372028508FA2014562H007D0009883H001A9FC10100AEA329554F6F0099C3AE2H000F0E2H000F092A0F0D2H000F092A0F0C2H000F092A0F032H000F04520F012H000F02260F022H000F02060FE6012H002H0F440FED012H002H0F440F42138E012H0F030F64D801DF012H0F090F1F391A2H0F460FAD011DFF012H0F340FE00130042H0F530FD1014393012H0F0D0F2A5A80012H0F140FFB01FA019F012H0F1F77002C91F178CB034218DE7214562H00050009882H000375FFBF48001623FC0D2AC800ACC8AE2H000F112H000F092A0F102H000F092A2H0F2H000F092A0F042H000F04520F012H000F02260F022H000F02060FE3012H002H0F440FEB012H002H0F440FD50114052H0F330F539E01612H0F4C0FF5019F01612H0F460F6ABB01382H0F330FDA01D301002H0F060F9E01C001EF012H0F320F042D452H0F1E0F8401B401CE012H0F480F21AE01AA012H0F170F960139FF012H0F130F0001002H0F570F090A7C2H0F280FFB01FA019F012H0F1F2B0100221CD2FE2B7C0BFBCB3B5918562H0089009C033H00DA852B4B017H009C083H00239652E113B75EF49C0A3H005B8EAB9DC0AF848DF2EA09882H00036C3335530079E2821F16FB01E1EEAE2H000F1B2H000F092A0F1A2H000F092A0F192H000F092A0F042H000F04520F012H000F02260F052H000F02060FE4012H002H0F440FEE012H002H0F440F64328F012H0F3A0F27E101CD012H0F5A0FFF014980012H0F490F9901B101294H0FC801F201B0012H0F580F718501412H0F4C0F1AA201442H0F1F0F0C2H000F092A0F182H000F092A0F0003002H0F500F012H000F092A0F0103000F02260F0003002H0F360F1603000F093F0F112H000F092A0F0004002H0F290F012H000F092A0F0004002H0F1F0F0105000F02060F022H000F092A0F0002002H0F400F012H000F092A0FF63HFF0F03000F091E0FB601B90184012H0F070F052H000F092A0F0103000F02060F0204000F02260F0005000F02060F7076072H0F2B0FF13HFF0F2H000F092A0F0002012H0F040FF93HFF0F2H000F092A0FE83HFF0F2H000F092A0F0008002H0F3B0F0008002H0F280FFB01FA019F012H0F1F0F0207062H0F210900E73HFF0F072H0F480F0B2H000F092A0F090C7C2H0F280F0308000F02260F012H000F092A0F0108000F02260F7577A2012H0F570F6E78A2012H0F570F0008002H0F270F012H000F092A0F9B0108002H0F1F0FDC3HFF0F08000F09030FD63HFF0F2H000F092A0FF53HFF0F2H000F092AB3060002001A001800190017001B0EA101178408BE5A0E5B1A562H0065009C073H0091105BA0DC2ADBF13H00205FA002424BFF7H009C033H00E6993F4B8H004B017H0009883H00714010650021820ECD104400E8F0AE2H000F2E2H000F092A0F2D2H000F092A0F2C2H000F092A0F032H000F04520F022H000F02260F072H000F02060FE4012H002H0F440FEC012H002H0F440FA00154B8014H0F3502482H0F430F78283A2H0F510F8D014E2D2H0F0D0F3555A1012H0F530F212H000F092A0F1F01000F09030F162H000F092A0F0105002H0F500F0006002H0F560F0405062H0F140F3H000F092A0F172H000F092A0F0C2H000F092A0F3H002H0F2B0F0201002H0F3D0F3H000F092A0F0001000F02260F012H000F092A0F0201000F02260FF13HFF0F2H000F092A0F2H04000F02060F0504002H0F3D0F0403002H0F3D0F0302002H0F3D0FF53HFF0F2H000F092A0F0401000F02060F0402000F02060F0403000F02060FF73HFF0F2H000F092A0F6F70A2012H0F570F0508CB012H0F550F0002002H0F110F012H000F092A0FB70102002H0F1F0FE23HFF0F2H000F092A0FE33HFF0F01000F093F0FE73HFF0F2H000F092A0F4HFF0F2H000F092A0F3H002H0F500F012H000F092A0F022H000F02260F0301000F02060F3H000F092A0F0102000F02060F3H000F092A0F3H002H0F270F0401000F02060F012H000F092A0FF23HFF0F01000F091E0F2H02000F02060F0503000F02060FFC3HFF0F2H000F092AFB03001100120013F5C370617509F3706E2E23562H0019009C113H00F396ED155C0691F985AB9D4941C31B2D879C0D3H00067188768C8864BE5880F2727E9C063H0065B8BD0311279C063H000F52BB05A5CD9C063H00D90C69EB384D9C0A3H00C3E638B789A3BF81C9799C063H00C97C809224EC9C083H00B356325B9A40DE359C0B3H00AB8ECA8488184157D0B4529C4H009C0A3H00A4DFCECCB3EF92C032B29C093H00DA2516E3575375A2614B8H009C0D3H009D30E81BEBBEA2246184EAC8749C0A3H0084BF2HECCD1EA9E15DC309883H0019B4EE1600F44C114B1E7201F9F1AE2H000F0E2H000F092A0F0D2H000F092A0F0C2H000F092A0F042H000F04522H0F2H000F02260F0A2H000F02060FE2012H002H0F440FE9012H002H0F440F1B575C2H0F150FBB0100A3012H0F560F752A99012H0F480FBB013AC6012H0F3B0F27B001252H0F430F012H000F092A0F212H000F092A0F0001002H0F500F2601000F09030FFC3HFF0F2H000F092A0F0203002H0F500F012H000F092A2H0F03000F02260F0301072H0F1D0F012H000F092A0FFC2H01002H0F1F0F0007002H0F400F022H000F092A0F0407030F022F0F062H000F092A0F2H07010F022F0F0B2H000F092A0F0107020F022F0F3H000F092A0F0007020F022F0FF83HFF0F2H000F092A0F0E07092H02220F0307060F022F0F0507050F022F0F0B07040F022F0F3H000F092A0F02070C2H02220F0007002H0F280F0807010F022F0F3H000F092A0F0607010F022F0F0D07020F022F0F3H000F092A0F0A07020F022F0FEE3HFF0F2H000F092A0F2H01002H0F500F012H000F092A2H0F01000F02260F6E70A2012H0F570FDD3HFF0F2H000F092A0F090A7C2H0F280F3H002H0F2B0F2H01002H0F500F0002002H0F560F3H000F092A0F0203002H0F500F012H000F092A2H0F03000F02260F0301002H0F241F010024C1C4E5485506FDBA1A4914562H00BD0009882H0003F88E052200B031B621039601FCCCAE2H000F122H000F092A0F112H000F092A0F102H000F092A0F032H000F04520F012H000F02260F022H000F02060FE0012H002H0F440FE9012H002H0F440F2F8901694H0FAA014D5F2H0F1F0FBE01BD0195012H0F4A0F3FAE01F5012H0F030F11DF01682H0F460F17B301B2012H0F250F33556D2H0F230F032H000F092A0F0002002H0F550FFB01FA019F012H0F1F0F0002002H0F080F0002002H0F500F0508CB012H0F550F0004002H0F4B0F3H000F092A0FB601BB0184012H0F070FF93HFF0F2H000F092A950214D6EF0F0053B3C82452B90033D5B02H000F88022H000F092A0F87022H000F092A0F86022H000F092A0F0B2H000F04520F182H000F02260F1F2H000F02060FE0012H002H0F440FE9012H002H0F440FC60123302H0F4C0F3D9401E2012H0F410F890117BB012H0F180F743893012H0F310F717DA4012H0F170FEF010FF7012H0F340FFA012H000F092A0F82032A000F09030F032H000F092A0F2F2ECB012H0F550F282A282H0F2D0FFB3HFF0F2H000F092A0F762H000F092A0F96019B01A2012H0F570F2B262D2H0F140F3H000F092A0F87042H000F092A0F002D002H0F3B0F322ECB012H0F550FF93HFF0F2H000F092A0F0B26000F093F0FE0022H000F092A0F90019501A2012H0F570F0027002H0F360FFD3HFF0F2H000F092A0F81032H000F092A0F8E0116000F09030F84012H000F092A0F2B2E002H0F560F002D002H0F350F002E002H0F4B0F072H000F092A0F162A292H0F210F012H000F092A0F182A000F02260F2A2B2E020F370F2A2C00020F370F7B9B01A2012H0F570FF53HFF0F2H000F092A092D8B0112020F1A0F98012H000F092A0F0C2F002H0F560F9A019E01A2012H0F570F0031002H0F4B0F702F000F09540F0525CB012H0F550F2026CB012H0F550F0020002H0F350F012H000F092A0FEE0120002H0F1F0F1B1A202H0F140F18201B2H0F020F2H20192H0F4D0F2H2019020F3E0F201B002H0F560FE5022H000F092A0F1D2F000F02060F9D019C01A2012H0F570F8E029202D9012H0F4C0F3H000F092A092FBC0310020F0B0F692H000F092A0FD3022H000F092A0F282A282H0F4F0FC83HFF0F2A000F09030F0C2H000F092A0F2H2A2B2H0F1C0F98019701A2012H0F570FFA3HFF0F2H000F092A0F282C282H0F0A0F2H2B2C2H0F4E0FFA3HFF0F2H000F092A0F2A29002H0F560F282A282H0F4D0F3H000F092A0F282B282H0F020F2H2B282H0F590FF73HFF0F2H000F092A0FD9012H000F092A0F0C2H000F092A0F9D019C01A2012H0F570FD73HFF0F2H000F092A0F0020002H0F400F2B2H000F092A0F3523220F022F0F272H000F092A0F0023002H0F400F1423220F022F0F3423220F022F0F1A2H000F092A0F0625000F04520F1C2H000F092A0F001C002H0F400F041D002H0F440F1D1E000F02060F001F002H0F3B0F0520000F02060F0121000F04520F041D012H0F3A0F001E002H0F400F112H000F092A0F1823220F022F0F142H000F092A0F0422000F04520FED3HFF0F2H000F092A0F2723220F022F0F0123220F022F0F2423220F022F0F1A23220F022F0F0623220F022F0F0C23220F022F0F1F231B2H02220F0324000F04520FE83HFF0F2H000F092A0F2A23220F022F0FF13HFF0F2H000F092A2H0F23220F022F0FFC3HFF0F2H000F092A0F001F002H0F400FDA3HFF0F2H000F092A0F83019401A2012H0F570F9C3HFF0F26000F09030F062H000F092A0F3123220F022F0FD73HFF0F2H000F092A0F1123220F022F0FEA3HFF0F2H000F092A0F0021000F02060FE63HFF0F2H000F092A0F93032H000F092A0F09307C2H0F280F312H000F092A0927AD02282H0F460F3C2H000F092A0F282A002H0F560F4E2H000F092A0F1532CB012H0F550F002D002H0F380F012H000F092A0F432D002H0F1F0F132E000F02060F032C002H0F1D0F012H000F092A0F202C002H0F1F0F002B002H0F290F012H000F092A0F412B002H0F1F0F2C31CB012H0F550F002A002H0F010F843HFF0F2H000F092A0F92019801A2012H0F570F789901A2012H0F570F3H000F092A0F032C002H0F560FED3HFF0F2H000F092A0FF2012H000F092A0FF7FE2HFF0F2H000F092A0F88012F000F092C0FFD3HFF0F2H000F092A0F0D2H000F092A0F232H000F092A0FE23HFF0F2H000F092A092D863HFF0F04020F1A0F943HFF0F2H000F092A0F9D019F01A2012H0F570F2E32000F02060FEC0230000F091E0F2E30000F02060FFB3HFF0F2H000F092A0F112BCB012H0F550F91019501A2012H0F570F0028002H0F4B0FE70126000F09420F0936CB012H0F550F3537CB012H0F550F0031002H0F350F3633CB012H0F550F3H000F092A0FF6FE2HFF0F2H000F092A092DC80233020F1A0FBF012H000F092A0F282A282H0F150FD3012H000F092A0F09337C2H0F280F973HFF0F2F000F09180FDFFE2HFF0F2H000F092A0928C8022D020F0E0F042H000F092A0F0628002H0F560F94019701A2012H0F570F0028002H0F350FFA3HFF0F2H000F092A0FD7FE2HFF0F2H000F092A0FD4012H000F092A0F90019801A2012H0F570F002A002H0F360F2E26000F02060FF9018A02D9012H0F4C0F2E28000F02060F3H000F092A0FCBFE2HFF0F26000F091E0F3339CB012H0F550F063ACB012H0F550F303BCB012H0F550F3337002H0F560F0035002H0F270F2H35172H0F3C0F1A2H352H0F210F342E002H0F160F1834172H0F020F2H34192H0F4D0F2H3419020F3E0FA2018501A2012H0F570FBD022H000F092A0FF1FE2HFF0F2A000F09180F87022H000F092A0F001A002H0F400F062H000F092A2H0F1236020F370F3213000F02060F3H000F092A0F0514000F04520F0215002H0F0C0F0B2H000F092A0F2C1B000F02060F332H000F092A0F020E000F02260F012H000F092A0F180E000F02260F260F000F02262H0F1021020F370F012H000F092A0F1810000F02260F0011002H0F3B0FEF3HFF0F2H000F092A0F0216002H0F000F012H000F092A0F1816000F02260F2C17000F02060F222H000F092A0F0401000F02260F012H000F092A0F1801000F02260F2H0122020F370F0402000F02260F2H0208020F370F012H000F092A0F1802000F02260F0403000F02260F012H000F092A0F1803000F02260F2H0316020F370F012H000F092A0F1803000F02260F0704000F02260F2H0403020F370F182H000F092A0F042H000F02260F012H000F092A0F182H000F02260F2H0028020F370FEA3HFF0F2H000F092A0F0B07000F02260F012H000F092A0F1807000F02260F2008000F02260F1E09000F02260F090A000F02260F300B000F02260F290C000F02260F012H000F092A0F180C000F02260F2H0D000F02260FD03HFF0F2H000F092A0F1518000F02060F0A19000F02060FC33HFF0F2H000F092A0F051C000F02060F251D000F02060F2E1E000F02060F052H000F092A0F0E05000F02260F012H000F092A0F1805000F02260F2B06000F02260FE83HFF0F2H000F092A0F7E1C000F091E0F282A282H0F230FE8FD2HFF0F2H000F092A0FEFFD2HFF0F2H000F092A0F313300020F370F2E34002H0F560F3332342H0F140FF7FE2HFF0F2H000F092A0F31322E020F370FFA3HFF0F2H000F092A0FF63HFF0F2H000F092A0F002A002H0F010927EFFD2HFF0F05020F0E0F442H000F092A0F2H2B002H0F160F2D31CB012H0F550F222H000F092A0F14272D2H02220F192BCB012H0F550F2E27000F02060F3H000F092A0F0026002H0F350F012H000F092A0FBB0126002H0F1F0F262723020F370F012H000F092A0F1827000F02260F26282F020F370F012H000F092A0F1828000F02260F262917020F370F93019801A2012H0F570F95019901A2012H0F570F2D31CB012H0F550F002A002H0F010F012H000F092A0FB2012A002H0F1F0F93019801A2012H0F570F2C30CB012H0F550F282H000F092A0F2H2C002H0F160F1D2D000F02060F2D33CB012H0F550F2H2D002H0F160F042A002H0F390F012H000F092A0F292A002H0F1F0F282A002H0F560F102H000F092A0F98019701A2012H0F570F022H000F092A0F1D2D000F02060FF33HFF0F2H000F092A0F282A002H0F560F96019901A2012H0F570F072H000F092A0F282A282H0F210F012H000F092A0F182A000F02260F2H282A2H0F140FD43HFF0F2H000F092A0F96019A01A2012H0F570FCF3HFF0F2H000F092A0F2D31CB012H0F550F022H000F092A0F2H282A2H0F140FF53HFF0F2H000F092A0F2D32CB012H0F550F2D33CB012H0F550F002D002H0F350F012H000F092A0F132D002H0F1F0F2D33CB012H0F550F012E002H0F1D0F002A002H0F5B0F012H000F092A0FB5012A002H0F1F0F2D2FCB012H0F550F2D30CB012H0F550FED3HFF0F2H000F092A0F2E31CB012H0F550FB93HFF0F2H000F092A0F292H000F092A0FB7FD2HFF0F2H000F092A0F0C31000F093F0FABFE2HFF0F2H000F092A0FA1012H000F092A0F292H000F092A0FB2FE2HFF0F2H000F092A0F1A2H352H0F210F3430352H0F140F1835172H0F020F3H000F092A0F2H35192H0F4D0F3H000F092A0F2H3519020F3E0F092H000F092A0F6FA301A2012H0F570F303BCB012H0F550F3H000F092A0F3437002H0F560F0035002H0F270F012H000F092A0F7235002H0F1F0F2H35172H0F3C0FEF3HFF0F2H000F092A0F3A1CCB012H0F550FE83HFF0F2H000F092A0F2F2ECB012H0F550F282A282H0F330FC23HFF0F2A000F09030FB0FD2HFF0F2H000F092A0F0026002H0F4B0F3H000F092A0F0226002H0F190FFB01FA019F012H0F1F0F282A284H0FBB3HFF0F2H000F092A0F4C26000F092E0F85FE2HFF0F2H000F092A0F002F002H0F300F3H000F092A0F2F2E002H0F560F8FFD2HFF0F2H000F092A0FFBFD2HFF0F2H000F092A0F3034CB012H0F550FB3FD2HFF0F2H000F092A0F8FFD2HFF0F1C000F093F0FB0FD2HFF0F2H000F092A0F2B2F002H0F4C0F97FE2HFF0F2H000F092A0F002F002H0F4B0F9D019C01A2012H0F570F3H000F092A0F84FD2HFF0F2H000F092A0FE0FD2HFF0F2H000F092A0F282C002H0F560F272H000F092A0F0028002H0F270F012H000F092A0F3028002H0F1F0F96019701A2012H0F570F96019801A2012H0F570F96019901A2012H0F570F1C2H000F092A0F3527260F022F0F1127260F022F0F1B2H000F092A0F0226000F04520F0027002H0F400F0A2H000F092A0F2A27260F022F0F1827260F022F0F3127260F022F0FF63HFF0F2H000F092A0F2427260F022F0F1A27260F022F0F0627260F022F0F1D2H000F092A0F2D30CB012H0F550FE73HFF0F2H000F092A0F1427220F022F0F162H000F092A0F012C002H0F1D0F012H000F092A0FE0012C002H0F1F0F0029002H0F290F012H000F092A0F3629002H0F1F0F002A000F04520FF43HFF0F2H000F092A0F0127260F022F0FEE3HFF0F2H000F092A0F2D31CB012H0F550FF43HFF0F2H000F092A0F2H27260F022F0FFA3HFF0F2H000F092A0F002A002H0F270F012H000F092A0F542A002H0F1F0F83FE2HFF0F2A000F09030F0A2H000F092A0F0029002H0F400F95019801A2012H0F570FD13HFF0F2H000F092A0F3427260F022F2H0F27260F022F0FDB3HFF0F2H000F092A0F0C27260F022F0F1F271B2H02220F0A2DCB012H0F550FF63HFF0F2H000F092A0FC63HFF0F2H000F092A0F282A002H0F560FE7FC2HFF0F2H000F092A0F27232D020F120FB13HFF0F2H000F092A0F8D3HFF0F2H000F092A0F122CCB012H0F550F3H000F092A0F94019601A2012H0F570F3H000F092A0F0027002H0F350F012H000F092A0FD50127002H0F1F0927AAFC2HFF0F07020F1A0F232H000F092A0FB33HFF0F2H000F092A0F222H000F092A0F2B2F05020F100FC7FD2HFF0F2F000F09030F833HFF0F2H000F092A092C25272H0F480FADFE2HFF0F2H000F092A0F2E31000F02060F9D01A001A2012H0F570F3H000F092A0F2E33000F02060F022H000F092A0F0030002H0F400FF93HFF0F2H000F092A0FF6FE2HFF0F31000F091E092DA5FD2HFF0F1C020F1A0FF13HFF0F2H000F092A0FAAFC2HFF0F2H000F092A0F3433CB012H0F550FFD3HFF0F2H000F092A0F002F002H0F3B0FFC3HFF0F2H000F092A0F739501A2012H0F570F94019601A2012H0F570F0029002H0F4B0F0027002H0F010F012H000F092A0FFD0127002H0F1F0F0027002H0F400F0028002H0F400F0029002H0F300F112FCB012H0F550F2B30CB012H0F550F002C002H0F4B0F082A000F09540FABFD2HFF0F2H000F092A0FB0FD2HFF0F29000F09030F8EFD2HFF0F2H000F092A0FB5FD2HFF0F30000F093F0FCE3HFF0F2H000F092A0FCE3HFF0F2H000F092A0FEA3HFF0F2B000F09030FD53HFF0F2H000F092A0FD93HFF0F2A000F092C0FD43HFF0F2H000F092ACA02566C637E002BDF4F1F7FE50017CCAE2H000F0D2H000F092A0F0C2H000F092A0F0B2H000F092A0F062H000F04520F3H000F02260F012H000F02060FE1012H002H0F440FEE012H002H0F440F58C501C0012H0F4C0FBF01FB01E6012H0F1F0F9101CC019C012H0F450F9401F301C8012H0F1D0F40EA01E5012H0F0D0F8D017EE9012H0F1E0F012H000F04520F3H002H0F1B0F012H000F092A0F87012H002H0F1F0F3H000F04520F3H000F02580F3H000F02260F0001000F02580F0001002H0F570F3H002H0F1D0F2H097C2H0F2898";XB=10;continue;end;end;else do if XB<=8 then do if not(FB(0x001,XB,6))then if FB(0X0002,XB,0X7)then T=TG;XB=0X00006;do continue;end;else p=function()local xa=0X00;local pa,Ba=nil,(nil);do while xa<=0x1 do if xa==0X0 then pa,Ba=P('<\I\052',v,g);xa=0x0001;else g=Ba;xa=0X2;continue;end;end;end;return pa;end;XB=2;end;else do i=Z();end;XB=0X3;end;end;else if not(XB<=0X0A)then if not(FB(0X2,XB,11))then l=function()local bh=1385645850;local gh=(B(v,g,g));g=g+(setmetatable({},{__mod=function(eD,gD)for MJ=0x00000,1 do do if MJ==0X000 then bh=bh-0X27C;continue;else return(gD+bh);end;end;end;end})%-0x5297449d);return gh;end;XB=8;continue;else v=FB(5,nil,nil,XB,XB,XB,100.21955801121817,KG,W,r)(FB(0X00007,nil,nil,{},m,{},MG,u,0X2A,TG,10,XB,{})(FB(5,nil,nil,OG,CG,647.9745655668232,XB,XB,34.55972612648172,v),5),'\.\046',function(tl)if B(tl,0X002)==72 then local DM=0x1;while 328223125 do if DM~=0x0 then S=W(m(tl,(setmetatable({},{__sub=function(N9,Q9)do return Q9;end;end})-1),(setmetatable({},{__concat=function(Av,Kv)return Kv;end})..0x0001)));do DM=0;end;do continue;end;else do return"";end;end;end;else local Iv=(c(W(tl,16)));do if S then local iW=(0);local wW=nil;do repeat do if iW~=0 then S=nil;do break;end;else do wW=E(Iv,S);end;iW=0x1;continue;end;end;until false;end;return wW;else return Iv;end;end;end;end);do XB=0X000C;end;continue;end;else do if XB==9 then r=ZG;do XB=0X00004;end;continue;else do fG={};end;XB=9;do continue;end;end;end;end;end;end;end;end;local q=(gG.rshift);local J=(FB(0X8,FB(5,nil,nil,727.2879923027036,77,Q,0X34,0x01,20,Y),(setmetatable({},{__mul=function(N3,S3)tG=tG+0X00002B;aG=aG-169;return((S3-tG)+aG);end})*-655929880)));do XB=0;end;local s,D=nil,nil;do while FB(0X6,XB,2)do do if XB==0 then s=vG;XB=0X001;continue;else D=function()local BZ,eZ=nil,nil;for xz=0,2 do if not(xz<=0X0000)then do if xz~=1 then return BZ;else g=eZ;end;end;else do BZ,eZ=P(SG,v,g);end;continue;end;end;end;XB=0x2;end;end;end;end;local X,I,k,G,N,h=nil,nil,nil,nil,nil,(nil);for Jd=0X0000,6 do do if Jd<=2 then if Jd<=0 then do local Q9=(0X1);local M9=nil;repeat do if not(FB(0X02,Q9,0))then M9=lG;Q9=0x000;else do for yO=1,0X1F do(y)[yO]=M9;do M9=FB(10,FB(0X009,nil,nil,M9,366.2977652862824,99,XB,gG,EG),2);end;end;end;do break;end;end;end;until(false);end;else do if FB(2,Jd,0X1)then X=pG;else do I=function(e6,V6,x6)local A6=(e6/y[V6])%y[x6];for Bt=0,1 do do if Bt~=0X0 then return A6;else A6=A6-A6%0X0001;end;end;end;end;end;end;end;end;else if not(Jd<=4)then if not(FB(2,FB(11,nil,nil,c,ZG,0X008,3,Jd,673.7345031150559,K,H,XB),0x00005))then h=bG;else do N=bit32.bnot;end;continue;end;elseif not(FB(2,Jd,0X3))then G=bit32.band;else k=function()local Dx,Nx=nil,nil;local Cx=0x0;while(true)do do if not(Cx<=0)then if Cx~=1 then g=Nx;Cx=0X001;do continue;end;else return Dx;end;else Dx,Nx=P(YG,v,g);Cx=2;continue;end;end;end;end;end;end;end;end;do XB=0x00002;end;local U,e,A=nil,nil,(nil);do while XB<=2 do do if XB<=0x00000 then A=function()local S1,X1=0,(0);while 0.788670762103605 do local Bf=B(v,g,g);g=g+0X00001;S1=s(S1,h(G(Bf,127),X1));if G(Bf,0X080)~=0X0 then else return S1;end;X1=X1+7;end;end;XB=3;continue;else if not(FB(0X2,XB,0x01))then U=LG.insert;XB=1;continue;else e=VG;do XB=0X0000;end;continue;end;end;end;end;end;local a=({[0X3]=4,[8]=false,[0X00009]='\084\053\^',[9]=3,[(FB(0x8,setmetatable({},{__sub=function(Ql,Sl)AG=AG+0X02a6;for QV=0,0X00002 do if QV<=0 then OG=OG-0XA6;else do if QV==1 then tG=tG-770;do continue;end;else return(((Sl-AG)+OG)+tG);end;end;end;end;end}),0xAc2F080))]=0.5577157433568963,[0X00006]=true,[(setmetatable({},{__mul=function(Cb,zb)local rb=0;while 0.47807206448753126 do do if rb<=1 then if rb==0 then zG=zG-205;rb=0X3;else jB=jB-0X322;rb=2;continue;end;else if rb==2 then return(((zb+zG)-AG)+jB);else do AG=AG+0X00004F;end;rb=0x001;end;end;end;end;end})*-0X0427c4D6e)]=1232792905,[2]=true,[6]=nG,[8]='0/\#\080\067',[9]=(setmetatable({},{__div=function(l5,B5)return B5;end})/0X1),[5]=0X0006,[lG]=JG,[0]=yG,[IG]=0X9,[0X8]=0X00009,[0X8]=3,[0x6]=0});local O=(function()local yq=2;local sq=(nil);while"?2"do do if yq<=0X0 then return sq;else do if yq~=1 then sq=A();yq=1;do continue;end;else if not(sq>J)then else return sq-b;end;do yq=0x0;end;end;end;end;end;end;end);local z=(l());local jG=l();local XG=(function(Q2)local w2,c2,j2,J2,n2,z2=nil,nil,nil,nil,nil,nil;for Ot=0,5 do if Ot<=0X2 then if not(Ot<=0)then do if Ot~=0X1 then j2=2003923152;continue;else c2=1412221907;continue;end;end;else w2=1363001768;end;else do if not(Ot<=0X3)then do if Ot~=0X0004 then z2=d(J2[0x0002],jG);continue;else n2=d(J2[1],jG);do continue;end;end;end;else do J2={B(v,g,g+0X00003)};end;end;end;end;end;local N2=(d(J2[0X3],jG));local p2=d(J2[0X00004],jG);jG=(157*jG+Q2)%(setmetatable({},{__mul=function(bi,Ii)j2=j2-448;do c2=c2-0x00003C7;end;w2=w2+159;return(((Ii+j2)+c2)-w2);end})*-0X0007A6073d5);do g=g+0X4;end;do return p2*0X01000000+N2*65536+z2*0x100+n2;end;end);local WG=function(...)do return F('\#',...),{...};end;end;local RG=0X1;local FG=function(TH)local KH,NH=nil,(nil);do for E3=0,1 do if E3==0X0000 then KH=p();continue;else NH="";end;end;end;local sH=(0X0);do while true do if not(sH<=0X0)then if sH==0X1 then do return NH;end;else g=g+KH;sH=1;continue;end;else for xY=1,KH,0X1F3D do local RY,DY,HY,LY=0X00,nil,nil,nil;while RY<0X4 do if RY<=0X1 then if RY==0X0 then DY=187904663;RY=1;continue;else HY=xY+7997-1;RY=0X3;do continue;end;end;else if RY==0X002 then LY={B(v,g+xY-0x1,g+HY-1)};do RY=4;end;else if HY>KH then HY=KH;end;do RY=2;end;end;end;end;do for K7=(setmetatable({},{__pow=function(L_,P_)do DY=DY-0x000379;end;do return(P_+DY);end;end})^-0xb332f1D),#LY do local N7=568499922;local t7,A7=nil,(nil);for Mw=0x00000,3 do do if not(Mw<=0X01)then if Mw==0X02 then do(LY)[K7]=d(LY[K7],z);end;else z=(TH*z+(setmetatable({},{__mul=function(cO,XO)local yO=0x000;do while yO<0X3 do if yO<=0x0 then A7=A7+0X00E1;yO=0X2;else do if yO~=1 then t7=t7+0X24B;yO=0X00001;do continue;end;else N7=N7+0X297;yO=3;continue;end;end;end;end;end;do return(((XO-A7)-t7)-N7);end;end})*0Xf94c9A07))%256;end;else do if Mw==0X0 then do t7=0x007436DB53;end;else A7=0X63331944;end;end;end;end;end;end;end;do NH=NH..c(x(LY));end;end;sH=0X2;continue;end;end;end;end;XB=2;local QG,mG,BG,L,R=nil,nil,nil,nil,(nil);repeat do if not(FB(1,XB,3))then do if not(FB(0X01,XB,0X5))then if not(XB<=6)then do if XB==0X7 then function QG(h1,W1,c1)local N1=W1[0X2];local n1,t1,A1,l1,V1=W1[0x006],W1[5],W1[9],W1[0X1],W1[0X4];local H1=(W1[7]);local G1=o({},{__mode='\118'});local F1,x1=W1[0X0008],(nil);x1=function(...)local ly=(0X1);local ey=({});local Zy=({[1]=W1,[2]=ey});local xy=Z();local Py,iy=WG(...);local Yy=(0x00);local ay=(xy==i and h1 or xy);Py=Py-1;do for G4=0X0,Py do if not(t1>G4)then break;else do(ey)[G4]=iy[G4+1];end;end;end;end;do if not V1 then iy=nil;else if not(H1)then else ey[t1]={n=Py>=t1 and Py-t1+1 or 0x0,x(iy,t1+1,Py+0X0001)};end;end;end;if ay~=xy then(T)(x1,ay);end;repeat local ko=(N1[ly]);local wo=ko[0x1];ly=ly+1;do if not(wo>=0x2E)then do if wo>=23 then if not(wo>=0x022)then if wo<28 then if wo>=25 then if wo>=0X1a then if wo~=0X1b then if ey[ko[2]]==ko[0x6]then else do ly=ko[3];end;end;else Yy=ko[3];ey[Yy]();Yy=Yy-1;end;else(fG)[ko[0X2]]=ey[ko[3]];end;else if wo~=24 then ey[ko[0X3]]=N(ey[ko[0X2]]);else if ey[ko[0x0003]]then ly=ko[2];end;end;end;else if not(wo>=31)then do if not(wo<29)then do if wo==0x1E then local zt=ko[0X0003];local yt,pt,mt=ey[zt],ey[zt+1],(ey[zt+2]);do ey[zt]=C(function()for yn=yt,pt,mt do(w)(true,yn);end;end);end;do ly=ko[0X02];end;else local BV,ZV=ko[3],(ko[2]);if ZV~=0x0 then Yy=BV+ZV-0X1;end;local FV,yV=nil,nil;local mV=(ko[0X5]);if ZV==0X1 then FV,yV=WG(ey[BV]());else do FV,yV=WG(ey[BV](x(ey,BV+1,Yy)));end;end;if mV==1 then do Yy=BV-0X1;end;else if mV~=0 then FV=BV+mV-0x02;Yy=FV+0X1;else FV=FV+BV-0X001;Yy=FV;end;local m0=0;for nj=BV,FV do m0=m0+0X0001;(ey)[nj]=yV[m0];end;end;end;end;else(ey)[ko[0X3]]=ey[ko[0X2]]-ey[ko[0X00005]];end;end;else if wo<0X020 then if ko[5]~=159 then for OD=ko[3],ko[2]do ey[OD]=nil;end;else ly=ly-1;N1[ly]={[0x2]=(ko[0X0002]-250),[0X3]=(ko[0X03]-250),[1]=43};end;else if wo~=33 then if not(not(ey[ko[2]]=40)then if wo>=0X25 then if wo>=0X00026 then if wo==0X27 then local JS=ko[0X03];(ey)[JS]=ey[JS](ey[JS+0X1],ey[JS+0X02]);Yy=JS;else do ey[ko[0X003]]=ay[ko[7]];end;end;else local qg=ko[3];for iR=qg,qg+(ko[0x2]-1)do(ey)[iR]=iy[t1+(iR-qg)+1];end;end;else if wo>=0X000023 then if wo==36 then local by=ko[2];local dy=(ko[0X00003]);do Yy=dy+by-0x0001;end;repeat local jz,Qz=G1,ey;do if#jz>0x0 then local iK={};for ew,Sw in e,jz do do for i8,f8 in e,Sw do do if f8[1]==Qz and f8[0X2]>=0X0 then local EQ=f8[2];if not iK[EQ]then do(iK)[EQ]={Qz[EQ]};end;end;do(f8)[0X0001]=iK[EQ];end;do(f8)[2]=0X1;end;end;end;end;end;end;end;end;until true;return ey[dy](x(ey,dy+1,Yy));else ey[ko[3]]=ey[ko[2]]~=ey[ko[0X5]];end;else do(ey[ko[3]])[ko[7]]=ko[0X6];end;end;end;else do if wo<43 then if wo<41 then if ko[0X5]==0X000b5 then ly=ly-1;do N1[ly]={[2]=(ko[0X2]-149),[0X003]=(ko[3]-149),[0X1]=87};end;elseif ko[5]==0X7c then do ly=ly-0X00001;end;N1[ly]={[2]=(ko[0X2]-0X9),[3]=(ko[0X3]-0X9),[1]=85};else do repeat local rY,KY=G1,(ey);if#rY>0X0 then local eh={};do for Wj,Oj in e,rY do for v1,Y1 in e,Oj do if Y1[1]==KY and Y1[0x2]>=0 then local TO=(Y1[2]);if not(not eh[TO])then else eh[TO]={KY[TO]};end;(Y1)[1]=eh[TO];do(Y1)[2]=0X1;end;end;end;end;end;end;until true;end;do return ey[ko[0X3]];end;end;else do if wo==42 then ly=ko[0X0002];else local lQ=(ko[3]);do ey[lQ]=ey[lQ](x(ey,lQ+1,Yy));end;Yy=lQ;end;end;end;else if not(wo<0X2c)then if wo~=45 then local kp=ko[3];local Mp,Xp,bp=ey[kp]();if Mp then ey[kp+1]=Xp;(ey)[kp+2]=bp;ly=ko[0X002];end;else(ey)[ko[0x00003]]=ey[ko[0X2]]0X000 then local bC=({});for Jv,Ov in e,uH do do for et,tt in e,Ov do if tt[1]==WH and tt[0X2]>=0X00 then local Bc=tt[0X2];if not(not bC[Bc])then else(bC)[Bc]={WH[Bc]};end;tt[0X1]=bC[Bc];do(tt)[2]=1;end;end;end;end;end;end;until true;return;end;end;end;end;end;end;else if not(wo<0x0b)then if wo>=0x11 then do if wo<0X14 then do if wo>=0X0012 then if wo~=19 then(ey[ko[3]])[ey[ko[2]]]=ko[0X00006];else local Cp=ey[ko[2]]/ey[ko[5]];ey[ko[3]]=Cp-Cp%0x1;end;else local C9=(ko[3]);(ey[C9])(ey[C9+1]);do Yy=C9-1;end;end;end;else if not(wo<0X15)then if wo==22 then local WH=ko[0X2];ey[ko[0X3]]=ey[WH]..ey[WH+0X1];else ey[ko[3]]=ey[ko[2]]>ey[ko[0X5]];end;else do ey[ko[3]][ey[ko[0X00002]]]=ey[ko[5]];end;end;end;end;else if not(wo<0xE)then if wo<15 then if ey[ko[2]]~=ko[6]then else do ly=ko[0x3];end;end;else do if wo==16 then(ey)[ko[0X003]]=ey[ko[0X2]]~=ko[6];else(ey)[ko[0X00003]]=ey[ko[2]]>=ey[ko[0X5]];end;end;end;else do if wo>=0X0000c then if wo==0Xd then local bW=ko[0X0003];local FW=(C(function(...)(w)();for EX,kX,uX,iX,tX,HX,cX,AX,XX,VX in...do w(true,{EX,kX,uX,iX,tX,HX,cX,AX,XX,VX});end;end));FW(ey[bW],ey[bW+1],ey[bW+2]);do Yy=bW;end;(ey)[bW]=FW;ly=ko[0x2];else ey[ko[3]]=Zy[ko[0X002]];end;else if not(not(ey[ko[0x2]]<=ko[0X6]))then else ly=ko[3];end;end;end;end;end;else if not(wo<0X5)then if wo>=8 then if not(wo<9)then if wo~=0xa then(ey)[ko[0x3]]=q(ey[ko[0X002]],ey[ko[5]]);else ey[ko[0X03]]=ey[ko[2]]^ey[ko[5]];end;else repeat local ZT,UT=G1,ey;do if#ZT>0X000 then local Jb={};for S4,f4 in e,ZT do for Km,rm in e,f4 do if rm[1]==UT and rm[0X002]>=0X0 then local vd=(rm[2]);if not Jb[vd]then(Jb)[vd]={UT[vd]};end;rm[0X1]=Jb[vd];(rm)[2]=0X1;end;end;end;end;end;until true;local Ap=(ko[3]);return ey[Ap](x(ey,Ap+0X001,Yy));end;else if wo>=6 then if wo==7 then if ko[0X5]==132 then ly=ly-1;(N1)[ly]={[0x3]=(ko[3]-0X0000b6),[1]=0X57,[0X2]=(ko[0X00002]-0x0B6)};else ey[ko[3]]=iy[t1+1];end;else ey[ko[3]]=ko[0X7];end;else ey[ko[0x3]]=s(ey[ko[0X2]],ey[ko[5]]);end;end;else do if wo<0x2 then if wo~=1 then ey[ko[0X00003]]=fG[ko[0X0002]];else local Ww=(ko[3]);(ey[Ww])(ey[Ww+0X0001],ey[Ww+2]);Yy=Ww-0x1;end;else if not(wo>=3)then(ey)[ko[0X0003]]=ey[ko[0x0002]]*ey[ko[5]];else if wo~=4 then if not(not ey[ko[3]])then else ly=ko[2];end;else local eS,JS=ko[3],((ko[0X5]-0X01)*0X32);local lS=(ey[eS]);do for UB=0X1,Yy-eS do(lS)[JS+UB]=ey[eS+UB];end;end;end;end;end;end;end;end;end;end;elseif wo>=69 then if not(wo<80)then if not(wo>=86)then if not(wo>=0X53)then do if wo<81 then local Sy=c1[ko[2]];ey[ko[0X3]]=Sy[1][Sy[0X00002]];else if wo~=0X52 then do if not(ey[ko[0X2]]0)then else TO={};for Ko=0X01,iO do local Io=nO[Ko];do if Io[1]~=0 then(TO)[Ko-1]=c1[Io[2]];else TO[Ko-1]={ey,Io[2]};end;end;end;(U)(G1,TO);end;end;do(ey)[ko[0X03]]=QG(ay,MO,TO);end;end;end;end;else if wo<0X54 then do repeat local Ky,Oy,py=G1,ey,(ko[0X0003]);do if not(#Ky>0X0)then else local NS={};do for ym,om in e,Ky do for cD,DD in e,om do if not(DD[0x1]==Oy and DD[0X00002]>=py)then else local oW=DD[0x2];if not(not NS[oW])then else(NS)[oW]={Oy[oW]};end;do DD[0x001]=NS[oW];end;DD[2]=0X001;end;end;end;end;end;end;until true;end;else if wo==85 then if ko[0X0005]==0Xcb then ly=ly-0x1;do N1[ly]={[0X02]=(ko[2]-5),[0X1]=0x56,[3]=(ko[0x3]-5)};end;else do repeat local M0,s0=G1,(ey);if#M0>0 then local SU={};for tl,Xl in e,M0 do do for VQ,MQ in e,Xl do if not(MQ[1]==s0 and MQ[0x0002]>=0X00)then else local hv=MQ[2];do if not(not SU[hv])then else SU[hv]={s0[hv]};end;end;(MQ)[1]=SU[hv];MQ[0x002]=1;end;end;end;end;end;until true;end;do return x(ey,ko[3],Yy);end;end;else local m8=ko[3];local f8=(C(function(...)w();do for FM,vM in...do w(true,FM,vM);end;end;end));f8(ey[m8],ey[m8+0X1],ey[m8+0X2]);Yy=m8;(ey)[m8]=f8;ly=ko[2];end;end;end;else if not(wo>=89)then if not(wo<0x00057)then if wo==0X58 then(ay)[ko[0x7]]=ey[ko[3]];else if ko[0x5]==162 then ly=ly-0X1;do(N1)[ly]={[1]=86,[0X3]=(ko[0X3]-0X06E),[0X2]=(ko[0x2]-110)};end;else local Ax,Vx=ko[3],Py-t1;if Vx<0X0 then do Vx=-0X1;end;end;for cX=Ax,Ax+Vx do(ey)[cX]=iy[t1+(cX-Ax)+0X0001];end;Yy=Ax+Vx;end;end;else do ey[ko[3]]=ey[ko[0X2]];end;end;else do if wo>=90 then if wo==0X005b then local ro=(ko[3]);ey[ro](x(ey,ro+1,Yy));do Yy=ro-1;end;else do(ey)[ko[0X3]]=not ey[ko[2]];end;end;else ey[ko[0X0003]]=ey[ko[0X2]]/ey[ko[5]];end;end;end;end;else if wo<0X04A then if not(wo<0X47)then if wo>=72 then if wo==73 then(ey)[ko[3]]=G(ey[ko[0X2]],ey[ko[0x05]]);else if ey[ko[0X2]]==ey[ko[5]]then else ly=ko[0X3];end;end;else local BR,RR=ko[3],(ey[ko[2]]);(ey)[BR+1]=RR;(ey)[BR]=RR[ko[0x06]];end;else do if wo==70 then if ey[ko[0X2]]~=ey[ko[5]]then else ly=ko[3];end;else local iF=(ko[0X00003]);local yF,fF=ey[iF]();if not(yF)then else for OP=0X1,ko[5]do do(ey)[iF+OP]=fF[OP];end;end;do ly=ko[0X02];end;end;end;end;end;else if not(wo>=0x00004D)then if not(wo>=75)then(ey)[ko[3]]=ko[7];else do if wo~=0x4C then do ey[ko[0X03]]=nil;end;else if ko[0X5]~=0X0d9 then do ey[ko[3]]=-ey[ko[0X2]];end;else ly=ly-0X1;(N1)[ly]={[0x01]=0X0034,[0X0003]=(ko[0X3]-227),[2]=(ko[0X2]-0Xe3)};end;end;end;end;else if not(wo>=0X004e)then(ey)[ko[3]]=ey[ko[2]]+ey[ko[0X0005]];else if wo==79 then ey[ko[0X3]]=ey[ko[0x2]]==ey[ko[5]];else(ey)[ko[0X00003]]=ey[ko[2]]%ey[ko[5]];end;end;end;end;end;else do if wo<57 then do if not(wo>=0X033)then do if wo>=0X000030 then if not(wo>=49)then ey[ko[0X3]]=false;else if wo==0X32 then Zy[ko[0X2]]=ey[ko[0X3]];else repeat local e5,U5=G1,ey;if not(#e5>0x0)then else local hR=({});for kF,HF in e,e5 do do for J3,E3 in e,HF do do if not(E3[1]==U5 and E3[2]>=0)then else local Vw=(E3[2]);if not hR[Vw]then(hR)[Vw]={U5[Vw]};end;E3[1]=hR[Vw];E3[0X2]=1;end;end;end;end;end;end;until true;local va=(ko[3]);do return x(ey,va,va+ko[0X2]-0x0002);end;end;end;else if wo==47 then(ey[ko[0X3]])[ko[7]]=ey[ko[0X5]];else local vT=ko[0x3];local NT,iT=ey[vT]();if not(NT)then else ey[vT+1]=iT;do ly=ko[2];end;end;end;end;end;else if not(wo>=0X036)then if wo<0X34 then do ey[ko[0X0003]]=ey[ko[0X2]]<=ey[ko[0X5]];end;else if wo~=0X35 then do(ey)[ko[3]]=#ey[ko[2]];end;else local vj=ko[3];(ey)[vj]=ey[vj](ey[vj+0X1]);Yy=vj;end;end;else if wo>=55 then if wo~=56 then(ey)[ko[0X3]]=ey[ko[0X2]][ko[0X00006]];else Yy=ko[3];(ey)[Yy]=ey[Yy]();end;else repeat local vU,AU=G1,ey;do if#vU>0 then local Zm=({});do for wJ,vJ in e,vU do for ab,Rb in e,vJ do if not(Rb[0x0001]==AU and Rb[0X2]>=0X0)then else local Ji=Rb[0X002];if not(not Zm[Ji])then else Zm[Ji]={AU[Ji]};end;(Rb)[0X00001]=Zm[Ji];(Rb)[2]=0X1;end;end;end;end;end;end;until true;do return ey[ko[0x3]]();end;end;end;end;end;else if wo>=63 then if wo>=0X042 then if wo<0x43 then local Us=ko[0X03];local ws=C(function(...)(w)();for LE in...do(w)(true,LE);end;end);ws(ey[Us],ey[Us+1],ey[Us+2]);Yy=Us;(ey)[Us]=ws;do ly=ko[2];end;else if wo~=0X44 then local T7=ko[0x2];local w7=ey[T7];for Go=T7+1,ko[0X5]do w7=w7..ey[Go];end;(ey)[ko[0X3]]=w7;else(ey)[ko[3]]={x({},1,ko[2])};end;end;else if wo>=0X040 then if wo==65 then if not(not(ey[ko[0x0002]]<=ey[ko[5]]))then else ly=ko[0x003];end;else do ey[ko[0X03]]={};end;end;else local Ts=(ko[3]);local ws,ks=ey[Ts]();do if not(ws)then else ly=ko[2];ey[Ts+0X0003]=ks;end;end;end;end;else if not(wo<60)then if wo<0X03d then do(ey)[ko[3]]=d(ey[ko[2]],ey[ko[5]]);end;else if wo~=0x3e then local AY=(c1[ko[0X2]]);do(AY[1])[AY[2]]=ey[ko[0X3]];end;else(ey)[ko[3]]=ey[ko[2]]%ko[6];end;end;else if not(wo<58)then do if wo~=0X3B then local k3,A3=ko[0X3],(ko[5]-1)*0X00032;local z3=(ey[k3]);for N4=1,ko[2]do z3[A3+N4]=ey[k3+N4];end;else ey[ko[0X3]]=true;end;end;else local oU=ko[3];Yy=oU+ko[0X2]-1;ey[oU](x(ey,oU+1,Yy));Yy=oU-0X00001;end;end;end;end;end;end;end;until false;end;T(x1,h1);do return x1;end;end;XB=0x4;else L=FB(0Xe,2,0X00034);XB=0X00005;continue;end;end;else BG=FB(13,nil,nil,tG,XB,{},{},XB,mG,203.43127803187664)();do XB=8;end;continue;end;else if XB==0X4 then function mG()local Rz,sz,hz,zz=0x2b78B3E1,0X0,nil,(nil);do while sz~=0x2 do if sz==0 then hz=268058888;sz=0X001;else zz=672732019;sz=2;end;end;end;sz=0X01;local uz,Zz,rz,Sz,ez=nil,nil,nil,nil,nil;while 0.724835980304774 do if sz<=1 then if sz~=0X00 then do uz=0X000472cb6bb;end;sz=0x00;continue;else Zz=0X00001B81cc37;sz=3;end;else do if sz<=0X0002 then ez=1160826316;do break;end;else do if sz==0X00003 then rz=894385117;sz=0x4;continue;else Sz=1500487379;sz=0X02;end;end;end;end;end;end;local Kz,Iz,nz={{},{},nil,DG,nil,{},DG,DG,nil},{},(0X1);sz=0X00;local Gz=(nil);while sz<0x4 do if sz<=1 then if sz==0X0 then Gz={};sz=2;continue;else Kz[15]=p();sz=0x4;continue;end;else if sz==0x2 then(Kz)[(setmetatable({},{__mod=function(Ke,be)local oe=(0X0);repeat if oe~=0 then Sz=Sz+281;oe=0X0002;do continue;end;else ez=ez+0X305;do oe=0X1;end;continue;end;until oe>1;do return((be-ez)-Sz);end;end})%0x9ea070c0)]=Gz;do sz=3;end;else for iX=1,A()do(Gz)[iX]={l(),A()};end;sz=1;end;end;end;sz=0X00003;local Oz,Fz=nil,nil;while-0X3883f070 do do if sz<=1 then if sz~=0 then do Kz[0X12]=p();end;sz=0;else Fz=p()-kG;break;end;else if not(sz<=2)then if sz==3 then Kz[12]=l();sz=4;continue;else(Kz)[9]=A();sz=0x2;end;else Oz={};sz=1;end;end;end;end;local Yz=l();local Mz=l()~=(setmetatable({},{__mod=function(p6,O6)local E6=0X1;while'\082j\089\062\j\102\'z'do if E6<=1 then if E6~=0 then Sz=Sz+0X380;E6=4;else Zz=Zz+388;do E6=0x3;end;continue;end;else if E6<=2 then ez=ez-0x0030b;E6=0X0;do continue;end;elseif E6==0x3 then return((((O6-Sz)-rz)+ez)-Zz);else do rz=rz+26;end;do E6=0X2;end;end;end;end;end})%0X650Fdf58);sz=0X0002;local Tz,tz,Ez=nil,nil,(nil);repeat if sz<=0X1 then if sz==0x00 then tz=Kz[IG];sz=0x1;else for d3=0X00000,Tz-1 do tz[d3]=mG();end;sz=0X03;end;else do if sz<=0x02 then for sC=0X1,Fz do local rC,UC,vC=nil,nil,nil;local FC=0X3;repeat if FC<=2 then do if FC<=0X0000 then vC={rC,{}};do FC=5;end;elseif FC~=0X00001 then UC=l();FC=0x004;continue;else if UC==0xf1 then rC=k();elseif UC==0x4b then rC=D();elseif UC==156 then rC=m(FG(Yz),3);elseif UC==90 then do rC=dG;end;elseif UC==0X27 then rC=true;elseif UC==0x005 then rC=D();elseif UC==GG then rC=k()+p();elseif UC==0X00043 then do rC=k();end;elseif UC==77 then rC=D();elseif UC~=31 then else rC=m(FG(Yz),p());end;FC=0x000;continue;end;end;else if FC<=0x0003 then rC=DG;do FC=2;end;continue;else if FC~=4 then(Oz)[nz]=vC;FC=6;else Iz[sC-cG]=nz;FC=0X00001;continue;end;end;end;until FC==0X6;FC=1;repeat if FC~=0 then do nz=nz+0X1;end;FC=0;continue;else if Mz then local Fi=0X00001;local Ki,Ji=nil,nil;do while Fi<0X3 do if Fi<=0 then Ji=0X7dd0116e;Fi=2;continue;else if Fi==1 then Ki=0X7Df999aa;Fi=0X00000;continue;else(MG)[RG]=vC;Fi=3;continue;end;end;end;end;do RG=RG+(setmetatable({},{__mul=function(tb,Ib)local ob=0X00;while ob<0X0002 do do if ob==0X00 then Ji=Ji+170;ob=1;continue;else Ki=Ki+0X0000302;do ob=2;end;end;end;end;do return((Ib-Ji)-Ki);end;end})*4224298693);end;end;break;end;until false;end;sz=0x04;else do if sz==0X3 then Ez=l();do break;end;else Tz=p()-34825;sz=0x000;end;end;end;end;end;until false;sz=0X5;while sz<0X8 do if sz<=0X3 then do if sz<=1 then if sz~=0 then(Kz)[NG]=A();sz=0X8;else do(Kz)[15]=l();end;sz=0x0007;end;else if sz==2 then(Kz)[(setmetatable({},{__mod=function(vZ,bZ)local GZ=(0X00002);while(true)do do if GZ<=0 then return((bZ+hz)-Rz);else do if GZ==1 then do Rz=Rz+307;end;GZ=0;else hz=hz-0X009A;GZ=0X1;end;end;end;end;end;end})%0x00001b7e74B0)]=p();do sz=0X3;end;else do Kz[yG]=A();end;sz=0x0;end;end;end;else if not(sz<=5)then if sz~=0X006 then(Kz)[(setmetatable({},{__mod=function(hA,lA)return lA;end})%0X0010)]=p();sz=6;continue;else(Kz)[0x12]=l();sz=0X001;continue;end;else if sz~=0X4 then(Kz)[0X4]=I(Ez,1,1)~=sG;sz=0X4;continue;else do Kz[7]=I(Ez,0x2,(setmetatable({},{__div=function(ao,yo)for KW=0X0,0x00003 do if KW<=1 then if KW==0 then uz=uz-852;else Sz=Sz-638;continue;end;else do if KW==0X0002 then zz=zz-965;continue;else return(((yo+uz)+Sz)+zz);end;end;end;end;end})/-3367330818))~=sG;end;sz=0x0002;continue;end;end;end;end;(Kz)[19]=l();local Uz=(Kz[0X2]);sz=2;local az=(nil);do while sz~=3 do do if sz<=0X0000 then for Pz=0x0001,az do local Az=(1);local Lz=(nil);do while Az~=0X2 do if Az==0X00000 then do for Tm,Im in hG(t)do local Om,um=nil,(nil);local xm=0x0;repeat if not(xm<=0x0)then if xm==0X1 then if um==2 then local oH=1;local AH,QH=nil,(nil);while'4\071\W\R\)\.\E3'do if oH<=0X0 then if QH then local z4,K4=0X000,(nil);do while z4~=0X02 do do if z4~=0X00000 then K4=QH[0X2];z4=0X02;else do(Lz)[Om]=QH[1];end;z4=1;end;end;end;end;(K4)[#K4+0X01]={Lz,Om};end;break;elseif oH==1 then AH=Iz[Lz[Im]];oH=2;else do QH=Oz[AH];end;oH=0X0;end;end;else if um==0x09 then Lz[Im]=Pz+Lz[Im]+0X1;end;end;break;else um=Lz[Om];do xm=1;end;end;else Om=a[Im];xm=2;continue;end;until false;end;end;do Az=2;end;else Lz=Kz[lG][Pz];Az=0X0;do continue;end;end;end;end;end;do sz=0x0003;end;continue;else do if sz~=1 then az=p()-44723;sz=1;else for ws=cG,az do do(Uz)[ws]={[0X3]=-0X668f35Ed,[IG]=nG,[lG]='\I\X\B\l\^\073\h\.',[1]=0.14030836568859872,[0X05]=-921587236,[4]=l(),[lG]=O(),[0X3]=O(),[0X5]=O(),[7]=false,[6]=l(),[7]=l(),[0X1]=A()};end;end;sz=0;end;end;end;end;end;end;do sz=0;end;repeat do if sz==0X0 then(Kz)[0X13]=l();sz=1;else return Kz;end;end;until(false);end;XB=6;do continue;end;else fG[0X2]=MG;XB=1;end;end;end;else if XB<=0X0001 then if XB~=0X00 then MG=DG;XB=0x3;else do return FB(0X09,nil,nil,QG,aG,CG,t,{},28)(FB(0XC,nil,nil,h,{},{},i,a,{},0X28,920.3830408690291,{},I),FB(0XC,nil,nil,728.3798908595577,157.3219592823239,96,BG,XB,{},RG,37,9,Q9),nil)(...);end;end;else if FB(2,XB,2)then do XB=0X7;end;else R=qG;XB=0X00;end;end;end;end;until false;end)(bit32,coroutine.wrap,6,7,bit32.bxor,string.byte,false,1,22036,unpack,0x0,function(c,B,R,...)if c<=6 then if not(c<=2)then if not(c<=4)then if c~=0X0005 then do return B~=R;end;else return({...})[0X7];end;else if c~=3 then return({...})[10];else do return B