local I=script.Parent local t=require(I.copyDeep)local c=I.Parent local Z=require(script.Parent.Parent.None)local s=require(c.t)local J=s.table local function r(...)local I={}for c=1,select("\035",...),1 do local s=select(c,...)if s~=nil then assert(J(s))for c,s in pairs(s)do if s==Z then I[c]=nil elseif type(s)=="\116\097\098\108\101"then if I[c]==nil or type(I[c])~="\116\097\098\108\101"then I[c]=t(s)else I[c]=r(I[c],s)end else I[c]=s end end end end return I end return r
local Dictionary = script.Parent
local copyDeep = require(Dictionary.copyDeep)

local Llama = Dictionary.Parent
local None = require(script.Parent.Parent.None)
local t = require(Llama.t)

local validate = t.table

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

	for dictionaryIndex = 1, select('#', ...) do
		local dictionary = select(dictionaryIndex, ...)

		if dictionary ~= nil then
			assert(validate(dictionary))

			for key, value in pairs(dictionary) do
				if value == None then
					new[key] = nil
				elseif type(value) == "table" then
					if new[key] == nil or type(new[key]) ~= "table" then
						new[key] = copyDeep(value)
					else
						new[key] = mergeDeep(new[key], value)
					end
				else
					new[key] = value
				end
			end
		end
	end

	return new
end

return mergeDeep