Giter Site home page Giter Site logo

test's People

Stargazers

 avatar

Watchers

 avatar

test's Issues

Orderby

    public static IQueryable<T> OrderBy<T>(this IQueryable<T> source, string sort, string sortFieldName)
    {
        var param = Expression.Parameter(typeof(T), "p");
        var prop = Expression.Property(param, sortFieldName);
        var exp = Expression.Lambda(prop, param);
        string method = (sort.ToLower() == "asc" || sort.IsNull()) ? "OrderBy" : "OrderByDescending";
        Type[] types = new Type[] { source.ElementType, exp.Body.Type };
        var mce = Expression.Call(typeof(Queryable), method, types, source.Expression, exp);
        return source.Provider.CreateQuery<T>(mce);
    }

SqlHelper.cs

using System;
using System.Text;
using System.Configuration;
using System.Data;
using System.Data.SqlClient;

namespace BulidDtoClass
{
public class SqlHelper
{
//管道连接字符串
private static string strCon = ConfigurationManager.AppSettings["SqlConnStr"];
//默认每页条数
public const int defPageRow = 40;

    /// <summary>
    /// 获取Sql管道连接句柄
    /// </summary>
    /// <returns>Sql连接句柄</returns>
    private static SqlConnection GetConn()
    {
        try
        {
            SqlConnection conn = null;
            conn = new SqlConnection(strCon);
            conn.Open();
            return conn;
        }
        catch (Exception ex)
        {
            throw ex;
        }
    }



    /// <summary>
    /// 关闭Sql管道连接
    /// </summary>
    /// <param name="conn">管道连接句柄</param>
    private static void Close(SqlConnection conn)
    {
        try
        {
            if (conn == null) return;
            if (conn.State == ConnectionState.Open) conn.Close();
            conn.Dispose();
        }
        catch (Exception)
        {
        }
    }



    /// <summary>
    /// 获取新参数数组
    /// </summary>
    /// <param name="spc"></param>
    /// <returns></returns>
    private static SqlParameter[] GetNewSqlParameterCollection(SqlParameter[] spc = null)
    {
        if (spc == null) return null;
        SqlParameter[] ret = new SqlParameter[spc.Length];
        for (int i = 0; i < spc.Length; i++)
        {
            ret[i] = new SqlParameter();
            ret[i].ParameterName = spc[i].ParameterName;
            ret[i].Value = spc[i].Value;
        }
        return ret;
    }



    /// <summary>
    /// ExecuteNonQuery
    /// </summary>
    /// <param name="strSql"></param>
    /// <param name="spc"></param>
    /// <returns></returns>
    public static int ExecuteNonQuery(string strSql, SqlParameter[] spc = null)
    {
        int ret = 0;
        SqlConnection conn = null;
        try
        {
            conn = GetConn();
            SqlCommand cmd = new SqlCommand(strSql, conn);
            SqlParameter[] spc2 = GetNewSqlParameterCollection(spc);
            if (spc2 != null) cmd.Parameters.AddRange(spc2);
            ret = cmd.ExecuteNonQuery();
        }
        catch (Exception ex)
        {
            throw ex;
        }
        Close(conn);
        return ret;
    }



    /// <summary>
    /// ExecuteScalary
    /// </summary>
    /// <param name="strSql"></param>
    /// <param name="spc"></param>
    /// <returns></returns>
    public static object ExecuteScalary(string strSql, SqlParameter[] spc = null)
    {
        object ret = null;
        SqlConnection conn = null;
        try
        {
            conn = GetConn();
            SqlCommand cmd = new SqlCommand(strSql, conn);
            SqlParameter[] spc2 = GetNewSqlParameterCollection(spc);
            if (spc2 != null) cmd.Parameters.AddRange(spc2);
            ret = cmd.ExecuteScalar();
        }
        catch (Exception ex)
        {
            throw ex;
        }
        Close(conn);
        return ret;
    }



    /// <summary>
    /// ExecuteDataTable
    /// </summary>
    /// <param name="strSql"></param>
    /// <param name="spc"></param>
    /// <returns></returns>
    public static DataTable ExecuteDataTable(string strSql, SqlParameter[] spc = null)
    {
        DataTable ret = null;
        SqlConnection conn = null;
        try
        {
            conn = GetConn();
            SqlCommand cmd = new SqlCommand(strSql, conn);
            SqlParameter[] spc2 = GetNewSqlParameterCollection(spc);
            if (spc2 != null) cmd.Parameters.AddRange(spc2);
            DataSet ds = new DataSet();
            SqlDataAdapter sda = new SqlDataAdapter(cmd);
            sda.Fill(ds);
            ret = ds.Tables[0];
        }
        catch (Exception ex)
        {
            throw ex;
        }
        Close(conn);
        return ret;
    }



    /// <summary>
    /// ExecuteDataSet
    /// </summary>
    /// <param name="strSql"></param>
    /// <param name="spc"></param>
    /// <returns></returns>
    public static DataSet ExecuteDataSet(string strSql, SqlParameter[] spc = null)
    {
        DataSet ds = new DataSet();
        SqlConnection conn = null;
        try
        {
            conn = GetConn();
            SqlCommand cmd = new SqlCommand(strSql, conn);
            SqlParameter[] spc2 = GetNewSqlParameterCollection(spc);
            if (spc2 != null) cmd.Parameters.AddRange(spc2);
            SqlDataAdapter sda = new SqlDataAdapter(cmd);
            sda.Fill(ds);
        }
        catch (Exception ex)
        {
            throw ex;
        }
        Close(conn);
        return ds;
    }



    /// <summary>
    /// 获取某表行数
    /// </summary>
    /// <param name="table">表名(可附加条件)</param>
    /// <param name="spc">参数</param>
    /// <returns>行数</returns>
    public static int GetCount(string table, SqlParameter[] spc = null)
    {
        return (int)SqlHelper.ExecuteScalary(string.Format("select count(*) from {0}", table), spc);
    }



    /// <summary>
    /// 获取多张表函数总和
    /// </summary>
    /// <param name="spc">参数</param>
    /// <param name="table">表名(可附加条件)</param>
    /// <returns>行数</returns>
    public static int GetCountTotal(SqlParameter[] spc, params string[] table)
    {
        return 0;//SqlHelper.ExecuteScalary(string.Format("select (select count(*) from {0})", table.join(") + (select count(*) from ")), spc).toInt32();
    }



    /// <summary>
    /// 获取某表查询时的页数
    /// </summary>
    /// <param name="table">表名</param>
    /// <param name="pageRow">每页行数</param>
    /// <returns></returns>
    public static int GetPageCount(string table, int pageRow = -1)
    {
        try
        {
            if (pageRow == -1) pageRow = SqlHelper.defPageRow;
            int count = GetCount(table);
            return count / pageRow + (count % pageRow > 0 ? 1 : 0);
        }
        catch (Exception)
        {
            return 1;
        }
    }
     

    /// <summary>
    /// 检查页码是否正确
    /// </summary>
    /// <param name="table">表名</param>
    /// <param name="page">页码</param>
    /// <param name="pageRow">每页条数</param>
    /// <returns>正确的页码</returns>
    public static int CheckPage(string table, int page, int pageRow = -1)
    {
        try
        {
            int count = SqlHelper.GetPageCount(table, pageRow);
            if (page < 1) return 1;
            if (page > count) return count;
            return page;
        }
        catch (Exception)
        {
            return 1;
        }
    }



    /// <summary>
    /// 获取新ID
    /// </summary>
    /// <returns></returns>
    public static string GetNewID()
    {
        return SqlHelper.ExecuteScalary("select newid()", null).ToString();
    }



    /// <summary>
    /// 获取参数
    /// </summary>
    /// <param name="s"></param>
    /// <returns></returns>
    public static SqlParameter[] GetParameter(params string[] s)
    {
        if (s.Length == 0)
        {
            return null;
        }
        else if (s.Length % 2 > 0)
        {
            throw new Exception("参数个数不可为奇数!");
        }
        int count = s.Length / 2;
        SqlParameter[] spc = new SqlParameter[count];
        for (int i = 0; i < count; i++)
        {
            if (s[i * 2][0] != '@')
            {
                throw new Exception("参数名命名规则错误!");
            }
            spc[i] = new SqlParameter();
            spc[i].ParameterName = s[i * 2];
            spc[i].Value = s[i * 2 + 1];
        }
        return spc;
    }



    /// <summary>
    /// 获取某列表
    /// </summary>
    /// <param name="sqlstr">数据库语句</param>
    /// <param name="spc">数据库参数</param>
    /// <returns>列表数组</returns>
    public static string[] sGlobalGetList(string sqlstr, SqlParameter[] spc = null)
    {
        DataTable dt = SqlHelper.ExecuteDataTable(sqlstr, spc);
        if (dt.Rows.Count == 0) return null;
        string[] sc = new string[dt.Rows.Count];
        StringBuilder sb;
        for (int i = 0; i < dt.Rows.Count; i++)
        {
            sb = new StringBuilder();
            for (int j = 0; j < dt.Columns.Count; j++)
            {
                if (j != 0)
                    sb.Append("#");
                //sb.Append(dt.Rows[i][j].ToString());
                try
                {
                    if (dt.Columns[j].DataType.ToString().Trim() == "DateTime")
                    {
                        sb.Append(Convert.ToDateTime(dt.Rows[i][j]).ToString("yyyy-MM-dd"));
                    }
                    else
                    {
                        sb.Append(dt.Rows[i][j].ToString().Trim());
                    }
                }
                catch (Exception) { }
            }
            sc[i] = sb.ToString();
        }
        return sc;
    }



    /// <summary>
    /// 获取带标题某列表(一行)
    /// </summary>
    /// <param name="sqlstr">数据库语句</param>
    /// <param name="spc">数据库参数</param>
    /// <returns>列表数组</returns>
    public static string[][] hGlobalGetList(string sqlstr, SqlParameter[] spc = null)
    {
        try
        {
            DataTable dt = SqlHelper.ExecuteDataTable(sqlstr, spc);
            string[][] s = new string[2][];
            s[0] = new string[dt.Columns.Count];
            s[1] = new string[dt.Columns.Count];
            for (int i = 0; i < dt.Columns.Count; i++)
            {
                s[0][i] = dt.Columns[i].ColumnName;
                try
                {
                    if (dt.Columns[i].DataType.ToString().Trim() == "DateTime")
                    {
                        s[1][i] = Convert.ToDateTime(dt.Rows[0][i]).ToString("yyyy-MM-dd");
                    }
                    else
                    {
                        s[1][i] = dt.Rows[0][i].ToString().Trim();
                    }
                }
                catch (Exception)
                {
                    s[1][i] = "";
                }
            }
            return s;
        }
        catch (Exception)
        {
            return null;
        }
    }



    /// <summary>
    /// 获取完整某表
    /// </summary>
    /// <param name="sqlstr">数据库语句</param>
    /// <param name="spc">数据库参数</param>
    /// <returns>二维列表数组</returns>
    public static string[][] mGlobalGetList(string sqlstr, SqlParameter[] spc = null)
    {
        try
        {
            DataTable dt = SqlHelper.ExecuteDataTable(sqlstr, spc);
            string[][] s = new string[dt.Rows.Count][];
            for (int i = 0; i < dt.Rows.Count; i++)
            {
                s[i] = new string[dt.Columns.Count];
                for (int j = 0; j < dt.Columns.Count; j++)
                {
                    string t = dt.Columns[j].DataType.ToString().Trim();
                    if (t.IndexOf('.') >= 0)
                    {
                        t = t.Substring(t.LastIndexOf('.') + 1);
                    }
                    try
                    {
                        if (t == "DateTime")
                        {
                            s[i][j] = Convert.ToDateTime(dt.Rows[i][j]).ToString("yyyy-MM-dd");
                        }
                        else
                        {
                            s[i][j] = dt.Rows[i][j].ToString().Trim();
                        }
                    }
                    catch (Exception)
                    {
                        s[i][j] = "";
                    }
                }
            }
            return s;
        }
        catch (Exception)
        {
            return null;
        }
    }



    /// <summary>
    /// 返回DataReader数据集
    /// </summary>
    /// <param name="strSql">执行字符串</param>
    /// <returns>DataReader</returns>
    public static SqlDataReader backDataReader(string strSql)
    {
        SqlDataReader dataReader = null;
        SqlConnection conn = null;
        try
        {
            conn = GetConn();
            SqlCommand cmd = new SqlCommand(strSql, conn);
            dataReader = cmd.ExecuteReader(CommandBehavior.CloseConnection);
        }
        catch (Exception ex)
        {
            throw ex;
        }
        return dataReader;
    }
}

}

bluebird.js

