/**
 * @license
 * Lo-Dash 2.4.1 (Custom Build) lodash.com/license | Underscore.js 1.5.2 underscorejs.org/LICENSE
 * Build: `lodash underscore exports="amd,commonjs,global,node" -o ./dist/lodash.underscore.js`
 */
;
(function() {
    function n(n, r, t) {
        t = (t || 0) - 1;
        for (var e = n ? n.length : 0; ++t < e;)
            if (n[t] === r) return t;
        return -1
    }

    function r(n, r) {
        for (var t = n.m, e = r.m, u = -1, o = t.length; ++u < o;) {
            var i = t[u],
                f = e[u];
            if (i !== f) {
                if (i > f || typeof i == "undefined") return 1;
                if (i < f || typeof f == "undefined") return -1
            }
        }
        return n.n - r.n
    }

    function t(n) {
        return "\\" + yr[n]
    }

    function e(n, r, t) {
        r || (r = 0), typeof t == "undefined" && (t = n ? n.length : 0);
        var e = -1;
        t = t - r || 0;
        for (var u = Array(0 > t ? 0 : t); ++e < t;) u[e] = n[r + e];
        return u
    }

    function u(n) {
        return n instanceof u ? n : new o(n)
    }

    function o(n, r) {
        this.__chain__ = !! r, this.__wrapped__ = n
    }

    function i(n) {
        function r() {
            if (u) {
                var n = e(u);
                Rr.apply(n, arguments)
            }
            if (this instanceof r) {
                var i = f(t.prototype),
                    n = t.apply(i, n || arguments);
                return O(n) ? n : i
            }
            return t.apply(o, n || arguments)
        }
        var t = n[0],
            u = n[2],
            o = n[4];
        return r
    }

    function f(n) {
        return O(n) ? Br(n) : {}
    }

    function a(n, r, t) {
        if (typeof n != "function") return Y;
        if (typeof r == "undefined" || !("prototype" in n)) return n;
        switch (t) {
            case 1:
                return function(t) {
                    return n.call(r, t)
                };
            case 2:
                return function(t, e) {
                    return n.call(r, t, e)
                };
            case 3:
                return function(t, e, u) {
                    return n.call(r, t, e, u)
                };
            case 4:
                return function(t, e, u, o) {
                    return n.call(r, t, e, u, o)
                }
        }
        return L(n, r)
    }

    function l(n) {
        function r() {
            var n = p ? a : this;
            if (o) {
                var y = e(o);
                Rr.apply(y, arguments)
            }
            return (i || g) && (y || (y = e(arguments)), i && Rr.apply(y, i), g && y.length < c) ? (u |= 16, l([t, h ? u : -4 & u, y, null, a, c])) : (y || (y = arguments), s && (t = n[v]), this instanceof r ? (n = f(t.prototype), y = t.apply(n, y), O(y) ? y : n) : t.apply(n, y))
        }
        var t = n[0],
            u = n[1],
            o = n[2],
            i = n[3],
            a = n[4],
            c = n[5],
            p = 1 & u,
            s = 2 & u,
            g = 4 & u,
            h = 8 & u,
            v = t;
        return r
    }

    function c(n, r) {
        for (var t = -1, e = m(), u = n ? n.length : 0, o = []; ++t < u;) {
            var i = n[t];
            0 > e(r, i) && o.push(i)
        }
        return o
    }

    function p(n, r, t, e) {
        e = (e || 0) - 1;
        for (var u = n ? n.length : 0, o = []; ++e < u;) {
            var i = n[e];
            if (i && typeof i == "object" && typeof i.length == "number" && (Cr(i) || b(i))) {
                r || (i = p(i, r, t));
                var f = -1,
                    a = i.length,
                    l = o.length;
                for (o.length += a; ++f < a;) o[l++] = i[f]
            } else t || o.push(i)
        }
        return o
    }

    function s(n, r, t, e) {
        if (n === r) return 0 !== n || 1 / n == 1 / r;
        if (n === n && !(n && vr[typeof n] || r && vr[typeof r])) return false;
        if (null == n || null == r) return n === r;
        var o = Er.call(n),
            i = Er.call(r);
        if (o != i) return false;
        switch (o) {
            case lr:
            case cr:
                return +n == +r;
            case pr:
                return n != +n ? r != +r : 0 == n ? 1 / n == 1 / r : n == +r;
            case gr:
            case hr:
                return n == r + ""
        }
        if (i = o == ar, !i) {
            var f = n instanceof u,
                a = r instanceof u;
            if (f || a) return s(f ? n.__wrapped__ : n, a ? r.__wrapped__ : r, t, e);
            if (o != sr) return false;
            if (o = n.constructor, f = r.constructor, o != f && !(A(o) && o instanceof o && A(f) && f instanceof f) && "constructor" in n && "constructor" in r) return false
        }
        for (t || (t = []), e || (e = []), o = t.length; o--;)
            if (t[o] == n) return e[o] == r;
        var l = true,
            c = 0;
        if (t.push(n), e.push(r), i) {
            if (c = r.length, l = c == n.length)
                for (; c-- && (l = s(n[c], r[c], t, e)););
        } else Kr(r, function(r, u, o) {
            return Nr.call(o, u) ? (c++, !(l = Nr.call(n, u) && s(n[u], r, t, e)) && er) : void 0
        }), l && Kr(n, function(n, r, t) {
            return Nr.call(t, r) ? !(l = -1 < --c) && er : void 0
        });
        return t.pop(), e.pop(), l
    }

    function g(n, r, t) {
        for (var e = -1, u = m(), o = n ? n.length : 0, i = [], f = t ? [] : i; ++e < o;) {
            var a = n[e],
                l = t ? t(a, e, n) : a;
            (r ? !e || f[f.length - 1] !== l : 0 > u(f, l)) && (t && f.push(l), i.push(a))
        }
        return i
    }

    function h(n) {
        return function(r, t, e) {
            var u = {};
            t = X(t, e, 3), e = -1;
            var o = r ? r.length : 0;
            if (typeof o == "number")
                for (; ++e < o;) {
                    var i = r[e];
                    n(u, i, t(i, e, r), r)
                } else Lr(r, function(r, e, o) {
                    n(u, r, t(r, e, o), o)
                });
            return u
        }
    }

    function v(n, r, t, e, u, o) {
        var f = 16 & r,
            a = 32 & r;
        if (!(2 & r || A(n))) throw new TypeError;
        return f && !t.length && (r &= -17, t = false), a && !e.length && (r &= -33, e = false), (1 == r || 17 === r ? i : l)([n, r, t, e, u, o])
    }

    function y(n) {
        return Vr[n]
    }

    function m() {
        var r = (r = u.indexOf) === G ? n : r;
        return r
    }

    function _(n) {
        return typeof n == "function" && Ar.test(n)
    }

    function d(n) {
        return Gr[n]
    }

    function b(n) {
        return n && typeof n == "object" && typeof n.length == "number" && Er.call(n) == fr || false
    }

    function w(n) {
        if (!n) return n;
        for (var r = 1, t = arguments.length; r < t; r++) {
            var e = arguments[r];
            if (e)
                for (var u in e) n[u] = e[u]
        }
        return n
    }

    function j(n) {
        if (!n) return n;
        for (var r = 1, t = arguments.length; r < t; r++) {
            var e = arguments[r];
            if (e)
                for (var u in e) "undefined" == typeof n[u] && (n[u] = e[u])
        }
        return n
    }

    function x(n) {
        var r = [];
        return Kr(n, function(n, t) {
            A(n) && r.push(t)
        }), r.sort()
    }

    function T(n) {
        for (var r = -1, t = Ur(n), e = t.length, u = {}; ++r < e;) {
            var o = t[r];
            u[n[o]] = o
        }
        return u
    }

    function E(n) {
        if (!n) return true;
        if (Cr(n) || N(n)) return !n.length;
        for (var r in n)
            if (Nr.call(n, r)) return false;
        return true
    }

    function A(n) {
        return typeof n == "function"
    }

    function O(n) {
        return !(!n || !vr[typeof n])
    }

    function S(n) {
        return typeof n == "number" || n && typeof n == "object" && Er.call(n) == pr || false
    }

    function N(n) {
        return typeof n == "string" || n && typeof n == "object" && Er.call(n) == hr || false
    }

    function R(n) {
        for (var r = -1, t = Ur(n), e = t.length, u = Array(e); ++r < e;) u[r] = n[t[r]];
        return u
    }

    function k(n, r) {
        var t = m(),
            e = n ? n.length : 0,
            u = false;
        return e && typeof e == "number" ? u = -1 < t(n, r) : Lr(n, function(n) {
            return (u = n === r) && er
        }), u
    }

    function B(n, r, t) {
        var e = true;
        r = X(r, t, 3), t = -1;
        var u = n ? n.length : 0;
        if (typeof u == "number")
            for (; ++t < u && (e = !! r(n[t], t, n)););
        else Lr(n, function(n, t, u) {
            return !(e = !! r(n, t, u)) && er
        });
        return e
    }

    function F(n, r, t) {
        var e = [];
        r = X(r, t, 3), t = -1;
        var u = n ? n.length : 0;
        if (typeof u == "number")
            for (; ++t < u;) {
                var o = n[t];
                r(o, t, n) && e.push(o)
            } else Lr(n, function(n, t, u) {
                r(n, t, u) && e.push(n)
            });
        return e
    }

    function q(n, r, t) {
        r = X(r, t, 3), t = -1;
        var e = n ? n.length : 0;
        if (typeof e != "number") {
            var u;
            return Lr(n, function(n, t, e) {
                return r(n, t, e) ? (u = n, er) : void 0
            }), u
        }
        for (; ++t < e;) {
            var o = n[t];
            if (r(o, t, n)) return o
        }
    }

    function D(n, r, t) {
        var e = -1,
            u = n ? n.length : 0;
        if (r = r && typeof t == "undefined" ? r : a(r, t, 3), typeof u == "number")
            for (; ++e < u && r(n[e], e, n) !== er;);
        else Lr(n, r)
    }

    function I(n, r) {
        var t = n ? n.length : 0;
        if (typeof t == "number")
            for (; t-- && false !== r(n[t], t, n););
        else {
            var e = Ur(n),
                t = e.length;
            Lr(n, function(n, u, o) {
                return u = e ? e[--t] : --t, false === r(o[u], u, o) && er
            })
        }
    }

    function M(n, r, t) {
        var e = -1,
            u = n ? n.length : 0;
        if (r = X(r, t, 3), typeof u == "number")
            for (var o = Array(u); ++e < u;) o[e] = r(n[e], e, n);
        else o = [], Lr(n, function(n, t, u) {
            o[++e] = r(n, t, u)
        });
        return o
    }

    function $(n, r, t) {
        var e = -1 / 0,
            u = e;
        typeof r != "function" && t && t[r] === n && (r = null);
        var o = -1,
            i = n ? n.length : 0;
        if (null == r && typeof i == "number")
            for (; ++o < i;) t = n[o], t > u && (u = t);
        else r = X(r, t, 3), D(n, function(n, t, o) {
            t = r(n, t, o), t > e && (e = t, u = n)
        });
        return u
    }

    function W(n, r, t, e) {
        if (!n) return t;
        var u = 3 > arguments.length;
        r = X(r, e, 4);
        var o = -1,
            i = n.length;
        if (typeof i == "number")
            for (u && (t = n[++o]); ++o < i;) t = r(t, n[o], o, n);
        else Lr(n, function(n, e, o) {
            t = u ? (u = false, n) : r(t, n, e, o)
        });
        return t
    }

    function z(n, r, t, e) {
        var u = 3 > arguments.length;
        return r = X(r, e, 4), I(n, function(n, e, o) {
            t = u ? (u = false, n) : r(t, n, e, o)
        }), t
    }

    function C(n) {
        var r = -1,
            t = n ? n.length : 0,
            e = Array(typeof t == "number" ? t : 0);
        return D(n, function(n) {
            var t;
            t = ++r, t = 0 + Sr(Wr() * (t - 0 + 1)), e[r] = e[t], e[t] = n
        }), e
    }

    function P(n, r, t) {
        var e;
        r = X(r, t, 3), t = -1;
        var u = n ? n.length : 0;
        if (typeof u == "number")
            for (; ++t < u && !(e = r(n[t], t, n)););
        else Lr(n, function(n, t, u) {
            return (e = r(n, t, u)) && er
        });
        return !!e
    }

    function U(n, r, t) {
        return t && E(r) ? rr : (t ? q : F)(n, r)
    }

    function V(n, r, t) {
        var u = 0,
            o = n ? n.length : 0;
        if (typeof r != "number" && null != r) {
            var i = -1;
            for (r = X(r, t, 3); ++i < o && r(n[i], i, n);) u++
        } else if (u = r, null == u || t) return n ? n[0] : rr;
        return e(n, 0, $r(Mr(0, u), o))
    }

    function G(r, t, e) {
        if (typeof e == "number") {
            var u = r ? r.length : 0;
            e = 0 > e ? Mr(0, u + e) : e || 0
        } else if (e) return e = J(r, t), r[e] === t ? e : -1;
        return n(r, t, e)
    }

    function H(n, r, t) {
        if (typeof r != "number" && null != r) {
            var u = 0,
                o = -1,
                i = n ? n.length : 0;
            for (r = X(r, t, 3); ++o < i && r(n[o], o, n);) u++
        } else u = null == r || t ? 1 : Mr(0, r);
        return e(n, u)
    }

    function J(n, r, t, e) {
        var u = 0,
            o = n ? n.length : u;
        for (t = t ? X(t, e, 1) : Y, r = t(r); u < o;) e = u + o >>> 1, t(n[e]) < r ? u = e + 1 : o = e;
        return u
    }

    function K(n, r, t, e) {
        return typeof r != "boolean" && null != r && (e = t, t = typeof r != "function" && e && e[r] === n ? null : r, r = false), null != t && (t = X(t, e, 3)), g(n, r, t)
    }

    function L(n, r) {
        return 2 < arguments.length ? v(n, 17, e(arguments, 2), null, r) : v(n, 1, null, null, r)
    }

    function Q(n, r, t) {
        var e, u, o, i, f, a, l, c = 0,
            p = false,
            s = true;
        if (!A(n)) throw new TypeError;
        if (r = Mr(0, r) || 0, true === t) var g = true,
        s = false;
        else O(t) && (g = t.leading, p = "maxWait" in t && (Mr(r, t.maxWait) || 0), s = "trailing" in t ? t.trailing : s);
        var h = function() {
            var t = r - (nt() - i);
            0 < t ? a = setTimeout(h, t) : (u && clearTimeout(u), t = l, u = a = l = rr, t && (c = nt(), o = n.apply(f, e), a || u || (e = f = null)))
        }, v = function() {
                a && clearTimeout(a), u = a = l = rr, (s || p !== r) && (c = nt(), o = n.apply(f, e), a || u || (e = f = null))
            };
        return function() {
            if (e = arguments, i = nt(), f = this, l = s && (a || !g), false === p) var t = g && !a;
            else {
                u || g || (c = i);
                var y = p - (i - c),
                    m = 0 >= y;
                m ? (u && (u = clearTimeout(u)), c = i, o = n.apply(f, e)) : u || (u = setTimeout(v, y))
            }
            return m && a ? a = clearTimeout(a) : a || r === p || (a = setTimeout(h, r)), t && (m = true, o = n.apply(f, e)), !m || a || u || (e = f = null), o
        }
    }

    function X(n, r, t) {
        var e = typeof n;
        if (null == n || "function" == e) return a(n, r, t);
        if ("object" != e) return nr(n);
        var u = Ur(n);
        return function(r) {
            for (var t = u.length, e = false; t-- && (e = r[u[t]] === n[u[t]]););
            return e
        }
    }

    function Y(n) {
        return n
    }

    function Z(n) {
        D(x(n), function(r) {
            var t = u[r] = n[r];
            u.prototype[r] = function() {
                var n = [this.__wrapped__];
                return Rr.apply(n, arguments), n = t.apply(u, n), this.__chain__ ? new o(n, true) : n
            }
        })
    }

    function nr(n) {
        return function(r) {
            return r[n]
        }
    }
    var rr, tr = 0,
        er = {}, ur = +new Date + "",
        or = /($^)/,
        ir = /['\n\r\t\u2028\u2029\\]/g,
        fr = "[object Arguments]",
        ar = "[object Array]",
        lr = "[object Boolean]",
        cr = "[object Date]",
        pr = "[object Number]",
        sr = "[object Object]",
        gr = "[object RegExp]",
        hr = "[object String]",
        vr = {
            "boolean": false,
            "function": true,
            object: true,
            number: false,
            string: false,
            undefined: false
        }, yr = {
            "\\": "\\",
            "'": "'",
            "\n": "n",
            "\r": "r",
            "\t": "t",
            "\u2028": "u2028",
            "\u2029": "u2029"
        }, mr = vr[typeof window] && window || this,
        _r = vr[typeof exports] && exports && !exports.nodeType && exports,
        dr = vr[typeof module] && module && !module.nodeType && module,
        br = dr && dr.exports === _r && _r,
        wr = vr[typeof global] && global;
    !wr || wr.global !== wr && wr.window !== wr || (mr = wr);
    var jr = [],
        xr = Object.prototype,
        Tr = mr._,
        Er = xr.toString,
        Ar = RegExp("^" + (Er + "").replace(/[.*+?^${}()|[\]\\]/g, "\\$&").replace(/toString| for [^\]]+/g, ".*?") + "$"),
        Or = Math.ceil,
        Sr = Math.floor,
        Nr = xr.hasOwnProperty,
        Rr = jr.push,
        kr = xr.propertyIsEnumerable,
        Br = _(Br = Object.create) && Br,
        Fr = _(Fr = Array.isArray) && Fr,
        qr = mr.isFinite,
        Dr = mr.isNaN,
        Ir = _(Ir = Object.keys) && Ir,
        Mr = Math.max,
        $r = Math.min,
        Wr = Math.random;
    o.prototype = u.prototype;
    var zr = {};
    ! function() {
        var n = {
            0: 1,
            length: 1
        };
        zr.spliceObjects = (jr.splice.call(n, 0, 1), !n[0])
    }(1), u.templateSettings = {
        escape: /<%-([\s\S]+?)%>/g,
        evaluate: /<%([\s\S]+?)%>/g,
        interpolate: /<%=([\s\S]+?)%>/g,
        variable: ""
    }, Br || (f = function() {
        function n() {}
        return function(r) {
            if (O(r)) {
                n.prototype = r;
                var t = new n;
                n.prototype = null
            }
            return t || mr.Object()
        }
    }()), b(arguments) || (b = function(n) {
        return n && typeof n == "object" && typeof n.length == "number" && Nr.call(n, "callee") && !kr.call(n, "callee") || false
    });
    var Cr = Fr || function(n) {
            return n && typeof n == "object" && typeof n.length == "number" && Er.call(n) == ar || false
        }, Pr = function(n) {
            var r, t = [];
            if (!n || !vr[typeof n]) return t;
            for (r in n) Nr.call(n, r) && t.push(r);
            return t
        }, Ur = Ir ? function(n) {
            return O(n) ? Ir(n) : []
        } : Pr,
        Vr = {
            "&": "&amp;",
            "<": "&lt;",
            ">": "&gt;",
            '"': "&quot;",
            "'": "&#x27;"
        }, Gr = T(Vr),
        Hr = RegExp("(" + Ur(Gr).join("|") + ")", "g"),
        Jr = RegExp("[" + Ur(Vr).join("") + "]", "g"),
        Kr = function(n, r) {
            var t;
            if (!n || !vr[typeof n]) return n;
            for (t in n)
                if (r(n[t], t, n) === er) break;
            return n
        }, Lr = function(n, r) {
            var t;
            if (!n || !vr[typeof n]) return n;
            for (t in n)
                if (Nr.call(n, t) && r(n[t], t, n) === er) break;
            return n
        };
    A(/x/) && (A = function(n) {
        return typeof n == "function" && "[object Function]" == Er.call(n)
    });
    var Qr = h(function(n, r, t) {
        Nr.call(n, t) ? n[t]++ : n[t] = 1
    }),
        Xr = h(function(n, r, t) {
            (Nr.call(n, t) ? n[t] : n[t] = []).push(r)
        }),
        Yr = h(function(n, r, t) {
            n[t] = r
        }),
        Zr = M,
        nt = _(nt = Date.now) && nt || function() {
            return (new Date).getTime()
        };
    u.after = function(n, r) {
        if (!A(r)) throw new TypeError;
        return function() {
            return 1 > --n ? r.apply(this, arguments) : void 0
        }
    }, u.bind = L, u.bindAll = function(n) {
        for (var r = 1 < arguments.length ? p(arguments, true, false, 1) : x(n), t = -1, e = r.length; ++t < e;) {
            var u = r[t];
            n[u] = v(n[u], 1, null, null, n)
        }
        return n
    }, u.chain = function(n) {
        return n = new o(n), n.__chain__ = true, n
    }, u.compact = function(n) {
        for (var r = -1, t = n ? n.length : 0, e = []; ++r < t;) {
            var u = n[r];
            u && e.push(u)
        }
        return e
    }, u.compose = function() {
        for (var n = arguments, r = n.length; r--;)
            if (!A(n[r])) throw new TypeError;
        return function() {
            for (var r = arguments, t = n.length; t--;) r = [n[t].apply(this, r)];
            return r[0]
        }
    }, u.countBy = Qr, u.debounce = Q, u.defaults = j, u.defer = function(n) {
        if (!A(n)) throw new TypeError;
        var r = e(arguments, 1);
        return setTimeout(function() {
            n.apply(rr, r)
        }, 1)
    }, u.delay = function(n, r) {
        if (!A(n)) throw new TypeError;
        var t = e(arguments, 2);
        return setTimeout(function() {
            n.apply(rr, t)
        }, r)
    }, u.difference = function(n) {
        return c(n, p(arguments, true, true, 1))
    }, u.filter = F, u.flatten = function(n, r) {
        return p(n, r)
    }, u.forEach = D, u.functions = x, u.groupBy = Xr, u.indexBy = Yr, u.initial = function(n, r, t) {
        var u = 0,
            o = n ? n.length : 0;
        if (typeof r != "number" && null != r) {
            var i = o;
            for (r = X(r, t, 3); i-- && r(n[i], i, n);) u++
        } else u = null == r || t ? 1 : r || u;
        return e(n, 0, $r(Mr(0, o - u), o))
    }, u.intersection = function() {
        for (var n = [], r = -1, t = arguments.length; ++r < t;) {
            var e = arguments[r];
            (Cr(e) || b(e)) && n.push(e)
        }
        var u = n[0],
            o = -1,
            i = m(),
            f = u ? u.length : 0,
            a = [];
        n: for (; ++o < f;)
            if (e = u[o], 0 > i(a, e)) {
                for (r = t; --r;)
                    if (0 > i(n[r], e)) continue n;
                a.push(e)
            }
        return a
    }, u.invert = T, u.invoke = function(n, r) {
        var t = e(arguments, 2),
            u = -1,
            o = typeof r == "function",
            i = n ? n.length : 0,
            f = Array(typeof i == "number" ? i : 0);
        return D(n, function(n) {
            f[++u] = (o ? r : n[r]).apply(n, t)
        }), f
    }, u.keys = Ur, u.map = M, u.max = $, u.memoize = function(n, r) {
        var t = {};
        return function() {
            var e = r ? r.apply(this, arguments) : ur + arguments[0];
            return Nr.call(t, e) ? t[e] : t[e] = n.apply(this, arguments)
        }
    }, u.min = function(n, r, t) {
        var e = 1 / 0,
            u = e;
        typeof r != "function" && t && t[r] === n && (r = null);
        var o = -1,
            i = n ? n.length : 0;
        if (null == r && typeof i == "number")
            for (; ++o < i;) t = n[o], t < u && (u = t);
        else r = X(r, t, 3), D(n, function(n, t, o) {
            t = r(n, t, o), t < e && (e = t, u = n)
        });
        return u
    }, u.omit = function(n) {
        var r = [];
        Kr(n, function(n, t) {
            r.push(t)
        });
        for (var r = c(r, p(arguments, true, false, 1)), t = -1, e = r.length, u = {}; ++t < e;) {
            var o = r[t];
            u[o] = n[o]
        }
        return u
    }, u.once = function(n) {
        var r, t;
        if (!A(n)) throw new TypeError;
        return function() {
            return r ? t : (r = true, t = n.apply(this, arguments), n = null, t)
        }
    }, u.pairs = function(n) {
        for (var r = -1, t = Ur(n), e = t.length, u = Array(e); ++r < e;) {
            var o = t[r];
            u[r] = [o, n[o]]
        }
        return u
    }, u.partial = function(n) {
        return v(n, 16, e(arguments, 1))
    }, u.pick = function(n) {
        for (var r = -1, t = p(arguments, true, false, 1), e = t.length, u = {}; ++r < e;) {
            var o = t[r];
            o in n && (u[o] = n[o])
        }
        return u
    }, u.pluck = Zr, u.range = function(n, r, t) {
        n = +n || 0, t = +t || 1, null == r && (r = n, n = 0);
        var e = -1;
        r = Mr(0, Or((r - n) / t));
        for (var u = Array(r); ++e < r;) u[e] = n, n += t;
        return u
    }, u.reject = function(n, r, t) {
        return r = X(r, t, 3), F(n, function(n, t, e) {
            return !r(n, t, e)
        })
    }, u.rest = H, u.shuffle = C, u.sortBy = function(n, t, e) {
        var u = -1,
            o = n ? n.length : 0,
            i = Array(typeof o == "number" ? o : 0);
        for (t = X(t, e, 3), D(n, function(n, r, e) {
            i[++u] = {
                m: [t(n, r, e)],
                n: u,
                o: n
            }
        }), o = i.length, i.sort(r); o--;) i[o] = i[o].o;
        return i
    }, u.tap = function(n, r) {
        return r(n), n
    }, u.throttle = function(n, r, t) {
        var e = true,
            u = true;
        if (!A(n)) throw new TypeError;
        return false === t ? e = false : O(t) && (e = "leading" in t ? t.leading : e, u = "trailing" in t ? t.trailing : u), t = {}, t.leading = e, t.maxWait = r, t.trailing = u, Q(n, r, t)
    }, u.times = function(n, r, t) {
        n = -1 < (n = +n) ? n : 0;
        var e = -1,
            u = Array(n);
        for (r = a(r, t, 1); ++e < n;) u[e] = r(e);
        return u
    }, u.toArray = function(n) {
        return Cr(n) ? e(n) : n && typeof n.length == "number" ? M(n) : R(n)
    }, u.union = function() {
        return g(p(arguments, true, true))
    }, u.uniq = K, u.values = R, u.where = U, u.without = function(n) {
        return c(n, e(arguments, 1))
    }, u.wrap = function(n, r) {
        return v(r, 16, [n])
    }, u.zip = function() {
        for (var n = -1, r = $(Zr(arguments, "length")), t = Array(0 > r ? 0 : r); ++n < r;) t[n] = Zr(arguments, n);
        return t
    }, u.collect = M, u.drop = H, u.each = D, u.extend = w, u.methods = x, u.object = function(n, r) {
        var t = -1,
            e = n ? n.length : 0,
            u = {};
        for (r || !e || Cr(n[0]) || (r = []); ++t < e;) {
            var o = n[t];
            r ? u[o] = r[t] : o && (u[o[0]] = o[1])
        }
        return u
    }, u.select = F, u.tail = H, u.unique = K, u.clone = function(n) {
        return O(n) ? Cr(n) ? e(n) : w({}, n) : n
    }, u.contains = k, u.escape = function(n) {
        return null == n ? "" : (n + "").replace(Jr, y)
    }, u.every = B, u.find = q, u.has = function(n, r) {
        return n ? Nr.call(n, r) : false
    }, u.identity = Y, u.indexOf = G, u.isArguments = b, u.isArray = Cr, u.isBoolean = function(n) {
        return true === n || false === n || n && typeof n == "object" && Er.call(n) == lr || false
    }, u.isDate = function(n) {
        return n && typeof n == "object" && Er.call(n) == cr || false
    }, u.isElement = function(n) {
        return n && 1 === n.nodeType || false
    }, u.isEmpty = E, u.isEqual = function(n, r) {
        return s(n, r)
    }, u.isFinite = function(n) {
        return qr(n) && !Dr(parseFloat(n))
    }, u.isFunction = A, u.isNaN = function(n) {
        return S(n) && n != +n
    }, u.isNull = function(n) {
        return null === n
    }, u.isNumber = S, u.isObject = O, u.isRegExp = function(n) {
        return n && vr[typeof n] && Er.call(n) == gr || false
    }, u.isString = N, u.isUndefined = function(n) {
        return typeof n == "undefined"
    }, u.lastIndexOf = function(n, r, t) {
        var e = n ? n.length : 0;
        for (typeof t == "number" && (e = (0 > t ? Mr(0, e + t) : $r(t, e - 1)) + 1); e--;)
            if (n[e] === r) return e;
        return -1
    }, u.mixin = Z, u.noConflict = function() {
        return mr._ = Tr, this
    }, u.random = function(n, r) {
        return null == n && null == r && (r = 1), n = +n || 0, null == r ? (r = n, n = 0) : r = +r || 0, n + Sr(Wr() * (r - n + 1))
    }, u.reduce = W, u.reduceRight = z, u.result = function(n, r) {
        if (n) {
            var t = n[r];
            return A(t) ? n[r]() : t
        }
    }, u.size = function(n) {
        var r = n ? n.length : 0;
        return typeof r == "number" ? r : Ur(n).length
    }, u.some = P, u.sortedIndex = J, u.template = function(n, r, e) {
        var o = u,
            i = o.templateSettings;
        n = (n || "") + "", e = j({}, e, i);
        var f = 0,
            a = "__p+='",
            i = e.variable;
        n.replace(RegExp((e.escape || or).source + "|" + (e.interpolate || or).source + "|" + (e.evaluate || or).source + "|$", "g"), function(r, e, u, o, i) {
            return a += n.slice(f, i).replace(ir, t), e && (a += "'+_.escape(" + e + ")+'"), o && (a += "';" + o + ";\n__p+='"), u && (a += "'+((__t=(" + u + "))==null?'':__t)+'"), f = i + r.length, r
        }), a += "';", i || (i = "obj", a = "with(" + i + "||{}){" + a + "}"), a = "function(" + i + "){var __t,__p='',__j=Array.prototype.join;function print(){__p+=__j.call(arguments,'')}" + a + "return __p}";
        try {
            var l = Function("_", "return " + a)(o)
        } catch (c) {
            throw c.source = a, c
        }
        return r ? l(r) : (l.source = a, l)
    }, u.unescape = function(n) {
        return null == n ? "" : (n + "").replace(Hr, d)
    }, u.uniqueId = function(n) {
        var r = ++tr + "";
        return n ? n + r : r
    }, u.all = B, u.any = P, u.detect = q, u.findWhere = function(n, r) {
        return U(n, r, true)
    }, u.foldl = W, u.foldr = z, u.include = k, u.inject = W, u.first = V, u.last = function(n, r, t) {
        var u = 0,
            o = n ? n.length : 0;
        if (typeof r != "number" && null != r) {
            var i = o;
            for (r = X(r, t, 3); i-- && r(n[i], i, n);) u++
        } else if (u = r, null == u || t) return n ? n[o - 1] : rr;
        return e(n, Mr(0, o - u))
    }, u.sample = function(n, r, t) {
        return n && typeof n.length != "number" && (n = R(n)), null == r || t ? n ? n[0 + Sr(Wr() * (n.length - 1 - 0 + 1))] : rr : (n = C(n), n.length = $r(Mr(0, r), n.length), n)
    }, u.take = V, u.head = V, Z(u), u.VERSION = "2.4.1", u.prototype.chain = function() {
        return this.__chain__ = true, this
    }, u.prototype.value = function() {
        return this.__wrapped__
    }, D("pop push reverse shift sort splice unshift".split(" "), function(n) {
        var r = jr[n];
        u.prototype[n] = function() {
            var n = this.__wrapped__;
            return r.apply(n, arguments), zr.spliceObjects || 0 !== n.length || delete n[0], this
        }
    }), D(["concat", "join", "slice"], function(n) {
        var r = jr[n];
        u.prototype[n] = function() {
            var n = r.apply(this.__wrapped__, arguments);
            return this.__chain__ && (n = new o(n), n.__chain__ = true), n
        }
    }), typeof define == "function" && typeof define.amd == "object" && define.amd ? (mr._ = u, define(function() {
        return u
    })) : _r && dr ? br ? (dr.exports = u)._ = u : _r._ = u : mr._ = u
}).call(this);