| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192 | 
							- var composeArgs = require('./_composeArgs'),
 
-     composeArgsRight = require('./_composeArgsRight'),
 
-     countHolders = require('./_countHolders'),
 
-     createCtor = require('./_createCtor'),
 
-     createRecurry = require('./_createRecurry'),
 
-     getHolder = require('./_getHolder'),
 
-     reorder = require('./_reorder'),
 
-     replaceHolders = require('./_replaceHolders'),
 
-     root = require('./_root');
 
- /** Used to compose bitmasks for function metadata. */
 
- var WRAP_BIND_FLAG = 1,
 
-     WRAP_BIND_KEY_FLAG = 2,
 
-     WRAP_CURRY_FLAG = 8,
 
-     WRAP_CURRY_RIGHT_FLAG = 16,
 
-     WRAP_ARY_FLAG = 128,
 
-     WRAP_FLIP_FLAG = 512;
 
- /**
 
-  * Creates a function that wraps `func` to invoke it with optional `this`
 
-  * binding of `thisArg`, partial application, and currying.
 
-  *
 
-  * @private
 
-  * @param {Function|string} func The function or method name to wrap.
 
-  * @param {number} bitmask The bitmask flags. See `createWrap` for more details.
 
-  * @param {*} [thisArg] The `this` binding of `func`.
 
-  * @param {Array} [partials] The arguments to prepend to those provided to
 
-  *  the new function.
 
-  * @param {Array} [holders] The `partials` placeholder indexes.
 
-  * @param {Array} [partialsRight] The arguments to append to those provided
 
-  *  to the new function.
 
-  * @param {Array} [holdersRight] The `partialsRight` placeholder indexes.
 
-  * @param {Array} [argPos] The argument positions of the new function.
 
-  * @param {number} [ary] The arity cap of `func`.
 
-  * @param {number} [arity] The arity of `func`.
 
-  * @returns {Function} Returns the new wrapped function.
 
-  */
 
- function createHybrid(func, bitmask, thisArg, partials, holders, partialsRight, holdersRight, argPos, ary, arity) {
 
-   var isAry = bitmask & WRAP_ARY_FLAG,
 
-       isBind = bitmask & WRAP_BIND_FLAG,
 
-       isBindKey = bitmask & WRAP_BIND_KEY_FLAG,
 
-       isCurried = bitmask & (WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG),
 
-       isFlip = bitmask & WRAP_FLIP_FLAG,
 
-       Ctor = isBindKey ? undefined : createCtor(func);
 
-   function wrapper() {
 
-     var length = arguments.length,
 
-         args = Array(length),
 
-         index = length;
 
-     while (index--) {
 
-       args[index] = arguments[index];
 
-     }
 
-     if (isCurried) {
 
-       var placeholder = getHolder(wrapper),
 
-           holdersCount = countHolders(args, placeholder);
 
-     }
 
-     if (partials) {
 
-       args = composeArgs(args, partials, holders, isCurried);
 
-     }
 
-     if (partialsRight) {
 
-       args = composeArgsRight(args, partialsRight, holdersRight, isCurried);
 
-     }
 
-     length -= holdersCount;
 
-     if (isCurried && length < arity) {
 
-       var newHolders = replaceHolders(args, placeholder);
 
-       return createRecurry(
 
-         func, bitmask, createHybrid, wrapper.placeholder, thisArg,
 
-         args, newHolders, argPos, ary, arity - length
 
-       );
 
-     }
 
-     var thisBinding = isBind ? thisArg : this,
 
-         fn = isBindKey ? thisBinding[func] : func;
 
-     length = args.length;
 
-     if (argPos) {
 
-       args = reorder(args, argPos);
 
-     } else if (isFlip && length > 1) {
 
-       args.reverse();
 
-     }
 
-     if (isAry && ary < length) {
 
-       args.length = ary;
 
-     }
 
-     if (this && this !== root && this instanceof wrapper) {
 
-       fn = Ctor || createCtor(fn);
 
-     }
 
-     return fn.apply(thisBinding, args);
 
-   }
 
-   return wrapper;
 
- }
 
- module.exports = createHybrid;
 
 
  |