1var global = require('./_global');
2var hide = require('./_hide');
3var has = require('./_has');
4var SRC = require('./_uid')('src');
5var $toString = require('./_function-to-string');
6var TO_STRING = 'toString';
7var TPL = ('' + $toString).split(TO_STRING);
8
9require('./_core').inspectSource = function (it) {
10  return $toString.call(it);
11};
12
13(module.exports = function (O, key, val, safe) {
14  var isFunction = typeof val == 'function';
15  if (isFunction) has(val, 'name') || hide(val, 'name', key);
16  if (O[key] === val) return;
17  if (isFunction) has(val, SRC) || hide(val, SRC, O[key] ? '' + O[key] : TPL.join(String(key)));
18  if (O === global) {
19    O[key] = val;
20  } else if (!safe) {
21    delete O[key];
22    hide(O, key, val);
23  } else if (O[key]) {
24    O[key] = val;
25  } else {
26    hide(O, key, val);
27  }
28// add fake Function#toString for correct work wrapped methods / constructors with methods like LoDash isNative
29})(Function.prototype, TO_STRING, function toString() {
30  return typeof this == 'function' && this[SRC] || $toString.call(this);
31});
32