local function m(q,x)if x==nil then x={}elseif x[q]then return true end x[q]=true for q,L in q do if typeof(L)=="\116\097\098\108\101"and m(L,x)then return true end end return false end local function q(m)local x={}for m,L in m do if type(L)=="\116\097\098\108\101"then L=q(L)end if typeof(m)=="\073\110\115\116\097\110\099\101"then m=string.format("\060\073\110\115\116\097\110\099\101\062 \040\037\115\041",m.Name)elseif typeof(m)=="\116\097\098\108\101"then m=string.format("\060\084\097\098\108\101\062 \040\037\115\041",tostring(m))end x[m]=L end return x end local function x(...)local x={...}for L,E in{...}do if type(E)=="\116\097\098\108\101"then assert(not m(E),"\116\097\098\108\101\115 \099\097\110\110\111\116 \098\101 \099\121\099\108\105\099")x[L]=q(E)end end return table.unpack(x)end return x
local function isCyclic(tab, checked)
    if checked == nil then
        checked = {}
    elseif checked[tab] then
        return true
    end

    checked[tab] = true

    for _, value in tab do
        if typeof(value) == "table" and isCyclic(value, checked) then
            return true
        end
    end

    return false
end

local function deepCopy(tab)
    local new = {}

    for k, v in tab do
        if type(v) == "table" then
            v = deepCopy(v)
        end

        if typeof(k) == "Instance" then
            k = string.format("<Instance> (%s)", k.Name)
        elseif typeof(k) == "table" then
            k = string.format("<Table> (%s)", tostring(k))
        end

        new[k] = v
    end

    return new
end

local function prepArgs(...)
    local new = {...}

    for i, arg in {...} do
        if type(arg) == "table" then
            assert(not isCyclic(arg), "tables cannot be cyclic")
            new[i] = deepCopy(arg)
        end
    end

    return table.unpack(new)
end

return prepArgs