function inheritedProperties( value, level ) {
	var out;
	var obj;
	var tmp;
	var N;
	var n;
	var i;

	if ( arguments.length > 1 ) {
		if ( !isPositiveInteger( level ) ) {
			throw new TypeError( format( 'invalid argument. Second argument must be a positive integer. Value: `%s`.', level ) );
		}
		N = level;
	} else {
		N = MAX_SAFE_INTEGER;
	}
	if ( value === null || value === void 0 ) {
		return [];
	}
	// Get the value's prototype:
	obj = getPrototypeOf( value );

	// Walk the prototype chain collecting all properties...
	out = [];
	n = 1;
	while ( obj && n <= N ) {
		tmp = propertyNames( obj );
		for ( i = 0; i < tmp.length; i++ ) {
			if ( contains( out, tmp[ i ] ) === false ) {
				out.push( tmp[ i ] );
			}
		}
		tmp = propertySymbols( obj );
		for ( i = 0; i < tmp.length; i++ ) {
			if ( contains( out, tmp[ i ] ) === false ) {
				out.push( tmp[ i ] );
			}
		}
		obj = getPrototypeOf( obj );
		n += 1;
	}

	return out;
}
Returns an array of an object's inherited property names and symbols.

@param {*} value - input object
@param {PositiveInteger} [level] - inheritance level
@throws {TypeError} second argument must be a positive integer
@returns {Array} a list of inherited property names and symbols

@example
var props = inheritedProperties( [] );
// returns [...]