local table = _G.table or {}; table.copy = function(t) local new = {}; if not t or type(t) ~= 'table' or next(t) == nil then return new end for k, v in next, t, nil do if type(v) == 'table' then new[k] = table.copy(v) else new[k] = v end end return new; end table.size = function(t, iterate) if not t or type(t) ~= 'table' or next(t) == nil then return 0 end if iterate then return #t end local q = 0 for _ in next, t, nil do q = q + 1 end return q end table.find = function(tbl, value) if not tbl or type(tbl) ~= 'table' or next(tbl) == nil then return nil end for key, val in next, tbl, nil do if val == value then return key, val end end return nil end table.ifind = function(tbl, value) if not tbl or type(tbl) ~= 'table' or next(tbl) == nil then return nil end for key, val in next, tbl, nil do if key == value then return key, val end end return nil end table.flatten = function (t, prefix) if not t or type(t) ~= 'table' or next(t) == nil then return {} end local flat = {} prefix = prefix or '' for k,v in next, t, nil do local key = prefix .. k if type(v) == 'table' then local sub = table.flatten(v, key..'.'); for sk, sv in next, sub, nil do flat[sk] = sv end else flat[key] = v end end return flat end table.compare = function(t1, t2) if (t1 == t2) then return true end if (type(t1) ~= 'table' or type(t2) ~= 'table') then return false end for k in pairs(t2) do if (t1[k] == nil) then return false end end for k, v in pairs(t1) do if (type(v) == 'table') then if (not table.compare(v, t2[k])) then return false end else if (v ~= t2[k]) then return false end end end return true end return table;