-- Converted using Mokiros's Model to Script Version 3
-- Converted string size: 5896 characters
local function Decode(str)
local StringLength = #str
-- Base64 decoding
do
local decoder = {}
for b64code, char in pairs(('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/='):split('')) do
decoder[char:byte()] = b64code-1
end
local n = StringLength
local t,k = table.create(math.floor(n/4)+1),1
local padding = str:sub(-2) == '==' and 2 or str:sub(-1) == '=' and 1 or 0
for i = 1, padding > 0 and n-4 or n, 4 do
local a, b, c, d = str:byte(i,i+3)
local v = decoder[a]*0x40000 + decoder[b]*0x1000 + decoder[c]*0x40 + decoder[d]
t[k] = string.char(bit32.extract(v,16,8),bit32.extract(v,8,8),bit32.extract(v,0,8))
k = k + 1
end
if padding == 1 then
local a, b, c = str:byte(n-3,n-1)
local v = decoder[a]*0x40000 + decoder[b]*0x1000 + decoder[c]*0x40
t[k] = string.char(bit32.extract(v,16,8),bit32.extract(v,8,8))
elseif padding == 2 then
local a, b = str:byte(n-3,n-2)
local v = decoder[a]*0x40000 + decoder[b]*0x1000
t[k] = string.char(bit32.extract(v,16,8))
end
str = table.concat(t)
end
local Position = 1
local function Parse(fmt)
local Values = {string.unpack(fmt,str,Position)}
Position = table.remove(Values)
return table.unpack(Values)
end
local Settings = Parse('B')
local Flags = Parse('B')
Flags = {
--[[ValueIndexByteLength]] bit32.extract(Flags,6,2)+1,
--[[InstanceIndexByteLength]] bit32.extract(Flags,4,2)+1,
--[[ConnectionsIndexByteLength]] bit32.extract(Flags,2,2)+1,
--[[MaxPropertiesLengthByteLength]] bit32.extract(Flags,0,2)+1,
--[[Use Double instead of Float]] bit32.band(Settings,0b1) > 0
}
local ValueFMT = ('I'..Flags[1])
local InstanceFMT = ('I'..Flags[2])
local ConnectionFMT = ('I'..Flags[3])
local PropertyLengthFMT = ('I'..Flags[4])
local ValuesLength = Parse(ValueFMT)
local Values = table.create(ValuesLength)
local CFrameIndexes = {}
local ValueDecoders = {
--!!Start
[1] = function(Modifier)
return Parse('s'..Modifier)
end,
--!!Split
[2] = function(Modifier)
return Modifier ~= 0
end,
--!!Split
[3] = function()
return Parse('d')
end,
--!!Split
[4] = function(_,Index)
table.insert(CFrameIndexes,{Index,Parse(('I'..Flags[1]):rep(3))})
end,
--!!Split
[5] = {CFrame.new,Flags[5] and 'dddddddddddd' or 'ffffffffffff'},
--!!Split
[6] = {Color3.fromRGB,'BBB'},
--!!Split
[7] = {BrickColor.new,'I2'},
--!!Split
[8] = function(Modifier)
local len = Parse('I'..Modifier)
local kpts = table.create(len)
for i = 1,len do
kpts[i] = ColorSequenceKeypoint.new(Parse('f'),Color3.fromRGB(Parse('BBB')))
end
return ColorSequence.new(kpts)
end,
--!!Split
[9] = function(Modifier)
local len = Parse('I'..Modifier)
local kpts = table.create(len)
for i = 1,len do
kpts[i] = NumberSequenceKeypoint.new(Parse(Flags[5] and 'ddd' or 'fff'))
end
return NumberSequence.new(kpts)
end,
--!!Split
[10] = {Vector3.new,Flags[5] and 'ddd' or 'fff'},
--!!Split
[11] = {Vector2.new,Flags[5] and 'dd' or 'ff'},
--!!Split
[12] = {UDim2.new,Flags[5] and 'di2di2' or 'fi2fi2'},
--!!Split
[13] = {Rect.new,Flags[5] and 'dddd' or 'ffff'},
--!!Split
[14] = function()
local flags = Parse('B')
local ids = {"Top","Bottom","Left","Right","Front","Back"}
local t = {}
for i = 0,5 do
if bit32.extract(flags,i,1)==1 then
table.insert(t,Enum.NormalId[ids[i+1]])
end
end
return Axes.new(unpack(t))
end,
--!!Split
[15] = function()
local flags = Parse('B')
local ids = {"Top","Bottom","Left","Right","Front","Back"}
local t = {}
for i = 0,5 do
if bit32.extract(flags,i,1)==1 then
table.insert(t,Enum.NormalId[ids[i+1]])
end
end
return Faces.new(unpack(t))
end,
--!!Split
[16] = {PhysicalProperties.new,Flags[5] and 'ddddd' or 'fffff'},
--!!Split
[17] = {NumberRange.new,Flags[5] and 'dd' or 'ff'},
--!!Split
[18] = {UDim.new,Flags[5] and 'di2' or 'fi2'},
--!!Split
[19] = function()
return Ray.new(Vector3.new(Parse(Flags[5] and 'ddd' or 'fff')),Vector3.new(Parse(Flags[5] and 'ddd' or 'fff')))
end
--!!End
}
for i = 1,ValuesLength do
local TypeAndModifier = Parse('B')
local Type = bit32.band(TypeAndModifier,0b11111)
local Modifier = (TypeAndModifier - Type) / 0b100000
local Decoder = ValueDecoders[Type]
if type(Decoder)=='function' then
Values[i] = Decoder(Modifier,i)
else
Values[i] = Decoder[1](Parse(Decoder[2]))
end
end
for i,t in pairs(CFrameIndexes) do
Values[t[1]] = CFrame.fromMatrix(Values[t[2]],Values[t[3]],Values[t[4]])
end
local InstancesLength = Parse(InstanceFMT)
local Instances = {}
local NoParent = {}
for i = 1,InstancesLength do
local ClassName = Values[Parse(ValueFMT)]
local obj
local MeshPartMesh,MeshPartScale
if ClassName == "UnionOperation" then
obj = DecodeUnion(Values,Flags,Parse)
obj.UsePartColor = true
elseif ClassName:find("Script") then
obj = Instance.new("Folder")
Script(obj,ClassName=='ModuleScript')
elseif ClassName == "MeshPart" then
obj = Instance.new("Part")
MeshPartMesh = Instance.new("SpecialMesh")
MeshPartMesh.MeshType = Enum.MeshType.FileMesh
MeshPartMesh.Parent = obj
else
obj = Instance.new(ClassName)
end
local Parent = Instances[Parse(InstanceFMT)]
local PropertiesLength = Parse(PropertyLengthFMT)
local AttributesLength = Parse(PropertyLengthFMT)
Instances[i] = obj
for i = 1,PropertiesLength do
local Prop,Value = Values[Parse(ValueFMT)],Values[Parse(ValueFMT)]
-- ok this looks awful
if MeshPartMesh then
if Prop == "MeshId" then
MeshPartMesh.MeshId = Value
continue
elseif Prop == "TextureID" then
MeshPartMesh.TextureId = Value
continue
elseif Prop == "Size" then
if not MeshPartScale then
MeshPartScale = Value
else
MeshPartMesh.Scale = Value / MeshPartScale
end
elseif Prop == "MeshSize" then
if not MeshPartScale then
MeshPartScale = Value
MeshPartMesh.Scale = obj.Size / Value
else
MeshPartMesh.Scale = MeshPartScale / Value
end
continue
end
end
obj[Prop] = Value
end
if MeshPartMesh then
if MeshPartMesh.MeshId=='' then
if MeshPartMesh.TextureId=='' then
MeshPartMesh.TextureId = 'rbxasset://textures/meshPartFallback.png'
end
MeshPartMesh.Scale = obj.Size
end
end
for i = 1,AttributesLength do
obj:SetAttribute(Values[Parse(ValueFMT)],Values[Parse(ValueFMT)])
end
if not Parent then
table.insert(NoParent,obj)
else
obj.Parent = Parent
end
end
local ConnectionsLength = Parse(ConnectionFMT)
for i = 1,ConnectionsLength do
local a,b,c = Parse(InstanceFMT),Parse(ValueFMT),Parse(InstanceFMT)
Instances[a][Values[b]] = Instances[c]
end
return NoParent
end
local Objects = Decode('AACjIQZGb2xkZXIhBE5hbWUhB2Zpc2hpZXMhBU1vZGVsIQpzbWFsbCBmaXNoIQtQcmltYXJ5UGFydCEKV29ybGRQaXZvdASOj5AhBFBhcnQhBGJvZHkhCEFuY2hvcmVkIiENQm90dG9tU3VyZmFjZQMAAAAAAAAAACEGQ0ZyYW1lBBSPkCEKQ2FuQ29sbGlkZQIhCFBv'
..'c2l0aW9uCnWTScIAALA/wzXuQiEEU2l6ZQqamZk/mpkZP83MzD4hClRvcFN1cmZhY2UhBFdlbGQhBkJUV2VsZCECQzEEkZKQIQVQYXJ0MCEFUGFydDEEk5SQBJWUkASWl5AhB2Zpbl90b3AEI5iQCnWTScLNzPw/wjXuQgqamZk/mpkZP28SgzohDFRyYW5zcGFyZW5j'
..'eQMAAAAAAADwPyEEdGFpbAQpmJAKdZNNwgAAsD/CNe5CCs3MTD+amRk/bxKDOiEIZmluX2xlZnQEL5mQIQtPcmllbnRhdGlvbgoAAAAAAAA0wgAAAAAKgZVJwjMzoz8AjO1CIQhSb3RhdGlvbgrNzMw+zczMPm8SgzohCWZpbl9yaWdodAQ1kpAKAAAAAAAANEIAAAAA'
..'CoCVScIzM6M/49ruQiEMYmFzZV90ZXh0dXJlIQpTdXJmYWNlR3VpIQ5aSW5kZXhCZWhhdmlvciEHQWRvcm5lZSEQQ2xpcHNEZXNjZW5kYW50cyEOTGlnaHRJbmZsdWVuY2UhClNpemluZ01vZGUhCkltYWdlTGFiZWwhB3RleHR1cmUhEEJhY2tncm91bmRDb2xvcjMG'
..'////IRZCYWNrZ3JvdW5kVHJhbnNwYXJlbmN5IQxCb3JkZXJDb2xvcjMGAAAAIQ9Cb3JkZXJTaXplUGl4ZWwMAACAPwAAAACAPwAAIQVJbWFnZSEYcmJ4YXNzZXRpZDovLzE2MDg5NjU5NjMzIQ9JbWFnZVJlY3RPZmZzZXQLAAAAQQAAwEAhDUltYWdlUmVjdFNpemUL'
..'AADAQAAAQEAhBEZhY2UDAAAAAAAAAEALAAAAAAAAwEALAADAQAAAwEALAAAAQAAAQEADAAAAAAAACEALAABgQQAAwEALAADAQAAAAAALAAAAQAAAwEADAAAAAAAAEEALAAAAQQAAAAALAAAAQgAAAAALAACAwAAAQEALAADgQQAAAAALAACAQAAAQEALAACAQQAAAAAL'
..'AADAQAAAgEALAACwQQAAAAALAADAwAAAgEALAACAQAAAgEELAAAAwAAAAEALAAAAQAAAgEELAAAAQAAAAEALAAAAQAAAQEELAACAQAAAQEEhBmRldGFpbCEHWk9mZnNldCEIYmlnIGZpc2gEmo+QBGqPkAp1k0nCzczMP48C6UIKmpmZP5qZmT/NzMw+BJuckASdnpAE'
..'n56QBKCekAShnpAEcp6QCoGVScKbmZk/k1joQgR0opAKgZVJwpuZmT/wp+lCBHajkArc+U3CzczMP48C6UIKAACAP5qZmT9vEoM6BHmjkAp1k0nCZmYmQI8C6UIKmpmZP83MTD9vEoM6IQtmaW5fYm90dG9tIAR9o5AKdZNJwpaZGT+PAulCIRhyYnhhc3NldGlkOi8v'
..'MTYwODk2NTgyNjYLAACgQQAA2EELAADQQQAA2EELAADQQQAAiEELAACgQQAAiEELAADAQAAA0EELAAAAQQAAoEELAADAQAAAoEELAABgQQAA0EELAAAAAAAA0EELAAAAQQAA0EELAADQQQAAqEELAACgwAAAwEALAACoQQAAqEELAACgQAAAwEAhGHJieGFzc2V0aWQ6'
..'Ly8xNjA4OTY1ODA1OQoPLUvCZmbWP3Ez7kIKAACAPwAAAAAAAAAACgAAAAAAAIA/AAAAAAoAwAK70MzMvQAgpT4K9QQ1PwAAAAD1BDW/CkB9fz/QzMy9ACGlPgr0BDU/AAAAAPQENb8KAMACuzQzM78AIaU+CoDN7D4AAAAAAM3sPgoAAAAAAAAAAAEAgL8KAgCAPwAA'
..'AAAAAAAACvYENT8AAAAA9gQ1Pwp1k0vCzMzMP0EA6UIKACPtPgAAAAAAI+2+CgAAAAAAAAAA//9/PwoAAAO7MTOzvwD8qb4K8wQ1PwAAAADzBDU/CmCLjD/IzMy+APypvgoAAAO7oJkZPwD8qb4KAAADu8jMzL4A/Km+CvIENT8AAAAA8gQ1vwr//38/AAAAAAAAAACT'
..'AQABAAIDBAECAAIFBwgJAggAAgoLDA0ODxAREhMUFRYXDhgDAgACGRobGAMCAAIZGh4YAwIAAhkaHxgDAgACGRogCQIIAAIhDQ4PIhESEyMVJBcOJSYJAggAAicNDg8oERITKRUqFw4lJgkCCgACKw0ODywREi0uEy8wLhUxFw4lJgkCCgACMg0ODzMREi00EzUwNBUx'
..'Fw4lJgECAQACNjcMBAA4JjoMOyY8Jj0NCQACPj9AQSZCQ0QOFUVGR0hJSks3DAUAOCY6DExNOyY8Jj0PCQACPj9AQSZCQ0QOFUVGR0hOSks3DAUAOCY6DEwOOyY8Jj0RCQACPj9AQSZCQ0QOFUVGR0hPSlA3DAUAOCY6DExROyY8Jj0TCQACPj9AQSZCQ0QOFUVGR0hS'
..'SlA3DAUAOCY6DEwmOyY8Jj0VCQACPj9AQSZCQ0QOFUVGR0hTSlQ3DAUAOCY6DExVOyY8Jj0XCQACPj9AQSZCQ0QOFUVGR0hWSlQ3DAUAOCY6DExNOyY8Jj0ZCQACPj9AQSZCQ0QOFUVGR0hXSlg3DAQAOCY6DDsmPCY9GwkAAj4/QEEmQkNEDhVFRkdIWUpaNwwEADgm'
..'Ogw7JjwmPR0JAAI+P0BBJkJDRA4VRUZHSFtKXDcMBQA4JjoMTE07JjwmPR8JAAI+P0BBJkJDRA4VRUZHSF1KXjcMBAA4JjoMOyY8Jj0hCQACPj9AQSZCQ0QOFUVGR0hfSmA3DAUAOCY6DExNOyY8Jj0jCQACPj9AQSZCQ0QOFUVGR0hhSmI3DAQAOCY6DDsmPCY9JQkA'
..'Aj4/QEEmQkNEDhVFRkdIY0piNwwFADgmOgxMTTsmPCY9JwkAAj4/QEEmQkNEDhVFRkdIZEpgAQIBAAJlNykFADgmOgw7JjwmZiY9KgkAAj4/QEEmQkNEDhVFRkdISUpLNykGADgmOgxMTTsmPCZmJj0sCQACPj9AQSZCQ0QOFUVGR0hOSks3KQYAOCY6DEwOOyY8JmYm'
..'PS4JAAI+P0BBJkJDRA4VRUZHSE9KUDcpBgA4JjoMTFE7JjwmZiY9MAkAAj4/QEEmQkNEDhVFRkdIUkpQNykGADgmOgxMJjsmPCZmJj0yCQACPj9AQSZCQ0QOFUVGR0hTSlQ3KQYAOCY6DExVOyY8JmYmPTQJAAI+P0BBJkJDRA4VRUZHSFZKVDcpBgA4JjoMTE07Jjwm'
..'ZiY9NgkAAj4/QEEmQkNEDhVFRkdIV0pYNykFADgmOgw7JjwmZiY9OAkAAj4/QEEmQkNEDhVFRkdIWUpaNykFADgmOgw7JjwmZiY9OgkAAj4/QEEmQkNEDhVFRkdIW0pcNykGADgmOgxMTTsmPCZmJj08CQACPj9AQSZCQ0QOFUVGR0hdSl43KQUAOCY6DDsmPCZmJj0+'
..'CQACPj9AQSZCQ0QOFUVGR0hfSmA3KQYAOCY6DExNOyY8JmYmPUAJAAI+P0BBJkJDRA4VRUZHSGFKYjcpBQA4JjoMOyY8JmYmPUIJAAI+P0BBJkJDRA4VRUZHSGNKYjcpBgA4JjoMTE07JjwmZiY9RAkAAj4/QEEmQkNEDhVFRkdIZEpgBAECAAJnB2gJRggAAgoLDA0O'
..'D2kREhNqFWsXDhhHAgACGRpsGEcCAAIZGm0YRwIAAhkabhhHAgACGRpvGEcCAAIZGnAJRgoAAisNDg9xERItLhNyMC4VMRcOJSYJRgoAAjINDg9zERItNBN0MDQVMRcOJSYJRggAAicNDg91ERITdhV3Fw4lJglGCAACIQ0OD3gREhN5FXoXDiUmCUYIAAJ7DQ4PfBES'
..'E30VehcOJSYBRgEAAjY3UgUAOCY6DExNOyY8Jj1TCQACPj9AQSZCQ0QOFUVGfkhkSmA3UgQAOCY6DDsmPCY9VQkAAj4/QEEmQkNEDhVFRn5IY0piN1IFADgmOgxMTTsmPCY9VwkAAj4/QEEmQkNEDhVFRn5IYUpiN1IEADgmOgw7JjwmPVkJAAI+P0BBJkJDRA4VRUZ+'
..'SF9KYDdSBQA4JjoMTE07JjwmPVsJAAI+P0BBJkJDRA4VRUZ+SH9KXDdSBAA4JjoMOyY8Jj1dCQACPj9AQSZCQ0QOFUVGfkiASl43UgQAOCY6DDsmPCY9XwkAAj4/QEEmQkNEDhVFRn5IgUpeN1IFADgmOgxMTTsmPCY9YQkAAj4/QEEmQkNEDhVFRn5IgkpcN1IFADgm'
..'OgxMDjsmPCY9YwkAAj4/QEEmQkNEDhVFRn5Ig0pUN1IFADgmOgxMVTsmPCY9ZQkAAj4/QEEmQkNEDhVFRn5IhEpUN1IFADgmOgxMJjsmPCY9ZwkAAj4/QEEmQkNEDhVFRn5IhUpUN1IFADgmOgxMUTsmPCY9aQkAAj4/QEEmQkNEDhVFRn5IhkpUN1IFADgmOgxMTTsm'
..'PCY9awkAAj4/QEEmQkNEDhVFRn5Ih0pPN1IEADgmOgw7JjwmPW0JAAI+P0BBJkJDRA4VRUZ+SIhKTzdSBAA4JjoMOyY8Jj1vCQACPj9AQSZCQ0QOFUVGfkiJSoo3UgUAOCY6DExNOyY8Jj1xCQACPj9AQSZCQ0QOFUVGfkiLSowBRgEAAmU3cwYAOCY6DExNOyY8JmYm'
..'PXQJAAI+P0BBJkJDRA4VRUZ+SGRKYDdzBQA4JjoMOyY8JmYmPXYJAAI+P0BBJkJDRA4VRUZ+SGNKYjdzBgA4JjoMTE07JjwmZiY9eAkAAj4/QEEmQkNEDhVFRn5IYUpiN3MFADgmOgw7JjwmZiY9egkAAj4/QEEmQkNEDhVFRn5IX0pgN3MGADgmOgxMTTsmPCZmJj18'
..'CQACPj9AQSZCQ0QOFUVGfkh/Slw3cwUAOCY6DDsmPCZmJj1+CQACPj9AQSZCQ0QOFUVGfkiASl43cwUAOCY6DDsmPCZmJj2ACQACPj9AQSZCQ0QOFUVGfkiBSl43cwYAOCY6DExNOyY8JmYmPYIJAAI+P0BBJkJDRA4VRUZ+SIJKXDdzBgA4JjoMTA47JjwmZiY9hAkA'
..'Aj4/QEEmQkNEDhVFRn5Ig0pUN3MGADgmOgxMVTsmPCZmJj2GCQACPj9AQSZCQ0QOFUVGfkiESlQ3cwYAOCY6DEwmOyY8JmYmPYgJAAI+P0BBJkJDRA4VRUZ+SIVKVDdzBgA4JjoMTFE7JjwmZiY9igkAAj4/QEEmQkNEDhVFRn5IhkpUN3MGADgmOgxMTTsmPCZmJj2M'
..'CQACPj9AQSZCQ0QOFUVGjUiHSk83cwUAOCY6DDsmPCZmJj2OCQACPj9AQSZCQ0QOFUVGfkiISk83cwUAOCY6DDsmPCZmJj2QCQACPj9AQSZCQ0QOFUVGfkiJSoo3cwYAOCY6DExNOyY8JmYmPZIJAAI+P0BBJkJDRA4VRUZ+SItKjFACBgMEHAsEHQMFHAsFHQkGHAsG'
..'HQgHHAsHHQoNOQMPOQMROQMTOQMVOQMXOQMZOQkbOQkdOQgfOQghOQsjOQslOQonOQoqOQMsOQMuOQMwOQMyOQM0OQM2OQk4OQk6OQg8OQg+OQtAOQtCOQpEOQpGBkdIHE1IHU5JHE1JHVBKHE1KHU9LHE1LHVFMHE1MHUdTOU1VOU1XOU5ZOU5bOVFdOVFfOVBhOVBj'
..'OUdlOUdnOUdpOUdrOUdtOUdvOU9xOU90OU12OU14OU56OU58OVF+OVGAOVCCOVCEOUeGOUeIOUeKOUeMOUeOOUeQOU+SOU8=')
return Objects