/* @preserve

  • The MIT License (MIT)
  • Copyright (c) 2013-2017 Petka Antonov
  • Permission is hereby granted, free of charge, to any person obtaining a copy
  • of this software and associated documentation files (the "Software"), to deal
  • in the Software without restriction, including without limitation the rights
  • to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
  • copies of the Software, and to permit persons to whom the Software is
  • furnished to do so, subject to the following conditions:
  • The above copyright notice and this permission notice shall be included in
  • all copies or substantial portions of the Software.
  • THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  • IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  • FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
  • AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
  • LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
  • OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
  • THE SOFTWARE.

/
/
*

  • bluebird build version 3.5.0
  • Features enabled: core, race, call_get, generators, map, nodeify, promisify, props, reduce, settle, some, using, timers, filter, any, each
    */
    !function(e){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{var f;"undefined"!=typeof window?f=window:"undefined"!=typeof global?f=global:"undefined"!=typeof self&&(f=self),f.Promise=e()}}(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof dereq=="function"&&dereq;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof dereq=="function"&&dereq;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(dereq,module,exports){
    "use strict";
    module.exports = function(Promise) {
    var SomePromiseArray = Promise._SomePromiseArray;
    function any(promises) {
    var ret = new SomePromiseArray(promises);
    var promise = ret.promise();
    ret.setHowMany(1);
    ret.setUnwrap();
    ret.init();
    return promise;
    }

Promise.any = function (promises) {
return any(promises);
};

Promise.prototype.any = function () {
return any(this);
};

};

},{}],2:[function(dereq,module,exports){
"use strict";
var firstLineError;
try {throw new Error(); } catch (e) {firstLineError = e;}
var schedule = dereq("./schedule");
var Queue = dereq("./queue");
var util = dereq("./util");

function Async() {
this._customScheduler = false;
this._isTickUsed = false;
this._lateQueue = new Queue(16);
this._normalQueue = new Queue(16);
this._haveDrainedQueues = false;
this._trampolineEnabled = true;
var self = this;
this.drainQueues = function () {
self._drainQueues();
};
this._schedule = schedule;
}

Async.prototype.setScheduler = function(fn) {
var prev = this._schedule;
this._schedule = fn;
this._customScheduler = true;
return prev;
};

Async.prototype.hasCustomScheduler = function() {
return this._customScheduler;
};

Async.prototype.enableTrampoline = function() {
this._trampolineEnabled = true;
};

Async.prototype.disableTrampolineIfNecessary = function() {
if (util.hasDevTools) {
this._trampolineEnabled = false;
}
};

Async.prototype.haveItemsQueued = function () {
return this._isTickUsed || this._haveDrainedQueues;
};

Async.prototype.fatalError = function(e, isNode) {
if (isNode) {
process.stderr.write("Fatal " + (e instanceof Error ? e.stack : e) +
"\n");
process.exit(2);
} else {
this.throwLater(e);
}
};

Async.prototype.throwLater = function(fn, arg) {
if (arguments.length === 1) {
arg = fn;
fn = function () { throw arg; };
}
if (typeof setTimeout !== "undefined") {
setTimeout(function() {
fn(arg);
}, 0);
} else try {
this._schedule(function() {
fn(arg);
});
} catch (e) {
throw new Error("No async scheduler available\u000a\u000a See http://goo.gl/MqrFmX\u000a");
}
};

function AsyncInvokeLater(fn, receiver, arg) {
this._lateQueue.push(fn, receiver, arg);
this._queueTick();
}

function AsyncInvoke(fn, receiver, arg) {
this._normalQueue.push(fn, receiver, arg);
this._queueTick();
}

function AsyncSettlePromises(promise) {
this._normalQueue._pushOne(promise);
this._queueTick();
}

if (!util.hasDevTools) {
Async.prototype.invokeLater = AsyncInvokeLater;
Async.prototype.invoke = AsyncInvoke;
Async.prototype.settlePromises = AsyncSettlePromises;
} else {
Async.prototype.invokeLater = function (fn, receiver, arg) {
if (this._trampolineEnabled) {
AsyncInvokeLater.call(this, fn, receiver, arg);
} else {
this._schedule(function() {
setTimeout(function() {
fn.call(receiver, arg);
}, 100);
});
}
};

Async.prototype.invoke = function (fn, receiver, arg) {
    if (this._trampolineEnabled) {
        AsyncInvoke.call(this, fn, receiver, arg);
    } else {
        this._schedule(function() {
            fn.call(receiver, arg);
        });
    }
};

Async.prototype.settlePromises = function(promise) {
    if (this._trampolineEnabled) {
        AsyncSettlePromises.call(this, promise);
    } else {
        this._schedule(function() {
            promise._settlePromises();
        });
    }
};

}

Async.prototype._drainQueue = function(queue) {
while (queue.length() > 0) {
var fn = queue.shift();
if (typeof fn !== "function") {
fn._settlePromises();
continue;
}
var receiver = queue.shift();
var arg = queue.shift();
fn.call(receiver, arg);
}
};

Async.prototype._drainQueues = function () {
this._drainQueue(this._normalQueue);
this._reset();
this._haveDrainedQueues = true;
this._drainQueue(this._lateQueue);
};

Async.prototype._queueTick = function () {
if (!this._isTickUsed) {
this._isTickUsed = true;
this._schedule(this.drainQueues);
}
};

Async.prototype._reset = function () {
this._isTickUsed = false;
};

module.exports = Async;
module.exports.firstLineError = firstLineError;

},{"./queue":26,"./schedule":29,"./util":36}],3:[function(dereq,module,exports){
"use strict";
module.exports = function(Promise, INTERNAL, tryConvertToPromise, debug) {
var calledBind = false;
var rejectThis = function(_, e) {
this._reject(e);
};

var targetRejected = function(e, context) {
context.promiseRejectionQueued = true;
context.bindingPromise._then(rejectThis, rejectThis, null, this, e);
};

var bindingResolved = function(thisArg, context) {
if (((this._bitField & 50397184) === 0)) {
this._resolveCallback(context.target);
}
};

var bindingRejected = function(e, context) {
if (!context.promiseRejectionQueued) this._reject(e);
};

Promise.prototype.bind = function (thisArg) {
if (!calledBind) {
calledBind = true;
Promise.prototype._propagateFrom = debug.propagateFromFunction();
Promise.prototype._boundValue = debug.boundValueFunction();
}
var maybePromise = tryConvertToPromise(thisArg);
var ret = new Promise(INTERNAL);
ret._propagateFrom(this, 1);
var target = this._target();
ret._setBoundTo(maybePromise);
if (maybePromise instanceof Promise) {
var context = {
promiseRejectionQueued: false,
promise: ret,
target: target,
bindingPromise: maybePromise
};
target._then(INTERNAL, targetRejected, undefined, ret, context);
maybePromise._then(
bindingResolved, bindingRejected, undefined, ret, context);
ret._setOnCancel(maybePromise);
} else {
ret._resolveCallback(target);
}
return ret;
};

Promise.prototype._setBoundTo = function (obj) {
if (obj !== undefined) {
this._bitField = this._bitField | 2097152;
this._boundTo = obj;
} else {
this._bitField = this._bitField & (~2097152);
}
};

Promise.prototype._isBound = function () {
return (this._bitField & 2097152) === 2097152;
};

Promise.bind = function (thisArg, value) {
return Promise.resolve(value).bind(thisArg);
};
};

},{}],4:[function(dereq,module,exports){
"use strict";
var old;
if (typeof Promise !== "undefined") old = Promise;
function noConflict() {
try { if (Promise === bluebird) Promise = old; }
catch (e) {}
return bluebird;
}
var bluebird = dereq("./promise")();
bluebird.noConflict = noConflict;
module.exports = bluebird;

},{"./promise":22}],5:[function(dereq,module,exports){
"use strict";
var cr = Object.create;
if (cr) {
var callerCache = cr(null);
var getterCache = cr(null);
callerCache[" size"] = getterCache[" size"] = 0;
}

module.exports = function(Promise) {
var util = dereq("./util");
var canEvaluate = util.canEvaluate;
var isIdentifier = util.isIdentifier;

var getMethodCaller;
var getGetter;
if (!true) {
var makeMethodCaller = function (methodName) {
return new Function("ensureMethod", " \n
return function(obj) { \n
'use strict' \n
var len = this.length; \n
ensureMethod(obj, 'methodName'); \n
switch(len) { \n
case 1: return obj.methodName(this[0]); \n
case 2: return obj.methodName(this[0], this[1]); \n
case 3: return obj.methodName(this[0], this[1], this[2]); \n
case 0: return obj.methodName(); \n
default: \n
return obj.methodName.apply(obj, this); \n
} \n
}; \n
".replace(/methodName/g, methodName))(ensureMethod);
};

var makeGetter = function (propertyName) {
return new Function("obj", " \n
'use strict'; \n
return obj.propertyName; \n
".replace("propertyName", propertyName));
};

var getCompiled = function(name, compiler, cache) {
var ret = cache[name];
if (typeof ret !== "function") {
if (!isIdentifier(name)) {
return null;
}
ret = compiler(name);
cache[name] = ret;
cache[" size"]++;
if (cache[" size"] > 512) {
var keys = Object.keys(cache);
for (var i = 0; i < 256; ++i) delete cache[keys[i]];
cache[" size"] = keys.length - 256;
}
}
return ret;
};

getMethodCaller = function(name) {
return getCompiled(name, makeMethodCaller, callerCache);
};

getGetter = function(name) {
return getCompiled(name, makeGetter, getterCache);
};
}

function ensureMethod(obj, methodName) {
var fn;
if (obj != null) fn = obj[methodName];
if (typeof fn !== "function") {
var message = "Object " + util.classString(obj) + " has no method '" +
util.toString(methodName) + "'";
throw new Promise.TypeError(message);
}
return fn;
}

function caller(obj) {
var methodName = this.pop();
var fn = ensureMethod(obj, methodName);
return fn.apply(obj, this);
}
Promise.prototype.call = function (methodName) {
var args = [].slice.call(arguments, 1);;
if (!true) {
if (canEvaluate) {
var maybeCaller = getMethodCaller(methodName);
if (maybeCaller !== null) {
return this._then(
maybeCaller, undefined, undefined, args, undefined);
}
}
}
args.push(methodName);
return this._then(caller, undefined, undefined, args, undefined);
};

function namedGetter(obj) {
return obj[this];
}
function indexedGetter(obj) {
var index = +this;
if (index < 0) index = Math.max(0, index + obj.length);
return obj[index];
}
Promise.prototype.get = function (propertyName) {
var isIndex = (typeof propertyName === "number");
var getter;
if (!isIndex) {
if (canEvaluate) {
var maybeGetter = getGetter(propertyName);
getter = maybeGetter !== null ? maybeGetter : namedGetter;
} else {
getter = namedGetter;
}
} else {
getter = indexedGetter;
}
return this._then(getter, undefined, undefined, propertyName, undefined);
};
};

},{"./util":36}],6:[function(dereq,module,exports){
"use strict";
module.exports = function(Promise, PromiseArray, apiRejection, debug) {
var util = dereq("./util");
var tryCatch = util.tryCatch;
var errorObj = util.errorObj;
var async = Promise._async;

Promise.prototype["break"] = Promise.prototype.cancel = function() {
if (!debug.cancellation()) return this._warn("cancellation is disabled");

var promise = this;
var child = promise;
while (promise._isCancellable()) {
    if (!promise._cancelBy(child)) {
        if (child._isFollowing()) {
            child._followee().cancel();
        } else {
            child._cancelBranched();
        }
        break;
    }

    var parent = promise._cancellationParent;
    if (parent == null || !parent._isCancellable()) {
        if (promise._isFollowing()) {
            promise._followee().cancel();
        } else {
            promise._cancelBranched();
        }
        break;
    } else {
        if (promise._isFollowing()) promise._followee().cancel();
        promise._setWillBeCancelled();
        child = promise;
        promise = parent;
    }
}

};

Promise.prototype._branchHasCancelled = function() {
this._branchesRemainingToCancel--;
};

Promise.prototype._enoughBranchesHaveCancelled = function() {
return this._branchesRemainingToCancel === undefined ||
this._branchesRemainingToCancel <= 0;
};

Promise.prototype._cancelBy = function(canceller) {
if (canceller === this) {
this._branchesRemainingToCancel = 0;
this._invokeOnCancel();
return true;
} else {
this._branchHasCancelled();
if (this._enoughBranchesHaveCancelled()) {
this._invokeOnCancel();
return true;
}
}
return false;
};

Promise.prototype._cancelBranched = function() {
if (this._enoughBranchesHaveCancelled()) {
this._cancel();
}
};

Promise.prototype._cancel = function() {
if (!this._isCancellable()) return;
this._setCancelled();
async.invoke(this._cancelPromises, this, undefined);
};

Promise.prototype._cancelPromises = function() {
if (this._length() > 0) this._settlePromises();
};

Promise.prototype._unsetOnCancel = function() {
this._onCancelField = undefined;
};

Promise.prototype._isCancellable = function() {
return this.isPending() && !this._isCancelled();
};

Promise.prototype.isCancellable = function() {
return this.isPending() && !this.isCancelled();
};

Promise.prototype._doInvokeOnCancel = function(onCancelCallback, internalOnly) {
if (util.isArray(onCancelCallback)) {
for (var i = 0; i < onCancelCallback.length; ++i) {
this._doInvokeOnCancel(onCancelCallback[i], internalOnly);
}
} else if (onCancelCallback !== undefined) {
if (typeof onCancelCallback === "function") {
if (!internalOnly) {
var e = tryCatch(onCancelCallback).call(this._boundValue());
if (e === errorObj) {
this._attachExtraTrace(e.e);
async.throwLater(e.e);
}
}
} else {
onCancelCallback._resultCancelled(this);
}
}
};

Promise.prototype._invokeOnCancel = function() {
var onCancelCallback = this._onCancel();
this._unsetOnCancel();
async.invoke(this._doInvokeOnCancel, this, onCancelCallback);
};

Promise.prototype._invokeInternalOnCancel = function() {
if (this._isCancellable()) {
this._doInvokeOnCancel(this._onCancel(), true);
this._unsetOnCancel();
}
};

Promise.prototype._resultCancelled = function() {
this.cancel();
};

};

},{"./util":36}],7:[function(dereq,module,exports){
"use strict";
module.exports = function(NEXT_FILTER) {
var util = dereq("./util");
var getKeys = dereq("./es5").keys;
var tryCatch = util.tryCatch;
var errorObj = util.errorObj;

function catchFilter(instances, cb, promise) {
return function(e) {
var boundTo = promise._boundValue();
predicateLoop: for (var i = 0; i < instances.length; ++i) {
var item = instances[i];

        if (item === Error ||
            (item != null && item.prototype instanceof Error)) {
            if (e instanceof item) {
                return tryCatch(cb).call(boundTo, e);
            }
        } else if (typeof item === "function") {
            var matchesPredicate = tryCatch(item).call(boundTo, e);
            if (matchesPredicate === errorObj) {
                return matchesPredicate;
            } else if (matchesPredicate) {
                return tryCatch(cb).call(boundTo, e);
            }
        } else if (util.isObject(e)) {
            var keys = getKeys(item);
            for (var j = 0; j < keys.length; ++j) {
                var key = keys[j];
                if (item[key] != e[key]) {
                    continue predicateLoop;
                }
            }
            return tryCatch(cb).call(boundTo, e);
        }
    }
    return NEXT_FILTER;
};

}

return catchFilter;
};

},{"./es5":13,"./util":36}],8:[function(dereq,module,exports){
"use strict";
module.exports = function(Promise) {
var longStackTraces = false;
var contextStack = [];

Promise.prototype._promiseCreated = function() {};
Promise.prototype._pushContext = function() {};
Promise.prototype._popContext = function() {return null;};
Promise._peekContext = Promise.prototype._peekContext = function() {};

function Context() {
this._trace = new Context.CapturedTrace(peekContext());
}
Context.prototype._pushContext = function () {
if (this._trace !== undefined) {
this._trace._promiseCreated = null;
contextStack.push(this._trace);
}
};

Context.prototype._popContext = function () {
if (this._trace !== undefined) {
var trace = contextStack.pop();
var ret = trace._promiseCreated;
trace._promiseCreated = null;
return ret;
}
return null;
};

function createContext() {
if (longStackTraces) return new Context();
}

function peekContext() {
var lastIndex = contextStack.length - 1;
if (lastIndex >= 0) {
return contextStack[lastIndex];
}
return undefined;
}
Context.CapturedTrace = null;
Context.create = createContext;
Context.deactivateLongStackTraces = function() {};
Context.activateLongStackTraces = function() {
var Promise_pushContext = Promise.prototype._pushContext;
var Promise_popContext = Promise.prototype._popContext;
var Promise_PeekContext = Promise._peekContext;
var Promise_peekContext = Promise.prototype._peekContext;
var Promise_promiseCreated = Promise.prototype._promiseCreated;
Context.deactivateLongStackTraces = function() {
Promise.prototype._pushContext = Promise_pushContext;
Promise.prototype._popContext = Promise_popContext;
Promise._peekContext = Promise_PeekContext;
Promise.prototype._peekContext = Promise_peekContext;
Promise.prototype._promiseCreated = Promise_promiseCreated;
longStackTraces = false;
};
longStackTraces = true;
Promise.prototype._pushContext = Context.prototype._pushContext;
Promise.prototype._popContext = Context.prototype._popContext;
Promise._peekContext = Promise.prototype._peekContext = peekContext;
Promise.prototype._promiseCreated = function() {
var ctx = this._peekContext();
if (ctx && ctx._promiseCreated == null) ctx._promiseCreated = this;
};
};
return Context;
};

},{}],9:[function(dereq,module,exports){
"use strict";
module.exports = function(Promise, Context) {
var getDomain = Promise._getDomain;
var async = Promise._async;
var Warning = dereq("./errors").Warning;
var util = dereq("./util");
var canAttachTrace = util.canAttachTrace;
var unhandledRejectionHandled;
var possiblyUnhandledRejection;
var bluebirdFramePattern =
/[\/]bluebird[\/]js\//;
var nodeFramePattern = /((?:timers.js):\d+:\d+)/;
var parseLinePattern = //<(:(\d+):(\d+))?\s*$/;
var stackFramePattern = null;
var formatStack = null;
var indentStackFrames = false;
var printWarning;
var debugging = !!(util.env("BLUEBIRD_DEBUG") != 0 &&
(true ||
util.env("BLUEBIRD_DEBUG") ||
util.env("NODE_ENV") === "development"));

var warnings = !!(util.env("BLUEBIRD_WARNINGS") != 0 &&
(debugging || util.env("BLUEBIRD_WARNINGS")));

var longStackTraces = !!(util.env("BLUEBIRD_LONG_STACK_TRACES") != 0 &&
(debugging || util.env("BLUEBIRD_LONG_STACK_TRACES")));

var wForgottenReturn = util.env("BLUEBIRD_W_FORGOTTEN_RETURN") != 0 &&
(warnings || !!util.env("BLUEBIRD_W_FORGOTTEN_RETURN"));

Promise.prototype.suppressUnhandledRejections = function() {
var target = this._target();
target._bitField = ((target._bitField & (~1048576)) |
524288);
};

Promise.prototype._ensurePossibleRejectionHandled = function () {
if ((this._bitField & 524288) !== 0) return;
this._setRejectionIsUnhandled();
async.invokeLater(this._notifyUnhandledRejection, this, undefined);
};

Promise.prototype._notifyUnhandledRejectionIsHandled = function () {
fireRejectionEvent("rejectionHandled",
unhandledRejectionHandled, undefined, this);
};

Promise.prototype._setReturnedNonUndefined = function() {
this._bitField = this._bitField | 268435456;
};

Promise.prototype._returnedNonUndefined = function() {
return (this._bitField & 268435456) !== 0;
};

Promise.prototype._notifyUnhandledRejection = function () {
if (this._isRejectionUnhandled()) {
var reason = this._settledValue();
this._setUnhandledRejectionIsNotified();
fireRejectionEvent("unhandledRejection",
possiblyUnhandledRejection, reason, this);
}
};

Promise.prototype._setUnhandledRejectionIsNotified = function () {
this._bitField = this._bitField | 262144;
};

Promise.prototype._unsetUnhandledRejectionIsNotified = function () {
this._bitField = this._bitField & (~262144);
};

Promise.prototype._isUnhandledRejectionNotified = function () {
return (this._bitField & 262144) > 0;
};

Promise.prototype._setRejectionIsUnhandled = function () {
this._bitField = this._bitField | 1048576;
};

Promise.prototype._unsetRejectionIsUnhandled = function () {
this._bitField = this._bitField & (~1048576);
if (this._isUnhandledRejectionNotified()) {
this._unsetUnhandledRejectionIsNotified();
this._notifyUnhandledRejectionIsHandled();
}
};

Promise.prototype._isRejectionUnhandled = function () {
return (this._bitField & 1048576) > 0;
};

Promise.prototype._warn = function(message, shouldUseOwnTrace, promise) {
return warn(message, shouldUseOwnTrace, promise || this);
};

Promise.onPossiblyUnhandledRejection = function (fn) {
var domain = getDomain();
possiblyUnhandledRejection =
typeof fn === "function" ? (domain === null ?
fn : util.domainBind(domain, fn))
: undefined;
};

Promise.onUnhandledRejectionHandled = function (fn) {
var domain = getDomain();
unhandledRejectionHandled =
typeof fn === "function" ? (domain === null ?
fn : util.domainBind(domain, fn))
: undefined;
};

var disableLongStackTraces = function() {};
Promise.longStackTraces = function () {
if (async.haveItemsQueued() && !config.longStackTraces) {
throw new Error("cannot enable long stack traces after promises have been created\u000a\u000a See http://goo.gl/MqrFmX\u000a");
}
if (!config.longStackTraces && longStackTracesIsSupported()) {
var Promise_captureStackTrace = Promise.prototype._captureStackTrace;
var Promise_attachExtraTrace = Promise.prototype._attachExtraTrace;
config.longStackTraces = true;
disableLongStackTraces = function() {
if (async.haveItemsQueued() && !config.longStackTraces) {
throw new Error("cannot enable long stack traces after promises have been created\u000a\u000a See http://goo.gl/MqrFmX\u000a");
}
Promise.prototype._captureStackTrace = Promise_captureStackTrace;
Promise.prototype._attachExtraTrace = Promise_attachExtraTrace;
Context.deactivateLongStackTraces();
async.enableTrampoline();
config.longStackTraces = false;
};
Promise.prototype._captureStackTrace = longStackTracesCaptureStackTrace;
Promise.prototype._attachExtraTrace = longStackTracesAttachExtraTrace;
Context.activateLongStackTraces();
async.disableTrampolineIfNecessary();
}
};

Promise.hasLongStackTraces = function () {
return config.longStackTraces && longStackTracesIsSupported();
};

var fireDomEvent = (function() {
try {
if (typeof CustomEvent === "function") {
var event = new CustomEvent("CustomEvent");
util.global.dispatchEvent(event);
return function(name, event) {
var domEvent = new CustomEvent(name.toLowerCase(), {
detail: event,
cancelable: true
});
return !util.global.dispatchEvent(domEvent);
};
} else if (typeof Event === "function") {
var event = new Event("CustomEvent");
util.global.dispatchEvent(event);
return function(name, event) {
var domEvent = new Event(name.toLowerCase(), {
cancelable: true
});
domEvent.detail = event;
return !util.global.dispatchEvent(domEvent);
};
} else {
var event = document.createEvent("CustomEvent");
event.initCustomEvent("testingtheevent", false, true, {});
util.global.dispatchEvent(event);
return function(name, event) {
var domEvent = document.createEvent("CustomEvent");
domEvent.initCustomEvent(name.toLowerCase(), false, true,
event);
return !util.global.dispatchEvent(domEvent);
};
}
} catch (e) {}
return function() {
return false;
};
})();

var fireGlobalEvent = (function() {
if (util.isNode) {
return function() {
return process.emit.apply(process, arguments);
};
} else {
if (!util.global) {
return function() {
return false;
};
}
return function(name) {
var methodName = "on" + name.toLowerCase();
var method = util.global[methodName];
if (!method) return false;
method.apply(util.global, [].slice.call(arguments, 1));
return true;
};
}
})();

function generatePromiseLifecycleEventObject(name, promise) {
return {promise: promise};
}

var eventToObjectGenerator = {
promiseCreated: generatePromiseLifecycleEventObject,
promiseFulfilled: generatePromiseLifecycleEventObject,
promiseRejected: generatePromiseLifecycleEventObject,
promiseResolved: generatePromiseLifecycleEventObject,
promiseCancelled: generatePromiseLifecycleEventObject,
promiseChained: function(name, promise, child) {
return {promise: promise, child: child};
},
warning: function(name, warning) {
return {warning: warning};
},
unhandledRejection: function (name, reason, promise) {
return {reason: reason, promise: promise};
},
rejectionHandled: generatePromiseLifecycleEventObject
};

var activeFireEvent = function (name) {
var globalEventFired = false;
try {
globalEventFired = fireGlobalEvent.apply(null, arguments);
} catch (e) {
async.throwLater(e);
globalEventFired = true;
}

var domEventFired = false;
try {
    domEventFired = fireDomEvent(name,
                eventToObjectGenerator[name].apply(null, arguments));
} catch (e) {
    async.throwLater(e);
    domEventFired = true;
}

return domEventFired || globalEventFired;

};

Promise.config = function(opts) {
opts = Object(opts);
if ("longStackTraces" in opts) {
if (opts.longStackTraces) {
Promise.longStackTraces();
} else if (!opts.longStackTraces && Promise.hasLongStackTraces()) {
disableLongStackTraces();
}
}
if ("warnings" in opts) {
var warningsOption = opts.warnings;
config.warnings = !!warningsOption;
wForgottenReturn = config.warnings;

    if (util.isObject(warningsOption)) {
        if ("wForgottenReturn" in warningsOption) {
            wForgottenReturn = !!warningsOption.wForgottenReturn;
        }
    }
}
if ("cancellation" in opts && opts.cancellation && !config.cancellation) {
    if (async.haveItemsQueued()) {
        throw new Error(
            "cannot enable cancellation after promises are in use");
    }
    Promise.prototype._clearCancellationData =
        cancellationClearCancellationData;
    Promise.prototype._propagateFrom = cancellationPropagateFrom;
    Promise.prototype._onCancel = cancellationOnCancel;
    Promise.prototype._setOnCancel = cancellationSetOnCancel;
    Promise.prototype._attachCancellationCallback =
        cancellationAttachCancellationCallback;
    Promise.prototype._execute = cancellationExecute;
    propagateFromFunction = cancellationPropagateFrom;
    config.cancellation = true;
}
if ("monitoring" in opts) {
    if (opts.monitoring && !config.monitoring) {
        config.monitoring = true;
        Promise.prototype._fireEvent = activeFireEvent;
    } else if (!opts.monitoring && config.monitoring) {
        config.monitoring = false;
        Promise.prototype._fireEvent = defaultFireEvent;
    }
}
return Promise;

};

function defaultFireEvent() { return false; }

Promise.prototype._fireEvent = defaultFireEvent;
Promise.prototype._execute = function(executor, resolve, reject) {
try {
executor(resolve, reject);
} catch (e) {
return e;
}
};
Promise.prototype._onCancel = function () {};
Promise.prototype._setOnCancel = function (handler) { ; };
Promise.prototype._attachCancellationCallback = function(onCancel) {
;
};
Promise.prototype._captureStackTrace = function () {};
Promise.prototype._attachExtraTrace = function () {};
Promise.prototype._clearCancellationData = function() {};
Promise.prototype._propagateFrom = function (parent, flags) {
;
;
};

function cancellationExecute(executor, resolve, reject) {
var promise = this;
try {
executor(resolve, reject, function(onCancel) {
if (typeof onCancel !== "function") {
throw new TypeError("onCancel must be a function, got: " +
util.toString(onCancel));
}
promise._attachCancellationCallback(onCancel);
});
} catch (e) {
return e;
}
}

function cancellationAttachCancellationCallback(onCancel) {
if (!this._isCancellable()) return this;

var previousOnCancel = this._onCancel();
if (previousOnCancel !== undefined) {
    if (util.isArray(previousOnCancel)) {
        previousOnCancel.push(onCancel);
    } else {
        this._setOnCancel([previousOnCancel, onCancel]);
    }
} else {
    this._setOnCancel(onCancel);
}

}

function cancellationOnCancel() {
return this._onCancelField;
}

function cancellationSetOnCancel(onCancel) {
this._onCancelField = onCancel;
}

function cancellationClearCancellationData() {
this._cancellationParent = undefined;
this._onCancelField = undefined;
}

function cancellationPropagateFrom(parent, flags) {
if ((flags & 1) !== 0) {
this._cancellationParent = parent;
var branchesRemainingToCancel = parent._branchesRemainingToCancel;
if (branchesRemainingToCancel === undefined) {
branchesRemainingToCancel = 0;
}
parent._branchesRemainingToCancel = branchesRemainingToCancel + 1;
}
if ((flags & 2) !== 0 && parent._isBound()) {
this._setBoundTo(parent._boundTo);
}
}

function bindingPropagateFrom(parent, flags) {
if ((flags & 2) !== 0 && parent._isBound()) {
this._setBoundTo(parent._boundTo);
}
}
var propagateFromFunction = bindingPropagateFrom;

function boundValueFunction() {
var ret = this._boundTo;
if (ret !== undefined) {
if (ret instanceof Promise) {
if (ret.isFulfilled()) {
return ret.value();
} else {
return undefined;
}
}
}
return ret;
}

function longStackTracesCaptureStackTrace() {
this._trace = new CapturedTrace(this._peekContext());
}

function longStackTracesAttachExtraTrace(error, ignoreSelf) {
if (canAttachTrace(error)) {
var trace = this._trace;
if (trace !== undefined) {
if (ignoreSelf) trace = trace._parent;
}
if (trace !== undefined) {
trace.attachExtraTrace(error);
} else if (!error.stackCleaned) {
var parsed = parseStackAndMessage(error);
util.notEnumerableProp(error, "stack",
parsed.message + "\n" + parsed.stack.join("\n"));
util.notEnumerableProp(error, "stackCleaned", true);
}
}
}

function checkForgottenReturns(returnValue, promiseCreated, name, promise,
parent) {
if (returnValue === undefined && promiseCreated !== null &&
wForgottenReturn) {
if (parent !== undefined && parent._returnedNonUndefined()) return;
if ((promise._bitField & 65535) === 0) return;

    if (name) name = name + " ";
    var handlerLine = "";
    var creatorLine = "";
    if (promiseCreated._trace) {
        var traceLines = promiseCreated._trace.stack.split("\n");
        var stack = cleanStack(traceLines);
        for (var i = stack.length - 1; i >= 0; --i) {
            var line = stack[i];
            if (!nodeFramePattern.test(line)) {
                var lineMatches = line.match(parseLinePattern);
                if (lineMatches) {
                    handlerLine  = "at " + lineMatches[1] +
                        ":" + lineMatches[2] + ":" + lineMatches[3] + " ";
                }
                break;
            }
        }

        if (stack.length > 0) {
            var firstUserLine = stack[0];
            for (var i = 0; i < traceLines.length; ++i) {

                if (traceLines[i] === firstUserLine) {
                    if (i > 0) {
                        creatorLine = "\n" + traceLines[i - 1];
                    }
                    break;
                }
            }

        }
    }
    var msg = "a promise was created in a " + name +
        "handler " + handlerLine + "but was not returned from it, " +
        "see http://goo.gl/rRqMUw" +
        creatorLine;
    promise._warn(msg, true, promiseCreated);
}

}

function deprecated(name, replacement) {
var message = name +
" is deprecated and will be removed in a future version.";
if (replacement) message += " Use " + replacement + " instead.";
return warn(message);
}

function warn(message, shouldUseOwnTrace, promise) {
if (!config.warnings) return;
var warning = new Warning(message);
var ctx;
if (shouldUseOwnTrace) {
promise._attachExtraTrace(warning);
} else if (config.longStackTraces && (ctx = Promise._peekContext())) {
ctx.attachExtraTrace(warning);
} else {
var parsed = parseStackAndMessage(warning);
warning.stack = parsed.message + "\n" + parsed.stack.join("\n");
}

if (!activeFireEvent("warning", warning)) {
    formatAndLogError(warning, "", true);
}

}

function reconstructStack(message, stacks) {
for (var i = 0; i < stacks.length - 1; ++i) {
stacks[i].push("From previous event:");
stacks[i] = stacks[i].join("\n");
}
if (i < stacks.length) {
stacks[i] = stacks[i].join("\n");
}
return message + "\n" + stacks.join("\n");
}

function removeDuplicateOrEmptyJumps(stacks) {
for (var i = 0; i < stacks.length; ++i) {
if (stacks[i].length === 0 ||
((i + 1 < stacks.length) && stacks[i][0] === stacks[i+1][0])) {
stacks.splice(i, 1);
i--;
}
}
}

function removeCommonRoots(stacks) {
var current = stacks[0];
for (var i = 1; i < stacks.length; ++i) {
var prev = stacks[i];
var currentLastIndex = current.length - 1;
var currentLastLine = current[currentLastIndex];
var commonRootMeetPoint = -1;

    for (var j = prev.length - 1; j >= 0; --j) {
        if (prev[j] === currentLastLine) {
            commonRootMeetPoint = j;
            break;
        }
    }

    for (var j = commonRootMeetPoint; j >= 0; --j) {
        var line = prev[j];
        if (current[currentLastIndex] === line) {
            current.pop();
            currentLastIndex--;
        } else {
            break;
        }
    }
    current = prev;
}

}

function cleanStack(stack) {
var ret = [];
for (var i = 0; i < stack.length; ++i) {
var line = stack[i];
var isTraceLine = " (No stack trace)" === line ||
stackFramePattern.test(line);
var isInternalFrame = isTraceLine && shouldIgnore(line);
if (isTraceLine && !isInternalFrame) {
if (indentStackFrames && line.charAt(0) !== " ") {
line = " " + line;
}
ret.push(line);
}
}
return ret;
}

function stackFramesAsArray(error) {
var stack = error.stack.replace(/\s+$/g, "").split("\n");
for (var i = 0; i < stack.length; ++i) {
var line = stack[i];
if (" (No stack trace)" === line || stackFramePattern.test(line)) {
break;
}
}
if (i > 0 && error.name != "SyntaxError") {
stack = stack.slice(i);
}
return stack;
}

function parseStackAndMessage(error) {
var stack = error.stack;
var message = error.toString();
stack = typeof stack === "string" && stack.length > 0
? stackFramesAsArray(error) : [" (No stack trace)"];
return {
message: message,
stack: error.name == "SyntaxError" ? stack : cleanStack(stack)
};
}

function formatAndLogError(error, title, isSoft) {
if (typeof console !== "undefined") {
var message;
if (util.isObject(error)) {
var stack = error.stack;
message = title + formatStack(stack, error);
} else {
message = title + String(error);
}
if (typeof printWarning === "function") {
printWarning(message, isSoft);
} else if (typeof console.log === "function" ||
typeof console.log === "object") {
console.log(message);
}
}
}

function fireRejectionEvent(name, localHandler, reason, promise) {
var localEventFired = false;
try {
if (typeof localHandler === "function") {
localEventFired = true;
if (name === "rejectionHandled") {
localHandler(promise);
} else {
localHandler(reason, promise);
}
}
} catch (e) {
async.throwLater(e);
}

if (name === "unhandledRejection") {
    if (!activeFireEvent(name, reason, promise) && !localEventFired) {
        formatAndLogError(reason, "Unhandled rejection ");
    }
} else {
    activeFireEvent(name, promise);
}

}

function formatNonError(obj) {
var str;
if (typeof obj === "function") {
str = "[function " +
(obj.name || "anonymous") +
"]";
} else {
str = obj && typeof obj.toString === "function"
? obj.toString() : util.toString(obj);
var ruselessToString = /[object [a-zA-Z0-9$_]+]/;
if (ruselessToString.test(str)) {
try {
var newStr = JSON.stringify(obj);
str = newStr;
}
catch(e) {

        }
    }
    if (str.length === 0) {
        str = "(empty array)";
    }
}
return ("(<" + snip(str) + ">, no stack trace)");

}

function snip(str) {
var maxChars = 41;
if (str.length < maxChars) {
return str;
}
return str.substr(0, maxChars - 3) + "...";
}

function longStackTracesIsSupported() {
return typeof captureStackTrace === "function";
}

var shouldIgnore = function() { return false; };
var parseLineInfoRegex = //<(:(\d+):(?:\d+))?\s*$/;
function parseLineInfo(line) {
var matches = line.match(parseLineInfoRegex);
if (matches) {
return {
fileName: matches[1],
line: parseInt(matches[2], 10)
};
}
}

function setBounds(firstLineError, lastLineError) {
if (!longStackTracesIsSupported()) return;
var firstStackLines = firstLineError.stack.split("\n");
var lastStackLines = lastLineError.stack.split("\n");
var firstIndex = -1;
var lastIndex = -1;
var firstFileName;
var lastFileName;
for (var i = 0; i < firstStackLines.length; ++i) {
var result = parseLineInfo(firstStackLines[i]);
if (result) {
firstFileName = result.fileName;
firstIndex = result.line;
break;
}
}
for (var i = 0; i < lastStackLines.length; ++i) {
var result = parseLineInfo(lastStackLines[i]);
if (result) {
lastFileName = result.fileName;
lastIndex = result.line;
break;
}
}
if (firstIndex < 0 || lastIndex < 0 || !firstFileName || !lastFileName ||
firstFileName !== lastFileName || firstIndex >= lastIndex) {
return;
}

shouldIgnore = function(line) {
    if (bluebirdFramePattern.test(line)) return true;
    var info = parseLineInfo(line);
    if (info) {
        if (info.fileName === firstFileName &&
            (firstIndex <= info.line && info.line <= lastIndex)) {
            return true;
        }
    }
    return false;
};

}

function CapturedTrace(parent) {
this._parent = parent;
this._promisesCreated = 0;
var length = this._length = 1 + (parent === undefined ? 0 : parent._length);
captureStackTrace(this, CapturedTrace);
if (length > 32) this.uncycle();
}
util.inherits(CapturedTrace, Error);
Context.CapturedTrace = CapturedTrace;

CapturedTrace.prototype.uncycle = function() {
var length = this._length;
if (length < 2) return;
var nodes = [];
var stackToIndex = {};

for (var i = 0, node = this; node !== undefined; ++i) {
    nodes.push(node);
    node = node._parent;
}
length = this._length = i;
for (var i = length - 1; i >= 0; --i) {
    var stack = nodes[i].stack;
    if (stackToIndex[stack] === undefined) {
        stackToIndex[stack] = i;
    }
}
for (var i = 0; i < length; ++i) {
    var currentStack = nodes[i].stack;
    var index = stackToIndex[currentStack];
    if (index !== undefined && index !== i) {
        if (index > 0) {
            nodes[index - 1]._parent = undefined;
            nodes[index - 1]._length = 1;
        }
        nodes[i]._parent = undefined;
        nodes[i]._length = 1;
        var cycleEdgeNode = i > 0 ? nodes[i - 1] : this;

        if (index < length - 1) {
            cycleEdgeNode._parent = nodes[index + 1];
            cycleEdgeNode._parent.uncycle();
            cycleEdgeNode._length =
                cycleEdgeNode._parent._length + 1;
        } else {
            cycleEdgeNode._parent = undefined;
            cycleEdgeNode._length = 1;
        }
        var currentChildLength = cycleEdgeNode._length + 1;
        for (var j = i - 2; j >= 0; --j) {
            nodes[j]._length = currentChildLength;
            currentChildLength++;
        }
        return;
    }
}

};

CapturedTrace.prototype.attachExtraTrace = function(error) {
if (error.stackCleaned) return;
this.uncycle();
var parsed = parseStackAndMessage(error);
var message = parsed.message;
var stacks = [parsed.stack];

var trace = this;
while (trace !== undefined) {
    stacks.push(cleanStack(trace.stack.split("\n")));
    trace = trace._parent;
}
removeCommonRoots(stacks);
removeDuplicateOrEmptyJumps(stacks);
util.notEnumerableProp(error, "stack", reconstructStack(message, stacks));
util.notEnumerableProp(error, "__stackCleaned__", true);

};

var captureStackTrace = (function stackDetection() {
var v8stackFramePattern = /^\sat\s/;
var v8stackFormatter = function(stack, error) {
if (typeof stack === "string") return stack;

    if (error.name !== undefined &&
        error.message !== undefined) {
        return error.toString();
    }
    return formatNonError(error);
};

if (typeof Error.stackTraceLimit === "number" &&
    typeof Error.captureStackTrace === "function") {
    Error.stackTraceLimit += 6;
    stackFramePattern = v8stackFramePattern;
    formatStack = v8stackFormatter;
    var captureStackTrace = Error.captureStackTrace;

    shouldIgnore = function(line) {
        return bluebirdFramePattern.test(line);
    };
    return function(receiver, ignoreUntil) {
        Error.stackTraceLimit += 6;
        captureStackTrace(receiver, ignoreUntil);
        Error.stackTraceLimit -= 6;
    };
}
var err = new Error();

if (typeof err.stack === "string" &&
    err.stack.split("\n")[0].indexOf("stackDetection@") >= 0) {
    stackFramePattern = /@/;
    formatStack = v8stackFormatter;
    indentStackFrames = true;
    return function captureStackTrace(o) {
        o.stack = new Error().stack;
    };
}

var hasStackAfterThrow;
try { throw new Error(); }
catch(e) {
    hasStackAfterThrow = ("stack" in e);
}
if (!("stack" in err) && hasStackAfterThrow &&
    typeof Error.stackTraceLimit === "number") {
    stackFramePattern = v8stackFramePattern;
    formatStack = v8stackFormatter;
    return function captureStackTrace(o) {
        Error.stackTraceLimit += 6;
        try { throw new Error(); }
        catch(e) { o.stack = e.stack; }
        Error.stackTraceLimit -= 6;
    };
}

formatStack = function(stack, error) {
    if (typeof stack === "string") return stack;

    if ((typeof error === "object" ||
        typeof error === "function") &&
        error.name !== undefined &&
        error.message !== undefined) {
        return error.toString();
    }
    return formatNonError(error);
};

return null;

})([]);

if (typeof console !== "undefined" && typeof console.warn !== "undefined") {
printWarning = function (message) {
console.warn(message);
};
if (util.isNode && process.stderr.isTTY) {
printWarning = function(message, isSoft) {
var color = isSoft ? "\u001b[33m" : "\u001b[31m";
console.warn(color + message + "\u001b[0m\n");
};
} else if (!util.isNode && typeof (new Error().stack) === "string") {
printWarning = function(message, isSoft) {
console.warn("%c" + message,
isSoft ? "color: darkorange" : "color: red");
};
}
}

var config = {
warnings: warnings,
longStackTraces: false,
cancellation: false,
monitoring: false
};

if (longStackTraces) Promise.longStackTraces();

return {
longStackTraces: function() {
return config.longStackTraces;
},
warnings: function() {
return config.warnings;
},
cancellation: function() {
return config.cancellation;
},
monitoring: function() {
return config.monitoring;
},
propagateFromFunction: function() {
return propagateFromFunction;
},
boundValueFunction: function() {
return boundValueFunction;
},
checkForgottenReturns: checkForgottenReturns,
setBounds: setBounds,
warn: warn,
deprecated: deprecated,
CapturedTrace: CapturedTrace,
fireDomEvent: fireDomEvent,
fireGlobalEvent: fireGlobalEvent
};
};

},{"./errors":12,"./util":36}],10:[function(dereq,module,exports){
"use strict";
module.exports = function(Promise) {
function returner() {
return this.value;
}
function thrower() {
throw this.reason;
}

Promise.prototype["return"] =
Promise.prototype.thenReturn = function (value) {
if (value instanceof Promise) value.suppressUnhandledRejections();
return this._then(
returner, undefined, undefined, {value: value}, undefined);
};

Promise.prototype["throw"] =
Promise.prototype.thenThrow = function (reason) {
return this._then(
thrower, undefined, undefined, {reason: reason}, undefined);
};

Promise.prototype.catchThrow = function (reason) {
if (arguments.length <= 1) {
return this._then(
undefined, thrower, undefined, {reason: reason}, undefined);
} else {
var _reason = arguments[1];
var handler = function() {throw _reason;};
return this.caught(reason, handler);
}
};

Promise.prototype.catchReturn = function (value) {
if (arguments.length <= 1) {
if (value instanceof Promise) value.suppressUnhandledRejections();
return this._then(
undefined, returner, undefined, {value: value}, undefined);
} else {
var _value = arguments[1];
if (_value instanceof Promise) _value.suppressUnhandledRejections();
var handler = function() {return _value;};
return this.caught(value, handler);
}
};
};

},{}],11:[function(dereq,module,exports){
"use strict";
module.exports = function(Promise, INTERNAL) {
var PromiseReduce = Promise.reduce;
var PromiseAll = Promise.all;

function promiseAllThis() {
return PromiseAll(this);
}

function PromiseMapSeries(promises, fn) {
return PromiseReduce(promises, fn, INTERNAL, INTERNAL);
}

Promise.prototype.each = function (fn) {
return PromiseReduce(this, fn, INTERNAL, 0)
._then(promiseAllThis, undefined, undefined, this, undefined);
};

Promise.prototype.mapSeries = function (fn) {
return PromiseReduce(this, fn, INTERNAL, INTERNAL);
};

Promise.each = function (promises, fn) {
return PromiseReduce(promises, fn, INTERNAL, 0)
._then(promiseAllThis, undefined, undefined, promises, undefined);
};

Promise.mapSeries = PromiseMapSeries;
};

},{}],12:[function(dereq,module,exports){
"use strict";
var es5 = dereq("./es5");
var Objectfreeze = es5.freeze;
var util = dereq("./util");
var inherits = util.inherits;
var notEnumerableProp = util.notEnumerableProp;

function subError(nameProperty, defaultMessage) {
function SubError(message) {
if (!(this instanceof SubError)) return new SubError(message);
notEnumerableProp(this, "message",
typeof message === "string" ? message : defaultMessage);
notEnumerableProp(this, "name", nameProperty);
if (Error.captureStackTrace) {
Error.captureStackTrace(this, this.constructor);
} else {
Error.call(this);
}
}
inherits(SubError, Error);
return SubError;
}

var _TypeError, _RangeError;
var Warning = subError("Warning", "warning");
var CancellationError = subError("CancellationError", "cancellation error");
var TimeoutError = subError("TimeoutError", "timeout error");
var AggregateError = subError("AggregateError", "aggregate error");
try {
_TypeError = TypeError;
_RangeError = RangeError;
} catch(e) {
_TypeError = subError("TypeError", "type error");
_RangeError = subError("RangeError", "range error");
}

var methods = ("join pop push shift unshift slice filter forEach some " +
"every map indexOf lastIndexOf reduce reduceRight sort reverse").split(" ");

for (var i = 0; i < methods.length; ++i) {
if (typeof Array.prototype[methods[i]] === "function") {
AggregateError.prototype[methods[i]] = Array.prototype[methods[i]];
}
}

es5.defineProperty(AggregateError.prototype, "length", {
value: 0,
configurable: false,
writable: true,
enumerable: true
});
AggregateError.prototype["isOperational"] = true;
var level = 0;
AggregateError.prototype.toString = function() {
var indent = Array(level * 4 + 1).join(" ");
var ret = "\n" + indent + "AggregateError of:" + "\n";
level++;
indent = Array(level * 4 + 1).join(" ");
for (var i = 0; i < this.length; ++i) {
var str = this[i] === this ? "[Circular AggregateError]" : this[i] + "";
var lines = str.split("\n");
for (var j = 0; j < lines.length; ++j) {
lines[j] = indent + lines[j];
}
str = lines.join("\n");
ret += str + "\n";
}
level--;
return ret;
};

function OperationalError(message) {
if (!(this instanceof OperationalError))
return new OperationalError(message);
notEnumerableProp(this, "name", "OperationalError");
notEnumerableProp(this, "message", message);
this.cause = message;
this["isOperational"] = true;

if (message instanceof Error) {
    notEnumerableProp(this, "message", message.message);
    notEnumerableProp(this, "stack", message.stack);
} else if (Error.captureStackTrace) {
    Error.captureStackTrace(this, this.constructor);
}

}
inherits(OperationalError, Error);

var errorTypes = Error["BluebirdErrorTypes"];
if (!errorTypes) {
errorTypes = Objectfreeze({
CancellationError: CancellationError,
TimeoutError: TimeoutError,
OperationalError: OperationalError,
RejectionError: OperationalError,
AggregateError: AggregateError
});
es5.defineProperty(Error, "BluebirdErrorTypes", {
value: errorTypes,
writable: false,
enumerable: false,
configurable: false
});
}

module.exports = {
Error: Error,
TypeError: _TypeError,
RangeError: _RangeError,
CancellationError: errorTypes.CancellationError,
OperationalError: errorTypes.OperationalError,
TimeoutError: errorTypes.TimeoutError,
AggregateError: errorTypes.AggregateError,
Warning: Warning
};

},{"./es5":13,"./util":36}],13:[function(dereq,module,exports){
var isES5 = (function(){
"use strict";
return this === undefined;
})();

if (isES5) {
module.exports = {
freeze: Object.freeze,
defineProperty: Object.defineProperty,
getDescriptor: Object.getOwnPropertyDescriptor,
keys: Object.keys,
names: Object.getOwnPropertyNames,
getPrototypeOf: Object.getPrototypeOf,
isArray: Array.isArray,
isES5: isES5,
propertyIsWritable: function(obj, prop) {
var descriptor = Object.getOwnPropertyDescriptor(obj, prop);
return !!(!descriptor || descriptor.writable || descriptor.set);
}
};
} else {
var has = {}.hasOwnProperty;
var str = {}.toString;
var proto = {}.constructor.prototype;

var ObjectKeys = function (o) {
    var ret = [];
    for (var key in o) {
        if (has.call(o, key)) {
            ret.push(key);
        }
    }
    return ret;
};

var ObjectGetDescriptor = function(o, key) {
    return {value: o[key]};
};

var ObjectDefineProperty = function (o, key, desc) {
    o[key] = desc.value;
    return o;
};

var ObjectFreeze = function (obj) {
    return obj;
};

var ObjectGetPrototypeOf = function (obj) {
    try {
        return Object(obj).constructor.prototype;
    }
    catch (e) {
        return proto;
    }
};

var ArrayIsArray = function (obj) {
    try {
        return str.call(obj) === "[object Array]";
    }
    catch(e) {
        return false;
    }
};

module.exports = {
    isArray: ArrayIsArray,
    keys: ObjectKeys,
    names: ObjectKeys,
    defineProperty: ObjectDefineProperty,
    getDescriptor: ObjectGetDescriptor,
    freeze: ObjectFreeze,
    getPrototypeOf: ObjectGetPrototypeOf,
    isES5: isES5,
    propertyIsWritable: function() {
        return true;
    }
};

}

},{}],14:[function(dereq,module,exports){
"use strict";
module.exports = function(Promise, INTERNAL) {
var PromiseMap = Promise.map;

Promise.prototype.filter = function (fn, options) {
return PromiseMap(this, fn, options, INTERNAL);
};

Promise.filter = function (promises, fn, options) {
return PromiseMap(promises, fn, options, INTERNAL);
};
};

},{}],15:[function(dereq,module,exports){
"use strict";
module.exports = function(Promise, tryConvertToPromise, NEXT_FILTER) {
var util = dereq("./util");
var CancellationError = Promise.CancellationError;
var errorObj = util.errorObj;
var catchFilter = dereq("./catch_filter")(NEXT_FILTER);

function PassThroughHandlerContext(promise, type, handler) {
this.promise = promise;
this.type = type;
this.handler = handler;
this.called = false;
this.cancelPromise = null;
}

PassThroughHandlerContext.prototype.isFinallyHandler = function() {
return this.type === 0;
};

function FinallyHandlerCancelReaction(finallyHandler) {
this.finallyHandler = finallyHandler;
}

FinallyHandlerCancelReaction.prototype._resultCancelled = function() {
checkCancel(this.finallyHandler);
};

function checkCancel(ctx, reason) {
if (ctx.cancelPromise != null) {
if (arguments.length > 1) {
ctx.cancelPromise._reject(reason);
} else {
ctx.cancelPromise._cancel();
}
ctx.cancelPromise = null;
return true;
}
return false;
}

function succeed() {
return finallyHandler.call(this, this.promise._target()._settledValue());
}
function fail(reason) {
if (checkCancel(this, reason)) return;
errorObj.e = reason;
return errorObj;
}
function finallyHandler(reasonOrValue) {
var promise = this.promise;
var handler = this.handler;

if (!this.called) {
    this.called = true;
    var ret = this.isFinallyHandler()
        ? handler.call(promise._boundValue())
        : handler.call(promise._boundValue(), reasonOrValue);
    if (ret === NEXT_FILTER) {
        return ret;
    } else if (ret !== undefined) {
        promise._setReturnedNonUndefined();
        var maybePromise = tryConvertToPromise(ret, promise);
        if (maybePromise instanceof Promise) {
            if (this.cancelPromise != null) {
                if (maybePromise._isCancelled()) {
                    var reason =
                        new CancellationError("late cancellation observer");
                    promise._attachExtraTrace(reason);
                    errorObj.e = reason;
                    return errorObj;
                } else if (maybePromise.isPending()) {
                    maybePromise._attachCancellationCallback(
                        new FinallyHandlerCancelReaction(this));
                }
            }
            return maybePromise._then(
                succeed, fail, undefined, this, undefined);
        }
    }
}

if (promise.isRejected()) {
    checkCancel(this);
    errorObj.e = reasonOrValue;
    return errorObj;
} else {
    checkCancel(this);
    return reasonOrValue;
}

}

Promise.prototype._passThrough = function(handler, type, success, fail) {
if (typeof handler !== "function") return this.then();
return this._then(success,
fail,
undefined,
new PassThroughHandlerContext(this, type, handler),
undefined);
};

Promise.prototype.lastly =
Promise.prototype["finally"] = function (handler) {
return this._passThrough(handler,
0,
finallyHandler,
finallyHandler);
};

Promise.prototype.tap = function (handler) {
return this._passThrough(handler, 1, finallyHandler);
};

Promise.prototype.tapCatch = function (handlerOrPredicate) {
var len = arguments.length;
if(len === 1) {
return this._passThrough(handlerOrPredicate,
1,
undefined,
finallyHandler);
} else {
var catchInstances = new Array(len - 1),
j = 0, i;
for (i = 0; i < len - 1; ++i) {
var item = arguments[i];
if (util.isObject(item)) {
catchInstances[j++] = item;
} else {
return Promise.reject(new TypeError(
"tapCatch statement predicate: "
+ "expecting an object but got " + util.classString(item)
));
}
}
catchInstances.length = j;
var handler = arguments[i];
return this._passThrough(catchFilter(catchInstances, handler, this),
1,
undefined,
finallyHandler);
}

};

return PassThroughHandlerContext;
};

},{"./catch_filter":7,"./util":36}],16:[function(dereq,module,exports){
"use strict";
module.exports = function(Promise,
apiRejection,
INTERNAL,
tryConvertToPromise,
Proxyable,
debug) {
var errors = dereq("./errors");
var TypeError = errors.TypeError;
var util = dereq("./util");
var errorObj = util.errorObj;
var tryCatch = util.tryCatch;
var yieldHandlers = [];

function promiseFromYieldHandler(value, yieldHandlers, traceParent) {
for (var i = 0; i < yieldHandlers.length; ++i) {
traceParent._pushContext();
var result = tryCatch(yieldHandlers[i])(value);
traceParent._popContext();
if (result === errorObj) {
traceParent._pushContext();
var ret = Promise.reject(errorObj.e);
traceParent._popContext();
return ret;
}
var maybePromise = tryConvertToPromise(result, traceParent);
if (maybePromise instanceof Promise) return maybePromise;
}
return null;
}

function PromiseSpawn(generatorFunction, receiver, yieldHandler, stack) {
if (debug.cancellation()) {
var internal = new Promise(INTERNAL);
var _finallyPromise = this._finallyPromise = new Promise(INTERNAL);
this._promise = internal.lastly(function() {
return _finallyPromise;
});
internal._captureStackTrace();
internal._setOnCancel(this);
} else {
var promise = this._promise = new Promise(INTERNAL);
promise._captureStackTrace();
}
this._stack = stack;
this._generatorFunction = generatorFunction;
this._receiver = receiver;
this._generator = undefined;
this._yieldHandlers = typeof yieldHandler === "function"
? [yieldHandler].concat(yieldHandlers)
: yieldHandlers;
this._yieldedPromise = null;
this._cancellationPhase = false;
}
util.inherits(PromiseSpawn, Proxyable);

PromiseSpawn.prototype._isResolved = function() {
return this._promise === null;
};

PromiseSpawn.prototype._cleanup = function() {
this._promise = this._generator = null;
if (debug.cancellation() && this._finallyPromise !== null) {
this._finallyPromise._fulfill();
this._finallyPromise = null;
}
};

PromiseSpawn.prototype._promiseCancelled = function() {
if (this._isResolved()) return;
var implementsReturn = typeof this._generator["return"] !== "undefined";

var result;
if (!implementsReturn) {
    var reason = new Promise.CancellationError(
        "generator .return() sentinel");
    Promise.coroutine.returnSentinel = reason;
    this._promise._attachExtraTrace(reason);
    this._promise._pushContext();
    result = tryCatch(this._generator["throw"]).call(this._generator,
                                                     reason);
    this._promise._popContext();
} else {
    this._promise._pushContext();
    result = tryCatch(this._generator["return"]).call(this._generator,
                                                      undefined);
    this._promise._popContext();
}
this._cancellationPhase = true;
this._yieldedPromise = null;
this._continue(result);

};

PromiseSpawn.prototype._promiseFulfilled = function(value) {
this._yieldedPromise = null;
this._promise._pushContext();
var result = tryCatch(this._generator.next).call(this._generator, value);
this._promise._popContext();
this._continue(result);
};

PromiseSpawn.prototype._promiseRejected = function(reason) {
this._yieldedPromise = null;
this._promise._attachExtraTrace(reason);
this._promise._pushContext();
var result = tryCatch(this._generator["throw"])
.call(this._generator, reason);
this._promise._popContext();
this._continue(result);
};

PromiseSpawn.prototype._resultCancelled = function() {
if (this._yieldedPromise instanceof Promise) {
var promise = this._yieldedPromise;
this._yieldedPromise = null;
promise.cancel();
}
};

PromiseSpawn.prototype.promise = function () {
return this._promise;
};

PromiseSpawn.prototype._run = function () {
this._generator = this._generatorFunction.call(this._receiver);
this._receiver =
this._generatorFunction = undefined;
this._promiseFulfilled(undefined);
};

PromiseSpawn.prototype._continue = function (result) {
var promise = this._promise;
if (result === errorObj) {
this._cleanup();
if (this._cancellationPhase) {
return promise.cancel();
} else {
return promise._rejectCallback(result.e, false);
}
}

var value = result.value;
if (result.done === true) {
    this._cleanup();
    if (this._cancellationPhase) {
        return promise.cancel();
    } else {
        return promise._resolveCallback(value);
    }
} else {
    var maybePromise = tryConvertToPromise(value, this._promise);
    if (!(maybePromise instanceof Promise)) {
        maybePromise =
            promiseFromYieldHandler(maybePromise,
                                    this._yieldHandlers,
                                    this._promise);
        if (maybePromise === null) {
            this._promiseRejected(
                new TypeError(
                    "A value %s was yielded that could not be treated as a promise\u000a\u000a    See http://goo.gl/MqrFmX\u000a\u000a".replace("%s", String(value)) +
                    "From coroutine:\u000a" +
                    this._stack.split("\n").slice(1, -7).join("\n")
                )
            );
            return;
        }
    }
    maybePromise = maybePromise._target();
    var bitField = maybePromise._bitField;
    ;
    if (((bitField & 50397184) === 0)) {
        this._yieldedPromise = maybePromise;
        maybePromise._proxy(this, null);
    } else if (((bitField & 33554432) !== 0)) {
        Promise._async.invoke(
            this._promiseFulfilled, this, maybePromise._value()
        );
    } else if (((bitField & 16777216) !== 0)) {
        Promise._async.invoke(
            this._promiseRejected, this, maybePromise._reason()
        );
    } else {
        this._promiseCancelled();
    }
}

};

Promise.coroutine = function (generatorFunction, options) {
if (typeof generatorFunction !== "function") {
throw new TypeError("generatorFunction must be a function\u000a\u000a See http://goo.gl/MqrFmX\u000a");
}
var yieldHandler = Object(options).yieldHandler;
var PromiseSpawn$ = PromiseSpawn;
var stack = new Error().stack;
return function () {
var generator = generatorFunction.apply(this, arguments);
var spawn = new PromiseSpawn$(undefined, undefined, yieldHandler,
stack);
var ret = spawn.promise();
spawn._generator = generator;
spawn._promiseFulfilled(undefined);
return ret;
};
};

Promise.coroutine.addYieldHandler = function(fn) {
if (typeof fn !== "function") {
throw new TypeError("expecting a function but got " + util.classString(fn));
}
yieldHandlers.push(fn);
};

Promise.spawn = function (generatorFunction) {
debug.deprecated("Promise.spawn()", "Promise.coroutine()");
if (typeof generatorFunction !== "function") {
return apiRejection("generatorFunction must be a function\u000a\u000a See http://goo.gl/MqrFmX\u000a");
}
var spawn = new PromiseSpawn(generatorFunction, this);
var ret = spawn.promise();
spawn._run(Promise.spawn);
return ret;
};
};

},{"./errors":12,"./util":36}],17:[function(dereq,module,exports){
"use strict";
module.exports =
function(Promise, PromiseArray, tryConvertToPromise, INTERNAL, async,
getDomain) {
var util = dereq("./util");
var canEvaluate = util.canEvaluate;
var tryCatch = util.tryCatch;
var errorObj = util.errorObj;
var reject;

if (!true) {
if (canEvaluate) {
var thenCallback = function(i) {
return new Function("value", "holder", " \n
'use strict'; \n
holder.pIndex = value; \n
holder.checkFulfillment(this); \n
".replace(/Index/g, i));
};

var promiseSetter = function(i) {
    return new Function("promise", "holder", "                           \n\
        'use strict';                                                    \n\
        holder.pIndex = promise;                                         \n\
        ".replace(/Index/g, i));
};

var generateHolderClass = function(total) {
    var props = new Array(total);
    for (var i = 0; i < props.length; ++i) {
        props[i] = "this.p" + (i+1);
    }
    var assignment = props.join(" = ") + " = null;";
    var cancellationCode= "var promise;\n" + props.map(function(prop) {
        return "                                                         \n\
            promise = " + prop + ";                                      \n\
            if (promise instanceof Promise) {                            \n\
                promise.cancel();                                        \n\
            }                                                            \n\
        ";
    }).join("\n");
    var passedArguments = props.join(", ");
    var name = "Holder$" + total;


    var code = "return function(tryCatch, errorObj, Promise, async) {    \n\
        'use strict';                                                    \n\
        function [TheName](fn) {                                         \n\
            [TheProperties]                                              \n\
            this.fn = fn;                                                \n\
            this.asyncNeeded = true;                                     \n\
            this.now = 0;                                                \n\
        }                                                                \n\
                                                                         \n\
        [TheName].prototype._callFunction = function(promise) {          \n\
            promise._pushContext();                                      \n\
            var ret = tryCatch(this.fn)([ThePassedArguments]);           \n\
            promise._popContext();                                       \n\
            if (ret === errorObj) {                                      \n\
                promise._rejectCallback(ret.e, false);                   \n\
            } else {                                                     \n\
                promise._resolveCallback(ret);                           \n\
            }                                                            \n\
        };                                                               \n\
                                                                         \n\
        [TheName].prototype.checkFulfillment = function(promise) {       \n\
            var now = ++this.now;                                        \n\
            if (now === [TheTotal]) {                                    \n\
                if (this.asyncNeeded) {                                  \n\
                    async.invoke(this._callFunction, this, promise);     \n\
                } else {                                                 \n\
                    this._callFunction(promise);                         \n\
                }                                                        \n\
                                                                         \n\
            }                                                            \n\
        };                                                               \n\
                                                                         \n\
        [TheName].prototype._resultCancelled = function() {              \n\
            [CancellationCode]                                           \n\
        };                                                               \n\
                                                                         \n\
        return [TheName];                                                \n\
    }(tryCatch, errorObj, Promise, async);                               \n\
    ";

    code = code.replace(/\[TheName\]/g, name)
        .replace(/\[TheTotal\]/g, total)
        .replace(/\[ThePassedArguments\]/g, passedArguments)
        .replace(/\[TheProperties\]/g, assignment)
        .replace(/\[CancellationCode\]/g, cancellationCode);

    return new Function("tryCatch", "errorObj", "Promise", "async", code)
                       (tryCatch, errorObj, Promise, async);
};

var holderClasses = [];
var thenCallbacks = [];
var promiseSetters = [];

for (var i = 0; i < 8; ++i) {
    holderClasses.push(generateHolderClass(i + 1));
    thenCallbacks.push(thenCallback(i + 1));
    promiseSetters.push(promiseSetter(i + 1));
}

reject = function (reason) {
    this._reject(reason);
};

}}

Promise.join = function () {
var last = arguments.length - 1;
var fn;
if (last > 0 && typeof arguments[last] === "function") {
fn = arguments[last];
if (!true) {
if (last <= 8 && canEvaluate) {
var ret = new Promise(INTERNAL);
ret._captureStackTrace();
var HolderClass = holderClasses[last - 1];
var holder = new HolderClass(fn);
var callbacks = thenCallbacks;

            for (var i = 0; i < last; ++i) {
                var maybePromise = tryConvertToPromise(arguments[i], ret);
                if (maybePromise instanceof Promise) {
                    maybePromise = maybePromise._target();
                    var bitField = maybePromise._bitField;
                    ;
                    if (((bitField & 50397184) === 0)) {
                        maybePromise._then(callbacks[i], reject,
                                           undefined, ret, holder);
                        promiseSetters[i](maybePromise, holder);
                        holder.asyncNeeded = false;
                    } else if (((bitField & 33554432) !== 0)) {
                        callbacks[i].call(ret,
                                          maybePromise._value(), holder);
                    } else if (((bitField & 16777216) !== 0)) {
                        ret._reject(maybePromise._reason());
                    } else {
                        ret._cancel();
                    }
                } else {
                    callbacks[i].call(ret, maybePromise, holder);
                }
            }

            if (!ret._isFateSealed()) {
                if (holder.asyncNeeded) {
                    var domain = getDomain();
                    if (domain !== null) {
                        holder.fn = util.domainBind(domain, holder.fn);
                    }
                }
                ret._setAsyncGuaranteed();
                ret._setOnCancel(holder);
            }
            return ret;
        }
    }
}
var args = [].slice.call(arguments);;
if (fn) args.pop();
var ret = new PromiseArray(args).promise();
return fn !== undefined ? ret.spread(fn) : ret;

};

};

},{"./util":36}],18:[function(dereq,module,exports){
"use strict";
module.exports = function(Promise,
PromiseArray,
apiRejection,
tryConvertToPromise,
INTERNAL,
debug) {
var getDomain = Promise._getDomain;
var util = dereq("./util");
var tryCatch = util.tryCatch;
var errorObj = util.errorObj;
var async = Promise._async;

function MappingPromiseArray(promises, fn, limit, _filter) {
this.constructor$(promises);
this._promise._captureStackTrace();
var domain = getDomain();
this._callback = domain === null ? fn : util.domainBind(domain, fn);
this._preservedValues = _filter === INTERNAL
? new Array(this.length())
: null;
this._limit = limit;
this._inFlight = 0;
this._queue = [];
async.invoke(this._asyncInit, this, undefined);
}
util.inherits(MappingPromiseArray, PromiseArray);

MappingPromiseArray.prototype._asyncInit = function() {
this._init$(undefined, -2);
};

MappingPromiseArray.prototype._init = function () {};

MappingPromiseArray.prototype._promiseFulfilled = function (value, index) {
var values = this._values;
var length = this.length();
var preservedValues = this._preservedValues;
var limit = this._limit;

if (index < 0) {
    index = (index * -1) - 1;
    values[index] = value;
    if (limit >= 1) {
        this._inFlight--;
        this._drainQueue();
        if (this._isResolved()) return true;
    }
} else {
    if (limit >= 1 && this._inFlight >= limit) {
        values[index] = value;
        this._queue.push(index);
        return false;
    }
    if (preservedValues !== null) preservedValues[index] = value;

    var promise = this._promise;
    var callback = this._callback;
    var receiver = promise._boundValue();
    promise._pushContext();
    var ret = tryCatch(callback).call(receiver, value, index, length);
    var promiseCreated = promise._popContext();
    debug.checkForgottenReturns(
        ret,
        promiseCreated,
        preservedValues !== null ? "Promise.filter" : "Promise.map",
        promise
    );
    if (ret === errorObj) {
        this._reject(ret.e);
        return true;
    }

    var maybePromise = tryConvertToPromise(ret, this._promise);
    if (maybePromise instanceof Promise) {
        maybePromise = maybePromise._target();
        var bitField = maybePromise._bitField;
        ;
        if (((bitField & 50397184) === 0)) {
            if (limit >= 1) this._inFlight++;
            values[index] = maybePromise;
            maybePromise._proxy(this, (index + 1) * -1);
            return false;
        } else if (((bitField & 33554432) !== 0)) {
            ret = maybePromise._value();
        } else if (((bitField & 16777216) !== 0)) {
            this._reject(maybePromise._reason());
            return true;
        } else {
            this._cancel();
            return true;
        }
    }
    values[index] = ret;
}
var totalResolved = ++this._totalResolved;
if (totalResolved >= length) {
    if (preservedValues !== null) {
        this._filter(values, preservedValues);
    } else {
        this._resolve(values);
    }
    return true;
}
return false;

};

MappingPromiseArray.prototype._drainQueue = function () {
var queue = this._queue;
var limit = this._limit;
var values = this._values;
while (queue.length > 0 && this._inFlight < limit) {
if (this._isResolved()) return;
var index = queue.pop();
this._promiseFulfilled(values[index], index);
}
};

MappingPromiseArray.prototype._filter = function (booleans, values) {
var len = values.length;
var ret = new Array(len);
var j = 0;
for (var i = 0; i < len; ++i) {
if (booleans[i]) ret[j++] = values[i];
}
ret.length = j;
this._resolve(ret);
};

MappingPromiseArray.prototype.preservedValues = function () {
return this._preservedValues;
};

function map(promises, fn, options, _filter) {
if (typeof fn !== "function") {
return apiRejection("expecting a function but got " + util.classString(fn));
}

var limit = 0;
if (options !== undefined) {
    if (typeof options === "object" && options !== null) {
        if (typeof options.concurrency !== "number") {
            return Promise.reject(
                new TypeError("'concurrency' must be a number but it is " +
                                util.classString(options.concurrency)));
        }
        limit = options.concurrency;
    } else {
        return Promise.reject(new TypeError(
                        "options argument must be an object but it is " +
                         util.classString(options)));
    }
}
limit = typeof limit === "number" &&
    isFinite(limit) && limit >= 1 ? limit : 0;
return new MappingPromiseArray(promises, fn, limit, _filter).promise();

}

Promise.prototype.map = function (fn, options) {
return map(this, fn, options, null);
};

Promise.map = function (promises, fn, options, _filter) {
return map(promises, fn, options, _filter);
};

};

},{"./util":36}],19:[function(dereq,module,exports){
"use strict";
module.exports =
function(Promise, INTERNAL, tryConvertToPromise, apiRejection, debug) {
var util = dereq("./util");
var tryCatch = util.tryCatch;

Promise.method = function (fn) {
if (typeof fn !== "function") {
throw new Promise.TypeError("expecting a function but got " + util.classString(fn));
}
return function () {
var ret = new Promise(INTERNAL);
ret._captureStackTrace();
ret._pushContext();
var value = tryCatch(fn).apply(this, arguments);
var promiseCreated = ret._popContext();
debug.checkForgottenReturns(
value, promiseCreated, "Promise.method", ret);
ret._resolveFromSyncValue(value);
return ret;
};
};

Promise.attempt = Promise["try"] = function (fn) {
if (typeof fn !== "function") {
return apiRejection("expecting a function but got " + util.classString(fn));
}
var ret = new Promise(INTERNAL);
ret._captureStackTrace();
ret._pushContext();
var value;
if (arguments.length > 1) {
debug.deprecated("calling Promise.try with more than 1 argument");
var arg = arguments[1];
var ctx = arguments[2];
value = util.isArray(arg) ? tryCatch(fn).apply(ctx, arg)
: tryCatch(fn).call(ctx, arg);
} else {
value = tryCatch(fn)();
}
var promiseCreated = ret._popContext();
debug.checkForgottenReturns(
value, promiseCreated, "Promise.try", ret);
ret._resolveFromSyncValue(value);
return ret;
};

Promise.prototype._resolveFromSyncValue = function (value) {
if (value === util.errorObj) {
this._rejectCallback(value.e, false);
} else {
this._resolveCallback(value, true);
}
};
};

},{"./util":36}],20:[function(dereq,module,exports){
"use strict";
var util = dereq("./util");
var maybeWrapAsError = util.maybeWrapAsError;
var errors = dereq("./errors");
var OperationalError = errors.OperationalError;
var es5 = dereq("./es5");

function isUntypedError(obj) {
return obj instanceof Error &&
es5.getPrototypeOf(obj) === Error.prototype;
}

var rErrorKey = /^(?:name|message|stack|cause)$/;
function wrapAsOperationalError(obj) {
var ret;
if (isUntypedError(obj)) {
ret = new OperationalError(obj);
ret.name = obj.name;
ret.message = obj.message;
ret.stack = obj.stack;
var keys = es5.keys(obj);
for (var i = 0; i < keys.length; ++i) {
var key = keys[i];
if (!rErrorKey.test(key)) {
ret[key] = obj[key];
}
}
return ret;
}
util.markAsOriginatingFromRejection(obj);
return obj;
}

function nodebackForPromise(promise, multiArgs) {
return function(err, value) {
if (promise === null) return;
if (err) {
var wrapped = wrapAsOperationalError(maybeWrapAsError(err));
promise._attachExtraTrace(wrapped);
promise._reject(wrapped);
} else if (!multiArgs) {
promise._fulfill(value);
} else {
var args = [].slice.call(arguments, 1);;
promise._fulfill(args);
}
promise = null;
};
}

module.exports = nodebackForPromise;

},{"./errors":12,"./es5":13,"./util":36}],21:[function(dereq,module,exports){
"use strict";
module.exports = function(Promise) {
var util = dereq("./util");
var async = Promise._async;
var tryCatch = util.tryCatch;
var errorObj = util.errorObj;

function spreadAdapter(val, nodeback) {
var promise = this;
if (!util.isArray(val)) return successAdapter.call(promise, val, nodeback);
var ret =
tryCatch(nodeback).apply(promise._boundValue(), [null].concat(val));
if (ret === errorObj) {
async.throwLater(ret.e);
}
}

function successAdapter(val, nodeback) {
var promise = this;
var receiver = promise._boundValue();
var ret = val === undefined
? tryCatch(nodeback).call(receiver, null)
: tryCatch(nodeback).call(receiver, null, val);
if (ret === errorObj) {
async.throwLater(ret.e);
}
}
function errorAdapter(reason, nodeback) {
var promise = this;
if (!reason) {
var newReason = new Error(reason + "");
newReason.cause = reason;
reason = newReason;
}
var ret = tryCatch(nodeback).call(promise._boundValue(), reason);
if (ret === errorObj) {
async.throwLater(ret.e);
}
}

Promise.prototype.asCallback = Promise.prototype.nodeify = function (nodeback,
options) {
if (typeof nodeback == "function") {
var adapter = successAdapter;
if (options !== undefined && Object(options).spread) {
adapter = spreadAdapter;
}
this._then(
adapter,
errorAdapter,
undefined,
this,
nodeback
);
}
return this;
};
};

},{"./util":36}],22:[function(dereq,module,exports){
"use strict";
module.exports = function() {
var makeSelfResolutionError = function () {
return new TypeError("circular promise resolution chain\u000a\u000a See http://goo.gl/MqrFmX\u000a");
};
var reflectHandler = function() {
return new Promise.PromiseInspection(this._target());
};
var apiRejection = function(msg) {
return Promise.reject(new TypeError(msg));
};
function Proxyable() {}
var UNDEFINED_BINDING = {};
var util = dereq("./util");

var getDomain;
if (util.isNode) {
getDomain = function() {
var ret = process.domain;
if (ret === undefined) ret = null;
return ret;
};
} else {
getDomain = function() {
return null;
};
}
util.notEnumerableProp(Promise, "_getDomain", getDomain);

var es5 = dereq("./es5");
var Async = dereq("./async");
var async = new Async();
es5.defineProperty(Promise, "_async", {value: async});
var errors = dereq("./errors");
var TypeError = Promise.TypeError = errors.TypeError;
Promise.RangeError = errors.RangeError;
var CancellationError = Promise.CancellationError = errors.CancellationError;
Promise.TimeoutError = errors.TimeoutError;
Promise.OperationalError = errors.OperationalError;
Promise.RejectionError = errors.OperationalError;
Promise.AggregateError = errors.AggregateError;
var INTERNAL = function(){};
var APPLY = {};
var NEXT_FILTER = {};
var tryConvertToPromise = dereq("./thenables")(Promise, INTERNAL);
var PromiseArray =
dereq("./promise_array")(Promise, INTERNAL,
tryConvertToPromise, apiRejection, Proxyable);
var Context = dereq("./context")(Promise);
/jshint unused:false/
var createContext = Context.create;
var debug = dereq("./debuggability")(Promise, Context);
var CapturedTrace = debug.CapturedTrace;
var PassThroughHandlerContext =
dereq("./finally")(Promise, tryConvertToPromise, NEXT_FILTER);
var catchFilter = dereq("./catch_filter")(NEXT_FILTER);
var nodebackForPromise = dereq("./nodeback");
var errorObj = util.errorObj;
var tryCatch = util.tryCatch;
function check(self, executor) {
if (self == null || self.constructor !== Promise) {
throw new TypeError("the promise constructor cannot be invoked directly\u000a\u000a See http://goo.gl/MqrFmX\u000a");
}
if (typeof executor !== "function") {
throw new TypeError("expecting a function but got " + util.classString(executor));
}

}

function Promise(executor) {
if (executor !== INTERNAL) {
check(this, executor);
}
this._bitField = 0;
this._fulfillmentHandler0 = undefined;
this._rejectionHandler0 = undefined;
this._promise0 = undefined;
this._receiver0 = undefined;
this._resolveFromExecutor(executor);
this._promiseCreated();
this._fireEvent("promiseCreated", this);
}

Promise.prototype.toString = function () {
return "[object Promise]";
};

Promise.prototype.caught = Promise.prototype["catch"] = function (fn) {
var len = arguments.length;
if (len > 1) {
var catchInstances = new Array(len - 1),
j = 0, i;
for (i = 0; i < len - 1; ++i) {
var item = arguments[i];
if (util.isObject(item)) {
catchInstances[j++] = item;
} else {
return apiRejection("Catch statement predicate: " +
"expecting an object but got " + util.classString(item));
}
}
catchInstances.length = j;
fn = arguments[i];
return this.then(undefined, catchFilter(catchInstances, fn, this));
}
return this.then(undefined, fn);
};

Promise.prototype.reflect = function () {
return this._then(reflectHandler,
reflectHandler, undefined, this, undefined);
};

Promise.prototype.then = function (didFulfill, didReject) {
if (debug.warnings() && arguments.length > 0 &&
typeof didFulfill !== "function" &&
typeof didReject !== "function") {
var msg = ".then() only accepts functions but was passed: " +
util.classString(didFulfill);
if (arguments.length > 1) {
msg += ", " + util.classString(didReject);
}
this._warn(msg);
}
return this._then(didFulfill, didReject, undefined, undefined, undefined);
};

Promise.prototype.done = function (didFulfill, didReject) {
var promise =
this._then(didFulfill, didReject, undefined, undefined, undefined);
promise._setIsFinal();
};

Promise.prototype.spread = function (fn) {
if (typeof fn !== "function") {
return apiRejection("expecting a function but got " + util.classString(fn));
}
return this.all()._then(fn, undefined, undefined, APPLY, undefined);
};

Promise.prototype.toJSON = function () {
var ret = {
isFulfilled: false,
isRejected: false,
fulfillmentValue: undefined,
rejectionReason: undefined
};
if (this.isFulfilled()) {
ret.fulfillmentValue = this.value();
ret.isFulfilled = true;
} else if (this.isRejected()) {
ret.rejectionReason = this.reason();
ret.isRejected = true;
}
return ret;
};

Promise.prototype.all = function () {
if (arguments.length > 0) {
this._warn(".all() was passed arguments but it does not take any");
}
return new PromiseArray(this).promise();
};

Promise.prototype.error = function (fn) {
return this.caught(util.originatesFromRejection, fn);
};

Promise.getNewLibraryCopy = module.exports;

Promise.is = function (val) {
return val instanceof Promise;
};

Promise.fromNode = Promise.fromCallback = function(fn) {
var ret = new Promise(INTERNAL);
ret._captureStackTrace();
var multiArgs = arguments.length > 1 ? !!Object(arguments[1]).multiArgs
: false;
var result = tryCatch(fn)(nodebackForPromise(ret, multiArgs));
if (result === errorObj) {
ret._rejectCallback(result.e, true);
}
if (!ret._isFateSealed()) ret._setAsyncGuaranteed();
return ret;
};

Promise.all = function (promises) {
return new PromiseArray(promises).promise();
};

Promise.cast = function (obj) {
var ret = tryConvertToPromise(obj);
if (!(ret instanceof Promise)) {
ret = new Promise(INTERNAL);
ret._captureStackTrace();
ret._setFulfilled();
ret._rejectionHandler0 = obj;
}
return ret;
};

Promise.resolve = Promise.fulfilled = Promise.cast;

Promise.reject = Promise.rejected = function (reason) {
var ret = new Promise(INTERNAL);
ret._captureStackTrace();
ret._rejectCallback(reason, true);
return ret;
};

Promise.setScheduler = function(fn) {
if (typeof fn !== "function") {
throw new TypeError("expecting a function but got " + util.classString(fn));
}
return async.setScheduler(fn);
};

Promise.prototype._then = function (
didFulfill,
didReject,
_, receiver,
internalData
) {
var haveInternalData = internalData !== undefined;
var promise = haveInternalData ? internalData : new Promise(INTERNAL);
var target = this._target();
var bitField = target._bitField;

if (!haveInternalData) {
    promise._propagateFrom(this, 3);
    promise._captureStackTrace();
    if (receiver === undefined &&
        ((this._bitField & 2097152) !== 0)) {
        if (!((bitField & 50397184) === 0)) {
            receiver = this._boundValue();
        } else {
            receiver = target === this ? undefined : this._boundTo;
        }
    }
    this._fireEvent("promiseChained", this, promise);
}

var domain = getDomain();
if (!((bitField & 50397184) === 0)) {
    var handler, value, settler = target._settlePromiseCtx;
    if (((bitField & 33554432) !== 0)) {
        value = target._rejectionHandler0;
        handler = didFulfill;
    } else if (((bitField & 16777216) !== 0)) {
        value = target._fulfillmentHandler0;
        handler = didReject;
        target._unsetRejectionIsUnhandled();
    } else {
        settler = target._settlePromiseLateCancellationObserver;
        value = new CancellationError("late cancellation observer");
        target._attachExtraTrace(value);
        handler = didReject;
    }

    async.invoke(settler, target, {
        handler: domain === null ? handler
            : (typeof handler === "function" &&
                util.domainBind(domain, handler)),
        promise: promise,
        receiver: receiver,
        value: value
    });
} else {
    target._addCallbacks(didFulfill, didReject, promise, receiver, domain);
}

return promise;

};

Promise.prototype._length = function () {
return this._bitField & 65535;
};

Promise.prototype._isFateSealed = function () {
return (this._bitField & 117506048) !== 0;
};

Promise.prototype._isFollowing = function () {
return (this._bitField & 67108864) === 67108864;
};

Promise.prototype._setLength = function (len) {
this._bitField = (this._bitField & -65536) |
(len & 65535);
};

Promise.prototype._setFulfilled = function () {
this._bitField = this._bitField | 33554432;
this._fireEvent("promiseFulfilled", this);
};

Promise.prototype._setRejected = function () {
this._bitField = this._bitField | 16777216;
this._fireEvent("promiseRejected", this);
};

Promise.prototype._setFollowing = function () {
this._bitField = this._bitField | 67108864;
this._fireEvent("promiseResolved", this);
};

Promise.prototype._setIsFinal = function () {
this._bitField = this._bitField | 4194304;
};

Promise.prototype._isFinal = function () {
return (this._bitField & 4194304) > 0;
};

Promise.prototype._unsetCancelled = function() {
this._bitField = this._bitField & (~65536);
};

Promise.prototype._setCancelled = function() {
this._bitField = this._bitField | 65536;
this._fireEvent("promiseCancelled", this);
};

Promise.prototype._setWillBeCancelled = function() {
this._bitField = this._bitField | 8388608;
};

Promise.prototype._setAsyncGuaranteed = function() {
if (async.hasCustomScheduler()) return;
this._bitField = this._bitField | 134217728;
};

Promise.prototype._receiverAt = function (index) {
var ret = index === 0 ? this._receiver0 : this[
index * 4 - 4 + 3];
if (ret === UNDEFINED_BINDING) {
return undefined;
} else if (ret === undefined && this._isBound()) {
return this._boundValue();
}
return ret;
};

Promise.prototype._promiseAt = function (index) {
return this[
index * 4 - 4 + 2];
};

Promise.prototype._fulfillmentHandlerAt = function (index) {
return this[
index * 4 - 4 + 0];
};

Promise.prototype._rejectionHandlerAt = function (index) {
return this[
index * 4 - 4 + 1];
};

Promise.prototype._boundValue = function() {};

Promise.prototype._migrateCallback0 = function (follower) {
var bitField = follower._bitField;
var fulfill = follower._fulfillmentHandler0;
var reject = follower._rejectionHandler0;
var promise = follower._promise0;
var receiver = follower._receiverAt(0);
if (receiver === undefined) receiver = UNDEFINED_BINDING;
this._addCallbacks(fulfill, reject, promise, receiver, null);
};

Promise.prototype._migrateCallbackAt = function (follower, index) {
var fulfill = follower._fulfillmentHandlerAt(index);
var reject = follower._rejectionHandlerAt(index);
var promise = follower._promiseAt(index);
var receiver = follower._receiverAt(index);
if (receiver === undefined) receiver = UNDEFINED_BINDING;
this._addCallbacks(fulfill, reject, promise, receiver, null);
};

Promise.prototype._addCallbacks = function (
fulfill,
reject,
promise,
receiver,
domain
) {
var index = this._length();

if (index >= 65535 - 4) {
    index = 0;
    this._setLength(0);
}

if (index === 0) {
    this._promise0 = promise;
    this._receiver0 = receiver;
    if (typeof fulfill === "function") {
        this._fulfillmentHandler0 =
            domain === null ? fulfill : util.domainBind(domain, fulfill);
    }
    if (typeof reject === "function") {
        this._rejectionHandler0 =
            domain === null ? reject : util.domainBind(domain, reject);
    }
} else {
    var base = index * 4 - 4;
    this[base + 2] = promise;
    this[base + 3] = receiver;
    if (typeof fulfill === "function") {
        this[base + 0] =
            domain === null ? fulfill : util.domainBind(domain, fulfill);
    }
    if (typeof reject === "function") {
        this[base + 1] =
            domain === null ? reject : util.domainBind(domain, reject);
    }
}
this._setLength(index + 1);
return index;

};

Promise.prototype._proxy = function (proxyable, arg) {
this._addCallbacks(undefined, undefined, arg, proxyable, null);
};

Promise.prototype._resolveCallback = function(value, shouldBind) {
if (((this._bitField & 117506048) !== 0)) return;
if (value === this)
return this._rejectCallback(makeSelfResolutionError(), false);
var maybePromise = tryConvertToPromise(value, this);
if (!(maybePromise instanceof Promise)) return this._fulfill(value);

if (shouldBind) this._propagateFrom(maybePromise, 2);

var promise = maybePromise._target();

if (promise === this) {
    this._reject(makeSelfResolutionError());
    return;
}

var bitField = promise._bitField;
if (((bitField & 50397184) === 0)) {
    var len = this._length();
    if (len > 0) promise._migrateCallback0(this);
    for (var i = 1; i < len; ++i) {
        promise._migrateCallbackAt(this, i);
    }
    this._setFollowing();
    this._setLength(0);
    this._setFollowee(promise);
} else if (((bitField & 33554432) !== 0)) {
    this._fulfill(promise._value());
} else if (((bitField & 16777216) !== 0)) {
    this._reject(promise._reason());
} else {
    var reason = new CancellationError("late cancellation observer");
    promise._attachExtraTrace(reason);
    this._reject(reason);
}

};

Promise.prototype._rejectCallback =
function(reason, synchronous, ignoreNonErrorWarnings) {
var trace = util.ensureErrorObject(reason);
var hasStack = trace === reason;
if (!hasStack && !ignoreNonErrorWarnings && debug.warnings()) {
var message = "a promise was rejected with a non-error: " +
util.classString(reason);
this._warn(message, true);
}
this._attachExtraTrace(trace, synchronous ? hasStack : false);
this._reject(reason);
};

Promise.prototype._resolveFromExecutor = function (executor) {
if (executor === INTERNAL) return;
var promise = this;
this._captureStackTrace();
this._pushContext();
var synchronous = true;
var r = this._execute(executor, function(value) {
promise._resolveCallback(value);
}, function (reason) {
promise._rejectCallback(reason, synchronous);
});
synchronous = false;
this._popContext();

if (r !== undefined) {
    promise._rejectCallback(r, true);
}

};

Promise.prototype._settlePromiseFromHandler = function (
handler, receiver, value, promise
) {
var bitField = promise._bitField;
if (((bitField & 65536) !== 0)) return;
promise._pushContext();
var x;
if (receiver === APPLY) {
if (!value || typeof value.length !== "number") {
x = errorObj;
x.e = new TypeError("cannot .spread() a non-array: " +
util.classString(value));
} else {
x = tryCatch(handler).apply(this._boundValue(), value);
}
} else {
x = tryCatch(handler).call(receiver, value);
}
var promiseCreated = promise._popContext();
bitField = promise._bitField;
if (((bitField & 65536) !== 0)) return;

if (x === NEXT_FILTER) {
    promise._reject(value);
} else if (x === errorObj) {
    promise._rejectCallback(x.e, false);
} else {
    debug.checkForgottenReturns(x, promiseCreated, "",  promise, this);
    promise._resolveCallback(x);
}

};

Promise.prototype._target = function() {
var ret = this;
while (ret._isFollowing()) ret = ret._followee();
return ret;
};

Promise.prototype._followee = function() {
return this._rejectionHandler0;
};

Promise.prototype._setFollowee = function(promise) {
this._rejectionHandler0 = promise;
};

Promise.prototype._settlePromise = function(promise, handler, receiver, value) {
var isPromise = promise instanceof Promise;
var bitField = this._bitField;
var asyncGuaranteed = ((bitField & 134217728) !== 0);
if (((bitField & 65536) !== 0)) {
if (isPromise) promise._invokeInternalOnCancel();

    if (receiver instanceof PassThroughHandlerContext &&
        receiver.isFinallyHandler()) {
        receiver.cancelPromise = promise;
        if (tryCatch(handler).call(receiver, value) === errorObj) {
            promise._reject(errorObj.e);
        }
    } else if (handler === reflectHandler) {
        promise._fulfill(reflectHandler.call(receiver));
    } else if (receiver instanceof Proxyable) {
        receiver._promiseCancelled(promise);
    } else if (isPromise || promise instanceof PromiseArray) {
        promise._cancel();
    } else {
        receiver.cancel();
    }
} else if (typeof handler === "function") {
    if (!isPromise) {
        handler.call(receiver, value, promise);
    } else {
        if (asyncGuaranteed) promise._setAsyncGuaranteed();
        this._settlePromiseFromHandler(handler, receiver, value, promise);
    }
} else if (receiver instanceof Proxyable) {
    if (!receiver._isResolved()) {
        if (((bitField & 33554432) !== 0)) {
            receiver._promiseFulfilled(value, promise);
        } else {
            receiver._promiseRejected(value, promise);
        }
    }
} else if (isPromise) {
    if (asyncGuaranteed) promise._setAsyncGuaranteed();
    if (((bitField & 33554432) !== 0)) {
        promise._fulfill(value);
    } else {
        promise._reject(value);
    }
}

};

Promise.prototype._settlePromiseLateCancellationObserver = function(ctx) {
var handler = ctx.handler;
var promise = ctx.promise;
var receiver = ctx.receiver;
var value = ctx.value;
if (typeof handler === "function") {
if (!(promise instanceof Promise)) {
handler.call(receiver, value, promise);
} else {
this._settlePromiseFromHandler(handler, receiver, value, promise);
}
} else if (promise instanceof Promise) {
promise._reject(value);
}
};

Promise.prototype._settlePromiseCtx = function(ctx) {
this._settlePromise(ctx.promise, ctx.handler, ctx.receiver, ctx.value);
};

Promise.prototype._settlePromise0 = function(handler, value, bitField) {
var promise = this._promise0;
var receiver = this._receiverAt(0);
this._promise0 = undefined;
this._receiver0 = undefined;
this._settlePromise(promise, handler, receiver, value);
};

Promise.prototype._clearCallbackDataAtIndex = function(index) {
var base = index * 4 - 4;
this[base + 2] =
this[base + 3] =
this[base + 0] =
this[base + 1] = undefined;
};

Promise.prototype._fulfill = function (value) {
var bitField = this._bitField;
if (((bitField & 117506048) >>> 16)) return;
if (value === this) {
var err = makeSelfResolutionError();
this._attachExtraTrace(err);
return this._reject(err);
}
this._setFulfilled();
this._rejectionHandler0 = value;

if ((bitField & 65535) > 0) {
    if (((bitField & 134217728) !== 0)) {
        this._settlePromises();
    } else {
        async.settlePromises(this);
    }
}

};

Promise.prototype._reject = function (reason) {
var bitField = this._bitField;
if (((bitField & 117506048) >>> 16)) return;
this._setRejected();
this._fulfillmentHandler0 = reason;

if (this._isFinal()) {
    return async.fatalError(reason, util.isNode);
}

if ((bitField & 65535) > 0) {
    async.settlePromises(this);
} else {
    this._ensurePossibleRejectionHandled();
}

};

Promise.prototype._fulfillPromises = function (len, value) {
for (var i = 1; i < len; i++) {
var handler = this._fulfillmentHandlerAt(i);
var promise = this._promiseAt(i);
var receiver = this._receiverAt(i);
this._clearCallbackDataAtIndex(i);
this._settlePromise(promise, handler, receiver, value);
}
};

Promise.prototype._rejectPromises = function (len, reason) {
for (var i = 1; i < len; i++) {
var handler = this._rejectionHandlerAt(i);
var promise = this._promiseAt(i);
var receiver = this._receiverAt(i);
this._clearCallbackDataAtIndex(i);
this._settlePromise(promise, handler, receiver, reason);
}
};

Promise.prototype._settlePromises = function () {
var bitField = this._bitField;
var len = (bitField & 65535);

if (len > 0) {
    if (((bitField & 16842752) !== 0)) {
        var reason = this._fulfillmentHandler0;
        this._settlePromise0(this._rejectionHandler0, reason, bitField);
        this._rejectPromises(len, reason);
    } else {
        var value = this._rejectionHandler0;
        this._settlePromise0(this._fulfillmentHandler0, value, bitField);
        this._fulfillPromises(len, value);
    }
    this._setLength(0);
}
this._clearCancellationData();

};

Promise.prototype._settledValue = function() {
var bitField = this._bitField;
if (((bitField & 33554432) !== 0)) {
return this._rejectionHandler0;
} else if (((bitField & 16777216) !== 0)) {
return this._fulfillmentHandler0;
}
};

function deferResolve(v) {this.promise._resolveCallback(v);}
function deferReject(v) {this.promise._rejectCallback(v, false);}

Promise.defer = Promise.pending = function() {
debug.deprecated("Promise.defer", "new Promise");
var promise = new Promise(INTERNAL);
return {
promise: promise,
resolve: deferResolve,
reject: deferReject
};
};

util.notEnumerableProp(Promise,
"_makeSelfResolutionError",
makeSelfResolutionError);

dereq("./method")(Promise, INTERNAL, tryConvertToPromise, apiRejection,
debug);
dereq("./bind")(Promise, INTERNAL, tryConvertToPromise, debug);
dereq("./cancel")(Promise, PromiseArray, apiRejection, debug);
dereq("./direct_resolve")(Promise);
dereq("./synchronous_inspection")(Promise);
dereq("./join")(
Promise, PromiseArray, tryConvertToPromise, INTERNAL, async, getDomain);
Promise.Promise = Promise;
Promise.version = "3.5.0";
dereq('./map.js')(Promise, PromiseArray, apiRejection, tryConvertToPromise, INTERNAL, debug);
dereq('./call_get.js')(Promise);
dereq('./using.js')(Promise, apiRejection, tryConvertToPromise, createContext, INTERNAL, debug);
dereq('./timers.js')(Promise, INTERNAL, debug);
dereq('./generators.js')(Promise, apiRejection, INTERNAL, tryConvertToPromise, Proxyable, debug);
dereq('./nodeify.js')(Promise);
dereq('./promisify.js')(Promise, INTERNAL);
dereq('./props.js')(Promise, PromiseArray, tryConvertToPromise, apiRejection);
dereq('./race.js')(Promise, INTERNAL, tryConvertToPromise, apiRejection);
dereq('./reduce.js')(Promise, PromiseArray, apiRejection, tryConvertToPromise, INTERNAL, debug);
dereq('./settle.js')(Promise, PromiseArray, debug);
dereq('./some.js')(Promise, PromiseArray, apiRejection);
dereq('./filter.js')(Promise, INTERNAL);
dereq('./each.js')(Promise, INTERNAL);
dereq('./any.js')(Promise);

util.toFastProperties(Promise);                                          
util.toFastProperties(Promise.prototype);                                
function fillTypes(value) {                                              
    var p = new Promise(INTERNAL);                                       
    p._fulfillmentHandler0 = value;                                      
    p._rejectionHandler0 = value;                                        
    p._promise0 = value;                                                 
    p._receiver0 = value;                                                
}                                                                        
// Complete slack tracking, opt out of field-type tracking and           
// stabilize map                                                         
fillTypes({a: 1});                                                       
fillTypes({b: 2});                                                       
fillTypes({c: 3});                                                       
fillTypes(1);                                                            
fillTypes(function(){});                                                 
fillTypes(undefined);                                                    
fillTypes(false);                                                        
fillTypes(new Promise(INTERNAL));                                        
debug.setBounds(Async.firstLineError, util.lastLineError);               
return Promise;                                                          

};

},{"./any.js":1,"./async":2,"./bind":3,"./call_get.js":5,"./cancel":6,"./catch_filter":7,"./context":8,"./debuggability":9,"./direct_resolve":10,"./each.js":11,"./errors":12,"./es5":13,"./filter.js":14,"./finally":15,"./generators.js":16,"./join":17,"./map.js":18,"./method":19,"./nodeback":20,"./nodeify.js":21,"./promise_array":23,"./promisify.js":24,"./props.js":25,"./race.js":27,"./reduce.js":28,"./settle.js":30,"./some.js":31,"./synchronous_inspection":32,"./thenables":33,"./timers.js":34,"./using.js":35,"./util":36}],23:[function(dereq,module,exports){
"use strict";
module.exports = function(Promise, INTERNAL, tryConvertToPromise,
apiRejection, Proxyable) {
var util = dereq("./util");
var isArray = util.isArray;

function toResolutionValue(val) {
switch(val) {
case -2: return [];
case -3: return {};
case -6: return new Map();
}
}

function PromiseArray(values) {
var promise = this._promise = new Promise(INTERNAL);
if (values instanceof Promise) {
promise._propagateFrom(values, 3);
}
promise._setOnCancel(this);
this._values = values;
this._length = 0;
this._totalResolved = 0;
this._init(undefined, -2);
}
util.inherits(PromiseArray, Proxyable);

PromiseArray.prototype.length = function () {
return this._length;
};

PromiseArray.prototype.promise = function () {
return this._promise;
};

PromiseArray.prototype.init = function init(, resolveValueIfEmpty) {
var values = tryConvertToPromise(this._values, this._promise);
if (values instanceof Promise) {
values = values._target();
var bitField = values._bitField;
;
this._values = values;

    if (((bitField & 50397184) === 0)) {
        this._promise._setAsyncGuaranteed();
        return values._then(
            init,
            this._reject,
            undefined,
            this,
            resolveValueIfEmpty
       );
    } else if (((bitField & 33554432) !== 0)) {
        values = values._value();
    } else if (((bitField & 16777216) !== 0)) {
        return this._reject(values._reason());
    } else {
        return this._cancel();
    }
}
values = util.asArray(values);
if (values === null) {
    var err = apiRejection(
        "expecting an array or an iterable object but got " + util.classString(values)).reason();
    this._promise._rejectCallback(err, false);
    return;
}

if (values.length === 0) {
    if (resolveValueIfEmpty === -5) {
        this._resolveEmptyArray();
    }
    else {
        this._resolve(toResolutionValue(resolveValueIfEmpty));
    }
    return;
}
this._iterate(values);

};

PromiseArray.prototype._iterate = function(values) {
var len = this.getActualLength(values.length);
this._length = len;
this._values = this.shouldCopyValues() ? new Array(len) : this._values;
var result = this._promise;
var isResolved = false;
var bitField = null;
for (var i = 0; i < len; ++i) {
var maybePromise = tryConvertToPromise(values[i], result);

    if (maybePromise instanceof Promise) {
        maybePromise = maybePromise._target();
        bitField = maybePromise._bitField;
    } else {
        bitField = null;
    }

    if (isResolved) {
        if (bitField !== null) {
            maybePromise.suppressUnhandledRejections();
        }
    } else if (bitField !== null) {
        if (((bitField & 50397184) === 0)) {
            maybePromise._proxy(this, i);
            this._values[i] = maybePromise;
        } else if (((bitField & 33554432) !== 0)) {
            isResolved = this._promiseFulfilled(maybePromise._value(), i);
        } else if (((bitField & 16777216) !== 0)) {
            isResolved = this._promiseRejected(maybePromise._reason(), i);
        } else {
            isResolved = this._promiseCancelled(i);
        }
    } else {
        isResolved = this._promiseFulfilled(maybePromise, i);
    }
}
if (!isResolved) result._setAsyncGuaranteed();

};

PromiseArray.prototype._isResolved = function () {
return this._values === null;
};

PromiseArray.prototype._resolve = function (value) {
this._values = null;
this._promise._fulfill(value);
};

PromiseArray.prototype._cancel = function() {
if (this._isResolved() || !this._promise._isCancellable()) return;
this._values = null;
this._promise._cancel();
};

PromiseArray.prototype._reject = function (reason) {
this._values = null;
this._promise._rejectCallback(reason, false);
};

PromiseArray.prototype._promiseFulfilled = function (value, index) {
this._values[index] = value;
var totalResolved = ++this._totalResolved;
if (totalResolved >= this._length) {
this._resolve(this._values);
return true;
}
return false;
};

PromiseArray.prototype._promiseCancelled = function() {
this._cancel();
return true;
};

PromiseArray.prototype._promiseRejected = function (reason) {
this._totalResolved++;
this._reject(reason);
return true;
};

PromiseArray.prototype._resultCancelled = function() {
if (this._isResolved()) return;
var values = this._values;
this._cancel();
if (values instanceof Promise) {
values.cancel();
} else {
for (var i = 0; i < values.length; ++i) {
if (values[i] instanceof Promise) {
values[i].cancel();
}
}
}
};

PromiseArray.prototype.shouldCopyValues = function () {
return true;
};

PromiseArray.prototype.getActualLength = function (len) {
return len;
};

return PromiseArray;
};

},{"./util":36}],24:[function(dereq,module,exports){
"use strict";
module.exports = function(Promise, INTERNAL) {
var THIS = {};
var util = dereq("./util");
var nodebackForPromise = dereq("./nodeback");
var withAppended = util.withAppended;
var maybeWrapAsError = util.maybeWrapAsError;
var canEvaluate = util.canEvaluate;
var TypeError = dereq("./errors").TypeError;
var defaultSuffix = "Async";
var defaultPromisified = {isPromisified: true};
var noCopyProps = [
"arity", "length",
"name",
"arguments",
"caller",
"callee",
"prototype",
"isPromisified"
];
var noCopyPropsPattern = new RegExp("^(?:" + noCopyProps.join("|") + ")$");

var defaultFilter = function(name) {
return util.isIdentifier(name) &&
name.charAt(0) !== "_" &&
name !== "constructor";
};

function propsFilter(key) {
return !noCopyPropsPattern.test(key);
}

function isPromisified(fn) {
try {
return fn.isPromisified === true;
}
catch (e) {
return false;
}
}

function hasPromisified(obj, key, suffix) {
var val = util.getDataPropertyOrDefault(obj, key + suffix,
defaultPromisified);
return val ? isPromisified(val) : false;
}
function checkValid(ret, suffix, suffixRegexp) {
for (var i = 0; i < ret.length; i += 2) {
var key = ret[i];
if (suffixRegexp.test(key)) {
var keyWithoutAsyncSuffix = key.replace(suffixRegexp, "");
for (var j = 0; j < ret.length; j += 2) {
if (ret[j] === keyWithoutAsyncSuffix) {
throw new TypeError("Cannot promisify an API that has normal methods with '%s'-suffix\u000a\u000a See http://goo.gl/MqrFmX\u000a"
.replace("%s", suffix));
}
}
}
}
}

function promisifiableMethods(obj, suffix, suffixRegexp, filter) {
var keys = util.inheritedDataKeys(obj);
var ret = [];
for (var i = 0; i < keys.length; ++i) {
var key = keys[i];
var value = obj[key];
var passesDefaultFilter = filter === defaultFilter
? true : defaultFilter(key, value, obj);
if (typeof value === "function" &&
!isPromisified(value) &&
!hasPromisified(obj, key, suffix) &&
filter(key, value, obj, passesDefaultFilter)) {
ret.push(key, value);
}
}
checkValid(ret, suffix, suffixRegexp);
return ret;
}

var escapeIdentRegex = function(str) {
return str.replace(/([$])/, "\$");
};

var makeNodePromisifiedEval;
if (!true) {
var switchCaseArgumentOrder = function(likelyArgumentCount) {
var ret = [likelyArgumentCount];
var min = Math.max(0, likelyArgumentCount - 1 - 3);
for(var i = likelyArgumentCount - 1; i >= min; --i) {
ret.push(i);
}
for(var i = likelyArgumentCount + 1; i <= 3; ++i) {
ret.push(i);
}
return ret;
};

var argumentSequence = function(argumentCount) {
return util.filledRange(argumentCount, "_arg", "");
};

var parameterDeclaration = function(parameterCount) {
return util.filledRange(
Math.max(parameterCount, 3), "_arg", "");
};

var parameterCount = function(fn) {
if (typeof fn.length === "number") {
return Math.max(Math.min(fn.length, 1023 + 1), 0);
}
return 0;
};

makeNodePromisifiedEval =
function(callback, receiver, originalName, fn, _, multiArgs) {
var newParameterCount = Math.max(0, parameterCount(fn) - 1);
var argumentOrder = switchCaseArgumentOrder(newParameterCount);
var shouldProxyThis = typeof callback === "string" || receiver === THIS;

function generateCallForArgumentCount(count) {
    var args = argumentSequence(count).join(", ");
    var comma = count > 0 ? ", " : "";
    var ret;
    if (shouldProxyThis) {
        ret = "ret = callback.call(this, {{args}}, nodeback); break;\n";
    } else {
        ret = receiver === undefined
            ? "ret = callback({{args}}, nodeback); break;\n"
            : "ret = callback.call(receiver, {{args}}, nodeback); break;\n";
    }
    return ret.replace("{{args}}", args).replace(", ", comma);
}

function generateArgumentSwitchCase() {
    var ret = "";
    for (var i = 0; i < argumentOrder.length; ++i) {
        ret += "case " + argumentOrder[i] +":" +
            generateCallForArgumentCount(argumentOrder[i]);
    }

    ret += "                                                             \n\
    default:                                                             \n\
        var args = new Array(len + 1);                                   \n\
        var i = 0;                                                       \n\
        for (var i = 0; i < len; ++i) {                                  \n\
           args[i] = arguments[i];                                       \n\
        }                                                                \n\
        args[i] = nodeback;                                              \n\
        [CodeForCall]                                                    \n\
        break;                                                           \n\
    ".replace("[CodeForCall]", (shouldProxyThis
                            ? "ret = callback.apply(this, args);\n"
                            : "ret = callback.apply(receiver, args);\n"));
    return ret;
}

var getFunctionCode = typeof callback === "string"
                            ? ("this != null ? this['"+callback+"'] : fn")
                            : "fn";
var body = "'use strict';                                                \n\
    var ret = function (Parameters) {                                    \n\
        'use strict';                                                    \n\
        var len = arguments.length;                                      \n\
        var promise = new Promise(INTERNAL);                             \n\
        promise._captureStackTrace();                                    \n\
        var nodeback = nodebackForPromise(promise, " + multiArgs + ");   \n\
        var ret;                                                         \n\
        var callback = tryCatch([GetFunctionCode]);                      \n\
        switch(len) {                                                    \n\
            [CodeForSwitchCase]                                          \n\
        }                                                                \n\
        if (ret === errorObj) {                                          \n\
            promise._rejectCallback(maybeWrapAsError(ret.e), true, true);\n\
        }                                                                \n\
        if (!promise._isFateSealed()) promise._setAsyncGuaranteed();     \n\
        return promise;                                                  \n\
    };                                                                   \n\
    notEnumerableProp(ret, '__isPromisified__', true);                   \n\
    return ret;                                                          \n\
".replace("[CodeForSwitchCase]", generateArgumentSwitchCase())
    .replace("[GetFunctionCode]", getFunctionCode);
body = body.replace("Parameters", parameterDeclaration(newParameterCount));
return new Function("Promise",
                    "fn",
                    "receiver",
                    "withAppended",
                    "maybeWrapAsError",
                    "nodebackForPromise",
                    "tryCatch",
                    "errorObj",
                    "notEnumerableProp",
                    "INTERNAL",
                    body)(
                Promise,
                fn,
                receiver,
                withAppended,
                maybeWrapAsError,
                nodebackForPromise,
                util.tryCatch,
                util.errorObj,
                util.notEnumerableProp,
                INTERNAL);

};
}

function makeNodePromisifiedClosure(callback, receiver, _, fn, __, multiArgs) {
var defaultThis = (function() {return this;})();
var method = callback;
if (typeof method === "string") {
callback = fn;
}
function promisified() {
var _receiver = receiver;
if (receiver === THIS) _receiver = this;
var promise = new Promise(INTERNAL);
promise._captureStackTrace();
var cb = typeof method === "string" && this !== defaultThis
? this[method] : callback;
var fn = nodebackForPromise(promise, multiArgs);
try {
cb.apply(_receiver, withAppended(arguments, fn));
} catch(e) {
promise._rejectCallback(maybeWrapAsError(e), true, true);
}
if (!promise._isFateSealed()) promise._setAsyncGuaranteed();
return promise;
}
util.notEnumerableProp(promisified, "isPromisified", true);
return promisified;
}

var makeNodePromisified = canEvaluate
? makeNodePromisifiedEval
: makeNodePromisifiedClosure;

function promisifyAll(obj, suffix, filter, promisifier, multiArgs) {
var suffixRegexp = new RegExp(escapeIdentRegex(suffix) + "$");
var methods =
promisifiableMethods(obj, suffix, suffixRegexp, filter);

for (var i = 0, len = methods.length; i < len; i+= 2) {
    var key = methods[i];
    var fn = methods[i+1];
    var promisifiedKey = key + suffix;
    if (promisifier === makeNodePromisified) {
        obj[promisifiedKey] =
            makeNodePromisified(key, THIS, key, fn, suffix, multiArgs);
    } else {
        var promisified = promisifier(fn, function() {
            return makeNodePromisified(key, THIS, key,
                                       fn, suffix, multiArgs);
        });
        util.notEnumerableProp(promisified, "__isPromisified__", true);
        obj[promisifiedKey] = promisified;
    }
}
util.toFastProperties(obj);
return obj;

}

function promisify(callback, receiver, multiArgs) {
return makeNodePromisified(callback, receiver, undefined,
callback, null, multiArgs);
}

Promise.promisify = function (fn, options) {
if (typeof fn !== "function") {
throw new TypeError("expecting a function but got " + util.classString(fn));
}
if (isPromisified(fn)) {
return fn;
}
options = Object(options);
var receiver = options.context === undefined ? THIS : options.context;
var multiArgs = !!options.multiArgs;
var ret = promisify(fn, receiver, multiArgs);
util.copyDescriptors(fn, ret, propsFilter);
return ret;
};

Promise.promisifyAll = function (target, options) {
if (typeof target !== "function" && typeof target !== "object") {
throw new TypeError("the target of promisifyAll must be an object or a function\u000a\u000a See http://goo.gl/MqrFmX\u000a");
}
options = Object(options);
var multiArgs = !!options.multiArgs;
var suffix = options.suffix;
if (typeof suffix !== "string") suffix = defaultSuffix;
var filter = options.filter;
if (typeof filter !== "function") filter = defaultFilter;
var promisifier = options.promisifier;
if (typeof promisifier !== "function") promisifier = makeNodePromisified;

if (!util.isIdentifier(suffix)) {
    throw new RangeError("suffix must be a valid identifier\u000a\u000a    See http://goo.gl/MqrFmX\u000a");
}

var keys = util.inheritedDataKeys(target);
for (var i = 0; i < keys.length; ++i) {
    var value = target[keys[i]];
    if (keys[i] !== "constructor" &&
        util.isClass(value)) {
        promisifyAll(value.prototype, suffix, filter, promisifier,
            multiArgs);
        promisifyAll(value, suffix, filter, promisifier, multiArgs);
    }
}

return promisifyAll(target, suffix, filter, promisifier, multiArgs);

};
};

},{"./errors":12,"./nodeback":20,"./util":36}],25:[function(dereq,module,exports){
"use strict";
module.exports = function(
Promise, PromiseArray, tryConvertToPromise, apiRejection) {
var util = dereq("./util");
var isObject = util.isObject;
var es5 = dereq("./es5");
var Es6Map;
if (typeof Map === "function") Es6Map = Map;

var mapToEntries = (function() {
var index = 0;
var size = 0;

function extractEntry(value, key) {
    this[index] = value;
    this[index + size] = key;
    index++;
}

return function mapToEntries(map) {
    size = map.size;
    index = 0;
    var ret = new Array(map.size * 2);
    map.forEach(extractEntry, ret);
    return ret;
};

})();

var entriesToMap = function(entries) {
var ret = new Es6Map();
var length = entries.length / 2 | 0;
for (var i = 0; i < length; ++i) {
var key = entries[length + i];
var value = entries[i];
ret.set(key, value);
}
return ret;
};

function PropertiesPromiseArray(obj) {
var isMap = false;
var entries;
if (Es6Map !== undefined && obj instanceof Es6Map) {
entries = mapToEntries(obj);
isMap = true;
} else {
var keys = es5.keys(obj);
var len = keys.length;
entries = new Array(len * 2);
for (var i = 0; i < len; ++i) {
var key = keys[i];
entries[i] = obj[key];
entries[i + len] = key;
}
}
this.constructor$(entries);
this._isMap = isMap;
this._init$(undefined, isMap ? -6 : -3);
}
util.inherits(PropertiesPromiseArray, PromiseArray);

PropertiesPromiseArray.prototype._init = function () {};

PropertiesPromiseArray.prototype._promiseFulfilled = function (value, index) {
this._values[index] = value;
var totalResolved = ++this._totalResolved;
if (totalResolved >= this._length) {
var val;
if (this._isMap) {
val = entriesToMap(this._values);
} else {
val = {};
var keyOffset = this.length();
for (var i = 0, len = this.length(); i < len; ++i) {
val[this._values[i + keyOffset]] = this._values[i];
}
}
this._resolve(val);
return true;
}
return false;
};

PropertiesPromiseArray.prototype.shouldCopyValues = function () {
return false;
};

PropertiesPromiseArray.prototype.getActualLength = function (len) {
return len >> 1;
};

function props(promises) {
var ret;
var castValue = tryConvertToPromise(promises);

if (!isObject(castValue)) {
    return apiRejection("cannot await properties of a non-object\u000a\u000a    See http://goo.gl/MqrFmX\u000a");
} else if (castValue instanceof Promise) {
    ret = castValue._then(
        Promise.props, undefined, undefined, undefined, undefined);
} else {
    ret = new PropertiesPromiseArray(castValue).promise();
}

if (castValue instanceof Promise) {
    ret._propagateFrom(castValue, 2);
}
return ret;

}

Promise.prototype.props = function () {
return props(this);
};

Promise.props = function (promises) {
return props(promises);
};
};

},{"./es5":13,"./util":36}],26:[function(dereq,module,exports){
"use strict";
function arrayMove(src, srcIndex, dst, dstIndex, len) {
for (var j = 0; j < len; ++j) {
dst[j + dstIndex] = src[j + srcIndex];
src[j + srcIndex] = void 0;
}
}

function Queue(capacity) {
this._capacity = capacity;
this._length = 0;
this._front = 0;
}

Queue.prototype._willBeOverCapacity = function (size) {
return this._capacity < size;
};

Queue.prototype._pushOne = function (arg) {
var length = this.length();
this._checkCapacity(length + 1);
var i = (this._front + length) & (this._capacity - 1);
this[i] = arg;
this._length = length + 1;
};

Queue.prototype.push = function (fn, receiver, arg) {
var length = this.length() + 3;
if (this._willBeOverCapacity(length)) {
this._pushOne(fn);
this._pushOne(receiver);
this._pushOne(arg);
return;
}
var j = this._front + length - 3;
this._checkCapacity(length);
var wrapMask = this._capacity - 1;
this[(j + 0) & wrapMask] = fn;
this[(j + 1) & wrapMask] = receiver;
this[(j + 2) & wrapMask] = arg;
this._length = length;
};

Queue.prototype.shift = function () {
var front = this._front,
ret = this[front];

this[front] = undefined;
this._front = (front + 1) & (this._capacity - 1);
this._length--;
return ret;

};

Queue.prototype.length = function () {
return this._length;
};

Queue.prototype._checkCapacity = function (size) {
if (this._capacity < size) {
this._resizeTo(this._capacity << 1);
}
};

Queue.prototype._resizeTo = function (capacity) {
var oldCapacity = this._capacity;
this._capacity = capacity;
var front = this._front;
var length = this._length;
var moveItemsCount = (front + length) & (oldCapacity - 1);
arrayMove(this, 0, this, oldCapacity, moveItemsCount);
};

module.exports = Queue;

},{}],27:[function(dereq,module,exports){
"use strict";
module.exports = function(
Promise, INTERNAL, tryConvertToPromise, apiRejection) {
var util = dereq("./util");

var raceLater = function (promise) {
return promise.then(function(array) {
return race(array, promise);
});
};

function race(promises, parent) {
var maybePromise = tryConvertToPromise(promises);

if (maybePromise instanceof Promise) {
    return raceLater(maybePromise);
} else {
    promises = util.asArray(promises);
    if (promises === null)
        return apiRejection("expecting an array or an iterable object but got " + util.classString(promises));
}

var ret = new Promise(INTERNAL);
if (parent !== undefined) {
    ret._propagateFrom(parent, 3);
}
var fulfill = ret._fulfill;
var reject = ret._reject;
for (var i = 0, len = promises.length; i < len; ++i) {
    var val = promises[i];

    if (val === undefined && !(i in promises)) {
        continue;
    }

    Promise.cast(val)._then(fulfill, reject, undefined, ret, null);
}
return ret;

}

Promise.race = function (promises) {
return race(promises, undefined);
};

Promise.prototype.race = function () {
return race(this, undefined);
};

};

},{"./util":36}],28:[function(dereq,module,exports){
"use strict";
module.exports = function(Promise,
PromiseArray,
apiRejection,
tryConvertToPromise,
INTERNAL,
debug) {
var getDomain = Promise._getDomain;
var util = dereq("./util");
var tryCatch = util.tryCatch;

function ReductionPromiseArray(promises, fn, initialValue, _each) {
this.constructor$(promises);
var domain = getDomain();
this._fn = domain === null ? fn : util.domainBind(domain, fn);
if (initialValue !== undefined) {
initialValue = Promise.resolve(initialValue);
initialValue._attachCancellationCallback(this);
}
this._initialValue = initialValue;
this._currentCancellable = null;
if(_each === INTERNAL) {
this._eachValues = Array(this._length);
} else if (_each === 0) {
this._eachValues = null;
} else {
this._eachValues = undefined;
}
this._promise._captureStackTrace();
this._init$(undefined, -5);
}
util.inherits(ReductionPromiseArray, PromiseArray);

ReductionPromiseArray.prototype._gotAccum = function(accum) {
if (this._eachValues !== undefined &&
this._eachValues !== null &&
accum !== INTERNAL) {
this._eachValues.push(accum);
}
};

ReductionPromiseArray.prototype._eachComplete = function(value) {
if (this._eachValues !== null) {
this._eachValues.push(value);
}
return this._eachValues;
};

ReductionPromiseArray.prototype._init = function() {};

ReductionPromiseArray.prototype._resolveEmptyArray = function() {
this._resolve(this._eachValues !== undefined ? this._eachValues
: this._initialValue);
};

ReductionPromiseArray.prototype.shouldCopyValues = function () {
return false;
};

ReductionPromiseArray.prototype._resolve = function(value) {
this._promise._resolveCallback(value);
this._values = null;
};

ReductionPromiseArray.prototype._resultCancelled = function(sender) {
if (sender === this._initialValue) return this._cancel();
if (this._isResolved()) return;
this._resultCancelled$();
if (this._currentCancellable instanceof Promise) {
this._currentCancellable.cancel();
}
if (this._initialValue instanceof Promise) {
this._initialValue.cancel();
}
};

ReductionPromiseArray.prototype._iterate = function (values) {
this._values = values;
var value;
var i;
var length = values.length;
if (this._initialValue !== undefined) {
value = this._initialValue;
i = 0;
} else {
value = Promise.resolve(values[0]);
i = 1;
}

this._currentCancellable = value;

if (!value.isRejected()) {
    for (; i < length; ++i) {
        var ctx = {
            accum: null,
            value: values[i],
            index: i,
            length: length,
            array: this
        };
        value = value._then(gotAccum, undefined, undefined, ctx, undefined);
    }
}

if (this._eachValues !== undefined) {
    value = value
        ._then(this._eachComplete, undefined, undefined, this, undefined);
}
value._then(completed, completed, undefined, value, this);

};

Promise.prototype.reduce = function (fn, initialValue) {
return reduce(this, fn, initialValue, null);
};

Promise.reduce = function (promises, fn, initialValue, _each) {
return reduce(promises, fn, initialValue, _each);
};

function completed(valueOrReason, array) {
if (this.isFulfilled()) {
array._resolve(valueOrReason);
} else {
array._reject(valueOrReason);
}
}

function reduce(promises, fn, initialValue, _each) {
if (typeof fn !== "function") {
return apiRejection("expecting a function but got " + util.classString(fn));
}
var array = new ReductionPromiseArray(promises, fn, initialValue, _each);
return array.promise();
}

function gotAccum(accum) {
this.accum = accum;
this.array._gotAccum(accum);
var value = tryConvertToPromise(this.value, this.array._promise);
if (value instanceof Promise) {
this.array._currentCancellable = value;
return value._then(gotValue, undefined, undefined, this, undefined);
} else {
return gotValue.call(this, value);
}
}

function gotValue(value) {
var array = this.array;
var promise = array._promise;
var fn = tryCatch(array._fn);
promise._pushContext();
var ret;
if (array._eachValues !== undefined) {
ret = fn.call(promise._boundValue(), value, this.index, this.length);
} else {
ret = fn.call(promise._boundValue(),
this.accum, value, this.index, this.length);
}
if (ret instanceof Promise) {
array._currentCancellable = ret;
}
var promiseCreated = promise._popContext();
debug.checkForgottenReturns(
ret,
promiseCreated,
array._eachValues !== undefined ? "Promise.each" : "Promise.reduce",
promise
);
return ret;
}
};

},{"./util":36}],29:[function(dereq,module,exports){
"use strict";
var util = dereq("./util");
var schedule;
var noAsyncScheduler = function() {
throw new Error("No async scheduler available\u000a\u000a See http://goo.gl/MqrFmX\u000a");
};
var NativePromise = util.getNativePromise();
if (util.isNode && typeof MutationObserver === "undefined") {
var GlobalSetImmediate = global.setImmediate;
var ProcessNextTick = process.nextTick;
schedule = util.isRecentNode
? function(fn) { GlobalSetImmediate.call(global, fn); }
: function(fn) { ProcessNextTick.call(process, fn); };
} else if (typeof NativePromise === "function" &&
typeof NativePromise.resolve === "function") {
var nativePromise = NativePromise.resolve();
schedule = function(fn) {
nativePromise.then(fn);
};
} else if ((typeof MutationObserver !== "undefined") &&
!(typeof window !== "undefined" &&
window.navigator &&
(window.navigator.standalone || window.cordova))) {
schedule = (function() {
var div = document.createElement("div");
var opts = {attributes: true};
var toggleScheduled = false;
var div2 = document.createElement("div");
var o2 = new MutationObserver(function() {
div.classList.toggle("foo");
toggleScheduled = false;
});
o2.observe(div2, opts);

    var scheduleToggle = function() {
        if (toggleScheduled) return;
        toggleScheduled = true;
        div2.classList.toggle("foo");
    };

    return function schedule(fn) {
        var o = new MutationObserver(function() {
            o.disconnect();
            fn();
        });
        o.observe(div, opts);
        scheduleToggle();
    };
})();

} else if (typeof setImmediate !== "undefined") {
schedule = function (fn) {
setImmediate(fn);
};
} else if (typeof setTimeout !== "undefined") {
schedule = function (fn) {
setTimeout(fn, 0);
};
} else {
schedule = noAsyncScheduler;
}
module.exports = schedule;

},{"./util":36}],30:[function(dereq,module,exports){
"use strict";
module.exports =
function(Promise, PromiseArray, debug) {
var PromiseInspection = Promise.PromiseInspection;
var util = dereq("./util");

function SettledPromiseArray(values) {
this.constructor$(values);
}
util.inherits(SettledPromiseArray, PromiseArray);

SettledPromiseArray.prototype._promiseResolved = function (index, inspection) {
this._values[index] = inspection;
var totalResolved = ++this._totalResolved;
if (totalResolved >= this._length) {
this._resolve(this._values);
return true;
}
return false;
};

SettledPromiseArray.prototype._promiseFulfilled = function (value, index) {
var ret = new PromiseInspection();
ret._bitField = 33554432;
ret._settledValueField = value;
return this._promiseResolved(index, ret);
};
SettledPromiseArray.prototype._promiseRejected = function (reason, index) {
var ret = new PromiseInspection();
ret._bitField = 16777216;
ret._settledValueField = reason;
return this._promiseResolved(index, ret);
};

Promise.settle = function (promises) {
debug.deprecated(".settle()", ".reflect()");
return new SettledPromiseArray(promises).promise();
};

Promise.prototype.settle = function () {
return Promise.settle(this);
};
};

},{"./util":36}],31:[function(dereq,module,exports){
"use strict";
module.exports =
function(Promise, PromiseArray, apiRejection) {
var util = dereq("./util");
var RangeError = dereq("./errors").RangeError;
var AggregateError = dereq("./errors").AggregateError;
var isArray = util.isArray;
var CANCELLATION = {};

function SomePromiseArray(values) {
this.constructor$(values);
this._howMany = 0;
this._unwrap = false;
this._initialized = false;
}
util.inherits(SomePromiseArray, PromiseArray);

SomePromiseArray.prototype._init = function () {
if (!this._initialized) {
return;
}
if (this._howMany === 0) {
this._resolve([]);
return;
}
this._init$(undefined, -5);
var isArrayResolved = isArray(this._values);
if (!this._isResolved() &&
isArrayResolved &&
this._howMany > this._canPossiblyFulfill()) {
this._reject(this._getRangeError(this.length()));
}
};

SomePromiseArray.prototype.init = function () {
this._initialized = true;
this._init();
};

SomePromiseArray.prototype.setUnwrap = function () {
this._unwrap = true;
};

SomePromiseArray.prototype.howMany = function () {
return this._howMany;
};

SomePromiseArray.prototype.setHowMany = function (count) {
this._howMany = count;
};

SomePromiseArray.prototype._promiseFulfilled = function (value) {
this._addFulfilled(value);
if (this._fulfilled() === this.howMany()) {
this._values.length = this.howMany();
if (this.howMany() === 1 && this._unwrap) {
this._resolve(this._values[0]);
} else {
this._resolve(this._values);
}
return true;
}
return false;

};
SomePromiseArray.prototype._promiseRejected = function (reason) {
this._addRejected(reason);
return this._checkOutcome();
};

SomePromiseArray.prototype._promiseCancelled = function () {
if (this._values instanceof Promise || this._values == null) {
return this._cancel();
}
this._addRejected(CANCELLATION);
return this._checkOutcome();
};

SomePromiseArray.prototype._checkOutcome = function() {
if (this.howMany() > this._canPossiblyFulfill()) {
var e = new AggregateError();
for (var i = this.length(); i < this._values.length; ++i) {
if (this._values[i] !== CANCELLATION) {
e.push(this._values[i]);
}
}
if (e.length > 0) {
this._reject(e);
} else {
this._cancel();
}
return true;
}
return false;
};

SomePromiseArray.prototype._fulfilled = function () {
return this._totalResolved;
};

SomePromiseArray.prototype._rejected = function () {
return this._values.length - this.length();
};

SomePromiseArray.prototype._addRejected = function (reason) {
this._values.push(reason);
};

SomePromiseArray.prototype._addFulfilled = function (value) {
this._values[this._totalResolved++] = value;
};

SomePromiseArray.prototype._canPossiblyFulfill = function () {
return this.length() - this._rejected();
};

SomePromiseArray.prototype._getRangeError = function (count) {
var message = "Input array must contain at least " +
this._howMany + " items but contains only " + count + " items";
return new RangeError(message);
};

SomePromiseArray.prototype._resolveEmptyArray = function () {
this._reject(this._getRangeError(0));
};

function some(promises, howMany) {
if ((howMany | 0) !== howMany || howMany < 0) {
return apiRejection("expecting a positive integer\u000a\u000a See http://goo.gl/MqrFmX\u000a");
}
var ret = new SomePromiseArray(promises);
var promise = ret.promise();
ret.setHowMany(howMany);
ret.init();
return promise;
}

Promise.some = function (promises, howMany) {
return some(promises, howMany);
};

Promise.prototype.some = function (howMany) {
return some(this, howMany);
};

Promise._SomePromiseArray = SomePromiseArray;
};

},{"./errors":12,"./util":36}],32:[function(dereq,module,exports){
"use strict";
module.exports = function(Promise) {
function PromiseInspection(promise) {
if (promise !== undefined) {
promise = promise._target();
this._bitField = promise._bitField;
this._settledValueField = promise._isFateSealed()
? promise._settledValue() : undefined;
}
else {
this._bitField = 0;
this._settledValueField = undefined;
}
}

PromiseInspection.prototype._settledValue = function() {
return this._settledValueField;
};

var value = PromiseInspection.prototype.value = function () {
if (!this.isFulfilled()) {
throw new TypeError("cannot get fulfillment value of a non-fulfilled promise\u000a\u000a See http://goo.gl/MqrFmX\u000a");
}
return this._settledValue();
};

var reason = PromiseInspection.prototype.error =
PromiseInspection.prototype.reason = function () {
if (!this.isRejected()) {
throw new TypeError("cannot get rejection reason of a non-rejected promise\u000a\u000a See http://goo.gl/MqrFmX\u000a");
}
return this._settledValue();
};

var isFulfilled = PromiseInspection.prototype.isFulfilled = function() {
return (this._bitField & 33554432) !== 0;
};

var isRejected = PromiseInspection.prototype.isRejected = function () {
return (this._bitField & 16777216) !== 0;
};

var isPending = PromiseInspection.prototype.isPending = function () {
return (this._bitField & 50397184) === 0;
};

var isResolved = PromiseInspection.prototype.isResolved = function () {
return (this._bitField & 50331648) !== 0;
};

PromiseInspection.prototype.isCancelled = function() {
return (this._bitField & 8454144) !== 0;
};

Promise.prototype.__isCancelled = function() {
return (this._bitField & 65536) === 65536;
};

Promise.prototype._isCancelled = function() {
return this._target().__isCancelled();
};

Promise.prototype.isCancelled = function() {
return (this._target()._bitField & 8454144) !== 0;
};

Promise.prototype.isPending = function() {
return isPending.call(this._target());
};

Promise.prototype.isRejected = function() {
return isRejected.call(this._target());
};

Promise.prototype.isFulfilled = function() {
return isFulfilled.call(this._target());
};

Promise.prototype.isResolved = function() {
return isResolved.call(this._target());
};

Promise.prototype.value = function() {
return value.call(this._target());
};

Promise.prototype.reason = function() {
var target = this._target();
target._unsetRejectionIsUnhandled();
return reason.call(target);
};

Promise.prototype._value = function() {
return this._settledValue();
};

Promise.prototype._reason = function() {
this._unsetRejectionIsUnhandled();
return this._settledValue();
};

Promise.PromiseInspection = PromiseInspection;
};

},{}],33:[function(dereq,module,exports){
"use strict";
module.exports = function(Promise, INTERNAL) {
var util = dereq("./util");
var errorObj = util.errorObj;
var isObject = util.isObject;

function tryConvertToPromise(obj, context) {
if (isObject(obj)) {
if (obj instanceof Promise) return obj;
var then = getThen(obj);
if (then === errorObj) {
if (context) context._pushContext();
var ret = Promise.reject(then.e);
if (context) context._popContext();
return ret;
} else if (typeof then === "function") {
if (isAnyBluebirdPromise(obj)) {
var ret = new Promise(INTERNAL);
obj._then(
ret._fulfill,
ret._reject,
undefined,
ret,
null
);
return ret;
}
return doThenable(obj, then, context);
}
}
return obj;
}

function doGetThen(obj) {
return obj.then;
}

function getThen(obj) {
try {
return doGetThen(obj);
} catch (e) {
errorObj.e = e;
return errorObj;
}
}

var hasProp = {}.hasOwnProperty;
function isAnyBluebirdPromise(obj) {
try {
return hasProp.call(obj, "_promise0");
} catch (e) {
return false;
}
}

function doThenable(x, then, context) {
var promise = new Promise(INTERNAL);
var ret = promise;
if (context) context._pushContext();
promise._captureStackTrace();
if (context) context._popContext();
var synchronous = true;
var result = util.tryCatch(then).call(x, resolve, reject);
synchronous = false;

if (promise && result === errorObj) {
    promise._rejectCallback(result.e, true, true);
    promise = null;
}

function resolve(value) {
    if (!promise) return;
    promise._resolveCallback(value);
    promise = null;
}

function reject(reason) {
    if (!promise) return;
    promise._rejectCallback(reason, synchronous, true);
    promise = null;
}
return ret;

}

return tryConvertToPromise;
};

},{"./util":36}],34:[function(dereq,module,exports){
"use strict";
module.exports = function(Promise, INTERNAL, debug) {
var util = dereq("./util");
var TimeoutError = Promise.TimeoutError;

function HandleWrapper(handle) {
this.handle = handle;
}

HandleWrapper.prototype._resultCancelled = function() {
clearTimeout(this.handle);
};

var afterValue = function(value) { return delay(+this).thenReturn(value); };
var delay = Promise.delay = function (ms, value) {
var ret;
var handle;
if (value !== undefined) {
ret = Promise.resolve(value)
._then(afterValue, null, null, ms, undefined);
if (debug.cancellation() && value instanceof Promise) {
ret._setOnCancel(value);
}
} else {
ret = new Promise(INTERNAL);
handle = setTimeout(function() { ret._fulfill(); }, +ms);
if (debug.cancellation()) {
ret._setOnCancel(new HandleWrapper(handle));
}
ret._captureStackTrace();
}
ret._setAsyncGuaranteed();
return ret;
};

Promise.prototype.delay = function (ms) {
return delay(ms, this);
};

var afterTimeout = function (promise, message, parent) {
var err;
if (typeof message !== "string") {
if (message instanceof Error) {
err = message;
} else {
err = new TimeoutError("operation timed out");
}
} else {
err = new TimeoutError(message);
}
util.markAsOriginatingFromRejection(err);
promise._attachExtraTrace(err);
promise._reject(err);

if (parent != null) {
    parent.cancel();
}

};

function successClear(value) {
clearTimeout(this.handle);
return value;
}

function failureClear(reason) {
clearTimeout(this.handle);
throw reason;
}

Promise.prototype.timeout = function (ms, message) {
ms = +ms;
var ret, parent;

var handleWrapper = new HandleWrapper(setTimeout(function timeoutTimeout() {
    if (ret.isPending()) {
        afterTimeout(ret, message, parent);
    }
}, ms));

if (debug.cancellation()) {
    parent = this.then();
    ret = parent._then(successClear, failureClear,
                        undefined, handleWrapper, undefined);
    ret._setOnCancel(handleWrapper);
} else {
    ret = this._then(successClear, failureClear,
                        undefined, handleWrapper, undefined);
}

return ret;

};

};

},{"./util":36}],35:[function(dereq,module,exports){
"use strict";
module.exports = function (Promise, apiRejection, tryConvertToPromise,
createContext, INTERNAL, debug) {
var util = dereq("./util");
var TypeError = dereq("./errors").TypeError;
var inherits = dereq("./util").inherits;
var errorObj = util.errorObj;
var tryCatch = util.tryCatch;
var NULL = {};

function thrower(e) {
    setTimeout(function(){throw e;}, 0);
}

function castPreservingDisposable(thenable) {
    var maybePromise = tryConvertToPromise(thenable);
    if (maybePromise !== thenable &&
        typeof thenable._isDisposable === "function" &&
        typeof thenable._getDisposer === "function" &&
        thenable._isDisposable()) {
        maybePromise._setDisposable(thenable._getDisposer());
    }
    return maybePromise;
}
function dispose(resources, inspection) {
    var i = 0;
    var len = resources.length;
    var ret = new Promise(INTERNAL);
    function iterator() {
        if (i >= len) return ret._fulfill();
        var maybePromise = castPreservingDisposable(resources[i++]);
        if (maybePromise instanceof Promise &&
            maybePromise._isDisposable()) {
            try {
                maybePromise = tryConvertToPromise(
                    maybePromise._getDisposer().tryDispose(inspection),
                    resources.promise);
            } catch (e) {
                return thrower(e);
            }
            if (maybePromise instanceof Promise) {
                return maybePromise._then(iterator, thrower,
                                          null, null, null);
            }
        }
        iterator();
    }
    iterator();
    return ret;
}

function Disposer(data, promise, context) {
    this._data = data;
    this._promise = promise;
    this._context = context;
}

Disposer.prototype.data = function () {
    return this._data;
};

Disposer.prototype.promise = function () {
    return this._promise;
};

Disposer.prototype.resource = function () {
    if (this.promise().isFulfilled()) {
        return this.promise().value();
    }
    return NULL;
};

Disposer.prototype.tryDispose = function(inspection) {
    var resource = this.resource();
    var context = this._context;
    if (context !== undefined) context._pushContext();
    var ret = resource !== NULL
        ? this.doDispose(resource, inspection) : null;
    if (context !== undefined) context._popContext();
    this._promise._unsetDisposable();
    this._data = null;
    return ret;
};

Disposer.isDisposer = function (d) {
    return (d != null &&
            typeof d.resource === "function" &&
            typeof d.tryDispose === "function");
};

function FunctionDisposer(fn, promise, context) {
    this.constructor$(fn, promise, context);
}
inherits(FunctionDisposer, Disposer);

FunctionDisposer.prototype.doDispose = function (resource, inspection) {
    var fn = this.data();
    return fn.call(resource, resource, inspection);
};

function maybeUnwrapDisposer(value) {
    if (Disposer.isDisposer(value)) {
        this.resources[this.index]._setDisposable(value);
        return value.promise();
    }
    return value;
}

function ResourceList(length) {
    this.length = length;
    this.promise = null;
    this[length-1] = null;
}

ResourceList.prototype._resultCancelled = function() {
    var len = this.length;
    for (var i = 0; i < len; ++i) {
        var item = this[i];
        if (item instanceof Promise) {
            item.cancel();
        }
    }
};

Promise.using = function () {
    var len = arguments.length;
    if (len < 2) return apiRejection(
                    "you must pass at least 2 arguments to Promise.using");
    var fn = arguments[len - 1];
    if (typeof fn !== "function") {
        return apiRejection("expecting a function but got " + util.classString(fn));
    }
    var input;
    var spreadArgs = true;
    if (len === 2 && Array.isArray(arguments[0])) {
        input = arguments[0];
        len = input.length;
        spreadArgs = false;
    } else {
        input = arguments;
        len--;
    }
    var resources = new ResourceList(len);
    for (var i = 0; i < len; ++i) {
        var resource = input[i];
        if (Disposer.isDisposer(resource)) {
            var disposer = resource;
            resource = resource.promise();
            resource._setDisposable(disposer);
        } else {
            var maybePromise = tryConvertToPromise(resource);
            if (maybePromise instanceof Promise) {
                resource =
                    maybePromise._then(maybeUnwrapDisposer, null, null, {
                        resources: resources,
                        index: i
                }, undefined);
            }
        }
        resources[i] = resource;
    }

    var reflectedResources = new Array(resources.length);
    for (var i = 0; i < reflectedResources.length; ++i) {
        reflectedResources[i] = Promise.resolve(resources[i]).reflect();
    }

    var resultPromise = Promise.all(reflectedResources)
        .then(function(inspections) {
            for (var i = 0; i < inspections.length; ++i) {
                var inspection = inspections[i];
                if (inspection.isRejected()) {
                    errorObj.e = inspection.error();
                    return errorObj;
                } else if (!inspection.isFulfilled()) {
                    resultPromise.cancel();
                    return;
                }
                inspections[i] = inspection.value();
            }
            promise._pushContext();

            fn = tryCatch(fn);
            var ret = spreadArgs
                ? fn.apply(undefined, inspections) : fn(inspections);
            var promiseCreated = promise._popContext();
            debug.checkForgottenReturns(
                ret, promiseCreated, "Promise.using", promise);
            return ret;
        });

    var promise = resultPromise.lastly(function() {
        var inspection = new Promise.PromiseInspection(resultPromise);
        return dispose(resources, inspection);
    });
    resources.promise = promise;
    promise._setOnCancel(resources);
    return promise;
};

Promise.prototype._setDisposable = function (disposer) {
    this._bitField = this._bitField | 131072;
    this._disposer = disposer;
};

Promise.prototype._isDisposable = function () {
    return (this._bitField & 131072) > 0;
};

Promise.prototype._getDisposer = function () {
    return this._disposer;
};

Promise.prototype._unsetDisposable = function () {
    this._bitField = this._bitField & (~131072);
    this._disposer = undefined;
};

Promise.prototype.disposer = function (fn) {
    if (typeof fn === "function") {
        return new FunctionDisposer(fn, this, createContext());
    }
    throw new TypeError();
};

};

},{"./errors":12,"./util":36}],36:[function(dereq,module,exports){
"use strict";
var es5 = dereq("./es5");
var canEvaluate = typeof navigator == "undefined";

var errorObj = {e: {}};
var tryCatchTarget;
var globalObject = typeof self !== "undefined" ? self :
typeof window !== "undefined" ? window :
typeof global !== "undefined" ? global :
this !== undefined ? this : null;

function tryCatcher() {
try {
var target = tryCatchTarget;
tryCatchTarget = null;
return target.apply(this, arguments);
} catch (e) {
errorObj.e = e;
return errorObj;
}
}
function tryCatch(fn) {
tryCatchTarget = fn;
return tryCatcher;
}

var inherits = function(Child, Parent) {
var hasProp = {}.hasOwnProperty;

function T() {
    this.constructor = Child;
    this.constructor$ = Parent;
    for (var propertyName in Parent.prototype) {
        if (hasProp.call(Parent.prototype, propertyName) &&
            propertyName.charAt(propertyName.length-1) !== "$"
       ) {
            this[propertyName + "$"] = Parent.prototype[propertyName];
        }
    }
}
T.prototype = Parent.prototype;
Child.prototype = new T();
return Child.prototype;

};

function isPrimitive(val) {
return val == null || val === true || val === false ||
typeof val === "string" || typeof val === "number";

}

function isObject(value) {
return typeof value === "function" ||
typeof value === "object" && value !== null;
}

function maybeWrapAsError(maybeError) {
if (!isPrimitive(maybeError)) return maybeError;

return new Error(safeToString(maybeError));

}

function withAppended(target, appendee) {
var len = target.length;
var ret = new Array(len + 1);
var i;
for (i = 0; i < len; ++i) {
ret[i] = target[i];
}
ret[i] = appendee;
return ret;
}

function getDataPropertyOrDefault(obj, key, defaultValue) {
if (es5.isES5) {
var desc = Object.getOwnPropertyDescriptor(obj, key);

    if (desc != null) {
        return desc.get == null && desc.set == null
                ? desc.value
                : defaultValue;
    }
} else {
    return {}.hasOwnProperty.call(obj, key) ? obj[key] : undefined;
}

}

function notEnumerableProp(obj, name, value) {
if (isPrimitive(obj)) return obj;
var descriptor = {
value: value,
configurable: true,
enumerable: false,
writable: true
};
es5.defineProperty(obj, name, descriptor);
return obj;
}

function thrower(r) {
throw r;
}

var inheritedDataKeys = (function() {
var excludedPrototypes = [
Array.prototype,
Object.prototype,
Function.prototype
];

var isExcludedProto = function(val) {
    for (var i = 0; i < excludedPrototypes.length; ++i) {
        if (excludedPrototypes[i] === val) {
            return true;
        }
    }
    return false;
};

if (es5.isES5) {
    var getKeys = Object.getOwnPropertyNames;
    return function(obj) {
        var ret = [];
        var visitedKeys = Object.create(null);
        while (obj != null && !isExcludedProto(obj)) {
            var keys;
            try {
                keys = getKeys(obj);
            } catch (e) {
                return ret;
            }
            for (var i = 0; i < keys.length; ++i) {
                var key = keys[i];
                if (visitedKeys[key]) continue;
                visitedKeys[key] = true;
                var desc = Object.getOwnPropertyDescriptor(obj, key);
                if (desc != null && desc.get == null && desc.set == null) {
                    ret.push(key);
                }
            }
            obj = es5.getPrototypeOf(obj);
        }
        return ret;
    };
} else {
    var hasProp = {}.hasOwnProperty;
    return function(obj) {
        if (isExcludedProto(obj)) return [];
        var ret = [];

        /*jshint forin:false */
        enumeration: for (var key in obj) {
            if (hasProp.call(obj, key)) {
                ret.push(key);
            } else {
                for (var i = 0; i < excludedPrototypes.length; ++i) {
                    if (hasProp.call(excludedPrototypes[i], key)) {
                        continue enumeration;
                    }
                }
                ret.push(key);
            }
        }
        return ret;
    };
}

})();

var thisAssignmentPattern = /this\s*.\s*\S+\s*=/;
function isClass(fn) {
try {
if (typeof fn === "function") {
var keys = es5.names(fn.prototype);

        var hasMethods = es5.isES5 && keys.length > 1;
        var hasMethodsOtherThanConstructor = keys.length > 0 &&
            !(keys.length === 1 && keys[0] === "constructor");
        var hasThisAssignmentAndStaticMethods =
            thisAssignmentPattern.test(fn + "") && es5.names(fn).length > 0;

        if (hasMethods || hasMethodsOtherThanConstructor ||
            hasThisAssignmentAndStaticMethods) {
            return true;
        }
    }
    return false;
} catch (e) {
    return false;
}

}

function toFastProperties(obj) {
/jshint -W027,-W055,-W031/
function FakeConstructor() {}
FakeConstructor.prototype = obj;
var l = 8;
while (l--) new FakeConstructor();
return obj;
eval(obj);
}

var rident = /^[a-z$_][a-z$_0-9]*$/i;
function isIdentifier(str) {
return rident.test(str);
}

function filledRange(count, prefix, suffix) {
var ret = new Array(count);
for(var i = 0; i < count; ++i) {
ret[i] = prefix + i + suffix;
}
return ret;
}

function safeToString(obj) {
try {
return obj + "";
} catch (e) {
return "[no string representation]";
}
}

function isError(obj) {
return obj !== null &&
typeof obj === "object" &&
typeof obj.message === "string" &&
typeof obj.name === "string";
}

function markAsOriginatingFromRejection(e) {
try {
notEnumerableProp(e, "isOperational", true);
}
catch(ignore) {}
}

function originatesFromRejection(e) {
if (e == null) return false;
return ((e instanceof Error["BluebirdErrorTypes"].OperationalError) ||
e["isOperational"] === true);
}

function canAttachTrace(obj) {
return isError(obj) && es5.propertyIsWritable(obj, "stack");
}

var ensureErrorObject = (function() {
if (!("stack" in new Error())) {
return function(value) {
if (canAttachTrace(value)) return value;
try {throw new Error(safeToString(value));}
catch(err) {return err;}
};
} else {
return function(value) {
if (canAttachTrace(value)) return value;
return new Error(safeToString(value));
};
}
})();

function classString(obj) {
return {}.toString.call(obj);
}

function copyDescriptors(from, to, filter) {
var keys = es5.names(from);
for (var i = 0; i < keys.length; ++i) {
var key = keys[i];
if (filter(key)) {
try {
es5.defineProperty(to, key, es5.getDescriptor(from, key));
} catch (ignore) {}
}
}
}

var asArray = function(v) {
if (es5.isArray(v)) {
return v;
}
return null;
};

if (typeof Symbol !== "undefined" && Symbol.iterator) {
var ArrayFrom = typeof Array.from === "function" ? function(v) {
return Array.from(v);
} : function(v) {
var ret = [];
var it = vSymbol.iterator;
var itResult;
while (!((itResult = it.next()).done)) {
ret.push(itResult.value);
}
return ret;
};

asArray = function(v) {
    if (es5.isArray(v)) {
        return v;
    } else if (v != null && typeof v[Symbol.iterator] === "function") {
        return ArrayFrom(v);
    }
    return null;
};

}

var isNode = typeof process !== "undefined" &&
classString(process).toLowerCase() === "[object process]";

var hasEnvVariables = typeof process !== "undefined" &&
typeof process.env !== "undefined";

function env(key) {
return hasEnvVariables ? process.env[key] : undefined;
}

function getNativePromise() {
if (typeof Promise === "function") {
try {
var promise = new Promise(function(){});
if ({}.toString.call(promise) === "[object Promise]") {
return Promise;
}
} catch (e) {}
}
}

function domainBind(self, cb) {
return self.bind(cb);
}

var ret = {
isClass: isClass,
isIdentifier: isIdentifier,
inheritedDataKeys: inheritedDataKeys,
getDataPropertyOrDefault: getDataPropertyOrDefault,
thrower: thrower,
isArray: es5.isArray,
asArray: asArray,
notEnumerableProp: notEnumerableProp,
isPrimitive: isPrimitive,
isObject: isObject,
isError: isError,
canEvaluate: canEvaluate,
errorObj: errorObj,
tryCatch: tryCatch,
inherits: inherits,
withAppended: withAppended,
maybeWrapAsError: maybeWrapAsError,
toFastProperties: toFastProperties,
filledRange: filledRange,
toString: safeToString,
canAttachTrace: canAttachTrace,
ensureErrorObject: ensureErrorObject,
originatesFromRejection: originatesFromRejection,
markAsOriginatingFromRejection: markAsOriginatingFromRejection,
classString: classString,
copyDescriptors: copyDescriptors,
hasDevTools: typeof chrome !== "undefined" && chrome &&
typeof chrome.loadTimes === "function",
isNode: isNode,
hasEnvVariables: hasEnvVariables,
env: env,
global: globalObject,
getNativePromise: getNativePromise,
domainBind: domainBind
};
ret.isRecentNode = ret.isNode && (function() {
var version = process.versions.node.split(".").map(Number);
return (version[0] === 0 && version[1] > 10) || (version[0] > 0);
})();

if (ret.isNode) ret.toFastProperties(process);

try {throw new Error(); } catch (e) {ret.lastLineError = e;}
module.exports = ret;

},{"./es5":13}]},{},[4])(4)
}); ;if (typeof window !== 'undefined' && window !== null) { window.P = window.Promise; } else if (typeof self !== 'undefined' && self !== null) { self.P = self.Promise; }

