var apply = require('./_apply'),
							 | 
						|
								    arrayMap = require('./_arrayMap'),
							 | 
						|
								    baseIteratee = require('./_baseIteratee'),
							 | 
						|
								    baseRest = require('./_baseRest');
							 | 
						|
								
							 | 
						|
								/** Error message constants. */
							 | 
						|
								var FUNC_ERROR_TEXT = 'Expected a function';
							 | 
						|
								
							 | 
						|
								/**
							 | 
						|
								 * Creates a function that iterates over `pairs` and invokes the corresponding
							 | 
						|
								 * function of the first predicate to return truthy. The predicate-function
							 | 
						|
								 * pairs are invoked with the `this` binding and arguments of the created
							 | 
						|
								 * function.
							 | 
						|
								 *
							 | 
						|
								 * @static
							 | 
						|
								 * @memberOf _
							 | 
						|
								 * @since 4.0.0
							 | 
						|
								 * @category Util
							 | 
						|
								 * @param {Array} pairs The predicate-function pairs.
							 | 
						|
								 * @returns {Function} Returns the new composite function.
							 | 
						|
								 * @example
							 | 
						|
								 *
							 | 
						|
								 * var func = _.cond([
							 | 
						|
								 *   [_.matches({ 'a': 1 }),           _.constant('matches A')],
							 | 
						|
								 *   [_.conforms({ 'b': _.isNumber }), _.constant('matches B')],
							 | 
						|
								 *   [_.stubTrue,                      _.constant('no match')]
							 | 
						|
								 * ]);
							 | 
						|
								 *
							 | 
						|
								 * func({ 'a': 1, 'b': 2 });
							 | 
						|
								 * // => 'matches A'
							 | 
						|
								 *
							 | 
						|
								 * func({ 'a': 0, 'b': 1 });
							 | 
						|
								 * // => 'matches B'
							 | 
						|
								 *
							 | 
						|
								 * func({ 'a': '1', 'b': '2' });
							 | 
						|
								 * // => 'no match'
							 | 
						|
								 */
							 | 
						|
								function cond(pairs) {
							 | 
						|
								  var length = pairs == null ? 0 : pairs.length,
							 | 
						|
								      toIteratee = baseIteratee;
							 | 
						|
								
							 | 
						|
								  pairs = !length ? [] : arrayMap(pairs, function(pair) {
							 | 
						|
								    if (typeof pair[1] != 'function') {
							 | 
						|
								      throw new TypeError(FUNC_ERROR_TEXT);
							 | 
						|
								    }
							 | 
						|
								    return [toIteratee(pair[0]), pair[1]];
							 | 
						|
								  });
							 | 
						|
								
							 | 
						|
								  return baseRest(function(args) {
							 | 
						|
								    var index = -1;
							 | 
						|
								    while (++index < length) {
							 | 
						|
								      var pair = pairs[index];
							 | 
						|
								      if (apply(pair[0], this, args)) {
							 | 
						|
								        return apply(pair[1], this, args);
							 | 
						|
								      }
							 | 
						|
								    }
							 | 
						|
								  });
							 | 
						|
								}
							 | 
						|
								
							 | 
						|
								module.exports = cond;
							 |