define(['./_arrayMap', './_baseClone', './_baseUnset', './_castPath', './_copyObject', './_flatRest', './_getAllKeysIn'], function(arrayMap, baseClone, baseUnset, castPath, copyObject, flatRest, getAllKeysIn) {
var CLONE_DEEP_FLAG = 1, CLONE_FLAT_FLAG = 2, CLONE_SYMBOLS_FLAG = 4;
var omit = flatRest(function(object, paths) { var result = {}; if (object == null) { return result; } var bitmask = CLONE_FLAT_FLAG | CLONE_SYMBOLS_FLAG; paths = arrayMap(paths, function(path) { path = castPath(path, object); bitmask |= (path.length > 1 ? CLONE_DEEP_FLAG : 0); return path; });
copyObject(object, getAllKeysIn(object), result); result = baseClone(result, bitmask);
var length = paths.length; while (length--) { baseUnset(result, paths[length]); } return result; });
return omit;});