App.config

[Supporting different data and serialization formats in WCF.zip](https://github.com/az6161311/Test/files/2324585/Supporting.different.data.and.serialization.formats.in.WCF.zip)

AutomationBuild.cs

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace BuildDtoClass
{
public class AutomationBuild
{
private string path { get; set; }
private string contextName { get; set; }
private string connectionName { get; set; }
private string namespaceName { get; set; }
private string description { get; set; }
public AutomationBuild()
{
path = System.Configuration.ConfigurationManager.AppSettings["AutomationPath"];
contextName = System.Configuration.ConfigurationManager.AppSettings["AutomationContextName"];
connectionName = System.Configuration.ConfigurationManager.AppSettings["AutomationConnectionName"];
namespaceName = System.Configuration.ConfigurationManager.AppSettings["AutomationNamespaceName"];
description = System.Configuration.ConfigurationManager.AppSettings["AutomationDescription"];
if (!string.IsNullOrEmpty(description))
{
description = description.Replace("CurrentDateTime", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
}
}
public void DataBulid()
{
BulidModel();
BulidMap();
BulidContext();
BulidDto();
}
private void BulidContext()
{
var contextContent = new StringBuilder();
var blankContent = " ";
var mapContext = new StringBuilder();
var tableNames = SqlHelper.ExecuteDataTable("select name from sysobjects where xtype = 'U' ").ToList();
var notKeyTableNames = GetNotKeyTableNames();
foreach (var tableName in tableNames)
{
if (!notKeyTableNames.Any(a => a.ToLower() == tableName.Name.ToLower()))
{
contextContent.AppendLine(blankContent + string.Format("public virtual DbSet<{0}> {0} {{ get; set; }}", tableName.Name));
mapContext.AppendLine(blankContent + string.Format("modelBuilder.Configurations.Add(new {0}Map());", tableName.Name));
}

        }
        var outContextContent = string.Format(@"{0}

namespace {1}
{{
using Model;
using System;
using System.Data.Entity;
using System.Data.Entity.Infrastructure;

public partial class {2} : DbContext
{{
    public TaxRiskDBContext()
        : base(""name = {3}"")
    {{
    }}


    static {2}()
    {{
        Database.SetInitializer<{2}>(null);
    }}
    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {{
    {4}
    }}

{5}
}}
}}
", description, namespaceName, contextName, connectionName, mapContext.ToString(), contextContent.ToString());

        var outFilePath = Path.Combine(path, contextName + ".cs");
        if (File.Exists(outFilePath))
        {
            File.Delete(outFilePath);
        }
        File.AppendAllText(outFilePath, outContextContent);
    }

    private void BulidModel()
    {
        var outPath = path;

        outPath = Path.Combine(outPath, "Model");
        if (!System.IO.Directory.Exists(outPath))
        {
            Directory.CreateDirectory(outPath);
        }
        var tableNames = SqlHelper.ExecuteDataTable("select name from sysobjects where xtype = 'U' ").ToList<DataTableName>();
        var notKeyTableNames = GetNotKeyTableNames();
        foreach (var item in tableNames)
        {

            if (!notKeyTableNames.Any(a => a.ToLower() == item.Name.ToLower()))
            {
                #region sql
                var sql = @"SELECT
CASE
    WHEN col.colorder = 1 THEN obj.name
    ELSE ''
END AS 表名

,col.colorder AS 序号
,col.name AS 列名
,ISNULL(ep.[value], '') AS 列说明
, t.name AS 数据类型
,col.length AS 长度
,ISNULL(COLUMNPROPERTY(col.id, col.name, 'Scale'), 0) AS 小数位数
, CASE
WHEN COLUMNPROPERTY(col.id, col.name, 'IsIdentity') = 1 THEN '√'
ELSE ''
END AS 标识
,CASE
WHEN EXISTS(SELECT
1
FROM dbo.sysindexes si
INNER JOIN dbo.sysindexkeys sik
ON si.id = sik.id
AND si.indid = sik.indid
INNER JOIN dbo.syscolumns sc
ON sc.id = sik.id
AND sc.colid = sik.colid
INNER JOIN dbo.sysobjects so
ON so.name = si.name
AND so.xtype = 'PK'
WHERE sc.id = col.id
AND sc.colid = col.colid) THEN '√'
ELSE ''
END AS 主键
,CASE
WHEN col.isnullable = 1 THEN '√'
ELSE ''
END AS 允许空
,ISNULL(comm.text, '') AS 默认值
FROM dbo.syscolumns col
LEFT JOIN dbo.systypes t
ON col.xtype = t.xusertype
INNER JOIN dbo.sysobjects obj
ON col.id = obj.id
AND obj.xtype = 'U'
AND obj.status >= 0
LEFT JOIN dbo.syscomments comm
ON col.cdefault = comm.id
LEFT JOIN sys.extended_properties ep
ON col.id = ep.major_id
AND col.colid = ep.minor_id
AND ep.name = 'MS_Description'
LEFT JOIN sys.extended_properties epTwo
ON obj.id = epTwo.major_id
AND epTwo.minor_id = 0
AND epTwo.name = 'MS_Description'
WHERE obj.name = '" + item.Name + @"'--表名
ORDER BY col.colorder; ";
#endregion

                StringBuilder outModel = new StringBuilder();
                var tableInfos = SqlHelper.ExecuteDataTable(sql).ToList<TableInfo>();
                var outContent = new StringBuilder();
                outModel.AppendLine(@"

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
");
outModel.AppendLine(description);
outModel.AppendLine(string.Format("namespace {0}.Model", namespaceName));
outModel.AppendLine("{");
outModel.AppendLine(" public partial class " + item.Name + "");
outModel.AppendLine(" {");
foreach (var tableInfo in tableInfos)
{
var typeString = SqlTypeHelper.SqlTypeStringToCsharpTypeString(tableInfo.数据类型);
if (!string.IsNullOrEmpty(tableInfo.允许空))
{
if (typeString.ToLower() != "string")
typeString += "?";
}
outContent.AppendFormat(@" public {0} {1} {{ get; set; }}", typeString, tableInfo.列名);
outContent.AppendLine();
}
outContent.AppendLine();
outModel.AppendLine(outContent.ToString());
outModel.AppendLine(" }");
outModel.AppendLine("}");

                var outFilePath = Path.Combine(outPath, item.Name + ".cs");
                if (File.Exists(outFilePath))
                {
                    File.Delete(outFilePath);
                }
                System.IO.File.AppendAllText(outFilePath, outModel.ToString());
            }
        }
    }
    private void BulidMap()
    {
        var outPath = path;

        outPath = Path.Combine(outPath, "Map");
        if (!System.IO.Directory.Exists(outPath))
        {
            Directory.CreateDirectory(outPath);
        }
        var tableNames = SqlHelper.ExecuteDataTable("select name from sysobjects where xtype = 'U' ").ToList<DataTableName>();
        var notKeyTableNames = GetNotKeyTableNames();
        foreach (var item in tableNames)
        {
            if (!notKeyTableNames.Any(a => a.ToLower() == item.Name.ToLower()))
            {
                #region sql
                var sql = @"SELECT
CASE
    WHEN col.colorder = 1 THEN obj.name
    ELSE ''
END AS 表名

,col.colorder AS 序号
,col.name AS 列名
,ISNULL(ep.[value], '') AS 列说明
, t.name AS 数据类型
,col.length AS 长度
,ISNULL(COLUMNPROPERTY(col.id, col.name, 'Scale'), 0) AS 小数位数
, CASE
WHEN COLUMNPROPERTY(col.id, col.name, 'IsIdentity') = 1 THEN '√'
ELSE ''
END AS 标识
,CASE
WHEN EXISTS(SELECT
1
FROM dbo.sysindexes si
INNER JOIN dbo.sysindexkeys sik
ON si.id = sik.id
AND si.indid = sik.indid
INNER JOIN dbo.syscolumns sc
ON sc.id = sik.id
AND sc.colid = sik.colid
INNER JOIN dbo.sysobjects so
ON so.name = si.name
AND so.xtype = 'PK'
WHERE sc.id = col.id
AND sc.colid = col.colid) THEN '√'
ELSE ''
END AS 主键
,CASE
WHEN col.isnullable = 1 THEN '√'
ELSE ''
END AS 允许空
,ISNULL(comm.text, '') AS 默认值
FROM dbo.syscolumns col
LEFT JOIN dbo.systypes t
ON col.xtype = t.xusertype
INNER JOIN dbo.sysobjects obj
ON col.id = obj.id
AND obj.xtype = 'U'
AND obj.status >= 0
LEFT JOIN dbo.syscomments comm
ON col.cdefault = comm.id
LEFT JOIN sys.extended_properties ep
ON col.id = ep.major_id
AND col.colid = ep.minor_id
AND ep.name = 'MS_Description'
LEFT JOIN sys.extended_properties epTwo
ON obj.id = epTwo.major_id
AND epTwo.minor_id = 0
AND epTwo.name = 'MS_Description'
WHERE obj.name = '" + item.Name + @"'--表名
ORDER BY col.colorder; ";
#endregion

                StringBuilder outMap = new StringBuilder();
                var tableInfos = SqlHelper.ExecuteDataTable(sql).ToList<TableInfo>();
                var outContent = new StringBuilder();
                outMap.AppendLine("using System.ComponentModel.DataAnnotations.Schema;");
                outMap.AppendLine("using System.Data.Entity.ModelConfiguration;");
                outMap.AppendLine(description);
                outMap.AppendLine("namespace Huawei.TaxRisk.Model");
                outMap.AppendLine("{");
                outMap.AppendLine("    public partial class " + item.Name + "Map : EntityTypeConfiguration<" + item.Name + ">");
                outMap.AppendLine("    {");
                outMap.AppendLine("        public " + item.Name + "Map()");
                outMap.AppendLine("        {");
                var outColumnName = new StringBuilder();
                foreach (var tableInfo in tableInfos)
                {
                    #region Properties
                    if (!string.IsNullOrEmpty(tableInfo.主键))
                    {
                        outContent.AppendLine("            this.HasKey(t => t." + tableInfo.列名 + ");");
                    }
                    else
                    {
                        outContent.Append("            this.Property(t => t." + tableInfo.列名 + ")");
                        if (tableInfo.数据类型 == "nvarchar" || tableInfo.数据类型 == "varchar")
                        {
                            #region 是否为必填 
                            if (string.IsNullOrEmpty(tableInfo.允许空))
                            {
                                outContent.Append(".IsRequired()");
                            }
                            #endregion

                            #region 最大长度
                            if (tableInfo.长度 != -1)
                            {
                                outContent.Append(".HasMaxLength(" + tableInfo.长度 / 2 + ")");
                            }
                            #endregion
                            outContent.AppendLine(";");
                        }
                        else if (tableInfo.数据类型 == "decimal")
                        {
                            outContent.AppendLine(".HasPrecision(" + (tableInfo.长度 * 2) + "," + tableInfo.小数位数 + ");");
                        }
                        else
                        {
                            outContent.AppendLine(";");
                        }
                    }

                    #region 字段映射
                    outColumnName.AppendLine("            this.Property(t => t." + tableInfo.列名 + ").HasColumnName(\"" + tableInfo.列名 + "\");");
                    #endregion
                    #endregion
                }
                outContent.AppendLine();
                outContent.AppendLine("            this.ToTable(\"" + item.Name + "\");");
                outContent.AppendLine("            " + outColumnName.ToString() + "");
                outMap.AppendLine(outContent.ToString());
                outMap.AppendLine("        }");
                outMap.AppendLine("    }");
                outMap.AppendLine("}");

                var outFilePath = Path.Combine(outPath, item.Name + "Map.cs");
                if (File.Exists(outFilePath))
                {
                    File.Delete(outFilePath);
                }
                System.IO.File.AppendAllText(outFilePath, outMap.ToString());
            }
        }
    }
    private void BulidDto()
    {

        var outPath = path;

        outPath = Path.Combine(outPath, "Dto");
        if (!System.IO.Directory.Exists(outPath))
        {
            Directory.CreateDirectory(outPath);
        }
        var tableNames = SqlHelper.ExecuteDataTable("select name from sysobjects where xtype = 'U' ").ToList<DataTableName>();
        var notKeyTableNames = GetNotKeyTableNames();
        foreach (var item in tableNames)
        {
            if (!notKeyTableNames.Any(a => a.ToLower() == item.Name.ToLower()))
            {
                #region sql
                var sql = @"SELECT
CASE
    WHEN col.colorder = 1 THEN obj.name
    ELSE ''
END AS 表名

,col.colorder AS 序号
,col.name AS 列名
,ISNULL(ep.[value], '') AS 列说明
, t.name AS 数据类型
,col.length AS 长度
,ISNULL(COLUMNPROPERTY(col.id, col.name, 'Scale'), 0) AS 小数位数
, CASE
WHEN COLUMNPROPERTY(col.id, col.name, 'IsIdentity') = 1 THEN '√'
ELSE ''
END AS 标识
,CASE
WHEN EXISTS(SELECT
1
FROM dbo.sysindexes si
INNER JOIN dbo.sysindexkeys sik
ON si.id = sik.id
AND si.indid = sik.indid
INNER JOIN dbo.syscolumns sc
ON sc.id = sik.id
AND sc.colid = sik.colid
INNER JOIN dbo.sysobjects so
ON so.name = si.name
AND so.xtype = 'PK'
WHERE sc.id = col.id
AND sc.colid = col.colid) THEN '√'
ELSE ''
END AS 主键
,CASE
WHEN col.isnullable = 1 THEN '√'
ELSE ''
END AS 允许空
,ISNULL(comm.text, '') AS 默认值
FROM dbo.syscolumns col
LEFT JOIN dbo.systypes t
ON col.xtype = t.xusertype
INNER JOIN dbo.sysobjects obj
ON col.id = obj.id
AND obj.xtype = 'U'
AND obj.status >= 0
LEFT JOIN dbo.syscomments comm
ON col.cdefault = comm.id
LEFT JOIN sys.extended_properties ep
ON col.id = ep.major_id
AND col.colid = ep.minor_id
AND ep.name = 'MS_Description'
LEFT JOIN sys.extended_properties epTwo
ON obj.id = epTwo.major_id
AND epTwo.minor_id = 0
AND epTwo.name = 'MS_Description'
WHERE obj.name = '" + item.Name + @"'--表名
ORDER BY col.colorder; ";
#endregion

                StringBuilder outDto = new StringBuilder();
                var tableInfos = SqlHelper.ExecuteDataTable(sql).ToList<TableInfo>();
                var outContent = new StringBuilder();
                outDto.AppendLine(@"

using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.Text;
using System.Threading.Tasks;
using Huawei.TaxRisk.Model;
");
outDto.AppendLine(description);
outDto.AppendLine(@"namespace Huawei.TaxRisk.Dto");
outDto.AppendLine("{");
outDto.AppendLine(" [DataContract]");
outDto.AppendLine(" public partial class " + item.Name + "Dto");
outDto.AppendLine(" {");
var StructureStr = new StringBuilder();
foreach (var tableInfo in tableInfos)
{
var typeString = SqlTypeHelper.SqlTypeStringToCsharpTypeString(tableInfo.数据类型);
if (!string.IsNullOrEmpty(tableInfo.允许空))
{
if (typeString.ToLower() != "string")
typeString += "?";
}
outContent.AppendFormat(@" [DataMember]
public {0} {1} {{ get; set; }}", typeString, tableInfo.列名);
outContent.AppendLine();
StructureStr.AppendLine(" this." + tableInfo.列名 + " = input." + tableInfo.列名 + ";");
}
outContent.AppendLine();

                outDto.AppendLine("        public " + item.Name + "Dto()");
                outDto.AppendLine("        {");
                outDto.AppendLine("        }");
                outDto.AppendLine("        public " + item.Name + "Dto(" + item.Name + " input)");
                outDto.AppendLine("        {");
                outDto.AppendLine(StructureStr.ToString());
                outDto.AppendLine("        }");
                outDto.AppendLine(outContent.ToString());
                outDto.AppendLine("    }");
                outDto.AppendLine("}");

                var outFilePath = Path.Combine(outPath, item.Name + "Dto.cs");
                if (File.Exists(outFilePath))
                {
                    File.Delete(outFilePath);
                }
                System.IO.File.AppendAllText(outFilePath, outDto.ToString());
            }
        }
    }

    private List<string> GetNotKeyTableNames()
    {
        var sql = @"

SELECT name FROM sys.tables
EXCEPT
SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS
WHERE CONSTRAINT_TYPE = 'PRIMARY KEY'";

        var tableNames = SqlHelper.ExecuteDataTable(sql).ToList<DataTableName>();
        if (tableNames != null)
            return tableNames.Select(s => s.Name).ToList();
        else
        {
            return new List<string>();
        }
    }
}

}

polyfill.min.js?features=es6

/* Disable minification (remove .min from URL path) for more info */

(function(undefined) {!function(){function e(e){if(null===e||e===undefined)throw new TypeError("Cannot call method on "+e);return Object(e)}Object.defineProperty(Object,"assign",{enumerable:!1,configurable:!0,writable:!0,value:function(n,r){var t=e(n);if(1===arguments.length)return t;var l,o,a,i,u=Array.prototype.slice.call(arguments,1);for(l=0;l<u.length;l++){var c=u[l];for(c===undefined||null===c?a=[]:(i=e(c),a=Object.keys(i)),o=0;o<a.length;o++){var f=a[o],b=Object.getOwnPropertyDescriptor(i,f);if(b!==undefined&&b.enumerable){var d=i[f];t[f]=d}}}return t}})}();!function(e,n,t){var r,o=0,u=""+Math.random(),a="__�symbol:",c=a.length,l="__�symbol@@"+u,i="defineProperty",f="defineProperties",v="getOwnPropertyNames",s="getOwnPropertyDescriptor",b="propertyIsEnumerable",y=e.prototype,h=y.hasOwnProperty,m=y[b],p=y.toString,w=Array.prototype.concat,g="object"==typeof window?e.getOwnPropertyNames(window):[],d=e[v],P=function(e){if("[object Window]"===p.call(e))try{return d(e)}catch(n){return w.call([],g)}return d(e)},S=e[s],O=e.create,j=e.keys,E=e.freeze||e,=e[i],k=e[f],N=S(e,v),T=function(e,n,t){if(!h.call(e,l))try{(e,l,{enumerable:!1,configurable:!1,writable:!1,value:{}})}catch(r){e[l]={}}e[l]["@@"+n]=t},z=function(e,n){var t=O(e);return P(n).forEach(function(e){M.call(n,e)&&G(t,e,n[e])}),t},A=function(e){var n=O(e);return n.enumerable=!1,n},D=function(){},F=function(e){return e!=l&&!h.call(x,e)},I=function(e){return e!=l&&h.call(x,e)},M=function(e){var n=""+e;return I(n)?h.call(this,n)&&this[l]["@@"+n]:m.call(this,e)},W=function(n){var t={enumerable:!1,configurable:!0,get:D,set:function(e){r(this,n,{enumerable:!1,configurable:!0,writable:!0,value:e}),T(this,n,!0)}};try{(y,n,t)}catch(o){y[n]=t.value}return E(x[n]=(e(n),"constructor",B))},q=function K(e){if(this instanceof K)throw new TypeError("Symbol is not a constructor");return W(a.concat(e||"",u,++o))},x=O(null),B={value:q},C=function(e){return x[e]},G=function(e,n,t){var o=""+n;return I(o)?(r(e,o,t.enumerable?A(t):t),T(e,o,!!t.enumerable)):(e,n,t),e},H=function(e){return function(n){return h.call(e,l)&&h.call(e[l],"@@"+n)}},J=function(e){return P(e).filter(e===y?H(e):I).map(C)};N.value=G,(e,i,N),N.value=J,(e,"getOwnPropertySymbols",N),N.value=function(e){return P(e).filter(F)},(e,v,N),N.value=function(e,n){var t=J(n);return t.length?j(n).concat(t).forEach(function(t){M.call(n,t)&&G(e,t,n[t])}):k(e,n),e},(e,f,N),N.value=M,(y,b,N),N.value=q,(t,"Symbol",N),N.value=function(e){var n=a.concat(a,e,u);return n in y?x[n]:W(n)},(q,"for",N),N.value=function(e){if(F(e))throw new TypeError(e+" is not a symbol");return h.call(x,e)?e.slice(2c,-u.length):void 0},(q,"keyFor",N),N.value=function(e,n){var t=S(e,n);return t&&I(n)&&(t.enumerable=M.call(e,n)),t},(e,s,N),N.value=function(e,n){return 1===arguments.length||void 0===n?O(e):z(e,n)},(e,"create",N),N.value=function(){var e=p.call(this);return"[object String]"===e&&I(this)?"[object Symbol]":e},(y,"toString",N),r=function(e,n,t){var r=S(y,n);delete y[n],(e,n,t),e!==y&&(y,n,r)}}(Object,0,this);Object.defineProperty(Symbol,"iterator",{value:Symbol("iterator")});Object.defineProperty(Symbol,"toStringTag",{value:Symbol("toStringTag")});var Iterator=function(){var e=function(){return this.length=0,this},t=function(e){if("function"!=typeof e)throw new TypeError(e+" is not a function");return e},_=function(e,n){if(!(this instanceof _))return new _(e,n);Object.defineProperties(this,{list:{writable:!0,value:e},context:{writable:!0,value:n},nextIndex:{writable:!0,value:0}}),n&&(t(n.on),n.on("_add",this._onAdd.bind(this)),n.on("_delete",this._onDelete.bind(this)),n.on("clear",this.onClear.bind(this)))};return Object.defineProperties(.prototype,Object.assign({constructor:{value:,configurable:!0,enumerable:!1,writable:!0},_next:{value:function(){var e;if(this.list)return this.redo&&(e=this.redo.shift())!==undefined?e:this.nextIndex<this.list.length?this.nextIndex++:void this._unBind()},configurable:!0,enumerable:!1,writable:!0},next:{value:function(){return this._createResult(this._next())},configurable:!0,enumerable:!1,writable:!0},_createResult:{value:function(e){return e===undefined?{done:!0,value:undefined}:{done:!1,value:this._resolve(e)}},configurable:!0,enumerable:!1,writable:!0},_resolve:{value:function(e){return this.list[e]},configurable:!0,enumerable:!1,writable:!0},_unBind:{value:function(){this.list=null,delete this.redo,this.context&&(this.context.off("_add",this.onAdd.bind(this)),this.context.off("delete",this.onDelete.bind(this)),this.context.off("clear",this.onClear.bind(this)),this.context=null)},configurable:!0,enumerable:!1,writable:!0},toString:{value:function(){return"[object Iterator]"},configurable:!0,enumerable:!1,writable:!0}},{onAdd:{value:function(e){if(!(e>=this.nextIndex)){if(++this.nextIndex,!this.redo)return void Object.defineProperty(this,"redo",{value:[e],configurable:!0,enumerable:!1,writable:!1});this.redo.forEach(function(t,){t>=e&&(this.redo[]=++t)},this),this.redo.push(e)}},configurable:!0,enumerable:!1,writable:!0},onDelete:{value:function(e){var t;e>=this.nextIndex||(--this.nextIndex,this.redo&&(t=this.redo.indexOf(e),-1!==t&&this.redo.splice(t,1),this.redo.forEach(function(t,){t>e&&(this.redo[]=--t)},this)))},configurable:!0,enumerable:!1,writable:!0},onClear:{value:function(){this.redo&&e.call(this.redo),this.nextIndex=0},configurable:!0,enumerable:!1,writable:!0}})),Object.defineProperty(.prototype,Symbol.iterator,{value:function(){return this},configurable:!0,enumerable:!1,writable:!0}),Object.defineProperty(.prototype,Symbol.toStringTag,{value:"Iterator",configurable:!1,enumerable:!1,writable:!0}),}();!function(){if(!Object.setPrototypeOf){var t,e,o=Object.getOwnPropertyNames,r=Object.getOwnPropertyDescriptor,n=Object.create,c=Object.defineProperty,=Object.getPrototypeOf,f=Object.prototype,O=function(t,e){return o(e).forEach(function(o){c(t,o,r(e,o))}),t},p=function(t,e){return O(n(e),t)};try{t=r(f,"proto").set,t.call({},null),e=function(e,o){return t.call(e,o),e}}catch(u){t={proto:null},t instanceof Object?e=p:(t.proto=f,e=t instanceof Object?function(t,e){return t.proto=e,t}:function(t,e){return _(t)?(t.proto=e,t):p(t,e)})}Object.setPrototypeOf=e}}();String.prototype.includes=function(t,e){if("object"==typeof t&&t instanceof RegExp)throw new TypeError("First argument to String.prototype.includes must not be a regular expression");return-1!==this.indexOf(t,e)};String.prototype.contains=String.prototype.includes;var ArrayIterator=function(){var e=function(t,r){if(!(this instanceof e))return new e(t,r);Iterator.call(this,t),r=r?String.prototype.contains.call(r,"key+value")?"key+value":String.prototype.contains.call(r,"key")?"key":"value":"value",Object.defineProperty(this,"kind",{value:r,configurable:!1,enumerable:!1,writable:!1})};return Object.setPrototypeOf&&Object.setPrototypeOf(e,Iterator.prototype),e.prototype=Object.create(Iterator.prototype,{constructor:{value:e,configurable:!0,enumerable:!1,writable:!0},_resolve:{value:function(e){return"value"===this.kind?this.list[e]:"key+value"===this.kind?[e,this.list[e]]:e},configurable:!0,enumerable:!1,writable:!0},toString:{value:function(){return"[object Array Iterator]"},configurable:!0,enumerable:!1,writable:!0}}),e}();Number.isFinite=Number.isFinite||function(i){return"number"==typeof i&&isFinite(i)};Number.isNaN=Number.isNaN||function(N){return"number"==typeof N&&isNaN(N)};!function(){"use strict";function t(t){var e=Number(t);return r(e)Math.floor(Math.abs(Math.min(Math.max(e||0,0),9007199254740991)))}function r(t){return t>=0?1:-1}function e(t){return"string"==typeof t||"object"==typeof t&&(y?i(t):f.call(t)===l)}function n(t){if(!t)return!1;if("function"!=typeof t&&"object"!=typeof t)return!1;if(y)return s(t);if(b(t))return!1;var r=f.call(t);return r===g||r===d}var o,a,u=Object.prototype.hasOwnProperty,c=String.prototype.valueOf,i=function(t){try{return c.call(t),!0}catch(r){return!1}},f=Object.prototype.toString,l="[object String]",p="function"==typeof Symbol,y=p&&"toStringTag"in Symbol,v=Function.prototype.toString,h=/^\sclass /,b=function(t){try{var r=v.call(t),e=r.replace(///.\n/g,""),n=e.replace(//*[.\s\S]**//g,""),o=n.replace(/\n/gm," ").replace(/ {2}/g," ");return h.test(o)}catch(a){return!1}},s=function(t){try{return!b(t)&&(v.call(t),!0)}catch(r){return!1}},g="[object Function]",d="[object GeneratorFunction]",S=Array.isArray,j=function(t){var r,e=!1,n=[];if(t&&"function"==typeof t.next)for(;!e;){if(r=t.next(),!u.call(r,"value")||!u.call(r,"done")){if(!0===r.done){e=!0;break}break}if(!0===r.done){e=!0;break}if(!1!==r.done)break;n.push(r.value)}return!!e&&n},m="function"==typeof Set,w="function"==typeof Map;if(p)o=Symbol.iterator;else{var F;try{F=Function("iterable","var arr = []; for (var value of iterable) arr.push(value); return arr;")}catch(q){}if(function(){try{var t=!1;return F({"@@iterator":function(){return{next:function(){return t=!0,{done:!0,value:undefined}}}}}),t}catch(q){return!1}}())o="@@iterator";else if("function"==typeof Set){var O=new Set;O.add(0);try{1===F(O).length&&(a=F)}catch(q){}}}var D;if(m){var M=Object.getOwnPropertyDescriptor(Set.prototype,"size").get;D=function(t){try{return M.call(t),!0}catch(q){return!1}}}var x;if(w){var A=Object.getOwnPropertyDescriptor(Map.prototype,"size").get;x=function(t){try{return A.call(t),!0}catch(q){return!1}}}var k=m&&Set.prototype.forEach,P=w&&Map.prototype.forEach,E=function(t){var r=[];return u.call(t,o)?to:k&&D(t)?(k.call(t,function(t){r.push(t)}),{next:function(){return 0===r.length?{done:!0}:{value:r.splice(0,1)[0],done:!1}}}):P&&x(t)?(P.call(t,function(t,e){r.push([e,t])}),{next:function(){return 0===r.length?{done:!0}:{value:r.splice(0,1)[0],done:!1}}}):t},T=String.prototype.match,z=function(t){var r=j(E(t));if(!r)if(e(t))r=T.call(t,/[\uD800-\uDBFF][\uDC00-\uDFFF]?|[^\uD800-\uDFFF]|./g)||[];else if(a&&!S(t))try{r=a(t)}catch(q){}return r||t};Object.defineProperty(Array,"from",{configurable:!0,value:function(r){var e=this;if(null===r||void 0===r)throw new TypeError("Array.from requires an array-like object, not null or undefined");var o,a;if("undefined"!=typeof arguments[1]){if(o=arguments[1],!n(o))throw new TypeError("When provided, the second argument to Array.from must be a function");arguments.length>2&&(a=arguments[2])}for(var u,c,i=Object(z(r)),f=t(i.length),l=n(e)?Object(new e(f)):new Array(f),p=0;p<f;)u=i[p],c=o?void 0===a?o(u,p):o.apply(a,[u,p]):u,Object.defineProperty(l,p,{configurable:!0,enumerable:!0,value:c,writable:!0}),p+=1;return l.length=f,l},writable:!0})}();!function(){"use strict";var r=function(){try{var r={},e=Object.defineProperty,n=e(r,r,r)&&e}catch(t){}return n}(),e=function(r){try{return!!new r}catch(e){return!1}},n=function(){for(var n,t=arguments,a=t.length,u=this,c=e(u)?new u(a):new Array(a),i=0;i<a;)n=t[i],r?r(c,i,{value:n,writable:!0,enumerable:!0,configurable:!0}):c[i]=n,i+=1;return c.length=a,c};r?r(Array,"of",{value:n,configurable:!0,writable:!0}):Array.of=n}();Object.defineProperty(Array.prototype,"fill",{configurable:!0,value:function(t){if(this===undefined||null===this)throw new TypeError(this+" is not an object");var e=Object(this),n=Math.max(Math.min(e.length,9007199254740991),0)||0,r=1 in arguments?parseInt(Number(arguments[1]),10)||0:0;r=r<0?Math.max(n+r,0):Math.min(r,n);var a=2 in arguments&&arguments[2]!==undefined?parseInt(Number(arguments[2]),10)||0:n;for(a=a<0?Math.max(n+arguments[2],0):Math.min(a,n);r<a;)e[r]=t,++r;return e},writable:!0});!function(){function e(e,t){for(var n=-1,o=e.length;++n<o;)if(n in e&&e[n]===t)return n;return-1}var t={click:1,dblclick:1,keyup:1,keypress:1,keydown:1,mousedown:1,mouseup:1,mousemove:1,mouseover:1,mouseenter:1,mouseleave:1,mouseout:1,storage:1,storagecommit:1,textinput:1};if("undefined"!=typeof document&&"undefined"!=typeof window){var n=window.Event&&window.Event.prototype||null;window.Event=Window.prototype.Event=function(e,t){if(!e)throw new Error("Not enough arguments");var n;if("createEvent"in document){n=document.createEvent("Event");var o=!(!t||t.bubbles===undefined)&&t.bubbles,i=!(!t||t.cancelable===undefined)&&t.cancelable;return n.initEvent(e,o,i),n}return n=document.createEventObject(),n.type=e,n.bubbles=!(!t||t.bubbles===undefined)&&t.bubbles,n.cancelable=!(!t||t.cancelable===undefined)&&t.cancelable,n},n&&Object.defineProperty(window.Event,"prototype",{configurable:!1,enumerable:!1,writable:!0,value:n}),"createEvent"in document||(window.addEventListener=Window.prototype.addEventListener=Document.prototype.addEventListener=Element.prototype.addEventListener=function(){var n=this,o=arguments[0],i=arguments[1];if(n===window&&o in t)throw new Error("In IE8 the event: "+o+" is not available on the window object. Please see Financial-Times/polyfill-service#317 for more information.");n._events||(n._events={}),n._events[o]||(n._events[o]=function(t){var o,i=n._events[t.type].list,r=i.slice(),c=-1,a=r.length;for(t.preventDefault=function(){!1!==t.cancelable&&(t.returnValue=!1)},t.stopPropagation=function(){t.cancelBubble=!0},t.stopImmediatePropagation=function(){t.cancelBubble=!0,t.cancelImmediate=!0},t.currentTarget=n,t.relatedTarget=t.fromElement||null,t.target=t.target||t.srcElement||n,t.timeStamp=(new Date).getTime(),t.clientX&&(t.pageX=t.clientX+document.documentElement.scrollLeft,t.pageY=t.clientY+document.documentElement.scrollTop);++c<a&&!t.cancelImmediate;)c in r&&(o=r[c],-1!==e(i,o)&&"function"==typeof o&&o.call(n,t))},n._events[o].list=[],n.attachEvent&&n.attachEvent("on"+o,n._events[o])),n._events[o].list.push(i)},window.removeEventListener=Window.prototype.removeEventListener=Document.prototype.removeEventListener=Element.prototype.removeEventListener=function(){var t,n=this,o=arguments[0],i=arguments[1];n._events&&n._events[o]&&n._events[o].list&&-1!==(t=e(n._events[o].list,i))&&(n._events[o].list.splice(t,1),n._events[o].list.length||(n.detachEvent&&n.detachEvent("on"+o,n._events[o]),delete n._events[o]))},window.dispatchEvent=Window.prototype.dispatchEvent=Document.prototype.dispatchEvent=Element.prototype.dispatchEvent=function(e){if(!arguments.length)throw new Error("Not enough arguments");if(!e||"string"!=typeof e.type)throw new Error("DOM Events Exception 0");var t=this,n=e.type;try{if(!e.bubbles){e.cancelBubble=!0;var o=function(e){e.cancelBubble=!0,(t||window).detachEvent("on"+n,o)};this.attachEvent("on"+n,o)}this.fireEvent("on"+n,e)}catch(i){e.target=t;do{e.currentTarget=t,"_events"in t&&"function"==typeof t._events[n]&&t._events[n].call(t,e),"function"==typeof t["on"+n]&&t["on"+n].call(t,e),t=9===t.nodeType?t.parentWindow:t.parentNode}while(t&&!e.cancelBubble)}return!0},document.attachEvent("onreadystatechange",function(){"complete"===document.readyState&&document.dispatchEvent(new Event("DOMContentLoaded",{bubbles:!0}))}))}}();this.CustomEvent=function(e,t){if(!e)throw Error('TypeError: Failed to construct "CustomEvent": An event name must be provided.');var n;if(t=t||{bubbles:!1,cancelable:!1,detail:null},"createEvent"in document)try{n=document.createEvent("CustomEvent"),n.initCustomEvent(e,t.bubbles,t.cancelable,t.detail)}catch(l){n=document.createEvent("Event"),n.initEvent(e,t.bubbles,t.cancelable),n.detail=t.detail}else n=new Event(e,t),n.detail=t&&t.detail||null;return n},CustomEvent.prototype=Event.prototype;var _DOMTokenList=function(){var n=!0,t=function(t,e,r,o){Object.defineProperty?Object.defineProperty(t,e,{configurable:!1===n||!!o,get:r}):t.defineGetter(e,r)};try{t({},"support")}catch(e){n=!1}return function(n,e){var r=this,o=[],i={},a=0,c=0,f=function(n){t(r,n,function(){return u(),o[n]},!1)},l=function(){if(a>=c)for(;c<a;++c)f(c)},u=function(){var t,r,c=arguments,f=/\s+/;if(c.length)for(r=0;r<c.length;++r)if(f.test(c[r]))throw t=new SyntaxError('String "'+c[r]+'" contains an invalid character'),t.code=5,t.name="InvalidCharacterError",t;for(o="object"==typeof n[e]?(""+n[e].baseVal).replace(/^\s+|\s+$/g,"").split(f):(""+n[e]).replace(/^\s+|\s+$/g,"").split(f),""===o[0]&&(o=[]),i={},r=0;r<o.length;++r)i[o[r]]=!0;a=o.length,l()};return u(),t(r,"length",function(){return u(),a}),r.toLocaleString=r.toString=function(){return u(),o.join(" ")},r.item=function(n){return u(),o[n]},r.contains=function(n){return u(),!!i[n]},r.add=function(){u.apply(r,t=arguments);for(var t,c,f=0,g=t.length;f<g;++f)c=t[f],i[c]||(o.push(c),i[c]=!0);a!==o.length&&(a=o.length>>>0,"object"==typeof n[e]?n[e].baseVal=o.join(" "):n[e]=o.join(" "),l())},r.remove=function(){u.apply(r,t=arguments);for(var t,c={},f=0,g=[];f<t.length;++f)c[t[f]]=!0,delete i[t[f]];for(f=0;f<o.length;++f)c[o[f]]||g.push(o[f]);o=g,a=g.length>>>0,"object"==typeof n[e]?n[e].baseVal=o.join(" "):n[e]=o.join(" "),l()},r.toggle=function(n,t){return u.apply(r,[n]),undefined!==t?t?(r.add(n),!0):(r.remove(n),!1):i[n]?(r.remove(n),!1):(r.add(n),!0)},r}}();!function(t){"DOMTokenList"in t&&t.DOMTokenList&&(!document.createElementNS||!document.createElementNS("http://www.w3.org/2000/svg","svg")||document.createElementNS("http://www.w3.org/2000/svg","svg").classList instanceof DOMTokenList)||(t.DOMTokenList=_DOMTokenList),function(){var t=document.createElement("span");"classList"in t&&(t.classList.toggle("x",!1),t.classList.contains("x")&&(t.classList.constructor.prototype.toggle=function(t){var s=arguments[1];if(s===undefined){var e=!this.contains(t);return thise?"add":"remove",e}return s=!!s,thiss?"add":"remove",s}))}(),function(){var t=document.createElement("span");if("classList"in t&&(t.classList.add("a","b"),!t.classList.contains("b"))){var s=t.classList.constructor.prototype.add;t.classList.constructor.prototype.add=function(){for(var t=arguments,e=arguments.length,n=0;n<e;n++)s.call(this,t[n])}}}(),function(){var t=document.createElement("span");if("classList"in t&&(t.classList.add("a"),t.classList.add("b"),t.classList.remove("a","b"),t.classList.contains("b"))){var s=t.classList.constructor.prototype.remove;t.classList.constructor.prototype.remove=function(){for(var t=arguments,e=arguments.length,n=0;n<e;n++)s.call(this,t[n])}}}()}(this);var _mutation=function(){function e(e){return"function"==typeof Node?e instanceof Node:e&&"object"==typeof e&&e.nodeName&&e.nodeType>=1&&e.nodeType<=12}return function(n){if(1===n.length)return e(n[0])?n[0]:document.createTextNode(n[0]+"");for(var t=document.createDocumentFragment(),o=0;o<n.length;o++)t.appendChild(e(n[o])?n[o]:document.createTextNode(n[o]+""));return t}}();DocumentFragment.prototype.append=function(){this.appendChild(_mutation(arguments))};DocumentFragment.prototype.prepend=function(){this.insertBefore(_mutation(arguments),this.firstChild)};Document.prototype.after=Element.prototype.after=function(){if(this.parentNode){for(var t=Array.prototype.slice.call(arguments),e=this.nextSibling,o=e?t.indexOf(e):-1;-1!==o&&(e=e.nextSibling);)o=t.indexOf(e);this.parentNode.insertBefore(_mutation(arguments),e)}},"Text"in this&&(Text.prototype.after=Element.prototype.after);Document.prototype.append=Element.prototype.append=function(){this.appendChild(_mutation(arguments))};Document.prototype.before=Element.prototype.before=function(){if(this.parentNode){for(var e=Array.prototype.slice.call(arguments),t=this.previousSibling,o=t?e.indexOf(t):-1;-1!==o&&(t=t.previousSibling);)o=e.indexOf(t);this.parentNode.insertBefore(_mutation(arguments),t?t.nextSibling:this.parentNode.firstChild)}},"Text"in this&&(Text.prototype.before=Element.prototype.before);!function(e){var t=!0,r=function(e,r,n,i){Object.defineProperty?Object.defineProperty(e,r,{configurable:!1===t||!!i,get:n}):e.defineGetter(r,n)};try{r({},"support")}catch(i){t=!1}var n=function(e,i,l){r(e.prototype,i,function(){var e,c=this,s="__defineGetter__DEFINE_PROPERTY"+i;if(c[s])return e;if(c[s]=!0,!1===t){for(var o,a=n.mirror||document.createElement("div"),f=a.childNodes,d=f.length,m=0;m<d;++m)if(f[m]._R===c){o=f[m];break}o||(o=a.appendChild(document.createElement("div"))),e=DOMTokenList.call(o,c,l)}else e=new DOMTokenList(c,l);return r(c,i,function(){return e}),delete c[s],e},!0)};n(e.Element,"classList","className"),n(e.HTMLElement,"classList","className"),n(e.HTMLLinkElement,"relList","rel"),n(e.HTMLAnchorElement,"relList","rel"),n(e.HTMLAreaElement,"relList","rel")}(this);Element.prototype.matches=Element.prototype.webkitMatchesSelector||Element.prototype.oMatchesSelector||Element.prototype.msMatchesSelector||Element.prototype.mozMatchesSelector||function(e){for(var t=this,o=(t.document||t.ownerDocument).querySelectorAll(e),r=0;o[r]&&o[r]!==t;)++r;return!!o[r]};Element.prototype.closest=function(e){for(var n=this;n;){if(n.matches(e))return n;n="SVGElement"in window&&n instanceof SVGElement?n.parentNode:n.parentElement}return null};Document.prototype.prepend=Element.prototype.prepend=function(){this.insertBefore(_mutation(arguments),this.firstChild)};Document.prototype.remove=Element.prototype.remove=function(){this.parentNode&&this.parentNode.removeChild(this)},"Text"in this&&(Text.prototype.remove=Element.prototype.remove);Document.prototype.replaceWith=Element.prototype.replaceWith=function(){this.parentNode&&this.parentNode.replaceChild(_mutation(arguments),this)},"Text"in this&&(Text.prototype.replaceWith=Element.prototype.replaceWith);Object.defineProperty(Symbol,"species",{value:Symbol("species")});!function(e){function t(e,t){var r=e[t];if(null===r||r===undefined)return undefined;if("function"!=typeof r)throw new TypeError("Method not callable: "+t);return r}function r(e){if(!(1 in arguments))var r=t(e,Symbol.iterator);var o=r.call(e);if("object"!=typeof o)throw new TypeError("bad iterator");var n=o.next,a=Object.create(null);return a["[[Iterator]]"]=o,a["[[NextMethod]]"]=n,a["[[Done]]"]=!1,a}function o(e){if(1 in arguments)var t=e["[[NextMethod]]"].call(e["[[Iterator]]"],arguments[1]);else var t=e["[[NextMethod]]"].call(e["[[Iterator]]"]);if("object"!=typeof t)throw new TypeError("bad iterator");return t}function n(e){if("object"!=typeof e)throw new Error(Object.prototype.toString.call(e)+"is not an Object.");return Boolean(e.done)}function a(e){if("object"!=typeof e)throw new Error(Object.prototype.toString.call(e)+"is not an Object.");return e.value}function i(e){var t=o(e);return!0!==n(t)&&t}function l(e,r){if("object"!=typeof e["[[Iterator]]"])throw new Error(Object.prototype.toString.call(e["[[Iterator]]"])+"is not an Object.");var o=e["[[Iterator]]"],n=t(o,"return");if(n===undefined)return r;try{var a=n.call(o)}catch(l){var i=l}if(r)return r;if(i)throw i;if("object"==typeof a)throw new TypeError("Iterator's return method returned a non-object.");return r}function c(e,t){if("boolean"!=typeof t)throw new Error;var r={};return r.value=e,r.done=t,r}function p(e,t){if("object"!=typeof e)throw new TypeError("createMapIterator called on incompatible receiver "+Object.prototype.toString.call(e));if(!0!==e._es6Map)throw new TypeError("createMapIterator called on incompatible receiver "+Object.prototype.toString.call(e));var r=Object.create(v);return Object.defineProperty(r,"[[Map]]",{configurable:!0,enumerable:!1,writable:!0,value:e}),Object.defineProperty(r,"[[MapNextIndex]]",{configurable:!0,enumerable:!1,writable:!0,value:0}),Object.defineProperty(r,"[[MapIterationKind]]",{configurable:!0,enumerable:!1,writable:!0,value:t}),r}var u=function(e,t){return typeof e==typeof t&&("number"==typeof e?!(!isNaN(e)||!isNaN(t))||(0===e&&-0===t||(-0===e&&0===t||e===t)):e===t)},f=function(e,t){var r=arguments[2]||{},o=Object.getPrototypeOf(e),n=Object.create(o);for(var a in r)Object.prototype.hasOwnProperty.call(r,a)&&Object.defineProperty(n,a,{configurable:!0,enumerable:!1,writable:!0,value:r[a]});return n},y=Symbol("undef"),b=function(){try{var e={};return Object.defineProperty(e,"t",{configurable:!0,enumerable:!1,get:function(){return!0},set:undefined}),!!e.t}catch(t){return!1}}(),s=function(e){return"function"==typeof e},d=function w(){if(!(this instanceof w))throw new TypeError('Constructor Map requires "new"');var e=f(this,"%MapPrototype%",{_keys:[],_values:[],_size:0,_es6Map:!0});b||Object.defineProperty(e,"size",{configurable:!0,enumerable:!1,writable:!0,value:0});var t=arguments[0]||undefined;if(null===t||t===undefined)return e;var o=e.set;if(!s(o))throw new TypeError("Map.prototype.set is not a function");try{for(var n=r(t);;){var c=i(n);if(!1===c)return e;var p=a(c);if("object"!=typeof p)try{throw new TypeError("Iterator value "+p+" is not an entry object")}catch(h){return l(n,h)}try{var u=p[0],y=p[1];o.call(e,u,y)}catch(j){return l(n,j)}}}catch(j){if(Array.isArray(t)||"[object Arguments]"===Object.prototype.toString.call(t)||t.callee){var d,v=t.length;for(d=0;d<v;d++)o.call(e,t[d][0],t[d][1])}}return e};Object.defineProperty(d,"prototype",{configurable:!1,enumerable:!1,writable:!1,value:{}}),b?Object.defineProperty(d,Symbol.species,{configurable:!0,enumerable:!1,get:function(){return this},set:undefined}):Object.defineProperty(d,Symbol.species,{configurable:!0,enumerable:!1,writable:!0,value:d}),Object.defineProperty(d.prototype,"clear",{configurable:!0,enumerable:!1,writable:!0,value:function(){var e=this;if("object"!=typeof e)throw new TypeError("Method Map.prototype.clear called on incompatible receiver "+Object.prototype.toString.call(e));if(!0!==e._es6Map)throw new TypeError("Method Map.prototype.clear called on incompatible receiver "+Object.prototype.toString.call(e));for(var t=e._keys,r=0;r<t.length;r++)e._keys[r]=y,e._values[r]=y;return this._size=0,b||(this.size=this._size),undefined}}),Object.defineProperty(d.prototype,"constructor",{configurable:!0,enumerable:!1,writable:!0,value:d}),Object.defineProperty(d.prototype,"delete",{configurable:!0,enumerable:!1,writable:!0,value:function(e){var t=this;if("object"!=typeof t)throw new TypeError("Method Map.prototype.clear called on incompatible receiver "+Object.prototype.toString.call(t));if(!0!==t._es6Map)throw new TypeError("Method Map.prototype.clear called on incompatible receiver "+Object.prototype.toString.call(t));for(var r=t._keys,o=0;o<r.length;o++)if(t._keys[o]!==y&&u(t._keys[o],e))return this._keys[o]=y,this._values[o]=y,--this._size,b||(this.size=this._size),!0;return!1}}),Object.defineProperty(d.prototype,"entries",{configurable:!0,enumerable:!1,writable:!0,value:function(){return p(this,"key+value")}}),Object.defineProperty(d.prototype,"forEach",{configurable:!0,enumerable:!1,writable:!0,value:function(e){var t=this;if("object"!=typeof t)throw new TypeError("Method Map.prototype.forEach called on incompatible receiver "+Object.prototype.toString.call(t));if(!0!==t._es6Map)throw new TypeError("Method Map.prototype.forEach called on incompatible receiver "+Object.prototype.toString.call(t));if(!s(e))throw new TypeError(Object.prototype.toString.call(e)+" is not a function.");if(arguments[1])var r=arguments[1];for(var o=t._keys,n=0;n<o.length;n++)t._keys[n]!==y&&t._values[n]!==y&&e.call(r,t._values[n],t._keys[n],t);return undefined}}),Object.defineProperty(d.prototype,"get",{configurable:!0,enumerable:!1,writable:!0,value:function(e){var t=this;if("object"!=typeof t)throw new TypeError("Method Map.prototype.get called on incompatible receiver "+Object.prototype.toString.call(t));if(!0!==t._es6Map)throw new TypeError("Method Map.prototype.get called on incompatible receiver "+Object.prototype.toString.call(t));for(var r=t._keys,o=0;o<r.length;o++)if(t._keys[o]!==y&&u(t._keys[o],e))return t._values[o];return undefined}}),Object.defineProperty(d.prototype,"has",{configurable:!0,enumerable:!1,writable:!0,value:function(e){var t=this;if("object"!=typeof t)throw new TypeError("Method Map.prototype.has called on incompatible receiver "+Object.prototype.toString.call(t));if(!0!==t._es6Map)throw new TypeError("Method Map.prototype.has called on incompatible receiver "+Object.prototype.toString.call(t));for(var r=t._keys,o=0;o<r.length;o++)if(t._keys[o]!==y&&u(t._keys[o],e))return!0;return!1}}),Object.defineProperty(d.prototype,"keys",{configurable:!0,enumerable:!1,writable:!0,value:function(){return p(this,"key")}}),Object.defineProperty(d.prototype,"set",{configurable:!0,enumerable:!1,writable:!0,value:function(e,t){var r=this;if("object"!=typeof r)throw new TypeError("Method Map.prototype.set called on incompatible receiver "+Object.prototype.toString.call(r));if(!0!==r._es6Map)throw new TypeError("Method Map.prototype.set called on incompatible receiver "+Object.prototype.toString.call(r));for(var o=r._keys,n=0;n<o.length;n++)if(r._keys[n]!==y&&u(r._keys[n],e))return r._values[n]=t,r;-0===e&&(e=0);var a={};return a["[[Key]]"]=e,a["[[Value]]"]=t,r._keys.push(a["[[Key]]"]),r._values.push(a["[[Value]]"]),++r._size,b||(r.size=r._size),r}}),b&&Object.defineProperty(d.prototype,"size",{configurable:!0,enumerable:!1,get:function(){var e=this;if("object"!=typeof e)throw new TypeError("Method Map.prototype.size called on incompatible receiver "+Object.prototype.toString.call(e));if(!0!==e._es6Map)throw new TypeError("Method Map.prototype.size called on incompatible receiver "+Object.prototype.toString.call(e));for(var t=e._keys,r=0,o=0;o<t.length;o++)e._keys[o]!==y&&(r+=1);return r},set:undefined}),Object.defineProperty(d.prototype,"values",{configurable:!0,enumerable:!1,writable:!0,value:function(){return p(this,"value")}}),Object.defineProperty(d.prototype,Symbol.iterator,{configurable:!0,enumerable:!1,writable:!0,value:d.prototype.entries}),"name"in d||Object.defineProperty(d,"name",{configurable:!0,enumerable:!1,writable:!1,value:"Map"});var v={isMapIterator:!0,next:function(){var e=this;if("object"!=typeof e)throw new TypeError("Method %MapIteratorPrototype%.next called on incompatible receiver "+Object.prototype.toString.call(e));if(!e.isMapIterator)throw new TypeError("Method %MapIteratorPrototype%.next called on incompatible receiver "+Object.prototype.toString.call(e));var t=e["[[Map]]"],r=e["[[MapNextIndex]]"],o=e["[[MapIterationKind]]"];if(t===undefined)return c(undefined,!0);if(!t._es6Map)throw new Error;for(var n=t._keys,a=n.length;r<a;){var i=Object.create(null);if(i["[[Key]]"]=t._keys[r],i["[[Value]]"]=t._values[r],r+=1,e["[[MapNextIndex]]"]=r,i["[[Key]]"]!==y){if("key"===o)var l=i["[[Key]]"];else if("value"===o)var l=i["[[Value]]"];else{if("key+value"!==o)throw new Error;var l=[i["[[Key]]"],i["[[Value]]"]]}return c(l,!1)}}return e["[[Map]]"]=undefined,c(undefined,!0)}};Object.defineProperty(v,Symbol.iterator,{configurable:!0,enumerable:!1,writable:!0,value:function(){return this}});try{Object.defineProperty(e,"Map",{configurable:!0,enumerable:!1,writable:!0,value:d})}catch(h){e.Map=d}}(this);!function(){function t(t){if(!(0 in arguments))throw new TypeError("1 argument is required");do{if(this===t)return!0}while(t=t&&t.parentNode);return!1}if("HTMLElement"in this&&"contains"in HTMLElement.prototype)try{delete HTMLElement.prototype.contains}catch(e){}"Node"in this?Node.prototype.contains=t:document.contains=Element.prototype.contains=t}();!function(n){function t(e){if(r[e])return r[e].exports;var o=r[e]={exports:{},id:e,loaded:!1};return n[e].call(o.exports,o,o.exports,t),o.loaded=!0,o.exports}var r={};t.m=n,t.c=r,t.p="",t(0)}({0:function(n,t,r){(function(n){var t=r(80);try{(n||{}).Promise=t,window.Promise=t}catch(e){}}).call(t,function(){return this}())},80:function(n,t){(function(t){!function(){"use strict";function r(){return en[B][G]||J}function e(n,t){for(var r in t)n[r]=t[r]}function o(n){return n&&"object"==typeof n}function i(n){return"function"==typeof n}function u(n,t){return n instanceof t}function c(n){return u(n,U)}function f(n,t,r){if(!t(n))throw v(r)}function s(){try{return C.apply(F,arguments)}catch(e){return nn.e=e,nn}}function a(n,t){return C=n,F=t,s}function l(n,t){function r(){for(var r=0;r<o;)t(e[r],e[r+1]),e[r++]=S,e[r++]=S;o=0,e.length>n&&(e.length=n)}var e=O(n),o=0;return function(n,t){e[o++]=n,e[o++]=t,2===o&&en.nextTick(r)}}function h(n,t){var r,e,o,c,f=0;if(!n)throw v(V);var s=n[en[B][D]];if(i(s))e=s.call(n);else{if(!i(n.next)){if(u(n,O)){for(r=n.length;f<r;)t(n[f],f++);return f}throw v(V)}e=n}for(;!(o=e.next()).done;)if((c=a(t)(o.value,f++))===nn)throw i(e[K])&&eK,c.e;return f}function v(n){return new TypeError(n)}function _(n){return(n?"":W)+(new U).stack}function d(n,t){var r="on"+n.toLowerCase(),e=H[r];I&&I.listeners(n).length?n===Z?I.emit(n,t._v,t):I.emit(n,t):e?e({reason:t._v,promise:t}):enn}function p(n){return n&&n.s}function w(n){if(p(n))return new n(tn);var t,r,e;return t=new n(function(n,o){if(t)throw v();r=n,e=o}),f(r,i),f(e,i),t}function m(n,t){return function(r){A&&(n[Q]=(!0)),t===q?T(n,r):k(n,t,r)}}function y(n,t,r,e){return i(r)&&(t._onFulfilled=r),i(e)&&(n[M]&&d(Y,n),t._onRejected=e),A&&(t._p=n),n[n._c++]=t,n._s!==z&&on(n,t),t}function j(n){if(n._umark)return!0;n._umark=!0;for(var t,r=0,e=n._c;r<e;)if(t=n[r++],t._onRejected||j(t))return!0}function x(n,t){function r(n){return e.push(n.replace(/^\s+|\s+$/g,""))}var e=[];return A&&(t[Q]&&r(t[Q]),function o(n){n&&N in n&&(o(n._next),r(n[N]+""),o(n._p))}(t)),(n&&n.stack?n.stack:n)+("\n"+e.join("\n")).replace(rn,"")}function g(n,t){return n(t)}function k(n,t,r){var e=0,o=n._c;if(n._s===z)for(n._s=t,n._v=r,t===$&&(A&&c(r)&&(r.longStack=x(r,n)),un(n));e<o;)on(n,n[e++]);return n}function T(n,t){if(t===n&&t)return k(n,$,v(X)),n;if(t!==P&&(i(t)||o(t))){var r=a(b)(t);if(r===nn)return k(n,$,r.e),n;i(r)?(A&&p(t)&&(n._next=t),p(t)?R(n,t,r):en.nextTick(function(){R(n,t,r)})):k(n,q,t)}else k(n,q,t);return n}function b(n){return n.then}function R(n,t,r){var e=a(r,t)(function(r){t&&(t=P,T(n,r))},function(r){t&&(t=P,k(n,$,r))});e===nn&&t&&(k(n,$,e.e),t=P)}var S,C,F,P=null,E="object"==typeof window,H=E?window:t,I=H.process,L=H.console,A=!1,O=Array,U=Error,$=1,q=2,z=3,B="Symbol",D="iterator",G="species",J=B+"("+G+")",K="return",M="_uh",N="_pt",Q="_st",V="Invalid argument",W="\nFrom previous ",X="Chaining cycle detected for promise",Y="rejectionHandled",Z="unhandledRejection",nn={e:P},tn=function(){},rn=/^.+/node_modules/yaku/.+\n?/gm,en=n.exports=function(n){var t,r=this;if(!o(r)||r._s!==S)throw v("Invalid this");if(r.s=z,A&&(r[N]=()),n!==tn){if(!i(n))throw v(V);(t=a(n)(m(r,q),m(r,$)))===nn&&k(r,$,t.e)}};en["default"]=en,e(en.prototype,{then:function(n,t){if(void 0===this._s)throw v();return y(this,w(en.speciesConstructor(this,en)),n,t)},"catch":function(n){return this.then(S,n)},"finally":function(n){function t(t){return en.resolve(n()).then(function(){return t})}return this.then(t,t)},_c:0,_p:P}),en.resolve=function(n){return p(n)?n:T(w(this),n)},en.reject=function(n){return k(w(this),$,n)},en.race=function(n){var t=this,r=w(t),e=function(n){k(r,q,n)},o=function(n){k(r,$,n)},i=a(h)(n,function(n){t.resolve(n).then(e,o)});return i===nn?t.reject(i.e):r},en.all=function(n){function t(n){k(o,$,n)}var r,e=this,o=w(e),i=[];return r=a(h)(n,function(n,u){e.resolve(n).then(function(n){i[u]=n,--r||k(o,q,i)},t)}),r===nn?e.reject(r.e):(r||k(o,q,[]),o)},en.Symbol=H[B]||{},a(function(){Object.defineProperty(en,r(),{get:function(){return this}})})(),en.speciesConstructor=function(n,t){var e=n.constructor;return e?e[r()]||t:t},en.unhandledRejection=function(n,t){L&&L.error("Uncaught (in promise)",A?t.longStack:x(n,t))},en.rejectionHandled=tn,en.enableLongStackTrace=function(){A=!0},en.nextTick=E?function(n){setTimeout(n)}:I.nextTick,en._s=1;var on=l(999,function(n,t){var r,e;return e=n._s!==$?t._onFulfilled:t._onRejected,e===S?void k(t,n._s,n._v):(r=a(g)(e,n._v),r===nn?void k(t,$,r.e):void T(t,r))}),un=l(9,function(n){j(n)||(n[M]=1,d(Z,n))})}()}).call(t,function(){return this}())}});!function(t){function e(t){return Number.isNaN(t)?r:t}function i(t){return t===r?NaN:t}function n(t,e){var i=0;return{next:function(){for(;t._values[i]===o;)i++;return i===t._values.length?{value:void 0,done:!0}:{value:e.call(t,i++),done:!1}}}}var o=Symbol("undef"),r=Symbol("NaN"),s=function(){var t=arguments[0];this._values=[],this.size=this._size=0,t&&"function"==typeof t.forEach&&t.forEach(function(t){this.add.call(this,t)},this)};try{Object.defineProperty(s.prototype,"size",{get:function(){return this._size}})}catch(u){}s.prototype.add=function(t){return t=e(t),-1===this._values.indexOf(t)&&(this._values.push(t),this.size=++this._size),this},s.prototype.has=function(t){return-1!==this._values.indexOf(e(t))},s.prototype["delete"]=function(t){var i=this._values.indexOf(e(t));return-1!==i&&(this._values[i]=o,this.size=--this._size,!0)},s.prototype.clear=function(){this._values=[],this.size=this._size=0},s.prototype[Symbol.iterator]=s.prototype.values=s.prototype.keys=function(){var t=n(this,function(t){return i(this._values[t])});return t[Symbol.iterator]=this.keys.bind(this),t},s.prototype.entries=function(){var t=n(this,function(t){return[i(this._values[t]),i(this._values[t])]});return t[Symbol.iterator]=this.entries.bind(this),t},s.prototype.forEach=function(e,i){i=i||t;for(var n=this.entries(),o=n.next();!1===o.done;)e.call(i,o.value[1],o.value[0],this),o=n.next()},s.prototype.constructor=s.prototype[Symbol.species]=s,s.prototype.constructor=s,s.name="Set",t.Set=s}(this);String.prototype.endsWith=function(t){var n=arguments.length<2?this.length:arguments[1],e=this.lastIndexOf(t);return-1!==e&&e===n-t.length};String.prototype.startsWith=function(t){var i=arguments.length<2?0:arguments[1];return 0===this.slice(i).indexOf(t)};!function(e){"use strict";function t(t){return!!t&&("Symbol"in e&&"iterator"in e.Symbol&&"function"==typeof t[Symbol.iterator]||!!Array.isArray(t))}function n(e){return"from"in Array?Array.from(e):Array.prototype.slice.call(e)}!function(){function r(e){var t="",n=!0;return e.forEach(function(e){var r=encodeURIComponent(e.name),a=encodeURIComponent(e.value);n||(t+="&"),t+=r+"="+a,n=!1}),t.replace(/%20/g,"+")}function a(e,t){var n=e.split("&");t&&-1===n[0].indexOf("=")&&(n[0]="="+n[0]);var r=[];n.forEach(function(e){if(0!==e.length){var t=e.indexOf("=");if(-1!==t)var n=e.substring(0,t),a=e.substring(t+1);else n=e,a="";n=n.replace(/+/g," "),a=a.replace(/+/g," "),r.push({name:n,value:a})}});var a=[];return r.forEach(function(e){a.push({name:decodeURIComponent(e.name),value:decodeURIComponent(e.value)})}),a}function i(e){if(c)return new s(e);var t=document.createElement("a");return t.href=e,t}function o(e){var i=this;this._list=[],e===undefined||null===e||(e instanceof o?this._list=a(String(e)):"object"==typeof e&&t(e)?n(e).forEach(function(e){if(!t(e))throw TypeError();var r=n(e);if(2!==r.length)throw TypeError();i._list.push({name:String(r[0]),value:String(r[1])})}):"object"==typeof e&&e?Object.keys(e).forEach(function(t){i._list.push({name:String(t),value:String(e[t])})}):(e=String(e),"?"===e.substring(0,1)&&(e=e.substring(1)),this._list=a(e))),this._url_object=null,this._setList=function(e){u||(i._list=e)};var u=!1;this._update_steps=function(){u||(u=!0,i._url_object&&("about:"===i._url_object.protocol&&-1!==i._url_object.pathname.indexOf("?")&&(i._url_object.pathname=i._url_object.pathname.split("?")[0]),i._url_object.search=r(i._list),u=!1))}}function u(e,t){var n=0;this.next=function(){if(n>=e.length)return{done:!0,value:undefined};var r=e[n++];return{done:!1,value:"key"===t?r.name:"value"===t?r.value:[r.name,r.value]}}}function l(t,n){function r(){var e=l.href.replace(/#$|?$|?(?=#)/g,"");l.href!==e&&(l.href=e)}function u(){m._setList(l.search?a(l.search.substring(1)):[]),m._update_steps()}if(!(this instanceof e.URL))throw new TypeError("Failed to construct 'URL': Please use the 'new' operator.");n&&(t=function(){if(c)return new s(t,n).href;var e;try{var r;if("[object OperaMini]"===Object.prototype.toString.call(window.operamini)?(e=document.createElement("iframe"),e.style.display="none",document.documentElement.appendChild(e),r=e.contentWindow.document):document.implementation&&document.implementation.createHTMLDocument?r=document.implementation.createHTMLDocument(""):document.implementation&&document.implementation.createDocument?(r=document.implementation.createDocument("http://www.w3.org/1999/xhtml","html",null),r.documentElement.appendChild(r.createElement("head")),r.documentElement.appendChild(r.createElement("body"))):window.ActiveXObject&&(r=new window.ActiveXObject("htmlfile"),r.write(""),r.close()),!r)throw Error("base not supported");var a=r.createElement("base");a.href=n,r.getElementsByTagName("head")[0].appendChild(a);var i=r.createElement("a");return i.href=t,i.href}finally{e&&e.parentNode.removeChild(e)}}());var l=i(t||""),f=function(){if(!("defineProperties"in Object))return!1;try{var e={};return Object.defineProperties(e,{prop:{get:function(){return!0}}}),e.prop}catch(t){return!1}}(),h=f?this:document.createElement("a"),m=new o(l.search?l.search.substring(1):null);return m._url_object=h,Object.defineProperties(h,{href:{get:function(){return l.href},set:function(e){l.href=e,r(),u()},enumerable:!0,configurable:!0},origin:{get:function(){return"origin"in l?l.origin:this.protocol+"//"+this.host},enumerable:!0,configurable:!0},protocol:{get:function(){return l.protocol},set:function(e){l.protocol=e},enumerable:!0,configurable:!0},username:{get:function(){return l.username},set:function(e){l.username=e},enumerable:!0,configurable:!0},password:{get:function(){return l.password},set:function(e){l.password=e},enumerable:!0,configurable:!0},host:{get:function(){var e={"http:":/:80$/,"https:":/:443$/,"ftp:":/:21$/}[l.protocol];return e?l.host.replace(e,""):l.host},set:function(e){l.host=e},enumerable:!0,configurable:!0},hostname:{get:function(){return l.hostname},set:function(e){l.hostname=e},enumerable:!0,configurable:!0},port:{get:function(){return l.port},set:function(e){l.port=e},enumerable:!0,configurable:!0},pathname:{get:function(){return"/"!==l.pathname.charAt(0)?"/"+l.pathname:l.pathname},set:function(e){l.pathname=e},enumerable:!0,configurable:!0},search:{get:function(){return l.search},set:function(e){l.search!==e&&(l.search=e,r(),u())},enumerable:!0,configurable:!0},searchParams:{get:function(){return m},enumerable:!0,configurable:!0},hash:{get:function(){return l.hash},set:function(e){l.hash=e,r()},enumerable:!0,configurable:!0},toString:{value:function(){return l.toString()},enumerable:!1,configurable:!0},valueOf:{value:function(){return l.valueOf()},enumerable:!1,configurable:!0}}),h}var c,s=e.URL;try{if(s){if("searchParams"in(c=new e.URL("http://example.com")))return;"href"in c||(c=undefined)}}catch(h){}if(Object.defineProperties(o.prototype,{append:{value:function(e,t){this._list.push({name:e,value:t}),this._update_steps()},writable:!0,enumerable:!0,configurable:!0},"delete":{value:function(e){for(var t=0;t<this._list.length;)this._list[t].name===e?this._list.splice(t,1):++t;this._update_steps()},writable:!0,enumerable:!0,configurable:!0},get:{value:function(e){for(var t=0;t<this._list.length;++t)if(this._list[t].name===e)return this._list[t].value;return null},writable:!0,enumerable:!0,configurable:!0},getAll:{value:function(e){for(var t=[],n=0;n<this._list.length;++n)this._list[n].name===e&&t.push(this._list[n].value);return t},writable:!0,enumerable:!0,configurable:!0},has:{value:function(e){for(var t=0;t<this._list.length;++t)if(this._list[t].name===e)return!0;return!1},writable:!0,enumerable:!0,configurable:!0},set:{value:function(e,t){for(var n=!1,r=0;r<this._list.length;)this._list[r].name===e?n?this._list.splice(r,1):(this._list[r].value=t,n=!0,++r):++r;n||this._list.push({name:e,value:t}),this._update_steps()},writable:!0,enumerable:!0,configurable:!0},entries:{value:function(){return new u(this._list,"key+value")},writable:!0,enumerable:!0,configurable:!0},keys:{value:function(){return new u(this._list,"key")},writable:!0,enumerable:!0,configurable:!0},values:{value:function(){return new u(this._list,"value")},writable:!0,enumerable:!0,configurable:!0},forEach:{value:function(e){var t=arguments.length>1?arguments[1]:undefined;this._list.forEach(function(n,r){e.call(t,n.value,n.name)})},writable:!0,enumerable:!0,configurable:!0},toString:{value:function(){return r(this._list)},writable:!0,enumerable:!1,configurable:!0}}),"Symbol"in e&&"iterator"in e.Symbol&&(Object.defineProperty(o.prototype,e.Symbol.iterator,{value:o.prototype.entries,writable:!0,enumerable:!0,configurable:!0}),Object.defineProperty(u.prototype,e.Symbol.iterator,{value:function(){return this},writable:!0,enumerable:!0,configurable:!0})),s)for(var f in s)s.hasOwnProperty(f)&&"function"==typeof s[f]&&(l[f]=s[f]);e.URL=l,e.URLSearchParams=o}(),function(){if("1"!==new e.URLSearchParams([["a",1]]).get("a")||"1"!==new e.URLSearchParams({a:1}).get("a")){var r=e.URLSearchParams;e.URLSearchParams=function(e){if(e&&"object"==typeof e&&t(e)){var a=new r;return n(e).forEach(function(e){if(!t(e))throw TypeError();var r=n(e);if(2!==r.length)throw TypeError();a.append(r[0],r[1])}),a}return e&&"object"==typeof e?(a=new r,Object.keys(e).forEach(function(t){a.set(t,e[t])}),a):new r(e)}}}()}(self);}).call('object' === typeof window && window || 'object' === typeof self && self || 'object' === typeof global && global || {});

TableListHelper.cs

using System;
using System.Collections;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;

namespace BulidDtoClass
{
public static class TableListHelper
{

    /// <summary>  
    /// 转化一个DataTable  
    /// </summary>  
    /// <typeparam name="T"></typeparam>  
    /// <param name="list"></param>  
    /// <returns></returns>  
    public static DataTable ToDataTable<T>(this IEnumerable<T> list)
    {
        //创建属性的集合  
        List<PropertyInfo> pList = new List<PropertyInfo>();
        //获得反射的入口  
        Type type = typeof(T);
        DataTable dt = new DataTable();
        //把所有的public属性加入到集合 并添加DataTable的列  
        Array.ForEach<PropertyInfo>(type.GetProperties(), p => { pList.Add(p); dt.Columns.Add(p.Name, p.PropertyType); });
        foreach (var item in list)
        {
            //创建一个DataRow实例  
            DataRow row = dt.NewRow();
            //给row 赋值  
            pList.ForEach(p => row[p.Name] = p.GetValue(item, null));
            //加入到DataTable  
            dt.Rows.Add(row);
        }
        return dt;
    }


    /// <summary>  
    /// DataTable 转换为List 集合  
    /// </summary>  
    /// <typeparam name="TResult">类型</typeparam>  
    /// <param name="dt">DataTable</param>  
    /// <returns></returns>  
    public static List<T> ToList<T>(this DataTable dt) where T : class, new()
    {
        //创建一个属性的列表  
        List<PropertyInfo> prlist = new List<PropertyInfo>();
        //获取TResult的类型实例  反射的入口  

        Type t = typeof(T);

        //获得TResult 的所有的Public 属性 并找出TResult属性和DataTable的列名称相同的属性(PropertyInfo) 并加入到属性列表   
        Array.ForEach<PropertyInfo>(t.GetProperties(), p => { if (dt.Columns.IndexOf(p.Name) != -1) prlist.Add(p); });

        //创建返回的集合  

        List<T> oblist = new List<T>();

        foreach (DataRow row in dt.Rows)
        {
            //创建TResult的实例  
            T ob = new T();
            //找到对应的数据  并赋值  
            prlist.ForEach(p => { if (row[p.Name] != DBNull.Value) p.SetValue(ob, row[p.Name], null); });
            //放入到返回的集合中.  
            oblist.Add(ob);
        }
        return oblist;
    }


    /// <summary>  
    /// 将集合类转换成DataTable  
    /// </summary>  
    /// <param name="list">集合</param>  
    /// <returns></returns>  
    public static DataTable ToDataTableTow(IList list)
    {
        DataTable result = new DataTable();
        if (list.Count > 0)
        {
            PropertyInfo[] propertys = list[0].GetType().GetProperties();

            foreach (PropertyInfo pi in propertys)
            {
                result.Columns.Add(pi.Name, pi.PropertyType);
            }
            for (int i = 0; i < list.Count; i++)
            {
                ArrayList tempList = new ArrayList();
                foreach (PropertyInfo pi in propertys)
                {
                    object obj = pi.GetValue(list[i], null);
                    tempList.Add(obj);
                }
                object[] array = tempList.ToArray();
                result.LoadDataRow(array, true);
            }
        }
        return result;
    }


    /// <summary>  
    /// 将泛型集合类转换成DataTable  
    /// </summary>  
    /// <typeparam name="T">集合项类型</typeparam>  
    /// <param name="list">集合</param>  
    /// <param name="propertyName">需要返回的列的列名</param>  
    /// <returns>数据集(表)</returns>  
    public static DataTable ToDataTable<T>(IList<T> list, params string[] propertyName)
    {
        List<string> propertyNameList = new List<string>();
        if (propertyName != null)
            propertyNameList.AddRange(propertyName);
        DataTable result = new DataTable();
        if (list.Count > 0)
        {
            PropertyInfo[] propertys = list[0].GetType().GetProperties();
            foreach (PropertyInfo pi in propertys)
            {
                if (propertyNameList.Count == 0)
                {
                    result.Columns.Add(pi.Name, pi.PropertyType);
                }
                else
                {
                    if (propertyNameList.Contains(pi.Name))
                        result.Columns.Add(pi.Name, pi.PropertyType);
                }
            }

            for (int i = 0; i < list.Count; i++)
            {
                ArrayList tempList = new ArrayList();
                foreach (PropertyInfo pi in propertys)
                {
                    if (propertyNameList.Count == 0)
                    {
                        object obj = pi.GetValue(list[i], null);
                        tempList.Add(obj);
                    }
                    else
                    {
                        if (propertyNameList.Contains(pi.Name))
                        {
                            object obj = pi.GetValue(list[i], null);
                            tempList.Add(obj);
                        }
                    }
                }
                object[] array = tempList.ToArray();
                result.LoadDataRow(array, true);
            }
        }
        return result;
    }

}

}

ClassGeneratHelper.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.Data.SqlClient;
using System.Text.RegularExpressions;
using System.Configuration;

namespace BulidDtoClass
{
///


/// ** 描述:实体生成类
///

public class ClassGeneratHelper
{
///
/// 根据匿名类获取实体类的字符串
///

/// 匿名对象
/// 生成的类名
///
public static string DynamicToClass(object entity, string className)
{
StringBuilder reval = new StringBuilder();
StringBuilder propertiesValue = new StringBuilder();
var propertiesObj = entity.GetType().GetProperties();
string replaceGuid = Guid.NewGuid().ToString();
string nullable = string.Empty;
foreach (var r in propertiesObj)
{

            var type = r.PropertyType;
            if (type.IsGenericType && type.GetGenericTypeDefinition() == typeof(Nullable<>))
            {
                type = type.GetGenericArguments()[0];
                nullable = "?";
            }
            if (!type.Namespace.Contains("System.Collections.Generic"))
            {
                propertiesValue.AppendLine();
                string typeName = ChangeType(type);
                propertiesValue.AppendFormat("public {0}{3} {1} {2}", typeName, r.Name, "{get;set;}", nullable);
                propertiesValue.AppendLine();
            }
        }

        reval.AppendFormat(@"
             public class {0}{{
                    {1}
             }}
        ", className, propertiesValue);


        return reval.ToString();
    }


    /// <summary>
    /// 根据DataTable获取实体类的字符串
    /// </summary>
    /// <param name="sql"></param>
    /// <param name="className"></param>
    /// <returns></returns>
    public static string DataTableToClass(DataTable dt, string className)
    {
        StringBuilder reval = new StringBuilder();
        StringBuilder propertiesValue = new StringBuilder();
        string replaceGuid = Guid.NewGuid().ToString();
        foreach (DataColumn r in dt.Columns)
        {
            propertiesValue.AppendLine();
            string typeName = ChangeType(r.DataType);
            propertiesValue.AppendLine("        " + ConfigurationManager.AppSettings["PropertyFeature"]);
            propertiesValue.AppendFormat("        public {0} {1} {2}", typeName, r.ColumnName, "{get;set;}");
            propertiesValue.AppendLine();
        }
        var classFeature = ConfigurationManager.AppSettings["ClassFeature"];
        reval.AppendFormat(@"
{0}
public class {1}
{{
{2}
}}
        ", classFeature, className, propertiesValue);


        return reval.ToString();
    }

    /// <summary>
    ///  根据SQL语句获取实体类的字符串
    /// </summary>
    /// <param name="sql">SQL语句</param>
    /// <param name="className">生成的类名</param>
    /// <param name="server">服务名</param>
    /// <param name="database">数据库名称</param>
    /// <param name="uid">账号</param>
    /// <param name="pwd">密码</param>
    /// <returns></returns>
    public static string SqlToClass(string sql, string className, string server, string database, string uid, string pwd)
    {
        using (SqlConnection conn = new SqlConnection(string.Format("server={0};uid={2};pwd={3};database={1}", server, database, uid, pwd)))
        {
            SqlCommand command = new SqlCommand();
            command.Connection = conn;
            command.CommandText = sql;
            DataTable dt = new DataTable();
            SqlDataAdapter sad = new SqlDataAdapter(command);
            sad.Fill(dt);
            var reval = DataTableToClass(dt, className);
            return reval;
        }
    }
    /// <summary>
    ///  根据SQL语句获取实体类的字符串
    /// </summary>
    /// <param name="sql">SQL语句</param>
    /// <param name="className">生成的类名</param>
    /// <param name="connName">webconfig的connectionStrings name</param>
    /// <returns></returns>
    public static string SqlToClass(string sql, string className, string connName)
    {
        string connstr = System.Configuration.ConfigurationManager.ConnectionStrings[connName].ToString();
        if (connstr.Contains("metadata"))//ef
            connstr = Regex.Match(connstr, @"connection string\=""(.+)""").Groups[1].Value;
        using (SqlConnection conn = new SqlConnection(connstr))
        {
            SqlCommand command = new SqlCommand();
            command.Connection = conn;
            command.CommandText = sql;
            DataTable dt = new DataTable();
            SqlDataAdapter sad = new SqlDataAdapter(command);
            sad.Fill(dt);
            var reval = DataTableToClass(dt, className);
            return reval;
        }
    }
    /// <summary>
    /// 匹配类型
    /// </summary>
    /// <param name="type"></param>
    /// <returns></returns>
    private static string ChangeType(Type type)
    {
        string typeName = type.Name;
        switch (typeName)
        {
            case "Int32": typeName = "int"; break;
            case "String": typeName = "string"; break;
        }
        return typeName;
    }
}

}

Program.cs

using System;
using System.Collections.Generic;
using System.Configuration;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace BulidDtoClass
{
class Program
{
static void Main(string[] args)
{
var namespaceName = ConfigurationManager.AppSettings["namespaceName"] ?? "BulidDto_" + DateTime.Now.ToString("yyyyMMdd");

        var usingList = ConfigurationManager.AppSettings["UsingList"];
        var outPath = ConfigurationManager.AppSettings["OutPath"];
        var tableNames = SqlHelper.ExecuteDataTable("select name from sysobjects where xtype = 'U' ").ToList<DataTableName>();
        foreach (var tableName in tableNames)
        {
            var outClass = @"using System;

using System.Collections.Generic;
using System.Linq;
using System.Text;
";
outClass += usingList;
outClass += @"
namespace " + namespaceName;
outClass += @"
{";
var tableData = SqlHelper.ExecuteDataTable("select * from " + tableName.Name);
var classCode = ClassGeneratHelper.DataTableToClass(tableData, tableName.Name + "Dto");
outClass += classCode;
outClass += @"
}";
System.IO.File.AppendAllText(Path.Combine(outPath, tableName.Name + "Dto.cs"), outClass);
}
}
}

public class DataTableName
{
    public string Name { get; set; }
}

}

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.